diff options
author | Akira Akashi <rubenru09@aol.com> | 2021-05-23 22:30:03 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-23 22:30:03 +0100 |
commit | a978faa0d8c222c5fce4db4f0dad19ed235eecfc (patch) | |
tree | b49471083bf3db7a922a9392ca5168202c740b4a | |
parent | efd77268ed8b1845922ac72f3b104d01ffd971c4 (diff) | |
parent | a6f7fce337711f4b9f2619177b4b6a3380c3cb4f (diff) |
Merge pull request #385 from PikalaxALT/pikalax_work
[LEAK-INFORMED] Split nitro system libraries
191 files changed, 33494 insertions, 29575 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 0be7bc5a..5d1426c3 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -356,8 +356,81 @@ Static arm9 Object WCM_util.o Object WIFI_stubsmd5_dummy.o Object libVCT.o - Object unk_020ADA84.o - Object sndlib.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 @@ -365,6 +438,7 @@ Static arm9 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 diff --git a/arm9/asm/NNS_FND_allocator.s b/arm9/asm/NNS_FND_allocator.s new file mode 100644 index 00000000..537ce6a0 --- /dev/null +++ b/arm9/asm/NNS_FND_allocator.s @@ -0,0 +1,65 @@ + .include "asm/macros.inc" + .include "global.inc" + .rodata + ; static const in function + + .global sAllocatorFunc$7864 +sAllocatorFunc$7864: ; 0x020FF7CC + .word AllocatorAllocForExpHeap + .word AllocatorFreeForExpHeap + .text + + arm_func_start NNS_FndInitAllocatorForExpHeap +NNS_FndInitAllocatorForExpHeap: ; 0x020AE82C + ldr ip, _020AE848 ; =sAllocatorFunc$7864 + mov r3, #0x0 + str r12, [r0, #0x0] + str r1, [r0, #0x4] + str r2, [r0, #0x8] + str r3, [r0, #0xc] + bx lr + .balign 4 +_020AE848: .word sAllocatorFunc$7864 + arm_func_end NNS_FndInitAllocatorForExpHeap + + arm_func_start NNS_FndFreeToAllocator +NNS_FndFreeToAllocator: ; 0x020AE84C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + ldr r2, [r2, #0x4] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndFreeToAllocator + + arm_func_start NNS_FndAllocFromAllocator +NNS_FndAllocFromAllocator: ; 0x020AE868 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + ldr r2, [r2, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndAllocFromAllocator + + arm_func_start AllocatorFreeForExpHeap +AllocatorFreeForExpHeap: ; 0x020AE884 + ldr ip, _020AE890 ; =NNS_FndFreeToExpHeap + ldr r0, [r0, #0x4] + bx r12 + .balign 4 +_020AE890: .word NNS_FndFreeToExpHeap + arm_func_end AllocatorFreeForExpHeap + + arm_func_start AllocatorAllocForExpHeap +AllocatorAllocForExpHeap: ; 0x020AE894 + ldr ip, _020AE8A8 ; =NNS_FndAllocFromExpHeapEx + mov r2, r0 + ldr r0, [r2, #0x4] + ldr r2, [r2, #0x8] + bx r12 + .balign 4 +_020AE8A8: .word NNS_FndAllocFromExpHeapEx + arm_func_end AllocatorAllocForExpHeap diff --git a/arm9/asm/NNS_FND_expheap.s b/arm9/asm/NNS_FND_expheap.s new file mode 100644 index 00000000..e94dba38 --- /dev/null +++ b/arm9/asm/NNS_FND_expheap.s @@ -0,0 +1,583 @@ + .include "asm/macros.inc" + .include "global.inc" + .extern NNSi_FndInitHeapHead + .extern NNSi_FndFinalizeHeap + .text + + arm_func_start NNS_FndGetSizeForMBlockExpHeap +NNS_FndGetSizeForMBlockExpHeap: ; 0x020ADDC0 + ldr r0, [r0, #-0xc] + bx lr + arm_func_end NNS_FndGetSizeForMBlockExpHeap + + arm_func_start NNS_FndGetTotalFreeSizeForExpHeap +NNS_FndGetTotalFreeSizeForExpHeap: ; 0x020ADDC8 + ldr r2, [r0, #0x24] + mov r0, #0x0 + cmp r2, #0x0 + bxeq lr +_020ADDD8: + ldr r1, [r2, #0x4] + ldr r2, [r2, #0xc] + add r0, r0, r1 + cmp r2, #0x0 + bne _020ADDD8 + bx lr + arm_func_end NNS_FndGetTotalFreeSizeForExpHeap + + arm_func_start NNS_FndFreeToExpHeap +NNS_FndFreeToExpHeap: ; 0x020ADDF0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + sub r4, r1, #0x10 + add r5, r0, #0x24 + add r0, sp, #0x0 + mov r1, r4 + bl GetRegionOfMBlock + mov r1, r4 + add r0, r5, #0x8 + bl RemoveMBlock + add r1, sp, #0x0 + mov r0, r5 + bl RecycleRegion + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + arm_func_end NNS_FndFreeToExpHeap + + arm_func_start NNS_FndResizeForMBlockExpHeap +NNS_FndResizeForMBlockExpHeap: ; 0x020ADE2C + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x10 + mov r4, r1 + mov r10, r2 + sub r6, r4, #0x10 + add r1, r10, #0x3 + mov r5, r0 + ldr r8, [r6, #0x4] + bic r10, r1, #0x3 + cmp r10, r8 + add r7, r5, #0x24 + addeq sp, sp, #0x10 + moveq r0, r10 + ldmeqia sp!, {r4-r10,pc} + cmp r10, r8 + bls _020ADF60 + ldr r9, [r7, #0x0] + add r0, r6, #0x10 + cmp r9, #0x0 + add r0, r8, r0 + beq _020ADE94 +_020ADE80: + cmp r9, r0 + beq _020ADE94 + ldr r9, [r9, #0xc] + cmp r9, #0x0 + bne _020ADE80 +_020ADE94: + cmp r9, #0x0 + beq _020ADEB0 + ldr r0, [r9, #0x4] + add r1, r8, #0x10 + add r0, r1, r0 + cmp r10, r0 + bls _020ADEBC +_020ADEB0: + add sp, sp, #0x10 + mov r0, #0x0 + ldmia sp!, {r4-r10,pc} +_020ADEBC: + add r0, sp, #0x0 + mov r1, r9 + bl GetRegionOfMBlock + mov r0, r7 + mov r1, r9 + bl RemoveMBlock + ldr r2, [sp, #0x4] + add r3, r10, r4 + ldr r9, [sp, #0x0] + sub r1, r2, r3 + str r3, [sp, #0x0] + cmp r1, #0x10 + strcc r2, [sp, #0x0] + mov r8, r0 + ldr r0, [sp, #0x0] + sub r0, r0, r4 + str r0, [r6, #0x4] + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + sub r0, r1, r0 + cmp r0, #0x10 + blo _020ADF30 + ldr r1, _020ADF9C ; =0x00004652 + add r0, sp, #0x0 + bl InitMBlock + mov r1, r0 + mov r0, r7 + mov r2, r8 + bl InsertMBlock +_020ADF30: + ldr r0, [r5, #0x20] + ldr r1, [sp, #0x0] + and r0, r0, #0xff + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + sub r2, r1, r9 + ands r0, r0, #0x1 + beq _020ADF90 + mov r1, r9 + mov r0, #0x0 + bl MIi_CpuClear32 + b _020ADF90 +_020ADF60: + add r0, r10, r4 + str r0, [sp, #0x8] + ldr r1, [r6, #0x4] + add r0, r6, #0x10 + add r0, r1, r0 + str r0, [sp, #0xc] + add r1, sp, #0x8 + mov r0, r7 + str r10, [r6, #0x4] + bl RecycleRegion + cmp r0, #0x0 + streq r8, [r6, #0x4] +_020ADF90: + ldr r0, [r6, #0x4] + add sp, sp, #0x10 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020ADF9C: .word 0x00004652 + arm_func_end NNS_FndResizeForMBlockExpHeap + + arm_func_start NNS_FndAllocFromExpHeapEx +NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + moveq r1, #0x1 + add r1, r1, #0x3 + cmp r2, #0x0 + bic r1, r1, #0x3 + blt _020ADFCC + bl AllocFromHead + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADFCC: + rsb r2, r2, #0x0 + bl AllocFromTail + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndAllocFromExpHeapEx + + arm_func_start NNS_FndDestroyExpHeap +NNS_FndDestroyExpHeap: ; 0x020ADFDC + ldr ip, _020ADFE4 ; =NNSi_FndFinalizeHeap + bx r12 + .balign 4 +_020ADFE4: .word NNSi_FndFinalizeHeap + arm_func_end NNS_FndDestroyExpHeap + + arm_func_start NNS_FndCreateExpHeapEx +NNS_FndCreateExpHeapEx: ; 0x020ADFE8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + add r1, r1, r0 + add r0, r0, #0x3 + bic r1, r1, #0x3 + bic r0, r0, #0x3 + cmp r0, r1 + bhi _020AE014 + sub r3, r1, r0 + cmp r3, #0x4c + bhs _020AE020 +_020AE014: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020AE020: + bl InitExpHeap + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndCreateExpHeapEx + + arm_func_start RecycleRegion +RecycleRegion: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r1 + ldr r2, [r5, #0x0] + ldr r1, [r5, #0x4] + mov r6, r0 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + ldr r1, [r6, #0x0] + mov r4, #0x0 + cmp r1, #0x0 + beq _020AE0A0 + ldr r0, [r5, #0x0] +_020AE060: + cmp r1, r0 + movcc r4, r1 + blo _020AE094 + ldr r0, [r5, #0x4] + cmp r1, r0 + bne _020AE0A0 + ldr r2, [r1, #0x4] + add r0, r1, #0x10 + add r2, r2, r0 + mov r0, r6 + str r2, [sp, #0x4] + bl RemoveMBlock + b _020AE0A0 +_020AE094: + ldr r1, [r1, #0xc] + cmp r1, #0x0 + bne _020AE060 +_020AE0A0: + cmp r4, #0x0 + beq _020AE0D4 + ldr r2, [r4, #0x4] + add r1, r4, #0x10 + ldr r0, [r5, #0x0] + add r1, r2, r1 + cmp r1, r0 + bne _020AE0D4 + mov r0, r6 + mov r1, r4 + str r4, [sp, #0x0] + bl RemoveMBlock + mov r4, r0 +_020AE0D4: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + sub r0, r1, r0 + cmp r0, #0x10 + addcc sp, sp, #0x8 + movcc r0, #0x0 + ldmccia sp!, {r4-r6,pc} + ldr r1, _020AE118 ; =0x00004652 + add r0, sp, #0x0 + bl InitMBlock + mov r1, r0 + mov r0, r6 + mov r2, r4 + bl InsertMBlock + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AE118: .word 0x00004652 + arm_func_end RecycleRegion + + local_arm_func_start AllocFromTail +AllocFromTail: ; 0x020AE11C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + add r0, r0, #0x24 + ldrh r4, [r0, #0x12] + mov r3, r1 + mvn lr, #0x0 + and r1, r4, #0x1 + mov r1, r1, lsl #0x10 + movs r1, r1, lsr #0x10 + moveq r5, #0x1 + mov r1, #0x0 + ldr r4, [r0, #0x4] + movne r5, #0x0 + mov r12, r1 + cmp r4, #0x0 + beq _020AE1B0 + sub r2, r2, #0x1 + mvn r2, r2 +_020AE164: + ldr r8, [r4, #0x4] + add r9, r4, #0x10 + add r6, r8, r9 + sub r6, r6, r3 + and r7, r2, r6 + subs r6, r7, r9 + bmi _020AE1A4 + cmp lr, r8 + bls _020AE1A4 + mov r1, r4 + mov lr, r8 + mov r12, r7 + cmp r5, #0x0 + bne _020AE1B0 + cmp r8, r3 + beq _020AE1B0 +_020AE1A4: + ldr r4, [r4, #0x8] + cmp r4, #0x0 + bne _020AE164 +_020AE1B0: + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} + mov r4, #0x1 + mov r2, r12 + str r4, [sp, #0x0] + bl AllocUsedBlockFromFreeBlock + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + arm_func_end AllocFromTail + + local_arm_func_start AllocFromHead +AllocFromHead: ; 0x020AE1D8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + add r0, r0, #0x24 + ldrh r4, [r0, #0x12] + mov r3, r1 + ldr r5, [r0, #0x0] + and r1, r4, #0x1 + mov r1, r1, lsl #0x10 + movs r1, r1, lsr #0x10 + moveq r6, #0x1 + mov r1, #0x0 + movne r6, #0x0 + mov lr, r1 + cmp r5, #0x0 + mvn r4, #0x0 + beq _020AE270 + sub r12, r2, #0x1 + mvn r2, r12 +_020AE220: + add r8, r5, #0x10 + add r7, r12, r8 + and r9, r2, r7 + sub r7, r9, r8 + ldr r8, [r5, #0x4] + add r7, r3, r7 + cmp r8, r7 + blo _020AE264 + cmp r4, r8 + bls _020AE264 + mov r1, r5 + mov r4, r8 + mov lr, r9 + cmp r6, #0x0 + bne _020AE270 + cmp r8, r3 + beq _020AE270 +_020AE264: + ldr r5, [r5, #0xc] + cmp r5, #0x0 + bne _020AE220 +_020AE270: + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} + mov r4, #0x0 + mov r2, lr + str r4, [sp, #0x0] + bl AllocUsedBlockFromFreeBlock + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + arm_func_end AllocFromHead + + arm_func_start AllocUsedBlockFromFreeBlock +AllocUsedBlockFromFreeBlock: ; 0x020AE298 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x18 + mov r7, r0 + add r0, sp, #0x0 + mov r8, r1 + mov r6, r2 + mov r5, r3 + bl GetRegionOfMBlock + ldr r3, [sp, #0x4] + sub r4, r6, #0x10 + add r2, r5, r6 + mov r0, r7 + mov r1, r8 + str r4, [sp, #0x4] + str r3, [sp, #0xc] + str r2, [sp, #0x8] + bl RemoveMBlock + ldr r2, [sp, #0x0] + ldr r1, [sp, #0x4] + mov r5, r0 + sub r0, r1, r2 + cmp r0, #0x10 + strcc r2, [sp, #0x4] + blo _020AE318 + ldr r1, _020AE418 ; =0x00004652 + add r0, sp, #0x0 + bl InitMBlock + mov r1, r0 + mov r0, r7 + mov r2, r5 + bl InsertMBlock + mov r5, r0 +_020AE318: + ldr r1, [sp, #0xc] + ldr r0, [sp, #0x8] + sub r0, r1, r0 + cmp r0, #0x10 + strcc r1, [sp, #0x8] + blo _020AE34C + ldr r1, _020AE418 ; =0x00004652 + add r0, sp, #0x8 + bl InitMBlock + mov r1, r0 + mov r0, r7 + mov r2, r5 + bl InsertMBlock +_020AE34C: + ldr r0, [r7, #-0x4] + ldr r1, [sp, #0x4] + and r0, r0, #0xff + mov r0, r0, lsl #0x10 + ldr r2, [sp, #0x8] + mov r0, r0, lsr #0x10 + sub r2, r2, r1 + ands r0, r0, #0x1 + beq _020AE378 + mov r0, #0x0 + bl MIi_CpuClear32 +_020AE378: + ldr r2, [sp, #0x8] + ldr r1, _020AE41C ; =0x00005544 + add r0, sp, #0x10 + str r4, [sp, #0x10] + str r2, [sp, #0x14] + bl InitMBlock + mov r1, r0 + ldrh r3, [r1, #0x2] + ldrh r2, [sp, #0x30] + add r0, r7, #0x8 + bic r3, r3, #0x8000 + strh r3, [r1, #0x2] + ldrh r3, [r1, #0x2] + and r2, r2, #0x1 + orr r2, r3, r2, lsl #0xf + strh r2, [r1, #0x2] + ldrh r2, [r1, #0x2] + ldr r3, [sp, #0x4] + bic r2, r2, #0x7f00 + strh r2, [r1, #0x2] + sub r2, r1, r3 + mov r2, r2, lsl #0x10 + mov r2, r2, lsr #0x10 + ldrh r3, [r1, #0x2] + and r2, r2, #0x7f + orr r2, r3, r2, lsl #0x8 + strh r2, [r1, #0x2] + ldrh r2, [r1, #0x2] + ldrh r3, [r7, #0x10] + bic r2, r2, #0xff + strh r2, [r1, #0x2] + ldrh r2, [r1, #0x2] + and r3, r3, #0xff + orr r2, r2, r3 + strh r2, [r1, #0x2] + ldr r2, [r7, #0xc] + bl InsertMBlock + mov r0, r6 + add sp, sp, #0x18 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020AE418: .word 0x00004652 +_020AE41C: .word 0x00005544 + arm_func_end AllocUsedBlockFromFreeBlock + + arm_func_start InitExpHeap +InitExpHeap: ; 0x020AE420 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r3, r1 + add r4, r5, #0x24 + str r2, [sp, #0x0] + ldr r1, _020AE498 ; =0x45585048 + add r2, r4, #0x14 + bl NNSi_FndInitHeapHead + mov r0, #0x0 + strh r0, [r4, #0x10] + strh r0, [r4, #0x12] + ldrh r2, [r4, #0x12] + ldr r1, _020AE49C ; =0x00004652 + add r0, sp, #0x4 + bic r2, r2, #0x1 + strh r2, [r4, #0x12] + ldr r2, [r5, #0x18] + str r2, [sp, #0x4] + ldr r2, [r5, #0x1c] + str r2, [sp, #0x8] + bl InitMBlock + str r0, [r5, #0x24] + str r0, [r4, #0x4] + mov r1, #0x0 + str r1, [r4, #0x8] + mov r0, r5 + str r1, [r4, #0xc] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AE498: .word 0x45585048 +_020AE49C: .word 0x00004652 + arm_func_end InitExpHeap + + arm_func_start InitMBlock +InitMBlock: ; 0x020AE4A0 + ldr r3, [r0, #0x0] + mov r2, #0x0 + strh r1, [r3, #0x0] + strh r2, [r3, #0x2] + ldr r1, [r0, #0x4] + add r0, r3, #0x10 + sub r0, r1, r0 + str r0, [r3, #0x4] + str r2, [r3, #0x8] + mov r0, r3 + str r2, [r3, #0xc] + bx lr + arm_func_end InitMBlock + + arm_func_start InsertMBlock +InsertMBlock: ; 0x020AE4D0 + str r2, [r1, #0x8] + cmp r2, #0x0 + ldrne r3, [r2, #0xc] + strne r1, [r2, #0xc] + ldreq r3, [r0, #0x0] + streq r1, [r0, #0x0] + str r3, [r1, #0xc] + cmp r3, #0x0 + strne r1, [r3, #0x8] + streq r1, [r0, #0x4] + mov r0, r1 + bx lr + arm_func_end InsertMBlock + + arm_func_start RemoveMBlock +RemoveMBlock: ; 0x020AE500 + ldr r2, [r1, #0x8] + ldr r1, [r1, #0xc] + cmp r2, #0x0 + strne r1, [r2, #0xc] + streq r1, [r0, #0x0] + cmp r1, #0x0 + strne r2, [r1, #0x8] + streq r2, [r0, #0x4] + mov r0, r2 + bx lr + arm_func_end RemoveMBlock + + arm_func_start GetRegionOfMBlock +GetRegionOfMBlock: ; 0x020AE528 + ldrh r2, [r1, #0x2] + add r3, r1, #0x10 + mov r2, r2, asr #0x8 + and r2, r2, #0x7f + mov r2, r2, lsl #0x10 + sub r2, r1, r2, lsr #0x10 + str r2, [r0, #0x0] + ldr r1, [r1, #0x4] + add r1, r1, r3 + str r1, [r0, #0x4] + bx lr + arm_func_end GetRegionOfMBlock diff --git a/arm9/asm/NNS_FND_frameheap.s b/arm9/asm/NNS_FND_frameheap.s new file mode 100644 index 00000000..cfa221d4 --- /dev/null +++ b/arm9/asm/NNS_FND_frameheap.s @@ -0,0 +1,243 @@ + .include "asm/macros.inc" + .include "global.inc" + .extern NNSi_FndInitHeapHead + .extern NNSi_FndFinalizeHeap + .text + + arm_func_start NNS_FndFreeByStateToFrmHeap +NNS_FndFreeByStateToFrmHeap: ; 0x020AE554 + add r2, r0, #0x24 + cmp r1, #0x0 + ldr r3, [r2, #0x8] + beq _020AE584 + cmp r3, #0x0 + beq _020AE584 +_020AE56C: + ldr r0, [r3, #0x0] + cmp r0, r1 + beq _020AE584 + ldr r3, [r3, #0xc] + cmp r3, #0x0 + bne _020AE56C +_020AE584: + cmp r3, #0x0 + moveq r0, #0x0 + bxeq lr + ldr r1, [r3, #0x4] + mov r0, #0x1 + str r1, [r2, #0x0] + ldr r1, [r3, #0x8] + str r1, [r2, #0x4] + ldr r1, [r3, #0xc] + str r1, [r2, #0x8] + bx lr + arm_func_end NNS_FndFreeByStateToFrmHeap + + arm_func_start NNS_FndRecordStateForFrmHeap +NNS_FndRecordStateForFrmHeap: ; 0x020AE5B0 + stmdb sp!, {r4-r6,lr} + add r4, r0, #0x24 + ldr r5, [r0, #0x24] + mov r6, r1 + mov r0, r4 + mov r1, #0x10 + mov r2, #0x4 + bl AllocFromHead + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + str r6, [r0, #0x0] + str r5, [r0, #0x4] + ldr r1, [r4, #0x4] + str r1, [r0, #0x8] + ldr r1, [r4, #0x8] + str r1, [r0, #0xc] + str r0, [r4, #0x8] + mov r0, #0x1 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_FndRecordStateForFrmHeap + + arm_func_start NNS_FndFreeToFrmHeap +NNS_FndFreeToFrmHeap: ; 0x020AE600 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + ands r1, r4, #0x1 + beq _020AE61C + bl FreeHead +_020AE61C: + ands r0, r4, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + mov r0, r5 + bl FreeTail + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNS_FndFreeToFrmHeap + + arm_func_start NNS_FndAllocFromFrmHeapEx +NNS_FndAllocFromFrmHeapEx: ; 0x020AE638 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + moveq r1, #0x1 + add r1, r1, #0x3 + add r0, r0, #0x24 + cmp r2, #0x0 + bic r1, r1, #0x3 + blt _020AE668 + bl AllocFromHead + add sp, sp, #0x4 + ldmia sp!, {pc} +_020AE668: + rsb r2, r2, #0x0 + bl AllocFromTail + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndAllocFromFrmHeapEx + + arm_func_start NNS_FndDestroyFrmHeap +NNS_FndDestroyFrmHeap: ; 0x020AE678 + ldr ip, _020AE680 ; =NNSi_FndFinalizeHeap + bx r12 + .balign 4 +_020AE680: .word NNSi_FndFinalizeHeap + arm_func_end NNS_FndDestroyFrmHeap + + arm_func_start NNS_FndCreateFrmHeapEx +NNS_FndCreateFrmHeapEx: ; 0x020AE684 + stmdb sp!, {lr} + sub sp, sp, #0x4 + add r1, r1, r0 + add r0, r0, #0x3 + bic r1, r1, #0x3 + bic r0, r0, #0x3 + cmp r0, r1 + bhi _020AE6B0 + sub r3, r1, r0 + cmp r3, #0x30 + bhs _020AE6BC +_020AE6B0: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {pc} +_020AE6BC: + bl InitFrameHeap + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndCreateFrmHeapEx + + arm_func_start FreeTail +FreeTail: ; 0x020AE6C8 + add r2, r0, #0x24 + ldr r3, [r2, #0x8] + cmp r3, #0x0 + beq _020AE6EC +_020AE6D8: + ldr r1, [r0, #0x1c] + str r1, [r3, #0x8] + ldr r3, [r3, #0xc] + cmp r3, #0x0 + bne _020AE6D8 +_020AE6EC: + ldr r0, [r0, #0x1c] + str r0, [r2, #0x4] + bx lr + arm_func_end FreeTail + + arm_func_start FreeHead +FreeHead: ; 0x020AE6F8 + ldr r1, [r0, #0x18] + add r2, r0, #0x24 + str r1, [r0, #0x24] + mov r0, #0x0 + str r0, [r2, #0x8] + bx lr + arm_func_end FreeHead + + local_arm_func_start AllocFromTail +AllocFromTail: ; 0x020AE710 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r3, [r5, #0x4] + sub r0, r2, #0x1 + mvn r2, r0 + sub r1, r3, r1 + ldr r0, [r5, #0x0] + and r4, r2, r1 + cmp r4, r0 + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {r4-r5,pc} + ldr r0, [r5, #-0x4] + sub r2, r3, r4 + and r0, r0, #0xff + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ands r0, r0, #0x1 + beq _020AE76C + mov r1, r4 + mov r0, #0x0 + bl MIi_CpuClear32 +_020AE76C: + mov r0, r4 + str r4, [r5, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end AllocFromTail + + local_arm_func_start AllocFromHead +AllocFromHead: + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x0] + sub r2, r2, #0x1 + mvn r3, r2 + add r2, r2, r0 + and r5, r3, r2 + ldr r2, [r6, #0x4] + add r4, r1, r5 + cmp r4, r2 + movhi r0, #0x0 + ldmhiia sp!, {r4-r6,pc} + ldr r1, [r6, #-0x4] + sub r2, r4, r0 + and r1, r1, #0xff + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + ands r1, r1, #0x1 + beq _020AE7D4 + mov r1, r0 + mov r0, #0x0 + bl MIi_CpuClear32 +_020AE7D4: + mov r0, r5 + str r4, [r6, #0x0] + ldmia sp!, {r4-r6,pc} + arm_func_end AllocFromHead + + arm_func_start InitFrameHeap +InitFrameHeap: ; 0x020AE7E0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r3, r1 + add r4, r5, #0x24 + str r2, [sp, #0x0] + ldr r1, _020AE828 ; =0x46524D48 + add r2, r4, #0xc + bl NNSi_FndInitHeapHead + ldr r0, [r5, #0x18] + mov r1, #0x0 + str r0, [r5, #0x24] + ldr r2, [r5, #0x1c] + mov r0, r5 + str r2, [r4, #0x4] + str r1, [r4, #0x8] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AE828: .word 0x46524D48 + arm_func_end InitFrameHeap diff --git a/arm9/asm/NNS_FND_heapcommon.s b/arm9/asm/NNS_FND_heapcommon.s new file mode 100644 index 00000000..ca3108d2 --- /dev/null +++ b/arm9/asm/NNS_FND_heapcommon.s @@ -0,0 +1,112 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sRootListInitialized +sRootListInitialized: ; 0x021CCD38 + .space 0x4 + + .global sRootList +sRootList: ; 0x021CCD3C + .space 0xc + .text + + arm_func_start NNSi_FndFinalizeHeap +NNSi_FndFinalizeHeap: ; 0x020ADC8C + stmdb sp!, {r4,lr} + mov r4, r0 + bl FindListContainHeap + mov r1, r4 + bl NNS_FndRemoveListObject + ldmia sp!, {r4,pc} + arm_func_end NNSi_FndFinalizeHeap + + arm_func_start NNSi_FndInitHeapHead +NNSi_FndInitHeapHead: + stmdb sp!, {r4,lr} + mov r4, r0 + str r1, [r4, #0x0] + str r2, [r4, #0x18] + str r3, [r4, #0x1c] + mov r0, #0x0 + str r0, [r4, #0x20] + ldr r1, [r4, #0x20] + ldrh r0, [sp, #0x8] + bic r1, r1, #0xff + str r1, [r4, #0x20] + ldr r1, [r4, #0x20] + and r0, r0, #0xff + orr r2, r1, r0 + add r0, r4, #0xc + mov r1, #0x4 + str r2, [r4, #0x20] + bl NNS_FndInitList + ldr r0, _020ADD28 ; =sRootListInitialized + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020ADD14 + ldr r0, _020ADD2C ; =sRootList + mov r1, #0x4 + bl NNS_FndInitList + ldr r0, _020ADD28 ; =sRootListInitialized + mov r1, #0x1 + str r1, [r0, #0x0] +_020ADD14: + mov r0, r4 + bl FindListContainHeap + mov r1, r4 + bl NNS_FndAppendListObject + ldmia sp!, {r4,pc} + .balign 4 +_020ADD28: .word sRootListInitialized +_020ADD2C: .word sRootList + arm_func_end NNSi_FndInitHeapHead + + arm_func_start FindListContainHeap +FindListContainHeap: ; 0x020ADD30 + stmdb sp!, {r4,lr} + ldr r4, _020ADD54 ; =sRootList + mov r1, r0 + mov r0, r4 + bl FindContainHeap + cmp r0, #0x0 + addne r4, r0, #0xc + mov r0, r4 + ldmia sp!, {r4,pc} + .balign 4 +_020ADD54: .word sRootList + arm_func_end FindListContainHeap + + arm_func_start FindContainHeap +FindContainHeap: + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r1, #0x0 + mov r6, r0 + bl NNS_FndGetNextListObject + movs r4, r0 + beq _020ADDB8 +_020ADD74: + ldr r0, [r4, #0x18] + cmp r0, r5 + bhi _020ADDA4 + ldr r0, [r4, #0x1c] + cmp r5, r0 + bhs _020ADDA4 + mov r1, r5 + add r0, r4, #0xc + bl FindContainHeap + cmp r0, #0x0 + moveq r0, r4 + ldmia sp!, {r4-r6,pc} +_020ADDA4: + mov r0, r6 + mov r1, r4 + bl NNS_FndGetNextListObject + movs r4, r0 + bne _020ADD74 +_020ADDB8: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + arm_func_end FindContainHeap diff --git a/arm9/asm/NNS_FND_list.s b/arm9/asm/NNS_FND_list.s new file mode 100644 index 00000000..21999c11 --- /dev/null +++ b/arm9/asm/NNS_FND_list.s @@ -0,0 +1,169 @@ + .include "asm/macros.inc" + .include "global.inc" + .text + + arm_func_start NNS_FndGetPrevListObject +NNS_FndGetPrevListObject: ; 0x020ADA84 + cmp r1, #0x0 + ldreq r0, [r0, #0x4] + ldrneh r0, [r0, #0xa] + ldrne r0, [r1, r0] + bx lr + arm_func_end NNS_FndGetPrevListObject + + arm_func_start NNS_FndGetNextListObject +NNS_FndGetNextListObject: ; 0x020ADA98 + cmp r1, #0x0 + ldreq r0, [r0, #0x0] + ldrneh r0, [r0, #0xa] + addne r0, r1, r0 + ldrne r0, [r0, #0x4] + bx lr + arm_func_end NNS_FndGetNextListObject + + arm_func_start NNS_FndRemoveListObject +NNS_FndRemoveListObject: ; 0x020ADAB0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r12, [r0, #0xa] + ldr r3, [r1, r12] + add lr, r1, r12 + cmp r3, #0x0 + ldreq r1, [lr, #0x4] + streq r1, [r0, #0x0] + ldrne r2, [lr, #0x4] + addne r1, r3, r12 + strne r2, [r1, #0x4] + ldr r3, [lr, #0x4] + cmp r3, #0x0 + ldreq r1, [lr, #0x0] + streq r1, [r0, #0x4] + ldrneh r1, [r0, #0xa] + ldrne r2, [lr, #0x0] + strne r2, [r3, r1] + mov r1, #0x0 + str r1, [lr, #0x0] + str r1, [lr, #0x4] + ldrh r1, [r0, #0x8] + sub r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndRemoveListObject + + arm_func_start NNS_FndInsertListObject +NNS_FndInsertListObject: ; 0x020ADB18 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + bne _020ADB38 + mov r1, r2 + bl NNS_FndAppendListObject + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADB38: + ldr r3, [r0, #0x0] + cmp r1, r3 + bne _020ADB54 + mov r1, r2 + bl NNS_FndPrependListObject + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADB54: + ldrh lr, [r0, #0xa] + ldr r3, [r1, lr] + add r12, r2, lr + str r3, [r2, lr] + str r1, [r12, #0x4] + add r3, r3, lr + str r2, [r3, #0x4] + ldrh r3, [r0, #0xa] + str r2, [r1, r3] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndInsertListObject + + arm_func_start NNS_FndPrependListObject +NNS_FndPrependListObject: ; 0x020ADB8C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _020ADBAC + bl SetFirstObject + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADBAC: + ldrh r3, [r0, #0xa] + mov r2, #0x0 + str r2, [r1, r3] + ldr r2, [r0, #0x0] + add r3, r1, r3 + str r2, [r3, #0x4] + ldrh r2, [r0, #0xa] + ldr r3, [r0, #0x0] + str r1, [r3, r2] + str r1, [r0, #0x0] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndPrependListObject + + arm_func_start NNS_FndAppendListObject +NNS_FndAppendListObject: ; 0x020ADBE8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + bne _020ADC08 + bl SetFirstObject + add sp, sp, #0x4 + ldmia sp!, {pc} +_020ADC08: + ldrh r12, [r0, #0xa] + ldr r3, [r0, #0x4] + mov r2, #0x0 + str r3, [r1, r12] + add r3, r1, r12 + str r2, [r3, #0x4] + ldrh r2, [r0, #0xa] + ldr r3, [r0, #0x4] + add r2, r3, r2 + str r1, [r2, #0x4] + str r1, [r0, #0x4] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_FndAppendListObject + + arm_func_start SetFirstObject +SetFirstObject: ; 0x020ADC48 + ldrh r3, [r0, #0xa] + mov r2, #0x0 + add r12, r1, r3 + str r2, [r12, #0x4] + str r2, [r1, r3] + str r1, [r0, #0x0] + str r1, [r0, #0x4] + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + bx lr + arm_func_end SetFirstObject + + arm_func_start NNS_FndInitList +NNS_FndInitList: ; 0x020ADC74 + mov r2, #0x0 + str r2, [r0, #0x0] + str r2, [r0, #0x4] + strh r2, [r0, #0x8] + strh r1, [r0, #0xa] + bx lr + arm_func_end NNS_FndInitList diff --git a/arm9/asm/NNS_G2D_g2d_animation.s b/arm9/asm/NNS_G2D_g2d_animation.s new file mode 100644 index 00000000..23daa1c6 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_animation.s @@ -0,0 +1,336 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dIsAnimCtrlLoopAnim +NNSi_G2dIsAnimCtrlLoopAnim: ; 0x020B0408 + ldr r1, [r0, #0x14] + cmp r1, #0x0 + ldreq r0, [r0, #0x18] + ldreq r1, [r0, #0x8] + cmp r1, #0x2 + beq _020B0428 + cmp r1, #0x4 + bne _020B0430 +_020B0428: + mov r0, #0x1 + bx lr +_020B0430: + mov r0, #0x0 + bx lr + arm_func_end NNSi_G2dIsAnimCtrlLoopAnim + + arm_func_start NNS_G2dBindAnimCtrl +NNS_G2dBindAnimCtrl: ; 0x020B0438 + ldr ip, _020B0444 ; =NNS_G2dResetAnimCtrlState + str r1, [r0, #0x18] + bx r12 + .balign 4 +_020B0444: .word NNS_G2dResetAnimCtrlState + arm_func_end NNS_G2dBindAnimCtrl + + arm_func_start NNS_G2dResetAnimCtrlState +NNS_G2dResetAnimCtrlState: ; 0x020B0448 + ldr r1, [r0, #0x10] + cmp r1, #0x0 + movgt r2, #0x1 + ldr r1, [r0, #0x4] + movle r2, #0x0 + eors r1, r2, r1 + beq _020B047C + ldr r2, [r0, #0x18] + ldrh r1, [r2, #0x2] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + str r1, [r0, #0x0] + b _020B0494 +_020B047C: + ldr r2, [r0, #0x18] + ldrh r1, [r2, #0x0] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + sub r1, r1, #0x8 + str r1, [r0, #0x0] +_020B0494: + ldr ip, _020B04A4 ; =NNS_G2dTickAnimCtrl + mov r1, #0x0 + str r1, [r0, #0xc] + bx r12 + .balign 4 +_020B04A4: .word NNS_G2dTickAnimCtrl + arm_func_end NNS_G2dResetAnimCtrlState + + arm_func_start NNS_G2dInitAnimCallBackFunctor +NNS_G2dInitAnimCallBackFunctor: ; 0x020B04A8 + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x4] + str r1, [r0, #0x8] + strh r1, [r0, #0xc] + bx lr + arm_func_end NNS_G2dInitAnimCallBackFunctor + + arm_func_start NNS_G2dInitAnimCtrl +NNS_G2dInitAnimCtrl: ; 0x020B04C0 + stmdb sp!, {r4,lr} + mov r4, r0 + add r0, r4, #0x1c + bl NNS_G2dInitAnimCallBackFunctor + mov r1, #0x0 + str r1, [r4, #0x0] + str r1, [r4, #0x4] + mov r0, #0x1 + str r0, [r4, #0x8] + str r1, [r4, #0xc] + mov r0, #0x1000 + str r0, [r4, #0x10] + str r1, [r4, #0x14] + str r1, [r4, #0x18] + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dInitAnimCtrl + + arm_func_start NNS_G2dGetAnimCtrlCurrentFrame +NNS_G2dGetAnimCtrlCurrentFrame: ; 0x020B04FC + ldr r1, [r0, #0x18] + ldr r2, [r0, #0x0] + ldr r0, [r1, #0xc] + sub r0, r2, r0 + mov r0, r0, lsl #0xd + mov r0, r0, lsr #0x10 + bx lr + arm_func_end NNS_G2dGetAnimCtrlCurrentFrame + + arm_func_start NNS_G2dSetAnimCtrlCurrentFrame +NNS_G2dSetAnimCtrlCurrentFrame: ; 0x020B0518 + stmdb sp!, {r4,lr} + mov r4, r0 + bl SetAnimCtrlCurrentFrameImpl_ + cmp r0, #0x0 + movne r1, #0x0 + strne r1, [r4, #0xc] + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dSetAnimCtrlCurrentFrame + + arm_func_start NNS_G2dTickAnimCtrl +NNS_G2dTickAnimCtrl: ; 0x020B0534 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + ldr r0, [r8, #0x8] + mov r7, #0x0 + cmp r0, #0x1 + movne r0, r7 + ldmneia sp!, {r4-r8,pc} + ldr r2, [r8, #0x10] + mov r0, #0x800 + smull r3, r1, r2, r1 + adds r0, r3, r0 + adc r1, r1, r7 + mov r0, r0, lsr #0xc + orr r0, r0, r1, lsl #0x14 + bl abs + ldr r1, [r8, #0xc] + add r6, r8, #0xc + add r0, r1, r0 + str r0, [r8, #0xc] + mov r4, r7 + mov r5, #0x1 + b _020B06A8 +_020B058C: + ldr r0, [r8, #0x0] + ldr r1, [r6, #0x0] + ldrh r0, [r0, #0x4] + mov r7, r5 + sub r0, r1, r0, lsl #0xc + str r0, [r6, #0x0] + ldr r0, [r8, #0x10] + cmp r0, #0x0 + movgt r1, r5 + ldr r0, [r8, #0x4] + movle r1, r4 + eors r0, r1, r0 + ldrne r0, [r8, #0x0] + addne r0, r0, #0x8 + strne r0, [r8, #0x0] + ldreq r0, [r8, #0x0] + subeq r0, r0, #0x8 + streq r0, [r8, #0x0] + ldr r1, [r8, #0x10] + ldr r0, [r8, #0x0] + cmp r1, #0x0 + movgt r2, r5 + ldr r1, [r8, #0x4] + movle r2, r4 + eors r1, r2, r1 + beq _020B0614 + ldr r2, [r8, #0x18] + ldrh r1, [r2, #0x0] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + cmp r0, r1 + movcs r0, r5 + movcc r0, r4 + b _020B0634 +_020B0614: + ldr r2, [r8, #0x18] + ldrh r1, [r2, #0x2] + ldr r2, [r2, #0xc] + add r1, r2, r1, lsl #0x3 + sub r1, r1, #0x8 + cmp r0, r1 + movls r0, r5 + movhi r0, r4 +_020B0634: + cmp r0, #0x0 + beq _020B0644 + mov r0, r8 + bl SequenceEdgeHandle_ +_020B0644: + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + beq _020B06A8 + ldr r0, [r8, #0x18] + ldr r2, [r8, #0x1c] + ldr r1, [r8, #0x0] + ldr r0, [r0, #0xc] + cmp r2, #0x2 + sub r0, r1, r0 + mov r0, r0, lsl #0xd + mov r1, r0, lsr #0x10 + beq _020B0680 + cmp r2, #0x3 + beq _020B069C + b _020B06A8 +_020B0680: + ldrh r0, [r8, #0x28] + cmp r1, r0 + bne _020B06A8 + ldr r0, [r8, #0x20] + ldr r2, [r8, #0x24] + blx r2 + b _020B06A8 +_020B069C: + ldr r0, [r8, #0x20] + ldr r2, [r8, #0x24] + blx r2 +_020B06A8: + ldr r0, [r8, #0x8] + cmp r0, #0x0 + beq _020B06CC + ldr r0, [r8, #0x0] + ldr r1, [r8, #0xc] + ldrh r0, [r0, #0x4] + cmp r1, r0, lsl #0xc + movge r0, r5 + bge _020B06D0 +_020B06CC: + mov r0, r4 +_020B06D0: + cmp r0, #0x0 + bne _020B058C + mov r0, r7 + ldmia sp!, {r4-r8,pc} + arm_func_end NNS_G2dTickAnimCtrl + + arm_func_start NNS_G2dGetAnimCtrlCurrentElement +NNS_G2dGetAnimCtrlCurrentElement: ; 0x020B06E0 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x0] + bx lr + arm_func_end NNS_G2dGetAnimCtrlCurrentElement + + arm_func_start SetAnimCtrlCurrentFrameImpl_ +SetAnimCtrlCurrentFrameImpl_: ; 0x020B06EC + ldr r3, [r0, #0x18] + ldrh r2, [r3, #0x0] + cmp r1, r2 + ldrcc r2, [r3, #0xc] + addcc r1, r2, r1, lsl #0x3 + strcc r1, [r0, #0x0] + movcc r0, #0x1 + movcs r0, #0x0 + bx lr + arm_func_end SetAnimCtrlCurrentFrameImpl_ + + arm_func_start SequenceEdgeHandle_ +SequenceEdgeHandle_: ; 0x020B0710 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x14] + cmp r0, #0x0 + ldreq r0, [r4, #0x18] + ldreq r0, [r0, #0x8] + cmp r0, #0x3 + beq _020B0738 + cmp r0, #0x4 + bne _020B07B4 +_020B0738: + ldr r0, [r4, #0x4] + eor r0, r0, #0x1 + str r0, [r4, #0x4] + ldr r1, [r4, #0x18] + ldr r2, [r4, #0x0] + ldrh r0, [r1, #0x2] + ldr r1, [r1, #0xc] + add r0, r1, r0, lsl #0x3 + sub r0, r0, #0x8 + cmp r2, r0 + bhi _020B0800 + ldr r0, [r4, #0x1c] + cmp r0, #0x1 + bne _020B0780 + ldr r0, [r4, #0x20] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x24] + blx r2 +_020B0780: + ldr r0, [r4, #0x14] + cmp r0, #0x0 + ldreq r0, [r4, #0x18] + ldreq r0, [r0, #0x8] + cmp r0, #0x2 + beq _020B07A8 + cmp r0, #0x4 + movne r0, #0x0 + strne r0, [r4, #0x8] + bne _020B0800 +_020B07A8: + mov r0, r4 + bl NNS_G2dResetAnimCtrlState + b _020B0800 +_020B07B4: + ldr r0, [r4, #0x1c] + cmp r0, #0x1 + bne _020B07D0 + ldr r0, [r4, #0x20] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x24] + blx r2 +_020B07D0: + ldr r0, [r4, #0x14] + cmp r0, #0x0 + ldreq r0, [r4, #0x18] + ldreq r0, [r0, #0x8] + cmp r0, #0x2 + beq _020B07F8 + cmp r0, #0x4 + movne r0, #0x0 + strne r0, [r4, #0x8] + bne _020B0800 +_020B07F8: + mov r0, r4 + bl NNS_G2dResetAnimCtrlState +_020B0800: + ldr r1, [r4, #0x18] + ldr r2, [r4, #0x0] + ldrh r0, [r1, #0x0] + ldr r1, [r1, #0xc] + add r0, r1, r0, lsl #0x3 + sub r0, r0, #0x8 + cmp r2, r0 + strhi r0, [r4, #0x0] + ldmhiia sp!, {r4,pc} + cmp r2, r1 + strcc r1, [r4, #0x0] + ldmia sp!, {r4,pc} + arm_func_end SequenceEdgeHandle_ diff --git a/arm9/asm/NNS_G2D_g2d_cellanimati.s b/arm9/asm/NNS_G2D_g2d_cellanimati.s new file mode 100644 index 00000000..31720d7a --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_cellanimati.s @@ -0,0 +1,417 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dMakeCellToOams +NNS_G2dMakeCellToOams: ; 0x020B1AF8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + ldrh r5, [r2, #0x0] + ldr r4, [sp, #0x60] + ldr r10, [sp, #0x58] + str r4, [sp, #0x60] + cmp r1, r5 + movcs r1, r5 + mov r4, #0x0 + cmp r1, #0x0 + str r4, [sp, #0x0] + bls _020B1E7C + ldrh r4, [sp, #0x5c] + mov r4, r4, lsl #0x19 + str r4, [sp, #0x4] + ldr r4, [sp, #0x0] + str r4, [sp, #0x14] + mov r4, #0x100 + str r4, [sp, #0xc] + mov r4, #0x300 + str r4, [sp, #0x8] + mov r4, #0x1 + str r4, [sp, #0x10] +_020B1B54: + ldr r5, [sp, #0x0] + mov r6, #0x6 + mul r6, r5, r6 + ldr r8, [r2, #0x4] + ldr r4, [sp, #0x0] + add r7, r0, r5, lsl #0x3 + ldrh r5, [r8, r6] + mov r4, r4, lsl #0x3 + add r9, r8, r6 + strh r5, [r0, r4] + ldrh r4, [r9, #0x2] + cmp r3, #0x0 + strh r4, [r7, #0x2] + ldrh r4, [r9, #0x4] + strh r4, [r7, #0x4] + bne _020B1B9C + cmp r10, #0x0 + beq _020B1E60 +_020B1B9C: + ldr r5, [r7, #0x0] + ldr r4, _020B1E88 ; =0x01FF0000 + and r4, r5, r4 + mov r4, r4, lsr #0x10 + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 + cmp r4, #0xff + orrgt r4, r4, #0xff00 + movgt r4, r4, lsl #0x10 + movgt r4, r4, asr #0x10 + mov r4, r4, lsl #0xc + str r4, [sp, #0x20] + ldr r4, [r7, #0x0] + and r4, r4, #0xff + mov r4, r4, lsl #0x10 + mov r4, r4, asr #0x10 + cmp r4, #0x7f + orrgt r4, r4, #0xff00 + movgt r4, r4, lsl #0x10 + movgt r4, r4, asr #0x10 + mov r4, r4, lsl #0xc + str r4, [sp, #0x24] + cmp r3, #0x0 + beq _020B1E00 + ldr r5, [r7, #0x0] + and r6, r5, #0x300 + cmp r6, #0x100 + beq _020B1C1C + cmp r6, #0x300 + beq _020B1C1C + and r4, r5, #0x30000000 + orr r6, r6, r4 +_020B1C1C: + cmp r6, #0x300 + bne _020B1C70 + ldr r4, _020B1E8C ; =0xC000C000 + ldr r8, _020B1E90 ; =NNSi_objSizeWTbl + and r5, r5, r4 + and r4, r5, #0xc000 + mov r6, r4, asr #0xe + and r4, r5, #0xc0000000 + mov r4, r4, lsr #0x1e + mov r4, r4, lsl #0x1 + add r8, r8, r6, lsl #0x3 + ldrh r9, [r4, r8] + ldr r8, _020B1E94 ; =NNSi_objSizeHTbl + ldr r5, [sp, #0x20] + add r6, r8, r6, lsl #0x3 + add r5, r5, r9, lsl #0xb + str r5, [sp, #0x20] + ldrh r4, [r4, r6] + ldr r5, [sp, #0x24] + add r4, r5, r4, lsl #0xb + str r4, [sp, #0x24] +_020B1C70: + ldr r4, [sp, #0x60] + ldr r5, [r3, #0x8] + cmp r4, #0x0 + ldrne r8, [sp, #0x8] + add r4, sp, #0x20 + ldreq r8, [sp, #0xc] + mov r6, r4 + cmp r8, #0x300 + ldreq r9, [sp, #0x10] + mov r12, #0x1000 + ldrne r9, [sp, #0x14] + cmp r4, r4 + ldr r4, [sp, #0x24] + addeq r6, sp, #0x28 + smull r11, r4, r5, r4 + adds r5, r11, r12 + adc r11, r4, #0x0 + ldr r4, [r3, #0x0] + ldr lr, [sp, #0x20] + smlal r5, r11, r4, lr + mov r4, r5, lsr #0xc + orr r4, r4, r11, lsl #0x14 + str r4, [r6, #0x0] + ldr r4, [r3, #0xc] + ldr r5, [sp, #0x24] + ldr lr, [r3, #0x4] + smull r11, r5, r4, r5 + adds r11, r11, r12 + adc r4, r5, #0x0 + add r5, sp, #0x28 + cmp r6, r5 + ldr r5, [sp, #0x20] + smlal r11, r4, lr, r5 + mov r5, r11, lsr #0xc + orr r5, r5, r4, lsl #0x14 + str r5, [r6, #0x4] + ldreq r5, [sp, #0x28] + ldreq r4, [sp, #0x2c] + streq r5, [sp, #0x20] + streq r4, [sp, #0x24] + cmp r8, #0x100 + beq _020B1D38 + cmp r8, #0x300 + beq _020B1D38 + ldr r5, [r7, #0x0] + ldr r4, _020B1E98 ; =0xC1FFFCFF + and r4, r5, r4 + orr r4, r4, r8 + str r4, [r7, #0x0] + b _020B1D54 +_020B1D38: + ldr r5, [r7, #0x0] + ldr r4, _020B1E98 ; =0xC1FFFCFF + and r4, r5, r4 + orr r5, r4, r8 + ldr r4, [sp, #0x4] + orr r4, r4, r5 + str r4, [r7, #0x0] +_020B1D54: + ldr r6, [r7, #0x0] + ldr r5, _020B1E8C ; =0xC000C000 + cmp r9, #0x0 + and r8, r6, r5 + and r5, r8, #0xc000 + mov r6, r5, asr #0xe + and r5, r8, #0xc0000000 + ldr r8, _020B1E90 ; =NNSi_objSizeWTbl + mov r5, r5, lsr #0x1e + mov r5, r5, lsl #0x1 + add r8, r8, r6, lsl #0x3 + ldrh r9, [r5, r8] + ldr r8, _020B1E94 ; =NNSi_objSizeHTbl + ldr r4, [sp, #0x20] + add r6, r8, r6, lsl #0x3 + mov r11, r9, asr #0x1 + ldrh r5, [r5, r6] + mov r8, r11, lsl #0xc + ldr r6, [r3, #0x0] + rsb r12, r8, #0x0 + mov r9, r5, asr #0x1 + mla r12, r6, r11, r12 + ldr r5, [r3, #0x8] + mla r6, r5, r9, r12 + add r6, r4, r6 + str r6, [sp, #0x20] + ldr r12, [r3, #0x4] + mov r5, r9, lsl #0xc + str r12, [sp, #0x1c] + ldr r12, [r3, #0xc] + rsb lr, r5, #0x0 + str r12, [sp, #0x18] + ldr r12, [sp, #0x1c] + ldr r4, [sp, #0x24] + mla r11, r12, r11, lr + ldr r12, [sp, #0x18] + subne r6, r6, r8 + mla r9, r12, r9, r11 + add r4, r4, r9 + str r4, [sp, #0x24] + subne r4, r4, r5 + strne r6, [sp, #0x20] + strne r4, [sp, #0x24] +_020B1E00: + cmp r10, #0x0 + beq _020B1E28 + ldr r6, [sp, #0x20] + ldr r4, [r10, #0x0] + ldr r5, [sp, #0x24] + add r4, r6, r4 + str r4, [sp, #0x20] + ldr r4, [r10, #0x4] + add r4, r5, r4 + str r4, [sp, #0x24] +_020B1E28: + ldr r4, [sp, #0x20] + ldr r6, [r7, #0x0] + add r5, r4, #0x800 + ldr r4, _020B1E9C ; =0x000001FF + and r4, r4, r5, asr #0xc + ldr r5, _020B1EA0 ; =0xFE00FF00 + and r6, r6, r5 + ldr r5, [sp, #0x24] + add r5, r5, #0x800 + mov r5, r5, asr #0xc + and r5, r5, #0xff + orr r5, r6, r5 + orr r4, r5, r4, lsl #0x10 + str r4, [r7, #0x0] +_020B1E60: + ldr r4, [sp, #0x0] + add r4, r4, #0x1 + mov r4, r4, lsl #0x10 + mov r4, r4, lsr #0x10 + str r4, [sp, #0x0] + cmp r4, r1 + blo _020B1B54 +_020B1E7C: + mov r0, r1 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B1E88: .word 0x01FF0000 +_020B1E8C: .word 0xC000C000 +_020B1E90: .word NNSi_objSizeWTbl +_020B1E94: .word NNSi_objSizeHTbl +_020B1E98: .word 0xC1FFFCFF +_020B1E9C: .word 0x000001FF +_020B1EA0: .word 0xFE00FF00 + arm_func_end NNS_G2dMakeCellToOams + + arm_func_start NNS_G2dSetCellAnimationCurrentFrame +NNS_G2dSetCellAnimationCurrentFrame: ; 0x020B1EA4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl NNS_G2dSetAnimCtrlCurrentFrame + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + mov r0, r4 + bl ApplyCurrentAnimResult_ + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dSetCellAnimationCurrentFrame + + arm_func_start NNS_G2dTickCellAnimation +NNS_G2dTickCellAnimation: ; 0x020B1EC4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl NNS_G2dTickAnimCtrl + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + mov r0, r4 + bl ApplyCurrentAnimResult_ + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dTickCellAnimation + + arm_func_start NNS_G2dSetCellAnimationSequence +NNS_G2dSetCellAnimationSequence: ; 0x020B1EE4 + stmdb sp!, {r4,lr} + mov r4, r0 + bl NNS_G2dBindAnimCtrl + mov r0, r4 + bl ApplyCurrentAnimResult_ + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dSetCellAnimationSequence + + arm_func_start NNS_G2dInitCellAnimationVramTransfered +NNS_G2dInitCellAnimationVramTransfered: ; 0x020B1EFC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r4, r2 + ldr r2, [r4, #0xc] + mov r5, r1 + ldr r1, [r2, #0x0] + ldr r2, [sp, #0x34] + str r1, [sp, #0x0] + ldr r1, [sp, #0x38] + str r2, [sp, #0x4] + mov r6, r3 + mov r7, r0 + ldr r12, [sp, #0x3c] + str r1, [sp, #0x8] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + mov r0, r6 + str r12, [sp, #0xc] + bl NNSi_G2dInitCellTransferState + str r6, [r7, #0x34] + str r4, [r7, #0x30] + add r0, r7, #0x38 + mov r1, #0x1 + str r6, [r7, #0x34] + bl NNSi_G2dSrtcInitControl + mov r0, r7 + bl NNS_G2dInitAnimCtrl + mov r0, r7 + mov r1, r5 + bl NNS_G2dSetCellAnimationSequence + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G2dInitCellAnimationVramTransfered + + arm_func_start NNS_G2dInitCellAnimation +NNS_G2dInitCellAnimation: ; 0x020B1F80 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + str r2, [r5, #0x30] + mvn r2, #0x0 + add r0, r5, #0x38 + mov r1, #0x1 + str r2, [r5, #0x34] + bl NNSi_G2dSrtcInitControl + mov r0, r5 + bl NNS_G2dInitAnimCtrl + mov r0, r5 + mov r1, r4 + bl NNS_G2dSetCellAnimationSequence + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNS_G2dInitCellAnimation + + arm_func_start ApplyCurrentAnimResult_ +ApplyCurrentAnimResult_: ; 0x020B1FC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x0] + ldrh r1, [r1, #0x4] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + bl NNS_G2dGetAnimCtrlCurrentElement + mov r4, r0 + ldr r7, [r5, #0x30] + ldrh r1, [r4, #0x0] + mov r0, r7 + bl NNS_G2dGetCellDataByIdx + str r0, [r5, #0x2c] + ldr r1, [r5, #0x18] + add r0, r5, #0x38 + ldr r2, [r1, #0x4] + mov r1, #0x1 + and r6, r2, #0xff + bl NNSi_G2dSrtcInitControl + cmp r6, #0x0 + beq _020B2068 + cmp r6, #0x2 + bne _020B203C + ldrsh r1, [r4, #0x4] + ldrsh r2, [r4, #0x6] + add r0, r5, #0x38 + bl NNSi_G2dSrtcSetTrans + b _020B2068 +_020B203C: + ldr r1, [r4, #0x4] + ldr r2, [r4, #0x8] + add r0, r5, #0x38 + bl NNSi_G2dSrtcSetSRTScale + ldrh r1, [r4, #0x2] + add r0, r5, #0x38 + bl NNSi_G2dSrtcSetSRTRotZ + ldrsh r1, [r4, #0xc] + ldrsh r2, [r4, #0xe] + add r0, r5, #0x38 + bl NNSi_G2dSrtcSetTrans +_020B2068: + ldr r2, [r7, #0xc] + cmp r2, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + ldr r1, [r5, #0x34] + mvn r0, #0x0 + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + ldrh r1, [r4, #0x0] + ldr r2, [r2, #0x4] + ldr r0, [r5, #0x34] + add r3, r2, r1, lsl #0x3 + ldr r1, [r2, r1, lsl #0x3] + ldr r2, [r3, #0x4] + bl NNS_G2dSetCellTransferStateRequested + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end ApplyCurrentAnimResult_ diff --git a/arm9/asm/NNS_G2D_g2d_celltransfe.s b/arm9/asm/NNS_G2D_g2d_celltransfe.s new file mode 100644 index 00000000..0e41bdba --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_celltransfe.s @@ -0,0 +1,286 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global cvtTbl$7926 +cvtTbl$7926: ; 0x020FF8C4 + .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00 + ; static const in function + + .section .bss + + .global s_pTaskRegisterFunc +s_pTaskRegisterFunc: ; 0x021CECFC + .space 0x4 + + .global s_numCellState +s_numCellState: ; 0x021CED00 + .space 0x4 + + .global s_pCellStateArray +s_pCellStateArray: ; 0x021CED04 + .space 0x4 + + .section .text + + arm_func_start NNS_G2dFreeCellTransferStateHandle +NNS_G2dFreeCellTransferStateHandle: ; 0x020B4358 + stmdb sp!, {r4,lr} + ldr r2, _020B43A0 ; =s_pCellStateArray + mov r1, #0x30 + ldr r2, [r2, #0x0] + mla r4, r0, r1, r2 + mov r0, r4 + bl NNSi_G2dInitializeVRamLocation + mov r0, #0x0 + str r0, [r4, #0xc] + str r0, [r4, #0x10] + str r0, [r4, #0x14] + str r0, [r4, #0x18] + str r0, [r4, #0x1c] + str r0, [r4, #0x20] + str r0, [r4, #0x24] + str r0, [r4, #0x28] + str r0, [r4, #0x2c] + ldmia sp!, {r4,pc} + .balign 4 +_020B43A0: .word s_pCellStateArray + arm_func_end NNS_G2dFreeCellTransferStateHandle + + arm_func_start NNS_G2dGetNewCellTransferStateHandle +NNS_G2dGetNewCellTransferStateHandle: ; 0x020B43A4 + ldr r1, _020B43F8 ; =s_numCellState + mov r0, #0x0 + ldr r3, [r1, #0x0] + cmp r3, #0x0 + bls _020B43F0 + ldr r1, _020B43FC ; =s_pCellStateArray + ldr r2, [r1, #0x0] + mov r12, r2 +_020B43C4: + ldr r1, [r12, #0x1c] + cmp r1, #0x1 + movne r1, #0x30 + mlane r1, r0, r1, r2 + movne r2, #0x1 + strne r2, [r1, #0x1c] + bxne lr + add r0, r0, #0x1 + cmp r0, r3 + add r12, r12, #0x30 + blo _020B43C4 +_020B43F0: + mvn r0, #0x0 + bx lr + .balign 4 +_020B43F8: .word s_numCellState +_020B43FC: .word s_pCellStateArray + arm_func_end NNS_G2dGetNewCellTransferStateHandle + + arm_func_start NNS_G2dSetCellTransferStateRequested +NNS_G2dSetCellTransferStateRequested: ; 0x020B4400 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + mov r4, r2 + bl NNSi_G2dGetCellTransferState + mvn r1, #0x0 + str r1, [r0, #0x24] + str r5, [r0, #0x28] + str r4, [r0, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNS_G2dSetCellTransferStateRequested + + arm_func_start NNS_G2dUpdateCellTransferStateManager +NNS_G2dUpdateCellTransferStateManager: ; 0x020B442C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r0, #0x0 + str r0, [sp, #0x0] + ldr r0, _020B4558 ; =s_numCellState + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} + ldr r0, [sp, #0x0] + mov r5, #0x1 + str r0, [sp, #0x4] + mov r11, r0 + str r0, [sp, #0x8] + str r0, [sp, #0xc] +_020B4468: + ldr r0, _020B455C ; =s_pCellStateArray + ldr r1, [r0, #0x0] + ldr r0, [sp, #0x4] + add r8, r1, r0 + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + beq _020B4528 + ldr r9, [sp, #0x8] + mov r0, r9 + cmp r0, #0x3 + bge _020B4520 + add r4, r8, #0x24 +_020B4498: + mov r6, r5, lsl r9 + mov r1, r11 + ldr r0, [r8, #0x24] + ands r0, r0, r6 + beq _020B44B8 + ldr r0, [r8, #0x20] + ands r0, r0, r6 + movne r1, r5 +_020B44B8: + cmp r1, #0x0 + beq _020B4514 + ldr r0, _020B4560 ; =cvtTbl$7926 + cmp r9, #0x0 + ldr r7, [r0, r9, lsl #0x2] + ldreq r10, [r8, #0x14] + mov r0, r8 + mov r1, r9 + ldrne r10, [r8, #0x10] + bl NNSi_G2dGetVramLocation + mov r1, r0 + mov r0, r7 + ldr r7, _020B4564 ; =s_pTaskRegisterFunc + ldr r2, [r8, #0x28] + ldr r3, [r8, #0x2c] + ldr r7, [r7, #0x0] + add r2, r10, r2 + blx r7 + cmp r0, #0x0 + ldrne r1, [r4, #0x0] + mvnne r0, r6 + andne r0, r1, r0 + strne r0, [r4, #0x0] +_020B4514: + add r9, r9, #0x1 + cmp r9, #0x3 + blt _020B4498 +_020B4520: + ldr r0, [sp, #0xc] + str r0, [r8, #0x20] +_020B4528: + ldr r0, _020B4558 ; =s_numCellState + ldr r1, [r0, #0x0] + ldr r0, [sp, #0x0] + add r0, r0, #0x1 + str r0, [sp, #0x0] + cmp r0, r1 + ldr r0, [sp, #0x4] + add r0, r0, #0x30 + str r0, [sp, #0x4] + blo _020B4468 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B4558: .word s_numCellState +_020B455C: .word s_pCellStateArray +_020B4560: .word cvtTbl$7926 +_020B4564: .word s_pTaskRegisterFunc + arm_func_end NNS_G2dUpdateCellTransferStateManager + + arm_func_start NNS_G2dInitCellTransferStateManager +NNS_G2dInitCellTransferStateManager: ; 0x020B4568 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _020B45E4 ; =s_pTaskRegisterFunc + movs r6, r1 + ldr r1, _020B45E8 ; =s_numCellState + ldr r3, _020B45EC ; =s_pCellStateArray + mov r7, r0 + str r2, [r12, #0x0] + mov r5, #0x0 + addeq sp, sp, #0x4 + str r7, [r3, #0x0] + str r6, [r1, #0x0] + ldmeqia sp!, {r4-r7,pc} + mov r4, r5 +_020B45A0: + mov r0, r7 + bl NNSi_G2dInitializeVRamLocation + str r4, [r7, #0xc] + str r4, [r7, #0x10] + str r4, [r7, #0x14] + str r4, [r7, #0x18] + str r4, [r7, #0x1c] + str r4, [r7, #0x20] + str r4, [r7, #0x24] + str r4, [r7, #0x28] + add r5, r5, #0x1 + str r4, [r7, #0x2c] + cmp r5, r6 + add r7, r7, #0x30 + blo _020B45A0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B45E4: .word s_pTaskRegisterFunc +_020B45E8: .word s_numCellState +_020B45EC: .word s_pCellStateArray + arm_func_end NNS_G2dInitCellTransferStateManager + + arm_func_start NNSi_G2dInitCellTransferState +NNSi_G2dInitCellTransferState: ; 0x020B45F0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _020B4698 ; =s_pCellStateArray + mov r4, #0x30 + ldr r12, [r12, #0x0] + mov r7, r1 + mla r4, r0, r4, r12 + mov r0, r4 + mov r6, r2 + mov r5, r3 + bl NNSi_G2dInitializeVRamLocation + mvn r0, #0x0 + cmp r7, r0 + beq _020B4638 + mov r0, r4 + mov r2, r7 + mov r1, #0x0 + bl NNSi_G2dSetVramLocation +_020B4638: + mvn r0, #0x0 + cmp r6, r0 + beq _020B4654 + mov r0, r4 + mov r2, r6 + mov r1, #0x1 + bl NNSi_G2dSetVramLocation +_020B4654: + mvn r0, #0x0 + cmp r5, r0 + beq _020B4670 + mov r0, r4 + mov r2, r5 + mov r1, #0x2 + bl NNSi_G2dSetVramLocation +_020B4670: + ldr r1, [sp, #0x18] + ldr r0, [sp, #0x1c] + str r1, [r4, #0xc] + ldr r1, [sp, #0x20] + str r0, [r4, #0x10] + ldr r0, [sp, #0x24] + str r1, [r4, #0x14] + str r0, [r4, #0x18] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B4698: .word s_pCellStateArray + arm_func_end NNSi_G2dInitCellTransferState + + arm_func_start NNSi_G2dGetCellTransferState +NNSi_G2dGetCellTransferState: ; 0x020B469C + ldr r2, _020B46B0 ; =s_pCellStateArray + mov r1, #0x30 + ldr r2, [r2, #0x0] + mla r0, r1, r0, r2 + bx lr + .balign 4 +_020B46B0: .word s_pCellStateArray + arm_func_end NNSi_G2dGetCellTransferState diff --git a/arm9/asm/NNS_G2D_g2d_charcanvas.s b/arm9/asm/NNS_G2D_g2d_charcanvas.s new file mode 100644 index 00000000..6f483596 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_charcanvas.s @@ -0,0 +1,1357 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global objs$8221 +objs$8221: ; 0x020FF970 + .byte 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01 + .byte 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03 + + .global shape$8277 +shape$8277: ; 0x020FF990 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0xC0 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0 + + .section .text + + arm_func_start NNS_G2dArrangeOBJ1D +NNS_G2dArrangeOBJ1D: ; 0x020B5E50 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + mov r7, r0 + mov r0, r1 + cmp r0, #0x8 + ldr r0, [sp, #0x60] + str r1, [sp, #0x10] + str r0, [sp, #0x60] + ldr r0, [sp, #0x6c] + str r2, [sp, #0x14] + str r0, [sp, #0x6c] + ldrlt r0, [sp, #0x10] + mov r11, r3 + ldr r6, [sp, #0x64] + ldr r5, [sp, #0x68] + movge r2, #0x3 + clzlt r0, r0 + rsblt r2, r0, #0x1f + ldr r0, [sp, #0x14] + cmp r0, #0x8 + ldrlt r0, [sp, #0x14] + movge r1, #0x3 + clzlt r0, r0 + rsblt r1, r0, #0x1f + ldr r0, _020B6170 ; =objs$8221 + mvn r3, #0x0 + add r1, r0, r1, lsl #0x3 + add r0, r1, r2, lsl #0x1 + ldrb r4, [r1, r2, lsl #0x1] + ldrb r1, [r0, #0x1] + ldr r2, [sp, #0x14] + cmp r6, #0x0 + str r1, [sp, #0x18] + ldr r1, [sp, #0x10] + and r1, r1, r3, lsl r4 + str r1, [sp, #0x1c] + ldr r1, [sp, #0x18] + and r1, r2, r3, lsl r1 + str r1, [sp, #0x20] + moveq r1, #0x1 + streq r1, [sp, #0x24] + movne r1, #0x2 + strne r1, [sp, #0x24] + mov r1, #0x0 + str r1, [sp, #0x28] + bl OBJSizeToShape + ldr r1, [sp, #0x10] + ldr r2, [sp, #0x14] + mov r10, r1, asr r4 + ldr r1, [sp, #0x18] + mov r1, r2, asr r1 + str r1, [sp, #0x2c] + ldr r1, [sp, #0x24] + mov r2, r1, lsl r4 + ldr r1, [sp, #0x18] + mov r2, r2, lsl r1 + ldr r1, [sp, #0x6c] + mov r9, r2, asr r1 + mov r1, #0x0 + str r1, [sp, #0x30] + str r1, [sp, #0x34] + b _020B5FE8 +_020B5F48: + ldr r2, [sp, #0x30] + ldr r1, [sp, #0x18] + ldr r8, [sp, #0x34] + mov r2, r2, lsl r1 + ldr r1, [sp, #0x60] + add lr, r1, r2, lsl #0x3 + b _020B5FD4 +_020B5F64: + mov r1, r8, lsl r4 + add r2, r11, r1, lsl #0x3 + ldr r1, _020B6174 ; =0x000001FF + ldr r3, [r7, #0x0] + and r12, r2, r1 + ldr r1, _020B6178 ; =0xFE00FF00 + and r2, lr, #0xff + and r1, r3, r1 + orr r1, r1, r2 + orr r1, r1, r12, lsl #0x10 + str r1, [r7, #0x0] + ldr r3, [r7, #0x0] + ldr r1, _020B617C ; =0x3FFF3FFF + mov r2, #0x400 + and r1, r3, r1 + orr r1, r1, r0 + str r1, [r7, #0x0] + rsb r1, r2, #0x0 + ldrh r2, [r7, #0x4] + add r8, r8, #0x1 + and r1, r2, r1 + orr r1, r1, r5 + strh r1, [r7, #0x4] + ldr r1, [r7, #0x0] + add r5, r5, r9 + bic r1, r1, #0x2000 + orr r1, r1, r6, lsl #0xd + str r1, [r7], #0x8 +_020B5FD4: + cmp r8, r10 + blt _020B5F64 + ldr r1, [sp, #0x30] + add r1, r1, #0x1 + str r1, [sp, #0x30] +_020B5FE8: + ldr r2, [sp, #0x30] + ldr r1, [sp, #0x2c] + cmp r2, r1 + blt _020B5F48 + ldr r0, [sp, #0x28] + mla r0, r10, r1, r0 + str r0, [sp, #0x28] + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x10] + cmp r1, r0 + bhs _020B6078 + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x10] + str r0, [sp, #0x0] + ldr r0, [sp, #0x1c] + str r6, [sp, #0x4] + sub r4, r1, r0 + ldr r1, [sp, #0x6c] + str r5, [sp, #0x8] + str r1, [sp, #0xc] + ldr r1, [sp, #0x1c] + ldr r2, [sp, #0x20] + add r3, r11, r1, lsl #0x3 + mov r0, r7 + mov r1, r4 + bl NNS_G2dArrangeOBJ1D + ldr r1, [sp, #0x24] + add r7, r7, r0, lsl #0x3 + mul r2, r1, r4 + ldr r1, [sp, #0x20] + mul r2, r1, r2 + ldr r1, [sp, #0x6c] + add r5, r5, r2, lsr r1 + ldr r1, [sp, #0x28] + add r0, r1, r0 + str r0, [sp, #0x28] +_020B6078: + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x14] + cmp r1, r0 + bhs _020B60F0 + ldr r1, [sp, #0x60] + ldr r0, [sp, #0x20] + mov r3, r11 + add r0, r1, r0, lsl #0x3 + str r0, [sp, #0x0] + str r6, [sp, #0x4] + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x20] + str r5, [sp, #0x8] + sub r4, r1, r0 + ldr r1, [sp, #0x6c] + mov r0, r7 + str r1, [sp, #0xc] + ldr r1, [sp, #0x1c] + mov r2, r4 + bl NNS_G2dArrangeOBJ1D + ldr r2, [sp, #0x24] + ldr r1, [sp, #0x1c] + add r7, r7, r0, lsl #0x3 + mul r1, r2, r1 + mul r2, r4, r1 + ldr r1, [sp, #0x6c] + add r5, r5, r2, lsr r1 + ldr r1, [sp, #0x28] + add r0, r1, r0 + str r0, [sp, #0x28] +_020B60F0: + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x10] + cmp r1, r0 + bhs _020B6164 + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x14] + cmp r1, r0 + bhs _020B6164 + ldr r1, [sp, #0x60] + ldr r0, [sp, #0x20] + ldr r2, [sp, #0x10] + add r0, r1, r0, lsl #0x3 + ldr r1, [sp, #0x1c] + ldr r3, [sp, #0x14] + str r0, [sp, #0x0] + sub r1, r2, r1 + ldr r2, [sp, #0x20] + str r6, [sp, #0x4] + sub r2, r3, r2 + ldr r3, [sp, #0x1c] + ldr r4, [sp, #0x6c] + str r5, [sp, #0x8] + mov r0, r7 + add r3, r11, r3, lsl #0x3 + str r4, [sp, #0xc] + bl NNS_G2dArrangeOBJ1D + ldr r1, [sp, #0x28] + add r0, r1, r0 + str r0, [sp, #0x28] +_020B6164: + ldr r0, [sp, #0x28] + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B6170: .word objs$8221 +_020B6174: .word 0x000001FF +_020B6178: .word 0xFE00FF00 +_020B617C: .word 0x3FFF3FFF + arm_func_end NNS_G2dArrangeOBJ1D + + arm_func_start NNSi_G2dCalcRequiredOBJ +NNSi_G2dCalcRequiredOBJ: ; 0x020B6180 + stmdb sp!, {r4-r6,lr} + mov r3, r0, lsr #0x3 + mov r6, r1, lsr #0x3 + mul r12, r3, r6 + and r2, r0, #0x4 + and lr, r0, #0x2 + and r0, r0, #0x1 + add r4, r0, lr, lsr #0x1 + mov r5, r2, lsr #0x2 + and r0, r1, #0x4 + add lr, r12, #0x0 + add r12, r5, r4, lsl #0x1 + mla r12, r6, r12, lr + and lr, r1, #0x2 + and r1, r1, #0x1 + add lr, r1, lr, lsr #0x1 + mov r1, r0, lsr #0x2 + add r1, r1, lr, lsl #0x1 + mla r12, r3, r1, r12 + add r1, r4, r2, lsr #0x2 + add r0, lr, r0, lsr #0x2 + mla r0, r1, r0, r12 + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G2dCalcRequiredOBJ + + arm_func_start NNS_G2dMapScrToChar256x16Pltt +NNS_G2dMapScrToChar256x16Pltt: ; 0x020B61DC + stmdb sp!, {r4-r8,lr} + ldr r12, [sp, #0x1c] + ldr r8, [sp, #0x18] + mov r12, r12, lsl #0x1c + mov r4, r12, lsr #0x10 + mov r6, #0x0 + cmp r2, #0x0 + ldmleia sp!, {r4-r8,pc} + mov lr, r3, lsl #0x1 + mov r12, r6 +_020B6204: + mov r5, r0 + mov r7, r12 + cmp r1, #0x0 + ble _020B622C +_020B6214: + orr r3, r4, r8 + add r7, r7, #0x1 + cmp r7, r1 + add r8, r8, #0x1 + strh r3, [r5], #0x2 + blt _020B6214 +_020B622C: + add r6, r6, #0x1 + cmp r6, r2 + add r0, r0, lr + blt _020B6204 + ldmia sp!, {r4-r8,pc} + arm_func_end NNS_G2dMapScrToChar256x16Pltt + + arm_func_start NNS_G2dMapScrToCharText +NNS_G2dMapScrToCharText: ; 0x020B6240 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + ldr r5, [sp, #0x24] + ldr lr, [sp, #0x20] + cmp r5, #0x20 + ldr r12, [sp, #0x28] + bgt _020B6280 + mla r4, r5, lr, r3 + ldr lr, [sp, #0x2c] + str r12, [sp, #0x0] + mov r3, r5 + add r0, r0, r4, lsl #0x1 + str lr, [sp, #0x4] + bl NNS_G2dMapScrToChar256x16Pltt + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} +_020B6280: + ldr r4, [sp, #0x2c] + add r7, lr, r2 + mov r2, r4, lsl #0x1c + cmp lr, r7 + add r8, r3, r1 + mov r4, r2, lsr #0x10 + addge sp, sp, #0x8 + ldmgeia sp!, {r4-r8,pc} +_020B62A0: + cmp lr, #0x20 + movlt r1, lr + addge r1, lr, #0x20 + mov r6, r3 + cmp r3, r8 + add r5, r0, r1, lsl #0x6 + bge _020B62E4 +_020B62BC: + cmp r6, #0x20 + movlt r1, r6 + addge r1, r6, #0x3e0 + orr r2, r4, r12 + mov r1, r1, lsl #0x1 + add r6, r6, #0x1 + strh r2, [r5, r1] + cmp r6, r8 + add r12, r12, #0x1 + blt _020B62BC +_020B62E4: + add lr, lr, #0x1 + cmp lr, r7 + blt _020B62A0 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + arm_func_end NNS_G2dMapScrToCharText + + arm_func_start NNS_G2dCharCanvasInitForOBJ1D +NNS_G2dCharCanvasInitForOBJ1D: ; 0x020B62F8 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x18 + cmp r2, #0x8 + movlt r4, r2 + movge r12, #0x3 + clzlt r4, r4 + rsblt r12, r4, #0x1f + cmp r3, #0x8 + movlt r4, r3 + movge r6, #0x3 + clzlt r4, r4 + rsblt r6, r4, #0x1f + ldr r4, _020B6378 ; =objs$8221 + ldr r5, [sp, #0x28] + add r4, r4, r6, lsl #0x3 + ldrb r6, [r4, r12, lsl #0x1] + add r12, r4, r12, lsl #0x1 + ldr r4, _020B637C ; =DrawGlyph1D + strb r6, [sp, #0x14] + ldrb r6, [r12, #0x1] + ldr lr, _020B6380 ; =ClearContinuous + ldr ip, _020B6384 ; =ClearArea1D + strb r6, [sp, #0x15] + str r5, [sp, #0x0] + str r4, [sp, #0x4] + str lr, [sp, #0x8] + str r12, [sp, #0xc] + ldr r12, [sp, #0x14] + str r12, [sp, #0x10] + bl InitCharCanvas + add sp, sp, #0x18 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B6378: .word objs$8221 +_020B637C: .word DrawGlyph1D +_020B6380: .word ClearContinuous +_020B6384: .word ClearArea1D + arm_func_end NNS_G2dCharCanvasInitForOBJ1D + + arm_func_start NNS_G2dCharCanvasInitForBG +NNS_G2dCharCanvasInitForBG: ; 0x020B6388 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr lr, [sp, #0x18] + ldr ip, _020B63C0 ; =DrawGlyphLine + str lr, [sp, #0x0] + ldr lr, _020B63C4 ; =ClearContinuous + str r12, [sp, #0x4] + ldr ip, _020B63C8 ; =ClearAreaLine + str lr, [sp, #0x8] + str r12, [sp, #0xc] + str r2, [sp, #0x10] + bl InitCharCanvas + add sp, sp, #0x14 + ldmia sp!, {pc} + .balign 4 +_020B63C0: .word DrawGlyphLine +_020B63C4: .word ClearContinuous +_020B63C8: .word ClearAreaLine + arm_func_end NNS_G2dCharCanvasInitForBG + + arm_func_start NNS_G2dCharCanvasDrawChar +NNS_G2dCharCanvasDrawChar: ; 0x020B63CC + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r7, r1 + ldrh r1, [sp, #0x2c] + mov r8, r0 + mov r0, r7 + mov r6, r2 + mov r5, r3 + bl NNS_G2dFontFindGlyphIndex + ldr r1, _020B6484 ; =0x0000FFFF + mov r4, r0 + cmp r4, r1 + ldreq r0, [r7, #0x0] + ldreqh r4, [r0, #0x2] + mov r0, r7 + mov r1, r4 + bl NNS_G2dFontGetCharWidthsFromIndex + str r0, [sp, #0x8] + ldr r0, [r7, #0x0] + ldr r2, [sp, #0x28] + ldr r0, [r0, #0x8] + add r1, sp, #0x8 + ldrh r3, [r0, #0x2] + add r12, r0, #0x8 + mov r0, r8 + mla r3, r4, r3, r12 + str r3, [sp, #0xc] + str r2, [sp, #0x0] + str r1, [sp, #0x4] + ldr r1, [sp, #0x8] + ldr r4, [r8, #0x14] + ldrsb r2, [r1, #0x0] + mov r1, r7 + mov r3, r5 + add r2, r6, r2 + blx r4 + ldrh r0, [r7, #0x8] + cmp r0, #0x0 + ldrne r0, [sp, #0x8] + ldrnesb r1, [r0, #0x0] + ldrneb r0, [r0, #0x1] + addne r0, r1, r0 + ldreq r0, [sp, #0x8] + ldreqsb r0, [r0, #0x2] + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B6484: .word 0x0000FFFF + arm_func_end NNS_G2dCharCanvasDrawChar + + arm_func_start InitCharCanvas +InitCharCanvas: ; 0x020B6488 + str r2, [r0, #0x4] + ldr r2, [sp, #0x0] + str r3, [r0, #0x8] + strb r2, [r0, #0xc] + ldr r2, [sp, #0x4] + str r1, [r0, #0x0] + ldr r1, [sp, #0x8] + str r2, [r0, #0x14] + ldr r2, [sp, #0xc] + str r1, [r0, #0x18] + ldr r1, [sp, #0x10] + str r2, [r0, #0x1c] + str r1, [r0, #0x10] + bx lr + arm_func_end InitCharCanvas + + arm_func_start ClearArea1D +ClearArea1D: ; 0x020B64C0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x54 + ldrb r4, [r0, #0xc] + mov r10, r2 + str r1, [sp, #0xc] + str r4, [sp, #0x44] + ldr r1, [sp, #0x44] + ldr r4, [sp, #0x78] + cmp r1, #0x4 + add r1, r10, r4 + str r1, [sp, #0x1c] + ldr r2, [sp, #0x7c] + mov r1, r3 + add r1, r1, r2 + str r1, [sp, #0x20] + ldrne r1, [sp, #0xc] + str r3, [sp, #0x10] + orrne r1, r1, r1, lsl #0x8 + orrne r1, r1, r1, lsl #0x10 + strne r1, [sp, #0xc] + bne _020B6528 + ldr r1, [sp, #0xc] + orr r1, r1, r1, lsl #0x4 + orr r1, r1, r1, lsl #0x8 + orr r1, r1, r1, lsl #0x10 + str r1, [sp, #0xc] +_020B6528: + bic r1, r10, #0x7 + str r1, [sp, #0x30] + ldr r1, [sp, #0x10] + ldr r2, [r0, #0x10] + bic r1, r1, #0x7 + str r1, [sp, #0x14] + ldr r1, [sp, #0x44] + str r2, [sp, #0x4c] + mov r3, r1, lsl #0x6 + mov r2, r3, asr #0x2 + ldr r1, [sp, #0x20] + add r3, r3, r2, lsr #0x1d + ldr r2, [sp, #0x1c] + add r6, r1, #0x7 + add r2, r2, #0x7 + bic r5, r2, #0x7 + bic r2, r6, #0x7 + ldr r1, [sp, #0x30] + str r2, [sp, #0x24] + mov r2, r3, asr #0x3 + str r2, [sp, #0x48] + mov r4, r1, asr #0x2 + ldr r2, [sp, #0x30] + ldr r1, [sp, #0x14] + add r2, r2, r4, lsr #0x1d + mov r2, r2, asr #0x3 + str r2, [sp, #0x2c] + ldr r2, [sp, #0x14] + mov r1, r1, asr #0x2 + add r1, r2, r1, lsr #0x1d + mov r6, r1, asr #0x3 + ldr r1, [sp, #0x24] + cmp r2, r1 + ldr r1, [r0, #0x4] + str r1, [sp, #0x40] + ldr r1, [r0, #0x8] + ldr r0, [r0, #0x0] + str r1, [sp, #0x3c] + str r0, [sp, #0x28] + ldrb r0, [sp, #0x4c] + str r0, [sp, #0x38] + ldrb r0, [sp, #0x4d] + str r0, [sp, #0x34] + addge sp, sp, #0x54 + ldmgeia sp!, {r4-r11,pc} + mov r4, #0x0 + mov r11, #0x8 +_020B65E4: + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r7, [sp, #0x2c] + cmp r1, r0 + movlt r1, r0 + ldrlt r0, [sp, #0x14] + sublt r9, r1, r0 + ldr r1, [sp, #0x20] + ldr r0, [sp, #0x14] + movge r9, r4 + sub r0, r1, r0 + cmp r0, #0x8 + movgt r0, r11 + sub r0, r0, r9 + str r0, [sp, #0x18] + ldr r0, [sp, #0x30] + cmp r0, r5 + mov r8, r0 + bge _020B66B0 +_020B6630: + ldr r0, [sp, #0x38] + ldr r2, [sp, #0x40] + str r0, [sp, #0x0] + ldr r0, [sp, #0x34] + ldr r3, [sp, #0x3c] + str r0, [sp, #0x4] + mov r0, r7 + mov r1, r6 + bl GetCharIndex1D + ldr r2, [sp, #0x1c] + cmp r8, r10 + sublt r1, r10, r8 + sub r2, r2, r8 + movge r1, r4 + cmp r2, #0x8 + movgt r2, r11 + sub r3, r2, r1 + ldr r2, [sp, #0x18] + ldr r12, [sp, #0x48] + str r2, [sp, #0x0] + ldr r2, [sp, #0xc] + str r2, [sp, #0x4] + ldr r2, [sp, #0x44] + str r2, [sp, #0x8] + ldr r2, [sp, #0x28] + mla r0, r12, r0, r2 + mov r2, r9 + bl ClearChar + add r8, r8, #0x8 + add r7, r7, #0x1 + cmp r8, r5 + blt _020B6630 +_020B66B0: + ldr r0, [sp, #0x14] + add r6, r6, #0x1 + add r1, r0, #0x8 + ldr r0, [sp, #0x24] + str r1, [sp, #0x14] + cmp r1, r0 + blt _020B65E4 + add sp, sp, #0x54 + ldmia sp!, {r4-r11,pc} + arm_func_end ClearArea1D + + arm_func_start ClearAreaLine +ClearAreaLine: ; 0x020B66D4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + ldrb r4, [r0, #0xc] + mov r10, r2 + str r1, [sp, #0xc] + str r4, [sp, #0x2c] + ldr r1, [sp, #0x2c] + ldr r4, [sp, #0x60] + cmp r1, #0x4 + add r1, r10, r4 + str r1, [sp, #0x18] + ldr r2, [sp, #0x64] + mov r1, r3 + add r1, r1, r2 + str r1, [sp, #0x1c] + ldrne r1, [sp, #0xc] + str r3, [sp, #0x10] + orrne r1, r1, r1, lsl #0x8 + orrne r1, r1, r1, lsl #0x10 + strne r1, [sp, #0xc] + bne _020B673C + ldr r1, [sp, #0xc] + orr r1, r1, r1, lsl #0x4 + orr r1, r1, r1, lsl #0x8 + orr r1, r1, r1, lsl #0x10 + str r1, [sp, #0xc] +_020B673C: + ldr r1, [sp, #0x10] + bic r1, r1, #0x7 + mov r2, r1, asr #0x2 + str r1, [sp, #0x14] + add r1, r1, r2, lsr #0x1d + ldr r2, [r0, #0x10] + mov r3, r1, asr #0x3 + mul r1, r3, r2 + bic r3, r10, #0x7 + str r3, [sp, #0x28] + ldr r3, [sp, #0x2c] + mov r6, r3, lsl #0x6 + ldr r3, [sp, #0x28] + mov r4, r6, asr #0x2 + mov r5, r3, asr #0x2 + add r5, r3, r5, lsr #0x1d + add r4, r6, r4, lsr #0x1d + mov r3, r4, asr #0x3 + str r3, [sp, #0x30] + ldr r3, [sp, #0x1c] + add r1, r1, r5, asr #0x3 + add r4, r3, #0x7 + ldr r3, [r0, #0x0] + ldr r0, [sp, #0x18] + add r5, r0, #0x7 + ldr r0, [sp, #0x30] + bic r7, r5, #0x7 + mla r1, r0, r1, r3 + bic r0, r4, #0x7 + str r0, [sp, #0x20] + ldr r0, [sp, #0x30] + str r1, [sp, #0x24] + mul r0, r2, r0 + str r0, [sp, #0x34] + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x20] + cmp r1, r0 + addge sp, sp, #0x3c + ldmgeia sp!, {r4-r11,pc} + mov r5, #0x0 + mov r4, #0x8 +_020B67E0: + ldr r1, [sp, #0x14] + ldr r0, [sp, #0x10] + ldr r6, [sp, #0x24] + cmp r1, r0 + movlt r1, r0 + ldrlt r0, [sp, #0x14] + sublt r9, r1, r0 + ldr r1, [sp, #0x1c] + ldr r0, [sp, #0x14] + movge r9, r5 + sub r0, r1, r0 + cmp r0, #0x8 + movgt r0, r4 + sub r11, r0, r9 + ldr r0, [sp, #0x28] + cmp r0, r7 + mov r8, r0 + bge _020B687C +_020B6828: + ldr r0, [sp, #0x18] + cmp r8, r10 + sublt r1, r10, r8 + sub r0, r0, r8 + movge r1, r5 + cmp r0, #0x8 + movgt r0, r4 + sub r3, r0, r1 + ldr r0, [sp, #0xc] + str r11, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [sp, #0x2c] + mov r2, r9 + str r0, [sp, #0x8] + mov r0, r6 + bl ClearChar + ldr r0, [sp, #0x30] + add r8, r8, #0x8 + add r6, r6, r0 + cmp r8, r7 + blt _020B6828 +_020B687C: + ldr r1, [sp, #0x24] + ldr r0, [sp, #0x34] + add r0, r1, r0 + str r0, [sp, #0x24] + ldr r0, [sp, #0x14] + add r1, r0, #0x8 + ldr r0, [sp, #0x20] + str r1, [sp, #0x14] + cmp r1, r0 + blt _020B67E0 + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + arm_func_end ClearAreaLine + + arm_func_start ClearContinuous +ClearContinuous: ; 0x020B68AC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r0 + ldrb r2, [r3, #0xc] + ldr r12, [r3, #0x4] + cmp r2, #0x4 + orreq r0, r1, r1, lsl #0x4 + orreq r0, r0, r0, lsl #0x8 + orreq r1, r0, r0, lsl #0x10 + orrne r0, r1, r1, lsl #0x8 + orrne r1, r0, r0, lsl #0x10 + ldr r0, [r3, #0x8] + mov r2, r2, lsl #0x6 + mul lr, r12, r0 + mov r0, r2, asr #0x2 + add r0, r2, r0, lsr #0x1d + mov r2, r0, asr #0x3 + mov r0, r1 + mul r2, lr, r2 + ldr r1, [r3, #0x0] + bl MIi_CpuClearFast + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end ClearContinuous + + arm_func_start DrawGlyph1D +DrawGlyph1D: ; 0x020B6908 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4c + ldr r7, [sp, #0x74] + ldrb r5, [r0, #0xc] + ldr r6, [r1, #0x0] + ldr r4, [r7, #0x0] + ldr r9, [r6, #0x8] + mov r8, r5, lsl #0x6 + ldrb r4, [r4, #0x1] + mov r5, r8, asr #0x2 + add r5, r8, r5, lsr #0x1d + ldrb r9, [r9, #0x1] + ldr r8, [r0, #0x4] + ldr r6, [r0, #0x8] + str r2, [sp, #0x8] + str r3, [sp, #0xc] + cmp r4, #0x0 + mov r5, r5, asr #0x3 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r11,pc} + adds r3, r2, r4 + addmi sp, sp, #0x4c + ldmmiia sp!, {r4-r11,pc} + ldr r2, [sp, #0xc] + adds r2, r2, r9 + addmi sp, sp, #0x4c + ldmmiia sp!, {r4-r11,pc} + ldr r10, [sp, #0x8] + add r3, r3, #0x7 + cmp r10, #0x0 + movle r10, #0x0 + strle r10, [sp, #0x10] + movgt r10, r10, lsr #0x3 + strgt r10, [sp, #0x10] + ldr r10, [sp, #0xc] + add r2, r2, #0x7 + cmp r10, #0x0 + movle r10, #0x0 + mov r11, r2, lsr #0x3 + mov r3, r3, lsr #0x3 + movgt r10, r10, lsr #0x3 + cmp r3, r8 + movcs r3, r8 + cmp r11, r6 + ldr r2, [sp, #0x10] + movcs r11, r6 + subs r8, r3, r2 + addmi sp, sp, #0x4c + sub r3, r11, r10 + ldmmiia sp!, {r4-r11,pc} + cmp r3, #0x0 + addlt sp, sp, #0x4c + ldmltia sp!, {r4-r11,pc} + ldr r2, [sp, #0x8] + ldr r6, [r0, #0x0] + cmp r2, #0x0 + andge r2, r2, #0x7 + strge r2, [sp, #0x8] + ldr r2, [sp, #0xc] + ldr r11, [sp, #0x8] + cmp r2, #0x0 + andge r2, r2, #0x7 + strge r2, [sp, #0xc] + sub r8, r11, r8, lsl #0x3 + ldr r11, [sp, #0xc] + ldr r2, [sp, #0x70] + sub r3, r11, r3, lsl #0x3 + str r3, [sp, #0x14] + ldr r3, [r7, #0x4] + sub r2, r2, #0x1 + str r3, [sp, #0x28] + str r2, [sp, #0x48] + str r9, [sp, #0x38] + str r4, [sp, #0x34] + ldr r4, [r1, #0x0] + ldr r2, [sp, #0x14] + mov r3, r11 + cmp r3, r2 + ldr r2, [r4, #0x8] + ldrb r3, [r2, #0x6] + str r3, [sp, #0x40] + ldrb r2, [r0, #0xc] + str r2, [sp, #0x44] + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x8] + ldrb r1, [r1, #0x0] + mul r1, r3, r1 + str r1, [sp, #0x3c] + ldr r1, [r0, #0x10] + str r1, [sp, #0x20] + ldr r1, [r0, #0x4] + ldr r0, [r0, #0x8] + ldrb r11, [sp, #0x20] + ldrb r4, [sp, #0x21] + str r1, [sp, #0x1c] + str r0, [sp, #0x18] + addle sp, sp, #0x4c + ldmleia sp!, {r4-r11,pc} +_020B6A90: + ldr r0, [sp, #0xc] + ldr r7, [sp, #0x10] + str r0, [sp, #0x30] + ldr r0, [sp, #0x8] + cmp r0, r8 + mov r9, r0 + ble _020B6AEC +_020B6AAC: + ldr r2, [sp, #0x1c] + str r11, [sp, #0x0] + ldr r3, [sp, #0x18] + mov r0, r7 + mov r1, r10 + str r4, [sp, #0x4] + bl GetCharIndex1D + mla r1, r0, r5, r6 + add r0, sp, #0x24 + str r9, [sp, #0x2c] + str r1, [sp, #0x24] + bl LetterChar + sub r9, r9, #0x8 + add r7, r7, #0x1 + cmp r9, r8 + bgt _020B6AAC +_020B6AEC: + ldr r0, [sp, #0xc] + add r10, r10, #0x1 + sub r1, r0, #0x8 + ldr r0, [sp, #0x14] + str r1, [sp, #0xc] + cmp r1, r0 + bgt _020B6A90 + add sp, sp, #0x4c + ldmia sp!, {r4-r11,pc} + arm_func_end DrawGlyph1D + + arm_func_start DrawGlyphLine +DrawGlyphLine: ; 0x020B6B10 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x2c + ldr r4, [sp, #0x54] + ldrb r5, [r0, #0xc] + str r4, [sp, #0x54] + ldr r4, [r4, #0x0] + ldr r6, [r1, #0x0] + mov r7, r5, lsl #0x6 + ldrb r4, [r4, #0x1] + mov r5, r7, asr #0x2 + add r5, r7, r5, lsr #0x1d + cmp r4, #0x0 + ldr r6, [r6, #0x8] + mov r9, r3 + ldr r8, [r0, #0x4] + ldr r7, [r0, #0x8] + mov r10, r2 + mov r5, r5, asr #0x3 + addeq sp, sp, #0x2c + ldr lr, [r0, #0x0] + ldrb r3, [r6, #0x1] + ldmeqia sp!, {r4-r11,pc} + adds r6, r10, r4 + addmi sp, sp, #0x2c + ldmmiia sp!, {r4-r11,pc} + adds r2, r9, r3 + addmi sp, sp, #0x2c + ldmmiia sp!, {r4-r11,pc} + cmp r10, #0x0 + movle r11, #0x0 + add r6, r6, #0x7 + movgt r11, r10, lsr #0x3 + cmp r9, #0x0 + movle r12, #0x0 + add r2, r2, #0x7 + mov r6, r6, lsr #0x3 + movgt r12, r9, lsr #0x3 + cmp r6, r8 + movcs r6, r8 + mov r2, r2, lsr #0x3 + cmp r2, r7 + movcs r2, r7 + subs r7, r6, r11 + addmi sp, sp, #0x2c + sub r2, r2, r12 + ldmmiia sp!, {r4-r11,pc} + cmp r2, #0x0 + addlt sp, sp, #0x2c + ldmltia sp!, {r4-r11,pc} + ldr r6, [r0, #0x10] + cmp r10, #0x0 + sub r8, r6, r7 + mul r8, r5, r8 + mla r11, r6, r12, r11 + andge r10, r10, #0x7 + str r8, [sp, #0x0] + ldr r8, [sp, #0x54] + mla r6, r5, r11, lr + ldr r12, [r8, #0x4] + ldr r11, [sp, #0x50] + cmp r9, #0x0 + sub r8, r11, #0x1 + andge r9, r9, #0x7 + sub r11, r9, r2, lsl #0x3 + str r12, [sp, #0x8] + str r4, [sp, #0x14] + str r8, [sp, #0x28] + str r3, [sp, #0x18] + ldr r3, [r1, #0x0] + cmp r9, r11 + ldr r2, [r3, #0x8] + sub r7, r10, r7, lsl #0x3 + ldrb r2, [r2, #0x6] + str r2, [sp, #0x20] + ldrb r0, [r0, #0xc] + str r0, [sp, #0x24] + ldr r0, [r1, #0x0] + ldr r0, [r0, #0x8] + ldrb r0, [r0, #0x0] + mul r0, r2, r0 + str r0, [sp, #0x1c] + addle sp, sp, #0x2c + ldmleia sp!, {r4-r11,pc} + add r4, sp, #0x4 +_020B6C60: + mov r8, r10 + str r9, [sp, #0x10] + cmp r10, r7 + ble _020B6C90 +_020B6C70: + mov r0, r4 + str r6, [sp, #0x4] + str r8, [sp, #0xc] + bl LetterChar + sub r8, r8, #0x8 + cmp r8, r7 + add r6, r6, r5 + bgt _020B6C70 +_020B6C90: + ldr r0, [sp, #0x0] + sub r9, r9, #0x8 + cmp r9, r11 + add r6, r6, r0 + bgt _020B6C60 + add sp, sp, #0x2c + ldmia sp!, {r4-r11,pc} + arm_func_end DrawGlyphLine + + arm_func_start LetterChar +LetterChar: ; 0x020B6CAC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + ldr r5, [r0, #0x8] + ldr r4, [r0, #0xc] + cmp r5, #0x0 + strge r5, [sp, #0x0] + movlt r1, #0x0 + strlt r1, [sp, #0x0] + ldr r1, [r0, #0x10] + cmp r4, #0x0 + add r10, r5, r1 + ldr r1, [r0, #0x14] + movge r2, r4 + movlt r2, #0x0 + cmp r10, #0x8 + add r3, r4, r1 + movge r10, #0x8 + cmp r3, #0x8 + movge r3, #0x8 + cmp r4, #0x0 + movgt r4, #0x0 + cmp r5, #0x0 + ldr r8, [r0, #0x20] + movgt r5, #0x0 + rsb r1, r4, #0x0 + mul r7, r10, r8 + ldr r6, [r0, #0x1c] + rsb r4, r5, #0x0 + mul r9, r6, r4 + ldr r4, [r0, #0x18] + mov r10, r7 + str r4, [sp, #0x8] + ldr r4, [sp, #0x0] + cmp r8, #0x4 + mul r5, r4, r8 + ldr r4, [sp, #0x8] + str r5, [sp, #0x0] + mla r11, r1, r4, r9 + ldr r1, [r0, #0x4] + str r1, [sp, #0x4] + bne _020B6E24 + ldr r1, [r0, #0x0] + ldr r7, [r0, #0x24] + add r0, r1, r2, lsl #0x2 + str r0, [sp, #0xc] + add r0, r1, r3, lsl #0x2 + ldr r1, [sp, #0xc] + str r0, [sp, #0x10] + cmp r1, r0 + addcs sp, sp, #0x34 + ldmcsia sp!, {r4-r11,pc} + mov r0, #0x0 + add r9, sp, #0x24 + mov r4, #0xf + str r0, [sp, #0x1c] +_020B6D88: + ldr r0, [sp, #0xc] + mov r1, r11, lsr #0x1f + ldr r5, [r0, #0x0] + ldr r0, [sp, #0x4] + rsb r2, r1, r11, lsl #0x1d + add r0, r0, r11, lsr #0x3 + str r0, [sp, #0x24] + ldr r0, [sp, #0x1c] + add r1, r1, r2, ror #0x1d + strb r0, [sp, #0x28] + strb r0, [sp, #0x29] + mov r0, r9 + bl NNSi_G2dBitReaderRead + ldr r8, [sp, #0x0] + mov r0, r8 + cmp r0, r10 + bhs _020B6DF8 +_020B6DCC: + mov r0, r9 + mov r1, r6 + bl NNSi_G2dBitReaderRead + cmp r0, #0x0 + mvnne r1, r4, lsl r8 + addne r0, r7, r0 + andne r1, r5, r1 + orrne r5, r1, r0, lsl r8 + add r8, r8, #0x4 + cmp r8, r10 + blo _020B6DCC +_020B6DF8: + ldr r0, [sp, #0xc] + add r1, r0, #0x4 + str r5, [r0, #0x0] + ldr r0, [sp, #0x10] + str r1, [sp, #0xc] + cmp r1, r0 + ldr r0, [sp, #0x8] + add r11, r11, r0 + blo _020B6D88 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} +_020B6E24: + ldr r1, [r0, #0x0] + ldr r9, [r0, #0x24] + add r0, r1, r2, lsl #0x3 + str r0, [sp, #0x14] + add r0, r1, r3, lsl #0x3 + ldr r1, [sp, #0x14] + str r0, [sp, #0x18] + cmp r1, r0 + addcs sp, sp, #0x34 + ldmcsia sp!, {r4-r11,pc} + mov r0, #0x0 + mov r4, #0xff + str r0, [sp, #0x20] +_020B6E58: + mov r1, r11, lsr #0x1f + rsb r0, r1, r11, lsl #0x1d + add r1, r1, r0, ror #0x1d + ldr r0, [sp, #0x14] + ldr r8, [r0, #0x0] + ldr r7, [r0, #0x4] + ldr r0, [sp, #0x4] + add r0, r0, r11, lsr #0x3 + str r0, [sp, #0x2c] + ldr r0, [sp, #0x20] + strb r0, [sp, #0x30] + strb r0, [sp, #0x31] + add r0, sp, #0x2c + bl NNSi_G2dBitReaderRead + ldr r0, [sp, #0x0] + cmp r0, r10 + mov r5, r0 + bhs _020B6EE8 +_020B6EA0: + add r0, sp, #0x2c + mov r1, r6 + bl NNSi_G2dBitReaderRead + cmp r0, #0x0 + beq _020B6EDC + cmp r5, #0x20 + mvncc r1, r4, lsl r5 + addcc r0, r9, r0 + andcc r1, r8, r1 + orrcc r8, r1, r0, lsl r5 + subcs r2, r5, #0x20 + mvncs r1, r4, lsl r2 + addcs r0, r9, r0 + andcs r1, r7, r1 + orrcs r7, r1, r0, lsl r2 +_020B6EDC: + add r5, r5, #0x8 + cmp r5, r10 + blo _020B6EA0 +_020B6EE8: + ldr r0, [sp, #0x14] + str r8, [r0, #0x0] + add r1, r0, #0x8 + str r7, [r0, #0x4] + ldr r0, [sp, #0x18] + str r1, [sp, #0x14] + cmp r1, r0 + ldr r0, [sp, #0x8] + add r11, r11, r0 + blo _020B6E58 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + arm_func_end LetterChar + + arm_func_start ClearChar +ClearChar: ; 0x020B6F18 + stmdb sp!, {r4-r6,lr} + mov lr, r0 + cmp r3, #0x8 + ldr r0, [sp, #0x14] + bne _020B6F4C + ldr r4, [sp, #0x10] + cmp r4, #0x8 + bne _020B6F4C + ldr r2, [sp, #0x18] + mov r1, lr + mov r2, r2, lsl #0x3 + bl MIi_CpuClearFast + ldmia sp!, {r4-r6,pc} +_020B6F4C: + ldr r4, [sp, #0x18] + cmp r4, #0x4 + bne _020B6FAC + mov r5, r1, lsl #0x2 + add r4, r5, r3, lsl #0x2 + mvn r3, #0x0 + rsb r4, r4, #0x20 + mov r3, r3, lsr r5 + add r1, r4, r1, lsl #0x2 + mov r3, r3, lsl r1 + ldr r1, [sp, #0x10] + add r5, lr, r2, lsl #0x2 + add r2, r5, r1, lsl #0x2 + and r6, r0, r3, lsr r4 + cmp r5, r2 + mvn r1, r3, lsr r4 + ldmcsia sp!, {r4-r6,pc} +_020B6F90: + ldr r0, [r5, #0x0] + and r0, r0, r1 + orr r0, r6, r0 + str r0, [r5], #0x4 + cmp r5, r2 + blo _020B6F90 + ldmia sp!, {r4-r6,pc} +_020B6FAC: + mov r12, r1, lsl #0x3 + add r1, r12, r3, lsl #0x3 + rsb r1, r1, #0x40 + mvn r3, #0x0 + cmp r1, #0x20 + mov r5, r3, lsr r12 + subcs r4, r1, #0x20 + addcs r3, r12, r4 + movcs r3, r5, lsl r3 + movcs r3, r3, lsr r4 + movcc r3, r5, lsl r12 + mvn r4, #0x0 + add r5, lr, r2, lsl #0x3 + cmp r12, #0x20 + mov r4, r4, lsl r1 + subcs r12, r12, #0x20 + addcs r1, r12, r1 + movcs r1, r4, lsr r1 + movcs r6, r1, lsl r12 + movcc r6, r4, lsr r1 + ldr r1, [sp, #0x10] + and lr, r0, r3 + add r4, r5, r1, lsl #0x3 + cmp r5, r4 + and r12, r0, r6 + mvn r2, r3 + mvn r1, r6 + ldmcsia sp!, {r4-r6,pc} +_020B701C: + ldr r0, [r5, #0x0] + and r0, r0, r2 + orr r0, lr, r0 + str r0, [r5, #0x0] + ldr r0, [r5, #0x4] + and r0, r0, r1 + orr r0, r12, r0 + str r0, [r5, #0x4] + add r5, r5, #0x8 + cmp r5, r4 + blo _020B701C + ldmia sp!, {r4-r6,pc} + arm_func_end ClearChar + + arm_func_start OBJSizeToShape +OBJSizeToShape: ; 0x020B704C + ldrb r3, [r0, #0x1] + ldr r2, _020B7064 ; =shape$8277 + ldrb r1, [r0, #0x0] + add r0, r2, r3, lsl #0x4 + ldr r0, [r0, r1, lsl #0x2] + bx lr + .balign 4 +_020B7064: .word shape$8277 + arm_func_end OBJSizeToShape + + arm_func_start GetCharIndex1D +GetCharIndex1D: ; 0x020B7068 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr fp, _020B7164 ; =objs$8221 + mov r9, #0x0 + mov r10, #0x3 + mvn r7, #0x0 +_020B7080: + ldr r4, [sp, #0x2c] + ldr r6, [sp, #0x28] + and r12, r3, r7, lsl r4 + cmp r12, r1 + mov r8, r7, lsl r6 + mov r5, r7, lsl r4 + and lr, r2, r7, lsl r6 + bhi _020B70D0 + mla r9, r2, r12, r9 + cmp lr, r0 + movhi r2, lr + subhi r1, r1, r12 + subhi r3, r3, r12 + bhi _020B7118 + sub r3, r3, r12 + mla r9, lr, r3, r9 + sub r0, r0, lr + sub r1, r1, r12 + sub r2, r2, lr + b _020B7118 +_020B70D0: + cmp lr, r0 + mlals r9, lr, r12, r9 + mvn r3, r5 + movls r3, r12 + subls r0, r0, lr + subls r2, r2, lr + bls _020B7118 + and r2, r1, r5 + mla r5, lr, r2, r9 + and r2, r0, r8 + and r1, r1, r3 + add r2, r5, r2, lsl r4 + mvn r3, r8 + add r1, r2, r1, lsl r6 + and r0, r0, r3 + add sp, sp, #0x4 + add r0, r1, r0 + ldmia sp!, {r4-r11,pc} +_020B7118: + cmp r2, #0x8 + movlt r4, r2 + movge r5, r10 + clzlt r4, r4 + rsblt r5, r4, #0x1f + cmp r3, #0x8 + movge r4, r10 + movlt r4, r3 + clzlt r4, r4 + rsblt r4, r4, #0x1f + add r4, r11, r4, lsl #0x3 + add r6, r4, r5, lsl #0x1 + ldrb r5, [r4, r5, lsl #0x1] + ldrb r4, [r6, #0x1] + str r5, [sp, #0x28] + str r4, [sp, #0x2c] + b _020B7080 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B7164: .word objs$8221 + arm_func_end GetCharIndex1D diff --git a/arm9/asm/NNS_G2D_g2d_font.s b/arm9/asm/NNS_G2D_g2d_font.s new file mode 100644 index 00000000..162fe423 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_font.s @@ -0,0 +1,284 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dFontGetTextRect +NNSi_G2dFontGetTextRect: ; 0x020B5ABC + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + add r5, sp, #0x0 + mov r4, #0x0 + str r4, [r5, #0x0] + str r4, [r5, #0x4] + mov r8, r2 + ldr r2, [sp, #0x28] + mov r5, r0 + mov r9, r1 + mov r4, r3 + cmp r2, #0x0 + mov r7, #0x1 + beq _020B5B24 + add r6, sp, #0x28 +_020B5AF8: + mov r0, r9 + mov r1, r8 + mov r3, r6 + bl NNSi_G2dFontGetStringWidth + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x28] + cmp r0, r1 + strgt r0, [sp, #0x0] + add r7, r7, #0x1 + cmp r2, #0x0 + bne _020B5AF8 +_020B5B24: + ldr r0, [r9, #0x0] + sub r2, r7, #0x1 + ldrsb r1, [r0, #0x1] + ldr r0, [sp, #0x0] + add r1, r4, r1 + mul r1, r2, r1 + sub r1, r1, r4 + str r1, [sp, #0x4] + str r0, [r5, #0x0] + str r1, [r5, #0x4] + add sp, sp, #0xc + ldmia sp!, {r4-r9,pc} + arm_func_end NNSi_G2dFontGetTextRect + + arm_func_start NNSi_G2dFontGetTextHeight +NNSi_G2dFontGetTextHeight: ; 0x020B5B54 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + str r2, [sp, #0x0] + add r3, sp, #0x4 + mov r2, #0x0 + str r2, [r3, #0x0] + mov r8, r0 + str r2, [r3, #0x4] + ldr r7, [r8, #0x4] + add r0, sp, #0x0 + mov r5, r1 + mov r4, #0x1 + blx r7 + cmp r0, #0x0 + beq _020B5BAC + add r6, sp, #0x0 +_020B5B94: + cmp r0, #0xa + mov r0, r6 + addeq r4, r4, #0x1 + blx r7 + cmp r0, #0x0 + bne _020B5B94 +_020B5BAC: + ldr r0, [r8, #0x0] + ldrsb r0, [r0, #0x1] + add r0, r5, r0 + mul r0, r4, r0 + sub r0, r0, r5 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + arm_func_end NNSi_G2dFontGetTextHeight + + arm_func_start NNSi_G2dFontGetStringWidth +NNSi_G2dFontGetStringWidth: ; 0x020B5BC8 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x8 + mov r8, r0 + str r2, [sp, #0x0] + ldr r4, [r8, #0x4] + add r0, sp, #0x0 + mov r7, r1 + mov r6, r3 + mov r5, #0x0 + blx r4 + movs r1, r0 + beq _020B5C58 + ldr sb, _020B5C84 ; =0x0000FFFF + add r10, sp, #0x0 +_020B5C00: + cmp r1, #0xa + beq _020B5C58 + mov r0, r8 + bl NNS_G2dFontFindGlyphIndex + mov r1, r0 + cmp r1, r9 + ldreq r0, [r8, #0x0] + ldreqh r1, [r0, #0x2] + mov r0, r8 + bl NNS_G2dFontGetCharWidthsFromIndex + ldrh r1, [r8, #0x8] + cmp r1, #0x0 + ldrnesb r1, [r0, #0x0] + ldrneb r0, [r0, #0x1] + addne r0, r1, r0 + ldreqsb r0, [r0, #0x2] + add r1, r7, r0 + mov r0, r10 + add r5, r5, r1 + blx r4 + movs r1, r0 + bne _020B5C00 +_020B5C58: + cmp r6, #0x0 + beq _020B5C70 + cmp r1, #0xa + ldreq r0, [sp, #0x0] + movne r0, #0x0 + str r0, [r6, #0x0] +_020B5C70: + cmp r5, #0x0 + subgt r5, r5, r7 + mov r0, r5 + add sp, sp, #0x8 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B5C84: .word 0x0000FFFF + arm_func_end NNSi_G2dFontGetStringWidth + + arm_func_start NNS_G2dFontGetCharWidthsFromIndex +NNS_G2dFontGetCharWidthsFromIndex: ; 0x020B5C88 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x0] + ldr lr, [r3, #0xc] + cmp lr, #0x0 + beq _020B5CD8 +_020B5CA0: + ldrh r12, [lr, #0x0] + cmp r12, r1 + bhi _020B5CCC + ldrh r2, [lr, #0x2] + cmp r1, r2 + ldrlsh r2, [r0, #0xa] + addls r3, lr, #0x8 + subls r0, r1, r12 + mlals r0, r2, r0, r3 + addls sp, sp, #0x4 + ldmlsia sp!, {pc} +_020B5CCC: + ldr lr, [lr, #0x4] + cmp lr, #0x0 + bne _020B5CA0 +_020B5CD8: + add r0, r3, #0x4 + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G2dFontGetCharWidthsFromIndex + + arm_func_start NNS_G2dFontFindGlyphIndex +NNS_G2dFontFindGlyphIndex: ; 0x020B5CE4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x10] + cmp r0, #0x0 + beq _020B5D2C +_020B5CFC: + ldrh r2, [r0, #0x0] + cmp r2, r1 + bhi _020B5D20 + ldrh r2, [r0, #0x2] + cmp r1, r2 + bhi _020B5D20 + bl GetGlyphIndex + add sp, sp, #0x4 + ldmia sp!, {pc} +_020B5D20: + ldr r0, [r0, #0x8] + cmp r0, #0x0 + bne _020B5CFC +_020B5D2C: + ldr r0, _020B5D38 ; =0x0000FFFF + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B5D38: .word 0x0000FFFF + arm_func_end NNS_G2dFontFindGlyphIndex + + arm_func_start NNS_G2dFontInitUTF16 +NNS_G2dFontInitUTF16: ; 0x020B5D3C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, r1 + mov r1, r4 + bl NNSi_G2dGetUnpackedFont + sub r0, r0, #0x1 + strh r0, [r4, #0x8] + ldrh r0, [r4, #0x8] + cmp r0, #0x0 + movne r1, #0x2 + moveq r1, #0x3 + ldr r0, _020B5D78 ; =NNSi_G2dSplitCharUTF16 + strh r1, [r4, #0xa] + str r0, [r4, #0x4] + ldmia sp!, {r4,pc} + .balign 4 +_020B5D78: .word NNSi_G2dSplitCharUTF16 + arm_func_end NNS_G2dFontInitUTF16 + + arm_func_start GetGlyphIndex +GetGlyphIndex: ; 0x020B5D7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r3, [r0, #0x4] + ldr r2, _020B5E4C ; =0x0000FFFF + cmp r3, #0x0 + beq _020B5DA8 + cmp r3, #0x1 + beq _020B5DC4 + cmp r3, #0x2 + beq _020B5DD8 + b _020B5E40 +_020B5DA8: + ldrh r2, [r0, #0x0] + ldrh r3, [r0, #0xc] + sub r0, r1, r2 + add r0, r3, r0 + mov r0, r0, lsl #0x10 + mov r2, r0, lsr #0x10 + b _020B5E40 +_020B5DC4: + ldrh r2, [r0, #0x0] + sub r1, r1, r2 + add r0, r0, r1, lsl #0x1 + ldrh r2, [r0, #0xc] + b _020B5E40 +_020B5DD8: + ldrh r3, [r0, #0xc] + add r0, r0, #0xc + add r0, r0, #0x2 + sub r3, r3, #0x1 + add lr, r0, r3, lsl #0x2 + cmp r0, lr + bhi _020B5E40 +_020B5DF4: + sub r12, lr, r0 + mov r3, r12, asr #0x1 + add r3, r12, r3, lsr #0x1e + mov r3, r3, asr #0x2 + add r3, r3, r3, lsr #0x1f + mov r12, r3, asr #0x1 + mov r3, r12, lsl #0x2 + ldrh r3, [r0, r3] + add r12, r0, r12, lsl #0x2 + cmp r3, r1 + addcc r0, r12, #0x4 + blo _020B5E38 + cmp r1, r3 + subcc lr, r12, #0x4 + blo _020B5E38 + ldrh r2, [r12, #0x2] + b _020B5E40 +_020B5E38: + cmp r0, lr + bls _020B5DF4 +_020B5E40: + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B5E4C: .word 0x0000FFFF + arm_func_end GetGlyphIndex diff --git a/arm9/asm/NNS_G2D_g2d_image.s b/arm9/asm/NNS_G2D_g2d_image.s new file mode 100644 index 00000000..796da6c6 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_image.s @@ -0,0 +1,780 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dGetVramLocation +NNSi_G2dGetVramLocation: ; 0x020B10BC + ldr r0, [r0, r1, lsl #0x2] + bx lr + arm_func_end NNSi_G2dGetVramLocation + + arm_func_start NNSi_G2dSetVramLocation +NNSi_G2dSetVramLocation: ; 0x020B10C4 + str r2, [r0, r1, lsl #0x2] + bx lr + arm_func_end NNSi_G2dSetVramLocation + + arm_func_start NNSi_G2dInitializeVRamLocation +NNSi_G2dInitializeVRamLocation: ; 0x020B10CC + mov r2, #0x0 + mvn r1, #0x0 +_020B10D4: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x3 + blt _020B10D4 + bx lr + arm_func_end NNSi_G2dInitializeVRamLocation + + arm_func_start NNS_G2dLoadPaletteEx +NNS_G2dLoadPaletteEx: ; 0x020B10E8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r10, r0 + ldr r0, [r10, #0x0] + mov r9, r1 + cmp r0, #0x3 + ldr r0, [sp, #0x28] + moveq r7, #0x20 + str r0, [sp, #0x28] + ldrh r0, [r9, #0x0] + movne r7, #0x200 + mov r11, r2 + mov r8, r3 + str r0, [sp, #0x0] + mov r6, #0x0 + cmp r0, #0x0 + bls _020B1210 +_020B112C: + ldr r1, [r9, #0x4] + mov r0, r6, lsl #0x1 + ldrh r2, [r1, r0] + ldr r0, [r10, #0xc] + ldr r1, [r10, #0x8] + mla r5, r7, r2, r11 + mla r4, r7, r6, r0 + bl DC_FlushRange + cmp r8, #0x0 + beq _020B11E0 + cmp r8, #0x1 + beq _020B1168 + cmp r8, #0x2 + beq _020B11A4 + b _020B11F8 +_020B1168: + ldr r0, [r10, #0x4] + cmp r0, #0x0 + beq _020B1190 + bl GX_BeginLoadOBJExtPltt + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GX_LoadOBJExtPltt + bl GX_EndLoadOBJExtPltt + b _020B11F8 +_020B1190: + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GX_LoadOBJPltt + b _020B11F8 +_020B11A4: + ldr r0, [r10, #0x4] + cmp r0, #0x0 + beq _020B11CC + bl GXS_BeginLoadOBJExtPltt + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GXS_LoadOBJExtPltt + bl GXS_EndLoadOBJExtPltt + b _020B11F8 +_020B11CC: + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GXS_LoadOBJPltt + b _020B11F8 +_020B11E0: + bl GX_BeginLoadTexPltt + mov r0, r4 + mov r1, r5 + mov r2, r7 + bl GX_LoadTexPltt + bl GX_EndLoadTexPltt +_020B11F8: + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + ldr r0, [sp, #0x0] + cmp r6, r0 + blo _020B112C +_020B1210: + ldr r0, [sp, #0x28] + ldr r2, [r10, #0x0] + mov r1, r0 + str r2, [r1, #0x0] + ldr r4, [r10, #0x4] + mov r3, r0 + mov r1, r8 + mov r2, r11 + str r4, [r3, #0x4] + bl NNS_G2dSetImagePaletteLocation + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end NNS_G2dLoadPaletteEx + + arm_func_start NNS_G2dLoadPalette +NNS_G2dLoadPalette: ; 0x020B1240 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + ldr r5, [r9, #0xc] + ldr r4, [r9, #0x8] + mov r8, r1 + mov r7, r2 + mov r0, r5 + mov r1, r4 + mov r6, r3 + bl DC_FlushRange + cmp r7, #0x0 + beq _020B1300 + cmp r7, #0x1 + beq _020B1288 + cmp r7, #0x2 + beq _020B12C4 + b _020B1318 +_020B1288: + ldr r0, [r9, #0x4] + cmp r0, #0x0 + beq _020B12B0 + bl GX_BeginLoadOBJExtPltt + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GX_LoadOBJExtPltt + bl GX_EndLoadOBJExtPltt + b _020B1318 +_020B12B0: + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GX_LoadOBJPltt + b _020B1318 +_020B12C4: + ldr r0, [r9, #0x4] + cmp r0, #0x0 + beq _020B12EC + bl GXS_BeginLoadOBJExtPltt + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GXS_LoadOBJExtPltt + bl GXS_EndLoadOBJExtPltt + b _020B1318 +_020B12EC: + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GXS_LoadOBJPltt + b _020B1318 +_020B1300: + bl GX_BeginLoadTexPltt + mov r0, r5 + mov r1, r8 + mov r2, r4 + bl GX_LoadTexPltt + bl GX_EndLoadTexPltt +_020B1318: + ldr r1, [r9, #0x0] + mov r0, r6 + str r1, [r6, #0x0] + ldr r3, [r9, #0x4] + mov r1, r7 + mov r2, r8 + str r3, [r6, #0x4] + bl NNS_G2dSetImagePaletteLocation + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + arm_func_end NNS_G2dLoadPalette + + arm_func_start NNS_G2dLoadImageVramTransfer +NNS_G2dLoadImageVramTransfer: ; 0x020B1340 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + ldr r0, [r7, #0x14] + ldr r1, [r7, #0x10] + mov r5, r2 + mov r4, r3 + bl DC_FlushRange + cmp r5, #0x0 + ldr r0, [r7, #0x8] + beq _020B13B8 + cmp r5, #0x1 + beq _020B1384 + cmp r5, #0x2 + beq _020B13A0 + b _020B13B8 +_020B1384: + mov r3, #0x4000000 + ldr r2, [r3, #0x0] + ldr r1, _020B1520 ; =0xFFCFFFEF + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] + b _020B13B8 +_020B13A0: + ldr r3, _020B1524 ; =0x04001000 + ldr r1, _020B1520 ; =0xFFCFFFEF + ldr r2, [r3, #0x0] + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] +_020B13B8: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _020B14D8 + ldrh r0, [r7, #0x2] + cmp r0, #0x10 + bgt _020B1408 + cmp r0, #0x10 + bge _020B1434 + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B1444 + ; Jump table + b _020B1444 ; case 0 + b _020B1414 ; case 1 + b _020B141C ; case 2 + b _020B1444 ; case 3 + b _020B1424 ; case 4 + b _020B1444 ; case 5 + b _020B1444 ; case 6 + b _020B1444 ; case 7 + b _020B142C ; case 8 +_020B1408: + cmp r0, #0x20 + beq _020B143C + b _020B1444 +_020B1414: + mov r0, #0x0 + b _020B1448 +_020B141C: + mov r0, #0x1 + b _020B1448 +_020B1424: + mov r0, #0x2 + b _020B1448 +_020B142C: + mov r0, #0x3 + b _020B1448 +_020B1434: + mov r0, #0x4 + b _020B1448 +_020B143C: + mov r0, #0x5 + b _020B1448 +_020B1444: + mov r0, #0x0 +_020B1448: + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + cmp r0, #0x10 + bgt _020B1490 + cmp r0, #0x10 + bge _020B14BC + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B14CC + ; Jump table + b _020B14CC ; case 0 + b _020B149C ; case 1 + b _020B14A4 ; case 2 + b _020B14CC ; case 3 + b _020B14AC ; case 4 + b _020B14CC ; case 5 + b _020B14CC ; case 6 + b _020B14CC ; case 7 + b _020B14B4 ; case 8 +_020B1490: + cmp r0, #0x20 + beq _020B14C4 + b _020B14CC +_020B149C: + mov r0, #0x0 + b _020B14D0 +_020B14A4: + mov r0, #0x1 + b _020B14D0 +_020B14AC: + mov r0, #0x2 + b _020B14D0 +_020B14B4: + mov r0, #0x3 + b _020B14D0 +_020B14BC: + mov r0, #0x4 + b _020B14D0 +_020B14C4: + mov r0, #0x5 + b _020B14D0 +_020B14CC: + mov r0, #0x0 +_020B14D0: + str r0, [r4, #0x10] + b _020B14E8 +_020B14D8: + ldrh r0, [r7, #0x2] + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + str r0, [r4, #0x10] +_020B14E8: + ldr r1, [r7, #0x4] + mov r0, #0x0 + str r1, [r4, #0x14] + str r0, [r4, #0x18] + mov r0, #0x1 + str r0, [r4, #0x1c] + ldr r3, [r7, #0x8] + mov r0, r4 + mov r1, r5 + mov r2, r6 + str r3, [r4, #0x20] + bl NNS_G2dSetImageLocation + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B1520: .word 0xFFCFFFEF +_020B1524: .word 0x04001000 + arm_func_end NNS_G2dLoadImageVramTransfer + + arm_func_start NNS_G2dLoadImage2DMapping +NNS_G2dLoadImage2DMapping: ; 0x020B1528 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + movs r5, r2 + mov r6, r1 + mov r4, r3 + ldr r0, [r7, #0x8] + beq _020B1590 + cmp r5, #0x1 + beq _020B155C + cmp r5, #0x2 + beq _020B1578 + b _020B1590 +_020B155C: + mov r3, #0x4000000 + ldr r2, [r3, #0x0] + ldr r1, _020B1760 ; =0xFFCFFFEF + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] + b _020B1590 +_020B1578: + ldr r3, _020B1764 ; =0x04001000 + ldr r1, _020B1760 ; =0xFFCFFFEF + ldr r2, [r3, #0x0] + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] +_020B1590: + ldr r0, [r7, #0x14] + ldr r1, [r7, #0x10] + bl DC_FlushRange + cmp r5, #0x0 + beq _020B15B8 + cmp r5, #0x1 + beq _020B15D4 + cmp r5, #0x2 + beq _020B15E8 + b _020B15F8 +_020B15B8: + bl GX_BeginLoadTex + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadTex + bl GX_EndLoadTex + b _020B15F8 +_020B15D4: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadOBJ + b _020B15F8 +_020B15E8: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GXS_LoadOBJ +_020B15F8: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _020B1718 + ldrh r0, [r7, #0x2] + cmp r0, #0x10 + bgt _020B1648 + cmp r0, #0x10 + bge _020B1674 + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B1684 + ; Jump table + b _020B1684 ; case 0 + b _020B1654 ; case 1 + b _020B165C ; case 2 + b _020B1684 ; case 3 + b _020B1664 ; case 4 + b _020B1684 ; case 5 + b _020B1684 ; case 6 + b _020B1684 ; case 7 + b _020B166C ; case 8 +_020B1648: + cmp r0, #0x20 + beq _020B167C + b _020B1684 +_020B1654: + mov r0, #0x0 + b _020B1688 +_020B165C: + mov r0, #0x1 + b _020B1688 +_020B1664: + mov r0, #0x2 + b _020B1688 +_020B166C: + mov r0, #0x3 + b _020B1688 +_020B1674: + mov r0, #0x4 + b _020B1688 +_020B167C: + mov r0, #0x5 + b _020B1688 +_020B1684: + mov r0, #0x0 +_020B1688: + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + cmp r0, #0x10 + bgt _020B16D0 + cmp r0, #0x10 + bge _020B16FC + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B170C + ; Jump table + b _020B170C ; case 0 + b _020B16DC ; case 1 + b _020B16E4 ; case 2 + b _020B170C ; case 3 + b _020B16EC ; case 4 + b _020B170C ; case 5 + b _020B170C ; case 6 + b _020B170C ; case 7 + b _020B16F4 ; case 8 +_020B16D0: + cmp r0, #0x20 + beq _020B1704 + b _020B170C +_020B16DC: + mov r0, #0x0 + b _020B1710 +_020B16E4: + mov r0, #0x1 + b _020B1710 +_020B16EC: + mov r0, #0x2 + b _020B1710 +_020B16F4: + mov r0, #0x3 + b _020B1710 +_020B16FC: + mov r0, #0x4 + b _020B1710 +_020B1704: + mov r0, #0x5 + b _020B1710 +_020B170C: + mov r0, #0x0 +_020B1710: + str r0, [r4, #0x10] + b _020B1728 +_020B1718: + ldrh r0, [r7, #0x2] + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + str r0, [r4, #0x10] +_020B1728: + ldr r1, [r7, #0x4] + mov r0, #0x0 + str r1, [r4, #0x14] + str r0, [r4, #0x18] + mov r0, #0x1 + str r0, [r4, #0x1c] + ldr r3, [r7, #0x8] + mov r0, r4 + mov r1, r5 + mov r2, r6 + str r3, [r4, #0x20] + bl NNS_G2dSetImageLocation + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B1760: .word 0xFFCFFFEF +_020B1764: .word 0x04001000 + arm_func_end NNS_G2dLoadImage2DMapping + + arm_func_start NNS_G2dLoadImage1DMapping +NNS_G2dLoadImage1DMapping: ; 0x020B1768 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + movs r5, r2 + mov r6, r1 + mov r4, r3 + ldr r0, [r7, #0x8] + beq _020B17D0 + cmp r5, #0x1 + beq _020B179C + cmp r5, #0x2 + beq _020B17B8 + b _020B17D0 +_020B179C: + mov r3, #0x4000000 + ldr r2, [r3, #0x0] + ldr r1, _020B19A0 ; =0xFFCFFFEF + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] + b _020B17D0 +_020B17B8: + ldr r3, _020B19A4 ; =0x04001000 + ldr r1, _020B19A0 ; =0xFFCFFFEF + ldr r2, [r3, #0x0] + and r1, r2, r1 + orr r0, r1, r0 + str r0, [r3, #0x0] +_020B17D0: + ldr r0, [r7, #0x14] + ldr r1, [r7, #0x10] + bl DC_FlushRange + cmp r5, #0x0 + beq _020B17F8 + cmp r5, #0x1 + beq _020B1814 + cmp r5, #0x2 + beq _020B1828 + b _020B1838 +_020B17F8: + bl GX_BeginLoadTex + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadTex + bl GX_EndLoadTex + b _020B1838 +_020B1814: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GX_LoadOBJ + b _020B1838 +_020B1828: + ldr r0, [r7, #0x14] + ldr r2, [r7, #0x10] + mov r1, r6 + bl GXS_LoadOBJ +_020B1838: + ldr r0, [r7, #0x8] + cmp r0, #0x0 + bne _020B1958 + ldrh r0, [r7, #0x2] + cmp r0, #0x10 + bgt _020B1888 + cmp r0, #0x10 + bge _020B18B4 + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B18C4 + ; Jump table + b _020B18C4 ; case 0 + b _020B1894 ; case 1 + b _020B189C ; case 2 + b _020B18C4 ; case 3 + b _020B18A4 ; case 4 + b _020B18C4 ; case 5 + b _020B18C4 ; case 6 + b _020B18C4 ; case 7 + b _020B18AC ; case 8 +_020B1888: + cmp r0, #0x20 + beq _020B18BC + b _020B18C4 +_020B1894: + mov r0, #0x0 + b _020B18C8 +_020B189C: + mov r0, #0x1 + b _020B18C8 +_020B18A4: + mov r0, #0x2 + b _020B18C8 +_020B18AC: + mov r0, #0x3 + b _020B18C8 +_020B18B4: + mov r0, #0x4 + b _020B18C8 +_020B18BC: + mov r0, #0x5 + b _020B18C8 +_020B18C4: + mov r0, #0x0 +_020B18C8: + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + cmp r0, #0x10 + bgt _020B1910 + cmp r0, #0x10 + bge _020B193C + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020B194C + ; Jump table + b _020B194C ; case 0 + b _020B191C ; case 1 + b _020B1924 ; case 2 + b _020B194C ; case 3 + b _020B192C ; case 4 + b _020B194C ; case 5 + b _020B194C ; case 6 + b _020B194C ; case 7 + b _020B1934 ; case 8 +_020B1910: + cmp r0, #0x20 + beq _020B1944 + b _020B194C +_020B191C: + mov r0, #0x0 + b _020B1950 +_020B1924: + mov r0, #0x1 + b _020B1950 +_020B192C: + mov r0, #0x2 + b _020B1950 +_020B1934: + mov r0, #0x3 + b _020B1950 +_020B193C: + mov r0, #0x4 + b _020B1950 +_020B1944: + mov r0, #0x5 + b _020B1950 +_020B194C: + mov r0, #0x0 +_020B1950: + str r0, [r4, #0x10] + b _020B1968 +_020B1958: + ldrh r0, [r7, #0x2] + str r0, [r4, #0xc] + ldrh r0, [r7, #0x0] + str r0, [r4, #0x10] +_020B1968: + ldr r1, [r7, #0x4] + mov r0, #0x0 + str r1, [r4, #0x14] + str r0, [r4, #0x18] + mov r0, #0x1 + str r0, [r4, #0x1c] + ldr r3, [r7, #0x8] + mov r0, r4 + mov r1, r5 + mov r2, r6 + str r3, [r4, #0x20] + bl NNS_G2dSetImageLocation + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B19A0: .word 0xFFCFFFEF +_020B19A4: .word 0x04001000 + arm_func_end NNS_G2dLoadImage1DMapping + + arm_func_start NNS_G2dIsImagePaletteReadyToUse +NNS_G2dIsImagePaletteReadyToUse: ; 0x020B19A8 + add r0, r0, r1, lsl #0x2 + ldr r1, [r0, #0x8] + mvn r0, #0x0 + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + arm_func_end NNS_G2dIsImagePaletteReadyToUse + + arm_func_start NNS_G2dGetImagePaletteLocation +NNS_G2dGetImagePaletteLocation: ; 0x020B19C4 + add r0, r0, r1, lsl #0x2 + ldr r0, [r0, #0x8] + bx lr + arm_func_end NNS_G2dGetImagePaletteLocation + + arm_func_start NNS_G2dSetImagePaletteLocation +NNS_G2dSetImagePaletteLocation: ; 0x020B19D0 + add r0, r0, r1, lsl #0x2 + str r2, [r0, #0x8] + bx lr + arm_func_end NNS_G2dSetImagePaletteLocation + + arm_func_start NNS_G2dInitImagePaletteProxy +NNS_G2dInitImagePaletteProxy: ; 0x020B19DC + mov r3, #0x0 + mvn r2, #0x0 +_020B19E4: + add r1, r0, r3, lsl #0x2 + add r3, r3, #0x1 + str r2, [r1, #0x8] + cmp r3, #0x3 + blt _020B19E4 + bx lr + arm_func_end NNS_G2dInitImagePaletteProxy + + arm_func_start NNS_G2dIsImageReadyToUse +NNS_G2dIsImageReadyToUse: ; 0x020B19FC + ldr r1, [r0, r1, lsl #0x2] + mvn r0, #0x0 + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + arm_func_end NNS_G2dIsImageReadyToUse + + arm_func_start NNS_G2dGetImageLocation +NNS_G2dGetImageLocation: ; 0x020B1A14 + ldr r0, [r0, r1, lsl #0x2] + bx lr + arm_func_end NNS_G2dGetImageLocation + + arm_func_start NNS_G2dSetImageLocation +NNS_G2dSetImageLocation: ; 0x020B1A1C + str r2, [r0, r1, lsl #0x2] + bx lr + arm_func_end NNS_G2dSetImageLocation + + arm_func_start NNS_G2dInitImageProxy +NNS_G2dInitImageProxy: ; 0x020B1A24 + mov r2, #0x0 + mvn r1, #0x0 +_020B1A2C: + str r1, [r0, r2, lsl #0x2] + add r2, r2, #0x1 + cmp r2, #0x3 + blt _020B1A2C + bx lr + arm_func_end NNS_G2dInitImageProxy diff --git a/arm9/asm/NNS_G2D_g2d_load.s b/arm9/asm/NNS_G2D_g2d_load.s new file mode 100644 index 00000000..340d8b17 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_load.s @@ -0,0 +1,55 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dUnpackUserExCellAttrBank +NNSi_G2dUnpackUserExCellAttrBank: ; 0x020B01B0 + ldr r1, [r0, #0x4] + mov r12, #0x0 + add r1, r1, r0 + str r1, [r0, #0x4] + ldrh r1, [r0, #0x0] + cmp r1, #0x0 + bxls lr +_020B01CC: + ldr r3, [r0, #0x4] + add r1, r12, #0x1 + ldr r2, [r3, r12, lsl #0x2] + mov r1, r1, lsl #0x10 + add r2, r0, r2 + str r2, [r3, r12, lsl #0x2] + ldrh r2, [r0, #0x0] + mov r12, r1, lsr #0x10 + cmp r12, r2 + blo _020B01CC + bx lr + arm_func_end NNSi_G2dUnpackUserExCellAttrBank + + arm_func_start NNS_G2dFindBinaryBlock +NNS_G2dFindBinaryBlock: ; 0x020B01F8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r2, [r0, #0xc] + ldrh r12, [r0, #0xe] + mov lr, #0x0 + add r0, r0, r2 + cmp r12, #0x0 + bls _020B0244 +_020B0218: + ldr r2, [r0, #0x0] + cmp r2, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + add r2, lr, #0x1 + mov r2, r2, lsl #0x10 + ldr r3, [r0, #0x4] + mov lr, r2, lsr #0x10 + cmp lr, r12 + add r0, r0, r3 + blo _020B0218 +_020B0244: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G2dFindBinaryBlock diff --git a/arm9/asm/NNS_G2D_g2d_multicellan.s b/arm9/asm/NNS_G2D_g2d_multicellan.s new file mode 100644 index 00000000..8e2206df --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_multicellan.s @@ -0,0 +1,490 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dInitMCAnimation +NNS_G2dInitMCAnimation: ; 0x020B20C8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r6, #0x0 + str r6, [r0, #0x38] + ldr r7, [sp, #0x30] + str r6, [r0, #0x30] + mov r10, r1 + str r7, [r0, #0x34] + str r0, [sp, #0x0] + movs r8, r3 + mov r9, r2 + str r10, [r0, #0x3c] + ldr r11, [sp, #0x34] + beq _020B215C + mov r0, #0x1 + str r6, [sp, #0x8] + str r0, [sp, #0x4] +_020B210C: + mov r0, #0x28 + mul r4, r6, r0 + ldr r1, [sp, #0x4] + add r0, r10, r4 + bl NNSi_G2dInitializeNode + mov r0, #0x54 + mla r5, r6, r0, r9 + ldr r1, [sp, #0x8] + mov r0, r7 + str r5, [r10, r4] + bl NNS_G2dGetAnimSequenceByIdx + mov r1, r0 + mov r0, r5 + mov r2, r11 + bl NNS_G2dInitCellAnimation + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + cmp r6, r8 + blo _020B210C +_020B215C: + ldr r0, [sp, #0x0] + bl NNS_G2dInitAnimCtrl + ldr r0, [sp, #0x0] + ldr r3, [sp, #0x38] + ldr r2, [sp, #0x0] + add r0, r0, #0x44 + mov r1, #0x1 + str r3, [r2, #0x40] + bl NNSi_G2dSrtcInitControl + ldr r0, [sp, #0x0] + mov r1, #0x0 + strh r1, [r0, #0x2c] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + arm_func_end NNS_G2dInitMCAnimation + + arm_func_start NNS_G2dSetMCAnimationCurrentFrame +NNS_G2dSetMCAnimationCurrentFrame: ; 0x020B2194 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl NNS_G2dSetAnimCtrlCurrentFrame + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + mov r0, r7 + bl NNS_G2dGetAnimCtrlCurrentElement + mov r4, r0 + ldrh r1, [r4, #0x0] + ldr r0, [r7, #0x40] + bl NNS_G2dGetMultiCellDataByIdx + ldr r1, [r7, #0x18] + mov r6, r0 + ldr r1, [r1, #0x4] + add r0, r7, #0x44 + and r5, r1, #0xff + mov r1, #0x1 + bl NNSi_G2dSrtcInitControl + cmp r5, #0x0 + beq _020B2234 + cmp r5, #0x2 + bne _020B2208 + ldrsh r1, [r4, #0x4] + ldrsh r2, [r4, #0x6] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetTrans + b _020B2234 +_020B2208: + ldr r1, [r4, #0x4] + ldr r2, [r4, #0x8] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetSRTScale + ldrh r1, [r4, #0x2] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetSRTRotZ + ldrsh r1, [r4, #0xc] + ldrsh r2, [r4, #0xe] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetTrans +_020B2234: + ldrh r2, [r7, #0x2c] + mov r1, r6 + add r0, r7, #0x30 + bl SetMCDataToMCInstanceImpl_ + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G2dSetMCAnimationCurrentFrame + + arm_func_start NNS_G2dTickMCAnimation +NNS_G2dTickMCAnimation: ; 0x020B224C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r2, [r4, #0x0] + mov r6, r1 + ldrh r5, [r2, #0x4] + bl NNS_G2dTickAnimCtrl + cmp r0, #0x0 + beq _020B2318 + ldrh r1, [r4, #0x2c] + mov r0, r4 + add r1, r1, r5 + strh r1, [r4, #0x2c] + bl NNS_G2dGetAnimCtrlCurrentElement + mov r5, r0 + ldrh r1, [r5, #0x0] + ldr r0, [r4, #0x40] + bl NNS_G2dGetMultiCellDataByIdx + ldr r1, [r4, #0x18] + mov r7, r0 + ldr r1, [r1, #0x4] + add r0, r4, #0x44 + and r6, r1, #0xff + mov r1, #0x1 + bl NNSi_G2dSrtcInitControl + cmp r6, #0x0 + beq _020B2300 + cmp r6, #0x2 + bne _020B22D4 + ldrsh r1, [r5, #0x4] + ldrsh r2, [r5, #0x6] + add r0, r4, #0x44 + bl NNSi_G2dSrtcSetTrans + b _020B2300 +_020B22D4: + ldr r1, [r5, #0x4] + ldr r2, [r5, #0x8] + add r0, r4, #0x44 + bl NNSi_G2dSrtcSetSRTScale + ldrh r1, [r5, #0x2] + add r0, r4, #0x44 + bl NNSi_G2dSrtcSetSRTRotZ + ldrsh r1, [r5, #0xc] + ldrsh r2, [r5, #0xe] + add r0, r4, #0x44 + bl NNSi_G2dSrtcSetTrans +_020B2300: + ldrh r2, [r4, #0x2c] + mov r1, r7 + add r0, r4, #0x30 + bl SetMCDataToMCInstanceImpl_ + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B2318: + mov r1, r6 + add r0, r4, #0x30 + bl NNS_G2dTickMCInstance + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G2dTickMCAnimation + + arm_func_start NNS_G2dTickMCInstance +NNS_G2dTickMCInstance: ; 0x020B232C + stmdb sp!, {r4-r8,lr} + mov r7, r0 + ldr r0, [r7, #0x8] + mov r6, r1 + cmp r0, #0x1 + bne _020B238C + ldr r0, [r7, #0x0] + ldr r4, [r7, #0xc] + ldrh r0, [r0, #0x2] + mov r5, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r8,pc} + mov r8, #0x58 +_020B2360: + mla r0, r5, r8, r4 + mov r1, r6 + bl NNS_G2dTickCellAnimation + ldr r1, [r7, #0x0] + add r0, r5, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x2] + mov r5, r0, lsr #0x10 + cmp r5, r1 + blo _020B2360 + ldmia sp!, {r4-r8,pc} +_020B238C: + ldr r0, [r7, #0x0] + ldr r4, [r7, #0xc] + ldrh r0, [r0, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r8,pc} + mov r8, #0x28 +_020B23A8: + mul r0, r5, r8 + ldr r0, [r4, r0] + mov r1, r6 + bl NNS_G2dTickCellAnimation + ldr r1, [r7, #0x0] + add r0, r5, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r5, r0, lsr #0x10 + cmp r5, r1 + blo _020B23A8 + ldmia sp!, {r4-r8,pc} + arm_func_end NNS_G2dTickMCInstance + + arm_func_start NNS_G2dGetMCBankNumNodesRequired +NNS_G2dGetMCBankNumNodesRequired: ; 0x020B23D8 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldrh r0, [r5, #0x0] + mov r4, #0x0 + mov r6, r4 + cmp r0, #0x0 + bls _020B2424 +_020B23F4: + mov r0, r5 + mov r1, r6 + bl NNS_G2dGetMultiCellDataByIdx + ldrh r0, [r0, #0x0] + ldrh r1, [r5, #0x0] + cmp r0, r4 + movhi r4, r0 + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + cmp r6, r1 + blo _020B23F4 +_020B2424: + mov r0, r4 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G2dGetMCBankNumNodesRequired + + arm_func_start NNS_G2dSetAnimSequenceToMCAnimation +NNS_G2dSetAnimSequenceToMCAnimation: ; 0x020B242C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + bl NNS_G2dBindAnimCtrl + mov r1, #0x0 + mov r0, r7 + strh r1, [r7, #0x2c] + bl NNS_G2dGetAnimCtrlCurrentElement + mov r4, r0 + ldrh r1, [r4, #0x0] + ldr r0, [r7, #0x40] + bl NNS_G2dGetMultiCellDataByIdx + ldr r1, [r7, #0x18] + mov r6, r0 + ldr r1, [r1, #0x4] + add r0, r7, #0x44 + and r5, r1, #0xff + mov r1, #0x1 + bl NNSi_G2dSrtcInitControl + cmp r5, #0x0 + beq _020B24C8 + cmp r5, #0x2 + bne _020B249C + ldrsh r1, [r4, #0x4] + ldrsh r2, [r4, #0x6] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetTrans + b _020B24C8 +_020B249C: + ldr r1, [r4, #0x4] + ldr r2, [r4, #0x8] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetSRTScale + ldrh r1, [r4, #0x2] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetSRTRotZ + ldrsh r1, [r4, #0xc] + ldrsh r2, [r4, #0xe] + add r0, r7, #0x44 + bl NNSi_G2dSrtcSetTrans +_020B24C8: + ldrh r2, [r7, #0x2c] + mov r1, r6 + add r0, r7, #0x30 + bl SetMCDataToMCInstanceImpl_ + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G2dSetAnimSequenceToMCAnimation + + arm_func_start SetMCDataToMCInstanceImpl_ +SetMCDataToMCInstanceImpl_: ; 0x020B24E0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r1 + str r0, [sp, #0x0] + str r10, [r0, #0x0] + ldr r0, [r0, #0x8] + mov r9, r2 + cmp r0, #0x1 + bne _020B2654 + ldrh r1, [r10, #0x2] + ldr r0, [sp, #0x0] + mov r4, #0x0 + ldr r8, [r0, #0xc] + cmp r1, #0x0 + bls _020B2544 + mov r3, r4 + mov r0, #0x58 +_020B2524: + mla r1, r4, r0, r8 + str r3, [r1, #0x54] + add r1, r4, #0x1 + mov r1, r1, lsl #0x10 + ldrh r2, [r10, #0x2] + mov r4, r1, lsr #0x10 + cmp r4, r2 + blo _020B2524 +_020B2544: + ldrh r0, [r10, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} + str r5, [sp, #0x4] + mov r11, #0x1 +_020B2560: + ldr r0, [r10, #0x4] + mov r1, #0x58 + add r7, r0, r5, lsl #0x3 + ldrh r0, [r7, #0x6] + and r0, r0, #0xff00 + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x10 + mla r6, r0, r1, r8 + ldr r0, [r6, #0x54] + cmp r0, #0x0 + bne _020B2634 + ldr r0, [sp, #0x0] + ldrh r1, [r7, #0x0] + ldr r0, [r0, #0x4] + bl NNS_G2dGetAnimSequenceByIdx + mov r4, r0 + mov r0, r6 + mov r1, r4 + bl NNS_G2dSetCellAnimationSequence + str r11, [r6, #0x8] + ldrh r0, [r7, #0x6] + and r0, r0, #0xf + cmp r0, #0x1 + bne _020B2630 + ldrh r1, [r4, #0x0] + ldr r7, [sp, #0x4] + mov r3, r7 + cmp r1, #0x0 + bls _020B25F0 + ldr r2, [r4, #0xc] +_020B25D8: + add r0, r2, r3, lsl #0x3 + ldrh r0, [r0, #0x4] + add r3, r3, #0x1 + cmp r3, r1 + add r7, r7, r0 + blo _020B25D8 +_020B25F0: + mov r0, r6 + bl NNSi_G2dIsAnimCtrlLoopAnim + cmp r0, #0x0 + beq _020B261C + mov r0, r9 + mov r1, r7 + bl _u32_div_f + mov r0, r6 + mov r1, r1, lsl #0xc + bl NNS_G2dTickCellAnimation + b _020B2630 +_020B261C: + cmp r9, r7 + movcc r7, r9 + mov r0, r6 + mov r1, r7, lsl #0xc + bl NNS_G2dTickCellAnimation +_020B2630: + str r11, [r6, #0x54] +_020B2634: + add r0, r5, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r10, #0x0] + mov r5, r0, lsr #0x10 + cmp r5, r1 + blo _020B2560 + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} +_020B2654: + ldrh r1, [r10, #0x0] + ldr r0, [sp, #0x0] + mov r4, #0x0 + cmp r1, #0x0 + ldr r11, [r0, #0xc] + addls sp, sp, #0x14 + ldmlsia sp!, {r4-r11,pc} + mov r0, #0x1 + str r4, [sp, #0xc] + str r0, [sp, #0x8] +_020B267C: + mov r0, #0x28 + mul r2, r4, r0 + ldr r3, [r10, #0x4] + mov r0, r4, lsl #0x3 + ldrh r1, [r3, r0] + ldr r0, [sp, #0x0] + ldr r6, [r11, r2] + ldr r0, [r0, #0x4] + add r7, r3, r4, lsl #0x3 + bl NNS_G2dGetAnimSequenceByIdx + mov r5, r0 + mov r0, r6 + mov r1, r5 + bl NNS_G2dSetCellAnimationSequence + ldr r0, [sp, #0x8] + str r0, [r6, #0x8] + ldrh r0, [r7, #0x6] + and r0, r0, #0xf + cmp r0, #0x1 + bne _020B2740 + ldrh r1, [r5, #0x0] + ldr r8, [sp, #0xc] + mov r0, r8 + cmp r1, #0x0 + bls _020B2700 + ldr r3, [r5, #0xc] +_020B26E4: + add r1, r3, r0, lsl #0x3 + ldrh r2, [r1, #0x4] + add r0, r0, #0x1 + ldrh r1, [r5, #0x0] + add r8, r8, r2 + cmp r0, r1 + blo _020B26E4 +_020B2700: + mov r0, r6 + bl NNSi_G2dIsAnimCtrlLoopAnim + cmp r0, #0x0 + beq _020B272C + mov r0, r9 + mov r1, r8 + bl _u32_div_f + mov r0, r6 + mov r1, r1, lsl #0xc + bl NNS_G2dTickCellAnimation + b _020B2740 +_020B272C: + cmp r9, r8 + movcc r8, r9 + mov r0, r6 + mov r1, r8, lsl #0xc + bl NNS_G2dTickCellAnimation +_020B2740: + mov r0, #0x28 + mla r3, r4, r0, r11 + ldr r0, [sp, #0x8] + str r0, [r3, #0x8] + ldrsh r1, [r7, #0x2] + ldrsh r2, [r7, #0x4] + add r0, r3, #0xc + bl NNSi_G2dSrtcSetTrans + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r10, #0x0] + mov r4, r0, lsr #0x10 + cmp r4, r1 + blo _020B267C + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + arm_func_end SetMCDataToMCInstanceImpl_ diff --git a/arm9/asm/NNS_G2D_g2d_nan_load.s b/arm9/asm/NNS_G2D_g2d_nan_load.s new file mode 100644 index 00000000..6e8b6c27 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_nan_load.s @@ -0,0 +1,155 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dGetAnimSequenceByIdx +NNS_G2dGetAnimSequenceByIdx: ; 0x020AFC04 + ldrh r2, [r0, #0x0] + cmp r2, r1 + ldrhi r0, [r0, #0x4] + addhi r0, r0, r1, lsl #0x4 + movls r0, #0x0 + bx lr + arm_func_end NNS_G2dGetAnimSequenceByIdx + + arm_func_start NNS_G2dUnpackNAN +NNS_G2dUnpackNAN: ; 0x020AFC1C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x4] + mov r6, #0x0 + add r1, r1, r0 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, r0 + str r1, [r0, #0x8] + ldr r1, [r0, #0xc] + add r1, r1, r0 + str r1, [r0, #0xc] + ldrh r1, [r0, #0x0] + ldr r4, [r0, #0x4] + ldr lr, [r0, #0x8] + cmp r1, #0x0 + ldr r12, [r0, #0xc] + bls _020AFCCC + mov r1, r6 +_020AFC68: + add r2, r4, r6, lsl #0x4 + ldr r5, [r2, #0xc] + mov r3, r6, lsl #0x4 + add r5, lr, r5 + str r5, [r2, #0xc] + ldrh r7, [r4, r3] + mov r5, r1 + cmp r7, #0x0 + bls _020AFCB4 +_020AFC8C: + ldr r9, [r2, #0xc] + add r7, r5, #0x1 + ldr r8, [r9, r5, lsl #0x3] + mov r7, r7, lsl #0x10 + add r8, r12, r8 + str r8, [r9, r5, lsl #0x3] + ldrh r8, [r4, r3] + mov r5, r7, lsr #0x10 + cmp r5, r8 + blo _020AFC8C +_020AFCB4: + add r2, r6, #0x1 + mov r2, r2, lsl #0x10 + ldrh r3, [r0, #0x0] + mov r6, r2, lsr #0x10 + cmp r6, r3 + blo _020AFC68 +_020AFCCC: + ldr r1, [r0, #0x14] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,pc} + add r1, r1, r0 + str r1, [r0, #0x14] + ldr r1, [r0, #0x14] + mov r12, #0x0 + add r2, r1, #0x8 + ldr r0, [r2, #0x4] + add r0, r0, r2 + str r0, [r2, #0x4] + ldrh r0, [r1, #0x8] + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} + mov r0, r12 + mov r6, r12 +_020AFD14: + ldr r5, [r2, #0x4] + mov r3, r6 + add r1, r5, r0 + ldr r4, [r1, #0x4] + add r4, r4, r2 + str r4, [r1, #0x4] + ldr r4, [r1, #0x8] + add r4, r4, r2 + str r4, [r1, #0x8] + ldrh r4, [r5, r0] + cmp r4, #0x0 + bls _020AFD6C + mov r7, r6 +_020AFD48: + ldr r5, [r1, #0x8] + add r3, r3, #0x1 + ldr r4, [r5, r7] + add r4, r4, r2 + str r4, [r5, r7] + ldrh r4, [r1, #0x0] + add r7, r7, #0x4 + cmp r3, r4 + blo _020AFD48 +_020AFD6C: + ldrh r1, [r2, #0x0] + add r12, r12, #0x1 + add r0, r0, #0xc + cmp r12, r1 + blo _020AFD14 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + arm_func_end NNS_G2dUnpackNAN + + arm_func_start NNS_G2dGetUnpackedMCAnimBank +NNS_G2dGetUnpackedMCAnimBank: ; 0x020AFD88 + ldr ip, _020AFD90 ; =GetUnpackedAnimBankImpl_ + bx r12 + .balign 4 +_020AFD90: .word GetUnpackedAnimBankImpl_ + arm_func_end NNS_G2dGetUnpackedMCAnimBank + + arm_func_start NNS_G2dGetUnpackedAnimBank +NNS_G2dGetUnpackedAnimBank: ; 0x020AFD94 + ldr ip, _020AFD9C ; =GetUnpackedAnimBankImpl_ + bx r12 + .balign 4 +_020AFD9C: .word GetUnpackedAnimBankImpl_ + arm_func_end NNS_G2dGetUnpackedAnimBank + + arm_func_start GetUnpackedAnimBankImpl_ +GetUnpackedAnimBankImpl_: ; 0x020AFDA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020AFDE4 ; =0x41424E4B + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNS_G2dUnpackNAN + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AFDE4: .word 0x41424E4B + arm_func_end GetUnpackedAnimBankImpl_ diff --git a/arm9/asm/NNS_G2D_g2d_ncg_load.s b/arm9/asm/NNS_G2D_g2d_ncg_load.s new file mode 100644 index 00000000..95535da5 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_ncg_load.s @@ -0,0 +1,66 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dUnpackBGNCG +NNS_G2dUnpackBGNCG: ; 0x020B0020 + ldr r1, [r0, #0x14] + add r1, r1, r0 + str r1, [r0, #0x14] + bx lr + arm_func_end NNS_G2dUnpackBGNCG + + arm_func_start NNS_G2dGetUnpackedBGCharacterData +NNS_G2dGetUnpackedBGCharacterData: ; 0x020B0030 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B0074 ; =0x43484152 + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNS_G2dUnpackBGNCG + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B0074: .word 0x43484152 + arm_func_end NNS_G2dGetUnpackedBGCharacterData + + arm_func_start NNS_G2dUnpackNCG +NNS_G2dUnpackNCG: ; 0x020B0078 + ldr r1, [r0, #0x14] + add r1, r1, r0 + str r1, [r0, #0x14] + bx lr + arm_func_end NNS_G2dUnpackNCG + + arm_func_start NNS_G2dGetUnpackedCharacterData +NNS_G2dGetUnpackedCharacterData: ; 0x020B0088 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B00CC ; =0x43484152 + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNS_G2dUnpackNCG + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B00CC: .word 0x43484152 + arm_func_end NNS_G2dGetUnpackedCharacterData diff --git a/arm9/asm/NNS_G2D_g2d_ncl_load.s b/arm9/asm/NNS_G2D_g2d_ncl_load.s new file mode 100644 index 00000000..1fc246b2 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_ncl_load.s @@ -0,0 +1,66 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dUnpackNCL +NNS_G2dUnpackNCL: ; 0x020B00D0 + ldr r1, [r0, #0xc] + add r1, r1, r0 + str r1, [r0, #0xc] + bx lr + arm_func_end NNS_G2dUnpackNCL + + arm_func_start NNSi_G2dUnpackNCLCmpInfo +NNSi_G2dUnpackNCLCmpInfo: ; 0x020B00E0 + ldr r1, [r0, #0x4] + add r1, r1, r0 + str r1, [r0, #0x4] + bx lr + arm_func_end NNSi_G2dUnpackNCLCmpInfo + + arm_func_start NNS_G2dGetUnpackedPaletteCompressInfo +NNS_G2dGetUnpackedPaletteCompressInfo: ; 0x020B00F0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B0134 ; =0x50434D50 + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNSi_G2dUnpackNCLCmpInfo + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B0134: .word 0x50434D50 + arm_func_end NNS_G2dGetUnpackedPaletteCompressInfo + + arm_func_start NNS_G2dGetUnpackedPaletteData +NNS_G2dGetUnpackedPaletteData: ; 0x020B0138 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B017C ; =0x504C5454 + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNS_G2dUnpackNCL + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B017C: .word 0x504C5454 + arm_func_end NNS_G2dGetUnpackedPaletteData diff --git a/arm9/asm/NNS_G2D_g2d_nft_load.s b/arm9/asm/NNS_G2D_g2d_nft_load.s new file mode 100644 index 00000000..3f9c0e77 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_nft_load.s @@ -0,0 +1,180 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dUnpackNFT +NNSi_G2dUnpackNFT: ; 0x020B7468 + stmdb sp!, {r4-r6,lr} + ldrh r2, [r0, #0xc] + ldrh r3, [r0, #0xe] + mov r1, #0x0 + add r2, r0, r2 + cmp r3, #0x0 + ldmleia sp!, {r4-r6,pc} + ldr r3, _020B7548 ; =0x46494E46 + ldr ip, _020B754C ; =0x43574448 + ldr r4, _020B7550 ; =0x434D4150 + ldr lr, _020B7554 ; =0x43474C50 +_020B7494: + ldr r5, [r2, #0x0] + cmp r5, r4 + bhi _020B74B0 + cmp r5, r4 + bhs _020B7518 + cmp r5, lr + b _020B752C +_020B74B0: + cmp r5, r12 + bhi _020B74C4 + cmp r5, r12 + beq _020B7500 + b _020B752C +_020B74C4: + cmp r5, r3 + bne _020B752C + add r6, r2, #0x8 + ldr r5, [r6, #0x8] + add r5, r5, r0 + str r5, [r6, #0x8] + ldr r5, [r6, #0xc] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0xc] + ldr r5, [r6, #0x10] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0x10] + b _020B752C +_020B7500: + add r6, r2, #0x8 + ldr r5, [r6, #0x4] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0x4] + b _020B752C +_020B7518: + add r6, r2, #0x8 + ldr r5, [r6, #0x8] + cmp r5, #0x0 + addne r5, r5, r0 + strne r5, [r6, #0x8] +_020B752C: + ldrh r5, [r0, #0xe] + ldr r6, [r2, #0x4] + add r1, r1, #0x1 + cmp r1, r5 + add r2, r2, r6 + blt _020B7494 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B7548: .word 0x46494E46 +_020B754C: .word 0x43574448 +_020B7550: .word 0x434D4150 +_020B7554: .word 0x43474C50 + arm_func_end NNSi_G2dUnpackNFT + + arm_func_start NNSi_G2dGetUnpackedFont +NNSi_G2dGetUnpackedFont: ; 0x020B7558 + stmdb sp!, {r4-r6,lr} + movs r6, r0 + mov r5, r1 + beq _020B75C8 + cmp r6, #0x0 + beq _020B7584 + ldr r1, [r6, #0x0] + ldr r0, _020B76A8 ; =0x4E465452 + cmp r1, r0 + moveq r0, #0x1 + beq _020B7588 +_020B7584: + mov r0, #0x0 +_020B7588: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B75CC + cmp r6, #0x0 + beq _020B75B4 + ldrh r0, [r6, #0x6] + cmp r0, #0x100 + movcs r0, #0x1 + bhs _020B75B8 +_020B75B4: + mov r0, #0x0 +_020B75B8: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + b _020B75CC +_020B75C8: + mov r0, #0x0 +_020B75CC: + cmp r0, #0x0 + movne r4, #0x0 + bne _020B7654 + cmp r6, #0x0 + beq _020B7640 + cmp r6, #0x0 + beq _020B75FC + ldr r1, [r6, #0x0] + ldr r0, _020B76A8 ; =0x4E465452 + cmp r1, r0 + moveq r0, #0x1 + beq _020B7600 +_020B75FC: + mov r0, #0x0 +_020B7600: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B7644 + cmp r6, #0x0 + beq _020B762C + ldrh r0, [r6, #0x6] + cmp r0, #0x1 + movcs r0, #0x1 + bhs _020B7630 +_020B762C: + mov r0, #0x0 +_020B7630: + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + b _020B7644 +_020B7640: + mov r0, #0x0 +_020B7644: + cmp r0, #0x0 + movne r4, #0x1 + bne _020B7654 + bl OS_Terminate +_020B7654: + mov r0, r6 + bl NNSi_G2dUnpackNFT + ldr r1, _020B76AC ; =0x46494E46 + mov r0, r6 + bl NNS_G2dFindBinaryBlock + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r6,pc} + add r0, r0, #0x8 + str r0, [r5, #0x0] + cmp r4, #0x0 + beq _020B76A0 + ldr r2, [r5, #0x0] + mov r1, #0x0 + ldrsb r0, [r2, #0x6] + strb r0, [r2, #0x7] + ldr r0, [r5, #0x0] + strb r1, [r0, #0x6] +_020B76A0: + add r0, r4, #0x1 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B76A8: .word 0x4E465452 +_020B76AC: .word 0x46494E46 + arm_func_end NNSi_G2dGetUnpackedFont diff --git a/arm9/asm/NNS_G2D_g2d_nmc_load.s b/arm9/asm/NNS_G2D_g2d_nmc_load.s new file mode 100644 index 00000000..abe55e8e --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_nmc_load.s @@ -0,0 +1,83 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dGetMultiCellDataByIdx +NNS_G2dGetMultiCellDataByIdx: ; 0x020AFF34 + ldrh r2, [r0, #0x0] + cmp r1, r2 + ldrcc r0, [r0, #0x4] + addcc r0, r0, r1, lsl #0x3 + movcs r0, #0x0 + bx lr + arm_func_end NNS_G2dGetMultiCellDataByIdx + + arm_func_start NNS_G2dUnpackNMC +NNS_G2dUnpackNMC: ; 0x020AFF4C + stmdb sp!, {r4,lr} + ldr r1, [r0, #0x4] + mov r4, #0x0 + add r1, r1, r0 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, r0 + str r1, [r0, #0x8] + ldrh r1, [r0, #0x0] + ldr lr, [r0, #0x4] + cmp r1, #0x0 + bls _020AFFA8 +_020AFF7C: + add r3, lr, r4, lsl #0x3 + ldr r12, [r0, #0x8] + ldr r2, [r3, #0x4] + add r1, r4, #0x1 + add r2, r12, r2 + str r2, [r3, #0x4] + mov r1, r1, lsl #0x10 + ldrh r2, [r0, #0x0] + mov r4, r1, lsr #0x10 + cmp r4, r2 + blo _020AFF7C +_020AFFA8: + ldr r1, [r0, #0x10] + cmp r1, #0x0 + ldmeqia sp!, {r4,pc} + add r1, r1, r0 + str r1, [r0, #0x10] + ldr r0, [r0, #0x10] + bl UnpackExtendedData_ + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dUnpackNMC + + arm_func_start UnpackExtendedData_ +UnpackExtendedData_: ; 0x020AFFC8 + ldr ip, _020AFFD4 ; =NNSi_G2dUnpackUserExCellAttrBank + add r0, r0, #0x8 + bx r12 + .balign 4 +_020AFFD4: .word NNSi_G2dUnpackUserExCellAttrBank + arm_func_end UnpackExtendedData_ + + arm_func_start NNS_G2dGetUnpackedMultiCellBank +NNS_G2dGetUnpackedMultiCellBank: ; 0x020AFFD8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020B001C ; =0x4D43424B + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNS_G2dUnpackNMC + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B001C: .word 0x4D43424B + arm_func_end NNS_G2dGetUnpackedMultiCellBank diff --git a/arm9/asm/NNS_G2D_g2d_nob_load.s b/arm9/asm/NNS_G2D_g2d_nob_load.s new file mode 100644 index 00000000..319a6a4a --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_nob_load.s @@ -0,0 +1,112 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dUnpackNCE +NNS_G2dUnpackNCE: ; 0x020AFDE8 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r1, [r5, #0x4] + add r1, r1, r5 + str r1, [r5, #0x4] + bl GetPtrOamArrayHead_ + ldrh r1, [r5, #0x0] + mov r4, r0 + mov r6, #0x0 + cmp r1, #0x0 + bls _020AFE44 +_020AFE14: + mov r0, r5 + mov r1, r6 + bl NNS_G2dGetCellDataByIdx + ldr r2, [r0, #0x4] + add r1, r6, #0x1 + add r2, r2, r4 + str r2, [r0, #0x4] + mov r0, r1, lsl #0x10 + ldrh r1, [r5, #0x0] + mov r6, r0, lsr #0x10 + cmp r6, r1 + blo _020AFE14 +_020AFE44: + ldr r0, [r5, #0xc] + cmp r0, #0x0 + beq _020AFE6C + add r0, r0, r5 + str r0, [r5, #0xc] + ldr r1, [r5, #0xc] + ldr r0, [r1, #0x4] + add r0, r0, r1 + str r0, [r1, #0x4] + str r1, [r5, #0xc] +_020AFE6C: + ldr r0, [r5, #0x14] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + add r0, r0, r5 + str r0, [r5, #0x14] + ldr r0, [r5, #0x14] + bl UnPackExtendedData_ + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G2dUnpackNCE + + arm_func_start NNS_G2dGetCellDataByIdx +NNS_G2dGetCellDataByIdx: ; 0x020AFE8C + ldrh r2, [r0, #0x0] + cmp r1, r2 + movcs r0, #0x0 + bxcs lr + ldrh r2, [r0, #0x2] + ands r2, r2, #0x1 + ldrne r0, [r0, #0x4] + addne r0, r0, r1, lsl #0x4 + ldreq r0, [r0, #0x4] + addeq r0, r0, r1, lsl #0x3 + bx lr + arm_func_end NNS_G2dGetCellDataByIdx + + arm_func_start NNS_G2dGetUnpackedCellBank +NNS_G2dGetUnpackedCellBank: ; 0x020AFEB8 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldr r1, _020AFEFC ; =0x4345424B + bl NNS_G2dFindBinaryBlock + movs r4, r0 + moveq r0, #0x0 + addeq sp, sp, #0x4 + streq r0, [r5, #0x0] + ldmeqia sp!, {r4-r5,pc} + add r0, r4, #0x8 + bl NNS_G2dUnpackNCE + add r0, r4, #0x8 + str r0, [r5, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AFEFC: .word 0x4345424B + arm_func_end NNS_G2dGetUnpackedCellBank + + arm_func_start UnPackExtendedData_ +UnPackExtendedData_: ; 0x020AFF00 + ldr ip, _020AFF0C ; =NNSi_G2dUnpackUserExCellAttrBank + add r0, r0, #0x8 + bx r12 + .balign 4 +_020AFF0C: .word NNSi_G2dUnpackUserExCellAttrBank + arm_func_end UnPackExtendedData_ + + arm_func_start GetPtrOamArrayHead_ +GetPtrOamArrayHead_: ; 0x020AFF10 + ldrh r1, [r0, #0x2] + ands r1, r1, #0x1 + ldrneh r1, [r0, #0x0] + ldrne r0, [r0, #0x4] + addne r0, r0, r1, lsl #0x4 + ldreqh r1, [r0, #0x0] + ldreq r0, [r0, #0x4] + addeq r0, r0, r1, lsl #0x3 + bx lr + arm_func_end GetPtrOamArrayHead_ diff --git a/arm9/asm/NNS_G2D_g2d_node.s b/arm9/asm/NNS_G2D_g2d_node.s new file mode 100644 index 00000000..eb4e2497 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_node.s @@ -0,0 +1,18 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dInitializeNode +NNSi_G2dInitializeNode: ; 0x020B1AD4 + mov r2, #0x0 + str r2, [r0, #0x0] + str r1, [r0, #0x4] + mov r1, #0x1 + str r1, [r0, #0x8] + ldr ip, _020B1AF4 ; =NNSi_G2dSrtcInitControl + add r0, r0, #0xc + bx r12 + .balign 4 +_020B1AF4: .word NNSi_G2dSrtcInitControl + arm_func_end NNSi_G2dInitializeNode diff --git a/arm9/asm/NNS_G2D_g2d_nsc_load.s b/arm9/asm/NNS_G2D_g2d_nsc_load.s new file mode 100644 index 00000000..4f2bb65c --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_nsc_load.s @@ -0,0 +1,21 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dGetUnpackedScreenData +NNS_G2dGetUnpackedScreenData: ; 0x020B0180 + stmdb sp!, {r4,lr} + mov r4, r1 + ldr r1, _020B01AC ; =0x5343524E + bl NNS_G2dFindBinaryBlock + cmp r0, #0x0 + addne r0, r0, #0x8 + strne r0, [r4, #0x0] + movne r0, #0x1 + moveq r0, #0x0 + streq r0, [r4, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020B01AC: .word 0x5343524E + arm_func_end NNS_G2dGetUnpackedScreenData diff --git a/arm9/asm/NNS_G2D_g2d_oam.s b/arm9/asm/NNS_G2D_g2d_oam.s new file mode 100644 index 00000000..cec3db64 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_oam.s @@ -0,0 +1,667 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global NNSi_objSizeHTbl +NNSi_objSizeHTbl: ; 0x020FF894 + .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00 + .byte 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00 + + .global NNSi_objSizeWTbl +NNSi_objSizeWTbl: ; 0x020FF8AC + .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00 + .byte 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00 + ; static const in function + + .section .data + + .global funcTbl$8497 +funcTbl$8497: ; 0x0210655C + .word CpuLoadOAMMain_ + .word CpuLoadOAMSub_ + .word 0 + .word 0 + .word 0 + + .section .bss + + .global numRegisterdInstance_ +numRegisterdInstance_: ; 0x021CCD9C + .space 0x4 + + .global oamCache_ +oamCache_: ; 0x021CCDA0 + .space 0xFC0 + + .section .text + + arm_func_start NNS_G2dGetOamManagerOamCapacity +NNS_G2dGetOamManagerOamCapacity: ; 0x020B0830 + ldrh r3, [r0, #0x6] + ldrh r2, [r0, #0x8] + mov r12, #0x0 + add r1, r3, #0x1 + cmp r2, r1 + bgt _020B0854 + ldrh r0, [r0, #0x4] + cmp r0, r3 + movls r12, #0x1 +_020B0854: + cmp r12, #0x0 + subne r0, r3, r2 + addne r0, r0, #0x1 + movne r0, r0, lsl #0x10 + movne r0, r0, lsr #0x10 + moveq r0, #0x0 + bx lr + arm_func_end NNS_G2dGetOamManagerOamCapacity + + arm_func_start NNS_G2dApplyAndResetOamManagerBuffer +NNS_G2dApplyAndResetOamManagerBuffer: ; 0x020B0870 + stmdb sp!, {r4,lr} + mov r4, r0 + bl NNS_G2dApplyOamManagerToHW + mov r0, r4 + bl NNS_G2dResetOamManagerBuffer + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dApplyAndResetOamManagerBuffer + + arm_func_start NNS_G2dResetOamManagerBuffer +NNS_G2dResetOamManagerBuffer: ; 0x020B0888 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r0, [r5, #0x14] + cmp r0, #0x0 + beq _020B0944 + ldrh r2, [r5, #0x6] + ldrh r1, [r5, #0x8] + mov r3, #0x0 + add r0, r2, #0x1 + cmp r1, r0 + bgt _020B08C0 + ldrh r0, [r5, #0x4] + cmp r0, r2 + movls r3, #0x1 +_020B08C0: + cmp r3, #0x0 + moveq r4, #0x0 + beq _020B08E0 + ldrh r0, [r5, #0x4] + sub r0, r2, r0 + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0xd +_020B08E0: + ldr r2, [r5, #0x0] + ldr r1, _020B09AC ; =oamCache_ + mov r0, #0x540 + mla r1, r2, r0, r1 + ldrh r0, [r5, #0x4] + add r2, r1, #0x100 + mov r1, r4 + add r6, r2, r0, lsl #0x3 + mov r0, r6 + bl DC_InvalidateRange + ldr r0, _020B09B0 ; =GXi_DmaId + mvn r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, r1 + beq _020B0930 + mov r1, r6 + mov r3, r4 + mov r2, #0xc0 + bl MI_DmaFill32 + b _020B0998 +_020B0930: + mov r1, r6 + mov r2, r4 + mov r0, #0xc0 + bl MIi_CpuClear32 + b _020B0998 +_020B0944: + ldr r2, [r5, #0x0] + ldr r1, _020B09AC ; =oamCache_ + mov r0, #0x540 + mla r1, r2, r0, r1 + ldrh r2, [r5, #0x4] + ldrh r0, [r5, #0x6] + add r1, r1, #0x100 + add r3, r1, r2, lsl #0x3 + sub r0, r0, r2 + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + movs r2, r0, lsr #0x10 + mov r0, #0x0 + beq _020B0998 + mov r1, #0xc0 +_020B0980: + add r0, r0, #0x1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, r2 + strh r1, [r3], #0x8 + blo _020B0980 +_020B0998: + ldrh r0, [r5, #0x4] + strh r0, [r5, #0x8] + ldrh r0, [r5, #0xa] + strh r0, [r5, #0xe] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B09AC: .word oamCache_ +_020B09B0: .word GXi_DmaId + arm_func_end NNS_G2dResetOamManagerBuffer + + arm_func_start NNS_G2dApplyOamManagerToHW +NNS_G2dApplyOamManagerToHW: ; 0x020B09B4 + stmdb sp!, {r4-r10,lr} + mov r7, r0 + ldr r0, [r7, #0x14] + cmp r0, #0x0 + beq _020B0A48 + ldr r5, [r7, #0x0] + ldr r1, _020B0BA8 ; =oamCache_ + mov r0, #0x540 + mla r1, r5, r0, r1 + ldrh r2, [r7, #0x4] + ldrh r0, [r7, #0x6] + add r1, r1, #0x100 + add r4, r1, r2, lsl #0x3 + sub r0, r0, r2 + add r0, r0, #0x1 + mov r0, r0, lsl #0x13 + mov r6, r0, lsr #0x10 + mov r2, r2, lsl #0x13 + mov r0, r4 + mov r1, r6 + mov r7, r2, lsr #0x10 + bl DC_FlushRange + cmp r5, #0x0 + beq _020B0A20 + cmp r5, #0x1 + beq _020B0A34 + ldmia sp!, {r4-r10,pc} +_020B0A20: + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl GX_LoadOAM + ldmia sp!, {r4-r10,pc} +_020B0A34: + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl GXS_LoadOAM + ldmia sp!, {r4-r10,pc} +_020B0A48: + ldr r0, [r7, #0x0] + ldr r2, _020B0BA8 ; =oamCache_ + mov r1, #0x540 + mla r2, r0, r1, r2 + ldrh r5, [r7, #0x4] + ldrh r1, [r7, #0x6] + ldr r3, _020B0BAC ; =funcTbl$8497 + add r4, r2, #0x100 + sub r1, r1, r5 + add r1, r1, #0x1 + mov r1, r1, lsl #0x10 + mov r2, r5, lsl #0x13 + add r6, r4, r5, lsl #0x3 + movs r5, r1, lsr #0x10 + mov r4, r2, lsr #0x10 + ldr r9, [r3, r0, lsl #0x2] + mov r10, #0x0 + beq _020B0AC8 + mov r8, #0x6 +_020B0A94: + mov r0, r6 + mov r1, r4 + mov r2, r8 + blx r9 + add r0, r10, #0x1 + add r2, r4, #0x8 + mov r1, r0, lsl #0x10 + mov r0, r2, lsl #0x10 + mov r10, r1, lsr #0x10 + cmp r10, r5 + mov r4, r0, lsr #0x10 + add r6, r6, #0x8 + blo _020B0A94 +_020B0AC8: + ldrh r2, [r7, #0xc] + ldrh r1, [r7, #0xe] + mov r3, #0x0 + add r0, r2, #0x1 + cmp r1, r0 + bgt _020B0AEC + ldrh r0, [r7, #0xa] + cmp r0, r2 + movls r3, #0x1 +_020B0AEC: + cmp r3, #0x0 + ldmeqia sp!, {r4-r10,pc} + ldr r0, [r7, #0x0] + ldr r2, _020B0BA8 ; =oamCache_ + mov r1, #0x540 + mla r2, r0, r1, r2 + ldrh r5, [r7, #0xa] + add r4, r2, #0x100 + ldrh r1, [r7, #0xc] + mov r2, r5, lsl #0x15 + ldr r3, _020B0BAC ; =funcTbl$8497 + sub r1, r1, r5 + add r1, r1, #0x1 + mov r1, r1, lsl #0x10 + add r9, r4, r5, lsl #0x5 + ldr r5, [r3, r0, lsl #0x2] + movs r8, r1, lsr #0x10 + mov r7, r2, lsr #0x10 + mov r6, #0x0 + ldmeqia sp!, {r4-r10,pc} + mov r4, #0x2 +_020B0B40: + mov r2, r4 + add r0, r9, #0x6 + add r1, r7, #0x6 + blx r5 + mov r2, r4 + add r0, r9, #0xe + add r1, r7, #0xe + blx r5 + mov r2, r4 + add r0, r9, #0x16 + add r1, r7, #0x16 + blx r5 + add r0, r9, #0x1e + add r1, r7, #0x1e + mov r2, r4 + blx r5 + add r0, r7, #0x20 + mov r0, r0, lsl #0x10 + mov r7, r0, lsr #0x10 + add r9, r9, #0x20 + add r0, r6, #0x1 + mov r0, r0, lsl #0x10 + mov r6, r0, lsr #0x10 + cmp r6, r8 + blo _020B0B40 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B0BA8: .word oamCache_ +_020B0BAC: .word funcTbl$8497 + arm_func_end NNS_G2dApplyOamManagerToHW + + arm_func_start NNS_G2dEntryOamManagerAffine +NNS_G2dEntryOamManagerAffine: ; 0x020B0BB0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldrh r12, [r0, #0xc] + ldrh r3, [r0, #0xe] + mov lr, #0x0 + add r2, r12, #0x1 + cmp r3, r2 + bgt _020B0BDC + ldrh r2, [r0, #0xa] + cmp r2, r12 + movls lr, #0x1 +_020B0BDC: + cmp lr, #0x0 + subne r2, r12, r3 + addne r2, r2, #0x1 + movne r2, r2, lsl #0x10 + movne r2, r2, lsr #0x10 + moveq r2, #0x0 + cmp r2, #0x1 + movcs r2, #0x1 + movcc r2, #0x0 + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldreq r0, _020B0C74 ; =0x0000FFFE + ldmeqia sp!, {pc} + ldr lr, [r0, #0x0] + ldr r3, _020B0C78 ; =oamCache_ + mov r2, #0x540 + mla r12, lr, r2, r3 + ldr r3, [r1, #0x0] + ldrh r2, [r0, #0xe] + add r12, r12, #0x100 + mov r3, r3, asr #0x4 + add r12, r12, r2, lsl #0x5 + strh r3, [r12, #0x6] + ldr r3, [r1, #0x4] + mov r3, r3, asr #0x4 + strh r3, [r12, #0xe] + ldr r3, [r1, #0x8] + mov r3, r3, asr #0x4 + strh r3, [r12, #0x16] + ldr r1, [r1, #0xc] + mov r1, r1, asr #0x4 + strh r1, [r12, #0x1e] + ldrh r1, [r0, #0xe] + add r1, r1, #0x1 + strh r1, [r0, #0xe] + mov r0, r2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B0C74: .word 0x0000FFFE +_020B0C78: .word oamCache_ + arm_func_end NNS_G2dEntryOamManagerAffine + + arm_func_start NNS_G2dEntryOamManagerOamWithAffineIdx +NNS_G2dEntryOamManagerOamWithAffineIdx: ; 0x020B0C7C + stmdb sp!, {r4,lr} + ldrh r12, [r0, #0x6] + ldrh r4, [r0, #0x8] + mov lr, #0x0 + add r3, r12, #0x1 + cmp r4, r3 + bgt _020B0CA4 + ldrh r3, [r0, #0x4] + cmp r3, r12 + movls lr, #0x1 +_020B0CA4: + cmp lr, #0x0 + subne r3, r12, r4 + addne r3, r3, #0x1 + movne r3, r3, lsl #0x10 + movne r3, r3, lsr #0x10 + moveq r3, #0x0 + cmp r3, #0x1 + movcs r3, #0x1 + movcc r3, #0x0 + cmp r3, #0x0 + beq _020B0D48 + ldr r4, [r0, #0x0] + ldr ip, _020B0D50 ; =oamCache_ + mov r3, #0x540 + mla r12, r4, r3, r12 + ldrh r3, [r0, #0x8] + add r4, r12, #0x100 + ldrh r12, [r1, #0x0] + mov lr, r3, lsl #0x3 + add r3, r4, r3, lsl #0x3 + strh r12, [r4, lr] + ldrh lr, [r1, #0x2] + ldr ip, _020B0D54 ; =0x0000FFFE + strh lr, [r3, #0x2] + ldrh r1, [r1, #0x4] + cmp r2, r12 + strh r1, [r3, #0x4] + beq _020B0D34 + ldr r1, [r3, #0x0] + mov r12, r1, lsl #0x16 + mov r12, r12, lsr #0x1e + ands r12, r12, #0x1 + bicne r12, r1, #0x3e000000 + andne r1, r2, #0x1f + orrne r1, r12, r1, lsl #0x19 + strne r1, [r3, #0x0] +_020B0D34: + ldrh r1, [r0, #0x8] + add r1, r1, #0x1 + strh r1, [r0, #0x8] + mov r0, #0x1 + ldmia sp!, {r4,pc} +_020B0D48: + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020B0D50: .word oamCache_ +_020B0D54: .word 0x0000FFFE + arm_func_end NNS_G2dEntryOamManagerOamWithAffineIdx + + arm_func_start NNS_G2dEntryOamManagerOam +NNS_G2dEntryOamManagerOam: ; 0x020B0D58 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrh lr, [r0, #0x6] + ldrh r12, [r0, #0x8] + mov r4, #0x0 + add r3, lr, #0x1 + cmp r12, r3 + bgt _020B0D84 + ldrh r3, [r0, #0x4] + cmp r3, lr + movls r4, #0x1 +_020B0D84: + cmp r4, #0x0 + subne r3, lr, r12 + addne r3, r3, #0x1 + movne r3, r3, lsl #0x10 + movne r3, r3, lsr #0x10 + moveq r3, #0x0 + cmp r3, r2 + movcs r3, #0x1 + movcc r3, #0x0 + cmp r3, #0x0 + beq _020B0E24 + ldr lr, [r0, #0x0] + ldr ip, _020B0E30 ; =oamCache_ + mov r3, #0x540 + mla r12, lr, r3, r12 + ldrh r3, [r0, #0x8] + add r12, r12, #0x100 + cmp r2, #0x0 + add r4, r12, r3, lsl #0x3 + mov r5, #0x0 + ble _020B0E18 + add r3, r0, #0x8 +_020B0DDC: + ldrh lr, [r1, #0x0] + mov r0, r5, lsl #0x3 + add r12, r4, r5, lsl #0x3 + strh lr, [r4, r0] + ldrh r0, [r1, #0x2] + add r5, r5, #0x1 + cmp r5, r2 + strh r0, [r12, #0x2] + ldrh r0, [r1, #0x4] + add r1, r1, #0x8 + strh r0, [r12, #0x4] + ldrh r0, [r3, #0x0] + add r0, r0, #0x1 + strh r0, [r3, #0x0] + blt _020B0DDC +_020B0E18: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r5,pc} +_020B0E24: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B0E30: .word oamCache_ + arm_func_end NNS_G2dEntryOamManagerOam + + arm_func_start NNS_G2dGetNewOamManagerInstance +NNS_G2dGetNewOamManagerInstance: ; 0x020B0E34 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, [sp, #0x1c] + ldr r6, _020B0FB4 ; =oamCache_ + mov r4, #0x540 + mla r4, r5, r4, r6 + mov lr, r1 + sub r1, r2, #0x1 + add r1, lr, r1 + mov r1, r1, lsl #0x10 + mov r12, r1, lsr #0x10 + add r7, r4, lr, lsl #0x1 + add r2, r4, r12, lsl #0x1 + mov r6, r0 + mov r5, r3 + cmp r7, r2 + mov r3, lr, lsl #0x1 + bhi _020B0E9C + ldr r0, _020B0FB8 ; =0x0000FFFF +_020B0E80: + ldrh r1, [r7, #0x0] + cmp r1, r0 + movne r0, #0x0 + bne _020B0EA0 + add r7, r7, #0x2 + cmp r7, r2 + bls _020B0E80 +_020B0E9C: + mov r0, #0x1 +_020B0EA0: + cmp r0, #0x0 + beq _020B0EE0 + ldr r0, _020B0FBC ; =numRegisterdInstance_ + sub r2, r12, lr + ldrh r7, [r0, #0x0] + add r1, r4, r3 + mov r2, r2, lsl #0x1 + add r3, r7, #0x1 + strh r3, [r0, #0x0] + strh r7, [r6, #0x10] + strh lr, [r6, #0x4] + strh r12, [r6, #0x6] + strh lr, [r6, #0x8] + ldrh r0, [r6, #0x10] + bl MIi_CpuClear16 + b _020B0EEC +_020B0EE0: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020B0EEC: + ldrh r0, [sp, #0x18] + add r4, r4, #0x500 + cmp r0, #0x0 + bne _020B0F18 + mov r0, #0x20 + strh r0, [r6, #0xa] + mov r0, #0x0 + strh r0, [r6, #0xc] + ldrh r0, [r6, #0xa] + strh r0, [r6, #0xe] + b _020B0F98 +_020B0F18: + sub r0, r0, #0x1 + add r0, r5, r0 + mov r0, r0, lsl #0x10 + mov r12, r0, lsr #0x10 + add r7, r4, r5, lsl #0x1 + add r2, r4, r12, lsl #0x1 + cmp r7, r2 + mov r3, r5, lsl #0x1 + bhi _020B0F5C + ldr r0, _020B0FB8 ; =0x0000FFFF +_020B0F40: + ldrh r1, [r7, #0x0] + cmp r1, r0 + movne r0, #0x0 + bne _020B0F60 + add r7, r7, #0x2 + cmp r7, r2 + bls _020B0F40 +_020B0F5C: + mov r0, #0x1 +_020B0F60: + cmp r0, #0x0 + beq _020B0F8C + strh r5, [r6, #0xa] + strh r12, [r6, #0xc] + strh r5, [r6, #0xe] + ldrh r0, [r6, #0x10] + sub r2, r12, r5 + add r1, r4, r3 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + b _020B0F98 +_020B0F8C: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r7,pc} +_020B0F98: + mov r1, #0x0 + ldr r0, [sp, #0x1c] + str r1, [r6, #0x14] + str r0, [r6, #0x0] + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B0FB4: .word oamCache_ +_020B0FB8: .word 0x0000FFFF +_020B0FBC: .word numRegisterdInstance_ + arm_func_end NNS_G2dGetNewOamManagerInstance + + arm_func_start NNS_G2dInitOamManagerModule +NNS_G2dInitOamManagerModule: ; 0x020B0FC0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020B1060 ; =oamCache_ + 0x100 + mov r0, #0xc0 + mov r2, #0x400 + bl MIi_CpuClear16 + ldr r1, _020B1064 ; =oamCache_ + 0x640 + mov r0, #0xc0 + mov r2, #0x400 + bl MIi_CpuClear16 + ldr r1, _020B1068 ; =oamCache_ + 0xB80 + mov r0, #0xc0 + mov r2, #0x400 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1070 ; =oamCache_ + mov r2, #0x100 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1074 ; =oamCache_ + 0x540 + mov r2, #0x100 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1078 ; =oamCache_ + 0xA80 + mov r2, #0x100 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B107C ; =oamCache_ + 0x500 + mov r2, #0x40 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1080 ; =oamCache_ + 0xA40 + mov r2, #0x40 + bl MIi_CpuClear16 + ldr r0, _020B106C ; =0x0000FFFF + ldr r1, _020B1084 ; =oamCache_ + 0xF80 + mov r2, #0x40 + bl MIi_CpuClear16 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B1060: .word oamCache_ + 0x100 +_020B1064: .word oamCache_ + 0x640 +_020B1068: .word oamCache_ + 0xB80 +_020B106C: .word 0x0000FFFF +_020B1070: .word oamCache_ +_020B1074: .word oamCache_ + 0x540 +_020B1078: .word oamCache_ + 0xA80 +_020B107C: .word oamCache_ + 0x500 +_020B1080: .word oamCache_ + 0xA40 +_020B1084: .word oamCache_ + 0xF80 + arm_func_end NNS_G2dInitOamManagerModule + + arm_func_start CpuLoadOAMMain_ +CpuLoadOAMMain_: ; 0x020B1088 + ldr ip, _020B1094 ; =MIi_CpuCopy16 + add r1, r1, #0x7000000 + bx r12 + .balign 4 +_020B1094: .word MIi_CpuCopy16 + arm_func_end CpuLoadOAMMain_ + + arm_func_start CpuLoadOAMSub_ +CpuLoadOAMSub_: ; 0x020B1098 + ldr r3, _020B10A8 ; =0x07000400 + ldr ip, _020B10AC ; =MIi_CpuCopy16 + add r1, r1, r3 + bx r12 + .balign 4 +_020B10A8: .word 0x07000400 +_020B10AC: .word MIi_CpuCopy16 + arm_func_end CpuLoadOAMSub_ diff --git a/arm9/asm/NNS_G2D_g2d_oamsoftware.s b/arm9/asm/NNS_G2D_g2d_oamsoftware.s new file mode 100644 index 00000000..c89c4787 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_oamsoftware.s @@ -0,0 +1,421 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global pltFmtTbl$8430 +pltFmtTbl$8430: ; 0x020FF8D0 + .byte 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 + ; static const in function + + .global texSize_$8337 +texSize_$8337: ; 0x020FF8D8 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 + .byte 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 + + .global gxTexSizeSTbl +gxTexSizeSTbl: ; 0x020FF8F8 + .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 + + .global gxTexSizeTTbl +gxTexSizeTTbl: ; 0x020FF928 + .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 + + .section .data + + .global zOffsetStep_ +zOffsetStep_: ; 0x02106590 + .byte 0x00, 0xF0, 0xFF, 0xFF + + .section .bss + + .global bAutoZOffsetAdd_ +bAutoZOffsetAdd_: ; 0x021CED08 + .space 0x4 + + .global s_pUVFlipCorrectFunc +s_pUVFlipCorrectFunc: ; 0x021CED0C + .space 0x4 + + .global zOffset_ +zOffset_: ; 0x021CED10 + .space 0x4 + + .section .text + + arm_func_start NNS_G2dDrawOneOam3DDirectWithPosFast +NNS_G2dDrawOneOam3DDirectWithPosFast: ; 0x020B46B4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x1c + add r12, sp, #0x4 + mov r5, r1 + mov r4, r2 + mov r7, r3 + mov r6, r0 + ldr r1, [sp, #0x30] + ldr r2, [sp, #0x34] + ldr r3, [sp, #0x38] + mov r0, r7 + str r12, [sp, #0x0] + bl CalcSpriteParams_ + ldr r2, [r7, #0x0] + and r1, r2, #0x300 + cmp r1, #0x100 + beq _020B4708 + cmp r1, #0x300 + beq _020B4708 + and r0, r2, #0x30000000 + orr r1, r1, r0 +_020B4708: + cmp r1, #0x300 + bne _020B478C + ldr r0, _020B4914 ; =0xC000C000 + ldr r1, _020B4918 ; =bAutoZOffsetAdd_ + and r0, r2, r0 + and r2, r0, #0xc0000000 + mov r12, r2, lsr #0x1e + and r0, r0, #0xc000 + mov lr, r0, asr #0xe + ldr r3, _020B491C ; =NNSi_objSizeWTbl + ldr r0, [r1, #0x0] + ldr r2, _020B4920 ; =NNSi_objSizeHTbl + cmp r0, #0x0 + ldrne r0, _020B4924 ; =zOffset_ + mov r12, r12, lsl #0x1 + add r1, r2, lr, lsl #0x3 + add r3, r3, lr, lsl #0x3 + ldrh r2, [r12, r3] + ldrh r1, [r12, r1] + ldrne r0, [r0, #0x0] + mov r2, r2, asr #0x1 + addne r3, r0, r4, lsl #0xc + mov r1, r1, asr #0x1 + add r0, r5, r1 + add r2, r6, r2 + ldr r1, _020B4928 ; =0x04000470 + mov r2, r2, lsl #0xc + str r2, [r1, #0x0] + mov r0, r0, lsl #0xc + moveq r3, r4, lsl #0xc + str r0, [r1, #0x0] + str r3, [r1, #0x0] + b _020B47C0 +_020B478C: + ldr r0, _020B4918 ; =bAutoZOffsetAdd_ + ldr r1, _020B4928 ; =0x04000470 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldrne r0, _020B4924 ; =zOffset_ + ldrne r0, [r0, #0x0] + addne r2, r0, r4, lsl #0xc + mov r0, r6, lsl #0xc + str r0, [r1, #0x0] + mov r0, r5, lsl #0xc + moveq r2, r4, lsl #0xc + str r0, [r1, #0x0] + str r2, [r1, #0x0] +_020B47C0: + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x18] + ldr r2, _020B492C ; =0x0400046C + mov r0, r0, lsl #0xc + str r0, [r2, #0x0] + mov r0, r1, lsl #0xc + str r0, [r2, #0x0] + mov r1, #0x1000 + str r1, [r2, #0x0] + ldr r0, _020B4930 ; =0x04000500 + mov r1, #0x1 + str r1, [r0, #0x0] + ldr r0, [sp, #0x4] + ldr r1, [sp, #0x10] + mov r0, r0, lsl #0x8 + mov r1, r1, lsl #0x8 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r1, lsr #0x10 + orr r2, r2, r0, lsl #0x10 + ldr r1, _020B4934 ; =0x04000488 + ldr r0, _020B4938 ; =0x04000490 + str r2, [r1, #0x0] + mov r2, #0x10000 + str r2, [r0, #0x0] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x10] + mov r2, r2, lsl #0x8 + mov r3, r3, lsl #0x8 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + mov r2, r2, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r4, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + orr r3, r4, r2, lsl #0x10 + ldr r2, _020B493C ; =0x00010040 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldr r2, [sp, #0xc] + ldr r3, [sp, #0x8] + mov r2, r2, lsl #0x8 + mov r3, r3, lsl #0x8 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + mov r2, r2, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r4, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + orr r2, r4, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r2, #0x40 + str r2, [r0, #0x0] + ldr r2, [sp, #0x4] + ldr r3, [sp, #0x8] + mov r2, r2, lsl #0x8 + mov r3, r3, lsl #0x8 + mov r2, r2, asr #0x10 + mov r3, r3, asr #0x10 + mov r2, r2, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r4, r2, lsr #0x10 + mov r2, r3, lsr #0x10 + orr r2, r4, r2, lsl #0x10 + str r2, [r1, #0x0] + mov r2, #0x0 + str r2, [r0, #0x0] + ldr r1, _020B4940 ; =0x04000504 + ldr r0, _020B4918 ; =bAutoZOffsetAdd_ + str r2, [r1, #0x0] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x1c + ldmeqia sp!, {r4-r7,pc} + ldr r1, _020B4924 ; =zOffset_ + ldr r0, _020B4944 ; =zOffsetStep_ + ldr r2, [r1, #0x0] + ldr r0, [r0, #0x0] + add r0, r2, r0 + str r0, [r1, #0x0] + add sp, sp, #0x1c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B4914: .word 0xC000C000 +_020B4918: .word bAutoZOffsetAdd_ +_020B491C: .word NNSi_objSizeWTbl +_020B4920: .word NNSi_objSizeHTbl +_020B4924: .word zOffset_ +_020B4928: .word 0x04000470 +_020B492C: .word 0x0400046C +_020B4930: .word 0x04000500 +_020B4934: .word 0x04000488 +_020B4938: .word 0x04000490 +_020B493C: .word 0x00010040 +_020B4940: .word 0x04000504 +_020B4944: .word zOffsetStep_ + arm_func_end NNS_G2dDrawOneOam3DDirectWithPosFast + + arm_func_start NNSi_G2dGetOamSoftEmuAutoZOffsetStep +NNSi_G2dGetOamSoftEmuAutoZOffsetStep: ; 0x020B4948 + ldr r0, _020B4954 ; =zOffsetStep_ + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020B4954: .word zOffsetStep_ + arm_func_end NNSi_G2dGetOamSoftEmuAutoZOffsetStep + + arm_func_start NNSi_G2dSetOamSoftEmuAutoZOffsetStep +NNSi_G2dSetOamSoftEmuAutoZOffsetStep: ; 0x020B4958 + ldr r1, _020B4964 ; =zOffsetStep_ + str r0, [r1, #0x0] + bx lr + .balign 4 +_020B4964: .word zOffsetStep_ + arm_func_end NNSi_G2dSetOamSoftEmuAutoZOffsetStep + + arm_func_start NNSi_G2dResetOamSoftEmuAutoZOffset +NNSi_G2dResetOamSoftEmuAutoZOffset: ; 0x020B4968 + ldr r0, _020B4978 ; =zOffset_ + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020B4978: .word zOffset_ + arm_func_end NNSi_G2dResetOamSoftEmuAutoZOffset + + arm_func_start NNSi_G2dSetOamSoftEmuAutoZOffsetFlag +NNSi_G2dSetOamSoftEmuAutoZOffsetFlag: ; 0x020B497C + ldr r1, _020B4988 ; =bAutoZOffsetAdd_ + str r0, [r1, #0x0] + bx lr + .balign 4 +_020B4988: .word bAutoZOffsetAdd_ + arm_func_end NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + + arm_func_start CalcSpriteParams_ +CalcSpriteParams_: ; 0x020B498C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0xc + mov r6, r0 + ldr r4, [r6, #0x0] + ldr r0, _020B4BCC ; =0xC000C000 + ldr r5, [r6, #0x4] + and r4, r4, r0 + and r0, r4, #0xc0000000 + and r4, r4, #0xc000 + mov lr, r0, lsr #0x1e + ldr r0, _020B4BD0 ; =NNSi_objSizeWTbl + mov r12, r4, asr #0xe + ldr r8, _020B4BD4 ; =NNSi_objSizeHTbl + mov r4, lr, lsl #0x1 + add r0, r0, r12, lsl #0x3 + ldrh r9, [r4, r0] + ldr r0, [sp, #0x28] + mov r5, r5, lsl #0x16 + mov r5, r5, lsr #0x16 + mov r7, r5, lsl #0x10 + str r9, [r0, #0x10] + add r5, r8, r12, lsl #0x3 + ldrh r8, [r4, r5] + mov r5, r1 + mov r4, r3 + str r8, [r0, #0x14] + ldr r1, [r5, #0x14] + mov r7, r7, lsr #0x10 + cmp r1, #0x0 + bne _020B4A74 + ldr r1, [r5, #0x8] + mov r2, r2, lsr #0x3 + orr r1, r2, r1, lsl #0x1a + ldr r2, [r5, #0x0] + orr r1, r1, #0x40000000 + ldr r3, [r5, #0x4] + orr r1, r1, r2, lsl #0x14 + orr r2, r1, r3, lsl #0x17 + ldr r8, [r5, #0x10] + ldr r1, _020B4BD8 ; =0x040004A8 + orr r2, r2, r8, lsl #0x1d + str r2, [r1, #0x0] + ldr r1, [r5, #0x8] + ldr r2, [r5, #0x0] + cmp r1, #0x4 + moveq r1, r7, lsl #0xf + moveq r7, r1, lsr #0x10 + ldr r1, _020B4BDC ; =texSize_$8337 + ldr r1, [r1, r2, lsl #0x2] + sub r1, r1, #0x1 + and r1, r7, r1 + mov r1, r1, lsl #0xf + str r1, [r0, #0x0] + ldr r1, [r5, #0x0] + mov r1, r7, asr r1 + mov r1, r1, lsl #0xf + str r1, [r0, #0x4] + b _020B4AE0 +_020B4A74: + and r1, r1, #0x700000 + mov r1, r1, asr #0x14 + mov r12, r12, lsl #0x10 + add r1, r1, #0x5 + ldr r3, [r5, #0x8] + mov lr, lr, lsl #0x10 + ldr sb, _020B4BE0 ; =gxTexSizeSTbl + mov r12, r12, lsr #0x10 + ldr r8, _020B4BE4 ; =gxTexSizeTTbl + add r1, r2, r7, lsl r1 + mov r2, r3, lsl #0x1a + orr r3, r2, r1, lsr #0x3 + mov r7, lr, lsr #0x10 + add r2, r9, r12, lsl #0x4 + add r1, r8, r12, lsl #0x4 + ldr r2, [r2, r7, lsl #0x2] + orr r3, r3, #0x40000000 + ldr r1, [r1, r7, lsl #0x2] + orr r2, r3, r2, lsl #0x14 + ldr r3, [r5, #0x10] + orr r2, r2, r1, lsl #0x17 + ldr r1, _020B4BD8 ; =0x040004A8 + orr r2, r2, r3, lsl #0x1d + str r2, [r1, #0x0] + mov r1, #0x0 + str r1, [r0, #0x0] + str r1, [r0, #0x4] +_020B4AE0: + ldr r2, [r0, #0x0] + ldr r1, [r0, #0x10] + add r1, r2, r1, lsl #0xc + str r1, [r0, #0x8] + ldr r2, [r0, #0x4] + ldr r1, [r0, #0x14] + add r1, r2, r1, lsl #0xc + str r1, [r0, #0xc] + ldr r1, [r6, #0x0] + mov r2, r1, lsl #0x2 + mov r1, r1, lsl #0x3 + movs r3, r1, lsr #0x1f + mov r12, r2, lsr #0x1f + ldrne r2, [r0, #0x0] + ldrne r1, [r0, #0x8] + strne r1, [r0, #0x0] + strne r2, [r0, #0x8] + cmp r12, #0x0 + ldrne r2, [r0, #0x4] + ldrne r1, [r0, #0xc] + strne r1, [r0, #0x4] + ldr r1, _020B4BE8 ; =s_pUVFlipCorrectFunc + strne r2, [r0, #0xc] + ldr r7, [r1, #0x0] + cmp r7, #0x0 + beq _020B4B60 + str r3, [sp, #0x0] + add r1, r0, #0x4 + add r2, r0, #0x8 + add r3, r0, #0xc + str r12, [sp, #0x4] + blx r7 +_020B4B60: + ldr r0, [r6, #0x4] + ldr r1, [r6, #0x0] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x1c + mov r3, r1, lsl #0x12 + ldr r1, [r5, #0xc] + mov r0, r0, lsl #0x10 + ldr r2, _020B4BEC ; =pltFmtTbl$8430 + mov r3, r3, lsr #0x1f + cmp r1, #0x0 + mov r0, r0, lsr #0x10 + ldr r1, [r2, r3, lsl #0x2] + movne r0, r0, lsl #0x9 + bne _020B4BA4 + cmp r1, #0x4 + moveq r0, #0x0 + movne r0, r0, lsl #0x5 +_020B4BA4: + cmp r1, #0x2 + moveq r2, #0x1 + movne r2, #0x0 + add r1, r4, r0 + rsb r0, r2, #0x4 + mov r1, r1, lsr r0 + ldr r0, _020B4BF0 ; =0x040004AC + str r1, [r0, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r9,pc} + .balign 4 +_020B4BCC: .word 0xC000C000 +_020B4BD0: .word NNSi_objSizeWTbl +_020B4BD4: .word NNSi_objSizeHTbl +_020B4BD8: .word 0x040004A8 +_020B4BDC: .word texSize_$8337 +_020B4BE0: .word gxTexSizeSTbl +_020B4BE4: .word gxTexSizeTTbl +_020B4BE8: .word s_pUVFlipCorrectFunc +_020B4BEC: .word pltFmtTbl$8430 +_020B4BF0: .word 0x040004AC + arm_func_end CalcSpriteParams_ diff --git a/arm9/asm/NNS_G2D_g2d_palettetabl.s b/arm9/asm/NNS_G2D_g2d_palettetabl.s new file mode 100644 index 00000000..a8d342cf --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_palettetabl.s @@ -0,0 +1,11 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dGetPaletteTableValue +NNS_G2dGetPaletteTableValue: ; 0x020B10B0 + mov r1, r1, lsl #0x1 + ldrh r0, [r0, r1] + bx lr + arm_func_end NNS_G2dGetPaletteTableValue diff --git a/arm9/asm/NNS_G2D_g2d_renderer.s b/arm9/asm/NNS_G2D_g2d_renderer.s new file mode 100644 index 00000000..5cd5eaac --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_renderer.s @@ -0,0 +1,1984 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global firstSRTransformedMtxIdx_ +firstSRTransformedMtxIdx_: ; 0x02106570 + .short -2 + .balign 4, 0 + + .global currenVramTransferHandle_ +currenVramTransferHandle_: ; 0x02106574 + .word -1 + + .global mtxI_ +mtxI_: ; 0x02106578 + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .bss + + .global currentMtxCachePos_ +currentMtxCachePos_: ; 0x021CDD60 + .space 0x4 + + .global groupID_ +groupID_: ; 0x021CDD64 + .space 0x4 + + .global bDonotUseSRTransform +bDonotUseSRTransform: ; 0x021CDD68 + .space 0x4 + + .global pCurrentInstance_ +pCurrentInstance_: ; 0x021CDD6C + .space 0x4 + + .global stackPos_ +stackPos_: ; 0x021CDD70 + .space 0x4 + + .global fxZStack_ +fxZStack_: ; 0x021CDD74 + .space 0x80 + + .global mtxStateStack_ +mtxStateStack_: ; 0x021CDDF4 + .space 0x100 + + .global mtxStack_ +mtxStack_: ; 0x021CDEF4 + .space 0x300 + + .global mtxStackFor2DHW_ +mtxStackFor2DHW_: ; 0x021CE1F4 + .space 0x300 + + .global mtxCacheBuffer_ +mtxCacheBuffer_: ; 0x021CE4F4 + .space 0x400 + + .global mcRenderState_ +mcRenderState_: ; 0x021CE8F4 + .space 0x408 + + .section .text + + arm_func_start NNS_G2dSetRendererImageProxy +NNS_G2dSetRendererImageProxy: ; 0x020B2780 + ldr ip, _020B2788 ; =NNS_G2dSetRndCoreImageProxy + bx r12 + .balign 4 +_020B2788: .word NNS_G2dSetRndCoreImageProxy + arm_func_end NNS_G2dSetRendererImageProxy + + arm_func_start NNS_G2dGetRendererPaletteTbl +NNS_G2dGetRendererPaletteTbl: ; 0x020B278C + ldr r0, [r0, #0x78] + bx lr + arm_func_end NNS_G2dGetRendererPaletteTbl + + arm_func_start NNS_G2dRotZ +NNS_G2dRotZ: ; 0x020B2794 + stmdb sp!, {lr} + sub sp, sp, #0x1c + ldr r2, _020B2894 ; =stackPos_ + mov lr, #0x0 + ldr r12, [r2, #0x0] + ldr r3, _020B2898 ; =mtxStack_ + mov r2, #0x18 + str r1, [sp, #0x0] + str r1, [sp, #0xc] + mla r1, r12, r2, r3 + rsb r3, r0, #0x0 + str r0, [sp, #0x4] + add r0, sp, #0x0 + mov r2, r1 + str r3, [sp, #0x8] + str lr, [sp, #0x10] + str lr, [sp, #0x14] + bl NNSi_G2dMtxConcat32 + ldr r0, _020B2894 ; =stackPos_ + ldr r1, _020B289C ; =mtxStackFor2DHW_ + ldr r2, [r0, #0x0] + mov r0, #0x18 + mla r1, r2, r0, r1 + add r0, sp, #0x0 + mov r2, r1 + bl NNSi_G2dMtxConcat32 + ldr r0, _020B28A0 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B2824 + ldr r1, _020B28A4 ; =firstSRTransformedMtxIdx_ + ldr r0, _020B28A8 ; =0x0000FFFE + ldrh r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + bne _020B2828 +_020B2824: + mov r0, #0x0 +_020B2828: + cmp r0, #0x0 + ldreq r1, _020B2894 ; =stackPos_ + ldreq r0, _020B28A4 ; =firstSRTransformedMtxIdx_ + ldreq r1, [r1, #0x0] + streqh r1, [r0, #0x0] + ldr r0, _020B2894 ; =stackPos_ + ldr r1, _020B28AC ; =mtxStateStack_ + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + add r12, r1, r0, lsr #0xd + ldrh r0, [r12, #0x4] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B288C + ; Jump table + b _020B2870 ; case 0 + b _020B288C ; case 1 + b _020B2870 ; case 2 + b _020B2870 ; case 3 +_020B2870: + ldr r0, _020B28B0 ; =groupID_ + mov r1, #0x1 + ldrh r3, [r0, #0x0] + add r2, r3, #0x1 + strh r2, [r0, #0x0] + strh r3, [r12, #0x2] + strh r1, [r12, #0x4] +_020B288C: + add sp, sp, #0x1c + ldmia sp!, {pc} + .balign 4 +_020B2894: .word stackPos_ +_020B2898: .word mtxStack_ +_020B289C: .word mtxStackFor2DHW_ +_020B28A0: .word bDonotUseSRTransform +_020B28A4: .word firstSRTransformedMtxIdx_ +_020B28A8: .word 0x0000FFFE +_020B28AC: .word mtxStateStack_ +_020B28B0: .word groupID_ + arm_func_end NNS_G2dRotZ + + arm_func_start NNS_G2dScale +NNS_G2dScale: ; 0x020B28B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x1c + ldr r2, _020B29E8 ; =stackPos_ + mov r12, #0x0 + ldr r3, [r2, #0x0] + mov r4, r1 + ldr r2, _020B29EC ; =mtxStack_ + mov r1, #0x18 + mla r1, r3, r1, r2 + mov r5, r0 + add r0, sp, #0x0 + mov r2, r1 + str r5, [sp, #0x0] + str r12, [sp, #0x4] + str r12, [sp, #0x8] + str r4, [sp, #0xc] + str r12, [sp, #0x10] + str r12, [sp, #0x14] + bl NNSi_G2dMtxConcat32 + mov r0, r5 + bl FX_Inv + mov r1, #0x0 + str r0, [sp, #0x0] + mov r0, r4 + str r1, [sp, #0x4] + str r1, [sp, #0x8] + bl FX_Inv + mov r3, #0x0 + ldr r1, _020B29E8 ; =stackPos_ + str r0, [sp, #0xc] + ldr r2, [r1, #0x0] + ldr r1, _020B29F0 ; =mtxStackFor2DHW_ + mov r0, #0x18 + mla r1, r2, r0, r1 + add r0, sp, #0x0 + mov r2, r1 + str r3, [sp, #0x10] + str r3, [sp, #0x14] + bl NNSi_G2dMtxConcat32 + ldr r0, _020B29F4 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B2978 + ldr r1, _020B29F8 ; =firstSRTransformedMtxIdx_ + ldr r0, _020B29FC ; =0x0000FFFE + ldrh r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + bne _020B297C +_020B2978: + mov r0, #0x0 +_020B297C: + cmp r0, #0x0 + ldreq r1, _020B29E8 ; =stackPos_ + ldreq r0, _020B29F8 ; =firstSRTransformedMtxIdx_ + ldreq r1, [r1, #0x0] + streqh r1, [r0, #0x0] + ldr r0, _020B29E8 ; =stackPos_ + ldr r1, _020B2A00 ; =mtxStateStack_ + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + add r12, r1, r0, lsr #0xd + ldrh r0, [r12, #0x4] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B29E0 + ; Jump table + b _020B29C4 ; case 0 + b _020B29E0 ; case 1 + b _020B29C4 ; case 2 + b _020B29C4 ; case 3 +_020B29C4: + ldr r0, _020B2A04 ; =groupID_ + mov r1, #0x1 + ldrh r3, [r0, #0x0] + add r2, r3, #0x1 + strh r2, [r0, #0x0] + strh r3, [r12, #0x2] + strh r1, [r12, #0x4] +_020B29E0: + add sp, sp, #0x1c + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B29E8: .word stackPos_ +_020B29EC: .word mtxStack_ +_020B29F0: .word mtxStackFor2DHW_ +_020B29F4: .word bDonotUseSRTransform +_020B29F8: .word firstSRTransformedMtxIdx_ +_020B29FC: .word 0x0000FFFE +_020B2A00: .word mtxStateStack_ +_020B2A04: .word groupID_ + arm_func_end NNS_G2dScale + + arm_func_start NNS_G2dTranslate +NNS_G2dTranslate: ; 0x020B2A08 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x1c + ldr r3, _020B2AEC ; =bDonotUseSRTransform + mov r4, r2 + ldr r2, [r3, #0x0] + cmp r2, #0x0 + beq _020B2A6C + ldr r2, _020B2AF0 ; =stackPos_ + mov r3, #0x18 + ldr r2, [r2, #0x0] + ldr lr, _020B2AF4 ; =mtxStack_ + 0x10 + mul r5, r2, r3 + ldr r3, [lr, r5] + ldr ip, _020B2AF8 ; =mtxStack_ + 0x14 + add r0, r3, r0 + str r0, [lr, r5] + ldr r0, [r12, r5] + ldr r3, _020B2AFC ; =fxZStack_ + add r0, r0, r1 + str r0, [r12, r5] + ldr r0, [r3, r2, lsl #0x2] + add sp, sp, #0x1c + add r0, r0, r4 + str r0, [r3, r2, lsl #0x2] + ldmia sp!, {r4-r5,pc} +_020B2A6C: + ldr r2, _020B2AF0 ; =stackPos_ + mov lr, #0x1000 + ldr r12, [r2, #0x0] + ldr r3, _020B2B00 ; =mtxStack_ + mov r2, #0x18 + str r1, [sp, #0x14] + mla r1, r12, r2, r3 + mov r3, #0x0 + str r0, [sp, #0x10] + add r0, sp, #0x0 + mov r2, r1 + str lr, [sp, #0x0] + str r3, [sp, #0x4] + str r3, [sp, #0x8] + str lr, [sp, #0xc] + bl NNSi_G2dMtxConcat32 + ldr r0, _020B2AF0 ; =stackPos_ + ldr r1, _020B2B04 ; =mtxStackFor2DHW_ + ldr r2, [r0, #0x0] + mov r0, #0x18 + mla r1, r2, r0, r1 + add r0, sp, #0x0 + mov r2, r1 + bl NNSi_G2dMtxConcat32 + ldr r0, _020B2AF0 ; =stackPos_ + ldr r2, _020B2AFC ; =fxZStack_ + ldr r1, [r0, #0x0] + ldr r0, [r2, r1, lsl #0x2] + add r0, r0, r4 + str r0, [r2, r1, lsl #0x2] + add sp, sp, #0x1c + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B2AEC: .word bDonotUseSRTransform +_020B2AF0: .word stackPos_ +_020B2AF4: .word mtxStack_ + 0x10 +_020B2AF8: .word mtxStack_ + 0x14 +_020B2AFC: .word fxZStack_ +_020B2B00: .word mtxStack_ +_020B2B04: .word mtxStackFor2DHW_ + arm_func_end NNS_G2dTranslate + + arm_func_start NNS_G2dPopMtx +NNS_G2dPopMtx: ; 0x020B2B08 + ldr r0, _020B2B4C ; =stackPos_ + ldr r0, [r0, #0x0] + cmp r0, #0x0 + movle r0, #0x1 + movgt r0, #0x0 + cmp r0, #0x0 + bxne lr + ldr r1, _020B2B4C ; =stackPos_ + ldr r0, _020B2B50 ; =firstSRTransformedMtxIdx_ + ldr r3, [r1, #0x0] + ldrh r2, [r0, #0x0] + sub r3, r3, #0x1 + str r3, [r1, #0x0] + cmp r2, r3 + ldrgt r1, _020B2B54 ; =0x0000FFFE + strgth r1, [r0, #0x0] + bx lr + .balign 4 +_020B2B4C: .word stackPos_ +_020B2B50: .word firstSRTransformedMtxIdx_ +_020B2B54: .word 0x0000FFFE + arm_func_end NNS_G2dPopMtx + + arm_func_start NNS_G2dPushMtx +NNS_G2dPushMtx: ; 0x020B2B58 + stmdb sp!, {r4-r10,lr} + ldr r0, _020B2D74 ; =pCurrentInstance_ + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x7c] + ands r0, r0, #0x1 + bne _020B2CA4 + ldr r0, _020B2D78 ; =stackPos_ + ldr r1, [r0, #0x0] + mov r0, r1, lsl #0x10 + add r5, r1, #0x1 + cmp r5, #0x20 + mov r4, r0, lsr #0x10 + movlt r0, #0x1 + movge r0, #0x0 + cmp r0, #0x0 + beq _020B2C44 + ldr r0, _020B2D7C ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020B2BE4 + ldr r1, _020B2D78 ; =stackPos_ + mov r0, #0x18 + ldr r3, [r1, #0x0] + ldr r1, _020B2D80 ; =fxZStack_ + mul r8, r3, r0 + ldr r6, _020B2D84 ; =mtxStack_ + 0x10 + mul r7, r5, r0 + ldr r2, [r6, r8] + ldr r0, [r1, r3, lsl #0x2] + ldr r3, _020B2D88 ; =mtxStack_ + 0x14 + str r2, [r6, r7] + ldr r2, [r3, r8] + str r0, [r1, r5, lsl #0x2] + str r2, [r3, r7] + b _020B2C3C +_020B2BE4: + ldr r1, _020B2D78 ; =stackPos_ + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr r7, _020B2D80 ; =fxZStack_ + mul lr, r2, r0 + ldr r1, _020B2D8C ; =mtxStack_ + mul r12, r5, r0 + ldr r8, _020B2D90 ; =mtxStackFor2DHW_ + add r10, r1, lr + ldr r6, [r7, r2, lsl #0x2] + add r9, r1, r12 + ldmia r10!, {r0-r3} + stmia r9!, {r0-r3} + ldmia r10, {r0-r1} + str r6, [r7, r5, lsl #0x2] + add r7, r8, lr + stmia r9, {r0-r1} + add r6, r8, r12 + ldmia r7!, {r0-r3} + stmia r6!, {r0-r3} + ldmia r7, {r0-r1} + stmia r6, {r0-r1} +_020B2C3C: + ldr r0, _020B2D78 ; =stackPos_ + str r5, [r0, #0x0] +_020B2C44: + ldr r0, _020B2D78 ; =stackPos_ + ldr r2, _020B2D94 ; =mtxStateStack_ + ldr r0, [r0, #0x0] + mov r5, r4, lsl #0x3 + mov r0, r0, lsl #0x10 + mov r3, r0, lsr #0x10 + add r4, r2, r4, lsl #0x3 + mov r6, r3, lsl #0x3 + ldrh r1, [r2, r5] + ldrh r0, [r4, #0x2] + add r3, r2, r3, lsl #0x3 + strh r1, [r2, r6] + strh r0, [r3, #0x2] + ldrh r2, [r4, #0x4] + ldrh r0, [r4, #0x6] + ldr r1, _020B2D98 ; =mtxStateStack_ + 0x4 + strh r2, [r3, #0x4] + strh r0, [r3, #0x6] + ldrh r0, [r1, r5] + cmp r0, #0x1 + moveq r0, #0x2 + streqh r0, [r1, r6] + strneh r0, [r1, r6] + ldmia sp!, {r4-r10,pc} +_020B2CA4: + ldr r0, _020B2D78 ; =stackPos_ + ldr r0, [r0, #0x0] + add r4, r0, #0x1 + cmp r4, #0x20 + movlt r0, #0x1 + movge r0, #0x0 + cmp r0, #0x0 + ldmeqia sp!, {r4-r10,pc} + ldr r0, _020B2D7C ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020B2D10 + ldr r1, _020B2D78 ; =stackPos_ + mov r0, #0x18 + ldr r3, [r1, #0x0] + ldr r1, _020B2D80 ; =fxZStack_ + mul r7, r3, r0 + ldr r5, _020B2D84 ; =mtxStack_ + 0x10 + mul r6, r4, r0 + ldr r2, [r5, r7] + ldr r0, [r1, r3, lsl #0x2] + ldr r3, _020B2D88 ; =mtxStack_ + 0x14 + str r2, [r5, r6] + ldr r2, [r3, r7] + str r0, [r1, r4, lsl #0x2] + str r2, [r3, r6] + b _020B2D68 +_020B2D10: + ldr r1, _020B2D78 ; =stackPos_ + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr ip, _020B2D80 ; =fxZStack_ + mul r9, r2, r0 + ldr r1, _020B2D8C ; =mtxStack_ + mul r8, r4, r0 + ldr lr, _020B2D90 ; =mtxStackFor2DHW_ + add r6, r1, r9 + ldr r5, [r12, r2, lsl #0x2] + add r7, r1, r8 + ldmia r6!, {r0-r3} + stmia r7!, {r0-r3} + ldmia r6, {r0-r1} + add r6, lr, r9 + stmia r7, {r0-r1} + add lr, lr, r8 + ldmia r6!, {r0-r3} + stmia lr!, {r0-r3} + ldmia r6, {r0-r1} + stmia lr, {r0-r1} + str r5, [r12, r4, lsl #0x2] +_020B2D68: + ldr r0, _020B2D78 ; =stackPos_ + str r4, [r0, #0x0] + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B2D74: .word pCurrentInstance_ +_020B2D78: .word stackPos_ +_020B2D7C: .word bDonotUseSRTransform +_020B2D80: .word fxZStack_ +_020B2D84: .word mtxStack_ + 0x10 +_020B2D88: .word mtxStack_ + 0x14 +_020B2D8C: .word mtxStack_ +_020B2D90: .word mtxStackFor2DHW_ +_020B2D94: .word mtxStateStack_ +_020B2D98: .word mtxStateStack_ + 0x4 + arm_func_end NNS_G2dPushMtx + + arm_func_start NNS_G2dDrawMultiCellAnimation +NNS_G2dDrawMultiCellAnimation: ; 0x020B2D9C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldrh r0, [r4, #0x56] + cmp r0, #0x0 + bne _020B2DBC + add r0, r4, #0x30 + bl NNS_G2dDrawMultiCell + ldmia sp!, {r4-r6,pc} +_020B2DBC: + bl NNS_G2dPushMtx + ldrh r0, [r4, #0x56] + ands r0, r0, #0x8 + beq _020B2E0C + ldr r0, _020B2E70 ; =pCurrentInstance_ + ldrsh r6, [r4, #0x52] + ldr r0, [r0, #0x0] + ldrsh r5, [r4, #0x50] + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + ldr r0, _020B2E70 ; =pCurrentInstance_ + rsbne r5, r5, #0x0 + ldr r0, [r0, #0x0] + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + rsbne r6, r6, #0x0 + mov r0, r5, lsl #0xc + mov r1, r6, lsl #0xc + mov r2, #0x0 + bl NNS_G2dTranslate +_020B2E0C: + ldrh r0, [r4, #0x56] + ands r0, r0, #0x4 + beq _020B2E40 + ldrh r0, [r4, #0x54] + ldr r2, _020B2E74 ; =FX_SinCosTable_ + mov r0, r0, asr #0x4 + mov r1, r0, lsl #0x1 + add r0, r1, #0x1 + mov r3, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + ldrsh r0, [r2, r3] + ldrsh r1, [r2, r1] + bl NNS_G2dRotZ +_020B2E40: + ldrh r0, [r4, #0x56] + ands r0, r0, #0x2 + beq _020B2E5C + ldr r0, [r4, #0x48] + ldr r1, [r4, #0x4c] + mov r2, #0x1000 + bl NNS_G2dScale +_020B2E5C: + add r0, r4, #0x30 + bl NNS_G2dDrawMultiCell + mov r0, #0x1 + bl NNS_G2dPopMtx + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B2E70: .word pCurrentInstance_ +_020B2E74: .word FX_SinCosTable_ + arm_func_end NNS_G2dDrawMultiCellAnimation + + arm_func_start NNS_G2dDrawMultiCell +NNS_G2dDrawMultiCell: ; 0x020B2E78 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r5, r0 + ldr r0, [r5, #0x8] + cmp r0, #0x1 + bne _020B309C + ldr r0, [r5, #0x0] + mov r2, #0x0 + ldrh r0, [r0, #0x2] + cmp r0, #0x0 + bls _020B2ED0 + ldr r3, _020B3174 ; =mcRenderState_ + mov r4, r2 +_020B2EAC: + add r0, r3, r2, lsl #0x2 + str r4, [r0, #0x4] + ldr r0, [r5, #0x0] + add r2, r2, #0x1 + ldrh r1, [r0, #0x2] + mov r0, r2, lsl #0x10 + mov r2, r0, lsr #0x10 + cmp r2, r1 + blo _020B2EAC +_020B2ED0: + ldr r0, _020B3178 ; =pCurrentInstance_ + mov r6, #0x1 + ldr r1, [r0, #0x0] + ldr r0, _020B3174 ; =mcRenderState_ + str r6, [r0, #0x404] + ldr r0, [r1, #0x80] + cmp r0, #0x0 + beq _020B2FD8 + bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep + str r0, [sp, #0x0] + mov r0, r6 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + ldr r0, _020B3178 ; =pCurrentInstance_ + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep + ldr r2, [r5, #0x0] + mov r7, #0x0 + ldrh r0, [r2, #0x0] + cmp r0, #0x0 + bls _020B2FC0 + mov r11, r7 +_020B2F28: + ldr r0, [r2, #0x4] + ldr r9, [r5, #0xc] + add r10, r0, r7, lsl #0x3 + ldrh r0, [r10, #0x6] + and r0, r0, #0xff00 + mov r0, r0, lsl #0x8 + mov r8, r0, lsr #0x10 + ldr r0, _020B3174 ; =mcRenderState_ + strh r8, [r0, #0x0] + bl NNS_G2dPushMtx + ldr r0, _020B3178 ; =pCurrentInstance_ + ldrsh r4, [r10, #0x4] + ldr r0, [r0, #0x0] + ldrsh r10, [r10, #0x2] + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + ldr r0, _020B3178 ; =pCurrentInstance_ + rsbne r10, r10, #0x0 + ldr r0, [r0, #0x0] + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + rsbne r4, r4, #0x0 + mov r2, r11 + mov r0, r10, lsl #0xc + mov r1, r4, lsl #0xc + bl NNS_G2dTranslate + mov r0, #0x58 + mla r0, r8, r0, r9 + bl DrawCellAnimationImpl_ + mov r0, r6 + bl NNS_G2dPopMtx + ldr r2, [r5, #0x0] + add r0, r7, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r2, #0x0] + mov r7, r0, lsr #0x10 + cmp r7, r1 + blo _020B2F28 +_020B2FC0: + mov r0, #0x0 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + ldr r0, [sp, #0x0] + bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep + bl NNSi_G2dResetOamSoftEmuAutoZOffset + b _020B3088 +_020B2FD8: + ldr r2, [r5, #0x0] + mov r7, #0x0 + ldrh r0, [r2, #0x0] + cmp r0, #0x0 + bls _020B3088 + str r7, [sp, #0x4] + mov r11, #0x58 +_020B2FF4: + ldr r0, [r2, #0x4] + ldr r9, [r5, #0xc] + add r10, r0, r7, lsl #0x3 + ldrh r0, [r10, #0x6] + and r0, r0, #0xff00 + mov r0, r0, lsl #0x8 + mov r8, r0, lsr #0x10 + ldr r0, _020B3174 ; =mcRenderState_ + strh r8, [r0, #0x0] + bl NNS_G2dPushMtx + ldr r0, _020B3178 ; =pCurrentInstance_ + ldrsh r4, [r10, #0x4] + ldr r0, [r0, #0x0] + ldrsh r10, [r10, #0x2] + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + ldr r0, _020B3178 ; =pCurrentInstance_ + rsbne r10, r10, #0x0 + ldr r0, [r0, #0x0] + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + rsbne r4, r4, #0x0 + ldr r2, [sp, #0x4] + mov r0, r10, lsl #0xc + mov r1, r4, lsl #0xc + bl NNS_G2dTranslate + mla r0, r8, r11, r9 + bl DrawCellAnimationImpl_ + mov r0, r6 + bl NNS_G2dPopMtx + ldr r2, [r5, #0x0] + add r0, r7, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r2, #0x0] + mov r7, r0, lsr #0x10 + cmp r7, r1 + blo _020B2FF4 +_020B3088: + ldr r0, _020B3174 ; =mcRenderState_ + mov r1, #0x0 + str r1, [r0, #0x404] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020B309C: + ldr r0, _020B3178 ; =pCurrentInstance_ + ldr r7, [r5, #0xc] + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + cmp r0, #0x0 + beq _020B312C + bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep + mov r6, r0 + mov r0, #0x1 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + ldr r0, _020B3178 ; =pCurrentInstance_ + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep + ldr r0, [r5, #0x0] + mov r4, #0x0 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + bls _020B3110 + mov r8, #0x28 +_020B30EC: + mla r0, r4, r8, r7 + bl DrawNode_ + ldr r1, [r5, #0x0] + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r4, r0, lsr #0x10 + cmp r4, r1 + blo _020B30EC +_020B3110: + mov r0, #0x0 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + mov r0, r6 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep + bl NNSi_G2dResetOamSoftEmuAutoZOffset + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020B312C: + ldr r0, [r5, #0x0] + mov r4, #0x0 + ldrh r0, [r0, #0x0] + cmp r0, #0x0 + addls sp, sp, #0xc + ldmlsia sp!, {r4-r11,pc} + mov r6, #0x28 +_020B3148: + mla r0, r4, r6, r7 + bl DrawNode_ + ldr r1, [r5, #0x0] + add r0, r4, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r1, #0x0] + mov r4, r0, lsr #0x10 + cmp r4, r1 + blo _020B3148 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B3174: .word mcRenderState_ +_020B3178: .word pCurrentInstance_ + arm_func_end NNS_G2dDrawMultiCell + + arm_func_start NNS_G2dDrawCellAnimation +NNS_G2dDrawCellAnimation: ; 0x020B317C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020B31EC ; =pCurrentInstance_ + mov r5, r0 + ldr r1, [r1, #0x0] + ldr r1, [r1, #0x80] + cmp r1, #0x0 + beq _020B31E0 + bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep + mov r4, r0 + mov r0, #0x1 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + ldr r0, _020B31EC ; =pCurrentInstance_ + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x80] + bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep + mov r0, r5 + bl DrawCellAnimationImpl_ + mov r0, #0x0 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag + mov r0, r4 + bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep + bl NNSi_G2dResetOamSoftEmuAutoZOffset + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B31E0: + bl DrawCellAnimationImpl_ + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B31EC: .word pCurrentInstance_ + arm_func_end NNS_G2dDrawCellAnimation + + arm_func_start NNS_G2dEndRendering +NNS_G2dEndRendering: ; 0x020B31F0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020B3260 ; =0x04000448 + mov r2, #0x1 + ldr r0, _020B3264 ; =pCurrentInstance_ + str r2, [r1, #0x0] + ldr r2, [r0, #0x0] + ldr r3, [r2, #0x7c] + cmp r3, #0x0 + beq _020B324C + ands r0, r3, #0x1 + ldrne r0, _020B3268 ; =bDonotUseSRTransform + movne r1, #0x0 + strne r1, [r0, #0x0] + ands r0, r3, #0x2 + beq _020B323C + mov r0, #0x0 + str r0, [r2, #0x74] + bl NNS_G2dRndCoreEndRendering +_020B323C: + ldr r0, _020B3264 ; =pCurrentInstance_ + mov r1, #0x0 + ldr r0, [r0, #0x0] + str r1, [r0, #0x7c] +_020B324C: + ldr r0, _020B3264 ; =pCurrentInstance_ + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B3260: .word 0x04000448 +_020B3264: .word pCurrentInstance_ +_020B3268: .word bDonotUseSRTransform + arm_func_end NNS_G2dEndRendering + + arm_func_start NNS_G2dBeginRendering +NNS_G2dBeginRendering: ; 0x020B326C + stmdb sp!, {r4-r8,lr} + ldr r5, _020B330C ; =currentMtxCachePos_ + ldr r3, _020B3310 ; =pCurrentInstance_ + ldrh r6, [r5, #0x0] + ldr r2, _020B3314 ; =stackPos_ + mov r4, #0x0 + ldr r7, _020B3318 ; =0x0000FFFE + ldr r1, _020B331C ; =firstSRTransformedMtxIdx_ + str r0, [r3, #0x0] + str r4, [r2, #0x0] + strh r7, [r1, #0x0] + cmp r6, #0x0 + ble _020B32D0 + ldr r8, _020B3320 ; =mtxCacheBuffer_ + mvn r7, #0x0 + mov r6, #0x10 +_020B32AC: + mov r0, r7 + mov r2, r6 + add r1, r8, #0x10 + bl MIi_CpuClearFast + ldrh r0, [r5, #0x0] + add r4, r4, #0x1 + add r8, r8, #0x20 + cmp r4, r0 + blt _020B32AC +_020B32D0: + ldr r4, _020B330C ; =currentMtxCachePos_ + mov r0, #0x0 + ldr r3, _020B3324 ; =groupID_ + ldr r1, _020B3328 ; =mtxStateStack_ + mov r2, #0x100 + strh r0, [r4, #0x0] + strh r0, [r3, #0x0] + bl MIi_CpuClearFast + ldr r1, _020B332C ; =0x04000444 + mov r2, #0x0 + ldr r0, _020B3330 ; =0x04000454 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + bl NNSi_G2dIdentity + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B330C: .word currentMtxCachePos_ +_020B3310: .word pCurrentInstance_ +_020B3314: .word stackPos_ +_020B3318: .word 0x0000FFFE +_020B331C: .word firstSRTransformedMtxIdx_ +_020B3320: .word mtxCacheBuffer_ +_020B3324: .word groupID_ +_020B3328: .word mtxStateStack_ +_020B332C: .word 0x04000444 +_020B3330: .word 0x04000454 + arm_func_end NNS_G2dBeginRendering + + arm_func_start NNS_G2dInitRenderSurface +NNS_G2dInitRenderSurface: ; 0x020B3334 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, r4 + mov r0, #0x0 + mov r2, #0x48 + bl MIi_CpuClear16 + mov r0, #0x1 + str r0, [r4, #0x10] + mov r0, #0x3 + ldr r1, _020B3380 ; =RndCoreCBFuncBeforeCell_ + str r0, [r4, #0x14] + ldr r0, _020B3384 ; =RndCoreCBFuncAfterCell_ + str r1, [r4, #0x18] + ldr r1, _020B3388 ; =RndCoreCBFuncBeforeOBJ_ + str r0, [r4, #0x1c] + ldr r0, _020B338C ; =RndCoreCBFuncAfterOBJ_ + str r1, [r4, #0x20] + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + .balign 4 +_020B3380: .word RndCoreCBFuncBeforeCell_ +_020B3384: .word RndCoreCBFuncAfterCell_ +_020B3388: .word RndCoreCBFuncBeforeOBJ_ +_020B338C: .word RndCoreCBFuncAfterOBJ_ + arm_func_end NNS_G2dInitRenderSurface + + arm_func_start NNS_G2dAddRendererTargetSurface +NNS_G2dAddRendererTargetSurface: ; 0x020B3390 + ldr r2, [r0, #0x70] + str r2, [r1, #0x30] + str r1, [r0, #0x70] + bx lr + arm_func_end NNS_G2dAddRendererTargetSurface + + arm_func_start NNS_G2dInitRenderer +NNS_G2dInitRenderer: ; 0x020B33A0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r4, r0 + bl NNS_G2dInitRndCore + mov r7, #0x0 + str r7, [r4, #0x70] + str r7, [r4, #0x74] + str r7, [r4, #0x78] + str r7, [r4, #0x7c] + str r7, [r4, #0x80] + str r7, [r4, #0x84] + strh r7, [r4, #0x88] + strh r7, [r4, #0x8a] + str r7, [r4, #0x8c] + str r7, [r4, #0x90] + ldr r1, _020B3454 ; =stackPos_ + strh r7, [r4, #0x94] + ldr r2, _020B3458 ; =0x0000FFFE + ldr r0, _020B345C ; =firstSRTransformedMtxIdx_ + ldr r6, _020B3460 ; =mtxCacheBuffer_ + str r7, [r1, #0x0] + strh r2, [r0, #0x0] + mvn r5, #0x0 + mov r4, #0x10 +_020B3400: + mov r0, r5 + mov r2, r4 + add r1, r6, #0x10 + bl MIi_CpuClearFast + add r7, r7, #0x1 + cmp r7, #0x20 + add r6, r6, #0x20 + blt _020B3400 + ldr ip, _020B3464 ; =currentMtxCachePos_ + mov r0, #0x0 + ldr r3, _020B3468 ; =groupID_ + ldr r1, _020B346C ; =mtxStateStack_ + mov r2, #0x100 + strh r0, [r12, #0x0] + strh r0, [r3, #0x0] + bl MIi_CpuClearFast + ldr r0, _020B3470 ; =bDonotUseSRTransform + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B3454: .word stackPos_ +_020B3458: .word 0x0000FFFE +_020B345C: .word firstSRTransformedMtxIdx_ +_020B3460: .word mtxCacheBuffer_ +_020B3464: .word currentMtxCachePos_ +_020B3468: .word groupID_ +_020B346C: .word mtxStateStack_ +_020B3470: .word bDonotUseSRTransform + arm_func_end NNS_G2dInitRenderer + + arm_func_start DrawNode_ +DrawNode_: ; 0x020B3474 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x8] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + ldr r4, [r5, #0x0] + bl NNS_G2dPushMtx + ldrh r0, [r5, #0x1e] + ands r0, r0, #0x8 + beq _020B34E4 + ldr r0, _020B354C ; =pCurrentInstance_ + ldrsh r7, [r5, #0x1a] + ldr r0, [r0, #0x0] + ldrsh r6, [r5, #0x18] + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + ldr r0, _020B354C ; =pCurrentInstance_ + rsbne r6, r6, #0x0 + ldr r0, [r0, #0x0] + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + rsbne r7, r7, #0x0 + mov r0, r6, lsl #0xc + mov r1, r7, lsl #0xc + mov r2, #0x0 + bl NNS_G2dTranslate +_020B34E4: + ldrh r0, [r5, #0x1e] + ands r0, r0, #0x4 + beq _020B3518 + ldrh r0, [r5, #0x1c] + ldr r2, _020B3550 ; =FX_SinCosTable_ + mov r0, r0, asr #0x4 + mov r1, r0, lsl #0x1 + add r0, r1, #0x1 + mov r3, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + ldrsh r0, [r2, r3] + ldrsh r1, [r2, r1] + bl NNS_G2dRotZ +_020B3518: + ldrh r0, [r5, #0x1e] + ands r0, r0, #0x2 + beq _020B3534 + ldr r0, [r5, #0x10] + ldr r1, [r5, #0x14] + mov r2, #0x1000 + bl NNS_G2dScale +_020B3534: + mov r0, r4 + bl DrawCellAnimationImpl_ + mov r0, #0x1 + bl NNS_G2dPopMtx + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B354C: .word pCurrentInstance_ +_020B3550: .word FX_SinCosTable_ + arm_func_end DrawNode_ + + arm_func_start DrawCellAnimationImpl_ +DrawCellAnimationImpl_: ; 0x020B3554 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrh r0, [r5, #0x4a] + ldr r4, [r5, #0x2c] + cmp r0, #0x0 + bne _020B35C0 + ldr r2, [r5, #0x34] + mvn r0, #0x0 + cmp r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B35B0 + ldr r1, _020B36B4 ; =currenVramTransferHandle_ + mov r0, r4 + str r2, [r1, #0x0] + bl DrawCellImpl_ + ldr r0, _020B36B4 ; =currenVramTransferHandle_ + mvn r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B35B0: + mov r0, r4 + bl DrawCellImpl_ + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B35C0: + bl NNS_G2dPushMtx + ldrh r0, [r5, #0x4a] + ands r0, r0, #0x8 + beq _020B3610 + ldr r0, _020B36B8 ; =pCurrentInstance_ + ldrsh r7, [r5, #0x46] + ldr r0, [r0, #0x0] + ldrsh r6, [r5, #0x44] + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + ldr r0, _020B36B8 ; =pCurrentInstance_ + rsbne r6, r6, #0x0 + ldr r0, [r0, #0x0] + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + rsbne r7, r7, #0x0 + mov r0, r6, lsl #0xc + mov r1, r7, lsl #0xc + mov r2, #0x0 + bl NNS_G2dTranslate +_020B3610: + ldrh r0, [r5, #0x4a] + ands r0, r0, #0x4 + beq _020B3644 + ldrh r0, [r5, #0x48] + ldr r2, _020B36BC ; =FX_SinCosTable_ + mov r0, r0, asr #0x4 + mov r1, r0, lsl #0x1 + add r0, r1, #0x1 + mov r3, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + ldrsh r0, [r2, r3] + ldrsh r1, [r2, r1] + bl NNS_G2dRotZ +_020B3644: + ldrh r0, [r5, #0x4a] + ands r0, r0, #0x2 + beq _020B3660 + ldr r0, [r5, #0x3c] + ldr r1, [r5, #0x40] + mov r2, #0x1000 + bl NNS_G2dScale +_020B3660: + ldr r2, [r5, #0x34] + mvn r0, #0x0 + cmp r2, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B369C + ldr r1, _020B36B4 ; =currenVramTransferHandle_ + mov r0, r4 + str r2, [r1, #0x0] + bl DrawCellImpl_ + ldr r0, _020B36B4 ; =currenVramTransferHandle_ + mvn r1, #0x0 + str r1, [r0, #0x0] + b _020B36A4 +_020B369C: + mov r0, r4 + bl DrawCellImpl_ +_020B36A4: + mov r0, #0x1 + bl NNS_G2dPopMtx + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B36B4: .word currenVramTransferHandle_ +_020B36B8: .word pCurrentInstance_ +_020B36BC: .word FX_SinCosTable_ + arm_func_end DrawCellAnimationImpl_ + + arm_func_start DrawCellImpl_ +DrawCellImpl_: ; 0x020B36C0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r5, _020B3B54 ; =pCurrentInstance_ + mov r10, r0 + ldr r0, [r5, #0x0] + ldr r1, [r0, #0x7c] + str r0, [sp, #0x0] + ldr r9, [r0, #0x70] + ands r0, r1, #0x2 + beq _020B38EC + ldr r0, [r9, #0x14] + cmp r0, #0x0 + beq _020B3840 + ldr r0, _020B3B58 ; =bDonotUseSRTransform + mov r1, #0x0 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B3720 + ldr r2, _020B3B5C ; =firstSRTransformedMtxIdx_ + ldr r0, _020B3B60 ; =0x0000FFFE + ldrh r2, [r2, #0x0] + cmp r2, r0 + movne r0, #0x1 + bne _020B3724 +_020B3720: + mov r0, #0x0 +_020B3724: + cmp r0, #0x0 + beq _020B37AC + ldr r0, _020B3B64 ; =mcRenderState_ + ldr r1, [r0, #0x404] + cmp r1, #0x0 + beq _020B3788 + ldrh r1, [r0, #0x0] + ldr r0, _020B3B68 ; =mcRenderState_ + 0x4 + ldr r1, [r0, r1, lsl #0x2] + cmp r1, #0x0 + bne _020B37AC + bl NNSi_G2dMCMStoreCurrentMtxToMtxCache + ldr r0, _020B3B6C ; =stackPos_ + ldr r2, _020B3B70 ; =mtxStateStack_ + ldr r0, [r0, #0x0] + ldr r1, _020B3B64 ; =mcRenderState_ + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0xd + ldrh r3, [r2, r0] + ldr r4, _020B3B74 ; =mtxCacheBuffer_ + ldrh r2, [r1, #0x0] + ldr r0, _020B3B68 ; =mcRenderState_ + 0x4 + add r1, r4, r3, lsl #0x5 + str r1, [r0, r2, lsl #0x2] + b _020B37AC +_020B3788: + bl NNSi_G2dMCMStoreCurrentMtxToMtxCache + ldr r0, _020B3B6C ; =stackPos_ + ldr r1, _020B3B70 ; =mtxStateStack_ + ldr r0, [r0, #0x0] + ldr r2, _020B3B74 ; =mtxCacheBuffer_ + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0xd + ldrh r0, [r1, r0] + add r1, r2, r0, lsl #0x5 +_020B37AC: + ldr r0, _020B3B58 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3B6C ; =stackPos_ + ldreq r3, _020B3B78 ; =mtxStack_ + ldreq r2, [r0, #0x0] + moveq r0, #0x18 + mlaeq r0, r2, r0, r3 + beq _020B37FC + ldr r2, _020B3B6C ; =stackPos_ + mov r0, #0x18 + ldr r2, [r2, #0x0] + ldr r3, _020B3B7C ; =mtxStack_ + 0x10 + mul r4, r2, r0 + ldr r2, _020B3B80 ; =mtxStack_ + 0x14 + ldr r3, [r3, r4] + ldr r0, _020B3B84 ; =mtxI_ + ldr r2, [r2, r4] + str r3, [r0, #0x10] + str r2, [r0, #0x14] +_020B37FC: + bl NNS_G2dSetRndCoreCurrentMtx2D + ldr r1, _020B3B88 ; =currenVramTransferHandle_ + mvn r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B3830 + mov r0, r10 + bl NNS_G2dRndCoreDrawCellVramTransfer + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B3830: + mov r0, r10 + bl NNS_G2dRndCoreDrawCell + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B3840: + ldr r0, _020B3B6C ; =stackPos_ + ldr r1, _020B3B8C ; =fxZStack_ + ldr r2, [r0, #0x0] + ldr r0, [sp, #0x0] + ldr r1, [r1, r2, lsl #0x2] + bl NNS_G2dSetRndCore3DSoftSpriteZvalue + ldr r0, _020B3B58 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3B6C ; =stackPos_ + ldreq r2, _020B3B78 ; =mtxStack_ + ldreq r1, [r0, #0x0] + moveq r0, #0x18 + mlaeq r0, r1, r0, r2 + beq _020B38A8 + ldr r1, _020B3B6C ; =stackPos_ + mov r0, #0x18 + ldr r1, [r1, #0x0] + ldr r2, _020B3B7C ; =mtxStack_ + 0x10 + mul r3, r1, r0 + ldr r1, _020B3B80 ; =mtxStack_ + 0x14 + ldr r2, [r2, r3] + ldr r0, _020B3B84 ; =mtxI_ + ldr r1, [r1, r3] + str r2, [r0, #0x10] + str r1, [r0, #0x14] +_020B38A8: + bl NNS_G2dSetRndCoreCurrentMtx3D + ldr r1, _020B3B88 ; =currenVramTransferHandle_ + mvn r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, r0 + movne r0, #0x1 + moveq r0, #0x0 + cmp r0, #0x0 + beq _020B38DC + mov r0, r10 + bl NNS_G2dRndCoreDrawCellVramTransfer + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B38DC: + mov r0, r10 + bl NNS_G2dRndCoreDrawCell + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020B38EC: + cmp r9, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r11,pc} + ldr r4, _020B3B6C ; =stackPos_ + ldr fp, _020B3B78 ; =mtxStack_ + mov r7, #0x0 + mov r6, #0x1 +_020B3908: + ldr r0, [r9, #0x10] + cmp r0, #0x0 + beq _020B3B40 + ldr r0, [r9, #0x14] + cmp r0, #0x0 + beq _020B3A8C + ldr r8, [r5, #0x0] + mov r1, r9 + str r9, [r8, #0x74] + mov r0, r8 + bl NNS_G2dSetRndCoreSurface + ldr r1, [r9, #0x28] + ldr r2, [r9, #0x2c] + mov r0, r8 + bl NNS_G2dSetRndCoreOamRegisterFunc + mov r0, r8 + bl NNS_G2dRndCoreBeginRendering + ldr r0, _020B3B58 ; =bDonotUseSRTransform + mov r1, r7 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + bne _020B3978 + ldr r0, _020B3B5C ; =firstSRTransformedMtxIdx_ + ldrh r2, [r0, #0x0] + ldr r0, _020B3B60 ; =0x0000FFFE + cmp r2, r0 + movne r0, r6 + bne _020B397C +_020B3978: + mov r0, r7 +_020B397C: + cmp r0, #0x0 + beq _020B3A04 + ldr r0, _020B3B64 ; =mcRenderState_ + ldr r0, [r0, #0x404] + cmp r0, #0x0 + beq _020B39E4 + ldr r0, _020B3B64 ; =mcRenderState_ + ldrh r1, [r0, #0x0] + add r0, r0, r1, lsl #0x2 + ldr r1, [r0, #0x4] + cmp r1, #0x0 + bne _020B3A04 + bl NNSi_G2dMCMStoreCurrentMtxToMtxCache + ldr r0, _020B3B64 ; =mcRenderState_ + ldr r2, [r4, #0x0] + ldrh r1, [r0, #0x0] + mov r0, r2, lsl #0x10 + mov r2, r0, lsr #0xd + ldr r0, _020B3B70 ; =mtxStateStack_ + ldrh r3, [r0, r2] + ldr r0, _020B3B64 ; =mcRenderState_ + add r2, r0, r1, lsl #0x2 + ldr r0, _020B3B74 ; =mtxCacheBuffer_ + add r1, r0, r3, lsl #0x5 + str r1, [r2, #0x4] + b _020B3A04 +_020B39E4: + bl NNSi_G2dMCMStoreCurrentMtxToMtxCache + ldr r0, [r4, #0x0] + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0xd + ldr r0, _020B3B70 ; =mtxStateStack_ + ldrh r1, [r0, r1] + ldr r0, _020B3B74 ; =mtxCacheBuffer_ + add r1, r0, r1, lsl #0x5 +_020B3A04: + ldr r0, _020B3B58 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r2, [r4, #0x0] + moveq r0, #0x18 + mlaeq r0, r2, r0, r11 + beq _020B3A44 + ldr r2, [r4, #0x0] + mov r0, #0x18 + mla r8, r2, r0, r11 + ldr r0, _020B3B84 ; =mtxI_ + ldr r3, [r8, #0x10] + mov r2, r0 + str r3, [r2, #0x10] + ldr r3, [r8, #0x14] + str r3, [r2, #0x14] +_020B3A44: + bl NNS_G2dSetRndCoreCurrentMtx2D + ldr r0, _020B3B88 ; =currenVramTransferHandle_ + ldr r1, [r0, #0x0] + mvn r0, #0x0 + cmp r1, r0 + movne r0, r6 + moveq r0, r7 + cmp r0, #0x0 + beq _020B3A74 + mov r0, r10 + bl NNS_G2dRndCoreDrawCellVramTransfer + b _020B3A7C +_020B3A74: + mov r0, r10 + bl NNS_G2dRndCoreDrawCell +_020B3A7C: + ldr r0, [r5, #0x0] + str r7, [r0, #0x74] + bl NNS_G2dRndCoreEndRendering + b _020B3B40 +_020B3A8C: + ldr r8, [r5, #0x0] + mov r1, r9 + mov r0, r8 + str r9, [r8, #0x74] + bl NNS_G2dSetRndCoreSurface + mov r0, r8 + bl NNS_G2dRndCoreBeginRendering + ldr r2, [r4, #0x0] + ldr r1, _020B3B8C ; =fxZStack_ + ldr r0, [sp, #0x0] + ldr r1, [r1, r2, lsl #0x2] + bl NNS_G2dSetRndCore3DSoftSpriteZvalue + ldr r0, _020B3B58 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r1, [r4, #0x0] + moveq r0, #0x18 + mlaeq r0, r1, r0, r11 + beq _020B3AFC + ldr r1, [r4, #0x0] + mov r0, #0x18 + mla r3, r1, r0, r11 + ldr r0, _020B3B84 ; =mtxI_ + ldr r2, [r3, #0x10] + mov r1, r0 + str r2, [r1, #0x10] + ldr r2, [r3, #0x14] + str r2, [r1, #0x14] +_020B3AFC: + bl NNS_G2dSetRndCoreCurrentMtx3D + ldr r0, _020B3B88 ; =currenVramTransferHandle_ + ldr r1, [r0, #0x0] + mvn r0, #0x0 + cmp r1, r0 + movne r0, r6 + moveq r0, r7 + cmp r0, #0x0 + beq _020B3B2C + mov r0, r10 + bl NNS_G2dRndCoreDrawCellVramTransfer + b _020B3B34 +_020B3B2C: + mov r0, r10 + bl NNS_G2dRndCoreDrawCell +_020B3B34: + ldr r0, [r5, #0x0] + str r7, [r0, #0x74] + bl NNS_G2dRndCoreEndRendering +_020B3B40: + ldr r9, [r9, #0x30] + cmp r9, #0x0 + bne _020B3908 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B3B54: .word pCurrentInstance_ +_020B3B58: .word bDonotUseSRTransform +_020B3B5C: .word firstSRTransformedMtxIdx_ +_020B3B60: .word 0x0000FFFE +_020B3B64: .word mcRenderState_ +_020B3B68: .word mcRenderState_ + 0x4 +_020B3B6C: .word stackPos_ +_020B3B70: .word mtxStateStack_ +_020B3B74: .word mtxCacheBuffer_ +_020B3B78: .word mtxStack_ +_020B3B7C: .word mtxStack_ + 0x10 +_020B3B80: .word mtxStack_ + 0x14 +_020B3B84: .word mtxI_ +_020B3B88: .word currenVramTransferHandle_ +_020B3B8C: .word fxZStack_ + arm_func_end DrawCellImpl_ + + arm_func_start RndCoreCBFuncAfterOBJ_ +RndCoreCBFuncAfterOBJ_: ; 0x020B3B90 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r0, _020B3C24 ; =pCurrentInstance_ + mov r12, r1 + ldr r0, [r0, #0x0] + mov r3, r2 + ldr r1, [r0, #0x74] + ldr r2, [r1, #0x44] + cmp r2, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,pc} + ldr r2, _020B3C28 ; =bDonotUseSRTransform + ldr r2, [r2, #0x0] + cmp r2, #0x0 + ldreq r2, _020B3C2C ; =stackPos_ + ldreq r4, _020B3C30 ; =mtxStack_ + ldreq lr, [r2, #0x0] + moveq r2, #0x18 + mlaeq r6, lr, r2, r4 + beq _020B3C0C + ldr lr, _020B3C2C ; =stackPos_ + mov r2, #0x18 + ldr lr, [lr, #0x0] + ldr r4, _020B3C34 ; =mtxStack_ + 0x10 + mul r5, lr, r2 + ldr r2, _020B3C38 ; =mtxStack_ + 0x14 + ldr r4, [r4, r5] + ldr r6, _020B3C3C ; =mtxI_ + ldr r2, [r2, r5] + str r4, [r6, #0x10] + str r2, [r6, #0x14] +_020B3C0C: + str r6, [sp, #0x0] + ldr lr, [r1, #0x44] + mov r2, r12 + blx lr + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B3C24: .word pCurrentInstance_ +_020B3C28: .word bDonotUseSRTransform +_020B3C2C: .word stackPos_ +_020B3C30: .word mtxStack_ +_020B3C34: .word mtxStack_ + 0x10 +_020B3C38: .word mtxStack_ + 0x14 +_020B3C3C: .word mtxI_ + arm_func_end RndCoreCBFuncAfterOBJ_ + + arm_func_start RndCoreCBFuncBeforeOBJ_ +RndCoreCBFuncBeforeOBJ_: ; 0x020B3C40 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + ldr r3, _020B3E2C ; =pCurrentInstance_ + add r4, r0, #0x38 + ldr r0, [r3, #0x0] + mov r6, r1 + mov r5, r2 + bl NNS_G2dGetRendererPaletteTbl + cmp r0, #0x0 + beq _020B3C90 + ldrh r1, [r4, #0x4] + and r1, r1, #0xf000 + mov r1, r1, lsl #0x4 + mov r1, r1, lsr #0x10 + bl NNS_G2dGetPaletteTableValue + ldr r1, [r4, #0x4] + and r0, r0, #0xf + bic r1, r1, #0xf000 + orr r0, r1, r0, lsl #0xc + str r0, [r4, #0x4] +_020B3C90: + ldr r0, _020B3E2C ; =pCurrentInstance_ + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + cmp r0, #0x0 + beq _020B3DA4 + ldr r0, [r1, #0x84] + ands r0, r0, #0x1 + beq _020B3CC8 + ldrh r0, [r1, #0x88] + ldr r1, [r4, #0x4] + bic r1, r1, #0xc00 + and r0, r0, #0x3 + orr r0, r1, r0, lsl #0xa + str r0, [r4, #0x4] +_020B3CC8: + ldr r0, _020B3E2C ; =pCurrentInstance_ + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x2 + beq _020B3CF4 + ldrh r0, [r1, #0x8a] + ldr r1, [r4, #0x4] + bic r1, r1, #0xf000 + and r0, r0, #0xf + orr r0, r1, r0, lsl #0xc + str r0, [r4, #0x4] +_020B3CF4: + ldr r0, _020B3E2C ; =pCurrentInstance_ + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x10 + beq _020B3D2C + ldr r2, [r4, #0x4] + ldrh r0, [r1, #0x94] + mov r1, r2, lsl #0x10 + bic r2, r2, #0xf000 + add r0, r0, r1, lsr #0x1c + and r0, r0, #0xf + and r0, r0, #0xf + orr r0, r2, r0, lsl #0xc + str r0, [r4, #0x4] +_020B3D2C: + ldr r0, _020B3E2C ; =pCurrentInstance_ + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x4 + beq _020B3D60 + ldr r0, [r1, #0x90] + cmp r0, #0x0 + ldrne r0, [r4, #0x0] + orrne r0, r0, #0x1000 + strne r0, [r4, #0x0] + ldreq r0, [r4, #0x0] + biceq r0, r0, #0x1000 + streq r0, [r4, #0x0] +_020B3D60: + ldr r0, _020B3E2C ; =pCurrentInstance_ + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x84] + ands r0, r0, #0x8 + beq _020B3DA4 + ldr r0, [r4, #0x0] + ldrh r2, [r4, #0x4] + ldr r1, [r1, #0x8c] + bic r0, r0, #0xc00 + orr r0, r0, r1, lsl #0xa + str r0, [r4, #0x0] + ldrh r0, [r4, #0x4] + and r1, r2, #0xf000 + mov r1, r1, asr #0xc + bic r0, r0, #0xf000 + orr r0, r0, r1, lsl #0xc + strh r0, [r4, #0x4] +_020B3DA4: + ldr r0, _020B3E2C ; =pCurrentInstance_ + ldr r0, [r0, #0x0] + ldr r1, [r0, #0x74] + ldr r2, [r1, #0x40] + cmp r2, #0x0 + addeq sp, sp, #0x8 + ldmeqia sp!, {r4-r6,pc} + ldr r2, _020B3E30 ; =bDonotUseSRTransform + ldr r2, [r2, #0x0] + cmp r2, #0x0 + ldreq r2, _020B3E34 ; =stackPos_ + ldreq r4, _020B3E38 ; =mtxStack_ + ldreq r3, [r2, #0x0] + moveq r2, #0x18 + mlaeq r4, r3, r2, r4 + beq _020B3E10 + ldr r3, _020B3E34 ; =stackPos_ + mov r2, #0x18 + ldr r4, [r3, #0x0] + ldr r3, _020B3E3C ; =mtxStack_ + 0x10 + mul r12, r4, r2 + ldr r2, _020B3E40 ; =mtxStack_ + 0x14 + ldr r3, [r3, r12] + ldr r4, _020B3E44 ; =mtxI_ + ldr r2, [r2, r12] + str r3, [r4, #0x10] + str r2, [r4, #0x14] +_020B3E10: + str r4, [sp, #0x0] + ldr r4, [r1, #0x40] + mov r2, r6 + mov r3, r5 + blx r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B3E2C: .word pCurrentInstance_ +_020B3E30: .word bDonotUseSRTransform +_020B3E34: .word stackPos_ +_020B3E38: .word mtxStack_ +_020B3E3C: .word mtxStack_ + 0x10 +_020B3E40: .word mtxStack_ + 0x14 +_020B3E44: .word mtxI_ + arm_func_end RndCoreCBFuncBeforeOBJ_ + + arm_func_start RndCoreCBFuncAfterCell_ +RndCoreCBFuncAfterCell_: ; 0x020B3E48 + stmdb sp!, {r4,lr} + ldr r0, _020B3EC4 ; =pCurrentInstance_ + mov r2, r1 + ldr r0, [r0, #0x0] + ldr r1, [r0, #0x74] + ldr r3, [r1, #0x3c] + cmp r3, #0x0 + ldmeqia sp!, {r4,pc} + ldr r3, _020B3EC8 ; =bDonotUseSRTransform + ldr r3, [r3, #0x0] + cmp r3, #0x0 + ldreq r3, _020B3ECC ; =stackPos_ + ldreq lr, _020B3ED0 ; =mtxStack_ + ldreq r12, [r3, #0x0] + moveq r3, #0x18 + mlaeq r3, r12, r3, lr + beq _020B3EB8 + ldr ip, _020B3ECC ; =stackPos_ + mov r3, #0x18 + ldr r12, [r12, #0x0] + ldr lr, _020B3ED4 ; =mtxStack_ + 0x10 + mul r4, r12, r3 + ldr ip, _020B3ED8 ; =mtxStack_ + 0x14 + ldr lr, [lr, r4] + ldr r3, _020B3EDC ; =mtxI_ + ldr r12, [r12, r4] + str lr, [r3, #0x10] + str r12, [r3, #0x14] +_020B3EB8: + ldr r12, [r1, #0x3c] + blx r12 + ldmia sp!, {r4,pc} + .balign 4 +_020B3EC4: .word pCurrentInstance_ +_020B3EC8: .word bDonotUseSRTransform +_020B3ECC: .word stackPos_ +_020B3ED0: .word mtxStack_ +_020B3ED4: .word mtxStack_ + 0x10 +_020B3ED8: .word mtxStack_ + 0x14 +_020B3EDC: .word mtxI_ + arm_func_end RndCoreCBFuncAfterCell_ + + arm_func_start RndCoreCBFuncBeforeCell_ +RndCoreCBFuncBeforeCell_: ; 0x020B3EE0 + stmdb sp!, {r4-r6,lr} + ldr r2, _020B3FF4 ; =pCurrentInstance_ + mov r6, r0 + ldr r0, [r2, #0x0] + mov r5, r1 + ldr r4, [r0, #0x74] + ldr r0, [r4, #0x34] + cmp r0, #0x0 + beq _020B3F7C + ldr r0, _020B3FF8 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3FFC ; =stackPos_ + ldreq r1, _020B4000 ; =mtxStack_ + ldreq r2, [r0, #0x0] + moveq r0, #0x18 + mlaeq r1, r2, r0, r1 + beq _020B3F54 + ldr r1, _020B3FFC ; =stackPos_ + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr r1, _020B4004 ; =mtxStack_ + 0x10 + mul r3, r2, r0 + ldr r0, _020B4008 ; =mtxStack_ + 0x14 + ldr r2, [r1, r3] + ldr r1, _020B400C ; =mtxI_ + ldr r0, [r0, r3] + str r2, [r1, #0x10] + str r0, [r1, #0x14] +_020B3F54: + ldr r3, [r4, #0x34] + mov r0, r5 + mov r2, r4 + blx r3 + cmp r0, #0x0 + moveq r0, #0x0 + streq r0, [r6, #0x30] + ldmeqia sp!, {r4-r6,pc} + mov r0, #0x1 + str r0, [r6, #0x30] +_020B3F7C: + ldr r0, [r4, #0x38] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r0, _020B3FF8 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldreq r0, _020B3FFC ; =stackPos_ + ldreq r2, _020B4000 ; =mtxStack_ + ldreq r1, [r0, #0x0] + moveq r0, #0x18 + mlaeq r3, r1, r0, r2 + beq _020B3FD8 + ldr r1, _020B3FFC ; =stackPos_ + mov r0, #0x18 + ldr r2, [r1, #0x0] + ldr r1, _020B4004 ; =mtxStack_ + 0x10 + mul r6, r2, r0 + ldr r0, _020B4008 ; =mtxStack_ + 0x14 + ldr r1, [r1, r6] + ldr r3, _020B400C ; =mtxI_ + ldr r0, [r0, r6] + str r1, [r3, #0x10] + str r0, [r3, #0x14] +_020B3FD8: + ldr r0, _020B3FF4 ; =pCurrentInstance_ + ldr r6, [r4, #0x38] + ldr r0, [r0, #0x0] + mov r1, r4 + mov r2, r5 + blx r6 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B3FF4: .word pCurrentInstance_ +_020B3FF8: .word bDonotUseSRTransform +_020B3FFC: .word stackPos_ +_020B4000: .word mtxStack_ +_020B4004: .word mtxStack_ + 0x10 +_020B4008: .word mtxStack_ + 0x14 +_020B400C: .word mtxI_ + arm_func_end RndCoreCBFuncBeforeCell_ + + arm_func_start NNSi_G2dMCMStoreCurrentMtxToMtxCache +NNSi_G2dMCMStoreCurrentMtxToMtxCache: ; 0x020B4010 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020B4154 ; =stackPos_ + ldr r1, _020B4158 ; =mtxStateStack_ + ldr r0, [r0, #0x0] + mov r2, #0x1 + mov r0, r0, lsl #0x10 + add r3, r1, r0, lsr #0xd + ldrh r0, [r3, #0x4] + cmp r0, #0x1 + beq _020B4044 + cmp r0, #0x2 + movne r2, #0x0 +_020B4044: + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r0, _020B415C ; =currentMtxCachePos_ + mov r2, #0x10 + ldrh r4, [r0, #0x0] + cmp r4, #0x1f + addcc r1, r4, #0x1 + strcch r1, [r0, #0x0] + ldr r0, _020B4160 ; =mtxCacheBuffer_ + ldrh r5, [r3, #0x2] + add r0, r0, r4, lsl #0x5 + add r1, r0, #0x10 + mvn r0, #0x0 + strh r4, [r3, #0x0] + bl MIi_CpuClearFast + ldr r0, _020B4154 ; =stackPos_ + ldr r1, _020B4164 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + ldr r2, [r1, #0x0] + mov r1, r0, lsl #0x10 + cmp r2, #0x0 + ldr r3, _020B4158 ; =mtxStateStack_ + mov r1, r1, lsr #0xd + ldrh r1, [r3, r1] + ldr r3, _020B4160 ; =mtxCacheBuffer_ + moveq r2, #0x18 + add r1, r3, r1, lsl #0x5 + ldreq r3, _020B4168 ; =mtxStackFor2DHW_ + mlaeq r12, r0, r2, r3 + beq _020B40E4 + mov r2, #0x18 + mul r3, r0, r2 + ldr r2, _020B416C ; =mtxStack_ + 0x10 + ldr r0, _020B4170 ; =mtxStack_ + 0x14 + ldr r2, [r2, r3] + ldr ip, _020B4174 ; =mtxI_ + ldr r0, [r0, r3] + str r2, [r12, #0x10] + str r0, [r12, #0x14] +_020B40E4: + ldr r2, [r12, #0x0] + ldr r0, _020B4154 ; =stackPos_ + str r2, [r1, #0x0] + ldr r2, [r12, #0x4] + str r2, [r1, #0x4] + ldr r2, [r12, #0x8] + str r2, [r1, #0x8] + ldr r2, [r12, #0xc] + str r2, [r1, #0xc] + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x10 + movs lr, r0, lsr #0x10 + addmi sp, sp, #0x4 + ldmmiia sp!, {r4-r5,pc} + ldr r3, _020B4158 ; =mtxStateStack_ + mov r0, #0x3 +_020B4124: + add r2, r3, lr, lsl #0x3 + ldrh r1, [r2, #0x2] + mov r12, lr, lsl #0x3 + cmp r5, r1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} + strh r0, [r2, #0x4] + strh r4, [r3, r12] + subs lr, lr, #0x1 + bpl _020B4124 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4154: .word stackPos_ +_020B4158: .word mtxStateStack_ +_020B415C: .word currentMtxCachePos_ +_020B4160: .word mtxCacheBuffer_ +_020B4164: .word bDonotUseSRTransform +_020B4168: .word mtxStackFor2DHW_ +_020B416C: .word mtxStack_ + 0x10 +_020B4170: .word mtxStack_ + 0x14 +_020B4174: .word mtxI_ + arm_func_end NNSi_G2dMCMStoreCurrentMtxToMtxCache + + arm_func_start NNSi_G2dIdentity +NNSi_G2dIdentity: ; 0x020B4178 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r0, _020B4220 ; =bDonotUseSRTransform + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020B41B8 + ldr r1, _020B4224 ; =stackPos_ + mov r0, #0x18 + ldr r12, [r1, #0x0] + ldr r1, _020B4228 ; =mtxStack_ + 0x10 + mul r3, r12, r0 + mov r2, #0x0 + ldr r0, _020B422C ; =mtxStack_ + 0x14 + str r2, [r1, r3] + str r2, [r0, r3] + b _020B420C +_020B41B8: + ldr r0, _020B4224 ; =stackPos_ + mov lr, #0x18 + ldr r1, [r0, #0x0] + ldr r4, _020B4230 ; =mtxStack_ + mul r3, r1, lr + mov r2, #0x1000 + str r2, [r4, r3] + add r5, r4, r3 + mov r1, #0x0 + str r1, [r5, #0x4] + str r1, [r5, #0x8] + str r2, [r5, #0xc] + str r1, [r5, #0x10] + str r1, [r5, #0x14] + ldr r12, [r0, #0x0] + ldr r4, _020B4234 ; =mtxStackFor2DHW_ + ldmia r5!, {r0-r3} + mla lr, r12, lr, r4 + stmia lr!, {r0-r3} + ldmia r5, {r0-r1} + stmia lr, {r0-r1} +_020B420C: + ldr r0, _020B4238 ; =fxZStack_ + mov r1, #0x0 + str r1, [r0, r12, lsl #0x2] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4220: .word bDonotUseSRTransform +_020B4224: .word stackPos_ +_020B4228: .word mtxStack_ + 0x10 +_020B422C: .word mtxStack_ + 0x14 +_020B4230: .word mtxStack_ +_020B4234: .word mtxStackFor2DHW_ +_020B4238: .word fxZStack_ + arm_func_end NNSi_G2dIdentity diff --git a/arm9/asm/NNS_G2D_g2d_renderercor.s b/arm9/asm/NNS_G2D_g2d_renderercor.s new file mode 100644 index 00000000..bf415c1c --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_renderercor.s @@ -0,0 +1,1095 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global mtxIdentity_ +mtxIdentity_: ; 0x020FF958 + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ; static const in function + + .section .bss + + .global pTheInstance_ +pTheInstance_: ; 0x021CED14 + .space 0x4 + + .section .text + + arm_func_start NNS_G2dRndCoreDrawCellVramTransfer +NNS_G2dRndCoreDrawCellVramTransfer: ; 0x020B4BF4 + stmdb sp!, {r4-r6,lr} + ldr r2, _020B4CD8 ; =pTheInstance_ + mov r6, r0 + ldr r3, [r2, #0x0] + mov r4, r1 + ldr r5, [r3, #0x0] + ldr r0, [r5, #0x10] + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r0, #0x1 + str r0, [r3, #0x30] + ldr r3, [r5, #0x18] + cmp r3, #0x0 + beq _020B4C38 + ldr r0, [r2, #0x0] + mov r1, r6 + blx r3 +_020B4C38: + ldr r0, _020B4CD8 ; =pTheInstance_ + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B4CB8 + mvn r0, #0x0 + cmp r4, r0 + beq _020B4C7C + mov r0, r4 + ldr r4, [r5, #0x14] + bl NNSi_G2dGetCellTransferState + mov r3, #0x1 + mvn r1, r3, lsl r4 + ldr r2, [r0, #0x20] + and r1, r2, r1 + orr r1, r1, r3, lsl r4 + str r1, [r0, #0x20] +_020B4C7C: + ldr r0, [r5, #0x14] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B4CB8 + ; Jump table + b _020B4C9C ; case 0 + b _020B4CAC ; case 1 + b _020B4CAC ; case 2 + b _020B4CB8 ; case 3 +_020B4C9C: + mov r0, r5 + mov r1, r6 + bl DrawCellToSurface3D_ + b _020B4CB8 +_020B4CAC: + mov r0, r5 + mov r1, r6 + bl DrawCellToSurface2D_ +_020B4CB8: + ldr r2, [r5, #0x1c] + cmp r2, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r0, _020B4CD8 ; =pTheInstance_ + mov r1, r6 + ldr r0, [r0, #0x0] + blx r2 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B4CD8: .word pTheInstance_ + arm_func_end NNS_G2dRndCoreDrawCellVramTransfer + + arm_func_start NNS_G2dRndCoreDrawCell +NNS_G2dRndCoreDrawCell: ; 0x020B4CDC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r1, _020B4D9C ; =pTheInstance_ + mov r5, r0 + ldr r2, [r1, #0x0] + ldr r4, [r2, #0x0] + ldr r0, [r4, #0x10] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + mov r0, #0x1 + str r0, [r2, #0x30] + ldr r2, [r4, #0x18] + cmp r2, #0x0 + beq _020B4D24 + ldr r0, [r1, #0x0] + mov r1, r5 + blx r2 +_020B4D24: + ldr r0, _020B4D9C ; =pTheInstance_ + ldr r0, [r0, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B4D74 + ldr r0, [r4, #0x14] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020B4D74 + ; Jump table + b _020B4D58 ; case 0 + b _020B4D68 ; case 1 + b _020B4D68 ; case 2 + b _020B4D74 ; case 3 +_020B4D58: + mov r0, r4 + mov r1, r5 + bl DrawCellToSurface3D_ + b _020B4D74 +_020B4D68: + mov r0, r4 + mov r1, r5 + bl DrawCellToSurface2D_ +_020B4D74: + ldr r2, [r4, #0x1c] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r0, _020B4D9C ; =pTheInstance_ + mov r1, r5 + ldr r0, [r0, #0x0] + blx r2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4D9C: .word pTheInstance_ + arm_func_end NNS_G2dRndCoreDrawCell + + arm_func_start NNS_G2dRndCoreEndRendering +NNS_G2dRndCoreEndRendering: ; 0x020B4DA0 + ldr r0, _020B4E00 ; =pTheInstance_ + ldr r3, [r0, #0x0] + ldr r1, [r3, #0x0] + ldr r1, [r1, #0x14] + cmp r1, #0x0 + bne _020B4DD8 + ldr r2, _020B4E04 ; =0x04000440 + mov r1, #0x0 + ldr r0, _020B4E08 ; =0x04000448 + str r1, [r2, #0x0] + mov r1, #0x1 + str r1, [r0, #0x0] + str r1, [r2, #0x0] + b _020B4DF0 +_020B4DD8: + mov r2, #0x0 + str r2, [r3, #0x10] + ldr r1, [r0, #0x0] + str r2, [r1, #0x2c] + ldr r0, [r0, #0x0] + str r2, [r0, #0x28] +_020B4DF0: + ldr r0, _020B4E00 ; =pTheInstance_ + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + .balign 4 +_020B4E00: .word pTheInstance_ +_020B4E04: .word 0x04000440 +_020B4E08: .word 0x04000448 + arm_func_end NNS_G2dRndCoreEndRendering + + arm_func_start NNS_G2dRndCoreBeginRendering +NNS_G2dRndCoreBeginRendering: ; 0x020B4E0C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r2, _020B4F28 ; =pTheInstance_ + mov r4, r0 + str r4, [r2, #0x0] + ldr r0, [r4, #0x0] + ldr r5, [r0, #0x14] + cmp r5, #0x0 + bne _020B4ED8 + ldr lr, _020B4F2C ; =0x04000440 + mov r1, #0x0 + ldr r0, _020B4F30 ; =0x04000444 + str r1, [lr, #0x0] + str r1, [r0, #0x0] + ldr r12, [r4, #0x0] + ldr r0, _020B4F34 ; =0x04000470 + ldr r3, [r12, #0x0] + ldr r12, [r12, #0x4] + rsb r3, r3, #0x0 + str r3, [r0, #0x0] + rsb r3, r12, #0x0 + str r3, [r0, #0x0] + str r1, [r0, #0x0] + mov r0, #0x1 + str r0, [lr, #0x0] + ldr r0, [r2, #0x0] + ldr r5, [r0, #0x8] + mov r0, r5 + bl NNS_G2dIsImageReadyToUse + cmp r0, #0x0 + moveq r0, #0x0 + beq _020B4E98 + mov r0, r5 + mov r1, #0x0 + bl NNS_G2dGetImageLocation +_020B4E98: + ldr r1, _020B4F28 ; =pTheInstance_ + str r0, [r4, #0x14] + ldr r0, [r1, #0x0] + mov r1, #0x0 + ldr r5, [r0, #0xc] + mov r0, r5 + bl NNS_G2dIsImagePaletteReadyToUse + cmp r0, #0x0 + moveq r0, #0x0 + beq _020B4ECC + mov r0, r5 + mov r1, #0x0 + bl NNS_G2dGetImagePaletteLocation +_020B4ECC: + add sp, sp, #0x4 + str r0, [r4, #0x18] + ldmia sp!, {r4-r5,pc} +_020B4ED8: + ldr r4, [r4, #0x8] + mov r1, r5 + mov r0, r4 + bl NNS_G2dIsImageReadyToUse + cmp r0, #0x0 + moveq r1, #0x0 + beq _020B4F14 + mov r0, r4 + mov r1, r5 + bl NNS_G2dGetImageLocation + ldr r1, [r4, #0x20] + and r1, r1, #0x700000 + mov r1, r1, asr #0x14 + add r1, r1, #0x5 + mov r1, r0, lsr r1 +_020B4F14: + ldr r0, _020B4F28 ; =pTheInstance_ + ldr r0, [r0, #0x0] + str r1, [r0, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B4F28: .word pTheInstance_ +_020B4F2C: .word 0x04000440 +_020B4F30: .word 0x04000444 +_020B4F34: .word 0x04000470 + arm_func_end NNS_G2dRndCoreBeginRendering + + arm_func_start NNS_G2dSetRndCoreFlipMode +NNS_G2dSetRndCoreFlipMode: ; 0x020B4F38 + cmp r1, #0x0 + ldrne r1, [r0, #0x24] + orrne r1, r1, #0x1 + strne r1, [r0, #0x24] + ldreq r1, [r0, #0x24] + biceq r1, r1, #0x1 + streq r1, [r0, #0x24] + cmp r2, #0x0 + ldrne r1, [r0, #0x24] + orrne r1, r1, #0x2 + strne r1, [r0, #0x24] + ldreq r1, [r0, #0x24] + biceq r1, r1, #0x2 + streq r1, [r0, #0x24] + bx lr + arm_func_end NNS_G2dSetRndCoreFlipMode + + arm_func_start NNS_G2dIsRndCoreFlipV +NNS_G2dIsRndCoreFlipV: ; 0x020B4F74 + ldr r0, [r0, #0x24] + ands r0, r0, #0x2 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + arm_func_end NNS_G2dIsRndCoreFlipV + + arm_func_start NNS_G2dIsRndCoreFlipH +NNS_G2dIsRndCoreFlipH: ; 0x020B4F88 + ldr r0, [r0, #0x24] + ands r0, r0, #0x1 + movne r0, #0x1 + moveq r0, #0x0 + bx lr + arm_func_end NNS_G2dIsRndCoreFlipH + + arm_func_start NNS_G2dSetRndCoreSurface +NNS_G2dSetRndCoreSurface: ; 0x020B4F9C + str r1, [r0, #0x0] + bx lr + arm_func_end NNS_G2dSetRndCoreSurface + + arm_func_start NNS_G2dSetRndCore3DSoftSpriteZvalue +NNS_G2dSetRndCore3DSoftSpriteZvalue: ; 0x020B4FA4 + str r1, [r0, #0x34] + bx lr + arm_func_end NNS_G2dSetRndCore3DSoftSpriteZvalue + + arm_func_start NNS_G2dSetRndCoreCurrentMtx2D +NNS_G2dSetRndCoreCurrentMtx2D: ; 0x020B4FAC + ldr r2, _020B4FC0 ; =pTheInstance_ + ldr r2, [r2, #0x0] + str r0, [r2, #0x2c] + str r1, [r2, #0x28] + bx lr + .balign 4 +_020B4FC0: .word pTheInstance_ + arm_func_end NNS_G2dSetRndCoreCurrentMtx2D + + arm_func_start NNS_G2dSetRndCoreCurrentMtx3D +NNS_G2dSetRndCoreCurrentMtx3D: ; 0x020B4FC4 + ldr r1, _020B5028 ; =pTheInstance_ + mov r3, #0x0 + ldr r12, [r1, #0x0] + mov r1, #0x1000 + str r0, [r12, #0x2c] + ldr r2, [r0, #0x0] + str r2, [r12, #0x40] + ldr r2, [r0, #0x4] + str r2, [r12, #0x44] + str r3, [r12, #0x48] + ldr r2, [r0, #0x8] + str r2, [r12, #0x4c] + ldr r2, [r0, #0xc] + str r2, [r12, #0x50] + str r3, [r12, #0x54] + str r3, [r12, #0x58] + str r3, [r12, #0x5c] + str r1, [r12, #0x60] + ldr r1, [r0, #0x10] + str r1, [r12, #0x64] + ldr r0, [r0, #0x14] + str r0, [r12, #0x68] + ldr r0, [r12, #0x34] + str r0, [r12, #0x6c] + bx lr + .balign 4 +_020B5028: .word pTheInstance_ + arm_func_end NNS_G2dSetRndCoreCurrentMtx3D + + arm_func_start NNS_G2dSetRndCoreAffineOverwriteMode +NNS_G2dSetRndCoreAffineOverwriteMode: ; 0x020B502C + str r1, [r0, #0x4] + bx lr + arm_func_end NNS_G2dSetRndCoreAffineOverwriteMode + + arm_func_start NNS_G2dSetRndCoreOamRegisterFunc +NNS_G2dSetRndCoreOamRegisterFunc: ; 0x020B5034 + str r1, [r0, #0x1c] + str r2, [r0, #0x20] + bx lr + arm_func_end NNS_G2dSetRndCoreOamRegisterFunc + + arm_func_start NNS_G2dSetRndCoreImageProxy +NNS_G2dSetRndCoreImageProxy: ; 0x020B5040 + str r1, [r0, #0x8] + str r2, [r0, #0xc] + bx lr + arm_func_end NNS_G2dSetRndCoreImageProxy + + arm_func_start NNS_G2dInitRndCore +NNS_G2dInitRndCore: ; 0x020B504C + stmdb sp!, {r4,lr} + mov r4, r0 + mov r1, r4 + mov r0, #0x0 + mov r2, #0x70 + bl MIi_CpuClear16 + mov r1, #0x0 + str r1, [r4, #0x0] + mov r0, #0x2 + str r0, [r4, #0x4] + str r1, [r4, #0x8] + str r1, [r4, #0xc] + str r1, [r4, #0x24] + mov r0, #0x1 + str r0, [r4, #0x30] + str r1, [r4, #0x28] + ldmia sp!, {r4,pc} + arm_func_end NNS_G2dInitRndCore + + arm_func_start DrawCellToSurface3D_ +DrawCellToSurface3D_: ; 0x020B5090 + stmdb sp!, {r4-r10,lr} + ldr r5, _020B5158 ; =pTheInstance_ + mov r9, r1 + ldrh r1, [r9, #0x0] + ldr r2, [r5, #0x0] + mov r10, r0 + add r7, r2, #0x38 + mov r8, #0x0 + cmp r1, #0x0 + ldmlsia sp!, {r4-r10,pc} + mov r6, #0x1 + mov r4, #0x6 +_020B50C0: + mul r1, r8, r4 + ldr r0, [r5, #0x0] + str r6, [r0, #0x30] + ldr r2, [r9, #0x4] + ldrh r0, [r2, r1] + add r1, r2, r1 + strh r0, [r7, #0x0] + ldrh r0, [r1, #0x2] + strh r0, [r7, #0x2] + ldrh r0, [r1, #0x4] + strh r0, [r7, #0x4] + ldr r3, [r10, #0x20] + cmp r3, #0x0 + beq _020B5108 + ldr r0, [r5, #0x0] + mov r1, r9 + mov r2, r8 + blx r3 +_020B5108: + ldr r0, [r5, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B5120 + mov r0, r7 + bl DrawOamToSurface3D_ +_020B5120: + ldr r3, [r10, #0x24] + cmp r3, #0x0 + beq _020B513C + ldr r0, [r5, #0x0] + mov r1, r9 + mov r2, r8 + blx r3 +_020B513C: + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + ldrh r1, [r9, #0x0] + mov r8, r0, lsr #0x10 + cmp r8, r1 + blo _020B50C0 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B5158: .word pTheInstance_ + arm_func_end DrawCellToSurface3D_ + + arm_func_start DrawOamToSurface3D_ +DrawOamToSurface3D_: ; 0x020B515C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldr r1, _020B53A4 ; =pTheInstance_ + mov r7, r0 + ldr r0, [r1, #0x0] + add r0, r0, #0x40 + bl G3_LoadMtx43 + ldr r0, _020B53A4 ; =pTheInstance_ + ldr r0, [r0, #0x0] + ldr r1, [r0, #0x24] + cmp r1, #0x0 + beq _020B533C + ldr r2, [r7, #0x0] + ldr r1, _020B53A8 ; =0xC000C000 + and r4, r2, r1 + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + beq _020B51F4 + ldr r0, [r7, #0x0] + and r2, r4, #0xc000 + mov r0, r0, lsl #0x7 + mov r3, r0, lsr #0x17 + and r1, r4, #0xc0000000 + mov r1, r1, lsr #0x1e + ldr r0, _020B53AC ; =NNSi_objSizeWTbl + mov r2, r2, asr #0xe + mov r1, r1, lsl #0x1 + add r0, r0, r2, lsl #0x3 + cmp r3, #0xff + ldrh r1, [r1, r0] + orrgt r0, r3, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r3, r0, asr #0x10 + add r0, r3, r1 + rsb r0, r0, #0x0 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + b _020B5218 +_020B51F4: + ldr r0, [r7, #0x0] + mov r0, r0, lsl #0x7 + mov r0, r0, lsr #0x17 + cmp r0, #0xff + orrgt r0, r0, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 +_020B5218: + ldr r0, _020B53A4 ; =pTheInstance_ + mov r1, r1, lsl #0x10 + ldr r0, [r0, #0x0] + mov r6, r1, asr #0x10 + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + beq _020B527C + and r1, r4, #0xc000 + and r0, r4, #0xc0000000 + ldrb r4, [r7, #0x0] + ldr r2, _020B53B0 ; =NNSi_objSizeHTbl + mov r0, r0, lsr #0x1e + mov r3, r1, asr #0xe + mov r1, r0, lsl #0x1 + add r0, r2, r3, lsl #0x3 + cmp r4, #0x7f + ldrh r1, [r1, r0] + orrgt r0, r4, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r4, r0, asr #0x10 + add r0, r4, r1 + rsb r0, r0, #0x0 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + b _020B5298 +_020B527C: + ldrb r0, [r7, #0x0] + cmp r0, #0x7f + orrgt r0, r0, #0xff00 + movgt r0, r0, lsl #0x10 + movgt r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 +_020B5298: + ldr r0, _020B53A4 ; =pTheInstance_ + ldr r1, [r7, #0x0] + ldr r0, [r0, #0x0] + mov r5, r1, lsl #0x3 + bl NNS_G2dIsRndCoreFlipH + ldr r2, [r7, #0x0] + ldr r1, _020B53A4 ; =pTheInstance_ + eor r5, r0, r5, lsr #0x1f + ldr r0, [r1, #0x0] + mov r8, r2, lsl #0x2 + bl NNS_G2dIsRndCoreFlipV + ldr r2, [r7, #0x0] + eor r1, r0, r8, lsr #0x1f + bic r0, r2, #0x10000000 + str r0, [r7, #0x0] + ldr r2, [r7, #0x0] + ldr r3, _020B53A4 ; =pTheInstance_ + orr r2, r2, r5, lsl #0x1c + str r2, [r7, #0x0] + ldr r2, [r7, #0x0] + mov r0, r6 + bic r2, r2, #0x20000000 + str r2, [r7, #0x0] + ldr r5, [r7, #0x0] + mov r2, r4, lsl #0x10 + orr r1, r5, r1, lsl #0x1d + str r1, [r7, #0x0] + ldr r5, [r3, #0x0] + mov r1, r2, asr #0x10 + ldr r4, [r5, #0x8] + mov r3, r7 + add r2, r4, #0xc + str r2, [sp, #0x0] + ldr r4, [r5, #0x14] + mvn r2, #0x0 + str r4, [sp, #0x4] + ldr r4, [r5, #0x18] + str r4, [sp, #0x8] + bl NNS_G2dDrawOneOam3DDirectWithPosFast + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} +_020B533C: + ldr r2, _020B53A4 ; =pTheInstance_ + ldr r0, [r7, #0x0] + ldr r5, [r2, #0x0] + mov r0, r0, lsl #0x7 + ldr r4, [r5, #0x8] + mov r0, r0, lsr #0x17 + cmp r0, #0xff + orrgt r0, r0, #0xff00 + movgt r0, r0, lsl #0x10 + ldrb r1, [r7, #0x0] + add r4, r4, #0xc + movgt r0, r0, asr #0x10 + str r4, [sp, #0x0] + ldr r4, [r5, #0x14] + cmp r1, #0x7f + orrgt r1, r1, #0xff00 + movgt r1, r1, lsl #0x10 + str r4, [sp, #0x4] + ldr r4, [r5, #0x18] + movgt r1, r1, asr #0x10 + mov r3, r7 + mvn r2, #0x0 + str r4, [sp, #0x8] + bl NNS_G2dDrawOneOam3DDirectWithPosFast + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B53A4: .word pTheInstance_ +_020B53A8: .word 0xC000C000 +_020B53AC: .word NNSi_objSizeWTbl +_020B53B0: .word NNSi_objSizeHTbl + arm_func_end DrawOamToSurface3D_ + + arm_func_start DrawCellToSurface2D_ +DrawCellToSurface2D_: ; 0x020B53B4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x44 + ldr r2, _020B57B0 ; =pTheInstance_ + mov r10, r0 + ldr r0, [r2, #0x0] + mov r11, r1 + ldr r9, [r0, #0x2c] + ldr r1, _020B57B0 ; =pTheInstance_ + cmp r9, #0x0 + ldreq sb, _020B57B4 ; =mtxIdentity_ + ldr r3, [r1, #0x0] + ldr r4, [r9, #0x10] + str r4, [sp, #0x18] + ldr r2, [r9, #0x14] + str r2, [sp, #0x1c] + ldr r1, [r10, #0x0] + sub r1, r4, r1 + str r1, [sp, #0x18] + ldr r1, [r10, #0x4] + sub r1, r2, r1 + str r1, [sp, #0x1c] + ldr r2, [r3, #0x24] + ldr r1, [r3, #0x10] + cmp r2, #0x0 + str r1, [sp, #0x4] + bne _020B5430 + ldr r1, [r3, #0x28] + cmp r1, #0x0 + movne r1, #0x1 + strne r1, [sp, #0x0] + bne _020B5438 +_020B5430: + mov r1, #0x0 + str r1, [sp, #0x0] +_020B5438: + ldrh r1, [r11, #0x0] + add r7, r0, #0x38 + mov r8, #0x0 + cmp r1, #0x0 + addls sp, sp, #0x44 + ldmlsia sp!, {r4-r11,pc} + mov r0, #0x1 + ldr r4, _020B57B0 ; =pTheInstance_ + str r8, [sp, #0x14] + str r0, [sp, #0xc] +_020B5460: + ldr r2, [r4, #0x0] + ldr r0, [sp, #0xc] + mov r1, #0x6 + str r0, [r2, #0x30] + mul r0, r8, r1 + ldr r1, [r11, #0x4] + add r2, r1, r0 + ldrh r0, [r1, r0] + strh r0, [r7, #0x0] + ldrh r0, [r2, #0x2] + strh r0, [r7, #0x2] + ldrh r0, [r2, #0x4] + strh r0, [r7, #0x4] + ldr r3, [r10, #0x20] + cmp r3, #0x0 + beq _020B54B0 + ldr r0, [r4, #0x0] + mov r1, r11 + mov r2, r8 + blx r3 +_020B54B0: + ldr r0, [r4, #0x0] + ldr r0, [r0, #0x30] + cmp r0, #0x0 + beq _020B5790 + ldr r0, [sp, #0x0] + ldr r1, [r7, #0x4] + cmp r0, #0x0 + mov r0, #0x400 + rsb r0, r0, #0x0 + and r2, r1, r0 + ldr r0, [sp, #0x4] + mov r1, r1, lsl #0x16 + add r1, r0, r1, lsr #0x16 + ldr r0, _020B57B8 ; =0x000003FF + and r0, r1, r0 + orr r0, r2, r0 + str r0, [r7, #0x4] + beq _020B5600 + ldr r0, [r10, #0x14] + ldr lr, [r4, #0x0] + sub r1, r0, #0x1 + ldr r0, [r7, #0x0] + ldr r6, [lr, #0x28] + mov r2, r0, lsl #0x2 + mov r2, r2, lsr #0x1f + mov r2, r2, lsl #0x1 + mov r0, r0, lsl #0x3 + orr r5, r2, r0, lsr #0x1f + add r0, r6, r5, lsl #0x2 + add r0, r0, r1, lsl #0x1 + ldrh r1, [r0, #0x10] + ldr r0, _020B57BC ; =0x0000FFFF + str r1, [sp, #0x8] + cmp r1, r0 + bne _020B55CC + cmp r5, #0x0 + bne _020B5558 + ldr r1, [lr, #0x20] + mov r0, r6 + blx r1 + str r0, [sp, #0x8] + b _020B55B4 +_020B5558: + ands r0, r5, #0x1 + add r12, sp, #0x30 + ldmia r6, {r0-r3} + stmia r12, {r0-r3} + beq _020B5584 + ldr r1, [sp, #0x30] + ldr r0, [sp, #0x34] + rsb r1, r1, #0x0 + str r1, [sp, #0x30] + rsb r0, r0, #0x0 + str r0, [sp, #0x34] +_020B5584: + ands r0, r5, #0x2 + beq _020B55A4 + ldr r1, [sp, #0x38] + ldr r0, [sp, #0x3c] + rsb r1, r1, #0x0 + str r1, [sp, #0x38] + rsb r0, r0, #0x0 + str r0, [sp, #0x3c] +_020B55A4: + ldr r1, [lr, #0x20] + add r0, sp, #0x30 + blx r1 + str r0, [sp, #0x8] +_020B55B4: + ldr r1, [r10, #0x14] + add r0, r6, r5, lsl #0x2 + sub r1, r1, #0x1 + add r1, r0, r1, lsl #0x1 + ldr r0, [sp, #0x8] + strh r0, [r1, #0x10] +_020B55CC: + ldr r1, [r9, #0x0] + add r0, sp, #0x20 + str r1, [sp, #0x20] + ldr r2, [r9, #0x4] + mov r1, r7 + str r2, [sp, #0x24] + ldr r3, [r9, #0x8] + add r2, sp, #0x18 + str r3, [sp, #0x28] + ldr r3, [r9, #0xc] + str r3, [sp, #0x2c] + bl DoAffineTransforme_ + b _020B5750 +_020B5600: + ldr r0, _020B57C0 ; =0x0000FFFE + str r0, [sp, #0x8] + ldr r0, [r4, #0x0] + ldr r1, [r0, #0x24] + cmp r1, #0x0 + beq _020B5714 + ldr r2, [r7, #0x0] + ldr r1, _020B57C4 ; =0xC000C000 + mov r6, r2, lsl #0x3 + and r5, r2, r1 + bl NNS_G2dIsRndCoreFlipH + ldr r1, [r7, #0x0] + eor r6, r0, r6, lsr #0x1f + mov r1, r1, lsl #0x2 + ldr r0, [r4, #0x0] + str r1, [sp, #0x10] + bl NNS_G2dIsRndCoreFlipV + ldr r1, [sp, #0x10] + eor r0, r0, r1, lsr #0x1f + ldr r1, [r7, #0x0] + bic r1, r1, #0x10000000 + str r1, [r7, #0x0] + ldr r1, [r7, #0x0] + orr r1, r1, r6, lsl #0x1c + str r1, [r7, #0x0] + ldr r1, [r7, #0x0] + bic r1, r1, #0x20000000 + str r1, [r7, #0x0] + ldr r1, [r7, #0x0] + orr r0, r1, r0, lsl #0x1d + str r0, [r7, #0x0] + ldr r0, [r4, #0x0] + bl NNS_G2dIsRndCoreFlipH + cmp r0, #0x0 + beq _020B56D4 + and r1, r5, #0xc000 + mov r2, r1, asr #0xe + ldr r1, _020B57C8 ; =NNSi_objSizeWTbl + and r3, r5, #0xc0000000 + mov r3, r3, lsr #0x1e + add r2, r1, r2, lsl #0x3 + mov r3, r3, lsl #0x1 + ldr r0, [r7, #0x0] + ldr r1, _020B57CC ; =0xFE00FFFF + ldrh r2, [r3, r2] + and r1, r0, r1 + mov r0, r0, lsl #0x7 + add r0, r2, r0, lsr #0x17 + rsb r2, r0, #0x0 + ldr r0, _020B57D0 ; =0x000001FF + and r0, r2, r0 + orr r0, r1, r0, lsl #0x10 + str r0, [r7, #0x0] +_020B56D4: + ldr r0, [r4, #0x0] + bl NNS_G2dIsRndCoreFlipV + cmp r0, #0x0 + beq _020B5714 + and r1, r5, #0xc000 + mov r3, r1, asr #0xe + and r1, r5, #0xc0000000 + mov r1, r1, lsr #0x1e + mov r2, r1, lsl #0x1 + ldr r1, _020B57D4 ; =NNSi_objSizeHTbl + ldrb r0, [r7, #0x0] + add r1, r1, r3, lsl #0x3 + ldrh r1, [r2, r1] + add r0, r0, r1 + rsb r0, r0, #0x0 + strb r0, [r7, #0x0] +_020B5714: + ldr r2, [r7, #0x0] + ldr r0, _020B57CC ; =0xFE00FFFF + ldr r1, [sp, #0x18] + and r0, r2, r0 + mov r2, r2, lsl #0x7 + mov r2, r2, lsr #0x17 + add r2, r2, r1, asr #0xc + ldr r1, _020B57D0 ; =0x000001FF + and r1, r2, r1 + orr r0, r0, r1, lsl #0x10 + str r0, [r7, #0x0] + ldrb r1, [r7, #0x0] + ldr r0, [sp, #0x1c] + add r0, r1, r0, asr #0xc + strb r0, [r7, #0x0] +_020B5750: + ldr r3, [r4, #0x0] + ldr r1, [sp, #0x8] + ldr r2, [sp, #0x14] + ldr r3, [r3, #0x1c] + mov r0, r7 + blx r3 + cmp r0, #0x1 + addne sp, sp, #0x44 + ldmneia sp!, {r4-r11,pc} + ldr r3, [r10, #0x24] + cmp r3, #0x0 + beq _020B5790 + ldr r0, [r4, #0x0] + mov r1, r11 + mov r2, r8 + blx r3 +_020B5790: + add r0, r8, #0x1 + mov r0, r0, lsl #0x10 + mov r8, r0, lsr #0x10 + ldrh r0, [r11, #0x0] + cmp r8, r0 + blo _020B5460 + add sp, sp, #0x44 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B57B0: .word pTheInstance_ +_020B57B4: .word mtxIdentity_ +_020B57B8: .word 0x000003FF +_020B57BC: .word 0x0000FFFF +_020B57C0: .word 0x0000FFFE +_020B57C4: .word 0xC000C000 +_020B57C8: .word NNSi_objSizeWTbl +_020B57CC: .word 0xFE00FFFF +_020B57D0: .word 0x000001FF +_020B57D4: .word NNSi_objSizeHTbl + arm_func_end DrawCellToSurface2D_ + + arm_func_start DoAffineTransforme_ +DoAffineTransforme_: ; 0x020B57D8 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + ldr r4, [r1, #0x0] + ldr r3, _020B5A9C ; =0x01FF0000 + and r3, r4, r3 + mov r3, r3, lsr #0x10 + mov r3, r3, lsl #0x10 + mov r3, r3, asr #0x10 + cmp r3, #0xff + orrgt r3, r3, #0xff00 + movgt r3, r3, lsl #0x10 + movgt r3, r3, asr #0x10 + mov r3, r3, lsl #0xc + str r3, [sp, #0x0] + ldr r3, [r1, #0x0] + and r3, r3, #0xff + mov r3, r3, lsl #0x10 + mov r3, r3, asr #0x10 + cmp r3, #0x7f + orrgt r3, r3, #0xff00 + movgt r3, r3, lsl #0x10 + movgt r3, r3, asr #0x10 + mov r3, r3, lsl #0xc + str r3, [sp, #0x4] + ldr r5, [r1, #0x0] + and r4, r5, #0x300 + cmp r4, #0x100 + beq _020B5858 + cmp r4, #0x300 + beq _020B5858 + and r3, r5, #0x30000000 + orr r4, r4, r3 +_020B5858: + cmp r4, #0x300 + bne _020B58AC + ldr r3, _020B5AA0 ; =0xC000C000 + ldr r4, _020B5AA4 ; =NNSi_objSizeWTbl + and r3, r5, r3 + and r5, r3, #0xc0000000 + and r3, r3, #0xc000 + mov r6, r5, lsr #0x1e + mov r5, r3, asr #0xe + ldr r3, _020B5AA8 ; =NNSi_objSizeHTbl + mov r6, r6, lsl #0x1 + add r4, r4, r5, lsl #0x3 + add r3, r3, r5, lsl #0x3 + ldrh r5, [r6, r4] + ldr r7, [sp, #0x0] + ldrh r3, [r6, r3] + ldr r4, [sp, #0x4] + add r5, r7, r5, lsl #0xb + add r3, r4, r3, lsl #0xb + str r5, [sp, #0x0] + str r3, [sp, #0x4] +_020B58AC: + ldr r5, [r0, #0x8] + ldr r4, [sp, #0x4] + add r3, sp, #0x0 + smull r8, r7, r5, r4 + cmp r3, r3 + ldr r6, [r0, #0x0] + mov r4, #0x1000 + addeq r3, sp, #0x8 + adds r8, r8, r4 + ldr r5, [sp, #0x0] + adc r7, r7, #0x0 + smlal r8, r7, r6, r5 + mov r5, r8, lsr #0xc + orr r5, r5, r7, lsl #0x14 + str r5, [r3, #0x0] + ldr r7, [r0, #0xc] + ldr r6, [sp, #0x4] + ldr r5, [r0, #0x4] + smull r8, r6, r7, r6 + adds r7, r8, r4 + ldr r4, [sp, #0x0] + adc r6, r6, #0x0 + smlal r7, r6, r5, r4 + mov r5, r7, lsr #0xc + add r4, sp, #0x8 + orr r5, r5, r6, lsl #0x14 + str r5, [r3, #0x4] + cmp r3, r4 + ldreq r3, [sp, #0xc] + ldreq r4, [sp, #0x8] + streq r3, [sp, #0x4] + ldr r3, _020B5AAC ; =pTheInstance_ + streq r4, [sp, #0x0] + ldr r3, [r3, #0x0] + ldr r3, [r3, #0x4] + cmp r3, #0x0 + beq _020B597C + cmp r3, #0x2 + moveq r5, #0x300 + movne r5, #0x100 + cmp r5, #0x100 + ldreq r4, [r1, #0x0] + ldreq r3, _020B5AB0 ; =0xC1FFFCFF + andeq r3, r4, r3 + orreq r3, r3, r5 + streq r3, [r1, #0x0] + beq _020B597C + ldr r4, [r1, #0x0] + ldr r3, _020B5AB0 ; =0xC1FFFCFF + and r3, r4, r3 + orr r3, r3, r5 + str r3, [r1, #0x0] +_020B597C: + ldr r6, [r1, #0x0] + and r5, r6, #0x300 + cmp r5, #0x100 + beq _020B599C + cmp r5, #0x300 + beq _020B599C + and r3, r6, #0x30000000 + orr r5, r5, r3 +_020B599C: + ldr r3, _020B5AA0 ; =0xC000C000 + ldr r4, _020B5AA4 ; =NNSi_objSizeWTbl + and r3, r6, r3 + and r6, r3, #0xc0000000 + and r3, r3, #0xc000 + mov lr, r3, asr #0xe + mov r6, r6, lsr #0x1e + mov r3, r6, lsl #0x1 + add r4, r4, lr, lsl #0x3 + ldrh r4, [r3, r4] + ldr r6, [r0, #0x0] + ldr r8, _020B5AA8 ; =NNSi_objSizeHTbl + mov r12, r4, asr #0x1 + mov r4, r12, lsl #0xc + rsb r7, r4, #0x0 + mla r7, r6, r12, r7 + add lr, r8, lr, lsl #0x3 + ldrh r3, [r3, lr] + ldr r6, [r0, #0x8] + ldr lr, [sp, #0x0] + mov r3, r3, asr #0x1 + mla r7, r6, r3, r7 + add r6, lr, r7 + str r6, [sp, #0x0] + mov lr, r3, lsl #0xc + ldr r6, [r0, #0x4] + rsb r7, lr, #0x0 + mla r7, r6, r12, r7 + ldr r0, [r0, #0xc] + ldr r6, [sp, #0x4] + mla r3, r0, r3, r7 + add r0, r6, r3 + str r0, [sp, #0x4] + cmp r5, #0x300 + moveq r0, #0x1 + movne r0, #0x0 + cmp r0, #0x0 + beq _020B5A4C + ldr r3, [sp, #0x0] + ldr r0, [sp, #0x4] + sub r3, r3, r4 + sub r0, r0, lr + str r3, [sp, #0x0] + str r0, [sp, #0x4] +_020B5A4C: + ldr r4, [sp, #0x0] + ldr r0, [r2, #0x0] + ldr r3, [sp, #0x4] + add r5, r4, r0 + str r5, [sp, #0x0] + ldr r2, [r2, #0x4] + ldr r0, _020B5AB4 ; =0x000001FF + add r2, r3, r2 + str r2, [sp, #0x4] + mov r3, r2, asr #0xc + ldr r4, [r1, #0x0] + ldr r2, _020B5AB8 ; =0xFE00FF00 + and r3, r3, #0xff + and r2, r4, r2 + and r4, r0, r5, asr #0xc + orr r0, r2, r3 + orr r0, r0, r4, lsl #0x10 + str r0, [r1, #0x0] + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020B5A9C: .word 0x01FF0000 +_020B5AA0: .word 0xC000C000 +_020B5AA4: .word NNSi_objSizeWTbl +_020B5AA8: .word NNSi_objSizeHTbl +_020B5AAC: .word pTheInstance_ +_020B5AB0: .word 0xC1FFFCFF +_020B5AB4: .word 0x000001FF +_020B5AB8: .word 0xFE00FF00 + arm_func_end DoAffineTransforme_ diff --git a/arm9/asm/NNS_G2D_g2d_softsprite.s b/arm9/asm/NNS_G2D_g2d_softsprite.s new file mode 100644 index 00000000..49cddc88 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_softsprite.s @@ -0,0 +1,129 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G2dDrawSpriteFast +NNS_G2dDrawSpriteFast: ; 0x020B0250 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020B02C0 ; =0x04000470 + mov r0, r0, lsl #0xc + str r0, [r5, #0x0] + mov r4, r1, lsl #0xc + ldr r12, [sp, #0x10] + ldr r0, [sp, #0x14] + ldr r1, [sp, #0x1c] + str r4, [r5, #0x0] + mov r4, r2, lsl #0xc + ldr r2, [sp, #0x18] + ldr lr, _020B02C4 ; =0x0400046C + str r4, [r5, #0x0] + mov r4, r3, lsl #0xc + ldr r3, [sp, #0x20] + str r4, [lr, #0x0] + mov r12, r12, lsl #0xc + str r12, [lr, #0x0] + mov r12, #0x1000 + mov r0, r0, lsl #0xc + mov r1, r1, lsl #0xc + mov r2, r2, lsl #0xc + mov r3, r3, lsl #0xc + str r12, [lr, #0x0] + bl DrawOneQuad_ + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B02C0: .word 0x04000470 +_020B02C4: .word 0x0400046C + arm_func_end NNS_G2dDrawSpriteFast + + arm_func_start NNS_G2dSetupSoftwareSpriteCamera +NNS_G2dSetupSoftwareSpriteCamera: ; 0x020B02C8 + stmdb sp!, {lr} + sub sp, sp, #0x14 + ldr r2, _020B0330 ; =0xBFFF0000 + ldr r0, _020B0334 ; =0x04000580 + mov r1, #0x400000 + str r2, [r0, #0x0] + rsb r0, r1, #0x0 + str r0, [sp, #0x0] + str r1, [sp, #0x4] + mov r0, #0x0 + str r1, [sp, #0x8] + mov r1, #0x1 + str r1, [sp, #0xc] + mov r2, r0 + mov r1, #0xc0000 + mov r3, #0x100000 + str r0, [sp, #0x10] + bl G3i_OrthoW_ + ldr r1, _020B0338 ; =0x0400044C + mov r2, #0x0 + ldr r0, _020B033C ; =0x04000440 + str r2, [r1, #0x0] + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x14 + ldmia sp!, {pc} + .balign 4 +_020B0330: .word 0xBFFF0000 +_020B0334: .word 0x04000580 +_020B0338: .word 0x0400044C +_020B033C: .word 0x04000440 + arm_func_end NNS_G2dSetupSoftwareSpriteCamera + + arm_func_start DrawOneQuad_ +DrawOneQuad_: ; 0x020B0340 + stmdb sp!, {r4-r6,lr} + mov r3, r3, lsl #0x8 + mov r0, r0, lsl #0x8 + mov r4, r3, asr #0x10 + mov r3, r0, asr #0x10 + mov r0, r4, lsl #0x10 + mov r3, r3, lsl #0x10 + mov r1, r1, lsl #0x8 + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + mov r2, r2, lsl #0x8 + mov r2, r2, asr #0x10 + mov r2, r2, lsl #0x10 + ldr ip, _020B03F4 ; =0x04000500 + mov lr, #0x1 + mov r6, r0, lsr #0x10 + mov r5, r3, lsr #0x10 + mov r3, r1, lsr #0x10 + mov r1, r2, lsr #0x10 + ldr r4, _020B03F8 ; =0x04000488 + str lr, [r12, #0x0] + orr r0, r5, r6, lsl #0x10 + ldr lr, _020B03FC ; =0x0400048C + str r0, [r4, #0x0] + mov r0, #0x10000000 + str r0, [lr, #0x0] + mov r12, #0x0 + str r12, [lr, #0x0] + orr r2, r3, r6, lsl #0x10 + ldr r0, _020B0400 ; =0x10001000 + str r2, [r4, #0x0] + str r0, [lr, #0x0] + str r12, [lr, #0x0] + orr r0, r3, r1, lsl #0x10 + str r0, [r4, #0x0] + mov r0, #0x1000 + str r0, [lr, #0x0] + str r12, [lr, #0x0] + orr r0, r5, r1, lsl #0x10 + str r0, [r4, #0x0] + str r12, [lr, #0x0] + ldr r0, _020B0404 ; =0x04000504 + str r12, [lr, #0x0] + str r12, [r0, #0x0] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B03F4: .word 0x04000500 +_020B03F8: .word 0x04000488 +_020B03FC: .word 0x0400048C +_020B0400: .word 0x10001000 +_020B0404: .word 0x04000504 + arm_func_end DrawOneQuad_ diff --git a/arm9/asm/NNS_G2D_g2d_srtcontrol.s b/arm9/asm/NNS_G2D_g2d_srtcontrol.s new file mode 100644 index 00000000..7c9139ef --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_srtcontrol.s @@ -0,0 +1,62 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dSrtcSetInitialValue +NNSi_G2dSrtcSetInitialValue: ; 0x020B1A40 + stmdb sp!, {r4,lr} + mov r4, r0 + add r1, r4, #0x4 + mov r0, #0x0 + mov r2, #0x18 + bl MIi_CpuClear16 + mov r0, #0x1000 + str r0, [r4, #0x4] + str r0, [r4, #0x8] + ldmia sp!, {r4,pc} + arm_func_end NNSi_G2dSrtcSetInitialValue + + arm_func_start NNSi_G2dSrtcInitControl +NNSi_G2dSrtcInitControl: ; 0x020B1A68 + ldr ip, _020B1A74 ; =NNSi_G2dSrtcSetInitialValue + str r1, [r0, #0x0] + bx r12 + .balign 4 +_020B1A74: .word NNSi_G2dSrtcSetInitialValue + arm_func_end NNSi_G2dSrtcInitControl + + arm_func_start NNSi_G2dSrtcSetSRTScale +NNSi_G2dSrtcSetSRTScale: ; 0x020B1A78 + ldr r3, [r0, #0x0] + cmp r3, #0x1 + ldreqh r3, [r0, #0x12] + orreq r3, r3, #0x2 + streqh r3, [r0, #0x12] + streq r1, [r0, #0x4] + streq r2, [r0, #0x8] + bx lr + arm_func_end NNSi_G2dSrtcSetSRTScale + + arm_func_start NNSi_G2dSrtcSetSRTRotZ +NNSi_G2dSrtcSetSRTRotZ: ; 0x020B1A98 + ldr r2, [r0, #0x0] + cmp r2, #0x1 + ldreqh r2, [r0, #0x12] + orreq r2, r2, #0x4 + streqh r2, [r0, #0x12] + streqh r1, [r0, #0x10] + bx lr + arm_func_end NNSi_G2dSrtcSetSRTRotZ + + arm_func_start NNSi_G2dSrtcSetTrans +NNSi_G2dSrtcSetTrans: ; 0x020B1AB4 + ldr r3, [r0, #0x0] + cmp r3, #0x1 + ldreqh r3, [r0, #0x12] + orreq r3, r3, #0x8 + streqh r3, [r0, #0x12] + streqh r1, [r0, #0xc] + streqh r2, [r0, #0xe] + bx lr + arm_func_end NNSi_G2dSrtcSetTrans diff --git a/arm9/asm/NNS_G2D_g2d_textcanvas.s b/arm9/asm/NNS_G2D_g2d_textcanvas.s new file mode 100644 index 00000000..95ebf85a --- /dev/null +++ b/arm9/asm/NNS_G2D_g2d_textcanvas.s @@ -0,0 +1,221 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dTextCanvasDrawTextRect +NNSi_G2dTextCanvasDrawTextRect: ; 0x020B7168 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + ldr r12, [sp, #0x28] + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + ands r0, r12, #0x100 + beq _020B71AC + ldr r0, [r7, #0x4] + ldr r1, [r7, #0xc] + ldr r2, [sp, #0x2c] + bl NNSi_G2dFontGetTextHeight + ldr r1, [sp, #0x20] + sub r0, r1, r0 + add r5, r5, r0 + b _020B71E4 +_020B71AC: + ands r0, r12, #0x80 + beq _020B71E4 + ldr r0, [r7, #0x4] + ldr r1, [r7, #0xc] + ldr r2, [sp, #0x2c] + bl NNSi_G2dFontGetTextHeight + ldr r2, [sp, #0x20] + add r1, r0, #0x1 + add r0, r2, #0x1 + add r0, r0, r0, lsr #0x1f + mov r2, r0, asr #0x1 + add r0, r1, r1, lsr #0x1f + sub r0, r2, r0, asr #0x1 + add r5, r5, r0 +_020B71E4: + ldr r1, [sp, #0x24] + ldr r0, [sp, #0x28] + str r1, [sp, #0x0] + ldr r12, [sp, #0x2c] + str r0, [sp, #0x4] + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov r3, r4 + str r12, [sp, #0x8] + bl NNSi_G2dTextCanvasDrawTextAlign + add sp, sp, #0xc + ldmia sp!, {r4-r7,pc} + arm_func_end NNSi_G2dTextCanvasDrawTextRect + + arm_func_start NNSi_G2dTextCanvasDrawText +NNSi_G2dTextCanvasDrawText: ; 0x020B7218 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x18 + ldr r4, [sp, #0x34] + mov r8, r0 + str r4, [sp, #0x0] + mov r7, r1 + mov r6, r2 + mov r5, r3 + ldr r4, [sp, #0x30] + ldr r1, [r8, #0x4] + ldr r2, [r8, #0x8] + ldr r3, [r8, #0xc] + add r0, sp, #0xc + bl NNSi_G2dFontGetTextRect + ands r0, r4, #0x10 + ldrne r0, [sp, #0xc] + addne r0, r0, #0x1 + addne r0, r0, r0, lsr #0x1f + subne r7, r7, r0, asr #0x1 + bne _020B7274 + ands r0, r4, #0x20 + ldrne r0, [sp, #0xc] + subne r7, r7, r0 +_020B7274: + ands r0, r4, #0x2 + ldrne r0, [sp, #0x10] + addne r0, r0, #0x1 + addne r0, r0, r0, lsr #0x1f + subne r6, r6, r0, asr #0x1 + bne _020B7298 + ands r0, r4, #0x4 + ldrne r0, [sp, #0x10] + subne r6, r6, r0 +_020B7298: + str r5, [sp, #0x0] + ldr r0, [sp, #0x34] + str r4, [sp, #0x4] + str r0, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r0, r8 + mov r1, r7 + mov r2, r6 + bl NNSi_G2dTextCanvasDrawTextAlign + add sp, sp, #0x18 + ldmia sp!, {r4-r8,pc} + arm_func_end NNSi_G2dTextCanvasDrawText + + arm_func_start NNSi_G2dTextCanvasDrawTextAlign +NNSi_G2dTextCanvasDrawTextAlign: ; 0x020B72C4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r0 + ldr r4, [r10, #0x4] + ldr r0, [sp, #0x40] + ldr r4, [r4, #0x0] + ldr r5, [r10, #0xc] + ldrsb r4, [r4, #0x1] + cmp r0, #0x0 + mov r9, r1 + str r0, [sp, #0xc] + ldr r0, [sp, #0x38] + mov r8, r2 + str r0, [sp, #0x38] + mov r7, r3 + add r6, r5, r4 + addeq sp, sp, #0x14 + ldmeqia sp!, {r4-r11,pc} + add r0, r7, #0x1 + ldr r1, [sp, #0x3c] + add r0, r0, r0, lsr #0x1f + mov r0, r0, asr #0x1 + and r5, r1, #0x800 + and r11, r1, #0x400 + str r0, [sp, #0x8] + mov r4, #0x0 +_020B732C: + mov r1, r9 + cmp r5, #0x0 + beq _020B7358 + ldr r0, [r10, #0x4] + ldr r1, [r10, #0x8] + ldr r2, [sp, #0xc] + mov r3, r4 + bl NNSi_G2dFontGetStringWidth + sub r0, r7, r0 + add r1, r9, r0 + b _020B7388 +_020B7358: + cmp r11, #0x0 + beq _020B7388 + ldr r0, [r10, #0x4] + ldr r1, [r10, #0x8] + ldr r2, [sp, #0xc] + mov r3, r4 + bl NNSi_G2dFontGetStringWidth + add r0, r0, #0x1 + add r1, r0, r0, lsr #0x1f + ldr r0, [sp, #0x8] + sub r0, r0, r1, asr #0x1 + add r1, r9, r0 +_020B7388: + ldr r2, [sp, #0xc] + add r3, sp, #0xc + str r2, [sp, #0x0] + str r3, [sp, #0x4] + ldr r3, [sp, #0x38] + mov r0, r10 + mov r2, r8 + bl NNSi_G2dTextCanvasDrawString + ldr r0, [sp, #0xc] + add r8, r8, r6 + cmp r0, #0x0 + bne _020B732C + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + arm_func_end NNSi_G2dTextCanvasDrawTextAlign + + arm_func_start NNSi_G2dTextCanvasDrawString +NNSi_G2dTextCanvasDrawString: ; 0x020B73C0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r0 + ldr r6, [r10, #0x8] + ldr r5, [r10, #0x4] + ldr r4, [sp, #0x30] + add r0, sp, #0x8 + str r4, [sp, #0x8] + ldr r4, [r5, #0x4] + mov r9, r1 + mov r8, r2 + mov r7, r3 + blx r4 + cmp r0, #0x0 + beq _020B743C + add r11, sp, #0x8 +_020B7400: + cmp r0, #0xa + beq _020B743C + str r7, [sp, #0x0] + str r0, [sp, #0x4] + ldr r0, [r10, #0x0] + mov r1, r5 + mov r2, r9 + mov r3, r8 + bl NNS_G2dCharCanvasDrawChar + add r1, r9, r0 + mov r0, r11 + add r9, r1, r6 + blx r4 + cmp r0, #0x0 + bne _020B7400 +_020B743C: + ldr r1, [sp, #0x34] + cmp r1, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,pc} + cmp r0, #0xa + ldreq r1, [sp, #0x8] + ldr r0, [sp, #0x34] + movne r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + arm_func_end NNSi_G2dTextCanvasDrawString diff --git a/arm9/asm/NNS_G2D_g2di_bitreader.s b/arm9/asm/NNS_G2D_g2di_bitreader.s new file mode 100644 index 00000000..d36c774f --- /dev/null +++ b/arm9/asm/NNS_G2D_g2di_bitreader.s @@ -0,0 +1,35 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dBitReaderRead +NNSi_G2dBitReaderRead: ; 0x020B76B0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrsb r2, [r0, #0x4] + ldrb r12, [r0, #0x5] + mov r4, r1 + cmp r2, r4 + subge r1, r2, r4 + movge r5, r12, lsr r1 + strgeb r1, [r0, #0x4] + bge _020B7704 + ldr r3, [r0, #0x0] + sub r1, r4, r2 + add r2, r3, #0x1 + str r2, [r0, #0x0] + ldrb r2, [r3, #0x0] + mov r5, r12, lsl r1 + strb r2, [r0, #0x5] + mov r2, #0x8 + strb r2, [r0, #0x4] + bl NNSi_G2dBitReaderRead + orr r5, r0, r5 +_020B7704: + rsb r0, r4, #0x8 + mov r1, #0xff + and r0, r5, r1, asr r0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNSi_G2dBitReaderRead diff --git a/arm9/asm/NNS_G2D_g2di_mtx32.s b/arm9/asm/NNS_G2D_g2di_mtx32.s new file mode 100644 index 00000000..68fa5831 --- /dev/null +++ b/arm9/asm/NNS_G2D_g2di_mtx32.s @@ -0,0 +1,79 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dMtxConcat32 +NNSi_G2dMtxConcat32: ; 0x020B423C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x1c + ldr r4, [r0, #0x4] + ldr r3, [r1, #0x8] + mov r12, r2 + smull r6, r5, r4, r3 + ldr r4, [r0, #0x0] + ldr r3, [r1, #0x0] + cmp r12, r1 + smlal r6, r5, r4, r3 + mov r3, r6, lsr #0xc + addeq r2, sp, #0x0 + orr r3, r3, r5, lsl #0x14 + str r3, [r2, #0x0] + ldr r4, [r0, #0x4] + ldr r3, [r1, #0xc] + ldr r5, [r0, #0x0] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x4] + add lr, sp, #0x0 + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0x4] + ldr r4, [r0, #0xc] + ldr r3, [r1, #0x8] + ldr r5, [r0, #0x8] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x0] + cmp r2, lr + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0x8] + ldr r4, [r0, #0xc] + ldr r3, [r1, #0xc] + ldr r5, [r0, #0x8] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x4] + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + str r3, [r2, #0xc] + ldr r4, [r0, #0x14] + ldr r3, [r1, #0x8] + ldr r5, [r0, #0x10] + smull r7, r6, r4, r3 + ldr r3, [r1, #0x0] + ldr r4, [r1, #0x10] + smlal r7, r6, r5, r3 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + add r3, r4, r3 + str r3, [r2, #0x10] + ldr r4, [r0, #0x14] + ldr r3, [r1, #0xc] + ldr r5, [r0, #0x10] + ldr r0, [r1, #0x4] + smull r6, r3, r4, r3 + smlal r6, r3, r5, r0 + mov r0, r6, lsr #0xc + ldr r1, [r1, #0x14] + orr r0, r0, r3, lsl #0x14 + add r0, r1, r0 + str r0, [r2, #0x14] + ldmeqia lr!, {r0-r3} + stmeqia r12!, {r0-r3} + ldmeqia lr, {r0-r1} + stmeqia r12, {r0-r1} + add sp, sp, #0x1c + ldmia sp!, {r4-r7,pc} + arm_func_end NNSi_G2dMtxConcat32 diff --git a/arm9/asm/NNS_G2D_g2di_splitchar.s b/arm9/asm/NNS_G2D_g2di_splitchar.s new file mode 100644 index 00000000..4df7621d --- /dev/null +++ b/arm9/asm/NNS_G2D_g2di_splitchar.s @@ -0,0 +1,13 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G2dSplitCharUTF16 +NNSi_G2dSplitCharUTF16: ; 0x020B7718 + ldr r1, [r0, #0x0] + ldrh r2, [r1], #0x2 + str r1, [r0, #0x0] + mov r0, r2 + bx lr + arm_func_end NNSi_G2dSplitCharUTF16 diff --git a/arm9/asm/NNS_G3D_1mat1shp.s b/arm9/asm/NNS_G3D_1mat1shp.s new file mode 100644 index 00000000..01cb5a35 --- /dev/null +++ b/arm9/asm/NNS_G3D_1mat1shp.s @@ -0,0 +1,143 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G3dDraw1Mat1Shp +NNS_G3dDraw1Mat1Shp: ; 0x020BAFB8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x6c + mov r6, r0 + ldr r12, [r6, #0x1c] + mov r4, r1 + mov r5, r2 + mov r7, r3 + cmp r12, #0x1000 + beq _020BAFF8 + add r1, sp, #0x54 + mov r0, #0x1b + mov r2, #0x3 + str r12, [sp, #0x54] + str r12, [sp, #0x58] + str r12, [sp, #0x5c] + bl NNS_G3dGeBufferOP_N +_020BAFF8: + cmp r7, #0x0 + beq _020BB150 + ldr r0, [r6, #0x8] + add r3, r6, r0 + ldrh r0, [r3, #0xa] + add r2, r3, #0x4 + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r4, r0 + ldr r0, [r0, #0x4] + add r4, r3, r0 + ldr r0, [r4, #0xc] + ands r0, r0, #0x1f0000 + addeq sp, sp, #0x6c + ldmeqia sp!, {r4-r7,pc} + ldr r0, _020BB1B4 ; =0x00293130 + str r0, [sp, #0x0] + ldr r0, [r4, #0x4] + str r0, [sp, #0x4] + ldr r0, [r4, #0x8] + str r0, [sp, #0x8] + ldr r1, [r4, #0xc] + str r1, [sp, #0xc] + ldrh r0, [r4, #0x1e] + ands r0, r0, #0x20 + bicne r0, r1, #0x1f0000 + ldr r1, _020BB1B8 ; =0x00002B2A + strne r0, [sp, #0xc] + str r1, [sp, #0x10] + ldr r2, [r4, #0x14] + ldr r0, [sp, #0x0] + str r2, [sp, #0x14] + ldrh r3, [r4, #0x1c] + add r1, sp, #0x4 + mov r2, #0x6 + str r3, [sp, #0x18] + bl NNS_G3dGeBufferOP_N + ldrh r0, [r4, #0x1e] + ands r0, r0, #0x1 + beq _020BB150 + ldrb r12, [r6, #0x16] + mov r3, #0x8 + ldr r1, _020BB1BC ; =NNS_G3dSendTexSRT_FuncArray + str r3, [sp, #0x1c] + ldrh r2, [r4, #0x20] + add r0, r4, #0x2c + ldr r1, [r1, r12, lsl #0x2] + strh r2, [sp, #0x48] + ldrh r2, [r4, #0x22] + strh r2, [sp, #0x4a] + ldr r2, [r4, #0x24] + str r2, [sp, #0x4c] + ldr r2, [r4, #0x28] + str r2, [sp, #0x50] + ldrh r2, [r4, #0x1e] + ands r2, r2, #0x2 + orrne r2, r3, #0x1 + strne r2, [sp, #0x1c] + bne _020BB0F8 + ldr r2, [r0, #0x0] + str r2, [sp, #0x34] + ldr r2, [r0, #0x4] + add r0, r0, #0x8 + str r2, [sp, #0x38] +_020BB0F8: + ldrh r2, [r4, #0x1e] + ands r2, r2, #0x4 + ldrne r2, [sp, #0x1c] + orrne r2, r2, #0x2 + strne r2, [sp, #0x1c] + bne _020BB124 + ldrsh r2, [r0, #0x0] + strh r2, [sp, #0x3c] + ldrsh r2, [r0, #0x2] + add r0, r0, #0x4 + strh r2, [sp, #0x3e] +_020BB124: + ldrh r2, [r4, #0x1e] + ands r2, r2, #0x8 + ldreq r2, [r0, #0x0] + streq r2, [sp, #0x40] + ldreq r0, [r0, #0x4] + streq r0, [sp, #0x44] + ldrne r0, [sp, #0x1c] + orrne r0, r0, #0x4 + strne r0, [sp, #0x1c] + add r0, sp, #0x1c + blx r1 +_020BB150: + ldr r0, [r6, #0xc] + add r2, r6, r0 + ldrh r0, [r2, #0x6] + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r5, r0 + ldr r0, [r0, #0x4] + add r2, r2, r0 + ldr r0, [r2, #0x8] + ldr r1, [r2, #0xc] + add r0, r2, r0 + bl NNS_G3dGeSendDL + ldr r3, [r6, #0x20] + cmp r3, #0x1000 + addeq sp, sp, #0x6c + ldmeqia sp!, {r4-r7,pc} + add r1, sp, #0x60 + mov r0, #0x1b + mov r2, #0x3 + str r3, [sp, #0x60] + str r3, [sp, #0x64] + str r3, [sp, #0x68] + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x6c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020BB1B4: .word 0x00293130 +_020BB1B8: .word 0x00002B2A +_020BB1BC: .word NNS_G3dSendTexSRT_FuncArray + arm_func_end NNS_G3dDraw1Mat1Shp diff --git a/arm9/asm/NNS_G3D_3dsmax.s b/arm9/asm/NNS_G3D_3dsmax.s new file mode 100644 index 00000000..e54e2315 --- /dev/null +++ b/arm9/asm/NNS_G3D_3dsmax.s @@ -0,0 +1,466 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data +calcTexMtx_: ; 0x021067D0 + .word texmtxCalc_flag_ + .word texmtxCalc_flagS_ + .word texmtxCalc_flagR_ + .word texmtxCalc_flagRS_ + .word texmtxCalc_flagT_ + .word texmtxCalc_flagTS_ + .word texmtxCalc_flagTR_ + .word texmtxCalc_flagTRS_ + + .section .text + + arm_func_start NNSi_G3dSendTexSRT3dsMax +NNSi_G3dSendTexSRT3dsMax: ; 0x020BF42C + stmdb sp!, {r4,lr} + sub sp, sp, #0x50 + mov r4, r0 + ldr r0, [r4, #0x0] + mov r1, #0x0 + ands r0, r0, #0x8 + ldrne r0, _020BF568 ; =0x00101610 + mov r3, #0x3 + strne r0, [sp, #0x0] + ldreq r0, _020BF56C ; =0x00101810 + mov r2, #0x2 + streq r0, [sp, #0x0] + mov r0, #0x1000 + str r0, [sp, #0x44] + str r3, [sp, #0x4] + str r2, [sp, #0x48] + str r1, [sp, #0x40] + str r1, [sp, #0x34] + str r1, [sp, #0x30] + str r1, [sp, #0x2c] + str r1, [sp, #0x28] + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x14] + str r1, [sp, #0x10] + ldr r1, [r4, #0x0] + ldr r0, _020BF570 ; =calcTexMtx_ + and r1, r1, #0x7 + ldr r2, [r0, r1, lsl #0x2] + add r0, sp, #0x8 + mov r1, r4 + blx r2 + ldr r3, [r4, #0x30] + cmp r3, #0x1000 + beq _020BF4FC + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x8] + ldr r2, [r4, #0x30] + ldr r0, [sp, #0x38] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0xc] + ldr r1, [r4, #0x30] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x38] +_020BF4FC: + ldr r3, [r4, #0x34] + cmp r3, #0x1000 + beq _020BF54C + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x18] + ldr r2, [r4, #0x34] + ldr r0, [sp, #0x3c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x1c] + ldr r1, [r4, #0x34] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x3c] +_020BF54C: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0x12 + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x50 + ldmia sp!, {r4,pc} + .balign 4 +_020BF568: .word 0x00101610 +_020BF56C: .word 0x00101810 +_020BF570: .word calcTexMtx_ + arm_func_end NNSi_G3dSendTexSRT3dsMax + + local_arm_func_start texmtxCalc_flagTRS_ +texmtxCalc_flagTRS_: ; 0x020BF574 + mov r2, #0x1000 + str r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + bx lr + arm_func_end texmtxCalc_flagTRS_ + + local_arm_func_start texmtxCalc_flagTR_ +texmtxCalc_flagTR_: ; 0x020BF598 + ldr r2, [r1, #0x18] + mov r12, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r12, [r0, #0x4] + ldr r3, [r1, #0x18] + ldrh r2, [r1, #0x2c] + rsb r3, r3, #0x1000 + mul r2, r3, r2 + mov r2, r2, lsl #0x3 + str r2, [r0, #0x30] + ldr r2, [r1, #0x1c] + ldrh r1, [r1, #0x2e] + rsb r2, r2, #0x1000 + mul r1, r2, r1 + mov r1, r1, lsl #0x3 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + arm_func_end texmtxCalc_flagTR_ + + local_arm_func_start texmtxCalc_flagTS_ +texmtxCalc_flagTS_: ; 0x020BF5E8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + ldrsh r4, [r5, #0x22] + rsb r0, r2, #0x0 + rsb r1, r1, #0x0 + mov r0, r0, lsl #0xb + ldrsh r3, [r5, #0x20] + mov r1, r1, lsl #0xb + smull r7, lr, r4, r0 + smull r12, r4, r3, r1 + subs r7, r7, r12 + sbc r3, lr, r4 + mov r4, r7, lsr #0x8 + orr r4, r4, r3, lsl #0x18 + add r2, r4, r2, lsl #0xf + str r2, [r6, #0x30] + ldrsh r2, [r5, #0x22] + ldrsh r3, [r5, #0x20] + ldrh r12, [r5, #0x2e] + smull r4, r1, r2, r1 + smlal r4, r1, r3, r0 + mov r0, r4, lsr #0x8 + orr r0, r0, r1, lsl #0x18 + add r0, r0, r12, lsl #0xf + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end texmtxCalc_flagTS_ + + local_arm_func_start texmtxCalc_flagT_ +texmtxCalc_flagT_: ; 0x020BF6C8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r0, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r5, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r7, [r10, #0x0] + str r5, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + mul r0, r4, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + ldrh r3, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + rsb r0, r3, #0x0 + rsb r1, r1, #0x0 + mov r2, r1, lsl #0xb + mov r11, r0, lsl #0xb + smull r1, r0, r7, r11 + smull r8, r7, r5, r2 + smlal r8, r7, r4, r11 + mov r4, r8, lsr #0x8 + orr r4, r4, r7, lsl #0x18 + smull r5, r2, r6, r2 + subs r1, r1, r5 + sbc r0, r0, r2 + mov r1, r1, lsr #0x8 + orr r1, r1, r0, lsl #0x18 + add r0, r1, r3, lsl #0xf + str r0, [r10, #0x30] + ldrh r0, [r9, #0x2e] + add r0, r4, r0, lsl #0xf + str r0, [r10, #0x34] + bl FX_GetDivResult + rsb r1, r6, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end texmtxCalc_flagT_ + + local_arm_func_start texmtxCalc_flagRS_ +texmtxCalc_flagRS_: ; 0x020BF7C8 + mov r2, #0x1000 + str r2, [r0, #0x0] + str r2, [r0, #0x14] + mov r12, #0x0 + str r12, [r0, #0x4] + ldr r3, [r1, #0x24] + ldrh r2, [r1, #0x2c] + rsb r3, r3, #0x0 + mul r2, r3, r2 + mov r2, r2, lsl #0x4 + str r2, [r0, #0x30] + ldrh r2, [r1, #0x2e] + ldr r1, [r1, #0x28] + mul r2, r1, r2 + mov r1, r2, lsl #0x4 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + arm_func_end texmtxCalc_flagRS_ + + local_arm_func_start texmtxCalc_flagR_ +texmtxCalc_flagR_: ; 0x020BF810 + stmdb sp!, {r4-r6,lr} + ldr r2, [r1, #0x18] + mov r3, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r3, [r0, #0x4] + ldrh r5, [r1, #0x2c] + ldr r12, [r1, #0x24] + ldrh r2, [r1, #0x2e] + mul lr, r12, r5 + rsb r12, r5, #0x0 + mov r12, r12, lsl #0xb + ldr r4, [r1, #0x18] + sub r12, r12, lr + smull lr, r12, r4, r12 + ldr r6, [r1, #0x28] + mov r4, lr, lsr #0x8 + orr r4, r4, r12, lsl #0x18 + add r4, r4, r5, lsl #0xf + str r4, [r0, #0x30] + mul r4, r6, r2 + rsb r5, r2, #0x0 + ldr r2, [r1, #0x1c] + add r4, r4, r5, lsl #0xb + smull lr, r12, r2, r4 + mov r2, lr, lsr #0x8 + ldrh r1, [r1, #0x2e] + orr r2, r2, r12, lsl #0x18 + add r1, r2, r1, lsl #0xf + str r1, [r0, #0x34] + str r3, [r0, #0x10] + ldmia sp!, {r4-r6,pc} + arm_func_end texmtxCalc_flagR_ + + local_arm_func_start texmtxCalc_flagS_ +texmtxCalc_flagS_: ; 0x020BF894 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrh r2, [r5, #0x2c] + ldrh r7, [r5, #0x2e] + ldr r1, [r5, #0x28] + ldr r0, [r5, #0x24] + rsb r4, r2, #0x0 + mul r3, r1, r7 + rsb r1, r7, #0x0 + add r1, r3, r1, lsl #0xb + ldrsh r3, [r5, #0x20] + mov r7, r4, lsl #0xb + mul r4, r0, r2 + sub r0, r7, r4 + ldrsh lr, [r5, #0x22] + smull r12, r4, r3, r1 + smull r7, r3, lr, r0 + subs r7, r7, r12 + sbc r3, r3, r4 + mov r4, r7, lsr #0x8 + orr r4, r4, r3, lsl #0x18 + add r2, r4, r2, lsl #0xf + str r2, [r6, #0x30] + ldrsh r2, [r5, #0x22] + ldrsh r3, [r5, #0x20] + ldrh r12, [r5, #0x2e] + smull r4, r1, r2, r1 + smlal r4, r1, r3, r0 + mov r0, r4, lsr #0x8 + orr r0, r0, r1, lsl #0x18 + add r0, r0, r12, lsl #0xf + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end texmtxCalc_flagS_ + + local_arm_func_start texmtxCalc_flag_ +texmtxCalc_flag_: ; 0x020BF988 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r0, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r5, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r7, [r10, #0x0] + str r5, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + mul r0, r4, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + ldrh r1, [r9, #0x2c] + ldrh r8, [r9, #0x2e] + ldr r2, [r9, #0x28] + rsb r0, r1, #0x0 + mul r3, r2, r8 + rsb r2, r8, #0x0 + add r8, r3, r2, lsl #0xb + mov r0, r0, lsl #0xb + smull r3, r2, r5, r8 + smull r8, r5, r6, r8 + ldr r11, [r9, #0x24] + mul r12, r11, r1 + sub r0, r0, r12 + smlal r3, r2, r4, r0 + smull r4, r0, r7, r0 + subs r4, r4, r8 + sbc r0, r0, r5 + mov r4, r4, lsr #0x8 + orr r4, r4, r0, lsl #0x18 + add r0, r4, r1, lsl #0xf + str r0, [r10, #0x30] + ldrh r1, [r9, #0x2e] + mov r0, r3, lsr #0x8 + orr r0, r0, r2, lsl #0x18 + add r0, r0, r1, lsl #0xf + str r0, [r10, #0x34] + bl FX_GetDivResult + rsb r1, r6, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end texmtxCalc_flag_ diff --git a/arm9/asm/NNS_G3D_anm.s b/arm9/asm/NNS_G3D_anm.s new file mode 100644 index 00000000..512ef7c0 --- /dev/null +++ b/arm9/asm/NNS_G3D_anm.s @@ -0,0 +1,352 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global NNS_G3dAnmFmtNum +NNS_G3dAnmFmtNum: ; 0x02106594 + .byte 0x05, 0x00, 0x00, 0x00 + + .global NNS_G3dFuncAnmVisNsBvaDefault +NNS_G3dFuncAnmVisNsBvaDefault: ; 0x02106598 + .word NNSi_G3dAnmCalcNsBva + + .global NNS_G3dFuncAnmJntNsBcaDefault +NNS_G3dFuncAnmJntNsBcaDefault: ; 0x0210659C + .word NNSi_G3dAnmCalcNsBca + + .global NNS_G3dFuncAnmMatNsBtaDefault +NNS_G3dFuncAnmMatNsBtaDefault: ; 0x021065A0 + .word NNSi_G3dAnmCalcNsBta + + .global NNS_G3dFuncAnmMatNsBtpDefault +NNS_G3dFuncAnmMatNsBtpDefault: ; 0x021065A4 + .word NNSi_G3dAnmCalcNsBtp + + .global NNS_G3dFuncAnmMatNsBmaDefault +NNS_G3dFuncAnmMatNsBmaDefault: ; 0x021065A8 + .word NNSi_G3dAnmCalcNsBma + + .global NNS_G3dFuncBlendVisDefault +NNS_G3dFuncBlendVisDefault: ; 0x021065AC + .word NNSi_G3dAnmBlendVis + + .global NNS_G3dFuncBlendJntDefault +NNS_G3dFuncBlendJntDefault: ; 0x021065B0 + .word NNSi_G3dAnmBlendJnt + + .global NNS_G3dFuncBlendMatDefault +NNS_G3dFuncBlendMatDefault: ; 0x021065B4 + .word NNSi_G3dAnmBlendMat + + .global NNS_G3dAnmObjInitFuncArray +NNS_G3dAnmObjInitFuncArray: ; 0x021065B8 + .byte 0x4D, 0x00, 0x41, 0x4D + .word NNSi_G3dAnmObjInitNsBma + .byte 0x4D, 0x00, 0x50, 0x54 + .word NNSi_G3dAnmObjInitNsBtp + .byte 0x4D, 0x00, 0x41, 0x54 + .word NNSi_G3dAnmObjInitNsBta + .byte 0x56, 0x00, 0x41, 0x56 + .word NNSi_G3dAnmObjInitNsBva + .byte 0x4A, 0x00, 0x41, 0x43 + .word NNSi_G3dAnmObjInitNsBca + .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, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .text + + arm_func_start NNSi_G3dAnmBlendVis +NNSi_G3dAnmBlendVis: ; 0x020B8640 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r7, r0 + mov r0, #0x0 + mov r6, r1 + str r0, [r7, #0x0] + add r4, sp, #0x0 + mov r5, r2, lsl #0x1 + mov r8, #0x1 +_020B8664: + add r1, r5, r6 + ldrh r2, [r1, #0x1a] + ands r1, r2, #0x100 + beq _020B869C + ldr r3, [r6, #0xc] + mov r0, r4 + mov r1, r6 + and r2, r2, #0xff + blx r3 + ldr r2, [r7, #0x0] + ldr r1, [sp, #0x0] + mov r0, r8 + orr r1, r2, r1 + str r1, [r7, #0x0] +_020B869C: + ldr r6, [r6, #0x10] + cmp r6, #0x0 + bne _020B8664 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + arm_func_end NNSi_G3dAnmBlendVis + + arm_func_start NNSi_G3dAnmBlendJnt +NNSi_G3dAnmBlendJnt: ; 0x020B86B0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x5c + mov r9, r1 + ldr r3, [r9, #0x10] + mov r10, r0 + mov r8, r2 + cmp r3, #0x0 + bne _020B8704 + add r2, r9, r8, lsl #0x1 + ldrh r4, [r2, #0x1a] + and r2, r4, #0x300 + cmp r2, #0x100 + addne sp, sp, #0x5c + movne r0, #0x0 + ldmneia sp!, {r4-r11,pc} + ldr r3, [r9, #0xc] + and r2, r4, #0xff + blx r3 + add sp, sp, #0x5c + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020B8704: + mov r7, #0x0 + mov r3, r7 + mov r4, r9 + mov r2, r8, lsl #0x1 +_020B8714: + add r0, r2, r4 + ldrh r0, [r0, #0x1a] + and r0, r0, #0x300 + cmp r0, #0x100 + ldreq r0, [r4, #0x4] + moveq r1, r4 + ldr r4, [r4, #0x10] + addeq r7, r7, r0 + addeq r3, r3, #0x1 + cmp r4, #0x0 + bne _020B8714 + cmp r7, #0x0 + addeq sp, sp, #0x5c + moveq r0, #0x0 + ldmeqia sp!, {r4-r11,pc} + cmp r3, #0x1 + bne _020B877C + add r0, r1, r8, lsl #0x1 + ldrh r2, [r0, #0x1a] + ldr r3, [r1, #0xc] + mov r0, r10 + and r2, r2, #0xff + blx r3 + add sp, sp, #0x5c + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020B877C: + mov r1, r10 + mov r0, #0x0 + mov r2, #0x58 + bl MIi_CpuClearFast + mvn r0, #0x0 + str r0, [r10, #0x0] + add r5, sp, #0x0 + add r4, sp, #0x4 + add r11, sp, #0x10 +_020B87A0: + add r0, r9, r8, lsl #0x1 + ldrh r2, [r0, #0x1a] + and r0, r2, #0x300 + cmp r0, #0x100 + bne _020B8948 + ldr r0, [r9, #0x4] + cmp r0, #0x0 + ble _020B8948 + ldr r3, [r9, #0xc] + mov r0, r5 + mov r1, r9 + and r2, r2, #0xff + blx r3 + cmp r7, #0x1000 + ldreq r6, [r9, #0x4] + beq _020B87F0 + ldr r0, [r9, #0x4] + mov r1, r7 + bl FX_Div + mov r6, r0 +_020B87F0: + ldr r3, [sp, #0x0] + mov r1, r4 + mov r2, r6 + add r0, r10, #0x4 + and r3, r3, #0x1 + bl blendScaleVec_ + ldr r1, [sp, #0x0] + add r0, r10, #0x10 + and r3, r1, #0x8 + mov r1, r11 + mov r2, r6 + bl blendScaleVec_ + ldr r3, [sp, #0x0] + add r0, r10, #0x1c + add r1, sp, #0x1c + mov r2, r6 + and r3, r3, #0x10 + bl blendScaleVec_ + ldr r0, [sp, #0x0] + ands r0, r0, #0x4 + bne _020B8898 + ldr r0, [sp, #0x4c] + ldr r2, [r10, #0x4c] + smull r1, r0, r6, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r2, r1 + str r0, [r10, #0x4c] + ldr r0, [sp, #0x50] + ldr r2, [r10, #0x50] + smull r1, r0, r6, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r2, r1 + str r0, [r10, #0x50] + ldr r0, [sp, #0x54] + ldr r2, [r10, #0x54] + smull r1, r0, r6, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + add r0, r2, r1 + str r0, [r10, #0x54] +_020B8898: + ldr r0, [sp, #0x0] + ands r0, r0, #0x2 + bne _020B8920 + ldr r0, [sp, #0x28] + ldr r1, [r10, #0x28] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x28] + ldr r0, [sp, #0x2c] + ldr r1, [r10, #0x2c] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x2c] + ldr r0, [sp, #0x30] + ldr r1, [r10, #0x30] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x30] + ldr r0, [sp, #0x34] + ldr r1, [r10, #0x34] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x34] + ldr r0, [sp, #0x38] + ldr r1, [r10, #0x38] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x38] + ldr r0, [sp, #0x3c] + ldr r1, [r10, #0x3c] + mul r0, r6, r0 + add r0, r1, r0, asr #0xc + str r0, [r10, #0x3c] + b _020B8938 +_020B8920: + ldr r0, [r10, #0x28] + add r0, r0, r6 + str r0, [r10, #0x28] + ldr r0, [r10, #0x38] + add r0, r0, r6 + str r0, [r10, #0x38] +_020B8938: + ldr r1, [r10, #0x0] + ldr r0, [sp, #0x0] + and r0, r1, r0 + str r0, [r10, #0x0] +_020B8948: + ldr r9, [r9, #0x10] + cmp r9, #0x0 + bne _020B87A0 + add r0, r10, #0x28 + add r1, r10, #0x34 + add r2, r10, #0x40 + bl VEC_CrossProduct + add r0, r10, #0x28 + mov r1, r0 + bl VEC_Normalize + add r0, r10, #0x40 + mov r1, r0 + bl VEC_Normalize + add r0, r10, #0x40 + add r1, r10, #0x28 + add r2, r10, #0x34 + bl VEC_CrossProduct + mov r0, #0x1 + add sp, sp, #0x5c + ldmia sp!, {r4-r11,pc} + arm_func_end NNSi_G3dAnmBlendJnt + + arm_func_start blendScaleVec_ +blendScaleVec_: ; 0x020B8998 + cmp r3, #0x0 + beq _020B89C8 + ldr r1, [r0, #0x0] + add r1, r1, r2 + str r1, [r0, #0x0] + ldr r1, [r0, #0x4] + add r1, r1, r2 + str r1, [r0, #0x4] + ldr r1, [r0, #0x8] + add r1, r1, r2 + str r1, [r0, #0x8] + bx lr +_020B89C8: + ldr r3, [r1, #0x0] + ldr r12, [r0, #0x0] + mul r3, r2, r3 + add r3, r12, r3, asr #0xc + str r3, [r0, #0x0] + ldr r3, [r1, #0x4] + ldr r12, [r0, #0x4] + mul r3, r2, r3 + add r3, r12, r3, asr #0xc + str r3, [r0, #0x4] + ldr r1, [r1, #0x8] + ldr r3, [r0, #0x8] + mul r1, r2, r1 + add r1, r3, r1, asr #0xc + str r1, [r0, #0x8] + bx lr + arm_func_end blendScaleVec_ + + arm_func_start NNSi_G3dAnmBlendMat +NNSi_G3dAnmBlendMat: ; 0x020B8A08 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + mov r5, r1 + mov r0, #0x0 + mov r4, r2, lsl #0x1 + mov r7, #0x1 +_020B8A24: + add r1, r4, r5 + ldrh r2, [r1, #0x1a] + ands r1, r2, #0x100 + beq _020B8A4C + ldr r3, [r5, #0xc] + mov r0, r6 + mov r1, r5 + and r2, r2, #0xff + blx r3 + mov r0, r7 +_020B8A4C: + ldr r5, [r5, #0x10] + cmp r5, #0x0 + bne _020B8A24 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNSi_G3dAnmBlendMat diff --git a/arm9/asm/NNS_G3D_basic.s b/arm9/asm/NNS_G3D_basic.s new file mode 100644 index 00000000..a9849429 --- /dev/null +++ b/arm9/asm/NNS_G3D_basic.s @@ -0,0 +1,62 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G3dGetJointScaleBasic +NNSi_G3dGetJointScaleBasic: ; 0x020BE62C + ands r2, r3, #0x4 + ldrne r1, [r0, #0x0] + orrne r1, r1, #0x1 + strne r1, [r0, #0x0] + bne _020BE658 + ldr r2, [r1, #0x0] + str r2, [r0, #0x4] + ldr r2, [r1, #0x4] + str r2, [r0, #0x8] + ldr r1, [r1, #0x8] + str r1, [r0, #0xc] +_020BE658: + ldr r1, [r0, #0x0] + orr r1, r1, #0x18 + str r1, [r0, #0x0] + bx lr + arm_func_end NNSi_G3dGetJointScaleBasic + + arm_func_start NNSi_G3dSendJointSRTBasic +NNSi_G3dSendJointSRTBasic: ; 0x020BE668 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x0] + ands r0, r1, #0x4 + bne _020BE6AC + ands r0, r1, #0x2 + bne _020BE698 + add r1, r4, #0x28 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N + b _020BE6C4 +_020BE698: + add r1, r4, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N + b _020BE6C4 +_020BE6AC: + ands r0, r1, #0x2 + bne _020BE6C4 + add r1, r4, #0x28 + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N +_020BE6C4: + ldr r0, [r4, #0x0] + ands r0, r0, #0x1 + ldmneia sp!, {r4,pc} + add r1, r4, #0x4 + mov r0, #0x1b + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N + ldmia sp!, {r4,pc} + arm_func_end NNSi_G3dSendJointSRTBasic diff --git a/arm9/asm/NNS_G3D_cgtool.s b/arm9/asm/NNS_G3D_cgtool.s new file mode 100644 index 00000000..e17cfaf5 --- /dev/null +++ b/arm9/asm/NNS_G3D_cgtool.s @@ -0,0 +1,23 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global NNS_G3dSendJointSRT_FuncArray +NNS_G3dSendJointSRT_FuncArray: ; 0x02106608 + .word NNSi_G3dSendJointSRTBasic + .word NNSi_G3dSendJointSRTMaya + .word NNSi_G3dSendJointSRTSi3d + + .global NNS_G3dGetJointScale_FuncArray +NNS_G3dGetJointScale_FuncArray: ; 0x02106614 + .word NNSi_G3dGetJointScaleBasic + .word NNSi_G3dGetJointScaleMaya + .word NNSi_G3dGetJointScaleSi3d + + .global NNS_G3dSendTexSRT_FuncArray +NNS_G3dSendTexSRT_FuncArray: ; 0x02106620 + .word NNSi_G3dSendTexSRTMaya + .word NNSi_G3dSendTexSRTSi3d + .word NNSi_G3dSendTexSRT3dsMax + .word NNSi_G3dSendTexSRTXsi diff --git a/arm9/asm/NNS_G3D_gecom.s b/arm9/asm/NNS_G3D_gecom.s new file mode 100644 index 00000000..2caeb535 --- /dev/null +++ b/arm9/asm/NNS_G3D_gecom.s @@ -0,0 +1,197 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global NNS_G3dGeBuffer +NNS_G3dGeBuffer: ; 0x021D1C80 + .space 0x4 + + .global NNS_G3dFlagGXDmaAsync +NNS_G3dFlagGXDmaAsync: ; 0x021D1C84 + .space 0x4 + + .global NNS_G3dFlagUseFastDma +NNS_G3dFlagUseFastDma: ; 0x021D1C88 + .space 0x4 + + .section .text + + arm_func_start NNS_G3dGeBufferOP_N +NNS_G3dGeBufferOP_N: ; 0x020BB1C0 + stmdb sp!, {r4-r6,lr} + ldr r3, _020BB2A4 ; =NNS_G3dGeBuffer + mov r6, r0 + ldr r12, [r3, #0x0] + mov r5, r1 + mov r4, r2 + cmp r12, #0x0 + beq _020BB278 + ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB24C + ldr r2, [r12, #0x0] + add r0, r2, #0x1 + add r1, r0, r4 + cmp r1, #0xc0 + bhi _020BB24C + str r0, [r12, #0x0] + ldr r0, [r3, #0x0] + cmp r4, #0x0 + add r0, r0, r2, lsl #0x2 + str r6, [r0, #0x4] + ldmeqia sp!, {r4-r6,pc} + ldr r2, [r3, #0x0] + mov r0, r5 + ldr r1, [r2], #0x4 + add r1, r2, r1, lsl #0x2 + mov r2, r4, lsl #0x2 + bl MIi_CpuCopyFast + ldr r0, _020BB2A4 ; =NNS_G3dGeBuffer + ldr r1, [r0, #0x0] + ldr r0, [r1, #0x0] + add r0, r0, r4 + str r0, [r1, #0x0] + ldmia sp!, {r4-r6,pc} +_020BB24C: + ldr r0, [r12, #0x0] + cmp r0, #0x0 + beq _020BB260 + bl NNS_G3dGeFlushBuffer + b _020BB28C +_020BB260: + ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB28C + bl NNS_G3dGeWaitSendDL + b _020BB28C +_020BB278: + ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB28C + bl NNS_G3dGeWaitSendDL +_020BB28C: + ldr r1, _020BB2AC ; =0x04000400 + mov r0, r5 + mov r2, r4, lsl #0x2 + str r6, [r1, #0x0] + bl MIi_CpuSend32 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BB2A4: .word NNS_G3dGeBuffer +_020BB2A8: .word NNS_G3dFlagGXDmaAsync +_020BB2AC: .word 0x04000400 + arm_func_end NNS_G3dGeBufferOP_N + + arm_func_start NNS_G3dGeSendDL +NNS_G3dGeSendDL: ; 0x020BB2B0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r5, r0 + cmp r4, #0x100 + blo _020BB2DC + ldr r1, _020BB360 ; =GXi_DmaId + mvn r0, #0x0 + ldr r1, [r1, #0x0] + cmp r1, r0 + bne _020BB2F8 +_020BB2DC: + mov r2, r4, lsr #0x2 + ldr r0, [r5, #0x0] + add r1, r5, #0x4 + sub r2, r2, #0x1 + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020BB2F8: + bl NNS_G3dGeFlushBuffer + ldr r0, _020BB364 ; =NNS_G3dFlagUseFastDma + ldr r1, _020BB368 ; =NNS_G3dFlagGXDmaAsync + ldr r0, [r0, #0x0] + mov r2, #0x1 + str r2, [r1, #0x0] + cmp r0, #0x0 + beq _020BB33C + ldr r0, _020BB360 ; =GXi_DmaId + str r1, [sp, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020BB36C ; =simpleUnlock_ + mov r1, r5 + mov r2, r4 + bl MI_SendGXCommandAsyncFast + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020BB33C: + ldr r0, _020BB360 ; =GXi_DmaId + str r1, [sp, #0x0] + ldr r0, [r0, #0x0] + ldr r3, _020BB36C ; =simpleUnlock_ + mov r1, r5 + mov r2, r4 + bl MI_SendGXCommandAsync + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BB360: .word GXi_DmaId +_020BB364: .word NNS_G3dFlagUseFastDma +_020BB368: .word NNS_G3dFlagGXDmaAsync +_020BB36C: .word simpleUnlock_ + arm_func_end NNS_G3dGeSendDL + + arm_func_start simpleUnlock_ +simpleUnlock_: ; 0x020BB370 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + arm_func_end simpleUnlock_ + + arm_func_start NNS_G3dGeWaitSendDL +NNS_G3dGeWaitSendDL: ; 0x020BB37C + ldr r0, _020BB390 ; =NNS_G3dFlagGXDmaAsync +_020BB380: + ldr r1, [r0, #0x0] + cmp r1, #0x0 + bne _020BB380 + bx lr + .balign 4 +_020BB390: .word NNS_G3dFlagGXDmaAsync + arm_func_end NNS_G3dGeWaitSendDL + + arm_func_start NNS_G3dGeFlushBuffer +NNS_G3dGeFlushBuffer: ; 0x020BB394 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020BB3FC ; =NNS_G3dFlagGXDmaAsync + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020BB3B0 + bl NNS_G3dGeWaitSendDL +_020BB3B0: + ldr r0, _020BB400 ; =NNS_G3dGeBuffer + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r2, [r0, #0x0] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r1, _020BB404 ; =0x04000400 + add r0, r0, #0x4 + mov r2, r2, lsl #0x2 + bl MIi_CpuSend32 + ldr r0, _020BB400 ; =NNS_G3dGeBuffer + mov r1, #0x0 + ldr r0, [r0, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BB3FC: .word NNS_G3dFlagGXDmaAsync +_020BB400: .word NNS_G3dGeBuffer +_020BB404: .word 0x04000400 + arm_func_end NNS_G3dGeFlushBuffer diff --git a/arm9/asm/NNS_G3D_glbstate.s b/arm9/asm/NNS_G3D_glbstate.s new file mode 100644 index 00000000..3dbb215f --- /dev/null +++ b/arm9/asm/NNS_G3D_glbstate.s @@ -0,0 +1,355 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global NNS_G3dGlb +NNS_G3dGlb: ; 0x021CED18 + .space 0x264 + + .section .text + + arm_func_start NNS_G3dGlbGetViewPort +NNS_G3dGlbGetViewPort: ; 0x020B8200 + cmp r0, #0x0 + ldrne ip, _020B8260 ; =NNS_G3dGlb + ldrne r12, [r12, #0xa0] + andne r12, r12, #0xff + strne r12, [r0, #0x0] + cmp r1, #0x0 + ldrne r0, _020B8260 ; =NNS_G3dGlb + ldrne r0, [r0, #0xa0] + movne r0, r0, lsr #0x8 + andne r0, r0, #0xff + strne r0, [r1, #0x0] + cmp r2, #0x0 + ldrne r0, _020B8260 ; =NNS_G3dGlb + ldrne r0, [r0, #0xa0] + movne r0, r0, lsr #0x10 + andne r0, r0, #0xff + strne r0, [r2, #0x0] + cmp r3, #0x0 + ldrne r0, _020B8260 ; =NNS_G3dGlb + ldrne r0, [r0, #0xa0] + movne r0, r0, lsr #0x18 + andne r0, r0, #0xff + strne r0, [r3, #0x0] + bx lr + .balign 4 +_020B8260: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbGetViewPort + + arm_func_start NNS_G3dGlbGetInvWV +NNS_G3dGlbGetInvWV: ; 0x020B8264 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B829C ; =NNS_G3dGlb + ldr r0, [r0, #0xfc] + ands r0, r0, #0x80 + bne _020B8290 + bl calcSrtCameraMtx_ + ldr r0, _020B829C ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + orr r1, r1, #0x80 + str r1, [r0, #0xfc] +_020B8290: + ldr r0, _020B82A0 ; =NNS_G3dGlb + 0x160 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B829C: .word NNS_G3dGlb +_020B82A0: .word NNS_G3dGlb + 0x160 + arm_func_end NNS_G3dGlbGetInvWV + + arm_func_start NNS_G3dGlbGetWV +NNS_G3dGlbGetWV: ; 0x020B82A4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B82DC ; =NNS_G3dGlb + ldr r0, [r0, #0xfc] + ands r0, r0, #0x80 + bne _020B82D0 + bl calcSrtCameraMtx_ + ldr r0, _020B82DC ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + orr r1, r1, #0x80 + str r1, [r0, #0xfc] +_020B82D0: + ldr r0, _020B82E0 ; =NNS_G3dGlb + 0x130 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B82DC: .word NNS_G3dGlb +_020B82E0: .word NNS_G3dGlb + 0x130 + arm_func_end NNS_G3dGlbGetWV + + arm_func_start calcSrtCameraMtx_ +calcSrtCameraMtx_: ; 0x020B82E4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B8330 ; =NNS_G3dGlb + 0xBC + ldr r1, _020B8334 ; =NNS_G3dGlb + 0x4C + ldr r2, _020B8338 ; =NNS_G3dGlb + 0x130 + bl MTX_Concat43 + ldr r3, _020B833C ; =NNS_G3dGlb + ldr r0, _020B8338 ; =NNS_G3dGlb + 0x130 + ldr r2, [r3, #0xf4] + mov r1, r0 + str r2, [sp, #0x0] + ldr r2, [r3, #0xec] + ldr r3, [r3, #0xf0] + bl MTX_ScaleApply43 + ldr r0, _020B8338 ; =NNS_G3dGlb + 0x130 + ldr r1, _020B8340 ; =NNS_G3dGlb + 0x160 + bl MTX_Inverse43 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B8330: .word NNS_G3dGlb + 0xBC +_020B8334: .word NNS_G3dGlb + 0x4C +_020B8338: .word NNS_G3dGlb + 0x130 +_020B833C: .word NNS_G3dGlb +_020B8340: .word NNS_G3dGlb + 0x160 + arm_func_end calcSrtCameraMtx_ + + arm_func_start NNS_G3dGlbGetInvV +NNS_G3dGlbGetInvV: ; 0x020B8344 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020B8384 ; =NNS_G3dGlb + ldr r0, [r0, #0xfc] + ands r0, r0, #0x8 + bne _020B8378 + ldr r0, _020B8388 ; =NNS_G3dGlb + 0x4C + ldr r1, _020B838C ; =NNS_G3dGlb + 0x100 + bl MTX_Inverse43 + ldr r0, _020B8384 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + orr r1, r1, #0x8 + str r1, [r0, #0xfc] +_020B8378: + ldr r0, _020B838C ; =NNS_G3dGlb + 0x100 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B8384: .word NNS_G3dGlb +_020B8388: .word NNS_G3dGlb + 0x4C +_020B838C: .word NNS_G3dGlb + 0x100 + arm_func_end NNS_G3dGlbGetInvV + + arm_func_start NNS_G3dGlbPolygonAttr +NNS_G3dGlbPolygonAttr: ; 0x020B8390 + orr r0, r0, r1, lsl #0x4 + ldr r1, [sp, #0x4] + orr r0, r0, r2, lsl #0x6 + orr r0, r1, r0 + ldr r2, [sp, #0x0] + orr r1, r0, r3, lsl #0x18 + ldr r0, _020B83B8 ; =NNS_G3dGlb + orr r1, r1, r2, lsl #0x10 + str r1, [r0, #0x9c] + bx lr + .balign 4 +_020B83B8: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbPolygonAttr + + arm_func_start NNS_G3dGlbMaterialColorSpecEmi +NNS_G3dGlbMaterialColorSpecEmi: ; 0x020B83BC + cmp r2, #0x0 + movne r2, #0x1 + orr r1, r0, r1, lsl #0x10 + moveq r2, #0x0 + ldr r0, _020B83DC ; =NNS_G3dGlb + orr r1, r1, r2, lsl #0xf + str r1, [r0, #0x98] + bx lr + .balign 4 +_020B83DC: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbMaterialColorSpecEmi + + arm_func_start NNS_G3dGlbMaterialColorDiffAmb +NNS_G3dGlbMaterialColorDiffAmb: ; 0x020B83E0 + cmp r2, #0x0 + movne r2, #0x1 + orr r1, r0, r1, lsl #0x10 + moveq r2, #0x0 + ldr r0, _020B8400 ; =NNS_G3dGlb + orr r1, r1, r2, lsl #0xf + str r1, [r0, #0x94] + bx lr + .balign 4 +_020B8400: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbMaterialColorDiffAmb + + arm_func_start NNS_G3dGlbLightColor +NNS_G3dGlbLightColor: ; 0x020B8404 + ldr r2, _020B8414 ; =NNS_G3dGlb + 0xA8 + orr r1, r1, r0, lsl #0x1e + str r1, [r2, r0, lsl #0x2] + bx lr + .balign 4 +_020B8414: .word NNS_G3dGlb + 0xA8 + arm_func_end NNS_G3dGlbLightColor + + arm_func_start NNS_G3dGlbLightVector +NNS_G3dGlbLightVector: ; 0x020B8418 + stmdb sp!, {r4,lr} + ldr ip, _020B8444 ; =0x000003FF + ldr lr, _020B8448 ; =NNS_G3dGlb + 0x80 + and r4, r12, r1, asr #0x3 + and r1, r12, r2, asr #0x3 + and r2, r12, r3, asr #0x3 + orr r1, r4, r1, lsl #0xa + orr r1, r1, r2, lsl #0x14 + orr r1, r1, r0, lsl #0x1e + str r1, [lr, r0, lsl #0x2] + ldmia sp!, {r4,pc} + .balign 4 +_020B8444: .word 0x000003FF +_020B8448: .word NNS_G3dGlb + 0x80 + arm_func_end NNS_G3dGlbLightVector + + arm_func_start NNS_G3dGlbSetBaseScale +NNS_G3dGlbSetBaseScale: ; 0x020B844C + ldr r3, _020B846C ; =NNS_G3dGlb + 0xEC + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + ldr r0, _020B8470 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + bic r1, r1, #0xa4 + str r1, [r0, #0xfc] + bx lr + .balign 4 +_020B846C: .word NNS_G3dGlb + 0xEC +_020B8470: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbSetBaseScale + + arm_func_start NNS_G3dGlbSetBaseTrans +NNS_G3dGlbSetBaseTrans: ; 0x020B8474 + ldr r3, _020B8494 ; =NNS_G3dGlb + 0xE0 + ldmia r0, {r0-r2} + stmia r3, {r0-r2} + ldr r0, _020B8498 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + bic r1, r1, #0xa4 + str r1, [r0, #0xfc] + bx lr + .balign 4 +_020B8494: .word NNS_G3dGlb + 0xE0 +_020B8498: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbSetBaseTrans + + arm_func_start NNS_G3dGlbFlushP +NNS_G3dGlbFlushP: ; 0x020B849C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, _020B84D4 ; =NNS_G3dGlb + mov r2, #0x3e + ldr r0, [r1], #0x4 + bl NNS_G3dGeBufferOP_N + ldr r0, _020B84D4 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + bic r1, r1, #0x1 + str r1, [r0, #0xfc] + bic r1, r1, #0x2 + str r1, [r0, #0xfc] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020B84D4: .word NNS_G3dGlb + arm_func_end NNS_G3dGlbFlushP + + arm_func_start NNS_G3dGlbInit +NNS_G3dGlbInit: ; 0x020B84D8 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r8, _020B85F4 ; =0x17101610 + ldr r1, _020B85F8 ; =NNS_G3dGlb + ldr r5, _020B85FC ; =0x32323232 + ldr r4, _020B8600 ; =0x60293130 + ldr r3, _020B8604 ; =0x33333333 + ldr r2, _020B8608 ; =0x002A1B19 + mov r7, #0x0 + mov r6, #0x2 + ldr r0, _020B860C ; =NNS_G3dGlb + 0x4C + str r8, [r1, #0x0] + str r7, [r1, #0x4] + str r6, [r1, #0x48] + str r5, [r1, #0x7c] + str r4, [r1, #0x90] + str r3, [r1, #0xa4] + str r2, [r1, #0xb8] + bl MTX_Identity43_ + ldr r0, _020B8610 ; =NNS_G3dGlb + 0x8 + bl MTX_Identity44_ + mov r2, r7 + ldr r1, _020B85F8 ; =NNS_G3dGlb + ldr r7, _020B8614 ; =0x4210C210 + ldr r0, _020B8618 ; =0x40000200 + ldr lr, _020B861C ; =0x2D8B62D8 + ldr sb, _020B8620 ; =0x800001FF + ldr r8, _020B8624 ; =0xC0080000 + ldr r6, _020B8628 ; =0x001F008F + ldr r5, _020B862C ; =0xBFFF0000 + ldr r4, _020B8630 ; =0x00007FFF + ldr ip, _020B8634 ; =0x800003E0 + ldr r3, _020B8638 ; =0xC0007C00 + str r0, [r1, #0x84] + str lr, [r1, #0x80] + mov lr, #0x4000001f + ldr r0, _020B863C ; =NNS_G3dGlb + 0xBC + str r9, [r1, #0x88] + str r8, [r1, #0x8c] + str r7, [r1, #0x94] + str r7, [r1, #0x98] + str r6, [r1, #0x9c] + str r5, [r1, #0xa0] + str r4, [r1, #0xa8] + str lr, [r1, #0xac] + str r12, [r1, #0xb0] + str r3, [r1, #0xb4] + str r2, [r1, #0xe0] + str r2, [r1, #0xe4] + str r2, [r1, #0xe8] + bl MTX_Identity33_ + mov r3, #0x1000 + ldr r0, _020B85F8 ; =NNS_G3dGlb + mov r2, #0x0 + rsb r1, r3, #0x0 + str r3, [r0, #0xec] + str r3, [r0, #0xf0] + str r3, [r0, #0xf4] + str r2, [r0, #0xf8] + str r2, [r0, #0xfc] + str r2, [r0, #0x248] + str r2, [r0, #0x244] + str r2, [r0, #0x240] + str r2, [r0, #0x254] + str r2, [r0, #0x24c] + str r3, [r0, #0x250] + str r2, [r0, #0x25c] + str r2, [r0, #0x258] + str r1, [r0, #0x260] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020B85F4: .word 0x17101610 +_020B85F8: .word NNS_G3dGlb +_020B85FC: .word 0x32323232 +_020B8600: .word 0x60293130 +_020B8604: .word 0x33333333 +_020B8608: .word 0x002A1B19 +_020B860C: .word NNS_G3dGlb + 0x4C +_020B8610: .word NNS_G3dGlb + 0x8 +_020B8614: .word 0x4210C210 +_020B8618: .word 0x40000200 +_020B861C: .word 0x2D8B62D8 +_020B8620: .word 0x800001FF +_020B8624: .word 0xC0080000 +_020B8628: .word 0x001F008F +_020B862C: .word 0xBFFF0000 +_020B8630: .word 0x00007FFF +_020B8634: .word 0x800003E0 +_020B8638: .word 0xC0007C00 +_020B863C: .word NNS_G3dGlb + 0xBC + arm_func_end NNS_G3dGlbInit diff --git a/arm9/asm/NNS_G3D_kernel.s b/arm9/asm/NNS_G3D_kernel.s new file mode 100644 index 00000000..ebf3d210 --- /dev/null +++ b/arm9/asm/NNS_G3D_kernel.s @@ -0,0 +1,858 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G3dReleaseMdlSet +NNS_G3dReleaseMdlSet: ; 0x020B772C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r0 + ldrb r0, [r6, #0x9] + mov r5, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r7,pc} + add r4, r6, #0x8 +_020B7750: + ldrh r0, [r6, #0xe] + ldrh r1, [r4, r0] + add r0, r4, r0 + mla r0, r1, r5, r0 + ldr r0, [r0, #0x4] + add r7, r6, r0 + mov r0, r7 + bl NNS_G3dReleaseMdlTex + mov r0, r7 + bl NNS_G3dReleaseMdlPltt + ldrb r0, [r6, #0x9] + add r5, r5, #0x1 + cmp r5, r0 + blo _020B7750 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G3dReleaseMdlSet + + arm_func_start NNS_G3dBindMdlSet +NNS_G3dBindMdlSet: ; 0x020B7790 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + ldrb r0, [r8, #0x9] + mov r7, r1 + mov r5, #0x1 + cmp r0, #0x0 + mov r6, #0x0 + bls _020B7800 + add r4, r8, #0x8 +_020B77B8: + ldrh r0, [r8, #0xe] + mov r1, r7 + ldrh r2, [r4, r0] + add r0, r4, r0 + mla r0, r2, r6, r0 + ldr r0, [r0, #0x4] + add r9, r8, r0 + mov r0, r9 + bl NNS_G3dBindMdlTex + and r5, r5, r0 + mov r0, r9 + mov r1, r7 + bl NNS_G3dBindMdlPltt + ldrb r1, [r8, #0x9] + add r6, r6, #0x1 + and r5, r5, r0 + cmp r6, r1 + blo _020B77B8 +_020B7800: + mov r0, r5 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + arm_func_end NNS_G3dBindMdlSet + + arm_func_start NNS_G3dReleaseMdlPltt +NNS_G3dReleaseMdlPltt: ; 0x020B780C + ldr r2, [r0, #0x8] + mov r1, #0x0 + add r2, r0, r2 + ldrh r0, [r2, #0x2] + add r12, r2, r0 + ldrb r0, [r12, #0x1] + cmp r0, #0x0 + bxls lr +_020B782C: + ldrh r2, [r12, #0x6] + ldrh r0, [r12, r2] + add r2, r12, r2 + add r2, r2, #0x4 + mla r3, r0, r1, r2 + ldrb r0, [r3, #0x3] + add r1, r1, #0x1 + ands r2, r0, #0x1 + bicne r0, r0, #0x1 + strneb r0, [r3, #0x3] + ldrb r0, [r12, #0x1] + cmp r1, r0 + blo _020B782C + bx lr + arm_func_end NNS_G3dReleaseMdlPltt + + arm_func_start NNS_G3dBindMdlPltt +NNS_G3dBindMdlPltt: ; 0x020B7864 + stmdb sp!, {r4-r10,lr} + ldr r2, [r0, #0x8] + mov r10, r1 + add r9, r0, r2 + ldrh r0, [r9, #0x2] + mov r6, #0x1 + mov r7, #0x0 + add r8, r9, r0 + ldrb r0, [r8, #0x1] + cmp r0, #0x0 + bls _020B7908 + mov r5, r7 + mov r4, r7 +_020B7898: + ldrh r1, [r8, #0x6] + ldrh r0, [r10, #0x34] + add r2, r8, r1 + ldrh r1, [r2, #0x2] + add r0, r10, r0 + add r1, r2, r1 + add r1, r1, r5 + bl NNS_G3dGetResDataByName + movs r3, r0 + beq _020B78F0 + ldrh r1, [r8, #0x6] + ldrh r0, [r8, r1] + add r1, r8, r1 + add r1, r1, #0x4 + mla r1, r0, r7, r1 + ldrb r0, [r1, #0x3] + ands r0, r0, #0x1 + bne _020B78F4 + mov r0, r9 + mov r2, r10 + bl bindMdlPltt_Internal_ + b _020B78F4 +_020B78F0: + mov r6, r4 +_020B78F4: + ldrb r0, [r8, #0x1] + add r7, r7, #0x1 + add r5, r5, #0x10 + cmp r7, r0 + blo _020B7898 +_020B7908: + mov r0, r6 + ldmia sp!, {r4-r10,pc} + arm_func_end NNS_G3dBindMdlPltt + + arm_func_start bindMdlPltt_Internal_ +bindMdlPltt_Internal_: ; 0x020B7910 + stmdb sp!, {r4-r6,lr} + ldrh r5, [r1, #0x0] + ldr r2, [r2, #0x2c] + ldrh r4, [r3, #0x2] + mov r2, r2, lsl #0x10 + add r12, r0, r5 + mov r5, r2, lsr #0x10 + ands r2, r4, #0x1 + ldrh r4, [r3, #0x0] + moveq r3, r5, lsl #0xf + moveq r5, r3, lsr #0x10 + moveq r2, r4, lsl #0xf + moveq r4, r2, lsr #0x10 + ldrb r3, [r1, #0x2] + mov r2, #0x0 + cmp r3, #0x0 + bls _020B7994 + add r3, r4, r5 + mov r3, r3, lsl #0x10 + add r6, r0, #0x4 + mov r4, r3, lsr #0x10 +_020B7964: + ldrh r5, [r0, #0xa] + ldrb r3, [r12, r2] + add r2, r2, #0x1 + ldrh lr, [r6, r5] + add r5, r6, r5 + mla r3, lr, r3, r5 + ldr r3, [r3, #0x4] + add r3, r0, r3 + strh r4, [r3, #0x1c] + ldrb r3, [r1, #0x2] + cmp r2, r3 + blo _020B7964 +_020B7994: + ldrb r0, [r1, #0x3] + orr r0, r0, #0x1 + strb r0, [r1, #0x3] + ldmia sp!, {r4-r6,pc} + arm_func_end bindMdlPltt_Internal_ + + arm_func_start NNS_G3dReleaseMdlTex +NNS_G3dReleaseMdlTex: ; 0x020B79A4 + stmdb sp!, {r4-r6,lr} + ldr r2, [r0, #0x8] + mov r4, #0x0 + ldrh r1, [r0, r2] + add r6, r0, r2 + add r5, r6, r1 + ldrb r0, [r5, #0x1] + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020B79C8: + ldrh r1, [r5, #0x6] + ldrh r0, [r5, r1] + add r1, r5, r1 + add r1, r1, #0x4 + mla r1, r0, r4, r1 + ldrb r0, [r1, #0x3] + ands r0, r0, #0x1 + beq _020B79F0 + mov r0, r6 + bl releaseMdlTex_Internal_ +_020B79F0: + ldrb r0, [r5, #0x1] + add r4, r4, #0x1 + cmp r4, r0 + blo _020B79C8 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dReleaseMdlTex + + arm_func_start NNS_G3dBindMdlTex +NNS_G3dBindMdlTex: ; 0x020B7A04 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + mov r10, r1 + ldrh r1, [r0, r2] + add r9, r0, r2 + mov r11, #0x1 + add r8, r9, r1 + ldrb r0, [r8, #0x1] + mov r7, #0x0 + cmp r0, #0x0 + bls _020B7AAC + mov r6, r7 + mov r4, r7 + add r5, r10, #0x3c +_020B7A40: + ldrh r1, [r8, #0x6] + mov r0, r5 + add r2, r8, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl NNS_G3dGetResDataByName + movs r3, r0 + beq _020B7A94 + ldrh r1, [r8, #0x6] + ldrh r0, [r8, r1] + add r1, r8, r1 + add r1, r1, #0x4 + mla r1, r0, r7, r1 + ldrb r0, [r1, #0x3] + ands r0, r0, #0x1 + bne _020B7A98 + mov r0, r9 + mov r2, r10 + bl bindMdlTex_Internal_ + b _020B7A98 +_020B7A94: + mov r11, r4 +_020B7A98: + ldrb r0, [r8, #0x1] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020B7A40 +_020B7AAC: + mov r0, r11 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end NNS_G3dBindMdlTex + + arm_func_start releaseMdlTex_Internal_ +releaseMdlTex_Internal_: ; 0x020B7AB8 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrh r4, [r1, #0x0] + ldrb r2, [r1, #0x2] + mov r3, #0x0 + add r12, r0, r4 + cmp r2, #0x0 + bls _020B7B28 + add r2, r0, #0x4 + mov r5, #0x1000 + ldr lr, _020B7B3C ; =0xC00F0000 +_020B7AE4: + ldrh r7, [r0, #0xa] + ldrb r4, [r12, r3] + add r3, r3, #0x1 + ldrh r6, [r2, r7] + add r7, r2, r7 + mla r4, r6, r4, r7 + ldr r4, [r4, #0x4] + add r6, r0, r4 + ldr r4, [r6, #0x14] + and r4, r4, lr + str r4, [r6, #0x14] + str r5, [r6, #0x24] + ldr r4, [r6, #0x24] + str r4, [r6, #0x28] + ldrb r4, [r1, #0x2] + cmp r3, r4 + blo _020B7AE4 +_020B7B28: + ldrb r0, [r1, #0x3] + bic r0, r0, #0x1 + strb r0, [r1, #0x3] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B7B3C: .word 0xC00F0000 + arm_func_end releaseMdlTex_Internal_ + + arm_func_start bindMdlTex_Internal_ +bindMdlTex_Internal_: ; 0x020B7B40 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r11, r1 + mov r9, r3 + ldr r1, [r9, #0x0] + mov r10, r0 + and r0, r1, #0x1c000000 + cmp r0, #0x14000000 + ldrh r3, [r11, #0x0] + ldrne r1, [r2, #0x8] + mov r8, #0x0 + add r0, r10, r3 + str r0, [sp, #0x4] + ldrne r0, _020B7C50 ; =0x0000FFFF + andne r0, r1, r0 + strne r0, [sp, #0x0] + ldreq r1, [r2, #0x18] + ldreq r0, _020B7C50 ; =0x0000FFFF + andeq r0, r1, r0 + streq r0, [sp, #0x0] + ldrb r0, [r11, #0x2] + cmp r0, #0x0 + bls _020B7C3C + mov r4, #0x1000 + add r5, r10, #0x4 +_020B7BA4: + ldrh r6, [r10, #0xa] + ldr r0, [sp, #0x4] + ldr r1, [r9, #0x0] + ldrb r2, [r0, r8] + ldrh r3, [r5, r6] + ldr r0, [sp, #0x0] + add r6, r5, r6 + add r0, r1, r0 + mla r1, r3, r2, r6 + ldr r1, [r1, #0x4] + add r6, r10, r1 + ldr r1, [r6, #0x14] + orr r0, r1, r0 + str r0, [r6, #0x14] + ldr r3, [r9, #0x4] + ldr r0, _020B7C54 ; =0x000007FF + ldrh r1, [r6, #0x20] + and r2, r3, r0 + and r7, r0, r3, lsr #0xb + cmp r2, r1 + moveq r0, r4 + beq _020B7C08 + mov r0, r2, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020B7C08: + str r0, [r6, #0x24] + ldrh r1, [r6, #0x22] + cmp r7, r1 + moveq r0, r4 + beq _020B7C28 + mov r0, r7, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020B7C28: + str r0, [r6, #0x28] + ldrb r0, [r11, #0x2] + add r8, r8, #0x1 + cmp r8, r0 + blo _020B7BA4 +_020B7C3C: + ldrb r0, [r11, #0x3] + orr r0, r0, #0x1 + strb r0, [r11, #0x3] + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B7C50: .word 0x0000FFFF +_020B7C54: .word 0x000007FF + arm_func_end bindMdlTex_Internal_ + + arm_func_start NNS_G3dPlttReleasePlttKey +NNS_G3dPlttReleasePlttKey: ; 0x020B7C58 + ldrh r2, [r0, #0x32] + mov r1, #0x0 + bic r2, r2, #0x1 + strh r2, [r0, #0x32] + ldr r2, [r0, #0x2c] + str r1, [r0, #0x2c] + mov r0, r2 + bx lr + arm_func_end NNS_G3dPlttReleasePlttKey + + arm_func_start NNS_G3dPlttLoad +NNS_G3dPlttLoad: ; 0x020B7C78 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r4, r1 + mov r5, r0 + beq _020B7C90 + bl GX_BeginLoadTexPltt +_020B7C90: + ldrh r2, [r5, #0x30] + ldr r0, [r5, #0x38] + ldr r3, [r5, #0x2c] + ldr r1, _020B7CD8 ; =0x0000FFFF + add r0, r5, r0 + and r1, r3, r1 + mov r1, r1, lsl #0x3 + mov r2, r2, lsl #0x3 + bl GX_LoadTexPltt + ldrh r0, [r5, #0x32] + cmp r4, #0x0 + addeq sp, sp, #0x4 + orr r0, r0, #0x1 + strh r0, [r5, #0x32] + ldmeqia sp!, {r4-r5,pc} + bl GX_EndLoadTexPltt + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B7CD8: .word 0x0000FFFF + arm_func_end NNS_G3dPlttLoad + + arm_func_start NNS_G3dPlttSetPlttKey +NNS_G3dPlttSetPlttKey: ; 0x020B7CDC + str r1, [r0, #0x2c] + bx lr + arm_func_end NNS_G3dPlttSetPlttKey + + arm_func_start NNS_G3dPlttGetRequiredSize +NNS_G3dPlttGetRequiredSize: ; 0x020B7CE4 + ldrh r0, [r0, #0x30] + mov r0, r0, lsl #0x3 + bx lr + arm_func_end NNS_G3dPlttGetRequiredSize + + arm_func_start NNS_G3dTexReleaseTexKey +NNS_G3dTexReleaseTexKey: ; 0x020B7CF0 + ldrh r12, [r0, #0x10] + mov r3, #0x0 + bic r12, r12, #0x1 + strh r12, [r0, #0x10] + ldrh r12, [r0, #0x20] + bic r12, r12, #0x1 + strh r12, [r0, #0x20] + ldr r12, [r0, #0x8] + str r12, [r1, #0x0] + str r3, [r0, #0x8] + ldr r1, [r0, #0x18] + str r1, [r2, #0x0] + str r3, [r0, #0x18] + bx lr + arm_func_end NNS_G3dTexReleaseTexKey + + arm_func_start NNS_G3dTexLoad +NNS_G3dTexLoad: ; 0x020B7D28 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + movs r8, r1 + mov r9, r0 + beq _020B7D40 + bl GX_BeginLoadTex +_020B7D40: + ldrh r0, [r9, #0xc] + movs r2, r0, lsl #0x3 + beq _020B7D74 + ldr r1, [r9, #0x8] + ldr r0, _020B7DF4 ; =0x0000FFFF + ldr r3, [r9, #0x14] + and r1, r1, r0 + add r0, r9, r3 + mov r1, r1, lsl #0x3 + bl GX_LoadTex + ldrh r0, [r9, #0x10] + orr r0, r0, #0x1 + strh r0, [r9, #0x10] +_020B7D74: + ldrh r0, [r9, #0x1c] + movs r7, r0, lsl #0x3 + beq _020B7DDC + ldr r1, [r9, #0x18] + ldr r0, _020B7DF4 ; =0x0000FFFF + ldr r3, [r9, #0x24] + and r4, r1, r0 + mov r5, r4, lsl #0x3 + ldr r6, [r9, #0x28] + mov r1, r5 + mov r2, r7 + add r0, r9, r3 + add r6, r9, r6 + bl GX_LoadTex + ldr r0, _020B7DF8 ; =0x0001FFFF + and r1, r5, #0x40000 + and r0, r0, r4, lsl #0x3 + mov r0, r0, lsr #0x1 + add r2, r0, #0x20000 + mov r0, r6 + add r1, r2, r1, lsr #0x2 + mov r2, r7, lsr #0x1 + bl GX_LoadTex + ldrh r0, [r9, #0x20] + orr r0, r0, #0x1 + strh r0, [r9, #0x20] +_020B7DDC: + cmp r8, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r9,pc} + bl GX_EndLoadTex + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020B7DF4: .word 0x0000FFFF +_020B7DF8: .word 0x0001FFFF + arm_func_end NNS_G3dTexLoad + + arm_func_start NNS_G3dTexSetTexKey +NNS_G3dTexSetTexKey: ; 0x020B7DFC + cmp r1, #0x0 + strne r1, [r0, #0x8] + cmp r2, #0x0 + strne r2, [r0, #0x18] + bx lr + arm_func_end NNS_G3dTexSetTexKey + + arm_func_start NNS_G3dTex4x4GetRequiredSize +NNS_G3dTex4x4GetRequiredSize: ; 0x020B7E10 + ldrh r0, [r0, #0x1c] + mov r0, r0, lsl #0x3 + bx lr + arm_func_end NNS_G3dTex4x4GetRequiredSize + + arm_func_start NNS_G3dTexGetRequiredSize +NNS_G3dTexGetRequiredSize: ; 0x020B7E1C + ldrh r0, [r0, #0xc] + mov r0, r0, lsl #0x3 + bx lr + arm_func_end NNS_G3dTexGetRequiredSize + + arm_func_start NNS_G3dRenderObjRemoveAnmObj +NNS_G3dRenderObjRemoveAnmObj: ; 0x020B7E28 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + add r0, r5, #0x8 + mov r4, r1 + bl removeLink_ + cmp r0, #0x0 + bne _020B7E74 + mov r1, r4 + add r0, r5, #0x10 + bl removeLink_ + cmp r0, #0x0 + bne _020B7E74 + mov r1, r4 + add r0, r5, #0x18 + bl removeLink_ + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} +_020B7E74: + ldr r0, [r5, #0x0] + orr r0, r0, #0x10 + str r0, [r5, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNS_G3dRenderObjRemoveAnmObj + + arm_func_start removeLink_ +removeLink_: ; 0x020B7E88 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r2, r1 + bne _020B7EB8 + ldr r3, [r2, #0x10] + mov r2, #0x0 + str r3, [r0, #0x0] + str r2, [r1, #0x10] + mov r0, #0x1 + bx lr +_020B7EB8: + ldr r3, [r2, #0x10] + cmp r3, #0x0 + beq _020B7EF4 +_020B7EC4: + cmp r3, r1 + bne _020B7EE4 + ldr r1, [r3, #0x10] + mov r0, #0x0 + str r1, [r2, #0x10] + str r0, [r3, #0x10] + mov r0, #0x1 + bx lr +_020B7EE4: + mov r2, r3 + ldr r3, [r3, #0x10] + cmp r3, #0x0 + bne _020B7EC4 +_020B7EF4: + mov r0, #0x0 + bx lr + arm_func_end removeLink_ + + arm_func_start NNS_G3dRenderObjAddAnmObj +NNS_G3dRenderObjAddAnmObj: ; 0x020B7EFC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + ldr r2, [r4, #0x8] + mov r5, r0 + ldrb r0, [r2, #0x0] + cmp r0, #0x4a + beq _020B7F50 + cmp r0, #0x4d + beq _020B7F34 + cmp r0, #0x56 + beq _020B7F6C + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B7F34: + add r0, r5, #0x3c + bl updateHintVec_ + mov r1, r4 + add r0, r5, #0x8 + bl addLink_ + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B7F50: + add r0, r5, #0x44 + bl updateHintVec_ + mov r1, r4 + add r0, r5, #0x10 + bl addLink_ + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020B7F6C: + add r0, r5, #0x4c + bl updateHintVec_ + mov r1, r4 + add r0, r5, #0x18 + bl addLink_ + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNS_G3dRenderObjAddAnmObj + + local_arm_func_start updateHintVec_ +updateHintVec_: ; 0x020B7F88 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + mov r3, #0x1 + mov r4, #0x0 +_020B7FA4: + ldrb r2, [r1, #0x19] + mov r5, r4 + cmp r2, #0x0 + ble _020B7FE4 +_020B7FB4: + add r2, r1, r5, lsl #0x1 + ldrh r2, [r2, #0x1a] + ands r2, r2, #0x100 + movne lr, r5, asr #0x5 + andne r2, r5, #0x1f + ldrne r12, [r0, lr, lsl #0x2] + add r5, r5, #0x1 + orrne r2, r12, r3, lsl r2 + strne r2, [r0, lr, lsl #0x2] + ldrb r2, [r1, #0x19] + cmp r5, r2 + blt _020B7FB4 +_020B7FE4: + ldr r1, [r1, #0x10] + cmp r1, #0x0 + bne _020B7FA4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end updateHintVec_ + + arm_func_start addLink_ +addLink_: ; 0x020B7FF8 + ldr r12, [r0, #0x0] + cmp r12, #0x0 + streq r1, [r0, #0x0] + bxeq lr + ldr r3, [r12, #0x10] + cmp r3, #0x0 + bne _020B8058 + ldrb r3, [r12, #0x18] + ldrb r2, [r1, #0x18] + cmp r3, r2 + bls _020B8050 + ldr r2, [r1, #0x10] + mov r3, r1 + cmp r2, #0x0 + beq _020B8044 +_020B8034: + ldr r3, [r3, #0x10] + ldr r2, [r3, #0x10] + cmp r2, #0x0 + bne _020B8034 +_020B8044: + str r12, [r3, #0x10] + str r1, [r0, #0x0] + bx lr +_020B8050: + str r1, [r12, #0x10] + bx lr +_020B8058: + cmp r3, #0x0 + beq _020B80AC + ldrb r2, [r1, #0x18] +_020B8064: + ldrb r0, [r3, #0x18] + cmp r0, r2 + blo _020B809C + ldr r0, [r1, #0x10] + mov r2, r1 + cmp r0, #0x0 + beq _020B8090 +_020B8080: + ldr r2, [r2, #0x10] + ldr r0, [r2, #0x10] + cmp r0, #0x0 + bne _020B8080 +_020B8090: + str r1, [r12, #0x10] + str r3, [r2, #0x10] + bx lr +_020B809C: + mov r12, r3 + ldr r3, [r3, #0x10] + cmp r3, #0x0 + bne _020B8064 +_020B80AC: + str r1, [r12, #0x10] + bx lr + arm_func_end addLink_ + + arm_func_start NNS_G3dRenderObjInit +NNS_G3dRenderObjInit: ; 0x020B80B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r1, r5 + mov r0, #0x0 + mov r2, #0x54 + bl MIi_CpuClear32 + ldr r0, _020B8104 ; =NNS_G3dFuncBlendMatDefault + ldr r1, _020B8108 ; =NNS_G3dFuncBlendJntDefault + ldr r2, [r0, #0x0] + ldr r0, _020B810C ; =NNS_G3dFuncBlendVisDefault + str r2, [r5, #0xc] + ldr r1, [r1, #0x0] + str r1, [r5, #0x14] + ldr r0, [r0, #0x0] + str r0, [r5, #0x1c] + str r4, [r5, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020B8104: .word NNS_G3dFuncBlendMatDefault +_020B8108: .word NNS_G3dFuncBlendJntDefault +_020B810C: .word NNS_G3dFuncBlendVisDefault + arm_func_end NNS_G3dRenderObjInit + + arm_func_start NNS_G3dAnmObjInit +NNS_G3dAnmObjInit: ; 0x020B8110 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r12, #0x0 + str r12, [r0, #0x0] + str r1, [r0, #0x8] + str r12, [r0, #0x10] + mov r4, #0x7f + strb r4, [r0, #0x18] + mov r4, #0x1000 + str r4, [r0, #0x4] + ldr lr, _020B81A4 ; =NNS_G3dAnmFmtNum + str r3, [r0, #0x14] + ldr r6, [lr, #0x0] + cmp r6, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r7,pc} + ldrb r7, [r1, #0x0] + ldr r4, _020B81A8 ; =NNS_G3dAnmObjInitFuncArray +_020B8158: + ldrb r3, [r4, r12, lsl #0x3] + mov r5, r12, lsl #0x3 + cmp r7, r3 + bne _020B8190 + add r3, r4, r5 + ldrh lr, [r1, #0x2] + ldrh r3, [r3, #0x2] + cmp lr, r3 + bne _020B8190 + ldr r3, _020B81AC ; =NNS_G3dAnmObjInitFuncArray + 0x4 + ldr r3, [r3, r5] + blx r3 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} +_020B8190: + add r12, r12, #0x1 + cmp r12, r6 + blo _020B8158 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B81A4: .word NNS_G3dAnmFmtNum +_020B81A8: .word NNS_G3dAnmObjInitFuncArray +_020B81AC: .word NNS_G3dAnmObjInitFuncArray + 0x4 + arm_func_end NNS_G3dAnmObjInit + + arm_func_start NNS_G3dAnmObjCalcSizeRequired +NNS_G3dAnmObjCalcSizeRequired: ; 0x020B81B0 + ldrb r0, [r0, #0x0] + cmp r0, #0x4a + beq _020B81E4 + cmp r0, #0x4d + beq _020B81D0 + cmp r0, #0x56 + beq _020B81E4 + b _020B81F8 +_020B81D0: + ldrb r0, [r1, #0x18] + mov r0, r0, lsl #0x1 + add r0, r0, #0x1c + bic r0, r0, #0x3 + bx lr +_020B81E4: + ldrb r0, [r1, #0x17] + mov r0, r0, lsl #0x1 + add r0, r0, #0x1c + bic r0, r0, #0x3 + bx lr +_020B81F8: + mov r0, #0x0 + bx lr + arm_func_end NNS_G3dAnmObjCalcSizeRequired diff --git a/arm9/asm/NNS_G3D_maya.s b/arm9/asm/NNS_G3D_maya.s new file mode 100644 index 00000000..7a675533 --- /dev/null +++ b/arm9/asm/NNS_G3D_maya.s @@ -0,0 +1,594 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data +calcTexMtx_: ; 0x021067B0 + .word texmtxCalc_flag_ + .word texmtxCalc_flagS_ + .word texmtxCalc_flagR_ + .word texmtxCalc_flagRS_ + .word texmtxCalc_flagT_ + .word texmtxCalc_flagTS_ + .word texmtxCalc_flagTR_ + .word texmtxCalc_flagTRS_ + + .section .text + + arm_func_start NNSi_G3dSendTexSRTMaya +NNSi_G3dSendTexSRTMaya: ; 0x020BE6E4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x50 + mov r4, r0 + ldr r0, [r4, #0x0] + mov r1, #0x0 + ands r0, r0, #0x8 + ldrne r0, _020BE820 ; =0x00101610 + mov r3, #0x3 + strne r0, [sp, #0x0] + ldreq r0, _020BE824 ; =0x00101810 + mov r2, #0x2 + streq r0, [sp, #0x0] + mov r0, #0x1000 + str r0, [sp, #0x44] + str r3, [sp, #0x4] + str r2, [sp, #0x48] + str r1, [sp, #0x40] + str r1, [sp, #0x34] + str r1, [sp, #0x30] + str r1, [sp, #0x2c] + str r1, [sp, #0x28] + str r1, [sp, #0x24] + str r1, [sp, #0x20] + str r1, [sp, #0x14] + str r1, [sp, #0x10] + ldr r1, [r4, #0x0] + ldr r0, _020BE828 ; =calcTexMtx_ + and r1, r1, #0x7 + ldr r2, [r0, r1, lsl #0x2] + add r0, sp, #0x8 + mov r1, r4 + blx r2 + ldr r3, [r4, #0x30] + cmp r3, #0x1000 + beq _020BE7B4 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x8] + ldr r2, [r4, #0x30] + ldr r0, [sp, #0x38] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0xc] + ldr r1, [r4, #0x30] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x38] +_020BE7B4: + ldr r3, [r4, #0x34] + cmp r3, #0x1000 + beq _020BE804 + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x18] + ldr r2, [r4, #0x34] + ldr r0, [sp, #0x3c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x1c] + ldr r1, [r4, #0x34] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x3c] +_020BE804: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0x12 + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x50 + ldmia sp!, {r4,pc} + .balign 4 +_020BE820: .word 0x00101610 +_020BE824: .word 0x00101810 +_020BE828: .word calcTexMtx_ + arm_func_end NNSi_G3dSendTexSRTMaya + + local_arm_func_start texmtxCalc_flagTRS_ +texmtxCalc_flagTRS_: ; 0x020BE82C + mov r2, #0x1000 + str r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + bx lr + arm_func_end texmtxCalc_flagTRS_ + + local_arm_func_start texmtxCalc_flagTR_ +texmtxCalc_flagTR_: ; 0x020BE850 + ldr r2, [r1, #0x18] + mov r12, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r12, [r0, #0x4] + str r12, [r0, #0x30] + ldr r2, [r1, #0x1c] + ldrh r3, [r1, #0x2e] + mov r1, r2, lsl #0x1 + rsb r1, r1, #0x0 + add r1, r1, #0x2000 + mul r1, r3, r1 + mov r1, r1, lsl #0x3 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + arm_func_end texmtxCalc_flagTR_ + + local_arm_func_start texmtxCalc_flagTS_ +texmtxCalc_flagTS_: ; 0x020BE894 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + rsb r2, r2, #0x0 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrsh r1, [r5, #0x20] + ldrsh r0, [r5, #0x22] + ldrh r2, [r5, #0x2c] + add r0, r1, r0 + rsb r0, r0, #0x0 + add r0, r0, #0x1000 + mul r0, r2, r0 + mov r0, r0, lsl #0x3 + str r0, [r6, #0x30] + ldrsh r1, [r5, #0x20] + ldrsh r0, [r5, #0x22] + ldrh r2, [r5, #0x2e] + sub r0, r1, r0 + add r0, r0, #0x1000 + mul r0, r2, r0 + mov r0, r0, lsl #0x3 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end texmtxCalc_flagTS_ + + local_arm_func_start texmtxCalc_flagT_ +texmtxCalc_flagT_: ; 0x020BE954 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r5, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r0, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r6, [r10, #0x0] + str r4, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + rsb r2, r5, #0x0 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + sub r1, r5, r4 + add r0, r7, r6 + ldrh r3, [r9, #0x2c] + ldr r2, [r9, #0x18] + sub r0, r2, r0 + mul r0, r3, r0 + mov r0, r0, lsl #0x3 + str r0, [r10, #0x30] + ldrh r2, [r9, #0x2e] + ldr r0, [r9, #0x1c] + sub r0, r1, r0 + add r0, r0, #0x2000 + mul r0, r2, r0 + mov r0, r0, lsl #0x3 + str r0, [r10, #0x34] + bl FX_GetDivResult + mul r0, r7, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end texmtxCalc_flagT_ + + local_arm_func_start texmtxCalc_flagRS_ +texmtxCalc_flagRS_: ; 0x020BEA3C + mov r2, #0x1000 + str r2, [r0, #0x0] + str r2, [r0, #0x14] + mov r12, #0x0 + str r12, [r0, #0x4] + ldrh r2, [r1, #0x2c] + ldr r3, [r1, #0x24] + mul r2, r3, r2 + rsb r2, r2, #0x0 + mov r2, r2, lsl #0x4 + str r2, [r0, #0x30] + ldrh r2, [r1, #0x2e] + ldr r1, [r1, #0x28] + mul r2, r1, r2 + mov r1, r2, lsl #0x4 + str r1, [r0, #0x34] + str r12, [r0, #0x10] + bx lr + arm_func_end texmtxCalc_flagRS_ + + local_arm_func_start texmtxCalc_flagR_ +texmtxCalc_flagR_: ; 0x020BEA84 + stmdb sp!, {r4,lr} + ldr r3, [r1, #0x18] + mov r2, #0x0 + str r3, [r0, #0x0] + ldr r3, [r1, #0x1c] + str r3, [r0, #0x14] + str r2, [r0, #0x4] + ldr r4, [r1, #0x18] + ldr r3, [r1, #0x24] + ldrh lr, [r1, #0x2c] + smull r12, r3, r4, r3 + mov r4, r12, lsr #0x8 + orr r4, r4, r3, lsl #0x18 + rsb r3, r4, #0x0 + mul r3, lr, r3 + str r3, [r0, #0x30] + ldr r4, [r1, #0x1c] + ldr r12, [r1, #0x28] + mov r3, r4, lsl #0x1 + smull lr, r12, r4, r12 + rsb r4, r3, #0x0 + mov r3, lr, lsr #0x8 + ldrh lr, [r1, #0x2e] + add r1, r4, #0x2000 + orr r3, r3, r12, lsl #0x18 + mul r4, lr, r1 + mul r1, lr, r3 + add r1, r1, r4, lsl #0x3 + str r1, [r0, #0x34] + str r2, [r0, #0x10] + ldmia sp!, {r4,pc} + arm_func_end texmtxCalc_flagR_ + + local_arm_func_start texmtxCalc_flagS_ +texmtxCalc_flagS_: ; 0x020BEB00 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + rsb r2, r2, #0x0 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrsh r2, [r5, #0x20] + ldrsh r1, [r5, #0x22] + ldrh r3, [r5, #0x2c] + ldr r0, [r5, #0x24] + add r1, r2, r1 + rsb r1, r1, #0x0 + add r1, r1, #0x1000 + mul r2, r3, r1 + mul r1, r0, r3 + mov r0, r2, lsl #0x3 + sub r0, r0, r1, lsl #0x4 + str r0, [r6, #0x30] + ldrsh r2, [r5, #0x20] + ldrsh r1, [r5, #0x22] + ldrh r3, [r5, #0x2e] + ldr r0, [r5, #0x28] + sub r1, r2, r1 + add r1, r1, #0x1000 + mul r2, r3, r1 + mul r1, r0, r3 + mov r0, r2, lsl #0x3 + add r0, r0, r1, lsl #0x4 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end texmtxCalc_flagS_ + + local_arm_func_start texmtxCalc_flag_ +texmtxCalc_flag_: ; 0x020BEBD8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r5, [r9, #0x22] + ldr r3, [r9, #0x18] + ldrsh r0, [r9, #0x20] + ldr r4, [r9, #0x1c] + smull r2, r1, r3, r5 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + smull r2, r1, r3, r0 + mov r7, r2, lsr #0xc + orr r7, r7, r1, lsl #0x14 + smull r3, r2, r4, r0 + smull r1, r0, r4, r5 + mov r5, r3, lsr #0xc + orr r5, r5, r2, lsl #0x14 + mov r4, r1, lsr #0xc + orr r4, r4, r0, lsl #0x14 + str r6, [r10, #0x0] + str r4, [r10, #0x14] + bl FX_GetDivResult + mov r1, r11 + rsb r2, r5, #0x0 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + bl FX_DivAsync + sub r1, r5, r4 + add r2, r7, r6 + ldr r5, [r9, #0x18] + ldrh r0, [r9, #0x2c] + sub r3, r5, r2 + ldr r2, [r9, #0x24] + mul r4, r0, r3 + smull r3, r2, r5, r2 + mov r4, r4, lsl #0x3 + mov r3, r3, lsr #0x8 + orr r3, r3, r2, lsl #0x18 + mul r2, r0, r3 + sub r0, r4, r2 + str r0, [r10, #0x30] + ldr r4, [r9, #0x1c] + ldrh r3, [r9, #0x2e] + sub r0, r1, r4 + add r0, r0, #0x2000 + mul r2, r3, r0 + ldr r0, [r9, #0x28] + smull r1, r0, r4, r0 + mov r1, r1, lsr #0x8 + orr r1, r1, r0, lsl #0x18 + mul r0, r3, r1 + add r0, r0, r2, lsl #0x3 + str r0, [r10, #0x34] + bl FX_GetDivResult + mul r0, r7, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end texmtxCalc_flag_ + + arm_func_start NNSi_G3dGetJointScaleMaya +NNSi_G3dGetJointScaleMaya: ; 0x020BECEC + stmdb sp!, {r4-r8,lr} + mov r12, r0 + ands r0, r3, #0x4 + ldrb r3, [r2, #0x3] + beq _020BED40 + ldr r1, [r12, #0x0] + ands r0, r3, #0x2 + orr r0, r1, #0x1 + str r0, [r12, #0x0] + beq _020BEDB8 + ldr r0, _020BEE2C ; =NNS_G3dRS + ldrb r7, [r2, #0x1] + ldr r0, [r0, #0x0] + mov r1, #0x1 + add r6, r0, #0xc4 + mov r5, r7, lsr #0x5 + ldr r4, [r6, r5, lsl #0x2] + and r0, r7, #0x1f + orr r0, r4, r1, lsl r0 + str r0, [r6, r5, lsl #0x2] + b _020BEDB8 +_020BED40: + ldr r4, [r1, #0x0] + ands r0, r3, #0x2 + str r4, [r12, #0x4] + ldr r0, [r1, #0x4] + str r0, [r12, #0x8] + ldr r0, [r1, #0x8] + str r0, [r12, #0xc] + beq _020BEDB8 + ldr lr, _020BEE2C ; =NNS_G3dRS + ldrb r0, [r2, #0x1] + ldr r4, [lr, #0x0] + mov lr, #0x18 + add r8, r4, #0xc4 + mov r7, r0, lsr #0x5 + and r4, r0, #0x1f + mov r5, #0x1 + mvn r4, r5, lsl r4 + ldr r6, [r8, r7, lsl #0x2] + mul r5, r0, lr + and r0, r6, r4 + str r0, [r8, r7, lsl #0x2] + ldr r4, [r1, #0xc] + ldr r0, _020BEE30 ; =NNS_G3dRSOnGlb + 0xE0C + ldr lr, _020BEE34 ; =NNS_G3dRSOnGlb + 0xE10 + str r4, [r0, r5] + ldr r4, [r1, #0x10] + ldr r0, _020BEE38 ; =NNS_G3dRSOnGlb + 0xE14 + str r4, [lr, r5] + ldr r1, [r1, #0x14] + str r1, [r0, r5] +_020BEDB8: + ands r0, r3, #0x1 + beq _020BEE1C + ldrb r0, [r2, #0x2] + ldr r2, [r12, #0x0] + ldr r1, _020BEE2C ; =NNS_G3dRS + orr r2, r2, #0x20 + str r2, [r12, #0x0] + ldr r2, [r1, #0x0] + mov r1, r0, lsr #0x5 + add r1, r2, r1, lsl #0x2 + and r2, r0, #0x1f + mov r3, #0x1 + mov r2, r3, lsl r2 + ldr r1, [r1, #0xc4] + ands r1, r2, r1 + ldrne r0, [r12, #0x0] + orrne r0, r0, #0x8 + strne r0, [r12, #0x0] + bne _020BEE1C + ldr r2, _020BEE30 ; =NNS_G3dRSOnGlb + 0xE0C + mov r1, #0x18 + mla r1, r0, r1, r2 + add r3, r12, #0x10 + ldmia r1, {r0-r2} + stmia r3, {r0-r2} +_020BEE1C: + ldr r0, [r12, #0x0] + orr r0, r0, #0x10 + str r0, [r12, #0x0] + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BEE2C: .word NNS_G3dRS +_020BEE30: .word NNS_G3dRSOnGlb + 0xE0C +_020BEE34: .word NNS_G3dRSOnGlb + 0xE10 +_020BEE38: .word NNS_G3dRSOnGlb + 0xE14 + arm_func_end NNSi_G3dGetJointScaleMaya + + arm_func_start NNSi_G3dSendJointSRTMaya +NNSi_G3dSendJointSRTMaya: ; 0x020BEE3C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x0] + mov r4, #0x0 + ands r0, r1, #0x4 + moveq r4, #0x1 + ands r0, r1, #0x20 + beq _020BEE94 + ands r0, r1, #0x8 + bne _020BEE94 + cmp r4, #0x0 + beq _020BEE84 + add r1, r5, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N + mov r4, #0x0 +_020BEE84: + add r1, r5, #0x10 + mov r0, #0x1b + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N +_020BEE94: + ldr r0, [r5, #0x0] + ands r0, r0, #0x2 + bne _020BEED0 + cmp r4, #0x0 + beq _020BEEBC + add r1, r5, #0x28 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N + b _020BEEE8 +_020BEEBC: + add r1, r5, #0x28 + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + b _020BEEE8 +_020BEED0: + cmp r4, #0x0 + beq _020BEEE8 + add r1, r5, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N +_020BEEE8: + ldr r0, [r5, #0x0] + ands r0, r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} + add r1, r5, #0x4 + mov r0, #0x1b + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNSi_G3dSendJointSRTMaya diff --git a/arm9/asm/NNS_G3D_mem.s b/arm9/asm/NNS_G3D_mem.s new file mode 100644 index 00000000..e01336e5 --- /dev/null +++ b/arm9/asm/NNS_G3D_mem.s @@ -0,0 +1,25 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G3dFreeAnmObj +NNS_G3dFreeAnmObj: ; 0x020BB8C4 + ldr ip, _020BB8CC ; =NNS_FndFreeToAllocator + bx r12 + .balign 4 +_020BB8CC: .word NNS_FndFreeToAllocator + arm_func_end NNS_G3dFreeAnmObj + + arm_func_start NNS_G3dAllocAnmObj +NNS_G3dAllocAnmObj: ; 0x020BB8D0 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, r1 + mov r1, r2 + bl NNS_G3dAnmObjCalcSizeRequired + mov r1, r0 + mov r0, r4 + bl NNS_FndAllocFromAllocator + ldmia sp!, {r4,pc} + arm_func_end NNS_G3dAllocAnmObj diff --git a/arm9/asm/NNS_G3D_model.s b/arm9/asm/NNS_G3D_model.s new file mode 100644 index 00000000..958a9b8a --- /dev/null +++ b/arm9/asm/NNS_G3D_model.s @@ -0,0 +1,656 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G3dMdlSetMdlXLDepthUpdateAll +NNS_G3dMdlSetMdlXLDepthUpdateAll: ; 0x020BB8F4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB910: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlXLDepthUpdate + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB910 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlXLDepthUpdateAll + + arm_func_start NNS_G3dMdlSetMdlFarClipAll +NNS_G3dMdlSetMdlFarClipAll: ; 0x020BB934 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB950: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlFarClip + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB950 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlFarClipAll + + arm_func_start NNS_G3dMdlSetMdl1DotAll +NNS_G3dMdlSetMdl1DotAll: ; 0x020BB974 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB990: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdl1Dot + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB990 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdl1DotAll + + arm_func_start NNS_G3dMdlSetMdlDepthTestCondAll +NNS_G3dMdlSetMdlDepthTestCondAll: ; 0x020BB9B4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BB9D0: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlDepthTestCond + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BB9D0 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlDepthTestCondAll + + arm_func_start NNS_G3dMdlSetMdlFogEnableFlagAll +NNS_G3dMdlSetMdlFogEnableFlagAll: ; 0x020BB9F4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBA10: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlFogEnableFlag + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBA10 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlFogEnableFlagAll + + arm_func_start NNS_G3dMdlSetMdlAlphaAll +NNS_G3dMdlSetMdlAlphaAll: ; 0x020BBA34 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBA50: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlAlpha + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBA50 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlAlphaAll + + arm_func_start NNS_G3dMdlSetMdlPolygonIDAll +NNS_G3dMdlSetMdlPolygonIDAll: ; 0x020BBA74 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBA90: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlPolygonID + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBA90 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlPolygonIDAll + + arm_func_start NNS_G3dMdlSetMdlCullModeAll +NNS_G3dMdlSetMdlCullModeAll: ; 0x020BBAB4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBAD0: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlCullMode + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBAD0 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlCullModeAll + + arm_func_start NNS_G3dMdlSetMdlPolygonModeAll +NNS_G3dMdlSetMdlPolygonModeAll: ; 0x020BBAF4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBB10: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlPolygonMode + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBB10 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlPolygonModeAll + + arm_func_start NNS_G3dMdlSetMdlLightEnableFlagAll +NNS_G3dMdlSetMdlLightEnableFlagAll: ; 0x020BBB34 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBB50: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlLightEnableFlag + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBB50 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlLightEnableFlagAll + + arm_func_start NNS_G3dMdlSetMdlEmiAll +NNS_G3dMdlSetMdlEmiAll: ; 0x020BBB74 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBB90: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlEmi + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBB90 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlEmiAll + + arm_func_start NNS_G3dMdlSetMdlSpecAll +NNS_G3dMdlSetMdlSpecAll: ; 0x020BBBB4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBBD0: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlSpec + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBBD0 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlSpecAll + + arm_func_start NNS_G3dMdlSetMdlAmbAll +NNS_G3dMdlSetMdlAmbAll: ; 0x020BBBF4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBC10: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlAmb + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBC10 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlAmbAll + + arm_func_start NNS_G3dMdlSetMdlDiffAll +NNS_G3dMdlSetMdlDiffAll: ; 0x020BBC34 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldrb r0, [r6, #0x18] + mov r5, r1 + mov r4, #0x0 + cmp r0, #0x0 + ldmlsia sp!, {r4-r6,pc} +_020BBC50: + mov r0, r6 + mov r1, r4 + mov r2, r5 + bl NNS_G3dMdlSetMdlDiff + ldrb r0, [r6, #0x18] + add r4, r4, #0x1 + cmp r4, r0 + blo _020BBC50 + ldmia sp!, {r4-r6,pc} + arm_func_end NNS_G3dMdlSetMdlDiffAll + + arm_func_start NNS_G3dMdlSetMdlXLDepthUpdate +NNS_G3dMdlSetMdlXLDepthUpdate: ; 0x020BBC74 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x800 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x800 + streq r0, [r1, #0xc] + bx lr + arm_func_end NNS_G3dMdlSetMdlXLDepthUpdate + + arm_func_start NNS_G3dMdlSetMdlFarClip +NNS_G3dMdlSetMdlFarClip: ; 0x020BBCB8 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x1000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x1000 + streq r0, [r1, #0xc] + bx lr + arm_func_end NNS_G3dMdlSetMdlFarClip + + arm_func_start NNS_G3dMdlSetMdl1Dot +NNS_G3dMdlSetMdl1Dot: ; 0x020BBCFC + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x2000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x2000 + streq r0, [r1, #0xc] + bx lr + arm_func_end NNS_G3dMdlSetMdl1Dot + + arm_func_start NNS_G3dMdlSetMdlDepthTestCond +NNS_G3dMdlSetMdlDepthTestCond: ; 0x020BBD40 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x4000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x4000 + streq r0, [r1, #0xc] + bx lr + arm_func_end NNS_G3dMdlSetMdlDepthTestCond + + arm_func_start NNS_G3dMdlSetMdlFogEnableFlag +NNS_G3dMdlSetMdlFogEnableFlag: ; 0x020BBD84 + ldr r3, [r0, #0x8] + cmp r2, #0x0 + add r12, r0, r3 + ldrh r0, [r12, #0xa] + add r3, r12, #0x4 + ldrh r2, [r3, r0] + add r0, r3, r0 + mla r0, r2, r1, r0 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrne r0, [r1, #0xc] + orrne r0, r0, #0x8000 + strne r0, [r1, #0xc] + ldreq r0, [r1, #0xc] + biceq r0, r0, #0x8000 + streq r0, [r1, #0xc] + bx lr + arm_func_end NNS_G3dMdlSetMdlFogEnableFlag + + arm_func_start NNS_G3dMdlSetMdlAlpha +NNS_G3dMdlSetMdlAlpha: ; 0x020BBDC8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0x1f0000 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G3dMdlSetMdlAlpha + + arm_func_start NNS_G3dMdlSetMdlPolygonID +NNS_G3dMdlSetMdlPolygonID: ; 0x020BBE0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0x3f000000 + orr r0, r0, r2, lsl #0x18 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G3dMdlSetMdlPolygonID + + arm_func_start NNS_G3dMdlSetMdlCullMode +NNS_G3dMdlSetMdlCullMode: ; 0x020BBE50 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0xc0 + orr r0, r0, r2, lsl #0x6 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G3dMdlSetMdlCullMode + + arm_func_start NNS_G3dMdlSetMdlPolygonMode +NNS_G3dMdlSetMdlPolygonMode: ; 0x020BBE94 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0x30 + orr r0, r0, r2, lsl #0x4 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G3dMdlSetMdlPolygonMode + + arm_func_start NNS_G3dMdlSetMdlLightEnableFlag +NNS_G3dMdlSetMdlLightEnableFlag: ; 0x020BBED8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x8] + add lr, r0, r3 + ldrh r0, [lr, #0xa] + add r12, lr, #0x4 + ldrh r3, [r12, r0] + add r0, r12, r0 + mla r0, r3, r1, r0 + ldr r0, [r0, #0x4] + add r1, lr, r0 + ldr r0, [r1, #0xc] + bic r0, r0, #0xf + orr r0, r0, r2 + str r0, [r1, #0xc] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNS_G3dMdlSetMdlLightEnableFlag + + arm_func_start NNS_G3dMdlSetMdlEmi +NNS_G3dMdlSetMdlEmi: ; 0x020BBF1C + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + ldr r3, _020BBF5C ; =0x8000FFFF + add r4, r0, r12 + ldrh r0, [r4, #0xa] + add lr, r4, #0x4 + ldrh r12, [lr, r0] + add r0, lr, r0 + mla r0, r12, r1, r0 + ldr r0, [r0, #0x4] + add r1, r4, r0 + ldr r0, [r1, #0x8] + and r0, r0, r3 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0x8] + ldmia sp!, {r4,pc} + .balign 4 +_020BBF5C: .word 0x8000FFFF + arm_func_end NNS_G3dMdlSetMdlEmi + + arm_func_start NNS_G3dMdlSetMdlSpec +NNS_G3dMdlSetMdlSpec: ; 0x020BBF60 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + mov r3, #0x8000 + add r4, r0, r12 + ldrh r12, [r4, #0xa] + add lr, r4, #0x4 + rsb r0, r3, #0x0 + ldrh r3, [lr, r12] + add r12, lr, r12 + mla r1, r3, r1, r12 + ldr r1, [r1, #0x4] + add r3, r4, r1 + ldr r1, [r3, #0x8] + and r0, r1, r0 + orr r0, r0, r2 + str r0, [r3, #0x8] + ldmia sp!, {r4,pc} + arm_func_end NNS_G3dMdlSetMdlSpec + + arm_func_start NNS_G3dMdlSetMdlAmb +NNS_G3dMdlSetMdlAmb: ; 0x020BBFA4 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + ldr r3, _020BBFE4 ; =0x8000FFFF + add r4, r0, r12 + ldrh r0, [r4, #0xa] + add lr, r4, #0x4 + ldrh r12, [lr, r0] + add r0, lr, r0 + mla r0, r12, r1, r0 + ldr r0, [r0, #0x4] + add r1, r4, r0 + ldr r0, [r1, #0x4] + and r0, r0, r3 + orr r0, r0, r2, lsl #0x10 + str r0, [r1, #0x4] + ldmia sp!, {r4,pc} + .balign 4 +_020BBFE4: .word 0x8000FFFF + arm_func_end NNS_G3dMdlSetMdlAmb + + arm_func_start NNS_G3dMdlSetMdlDiff +NNS_G3dMdlSetMdlDiff: ; 0x020BBFE8 + stmdb sp!, {r4,lr} + ldr r12, [r0, #0x8] + mov r3, #0x8000 + add r4, r0, r12 + ldrh r12, [r4, #0xa] + add lr, r4, #0x4 + rsb r0, r3, #0x0 + ldrh r3, [lr, r12] + add r12, lr, r12 + mla r1, r3, r1, r12 + ldr r1, [r1, #0x4] + add r3, r4, r1 + ldr r1, [r3, #0x4] + and r0, r1, r0 + orr r0, r0, r2 + str r0, [r3, #0x4] + ldmia sp!, {r4,pc} + arm_func_end NNS_G3dMdlSetMdlDiff + + arm_func_start NNSi_G3dModifyPolygonAttrMask +NNSi_G3dModifyPolygonAttrMask: ; 0x020BC02C + stmdb sp!, {r4-r6,lr} + ldrb r4, [r0, #0x18] + ldr r3, [r0, #0x8] + mov lr, #0x0 + cmp r4, #0x0 + add r12, r0, r3 + ldmlsia sp!, {r4-r6,pc} + mvn r3, r2 + add r0, r12, #0x4 +_020BC050: + ldrh r5, [r12, #0xa] + cmp r1, #0x0 + ldrh r6, [r0, r5] + add r5, r0, r5 + mla r5, r6, lr, r5 + ldr r5, [r5, #0x4] + add lr, lr, #0x1 + add r6, r12, r5 + ldrne r5, [r6, #0x10] + orrne r5, r5, r2 + strne r5, [r6, #0x10] + ldreq r5, [r6, #0x10] + andeq r5, r5, r3 + streq r5, [r6, #0x10] + cmp lr, r4 + blo _020BC050 + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G3dModifyPolygonAttrMask + + arm_func_start NNSi_G3dModifyMatFlag +NNSi_G3dModifyMatFlag: ; 0x020BC094 + stmdb sp!, {r4-r6,lr} + ldrb r4, [r0, #0x18] + ldr r3, [r0, #0x8] + mov lr, #0x0 + cmp r4, #0x0 + add r12, r0, r3 + ldmlsia sp!, {r4-r6,pc} + mvn r3, r2 + add r0, r12, #0x4 +_020BC0B8: + ldrh r5, [r12, #0xa] + cmp r1, #0x0 + ldrh r6, [r0, r5] + add r5, r0, r5 + mla r5, r6, lr, r5 + ldr r5, [r5, #0x4] + add lr, lr, #0x1 + add r6, r12, r5 + ldrneh r5, [r6, #0x1e] + orrne r5, r5, r2 + strneh r5, [r6, #0x1e] + ldreqh r5, [r6, #0x1e] + andeq r5, r5, r3 + streqh r5, [r6, #0x1e] + cmp lr, r4 + blo _020BC0B8 + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G3dModifyMatFlag diff --git a/arm9/asm/NNS_G3D_nsbca.s b/arm9/asm/NNS_G3D_nsbca.s new file mode 100644 index 00000000..a29deb70 --- /dev/null +++ b/arm9/asm/NNS_G3D_nsbca.s @@ -0,0 +1,1591 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global pivotUtil_ +pivotUtil_: ; 0x020FFA14 + .byte 0x04, 0x05, 0x07, 0x08 + .byte 0x03, 0x05, 0x06, 0x08 + .byte 0x03, 0x04, 0x06, 0x07 + .byte 0x01, 0x02, 0x07, 0x08 + .byte 0x00, 0x02, 0x06, 0x08 + .byte 0x00, 0x01, 0x06, 0x07 + .byte 0x01, 0x02, 0x04, 0x05 + .byte 0x00, 0x02, 0x03, 0x05 + .byte 0x00, 0x01, 0x03, 0x04 + + .section .text + + arm_func_start getRotDataByIdx_ +getRotDataByIdx_: ; 0x020BC500 + stmdb sp!, {r4,lr} + ands r4, r3, #0x8000 + beq _020BC5E0 + mov r2, #0x0 + str r2, [r0, #0x20] + ldr r4, [r0, #0x20] + ldr r2, _020BC684 ; =0x00007FFF + str r4, [r0, #0x1c] + ldr r4, [r0, #0x1c] + and r3, r3, r2 + str r4, [r0, #0x18] + ldr r4, [r0, #0x18] + mov r2, #0x3 + str r4, [r0, #0x14] + ldr r4, [r0, #0x14] + mul r2, r3, r2 + str r4, [r0, #0x10] + ldr r4, [r0, #0x10] + mov r3, r2, lsl #0x1 + str r4, [r0, #0xc] + ldr r4, [r0, #0xc] + add r2, r1, r2, lsl #0x1 + str r4, [r0, #0x8] + ldr r4, [r0, #0x8] + str r4, [r0, #0x4] + ldr r4, [r0, #0x4] + str r4, [r0, #0x0] + ldrsh r4, [r1, r3] + ldrsh r12, [r2, #0x2] + ldrsh r3, [r2, #0x4] + and r1, r4, #0xf + ands r4, r4, #0x10 + movne lr, #0x1000 + rsbne lr, lr, #0x0 + moveq lr, #0x1000 + str lr, [r0, r1, lsl #0x2] + ldr r4, _020BC688 ; =pivotUtil_ + ldr lr, _020BC68C ; =pivotUtil_ + 1 + ldrb r4, [r4, r1, lsl #0x2] + str r12, [r0, r4, lsl #0x2] + ldrb lr, [lr, r1, lsl #0x2] + str r3, [r0, lr, lsl #0x2] + ldrsh lr, [r2, #0x0] + ands lr, lr, #0x20 + ldr lr, _020BC690 ; =pivotUtil_ + 2 + rsbne r3, r3, #0x0 + ldrb lr, [lr, r1, lsl #0x2] + str r3, [r0, lr, lsl #0x2] + ldrsh r2, [r2, #0x0] + ands r2, r2, #0x40 + ldr r2, _020BC694 ; =pivotUtil_ + 3 + rsbne r12, r12, #0x0 + ldrb r1, [r2, r1, lsl #0x2] + str r12, [r0, r1, lsl #0x2] + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020BC5E0: + ldr r1, _020BC684 ; =0x00007FFF + mov r12, #0x5 + and r1, r3, r1 + mul r3, r1, r12 + add r1, r2, r3, lsl #0x1 + ldrsh lr, [r1, #0x8] + mov r12, r3, lsl #0x1 + mov r3, lr, asr #0x3 + str r3, [r0, #0x10] + ldrsh r12, [r2, r12] + and r2, lr, #0x7 + mov r2, r2, lsl #0x10 + mov r3, r12, asr #0x3 + str r3, [r0, #0x0] + ldrsh r3, [r1, #0x2] + and r12, r12, #0x7 + orr lr, r12, r2, asr #0xd + mov r2, r3, asr #0x3 + str r2, [r0, #0x4] + ldrsh r12, [r1, #0x4] + mov r2, lr, lsl #0x10 + and lr, r3, #0x7 + mov r3, r12, asr #0x3 + str r3, [r0, #0x8] + ldrsh r3, [r1, #0x6] + orr r1, lr, r2, asr #0xd + mov r1, r1, lsl #0x10 + and r2, r12, #0x7 + orr r1, r2, r1, asr #0xd + mov r1, r1, lsl #0x10 + and r2, r3, #0x7 + orr r1, r2, r1, asr #0xd + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + mov r2, r3, asr #0x3 + mov r1, r1, lsl #0x13 + str r2, [r0, #0xc] + mov r1, r1, asr #0x13 + str r1, [r0, #0x14] + mov r0, #0x1 + ldmia sp!, {r4,pc} + .balign 4 +_020BC684: .word 0x00007FFF +_020BC688: .word pivotUtil_ +_020BC68C: .word pivotUtil_ + 1 +_020BC690: .word pivotUtil_ + 2 +_020BC694: .word pivotUtil_ + 3 + arm_func_end getRotDataByIdx_ + + arm_func_start getRotDataEx_ +getRotDataEx_: ; 0x020BC698 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x48 + ldrh r4, [r3, #0x4] + ldr r5, [r3, #0xc] + ldr r8, [r3, #0x10] + ldr r7, [r2, #0x4] + mov r12, r1, asr #0xc + sub r4, r4, #0x1 + mov r6, r0 + cmp r12, r4 + add r5, r3, r5 + add r4, r3, r8 + add r8, r3, r7 + ldr r7, [r2, #0x0] + bne _020BC780 + ands r0, r7, #0xc0000000 + beq _020BC6F0 + ands r0, r7, #0x40000000 + andne r0, r12, #0x1 + addne r12, r0, r12, lsr #0x1 + andeq r0, r12, #0x3 + addeq r12, r0, r12, lsr #0x2 +_020BC6F0: + ldr r0, [r3, #0x8] + ands r0, r0, #0x2 + movne r7, #0x0 + bne _020BC7F4 + mov r0, r12, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + cmp r0, #0x0 + addeq sp, sp, #0x48 + ldmeqia sp!, {r4-r10,pc} + ldr r9, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + mul r1, r5, r9 + mul r0, r2, r4 + sub r0, r1, r0 + ldr r7, [r6, #0xc] + ldr r8, [r6, #0x0] + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r9 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + add sp, sp, #0x48 + str r0, [r6, #0x20] + ldmia sp!, {r4-r10,pc} +_020BC780: + ands r0, r7, #0xc0000000 + beq _020BC7F0 + ldr r0, _020BC9C4 ; =0x1FFF0000 + ands r2, r7, #0x40000000 + and r0, r7, r0 + mov r0, r0, lsr #0x10 + beq _020BC7C4 + cmp r12, r0 + movcs r12, r0, lsr #0x1 + addcs r7, r12, #0x1 + bhs _020BC7F4 + ldr r0, _020BC9C8 ; =0x00001FFF + mov r12, r12, lsr #0x1 + add r7, r12, #0x1 + and r10, r1, r0 + mov r9, #0x2 + b _020BC800 +_020BC7C4: + cmp r12, r0 + andcs r0, r12, #0x3 + addcs r12, r0, r12, lsr #0x2 + addcs r7, r12, #0x1 + bhs _020BC7F4 + ldr r0, _020BC9CC ; =0x00003FFF + mov r12, r12, lsr #0x2 + add r7, r12, #0x1 + and r10, r1, r0 + mov r9, #0x4 + b _020BC800 +_020BC7F0: + add r7, r12, #0x1 +_020BC7F4: + ldr r0, _020BC9D0 ; =0x00000FFF + mov r9, #0x1 + and r10, r1, r0 +_020BC800: + mov r0, r12, lsl #0x1 + ldrh r3, [r8, r0] + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + mov r1, r7, lsl #0x1 + ldrh r3, [r8, r1] + orr r7, r0, #0x0 + add r0, sp, #0x24 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + ldr r3, [sp, #0x0] + ldr r1, [sp, #0x24] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x0] + ldr r3, [sp, #0x4] + ldr r1, [sp, #0x28] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x4] + ldr r3, [sp, #0x8] + ldr r1, [sp, #0x2c] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x8] + ldr r3, [sp, #0xc] + ldr r1, [sp, #0x30] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0xc] + ldr r2, [sp, #0x10] + ldr r1, [sp, #0x34] + orr r7, r7, r0 + sub r0, r1, r2 + mul r1, r2, r9 + mul r0, r10, r0 + add r0, r1, r0, asr #0xc + str r0, [r6, #0x10] + ldr r2, [sp, #0x14] + ldr r0, [sp, #0x38] + mul r1, r2, r9 + sub r0, r0, r2 + mul r0, r10, r0 + add r2, r1, r0, asr #0xc + mov r0, r6 + mov r1, r6 + str r2, [r6, #0x14] + bl VEC_Normalize + add r0, r6, #0xc + mov r1, r0 + bl VEC_Normalize + cmp r7, #0x0 + bne _020BC968 + ldr r3, [sp, #0x18] + ldr r1, [sp, #0x3c] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x18] + ldr r3, [sp, #0x1c] + ldr r1, [sp, #0x40] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r1, r2, r1, asr #0xc + str r1, [r6, #0x1c] + ldr r3, [sp, #0x20] + ldr r1, [sp, #0x44] + mul r2, r3, r9 + sub r1, r1, r3 + mul r1, r10, r1 + add r2, r2, r1, asr #0xc + add r0, r6, #0x18 + mov r1, r0 + str r2, [r6, #0x20] + bl VEC_Normalize + add sp, sp, #0x48 + ldmia sp!, {r4-r10,pc} +_020BC968: + ldr r9, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r8, [r6, #0x0] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + ldr r7, [r6, #0xc] + mul r1, r5, r9 + mul r0, r2, r4 + sub r0, r1, r0 + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r9 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + str r0, [r6, #0x20] + add sp, sp, #0x48 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020BC9C4: .word 0x1FFF0000 +_020BC9C8: .word 0x00001FFF +_020BC9CC: .word 0x00003FFF +_020BC9D0: .word 0x00000FFF + arm_func_end getRotDataEx_ + + arm_func_start getRotData_ +getRotData_: ; 0x020BC9D4 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4c + ldr r5, [r3, #0xc] + ldr r4, [r3, #0x10] + ldr r12, [r2, #0x0] + ldr r2, [r2, #0x4] + mov r6, r0 + mov r0, r1, asr #0xc + add r5, r3, r5 + add r4, r3, r4 + add r8, r3, r2 + ands r1, r12, #0xc0000000 + beq _020BCD40 + ldr r1, _020BCDC0 ; =0x1FFF0000 + ands r2, r12, #0x40000000 + and r1, r12, r1 + mov r2, r1, lsr #0x10 + beq _020BCA44 + ands r1, r0, #0x1 + beq _020BCA3C + cmp r0, r2 + movhi r0, r2, lsr #0x1 + addhi r0, r0, #0x1 + bhi _020BCD40 + mov r7, r0, lsr #0x1 + b _020BCBE8 +_020BCA3C: + mov r0, r0, lsr #0x1 + b _020BCD40 +_020BCA44: + ands r1, r0, #0x3 + beq _020BCBE0 + cmp r0, r2 + addhi r0, r1, r2, lsr #0x2 + bhi _020BCD40 + ands r1, r0, #0x1 + beq _020BCBD8 + ands r1, r0, #0x2 + movne r9, r0, lsr #0x2 + addne r0, r9, #0x1 + moveq r0, r0, lsr #0x2 + addeq r9, r0, #0x1 + mov r0, r0, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + mov r7, #0x0 + bl getRotDataByIdx_ + mov r1, r9, lsl #0x1 + ldrh r3, [r8, r1] + orr r7, r7, r0 + add r0, sp, #0x0 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + ldr r3, [sp, #0x0] + ldr r1, [r6, #0x0] + mov r2, #0x3 + mla r3, r1, r2, r3 + str r3, [r6, #0x0] + ldr r3, [sp, #0x4] + ldr r1, [r6, #0x4] + orr r7, r7, r0 + mla r0, r1, r2, r3 + str r0, [r6, #0x4] + ldr r3, [sp, #0x8] + ldr r1, [r6, #0x8] + mov r0, r6 + mla r3, r1, r2, r3 + str r3, [r6, #0x8] + ldr r4, [sp, #0xc] + ldr r3, [r6, #0xc] + mov r1, r6 + mla r4, r3, r2, r4 + str r4, [r6, #0xc] + ldr r4, [sp, #0x10] + ldr r3, [r6, #0x10] + mla r4, r3, r2, r4 + str r4, [r6, #0x10] + ldr r4, [sp, #0x14] + ldr r3, [r6, #0x14] + mla r2, r3, r2, r4 + str r2, [r6, #0x14] + bl VEC_Normalize + add r0, r6, #0xc + mov r1, r0 + bl VEC_Normalize + cmp r7, #0x0 + bne _020BCB7C + ldr r1, [sp, #0x18] + ldr r0, [r6, #0x18] + mov r2, #0x3 + mla r1, r0, r2, r1 + str r1, [r6, #0x18] + ldr r3, [sp, #0x1c] + ldr r1, [r6, #0x1c] + add r0, r6, #0x18 + mla r3, r1, r2, r3 + str r3, [r6, #0x1c] + ldr r4, [sp, #0x20] + ldr r3, [r6, #0x20] + mov r1, r0 + mla r2, r3, r2, r4 + str r2, [r6, #0x20] + bl VEC_Normalize + add sp, sp, #0x4c + ldmia sp!, {r4-r9,pc} +_020BCB7C: + ldr r12, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + mul r1, r5, r12 + mul r0, r2, r4 + sub r0, r1, r0 + ldr r7, [r6, #0xc] + ldr r8, [r6, #0x0] + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r12 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + add sp, sp, #0x4c + str r0, [r6, #0x20] + ldmia sp!, {r4-r9,pc} +_020BCBD8: + mov r7, r0, lsr #0x2 + b _020BCBE8 +_020BCBE0: + mov r0, r0, lsr #0x2 + b _020BCD40 +_020BCBE8: + mov r0, r7, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + add r1, r8, r7, lsl #0x1 + ldrh r3, [r1, #0x2] + orr r7, r0, #0x0 + add r0, sp, #0x24 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + ldr r2, [r6, #0x0] + ldr r1, [sp, #0x24] + orr r7, r7, r0 + add r0, r2, r1 + str r0, [r6, #0x0] + ldr r2, [r6, #0x4] + ldr r1, [sp, #0x28] + mov r0, r6 + add r1, r2, r1 + str r1, [r6, #0x4] + ldr r3, [r6, #0x8] + ldr r2, [sp, #0x2c] + mov r1, r6 + add r2, r3, r2 + str r2, [r6, #0x8] + ldr r3, [r6, #0xc] + ldr r2, [sp, #0x30] + add r2, r3, r2 + str r2, [r6, #0xc] + ldr r3, [r6, #0x10] + ldr r2, [sp, #0x34] + add r2, r3, r2 + str r2, [r6, #0x10] + ldr r3, [r6, #0x14] + ldr r2, [sp, #0x38] + add r2, r3, r2 + str r2, [r6, #0x14] + bl VEC_Normalize + add r0, r6, #0xc + mov r1, r0 + bl VEC_Normalize + cmp r7, #0x0 + bne _020BCCE4 + ldr r2, [r6, #0x18] + ldr r1, [sp, #0x3c] + add r0, r6, #0x18 + add r1, r2, r1 + str r1, [r6, #0x18] + ldr r3, [r6, #0x1c] + ldr r2, [sp, #0x40] + mov r1, r0 + add r2, r3, r2 + str r2, [r6, #0x1c] + ldr r3, [r6, #0x20] + ldr r2, [sp, #0x44] + add r2, r3, r2 + str r2, [r6, #0x20] + bl VEC_Normalize + add sp, sp, #0x4c + ldmia sp!, {r4-r9,pc} +_020BCCE4: + ldr r12, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + mul r1, r5, r12 + mul r0, r2, r4 + sub r0, r1, r0 + ldr r7, [r6, #0xc] + ldr r8, [r6, #0x0] + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r12 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + add sp, sp, #0x4c + str r0, [r6, #0x20] + ldmia sp!, {r4-r9,pc} +_020BCD40: + mov r0, r0, lsl #0x1 + ldrh r3, [r8, r0] + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl getRotDataByIdx_ + cmp r0, #0x0 + addeq sp, sp, #0x4c + ldmeqia sp!, {r4-r9,pc} + ldr r12, [r6, #0x14] + ldr r5, [r6, #0x4] + ldr r8, [r6, #0x0] + ldr r4, [r6, #0x10] + ldr r2, [r6, #0x8] + ldr r7, [r6, #0xc] + mul r1, r5, r12 + mul r0, r2, r4 + sub r0, r1, r0 + mov r3, r0, asr #0xc + mul r1, r2, r7 + mul r0, r8, r12 + sub r2, r1, r0 + mul r1, r8, r4 + mul r0, r5, r7 + sub r0, r1, r0 + str r3, [r6, #0x18] + mov r1, r2, asr #0xc + str r1, [r6, #0x1c] + mov r0, r0, asr #0xc + str r0, [r6, #0x20] + add sp, sp, #0x4c + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BCDC0: .word 0x1FFF0000 + arm_func_end getRotData_ + + arm_func_start getScaleDataEx_ +getScaleDataEx_: ; 0x020BCDC4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrh r4, [r3, #0x4] + ldr r6, [r2, #0x4] + mov r5, r1, asr #0xc + sub r4, r4, #0x1 + cmp r5, r4 + add r6, r3, r6 + ldr r2, [r2, #0x0] + bne _020BCE58 + ands r4, r2, #0xc0000000 + beq _020BCE08 + ands r4, r2, #0x40000000 + andne r4, r5, #0x1 + addne r5, r4, r5, lsr #0x1 + andeq r4, r5, #0x3 + addeq r5, r4, r5, lsr #0x2 +_020BCE08: + ldr r3, [r3, #0x8] + ands r3, r3, #0x2 + movne r4, #0x0 + bne _020BCED4 + ands r1, r2, #0x20000000 + ldreq r2, [r6, r5, lsl #0x3] + addeq r1, r6, r5, lsl #0x3 + streq r2, [r0, #0x0] + ldreq r1, [r1, #0x4] + addeq sp, sp, #0x4 + streq r1, [r0, #0x4] + ldmeqia sp!, {r4-r7,pc} + mov r1, r5, lsl #0x2 + ldrsh r2, [r6, r1] + add r1, r6, r5, lsl #0x2 + add sp, sp, #0x4 + str r2, [r0, #0x0] + ldrsh r1, [r1, #0x2] + str r1, [r0, #0x4] + ldmia sp!, {r4-r7,pc} +_020BCE58: + ands r3, r2, #0xc0000000 + beq _020BCED0 + ldr r3, _020BCF60 ; =0x1FFF0000 + ands r4, r2, #0x40000000 + and r3, r2, r3 + mov r3, r3, lsr #0x10 + beq _020BCEA0 + cmp r5, r3 + movcs r5, r3, lsr #0x1 + addcs r4, r5, #0x1 + bhs _020BCED4 + ldr r3, _020BCF64 ; =0x00001FFF + mov r5, r5, lsr #0x1 + add r4, r5, #0x1 + and lr, r1, r3 + mov r12, #0x2 + mov r3, #0x1 + b _020BCEE4 +_020BCEA0: + cmp r5, r3 + andcs r3, r5, #0x3 + addcs r5, r3, r5, lsr #0x2 + addcs r4, r5, #0x1 + bhs _020BCED4 + ldr r3, _020BCF68 ; =0x00003FFF + mov r5, r5, lsr #0x2 + add r4, r5, #0x1 + and lr, r1, r3 + mov r12, #0x4 + mov r3, #0x2 + b _020BCEE4 +_020BCED0: + add r4, r5, #0x1 +_020BCED4: + ldr r3, _020BCF6C ; =0x00000FFF + mov r12, #0x1 + and lr, r1, r3 + mov r3, #0x0 +_020BCEE4: + ands r1, r2, #0x20000000 + beq _020BCF10 + mov r2, r5, lsl #0x2 + add r1, r6, r5, lsl #0x2 + mov r5, r4, lsl #0x2 + add r4, r6, r4, lsl #0x2 + ldrsh r2, [r6, r2] + ldrsh r1, [r1, #0x2] + ldrsh r5, [r6, r5] + ldrsh r4, [r4, #0x2] + b _020BCF28 +_020BCF10: + add r1, r6, r5, lsl #0x3 + add r7, r6, r4, lsl #0x3 + ldr r2, [r6, r5, lsl #0x3] + ldr r1, [r1, #0x4] + ldr r5, [r6, r4, lsl #0x3] + ldr r4, [r7, #0x4] +_020BCF28: + sub r5, r5, r2 + sub r4, r4, r1 + mul r6, r2, r12 + mul r2, lr, r5 + add r2, r6, r2, asr #0xc + mov r5, r2, asr r3 + mul r2, r1, r12 + mul r1, lr, r4 + add r1, r2, r1, asr #0xc + mov r1, r1, asr r3 + str r5, [r0, #0x0] + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020BCF60: .word 0x1FFF0000 +_020BCF64: .word 0x00001FFF +_020BCF68: .word 0x00003FFF +_020BCF6C: .word 0x00000FFF + arm_func_end getScaleDataEx_ + + arm_func_start getScaleData_ +getScaleData_: ; 0x020BCF70 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r4, [r2, #0x4] + ldr r12, [r2, #0x0] + mov r1, r1, asr #0xc + add r3, r3, r4 + ands r2, r12, #0xc0000000 + beq _020BD0D0 + ldr r2, _020BD184 ; =0x1FFF0000 + ands r4, r12, #0x40000000 + and r2, r12, r2 + mov r4, r2, lsr #0x10 + beq _020BCFCC + ands r2, r1, #0x1 + beq _020BCFC4 + cmp r1, r4 + movhi r1, r4, lsr #0x1 + addhi r1, r1, #0x1 + bhi _020BD0D0 + mov r2, r1, lsr #0x1 + b _020BD110 +_020BCFC4: + mov r1, r1, lsr #0x1 + b _020BD0D0 +_020BCFCC: + ands r2, r1, #0x3 + beq _020BD0CC + cmp r1, r4 + addhi r1, r2, r4, lsr #0x2 + bhi _020BD0D0 + ands r2, r1, #0x1 + beq _020BD0C4 + ands r2, r1, #0x2 + movne r1, r1, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r1, lsr #0x2 + addeq r1, r2, #0x1 + ands r4, r12, #0x20000000 + beq _020BD04C + mov r5, r2, lsl #0x2 + mov r4, r1, lsl #0x2 + ldrsh r12, [r3, r5] + ldrsh r5, [r3, r4] + add r2, r3, r2, lsl #0x2 + add r4, r12, r12, lsl #0x1 + add r4, r5, r4 + mov r4, r4, asr #0x2 + str r4, [r0, #0x0] + add r1, r3, r1, lsl #0x2 + ldrsh r3, [r2, #0x2] + ldrsh r2, [r1, #0x2] + add sp, sp, #0x4 + add r1, r3, r3, lsl #0x1 + add r1, r2, r1 + mov r1, r1, asr #0x2 + str r1, [r0, #0x4] + ldmia sp!, {r4-r5,pc} +_020BD04C: + ldr r5, [r3, r2, lsl #0x3] + ldr r4, [r3, r1, lsl #0x3] + mov r12, r5, asr #0x1f + mov r12, r12, lsl #0x1 + mov lr, r5, lsl #0x1 + orr r12, r12, r5, lsr #0x1f + adds lr, lr, r5 + adc r12, r12, r5, asr #0x1f + adds lr, lr, r4 + adc r12, r12, r4, asr #0x1f + mov lr, lr, lsr #0x2 + orr lr, lr, r12, lsl #0x1e + str lr, [r0, #0x0] + add r2, r3, r2, lsl #0x3 + ldr r12, [r2, #0x4] + add r1, r3, r1, lsl #0x3 + mov r2, r12, asr #0x1f + mov r2, r2, lsl #0x1 + mov r3, r12, lsl #0x1 + ldr r1, [r1, #0x4] + orr r2, r2, r12, lsr #0x1f + adds r3, r3, r12 + adc r2, r2, r12, asr #0x1f + adds r3, r3, r1 + adc r1, r2, r1, asr #0x1f + mov r2, r3, lsr #0x2 + orr r2, r2, r1, lsl #0x1e + str r2, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020BD0C4: + mov r2, r1, lsr #0x2 + b _020BD110 +_020BD0CC: + mov r1, r1, lsr #0x2 +_020BD0D0: + ands r2, r12, #0x20000000 + ldreq r2, [r3, r1, lsl #0x3] + addeq r1, r3, r1, lsl #0x3 + streq r2, [r0, #0x0] + ldreq r1, [r1, #0x4] + addeq sp, sp, #0x4 + streq r1, [r0, #0x4] + ldmeqia sp!, {r4-r5,pc} + mov r2, r1, lsl #0x2 + ldrsh r2, [r3, r2] + add r1, r3, r1, lsl #0x2 + add sp, sp, #0x4 + str r2, [r0, #0x0] + ldrsh r1, [r1, #0x2] + str r1, [r0, #0x4] + ldmia sp!, {r4-r5,pc} +_020BD110: + ands r1, r12, #0x20000000 + beq _020BD150 + mov r1, r2, lsl #0x2 + add r12, r3, r2, lsl #0x2 + ldrsh r2, [r3, r1] + ldrsh r1, [r12, #0x4] + add sp, sp, #0x4 + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x0] + ldrsh r2, [r12, #0x2] + ldrsh r1, [r12, #0x6] + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x4] + ldmia sp!, {r4-r5,pc} +_020BD150: + add r12, r3, r2, lsl #0x3 + ldr r2, [r3, r2, lsl #0x3] + ldr r1, [r12, #0x8] + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x0] + ldr r2, [r12, #0x4] + ldr r1, [r12, #0xc] + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BD184: .word 0x1FFF0000 + arm_func_end getScaleData_ + + arm_func_start getTransDataEx_ +getTransDataEx_: ; 0x020BD188 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldrh r4, [r3, #0x4] + ldr lr, [r2, #0x4] + mov r12, r1, asr #0xc + sub r4, r4, #0x1 + cmp r12, r4 + add r4, r3, lr + ldr lr, [r2, #0x0] + bne _020BD230 + ands r2, lr, #0xc0000000 + beq _020BD1CC + ands r2, lr, #0x40000000 + andne r2, r12, #0x1 + addne r12, r2, r12, lsr #0x1 + andeq r2, r12, #0x3 + addeq r12, r2, r12, lsr #0x2 +_020BD1CC: + ldr r2, [r3, #0x8] + ands r2, r2, #0x2 + beq _020BD210 + ldr r2, _020BD2E8 ; =0x00000FFF + ands r3, lr, #0x20000000 + and r3, r1, r2 + movne r1, r12, lsl #0x1 + ldrnesh r2, [r4, r1] + ldrnesh r1, [r4, #0x0] + add sp, sp, #0x4 + ldreq r2, [r4, r12, lsl #0x2] + ldreq r1, [r4, #0x0] + sub r1, r1, r2 + mul r1, r3, r1 + add r1, r2, r1, asr #0xc + str r1, [r0, #0x0] + ldmia sp!, {r4-r5,pc} +_020BD210: + ands r1, lr, #0x20000000 + movne r1, r12, lsl #0x1 + ldrnesh r1, [r4, r1] + add sp, sp, #0x4 + strne r1, [r0, #0x0] + ldreq r1, [r4, r12, lsl #0x2] + streq r1, [r0, #0x0] + ldmia sp!, {r4-r5,pc} +_020BD230: + ands r2, lr, #0xc0000000 + beq _020BD298 + ldr r2, _020BD2EC ; =0x1FFF0000 + ands r3, lr, #0x40000000 + and r2, lr, r2 + mov r2, r2, lsr #0x10 + beq _020BD270 + cmp r12, r2 + movcs r12, r2, lsr #0x1 + bhs _020BD298 + ldr r2, _020BD2F0 ; =0x00001FFF + mov r12, r12, lsr #0x1 + and r5, r1, r2 + mov r2, #0x2 + mov r1, #0x1 + b _020BD2A8 +_020BD270: + cmp r12, r2 + andcs r2, r12, #0x3 + addcs r12, r2, r12, lsr #0x2 + bhs _020BD298 + ldr r2, _020BD2F4 ; =0x00003FFF + mov r12, r12, lsr #0x2 + and r5, r1, r2 + mov r2, #0x4 + mov r1, #0x2 + b _020BD2A8 +_020BD298: + ldr r3, _020BD2E8 ; =0x00000FFF + mov r2, #0x1 + and r5, r1, r3 + mov r1, #0x0 +_020BD2A8: + ands r3, lr, #0x20000000 + addne r3, r4, r12, lsl #0x1 + movne lr, r12, lsl #0x1 + ldrnesh r12, [r4, lr] + ldrnesh r3, [r3, #0x2] + addeq r3, r4, r12, lsl #0x2 + ldreq r12, [r4, r12, lsl #0x2] + ldreq r3, [r3, #0x4] + mul r4, r12, r2 + sub r3, r3, r12 + mul r2, r5, r3 + add r2, r4, r2, asr #0xc + mov r1, r2, asr r1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BD2E8: .word 0x00000FFF +_020BD2EC: .word 0x1FFF0000 +_020BD2F0: .word 0x00001FFF +_020BD2F4: .word 0x00003FFF + arm_func_end getTransDataEx_ + + arm_func_start getTransData_ +getTransData_: ; 0x020BD2F8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r12, [r2, #0x4] + ldr r2, [r2, #0x0] + mov r1, r1, asr #0xc + add r3, r3, r12 + ands r12, r2, #0xc0000000 + beq _020BD44C + ldr ip, _020BD46C ; =0x1FFF0000 + ands lr, r2, #0x40000000 + and r12, r2, r12 + mov lr, r12, lsr #0x10 + beq _020BD354 + ands r12, r1, #0x1 + beq _020BD34C + cmp r1, lr + movhi r1, lr, lsr #0x1 + addhi r1, r1, #0x1 + bhi _020BD44C + mov r12, r1, lsr #0x1 + b _020BD400 +_020BD34C: + mov r1, r1, lsr #0x1 + b _020BD44C +_020BD354: + ands r12, r1, #0x3 + beq _020BD3F8 + cmp r1, lr + addhi r1, r12, lr, lsr #0x2 + bhi _020BD44C + ands r12, r1, #0x1 + beq _020BD3F0 + ands r12, r1, #0x2 + movne lr, r1, lsr #0x2 + addne r12, lr, #0x1 + moveq r12, r1, lsr #0x2 + addeq lr, r12, #0x1 + ands r1, r2, #0x20000000 + beq _020BD3B4 + mov r2, r12, lsl #0x1 + mov r1, lr, lsl #0x1 + ldrsh r12, [r3, r2] + ldrsh r2, [r3, r1] + mov r1, #0x3 + add sp, sp, #0x4 + smlabb r1, r12, r1, r2 + mov r1, r1, asr #0x2 + str r1, [r0, #0x0] + ldmia sp!, {pc} +_020BD3B4: + ldr r12, [r3, r12, lsl #0x2] + ldr r1, [r3, lr, lsl #0x2] + mov r2, r12, asr #0x1f + mov r2, r2, lsl #0x1 + mov r3, r12, lsl #0x1 + orr r2, r2, r12, lsr #0x1f + adds r3, r3, r12 + adc r2, r2, r12, asr #0x1f + adds r3, r3, r1 + adc r1, r2, r1, asr #0x1f + mov r2, r3, lsr #0x2 + orr r2, r2, r1, lsl #0x1e + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} +_020BD3F0: + mov r12, r1, lsr #0x2 + b _020BD400 +_020BD3F8: + mov r1, r1, lsr #0x2 + b _020BD44C +_020BD400: + ands r1, r2, #0x20000000 + beq _020BD42C + mov r2, r12, lsl #0x1 + add r1, r3, r12, lsl #0x1 + ldrsh r2, [r3, r2] + ldrsh r1, [r1, #0x2] + add sp, sp, #0x4 + add r1, r2, r1 + mov r1, r1, asr #0x1 + str r1, [r0, #0x0] + ldmia sp!, {pc} +_020BD42C: + add r1, r3, r12, lsl #0x2 + ldr r2, [r3, r12, lsl #0x2] + ldr r1, [r1, #0x4] + mov r2, r2, asr #0x1 + add r1, r2, r1, asr #0x1 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} +_020BD44C: + ands r2, r2, #0x20000000 + movne r1, r1, lsl #0x1 + ldrnesh r1, [r3, r1] + strne r1, [r0, #0x0] + ldreq r1, [r3, r1, lsl #0x2] + streq r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BD46C: .word 0x1FFF0000 + arm_func_end getTransData_ + + arm_func_start getJntSRTAnmResult_ +getJntSRTAnmResult_: ; 0x020BD470 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x34 + mov r9, r0 + add r0, r9, r1, lsl #0x1 + ldrh r0, [r0, #0x14] + mov r7, r3 + mov r8, r2 + ldr r5, [r9, r0] + add r1, r9, r0 + ands r0, r5, #0x1 + movne r0, #0x7 + strne r0, [r7, #0x0] + bne _020BD814 + ldr r0, _020BD848 ; =0x00000FFF + add r4, r1, #0x4 + ands r0, r8, r0 + beq _020BD4C4 + ldr r0, [r9, #0x8] + ands r0, r0, #0x1 + movne r6, #0x1 + bne _020BD4C8 +_020BD4C4: + mov r6, #0x0 +_020BD4C8: + mov r0, #0x0 + str r0, [r7, #0x0] + ands r0, r5, #0x6 + bne _020BD5C0 + ands r0, r5, #0x8 + bne _020BD51C + cmp r6, #0x0 + beq _020BD500 + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x4c + bl getTransDataEx_ + b _020BD514 +_020BD500: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x4c + bl getTransData_ +_020BD514: + add r4, r4, #0x8 + b _020BD524 +_020BD51C: + ldr r0, [r4], #0x4 + str r0, [r7, #0x4c] +_020BD524: + ands r0, r5, #0x10 + bne _020BD568 + cmp r6, #0x0 + beq _020BD54C + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x50 + bl getTransDataEx_ + b _020BD560 +_020BD54C: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x50 + bl getTransData_ +_020BD560: + add r4, r4, #0x8 + b _020BD570 +_020BD568: + ldr r0, [r4], #0x4 + str r0, [r7, #0x50] +_020BD570: + ands r0, r5, #0x20 + bne _020BD5B4 + cmp r6, #0x0 + beq _020BD598 + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x54 + bl getTransDataEx_ + b _020BD5AC +_020BD598: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x54 + bl getTransData_ +_020BD5AC: + add r4, r4, #0x8 + b _020BD5DC +_020BD5B4: + ldr r0, [r4], #0x4 + str r0, [r7, #0x54] + b _020BD5DC +_020BD5C0: + ands r0, r5, #0x2 + ldrne r0, [r7, #0x0] + orrne r0, r0, #0x4 + strne r0, [r7, #0x0] + bne _020BD5DC + mov r0, r7 + bl getMdlTrans_ +_020BD5DC: + ands r0, r5, #0xc0 + bne _020BD6A8 + ands r0, r5, #0x100 + bne _020BD628 + cmp r6, #0x0 + beq _020BD60C + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x28 + bl getRotDataEx_ + b _020BD620 +_020BD60C: + mov r1, r8 + mov r2, r4 + mov r3, r9 + add r0, r7, #0x28 + bl getRotData_ +_020BD620: + add r4, r4, #0x8 + b _020BD6C4 +_020BD628: + ldr r1, [r9, #0xc] + ldr r2, [r9, #0x10] + ldr r3, [r4, #0x0] + add r0, r7, #0x28 + add r1, r9, r1 + add r2, r9, r2 + bl getRotDataByIdx_ + cmp r0, #0x0 + beq _020BD6A0 + ldr r12, [r7, #0x3c] + ldr r0, [r7, #0x2c] + ldr r3, [r7, #0x28] + ldr r11, [r7, #0x38] + ldr r1, [r7, #0x30] + ldr r2, [r7, #0x34] + mul r10, r0, r12 + mul lr, r1, r11 + sub r10, r10, lr + mov r10, r10, asr #0xc + mul lr, r1, r2 + mul r1, r3, r12 + sub r1, lr, r1 + mul r11, r3, r11 + mul r2, r0, r2 + sub r0, r11, r2 + str r10, [r7, #0x40] + mov r1, r1, asr #0xc + str r1, [r7, #0x44] + mov r0, r0, asr #0xc + str r0, [r7, #0x48] +_020BD6A0: + add r4, r4, #0x4 + b _020BD6C4 +_020BD6A8: + ands r0, r5, #0x40 + ldrne r0, [r7, #0x0] + orrne r0, r0, #0x2 + strne r0, [r7, #0x0] + bne _020BD6C4 + mov r0, r7 + bl getMdlRot_ +_020BD6C4: + ands r0, r5, #0x600 + bne _020BD7F0 + ands r0, r5, #0x800 + bne _020BD71C + cmp r6, #0x0 + beq _020BD6F4 + add r0, sp, #0x0 + mov r1, r8 + mov r2, r4 + mov r3, r9 + bl getScaleDataEx_ + b _020BD708 +_020BD6F4: + add r0, sp, #0x0 + mov r1, r8 + mov r2, r4 + mov r3, r9 + bl getScaleData_ +_020BD708: + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x18] + str r0, [sp, #0x24] + b _020BD72C +_020BD71C: + ldr r0, [r4, #0x0] + str r0, [sp, #0x18] + ldr r0, [r4, #0x4] + str r0, [sp, #0x24] +_020BD72C: + ands r0, r5, #0x1000 + bne _020BD77C + cmp r6, #0x0 + beq _020BD754 + add r0, sp, #0x8 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x8 + bl getScaleDataEx_ + b _020BD768 +_020BD754: + add r0, sp, #0x8 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x8 + bl getScaleData_ +_020BD768: + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + str r1, [sp, #0x1c] + str r0, [sp, #0x28] + b _020BD78C +_020BD77C: + ldr r0, [r4, #0x8] + str r0, [sp, #0x1c] + ldr r0, [r4, #0xc] + str r0, [sp, #0x28] +_020BD78C: + ands r0, r5, #0x2000 + bne _020BD7DC + cmp r6, #0x0 + beq _020BD7B4 + add r0, sp, #0x10 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x10 + bl getScaleDataEx_ + b _020BD7C8 +_020BD7B4: + add r0, sp, #0x10 + mov r1, r8 + mov r3, r9 + add r2, r4, #0x10 + bl getScaleData_ +_020BD7C8: + ldr r1, [sp, #0x10] + ldr r0, [sp, #0x14] + str r1, [sp, #0x20] + str r0, [sp, #0x2c] + b _020BD814 +_020BD7DC: + ldr r0, [r4, #0x10] + str r0, [sp, #0x20] + ldr r0, [r4, #0x14] + str r0, [sp, #0x2c] + b _020BD814 +_020BD7F0: + ands r0, r5, #0x200 + ldrne r0, [r7, #0x0] + orrne r0, r0, #0x1 + strne r0, [r7, #0x0] + bne _020BD814 + mov r0, r7 + bl getMdlScale_ + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} +_020BD814: + ldr r0, [r7, #0x0] + add r1, sp, #0x18 + ands r0, r0, #0x1 + ldr r0, _020BD84C ; =NNS_G3dRS + movne r3, #0x4 + ldr r4, [r0, #0x0] + moveq r3, #0x0 + ldr r2, [r4, #0x0] + ldr r4, [r4, #0xe8] + mov r0, r7 + blx r4 + add sp, sp, #0x34 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020BD848: .word 0x00000FFF +_020BD84C: .word NNS_G3dRS + arm_func_end getJntSRTAnmResult_ + + arm_func_start getMdlRot_ +getMdlRot_: ; 0x020BD850 + stmdb sp!, {r4-r8,lr} + ldr r1, _020BD990 ; =NNS_G3dRS + mov r8, r0 + ldr r0, [r1, #0x0] + ldr r3, [r0, #0xd4] + ldr r0, [r0, #0x0] + ldrh r2, [r3, #0x6] + ldrb r0, [r0, #0x1] + ldrh r1, [r3, r2] + add r2, r3, r2 + mla r0, r1, r0, r2 + ldr r0, [r0, #0x4] + ldrh r2, [r3, r0] + add r4, r3, r0 + add r1, r4, #0x4 + ands r0, r2, #0x1 + addeq r1, r1, #0xc + ands r0, r2, #0x2 + bne _020BD980 + ands r0, r2, #0x8 + beq _020BD934 + and r2, r2, #0xf0 + add r0, r8, #0x28 + mov r5, r2, asr #0x4 + ldrsh r7, [r1, #0x0] + ldrsh r6, [r1, #0x2] + bl MI_Zero36B + ldrh r0, [r4, #0x0] + add r1, r8, r5, lsl #0x2 + ands r0, r0, #0x100 + movne r0, #0x1000 + rsbne r2, r0, #0x0 + moveq r2, #0x1000 + ldr r0, _020BD994 ; =pivotUtil_ + str r2, [r1, #0x28] + ldrb r1, [r0, r5, lsl #0x2] + ldr r0, _020BD998 ; =pivotUtil_ + 1 + add r1, r8, r1, lsl #0x2 + str r7, [r1, #0x28] + ldrb r0, [r0, r5, lsl #0x2] + add r0, r8, r0, lsl #0x2 + str r6, [r0, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x200 + ldr r0, _020BD99C ; =pivotUtil_ + 2 + rsbne r6, r6, #0x0 + ldrb r0, [r0, r5, lsl #0x2] + add r0, r8, r0, lsl #0x2 + str r6, [r0, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x400 + ldr r0, _020BD9A0 ; =pivotUtil_ + 3 + rsbne r7, r7, #0x0 + ldrb r0, [r0, r5, lsl #0x2] + add r0, r8, r0, lsl #0x2 + str r7, [r0, #0x28] + ldmia sp!, {r4-r8,pc} +_020BD934: + ldrsh r0, [r4, #0x2] + str r0, [r8, #0x28] + ldrsh r0, [r1, #0x0] + str r0, [r8, #0x2c] + ldrsh r0, [r1, #0x2] + str r0, [r8, #0x30] + ldrsh r0, [r1, #0x4] + str r0, [r8, #0x34] + ldrsh r0, [r1, #0x6] + str r0, [r8, #0x38] + ldrsh r0, [r1, #0x8] + str r0, [r8, #0x3c] + ldrsh r0, [r1, #0xa] + str r0, [r8, #0x40] + ldrsh r0, [r1, #0xc] + str r0, [r8, #0x44] + ldrsh r0, [r1, #0xe] + str r0, [r8, #0x48] + ldmia sp!, {r4-r8,pc} +_020BD980: + ldr r0, [r8, #0x0] + orr r0, r0, #0x2 + str r0, [r8, #0x0] + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BD990: .word NNS_G3dRS +_020BD994: .word pivotUtil_ +_020BD998: .word pivotUtil_ + 1 +_020BD99C: .word pivotUtil_ + 2 +_020BD9A0: .word pivotUtil_ + 3 + arm_func_end getMdlRot_ + + arm_func_start getMdlScale_ +getMdlScale_: ; 0x020BD9A4 + stmdb sp!, {r4,lr} + ldr r1, _020BDA04 ; =NNS_G3dRS + ldr r12, [r1, #0x0] + ldr r4, [r12, #0xd4] + ldr r2, [r12, #0x0] + ldrh lr, [r4, #0x6] + ldrb r1, [r2, #0x1] + ldrh r3, [r4, lr] + add lr, r4, lr + mla r1, r3, r1, lr + ldr r1, [r1, #0x4] + ldrh r3, [r4, r1] + add r1, r4, r1 + add r1, r1, #0x4 + ands lr, r3, #0x1 + addeq r1, r1, #0xc + ands lr, r3, #0x2 + bne _020BD9F8 + ands lr, r3, #0x8 + addne r1, r1, #0x4 + addeq r1, r1, #0x10 +_020BD9F8: + ldr r12, [r12, #0xe8] + blx r12 + ldmia sp!, {r4,pc} + .balign 4 +_020BDA04: .word NNS_G3dRS + arm_func_end getMdlScale_ + + arm_func_start getMdlTrans_ +getMdlTrans_: ; 0x020BDA08 + ldr r1, _020BDA6C ; =NNS_G3dRS + ldr r1, [r1, #0x0] + ldr r12, [r1, #0xd4] + ldr r1, [r1, #0x0] + ldrh r3, [r12, #0x6] + ldrb r1, [r1, #0x1] + ldrh r2, [r12, r3] + add r3, r12, r3 + mla r1, r2, r1, r3 + ldr r2, [r1, #0x4] + ldrh r1, [r12, r2] + add r2, r12, r2 + ands r1, r1, #0x1 + ldrne r1, [r0, #0x0] + orrne r1, r1, #0x4 + strne r1, [r0, #0x0] + bxne lr + ldr r1, [r2, #0x4] + add r2, r2, #0x4 + str r1, [r0, #0x4c] + ldr r1, [r2, #0x4] + str r1, [r0, #0x50] + ldr r1, [r2, #0x8] + str r1, [r0, #0x54] + bx lr + .balign 4 +_020BDA6C: .word NNS_G3dRS + arm_func_end getMdlTrans_ + + arm_func_start NNSi_G3dAnmCalcNsBca +NNSi_G3dAnmCalcNsBca: ; 0x020BDA70 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r3, r0 + ldr r0, [r1, #0x8] + ldr r12, [r1, #0x0] + ldrh r1, [r0, #0x4] + mov r1, r1, lsl #0xc + cmp r12, r1 + subge r12, r1, #0x1 + bge _020BDAA0 + cmp r12, #0x0 + movlt r12, #0x0 +_020BDAA0: + mov r1, r2 + mov r2, r12 + bl getJntSRTAnmResult_ + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNSi_G3dAnmCalcNsBca + + arm_func_start NNSi_G3dAnmObjInitNsBca +NNSi_G3dAnmObjInitNsBca: ; 0x020BDAB4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + ldr r0, _020BDB3C ; =NNS_G3dFuncAnmJntNsBcaDefault + str r4, [r5, #0x8] + ldr r0, [r0, #0x0] + add r1, r5, #0x1a + str r0, [r5, #0xc] + ldrb r2, [r2, #0x17] + mov r0, #0x0 + strb r2, [r5, #0x19] + ldrb r2, [r5, #0x19] + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrh r0, [r4, #0x6] + add r2, r4, #0x14 + mov r3, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r5,pc} +_020BDB08: + mov r0, r3, lsl #0x1 + ldrh r1, [r2, r0] + add r0, r5, r3, lsl #0x1 + add r3, r3, #0x1 + ldr r1, [r4, r1] + mov r1, r1, lsr #0x18 + orr r1, r1, #0x100 + strh r1, [r0, #0x1a] + ldrh r0, [r4, #0x6] + cmp r3, r0 + blo _020BDB08 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BDB3C: .word NNS_G3dFuncAnmJntNsBcaDefault + arm_func_end NNSi_G3dAnmObjInitNsBca diff --git a/arm9/asm/NNS_G3D_nsbma.s b/arm9/asm/NNS_G3D_nsbma.s new file mode 100644 index 00000000..acadbe75 --- /dev/null +++ b/arm9/asm/NNS_G3D_nsbma.s @@ -0,0 +1,287 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G3dAnmCalcNsBma +NNSi_G3dAnmCalcNsBma: ; 0x020BDB40 + stmdb sp!, {r4-r8,lr} + ldr r7, [r1, #0x8] + mov r2, r2, lsl #0x10 + ldrh r4, [r7, #0xe] + add r5, r7, #0x8 + ldr r6, [r1, #0x0] + ldrh r3, [r5, r4] + mov r1, r2, lsr #0x10 + add r2, r5, r4 + mul r4, r3, r1 + add r3, r2, #0x4 + mov r6, r6, asr #0xc + mov r8, r0 + ldr r1, [r3, r4] + mov r0, r7 + mov r2, r6 + add r5, r3, r4 + bl GetMatColAnmValue_ + mov r4, r0 + ldr r1, [r5, #0x4] + mov r0, r7 + mov r2, r6 + bl GetMatColAnmValue_ + ldr r1, [r8, #0x4] + mov r2, r6 + and r1, r1, #0x8000 + orr r1, r1, r4 + orr r0, r1, r0, lsl #0x10 + str r0, [r8, #0x4] + mov r0, r7 + ldr r1, [r5, #0xc] + bl GetMatColAnmValue_ + mov r4, r0 + mov r0, r7 + ldr r1, [r5, #0x8] + mov r2, r6 + bl GetMatColAnmValue_ + mov r2, r6 + ldr r1, [r8, #0x8] + and r1, r1, #0x8000 + orr r0, r1, r0 + orr r0, r0, r4, lsl #0x10 + str r0, [r8, #0x8] + mov r0, r7 + ldr r1, [r5, #0x10] + bl GetMatColAnmuAlphaValue_ + ldr r1, [r8, #0xc] + bic r1, r1, #0x1f0000 + orr r0, r1, r0, lsl #0x10 + str r0, [r8, #0xc] + ldmia sp!, {r4-r8,pc} + arm_func_end NNSi_G3dAnmCalcNsBma + + arm_func_start NNSi_G3dAnmObjInitNsBma +NNSi_G3dAnmObjInitNsBma: ; 0x020BDC0C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _020BDCB4 ; =NNS_G3dFuncAnmMatNsBmaDefault + ldr r4, [r2, #0x8] + ldr r3, [r3, #0x0] + mov r9, r0 + str r3, [r9, #0xc] + ldrb r0, [r2, #0x18] + mov r8, r1 + add r4, r2, r4 + strb r0, [r9, #0x19] + ldrb r2, [r9, #0x19] + add r1, r9, #0x1a + mov r0, #0x0 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrb r0, [r8, #0x9] + mov r7, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} + mov r6, r7 + add r5, r8, #0x8 + add r4, r4, #0x4 +_020BDC6C: + ldrh r1, [r8, #0xe] + mov r0, r4 + add r2, r5, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl NNS_G3dGetResDictIdxByName + cmp r0, #0x0 + orrge r1, r7, #0x100 + addge r0, r9, r0, lsl #0x1 + strgeh r1, [r0, #0x1a] + ldrb r0, [r8, #0x9] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020BDC6C + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BDCB4: .word NNS_G3dFuncAnmMatNsBmaDefault + arm_func_end NNSi_G3dAnmObjInitNsBma + + arm_func_start GetMatColAnmuAlphaValue_ +GetMatColAnmuAlphaValue_: ; 0x020BDCB8 + ands r3, r1, #0x20000000 + movne r0, r1, lsl #0x10 + movne r0, r0, lsr #0x10 + bxne lr + ldr r3, _020BDDA4 ; =0x0000FFFF + ands r12, r1, #0xc0000000 + and r3, r1, r3 + add r0, r0, r3 + ldreqb r0, [r0, r2] + bxeq lr + ldr r3, _020BDDA8 ; =0x1FFF0000 + ands r12, r1, #0x40000000 + and r1, r1, r3 + mov r3, r1, lsr #0x10 + beq _020BDD30 + ands r1, r2, #0x1 + beq _020BDD28 + cmp r2, r3 + addhi r0, r0, r3, lsr #0x1 + ldrhib r0, [r0, #0x1] + bxhi lr + add r1, r0, r2, lsr #0x1 + ldrb r2, [r0, r2, lsr #0x1] + ldrb r0, [r1, #0x1] + add r0, r2, r0 + mov r0, r0, lsl #0xf + mov r0, r0, lsr #0x10 + bx lr +_020BDD28: + ldrb r0, [r0, r2, lsr #0x1] + bx lr +_020BDD30: + ands r1, r2, #0x3 + beq _020BDD9C + cmp r2, r3 + addhi r0, r0, r3, lsr #0x2 + ldrhib r0, [r1, r0] + bxhi lr + ands r1, r2, #0x1 + beq _020BDD80 + ands r1, r2, #0x2 + movne r1, r2, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r2, lsr #0x2 + addeq r1, r2, #0x1 + ldrb r2, [r0, r2] + ldrb r1, [r0, r1] + mov r0, #0x3 + mla r0, r2, r0, r1 + mov r0, r0, lsl #0xe + mov r0, r0, lsr #0x10 + bx lr +_020BDD80: + add r1, r0, r2, lsr #0x2 + ldrb r2, [r0, r2, lsr #0x2] + ldrb r0, [r1, #0x1] + add r0, r2, r0 + mov r0, r0, lsl #0xf + mov r0, r0, lsr #0x10 + bx lr +_020BDD9C: + ldrb r0, [r0, r2, lsr #0x2] + bx lr + .balign 4 +_020BDDA4: .word 0x0000FFFF +_020BDDA8: .word 0x1FFF0000 + arm_func_end GetMatColAnmuAlphaValue_ + + arm_func_start GetMatColAnmValue_ +GetMatColAnmValue_: ; 0x020BDDAC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ands r3, r1, #0x20000000 + movne r0, r1, lsl #0x10 + addne sp, sp, #0x4 + movne r0, r0, lsr #0x10 + ldmneia sp!, {pc} + ldr r3, _020BDF2C ; =0x0000FFFF + ands r12, r1, #0xc0000000 + and r3, r1, r3 + add r0, r0, r3 + moveq r1, r2, lsl #0x1 + addeq sp, sp, #0x4 + ldreqh r0, [r0, r1] + ldmeqia sp!, {pc} + ldr r3, _020BDF30 ; =0x1FFF0000 + ands r12, r1, #0x40000000 + and r1, r1, r3 + mov r3, r1, lsr #0x10 + beq _020BDE34 + ands r1, r2, #0x1 + beq _020BDE24 + cmp r2, r3 + bichi r1, r3, #0x1 + addhi r0, r0, r1 + addhi sp, sp, #0x4 + ldrhih r0, [r0, #0x2] + ldmhiia sp!, {pc} + mov r1, r2, lsr #0x1 + b _020BDEE0 +_020BDE24: + bic r1, r2, #0x1 + add sp, sp, #0x4 + ldrh r0, [r0, r1] + ldmia sp!, {pc} +_020BDE34: + ands r1, r2, #0x3 + beq _020BDECC + cmp r2, r3 + movhi r2, r3, lsr #0x2 + movhi r1, r1, lsl #0x1 + addhi r0, r0, r2, lsl #0x1 + addhi sp, sp, #0x4 + ldrhih r0, [r1, r0] + ldmhiia sp!, {pc} + ands r1, r2, #0x1 + beq _020BDEC4 + ands r1, r2, #0x2 + movne r1, r2, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r2, lsr #0x2 + addeq r1, r2, #0x1 + mov r2, r2, lsl #0x1 + mov r1, r1, lsl #0x1 + ldrh r12, [r0, r2] + ldrh lr, [r0, r1] + ldr r0, _020BDF34 ; =0x00007C1F + and r3, r12, #0x3e0 + and r2, lr, #0x3e0 + mov r1, #0x3 + mla r2, r3, r1, r2 + and r12, r12, r0 + and r3, lr, r0 + mla r1, r12, r1, r3 + mov r2, r2, lsr #0x2 + and r1, r0, r1, lsr #0x2 + and r0, r2, #0x3e0 + orr r0, r1, r0 + mov r0, r0, lsl #0x10 + add sp, sp, #0x4 + mov r0, r0, lsr #0x10 + ldmia sp!, {pc} +_020BDEC4: + mov r1, r2, lsr #0x2 + b _020BDEE0 +_020BDECC: + mov r1, r2, lsr #0x2 + mov r1, r1, lsl #0x1 + add sp, sp, #0x4 + ldrh r0, [r0, r1] + ldmia sp!, {pc} +_020BDEE0: + mov r2, r1, lsl #0x1 + add r1, r0, r1, lsl #0x1 + ldrh r3, [r0, r2] + ldrh r12, [r1, #0x2] + ldr r0, _020BDF34 ; =0x00007C1F + and r2, r3, #0x3e0 + and r1, r12, #0x3e0 + add r1, r2, r1 + mov r1, r1, lsr #0x1 + and r3, r3, r0 + and r2, r12, r0 + add r2, r3, r2 + and r2, r0, r2, lsr #0x1 + and r0, r1, #0x3e0 + orr r0, r2, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BDF2C: .word 0x0000FFFF +_020BDF30: .word 0x1FFF0000 +_020BDF34: .word 0x00007C1F + arm_func_end GetMatColAnmValue_ diff --git a/arm9/asm/NNS_G3D_nsbta.s b/arm9/asm/NNS_G3D_nsbta.s new file mode 100644 index 00000000..a9fde7cb --- /dev/null +++ b/arm9/asm/NNS_G3D_nsbta.s @@ -0,0 +1,299 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G3dAnmCalcNsBta +NNSi_G3dAnmCalcNsBta: ; 0x020BDF38 + stmdb sp!, {r4,lr} + ldr r12, [r1, #0x0] + mov r4, r0 + mov r2, r2, lsl #0x10 + ldr r0, [r1, #0x8] + mov r1, r2, lsr #0x10 + mov r3, r4 + mov r2, r12, asr #0xc + bl GetTexSRTAnm_ + ldr r0, [r4, #0x10] + bic r0, r0, #0xc0000000 + str r0, [r4, #0x10] + ldr r0, [r4, #0x10] + orr r0, r0, #0x40000000 + str r0, [r4, #0x10] + ldr r0, [r4, #0x0] + orr r0, r0, #0x8 + str r0, [r4, #0x0] + ldmia sp!, {r4,pc} + arm_func_end NNSi_G3dAnmCalcNsBta + + arm_func_start NNSi_G3dAnmObjInitNsBta +NNSi_G3dAnmObjInitNsBta: ; 0x020BDF84 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _020BE02C ; =NNS_G3dFuncAnmMatNsBtaDefault + ldr r4, [r2, #0x8] + ldr r3, [r3, #0x0] + mov r9, r0 + str r3, [r9, #0xc] + ldrb r0, [r2, #0x18] + mov r8, r1 + add r4, r2, r4 + strb r0, [r9, #0x19] + ldrb r2, [r9, #0x19] + add r1, r9, #0x1a + mov r0, #0x0 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrb r0, [r8, #0x9] + mov r7, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} + mov r6, r7 + add r5, r8, #0x8 + add r4, r4, #0x4 +_020BDFE4: + ldrh r1, [r8, #0xe] + mov r0, r4 + add r2, r5, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl NNS_G3dGetResDictIdxByName + cmp r0, #0x0 + orrge r1, r7, #0x100 + addge r0, r9, r0, lsl #0x1 + strgeh r1, [r0, #0x1a] + ldrb r0, [r8, #0x9] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020BDFE4 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BE02C: .word NNS_G3dFuncAnmMatNsBtaDefault + arm_func_end NNSi_G3dAnmObjInitNsBta + + arm_func_start GetTexSRTAnm_ +GetTexSRTAnm_: ; 0x020BE030 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r8, r0 + ldrh r4, [r8, #0xe] + add r5, r8, #0x8 + mov r6, r3 + ldrh r3, [r5, r4] + add r4, r5, r4 + add r4, r4, #0x4 + mla r5, r3, r1, r4 + mov r7, r2 + ldr r1, [r5, #0x18] + ldr r2, [r5, #0x1c] + mov r3, r7 + ldr r4, [r6, #0x0] + bl GetTexSRTAnmVectorVal_ + mov r9, r0 + ldr r1, [r5, #0x20] + mov r0, r8 + ldr r2, [r5, #0x24] + mov r3, r7 + bl GetTexSRTAnmVectorVal_ + cmp r9, #0x0 + bne _020BE09C + cmp r0, #0x0 + orreq r4, r4, #0x4 + beq _020BE0A8 +_020BE09C: + str r9, [r6, #0x24] + str r0, [r6, #0x28] + bic r4, r4, #0x4 +_020BE0A8: + ldr r1, [r5, #0x10] + ldr r2, [r5, #0x14] + mov r0, r8 + mov r3, r7 + bl GetTexSRTAnmSinCosVal_ + cmp r0, #0x10000000 + strneh r0, [r6, #0x20] + movne r0, r0, lsr #0x10 + strneh r0, [r6, #0x22] + orreq r4, r4, #0x2 + ldr r1, [r5, #0x0] + ldr r2, [r5, #0x4] + mov r0, r8 + mov r3, r7 + bicne r4, r4, #0x2 + bl GetTexSRTAnmVectorVal_ + mov r9, r0 + ldr r1, [r5, #0x8] + ldr r2, [r5, #0xc] + mov r0, r8 + mov r3, r7 + bl GetTexSRTAnmVectorVal_ + cmp r9, #0x1000 + bne _020BE114 + cmp r0, #0x1000 + orreq r4, r4, #0x1 + beq _020BE120 +_020BE114: + str r9, [r6, #0x18] + str r0, [r6, #0x1c] + bic r4, r4, #0x1 +_020BE120: + str r4, [r6, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + arm_func_end GetTexSRTAnm_ + + arm_func_start GetTexSRTAnmSinCosVal_ +GetTexSRTAnmSinCosVal_: ; 0x020BE12C + ands r12, r1, #0x20000000 + movne r0, r2 + bxne lr + add r0, r0, r2 + ands r2, r1, #0xc0000000 + beq _020BE1F8 + ldr r2, _020BE234 ; =0x0000FFFF + ands r12, r1, #0x40000000 + and r2, r1, r2 + beq _020BE17C + ands r1, r3, #0x1 + beq _020BE174 + cmp r3, r2 + movhi r1, r2, lsr #0x1 + addhi r3, r1, #0x1 + bhi _020BE1F8 + mov r2, r3, lsr #0x1 + b _020BE200 +_020BE174: + mov r3, r3, lsr #0x1 + b _020BE1F8 +_020BE17C: + ands r1, r3, #0x3 + beq _020BE1F4 + cmp r3, r2 + addhi r3, r1, r2, lsr #0x2 + bhi _020BE1F8 + ands r1, r3, #0x1 + beq _020BE1EC + ands r1, r3, #0x2 + movne r1, r3, lsr #0x2 + addne r2, r1, #0x1 + moveq r2, r3, lsr #0x2 + addeq r1, r2, #0x1 + mov r12, r2, lsl #0x2 + add r3, r0, r2, lsl #0x2 + mov r2, r1, lsl #0x2 + add r1, r0, r1, lsl #0x2 + ldrsh r12, [r0, r12] + ldrsh r2, [r0, r2] + mov r0, #0x3 + ldrsh r3, [r3, #0x2] + ldrsh r1, [r1, #0x2] + mla r2, r12, r0, r2 + mla r1, r3, r0, r1 + ldr r0, _020BE234 ; =0x0000FFFF + mov r1, r1, asr #0x2 + and r0, r0, r2, asr #0x2 + orr r0, r0, r1, lsl #0x10 + bx lr +_020BE1EC: + mov r2, r3, lsr #0x2 + b _020BE200 +_020BE1F4: + mov r3, r3, lsr #0x2 +_020BE1F8: + ldr r0, [r0, r3, lsl #0x2] + bx lr +_020BE200: + add r1, r0, r2, lsl #0x2 + mov r2, r2, lsl #0x2 + ldrsh r12, [r0, r2] + ldrsh r3, [r1, #0x4] + ldrsh r2, [r1, #0x2] + ldrsh r1, [r1, #0x6] + ldr r0, _020BE234 ; =0x0000FFFF + add r3, r12, r3 + add r1, r2, r1 + and r2, r0, r3, asr #0x1 + mov r0, r1, asr #0x1 + orr r0, r2, r0, lsl #0x10 + bx lr + .balign 4 +_020BE234: .word 0x0000FFFF + arm_func_end GetTexSRTAnmSinCosVal_ + + arm_func_start GetTexSRTAnmVectorVal_ +GetTexSRTAnmVectorVal_: ; 0x020BE238 + ands r12, r1, #0x20000000 + movne r0, r2 + bxne lr + add r0, r0, r2 + ands r2, r1, #0xc0000000 + beq _020BE2F0 + ldr r2, _020BE330 ; =0x0000FFFF + ands r12, r1, #0x40000000 + and r12, r1, r2 + beq _020BE288 + ands r2, r3, #0x1 + beq _020BE280 + cmp r3, r12 + movhi r2, r12, lsr #0x1 + addhi r3, r2, #0x1 + bhi _020BE2F0 + mov r3, r3, lsr #0x1 + b _020BE304 +_020BE280: + mov r3, r3, lsr #0x1 + b _020BE2F0 +_020BE288: + ands r2, r3, #0x3 + beq _020BE2EC + cmp r3, r12 + addhi r3, r2, r12, lsr #0x2 + bhi _020BE2F0 + ands r2, r3, #0x1 + beq _020BE2E4 + ands r2, r3, #0x2 + movne r3, r3, lsr #0x2 + addne r2, r3, #0x1 + moveq r2, r3, lsr #0x2 + addeq r3, r2, #0x1 + ands r1, r1, #0x10000000 + movne r2, r2, lsl #0x1 + movne r1, r3, lsl #0x1 + ldrnesh r2, [r0, r2] + ldrnesh r1, [r0, r1] + ldreq r2, [r0, r2, lsl #0x2] + ldreq r1, [r0, r3, lsl #0x2] + mov r0, #0x3 + mla r0, r2, r0, r1 + mov r0, r0, asr #0x2 + bx lr +_020BE2E4: + mov r3, r3, lsr #0x2 + b _020BE304 +_020BE2EC: + mov r3, r3, lsr #0x2 +_020BE2F0: + ands r1, r1, #0x10000000 + movne r1, r3, lsl #0x1 + ldrnesh r0, [r0, r1] + ldreq r0, [r0, r3, lsl #0x2] + bx lr +_020BE304: + ands r1, r1, #0x10000000 + movne r2, r3, lsl #0x1 + addne r1, r0, r3, lsl #0x1 + ldrnesh r2, [r0, r2] + ldrnesh r0, [r1, #0x2] + addeq r1, r0, r3, lsl #0x2 + ldreq r2, [r0, r3, lsl #0x2] + ldreq r0, [r1, #0x4] + add r0, r2, r0 + mov r0, r0, asr #0x1 + bx lr + .balign 4 +_020BE330: .word 0x0000FFFF + arm_func_end GetTexSRTAnmVectorVal_ diff --git a/arm9/asm/NNS_G3D_nsbtp.s b/arm9/asm/NNS_G3D_nsbtp.s new file mode 100644 index 00000000..0ae2aa13 --- /dev/null +++ b/arm9/asm/NNS_G3D_nsbtp.s @@ -0,0 +1,180 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G3dAnmCalcNsBtp +NNSi_G3dAnmCalcNsBtp: ; 0x020BE334 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldr r3, [r6, #0x0] + ldr r5, [r6, #0x8] + mov r1, r2, lsl #0x10 + mov r2, r3, lsl #0x4 + mov r7, r0 + mov r0, r5 + mov r1, r1, lsr #0x10 + mov r2, r2, lsr #0x10 + bl NNSi_G3dGetTexPatAnmFV + mov r4, r0 + ldrb r1, [r4, #0x2] + mov r0, r5 + bl NNSi_G3dGetTexPatAnmTexNameByIdx + mov r1, r0 + ldr r0, [r6, #0x14] + mov r2, r7 + bl SetTexParamaters_ + ldrb r1, [r4, #0x3] + cmp r1, #0xff + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + mov r0, r5 + bl NNSi_G3dGetTexPatAnmPlttNameByIdx + mov r1, r0 + ldr r0, [r6, #0x14] + mov r2, r7 + bl SetPlttParamaters_ + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNSi_G3dAnmCalcNsBtp + + arm_func_start SetPlttParamaters_ +SetPlttParamaters_: ; 0x020BE3B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrh r0, [r5, #0x34] + mov r4, r2 + add r0, r5, r0 + bl NNS_G3dGetResDataByName + ldr r1, [r5, #0x2c] + ldrh r2, [r0, #0x2] + mov r1, r1, lsl #0x10 + mov r3, r1, lsr #0x10 + ands r1, r2, #0x1 + ldrh r0, [r0, #0x0] + moveq r1, r3, lsl #0xf + moveq r3, r1, lsr #0x10 + moveq r0, r0, lsl #0xf + moveq r0, r0, lsr #0x10 + add r0, r0, r3 + str r0, [r4, #0x14] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end SetPlttParamaters_ + + arm_func_start SetTexParamaters_ +SetTexParamaters_: ; 0x020BE408 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + add r0, r5, #0x3c + mov r4, r2 + bl NNS_G3dGetResDataByName + ldr r1, [r0, #0x0] + ldr r3, [r4, #0x10] + and r1, r1, #0x1c000000 + cmp r1, #0x14000000 + ldrne r2, [r5, #0x8] + ldrne r1, _020BE4E0 ; =0x0000FFFF + andne r5, r2, r1 + ldreq r2, [r5, #0x18] + ldreq r1, _020BE4E0 ; =0x0000FFFF + andeq r5, r2, r1 + ldr r1, _020BE4E4 ; =0xC00F0000 + ldr r2, _020BE4E8 ; =0x000007FF + and r1, r3, r1 + str r1, [r4, #0x10] + ldr r1, [r0, #0x0] + ldr r3, [r4, #0x10] + add r1, r1, r5 + orr r1, r3, r1 + str r1, [r4, #0x10] + ldr r3, [r0, #0x4] + ldr r1, _020BE4EC ; =0x003FF800 + and r3, r3, r2 + strh r3, [r4, #0x2c] + ldr r3, [r0, #0x4] + and r1, r3, r1 + mov r1, r1, lsr #0xb + strh r1, [r4, #0x2e] + ldr r3, [r0, #0x4] + ldrh r1, [r4, #0x2c] + and r0, r3, r2 + and r5, r2, r3, lsr #0xb + cmp r0, r1 + moveq r0, #0x1000 + beq _020BE4B4 + mov r0, r0, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020BE4B4: + str r0, [r4, #0x30] + ldrh r1, [r4, #0x2e] + cmp r5, r1 + moveq r0, #0x1000 + beq _020BE4D4 + mov r0, r5, lsl #0xc + mov r1, r1, lsl #0xc + bl FX_Div +_020BE4D4: + str r0, [r4, #0x34] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BE4E0: .word 0x0000FFFF +_020BE4E4: .word 0xC00F0000 +_020BE4E8: .word 0x000007FF +_020BE4EC: .word 0x003FF800 + arm_func_end SetTexParamaters_ + + arm_func_start NNSi_G3dAnmObjInitNsBtp +NNSi_G3dAnmObjInitNsBtp: ; 0x020BE4F0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r3, _020BE59C ; =NNS_G3dFuncAnmMatNsBtpDefault + ldr r4, [r2, #0x8] + ldr r3, [r3, #0x0] + mov r9, r0 + str r3, [r9, #0xc] + ldrb r0, [r2, #0x18] + mov r8, r1 + add r4, r2, r4 + strb r0, [r9, #0x19] + str r8, [r9, #0x8] + ldrb r2, [r9, #0x19] + add r1, r9, #0x1a + mov r0, #0x0 + mov r2, r2, lsl #0x1 + bl MIi_CpuClear16 + ldrb r0, [r8, #0xd] + mov r7, #0x0 + cmp r0, #0x0 + addls sp, sp, #0x4 + ldmlsia sp!, {r4-r9,pc} + mov r6, r7 + add r5, r8, #0xc + add r4, r4, #0x4 +_020BE554: + ldrh r1, [r8, #0x12] + mov r0, r4 + add r2, r5, r1 + ldrh r1, [r2, #0x2] + add r1, r2, r1 + add r1, r1, r6 + bl NNS_G3dGetResDictIdxByName + cmp r0, #0x0 + orrge r1, r7, #0x100 + addge r0, r9, r0, lsl #0x1 + strgeh r1, [r0, #0x1a] + ldrb r0, [r8, #0xd] + add r7, r7, #0x1 + add r6, r6, #0x10 + cmp r7, r0 + blo _020BE554 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BE59C: .word NNS_G3dFuncAnmMatNsBtpDefault + arm_func_end NNSi_G3dAnmObjInitNsBtp diff --git a/arm9/asm/NNS_G3D_nsbva.s b/arm9/asm/NNS_G3D_nsbva.s new file mode 100644 index 00000000..e8dc75e4 --- /dev/null +++ b/arm9/asm/NNS_G3D_nsbva.s @@ -0,0 +1,49 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G3dAnmCalcNsBva +NNSi_G3dAnmCalcNsBva: ; 0x020BE5A0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, [r1, #0x8] + ldr r3, [r1, #0x0] + ldrh r1, [lr, #0x6] + mov r12, r3, asr #0xc + mov r3, #0x1 + mla r2, r12, r1, r2 + mov r1, r2, lsr #0x5 + add r1, lr, r1, lsl #0x2 + ldr r1, [r1, #0xc] + and r2, r2, #0x1f + and r1, r1, r3, lsl r2 + str r1, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNSi_G3dAnmCalcNsBva + + arm_func_start NNSi_G3dAnmObjInitNsBva +NNSi_G3dAnmObjInitNsBva: ; 0x020BE5E0 + ldr r3, _020BE628 ; =NNS_G3dFuncAnmVisNsBvaDefault + mov r12, #0x0 + ldr r3, [r3, #0x0] + str r3, [r0, #0xc] + ldrb r2, [r2, #0x17] + strb r2, [r0, #0x19] + str r1, [r0, #0x8] + ldrb r1, [r0, #0x19] + cmp r1, #0x0 + bxls lr +_020BE608: + orr r2, r12, #0x100 + add r1, r0, r12, lsl #0x1 + strh r2, [r1, #0x1a] + ldrb r1, [r0, #0x19] + add r12, r12, #0x1 + cmp r12, r1 + blo _020BE608 + bx lr + .balign 4 +_020BE628: .word NNS_G3dFuncAnmVisNsBvaDefault + arm_func_end NNSi_G3dAnmObjInitNsBva diff --git a/arm9/asm/NNS_G3D_res_struct_acce.s b/arm9/asm/NNS_G3D_res_struct_acce.s new file mode 100644 index 00000000..e0420f9b --- /dev/null +++ b/arm9/asm/NNS_G3D_res_struct_acce.s @@ -0,0 +1,317 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G3dGetTex +NNS_G3dGetTex: ; 0x020BC0FC + ldrh r2, [r0, #0xc] + ldrh r1, [r0, #0xe] + add r3, r0, r2 + cmp r1, #0x1 + bne _020BC12C + ldr r2, [r0, #0x0] + ldr r1, _020BC138 ; =0x30585442 + cmp r2, r1 + ldreq r1, [r3, #0x0] + addeq r0, r0, r1 + movne r0, #0x0 + bx lr +_020BC12C: + ldr r1, [r3, #0x4] + add r0, r0, r1 + bx lr + .balign 4 +_020BC138: .word 0x30585442 + arm_func_end NNS_G3dGetTex + + arm_func_start NNS_G3dGetMdlSet +NNS_G3dGetMdlSet: ; 0x020BC13C + ldrh r1, [r0, #0xc] + ldr r1, [r0, r1] + add r0, r0, r1 + bx lr + arm_func_end NNS_G3dGetMdlSet + + arm_func_start NNS_G3dGetResDictIdxByName +NNS_G3dGetResDictIdxByName: ; 0x020BC14C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrb r2, [r0, #0x1] + cmp r2, #0x10 + bhs _020BC1E4 + cmp r2, #0x0 + ldr lr, [r1, #0x0] + ldr r12, [r1, #0x4] + ldr r3, [r1, #0x8] + ldr r2, [r1, #0xc] + mov r4, #0x0 + bls _020BC294 + ldrh r5, [r0, #0x6] + mov r1, r4 + add r6, r0, r5 + ldrh r5, [r6, #0x2] + add r6, r6, r5 +_020BC190: + ldr r5, [r6, r1] + add r7, r6, r1 + cmp r5, lr + bne _020BC1CC + ldr r5, [r7, #0x4] + cmp r5, r12 + bne _020BC1CC + ldr r5, [r7, #0x8] + cmp r5, r3 + bne _020BC1CC + ldr r5, [r7, #0xc] + cmp r5, r2 + addeq sp, sp, #0x4 + moveq r0, r4 + ldmeqia sp!, {r4-r7,pc} +_020BC1CC: + ldrb r5, [r0, #0x1] + add r4, r4, #0x1 + add r1, r1, #0x10 + cmp r4, r5 + blo _020BC190 + b _020BC294 +_020BC1E4: + add r3, r0, #0x8 + ldrb r2, [r3, #0x1] + cmp r2, #0x0 + beq _020BC294 + ldrb r5, [r3, r2, lsl #0x2] + ldrb r4, [r3, #0x0] + add r2, r3, r2, lsl #0x2 + cmp r4, r5 + bls _020BC238 +_020BC208: + mov r4, r5, asr #0x5 + ldr r12, [r1, r4, lsl #0x2] + and r4, r5, #0x1f + mov r4, r12, lsr r4 + and r4, r4, #0x1 + add r4, r2, r4 + ldrb r12, [r4, #0x1] + ldrb r4, [r2, #0x0] + ldrb r5, [r3, r12, lsl #0x2] + add r2, r3, r12, lsl #0x2 + cmp r4, r5 + bhi _020BC208 +_020BC238: + ldrh r4, [r0, #0x6] + ldr r3, [r1, #0x0] + add r12, r0, r4 + ldrh r4, [r12, #0x2] + ldrb r0, [r2, #0x3] + add r4, r12, r4 + ldr r2, [r4, r0, lsl #0x4] + add r4, r4, r0, lsl #0x4 + cmp r2, r3 + bne _020BC294 + ldr r3, [r4, #0x4] + ldr r2, [r1, #0x4] + cmp r3, r2 + bne _020BC294 + ldr r3, [r4, #0x8] + ldr r2, [r1, #0x8] + cmp r3, r2 + bne _020BC294 + ldr r2, [r4, #0xc] + ldr r1, [r1, #0xc] + cmp r2, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} +_020BC294: + mvn r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G3dGetResDictIdxByName + + arm_func_start NNS_G3dGetResDataByName +NNS_G3dGetResDataByName: ; 0x020BC2A0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldrb r2, [r0, #0x1] + cmp r2, #0x10 + bhs _020BC34C + cmp r2, #0x0 + ldr lr, [r1, #0x0] + ldr r12, [r1, #0x4] + ldr r3, [r1, #0x8] + ldr r2, [r1, #0xc] + mov r4, #0x0 + bls _020BC404 + ldrh r5, [r0, #0x6] + mov r1, r4 + add r6, r0, r5 + ldrh r5, [r6, #0x2] + add r6, r6, r5 +_020BC2E4: + ldr r5, [r6, r1] + add r7, r6, r1 + cmp r5, lr + bne _020BC334 + ldr r5, [r7, #0x4] + cmp r5, r12 + bne _020BC334 + ldr r5, [r7, #0x8] + cmp r5, r3 + bne _020BC334 + ldr r5, [r7, #0xc] + cmp r5, r2 + bne _020BC334 + ldrh r2, [r0, #0x6] + add sp, sp, #0x4 + ldrh r1, [r0, r2] + add r0, r0, r2 + add r0, r0, #0x4 + mla r0, r1, r4, r0 + ldmia sp!, {r4-r7,pc} +_020BC334: + ldrb r5, [r0, #0x1] + add r4, r4, #0x1 + add r1, r1, #0x10 + cmp r4, r5 + blo _020BC2E4 + b _020BC404 +_020BC34C: + add r3, r0, #0x8 + ldrb r2, [r3, #0x1] + cmp r2, #0x0 + beq _020BC404 + ldrb r5, [r3, r2, lsl #0x2] + ldrb r4, [r3, #0x0] + add r2, r3, r2, lsl #0x2 + cmp r4, r5 + bls _020BC3A0 +_020BC370: + mov r4, r5, asr #0x5 + ldr r12, [r1, r4, lsl #0x2] + and r4, r5, #0x1f + mov r4, r12, lsr r4 + and r4, r4, #0x1 + add r4, r2, r4 + ldrb r12, [r4, #0x1] + ldrb r4, [r2, #0x0] + ldrb r5, [r3, r12, lsl #0x2] + add r2, r3, r12, lsl #0x2 + cmp r4, r5 + bhi _020BC370 +_020BC3A0: + ldrh r4, [r0, #0x6] + ldrb r2, [r2, #0x3] + ldr r3, [r1, #0x0] + add r0, r0, r4 + ldrh r4, [r0, #0x2] + add r12, r0, r4 + ldr r4, [r12, r2, lsl #0x4] + add r12, r12, r2, lsl #0x4 + cmp r4, r3 + bne _020BC404 + ldr r4, [r12, #0x4] + ldr r3, [r1, #0x4] + cmp r4, r3 + bne _020BC404 + ldr r4, [r12, #0x8] + ldr r3, [r1, #0x8] + cmp r4, r3 + bne _020BC404 + ldr r3, [r12, #0xc] + ldr r1, [r1, #0xc] + cmp r3, r1 + ldreqh r1, [r0], #0x4 + addeq sp, sp, #0x4 + mlaeq r0, r1, r2, r0 + ldmeqia sp!, {r4-r7,pc} +_020BC404: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end NNS_G3dGetResDataByName + + arm_func_start NNSi_G3dGetTexPatAnmDataByIdx +NNSi_G3dGetTexPatAnmDataByIdx: ; 0x020BC410 + ldrh r3, [r0, #0x12] + add r0, r0, #0xc + ldrh r2, [r0, r3] + add r0, r0, r3 + add r0, r0, #0x4 + mla r0, r2, r1, r0 + bx lr + arm_func_end NNSi_G3dGetTexPatAnmDataByIdx + + arm_func_start NNSi_G3dGetTexPatAnmFV +NNSi_G3dGetTexPatAnmFV: ; 0x020BC42C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r2 + bl NNSi_G3dGetTexPatAnmDataByIdx + ldrsh r1, [r0, #0x4] + ldrh r3, [r0, #0x6] + mul r2, r1, r4 + add r3, r5, r3 + mov r2, r2, lsr #0xc + b _020BC45C +_020BC458: + sub r2, r2, #0x1 +_020BC45C: + cmp r2, #0x0 + beq _020BC474 + mov r1, r2, lsl #0x2 + ldrh r1, [r3, r1] + cmp r1, r4 + bhs _020BC458 +_020BC474: + ldrh r1, [r0, #0x0] + b _020BC480 +_020BC47C: + add r2, r2, #0x1 +_020BC480: + add r0, r2, #0x1 + cmp r0, r1 + bhs _020BC49C + add r0, r3, r2, lsl #0x2 + ldrh r0, [r0, #0x4] + cmp r0, r4 + bls _020BC47C +_020BC49C: + add r0, r3, r2, lsl #0x2 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNSi_G3dGetTexPatAnmFV + + arm_func_start NNSi_G3dGetTexPatAnmPlttNameByIdx +NNSi_G3dGetTexPatAnmPlttNameByIdx: ; 0x020BC4A8 + ldrh r2, [r0, #0xa] + add r0, r0, r2 + add r0, r0, r1, lsl #0x4 + bx lr + arm_func_end NNSi_G3dGetTexPatAnmPlttNameByIdx + + arm_func_start NNSi_G3dGetTexPatAnmTexNameByIdx +NNSi_G3dGetTexPatAnmTexNameByIdx: ; 0x020BC4B8 + ldrh r2, [r0, #0x8] + add r0, r0, r2 + add r0, r0, r1, lsl #0x4 + bx lr + arm_func_end NNSi_G3dGetTexPatAnmTexNameByIdx + + arm_func_start NNS_G3dGetAnmByIdx +NNS_G3dGetAnmByIdx: ; 0x020BC4C8 + ldrh r2, [r0, #0xc] + ldr r2, [r0, r2] + add r12, r0, r2 + ldrh r2, [r12, #0xe] + add r3, r12, #0x8 + ldrh r0, [r3, r2] + add r2, r3, r2 + add r2, r2, #0x4 + mul r1, r0, r1 + adds r0, r2, r1 + ldrne r0, [r0, #0x0] + addne r0, r12, r0 + moveq r0, #0x0 + bx lr + arm_func_end NNS_G3dGetAnmByIdx diff --git a/arm9/asm/NNS_G3D_sbc.s b/arm9/asm/NNS_G3D_sbc.s new file mode 100644 index 00000000..86ee394f --- /dev/null +++ b/arm9/asm/NNS_G3D_sbc.s @@ -0,0 +1,2738 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global matColorMask_$8998 +matColorMask_$8998: ; 0x020FF9D0 + .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F + .byte 0x00, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F + ; static const in function + + .global pivotUtil_$9100 +pivotUtil_$9100: ; 0x020FF9F0 + .byte 0x04, 0x05, 0x07, 0x08 + .byte 0x03, 0x05, 0x06, 0x08 + .byte 0x03, 0x04, 0x06, 0x07 + .byte 0x01, 0x02, 0x07, 0x08 + .byte 0x00, 0x02, 0x06, 0x08 + .byte 0x00, 0x01, 0x06, 0x07 + .byte 0x01, 0x02, 0x04, 0x05 + .byte 0x00, 0x02, 0x03, 0x05 + .byte 0x00, 0x01, 0x03, 0x04 + ; static const in function + + .section .data + + .global cmd$9407 +cmd$9407: ; 0x02106630 + .byte 0x2A, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global cmd$9366 +cmd$9366: ; 0x02106638 + .byte 0x2A, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .global NNS_G3dFuncSbcMatTable +NNS_G3dFuncSbcMatTable: ; 0x02106640 + .word NNSi_G3dFuncSbc_MAT_InternalDefault + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global NNS_G3dFuncSbcShpTable +NNS_G3dFuncSbcShpTable: ; 0x02106650 + .word NNSi_G3dFuncSbc_SHP_InternalDefault + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .global mtx$9412 +mtx$9412: ; 0x02106660 + .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, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 + + .global bbcmd1$9173 +bbcmd1$9173: ; 0x021066A0 + .byte 0x12, 0x10, 0x17, 0x1B + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00 + .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 + + .global bbcmd1$9234 +bbcmd1$9234: ; 0x021066E8 + .byte 0x12, 0x10, 0x17, 0x1B + .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x10, 0x00, 0x00 + .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 + + .global NNS_G3dFuncSbcTable +NNS_G3dFuncSbcTable: ; 0x02106730 + .word NNSi_G3dFuncSbc_NOP + .word NNSi_G3dFuncSbc_RET + .word NNSi_G3dFuncSbc_NODE + .word NNSi_G3dFuncSbc_MTX + .word NNSi_G3dFuncSbc_MAT + .word NNSi_G3dFuncSbc_SHP + .word NNSi_G3dFuncSbc_NODEDESC + .word NNSi_G3dFuncSbc_BB + .word NNSi_G3dFuncSbc_BBY + .word NNSi_G3dFuncSbc_NODEMIX + .word NNSi_G3dFuncSbc_CALLDL + .word NNSi_G3dFuncSbc_POSSCALE + .word NNSi_G3dFuncSbc_ENVMAP + .word NNSi_G3dFuncSbc_PRJMAP + .byte 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .bss + + .global NNS_G3dRS +NNS_G3dRS: ; 0x021CEF7C + .space 0x4 + + .global NNS_G3dRSOnGlb +NNS_G3dRSOnGlb: ; 0x021CEF80 + .space 0x2d00 + + .section .text + + arm_func_start NNSi_G3dFuncSbc_PRJMAP +NNSi_G3dFuncSbc_PRJMAP: ; 0x020B8A60 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x80 + mov r5, r0 + ldr r1, [r5, #0x8] + ands r0, r1, #0x200 + bne _020B8DB4 + ands r0, r1, #0x1 + beq _020B8DB4 + add r0, sp, #0x10 + mov r1, #0x0 + bl NNS_G3dGetCurrentMtx + mov r0, #0x1e + str r0, [sp, #0x0] + add r1, sp, #0x0 + mov r0, #0x13 + mov r2, #0x1 + bl NNS_G3dGeBufferOP_N + ldr r2, [r5, #0xb0] + ldr r0, [r2, #0x10] + and r1, r0, #0xc0000000 + cmp r1, #0xc0000000 + beq _020B8AF0 + bic r0, r0, #0xc0000000 + str r0, [r2, #0x10] + ldr r2, [r5, #0xb0] + ldr r3, _020B8DC8 ; =cmd$9407 + ldr r0, [r2, #0x10] + ldr r1, _020B8DCC ; =cmd$9407 + 0x4 + orr r0, r0, #0xc0000000 + str r0, [r2, #0x10] + ldr r2, [r5, #0xb0] + ldr r0, [r3, #0x0] + ldr r4, [r2, #0x10] + mov r2, #0x1 + str r4, [r3, #0x4] + bl NNS_G3dGeBufferOP_N +_020B8AF0: + ldr r0, [r5, #0x40] + cmp r0, #0x0 + ldrneb r4, [r5, #0x99] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020B8B3C + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x40] + blx r1 + ldr r0, [r5, #0x40] + cmp r0, #0x0 + ldrneb r4, [r5, #0x99] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020B8B40 +_020B8B3C: + mov r0, #0x0 +_020B8B40: + cmp r0, #0x0 + bne _020B8B84 + ldr r0, [r5, #0xb0] + ldr r1, _020B8DD0 ; =mtx$9412 + ldrh r6, [r0, #0x2e] + ldrh r3, [r0, #0x2c] + mov r0, #0x16 + rsb r2, r6, #0x0 + mov lr, r3, lsl #0xf + mov r12, r2, lsl #0xf + mov r3, r6, lsl #0xf + mov r2, #0x10 + str lr, [r1, #0x0] + str r12, [r1, #0x14] + str lr, [r1, #0x30] + str r3, [r1, #0x34] + bl NNS_G3dGeBufferOP_N +_020B8B84: + cmp r4, #0x2 + bne _020B8BC0 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x40] + blx r1 + ldr r0, [r5, #0x40] + cmp r0, #0x0 + ldrneb r4, [r5, #0x99] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020B8BC4 +_020B8BC0: + mov r0, #0x0 +_020B8BC4: + cmp r0, #0x0 + bne _020B8C28 + ldr r12, [r5, #0xd8] + ldr r0, [r5, #0x0] + ldrh r2, [r12, #0xa] + add r3, r12, #0x4 + ldrb r0, [r0, #0x1] + ldrh r1, [r3, r2] + add r2, r3, r2 + mla r0, r1, r0, r2 + ldr r0, [r0, #0x4] + add r1, r12, r0 + ldrh r2, [r1, #0x1e] + ands r0, r2, #0x2000 + beq _020B8C28 + add r1, r1, #0x2c + ands r0, r2, #0x2 + addeq r1, r1, #0x8 + ands r0, r2, #0x4 + addeq r1, r1, #0x4 + ands r0, r2, #0x8 + addeq r1, r1, #0x8 + mov r0, #0x18 + mov r2, #0x10 + bl NNS_G3dGeBufferOP_N +_020B8C28: + cmp r4, #0x3 + movne r0, #0x0 + bne _020B8C54 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x40] + blx r1 + ldr r0, [r5, #0x8] + and r0, r0, #0x40 +_020B8C54: + cmp r0, #0x0 + bne _020B8D84 + ldr r0, _020B8DD4 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B8CA0 + ldr r1, _020B8DD8 ; =NNS_G3dGlb + 0xE0 + mov r0, #0x1c + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N + ldr r1, _020B8DDC ; =NNS_G3dGlb + 0xBC + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + add r1, sp, #0x10 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N + b _020B8CE0 +_020B8CA0: + ands r0, r1, #0x2 + beq _020B8CBC + add r1, sp, #0x10 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N + b _020B8CE0 +_020B8CBC: + bl NNS_G3dGlbGetInvV + mov r1, r0 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N + add r1, sp, #0x10 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N +_020B8CE0: + bl NNS_G3dGeFlushBuffer + ldr r0, _020B8DE0 ; =0x04000440 + mov r2, #0x0 + ldr r1, _020B8DE4 ; =0x04000444 + str r2, [r0, #0x0] + ldr r0, _020B8DE8 ; =0x04000454 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + add r4, sp, #0x40 +_020B8D04: + mov r0, r4 + bl G3X_GetClipMtx + cmp r0, #0x0 + bne _020B8D04 + ldr r1, _020B8DEC ; =0x04000448 + mov r2, #0x1 + str r2, [r1, #0x0] + ldr r0, _020B8DE0 ; =0x04000440 + mov r2, #0x3 + str r2, [r0, #0x0] + add r1, sp, #0x40 + mov r0, #0x16 + mov r2, #0x10 + bl NNS_G3dGeBufferOP_N + ldr r1, [sp, #0x70] + ldr r0, [sp, #0x74] + mov r2, r1, asr #0x4 + mov r1, r0, asr #0x4 + mov r0, r2, lsl #0x8 + mov r1, r1, lsl #0x8 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r1, lsr #0x10 + orr r3, r2, r0, lsl #0x10 + add r1, sp, #0x4 + mov r0, #0x22 + mov r2, #0x1 + str r3, [sp, #0x4] + bl NNS_G3dGeBufferOP_N +_020B8D84: + mov r3, #0x2 + add r1, sp, #0x8 + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0x8] + bl NNS_G3dGeBufferOP_N + mov r3, #0x1e + add r1, sp, #0xc + mov r0, #0x14 + mov r2, #0x1 + str r3, [sp, #0xc] + bl NNS_G3dGeBufferOP_N +_020B8DB4: + ldr r0, [r5, #0x0] + add r0, r0, #0x3 + str r0, [r5, #0x0] + add sp, sp, #0x80 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020B8DC8: .word cmd$9407 +_020B8DCC: .word cmd$9407 + 0x4 +_020B8DD0: .word mtx$9412 +_020B8DD4: .word NNS_G3dGlb +_020B8DD8: .word NNS_G3dGlb + 0xE0 +_020B8DDC: .word NNS_G3dGlb + 0xBC +_020B8DE0: .word 0x04000440 +_020B8DE4: .word 0x04000444 +_020B8DE8: .word 0x04000454 +_020B8DEC: .word 0x04000448 + arm_func_end NNSi_G3dFuncSbc_PRJMAP + + arm_func_start NNSi_G3dFuncSbc_ENVMAP +NNSi_G3dFuncSbc_ENVMAP: ; 0x020B8DF0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x44 + mov r7, r0 + ldr r1, [r7, #0x8] + ands r0, r1, #0x200 + bne _020B90E8 + ands r0, r1, #0x1 + beq _020B90E8 + ldr r2, [r7, #0xb0] + ldr r0, [r2, #0x10] + and r1, r0, #0xc0000000 + cmp r1, #0x80000000 + beq _020B8E5C + bic r0, r0, #0xc0000000 + str r0, [r2, #0x10] + ldr r2, [r7, #0xb0] + ldr r3, _020B90FC ; =cmd$9366 + ldr r0, [r2, #0x10] + ldr r1, _020B9100 ; =cmd$9366 + 0x4 + orr r0, r0, #0x80000000 + str r0, [r2, #0x10] + ldr r2, [r7, #0xb0] + ldr r0, [r3, #0x0] + ldr r4, [r2, #0x10] + mov r2, #0x1 + str r4, [r3, #0x4] + bl NNS_G3dGeBufferOP_N +_020B8E5C: + mov r0, #0x3 + str r0, [sp, #0x0] + add r1, sp, #0x0 + mov r0, #0x10 + mov r2, #0x1 + bl NNS_G3dGeBufferOP_N + ldr r0, [r7, #0x3c] + cmp r0, #0x0 + ldrneb r6, [r7, #0x98] + moveq r6, #0x0 + cmp r6, #0x1 + bne _020B8EC0 + ldr r1, [r7, #0x8] + mov r0, r7 + bic r1, r1, #0x40 + str r1, [r7, #0x8] + ldr r1, [r7, #0x3c] + blx r1 + ldr r0, [r7, #0x3c] + cmp r0, #0x0 + ldrneb r6, [r7, #0x98] + ldr r0, [r7, #0x8] + moveq r6, #0x0 + and r0, r0, #0x40 + b _020B8EC4 +_020B8EC0: + mov r0, #0x0 +_020B8EC4: + cmp r0, #0x0 + bne _020B8F3C + ldr r0, [r7, #0xb0] + add r1, sp, #0x38 + ldrh r4, [r0, #0x2e] + ldrh r5, [r0, #0x2c] + mov r3, #0x10000 + rsb r0, r4, #0x0 + mov r12, r0, lsl #0xf + mov lr, r5, lsl #0xf + mov r0, #0x1b + mov r2, #0x3 + str lr, [sp, #0x38] + str r12, [sp, #0x3c] + str r3, [sp, #0x40] + bl NNS_G3dGeBufferOP_N + mov r0, r5, lsl #0x13 + mov r1, r4, lsl #0x13 + mov r0, r0, asr #0x10 + mov r1, r1, asr #0x10 + mov r0, r0, lsl #0x10 + mov r1, r1, lsl #0x10 + mov r2, r0, lsr #0x10 + mov r0, r1, lsr #0x10 + orr r3, r2, r0, lsl #0x10 + add r1, sp, #0x4 + mov r0, #0x22 + mov r2, #0x1 + str r3, [sp, #0x4] + bl NNS_G3dGeBufferOP_N +_020B8F3C: + cmp r6, #0x2 + bne _020B8F78 + ldr r1, [r7, #0x8] + mov r0, r7 + bic r1, r1, #0x40 + str r1, [r7, #0x8] + ldr r1, [r7, #0x3c] + blx r1 + ldr r0, [r7, #0x3c] + cmp r0, #0x0 + ldrneb r6, [r7, #0x98] + ldr r0, [r7, #0x8] + moveq r6, #0x0 + and r0, r0, #0x40 + b _020B8F7C +_020B8F78: + mov r0, #0x0 +_020B8F7C: + cmp r0, #0x0 + bne _020B8FE0 + ldr r4, [r7, #0xd8] + ldr r0, [r7, #0x0] + ldrh r2, [r4, #0xa] + add r3, r4, #0x4 + ldrb r0, [r0, #0x1] + ldrh r1, [r3, r2] + add r2, r3, r2 + mla r0, r1, r0, r2 + ldr r0, [r0, #0x4] + add r1, r4, r0 + ldrh r2, [r1, #0x1e] + ands r0, r2, #0x2000 + beq _020B8FE0 + add r1, r1, #0x2c + ands r0, r2, #0x2 + addeq r1, r1, #0x8 + ands r0, r2, #0x4 + addeq r1, r1, #0x4 + ands r0, r2, #0x8 + addeq r1, r1, #0x8 + mov r0, #0x18 + mov r2, #0x10 + bl NNS_G3dGeBufferOP_N +_020B8FE0: + cmp r6, #0x3 + movne r0, #0x0 + bne _020B900C + ldr r1, [r7, #0x8] + mov r0, r7 + bic r1, r1, #0x40 + str r1, [r7, #0x8] + ldr r1, [r7, #0x3c] + blx r1 + ldr r0, [r7, #0x8] + and r0, r0, #0x40 +_020B900C: + cmp r0, #0x0 + bne _020B90D0 + mov r3, #0x2 + add r1, sp, #0x8 + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0x8] + bl NNS_G3dGeBufferOP_N + add r1, sp, #0x14 + mov r0, #0x0 + bl NNS_G3dGetCurrentMtx + mov r3, #0x3 + add r1, sp, #0xc + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0xc] + bl NNS_G3dGeBufferOP_N + ldr r0, _020B9104 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9094 + ldr r1, _020B9108 ; =NNS_G3dGlb + 0x4C + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + ldr r1, _020B910C ; =NNS_G3dGlb + 0xBC + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + add r1, sp, #0x14 + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + b _020B90D0 +_020B9094: + ands r0, r1, #0x2 + beq _020B90C0 + ldr r1, _020B9108 ; =NNS_G3dGlb + 0x4C + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + add r1, sp, #0x14 + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + b _020B90D0 +_020B90C0: + add r1, sp, #0x14 + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N +_020B90D0: + mov r3, #0x2 + add r1, sp, #0x10 + mov r0, #0x10 + mov r2, #0x1 + str r3, [sp, #0x10] + bl NNS_G3dGeBufferOP_N +_020B90E8: + ldr r0, [r7, #0x0] + add r0, r0, #0x3 + str r0, [r7, #0x0] + add sp, sp, #0x44 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020B90FC: .word cmd$9366 +_020B9100: .word cmd$9366 + 0x4 +_020B9104: .word NNS_G3dGlb +_020B9108: .word NNS_G3dGlb + 0x4C +_020B910C: .word NNS_G3dGlb + 0xBC + arm_func_end NNSi_G3dFuncSbc_ENVMAP + + arm_func_start NNSi_G3dFuncSbc_POSSCALE +NNSi_G3dFuncSbc_POSSCALE: ; 0x020B9110 + stmdb sp!, {r4,lr} + sub sp, sp, #0x10 + mov r4, r0 + ldr r2, [r4, #0x8] + ands r0, r2, #0x100 + bne _020B9164 + ands r0, r2, #0x200 + bne _020B9164 + cmp r1, #0x0 + ldreq r0, [r4, #0xe0] + add r1, sp, #0x0 + streq r0, [sp, #0x8] + streq r0, [sp, #0x4] + streq r0, [sp, #0x0] + ldrne r0, [r4, #0xe4] + mov r2, #0x3 + strne r0, [sp, #0x8] + strne r0, [sp, #0x4] + strne r0, [sp, #0x0] + mov r0, #0x1b + bl NNS_G3dGeBufferOP_N +_020B9164: + ldr r0, [r4, #0x0] + add r0, r0, #0x1 + str r0, [r4, #0x0] + add sp, sp, #0x10 + ldmia sp!, {r4,pc} + arm_func_end NNSi_G3dFuncSbc_POSSCALE + + arm_func_start NNSi_G3dFuncSbc_CALLDL +NNSi_G3dFuncSbc_CALLDL: ; 0x020B9178 + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r0, [r5, #0x34] + cmp r0, #0x0 + ldrneb r4, [r5, #0x96] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020B91CC + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x34] + blx r1 + ldr r0, [r5, #0x34] + cmp r0, #0x0 + ldrneb r4, [r5, #0x96] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r1, r0, #0x40 + b _020B91D0 +_020B91CC: + mov r1, #0x0 +_020B91D0: + ldr r0, [r5, #0x8] + ands r0, r0, #0x100 + bne _020B9228 + cmp r1, #0x0 + bne _020B9228 + ldr r0, [r5, #0x0] + ldrb r12, [r0, #0x1] + ldrb r3, [r0, #0x2] + ldrb lr, [r0, #0x3] + ldrb r2, [r0, #0x5] + ldrb r1, [r0, #0x6] + orr r3, r12, r3, lsl #0x8 + ldrb r6, [r0, #0x4] + orr r12, r3, lr, lsl #0x10 + ldrb r3, [r0, #0x7] + orr r1, r2, r1, lsl #0x8 + orr r6, r12, r6, lsl #0x18 + ldrb r2, [r0, #0x8] + orr r1, r1, r3, lsl #0x10 + add r0, r0, r6 + orr r1, r1, r2, lsl #0x18 + bl NNS_G3dGeSendDL +_020B9228: + cmp r4, #0x3 + bne _020B9248 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x34] + blx r1 +_020B9248: + ldr r0, [r5, #0x0] + add r0, r0, #0x9 + str r0, [r5, #0x0] + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G3dFuncSbc_CALLDL + + arm_func_start NNSi_G3dFuncSbc_NODEMIX +NNSi_G3dFuncSbc_NODEMIX: ; 0x020B9258 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x8c + ldr r1, [r0, #0x4] + ldr r4, [r0, #0x0] + ldr r6, [r1, #0x4] + ldrb r2, [r4, #0x2] + ldr r3, [r6, #0x10] + mov r10, #0x0 + str r0, [sp, #0x0] + str r2, [sp, #0x8] + add r3, r6, r3 + add r1, sp, #0x34 + mov r0, r10 + mov r2, #0x54 + mov r9, r10 + str r3, [sp, #0x4] + add r8, r4, #0x3 + bl MIi_CpuClearFast + bl NNS_G3dGeFlushBuffer + ldr r0, _020B98AC ; =0x04000440 + mov r7, r10 + str r7, [r0, #0x0] + mov r0, #0x1 + ldr r2, _020B98B0 ; =0x0400044C + ldr r1, _020B98B4 ; =0x04000454 + str r0, [r2, #0x0] + str r0, [sp, #0x10] + str r7, [r1, #0x0] + mov r1, #0x2 + ldr r0, _020B98AC ; =0x04000440 + str r1, [sp, #0x14] + str r1, [r0, #0x0] + ldr r0, [sp, #0x8] + cmp r0, #0x0 + bls _020B96CC +_020B92E4: + ldrb r4, [r8, #0x1] + mov r0, #0x64 + ldr r3, _020B98B8 ; =NNS_G3dRSOnGlb + 0x1400 + mul r0, r4, r0 + str r0, [sp, #0xc] + ldr r0, [sp, #0x0] + mov r1, r4, lsr #0x5 + add r0, r0, r1, lsl #0x2 + ldr r1, [sp, #0x10] + and r2, r4, #0x1f + mov r1, r1, lsl r2 + ldr r11, [r0, #0xcc] + ldr r2, [sp, #0xc] + ands r11, r1, r11 + add r6, r3, r2 + bne _020B9358 + ldr r3, [r0, #0xcc] + mov r2, #0x54 + orr r1, r3, r1 + str r1, [r0, #0xcc] + ldr r0, [sp, #0x4] + ldr r1, _020B98BC ; =0x04000450 + mla r0, r4, r2, r0 + ldrb r2, [r8, #0x0] + str r2, [r1, #0x0] + ldr r2, [sp, #0x10] + ldr r1, _020B98AC ; =0x04000440 + str r2, [r1, #0x0] + bl G3_MultMtx43 +_020B9358: + cmp r7, #0x0 + beq _020B9500 + ldr r2, [sp, #0x6c] + ldr r1, [r5, #0x0] + str r2, [sp, #0x18] + ldr r2, [sp, #0x70] + mov r0, r1, asr #0x1f + str r2, [sp, #0x1c] + ldr r2, [sp, #0x74] + ldr r12, [sp, #0x64] + str r2, [sp, #0x20] + ldr r2, [sp, #0x78] + ldr lr, [sp, #0x68] + str r2, [sp, #0x24] + ldr r2, [sp, #0x7c] + str r2, [sp, #0x28] + ldr r2, [sp, #0x80] + str r2, [sp, #0x2c] + ldr r2, [sp, #0x84] + str r2, [sp, #0x30] + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, r12, r0 + str r0, [sp, #0x64] + ldr r1, [r5, #0x4] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, lr, r0 + str r0, [sp, #0x68] + ldr r1, [r5, #0x8] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x18] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x6c] + ldr r1, [r5, #0xc] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x1c] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x70] + ldr r1, [r5, #0x10] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x20] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x74] + ldr r1, [r5, #0x14] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x24] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x78] + ldr r1, [r5, #0x18] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x28] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x7c] + ldr r1, [r5, #0x1c] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x2c] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x80] + ldr r1, [r5, #0x20] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r1, r3, lsr #0xc + ldr r0, [sp, #0x30] + orr r1, r1, r2, lsl #0x14 + adds r0, r0, r1 + str r0, [sp, #0x84] +_020B9500: + cmp r11, #0x0 + bne _020B9538 +_020B9508: + mov r0, r6 + bl G3X_GetClipMtx + cmp r0, #0x0 + bne _020B9508 + ldr r1, [sp, #0x14] + ldr r0, _020B98AC ; =0x04000440 + str r1, [r0, #0x0] + ldr r0, [sp, #0x4] + mov r1, #0x54 + mla r0, r4, r1, r0 + add r0, r0, #0x30 + bl G3_MultMtx33 +_020B9538: + ldrb r1, [r8, #0x2] + ldr r2, [sp, #0x34] + ldr r0, [r6, #0x0] + mov r10, r1, lsl #0x4 + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x34] + mov r9, r10, asr #0x1f + ldr r2, [sp, #0x38] + ldr r0, [r6, #0x4] + ldr r3, [sp, #0x3c] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x38] + ldr r0, [r6, #0x8] + ldr r2, [sp, #0x40] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x3c] + ldr r0, [r6, #0x10] + ldr r3, [sp, #0x44] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x40] + ldr r0, [r6, #0x14] + ldr r2, [sp, #0x48] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x44] + ldr r0, [r6, #0x18] + ldr r3, [sp, #0x4c] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x48] + ldr r0, [r6, #0x20] + ldr r2, [sp, #0x50] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x4c] + ldr r0, [r6, #0x24] + ldr r3, [sp, #0x54] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x50] + ldr r0, [r6, #0x28] + ldr r2, [sp, #0x58] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x54] + ldr r0, [r6, #0x30] + ldr r3, [sp, #0x5c] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x58] + ldr r0, [r6, #0x34] + ldr r2, [sp, #0x60] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r3, r1 + str r0, [sp, #0x5c] + ldr r0, [r6, #0x38] + smull r1, r0, r10, r0 + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + adds r0, r2, r1 + str r0, [sp, #0x60] + cmp r11, #0x0 + ldr r1, _020B98C0 ; =NNS_G3dRSOnGlb + 0x1440 + ldr r0, [sp, #0xc] + add r5, r1, r0 + add r8, r8, #0x3 + bne _020B96BC +_020B96AC: + mov r0, r5 + bl G3X_GetVectorMtx + cmp r0, #0x0 + bne _020B96AC +_020B96BC: + ldr r0, [sp, #0x8] + add r7, r7, #0x1 + cmp r7, r0 + blo _020B92E4 +_020B96CC: + ldr r1, [r5, #0x0] + ldr r4, [sp, #0x64] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, r4, r0 + str r0, [sp, #0x64] + ldr r1, [r5, #0x4] + ldr r4, [sp, #0x68] + mov r0, r1, asr #0x1f + umull r3, r2, r10, r1 + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + mov r0, r3, lsr #0xc + orr r0, r0, r2, lsl #0x14 + adds r0, r4, r0 + str r0, [sp, #0x68] + ldr r1, [r5, #0x8] + ldr r4, [sp, #0x6c] + umull r0, r2, r10, r1 + mov r3, r0, lsr #0xc + mov r0, r1, asr #0x1f + mla r2, r10, r0, r2 + mla r2, r9, r1, r2 + orr r3, r3, r2, lsl #0x14 + adds r0, r4, r3 + str r0, [sp, #0x6c] + ldr r7, [r5, #0xc] + ldr r12, [sp, #0x70] + mov r6, r7, asr #0x1f + umull r11, r8, r10, r7 + mla r8, r10, r6, r8 + mla r8, r9, r7, r8 + mov r6, r11, lsr #0xc + orr r6, r6, r8, lsl #0x14 + adds r6, r12, r6 + str r6, [sp, #0x70] + ldr r7, [r5, #0x10] + ldr r4, [sp, #0x74] + mov r6, r7, asr #0x1f + umull r11, r8, r10, r7 + mla r8, r10, r6, r8 + mla r8, r9, r7, r8 + mov r6, r11, lsr #0xc + orr r6, r6, r8, lsl #0x14 + adds r4, r4, r6 + str r4, [sp, #0x74] + ldr r6, [r5, #0x14] + ldr r3, [sp, #0x78] + mov r4, r6, asr #0x1f + umull r8, r7, r10, r6 + mla r7, r10, r4, r7 + mla r7, r9, r6, r7 + mov r4, r8, lsr #0xc + orr r4, r4, r7, lsl #0x14 + adds r3, r3, r4 + str r3, [sp, #0x78] + ldr r4, [r5, #0x18] + ldr r2, [sp, #0x7c] + mov r3, r4, asr #0x1f + umull r7, r6, r10, r4 + mla r6, r10, r3, r6 + mla r6, r9, r4, r6 + mov r3, r7, lsr #0xc + orr r3, r3, r6, lsl #0x14 + adds r2, r2, r3 + str r2, [sp, #0x7c] + ldr r3, [r5, #0x1c] + ldr r1, [sp, #0x80] + mov r2, r3, asr #0x1f + umull r6, r4, r10, r3 + mla r4, r10, r2, r4 + mla r4, r9, r3, r4 + mov r2, r6, lsr #0xc + orr r2, r2, r4, lsl #0x14 + adds r1, r1, r2 + str r1, [sp, #0x80] + ldr r2, [r5, #0x20] + ldr lr, [sp, #0x84] + mov r1, r2, asr #0x1f + umull r4, r3, r10, r2 + mla r3, r10, r1, r3 + mla r3, r9, r2, r3 + mov r1, r4, lsr #0xc + orr r1, r1, r3, lsl #0x14 + adds r1, lr, r1 + add r0, sp, #0x64 + str r1, [sp, #0x84] + bl G3_LoadMtx43 + ldr r1, _020B98AC ; =0x04000440 + mov r2, #0x1 + add r0, sp, #0x34 + str r2, [r1, #0x0] + bl G3_LoadMtx43 + ldr r3, _020B98AC ; =0x04000440 + mov r0, #0x0 + str r0, [r3, #0x0] + ldr r1, _020B98BC ; =0x04000450 + mov r2, #0x1 + mov r0, #0x2 + str r2, [r1, #0x0] + str r0, [r3, #0x0] + ldr r0, [sp, #0x0] + ldr r1, [r0, #0x0] + ldr r0, _020B98B0 ; =0x0400044C + ldrb r2, [r1, #0x1] + mov r1, #0x3 + str r2, [r0, #0x0] + ldr r0, [sp, #0x0] + ldr r2, [r0, #0x0] + ldrb r0, [r2, #0x2] + add r0, r0, #0x1 + mla r1, r0, r1, r2 + ldr r0, [sp, #0x0] + str r1, [r0, #0x0] + add sp, sp, #0x8c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B98AC: .word 0x04000440 +_020B98B0: .word 0x0400044C +_020B98B4: .word 0x04000454 +_020B98B8: .word NNS_G3dRSOnGlb + 0x1400 +_020B98BC: .word 0x04000450 +_020B98C0: .word NNS_G3dRSOnGlb + 0x1440 + arm_func_end NNSi_G3dFuncSbc_NODEMIX + + arm_func_start NNSi_G3dFuncSbc_BBY +NNSi_G3dFuncSbc_BBY: ; 0x020B98C4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xcc + mov r10, r0 + ldr r2, [r10, #0x8] + mov r9, r1 + ands r0, r2, #0x200 + mov r7, #0x2 + ldr r6, _020B9C28 ; =bbcmd1$9234 + 0x30 + ldr fp, _020B9C2C ; =bbcmd1$9234 + 0x3C + ldr r5, _020B9C30 ; =bbcmd1$9234 + 0xC + beq _020B992C + cmp r9, #0x40 + beq _020B9900 + cmp r9, #0x60 + bne _020B9904 +_020B9900: + add r7, r7, #0x1 +_020B9904: + cmp r9, #0x20 + beq _020B9914 + cmp r9, #0x60 + bne _020B9918 +_020B9914: + add r7, r7, #0x1 +_020B9918: + ldr r0, [r10, #0x0] + add sp, sp, #0xcc + add r0, r0, r7 + str r0, [r10, #0x0] + ldmia sp!, {r4-r11,pc} +_020B992C: + cmp r9, #0x40 + beq _020B993C + cmp r9, #0x60 + bne _020B9974 +_020B993C: + add r7, r7, #0x1 + ands r0, r2, #0x100 + bne _020B9974 + cmp r9, #0x40 + ldreq r0, [r10, #0x0] + add r1, sp, #0x0 + ldreqb r0, [r0, #0x2] + mov r2, #0x1 + streq r0, [sp, #0x0] + ldrne r0, [r10, #0x0] + ldrneb r0, [r0, #0x3] + strne r0, [sp, #0x0] + mov r0, #0x14 + bl NNS_G3dGeBufferOP_N +_020B9974: + ldr r0, [r10, #0x2c] + cmp r0, #0x0 + ldrneb r8, [r10, #0x94] + moveq r8, #0x0 + cmp r8, #0x1 + bne _020B99C0 + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x2c] + blx r1 + ldr r0, [r10, #0x2c] + cmp r0, #0x0 + ldrneb r8, [r10, #0x94] + ldr r0, [r10, #0x8] + moveq r8, #0x0 + and r1, r0, #0x40 + b _020B99C4 +_020B99C0: + mov r1, #0x0 +_020B99C4: + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020B9BA4 + cmp r1, #0x0 + bne _020B9BA4 + bl NNS_G3dGeFlushBuffer + ldr r2, _020B9C34 ; =0x00151110 + ldr r1, _020B9C38 ; =0x04000400 + mov r0, #0x0 + str r2, [r1, #0x0] + str r0, [r1, #0x0] + str r0, [r1, #0x0] + add r4, sp, #0x8 +_020B99F8: + mov r0, r4 + bl G3X_GetClipMtx + cmp r0, #0x0 + bne _020B99F8 + ldr r0, _020B9C3C ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9A38 + bl NNS_G3dGlbGetWV + add r1, sp, #0x48 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x48 + mov r2, r0 + bl MTX_Concat44 + b _020B9A5C +_020B9A38: + ands r0, r1, #0x2 + beq _020B9A5C + ldr r0, _020B9C40 ; =NNS_G3dGlb + 0x4C + add r1, sp, #0x88 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x88 + mov r2, r0 + bl MTX_Concat44 +_020B9A5C: + ldr r1, [sp, #0x38] + add r0, sp, #0x8 + str r1, [r6, #0x0] + ldr r1, [sp, #0x3c] + str r1, [r6, #0x4] + ldr r1, [sp, #0x40] + str r1, [r6, #0x8] + bl VEC_Mag + str r0, [r11, #0x0] + add r0, sp, #0x18 + bl VEC_Mag + str r0, [r11, #0x4] + add r0, sp, #0x28 + bl VEC_Mag + str r0, [r11, #0x8] + ldr r0, [sp, #0x1c] + cmp r0, #0x0 + bne _020B9AB0 + ldr r0, [sp, #0x20] + cmp r0, #0x0 + beq _020B9AD4 +_020B9AB0: + add r0, sp, #0x18 + add r1, r5, #0xc + bl VEC_Normalize + ldr r0, [r5, #0x14] + rsb r0, r0, #0x0 + str r0, [r5, #0x1c] + ldr r0, [r5, #0x10] + str r0, [r5, #0x20] + b _020B9AF4 +_020B9AD4: + add r0, sp, #0x28 + add r1, r5, #0x18 + bl VEC_Normalize + ldr r0, [r5, #0x1c] + rsb r0, r0, #0x0 + str r0, [r5, #0x14] + ldr r0, [r5, #0x20] + str r0, [r5, #0x10] +_020B9AF4: + ldr r0, _020B9C3C ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9B48 + ldr r3, _020B9C44 ; =0x00171012 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C48 ; =bbcmd1$9234 + 0x4 + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl NNS_G3dGlbGetInvWV + ldr r1, _020B9C38 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9C4C ; =0x00001B19 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C30 ; =bbcmd1$9234 + 0xC + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9BA4 +_020B9B48: + ands r0, r1, #0x2 + beq _020B9B94 + ldr r3, _020B9C44 ; =0x00171012 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C48 ; =bbcmd1$9234 + 0x4 + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl NNS_G3dGlbGetInvV + ldr r1, _020B9C38 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9C4C ; =0x00001B19 + ldr r1, _020B9C38 ; =0x04000400 + ldr r0, _020B9C30 ; =bbcmd1$9234 + 0xC + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9BA4 +_020B9B94: + ldr r0, _020B9C50 ; =bbcmd1$9234 + ldr r1, _020B9C38 ; =0x04000400 + mov r2, #0x48 + bl MIi_CpuSend32 +_020B9BA4: + cmp r8, #0x3 + movne r0, #0x0 + bne _020B9BD0 + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x2c] + blx r1 + ldr r0, [r10, #0x8] + and r0, r0, #0x40 +_020B9BD0: + cmp r9, #0x20 + beq _020B9BE0 + cmp r9, #0x60 + bne _020B9C14 +_020B9BE0: + cmp r0, #0x0 + add r7, r7, #0x1 + bne _020B9C14 + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020B9C14 + ldr r0, [r10, #0x0] + add r1, sp, #0x4 + ldrb r3, [r0, #0x2] + mov r0, #0x13 + mov r2, #0x1 + str r3, [sp, #0x4] + bl NNS_G3dGeBufferOP_N +_020B9C14: + ldr r0, [r10, #0x0] + add r0, r0, r7 + str r0, [r10, #0x0] + add sp, sp, #0xcc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020B9C28: .word bbcmd1$9234 + 0x30 +_020B9C2C: .word bbcmd1$9234 + 0x3C +_020B9C30: .word bbcmd1$9234 + 0xC +_020B9C34: .word 0x00151110 +_020B9C38: .word 0x04000400 +_020B9C3C: .word NNS_G3dGlb +_020B9C40: .word NNS_G3dGlb + 0x4C +_020B9C44: .word 0x00171012 +_020B9C48: .word bbcmd1$9234 + 0x4 +_020B9C4C: .word 0x00001B19 +_020B9C50: .word bbcmd1$9234 + arm_func_end NNSi_G3dFuncSbc_BBY + + arm_func_start NNSi_G3dFuncSbc_BB +NNSi_G3dFuncSbc_BB: ; 0x020B9C54 + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0xc8 + mov r9, r0 + ldr r2, [r9, #0x8] + mov r8, r1 + ands r0, r2, #0x200 + mov r6, #0x2 + ldr r5, _020B9F58 ; =bbcmd1$9173 + 0x30 + ldr r4, _020B9F5C ; =bbcmd1$9173 + 0x3C + beq _020B9CB8 + cmp r8, #0x40 + beq _020B9C8C + cmp r8, #0x60 + bne _020B9C90 +_020B9C8C: + add r6, r6, #0x1 +_020B9C90: + cmp r8, #0x20 + beq _020B9CA0 + cmp r8, #0x60 + bne _020B9CA4 +_020B9CA0: + add r6, r6, #0x1 +_020B9CA4: + ldr r0, [r9, #0x0] + add sp, sp, #0xc8 + add r0, r0, r6 + str r0, [r9, #0x0] + ldmia sp!, {r4-r10,pc} +_020B9CB8: + cmp r8, #0x40 + beq _020B9CC8 + cmp r8, #0x60 + bne _020B9D00 +_020B9CC8: + add r6, r6, #0x1 + ands r0, r2, #0x100 + bne _020B9D00 + cmp r8, #0x40 + ldreq r0, [r9, #0x0] + add r1, sp, #0x0 + ldreqb r0, [r0, #0x2] + mov r2, #0x1 + streq r0, [sp, #0x0] + ldrne r0, [r9, #0x0] + ldrneb r0, [r0, #0x3] + strne r0, [sp, #0x0] + mov r0, #0x14 + bl NNS_G3dGeBufferOP_N +_020B9D00: + ldr r0, [r9, #0x28] + cmp r0, #0x0 + ldrneb r7, [r9, #0x93] + moveq r7, #0x0 + cmp r7, #0x1 + bne _020B9D4C + ldr r1, [r9, #0x8] + mov r0, r9 + bic r1, r1, #0x40 + str r1, [r9, #0x8] + ldr r1, [r9, #0x28] + blx r1 + ldr r0, [r9, #0x28] + cmp r0, #0x0 + ldrneb r7, [r9, #0x93] + ldr r0, [r9, #0x8] + moveq r7, #0x0 + and r1, r0, #0x40 + b _020B9D50 +_020B9D4C: + mov r1, #0x0 +_020B9D50: + ldr r0, [r9, #0x8] + ands r0, r0, #0x100 + bne _020B9ED4 + cmp r1, #0x0 + bne _020B9ED4 + bl NNS_G3dGeFlushBuffer + ldr r2, _020B9F60 ; =0x00151110 + ldr r1, _020B9F64 ; =0x04000400 + mov r0, #0x0 + str r2, [r1, #0x0] + str r0, [r1, #0x0] + str r0, [r1, #0x0] + add r10, sp, #0x8 +_020B9D84: + mov r0, r10 + bl G3X_GetClipMtx + cmp r0, #0x0 + bne _020B9D84 + ldr r0, _020B9F68 ; =NNS_G3dGlb + ldr r1, [r0, #0xfc] + ands r0, r1, #0x1 + beq _020B9DC4 + bl NNS_G3dGlbGetWV + add r1, sp, #0x48 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x48 + mov r2, r0 + bl MTX_Concat44 + b _020B9DE8 +_020B9DC4: + ands r0, r1, #0x2 + beq _020B9DE8 + ldr r0, _020B9F6C ; =NNS_G3dGlb + 0x4C + add r1, sp, #0x88 + bl MTX_Copy43To44_ + add r0, sp, #0x8 + add r1, sp, #0x88 + mov r2, r0 + bl MTX_Concat44 +_020B9DE8: + ldr r1, [sp, #0x38] + add r0, sp, #0x8 + str r1, [r5, #0x0] + ldr r1, [sp, #0x3c] + str r1, [r5, #0x4] + ldr r1, [sp, #0x40] + str r1, [r5, #0x8] + bl VEC_Mag + str r0, [r4, #0x0] + add r0, sp, #0x18 + bl VEC_Mag + str r0, [r4, #0x4] + add r0, sp, #0x28 + bl VEC_Mag + ldr r1, _020B9F68 ; =NNS_G3dGlb + str r0, [r4, #0x8] + ldr r1, [r1, #0xfc] + ands r0, r1, #0x1 + beq _020B9E78 + ldr r3, _020B9F70 ; =0x00171012 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F74 ; =bbcmd1$9173 + 0x4 + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl NNS_G3dGlbGetInvWV + ldr r1, _020B9F64 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9F78 ; =0x00001B19 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F7C ; =bbcmd1$9173 + 0xC + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9ED4 +_020B9E78: + ands r0, r1, #0x2 + beq _020B9EC4 + ldr r3, _020B9F70 ; =0x00171012 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F74 ; =bbcmd1$9173 + 0x4 + mov r2, #0x8 + str r3, [r1, #0x0] + bl MIi_CpuSend32 + bl NNS_G3dGlbGetInvV + ldr r1, _020B9F64 ; =0x04000400 + mov r2, #0x30 + bl MIi_CpuSend32 + ldr r2, _020B9F78 ; =0x00001B19 + ldr r1, _020B9F64 ; =0x04000400 + ldr r0, _020B9F7C ; =bbcmd1$9173 + 0xC + str r2, [r1, #0x0] + mov r2, #0x3c + bl MIi_CpuSend32 + b _020B9ED4 +_020B9EC4: + ldr r0, _020B9F80 ; =bbcmd1$9173 + ldr r1, _020B9F64 ; =0x04000400 + mov r2, #0x48 + bl MIi_CpuSend32 +_020B9ED4: + cmp r7, #0x3 + movne r0, #0x0 + bne _020B9F00 + ldr r1, [r9, #0x8] + mov r0, r9 + bic r1, r1, #0x40 + str r1, [r9, #0x8] + ldr r1, [r9, #0x28] + blx r1 + ldr r0, [r9, #0x8] + and r0, r0, #0x40 +_020B9F00: + cmp r8, #0x20 + beq _020B9F10 + cmp r8, #0x60 + bne _020B9F44 +_020B9F10: + cmp r0, #0x0 + add r6, r6, #0x1 + bne _020B9F44 + ldr r0, [r9, #0x8] + ands r0, r0, #0x100 + bne _020B9F44 + ldr r0, [r9, #0x0] + add r1, sp, #0x4 + ldrb r3, [r0, #0x2] + mov r0, #0x13 + mov r2, #0x1 + str r3, [sp, #0x4] + bl NNS_G3dGeBufferOP_N +_020B9F44: + ldr r0, [r9, #0x0] + add r0, r0, r6 + str r0, [r9, #0x0] + add sp, sp, #0xc8 + ldmia sp!, {r4-r10,pc} + .balign 4 +_020B9F58: .word bbcmd1$9173 + 0x30 +_020B9F5C: .word bbcmd1$9173 + 0x3C +_020B9F60: .word 0x00151110 +_020B9F64: .word 0x04000400 +_020B9F68: .word NNS_G3dGlb +_020B9F6C: .word NNS_G3dGlb + 0x4C +_020B9F70: .word 0x00171012 +_020B9F74: .word bbcmd1$9173 + 0x4 +_020B9F78: .word 0x00001B19 +_020B9F7C: .word bbcmd1$9173 + 0xC +_020B9F80: .word bbcmd1$9173 + arm_func_end NNSi_G3dFuncSbc_BB + + arm_func_start NNSi_G3dFuncSbc_NODEDESC +NNSi_G3dFuncSbc_NODEDESC: ; 0x020B9F84 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x14 + mov r10, r0 + ldr r0, [r10, #0x0] + mov r9, r1 + ldrb r4, [r0, #0x1] + mov r7, #0x4 + strb r4, [r10, #0xae] + ldr r0, [r10, #0x8] + orr r0, r0, #0x10 + str r0, [r10, #0x8] + ldr r1, [r10, #0x8] + ands r0, r1, #0x400 + beq _020BA01C + cmp r9, #0x40 + beq _020B9FCC + cmp r9, #0x60 + bne _020B9FD0 +_020B9FCC: + add r7, r7, #0x1 +_020B9FD0: + cmp r9, #0x20 + beq _020B9FE0 + cmp r9, #0x60 + bne _020BA008 +_020B9FE0: + add r7, r7, #0x1 + ands r0, r1, #0x100 + bne _020BA008 + ldr r0, [r10, #0x0] + add r1, sp, #0x8 + ldrb r3, [r0, #0x4] + mov r0, #0x14 + mov r2, #0x1 + str r3, [sp, #0x8] + bl NNS_G3dGeBufferOP_N +_020BA008: + ldr r0, [r10, #0x0] + add sp, sp, #0x14 + add r0, r0, r7 + str r0, [r10, #0x0] + ldmia sp!, {r4-r11,pc} +_020BA01C: + cmp r9, #0x40 + beq _020BA02C + cmp r9, #0x60 + bne _020BA068 +_020BA02C: + cmp r9, #0x40 + ldreq r0, [r10, #0x0] + add r7, r7, #0x1 + ldreqb r0, [r0, #0x4] + streq r0, [sp, #0xc] + ldrne r0, [r10, #0x0] + ldrneb r0, [r0, #0x5] + strne r0, [sp, #0xc] + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020BA068 + add r1, sp, #0xc + mov r0, #0x14 + mov r2, #0x1 + bl NNS_G3dGeBufferOP_N +_020BA068: + add r0, r10, #0x12c + str r0, [r10, #0xb4] + ldr r0, [r10, #0x24] + cmp r0, #0x0 + ldrneb r8, [r10, #0x92] + moveq r8, #0x0 + cmp r8, #0x1 + bne _020BA0BC + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x24] + blx r1 + ldr r0, [r10, #0x24] + cmp r0, #0x0 + ldrneb r8, [r10, #0x92] + ldr r0, [r10, #0x8] + moveq r8, #0x0 + and r0, r0, #0x40 + b _020BA0C0 +_020BA0BC: + mov r0, #0x0 +_020BA0C0: + cmp r0, #0x0 + bne _020BA2CC + ldr r0, [r10, #0x4] + ldr r1, [r0, #0x34] + cmp r1, #0x0 + beq _020BA0F4 + mov r0, #0x58 + mla r6, r4, r0, r1 + ldr r0, [r10, #0x8] + ands r0, r0, #0x80 + moveq r0, #0x1 + movne r0, #0x0 + b _020BA0FC +_020BA0F4: + add r6, r10, #0x12c + mov r0, #0x0 +_020BA0FC: + cmp r0, #0x0 + bne _020BA2C8 + mov r0, #0x0 + str r0, [r6, #0x0] + ldr r0, [r10, #0x4] + ldr r1, [r0, #0x10] + cmp r1, #0x0 + beq _020BA134 + ldr r3, [r0, #0x14] + mov r0, r6 + mov r2, r4 + blx r3 + cmp r0, #0x0 + bne _020BA2C8 +_020BA134: + ldr r2, [r10, #0xd4] + ldrh r0, [r2, #0x6] + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r4, r0 + ldr r1, [r0, #0x4] + ldrh r0, [r2, r1] + add r4, r2, r1 + add r5, r4, #0x4 + ands r0, r0, #0x1 + ldrne r0, [r6, #0x0] + orrne r0, r0, #0x4 + strne r0, [r6, #0x0] + bne _020BA188 + ldr r0, [r5, #0x0] + str r0, [r6, #0x4c] + ldr r0, [r5, #0x4] + str r0, [r6, #0x50] + ldr r0, [r5, #0x8] + add r5, r5, #0xc + str r0, [r6, #0x54] +_020BA188: + ldrh r1, [r4, #0x0] + ands r0, r1, #0x2 + ldrne r0, [r6, #0x0] + orrne r0, r0, #0x2 + strne r0, [r6, #0x0] + bne _020BA2B0 + ands r0, r1, #0x8 + beq _020BA264 + and r1, r1, #0xf0 + mov r11, r1, asr #0x4 + ldrsh r1, [r5, #0x0] + add r0, r6, #0x28 + str r1, [sp, #0x0] + ldrsh r1, [r5, #0x2] + str r1, [sp, #0x4] + bl MI_Zero36B + ldrh r0, [r4, #0x0] + add r1, r6, r11, lsl #0x2 + add r5, r5, #0x4 + ands r0, r0, #0x100 + movne r0, #0x1000 + rsbne r2, r0, #0x0 + moveq r2, #0x1000 + str r2, [r1, #0x28] + ldr r0, _020BA3B4 ; =pivotUtil_$9100 + ldr r1, _020BA3B8 ; =pivotUtil_$9100 + 1 + ldrb r0, [r0, r11, lsl #0x2] + add r2, r6, r0, lsl #0x2 + ldr r0, [sp, #0x0] + str r0, [r2, #0x28] + ldrb r0, [r1, r11, lsl #0x2] + add r1, r6, r0, lsl #0x2 + ldr r0, [sp, #0x4] + str r0, [r1, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x200 + ldrne r0, [sp, #0x4] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x4] + ldr r0, _020BA3BC ; =pivotUtil_$9100 + 2 + ldrb r0, [r0, r11, lsl #0x2] + add r1, r6, r0, lsl #0x2 + ldr r0, [sp, #0x4] + str r0, [r1, #0x28] + ldrh r0, [r4, #0x0] + ands r0, r0, #0x400 + ldrne r0, [sp, #0x0] + rsbne r0, r0, #0x0 + strne r0, [sp, #0x0] + ldr r0, _020BA3C0 ; =pivotUtil_$9100 + 3 + ldrb r0, [r0, r11, lsl #0x2] + add r1, r6, r0, lsl #0x2 + ldr r0, [sp, #0x0] + str r0, [r1, #0x28] + b _020BA2B0 +_020BA264: + ldrsh r0, [r4, #0x2] + str r0, [r6, #0x28] + ldrsh r0, [r5, #0x0] + str r0, [r6, #0x2c] + ldrsh r0, [r5, #0x2] + str r0, [r6, #0x30] + ldrsh r0, [r5, #0x4] + str r0, [r6, #0x34] + ldrsh r0, [r5, #0x6] + str r0, [r6, #0x38] + ldrsh r0, [r5, #0x8] + str r0, [r6, #0x3c] + ldrsh r0, [r5, #0xa] + str r0, [r6, #0x40] + ldrsh r0, [r5, #0xc] + str r0, [r6, #0x44] + ldrsh r0, [r5, #0xe] + add r5, r5, #0x10 + str r0, [r6, #0x48] +_020BA2B0: + ldrh r3, [r4, #0x0] + ldr r2, [r10, #0x0] + ldr r4, [r10, #0xe8] + mov r0, r6 + mov r1, r5 + blx r4 +_020BA2C8: + str r6, [r10, #0xb4] +_020BA2CC: + cmp r8, #0x2 + bne _020BA308 + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x24] + blx r1 + ldr r0, [r10, #0x24] + cmp r0, #0x0 + ldrneb r8, [r10, #0x92] + ldr r0, [r10, #0x8] + moveq r8, #0x0 + and r0, r0, #0x40 + b _020BA30C +_020BA308: + mov r0, #0x0 +_020BA30C: + cmp r0, #0x0 + bne _020BA32C + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020BA32C + ldr r0, [r10, #0xb4] + ldr r1, [r10, #0xec] + blx r1 +_020BA32C: + mov r0, #0x0 + str r0, [r10, #0xb4] + cmp r8, #0x3 + bne _020BA35C + ldr r1, [r10, #0x8] + mov r0, r10 + bic r1, r1, #0x40 + str r1, [r10, #0x8] + ldr r1, [r10, #0x24] + blx r1 + ldr r0, [r10, #0x8] + and r0, r0, #0x40 +_020BA35C: + cmp r9, #0x20 + beq _020BA36C + cmp r9, #0x60 + bne _020BA3A0 +_020BA36C: + cmp r0, #0x0 + add r7, r7, #0x1 + bne _020BA3A0 + ldr r0, [r10, #0x8] + ands r0, r0, #0x100 + bne _020BA3A0 + ldr r0, [r10, #0x0] + add r1, sp, #0x10 + ldrb r3, [r0, #0x4] + mov r0, #0x13 + mov r2, #0x1 + str r3, [sp, #0x10] + bl NNS_G3dGeBufferOP_N +_020BA3A0: + ldr r0, [r10, #0x0] + add r0, r0, r7 + str r0, [r10, #0x0] + add sp, sp, #0x14 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020BA3B4: .word pivotUtil_$9100 +_020BA3B8: .word pivotUtil_$9100 + 1 +_020BA3BC: .word pivotUtil_$9100 + 2 +_020BA3C0: .word pivotUtil_$9100 + 3 + arm_func_end NNSi_G3dFuncSbc_NODEDESC + + arm_func_start NNSi_G3dFuncSbc_SHP +NNSi_G3dFuncSbc_SHP: ; 0x020BA3C4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r3, [r4, #0x8] + ands r2, r3, #0x200 + bne _020BA420 + ands r2, r3, #0x1 + beq _020BA420 + ands r2, r3, #0x2 + bne _020BA420 + ldr r5, [r4, #0xdc] + ldr r3, [r4, #0x0] + ldrh r2, [r5, #0x6] + ldrb r3, [r3, #0x1] + ldr ip, _020BA434 ; =NNS_G3dFuncSbcShpTable + ldrh lr, [r5, r2] + add r2, r5, r2 + mla r2, lr, r3, r2 + ldr r2, [r2, #0x4] + ldrh lr, [r5, r2] + add r2, r5, r2 + ldr r12, [r12, lr, lsl #0x2] + blx r12 +_020BA420: + ldr r0, [r4, #0x0] + add r0, r0, #0x2 + str r0, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BA434: .word NNS_G3dFuncSbcShpTable + arm_func_end NNSi_G3dFuncSbc_SHP + + arm_func_start NNSi_G3dFuncSbc_SHP_InternalDefault +NNSi_G3dFuncSbc_SHP_InternalDefault: ; 0x020BA438 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x20] + mov r5, r2 + cmp r0, #0x0 + ldrneb r4, [r6, #0x91] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020BA490 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x20] + blx r1 + ldr r0, [r6, #0x20] + cmp r0, #0x0 + ldrneb r4, [r6, #0x91] + ldr r0, [r6, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020BA494 +_020BA490: + mov r0, #0x0 +_020BA494: + cmp r0, #0x0 + bne _020BA4B8 + ldr r0, [r6, #0x8] + ands r0, r0, #0x100 + bne _020BA4B8 + ldr r0, [r5, #0x8] + ldr r1, [r5, #0xc] + add r0, r5, r0 + bl NNS_G3dGeSendDL +_020BA4B8: + cmp r4, #0x2 + bne _020BA4E8 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x20] + blx r1 + ldr r0, [r6, #0x20] + cmp r0, #0x0 + ldrneb r4, [r6, #0x91] + moveq r4, #0x0 +_020BA4E8: + cmp r4, #0x3 + ldmneia sp!, {r4-r6,pc} + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x20] + blx r1 + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G3dFuncSbc_SHP_InternalDefault + + arm_func_start NNSi_G3dFuncSbc_MAT +NNSi_G3dFuncSbc_MAT: ; 0x020BA50C + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldr r5, [r4, #0x8] + ands r0, r5, #0x200 + bne _020BA578 + ldr r2, [r4, #0x0] + ands r0, r5, #0x1 + ldrb r3, [r2, #0x1] + bne _020BA544 + ands r0, r5, #0x8 + beq _020BA544 + ldrb r0, [r4, #0xad] + cmp r3, r0 + beq _020BA578 +_020BA544: + ldr r6, [r4, #0xd8] + ldr ip, _020BA588 ; =NNS_G3dFuncSbcMatTable + ldrh r2, [r6, #0xa] + add r5, r6, #0x4 + mov r0, r4 + ldrh lr, [r5, r2] + add r2, r5, r2 + mla r2, lr, r3, r2 + ldr r2, [r2, #0x4] + ldrh lr, [r6, r2] + add r2, r6, r2 + ldr r12, [r12, lr, lsl #0x2] + blx r12 +_020BA578: + ldr r0, [r4, #0x0] + add r0, r0, #0x2 + str r0, [r4, #0x0] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BA588: .word NNS_G3dFuncSbcMatTable + arm_func_end NNSi_G3dFuncSbc_MAT + + arm_func_start NNSi_G3dFuncSbc_MAT_InternalDefault +NNSi_G3dFuncSbc_MAT_InternalDefault: ; 0x020BA58C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x20 + mov r8, r0 + mov r6, r3 + strb r6, [r8, #0xad] + ldr r3, [r8, #0x8] + add r0, r8, #0xf4 + orr r3, r3, #0x8 + str r3, [r8, #0x8] + str r0, [r8, #0xb0] + ldr r0, [r8, #0x1c] + mov r4, r1 + cmp r0, #0x0 + ldrneb r5, [r8, #0x90] + mov r7, r2 + moveq r5, #0x0 + cmp r5, #0x1 + bne _020BA608 + ldr r1, [r8, #0x8] + mov r0, r8 + bic r1, r1, #0x40 + str r1, [r8, #0x8] + ldr r1, [r8, #0x1c] + blx r1 + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + ldrneb r5, [r8, #0x90] + ldr r0, [r8, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BA60C +_020BA608: + mov r0, #0x0 +_020BA60C: + cmp r0, #0x0 + bne _020BA8C0 + ldr r0, [r8, #0x4] + ldr r0, [r0, #0x38] + cmp r0, #0x0 + beq _020BA638 + ldr r1, [r8, #0x8] + ands r1, r1, #0x80 + moveq r1, #0x38 + mlaeq r4, r6, r1, r0 + beq _020BA8BC +_020BA638: + cmp r4, #0x20 + beq _020BA648 + cmp r4, #0x40 + bne _020BA684 +_020BA648: + mov r1, r6, lsr #0x5 + add r1, r8, r1, lsl #0x2 + and r2, r6, #0x1f + mov r3, #0x1 + mov r2, r3, lsl r2 + ldr r1, [r1, #0xbc] + ands r1, r2, r1 + beq _020BA684 + cmp r0, #0x0 + movne r1, #0x38 + mlane r4, r6, r1, r0 + ldreq r1, _020BA9D8 ; =NNS_G3dRSOnGlb + moveq r0, #0x38 + mlaeq r4, r6, r0, r1 + b _020BA8BC +_020BA684: + cmp r0, #0x0 + beq _020BA6BC + add r4, r8, #0xbc + mov r3, r6, lsr #0x5 + ldr r2, [r4, r3, lsl #0x2] + and r0, r6, #0x1f + mov r1, #0x1 + orr r0, r2, r1, lsl r0 + str r0, [r4, r3, lsl #0x2] + ldr r1, [r8, #0x4] + mov r0, #0x38 + ldr r1, [r1, #0x38] + mla r4, r6, r0, r1 + b _020BA6F0 +_020BA6BC: + cmp r4, #0x40 + addne r4, r8, #0xf4 + bne _020BA6F0 + add lr, r8, #0xbc + mov r12, r6, lsr #0x5 + ldr r1, _020BA9D8 ; =NNS_G3dRSOnGlb + ldr r4, [lr, r12, lsl #0x2] + mov r0, #0x38 + and r2, r6, #0x1f + mov r3, #0x1 + orr r2, r4, r3, lsl r2 + mla r4, r6, r0, r1 + str r2, [lr, r12, lsl #0x2] +_020BA6F0: + mov r0, #0x0 + str r0, [r4, #0x0] + ldr r3, [r8, #0xd8] + ldrh r0, [r3, #0xa] + add r2, r3, #0x4 + ldrh r1, [r2, r0] + add r0, r2, r0 + mla r0, r1, r6, r0 + ldr r0, [r0, #0x4] + ldr r1, _020BA9DC ; =NNS_G3dGlb + add r0, r3, r0 + ldrh r0, [r0, #0x1e] + ands r0, r0, #0x20 + ldrne r0, [r4, #0x0] + orrne r0, r0, #0x20 + strne r0, [r4, #0x0] + ldrh r2, [r7, #0x1e] + ldr r0, _020BA9E0 ; =matColorMask_$8998 + ldr r12, [r1, #0x94] + mov r2, r2, asr #0x6 + and r2, r2, #0x7 + ldr lr, [r0, r2, lsl #0x2] + ldr r2, [r7, #0x4] + mvn r3, lr + and r3, r12, r3 + and r2, r2, lr + orr r2, r3, r2 + str r2, [r4, #0x4] + ldrh r12, [r7, #0x1e] + ldr r3, [r1, #0x98] + ldr r2, [r7, #0x8] + mov r12, r12, asr #0x9 + and r12, r12, #0x7 + ldr r12, [r0, r12, lsl #0x2] + mvn r0, r12 + and r3, r3, r0 + and r0, r2, r12 + orr r0, r3, r0 + str r0, [r4, #0x8] + ldr r3, [r7, #0x10] + ldr r0, [r7, #0xc] + ldr r2, [r1, #0x9c] + mvn r1, r3 + and r1, r2, r1 + and r0, r0, r3 + orr r0, r1, r0 + str r0, [r4, #0xc] + ldr r0, [r7, #0x14] + str r0, [r4, #0x10] + ldrh r0, [r7, #0x1c] + str r0, [r4, #0x14] + ldrh r1, [r7, #0x1e] + ands r0, r1, #0x1 + beq _020BA850 + ands r1, r1, #0x2 + ldrne r1, [r4, #0x0] + add r0, r7, #0x2c + orrne r1, r1, #0x1 + strne r1, [r4, #0x0] + bne _020BA7F4 + ldr r1, [r0, #0x0] + str r1, [r4, #0x18] + ldr r1, [r0, #0x4] + add r0, r0, #0x8 + str r1, [r4, #0x1c] +_020BA7F4: + ldrh r1, [r7, #0x1e] + ands r1, r1, #0x4 + ldrne r1, [r4, #0x0] + orrne r1, r1, #0x2 + strne r1, [r4, #0x0] + bne _020BA820 + ldrsh r1, [r0, #0x0] + strh r1, [r4, #0x20] + ldrsh r1, [r0, #0x2] + add r0, r0, #0x4 + strh r1, [r4, #0x22] +_020BA820: + ldrh r1, [r7, #0x1e] + ands r1, r1, #0x8 + ldreq r1, [r0, #0x0] + streq r1, [r4, #0x24] + ldreq r0, [r0, #0x4] + streq r0, [r4, #0x28] + ldrne r0, [r4, #0x0] + orrne r0, r0, #0x4 + strne r0, [r4, #0x0] + ldr r0, [r4, #0x0] + orr r0, r0, #0x8 + str r0, [r4, #0x0] +_020BA850: + ldr r0, [r8, #0x4] + ldr r1, [r0, #0x8] + cmp r1, #0x0 + beq _020BA890 + mov r2, r6, lsr #0x5 + add r2, r0, r2, lsl #0x2 + and r3, r6, #0x1f + mov r12, #0x1 + mov r3, r12, lsl r3 + ldr r2, [r2, #0x3c] + ands r2, r3, r2 + beq _020BA890 + ldr r3, [r0, #0xc] + mov r0, r4 + mov r2, r6 + blx r3 +_020BA890: + ldr r0, [r4, #0x0] + ands r0, r0, #0x18 + beq _020BA8BC + ldrh r0, [r7, #0x20] + strh r0, [r4, #0x2c] + ldrh r0, [r7, #0x22] + strh r0, [r4, #0x2e] + ldr r0, [r7, #0x24] + str r0, [r4, #0x30] + ldr r0, [r7, #0x28] + str r0, [r4, #0x34] +_020BA8BC: + str r4, [r8, #0xb0] +_020BA8C0: + cmp r5, #0x2 + bne _020BA8FC + ldr r1, [r8, #0x8] + mov r0, r8 + bic r1, r1, #0x40 + str r1, [r8, #0x8] + ldr r1, [r8, #0x1c] + blx r1 + ldr r0, [r8, #0x1c] + cmp r0, #0x0 + ldrneb r5, [r8, #0x90] + ldr r0, [r8, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BA900 +_020BA8FC: + mov r0, #0x0 +_020BA900: + cmp r0, #0x0 + bne _020BA9AC + ldr r4, [r8, #0xb0] + ldr r1, [r4, #0xc] + ands r0, r1, #0x1f0000 + beq _020BA9A0 + ldr r0, [r4, #0x0] + ands r0, r0, #0x20 + bicne r0, r1, #0x1f0000 + strne r0, [r4, #0xc] + ldr r0, [r8, #0x8] + bic r0, r0, #0x2 + str r0, [r8, #0x8] + ldr r0, [r8, #0x8] + ands r0, r0, #0x100 + bne _020BA9AC + ldr r0, _020BA9E4 ; =0x00293130 + ldr r3, _020BA9E8 ; =0x00002B2A + str r0, [sp, #0x0] + ldr r2, [r4, #0x4] + add r1, sp, #0x4 + str r2, [sp, #0x4] + ldr r6, [r4, #0x8] + mov r2, #0x6 + str r6, [sp, #0x8] + ldr r6, [r4, #0xc] + str r6, [sp, #0xc] + str r3, [sp, #0x10] + ldr r3, [r4, #0x10] + str r3, [sp, #0x14] + ldr r3, [r4, #0x14] + str r3, [sp, #0x18] + bl NNS_G3dGeBufferOP_N + ldr r0, [r4, #0x0] + ands r0, r0, #0x18 + beq _020BA9AC + ldr r1, [r8, #0xf0] + mov r0, r4 + blx r1 + b _020BA9AC +_020BA9A0: + ldr r0, [r8, #0x8] + orr r0, r0, #0x2 + str r0, [r8, #0x8] +_020BA9AC: + cmp r5, #0x3 + addne sp, sp, #0x20 + ldmneia sp!, {r4-r8,pc} + ldr r1, [r8, #0x8] + mov r0, r8 + bic r1, r1, #0x40 + str r1, [r8, #0x8] + ldr r1, [r8, #0x1c] + blx r1 + add sp, sp, #0x20 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BA9D8: .word NNS_G3dRSOnGlb +_020BA9DC: .word NNS_G3dGlb +_020BA9E0: .word matColorMask_$8998 +_020BA9E4: .word 0x00293130 +_020BA9E8: .word 0x00002B2A + arm_func_end NNSi_G3dFuncSbc_MAT_InternalDefault + + arm_func_start NNSi_G3dFuncSbc_MTX +NNSi_G3dFuncSbc_MTX: ; 0x020BA9EC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x8] + ands r0, r1, #0x200 + bne _020BAAAC + ands r0, r1, #0x1 + beq _020BAAAC + ldr r0, [r5, #0x18] + cmp r0, #0x0 + ldrneb r4, [r5, #0x8f] + moveq r4, #0x0 + cmp r4, #0x1 + bne _020BAA58 + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x18] + blx r1 + ldr r0, [r5, #0x18] + cmp r0, #0x0 + ldrneb r4, [r5, #0x8f] + ldr r0, [r5, #0x8] + moveq r4, #0x0 + and r0, r0, #0x40 + b _020BAA5C +_020BAA58: + mov r0, #0x0 +_020BAA5C: + cmp r0, #0x0 + bne _020BAA8C + ldr r0, [r5, #0x0] + ldrb r0, [r0, #0x1] + str r0, [sp, #0x0] + ldr r0, [r5, #0x8] + ands r0, r0, #0x100 + bne _020BAA8C + add r1, sp, #0x0 + mov r0, #0x14 + mov r2, #0x1 + bl NNS_G3dGeBufferOP_N +_020BAA8C: + cmp r4, #0x3 + bne _020BAAAC + ldr r1, [r5, #0x8] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r5, #0x8] + ldr r1, [r5, #0x18] + blx r1 +_020BAAAC: + ldr r0, [r5, #0x0] + add r0, r0, #0x2 + str r0, [r5, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end NNSi_G3dFuncSbc_MTX + + arm_func_start NNSi_G3dFuncSbc_NODE +NNSi_G3dFuncSbc_NODE: ; 0x020BAAC0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r0, [r6, #0x8] + ands r0, r0, #0x200 + bne _020BAC38 + ldr r1, [r6, #0x0] + add r0, r6, #0x184 + ldrb r1, [r1, #0x1] + strb r1, [r6, #0xac] + ldr r1, [r6, #0x8] + ldrb r4, [r6, #0xac] + orr r1, r1, #0x4 + str r1, [r6, #0x8] + str r0, [r6, #0xb8] + ldr r0, [r6, #0x14] + cmp r0, #0x0 + ldrneb r5, [r6, #0x8e] + moveq r5, #0x0 + cmp r5, #0x1 + bne _020BAB44 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x14] + blx r1 + ldr r0, [r6, #0x14] + cmp r0, #0x0 + ldrneb r5, [r6, #0x8e] + ldr r0, [r6, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BAB48 +_020BAB44: + mov r0, #0x0 +_020BAB48: + cmp r0, #0x0 + bne _020BABAC + ldr r12, [r6, #0x4] + ldr r1, [r12, #0x18] + cmp r1, #0x0 + beq _020BAB98 + mov r0, r4, lsr #0x5 + add r0, r12, r0, lsl #0x2 + and r2, r4, #0x1f + mov r3, #0x1 + mov r2, r3, lsl r2 + ldr r0, [r0, #0x4c] + ands r0, r2, r0 + beq _020BAB98 + ldr r0, [r6, #0xb8] + ldr r3, [r12, #0x1c] + mov r2, r4 + blx r3 + cmp r0, #0x0 + bne _020BABAC +_020BAB98: + ldr r1, [r6, #0x0] + ldr r0, [r6, #0xb8] + ldrb r1, [r1, #0x2] + and r1, r1, #0x1 + str r1, [r0, #0x0] +_020BABAC: + cmp r5, #0x2 + bne _020BABE8 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x14] + blx r1 + ldr r0, [r6, #0x14] + cmp r0, #0x0 + ldrneb r5, [r6, #0x8e] + ldr r0, [r6, #0x8] + moveq r5, #0x0 + and r0, r0, #0x40 + b _020BABEC +_020BABE8: + mov r0, #0x0 +_020BABEC: + cmp r0, #0x0 + bne _020BAC18 + ldr r0, [r6, #0xb8] + ldr r0, [r0, #0x0] + cmp r0, #0x0 + ldrne r0, [r6, #0x8] + orrne r0, r0, #0x1 + strne r0, [r6, #0x8] + ldreq r0, [r6, #0x8] + biceq r0, r0, #0x1 + streq r0, [r6, #0x8] +_020BAC18: + cmp r5, #0x3 + bne _020BAC38 + ldr r1, [r6, #0x8] + mov r0, r6 + bic r1, r1, #0x40 + str r1, [r6, #0x8] + ldr r1, [r6, #0x14] + blx r1 +_020BAC38: + ldr r0, [r6, #0x0] + add r0, r0, #0x3 + str r0, [r6, #0x0] + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G3dFuncSbc_NODE + + arm_func_start NNSi_G3dFuncSbc_RET +NNSi_G3dFuncSbc_RET: ; 0x020BAC48 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x10] + cmp r1, #0x0 + beq _020BAC60 + blx r1 +_020BAC60: + ldr r0, [r4, #0x8] + orr r0, r0, #0x20 + str r0, [r4, #0x8] + ldmia sp!, {r4,pc} + arm_func_end NNSi_G3dFuncSbc_RET + + arm_func_start NNSi_G3dFuncSbc_NOP +NNSi_G3dFuncSbc_NOP: ; 0x020BAC70 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0xc] + cmp r1, #0x0 + beq _020BAC88 + blx r1 +_020BAC88: + ldr r0, [r4, #0x0] + add r0, r0, #0x1 + str r0, [r4, #0x0] + ldmia sp!, {r4,pc} + arm_func_end NNSi_G3dFuncSbc_NOP + + arm_func_start NNS_G3dDraw +NNS_G3dDraw: ; 0x020BAC98 + stmdb sp!, {r4,lr} + sub sp, sp, #0x188 + mov r4, r0 + ldr r0, [r4, #0x0] + and r0, r0, #0x10 + cmp r0, #0x10 + bne _020BAD2C + add r1, r4, #0x3c + mov r0, #0x0 + mov r2, #0x8 + bl MIi_CpuClear32 + add r1, r4, #0x44 + mov r0, #0x0 + mov r2, #0x8 + bl MIi_CpuClear32 + add r1, r4, #0x4c + mov r0, #0x0 + mov r2, #0x8 + bl MIi_CpuClear32 + ldr r1, [r4, #0x8] + cmp r1, #0x0 + beq _020BACF8 + add r0, r4, #0x3c + bl updateHintVec_ +_020BACF8: + ldr r1, [r4, #0x10] + cmp r1, #0x0 + beq _020BAD0C + add r0, r4, #0x44 + bl updateHintVec_ +_020BAD0C: + ldr r1, [r4, #0x18] + cmp r1, #0x0 + beq _020BAD20 + add r0, r4, #0x4c + bl updateHintVec_ +_020BAD20: + ldr r0, [r4, #0x0] + bic r0, r0, #0x10 + str r0, [r4, #0x0] +_020BAD2C: + ldr r2, _020BAD70 ; =NNS_G3dRS + ldr r0, [r2, #0x0] + cmp r0, #0x0 + beq _020BAD4C + mov r1, r4 + bl G3dDrawInternal_ + add sp, sp, #0x188 + ldmia sp!, {r4,pc} +_020BAD4C: + add r0, sp, #0x0 + mov r1, r4 + str r0, [r2, #0x0] + bl G3dDrawInternal_ + ldr r0, _020BAD70 ; =NNS_G3dRS + mov r1, #0x0 + str r1, [r0, #0x0] + add sp, sp, #0x188 + ldmia sp!, {r4,pc} + .balign 4 +_020BAD70: .word NNS_G3dRS + arm_func_end NNS_G3dDraw + + local_arm_func_start updateHintVec_ +updateHintVec_: ; 0x020BAD74 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + mov r3, #0x1 + mov r4, #0x0 +_020BAD90: + ldrb r2, [r1, #0x19] + mov r5, r4 + cmp r2, #0x0 + ble _020BADD0 +_020BADA0: + add r2, r1, r5, lsl #0x1 + ldrh r2, [r2, #0x1a] + ands r2, r2, #0x100 + movne lr, r5, asr #0x5 + andne r2, r5, #0x1f + ldrne r12, [r0, lr, lsl #0x2] + add r5, r5, #0x1 + orrne r2, r12, r3, lsl r2 + strne r2, [r0, lr, lsl #0x2] + ldrb r2, [r1, #0x19] + cmp r5, r2 + blt _020BADA0 +_020BADD0: + ldr r1, [r1, #0x10] + cmp r1, #0x0 + bne _020BAD90 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end updateHintVec_ + + arm_func_start G3dDrawInternal_ +G3dDrawInternal_: ; 0x020BADE4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r1, r5 + mov r0, #0x0 + mov r2, #0x188 + bl MIi_CpuClearFast + mov r0, #0x1 + str r0, [r5, #0xc4] + str r0, [r5, #0x8] + ldr r0, [r4, #0x30] + ldr r2, _020BAF60 ; =NNS_G3dGetJointScale_FuncArray + cmp r0, #0x0 + strne r0, [r5, #0x0] + ldreq r1, [r4, #0x4] + ldreq r0, [r1, #0x4] + addeq r0, r1, r0 + streq r0, [r5, #0x0] + str r4, [r5, #0x4] + ldr r0, [r4, #0x4] + ldr r1, _020BAF64 ; =NNS_G3dSendJointSRT_FuncArray + add r0, r0, #0x40 + str r0, [r5, #0xd4] + ldr r12, [r4, #0x4] + ldr r0, _020BAF68 ; =NNS_G3dSendTexSRT_FuncArray + ldr r3, [r12, #0x8] + add r3, r12, r3 + str r3, [r5, #0xd8] + ldr r12, [r4, #0x4] + ldr r3, [r12, #0xc] + add r3, r12, r3 + str r3, [r5, #0xdc] + ldr r3, [r4, #0x4] + ldrb r3, [r3, #0x15] + ldr r2, [r2, r3, lsl #0x2] + str r2, [r5, #0xe8] + ldr r2, [r4, #0x4] + ldrb r2, [r2, #0x15] + ldr r1, [r1, r2, lsl #0x2] + str r1, [r5, #0xec] + ldr r1, [r4, #0x4] + ldrb r1, [r1, #0x16] + ldr r0, [r0, r1, lsl #0x2] + str r0, [r5, #0xf0] + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x1c] + str r0, [r5, #0xe0] + ldr r0, [r4, #0x4] + ldr r0, [r0, #0x20] + str r0, [r5, #0xe4] + ldr r1, [r4, #0x20] + cmp r1, #0x0 + beq _020BAEE0 + ldrb r0, [r4, #0x24] + cmp r0, #0x20 + bhs _020BAEE0 + add r0, r5, r0, lsl #0x2 + str r1, [r0, #0xc] + ldrb r0, [r4, #0x24] + ldrb r1, [r4, #0x25] + add r0, r5, r0 + strb r1, [r0, #0x8c] +_020BAEE0: + ldr r0, [r4, #0x0] + ands r0, r0, #0x1 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x80 + strne r0, [r5, #0x8] + ldr r0, [r4, #0x0] + ands r0, r0, #0x2 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x100 + strne r0, [r5, #0x8] + ldr r0, [r4, #0x0] + ands r0, r0, #0x4 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x200 + strne r0, [r5, #0x8] + ldr r0, [r4, #0x0] + ands r0, r0, #0x8 + ldrne r0, [r5, #0x8] + orrne r0, r0, #0x400 + strne r0, [r5, #0x8] + ldr r1, [r4, #0x28] + cmp r1, #0x0 + beq _020BAF44 + mov r0, r5 + blx r1 +_020BAF44: + mov r0, r5 + bl G3dDrawInternal_Loop_ + ldr r0, [r4, #0x0] + bic r0, r0, #0x1 + str r0, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020BAF60: .word NNS_G3dGetJointScale_FuncArray +_020BAF64: .word NNS_G3dSendJointSRT_FuncArray +_020BAF68: .word NNS_G3dSendTexSRT_FuncArray + arm_func_end G3dDrawInternal_ + + arm_func_start G3dDrawInternal_Loop_ +G3dDrawInternal_Loop_: ; 0x020BAF6C + stmdb sp!, {r4-r6,lr} + mov r5, r0 + ldr r6, _020BAFB4 ; =NNS_G3dFuncSbcTable + add r4, r5, #0x8 +_020BAF7C: + ldr r1, [r4, #0x0] + mov r0, r5 + bic r1, r1, #0x40 + str r1, [r4, #0x0] + ldr r1, [r5, #0x0] + ldrb r3, [r1, #0x0] + and r1, r3, #0x1f + ldr r2, [r6, r1, lsl #0x2] + and r1, r3, #0xe0 + blx r2 + ldr r0, [r5, #0x8] + ands r0, r0, #0x20 + beq _020BAF7C + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BAFB4: .word NNS_G3dFuncSbcTable + arm_func_end G3dDrawInternal_Loop_ diff --git a/arm9/asm/NNS_G3D_si3d.s b/arm9/asm/NNS_G3D_si3d.s new file mode 100644 index 00000000..66bfe460 --- /dev/null +++ b/arm9/asm/NNS_G3D_si3d.s @@ -0,0 +1,359 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_G3dSendTexSRTSi3d +NNSi_G3dSendTexSRTSi3d: ; 0x020BEF10 + stmdb sp!, {lr} + sub sp, sp, #0x3c + ldr r1, [r0, #0x0] + mov r3, #0x0 + ands r1, r1, #0x8 + ldrne r1, _020BF0CC ; =0x00101710 + mov r2, #0x3 + strne r1, [sp, #0x0] + ldreq r1, _020BF0D0 ; =0x00101910 + str r3, [sp, #0x34] + streq r1, [sp, #0x0] + mov r1, #0x2 + str r1, [sp, #0x38] + str r3, [sp, #0x28] + str r3, [sp, #0x24] + str r3, [sp, #0x20] + str r3, [sp, #0x1c] + str r3, [sp, #0x14] + str r3, [sp, #0x10] + str r3, [sp, #0xc] + str r2, [sp, #0x4] + ldr r2, [r0, #0x0] + ands r1, r2, #0x4 + beq _020BEFA0 + str r3, [sp, #0x2c] + str r3, [sp, #0x30] + ldr r1, [r0, #0x0] + ands r1, r1, #0x1 + movne r1, #0x1000 + strne r1, [sp, #0x8] + strne r1, [sp, #0x18] + ldreq r1, [r0, #0x18] + streq r1, [sp, #0x8] + ldreq r1, [r0, #0x1c] + streq r1, [sp, #0x18] + b _020BF040 +_020BEFA0: + ands r1, r2, #0x1 + beq _020BEFE8 + ldr r2, [r0, #0x24] + ldrh r1, [r0, #0x2c] + mov r2, r2, lsl #0x4 + rsb r2, r2, #0x0 + mul r1, r2, r1 + str r1, [sp, #0x2c] + ldr r2, [r0, #0x28] + ldrh r1, [r0, #0x2e] + mov r2, r2, lsl #0x4 + rsb r2, r2, #0x0 + mul r3, r2, r1 + mov r1, #0x1000 + str r3, [sp, #0x30] + str r1, [sp, #0x8] + str r1, [sp, #0x18] + b _020BF040 +_020BEFE8: + ldr r2, [r0, #0x18] + ldr r1, [r0, #0x24] + ldrh r12, [r0, #0x2c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0x8 + orr r2, r2, r1, lsl #0x18 + rsb r1, r2, #0x0 + mul r1, r12, r1 + str r1, [sp, #0x2c] + ldr r2, [r0, #0x1c] + ldr r1, [r0, #0x28] + ldrh r12, [r0, #0x2e] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0x8 + orr r2, r2, r1, lsl #0x18 + rsb r1, r2, #0x0 + mul r1, r12, r1 + str r1, [sp, #0x30] + ldr r1, [r0, #0x18] + str r1, [sp, #0x8] + ldr r1, [r0, #0x1c] + str r1, [sp, #0x18] +_020BF040: + ldr r12, [r0, #0x30] + cmp r12, #0x1000 + beq _020BF078 + ldr r2, [sp, #0x8] + ldr r1, [sp, #0x2c] + smull r3, r2, r12, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [sp, #0x8] + ldr r2, [r0, #0x30] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x2c] +_020BF078: + ldr r12, [r0, #0x34] + cmp r12, #0x1000 + beq _020BF0B0 + ldr r2, [sp, #0x18] + ldr r1, [sp, #0x30] + smull r3, r2, r12, r2 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [sp, #0x18] + ldr r0, [r0, #0x34] + smull r2, r1, r0, r1 + mov r0, r2, lsr #0xc + orr r0, r0, r1, lsl #0x14 + str r0, [sp, #0x30] +_020BF0B0: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0xe + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x3c + ldmia sp!, {pc} + .balign 4 +_020BF0CC: .word 0x00101710 +_020BF0D0: .word 0x00101910 + arm_func_end NNSi_G3dSendTexSRTSi3d + + arm_func_start NNSi_G3dGetJointScaleSi3d +NNSi_G3dGetJointScaleSi3d: ; 0x020BF0D4 + stmdb sp!, {r4-r8,lr} + mov r5, r0 + ands r0, r3, #0x4 + ldrb r4, [r2, #0x1] + ldrb r0, [r2, #0x2] + beq _020BF174 + ldr r2, [r5, #0x0] + ldr r1, _020BF2E0 ; =NNS_G3dRS + orr r2, r2, #0x1 + str r2, [r5, #0x0] + ldr r3, [r1, #0x0] + mov r1, r0, lsr #0x5 + add r1, r3, r1, lsl #0x2 + and r2, r0, #0x1f + mov r6, #0x1 + mov r2, r6, lsl r2 + ldr r1, [r1, #0xc4] + ands r1, r2, r1 + beq _020BF148 + add r3, r3, #0xc4 + mov r2, r4, lsr #0x5 + ldr r1, [r3, r2, lsl #0x2] + and r0, r4, #0x1f + orr r0, r1, r6, lsl r0 + str r0, [r3, r2, lsl #0x2] + ldr r0, [r5, #0x0] + orr r0, r0, #0x18 + str r0, [r5, #0x0] + ldmia sp!, {r4-r8,pc} +_020BF148: + ldr r1, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00 + mov r2, #0x18 + mla r6, r0, r2, r1 + mla r1, r4, r2, r1 + mov r0, r6 + bl MIi_CpuCopy32 + mov r0, r6 + add r1, r5, #0x10 + mov r2, #0x18 + bl MIi_CpuCopy32 + ldmia sp!, {r4-r8,pc} +_020BF174: + ldr r3, [r1, #0x0] + ldr r2, _020BF2E0 ; =NNS_G3dRS + str r3, [r5, #0x4] + ldr r3, [r1, #0x4] + mov r7, r0, lsr #0x5 + str r3, [r5, #0x8] + ldr r3, [r1, #0x8] + and r8, r0, #0x1f + str r3, [r5, #0xc] + ldr r6, [r2, #0x0] + mov r3, #0x1 + add r2, r6, r7, lsl #0x2 + mov r7, r3, lsl r8 + ldr r2, [r2, #0xc4] + ands r2, r7, r2 + beq _020BF200 + ldr r3, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00 + mov r2, #0x18 + mov r0, r1 + mla r1, r4, r2, r3 + bl MIi_CpuCopy32 + ldr r0, _020BF2E0 ; =NNS_G3dRS + mov r2, r4, lsr #0x5 + ldr r1, [r0, #0x0] + and r0, r4, #0x1f + add r3, r1, #0xc4 + mov r1, #0x1 + mvn r0, r1, lsl r0 + ldr r1, [r3, r2, lsl #0x2] + and r0, r1, r0 + str r0, [r3, r2, lsl #0x2] + ldr r0, [r5, #0x0] + orr r0, r0, #0x18 + str r0, [r5, #0x0] + ldmia sp!, {r4-r8,pc} +_020BF200: + mov r2, #0x18 + mul r12, r0, r2 + and r7, r4, #0x1f + ldr r0, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00 + add r6, r6, #0xc4 + mov lr, r4, lsr #0x5 + mvn r7, r3, lsl r7 + ldr r8, [r6, lr, lsl #0x2] + mul r3, r4, r2 + and r4, r8, r7 + str r4, [r6, lr, lsl #0x2] + ldr r7, [r1, #0x0] + ldr r4, [r0, r12] + ldr r6, _020BF2E8 ; =NNS_G3dRSOnGlb + 0xE04 + smull r8, r4, r7, r4 + mov r7, r8, lsr #0xc + orr r7, r7, r4, lsl #0x14 + str r7, [r0, r3] + ldr r8, [r1, #0x4] + ldr r4, [r6, r12] + ldr r7, _020BF2EC ; =NNS_G3dRSOnGlb + 0xE08 + smull lr, r4, r8, r4 + mov r8, lr, lsr #0xc + orr r8, r8, r4, lsl #0x14 + str r8, [r6, r3] + ldr r8, [r1, #0x8] + ldr r4, [r7, r12] + ldr r6, _020BF2F0 ; =NNS_G3dRSOnGlb + 0xE0C + smull lr, r4, r8, r4 + mov r8, lr, lsr #0xc + orr r8, r8, r4, lsl #0x14 + str r8, [r7, r3] + ldr r7, [r1, #0xc] + ldr r4, [r6, r12] + ldr lr, _020BF2F4 ; =NNS_G3dRSOnGlb + 0xE10 + smull r8, r4, r7, r4 + mov r7, r8, lsr #0xc + orr r7, r7, r4, lsl #0x14 + str r7, [r6, r3] + ldr r7, [r1, #0x10] + ldr r4, [lr, r12] + ldr r6, _020BF2F8 ; =NNS_G3dRSOnGlb + 0xE14 + smull r8, r4, r7, r4 + add r0, r0, r12 + mov r7, r8, lsr #0xc + orr r7, r7, r4, lsl #0x14 + str r7, [lr, r3] + ldr lr, [r1, #0x14] + ldr r4, [r6, r12] + add r1, r5, #0x10 + smull r5, r4, lr, r4 + mov r5, r5, lsr #0xc + orr r5, r5, r4, lsl #0x14 + str r5, [r6, r3] + bl MIi_CpuCopy32 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020BF2E0: .word NNS_G3dRS +_020BF2E4: .word NNS_G3dRSOnGlb + 0xE00 +_020BF2E8: .word NNS_G3dRSOnGlb + 0xE04 +_020BF2EC: .word NNS_G3dRSOnGlb + 0xE08 +_020BF2F0: .word NNS_G3dRSOnGlb + 0xE0C +_020BF2F4: .word NNS_G3dRSOnGlb + 0xE10 +_020BF2F8: .word NNS_G3dRSOnGlb + 0xE14 + arm_func_end NNSi_G3dGetJointScaleSi3d + + arm_func_start NNSi_G3dSendJointSRTSi3d +NNSi_G3dSendJointSRTSi3d: ; 0x020BF2FC + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x10 + mov r6, r0 + ldr r0, [r6, #0x0] + mov r5, #0x0 + ands r4, r0, #0x18 + bne _020BF328 + add r1, r6, #0x1c + mov r0, #0x1b + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N +_020BF328: + ldr r0, [r6, #0x0] + ands r0, r0, #0x4 + bne _020BF398 + cmp r4, #0x0 + movne r5, #0x1 + bne _020BF398 + ldr r2, [r6, #0x4c] + ldr r0, [r6, #0x10] + add r1, sp, #0x0 + smull r3, r0, r2, r0 + mov r2, r3, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x0] + ldr r3, [r6, #0x50] + ldr r2, [r6, #0x14] + mov r0, #0x1c + smull r12, r2, r3, r2 + mov r3, r12, lsr #0xc + orr r3, r3, r2, lsl #0x14 + str r3, [sp, #0x4] + ldr r12, [r6, #0x54] + ldr r3, [r6, #0x18] + mov r2, #0x3 + smull lr, r3, r12, r3 + mov r12, lr, lsr #0xc + orr r12, r12, r3, lsl #0x14 + str r12, [sp, #0x8] + bl NNS_G3dGeBufferOP_N +_020BF398: + ldr r0, [r6, #0x0] + ands r0, r0, #0x2 + bne _020BF3D4 + cmp r5, #0x0 + beq _020BF3C0 + add r1, r6, #0x28 + mov r0, #0x19 + mov r2, #0xc + bl NNS_G3dGeBufferOP_N + b _020BF3EC +_020BF3C0: + add r1, r6, #0x28 + mov r0, #0x1a + mov r2, #0x9 + bl NNS_G3dGeBufferOP_N + b _020BF3EC +_020BF3D4: + cmp r5, #0x0 + beq _020BF3EC + add r1, r6, #0x4c + mov r0, #0x1c + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N +_020BF3EC: + cmp r4, #0x0 + bne _020BF404 + add r1, r6, #0x10 + mov r0, #0x1b + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N +_020BF404: + ldr r0, [r6, #0x0] + ands r0, r0, #0x1 + addne sp, sp, #0x10 + ldmneia sp!, {r4-r6,pc} + add r1, r6, #0x4 + mov r0, #0x1b + mov r2, #0x3 + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x10 + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_G3dSendJointSRTSi3d diff --git a/arm9/asm/NNS_G3D_util.s b/arm9/asm/NNS_G3D_util.s new file mode 100644 index 00000000..932cf871 --- /dev/null +++ b/arm9/asm/NNS_G3D_util.s @@ -0,0 +1,349 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNS_G3dWorldPosToScrPos +NNS_G3dWorldPosToScrPos: ; 0x020BB408 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x1c + mov r5, r1 + mov r4, r2 + ldr r6, _020BB594 ; =NNS_G3dGlb + 0x8 + ldr r1, _020BB598 ; =NNS_G3dGlb + 0x4C + add r2, sp, #0x10 + bl MTX_MultVec43 + ldr r1, [sp, #0x14] + ldr r0, [r6, #0x1c] + ldr r2, [sp, #0x10] + smull r8, r7, r1, r0 + ldr r0, [r6, #0xc] + ldr r3, [sp, #0x18] + smlal r8, r7, r2, r0 + ldr r1, [r6, #0x2c] + ldr r0, [r6, #0x3c] + smlal r8, r7, r3, r1 + mov r1, r8, lsr #0xc + orr r1, r1, r7, lsl #0x14 + add r0, r1, r0 + bl FX_InvAsync + ldr r2, [sp, #0x14] + ldr r1, [r6, #0x10] + ldr r0, [r6, #0x14] + smull lr, r8, r2, r1 + smull r12, r9, r2, r0 + ldr r1, [sp, #0x10] + ldr r3, [r6, #0x0] + ldr r0, [sp, #0x18] + smlal lr, r8, r1, r3 + ldr r7, [r6, #0x20] + ldr r2, [r6, #0x30] + smlal lr, r8, r0, r7 + mov r3, lr, lsr #0xc + orr r3, r3, r8, lsl #0x14 + add r7, r3, r2 + ldr r3, [r6, #0x4] + ldr r8, [r6, #0x24] + smlal r12, r9, r1, r3 + smlal r12, r9, r0, r8 + mov r0, r12, lsr #0xc + ldr r2, [r6, #0x34] + orr r0, r0, r9, lsl #0x14 + add r6, r0, r2 + bl FX_GetDivResultFx64c + mov r2, r7, asr #0x1f + umull r9, lr, r0, r7 + mla lr, r0, r2, lr + mov r3, #0x80000000 + mla lr, r1, r7, lr + adds r9, r9, r3 + adc r2, lr, #0x0 + add r2, r2, #0x1000 + add r2, r2, r2, lsr #0x1f + mov r7, r2, asr #0x1 + umull lr, r2, r0, r6 + mov r12, r6, asr #0x1f + mla r2, r0, r12, r2 + mla r2, r1, r6, r2 + adds r3, lr, r3 + adc r0, r2, #0x0 + add r0, r0, #0x1000 + add r0, r0, r0, lsr #0x1f + mov r8, #0x0 + mov r6, r0, asr #0x1 + cmp r7, #0x0 + blt _020BB530 + cmp r6, #0x0 + blt _020BB530 + cmp r7, #0x1000 + bgt _020BB530 + cmp r6, #0x1000 + ble _020BB534 +_020BB530: + mvn r8, #0x0 +_020BB534: + add r0, sp, #0x0 + add r1, sp, #0x4 + add r2, sp, #0x8 + add r3, sp, #0xc + bl NNS_G3dGlbGetViewPort + ldr r2, [sp, #0x0] + ldr r0, [sp, #0x8] + ldr r12, [sp, #0xc] + sub r0, r0, r2 + mul r0, r7, r0 + add r1, r0, #0x800 + ldr r3, [sp, #0x4] + add r1, r2, r1, asr #0xc + sub r0, r12, r3 + mul r0, r6, r0 + str r1, [r5, #0x0] + ldr r1, [sp, #0x4] + add r0, r0, #0x800 + rsb r1, r1, #0xbf + sub r1, r1, r0, asr #0xc + mov r0, r8 + str r1, [r4, #0x0] + add sp, sp, #0x1c + ldmia sp!, {r4-r9,pc} + .balign 4 +_020BB594: .word NNS_G3dGlb + 0x8 +_020BB598: .word NNS_G3dGlb + 0x4C + arm_func_end NNS_G3dWorldPosToScrPos + + arm_func_start NNS_G3dResDefaultSetup +NNS_G3dResDefaultSetup: ; 0x020BB59C + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r1, [r5, #0x0] + ldr r0, _020BB7C8 ; =0x30415642 + cmp r1, r0 + bhi _020BB5F4 + cmp r1, r0 + bhs _020BB7B0 + ldr r0, _020BB7CC ; =0x30414D42 + cmp r1, r0 + bhi _020BB5E4 + cmp r1, r0 + bhs _020BB7B0 + ldr r0, _020BB7D0 ; =0x30414342 + cmp r1, r0 + beq _020BB7B0 + b _020BB7BC +_020BB5E4: + ldr r0, _020BB7D4 ; =0x30415442 + cmp r1, r0 + beq _020BB7B0 + b _020BB7BC +_020BB5F4: + ldr r0, _020BB7D8 ; =0x30505442 + cmp r1, r0 + bhi _020BB618 + cmp r1, r0 + bhs _020BB7B0 + ldr r0, _020BB7DC ; =0x30444D42 + cmp r1, r0 + beq _020BB624 + b _020BB7BC +_020BB618: + ldr r0, _020BB7E0 ; =0x30585442 + cmp r1, r0 + bne _020BB7BC +_020BB624: + mov r11, #0x1 + mov r0, r5 + mov r9, r11 + mov r8, r11 + bl NNS_G3dGetTex + movs r4, r0 + beq _020BB77C + bl NNS_G3dTexGetRequiredSize + mov r7, r0 + mov r0, r4 + bl NNS_G3dTex4x4GetRequiredSize + mov r6, r0 + mov r0, r4 + bl NNS_G3dPlttGetRequiredSize + mov r10, r0 + cmp r7, #0x0 + beq _020BB68C + ldr r0, _020BB7E4 ; =NNS_GfdDefaultFuncAllocTexVram + mov r1, #0x0 + ldr r3, [r0, #0x0] + mov r0, r7 + mov r2, r1 + blx r3 + movs r7, r0 + moveq r11, #0x0 + b _020BB690 +_020BB68C: + mov r7, #0x0 +_020BB690: + cmp r6, #0x0 + beq _020BB6BC + ldr r1, _020BB7E4 ; =NNS_GfdDefaultFuncAllocTexVram + mov r0, r6 + ldr r3, [r1, #0x0] + mov r1, #0x1 + mov r2, #0x0 + blx r3 + movs r6, r0 + moveq r9, #0x0 + b _020BB6C0 +_020BB6BC: + mov r6, #0x0 +_020BB6C0: + cmp r10, #0x0 + beq _020BB6F0 + ldr r1, _020BB7E8 ; =NNS_GfdDefaultFuncAllocPlttVram + ldrh r2, [r4, #0x20] + ldr r3, [r1, #0x0] + mov r0, r10 + and r1, r2, #0x8000 + mov r2, #0x0 + blx r3 + movs r10, r0 + moveq r8, #0x0 + b _020BB6F4 +_020BB6F0: + mov r10, #0x0 +_020BB6F4: + cmp r11, #0x0 + beq _020BB70C + cmp r9, #0x0 + beq _020BB70C + cmp r8, #0x0 + bne _020BB748 +_020BB70C: + ldr r1, _020BB7EC ; =NNS_GfdDefaultFuncFreePlttVram + mov r0, r10 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020BB7F0 ; =NNS_GfdDefaultFuncFreeTexVram + mov r0, r6 + ldr r1, [r1, #0x0] + blx r1 + ldr r1, _020BB7F0 ; =NNS_GfdDefaultFuncFreeTexVram + mov r0, r7 + ldr r1, [r1, #0x0] + blx r1 + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020BB748: + mov r0, r4 + mov r1, r7 + mov r2, r6 + bl NNS_G3dTexSetTexKey + mov r0, r4 + mov r1, r10 + bl NNS_G3dPlttSetPlttKey + mov r0, r4 + mov r1, #0x1 + bl NNS_G3dTexLoad + mov r0, r4 + mov r1, #0x1 + bl NNS_G3dPlttLoad +_020BB77C: + ldr r1, [r5, #0x0] + ldr r0, _020BB7DC ; =0x30444D42 + cmp r1, r0 + bne _020BB7A4 + mov r0, r5 + bl NNS_G3dGetMdlSet + cmp r4, #0x0 + beq _020BB7A4 + mov r1, r4 + bl NNS_G3dBindMdlSet +_020BB7A4: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020BB7B0: + add sp, sp, #0x4 + mov r0, #0x1 + ldmia sp!, {r4-r11,pc} +_020BB7BC: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020BB7C8: .word 0x30415642 +_020BB7CC: .word 0x30414D42 +_020BB7D0: .word 0x30414342 +_020BB7D4: .word 0x30415442 +_020BB7D8: .word 0x30505442 +_020BB7DC: .word 0x30444D42 +_020BB7E0: .word 0x30585442 +_020BB7E4: .word NNS_GfdDefaultFuncAllocTexVram +_020BB7E8: .word NNS_GfdDefaultFuncAllocPlttVram +_020BB7EC: .word NNS_GfdDefaultFuncFreePlttVram +_020BB7F0: .word NNS_GfdDefaultFuncFreeTexVram + arm_func_end NNS_G3dResDefaultSetup + + arm_func_start NNS_G3dInit +NNS_G3dInit: ; 0x020BB7F4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl G3X_Init + bl NNS_G3dGlbInit + ldr r1, _020BB820 ; =0x04000600 + ldr r0, [r1, #0x0] + bic r0, r0, #0xc0000000 + orr r0, r0, #0x80000000 + str r0, [r1, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020BB820: .word 0x04000600 + arm_func_end NNS_G3dInit + + arm_func_start NNS_G3dGetCurrentMtx +NNS_G3dGetCurrentMtx: ; 0x020BB824 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x40 + mov r6, r0 + mov r5, r1 + bl NNS_G3dGeFlushBuffer + ldr r0, _020BB8B4 ; =0x04000440 + mov r2, #0x0 + ldr r1, _020BB8B8 ; =0x04000444 + str r2, [r0, #0x0] + ldr r0, _020BB8BC ; =0x04000454 + str r2, [r1, #0x0] + str r2, [r0, #0x0] + cmp r6, #0x0 + beq _020BB87C + add r4, sp, #0x0 +_020BB860: + mov r0, r4 + bl G3X_GetClipMtx + cmp r0, #0x0 + bne _020BB860 + add r0, sp, #0x0 + mov r1, r6 + bl MTX_Copy44To43_ +_020BB87C: + cmp r5, #0x0 + beq _020BB894 +_020BB884: + mov r0, r5 + bl G3X_GetVectorMtx + cmp r0, #0x0 + bne _020BB884 +_020BB894: + ldr r1, _020BB8C0 ; =0x04000448 + mov r2, #0x1 + ldr r0, _020BB8B4 ; =0x04000440 + str r2, [r1, #0x0] + mov r1, #0x2 + str r1, [r0, #0x0] + add sp, sp, #0x40 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020BB8B4: .word 0x04000440 +_020BB8B8: .word 0x04000444 +_020BB8BC: .word 0x04000454 +_020BB8C0: .word 0x04000448 + arm_func_end NNS_G3dGetCurrentMtx diff --git a/arm9/asm/NNS_G3D_xsi.s b/arm9/asm/NNS_G3D_xsi.s new file mode 100644 index 00000000..63787926 --- /dev/null +++ b/arm9/asm/NNS_G3D_xsi.s @@ -0,0 +1,477 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global calcTexMtx_ +calcTexMtx_: ; 0x021067F0 + .word texmtxCalc_flag_ + .word texmtxCalc_flagS_ + .word texmtxCalc_flagR_ + .word texmtxCalc_flagRS_ + .word texmtxCalc_flagT_ + .word texmtxCalc_flagTS_ + .word texmtxCalc_flagTR_ + .word texmtxCalc_flagTRS_ + + .section .text + + arm_func_start NNSi_G3dSendTexSRTXsi +NNSi_G3dSendTexSRTXsi: ; 0x020BFA9C + stmdb sp!, {r4,lr} + sub sp, sp, #0x50 + mov r4, r0 + ldr r0, [r4, #0x0] + mov r3, #0x3 + ands r0, r0, #0x8 + ldrne r0, _020BFC1C ; =0x00101610 + mov r2, #0x2 + strne r0, [sp, #0x0] + ldreq r0, _020BFC20 ; =0x00101810 + mov r1, #0x1000 + streq r0, [sp, #0x0] + mov r0, #0x0 + str r3, [sp, #0x4] + str r2, [sp, #0x48] + str r1, [sp, #0x44] + str r0, [sp, #0x40] + str r0, [sp, #0x34] + str r0, [sp, #0x30] + str r0, [sp, #0x2c] + str r0, [sp, #0x28] + str r0, [sp, #0x24] + str r0, [sp, #0x20] + str r0, [sp, #0x14] + str r0, [sp, #0x10] + ldr r0, [r4, #0x0] + ands r0, r0, #0x1 + strne r1, [r4, #0x1c] + ldrne r0, [r4, #0x1c] + strne r0, [r4, #0x18] + ldr r0, [r4, #0x0] + ands r0, r0, #0x2 + movne r0, #0x1000 + strneh r0, [r4, #0x22] + movne r0, #0x0 + strneh r0, [r4, #0x20] + ldr r0, [r4, #0x0] + ands r0, r0, #0x4 + movne r0, #0x0 + strne r0, [r4, #0x28] + ldrne r0, [r4, #0x28] + strne r0, [r4, #0x24] + ldr r1, [r4, #0x0] + ldr r0, _020BFC24 ; =calcTexMtx_ + and r1, r1, #0x7 + ldr r2, [r0, r1, lsl #0x2] + add r0, sp, #0x8 + mov r1, r4 + blx r2 + ldr r3, [r4, #0x30] + cmp r3, #0x1000 + beq _020BFBB0 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x8] + ldr r2, [r4, #0x30] + ldr r0, [sp, #0x38] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0xc] + ldr r1, [r4, #0x30] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x38] +_020BFBB0: + ldr r3, [r4, #0x34] + cmp r3, #0x1000 + beq _020BFC00 + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x1c] + smull r2, r0, r3, r0 + mov r2, r2, lsr #0xc + orr r2, r2, r0, lsl #0x14 + str r2, [sp, #0x18] + ldr r2, [r4, #0x34] + ldr r0, [sp, #0x3c] + smull r3, r1, r2, r1 + mov r2, r3, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [sp, #0x1c] + ldr r1, [r4, #0x34] + smull r2, r0, r1, r0 + mov r1, r2, lsr #0xc + orr r1, r1, r0, lsl #0x14 + str r1, [sp, #0x3c] +_020BFC00: + add r1, sp, #0x0 + ldr r0, [sp, #0x0] + add r1, r1, #0x4 + mov r2, #0x12 + bl NNS_G3dGeBufferOP_N + add sp, sp, #0x50 + ldmia sp!, {r4,pc} + .balign 4 +_020BFC1C: .word 0x00101610 +_020BFC20: .word 0x00101810 +_020BFC24: .word calcTexMtx_ + arm_func_end NNSi_G3dSendTexSRTXsi + + arm_func_start texmtxCalc_flagTRS_ +texmtxCalc_flagTRS_: ; 0x020BFC28 + mov r2, #0x1000 + str r2, [r0, #0x0] + mov r1, #0x0 + str r1, [r0, #0x4] + str r1, [r0, #0x10] + str r2, [r0, #0x14] + str r1, [r0, #0x30] + str r1, [r0, #0x34] + bx lr + arm_func_end texmtxCalc_flagTRS_ + + arm_func_start texmtxCalc_flagTR_ +texmtxCalc_flagTR_: ; 0x020BFC4C + ldr r2, [r1, #0x18] + mov r3, #0x0 + str r2, [r0, #0x0] + ldr r2, [r1, #0x1c] + str r2, [r0, #0x14] + str r3, [r0, #0x4] + str r3, [r0, #0x30] + ldrh r2, [r1, #0x2e] + ldr r1, [r1, #0x1c] + rsb r2, r2, #0x0 + sub r1, r1, #0x1000 + mul r1, r2, r1 + mov r1, r1, lsl #0x4 + str r1, [r0, #0x34] + str r3, [r0, #0x10] + bx lr + arm_func_end texmtxCalc_flagTR_ + + arm_func_start texmtxCalc_flagTS_ +texmtxCalc_flagTS_: ; 0x020BFC8C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrh r1, [r5, #0x2c] + ldrsh r0, [r5, #0x20] + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x30] + ldrh r1, [r5, #0x2e] + ldrsh r0, [r5, #0x22] + rsb r1, r1, #0x0 + sub r0, r0, #0x1000 + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end texmtxCalc_flagTS_ + + arm_func_start texmtxCalc_flagT_ +texmtxCalc_flagT_: ; 0x020BFD38 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r9, r1 + ldrh r2, [r9, #0x2c] + ldrh r1, [r9, #0x2e] + mov r10, r0 + mov r8, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r8 + bl FX_DivAsync + ldrsh r3, [r9, #0x22] + ldr r0, [r9, #0x18] + ldrsh r7, [r9, #0x20] + ldr r5, [r9, #0x1c] + smull r2, r1, r0, r3 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + str r2, [r10, #0x0] + smull r2, r1, r5, r3 + mov r4, r2, lsr #0xc + orr r4, r4, r1, lsl #0x14 + smull r2, r1, r0, r7 + mov r6, r2, lsr #0xc + orr r6, r6, r1, lsl #0x14 + str r4, [r10, #0x14] + bl FX_GetDivResult + smull r2, r1, r5, r7 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x4] + mov r0, r8 + mov r1, r11 + bl FX_DivAsync + sub r0, r4, #0x1000 + ldrh r1, [r9, #0x2c] + mul r2, r1, r6 + mov r1, r2, lsl #0x4 + str r1, [r10, #0x30] + ldrh r1, [r9, #0x2e] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r10, #0x34] + bl FX_GetDivResult + rsb r1, r6, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r10, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end texmtxCalc_flagT_ + + arm_func_start texmtxCalc_flagRS_ +texmtxCalc_flagRS_: ; 0x020BFE0C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, #0x1000 + str r2, [r0, #0x0] + str r2, [r0, #0x14] + mov lr, #0x0 + str lr, [r0, #0x4] + ldr r2, [r1, #0x24] + ldrh r3, [r1, #0x2c] + rsb r2, r2, #0x0 + ldr r12, [r1, #0x28] + mul r2, r3, r2 + mov r2, r2, lsl #0x4 + str r2, [r0, #0x30] + ldrh r1, [r1, #0x2e] + rsb r2, r12, #0x0 + rsb r1, r1, #0x0 + mul r2, r1, r2 + mov r1, r2, lsl #0x4 + str r1, [r0, #0x34] + str lr, [r0, #0x10] + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end texmtxCalc_flagRS_ + + arm_func_start texmtxCalc_flagR_ +texmtxCalc_flagR_: ; 0x020BFE68 + stmdb sp!, {r4,lr} + ldr r3, [r1, #0x18] + mov r2, #0x0 + str r3, [r0, #0x0] + ldr r3, [r1, #0x1c] + str r3, [r0, #0x14] + str r2, [r0, #0x4] + ldr r12, [r1, #0x24] + ldr r3, [r1, #0x18] + ldr r4, [r1, #0x28] + smull lr, r3, r12, r3 + mov r12, lr, lsr #0xc + orr r12, r12, r3, lsl #0x14 + ldrh lr, [r1, #0x2c] + rsb r3, r12, #0x0 + ldr r12, [r1, #0x1c] + rsb r4, r4, #0x0 + mul r3, lr, r3 + smull lr, r12, r4, r12 + mov r3, r3, lsl #0x4 + str r3, [r0, #0x30] + mov r4, lr, lsr #0xc + ldrh r3, [r1, #0x2e] + ldr r1, [r1, #0x1c] + orr r4, r4, r12, lsl #0x14 + add r1, r1, r4 + rsb r3, r3, #0x0 + sub r1, r1, #0x1000 + mul r1, r3, r1 + mov r1, r1, lsl #0x4 + str r1, [r0, #0x34] + str r2, [r0, #0x10] + ldmia sp!, {r4,pc} + arm_func_end texmtxCalc_flagR_ + + arm_func_start texmtxCalc_flagS_ +texmtxCalc_flagS_: ; 0x020BFEEC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r1 + ldrh r2, [r5, #0x2c] + ldrh r1, [r5, #0x2e] + mov r6, r0 + mov r4, r2, lsl #0xc + mov r7, r1, lsl #0xc + mov r0, r7 + mov r1, r4 + bl FX_DivAsync + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x0] + ldrsh r0, [r5, #0x22] + str r0, [r6, #0x14] + bl FX_GetDivResult + ldrsh r2, [r5, #0x20] + mov r1, r7 + mul r0, r2, r0 + mov r2, r0, asr #0xc + mov r0, r4 + str r2, [r6, #0x4] + bl FX_DivAsync + ldrsh lr, [r5, #0x20] + ldr r4, [r5, #0x28] + ldrsh r0, [r5, #0x22] + ldr r12, [r5, #0x24] + smull r3, r2, r4, lr + smlal r3, r2, r12, r0 + smull r1, r0, r4, r0 + mov r3, r3, lsr #0xc + orr r3, r3, r2, lsl #0x14 + sub r4, lr, r3 + smull r3, r2, r12, lr + subs r1, r3, r1 + sbc r0, r2, r0 + ldrh r2, [r5, #0x2c] + mov r1, r1, lsr #0xc + orr r1, r1, r0, lsl #0x14 + mul r0, r2, r4 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x30] + ldrsh r0, [r5, #0x22] + ldrh r2, [r5, #0x2e] + add r0, r0, r1 + rsb r1, r2, #0x0 + sub r0, r0, #0x1000 + mul r0, r1, r0 + mov r0, r0, lsl #0x4 + str r0, [r6, #0x34] + bl FX_GetDivResult + ldrsh r1, [r5, #0x20] + rsb r1, r1, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r6, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + arm_func_end texmtxCalc_flagS_ + + arm_func_start texmtxCalc_flag_ +texmtxCalc_flag_: ; 0x020BFFD4 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r6, r1 + ldrh r2, [r6, #0x2c] + ldrh r1, [r6, #0x2e] + mov r7, r0 + mov r10, r2, lsl #0xc + mov r11, r1, lsl #0xc + mov r0, r11 + mov r1, r10 + bl FX_DivAsync + ldrsh r3, [r6, #0x22] + ldr r0, [r6, #0x18] + ldrsh r9, [r6, #0x20] + smull r2, r1, r0, r3 + mov r2, r2, lsr #0xc + ldr r8, [r6, #0x1c] + orr r2, r2, r1, lsl #0x14 + str r2, [r7, #0x0] + smull r2, r1, r8, r3 + mov r4, r2, lsr #0xc + orr r4, r4, r1, lsl #0x14 + smull r2, r1, r0, r9 + mov r5, r2, lsr #0xc + orr r5, r5, r1, lsl #0x14 + str r4, [r7, #0x14] + bl FX_GetDivResult + smull r2, r1, r8, r9 + mov r2, r2, lsr #0xc + orr r2, r2, r1, lsl #0x14 + mul r0, r2, r0 + mov r0, r0, asr #0xc + str r0, [r7, #0x4] + mov r0, r10 + mov r1, r11 + bl FX_DivAsync + ldr lr, [r6, #0x1c] + ldrsh r2, [r6, #0x20] + ldr r8, [r6, #0x24] + ldr r0, [r6, #0x28] + smull r10, r9, r8, r2 + ldrh r1, [r6, #0x2c] + smull r3, r2, r0, r2 + ldrsh r12, [r6, #0x22] + str r1, [sp, #0x0] + mov r11, lr, asr #0x1f + smlal r3, r2, r8, r12 + smull r8, r12, r0, r12 + subs r8, r10, r8 + sbc r0, r9, r12 + mov r9, r8, lsr #0xc + mov r12, r3, lsr #0xc + orr r9, r9, r0, lsl #0x14 + mov r3, r2, asr #0xc + orr r12, r12, r2, lsl #0x14 + umull r10, r2, r9, lr + mla r2, r9, r11, r2 + mov r8, r0, asr #0xc + mla r2, r8, lr, r2 + ldr r1, [r6, #0x18] + mov r8, r10, lsr #0xc + orr r8, r8, r2, lsl #0x14 + add r2, r4, r8 + mov r0, r1, asr #0x1f + umull r8, r4, r12, r1 + mla r4, r12, r0, r4 + mla r4, r3, r1, r4 + mov r0, r8, lsr #0xc + orr r0, r0, r4, lsl #0x14 + sub r1, r5, r0 + ldr r0, [sp, #0x0] + sub r2, r2, #0x1000 + mul r1, r0, r1 + mov r0, r1, lsl #0x4 + str r0, [r7, #0x30] + ldrh r0, [r6, #0x2e] + rsb r0, r0, #0x0 + mul r1, r0, r2 + mov r0, r1, lsl #0x4 + str r0, [r7, #0x34] + bl FX_GetDivResult + rsb r1, r5, #0x0 + mul r0, r1, r0 + mov r0, r0, asr #0xc + str r0, [r7, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + arm_func_end texmtxCalc_flag_ diff --git a/arm9/asm/NNS_GFD_gfd_frameplttvr.s b/arm9/asm/NNS_GFD_gfd_frameplttvr.s new file mode 100644 index 00000000..63d32aec --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_frameplttvr.s @@ -0,0 +1,165 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global s_managerState_ +s_managerState_: ; 0x021CCD4C + .space 0xc + + .section .text + + arm_func_start NNS_GfdResetFrmPlttVramState +NNS_GfdResetFrmPlttVramState: ; 0x020AEC60 + ldr r0, _020AEC78 ; =s_managerState_ + mov r2, #0x0 + ldr r1, [r0, #0x8] + str r2, [r0, #0x0] + str r1, [r0, #0x4] + bx lr + .balign 4 +_020AEC78: .word s_managerState_ + arm_func_end NNS_GfdResetFrmPlttVramState + + arm_func_start NNS_GfdSetFrmPlttVramState +NNS_GfdSetFrmPlttVramState: ; 0x020AEC7C + ldr r2, [r0, #0x0] + ldr r1, _020AEC94 ; =s_managerState_ + str r2, [r1, #0x0] + ldr r0, [r0, #0x4] + str r0, [r1, #0x4] + bx lr + .balign 4 +_020AEC94: .word s_managerState_ + arm_func_end NNS_GfdSetFrmPlttVramState + + arm_func_start NNS_GfdGetFrmPlttVramState +NNS_GfdGetFrmPlttVramState: ; 0x020AEC98 + ldr r1, _020AECB0 ; =s_managerState_ + ldr r2, [r1, #0x0] + str r2, [r0, #0x0] + ldr r1, [r1, #0x4] + str r1, [r0, #0x4] + bx lr + .balign 4 +_020AECB0: .word s_managerState_ + arm_func_end NNS_GfdGetFrmPlttVramState + + arm_func_start NNS_GfdFreeFrmPlttVram +NNS_GfdFreeFrmPlttVram: ; 0x020AECB4 + mov r0, #0x0 + bx lr + arm_func_end NNS_GfdFreeFrmPlttVram + + arm_func_start NNS_GfdAllocFrmPlttVram +NNS_GfdAllocFrmPlttVram: ; 0x020AECBC + stmdb sp!, {r4,lr} + cmp r0, #0x0 + moveq r0, #0x8 + addne r0, r0, #0x7 + ldr ip, _020AEDE8 ; =0x0007FFF8 + bicne r0, r0, #0x7 + cmp r0, r12 + mov r3, #0x0 + movcs r0, #0x0 + ldmcsia sp!, {r4,pc} + cmp r2, #0x1 + bne _020AED64 + ldr r2, _020AEDEC ; =s_managerState_ + cmp r1, #0x0 + ldr r12, [r2, #0x0] + andne r2, r12, #0x7 + rsbne r2, r2, #0x8 + andne r4, r2, #0x7 + andeq r2, r12, #0xf + rsbeq r2, r2, #0x10 + andeq r4, r2, #0xf + ldr r2, _020AEDEC ; =s_managerState_ + add lr, r0, r4 + ldr r2, [r2, #0x4] + sub r2, r2, r12 + cmp r2, lr + blo _020AED5C + cmp r1, #0x0 + add r1, r12, lr + beq _020AED40 + cmp r1, #0x10000 + movhi r12, #0x0 + bhi _020AEDCC +_020AED40: + ldr r1, _020AEDEC ; =s_managerState_ + add r3, r12, r4 + ldr r2, [r1, #0x0] + mov r12, #0x1 + add r2, r2, lr + str r2, [r1, #0x0] + b _020AEDCC +_020AED5C: + mov r12, #0x0 + b _020AEDCC +_020AED64: + ldr r2, _020AEDEC ; =s_managerState_ + ldr r12, [r2, #0x4] + cmp r12, r0 + blo _020AEDC8 + sub r2, r12, r0 + cmp r1, #0x0 + andne r4, r2, #0x7 + andeq r4, r2, #0xf + ldr r2, _020AEDEC ; =s_managerState_ + add lr, r0, r4 + ldr r2, [r2, #0x0] + sub r2, r12, r2 + cmp r2, lr + blo _020AEDC8 + cmp r1, #0x0 + beq _020AEDB0 + cmp r12, #0x10000 + movhi r12, #0x0 + bhi _020AEDCC +_020AEDB0: + ldr r1, _020AEDEC ; =s_managerState_ + mov r12, #0x1 + ldr r2, [r1, #0x4] + sub r3, r2, lr + str r3, [r1, #0x4] + b _020AEDCC +_020AEDC8: + mov r12, #0x0 +_020AEDCC: + cmp r12, #0x0 + ldrne r1, _020AEDF0 ; =0x0000FFFF + movne r2, r0, lsr #0x3 + andne r0, r1, r3, lsr #0x3 + orrne r0, r0, r2, lsl #0x10 + moveq r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020AEDE8: .word 0x0007FFF8 +_020AEDEC: .word s_managerState_ +_020AEDF0: .word 0x0000FFFF + arm_func_end NNS_GfdAllocFrmPlttVram + + arm_func_start NNS_GfdInitFrmPlttVramManager +NNS_GfdInitFrmPlttVramManager: ; 0x020AEDF4 + stmdb sp!, {r4,lr} + ldr r2, _020AEE2C ; =s_managerState_ + mov r4, r1 + str r0, [r2, #0x8] + bl NNS_GfdResetFrmPlttVramState + cmp r4, #0x0 + ldmeqia sp!, {r4,pc} + ldr r3, _020AEE30 ; =NNS_GfdAllocFrmPlttVram + ldr r1, _020AEE34 ; =NNS_GfdDefaultFuncAllocPlttVram + ldr r2, _020AEE38 ; =NNS_GfdFreeFrmPlttVram + ldr r0, _020AEE3C ; =NNS_GfdDefaultFuncFreePlttVram + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AEE2C: .word s_managerState_ +_020AEE30: .word NNS_GfdAllocFrmPlttVram +_020AEE34: .word NNS_GfdDefaultFuncAllocPlttVram +_020AEE38: .word NNS_GfdFreeFrmPlttVram +_020AEE3C: .word NNS_GfdDefaultFuncFreePlttVram + arm_func_end NNS_GfdInitFrmPlttVramManager diff --git a/arm9/asm/NNS_GFD_gfd_frametexvra.s b/arm9/asm/NNS_GFD_gfd_frametexvra.s new file mode 100644 index 00000000..6cc4da87 --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_frametexvra.s @@ -0,0 +1,316 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global tex4x4SearchArray_ +tex4x4SearchArray_: ; 0x021064C8 + .word vramRegions_ + .word vramRegions_ + 0x48 + + .global texNrmSearchArray_ +texNrmSearchArray_: ; 0x021064D0 + .word vramRegions_ + 0x60 + .word vramRegions_ + 0x48 + .word vramRegions_ + .word vramRegions_ + 0x30 + .word vramRegions_ + 0x18 + + .global vramRegions_ +vramRegions_: ; 0x021064E4 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + .byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00 + .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00 + + .section .bss + + .global frmExVramMan_ +frmExVramMan_: ; 0x021CCD48 + .space 0x4 + + .section .text + + arm_func_start NNS_GfdSetFrmTexVramState +NNS_GfdSetFrmTexVramState: ; 0x020AE8CC + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x0 + ldr r3, _020AE914 ; =vramRegions_ + mov r12, lr + mov r2, #0x1 +_020AE8E4: + ldr r1, [r0, r12, lsl #0x2] + add lr, lr, #0x1 + str r1, [r3, #0x0] + ldr r1, [r0, r2, lsl #0x2] + cmp lr, #0x5 + str r1, [r3, #0x4] + add r12, r12, #0x2 + add r3, r3, #0x18 + add r2, r2, #0x2 + blt _020AE8E4 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AE914: .word vramRegions_ + arm_func_end NNS_GfdSetFrmTexVramState + + arm_func_start NNS_GfdGetFrmTexVramState +NNS_GfdGetFrmTexVramState: ; 0x020AE918 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov lr, #0x0 + ldr ip, _020AE960 ; =vramRegions_ + mov r3, lr + mov r2, #0x1 +_020AE930: + ldr r1, [r12, #0x0] + add lr, lr, #0x1 + str r1, [r0, r3, lsl #0x2] + ldr r1, [r12, #0x4] + cmp lr, #0x5 + str r1, [r0, r2, lsl #0x2] + add r12, r12, #0x18 + add r3, r3, #0x2 + add r2, r2, #0x2 + blt _020AE930 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AE960: .word vramRegions_ + arm_func_end NNS_GfdGetFrmTexVramState + + arm_func_start NNS_GfdFreeFrmTexVram +NNS_GfdFreeFrmTexVram: ; 0x020AE964 + mov r0, #0x0 + bx lr + arm_func_end NNS_GfdFreeFrmTexVram + + arm_func_start NNS_GfdAllocFrmTexVram +NNS_GfdAllocFrmTexVram: ; 0x020AE96C + stmdb sp!, {r4-r10,lr} + cmp r0, #0x0 + moveq r7, #0x10 + addne r0, r0, #0xf + bicne r7, r0, #0xf + ldr r0, _020AEADC ; =0x0007FFF0 + cmp r7, r0 + movcs r0, #0x0 + ldmcsia sp!, {r4-r10,pc} + cmp r1, #0x0 + beq _020AEA5C + mov lr, r7, lsr #0x1 + mov r6, #0x0 + ldr r2, _020AEAE0 ; =vramRegions_ + 0x30 + ldr r3, _020AEAE4 ; =vramRegions_ + 0x18 + ldr ip, _020AEAE8 ; =tex4x4SearchArray_ + mov r0, r6 +_020AE9B0: + ldr r5, [r12, r6, lsl #0x2] + ldr r4, [r5, #0x8] + cmp r4, #0x0 + beq _020AEA48 + ldr r9, [r5, #0x4] + ldr r4, [r5, #0x0] + sub r4, r9, r4 + cmp r4, r7 + blo _020AEA48 + ldrh r4, [r5, #0x10] + cmp r4, #0x0 + beq _020AE9EC + cmp r4, #0x3 + beq _020AE9F4 + b _020AE9FC +_020AE9EC: + mov r4, r3 + b _020AEA00 +_020AE9F4: + mov r4, r2 + b _020AEA00 +_020AE9FC: + mov r4, r0 +_020AEA00: + ldr r9, [r4, #0x8] + cmp r9, #0x0 + beq _020AEA48 + ldr r10, [r4, #0x4] + ldr r9, [r4, #0x0] + sub r9, r10, r9 + cmp r9, lr + blo _020AEA48 + ldr r3, [r5, #0x0] + mov r0, #0x1 + add r2, r3, r7 + str r2, [r5, #0x0] + ldr r2, [r4, #0x0] + add r2, r2, lr + str r2, [r4, #0x0] + ldr r2, [r5, #0x14] + add r8, r3, r2 + b _020AEAB8 +_020AEA48: + add r6, r6, #0x1 + cmp r6, #0x2 + blt _020AE9B0 + mov r0, #0x0 + b _020AEAB8 +_020AEA5C: + ldr r3, _020AEAEC ; =texNrmSearchArray_ + mov r5, #0x0 +_020AEA64: + ldr r4, [r3, r5, lsl #0x2] + ldr r0, [r4, #0x8] + cmp r0, #0x0 + beq _020AEAA8 + ldr r2, [r4, #0x4] + ldr r0, [r4, #0x0] + sub r0, r2, r0 + cmp r0, r7 + blo _020AEAA8 + ldr r2, [r4, #0x4] + mov r0, #0x1 + sub r2, r2, r7 + str r2, [r4, #0x4] + ldr r3, [r4, #0x4] + ldr r2, [r4, #0x14] + add r8, r3, r2 + b _020AEAB8 +_020AEAA8: + add r5, r5, #0x1 + cmp r5, #0x5 + blt _020AEA64 + mov r0, #0x0 +_020AEAB8: + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,pc} + ldr r0, _020AEAF0 ; =0x0000FFFF + mov r2, r7, lsr #0x4 + and r0, r0, r8, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + orr r0, r0, r1, lsl #0x1f + ldmia sp!, {r4-r10,pc} + .balign 4 +_020AEADC: .word 0x0007FFF0 +_020AEAE0: .word vramRegions_ + 0x30 +_020AEAE4: .word vramRegions_ + 0x18 +_020AEAE8: .word tex4x4SearchArray_ +_020AEAEC: .word texNrmSearchArray_ +_020AEAF0: .word 0x0000FFFF + arm_func_end NNS_GfdAllocFrmTexVram + + arm_func_start NNS_GfdResetFrmTexVramState +NNS_GfdResetFrmTexVramState: ; 0x020AEAF4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r0, _020AEB68 ; =frmExVramMan_ + mov r6, #0x0 + ldrh r7, [r0, #0x0] + ldr r5, _020AEB6C ; =vramRegions_ + mov lr, r6 + cmp r7, #0x1 + addhi r7, r7, #0x1 + mov r1, r6 + mov r3, r6 + mov r4, #0x1 + mov r0, #0x20000 + mov r2, #0x10000 +_020AEB2C: + cmp r6, r7 + strlt r4, [r5, #0x8] + strge lr, [r5, #0x8] + ldr r12, [r5, #0xc] + add r6, r6, #0x1 + cmp r12, #0x0 + strne r3, [r5, #0x0] + strne r2, [r5, #0x4] + streq r1, [r5, #0x0] + streq r0, [r5, #0x4] + cmp r6, #0x5 + add r5, r5, #0x18 + blt _020AEB2C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AEB68: .word frmExVramMan_ +_020AEB6C: .word vramRegions_ + arm_func_end NNS_GfdResetFrmTexVramState + + arm_func_start NNS_GfdInitFrmTexVramManager +NNS_GfdInitFrmTexVramManager: ; 0x020AEB70 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + cmp r5, #0x2 + bhi _020AEBA8 + mov r12, #0x1 + mov r0, #0x4 + mov r1, #0x3 + mov r2, #0x2 + mov r3, #0x0 + str r12, [sp, #0x0] + bl NNSi_GfdSetTexNrmSearchArray + b _020AEBC4 +_020AEBA8: + mov r12, #0x1 + mov r0, #0x4 + mov r1, #0x3 + mov r2, #0x0 + mov r3, #0x2 + str r12, [sp, #0x0] + bl NNSi_GfdSetTexNrmSearchArray +_020AEBC4: + ldr r0, _020AEBFC ; =frmExVramMan_ + strh r5, [r0, #0x0] + bl NNS_GfdResetFrmTexVramState + cmp r4, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r3, _020AEC00 ; =NNS_GfdAllocFrmTexVram + ldr r1, _020AEC04 ; =NNS_GfdDefaultFuncAllocTexVram + ldr r2, _020AEC08 ; =NNS_GfdFreeFrmTexVram + ldr r0, _020AEC0C ; =NNS_GfdDefaultFuncFreeTexVram + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AEBFC: .word frmExVramMan_ +_020AEC00: .word NNS_GfdAllocFrmTexVram +_020AEC04: .word NNS_GfdDefaultFuncAllocTexVram +_020AEC08: .word NNS_GfdFreeFrmTexVram +_020AEC0C: .word NNS_GfdDefaultFuncFreeTexVram + arm_func_end NNS_GfdInitFrmTexVramManager + + arm_func_start NNSi_GfdSetTexNrmSearchArray +NNSi_GfdSetTexNrmSearchArray: ; 0x020AEC10 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr lr, [sp, #0x18] + ldr r6, _020AEC58 ; =vramRegions_ + mov r12, #0x18 + mla r7, r0, r12, r6 + ldr r0, _020AEC5C ; =texNrmSearchArray_ + mla r5, r1, r12, r6 + mla r4, r2, r12, r6 + mla r2, r3, r12, r6 + mla r1, lr, r12, r6 + str r7, [r0, #0x0] + str r5, [r0, #0x4] + str r4, [r0, #0x8] + str r2, [r0, #0xc] + str r1, [r0, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020AEC58: .word vramRegions_ +_020AEC5C: .word texNrmSearchArray_ + arm_func_end NNSi_GfdSetTexNrmSearchArray diff --git a/arm9/asm/NNS_GFD_gfd_linkedlistp.s b/arm9/asm/NNS_GFD_gfd_linkedlistp.s new file mode 100644 index 00000000..dd1af2f9 --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_linkedlistp.s @@ -0,0 +1,152 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + +mgr_: ; 0x021CCD88 + .space 0x14 + + .section .text + + arm_func_start NNS_GfdResetLnkPlttVramState +NNS_GfdResetLnkPlttVramState: ; 0x020AFA30 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020AFA78 ; =mgr_ + ldr r1, [r0, #0x10] + ldr r0, [r0, #0xc] + mov r1, r1, lsr #0x4 + bl NNSi_GfdInitLnkVramBlockPool + ldr r1, _020AFA78 ; =mgr_ + str r0, [r1, #0x4] + mov r0, r1 + bl NNSi_GfdInitLnkVramMan + ldr r0, _020AFA78 ; =mgr_ + ldr r1, _020AFA7C ; =mgr_ + 0x4 + ldr r3, [r0, #0x8] + mov r2, #0x0 + bl NNSi_GfdAddNewFreeBlock + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFA78: .word mgr_ +_020AFA7C: .word mgr_ + 0x4 + arm_func_end NNS_GfdResetLnkPlttVramState + + arm_func_start NNS_GfdFreeLnkPlttVram +NNS_GfdFreeLnkPlttVram: ; 0x020AFA80 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r1, #0x10000 + rsb r2, r1, #0x0 + ldr r1, _020AFAC8 ; =0x0000FFFF + and r2, r0, r2 + and r12, r0, r1 + mov r3, r2, lsr #0x10 + ldr r0, _020AFACC ; =mgr_ + ldr r1, _020AFAD0 ; =mgr_ + 0x4 + mov r2, r12, lsl #0x3 + mov r3, r3, lsl #0x3 + bl NNSi_GfdFreeLnkVram + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFAC8: .word 0x0000FFFF +_020AFACC: .word mgr_ +_020AFAD0: .word mgr_ + 0x4 + arm_func_end NNS_GfdFreeLnkPlttVram + + arm_func_start NNS_GfdAllocLnkPlttVram +NNS_GfdAllocLnkPlttVram: ; 0x020AFAD4 + stmdb sp!, {r4,lr} + sub sp, sp, #0x8 + cmp r0, #0x0 + moveq r4, #0x8 + addne r0, r0, #0x7 + bicne r4, r0, #0x7 + ldr r0, _020AFB98 ; =0x0007FFF8 + cmp r4, r0 + addcs sp, sp, #0x8 + movcs r0, #0x0 + ldmcsia sp!, {r4,pc} + cmp r1, #0x0 + beq _020AFB50 + mov r12, #0x8 + ldr r0, _020AFB9C ; =mgr_ + ldr r1, _020AFBA0 ; =mgr_ + 0x4 + add r2, sp, #0x4 + mov r3, r4 + str r12, [sp, #0x0] + bl NNSi_GfdAllocLnkVramAligned + ldr r2, [sp, #0x4] + add r1, r2, r4 + cmp r1, #0x10000 + bls _020AFB6C + ldr r0, _020AFB9C ; =mgr_ + ldr r1, _020AFBA0 ; =mgr_ + 0x4 + mov r3, r4 + bl NNSi_GfdFreeLnkVram + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020AFB50: + ldr r0, _020AFB9C ; =mgr_ + mov r12, #0x10 + ldr r1, _020AFBA0 ; =mgr_ + 0x4 + add r2, sp, #0x4 + mov r3, r4 + str r12, [sp, #0x0] + bl NNSi_GfdAllocLnkVramAligned +_020AFB6C: + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r1, [sp, #0x4] + ldr r0, _020AFBA4 ; =0x0000FFFF + mov r2, r4, lsr #0x3 + and r0, r0, r1, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + add sp, sp, #0x8 + ldmia sp!, {r4,pc} + .balign 4 +_020AFB98: .word 0x0007FFF8 +_020AFB9C: .word mgr_ +_020AFBA0: .word mgr_ + 0x4 +_020AFBA4: .word 0x0000FFFF + arm_func_end NNS_GfdAllocLnkPlttVram + + arm_func_start NNS_GfdInitLnkPlttVramManager +NNS_GfdInitLnkPlttVramManager: ; 0x020AFBA8 + stmdb sp!, {r4,lr} + ldr ip, _020AFBE8 ; =mgr_ + mov r4, r3 + str r0, [r12, #0x8] + str r1, [r12, #0xc] + str r2, [r12, #0x10] + bl NNS_GfdResetLnkPlttVramState + cmp r4, #0x0 + ldmeqia sp!, {r4,pc} + ldr r3, _020AFBEC ; =NNS_GfdAllocLnkPlttVram + ldr r1, _020AFBF0 ; =NNS_GfdDefaultFuncAllocPlttVram + ldr r2, _020AFBF4 ; =NNS_GfdFreeLnkPlttVram + ldr r0, _020AFBF8 ; =NNS_GfdDefaultFuncFreePlttVram + str r3, [r1, #0x0] + str r2, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020AFBE8: .word mgr_ +_020AFBEC: .word NNS_GfdAllocLnkPlttVram +_020AFBF0: .word NNS_GfdDefaultFuncAllocPlttVram +_020AFBF4: .word NNS_GfdFreeLnkPlttVram +_020AFBF8: .word NNS_GfdDefaultFuncFreePlttVram + arm_func_end NNS_GfdInitLnkPlttVramManager + + arm_func_start NNS_GfdGetLnkPlttVramManagerWorkSize +NNS_GfdGetLnkPlttVramManagerWorkSize: ; 0x020AFBFC + mov r0, r0, lsl #0x4 + bx lr + arm_func_end NNS_GfdGetLnkPlttVramManagerWorkSize diff --git a/arm9/asm/NNS_GFD_gfd_linkedlistt.s b/arm9/asm/NNS_GFD_gfd_linkedlistt.s new file mode 100644 index 00000000..6522bf3b --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_linkedlistt.s @@ -0,0 +1,283 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global __LOCAL_LABEL__$7929 +__LOCAL_LABEL__$7929: ; 0x020FF864 + .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + + .section .bss + +mgr_: ; 0x021CCD6C + .space 0x1C + + .section .text + + arm_func_start NNS_GfdResetLnkTexVramState +NNS_GfdResetLnkTexVramState: ; 0x020AF6A4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x30 + ldr r6, _020AF884 ; =__LOCAL_LABEL__$7929 + add r5, sp, #0x0 + ldmia r6!, {r0-r3} + mov r12, r5 + stmia r5!, {r0-r3} + ldmia r6!, {r0-r3} + stmia r5!, {r0-r3} + ldr r4, _020AF888 ; =mgr_ + ldmia r6, {r0-r3} + stmia r5, {r0-r3} + ldr lr, [r4, #0x10] + ldr r1, [r4, #0xc] + add r0, lr, lr, lsr #0x1 + mov r4, lr, lsr #0x1 + sub r0, r1, r0 + mov r3, #0x0 +_020AF6EC: + cmp r3, #0x0 + beq _020AF6FC + cmp r3, #0x2 + bne _020AF734 +_020AF6FC: + ldr r2, [r12, #0x0] + cmp r2, #0x0 + beq _020AF734 + cmp lr, #0x0 + beq _020AF734 + ldr r1, [r12, #0x8] + cmp r2, lr + movhi r2, lr + add r1, r1, r2 + str r1, [r12, #0x8] + ldr r1, [r12, #0x0] + sub lr, lr, r2 + sub r1, r1, r2 + str r1, [r12, #0x0] +_020AF734: + add r3, r3, #0x1 + cmp r3, #0x4 + add r12, r12, #0xc + blo _020AF6EC + ldr r1, [sp, #0xc] + add r5, sp, #0x0 + sub r1, r1, r4 + str r1, [sp, #0xc] + mov r3, #0x0 +_020AF758: + ldr r2, [r5, #0x0] + cmp r2, #0x0 + beq _020AF790 + cmp r0, #0x0 + beq _020AF790 + ldr r1, [r5, #0x4] + cmp r2, r0 + movhi r2, r0 + add r1, r1, r2 + str r1, [r5, #0x4] + ldr r1, [r5, #0x0] + sub r0, r0, r2 + sub r1, r1, r2 + str r1, [r5, #0x0] +_020AF790: + add r3, r3, #0x1 + cmp r3, #0x4 + add r5, r5, #0xc + blo _020AF758 + ldr r0, _020AF888 ; =mgr_ + bl NNSi_GfdInitLnkVramMan + ldr r0, _020AF88C ; =mgr_ + 0x4 + bl NNSi_GfdInitLnkVramMan + ldr r0, _020AF888 ; =mgr_ + ldr r1, [r0, #0x18] + ldr r0, [r0, #0x14] + mov r1, r1, lsr #0x4 + bl NNSi_GfdInitLnkVramBlockPool + ldr r3, [sp, #0x8] + ldr r1, _020AF888 ; =mgr_ + cmp r3, #0x0 + str r0, [r1, #0x8] + beq _020AF7E8 + ldr r0, _020AF88C ; =mgr_ + 0x4 + ldr r1, _020AF890 ; =mgr_ + 0x8 + mov r2, #0x0 + bl NNSi_GfdAddNewFreeBlock +_020AF7E8: + ldr r3, [sp, #0x4] + ldr r2, [sp, #0x8] + cmp r3, #0x0 + beq _020AF804 + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + bl NNSi_GfdAddNewFreeBlock +_020AF804: + ldr r3, [sp, #0x20] + cmp r3, #0x0 + beq _020AF820 + ldr r0, _020AF88C ; =mgr_ + 0x4 + ldr r1, _020AF890 ; =mgr_ + 0x8 + mov r2, #0x40000 + bl NNSi_GfdAddNewFreeBlock +_020AF820: + ldr r3, [sp, #0x1c] + ldr r0, [sp, #0x20] + cmp r3, #0x0 + add r2, r0, #0x40000 + beq _020AF840 + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + bl NNSi_GfdAddNewFreeBlock +_020AF840: + ldr r3, [sp, #0x28] + cmp r3, #0x0 + beq _020AF85C + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + mov r2, #0x60000 + bl NNSi_GfdAddNewFreeBlock +_020AF85C: + ldr r3, [sp, #0x10] + cmp r3, #0x0 + addeq sp, sp, #0x30 + ldmeqia sp!, {r4-r6,pc} + ldr r0, _020AF888 ; =mgr_ + ldr r1, _020AF890 ; =mgr_ + 0x8 + add r2, r4, #0x20000 + bl NNSi_GfdAddNewFreeBlock + add sp, sp, #0x30 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AF884: .word __LOCAL_LABEL__$7929 +_020AF888: .word mgr_ +_020AF88C: .word mgr_ + 0x4 +_020AF890: .word mgr_ + 0x8 + arm_func_end NNS_GfdResetLnkTexVramState + + arm_func_start NNS_GfdFreeLnkTexVram +NNS_GfdFreeLnkTexVram: ; 0x020AF894 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, _020AF908 ; =0x7FFF0000 + ldr r1, _020AF90C ; =0x0000FFFF + and r2, r0, r2 + and r3, r0, r1 + mov r1, r2, lsr #0x10 + and r0, r0, #0x80000000 + mov r2, r3, lsl #0x3 + movs r3, r1, lsl #0x4 + mov r0, r0, lsr #0x1f + beq _020AF8FC + cmp r0, #0x0 + beq _020AF8DC + ldr r0, _020AF910 ; =mgr_ + 0x4 + ldr r1, _020AF914 ; =mgr_ + 0x8 + bl NNSi_GfdFreeLnkVram + b _020AF8E8 +_020AF8DC: + ldr r0, _020AF918 ; =mgr_ + ldr r1, _020AF914 ; =mgr_ + 0x8 + bl NNSi_GfdFreeLnkVram +_020AF8E8: + cmp r0, #0x0 + movne r0, #0x0 + add sp, sp, #0x4 + moveq r0, #0x1 + ldmia sp!, {pc} +_020AF8FC: + mov r0, #0x2 + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AF908: .word 0x7FFF0000 +_020AF90C: .word 0x0000FFFF +_020AF910: .word mgr_ + 0x4 +_020AF914: .word mgr_ + 0x8 +_020AF918: .word mgr_ + arm_func_end NNS_GfdFreeLnkTexVram + + arm_func_start NNS_GfdAllocLnkTexVram +NNS_GfdAllocLnkTexVram: ; 0x020AF91C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + moveq r5, #0x10 + addne r0, r0, #0xf + bicne r5, r0, #0xf + ldr r0, _020AF9B0 ; =0x0007FFF0 + mov r4, r1 + cmp r5, r0 + addcs sp, sp, #0x4 + movcs r0, #0x0 + ldmcsia sp!, {r4-r5,pc} + cmp r4, #0x0 + beq _020AF96C + ldr r0, _020AF9B4 ; =mgr_ + 0x4 + ldr r1, _020AF9B8 ; =mgr_ + 0x8 + add r2, sp, #0x0 + mov r3, r5 + bl NNSi_GfdAllocLnkVram + b _020AF980 +_020AF96C: + ldr r0, _020AF9BC ; =mgr_ + ldr r1, _020AF9B8 ; =mgr_ + 0x8 + add r2, sp, #0x0 + mov r3, r5 + bl NNSi_GfdAllocLnkVram +_020AF980: + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + ldr r1, [sp, #0x0] + ldr r0, _020AF9C0 ; =0x0000FFFF + mov r2, r5, lsr #0x4 + and r0, r0, r1, lsr #0x3 + orr r0, r0, r2, lsl #0x10 + orr r0, r0, r4, lsl #0x1f + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AF9B0: .word 0x0007FFF0 +_020AF9B4: .word mgr_ + 0x4 +_020AF9B8: .word mgr_ + 0x8 +_020AF9BC: .word mgr_ +_020AF9C0: .word 0x0000FFFF + arm_func_end NNS_GfdAllocLnkTexVram + + arm_func_start NNS_GfdInitLnkTexVramManager +NNS_GfdInitLnkTexVramManager: ; 0x020AF9C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr ip, _020AFA14 ; =mgr_ + str r0, [r12, #0xc] + str r1, [r12, #0x10] + str r2, [r12, #0x14] + str r3, [r12, #0x18] + bl NNS_GfdResetLnkTexVramState + ldr r0, [sp, #0x8] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r3, _020AFA18 ; =NNS_GfdAllocLnkTexVram + ldr r1, _020AFA1C ; =NNS_GfdDefaultFuncAllocTexVram + ldr r2, _020AFA20 ; =NNS_GfdFreeLnkTexVram + ldr r0, _020AFA24 ; =NNS_GfdDefaultFuncFreeTexVram + str r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020AFA14: .word mgr_ +_020AFA18: .word NNS_GfdAllocLnkTexVram +_020AFA1C: .word NNS_GfdDefaultFuncAllocTexVram +_020AFA20: .word NNS_GfdFreeLnkTexVram +_020AFA24: .word NNS_GfdDefaultFuncFreeTexVram + arm_func_end NNS_GfdInitLnkTexVramManager + + arm_func_start NNS_GfdGetLnkTexVramManagerWorkSize +NNS_GfdGetLnkTexVramManagerWorkSize: ; 0x020AFA28 + mov r0, r0, lsl #0x4 + bx lr + arm_func_end NNS_GfdGetLnkTexVramManagerWorkSize diff --git a/arm9/asm/NNS_GFD_gfd_plttvramman.s b/arm9/asm/NNS_GFD_gfd_plttvramman.s new file mode 100644 index 00000000..c869a9a1 --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_plttvramman.s @@ -0,0 +1,26 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global NNS_GfdDefaultFuncAllocPlttVram +NNS_GfdDefaultFuncAllocPlttVram: ; 0x021064C0 + .word AllocPlttVram_ + + .global NNS_GfdDefaultFuncFreePlttVram +NNS_GfdDefaultFuncFreePlttVram: ; 0x021064C4 + .word FreePlttVram_ + + .section .text + + arm_func_start FreePlttVram_ +FreePlttVram_: ; 0x020AE8BC + mvn r0, #0x0 + bx lr + arm_func_end FreePlttVram_ + + arm_func_start AllocPlttVram_ +AllocPlttVram_: ; 0x020AE8C4 + mov r0, #0x0 + bx lr + arm_func_end AllocPlttVram_ diff --git a/arm9/asm/NNS_GFD_gfd_texvramman.s b/arm9/asm/NNS_GFD_gfd_texvramman.s new file mode 100644 index 00000000..d2f6c88f --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_texvramman.s @@ -0,0 +1,26 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .data + + .global NNS_GfdDefaultFuncAllocTexVram +NNS_GfdDefaultFuncAllocTexVram: ; 0x021064B8 + .word AllocTexVram_ + + .global NNS_GfdDefaultFuncFreeTexVram +NNS_GfdDefaultFuncFreeTexVram: ; 0x021064BC + .word FreeTexVram_ + + .section .text + + arm_func_start FreeTexVram_ +FreeTexVram_: ; 0x020AE8AC + mvn r0, #0x0 + bx lr + arm_func_end FreeTexVram_ + + arm_func_start AllocTexVram_ +AllocTexVram_: ; 0x020AE8B4 + mov r0, #0x0 + bx lr + arm_func_end AllocTexVram_ diff --git a/arm9/asm/NNS_GFD_gfd_vramtransfe.s b/arm9/asm/NNS_GFD_gfd_vramtransfe.s new file mode 100644 index 00000000..9e3a8863 --- /dev/null +++ b/arm9/asm/NNS_GFD_gfd_vramtransfe.s @@ -0,0 +1,592 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .rodata + + .global transFunc$7934 +transFunc$7934: ; 0x020FF7D4 + .word DoTransfer3dTex + .word DoTransfer3dTexPltt + .word DoTransfer3dClearImageColor + .word DoTransfer3dClearImageDepth + .word DoTransfer2dBG0CharMain + .word DoTransfer2dBG1CharMain + .word DoTransfer2dBG2CharMain + .word DoTransfer2dBG3CharMain + .word DoTransfer2dBG0ScrMain + .word DoTransfer2dBG1ScrMain + .word DoTransfer2dBG2ScrMain + .word DoTransfer2dBG3ScrMain + .word DoTransfer2dBG2BmpMain + .word DoTransfer2dBG3BmpMain + .word DoTransfer2dObjPlttMain + .word DoTransfer2dBGPlttMain + .word DoTransfer2dObjExtPlttMain + .word DoTransfer2dBGExtPlttMain + .word DoTransfer2dObjOamMain + .word DoTransfer2dObjCharMain + .word DoTransfer2dBG0CharSub + .word DoTransfer2dBG1CharSub + .word DoTransfer2dBG2CharSub + .word DoTransfer2dBG3CharSub + .word DoTransfer2dBG0ScrSub + .word DoTransfer2dBG1ScrSub + .word DoTransfer2dBG2ScrSub + .word DoTransfer2dBG3ScrSub + .word DoTransfer2dBG2BmpSub + .word DoTransfer2dBG3BmpSub + .word DoTransfer2dObjPlttSub + .word DoTransfer2dBGPlttSub + .word DoTransfer2dObjExtPlttSub + .word DoTransfer2dBGExtPlttSub + .word DoTransfer2dObjOamSub + .word DoTransfer2dObjCharSub + ; const initializer + + .section .bss + + .global s_VramTransferManager +s_VramTransferManager: ; 0x021CCD58 + .space 0x14 + + .section .text + + arm_func_start NNS_GfdRegisterNewVramTransferTask +NNS_GfdRegisterNewVramTransferTask: ; 0x020AEE40 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + ldr r5, _020AEEB4 ; =s_VramTransferManager + mov r9, r0 + mov r0, r5 + mov r8, r1 + mov r7, r2 + mov r6, r3 + bl IsVramTransferTaskQueueFull_ + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} + mov r0, r5 + bl NNSi_GfdGetEndVramTransferTaskQueue + mov r4, r0 + str r9, [r4, #0x0] + str r7, [r4, #0x4] + str r8, [r4, #0x8] + mov r0, r5 + str r6, [r4, #0xc] + bl NNSi_GfdPushVramTransferTaskQueue + ldr r2, [r5, #0x10] + ldr r1, [r4, #0xc] + mov r0, #0x1 + add r1, r2, r1 + str r1, [r5, #0x10] + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020AEEB4: .word s_VramTransferManager + arm_func_end NNS_GfdRegisterNewVramTransferTask + + arm_func_start NNS_GfdDoVramTransfer +NNS_GfdDoVramTransfer: ; 0x020AEEB8 + stmdb sp!, {r4-r6,lr} + ldr r6, _020AEF18 ; =s_VramTransferManager + mov r0, r6 + bl NNSi_GfdGetFrontVramTransferTaskQueue + mov r5, r0 + mov r0, r6 + bl NNSi_GfdPopVramTransferTaskQueue + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + add r4, r6, #0x10 +_020AEEE0: + mov r0, r5 + bl DoTransfer_ + ldr r2, [r4, #0x0] + ldr r1, [r5, #0xc] + mov r0, r6 + sub r1, r2, r1 + str r1, [r4, #0x0] + bl NNSi_GfdGetFrontVramTransferTaskQueue + mov r5, r0 + mov r0, r6 + bl NNSi_GfdPopVramTransferTaskQueue + cmp r0, #0x0 + bne _020AEEE0 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020AEF18: .word s_VramTransferManager + arm_func_end NNS_GfdDoVramTransfer + + arm_func_start NNS_GfdInitVramTransferManager +NNS_GfdInitVramTransferManager: ; 0x020AEF1C + ldr r2, _020AEF34 ; =s_VramTransferManager + ldr ip, _020AEF38 ; =ResetTaskQueue_ + str r0, [r2, #0x0] + mov r0, r2 + str r1, [r2, #0x4] + bx r12 + .balign 4 +_020AEF34: .word s_VramTransferManager +_020AEF38: .word ResetTaskQueue_ + arm_func_end NNS_GfdInitVramTransferManager + + arm_func_start NNSi_GfdPopVramTransferTaskQueue +NNSi_GfdPopVramTransferTaskQueue: ; 0x020AEF3C + stmdb sp!, {r4,lr} + mov r4, r0 + bl IsVramTransferTaskQueueEmpty_ + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + ldrh r1, [r4, #0x8] + mov r0, r4 + bl GetNextIndex_ + strh r0, [r4, #0x8] + ldrh r1, [r4, #0xc] + mov r0, #0x1 + sub r1, r1, #0x1 + strh r1, [r4, #0xc] + ldmia sp!, {r4,pc} + arm_func_end NNSi_GfdPopVramTransferTaskQueue + + arm_func_start NNSi_GfdGetEndVramTransferTaskQueue +NNSi_GfdGetEndVramTransferTaskQueue: ; 0x020AEF78 + ldrh r1, [r0, #0xa] + ldr r0, [r0, #0x0] + add r0, r0, r1, lsl #0x4 + bx lr + arm_func_end NNSi_GfdGetEndVramTransferTaskQueue + + arm_func_start NNSi_GfdGetFrontVramTransferTaskQueue +NNSi_GfdGetFrontVramTransferTaskQueue: ; 0x020AEF88 + ldrh r1, [r0, #0x8] + ldr r0, [r0, #0x0] + add r0, r0, r1, lsl #0x4 + bx lr + arm_func_end NNSi_GfdGetFrontVramTransferTaskQueue + + arm_func_start NNSi_GfdPushVramTransferTaskQueue +NNSi_GfdPushVramTransferTaskQueue: ; 0x020AEF98 + stmdb sp!, {r4,lr} + mov r4, r0 + bl IsVramTransferTaskQueueFull_ + cmp r0, #0x0 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + ldrh r1, [r4, #0xa] + mov r0, r4 + bl GetNextIndex_ + strh r0, [r4, #0xa] + ldrh r1, [r4, #0xc] + mov r0, #0x1 + add r1, r1, #0x1 + strh r1, [r4, #0xc] + ldmia sp!, {r4,pc} + arm_func_end NNSi_GfdPushVramTransferTaskQueue + + arm_func_start ResetTaskQueue_ +ResetTaskQueue_: ; 0x020AEFD4 + mov r2, #0x0 + strh r2, [r0, #0xa] + ldrh r1, [r0, #0xa] + strh r1, [r0, #0x8] + strh r2, [r0, #0xc] + str r2, [r0, #0x10] + bx lr + arm_func_end ResetTaskQueue_ + + arm_func_start DoTransfer_ +DoTransfer_: ; 0x020AEFF0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r3, [r5, #0x0] + ldr r2, _020AF02C ; =transFunc$7934 + ldr r0, [r5, #0x4] + ldr r1, [r5, #0xc] + ldr r4, [r2, r3, lsl #0x2] + bl DC_FlushRange + ldr r0, [r5, #0x4] + ldr r1, [r5, #0x8] + ldr r2, [r5, #0xc] + blx r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020AF02C: .word transFunc$7934 + arm_func_end DoTransfer_ +DoTransfer2dObjCharSub: + ldr ip, _020AF038 ; =GXS_LoadOBJ + bx r12 + .balign 4 +_020AF038: .word GXS_LoadOBJ + arm_func_end DoTransfer2dObjCharSub + + arm_func_start DoTransfer2dObjOamSub +DoTransfer2dObjOamSub: ; 0x020AF03C + ldr ip, _020AF044 ; =GXS_LoadOAM + bx r12 + .balign 4 +_020AF044: .word GXS_LoadOAM + arm_func_end DoTransfer2dObjOamSub + + arm_func_start DoTransfer2dBGExtPlttSub +DoTransfer2dBGExtPlttSub: ; 0x020AF048 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GXS_BeginLoadBGExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GXS_LoadBGExtPltt + bl GXS_EndLoadBGExtPltt + ldmia sp!, {r4-r6,pc} + arm_func_end DoTransfer2dBGExtPlttSub + + arm_func_start DoTransfer2dObjExtPlttSub +DoTransfer2dObjExtPlttSub: ; 0x020AF074 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GXS_BeginLoadOBJExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GXS_LoadOBJExtPltt + bl GXS_EndLoadOBJExtPltt + ldmia sp!, {r4-r6,pc} + arm_func_end DoTransfer2dObjExtPlttSub + + arm_func_start DoTransfer2dBGPlttSub +DoTransfer2dBGPlttSub: ; 0x020AF0A0 + ldr ip, _020AF0A8 ; =GXS_LoadBGPltt + bx r12 + .balign 4 +_020AF0A8: .word GXS_LoadBGPltt + arm_func_end DoTransfer2dBGPlttSub + + arm_func_start DoTransfer2dObjPlttSub +DoTransfer2dObjPlttSub: ; 0x020AF0AC + ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt + bx r12 + .balign 4 +_020AF0B4: .word GXS_LoadOBJPltt + arm_func_end DoTransfer2dObjPlttSub + + arm_func_start DoTransfer2dBG3BmpSub +DoTransfer2dBG3BmpSub: ; 0x020AF0B8 + ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr + bx r12 + .balign 4 +_020AF0C0: .word GXS_LoadBG3Scr + arm_func_end DoTransfer2dBG3BmpSub + + arm_func_start DoTransfer2dBG2BmpSub +DoTransfer2dBG2BmpSub: ; 0x020AF0C4 + ldr ip, _020AF0CC ; =GXS_LoadBG2Scr + bx r12 + .balign 4 +_020AF0CC: .word GXS_LoadBG2Scr + arm_func_end DoTransfer2dBG2BmpSub + + arm_func_start DoTransfer2dBG3ScrSub +DoTransfer2dBG3ScrSub: ; 0x020AF0D0 + ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr + bx r12 + .balign 4 +_020AF0D8: .word GXS_LoadBG3Scr + arm_func_end DoTransfer2dBG3ScrSub + + arm_func_start DoTransfer2dBG2ScrSub +DoTransfer2dBG2ScrSub: ; 0x020AF0DC + ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr + bx r12 + .balign 4 +_020AF0E4: .word GXS_LoadBG2Scr + arm_func_end DoTransfer2dBG2ScrSub + + arm_func_start DoTransfer2dBG1ScrSub +DoTransfer2dBG1ScrSub: ; 0x020AF0E8 + ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr + bx r12 + .balign 4 +_020AF0F0: .word GXS_LoadBG1Scr + arm_func_end DoTransfer2dBG1ScrSub + + arm_func_start DoTransfer2dBG0ScrSub +DoTransfer2dBG0ScrSub: ; 0x020AF0F4 + ldr ip, _020AF0FC ; =GXS_LoadBG0Scr + bx r12 + .balign 4 +_020AF0FC: .word GXS_LoadBG0Scr + arm_func_end DoTransfer2dBG0ScrSub + + arm_func_start DoTransfer2dBG3CharSub +DoTransfer2dBG3CharSub: ; 0x020AF100 + ldr ip, _020AF108 ; =GXS_LoadBG3Char + bx r12 + .balign 4 +_020AF108: .word GXS_LoadBG3Char + arm_func_end DoTransfer2dBG3CharSub + + arm_func_start DoTransfer2dBG2CharSub +DoTransfer2dBG2CharSub: ; 0x020AF10C + ldr ip, _020AF114 ; =GXS_LoadBG2Char + bx r12 + .balign 4 +_020AF114: .word GXS_LoadBG2Char + arm_func_end DoTransfer2dBG2CharSub + + arm_func_start DoTransfer2dBG1CharSub +DoTransfer2dBG1CharSub: ; 0x020AF118 + ldr ip, _020AF120 ; =GXS_LoadBG1Char + bx r12 + .balign 4 +_020AF120: .word GXS_LoadBG1Char + arm_func_end DoTransfer2dBG1CharSub + + arm_func_start DoTransfer2dBG0CharSub +DoTransfer2dBG0CharSub: ; 0x020AF124 + ldr ip, _020AF12C ; =GXS_LoadBG0Char + bx r12 + .balign 4 +_020AF12C: .word GXS_LoadBG0Char + arm_func_end DoTransfer2dBG0CharSub + + arm_func_start DoTransfer2dObjCharMain +DoTransfer2dObjCharMain: ; 0x020AF130 + ldr ip, _020AF138 ; =GX_LoadOBJ + bx r12 + .balign 4 +_020AF138: .word GX_LoadOBJ + arm_func_end DoTransfer2dObjCharMain + + arm_func_start DoTransfer2dObjOamMain +DoTransfer2dObjOamMain: ; 0x020AF13C + ldr ip, _020AF144 ; =GX_LoadOAM + bx r12 + .balign 4 +_020AF144: .word GX_LoadOAM + arm_func_end DoTransfer2dObjOamMain + + arm_func_start DoTransfer2dBGExtPlttMain +DoTransfer2dBGExtPlttMain: ; 0x020AF148 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadBGExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadBGExtPltt + bl GX_EndLoadBGExtPltt + ldmia sp!, {r4-r6,pc} + arm_func_end DoTransfer2dBGExtPlttMain + + arm_func_start DoTransfer2dObjExtPlttMain +DoTransfer2dObjExtPlttMain: ; 0x020AF174 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadOBJExtPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadOBJExtPltt + bl GX_EndLoadOBJExtPltt + ldmia sp!, {r4-r6,pc} + arm_func_end DoTransfer2dObjExtPlttMain + + arm_func_start DoTransfer2dBGPlttMain +DoTransfer2dBGPlttMain: ; 0x020AF1A0 + ldr ip, _020AF1A8 ; =GX_LoadBGPltt + bx r12 + .balign 4 +_020AF1A8: .word GX_LoadBGPltt + arm_func_end DoTransfer2dBGPlttMain + + arm_func_start DoTransfer2dObjPlttMain +DoTransfer2dObjPlttMain: ; 0x020AF1AC + ldr ip, _020AF1B4 ; =GX_LoadOBJPltt + bx r12 + .balign 4 +_020AF1B4: .word GX_LoadOBJPltt + arm_func_end DoTransfer2dObjPlttMain + + arm_func_start DoTransfer2dBG3BmpMain +DoTransfer2dBG3BmpMain: ; 0x020AF1B8 + ldr ip, _020AF1C0 ; =GX_LoadBG3Scr + bx r12 + .balign 4 +_020AF1C0: .word GX_LoadBG3Scr + arm_func_end DoTransfer2dBG3BmpMain + + arm_func_start DoTransfer2dBG2BmpMain +DoTransfer2dBG2BmpMain: ; 0x020AF1C4 + ldr ip, _020AF1CC ; =GX_LoadBG2Scr + bx r12 + .balign 4 +_020AF1CC: .word GX_LoadBG2Scr + arm_func_end DoTransfer2dBG2BmpMain + + arm_func_start DoTransfer2dBG3ScrMain +DoTransfer2dBG3ScrMain: ; 0x020AF1D0 + ldr ip, _020AF1D8 ; =GX_LoadBG3Scr + bx r12 + .balign 4 +_020AF1D8: .word GX_LoadBG3Scr + arm_func_end DoTransfer2dBG3ScrMain + + arm_func_start DoTransfer2dBG2ScrMain +DoTransfer2dBG2ScrMain: ; 0x020AF1DC + ldr ip, _020AF1E4 ; =GX_LoadBG2Scr + bx r12 + .balign 4 +_020AF1E4: .word GX_LoadBG2Scr + arm_func_end DoTransfer2dBG2ScrMain + + arm_func_start DoTransfer2dBG1ScrMain +DoTransfer2dBG1ScrMain: ; 0x020AF1E8 + ldr ip, _020AF1F0 ; =GX_LoadBG1Scr + bx r12 + .balign 4 +_020AF1F0: .word GX_LoadBG1Scr + arm_func_end DoTransfer2dBG1ScrMain + + arm_func_start DoTransfer2dBG0ScrMain +DoTransfer2dBG0ScrMain: ; 0x020AF1F4 + ldr ip, _020AF1FC ; =GX_LoadBG0Scr + bx r12 + .balign 4 +_020AF1FC: .word GX_LoadBG0Scr + arm_func_end DoTransfer2dBG0ScrMain + + arm_func_start DoTransfer2dBG3CharMain +DoTransfer2dBG3CharMain: ; 0x020AF200 + ldr ip, _020AF208 ; =GX_LoadBG3Char + bx r12 + .balign 4 +_020AF208: .word GX_LoadBG3Char + arm_func_end DoTransfer2dBG3CharMain + + arm_func_start DoTransfer2dBG2CharMain +DoTransfer2dBG2CharMain: ; 0x020AF20C + ldr ip, _020AF214 ; =GX_LoadBG2Char + bx r12 + .balign 4 +_020AF214: .word GX_LoadBG2Char + arm_func_end DoTransfer2dBG2CharMain + + arm_func_start DoTransfer2dBG1CharMain +DoTransfer2dBG1CharMain: ; 0x020AF218 + ldr ip, _020AF220 ; =GX_LoadBG1Char + bx r12 + .balign 4 +_020AF220: .word GX_LoadBG1Char + arm_func_end DoTransfer2dBG1CharMain + + arm_func_start DoTransfer2dBG0CharMain +DoTransfer2dBG0CharMain: ; 0x020AF224 + ldr ip, _020AF22C ; =GX_LoadBG0Char + bx r12 + .balign 4 +_020AF22C: .word GX_LoadBG0Char + arm_func_end DoTransfer2dBG0CharMain + + arm_func_start DoTransfer3dClearImageDepth +DoTransfer3dClearImageDepth: ; 0x020AF230 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r2 + bl GX_BeginLoadClearImage + mov r0, r5 + mov r1, r4 + bl GX_LoadClearImageDepth + bl GX_EndLoadClearImage + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end DoTransfer3dClearImageDepth + + arm_func_start DoTransfer3dClearImageColor +DoTransfer3dClearImageColor: ; 0x020AF25C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r2 + bl GX_BeginLoadClearImage + mov r0, r5 + mov r1, r4 + bl GX_LoadClearImageColor + bl GX_EndLoadClearImage + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + arm_func_end DoTransfer3dClearImageColor + + arm_func_start DoTransfer3dTexPltt +DoTransfer3dTexPltt: ; 0x020AF288 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadTexPltt + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadTexPltt + bl GX_EndLoadTexPltt + ldmia sp!, {r4-r6,pc} + arm_func_end DoTransfer3dTexPltt + + arm_func_start DoTransfer3dTex +DoTransfer3dTex: ; 0x020AF2B4 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl GX_BeginLoadTex + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl GX_LoadTex + bl GX_EndLoadTex + ldmia sp!, {r4-r6,pc} + arm_func_end DoTransfer3dTex + + arm_func_start IsVramTransferTaskQueueEmpty_ +IsVramTransferTaskQueueEmpty_: ; 0x020AF2E0 + ldrh r0, [r0, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + arm_func_end IsVramTransferTaskQueueEmpty_ + + arm_func_start IsVramTransferTaskQueueFull_ +IsVramTransferTaskQueueFull_: ; 0x020AF2F4 + ldrh r1, [r0, #0xc] + ldr r0, [r0, #0x4] + cmp r1, r0 + moveq r0, #0x1 + movne r0, #0x0 + bx lr + arm_func_end IsVramTransferTaskQueueFull_ + + arm_func_start GetNextIndex_ +GetNextIndex_: ; 0x020AF30C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r0 + add r0, r1, #0x1 + ldr r1, [r2, #0x4] + bl _u32_div_f + mov r0, r1, lsl #0x10 + mov r0, r0, lsr #0x10 + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end GetNextIndex_ diff --git a/arm9/asm/NNS_GFD_gfdi_linkedlist.s b/arm9/asm/NNS_GFD_gfdi_linkedlist.s new file mode 100644 index 00000000..125a146e --- /dev/null +++ b/arm9/asm/NNS_GFD_gfdi_linkedlist.s @@ -0,0 +1,261 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_GfdFreeLnkVram +NNSi_GfdFreeLnkVram: ; 0x020AF334 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x10 + add r3, r2, r3 + str r2, [sp, #0x0] + str r2, [sp, #0x8] + str r3, [sp, #0x4] + str r3, [sp, #0xc] + ldr r3, [r0, #0x0] + add r12, sp, #0x0 + cmp r3, #0x0 + beq _020AF418 + mov r6, #0x0 +_020AF364: + ldr r5, [r3, #0x0] + ldr r4, [r12, #0x4] + ldr r2, [r3, #0xc] + cmp r5, r4 + bne _020AF3B8 + ldr r4, [r3, #0x4] + add r4, r5, r4 + str r4, [sp, #0xc] + ldr r4, [r3, #0x8] + cmp r4, #0x0 + strne r2, [r4, #0xc] + streq r2, [r0, #0x0] + cmp r2, #0x0 + strne r4, [r2, #0x8] + ldr r4, [r1, #0x0] + cmp r4, #0x0 + strne r3, [r4, #0x8] + ldr r4, [r1, #0x0] + str r4, [r3, #0xc] + str r6, [r3, #0x8] + str r3, [r1, #0x0] +_020AF3B8: + ldr r5, [r3, #0x0] + ldr lr, [r3, #0x4] + ldr r4, [r12, #0x0] + add lr, r5, lr + cmp r4, lr + bne _020AF40C + str r5, [sp, #0x8] + ldr r5, [r3, #0x8] + ldr r4, [r3, #0xc] + cmp r5, #0x0 + strne r4, [r5, #0xc] + streq r4, [r0, #0x0] + cmp r4, #0x0 + strne r5, [r4, #0x8] + ldr lr, [r1, #0x0] + cmp lr, #0x0 + strne r3, [lr, #0x8] + ldr lr, [r1, #0x0] + str lr, [r3, #0xc] + str r6, [r3, #0x8] + str r3, [r1, #0x0] +_020AF40C: + mov r3, r2 + cmp r2, #0x0 + bne _020AF364 +_020AF418: + ldr r4, [r1, #0x0] + cmp r4, #0x0 + ldrne r2, [r4, #0xc] + strne r2, [r1, #0x0] + cmp r4, #0x0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r2, [sp, #0x8] + mov r1, #0x0 + str r2, [r4, #0x0] + ldr r3, [sp, #0xc] + ldr r2, [sp, #0x8] + sub r2, r3, r2 + str r2, [r4, #0x4] + str r1, [r4, #0x8] + str r1, [r4, #0xc] + ldr r1, [r0, #0x0] + cmp r1, #0x0 + strne r4, [r1, #0x8] + ldr r2, [r0, #0x0] + mov r1, #0x0 + str r2, [r4, #0xc] + str r1, [r4, #0x8] + str r4, [r0, #0x0] + mov r0, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r6,pc} + arm_func_end NNSi_GfdFreeLnkVram + + arm_func_start NNSi_GfdAllocLnkVramAligned +NNSi_GfdAllocLnkVramAligned: ; 0x020AF488 + stmdb sp!, {r4-r10,lr} + ldr r4, [r0, #0x0] + ldr r9, [sp, #0x20] + cmp r4, #0x0 + mov r5, #0x0 + beq _020AF4EC + sub r12, r9, #0x1 + mvn lr, r12 +_020AF4A8: + cmp r9, #0x1 + ldrls r8, [r4, #0x0] + movls r6, r5 + movls r7, r3 + bls _020AF4D0 + ldr r7, [r4, #0x0] + add r6, r7, r12 + and r8, lr, r6 + sub r6, r8, r7 + add r7, r3, r6 +_020AF4D0: + ldr r10, [r4, #0x4] + cmp r10, r7 + movcs r5, r4 + bhs _020AF4EC + ldr r4, [r4, #0xc] + cmp r4, #0x0 + bne _020AF4A8 +_020AF4EC: + cmp r5, #0x0 + beq _020AF5B8 + cmp r6, #0x0 + beq _020AF54C + ldr r9, [r1, #0x0] + cmp r9, #0x0 + ldrne r3, [r9, #0xc] + strne r3, [r1, #0x0] + cmp r9, #0x0 + beq _020AF5B8 + ldr r4, [r5, #0x0] + mov r3, #0x0 + str r4, [r9, #0x0] + str r6, [r9, #0x4] + str r3, [r9, #0x8] + str r3, [r9, #0xc] + ldr r3, [r0, #0x0] + cmp r3, #0x0 + strne r9, [r3, #0x8] + ldr r4, [r0, #0x0] + mov r3, #0x0 + str r4, [r9, #0xc] + str r3, [r9, #0x8] + str r9, [r0, #0x0] +_020AF54C: + ldr r3, [r5, #0x4] + sub r3, r3, r7 + str r3, [r5, #0x4] + ldr r3, [r5, #0x0] + add r3, r3, r7 + str r3, [r5, #0x0] + ldr r3, [r5, #0x4] + cmp r3, #0x0 + bne _020AF5AC + ldr r4, [r5, #0x8] + ldr r3, [r5, #0xc] + cmp r4, #0x0 + strne r3, [r4, #0xc] + streq r3, [r0, #0x0] + cmp r3, #0x0 + strne r4, [r3, #0x8] + ldr r0, [r1, #0x0] + cmp r0, #0x0 + strne r5, [r0, #0x8] + ldr r3, [r1, #0x0] + mov r0, #0x0 + str r3, [r5, #0xc] + str r0, [r5, #0x8] + str r5, [r1, #0x0] +_020AF5AC: + str r8, [r2, #0x0] + mov r0, #0x1 + ldmia sp!, {r4-r10,pc} +_020AF5B8: + mov r0, #0x0 + str r0, [r2, #0x0] + ldmia sp!, {r4-r10,pc} + arm_func_end NNSi_GfdAllocLnkVramAligned + + arm_func_start NNSi_GfdAllocLnkVram +NNSi_GfdAllocLnkVram: ; 0x020AF5C4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, #0x0 + str r12, [sp, #0x0] + bl NNSi_GfdAllocLnkVramAligned + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNSi_GfdAllocLnkVram + + arm_func_start NNSi_GfdAddNewFreeBlock +NNSi_GfdAddNewFreeBlock: ; 0x020AF5E0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr lr, [r1, #0x0] + cmp lr, #0x0 + ldrne r12, [lr, #0xc] + strne r12, [r1, #0x0] + cmp lr, #0x0 + beq _020AF640 + str r2, [lr, #0x0] + str r3, [lr, #0x4] + mov r1, #0x0 + str r1, [lr, #0x8] + str r1, [lr, #0xc] + ldr r1, [r0, #0x0] + add sp, sp, #0x4 + cmp r1, #0x0 + strne lr, [r1, #0x8] + ldr r2, [r0, #0x0] + mov r1, #0x0 + str r2, [lr, #0xc] + str r1, [lr, #0x8] + str lr, [r0, #0x0] + mov r0, #0x1 + ldmia sp!, {pc} +_020AF640: + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + arm_func_end NNSi_GfdAddNewFreeBlock + + arm_func_start NNSi_GfdInitLnkVramBlockPool +NNSi_GfdInitLnkVramBlockPool: ; 0x020AF64C + stmdb sp!, {r4,lr} + subs lr, r1, #0x1 + mov r2, #0x0 + beq _020AF684 + mov r4, r0 +_020AF660: + add r12, r2, #0x1 + add r2, r0, r2, lsl #0x4 + add r3, r0, r12, lsl #0x4 + str r3, [r2, #0xc] + str r4, [r3, #0x8] + mov r2, r12 + cmp r12, lr + add r4, r4, #0x10 + blo _020AF660 +_020AF684: + mov r2, #0x0 + str r2, [r0, #0x8] + add r1, r0, r1, lsl #0x4 + str r2, [r1, #-0x4] + ldmia sp!, {r4,pc} + arm_func_end NNSi_GfdInitLnkVramBlockPool + + arm_func_start NNSi_GfdInitLnkVramMan +NNSi_GfdInitLnkVramMan: ; 0x020AF698 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + arm_func_end NNSi_GfdInitLnkVramMan diff --git a/arm9/asm/NNS_SND_capture.s b/arm9/asm/NNS_SND_capture.s new file mode 100644 index 00000000..a4e04212 --- /dev/null +++ b/arm9/asm/NNS_SND_capture.s @@ -0,0 +1,680 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sIsThreadCreated +sIsThreadCreated: ; 0x021D27A4 + .space 0x4 + + .global sCurEffectInfo +sCurEffectInfo: ; 0x021D27A8 + .space 0x4 + + .global sMesgQ +sMesgQ: ; 0x021D27AC + .space 0x20 + + .global sCapParam +sCapParam: ; 0x021D27CC + .space 0x54 + + .global sEffectInfoBuffer +sEffectInfoBuffer: ; 0x021D2820 + .space 0xa0 + + .section .text + + local_arm_func_start AlarmCallback +AlarmCallback: ; 0x020C177C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + ldr r4, [r7, #0x18] + ldr r0, [r7, #0x1c] + ldr r1, _020C186C ; =sIsThreadCreated + mul r0, r4, r0 + ldr r3, [r7, #0xc] + ldr r2, [r7, #0x10] + ldr r1, [r1, #0x0] + add r6, r3, r0 + cmp r1, #0x0 + add r5, r2, r0 + beq _020C180C + ldr r2, _020C1870 ; =sCurEffectInfo + mov r1, #0x14 + ldr r2, [r2, #0x0] + ldr r3, _020C1874 ; =sEffectInfoBuffer + mul r1, r2, r1 + str r7, [r3, r1] + add r1, r3, r1 + str r4, [r1, #0x4] + str r0, [r1, #0x8] + str r6, [r1, #0xc] + ldr r0, _020C1878 ; =sMesgQ + mov r2, #0x0 + str r5, [r1, #0x10] + bl OS_SendMessage + ldr r0, _020C1870 ; =sCurEffectInfo + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + cmp r1, #0x8 + movge r1, #0x0 + strge r1, [r0, #0x0] + b _020C1844 +_020C180C: + mov r0, r6 + mov r1, r4 + bl DC_InvalidateRange + mov r0, r5 + mov r1, r4 + bl DC_InvalidateRange + ldr r1, [r7, #0x38] + mov r0, r6 + str r1, [sp, #0x0] + ldr r3, [r7, #0x8] + ldr r6, [r7, #0x34] + mov r1, r5 + mov r2, r4 + blx r6 +_020C1844: + ldr r0, [r7, #0x1c] + add r0, r0, #0x1 + str r0, [r7, #0x1c] + ldr r1, [r7, #0x1c] + ldr r0, [r7, #0x30] + cmp r1, r0 + movge r0, #0x0 + strge r0, [r7, #0x1c] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C186C: .word sIsThreadCreated +_020C1870: .word sCurEffectInfo +_020C1874: .word sEffectInfoBuffer +_020C1878: .word sMesgQ + + arm_func_start NNSi_SndCaptureEndSleep +NNSi_SndCaptureEndSleep: ; 0x020C187C + stmdb sp!, {r4,lr} + ldr r4, _020C18F4 ; =sCapParam + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + mov r0, #0x0 + str r0, [r4, #0x1c] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x14] + bl MIi_CpuClear32 + ldr r1, [r4, #0x10] + ldr r2, [r4, #0x14] + mov r0, #0x0 + bl MIi_CpuClear32 + ldr r0, [r4, #0xc] + ldr r1, [r4, #0x14] + bl DC_FlushRange + ldr r0, [r4, #0x10] + ldr r1, [r4, #0x14] + bl DC_FlushRange + ldr r1, [r4, #0x2c] + mov r3, #0x0 + cmp r1, #0x0 + movge r0, #0x1 + movge r2, r0, lsl r1 + ldr r0, [r4, #0x24] + ldr r1, [r4, #0x28] + movlt r2, #0x0 + bl SND_StartTimer + ldmia sp!, {r4,pc} + .balign 4 +_020C18F4: .word sCapParam + + arm_func_start NNSi_SndCaptureBeginSleep +NNSi_SndCaptureBeginSleep: ; 0x020C18F8 + stmdb sp!, {r4,lr} + ldr r3, _020C194C ; =sCapParam + ldr r0, [r3, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r1, [r3, #0x2c] + cmp r1, #0x0 + movge r0, #0x1 + movge r2, r0, lsl r1 + ldr r0, [r3, #0x24] + ldr r1, [r3, #0x28] + movlt r2, #0x0 + mov r3, #0x0 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + .balign 4 +_020C194C: .word sCapParam + + arm_func_start NNSi_SndCaptureStop +NNSi_SndCaptureStop: ; 0x020C1950 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020C1A3C ; =sCapParam + ldr r0, [r4, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + ldr r1, [r4, #0x2c] + mov r3, #0x0 + cmp r1, #0x0 + movge r7, #0x1 + movlt r7, #0x0 + cmp r7, #0x0 + movne r0, #0x1 + movne r2, r0, lsl r1 + ldr r0, [r4, #0x24] + ldr r1, [r4, #0x28] + moveq r2, #0x0 + bl SND_StopTimer + cmp r7, #0x0 + beq _020C19DC + bl SND_GetCurrentCommandTag + mov r5, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r5 + bl SND_WaitForCommandProc + ldr r6, _020C1A40 ; =sMesgQ + mov r5, #0x0 +_020C19C4: + mov r0, r6 + mov r1, r5 + mov r2, r5 + bl OS_ReceiveMessage + cmp r0, #0x0 + bne _020C19C4 +_020C19DC: + ldr r0, [r4, #0x28] + cmp r0, #0x0 + beq _020C19EC + bl NNS_SndUnlockCapture +_020C19EC: + ldr r0, [r4, #0x20] + cmp r0, #0x0 + beq _020C19FC + bl NNS_SndUnlockChannel +_020C19FC: + cmp r7, #0x0 + beq _020C1A0C + ldr r0, [r4, #0x2c] + bl NNS_SndFreeAlarm +_020C1A0C: + ldr r0, [r4, #0x4] + cmp r0, #0x1 + bne _020C1A2C + mov r0, #0x0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl SND_SetOutputSelector +_020C1A2C: + mov r0, #0x0 + str r0, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C1A3C: .word sCapParam +_020C1A40: .word sMesgQ + + arm_func_start NNSi_SndCaptureStart +NNSi_SndCaptureStart: ; 0x020C1A44 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x3c + mov r10, r3 + str r0, [sp, #0x18] + str r2, [sp, #0x20] + mov r2, #0x0 + str r1, [sp, #0x1c] + mov r0, r1 + mov r1, r10 + ldr r9, [sp, #0x6c] + ldr r8, [sp, #0x74] + str r2, [sp, #0x2c] + mvn r6, #0x0 + ldr r4, _020C1D90 ; =sCapParam + bl DC_FlushRange + ldr r0, [sp, #0x20] + mov r1, r10 + bl DC_FlushRange + ldr r0, [sp, #0x60] + ldr r1, [sp, #0x70] + cmp r0, #0x1 + moveq r7, #0x1 + ldr r0, _020C1D94 ; =0x00FFB0FF + movne r7, #0x0 + bl _s32_div_f + ldr r1, [sp, #0x84] + mov r11, r0 + cmp r1, #0x0 + beq _020C1B00 + add r1, r11, #0x10 + bic r11, r1, #0x1f + mov r2, r11, asr #0x5 + mov r0, r10 + cmp r7, #0x0 + ldr r1, [sp, #0x80] + moveq r0, r10, lsr #0x1 + str r2, [sp, #0x34] + bl _u32_div_f + ldr r1, [sp, #0x34] + mov r5, #0x20 + mul r0, r1, r0 + str r0, [sp, #0x30] + cmp r7, #0x0 + ldr r0, [sp, #0x34] + moveq r5, r5, lsr #0x1 + mul r0, r5, r0 + mov r5, r0 +_020C1B00: + cmp r7, #0x0 + movne r0, #0x0 + strne r0, [sp, #0x28] + moveq r0, #0x1 + streq r0, [sp, #0x28] + cmp r7, #0x0 + movne r0, #0x1 + strne r0, [sp, #0x24] + moveq r0, #0x0 + streq r0, [sp, #0x24] + ldr r0, [sp, #0x18] + cmp r0, #0x2 + movne r0, #0xa + strne r0, [sp, #0x2c] + ldr r0, [sp, #0x84] + cmp r0, #0x0 + beq _020C1B58 + bl NNS_SndAllocAlarm + movs r6, r0 + addmi sp, sp, #0x3c + movmi r0, #0x0 + ldmmiia sp!, {r4-r11,pc} +_020C1B58: + mov r0, #0x3 + bl NNS_SndLockCapture + cmp r0, #0x0 + bne _020C1B84 + cmp r6, #0x0 + blt _020C1B78 + mov r0, r6 + bl NNS_SndFreeAlarm +_020C1B78: + add sp, sp, #0x3c + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020C1B84: + mov r0, #0xa + bl NNS_SndLockChannel + cmp r0, #0x0 + bne _020C1BB8 + cmp r6, #0x0 + blt _020C1BA4 + mov r0, r6 + bl NNS_SndFreeAlarm +_020C1BA4: + mov r0, #0x3 + bl NNS_SndUnlockCapture + add sp, sp, #0x3c + mov r0, #0x0 + ldmia sp!, {r4-r11,pc} +_020C1BB8: + mov r0, #0x0 + mov r7, r10, lsr #0x2 + str r0, [sp, #0x0] + str r7, [sp, #0x4] + str r8, [sp, #0x8] + str r0, [sp, #0xc] + cmp r9, #0x0 + movne r3, #0x1 + ldr r1, [sp, #0x78] + str r11, [sp, #0x10] + str r1, [sp, #0x14] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x1c] + moveq r3, #0x2 + mov r0, #0x1 + bl SND_SetupChannelPcm + ldr r1, [sp, #0x64] + str r9, [sp, #0x0] + str r1, [sp, #0x4] + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x24] + str r0, [sp, #0x8] + ldr r2, [sp, #0x1c] + mov r0, #0x0 + mov r3, r7 + bl SND_SetupCapture + mov r0, #0x0 + str r0, [sp, #0x0] + str r7, [sp, #0x4] + str r8, [sp, #0x8] + str r0, [sp, #0xc] + cmp r9, #0x0 + movne r3, #0x1 + ldr r2, [sp, #0x7c] + str r11, [sp, #0x10] + str r2, [sp, #0x14] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x20] + moveq r3, #0x2 + mov r0, #0x3 + bl SND_SetupChannelPcm + ldr r2, [sp, #0x64] + str r9, [sp, #0x0] + str r2, [sp, #0x4] + ldr r0, [sp, #0x68] + ldr r1, [sp, #0x24] + str r0, [sp, #0x8] + ldr r2, [sp, #0x20] + mov r3, r7 + mov r0, #0x1 + bl SND_SetupCapture + cmp r6, #0x0 + blt _020C1CA8 + ldr r2, [sp, #0x30] + ldr r3, _020C1D98 ; =AlarmCallback + mov r1, r2 + mov r0, r6 + add r1, r1, r5 + str r4, [sp, #0x0] + bl SND_SetupAlarm +_020C1CA8: + ldr r0, [sp, #0x18] + cmp r0, #0x1 + bne _020C1CC8 + mov r0, #0x1 + mov r2, r0 + mov r3, r0 + mov r1, #0x2 + bl SND_SetOutputSelector +_020C1CC8: + cmp r6, #0x0 + movge r0, #0x1 + movge r2, r0, lsl r6 + ldr r0, [sp, #0x2c] + movlt r2, #0x0 + mov r1, #0x3 + mov r3, #0x0 + bl SND_StartTimer + mov r0, #0x1 + str r0, [r4, #0x0] + ldr r0, [sp, #0x18] + ldr r1, [sp, #0x80] + str r0, [r4, #0x4] + mov r0, #0xa + str r0, [r4, #0x20] + ldr r0, [sp, #0x2c] + str r0, [r4, #0x24] + mov r0, #0x3 + str r0, [r4, #0x28] + ldr r0, [sp, #0x60] + str r6, [r4, #0x2c] + str r0, [r4, #0x8] + ldr r0, [sp, #0x1c] + str r0, [r4, #0xc] + ldr r0, [sp, #0x20] + str r0, [r4, #0x10] + mov r0, r10 + str r10, [r4, #0x14] + bl _u32_div_f + str r0, [r4, #0x18] + mov r1, #0x0 + str r1, [r4, #0x1c] + ldr r0, [sp, #0x80] + ldr r1, [sp, #0x84] + str r0, [r4, #0x30] + ldr r0, [sp, #0x88] + str r1, [r4, #0x34] + str r0, [r4, #0x38] + add r0, r4, #0x3c + str r8, [r4, #0x50] + bl NNSi_SndFaderInit + add r0, r4, #0x3c + mov r1, r8, lsl #0x8 + mov r2, #0x1 + bl NNSi_SndFaderSet + mov r0, #0x0 + str r0, [r4, #0x4c] + mov r0, #0x1 + add sp, sp, #0x3c + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C1D90: .word sCapParam +_020C1D94: .word 0x00FFB0FF +_020C1D98: .word AlarmCallback + + arm_func_start NNSi_SndCaptureMain +NNSi_SndCaptureMain: ; 0x020C1D9C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + ldr r5, _020C1E34 ; =sCapParam + ldr r0, [r5, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r0, [r5, #0x4] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r5,pc} + add r4, r5, #0x3c + mov r0, r4 + bl NNSi_SndFaderUpdate + ldr r0, [r5, #0x4c] + cmp r0, #0x0 + beq _020C1DFC + mov r0, r4 + bl NNSi_SndFaderIsFinished + cmp r0, #0x0 + beq _020C1DFC + bl NNSi_SndCaptureStop + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} +_020C1DFC: + mov r0, r4 + bl NNSi_SndFaderGet + ldr r1, [r5, #0x50] + mov r4, r0, asr #0x8 + cmp r4, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r0, [r5, #0x24] + mov r1, r4 + mov r2, #0x0 + bl SND_SetChannelVolume + str r4, [r5, #0x50] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C1E34: .word sCapParam + + arm_func_start NNSi_SndCaptureInit +NNSi_SndCaptureInit: ; 0x020C1E38 + ldr r1, _020C1E50 ; =sIsThreadCreated + mov r2, #0x0 + ldr r0, _020C1E54 ; =sCapParam + str r2, [r1, #0x0] + str r2, [r0, #0x0] + bx lr + .balign 4 +_020C1E50: .word sIsThreadCreated +_020C1E54: .word sCapParam + + arm_func_start NNS_SndCaptureIsActive +NNS_SndCaptureIsActive: ; 0x020C1E58 + ldr r0, _020C1E64 ; =sCapParam + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020C1E64: .word sCapParam + + arm_func_start NNS_SndCaptureStopEffect +NNS_SndCaptureStopEffect: ; 0x020C1E68 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C1EA0 ; =sCapParam + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x4] + cmp r0, #0x1 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + bl NNSi_SndCaptureStop + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C1EA0: .word sCapParam + + arm_func_start NNS_SndCaptureStartEffect +NNS_SndCaptureStartEffect: ; 0x020C1EA4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r5, r0 + mov r4, r1 + mov r7, r2 + mov r6, r3 + bl NNS_SndCaptureStopEffect + ldr r0, _020C1F50 ; =sCapParam + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x2c + movne r0, #0x0 + ldmneia sp!, {r4-r7,pc} + mov r1, r5 + mov r2, r4 + mov r0, #0x0 + bl MIi_CpuClear32 + mov r0, r5 + mov r1, r4 + bl DC_FlushRange + str r7, [sp, #0x0] + mov r2, #0x0 + str r2, [sp, #0x4] + str r2, [sp, #0x8] + mov r0, #0x1 + str r0, [sp, #0xc] + str r6, [sp, #0x10] + mov r1, #0x7f + str r1, [sp, #0x14] + str r2, [sp, #0x18] + ldr r2, [sp, #0x40] + str r1, [sp, #0x1c] + ldr r1, [sp, #0x44] + str r2, [sp, #0x20] + ldr r12, [sp, #0x48] + str r1, [sp, #0x24] + mov r1, r5 + mov r3, r4, lsr #0x1 + add r2, r5, r4, lsr #0x1 + str r12, [sp, #0x28] + bl NNSi_SndCaptureStart + add sp, sp, #0x2c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C1F50: .word sCapParam + + arm_func_start NNS_SndCaptureStopReverb +NNS_SndCaptureStopReverb: ; 0x020C1F54 + stmdb sp!, {r4,lr} + ldr r4, _020C1FA0 ; =sCapParam + mov r2, r0 + ldr r0, [r4, #0x0] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r0, [r4, #0x4] + cmp r0, #0x0 + ldmneia sp!, {r4,pc} + cmp r2, #0x0 + bne _020C1F88 + bl NNSi_SndCaptureStop + ldmia sp!, {r4,pc} +_020C1F88: + add r0, r4, #0x3c + mov r1, #0x0 + bl NNSi_SndFaderSet + mov r0, #0x1 + str r0, [r4, #0x4c] + ldmia sp!, {r4,pc} + .balign 4 +_020C1FA0: .word sCapParam + + arm_func_start NNS_SndCaptureSetReverbVolume +NNS_SndCaptureSetReverbVolume: ; 0x020C1FA4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, _020C1FEC ; =sCapParam + mov r12, r0 + ldr r0, [r3, #0x0] + mov r2, r1 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r3, #0x4] + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + add r0, r3, #0x3c + mov r1, r12, lsl #0x8 + bl NNSi_SndFaderSet + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C1FEC: .word sCapParam + + arm_func_start NNS_SndCaptureStartReverb +NNS_SndCaptureStartReverb: ; 0x020C1FF0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x2c + mov r5, r0 + mov r0, #0x0 + mov r4, r1 + mov r7, r2 + mov r6, r3 + bl NNS_SndCaptureStopReverb + ldr r0, _020C2098 ; =sCapParam + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addne sp, sp, #0x2c + movne r0, #0x0 + ldmneia sp!, {r4-r7,pc} + mov r1, r5 + mov r2, r4 + mov r0, #0x0 + bl MIi_CpuClear32 + mov r0, r5 + mov r1, r4 + bl DC_FlushRange + str r7, [sp, #0x0] + mov r0, #0x0 + str r0, [sp, #0x4] + str r0, [sp, #0x8] + mov r1, #0x1 + str r1, [sp, #0xc] + ldr r1, [sp, #0x40] + str r6, [sp, #0x10] + str r1, [sp, #0x14] + str r0, [sp, #0x18] + mov r1, #0x7f + str r1, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + mov r1, r5 + mov r3, r4, lsr #0x1 + add r2, r5, r4, lsr #0x1 + str r0, [sp, #0x28] + bl NNSi_SndCaptureStart + add sp, sp, #0x2c + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C2098: .word sCapParam diff --git a/arm9/asm/NNS_SND_fader.s b/arm9/asm/NNS_SND_fader.s new file mode 100644 index 00000000..938456a9 --- /dev/null +++ b/arm9/asm/NNS_SND_fader.s @@ -0,0 +1,63 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_SndFaderIsFinished +NNSi_SndFaderIsFinished: ; 0x020C3DDC + ldr r1, [r0, #0x8] + ldr r0, [r0, #0xc] + cmp r1, r0 + movge r0, #0x1 + movlt r0, #0x0 + bx lr + + arm_func_start NNSi_SndFaderUpdate +NNSi_SndFaderUpdate: ; 0x020C3DF4 + ldr r2, [r0, #0x8] + ldr r1, [r0, #0xc] + cmp r2, r1 + addlt r1, r2, #0x1 + strlt r1, [r0, #0x8] + bx lr + + arm_func_start NNSi_SndFaderGet +NNSi_SndFaderGet: ; 0x020C3E0C + stmdb sp!, {r4,lr} + ldr r1, [r0, #0xc] + ldr r2, [r0, #0x8] + cmp r2, r1 + ldrge r0, [r0, #0x4] + ldmgeia sp!, {r4,pc} + ldr r4, [r0, #0x0] + ldr r0, [r0, #0x4] + sub r0, r0, r4 + mul r0, r2, r0 + bl _s32_div_f + add r0, r4, r0 + ldmia sp!, {r4,pc} + + arm_func_start NNSi_SndFaderSet +NNSi_SndFaderSet: ; 0x020C3E40 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r5, r1 + mov r4, r2 + bl NNSi_SndFaderGet + str r0, [r6, #0x0] + str r5, [r6, #0x4] + str r4, [r6, #0xc] + mov r0, #0x0 + str r0, [r6, #0x8] + ldmia sp!, {r4-r6,pc} + + arm_func_start NNSi_SndFaderInit +NNSi_SndFaderInit: ; 0x020C3E6C + mov r2, #0x0 + str r2, [r0, #0x4] + ldr r1, [r0, #0x4] + str r1, [r0, #0x0] + str r2, [r0, #0xc] + ldr r1, [r0, #0xc] + str r1, [r0, #0x8] + bx lr diff --git a/arm9/asm/NNS_SND_heap.s b/arm9/asm/NNS_SND_heap.s new file mode 100644 index 00000000..554c6bab --- /dev/null +++ b/arm9/asm/NNS_SND_heap.s @@ -0,0 +1,282 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start EraseSync +EraseSync: ; 0x020C2774 + stmdb sp!, {r4,lr} + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start NewSection +NewSection: ; 0x020C2794 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x0] + mov r1, #0x14 + mov r2, #0x4 + bl NNS_FndAllocFromFrmHeapEx + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + bl InitHeapSection + mov r1, r4 + add r0, r5, #0x4 + bl NNS_FndAppendListObject + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start InitHeap +InitHeap: ; 0x020C27DC + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + add r0, r5, #0x4 + mov r1, #0xc + bl NNS_FndInitList + mov r0, r5 + str r4, [r5, #0x0] + bl NewSection + cmp r0, #0x0 + movne r0, #0x1 + moveq r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start InitHeapSection +InitHeapSection: ; 0x020C2818 + ldr ip, _020C2824 ; =NNS_FndInitList + mov r1, #0x0 + bx r12 + .balign 4 +_020C2824: .word NNS_FndInitList + + arm_func_start NNS_SndHeapLoadState +NNS_SndHeapLoadState: ; 0x020C2828 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x4 + mov r7, #0x0 + movs r9, r1 + mov r10, r0 + mov r6, r7 + bne _020C2850 + bl NNS_SndHeapClear + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} +_020C2850: + ldrh r0, [r10, #0xc] + cmp r9, r0 + bge _020C28D8 + mov r11, r7 + add r5, r10, #0x4 + mov r4, #0x1 +_020C2868: + mov r0, r5 + mov r1, r11 + bl NNS_FndGetPrevListObject + mov r1, r7 + mov r8, r0 + bl NNS_FndGetPrevListObject + movs r7, r0 + beq _020C28C0 +_020C2888: + ldr r12, [r7, #0xc] + cmp r12, #0x0 + beq _020C28AC + ldr r1, [r7, #0x8] + ldr r2, [r7, #0x10] + ldr r3, [r7, #0x14] + add r0, r7, #0x20 + blx r12 + mov r6, r4 +_020C28AC: + mov r0, r8 + mov r1, r7 + bl NNS_FndGetPrevListObject + movs r7, r0 + bne _020C2888 +_020C28C0: + mov r0, r5 + mov r1, r8 + bl NNS_FndRemoveListObject + ldrh r0, [r10, #0xc] + cmp r9, r0 + blt _020C2868 +_020C28D8: + ldr r0, [r10, #0x0] + mov r1, r9 + bl NNS_FndFreeByStateToFrmHeap + cmp r6, #0x0 + beq _020C28F0 + bl EraseSync +_020C28F0: + ldrh r1, [r10, #0xc] + ldr r0, [r10, #0x0] + bl NNS_FndRecordStateForFrmHeap + mov r0, r10 + bl NewSection + add sp, sp, #0x4 + ldmia sp!, {r4-r11,pc} + + arm_func_start NNS_SndHeapSaveState +NNS_SndHeapSaveState: ; 0x020C290C + stmdb sp!, {r4,lr} + mov r4, r0 + ldrh r1, [r4, #0xc] + ldr r0, [r4, #0x0] + bl NNS_FndRecordStateForFrmHeap + cmp r0, #0x0 + mvneq r0, #0x0 + ldmeqia sp!, {r4,pc} + mov r0, r4 + bl NewSection + cmp r0, #0x0 + ldrneh r0, [r4, #0xc] + subne r0, r0, #0x1 + ldmneia sp!, {r4,pc} + ldr r0, [r4, #0x0] + mov r1, #0x0 + bl NNS_FndFreeByStateToFrmHeap + mvn r0, #0x0 + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndHeapAlloc +NNS_SndHeapAlloc: ; 0x020C2958 + stmdb sp!, {r4-r8,lr} + mov r7, r1 + mov r8, r0 + add r0, r7, #0x1f + bic r1, r0, #0x1f + mov r6, r2 + ldr r0, [r8, #0x0] + add r1, r1, #0x20 + mov r2, #0x20 + mov r5, r3 + bl NNS_FndAllocFromFrmHeapEx // some allocator? + movs r4, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + add r0, r8, #0x4 + mov r1, #0x0 + bl NNS_FndGetPrevListObject + str r7, [r4, #0x8] + str r6, [r4, #0xc] + ldr r2, [sp, #0x18] + str r5, [r4, #0x10] + mov r1, r4 + str r2, [r4, #0x14] + bl NNS_FndAppendListObject + add r0, r4, #0x20 + ldmia sp!, {r4-r8,pc} + + arm_func_start NNS_SndHeapClear +NNS_SndHeapClear: ; 0x020C29C0 + stmdb sp!, {r4-r10,lr} + mov r8, r0 + mov r5, #0x0 + mov r1, r5 + add r0, r8, #0x4 + bl NNS_FndGetPrevListObject + movs r7, r0 + beq _020C2A58 + add r9, r8, #0x4 + mov r10, #0x1 + mov r4, r5 +_020C29EC: + mov r0, r7 + mov r1, r4 + bl NNS_FndGetPrevListObject + movs r6, r0 + beq _020C2A38 +_020C2A00: + ldr r12, [r6, #0xc] + cmp r12, #0x0 + beq _020C2A24 + ldr r1, [r6, #0x8] + ldr r2, [r6, #0x10] + ldr r3, [r6, #0x14] + add r0, r6, #0x20 + blx r12 + mov r5, r10 +_020C2A24: + mov r0, r7 + mov r1, r6 + bl NNS_FndGetPrevListObject + movs r6, r0 + bne _020C2A00 +_020C2A38: + mov r0, r9 + mov r1, r7 + bl NNS_FndRemoveListObject + mov r0, r9 + mov r1, r4 + bl NNS_FndGetPrevListObject + movs r7, r0 + bne _020C29EC +_020C2A58: + ldr r0, [r8, #0x0] + mov r1, #0x3 + bl NNS_FndFreeToFrmHeap + cmp r5, #0x0 + beq _020C2A70 + bl EraseSync +_020C2A70: + mov r0, r8 + bl NewSection + ldmia sp!, {r4-r10,pc} + + arm_func_start NNS_SndHeapDestroy +NNS_SndHeapDestroy: ; 0x020C2A7C + stmdb sp!, {r4,lr} + mov r4, r0 + bl NNS_SndHeapClear + ldr r0, [r4, #0x0] + bl NNS_FndDestroyFrmHeap + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndHeapCreate +NNS_SndHeapCreate: ; 0x020C2A94 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + add r2, r0, #0x3 + add r0, r0, r1 + bic r5, r2, #0x3 + cmp r5, r0 + addhi sp, sp, #0x4 + movhi r0, #0x0 + ldmhiia sp!, {r4-r5,pc} + sub r1, r0, r5 + cmp r1, #0x10 + addcc sp, sp, #0x4 + movcc r0, #0x0 + ldmccia sp!, {r4-r5,pc} + add r0, r5, #0x10 + sub r1, r1, #0x10 + mov r2, #0x0 + bl NNS_FndCreateFrmHeapEx + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + mov r0, r5 + mov r1, r4 + bl InitHeap + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, r5 + ldmneia sp!, {r4-r5,pc} + mov r0, r4 + bl NNS_FndDestroyFrmHeap + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} diff --git a/arm9/asm/NNS_SND_main.s b/arm9/asm/NNS_SND_main.s new file mode 100644 index 00000000..4cbe3d65 --- /dev/null +++ b/arm9/asm/NNS_SND_main.s @@ -0,0 +1,125 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sCurDriverInfo +sCurDriverInfo: ; 0x021D1C8C + .space 0x4 + + .global sDriverInfoFirstFlag +sDriverInfoFirstFlag: ; 0x021D1C90 + .space 0x4 + + .global initialized$8127 +initialized$8127: ; 0x021D1C94 + .space 0x4 + + .global sPreSleepCallback +sPreSleepCallback: ; 0x021D1C98 + .space 0xc + + .global sPostSleepCallback +sPostSleepCallback: ; 0x021D1CA4 + .space 0xc + + .section .text + + local_arm_func_start EndSleep +EndSleep: ; 0x020C0130 + ldr ip, _020C0138 ; =NNSi_SndCaptureEndSleep + bx r12 + .balign 4 +_020C0138: .word NNSi_SndCaptureEndSleep + + local_arm_func_start BeginSleep +BeginSleep: ; 0x020C013C + stmdb sp!, {r4,lr} + bl NNSi_SndCaptureBeginSleep + mov r0, #0x0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndSetMonoFlag +NNS_SndSetMonoFlag: ; 0x020C0174 + stmdb sp!, {lr} + sub sp, sp, #0x4 + cmp r0, #0x0 + beq _020C0194 + mov r0, #0x40 + bl SND_SetMasterPan + add sp, sp, #0x4 + ldmia sp!, {pc} +_020C0194: + bl SND_ResetMasterPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndMain +NNS_SndMain: ; 0x020C01A0 + stmdb sp!, {r4,lr} + mov r4, #0x0 +_020C01A8: + mov r0, r4 + bl SND_RecvCommandReply + cmp r0, #0x0 + bne _020C01A8 + bl NNSi_SndPlayerMain + bl NNSi_SndCaptureMain + bl NNSi_SndArcStrmMain + mov r0, #0x0 + bl SND_FlushCommand + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndInit +NNS_SndInit: ; 0x020C01D0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, _020C0254 ; =initialized$8127 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + mov r1, #0x1 + str r1, [r0, #0x0] + bl SND_Init + ldr ip, _020C0258 ; =BeginSleep + ldr r0, _020C025C ; =sPreSleepCallback + mov r3, #0x0 + ldr r1, _020C0260 ; =sPostSleepCallback + ldr r2, _020C0264 ; =EndSleep + str r12, [r0, #0x0] + str r3, [r0, #0x4] + str r2, [r1, #0x0] + str r3, [r1, #0x4] + bl PM_PrependPreSleepCallback + ldr r0, _020C0260 ; =sPostSleepCallback + bl PM_AppendPostSleepCallback + bl NNSi_SndInitResourceMgr + bl NNSi_SndCaptureInit + bl NNSi_SndPlayerInit + ldr r1, _020C0268 ; =sCurDriverInfo + mvn r3, #0x0 + ldr r0, _020C026C ; =sDriverInfoFirstFlag + mov r2, #0x1 + strb r3, [r1, #0x0] + str r2, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {pc} + .balign 4 +_020C0254: .word initialized$8127 +_020C0258: .word BeginSleep +_020C025C: .word sPreSleepCallback +_020C0260: .word sPostSleepCallback +_020C0264: .word EndSleep +_020C0268: .word sCurDriverInfo +_020C026C: .word sDriverInfoFirstFlag diff --git a/arm9/asm/NNS_SND_player.s b/arm9/asm/NNS_SND_player.s new file mode 100644 index 00000000..caaf345e --- /dev/null +++ b/arm9/asm/NNS_SND_player.s @@ -0,0 +1,877 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sFreeList +sFreeList: ; 0x021D1DFC + .space 0xc + + .global sPrioList +sPrioList: ; 0x021D1E08 + .space 0xc + + .global sSeqPlayer +sSeqPlayer: ; 0x021D1E14 + .space 0x440 + + .global sPlayer +sPlayer: ; 0x021D2254 + .space 0x480 + + .section .text + + arm_func_start SetPlayerPriority +SetPlayerPriority: ; 0x020C06CC + stmdb sp!, {r4-r6,lr} + mov r6, r0 + ldr r4, [r6, #0x4] + mov r5, r1 + cmp r4, #0x0 + beq _020C06F8 + mov r0, r4 + mov r1, r6 + bl NNS_FndRemoveListObject + mov r0, #0x0 + str r0, [r6, #0x4] +_020C06F8: + ldr r0, _020C0728 ; =sPrioList + mov r1, r6 + bl NNS_FndRemoveListObject + strb r5, [r6, #0x3d] + cmp r4, #0x0 + beq _020C071C + mov r0, r4 + mov r1, r6 + bl InsertPlayerList +_020C071C: + mov r0, r6 + bl InsertPrioList + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C0728: .word sPrioList + + arm_func_start PlayerHeapDisposeCallback +PlayerHeapDisposeCallback: ; 0x020C072C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + bl NNS_SndHeapDestroy + ldr r1, [r4, #0xc] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x8] + ldmneia sp!, {r4,pc} + ldr r1, [r4, #0x10] + ldr r2, _020C0778 ; =sPlayer + mov r0, #0x24 + mla r0, r1, r0, r2 + mov r1, r4 + add r0, r0, #0xc + bl NNS_FndRemoveListObject + ldmia sp!, {r4,pc} + .balign 4 +_020C0778: .word sPlayer + + local_arm_func_start ShutdownPlayer +ShutdownPlayer: ; 0x020C077C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r1, [r4, #0x0] + cmp r1, #0x0 + movne r0, #0x0 + strne r0, [r1, #0x0] + strne r0, [r4, #0x0] + ldr r5, [r4, #0x4] + mov r1, r4 + mov r0, r5 + bl NNS_FndRemoveListObject + mov r0, #0x0 + str r0, [r4, #0x4] + ldr r1, [r4, #0x8] + cmp r1, #0x0 + beq _020C07D8 + add r0, r5, #0xc + bl NNS_FndAppendListObject + ldr r0, [r4, #0x8] + mov r1, #0x0 + str r1, [r0, #0xc] + str r1, [r4, #0x8] +_020C07D8: + ldr r0, _020C0800 ; =sPrioList + mov r1, r4 + bl NNS_FndRemoveListObject + ldr r0, _020C0804 ; =sFreeList + mov r1, r4 + bl NNS_FndAppendListObject + mov r0, #0x0 + strb r0, [r4, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C0800: .word sPrioList +_020C0804: .word sFreeList + + arm_func_start AllocSeqPlayer +AllocSeqPlayer: ; 0x020C0808 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020C0874 ; =sFreeList + mov r1, #0x0 + bl NNS_FndGetNextListObject + movs r4, r0 + bne _020C0850 + ldr r0, _020C0878 ; =sPrioList + mov r1, #0x0 + bl NNS_FndGetNextListObject + mov r4, r0 + ldrb r1, [r4, #0x3d] + cmp r5, r1 + addlt sp, sp, #0x4 + movlt r0, #0x0 + ldmltia sp!, {r4-r5,pc} + bl ForceStopSeq +_020C0850: + ldr r0, _020C0874 ; =sFreeList + mov r1, r4 + bl NNS_FndRemoveListObject + mov r0, r4 + strb r5, [r4, #0x3d] + bl InsertPrioList + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C0874: .word sFreeList +_020C0878: .word sPrioList + + arm_func_start ForceStopSeq +ForceStopSeq: ; 0x020C087C + stmdb sp!, {r4,lr} + mov r4, r0 + ldrb r0, [r4, #0x2c] + cmp r0, #0x2 + bne _020C089C + ldrb r0, [r4, #0x3c] + ldr r1, _020C08B0 ; =0xFFFFFD2D + bl SND_SetPlayerVolume +_020C089C: + ldrb r0, [r4, #0x3c] + bl SND_StopSeq + mov r0, r4 + bl ShutdownPlayer + ldmia sp!, {r4,pc} + .balign 4 +_020C08B0: .word 0xFFFFFD2D + + arm_func_start InsertPrioList +InsertPrioList: ; 0x020C08B4 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, _020C090C ; =sPrioList + mov r1, #0x0 + bl NNS_FndGetNextListObject + movs r1, r0 + beq _020C08F8 + ldr r4, _020C090C ; =sPrioList +_020C08D8: + ldrb r2, [r5, #0x3d] + ldrb r0, [r1, #0x3d] + cmp r2, r0 + blo _020C08F8 + mov r0, r4 + bl NNS_FndGetNextListObject + movs r1, r0 + bne _020C08D8 +_020C08F8: + ldr r0, _020C090C ; =sPrioList + mov r2, r5 + bl NNS_FndInsertListObject + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C090C: .word sPrioList + + arm_func_start InsertPlayerList +InsertPlayerList: ; 0x020C0910 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, #0x0 + mov r5, r0 + bl NNS_FndGetNextListObject + movs r1, r0 + beq _020C0950 +_020C0930: + ldrb r2, [r4, #0x3d] + ldrb r0, [r1, #0x3d] + cmp r2, r0 + blo _020C0950 + mov r0, r5 + bl NNS_FndGetNextListObject + movs r1, r0 + bne _020C0930 +_020C0950: + mov r0, r5 + mov r2, r4 + bl NNS_FndInsertListObject + str r5, [r4, #0x4] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start InitPlayer +InitPlayer: ; 0x020C0968 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x0 + strb r0, [r4, #0x2e] + strb r0, [r4, #0x2d] + strb r0, [r4, #0x2f] + strh r0, [r4, #0x34] + strh r0, [r4, #0x3e] + mov r1, #0x7f + strb r1, [r4, #0x40] + add r0, r4, #0x1c + strb r1, [r4, #0x41] + bl NNSi_SndFaderInit + add r0, r4, #0x1c + mov r1, #0x7f00 + mov r2, #0x1 + bl NNSi_SndFaderSet + ldmia sp!, {r4,pc} + + arm_func_start NNSi_SndPlayerAllocHeap +NNSi_SndPlayerAllocHeap: ; 0x020C09B0 + stmdb sp!, {r4-r6,lr} + ldr r3, _020C0A00 ; =sPlayer + mov r2, #0x24 + mla r5, r0, r2, r3 + mov r6, r1 + add r0, r5, #0xc + mov r1, #0x0 + bl NNS_FndGetNextListObject + movs r4, r0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r1, r4 + add r0, r5, #0xc + bl NNS_FndRemoveListObject + str r6, [r4, #0xc] + str r4, [r6, #0x8] + ldr r0, [r4, #0x8] + bl NNS_SndHeapClear + ldr r0, [r4, #0x8] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C0A00: .word sPlayer + + arm_func_start NNSi_SndPlayerPause +NNSi_SndPlayerPause: ; 0x020C0A04 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + movs r5, r0 + mov r4, r1 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldrb r0, [r5, #0x2e] + cmp r4, r0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldrb r0, [r5, #0x3c] + bl SND_PauseSeq + strb r4, [r5, #0x2e] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start NNSi_SndPlayerStopSeq +NNSi_SndPlayerStopSeq: ; 0x020C0A40 + stmdb sp!, {r4,lr} + movs r4, r0 + mov r2, r1 + ldmeqia sp!, {r4,pc} + ldrb r1, [r4, #0x2c] + cmp r1, #0x0 + ldmeqia sp!, {r4,pc} + cmp r2, #0x0 + bne _020C0A6C + bl ForceStopSeq + ldmia sp!, {r4,pc} +_020C0A6C: + add r0, r4, #0x1c + mov r1, #0x0 + bl NNSi_SndFaderSet + mov r0, r4 + mov r1, #0x0 + bl SetPlayerPriority + mov r0, #0x2 + strb r0, [r4, #0x2c] + ldmia sp!, {r4,pc} + + arm_func_start NNSi_SndPlayerStartSeq +NNSi_SndPlayerStartSeq: ; 0x020C0A90 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldrb r0, [r5, #0x3c] + ldr r4, [r5, #0x4] + bl SND_PrepareSeq + ldr r2, [r4, #0x1c] + cmp r2, #0x0 + beq _020C0AC0 + ldrb r0, [r5, #0x3c] + ldr r1, _020C0AE4 ; =0x0000FFFF + bl SND_SetTrackAllocatableChannel +_020C0AC0: + mov r0, r5 + bl InitPlayer + bl SND_GetCurrentCommandTag + str r0, [r5, #0x30] + mov r0, #0x1 + strb r0, [r5, #0x2f] + strb r0, [r5, #0x2c] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C0AE4: .word 0x0000FFFF + + arm_func_start NNSi_SndPlayerFreeSeqPlayer +NNSi_SndPlayerFreeSeqPlayer: ; 0x020C0AE8 + ldr ip, _020C0AF0 ; =ShutdownPlayer + bx r12 + .balign 4 +_020C0AF0: .word ShutdownPlayer + + arm_func_start NNSi_SndPlayerAllocSeqPlayer +NNSi_SndPlayerAllocSeqPlayer: ; 0x020C0AF4 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr ip, _020C0B9C ; =sPlayer + mov r3, #0x24 + mov r4, r0 + ldr r5, [r4, #0x0] + mla r6, r1, r3, r12 + mov r7, r2 + cmp r5, #0x0 + beq _020C0B20 + bl NNS_SndHandleReleaseSeq +_020C0B20: + ldrh r1, [r6, #0x8] + ldr r0, [r6, #0x18] + cmp r1, r0 + blo _020C0B64 + mov r0, r6 + mov r1, #0x0 + bl NNS_FndGetNextListObject + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + ldrb r1, [r0, #0x3d] + cmp r7, r1 + addlt sp, sp, #0x4 + movlt r0, #0x0 + ldmltia sp!, {r4-r7,pc} + bl ForceStopSeq +_020C0B64: + mov r0, r7 + bl AllocSeqPlayer + movs r5, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + mov r0, r6 + mov r1, r5 + bl InsertPlayerList + str r4, [r5, #0x0] + mov r0, r5 + str r5, [r4, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C0B9C: .word sPlayer + + arm_func_start NNSi_SndPlayerMain +NNSi_SndPlayerMain: ; 0x020C0BA0 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + bl SND_GetPlayerStatus + str r0, [sp, #0x0] + ldr r0, _020C0D14 ; =sPrioList + mov r1, #0x0 + bl NNS_FndGetNextListObject + movs r10, r0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r11,pc} + mov r0, #0x8000 + rsb r0, r0, #0x0 + ldr r4, _020C0D18 ; =SNDi_DecibelTable + str r0, [sp, #0x4] + mov r5, #0x1 + mov r11, #0x0 +_020C0BE0: + ldr r0, _020C0D14 ; =sPrioList + mov r1, r10 + bl NNS_FndGetNextListObject + ldrb r1, [r10, #0x2d] + mov r9, r0 + cmp r1, #0x0 + bne _020C0C0C + ldr r0, [r10, #0x30] + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + strneb r5, [r10, #0x2d] +_020C0C0C: + ldrb r0, [r10, #0x2d] + cmp r0, #0x0 + beq _020C0C38 + ldrb r0, [r10, #0x3c] + mov r1, r5, lsl r0 + ldr r0, [sp, #0x0] + ands r0, r0, r1 + bne _020C0C38 + mov r0, r10 + bl ShutdownPlayer + b _020C0D00 +_020C0C38: + add r0, r10, #0x1c + bl NNSi_SndFaderUpdate + ldr r0, [r10, #0x4] + ldrb r2, [r10, #0x41] + ldrb r1, [r10, #0x40] + ldrb r0, [r0, #0x20] + mov r3, r2, lsl #0x1 + mov r2, r1, lsl #0x1 + mov r1, r0, lsl #0x1 + add r0, r10, #0x1c + ldrsh r8, [r4, r3] + ldrsh r7, [r4, r2] + ldrsh r6, [r4, r1] + bl NNSi_SndFaderGet + mov r0, r0, asr #0x8 + mov r2, r0, lsl #0x1 + add r1, r7, r8 + mov r0, #0x8000 + ldrsh r2, [r4, r2] + add r1, r6, r1 + rsb r0, r0, #0x0 + add r6, r2, r1 + cmp r6, r0 + ldrlt r6, [sp, #0x4] + blt _020C0CA8 + ldr r0, _020C0D1C ; =0x00007FFF + cmp r6, r0 + movgt r6, r0 +_020C0CA8: + ldrsh r0, [r10, #0x3e] + cmp r6, r0 + beq _020C0CC4 + ldrb r0, [r10, #0x3c] + mov r1, r6 + bl SND_SetPlayerVolume + strh r6, [r10, #0x3e] +_020C0CC4: + ldrb r0, [r10, #0x2c] + cmp r0, #0x2 + bne _020C0CE8 + add r0, r10, #0x1c + bl NNSi_SndFaderIsFinished + cmp r0, #0x0 + beq _020C0CE8 + mov r0, r10 + bl ForceStopSeq +_020C0CE8: + ldrb r0, [r10, #0x2f] + cmp r0, #0x0 + beq _020C0D00 + ldrb r0, [r10, #0x3c] + bl SND_StartPreparedSeq + strb r11, [r10, #0x2f] +_020C0D00: + mov r10, r9 + cmp r9, #0x0 + bne _020C0BE0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C0D14: .word sPrioList +_020C0D18: .word SNDi_DecibelTable +_020C0D1C: .word 0x00007FFF + + arm_func_start NNSi_SndPlayerInit +NNSi_SndPlayerInit: ; 0x020C0D20 + stmdb sp!, {r4-r10,lr} + ldr r0, _020C0DC4 ; =sPrioList + mov r1, #0x14 + bl NNS_FndInitList + ldr r0, _020C0DC8 ; =sFreeList + mov r1, #0x14 + bl NNS_FndInitList + ldr r6, _020C0DCC ; =sSeqPlayer + mov r7, #0x0 + ldr r4, _020C0DC8 ; =sFreeList + mov r5, r7 +_020C0D4C: + strb r5, [r6, #0x2c] + mov r0, r4 + mov r1, r6 + strb r7, [r6, #0x3c] + bl NNS_FndAppendListObject + add r7, r7, #0x1 + cmp r7, #0x10 + add r6, r6, #0x44 + blt _020C0D4C + ldr sl, _020C0DD0 ; =sPlayer + mov r9, #0x0 + mov r7, r9 + mov r4, r9 + mov r8, #0xc + mov r6, #0x7f + mov r5, #0x1 +_020C0D8C: + mov r0, r10 + mov r1, r8 + bl NNS_FndInitList + mov r1, r7 + add r0, r10, #0xc + bl NNS_FndInitList + strb r6, [r10, #0x20] + str r5, [r10, #0x18] + add r9, r9, #0x1 + str r4, [r10, #0x1c] + cmp r9, #0x20 + add r10, r10, #0x24 + blt _020C0D8C + ldmia sp!, {r4-r10,pc} + .balign 4 +_020C0DC4: .word sPrioList +_020C0DC8: .word sFreeList +_020C0DCC: .word sSeqPlayer +_020C0DD0: .word sPlayer + + arm_func_start NNS_SndPlayerGetTick +NNS_SndPlayerGetTick: ; 0x020C0DD4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {pc} + ldrb r0, [r1, #0x2d] + cmp r0, #0x0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {pc} + ldrb r0, [r1, #0x3c] + bl SND_GetPlayerTickCounter + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndPlayerGetSeqNo +NNS_SndPlayerGetSeqNo: ; 0x020C0E14 + ldr r1, [r0, #0x0] + cmp r1, #0x0 + mvneq r0, #0x0 + bxeq lr + ldrh r0, [r1, #0x34] + cmp r0, #0x1 + mvnne r0, #0x0 + ldreqh r0, [r1, #0x38] + bx lr + + arm_func_start NNS_SndPlayerSetSeqArcNo +NNS_SndPlayerSetSeqArcNo: ; 0x020C0E38 + ldr r12, [r0, #0x0] + cmp r12, #0x0 + bxeq lr + mov r3, #0x2 + strh r3, [r12, #0x34] + ldr r3, [r0, #0x0] + strh r1, [r3, #0x38] + ldr r0, [r0, #0x0] + strh r2, [r0, #0x3a] + bx lr + + arm_func_start NNS_SndPlayerSetSeqNo +NNS_SndPlayerSetSeqNo: ; 0x020C0E60 + ldr r3, [r0, #0x0] + cmp r3, #0x0 + movne r2, #0x1 + strneh r2, [r3, #0x34] + ldrne r0, [r0, #0x0] + strneh r1, [r0, #0x38] + bx lr + + arm_func_start NNS_SndPlayerSetTrackPan +NNS_SndPlayerSetTrackPan: ; 0x020C0E7C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r0, #0x3c] + bl SND_SetTrackPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndPlayerSetTrackPitch +NNS_SndPlayerSetTrackPitch: ; 0x020C0EA4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r0, #0x3c] + bl SND_SetTrackPitch + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndPlayerSetChannelPriority +NNS_SndPlayerSetChannelPriority: ; 0x020C0ECC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r0, #0x3c] + bl SND_SetPlayerChannelPriority + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndPlayerMoveVolume +NNS_SndPlayerMoveVolume: ; 0x020C0EF4 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r3, [r0, #0x0] + cmp r3, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldrb r0, [r3, #0x2c] + cmp r0, #0x2 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + add r0, r3, #0x1c + mov r1, r1, lsl #0x8 + bl NNSi_SndFaderSet + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndPlayerSetInitialVolume +NNS_SndPlayerSetInitialVolume: ; 0x020C0F30 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + strneb r1, [r0, #0x40] + bx lr + + arm_func_start NNS_SndPlayerSetVolume +NNS_SndPlayerSetVolume: ; 0x020C0F40 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + strneb r1, [r0, #0x41] + bx lr + + arm_func_start NNS_SndPlayerCountPlayingSeqByPlayerNo +NNS_SndPlayerCountPlayingSeqByPlayerNo: ; 0x020C0F50 + mov r1, #0x24 + mul r1, r0, r1 + ldr r0, _020C0F64 ; =sPlayer + 0x8 + ldrh r0, [r0, r1] + bx lr + .balign 4 +_020C0F64: .word sPlayer + 0x8 + + arm_func_start NNS_SndHandleReleaseSeq +NNS_SndHandleReleaseSeq: ; 0x020C0F68 + ldr r2, [r0, #0x0] + cmp r2, #0x0 + movne r1, #0x0 + strne r1, [r2, #0x0] + strne r1, [r0, #0x0] + bx lr + + arm_func_start NNS_SndHandleInit +NNS_SndHandleInit: ; 0x020C0F80 + mov r1, #0x0 + str r1, [r0, #0x0] + bx lr + + arm_func_start NNS_SndPlayerPause +NNS_SndPlayerPause: ; 0x020C0F8C + ldr ip, _020C0F98 ; =NNSi_SndPlayerPause + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020C0F98: .word NNSi_SndPlayerPause + + arm_func_start NNS_SndPlayerStopSeqAll +NNS_SndPlayerStopSeqAll: ; 0x020C0F9C + stmdb sp!, {r4-r6,lr} + ldr r4, _020C0FD8 ; =sSeqPlayer + mov r6, r0 + mov r5, #0x0 +_020C0FAC: + ldrb r0, [r4, #0x2c] + cmp r0, #0x0 + beq _020C0FC4 + mov r0, r4 + mov r1, r6 + bl NNSi_SndPlayerStopSeq +_020C0FC4: + add r5, r5, #0x1 + cmp r5, #0x10 + add r4, r4, #0x44 + blt _020C0FAC + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C0FD8: .word sSeqPlayer + + arm_func_start NNS_SndPlayerStopSeqBySeqNo +NNS_SndPlayerStopSeqBySeqNo: ; 0x020C0FDC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r4, _020C103C ; =sSeqPlayer + mov r7, r0 + mov r6, r1 + mov r5, #0x0 +_020C0FF4: + ldrb r0, [r4, #0x2c] + cmp r0, #0x0 + beq _020C1024 + ldrh r0, [r4, #0x34] + cmp r0, #0x1 + bne _020C1024 + ldrh r0, [r4, #0x38] + cmp r0, r7 + bne _020C1024 + mov r0, r4 + mov r1, r6 + bl NNSi_SndPlayerStopSeq +_020C1024: + add r5, r5, #0x1 + cmp r5, #0x10 + add r4, r4, #0x44 + blt _020C0FF4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C103C: .word sSeqPlayer + + arm_func_start NNS_SndPlayerStopSeqByPlayerNo +NNS_SndPlayerStopSeqByPlayerNo: ; 0x020C1040 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r3, _020C109C ; =sPlayer + mov r2, #0x24 + mla r4, r0, r2, r3 + ldr r5, _020C10A0 ; =sSeqPlayer + mov r7, r1 + mov r6, #0x0 +_020C1060: + ldrb r0, [r5, #0x2c] + cmp r0, #0x0 + beq _020C1084 + ldr r0, [r5, #0x4] + cmp r0, r4 + bne _020C1084 + mov r0, r5 + mov r1, r7 + bl NNSi_SndPlayerStopSeq +_020C1084: + add r6, r6, #0x1 + cmp r6, #0x10 + add r5, r5, #0x44 + blt _020C1060 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C109C: .word sPlayer +_020C10A0: .word sSeqPlayer + + arm_func_start NNS_SndPlayerStopSeq +NNS_SndPlayerStopSeq: ; 0x020C10A4 + ldr ip, _020C10B0 ; =NNSi_SndPlayerStopSeq + ldr r0, [r0, #0x0] + bx r12 + .balign 4 +_020C10B0: .word NNSi_SndPlayerStopSeq + + arm_func_start NNS_SndPlayerCreateHeap +NNS_SndPlayerCreateHeap: ; 0x020C10B4 + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r5, r2 + mov r6, r0 + mov r0, r1 + mov r3, #0x0 + ldr r2, _020C1140 ; =PlayerHeapDisposeCallback + add r1, r5, #0x14 + str r3, [sp, #0x0] + bl NNS_SndHeapAlloc + movs r4, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r2, #0x0 + str r2, [r4, #0xc] + str r6, [r4, #0x10] + mov r1, r5 + add r0, r4, #0x14 + str r2, [r4, #0x8] + bl NNS_SndHeapCreate + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r2, _020C1144 ; =sPlayer + mov r1, #0x24 + mla r2, r6, r1, r2 + str r0, [r4, #0x8] + mov r1, r4 + add r0, r2, #0xc + bl NNS_FndAppendListObject + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C1140: .word PlayerHeapDisposeCallback +_020C1144: .word sPlayer + + arm_func_start NNS_SndPlayerSetAllocatableChannel +NNS_SndPlayerSetAllocatableChannel: ; 0x020C1148 + mov r2, #0x24 + mul r2, r0, r2 + ldr r0, _020C115C ; =sPlayer + 0x1C + str r1, [r0, r2] + bx lr + .balign 4 +_020C115C: .word sPlayer + 0x1C + + arm_func_start NNS_SndPlayerSetPlayableSeqCount +NNS_SndPlayerSetPlayableSeqCount: ; 0x020C1160 + mov r2, #0x24 + mul r2, r0, r2 + mov r0, r1, lsl #0x10 + ldr r1, _020C117C ; =sPlayer + 0x18 + mov r0, r0, lsr #0x10 + str r0, [r1, r2] + bx lr + .balign 4 +_020C117C: .word sPlayer + 0x18 + + arm_func_start NNS_SndPlayerSetPlayerVolume +NNS_SndPlayerSetPlayerVolume: ; 0x020C1180 + mov r2, #0x24 + mul r2, r0, r2 + ldr r0, _020C1194 ; =sPlayer + 0x20 + strb r1, [r0, r2] + bx lr + .balign 4 +_020C1194: .word sPlayer + 0x20 diff --git a/arm9/asm/NNS_SND_resource_mgr.s b/arm9/asm/NNS_SND_resource_mgr.s new file mode 100644 index 00000000..944754cc --- /dev/null +++ b/arm9/asm/NNS_SND_resource_mgr.s @@ -0,0 +1,129 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sCaptureLock +sCaptureLock: ; 0x021D1CB0 + .space 0x4 + + .global sAlarmLock +sAlarmLock: ; 0x021D1CB4 + .space 0x4 + + .global sChannelLock +sChannelLock: ; 0x021D1CB8 + .space 0x4 + + .section .text + + arm_func_start NNSi_SndInitResourceMgr +NNSi_SndInitResourceMgr: ; 0x020C0270 + ldr r2, _020C0290 ; =sChannelLock + mov r3, #0x0 + ldr r1, _020C0294 ; =sCaptureLock + ldr r0, _020C0298 ; =sAlarmLock + str r3, [r2, #0x0] + str r3, [r1, #0x0] + str r3, [r0, #0x0] + bx lr + .balign 4 +_020C0290: .word sChannelLock +_020C0294: .word sCaptureLock +_020C0298: .word sAlarmLock + + arm_func_start NNS_SndFreeAlarm +NNS_SndFreeAlarm: ; 0x020C029C + ldr r1, _020C02B8 ; =sAlarmLock + mov r2, #0x1 + mvn r0, r2, lsl r0 + ldr r2, [r1, #0x0] + and r0, r2, r0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C02B8: .word sAlarmLock + + arm_func_start NNS_SndAllocAlarm +NNS_SndAllocAlarm: ; 0x020C02BC + ldr r0, _020C02FC ; =sAlarmLock + mov r3, #0x1 + ldr r2, [r0, #0x0] + mov r0, #0x0 +_020C02CC: + ands r1, r2, r3 + ldreq r1, _020C02FC ; =sAlarmLock + ldreq r2, [r1, #0x0] + orreq r2, r2, r3 + streq r2, [r1, #0x0] + bxeq lr + add r0, r0, #0x1 + cmp r0, #0x8 + mov r3, r3, lsl #0x1 + blt _020C02CC + mvn r0, #0x0 + bx lr + .balign 4 +_020C02FC: .word sAlarmLock + + arm_func_start NNS_SndUnlockCapture +NNS_SndUnlockCapture: ; 0x020C0300 + ldr r1, _020C0318 ; =sCaptureLock + mvn r0, r0 + ldr r2, [r1, #0x0] + and r0, r2, r0 + str r0, [r1, #0x0] + bx lr + .balign 4 +_020C0318: .word sCaptureLock + + arm_func_start NNS_SndLockCapture +NNS_SndLockCapture: ; 0x020C031C + ldr r1, _020C033C ; =sCaptureLock + ldr r2, [r1, #0x0] + ands r3, r0, r2 + movne r0, #0x0 + orreq r0, r2, r0 + streq r0, [r1, #0x0] + moveq r0, #0x1 + bx lr + .balign 4 +_020C033C: .word sCaptureLock + + arm_func_start NNS_SndUnlockChannel +NNS_SndUnlockChannel: ; 0x020C0340 + stmdb sp!, {r4,lr} + movs r4, r0 + ldmeqia sp!, {r4,pc} + mov r1, #0x0 + bl SND_UnlockChannel + ldr r0, _020C036C ; =sChannelLock + mvn r1, r4 + ldr r2, [r0, #0x0] + and r1, r2, r1 + str r1, [r0, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020C036C: .word sChannelLock + + arm_func_start NNS_SndLockChannel +NNS_SndLockChannel: ; 0x020C0370 + stmdb sp!, {r4,lr} + movs r4, r0 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} + ldr r1, _020C03B4 ; =sChannelLock + ldr r1, [r1, #0x0] + ands r1, r4, r1 + movne r0, #0x0 + ldmneia sp!, {r4,pc} + mov r1, #0x0 + bl SND_LockChannel + ldr r1, _020C03B4 ; =sChannelLock + mov r0, #0x1 + ldr r2, [r1, #0x0] + orr r2, r2, r4 + str r2, [r1, #0x0] + ldmia sp!, {r4,pc} + .balign 4 +_020C03B4: .word sChannelLock diff --git a/arm9/asm/NNS_SND_seqdata.s b/arm9/asm/NNS_SND_seqdata.s new file mode 100644 index 00000000..60cf2420 --- /dev/null +++ b/arm9/asm/NNS_SND_seqdata.s @@ -0,0 +1,23 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start NNSi_SndSeqArcGetSeqInfo +NNSi_SndSeqArcGetSeqInfo: ; 0x020C3D9C + cmp r1, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r2, [r0, #0x1c] + cmp r1, r2 + movcs r0, #0x0 + bxcs lr + mov r2, #0xc + mul r2, r1, r2 + add r3, r0, #0x20 + ldr r1, [r3, r2] + mvn r0, #0x0 + cmp r1, r0 + add r0, r3, r2 + moveq r0, #0x0 + bx lr diff --git a/arm9/asm/NNS_SND_sndarc.s b/arm9/asm/NNS_SND_sndarc.s new file mode 100644 index 00000000..aa46de46 --- /dev/null +++ b/arm9/asm/NNS_SND_sndarc.s @@ -0,0 +1,525 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sCurrent +sCurrent: ; 0x021D28C0 + .space 0x4 + + .section .text + + arm_func_start SymbolDisposeCallback +SymbolDisposeCallback: ; 0x020C209C + mov r0, #0x0 + str r0, [r2, #0x88] + bx lr + + arm_func_start FatDisposeCallback +FatDisposeCallback: ; 0x020C20A8 + mov r0, #0x0 + str r0, [r2, #0x84] + bx lr + + arm_func_start InfoDisposeCallback +InfoDisposeCallback: ; 0x020C20B4 + mov r0, #0x0 + str r0, [r2, #0x8c] + bx lr + + arm_func_start NNS_SndArcSetFileAddress +NNS_SndArcSetFileAddress: ; 0x020C20C0 + ldr r2, _020C20D8 ; =sCurrent + ldr r2, [r2, #0x0] + ldr r2, [r2, #0x84] + add r0, r2, r0, lsl #0x4 + str r1, [r0, #0x14] + bx lr + .balign 4 +_020C20D8: .word sCurrent + + arm_func_start NNS_SndArcGetFileAddress +NNS_SndArcGetFileAddress: ; 0x020C20DC + ldr r1, _020C2100 ; =sCurrent + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x84] + ldr r1, [r2, #0x8] + cmp r0, r1 + movcs r0, #0x0 + addcc r0, r2, r0, lsl #0x4 + ldrcc r0, [r0, #0x14] + bx lr + .balign 4 +_020C2100: .word sCurrent + + arm_func_start NNS_SndArcReadFile +NNS_SndArcReadFile: ; 0x020C2104 + stmdb sp!, {r4-r6,lr} + ldr r4, _020C2178 ; =sCurrent + mov r5, r2 + ldr r4, [r4, #0x0] + mov r6, r1 + ldr r2, [r4, #0x84] + ldr r1, [r2, #0x8] + cmp r0, r1 + mvncs r0, #0x0 + ldmcsia sp!, {r4-r6,pc} + add r1, r2, #0xc + add r1, r1, r0, lsl #0x4 + ldr r0, [r1, #0x4] + ldr r1, [r1, #0x0] + sub r0, r0, r3 + cmp r5, r0 + movhi r5, r0 + add r0, r4, #0x34 + add r1, r1, r3 + mov r2, #0x0 + bl FS_SeekFile + cmp r0, #0x0 + mvneq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r1, r6 + mov r2, r5 + add r0, r4, #0x34 + bl FS_ReadFile + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C2178: .word sCurrent + + arm_func_start NNS_SndArcGetFileSize +NNS_SndArcGetFileSize: ; 0x020C217C + ldr r1, _020C21A0 ; =sCurrent + ldr r1, [r1, #0x0] + ldr r2, [r1, #0x84] + ldr r1, [r2, #0x8] + cmp r0, r1 + movcs r0, #0x0 + addcc r0, r2, r0, lsl #0x4 + ldrcc r0, [r0, #0x10] + bx lr + .balign 4 +_020C21A0: .word sCurrent + + arm_func_start NNS_SndArcGetGroupInfo +NNS_SndArcGetGroupInfo: ; 0x020C21A4 + ldr r1, _020C2204 ; =sCurrent + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x1c] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2204: .word sCurrent + + arm_func_start NNS_SndArcGetPlayerInfo +NNS_SndArcGetPlayerInfo: ; 0x020C2208 + ldr r1, _020C2268 ; =sCurrent + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x18] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2268: .word sCurrent + + arm_func_start NNS_SndArcGetWaveArcInfo +NNS_SndArcGetWaveArcInfo: ; 0x020C226C + ldr r1, _020C22CC ; =sCurrent + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x14] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C22CC: .word sCurrent + + arm_func_start NNS_SndArcGetBankInfo +NNS_SndArcGetBankInfo: ; 0x020C22D0 + ldr r1, _020C2330 ; =sCurrent + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x10] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2330: .word sCurrent + + arm_func_start NNS_SndArcGetSeqArcInfo +NNS_SndArcGetSeqArcInfo: ; 0x020C2334 + ldr r1, _020C2394 ; =sCurrent + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0xc] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C2394: .word sCurrent + + arm_func_start NNS_SndArcGetSeqInfo +NNS_SndArcGetSeqInfo: ; 0x020C2398 + ldr r1, _020C23F8 ; =sCurrent + ldr r3, [r1, #0x0] + ldr r2, [r3, #0x8c] + ldr r1, [r2, #0x8] + cmp r1, #0x0 + moveq r2, #0x0 + addne r2, r2, r1 + cmp r2, #0x0 + moveq r0, #0x0 + bxeq lr + cmp r0, #0x0 + movlt r0, #0x0 + bxlt lr + ldr r1, [r2, #0x0] + cmp r0, r1 + movcs r0, #0x0 + bxcs lr + add r0, r2, r0, lsl #0x2 + ldr r1, [r0, #0x4] + ldr r0, [r3, #0x8c] + cmp r1, #0x0 + moveq r0, #0x0 + addne r0, r0, r1 + bx lr + .balign 4 +_020C23F8: .word sCurrent + + arm_func_start NNS_SndArcGetSeqParam +NNS_SndArcGetSeqParam: ; 0x020C23FC + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl NNS_SndArcGetSeqInfo + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r0, #0x4 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndArcGetCurrent +NNS_SndArcGetCurrent: ; 0x020C241C + ldr r0, _020C2428 ; =sCurrent + ldr r0, [r0, #0x0] + bx lr + .balign 4 +_020C2428: .word sCurrent + + arm_func_start NNS_SndArcSetCurrent +NNS_SndArcSetCurrent: ; 0x020C242C + ldr r1, _020C2440 ; =sCurrent + ldr r2, [r1, #0x0] + str r0, [r1, #0x0] + mov r0, r2 + bx lr + .balign 4 +_020C2440: .word sCurrent + + arm_func_start NNS_SndArcInitOnMemory +NNS_SndArcInitOnMemory: ; 0x020C2444 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + mov r4, r1 + mov r0, r4 + mov r1, r5 + mov r2, #0x30 + bl MIi_CpuCopy32 + ldr r0, [r5, #0x18] + mov r12, #0x0 + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r4, r0 + str r0, [r5, #0x8c] + ldr r0, [r5, #0x20] + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r4, r0 + str r0, [r5, #0x84] + ldr r0, [r5, #0x10] + cmp r0, #0x0 + moveq r0, #0x0 + addne r0, r4, r0 + str r0, [r5, #0x88] + ldr r2, [r5, #0x84] + ldr r0, [r2, #0x8] + cmp r0, #0x0 + bls _020C24F0 + mov r3, r12 + mov r1, r12 +_020C24BC: + add r2, r2, #0xc + ldr r0, [r2, r3] + add r2, r2, r3 + cmp r0, #0x0 + moveq r0, r1 + addne r0, r4, r0 + str r0, [r2, #0x8] + ldr r2, [r5, #0x84] + add r12, r12, #0x1 + ldr r0, [r2, #0x8] + add r3, r3, #0x10 + cmp r12, r0 + blo _020C24BC +_020C24F0: + mov r1, #0x0 + ldr r0, _020C2508 ; =sCurrent + str r1, [r5, #0x30] + str r5, [r0, #0x0] + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C2508: .word sCurrent +SDATi_ReadHeaders: + stmdb sp!, {r4-r6,lr} + sub sp, sp, #0x8 + mov r6, r0 + mov r5, r1 + mov r1, #0x0 + mov r4, r2 + mov r2, r1 + add r0, r6, #0x34 + bl FS_SeekFile + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r1, r6 + add r0, r6, #0x34 + mov r2, #0x30 + bl FS_ReadFile + cmp r0, #0x30 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r6,pc} + cmp r5, #0x0 + beq _020C26E0 + mov r0, #0x0 + str r0, [sp, #0x0] + ldr r1, [r6, #0x1c] + ldr r2, _020C26EC ; =InfoDisposeCallback + mov r0, r5 + mov r3, r6 + bl NNS_SndHeapAlloc + str r0, [r6, #0x8c] + ldr r0, [r6, #0x8c] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r1, [r6, #0x18] + add r0, r6, #0x34 + mov r2, #0x0 + bl FS_SeekFile + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r1, [r6, #0x8c] + ldr r2, [r6, #0x1c] + add r0, r6, #0x34 + bl FS_ReadFile + ldr r1, [r6, #0x1c] + cmp r0, r1 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r6,pc} + mov r0, #0x0 + str r0, [sp, #0x0] + ldr r1, [r6, #0x24] + ldr r2, _020C26F0 ; =FatDisposeCallback + mov r0, r5 + mov r3, r6 + bl NNS_SndHeapAlloc + str r0, [r6, #0x84] + ldr r0, [r6, #0x84] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r1, [r6, #0x20] + add r0, r6, #0x34 + mov r2, #0x0 + bl FS_SeekFile + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + ldr r1, [r6, #0x84] + ldr r2, [r6, #0x24] + add r0, r6, #0x34 + bl FS_ReadFile + ldr r1, [r6, #0x24] + cmp r0, r1 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r6,pc} + cmp r4, #0x0 + beq _020C26E0 + ldr r1, [r6, #0x14] + cmp r1, #0x0 + beq _020C26E0 + mov r4, #0x0 + ldr r2, _020C26F4 ; =SymbolDisposeCallback + mov r0, r5 + mov r3, r6 + str r4, [sp, #0x0] + bl NNS_SndHeapAlloc + str r0, [r6, #0x88] + ldr r0, [r6, #0x88] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, r4 + ldmeqia sp!, {r4-r6,pc} + ldr r1, [r6, #0x10] + add r0, r6, #0x34 + mov r2, r4 + bl FS_SeekFile + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, r4 + ldmeqia sp!, {r4-r6,pc} + ldr r1, [r6, #0x88] + ldr r2, [r6, #0x14] + add r0, r6, #0x34 + bl FS_ReadFile + ldr r1, [r6, #0x14] + cmp r0, r1 + addne sp, sp, #0x8 + movne r0, r4 + ldmneia sp!, {r4-r6,pc} +_020C26E0: + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C26EC: .word InfoDisposeCallback +_020C26F0: .word FatDisposeCallback +_020C26F4: .word SymbolDisposeCallback + + arm_func_start NNS_SndArcInit +NNS_SndArcInit: ; 0x020C26F8 + ; r0: &sSoundDataBuffer + ; r1: char* filename + ; r2: (&sSoundDataBuffer)->unk_0090 + ; r3: 0 + stmdb sp!, {r4-r6,lr} + mov r6, r0 + mov r12, #0x0 + str r12, [r6, #0x8c] + str r12, [r6, #0x84] + add r0, r6, #0x7c + mov r5, r2 + mov r4, r3 + str r12, [r6, #0x88] + bl FS_ConvertPathToFileID + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + add r0, r6, #0x34 + bl FS_InitFile + add r1, r6, #0x7c + add r0, r6, #0x34 + ldmia r1, {r1-r2} + bl FS_OpenFileFast + cmp r0, #0x0 + ldmeqia sp!, {r4-r6,pc} + mov r3, #0x1 + mov r0, r6 + mov r1, r5 + mov r2, r4 + str r3, [r6, #0x30] + bl SDATi_ReadHeaders + cmp r0, #0x0 + ldrne r0, _020C2770 ; =sCurrent + strne r6, [r0, #0x0] + ldmia sp!, {r4-r6,pc} + .balign 4 +_020C2770: .word sCurrent diff --git a/arm9/asm/NNS_SND_sndarc_loader.s b/arm9/asm/NNS_SND_sndarc_loader.s new file mode 100644 index 00000000..26636305 --- /dev/null +++ b/arm9/asm/NNS_SND_sndarc_loader.s @@ -0,0 +1,872 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global waveArcHeader$8213 +waveArcHeader$8213: ; 0x021D28C4 + .space 0x3c + + .section .text + + arm_func_start LoadSingleWaves +LoadSingleWaves: ; 0x020C2B1C + stmdb sp!, {r4-r10,lr} + sub sp, sp, #0x20 + mov r8, r0 + add r0, sp, #0x8 + mov r7, r1 + mov r6, r2 + mov r5, r3 + ldr r4, [sp, #0x40] + bl SND_GetFirstInstDataPos + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + str r1, [sp, #0x0] + str r0, [sp, #0x4] + cmp r7, #0x0 + add r2, sp, #0x0 + addeq sp, sp, #0x20 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,pc} + add r1, sp, #0x10 + mov r0, r7 + bl SND_GetNextInstData + cmp r0, #0x0 + beq _020C2BD4 + add r10, sp, #0x10 + add r9, sp, #0x0 +_020C2B80: + ldrb r0, [sp, #0x10] + cmp r0, #0x1 + bne _020C2BBC + ldrh r0, [sp, #0x14] + cmp r6, r0 + bne _020C2BBC + ldrh r1, [sp, #0x12] + mov r0, r8 + mov r2, r5 + mov r3, r4 + bl LoadSingleWave + cmp r0, #0x0 + addeq sp, sp, #0x20 + moveq r0, #0x0 + ldmeqia sp!, {r4-r10,pc} +_020C2BBC: + mov r0, r7 + mov r1, r10 + mov r2, r9 + bl SND_GetNextInstData + cmp r0, #0x0 + bne _020C2B80 +_020C2BD4: + mov r0, #0x1 + add sp, sp, #0x20 + ldmia sp!, {r4-r10,pc} + + arm_func_start LoadSingleWave +LoadSingleWave: ; 0x020C2BE0 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl SND_GetWaveDataAddress + cmp r0, #0x0 + addne sp, sp, #0x4 + movne r0, #0x1 + ldmneia sp!, {r4-r9,pc} + mov r0, r7 + bl SND_GetWaveDataCount + ldr r1, [r7, #0x38] + sub r0, r0, #0x1 + add r1, r1, r6 + add r1, r7, r1, lsl #0x2 + cmp r6, r0 + ldrcc r0, [r1, #0x40] + ldr r8, [r1, #0x3c] + ldrcs r0, [r7, #0x8] + cmp r4, #0x0 + sub r9, r0, r8 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} + ldr r2, _020C2CBC ; =SingleWaveDisposeCallback + mov r0, r4 + mov r3, r7 + add r1, r9, #0x20 + str r6, [sp, #0x0] + bl NNS_SndHeapAlloc + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} + mov r0, r5 + mov r1, r4 + mov r2, r9 + mov r3, r8 + bl NNS_SndArcReadFile + cmp r9, r0 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} + mov r0, r4 + mov r1, r9 + bl DC_StoreRange + mov r0, r7 + mov r1, r6 + mov r2, r4 + bl SND_SetWaveDataAddress + mov r0, #0x1 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020C2CBC: .word SingleWaveDisposeCallback + + arm_func_start SingleWaveDisposeCallback +SingleWaveDisposeCallback: ; 0x020C2CC0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r5, r2 + mov r7, r0 + mov r4, r3 + mov r6, r1 + mov r0, r5 + mov r1, r4 + bl SND_GetWaveDataAddress + cmp r7, r0 + bne _020C2CFC + mov r0, r5 + mov r1, r4 + mov r2, #0x0 + bl SND_SetWaveDataAddress +_020C2CFC: + mov r0, r7 + add r1, r7, r6 + bl SND_InvalidateWaveData + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start WaveArcTableDisposeCallback +WaveArcTableDisposeCallback: ; 0x020C2D10 + stmdb sp!, {r4,lr} + mov r1, r2 + mov r4, r0 + mov r2, r3 + bl DisposeCallback + mov r0, r4 + bl SND_DestroyWaveArc + ldmia sp!, {r4,pc} + + arm_func_start WaveArcDisposeCallback +WaveArcDisposeCallback: ; 0x020C2D30 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, r2 + mov r5, r0 + mov r2, r3 + bl DisposeCallback + mov r0, r5 + add r1, r5, r4 + bl SND_InvalidateWaveData + mov r0, r5 + bl SND_DestroyWaveArc + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start BankDisposeCallback +BankDisposeCallback: ; 0x020C2D68 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, r2 + mov r5, r0 + mov r2, r3 + bl DisposeCallback + mov r0, r5 + add r1, r5, r4 + bl SND_InvalidateBankData + mov r0, r5 + bl SND_DestroyBank + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start SeqDisposeCallback +SeqDisposeCallback: ; 0x020C2DA0 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r1 + mov r1, r2 + mov r5, r0 + mov r2, r3 + bl DisposeCallback + mov r0, r5 + add r1, r5, r4 + bl SND_InvalidateSeqData + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start DisposeCallback +DisposeCallback: ; 0x020C2DD0 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + movs r5, r1 + mov r7, r0 + mov r6, r2 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r7,pc} + bl OS_DisableInterrupts + mov r4, r0 + mov r0, r5 + bl NNS_SndArcSetCurrent + mov r5, r0 + mov r0, r6 + bl NNS_SndArcGetFileAddress + cmp r7, r0 + bne _020C2E1C + mov r0, r6 + mov r1, #0x0 + bl NNS_SndArcSetFileAddress +_020C2E1C: + mov r0, r5 + bl NNS_SndArcSetCurrent + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start LoadWaveArcTable +LoadWaveArcTable: ; 0x020C2E34 + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x4 + mov r9, r0 + mov r8, r1 + mov r7, r2 + bl NNS_SndArcGetFileAddress + movs r6, r0 + bne _020C2F40 + ldr r1, _020C2F4C ; =waveArcHeader$8213 + mov r0, r9 + mov r2, #0x3c + mov r3, #0x0 + bl NNS_SndArcReadFile + cmp r0, #0x3c + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} + ldr r0, _020C2F4C ; =waveArcHeader$8213 + cmp r8, #0x0 + ldr r0, [r0, #0x38] + addeq sp, sp, #0x4 + mov r4, r0, lsl #0x2 + mov r0, r4, lsl #0x1 + add r5, r0, #0x3c + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} + cmp r7, #0x0 + moveq r3, #0x0 + beq _020C2EB0 + bl NNS_SndArcGetCurrent + mov r3, r0 +_020C2EB0: + ldr r2, _020C2F50 ; =WaveArcTableDisposeCallback + mov r0, r8 + add r1, r5, #0x20 + str r9, [sp, #0x0] + bl NNS_SndHeapAlloc + movs r6, r0 + addeq sp, sp, #0x4 + moveq r0, #0x0 + ldmeqia sp!, {r4-r9,pc} + mov r0, r9 + mov r1, r6 + add r2, r4, #0x3c + mov r3, #0x0 + bl NNS_SndArcReadFile + add r1, r4, #0x3c + cmp r0, r1 + addne sp, sp, #0x4 + movne r0, #0x0 + ldmneia sp!, {r4-r9,pc} + ldr r1, [r6, #0x38] + add r0, r6, #0x3c + mov r2, r4 + add r1, r0, r1, lsl #0x2 + bl MI_CpuCopy8 + mov r2, r4 + add r0, r6, #0x3c + mov r1, #0x0 + bl MI_CpuFill8 + mov r0, r6 + mov r1, r5 + bl DC_StoreRange + cmp r7, #0x0 + beq _020C2F40 + mov r0, r9 + mov r1, r6 + bl NNS_SndArcSetFileAddress +_020C2F40: + mov r0, r6 + add sp, sp, #0x4 + ldmia sp!, {r4-r9,pc} + .balign 4 +_020C2F4C: .word waveArcHeader$8213 +_020C2F50: .word WaveArcTableDisposeCallback + + arm_func_start LoadWaveArc +LoadWaveArc: ; 0x020C2F54 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl NNS_SndArcGetFileAddress + movs r4, r0 + bne _020C2FBC + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C2F88 + bl NNS_SndArcGetCurrent + mov r2, r0 +_020C2F88: + ldr r1, _020C2FC8 ; =WaveArcDisposeCallback + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl NNSi_SndArcLoadFile + mov r4, r0 + cmp r5, #0x0 + beq _020C2FBC + cmp r4, #0x0 + beq _020C2FBC + mov r0, r7 + mov r1, r4 + bl NNS_SndArcSetFileAddress +_020C2FBC: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C2FC8: .word WaveArcDisposeCallback + + arm_func_start LoadBank +LoadBank: ; 0x020C2FCC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl NNS_SndArcGetFileAddress + movs r4, r0 + bne _020C3034 + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C3000 + bl NNS_SndArcGetCurrent + mov r2, r0 +_020C3000: + ldr r1, _020C3040 ; =BankDisposeCallback + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl NNSi_SndArcLoadFile + mov r4, r0 + cmp r5, #0x0 + beq _020C3034 + cmp r4, #0x0 + beq _020C3034 + mov r0, r7 + mov r1, r4 + bl NNS_SndArcSetFileAddress +_020C3034: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C3040: .word BankDisposeCallback + + arm_func_start LoadSeqArc +LoadSeqArc: ; 0x020C3044 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl NNS_SndArcGetFileAddress + movs r4, r0 + bne _020C30AC + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C3078 + bl NNS_SndArcGetCurrent + mov r2, r0 +_020C3078: + ldr r1, _020C30B8 ; =SeqDisposeCallback + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl NNSi_SndArcLoadFile + mov r4, r0 + cmp r5, #0x0 + beq _020C30AC + cmp r4, #0x0 + beq _020C30AC + mov r0, r7 + mov r1, r4 + bl NNS_SndArcSetFileAddress +_020C30AC: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C30B8: .word SeqDisposeCallback + + arm_func_start LoadSeq +LoadSeq: ; 0x020C30BC + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r0 + mov r6, r1 + mov r5, r2 + bl NNS_SndArcGetFileAddress + movs r4, r0 + bne _020C3124 + cmp r5, #0x0 + moveq r2, #0x0 + beq _020C30F0 + bl NNS_SndArcGetCurrent + mov r2, r0 +_020C30F0: + ldr r1, _020C3130 ; =SeqDisposeCallback + mov r0, r7 + mov r3, r7 + str r6, [sp, #0x0] + bl NNSi_SndArcLoadFile + mov r4, r0 + cmp r5, #0x0 + beq _020C3124 + cmp r4, #0x0 + beq _020C3124 + mov r0, r7 + mov r1, r4 + bl NNS_SndArcSetFileAddress +_020C3124: + mov r0, r4 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C3130: .word SeqDisposeCallback + + arm_func_start NNSi_SndArcLoadFile +NNSi_SndArcLoadFile: ; 0x020C3134 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r8, r0 + mov r7, r1 + mov r6, r2 + mov r4, r3 + bl NNS_SndArcGetFileSize + movs r5, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + ldr r0, [sp, #0x20] + cmp r0, #0x0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + mov r2, r7 + mov r3, r6 + add r1, r5, #0x20 + str r4, [sp, #0x0] + bl NNS_SndHeapAlloc + movs r4, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + mov r0, r8 + mov r1, r4 + mov r2, r5 + mov r3, #0x0 + bl NNS_SndArcReadFile + cmp r5, r0 + addne sp, sp, #0x8 + movne r0, #0x0 + ldmneia sp!, {r4-r8,pc} + mov r0, r4 + mov r1, r5 + bl DC_StoreRange + mov r0, r4 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + + arm_func_start NNSi_SndArcLoadWaveArc +NNSi_SndArcLoadWaveArc: ; 0x020C31D4 + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl NNS_SndArcGetWaveArcInfo + cmp r0, #0x0 + moveq r0, #0x5 + ldmeqia sp!, {r4-r6,pc} + ands r1, r6, #0x4 + beq _020C324C + ldrb r1, [r0, #0x3] + ands r1, r1, #0x1 + beq _020C3224 + ldr r0, [r0, #0x0] + mov r1, r5 + mov r0, r0, lsl #0x8 + mov r2, r4 + mov r0, r0, lsr #0x8 + bl LoadWaveArcTable + b _020C323C +_020C3224: + ldr r0, [r0, #0x0] + mov r1, r5 + mov r0, r0, lsl #0x8 + mov r2, r4 + mov r0, r0, lsr #0x8 + bl LoadWaveArc +_020C323C: + cmp r0, #0x0 + bne _020C325C + mov r0, #0x9 + ldmia sp!, {r4-r6,pc} +_020C324C: + ldr r0, [r0, #0x0] + mov r0, r0, lsl #0x8 + mov r0, r0, lsr #0x8 + bl NNS_SndArcGetFileAddress +_020C325C: + ldr r1, [sp, #0x10] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start NNSi_SndArcLoadBank +NNSi_SndArcLoadBank: ; 0x020C3270 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r10, r1 + mov r9, r2 + mov r11, r3 + bl NNS_SndArcGetBankInfo + movs r8, r0 + addeq sp, sp, #0xc + moveq r0, #0x4 + ldmeqia sp!, {r4-r11,pc} + ands r0, r10, #0x2 + beq _020C32C4 + ldr r0, [r8, #0x0] + mov r1, r9 + mov r2, r11 + bl LoadBank + movs r7, r0 + bne _020C32D0 + add sp, sp, #0xc + mov r0, #0x8 + ldmia sp!, {r4-r11,pc} +_020C32C4: + ldr r0, [r8, #0x0] + bl NNS_SndArcGetFileAddress + mov r7, r0 +_020C32D0: + and r5, r10, #0x4 + mov r6, #0x0 +_020C32D8: + add r0, r8, r6, lsl #0x1 + ldrh r0, [r0, #0x4] + ldr r1, _020C33B4 ; =0x0000FFFF + cmp r0, r1 + beq _020C3390 + bl NNS_SndArcGetWaveArcInfo + movs r4, r0 + addeq sp, sp, #0xc + moveq r0, #0x5 + ldmeqia sp!, {r4-r11,pc} + add r0, sp, #0x4 + str r0, [sp, #0x0] + add r0, r8, r6, lsl #0x1 + ldrh r0, [r0, #0x4] + mov r1, r10 + mov r2, r9 + mov r3, r11 + bl NNSi_SndArcLoadWaveArc + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,pc} + ldrb r0, [r4, #0x3] + ands r0, r0, #0x1 + beq _020C3370 + cmp r5, #0x0 + beq _020C3370 + str r9, [sp, #0x0] + ldr r1, [r4, #0x0] + ldr r0, [sp, #0x4] + mov r3, r1, lsl #0x8 + mov r1, r7 + mov r2, r6 + mov r3, r3, lsr #0x8 + bl LoadSingleWaves + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x9 + ldmeqia sp!, {r4-r11,pc} +_020C3370: + cmp r7, #0x0 + beq _020C3390 + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020C3390 + mov r0, r7 + mov r1, r6 + bl SND_AssignWaveArc +_020C3390: + add r6, r6, #0x1 + cmp r6, #0x4 + blt _020C32D8 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + strne r7, [r0, #0x0] + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C33B4: .word 0x0000FFFF + + arm_func_start NNSi_SndArcLoadSeqArc +NNSi_SndArcLoadSeqArc: ; 0x020C33B8 + stmdb sp!, {r4-r6,lr} + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl NNS_SndArcGetSeqArcInfo + cmp r0, #0x0 + moveq r0, #0x3 + ldmeqia sp!, {r4-r6,pc} + ands r1, r6, #0x8 + beq _020C3400 + ldr r0, [r0, #0x0] + mov r1, r5 + mov r2, r4 + bl LoadSeqArc + cmp r0, #0x0 + bne _020C3408 + mov r0, #0x7 + ldmia sp!, {r4-r6,pc} +_020C3400: + ldr r0, [r0, #0x0] + bl NNS_SndArcGetFileAddress +_020C3408: + ldr r1, [sp, #0x10] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + + arm_func_start NNSi_SndArcLoadSeq +NNSi_SndArcLoadSeq: ; 0x020C341C + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + mov r7, r1 + mov r6, r2 + mov r5, r3 + bl NNS_SndArcGetSeqInfo + movs r4, r0 + addeq sp, sp, #0x4 + moveq r0, #0x2 + ldmeqia sp!, {r4-r7,pc} + mov r0, #0x0 + str r0, [sp, #0x0] + ldrh r0, [r4, #0x4] + mov r1, r7 + mov r2, r6 + mov r3, r5 + bl NNSi_SndArcLoadBank + cmp r0, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {r4-r7,pc} + ands r0, r7, #0x1 + beq _020C3498 + ldr r0, [r4, #0x0] + mov r1, r6 + mov r2, r5 + bl LoadSeq + cmp r0, #0x0 + bne _020C34A0 + add sp, sp, #0x4 + mov r0, #0x6 + ldmia sp!, {r4-r7,pc} +_020C3498: + ldr r0, [r4, #0x0] + bl NNS_SndArcGetFileAddress +_020C34A0: + ldr r1, [sp, #0x18] + cmp r1, #0x0 + strne r0, [r1, #0x0] + mov r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + + arm_func_start NNSi_SndArcLoadGroup +NNSi_SndArcLoadGroup: ; 0x020C34B8 + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0xc + mov r9, r1 + bl NNS_SndArcGetGroupInfo + movs r8, r0 + addeq sp, sp, #0xc + moveq r0, #0x1 + ldmeqia sp!, {r4-r11,pc} + ldr r0, [r8, #0x0] + mov r7, #0x0 + cmp r0, #0x0 + bls _020C35D4 + add r6, r8, #0x4 + str r7, [sp, #0x4] + mov r11, r7 + mov r10, r7 + mov r5, r7 + mov r4, #0x1 +_020C3500: + ldrb r0, [r6, #0x0] + cmp r0, #0x3 + addls pc, pc, r0, lsl #0x2 + b _020C35C0 + ; Jump table + b _020C3520 ; case 0 + b _020C3570 ; case 1 + b _020C3598 ; case 2 + b _020C3548 ; case 3 +_020C3520: + str r5, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r2, r9 + mov r3, r4 + bl NNSi_SndArcLoadSeq + cmp r0, #0x0 + beq _020C35C0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020C3548: + str r10, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r2, r9 + mov r3, r4 + bl NNSi_SndArcLoadSeqArc + cmp r0, #0x0 + beq _020C35C0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020C3570: + str r11, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r2, r9 + mov r3, r4 + bl NNSi_SndArcLoadBank + cmp r0, #0x0 + beq _020C35C0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} +_020C3598: + ldr r0, [sp, #0x4] + mov r2, r9 + str r0, [sp, #0x0] + ldrb r1, [r6, #0x1] + ldr r0, [r6, #0x4] + mov r3, r4 + bl NNSi_SndArcLoadWaveArc + cmp r0, #0x0 + addne sp, sp, #0xc + ldmneia sp!, {r4-r11,pc} +_020C35C0: + ldr r0, [r8, #0x0] + add r7, r7, #0x1 + cmp r7, r0 + add r6, r6, #0x8 + blo _020C3500 +_020C35D4: + mov r0, #0x0 + add sp, sp, #0xc + ldmia sp!, {r4-r11,pc} + + arm_func_start NNS_SndArcLoadSeqEx +NNS_SndArcLoadSeqEx: ; 0x020C35E0 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r12, #0x0 + mov r3, #0x1 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadSeq + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndArcLoadWaveArc +NNS_SndArcLoadWaveArc: ; 0x020C360C + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r12, #0x0 + mov r1, #0xff + mov r3, #0x1 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadWaveArc + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndArcLoadBank +NNS_SndArcLoadBank: ; 0x020C3640 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r12, #0x0 + mov r1, #0xff + mov r3, #0x1 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadBank + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndArcLoadSeq +NNS_SndArcLoadSeq: ; 0x020C3674 + stmdb sp!, {lr} + sub sp, sp, #0x4 + mov r2, r1 + mov r12, #0x0 + mov r1, #0xff + mov r3, #0x1 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadSeq + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndArcLoadGroup +NNS_SndArcLoadGroup: ; 0x020C36A8 + stmdb sp!, {lr} + sub sp, sp, #0x4 + bl NNSi_SndArcLoadGroup + cmp r0, #0x0 + moveq r0, #0x1 + movne r0, #0x0 + add sp, sp, #0x4 + ldmia sp!, {pc} diff --git a/arm9/asm/NNS_SND_sndarc_player.s b/arm9/asm/NNS_SND_sndarc_player.s new file mode 100644 index 00000000..c043967b --- /dev/null +++ b/arm9/asm/NNS_SND_sndarc_player.s @@ -0,0 +1,261 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .text + + arm_func_start StartSeqArc +StartSeqArc: ; 0x020C36C8 + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x8 + mov r7, r2 + mov r2, r3 + ldr r6, [sp, #0x20] + mov r4, r0 + mov r8, r1 + bl NNSi_SndPlayerAllocSeqPlayer + movs r5, r0 + addeq sp, sp, #0x8 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + mov r0, r8 + mov r1, r5 + bl NNSi_SndPlayerAllocHeap + add r12, sp, #0x4 + mov r2, r0 + mov r0, r7 + mov r1, #0x6 + mov r3, #0x0 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadBank + cmp r0, #0x0 + beq _020C373C + mov r0, r5 + bl NNSi_SndPlayerFreeSeqPlayer + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020C373C: + ldr r12, [sp, #0x24] + ldr r2, [r6, #0x0] + ldr r1, [r12, #0x18] + ldr r3, [sp, #0x4] + mov r0, r5 + add r1, r12, r1 + bl NNSi_SndPlayerStartSeq + ldrb r1, [r6, #0x6] + mov r0, r4 + bl NNS_SndPlayerSetInitialVolume + ldrb r1, [r6, #0x7] + mov r0, r4 + bl NNS_SndPlayerSetChannelPriority + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + mov r0, r4 + bl NNS_SndPlayerSetSeqArcNo + mov r0, #0x1 + add sp, sp, #0x8 + ldmia sp!, {r4-r8,pc} + + arm_func_start StartSeq +StartSeq: ; 0x020C378C + stmdb sp!, {r4-r8,lr} + sub sp, sp, #0x10 + mov r8, r2 + mov r2, r3 + ldr r5, [sp, #0x28] + mov r6, r0 + mov r7, r1 + bl NNSi_SndPlayerAllocSeqPlayer + movs r4, r0 + addeq sp, sp, #0x10 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + mov r0, r7 + mov r1, r4 + bl NNSi_SndPlayerAllocHeap + mov r7, r0 + add r12, sp, #0x8 + mov r0, r8 + mov r2, r7 + mov r1, #0x6 + mov r3, #0x0 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadBank + cmp r0, #0x0 + beq _020C3804 + mov r0, r4 + bl NNSi_SndPlayerFreeSeqPlayer + add sp, sp, #0x10 + mov r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020C3804: + ldr r0, [sp, #0x2c] + add r12, sp, #0x4 + mov r2, r7 + mov r1, #0x1 + mov r3, #0x0 + str r12, [sp, #0x0] + bl NNSi_SndArcLoadSeq + cmp r0, #0x0 + beq _020C383C + mov r0, r4 + bl NNSi_SndPlayerFreeSeqPlayer + add sp, sp, #0x10 + mov r0, #0x0 + ldmia sp!, {r4-r8,pc} +_020C383C: + ldr r2, [sp, #0x4] + ldr r3, [sp, #0x8] + ldr r1, [r2, #0x18] + mov r0, r4 + add r1, r2, r1 + mov r2, #0x0 + bl NNSi_SndPlayerStartSeq + ldrb r1, [r5, #0x6] + mov r0, r6 + bl NNS_SndPlayerSetInitialVolume + ldrb r1, [r5, #0x7] + mov r0, r6 + bl NNS_SndPlayerSetChannelPriority + ldr r1, [sp, #0x2c] + mov r0, r6 + bl NNS_SndPlayerSetSeqNo + mov r0, #0x1 + add sp, sp, #0x10 + ldmia sp!, {r4-r8,pc} + + arm_func_start NNS_SndArcPlayerStartSeqArc +NNS_SndArcPlayerStartSeqArc: ; 0x020C3888 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x14 + mov r6, r1 + mov r7, r0 + mov r0, r6 + mov r5, r2 + bl NNS_SndArcGetSeqArcInfo + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + ldr r0, [r0, #0x0] + bl NNS_SndArcGetFileAddress + movs r4, r0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + mov r1, r5 + bl NNSi_SndSeqArcGetSeqInfo + cmp r0, #0x0 + addeq sp, sp, #0x14 + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + str r0, [sp, #0x0] + str r4, [sp, #0x4] + str r6, [sp, #0x8] + str r5, [sp, #0xc] + ldrb r1, [r0, #0x9] + ldrh r2, [r0, #0x4] + ldrb r3, [r0, #0x8] + mov r0, r7 + bl StartSeqArc + add sp, sp, #0x14 + ldmia sp!, {r4-r7,pc} + + arm_func_start NNS_SndArcPlayerStartSeqEx +NNS_SndArcPlayerStartSeqEx: ; 0x020C3910 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0xc + mov r7, r0 + ldr r0, [sp, #0x20] + mov r6, r1 + mov r5, r2 + mov r4, r3 + bl NNS_SndArcGetSeqInfo + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r7,pc} + cmp r4, #0x0 + ldrltb r4, [r0, #0x8] + cmp r5, #0x0 + ldrlth r5, [r0, #0x4] + cmp r6, #0x0 + ldrltb r6, [r0, #0x9] + ldr r12, [sp, #0x20] + mov r2, r5 + str r0, [sp, #0x0] + mov r0, r7 + mov r1, r6 + mov r3, r4 + str r12, [sp, #0x4] + bl StartSeq + add sp, sp, #0xc + ldmia sp!, {r4-r7,pc} + + arm_func_start NNS_SndArcPlayerStartSeq +NNS_SndArcPlayerStartSeq: ; 0x020C3980 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl NNS_SndArcGetSeqInfo + cmp r0, #0x0 + addeq sp, sp, #0xc + moveq r0, #0x0 + ldmeqia sp!, {r4-r5,pc} + str r0, [sp, #0x0] + str r4, [sp, #0x4] + ldrb r1, [r0, #0x9] + ldrh r2, [r0, #0x4] + ldrb r3, [r0, #0x8] + mov r0, r5 + bl StartSeq + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + + arm_func_start NNS_SndArcPlayerSetup +NNS_SndArcPlayerSetup: ; 0x020C39CC + stmdb sp!, {r4-r8,lr} + mov r6, r0 + bl NNS_SndArcGetCurrent + mov r5, #0x0 + mov r7, r5 +_020C39E0: + mov r0, r5 + bl NNS_SndArcGetPlayerInfo + movs r4, r0 + beq _020C3A58 + ldrb r1, [r4, #0x0] + mov r0, r5 + bl NNS_SndPlayerSetPlayableSeqCount + ldrh r1, [r4, #0x2] + mov r0, r5 + bl NNS_SndPlayerSetAllocatableChannel + ldr r0, [r4, #0x4] + cmp r0, #0x0 + beq _020C3A58 + cmp r6, #0x0 + beq _020C3A58 + ldrb r0, [r4, #0x0] + mov r8, r7 + cmp r0, #0x0 + ble _020C3A58 +_020C3A2C: + ldr r2, [r4, #0x4] + mov r0, r5 + mov r1, r6 + bl NNS_SndPlayerCreateHeap + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4-r8,pc} + ldrb r0, [r4, #0x0] + add r8, r8, #0x1 + cmp r8, r0 + blt _020C3A2C +_020C3A58: + add r5, r5, #0x1 + cmp r5, #0x20 + blt _020C39E0 + mov r0, #0x1 + ldmia sp!, {r4-r8,pc} diff --git a/arm9/asm/NNS_SND_sndarc_stream.s b/arm9/asm/NNS_SND_sndarc_stream.s new file mode 100644 index 00000000..1962bdcc --- /dev/null +++ b/arm9/asm/NNS_SND_sndarc_stream.s @@ -0,0 +1,263 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sPrepareThread +sPrepareThread: ; 0x021D2900 + .space 0x4 + + .global sFreeCommandList +sFreeCommandList: ; 0x021D2904 + .space 0xC + ; sStrmThread + .global sStrmThread +sStrmThread: ; 0x021D2910 + .space 0x4EC + + .global sStrmPlayer +sStrmPlayer: ; 0x021D2DFC + .space 0x5c0 + + .section .text + + arm_func_start FreeCommandBuffer +FreeCommandBuffer: ; 0x020C3A6C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + bl OS_DisableInterrupts + mov r4, r0 + ldr r0, _020C3A9C ; =sFreeCommandList + mov r1, r5 + bl NNS_FndAppendListObject + mov r0, r4 + bl OS_RestoreInterrupts + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C3A9C: .word sFreeCommandList + + arm_func_start RemoveCommandByPlayer +RemoveCommandByPlayer: ; 0x020C3AA0 + stmdb sp!, {r4-r8,lr} + mov r8, r0 + mov r7, r1 + bl OS_DisableInterrupts + mov r6, r0 + mov r0, r8 + mov r1, #0x0 + bl NNS_FndGetNextListObject + movs r5, r0 + beq _020C3B04 +_020C3AC8: + mov r0, r8 + mov r1, r5 + bl NNS_FndGetNextListObject + ldr r1, [r5, #0x8] + mov r4, r0 + cmp r1, r7 + bne _020C3AF8 + mov r0, r8 + mov r1, r5 + bl NNS_FndRemoveListObject + mov r0, r5 + bl FreeCommandBuffer +_020C3AF8: + mov r5, r4 + cmp r4, #0x0 + bne _020C3AC8 +_020C3B04: + mov r0, r6 + bl OS_RestoreInterrupts + ldmia sp!, {r4-r8,pc} + + arm_func_start FreeChannel +FreeChannel: ; 0x020C3B10 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x120] + cmp r1, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + sub r1, r1, #0x1 + str r1, [r0, #0x120] + ldr r1, [r0, #0x120] + cmp r1, #0x0 + addne sp, sp, #0x4 + ldmneia sp!, {pc} + bl NNS_SndStrmFreeChannel + add sp, sp, #0x4 + ldmia sp!, {pc} + + local_arm_func_start ShutdownPlayer +ShutdownPlayer: ; 0x020C3B4C + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r1, [r4, #0x110] + mov r1, r1, lsl #0x1f + movs r1, r1, asr #0x1f + ldmeqia sp!, {r4,pc} + bl FreeChannel + ldr r1, [r4, #0x164] + mov r0, r4 + blx r1 + ldr r0, _020C3BA8 ; =sStrmThread + 0x4E0 + mov r1, r4 + bl RemoveCommandByPlayer + ldr r0, _020C3BAC ; =sPrepareThread + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020C3B9C + mov r1, r4 + add r0, r0, #0x4e0 + bl RemoveCommandByPlayer +_020C3B9C: + mov r0, r4 + bl FreePlayer + ldmia sp!, {r4,pc} + .balign 4 +_020C3BA8: .word sStrmThread + 0x4E0 +_020C3BAC: .word sPrepareThread + + local_arm_func_start ForceStopStrm +ForceStopStrm: ; 0x020C3BB0 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, _020C3C40 ; =sStrmThread + 0x4C8 + bl OS_LockMutex + ldr r0, _020C3C44 ; =sPrepareThread + ldr r1, [r0, #0x0] + cmp r1, #0x0 + beq _020C3BDC + ldr r0, _020C3C48 ; =0x000004C8 + add r0, r1, r0 + bl OS_LockMutex +_020C3BDC: + ldr r0, [r4, #0x110] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + beq _020C3BF4 + mov r0, r4 + bl NNS_SndStrmStop +_020C3BF4: + ldr r0, [r4, #0x110] + mov r0, r0, lsl #0x1f + movs r0, r0, asr #0x1f + beq _020C3C10 + ldr r1, [r4, #0x16c] + mov r0, r4 + blx r1 +_020C3C10: + mov r0, r4 + bl ShutdownPlayer + ldr r0, _020C3C40 ; =sStrmThread + 0x4C8 + bl OS_UnlockMutex + ldr r0, _020C3C44 ; =sPrepareThread + ldr r1, [r0, #0x0] + cmp r1, #0x0 + ldmeqia sp!, {r4,pc} + ldr r0, _020C3C48 ; =0x000004C8 + add r0, r1, r0 + bl OS_UnlockMutex + ldmia sp!, {r4,pc} + .balign 4 +_020C3C40: .word sStrmThread + 0x4C8 +_020C3C44: .word sPrepareThread +_020C3C48: .word 0x000004C8 + + arm_func_start FreePlayer +FreePlayer: ; 0x020C3C4C + ldr r2, [r0, #0x14c] + cmp r2, #0x0 + movne r1, #0x0 + strne r1, [r2, #0x0] + strne r1, [r0, #0x14c] + ldr r1, [r0, #0x110] + bic r1, r1, #0x1 + str r1, [r0, #0x110] + ldr r1, [r0, #0x110] + bic r1, r1, #0x4 + str r1, [r0, #0x110] + ldr r1, [r0, #0x110] + bic r1, r1, #0x2 + str r1, [r0, #0x110] + bx lr + + arm_func_start NNSi_SndArcStrmMain +NNSi_SndArcStrmMain: ; 0x020C3C88 + stmdb sp!, {r4-r7,lr} + sub sp, sp, #0x4 + ldr r5, _020C3D94 ; =sStrmPlayer + mov r7, #0x0 + ldr r4, _020C3D98 ; =SNDi_DecibelTable +_020C3C9C: + ldr r1, [r5, #0x110] + mov r0, r1, lsl #0x1f + movs r0, r0, asr #0x1f + beq _020C3D7C + ldr r0, [r5, #0x114] + cmp r0, #0x0 + bne _020C3CC4 + mov r0, r5 + bl ForceStopStrm + b _020C3D7C +_020C3CC4: + mov r0, r1, lsl #0x1d + movs r0, r0, asr #0x1f + beq _020C3CFC + ldr r0, [r5, #0x118] + cmp r0, #0x0 + beq _020C3CFC + mov r0, r5 + bl NNS_SndStrmStart + ldr r0, [r5, #0x110] + orr r0, r0, #0x2 + str r0, [r5, #0x110] + ldr r0, [r5, #0x110] + bic r0, r0, #0x4 + str r0, [r5, #0x110] +_020C3CFC: + ldr r0, [r5, #0x110] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + beq _020C3D7C + add r0, r5, #0xe8 + bl NNSi_SndFaderUpdate + ldr r1, [r5, #0x154] + add r0, r5, #0xe8 + mov r1, r1, lsl #0x1 + ldrsh r6, [r4, r1] + bl NNSi_SndFaderGet + mov r0, r0, asr #0x8 + mov r0, r0, lsl #0x1 + ldrsh r1, [r4, r0] + ldr r0, [r5, #0x158] + add r6, r1, r6 + cmp r6, r0 + beq _020C3D54 + mov r0, r5 + mov r1, r6 + bl NNS_SndStrmSetVolume + str r6, [r5, #0x158] +_020C3D54: + ldr r0, [r5, #0x110] + mov r0, r0, lsl #0x1c + movs r0, r0, asr #0x1f + beq _020C3D7C + add r0, r5, #0xe8 + bl NNSi_SndFaderIsFinished + cmp r0, #0x0 + beq _020C3D7C + mov r0, r5 + bl ForceStopStrm +_020C3D7C: + add r7, r7, #0x1 + cmp r7, #0x4 + add r5, r5, #0x170 + blt _020C3C9C + add sp, sp, #0x4 + ldmia sp!, {r4-r7,pc} + .balign 4 +_020C3D94: .word sStrmPlayer +_020C3D98: .word SNDi_DecibelTable diff --git a/arm9/asm/NNS_SND_stream.s b/arm9/asm/NNS_SND_stream.s new file mode 100644 index 00000000..53432742 --- /dev/null +++ b/arm9/asm/NNS_SND_stream.s @@ -0,0 +1,456 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global bInitialized$7761 +bInitialized$7761: ; 0x021D26D4 + .space 0x4 + + .global sStrmList +sStrmList: ; 0x021D26D8 + .space 0xc + + .global buffer$7877 +buffer$7877: ; 0x021D26E4 + .space 0x40 + + .global sStrmChannel +sStrmChannel: ; 0x021D2724 + .space 0x80 + + .section .text + + local_arm_func_start EndSleep +EndSleep: ; 0x020C1198 + stmdb sp!, {r4-r6,lr} + mov r4, r0 + ldr r0, [r4, #0x24] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + ldmeqia sp!, {r4-r6,pc} + ldr r0, [r4, #0x38] + cmp r0, #0x0 + beq _020C11E8 + mov r5, #0x1 +_020C11C0: + bl OS_DisableInterrupts + mov r6, r0 + mov r0, r4 + mov r1, r5 + bl StrmCallback + mov r0, r6 + bl OS_RestoreInterrupts + ldr r0, [r4, #0x38] + cmp r0, #0x0 + bne _020C11C0 +_020C11E8: + ldr r0, [r4, #0x40] + mov r2, #0x1 + mov r1, #0x0 + mov r2, r2, lsl r0 + ldr r0, [r4, #0x44] + mov r3, r1 + bl SND_StartTimer + ldmia sp!, {r4-r6,pc} + + local_arm_func_start BeginSleep +BeginSleep: ; 0x020C1208 + stmdb sp!, {r4,lr} + ldr r1, [r0, #0x24] + mov r1, r1, lsl #0x1e + movs r1, r1, asr #0x1f + ldmeqia sp!, {r4,pc} + ldr r2, [r0, #0x40] + mov r3, #0x1 + mov r1, #0x0 + mov r2, r3, lsl r2 + ldr r0, [r0, #0x44] + mov r3, r1 + bl SND_StopTimer + bl SND_GetCurrentCommandTag + mov r4, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r4 + bl SND_WaitForCommandProc + ldmia sp!, {r4,pc} + + arm_func_start StrmCallback +StrmCallback: ; 0x020C1254 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0xc + mov r5, r0 + mov r4, r1 + ldr r0, [r5, #0x28] + ldr r1, [r5, #0x2c] + bl _u32_div_f + ldr r1, [r5, #0x48] + ldr r2, [r5, #0x38] + mov r3, r0 + mul lr, r3, r2 + cmp r1, #0x0 + mov r12, #0x0 + ble _020C12B8 + ldr r2, _020C1300 ; =sStrmChannel + ldr r0, _020C1304 ; =buffer$7877 +_020C1294: + add r1, r5, r12 + ldrb r1, [r1, #0x4c] + ldr r1, [r2, r1, lsl #0x3] + add r1, r1, lr + str r1, [r0, r12, lsl #0x2] + ldr r1, [r5, #0x48] + add r12, r12, #0x1 + cmp r12, r1 + blt _020C1294 +_020C12B8: + ldr r0, [r5, #0x20] + ldr r2, _020C1304 ; =buffer$7877 + str r0, [sp, #0x0] + ldr r12, [r5, #0x34] + mov r0, r4 + str r12, [sp, #0x4] + ldr r4, [r5, #0x30] + blx r4 + ldr r0, [r5, #0x38] + add r0, r0, #0x1 + str r0, [r5, #0x38] + ldr r1, [r5, #0x38] + ldr r0, [r5, #0x2c] + cmp r1, r0 + movge r0, #0x0 + strge r0, [r5, #0x38] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C1300: .word sStrmChannel +_020C1304: .word buffer$7877 + + local_arm_func_start AlarmCallback +AlarmCallback: ; 0x020C1308 + ldr ip, _020C1314 ; =StrmCallback + mov r1, #0x1 + bx r12 + .balign 4 +_020C1314: .word StrmCallback + + arm_func_start ShutdownStrm +ShutdownStrm: ; 0x020C1318 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x40] + bl NNS_SndFreeAlarm + ldr r0, _020C1344 ; =sStrmList + mov r1, r4 + bl NNS_FndRemoveListObject + ldr r0, [r4, #0x24] + bic r0, r0, #0x1 + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + .balign 4 +_020C1344: .word sStrmList + + local_arm_func_start ForceStopStrm +ForceStopStrm: ; 0x020C1348 + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r4, r0 + ldr r0, [r4, #0x24] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + beq _020C13B4 + ldr r0, [r4, #0x40] + mov r2, #0x1 + mov r1, #0x0 + mov r2, r2, lsl r0 + ldr r0, [r4, #0x44] + mov r3, r1 + bl SND_StopTimer + add r0, r4, #0x8 + bl PM_DeletePreSleepCallback + add r0, r4, #0x14 + bl PM_DeletePostSleepCallback + ldr r0, [r4, #0x24] + bic r0, r0, #0x2 + str r0, [r4, #0x24] + bl SND_GetCurrentCommandTag + mov r5, r0 + mov r0, #0x1 + bl SND_FlushCommand + mov r0, r5 + bl SND_WaitForCommandProc +_020C13B4: + mov r0, r4 + bl ShutdownStrm + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + + arm_func_start NNS_SndStrmSetVolume +NNS_SndStrmSetVolume: ; 0x020C13C4 + stmdb sp!, {r4-r8,lr} + mov r7, r0 + str r1, [r7, #0x3c] + ldr r0, [r7, #0x48] + mov r5, #0x0 + cmp r0, #0x0 + ldmleia sp!, {r4-r8,pc} + ldr r4, _020C142C ; =sStrmChannel + mov r8, #0x1 +_020C13E8: + add r0, r7, r5 + ldrb r6, [r0, #0x4c] + ldr r1, [r7, #0x3c] + add r0, r4, r6, lsl #0x3 + ldr r0, [r0, #0x4] + add r0, r1, r0 + bl SND_CalcChannelVolume + mov r2, r0 + mov r0, r8, lsl r6 + and r1, r2, #0xff + mov r2, r2, asr #0x8 + bl SND_SetChannelVolume + ldr r0, [r7, #0x48] + add r5, r5, #0x1 + cmp r5, r0 + blt _020C13E8 + ldmia sp!, {r4-r8,pc} + .balign 4 +_020C142C: .word sStrmChannel + + arm_func_start NNS_SndStrmStop +NNS_SndStrmStop: ; 0x020C1430 + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r1, [r0, #0x24] + mov r1, r1, lsl #0x1f + movs r1, r1, asr #0x1f + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + bl ForceStopStrm + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndStrmStart +NNS_SndStrmStart: ; 0x020C1458 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x40] + mov r2, #0x1 + mov r1, #0x0 + mov r2, r2, lsl r0 + ldr r0, [r4, #0x44] + mov r3, r1 + bl SND_StartTimer + ldr r0, [r4, #0x24] + mov r0, r0, lsl #0x1e + movs r0, r0, asr #0x1f + ldmneia sp!, {r4,pc} + add r0, r4, #0x8 + bl PM_PrependPreSleepCallback + add r0, r4, #0x14 + bl PM_AppendPostSleepCallback + ldr r0, [r4, #0x24] + orr r0, r0, #0x2 + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndStrmSetup +NNS_SndStrmSetup: ; 0x020C14AC + stmdb sp!, {r4-r11,lr} + sub sp, sp, #0x24 + mov r10, r0 + ldr r4, [r10, #0x24] + mov r9, r1 + mov r1, r4, lsl #0x1f + movs r1, r1, asr #0x1f + ldr r1, [sp, #0x4c] + str r2, [sp, #0x18] + mov r4, r3 + str r1, [sp, #0x4c] + beq _020C14E0 + bl NNS_SndStrmStop +_020C14E0: + ldr r0, [sp, #0x4c] + ldr r2, [r10, #0x48] + mov r0, r0, lsl #0x5 + mul r1, r2, r0 + mov r0, r4 + bl _u32_div_f + ldr r1, [sp, #0x4c] + ldr r2, [sp, #0x48] + mul r1, r0, r1 + mov r0, r1, lsl #0x5 + str r0, [r10, #0x28] + ldr r0, [r10, #0x28] + cmp r9, #0x1 + moveq r0, r0, lsr #0x1 + mul r0, r2, r0 + ldr r1, [sp, #0x4c] + bl _u32_div_f + str r0, [sp, #0x1c] + bl NNS_SndAllocAlarm + str r0, [r10, #0x40] + ldr r0, [r10, #0x40] + cmp r0, #0x0 + addlt sp, sp, #0x24 + movlt r0, #0x0 + ldmltia sp!, {r4-r11,pc} + ldr r0, [r10, #0x48] + mov r8, #0x0 + cmp r0, #0x0 + ble _020C15D4 + ldr r0, [sp, #0x48] + mov r7, r0, lsl #0x5 + ldr r6, _020C1668 ; =sStrmChannel + mov r5, r8 + mov r4, #0x7f + mov r11, #0x40 + mov r0, #0x1 + str r0, [sp, #0x20] +_020C1574: + ldr r2, [r10, #0x28] + ldr r1, [sp, #0x18] + add r0, r10, r8 + mla r1, r2, r8, r1 + ldrb r0, [r0, #0x4c] + ldr r3, [sp, #0x20] + str r1, [r6, r0, lsl #0x3] + add r1, r6, r0, lsl #0x3 + str r5, [r1, #0x4] + str r5, [sp, #0x0] + ldr r2, [r10, #0x28] + mov r1, r9 + mov r2, r2, lsr #0x2 + str r2, [sp, #0x4] + str r4, [sp, #0x8] + str r5, [sp, #0xc] + str r7, [sp, #0x10] + str r11, [sp, #0x14] + ldr r2, [r6, r0, lsl #0x3] + bl SND_SetupChannelPcm + ldr r0, [r10, #0x48] + add r8, r8, #0x1 + cmp r8, r0 + blt _020C1574 +_020C15D4: + str r10, [sp, #0x0] + ldr r1, [sp, #0x1c] + ldr r0, [r10, #0x40] + ldr r3, _020C166C ; =AlarmCallback + mov r2, r1 + bl SND_SetupAlarm + ldr r0, _020C1670 ; =sStrmList + mov r1, r10 + bl NNS_FndAppendListObject + ldr r0, [sp, #0x4c] + str r9, [r10, #0x20] + str r0, [r10, #0x2c] + ldr r1, [sp, #0x50] + ldr r0, [sp, #0x54] + str r1, [r10, #0x30] + str r0, [r10, #0x34] + mov r0, #0x0 + str r0, [r10, #0x38] + str r0, [r10, #0x3c] + ldr r0, [r10, #0x24] + bic r0, r0, #0x1 + orr r0, r0, #0x1 + str r0, [r10, #0x24] + bl OS_DisableInterrupts + mov r4, r0 + mov r2, #0x1 + mov r0, r10 + mov r1, #0x0 + str r2, [r10, #0x2c] + bl StrmCallback + ldr r1, [sp, #0x4c] + mov r0, r4 + str r1, [r10, #0x2c] + bl OS_RestoreInterrupts + mov r0, #0x1 + add sp, sp, #0x24 + ldmia sp!, {r4-r11,pc} + .balign 4 +_020C1668: .word sStrmChannel +_020C166C: .word AlarmCallback +_020C1670: .word sStrmList + + arm_func_start NNS_SndStrmFreeChannel +NNS_SndStrmFreeChannel: ; 0x020C1674 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x44] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + bl NNS_SndUnlockChannel + mov r0, #0x0 + str r0, [r4, #0x44] + str r0, [r4, #0x48] + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndStrmAllocChannel +NNS_SndStrmAllocChannel: ; 0x020C169C + stmdb sp!, {r4-r6,lr} + mov r5, r1 + mov r4, #0x0 + mov r6, r0 + mov r12, r4 + cmp r5, #0x0 + ble _020C16DC + mov r1, #0x1 +_020C16BC: + ldrb r3, [r2, r12] + add r0, r6, r12 + strb r3, [r0, #0x4c] + ldrb r0, [r2, r12] + add r12, r12, #0x1 + cmp r12, r5 + orr r4, r4, r1, lsl r0 + blt _020C16BC +_020C16DC: + mov r0, r4 + bl NNS_SndLockChannel + cmp r0, #0x0 + moveq r0, #0x0 + strne r5, [r6, #0x48] + strne r4, [r6, #0x44] + movne r0, #0x1 + ldmia sp!, {r4-r6,pc} + + arm_func_start NNS_SndStrmInit +NNS_SndStrmInit: ; 0x020C16FC + stmdb sp!, {r4,lr} + ldr r1, _020C176C ; =bInitialized$7761 + mov r4, r0 + ldr r0, [r1, #0x0] + cmp r0, #0x0 + bne _020C172C + ldr r0, _020C1770 ; =sStrmList + mov r1, #0x0 + bl NNS_FndInitList + ldr r0, _020C176C ; =bInitialized$7761 + mov r1, #0x1 + str r1, [r0, #0x0] +_020C172C: + ldr r1, _020C1774 ; =BeginSleep + ldr r0, _020C1778 ; =EndSleep + str r1, [r4, #0x8] + str r4, [r4, #0xc] + str r0, [r4, #0x14] + str r4, [r4, #0x18] + mov r0, #0x0 + str r0, [r4, #0x44] + str r0, [r4, #0x48] + ldr r0, [r4, #0x24] + bic r0, r0, #0x1 + str r0, [r4, #0x24] + ldr r0, [r4, #0x24] + bic r0, r0, #0x2 + str r0, [r4, #0x24] + ldmia sp!, {r4,pc} + .balign 4 +_020C176C: .word bInitialized$7761 +_020C1770: .word sStrmList +_020C1774: .word BeginSleep +_020C1778: .word EndSleep diff --git a/arm9/asm/NNS_SND_waveout.s b/arm9/asm/NNS_SND_waveout.s new file mode 100644 index 00000000..b3c6591f --- /dev/null +++ b/arm9/asm/NNS_SND_waveout.s @@ -0,0 +1,240 @@ + .include "asm/macros.inc" + .include "global.inc" + + .section .bss + + .global sWaveOut +sWaveOut: ; 0x021D1CBC + .space 0x140 + + .section .text + + arm_func_start NNS_SndWaveOutIsPlaying +NNS_SndWaveOutIsPlaying: ; 0x020C03B8 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r0, [r4, #0xc] + cmp r0, #0x0 + bne _020C03F8 + ldr r0, [r4, #0x10] + bl SND_IsFinishedCommandTag + cmp r0, #0x0 + moveq r0, #0x1 + ldmeqia sp!, {r4,pc} + mov r0, #0x1 + str r0, [r4, #0xc] +_020C03F8: + bl SND_GetChannelStatus + ldr r1, [r4, #0x0] + mov r2, #0x1 + mov r1, r2, lsl r1 + ands r0, r1, r0 + movne r0, r2 + moveq r0, #0x0 + streq r0, [r4, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndWaveOutSetPan +NNS_SndWaveOutSetPan: ; 0x020C041C + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x0] + mov r2, #0x1 + mov r0, r2, lsl r0 + bl SND_SetChannelPan + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndWaveOutSetSpeed +NNS_SndWaveOutSetSpeed: ; 0x020C044C + stmdb sp!, {r4-r5,lr} + sub sp, sp, #0x4 + mov r5, r0 + ldr r0, [r5, #0x8] + mov r4, r1 + cmp r0, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {r4-r5,pc} + ldr r2, [r5, #0x4] + ldr r0, _020C04D4 ; =0xD87F8000 + mov r3, r2, asr #0x1f + mov r1, #0x7f + bl _ll_udiv + mov r2, r4 + mov r3, r4, asr #0x1f + bl _ll_udiv + mov r2, #0x0 + mov r3, r0 + mov r0, #0x10 + cmp r1, r2 + cmpeq r3, r0 + movcc r3, r0 + blo _020C04B8 + ldr r0, _020C04D8 ; =0x0000FFFF + cmp r1, r2 + cmpeq r3, r0 + movhi r3, r0 +_020C04B8: + ldr r0, [r5, #0x0] + mov r1, #0x1 + mov r0, r1, lsl r0 + mov r1, r3 + bl SND_SetChannelTimer + add sp, sp, #0x4 + ldmia sp!, {r4-r5,pc} + .balign 4 +_020C04D4: .word 0xD87F8000 +_020C04D8: .word 0x0000FFFF + + arm_func_start NNS_SndWaveOutSetVolume +NNS_SndWaveOutSetVolume: ; 0x020C04DC + stmdb sp!, {lr} + sub sp, sp, #0x4 + ldr r2, [r0, #0x8] + cmp r2, #0x0 + addeq sp, sp, #0x4 + ldmeqia sp!, {pc} + ldr r0, [r0, #0x0] + mov r2, #0x1 + mov r0, r2, lsl r0 + mov r2, #0x0 + bl SND_SetChannelVolume + add sp, sp, #0x4 + ldmia sp!, {pc} + + arm_func_start NNS_SndWaveOutStop +NNS_SndWaveOutStop: ; 0x020C0510 + stmdb sp!, {r4,lr} + mov r4, r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ldmeqia sp!, {r4,pc} + ldr r0, [r4, #0x0] + mov r2, #0x1 + mov r1, #0x0 + mov r0, r2, lsl r0 + mov r2, r1 + mov r3, r1 + bl SND_StopTimer + mov r0, #0x0 + str r0, [r4, #0x8] + ldmia sp!, {r4,pc} + + arm_func_start NNS_SndWaveOutStart +NNS_SndWaveOutStart: ; 0x020C054C + stmdb sp!, {r4-r9,lr} + sub sp, sp, #0x1c + movs r8, r1 + mov r9, r0 + mov r7, r2 + mov r6, r3 + beq _020C0584 + cmp r8, #0x1 + ldreq r0, [sp, #0x3c] + ldreq r1, [sp, #0x38] + moveq r0, r0, asr #0x1 + moveq r5, r1, asr #0x1 + subeq r4, r0, r1, asr #0x1 + b _020C0598 +_020C0584: + ldr r0, [sp, #0x3c] + ldr r1, [sp, #0x38] + mov r0, r0, asr #0x2 + mov r5, r1, asr #0x2 + sub r4, r0, r1, asr #0x2 +_020C0598: + ldr r2, [sp, #0x40] + ldr r0, _020C0668 ; =0xD87F8000 + mov r3, r2, asr #0x1f + mov r1, #0x7f + bl _ll_udiv + ldr r2, [sp, #0x48] + mov r3, r2, asr #0x1f + bl _ll_udiv + mov r3, #0x0 + mov r2, #0x10 + cmp r1, r3 + cmpeq r0, r2 + movcc r0, r2 + blo _020C05E0 + ldr r2, _020C066C ; =0x0000FFFF + cmp r1, r3 + cmpeq r0, r2 + movhi r0, r2 +_020C05E0: + str r5, [sp, #0x0] + ldr r1, [sp, #0x44] + str r4, [sp, #0x4] + str r1, [sp, #0x8] + mov r1, #0x0 + str r1, [sp, #0xc] + cmp r6, #0x0 + movne r3, #0x1 + ldr r1, [sp, #0x4c] + str r0, [sp, #0x10] + str r1, [sp, #0x14] + ldr r0, [r9, #0x0] + moveq r3, #0x2 + mov r1, r8 + mov r2, r7 + bl SND_SetupChannelPcm + mov r1, #0x0 + ldr r0, [r9, #0x0] + mov r2, #0x1 + mov r0, r2, lsl r0 + mov r2, r1 + mov r3, r1 + bl SND_StartTimer + mov r0, #0x1 + str r0, [r9, #0x8] + mov r0, #0x0 + str r0, [r9, #0xc] + bl SND_GetCurrentCommandTag + str r0, [r9, #0x10] + ldr r1, [sp, #0x40] + mov r0, #0x1 + str r1, [r9, #0x4] + add sp, sp, #0x1c + ldmia sp!, {r4-r9,pc} + .balign 4 +_020C0668: .word 0xD87F8000 +_020C066C: .word 0x0000FFFF + + arm_func_start NNS_SndWaveOutFreeChannel +NNS_SndWaveOutFreeChannel: ; 0x020C0670 + ldr r0, [r0, #0x0] + mov r1, #0x1 + ldr ip, _020C0684 ; =NNS_SndUnlockChannel + mov r0, r1, lsl r0 + bx r12 + .balign 4 +_020C0684: .word NNS_SndUnlockChannel + + arm_func_start NNS_SndWaveOutAllocChannel +NNS_SndWaveOutAllocChannel: ; 0x020C0688 + stmdb sp!, {r4,lr} + mov r4, r0 + mov r0, #0x1 + mov r0, r0, lsl r4 + bl NNS_SndLockChannel + cmp r0, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} + mov r0, #0x14 + mul r0, r4, r0 + ldr r2, _020C06C8 ; =sWaveOut + mov r1, #0x0 + str r4, [r2, r0] + add r0, r2, r0 + str r1, [r0, #0x8] + ldmia sp!, {r4,pc} + .balign 4 +_020C06C8: .word sWaveOut diff --git a/arm9/asm/macros/function.inc b/arm9/asm/macros/function.inc index 6b9e5f40..3323f53e 100644 --- a/arm9/asm/macros/function.inc +++ b/arm9/asm/macros/function.inc @@ -4,6 +4,11 @@ .arm .endm + .macro local_arm_func_start name + .balign 4, 0 + .arm + .endm + .macro arm_func_end name .size \name, .-\name .endm diff --git a/arm9/asm/sndlib.s b/arm9/asm/sndlib.s deleted file mode 100644 index 840e72d3..00000000 --- a/arm9/asm/sndlib.s +++ /dev/null @@ -1,4758 +0,0 @@ - ; Compiled with MWCCARM 1.2 sp3 - - .include "asm/macros.inc" - .include "global.inc" - - .extern SNDi_DecibelTable - - .bss - - .global UNK_021D1C8C -UNK_021D1C8C: ; 0x021D1C8C - .space 0x4 - - .global UNK_021D1C90 -UNK_021D1C90: ; 0x021D1C90 - .space 0x4 - - .global UNK_021D1C94 -UNK_021D1C94: ; 0x021D1C94 - .space 0x4 - - .global UNK_021D1C98 -UNK_021D1C98: ; 0x021D1C98 - .space 0xc - - .global UNK_021D1CA4 -UNK_021D1CA4: ; 0x021D1CA4 - .space 0xc - - .global UNK_021D1CB0 -UNK_021D1CB0: ; 0x021D1CB0 - .space 0x4 - - .global UNK_021D1CB4 -UNK_021D1CB4: ; 0x021D1CB4 - .space 0x4 - - .global UNK_021D1CB8 -UNK_021D1CB8: ; 0x021D1CB8 - .space 0x4 - - .global UNK_021D1CBC -UNK_021D1CBC: ; 0x021D1CBC - .space 0x140 - - .global UNK_021D1DFC -UNK_021D1DFC: ; 0x021D1DFC - .space 0xc - - .global UNK_021D1E08 -UNK_021D1E08: ; 0x021D1E08 - .space 0xc - - .global UNK_021D1E14 -UNK_021D1E14: ; 0x021D1E14 - .space 0x440 - - .global UNK_021D2254 -UNK_021D2254: ; 0x021D2254 - .space 0x8 - - .global UNK_021D225C -UNK_021D225C: ; 0x021D225C - .space 0x10 - - .global UNK_021D226C -UNK_021D226C: ; 0x021D226C - .space 0x4 - - .global UNK_021D2270 -UNK_021D2270: ; 0x021D2270 - .space 0x4 - - .global UNK_021D2274 -UNK_021D2274: ; 0x021D2274 - .space 0x460 - - .global UNK_021D26D4 -UNK_021D26D4: ; 0x021D26D4 - .space 0x4 - - .global UNK_021D26D8 -UNK_021D26D8: ; 0x021D26D8 - .space 0xc - - .global UNK_021D26E4 -UNK_021D26E4: ; 0x021D26E4 - .space 0x40 - - .global UNK_021D2724 -UNK_021D2724: ; 0x021D2724 - .space 0x80 - - .global UNK_021D27A4 -UNK_021D27A4: ; 0x021D27A4 - .space 0x4 - - .global UNK_021D27A8 -UNK_021D27A8: ; 0x021D27A8 - .space 0x4 - - .global UNK_021D27AC -UNK_021D27AC: ; 0x021D27AC - .space 0x20 - - .global UNK_021D27CC -UNK_021D27CC: ; 0x021D27CC - .space 0x54 - - .global UNK_021D2820 -UNK_021D2820: ; 0x021D2820 - .space 0xa0 - - .global UNK_021D28C0 -UNK_021D28C0: ; 0x021D28C0 - .space 0x4 - - .global UNK_021D28C4 -UNK_021D28C4: ; 0x021D28C4 - .space 0x3c - - .global UNK_021D2900 -UNK_021D2900: ; 0x021D2900 - .space 0x4 - - .global UNK_021D2904 -UNK_021D2904: ; 0x021D2904 - .space 0x4d4 - - .global UNK_021D2DD8 -UNK_021D2DD8: ; 0x021D2DD8 - .space 0x18 - - .global UNK_021D2DF0 -UNK_021D2DF0: ; 0x021D2DF0 - .space 0xc - - .global UNK_021D2DFC -UNK_021D2DFC: ; 0x021D2DFC - .space 0x5c0 - - .text - - arm_func_start FUN_020C0130 -FUN_020C0130: ; 0x020C0130 - ldr ip, _020C0138 ; =FUN_020C187C - bx r12 - .balign 4 -_020C0138: .word FUN_020C187C - - arm_func_start FUN_020C013C -FUN_020C013C: ; 0x020C013C - stmdb sp!, {r4,lr} - bl FUN_020C18F8 - mov r0, #0x0 - mov r1, r0 - mov r2, r0 - mov r3, r0 - bl SND_StopTimer - bl SND_GetCurrentCommandTag - mov r4, r0 - mov r0, #0x1 - bl SND_FlushCommand - mov r0, r4 - bl SND_WaitForCommandProc - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C0174 -FUN_020C0174: ; 0x020C0174 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - beq _020C0194 - mov r0, #0x40 - bl SND_SetMasterPan - add sp, sp, #0x4 - ldmia sp!, {pc} -_020C0194: - bl SND_ResetMasterPan - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C01A0 -FUN_020C01A0: ; 0x020C01A0 - stmdb sp!, {r4,lr} - mov r4, #0x0 -_020C01A8: - mov r0, r4 - bl SND_RecvCommandReply - cmp r0, #0x0 - bne _020C01A8 - bl FUN_020C0BA0 - bl FUN_020C1D9C - bl FUN_020C3C88 - mov r0, #0x0 - bl SND_FlushCommand - ldmia sp!, {r4,pc} - - arm_func_start SDAT_Init -SDAT_Init: ; 0x020C01D0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C0254 ; =UNK_021D1C94 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {pc} - mov r1, #0x1 - str r1, [r0, #0x0] - bl SND_Init - ldr ip, _020C0258 ; =FUN_020C013C - ldr r0, _020C025C ; =UNK_021D1C98 - mov r3, #0x0 - ldr r1, _020C0260 ; =UNK_021D1CA4 - ldr r2, _020C0264 ; =FUN_020C0130 - str r12, [r0, #0x0] - str r3, [r0, #0x4] - str r2, [r1, #0x0] - str r3, [r1, #0x4] - bl PM_PrependPreSleepCallback - ldr r0, _020C0260 ; =UNK_021D1CA4 - bl PM_AppendPostSleepCallback - bl FUN_020C0270 - bl FUN_020C1E38 - bl FUN_020C0D20 - ldr r1, _020C0268 ; =UNK_021D1C8C - mvn r3, #0x0 - ldr r0, _020C026C ; =UNK_021D1C90 - mov r2, #0x1 - strb r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020C0254: .word UNK_021D1C94 -_020C0258: .word FUN_020C013C -_020C025C: .word UNK_021D1C98 -_020C0260: .word UNK_021D1CA4 -_020C0264: .word FUN_020C0130 -_020C0268: .word UNK_021D1C8C -_020C026C: .word UNK_021D1C90 - - arm_func_start FUN_020C0270 -FUN_020C0270: ; 0x020C0270 - ldr r2, _020C0290 ; =UNK_021D1CB8 - mov r3, #0x0 - ldr r1, _020C0294 ; =UNK_021D1CB0 - ldr r0, _020C0298 ; =UNK_021D1CB4 - str r3, [r2, #0x0] - str r3, [r1, #0x0] - str r3, [r0, #0x0] - bx lr - .balign 4 -_020C0290: .word UNK_021D1CB8 -_020C0294: .word UNK_021D1CB0 -_020C0298: .word UNK_021D1CB4 - - arm_func_start FUN_020C029C -FUN_020C029C: ; 0x020C029C - ldr r1, _020C02B8 ; =UNK_021D1CB4 - mov r2, #0x1 - mvn r0, r2, lsl r0 - ldr r2, [r1, #0x0] - and r0, r2, r0 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C02B8: .word UNK_021D1CB4 - - arm_func_start FUN_020C02BC -FUN_020C02BC: ; 0x020C02BC - ldr r0, _020C02FC ; =UNK_021D1CB4 - mov r3, #0x1 - ldr r2, [r0, #0x0] - mov r0, #0x0 -_020C02CC: - ands r1, r2, r3 - ldreq r1, _020C02FC ; =UNK_021D1CB4 - ldreq r2, [r1, #0x0] - orreq r2, r2, r3 - streq r2, [r1, #0x0] - bxeq lr - add r0, r0, #0x1 - cmp r0, #0x8 - mov r3, r3, lsl #0x1 - blt _020C02CC - mvn r0, #0x0 - bx lr - .balign 4 -_020C02FC: .word UNK_021D1CB4 - - arm_func_start FUN_020C0300 -FUN_020C0300: ; 0x020C0300 - ldr r1, _020C0318 ; =UNK_021D1CB0 - mvn r0, r0 - ldr r2, [r1, #0x0] - and r0, r2, r0 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020C0318: .word UNK_021D1CB0 - - arm_func_start FUN_020C031C -FUN_020C031C: - ldr r1, _020C033C ; =UNK_021D1CB0 - ldr r2, [r1, #0x0] - ands r3, r0, r2 - movne r0, #0x0 - orreq r0, r2, r0 - streq r0, [r1, #0x0] - moveq r0, #0x1 - bx lr - .balign 4 -_020C033C: .word UNK_021D1CB0 - - arm_func_start FUN_020C0340 -FUN_020C0340: - stmdb sp!, {r4,lr} - movs r4, r0 - ldmeqia sp!, {r4,pc} - mov r1, #0x0 - bl SND_UnlockChannel - ldr r0, _020C036C ; =UNK_021D1CB8 - mvn r1, r4 - ldr r2, [r0, #0x0] - and r1, r2, r1 - str r1, [r0, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020C036C: .word UNK_021D1CB8 - - arm_func_start FUN_020C0370 -FUN_020C0370: - stmdb sp!, {r4,lr} - movs r4, r0 - moveq r0, #0x1 - ldmeqia sp!, {r4,pc} - ldr r1, _020C03B4 ; =UNK_021D1CB8 - ldr r1, [r1, #0x0] - ands r1, r4, r1 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - mov r1, #0x0 - bl SND_LockChannel - ldr r1, _020C03B4 ; =UNK_021D1CB8 - mov r0, #0x1 - ldr r2, [r1, #0x0] - orr r2, r2, r4 - str r2, [r1, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020C03B4: .word UNK_021D1CB8 - - arm_func_start FUN_020C03B8 -FUN_020C03B8: ; 0x020C03B8 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x8] - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r0, [r4, #0xc] - cmp r0, #0x0 - bne _020C03F8 - ldr r0, [r4, #0x10] - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - moveq r0, #0x1 - ldmeqia sp!, {r4,pc} - mov r0, #0x1 - str r0, [r4, #0xc] -_020C03F8: - bl SND_GetChannelStatus - ldr r1, [r4, #0x0] - mov r2, #0x1 - mov r1, r2, lsl r1 - ands r0, r1, r0 - movne r0, r2 - moveq r0, #0x0 - streq r0, [r4, #0x8] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C041C -FUN_020C041C: ; 0x020C041C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x8] - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r0, [r0, #0x0] - mov r2, #0x1 - mov r0, r2, lsl r0 - bl SND_SetChannelPan - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C044C -FUN_020C044C: ; 0x020C044C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, [r5, #0x8] - mov r4, r1 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r2, [r5, #0x4] - ldr r0, _020C04D4 ; =0xD87F8000 - mov r3, r2, asr #0x1f - mov r1, #0x7f - bl _ll_udiv - mov r2, r4 - mov r3, r4, asr #0x1f - bl _ll_udiv - mov r2, #0x0 - mov r3, r0 - mov r0, #0x10 - cmp r1, r2 - cmpeq r3, r0 - movcc r3, r0 - blo _020C04B8 - ldr r0, _020C04D8 ; =0x0000FFFF - cmp r1, r2 - cmpeq r3, r0 - movhi r3, r0 -_020C04B8: - ldr r0, [r5, #0x0] - mov r1, #0x1 - mov r0, r1, lsl r0 - mov r1, r3 - bl SND_SetChannelTimer - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C04D4: .word 0xD87F8000 -_020C04D8: .word 0x0000FFFF - - arm_func_start FUN_020C04DC -FUN_020C04DC: ; 0x020C04DC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x8] - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r0, [r0, #0x0] - mov r2, #0x1 - mov r0, r2, lsl r0 - mov r2, #0x0 - bl SND_SetChannelVolume - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C0510 -FUN_020C0510: ; 0x020C0510 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x8] - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r0, [r4, #0x0] - mov r2, #0x1 - mov r1, #0x0 - mov r0, r2, lsl r0 - mov r2, r1 - mov r3, r1 - bl SND_StopTimer - mov r0, #0x0 - str r0, [r4, #0x8] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C054C -FUN_020C054C: ; 0x020C054C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x1c - movs r8, r1 - mov r9, r0 - mov r7, r2 - mov r6, r3 - beq _020C0584 - cmp r8, #0x1 - ldreq r0, [sp, #0x3c] - ldreq r1, [sp, #0x38] - moveq r0, r0, asr #0x1 - moveq r5, r1, asr #0x1 - subeq r4, r0, r1, asr #0x1 - b _020C0598 -_020C0584: - ldr r0, [sp, #0x3c] - ldr r1, [sp, #0x38] - mov r0, r0, asr #0x2 - mov r5, r1, asr #0x2 - sub r4, r0, r1, asr #0x2 -_020C0598: - ldr r2, [sp, #0x40] - ldr r0, _020C0668 ; =0xD87F8000 - mov r3, r2, asr #0x1f - mov r1, #0x7f - bl _ll_udiv - ldr r2, [sp, #0x48] - mov r3, r2, asr #0x1f - bl _ll_udiv - mov r3, #0x0 - mov r2, #0x10 - cmp r1, r3 - cmpeq r0, r2 - movcc r0, r2 - blo _020C05E0 - ldr r2, _020C066C ; =0x0000FFFF - cmp r1, r3 - cmpeq r0, r2 - movhi r0, r2 -_020C05E0: - str r5, [sp, #0x0] - ldr r1, [sp, #0x44] - str r4, [sp, #0x4] - str r1, [sp, #0x8] - mov r1, #0x0 - str r1, [sp, #0xc] - cmp r6, #0x0 - movne r3, #0x1 - ldr r1, [sp, #0x4c] - str r0, [sp, #0x10] - str r1, [sp, #0x14] - ldr r0, [r9, #0x0] - moveq r3, #0x2 - mov r1, r8 - mov r2, r7 - bl SND_SetupChannelPcm - mov r1, #0x0 - ldr r0, [r9, #0x0] - mov r2, #0x1 - mov r0, r2, lsl r0 - mov r2, r1 - mov r3, r1 - bl SND_StartTimer - mov r0, #0x1 - str r0, [r9, #0x8] - mov r0, #0x0 - str r0, [r9, #0xc] - bl SND_GetCurrentCommandTag - str r0, [r9, #0x10] - ldr r1, [sp, #0x40] - mov r0, #0x1 - str r1, [r9, #0x4] - add sp, sp, #0x1c - ldmia sp!, {r4-r9,pc} - .balign 4 -_020C0668: .word 0xD87F8000 -_020C066C: .word 0x0000FFFF - - arm_func_start FUN_020C0670 -FUN_020C0670: ; 0x020C0670 - ldr r0, [r0, #0x0] - mov r1, #0x1 - ldr ip, _020C0684 ; =FUN_020C0340 - mov r0, r1, lsl r0 - bx r12 - .balign 4 -_020C0684: .word FUN_020C0340 - - arm_func_start FUN_020C0688 -FUN_020C0688: ; 0x020C0688 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x1 - mov r0, r0, lsl r4 - bl FUN_020C0370 - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - mov r0, #0x14 - mul r0, r4, r0 - ldr r2, _020C06C8 ; =UNK_021D1CBC - mov r1, #0x0 - str r4, [r2, r0] - add r0, r2, r0 - str r1, [r0, #0x8] - ldmia sp!, {r4,pc} - .balign 4 -_020C06C8: .word UNK_021D1CBC - - arm_func_start FUN_020C06CC -FUN_020C06CC: ; 0x020C06CC - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldr r4, [r6, #0x4] - mov r5, r1 - cmp r4, #0x0 - beq _020C06F8 - mov r0, r4 - mov r1, r6 - bl FUN_020ADAB0 - mov r0, #0x0 - str r0, [r6, #0x4] -_020C06F8: - ldr r0, _020C0728 ; =UNK_021D1E08 - mov r1, r6 - bl FUN_020ADAB0 - strb r5, [r6, #0x3d] - cmp r4, #0x0 - beq _020C071C - mov r0, r4 - mov r1, r6 - bl FUN_020C0910 -_020C071C: - mov r0, r6 - bl FUN_020C08B4 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C0728: .word UNK_021D1E08 - - arm_func_start FUN_020C072C -FUN_020C072C: ; 0x020C072C - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x8] - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - bl FUN_020C2A7C - ldr r1, [r4, #0xc] - cmp r1, #0x0 - movne r0, #0x0 - strne r0, [r1, #0x8] - ldmneia sp!, {r4,pc} - ldr r1, [r4, #0x10] - ldr r2, _020C0778 ; =UNK_021D2254 - mov r0, #0x24 - mla r0, r1, r0, r2 - mov r1, r4 - add r0, r0, #0xc - bl FUN_020ADAB0 - ldmia sp!, {r4,pc} - .balign 4 -_020C0778: .word UNK_021D2254 - - arm_func_start FUN_020C077C -FUN_020C077C: ; 0x020C077C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - ldr r1, [r4, #0x0] - cmp r1, #0x0 - movne r0, #0x0 - strne r0, [r1, #0x0] - strne r0, [r4, #0x0] - ldr r5, [r4, #0x4] - mov r1, r4 - mov r0, r5 - bl FUN_020ADAB0 - mov r0, #0x0 - str r0, [r4, #0x4] - ldr r1, [r4, #0x8] - cmp r1, #0x0 - beq _020C07D8 - add r0, r5, #0xc - bl FUN_020ADBE8 - ldr r0, [r4, #0x8] - mov r1, #0x0 - str r1, [r0, #0xc] - str r1, [r4, #0x8] -_020C07D8: - ldr r0, _020C0800 ; =UNK_021D1E08 - mov r1, r4 - bl FUN_020ADAB0 - ldr r0, _020C0804 ; =UNK_021D1DFC - mov r1, r4 - bl FUN_020ADBE8 - mov r0, #0x0 - strb r0, [r4, #0x2c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C0800: .word UNK_021D1E08 -_020C0804: .word UNK_021D1DFC - - arm_func_start FUN_020C0808 -FUN_020C0808: ; 0x020C0808 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, _020C0874 ; =UNK_021D1DFC - mov r1, #0x0 - bl FUN_020ADA98 - movs r4, r0 - bne _020C0850 - ldr r0, _020C0878 ; =UNK_021D1E08 - mov r1, #0x0 - bl FUN_020ADA98 - mov r4, r0 - ldrb r1, [r4, #0x3d] - cmp r5, r1 - addlt sp, sp, #0x4 - movlt r0, #0x0 - ldmltia sp!, {r4-r5,pc} - bl FUN_020C087C -_020C0850: - ldr r0, _020C0874 ; =UNK_021D1DFC - mov r1, r4 - bl FUN_020ADAB0 - mov r0, r4 - strb r5, [r4, #0x3d] - bl FUN_020C08B4 - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C0874: .word UNK_021D1DFC -_020C0878: .word UNK_021D1E08 - - arm_func_start FUN_020C087C -FUN_020C087C: ; 0x020C087C - stmdb sp!, {r4,lr} - mov r4, r0 - ldrb r0, [r4, #0x2c] - cmp r0, #0x2 - bne _020C089C - ldrb r0, [r4, #0x3c] - ldr r1, _020C08B0 ; =0xFFFFFD2D - bl SND_SetPlayerVolume -_020C089C: - ldrb r0, [r4, #0x3c] - bl SND_StopSeq - mov r0, r4 - bl FUN_020C077C - ldmia sp!, {r4,pc} - .balign 4 -_020C08B0: .word 0xFFFFFD2D - - arm_func_start FUN_020C08B4 -FUN_020C08B4: ; 0x020C08B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, _020C090C ; =UNK_021D1E08 - mov r1, #0x0 - bl FUN_020ADA98 - movs r1, r0 - beq _020C08F8 - ldr r4, _020C090C ; =UNK_021D1E08 -_020C08D8: - ldrb r2, [r5, #0x3d] - ldrb r0, [r1, #0x3d] - cmp r2, r0 - blo _020C08F8 - mov r0, r4 - bl FUN_020ADA98 - movs r1, r0 - bne _020C08D8 -_020C08F8: - ldr r0, _020C090C ; =UNK_021D1E08 - mov r2, r5 - bl FUN_020ADB18 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C090C: .word UNK_021D1E08 - - arm_func_start FUN_020C0910 -FUN_020C0910: ; 0x020C0910 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r1, #0x0 - mov r5, r0 - bl FUN_020ADA98 - movs r1, r0 - beq _020C0950 -_020C0930: - ldrb r2, [r4, #0x3d] - ldrb r0, [r1, #0x3d] - cmp r2, r0 - blo _020C0950 - mov r0, r5 - bl FUN_020ADA98 - movs r1, r0 - bne _020C0930 -_020C0950: - mov r0, r5 - mov r2, r4 - bl FUN_020ADB18 - str r5, [r4, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C0968 -FUN_020C0968: ; 0x020C0968 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, #0x0 - strb r0, [r4, #0x2e] - strb r0, [r4, #0x2d] - strb r0, [r4, #0x2f] - strh r0, [r4, #0x34] - strh r0, [r4, #0x3e] - mov r1, #0x7f - strb r1, [r4, #0x40] - add r0, r4, #0x1c - strb r1, [r4, #0x41] - bl FUN_020C3E6C - add r0, r4, #0x1c - mov r1, #0x7f00 - mov r2, #0x1 - bl FUN_020C3E40 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C09B0 -FUN_020C09B0: ; 0x020C09B0 - stmdb sp!, {r4-r6,lr} - ldr r3, _020C0A00 ; =UNK_021D2254 - mov r2, #0x24 - mla r5, r0, r2, r3 - mov r6, r1 - add r0, r5, #0xc - mov r1, #0x0 - bl FUN_020ADA98 - movs r4, r0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r1, r4 - add r0, r5, #0xc - bl FUN_020ADAB0 - str r6, [r4, #0xc] - str r4, [r6, #0x8] - ldr r0, [r4, #0x8] - bl FUN_020C29C0 - ldr r0, [r4, #0x8] - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C0A00: .word UNK_021D2254 - - arm_func_start FUN_020C0A04 -FUN_020C0A04: ; 0x020C0A04 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - movs r5, r0 - mov r4, r1 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldrb r0, [r5, #0x2e] - cmp r4, r0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldrb r0, [r5, #0x3c] - bl SND_PauseSeq - strb r4, [r5, #0x2e] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C0A40 -FUN_020C0A40: ; 0x020C0A40 - stmdb sp!, {r4,lr} - movs r4, r0 - mov r2, r1 - ldmeqia sp!, {r4,pc} - ldrb r1, [r4, #0x2c] - cmp r1, #0x0 - ldmeqia sp!, {r4,pc} - cmp r2, #0x0 - bne _020C0A6C - bl FUN_020C087C - ldmia sp!, {r4,pc} -_020C0A6C: - add r0, r4, #0x1c - mov r1, #0x0 - bl FUN_020C3E40 - mov r0, r4 - mov r1, #0x0 - bl FUN_020C06CC - mov r0, #0x2 - strb r0, [r4, #0x2c] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C0A90 -FUN_020C0A90: ; 0x020C0A90 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldrb r0, [r5, #0x3c] - ldr r4, [r5, #0x4] - bl SND_PrepareSeq - ldr r2, [r4, #0x1c] - cmp r2, #0x0 - beq _020C0AC0 - ldrb r0, [r5, #0x3c] - ldr r1, _020C0AE4 ; =0x0000FFFF - bl SND_SetTrackAllocatableChannel -_020C0AC0: - mov r0, r5 - bl FUN_020C0968 - bl SND_GetCurrentCommandTag - str r0, [r5, #0x30] - mov r0, #0x1 - strb r0, [r5, #0x2f] - strb r0, [r5, #0x2c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C0AE4: .word 0x0000FFFF - - arm_func_start thunk_FUN_020c077c -thunk_FUN_020c077c: ; 0x020C0AE8 - ldr ip, _020C0AF0 ; =FUN_020C077C - bx r12 - .balign 4 -_020C0AF0: .word FUN_020C077C - - arm_func_start FUN_020C0AF4 -FUN_020C0AF4: ; 0x020C0AF4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr ip, _020C0B9C ; =UNK_021D2254 - mov r3, #0x24 - mov r4, r0 - ldr r5, [r4, #0x0] - mla r6, r1, r3, r12 - mov r7, r2 - cmp r5, #0x0 - beq _020C0B20 - bl FUN_020C0F68 -_020C0B20: - ldrh r1, [r6, #0x8] - ldr r0, [r6, #0x18] - cmp r1, r0 - blo _020C0B64 - mov r0, r6 - mov r1, #0x0 - bl FUN_020ADA98 - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - ldrb r1, [r0, #0x3d] - cmp r7, r1 - addlt sp, sp, #0x4 - movlt r0, #0x0 - ldmltia sp!, {r4-r7,pc} - bl FUN_020C087C -_020C0B64: - mov r0, r7 - bl FUN_020C0808 - movs r5, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - mov r0, r6 - mov r1, r5 - bl FUN_020C0910 - str r4, [r5, #0x0] - mov r0, r5 - str r5, [r4, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C0B9C: .word UNK_021D2254 - - arm_func_start FUN_020C0BA0 -FUN_020C0BA0: ; 0x020C0BA0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - bl SND_GetPlayerStatus - str r0, [sp, #0x0] - ldr r0, _020C0D14 ; =UNK_021D1E08 - mov r1, #0x0 - bl FUN_020ADA98 - movs r10, r0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,pc} - mov r0, #0x8000 - rsb r0, r0, #0x0 - ldr r4, _020C0D18 ; =SNDi_DecibelTable - str r0, [sp, #0x4] - mov r5, #0x1 - mov r11, #0x0 -_020C0BE0: - ldr r0, _020C0D14 ; =UNK_021D1E08 - mov r1, r10 - bl FUN_020ADA98 - ldrb r1, [r10, #0x2d] - mov r9, r0 - cmp r1, #0x0 - bne _020C0C0C - ldr r0, [r10, #0x30] - bl SND_IsFinishedCommandTag - cmp r0, #0x0 - strneb r5, [r10, #0x2d] -_020C0C0C: - ldrb r0, [r10, #0x2d] - cmp r0, #0x0 - beq _020C0C38 - ldrb r0, [r10, #0x3c] - mov r1, r5, lsl r0 - ldr r0, [sp, #0x0] - ands r0, r0, r1 - bne _020C0C38 - mov r0, r10 - bl FUN_020C077C - b _020C0D00 -_020C0C38: - add r0, r10, #0x1c - bl FUN_020C3DF4 - ldr r0, [r10, #0x4] - ldrb r2, [r10, #0x41] - ldrb r1, [r10, #0x40] - ldrb r0, [r0, #0x20] - mov r3, r2, lsl #0x1 - mov r2, r1, lsl #0x1 - mov r1, r0, lsl #0x1 - add r0, r10, #0x1c - ldrsh r8, [r4, r3] - ldrsh r7, [r4, r2] - ldrsh r6, [r4, r1] - bl FUN_020C3E0C - mov r0, r0, asr #0x8 - mov r2, r0, lsl #0x1 - add r1, r7, r8 - mov r0, #0x8000 - ldrsh r2, [r4, r2] - add r1, r6, r1 - rsb r0, r0, #0x0 - add r6, r2, r1 - cmp r6, r0 - ldrlt r6, [sp, #0x4] - blt _020C0CA8 - ldr r0, _020C0D1C ; =0x00007FFF - cmp r6, r0 - movgt r6, r0 -_020C0CA8: - ldrsh r0, [r10, #0x3e] - cmp r6, r0 - beq _020C0CC4 - ldrb r0, [r10, #0x3c] - mov r1, r6 - bl SND_SetPlayerVolume - strh r6, [r10, #0x3e] -_020C0CC4: - ldrb r0, [r10, #0x2c] - cmp r0, #0x2 - bne _020C0CE8 - add r0, r10, #0x1c - bl FUN_020C3DDC - cmp r0, #0x0 - beq _020C0CE8 - mov r0, r10 - bl FUN_020C087C -_020C0CE8: - ldrb r0, [r10, #0x2f] - cmp r0, #0x0 - beq _020C0D00 - ldrb r0, [r10, #0x3c] - bl SND_StartPreparedSeq - strb r11, [r10, #0x2f] -_020C0D00: - mov r10, r9 - cmp r9, #0x0 - bne _020C0BE0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020C0D14: .word UNK_021D1E08 -_020C0D18: .word SNDi_DecibelTable -_020C0D1C: .word 0x00007FFF - - arm_func_start FUN_020C0D20 -FUN_020C0D20: ; 0x020C0D20 - stmdb sp!, {r4-r10,lr} - ldr r0, _020C0DC4 ; =UNK_021D1E08 - mov r1, #0x14 - bl FUN_020ADC74 - ldr r0, _020C0DC8 ; =UNK_021D1DFC - mov r1, #0x14 - bl FUN_020ADC74 - ldr r6, _020C0DCC ; =UNK_021D1E14 - mov r7, #0x0 - ldr r4, _020C0DC8 ; =UNK_021D1DFC - mov r5, r7 -_020C0D4C: - strb r5, [r6, #0x2c] - mov r0, r4 - mov r1, r6 - strb r7, [r6, #0x3c] - bl FUN_020ADBE8 - add r7, r7, #0x1 - cmp r7, #0x10 - add r6, r6, #0x44 - blt _020C0D4C - ldr sl, _020C0DD0 ; =UNK_021D2254 - mov r9, #0x0 - mov r7, r9 - mov r4, r9 - mov r8, #0xc - mov r6, #0x7f - mov r5, #0x1 -_020C0D8C: - mov r0, r10 - mov r1, r8 - bl FUN_020ADC74 - mov r1, r7 - add r0, r10, #0xc - bl FUN_020ADC74 - strb r6, [r10, #0x20] - str r5, [r10, #0x18] - add r9, r9, #0x1 - str r4, [r10, #0x1c] - cmp r9, #0x20 - add r10, r10, #0x24 - blt _020C0D8C - ldmia sp!, {r4-r10,pc} - .balign 4 -_020C0DC4: .word UNK_021D1E08 -_020C0DC8: .word UNK_021D1DFC -_020C0DCC: .word UNK_021D1E14 -_020C0DD0: .word UNK_021D2254 - - arm_func_start FUN_020C0DD4 -FUN_020C0DD4: ; 0x020C0DD4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {pc} - ldrb r0, [r1, #0x2d] - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {pc} - ldrb r0, [r1, #0x3c] - bl SND_GetPlayerTickCounter - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C0E14 -FUN_020C0E14: ; 0x020C0E14 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - mvneq r0, #0x0 - bxeq lr - ldrh r0, [r1, #0x34] - cmp r0, #0x1 - mvnne r0, #0x0 - ldreqh r0, [r1, #0x38] - bx lr - - arm_func_start FUN_020C0E38 -FUN_020C0E38: ; 0x020C0E38 - ldr r12, [r0, #0x0] - cmp r12, #0x0 - bxeq lr - mov r3, #0x2 - strh r3, [r12, #0x34] - ldr r3, [r0, #0x0] - strh r1, [r3, #0x38] - ldr r0, [r0, #0x0] - strh r2, [r0, #0x3a] - bx lr - - arm_func_start FUN_020C0E60 -FUN_020C0E60: ; 0x020C0E60 - ldr r3, [r0, #0x0] - cmp r3, #0x0 - movne r2, #0x1 - strneh r2, [r3, #0x34] - ldrne r0, [r0, #0x0] - strneh r1, [r0, #0x38] - bx lr - - arm_func_start FUN_020C0E7C -FUN_020C0E7C: ; 0x020C0E7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldrb r0, [r0, #0x3c] - bl SND_SetTrackPan - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C0EA4 -FUN_020C0EA4: ; 0x020C0EA4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldrb r0, [r0, #0x3c] - bl SND_SetTrackPitch - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C0ECC -FUN_020C0ECC: ; 0x020C0ECC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldrb r0, [r0, #0x3c] - bl SND_SetPlayerChannelPriority - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C0EF4 -FUN_020C0EF4: ; 0x020C0EF4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x0] - cmp r3, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldrb r0, [r3, #0x2c] - cmp r0, #0x2 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - add r0, r3, #0x1c - mov r1, r1, lsl #0x8 - bl FUN_020C3E40 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C0F30 -FUN_020C0F30: ; 0x020C0F30 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - strneb r1, [r0, #0x40] - bx lr - - arm_func_start FUN_020C0F40 -FUN_020C0F40: ; 0x020C0F40 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - strneb r1, [r0, #0x41] - bx lr - - arm_func_start FUN_020C0F50 -FUN_020C0F50: ; 0x020C0F50 - mov r1, #0x24 - mul r1, r0, r1 - ldr r0, _020C0F64 ; =UNK_021D225C - ldrh r0, [r0, r1] - bx lr - .balign 4 -_020C0F64: .word UNK_021D225C - - arm_func_start FUN_020C0F68 -FUN_020C0F68: ; 0x020C0F68 - ldr r2, [r0, #0x0] - cmp r2, #0x0 - movne r1, #0x0 - strne r1, [r2, #0x0] - strne r1, [r0, #0x0] - bx lr - - arm_func_start FUN_020C0F80 -FUN_020C0F80: ; 0x020C0F80 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - - arm_func_start FUN_020C0F8C -FUN_020C0F8C: ; 0x020C0F8C - ldr ip, _020C0F98 ; =FUN_020C0A04 - ldr r0, [r0, #0x0] - bx r12 - .balign 4 -_020C0F98: .word FUN_020C0A04 - - arm_func_start FUN_020C0F9C -FUN_020C0F9C: ; 0x020C0F9C - stmdb sp!, {r4-r6,lr} - ldr r4, _020C0FD8 ; =UNK_021D1E14 - mov r6, r0 - mov r5, #0x0 -_020C0FAC: - ldrb r0, [r4, #0x2c] - cmp r0, #0x0 - beq _020C0FC4 - mov r0, r4 - mov r1, r6 - bl FUN_020C0A40 -_020C0FC4: - add r5, r5, #0x1 - cmp r5, #0x10 - add r4, r4, #0x44 - blt _020C0FAC - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C0FD8: .word UNK_021D1E14 - - arm_func_start FUN_020C0FDC -FUN_020C0FDC: ; 0x020C0FDC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r4, _020C103C ; =UNK_021D1E14 - mov r7, r0 - mov r6, r1 - mov r5, #0x0 -_020C0FF4: - ldrb r0, [r4, #0x2c] - cmp r0, #0x0 - beq _020C1024 - ldrh r0, [r4, #0x34] - cmp r0, #0x1 - bne _020C1024 - ldrh r0, [r4, #0x38] - cmp r0, r7 - bne _020C1024 - mov r0, r4 - mov r1, r6 - bl FUN_020C0A40 -_020C1024: - add r5, r5, #0x1 - cmp r5, #0x10 - add r4, r4, #0x44 - blt _020C0FF4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C103C: .word UNK_021D1E14 - - arm_func_start FUN_020C1040 -FUN_020C1040: ; 0x020C1040 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r3, _020C109C ; =UNK_021D2254 - mov r2, #0x24 - mla r4, r0, r2, r3 - ldr r5, _020C10A0 ; =UNK_021D1E14 - mov r7, r1 - mov r6, #0x0 -_020C1060: - ldrb r0, [r5, #0x2c] - cmp r0, #0x0 - beq _020C1084 - ldr r0, [r5, #0x4] - cmp r0, r4 - bne _020C1084 - mov r0, r5 - mov r1, r7 - bl FUN_020C0A40 -_020C1084: - add r6, r6, #0x1 - cmp r6, #0x10 - add r5, r5, #0x44 - blt _020C1060 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C109C: .word UNK_021D2254 -_020C10A0: .word UNK_021D1E14 - - arm_func_start FUN_020C10A4 -FUN_020C10A4: ; 0x020C10A4 - ldr ip, _020C10B0 ; =FUN_020C0A40 - ldr r0, [r0, #0x0] - bx r12 - .balign 4 -_020C10B0: .word FUN_020C0A40 - - arm_func_start FUN_020C10B4 -FUN_020C10B4: - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r5, r2 - mov r6, r0 - mov r0, r1 - mov r3, #0x0 - ldr r2, _020C1140 ; =FUN_020C072C - add r1, r5, #0x14 - str r3, [sp, #0x0] - bl SDATi_AllocAndInitChunk - movs r4, r0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r2, #0x0 - str r2, [r4, #0xc] - str r6, [r4, #0x10] - mov r1, r5 - add r0, r4, #0x14 - str r2, [r4, #0x8] - bl FUN_020C2A94 - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r2, _020C1144 ; =UNK_021D2254 - mov r1, #0x24 - mla r2, r6, r1, r2 - str r0, [r4, #0x8] - mov r1, r4 - add r0, r2, #0xc - bl FUN_020ADBE8 - mov r0, #0x1 - add sp, sp, #0x8 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C1140: .word FUN_020C072C -_020C1144: .word UNK_021D2254 - - arm_func_start FUN_020C1148 -FUN_020C1148: ; 0x020C1148 - mov r2, #0x24 - mul r2, r0, r2 - ldr r0, _020C115C ; =UNK_021D2270 - str r1, [r0, r2] - bx lr - .balign 4 -_020C115C: .word UNK_021D2270 - - arm_func_start FUN_020C1160 -FUN_020C1160: ; 0x020C1160 - mov r2, #0x24 - mul r2, r0, r2 - mov r0, r1, lsl #0x10 - ldr r1, _020C117C ; =UNK_021D226C - mov r0, r0, lsr #0x10 - str r0, [r1, r2] - bx lr - .balign 4 -_020C117C: .word UNK_021D226C - - arm_func_start FUN_020C1180 -FUN_020C1180: ; 0x020C1180 - mov r2, #0x24 - mul r2, r0, r2 - ldr r0, _020C1194 ; =UNK_021D2274 - strb r1, [r0, r2] - bx lr - .balign 4 -_020C1194: .word UNK_021D2274 - - arm_func_start FUN_020C1198 -FUN_020C1198: ; 0x020C1198 - stmdb sp!, {r4-r6,lr} - mov r4, r0 - ldr r0, [r4, #0x24] - mov r0, r0, lsl #0x1e - movs r0, r0, asr #0x1f - ldmeqia sp!, {r4-r6,pc} - ldr r0, [r4, #0x38] - cmp r0, #0x0 - beq _020C11E8 - mov r5, #0x1 -_020C11C0: - bl OS_DisableInterrupts - mov r6, r0 - mov r0, r4 - mov r1, r5 - bl FUN_020C1254 - mov r0, r6 - bl OS_RestoreInterrupts - ldr r0, [r4, #0x38] - cmp r0, #0x0 - bne _020C11C0 -_020C11E8: - ldr r0, [r4, #0x40] - mov r2, #0x1 - mov r1, #0x0 - mov r2, r2, lsl r0 - ldr r0, [r4, #0x44] - mov r3, r1 - bl SND_StartTimer - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020C1208 -FUN_020C1208: ; 0x020C1208 - stmdb sp!, {r4,lr} - ldr r1, [r0, #0x24] - mov r1, r1, lsl #0x1e - movs r1, r1, asr #0x1f - ldmeqia sp!, {r4,pc} - ldr r2, [r0, #0x40] - mov r3, #0x1 - mov r1, #0x0 - mov r2, r3, lsl r2 - ldr r0, [r0, #0x44] - mov r3, r1 - bl SND_StopTimer - bl SND_GetCurrentCommandTag - mov r4, r0 - mov r0, #0x1 - bl SND_FlushCommand - mov r0, r4 - bl SND_WaitForCommandProc - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C1254 -FUN_020C1254: ; 0x020C1254 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - ldr r0, [r5, #0x28] - ldr r1, [r5, #0x2c] - bl _u32_div_f - ldr r1, [r5, #0x48] - ldr r2, [r5, #0x38] - mov r3, r0 - mul lr, r3, r2 - cmp r1, #0x0 - mov r12, #0x0 - ble _020C12B8 - ldr r2, _020C1300 ; =UNK_021D2724 - ldr r0, _020C1304 ; =UNK_021D26E4 -_020C1294: - add r1, r5, r12 - ldrb r1, [r1, #0x4c] - ldr r1, [r2, r1, lsl #0x3] - add r1, r1, lr - str r1, [r0, r12, lsl #0x2] - ldr r1, [r5, #0x48] - add r12, r12, #0x1 - cmp r12, r1 - blt _020C1294 -_020C12B8: - ldr r0, [r5, #0x20] - ldr r2, _020C1304 ; =UNK_021D26E4 - str r0, [sp, #0x0] - ldr r12, [r5, #0x34] - mov r0, r4 - str r12, [sp, #0x4] - ldr r4, [r5, #0x30] - blx r4 - ldr r0, [r5, #0x38] - add r0, r0, #0x1 - str r0, [r5, #0x38] - ldr r1, [r5, #0x38] - ldr r0, [r5, #0x2c] - cmp r1, r0 - movge r0, #0x0 - strge r0, [r5, #0x38] - add sp, sp, #0xc - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C1300: .word UNK_021D2724 -_020C1304: .word UNK_021D26E4 - - arm_func_start FUN_020C1308 -FUN_020C1308: ; 0x020C1308 - ldr ip, _020C1314 ; =FUN_020C1254 - mov r1, #0x1 - bx r12 - .balign 4 -_020C1314: .word FUN_020C1254 - - arm_func_start FUN_020C1318 -FUN_020C1318: ; 0x020C1318 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x40] - bl FUN_020C029C - ldr r0, _020C1344 ; =UNK_021D26D8 - mov r1, r4 - bl FUN_020ADAB0 - ldr r0, [r4, #0x24] - bic r0, r0, #0x1 - str r0, [r4, #0x24] - ldmia sp!, {r4,pc} - .balign 4 -_020C1344: .word UNK_021D26D8 - - arm_func_start FUN_020C1348 -FUN_020C1348: ; 0x020C1348 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - ldr r0, [r4, #0x24] - mov r0, r0, lsl #0x1e - movs r0, r0, asr #0x1f - beq _020C13B4 - ldr r0, [r4, #0x40] - mov r2, #0x1 - mov r1, #0x0 - mov r2, r2, lsl r0 - ldr r0, [r4, #0x44] - mov r3, r1 - bl SND_StopTimer - add r0, r4, #0x8 - bl PM_DeletePreSleepCallback - add r0, r4, #0x14 - bl PM_DeletePostSleepCallback - ldr r0, [r4, #0x24] - bic r0, r0, #0x2 - str r0, [r4, #0x24] - bl SND_GetCurrentCommandTag - mov r5, r0 - mov r0, #0x1 - bl SND_FlushCommand - mov r0, r5 - bl SND_WaitForCommandProc -_020C13B4: - mov r0, r4 - bl FUN_020C1318 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C13C4 -FUN_020C13C4: ; 0x020C13C4 - stmdb sp!, {r4-r8,lr} - mov r7, r0 - str r1, [r7, #0x3c] - ldr r0, [r7, #0x48] - mov r5, #0x0 - cmp r0, #0x0 - ldmleia sp!, {r4-r8,pc} - ldr r4, _020C142C ; =UNK_021D2724 - mov r8, #0x1 -_020C13E8: - add r0, r7, r5 - ldrb r6, [r0, #0x4c] - ldr r1, [r7, #0x3c] - add r0, r4, r6, lsl #0x3 - ldr r0, [r0, #0x4] - add r0, r1, r0 - bl SND_CalcChannelVolume - mov r2, r0 - mov r0, r8, lsl r6 - and r1, r2, #0xff - mov r2, r2, asr #0x8 - bl SND_SetChannelVolume - ldr r0, [r7, #0x48] - add r5, r5, #0x1 - cmp r5, r0 - blt _020C13E8 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020C142C: .word UNK_021D2724 - - arm_func_start FUN_020C1430 -FUN_020C1430: ; 0x020C1430 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, [r0, #0x24] - mov r1, r1, lsl #0x1f - movs r1, r1, asr #0x1f - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - bl FUN_020C1348 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C1458 -FUN_020C1458: ; 0x020C1458 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x40] - mov r2, #0x1 - mov r1, #0x0 - mov r2, r2, lsl r0 - ldr r0, [r4, #0x44] - mov r3, r1 - bl SND_StartTimer - ldr r0, [r4, #0x24] - mov r0, r0, lsl #0x1e - movs r0, r0, asr #0x1f - ldmneia sp!, {r4,pc} - add r0, r4, #0x8 - bl PM_PrependPreSleepCallback - add r0, r4, #0x14 - bl PM_AppendPostSleepCallback - ldr r0, [r4, #0x24] - orr r0, r0, #0x2 - str r0, [r4, #0x24] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C14AC -FUN_020C14AC: ; 0x020C14AC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x24 - mov r10, r0 - ldr r4, [r10, #0x24] - mov r9, r1 - mov r1, r4, lsl #0x1f - movs r1, r1, asr #0x1f - ldr r1, [sp, #0x4c] - str r2, [sp, #0x18] - mov r4, r3 - str r1, [sp, #0x4c] - beq _020C14E0 - bl FUN_020C1430 -_020C14E0: - ldr r0, [sp, #0x4c] - ldr r2, [r10, #0x48] - mov r0, r0, lsl #0x5 - mul r1, r2, r0 - mov r0, r4 - bl _u32_div_f - ldr r1, [sp, #0x4c] - ldr r2, [sp, #0x48] - mul r1, r0, r1 - mov r0, r1, lsl #0x5 - str r0, [r10, #0x28] - ldr r0, [r10, #0x28] - cmp r9, #0x1 - moveq r0, r0, lsr #0x1 - mul r0, r2, r0 - ldr r1, [sp, #0x4c] - bl _u32_div_f - str r0, [sp, #0x1c] - bl FUN_020C02BC - str r0, [r10, #0x40] - ldr r0, [r10, #0x40] - cmp r0, #0x0 - addlt sp, sp, #0x24 - movlt r0, #0x0 - ldmltia sp!, {r4-r11,pc} - ldr r0, [r10, #0x48] - mov r8, #0x0 - cmp r0, #0x0 - ble _020C15D4 - ldr r0, [sp, #0x48] - mov r7, r0, lsl #0x5 - ldr r6, _020C1668 ; =UNK_021D2724 - mov r5, r8 - mov r4, #0x7f - mov r11, #0x40 - mov r0, #0x1 - str r0, [sp, #0x20] -_020C1574: - ldr r2, [r10, #0x28] - ldr r1, [sp, #0x18] - add r0, r10, r8 - mla r1, r2, r8, r1 - ldrb r0, [r0, #0x4c] - ldr r3, [sp, #0x20] - str r1, [r6, r0, lsl #0x3] - add r1, r6, r0, lsl #0x3 - str r5, [r1, #0x4] - str r5, [sp, #0x0] - ldr r2, [r10, #0x28] - mov r1, r9 - mov r2, r2, lsr #0x2 - str r2, [sp, #0x4] - str r4, [sp, #0x8] - str r5, [sp, #0xc] - str r7, [sp, #0x10] - str r11, [sp, #0x14] - ldr r2, [r6, r0, lsl #0x3] - bl SND_SetupChannelPcm - ldr r0, [r10, #0x48] - add r8, r8, #0x1 - cmp r8, r0 - blt _020C1574 -_020C15D4: - str r10, [sp, #0x0] - ldr r1, [sp, #0x1c] - ldr r0, [r10, #0x40] - ldr r3, _020C166C ; =FUN_020C1308 - mov r2, r1 - bl SND_SetupAlarm - ldr r0, _020C1670 ; =UNK_021D26D8 - mov r1, r10 - bl FUN_020ADBE8 - ldr r0, [sp, #0x4c] - str r9, [r10, #0x20] - str r0, [r10, #0x2c] - ldr r1, [sp, #0x50] - ldr r0, [sp, #0x54] - str r1, [r10, #0x30] - str r0, [r10, #0x34] - mov r0, #0x0 - str r0, [r10, #0x38] - str r0, [r10, #0x3c] - ldr r0, [r10, #0x24] - bic r0, r0, #0x1 - orr r0, r0, #0x1 - str r0, [r10, #0x24] - bl OS_DisableInterrupts - mov r4, r0 - mov r2, #0x1 - mov r0, r10 - mov r1, #0x0 - str r2, [r10, #0x2c] - bl FUN_020C1254 - ldr r1, [sp, #0x4c] - mov r0, r4 - str r1, [r10, #0x2c] - bl OS_RestoreInterrupts - mov r0, #0x1 - add sp, sp, #0x24 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020C1668: .word UNK_021D2724 -_020C166C: .word FUN_020C1308 -_020C1670: .word UNK_021D26D8 - - arm_func_start FUN_020C1674 -FUN_020C1674: ; 0x020C1674 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x44] - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - bl FUN_020C0340 - mov r0, #0x0 - str r0, [r4, #0x44] - str r0, [r4, #0x48] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C169C -FUN_020C169C: ; 0x020C169C - stmdb sp!, {r4-r6,lr} - mov r5, r1 - mov r4, #0x0 - mov r6, r0 - mov r12, r4 - cmp r5, #0x0 - ble _020C16DC - mov r1, #0x1 -_020C16BC: - ldrb r3, [r2, r12] - add r0, r6, r12 - strb r3, [r0, #0x4c] - ldrb r0, [r2, r12] - add r12, r12, #0x1 - cmp r12, r5 - orr r4, r4, r1, lsl r0 - blt _020C16BC -_020C16DC: - mov r0, r4 - bl FUN_020C0370 - cmp r0, #0x0 - moveq r0, #0x0 - strne r5, [r6, #0x48] - strne r4, [r6, #0x44] - movne r0, #0x1 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020C16FC -FUN_020C16FC: ; 0x020C16FC - stmdb sp!, {r4,lr} - ldr r1, _020C176C ; =UNK_021D26D4 - mov r4, r0 - ldr r0, [r1, #0x0] - cmp r0, #0x0 - bne _020C172C - ldr r0, _020C1770 ; =UNK_021D26D8 - mov r1, #0x0 - bl FUN_020ADC74 - ldr r0, _020C176C ; =UNK_021D26D4 - mov r1, #0x1 - str r1, [r0, #0x0] -_020C172C: - ldr r1, _020C1774 ; =FUN_020C1208 - ldr r0, _020C1778 ; =FUN_020C1198 - str r1, [r4, #0x8] - str r4, [r4, #0xc] - str r0, [r4, #0x14] - str r4, [r4, #0x18] - mov r0, #0x0 - str r0, [r4, #0x44] - str r0, [r4, #0x48] - ldr r0, [r4, #0x24] - bic r0, r0, #0x1 - str r0, [r4, #0x24] - ldr r0, [r4, #0x24] - bic r0, r0, #0x2 - str r0, [r4, #0x24] - ldmia sp!, {r4,pc} - .balign 4 -_020C176C: .word UNK_021D26D4 -_020C1770: .word UNK_021D26D8 -_020C1774: .word FUN_020C1208 -_020C1778: .word FUN_020C1198 - - arm_func_start FUN_020C177C -FUN_020C177C: ; 0x020C177C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - ldr r4, [r7, #0x18] - ldr r0, [r7, #0x1c] - ldr r1, _020C186C ; =UNK_021D27A4 - mul r0, r4, r0 - ldr r3, [r7, #0xc] - ldr r2, [r7, #0x10] - ldr r1, [r1, #0x0] - add r6, r3, r0 - cmp r1, #0x0 - add r5, r2, r0 - beq _020C180C - ldr r2, _020C1870 ; =UNK_021D27A8 - mov r1, #0x14 - ldr r2, [r2, #0x0] - ldr r3, _020C1874 ; =UNK_021D2820 - mul r1, r2, r1 - str r7, [r3, r1] - add r1, r3, r1 - str r4, [r1, #0x4] - str r0, [r1, #0x8] - str r6, [r1, #0xc] - ldr r0, _020C1878 ; =UNK_021D27AC - mov r2, #0x0 - str r5, [r1, #0x10] - bl OS_SendMessage - ldr r0, _020C1870 ; =UNK_021D27A8 - ldr r1, [r0, #0x0] - add r1, r1, #0x1 - str r1, [r0, #0x0] - cmp r1, #0x8 - movge r1, #0x0 - strge r1, [r0, #0x0] - b _020C1844 -_020C180C: - mov r0, r6 - mov r1, r4 - bl DC_InvalidateRange - mov r0, r5 - mov r1, r4 - bl DC_InvalidateRange - ldr r1, [r7, #0x38] - mov r0, r6 - str r1, [sp, #0x0] - ldr r3, [r7, #0x8] - ldr r6, [r7, #0x34] - mov r1, r5 - mov r2, r4 - blx r6 -_020C1844: - ldr r0, [r7, #0x1c] - add r0, r0, #0x1 - str r0, [r7, #0x1c] - ldr r1, [r7, #0x1c] - ldr r0, [r7, #0x30] - cmp r1, r0 - movge r0, #0x0 - strge r0, [r7, #0x1c] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C186C: .word UNK_021D27A4 -_020C1870: .word UNK_021D27A8 -_020C1874: .word UNK_021D2820 -_020C1878: .word UNK_021D27AC - - arm_func_start FUN_020C187C -FUN_020C187C: ; 0x020C187C - stmdb sp!, {r4,lr} - ldr r4, _020C18F4 ; =UNK_021D27CC - ldr r0, [r4, #0x0] - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - mov r0, #0x0 - str r0, [r4, #0x1c] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x14] - bl MIi_CpuClear32 - ldr r1, [r4, #0x10] - ldr r2, [r4, #0x14] - mov r0, #0x0 - bl MIi_CpuClear32 - ldr r0, [r4, #0xc] - ldr r1, [r4, #0x14] - bl DC_FlushRange - ldr r0, [r4, #0x10] - ldr r1, [r4, #0x14] - bl DC_FlushRange - ldr r1, [r4, #0x2c] - mov r3, #0x0 - cmp r1, #0x0 - movge r0, #0x1 - movge r2, r0, lsl r1 - ldr r0, [r4, #0x24] - ldr r1, [r4, #0x28] - movlt r2, #0x0 - bl SND_StartTimer - ldmia sp!, {r4,pc} - .balign 4 -_020C18F4: .word UNK_021D27CC - - arm_func_start FUN_020C18F8 -FUN_020C18F8: - stmdb sp!, {r4,lr} - ldr r3, _020C194C ; =UNK_021D27CC - ldr r0, [r3, #0x0] - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r1, [r3, #0x2c] - cmp r1, #0x0 - movge r0, #0x1 - movge r2, r0, lsl r1 - ldr r0, [r3, #0x24] - ldr r1, [r3, #0x28] - movlt r2, #0x0 - mov r3, #0x0 - bl SND_StopTimer - bl SND_GetCurrentCommandTag - mov r4, r0 - mov r0, #0x1 - bl SND_FlushCommand - mov r0, r4 - bl SND_WaitForCommandProc - ldmia sp!, {r4,pc} - .balign 4 -_020C194C: .word UNK_021D27CC - - arm_func_start FUN_020C1950 -FUN_020C1950: ; 0x020C1950 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r4, _020C1A3C ; =UNK_021D27CC - ldr r0, [r4, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - ldr r1, [r4, #0x2c] - mov r3, #0x0 - cmp r1, #0x0 - movge r7, #0x1 - movlt r7, #0x0 - cmp r7, #0x0 - movne r0, #0x1 - movne r2, r0, lsl r1 - ldr r0, [r4, #0x24] - ldr r1, [r4, #0x28] - moveq r2, #0x0 - bl SND_StopTimer - cmp r7, #0x0 - beq _020C19DC - bl SND_GetCurrentCommandTag - mov r5, r0 - mov r0, #0x1 - bl SND_FlushCommand - mov r0, r5 - bl SND_WaitForCommandProc - ldr r6, _020C1A40 ; =UNK_021D27AC - mov r5, #0x0 -_020C19C4: - mov r0, r6 - mov r1, r5 - mov r2, r5 - bl OS_ReceiveMessage - cmp r0, #0x0 - bne _020C19C4 -_020C19DC: - ldr r0, [r4, #0x28] - cmp r0, #0x0 - beq _020C19EC - bl FUN_020C0300 -_020C19EC: - ldr r0, [r4, #0x20] - cmp r0, #0x0 - beq _020C19FC - bl FUN_020C0340 -_020C19FC: - cmp r7, #0x0 - beq _020C1A0C - ldr r0, [r4, #0x2c] - bl FUN_020C029C -_020C1A0C: - ldr r0, [r4, #0x4] - cmp r0, #0x1 - bne _020C1A2C - mov r0, #0x0 - mov r1, r0 - mov r2, r0 - mov r3, r0 - bl SND_SetOutputSelector -_020C1A2C: - mov r0, #0x0 - str r0, [r4, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C1A3C: .word UNK_021D27CC -_020C1A40: .word UNK_021D27AC - - arm_func_start FUN_020C1A44 -FUN_020C1A44: ; 0x020C1A44 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x3c - mov r10, r3 - str r0, [sp, #0x18] - str r2, [sp, #0x20] - mov r2, #0x0 - str r1, [sp, #0x1c] - mov r0, r1 - mov r1, r10 - ldr r9, [sp, #0x6c] - ldr r8, [sp, #0x74] - str r2, [sp, #0x2c] - mvn r6, #0x0 - ldr r4, _020C1D90 ; =UNK_021D27CC - bl DC_FlushRange - ldr r0, [sp, #0x20] - mov r1, r10 - bl DC_FlushRange - ldr r0, [sp, #0x60] - ldr r1, [sp, #0x70] - cmp r0, #0x1 - moveq r7, #0x1 - ldr r0, _020C1D94 ; =0x00FFB0FF - movne r7, #0x0 - bl _s32_div_f - ldr r1, [sp, #0x84] - mov r11, r0 - cmp r1, #0x0 - beq _020C1B00 - add r1, r11, #0x10 - bic r11, r1, #0x1f - mov r2, r11, asr #0x5 - mov r0, r10 - cmp r7, #0x0 - ldr r1, [sp, #0x80] - moveq r0, r10, lsr #0x1 - str r2, [sp, #0x34] - bl _u32_div_f - ldr r1, [sp, #0x34] - mov r5, #0x20 - mul r0, r1, r0 - str r0, [sp, #0x30] - cmp r7, #0x0 - ldr r0, [sp, #0x34] - moveq r5, r5, lsr #0x1 - mul r0, r5, r0 - mov r5, r0 -_020C1B00: - cmp r7, #0x0 - movne r0, #0x0 - strne r0, [sp, #0x28] - moveq r0, #0x1 - streq r0, [sp, #0x28] - cmp r7, #0x0 - movne r0, #0x1 - strne r0, [sp, #0x24] - moveq r0, #0x0 - streq r0, [sp, #0x24] - ldr r0, [sp, #0x18] - cmp r0, #0x2 - movne r0, #0xa - strne r0, [sp, #0x2c] - ldr r0, [sp, #0x84] - cmp r0, #0x0 - beq _020C1B58 - bl FUN_020C02BC - movs r6, r0 - addmi sp, sp, #0x3c - movmi r0, #0x0 - ldmmiia sp!, {r4-r11,pc} -_020C1B58: - mov r0, #0x3 - bl FUN_020C031C - cmp r0, #0x0 - bne _020C1B84 - cmp r6, #0x0 - blt _020C1B78 - mov r0, r6 - bl FUN_020C029C -_020C1B78: - add sp, sp, #0x3c - mov r0, #0x0 - ldmia sp!, {r4-r11,pc} -_020C1B84: - mov r0, #0xa - bl FUN_020C0370 - cmp r0, #0x0 - bne _020C1BB8 - cmp r6, #0x0 - blt _020C1BA4 - mov r0, r6 - bl FUN_020C029C -_020C1BA4: - mov r0, #0x3 - bl FUN_020C0300 - add sp, sp, #0x3c - mov r0, #0x0 - ldmia sp!, {r4-r11,pc} -_020C1BB8: - mov r0, #0x0 - mov r7, r10, lsr #0x2 - str r0, [sp, #0x0] - str r7, [sp, #0x4] - str r8, [sp, #0x8] - str r0, [sp, #0xc] - cmp r9, #0x0 - movne r3, #0x1 - ldr r1, [sp, #0x78] - str r11, [sp, #0x10] - str r1, [sp, #0x14] - ldr r1, [sp, #0x28] - ldr r2, [sp, #0x1c] - moveq r3, #0x2 - mov r0, #0x1 - bl SND_SetupChannelPcm - ldr r1, [sp, #0x64] - str r9, [sp, #0x0] - str r1, [sp, #0x4] - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x24] - str r0, [sp, #0x8] - ldr r2, [sp, #0x1c] - mov r0, #0x0 - mov r3, r7 - bl SND_SetupCapture - mov r0, #0x0 - str r0, [sp, #0x0] - str r7, [sp, #0x4] - str r8, [sp, #0x8] - str r0, [sp, #0xc] - cmp r9, #0x0 - movne r3, #0x1 - ldr r2, [sp, #0x7c] - str r11, [sp, #0x10] - str r2, [sp, #0x14] - ldr r1, [sp, #0x28] - ldr r2, [sp, #0x20] - moveq r3, #0x2 - mov r0, #0x3 - bl SND_SetupChannelPcm - ldr r2, [sp, #0x64] - str r9, [sp, #0x0] - str r2, [sp, #0x4] - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x24] - str r0, [sp, #0x8] - ldr r2, [sp, #0x20] - mov r3, r7 - mov r0, #0x1 - bl SND_SetupCapture - cmp r6, #0x0 - blt _020C1CA8 - ldr r2, [sp, #0x30] - ldr r3, _020C1D98 ; =FUN_020C177C - mov r1, r2 - mov r0, r6 - add r1, r1, r5 - str r4, [sp, #0x0] - bl SND_SetupAlarm -_020C1CA8: - ldr r0, [sp, #0x18] - cmp r0, #0x1 - bne _020C1CC8 - mov r0, #0x1 - mov r2, r0 - mov r3, r0 - mov r1, #0x2 - bl SND_SetOutputSelector -_020C1CC8: - cmp r6, #0x0 - movge r0, #0x1 - movge r2, r0, lsl r6 - ldr r0, [sp, #0x2c] - movlt r2, #0x0 - mov r1, #0x3 - mov r3, #0x0 - bl SND_StartTimer - mov r0, #0x1 - str r0, [r4, #0x0] - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x80] - str r0, [r4, #0x4] - mov r0, #0xa - str r0, [r4, #0x20] - ldr r0, [sp, #0x2c] - str r0, [r4, #0x24] - mov r0, #0x3 - str r0, [r4, #0x28] - ldr r0, [sp, #0x60] - str r6, [r4, #0x2c] - str r0, [r4, #0x8] - ldr r0, [sp, #0x1c] - str r0, [r4, #0xc] - ldr r0, [sp, #0x20] - str r0, [r4, #0x10] - mov r0, r10 - str r10, [r4, #0x14] - bl _u32_div_f - str r0, [r4, #0x18] - mov r1, #0x0 - str r1, [r4, #0x1c] - ldr r0, [sp, #0x80] - ldr r1, [sp, #0x84] - str r0, [r4, #0x30] - ldr r0, [sp, #0x88] - str r1, [r4, #0x34] - str r0, [r4, #0x38] - add r0, r4, #0x3c - str r8, [r4, #0x50] - bl FUN_020C3E6C - add r0, r4, #0x3c - mov r1, r8, lsl #0x8 - mov r2, #0x1 - bl FUN_020C3E40 - mov r0, #0x0 - str r0, [r4, #0x4c] - mov r0, #0x1 - add sp, sp, #0x3c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020C1D90: .word UNK_021D27CC -_020C1D94: .word 0x00FFB0FF -_020C1D98: .word FUN_020C177C - - arm_func_start FUN_020C1D9C -FUN_020C1D9C: ; 0x020C1D9C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020C1E34 ; =UNK_021D27CC - ldr r0, [r5, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r0, [r5, #0x4] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,pc} - add r4, r5, #0x3c - mov r0, r4 - bl FUN_020C3DF4 - ldr r0, [r5, #0x4c] - cmp r0, #0x0 - beq _020C1DFC - mov r0, r4 - bl FUN_020C3DDC - cmp r0, #0x0 - beq _020C1DFC - bl FUN_020C1950 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020C1DFC: - mov r0, r4 - bl FUN_020C3E0C - ldr r1, [r5, #0x50] - mov r4, r0, asr #0x8 - cmp r4, r1 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r0, [r5, #0x24] - mov r1, r4 - mov r2, #0x0 - bl SND_SetChannelVolume - str r4, [r5, #0x50] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C1E34: .word UNK_021D27CC - - arm_func_start FUN_020C1E38 -FUN_020C1E38: ; 0x020C1E38 - ldr r1, _020C1E50 ; =UNK_021D27A4 - mov r2, #0x0 - ldr r0, _020C1E54 ; =UNK_021D27CC - str r2, [r1, #0x0] - str r2, [r0, #0x0] - bx lr - .balign 4 -_020C1E50: .word UNK_021D27A4 -_020C1E54: .word UNK_021D27CC - - arm_func_start FUN_020C1E58 -FUN_020C1E58: ; 0x020C1E58 - ldr r0, _020C1E64 ; =UNK_021D27CC - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020C1E64: .word UNK_021D27CC - - arm_func_start FUN_020C1E68 -FUN_020C1E68: ; 0x020C1E68 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020C1EA0 ; =UNK_021D27CC - ldr r1, [r0, #0x0] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r0, [r0, #0x4] - cmp r0, #0x1 - addne sp, sp, #0x4 - ldmneia sp!, {pc} - bl FUN_020C1950 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020C1EA0: .word UNK_021D27CC - - arm_func_start FUN_020C1EA4 -FUN_020C1EA4: ; 0x020C1EA4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x2c - mov r5, r0 - mov r4, r1 - mov r7, r2 - mov r6, r3 - bl FUN_020C1E68 - ldr r0, _020C1F50 ; =UNK_021D27CC - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x2c - movne r0, #0x0 - ldmneia sp!, {r4-r7,pc} - mov r1, r5 - mov r2, r4 - mov r0, #0x0 - bl MIi_CpuClear32 - mov r0, r5 - mov r1, r4 - bl DC_FlushRange - str r7, [sp, #0x0] - mov r2, #0x0 - str r2, [sp, #0x4] - str r2, [sp, #0x8] - mov r0, #0x1 - str r0, [sp, #0xc] - str r6, [sp, #0x10] - mov r1, #0x7f - str r1, [sp, #0x14] - str r2, [sp, #0x18] - ldr r2, [sp, #0x40] - str r1, [sp, #0x1c] - ldr r1, [sp, #0x44] - str r2, [sp, #0x20] - ldr r12, [sp, #0x48] - str r1, [sp, #0x24] - mov r1, r5 - mov r3, r4, lsr #0x1 - add r2, r5, r4, lsr #0x1 - str r12, [sp, #0x28] - bl FUN_020C1A44 - add sp, sp, #0x2c - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C1F50: .word UNK_021D27CC - - arm_func_start FUN_020C1F54 -FUN_020C1F54: ; 0x020C1F54 - stmdb sp!, {r4,lr} - ldr r4, _020C1FA0 ; =UNK_021D27CC - mov r2, r0 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r0, [r4, #0x4] - cmp r0, #0x0 - ldmneia sp!, {r4,pc} - cmp r2, #0x0 - bne _020C1F88 - bl FUN_020C1950 - ldmia sp!, {r4,pc} -_020C1F88: - add r0, r4, #0x3c - mov r1, #0x0 - bl FUN_020C3E40 - mov r0, #0x1 - str r0, [r4, #0x4c] - ldmia sp!, {r4,pc} - .balign 4 -_020C1FA0: .word UNK_021D27CC - - arm_func_start FUN_020C1FA4 -FUN_020C1FA4: ; 0x020C1FA4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, _020C1FEC ; =UNK_021D27CC - mov r12, r0 - ldr r0, [r3, #0x0] - mov r2, r1 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r0, [r3, #0x4] - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {pc} - add r0, r3, #0x3c - mov r1, r12, lsl #0x8 - bl FUN_020C3E40 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020C1FEC: .word UNK_021D27CC - - arm_func_start FUN_020C1FF0 -FUN_020C1FF0: ; 0x020C1FF0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x2c - mov r5, r0 - mov r0, #0x0 - mov r4, r1 - mov r7, r2 - mov r6, r3 - bl FUN_020C1F54 - ldr r0, _020C2098 ; =UNK_021D27CC - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addne sp, sp, #0x2c - movne r0, #0x0 - ldmneia sp!, {r4-r7,pc} - mov r1, r5 - mov r2, r4 - mov r0, #0x0 - bl MIi_CpuClear32 - mov r0, r5 - mov r1, r4 - bl DC_FlushRange - str r7, [sp, #0x0] - mov r0, #0x0 - str r0, [sp, #0x4] - str r0, [sp, #0x8] - mov r1, #0x1 - str r1, [sp, #0xc] - ldr r1, [sp, #0x40] - str r6, [sp, #0x10] - str r1, [sp, #0x14] - str r0, [sp, #0x18] - mov r1, #0x7f - str r1, [sp, #0x1c] - str r0, [sp, #0x20] - str r0, [sp, #0x24] - mov r1, r5 - mov r3, r4, lsr #0x1 - add r2, r5, r4, lsr #0x1 - str r0, [sp, #0x28] - bl FUN_020C1A44 - add sp, sp, #0x2c - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C2098: .word UNK_021D27CC - - arm_func_start SDATi_SymbDtor -SDATi_SymbDtor: ; 0x020C209C - mov r0, #0x0 - str r0, [r2, #0x88] - bx lr - - arm_func_start SDATi_FatDtor -SDATi_FatDtor: ; 0x020C20A8 - mov r0, #0x0 - str r0, [r2, #0x84] - bx lr - - arm_func_start SDATi_InfoDtor -SDATi_InfoDtor: ; 0x020C20B4 - mov r0, #0x0 - str r0, [r2, #0x8c] - bx lr - - arm_func_start FUN_020C20C0 -FUN_020C20C0: ; 0x020C20C0 - ldr r2, _020C20D8 ; =UNK_021D28C0 - ldr r2, [r2, #0x0] - ldr r2, [r2, #0x84] - add r0, r2, r0, lsl #0x4 - str r1, [r0, #0x14] - bx lr - .balign 4 -_020C20D8: .word UNK_021D28C0 - - arm_func_start FUN_020C20DC -FUN_020C20DC: - ldr r1, _020C2100 ; =UNK_021D28C0 - ldr r1, [r1, #0x0] - ldr r2, [r1, #0x84] - ldr r1, [r2, #0x8] - cmp r0, r1 - movcs r0, #0x0 - addcc r0, r2, r0, lsl #0x4 - ldrcc r0, [r0, #0x14] - bx lr - .balign 4 -_020C2100: .word UNK_021D28C0 - - arm_func_start FUN_020C2104 -FUN_020C2104: - stmdb sp!, {r4-r6,lr} - ldr r4, _020C2178 ; =UNK_021D28C0 - mov r5, r2 - ldr r4, [r4, #0x0] - mov r6, r1 - ldr r2, [r4, #0x84] - ldr r1, [r2, #0x8] - cmp r0, r1 - mvncs r0, #0x0 - ldmcsia sp!, {r4-r6,pc} - add r1, r2, #0xc - add r1, r1, r0, lsl #0x4 - ldr r0, [r1, #0x4] - ldr r1, [r1, #0x0] - sub r0, r0, r3 - cmp r5, r0 - movhi r5, r0 - add r0, r4, #0x34 - add r1, r1, r3 - mov r2, #0x0 - bl FS_SeekFile - cmp r0, #0x0 - mvneq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r1, r6 - mov r2, r5 - add r0, r4, #0x34 - bl FS_ReadFile - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C2178: .word UNK_021D28C0 - - arm_func_start FUN_020C217C -FUN_020C217C: ; 0x020C217C - ldr r1, _020C21A0 ; =UNK_021D28C0 - ldr r1, [r1, #0x0] - ldr r2, [r1, #0x84] - ldr r1, [r2, #0x8] - cmp r0, r1 - movcs r0, #0x0 - addcc r0, r2, r0, lsl #0x4 - ldrcc r0, [r0, #0x10] - bx lr - .balign 4 -_020C21A0: .word UNK_021D28C0 - - arm_func_start FUN_020C21A4 -FUN_020C21A4: ; 0x020C21A4 - ldr r1, _020C2204 ; =UNK_021D28C0 - ldr r3, [r1, #0x0] - ldr r2, [r3, #0x8c] - ldr r1, [r2, #0x1c] - cmp r1, #0x0 - moveq r2, #0x0 - addne r2, r2, r1 - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r0, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r1, [r2, #0x0] - cmp r0, r1 - movcs r0, #0x0 - bxcs lr - add r0, r2, r0, lsl #0x2 - ldr r1, [r0, #0x4] - ldr r0, [r3, #0x8c] - cmp r1, #0x0 - moveq r0, #0x0 - addne r0, r0, r1 - bx lr - .balign 4 -_020C2204: .word UNK_021D28C0 - - arm_func_start FUN_020C2208 -FUN_020C2208: ; 0x020C2208 - ldr r1, _020C2268 ; =UNK_021D28C0 - ldr r3, [r1, #0x0] - ldr r2, [r3, #0x8c] - ldr r1, [r2, #0x18] - cmp r1, #0x0 - moveq r2, #0x0 - addne r2, r2, r1 - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r0, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r1, [r2, #0x0] - cmp r0, r1 - movcs r0, #0x0 - bxcs lr - add r0, r2, r0, lsl #0x2 - ldr r1, [r0, #0x4] - ldr r0, [r3, #0x8c] - cmp r1, #0x0 - moveq r0, #0x0 - addne r0, r0, r1 - bx lr - .balign 4 -_020C2268: .word UNK_021D28C0 - - arm_func_start FUN_020C226C -FUN_020C226C: - ldr r1, _020C22CC ; =UNK_021D28C0 - ldr r3, [r1, #0x0] - ldr r2, [r3, #0x8c] - ldr r1, [r2, #0x14] - cmp r1, #0x0 - moveq r2, #0x0 - addne r2, r2, r1 - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r0, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r1, [r2, #0x0] - cmp r0, r1 - movcs r0, #0x0 - bxcs lr - add r0, r2, r0, lsl #0x2 - ldr r1, [r0, #0x4] - ldr r0, [r3, #0x8c] - cmp r1, #0x0 - moveq r0, #0x0 - addne r0, r0, r1 - bx lr - .balign 4 -_020C22CC: .word UNK_021D28C0 - - arm_func_start FUN_020C22D0 -FUN_020C22D0: ; 0x020C22D0 - ldr r1, _020C2330 ; =UNK_021D28C0 - ldr r3, [r1, #0x0] - ldr r2, [r3, #0x8c] - ldr r1, [r2, #0x10] - cmp r1, #0x0 - moveq r2, #0x0 - addne r2, r2, r1 - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r0, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r1, [r2, #0x0] - cmp r0, r1 - movcs r0, #0x0 - bxcs lr - add r0, r2, r0, lsl #0x2 - ldr r1, [r0, #0x4] - ldr r0, [r3, #0x8c] - cmp r1, #0x0 - moveq r0, #0x0 - addne r0, r0, r1 - bx lr - .balign 4 -_020C2330: .word UNK_021D28C0 - - arm_func_start FUN_020C2334 -FUN_020C2334: - ldr r1, _020C2394 ; =UNK_021D28C0 - ldr r3, [r1, #0x0] - ldr r2, [r3, #0x8c] - ldr r1, [r2, #0xc] - cmp r1, #0x0 - moveq r2, #0x0 - addne r2, r2, r1 - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r0, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r1, [r2, #0x0] - cmp r0, r1 - movcs r0, #0x0 - bxcs lr - add r0, r2, r0, lsl #0x2 - ldr r1, [r0, #0x4] - ldr r0, [r3, #0x8c] - cmp r1, #0x0 - moveq r0, #0x0 - addne r0, r0, r1 - bx lr - .balign 4 -_020C2394: .word UNK_021D28C0 - - arm_func_start FUN_020C2398 -FUN_020C2398: - ldr r1, _020C23F8 ; =UNK_021D28C0 - ldr r3, [r1, #0x0] - ldr r2, [r3, #0x8c] - ldr r1, [r2, #0x8] - cmp r1, #0x0 - moveq r2, #0x0 - addne r2, r2, r1 - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r0, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r1, [r2, #0x0] - cmp r0, r1 - movcs r0, #0x0 - bxcs lr - add r0, r2, r0, lsl #0x2 - ldr r1, [r0, #0x4] - ldr r0, [r3, #0x8c] - cmp r1, #0x0 - moveq r0, #0x0 - addne r0, r0, r1 - bx lr - .balign 4 -_020C23F8: .word UNK_021D28C0 - - arm_func_start FUN_020C23FC -FUN_020C23FC: ; 0x020C23FC - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020C2398 - cmp r0, #0x0 - moveq r0, #0x0 - addne r0, r0, #0x4 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C241C -FUN_020C241C: ; 0x020C241C - ldr r0, _020C2428 ; =UNK_021D28C0 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020C2428: .word UNK_021D28C0 - - arm_func_start FUN_020C242C -FUN_020C242C: ; 0x020C242C - ldr r1, _020C2440 ; =UNK_021D28C0 - ldr r2, [r1, #0x0] - str r0, [r1, #0x0] - mov r0, r2 - bx lr - .balign 4 -_020C2440: .word UNK_021D28C0 - - arm_func_start FUN_020C2444 -FUN_020C2444: ; 0x020C2444 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r0, r4 - mov r1, r5 - mov r2, #0x30 - bl MIi_CpuCopy32 - ldr r0, [r5, #0x18] - mov r12, #0x0 - cmp r0, #0x0 - moveq r0, #0x0 - addne r0, r4, r0 - str r0, [r5, #0x8c] - ldr r0, [r5, #0x20] - cmp r0, #0x0 - moveq r0, #0x0 - addne r0, r4, r0 - str r0, [r5, #0x84] - ldr r0, [r5, #0x10] - cmp r0, #0x0 - moveq r0, #0x0 - addne r0, r4, r0 - str r0, [r5, #0x88] - ldr r2, [r5, #0x84] - ldr r0, [r2, #0x8] - cmp r0, #0x0 - bls _020C24F0 - mov r3, r12 - mov r1, r12 -_020C24BC: - add r2, r2, #0xc - ldr r0, [r2, r3] - add r2, r2, r3 - cmp r0, #0x0 - moveq r0, r1 - addne r0, r4, r0 - str r0, [r2, #0x8] - ldr r2, [r5, #0x84] - add r12, r12, #0x1 - ldr r0, [r2, #0x8] - add r3, r3, #0x10 - cmp r12, r0 - blo _020C24BC -_020C24F0: - mov r1, #0x0 - ldr r0, _020C2508 ; =UNK_021D28C0 - str r1, [r5, #0x30] - str r5, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C2508: .word UNK_021D28C0 - - arm_func_start SDATi_ReadHeaders -SDATi_ReadHeaders: - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r6, r0 - mov r5, r1 - mov r1, #0x0 - mov r4, r2 - mov r2, r1 - add r0, r6, #0x34 - bl FS_SeekFile - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r1, r6 - add r0, r6, #0x34 - mov r2, #0x30 - bl FS_ReadFile - cmp r0, #0x30 - addne sp, sp, #0x8 - movne r0, #0x0 - ldmneia sp!, {r4-r6,pc} - cmp r5, #0x0 - beq _020C26E0 - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r1, [r6, #0x1c] - ldr r2, _020C26EC ; =SDATi_InfoDtor - mov r0, r5 - mov r3, r6 - bl SDATi_AllocAndInitChunk - str r0, [r6, #0x8c] - ldr r0, [r6, #0x8c] - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r1, [r6, #0x18] - add r0, r6, #0x34 - mov r2, #0x0 - bl FS_SeekFile - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r1, [r6, #0x8c] - ldr r2, [r6, #0x1c] - add r0, r6, #0x34 - bl FS_ReadFile - ldr r1, [r6, #0x1c] - cmp r0, r1 - addne sp, sp, #0x8 - movne r0, #0x0 - ldmneia sp!, {r4-r6,pc} - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r1, [r6, #0x24] - ldr r2, _020C26F0 ; =SDATi_FatDtor - mov r0, r5 - mov r3, r6 - bl SDATi_AllocAndInitChunk - str r0, [r6, #0x84] - ldr r0, [r6, #0x84] - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r1, [r6, #0x20] - add r0, r6, #0x34 - mov r2, #0x0 - bl FS_SeekFile - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r1, [r6, #0x84] - ldr r2, [r6, #0x24] - add r0, r6, #0x34 - bl FS_ReadFile - ldr r1, [r6, #0x24] - cmp r0, r1 - addne sp, sp, #0x8 - movne r0, #0x0 - ldmneia sp!, {r4-r6,pc} - cmp r4, #0x0 - beq _020C26E0 - ldr r1, [r6, #0x14] - cmp r1, #0x0 - beq _020C26E0 - mov r4, #0x0 - ldr r2, _020C26F4 ; =SDATi_SymbDtor - mov r0, r5 - mov r3, r6 - str r4, [sp, #0x0] - bl SDATi_AllocAndInitChunk - str r0, [r6, #0x88] - ldr r0, [r6, #0x88] - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, r4 - ldmeqia sp!, {r4-r6,pc} - ldr r1, [r6, #0x10] - add r0, r6, #0x34 - mov r2, r4 - bl FS_SeekFile - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, r4 - ldmeqia sp!, {r4-r6,pc} - ldr r1, [r6, #0x88] - ldr r2, [r6, #0x14] - add r0, r6, #0x34 - bl FS_ReadFile - ldr r1, [r6, #0x14] - cmp r0, r1 - addne sp, sp, #0x8 - movne r0, r4 - ldmneia sp!, {r4-r6,pc} -_020C26E0: - mov r0, #0x1 - add sp, sp, #0x8 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C26EC: .word SDATi_InfoDtor -_020C26F0: .word SDATi_FatDtor -_020C26F4: .word SDATi_SymbDtor - - arm_func_start SDAT_Open -SDAT_Open: ; 0x020C26F8 - ; r0: &sSoundDataBuffer - ; r1: char* filename - ; r2: (&sSoundDataBuffer)->unk_0090 - ; r3: 0 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r12, #0x0 - str r12, [r6, #0x8c] - str r12, [r6, #0x84] - add r0, r6, #0x7c - mov r5, r2 - mov r4, r3 - str r12, [r6, #0x88] - bl FS_ConvertPathToFileID - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - add r0, r6, #0x34 - bl FS_InitFile - add r1, r6, #0x7c - add r0, r6, #0x34 - ldmia r1, {r1-r2} - bl FS_OpenFileFast - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r3, #0x1 - mov r0, r6 - mov r1, r5 - mov r2, r4 - str r3, [r6, #0x30] - bl SDATi_ReadHeaders - cmp r0, #0x0 - ldrne r0, _020C2770 ; =UNK_021D28C0 - strne r6, [r0, #0x0] - ldmia sp!, {r4-r6,pc} - .balign 4 -_020C2770: .word UNK_021D28C0 - - arm_func_start FUN_020C2774 -FUN_020C2774: ; 0x020C2774 - stmdb sp!, {r4,lr} - bl SND_GetCurrentCommandTag - mov r4, r0 - mov r0, #0x1 - bl SND_FlushCommand - mov r0, r4 - bl SND_WaitForCommandProc - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C2794 -FUN_020C2794: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, [r5, #0x0] - mov r1, #0x14 - mov r2, #0x4 - bl FUN_020AE638 - movs r4, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,pc} - bl FUN_020C2818 - mov r1, r4 - add r0, r5, #0x4 - bl FUN_020ADBE8 - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C27DC -FUN_020C27DC: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - add r0, r5, #0x4 - mov r1, #0xc - bl FUN_020ADC74 - mov r0, r5 - str r4, [r5, #0x0] - bl FUN_020C2794 - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C2818 -FUN_020C2818: ; 0x020C2818 - ldr ip, _020C2824 ; =FUN_020ADC74 - mov r1, #0x0 - bx r12 - .balign 4 -_020C2824: .word FUN_020ADC74 - - arm_func_start FUN_020C2828 -FUN_020C2828: ; 0x020C2828 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r7, #0x0 - movs r9, r1 - mov r10, r0 - mov r6, r7 - bne _020C2850 - bl FUN_020C29C0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} -_020C2850: - ldrh r0, [r10, #0xc] - cmp r9, r0 - bge _020C28D8 - mov r11, r7 - add r5, r10, #0x4 - mov r4, #0x1 -_020C2868: - mov r0, r5 - mov r1, r11 - bl FUN_020ADA84 - mov r1, r7 - mov r8, r0 - bl FUN_020ADA84 - movs r7, r0 - beq _020C28C0 -_020C2888: - ldr r12, [r7, #0xc] - cmp r12, #0x0 - beq _020C28AC - ldr r1, [r7, #0x8] - ldr r2, [r7, #0x10] - ldr r3, [r7, #0x14] - add r0, r7, #0x20 - blx r12 - mov r6, r4 -_020C28AC: - mov r0, r8 - mov r1, r7 - bl FUN_020ADA84 - movs r7, r0 - bne _020C2888 -_020C28C0: - mov r0, r5 - mov r1, r8 - bl FUN_020ADAB0 - ldrh r0, [r10, #0xc] - cmp r9, r0 - blt _020C2868 -_020C28D8: - ldr r0, [r10, #0x0] - mov r1, r9 - bl FUN_020AE554 - cmp r6, #0x0 - beq _020C28F0 - bl FUN_020C2774 -_020C28F0: - ldrh r1, [r10, #0xc] - ldr r0, [r10, #0x0] - bl FUN_020AE5B0 - mov r0, r10 - bl FUN_020C2794 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020C290C -FUN_020C290C: ; 0x020C290C - stmdb sp!, {r4,lr} - mov r4, r0 - ldrh r1, [r4, #0xc] - ldr r0, [r4, #0x0] - bl FUN_020AE5B0 - cmp r0, #0x0 - mvneq r0, #0x0 - ldmeqia sp!, {r4,pc} - mov r0, r4 - bl FUN_020C2794 - cmp r0, #0x0 - ldrneh r0, [r4, #0xc] - subne r0, r0, #0x1 - ldmneia sp!, {r4,pc} - ldr r0, [r4, #0x0] - mov r1, #0x0 - bl FUN_020AE554 - mvn r0, #0x0 - ldmia sp!, {r4,pc} - - arm_func_start SDATi_AllocAndInitChunk -SDATi_AllocAndInitChunk: ; 0x020C2958 - stmdb sp!, {r4-r8,lr} - mov r7, r1 - mov r8, r0 - add r0, r7, #0x1f - bic r1, r0, #0x1f - mov r6, r2 - ldr r0, [r8, #0x0] - add r1, r1, #0x20 - mov r2, #0x20 - mov r5, r3 - bl FUN_020AE638 // some allocator? - movs r4, r0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - add r0, r8, #0x4 - mov r1, #0x0 - bl FUN_020ADA84 - str r7, [r4, #0x8] - str r6, [r4, #0xc] - ldr r2, [sp, #0x18] - str r5, [r4, #0x10] - mov r1, r4 - str r2, [r4, #0x14] - bl FUN_020ADBE8 - add r0, r4, #0x20 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020C29C0 -FUN_020C29C0: - stmdb sp!, {r4-r10,lr} - mov r8, r0 - mov r5, #0x0 - mov r1, r5 - add r0, r8, #0x4 - bl FUN_020ADA84 - movs r7, r0 - beq _020C2A58 - add r9, r8, #0x4 - mov r10, #0x1 - mov r4, r5 -_020C29EC: - mov r0, r7 - mov r1, r4 - bl FUN_020ADA84 - movs r6, r0 - beq _020C2A38 -_020C2A00: - ldr r12, [r6, #0xc] - cmp r12, #0x0 - beq _020C2A24 - ldr r1, [r6, #0x8] - ldr r2, [r6, #0x10] - ldr r3, [r6, #0x14] - add r0, r6, #0x20 - blx r12 - mov r5, r10 -_020C2A24: - mov r0, r7 - mov r1, r6 - bl FUN_020ADA84 - movs r6, r0 - bne _020C2A00 -_020C2A38: - mov r0, r9 - mov r1, r7 - bl FUN_020ADAB0 - mov r0, r9 - mov r1, r4 - bl FUN_020ADA84 - movs r7, r0 - bne _020C29EC -_020C2A58: - ldr r0, [r8, #0x0] - mov r1, #0x3 - bl FUN_020AE600 - cmp r5, #0x0 - beq _020C2A70 - bl FUN_020C2774 -_020C2A70: - mov r0, r8 - bl FUN_020C2794 - ldmia sp!, {r4-r10,pc} - - arm_func_start FUN_020C2A7C -FUN_020C2A7C: ; 0x020C2A7C - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020C29C0 - ldr r0, [r4, #0x0] - bl thunk_FUN_020adc8c_2 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C2A94 -FUN_020C2A94: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - add r2, r0, #0x3 - add r0, r0, r1 - bic r5, r2, #0x3 - cmp r5, r0 - addhi sp, sp, #0x4 - movhi r0, #0x0 - ldmhiia sp!, {r4-r5,pc} - sub r1, r0, r5 - cmp r1, #0x10 - addcc sp, sp, #0x4 - movcc r0, #0x0 - ldmccia sp!, {r4-r5,pc} - add r0, r5, #0x10 - sub r1, r1, #0x10 - mov r2, #0x0 - bl FUN_020AE684 - movs r4, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,pc} - mov r0, r5 - mov r1, r4 - bl FUN_020C27DC - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, r5 - ldmneia sp!, {r4-r5,pc} - mov r0, r4 - bl thunk_FUN_020adc8c_2 - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C2B1C -FUN_020C2B1C: - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x20 - mov r8, r0 - add r0, sp, #0x8 - mov r7, r1 - mov r6, r2 - mov r5, r3 - ldr r4, [sp, #0x40] - bl SND_GetFirstInstDataPos - ldr r1, [sp, #0x8] - ldr r0, [sp, #0xc] - str r1, [sp, #0x0] - str r0, [sp, #0x4] - cmp r7, #0x0 - add r2, sp, #0x0 - addeq sp, sp, #0x20 - moveq r0, #0x0 - ldmeqia sp!, {r4-r10,pc} - add r1, sp, #0x10 - mov r0, r7 - bl SND_GetNextInstData - cmp r0, #0x0 - beq _020C2BD4 - add r10, sp, #0x10 - add r9, sp, #0x0 -_020C2B80: - ldrb r0, [sp, #0x10] - cmp r0, #0x1 - bne _020C2BBC - ldrh r0, [sp, #0x14] - cmp r6, r0 - bne _020C2BBC - ldrh r1, [sp, #0x12] - mov r0, r8 - mov r2, r5 - mov r3, r4 - bl FUN_020C2BE0 - cmp r0, #0x0 - addeq sp, sp, #0x20 - moveq r0, #0x0 - ldmeqia sp!, {r4-r10,pc} -_020C2BBC: - mov r0, r7 - mov r1, r10 - mov r2, r9 - bl SND_GetNextInstData - cmp r0, #0x0 - bne _020C2B80 -_020C2BD4: - mov r0, #0x1 - add sp, sp, #0x20 - ldmia sp!, {r4-r10,pc} - - arm_func_start FUN_020C2BE0 -FUN_020C2BE0: - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl SND_GetWaveDataAddress - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, #0x1 - ldmneia sp!, {r4-r9,pc} - mov r0, r7 - bl SND_GetWaveDataCount - ldr r1, [r7, #0x38] - sub r0, r0, #0x1 - add r1, r1, r6 - add r1, r7, r1, lsl #0x2 - cmp r6, r0 - ldrcc r0, [r1, #0x40] - ldr r8, [r1, #0x3c] - ldrcs r0, [r7, #0x8] - cmp r4, #0x0 - sub r9, r0, r8 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r9,pc} - ldr r2, _020C2CBC ; =FUN_020C2CC0 - mov r0, r4 - mov r3, r7 - add r1, r9, #0x20 - str r6, [sp, #0x0] - bl SDATi_AllocAndInitChunk - movs r4, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r9,pc} - mov r0, r5 - mov r1, r4 - mov r2, r9 - mov r3, r8 - bl FUN_020C2104 - cmp r9, r0 - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r9,pc} - mov r0, r4 - mov r1, r9 - bl DC_StoreRange - mov r0, r7 - mov r1, r6 - mov r2, r4 - bl SND_SetWaveDataAddress - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020C2CBC: .word FUN_020C2CC0 - - arm_func_start FUN_020C2CC0 -FUN_020C2CC0: ; 0x020C2CC0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r2 - mov r7, r0 - mov r4, r3 - mov r6, r1 - mov r0, r5 - mov r1, r4 - bl SND_GetWaveDataAddress - cmp r7, r0 - bne _020C2CFC - mov r0, r5 - mov r1, r4 - mov r2, #0x0 - bl SND_SetWaveDataAddress -_020C2CFC: - mov r0, r7 - add r1, r7, r6 - bl SND_InvalidateWaveData - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020C2D10 -FUN_020C2D10: ; 0x020C2D10 - stmdb sp!, {r4,lr} - mov r1, r2 - mov r4, r0 - mov r2, r3 - bl FUN_020C2DD0 - mov r0, r4 - bl SND_DestroyWaveArc - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C2D30 -FUN_020C2D30: ; 0x020C2D30 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r1, r2 - mov r5, r0 - mov r2, r3 - bl FUN_020C2DD0 - mov r0, r5 - add r1, r5, r4 - bl SND_InvalidateWaveData - mov r0, r5 - bl SND_DestroyWaveArc - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C2D68 -FUN_020C2D68: ; 0x020C2D68 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r1, r2 - mov r5, r0 - mov r2, r3 - bl FUN_020C2DD0 - mov r0, r5 - add r1, r5, r4 - bl SND_InvalidateBankData - mov r0, r5 - bl SND_DestroyBank - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C2DA0 -FUN_020C2DA0: ; 0x020C2DA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r1, r2 - mov r5, r0 - mov r2, r3 - bl FUN_020C2DD0 - mov r0, r5 - add r1, r5, r4 - bl SND_InvalidateSeqData - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C2DD0 -FUN_020C2DD0: ; 0x020C2DD0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - movs r5, r1 - mov r7, r0 - mov r6, r2 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - bl OS_DisableInterrupts - mov r4, r0 - mov r0, r5 - bl FUN_020C242C - mov r5, r0 - mov r0, r6 - bl FUN_020C20DC - cmp r7, r0 - bne _020C2E1C - mov r0, r6 - mov r1, #0x0 - bl FUN_020C20C0 -_020C2E1C: - mov r0, r5 - bl FUN_020C242C - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020C2E34 -FUN_020C2E34: ; 0x020C2E34 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r9, r0 - mov r8, r1 - mov r7, r2 - bl FUN_020C20DC - movs r6, r0 - bne _020C2F40 - ldr r1, _020C2F4C ; =UNK_021D28C4 - mov r0, r9 - mov r2, #0x3c - mov r3, #0x0 - bl FUN_020C2104 - cmp r0, #0x3c - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r9,pc} - ldr r0, _020C2F4C ; =UNK_021D28C4 - cmp r8, #0x0 - ldr r0, [r0, #0x38] - addeq sp, sp, #0x4 - mov r4, r0, lsl #0x2 - mov r0, r4, lsl #0x1 - add r5, r0, #0x3c - moveq r0, #0x0 - ldmeqia sp!, {r4-r9,pc} - cmp r7, #0x0 - moveq r3, #0x0 - beq _020C2EB0 - bl FUN_020C241C - mov r3, r0 -_020C2EB0: - ldr r2, _020C2F50 ; =FUN_020C2D10 - mov r0, r8 - add r1, r5, #0x20 - str r9, [sp, #0x0] - bl SDATi_AllocAndInitChunk - movs r6, r0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r9,pc} - mov r0, r9 - mov r1, r6 - add r2, r4, #0x3c - mov r3, #0x0 - bl FUN_020C2104 - add r1, r4, #0x3c - cmp r0, r1 - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r9,pc} - ldr r1, [r6, #0x38] - add r0, r6, #0x3c - mov r2, r4 - add r1, r0, r1, lsl #0x2 - bl MI_CpuCopy8 - mov r2, r4 - add r0, r6, #0x3c - mov r1, #0x0 - bl MI_CpuFill8 - mov r0, r6 - mov r1, r5 - bl DC_StoreRange - cmp r7, #0x0 - beq _020C2F40 - mov r0, r9 - mov r1, r6 - bl FUN_020C20C0 -_020C2F40: - mov r0, r6 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020C2F4C: .word UNK_021D28C4 -_020C2F50: .word FUN_020C2D10 - - arm_func_start FUN_020C2F54 -FUN_020C2F54: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl FUN_020C20DC - movs r4, r0 - bne _020C2FBC - cmp r5, #0x0 - moveq r2, #0x0 - beq _020C2F88 - bl FUN_020C241C - mov r2, r0 -_020C2F88: - ldr r1, _020C2FC8 ; =FUN_020C2D30 - mov r0, r7 - mov r3, r7 - str r6, [sp, #0x0] - bl FUN_020C3134 - mov r4, r0 - cmp r5, #0x0 - beq _020C2FBC - cmp r4, #0x0 - beq _020C2FBC - mov r0, r7 - mov r1, r4 - bl FUN_020C20C0 -_020C2FBC: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C2FC8: .word FUN_020C2D30 - - arm_func_start FUN_020C2FCC -FUN_020C2FCC: ; 0x020C2FCC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl FUN_020C20DC - movs r4, r0 - bne _020C3034 - cmp r5, #0x0 - moveq r2, #0x0 - beq _020C3000 - bl FUN_020C241C - mov r2, r0 -_020C3000: - ldr r1, _020C3040 ; =FUN_020C2D68 - mov r0, r7 - mov r3, r7 - str r6, [sp, #0x0] - bl FUN_020C3134 - mov r4, r0 - cmp r5, #0x0 - beq _020C3034 - cmp r4, #0x0 - beq _020C3034 - mov r0, r7 - mov r1, r4 - bl FUN_020C20C0 -_020C3034: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C3040: .word FUN_020C2D68 - - arm_func_start FUN_020C3044 -FUN_020C3044: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl FUN_020C20DC - movs r4, r0 - bne _020C30AC - cmp r5, #0x0 - moveq r2, #0x0 - beq _020C3078 - bl FUN_020C241C - mov r2, r0 -_020C3078: - ldr r1, _020C30B8 ; =FUN_020C2DA0 - mov r0, r7 - mov r3, r7 - str r6, [sp, #0x0] - bl FUN_020C3134 - mov r4, r0 - cmp r5, #0x0 - beq _020C30AC - cmp r4, #0x0 - beq _020C30AC - mov r0, r7 - mov r1, r4 - bl FUN_020C20C0 -_020C30AC: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C30B8: .word FUN_020C2DA0 - - arm_func_start FUN_020C30BC -FUN_020C30BC: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - mov r5, r2 - bl FUN_020C20DC - movs r4, r0 - bne _020C3124 - cmp r5, #0x0 - moveq r2, #0x0 - beq _020C30F0 - bl FUN_020C241C - mov r2, r0 -_020C30F0: - ldr r1, _020C3130 ; =FUN_020C2DA0 - mov r0, r7 - mov r3, r7 - str r6, [sp, #0x0] - bl FUN_020C3134 - mov r4, r0 - cmp r5, #0x0 - beq _020C3124 - cmp r4, #0x0 - beq _020C3124 - mov r0, r7 - mov r1, r4 - bl FUN_020C20C0 -_020C3124: - mov r0, r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C3130: .word FUN_020C2DA0 - - arm_func_start FUN_020C3134 -FUN_020C3134: ; 0x020C3134 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x8 - mov r8, r0 - mov r7, r1 - mov r6, r2 - mov r4, r3 - bl FUN_020C217C - movs r5, r0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - ldr r0, [sp, #0x20] - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - mov r2, r7 - mov r3, r6 - add r1, r5, #0x20 - str r4, [sp, #0x0] - bl SDATi_AllocAndInitChunk - movs r4, r0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - mov r0, r8 - mov r1, r4 - mov r2, r5 - mov r3, #0x0 - bl FUN_020C2104 - cmp r5, r0 - addne sp, sp, #0x8 - movne r0, #0x0 - ldmneia sp!, {r4-r8,pc} - mov r0, r4 - mov r1, r5 - bl DC_StoreRange - mov r0, r4 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020C31D4 -FUN_020C31D4: - stmdb sp!, {r4-r6,lr} - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl FUN_020C226C - cmp r0, #0x0 - moveq r0, #0x5 - ldmeqia sp!, {r4-r6,pc} - ands r1, r6, #0x4 - beq _020C324C - ldrb r1, [r0, #0x3] - ands r1, r1, #0x1 - beq _020C3224 - ldr r0, [r0, #0x0] - mov r1, r5 - mov r0, r0, lsl #0x8 - mov r2, r4 - mov r0, r0, lsr #0x8 - bl FUN_020C2E34 - b _020C323C -_020C3224: - ldr r0, [r0, #0x0] - mov r1, r5 - mov r0, r0, lsl #0x8 - mov r2, r4 - mov r0, r0, lsr #0x8 - bl FUN_020C2F54 -_020C323C: - cmp r0, #0x0 - bne _020C325C - mov r0, #0x9 - ldmia sp!, {r4-r6,pc} -_020C324C: - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x8 - mov r0, r0, lsr #0x8 - bl FUN_020C20DC -_020C325C: - ldr r1, [sp, #0x10] - cmp r1, #0x0 - strne r0, [r1, #0x0] - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020C3270 -FUN_020C3270: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r1 - mov r9, r2 - mov r11, r3 - bl FUN_020C22D0 - movs r8, r0 - addeq sp, sp, #0xc - moveq r0, #0x4 - ldmeqia sp!, {r4-r11,pc} - ands r0, r10, #0x2 - beq _020C32C4 - ldr r0, [r8, #0x0] - mov r1, r9 - mov r2, r11 - bl FUN_020C2FCC - movs r7, r0 - bne _020C32D0 - add sp, sp, #0xc - mov r0, #0x8 - ldmia sp!, {r4-r11,pc} -_020C32C4: - ldr r0, [r8, #0x0] - bl FUN_020C20DC - mov r7, r0 -_020C32D0: - and r5, r10, #0x4 - mov r6, #0x0 -_020C32D8: - add r0, r8, r6, lsl #0x1 - ldrh r0, [r0, #0x4] - ldr r1, _020C33B4 ; =0x0000FFFF - cmp r0, r1 - beq _020C3390 - bl FUN_020C226C - movs r4, r0 - addeq sp, sp, #0xc - moveq r0, #0x5 - ldmeqia sp!, {r4-r11,pc} - add r0, sp, #0x4 - str r0, [sp, #0x0] - add r0, r8, r6, lsl #0x1 - ldrh r0, [r0, #0x4] - mov r1, r10 - mov r2, r9 - mov r3, r11 - bl FUN_020C31D4 - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,pc} - ldrb r0, [r4, #0x3] - ands r0, r0, #0x1 - beq _020C3370 - cmp r5, #0x0 - beq _020C3370 - str r9, [sp, #0x0] - ldr r1, [r4, #0x0] - ldr r0, [sp, #0x4] - mov r3, r1, lsl #0x8 - mov r1, r7 - mov r2, r6 - mov r3, r3, lsr #0x8 - bl FUN_020C2B1C - cmp r0, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x9 - ldmeqia sp!, {r4-r11,pc} -_020C3370: - cmp r7, #0x0 - beq _020C3390 - ldr r2, [sp, #0x4] - cmp r2, #0x0 - beq _020C3390 - mov r0, r7 - mov r1, r6 - bl SND_AssignWaveArc -_020C3390: - add r6, r6, #0x1 - cmp r6, #0x4 - blt _020C32D8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - strne r7, [r0, #0x0] - mov r0, #0x0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020C33B4: .word 0x0000FFFF - - arm_func_start FUN_020C33B8 -FUN_020C33B8: - stmdb sp!, {r4-r6,lr} - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl FUN_020C2334 - cmp r0, #0x0 - moveq r0, #0x3 - ldmeqia sp!, {r4-r6,pc} - ands r1, r6, #0x8 - beq _020C3400 - ldr r0, [r0, #0x0] - mov r1, r5 - mov r2, r4 - bl FUN_020C3044 - cmp r0, #0x0 - bne _020C3408 - mov r0, #0x7 - ldmia sp!, {r4-r6,pc} -_020C3400: - ldr r0, [r0, #0x0] - bl FUN_020C20DC -_020C3408: - ldr r1, [sp, #0x10] - cmp r1, #0x0 - strne r0, [r1, #0x0] - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020C341C -FUN_020C341C: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r1 - mov r6, r2 - mov r5, r3 - bl FUN_020C2398 - movs r4, r0 - addeq sp, sp, #0x4 - moveq r0, #0x2 - ldmeqia sp!, {r4-r7,pc} - mov r0, #0x0 - str r0, [sp, #0x0] - ldrh r0, [r4, #0x4] - mov r1, r7 - mov r2, r6 - mov r3, r5 - bl FUN_020C3270 - cmp r0, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r7,pc} - ands r0, r7, #0x1 - beq _020C3498 - ldr r0, [r4, #0x0] - mov r1, r6 - mov r2, r5 - bl FUN_020C30BC - cmp r0, #0x0 - bne _020C34A0 - add sp, sp, #0x4 - mov r0, #0x6 - ldmia sp!, {r4-r7,pc} -_020C3498: - ldr r0, [r4, #0x0] - bl FUN_020C20DC -_020C34A0: - ldr r1, [sp, #0x18] - cmp r1, #0x0 - strne r0, [r1, #0x0] - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020C34B8 -FUN_020C34B8: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r9, r1 - bl FUN_020C21A4 - movs r8, r0 - addeq sp, sp, #0xc - moveq r0, #0x1 - ldmeqia sp!, {r4-r11,pc} - ldr r0, [r8, #0x0] - mov r7, #0x0 - cmp r0, #0x0 - bls _020C35D4 - add r6, r8, #0x4 - str r7, [sp, #0x4] - mov r11, r7 - mov r10, r7 - mov r5, r7 - mov r4, #0x1 -_020C3500: - ldrb r0, [r6, #0x0] - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020C35C0 - ; Jump table - b _020C3520 ; case 0 - b _020C3570 ; case 1 - b _020C3598 ; case 2 - b _020C3548 ; case 3 -_020C3520: - str r5, [sp, #0x0] - ldrb r1, [r6, #0x1] - ldr r0, [r6, #0x4] - mov r2, r9 - mov r3, r4 - bl FUN_020C341C - cmp r0, #0x0 - beq _020C35C0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} -_020C3548: - str r10, [sp, #0x0] - ldrb r1, [r6, #0x1] - ldr r0, [r6, #0x4] - mov r2, r9 - mov r3, r4 - bl FUN_020C33B8 - cmp r0, #0x0 - beq _020C35C0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} -_020C3570: - str r11, [sp, #0x0] - ldrb r1, [r6, #0x1] - ldr r0, [r6, #0x4] - mov r2, r9 - mov r3, r4 - bl FUN_020C3270 - cmp r0, #0x0 - beq _020C35C0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} -_020C3598: - ldr r0, [sp, #0x4] - mov r2, r9 - str r0, [sp, #0x0] - ldrb r1, [r6, #0x1] - ldr r0, [r6, #0x4] - mov r3, r4 - bl FUN_020C31D4 - cmp r0, #0x0 - addne sp, sp, #0xc - ldmneia sp!, {r4-r11,pc} -_020C35C0: - ldr r0, [r8, #0x0] - add r7, r7, #0x1 - cmp r7, r0 - add r6, r6, #0x8 - blo _020C3500 -_020C35D4: - mov r0, #0x0 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020C35E0 -FUN_020C35E0: ; 0x020C35E0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r12, #0x0 - mov r3, #0x1 - str r12, [sp, #0x0] - bl FUN_020C341C - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C360C -FUN_020C360C: ; 0x020C360C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r12, #0x0 - mov r1, #0xff - mov r3, #0x1 - str r12, [sp, #0x0] - bl FUN_020C31D4 - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C3640 -FUN_020C3640: ; 0x020C3640 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r12, #0x0 - mov r1, #0xff - mov r3, #0x1 - str r12, [sp, #0x0] - bl FUN_020C3270 - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C3674 -FUN_020C3674: ; 0x020C3674 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r1 - mov r12, #0x0 - mov r1, #0xff - mov r3, #0x1 - str r12, [sp, #0x0] - bl FUN_020C341C - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C36A8 -FUN_020C36A8: ; 0x020C36A8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl FUN_020C34B8 - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C36C8 -FUN_020C36C8: ; 0x020C36C8 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x8 - mov r7, r2 - mov r2, r3 - ldr r6, [sp, #0x20] - mov r4, r0 - mov r8, r1 - bl FUN_020C0AF4 - movs r5, r0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - mov r0, r8 - mov r1, r5 - bl FUN_020C09B0 - add r12, sp, #0x4 - mov r2, r0 - mov r0, r7 - mov r1, #0x6 - mov r3, #0x0 - str r12, [sp, #0x0] - bl FUN_020C3270 - cmp r0, #0x0 - beq _020C373C - mov r0, r5 - bl thunk_FUN_020c077c - add sp, sp, #0x8 - mov r0, #0x0 - ldmia sp!, {r4-r8,pc} -_020C373C: - ldr r12, [sp, #0x24] - ldr r2, [r6, #0x0] - ldr r1, [r12, #0x18] - ldr r3, [sp, #0x4] - mov r0, r5 - add r1, r12, r1 - bl FUN_020C0A90 - ldrb r1, [r6, #0x6] - mov r0, r4 - bl FUN_020C0F30 - ldrb r1, [r6, #0x7] - mov r0, r4 - bl FUN_020C0ECC - ldr r1, [sp, #0x28] - ldr r2, [sp, #0x2c] - mov r0, r4 - bl FUN_020C0E38 - mov r0, #0x1 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020C378C -FUN_020C378C: ; 0x020C378C - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - mov r8, r2 - mov r2, r3 - ldr r5, [sp, #0x28] - mov r6, r0 - mov r7, r1 - bl FUN_020C0AF4 - movs r4, r0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - mov r0, r7 - mov r1, r4 - bl FUN_020C09B0 - mov r7, r0 - add r12, sp, #0x8 - mov r0, r8 - mov r2, r7 - mov r1, #0x6 - mov r3, #0x0 - str r12, [sp, #0x0] - bl FUN_020C3270 - cmp r0, #0x0 - beq _020C3804 - mov r0, r4 - bl thunk_FUN_020c077c - add sp, sp, #0x10 - mov r0, #0x0 - ldmia sp!, {r4-r8,pc} -_020C3804: - ldr r0, [sp, #0x2c] - add r12, sp, #0x4 - mov r2, r7 - mov r1, #0x1 - mov r3, #0x0 - str r12, [sp, #0x0] - bl FUN_020C341C - cmp r0, #0x0 - beq _020C383C - mov r0, r4 - bl thunk_FUN_020c077c - add sp, sp, #0x10 - mov r0, #0x0 - ldmia sp!, {r4-r8,pc} -_020C383C: - ldr r2, [sp, #0x4] - ldr r3, [sp, #0x8] - ldr r1, [r2, #0x18] - mov r0, r4 - add r1, r2, r1 - mov r2, #0x0 - bl FUN_020C0A90 - ldrb r1, [r5, #0x6] - mov r0, r6 - bl FUN_020C0F30 - ldrb r1, [r5, #0x7] - mov r0, r6 - bl FUN_020C0ECC - ldr r1, [sp, #0x2c] - mov r0, r6 - bl FUN_020C0E60 - mov r0, #0x1 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020C3888 -FUN_020C3888: ; 0x020C3888 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - mov r6, r1 - mov r7, r0 - mov r0, r6 - mov r5, r2 - bl FUN_020C2334 - cmp r0, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - ldr r0, [r0, #0x0] - bl FUN_020C20DC - movs r4, r0 - addeq sp, sp, #0x14 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - mov r1, r5 - bl FUN_020C3D9C - cmp r0, #0x0 - addeq sp, sp, #0x14 - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - str r0, [sp, #0x0] - str r4, [sp, #0x4] - str r6, [sp, #0x8] - str r5, [sp, #0xc] - ldrb r1, [r0, #0x9] - ldrh r2, [r0, #0x4] - ldrb r3, [r0, #0x8] - mov r0, r7 - bl FUN_020C36C8 - add sp, sp, #0x14 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020C3910 -FUN_020C3910: ; 0x020C3910 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - mov r7, r0 - ldr r0, [sp, #0x20] - mov r6, r1 - mov r5, r2 - mov r4, r3 - bl FUN_020C2398 - cmp r0, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x0 - ldmeqia sp!, {r4-r7,pc} - cmp r4, #0x0 - ldrltb r4, [r0, #0x8] - cmp r5, #0x0 - ldrlth r5, [r0, #0x4] - cmp r6, #0x0 - ldrltb r6, [r0, #0x9] - ldr r12, [sp, #0x20] - mov r2, r5 - str r0, [sp, #0x0] - mov r0, r7 - mov r1, r6 - mov r3, r4 - str r12, [sp, #0x4] - bl FUN_020C378C - add sp, sp, #0xc - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020C3980 -FUN_020C3980: ; 0x020C3980 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl FUN_020C2398 - cmp r0, #0x0 - addeq sp, sp, #0xc - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,pc} - str r0, [sp, #0x0] - str r4, [sp, #0x4] - ldrb r1, [r0, #0x9] - ldrh r2, [r0, #0x4] - ldrb r3, [r0, #0x8] - mov r0, r5 - bl FUN_020C378C - add sp, sp, #0xc - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020C39CC -FUN_020C39CC: ; 0x020C39CC - stmdb sp!, {r4-r8,lr} - mov r6, r0 - bl FUN_020C241C - mov r5, #0x0 - mov r7, r5 -_020C39E0: - mov r0, r5 - bl FUN_020C2208 - movs r4, r0 - beq _020C3A58 - ldrb r1, [r4, #0x0] - mov r0, r5 - bl FUN_020C1160 - ldrh r1, [r4, #0x2] - mov r0, r5 - bl FUN_020C1148 - ldr r0, [r4, #0x4] - cmp r0, #0x0 - beq _020C3A58 - cmp r6, #0x0 - beq _020C3A58 - ldrb r0, [r4, #0x0] - mov r8, r7 - cmp r0, #0x0 - ble _020C3A58 -_020C3A2C: - ldr r2, [r4, #0x4] - mov r0, r5 - mov r1, r6 - bl FUN_020C10B4 - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r8,pc} - ldrb r0, [r4, #0x0] - add r8, r8, #0x1 - cmp r8, r0 - blt _020C3A2C -_020C3A58: - add r5, r5, #0x1 - cmp r5, #0x20 - blt _020C39E0 - mov r0, #0x1 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020C3A6C -FUN_020C3A6C: ; 0x020C3A6C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - bl OS_DisableInterrupts - mov r4, r0 - ldr r0, _020C3A9C ; =UNK_021D2904 - mov r1, r5 - bl FUN_020ADBE8 - mov r0, r4 - bl OS_RestoreInterrupts - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020C3A9C: .word UNK_021D2904 - - arm_func_start FUN_020C3AA0 -FUN_020C3AA0: ; 0x020C3AA0 - stmdb sp!, {r4-r8,lr} - mov r8, r0 - mov r7, r1 - bl OS_DisableInterrupts - mov r6, r0 - mov r0, r8 - mov r1, #0x0 - bl FUN_020ADA98 - movs r5, r0 - beq _020C3B04 -_020C3AC8: - mov r0, r8 - mov r1, r5 - bl FUN_020ADA98 - ldr r1, [r5, #0x8] - mov r4, r0 - cmp r1, r7 - bne _020C3AF8 - mov r0, r8 - mov r1, r5 - bl FUN_020ADAB0 - mov r0, r5 - bl FUN_020C3A6C -_020C3AF8: - mov r5, r4 - cmp r4, #0x0 - bne _020C3AC8 -_020C3B04: - mov r0, r6 - bl OS_RestoreInterrupts - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020C3B10 -FUN_020C3B10: ; 0x020C3B10 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, [r0, #0x120] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - sub r1, r1, #0x1 - str r1, [r0, #0x120] - ldr r1, [r0, #0x120] - cmp r1, #0x0 - addne sp, sp, #0x4 - ldmneia sp!, {pc} - bl FUN_020C1674 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020C3B4C -FUN_020C3B4C: ; 0x020C3B4C - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r1, [r4, #0x110] - mov r1, r1, lsl #0x1f - movs r1, r1, asr #0x1f - ldmeqia sp!, {r4,pc} - bl FUN_020C3B10 - ldr r1, [r4, #0x164] - mov r0, r4 - blx r1 - ldr r0, _020C3BA8 ; =UNK_021D2DF0 - mov r1, r4 - bl FUN_020C3AA0 - ldr r0, _020C3BAC ; =UNK_021D2900 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020C3B9C - mov r1, r4 - add r0, r0, #0x4e0 - bl FUN_020C3AA0 -_020C3B9C: - mov r0, r4 - bl FUN_020C3C4C - ldmia sp!, {r4,pc} - .balign 4 -_020C3BA8: .word UNK_021D2DF0 -_020C3BAC: .word UNK_021D2900 - - arm_func_start FUN_020C3BB0 -FUN_020C3BB0: ; 0x020C3BB0 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, _020C3C40 ; =UNK_021D2DD8 - bl OS_LockMutex - ldr r0, _020C3C44 ; =UNK_021D2900 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - beq _020C3BDC - ldr r0, _020C3C48 ; =0x000004C8 - add r0, r1, r0 - bl OS_LockMutex -_020C3BDC: - ldr r0, [r4, #0x110] - mov r0, r0, lsl #0x1e - movs r0, r0, asr #0x1f - beq _020C3BF4 - mov r0, r4 - bl FUN_020C1430 -_020C3BF4: - ldr r0, [r4, #0x110] - mov r0, r0, lsl #0x1f - movs r0, r0, asr #0x1f - beq _020C3C10 - ldr r1, [r4, #0x16c] - mov r0, r4 - blx r1 -_020C3C10: - mov r0, r4 - bl FUN_020C3B4C - ldr r0, _020C3C40 ; =UNK_021D2DD8 - bl OS_UnlockMutex - ldr r0, _020C3C44 ; =UNK_021D2900 - ldr r1, [r0, #0x0] - cmp r1, #0x0 - ldmeqia sp!, {r4,pc} - ldr r0, _020C3C48 ; =0x000004C8 - add r0, r1, r0 - bl OS_UnlockMutex - ldmia sp!, {r4,pc} - .balign 4 -_020C3C40: .word UNK_021D2DD8 -_020C3C44: .word UNK_021D2900 -_020C3C48: .word 0x000004C8 - - arm_func_start FUN_020C3C4C -FUN_020C3C4C: ; 0x020C3C4C - ldr r2, [r0, #0x14c] - cmp r2, #0x0 - movne r1, #0x0 - strne r1, [r2, #0x0] - strne r1, [r0, #0x14c] - ldr r1, [r0, #0x110] - bic r1, r1, #0x1 - str r1, [r0, #0x110] - ldr r1, [r0, #0x110] - bic r1, r1, #0x4 - str r1, [r0, #0x110] - ldr r1, [r0, #0x110] - bic r1, r1, #0x2 - str r1, [r0, #0x110] - bx lr - - arm_func_start FUN_020C3C88 -FUN_020C3C88: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, _020C3D94 ; =UNK_021D2DFC - mov r7, #0x0 - ldr r4, _020C3D98 ; =SNDi_DecibelTable -_020C3C9C: - ldr r1, [r5, #0x110] - mov r0, r1, lsl #0x1f - movs r0, r0, asr #0x1f - beq _020C3D7C - ldr r0, [r5, #0x114] - cmp r0, #0x0 - bne _020C3CC4 - mov r0, r5 - bl FUN_020C3BB0 - b _020C3D7C -_020C3CC4: - mov r0, r1, lsl #0x1d - movs r0, r0, asr #0x1f - beq _020C3CFC - ldr r0, [r5, #0x118] - cmp r0, #0x0 - beq _020C3CFC - mov r0, r5 - bl FUN_020C1458 - ldr r0, [r5, #0x110] - orr r0, r0, #0x2 - str r0, [r5, #0x110] - ldr r0, [r5, #0x110] - bic r0, r0, #0x4 - str r0, [r5, #0x110] -_020C3CFC: - ldr r0, [r5, #0x110] - mov r0, r0, lsl #0x1e - movs r0, r0, asr #0x1f - beq _020C3D7C - add r0, r5, #0xe8 - bl FUN_020C3DF4 - ldr r1, [r5, #0x154] - add r0, r5, #0xe8 - mov r1, r1, lsl #0x1 - ldrsh r6, [r4, r1] - bl FUN_020C3E0C - mov r0, r0, asr #0x8 - mov r0, r0, lsl #0x1 - ldrsh r1, [r4, r0] - ldr r0, [r5, #0x158] - add r6, r1, r6 - cmp r6, r0 - beq _020C3D54 - mov r0, r5 - mov r1, r6 - bl FUN_020C13C4 - str r6, [r5, #0x158] -_020C3D54: - ldr r0, [r5, #0x110] - mov r0, r0, lsl #0x1c - movs r0, r0, asr #0x1f - beq _020C3D7C - add r0, r5, #0xe8 - bl FUN_020C3DDC - cmp r0, #0x0 - beq _020C3D7C - mov r0, r5 - bl FUN_020C3BB0 -_020C3D7C: - add r7, r7, #0x1 - cmp r7, #0x4 - add r5, r5, #0x170 - blt _020C3C9C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020C3D94: .word UNK_021D2DFC -_020C3D98: .word SNDi_DecibelTable - - arm_func_start FUN_020C3D9C -FUN_020C3D9C: - cmp r1, #0x0 - movlt r0, #0x0 - bxlt lr - ldr r2, [r0, #0x1c] - cmp r1, r2 - movcs r0, #0x0 - bxcs lr - mov r2, #0xc - mul r2, r1, r2 - add r3, r0, #0x20 - ldr r1, [r3, r2] - mvn r0, #0x0 - cmp r1, r0 - add r0, r3, r2 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020C3DDC -FUN_020C3DDC: - ldr r1, [r0, #0x8] - ldr r0, [r0, #0xc] - cmp r1, r0 - movge r0, #0x1 - movlt r0, #0x0 - bx lr - - arm_func_start FUN_020C3DF4 -FUN_020C3DF4: ; 0x020C3DF4 - ldr r2, [r0, #0x8] - ldr r1, [r0, #0xc] - cmp r2, r1 - addlt r1, r2, #0x1 - strlt r1, [r0, #0x8] - bx lr - - arm_func_start FUN_020C3E0C -FUN_020C3E0C: - stmdb sp!, {r4,lr} - ldr r1, [r0, #0xc] - ldr r2, [r0, #0x8] - cmp r2, r1 - ldrge r0, [r0, #0x4] - ldmgeia sp!, {r4,pc} - ldr r4, [r0, #0x0] - ldr r0, [r0, #0x4] - sub r0, r0, r4 - mul r0, r2, r0 - bl _s32_div_f - add r0, r4, r0 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020C3E40 -FUN_020C3E40: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl FUN_020C3E0C - str r0, [r6, #0x0] - str r5, [r6, #0x4] - str r4, [r6, #0xc] - mov r0, #0x0 - str r0, [r6, #0x8] - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020C3E6C -FUN_020C3E6C: ; 0x020C3E6C - mov r2, #0x0 - str r2, [r0, #0x4] - ldr r1, [r0, #0x4] - str r1, [r0, #0x0] - str r2, [r0, #0xc] - ldr r1, [r0, #0xc] - str r1, [r0, #0x8] - bx lr diff --git a/arm9/asm/unk_020040F4.s b/arm9/asm/unk_020040F4.s index e2418c14..5e62cb80 100644 --- a/arm9/asm/unk_020040F4.s +++ b/arm9/asm/unk_020040F4.s @@ -922,7 +922,7 @@ _02004800: add r0, r4, #0x0 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C0F8C + bl NNS_SndPlayerPause strb r5, [r6, #0x0] _0200480E: pop {r4-r6, pc} @@ -948,7 +948,7 @@ FUN_02004828: ; 0x02004828 bl FUN_02003FF4 add r1, r5, #0x0 add r2, r4, #0x0 - bl FUN_020C0EF4 + bl NNS_SndPlayerMoveVolume pop {r3-r5, pc} thumb_func_start FUN_0200483C @@ -964,7 +964,7 @@ _02004844: _0200484A: bl FUN_02003FF4 add r1, r4, #0x0 - bl FUN_020C0F30 + bl NNS_SndPlayerSetInitialVolume pop {r4, pc} .balign 4 @@ -972,7 +972,7 @@ _0200484A: FUN_02004858: ; 0x02004858 push {r3-r5, lr} add r5, r1, #0x0 - bl FUN_020C23FC + bl NNS_SndArcGetSeqParam cmp r5, #0x1 beq _02004868 cmp r5, #0x8 @@ -1018,7 +1018,7 @@ FUN_020048A0: ; 0x020048A0 add r1, r5, #0x0 add r3, r2, #0x0 str r4, [sp, #0x0] - bl FUN_020C3910 + bl NNS_SndArcPlayerStartSeqEx pop {r3-r5, pc} .balign 4 @@ -1030,7 +1030,7 @@ FUN_020048BC: ; 0x020048BC bl ErrorHandling _020048C6: add r0, r4, #0x0 - bl FUN_020C0F50 + bl NNS_SndPlayerCountPlayingSeqByPlayerNo pop {r4, pc} .balign 4 @@ -1042,7 +1042,7 @@ FUN_020048D0: ; 0x020048D0 mov r0, #0xff pop {r3, pc} _020048DA: - bl FUN_020C23FC + bl NNS_SndArcGetSeqParam cmp r0, #0x0 bne _020048E6 mov r0, #0xff @@ -1054,22 +1054,22 @@ _020048E6: thumb_func_start FUN_020048EC FUN_020048EC: ; 0x020048EC - ldr r3, _020048F0 ; =FUN_020C0E14 + ldr r3, _020048F0 ; =NNS_SndPlayerGetSeqNo bx r3 .balign 4 -_020048F0: .word FUN_020C0E14 +_020048F0: .word NNS_SndPlayerGetSeqNo thumb_func_start FUN_020048F4 FUN_020048F4: ; 0x020048F4 push {r3, lr} bl FUN_02004900 - bl FUN_020C22D0 + bl NNS_SndArcGetBankInfo pop {r3, pc} thumb_func_start FUN_02004900 FUN_02004900: ; 0x02004900 push {r3, lr} - bl FUN_020C23FC + bl NNS_SndArcGetSeqParam cmp r0, #0x0 bne _0200490E mov r0, #0x0 @@ -1166,7 +1166,7 @@ _020049A8: bl FUN_02003D38 add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_020C0688 + bl NNS_SndWaveOutAllocChannel str r0, [r4, #0x0] cmp r0, #0x0 bne _020049CA @@ -1187,7 +1187,7 @@ _020049D6: bl FUN_02003D38 add r6, r0, #0x0 add r0, r5, #0x0 - bl FUN_020C0688 + bl NNS_SndWaveOutAllocChannel str r0, [r6, #0x0] cmp r0, #0x0 bne _020049F4 @@ -1230,7 +1230,7 @@ _02004A2A: add r0, r5, #0x0 bl FUN_02004930 ldr r0, [r0, #0x0] - bl FUN_020C0670 + bl NNS_SndWaveOutFreeChannel mov r0, #0x0 strb r0, [r6, #0x0] pop {r4-r6, pc} @@ -1244,7 +1244,7 @@ _02004A4C: add r0, r5, #0x0 bl FUN_02004930 ldr r0, [r0, #0x0] - bl FUN_020C0670 + bl NNS_SndWaveOutFreeChannel mov r0, #0x0 strb r0, [r4, #0x0] pop {r4-r6, pc} @@ -1276,7 +1276,7 @@ FUN_02004A6C: ; 0x02004A6C ldr r2, [r3, #0x8] ldr r0, [r0, #0x0] ldr r3, [r3, #0xc] - bl FUN_020C054C + bl NNS_SndWaveOutStart add r5, r0, #0x0 bne _02004AA4 add r0, r4, #0x0 @@ -1292,7 +1292,7 @@ FUN_02004AAC: ; 0x02004AAC push {r3, lr} bl FUN_02004930 ldr r0, [r0, #0x0] - bl FUN_020C0510 + bl NNS_SndWaveOutStop pop {r3, pc} .balign 4 @@ -1301,7 +1301,7 @@ FUN_02004ABC: ; 0x02004ABC push {r3, lr} bl FUN_02004930 ldr r0, [r0, #0x0] - bl FUN_020C03B8 + bl NNS_SndWaveOutIsPlaying pop {r3, pc} .balign 4 @@ -1316,7 +1316,7 @@ _02004AD6: bl FUN_02004930 ldr r0, [r0, #0x0] add r1, r4, #0x0 - bl FUN_020C041C + bl NNS_SndWaveOutSetPan pop {r4, pc} thumb_func_start FUN_02004AE4 @@ -1326,7 +1326,7 @@ FUN_02004AE4: ; 0x02004AE4 bl FUN_02004930 ldr r0, [r0, #0x0] add r1, r4, #0x0 - bl FUN_020C044C + bl NNS_SndWaveOutSetSpeed pop {r4, pc} .balign 4 @@ -1346,14 +1346,14 @@ FUN_02004AF8: ; 0x02004AF8 bl _s32_div_f add r1, r0, #0x0 ldr r0, [r4, #0x0] - bl FUN_020C04DC + bl NNS_SndWaveOutSetVolume pop {r3-r5, pc} _02004B20: add r0, r4, #0x0 bl FUN_02004930 ldr r0, [r0, #0x0] add r1, r5, #0x0 - bl FUN_020C04DC + bl NNS_SndWaveOutSetVolume pop {r3-r5, pc} thumb_func_start FUN_02004B30 @@ -1375,7 +1375,7 @@ FUN_02004B30: ; 0x02004B30 bl ErrorHandling _02004B54: add r0, r6, #0x0 - bl FUN_020C226C + bl NNS_SndArcGetWaveArcInfo add r7, r0, #0x0 bne _02004B68 bl ErrorHandling @@ -1386,7 +1386,7 @@ _02004B68: ldr r0, [r7, #0x0] lsl r0, r0, #0x8 lsr r0, r0, #0x8 - bl FUN_020C217C + bl NNS_SndArcGetFileSize add r6, r0, #0x0 bne _02004B80 bl ErrorHandling @@ -1416,7 +1416,7 @@ _02004B9C: lsr r0, r0, #0x8 add r2, r6, #0x0 mov r3, #0x0 - bl FUN_020C2104 + bl NNS_SndArcReadFile mov r1, #0x0 mvn r1, r1 cmp r0, r1 @@ -1518,10 +1518,10 @@ _02004C76: thumb_func_start FUN_02004C78 FUN_02004C78: ; 0x02004C78 - ldr r3, _02004C7C ; =FUN_020C1E58 + ldr r3, _02004C7C ; =NNS_SndCaptureIsActive bx r3 .balign 4 -_02004C7C: .word FUN_020C1E58 +_02004C7C: .word NNS_SndCaptureIsActive thumb_func_start FUN_02004C80 FUN_02004C80: ; 0x02004C80 @@ -1537,23 +1537,23 @@ FUN_02004C80: ; 0x02004C80 mov r2, #0x0 lsl r3, r3, #0x6 str r4, [sp, #0x0] - bl FUN_020C1FF0 + bl NNS_SndCaptureStartReverb add sp, #0x4 pop {r3-r4, pc} thumb_func_start FUN_02004CA4 FUN_02004CA4: ; 0x02004CA4 - ldr r3, _02004CA8 ; =FUN_020C1F54 + ldr r3, _02004CA8 ; =NNS_SndCaptureStopReverb bx r3 .balign 4 -_02004CA8: .word FUN_020C1F54 +_02004CA8: .word NNS_SndCaptureStopReverb thumb_func_start FUN_02004CAC FUN_02004CAC: ; 0x02004CAC - ldr r3, _02004CB0 ; =FUN_020C1FA4 + ldr r3, _02004CB0 ; =NNS_SndCaptureSetReverbVolume bx r3 .balign 4 -_02004CB0: .word FUN_020C1FA4 +_02004CB0: .word NNS_SndCaptureSetReverbVolume thumb_func_start FUN_02004CB4 FUN_02004CB4: ; 0x02004CB4 @@ -1579,7 +1579,7 @@ FUN_02004CB4: ; 0x02004CB4 ldr r3, _02004CF8 ; =0x000055F0 add r0, r4, #0x0 mov r2, #0x0 - bl FUN_020C1EA4 + bl NNS_SndCaptureStartEffect add sp, #0xc pop {r3-r4, pc} nop @@ -1588,10 +1588,10 @@ _02004CF8: .word 0x000055F0 thumb_func_start FUN_02004CFC FUN_02004CFC: ; 0x02004CFC - ldr r3, _02004D00 ; =FUN_020C1E68 + ldr r3, _02004D00 ; =NNS_SndCaptureStopEffect bx r3 .balign 4 -_02004D00: .word FUN_020C1E68 +_02004D00: .word NNS_SndCaptureStopEffect thumb_func_start FUN_02004D04 FUN_02004D04: ; 0x02004D04 @@ -1619,7 +1619,7 @@ FUN_02004D20: ; 0x02004D20 bl FUN_02003FF4 add r1, r5, #0x0 add r2, r4, #0x0 - bl FUN_020C0EA4 + bl NNS_SndPlayerSetTrackPitch pop {r3-r5, pc} thumb_func_start FUN_02004D34 @@ -1642,14 +1642,14 @@ FUN_02004D4C: ; 0x02004D4C bl FUN_02003FF4 add r1, r5, #0x0 add r2, r4, #0x0 - bl FUN_020C0E7C + bl NNS_SndPlayerSetTrackPan pop {r3-r5, pc} thumb_func_start FUN_02004D60 FUN_02004D60: ; 0x02004D60 push {r4, lr} add r4, r0, #0x0 - bl FUN_020C0174 + bl NNS_SndSetMonoFlag ldr r0, _02004D70 ; =UNK_021C3DD8 str r4, [r0, #0x0] pop {r4, pc} @@ -1866,7 +1866,7 @@ FUN_02004ED0: ; 0x02004ED0 _02004EF0: mov r0, #0x1 _02004EF2: - bl FUN_020C226C + bl NNS_SndArcGetWaveArcInfo cmp r0, #0x0 bne _02004F02 bl ErrorHandling @@ -1876,7 +1876,7 @@ _02004F02: ldr r0, [r0, #0x0] lsl r0, r0, #0x8 lsr r0, r0, #0x8 - bl FUN_020C20DC + bl NNS_SndArcGetFileAddress cmp r0, #0x0 bne _02004F18 bl ErrorHandling @@ -1928,7 +1928,7 @@ _02004F62: FUN_02004F64: ; 0x02004F64 push {r3, lr} bl FUN_02003FF4 - bl FUN_020C0DD4 + bl NNS_SndPlayerGetTick pop {r3, pc} thumb_func_start FUN_02004F70 @@ -2216,12 +2216,12 @@ _0200515A: thumb_func_start FUN_02005160 FUN_02005160: ; 0x02005160 - ldr r3, _02005168 ; =FUN_020C1148 + ldr r3, _02005168 ; =NNS_SndPlayerSetAllocatableChannel add r1, r0, #0x0 mov r0, #0x7 bx r3 .balign 4 -_02005168: .word FUN_020C1148 +_02005168: .word NNS_SndPlayerSetAllocatableChannel thumb_func_start FUN_0200516C FUN_0200516C: ; 0x0200516C @@ -2282,7 +2282,7 @@ _020051E8: .word 0x0000047E thumb_func_start FUN_020051EC FUN_020051EC: ; 0x020051EC - ldr r3, _020051F0 ; =FUN_020C1180 + ldr r3, _020051F0 ; =NNS_SndPlayerSetPlayerVolume bx r3 .balign 4 -_020051F0: .word FUN_020C1180 +_020051F0: .word NNS_SndPlayerSetPlayerVolume diff --git a/arm9/asm/unk_020051F4.s b/arm9/asm/unk_020051F4.s index ccb8d272..12b0c8cb 100644 --- a/arm9/asm/unk_020051F4.s +++ b/arm9/asm/unk_020051F4.s @@ -12,7 +12,7 @@ FUN_020051F4: ; 0x020051F4 add r4, r0, #0x0 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C3980 + bl NNS_SndArcPlayerStartSeq add r6, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 @@ -90,7 +90,7 @@ FUN_02005288: ; 0x02005288 add r0, r4, #0x0 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C3980 + bl NNS_SndArcPlayerStartSeq pop {r3-r5, pc} .balign 4 @@ -123,7 +123,7 @@ FUN_020052B8: ; 0x020052B8 add r0, r6, #0x0 add r3, r1, #0x0 str r5, [sp, #0x0] - bl FUN_020C3910 + bl NNS_SndArcPlayerStartSeqEx add sp, #0x4 pop {r3-r6, pc} .balign 4 @@ -152,7 +152,7 @@ _0200532A: mov r0, #0x7 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C3980 + bl NNS_SndArcPlayerStartSeq add r4, r0, #0x0 add r0, r5, #0x0 bl FUN_02004110 @@ -165,14 +165,14 @@ _0200532A: FUN_02005350: ; 0x02005350 push {r4, lr} add r4, r0, #0x0 - bl FUN_020C0FDC + bl NNS_SndPlayerStopSeqBySeqNo add r0, r4, #0x0 bl FUN_020048D0 cmp r0, #0xff beq _0200536E bl FUN_02004018 bl FUN_02003FF4 - bl FUN_020C0F68 + bl NNS_SndHandleReleaseSeq _0200536E: bl FUN_02005374 pop {r4, pc} @@ -270,7 +270,7 @@ FUN_0200541C: ; 0x0200541C bl FUN_02003D38 add r4, r0, #0x0 mov r0, #0x0 - bl FUN_020C0F9C + bl NNS_SndPlayerStopSeqAll ldrb r0, [r5, #0x0] cmp r0, #0x1 bne _02005440 @@ -299,7 +299,7 @@ FUN_02005454: ; 0x02005454 mov r0, #0x7 bl FUN_02003FF4 mov r1, #0x0 - bl FUN_020C10A4 + bl NNS_SndPlayerStopSeq bl FUN_02005374 mov r5, #0x0 add r4, r5, #0x0 @@ -351,7 +351,7 @@ FUN_020054C8: ; 0x020054C8 add r4, r0, #0x0 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C3980 + bl NNS_SndArcPlayerStartSeq add r6, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 @@ -362,10 +362,10 @@ FUN_020054C8: ; 0x020054C8 thumb_func_start FUN_020054F0 FUN_020054F0: ; 0x020054F0 - ldr r3, _020054F4 ; =FUN_020C0FDC + ldr r3, _020054F4 ; =NNS_SndPlayerStopSeqBySeqNo bx r3 .balign 4 -_020054F4: .word FUN_020C0FDC +_020054F4: .word NNS_SndPlayerStopSeqBySeqNo thumb_func_start FUN_020054F8 FUN_020054F8: ; 0x020054F8 @@ -373,7 +373,7 @@ FUN_020054F8: ; 0x020054F8 add r4, r1, #0x0 bl FUN_02003FF4 add r1, r4, #0x0 - bl FUN_020C10A4 + bl NNS_SndPlayerStopSeq pop {r4, pc} thumb_func_start FUN_02005508 @@ -411,7 +411,7 @@ FUN_02005530: ; 0x02005530 bl FUN_02003FF4 add r1, r5, #0x0 add r2, r4, #0x0 - bl FUN_020C0E7C + bl NNS_SndPlayerSetTrackPan pop {r3-r5, pc} thumb_func_start FUN_0200554C @@ -428,7 +428,7 @@ _0200555C: bl FUN_02003FF4 add r1, r7, #0x0 add r2, r6, #0x0 - bl FUN_020C0E7C + bl NNS_SndPlayerSetTrackPan add r5, r5, #0x1 cmp r5, #0x4 blt _0200555C @@ -483,7 +483,7 @@ _020055BC: sub r1, r1, #0x3 add r2, r5, #0x0 add r3, r1, #0x0 - bl FUN_020C3910 + bl NNS_SndArcPlayerStartSeqEx add r4, r0, #0x0 add r0, r5, #0x0 mov r1, #0x1 @@ -497,7 +497,7 @@ _020055E8: sub r1, r1, #0x3 add r2, r5, #0x0 add r3, r1, #0x0 - bl FUN_020C3910 + bl NNS_SndArcPlayerStartSeqEx add r4, r0, #0x0 add r0, r5, #0x0 mov r1, #0x8 @@ -525,11 +525,11 @@ FUN_02005614: ; 0x02005614 mov r0, #0x1 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C10A4 + bl NNS_SndPlayerStopSeq mov r0, #0x8 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C10A4 + bl NNS_SndPlayerStopSeq ldrb r0, [r6, #0x0] cmp r0, #0x1 bne _02005658 @@ -1239,7 +1239,7 @@ _02005C48: mov r0, #0x2 bl FUN_02003FF4 add r1, r5, #0x0 - bl FUN_020C3980 + bl NNS_SndArcPlayerStartSeq add r4, r0, #0x0 add r0, r5, #0x0 mov r1, #0x2 @@ -1279,7 +1279,7 @@ FUN_02005CA0: ; 0x02005CA0 mov r0, #0x2 bl FUN_02003FF4 add r1, r4, #0x0 - bl FUN_020C10A4 + bl NNS_SndPlayerStopSeq mov r0, #0x6 bl FUN_02004748 bl FUN_02003F64 diff --git a/arm9/asm/unk_02006864.s b/arm9/asm/unk_02006864.s index 5bd62750..75adbe92 100644 --- a/arm9/asm/unk_02006864.s +++ b/arm9/asm/unk_02006864.s @@ -5,8 +5,8 @@ .global UNK_020ECB98 UNK_020ECB98: ; 0x020ECB98 - .word FUN_020B1768 - .word FUN_020B1528 + .word NNS_G2dLoadImage1DMapping + .word NNS_G2dLoadImage2DMapping .global UNK_020ECBA0 UNK_020ECBA0: ; 0x020ECBA0 @@ -14,7 +14,7 @@ UNK_020ECBA0: ; 0x020ECBA0 .global UNK_020ECBA8 UNK_020ECBA8: ; 0x020ECBA8 - .word FUN_020B1768, FUN_020B1528 + .word NNS_G2dLoadImage1DMapping, NNS_G2dLoadImage2DMapping .global UNK_020ECBB0 UNK_020ECBB0: ; 0x020ECBB0 @@ -38,7 +38,7 @@ FUN_0200687C: ; 0x0200687C add r7, r0, #0x0 beq _020068C2 add r1, sp, #0x4 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0x0 beq _020068BC cmp r4, #0x0 @@ -78,7 +78,7 @@ FUN_020068C8: ; 0x020068C8 add r7, r0, #0x0 beq _0200692C add r1, sp, #0x4 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData cmp r0, #0x0 beq _02006926 cmp r4, #0x0 @@ -147,7 +147,7 @@ FUN_02006948: ; 0x02006948 cmp r0, #0x0 beq _02006A2A add r1, sp, #0x8 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0x0 beq _02006A24 ldr r0, [sp, #0x8] @@ -262,7 +262,7 @@ FUN_02006A34: ; 0x02006A34 add r7, r0, #0x0 beq _02006A80 add r1, sp, #0x4 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData cmp r0, #0x0 beq _02006A7A cmp r4, #0x0 @@ -306,11 +306,11 @@ FUN_02006A8C: ; 0x02006A8C add r6, r0, #0x0 beq _02006AE0 add r1, sp, #0x4 - bl FUN_020B00F0 + bl NNS_G2dGetUnpackedPaletteCompressInfo add r7, r0, #0x0 add r0, r6, #0x0 add r1, sp, #0x8 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0x0 beq _02006ADA cmp r7, #0x0 @@ -321,14 +321,14 @@ FUN_02006A8C: ; 0x02006A8C ldr r0, [sp, #0x8] ldr r1, [sp, #0x4] add r3, r5, #0x0 - bl FUN_020B10E8 + bl NNS_G2dLoadPaletteEx b _02006ADA _02006ACE: ldr r0, [sp, #0x8] ldr r3, [sp, #0x24] add r1, r4, #0x0 add r2, r5, #0x0 - bl FUN_020B1240 + bl NNS_G2dLoadPalette _02006ADA: add r0, r6, #0x0 bl FreeToHeap @@ -349,7 +349,7 @@ FUN_02006AE4: ; 0x02006AE4 ldr r4, _02006B30 ; =0x00000000 beq _02006B28 add r1, sp, #0x4 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData cmp r0, #0x0 beq _02006B22 ldr r1, [sp, #0x18] @@ -391,7 +391,7 @@ FUN_02006B38: ; 0x02006B38 add r4, r0, #0x0 beq _02006B9E add r1, sp, #0x4 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData cmp r0, #0x0 beq _02006B98 ldr r1, [sp, #0x18] @@ -453,7 +453,7 @@ FUN_02006BB0: ; 0x02006BB0 add r5, r0, #0x0 beq _02006BD6 add r1, r4, #0x0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0x0 bne _02006BD6 add r0, r5, #0x0 @@ -476,7 +476,7 @@ FUN_02006BDC: ; 0x02006BDC add r5, r0, #0x0 beq _02006C02 add r1, r4, #0x0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData cmp r0, #0x0 bne _02006C02 add r0, r5, #0x0 @@ -498,7 +498,7 @@ FUN_02006C08: ; 0x02006C08 add r4, r0, #0x0 beq _02006C2C add r1, r5, #0x0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0x0 bne _02006C2C add r0, r4, #0x0 @@ -520,7 +520,7 @@ FUN_02006C30: ; 0x02006C30 add r5, r0, #0x0 beq _02006C56 add r1, r4, #0x0 - bl FUN_020AFEB8 + bl NNS_G2dGetUnpackedCellBank cmp r0, #0x0 bne _02006C56 add r0, r5, #0x0 @@ -543,7 +543,7 @@ FUN_02006C5C: ; 0x02006C5C add r5, r0, #0x0 beq _02006C82 add r1, r4, #0x0 - bl thunk_FUN_020afda0_2 + bl NNS_G2dGetUnpackedAnimBank cmp r0, #0x0 bne _02006C82 add r0, r5, #0x0 diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s index 0e1ff930..4b0a737d 100644 --- a/arm9/asm/unk_02006D98.s +++ b/arm9/asm/unk_02006D98.s @@ -2,7 +2,7 @@ .include "global.inc" .extern UNK_020ECD4C - .extern UNK_020FFA38 + .extern FX_SinCosTable_ .section .rodata @@ -144,7 +144,7 @@ _02006E12: add r5, #0x98 cmp r6, #0x4 blt _02006E12 - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera ldr r2, _02006EC8 ; =0x000002E3 mov r0, #0x0 strb r0, [r4, r2] @@ -155,7 +155,7 @@ _02006E12: bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0xc str r0, [sp, #0x4] - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #0xc] mov r1, #0xaf ldr r0, [r0, #0x4] @@ -235,7 +235,7 @@ FUN_02006ED4: ; 0x02006ED4 bl FUN_020082A8 add r0, r5, #0x0 bl FUN_020086F4 - bl FUN_020BB394 + bl NNS_G3dGeFlushBuffer mov r6, #0x9f mov r0, #0x0 ldr r4, _02007250 ; =0x04000444 @@ -295,7 +295,7 @@ _02006F48: add r1, #0x24 blx r2 _02006F56: - bl FUN_020BB394 + bl NNS_G3dGeFlushBuffer ldr r0, _02007258 ; =0x000002E3 ldrb r0, [r5, r0] cmp r0, #0x1 @@ -349,7 +349,7 @@ _02006F7E: ldrh r0, [r4, #0x38] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _02007268 ; =UNK_020FFA38 + ldr r0, _02007268 ; =FX_SinCosTable_ add r2, r0, r1 ldrsh r0, [r0, r1] mov r1, #0x2 @@ -358,7 +358,7 @@ _02006F7E: ldrh r0, [r4, #0x3a] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _02007268 ; =UNK_020FFA38 + ldr r0, _02007268 ; =FX_SinCosTable_ add r2, r0, r1 ldrsh r0, [r0, r1] mov r1, #0x2 @@ -367,7 +367,7 @@ _02006F7E: ldrh r0, [r4, #0x3c] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _02007268 ; =UNK_020FFA38 + ldr r0, _02007268 ; =FX_SinCosTable_ add r2, r0, r1 ldrsh r0, [r0, r1] mov r1, #0x2 @@ -505,7 +505,7 @@ _02006F7E: add r2, r3, r2 asr r1, r1, #0x10 mov r3, r12 - bl FUN_020B0250 + bl NNS_G2dDrawSpriteFast b _02007174 _02007104: mov r0, #0x34 @@ -562,7 +562,7 @@ _02007104: lsl r1, r1, #0x10 asr r1, r1, #0x10 add r2, r6, r2 - bl FUN_020B0250 + bl NNS_G2dDrawSpriteFast _02007174: add r0, r4, #0x0 add r0, #0x6c @@ -689,7 +689,7 @@ _02007258: .word 0x000002E3 _0200725C: .word 0x04000454 _02007260: .word 0x040004AC _02007264: .word 0x04000470 -_02007268: .word UNK_020FFA38 +_02007268: .word FX_SinCosTable_ _0200726C: .word 0x040004C0 _02007270: .word 0x00004210 _02007274: .word 0x040004A4 @@ -725,7 +725,7 @@ _0200727C: lsl r1, r1, #0x10 ldr r2, _020072E0 ; =0xFFFFFC18 asr r1, r1, #0x10 - bl FUN_020B0250 + bl NNS_G2dDrawSpriteFast _020072BC: ldr r0, [sp, #0x14] add r4, #0x98 @@ -2884,7 +2884,7 @@ FUN_020081C4: ; 0x020081C4 strb r1, [r4, r0] sub r0, #0x81 add r0, r4, r0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0xae lsl r3, r3, #0x2 mov r1, #0x20 @@ -2910,7 +2910,7 @@ FUN_020081C4: ; 0x020081C4 ldr r1, [r4, r1] mov r2, #0x0 add r3, r4, r3 - bl FUN_020B1528 + bl NNS_G2dLoadImage2DMapping _02008212: ldr r0, _02008258 ; =0x000002E2 ldrb r1, [r4, r0] @@ -2920,7 +2920,7 @@ _02008212: strb r1, [r4, r0] sub r0, #0x5e add r0, r4, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r3, #0xaa lsl r3, r3, #0x2 add r0, r3, #0x0 @@ -2941,7 +2941,7 @@ _02008212: add r0, r4, r0 mov r2, #0x0 add r3, r4, r3 - bl FUN_020B1240 + bl NNS_G2dLoadPalette _02008252: pop {r4, pc} .balign 4 @@ -3037,7 +3037,7 @@ _020082CC: bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x58 str r0, [sp, #0x4c] - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #0x58] mov r1, #0xaf ldr r0, [r0, #0x4] @@ -3600,7 +3600,7 @@ _02008706: bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x18 str r0, [sp, #0x10] - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r0, [sp, #0x18] mov r7, #0x0 ldr r1, [r0, #0x0] @@ -3646,7 +3646,7 @@ _0200874A: bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x18 str r0, [sp, #0x4] - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r0, [sp, #0x18] mov r7, #0xad ldr r0, [r0, #0xc] diff --git a/arm9/asm/unk_02008DEC.s b/arm9/asm/unk_02008DEC.s index 1b0161ae..b05df5ca 100644 --- a/arm9/asm/unk_02008DEC.s +++ b/arm9/asm/unk_02008DEC.s @@ -1457,7 +1457,7 @@ FUN_0200986C: ; 0x0200986C add r4, r0, #0x0 add r0, r6, #0x0 add r1, r4, #0x0 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData str r5, [r4, #0x4] add r0, r4, #0x0 pop {r4-r6, pc} @@ -1475,7 +1475,7 @@ FUN_0200988C: ; 0x0200988C add r4, r0, #0x0 add r0, r7, #0x0 add r1, r4, #0x0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData str r5, [r4, #0x4] str r6, [r4, #0x8] add r0, r4, #0x0 @@ -1492,7 +1492,7 @@ FUN_020098B0: ; 0x020098B0 add r4, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 - bl FUN_020AFEB8 + bl NNS_G2dGetUnpackedCellBank add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -1507,7 +1507,7 @@ FUN_020098CC: ; 0x020098CC add r4, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 - bl thunk_FUN_020afda0_2 + bl NNS_G2dGetUnpackedAnimBank add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -1522,7 +1522,7 @@ FUN_020098E8: ; 0x020098E8 add r4, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 - bl FUN_020AFFD8 + bl NNS_G2dGetUnpackedMultiCellBank add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -1537,7 +1537,7 @@ FUN_02009904: ; 0x02009904 add r4, r0, #0x0 add r0, r5, #0x0 add r1, r4, #0x0 - bl thunk_FUN_020afda0 + bl NNS_G2dGetUnpackedMCAnimBank add r0, r4, #0x0 pop {r3-r5, pc} .balign 4 @@ -2266,7 +2266,7 @@ FUN_02009E88: ; 0x02009E88 mov r1, #0x0 bl FUN_02009E54 add r1, r4, #0x0 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation mov r1, #0x0 mvn r1, r1 cmp r0, r1 diff --git a/arm9/asm/unk_02009EAC.s b/arm9/asm/unk_02009EAC.s index a6a7e7d7..2c51446b 100644 --- a/arm9/asm/unk_02009EAC.s +++ b/arm9/asm/unk_02009EAC.s @@ -95,7 +95,7 @@ _02009F1C: lsl r2, r4, #0x10 lsr r1, r1, #0x10 lsr r2, r2, #0x10 - bl FUN_020B0E34 + bl NNS_G2dGetNewOamManagerInstance cmp r0, #0x0 bne _02009F48 bl ErrorHandling @@ -118,7 +118,7 @@ _02009F48: lsr r1, r1, #0x10 lsr r2, r2, #0x10 lsr r3, r3, #0x10 - bl FUN_020B0E34 + bl NNS_G2dGetNewOamManagerInstance cmp r0, #0x0 bne _02009F78 bl ErrorHandling @@ -135,11 +135,11 @@ FUN_02009F80: ; 0x02009F80 ldr r0, [r0, #0x0] cmp r0, #0x0 beq _02009F98 - bl FUN_020B0870 + bl NNS_G2dApplyAndResetOamManagerBuffer ldr r0, _02009F9C ; =UNK_021C4670 ldr r0, [r0, #0x0] add r0, #0x1c - bl FUN_020B0870 + bl NNS_G2dApplyAndResetOamManagerBuffer _02009F98: pop {r3, pc} nop @@ -264,7 +264,7 @@ FUN_0200A074: ; 0x0200A074 add r2, r1, #0x0 ldr r0, [r0, #0x0] add r1, r3, #0x0 - bl FUN_020B0C7C + bl NNS_G2dEntryOamManagerOamWithAffineIdx add r4, r0, #0x0 bne _0200A08C bl ErrorHandling @@ -283,7 +283,7 @@ FUN_0200A094: ; 0x0200A094 ldr r0, [r0, #0x0] add r1, r3, #0x0 add r0, #0x1c - bl FUN_020B0C7C + bl NNS_G2dEntryOamManagerOamWithAffineIdx add r4, r0, #0x0 bne _0200A0AE bl ErrorHandling @@ -299,7 +299,7 @@ FUN_0200A0B8: ; 0x0200A0B8 add r1, r0, #0x0 ldr r0, _0200A0D4 ; =UNK_021C4670 ldr r0, [r0, #0x0] - bl FUN_020B0BB0 + bl NNS_G2dEntryOamManagerAffine add r4, r0, #0x0 ldr r0, _0200A0D8 ; =0x0000FFFE cmp r4, r0 @@ -319,7 +319,7 @@ FUN_0200A0DC: ; 0x0200A0DC ldr r0, _0200A0FC ; =UNK_021C4670 ldr r0, [r0, #0x0] add r0, #0x1c - bl FUN_020B0BB0 + bl NNS_G2dEntryOamManagerAffine add r4, r0, #0x0 ldr r0, _0200A100 ; =0x0000FFFE cmp r4, r0 diff --git a/arm9/asm/unk_0200BB14.s b/arm9/asm/unk_0200BB14.s index 04f67c6e..7a041be2 100644 --- a/arm9/asm/unk_0200BB14.s +++ b/arm9/asm/unk_0200BB14.s @@ -90,7 +90,7 @@ _0200BB8A: ldr r1, [r5, #0x0] add r0, r7, #0x0 bl FUN_0201E00C - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule ldr r0, [r5, #0x8] cmp r0, #0x1 bne _0200BBD6 diff --git a/arm9/asm/unk_0200CABC.s b/arm9/asm/unk_0200CABC.s index 27b27a76..bf4889d8 100644 --- a/arm9/asm/unk_0200CABC.s +++ b/arm9/asm/unk_0200CABC.s @@ -1084,7 +1084,7 @@ FUN_0200D300: ; 0x0200D300 bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x18 str r0, [sp, #0x14] - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData add r2, sp, #0x20 ldr r1, [sp, #0x18] ldrb r2, [r2, #0x10] @@ -2574,7 +2574,7 @@ FUN_0200DEF4: ; 0x0200DEF4 bl FUN_02009C5C mov r1, #0x1 str r0, [sp, #0x4] - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation mov r1, #0x19 add r7, r0, #0x0 add r0, r4, #0x0 @@ -2601,7 +2601,7 @@ FUN_0200DEF4: ; 0x0200DEF4 ldr r1, [sp, #0x4] bl FUN_02009E54 mov r1, #0x1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r5, r0, #0x0 add r0, r4, #0x0 mov r1, #0x20 diff --git a/arm9/asm/unk_0200E850.s b/arm9/asm/unk_0200E850.s index 15526585..f42d0a24 100644 --- a/arm9/asm/unk_0200E850.s +++ b/arm9/asm/unk_0200E850.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020FFA38 + .extern FX_SinCosTable_ .section .rodata @@ -1353,7 +1353,7 @@ FUN_0200F0B4: ; 0x0200F0B4 asr r0, r0, #0x4 lsl r1, r0, #0x1 lsl r0, r1, #0x1 - ldr r2, _0200F0C8 ; =UNK_020FFA38 + ldr r2, _0200F0C8 ; =FX_SinCosTable_ add r1, r1, #0x1 lsl r1, r1, #0x1 ldr r3, _0200F0CC ; =FX_Div @@ -1361,7 +1361,7 @@ FUN_0200F0B4: ; 0x0200F0B4 ldrsh r1, [r2, r1] bx r3 .balign 4 -_0200F0C8: .word UNK_020FFA38 +_0200F0C8: .word FX_SinCosTable_ _0200F0CC: .word FX_Div thumb_func_start FUN_0200F0D0 @@ -4153,7 +4153,7 @@ FUN_020105A0: ; 0x020105A0 ldr r2, [r4, #0xc] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _02010680 ; =UNK_020FFA38 + ldr r0, _02010680 ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -4249,7 +4249,7 @@ _02010634: add sp, #0x110 pop {r4-r7, pc} .balign 4 -_02010680: .word UNK_020FFA38 +_02010680: .word FX_SinCosTable_ _02010684: .word 0x0000FFFF thumb_func_start FUN_02010688 diff --git a/arm9/asm/unk_02011744.s b/arm9/asm/unk_02011744.s index 40ddf1ab..ff9364c9 100644 --- a/arm9/asm/unk_02011744.s +++ b/arm9/asm/unk_02011744.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020FFA38 + .extern FX_SinCosTable_ .section .rodata @@ -870,7 +870,7 @@ _02011D52: beq _02011D92 _02011D68: add r0, r5, #0x0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy str r7, [sp, #0x0] ldr r0, [sp, #0x30] str r6, [sp, #0x4] diff --git a/arm9/asm/unk_02012004.s b/arm9/asm/unk_02012004.s index 042302c6..e43e4bb2 100644 --- a/arm9/asm/unk_02012004.s +++ b/arm9/asm/unk_02012004.s @@ -82,7 +82,7 @@ FUN_02012044: ; 0x02012044 _02012054: add r0, r4, #0x0 add r1, r5, #0x0 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData add r6, r0, #0x0 cmp r5, #0x0 bne _02012066 @@ -309,7 +309,7 @@ FUN_020121E8: ; 0x020121E8 _02012204: ldr r0, [sp, #0x20] add r1, sp, #0x2c - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData cmp r0, #0x0 bne _02012214 bl ErrorHandling @@ -649,7 +649,7 @@ FUN_02012470: ; 0x02012470 bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x0 add r5, r0, #0x0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0x1 beq _0201249C bl ErrorHandling diff --git a/arm9/asm/unk_02012944.s b/arm9/asm/unk_02012944.s index 03ccc1ea..1c1f2ab2 100644 --- a/arm9/asm/unk_02012944.s +++ b/arm9/asm/unk_02012944.s @@ -323,7 +323,7 @@ FUN_02012B88: ; 0x02012B88 _02012BA0: asr r0, r4, #0x4 lsl r1, r0, #0x2 - ldr r0, _02012BDC ; =UNK_020FFA38 + ldr r0, _02012BDC ; =FX_SinCosTable_ ldr r2, [sp, #0x4] ldrsh r0, [r0, r1] ldr r3, [sp, #0x8] @@ -351,7 +351,7 @@ _02012BD6: add sp, #0xc pop {r4-r7, pc} nop -_02012BDC: .word UNK_020FFA38 +_02012BDC: .word FX_SinCosTable_ _02012BE0: .word 0x00000000 thumb_func_start FUN_02012BE4 diff --git a/arm9/asm/unk_02012CC8.s b/arm9/asm/unk_02012CC8.s index 781d1d6d..2961eba7 100644 --- a/arm9/asm/unk_02012CC8.s +++ b/arm9/asm/unk_02012CC8.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021CED64 + .extern NNS_G3dGlb .section .rodata @@ -205,7 +205,7 @@ FUN_02012DE4: ; 0x02012DE4 beq _02012E02 add r0, r5, #0x0 add r0, #0x58 - bl FUN_020AE8CC + bl NNS_GfdSetFrmTexVramState b _02012E22 _02012E02: mov r0, #0x2 @@ -218,7 +218,7 @@ _02012E0E: ldr r0, [r4, #0x58] cmp r0, #0x0 beq _02012E1A - bl FUN_020AF894 + bl NNS_GfdFreeLnkTexVram str r7, [r4, #0x58] _02012E1A: add r6, r6, #0x1 @@ -234,7 +234,7 @@ _02012E22: beq _02012E38 add r0, r5, #0x0 add r0, #0x98 - bl FUN_020AEC7C + bl NNS_GfdSetFrmPlttVramState b _02012E60 _02012E38: mov r0, #0x8 @@ -249,7 +249,7 @@ _02012E44: ldr r0, [r0, #0x0] cmp r0, #0x0 beq _02012E58 - bl FUN_020AFA80 + bl NNS_GfdFreeLnkPlttVram add r0, r4, #0x0 add r0, #0x98 str r7, [r0, #0x0] @@ -766,7 +766,7 @@ _020131B2: beq _020131C8 add r0, r5, #0x0 add r0, #0x58 - bl FUN_020AE918 + bl NNS_GfdGetFrmTexVramState b _020131DE _020131C8: mov r0, #0x2 @@ -787,7 +787,7 @@ _020131DE: beq _020131EE add r0, r5, #0x0 add r0, #0x98 - bl FUN_020AEC98 + bl NNS_GfdGetFrmPlttVramState b _02013208 _020131EE: mov r0, #0x8 @@ -952,19 +952,19 @@ FUN_02013300: ; 0x02013300 bl FUN_0201EB8C bl FUN_0201EBA4 _0201331C: - bl FUN_020B849C + bl NNS_G3dGlbFlushP ldr r0, [r4, #0x0] - ldr r1, _02013338 ; =UNK_021CED64 + ldr r1, _02013338 ; =NNS_G3dGlb + 0x4C bl FUN_0208AD80 ldr r0, [r4, #0x20] cmp r0, #0x0 beq _02013332 bl FUN_0201EB98 _02013332: - bl FUN_020B849C + bl NNS_G3dGlbFlushP pop {r4, pc} .balign 4 -_02013338: .word UNK_021CED64 +_02013338: .word NNS_G3dGlb + 0x4C thumb_func_start FUN_0201333C FUN_0201333C: ; 0x0201333C diff --git a/arm9/asm/unk_02013CD4.s b/arm9/asm/unk_02013CD4.s index 7f278032..330a8c95 100644 --- a/arm9/asm/unk_02013CD4.s +++ b/arm9/asm/unk_02013CD4.s @@ -1,11 +1,11 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021064C0 - .extern UNK_020FFA38 - .extern UNK_021064B8 - .extern UNK_021064C4 - .extern UNK_021064BC + .extern NNS_GfdDefaultFuncAllocPlttVram + .extern FX_SinCosTable_ + .extern NNS_GfdDefaultFuncAllocTexVram + .extern NNS_GfdDefaultFuncFreePlttVram + .extern NNS_GfdDefaultFuncFreeTexVram .text @@ -141,7 +141,7 @@ _02013DC6: thumb_func_start FUN_02013DD4 FUN_02013DD4: ; 0x02013DD4 push {r4, lr} - ldr r1, _02013DE8 ; =UNK_021064BC + ldr r1, _02013DE8 ; =NNS_GfdDefaultFuncFreeTexVram add r4, r0, #0x0 ldr r0, [r4, #0x0] ldr r1, [r1, #0x0] @@ -150,7 +150,7 @@ FUN_02013DD4: ; 0x02013DD4 bl FUN_02013F50 pop {r4, pc} .balign 4 -_02013DE8: .word UNK_021064BC +_02013DE8: .word NNS_GfdDefaultFuncFreeTexVram thumb_func_start FUN_02013DEC FUN_02013DEC: ; 0x02013DEC @@ -204,7 +204,7 @@ _02013E36: thumb_func_start FUN_02013E44 FUN_02013E44: ; 0x02013E44 push {r4, lr} - ldr r1, _02013E58 ; =UNK_021064C4 + ldr r1, _02013E58 ; =NNS_GfdDefaultFuncFreePlttVram add r4, r0, #0x0 ldr r0, [r4, #0x0] ldr r1, [r1, #0x0] @@ -213,7 +213,7 @@ FUN_02013E44: ; 0x02013E44 bl FUN_02013F5C pop {r4, pc} .balign 4 -_02013E58: .word UNK_021064C4 +_02013E58: .word NNS_GfdDefaultFuncFreePlttVram thumb_func_start FUN_02013E5C FUN_02013E5C: ; 0x02013E5C @@ -401,21 +401,21 @@ _02013F4C: .word 0x00007FFF thumb_func_start FUN_02013F50 FUN_02013F50: ; 0x02013F50 - ldr r3, _02013F58 ; =FUN_020B1A24 + ldr r3, _02013F58 ; =NNS_G2dInitImageProxy mov r1, #0x0 stmia r0!, {r1} bx r3 .balign 4 -_02013F58: .word FUN_020B1A24 +_02013F58: .word NNS_G2dInitImageProxy thumb_func_start FUN_02013F5C FUN_02013F5C: ; 0x02013F5C - ldr r3, _02013F64 ; =FUN_020B19DC + ldr r3, _02013F64 ; =NNS_G2dInitImagePaletteProxy mov r1, #0x0 stmia r0!, {r1} bx r3 .balign 4 -_02013F64: .word FUN_020B19DC +_02013F64: .word NNS_G2dInitImagePaletteProxy thumb_func_start FUN_02013F68 FUN_02013F68: ; 0x02013F68 @@ -585,7 +585,7 @@ _02014076: thumb_func_start FUN_0201407C FUN_0201407C: ; 0x0201407C push {r3, lr} - ldr r3, _0201408C ; =UNK_021064B8 + ldr r3, _0201408C ; =NNS_GfdDefaultFuncAllocTexVram mov r1, #0x0 ldr r0, [r0, #0x10] ldr r3, [r3, #0x0] @@ -593,12 +593,12 @@ FUN_0201407C: ; 0x0201407C blx r3 pop {r3, pc} .balign 4 -_0201408C: .word UNK_021064B8 +_0201408C: .word NNS_GfdDefaultFuncAllocTexVram thumb_func_start FUN_02014090 FUN_02014090: ; 0x02014090 push {r3, lr} - ldr r3, _020140A0 ; =UNK_021064C0 + ldr r3, _020140A0 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0x0 ldr r3, [r3, #0x0] lsl r0, r0, #0x5 @@ -606,7 +606,7 @@ FUN_02014090: ; 0x02014090 blx r3 pop {r3, pc} .balign 4 -_020140A0: .word UNK_021064C0 +_020140A0: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_020140A4 FUN_020140A4: ; 0x020140A4 @@ -615,7 +615,7 @@ FUN_020140A4: ; 0x020140A4 add r3, r2, #0x0 lsr r1, r1, #0xd mov r2, #0x0 - bl FUN_020B1528 + bl NNS_G2dLoadImage2DMapping pop {r3, pc} thumb_func_start FUN_020140B4 @@ -632,7 +632,7 @@ FUN_020140B4: ; 0x020140B4 str r2, [r5, #0x8] lsr r1, r1, #0xd mov r2, #0x0 - bl FUN_020B1240 + bl NNS_G2dLoadPalette str r4, [r5, #0x8] pop {r3-r5, pc} .balign 4 @@ -741,7 +741,7 @@ _02014172: str r1, [r3, #0x0] str r2, [r3, #0x0] ldr r0, [r5, #0x18] - ldr r1, _0201420C ; =UNK_020FFA38 + ldr r1, _0201420C ; =FX_SinCosTable_ asr r0, r0, #0x4 lsl r2, r0, #0x1 lsl r0, r2, #0x1 @@ -781,7 +781,7 @@ _02014172: str r4, [sp, #0x10] ldrsh r3, [r5, r3] add r1, r0, #0x0 - bl FUN_020B0250 + bl NNS_G2dDrawSpriteFast ldr r0, _02014214 ; =0x04000448 mov r1, #0x1 str r1, [r0, #0x0] @@ -793,7 +793,7 @@ _020141FC: .word 0x7FFF8000 _02014200: .word 0x00004210 _02014204: .word 0x040004AC _02014208: .word 0x04000470 -_0201420C: .word UNK_020FFA38 +_0201420C: .word FX_SinCosTable_ _02014210: .word 0x0400046C _02014214: .word 0x04000448 @@ -868,14 +868,14 @@ _0201424C: ldr r0, [r5, #0x4] mov r1, #0x0 add r0, r0, #0x4 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation add r1, r0, #0x0 add r0, r7, #0x0 bl FUN_02013F14 ldr r0, [r5, #0x8] mov r1, #0x0 add r0, r0, #0x4 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r1, r0, #0x0 add r0, r7, #0x0 bl FUN_02013F18 diff --git a/arm9/asm/unk_02014BF4.s b/arm9/asm/unk_02014BF4.s index 20e8fa45..a8205c88 100644 --- a/arm9/asm/unk_02014BF4.s +++ b/arm9/asm/unk_02014BF4.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020FFA38 + .extern FX_SinCosTable_ .section .rodata @@ -1311,7 +1311,7 @@ FUN_0201551C: ; 0x0201551C ldr r2, [sp, #0x4] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _0201554C ; =UNK_020FFA38 + ldr r0, _0201554C ; =FX_SinCosTable_ ldrsh r0, [r0, r1] mul r0, r2 asr r1, r0, #0xc @@ -1323,7 +1323,7 @@ FUN_0201551C: ; 0x0201551C add sp, #0xc pop {r3-r4, pc} nop -_0201554C: .word UNK_020FFA38 +_0201554C: .word FX_SinCosTable_ thumb_func_start FUN_02015550 FUN_02015550: ; 0x02015550 @@ -1340,7 +1340,7 @@ FUN_02015550: ; 0x02015550 lsl r1, r1, #0x1 add r1, r1, #0x1 lsl r2, r1, #0x1 - ldr r1, _02015584 ; =UNK_020FFA38 + ldr r1, _02015584 ; =FX_SinCosTable_ ldrsh r1, [r1, r2] mul r1, r0 add r0, sp, #0x0 @@ -1352,7 +1352,7 @@ FUN_02015550: ; 0x02015550 add sp, #0xc pop {r3-r4, pc} nop -_02015584: .word UNK_020FFA38 +_02015584: .word FX_SinCosTable_ thumb_func_start FUN_02015588 FUN_02015588: ; 0x02015588 @@ -2032,7 +2032,7 @@ _02015A5C: ; jump table (using 16-bit offset) _02015A64: asr r0, r1, #0x4 lsl r1, r0, #0x2 - ldr r0, _02015AE8 ; =UNK_020FFA38 + ldr r0, _02015AE8 ; =FX_SinCosTable_ ldr r2, [r4, #0xc] ldrsh r0, [r0, r1] mul r0, r2 @@ -2045,7 +2045,7 @@ _02015A78: lsl r1, r1, #0x1 add r1, r1, #0x1 lsl r2, r1, #0x1 - ldr r1, _02015AE8 ; =UNK_020FFA38 + ldr r1, _02015AE8 ; =FX_SinCosTable_ ldr r0, [r4, #0xc] ldrsh r1, [r1, r2] mul r1, r0 @@ -2056,7 +2056,7 @@ _02015A78: _02015A90: asr r0, r1, #0x4 lsl r1, r0, #0x2 - ldr r0, _02015AE8 ; =UNK_020FFA38 + ldr r0, _02015AE8 ; =FX_SinCosTable_ ldr r2, [r4, #0xc] ldrsh r0, [r0, r1] mul r0, r2 @@ -2070,7 +2070,7 @@ _02015AA6: lsl r1, r1, #0x1 add r1, r1, #0x1 lsl r2, r1, #0x1 - ldr r1, _02015AE8 ; =UNK_020FFA38 + ldr r1, _02015AE8 ; =FX_SinCosTable_ ldr r0, [r4, #0xc] ldrsh r1, [r1, r2] mul r1, r0 @@ -2101,7 +2101,7 @@ _02015AC4: _02015AE6: pop {r4, pc} .balign 4 -_02015AE8: .word UNK_020FFA38 +_02015AE8: .word FX_SinCosTable_ thumb_func_start FUN_02015AEC FUN_02015AEC: ; 0x02015AEC @@ -2135,7 +2135,7 @@ _02015B1A: ; jump table (using 16-bit offset) _02015B22: asr r0, r1, #0x4 lsl r1, r0, #0x2 - ldr r0, _02015BA8 ; =UNK_020FFA38 + ldr r0, _02015BA8 ; =FX_SinCosTable_ ldr r2, [r4, #0xc] ldrsh r0, [r0, r1] mul r0, r2 @@ -2148,7 +2148,7 @@ _02015B36: lsl r1, r1, #0x1 add r1, r1, #0x1 lsl r2, r1, #0x1 - ldr r1, _02015BA8 ; =UNK_020FFA38 + ldr r1, _02015BA8 ; =FX_SinCosTable_ ldr r0, [r4, #0xc] ldrsh r1, [r1, r2] mul r1, r0 @@ -2159,7 +2159,7 @@ _02015B36: _02015B4E: asr r0, r1, #0x4 lsl r1, r0, #0x2 - ldr r0, _02015BA8 ; =UNK_020FFA38 + ldr r0, _02015BA8 ; =FX_SinCosTable_ ldr r2, [r4, #0xc] ldrsh r0, [r0, r1] mul r0, r2 @@ -2173,7 +2173,7 @@ _02015B64: lsl r1, r1, #0x1 add r1, r1, #0x1 lsl r2, r1, #0x1 - ldr r1, _02015BA8 ; =UNK_020FFA38 + ldr r1, _02015BA8 ; =FX_SinCosTable_ ldr r0, [r4, #0xc] ldrsh r1, [r1, r2] mul r1, r0 @@ -2204,7 +2204,7 @@ _02015B82: _02015BA4: pop {r4, pc} nop -_02015BA8: .word UNK_020FFA38 +_02015BA8: .word FX_SinCosTable_ thumb_func_start FUN_02015BAC FUN_02015BAC: ; 0x02015BAC diff --git a/arm9/asm/unk_0201B1A8.s b/arm9/asm/unk_0201B1A8.s index 05245bc6..28308d53 100644 --- a/arm9/asm/unk_0201B1A8.s +++ b/arm9/asm/unk_0201B1A8.s @@ -1,12 +1,12 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021CED98 - .extern UNK_021CEDD4 - .extern UNK_021064C0 - .extern UNK_021064B8 - .extern UNK_021064C4 - .extern UNK_021064BC + .extern NNS_G3dGlb + .extern NNS_G3dGlb + .extern NNS_GfdDefaultFuncAllocPlttVram + .extern NNS_GfdDefaultFuncAllocTexVram + .extern NNS_GfdDefaultFuncFreePlttVram + .extern NNS_GfdDefaultFuncFreeTexVram .section .bss @@ -23,7 +23,7 @@ FUN_0201B1A8: ; 0x0201B1A8 add r4, r2, #0x0 bl FUN_020161A4 str r0, [r5, #0x0] - bl FUN_020BC0FC + bl NNS_G3dGetTex cmp r0, #0x0 beq _0201B1D2 bl FUN_0201B254 @@ -33,10 +33,10 @@ FUN_0201B1A8: ; 0x0201B1A8 ldr r1, [r0, #0x8] bl DC_FlushRange ldr r0, [r5, #0x0] - bl FUN_020BB59C + bl NNS_G3dResDefaultSetup _0201B1D2: ldr r0, [r5, #0x0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -50,7 +50,7 @@ FUN_0201B1E4: ; 0x0201B1E4 add r5, r1, #0x0 add r4, r0, #0x0 ldr r0, [r5, #0x0] - bl FUN_020BC0FC + bl NNS_G3dGetTex cmp r0, #0x0 beq _0201B20A bl FUN_0201B254 @@ -60,10 +60,10 @@ FUN_0201B1E4: ; 0x0201B1E4 ldr r1, [r0, #0x8] bl DC_FlushRange ldr r0, [r5, #0x0] - bl FUN_020BB59C + bl NNS_G3dResDefaultSetup _0201B20A: ldr r0, [r5, #0x0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -81,7 +81,7 @@ FUN_0201B21C: ; 0x0201B21C bl FUN_0201B1A8 ldr r1, [r4, #0x0] add r0, r5, #0x0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit pop {r3-r5, pc} thumb_func_start FUN_0201B234 @@ -98,7 +98,7 @@ FUN_0201B234: ; 0x0201B234 _0201B24A: ldr r1, [r4, #0x0] add r0, r5, #0x0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit pop {r3-r5, pc} thumb_func_start FUN_0201B254 @@ -125,24 +125,24 @@ FUN_0201B26C: ; 0x0201B26C add r0, r1, #0x0 add r4, r2, #0x0 add r6, r3, #0x0 - bl FUN_020B8474 - ldr r1, _0201B2A0 ; =UNK_021CEDD4 + bl NNS_G3dGlbSetBaseTrans + ldr r1, _0201B2A0 ; =NNS_G3dGlb + 0xBC add r0, r4, #0x0 bl MI_Copy36B - ldr r1, _0201B2A4 ; =UNK_021CED98 + ldr r1, _0201B2A4 ; =NNS_G3dGlb + 0x80 mov r0, #0xa4 ldr r2, [r1, #0x7c] bic r2, r0 add r0, r6, #0x0 str r2, [r1, #0x7c] - bl FUN_020B844C - bl FUN_020B849C + bl NNS_G3dGlbSetBaseScale + bl NNS_G3dGlbFlushP add r0, r5, #0x0 - bl FUN_020BAC98 + bl NNS_G3dDraw pop {r4-r6, pc} nop -_0201B2A0: .word UNK_021CEDD4 -_0201B2A4: .word UNK_021CED98 +_0201B2A0: .word NNS_G3dGlb + 0xBC +_0201B2A4: .word NNS_G3dGlb + 0x80 thumb_func_start FUN_0201B2A8 FUN_0201B2A8: ; 0x0201B2A8 @@ -151,28 +151,28 @@ FUN_0201B2A8: ; 0x0201B2A8 add r0, r1, #0x0 add r4, r2, #0x0 add r6, r3, #0x0 - bl FUN_020B8474 - ldr r1, _0201B2E4 ; =UNK_021CEDD4 + bl NNS_G3dGlbSetBaseTrans + ldr r1, _0201B2E4 ; =NNS_G3dGlb + 0xBC add r0, r4, #0x0 bl MI_Copy36B - ldr r1, _0201B2E8 ; =UNK_021CED98 + ldr r1, _0201B2E8 ; =NNS_G3dGlb + 0x80 mov r0, #0xa4 ldr r2, [r1, #0x7c] bic r2, r0 str r2, [r1, #0x7c] add r0, r6, #0x0 - bl FUN_020B844C - bl FUN_020B849C + bl NNS_G3dGlbSetBaseScale + bl NNS_G3dGlbFlushP mov r1, #0x0 ldr r0, [r5, #0x4] add r2, r1, #0x0 mov r3, #0x1 - bl FUN_020BAFB8 - bl FUN_020BB394 + bl NNS_G3dDraw1Mat1Shp + bl NNS_G3dGeFlushBuffer pop {r4-r6, pc} .balign 4 -_0201B2E4: .word UNK_021CEDD4 -_0201B2E8: .word UNK_021CED98 +_0201B2E4: .word NNS_G3dGlb + 0xBC +_0201B2E8: .word NNS_G3dGlb + 0x80 thumb_func_start FUN_0201B2EC FUN_0201B2EC: ; 0x0201B2EC @@ -269,11 +269,11 @@ _0201B3A4: .word FUN_020223BC FUN_0201B3A8: ; 0x0201B3A8 push {r4, lr} add r4, r1, #0x0 - bl FUN_020BC13C + bl NNS_G3dGetMdlSet cmp r4, #0x0 beq _0201B3BE add r1, r4, #0x0 - bl FUN_020B7790 + bl NNS_G3dBindMdlSet mov r0, #0x1 pop {r4, pc} _0201B3BE: @@ -299,17 +299,17 @@ _0201B3D2: str r1, [sp, #0x0] cmp r5, #0x0 beq _0201B4D0 - bl FUN_020B7E1C + bl NNS_G3dTexGetRequiredSize add r6, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7E10 + bl NNS_G3dTex4x4GetRequiredSize add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7CE4 + bl NNS_G3dPlttGetRequiredSize str r0, [sp, #0xc] cmp r6, #0x0 beq _0201B412 - ldr r3, _0201B4D8 ; =UNK_021064B8 + ldr r3, _0201B4D8 ; =NNS_GfdDefaultFuncAllocTexVram mov r1, #0x0 ldr r3, [r3, #0x0] add r0, r6, #0x0 @@ -325,7 +325,7 @@ _0201B412: _0201B414: cmp r4, #0x0 beq _0201B42E - ldr r3, _0201B4D8 ; =UNK_021064B8 + ldr r3, _0201B4D8 ; =NNS_GfdDefaultFuncAllocTexVram add r0, r4, #0x0 ldr r3, [r3, #0x0] mov r1, #0x1 @@ -342,7 +342,7 @@ _0201B430: ldr r0, [sp, #0xc] cmp r0, #0x0 beq _0201B450 - ldr r3, _0201B4DC ; =UNK_021064C0 + ldr r3, _0201B4DC ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0x2 ldrh r2, [r5, #0x20] lsl r1, r1, #0xe @@ -361,7 +361,7 @@ _0201B452: ldr r0, [sp, #0x8] cmp r0, #0x0 bne _0201B46E - ldr r1, _0201B4E0 ; =UNK_021064BC + ldr r1, _0201B4E0 ; =NNS_GfdDefaultFuncFreeTexVram add r0, r7, #0x0 ldr r1, [r1, #0x0] blx r1 @@ -376,7 +376,7 @@ _0201B46E: ldr r0, [sp, #0x4] cmp r0, #0x0 bne _0201B48A - ldr r1, _0201B4E0 ; =UNK_021064BC + ldr r1, _0201B4E0 ; =NNS_GfdDefaultFuncFreeTexVram add r0, r6, #0x0 ldr r1, [r1, #0x0] blx r1 @@ -391,7 +391,7 @@ _0201B48A: ldr r0, [sp, #0x0] cmp r0, #0x0 bne _0201B4A6 - ldr r1, _0201B4E4 ; =UNK_021064C4 + ldr r1, _0201B4E4 ; =NNS_GfdDefaultFuncFreePlttVram add r0, r4, #0x0 ldr r1, [r1, #0x0] blx r1 @@ -406,25 +406,25 @@ _0201B4A6: add r0, r5, #0x0 add r1, r7, #0x0 add r2, r6, #0x0 - bl FUN_020B7DFC + bl NNS_G3dTexSetTexKey add r0, r5, #0x0 add r1, r4, #0x0 - bl FUN_020B7CDC + bl NNS_G3dPlttSetPlttKey ldr r1, [r5, #0x4] add r0, r5, #0x0 bl DC_FlushRange add r0, r5, #0x0 mov r1, #0x1 - bl FUN_020B7D28 + bl NNS_G3dTexLoad add r0, r5, #0x0 mov r1, #0x1 - bl FUN_020B7C78 + bl NNS_G3dPlttLoad _0201B4D0: mov r0, #0x1 add sp, #0x10 pop {r3-r7, pc} nop -_0201B4D8: .word UNK_021064B8 -_0201B4DC: .word UNK_021064C0 -_0201B4E0: .word UNK_021064BC -_0201B4E4: .word UNK_021064C4 +_0201B4D8: .word NNS_GfdDefaultFuncAllocTexVram +_0201B4DC: .word NNS_GfdDefaultFuncAllocPlttVram +_0201B4E0: .word NNS_GfdDefaultFuncFreeTexVram +_0201B4E4: .word NNS_GfdDefaultFuncFreePlttVram diff --git a/arm9/asm/unk_0201B6D0.s b/arm9/asm/unk_0201B6D0.s index b65b3870..1d795e17 100644 --- a/arm9/asm/unk_0201B6D0.s +++ b/arm9/asm/unk_0201B6D0.s @@ -1,8 +1,8 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021CEDD4 - .extern UNK_021CED98 + .extern NNS_G3dGlb + .extern NNS_G3dGlb .text @@ -38,22 +38,22 @@ FUN_0201B6D0: ; 0x0201B6D0 ldrsh r3, [r4, r3] bl FUN_0201B808 add r0, sp, #0x1c - bl FUN_020B8474 - ldr r1, _0201B764 ; =UNK_021CEDD4 + bl NNS_G3dGlbSetBaseTrans + ldr r1, _0201B764 ; =NNS_G3dGlb + 0xBC add r0, r5, #0x0 bl MI_Copy36B - ldr r1, _0201B768 ; =UNK_021CED98 + ldr r1, _0201B768 ; =NNS_G3dGlb + 0x80 mov r0, #0xa4 ldr r2, [r1, #0x7c] bic r2, r0 add r0, r7, #0x0 str r2, [r1, #0x7c] - bl FUN_020B844C - bl FUN_020B849C + bl NNS_G3dGlbSetBaseScale + bl NNS_G3dGlbFlushP mov r1, #0x0 mov r0, #0x11 add r2, r1, #0x0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, [r4, #0x24] add r1, sp, #0x10 str r0, [sp, #0x10] @@ -61,7 +61,7 @@ FUN_0201B6D0: ; 0x0201B6D0 str r0, [sp, #0x18] mov r0, #0x1b mov r2, #0x3 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add r0, sp, #0x28 bl FUN_0201B82C add r4, r0, #0x0 @@ -69,13 +69,13 @@ FUN_0201B6D0: ; 0x0201B6D0 mov r0, #0x12 add r1, sp, #0xc str r2, [sp, #0xc] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add r0, r4, #0x0 add sp, #0x34 pop {r4-r7, pc} .balign 4 -_0201B764: .word UNK_021CEDD4 -_0201B768: .word UNK_021CED98 +_0201B764: .word NNS_G3dGlb + 0xBC +_0201B768: .word NNS_G3dGlb + 0x80 thumb_func_start FUN_0201B76C FUN_0201B76C: ; 0x0201B76C @@ -97,12 +97,12 @@ FUN_0201B76C: ; 0x0201B76C add r2, r0, #0x0 bl FUN_0201B808 add r0, r5, #0x0 - bl FUN_020B8474 - bl FUN_020B849C + bl NNS_G3dGlbSetBaseTrans + bl NNS_G3dGlbFlushP mov r1, #0x0 mov r0, #0x11 add r2, r1, #0x0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, [r4, #0x10] lsl r2, r0, #0xc ldr r0, [r4, #0xc] @@ -115,7 +115,7 @@ FUN_0201B76C: ; 0x0201B76C mov r0, #0x1b add r1, sp, #0x10 mov r2, #0x3 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add r0, sp, #0x1c bl FUN_0201B82C add r4, r0, #0x0 @@ -123,7 +123,7 @@ FUN_0201B76C: ; 0x0201B76C mov r0, #0x12 add r1, sp, #0xc str r2, [sp, #0xc] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add r0, r4, #0x0 add sp, #0x28 pop {r3-r5, pc} @@ -183,22 +183,22 @@ FUN_0201B82C: ; 0x0201B82C mov r0, #0x29 add r1, sp, #0x4 str r2, [sp, #0x8] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r0, #0x0 str r0, [sp, #0x0] mov r0, #0x40 add r1, sp, #0x0 mov r2, #0x1 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r1, #0x0 mov r0, #0x41 add r2, r1, #0x0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r0, #0x70 add r1, r4, #0x0 mov r2, #0x3 - bl FUN_020BB1C0 - bl FUN_020BB394 + bl NNS_G3dGeBufferOP_N + bl NNS_G3dGeFlushBuffer add r4, sp, #0x8 _0201B86A: add r0, r4, #0x0 diff --git a/arm9/asm/unk_0201C24C.s b/arm9/asm/unk_0201C24C.s index 36817113..9e5cd227 100644 --- a/arm9/asm/unk_0201C24C.s +++ b/arm9/asm/unk_0201C24C.s @@ -43,7 +43,7 @@ _0201C272: ldr r1, [r1, #0x0] ldr r0, [r1, #0x8] ldr r1, [r1, #0x0] - bl FUN_020AEF1C + bl NNS_GfdInitVramTransferManager pop {r3-r5, pc} nop _0201C298: .word UNK_021C5934 @@ -102,7 +102,7 @@ _0201C2FA: add r1, r4, #0x0 add r2, r6, #0x0 add r3, r7, #0x0 - bl FUN_020AEE40 + bl NNS_GfdRegisterNewVramTransferTask pop {r3-r7, pc} .balign 4 _0201C308: .word UNK_021C5934 @@ -114,7 +114,7 @@ FUN_0201C30C: ; 0x0201C30C ldr r0, [r0, #0x0] cmp r0, #0x0 beq _0201C322 - bl FUN_020AEEB8 + bl NNS_GfdDoVramTransfer ldr r0, _0201C324 ; =UNK_021C5934 mov r1, #0x0 ldr r0, [r0, #0x0] @@ -135,7 +135,7 @@ FUN_0201C328: ; 0x0201C328 ldr r2, _0201C344 ; =FUN_0201C358 add r1, r4, #0x0 add r5, r0, #0x0 - bl FUN_020B4568 + bl NNS_G2dInitCellTransferStateManager add r0, r5, #0x0 pop {r3-r5, pc} .balign 4 @@ -143,10 +143,10 @@ _0201C344: .word FUN_0201C358 thumb_func_start FUN_0201C348 FUN_0201C348: ; 0x0201C348 - ldr r3, _0201C34C ; =FUN_020B442C + ldr r3, _0201C34C ; =NNS_G2dUpdateCellTransferStateManager bx r3 .balign 4 -_0201C34C: .word FUN_020B442C +_0201C34C: .word NNS_G2dUpdateCellTransferStateManager thumb_func_start FUN_0201C350 FUN_0201C350: ; 0x0201C350 diff --git a/arm9/asm/unk_0201C360.s b/arm9/asm/unk_0201C360.s index 5f8ccb52..078b3ee3 100644 --- a/arm9/asm/unk_0201C360.s +++ b/arm9/asm/unk_0201C360.s @@ -321,7 +321,7 @@ FUN_0201C578: ; 0x0201C578 add r0, r4, #0x0 add r0, #0x3c add r1, sp, #0x0 - bl FUN_020BC2A0 + bl NNS_G3dGetResDataByName add r1, r0, #0x0 bne _0201C598 add sp, #0x10 @@ -397,7 +397,7 @@ FUN_0201C5FC: ; 0x0201C5FC add r0, r4, #0x0 add r0, #0x3c add r1, sp, #0x0 - bl FUN_020BC2A0 + bl NNS_G3dGetResDataByName add r1, r0, #0x0 add r0, r4, #0x0 bl FUN_0201C5A4 diff --git a/arm9/asm/unk_0201C7A0.s b/arm9/asm/unk_0201C7A0.s index 0a43b49f..aa8bfe83 100644 --- a/arm9/asm/unk_0201C7A0.s +++ b/arm9/asm/unk_0201C7A0.s @@ -2,7 +2,7 @@ .include "global.inc" .extern gSineTable - .extern UNK_020FFA38 + .extern FX_SinCosTable_ .text @@ -401,7 +401,7 @@ FUN_0201CAA8: ; 0x0201CAA8 sub sp, #0x24 add r4, r1, #0x0 ldr r1, [r4, #0x0] - ldr r3, _0201CB1C ; =UNK_020FFA38 + ldr r3, _0201CB1C ; =FX_SinCosTable_ lsl r1, r1, #0x10 lsr r1, r1, #0x10 asr r1, r1, #0x4 @@ -414,7 +414,7 @@ FUN_0201CAA8: ; 0x0201CAA8 add r5, r0, #0x0 bl MTX_RotX33_ ldr r0, [r4, #0x4] - ldr r3, _0201CB1C ; =UNK_020FFA38 + ldr r3, _0201CB1C ; =FX_SinCosTable_ lsl r0, r0, #0x10 lsr r0, r0, #0x10 asr r0, r0, #0x4 @@ -431,7 +431,7 @@ FUN_0201CAA8: ; 0x0201CAA8 add r2, r5, #0x0 bl MTX_Concat33 ldr r0, [r4, #0x8] - ldr r3, _0201CB1C ; =UNK_020FFA38 + ldr r3, _0201CB1C ; =FX_SinCosTable_ lsl r0, r0, #0x10 lsr r0, r0, #0x10 asr r0, r0, #0x4 @@ -450,7 +450,7 @@ FUN_0201CAA8: ; 0x0201CAA8 add sp, #0x24 pop {r4-r5, pc} nop -_0201CB1C: .word UNK_020FFA38 +_0201CB1C: .word FX_SinCosTable_ thumb_func_start FUN_0201CB20 FUN_0201CB20: ; 0x0201CB20 @@ -504,7 +504,7 @@ FUN_0201CB7C: ; 0x0201CB7C lsl r2, r0, #0x1 add r6, r1, #0x0 lsl r0, r2, #0x1 - ldr r1, _0201CBE8 ; =UNK_020FFA38 + ldr r1, _0201CBE8 ; =FX_SinCosTable_ add r2, r2, #0x1 lsl r2, r2, #0x1 ldrsh r0, [r1, r0] @@ -550,4 +550,4 @@ FUN_0201CB7C: ; 0x0201CB7C str r1, [r5, #0x0] pop {r3-r7, pc} .balign 4 -_0201CBE8: .word UNK_020FFA38 +_0201CBE8: .word FX_SinCosTable_ diff --git a/arm9/asm/unk_0201D040.s b/arm9/asm/unk_0201D040.s index ba8c7b75..ab0c07c9 100644 --- a/arm9/asm/unk_0201D040.s +++ b/arm9/asm/unk_0201D040.s @@ -858,11 +858,11 @@ FUN_0201D690: ; 0x0201D690 add r1, #0x3c strb r2, [r1, #0x0] str r2, [r0, #0x40] - ldr r3, _0201D6B0 ; =FUN_020B1A24 + ldr r3, _0201D6B0 ; =NNS_G2dInitImageProxy add r0, #0x10 bx r3 nop -_0201D6B0: .word FUN_020B1A24 +_0201D6B0: .word NNS_G2dInitImageProxy thumb_func_start FUN_0201D6B4 FUN_0201D6B4: ; 0x0201D6B4 @@ -1277,7 +1277,7 @@ FUN_0201D9B0: ; 0x0201D9B0 push {r4, lr} add r4, r0, #0x0 add r0, #0x10 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy ldr r1, [r4, #0x4] cmp r1, #0x3 beq _0201D9C8 @@ -1325,13 +1325,13 @@ _0201DA04: add r5, #0x10 add r2, r4, #0x0 add r3, r5, #0x0 - bl FUN_020B1528 + bl NNS_G2dLoadImage2DMapping b _0201DA20 _0201DA16: add r5, #0x10 add r2, r4, #0x0 add r3, r5, #0x0 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping _0201DA20: cmp r4, #0x1 bne _0201DA2C @@ -1351,7 +1351,7 @@ FUN_0201DA38: ; 0x0201DA38 push {r4, lr} add r4, r0, #0x0 add r0, #0x10 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy ldr r1, [r4, #0x4] cmp r1, #0x3 beq _0201DA50 @@ -1394,7 +1394,7 @@ _0201DA88: add r5, #0x10 add r2, r4, #0x0 add r3, r5, #0x0 - bl FUN_020B1340 + bl NNS_G2dLoadImageVramTransfer cmp r4, #0x1 bne _0201DAA0 mov r0, #0x1 @@ -1932,7 +1932,7 @@ FUN_0201DE4C: ; 0x0201DE4C beq _0201DE8A add r0, r4, #0x0 add r0, #0x10 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation ldr r1, _0201DECC ; =UNK_021C5994 ldr r2, [r1, #0x0] ldr r1, [r2, #0x1c] @@ -1958,7 +1958,7 @@ _0201DE8A: beq _0201DEC4 add r0, r4, #0x0 add r0, #0x10 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation ldr r1, _0201DECC ; =UNK_021C5994 ldr r2, [r1, #0x0] ldr r1, [r2, #0x20] diff --git a/arm9/asm/unk_0201E00C.s b/arm9/asm/unk_0201E00C.s index 744cbe95..ae49b439 100644 --- a/arm9/asm/unk_0201E00C.s +++ b/arm9/asm/unk_0201E00C.s @@ -378,7 +378,7 @@ _0201E2A4: _0201E2A6: cmp r4, #0x0 beq _0201E2B6 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r1, r4, #0x0 bl _u32_div_f pop {r4, pc} @@ -434,7 +434,7 @@ FUN_0201E2F8: ; 0x0201E2F8 str r0, [r4, #0xc] add r4, #0x10 add r0, r4, #0x0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy pop {r4, pc} thumb_func_start FUN_0201E314 @@ -675,7 +675,7 @@ FUN_0201E4BC: ; 0x0201E4BC push {r4, lr} add r4, r0, #0x0 add r0, #0x10 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy ldr r0, [r4, #0x4] mov r2, #0x1 tst r0, r2 @@ -684,7 +684,7 @@ FUN_0201E4BC: ; 0x0201E4BC ldr r0, [r4, #0x0] ldr r1, [r4, #0x24] add r3, #0x10 - bl FUN_020B1240 + bl NNS_G2dLoadPalette _0201E4DA: ldr r0, [r4, #0x4] mov r2, #0x2 @@ -694,7 +694,7 @@ _0201E4DA: ldr r1, [r4, #0x28] add r4, #0x10 add r3, r4, #0x0 - bl FUN_020B1240 + bl NNS_G2dLoadPalette _0201E4EE: pop {r4, pc} diff --git a/arm9/asm/unk_0201E7D8.s b/arm9/asm/unk_0201E7D8.s index a70f909d..32f01a13 100644 --- a/arm9/asm/unk_0201E7D8.s +++ b/arm9/asm/unk_0201E7D8.s @@ -1,13 +1,13 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021CED98 - .extern UNK_021CEF64 - .extern UNK_021CED20 - .extern UNK_020FFA38 - .extern UNK_021CEF58 - .extern UNK_021CEF70 - .extern UNK_021CED64 + .extern NNS_G3dGlb + .extern NNS_G3dGlb + .extern NNS_G3dGlb + .extern FX_SinCosTable_ + .extern NNS_G3dGlb + .extern NNS_G3dGlb + .extern NNS_G3dGlb .section .data @@ -32,7 +32,7 @@ FUN_0201E7D8: ; 0x0201E7D8 ldrh r4, [r5, #0x3c] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _0201E8B4 ; =UNK_020FFA38 + ldr r0, _0201E8B4 ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -46,7 +46,7 @@ FUN_0201E7D8: ; 0x0201E7D8 lsl r2, r2, #0x1 add r2, r2, #0x1 lsl r3, r2, #0x1 - ldr r2, _0201E8B4 ; =UNK_020FFA38 + ldr r2, _0201E8B4 ; =FX_SinCosTable_ lsl r1, r1, #0x14 ldrsh r2, [r2, r3] lsr r0, r0, #0xc @@ -69,7 +69,7 @@ FUN_0201E7D8: ; 0x0201E7D8 lsl r0, r0, #0x1 add r0, r0, #0x1 lsl r1, r0, #0x1 - ldr r0, _0201E8B4 ; =UNK_020FFA38 + ldr r0, _0201E8B4 ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -86,7 +86,7 @@ FUN_0201E7D8: ; 0x0201E7D8 lsl r2, r2, #0x1 add r2, r2, #0x1 lsl r3, r2, #0x1 - ldr r2, _0201E8B4 ; =UNK_020FFA38 + ldr r2, _0201E8B4 ; =FX_SinCosTable_ orr r0, r1 ldrsh r2, [r2, r3] asr r1, r0, #0x1f @@ -106,7 +106,7 @@ FUN_0201E7D8: ; 0x0201E7D8 str r1, [r5, #0x1c] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _0201E8B4 ; =UNK_020FFA38 + ldr r0, _0201E8B4 ; =FX_SinCosTable_ ldr r2, [r5, #0x38] ldrsh r0, [r0, r1] asr r3, r2, #0x1f @@ -129,7 +129,7 @@ FUN_0201E7D8: ; 0x0201E7D8 bl VEC_Add pop {r3-r5, pc} nop -_0201E8B4: .word UNK_020FFA38 +_0201E8B4: .word FX_SinCosTable_ thumb_func_start FUN_0201E8B8 FUN_0201E8B8: ; 0x0201E8B8 @@ -140,7 +140,7 @@ FUN_0201E8B8: ; 0x0201E8B8 ldrh r4, [r5, #0x3c] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _0201E998 ; =UNK_020FFA38 + ldr r0, _0201E998 ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -154,7 +154,7 @@ FUN_0201E8B8: ; 0x0201E8B8 lsl r2, r2, #0x1 add r2, r2, #0x1 lsl r3, r2, #0x1 - ldr r2, _0201E998 ; =UNK_020FFA38 + ldr r2, _0201E998 ; =FX_SinCosTable_ lsl r1, r1, #0x14 ldrsh r2, [r2, r3] lsr r0, r0, #0xc @@ -178,7 +178,7 @@ FUN_0201E8B8: ; 0x0201E8B8 lsl r0, r0, #0x1 add r0, r0, #0x1 lsl r1, r0, #0x1 - ldr r0, _0201E998 ; =UNK_020FFA38 + ldr r0, _0201E998 ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -195,7 +195,7 @@ FUN_0201E8B8: ; 0x0201E8B8 lsl r2, r2, #0x1 add r2, r2, #0x1 lsl r3, r2, #0x1 - ldr r2, _0201E998 ; =UNK_020FFA38 + ldr r2, _0201E998 ; =FX_SinCosTable_ orr r0, r1 ldrsh r2, [r2, r3] asr r1, r0, #0x1f @@ -216,7 +216,7 @@ FUN_0201E8B8: ; 0x0201E8B8 lsr r0, r0, #0x10 asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _0201E998 ; =UNK_020FFA38 + ldr r0, _0201E998 ; =FX_SinCosTable_ ldr r2, [r5, #0x38] ldrsh r0, [r0, r1] asr r3, r2, #0x1f @@ -240,7 +240,7 @@ FUN_0201E8B8: ; 0x0201E8B8 bl VEC_Add pop {r3-r5, pc} .balign 4 -_0201E998: .word UNK_020FFA38 +_0201E998: .word FX_SinCosTable_ thumb_func_start FUN_0201E99C FUN_0201E99C: ; 0x0201E99C @@ -249,7 +249,7 @@ FUN_0201E99C: ; 0x0201E99C strh r0, [r2, #0x0] asr r0, r0, #0x4 lsl r3, r0, #0x1 - ldr r2, _0201E9E0 ; =UNK_020FFA38 + ldr r2, _0201E9E0 ; =FX_SinCosTable_ lsl r0, r3, #0x1 ldrsh r0, [r2, r0] str r0, [r1, #0x0] @@ -278,7 +278,7 @@ FUN_0201E99C: ; 0x0201E99C str r2, [r1, #0x64] bx lr nop -_0201E9E0: .word UNK_020FFA38 +_0201E9E0: .word FX_SinCosTable_ _0201E9E4: .word 0x00001555 thumb_func_start FUN_0201E9E8 @@ -576,7 +576,7 @@ FUN_0201EBA4: ; 0x0201EBA4 str r0, [r3, #0x0] _0201EBEE: ldr r0, _0201EC40 ; =UNK_021C59A4 - ldr r5, _0201EC44 ; =UNK_021CEF58 + ldr r5, _0201EC44 ; =NNS_G3dGlb + 0x240 ldr r4, [r0, #0x0] add r3, r4, #0x0 add r2, r4, #0x0 @@ -588,26 +588,26 @@ _0201EBEE: add r2, #0x2c str r0, [r5, #0x0] add r6, r2, #0x0 - ldr r5, _0201EC48 ; =UNK_021CEF64 + ldr r5, _0201EC48 ; =NNS_G3dGlb + 0x24C ldmia r6!, {r0-r1} stmia r5!, {r0-r1} ldr r0, [r6, #0x0] add r3, #0x20 str r0, [r5, #0x0] add r6, r3, #0x0 - ldr r5, _0201EC4C ; =UNK_021CEF70 + ldr r5, _0201EC4C ; =NNS_G3dGlb + 0x258 ldmia r6!, {r0-r1} stmia r5!, {r0-r1} ldr r0, [r6, #0x0] add r1, r2, #0x0 str r0, [r5, #0x0] - ldr r0, _0201EC50 ; =UNK_021CED64 + ldr r0, _0201EC50 ; =NNS_G3dGlb + 0x4C add r2, r3, #0x0 str r0, [sp, #0x0] add r0, r4, #0x0 mov r3, #0x0 bl G3i_LookAt_ - ldr r1, _0201EC54 ; =UNK_021CED98 + ldr r1, _0201EC54 ; =NNS_G3dGlb + 0x80 mov r0, #0xe8 ldr r2, [r1, #0x7c] bic r2, r0 @@ -617,11 +617,11 @@ _0201EC3A: pop {r3-r6, pc} nop _0201EC40: .word UNK_021C59A4 -_0201EC44: .word UNK_021CEF58 -_0201EC48: .word UNK_021CEF64 -_0201EC4C: .word UNK_021CEF70 -_0201EC50: .word UNK_021CED64 -_0201EC54: .word UNK_021CED98 +_0201EC44: .word NNS_G3dGlb + 0x240 +_0201EC48: .word NNS_G3dGlb + 0x24C +_0201EC4C: .word NNS_G3dGlb + 0x258 +_0201EC50: .word NNS_G3dGlb + 0x4C +_0201EC54: .word NNS_G3dGlb + 0x80 thumb_func_start FUN_0201EC58 FUN_0201EC58: ; 0x0201EC58 @@ -882,14 +882,14 @@ FUN_0201EE2C: ; 0x0201EE2C str r0, [sp, #0x4] mov r0, #0x0 str r0, [sp, #0x8] - ldr r0, _0201EEE4 ; =UNK_021CED20 + ldr r0, _0201EEE4 ; =NNS_G3dGlb + 0x8 str r0, [sp, #0xc] ldr r0, [r5, #0x0] ldr r1, [r5, #0x4] ldr r2, [r5, #0x8] ldr r3, [r5, #0xc] bl G3i_PerspectiveW_ - ldr r1, _0201EEE8 ; =UNK_021CED98 + ldr r1, _0201EEE8 ; =NNS_G3dGlb + 0x80 mov r0, #0x50 ldr r2, [r1, #0x7c] add r5, #0x44 @@ -939,12 +939,12 @@ _0201EE6C: lsl r0, r6, #0x1 str r0, [sp, #0x8] str r2, [sp, #0xc] - ldr r0, _0201EEE4 ; =UNK_021CED20 + ldr r0, _0201EEE4 ; =NNS_G3dGlb + 0x8 neg r2, r3 str r0, [sp, #0x10] add r0, r4, #0x0 bl G3i_OrthoW_ - ldr r1, _0201EEE8 ; =UNK_021CED98 + ldr r1, _0201EEE8 ; =NNS_G3dGlb + 0x80 mov r0, #0x50 ldr r2, [r1, #0x7c] add r5, #0x44 @@ -958,8 +958,8 @@ _0201EE6C: add sp, #0x14 pop {r3-r6, pc} nop -_0201EEE4: .word UNK_021CED20 -_0201EEE8: .word UNK_021CED98 +_0201EEE4: .word NNS_G3dGlb + 0x8 +_0201EEE8: .word NNS_G3dGlb + 0x80 _0201EEEC: .word UNK_02105BB8 thumb_func_start FUN_0201EEF0 @@ -973,7 +973,7 @@ FUN_0201EEF0: ; 0x0201EEF0 ldr r3, _0201EF24 ; =FUN_0201EE2C asr r0, r0, #0x4 lsl r2, r0, #0x2 - ldr r0, _0201EF28 ; =UNK_020FFA38 + ldr r0, _0201EF28 ; =FX_SinCosTable_ ldrsh r2, [r0, r2] str r2, [r1, #0x0] add r2, r1, #0x0 @@ -991,7 +991,7 @@ FUN_0201EEF0: ; 0x0201EEF0 bx r3 nop _0201EF24: .word FUN_0201EE2C -_0201EF28: .word UNK_020FFA38 +_0201EF28: .word FX_SinCosTable_ thumb_func_start FUN_0201EF2C FUN_0201EF2C: ; 0x0201EF2C @@ -1008,7 +1008,7 @@ FUN_0201EF2C: ; 0x0201EF2C ldrh r0, [r0, #0x0] asr r0, r0, #0x4 lsl r2, r0, #0x2 - ldr r0, _0201EF6C ; =UNK_020FFA38 + ldr r0, _0201EF6C ; =FX_SinCosTable_ ldrsh r2, [r0, r2] str r2, [r1, #0x0] add r2, r1, #0x0 @@ -1026,7 +1026,7 @@ FUN_0201EF2C: ; 0x0201EF2C bx r3 nop _0201EF68: .word FUN_0201EE2C -_0201EF6C: .word UNK_020FFA38 +_0201EF6C: .word FX_SinCosTable_ thumb_func_start FUN_0201EF70 FUN_0201EF70: ; 0x0201EF70 diff --git a/arm9/asm/unk_0201F06C.s b/arm9/asm/unk_0201F06C.s index e48364ec..84b32634 100644 --- a/arm9/asm/unk_0201F06C.s +++ b/arm9/asm/unk_0201F06C.s @@ -1,11 +1,11 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020FFA38 - .extern UNK_021064C0 - .extern UNK_021064B8 - .extern UNK_021064BC - .extern UNK_021064C4 + .extern FX_SinCosTable_ + .extern NNS_GfdDefaultFuncAllocPlttVram + .extern NNS_GfdDefaultFuncAllocTexVram + .extern NNS_GfdDefaultFuncFreeTexVram + .extern NNS_GfdDefaultFuncFreePlttVram .section .rodata @@ -569,18 +569,18 @@ FUN_0201F454: ; 0x0201F454 add r4, r1, #0x0 add r6, r2, #0x0 add r7, r3, #0x0 - bl FUN_020B7E1C + bl NNS_G3dTexGetRequiredSize str r0, [sp, #0x8] add r0, r5, #0x0 - bl FUN_020B7E10 + bl NNS_G3dTex4x4GetRequiredSize str r0, [sp, #0x4] add r0, r5, #0x0 - bl FUN_020B7CE4 + bl NNS_G3dPlttGetRequiredSize str r0, [sp, #0x0] ldr r0, [sp, #0x8] cmp r0, #0x0 beq _0201F492 - ldr r3, _0201F4E4 ; =UNK_021064B8 + ldr r3, _0201F4E4 ; =NNS_GfdDefaultFuncAllocTexVram mov r1, #0x0 ldr r3, [r3, #0x0] add r2, r1, #0x0 @@ -597,7 +597,7 @@ _0201F496: ldr r0, [sp, #0x4] cmp r0, #0x0 beq _0201F4B2 - ldr r3, _0201F4E4 ; =UNK_021064B8 + ldr r3, _0201F4E4 ; =NNS_GfdDefaultFuncAllocTexVram mov r1, #0x1 ldr r3, [r3, #0x0] mov r2, #0x0 @@ -614,7 +614,7 @@ _0201F4B6: ldr r0, [sp, #0x0] cmp r0, #0x0 beq _0201F4DA - ldr r3, _0201F4E8 ; =UNK_021064C0 + ldr r3, _0201F4E8 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0x2 ldrh r2, [r5, #0x20] lsl r1, r1, #0xe @@ -635,17 +635,17 @@ _0201F4DE: add sp, #0xc pop {r4-r7, pc} nop -_0201F4E4: .word UNK_021064B8 -_0201F4E8: .word UNK_021064C0 +_0201F4E4: .word NNS_GfdDefaultFuncAllocTexVram +_0201F4E8: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_0201F4EC FUN_0201F4EC: ; 0x0201F4EC push {r3-r5, lr} add r5, r0, #0x0 add r4, r3, #0x0 - bl FUN_020B7CF0 + bl NNS_G3dTexReleaseTexKey add r0, r5, #0x0 - bl FUN_020B7C58 + bl NNS_G3dPlttReleasePlttKey str r0, [r4, #0x0] pop {r3-r5, pc} @@ -656,14 +656,14 @@ FUN_0201F500: ; 0x0201F500 ldr r1, [r2, #0x0] ldr r2, [r3, #0x0] add r5, r0, #0x0 - bl FUN_020B7DFC + bl NNS_G3dTexSetTexKey ldr r1, [sp, #0x10] add r0, r5, #0x0 ldr r1, [r1, #0x0] - bl FUN_020B7CDC + bl NNS_G3dPlttSetPlttKey add r0, r4, #0x0 add r1, r5, #0x0 - bl FUN_020B7790 + bl NNS_G3dBindMdlSet pop {r3-r5, pc} .balign 4 @@ -675,28 +675,28 @@ FUN_0201F524: ; 0x0201F524 add r4, r2, #0x0 cmp r0, #0x0 beq _0201F536 - ldr r1, _0201F550 ; =UNK_021064BC + ldr r1, _0201F550 ; =NNS_GfdDefaultFuncFreeTexVram ldr r1, [r1, #0x0] blx r1 _0201F536: ldr r0, [r5, #0x0] cmp r0, #0x0 beq _0201F542 - ldr r1, _0201F550 ; =UNK_021064BC + ldr r1, _0201F550 ; =NNS_GfdDefaultFuncFreeTexVram ldr r1, [r1, #0x0] blx r1 _0201F542: ldr r0, [r4, #0x0] cmp r0, #0x0 beq _0201F54E - ldr r1, _0201F554 ; =UNK_021064C4 + ldr r1, _0201F554 ; =NNS_GfdDefaultFuncFreePlttVram ldr r1, [r1, #0x0] blx r1 _0201F54E: pop {r3-r5, pc} .balign 4 -_0201F550: .word UNK_021064BC -_0201F554: .word UNK_021064C4 +_0201F550: .word NNS_GfdDefaultFuncFreeTexVram +_0201F554: .word NNS_GfdDefaultFuncFreePlttVram thumb_func_start FUN_0201F558 FUN_0201F558: ; 0x0201F558 @@ -713,22 +713,22 @@ _0201F568: mov r0, #0x0 pop {r3-r7, pc} _0201F56E: - bl FUN_020B7E1C + bl NNS_G3dTexGetRequiredSize str r0, [sp, #0x0] add r0, r4, #0x0 - bl FUN_020B7E10 + bl NNS_G3dTex4x4GetRequiredSize str r0, [sp, #0x4] add r0, r4, #0x0 - bl FUN_020B7CE4 + bl NNS_G3dPlttGetRequiredSize add r4, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7E1C + bl NNS_G3dTexGetRequiredSize add r6, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7E10 + bl NNS_G3dTex4x4GetRequiredSize add r7, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7CE4 + bl NNS_G3dPlttGetRequiredSize ldr r1, [sp, #0x0] cmp r1, r6 bne _0201F5AA @@ -780,7 +780,7 @@ FUN_0201F5D4: ; 0x0201F5D4 add r0, r5, #0x0 ldr r1, [r5, #0x7c] add r0, #0x24 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit add r0, r5, #0x0 add r0, #0xa8 ldrb r0, [r0, #0x0] @@ -882,7 +882,7 @@ FUN_0201F69C: ; 0x0201F69C add r0, r5, #0x0 ldr r1, [r5, #0x7c] add r0, #0x24 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit add r0, r4, #0x0 bl FUN_0201FBCC add r5, #0x84 @@ -1602,7 +1602,7 @@ FUN_0201FB9C: ; 0x0201FB9C add r5, r2, #0x0 bl FUN_0201FC90 add r7, r0, #0x0 - bl FUN_020BC13C + bl NNS_G3dGetMdlSet add r4, r0, #0x0 ldrh r0, [r4, #0xe] add r0, r4, r0 @@ -1612,7 +1612,7 @@ FUN_0201FB9C: ; 0x0201FB9C cmp r5, #0x0 beq _0201FBC6 add r0, r7, #0x0 - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r5, #0x0] _0201FBC6: add r0, r4, #0x0 @@ -1724,7 +1724,7 @@ FUN_0201FC70: ; 0x0201FC70 sub sp, #0xc add r4, r0, #0x0 ldr r0, [r4, #0x78] - bl FUN_020B772C + bl NNS_G3dReleaseMdlSet add r4, #0x80 ldr r0, [r4, #0x0] add r1, sp, #0x4 @@ -1828,7 +1828,7 @@ _0201FD0C: ldr r0, [r4, r1] add r1, r1, #0x4 add r1, r4, r1 - bl thunk_FUN_020afda0_2 + bl NNS_G2dGetUnpackedAnimBank mov r0, #0x12 mov r1, #0x1 lsl r0, r0, #0x4 @@ -2002,10 +2002,10 @@ FUN_0201FE6C: ; 0x0201FE6C bl memset add r0, r4, #0x0 add r0, #0xb4 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, r4, #0x0 add r0, #0xd8 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0x0 str r0, [r4, #0x30] pop {r4, pc} @@ -2072,7 +2072,7 @@ _0201FEA6: add r1, r4, #0x0 add r1, #0x26 ldrb r1, [r1, #0x0] - bl FUN_020B502C + bl NNS_G2dSetRndCoreAffineOverwriteMode add r0, r4, #0x0 add r0, #0x27 ldrb r2, [r0, #0x0] @@ -2084,7 +2084,7 @@ _0201FEA6: mov r3, #0x2 and r1, r2 and r2, r3 - bl FUN_020B4F38 + bl NNS_G2dSetRndCoreFlipMode add r0, r4, #0x0 mov r2, #0x1 add r0, #0x34 @@ -2193,13 +2193,13 @@ _0201FFE4: ldr r1, [r1, #0x0] add r0, #0xb4 add r4, #0x40 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation mov r1, #0x0 mvn r1, r1 cmp r0, r1 beq _0202000E ldr r0, [r4, #0x5c] - bl FUN_020B4358 + bl NNS_G2dFreeCellTransferStateHandle _0202000E: add r0, r5, #0x0 add r0, #0xec @@ -2409,11 +2409,11 @@ _0202014A: lsl r1, r1, #0x10 ldr r0, [r4, #0x4] lsr r1, r1, #0x10 - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx add r1, r0, #0x0 add r0, r4, #0x0 add r0, #0x8 - bl FUN_020B1EE4 + bl NNS_G2dSetCellAnimationSequence mov r0, #0x1 str r0, [r4, #0x10] pop {r4, pc} @@ -2422,11 +2422,11 @@ _02020168: add r4, #0x40 ldr r0, [r4, #0x6c] add r1, r3, #0x0 - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx add r1, r0, #0x0 add r0, r4, #0x0 add r0, #0x8 - bl FUN_020B242C + bl NNS_G2dSetAnimSequenceToMCAnimation mov r0, #0x1 str r0, [r4, #0x10] pop {r4, pc} @@ -2459,7 +2459,7 @@ _020201A8: add r5, #0x40 add r0, r5, #0x0 add r0, #0x8 - bl FUN_020B0448 + bl NNS_G2dResetAnimCtrlState mov r0, #0x1 str r0, [r5, #0x10] add r0, r4, #0x0 @@ -2471,7 +2471,7 @@ _020201C2: add r5, #0x40 add r0, r5, #0x0 add r0, #0x8 - bl FUN_020B0448 + bl NNS_G2dResetAnimCtrlState mov r0, #0x1 str r0, [r5, #0x10] add r0, r4, #0x0 @@ -2499,12 +2499,12 @@ FUN_020201E4: ; 0x020201E4 _020201F4: add r0, #0x40 add r0, #0x8 - bl FUN_020B1EC4 + bl NNS_G2dTickCellAnimation pop {r3, pc} _020201FE: add r0, #0x40 add r0, #0x8 - bl FUN_020B224C + bl NNS_G2dTickMCAnimation pop {r3, pc} thumb_func_start FUN_02020208 @@ -2520,22 +2520,22 @@ FUN_02020208: ; 0x02020208 _02020218: add r0, #0x40 add r0, #0x8 - bl FUN_020B1EA4 + bl NNS_G2dSetCellAnimationCurrentFrame pop {r3, pc} _02020222: add r0, #0x40 add r0, #0x8 - bl FUN_020B2194 + bl NNS_G2dSetMCAnimationCurrentFrame pop {r3, pc} thumb_func_start FUN_0202022C FUN_0202022C: ; 0x0202022C - ldr r3, _02020234 ; =FUN_020B04FC + ldr r3, _02020234 ; =NNS_G2dGetAnimCtrlCurrentFrame add r0, #0x40 add r0, #0x8 bx r3 .balign 4 -_02020234: .word FUN_020B04FC +_02020234: .word NNS_G2dGetAnimCtrlCurrentFrame thumb_func_start FUN_02020238 FUN_02020238: ; 0x02020238 @@ -2969,12 +2969,12 @@ FUN_0202050C: ; 0x0202050C add r4, #0x40 ldr r0, [r4, #0x4] mov r1, #0x0 - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx add r4, #0x8 add r1, r0, #0x0 ldr r2, [r5, #0x40] add r0, r4, #0x0 - bl FUN_020B1F80 + bl NNS_G2dInitCellAnimation pop {r3-r5, pc} .balign 4 @@ -2986,22 +2986,22 @@ FUN_0202052C: ; 0x0202052C add r4, r6, #0x0 add r4, #0x40 add r5, r0, #0x0 - bl FUN_020B43A4 + bl NNS_G2dGetNewCellTransferStateHandle str r0, [r4, #0x5c] ldr r0, [r4, #0x4] mov r1, #0x0 ldr r5, [r5, #0x4] - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx str r0, [sp, #0x18] add r0, r6, #0x0 add r0, #0xb4 mov r1, #0x1 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation add r7, r0, #0x0 add r0, r6, #0x0 add r0, #0xb4 mov r1, #0x2 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation mov r1, #0x0 mvn r1, r1 str r1, [sp, #0x0] @@ -3018,7 +3018,7 @@ FUN_0202052C: ; 0x0202052C ldr r2, [r6, #0x40] ldr r3, [r4, #0x5c] add r0, #0x8 - bl FUN_020B1EFC + bl NNS_G2dInitCellAnimationVramTransfered add sp, #0x1c pop {r4-r7, pc} @@ -3032,10 +3032,10 @@ FUN_02020588: ; 0x02020588 ldr r0, [r4, #0x6c] add r7, r1, #0x0 mov r1, #0x0 - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx str r0, [sp, #0xc] ldr r0, [r4, #0x68] - bl FUN_020B23D8 + bl NNS_G2dGetMCBankNumNodesRequired add r6, r0, #0x0 mov r1, #0x28 add r0, r7, #0x0 @@ -3058,11 +3058,11 @@ FUN_02020588: ; 0x02020588 ldr r1, [r4, #0x70] ldr r2, [r4, #0x74] add r0, #0x8 - bl FUN_020B20C8 + bl NNS_G2dInitMCAnimation add r4, #0x8 ldr r1, [sp, #0xc] add r0, r4, #0x0 - bl FUN_020B242C + bl NNS_G2dSetAnimSequenceToMCAnimation add sp, #0x10 pop {r3-r7, pc} .balign 4 @@ -3087,7 +3087,7 @@ _02020600: _02020602: cmp r4, #0x0 beq _02020612 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r1, r4, #0x0 bl _u32_div_f pop {r4, pc} @@ -3115,19 +3115,19 @@ FUN_02020618: ; 0x02020618 ldr r0, [r5, r0] add r1, #0xb4 add r2, #0xd8 - bl thunk_FUN_020b5040 + bl NNS_G2dSetRendererImageProxy mov r0, #0x45 lsl r0, r0, #0x2 ldr r0, [r5, r0] - bl FUN_020B326C - bl FUN_020B2B58 + bl NNS_G2dBeginRendering + bl NNS_G2dPushMtx add r1, r4, #0x0 mov r0, #0x45 add r1, #0x26 lsl r0, r0, #0x2 ldrb r1, [r1, #0x0] ldr r0, [r5, r0] - bl FUN_020B502C + bl NNS_G2dSetRndCoreAffineOverwriteMode add r0, r4, #0x0 add r0, #0x26 ldrb r0, [r0, #0x0] @@ -3143,7 +3143,7 @@ FUN_02020618: ; 0x02020618 mov r3, #0x2 and r1, r2 and r2, r3 - bl FUN_020B4F38 + bl NNS_G2dSetRndCoreFlipMode b _0202068E _02020680: mov r0, #0x45 @@ -3151,12 +3151,12 @@ _02020680: mov r1, #0x0 ldr r0, [r5, r0] add r2, r1, #0x0 - bl FUN_020B4F38 + bl NNS_G2dSetRndCoreFlipMode _0202068E: ldr r0, [sp, #0x0] ldr r1, [sp, #0x4] ldr r2, [sp, #0x8] - bl FUN_020B2A08 + bl NNS_G2dTranslate add r0, r4, #0x0 add r0, #0x26 ldrb r0, [r0, #0x0] @@ -3165,13 +3165,13 @@ _0202068E: ldr r0, [r4, #0xc] ldr r1, [r4, #0x10] ldr r2, [r4, #0x14] - bl FUN_020B2A08 + bl NNS_G2dTranslate ldr r0, [r4, #0x18] ldr r1, [r4, #0x1c] ldr r2, [r4, #0x20] - bl FUN_020B28B4 + bl NNS_G2dScale ldrh r0, [r4, #0x24] - ldr r2, _02020770 ; =UNK_020FFA38 + ldr r2, _02020770 ; =FX_SinCosTable_ asr r0, r0, #0x4 lsl r1, r0, #0x1 lsl r0, r1, #0x1 @@ -3179,14 +3179,14 @@ _0202068E: lsl r1, r1, #0x1 ldrsh r0, [r2, r0] ldrsh r1, [r2, r1] - bl FUN_020B2794 + bl NNS_G2dRotZ ldr r0, [r4, #0xc] ldr r1, [r4, #0x10] ldr r2, [r4, #0x14] neg r0, r0 neg r1, r1 neg r2, r2 - bl FUN_020B2A08 + bl NNS_G2dTranslate _020206DC: add r0, r4, #0x0 add r0, #0x28 @@ -3249,20 +3249,20 @@ _0202074E: add r4, #0x40 add r4, #0x8 add r0, r4, #0x0 - bl FUN_020B317C + bl NNS_G2dDrawCellAnimation b _02020764 _0202075A: add r4, #0x40 add r4, #0x8 add r0, r4, #0x0 - bl FUN_020B2D9C + bl NNS_G2dDrawMultiCellAnimation _02020764: - bl FUN_020B2B08 - bl FUN_020B31F0 + bl NNS_G2dPopMtx + bl NNS_G2dEndRendering add sp, #0xc pop {r3-r6, pc} .balign 4 -_02020770: .word UNK_020FFA38 +_02020770: .word FX_SinCosTable_ thumb_func_start FUN_02020774 FUN_02020774: ; 0x02020774 diff --git a/arm9/asm/unk_02020C44.s b/arm9/asm/unk_02020C44.s index c1870c5a..4c6cb725 100644 --- a/arm9/asm/unk_02020C44.s +++ b/arm9/asm/unk_02020C44.s @@ -1,10 +1,10 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021064B8 - .extern UNK_021064C0 - .extern UNK_021064C4 - .extern UNK_021064BC + .extern NNS_GfdDefaultFuncAllocTexVram + .extern NNS_GfdDefaultFuncAllocPlttVram + .extern NNS_GfdDefaultFuncFreePlttVram + .extern NNS_GfdDefaultFuncFreeTexVram .text @@ -488,7 +488,7 @@ _02020FA4: ldr r0, [r4, #0x4] cmp r0, #0x0 beq _02020FB8 - ldr r1, _02020FE8 ; =UNK_021064BC + ldr r1, _02020FE8 ; =NNS_GfdDefaultFuncFreeTexVram ldr r1, [r1, #0x0] blx r1 cmp r0, #0x0 @@ -498,7 +498,7 @@ _02020FB8: ldr r0, [r4, #0x8] cmp r0, #0x0 beq _02020FCC - ldr r1, _02020FE8 ; =UNK_021064BC + ldr r1, _02020FE8 ; =NNS_GfdDefaultFuncFreeTexVram ldr r1, [r1, #0x0] blx r1 cmp r0, #0x0 @@ -508,7 +508,7 @@ _02020FCC: ldr r0, [r4, #0xc] cmp r0, #0x0 beq _02020FE0 - ldr r1, _02020FEC ; =UNK_021064C4 + ldr r1, _02020FEC ; =NNS_GfdDefaultFuncFreePlttVram ldr r1, [r1, #0x0] blx r1 cmp r0, #0x0 @@ -519,8 +519,8 @@ _02020FE0: bl FUN_0202120C pop {r3-r5, pc} .balign 4 -_02020FE8: .word UNK_021064BC -_02020FEC: .word UNK_021064C4 +_02020FE8: .word NNS_GfdDefaultFuncFreeTexVram +_02020FEC: .word NNS_GfdDefaultFuncFreePlttVram thumb_func_start FUN_02020FF0 FUN_02020FF0: ; 0x02020FF0 @@ -842,7 +842,7 @@ FUN_02021220: ; 0x02021220 push {r3, lr} ldr r0, [r0, #0x0] bl FUN_02020E0C - bl FUN_020BC0FC + bl NNS_G3dGetTex pop {r3, pc} .balign 4 @@ -858,7 +858,7 @@ FUN_02021230: ; 0x02021230 _02021240: ldr r0, [r0, #0x10] _02021242: - bl FUN_020BC0FC + bl NNS_G3dGetTex pop {r3, pc} thumb_func_start FUN_02021248 @@ -869,17 +869,17 @@ FUN_02021248: ; 0x02021248 str r1, [sp, #0x0] str r2, [sp, #0x4] str r3, [sp, #0x8] - bl FUN_020B7E1C + bl NNS_G3dTexGetRequiredSize add r7, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7E10 + bl NNS_G3dTex4x4GetRequiredSize add r6, r0, #0x0 add r0, r5, #0x0 - bl FUN_020B7CE4 + bl NNS_G3dPlttGetRequiredSize add r4, r0, #0x0 cmp r7, #0x0 beq _0202127E - ldr r3, _020212B0 ; =UNK_021064B8 + ldr r3, _020212B0 ; =NNS_GfdDefaultFuncAllocTexVram mov r1, #0x0 ldr r3, [r3, #0x0] add r0, r7, #0x0 @@ -890,7 +890,7 @@ FUN_02021248: ; 0x02021248 _0202127E: cmp r6, #0x0 beq _02021292 - ldr r3, _020212B0 ; =UNK_021064B8 + ldr r3, _020212B0 ; =NNS_GfdDefaultFuncAllocTexVram add r0, r6, #0x0 ldr r3, [r3, #0x0] mov r1, #0x1 @@ -901,7 +901,7 @@ _0202127E: _02021292: cmp r4, #0x0 beq _020212AC - ldr r3, _020212B4 ; =UNK_021064C0 + ldr r3, _020212B4 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0x2 ldrh r2, [r5, #0x20] lsl r1, r1, #0xe @@ -916,8 +916,8 @@ _020212AC: add sp, #0xc pop {r4-r7, pc} .balign 4 -_020212B0: .word UNK_021064B8 -_020212B4: .word UNK_021064C0 +_020212B0: .word NNS_GfdDefaultFuncAllocTexVram +_020212B4: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_020212B8 FUN_020212B8: ; 0x020212B8 @@ -933,10 +933,10 @@ FUN_020212B8: ; 0x020212B8 bl DC_FlushRange add r0, r4, #0x0 mov r1, #0x1 - bl FUN_020B7D28 + bl NNS_G3dTexLoad add r0, r4, #0x0 mov r1, #0x1 - bl FUN_020B7C78 + bl NNS_G3dPlttLoad pop {r4, pc} .balign 4 @@ -945,10 +945,10 @@ FUN_020212E4: ; 0x020212E4 push {r3-r5, lr} add r5, r0, #0x0 add r4, r3, #0x0 - bl FUN_020B7DFC + bl NNS_G3dTexSetTexKey add r0, r5, #0x0 add r1, r4, #0x0 - bl FUN_020B7CDC + bl NNS_G3dPlttSetPlttKey pop {r3-r5, pc} thumb_func_start FUN_020212F8 @@ -958,9 +958,9 @@ FUN_020212F8: ; 0x020212F8 add r4, r0, #0x0 add r1, sp, #0x4 add r2, sp, #0x0 - bl FUN_020B7CF0 + bl NNS_G3dTexReleaseTexKey add r0, r4, #0x0 - bl FUN_020B7C58 + bl NNS_G3dPlttReleasePlttKey add sp, #0x8 pop {r4, pc} @@ -986,7 +986,7 @@ FUN_02021310: ; 0x02021310 FUN_02021334: ; 0x02021334 push {r3-r5, lr} add r5, r0, #0x0 - bl FUN_020BC0FC + bl NNS_G3dGetTex add r4, r0, #0x0 bne _02021344 bl ErrorHandling diff --git a/arm9/asm/unk_0202134C.s b/arm9/asm/unk_0202134C.s index 30aa1d51..b45f4e91 100644 --- a/arm9/asm/unk_0202134C.s +++ b/arm9/asm/unk_0202134C.s @@ -8,7 +8,7 @@ FUN_0202134C: ; 0x0202134C push {r3-r5, lr} add r5, r0, #0x0 add r4, r1, #0x0 - bl FUN_020B33A0 + bl NNS_G2dInitRenderer add r5, #0x80 str r4, [r5, #0x0] pop {r3-r5, pc} @@ -20,7 +20,7 @@ FUN_0202135C: ; 0x0202135C add r4, r1, #0x0 add r6, r2, #0x0 add r7, r3, #0x0 - bl FUN_020B3334 + bl NNS_G2dInitRenderSurface add r2, r5, #0x0 ldmia r4!, {r0-r1} stmia r2!, {r0-r1} @@ -36,7 +36,7 @@ FUN_0202135C: ; 0x0202135C cmp r0, #0x0 beq _0202138C add r1, r5, #0x0 - bl FUN_020B3390 + bl NNS_G2dAddRendererTargetSurface _0202138C: pop {r3-r7, pc} .balign 4 diff --git a/arm9/asm/unk_02022318.s b/arm9/asm/unk_02022318.s index cf87cdb9..9564742c 100644 --- a/arm9/asm/unk_02022318.s +++ b/arm9/asm/unk_02022318.s @@ -15,7 +15,7 @@ FUN_02022318: ; 0x02022318 bl AllocFromHeap add r4, r0, #0x0 str r6, [r4, #0x0] - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack mov r1, #0x2 ldr r0, _020223B8 ; =0x04000540 @@ -23,7 +23,7 @@ FUN_02022318: ; 0x02022318 str r1, [r0, #0x0] bne _02022364 lsl r0, r5, #0x7 - bl FUN_020AFA28 + bl NNS_GfdGetLnkTexVramManagerWorkSize add r6, r0, #0x0 ldr r0, [r4, #0x0] add r1, r6, #0x0 @@ -35,20 +35,20 @@ FUN_02022318: ; 0x02022318 lsl r0, r5, #0x11 mov r1, #0x0 add r3, r6, #0x0 - bl FUN_020AF9C4 + bl NNS_GfdInitLnkTexVramManager b _0202236E _02022364: lsl r0, r5, #0x10 lsr r0, r0, #0x10 mov r1, #0x1 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager _0202236E: ldr r0, [sp, #0x4] cmp r0, #0x0 bne _02022398 ldr r0, [sp, #0x20] lsl r0, r0, #0x8 - bl FUN_020AFBFC + bl NNS_GfdGetLnkPlttVramManagerWorkSize add r5, r0, #0x0 ldr r0, [r4, #0x0] add r1, r5, #0x0 @@ -59,14 +59,14 @@ _0202236E: lsl r0, r0, #0xd add r2, r5, #0x0 mov r3, #0x1 - bl FUN_020AFBA8 + bl NNS_GfdInitLnkPlttVramManager b _020223A4 _02022398: ldr r0, [sp, #0x20] mov r1, #0x1 lsl r0, r0, #0x1d lsr r0, r0, #0x10 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager _020223A4: ldr r0, [sp, #0x24] cmp r0, #0x0 diff --git a/arm9/asm/unk_02033B68.s b/arm9/asm/unk_02033B68.s index 39125d06..9e204377 100644 --- a/arm9/asm/unk_02033B68.s +++ b/arm9/asm/unk_02033B68.s @@ -333,7 +333,7 @@ FUN_02033D3C: ; 0x02033D3C bl DC_FlushRange ldr r0, [sp, #0x4] add r1, sp, #0x0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r5, #0x1 bne _02033D80 ldr r0, [sp, #0x0] @@ -386,7 +386,7 @@ _02033DC8: bl DC_FlushRange ldr r0, [sp, #0x4] add r1, sp, #0x0 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData cmp r5, #0x1 bne _02033DF0 mov r0, #0x1 diff --git a/arm9/asm/unk_02053750.s b/arm9/asm/unk_02053750.s index 4724c308..0cf428b2 100644 --- a/arm9/asm/unk_02053750.s +++ b/arm9/asm/unk_02053750.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020FFA38 + .extern FX_SinCosTable_ .section .rodata .global UNK_020F5C04 @@ -1320,7 +1320,7 @@ FUN_020540E8: ; 0x020540E8 ldr r1, [sp, #0x4] asr r0, r0, #0x4 lsl r5, r0, #0x2 - ldr r0, _02054164 ; =UNK_020FFA38 + ldr r0, _02054164 ; =FX_SinCosTable_ ldrsh r5, [r0, r5] asr r0, r5, #0x1f lsr r6, r5, #0x10 @@ -1363,7 +1363,7 @@ _0205415E: add sp, #0xc pop {r3-r6, pc} .balign 4 -_02054164: .word UNK_020FFA38 +_02054164: .word FX_SinCosTable_ thumb_func_start FUN_02054168 FUN_02054168: ; 0x02054168 @@ -1801,7 +1801,7 @@ _0205447E: ldr r6, [sp, #0x4] asr r0, r0, #0x4 lsl r1, r0, #0x2 - ldr r0, _02054500 ; =UNK_020FFA38 + ldr r0, _02054500 ; =FX_SinCosTable_ ldrsh r0, [r0, r1] asr r3, r0, #0x1f lsr r1, r0, #0xf @@ -1851,7 +1851,7 @@ _020544F8: add sp, #0xc pop {r4-r7, pc} nop -_02054500: .word UNK_020FFA38 +_02054500: .word FX_SinCosTable_ _02054504: .word 0x00000666 thumb_func_start FUN_02054508 diff --git a/arm9/asm/unk_020607D4.s b/arm9/asm/unk_020607D4.s index 45fc311a..c017c561 100644 --- a/arm9/asm/unk_020607D4.s +++ b/arm9/asm/unk_020607D4.s @@ -556,7 +556,7 @@ _02060BF6: add r0, r4, #0x0 bl MOD05_021F4BD0 ldr r0, [r0, #0x0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r2, sp, #0x20 mov r3, #0x0 diff --git a/arm9/asm/unk_0206DE24.s b/arm9/asm/unk_0206DE24.s index 0bc45eb2..32d784c4 100644 --- a/arm9/asm/unk_0206DE24.s +++ b/arm9/asm/unk_0206DE24.s @@ -1,8 +1,8 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021064C0 - .extern UNK_021064B8 + .extern NNS_GfdDefaultFuncAllocPlttVram + .extern NNS_GfdDefaultFuncAllocTexVram .text @@ -128,14 +128,14 @@ _0206DF14: .word 0x04000580 thumb_func_start FUN_0206DF18 FUN_0206DF18: ; 0x0206DF18 push {r3-r5, lr} - ldr r3, _0206DF50 ; =UNK_021064B8 + ldr r3, _0206DF50 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #0x2 mov r1, #0x0 ldr r3, [r3, #0x0] lsl r0, r0, #0xe add r2, r1, #0x0 blx r3 - ldr r3, _0206DF54 ; =UNK_021064C0 + ldr r3, _0206DF54 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0x0 add r4, r0, #0x0 ldr r3, [r3, #0x0] @@ -154,8 +154,8 @@ _0206DF48: bl FUN_02012CC8 pop {r3-r5, pc} nop -_0206DF50: .word UNK_021064B8 -_0206DF54: .word UNK_021064C0 +_0206DF50: .word NNS_GfdDefaultFuncAllocTexVram +_0206DF54: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_0206DF58 FUN_0206DF58: ; 0x0206DF58 @@ -165,7 +165,7 @@ FUN_0206DF58: ; 0x0206DF58 cmp r0, #0x0 ble _0206DF6E bl FUN_020222AC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera _0206DF6E: bl FUN_02013388 mov r0, #0x1 @@ -176,7 +176,7 @@ _0206DF6E: thumb_func_start FUN_0206DF7C FUN_0206DF7C: ; 0x0206DF7C push {r4, lr} - ldr r3, _0206DF94 ; =UNK_021064B8 + ldr r3, _0206DF94 ; =NNS_GfdDefaultFuncAllocTexVram mov r2, #0x0 ldr r3, [r3, #0x0] blx r3 @@ -186,12 +186,12 @@ FUN_0206DF7C: ; 0x0206DF7C lsr r0, r0, #0xd pop {r4, pc} nop -_0206DF94: .word UNK_021064B8 +_0206DF94: .word NNS_GfdDefaultFuncAllocTexVram thumb_func_start FUN_0206DF98 FUN_0206DF98: ; 0x0206DF98 push {r4, lr} - ldr r3, _0206DFB0 ; =UNK_021064C0 + ldr r3, _0206DFB0 ; =NNS_GfdDefaultFuncAllocPlttVram mov r2, #0x0 ldr r3, [r3, #0x0] blx r3 @@ -201,7 +201,7 @@ FUN_0206DF98: ; 0x0206DF98 lsr r0, r0, #0xd pop {r4, pc} nop -_0206DFB0: .word UNK_021064C0 +_0206DFB0: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_0206DFB4 FUN_0206DFB4: ; 0x0206DFB4 diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s index 1a62b92b..a50d92bf 100644 --- a/arm9/asm/unk_0206F3FC.s +++ b/arm9/asm/unk_0206F3FC.s @@ -1274,7 +1274,7 @@ FUN_0206FD24: ; 0x0206FD24 bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x10 add r4, r0, #0x0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r2, [sp, #0x10] mov r0, #0x3 ldr r1, [r2, #0xc] @@ -6204,7 +6204,7 @@ FUN_020724D4: ; 0x020724D4 bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0xc str r0, [sp, #0x8] - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r0, [sp, #0xc] mov r4, #0x0 str r0, [sp, #0x4] diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s index 16a7190f..703233b3 100644 --- a/arm9/asm/unk_020772F0.s +++ b/arm9/asm/unk_020772F0.s @@ -2418,7 +2418,7 @@ FUN_02078140: ; 0x02078140 push {r4-r7, lr} sub sp, #0x14 add r5, r0, #0x0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0x0 str r0, [sp, #0x0] mov r1, #0x80 diff --git a/arm9/asm/unk_020799E8.s b/arm9/asm/unk_020799E8.s index 7f35d1a7..9227ca82 100644 --- a/arm9/asm/unk_020799E8.s +++ b/arm9/asm/unk_020799E8.s @@ -264,7 +264,7 @@ FUN_02079B60: ; 0x02079B60 _02079B9A: add r0, r7, #0x0 add r1, sp, #0x10 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData cmp r4, #0x0 bne _02079BAE ldr r0, [sp, #0x10] @@ -286,7 +286,7 @@ _02079BAE: _02079BC6: add r0, r7, #0x0 add r1, sp, #0xc - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData cmp r4, #0x0 bne _02079BDA ldr r0, [sp, #0xc] @@ -322,7 +322,7 @@ _02079BF8: _02079C10: add r0, r7, #0x0 add r1, sp, #0x8 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r4, #0x0 bne _02079C24 ldr r0, [sp, #0x8] @@ -363,6 +363,6 @@ FUN_02079C40: ; 0x02079C40 bl NARC_ReadWholeMember add r0, r4, #0x0 add r1, r7, #0x0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData add r0, r4, #0x0 pop {r3-r7, pc} diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s index 617a122a..625807ae 100644 --- a/arm9/asm/unk_02079C70.s +++ b/arm9/asm/unk_02079C70.s @@ -2750,7 +2750,7 @@ _0207B256: bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0xc add r4, r0, #0x0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData mov r3, #0x0 str r3, [sp, #0x0] mov r0, #0x20 diff --git a/arm9/asm/unk_0207EF6C.s b/arm9/asm/unk_0207EF6C.s index 8fcaed0c..e4e29259 100644 --- a/arm9/asm/unk_0207EF6C.s +++ b/arm9/asm/unk_0207EF6C.s @@ -99,7 +99,7 @@ UNK_020FB6E6: ; 0x020FB6E6 FUN_0207EF6C: ; 0x0207EF6C push {r3-r4, lr} sub sp, #0x4 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_Init bl G3X_InitMtxStack ldr r0, _0207EFEC ; =0x04000060 @@ -183,16 +183,16 @@ FUN_0207F008: ; 0x0207F008 mov r0, #0x2 str r0, [r2, #0x0] str r3, [r1, #0x0] - bl FUN_020B849C + bl NNS_G3dGlbFlushP mov r0, #0xb7 lsl r0, r0, #0x2 add r0, r4, r0 bl FUN_0207F108 - bl FUN_020B849C + bl NNS_G3dGlbFlushP add r0, r4, #0x0 bl FUN_0207F1A4 _0207F046: - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera mov r0, #0xae lsl r0, r0, #0x2 ldr r0, [r4, r0] diff --git a/arm9/asm/unk_02086414.s b/arm9/asm/unk_02086414.s index 94945259..7ae62351 100644 --- a/arm9/asm/unk_02086414.s +++ b/arm9/asm/unk_02086414.s @@ -1,8 +1,8 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021064B8 - .extern UNK_021064C0 + .extern NNS_GfdDefaultFuncAllocTexVram + .extern NNS_GfdDefaultFuncAllocPlttVram .section .rodata @@ -217,14 +217,14 @@ _02086508: .word 0x04000580 thumb_func_start FUN_0208650C FUN_0208650C: ; 0x0208650C push {r3-r5, lr} - ldr r3, _02086544 ; =UNK_021064B8 + ldr r3, _02086544 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #0x2 mov r1, #0x0 ldr r3, [r3, #0x0] lsl r0, r0, #0xe add r2, r1, #0x0 blx r3 - ldr r3, _02086548 ; =UNK_021064C0 + ldr r3, _02086548 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0x0 add r4, r0, #0x0 ldr r3, [r3, #0x0] @@ -243,8 +243,8 @@ _0208653C: bl FUN_02012CC8 pop {r3-r5, pc} nop -_02086544: .word UNK_021064B8 -_02086548: .word UNK_021064C0 +_02086544: .word NNS_GfdDefaultFuncAllocTexVram +_02086548: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_0208654C FUN_0208654C: ; 0x0208654C @@ -400,7 +400,7 @@ FUN_02086698: ; 0x02086698 cmp r0, #0x0 ble _020866AE bl FUN_020222AC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera _020866AE: bl FUN_02013388 mov r0, #0x1 @@ -845,7 +845,7 @@ FUN_020869F0: ; 0x020869F0 thumb_func_start FUN_02086A48 FUN_02086A48: ; 0x02086A48 push {r4, lr} - ldr r3, _02086A60 ; =UNK_021064B8 + ldr r3, _02086A60 ; =NNS_GfdDefaultFuncAllocTexVram mov r2, #0x0 ldr r3, [r3, #0x0] blx r3 @@ -855,12 +855,12 @@ FUN_02086A48: ; 0x02086A48 lsr r0, r0, #0xd pop {r4, pc} nop -_02086A60: .word UNK_021064B8 +_02086A60: .word NNS_GfdDefaultFuncAllocTexVram thumb_func_start FUN_02086A64 FUN_02086A64: ; 0x02086A64 push {r4, lr} - ldr r3, _02086A7C ; =UNK_021064C0 + ldr r3, _02086A7C ; =NNS_GfdDefaultFuncAllocPlttVram mov r2, #0x0 ldr r3, [r3, #0x0] blx r3 @@ -870,7 +870,7 @@ FUN_02086A64: ; 0x02086A64 lsr r0, r0, #0xd pop {r4, pc} nop -_02086A7C: .word UNK_021064C0 +_02086A7C: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start FUN_02086A80 FUN_02086A80: ; 0x02086A80 diff --git a/arm9/asm/unk_0208AC14.s b/arm9/asm/unk_0208AC14.s index 4d334a19..2f1ab9a6 100644 --- a/arm9/asm/unk_0208AC14.s +++ b/arm9/asm/unk_0208AC14.s @@ -1,9 +1,9 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_020FFA38 - .extern UNK_021064B8 - .extern UNK_021064C0 + .extern FX_SinCosTable_ + .extern NNS_GfdDefaultFuncAllocTexVram + .extern NNS_GfdDefaultFuncAllocPlttVram .section .data .global UNK_02106158 @@ -773,7 +773,7 @@ _0208B60C: FUN_0208B630: ; 0x0208B630 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r3, _0208B660 ; =UNK_021064C0 + ldr r3, _0208B660 ; =NNS_GfdDefaultFuncAllocPlttVram mov r2, #0x0 ldr r3, [r3, #0x0] blx r3 @@ -784,14 +784,14 @@ FUN_0208B630: ; 0x0208B630 ldmia sp!, {lr} bx lr .balign 4 -_0208B660: .word UNK_021064C0 +_0208B660: .word NNS_GfdDefaultFuncAllocPlttVram _0208B664: .word 0x0000FFFF arm_func_start FUN_0208B668 FUN_0208B668: ; 0x0208B668 stmdb sp!, {lr} sub sp, sp, #0x4 - ldr r3, _0208B698 ; =UNK_021064B8 + ldr r3, _0208B698 ; =NNS_GfdDefaultFuncAllocTexVram mov r2, #0x0 ldr r3, [r3, #0x0] blx r3 @@ -802,7 +802,7 @@ FUN_0208B668: ; 0x0208B668 ldmia sp!, {lr} bx lr .balign 4 -_0208B698: .word UNK_021064B8 +_0208B698: .word NNS_GfdDefaultFuncAllocTexVram _0208B69C: .word 0x0000FFFF arm_func_start FUN_0208B6A0 @@ -1823,7 +1823,7 @@ FUN_0208C4F4: ; 0x0208C4F4 ldr r0, [r5, #0x40] ldrh r1, [r4, #0x20] ldr r0, [r0, #0x20] - ldr r6, _0208C954 ; =UNK_020FFA38 + ldr r6, _0208C954 ; =FX_SinCosTable_ ldr r0, [r0, #0x14] mov r1, r1, asr #0x4 ldrh r0, [r0, #0x0] @@ -2087,7 +2087,7 @@ _0208C8BC: bx lr .balign 4 _0208C950: .word 0x040004A4 -_0208C954: .word UNK_020FFA38 +_0208C954: .word FX_SinCosTable_ _0208C958: .word UNK_02106160 _0208C95C: .word 0x00000CCD _0208C960: .word 0xFFFFF333 @@ -2125,7 +2125,7 @@ FUN_0208C974: ; 0x0208C974 ldr r0, [r5, #0x40] ldrh r1, [r4, #0x20] ldr r0, [r0, #0x20] - ldr r6, _0208CDD0 ; =UNK_020FFA38 + ldr r6, _0208CDD0 ; =FX_SinCosTable_ ldr r0, [r0, #0x0] mov r1, r1, asr #0x4 mov r2, r1, lsl #0x1 @@ -2388,7 +2388,7 @@ _0208CD38: bx lr .balign 4 _0208CDCC: .word 0x040004A4 -_0208CDD0: .word UNK_020FFA38 +_0208CDD0: .word FX_SinCosTable_ _0208CDD4: .word UNK_02106160 _0208CDD8: .word 0x00000CCD _0208CDDC: .word 0xFFFFF333 @@ -2426,7 +2426,7 @@ FUN_0208CDF0: ; 0x0208CDF0 ldr r0, [r5, #0x40] ldrh r1, [r4, #0x20] ldr r0, [r0, #0x20] - ldr r6, _0208D128 ; =UNK_020FFA38 + ldr r6, _0208D128 ; =FX_SinCosTable_ ldr r0, [r0, #0x14] mov r1, r1, asr #0x4 ldrh r0, [r0, #0x0] @@ -2612,7 +2612,7 @@ _0208D090: bx lr .balign 4 _0208D124: .word 0x040004A4 -_0208D128: .word UNK_020FFA38 +_0208D128: .word FX_SinCosTable_ _0208D12C: .word UNK_02106160 _0208D130: .word 0x04000454 _0208D134: .word 0x04000470 @@ -2648,7 +2648,7 @@ FUN_0208D140: ; 0x0208D140 ldr r0, [r5, #0x40] ldrh r1, [r4, #0x20] ldr r0, [r0, #0x20] - ldr r6, _0208D478 ; =UNK_020FFA38 + ldr r6, _0208D478 ; =FX_SinCosTable_ ldr r0, [r0, #0x0] mov r1, r1, asr #0x4 mov r2, r1, lsl #0x1 @@ -2834,7 +2834,7 @@ _0208D3E0: bx lr .balign 4 _0208D474: .word 0x040004A4 -_0208D478: .word UNK_020FFA38 +_0208D478: .word FX_SinCosTable_ _0208D47C: .word UNK_02106160 _0208D480: .word 0x04000454 _0208D484: .word 0x04000470 @@ -3854,7 +3854,7 @@ _0208E39C: str r3, [sp, #0x8] bl MTX_MultVec43 ldrh r0, [r6, #0x20] - ldr r2, _0208E69C ; =UNK_020FFA38 + ldr r2, _0208E69C ; =FX_SinCosTable_ mov r9, #0x0 mov r0, r0, asr #0x4 mov r3, r0, lsl #0x1 @@ -3935,7 +3935,7 @@ _0208E4BC: str r3, [sp, #0x8] bl MTX_MultVec43 ldrh r0, [r6, #0x20] - ldr r2, _0208E69C ; =UNK_020FFA38 + ldr r2, _0208E69C ; =FX_SinCosTable_ mov lr, #0x0 mov r0, r0, asr #0x4 mov r3, r0, lsl #0x1 @@ -4029,7 +4029,7 @@ _0208E620: bx lr .balign 4 _0208E698: .word 0x040004A4 -_0208E69C: .word UNK_020FFA38 +_0208E69C: .word FX_SinCosTable_ _0208E6A0: .word 0x04000454 _0208E6A4: .word 0x04000470 _0208E6A8: .word 0x04000480 @@ -4139,7 +4139,7 @@ _0208E7E0: str r3, [sp, #0x8] bl MTX_MultVec43 ldrh r0, [r8, #0x20] - ldr r2, _0208EAE8 ; =UNK_020FFA38 + ldr r2, _0208EAE8 ; =FX_SinCosTable_ ldr r12, [sp, #0x0] mov r0, r0, asr #0x4 mov r3, r0, lsl #0x1 @@ -4220,7 +4220,7 @@ _0208E90C: str r3, [sp, #0x8] bl MTX_MultVec43 ldrh r0, [r8, #0x20] - ldr r2, _0208EAE8 ; =UNK_020FFA38 + ldr r2, _0208EAE8 ; =FX_SinCosTable_ mov r8, #0x0 mov r0, r0, asr #0x4 mov r3, r0, lsl #0x1 @@ -4313,7 +4313,7 @@ _0208EA70: bx lr .balign 4 _0208EAE4: .word 0x040004A4 -_0208EAE8: .word UNK_020FFA38 +_0208EAE8: .word FX_SinCosTable_ _0208EAEC: .word 0x04000454 _0208EAF0: .word 0x04000470 _0208EAF4: .word 0x04000480 @@ -4846,12 +4846,12 @@ _0208F294: add r1, r1, #0x10000 mov r2, r0, lsl #0x1 str r1, [sp, #0x18] - ldr r0, _0208FD98 ; =UNK_020FFA38 + ldr r0, _0208FD98 ; =FX_SinCosTable_ mov r1, r2, lsl #0x1 ldrsh r0, [r0, r1] add r1, r2, #0x1 mov r2, r1, lsl #0x1 - ldr r1, _0208FD98 ; =UNK_020FFA38 + ldr r1, _0208FD98 ; =FX_SinCosTable_ ldrsh r3, [r1, r2] ldr r2, [r9, #0x5c] mov r1, #0x800 @@ -5562,7 +5562,7 @@ _0208FD88: .word 0x00000FFF _0208FD8C: .word UNK_021C8C5C _0208FD90: .word 0x5EEDF715 _0208FD94: .word 0x1B0CB173 -_0208FD98: .word UNK_020FFA38 +_0208FD98: .word FX_SinCosTable_ _0208FD9C: .word 0x00000003 _0208FDA0: .word 0xAAAAAAAB _0208FDA4: .word 0x0000FFFF @@ -6265,7 +6265,7 @@ FUN_02090780: ; 0x02090780 b _02090838 _020907AC: ldrh r1, [r0, #0x0] - ldr r3, _02090854 ; =UNK_020FFA38 + ldr r3, _02090854 ; =FX_SinCosTable_ add r0, sp, #0x0 mov r1, r1, asr #0x4 mov r2, r1, lsl #0x1 @@ -6278,7 +6278,7 @@ _020907AC: b _02090838 _020907DC: ldrh r1, [r0, #0x0] - ldr r3, _02090854 ; =UNK_020FFA38 + ldr r3, _02090854 ; =FX_SinCosTable_ add r0, sp, #0x0 mov r1, r1, asr #0x4 mov r2, r1, lsl #0x1 @@ -6291,7 +6291,7 @@ _020907DC: b _02090838 _0209080C: ldrh r1, [r0, #0x0] - ldr r3, _02090854 ; =UNK_020FFA38 + ldr r3, _02090854 ; =FX_SinCosTable_ add r0, sp, #0x0 mov r1, r1, asr #0x4 mov r2, r1, lsl #0x1 @@ -6310,7 +6310,7 @@ _02090838: ldmia sp!, {r4,lr} bx lr .balign 4 -_02090854: .word UNK_020FFA38 +_02090854: .word FX_SinCosTable_ arm_func_start FUN_02090858 FUN_02090858: ; 0x02090858 diff --git a/arm9/asm/unk_020ADA84.s b/arm9/asm/unk_020ADA84.s deleted file mode 100644 index 29fddc4a..00000000 --- a/arm9/asm/unk_020ADA84.s +++ /dev/null @@ -1,23258 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern SNDi_DecibelTable - .extern GXi_DmaId - - .section .rodata - - .global UNK_020FF7CC -UNK_020FF7CC: ; 0x020FF7CC - .word FUN_020AE894 - .word FUN_020AE884 - - .global UNK_020FF7D4 -UNK_020FF7D4: ; 0x020FF7D4 - .word FUN_020AF2B4 - .word FUN_020AF288 - .word FUN_020AF25C - .word FUN_020AF230 - .word GX_LoadBG0Char_2 - .word GX_LoadBG1Char_2 - .word GX_LoadBG2Char_2 - .word GX_LoadBG3Char_2 - .word GX_LoadBG0Scr_2 - .word GX_LoadBG1Scr_2 - .word GX_LoadBG2Scr_2 - .word GX_LoadBG3Scr_2 - .word GX_LoadBG2Scr_3 - .word GX_LoadBG3Scr_3 - .word GX_LoadOBJPltt_2 - .word GX_LoadBGPltt_2 - .word FUN_020AF174 - .word FUN_020AF148 - .word GX_LoadOAM_2 - .word GX_LoadOBJ_2 - .word GXS_LoadBG0Char_2 - .word GXS_LoadBG1Char_2 - .word GXS_LoadBG2Char_2 - .word GXS_LoadBG3Char_2 - .word GXS_LoadBG0Scr_2 - .word GXS_LoadBG1Scr_2 - .word GXS_LoadBG2Scr_2 - .word GXS_LoadBG3Scr_2 - .word GXS_LoadBG2Scr_3 - .word GXS_LoadBG3Scr_3 - .word GXS_LoadOBJPltt_2 - .word GXS_LoadBGPltt_2 - .word FUN_020AF074 - .word FUN_020AF048 - .word GXS_LoadOAM_2 - .word GXS_LoadOBJ_2 - - .global UNK_020FF864 -UNK_020FF864: ; 0x020FF864 - .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF894 -UNK_020FF894: ; 0x020FF894 - .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00 - .byte 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00 - - .global UNK_020FF8AC -UNK_020FF8AC: ; 0x020FF8AC - .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00 - .byte 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00 - - .global UNK_020FF8C4 -UNK_020FF8C4: ; 0x020FF8C4 - .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00 - - .global UNK_020FF8D0 -UNK_020FF8D0: ; 0x020FF8D0 - .byte 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 - - .global UNK_020FF8D8 -UNK_020FF8D8: ; 0x020FF8D8 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00 - .byte 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00 - - .global UNK_020FF8F8 -UNK_020FF8F8: ; 0x020FF8F8 - .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 - - .global UNK_020FF928 -UNK_020FF928: ; 0x020FF928 - .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 - - .global UNK_020FF958 -UNK_020FF958: ; 0x020FF958 - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020FF970 -UNK_020FF970: ; 0x020FF970 - .byte 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01 - .byte 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03 - - .global UNK_020FF990 -UNK_020FF990: ; 0x020FF990 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0xC0 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0 - - .global UNK_020FF9D0 -UNK_020FF9D0: ; 0x020FF9D0 - .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F - .byte 0x00, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F - - .global UNK_020FF9F0 -UNK_020FF9F0: ; 0x020FF9F0 - .byte 0x04 - - .global UNK_020FF9F1 -UNK_020FF9F1: ; 0x020FF9F1 - .byte 0x05 - - .global UNK_020FF9F2 -UNK_020FF9F2: ; 0x020FF9F2 - .byte 0x07 - - .global UNK_020FF9F3 -UNK_020FF9F3: ; 0x020FF9F3 - .byte 0x08, 0x03, 0x05, 0x06, 0x08, 0x03, 0x04, 0x06, 0x07, 0x01, 0x02, 0x07, 0x08, 0x00, 0x02, 0x06 - .byte 0x08, 0x00, 0x01, 0x06, 0x07, 0x01, 0x02, 0x04, 0x05, 0x00, 0x02, 0x03, 0x05, 0x00, 0x01, 0x03 - .byte 0x04 - - .global UNK_020FFA14 -UNK_020FFA14: ; 0x020FFA14 - .byte 0x04 - - .global UNK_020FFA15 -UNK_020FFA15: ; 0x020FFA15 - .byte 0x05 - - .global UNK_020FFA16 -UNK_020FFA16: ; 0x020FFA16 - .byte 0x07 - - .global UNK_020FFA17 -UNK_020FFA17: ; 0x020FFA17 - .byte 0x08, 0x03, 0x05, 0x06, 0x08, 0x03, 0x04, 0x06, 0x07, 0x01, 0x02, 0x07, 0x08, 0x00, 0x02, 0x06 - .byte 0x08, 0x00, 0x01, 0x06, 0x07, 0x01, 0x02, 0x04, 0x05, 0x00, 0x02, 0x03, 0x05, 0x00, 0x01, 0x03 - .byte 0x04 - - .global UNK_020FFA38 -UNK_020FFA38: ; 0x020FFA38 - .byte 0x00, 0x00, 0x00, 0x10, 0x06, 0x00, 0x00, 0x10, 0x0D, 0x00, 0x00, 0x10, 0x13, 0x00, 0x00, 0x10, - .byte 0x19, 0x00, 0x00, 0x10, 0x1F, 0x00, 0x00, 0x10, 0x26, 0x00, 0x00, 0x10, 0x2C, 0x00, 0x00, 0x10, - .byte 0x32, 0x00, 0x00, 0x10, 0x39, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x10, 0x45, 0x00, 0xFF, 0x0F, - .byte 0x4B, 0x00, 0xFF, 0x0F, 0x52, 0x00, 0xFF, 0x0F, 0x58, 0x00, 0xFF, 0x0F, 0x5E, 0x00, 0xFF, 0x0F, - .byte 0x65, 0x00, 0xFF, 0x0F, 0x6B, 0x00, 0xFF, 0x0F, 0x71, 0x00, 0xFE, 0x0F, 0x77, 0x00, 0xFE, 0x0F, - .byte 0x7E, 0x00, 0xFE, 0x0F, 0x84, 0x00, 0xFE, 0x0F, 0x8A, 0x00, 0xFE, 0x0F, 0x90, 0x00, 0xFD, 0x0F, - .byte 0x97, 0x00, 0xFD, 0x0F, 0x9D, 0x00, 0xFD, 0x0F, 0xA3, 0x00, 0xFD, 0x0F, 0xAA, 0x00, 0xFC, 0x0F, - .byte 0xB0, 0x00, 0xFC, 0x0F, 0xB6, 0x00, 0xFC, 0x0F, 0xBC, 0x00, 0xFC, 0x0F, 0xC3, 0x00, 0xFB, 0x0F, - .byte 0xC9, 0x00, 0xFB, 0x0F, 0xCF, 0x00, 0xFB, 0x0F, 0xD6, 0x00, 0xFA, 0x0F, 0xDC, 0x00, 0xFA, 0x0F, - .byte 0xE2, 0x00, 0xFA, 0x0F, 0xE8, 0x00, 0xF9, 0x0F, 0xEF, 0x00, 0xF9, 0x0F, 0xF5, 0x00, 0xF9, 0x0F, - .byte 0xFB, 0x00, 0xF8, 0x0F, 0x01, 0x01, 0xF8, 0x0F, 0x08, 0x01, 0xF8, 0x0F, 0x0E, 0x01, 0xF7, 0x0F, - .byte 0x14, 0x01, 0xF7, 0x0F, 0x1B, 0x01, 0xF6, 0x0F, 0x21, 0x01, 0xF6, 0x0F, 0x27, 0x01, 0xF5, 0x0F, - .byte 0x2D, 0x01, 0xF5, 0x0F, 0x34, 0x01, 0xF4, 0x0F, 0x3A, 0x01, 0xF4, 0x0F, 0x40, 0x01, 0xF3, 0x0F, - .byte 0x46, 0x01, 0xF3, 0x0F, 0x4D, 0x01, 0xF2, 0x0F, 0x53, 0x01, 0xF2, 0x0F, 0x59, 0x01, 0xF1, 0x0F, - .byte 0x5F, 0x01, 0xF1, 0x0F, 0x66, 0x01, 0xF0, 0x0F, 0x6C, 0x01, 0xF0, 0x0F, 0x72, 0x01, 0xEF, 0x0F, - .byte 0x78, 0x01, 0xEF, 0x0F, 0x7F, 0x01, 0xEE, 0x0F, 0x85, 0x01, 0xED, 0x0F, 0x8B, 0x01, 0xED, 0x0F, - .byte 0x91, 0x01, 0xEC, 0x0F, 0x98, 0x01, 0xEC, 0x0F, 0x9E, 0x01, 0xEB, 0x0F, 0xA4, 0x01, 0xEA, 0x0F, - .byte 0xAA, 0x01, 0xEA, 0x0F, 0xB1, 0x01, 0xE9, 0x0F, 0xB7, 0x01, 0xE8, 0x0F, 0xBD, 0x01, 0xE8, 0x0F, - .byte 0xC3, 0x01, 0xE7, 0x0F, 0xCA, 0x01, 0xE6, 0x0F, 0xD0, 0x01, 0xE6, 0x0F, 0xD6, 0x01, 0xE5, 0x0F, - .byte 0xDC, 0x01, 0xE4, 0x0F, 0xE3, 0x01, 0xE3, 0x0F, 0xE9, 0x01, 0xE3, 0x0F, 0xEF, 0x01, 0xE2, 0x0F, - .byte 0xF5, 0x01, 0xE1, 0x0F, 0xFC, 0x01, 0xE0, 0x0F, 0x02, 0x02, 0xE0, 0x0F, 0x08, 0x02, 0xDF, 0x0F, - .byte 0x0E, 0x02, 0xDE, 0x0F, 0x15, 0x02, 0xDD, 0x0F, 0x1B, 0x02, 0xDC, 0x0F, 0x21, 0x02, 0xDC, 0x0F, - .byte 0x27, 0x02, 0xDB, 0x0F, 0x2D, 0x02, 0xDA, 0x0F, 0x34, 0x02, 0xD9, 0x0F, 0x3A, 0x02, 0xD8, 0x0F, - .byte 0x40, 0x02, 0xD7, 0x0F, 0x46, 0x02, 0xD6, 0x0F, 0x4D, 0x02, 0xD5, 0x0F, 0x53, 0x02, 0xD5, 0x0F, - .byte 0x59, 0x02, 0xD4, 0x0F, 0x5F, 0x02, 0xD3, 0x0F, 0x65, 0x02, 0xD2, 0x0F, 0x6C, 0x02, 0xD1, 0x0F, - .byte 0x72, 0x02, 0xD0, 0x0F, 0x78, 0x02, 0xCF, 0x0F, 0x7E, 0x02, 0xCE, 0x0F, 0x84, 0x02, 0xCD, 0x0F, - .byte 0x8B, 0x02, 0xCC, 0x0F, 0x91, 0x02, 0xCB, 0x0F, 0x97, 0x02, 0xCA, 0x0F, 0x9D, 0x02, 0xC9, 0x0F, - .byte 0xA3, 0x02, 0xC8, 0x0F, 0xAA, 0x02, 0xC7, 0x0F, 0xB0, 0x02, 0xC6, 0x0F, 0xB6, 0x02, 0xC5, 0x0F, - .byte 0xBC, 0x02, 0xC4, 0x0F, 0xC2, 0x02, 0xC3, 0x0F, 0xC9, 0x02, 0xC2, 0x0F, 0xCF, 0x02, 0xC0, 0x0F, - .byte 0xD5, 0x02, 0xBF, 0x0F, 0xDB, 0x02, 0xBE, 0x0F, 0xE1, 0x02, 0xBD, 0x0F, 0xE8, 0x02, 0xBC, 0x0F, - .byte 0xEE, 0x02, 0xBB, 0x0F, 0xF4, 0x02, 0xBA, 0x0F, 0xFA, 0x02, 0xB8, 0x0F, 0x00, 0x03, 0xB7, 0x0F, - .byte 0x06, 0x03, 0xB6, 0x0F, 0x0D, 0x03, 0xB5, 0x0F, 0x13, 0x03, 0xB4, 0x0F, 0x19, 0x03, 0xB3, 0x0F, - .byte 0x1F, 0x03, 0xB1, 0x0F, 0x25, 0x03, 0xB0, 0x0F, 0x2B, 0x03, 0xAF, 0x0F, 0x32, 0x03, 0xAE, 0x0F, - .byte 0x38, 0x03, 0xAC, 0x0F, 0x3E, 0x03, 0xAB, 0x0F, 0x44, 0x03, 0xAA, 0x0F, 0x4A, 0x03, 0xA8, 0x0F, - .byte 0x50, 0x03, 0xA7, 0x0F, 0x56, 0x03, 0xA6, 0x0F, 0x5D, 0x03, 0xA5, 0x0F, 0x63, 0x03, 0xA3, 0x0F, - .byte 0x69, 0x03, 0xA2, 0x0F, 0x6F, 0x03, 0xA1, 0x0F, 0x75, 0x03, 0x9F, 0x0F, 0x7B, 0x03, 0x9E, 0x0F, - .byte 0x81, 0x03, 0x9C, 0x0F, 0x88, 0x03, 0x9B, 0x0F, 0x8E, 0x03, 0x9A, 0x0F, 0x94, 0x03, 0x98, 0x0F, - .byte 0x9A, 0x03, 0x97, 0x0F, 0xA0, 0x03, 0x95, 0x0F, 0xA6, 0x03, 0x94, 0x0F, 0xAC, 0x03, 0x93, 0x0F, - .byte 0xB2, 0x03, 0x91, 0x0F, 0xB9, 0x03, 0x90, 0x0F, 0xBF, 0x03, 0x8E, 0x0F, 0xC5, 0x03, 0x8D, 0x0F, - .byte 0xCB, 0x03, 0x8B, 0x0F, 0xD1, 0x03, 0x8A, 0x0F, 0xD7, 0x03, 0x88, 0x0F, 0xDD, 0x03, 0x87, 0x0F, - .byte 0xE3, 0x03, 0x85, 0x0F, 0xE9, 0x03, 0x84, 0x0F, 0xEF, 0x03, 0x82, 0x0F, 0xF6, 0x03, 0x81, 0x0F, - .byte 0xFC, 0x03, 0x7F, 0x0F, 0x02, 0x04, 0x7D, 0x0F, 0x08, 0x04, 0x7C, 0x0F, 0x0E, 0x04, 0x7A, 0x0F, - .byte 0x14, 0x04, 0x79, 0x0F, 0x1A, 0x04, 0x77, 0x0F, 0x20, 0x04, 0x76, 0x0F, 0x26, 0x04, 0x74, 0x0F, - .byte 0x2C, 0x04, 0x72, 0x0F, 0x32, 0x04, 0x71, 0x0F, 0x38, 0x04, 0x6F, 0x0F, 0x3E, 0x04, 0x6D, 0x0F, - .byte 0x44, 0x04, 0x6C, 0x0F, 0x4B, 0x04, 0x6A, 0x0F, 0x51, 0x04, 0x68, 0x0F, 0x57, 0x04, 0x67, 0x0F, - .byte 0x5D, 0x04, 0x65, 0x0F, 0x63, 0x04, 0x63, 0x0F, 0x69, 0x04, 0x61, 0x0F, 0x6F, 0x04, 0x60, 0x0F, - .byte 0x75, 0x04, 0x5E, 0x0F, 0x7B, 0x04, 0x5C, 0x0F, 0x81, 0x04, 0x5A, 0x0F, 0x87, 0x04, 0x59, 0x0F, - .byte 0x8D, 0x04, 0x57, 0x0F, 0x93, 0x04, 0x55, 0x0F, 0x99, 0x04, 0x53, 0x0F, 0x9F, 0x04, 0x51, 0x0F, - .byte 0xA5, 0x04, 0x50, 0x0F, 0xAB, 0x04, 0x4E, 0x0F, 0xB1, 0x04, 0x4C, 0x0F, 0xB7, 0x04, 0x4A, 0x0F, - .byte 0xBD, 0x04, 0x48, 0x0F, 0xC3, 0x04, 0x46, 0x0F, 0xC9, 0x04, 0x45, 0x0F, 0xCF, 0x04, 0x43, 0x0F, - .byte 0xD5, 0x04, 0x41, 0x0F, 0xDB, 0x04, 0x3F, 0x0F, 0xE1, 0x04, 0x3D, 0x0F, 0xE7, 0x04, 0x3B, 0x0F, - .byte 0xED, 0x04, 0x39, 0x0F, 0xF3, 0x04, 0x37, 0x0F, 0xF9, 0x04, 0x35, 0x0F, 0xFF, 0x04, 0x33, 0x0F, - .byte 0x05, 0x05, 0x31, 0x0F, 0x0B, 0x05, 0x2F, 0x0F, 0x11, 0x05, 0x2D, 0x0F, 0x17, 0x05, 0x2B, 0x0F, - .byte 0x1D, 0x05, 0x29, 0x0F, 0x23, 0x05, 0x27, 0x0F, 0x29, 0x05, 0x25, 0x0F, 0x2F, 0x05, 0x23, 0x0F, - .byte 0x34, 0x05, 0x21, 0x0F, 0x3A, 0x05, 0x1F, 0x0F, 0x40, 0x05, 0x1D, 0x0F, 0x46, 0x05, 0x1B, 0x0F, - .byte 0x4C, 0x05, 0x19, 0x0F, 0x52, 0x05, 0x17, 0x0F, 0x58, 0x05, 0x15, 0x0F, 0x5E, 0x05, 0x13, 0x0F, - .byte 0x64, 0x05, 0x11, 0x0F, 0x6A, 0x05, 0x0E, 0x0F, 0x70, 0x05, 0x0C, 0x0F, 0x76, 0x05, 0x0A, 0x0F, - .byte 0x7C, 0x05, 0x08, 0x0F, 0x81, 0x05, 0x06, 0x0F, 0x87, 0x05, 0x04, 0x0F, 0x8D, 0x05, 0x02, 0x0F, - .byte 0x93, 0x05, 0xFF, 0x0E, 0x99, 0x05, 0xFD, 0x0E, 0x9F, 0x05, 0xFB, 0x0E, 0xA5, 0x05, 0xF9, 0x0E, - .byte 0xAB, 0x05, 0xF7, 0x0E, 0xB1, 0x05, 0xF4, 0x0E, 0xB6, 0x05, 0xF2, 0x0E, 0xBC, 0x05, 0xF0, 0x0E, - .byte 0xC2, 0x05, 0xEE, 0x0E, 0xC8, 0x05, 0xEB, 0x0E, 0xCE, 0x05, 0xE9, 0x0E, 0xD4, 0x05, 0xE7, 0x0E, - .byte 0xDA, 0x05, 0xE4, 0x0E, 0xDF, 0x05, 0xE2, 0x0E, 0xE5, 0x05, 0xE0, 0x0E, 0xEB, 0x05, 0xDD, 0x0E, - .byte 0xF1, 0x05, 0xDB, 0x0E, 0xF7, 0x05, 0xD9, 0x0E, 0xFD, 0x05, 0xD6, 0x0E, 0x02, 0x06, 0xD4, 0x0E, - .byte 0x08, 0x06, 0xD2, 0x0E, 0x0E, 0x06, 0xCF, 0x0E, 0x14, 0x06, 0xCD, 0x0E, 0x1A, 0x06, 0xCB, 0x0E, - .byte 0x1F, 0x06, 0xC8, 0x0E, 0x25, 0x06, 0xC6, 0x0E, 0x2B, 0x06, 0xC3, 0x0E, 0x31, 0x06, 0xC1, 0x0E, - .byte 0x37, 0x06, 0xBF, 0x0E, 0x3C, 0x06, 0xBC, 0x0E, 0x42, 0x06, 0xBA, 0x0E, 0x48, 0x06, 0xB7, 0x0E, - .byte 0x4E, 0x06, 0xB5, 0x0E, 0x54, 0x06, 0xB2, 0x0E, 0x59, 0x06, 0xB0, 0x0E, 0x5F, 0x06, 0xAD, 0x0E, - .byte 0x65, 0x06, 0xAB, 0x0E, 0x6B, 0x06, 0xA8, 0x0E, 0x70, 0x06, 0xA6, 0x0E, 0x76, 0x06, 0xA3, 0x0E, - .byte 0x7C, 0x06, 0xA1, 0x0E, 0x82, 0x06, 0x9E, 0x0E, 0x87, 0x06, 0x9B, 0x0E, 0x8D, 0x06, 0x99, 0x0E, - .byte 0x93, 0x06, 0x96, 0x0E, 0x99, 0x06, 0x94, 0x0E, 0x9E, 0x06, 0x91, 0x0E, 0xA4, 0x06, 0x8F, 0x0E, - .byte 0xAA, 0x06, 0x8C, 0x0E, 0xAF, 0x06, 0x89, 0x0E, 0xB5, 0x06, 0x87, 0x0E, 0xBB, 0x06, 0x84, 0x0E, - .byte 0xC1, 0x06, 0x81, 0x0E, 0xC6, 0x06, 0x7F, 0x0E, 0xCC, 0x06, 0x7C, 0x0E, 0xD2, 0x06, 0x79, 0x0E, - .byte 0xD7, 0x06, 0x77, 0x0E, 0xDD, 0x06, 0x74, 0x0E, 0xE3, 0x06, 0x71, 0x0E, 0xE8, 0x06, 0x6F, 0x0E, - .byte 0xEE, 0x06, 0x6C, 0x0E, 0xF4, 0x06, 0x69, 0x0E, 0xF9, 0x06, 0x66, 0x0E, 0xFF, 0x06, 0x64, 0x0E, - .byte 0x05, 0x07, 0x61, 0x0E, 0x0A, 0x07, 0x5E, 0x0E, 0x10, 0x07, 0x5B, 0x0E, 0x15, 0x07, 0x59, 0x0E, - .byte 0x1B, 0x07, 0x56, 0x0E, 0x21, 0x07, 0x53, 0x0E, 0x26, 0x07, 0x50, 0x0E, 0x2C, 0x07, 0x4D, 0x0E, - .byte 0x32, 0x07, 0x4B, 0x0E, 0x37, 0x07, 0x48, 0x0E, 0x3D, 0x07, 0x45, 0x0E, 0x42, 0x07, 0x42, 0x0E, - .byte 0x48, 0x07, 0x3F, 0x0E, 0x4E, 0x07, 0x3C, 0x0E, 0x53, 0x07, 0x3A, 0x0E, 0x59, 0x07, 0x37, 0x0E, - .byte 0x5E, 0x07, 0x34, 0x0E, 0x64, 0x07, 0x31, 0x0E, 0x6A, 0x07, 0x2E, 0x0E, 0x6F, 0x07, 0x2B, 0x0E, - .byte 0x75, 0x07, 0x28, 0x0E, 0x7A, 0x07, 0x25, 0x0E, 0x80, 0x07, 0x22, 0x0E, 0x85, 0x07, 0x1F, 0x0E, - .byte 0x8B, 0x07, 0x1C, 0x0E, 0x90, 0x07, 0x19, 0x0E, 0x96, 0x07, 0x16, 0x0E, 0x9B, 0x07, 0x13, 0x0E, - .byte 0xA1, 0x07, 0x10, 0x0E, 0xA6, 0x07, 0x0D, 0x0E, 0xAC, 0x07, 0x0A, 0x0E, 0xB2, 0x07, 0x07, 0x0E, - .byte 0xB7, 0x07, 0x04, 0x0E, 0xBD, 0x07, 0x01, 0x0E, 0xC2, 0x07, 0xFE, 0x0D, 0xC8, 0x07, 0xFB, 0x0D, - .byte 0xCD, 0x07, 0xF8, 0x0D, 0xD2, 0x07, 0xF5, 0x0D, 0xD8, 0x07, 0xF2, 0x0D, 0xDD, 0x07, 0xEF, 0x0D, - .byte 0xE3, 0x07, 0xEC, 0x0D, 0xE8, 0x07, 0xE9, 0x0D, 0xEE, 0x07, 0xE6, 0x0D, 0xF3, 0x07, 0xE3, 0x0D, - .byte 0xF9, 0x07, 0xDF, 0x0D, 0xFE, 0x07, 0xDC, 0x0D, 0x04, 0x08, 0xD9, 0x0D, 0x09, 0x08, 0xD6, 0x0D, - .byte 0x0E, 0x08, 0xD3, 0x0D, 0x14, 0x08, 0xD0, 0x0D, 0x19, 0x08, 0xCC, 0x0D, 0x1F, 0x08, 0xC9, 0x0D, - .byte 0x24, 0x08, 0xC6, 0x0D, 0x2A, 0x08, 0xC3, 0x0D, 0x2F, 0x08, 0xC0, 0x0D, 0x34, 0x08, 0xBC, 0x0D, - .byte 0x3A, 0x08, 0xB9, 0x0D, 0x3F, 0x08, 0xB6, 0x0D, 0x45, 0x08, 0xB3, 0x0D, 0x4A, 0x08, 0xB0, 0x0D, - .byte 0x4F, 0x08, 0xAC, 0x0D, 0x55, 0x08, 0xA9, 0x0D, 0x5A, 0x08, 0xA6, 0x0D, 0x5F, 0x08, 0xA2, 0x0D, - .byte 0x65, 0x08, 0x9F, 0x0D, 0x6A, 0x08, 0x9C, 0x0D, 0x6F, 0x08, 0x99, 0x0D, 0x75, 0x08, 0x95, 0x0D, - .byte 0x7A, 0x08, 0x92, 0x0D, 0x7F, 0x08, 0x8F, 0x0D, 0x85, 0x08, 0x8B, 0x0D, 0x8A, 0x08, 0x88, 0x0D, - .byte 0x8F, 0x08, 0x85, 0x0D, 0x95, 0x08, 0x81, 0x0D, 0x9A, 0x08, 0x7E, 0x0D, 0x9F, 0x08, 0x7A, 0x0D, - .byte 0xA5, 0x08, 0x77, 0x0D, 0xAA, 0x08, 0x74, 0x0D, 0xAF, 0x08, 0x70, 0x0D, 0xB4, 0x08, 0x6D, 0x0D, - .byte 0xBA, 0x08, 0x69, 0x0D, 0xBF, 0x08, 0x66, 0x0D, 0xC4, 0x08, 0x62, 0x0D, 0xC9, 0x08, 0x5F, 0x0D, - .byte 0xCF, 0x08, 0x5C, 0x0D, 0xD4, 0x08, 0x58, 0x0D, 0xD9, 0x08, 0x55, 0x0D, 0xDE, 0x08, 0x51, 0x0D, - .byte 0xE4, 0x08, 0x4E, 0x0D, 0xE9, 0x08, 0x4A, 0x0D, 0xEE, 0x08, 0x47, 0x0D, 0xF3, 0x08, 0x43, 0x0D, - .byte 0xF8, 0x08, 0x40, 0x0D, 0xFE, 0x08, 0x3C, 0x0D, 0x03, 0x09, 0x39, 0x0D, 0x08, 0x09, 0x35, 0x0D, - .byte 0x0D, 0x09, 0x32, 0x0D, 0x12, 0x09, 0x2E, 0x0D, 0x18, 0x09, 0x2A, 0x0D, 0x1D, 0x09, 0x27, 0x0D, - .byte 0x22, 0x09, 0x23, 0x0D, 0x27, 0x09, 0x20, 0x0D, 0x2C, 0x09, 0x1C, 0x0D, 0x31, 0x09, 0x18, 0x0D, - .byte 0x37, 0x09, 0x15, 0x0D, 0x3C, 0x09, 0x11, 0x0D, 0x41, 0x09, 0x0E, 0x0D, 0x46, 0x09, 0x0A, 0x0D, - .byte 0x4B, 0x09, 0x06, 0x0D, 0x50, 0x09, 0x03, 0x0D, 0x55, 0x09, 0xFF, 0x0C, 0x5A, 0x09, 0xFB, 0x0C, - .byte 0x5F, 0x09, 0xF8, 0x0C, 0x65, 0x09, 0xF4, 0x0C, 0x6A, 0x09, 0xF0, 0x0C, 0x6F, 0x09, 0xED, 0x0C, - .byte 0x74, 0x09, 0xE9, 0x0C, 0x79, 0x09, 0xE5, 0x0C, 0x7E, 0x09, 0xE1, 0x0C, 0x83, 0x09, 0xDE, 0x0C, - .byte 0x88, 0x09, 0xDA, 0x0C, 0x8D, 0x09, 0xD6, 0x0C, 0x92, 0x09, 0xD2, 0x0C, 0x97, 0x09, 0xCF, 0x0C, - .byte 0x9C, 0x09, 0xCB, 0x0C, 0xA1, 0x09, 0xC7, 0x0C, 0xA6, 0x09, 0xC3, 0x0C, 0xAB, 0x09, 0xC0, 0x0C, - .byte 0xB0, 0x09, 0xBC, 0x0C, 0xB5, 0x09, 0xB8, 0x0C, 0xBA, 0x09, 0xB4, 0x0C, 0xBF, 0x09, 0xB0, 0x0C, - .byte 0xC4, 0x09, 0xAC, 0x0C, 0xC9, 0x09, 0xA9, 0x0C, 0xCE, 0x09, 0xA5, 0x0C, 0xD3, 0x09, 0xA1, 0x0C, - .byte 0xD8, 0x09, 0x9D, 0x0C, 0xDD, 0x09, 0x99, 0x0C, 0xE2, 0x09, 0x95, 0x0C, 0xE7, 0x09, 0x91, 0x0C, - .byte 0xEC, 0x09, 0x8E, 0x0C, 0xF1, 0x09, 0x8A, 0x0C, 0xF6, 0x09, 0x86, 0x0C, 0xFB, 0x09, 0x82, 0x0C, - .byte 0xFF, 0x09, 0x7E, 0x0C, 0x04, 0x0A, 0x7A, 0x0C, 0x09, 0x0A, 0x76, 0x0C, 0x0E, 0x0A, 0x72, 0x0C, - .byte 0x13, 0x0A, 0x6E, 0x0C, 0x18, 0x0A, 0x6A, 0x0C, 0x1D, 0x0A, 0x66, 0x0C, 0x22, 0x0A, 0x62, 0x0C, - .byte 0x26, 0x0A, 0x5E, 0x0C, 0x2B, 0x0A, 0x5A, 0x0C, 0x30, 0x0A, 0x56, 0x0C, 0x35, 0x0A, 0x52, 0x0C, - .byte 0x3A, 0x0A, 0x4E, 0x0C, 0x3F, 0x0A, 0x4A, 0x0C, 0x44, 0x0A, 0x46, 0x0C, 0x48, 0x0A, 0x42, 0x0C, - .byte 0x4D, 0x0A, 0x3E, 0x0C, 0x52, 0x0A, 0x3A, 0x0C, 0x57, 0x0A, 0x36, 0x0C, 0x5C, 0x0A, 0x32, 0x0C, - .byte 0x60, 0x0A, 0x2E, 0x0C, 0x65, 0x0A, 0x2A, 0x0C, 0x6A, 0x0A, 0x26, 0x0C, 0x6F, 0x0A, 0x22, 0x0C, - .byte 0x73, 0x0A, 0x1E, 0x0C, 0x78, 0x0A, 0x19, 0x0C, 0x7D, 0x0A, 0x15, 0x0C, 0x82, 0x0A, 0x11, 0x0C, - .byte 0x86, 0x0A, 0x0D, 0x0C, 0x8B, 0x0A, 0x09, 0x0C, 0x90, 0x0A, 0x05, 0x0C, 0x95, 0x0A, 0x01, 0x0C, - .byte 0x99, 0x0A, 0xFC, 0x0B, 0x9E, 0x0A, 0xF8, 0x0B, 0xA3, 0x0A, 0xF4, 0x0B, 0xA7, 0x0A, 0xF0, 0x0B, - .byte 0xAC, 0x0A, 0xEC, 0x0B, 0xB1, 0x0A, 0xE8, 0x0B, 0xB5, 0x0A, 0xE3, 0x0B, 0xBA, 0x0A, 0xDF, 0x0B, - .byte 0xBF, 0x0A, 0xDB, 0x0B, 0xC3, 0x0A, 0xD7, 0x0B, 0xC8, 0x0A, 0xD2, 0x0B, 0xCD, 0x0A, 0xCE, 0x0B, - .byte 0xD1, 0x0A, 0xCA, 0x0B, 0xD6, 0x0A, 0xC6, 0x0B, 0xDB, 0x0A, 0xC1, 0x0B, 0xDF, 0x0A, 0xBD, 0x0B, - .byte 0xE4, 0x0A, 0xB9, 0x0B, 0xE8, 0x0A, 0xB5, 0x0B, 0xED, 0x0A, 0xB0, 0x0B, 0xF2, 0x0A, 0xAC, 0x0B, - .byte 0xF6, 0x0A, 0xA8, 0x0B, 0xFB, 0x0A, 0xA3, 0x0B, 0xFF, 0x0A, 0x9F, 0x0B, 0x04, 0x0B, 0x9B, 0x0B, - .byte 0x08, 0x0B, 0x97, 0x0B, 0x0D, 0x0B, 0x92, 0x0B, 0x11, 0x0B, 0x8E, 0x0B, 0x16, 0x0B, 0x89, 0x0B, - .byte 0x1B, 0x0B, 0x85, 0x0B, 0x1F, 0x0B, 0x81, 0x0B, 0x24, 0x0B, 0x7C, 0x0B, 0x28, 0x0B, 0x78, 0x0B, - .byte 0x2D, 0x0B, 0x74, 0x0B, 0x31, 0x0B, 0x6F, 0x0B, 0x36, 0x0B, 0x6B, 0x0B, 0x3A, 0x0B, 0x66, 0x0B, - .byte 0x3E, 0x0B, 0x62, 0x0B, 0x43, 0x0B, 0x5E, 0x0B, 0x47, 0x0B, 0x59, 0x0B, 0x4C, 0x0B, 0x55, 0x0B, - .byte 0x50, 0x0B, 0x50, 0x0B, 0x55, 0x0B, 0x4C, 0x0B, 0x59, 0x0B, 0x47, 0x0B, 0x5E, 0x0B, 0x43, 0x0B, - .byte 0x62, 0x0B, 0x3E, 0x0B, 0x66, 0x0B, 0x3A, 0x0B, 0x6B, 0x0B, 0x36, 0x0B, 0x6F, 0x0B, 0x31, 0x0B, - .byte 0x74, 0x0B, 0x2D, 0x0B, 0x78, 0x0B, 0x28, 0x0B, 0x7C, 0x0B, 0x24, 0x0B, 0x81, 0x0B, 0x1F, 0x0B, - .byte 0x85, 0x0B, 0x1B, 0x0B, 0x89, 0x0B, 0x16, 0x0B, 0x8E, 0x0B, 0x11, 0x0B, 0x92, 0x0B, 0x0D, 0x0B, - .byte 0x97, 0x0B, 0x08, 0x0B, 0x9B, 0x0B, 0x04, 0x0B, 0x9F, 0x0B, 0xFF, 0x0A, 0xA3, 0x0B, 0xFB, 0x0A, - .byte 0xA8, 0x0B, 0xF6, 0x0A, 0xAC, 0x0B, 0xF2, 0x0A, 0xB0, 0x0B, 0xED, 0x0A, 0xB5, 0x0B, 0xE8, 0x0A, - .byte 0xB9, 0x0B, 0xE4, 0x0A, 0xBD, 0x0B, 0xDF, 0x0A, 0xC1, 0x0B, 0xDB, 0x0A, 0xC6, 0x0B, 0xD6, 0x0A, - .byte 0xCA, 0x0B, 0xD1, 0x0A, 0xCE, 0x0B, 0xCD, 0x0A, 0xD2, 0x0B, 0xC8, 0x0A, 0xD7, 0x0B, 0xC3, 0x0A, - .byte 0xDB, 0x0B, 0xBF, 0x0A, 0xDF, 0x0B, 0xBA, 0x0A, 0xE3, 0x0B, 0xB5, 0x0A, 0xE8, 0x0B, 0xB1, 0x0A, - .byte 0xEC, 0x0B, 0xAC, 0x0A, 0xF0, 0x0B, 0xA7, 0x0A, 0xF4, 0x0B, 0xA3, 0x0A, 0xF8, 0x0B, 0x9E, 0x0A, - .byte 0xFC, 0x0B, 0x99, 0x0A, 0x01, 0x0C, 0x95, 0x0A, 0x05, 0x0C, 0x90, 0x0A, 0x09, 0x0C, 0x8B, 0x0A, - .byte 0x0D, 0x0C, 0x86, 0x0A, 0x11, 0x0C, 0x82, 0x0A, 0x15, 0x0C, 0x7D, 0x0A, 0x19, 0x0C, 0x78, 0x0A, - .byte 0x1E, 0x0C, 0x73, 0x0A, 0x22, 0x0C, 0x6F, 0x0A, 0x26, 0x0C, 0x6A, 0x0A, 0x2A, 0x0C, 0x65, 0x0A, - .byte 0x2E, 0x0C, 0x60, 0x0A, 0x32, 0x0C, 0x5C, 0x0A, 0x36, 0x0C, 0x57, 0x0A, 0x3A, 0x0C, 0x52, 0x0A, - .byte 0x3E, 0x0C, 0x4D, 0x0A, 0x42, 0x0C, 0x48, 0x0A, 0x46, 0x0C, 0x44, 0x0A, 0x4A, 0x0C, 0x3F, 0x0A, - .byte 0x4E, 0x0C, 0x3A, 0x0A, 0x52, 0x0C, 0x35, 0x0A, 0x56, 0x0C, 0x30, 0x0A, 0x5A, 0x0C, 0x2B, 0x0A, - .byte 0x5E, 0x0C, 0x26, 0x0A, 0x62, 0x0C, 0x22, 0x0A, 0x66, 0x0C, 0x1D, 0x0A, 0x6A, 0x0C, 0x18, 0x0A, - .byte 0x6E, 0x0C, 0x13, 0x0A, 0x72, 0x0C, 0x0E, 0x0A, 0x76, 0x0C, 0x09, 0x0A, 0x7A, 0x0C, 0x04, 0x0A, - .byte 0x7E, 0x0C, 0xFF, 0x09, 0x82, 0x0C, 0xFB, 0x09, 0x86, 0x0C, 0xF6, 0x09, 0x8A, 0x0C, 0xF1, 0x09, - .byte 0x8E, 0x0C, 0xEC, 0x09, 0x91, 0x0C, 0xE7, 0x09, 0x95, 0x0C, 0xE2, 0x09, 0x99, 0x0C, 0xDD, 0x09, - .byte 0x9D, 0x0C, 0xD8, 0x09, 0xA1, 0x0C, 0xD3, 0x09, 0xA5, 0x0C, 0xCE, 0x09, 0xA9, 0x0C, 0xC9, 0x09, - .byte 0xAC, 0x0C, 0xC4, 0x09, 0xB0, 0x0C, 0xBF, 0x09, 0xB4, 0x0C, 0xBA, 0x09, 0xB8, 0x0C, 0xB5, 0x09, - .byte 0xBC, 0x0C, 0xB0, 0x09, 0xC0, 0x0C, 0xAB, 0x09, 0xC3, 0x0C, 0xA6, 0x09, 0xC7, 0x0C, 0xA1, 0x09, - .byte 0xCB, 0x0C, 0x9C, 0x09, 0xCF, 0x0C, 0x97, 0x09, 0xD2, 0x0C, 0x92, 0x09, 0xD6, 0x0C, 0x8D, 0x09, - .byte 0xDA, 0x0C, 0x88, 0x09, 0xDE, 0x0C, 0x83, 0x09, 0xE1, 0x0C, 0x7E, 0x09, 0xE5, 0x0C, 0x79, 0x09, - .byte 0xE9, 0x0C, 0x74, 0x09, 0xED, 0x0C, 0x6F, 0x09, 0xF0, 0x0C, 0x6A, 0x09, 0xF4, 0x0C, 0x65, 0x09, - .byte 0xF8, 0x0C, 0x5F, 0x09, 0xFB, 0x0C, 0x5A, 0x09, 0xFF, 0x0C, 0x55, 0x09, 0x03, 0x0D, 0x50, 0x09, - .byte 0x06, 0x0D, 0x4B, 0x09, 0x0A, 0x0D, 0x46, 0x09, 0x0E, 0x0D, 0x41, 0x09, 0x11, 0x0D, 0x3C, 0x09, - .byte 0x15, 0x0D, 0x37, 0x09, 0x18, 0x0D, 0x31, 0x09, 0x1C, 0x0D, 0x2C, 0x09, 0x20, 0x0D, 0x27, 0x09, - .byte 0x23, 0x0D, 0x22, 0x09, 0x27, 0x0D, 0x1D, 0x09, 0x2A, 0x0D, 0x18, 0x09, 0x2E, 0x0D, 0x12, 0x09, - .byte 0x32, 0x0D, 0x0D, 0x09, 0x35, 0x0D, 0x08, 0x09, 0x39, 0x0D, 0x03, 0x09, 0x3C, 0x0D, 0xFE, 0x08, - .byte 0x40, 0x0D, 0xF8, 0x08, 0x43, 0x0D, 0xF3, 0x08, 0x47, 0x0D, 0xEE, 0x08, 0x4A, 0x0D, 0xE9, 0x08, - .byte 0x4E, 0x0D, 0xE4, 0x08, 0x51, 0x0D, 0xDE, 0x08, 0x55, 0x0D, 0xD9, 0x08, 0x58, 0x0D, 0xD4, 0x08, - .byte 0x5C, 0x0D, 0xCF, 0x08, 0x5F, 0x0D, 0xC9, 0x08, 0x62, 0x0D, 0xC4, 0x08, 0x66, 0x0D, 0xBF, 0x08, - .byte 0x69, 0x0D, 0xBA, 0x08, 0x6D, 0x0D, 0xB4, 0x08, 0x70, 0x0D, 0xAF, 0x08, 0x74, 0x0D, 0xAA, 0x08, - .byte 0x77, 0x0D, 0xA5, 0x08, 0x7A, 0x0D, 0x9F, 0x08, 0x7E, 0x0D, 0x9A, 0x08, 0x81, 0x0D, 0x95, 0x08, - .byte 0x85, 0x0D, 0x8F, 0x08, 0x88, 0x0D, 0x8A, 0x08, 0x8B, 0x0D, 0x85, 0x08, 0x8F, 0x0D, 0x7F, 0x08, - .byte 0x92, 0x0D, 0x7A, 0x08, 0x95, 0x0D, 0x75, 0x08, 0x99, 0x0D, 0x6F, 0x08, 0x9C, 0x0D, 0x6A, 0x08, - .byte 0x9F, 0x0D, 0x65, 0x08, 0xA2, 0x0D, 0x5F, 0x08, 0xA6, 0x0D, 0x5A, 0x08, 0xA9, 0x0D, 0x55, 0x08, - .byte 0xAC, 0x0D, 0x4F, 0x08, 0xB0, 0x0D, 0x4A, 0x08, 0xB3, 0x0D, 0x45, 0x08, 0xB6, 0x0D, 0x3F, 0x08, - .byte 0xB9, 0x0D, 0x3A, 0x08, 0xBC, 0x0D, 0x34, 0x08, 0xC0, 0x0D, 0x2F, 0x08, 0xC3, 0x0D, 0x2A, 0x08, - .byte 0xC6, 0x0D, 0x24, 0x08, 0xC9, 0x0D, 0x1F, 0x08, 0xCC, 0x0D, 0x19, 0x08, 0xD0, 0x0D, 0x14, 0x08, - .byte 0xD3, 0x0D, 0x0E, 0x08, 0xD6, 0x0D, 0x09, 0x08, 0xD9, 0x0D, 0x04, 0x08, 0xDC, 0x0D, 0xFE, 0x07, - .byte 0xDF, 0x0D, 0xF9, 0x07, 0xE3, 0x0D, 0xF3, 0x07, 0xE6, 0x0D, 0xEE, 0x07, 0xE9, 0x0D, 0xE8, 0x07, - .byte 0xEC, 0x0D, 0xE3, 0x07, 0xEF, 0x0D, 0xDD, 0x07, 0xF2, 0x0D, 0xD8, 0x07, 0xF5, 0x0D, 0xD2, 0x07, - .byte 0xF8, 0x0D, 0xCD, 0x07, 0xFB, 0x0D, 0xC8, 0x07, 0xFE, 0x0D, 0xC2, 0x07, 0x01, 0x0E, 0xBD, 0x07, - .byte 0x04, 0x0E, 0xB7, 0x07, 0x07, 0x0E, 0xB2, 0x07, 0x0A, 0x0E, 0xAC, 0x07, 0x0D, 0x0E, 0xA6, 0x07, - .byte 0x10, 0x0E, 0xA1, 0x07, 0x13, 0x0E, 0x9B, 0x07, 0x16, 0x0E, 0x96, 0x07, 0x19, 0x0E, 0x90, 0x07, - .byte 0x1C, 0x0E, 0x8B, 0x07, 0x1F, 0x0E, 0x85, 0x07, 0x22, 0x0E, 0x80, 0x07, 0x25, 0x0E, 0x7A, 0x07, - .byte 0x28, 0x0E, 0x75, 0x07, 0x2B, 0x0E, 0x6F, 0x07, 0x2E, 0x0E, 0x6A, 0x07, 0x31, 0x0E, 0x64, 0x07, - .byte 0x34, 0x0E, 0x5E, 0x07, 0x37, 0x0E, 0x59, 0x07, 0x3A, 0x0E, 0x53, 0x07, 0x3C, 0x0E, 0x4E, 0x07, - .byte 0x3F, 0x0E, 0x48, 0x07, 0x42, 0x0E, 0x42, 0x07, 0x45, 0x0E, 0x3D, 0x07, 0x48, 0x0E, 0x37, 0x07, - .byte 0x4B, 0x0E, 0x32, 0x07, 0x4D, 0x0E, 0x2C, 0x07, 0x50, 0x0E, 0x26, 0x07, 0x53, 0x0E, 0x21, 0x07, - .byte 0x56, 0x0E, 0x1B, 0x07, 0x59, 0x0E, 0x15, 0x07, 0x5B, 0x0E, 0x10, 0x07, 0x5E, 0x0E, 0x0A, 0x07, - .byte 0x61, 0x0E, 0x05, 0x07, 0x64, 0x0E, 0xFF, 0x06, 0x66, 0x0E, 0xF9, 0x06, 0x69, 0x0E, 0xF4, 0x06, - .byte 0x6C, 0x0E, 0xEE, 0x06, 0x6F, 0x0E, 0xE8, 0x06, 0x71, 0x0E, 0xE3, 0x06, 0x74, 0x0E, 0xDD, 0x06, - .byte 0x77, 0x0E, 0xD7, 0x06, 0x79, 0x0E, 0xD2, 0x06, 0x7C, 0x0E, 0xCC, 0x06, 0x7F, 0x0E, 0xC6, 0x06, - .byte 0x81, 0x0E, 0xC1, 0x06, 0x84, 0x0E, 0xBB, 0x06, 0x87, 0x0E, 0xB5, 0x06, 0x89, 0x0E, 0xAF, 0x06, - .byte 0x8C, 0x0E, 0xAA, 0x06, 0x8F, 0x0E, 0xA4, 0x06, 0x91, 0x0E, 0x9E, 0x06, 0x94, 0x0E, 0x99, 0x06, - .byte 0x96, 0x0E, 0x93, 0x06, 0x99, 0x0E, 0x8D, 0x06, 0x9B, 0x0E, 0x87, 0x06, 0x9E, 0x0E, 0x82, 0x06, - .byte 0xA1, 0x0E, 0x7C, 0x06, 0xA3, 0x0E, 0x76, 0x06, 0xA6, 0x0E, 0x70, 0x06, 0xA8, 0x0E, 0x6B, 0x06, - .byte 0xAB, 0x0E, 0x65, 0x06, 0xAD, 0x0E, 0x5F, 0x06, 0xB0, 0x0E, 0x59, 0x06, 0xB2, 0x0E, 0x54, 0x06, - .byte 0xB5, 0x0E, 0x4E, 0x06, 0xB7, 0x0E, 0x48, 0x06, 0xBA, 0x0E, 0x42, 0x06, 0xBC, 0x0E, 0x3C, 0x06, - .byte 0xBF, 0x0E, 0x37, 0x06, 0xC1, 0x0E, 0x31, 0x06, 0xC3, 0x0E, 0x2B, 0x06, 0xC6, 0x0E, 0x25, 0x06, - .byte 0xC8, 0x0E, 0x1F, 0x06, 0xCB, 0x0E, 0x1A, 0x06, 0xCD, 0x0E, 0x14, 0x06, 0xCF, 0x0E, 0x0E, 0x06, - .byte 0xD2, 0x0E, 0x08, 0x06, 0xD4, 0x0E, 0x02, 0x06, 0xD6, 0x0E, 0xFD, 0x05, 0xD9, 0x0E, 0xF7, 0x05, - .byte 0xDB, 0x0E, 0xF1, 0x05, 0xDD, 0x0E, 0xEB, 0x05, 0xE0, 0x0E, 0xE5, 0x05, 0xE2, 0x0E, 0xDF, 0x05, - .byte 0xE4, 0x0E, 0xDA, 0x05, 0xE7, 0x0E, 0xD4, 0x05, 0xE9, 0x0E, 0xCE, 0x05, 0xEB, 0x0E, 0xC8, 0x05, - .byte 0xEE, 0x0E, 0xC2, 0x05, 0xF0, 0x0E, 0xBC, 0x05, 0xF2, 0x0E, 0xB6, 0x05, 0xF4, 0x0E, 0xB1, 0x05, - .byte 0xF7, 0x0E, 0xAB, 0x05, 0xF9, 0x0E, 0xA5, 0x05, 0xFB, 0x0E, 0x9F, 0x05, 0xFD, 0x0E, 0x99, 0x05, - .byte 0xFF, 0x0E, 0x93, 0x05, 0x02, 0x0F, 0x8D, 0x05, 0x04, 0x0F, 0x87, 0x05, 0x06, 0x0F, 0x81, 0x05, - .byte 0x08, 0x0F, 0x7C, 0x05, 0x0A, 0x0F, 0x76, 0x05, 0x0C, 0x0F, 0x70, 0x05, 0x0E, 0x0F, 0x6A, 0x05, - .byte 0x11, 0x0F, 0x64, 0x05, 0x13, 0x0F, 0x5E, 0x05, 0x15, 0x0F, 0x58, 0x05, 0x17, 0x0F, 0x52, 0x05, - .byte 0x19, 0x0F, 0x4C, 0x05, 0x1B, 0x0F, 0x46, 0x05, 0x1D, 0x0F, 0x40, 0x05, 0x1F, 0x0F, 0x3A, 0x05, - .byte 0x21, 0x0F, 0x34, 0x05, 0x23, 0x0F, 0x2F, 0x05, 0x25, 0x0F, 0x29, 0x05, 0x27, 0x0F, 0x23, 0x05, - .byte 0x29, 0x0F, 0x1D, 0x05, 0x2B, 0x0F, 0x17, 0x05, 0x2D, 0x0F, 0x11, 0x05, 0x2F, 0x0F, 0x0B, 0x05, - .byte 0x31, 0x0F, 0x05, 0x05, 0x33, 0x0F, 0xFF, 0x04, 0x35, 0x0F, 0xF9, 0x04, 0x37, 0x0F, 0xF3, 0x04, - .byte 0x39, 0x0F, 0xED, 0x04, 0x3B, 0x0F, 0xE7, 0x04, 0x3D, 0x0F, 0xE1, 0x04, 0x3F, 0x0F, 0xDB, 0x04, - .byte 0x41, 0x0F, 0xD5, 0x04, 0x43, 0x0F, 0xCF, 0x04, 0x45, 0x0F, 0xC9, 0x04, 0x46, 0x0F, 0xC3, 0x04, - .byte 0x48, 0x0F, 0xBD, 0x04, 0x4A, 0x0F, 0xB7, 0x04, 0x4C, 0x0F, 0xB1, 0x04, 0x4E, 0x0F, 0xAB, 0x04, - .byte 0x50, 0x0F, 0xA5, 0x04, 0x51, 0x0F, 0x9F, 0x04, 0x53, 0x0F, 0x99, 0x04, 0x55, 0x0F, 0x93, 0x04, - .byte 0x57, 0x0F, 0x8D, 0x04, 0x59, 0x0F, 0x87, 0x04, 0x5A, 0x0F, 0x81, 0x04, 0x5C, 0x0F, 0x7B, 0x04, - .byte 0x5E, 0x0F, 0x75, 0x04, 0x60, 0x0F, 0x6F, 0x04, 0x61, 0x0F, 0x69, 0x04, 0x63, 0x0F, 0x63, 0x04, - .byte 0x65, 0x0F, 0x5D, 0x04, 0x67, 0x0F, 0x57, 0x04, 0x68, 0x0F, 0x51, 0x04, 0x6A, 0x0F, 0x4B, 0x04, - .byte 0x6C, 0x0F, 0x44, 0x04, 0x6D, 0x0F, 0x3E, 0x04, 0x6F, 0x0F, 0x38, 0x04, 0x71, 0x0F, 0x32, 0x04, - .byte 0x72, 0x0F, 0x2C, 0x04, 0x74, 0x0F, 0x26, 0x04, 0x76, 0x0F, 0x20, 0x04, 0x77, 0x0F, 0x1A, 0x04, - .byte 0x79, 0x0F, 0x14, 0x04, 0x7A, 0x0F, 0x0E, 0x04, 0x7C, 0x0F, 0x08, 0x04, 0x7D, 0x0F, 0x02, 0x04, - .byte 0x7F, 0x0F, 0xFC, 0x03, 0x81, 0x0F, 0xF6, 0x03, 0x82, 0x0F, 0xEF, 0x03, 0x84, 0x0F, 0xE9, 0x03, - .byte 0x85, 0x0F, 0xE3, 0x03, 0x87, 0x0F, 0xDD, 0x03, 0x88, 0x0F, 0xD7, 0x03, 0x8A, 0x0F, 0xD1, 0x03, - .byte 0x8B, 0x0F, 0xCB, 0x03, 0x8D, 0x0F, 0xC5, 0x03, 0x8E, 0x0F, 0xBF, 0x03, 0x90, 0x0F, 0xB9, 0x03, - .byte 0x91, 0x0F, 0xB2, 0x03, 0x93, 0x0F, 0xAC, 0x03, 0x94, 0x0F, 0xA6, 0x03, 0x95, 0x0F, 0xA0, 0x03, - .byte 0x97, 0x0F, 0x9A, 0x03, 0x98, 0x0F, 0x94, 0x03, 0x9A, 0x0F, 0x8E, 0x03, 0x9B, 0x0F, 0x88, 0x03, - .byte 0x9C, 0x0F, 0x81, 0x03, 0x9E, 0x0F, 0x7B, 0x03, 0x9F, 0x0F, 0x75, 0x03, 0xA1, 0x0F, 0x6F, 0x03, - .byte 0xA2, 0x0F, 0x69, 0x03, 0xA3, 0x0F, 0x63, 0x03, 0xA5, 0x0F, 0x5D, 0x03, 0xA6, 0x0F, 0x56, 0x03, - .byte 0xA7, 0x0F, 0x50, 0x03, 0xA8, 0x0F, 0x4A, 0x03, 0xAA, 0x0F, 0x44, 0x03, 0xAB, 0x0F, 0x3E, 0x03, - .byte 0xAC, 0x0F, 0x38, 0x03, 0xAE, 0x0F, 0x32, 0x03, 0xAF, 0x0F, 0x2B, 0x03, 0xB0, 0x0F, 0x25, 0x03, - .byte 0xB1, 0x0F, 0x1F, 0x03, 0xB3, 0x0F, 0x19, 0x03, 0xB4, 0x0F, 0x13, 0x03, 0xB5, 0x0F, 0x0D, 0x03, - .byte 0xB6, 0x0F, 0x06, 0x03, 0xB7, 0x0F, 0x00, 0x03, 0xB8, 0x0F, 0xFA, 0x02, 0xBA, 0x0F, 0xF4, 0x02, - .byte 0xBB, 0x0F, 0xEE, 0x02, 0xBC, 0x0F, 0xE8, 0x02, 0xBD, 0x0F, 0xE1, 0x02, 0xBE, 0x0F, 0xDB, 0x02, - .byte 0xBF, 0x0F, 0xD5, 0x02, 0xC0, 0x0F, 0xCF, 0x02, 0xC2, 0x0F, 0xC9, 0x02, 0xC3, 0x0F, 0xC2, 0x02, - .byte 0xC4, 0x0F, 0xBC, 0x02, 0xC5, 0x0F, 0xB6, 0x02, 0xC6, 0x0F, 0xB0, 0x02, 0xC7, 0x0F, 0xAA, 0x02, - .byte 0xC8, 0x0F, 0xA3, 0x02, 0xC9, 0x0F, 0x9D, 0x02, 0xCA, 0x0F, 0x97, 0x02, 0xCB, 0x0F, 0x91, 0x02, - .byte 0xCC, 0x0F, 0x8B, 0x02, 0xCD, 0x0F, 0x84, 0x02, 0xCE, 0x0F, 0x7E, 0x02, 0xCF, 0x0F, 0x78, 0x02, - .byte 0xD0, 0x0F, 0x72, 0x02, 0xD1, 0x0F, 0x6C, 0x02, 0xD2, 0x0F, 0x65, 0x02, 0xD3, 0x0F, 0x5F, 0x02, - .byte 0xD4, 0x0F, 0x59, 0x02, 0xD5, 0x0F, 0x53, 0x02, 0xD5, 0x0F, 0x4D, 0x02, 0xD6, 0x0F, 0x46, 0x02, - .byte 0xD7, 0x0F, 0x40, 0x02, 0xD8, 0x0F, 0x3A, 0x02, 0xD9, 0x0F, 0x34, 0x02, 0xDA, 0x0F, 0x2D, 0x02, - .byte 0xDB, 0x0F, 0x27, 0x02, 0xDC, 0x0F, 0x21, 0x02, 0xDC, 0x0F, 0x1B, 0x02, 0xDD, 0x0F, 0x15, 0x02, - .byte 0xDE, 0x0F, 0x0E, 0x02, 0xDF, 0x0F, 0x08, 0x02, 0xE0, 0x0F, 0x02, 0x02, 0xE0, 0x0F, 0xFC, 0x01, - .byte 0xE1, 0x0F, 0xF5, 0x01, 0xE2, 0x0F, 0xEF, 0x01, 0xE3, 0x0F, 0xE9, 0x01, 0xE3, 0x0F, 0xE3, 0x01, - .byte 0xE4, 0x0F, 0xDC, 0x01, 0xE5, 0x0F, 0xD6, 0x01, 0xE6, 0x0F, 0xD0, 0x01, 0xE6, 0x0F, 0xCA, 0x01, - .byte 0xE7, 0x0F, 0xC3, 0x01, 0xE8, 0x0F, 0xBD, 0x01, 0xE8, 0x0F, 0xB7, 0x01, 0xE9, 0x0F, 0xB1, 0x01, - .byte 0xEA, 0x0F, 0xAA, 0x01, 0xEA, 0x0F, 0xA4, 0x01, 0xEB, 0x0F, 0x9E, 0x01, 0xEC, 0x0F, 0x98, 0x01, - .byte 0xEC, 0x0F, 0x91, 0x01, 0xED, 0x0F, 0x8B, 0x01, 0xED, 0x0F, 0x85, 0x01, 0xEE, 0x0F, 0x7F, 0x01, - .byte 0xEF, 0x0F, 0x78, 0x01, 0xEF, 0x0F, 0x72, 0x01, 0xF0, 0x0F, 0x6C, 0x01, 0xF0, 0x0F, 0x66, 0x01, - .byte 0xF1, 0x0F, 0x5F, 0x01, 0xF1, 0x0F, 0x59, 0x01, 0xF2, 0x0F, 0x53, 0x01, 0xF2, 0x0F, 0x4D, 0x01, - .byte 0xF3, 0x0F, 0x46, 0x01, 0xF3, 0x0F, 0x40, 0x01, 0xF4, 0x0F, 0x3A, 0x01, 0xF4, 0x0F, 0x34, 0x01, - .byte 0xF5, 0x0F, 0x2D, 0x01, 0xF5, 0x0F, 0x27, 0x01, 0xF6, 0x0F, 0x21, 0x01, 0xF6, 0x0F, 0x1B, 0x01, - .byte 0xF7, 0x0F, 0x14, 0x01, 0xF7, 0x0F, 0x0E, 0x01, 0xF8, 0x0F, 0x08, 0x01, 0xF8, 0x0F, 0x01, 0x01, - .byte 0xF8, 0x0F, 0xFB, 0x00, 0xF9, 0x0F, 0xF5, 0x00, 0xF9, 0x0F, 0xEF, 0x00, 0xF9, 0x0F, 0xE8, 0x00, - .byte 0xFA, 0x0F, 0xE2, 0x00, 0xFA, 0x0F, 0xDC, 0x00, 0xFA, 0x0F, 0xD6, 0x00, 0xFB, 0x0F, 0xCF, 0x00, - .byte 0xFB, 0x0F, 0xC9, 0x00, 0xFB, 0x0F, 0xC3, 0x00, 0xFC, 0x0F, 0xBC, 0x00, 0xFC, 0x0F, 0xB6, 0x00, - .byte 0xFC, 0x0F, 0xB0, 0x00, 0xFC, 0x0F, 0xAA, 0x00, 0xFD, 0x0F, 0xA3, 0x00, 0xFD, 0x0F, 0x9D, 0x00, - .byte 0xFD, 0x0F, 0x97, 0x00, 0xFD, 0x0F, 0x90, 0x00, 0xFE, 0x0F, 0x8A, 0x00, 0xFE, 0x0F, 0x84, 0x00, - .byte 0xFE, 0x0F, 0x7E, 0x00, 0xFE, 0x0F, 0x77, 0x00, 0xFE, 0x0F, 0x71, 0x00, 0xFF, 0x0F, 0x6B, 0x00, - .byte 0xFF, 0x0F, 0x65, 0x00, 0xFF, 0x0F, 0x5E, 0x00, 0xFF, 0x0F, 0x58, 0x00, 0xFF, 0x0F, 0x52, 0x00, - .byte 0xFF, 0x0F, 0x4B, 0x00, 0xFF, 0x0F, 0x45, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x10, 0x39, 0x00, - .byte 0x00, 0x10, 0x32, 0x00, 0x00, 0x10, 0x2C, 0x00, 0x00, 0x10, 0x26, 0x00, 0x00, 0x10, 0x1F, 0x00, - .byte 0x00, 0x10, 0x19, 0x00, 0x00, 0x10, 0x13, 0x00, 0x00, 0x10, 0x0D, 0x00, 0x00, 0x10, 0x06, 0x00, - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0xFA, 0xFF, 0x00, 0x10, 0xF3, 0xFF, 0x00, 0x10, 0xED, 0xFF, - .byte 0x00, 0x10, 0xE7, 0xFF, 0x00, 0x10, 0xE1, 0xFF, 0x00, 0x10, 0xDA, 0xFF, 0x00, 0x10, 0xD4, 0xFF, - .byte 0x00, 0x10, 0xCE, 0xFF, 0x00, 0x10, 0xC7, 0xFF, 0x00, 0x10, 0xC1, 0xFF, 0xFF, 0x0F, 0xBB, 0xFF, - .byte 0xFF, 0x0F, 0xB5, 0xFF, 0xFF, 0x0F, 0xAE, 0xFF, 0xFF, 0x0F, 0xA8, 0xFF, 0xFF, 0x0F, 0xA2, 0xFF, - .byte 0xFF, 0x0F, 0x9B, 0xFF, 0xFF, 0x0F, 0x95, 0xFF, 0xFE, 0x0F, 0x8F, 0xFF, 0xFE, 0x0F, 0x89, 0xFF, - .byte 0xFE, 0x0F, 0x82, 0xFF, 0xFE, 0x0F, 0x7C, 0xFF, 0xFE, 0x0F, 0x76, 0xFF, 0xFD, 0x0F, 0x70, 0xFF, - .byte 0xFD, 0x0F, 0x69, 0xFF, 0xFD, 0x0F, 0x63, 0xFF, 0xFD, 0x0F, 0x5D, 0xFF, 0xFC, 0x0F, 0x56, 0xFF, - .byte 0xFC, 0x0F, 0x50, 0xFF, 0xFC, 0x0F, 0x4A, 0xFF, 0xFC, 0x0F, 0x44, 0xFF, 0xFB, 0x0F, 0x3D, 0xFF, - .byte 0xFB, 0x0F, 0x37, 0xFF, 0xFB, 0x0F, 0x31, 0xFF, 0xFA, 0x0F, 0x2A, 0xFF, 0xFA, 0x0F, 0x24, 0xFF, - .byte 0xFA, 0x0F, 0x1E, 0xFF, 0xF9, 0x0F, 0x18, 0xFF, 0xF9, 0x0F, 0x11, 0xFF, 0xF9, 0x0F, 0x0B, 0xFF, - .byte 0xF8, 0x0F, 0x05, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0xF8, 0x0F, 0xF8, 0xFE, 0xF7, 0x0F, 0xF2, 0xFE, - .byte 0xF7, 0x0F, 0xEC, 0xFE, 0xF6, 0x0F, 0xE5, 0xFE, 0xF6, 0x0F, 0xDF, 0xFE, 0xF5, 0x0F, 0xD9, 0xFE, - .byte 0xF5, 0x0F, 0xD3, 0xFE, 0xF4, 0x0F, 0xCC, 0xFE, 0xF4, 0x0F, 0xC6, 0xFE, 0xF3, 0x0F, 0xC0, 0xFE, - .byte 0xF3, 0x0F, 0xBA, 0xFE, 0xF2, 0x0F, 0xB3, 0xFE, 0xF2, 0x0F, 0xAD, 0xFE, 0xF1, 0x0F, 0xA7, 0xFE, - .byte 0xF1, 0x0F, 0xA1, 0xFE, 0xF0, 0x0F, 0x9A, 0xFE, 0xF0, 0x0F, 0x94, 0xFE, 0xEF, 0x0F, 0x8E, 0xFE, - .byte 0xEF, 0x0F, 0x88, 0xFE, 0xEE, 0x0F, 0x81, 0xFE, 0xED, 0x0F, 0x7B, 0xFE, 0xED, 0x0F, 0x75, 0xFE, - .byte 0xEC, 0x0F, 0x6F, 0xFE, 0xEC, 0x0F, 0x68, 0xFE, 0xEB, 0x0F, 0x62, 0xFE, 0xEA, 0x0F, 0x5C, 0xFE, - .byte 0xEA, 0x0F, 0x56, 0xFE, 0xE9, 0x0F, 0x4F, 0xFE, 0xE8, 0x0F, 0x49, 0xFE, 0xE8, 0x0F, 0x43, 0xFE, - .byte 0xE7, 0x0F, 0x3D, 0xFE, 0xE6, 0x0F, 0x36, 0xFE, 0xE6, 0x0F, 0x30, 0xFE, 0xE5, 0x0F, 0x2A, 0xFE, - .byte 0xE4, 0x0F, 0x24, 0xFE, 0xE3, 0x0F, 0x1D, 0xFE, 0xE3, 0x0F, 0x17, 0xFE, 0xE2, 0x0F, 0x11, 0xFE, - .byte 0xE1, 0x0F, 0x0B, 0xFE, 0xE0, 0x0F, 0x04, 0xFE, 0xE0, 0x0F, 0xFE, 0xFD, 0xDF, 0x0F, 0xF8, 0xFD, - .byte 0xDE, 0x0F, 0xF2, 0xFD, 0xDD, 0x0F, 0xEB, 0xFD, 0xDC, 0x0F, 0xE5, 0xFD, 0xDC, 0x0F, 0xDF, 0xFD, - .byte 0xDB, 0x0F, 0xD9, 0xFD, 0xDA, 0x0F, 0xD3, 0xFD, 0xD9, 0x0F, 0xCC, 0xFD, 0xD8, 0x0F, 0xC6, 0xFD, - .byte 0xD7, 0x0F, 0xC0, 0xFD, 0xD6, 0x0F, 0xBA, 0xFD, 0xD5, 0x0F, 0xB3, 0xFD, 0xD5, 0x0F, 0xAD, 0xFD, - .byte 0xD4, 0x0F, 0xA7, 0xFD, 0xD3, 0x0F, 0xA1, 0xFD, 0xD2, 0x0F, 0x9B, 0xFD, 0xD1, 0x0F, 0x94, 0xFD, - .byte 0xD0, 0x0F, 0x8E, 0xFD, 0xCF, 0x0F, 0x88, 0xFD, 0xCE, 0x0F, 0x82, 0xFD, 0xCD, 0x0F, 0x7C, 0xFD, - .byte 0xCC, 0x0F, 0x75, 0xFD, 0xCB, 0x0F, 0x6F, 0xFD, 0xCA, 0x0F, 0x69, 0xFD, 0xC9, 0x0F, 0x63, 0xFD, - .byte 0xC8, 0x0F, 0x5D, 0xFD, 0xC7, 0x0F, 0x56, 0xFD, 0xC6, 0x0F, 0x50, 0xFD, 0xC5, 0x0F, 0x4A, 0xFD, - .byte 0xC4, 0x0F, 0x44, 0xFD, 0xC3, 0x0F, 0x3E, 0xFD, 0xC2, 0x0F, 0x37, 0xFD, 0xC0, 0x0F, 0x31, 0xFD, - .byte 0xBF, 0x0F, 0x2B, 0xFD, 0xBE, 0x0F, 0x25, 0xFD, 0xBD, 0x0F, 0x1F, 0xFD, 0xBC, 0x0F, 0x18, 0xFD, - .byte 0xBB, 0x0F, 0x12, 0xFD, 0xBA, 0x0F, 0x0C, 0xFD, 0xB8, 0x0F, 0x06, 0xFD, 0xB7, 0x0F, 0x00, 0xFD, - .byte 0xB6, 0x0F, 0xFA, 0xFC, 0xB5, 0x0F, 0xF3, 0xFC, 0xB4, 0x0F, 0xED, 0xFC, 0xB3, 0x0F, 0xE7, 0xFC, - .byte 0xB1, 0x0F, 0xE1, 0xFC, 0xB0, 0x0F, 0xDB, 0xFC, 0xAF, 0x0F, 0xD5, 0xFC, 0xAE, 0x0F, 0xCE, 0xFC, - .byte 0xAC, 0x0F, 0xC8, 0xFC, 0xAB, 0x0F, 0xC2, 0xFC, 0xAA, 0x0F, 0xBC, 0xFC, 0xA8, 0x0F, 0xB6, 0xFC, - .byte 0xA7, 0x0F, 0xB0, 0xFC, 0xA6, 0x0F, 0xAA, 0xFC, 0xA5, 0x0F, 0xA3, 0xFC, 0xA3, 0x0F, 0x9D, 0xFC, - .byte 0xA2, 0x0F, 0x97, 0xFC, 0xA1, 0x0F, 0x91, 0xFC, 0x9F, 0x0F, 0x8B, 0xFC, 0x9E, 0x0F, 0x85, 0xFC, - .byte 0x9C, 0x0F, 0x7F, 0xFC, 0x9B, 0x0F, 0x78, 0xFC, 0x9A, 0x0F, 0x72, 0xFC, 0x98, 0x0F, 0x6C, 0xFC, - .byte 0x97, 0x0F, 0x66, 0xFC, 0x95, 0x0F, 0x60, 0xFC, 0x94, 0x0F, 0x5A, 0xFC, 0x93, 0x0F, 0x54, 0xFC, - .byte 0x91, 0x0F, 0x4E, 0xFC, 0x90, 0x0F, 0x47, 0xFC, 0x8E, 0x0F, 0x41, 0xFC, 0x8D, 0x0F, 0x3B, 0xFC, - .byte 0x8B, 0x0F, 0x35, 0xFC, 0x8A, 0x0F, 0x2F, 0xFC, 0x88, 0x0F, 0x29, 0xFC, 0x87, 0x0F, 0x23, 0xFC, - .byte 0x85, 0x0F, 0x1D, 0xFC, 0x84, 0x0F, 0x17, 0xFC, 0x82, 0x0F, 0x11, 0xFC, 0x81, 0x0F, 0x0A, 0xFC, - .byte 0x7F, 0x0F, 0x04, 0xFC, 0x7D, 0x0F, 0xFE, 0xFB, 0x7C, 0x0F, 0xF8, 0xFB, 0x7A, 0x0F, 0xF2, 0xFB, - .byte 0x79, 0x0F, 0xEC, 0xFB, 0x77, 0x0F, 0xE6, 0xFB, 0x76, 0x0F, 0xE0, 0xFB, 0x74, 0x0F, 0xDA, 0xFB, - .byte 0x72, 0x0F, 0xD4, 0xFB, 0x71, 0x0F, 0xCE, 0xFB, 0x6F, 0x0F, 0xC8, 0xFB, 0x6D, 0x0F, 0xC2, 0xFB, - .byte 0x6C, 0x0F, 0xBC, 0xFB, 0x6A, 0x0F, 0xB5, 0xFB, 0x68, 0x0F, 0xAF, 0xFB, 0x67, 0x0F, 0xA9, 0xFB, - .byte 0x65, 0x0F, 0xA3, 0xFB, 0x63, 0x0F, 0x9D, 0xFB, 0x61, 0x0F, 0x97, 0xFB, 0x60, 0x0F, 0x91, 0xFB, - .byte 0x5E, 0x0F, 0x8B, 0xFB, 0x5C, 0x0F, 0x85, 0xFB, 0x5A, 0x0F, 0x7F, 0xFB, 0x59, 0x0F, 0x79, 0xFB, - .byte 0x57, 0x0F, 0x73, 0xFB, 0x55, 0x0F, 0x6D, 0xFB, 0x53, 0x0F, 0x67, 0xFB, 0x51, 0x0F, 0x61, 0xFB, - .byte 0x50, 0x0F, 0x5B, 0xFB, 0x4E, 0x0F, 0x55, 0xFB, 0x4C, 0x0F, 0x4F, 0xFB, 0x4A, 0x0F, 0x49, 0xFB, - .byte 0x48, 0x0F, 0x43, 0xFB, 0x46, 0x0F, 0x3D, 0xFB, 0x45, 0x0F, 0x37, 0xFB, 0x43, 0x0F, 0x31, 0xFB, - .byte 0x41, 0x0F, 0x2B, 0xFB, 0x3F, 0x0F, 0x25, 0xFB, 0x3D, 0x0F, 0x1F, 0xFB, 0x3B, 0x0F, 0x19, 0xFB, - .byte 0x39, 0x0F, 0x13, 0xFB, 0x37, 0x0F, 0x0D, 0xFB, 0x35, 0x0F, 0x07, 0xFB, 0x33, 0x0F, 0x01, 0xFB, - .byte 0x31, 0x0F, 0xFB, 0xFA, 0x2F, 0x0F, 0xF5, 0xFA, 0x2D, 0x0F, 0xEF, 0xFA, 0x2B, 0x0F, 0xE9, 0xFA, - .byte 0x29, 0x0F, 0xE3, 0xFA, 0x27, 0x0F, 0xDD, 0xFA, 0x25, 0x0F, 0xD7, 0xFA, 0x23, 0x0F, 0xD1, 0xFA, - .byte 0x21, 0x0F, 0xCC, 0xFA, 0x1F, 0x0F, 0xC6, 0xFA, 0x1D, 0x0F, 0xC0, 0xFA, 0x1B, 0x0F, 0xBA, 0xFA, - .byte 0x19, 0x0F, 0xB4, 0xFA, 0x17, 0x0F, 0xAE, 0xFA, 0x15, 0x0F, 0xA8, 0xFA, 0x13, 0x0F, 0xA2, 0xFA, - .byte 0x11, 0x0F, 0x9C, 0xFA, 0x0E, 0x0F, 0x96, 0xFA, 0x0C, 0x0F, 0x90, 0xFA, 0x0A, 0x0F, 0x8A, 0xFA, - .byte 0x08, 0x0F, 0x84, 0xFA, 0x06, 0x0F, 0x7F, 0xFA, 0x04, 0x0F, 0x79, 0xFA, 0x02, 0x0F, 0x73, 0xFA, - .byte 0xFF, 0x0E, 0x6D, 0xFA, 0xFD, 0x0E, 0x67, 0xFA, 0xFB, 0x0E, 0x61, 0xFA, 0xF9, 0x0E, 0x5B, 0xFA, - .byte 0xF7, 0x0E, 0x55, 0xFA, 0xF4, 0x0E, 0x4F, 0xFA, 0xF2, 0x0E, 0x4A, 0xFA, 0xF0, 0x0E, 0x44, 0xFA, - .byte 0xEE, 0x0E, 0x3E, 0xFA, 0xEB, 0x0E, 0x38, 0xFA, 0xE9, 0x0E, 0x32, 0xFA, 0xE7, 0x0E, 0x2C, 0xFA, - .byte 0xE4, 0x0E, 0x26, 0xFA, 0xE2, 0x0E, 0x21, 0xFA, 0xE0, 0x0E, 0x1B, 0xFA, 0xDD, 0x0E, 0x15, 0xFA, - .byte 0xDB, 0x0E, 0x0F, 0xFA, 0xD9, 0x0E, 0x09, 0xFA, 0xD6, 0x0E, 0x03, 0xFA, 0xD4, 0x0E, 0xFE, 0xF9, - .byte 0xD2, 0x0E, 0xF8, 0xF9, 0xCF, 0x0E, 0xF2, 0xF9, 0xCD, 0x0E, 0xEC, 0xF9, 0xCB, 0x0E, 0xE6, 0xF9, - .byte 0xC8, 0x0E, 0xE1, 0xF9, 0xC6, 0x0E, 0xDB, 0xF9, 0xC3, 0x0E, 0xD5, 0xF9, 0xC1, 0x0E, 0xCF, 0xF9, - .byte 0xBF, 0x0E, 0xC9, 0xF9, 0xBC, 0x0E, 0xC4, 0xF9, 0xBA, 0x0E, 0xBE, 0xF9, 0xB7, 0x0E, 0xB8, 0xF9, - .byte 0xB5, 0x0E, 0xB2, 0xF9, 0xB2, 0x0E, 0xAC, 0xF9, 0xB0, 0x0E, 0xA7, 0xF9, 0xAD, 0x0E, 0xA1, 0xF9, - .byte 0xAB, 0x0E, 0x9B, 0xF9, 0xA8, 0x0E, 0x95, 0xF9, 0xA6, 0x0E, 0x90, 0xF9, 0xA3, 0x0E, 0x8A, 0xF9, - .byte 0xA1, 0x0E, 0x84, 0xF9, 0x9E, 0x0E, 0x7E, 0xF9, 0x9B, 0x0E, 0x79, 0xF9, 0x99, 0x0E, 0x73, 0xF9, - .byte 0x96, 0x0E, 0x6D, 0xF9, 0x94, 0x0E, 0x67, 0xF9, 0x91, 0x0E, 0x62, 0xF9, 0x8F, 0x0E, 0x5C, 0xF9, - .byte 0x8C, 0x0E, 0x56, 0xF9, 0x89, 0x0E, 0x51, 0xF9, 0x87, 0x0E, 0x4B, 0xF9, 0x84, 0x0E, 0x45, 0xF9, - .byte 0x81, 0x0E, 0x3F, 0xF9, 0x7F, 0x0E, 0x3A, 0xF9, 0x7C, 0x0E, 0x34, 0xF9, 0x79, 0x0E, 0x2E, 0xF9, - .byte 0x77, 0x0E, 0x29, 0xF9, 0x74, 0x0E, 0x23, 0xF9, 0x71, 0x0E, 0x1D, 0xF9, 0x6F, 0x0E, 0x18, 0xF9, - .byte 0x6C, 0x0E, 0x12, 0xF9, 0x69, 0x0E, 0x0C, 0xF9, 0x66, 0x0E, 0x07, 0xF9, 0x64, 0x0E, 0x01, 0xF9, - .byte 0x61, 0x0E, 0xFB, 0xF8, 0x5E, 0x0E, 0xF6, 0xF8, 0x5B, 0x0E, 0xF0, 0xF8, 0x59, 0x0E, 0xEB, 0xF8, - .byte 0x56, 0x0E, 0xE5, 0xF8, 0x53, 0x0E, 0xDF, 0xF8, 0x50, 0x0E, 0xDA, 0xF8, 0x4D, 0x0E, 0xD4, 0xF8, - .byte 0x4B, 0x0E, 0xCE, 0xF8, 0x48, 0x0E, 0xC9, 0xF8, 0x45, 0x0E, 0xC3, 0xF8, 0x42, 0x0E, 0xBE, 0xF8, - .byte 0x3F, 0x0E, 0xB8, 0xF8, 0x3C, 0x0E, 0xB2, 0xF8, 0x3A, 0x0E, 0xAD, 0xF8, 0x37, 0x0E, 0xA7, 0xF8, - .byte 0x34, 0x0E, 0xA2, 0xF8, 0x31, 0x0E, 0x9C, 0xF8, 0x2E, 0x0E, 0x96, 0xF8, 0x2B, 0x0E, 0x91, 0xF8, - .byte 0x28, 0x0E, 0x8B, 0xF8, 0x25, 0x0E, 0x86, 0xF8, 0x22, 0x0E, 0x80, 0xF8, 0x1F, 0x0E, 0x7B, 0xF8, - .byte 0x1C, 0x0E, 0x75, 0xF8, 0x19, 0x0E, 0x70, 0xF8, 0x16, 0x0E, 0x6A, 0xF8, 0x13, 0x0E, 0x65, 0xF8, - .byte 0x10, 0x0E, 0x5F, 0xF8, 0x0D, 0x0E, 0x5A, 0xF8, 0x0A, 0x0E, 0x54, 0xF8, 0x07, 0x0E, 0x4E, 0xF8, - .byte 0x04, 0x0E, 0x49, 0xF8, 0x01, 0x0E, 0x43, 0xF8, 0xFE, 0x0D, 0x3E, 0xF8, 0xFB, 0x0D, 0x38, 0xF8, - .byte 0xF8, 0x0D, 0x33, 0xF8, 0xF5, 0x0D, 0x2E, 0xF8, 0xF2, 0x0D, 0x28, 0xF8, 0xEF, 0x0D, 0x23, 0xF8, - .byte 0xEC, 0x0D, 0x1D, 0xF8, 0xE9, 0x0D, 0x18, 0xF8, 0xE6, 0x0D, 0x12, 0xF8, 0xE3, 0x0D, 0x0D, 0xF8, - .byte 0xDF, 0x0D, 0x07, 0xF8, 0xDC, 0x0D, 0x02, 0xF8, 0xD9, 0x0D, 0xFC, 0xF7, 0xD6, 0x0D, 0xF7, 0xF7, - .byte 0xD3, 0x0D, 0xF2, 0xF7, 0xD0, 0x0D, 0xEC, 0xF7, 0xCC, 0x0D, 0xE7, 0xF7, 0xC9, 0x0D, 0xE1, 0xF7, - .byte 0xC6, 0x0D, 0xDC, 0xF7, 0xC3, 0x0D, 0xD6, 0xF7, 0xC0, 0x0D, 0xD1, 0xF7, 0xBC, 0x0D, 0xCC, 0xF7, - .byte 0xB9, 0x0D, 0xC6, 0xF7, 0xB6, 0x0D, 0xC1, 0xF7, 0xB3, 0x0D, 0xBB, 0xF7, 0xB0, 0x0D, 0xB6, 0xF7, - .byte 0xAC, 0x0D, 0xB1, 0xF7, 0xA9, 0x0D, 0xAB, 0xF7, 0xA6, 0x0D, 0xA6, 0xF7, 0xA2, 0x0D, 0xA1, 0xF7, - .byte 0x9F, 0x0D, 0x9B, 0xF7, 0x9C, 0x0D, 0x96, 0xF7, 0x99, 0x0D, 0x91, 0xF7, 0x95, 0x0D, 0x8B, 0xF7, - .byte 0x92, 0x0D, 0x86, 0xF7, 0x8F, 0x0D, 0x81, 0xF7, 0x8B, 0x0D, 0x7B, 0xF7, 0x88, 0x0D, 0x76, 0xF7, - .byte 0x85, 0x0D, 0x71, 0xF7, 0x81, 0x0D, 0x6B, 0xF7, 0x7E, 0x0D, 0x66, 0xF7, 0x7A, 0x0D, 0x61, 0xF7, - .byte 0x77, 0x0D, 0x5B, 0xF7, 0x74, 0x0D, 0x56, 0xF7, 0x70, 0x0D, 0x51, 0xF7, 0x6D, 0x0D, 0x4C, 0xF7, - .byte 0x69, 0x0D, 0x46, 0xF7, 0x66, 0x0D, 0x41, 0xF7, 0x62, 0x0D, 0x3C, 0xF7, 0x5F, 0x0D, 0x37, 0xF7, - .byte 0x5C, 0x0D, 0x31, 0xF7, 0x58, 0x0D, 0x2C, 0xF7, 0x55, 0x0D, 0x27, 0xF7, 0x51, 0x0D, 0x22, 0xF7, - .byte 0x4E, 0x0D, 0x1C, 0xF7, 0x4A, 0x0D, 0x17, 0xF7, 0x47, 0x0D, 0x12, 0xF7, 0x43, 0x0D, 0x0D, 0xF7, - .byte 0x40, 0x0D, 0x08, 0xF7, 0x3C, 0x0D, 0x02, 0xF7, 0x39, 0x0D, 0xFD, 0xF6, 0x35, 0x0D, 0xF8, 0xF6, - .byte 0x32, 0x0D, 0xF3, 0xF6, 0x2E, 0x0D, 0xEE, 0xF6, 0x2A, 0x0D, 0xE8, 0xF6, 0x27, 0x0D, 0xE3, 0xF6, - .byte 0x23, 0x0D, 0xDE, 0xF6, 0x20, 0x0D, 0xD9, 0xF6, 0x1C, 0x0D, 0xD4, 0xF6, 0x18, 0x0D, 0xCF, 0xF6, - .byte 0x15, 0x0D, 0xC9, 0xF6, 0x11, 0x0D, 0xC4, 0xF6, 0x0E, 0x0D, 0xBF, 0xF6, 0x0A, 0x0D, 0xBA, 0xF6, - .byte 0x06, 0x0D, 0xB5, 0xF6, 0x03, 0x0D, 0xB0, 0xF6, 0xFF, 0x0C, 0xAB, 0xF6, 0xFB, 0x0C, 0xA6, 0xF6, - .byte 0xF8, 0x0C, 0xA1, 0xF6, 0xF4, 0x0C, 0x9B, 0xF6, 0xF0, 0x0C, 0x96, 0xF6, 0xED, 0x0C, 0x91, 0xF6, - .byte 0xE9, 0x0C, 0x8C, 0xF6, 0xE5, 0x0C, 0x87, 0xF6, 0xE1, 0x0C, 0x82, 0xF6, 0xDE, 0x0C, 0x7D, 0xF6, - .byte 0xDA, 0x0C, 0x78, 0xF6, 0xD6, 0x0C, 0x73, 0xF6, 0xD2, 0x0C, 0x6E, 0xF6, 0xCF, 0x0C, 0x69, 0xF6, - .byte 0xCB, 0x0C, 0x64, 0xF6, 0xC7, 0x0C, 0x5F, 0xF6, 0xC3, 0x0C, 0x5A, 0xF6, 0xC0, 0x0C, 0x55, 0xF6, - .byte 0xBC, 0x0C, 0x50, 0xF6, 0xB8, 0x0C, 0x4B, 0xF6, 0xB4, 0x0C, 0x46, 0xF6, 0xB0, 0x0C, 0x41, 0xF6, - .byte 0xAC, 0x0C, 0x3C, 0xF6, 0xA9, 0x0C, 0x37, 0xF6, 0xA5, 0x0C, 0x32, 0xF6, 0xA1, 0x0C, 0x2D, 0xF6, - .byte 0x9D, 0x0C, 0x28, 0xF6, 0x99, 0x0C, 0x23, 0xF6, 0x95, 0x0C, 0x1E, 0xF6, 0x91, 0x0C, 0x19, 0xF6, - .byte 0x8E, 0x0C, 0x14, 0xF6, 0x8A, 0x0C, 0x0F, 0xF6, 0x86, 0x0C, 0x0A, 0xF6, 0x82, 0x0C, 0x05, 0xF6, - .byte 0x7E, 0x0C, 0x01, 0xF6, 0x7A, 0x0C, 0xFC, 0xF5, 0x76, 0x0C, 0xF7, 0xF5, 0x72, 0x0C, 0xF2, 0xF5, - .byte 0x6E, 0x0C, 0xED, 0xF5, 0x6A, 0x0C, 0xE8, 0xF5, 0x66, 0x0C, 0xE3, 0xF5, 0x62, 0x0C, 0xDE, 0xF5, - .byte 0x5E, 0x0C, 0xDA, 0xF5, 0x5A, 0x0C, 0xD5, 0xF5, 0x56, 0x0C, 0xD0, 0xF5, 0x52, 0x0C, 0xCB, 0xF5, - .byte 0x4E, 0x0C, 0xC6, 0xF5, 0x4A, 0x0C, 0xC1, 0xF5, 0x46, 0x0C, 0xBC, 0xF5, 0x42, 0x0C, 0xB8, 0xF5, - .byte 0x3E, 0x0C, 0xB3, 0xF5, 0x3A, 0x0C, 0xAE, 0xF5, 0x36, 0x0C, 0xA9, 0xF5, 0x32, 0x0C, 0xA4, 0xF5, - .byte 0x2E, 0x0C, 0xA0, 0xF5, 0x2A, 0x0C, 0x9B, 0xF5, 0x26, 0x0C, 0x96, 0xF5, 0x22, 0x0C, 0x91, 0xF5, - .byte 0x1E, 0x0C, 0x8D, 0xF5, 0x19, 0x0C, 0x88, 0xF5, 0x15, 0x0C, 0x83, 0xF5, 0x11, 0x0C, 0x7E, 0xF5, - .byte 0x0D, 0x0C, 0x7A, 0xF5, 0x09, 0x0C, 0x75, 0xF5, 0x05, 0x0C, 0x70, 0xF5, 0x01, 0x0C, 0x6B, 0xF5, - .byte 0xFC, 0x0B, 0x67, 0xF5, 0xF8, 0x0B, 0x62, 0xF5, 0xF4, 0x0B, 0x5D, 0xF5, 0xF0, 0x0B, 0x59, 0xF5, - .byte 0xEC, 0x0B, 0x54, 0xF5, 0xE8, 0x0B, 0x4F, 0xF5, 0xE3, 0x0B, 0x4B, 0xF5, 0xDF, 0x0B, 0x46, 0xF5, - .byte 0xDB, 0x0B, 0x41, 0xF5, 0xD7, 0x0B, 0x3D, 0xF5, 0xD2, 0x0B, 0x38, 0xF5, 0xCE, 0x0B, 0x33, 0xF5, - .byte 0xCA, 0x0B, 0x2F, 0xF5, 0xC6, 0x0B, 0x2A, 0xF5, 0xC1, 0x0B, 0x25, 0xF5, 0xBD, 0x0B, 0x21, 0xF5, - .byte 0xB9, 0x0B, 0x1C, 0xF5, 0xB5, 0x0B, 0x18, 0xF5, 0xB0, 0x0B, 0x13, 0xF5, 0xAC, 0x0B, 0x0E, 0xF5, - .byte 0xA8, 0x0B, 0x0A, 0xF5, 0xA3, 0x0B, 0x05, 0xF5, 0x9F, 0x0B, 0x01, 0xF5, 0x9B, 0x0B, 0xFC, 0xF4, - .byte 0x97, 0x0B, 0xF8, 0xF4, 0x92, 0x0B, 0xF3, 0xF4, 0x8E, 0x0B, 0xEF, 0xF4, 0x89, 0x0B, 0xEA, 0xF4, - .byte 0x85, 0x0B, 0xE5, 0xF4, 0x81, 0x0B, 0xE1, 0xF4, 0x7C, 0x0B, 0xDC, 0xF4, 0x78, 0x0B, 0xD8, 0xF4, - .byte 0x74, 0x0B, 0xD3, 0xF4, 0x6F, 0x0B, 0xCF, 0xF4, 0x6B, 0x0B, 0xCA, 0xF4, 0x66, 0x0B, 0xC6, 0xF4, - .byte 0x62, 0x0B, 0xC2, 0xF4, 0x5E, 0x0B, 0xBD, 0xF4, 0x59, 0x0B, 0xB9, 0xF4, 0x55, 0x0B, 0xB4, 0xF4, - .byte 0x50, 0x0B, 0xB0, 0xF4, 0x4C, 0x0B, 0xAB, 0xF4, 0x47, 0x0B, 0xA7, 0xF4, 0x43, 0x0B, 0xA2, 0xF4, - .byte 0x3E, 0x0B, 0x9E, 0xF4, 0x3A, 0x0B, 0x9A, 0xF4, 0x36, 0x0B, 0x95, 0xF4, 0x31, 0x0B, 0x91, 0xF4, - .byte 0x2D, 0x0B, 0x8C, 0xF4, 0x28, 0x0B, 0x88, 0xF4, 0x24, 0x0B, 0x84, 0xF4, 0x1F, 0x0B, 0x7F, 0xF4, - .byte 0x1B, 0x0B, 0x7B, 0xF4, 0x16, 0x0B, 0x77, 0xF4, 0x11, 0x0B, 0x72, 0xF4, 0x0D, 0x0B, 0x6E, 0xF4, - .byte 0x08, 0x0B, 0x69, 0xF4, 0x04, 0x0B, 0x65, 0xF4, 0xFF, 0x0A, 0x61, 0xF4, 0xFB, 0x0A, 0x5D, 0xF4, - .byte 0xF6, 0x0A, 0x58, 0xF4, 0xF2, 0x0A, 0x54, 0xF4, 0xED, 0x0A, 0x50, 0xF4, 0xE8, 0x0A, 0x4B, 0xF4, - .byte 0xE4, 0x0A, 0x47, 0xF4, 0xDF, 0x0A, 0x43, 0xF4, 0xDB, 0x0A, 0x3F, 0xF4, 0xD6, 0x0A, 0x3A, 0xF4, - .byte 0xD1, 0x0A, 0x36, 0xF4, 0xCD, 0x0A, 0x32, 0xF4, 0xC8, 0x0A, 0x2E, 0xF4, 0xC3, 0x0A, 0x29, 0xF4, - .byte 0xBF, 0x0A, 0x25, 0xF4, 0xBA, 0x0A, 0x21, 0xF4, 0xB5, 0x0A, 0x1D, 0xF4, 0xB1, 0x0A, 0x18, 0xF4, - .byte 0xAC, 0x0A, 0x14, 0xF4, 0xA7, 0x0A, 0x10, 0xF4, 0xA3, 0x0A, 0x0C, 0xF4, 0x9E, 0x0A, 0x08, 0xF4, - .byte 0x99, 0x0A, 0x04, 0xF4, 0x95, 0x0A, 0xFF, 0xF3, 0x90, 0x0A, 0xFB, 0xF3, 0x8B, 0x0A, 0xF7, 0xF3, - .byte 0x86, 0x0A, 0xF3, 0xF3, 0x82, 0x0A, 0xEF, 0xF3, 0x7D, 0x0A, 0xEB, 0xF3, 0x78, 0x0A, 0xE7, 0xF3, - .byte 0x73, 0x0A, 0xE2, 0xF3, 0x6F, 0x0A, 0xDE, 0xF3, 0x6A, 0x0A, 0xDA, 0xF3, 0x65, 0x0A, 0xD6, 0xF3, - .byte 0x60, 0x0A, 0xD2, 0xF3, 0x5C, 0x0A, 0xCE, 0xF3, 0x57, 0x0A, 0xCA, 0xF3, 0x52, 0x0A, 0xC6, 0xF3, - .byte 0x4D, 0x0A, 0xC2, 0xF3, 0x48, 0x0A, 0xBE, 0xF3, 0x44, 0x0A, 0xBA, 0xF3, 0x3F, 0x0A, 0xB6, 0xF3, - .byte 0x3A, 0x0A, 0xB2, 0xF3, 0x35, 0x0A, 0xAE, 0xF3, 0x30, 0x0A, 0xAA, 0xF3, 0x2B, 0x0A, 0xA6, 0xF3, - .byte 0x26, 0x0A, 0xA2, 0xF3, 0x22, 0x0A, 0x9E, 0xF3, 0x1D, 0x0A, 0x9A, 0xF3, 0x18, 0x0A, 0x96, 0xF3, - .byte 0x13, 0x0A, 0x92, 0xF3, 0x0E, 0x0A, 0x8E, 0xF3, 0x09, 0x0A, 0x8A, 0xF3, 0x04, 0x0A, 0x86, 0xF3, - .byte 0xFF, 0x09, 0x82, 0xF3, 0xFB, 0x09, 0x7E, 0xF3, 0xF6, 0x09, 0x7A, 0xF3, 0xF1, 0x09, 0x76, 0xF3, - .byte 0xEC, 0x09, 0x72, 0xF3, 0xE7, 0x09, 0x6F, 0xF3, 0xE2, 0x09, 0x6B, 0xF3, 0xDD, 0x09, 0x67, 0xF3, - .byte 0xD8, 0x09, 0x63, 0xF3, 0xD3, 0x09, 0x5F, 0xF3, 0xCE, 0x09, 0x5B, 0xF3, 0xC9, 0x09, 0x57, 0xF3, - .byte 0xC4, 0x09, 0x54, 0xF3, 0xBF, 0x09, 0x50, 0xF3, 0xBA, 0x09, 0x4C, 0xF3, 0xB5, 0x09, 0x48, 0xF3, - .byte 0xB0, 0x09, 0x44, 0xF3, 0xAB, 0x09, 0x40, 0xF3, 0xA6, 0x09, 0x3D, 0xF3, 0xA1, 0x09, 0x39, 0xF3, - .byte 0x9C, 0x09, 0x35, 0xF3, 0x97, 0x09, 0x31, 0xF3, 0x92, 0x09, 0x2E, 0xF3, 0x8D, 0x09, 0x2A, 0xF3, - .byte 0x88, 0x09, 0x26, 0xF3, 0x83, 0x09, 0x22, 0xF3, 0x7E, 0x09, 0x1F, 0xF3, 0x79, 0x09, 0x1B, 0xF3, - .byte 0x74, 0x09, 0x17, 0xF3, 0x6F, 0x09, 0x13, 0xF3, 0x6A, 0x09, 0x10, 0xF3, 0x65, 0x09, 0x0C, 0xF3, - .byte 0x5F, 0x09, 0x08, 0xF3, 0x5A, 0x09, 0x05, 0xF3, 0x55, 0x09, 0x01, 0xF3, 0x50, 0x09, 0xFD, 0xF2, - .byte 0x4B, 0x09, 0xFA, 0xF2, 0x46, 0x09, 0xF6, 0xF2, 0x41, 0x09, 0xF2, 0xF2, 0x3C, 0x09, 0xEF, 0xF2, - .byte 0x37, 0x09, 0xEB, 0xF2, 0x31, 0x09, 0xE8, 0xF2, 0x2C, 0x09, 0xE4, 0xF2, 0x27, 0x09, 0xE0, 0xF2, - .byte 0x22, 0x09, 0xDD, 0xF2, 0x1D, 0x09, 0xD9, 0xF2, 0x18, 0x09, 0xD6, 0xF2, 0x12, 0x09, 0xD2, 0xF2, - .byte 0x0D, 0x09, 0xCE, 0xF2, 0x08, 0x09, 0xCB, 0xF2, 0x03, 0x09, 0xC7, 0xF2, 0xFE, 0x08, 0xC4, 0xF2, - .byte 0xF8, 0x08, 0xC0, 0xF2, 0xF3, 0x08, 0xBD, 0xF2, 0xEE, 0x08, 0xB9, 0xF2, 0xE9, 0x08, 0xB6, 0xF2, - .byte 0xE4, 0x08, 0xB2, 0xF2, 0xDE, 0x08, 0xAF, 0xF2, 0xD9, 0x08, 0xAB, 0xF2, 0xD4, 0x08, 0xA8, 0xF2, - .byte 0xCF, 0x08, 0xA4, 0xF2, 0xC9, 0x08, 0xA1, 0xF2, 0xC4, 0x08, 0x9E, 0xF2, 0xBF, 0x08, 0x9A, 0xF2, - .byte 0xBA, 0x08, 0x97, 0xF2, 0xB4, 0x08, 0x93, 0xF2, 0xAF, 0x08, 0x90, 0xF2, 0xAA, 0x08, 0x8C, 0xF2, - .byte 0xA5, 0x08, 0x89, 0xF2, 0x9F, 0x08, 0x86, 0xF2, 0x9A, 0x08, 0x82, 0xF2, 0x95, 0x08, 0x7F, 0xF2, - .byte 0x8F, 0x08, 0x7B, 0xF2, 0x8A, 0x08, 0x78, 0xF2, 0x85, 0x08, 0x75, 0xF2, 0x7F, 0x08, 0x71, 0xF2, - .byte 0x7A, 0x08, 0x6E, 0xF2, 0x75, 0x08, 0x6B, 0xF2, 0x6F, 0x08, 0x67, 0xF2, 0x6A, 0x08, 0x64, 0xF2, - .byte 0x65, 0x08, 0x61, 0xF2, 0x5F, 0x08, 0x5E, 0xF2, 0x5A, 0x08, 0x5A, 0xF2, 0x55, 0x08, 0x57, 0xF2, - .byte 0x4F, 0x08, 0x54, 0xF2, 0x4A, 0x08, 0x50, 0xF2, 0x45, 0x08, 0x4D, 0xF2, 0x3F, 0x08, 0x4A, 0xF2, - .byte 0x3A, 0x08, 0x47, 0xF2, 0x34, 0x08, 0x44, 0xF2, 0x2F, 0x08, 0x40, 0xF2, 0x2A, 0x08, 0x3D, 0xF2, - .byte 0x24, 0x08, 0x3A, 0xF2, 0x1F, 0x08, 0x37, 0xF2, 0x19, 0x08, 0x34, 0xF2, 0x14, 0x08, 0x30, 0xF2, - .byte 0x0E, 0x08, 0x2D, 0xF2, 0x09, 0x08, 0x2A, 0xF2, 0x04, 0x08, 0x27, 0xF2, 0xFE, 0x07, 0x24, 0xF2, - .byte 0xF9, 0x07, 0x21, 0xF2, 0xF3, 0x07, 0x1D, 0xF2, 0xEE, 0x07, 0x1A, 0xF2, 0xE8, 0x07, 0x17, 0xF2, - .byte 0xE3, 0x07, 0x14, 0xF2, 0xDD, 0x07, 0x11, 0xF2, 0xD8, 0x07, 0x0E, 0xF2, 0xD2, 0x07, 0x0B, 0xF2, - .byte 0xCD, 0x07, 0x08, 0xF2, 0xC8, 0x07, 0x05, 0xF2, 0xC2, 0x07, 0x02, 0xF2, 0xBD, 0x07, 0xFF, 0xF1, - .byte 0xB7, 0x07, 0xFC, 0xF1, 0xB2, 0x07, 0xF9, 0xF1, 0xAC, 0x07, 0xF6, 0xF1, 0xA6, 0x07, 0xF3, 0xF1, - .byte 0xA1, 0x07, 0xF0, 0xF1, 0x9B, 0x07, 0xED, 0xF1, 0x96, 0x07, 0xEA, 0xF1, 0x90, 0x07, 0xE7, 0xF1, - .byte 0x8B, 0x07, 0xE4, 0xF1, 0x85, 0x07, 0xE1, 0xF1, 0x80, 0x07, 0xDE, 0xF1, 0x7A, 0x07, 0xDB, 0xF1, - .byte 0x75, 0x07, 0xD8, 0xF1, 0x6F, 0x07, 0xD5, 0xF1, 0x6A, 0x07, 0xD2, 0xF1, 0x64, 0x07, 0xCF, 0xF1, - .byte 0x5E, 0x07, 0xCC, 0xF1, 0x59, 0x07, 0xC9, 0xF1, 0x53, 0x07, 0xC6, 0xF1, 0x4E, 0x07, 0xC4, 0xF1, - .byte 0x48, 0x07, 0xC1, 0xF1, 0x42, 0x07, 0xBE, 0xF1, 0x3D, 0x07, 0xBB, 0xF1, 0x37, 0x07, 0xB8, 0xF1, - .byte 0x32, 0x07, 0xB5, 0xF1, 0x2C, 0x07, 0xB3, 0xF1, 0x26, 0x07, 0xB0, 0xF1, 0x21, 0x07, 0xAD, 0xF1, - .byte 0x1B, 0x07, 0xAA, 0xF1, 0x15, 0x07, 0xA7, 0xF1, 0x10, 0x07, 0xA5, 0xF1, 0x0A, 0x07, 0xA2, 0xF1, - .byte 0x05, 0x07, 0x9F, 0xF1, 0xFF, 0x06, 0x9C, 0xF1, 0xF9, 0x06, 0x9A, 0xF1, 0xF4, 0x06, 0x97, 0xF1, - .byte 0xEE, 0x06, 0x94, 0xF1, 0xE8, 0x06, 0x91, 0xF1, 0xE3, 0x06, 0x8F, 0xF1, 0xDD, 0x06, 0x8C, 0xF1, - .byte 0xD7, 0x06, 0x89, 0xF1, 0xD2, 0x06, 0x87, 0xF1, 0xCC, 0x06, 0x84, 0xF1, 0xC6, 0x06, 0x81, 0xF1, - .byte 0xC1, 0x06, 0x7F, 0xF1, 0xBB, 0x06, 0x7C, 0xF1, 0xB5, 0x06, 0x79, 0xF1, 0xAF, 0x06, 0x77, 0xF1, - .byte 0xAA, 0x06, 0x74, 0xF1, 0xA4, 0x06, 0x71, 0xF1, 0x9E, 0x06, 0x6F, 0xF1, 0x99, 0x06, 0x6C, 0xF1, - .byte 0x93, 0x06, 0x6A, 0xF1, 0x8D, 0x06, 0x67, 0xF1, 0x87, 0x06, 0x65, 0xF1, 0x82, 0x06, 0x62, 0xF1, - .byte 0x7C, 0x06, 0x5F, 0xF1, 0x76, 0x06, 0x5D, 0xF1, 0x70, 0x06, 0x5A, 0xF1, 0x6B, 0x06, 0x58, 0xF1, - .byte 0x65, 0x06, 0x55, 0xF1, 0x5F, 0x06, 0x53, 0xF1, 0x59, 0x06, 0x50, 0xF1, 0x54, 0x06, 0x4E, 0xF1, - .byte 0x4E, 0x06, 0x4B, 0xF1, 0x48, 0x06, 0x49, 0xF1, 0x42, 0x06, 0x46, 0xF1, 0x3C, 0x06, 0x44, 0xF1, - .byte 0x37, 0x06, 0x41, 0xF1, 0x31, 0x06, 0x3F, 0xF1, 0x2B, 0x06, 0x3D, 0xF1, 0x25, 0x06, 0x3A, 0xF1, - .byte 0x1F, 0x06, 0x38, 0xF1, 0x1A, 0x06, 0x35, 0xF1, 0x14, 0x06, 0x33, 0xF1, 0x0E, 0x06, 0x31, 0xF1, - .byte 0x08, 0x06, 0x2E, 0xF1, 0x02, 0x06, 0x2C, 0xF1, 0xFD, 0x05, 0x2A, 0xF1, 0xF7, 0x05, 0x27, 0xF1, - .byte 0xF1, 0x05, 0x25, 0xF1, 0xEB, 0x05, 0x23, 0xF1, 0xE5, 0x05, 0x20, 0xF1, 0xDF, 0x05, 0x1E, 0xF1, - .byte 0xDA, 0x05, 0x1C, 0xF1, 0xD4, 0x05, 0x19, 0xF1, 0xCE, 0x05, 0x17, 0xF1, 0xC8, 0x05, 0x15, 0xF1, - .byte 0xC2, 0x05, 0x12, 0xF1, 0xBC, 0x05, 0x10, 0xF1, 0xB6, 0x05, 0x0E, 0xF1, 0xB1, 0x05, 0x0C, 0xF1, - .byte 0xAB, 0x05, 0x09, 0xF1, 0xA5, 0x05, 0x07, 0xF1, 0x9F, 0x05, 0x05, 0xF1, 0x99, 0x05, 0x03, 0xF1, - .byte 0x93, 0x05, 0x01, 0xF1, 0x8D, 0x05, 0xFE, 0xF0, 0x87, 0x05, 0xFC, 0xF0, 0x81, 0x05, 0xFA, 0xF0, - .byte 0x7C, 0x05, 0xF8, 0xF0, 0x76, 0x05, 0xF6, 0xF0, 0x70, 0x05, 0xF4, 0xF0, 0x6A, 0x05, 0xF2, 0xF0, - .byte 0x64, 0x05, 0xEF, 0xF0, 0x5E, 0x05, 0xED, 0xF0, 0x58, 0x05, 0xEB, 0xF0, 0x52, 0x05, 0xE9, 0xF0, - .byte 0x4C, 0x05, 0xE7, 0xF0, 0x46, 0x05, 0xE5, 0xF0, 0x40, 0x05, 0xE3, 0xF0, 0x3A, 0x05, 0xE1, 0xF0, - .byte 0x34, 0x05, 0xDF, 0xF0, 0x2F, 0x05, 0xDD, 0xF0, 0x29, 0x05, 0xDB, 0xF0, 0x23, 0x05, 0xD9, 0xF0, - .byte 0x1D, 0x05, 0xD7, 0xF0, 0x17, 0x05, 0xD5, 0xF0, 0x11, 0x05, 0xD3, 0xF0, 0x0B, 0x05, 0xD1, 0xF0, - .byte 0x05, 0x05, 0xCF, 0xF0, 0xFF, 0x04, 0xCD, 0xF0, 0xF9, 0x04, 0xCB, 0xF0, 0xF3, 0x04, 0xC9, 0xF0, - .byte 0xED, 0x04, 0xC7, 0xF0, 0xE7, 0x04, 0xC5, 0xF0, 0xE1, 0x04, 0xC3, 0xF0, 0xDB, 0x04, 0xC1, 0xF0, - .byte 0xD5, 0x04, 0xBF, 0xF0, 0xCF, 0x04, 0xBD, 0xF0, 0xC9, 0x04, 0xBB, 0xF0, 0xC3, 0x04, 0xBA, 0xF0, - .byte 0xBD, 0x04, 0xB8, 0xF0, 0xB7, 0x04, 0xB6, 0xF0, 0xB1, 0x04, 0xB4, 0xF0, 0xAB, 0x04, 0xB2, 0xF0, - .byte 0xA5, 0x04, 0xB0, 0xF0, 0x9F, 0x04, 0xAF, 0xF0, 0x99, 0x04, 0xAD, 0xF0, 0x93, 0x04, 0xAB, 0xF0, - .byte 0x8D, 0x04, 0xA9, 0xF0, 0x87, 0x04, 0xA7, 0xF0, 0x81, 0x04, 0xA6, 0xF0, 0x7B, 0x04, 0xA4, 0xF0, - .byte 0x75, 0x04, 0xA2, 0xF0, 0x6F, 0x04, 0xA0, 0xF0, 0x69, 0x04, 0x9F, 0xF0, 0x63, 0x04, 0x9D, 0xF0, - .byte 0x5D, 0x04, 0x9B, 0xF0, 0x57, 0x04, 0x99, 0xF0, 0x51, 0x04, 0x98, 0xF0, 0x4B, 0x04, 0x96, 0xF0, - .byte 0x44, 0x04, 0x94, 0xF0, 0x3E, 0x04, 0x93, 0xF0, 0x38, 0x04, 0x91, 0xF0, 0x32, 0x04, 0x8F, 0xF0, - .byte 0x2C, 0x04, 0x8E, 0xF0, 0x26, 0x04, 0x8C, 0xF0, 0x20, 0x04, 0x8A, 0xF0, 0x1A, 0x04, 0x89, 0xF0, - .byte 0x14, 0x04, 0x87, 0xF0, 0x0E, 0x04, 0x86, 0xF0, 0x08, 0x04, 0x84, 0xF0, 0x02, 0x04, 0x83, 0xF0, - .byte 0xFC, 0x03, 0x81, 0xF0, 0xF6, 0x03, 0x7F, 0xF0, 0xEF, 0x03, 0x7E, 0xF0, 0xE9, 0x03, 0x7C, 0xF0, - .byte 0xE3, 0x03, 0x7B, 0xF0, 0xDD, 0x03, 0x79, 0xF0, 0xD7, 0x03, 0x78, 0xF0, 0xD1, 0x03, 0x76, 0xF0, - .byte 0xCB, 0x03, 0x75, 0xF0, 0xC5, 0x03, 0x73, 0xF0, 0xBF, 0x03, 0x72, 0xF0, 0xB9, 0x03, 0x70, 0xF0, - .byte 0xB2, 0x03, 0x6F, 0xF0, 0xAC, 0x03, 0x6D, 0xF0, 0xA6, 0x03, 0x6C, 0xF0, 0xA0, 0x03, 0x6B, 0xF0, - .byte 0x9A, 0x03, 0x69, 0xF0, 0x94, 0x03, 0x68, 0xF0, 0x8E, 0x03, 0x66, 0xF0, 0x88, 0x03, 0x65, 0xF0, - .byte 0x81, 0x03, 0x64, 0xF0, 0x7B, 0x03, 0x62, 0xF0, 0x75, 0x03, 0x61, 0xF0, 0x6F, 0x03, 0x5F, 0xF0, - .byte 0x69, 0x03, 0x5E, 0xF0, 0x63, 0x03, 0x5D, 0xF0, 0x5D, 0x03, 0x5B, 0xF0, 0x56, 0x03, 0x5A, 0xF0, - .byte 0x50, 0x03, 0x59, 0xF0, 0x4A, 0x03, 0x58, 0xF0, 0x44, 0x03, 0x56, 0xF0, 0x3E, 0x03, 0x55, 0xF0, - .byte 0x38, 0x03, 0x54, 0xF0, 0x32, 0x03, 0x52, 0xF0, 0x2B, 0x03, 0x51, 0xF0, 0x25, 0x03, 0x50, 0xF0, - .byte 0x1F, 0x03, 0x4F, 0xF0, 0x19, 0x03, 0x4D, 0xF0, 0x13, 0x03, 0x4C, 0xF0, 0x0D, 0x03, 0x4B, 0xF0, - .byte 0x06, 0x03, 0x4A, 0xF0, 0x00, 0x03, 0x49, 0xF0, 0xFA, 0x02, 0x48, 0xF0, 0xF4, 0x02, 0x46, 0xF0, - .byte 0xEE, 0x02, 0x45, 0xF0, 0xE8, 0x02, 0x44, 0xF0, 0xE1, 0x02, 0x43, 0xF0, 0xDB, 0x02, 0x42, 0xF0, - .byte 0xD5, 0x02, 0x41, 0xF0, 0xCF, 0x02, 0x40, 0xF0, 0xC9, 0x02, 0x3E, 0xF0, 0xC2, 0x02, 0x3D, 0xF0, - .byte 0xBC, 0x02, 0x3C, 0xF0, 0xB6, 0x02, 0x3B, 0xF0, 0xB0, 0x02, 0x3A, 0xF0, 0xAA, 0x02, 0x39, 0xF0, - .byte 0xA3, 0x02, 0x38, 0xF0, 0x9D, 0x02, 0x37, 0xF0, 0x97, 0x02, 0x36, 0xF0, 0x91, 0x02, 0x35, 0xF0, - .byte 0x8B, 0x02, 0x34, 0xF0, 0x84, 0x02, 0x33, 0xF0, 0x7E, 0x02, 0x32, 0xF0, 0x78, 0x02, 0x31, 0xF0, - .byte 0x72, 0x02, 0x30, 0xF0, 0x6C, 0x02, 0x2F, 0xF0, 0x65, 0x02, 0x2E, 0xF0, 0x5F, 0x02, 0x2D, 0xF0, - .byte 0x59, 0x02, 0x2C, 0xF0, 0x53, 0x02, 0x2B, 0xF0, 0x4D, 0x02, 0x2B, 0xF0, 0x46, 0x02, 0x2A, 0xF0, - .byte 0x40, 0x02, 0x29, 0xF0, 0x3A, 0x02, 0x28, 0xF0, 0x34, 0x02, 0x27, 0xF0, 0x2D, 0x02, 0x26, 0xF0, - .byte 0x27, 0x02, 0x25, 0xF0, 0x21, 0x02, 0x24, 0xF0, 0x1B, 0x02, 0x24, 0xF0, 0x15, 0x02, 0x23, 0xF0, - .byte 0x0E, 0x02, 0x22, 0xF0, 0x08, 0x02, 0x21, 0xF0, 0x02, 0x02, 0x20, 0xF0, 0xFC, 0x01, 0x20, 0xF0, - .byte 0xF5, 0x01, 0x1F, 0xF0, 0xEF, 0x01, 0x1E, 0xF0, 0xE9, 0x01, 0x1D, 0xF0, 0xE3, 0x01, 0x1D, 0xF0, - .byte 0xDC, 0x01, 0x1C, 0xF0, 0xD6, 0x01, 0x1B, 0xF0, 0xD0, 0x01, 0x1A, 0xF0, 0xCA, 0x01, 0x1A, 0xF0, - .byte 0xC3, 0x01, 0x19, 0xF0, 0xBD, 0x01, 0x18, 0xF0, 0xB7, 0x01, 0x18, 0xF0, 0xB1, 0x01, 0x17, 0xF0, - .byte 0xAA, 0x01, 0x16, 0xF0, 0xA4, 0x01, 0x16, 0xF0, 0x9E, 0x01, 0x15, 0xF0, 0x98, 0x01, 0x14, 0xF0, - .byte 0x91, 0x01, 0x14, 0xF0, 0x8B, 0x01, 0x13, 0xF0, 0x85, 0x01, 0x13, 0xF0, 0x7F, 0x01, 0x12, 0xF0, - .byte 0x78, 0x01, 0x11, 0xF0, 0x72, 0x01, 0x11, 0xF0, 0x6C, 0x01, 0x10, 0xF0, 0x66, 0x01, 0x10, 0xF0, - .byte 0x5F, 0x01, 0x0F, 0xF0, 0x59, 0x01, 0x0F, 0xF0, 0x53, 0x01, 0x0E, 0xF0, 0x4D, 0x01, 0x0E, 0xF0, - .byte 0x46, 0x01, 0x0D, 0xF0, 0x40, 0x01, 0x0D, 0xF0, 0x3A, 0x01, 0x0C, 0xF0, 0x34, 0x01, 0x0C, 0xF0, - .byte 0x2D, 0x01, 0x0B, 0xF0, 0x27, 0x01, 0x0B, 0xF0, 0x21, 0x01, 0x0A, 0xF0, 0x1B, 0x01, 0x0A, 0xF0, - .byte 0x14, 0x01, 0x09, 0xF0, 0x0E, 0x01, 0x09, 0xF0, 0x08, 0x01, 0x08, 0xF0, 0x01, 0x01, 0x08, 0xF0, - .byte 0xFB, 0x00, 0x08, 0xF0, 0xF5, 0x00, 0x07, 0xF0, 0xEF, 0x00, 0x07, 0xF0, 0xE8, 0x00, 0x07, 0xF0, - .byte 0xE2, 0x00, 0x06, 0xF0, 0xDC, 0x00, 0x06, 0xF0, 0xD6, 0x00, 0x06, 0xF0, 0xCF, 0x00, 0x05, 0xF0, - .byte 0xC9, 0x00, 0x05, 0xF0, 0xC3, 0x00, 0x05, 0xF0, 0xBC, 0x00, 0x04, 0xF0, 0xB6, 0x00, 0x04, 0xF0, - .byte 0xB0, 0x00, 0x04, 0xF0, 0xAA, 0x00, 0x04, 0xF0, 0xA3, 0x00, 0x03, 0xF0, 0x9D, 0x00, 0x03, 0xF0, - .byte 0x97, 0x00, 0x03, 0xF0, 0x90, 0x00, 0x03, 0xF0, 0x8A, 0x00, 0x02, 0xF0, 0x84, 0x00, 0x02, 0xF0, - .byte 0x7E, 0x00, 0x02, 0xF0, 0x77, 0x00, 0x02, 0xF0, 0x71, 0x00, 0x02, 0xF0, 0x6B, 0x00, 0x01, 0xF0, - .byte 0x65, 0x00, 0x01, 0xF0, 0x5E, 0x00, 0x01, 0xF0, 0x58, 0x00, 0x01, 0xF0, 0x52, 0x00, 0x01, 0xF0, - .byte 0x4B, 0x00, 0x01, 0xF0, 0x45, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, 0xF0, 0x39, 0x00, 0x00, 0xF0, - .byte 0x32, 0x00, 0x00, 0xF0, 0x2C, 0x00, 0x00, 0xF0, 0x26, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xF0, - .byte 0x19, 0x00, 0x00, 0xF0, 0x13, 0x00, 0x00, 0xF0, 0x0D, 0x00, 0x00, 0xF0, 0x06, 0x00, 0x00, 0xF0, - .byte 0x00, 0x00, 0x00, 0xF0, 0xFA, 0xFF, 0x00, 0xF0, 0xF3, 0xFF, 0x00, 0xF0, 0xED, 0xFF, 0x00, 0xF0, - .byte 0xE7, 0xFF, 0x00, 0xF0, 0xE1, 0xFF, 0x00, 0xF0, 0xDA, 0xFF, 0x00, 0xF0, 0xD4, 0xFF, 0x00, 0xF0, - .byte 0xCE, 0xFF, 0x00, 0xF0, 0xC7, 0xFF, 0x00, 0xF0, 0xC1, 0xFF, 0x00, 0xF0, 0xBB, 0xFF, 0x01, 0xF0, - .byte 0xB5, 0xFF, 0x01, 0xF0, 0xAE, 0xFF, 0x01, 0xF0, 0xA8, 0xFF, 0x01, 0xF0, 0xA2, 0xFF, 0x01, 0xF0, - .byte 0x9B, 0xFF, 0x01, 0xF0, 0x95, 0xFF, 0x01, 0xF0, 0x8F, 0xFF, 0x02, 0xF0, 0x89, 0xFF, 0x02, 0xF0, - .byte 0x82, 0xFF, 0x02, 0xF0, 0x7C, 0xFF, 0x02, 0xF0, 0x76, 0xFF, 0x02, 0xF0, 0x70, 0xFF, 0x03, 0xF0, - .byte 0x69, 0xFF, 0x03, 0xF0, 0x63, 0xFF, 0x03, 0xF0, 0x5D, 0xFF, 0x03, 0xF0, 0x56, 0xFF, 0x04, 0xF0, - .byte 0x50, 0xFF, 0x04, 0xF0, 0x4A, 0xFF, 0x04, 0xF0, 0x44, 0xFF, 0x04, 0xF0, 0x3D, 0xFF, 0x05, 0xF0, - .byte 0x37, 0xFF, 0x05, 0xF0, 0x31, 0xFF, 0x05, 0xF0, 0x2A, 0xFF, 0x06, 0xF0, 0x24, 0xFF, 0x06, 0xF0, - .byte 0x1E, 0xFF, 0x06, 0xF0, 0x18, 0xFF, 0x07, 0xF0, 0x11, 0xFF, 0x07, 0xF0, 0x0B, 0xFF, 0x07, 0xF0, - .byte 0x05, 0xFF, 0x08, 0xF0, 0xFF, 0xFE, 0x08, 0xF0, 0xF8, 0xFE, 0x08, 0xF0, 0xF2, 0xFE, 0x09, 0xF0, - .byte 0xEC, 0xFE, 0x09, 0xF0, 0xE5, 0xFE, 0x0A, 0xF0, 0xDF, 0xFE, 0x0A, 0xF0, 0xD9, 0xFE, 0x0B, 0xF0, - .byte 0xD3, 0xFE, 0x0B, 0xF0, 0xCC, 0xFE, 0x0C, 0xF0, 0xC6, 0xFE, 0x0C, 0xF0, 0xC0, 0xFE, 0x0D, 0xF0, - .byte 0xBA, 0xFE, 0x0D, 0xF0, 0xB3, 0xFE, 0x0E, 0xF0, 0xAD, 0xFE, 0x0E, 0xF0, 0xA7, 0xFE, 0x0F, 0xF0, - .byte 0xA1, 0xFE, 0x0F, 0xF0, 0x9A, 0xFE, 0x10, 0xF0, 0x94, 0xFE, 0x10, 0xF0, 0x8E, 0xFE, 0x11, 0xF0, - .byte 0x88, 0xFE, 0x11, 0xF0, 0x81, 0xFE, 0x12, 0xF0, 0x7B, 0xFE, 0x13, 0xF0, 0x75, 0xFE, 0x13, 0xF0, - .byte 0x6F, 0xFE, 0x14, 0xF0, 0x68, 0xFE, 0x14, 0xF0, 0x62, 0xFE, 0x15, 0xF0, 0x5C, 0xFE, 0x16, 0xF0, - .byte 0x56, 0xFE, 0x16, 0xF0, 0x4F, 0xFE, 0x17, 0xF0, 0x49, 0xFE, 0x18, 0xF0, 0x43, 0xFE, 0x18, 0xF0, - .byte 0x3D, 0xFE, 0x19, 0xF0, 0x36, 0xFE, 0x1A, 0xF0, 0x30, 0xFE, 0x1A, 0xF0, 0x2A, 0xFE, 0x1B, 0xF0, - .byte 0x24, 0xFE, 0x1C, 0xF0, 0x1D, 0xFE, 0x1D, 0xF0, 0x17, 0xFE, 0x1D, 0xF0, 0x11, 0xFE, 0x1E, 0xF0, - .byte 0x0B, 0xFE, 0x1F, 0xF0, 0x04, 0xFE, 0x20, 0xF0, 0xFE, 0xFD, 0x20, 0xF0, 0xF8, 0xFD, 0x21, 0xF0, - .byte 0xF2, 0xFD, 0x22, 0xF0, 0xEB, 0xFD, 0x23, 0xF0, 0xE5, 0xFD, 0x24, 0xF0, 0xDF, 0xFD, 0x24, 0xF0, - .byte 0xD9, 0xFD, 0x25, 0xF0, 0xD3, 0xFD, 0x26, 0xF0, 0xCC, 0xFD, 0x27, 0xF0, 0xC6, 0xFD, 0x28, 0xF0, - .byte 0xC0, 0xFD, 0x29, 0xF0, 0xBA, 0xFD, 0x2A, 0xF0, 0xB3, 0xFD, 0x2B, 0xF0, 0xAD, 0xFD, 0x2B, 0xF0, - .byte 0xA7, 0xFD, 0x2C, 0xF0, 0xA1, 0xFD, 0x2D, 0xF0, 0x9B, 0xFD, 0x2E, 0xF0, 0x94, 0xFD, 0x2F, 0xF0, - .byte 0x8E, 0xFD, 0x30, 0xF0, 0x88, 0xFD, 0x31, 0xF0, 0x82, 0xFD, 0x32, 0xF0, 0x7C, 0xFD, 0x33, 0xF0, - .byte 0x75, 0xFD, 0x34, 0xF0, 0x6F, 0xFD, 0x35, 0xF0, 0x69, 0xFD, 0x36, 0xF0, 0x63, 0xFD, 0x37, 0xF0, - .byte 0x5D, 0xFD, 0x38, 0xF0, 0x56, 0xFD, 0x39, 0xF0, 0x50, 0xFD, 0x3A, 0xF0, 0x4A, 0xFD, 0x3B, 0xF0, - .byte 0x44, 0xFD, 0x3C, 0xF0, 0x3E, 0xFD, 0x3D, 0xF0, 0x37, 0xFD, 0x3E, 0xF0, 0x31, 0xFD, 0x40, 0xF0, - .byte 0x2B, 0xFD, 0x41, 0xF0, 0x25, 0xFD, 0x42, 0xF0, 0x1F, 0xFD, 0x43, 0xF0, 0x18, 0xFD, 0x44, 0xF0, - .byte 0x12, 0xFD, 0x45, 0xF0, 0x0C, 0xFD, 0x46, 0xF0, 0x06, 0xFD, 0x48, 0xF0, 0x00, 0xFD, 0x49, 0xF0, - .byte 0xFA, 0xFC, 0x4A, 0xF0, 0xF3, 0xFC, 0x4B, 0xF0, 0xED, 0xFC, 0x4C, 0xF0, 0xE7, 0xFC, 0x4D, 0xF0, - .byte 0xE1, 0xFC, 0x4F, 0xF0, 0xDB, 0xFC, 0x50, 0xF0, 0xD5, 0xFC, 0x51, 0xF0, 0xCE, 0xFC, 0x52, 0xF0, - .byte 0xC8, 0xFC, 0x54, 0xF0, 0xC2, 0xFC, 0x55, 0xF0, 0xBC, 0xFC, 0x56, 0xF0, 0xB6, 0xFC, 0x58, 0xF0, - .byte 0xB0, 0xFC, 0x59, 0xF0, 0xAA, 0xFC, 0x5A, 0xF0, 0xA3, 0xFC, 0x5B, 0xF0, 0x9D, 0xFC, 0x5D, 0xF0, - .byte 0x97, 0xFC, 0x5E, 0xF0, 0x91, 0xFC, 0x5F, 0xF0, 0x8B, 0xFC, 0x61, 0xF0, 0x85, 0xFC, 0x62, 0xF0, - .byte 0x7F, 0xFC, 0x64, 0xF0, 0x78, 0xFC, 0x65, 0xF0, 0x72, 0xFC, 0x66, 0xF0, 0x6C, 0xFC, 0x68, 0xF0, - .byte 0x66, 0xFC, 0x69, 0xF0, 0x60, 0xFC, 0x6B, 0xF0, 0x5A, 0xFC, 0x6C, 0xF0, 0x54, 0xFC, 0x6D, 0xF0, - .byte 0x4E, 0xFC, 0x6F, 0xF0, 0x47, 0xFC, 0x70, 0xF0, 0x41, 0xFC, 0x72, 0xF0, 0x3B, 0xFC, 0x73, 0xF0, - .byte 0x35, 0xFC, 0x75, 0xF0, 0x2F, 0xFC, 0x76, 0xF0, 0x29, 0xFC, 0x78, 0xF0, 0x23, 0xFC, 0x79, 0xF0, - .byte 0x1D, 0xFC, 0x7B, 0xF0, 0x17, 0xFC, 0x7C, 0xF0, 0x11, 0xFC, 0x7E, 0xF0, 0x0A, 0xFC, 0x7F, 0xF0, - .byte 0x04, 0xFC, 0x81, 0xF0, 0xFE, 0xFB, 0x83, 0xF0, 0xF8, 0xFB, 0x84, 0xF0, 0xF2, 0xFB, 0x86, 0xF0, - .byte 0xEC, 0xFB, 0x87, 0xF0, 0xE6, 0xFB, 0x89, 0xF0, 0xE0, 0xFB, 0x8A, 0xF0, 0xDA, 0xFB, 0x8C, 0xF0, - .byte 0xD4, 0xFB, 0x8E, 0xF0, 0xCE, 0xFB, 0x8F, 0xF0, 0xC8, 0xFB, 0x91, 0xF0, 0xC2, 0xFB, 0x93, 0xF0, - .byte 0xBC, 0xFB, 0x94, 0xF0, 0xB5, 0xFB, 0x96, 0xF0, 0xAF, 0xFB, 0x98, 0xF0, 0xA9, 0xFB, 0x99, 0xF0, - .byte 0xA3, 0xFB, 0x9B, 0xF0, 0x9D, 0xFB, 0x9D, 0xF0, 0x97, 0xFB, 0x9F, 0xF0, 0x91, 0xFB, 0xA0, 0xF0, - .byte 0x8B, 0xFB, 0xA2, 0xF0, 0x85, 0xFB, 0xA4, 0xF0, 0x7F, 0xFB, 0xA6, 0xF0, 0x79, 0xFB, 0xA7, 0xF0, - .byte 0x73, 0xFB, 0xA9, 0xF0, 0x6D, 0xFB, 0xAB, 0xF0, 0x67, 0xFB, 0xAD, 0xF0, 0x61, 0xFB, 0xAF, 0xF0, - .byte 0x5B, 0xFB, 0xB0, 0xF0, 0x55, 0xFB, 0xB2, 0xF0, 0x4F, 0xFB, 0xB4, 0xF0, 0x49, 0xFB, 0xB6, 0xF0, - .byte 0x43, 0xFB, 0xB8, 0xF0, 0x3D, 0xFB, 0xBA, 0xF0, 0x37, 0xFB, 0xBB, 0xF0, 0x31, 0xFB, 0xBD, 0xF0, - .byte 0x2B, 0xFB, 0xBF, 0xF0, 0x25, 0xFB, 0xC1, 0xF0, 0x1F, 0xFB, 0xC3, 0xF0, 0x19, 0xFB, 0xC5, 0xF0, - .byte 0x13, 0xFB, 0xC7, 0xF0, 0x0D, 0xFB, 0xC9, 0xF0, 0x07, 0xFB, 0xCB, 0xF0, 0x01, 0xFB, 0xCD, 0xF0, - .byte 0xFB, 0xFA, 0xCF, 0xF0, 0xF5, 0xFA, 0xD1, 0xF0, 0xEF, 0xFA, 0xD3, 0xF0, 0xE9, 0xFA, 0xD5, 0xF0, - .byte 0xE3, 0xFA, 0xD7, 0xF0, 0xDD, 0xFA, 0xD9, 0xF0, 0xD7, 0xFA, 0xDB, 0xF0, 0xD1, 0xFA, 0xDD, 0xF0, - .byte 0xCC, 0xFA, 0xDF, 0xF0, 0xC6, 0xFA, 0xE1, 0xF0, 0xC0, 0xFA, 0xE3, 0xF0, 0xBA, 0xFA, 0xE5, 0xF0, - .byte 0xB4, 0xFA, 0xE7, 0xF0, 0xAE, 0xFA, 0xE9, 0xF0, 0xA8, 0xFA, 0xEB, 0xF0, 0xA2, 0xFA, 0xED, 0xF0, - .byte 0x9C, 0xFA, 0xEF, 0xF0, 0x96, 0xFA, 0xF2, 0xF0, 0x90, 0xFA, 0xF4, 0xF0, 0x8A, 0xFA, 0xF6, 0xF0, - .byte 0x84, 0xFA, 0xF8, 0xF0, 0x7F, 0xFA, 0xFA, 0xF0, 0x79, 0xFA, 0xFC, 0xF0, 0x73, 0xFA, 0xFE, 0xF0, - .byte 0x6D, 0xFA, 0x01, 0xF1, 0x67, 0xFA, 0x03, 0xF1, 0x61, 0xFA, 0x05, 0xF1, 0x5B, 0xFA, 0x07, 0xF1, - .byte 0x55, 0xFA, 0x09, 0xF1, 0x4F, 0xFA, 0x0C, 0xF1, 0x4A, 0xFA, 0x0E, 0xF1, 0x44, 0xFA, 0x10, 0xF1, - .byte 0x3E, 0xFA, 0x12, 0xF1, 0x38, 0xFA, 0x15, 0xF1, 0x32, 0xFA, 0x17, 0xF1, 0x2C, 0xFA, 0x19, 0xF1, - .byte 0x26, 0xFA, 0x1C, 0xF1, 0x21, 0xFA, 0x1E, 0xF1, 0x1B, 0xFA, 0x20, 0xF1, 0x15, 0xFA, 0x23, 0xF1, - .byte 0x0F, 0xFA, 0x25, 0xF1, 0x09, 0xFA, 0x27, 0xF1, 0x03, 0xFA, 0x2A, 0xF1, 0xFE, 0xF9, 0x2C, 0xF1, - .byte 0xF8, 0xF9, 0x2E, 0xF1, 0xF2, 0xF9, 0x31, 0xF1, 0xEC, 0xF9, 0x33, 0xF1, 0xE6, 0xF9, 0x35, 0xF1, - .byte 0xE1, 0xF9, 0x38, 0xF1, 0xDB, 0xF9, 0x3A, 0xF1, 0xD5, 0xF9, 0x3D, 0xF1, 0xCF, 0xF9, 0x3F, 0xF1, - .byte 0xC9, 0xF9, 0x41, 0xF1, 0xC4, 0xF9, 0x44, 0xF1, 0xBE, 0xF9, 0x46, 0xF1, 0xB8, 0xF9, 0x49, 0xF1, - .byte 0xB2, 0xF9, 0x4B, 0xF1, 0xAC, 0xF9, 0x4E, 0xF1, 0xA7, 0xF9, 0x50, 0xF1, 0xA1, 0xF9, 0x53, 0xF1, - .byte 0x9B, 0xF9, 0x55, 0xF1, 0x95, 0xF9, 0x58, 0xF1, 0x90, 0xF9, 0x5A, 0xF1, 0x8A, 0xF9, 0x5D, 0xF1, - .byte 0x84, 0xF9, 0x5F, 0xF1, 0x7E, 0xF9, 0x62, 0xF1, 0x79, 0xF9, 0x65, 0xF1, 0x73, 0xF9, 0x67, 0xF1, - .byte 0x6D, 0xF9, 0x6A, 0xF1, 0x67, 0xF9, 0x6C, 0xF1, 0x62, 0xF9, 0x6F, 0xF1, 0x5C, 0xF9, 0x71, 0xF1, - .byte 0x56, 0xF9, 0x74, 0xF1, 0x51, 0xF9, 0x77, 0xF1, 0x4B, 0xF9, 0x79, 0xF1, 0x45, 0xF9, 0x7C, 0xF1, - .byte 0x3F, 0xF9, 0x7F, 0xF1, 0x3A, 0xF9, 0x81, 0xF1, 0x34, 0xF9, 0x84, 0xF1, 0x2E, 0xF9, 0x87, 0xF1, - .byte 0x29, 0xF9, 0x89, 0xF1, 0x23, 0xF9, 0x8C, 0xF1, 0x1D, 0xF9, 0x8F, 0xF1, 0x18, 0xF9, 0x91, 0xF1, - .byte 0x12, 0xF9, 0x94, 0xF1, 0x0C, 0xF9, 0x97, 0xF1, 0x07, 0xF9, 0x9A, 0xF1, 0x01, 0xF9, 0x9C, 0xF1, - .byte 0xFB, 0xF8, 0x9F, 0xF1, 0xF6, 0xF8, 0xA2, 0xF1, 0xF0, 0xF8, 0xA5, 0xF1, 0xEB, 0xF8, 0xA7, 0xF1, - .byte 0xE5, 0xF8, 0xAA, 0xF1, 0xDF, 0xF8, 0xAD, 0xF1, 0xDA, 0xF8, 0xB0, 0xF1, 0xD4, 0xF8, 0xB3, 0xF1, - .byte 0xCE, 0xF8, 0xB5, 0xF1, 0xC9, 0xF8, 0xB8, 0xF1, 0xC3, 0xF8, 0xBB, 0xF1, 0xBE, 0xF8, 0xBE, 0xF1, - .byte 0xB8, 0xF8, 0xC1, 0xF1, 0xB2, 0xF8, 0xC4, 0xF1, 0xAD, 0xF8, 0xC6, 0xF1, 0xA7, 0xF8, 0xC9, 0xF1, - .byte 0xA2, 0xF8, 0xCC, 0xF1, 0x9C, 0xF8, 0xCF, 0xF1, 0x96, 0xF8, 0xD2, 0xF1, 0x91, 0xF8, 0xD5, 0xF1, - .byte 0x8B, 0xF8, 0xD8, 0xF1, 0x86, 0xF8, 0xDB, 0xF1, 0x80, 0xF8, 0xDE, 0xF1, 0x7B, 0xF8, 0xE1, 0xF1, - .byte 0x75, 0xF8, 0xE4, 0xF1, 0x70, 0xF8, 0xE7, 0xF1, 0x6A, 0xF8, 0xEA, 0xF1, 0x65, 0xF8, 0xED, 0xF1, - .byte 0x5F, 0xF8, 0xF0, 0xF1, 0x5A, 0xF8, 0xF3, 0xF1, 0x54, 0xF8, 0xF6, 0xF1, 0x4E, 0xF8, 0xF9, 0xF1, - .byte 0x49, 0xF8, 0xFC, 0xF1, 0x43, 0xF8, 0xFF, 0xF1, 0x3E, 0xF8, 0x02, 0xF2, 0x38, 0xF8, 0x05, 0xF2, - .byte 0x33, 0xF8, 0x08, 0xF2, 0x2E, 0xF8, 0x0B, 0xF2, 0x28, 0xF8, 0x0E, 0xF2, 0x23, 0xF8, 0x11, 0xF2, - .byte 0x1D, 0xF8, 0x14, 0xF2, 0x18, 0xF8, 0x17, 0xF2, 0x12, 0xF8, 0x1A, 0xF2, 0x0D, 0xF8, 0x1D, 0xF2, - .byte 0x07, 0xF8, 0x21, 0xF2, 0x02, 0xF8, 0x24, 0xF2, 0xFC, 0xF7, 0x27, 0xF2, 0xF7, 0xF7, 0x2A, 0xF2, - .byte 0xF2, 0xF7, 0x2D, 0xF2, 0xEC, 0xF7, 0x30, 0xF2, 0xE7, 0xF7, 0x34, 0xF2, 0xE1, 0xF7, 0x37, 0xF2, - .byte 0xDC, 0xF7, 0x3A, 0xF2, 0xD6, 0xF7, 0x3D, 0xF2, 0xD1, 0xF7, 0x40, 0xF2, 0xCC, 0xF7, 0x44, 0xF2, - .byte 0xC6, 0xF7, 0x47, 0xF2, 0xC1, 0xF7, 0x4A, 0xF2, 0xBB, 0xF7, 0x4D, 0xF2, 0xB6, 0xF7, 0x50, 0xF2, - .byte 0xB1, 0xF7, 0x54, 0xF2, 0xAB, 0xF7, 0x57, 0xF2, 0xA6, 0xF7, 0x5A, 0xF2, 0xA1, 0xF7, 0x5E, 0xF2, - .byte 0x9B, 0xF7, 0x61, 0xF2, 0x96, 0xF7, 0x64, 0xF2, 0x91, 0xF7, 0x67, 0xF2, 0x8B, 0xF7, 0x6B, 0xF2, - .byte 0x86, 0xF7, 0x6E, 0xF2, 0x81, 0xF7, 0x71, 0xF2, 0x7B, 0xF7, 0x75, 0xF2, 0x76, 0xF7, 0x78, 0xF2, - .byte 0x71, 0xF7, 0x7B, 0xF2, 0x6B, 0xF7, 0x7F, 0xF2, 0x66, 0xF7, 0x82, 0xF2, 0x61, 0xF7, 0x86, 0xF2, - .byte 0x5B, 0xF7, 0x89, 0xF2, 0x56, 0xF7, 0x8C, 0xF2, 0x51, 0xF7, 0x90, 0xF2, 0x4C, 0xF7, 0x93, 0xF2, - .byte 0x46, 0xF7, 0x97, 0xF2, 0x41, 0xF7, 0x9A, 0xF2, 0x3C, 0xF7, 0x9E, 0xF2, 0x37, 0xF7, 0xA1, 0xF2, - .byte 0x31, 0xF7, 0xA4, 0xF2, 0x2C, 0xF7, 0xA8, 0xF2, 0x27, 0xF7, 0xAB, 0xF2, 0x22, 0xF7, 0xAF, 0xF2, - .byte 0x1C, 0xF7, 0xB2, 0xF2, 0x17, 0xF7, 0xB6, 0xF2, 0x12, 0xF7, 0xB9, 0xF2, 0x0D, 0xF7, 0xBD, 0xF2, - .byte 0x08, 0xF7, 0xC0, 0xF2, 0x02, 0xF7, 0xC4, 0xF2, 0xFD, 0xF6, 0xC7, 0xF2, 0xF8, 0xF6, 0xCB, 0xF2, - .byte 0xF3, 0xF6, 0xCE, 0xF2, 0xEE, 0xF6, 0xD2, 0xF2, 0xE8, 0xF6, 0xD6, 0xF2, 0xE3, 0xF6, 0xD9, 0xF2, - .byte 0xDE, 0xF6, 0xDD, 0xF2, 0xD9, 0xF6, 0xE0, 0xF2, 0xD4, 0xF6, 0xE4, 0xF2, 0xCF, 0xF6, 0xE8, 0xF2, - .byte 0xC9, 0xF6, 0xEB, 0xF2, 0xC4, 0xF6, 0xEF, 0xF2, 0xBF, 0xF6, 0xF2, 0xF2, 0xBA, 0xF6, 0xF6, 0xF2, - .byte 0xB5, 0xF6, 0xFA, 0xF2, 0xB0, 0xF6, 0xFD, 0xF2, 0xAB, 0xF6, 0x01, 0xF3, 0xA6, 0xF6, 0x05, 0xF3, - .byte 0xA1, 0xF6, 0x08, 0xF3, 0x9B, 0xF6, 0x0C, 0xF3, 0x96, 0xF6, 0x10, 0xF3, 0x91, 0xF6, 0x13, 0xF3, - .byte 0x8C, 0xF6, 0x17, 0xF3, 0x87, 0xF6, 0x1B, 0xF3, 0x82, 0xF6, 0x1F, 0xF3, 0x7D, 0xF6, 0x22, 0xF3, - .byte 0x78, 0xF6, 0x26, 0xF3, 0x73, 0xF6, 0x2A, 0xF3, 0x6E, 0xF6, 0x2E, 0xF3, 0x69, 0xF6, 0x31, 0xF3, - .byte 0x64, 0xF6, 0x35, 0xF3, 0x5F, 0xF6, 0x39, 0xF3, 0x5A, 0xF6, 0x3D, 0xF3, 0x55, 0xF6, 0x40, 0xF3, - .byte 0x50, 0xF6, 0x44, 0xF3, 0x4B, 0xF6, 0x48, 0xF3, 0x46, 0xF6, 0x4C, 0xF3, 0x41, 0xF6, 0x50, 0xF3, - .byte 0x3C, 0xF6, 0x54, 0xF3, 0x37, 0xF6, 0x57, 0xF3, 0x32, 0xF6, 0x5B, 0xF3, 0x2D, 0xF6, 0x5F, 0xF3, - .byte 0x28, 0xF6, 0x63, 0xF3, 0x23, 0xF6, 0x67, 0xF3, 0x1E, 0xF6, 0x6B, 0xF3, 0x19, 0xF6, 0x6F, 0xF3, - .byte 0x14, 0xF6, 0x72, 0xF3, 0x0F, 0xF6, 0x76, 0xF3, 0x0A, 0xF6, 0x7A, 0xF3, 0x05, 0xF6, 0x7E, 0xF3, - .byte 0x01, 0xF6, 0x82, 0xF3, 0xFC, 0xF5, 0x86, 0xF3, 0xF7, 0xF5, 0x8A, 0xF3, 0xF2, 0xF5, 0x8E, 0xF3, - .byte 0xED, 0xF5, 0x92, 0xF3, 0xE8, 0xF5, 0x96, 0xF3, 0xE3, 0xF5, 0x9A, 0xF3, 0xDE, 0xF5, 0x9E, 0xF3, - .byte 0xDA, 0xF5, 0xA2, 0xF3, 0xD5, 0xF5, 0xA6, 0xF3, 0xD0, 0xF5, 0xAA, 0xF3, 0xCB, 0xF5, 0xAE, 0xF3, - .byte 0xC6, 0xF5, 0xB2, 0xF3, 0xC1, 0xF5, 0xB6, 0xF3, 0xBC, 0xF5, 0xBA, 0xF3, 0xB8, 0xF5, 0xBE, 0xF3, - .byte 0xB3, 0xF5, 0xC2, 0xF3, 0xAE, 0xF5, 0xC6, 0xF3, 0xA9, 0xF5, 0xCA, 0xF3, 0xA4, 0xF5, 0xCE, 0xF3, - .byte 0xA0, 0xF5, 0xD2, 0xF3, 0x9B, 0xF5, 0xD6, 0xF3, 0x96, 0xF5, 0xDA, 0xF3, 0x91, 0xF5, 0xDE, 0xF3, - .byte 0x8D, 0xF5, 0xE2, 0xF3, 0x88, 0xF5, 0xE7, 0xF3, 0x83, 0xF5, 0xEB, 0xF3, 0x7E, 0xF5, 0xEF, 0xF3, - .byte 0x7A, 0xF5, 0xF3, 0xF3, 0x75, 0xF5, 0xF7, 0xF3, 0x70, 0xF5, 0xFB, 0xF3, 0x6B, 0xF5, 0xFF, 0xF3, - .byte 0x67, 0xF5, 0x04, 0xF4, 0x62, 0xF5, 0x08, 0xF4, 0x5D, 0xF5, 0x0C, 0xF4, 0x59, 0xF5, 0x10, 0xF4, - .byte 0x54, 0xF5, 0x14, 0xF4, 0x4F, 0xF5, 0x18, 0xF4, 0x4B, 0xF5, 0x1D, 0xF4, 0x46, 0xF5, 0x21, 0xF4, - .byte 0x41, 0xF5, 0x25, 0xF4, 0x3D, 0xF5, 0x29, 0xF4, 0x38, 0xF5, 0x2E, 0xF4, 0x33, 0xF5, 0x32, 0xF4, - .byte 0x2F, 0xF5, 0x36, 0xF4, 0x2A, 0xF5, 0x3A, 0xF4, 0x25, 0xF5, 0x3F, 0xF4, 0x21, 0xF5, 0x43, 0xF4, - .byte 0x1C, 0xF5, 0x47, 0xF4, 0x18, 0xF5, 0x4B, 0xF4, 0x13, 0xF5, 0x50, 0xF4, 0x0E, 0xF5, 0x54, 0xF4, - .byte 0x0A, 0xF5, 0x58, 0xF4, 0x05, 0xF5, 0x5D, 0xF4, 0x01, 0xF5, 0x61, 0xF4, 0xFC, 0xF4, 0x65, 0xF4, - .byte 0xF8, 0xF4, 0x69, 0xF4, 0xF3, 0xF4, 0x6E, 0xF4, 0xEF, 0xF4, 0x72, 0xF4, 0xEA, 0xF4, 0x77, 0xF4, - .byte 0xE5, 0xF4, 0x7B, 0xF4, 0xE1, 0xF4, 0x7F, 0xF4, 0xDC, 0xF4, 0x84, 0xF4, 0xD8, 0xF4, 0x88, 0xF4, - .byte 0xD3, 0xF4, 0x8C, 0xF4, 0xCF, 0xF4, 0x91, 0xF4, 0xCA, 0xF4, 0x95, 0xF4, 0xC6, 0xF4, 0x9A, 0xF4, - .byte 0xC2, 0xF4, 0x9E, 0xF4, 0xBD, 0xF4, 0xA2, 0xF4, 0xB9, 0xF4, 0xA7, 0xF4, 0xB4, 0xF4, 0xAB, 0xF4, - .byte 0xB0, 0xF4, 0xB0, 0xF4, 0xAB, 0xF4, 0xB4, 0xF4, 0xA7, 0xF4, 0xB9, 0xF4, 0xA2, 0xF4, 0xBD, 0xF4, - .byte 0x9E, 0xF4, 0xC2, 0xF4, 0x9A, 0xF4, 0xC6, 0xF4, 0x95, 0xF4, 0xCA, 0xF4, 0x91, 0xF4, 0xCF, 0xF4, - .byte 0x8C, 0xF4, 0xD3, 0xF4, 0x88, 0xF4, 0xD8, 0xF4, 0x84, 0xF4, 0xDC, 0xF4, 0x7F, 0xF4, 0xE1, 0xF4, - .byte 0x7B, 0xF4, 0xE5, 0xF4, 0x77, 0xF4, 0xEA, 0xF4, 0x72, 0xF4, 0xEF, 0xF4, 0x6E, 0xF4, 0xF3, 0xF4, - .byte 0x69, 0xF4, 0xF8, 0xF4, 0x65, 0xF4, 0xFC, 0xF4, 0x61, 0xF4, 0x01, 0xF5, 0x5D, 0xF4, 0x05, 0xF5, - .byte 0x58, 0xF4, 0x0A, 0xF5, 0x54, 0xF4, 0x0E, 0xF5, 0x50, 0xF4, 0x13, 0xF5, 0x4B, 0xF4, 0x18, 0xF5, - .byte 0x47, 0xF4, 0x1C, 0xF5, 0x43, 0xF4, 0x21, 0xF5, 0x3F, 0xF4, 0x25, 0xF5, 0x3A, 0xF4, 0x2A, 0xF5, - .byte 0x36, 0xF4, 0x2F, 0xF5, 0x32, 0xF4, 0x33, 0xF5, 0x2E, 0xF4, 0x38, 0xF5, 0x29, 0xF4, 0x3D, 0xF5, - .byte 0x25, 0xF4, 0x41, 0xF5, 0x21, 0xF4, 0x46, 0xF5, 0x1D, 0xF4, 0x4B, 0xF5, 0x18, 0xF4, 0x4F, 0xF5, - .byte 0x14, 0xF4, 0x54, 0xF5, 0x10, 0xF4, 0x59, 0xF5, 0x0C, 0xF4, 0x5D, 0xF5, 0x08, 0xF4, 0x62, 0xF5, - .byte 0x04, 0xF4, 0x67, 0xF5, 0xFF, 0xF3, 0x6B, 0xF5, 0xFB, 0xF3, 0x70, 0xF5, 0xF7, 0xF3, 0x75, 0xF5, - .byte 0xF3, 0xF3, 0x7A, 0xF5, 0xEF, 0xF3, 0x7E, 0xF5, 0xEB, 0xF3, 0x83, 0xF5, 0xE7, 0xF3, 0x88, 0xF5, - .byte 0xE2, 0xF3, 0x8D, 0xF5, 0xDE, 0xF3, 0x91, 0xF5, 0xDA, 0xF3, 0x96, 0xF5, 0xD6, 0xF3, 0x9B, 0xF5, - .byte 0xD2, 0xF3, 0xA0, 0xF5, 0xCE, 0xF3, 0xA4, 0xF5, 0xCA, 0xF3, 0xA9, 0xF5, 0xC6, 0xF3, 0xAE, 0xF5, - .byte 0xC2, 0xF3, 0xB3, 0xF5, 0xBE, 0xF3, 0xB8, 0xF5, 0xBA, 0xF3, 0xBC, 0xF5, 0xB6, 0xF3, 0xC1, 0xF5, - .byte 0xB2, 0xF3, 0xC6, 0xF5, 0xAE, 0xF3, 0xCB, 0xF5, 0xAA, 0xF3, 0xD0, 0xF5, 0xA6, 0xF3, 0xD5, 0xF5, - .byte 0xA2, 0xF3, 0xDA, 0xF5, 0x9E, 0xF3, 0xDE, 0xF5, 0x9A, 0xF3, 0xE3, 0xF5, 0x96, 0xF3, 0xE8, 0xF5, - .byte 0x92, 0xF3, 0xED, 0xF5, 0x8E, 0xF3, 0xF2, 0xF5, 0x8A, 0xF3, 0xF7, 0xF5, 0x86, 0xF3, 0xFC, 0xF5, - .byte 0x82, 0xF3, 0x01, 0xF6, 0x7E, 0xF3, 0x05, 0xF6, 0x7A, 0xF3, 0x0A, 0xF6, 0x76, 0xF3, 0x0F, 0xF6, - .byte 0x72, 0xF3, 0x14, 0xF6, 0x6F, 0xF3, 0x19, 0xF6, 0x6B, 0xF3, 0x1E, 0xF6, 0x67, 0xF3, 0x23, 0xF6, - .byte 0x63, 0xF3, 0x28, 0xF6, 0x5F, 0xF3, 0x2D, 0xF6, 0x5B, 0xF3, 0x32, 0xF6, 0x57, 0xF3, 0x37, 0xF6, - .byte 0x54, 0xF3, 0x3C, 0xF6, 0x50, 0xF3, 0x41, 0xF6, 0x4C, 0xF3, 0x46, 0xF6, 0x48, 0xF3, 0x4B, 0xF6, - .byte 0x44, 0xF3, 0x50, 0xF6, 0x40, 0xF3, 0x55, 0xF6, 0x3D, 0xF3, 0x5A, 0xF6, 0x39, 0xF3, 0x5F, 0xF6, - .byte 0x35, 0xF3, 0x64, 0xF6, 0x31, 0xF3, 0x69, 0xF6, 0x2E, 0xF3, 0x6E, 0xF6, 0x2A, 0xF3, 0x73, 0xF6, - .byte 0x26, 0xF3, 0x78, 0xF6, 0x22, 0xF3, 0x7D, 0xF6, 0x1F, 0xF3, 0x82, 0xF6, 0x1B, 0xF3, 0x87, 0xF6, - .byte 0x17, 0xF3, 0x8C, 0xF6, 0x13, 0xF3, 0x91, 0xF6, 0x10, 0xF3, 0x96, 0xF6, 0x0C, 0xF3, 0x9B, 0xF6, - .byte 0x08, 0xF3, 0xA1, 0xF6, 0x05, 0xF3, 0xA6, 0xF6, 0x01, 0xF3, 0xAB, 0xF6, 0xFD, 0xF2, 0xB0, 0xF6, - .byte 0xFA, 0xF2, 0xB5, 0xF6, 0xF6, 0xF2, 0xBA, 0xF6, 0xF2, 0xF2, 0xBF, 0xF6, 0xEF, 0xF2, 0xC4, 0xF6, - .byte 0xEB, 0xF2, 0xC9, 0xF6, 0xE8, 0xF2, 0xCF, 0xF6, 0xE4, 0xF2, 0xD4, 0xF6, 0xE0, 0xF2, 0xD9, 0xF6, - .byte 0xDD, 0xF2, 0xDE, 0xF6, 0xD9, 0xF2, 0xE3, 0xF6, 0xD6, 0xF2, 0xE8, 0xF6, 0xD2, 0xF2, 0xEE, 0xF6, - .byte 0xCE, 0xF2, 0xF3, 0xF6, 0xCB, 0xF2, 0xF8, 0xF6, 0xC7, 0xF2, 0xFD, 0xF6, 0xC4, 0xF2, 0x02, 0xF7, - .byte 0xC0, 0xF2, 0x08, 0xF7, 0xBD, 0xF2, 0x0D, 0xF7, 0xB9, 0xF2, 0x12, 0xF7, 0xB6, 0xF2, 0x17, 0xF7, - .byte 0xB2, 0xF2, 0x1C, 0xF7, 0xAF, 0xF2, 0x22, 0xF7, 0xAB, 0xF2, 0x27, 0xF7, 0xA8, 0xF2, 0x2C, 0xF7, - .byte 0xA4, 0xF2, 0x31, 0xF7, 0xA1, 0xF2, 0x37, 0xF7, 0x9E, 0xF2, 0x3C, 0xF7, 0x9A, 0xF2, 0x41, 0xF7, - .byte 0x97, 0xF2, 0x46, 0xF7, 0x93, 0xF2, 0x4C, 0xF7, 0x90, 0xF2, 0x51, 0xF7, 0x8C, 0xF2, 0x56, 0xF7, - .byte 0x89, 0xF2, 0x5B, 0xF7, 0x86, 0xF2, 0x61, 0xF7, 0x82, 0xF2, 0x66, 0xF7, 0x7F, 0xF2, 0x6B, 0xF7, - .byte 0x7B, 0xF2, 0x71, 0xF7, 0x78, 0xF2, 0x76, 0xF7, 0x75, 0xF2, 0x7B, 0xF7, 0x71, 0xF2, 0x81, 0xF7, - .byte 0x6E, 0xF2, 0x86, 0xF7, 0x6B, 0xF2, 0x8B, 0xF7, 0x67, 0xF2, 0x91, 0xF7, 0x64, 0xF2, 0x96, 0xF7, - .byte 0x61, 0xF2, 0x9B, 0xF7, 0x5E, 0xF2, 0xA1, 0xF7, 0x5A, 0xF2, 0xA6, 0xF7, 0x57, 0xF2, 0xAB, 0xF7, - .byte 0x54, 0xF2, 0xB1, 0xF7, 0x50, 0xF2, 0xB6, 0xF7, 0x4D, 0xF2, 0xBB, 0xF7, 0x4A, 0xF2, 0xC1, 0xF7, - .byte 0x47, 0xF2, 0xC6, 0xF7, 0x44, 0xF2, 0xCC, 0xF7, 0x40, 0xF2, 0xD1, 0xF7, 0x3D, 0xF2, 0xD6, 0xF7, - .byte 0x3A, 0xF2, 0xDC, 0xF7, 0x37, 0xF2, 0xE1, 0xF7, 0x34, 0xF2, 0xE7, 0xF7, 0x30, 0xF2, 0xEC, 0xF7, - .byte 0x2D, 0xF2, 0xF2, 0xF7, 0x2A, 0xF2, 0xF7, 0xF7, 0x27, 0xF2, 0xFC, 0xF7, 0x24, 0xF2, 0x02, 0xF8, - .byte 0x21, 0xF2, 0x07, 0xF8, 0x1D, 0xF2, 0x0D, 0xF8, 0x1A, 0xF2, 0x12, 0xF8, 0x17, 0xF2, 0x18, 0xF8, - .byte 0x14, 0xF2, 0x1D, 0xF8, 0x11, 0xF2, 0x23, 0xF8, 0x0E, 0xF2, 0x28, 0xF8, 0x0B, 0xF2, 0x2E, 0xF8, - .byte 0x08, 0xF2, 0x33, 0xF8, 0x05, 0xF2, 0x38, 0xF8, 0x02, 0xF2, 0x3E, 0xF8, 0xFF, 0xF1, 0x43, 0xF8, - .byte 0xFC, 0xF1, 0x49, 0xF8, 0xF9, 0xF1, 0x4E, 0xF8, 0xF6, 0xF1, 0x54, 0xF8, 0xF3, 0xF1, 0x5A, 0xF8, - .byte 0xF0, 0xF1, 0x5F, 0xF8, 0xED, 0xF1, 0x65, 0xF8, 0xEA, 0xF1, 0x6A, 0xF8, 0xE7, 0xF1, 0x70, 0xF8, - .byte 0xE4, 0xF1, 0x75, 0xF8, 0xE1, 0xF1, 0x7B, 0xF8, 0xDE, 0xF1, 0x80, 0xF8, 0xDB, 0xF1, 0x86, 0xF8, - .byte 0xD8, 0xF1, 0x8B, 0xF8, 0xD5, 0xF1, 0x91, 0xF8, 0xD2, 0xF1, 0x96, 0xF8, 0xCF, 0xF1, 0x9C, 0xF8, - .byte 0xCC, 0xF1, 0xA2, 0xF8, 0xC9, 0xF1, 0xA7, 0xF8, 0xC6, 0xF1, 0xAD, 0xF8, 0xC4, 0xF1, 0xB2, 0xF8, - .byte 0xC1, 0xF1, 0xB8, 0xF8, 0xBE, 0xF1, 0xBE, 0xF8, 0xBB, 0xF1, 0xC3, 0xF8, 0xB8, 0xF1, 0xC9, 0xF8, - .byte 0xB5, 0xF1, 0xCE, 0xF8, 0xB3, 0xF1, 0xD4, 0xF8, 0xB0, 0xF1, 0xDA, 0xF8, 0xAD, 0xF1, 0xDF, 0xF8, - .byte 0xAA, 0xF1, 0xE5, 0xF8, 0xA7, 0xF1, 0xEB, 0xF8, 0xA5, 0xF1, 0xF0, 0xF8, 0xA2, 0xF1, 0xF6, 0xF8, - .byte 0x9F, 0xF1, 0xFB, 0xF8, 0x9C, 0xF1, 0x01, 0xF9, 0x9A, 0xF1, 0x07, 0xF9, 0x97, 0xF1, 0x0C, 0xF9, - .byte 0x94, 0xF1, 0x12, 0xF9, 0x91, 0xF1, 0x18, 0xF9, 0x8F, 0xF1, 0x1D, 0xF9, 0x8C, 0xF1, 0x23, 0xF9, - .byte 0x89, 0xF1, 0x29, 0xF9, 0x87, 0xF1, 0x2E, 0xF9, 0x84, 0xF1, 0x34, 0xF9, 0x81, 0xF1, 0x3A, 0xF9, - .byte 0x7F, 0xF1, 0x3F, 0xF9, 0x7C, 0xF1, 0x45, 0xF9, 0x79, 0xF1, 0x4B, 0xF9, 0x77, 0xF1, 0x51, 0xF9, - .byte 0x74, 0xF1, 0x56, 0xF9, 0x71, 0xF1, 0x5C, 0xF9, 0x6F, 0xF1, 0x62, 0xF9, 0x6C, 0xF1, 0x67, 0xF9, - .byte 0x6A, 0xF1, 0x6D, 0xF9, 0x67, 0xF1, 0x73, 0xF9, 0x65, 0xF1, 0x79, 0xF9, 0x62, 0xF1, 0x7E, 0xF9, - .byte 0x5F, 0xF1, 0x84, 0xF9, 0x5D, 0xF1, 0x8A, 0xF9, 0x5A, 0xF1, 0x90, 0xF9, 0x58, 0xF1, 0x95, 0xF9, - .byte 0x55, 0xF1, 0x9B, 0xF9, 0x53, 0xF1, 0xA1, 0xF9, 0x50, 0xF1, 0xA7, 0xF9, 0x4E, 0xF1, 0xAC, 0xF9, - .byte 0x4B, 0xF1, 0xB2, 0xF9, 0x49, 0xF1, 0xB8, 0xF9, 0x46, 0xF1, 0xBE, 0xF9, 0x44, 0xF1, 0xC4, 0xF9, - .byte 0x41, 0xF1, 0xC9, 0xF9, 0x3F, 0xF1, 0xCF, 0xF9, 0x3D, 0xF1, 0xD5, 0xF9, 0x3A, 0xF1, 0xDB, 0xF9, - .byte 0x38, 0xF1, 0xE1, 0xF9, 0x35, 0xF1, 0xE6, 0xF9, 0x33, 0xF1, 0xEC, 0xF9, 0x31, 0xF1, 0xF2, 0xF9, - .byte 0x2E, 0xF1, 0xF8, 0xF9, 0x2C, 0xF1, 0xFE, 0xF9, 0x2A, 0xF1, 0x03, 0xFA, 0x27, 0xF1, 0x09, 0xFA, - .byte 0x25, 0xF1, 0x0F, 0xFA, 0x23, 0xF1, 0x15, 0xFA, 0x20, 0xF1, 0x1B, 0xFA, 0x1E, 0xF1, 0x21, 0xFA, - .byte 0x1C, 0xF1, 0x26, 0xFA, 0x19, 0xF1, 0x2C, 0xFA, 0x17, 0xF1, 0x32, 0xFA, 0x15, 0xF1, 0x38, 0xFA, - .byte 0x12, 0xF1, 0x3E, 0xFA, 0x10, 0xF1, 0x44, 0xFA, 0x0E, 0xF1, 0x4A, 0xFA, 0x0C, 0xF1, 0x4F, 0xFA, - .byte 0x09, 0xF1, 0x55, 0xFA, 0x07, 0xF1, 0x5B, 0xFA, 0x05, 0xF1, 0x61, 0xFA, 0x03, 0xF1, 0x67, 0xFA, - .byte 0x01, 0xF1, 0x6D, 0xFA, 0xFE, 0xF0, 0x73, 0xFA, 0xFC, 0xF0, 0x79, 0xFA, 0xFA, 0xF0, 0x7F, 0xFA, - .byte 0xF8, 0xF0, 0x84, 0xFA, 0xF6, 0xF0, 0x8A, 0xFA, 0xF4, 0xF0, 0x90, 0xFA, 0xF2, 0xF0, 0x96, 0xFA, - .byte 0xEF, 0xF0, 0x9C, 0xFA, 0xED, 0xF0, 0xA2, 0xFA, 0xEB, 0xF0, 0xA8, 0xFA, 0xE9, 0xF0, 0xAE, 0xFA, - .byte 0xE7, 0xF0, 0xB4, 0xFA, 0xE5, 0xF0, 0xBA, 0xFA, 0xE3, 0xF0, 0xC0, 0xFA, 0xE1, 0xF0, 0xC6, 0xFA, - .byte 0xDF, 0xF0, 0xCC, 0xFA, 0xDD, 0xF0, 0xD1, 0xFA, 0xDB, 0xF0, 0xD7, 0xFA, 0xD9, 0xF0, 0xDD, 0xFA, - .byte 0xD7, 0xF0, 0xE3, 0xFA, 0xD5, 0xF0, 0xE9, 0xFA, 0xD3, 0xF0, 0xEF, 0xFA, 0xD1, 0xF0, 0xF5, 0xFA, - .byte 0xCF, 0xF0, 0xFB, 0xFA, 0xCD, 0xF0, 0x01, 0xFB, 0xCB, 0xF0, 0x07, 0xFB, 0xC9, 0xF0, 0x0D, 0xFB, - .byte 0xC7, 0xF0, 0x13, 0xFB, 0xC5, 0xF0, 0x19, 0xFB, 0xC3, 0xF0, 0x1F, 0xFB, 0xC1, 0xF0, 0x25, 0xFB, - .byte 0xBF, 0xF0, 0x2B, 0xFB, 0xBD, 0xF0, 0x31, 0xFB, 0xBB, 0xF0, 0x37, 0xFB, 0xBA, 0xF0, 0x3D, 0xFB, - .byte 0xB8, 0xF0, 0x43, 0xFB, 0xB6, 0xF0, 0x49, 0xFB, 0xB4, 0xF0, 0x4F, 0xFB, 0xB2, 0xF0, 0x55, 0xFB, - .byte 0xB0, 0xF0, 0x5B, 0xFB, 0xAF, 0xF0, 0x61, 0xFB, 0xAD, 0xF0, 0x67, 0xFB, 0xAB, 0xF0, 0x6D, 0xFB, - .byte 0xA9, 0xF0, 0x73, 0xFB, 0xA7, 0xF0, 0x79, 0xFB, 0xA6, 0xF0, 0x7F, 0xFB, 0xA4, 0xF0, 0x85, 0xFB, - .byte 0xA2, 0xF0, 0x8B, 0xFB, 0xA0, 0xF0, 0x91, 0xFB, 0x9F, 0xF0, 0x97, 0xFB, 0x9D, 0xF0, 0x9D, 0xFB, - .byte 0x9B, 0xF0, 0xA3, 0xFB, 0x99, 0xF0, 0xA9, 0xFB, 0x98, 0xF0, 0xAF, 0xFB, 0x96, 0xF0, 0xB5, 0xFB, - .byte 0x94, 0xF0, 0xBC, 0xFB, 0x93, 0xF0, 0xC2, 0xFB, 0x91, 0xF0, 0xC8, 0xFB, 0x8F, 0xF0, 0xCE, 0xFB, - .byte 0x8E, 0xF0, 0xD4, 0xFB, 0x8C, 0xF0, 0xDA, 0xFB, 0x8A, 0xF0, 0xE0, 0xFB, 0x89, 0xF0, 0xE6, 0xFB, - .byte 0x87, 0xF0, 0xEC, 0xFB, 0x86, 0xF0, 0xF2, 0xFB, 0x84, 0xF0, 0xF8, 0xFB, 0x83, 0xF0, 0xFE, 0xFB, - .byte 0x81, 0xF0, 0x04, 0xFC, 0x7F, 0xF0, 0x0A, 0xFC, 0x7E, 0xF0, 0x11, 0xFC, 0x7C, 0xF0, 0x17, 0xFC, - .byte 0x7B, 0xF0, 0x1D, 0xFC, 0x79, 0xF0, 0x23, 0xFC, 0x78, 0xF0, 0x29, 0xFC, 0x76, 0xF0, 0x2F, 0xFC, - .byte 0x75, 0xF0, 0x35, 0xFC, 0x73, 0xF0, 0x3B, 0xFC, 0x72, 0xF0, 0x41, 0xFC, 0x70, 0xF0, 0x47, 0xFC, - .byte 0x6F, 0xF0, 0x4E, 0xFC, 0x6D, 0xF0, 0x54, 0xFC, 0x6C, 0xF0, 0x5A, 0xFC, 0x6B, 0xF0, 0x60, 0xFC, - .byte 0x69, 0xF0, 0x66, 0xFC, 0x68, 0xF0, 0x6C, 0xFC, 0x66, 0xF0, 0x72, 0xFC, 0x65, 0xF0, 0x78, 0xFC, - .byte 0x64, 0xF0, 0x7F, 0xFC, 0x62, 0xF0, 0x85, 0xFC, 0x61, 0xF0, 0x8B, 0xFC, 0x5F, 0xF0, 0x91, 0xFC, - .byte 0x5E, 0xF0, 0x97, 0xFC, 0x5D, 0xF0, 0x9D, 0xFC, 0x5B, 0xF0, 0xA3, 0xFC, 0x5A, 0xF0, 0xAA, 0xFC, - .byte 0x59, 0xF0, 0xB0, 0xFC, 0x58, 0xF0, 0xB6, 0xFC, 0x56, 0xF0, 0xBC, 0xFC, 0x55, 0xF0, 0xC2, 0xFC, - .byte 0x54, 0xF0, 0xC8, 0xFC, 0x52, 0xF0, 0xCE, 0xFC, 0x51, 0xF0, 0xD5, 0xFC, 0x50, 0xF0, 0xDB, 0xFC, - .byte 0x4F, 0xF0, 0xE1, 0xFC, 0x4D, 0xF0, 0xE7, 0xFC, 0x4C, 0xF0, 0xED, 0xFC, 0x4B, 0xF0, 0xF3, 0xFC, - .byte 0x4A, 0xF0, 0xFA, 0xFC, 0x49, 0xF0, 0x00, 0xFD, 0x48, 0xF0, 0x06, 0xFD, 0x46, 0xF0, 0x0C, 0xFD, - .byte 0x45, 0xF0, 0x12, 0xFD, 0x44, 0xF0, 0x18, 0xFD, 0x43, 0xF0, 0x1F, 0xFD, 0x42, 0xF0, 0x25, 0xFD, - .byte 0x41, 0xF0, 0x2B, 0xFD, 0x40, 0xF0, 0x31, 0xFD, 0x3E, 0xF0, 0x37, 0xFD, 0x3D, 0xF0, 0x3E, 0xFD, - .byte 0x3C, 0xF0, 0x44, 0xFD, 0x3B, 0xF0, 0x4A, 0xFD, 0x3A, 0xF0, 0x50, 0xFD, 0x39, 0xF0, 0x56, 0xFD, - .byte 0x38, 0xF0, 0x5D, 0xFD, 0x37, 0xF0, 0x63, 0xFD, 0x36, 0xF0, 0x69, 0xFD, 0x35, 0xF0, 0x6F, 0xFD, - .byte 0x34, 0xF0, 0x75, 0xFD, 0x33, 0xF0, 0x7C, 0xFD, 0x32, 0xF0, 0x82, 0xFD, 0x31, 0xF0, 0x88, 0xFD, - .byte 0x30, 0xF0, 0x8E, 0xFD, 0x2F, 0xF0, 0x94, 0xFD, 0x2E, 0xF0, 0x9B, 0xFD, 0x2D, 0xF0, 0xA1, 0xFD, - .byte 0x2C, 0xF0, 0xA7, 0xFD, 0x2B, 0xF0, 0xAD, 0xFD, 0x2B, 0xF0, 0xB3, 0xFD, 0x2A, 0xF0, 0xBA, 0xFD, - .byte 0x29, 0xF0, 0xC0, 0xFD, 0x28, 0xF0, 0xC6, 0xFD, 0x27, 0xF0, 0xCC, 0xFD, 0x26, 0xF0, 0xD3, 0xFD, - .byte 0x25, 0xF0, 0xD9, 0xFD, 0x24, 0xF0, 0xDF, 0xFD, 0x24, 0xF0, 0xE5, 0xFD, 0x23, 0xF0, 0xEB, 0xFD, - .byte 0x22, 0xF0, 0xF2, 0xFD, 0x21, 0xF0, 0xF8, 0xFD, 0x20, 0xF0, 0xFE, 0xFD, 0x20, 0xF0, 0x04, 0xFE, - .byte 0x1F, 0xF0, 0x0B, 0xFE, 0x1E, 0xF0, 0x11, 0xFE, 0x1D, 0xF0, 0x17, 0xFE, 0x1D, 0xF0, 0x1D, 0xFE, - .byte 0x1C, 0xF0, 0x24, 0xFE, 0x1B, 0xF0, 0x2A, 0xFE, 0x1A, 0xF0, 0x30, 0xFE, 0x1A, 0xF0, 0x36, 0xFE, - .byte 0x19, 0xF0, 0x3D, 0xFE, 0x18, 0xF0, 0x43, 0xFE, 0x18, 0xF0, 0x49, 0xFE, 0x17, 0xF0, 0x4F, 0xFE, - .byte 0x16, 0xF0, 0x56, 0xFE, 0x16, 0xF0, 0x5C, 0xFE, 0x15, 0xF0, 0x62, 0xFE, 0x14, 0xF0, 0x68, 0xFE, - .byte 0x14, 0xF0, 0x6F, 0xFE, 0x13, 0xF0, 0x75, 0xFE, 0x13, 0xF0, 0x7B, 0xFE, 0x12, 0xF0, 0x81, 0xFE, - .byte 0x11, 0xF0, 0x88, 0xFE, 0x11, 0xF0, 0x8E, 0xFE, 0x10, 0xF0, 0x94, 0xFE, 0x10, 0xF0, 0x9A, 0xFE, - .byte 0x0F, 0xF0, 0xA1, 0xFE, 0x0F, 0xF0, 0xA7, 0xFE, 0x0E, 0xF0, 0xAD, 0xFE, 0x0E, 0xF0, 0xB3, 0xFE, - .byte 0x0D, 0xF0, 0xBA, 0xFE, 0x0D, 0xF0, 0xC0, 0xFE, 0x0C, 0xF0, 0xC6, 0xFE, 0x0C, 0xF0, 0xCC, 0xFE, - .byte 0x0B, 0xF0, 0xD3, 0xFE, 0x0B, 0xF0, 0xD9, 0xFE, 0x0A, 0xF0, 0xDF, 0xFE, 0x0A, 0xF0, 0xE5, 0xFE, - .byte 0x09, 0xF0, 0xEC, 0xFE, 0x09, 0xF0, 0xF2, 0xFE, 0x08, 0xF0, 0xF8, 0xFE, 0x08, 0xF0, 0xFF, 0xFE, - .byte 0x08, 0xF0, 0x05, 0xFF, 0x07, 0xF0, 0x0B, 0xFF, 0x07, 0xF0, 0x11, 0xFF, 0x07, 0xF0, 0x18, 0xFF, - .byte 0x06, 0xF0, 0x1E, 0xFF, 0x06, 0xF0, 0x24, 0xFF, 0x06, 0xF0, 0x2A, 0xFF, 0x05, 0xF0, 0x31, 0xFF, - .byte 0x05, 0xF0, 0x37, 0xFF, 0x05, 0xF0, 0x3D, 0xFF, 0x04, 0xF0, 0x44, 0xFF, 0x04, 0xF0, 0x4A, 0xFF, - .byte 0x04, 0xF0, 0x50, 0xFF, 0x04, 0xF0, 0x56, 0xFF, 0x03, 0xF0, 0x5D, 0xFF, 0x03, 0xF0, 0x63, 0xFF, - .byte 0x03, 0xF0, 0x69, 0xFF, 0x03, 0xF0, 0x70, 0xFF, 0x02, 0xF0, 0x76, 0xFF, 0x02, 0xF0, 0x7C, 0xFF, - .byte 0x02, 0xF0, 0x82, 0xFF, 0x02, 0xF0, 0x89, 0xFF, 0x02, 0xF0, 0x8F, 0xFF, 0x01, 0xF0, 0x95, 0xFF, - .byte 0x01, 0xF0, 0x9B, 0xFF, 0x01, 0xF0, 0xA2, 0xFF, 0x01, 0xF0, 0xA8, 0xFF, 0x01, 0xF0, 0xAE, 0xFF, - .byte 0x01, 0xF0, 0xB5, 0xFF, 0x01, 0xF0, 0xBB, 0xFF, 0x00, 0xF0, 0xC1, 0xFF, 0x00, 0xF0, 0xC7, 0xFF, - .byte 0x00, 0xF0, 0xCE, 0xFF, 0x00, 0xF0, 0xD4, 0xFF, 0x00, 0xF0, 0xDA, 0xFF, 0x00, 0xF0, 0xE1, 0xFF, - .byte 0x00, 0xF0, 0xE7, 0xFF, 0x00, 0xF0, 0xED, 0xFF, 0x00, 0xF0, 0xF3, 0xFF, 0x00, 0xF0, 0xFA, 0xFF, - .byte 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x06, 0x00, 0x00, 0xF0, 0x0D, 0x00, 0x00, 0xF0, 0x13, 0x00, - .byte 0x00, 0xF0, 0x19, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xF0, 0x26, 0x00, 0x00, 0xF0, 0x2C, 0x00, - .byte 0x00, 0xF0, 0x32, 0x00, 0x00, 0xF0, 0x39, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x01, 0xF0, 0x45, 0x00, - .byte 0x01, 0xF0, 0x4B, 0x00, 0x01, 0xF0, 0x52, 0x00, 0x01, 0xF0, 0x58, 0x00, 0x01, 0xF0, 0x5E, 0x00, - .byte 0x01, 0xF0, 0x65, 0x00, 0x01, 0xF0, 0x6B, 0x00, 0x02, 0xF0, 0x71, 0x00, 0x02, 0xF0, 0x77, 0x00, - .byte 0x02, 0xF0, 0x7E, 0x00, 0x02, 0xF0, 0x84, 0x00, 0x02, 0xF0, 0x8A, 0x00, 0x03, 0xF0, 0x90, 0x00, - .byte 0x03, 0xF0, 0x97, 0x00, 0x03, 0xF0, 0x9D, 0x00, 0x03, 0xF0, 0xA3, 0x00, 0x04, 0xF0, 0xAA, 0x00, - .byte 0x04, 0xF0, 0xB0, 0x00, 0x04, 0xF0, 0xB6, 0x00, 0x04, 0xF0, 0xBC, 0x00, 0x05, 0xF0, 0xC3, 0x00, - .byte 0x05, 0xF0, 0xC9, 0x00, 0x05, 0xF0, 0xCF, 0x00, 0x06, 0xF0, 0xD6, 0x00, 0x06, 0xF0, 0xDC, 0x00, - .byte 0x06, 0xF0, 0xE2, 0x00, 0x07, 0xF0, 0xE8, 0x00, 0x07, 0xF0, 0xEF, 0x00, 0x07, 0xF0, 0xF5, 0x00, - .byte 0x08, 0xF0, 0xFB, 0x00, 0x08, 0xF0, 0x01, 0x01, 0x08, 0xF0, 0x08, 0x01, 0x09, 0xF0, 0x0E, 0x01, - .byte 0x09, 0xF0, 0x14, 0x01, 0x0A, 0xF0, 0x1B, 0x01, 0x0A, 0xF0, 0x21, 0x01, 0x0B, 0xF0, 0x27, 0x01, - .byte 0x0B, 0xF0, 0x2D, 0x01, 0x0C, 0xF0, 0x34, 0x01, 0x0C, 0xF0, 0x3A, 0x01, 0x0D, 0xF0, 0x40, 0x01, - .byte 0x0D, 0xF0, 0x46, 0x01, 0x0E, 0xF0, 0x4D, 0x01, 0x0E, 0xF0, 0x53, 0x01, 0x0F, 0xF0, 0x59, 0x01, - .byte 0x0F, 0xF0, 0x5F, 0x01, 0x10, 0xF0, 0x66, 0x01, 0x10, 0xF0, 0x6C, 0x01, 0x11, 0xF0, 0x72, 0x01, - .byte 0x11, 0xF0, 0x78, 0x01, 0x12, 0xF0, 0x7F, 0x01, 0x13, 0xF0, 0x85, 0x01, 0x13, 0xF0, 0x8B, 0x01, - .byte 0x14, 0xF0, 0x91, 0x01, 0x14, 0xF0, 0x98, 0x01, 0x15, 0xF0, 0x9E, 0x01, 0x16, 0xF0, 0xA4, 0x01, - .byte 0x16, 0xF0, 0xAA, 0x01, 0x17, 0xF0, 0xB1, 0x01, 0x18, 0xF0, 0xB7, 0x01, 0x18, 0xF0, 0xBD, 0x01, - .byte 0x19, 0xF0, 0xC3, 0x01, 0x1A, 0xF0, 0xCA, 0x01, 0x1A, 0xF0, 0xD0, 0x01, 0x1B, 0xF0, 0xD6, 0x01, - .byte 0x1C, 0xF0, 0xDC, 0x01, 0x1D, 0xF0, 0xE3, 0x01, 0x1D, 0xF0, 0xE9, 0x01, 0x1E, 0xF0, 0xEF, 0x01, - .byte 0x1F, 0xF0, 0xF5, 0x01, 0x20, 0xF0, 0xFC, 0x01, 0x20, 0xF0, 0x02, 0x02, 0x21, 0xF0, 0x08, 0x02, - .byte 0x22, 0xF0, 0x0E, 0x02, 0x23, 0xF0, 0x15, 0x02, 0x24, 0xF0, 0x1B, 0x02, 0x24, 0xF0, 0x21, 0x02, - .byte 0x25, 0xF0, 0x27, 0x02, 0x26, 0xF0, 0x2D, 0x02, 0x27, 0xF0, 0x34, 0x02, 0x28, 0xF0, 0x3A, 0x02, - .byte 0x29, 0xF0, 0x40, 0x02, 0x2A, 0xF0, 0x46, 0x02, 0x2B, 0xF0, 0x4D, 0x02, 0x2B, 0xF0, 0x53, 0x02, - .byte 0x2C, 0xF0, 0x59, 0x02, 0x2D, 0xF0, 0x5F, 0x02, 0x2E, 0xF0, 0x65, 0x02, 0x2F, 0xF0, 0x6C, 0x02, - .byte 0x30, 0xF0, 0x72, 0x02, 0x31, 0xF0, 0x78, 0x02, 0x32, 0xF0, 0x7E, 0x02, 0x33, 0xF0, 0x84, 0x02, - .byte 0x34, 0xF0, 0x8B, 0x02, 0x35, 0xF0, 0x91, 0x02, 0x36, 0xF0, 0x97, 0x02, 0x37, 0xF0, 0x9D, 0x02, - .byte 0x38, 0xF0, 0xA3, 0x02, 0x39, 0xF0, 0xAA, 0x02, 0x3A, 0xF0, 0xB0, 0x02, 0x3B, 0xF0, 0xB6, 0x02, - .byte 0x3C, 0xF0, 0xBC, 0x02, 0x3D, 0xF0, 0xC2, 0x02, 0x3E, 0xF0, 0xC9, 0x02, 0x40, 0xF0, 0xCF, 0x02, - .byte 0x41, 0xF0, 0xD5, 0x02, 0x42, 0xF0, 0xDB, 0x02, 0x43, 0xF0, 0xE1, 0x02, 0x44, 0xF0, 0xE8, 0x02, - .byte 0x45, 0xF0, 0xEE, 0x02, 0x46, 0xF0, 0xF4, 0x02, 0x48, 0xF0, 0xFA, 0x02, 0x49, 0xF0, 0x00, 0x03, - .byte 0x4A, 0xF0, 0x06, 0x03, 0x4B, 0xF0, 0x0D, 0x03, 0x4C, 0xF0, 0x13, 0x03, 0x4D, 0xF0, 0x19, 0x03, - .byte 0x4F, 0xF0, 0x1F, 0x03, 0x50, 0xF0, 0x25, 0x03, 0x51, 0xF0, 0x2B, 0x03, 0x52, 0xF0, 0x32, 0x03, - .byte 0x54, 0xF0, 0x38, 0x03, 0x55, 0xF0, 0x3E, 0x03, 0x56, 0xF0, 0x44, 0x03, 0x58, 0xF0, 0x4A, 0x03, - .byte 0x59, 0xF0, 0x50, 0x03, 0x5A, 0xF0, 0x56, 0x03, 0x5B, 0xF0, 0x5D, 0x03, 0x5D, 0xF0, 0x63, 0x03, - .byte 0x5E, 0xF0, 0x69, 0x03, 0x5F, 0xF0, 0x6F, 0x03, 0x61, 0xF0, 0x75, 0x03, 0x62, 0xF0, 0x7B, 0x03, - .byte 0x64, 0xF0, 0x81, 0x03, 0x65, 0xF0, 0x88, 0x03, 0x66, 0xF0, 0x8E, 0x03, 0x68, 0xF0, 0x94, 0x03, - .byte 0x69, 0xF0, 0x9A, 0x03, 0x6B, 0xF0, 0xA0, 0x03, 0x6C, 0xF0, 0xA6, 0x03, 0x6D, 0xF0, 0xAC, 0x03, - .byte 0x6F, 0xF0, 0xB2, 0x03, 0x70, 0xF0, 0xB9, 0x03, 0x72, 0xF0, 0xBF, 0x03, 0x73, 0xF0, 0xC5, 0x03, - .byte 0x75, 0xF0, 0xCB, 0x03, 0x76, 0xF0, 0xD1, 0x03, 0x78, 0xF0, 0xD7, 0x03, 0x79, 0xF0, 0xDD, 0x03, - .byte 0x7B, 0xF0, 0xE3, 0x03, 0x7C, 0xF0, 0xE9, 0x03, 0x7E, 0xF0, 0xEF, 0x03, 0x7F, 0xF0, 0xF6, 0x03, - .byte 0x81, 0xF0, 0xFC, 0x03, 0x83, 0xF0, 0x02, 0x04, 0x84, 0xF0, 0x08, 0x04, 0x86, 0xF0, 0x0E, 0x04, - .byte 0x87, 0xF0, 0x14, 0x04, 0x89, 0xF0, 0x1A, 0x04, 0x8A, 0xF0, 0x20, 0x04, 0x8C, 0xF0, 0x26, 0x04, - .byte 0x8E, 0xF0, 0x2C, 0x04, 0x8F, 0xF0, 0x32, 0x04, 0x91, 0xF0, 0x38, 0x04, 0x93, 0xF0, 0x3E, 0x04, - .byte 0x94, 0xF0, 0x44, 0x04, 0x96, 0xF0, 0x4B, 0x04, 0x98, 0xF0, 0x51, 0x04, 0x99, 0xF0, 0x57, 0x04, - .byte 0x9B, 0xF0, 0x5D, 0x04, 0x9D, 0xF0, 0x63, 0x04, 0x9F, 0xF0, 0x69, 0x04, 0xA0, 0xF0, 0x6F, 0x04, - .byte 0xA2, 0xF0, 0x75, 0x04, 0xA4, 0xF0, 0x7B, 0x04, 0xA6, 0xF0, 0x81, 0x04, 0xA7, 0xF0, 0x87, 0x04, - .byte 0xA9, 0xF0, 0x8D, 0x04, 0xAB, 0xF0, 0x93, 0x04, 0xAD, 0xF0, 0x99, 0x04, 0xAF, 0xF0, 0x9F, 0x04, - .byte 0xB0, 0xF0, 0xA5, 0x04, 0xB2, 0xF0, 0xAB, 0x04, 0xB4, 0xF0, 0xB1, 0x04, 0xB6, 0xF0, 0xB7, 0x04, - .byte 0xB8, 0xF0, 0xBD, 0x04, 0xBA, 0xF0, 0xC3, 0x04, 0xBB, 0xF0, 0xC9, 0x04, 0xBD, 0xF0, 0xCF, 0x04, - .byte 0xBF, 0xF0, 0xD5, 0x04, 0xC1, 0xF0, 0xDB, 0x04, 0xC3, 0xF0, 0xE1, 0x04, 0xC5, 0xF0, 0xE7, 0x04, - .byte 0xC7, 0xF0, 0xED, 0x04, 0xC9, 0xF0, 0xF3, 0x04, 0xCB, 0xF0, 0xF9, 0x04, 0xCD, 0xF0, 0xFF, 0x04, - .byte 0xCF, 0xF0, 0x05, 0x05, 0xD1, 0xF0, 0x0B, 0x05, 0xD3, 0xF0, 0x11, 0x05, 0xD5, 0xF0, 0x17, 0x05, - .byte 0xD7, 0xF0, 0x1D, 0x05, 0xD9, 0xF0, 0x23, 0x05, 0xDB, 0xF0, 0x29, 0x05, 0xDD, 0xF0, 0x2F, 0x05, - .byte 0xDF, 0xF0, 0x34, 0x05, 0xE1, 0xF0, 0x3A, 0x05, 0xE3, 0xF0, 0x40, 0x05, 0xE5, 0xF0, 0x46, 0x05, - .byte 0xE7, 0xF0, 0x4C, 0x05, 0xE9, 0xF0, 0x52, 0x05, 0xEB, 0xF0, 0x58, 0x05, 0xED, 0xF0, 0x5E, 0x05, - .byte 0xEF, 0xF0, 0x64, 0x05, 0xF2, 0xF0, 0x6A, 0x05, 0xF4, 0xF0, 0x70, 0x05, 0xF6, 0xF0, 0x76, 0x05, - .byte 0xF8, 0xF0, 0x7C, 0x05, 0xFA, 0xF0, 0x81, 0x05, 0xFC, 0xF0, 0x87, 0x05, 0xFE, 0xF0, 0x8D, 0x05, - .byte 0x01, 0xF1, 0x93, 0x05, 0x03, 0xF1, 0x99, 0x05, 0x05, 0xF1, 0x9F, 0x05, 0x07, 0xF1, 0xA5, 0x05, - .byte 0x09, 0xF1, 0xAB, 0x05, 0x0C, 0xF1, 0xB1, 0x05, 0x0E, 0xF1, 0xB6, 0x05, 0x10, 0xF1, 0xBC, 0x05, - .byte 0x12, 0xF1, 0xC2, 0x05, 0x15, 0xF1, 0xC8, 0x05, 0x17, 0xF1, 0xCE, 0x05, 0x19, 0xF1, 0xD4, 0x05, - .byte 0x1C, 0xF1, 0xDA, 0x05, 0x1E, 0xF1, 0xDF, 0x05, 0x20, 0xF1, 0xE5, 0x05, 0x23, 0xF1, 0xEB, 0x05, - .byte 0x25, 0xF1, 0xF1, 0x05, 0x27, 0xF1, 0xF7, 0x05, 0x2A, 0xF1, 0xFD, 0x05, 0x2C, 0xF1, 0x02, 0x06, - .byte 0x2E, 0xF1, 0x08, 0x06, 0x31, 0xF1, 0x0E, 0x06, 0x33, 0xF1, 0x14, 0x06, 0x35, 0xF1, 0x1A, 0x06, - .byte 0x38, 0xF1, 0x1F, 0x06, 0x3A, 0xF1, 0x25, 0x06, 0x3D, 0xF1, 0x2B, 0x06, 0x3F, 0xF1, 0x31, 0x06, - .byte 0x41, 0xF1, 0x37, 0x06, 0x44, 0xF1, 0x3C, 0x06, 0x46, 0xF1, 0x42, 0x06, 0x49, 0xF1, 0x48, 0x06, - .byte 0x4B, 0xF1, 0x4E, 0x06, 0x4E, 0xF1, 0x54, 0x06, 0x50, 0xF1, 0x59, 0x06, 0x53, 0xF1, 0x5F, 0x06, - .byte 0x55, 0xF1, 0x65, 0x06, 0x58, 0xF1, 0x6B, 0x06, 0x5A, 0xF1, 0x70, 0x06, 0x5D, 0xF1, 0x76, 0x06, - .byte 0x5F, 0xF1, 0x7C, 0x06, 0x62, 0xF1, 0x82, 0x06, 0x65, 0xF1, 0x87, 0x06, 0x67, 0xF1, 0x8D, 0x06, - .byte 0x6A, 0xF1, 0x93, 0x06, 0x6C, 0xF1, 0x99, 0x06, 0x6F, 0xF1, 0x9E, 0x06, 0x71, 0xF1, 0xA4, 0x06, - .byte 0x74, 0xF1, 0xAA, 0x06, 0x77, 0xF1, 0xAF, 0x06, 0x79, 0xF1, 0xB5, 0x06, 0x7C, 0xF1, 0xBB, 0x06, - .byte 0x7F, 0xF1, 0xC1, 0x06, 0x81, 0xF1, 0xC6, 0x06, 0x84, 0xF1, 0xCC, 0x06, 0x87, 0xF1, 0xD2, 0x06, - .byte 0x89, 0xF1, 0xD7, 0x06, 0x8C, 0xF1, 0xDD, 0x06, 0x8F, 0xF1, 0xE3, 0x06, 0x91, 0xF1, 0xE8, 0x06, - .byte 0x94, 0xF1, 0xEE, 0x06, 0x97, 0xF1, 0xF4, 0x06, 0x9A, 0xF1, 0xF9, 0x06, 0x9C, 0xF1, 0xFF, 0x06, - .byte 0x9F, 0xF1, 0x05, 0x07, 0xA2, 0xF1, 0x0A, 0x07, 0xA5, 0xF1, 0x10, 0x07, 0xA7, 0xF1, 0x15, 0x07, - .byte 0xAA, 0xF1, 0x1B, 0x07, 0xAD, 0xF1, 0x21, 0x07, 0xB0, 0xF1, 0x26, 0x07, 0xB3, 0xF1, 0x2C, 0x07, - .byte 0xB5, 0xF1, 0x32, 0x07, 0xB8, 0xF1, 0x37, 0x07, 0xBB, 0xF1, 0x3D, 0x07, 0xBE, 0xF1, 0x42, 0x07, - .byte 0xC1, 0xF1, 0x48, 0x07, 0xC4, 0xF1, 0x4E, 0x07, 0xC6, 0xF1, 0x53, 0x07, 0xC9, 0xF1, 0x59, 0x07, - .byte 0xCC, 0xF1, 0x5E, 0x07, 0xCF, 0xF1, 0x64, 0x07, 0xD2, 0xF1, 0x6A, 0x07, 0xD5, 0xF1, 0x6F, 0x07, - .byte 0xD8, 0xF1, 0x75, 0x07, 0xDB, 0xF1, 0x7A, 0x07, 0xDE, 0xF1, 0x80, 0x07, 0xE1, 0xF1, 0x85, 0x07, - .byte 0xE4, 0xF1, 0x8B, 0x07, 0xE7, 0xF1, 0x90, 0x07, 0xEA, 0xF1, 0x96, 0x07, 0xED, 0xF1, 0x9B, 0x07, - .byte 0xF0, 0xF1, 0xA1, 0x07, 0xF3, 0xF1, 0xA6, 0x07, 0xF6, 0xF1, 0xAC, 0x07, 0xF9, 0xF1, 0xB2, 0x07, - .byte 0xFC, 0xF1, 0xB7, 0x07, 0xFF, 0xF1, 0xBD, 0x07, 0x02, 0xF2, 0xC2, 0x07, 0x05, 0xF2, 0xC8, 0x07, - .byte 0x08, 0xF2, 0xCD, 0x07, 0x0B, 0xF2, 0xD2, 0x07, 0x0E, 0xF2, 0xD8, 0x07, 0x11, 0xF2, 0xDD, 0x07, - .byte 0x14, 0xF2, 0xE3, 0x07, 0x17, 0xF2, 0xE8, 0x07, 0x1A, 0xF2, 0xEE, 0x07, 0x1D, 0xF2, 0xF3, 0x07, - .byte 0x21, 0xF2, 0xF9, 0x07, 0x24, 0xF2, 0xFE, 0x07, 0x27, 0xF2, 0x04, 0x08, 0x2A, 0xF2, 0x09, 0x08, - .byte 0x2D, 0xF2, 0x0E, 0x08, 0x30, 0xF2, 0x14, 0x08, 0x34, 0xF2, 0x19, 0x08, 0x37, 0xF2, 0x1F, 0x08, - .byte 0x3A, 0xF2, 0x24, 0x08, 0x3D, 0xF2, 0x2A, 0x08, 0x40, 0xF2, 0x2F, 0x08, 0x44, 0xF2, 0x34, 0x08, - .byte 0x47, 0xF2, 0x3A, 0x08, 0x4A, 0xF2, 0x3F, 0x08, 0x4D, 0xF2, 0x45, 0x08, 0x50, 0xF2, 0x4A, 0x08, - .byte 0x54, 0xF2, 0x4F, 0x08, 0x57, 0xF2, 0x55, 0x08, 0x5A, 0xF2, 0x5A, 0x08, 0x5E, 0xF2, 0x5F, 0x08, - .byte 0x61, 0xF2, 0x65, 0x08, 0x64, 0xF2, 0x6A, 0x08, 0x67, 0xF2, 0x6F, 0x08, 0x6B, 0xF2, 0x75, 0x08, - .byte 0x6E, 0xF2, 0x7A, 0x08, 0x71, 0xF2, 0x7F, 0x08, 0x75, 0xF2, 0x85, 0x08, 0x78, 0xF2, 0x8A, 0x08, - .byte 0x7B, 0xF2, 0x8F, 0x08, 0x7F, 0xF2, 0x95, 0x08, 0x82, 0xF2, 0x9A, 0x08, 0x86, 0xF2, 0x9F, 0x08, - .byte 0x89, 0xF2, 0xA5, 0x08, 0x8C, 0xF2, 0xAA, 0x08, 0x90, 0xF2, 0xAF, 0x08, 0x93, 0xF2, 0xB4, 0x08, - .byte 0x97, 0xF2, 0xBA, 0x08, 0x9A, 0xF2, 0xBF, 0x08, 0x9E, 0xF2, 0xC4, 0x08, 0xA1, 0xF2, 0xC9, 0x08, - .byte 0xA4, 0xF2, 0xCF, 0x08, 0xA8, 0xF2, 0xD4, 0x08, 0xAB, 0xF2, 0xD9, 0x08, 0xAF, 0xF2, 0xDE, 0x08, - .byte 0xB2, 0xF2, 0xE4, 0x08, 0xB6, 0xF2, 0xE9, 0x08, 0xB9, 0xF2, 0xEE, 0x08, 0xBD, 0xF2, 0xF3, 0x08, - .byte 0xC0, 0xF2, 0xF8, 0x08, 0xC4, 0xF2, 0xFE, 0x08, 0xC7, 0xF2, 0x03, 0x09, 0xCB, 0xF2, 0x08, 0x09, - .byte 0xCE, 0xF2, 0x0D, 0x09, 0xD2, 0xF2, 0x12, 0x09, 0xD6, 0xF2, 0x18, 0x09, 0xD9, 0xF2, 0x1D, 0x09, - .byte 0xDD, 0xF2, 0x22, 0x09, 0xE0, 0xF2, 0x27, 0x09, 0xE4, 0xF2, 0x2C, 0x09, 0xE8, 0xF2, 0x31, 0x09, - .byte 0xEB, 0xF2, 0x37, 0x09, 0xEF, 0xF2, 0x3C, 0x09, 0xF2, 0xF2, 0x41, 0x09, 0xF6, 0xF2, 0x46, 0x09, - .byte 0xFA, 0xF2, 0x4B, 0x09, 0xFD, 0xF2, 0x50, 0x09, 0x01, 0xF3, 0x55, 0x09, 0x05, 0xF3, 0x5A, 0x09, - .byte 0x08, 0xF3, 0x5F, 0x09, 0x0C, 0xF3, 0x65, 0x09, 0x10, 0xF3, 0x6A, 0x09, 0x13, 0xF3, 0x6F, 0x09, - .byte 0x17, 0xF3, 0x74, 0x09, 0x1B, 0xF3, 0x79, 0x09, 0x1F, 0xF3, 0x7E, 0x09, 0x22, 0xF3, 0x83, 0x09, - .byte 0x26, 0xF3, 0x88, 0x09, 0x2A, 0xF3, 0x8D, 0x09, 0x2E, 0xF3, 0x92, 0x09, 0x31, 0xF3, 0x97, 0x09, - .byte 0x35, 0xF3, 0x9C, 0x09, 0x39, 0xF3, 0xA1, 0x09, 0x3D, 0xF3, 0xA6, 0x09, 0x40, 0xF3, 0xAB, 0x09, - .byte 0x44, 0xF3, 0xB0, 0x09, 0x48, 0xF3, 0xB5, 0x09, 0x4C, 0xF3, 0xBA, 0x09, 0x50, 0xF3, 0xBF, 0x09, - .byte 0x54, 0xF3, 0xC4, 0x09, 0x57, 0xF3, 0xC9, 0x09, 0x5B, 0xF3, 0xCE, 0x09, 0x5F, 0xF3, 0xD3, 0x09, - .byte 0x63, 0xF3, 0xD8, 0x09, 0x67, 0xF3, 0xDD, 0x09, 0x6B, 0xF3, 0xE2, 0x09, 0x6F, 0xF3, 0xE7, 0x09, - .byte 0x72, 0xF3, 0xEC, 0x09, 0x76, 0xF3, 0xF1, 0x09, 0x7A, 0xF3, 0xF6, 0x09, 0x7E, 0xF3, 0xFB, 0x09, - .byte 0x82, 0xF3, 0xFF, 0x09, 0x86, 0xF3, 0x04, 0x0A, 0x8A, 0xF3, 0x09, 0x0A, 0x8E, 0xF3, 0x0E, 0x0A, - .byte 0x92, 0xF3, 0x13, 0x0A, 0x96, 0xF3, 0x18, 0x0A, 0x9A, 0xF3, 0x1D, 0x0A, 0x9E, 0xF3, 0x22, 0x0A, - .byte 0xA2, 0xF3, 0x26, 0x0A, 0xA6, 0xF3, 0x2B, 0x0A, 0xAA, 0xF3, 0x30, 0x0A, 0xAE, 0xF3, 0x35, 0x0A, - .byte 0xB2, 0xF3, 0x3A, 0x0A, 0xB6, 0xF3, 0x3F, 0x0A, 0xBA, 0xF3, 0x44, 0x0A, 0xBE, 0xF3, 0x48, 0x0A, - .byte 0xC2, 0xF3, 0x4D, 0x0A, 0xC6, 0xF3, 0x52, 0x0A, 0xCA, 0xF3, 0x57, 0x0A, 0xCE, 0xF3, 0x5C, 0x0A, - .byte 0xD2, 0xF3, 0x60, 0x0A, 0xD6, 0xF3, 0x65, 0x0A, 0xDA, 0xF3, 0x6A, 0x0A, 0xDE, 0xF3, 0x6F, 0x0A, - .byte 0xE2, 0xF3, 0x73, 0x0A, 0xE7, 0xF3, 0x78, 0x0A, 0xEB, 0xF3, 0x7D, 0x0A, 0xEF, 0xF3, 0x82, 0x0A, - .byte 0xF3, 0xF3, 0x86, 0x0A, 0xF7, 0xF3, 0x8B, 0x0A, 0xFB, 0xF3, 0x90, 0x0A, 0xFF, 0xF3, 0x95, 0x0A, - .byte 0x04, 0xF4, 0x99, 0x0A, 0x08, 0xF4, 0x9E, 0x0A, 0x0C, 0xF4, 0xA3, 0x0A, 0x10, 0xF4, 0xA7, 0x0A, - .byte 0x14, 0xF4, 0xAC, 0x0A, 0x18, 0xF4, 0xB1, 0x0A, 0x1D, 0xF4, 0xB5, 0x0A, 0x21, 0xF4, 0xBA, 0x0A, - .byte 0x25, 0xF4, 0xBF, 0x0A, 0x29, 0xF4, 0xC3, 0x0A, 0x2E, 0xF4, 0xC8, 0x0A, 0x32, 0xF4, 0xCD, 0x0A, - .byte 0x36, 0xF4, 0xD1, 0x0A, 0x3A, 0xF4, 0xD6, 0x0A, 0x3F, 0xF4, 0xDB, 0x0A, 0x43, 0xF4, 0xDF, 0x0A, - .byte 0x47, 0xF4, 0xE4, 0x0A, 0x4B, 0xF4, 0xE8, 0x0A, 0x50, 0xF4, 0xED, 0x0A, 0x54, 0xF4, 0xF2, 0x0A, - .byte 0x58, 0xF4, 0xF6, 0x0A, 0x5D, 0xF4, 0xFB, 0x0A, 0x61, 0xF4, 0xFF, 0x0A, 0x65, 0xF4, 0x04, 0x0B, - .byte 0x69, 0xF4, 0x08, 0x0B, 0x6E, 0xF4, 0x0D, 0x0B, 0x72, 0xF4, 0x11, 0x0B, 0x77, 0xF4, 0x16, 0x0B, - .byte 0x7B, 0xF4, 0x1B, 0x0B, 0x7F, 0xF4, 0x1F, 0x0B, 0x84, 0xF4, 0x24, 0x0B, 0x88, 0xF4, 0x28, 0x0B, - .byte 0x8C, 0xF4, 0x2D, 0x0B, 0x91, 0xF4, 0x31, 0x0B, 0x95, 0xF4, 0x36, 0x0B, 0x9A, 0xF4, 0x3A, 0x0B, - .byte 0x9E, 0xF4, 0x3E, 0x0B, 0xA2, 0xF4, 0x43, 0x0B, 0xA7, 0xF4, 0x47, 0x0B, 0xAB, 0xF4, 0x4C, 0x0B, - .byte 0xB0, 0xF4, 0x50, 0x0B, 0xB4, 0xF4, 0x55, 0x0B, 0xB9, 0xF4, 0x59, 0x0B, 0xBD, 0xF4, 0x5E, 0x0B, - .byte 0xC2, 0xF4, 0x62, 0x0B, 0xC6, 0xF4, 0x66, 0x0B, 0xCA, 0xF4, 0x6B, 0x0B, 0xCF, 0xF4, 0x6F, 0x0B, - .byte 0xD3, 0xF4, 0x74, 0x0B, 0xD8, 0xF4, 0x78, 0x0B, 0xDC, 0xF4, 0x7C, 0x0B, 0xE1, 0xF4, 0x81, 0x0B, - .byte 0xE5, 0xF4, 0x85, 0x0B, 0xEA, 0xF4, 0x89, 0x0B, 0xEF, 0xF4, 0x8E, 0x0B, 0xF3, 0xF4, 0x92, 0x0B, - .byte 0xF8, 0xF4, 0x97, 0x0B, 0xFC, 0xF4, 0x9B, 0x0B, 0x01, 0xF5, 0x9F, 0x0B, 0x05, 0xF5, 0xA3, 0x0B, - .byte 0x0A, 0xF5, 0xA8, 0x0B, 0x0E, 0xF5, 0xAC, 0x0B, 0x13, 0xF5, 0xB0, 0x0B, 0x18, 0xF5, 0xB5, 0x0B, - .byte 0x1C, 0xF5, 0xB9, 0x0B, 0x21, 0xF5, 0xBD, 0x0B, 0x25, 0xF5, 0xC1, 0x0B, 0x2A, 0xF5, 0xC6, 0x0B, - .byte 0x2F, 0xF5, 0xCA, 0x0B, 0x33, 0xF5, 0xCE, 0x0B, 0x38, 0xF5, 0xD2, 0x0B, 0x3D, 0xF5, 0xD7, 0x0B, - .byte 0x41, 0xF5, 0xDB, 0x0B, 0x46, 0xF5, 0xDF, 0x0B, 0x4B, 0xF5, 0xE3, 0x0B, 0x4F, 0xF5, 0xE8, 0x0B, - .byte 0x54, 0xF5, 0xEC, 0x0B, 0x59, 0xF5, 0xF0, 0x0B, 0x5D, 0xF5, 0xF4, 0x0B, 0x62, 0xF5, 0xF8, 0x0B, - .byte 0x67, 0xF5, 0xFC, 0x0B, 0x6B, 0xF5, 0x01, 0x0C, 0x70, 0xF5, 0x05, 0x0C, 0x75, 0xF5, 0x09, 0x0C, - .byte 0x7A, 0xF5, 0x0D, 0x0C, 0x7E, 0xF5, 0x11, 0x0C, 0x83, 0xF5, 0x15, 0x0C, 0x88, 0xF5, 0x19, 0x0C, - .byte 0x8D, 0xF5, 0x1E, 0x0C, 0x91, 0xF5, 0x22, 0x0C, 0x96, 0xF5, 0x26, 0x0C, 0x9B, 0xF5, 0x2A, 0x0C, - .byte 0xA0, 0xF5, 0x2E, 0x0C, 0xA4, 0xF5, 0x32, 0x0C, 0xA9, 0xF5, 0x36, 0x0C, 0xAE, 0xF5, 0x3A, 0x0C, - .byte 0xB3, 0xF5, 0x3E, 0x0C, 0xB8, 0xF5, 0x42, 0x0C, 0xBC, 0xF5, 0x46, 0x0C, 0xC1, 0xF5, 0x4A, 0x0C, - .byte 0xC6, 0xF5, 0x4E, 0x0C, 0xCB, 0xF5, 0x52, 0x0C, 0xD0, 0xF5, 0x56, 0x0C, 0xD5, 0xF5, 0x5A, 0x0C, - .byte 0xDA, 0xF5, 0x5E, 0x0C, 0xDE, 0xF5, 0x62, 0x0C, 0xE3, 0xF5, 0x66, 0x0C, 0xE8, 0xF5, 0x6A, 0x0C, - .byte 0xED, 0xF5, 0x6E, 0x0C, 0xF2, 0xF5, 0x72, 0x0C, 0xF7, 0xF5, 0x76, 0x0C, 0xFC, 0xF5, 0x7A, 0x0C, - .byte 0x01, 0xF6, 0x7E, 0x0C, 0x05, 0xF6, 0x82, 0x0C, 0x0A, 0xF6, 0x86, 0x0C, 0x0F, 0xF6, 0x8A, 0x0C, - .byte 0x14, 0xF6, 0x8E, 0x0C, 0x19, 0xF6, 0x91, 0x0C, 0x1E, 0xF6, 0x95, 0x0C, 0x23, 0xF6, 0x99, 0x0C, - .byte 0x28, 0xF6, 0x9D, 0x0C, 0x2D, 0xF6, 0xA1, 0x0C, 0x32, 0xF6, 0xA5, 0x0C, 0x37, 0xF6, 0xA9, 0x0C, - .byte 0x3C, 0xF6, 0xAC, 0x0C, 0x41, 0xF6, 0xB0, 0x0C, 0x46, 0xF6, 0xB4, 0x0C, 0x4B, 0xF6, 0xB8, 0x0C, - .byte 0x50, 0xF6, 0xBC, 0x0C, 0x55, 0xF6, 0xC0, 0x0C, 0x5A, 0xF6, 0xC3, 0x0C, 0x5F, 0xF6, 0xC7, 0x0C, - .byte 0x64, 0xF6, 0xCB, 0x0C, 0x69, 0xF6, 0xCF, 0x0C, 0x6E, 0xF6, 0xD2, 0x0C, 0x73, 0xF6, 0xD6, 0x0C, - .byte 0x78, 0xF6, 0xDA, 0x0C, 0x7D, 0xF6, 0xDE, 0x0C, 0x82, 0xF6, 0xE1, 0x0C, 0x87, 0xF6, 0xE5, 0x0C, - .byte 0x8C, 0xF6, 0xE9, 0x0C, 0x91, 0xF6, 0xED, 0x0C, 0x96, 0xF6, 0xF0, 0x0C, 0x9B, 0xF6, 0xF4, 0x0C, - .byte 0xA1, 0xF6, 0xF8, 0x0C, 0xA6, 0xF6, 0xFB, 0x0C, 0xAB, 0xF6, 0xFF, 0x0C, 0xB0, 0xF6, 0x03, 0x0D, - .byte 0xB5, 0xF6, 0x06, 0x0D, 0xBA, 0xF6, 0x0A, 0x0D, 0xBF, 0xF6, 0x0E, 0x0D, 0xC4, 0xF6, 0x11, 0x0D, - .byte 0xC9, 0xF6, 0x15, 0x0D, 0xCF, 0xF6, 0x18, 0x0D, 0xD4, 0xF6, 0x1C, 0x0D, 0xD9, 0xF6, 0x20, 0x0D, - .byte 0xDE, 0xF6, 0x23, 0x0D, 0xE3, 0xF6, 0x27, 0x0D, 0xE8, 0xF6, 0x2A, 0x0D, 0xEE, 0xF6, 0x2E, 0x0D, - .byte 0xF3, 0xF6, 0x32, 0x0D, 0xF8, 0xF6, 0x35, 0x0D, 0xFD, 0xF6, 0x39, 0x0D, 0x02, 0xF7, 0x3C, 0x0D, - .byte 0x08, 0xF7, 0x40, 0x0D, 0x0D, 0xF7, 0x43, 0x0D, 0x12, 0xF7, 0x47, 0x0D, 0x17, 0xF7, 0x4A, 0x0D, - .byte 0x1C, 0xF7, 0x4E, 0x0D, 0x22, 0xF7, 0x51, 0x0D, 0x27, 0xF7, 0x55, 0x0D, 0x2C, 0xF7, 0x58, 0x0D, - .byte 0x31, 0xF7, 0x5C, 0x0D, 0x37, 0xF7, 0x5F, 0x0D, 0x3C, 0xF7, 0x62, 0x0D, 0x41, 0xF7, 0x66, 0x0D, - .byte 0x46, 0xF7, 0x69, 0x0D, 0x4C, 0xF7, 0x6D, 0x0D, 0x51, 0xF7, 0x70, 0x0D, 0x56, 0xF7, 0x74, 0x0D, - .byte 0x5B, 0xF7, 0x77, 0x0D, 0x61, 0xF7, 0x7A, 0x0D, 0x66, 0xF7, 0x7E, 0x0D, 0x6B, 0xF7, 0x81, 0x0D, - .byte 0x71, 0xF7, 0x85, 0x0D, 0x76, 0xF7, 0x88, 0x0D, 0x7B, 0xF7, 0x8B, 0x0D, 0x81, 0xF7, 0x8F, 0x0D, - .byte 0x86, 0xF7, 0x92, 0x0D, 0x8B, 0xF7, 0x95, 0x0D, 0x91, 0xF7, 0x99, 0x0D, 0x96, 0xF7, 0x9C, 0x0D, - .byte 0x9B, 0xF7, 0x9F, 0x0D, 0xA1, 0xF7, 0xA2, 0x0D, 0xA6, 0xF7, 0xA6, 0x0D, 0xAB, 0xF7, 0xA9, 0x0D, - .byte 0xB1, 0xF7, 0xAC, 0x0D, 0xB6, 0xF7, 0xB0, 0x0D, 0xBB, 0xF7, 0xB3, 0x0D, 0xC1, 0xF7, 0xB6, 0x0D, - .byte 0xC6, 0xF7, 0xB9, 0x0D, 0xCC, 0xF7, 0xBC, 0x0D, 0xD1, 0xF7, 0xC0, 0x0D, 0xD6, 0xF7, 0xC3, 0x0D, - .byte 0xDC, 0xF7, 0xC6, 0x0D, 0xE1, 0xF7, 0xC9, 0x0D, 0xE7, 0xF7, 0xCC, 0x0D, 0xEC, 0xF7, 0xD0, 0x0D, - .byte 0xF2, 0xF7, 0xD3, 0x0D, 0xF7, 0xF7, 0xD6, 0x0D, 0xFC, 0xF7, 0xD9, 0x0D, 0x02, 0xF8, 0xDC, 0x0D, - .byte 0x07, 0xF8, 0xDF, 0x0D, 0x0D, 0xF8, 0xE3, 0x0D, 0x12, 0xF8, 0xE6, 0x0D, 0x18, 0xF8, 0xE9, 0x0D, - .byte 0x1D, 0xF8, 0xEC, 0x0D, 0x23, 0xF8, 0xEF, 0x0D, 0x28, 0xF8, 0xF2, 0x0D, 0x2E, 0xF8, 0xF5, 0x0D, - .byte 0x33, 0xF8, 0xF8, 0x0D, 0x38, 0xF8, 0xFB, 0x0D, 0x3E, 0xF8, 0xFE, 0x0D, 0x43, 0xF8, 0x01, 0x0E, - .byte 0x49, 0xF8, 0x04, 0x0E, 0x4E, 0xF8, 0x07, 0x0E, 0x54, 0xF8, 0x0A, 0x0E, 0x5A, 0xF8, 0x0D, 0x0E, - .byte 0x5F, 0xF8, 0x10, 0x0E, 0x65, 0xF8, 0x13, 0x0E, 0x6A, 0xF8, 0x16, 0x0E, 0x70, 0xF8, 0x19, 0x0E, - .byte 0x75, 0xF8, 0x1C, 0x0E, 0x7B, 0xF8, 0x1F, 0x0E, 0x80, 0xF8, 0x22, 0x0E, 0x86, 0xF8, 0x25, 0x0E, - .byte 0x8B, 0xF8, 0x28, 0x0E, 0x91, 0xF8, 0x2B, 0x0E, 0x96, 0xF8, 0x2E, 0x0E, 0x9C, 0xF8, 0x31, 0x0E, - .byte 0xA2, 0xF8, 0x34, 0x0E, 0xA7, 0xF8, 0x37, 0x0E, 0xAD, 0xF8, 0x3A, 0x0E, 0xB2, 0xF8, 0x3C, 0x0E, - .byte 0xB8, 0xF8, 0x3F, 0x0E, 0xBE, 0xF8, 0x42, 0x0E, 0xC3, 0xF8, 0x45, 0x0E, 0xC9, 0xF8, 0x48, 0x0E, - .byte 0xCE, 0xF8, 0x4B, 0x0E, 0xD4, 0xF8, 0x4D, 0x0E, 0xDA, 0xF8, 0x50, 0x0E, 0xDF, 0xF8, 0x53, 0x0E, - .byte 0xE5, 0xF8, 0x56, 0x0E, 0xEB, 0xF8, 0x59, 0x0E, 0xF0, 0xF8, 0x5B, 0x0E, 0xF6, 0xF8, 0x5E, 0x0E, - .byte 0xFB, 0xF8, 0x61, 0x0E, 0x01, 0xF9, 0x64, 0x0E, 0x07, 0xF9, 0x66, 0x0E, 0x0C, 0xF9, 0x69, 0x0E, - .byte 0x12, 0xF9, 0x6C, 0x0E, 0x18, 0xF9, 0x6F, 0x0E, 0x1D, 0xF9, 0x71, 0x0E, 0x23, 0xF9, 0x74, 0x0E, - .byte 0x29, 0xF9, 0x77, 0x0E, 0x2E, 0xF9, 0x79, 0x0E, 0x34, 0xF9, 0x7C, 0x0E, 0x3A, 0xF9, 0x7F, 0x0E, - .byte 0x3F, 0xF9, 0x81, 0x0E, 0x45, 0xF9, 0x84, 0x0E, 0x4B, 0xF9, 0x87, 0x0E, 0x51, 0xF9, 0x89, 0x0E, - .byte 0x56, 0xF9, 0x8C, 0x0E, 0x5C, 0xF9, 0x8F, 0x0E, 0x62, 0xF9, 0x91, 0x0E, 0x67, 0xF9, 0x94, 0x0E, - .byte 0x6D, 0xF9, 0x96, 0x0E, 0x73, 0xF9, 0x99, 0x0E, 0x79, 0xF9, 0x9B, 0x0E, 0x7E, 0xF9, 0x9E, 0x0E, - .byte 0x84, 0xF9, 0xA1, 0x0E, 0x8A, 0xF9, 0xA3, 0x0E, 0x90, 0xF9, 0xA6, 0x0E, 0x95, 0xF9, 0xA8, 0x0E, - .byte 0x9B, 0xF9, 0xAB, 0x0E, 0xA1, 0xF9, 0xAD, 0x0E, 0xA7, 0xF9, 0xB0, 0x0E, 0xAC, 0xF9, 0xB2, 0x0E, - .byte 0xB2, 0xF9, 0xB5, 0x0E, 0xB8, 0xF9, 0xB7, 0x0E, 0xBE, 0xF9, 0xBA, 0x0E, 0xC4, 0xF9, 0xBC, 0x0E, - .byte 0xC9, 0xF9, 0xBF, 0x0E, 0xCF, 0xF9, 0xC1, 0x0E, 0xD5, 0xF9, 0xC3, 0x0E, 0xDB, 0xF9, 0xC6, 0x0E, - .byte 0xE1, 0xF9, 0xC8, 0x0E, 0xE6, 0xF9, 0xCB, 0x0E, 0xEC, 0xF9, 0xCD, 0x0E, 0xF2, 0xF9, 0xCF, 0x0E, - .byte 0xF8, 0xF9, 0xD2, 0x0E, 0xFE, 0xF9, 0xD4, 0x0E, 0x03, 0xFA, 0xD6, 0x0E, 0x09, 0xFA, 0xD9, 0x0E, - .byte 0x0F, 0xFA, 0xDB, 0x0E, 0x15, 0xFA, 0xDD, 0x0E, 0x1B, 0xFA, 0xE0, 0x0E, 0x21, 0xFA, 0xE2, 0x0E, - .byte 0x26, 0xFA, 0xE4, 0x0E, 0x2C, 0xFA, 0xE7, 0x0E, 0x32, 0xFA, 0xE9, 0x0E, 0x38, 0xFA, 0xEB, 0x0E, - .byte 0x3E, 0xFA, 0xEE, 0x0E, 0x44, 0xFA, 0xF0, 0x0E, 0x4A, 0xFA, 0xF2, 0x0E, 0x4F, 0xFA, 0xF4, 0x0E, - .byte 0x55, 0xFA, 0xF7, 0x0E, 0x5B, 0xFA, 0xF9, 0x0E, 0x61, 0xFA, 0xFB, 0x0E, 0x67, 0xFA, 0xFD, 0x0E, - .byte 0x6D, 0xFA, 0xFF, 0x0E, 0x73, 0xFA, 0x02, 0x0F, 0x79, 0xFA, 0x04, 0x0F, 0x7F, 0xFA, 0x06, 0x0F, - .byte 0x84, 0xFA, 0x08, 0x0F, 0x8A, 0xFA, 0x0A, 0x0F, 0x90, 0xFA, 0x0C, 0x0F, 0x96, 0xFA, 0x0E, 0x0F, - .byte 0x9C, 0xFA, 0x11, 0x0F, 0xA2, 0xFA, 0x13, 0x0F, 0xA8, 0xFA, 0x15, 0x0F, 0xAE, 0xFA, 0x17, 0x0F, - .byte 0xB4, 0xFA, 0x19, 0x0F, 0xBA, 0xFA, 0x1B, 0x0F, 0xC0, 0xFA, 0x1D, 0x0F, 0xC6, 0xFA, 0x1F, 0x0F, - .byte 0xCC, 0xFA, 0x21, 0x0F, 0xD1, 0xFA, 0x23, 0x0F, 0xD7, 0xFA, 0x25, 0x0F, 0xDD, 0xFA, 0x27, 0x0F, - .byte 0xE3, 0xFA, 0x29, 0x0F, 0xE9, 0xFA, 0x2B, 0x0F, 0xEF, 0xFA, 0x2D, 0x0F, 0xF5, 0xFA, 0x2F, 0x0F, - .byte 0xFB, 0xFA, 0x31, 0x0F, 0x01, 0xFB, 0x33, 0x0F, 0x07, 0xFB, 0x35, 0x0F, 0x0D, 0xFB, 0x37, 0x0F, - .byte 0x13, 0xFB, 0x39, 0x0F, 0x19, 0xFB, 0x3B, 0x0F, 0x1F, 0xFB, 0x3D, 0x0F, 0x25, 0xFB, 0x3F, 0x0F, - .byte 0x2B, 0xFB, 0x41, 0x0F, 0x31, 0xFB, 0x43, 0x0F, 0x37, 0xFB, 0x45, 0x0F, 0x3D, 0xFB, 0x46, 0x0F, - .byte 0x43, 0xFB, 0x48, 0x0F, 0x49, 0xFB, 0x4A, 0x0F, 0x4F, 0xFB, 0x4C, 0x0F, 0x55, 0xFB, 0x4E, 0x0F, - .byte 0x5B, 0xFB, 0x50, 0x0F, 0x61, 0xFB, 0x51, 0x0F, 0x67, 0xFB, 0x53, 0x0F, 0x6D, 0xFB, 0x55, 0x0F, - .byte 0x73, 0xFB, 0x57, 0x0F, 0x79, 0xFB, 0x59, 0x0F, 0x7F, 0xFB, 0x5A, 0x0F, 0x85, 0xFB, 0x5C, 0x0F, - .byte 0x8B, 0xFB, 0x5E, 0x0F, 0x91, 0xFB, 0x60, 0x0F, 0x97, 0xFB, 0x61, 0x0F, 0x9D, 0xFB, 0x63, 0x0F, - .byte 0xA3, 0xFB, 0x65, 0x0F, 0xA9, 0xFB, 0x67, 0x0F, 0xAF, 0xFB, 0x68, 0x0F, 0xB5, 0xFB, 0x6A, 0x0F, - .byte 0xBC, 0xFB, 0x6C, 0x0F, 0xC2, 0xFB, 0x6D, 0x0F, 0xC8, 0xFB, 0x6F, 0x0F, 0xCE, 0xFB, 0x71, 0x0F, - .byte 0xD4, 0xFB, 0x72, 0x0F, 0xDA, 0xFB, 0x74, 0x0F, 0xE0, 0xFB, 0x76, 0x0F, 0xE6, 0xFB, 0x77, 0x0F, - .byte 0xEC, 0xFB, 0x79, 0x0F, 0xF2, 0xFB, 0x7A, 0x0F, 0xF8, 0xFB, 0x7C, 0x0F, 0xFE, 0xFB, 0x7D, 0x0F, - .byte 0x04, 0xFC, 0x7F, 0x0F, 0x0A, 0xFC, 0x81, 0x0F, 0x11, 0xFC, 0x82, 0x0F, 0x17, 0xFC, 0x84, 0x0F, - .byte 0x1D, 0xFC, 0x85, 0x0F, 0x23, 0xFC, 0x87, 0x0F, 0x29, 0xFC, 0x88, 0x0F, 0x2F, 0xFC, 0x8A, 0x0F, - .byte 0x35, 0xFC, 0x8B, 0x0F, 0x3B, 0xFC, 0x8D, 0x0F, 0x41, 0xFC, 0x8E, 0x0F, 0x47, 0xFC, 0x90, 0x0F, - .byte 0x4E, 0xFC, 0x91, 0x0F, 0x54, 0xFC, 0x93, 0x0F, 0x5A, 0xFC, 0x94, 0x0F, 0x60, 0xFC, 0x95, 0x0F, - .byte 0x66, 0xFC, 0x97, 0x0F, 0x6C, 0xFC, 0x98, 0x0F, 0x72, 0xFC, 0x9A, 0x0F, 0x78, 0xFC, 0x9B, 0x0F, - .byte 0x7F, 0xFC, 0x9C, 0x0F, 0x85, 0xFC, 0x9E, 0x0F, 0x8B, 0xFC, 0x9F, 0x0F, 0x91, 0xFC, 0xA1, 0x0F, - .byte 0x97, 0xFC, 0xA2, 0x0F, 0x9D, 0xFC, 0xA3, 0x0F, 0xA3, 0xFC, 0xA5, 0x0F, 0xAA, 0xFC, 0xA6, 0x0F, - .byte 0xB0, 0xFC, 0xA7, 0x0F, 0xB6, 0xFC, 0xA8, 0x0F, 0xBC, 0xFC, 0xAA, 0x0F, 0xC2, 0xFC, 0xAB, 0x0F, - .byte 0xC8, 0xFC, 0xAC, 0x0F, 0xCE, 0xFC, 0xAE, 0x0F, 0xD5, 0xFC, 0xAF, 0x0F, 0xDB, 0xFC, 0xB0, 0x0F, - .byte 0xE1, 0xFC, 0xB1, 0x0F, 0xE7, 0xFC, 0xB3, 0x0F, 0xED, 0xFC, 0xB4, 0x0F, 0xF3, 0xFC, 0xB5, 0x0F, - .byte 0xFA, 0xFC, 0xB6, 0x0F, 0x00, 0xFD, 0xB7, 0x0F, 0x06, 0xFD, 0xB8, 0x0F, 0x0C, 0xFD, 0xBA, 0x0F, - .byte 0x12, 0xFD, 0xBB, 0x0F, 0x18, 0xFD, 0xBC, 0x0F, 0x1F, 0xFD, 0xBD, 0x0F, 0x25, 0xFD, 0xBE, 0x0F, - .byte 0x2B, 0xFD, 0xBF, 0x0F, 0x31, 0xFD, 0xC0, 0x0F, 0x37, 0xFD, 0xC2, 0x0F, 0x3E, 0xFD, 0xC3, 0x0F, - .byte 0x44, 0xFD, 0xC4, 0x0F, 0x4A, 0xFD, 0xC5, 0x0F, 0x50, 0xFD, 0xC6, 0x0F, 0x56, 0xFD, 0xC7, 0x0F, - .byte 0x5D, 0xFD, 0xC8, 0x0F, 0x63, 0xFD, 0xC9, 0x0F, 0x69, 0xFD, 0xCA, 0x0F, 0x6F, 0xFD, 0xCB, 0x0F, - .byte 0x75, 0xFD, 0xCC, 0x0F, 0x7C, 0xFD, 0xCD, 0x0F, 0x82, 0xFD, 0xCE, 0x0F, 0x88, 0xFD, 0xCF, 0x0F, - .byte 0x8E, 0xFD, 0xD0, 0x0F, 0x94, 0xFD, 0xD1, 0x0F, 0x9B, 0xFD, 0xD2, 0x0F, 0xA1, 0xFD, 0xD3, 0x0F, - .byte 0xA7, 0xFD, 0xD4, 0x0F, 0xAD, 0xFD, 0xD5, 0x0F, 0xB3, 0xFD, 0xD5, 0x0F, 0xBA, 0xFD, 0xD6, 0x0F, - .byte 0xC0, 0xFD, 0xD7, 0x0F, 0xC6, 0xFD, 0xD8, 0x0F, 0xCC, 0xFD, 0xD9, 0x0F, 0xD3, 0xFD, 0xDA, 0x0F, - .byte 0xD9, 0xFD, 0xDB, 0x0F, 0xDF, 0xFD, 0xDC, 0x0F, 0xE5, 0xFD, 0xDC, 0x0F, 0xEB, 0xFD, 0xDD, 0x0F, - .byte 0xF2, 0xFD, 0xDE, 0x0F, 0xF8, 0xFD, 0xDF, 0x0F, 0xFE, 0xFD, 0xE0, 0x0F, 0x04, 0xFE, 0xE0, 0x0F, - .byte 0x0B, 0xFE, 0xE1, 0x0F, 0x11, 0xFE, 0xE2, 0x0F, 0x17, 0xFE, 0xE3, 0x0F, 0x1D, 0xFE, 0xE3, 0x0F, - .byte 0x24, 0xFE, 0xE4, 0x0F, 0x2A, 0xFE, 0xE5, 0x0F, 0x30, 0xFE, 0xE6, 0x0F, 0x36, 0xFE, 0xE6, 0x0F, - .byte 0x3D, 0xFE, 0xE7, 0x0F, 0x43, 0xFE, 0xE8, 0x0F, 0x49, 0xFE, 0xE8, 0x0F, 0x4F, 0xFE, 0xE9, 0x0F, - .byte 0x56, 0xFE, 0xEA, 0x0F, 0x5C, 0xFE, 0xEA, 0x0F, 0x62, 0xFE, 0xEB, 0x0F, 0x68, 0xFE, 0xEC, 0x0F, - .byte 0x6F, 0xFE, 0xEC, 0x0F, 0x75, 0xFE, 0xED, 0x0F, 0x7B, 0xFE, 0xED, 0x0F, 0x81, 0xFE, 0xEE, 0x0F, - .byte 0x88, 0xFE, 0xEF, 0x0F, 0x8E, 0xFE, 0xEF, 0x0F, 0x94, 0xFE, 0xF0, 0x0F, 0x9A, 0xFE, 0xF0, 0x0F, - .byte 0xA1, 0xFE, 0xF1, 0x0F, 0xA7, 0xFE, 0xF1, 0x0F, 0xAD, 0xFE, 0xF2, 0x0F, 0xB3, 0xFE, 0xF2, 0x0F, - .byte 0xBA, 0xFE, 0xF3, 0x0F, 0xC0, 0xFE, 0xF3, 0x0F, 0xC6, 0xFE, 0xF4, 0x0F, 0xCC, 0xFE, 0xF4, 0x0F, - .byte 0xD3, 0xFE, 0xF5, 0x0F, 0xD9, 0xFE, 0xF5, 0x0F, 0xDF, 0xFE, 0xF6, 0x0F, 0xE5, 0xFE, 0xF6, 0x0F, - .byte 0xEC, 0xFE, 0xF7, 0x0F, 0xF2, 0xFE, 0xF7, 0x0F, 0xF8, 0xFE, 0xF8, 0x0F, 0xFF, 0xFE, 0xF8, 0x0F, - .byte 0x05, 0xFF, 0xF8, 0x0F, 0x0B, 0xFF, 0xF9, 0x0F, 0x11, 0xFF, 0xF9, 0x0F, 0x18, 0xFF, 0xF9, 0x0F, - .byte 0x1E, 0xFF, 0xFA, 0x0F, 0x24, 0xFF, 0xFA, 0x0F, 0x2A, 0xFF, 0xFA, 0x0F, 0x31, 0xFF, 0xFB, 0x0F, - .byte 0x37, 0xFF, 0xFB, 0x0F, 0x3D, 0xFF, 0xFB, 0x0F, 0x44, 0xFF, 0xFC, 0x0F, 0x4A, 0xFF, 0xFC, 0x0F, - .byte 0x50, 0xFF, 0xFC, 0x0F, 0x56, 0xFF, 0xFC, 0x0F, 0x5D, 0xFF, 0xFD, 0x0F, 0x63, 0xFF, 0xFD, 0x0F, - .byte 0x69, 0xFF, 0xFD, 0x0F, 0x70, 0xFF, 0xFD, 0x0F, 0x76, 0xFF, 0xFE, 0x0F, 0x7C, 0xFF, 0xFE, 0x0F, - .byte 0x82, 0xFF, 0xFE, 0x0F, 0x89, 0xFF, 0xFE, 0x0F, 0x8F, 0xFF, 0xFE, 0x0F, 0x95, 0xFF, 0xFF, 0x0F, - .byte 0x9B, 0xFF, 0xFF, 0x0F, 0xA2, 0xFF, 0xFF, 0x0F, 0xA8, 0xFF, 0xFF, 0x0F, 0xAE, 0xFF, 0xFF, 0x0F, - .byte 0xB5, 0xFF, 0xFF, 0x0F, 0xBB, 0xFF, 0xFF, 0x0F, 0xC1, 0xFF, 0x00, 0x10, 0xC7, 0xFF, 0x00, 0x10, - .byte 0xCE, 0xFF, 0x00, 0x10, 0xD4, 0xFF, 0x00, 0x10, 0xDA, 0xFF, 0x00, 0x10, 0xE1, 0xFF, 0x00, 0x10, - .byte 0xE7, 0xFF, 0x00, 0x10, 0xED, 0xFF, 0x00, 0x10, 0xF3, 0xFF, 0x00, 0x10, 0xFA, 0xFF, 0x00, 0x10 - - .section .data - - .global UNK_021064B8 -UNK_021064B8: ; 0x021064B8 - .word FUN_020AE8B4 - - .global UNK_021064BC -UNK_021064BC: ; 0x021064BC - .word FUN_020AE8AC - - .global UNK_021064C0 -UNK_021064C0: ; 0x021064C0 - .word FUN_020AE8C4 - - .global UNK_021064C4 -UNK_021064C4: ; 0x021064C4 - .word FUN_020AE8BC - - .global UNK_021064C8 -UNK_021064C8: ; 0x021064C8 - .word UNK_021064E4 - .word UNK_0210652C - - .global UNK_021064D0 -UNK_021064D0: ; 0x021064D0 - .word UNK_02106544 - .word UNK_0210652C - .word UNK_021064E4 - .word UNK_02106514 - .word UNK_021064FC - - .global UNK_021064E4 -UNK_021064E4: ; 0x021064E4 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021064FC -UNK_021064FC: ; 0x021064FC - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00 - - .global UNK_02106514 -UNK_02106514: ; 0x02106514 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 - .byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00 - - .global UNK_0210652C -UNK_0210652C: ; 0x0210652C - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00 - - .global UNK_02106544 -UNK_02106544: ; 0x02106544 - .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00 - - .global UNK_0210655C -UNK_0210655C: ; 0x0210655C - .word FUN_020B1088 - .word FUN_020B1098 - .word 0 - .word 0 - .word 0 - - .global UNK_02106570 -UNK_02106570: ; 0x02106570 - .short -2 - - .balign 4, 0 - .global UNK_02106574 -UNK_02106574: ; 0x02106574 - .word -1 - - .global UNK_02106578 -UNK_02106578: ; 0x02106578 - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106590 -UNK_02106590: ; 0x02106590 - .byte 0x00, 0xF0, 0xFF, 0xFF - - .global UNK_02106594 -UNK_02106594: ; 0x02106594 - .byte 0x05, 0x00, 0x00, 0x00 - - .global UNK_02106598 -UNK_02106598: ; 0x02106598 - .word FUN_020BE5A0 - - .global UNK_0210659C -UNK_0210659C: ; 0x0210659C - .word FUN_020BDA70 - - .global UNK_021065A0 -UNK_021065A0: ; 0x021065A0 - .word FUN_020BDF38 - - .global UNK_021065A4 -UNK_021065A4: ; 0x021065A4 - .word FUN_020BE334 - - .global UNK_021065A8 -UNK_021065A8: ; 0x021065A8 - .word FUN_020BDB40 - - .global UNK_021065AC -UNK_021065AC: ; 0x021065AC - .word FUN_020B8640 - - .global UNK_021065B0 -UNK_021065B0: ; 0x021065B0 - .word FUN_020B86B0 - - .global UNK_021065B4 -UNK_021065B4: ; 0x021065B4 - .word FUN_020B8A08 - - .global UNK_021065B8 -UNK_021065B8: ; 0x021065B8 - .byte 0x4D, 0x00, 0x41, 0x4D - - .global UNK_021065BC -UNK_021065BC: ; 0x021065BC - .word FUN_020BDC0C - .byte 0x4D, 0x00, 0x50, 0x54 - .word FUN_020BE4F0 - .byte 0x4D, 0x00, 0x41, 0x54 - .word FUN_020BDF84 - .byte 0x56, 0x00, 0x41, 0x56 - .word FUN_020BE5E0 - .byte 0x4A, 0x00, 0x41, 0x43 - .word FUN_020BDAB4 - .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, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106608 -UNK_02106608: ; 0x02106608 - .word FUN_020BE668 - .word FUN_020BEE3C - .word FUN_020BF2FC - - .global UNK_02106614 -UNK_02106614: ; 0x02106614 - .word FUN_020BE62C - .word FUN_020BECEC - .word FUN_020BF0D4 - - .global UNK_02106620 -UNK_02106620: ; 0x02106620 - .word FUN_020BE6E4 - .word FUN_020BEF10 - .word FUN_020BF42C - .word FUN_020BFA9C - - .global UNK_02106630 -UNK_02106630: ; 0x02106630 - .byte 0x2A, 0x00, 0x00, 0x00 - - .global UNK_02106634 -UNK_02106634: ; 0x02106634 - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106638 -UNK_02106638: ; 0x02106638 - .byte 0x2A, 0x00, 0x00, 0x00 - - .global UNK_0210663C -UNK_0210663C: ; 0x0210663C - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106640 -UNK_02106640: ; 0x02106640 - .word FUN_020BA58C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106650 -UNK_02106650: ; 0x02106650 - .word FUN_020BA438 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106660 -UNK_02106660: ; 0x02106660 - .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, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 - - .global UNK_021066A0 -UNK_021066A0: ; 0x021066A0 - .byte 0x12, 0x10, 0x17, 0x1B - - .global UNK_021066A4 -UNK_021066A4: ; 0x021066A4 - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 - - .global UNK_021066AC -UNK_021066AC: ; 0x021066AC - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x10, 0x00, 0x00 - - .global UNK_021066D0 -UNK_021066D0: ; 0x021066D0 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021066DC -UNK_021066DC: ; 0x021066DC - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021066E8 -UNK_021066E8: ; 0x021066E8 - .byte 0x12, 0x10, 0x17, 0x1B - - .global UNK_021066EC -UNK_021066EC: ; 0x021066EC - .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 - - .global UNK_021066F4 -UNK_021066F4: ; 0x021066F4 - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x10, 0x00, 0x00 - - .global UNK_02106718 -UNK_02106718: ; 0x02106718 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106724 -UNK_02106724: ; 0x02106724 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106730 -UNK_02106730: ; 0x02106730 - .word FUN_020BAC70 - .word FUN_020BAC48 - .word FUN_020BAAC0 - .word FUN_020BA9EC - .word FUN_020BA50C - .word FUN_020BA3C4 - .word FUN_020B9F84 - .word FUN_020B9C54 - .word FUN_020B98C4 - .word FUN_020B9258 - .word FUN_020B9178 - .word FUN_020B9110 - .word FUN_020B8DF0 - .word FUN_020B8A60 - .byte 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_021067B0 -UNK_021067B0: ; 0x021067B0 - .word FUN_020BEBD8 - .word FUN_020BEB00 - .word FUN_020BEA84 - .word FUN_020BEA3C - .word FUN_020BE954 - .word FUN_020BE894 - .word FUN_020BE850 - .word FUN_020BE82C - - .global UNK_021067D0 -UNK_021067D0: ; 0x021067D0 - .word FUN_020BF988 - .word FUN_020BF894 - .word FUN_020BF810 - .word FUN_020BF7C8 - .word FUN_020BF6C8 - .word FUN_020BF5E8 - .word FUN_020BF598 - .word FUN_020BF574 - - .global UNK_021067F0 -UNK_021067F0: ; 0x021067F0 - .word FUN_020BFFD4 - .word FUN_020BFEEC - .word FUN_020BFE68 - .word FUN_020BFE0C - .word FUN_020BFD38 - .word FUN_020BFC8C - .word FUN_020BFC4C - .word FUN_020BFC28 - - .section .bss - - .global UNK_021CCD38 -UNK_021CCD38: ; 0x021CCD38 - .space 0x4 - - .global UNK_021CCD3C -UNK_021CCD3C: ; 0x021CCD3C - .space 0xc - - .global UNK_021CCD48 -UNK_021CCD48: ; 0x021CCD48 - .space 0x4 - - .global UNK_021CCD4C -UNK_021CCD4C: ; 0x021CCD4C - .space 0xc - - .global UNK_021CCD58 -UNK_021CCD58: ; 0x021CCD58 - .space 0x14 - - .global UNK_021CCD6C -UNK_021CCD6C: ; 0x021CCD6C - .space 0x4 - - .global UNK_021CCD70 -UNK_021CCD70: ; 0x021CCD70 - .space 0x4 - - .global UNK_021CCD74 -UNK_021CCD74: ; 0x021CCD74 - .space 0x14 - - .global UNK_021CCD88 -UNK_021CCD88: ; 0x021CCD88 - .space 0x4 - - .global UNK_021CCD8C -UNK_021CCD8C: ; 0x021CCD8C - .space 0x10 - - .global UNK_021CCD9C -UNK_021CCD9C: ; 0x021CCD9C - .space 0x4 - - .global UNK_021CCDA0 -UNK_021CCDA0: ; 0x021CCDA0 - .space 0x100 - - .global UNK_021CCEA0 -UNK_021CCEA0: ; 0x021CCEA0 - .space 0x400 - - .global UNK_021CD2A0 -UNK_021CD2A0: ; 0x021CD2A0 - .space 0x40 - - .global UNK_021CD2E0 -UNK_021CD2E0: ; 0x021CD2E0 - .space 0x100 - - .global UNK_021CD3E0 -UNK_021CD3E0: ; 0x021CD3E0 - .space 0x400 - - .global UNK_021CD7E0 -UNK_021CD7E0: ; 0x021CD7E0 - .space 0x40 - - .global UNK_021CD820 -UNK_021CD820: ; 0x021CD820 - .space 0x100 - - .global UNK_021CD920 -UNK_021CD920: ; 0x021CD920 - .space 0x400 - - .global UNK_021CDD20 -UNK_021CDD20: ; 0x021CDD20 - .space 0x40 - - .global UNK_021CDD60 -UNK_021CDD60: ; 0x021CDD60 - .space 0x4 - - .global UNK_021CDD64 -UNK_021CDD64: ; 0x021CDD64 - .space 0x4 - - .global UNK_021CDD68 -UNK_021CDD68: ; 0x021CDD68 - .space 0x4 - - .global UNK_021CDD6C -UNK_021CDD6C: ; 0x021CDD6C - .space 0x4 - - .global UNK_021CDD70 -UNK_021CDD70: ; 0x021CDD70 - .space 0x4 - - .global UNK_021CDD74 -UNK_021CDD74: ; 0x021CDD74 - .space 0x80 - - .global UNK_021CDDF4 -UNK_021CDDF4: ; 0x021CDDF4 - .space 0x4 - - .global UNK_021CDDF8 -UNK_021CDDF8: ; 0x021CDDF8 - .space 0xfc - - .global UNK_021CDEF4 -UNK_021CDEF4: ; 0x021CDEF4 - .space 0x10 - - .global UNK_021CDF04 -UNK_021CDF04: ; 0x021CDF04 - .space 0x4 - - .global UNK_021CDF08 -UNK_021CDF08: ; 0x021CDF08 - .space 0x2ec - - .global UNK_021CE1F4 -UNK_021CE1F4: ; 0x021CE1F4 - .space 0x300 - - .global UNK_021CE4F4 -UNK_021CE4F4: ; 0x021CE4F4 - .space 0x400 - - .global UNK_021CE8F4 -UNK_021CE8F4: ; 0x021CE8F4 - .space 0x4 - - .global UNK_021CE8F8 -UNK_021CE8F8: ; 0x021CE8F8 - .space 0x404 - - .global UNK_021CECFC -UNK_021CECFC: ; 0x021CECFC - .space 0x4 - - .global UNK_021CED00 -UNK_021CED00: ; 0x021CED00 - .space 0x4 - - .global UNK_021CED04 -UNK_021CED04: ; 0x021CED04 - .space 0x4 - - .global UNK_021CED08 -UNK_021CED08: ; 0x021CED08 - .space 0x4 - - .global UNK_021CED0C -UNK_021CED0C: ; 0x021CED0C - .space 0x4 - - .global UNK_021CED10 -UNK_021CED10: ; 0x021CED10 - .space 0x4 - - .global UNK_021CED14 -UNK_021CED14: ; 0x021CED14 - .space 0x4 - - .global UNK_021CED18 -UNK_021CED18: ; 0x021CED18 - .space 0x8 - - .global UNK_021CED20 -UNK_021CED20: ; 0x021CED20 - .space 0x44 - - .global UNK_021CED64 -UNK_021CED64: ; 0x021CED64 - .space 0x34 - - .global UNK_021CED98 -UNK_021CED98: ; 0x021CED98 - .space 0x28 - - .global UNK_021CEDC0 -UNK_021CEDC0: ; 0x021CEDC0 - .space 0x14 - - .global UNK_021CEDD4 -UNK_021CEDD4: ; 0x021CEDD4 - .space 0x24 - - .global UNK_021CEDF8 -UNK_021CEDF8: ; 0x021CEDF8 - .space 0xc - - .global UNK_021CEE04 -UNK_021CEE04: ; 0x021CEE04 - .space 0x14 - - .global UNK_021CEE18 -UNK_021CEE18: ; 0x021CEE18 - .space 0x30 - - .global UNK_021CEE48 -UNK_021CEE48: ; 0x021CEE48 - .space 0x30 - - .global UNK_021CEE78 -UNK_021CEE78: ; 0x021CEE78 - .space 0xe0 - - .global UNK_021CEF58 -UNK_021CEF58: ; 0x021CEF58 - .space 0xc - - .global UNK_021CEF64 -UNK_021CEF64: ; 0x021CEF64 - .space 0xc - - .global UNK_021CEF70 -UNK_021CEF70: ; 0x021CEF70 - .space 0xc - - .global UNK_021CEF7C -UNK_021CEF7C: ; 0x021CEF7C - .space 0x4 - - .global UNK_021CEF80 -UNK_021CEF80: ; 0x021CEF80 - .space 0xe00 - - .global UNK_021CFD80 -UNK_021CFD80: ; 0x021CFD80 - .space 0x4 - - .global UNK_021CFD84 -UNK_021CFD84: ; 0x021CFD84 - .space 0x4 - - .global UNK_021CFD88 -UNK_021CFD88: ; 0x021CFD88 - .space 0x4 - - .global UNK_021CFD8C -UNK_021CFD8C: ; 0x021CFD8C - .space 0x4 - - .global UNK_021CFD90 -UNK_021CFD90: ; 0x021CFD90 - .space 0x4 - - .global UNK_021CFD94 -UNK_021CFD94: ; 0x021CFD94 - .space 0x2ba - - .global UNK_021D004E -UNK_021D004E: ; 0x021D004E - .space 0x332 - - .global UNK_021D0380 -UNK_021D0380: ; 0x021D0380 - .space 0x40 - - .global UNK_021D03C0 -UNK_021D03C0: ; 0x021D03C0 - .space 0xb42 - - .global UNK_021D0F02 -UNK_021D0F02: ; 0x021D0F02 - .space 0xd7e - - .global UNK_021D1C80 -UNK_021D1C80: ; 0x021D1C80 - .space 0x4 - - .global UNK_021D1C84 -UNK_021D1C84: ; 0x021D1C84 - .space 0x4 - - .global UNK_021D1C88 -UNK_021D1C88: ; 0x021D1C88 - .space 0x4 - - .text - - arm_func_start FUN_020ADA84 -FUN_020ADA84: ; 0x020ADA84 - cmp r1, #0x0 - ldreq r0, [r0, #0x4] - ldrneh r0, [r0, #0xa] - ldrne r0, [r1, r0] - bx lr - - arm_func_start FUN_020ADA98 -FUN_020ADA98: ; 0x020ADA98 - cmp r1, #0x0 - ldreq r0, [r0, #0x0] - ldrneh r0, [r0, #0xa] - addne r0, r1, r0 - ldrne r0, [r0, #0x4] - bx lr - - arm_func_start FUN_020ADAB0 -FUN_020ADAB0: ; 0x020ADAB0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r12, [r0, #0xa] - ldr r3, [r1, r12] - add lr, r1, r12 - cmp r3, #0x0 - ldreq r1, [lr, #0x4] - streq r1, [r0, #0x0] - ldrne r2, [lr, #0x4] - addne r1, r3, r12 - strne r2, [r1, #0x4] - ldr r3, [lr, #0x4] - cmp r3, #0x0 - ldreq r1, [lr, #0x0] - streq r1, [r0, #0x4] - ldrneh r1, [r0, #0xa] - ldrne r2, [lr, #0x0] - strne r2, [r3, r1] - mov r1, #0x0 - str r1, [lr, #0x0] - str r1, [lr, #0x4] - ldrh r1, [r0, #0x8] - sub r1, r1, #0x1 - strh r1, [r0, #0x8] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020ADB18 -FUN_020ADB18: ; 0x020ADB18 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r1, #0x0 - bne _020ADB38 - mov r1, r2 - bl FUN_020ADBE8 - add sp, sp, #0x4 - ldmia sp!, {pc} -_020ADB38: - ldr r3, [r0, #0x0] - cmp r1, r3 - bne _020ADB54 - mov r1, r2 - bl FUN_020ADB8C - add sp, sp, #0x4 - ldmia sp!, {pc} -_020ADB54: - ldrh lr, [r0, #0xa] - ldr r3, [r1, lr] - add r12, r2, lr - str r3, [r2, lr] - str r1, [r12, #0x4] - add r3, r3, lr - str r2, [r3, #0x4] - ldrh r3, [r0, #0xa] - str r2, [r1, r3] - ldrh r1, [r0, #0x8] - add r1, r1, #0x1 - strh r1, [r0, #0x8] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020ADB8C -FUN_020ADB8C: ; 0x020ADB8C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x0] - cmp r2, #0x0 - bne _020ADBAC - bl FUN_020ADC48 - add sp, sp, #0x4 - ldmia sp!, {pc} -_020ADBAC: - ldrh r3, [r0, #0xa] - mov r2, #0x0 - str r2, [r1, r3] - ldr r2, [r0, #0x0] - add r3, r1, r3 - str r2, [r3, #0x4] - ldrh r2, [r0, #0xa] - ldr r3, [r0, #0x0] - str r1, [r3, r2] - str r1, [r0, #0x0] - ldrh r1, [r0, #0x8] - add r1, r1, #0x1 - strh r1, [r0, #0x8] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020ADBE8 -FUN_020ADBE8: ; 0x020ADBE8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x0] - cmp r2, #0x0 - bne _020ADC08 - bl FUN_020ADC48 - add sp, sp, #0x4 - ldmia sp!, {pc} -_020ADC08: - ldrh r12, [r0, #0xa] - ldr r3, [r0, #0x4] - mov r2, #0x0 - str r3, [r1, r12] - add r3, r1, r12 - str r2, [r3, #0x4] - ldrh r2, [r0, #0xa] - ldr r3, [r0, #0x4] - add r2, r3, r2 - str r1, [r2, #0x4] - str r1, [r0, #0x4] - ldrh r1, [r0, #0x8] - add r1, r1, #0x1 - strh r1, [r0, #0x8] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020ADC48 -FUN_020ADC48: ; 0x020ADC48 - ldrh r3, [r0, #0xa] - mov r2, #0x0 - add r12, r1, r3 - str r2, [r12, #0x4] - str r2, [r1, r3] - str r1, [r0, #0x0] - str r1, [r0, #0x4] - ldrh r1, [r0, #0x8] - add r1, r1, #0x1 - strh r1, [r0, #0x8] - bx lr - - arm_func_start FUN_020ADC74 -FUN_020ADC74: ; 0x020ADC74 - mov r2, #0x0 - str r2, [r0, #0x0] - str r2, [r0, #0x4] - strh r2, [r0, #0x8] - strh r1, [r0, #0xa] - bx lr - - arm_func_start FUN_020ADC8C -FUN_020ADC8C: ; 0x020ADC8C - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020ADD30 - mov r1, r4 - bl FUN_020ADAB0 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020ADCA4 -FUN_020ADCA4: - stmdb sp!, {r4,lr} - mov r4, r0 - str r1, [r4, #0x0] - str r2, [r4, #0x18] - str r3, [r4, #0x1c] - mov r0, #0x0 - str r0, [r4, #0x20] - ldr r1, [r4, #0x20] - ldrh r0, [sp, #0x8] - bic r1, r1, #0xff - str r1, [r4, #0x20] - ldr r1, [r4, #0x20] - and r0, r0, #0xff - orr r2, r1, r0 - add r0, r4, #0xc - mov r1, #0x4 - str r2, [r4, #0x20] - bl FUN_020ADC74 - ldr r0, _020ADD28 ; =UNK_021CCD38 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020ADD14 - ldr r0, _020ADD2C ; =UNK_021CCD3C - mov r1, #0x4 - bl FUN_020ADC74 - ldr r0, _020ADD28 ; =UNK_021CCD38 - mov r1, #0x1 - str r1, [r0, #0x0] -_020ADD14: - mov r0, r4 - bl FUN_020ADD30 - mov r1, r4 - bl FUN_020ADBE8 - ldmia sp!, {r4,pc} - .balign 4 -_020ADD28: .word UNK_021CCD38 -_020ADD2C: .word UNK_021CCD3C - - arm_func_start FUN_020ADD30 -FUN_020ADD30: ; 0x020ADD30 - stmdb sp!, {r4,lr} - ldr r4, _020ADD54 ; =UNK_021CCD3C - mov r1, r0 - mov r0, r4 - bl FUN_020ADD58 - cmp r0, #0x0 - addne r4, r0, #0xc - mov r0, r4 - ldmia sp!, {r4,pc} - .balign 4 -_020ADD54: .word UNK_021CCD3C - - arm_func_start FUN_020ADD58 -FUN_020ADD58: - stmdb sp!, {r4-r6,lr} - mov r5, r1 - mov r1, #0x0 - mov r6, r0 - bl FUN_020ADA98 - movs r4, r0 - beq _020ADDB8 -_020ADD74: - ldr r0, [r4, #0x18] - cmp r0, r5 - bhi _020ADDA4 - ldr r0, [r4, #0x1c] - cmp r5, r0 - bhs _020ADDA4 - mov r1, r5 - add r0, r4, #0xc - bl FUN_020ADD58 - cmp r0, #0x0 - moveq r0, r4 - ldmia sp!, {r4-r6,pc} -_020ADDA4: - mov r0, r6 - mov r1, r4 - bl FUN_020ADA98 - movs r4, r0 - bne _020ADD74 -_020ADDB8: - mov r0, #0x0 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020ADDC0 -FUN_020ADDC0: ; 0x020ADDC0 - ldr r0, [r0, #-0xc] - bx lr - - arm_func_start FUN_020ADDC8 -FUN_020ADDC8: ; 0x020ADDC8 - ldr r2, [r0, #0x24] - mov r0, #0x0 - cmp r2, #0x0 - bxeq lr -_020ADDD8: - ldr r1, [r2, #0x4] - ldr r2, [r2, #0xc] - add r0, r0, r1 - cmp r2, #0x0 - bne _020ADDD8 - bx lr - - arm_func_start FUN_020ADDF0 -FUN_020ADDF0: ; 0x020ADDF0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - sub r4, r1, #0x10 - add r5, r0, #0x24 - add r0, sp, #0x0 - mov r1, r4 - bl FUN_020AE528 - mov r1, r4 - add r0, r5, #0x8 - bl FUN_020AE500 - add r1, sp, #0x0 - mov r0, r5 - bl FUN_020AE02C - add sp, sp, #0xc - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020ADE2C -FUN_020ADE2C: ; 0x020ADE2C - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x10 - mov r4, r1 - mov r10, r2 - sub r6, r4, #0x10 - add r1, r10, #0x3 - mov r5, r0 - ldr r8, [r6, #0x4] - bic r10, r1, #0x3 - cmp r10, r8 - add r7, r5, #0x24 - addeq sp, sp, #0x10 - moveq r0, r10 - ldmeqia sp!, {r4-r10,pc} - cmp r10, r8 - bls _020ADF60 - ldr r9, [r7, #0x0] - add r0, r6, #0x10 - cmp r9, #0x0 - add r0, r8, r0 - beq _020ADE94 -_020ADE80: - cmp r9, r0 - beq _020ADE94 - ldr r9, [r9, #0xc] - cmp r9, #0x0 - bne _020ADE80 -_020ADE94: - cmp r9, #0x0 - beq _020ADEB0 - ldr r0, [r9, #0x4] - add r1, r8, #0x10 - add r0, r1, r0 - cmp r10, r0 - bls _020ADEBC -_020ADEB0: - add sp, sp, #0x10 - mov r0, #0x0 - ldmia sp!, {r4-r10,pc} -_020ADEBC: - add r0, sp, #0x0 - mov r1, r9 - bl FUN_020AE528 - mov r0, r7 - mov r1, r9 - bl FUN_020AE500 - ldr r2, [sp, #0x4] - add r3, r10, r4 - ldr r9, [sp, #0x0] - sub r1, r2, r3 - str r3, [sp, #0x0] - cmp r1, #0x10 - strcc r2, [sp, #0x0] - mov r8, r0 - ldr r0, [sp, #0x0] - sub r0, r0, r4 - str r0, [r6, #0x4] - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x0] - sub r0, r1, r0 - cmp r0, #0x10 - blo _020ADF30 - ldr r1, _020ADF9C ; =0x00004652 - add r0, sp, #0x0 - bl FUN_020AE4A0 - mov r1, r0 - mov r0, r7 - mov r2, r8 - bl FUN_020AE4D0 -_020ADF30: - ldr r0, [r5, #0x20] - ldr r1, [sp, #0x0] - and r0, r0, #0xff - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - sub r2, r1, r9 - ands r0, r0, #0x1 - beq _020ADF90 - mov r1, r9 - mov r0, #0x0 - bl MIi_CpuClear32 - b _020ADF90 -_020ADF60: - add r0, r10, r4 - str r0, [sp, #0x8] - ldr r1, [r6, #0x4] - add r0, r6, #0x10 - add r0, r1, r0 - str r0, [sp, #0xc] - add r1, sp, #0x8 - mov r0, r7 - str r10, [r6, #0x4] - bl FUN_020AE02C - cmp r0, #0x0 - streq r8, [r6, #0x4] -_020ADF90: - ldr r0, [r6, #0x4] - add sp, sp, #0x10 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020ADF9C: .word 0x00004652 - - arm_func_start tempName_NNS_FndAllocFromExpHeapEx -tempName_NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r1, #0x0 - moveq r1, #0x1 - add r1, r1, #0x3 - cmp r2, #0x0 - bic r1, r1, #0x3 - blt _020ADFCC - bl FUN_020AE1D8 - add sp, sp, #0x4 - ldmia sp!, {pc} -_020ADFCC: - rsb r2, r2, #0x0 - bl FUN_020AE11C - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start thunk_FUN_020adc8c -thunk_FUN_020adc8c: ; 0x020ADFDC - ldr ip, _020ADFE4 ; =FUN_020ADC8C - bx r12 - .balign 4 -_020ADFE4: .word FUN_020ADC8C - - arm_func_start tempName_NNS_FndCreateExpHeapEx -tempName_NNS_FndCreateExpHeapEx: ; 0x020ADFE8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - add r1, r1, r0 - add r0, r0, #0x3 - bic r1, r1, #0x3 - bic r0, r0, #0x3 - cmp r0, r1 - bhi _020AE014 - sub r3, r1, r0 - cmp r3, #0x4c - bhs _020AE020 -_020AE014: - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {pc} -_020AE020: - bl FUN_020AE420 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AE02C -FUN_020AE02C: - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - mov r5, r1 - ldr r2, [r5, #0x0] - ldr r1, [r5, #0x4] - mov r6, r0 - str r2, [sp, #0x0] - str r1, [sp, #0x4] - ldr r1, [r6, #0x0] - mov r4, #0x0 - cmp r1, #0x0 - beq _020AE0A0 - ldr r0, [r5, #0x0] -_020AE060: - cmp r1, r0 - movcc r4, r1 - blo _020AE094 - ldr r0, [r5, #0x4] - cmp r1, r0 - bne _020AE0A0 - ldr r2, [r1, #0x4] - add r0, r1, #0x10 - add r2, r2, r0 - mov r0, r6 - str r2, [sp, #0x4] - bl FUN_020AE500 - b _020AE0A0 -_020AE094: - ldr r1, [r1, #0xc] - cmp r1, #0x0 - bne _020AE060 -_020AE0A0: - cmp r4, #0x0 - beq _020AE0D4 - ldr r2, [r4, #0x4] - add r1, r4, #0x10 - ldr r0, [r5, #0x0] - add r1, r2, r1 - cmp r1, r0 - bne _020AE0D4 - mov r0, r6 - mov r1, r4 - str r4, [sp, #0x0] - bl FUN_020AE500 - mov r4, r0 -_020AE0D4: - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x0] - sub r0, r1, r0 - cmp r0, #0x10 - addcc sp, sp, #0x8 - movcc r0, #0x0 - ldmccia sp!, {r4-r6,pc} - ldr r1, _020AE118 ; =0x00004652 - add r0, sp, #0x0 - bl FUN_020AE4A0 - mov r1, r0 - mov r0, r6 - mov r2, r4 - bl FUN_020AE4D0 - mov r0, #0x1 - add sp, sp, #0x8 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020AE118: .word 0x00004652 - - arm_func_start FUN_020AE11C -FUN_020AE11C: ; 0x020AE11C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - add r0, r0, #0x24 - ldrh r4, [r0, #0x12] - mov r3, r1 - mvn lr, #0x0 - and r1, r4, #0x1 - mov r1, r1, lsl #0x10 - movs r1, r1, lsr #0x10 - moveq r5, #0x1 - mov r1, #0x0 - ldr r4, [r0, #0x4] - movne r5, #0x0 - mov r12, r1 - cmp r4, #0x0 - beq _020AE1B0 - sub r2, r2, #0x1 - mvn r2, r2 -_020AE164: - ldr r8, [r4, #0x4] - add r9, r4, #0x10 - add r6, r8, r9 - sub r6, r6, r3 - and r7, r2, r6 - subs r6, r7, r9 - bmi _020AE1A4 - cmp lr, r8 - bls _020AE1A4 - mov r1, r4 - mov lr, r8 - mov r12, r7 - cmp r5, #0x0 - bne _020AE1B0 - cmp r8, r3 - beq _020AE1B0 -_020AE1A4: - ldr r4, [r4, #0x8] - cmp r4, #0x0 - bne _020AE164 -_020AE1B0: - cmp r1, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r9,pc} - mov r4, #0x1 - mov r2, r12 - str r4, [sp, #0x0] - bl FUN_020AE298 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_020AE1D8 -FUN_020AE1D8: ; 0x020AE1D8 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - add r0, r0, #0x24 - ldrh r4, [r0, #0x12] - mov r3, r1 - ldr r5, [r0, #0x0] - and r1, r4, #0x1 - mov r1, r1, lsl #0x10 - movs r1, r1, lsr #0x10 - moveq r6, #0x1 - mov r1, #0x0 - movne r6, #0x0 - mov lr, r1 - cmp r5, #0x0 - mvn r4, #0x0 - beq _020AE270 - sub r12, r2, #0x1 - mvn r2, r12 -_020AE220: - add r8, r5, #0x10 - add r7, r12, r8 - and r9, r2, r7 - sub r7, r9, r8 - ldr r8, [r5, #0x4] - add r7, r3, r7 - cmp r8, r7 - blo _020AE264 - cmp r4, r8 - bls _020AE264 - mov r1, r5 - mov r4, r8 - mov lr, r9 - cmp r6, #0x0 - bne _020AE270 - cmp r8, r3 - beq _020AE270 -_020AE264: - ldr r5, [r5, #0xc] - cmp r5, #0x0 - bne _020AE220 -_020AE270: - cmp r1, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r9,pc} - mov r4, #0x0 - mov r2, lr - str r4, [sp, #0x0] - bl FUN_020AE298 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_020AE298 -FUN_020AE298: ; 0x020AE298 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x18 - mov r7, r0 - add r0, sp, #0x0 - mov r8, r1 - mov r6, r2 - mov r5, r3 - bl FUN_020AE528 - ldr r3, [sp, #0x4] - sub r4, r6, #0x10 - add r2, r5, r6 - mov r0, r7 - mov r1, r8 - str r4, [sp, #0x4] - str r3, [sp, #0xc] - str r2, [sp, #0x8] - bl FUN_020AE500 - ldr r2, [sp, #0x0] - ldr r1, [sp, #0x4] - mov r5, r0 - sub r0, r1, r2 - cmp r0, #0x10 - strcc r2, [sp, #0x4] - blo _020AE318 - ldr r1, _020AE418 ; =0x00004652 - add r0, sp, #0x0 - bl FUN_020AE4A0 - mov r1, r0 - mov r0, r7 - mov r2, r5 - bl FUN_020AE4D0 - mov r5, r0 -_020AE318: - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x8] - sub r0, r1, r0 - cmp r0, #0x10 - strcc r1, [sp, #0x8] - blo _020AE34C - ldr r1, _020AE418 ; =0x00004652 - add r0, sp, #0x8 - bl FUN_020AE4A0 - mov r1, r0 - mov r0, r7 - mov r2, r5 - bl FUN_020AE4D0 -_020AE34C: - ldr r0, [r7, #-0x4] - ldr r1, [sp, #0x4] - and r0, r0, #0xff - mov r0, r0, lsl #0x10 - ldr r2, [sp, #0x8] - mov r0, r0, lsr #0x10 - sub r2, r2, r1 - ands r0, r0, #0x1 - beq _020AE378 - mov r0, #0x0 - bl MIi_CpuClear32 -_020AE378: - ldr r2, [sp, #0x8] - ldr r1, _020AE41C ; =0x00005544 - add r0, sp, #0x10 - str r4, [sp, #0x10] - str r2, [sp, #0x14] - bl FUN_020AE4A0 - mov r1, r0 - ldrh r3, [r1, #0x2] - ldrh r2, [sp, #0x30] - add r0, r7, #0x8 - bic r3, r3, #0x8000 - strh r3, [r1, #0x2] - ldrh r3, [r1, #0x2] - and r2, r2, #0x1 - orr r2, r3, r2, lsl #0xf - strh r2, [r1, #0x2] - ldrh r2, [r1, #0x2] - ldr r3, [sp, #0x4] - bic r2, r2, #0x7f00 - strh r2, [r1, #0x2] - sub r2, r1, r3 - mov r2, r2, lsl #0x10 - mov r2, r2, lsr #0x10 - ldrh r3, [r1, #0x2] - and r2, r2, #0x7f - orr r2, r3, r2, lsl #0x8 - strh r2, [r1, #0x2] - ldrh r2, [r1, #0x2] - ldrh r3, [r7, #0x10] - bic r2, r2, #0xff - strh r2, [r1, #0x2] - ldrh r2, [r1, #0x2] - and r3, r3, #0xff - orr r2, r2, r3 - strh r2, [r1, #0x2] - ldr r2, [r7, #0xc] - bl FUN_020AE4D0 - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020AE418: .word 0x00004652 -_020AE41C: .word 0x00005544 - - arm_func_start FUN_020AE420 -FUN_020AE420: ; 0x020AE420 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r3, r1 - add r4, r5, #0x24 - str r2, [sp, #0x0] - ldr r1, _020AE498 ; =0x45585048 - add r2, r4, #0x14 - bl FUN_020ADCA4 - mov r0, #0x0 - strh r0, [r4, #0x10] - strh r0, [r4, #0x12] - ldrh r2, [r4, #0x12] - ldr r1, _020AE49C ; =0x00004652 - add r0, sp, #0x4 - bic r2, r2, #0x1 - strh r2, [r4, #0x12] - ldr r2, [r5, #0x18] - str r2, [sp, #0x4] - ldr r2, [r5, #0x1c] - str r2, [sp, #0x8] - bl FUN_020AE4A0 - str r0, [r5, #0x24] - str r0, [r4, #0x4] - mov r1, #0x0 - str r1, [r4, #0x8] - mov r0, r5 - str r1, [r4, #0xc] - add sp, sp, #0xc - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AE498: .word 0x45585048 -_020AE49C: .word 0x00004652 - - arm_func_start FUN_020AE4A0 -FUN_020AE4A0: ; 0x020AE4A0 - ldr r3, [r0, #0x0] - mov r2, #0x0 - strh r1, [r3, #0x0] - strh r2, [r3, #0x2] - ldr r1, [r0, #0x4] - add r0, r3, #0x10 - sub r0, r1, r0 - str r0, [r3, #0x4] - str r2, [r3, #0x8] - mov r0, r3 - str r2, [r3, #0xc] - bx lr - - arm_func_start FUN_020AE4D0 -FUN_020AE4D0: ; 0x020AE4D0 - str r2, [r1, #0x8] - cmp r2, #0x0 - ldrne r3, [r2, #0xc] - strne r1, [r2, #0xc] - ldreq r3, [r0, #0x0] - streq r1, [r0, #0x0] - str r3, [r1, #0xc] - cmp r3, #0x0 - strne r1, [r3, #0x8] - streq r1, [r0, #0x4] - mov r0, r1 - bx lr - - arm_func_start FUN_020AE500 -FUN_020AE500: ; 0x020AE500 - ldr r2, [r1, #0x8] - ldr r1, [r1, #0xc] - cmp r2, #0x0 - strne r1, [r2, #0xc] - streq r1, [r0, #0x0] - cmp r1, #0x0 - strne r2, [r1, #0x8] - streq r2, [r0, #0x4] - mov r0, r2 - bx lr - - arm_func_start FUN_020AE528 -FUN_020AE528: ; 0x020AE528 - ldrh r2, [r1, #0x2] - add r3, r1, #0x10 - mov r2, r2, asr #0x8 - and r2, r2, #0x7f - mov r2, r2, lsl #0x10 - sub r2, r1, r2, lsr #0x10 - str r2, [r0, #0x0] - ldr r1, [r1, #0x4] - add r1, r1, r3 - str r1, [r0, #0x4] - bx lr - - arm_func_start FUN_020AE554 -FUN_020AE554: ; 0x020AE554 - add r2, r0, #0x24 - cmp r1, #0x0 - ldr r3, [r2, #0x8] - beq _020AE584 - cmp r3, #0x0 - beq _020AE584 -_020AE56C: - ldr r0, [r3, #0x0] - cmp r0, r1 - beq _020AE584 - ldr r3, [r3, #0xc] - cmp r3, #0x0 - bne _020AE56C -_020AE584: - cmp r3, #0x0 - moveq r0, #0x0 - bxeq lr - ldr r1, [r3, #0x4] - mov r0, #0x1 - str r1, [r2, #0x0] - ldr r1, [r3, #0x8] - str r1, [r2, #0x4] - ldr r1, [r3, #0xc] - str r1, [r2, #0x8] - bx lr - - arm_func_start FUN_020AE5B0 -FUN_020AE5B0: ; 0x020AE5B0 - stmdb sp!, {r4-r6,lr} - add r4, r0, #0x24 - ldr r5, [r0, #0x24] - mov r6, r1 - mov r0, r4 - mov r1, #0x10 - mov r2, #0x4 - bl FUN_020AE77C - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - str r6, [r0, #0x0] - str r5, [r0, #0x4] - ldr r1, [r4, #0x4] - str r1, [r0, #0x8] - ldr r1, [r4, #0x8] - str r1, [r0, #0xc] - str r0, [r4, #0x8] - mov r0, #0x1 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AE600 -FUN_020AE600: ; 0x020AE600 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r5, r0 - ands r1, r4, #0x1 - beq _020AE61C - bl FUN_020AE6F8 -_020AE61C: - ands r0, r4, #0x2 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - mov r0, r5 - bl FUN_020AE6C8 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020AE638 -FUN_020AE638: ; 0x020AE638 - stmdb sp!, {lr} - sub sp, sp, #0x4 - cmp r1, #0x0 - moveq r1, #0x1 - add r1, r1, #0x3 - add r0, r0, #0x24 - cmp r2, #0x0 - bic r1, r1, #0x3 - blt _020AE668 - bl FUN_020AE77C - add sp, sp, #0x4 - ldmia sp!, {pc} -_020AE668: - rsb r2, r2, #0x0 - bl FUN_020AE710 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start thunk_FUN_020adc8c_2 -thunk_FUN_020adc8c_2: ; 0x020AE678 - ldr ip, _020AE680 ; =FUN_020ADC8C - bx r12 - .balign 4 -_020AE680: .word FUN_020ADC8C - - arm_func_start FUN_020AE684 -FUN_020AE684: ; 0x020AE684 - stmdb sp!, {lr} - sub sp, sp, #0x4 - add r1, r1, r0 - add r0, r0, #0x3 - bic r1, r1, #0x3 - bic r0, r0, #0x3 - cmp r0, r1 - bhi _020AE6B0 - sub r3, r1, r0 - cmp r3, #0x30 - bhs _020AE6BC -_020AE6B0: - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {pc} -_020AE6BC: - bl FUN_020AE7E0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AE6C8 -FUN_020AE6C8: ; 0x020AE6C8 - add r2, r0, #0x24 - ldr r3, [r2, #0x8] - cmp r3, #0x0 - beq _020AE6EC -_020AE6D8: - ldr r1, [r0, #0x1c] - str r1, [r3, #0x8] - ldr r3, [r3, #0xc] - cmp r3, #0x0 - bne _020AE6D8 -_020AE6EC: - ldr r0, [r0, #0x1c] - str r0, [r2, #0x4] - bx lr - - arm_func_start FUN_020AE6F8 -FUN_020AE6F8: ; 0x020AE6F8 - ldr r1, [r0, #0x18] - add r2, r0, #0x24 - str r1, [r0, #0x24] - mov r0, #0x0 - str r0, [r2, #0x8] - bx lr - - arm_func_start FUN_020AE710 -FUN_020AE710: ; 0x020AE710 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r3, [r5, #0x4] - sub r0, r2, #0x1 - mvn r2, r0 - sub r1, r3, r1 - ldr r0, [r5, #0x0] - and r4, r2, r1 - cmp r4, r0 - addcc sp, sp, #0x4 - movcc r0, #0x0 - ldmccia sp!, {r4-r5,pc} - ldr r0, [r5, #-0x4] - sub r2, r3, r4 - and r0, r0, #0xff - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - ands r0, r0, #0x1 - beq _020AE76C - mov r1, r4 - mov r0, #0x0 - bl MIi_CpuClear32 -_020AE76C: - mov r0, r4 - str r4, [r5, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020AE77C -FUN_020AE77C: - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, [r6, #0x0] - sub r2, r2, #0x1 - mvn r3, r2 - add r2, r2, r0 - and r5, r3, r2 - ldr r2, [r6, #0x4] - add r4, r1, r5 - cmp r4, r2 - movhi r0, #0x0 - ldmhiia sp!, {r4-r6,pc} - ldr r1, [r6, #-0x4] - sub r2, r4, r0 - and r1, r1, #0xff - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - ands r1, r1, #0x1 - beq _020AE7D4 - mov r1, r0 - mov r0, #0x0 - bl MIi_CpuClear32 -_020AE7D4: - mov r0, r5 - str r4, [r6, #0x0] - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AE7E0 -FUN_020AE7E0: ; 0x020AE7E0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r3, r1 - add r4, r5, #0x24 - str r2, [sp, #0x0] - ldr r1, _020AE828 ; =0x46524D48 - add r2, r4, #0xc - bl FUN_020ADCA4 - ldr r0, [r5, #0x18] - mov r1, #0x0 - str r0, [r5, #0x24] - ldr r2, [r5, #0x1c] - mov r0, r5 - str r2, [r4, #0x4] - str r1, [r4, #0x8] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AE828: .word 0x46524D48 - - arm_func_start FUN_020AE82C -FUN_020AE82C: ; 0x020AE82C - ldr ip, _020AE848 ; =UNK_020FF7CC - mov r3, #0x0 - str r12, [r0, #0x0] - str r1, [r0, #0x4] - str r2, [r0, #0x8] - str r3, [r0, #0xc] - bx lr - .balign 4 -_020AE848: .word UNK_020FF7CC - - arm_func_start FUN_020AE84C -FUN_020AE84C: ; 0x020AE84C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x0] - ldr r2, [r2, #0x4] - blx r2 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AE868 -FUN_020AE868: ; 0x020AE868 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x0] - ldr r2, [r2, #0x0] - blx r2 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AE884 -FUN_020AE884: ; 0x020AE884 - ldr ip, _020AE890 ; =FUN_020ADDF0 - ldr r0, [r0, #0x4] - bx r12 - .balign 4 -_020AE890: .word FUN_020ADDF0 - - arm_func_start FUN_020AE894 -FUN_020AE894: ; 0x020AE894 - ldr ip, _020AE8A8 ; =tempName_NNS_FndAllocFromExpHeapEx - mov r2, r0 - ldr r0, [r2, #0x4] - ldr r2, [r2, #0x8] - bx r12 - .balign 4 -_020AE8A8: .word tempName_NNS_FndAllocFromExpHeapEx - - arm_func_start FUN_020AE8AC -FUN_020AE8AC: ; 0x020AE8AC - mvn r0, #0x0 - bx lr - - arm_func_start FUN_020AE8B4 -FUN_020AE8B4: ; 0x020AE8B4 - mov r0, #0x0 - bx lr - - arm_func_start FUN_020AE8BC -FUN_020AE8BC: ; 0x020AE8BC - mvn r0, #0x0 - bx lr - - arm_func_start FUN_020AE8C4 -FUN_020AE8C4: ; 0x020AE8C4 - mov r0, #0x0 - bx lr - - arm_func_start FUN_020AE8CC -FUN_020AE8CC: ; 0x020AE8CC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, #0x0 - ldr r3, _020AE914 ; =UNK_021064E4 - mov r12, lr - mov r2, #0x1 -_020AE8E4: - ldr r1, [r0, r12, lsl #0x2] - add lr, lr, #0x1 - str r1, [r3, #0x0] - ldr r1, [r0, r2, lsl #0x2] - cmp lr, #0x5 - str r1, [r3, #0x4] - add r12, r12, #0x2 - add r3, r3, #0x18 - add r2, r2, #0x2 - blt _020AE8E4 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AE914: .word UNK_021064E4 - - arm_func_start FUN_020AE918 -FUN_020AE918: ; 0x020AE918 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov lr, #0x0 - ldr ip, _020AE960 ; =UNK_021064E4 - mov r3, lr - mov r2, #0x1 -_020AE930: - ldr r1, [r12, #0x0] - add lr, lr, #0x1 - str r1, [r0, r3, lsl #0x2] - ldr r1, [r12, #0x4] - cmp lr, #0x5 - str r1, [r0, r2, lsl #0x2] - add r12, r12, #0x18 - add r3, r3, #0x2 - add r2, r2, #0x2 - blt _020AE930 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AE960: .word UNK_021064E4 - - arm_func_start FUN_020AE964 -FUN_020AE964: ; 0x020AE964 - mov r0, #0x0 - bx lr - - arm_func_start FUN_020AE96C -FUN_020AE96C: ; 0x020AE96C - stmdb sp!, {r4-r10,lr} - cmp r0, #0x0 - moveq r7, #0x10 - addne r0, r0, #0xf - bicne r7, r0, #0xf - ldr r0, _020AEADC ; =0x0007FFF0 - cmp r7, r0 - movcs r0, #0x0 - ldmcsia sp!, {r4-r10,pc} - cmp r1, #0x0 - beq _020AEA5C - mov lr, r7, lsr #0x1 - mov r6, #0x0 - ldr r2, _020AEAE0 ; =UNK_02106514 - ldr r3, _020AEAE4 ; =UNK_021064FC - ldr ip, _020AEAE8 ; =UNK_021064C8 - mov r0, r6 -_020AE9B0: - ldr r5, [r12, r6, lsl #0x2] - ldr r4, [r5, #0x8] - cmp r4, #0x0 - beq _020AEA48 - ldr r9, [r5, #0x4] - ldr r4, [r5, #0x0] - sub r4, r9, r4 - cmp r4, r7 - blo _020AEA48 - ldrh r4, [r5, #0x10] - cmp r4, #0x0 - beq _020AE9EC - cmp r4, #0x3 - beq _020AE9F4 - b _020AE9FC -_020AE9EC: - mov r4, r3 - b _020AEA00 -_020AE9F4: - mov r4, r2 - b _020AEA00 -_020AE9FC: - mov r4, r0 -_020AEA00: - ldr r9, [r4, #0x8] - cmp r9, #0x0 - beq _020AEA48 - ldr r10, [r4, #0x4] - ldr r9, [r4, #0x0] - sub r9, r10, r9 - cmp r9, lr - blo _020AEA48 - ldr r3, [r5, #0x0] - mov r0, #0x1 - add r2, r3, r7 - str r2, [r5, #0x0] - ldr r2, [r4, #0x0] - add r2, r2, lr - str r2, [r4, #0x0] - ldr r2, [r5, #0x14] - add r8, r3, r2 - b _020AEAB8 -_020AEA48: - add r6, r6, #0x1 - cmp r6, #0x2 - blt _020AE9B0 - mov r0, #0x0 - b _020AEAB8 -_020AEA5C: - ldr r3, _020AEAEC ; =UNK_021064D0 - mov r5, #0x0 -_020AEA64: - ldr r4, [r3, r5, lsl #0x2] - ldr r0, [r4, #0x8] - cmp r0, #0x0 - beq _020AEAA8 - ldr r2, [r4, #0x4] - ldr r0, [r4, #0x0] - sub r0, r2, r0 - cmp r0, r7 - blo _020AEAA8 - ldr r2, [r4, #0x4] - mov r0, #0x1 - sub r2, r2, r7 - str r2, [r4, #0x4] - ldr r3, [r4, #0x4] - ldr r2, [r4, #0x14] - add r8, r3, r2 - b _020AEAB8 -_020AEAA8: - add r5, r5, #0x1 - cmp r5, #0x5 - blt _020AEA64 - mov r0, #0x0 -_020AEAB8: - cmp r0, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4-r10,pc} - ldr r0, _020AEAF0 ; =0x0000FFFF - mov r2, r7, lsr #0x4 - and r0, r0, r8, lsr #0x3 - orr r0, r0, r2, lsl #0x10 - orr r0, r0, r1, lsl #0x1f - ldmia sp!, {r4-r10,pc} - .balign 4 -_020AEADC: .word 0x0007FFF0 -_020AEAE0: .word UNK_02106514 -_020AEAE4: .word UNK_021064FC -_020AEAE8: .word UNK_021064C8 -_020AEAEC: .word UNK_021064D0 -_020AEAF0: .word 0x0000FFFF - - arm_func_start FUN_020AEAF4 -FUN_020AEAF4: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r0, _020AEB68 ; =UNK_021CCD48 - mov r6, #0x0 - ldrh r7, [r0, #0x0] - ldr r5, _020AEB6C ; =UNK_021064E4 - mov lr, r6 - cmp r7, #0x1 - addhi r7, r7, #0x1 - mov r1, r6 - mov r3, r6 - mov r4, #0x1 - mov r0, #0x20000 - mov r2, #0x10000 -_020AEB2C: - cmp r6, r7 - strlt r4, [r5, #0x8] - strge lr, [r5, #0x8] - ldr r12, [r5, #0xc] - add r6, r6, #0x1 - cmp r12, #0x0 - strne r3, [r5, #0x0] - strne r2, [r5, #0x4] - streq r1, [r5, #0x0] - streq r0, [r5, #0x4] - cmp r6, #0x5 - add r5, r5, #0x18 - blt _020AEB2C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020AEB68: .word UNK_021CCD48 -_020AEB6C: .word UNK_021064E4 - - arm_func_start FUN_020AEB70 -FUN_020AEB70: ; 0x020AEB70 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - cmp r5, #0x2 - bhi _020AEBA8 - mov r12, #0x1 - mov r0, #0x4 - mov r1, #0x3 - mov r2, #0x2 - mov r3, #0x0 - str r12, [sp, #0x0] - bl FUN_020AEC10 - b _020AEBC4 -_020AEBA8: - mov r12, #0x1 - mov r0, #0x4 - mov r1, #0x3 - mov r2, #0x0 - mov r3, #0x2 - str r12, [sp, #0x0] - bl FUN_020AEC10 -_020AEBC4: - ldr r0, _020AEBFC ; =UNK_021CCD48 - strh r5, [r0, #0x0] - bl FUN_020AEAF4 - cmp r4, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r3, _020AEC00 ; =FUN_020AE96C - ldr r1, _020AEC04 ; =UNK_021064B8 - ldr r2, _020AEC08 ; =FUN_020AE964 - ldr r0, _020AEC0C ; =UNK_021064BC - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AEBFC: .word UNK_021CCD48 -_020AEC00: .word FUN_020AE96C -_020AEC04: .word UNK_021064B8 -_020AEC08: .word FUN_020AE964 -_020AEC0C: .word UNK_021064BC - - arm_func_start FUN_020AEC10 -FUN_020AEC10: ; 0x020AEC10 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr lr, [sp, #0x18] - ldr r6, _020AEC58 ; =UNK_021064E4 - mov r12, #0x18 - mla r7, r0, r12, r6 - ldr r0, _020AEC5C ; =UNK_021064D0 - mla r5, r1, r12, r6 - mla r4, r2, r12, r6 - mla r2, r3, r12, r6 - mla r1, lr, r12, r6 - str r7, [r0, #0x0] - str r5, [r0, #0x4] - str r4, [r0, #0x8] - str r2, [r0, #0xc] - str r1, [r0, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020AEC58: .word UNK_021064E4 -_020AEC5C: .word UNK_021064D0 - - arm_func_start FUN_020AEC60 -FUN_020AEC60: - ldr r0, _020AEC78 ; =UNK_021CCD4C - mov r2, #0x0 - ldr r1, [r0, #0x8] - str r2, [r0, #0x0] - str r1, [r0, #0x4] - bx lr - .balign 4 -_020AEC78: .word UNK_021CCD4C - - arm_func_start FUN_020AEC7C -FUN_020AEC7C: ; 0x020AEC7C - ldr r2, [r0, #0x0] - ldr r1, _020AEC94 ; =UNK_021CCD4C - str r2, [r1, #0x0] - ldr r0, [r0, #0x4] - str r0, [r1, #0x4] - bx lr - .balign 4 -_020AEC94: .word UNK_021CCD4C - - arm_func_start FUN_020AEC98 -FUN_020AEC98: ; 0x020AEC98 - ldr r1, _020AECB0 ; =UNK_021CCD4C - ldr r2, [r1, #0x0] - str r2, [r0, #0x0] - ldr r1, [r1, #0x4] - str r1, [r0, #0x4] - bx lr - .balign 4 -_020AECB0: .word UNK_021CCD4C - - arm_func_start FUN_020AECB4 -FUN_020AECB4: ; 0x020AECB4 - mov r0, #0x0 - bx lr - - arm_func_start FUN_020AECBC -FUN_020AECBC: ; 0x020AECBC - stmdb sp!, {r4,lr} - cmp r0, #0x0 - moveq r0, #0x8 - addne r0, r0, #0x7 - ldr ip, _020AEDE8 ; =0x0007FFF8 - bicne r0, r0, #0x7 - cmp r0, r12 - mov r3, #0x0 - movcs r0, #0x0 - ldmcsia sp!, {r4,pc} - cmp r2, #0x1 - bne _020AED64 - ldr r2, _020AEDEC ; =UNK_021CCD4C - cmp r1, #0x0 - ldr r12, [r2, #0x0] - andne r2, r12, #0x7 - rsbne r2, r2, #0x8 - andne r4, r2, #0x7 - andeq r2, r12, #0xf - rsbeq r2, r2, #0x10 - andeq r4, r2, #0xf - ldr r2, _020AEDEC ; =UNK_021CCD4C - add lr, r0, r4 - ldr r2, [r2, #0x4] - sub r2, r2, r12 - cmp r2, lr - blo _020AED5C - cmp r1, #0x0 - add r1, r12, lr - beq _020AED40 - cmp r1, #0x10000 - movhi r12, #0x0 - bhi _020AEDCC -_020AED40: - ldr r1, _020AEDEC ; =UNK_021CCD4C - add r3, r12, r4 - ldr r2, [r1, #0x0] - mov r12, #0x1 - add r2, r2, lr - str r2, [r1, #0x0] - b _020AEDCC -_020AED5C: - mov r12, #0x0 - b _020AEDCC -_020AED64: - ldr r2, _020AEDEC ; =UNK_021CCD4C - ldr r12, [r2, #0x4] - cmp r12, r0 - blo _020AEDC8 - sub r2, r12, r0 - cmp r1, #0x0 - andne r4, r2, #0x7 - andeq r4, r2, #0xf - ldr r2, _020AEDEC ; =UNK_021CCD4C - add lr, r0, r4 - ldr r2, [r2, #0x0] - sub r2, r12, r2 - cmp r2, lr - blo _020AEDC8 - cmp r1, #0x0 - beq _020AEDB0 - cmp r12, #0x10000 - movhi r12, #0x0 - bhi _020AEDCC -_020AEDB0: - ldr r1, _020AEDEC ; =UNK_021CCD4C - mov r12, #0x1 - ldr r2, [r1, #0x4] - sub r3, r2, lr - str r3, [r1, #0x4] - b _020AEDCC -_020AEDC8: - mov r12, #0x0 -_020AEDCC: - cmp r12, #0x0 - ldrne r1, _020AEDF0 ; =0x0000FFFF - movne r2, r0, lsr #0x3 - andne r0, r1, r3, lsr #0x3 - orrne r0, r0, r2, lsl #0x10 - moveq r0, #0x0 - ldmia sp!, {r4,pc} - .balign 4 -_020AEDE8: .word 0x0007FFF8 -_020AEDEC: .word UNK_021CCD4C -_020AEDF0: .word 0x0000FFFF - - arm_func_start FUN_020AEDF4 -FUN_020AEDF4: ; 0x020AEDF4 - stmdb sp!, {r4,lr} - ldr r2, _020AEE2C ; =UNK_021CCD4C - mov r4, r1 - str r0, [r2, #0x8] - bl FUN_020AEC60 - cmp r4, #0x0 - ldmeqia sp!, {r4,pc} - ldr r3, _020AEE30 ; =FUN_020AECBC - ldr r1, _020AEE34 ; =UNK_021064C0 - ldr r2, _020AEE38 ; =FUN_020AECB4 - ldr r0, _020AEE3C ; =UNK_021064C4 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020AEE2C: .word UNK_021CCD4C -_020AEE30: .word FUN_020AECBC -_020AEE34: .word UNK_021064C0 -_020AEE38: .word FUN_020AECB4 -_020AEE3C: .word UNK_021064C4 - - arm_func_start FUN_020AEE40 -FUN_020AEE40: ; 0x020AEE40 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r5, _020AEEB4 ; =UNK_021CCD58 - mov r9, r0 - mov r0, r5 - mov r8, r1 - mov r7, r2 - mov r6, r3 - bl FUN_020AF2F4 - cmp r0, #0x0 - addne sp, sp, #0x4 - movne r0, #0x0 - ldmneia sp!, {r4-r9,pc} - mov r0, r5 - bl FUN_020AEF78 - mov r4, r0 - str r9, [r4, #0x0] - str r7, [r4, #0x4] - str r8, [r4, #0x8] - mov r0, r5 - str r6, [r4, #0xc] - bl FUN_020AEF98 - ldr r2, [r5, #0x10] - ldr r1, [r4, #0xc] - mov r0, #0x1 - add r1, r2, r1 - str r1, [r5, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020AEEB4: .word UNK_021CCD58 - - arm_func_start FUN_020AEEB8 -FUN_020AEEB8: ; 0x020AEEB8 - stmdb sp!, {r4-r6,lr} - ldr r6, _020AEF18 ; =UNK_021CCD58 - mov r0, r6 - bl FUN_020AEF88 - mov r5, r0 - mov r0, r6 - bl FUN_020AEF3C - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - add r4, r6, #0x10 -_020AEEE0: - mov r0, r5 - bl FUN_020AEFF0 - ldr r2, [r4, #0x0] - ldr r1, [r5, #0xc] - mov r0, r6 - sub r1, r2, r1 - str r1, [r4, #0x0] - bl FUN_020AEF88 - mov r5, r0 - mov r0, r6 - bl FUN_020AEF3C - cmp r0, #0x0 - bne _020AEEE0 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020AEF18: .word UNK_021CCD58 - - arm_func_start FUN_020AEF1C -FUN_020AEF1C: ; 0x020AEF1C - ldr r2, _020AEF34 ; =UNK_021CCD58 - ldr ip, _020AEF38 ; =FUN_020AEFD4 - str r0, [r2, #0x0] - mov r0, r2 - str r1, [r2, #0x4] - bx r12 - .balign 4 -_020AEF34: .word UNK_021CCD58 -_020AEF38: .word FUN_020AEFD4 - - arm_func_start FUN_020AEF3C -FUN_020AEF3C: - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020AF2E0 - cmp r0, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - ldrh r1, [r4, #0x8] - mov r0, r4 - bl FUN_020AF30C - strh r0, [r4, #0x8] - ldrh r1, [r4, #0xc] - mov r0, #0x1 - sub r1, r1, #0x1 - strh r1, [r4, #0xc] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020AEF78 -FUN_020AEF78: ; 0x020AEF78 - ldrh r1, [r0, #0xa] - ldr r0, [r0, #0x0] - add r0, r0, r1, lsl #0x4 - bx lr - - arm_func_start FUN_020AEF88 -FUN_020AEF88: ; 0x020AEF88 - ldrh r1, [r0, #0x8] - ldr r0, [r0, #0x0] - add r0, r0, r1, lsl #0x4 - bx lr - - arm_func_start FUN_020AEF98 -FUN_020AEF98: ; 0x020AEF98 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020AF2F4 - cmp r0, #0x0 - movne r0, #0x0 - ldmneia sp!, {r4,pc} - ldrh r1, [r4, #0xa] - mov r0, r4 - bl FUN_020AF30C - strh r0, [r4, #0xa] - ldrh r1, [r4, #0xc] - mov r0, #0x1 - add r1, r1, #0x1 - strh r1, [r4, #0xc] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020AEFD4 -FUN_020AEFD4: ; 0x020AEFD4 - mov r2, #0x0 - strh r2, [r0, #0xa] - ldrh r1, [r0, #0xa] - strh r1, [r0, #0x8] - strh r2, [r0, #0xc] - str r2, [r0, #0x10] - bx lr - - arm_func_start FUN_020AEFF0 -FUN_020AEFF0: ; 0x020AEFF0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r3, [r5, #0x0] - ldr r2, _020AF02C ; =UNK_020FF7D4 - ldr r0, [r5, #0x4] - ldr r1, [r5, #0xc] - ldr r4, [r2, r3, lsl #0x2] - bl DC_FlushRange - ldr r0, [r5, #0x4] - ldr r1, [r5, #0x8] - ldr r2, [r5, #0xc] - blx r4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AF02C: .word UNK_020FF7D4 - - arm_func_start GXS_LoadOBJ_2 -GXS_LoadOBJ_2: - ldr ip, _020AF038 ; =GXS_LoadOBJ - bx r12 - .balign 4 -_020AF038: .word GXS_LoadOBJ - - arm_func_start GXS_LoadOAM_2 -GXS_LoadOAM_2: ; 0x020AF03C - ldr ip, _020AF044 ; =GXS_LoadOAM - bx r12 - .balign 4 -_020AF044: .word GXS_LoadOAM - - arm_func_start FUN_020AF048 -FUN_020AF048: ; 0x020AF048 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl GXS_BeginLoadBGExtPltt - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl GXS_LoadBGExtPltt - bl GXS_EndLoadBGExtPltt - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AF074 -FUN_020AF074: ; 0x020AF074 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl GXS_BeginLoadOBJExtPltt - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl GXS_LoadOBJExtPltt - bl GXS_EndLoadOBJExtPltt - ldmia sp!, {r4-r6,pc} - - arm_func_start GXS_LoadBGPltt_2 -GXS_LoadBGPltt_2: ; 0x020AF0A0 - ldr ip, _020AF0A8 ; =GXS_LoadBGPltt - bx r12 - .balign 4 -_020AF0A8: .word GXS_LoadBGPltt - - arm_func_start GXS_LoadOBJPltt_2 -GXS_LoadOBJPltt_2: ; 0x020AF0AC - ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt - bx r12 - .balign 4 -_020AF0B4: .word GXS_LoadOBJPltt - - arm_func_start GXS_LoadBG3Scr_3 -GXS_LoadBG3Scr_3: ; 0x020AF0B8 - ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr - bx r12 - .balign 4 -_020AF0C0: .word GXS_LoadBG3Scr - - arm_func_start GXS_LoadBG2Scr_3 -GXS_LoadBG2Scr_3: ; 0x020AF0C4 - ldr ip, _020AF0CC ; =GXS_LoadBG2Scr - bx r12 - .balign 4 -_020AF0CC: .word GXS_LoadBG2Scr - - arm_func_start GXS_LoadBG3Scr_2 -GXS_LoadBG3Scr_2: ; 0x020AF0D0 - ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr - bx r12 - .balign 4 -_020AF0D8: .word GXS_LoadBG3Scr - - arm_func_start GXS_LoadBG2Scr_2 -GXS_LoadBG2Scr_2: ; 0x020AF0DC - ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr - bx r12 - .balign 4 -_020AF0E4: .word GXS_LoadBG2Scr - - arm_func_start GXS_LoadBG1Scr_2 -GXS_LoadBG1Scr_2: ; 0x020AF0E8 - ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr - bx r12 - .balign 4 -_020AF0F0: .word GXS_LoadBG1Scr - - arm_func_start GXS_LoadBG0Scr_2 -GXS_LoadBG0Scr_2: ; 0x020AF0F4 - ldr ip, _020AF0FC ; =GXS_LoadBG0Scr - bx r12 - .balign 4 -_020AF0FC: .word GXS_LoadBG0Scr - - arm_func_start GXS_LoadBG3Char_2 -GXS_LoadBG3Char_2: ; 0x020AF100 - ldr ip, _020AF108 ; =GXS_LoadBG3Char - bx r12 - .balign 4 -_020AF108: .word GXS_LoadBG3Char - - arm_func_start GXS_LoadBG2Char_2 -GXS_LoadBG2Char_2: ; 0x020AF10C - ldr ip, _020AF114 ; =GXS_LoadBG2Char - bx r12 - .balign 4 -_020AF114: .word GXS_LoadBG2Char - - arm_func_start GXS_LoadBG1Char_2 -GXS_LoadBG1Char_2: ; 0x020AF118 - ldr ip, _020AF120 ; =GXS_LoadBG1Char - bx r12 - .balign 4 -_020AF120: .word GXS_LoadBG1Char - - arm_func_start GXS_LoadBG0Char_2 -GXS_LoadBG0Char_2: ; 0x020AF124 - ldr ip, _020AF12C ; =GXS_LoadBG0Char - bx r12 - .balign 4 -_020AF12C: .word GXS_LoadBG0Char - - arm_func_start GX_LoadOBJ_2 -GX_LoadOBJ_2: ; 0x020AF130 - ldr ip, _020AF138 ; =GX_LoadOBJ - bx r12 - .balign 4 -_020AF138: .word GX_LoadOBJ - - arm_func_start GX_LoadOAM_2 -GX_LoadOAM_2: ; 0x020AF13C - ldr ip, _020AF144 ; =GX_LoadOAM - bx r12 - .balign 4 -_020AF144: .word GX_LoadOAM - - arm_func_start FUN_020AF148 -FUN_020AF148: ; 0x020AF148 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl GX_BeginLoadBGExtPltt - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl GX_LoadBGExtPltt - bl GX_EndLoadBGExtPltt - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AF174 -FUN_020AF174: ; 0x020AF174 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl GX_BeginLoadOBJExtPltt - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl GX_LoadOBJExtPltt - bl GX_EndLoadOBJExtPltt - ldmia sp!, {r4-r6,pc} - - arm_func_start GX_LoadBGPltt_2 -GX_LoadBGPltt_2: ; 0x020AF1A0 - ldr ip, _020AF1A8 ; =GX_LoadBGPltt - bx r12 - .balign 4 -_020AF1A8: .word GX_LoadBGPltt - - arm_func_start GX_LoadOBJPltt_2 -GX_LoadOBJPltt_2: ; 0x020AF1AC - ldr ip, _020AF1B4 ; =GX_LoadOBJPltt - bx r12 - .balign 4 -_020AF1B4: .word GX_LoadOBJPltt - - arm_func_start GX_LoadBG3Scr_3 -GX_LoadBG3Scr_3: ; 0x020AF1B8 - ldr ip, _020AF1C0 ; =GX_LoadBG3Scr - bx r12 - .balign 4 -_020AF1C0: .word GX_LoadBG3Scr - - arm_func_start GX_LoadBG2Scr_3 -GX_LoadBG2Scr_3: ; 0x020AF1C4 - ldr ip, _020AF1CC ; =GX_LoadBG2Scr - bx r12 - .balign 4 -_020AF1CC: .word GX_LoadBG2Scr - - arm_func_start GX_LoadBG3Scr_2 -GX_LoadBG3Scr_2: ; 0x020AF1D0 - ldr ip, _020AF1D8 ; =GX_LoadBG3Scr - bx r12 - .balign 4 -_020AF1D8: .word GX_LoadBG3Scr - - arm_func_start GX_LoadBG2Scr_2 -GX_LoadBG2Scr_2: ; 0x020AF1DC - ldr ip, _020AF1E4 ; =GX_LoadBG2Scr - bx r12 - .balign 4 -_020AF1E4: .word GX_LoadBG2Scr - - arm_func_start GX_LoadBG1Scr_2 -GX_LoadBG1Scr_2: ; 0x020AF1E8 - ldr ip, _020AF1F0 ; =GX_LoadBG1Scr - bx r12 - .balign 4 -_020AF1F0: .word GX_LoadBG1Scr - - arm_func_start GX_LoadBG0Scr_2 -GX_LoadBG0Scr_2: ; 0x020AF1F4 - ldr ip, _020AF1FC ; =GX_LoadBG0Scr - bx r12 - .balign 4 -_020AF1FC: .word GX_LoadBG0Scr - - arm_func_start GX_LoadBG3Char_2 -GX_LoadBG3Char_2: ; 0x020AF200 - ldr ip, _020AF208 ; =GX_LoadBG3Char - bx r12 - .balign 4 -_020AF208: .word GX_LoadBG3Char - - arm_func_start GX_LoadBG2Char_2 -GX_LoadBG2Char_2: ; 0x020AF20C - ldr ip, _020AF214 ; =GX_LoadBG2Char - bx r12 - .balign 4 -_020AF214: .word GX_LoadBG2Char - - arm_func_start GX_LoadBG1Char_2 -GX_LoadBG1Char_2: ; 0x020AF218 - ldr ip, _020AF220 ; =GX_LoadBG1Char - bx r12 - .balign 4 -_020AF220: .word GX_LoadBG1Char - - arm_func_start GX_LoadBG0Char_2 -GX_LoadBG0Char_2: ; 0x020AF224 - ldr ip, _020AF22C ; =GX_LoadBG0Char - bx r12 - .balign 4 -_020AF22C: .word GX_LoadBG0Char - - arm_func_start FUN_020AF230 -FUN_020AF230: ; 0x020AF230 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r2 - bl GX_BeginLoadClearImage - mov r0, r5 - mov r1, r4 - bl GX_LoadClearImageDepth - bl GX_EndLoadClearImage - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020AF25C -FUN_020AF25C: ; 0x020AF25C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r2 - bl GX_BeginLoadClearImage - mov r0, r5 - mov r1, r4 - bl GX_LoadClearImageColor - bl GX_EndLoadClearImage - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020AF288 -FUN_020AF288: ; 0x020AF288 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl GX_BeginLoadTexPltt - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl GX_LoadTexPltt - bl GX_EndLoadTexPltt - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AF2B4 -FUN_020AF2B4: ; 0x020AF2B4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - mov r5, r1 - mov r4, r2 - bl GX_BeginLoadTex - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl GX_LoadTex - bl GX_EndLoadTex - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AF2E0 -FUN_020AF2E0: ; 0x020AF2E0 - ldrh r0, [r0, #0xc] - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - bx lr - - arm_func_start FUN_020AF2F4 -FUN_020AF2F4: ; 0x020AF2F4 - ldrh r1, [r0, #0xc] - ldr r0, [r0, #0x4] - cmp r1, r0 - moveq r0, #0x1 - movne r0, #0x0 - bx lr - - arm_func_start FUN_020AF30C -FUN_020AF30C: ; 0x020AF30C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, r0 - add r0, r1, #0x1 - ldr r1, [r2, #0x4] - bl _u32_div_f - mov r0, r1, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AF334 -FUN_020AF334: - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x10 - add r3, r2, r3 - str r2, [sp, #0x0] - str r2, [sp, #0x8] - str r3, [sp, #0x4] - str r3, [sp, #0xc] - ldr r3, [r0, #0x0] - add r12, sp, #0x0 - cmp r3, #0x0 - beq _020AF418 - mov r6, #0x0 -_020AF364: - ldr r5, [r3, #0x0] - ldr r4, [r12, #0x4] - ldr r2, [r3, #0xc] - cmp r5, r4 - bne _020AF3B8 - ldr r4, [r3, #0x4] - add r4, r5, r4 - str r4, [sp, #0xc] - ldr r4, [r3, #0x8] - cmp r4, #0x0 - strne r2, [r4, #0xc] - streq r2, [r0, #0x0] - cmp r2, #0x0 - strne r4, [r2, #0x8] - ldr r4, [r1, #0x0] - cmp r4, #0x0 - strne r3, [r4, #0x8] - ldr r4, [r1, #0x0] - str r4, [r3, #0xc] - str r6, [r3, #0x8] - str r3, [r1, #0x0] -_020AF3B8: - ldr r5, [r3, #0x0] - ldr lr, [r3, #0x4] - ldr r4, [r12, #0x0] - add lr, r5, lr - cmp r4, lr - bne _020AF40C - str r5, [sp, #0x8] - ldr r5, [r3, #0x8] - ldr r4, [r3, #0xc] - cmp r5, #0x0 - strne r4, [r5, #0xc] - streq r4, [r0, #0x0] - cmp r4, #0x0 - strne r5, [r4, #0x8] - ldr lr, [r1, #0x0] - cmp lr, #0x0 - strne r3, [lr, #0x8] - ldr lr, [r1, #0x0] - str lr, [r3, #0xc] - str r6, [r3, #0x8] - str r3, [r1, #0x0] -_020AF40C: - mov r3, r2 - cmp r2, #0x0 - bne _020AF364 -_020AF418: - ldr r4, [r1, #0x0] - cmp r4, #0x0 - ldrne r2, [r4, #0xc] - strne r2, [r1, #0x0] - cmp r4, #0x0 - addeq sp, sp, #0x10 - moveq r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r2, [sp, #0x8] - mov r1, #0x0 - str r2, [r4, #0x0] - ldr r3, [sp, #0xc] - ldr r2, [sp, #0x8] - sub r2, r3, r2 - str r2, [r4, #0x4] - str r1, [r4, #0x8] - str r1, [r4, #0xc] - ldr r1, [r0, #0x0] - cmp r1, #0x0 - strne r4, [r1, #0x8] - ldr r2, [r0, #0x0] - mov r1, #0x0 - str r2, [r4, #0xc] - str r1, [r4, #0x8] - str r4, [r0, #0x0] - mov r0, #0x1 - add sp, sp, #0x10 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AF488 -FUN_020AF488: - stmdb sp!, {r4-r10,lr} - ldr r4, [r0, #0x0] - ldr r9, [sp, #0x20] - cmp r4, #0x0 - mov r5, #0x0 - beq _020AF4EC - sub r12, r9, #0x1 - mvn lr, r12 -_020AF4A8: - cmp r9, #0x1 - ldrls r8, [r4, #0x0] - movls r6, r5 - movls r7, r3 - bls _020AF4D0 - ldr r7, [r4, #0x0] - add r6, r7, r12 - and r8, lr, r6 - sub r6, r8, r7 - add r7, r3, r6 -_020AF4D0: - ldr r10, [r4, #0x4] - cmp r10, r7 - movcs r5, r4 - bhs _020AF4EC - ldr r4, [r4, #0xc] - cmp r4, #0x0 - bne _020AF4A8 -_020AF4EC: - cmp r5, #0x0 - beq _020AF5B8 - cmp r6, #0x0 - beq _020AF54C - ldr r9, [r1, #0x0] - cmp r9, #0x0 - ldrne r3, [r9, #0xc] - strne r3, [r1, #0x0] - cmp r9, #0x0 - beq _020AF5B8 - ldr r4, [r5, #0x0] - mov r3, #0x0 - str r4, [r9, #0x0] - str r6, [r9, #0x4] - str r3, [r9, #0x8] - str r3, [r9, #0xc] - ldr r3, [r0, #0x0] - cmp r3, #0x0 - strne r9, [r3, #0x8] - ldr r4, [r0, #0x0] - mov r3, #0x0 - str r4, [r9, #0xc] - str r3, [r9, #0x8] - str r9, [r0, #0x0] -_020AF54C: - ldr r3, [r5, #0x4] - sub r3, r3, r7 - str r3, [r5, #0x4] - ldr r3, [r5, #0x0] - add r3, r3, r7 - str r3, [r5, #0x0] - ldr r3, [r5, #0x4] - cmp r3, #0x0 - bne _020AF5AC - ldr r4, [r5, #0x8] - ldr r3, [r5, #0xc] - cmp r4, #0x0 - strne r3, [r4, #0xc] - streq r3, [r0, #0x0] - cmp r3, #0x0 - strne r4, [r3, #0x8] - ldr r0, [r1, #0x0] - cmp r0, #0x0 - strne r5, [r0, #0x8] - ldr r3, [r1, #0x0] - mov r0, #0x0 - str r3, [r5, #0xc] - str r0, [r5, #0x8] - str r5, [r1, #0x0] -_020AF5AC: - str r8, [r2, #0x0] - mov r0, #0x1 - ldmia sp!, {r4-r10,pc} -_020AF5B8: - mov r0, #0x0 - str r0, [r2, #0x0] - ldmia sp!, {r4-r10,pc} - - arm_func_start FUN_020AF5C4 -FUN_020AF5C4: - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r12, #0x0 - str r12, [sp, #0x0] - bl FUN_020AF488 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AF5E0 -FUN_020AF5E0: ; 0x020AF5E0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, [r1, #0x0] - cmp lr, #0x0 - ldrne r12, [lr, #0xc] - strne r12, [r1, #0x0] - cmp lr, #0x0 - beq _020AF640 - str r2, [lr, #0x0] - str r3, [lr, #0x4] - mov r1, #0x0 - str r1, [lr, #0x8] - str r1, [lr, #0xc] - ldr r1, [r0, #0x0] - add sp, sp, #0x4 - cmp r1, #0x0 - strne lr, [r1, #0x8] - ldr r2, [r0, #0x0] - mov r1, #0x0 - str r2, [lr, #0xc] - str r1, [lr, #0x8] - str lr, [r0, #0x0] - mov r0, #0x1 - ldmia sp!, {pc} -_020AF640: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020AF64C -FUN_020AF64C: ; 0x020AF64C - stmdb sp!, {r4,lr} - subs lr, r1, #0x1 - mov r2, #0x0 - beq _020AF684 - mov r4, r0 -_020AF660: - add r12, r2, #0x1 - add r2, r0, r2, lsl #0x4 - add r3, r0, r12, lsl #0x4 - str r3, [r2, #0xc] - str r4, [r3, #0x8] - mov r2, r12 - cmp r12, lr - add r4, r4, #0x10 - blo _020AF660 -_020AF684: - mov r2, #0x0 - str r2, [r0, #0x8] - add r1, r0, r1, lsl #0x4 - str r2, [r1, #-0x4] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020AF698 -FUN_020AF698: ; 0x020AF698 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - - arm_func_start FUN_020AF6A4 -FUN_020AF6A4: ; 0x020AF6A4 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x30 - ldr r6, _020AF884 ; =UNK_020FF864 - add r5, sp, #0x0 - ldmia r6!, {r0-r3} - mov r12, r5 - stmia r5!, {r0-r3} - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldr r4, _020AF888 ; =UNK_021CCD6C - ldmia r6, {r0-r3} - stmia r5, {r0-r3} - ldr lr, [r4, #0x10] - ldr r1, [r4, #0xc] - add r0, lr, lr, lsr #0x1 - mov r4, lr, lsr #0x1 - sub r0, r1, r0 - mov r3, #0x0 -_020AF6EC: - cmp r3, #0x0 - beq _020AF6FC - cmp r3, #0x2 - bne _020AF734 -_020AF6FC: - ldr r2, [r12, #0x0] - cmp r2, #0x0 - beq _020AF734 - cmp lr, #0x0 - beq _020AF734 - ldr r1, [r12, #0x8] - cmp r2, lr - movhi r2, lr - add r1, r1, r2 - str r1, [r12, #0x8] - ldr r1, [r12, #0x0] - sub lr, lr, r2 - sub r1, r1, r2 - str r1, [r12, #0x0] -_020AF734: - add r3, r3, #0x1 - cmp r3, #0x4 - add r12, r12, #0xc - blo _020AF6EC - ldr r1, [sp, #0xc] - add r5, sp, #0x0 - sub r1, r1, r4 - str r1, [sp, #0xc] - mov r3, #0x0 -_020AF758: - ldr r2, [r5, #0x0] - cmp r2, #0x0 - beq _020AF790 - cmp r0, #0x0 - beq _020AF790 - ldr r1, [r5, #0x4] - cmp r2, r0 - movhi r2, r0 - add r1, r1, r2 - str r1, [r5, #0x4] - ldr r1, [r5, #0x0] - sub r0, r0, r2 - sub r1, r1, r2 - str r1, [r5, #0x0] -_020AF790: - add r3, r3, #0x1 - cmp r3, #0x4 - add r5, r5, #0xc - blo _020AF758 - ldr r0, _020AF888 ; =UNK_021CCD6C - bl FUN_020AF698 - ldr r0, _020AF88C ; =UNK_021CCD70 - bl FUN_020AF698 - ldr r0, _020AF888 ; =UNK_021CCD6C - ldr r1, [r0, #0x18] - ldr r0, [r0, #0x14] - mov r1, r1, lsr #0x4 - bl FUN_020AF64C - ldr r3, [sp, #0x8] - ldr r1, _020AF888 ; =UNK_021CCD6C - cmp r3, #0x0 - str r0, [r1, #0x8] - beq _020AF7E8 - ldr r0, _020AF88C ; =UNK_021CCD70 - ldr r1, _020AF890 ; =UNK_021CCD74 - mov r2, #0x0 - bl FUN_020AF5E0 -_020AF7E8: - ldr r3, [sp, #0x4] - ldr r2, [sp, #0x8] - cmp r3, #0x0 - beq _020AF804 - ldr r0, _020AF888 ; =UNK_021CCD6C - ldr r1, _020AF890 ; =UNK_021CCD74 - bl FUN_020AF5E0 -_020AF804: - ldr r3, [sp, #0x20] - cmp r3, #0x0 - beq _020AF820 - ldr r0, _020AF88C ; =UNK_021CCD70 - ldr r1, _020AF890 ; =UNK_021CCD74 - mov r2, #0x40000 - bl FUN_020AF5E0 -_020AF820: - ldr r3, [sp, #0x1c] - ldr r0, [sp, #0x20] - cmp r3, #0x0 - add r2, r0, #0x40000 - beq _020AF840 - ldr r0, _020AF888 ; =UNK_021CCD6C - ldr r1, _020AF890 ; =UNK_021CCD74 - bl FUN_020AF5E0 -_020AF840: - ldr r3, [sp, #0x28] - cmp r3, #0x0 - beq _020AF85C - ldr r0, _020AF888 ; =UNK_021CCD6C - ldr r1, _020AF890 ; =UNK_021CCD74 - mov r2, #0x60000 - bl FUN_020AF5E0 -_020AF85C: - ldr r3, [sp, #0x10] - cmp r3, #0x0 - addeq sp, sp, #0x30 - ldmeqia sp!, {r4-r6,pc} - ldr r0, _020AF888 ; =UNK_021CCD6C - ldr r1, _020AF890 ; =UNK_021CCD74 - add r2, r4, #0x20000 - bl FUN_020AF5E0 - add sp, sp, #0x30 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020AF884: .word UNK_020FF864 -_020AF888: .word UNK_021CCD6C -_020AF88C: .word UNK_021CCD70 -_020AF890: .word UNK_021CCD74 - - arm_func_start FUN_020AF894 -FUN_020AF894: ; 0x020AF894 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r2, _020AF908 ; =0x7FFF0000 - ldr r1, _020AF90C ; =0x0000FFFF - and r2, r0, r2 - and r3, r0, r1 - mov r1, r2, lsr #0x10 - and r0, r0, #0x80000000 - mov r2, r3, lsl #0x3 - movs r3, r1, lsl #0x4 - mov r0, r0, lsr #0x1f - beq _020AF8FC - cmp r0, #0x0 - beq _020AF8DC - ldr r0, _020AF910 ; =UNK_021CCD70 - ldr r1, _020AF914 ; =UNK_021CCD74 - bl FUN_020AF334 - b _020AF8E8 -_020AF8DC: - ldr r0, _020AF918 ; =UNK_021CCD6C - ldr r1, _020AF914 ; =UNK_021CCD74 - bl FUN_020AF334 -_020AF8E8: - cmp r0, #0x0 - movne r0, #0x0 - add sp, sp, #0x4 - moveq r0, #0x1 - ldmia sp!, {pc} -_020AF8FC: - mov r0, #0x2 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AF908: .word 0x7FFF0000 -_020AF90C: .word 0x0000FFFF -_020AF910: .word UNK_021CCD70 -_020AF914: .word UNK_021CCD74 -_020AF918: .word UNK_021CCD6C - - arm_func_start FUN_020AF91C -FUN_020AF91C: ; 0x020AF91C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - cmp r0, #0x0 - moveq r5, #0x10 - addne r0, r0, #0xf - bicne r5, r0, #0xf - ldr r0, _020AF9B0 ; =0x0007FFF0 - mov r4, r1 - cmp r5, r0 - addcs sp, sp, #0x4 - movcs r0, #0x0 - ldmcsia sp!, {r4-r5,pc} - cmp r4, #0x0 - beq _020AF96C - ldr r0, _020AF9B4 ; =UNK_021CCD70 - ldr r1, _020AF9B8 ; =UNK_021CCD74 - add r2, sp, #0x0 - mov r3, r5 - bl FUN_020AF5C4 - b _020AF980 -_020AF96C: - ldr r0, _020AF9BC ; =UNK_021CCD6C - ldr r1, _020AF9B8 ; =UNK_021CCD74 - add r2, sp, #0x0 - mov r3, r5 - bl FUN_020AF5C4 -_020AF980: - cmp r0, #0x0 - addeq sp, sp, #0x4 - moveq r0, #0x0 - ldmeqia sp!, {r4-r5,pc} - ldr r1, [sp, #0x0] - ldr r0, _020AF9C0 ; =0x0000FFFF - mov r2, r5, lsr #0x4 - and r0, r0, r1, lsr #0x3 - orr r0, r0, r2, lsl #0x10 - orr r0, r0, r4, lsl #0x1f - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AF9B0: .word 0x0007FFF0 -_020AF9B4: .word UNK_021CCD70 -_020AF9B8: .word UNK_021CCD74 -_020AF9BC: .word UNK_021CCD6C -_020AF9C0: .word 0x0000FFFF - - arm_func_start FUN_020AF9C4 -FUN_020AF9C4: ; 0x020AF9C4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr ip, _020AFA14 ; =UNK_021CCD6C - str r0, [r12, #0xc] - str r1, [r12, #0x10] - str r2, [r12, #0x14] - str r3, [r12, #0x18] - bl FUN_020AF6A4 - ldr r0, [sp, #0x8] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r3, _020AFA18 ; =FUN_020AF91C - ldr r1, _020AFA1C ; =UNK_021064B8 - ldr r2, _020AFA20 ; =FUN_020AF894 - ldr r0, _020AFA24 ; =UNK_021064BC - str r3, [r1, #0x0] - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AFA14: .word UNK_021CCD6C -_020AFA18: .word FUN_020AF91C -_020AFA1C: .word UNK_021064B8 -_020AFA20: .word FUN_020AF894 -_020AFA24: .word UNK_021064BC - - arm_func_start FUN_020AFA28 -FUN_020AFA28: ; 0x020AFA28 - mov r0, r0, lsl #0x4 - bx lr - - arm_func_start FUN_020AFA30 -FUN_020AFA30: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020AFA78 ; =UNK_021CCD88 - ldr r1, [r0, #0x10] - ldr r0, [r0, #0xc] - mov r1, r1, lsr #0x4 - bl FUN_020AF64C - ldr r1, _020AFA78 ; =UNK_021CCD88 - str r0, [r1, #0x4] - mov r0, r1 - bl FUN_020AF698 - ldr r0, _020AFA78 ; =UNK_021CCD88 - ldr r1, _020AFA7C ; =UNK_021CCD8C - ldr r3, [r0, #0x8] - mov r2, #0x0 - bl FUN_020AF5E0 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AFA78: .word UNK_021CCD88 -_020AFA7C: .word UNK_021CCD8C - - arm_func_start FUN_020AFA80 -FUN_020AFA80: ; 0x020AFA80 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r1, #0x10000 - rsb r2, r1, #0x0 - ldr r1, _020AFAC8 ; =0x0000FFFF - and r2, r0, r2 - and r12, r0, r1 - mov r3, r2, lsr #0x10 - ldr r0, _020AFACC ; =UNK_021CCD88 - ldr r1, _020AFAD0 ; =UNK_021CCD8C - mov r2, r12, lsl #0x3 - mov r3, r3, lsl #0x3 - bl FUN_020AF334 - cmp r0, #0x0 - moveq r0, #0x1 - movne r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020AFAC8: .word 0x0000FFFF -_020AFACC: .word UNK_021CCD88 -_020AFAD0: .word UNK_021CCD8C - - arm_func_start FUN_020AFAD4 -FUN_020AFAD4: ; 0x020AFAD4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x8 - cmp r0, #0x0 - moveq r4, #0x8 - addne r0, r0, #0x7 - bicne r4, r0, #0x7 - ldr r0, _020AFB98 ; =0x0007FFF8 - cmp r4, r0 - addcs sp, sp, #0x8 - movcs r0, #0x0 - ldmcsia sp!, {r4,pc} - cmp r1, #0x0 - beq _020AFB50 - mov r12, #0x8 - ldr r0, _020AFB9C ; =UNK_021CCD88 - ldr r1, _020AFBA0 ; =UNK_021CCD8C - add r2, sp, #0x4 - mov r3, r4 - str r12, [sp, #0x0] - bl FUN_020AF488 - ldr r2, [sp, #0x4] - add r1, r2, r4 - cmp r1, #0x10000 - bls _020AFB6C - ldr r0, _020AFB9C ; =UNK_021CCD88 - ldr r1, _020AFBA0 ; =UNK_021CCD8C - mov r3, r4 - bl FUN_020AF334 - add sp, sp, #0x8 - mov r0, #0x0 - ldmia sp!, {r4,pc} -_020AFB50: - ldr r0, _020AFB9C ; =UNK_021CCD88 - mov r12, #0x10 - ldr r1, _020AFBA0 ; =UNK_021CCD8C - add r2, sp, #0x4 - mov r3, r4 - str r12, [sp, #0x0] - bl FUN_020AF488 -_020AFB6C: - cmp r0, #0x0 - addeq sp, sp, #0x8 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - ldr r1, [sp, #0x4] - ldr r0, _020AFBA4 ; =0x0000FFFF - mov r2, r4, lsr #0x3 - and r0, r0, r1, lsr #0x3 - orr r0, r0, r2, lsl #0x10 - add sp, sp, #0x8 - ldmia sp!, {r4,pc} - .balign 4 -_020AFB98: .word 0x0007FFF8 -_020AFB9C: .word UNK_021CCD88 -_020AFBA0: .word UNK_021CCD8C -_020AFBA4: .word 0x0000FFFF - - arm_func_start FUN_020AFBA8 -FUN_020AFBA8: ; 0x020AFBA8 - stmdb sp!, {r4,lr} - ldr ip, _020AFBE8 ; =UNK_021CCD88 - mov r4, r3 - str r0, [r12, #0x8] - str r1, [r12, #0xc] - str r2, [r12, #0x10] - bl FUN_020AFA30 - cmp r4, #0x0 - ldmeqia sp!, {r4,pc} - ldr r3, _020AFBEC ; =FUN_020AFAD4 - ldr r1, _020AFBF0 ; =UNK_021064C0 - ldr r2, _020AFBF4 ; =FUN_020AFA80 - ldr r0, _020AFBF8 ; =UNK_021064C4 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020AFBE8: .word UNK_021CCD88 -_020AFBEC: .word FUN_020AFAD4 -_020AFBF0: .word UNK_021064C0 -_020AFBF4: .word FUN_020AFA80 -_020AFBF8: .word UNK_021064C4 - - arm_func_start FUN_020AFBFC -FUN_020AFBFC: ; 0x020AFBFC - mov r0, r0, lsl #0x4 - bx lr - - arm_func_start FUN_020AFC04 -FUN_020AFC04: ; 0x020AFC04 - ldrh r2, [r0, #0x0] - cmp r2, r1 - ldrhi r0, [r0, #0x4] - addhi r0, r0, r1, lsl #0x4 - movls r0, #0x0 - bx lr - - arm_func_start FUN_020AFC1C -FUN_020AFC1C: ; 0x020AFC1C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r1, [r0, #0x4] - mov r6, #0x0 - add r1, r1, r0 - str r1, [r0, #0x4] - ldr r1, [r0, #0x8] - add r1, r1, r0 - str r1, [r0, #0x8] - ldr r1, [r0, #0xc] - add r1, r1, r0 - str r1, [r0, #0xc] - ldrh r1, [r0, #0x0] - ldr r4, [r0, #0x4] - ldr lr, [r0, #0x8] - cmp r1, #0x0 - ldr r12, [r0, #0xc] - bls _020AFCCC - mov r1, r6 -_020AFC68: - add r2, r4, r6, lsl #0x4 - ldr r5, [r2, #0xc] - mov r3, r6, lsl #0x4 - add r5, lr, r5 - str r5, [r2, #0xc] - ldrh r7, [r4, r3] - mov r5, r1 - cmp r7, #0x0 - bls _020AFCB4 -_020AFC8C: - ldr r9, [r2, #0xc] - add r7, r5, #0x1 - ldr r8, [r9, r5, lsl #0x3] - mov r7, r7, lsl #0x10 - add r8, r12, r8 - str r8, [r9, r5, lsl #0x3] - ldrh r8, [r4, r3] - mov r5, r7, lsr #0x10 - cmp r5, r8 - blo _020AFC8C -_020AFCB4: - add r2, r6, #0x1 - mov r2, r2, lsl #0x10 - ldrh r3, [r0, #0x0] - mov r6, r2, lsr #0x10 - cmp r6, r3 - blo _020AFC68 -_020AFCCC: - ldr r1, [r0, #0x14] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r9,pc} - add r1, r1, r0 - str r1, [r0, #0x14] - ldr r1, [r0, #0x14] - mov r12, #0x0 - add r2, r1, #0x8 - ldr r0, [r2, #0x4] - add r0, r0, r2 - str r0, [r2, #0x4] - ldrh r0, [r1, #0x8] - cmp r0, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r9,pc} - mov r0, r12 - mov r6, r12 -_020AFD14: - ldr r5, [r2, #0x4] - mov r3, r6 - add r1, r5, r0 - ldr r4, [r1, #0x4] - add r4, r4, r2 - str r4, [r1, #0x4] - ldr r4, [r1, #0x8] - add r4, r4, r2 - str r4, [r1, #0x8] - ldrh r4, [r5, r0] - cmp r4, #0x0 - bls _020AFD6C - mov r7, r6 -_020AFD48: - ldr r5, [r1, #0x8] - add r3, r3, #0x1 - ldr r4, [r5, r7] - add r4, r4, r2 - str r4, [r5, r7] - ldrh r4, [r1, #0x0] - add r7, r7, #0x4 - cmp r3, r4 - blo _020AFD48 -_020AFD6C: - ldrh r1, [r2, #0x0] - add r12, r12, #0x1 - add r0, r0, #0xc - cmp r12, r1 - blo _020AFD14 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - - arm_func_start thunk_FUN_020afda0 -thunk_FUN_020afda0: ; 0x020AFD88 - ldr ip, _020AFD90 ; =FUN_020AFDA0 - bx r12 - .balign 4 -_020AFD90: .word FUN_020AFDA0 - - arm_func_start thunk_FUN_020afda0_2 -thunk_FUN_020afda0_2: ; 0x020AFD94 - ldr ip, _020AFD9C ; =FUN_020AFDA0 - bx r12 - .balign 4 -_020AFD9C: .word FUN_020AFDA0 - - arm_func_start FUN_020AFDA0 -FUN_020AFDA0: ; 0x020AFDA0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020AFDE4 ; =0x41424E4B - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020AFC1C - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AFDE4: .word 0x41424E4B - - arm_func_start FUN_020AFDE8 -FUN_020AFDE8: ; 0x020AFDE8 - stmdb sp!, {r4-r6,lr} - mov r5, r0 - ldr r1, [r5, #0x4] - add r1, r1, r5 - str r1, [r5, #0x4] - bl FUN_020AFF10 - ldrh r1, [r5, #0x0] - mov r4, r0 - mov r6, #0x0 - cmp r1, #0x0 - bls _020AFE44 -_020AFE14: - mov r0, r5 - mov r1, r6 - bl FUN_020AFE8C - ldr r2, [r0, #0x4] - add r1, r6, #0x1 - add r2, r2, r4 - str r2, [r0, #0x4] - mov r0, r1, lsl #0x10 - ldrh r1, [r5, #0x0] - mov r6, r0, lsr #0x10 - cmp r6, r1 - blo _020AFE14 -_020AFE44: - ldr r0, [r5, #0xc] - cmp r0, #0x0 - beq _020AFE6C - add r0, r0, r5 - str r0, [r5, #0xc] - ldr r1, [r5, #0xc] - ldr r0, [r1, #0x4] - add r0, r0, r1 - str r0, [r1, #0x4] - str r1, [r5, #0xc] -_020AFE6C: - ldr r0, [r5, #0x14] - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - add r0, r0, r5 - str r0, [r5, #0x14] - ldr r0, [r5, #0x14] - bl FUN_020AFF00 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020AFE8C -FUN_020AFE8C: ; 0x020AFE8C - ldrh r2, [r0, #0x0] - cmp r1, r2 - movcs r0, #0x0 - bxcs lr - ldrh r2, [r0, #0x2] - ands r2, r2, #0x1 - ldrne r0, [r0, #0x4] - addne r0, r0, r1, lsl #0x4 - ldreq r0, [r0, #0x4] - addeq r0, r0, r1, lsl #0x3 - bx lr - - arm_func_start FUN_020AFEB8 -FUN_020AFEB8: ; 0x020AFEB8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020AFEFC ; =0x4345424B - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020AFDE8 - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020AFEFC: .word 0x4345424B - - arm_func_start FUN_020AFF00 -FUN_020AFF00: ; 0x020AFF00 - ldr ip, _020AFF0C ; =FUN_020B01B0 - add r0, r0, #0x8 - bx r12 - .balign 4 -_020AFF0C: .word FUN_020B01B0 - - arm_func_start FUN_020AFF10 -FUN_020AFF10: ; 0x020AFF10 - ldrh r1, [r0, #0x2] - ands r1, r1, #0x1 - ldrneh r1, [r0, #0x0] - ldrne r0, [r0, #0x4] - addne r0, r0, r1, lsl #0x4 - ldreqh r1, [r0, #0x0] - ldreq r0, [r0, #0x4] - addeq r0, r0, r1, lsl #0x3 - bx lr - - arm_func_start FUN_020AFF34 -FUN_020AFF34: ; 0x020AFF34 - ldrh r2, [r0, #0x0] - cmp r1, r2 - ldrcc r0, [r0, #0x4] - addcc r0, r0, r1, lsl #0x3 - movcs r0, #0x0 - bx lr - - arm_func_start FUN_020AFF4C -FUN_020AFF4C: ; 0x020AFF4C - stmdb sp!, {r4,lr} - ldr r1, [r0, #0x4] - mov r4, #0x0 - add r1, r1, r0 - str r1, [r0, #0x4] - ldr r1, [r0, #0x8] - add r1, r1, r0 - str r1, [r0, #0x8] - ldrh r1, [r0, #0x0] - ldr lr, [r0, #0x4] - cmp r1, #0x0 - bls _020AFFA8 -_020AFF7C: - add r3, lr, r4, lsl #0x3 - ldr r12, [r0, #0x8] - ldr r2, [r3, #0x4] - add r1, r4, #0x1 - add r2, r12, r2 - str r2, [r3, #0x4] - mov r1, r1, lsl #0x10 - ldrh r2, [r0, #0x0] - mov r4, r1, lsr #0x10 - cmp r4, r2 - blo _020AFF7C -_020AFFA8: - ldr r1, [r0, #0x10] - cmp r1, #0x0 - ldmeqia sp!, {r4,pc} - add r1, r1, r0 - str r1, [r0, #0x10] - ldr r0, [r0, #0x10] - bl FUN_020AFFC8 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020AFFC8 -FUN_020AFFC8: ; 0x020AFFC8 - ldr ip, _020AFFD4 ; =FUN_020B01B0 - add r0, r0, #0x8 - bx r12 - .balign 4 -_020AFFD4: .word FUN_020B01B0 - - arm_func_start FUN_020AFFD8 -FUN_020AFFD8: ; 0x020AFFD8 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020B001C ; =0x4D43424B - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020AFF4C - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B001C: .word 0x4D43424B - - arm_func_start FUN_020B0020 -FUN_020B0020: ; 0x020B0020 - ldr r1, [r0, #0x14] - add r1, r1, r0 - str r1, [r0, #0x14] - bx lr - - arm_func_start FUN_020B0030 -FUN_020B0030: ; 0x020B0030 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020B0074 ; =0x43484152 - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020B0020 - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B0074: .word 0x43484152 - - arm_func_start FUN_020B0078 -FUN_020B0078: ; 0x020B0078 - ldr r1, [r0, #0x14] - add r1, r1, r0 - str r1, [r0, #0x14] - bx lr - - arm_func_start FUN_020B0088 -FUN_020B0088: ; 0x020B0088 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020B00CC ; =0x43484152 - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020B0078 - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B00CC: .word 0x43484152 - - arm_func_start FUN_020B00D0 -FUN_020B00D0: ; 0x020B00D0 - ldr r1, [r0, #0xc] - add r1, r1, r0 - str r1, [r0, #0xc] - bx lr - - arm_func_start FUN_020B00E0 -FUN_020B00E0: ; 0x020B00E0 - ldr r1, [r0, #0x4] - add r1, r1, r0 - str r1, [r0, #0x4] - bx lr - - arm_func_start FUN_020B00F0 -FUN_020B00F0: ; 0x020B00F0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020B0134 ; =0x50434D50 - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020B00E0 - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B0134: .word 0x50434D50 - - arm_func_start FUN_020B0138 -FUN_020B0138: ; 0x020B0138 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldr r1, _020B017C ; =0x504C5454 - bl FUN_020B01F8 - movs r4, r0 - moveq r0, #0x0 - addeq sp, sp, #0x4 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r5,pc} - add r0, r4, #0x8 - bl FUN_020B00D0 - add r0, r4, #0x8 - str r0, [r5, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B017C: .word 0x504C5454 - - arm_func_start FUN_020B0180 -FUN_020B0180: ; 0x020B0180 - stmdb sp!, {r4,lr} - mov r4, r1 - ldr r1, _020B01AC ; =0x5343524E - bl FUN_020B01F8 - cmp r0, #0x0 - addne r0, r0, #0x8 - strne r0, [r4, #0x0] - movne r0, #0x1 - moveq r0, #0x0 - streq r0, [r4, #0x0] - ldmia sp!, {r4,pc} - .balign 4 -_020B01AC: .word 0x5343524E - - arm_func_start FUN_020B01B0 -FUN_020B01B0: ; 0x020B01B0 - ldr r1, [r0, #0x4] - mov r12, #0x0 - add r1, r1, r0 - str r1, [r0, #0x4] - ldrh r1, [r0, #0x0] - cmp r1, #0x0 - bxls lr -_020B01CC: - ldr r3, [r0, #0x4] - add r1, r12, #0x1 - ldr r2, [r3, r12, lsl #0x2] - mov r1, r1, lsl #0x10 - add r2, r0, r2 - str r2, [r3, r12, lsl #0x2] - ldrh r2, [r0, #0x0] - mov r12, r1, lsr #0x10 - cmp r12, r2 - blo _020B01CC - bx lr - - arm_func_start FUN_020B01F8 -FUN_020B01F8: - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r2, [r0, #0xc] - ldrh r12, [r0, #0xe] - mov lr, #0x0 - add r0, r0, r2 - cmp r12, #0x0 - bls _020B0244 -_020B0218: - ldr r2, [r0, #0x0] - cmp r2, r1 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - add r2, lr, #0x1 - mov r2, r2, lsl #0x10 - ldr r3, [r0, #0x4] - mov lr, r2, lsr #0x10 - cmp lr, r12 - add r0, r0, r3 - blo _020B0218 -_020B0244: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020B0250 -FUN_020B0250: ; 0x020B0250 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r5, _020B02C0 ; =0x04000470 - mov r0, r0, lsl #0xc - str r0, [r5, #0x0] - mov r4, r1, lsl #0xc - ldr r12, [sp, #0x10] - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x1c] - str r4, [r5, #0x0] - mov r4, r2, lsl #0xc - ldr r2, [sp, #0x18] - ldr lr, _020B02C4 ; =0x0400046C - str r4, [r5, #0x0] - mov r4, r3, lsl #0xc - ldr r3, [sp, #0x20] - str r4, [lr, #0x0] - mov r12, r12, lsl #0xc - str r12, [lr, #0x0] - mov r12, #0x1000 - mov r0, r0, lsl #0xc - mov r1, r1, lsl #0xc - mov r2, r2, lsl #0xc - mov r3, r3, lsl #0xc - str r12, [lr, #0x0] - bl FUN_020B0340 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B02C0: .word 0x04000470 -_020B02C4: .word 0x0400046C - - arm_func_start FUN_020B02C8 -FUN_020B02C8: ; 0x020B02C8 - stmdb sp!, {lr} - sub sp, sp, #0x14 - ldr r2, _020B0330 ; =0xBFFF0000 - ldr r0, _020B0334 ; =0x04000580 - mov r1, #0x400000 - str r2, [r0, #0x0] - rsb r0, r1, #0x0 - str r0, [sp, #0x0] - str r1, [sp, #0x4] - mov r0, #0x0 - str r1, [sp, #0x8] - mov r1, #0x1 - str r1, [sp, #0xc] - mov r2, r0 - mov r1, #0xc0000 - mov r3, #0x100000 - str r0, [sp, #0x10] - bl G3i_OrthoW_ - ldr r1, _020B0338 ; =0x0400044C - mov r2, #0x0 - ldr r0, _020B033C ; =0x04000440 - str r2, [r1, #0x0] - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, sp, #0x14 - ldmia sp!, {pc} - .balign 4 -_020B0330: .word 0xBFFF0000 -_020B0334: .word 0x04000580 -_020B0338: .word 0x0400044C -_020B033C: .word 0x04000440 - - arm_func_start FUN_020B0340 -FUN_020B0340: ; 0x020B0340 - stmdb sp!, {r4-r6,lr} - mov r3, r3, lsl #0x8 - mov r0, r0, lsl #0x8 - mov r4, r3, asr #0x10 - mov r3, r0, asr #0x10 - mov r0, r4, lsl #0x10 - mov r3, r3, lsl #0x10 - mov r1, r1, lsl #0x8 - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - mov r2, r2, lsl #0x8 - mov r2, r2, asr #0x10 - mov r2, r2, lsl #0x10 - ldr ip, _020B03F4 ; =0x04000500 - mov lr, #0x1 - mov r6, r0, lsr #0x10 - mov r5, r3, lsr #0x10 - mov r3, r1, lsr #0x10 - mov r1, r2, lsr #0x10 - ldr r4, _020B03F8 ; =0x04000488 - str lr, [r12, #0x0] - orr r0, r5, r6, lsl #0x10 - ldr lr, _020B03FC ; =0x0400048C - str r0, [r4, #0x0] - mov r0, #0x10000000 - str r0, [lr, #0x0] - mov r12, #0x0 - str r12, [lr, #0x0] - orr r2, r3, r6, lsl #0x10 - ldr r0, _020B0400 ; =0x10001000 - str r2, [r4, #0x0] - str r0, [lr, #0x0] - str r12, [lr, #0x0] - orr r0, r3, r1, lsl #0x10 - str r0, [r4, #0x0] - mov r0, #0x1000 - str r0, [lr, #0x0] - str r12, [lr, #0x0] - orr r0, r5, r1, lsl #0x10 - str r0, [r4, #0x0] - str r12, [lr, #0x0] - ldr r0, _020B0404 ; =0x04000504 - str r12, [lr, #0x0] - str r12, [r0, #0x0] - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B03F4: .word 0x04000500 -_020B03F8: .word 0x04000488 -_020B03FC: .word 0x0400048C -_020B0400: .word 0x10001000 -_020B0404: .word 0x04000504 - - arm_func_start FUN_020B0408 -FUN_020B0408: - ldr r1, [r0, #0x14] - cmp r1, #0x0 - ldreq r0, [r0, #0x18] - ldreq r1, [r0, #0x8] - cmp r1, #0x2 - beq _020B0428 - cmp r1, #0x4 - bne _020B0430 -_020B0428: - mov r0, #0x1 - bx lr -_020B0430: - mov r0, #0x0 - bx lr - - arm_func_start FUN_020B0438 -FUN_020B0438: ; 0x020B0438 - ldr ip, _020B0444 ; =FUN_020B0448 - str r1, [r0, #0x18] - bx r12 - .balign 4 -_020B0444: .word FUN_020B0448 - - arm_func_start FUN_020B0448 -FUN_020B0448: ; 0x020B0448 - ldr r1, [r0, #0x10] - cmp r1, #0x0 - movgt r2, #0x1 - ldr r1, [r0, #0x4] - movle r2, #0x0 - eors r1, r2, r1 - beq _020B047C - ldr r2, [r0, #0x18] - ldrh r1, [r2, #0x2] - ldr r2, [r2, #0xc] - add r1, r2, r1, lsl #0x3 - str r1, [r0, #0x0] - b _020B0494 -_020B047C: - ldr r2, [r0, #0x18] - ldrh r1, [r2, #0x0] - ldr r2, [r2, #0xc] - add r1, r2, r1, lsl #0x3 - sub r1, r1, #0x8 - str r1, [r0, #0x0] -_020B0494: - ldr ip, _020B04A4 ; =FUN_020B0534 - mov r1, #0x0 - str r1, [r0, #0xc] - bx r12 - .balign 4 -_020B04A4: .word FUN_020B0534 - - arm_func_start FUN_020B04A8 -FUN_020B04A8: ; 0x020B04A8 - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r0, #0x4] - str r1, [r0, #0x8] - strh r1, [r0, #0xc] - bx lr - - arm_func_start FUN_020B04C0 -FUN_020B04C0: ; 0x020B04C0 - stmdb sp!, {r4,lr} - mov r4, r0 - add r0, r4, #0x1c - bl FUN_020B04A8 - mov r1, #0x0 - str r1, [r4, #0x0] - str r1, [r4, #0x4] - mov r0, #0x1 - str r0, [r4, #0x8] - str r1, [r4, #0xc] - mov r0, #0x1000 - str r0, [r4, #0x10] - str r1, [r4, #0x14] - str r1, [r4, #0x18] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B04FC -FUN_020B04FC: ; 0x020B04FC - ldr r1, [r0, #0x18] - ldr r2, [r0, #0x0] - ldr r0, [r1, #0xc] - sub r0, r2, r0 - mov r0, r0, lsl #0xd - mov r0, r0, lsr #0x10 - bx lr - - arm_func_start FUN_020B0518 -FUN_020B0518: - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020B06EC - cmp r0, #0x0 - movne r1, #0x0 - strne r1, [r4, #0xc] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B0534 -FUN_020B0534: - stmdb sp!, {r4-r8,lr} - mov r8, r0 - ldr r0, [r8, #0x8] - mov r7, #0x0 - cmp r0, #0x1 - movne r0, r7 - ldmneia sp!, {r4-r8,pc} - ldr r2, [r8, #0x10] - mov r0, #0x800 - smull r3, r1, r2, r1 - adds r0, r3, r0 - adc r1, r1, r7 - mov r0, r0, lsr #0xc - orr r0, r0, r1, lsl #0x14 - bl abs - ldr r1, [r8, #0xc] - add r6, r8, #0xc - add r0, r1, r0 - str r0, [r8, #0xc] - mov r4, r7 - mov r5, #0x1 - b _020B06A8 -_020B058C: - ldr r0, [r8, #0x0] - ldr r1, [r6, #0x0] - ldrh r0, [r0, #0x4] - mov r7, r5 - sub r0, r1, r0, lsl #0xc - str r0, [r6, #0x0] - ldr r0, [r8, #0x10] - cmp r0, #0x0 - movgt r1, r5 - ldr r0, [r8, #0x4] - movle r1, r4 - eors r0, r1, r0 - ldrne r0, [r8, #0x0] - addne r0, r0, #0x8 - strne r0, [r8, #0x0] - ldreq r0, [r8, #0x0] - subeq r0, r0, #0x8 - streq r0, [r8, #0x0] - ldr r1, [r8, #0x10] - ldr r0, [r8, #0x0] - cmp r1, #0x0 - movgt r2, r5 - ldr r1, [r8, #0x4] - movle r2, r4 - eors r1, r2, r1 - beq _020B0614 - ldr r2, [r8, #0x18] - ldrh r1, [r2, #0x0] - ldr r2, [r2, #0xc] - add r1, r2, r1, lsl #0x3 - cmp r0, r1 - movcs r0, r5 - movcc r0, r4 - b _020B0634 -_020B0614: - ldr r2, [r8, #0x18] - ldrh r1, [r2, #0x2] - ldr r2, [r2, #0xc] - add r1, r2, r1, lsl #0x3 - sub r1, r1, #0x8 - cmp r0, r1 - movls r0, r5 - movhi r0, r4 -_020B0634: - cmp r0, #0x0 - beq _020B0644 - mov r0, r8 - bl FUN_020B0710 -_020B0644: - ldr r0, [r8, #0x1c] - cmp r0, #0x0 - beq _020B06A8 - ldr r0, [r8, #0x18] - ldr r2, [r8, #0x1c] - ldr r1, [r8, #0x0] - ldr r0, [r0, #0xc] - cmp r2, #0x2 - sub r0, r1, r0 - mov r0, r0, lsl #0xd - mov r1, r0, lsr #0x10 - beq _020B0680 - cmp r2, #0x3 - beq _020B069C - b _020B06A8 -_020B0680: - ldrh r0, [r8, #0x28] - cmp r1, r0 - bne _020B06A8 - ldr r0, [r8, #0x20] - ldr r2, [r8, #0x24] - blx r2 - b _020B06A8 -_020B069C: - ldr r0, [r8, #0x20] - ldr r2, [r8, #0x24] - blx r2 -_020B06A8: - ldr r0, [r8, #0x8] - cmp r0, #0x0 - beq _020B06CC - ldr r0, [r8, #0x0] - ldr r1, [r8, #0xc] - ldrh r0, [r0, #0x4] - cmp r1, r0, lsl #0xc - movge r0, r5 - bge _020B06D0 -_020B06CC: - mov r0, r4 -_020B06D0: - cmp r0, #0x0 - bne _020B058C - mov r0, r7 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B06E0 -FUN_020B06E0: ; 0x020B06E0 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x0] - bx lr - - arm_func_start FUN_020B06EC -FUN_020B06EC: - ldr r3, [r0, #0x18] - ldrh r2, [r3, #0x0] - cmp r1, r2 - ldrcc r2, [r3, #0xc] - addcc r1, r2, r1, lsl #0x3 - strcc r1, [r0, #0x0] - movcc r0, #0x1 - movcs r0, #0x0 - bx lr - - arm_func_start FUN_020B0710 -FUN_020B0710: ; 0x020B0710 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r0, [r4, #0x14] - cmp r0, #0x0 - ldreq r0, [r4, #0x18] - ldreq r0, [r0, #0x8] - cmp r0, #0x3 - beq _020B0738 - cmp r0, #0x4 - bne _020B07B4 -_020B0738: - ldr r0, [r4, #0x4] - eor r0, r0, #0x1 - str r0, [r4, #0x4] - ldr r1, [r4, #0x18] - ldr r2, [r4, #0x0] - ldrh r0, [r1, #0x2] - ldr r1, [r1, #0xc] - add r0, r1, r0, lsl #0x3 - sub r0, r0, #0x8 - cmp r2, r0 - bhi _020B0800 - ldr r0, [r4, #0x1c] - cmp r0, #0x1 - bne _020B0780 - ldr r0, [r4, #0x20] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x24] - blx r2 -_020B0780: - ldr r0, [r4, #0x14] - cmp r0, #0x0 - ldreq r0, [r4, #0x18] - ldreq r0, [r0, #0x8] - cmp r0, #0x2 - beq _020B07A8 - cmp r0, #0x4 - movne r0, #0x0 - strne r0, [r4, #0x8] - bne _020B0800 -_020B07A8: - mov r0, r4 - bl FUN_020B0448 - b _020B0800 -_020B07B4: - ldr r0, [r4, #0x1c] - cmp r0, #0x1 - bne _020B07D0 - ldr r0, [r4, #0x20] - ldr r1, [r4, #0xc] - ldr r2, [r4, #0x24] - blx r2 -_020B07D0: - ldr r0, [r4, #0x14] - cmp r0, #0x0 - ldreq r0, [r4, #0x18] - ldreq r0, [r0, #0x8] - cmp r0, #0x2 - beq _020B07F8 - cmp r0, #0x4 - movne r0, #0x0 - strne r0, [r4, #0x8] - bne _020B0800 -_020B07F8: - mov r0, r4 - bl FUN_020B0448 -_020B0800: - ldr r1, [r4, #0x18] - ldr r2, [r4, #0x0] - ldrh r0, [r1, #0x0] - ldr r1, [r1, #0xc] - add r0, r1, r0, lsl #0x3 - sub r0, r0, #0x8 - cmp r2, r0 - strhi r0, [r4, #0x0] - ldmhiia sp!, {r4,pc} - cmp r2, r1 - strcc r1, [r4, #0x0] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B0830 -FUN_020B0830: ; 0x020B0830 - ldrh r3, [r0, #0x6] - ldrh r2, [r0, #0x8] - mov r12, #0x0 - add r1, r3, #0x1 - cmp r2, r1 - bgt _020B0854 - ldrh r0, [r0, #0x4] - cmp r0, r3 - movls r12, #0x1 -_020B0854: - cmp r12, #0x0 - subne r0, r3, r2 - addne r0, r0, #0x1 - movne r0, r0, lsl #0x10 - movne r0, r0, lsr #0x10 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020B0870 -FUN_020B0870: ; 0x020B0870 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020B09B4 - mov r0, r4 - bl FUN_020B0888 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B0888 -FUN_020B0888: ; 0x020B0888 - stmdb sp!, {r4-r6,lr} - mov r5, r0 - ldr r0, [r5, #0x14] - cmp r0, #0x0 - beq _020B0944 - ldrh r2, [r5, #0x6] - ldrh r1, [r5, #0x8] - mov r3, #0x0 - add r0, r2, #0x1 - cmp r1, r0 - bgt _020B08C0 - ldrh r0, [r5, #0x4] - cmp r0, r2 - movls r3, #0x1 -_020B08C0: - cmp r3, #0x0 - moveq r4, #0x0 - beq _020B08E0 - ldrh r0, [r5, #0x4] - sub r0, r2, r0 - add r0, r0, #0x1 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0xd -_020B08E0: - ldr r2, [r5, #0x0] - ldr r1, _020B09AC ; =UNK_021CCDA0 - mov r0, #0x540 - mla r1, r2, r0, r1 - ldrh r0, [r5, #0x4] - add r2, r1, #0x100 - mov r1, r4 - add r6, r2, r0, lsl #0x3 - mov r0, r6 - bl DC_InvalidateRange - ldr r0, _020B09B0 ; =GXi_DmaId - mvn r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, r1 - beq _020B0930 - mov r1, r6 - mov r3, r4 - mov r2, #0xc0 - bl MI_DmaFill32 - b _020B0998 -_020B0930: - mov r1, r6 - mov r2, r4 - mov r0, #0xc0 - bl MIi_CpuClear32 - b _020B0998 -_020B0944: - ldr r2, [r5, #0x0] - ldr r1, _020B09AC ; =UNK_021CCDA0 - mov r0, #0x540 - mla r1, r2, r0, r1 - ldrh r2, [r5, #0x4] - ldrh r0, [r5, #0x6] - add r1, r1, #0x100 - add r3, r1, r2, lsl #0x3 - sub r0, r0, r2 - add r0, r0, #0x1 - mov r0, r0, lsl #0x10 - movs r2, r0, lsr #0x10 - mov r0, #0x0 - beq _020B0998 - mov r1, #0xc0 -_020B0980: - add r0, r0, #0x1 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, r2 - strh r1, [r3], #0x8 - blo _020B0980 -_020B0998: - ldrh r0, [r5, #0x4] - strh r0, [r5, #0x8] - ldrh r0, [r5, #0xa] - strh r0, [r5, #0xe] - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B09AC: .word UNK_021CCDA0 -_020B09B0: .word GXi_DmaId - - arm_func_start FUN_020B09B4 -FUN_020B09B4: ; 0x020B09B4 - stmdb sp!, {r4-r10,lr} - mov r7, r0 - ldr r0, [r7, #0x14] - cmp r0, #0x0 - beq _020B0A48 - ldr r5, [r7, #0x0] - ldr r1, _020B0BA8 ; =UNK_021CCDA0 - mov r0, #0x540 - mla r1, r5, r0, r1 - ldrh r2, [r7, #0x4] - ldrh r0, [r7, #0x6] - add r1, r1, #0x100 - add r4, r1, r2, lsl #0x3 - sub r0, r0, r2 - add r0, r0, #0x1 - mov r0, r0, lsl #0x13 - mov r6, r0, lsr #0x10 - mov r2, r2, lsl #0x13 - mov r0, r4 - mov r1, r6 - mov r7, r2, lsr #0x10 - bl DC_FlushRange - cmp r5, #0x0 - beq _020B0A20 - cmp r5, #0x1 - beq _020B0A34 - ldmia sp!, {r4-r10,pc} -_020B0A20: - mov r0, r4 - mov r1, r7 - mov r2, r6 - bl GX_LoadOAM - ldmia sp!, {r4-r10,pc} -_020B0A34: - mov r0, r4 - mov r1, r7 - mov r2, r6 - bl GXS_LoadOAM - ldmia sp!, {r4-r10,pc} -_020B0A48: - ldr r0, [r7, #0x0] - ldr r2, _020B0BA8 ; =UNK_021CCDA0 - mov r1, #0x540 - mla r2, r0, r1, r2 - ldrh r5, [r7, #0x4] - ldrh r1, [r7, #0x6] - ldr r3, _020B0BAC ; =UNK_0210655C - add r4, r2, #0x100 - sub r1, r1, r5 - add r1, r1, #0x1 - mov r1, r1, lsl #0x10 - mov r2, r5, lsl #0x13 - add r6, r4, r5, lsl #0x3 - movs r5, r1, lsr #0x10 - mov r4, r2, lsr #0x10 - ldr r9, [r3, r0, lsl #0x2] - mov r10, #0x0 - beq _020B0AC8 - mov r8, #0x6 -_020B0A94: - mov r0, r6 - mov r1, r4 - mov r2, r8 - blx r9 - add r0, r10, #0x1 - add r2, r4, #0x8 - mov r1, r0, lsl #0x10 - mov r0, r2, lsl #0x10 - mov r10, r1, lsr #0x10 - cmp r10, r5 - mov r4, r0, lsr #0x10 - add r6, r6, #0x8 - blo _020B0A94 -_020B0AC8: - ldrh r2, [r7, #0xc] - ldrh r1, [r7, #0xe] - mov r3, #0x0 - add r0, r2, #0x1 - cmp r1, r0 - bgt _020B0AEC - ldrh r0, [r7, #0xa] - cmp r0, r2 - movls r3, #0x1 -_020B0AEC: - cmp r3, #0x0 - ldmeqia sp!, {r4-r10,pc} - ldr r0, [r7, #0x0] - ldr r2, _020B0BA8 ; =UNK_021CCDA0 - mov r1, #0x540 - mla r2, r0, r1, r2 - ldrh r5, [r7, #0xa] - add r4, r2, #0x100 - ldrh r1, [r7, #0xc] - mov r2, r5, lsl #0x15 - ldr r3, _020B0BAC ; =UNK_0210655C - sub r1, r1, r5 - add r1, r1, #0x1 - mov r1, r1, lsl #0x10 - add r9, r4, r5, lsl #0x5 - ldr r5, [r3, r0, lsl #0x2] - movs r8, r1, lsr #0x10 - mov r7, r2, lsr #0x10 - mov r6, #0x0 - ldmeqia sp!, {r4-r10,pc} - mov r4, #0x2 -_020B0B40: - mov r2, r4 - add r0, r9, #0x6 - add r1, r7, #0x6 - blx r5 - mov r2, r4 - add r0, r9, #0xe - add r1, r7, #0xe - blx r5 - mov r2, r4 - add r0, r9, #0x16 - add r1, r7, #0x16 - blx r5 - add r0, r9, #0x1e - add r1, r7, #0x1e - mov r2, r4 - blx r5 - add r0, r7, #0x20 - mov r0, r0, lsl #0x10 - mov r7, r0, lsr #0x10 - add r9, r9, #0x20 - add r0, r6, #0x1 - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 - cmp r6, r8 - blo _020B0B40 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020B0BA8: .word UNK_021CCDA0 -_020B0BAC: .word UNK_0210655C - - arm_func_start FUN_020B0BB0 -FUN_020B0BB0: ; 0x020B0BB0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r12, [r0, #0xc] - ldrh r3, [r0, #0xe] - mov lr, #0x0 - add r2, r12, #0x1 - cmp r3, r2 - bgt _020B0BDC - ldrh r2, [r0, #0xa] - cmp r2, r12 - movls lr, #0x1 -_020B0BDC: - cmp lr, #0x0 - subne r2, r12, r3 - addne r2, r2, #0x1 - movne r2, r2, lsl #0x10 - movne r2, r2, lsr #0x10 - moveq r2, #0x0 - cmp r2, #0x1 - movcs r2, #0x1 - movcc r2, #0x0 - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldreq r0, _020B0C74 ; =0x0000FFFE - ldmeqia sp!, {pc} - ldr lr, [r0, #0x0] - ldr r3, _020B0C78 ; =UNK_021CCDA0 - mov r2, #0x540 - mla r12, lr, r2, r3 - ldr r3, [r1, #0x0] - ldrh r2, [r0, #0xe] - add r12, r12, #0x100 - mov r3, r3, asr #0x4 - add r12, r12, r2, lsl #0x5 - strh r3, [r12, #0x6] - ldr r3, [r1, #0x4] - mov r3, r3, asr #0x4 - strh r3, [r12, #0xe] - ldr r3, [r1, #0x8] - mov r3, r3, asr #0x4 - strh r3, [r12, #0x16] - ldr r1, [r1, #0xc] - mov r1, r1, asr #0x4 - strh r1, [r12, #0x1e] - ldrh r1, [r0, #0xe] - add r1, r1, #0x1 - strh r1, [r0, #0xe] - mov r0, r2 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B0C74: .word 0x0000FFFE -_020B0C78: .word UNK_021CCDA0 - - arm_func_start FUN_020B0C7C -FUN_020B0C7C: ; 0x020B0C7C - stmdb sp!, {r4,lr} - ldrh r12, [r0, #0x6] - ldrh r4, [r0, #0x8] - mov lr, #0x0 - add r3, r12, #0x1 - cmp r4, r3 - bgt _020B0CA4 - ldrh r3, [r0, #0x4] - cmp r3, r12 - movls lr, #0x1 -_020B0CA4: - cmp lr, #0x0 - subne r3, r12, r4 - addne r3, r3, #0x1 - movne r3, r3, lsl #0x10 - movne r3, r3, lsr #0x10 - moveq r3, #0x0 - cmp r3, #0x1 - movcs r3, #0x1 - movcc r3, #0x0 - cmp r3, #0x0 - beq _020B0D48 - ldr r4, [r0, #0x0] - ldr ip, _020B0D50 ; =UNK_021CCDA0 - mov r3, #0x540 - mla r12, r4, r3, r12 - ldrh r3, [r0, #0x8] - add r4, r12, #0x100 - ldrh r12, [r1, #0x0] - mov lr, r3, lsl #0x3 - add r3, r4, r3, lsl #0x3 - strh r12, [r4, lr] - ldrh lr, [r1, #0x2] - ldr ip, _020B0D54 ; =0x0000FFFE - strh lr, [r3, #0x2] - ldrh r1, [r1, #0x4] - cmp r2, r12 - strh r1, [r3, #0x4] - beq _020B0D34 - ldr r1, [r3, #0x0] - mov r12, r1, lsl #0x16 - mov r12, r12, lsr #0x1e - ands r12, r12, #0x1 - bicne r12, r1, #0x3e000000 - andne r1, r2, #0x1f - orrne r1, r12, r1, lsl #0x19 - strne r1, [r3, #0x0] -_020B0D34: - ldrh r1, [r0, #0x8] - add r1, r1, #0x1 - strh r1, [r0, #0x8] - mov r0, #0x1 - ldmia sp!, {r4,pc} -_020B0D48: - mov r0, #0x0 - ldmia sp!, {r4,pc} - .balign 4 -_020B0D50: .word UNK_021CCDA0 -_020B0D54: .word 0x0000FFFE - - arm_func_start FUN_020B0D58 -FUN_020B0D58: ; 0x020B0D58 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldrh lr, [r0, #0x6] - ldrh r12, [r0, #0x8] - mov r4, #0x0 - add r3, lr, #0x1 - cmp r12, r3 - bgt _020B0D84 - ldrh r3, [r0, #0x4] - cmp r3, lr - movls r4, #0x1 -_020B0D84: - cmp r4, #0x0 - subne r3, lr, r12 - addne r3, r3, #0x1 - movne r3, r3, lsl #0x10 - movne r3, r3, lsr #0x10 - moveq r3, #0x0 - cmp r3, r2 - movcs r3, #0x1 - movcc r3, #0x0 - cmp r3, #0x0 - beq _020B0E24 - ldr lr, [r0, #0x0] - ldr ip, _020B0E30 ; =UNK_021CCDA0 - mov r3, #0x540 - mla r12, lr, r3, r12 - ldrh r3, [r0, #0x8] - add r12, r12, #0x100 - cmp r2, #0x0 - add r4, r12, r3, lsl #0x3 - mov r5, #0x0 - ble _020B0E18 - add r3, r0, #0x8 -_020B0DDC: - ldrh lr, [r1, #0x0] - mov r0, r5, lsl #0x3 - add r12, r4, r5, lsl #0x3 - strh lr, [r4, r0] - ldrh r0, [r1, #0x2] - add r5, r5, #0x1 - cmp r5, r2 - strh r0, [r12, #0x2] - ldrh r0, [r1, #0x4] - add r1, r1, #0x8 - strh r0, [r12, #0x4] - ldrh r0, [r3, #0x0] - add r0, r0, #0x1 - strh r0, [r3, #0x0] - blt _020B0DDC -_020B0E18: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r5,pc} -_020B0E24: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B0E30: .word UNK_021CCDA0 - - arm_func_start FUN_020B0E34 -FUN_020B0E34: ; 0x020B0E34 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr r5, [sp, #0x1c] - ldr r6, _020B0FB4 ; =UNK_021CCDA0 - mov r4, #0x540 - mla r4, r5, r4, r6 - mov lr, r1 - sub r1, r2, #0x1 - add r1, lr, r1 - mov r1, r1, lsl #0x10 - mov r12, r1, lsr #0x10 - add r7, r4, lr, lsl #0x1 - add r2, r4, r12, lsl #0x1 - mov r6, r0 - mov r5, r3 - cmp r7, r2 - mov r3, lr, lsl #0x1 - bhi _020B0E9C - ldr r0, _020B0FB8 ; =0x0000FFFF -_020B0E80: - ldrh r1, [r7, #0x0] - cmp r1, r0 - movne r0, #0x0 - bne _020B0EA0 - add r7, r7, #0x2 - cmp r7, r2 - bls _020B0E80 -_020B0E9C: - mov r0, #0x1 -_020B0EA0: - cmp r0, #0x0 - beq _020B0EE0 - ldr r0, _020B0FBC ; =UNK_021CCD9C - sub r2, r12, lr - ldrh r7, [r0, #0x0] - add r1, r4, r3 - mov r2, r2, lsl #0x1 - add r3, r7, #0x1 - strh r3, [r0, #0x0] - strh r7, [r6, #0x10] - strh lr, [r6, #0x4] - strh r12, [r6, #0x6] - strh lr, [r6, #0x8] - ldrh r0, [r6, #0x10] - bl MIi_CpuClear16 - b _020B0EEC -_020B0EE0: - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,pc} -_020B0EEC: - ldrh r0, [sp, #0x18] - add r4, r4, #0x500 - cmp r0, #0x0 - bne _020B0F18 - mov r0, #0x20 - strh r0, [r6, #0xa] - mov r0, #0x0 - strh r0, [r6, #0xc] - ldrh r0, [r6, #0xa] - strh r0, [r6, #0xe] - b _020B0F98 -_020B0F18: - sub r0, r0, #0x1 - add r0, r5, r0 - mov r0, r0, lsl #0x10 - mov r12, r0, lsr #0x10 - add r7, r4, r5, lsl #0x1 - add r2, r4, r12, lsl #0x1 - cmp r7, r2 - mov r3, r5, lsl #0x1 - bhi _020B0F5C - ldr r0, _020B0FB8 ; =0x0000FFFF -_020B0F40: - ldrh r1, [r7, #0x0] - cmp r1, r0 - movne r0, #0x0 - bne _020B0F60 - add r7, r7, #0x2 - cmp r7, r2 - bls _020B0F40 -_020B0F5C: - mov r0, #0x1 -_020B0F60: - cmp r0, #0x0 - beq _020B0F8C - strh r5, [r6, #0xa] - strh r12, [r6, #0xc] - strh r5, [r6, #0xe] - ldrh r0, [r6, #0x10] - sub r2, r12, r5 - add r1, r4, r3 - mov r2, r2, lsl #0x1 - bl MIi_CpuClear16 - b _020B0F98 -_020B0F8C: - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r7,pc} -_020B0F98: - mov r1, #0x0 - ldr r0, [sp, #0x1c] - str r1, [r6, #0x14] - str r0, [r6, #0x0] - mov r0, #0x1 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B0FB4: .word UNK_021CCDA0 -_020B0FB8: .word 0x0000FFFF -_020B0FBC: .word UNK_021CCD9C - - arm_func_start FUN_020B0FC0 -FUN_020B0FC0: ; 0x020B0FC0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020B1060 ; =UNK_021CCEA0 - mov r0, #0xc0 - mov r2, #0x400 - bl MIi_CpuClear16 - ldr r1, _020B1064 ; =UNK_021CD3E0 - mov r0, #0xc0 - mov r2, #0x400 - bl MIi_CpuClear16 - ldr r1, _020B1068 ; =UNK_021CD920 - mov r0, #0xc0 - mov r2, #0x400 - bl MIi_CpuClear16 - ldr r0, _020B106C ; =0x0000FFFF - ldr r1, _020B1070 ; =UNK_021CCDA0 - mov r2, #0x100 - bl MIi_CpuClear16 - ldr r0, _020B106C ; =0x0000FFFF - ldr r1, _020B1074 ; =UNK_021CD2E0 - mov r2, #0x100 - bl MIi_CpuClear16 - ldr r0, _020B106C ; =0x0000FFFF - ldr r1, _020B1078 ; =UNK_021CD820 - mov r2, #0x100 - bl MIi_CpuClear16 - ldr r0, _020B106C ; =0x0000FFFF - ldr r1, _020B107C ; =UNK_021CD2A0 - mov r2, #0x40 - bl MIi_CpuClear16 - ldr r0, _020B106C ; =0x0000FFFF - ldr r1, _020B1080 ; =UNK_021CD7E0 - mov r2, #0x40 - bl MIi_CpuClear16 - ldr r0, _020B106C ; =0x0000FFFF - ldr r1, _020B1084 ; =UNK_021CDD20 - mov r2, #0x40 - bl MIi_CpuClear16 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B1060: .word UNK_021CCEA0 -_020B1064: .word UNK_021CD3E0 -_020B1068: .word UNK_021CD920 -_020B106C: .word 0x0000FFFF -_020B1070: .word UNK_021CCDA0 -_020B1074: .word UNK_021CD2E0 -_020B1078: .word UNK_021CD820 -_020B107C: .word UNK_021CD2A0 -_020B1080: .word UNK_021CD7E0 -_020B1084: .word UNK_021CDD20 - - arm_func_start FUN_020B1088 -FUN_020B1088: ; 0x020B1088 - ldr ip, _020B1094 ; =MIi_CpuCopy16 - add r1, r1, #0x7000000 - bx r12 - .balign 4 -_020B1094: .word MIi_CpuCopy16 - - arm_func_start FUN_020B1098 -FUN_020B1098: ; 0x020B1098 - ldr r3, _020B10A8 ; =0x07000400 - ldr ip, _020B10AC ; =MIi_CpuCopy16 - add r1, r1, r3 - bx r12 - .balign 4 -_020B10A8: .word 0x07000400 -_020B10AC: .word MIi_CpuCopy16 - - arm_func_start FUN_020B10B0 -FUN_020B10B0: ; 0x020B10B0 - mov r1, r1, lsl #0x1 - ldrh r0, [r0, r1] - bx lr - - arm_func_start FUN_020B10BC -FUN_020B10BC: ; 0x020B10BC - ldr r0, [r0, r1, lsl #0x2] - bx lr - - arm_func_start FUN_020B10C4 -FUN_020B10C4: - str r2, [r0, r1, lsl #0x2] - bx lr - - arm_func_start FUN_020B10CC -FUN_020B10CC: - mov r2, #0x0 - mvn r1, #0x0 -_020B10D4: - str r1, [r0, r2, lsl #0x2] - add r2, r2, #0x1 - cmp r2, #0x3 - blt _020B10D4 - bx lr - - arm_func_start FUN_020B10E8 -FUN_020B10E8: ; 0x020B10E8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r10, r0 - ldr r0, [r10, #0x0] - mov r9, r1 - cmp r0, #0x3 - ldr r0, [sp, #0x28] - moveq r7, #0x20 - str r0, [sp, #0x28] - ldrh r0, [r9, #0x0] - movne r7, #0x200 - mov r11, r2 - mov r8, r3 - str r0, [sp, #0x0] - mov r6, #0x0 - cmp r0, #0x0 - bls _020B1210 -_020B112C: - ldr r1, [r9, #0x4] - mov r0, r6, lsl #0x1 - ldrh r2, [r1, r0] - ldr r0, [r10, #0xc] - ldr r1, [r10, #0x8] - mla r5, r7, r2, r11 - mla r4, r7, r6, r0 - bl DC_FlushRange - cmp r8, #0x0 - beq _020B11E0 - cmp r8, #0x1 - beq _020B1168 - cmp r8, #0x2 - beq _020B11A4 - b _020B11F8 -_020B1168: - ldr r0, [r10, #0x4] - cmp r0, #0x0 - beq _020B1190 - bl GX_BeginLoadOBJExtPltt - mov r0, r4 - mov r1, r5 - mov r2, r7 - bl GX_LoadOBJExtPltt - bl GX_EndLoadOBJExtPltt - b _020B11F8 -_020B1190: - mov r0, r4 - mov r1, r5 - mov r2, r7 - bl GX_LoadOBJPltt - b _020B11F8 -_020B11A4: - ldr r0, [r10, #0x4] - cmp r0, #0x0 - beq _020B11CC - bl GXS_BeginLoadOBJExtPltt - mov r0, r4 - mov r1, r5 - mov r2, r7 - bl GXS_LoadOBJExtPltt - bl GXS_EndLoadOBJExtPltt - b _020B11F8 -_020B11CC: - mov r0, r4 - mov r1, r5 - mov r2, r7 - bl GXS_LoadOBJPltt - b _020B11F8 -_020B11E0: - bl GX_BeginLoadTexPltt - mov r0, r4 - mov r1, r5 - mov r2, r7 - bl GX_LoadTexPltt - bl GX_EndLoadTexPltt -_020B11F8: - add r0, r6, #0x1 - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 - ldr r0, [sp, #0x0] - cmp r6, r0 - blo _020B112C -_020B1210: - ldr r0, [sp, #0x28] - ldr r2, [r10, #0x0] - mov r1, r0 - str r2, [r1, #0x0] - ldr r4, [r10, #0x4] - mov r3, r0 - mov r1, r8 - mov r2, r11 - str r4, [r3, #0x4] - bl FUN_020B19D0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B1240 -FUN_020B1240: ; 0x020B1240 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r9, r0 - ldr r5, [r9, #0xc] - ldr r4, [r9, #0x8] - mov r8, r1 - mov r7, r2 - mov r0, r5 - mov r1, r4 - mov r6, r3 - bl DC_FlushRange - cmp r7, #0x0 - beq _020B1300 - cmp r7, #0x1 - beq _020B1288 - cmp r7, #0x2 - beq _020B12C4 - b _020B1318 -_020B1288: - ldr r0, [r9, #0x4] - cmp r0, #0x0 - beq _020B12B0 - bl GX_BeginLoadOBJExtPltt - mov r0, r5 - mov r1, r8 - mov r2, r4 - bl GX_LoadOBJExtPltt - bl GX_EndLoadOBJExtPltt - b _020B1318 -_020B12B0: - mov r0, r5 - mov r1, r8 - mov r2, r4 - bl GX_LoadOBJPltt - b _020B1318 -_020B12C4: - ldr r0, [r9, #0x4] - cmp r0, #0x0 - beq _020B12EC - bl GXS_BeginLoadOBJExtPltt - mov r0, r5 - mov r1, r8 - mov r2, r4 - bl GXS_LoadOBJExtPltt - bl GXS_EndLoadOBJExtPltt - b _020B1318 -_020B12EC: - mov r0, r5 - mov r1, r8 - mov r2, r4 - bl GXS_LoadOBJPltt - b _020B1318 -_020B1300: - bl GX_BeginLoadTexPltt - mov r0, r5 - mov r1, r8 - mov r2, r4 - bl GX_LoadTexPltt - bl GX_EndLoadTexPltt -_020B1318: - ldr r1, [r9, #0x0] - mov r0, r6 - str r1, [r6, #0x0] - ldr r3, [r9, #0x4] - mov r1, r7 - mov r2, r8 - str r3, [r6, #0x4] - bl FUN_020B19D0 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_020B1340 -FUN_020B1340: ; 0x020B1340 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - mov r6, r1 - ldr r0, [r7, #0x14] - ldr r1, [r7, #0x10] - mov r5, r2 - mov r4, r3 - bl DC_FlushRange - cmp r5, #0x0 - ldr r0, [r7, #0x8] - beq _020B13B8 - cmp r5, #0x1 - beq _020B1384 - cmp r5, #0x2 - beq _020B13A0 - b _020B13B8 -_020B1384: - mov r3, #0x4000000 - ldr r2, [r3, #0x0] - ldr r1, _020B1520 ; =0xFFCFFFEF - and r1, r2, r1 - orr r0, r1, r0 - str r0, [r3, #0x0] - b _020B13B8 -_020B13A0: - ldr r3, _020B1524 ; =0x04001000 - ldr r1, _020B1520 ; =0xFFCFFFEF - ldr r2, [r3, #0x0] - and r1, r2, r1 - orr r0, r1, r0 - str r0, [r3, #0x0] -_020B13B8: - ldr r0, [r7, #0x8] - cmp r0, #0x0 - bne _020B14D8 - ldrh r0, [r7, #0x2] - cmp r0, #0x10 - bgt _020B1408 - cmp r0, #0x10 - bge _020B1434 - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020B1444 - ; Jump table - b _020B1444 ; case 0 - b _020B1414 ; case 1 - b _020B141C ; case 2 - b _020B1444 ; case 3 - b _020B1424 ; case 4 - b _020B1444 ; case 5 - b _020B1444 ; case 6 - b _020B1444 ; case 7 - b _020B142C ; case 8 -_020B1408: - cmp r0, #0x20 - beq _020B143C - b _020B1444 -_020B1414: - mov r0, #0x0 - b _020B1448 -_020B141C: - mov r0, #0x1 - b _020B1448 -_020B1424: - mov r0, #0x2 - b _020B1448 -_020B142C: - mov r0, #0x3 - b _020B1448 -_020B1434: - mov r0, #0x4 - b _020B1448 -_020B143C: - mov r0, #0x5 - b _020B1448 -_020B1444: - mov r0, #0x0 -_020B1448: - str r0, [r4, #0xc] - ldrh r0, [r7, #0x0] - cmp r0, #0x10 - bgt _020B1490 - cmp r0, #0x10 - bge _020B14BC - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020B14CC - ; Jump table - b _020B14CC ; case 0 - b _020B149C ; case 1 - b _020B14A4 ; case 2 - b _020B14CC ; case 3 - b _020B14AC ; case 4 - b _020B14CC ; case 5 - b _020B14CC ; case 6 - b _020B14CC ; case 7 - b _020B14B4 ; case 8 -_020B1490: - cmp r0, #0x20 - beq _020B14C4 - b _020B14CC -_020B149C: - mov r0, #0x0 - b _020B14D0 -_020B14A4: - mov r0, #0x1 - b _020B14D0 -_020B14AC: - mov r0, #0x2 - b _020B14D0 -_020B14B4: - mov r0, #0x3 - b _020B14D0 -_020B14BC: - mov r0, #0x4 - b _020B14D0 -_020B14C4: - mov r0, #0x5 - b _020B14D0 -_020B14CC: - mov r0, #0x0 -_020B14D0: - str r0, [r4, #0x10] - b _020B14E8 -_020B14D8: - ldrh r0, [r7, #0x2] - str r0, [r4, #0xc] - ldrh r0, [r7, #0x0] - str r0, [r4, #0x10] -_020B14E8: - ldr r1, [r7, #0x4] - mov r0, #0x0 - str r1, [r4, #0x14] - str r0, [r4, #0x18] - mov r0, #0x1 - str r0, [r4, #0x1c] - ldr r3, [r7, #0x8] - mov r0, r4 - mov r1, r5 - mov r2, r6 - str r3, [r4, #0x20] - bl FUN_020B1A1C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B1520: .word 0xFFCFFFEF -_020B1524: .word 0x04001000 - - arm_func_start FUN_020B1528 -FUN_020B1528: ; 0x020B1528 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - movs r5, r2 - mov r6, r1 - mov r4, r3 - ldr r0, [r7, #0x8] - beq _020B1590 - cmp r5, #0x1 - beq _020B155C - cmp r5, #0x2 - beq _020B1578 - b _020B1590 -_020B155C: - mov r3, #0x4000000 - ldr r2, [r3, #0x0] - ldr r1, _020B1760 ; =0xFFCFFFEF - and r1, r2, r1 - orr r0, r1, r0 - str r0, [r3, #0x0] - b _020B1590 -_020B1578: - ldr r3, _020B1764 ; =0x04001000 - ldr r1, _020B1760 ; =0xFFCFFFEF - ldr r2, [r3, #0x0] - and r1, r2, r1 - orr r0, r1, r0 - str r0, [r3, #0x0] -_020B1590: - ldr r0, [r7, #0x14] - ldr r1, [r7, #0x10] - bl DC_FlushRange - cmp r5, #0x0 - beq _020B15B8 - cmp r5, #0x1 - beq _020B15D4 - cmp r5, #0x2 - beq _020B15E8 - b _020B15F8 -_020B15B8: - bl GX_BeginLoadTex - ldr r0, [r7, #0x14] - ldr r2, [r7, #0x10] - mov r1, r6 - bl GX_LoadTex - bl GX_EndLoadTex - b _020B15F8 -_020B15D4: - ldr r0, [r7, #0x14] - ldr r2, [r7, #0x10] - mov r1, r6 - bl GX_LoadOBJ - b _020B15F8 -_020B15E8: - ldr r0, [r7, #0x14] - ldr r2, [r7, #0x10] - mov r1, r6 - bl GXS_LoadOBJ -_020B15F8: - ldr r0, [r7, #0x8] - cmp r0, #0x0 - bne _020B1718 - ldrh r0, [r7, #0x2] - cmp r0, #0x10 - bgt _020B1648 - cmp r0, #0x10 - bge _020B1674 - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020B1684 - ; Jump table - b _020B1684 ; case 0 - b _020B1654 ; case 1 - b _020B165C ; case 2 - b _020B1684 ; case 3 - b _020B1664 ; case 4 - b _020B1684 ; case 5 - b _020B1684 ; case 6 - b _020B1684 ; case 7 - b _020B166C ; case 8 -_020B1648: - cmp r0, #0x20 - beq _020B167C - b _020B1684 -_020B1654: - mov r0, #0x0 - b _020B1688 -_020B165C: - mov r0, #0x1 - b _020B1688 -_020B1664: - mov r0, #0x2 - b _020B1688 -_020B166C: - mov r0, #0x3 - b _020B1688 -_020B1674: - mov r0, #0x4 - b _020B1688 -_020B167C: - mov r0, #0x5 - b _020B1688 -_020B1684: - mov r0, #0x0 -_020B1688: - str r0, [r4, #0xc] - ldrh r0, [r7, #0x0] - cmp r0, #0x10 - bgt _020B16D0 - cmp r0, #0x10 - bge _020B16FC - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020B170C - ; Jump table - b _020B170C ; case 0 - b _020B16DC ; case 1 - b _020B16E4 ; case 2 - b _020B170C ; case 3 - b _020B16EC ; case 4 - b _020B170C ; case 5 - b _020B170C ; case 6 - b _020B170C ; case 7 - b _020B16F4 ; case 8 -_020B16D0: - cmp r0, #0x20 - beq _020B1704 - b _020B170C -_020B16DC: - mov r0, #0x0 - b _020B1710 -_020B16E4: - mov r0, #0x1 - b _020B1710 -_020B16EC: - mov r0, #0x2 - b _020B1710 -_020B16F4: - mov r0, #0x3 - b _020B1710 -_020B16FC: - mov r0, #0x4 - b _020B1710 -_020B1704: - mov r0, #0x5 - b _020B1710 -_020B170C: - mov r0, #0x0 -_020B1710: - str r0, [r4, #0x10] - b _020B1728 -_020B1718: - ldrh r0, [r7, #0x2] - str r0, [r4, #0xc] - ldrh r0, [r7, #0x0] - str r0, [r4, #0x10] -_020B1728: - ldr r1, [r7, #0x4] - mov r0, #0x0 - str r1, [r4, #0x14] - str r0, [r4, #0x18] - mov r0, #0x1 - str r0, [r4, #0x1c] - ldr r3, [r7, #0x8] - mov r0, r4 - mov r1, r5 - mov r2, r6 - str r3, [r4, #0x20] - bl FUN_020B1A1C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B1760: .word 0xFFCFFFEF -_020B1764: .word 0x04001000 - - arm_func_start FUN_020B1768 -FUN_020B1768: ; 0x020B1768 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - movs r5, r2 - mov r6, r1 - mov r4, r3 - ldr r0, [r7, #0x8] - beq _020B17D0 - cmp r5, #0x1 - beq _020B179C - cmp r5, #0x2 - beq _020B17B8 - b _020B17D0 -_020B179C: - mov r3, #0x4000000 - ldr r2, [r3, #0x0] - ldr r1, _020B19A0 ; =0xFFCFFFEF - and r1, r2, r1 - orr r0, r1, r0 - str r0, [r3, #0x0] - b _020B17D0 -_020B17B8: - ldr r3, _020B19A4 ; =0x04001000 - ldr r1, _020B19A0 ; =0xFFCFFFEF - ldr r2, [r3, #0x0] - and r1, r2, r1 - orr r0, r1, r0 - str r0, [r3, #0x0] -_020B17D0: - ldr r0, [r7, #0x14] - ldr r1, [r7, #0x10] - bl DC_FlushRange - cmp r5, #0x0 - beq _020B17F8 - cmp r5, #0x1 - beq _020B1814 - cmp r5, #0x2 - beq _020B1828 - b _020B1838 -_020B17F8: - bl GX_BeginLoadTex - ldr r0, [r7, #0x14] - ldr r2, [r7, #0x10] - mov r1, r6 - bl GX_LoadTex - bl GX_EndLoadTex - b _020B1838 -_020B1814: - ldr r0, [r7, #0x14] - ldr r2, [r7, #0x10] - mov r1, r6 - bl GX_LoadOBJ - b _020B1838 -_020B1828: - ldr r0, [r7, #0x14] - ldr r2, [r7, #0x10] - mov r1, r6 - bl GXS_LoadOBJ -_020B1838: - ldr r0, [r7, #0x8] - cmp r0, #0x0 - bne _020B1958 - ldrh r0, [r7, #0x2] - cmp r0, #0x10 - bgt _020B1888 - cmp r0, #0x10 - bge _020B18B4 - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020B18C4 - ; Jump table - b _020B18C4 ; case 0 - b _020B1894 ; case 1 - b _020B189C ; case 2 - b _020B18C4 ; case 3 - b _020B18A4 ; case 4 - b _020B18C4 ; case 5 - b _020B18C4 ; case 6 - b _020B18C4 ; case 7 - b _020B18AC ; case 8 -_020B1888: - cmp r0, #0x20 - beq _020B18BC - b _020B18C4 -_020B1894: - mov r0, #0x0 - b _020B18C8 -_020B189C: - mov r0, #0x1 - b _020B18C8 -_020B18A4: - mov r0, #0x2 - b _020B18C8 -_020B18AC: - mov r0, #0x3 - b _020B18C8 -_020B18B4: - mov r0, #0x4 - b _020B18C8 -_020B18BC: - mov r0, #0x5 - b _020B18C8 -_020B18C4: - mov r0, #0x0 -_020B18C8: - str r0, [r4, #0xc] - ldrh r0, [r7, #0x0] - cmp r0, #0x10 - bgt _020B1910 - cmp r0, #0x10 - bge _020B193C - cmp r0, #0x8 - addls pc, pc, r0, lsl #0x2 - b _020B194C - ; Jump table - b _020B194C ; case 0 - b _020B191C ; case 1 - b _020B1924 ; case 2 - b _020B194C ; case 3 - b _020B192C ; case 4 - b _020B194C ; case 5 - b _020B194C ; case 6 - b _020B194C ; case 7 - b _020B1934 ; case 8 -_020B1910: - cmp r0, #0x20 - beq _020B1944 - b _020B194C -_020B191C: - mov r0, #0x0 - b _020B1950 -_020B1924: - mov r0, #0x1 - b _020B1950 -_020B192C: - mov r0, #0x2 - b _020B1950 -_020B1934: - mov r0, #0x3 - b _020B1950 -_020B193C: - mov r0, #0x4 - b _020B1950 -_020B1944: - mov r0, #0x5 - b _020B1950 -_020B194C: - mov r0, #0x0 -_020B1950: - str r0, [r4, #0x10] - b _020B1968 -_020B1958: - ldrh r0, [r7, #0x2] - str r0, [r4, #0xc] - ldrh r0, [r7, #0x0] - str r0, [r4, #0x10] -_020B1968: - ldr r1, [r7, #0x4] - mov r0, #0x0 - str r1, [r4, #0x14] - str r0, [r4, #0x18] - mov r0, #0x1 - str r0, [r4, #0x1c] - ldr r3, [r7, #0x8] - mov r0, r4 - mov r1, r5 - mov r2, r6 - str r3, [r4, #0x20] - bl FUN_020B1A1C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B19A0: .word 0xFFCFFFEF -_020B19A4: .word 0x04001000 - - arm_func_start FUN_020B19A8 -FUN_020B19A8: - add r0, r0, r1, lsl #0x2 - ldr r1, [r0, #0x8] - mvn r0, #0x0 - cmp r1, r0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020B19C4 -FUN_020B19C4: ; 0x020B19C4 - add r0, r0, r1, lsl #0x2 - ldr r0, [r0, #0x8] - bx lr - - arm_func_start FUN_020B19D0 -FUN_020B19D0: ; 0x020B19D0 - add r0, r0, r1, lsl #0x2 - str r2, [r0, #0x8] - bx lr - - arm_func_start FUN_020B19DC -FUN_020B19DC: ; 0x020B19DC - mov r3, #0x0 - mvn r2, #0x0 -_020B19E4: - add r1, r0, r3, lsl #0x2 - add r3, r3, #0x1 - str r2, [r1, #0x8] - cmp r3, #0x3 - blt _020B19E4 - bx lr - - arm_func_start FUN_020B19FC -FUN_020B19FC: - ldr r1, [r0, r1, lsl #0x2] - mvn r0, #0x0 - cmp r1, r0 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020B1A14 -FUN_020B1A14: ; 0x020B1A14 - ldr r0, [r0, r1, lsl #0x2] - bx lr - - arm_func_start FUN_020B1A1C -FUN_020B1A1C: ; 0x020B1A1C - str r2, [r0, r1, lsl #0x2] - bx lr - - arm_func_start FUN_020B1A24 -FUN_020B1A24: ; 0x020B1A24 - mov r2, #0x0 - mvn r1, #0x0 -_020B1A2C: - str r1, [r0, r2, lsl #0x2] - add r2, r2, #0x1 - cmp r2, #0x3 - blt _020B1A2C - bx lr - - arm_func_start FUN_020B1A40 -FUN_020B1A40: ; 0x020B1A40 - stmdb sp!, {r4,lr} - mov r4, r0 - add r1, r4, #0x4 - mov r0, #0x0 - mov r2, #0x18 - bl MIi_CpuClear16 - mov r0, #0x1000 - str r0, [r4, #0x4] - str r0, [r4, #0x8] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B1A68 -FUN_020B1A68: - ldr ip, _020B1A74 ; =FUN_020B1A40 - str r1, [r0, #0x0] - bx r12 - .balign 4 -_020B1A74: .word FUN_020B1A40 - - arm_func_start FUN_020B1A78 -FUN_020B1A78: ; 0x020B1A78 - ldr r3, [r0, #0x0] - cmp r3, #0x1 - ldreqh r3, [r0, #0x12] - orreq r3, r3, #0x2 - streqh r3, [r0, #0x12] - streq r1, [r0, #0x4] - streq r2, [r0, #0x8] - bx lr - - arm_func_start FUN_020B1A98 -FUN_020B1A98: ; 0x020B1A98 - ldr r2, [r0, #0x0] - cmp r2, #0x1 - ldreqh r2, [r0, #0x12] - orreq r2, r2, #0x4 - streqh r2, [r0, #0x12] - streqh r1, [r0, #0x10] - bx lr - - arm_func_start FUN_020B1AB4 -FUN_020B1AB4: ; 0x020B1AB4 - ldr r3, [r0, #0x0] - cmp r3, #0x1 - ldreqh r3, [r0, #0x12] - orreq r3, r3, #0x8 - streqh r3, [r0, #0x12] - streqh r1, [r0, #0xc] - streqh r2, [r0, #0xe] - bx lr - - arm_func_start FUN_020B1AD4 -FUN_020B1AD4: ; 0x020B1AD4 - mov r2, #0x0 - str r2, [r0, #0x0] - str r1, [r0, #0x4] - mov r1, #0x1 - str r1, [r0, #0x8] - ldr ip, _020B1AF4 ; =FUN_020B1A68 - add r0, r0, #0xc - bx r12 - .balign 4 -_020B1AF4: .word FUN_020B1A68 - - arm_func_start FUN_020B1AF8 -FUN_020B1AF8: ; 0x020B1AF8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - ldrh r5, [r2, #0x0] - ldr r4, [sp, #0x60] - ldr r10, [sp, #0x58] - str r4, [sp, #0x60] - cmp r1, r5 - movcs r1, r5 - mov r4, #0x0 - cmp r1, #0x0 - str r4, [sp, #0x0] - bls _020B1E7C - ldrh r4, [sp, #0x5c] - mov r4, r4, lsl #0x19 - str r4, [sp, #0x4] - ldr r4, [sp, #0x0] - str r4, [sp, #0x14] - mov r4, #0x100 - str r4, [sp, #0xc] - mov r4, #0x300 - str r4, [sp, #0x8] - mov r4, #0x1 - str r4, [sp, #0x10] -_020B1B54: - ldr r5, [sp, #0x0] - mov r6, #0x6 - mul r6, r5, r6 - ldr r8, [r2, #0x4] - ldr r4, [sp, #0x0] - add r7, r0, r5, lsl #0x3 - ldrh r5, [r8, r6] - mov r4, r4, lsl #0x3 - add r9, r8, r6 - strh r5, [r0, r4] - ldrh r4, [r9, #0x2] - cmp r3, #0x0 - strh r4, [r7, #0x2] - ldrh r4, [r9, #0x4] - strh r4, [r7, #0x4] - bne _020B1B9C - cmp r10, #0x0 - beq _020B1E60 -_020B1B9C: - ldr r5, [r7, #0x0] - ldr r4, _020B1E88 ; =0x01FF0000 - and r4, r5, r4 - mov r4, r4, lsr #0x10 - mov r4, r4, lsl #0x10 - mov r4, r4, asr #0x10 - cmp r4, #0xff - orrgt r4, r4, #0xff00 - movgt r4, r4, lsl #0x10 - movgt r4, r4, asr #0x10 - mov r4, r4, lsl #0xc - str r4, [sp, #0x20] - ldr r4, [r7, #0x0] - and r4, r4, #0xff - mov r4, r4, lsl #0x10 - mov r4, r4, asr #0x10 - cmp r4, #0x7f - orrgt r4, r4, #0xff00 - movgt r4, r4, lsl #0x10 - movgt r4, r4, asr #0x10 - mov r4, r4, lsl #0xc - str r4, [sp, #0x24] - cmp r3, #0x0 - beq _020B1E00 - ldr r5, [r7, #0x0] - and r6, r5, #0x300 - cmp r6, #0x100 - beq _020B1C1C - cmp r6, #0x300 - beq _020B1C1C - and r4, r5, #0x30000000 - orr r6, r6, r4 -_020B1C1C: - cmp r6, #0x300 - bne _020B1C70 - ldr r4, _020B1E8C ; =0xC000C000 - ldr r8, _020B1E90 ; =UNK_020FF8AC - and r5, r5, r4 - and r4, r5, #0xc000 - mov r6, r4, asr #0xe - and r4, r5, #0xc0000000 - mov r4, r4, lsr #0x1e - mov r4, r4, lsl #0x1 - add r8, r8, r6, lsl #0x3 - ldrh r9, [r4, r8] - ldr r8, _020B1E94 ; =UNK_020FF894 - ldr r5, [sp, #0x20] - add r6, r8, r6, lsl #0x3 - add r5, r5, r9, lsl #0xb - str r5, [sp, #0x20] - ldrh r4, [r4, r6] - ldr r5, [sp, #0x24] - add r4, r5, r4, lsl #0xb - str r4, [sp, #0x24] -_020B1C70: - ldr r4, [sp, #0x60] - ldr r5, [r3, #0x8] - cmp r4, #0x0 - ldrne r8, [sp, #0x8] - add r4, sp, #0x20 - ldreq r8, [sp, #0xc] - mov r6, r4 - cmp r8, #0x300 - ldreq r9, [sp, #0x10] - mov r12, #0x1000 - ldrne r9, [sp, #0x14] - cmp r4, r4 - ldr r4, [sp, #0x24] - addeq r6, sp, #0x28 - smull r11, r4, r5, r4 - adds r5, r11, r12 - adc r11, r4, #0x0 - ldr r4, [r3, #0x0] - ldr lr, [sp, #0x20] - smlal r5, r11, r4, lr - mov r4, r5, lsr #0xc - orr r4, r4, r11, lsl #0x14 - str r4, [r6, #0x0] - ldr r4, [r3, #0xc] - ldr r5, [sp, #0x24] - ldr lr, [r3, #0x4] - smull r11, r5, r4, r5 - adds r11, r11, r12 - adc r4, r5, #0x0 - add r5, sp, #0x28 - cmp r6, r5 - ldr r5, [sp, #0x20] - smlal r11, r4, lr, r5 - mov r5, r11, lsr #0xc - orr r5, r5, r4, lsl #0x14 - str r5, [r6, #0x4] - ldreq r5, [sp, #0x28] - ldreq r4, [sp, #0x2c] - streq r5, [sp, #0x20] - streq r4, [sp, #0x24] - cmp r8, #0x100 - beq _020B1D38 - cmp r8, #0x300 - beq _020B1D38 - ldr r5, [r7, #0x0] - ldr r4, _020B1E98 ; =0xC1FFFCFF - and r4, r5, r4 - orr r4, r4, r8 - str r4, [r7, #0x0] - b _020B1D54 -_020B1D38: - ldr r5, [r7, #0x0] - ldr r4, _020B1E98 ; =0xC1FFFCFF - and r4, r5, r4 - orr r5, r4, r8 - ldr r4, [sp, #0x4] - orr r4, r4, r5 - str r4, [r7, #0x0] -_020B1D54: - ldr r6, [r7, #0x0] - ldr r5, _020B1E8C ; =0xC000C000 - cmp r9, #0x0 - and r8, r6, r5 - and r5, r8, #0xc000 - mov r6, r5, asr #0xe - and r5, r8, #0xc0000000 - ldr r8, _020B1E90 ; =UNK_020FF8AC - mov r5, r5, lsr #0x1e - mov r5, r5, lsl #0x1 - add r8, r8, r6, lsl #0x3 - ldrh r9, [r5, r8] - ldr r8, _020B1E94 ; =UNK_020FF894 - ldr r4, [sp, #0x20] - add r6, r8, r6, lsl #0x3 - mov r11, r9, asr #0x1 - ldrh r5, [r5, r6] - mov r8, r11, lsl #0xc - ldr r6, [r3, #0x0] - rsb r12, r8, #0x0 - mov r9, r5, asr #0x1 - mla r12, r6, r11, r12 - ldr r5, [r3, #0x8] - mla r6, r5, r9, r12 - add r6, r4, r6 - str r6, [sp, #0x20] - ldr r12, [r3, #0x4] - mov r5, r9, lsl #0xc - str r12, [sp, #0x1c] - ldr r12, [r3, #0xc] - rsb lr, r5, #0x0 - str r12, [sp, #0x18] - ldr r12, [sp, #0x1c] - ldr r4, [sp, #0x24] - mla r11, r12, r11, lr - ldr r12, [sp, #0x18] - subne r6, r6, r8 - mla r9, r12, r9, r11 - add r4, r4, r9 - str r4, [sp, #0x24] - subne r4, r4, r5 - strne r6, [sp, #0x20] - strne r4, [sp, #0x24] -_020B1E00: - cmp r10, #0x0 - beq _020B1E28 - ldr r6, [sp, #0x20] - ldr r4, [r10, #0x0] - ldr r5, [sp, #0x24] - add r4, r6, r4 - str r4, [sp, #0x20] - ldr r4, [r10, #0x4] - add r4, r5, r4 - str r4, [sp, #0x24] -_020B1E28: - ldr r4, [sp, #0x20] - ldr r6, [r7, #0x0] - add r5, r4, #0x800 - ldr r4, _020B1E9C ; =0x000001FF - and r4, r4, r5, asr #0xc - ldr r5, _020B1EA0 ; =0xFE00FF00 - and r6, r6, r5 - ldr r5, [sp, #0x24] - add r5, r5, #0x800 - mov r5, r5, asr #0xc - and r5, r5, #0xff - orr r5, r6, r5 - orr r4, r5, r4, lsl #0x10 - str r4, [r7, #0x0] -_020B1E60: - ldr r4, [sp, #0x0] - add r4, r4, #0x1 - mov r4, r4, lsl #0x10 - mov r4, r4, lsr #0x10 - str r4, [sp, #0x0] - cmp r4, r1 - blo _020B1B54 -_020B1E7C: - mov r0, r1 - add sp, sp, #0x34 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B1E88: .word 0x01FF0000 -_020B1E8C: .word 0xC000C000 -_020B1E90: .word UNK_020FF8AC -_020B1E94: .word UNK_020FF894 -_020B1E98: .word 0xC1FFFCFF -_020B1E9C: .word 0x000001FF -_020B1EA0: .word 0xFE00FF00 - - arm_func_start FUN_020B1EA4 -FUN_020B1EA4: ; 0x020B1EA4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020B0518 - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - mov r0, r4 - bl FUN_020B1FC4 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B1EC4 -FUN_020B1EC4: ; 0x020B1EC4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020B0534 - cmp r0, #0x0 - ldmeqia sp!, {r4,pc} - mov r0, r4 - bl FUN_020B1FC4 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B1EE4 -FUN_020B1EE4: ; 0x020B1EE4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl FUN_020B0438 - mov r0, r4 - bl FUN_020B1FC4 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B1EFC -FUN_020B1EFC: ; 0x020B1EFC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - mov r4, r2 - ldr r2, [r4, #0xc] - mov r5, r1 - ldr r1, [r2, #0x0] - ldr r2, [sp, #0x34] - str r1, [sp, #0x0] - ldr r1, [sp, #0x38] - str r2, [sp, #0x4] - mov r6, r3 - mov r7, r0 - ldr r12, [sp, #0x3c] - str r1, [sp, #0x8] - ldr r1, [sp, #0x28] - ldr r2, [sp, #0x2c] - ldr r3, [sp, #0x30] - mov r0, r6 - str r12, [sp, #0xc] - bl FUN_020B45F0 - str r6, [r7, #0x34] - str r4, [r7, #0x30] - add r0, r7, #0x38 - mov r1, #0x1 - str r6, [r7, #0x34] - bl FUN_020B1A68 - mov r0, r7 - bl FUN_020B04C0 - mov r0, r7 - mov r1, r5 - bl FUN_020B1EE4 - add sp, sp, #0x14 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B1F80 -FUN_020B1F80: ; 0x020B1F80 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - str r2, [r5, #0x30] - mvn r2, #0x0 - add r0, r5, #0x38 - mov r1, #0x1 - str r2, [r5, #0x34] - bl FUN_020B1A68 - mov r0, r5 - bl FUN_020B04C0 - mov r0, r5 - mov r1, r4 - bl FUN_020B1EE4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020B1FC4 -FUN_020B1FC4: ; 0x020B1FC4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r1, [r5, #0x0] - ldrh r1, [r1, #0x4] - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - bl FUN_020B06E0 - mov r4, r0 - ldr r7, [r5, #0x30] - ldrh r1, [r4, #0x0] - mov r0, r7 - bl FUN_020AFE8C - str r0, [r5, #0x2c] - ldr r1, [r5, #0x18] - add r0, r5, #0x38 - ldr r2, [r1, #0x4] - mov r1, #0x1 - and r6, r2, #0xff - bl FUN_020B1A68 - cmp r6, #0x0 - beq _020B2068 - cmp r6, #0x2 - bne _020B203C - ldrsh r1, [r4, #0x4] - ldrsh r2, [r4, #0x6] - add r0, r5, #0x38 - bl FUN_020B1AB4 - b _020B2068 -_020B203C: - ldr r1, [r4, #0x4] - ldr r2, [r4, #0x8] - add r0, r5, #0x38 - bl FUN_020B1A78 - ldrh r1, [r4, #0x2] - add r0, r5, #0x38 - bl FUN_020B1A98 - ldrsh r1, [r4, #0xc] - ldrsh r2, [r4, #0xe] - add r0, r5, #0x38 - bl FUN_020B1AB4 -_020B2068: - ldr r2, [r7, #0xc] - cmp r2, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - ldr r1, [r5, #0x34] - mvn r0, #0x0 - cmp r1, r0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - ldrh r1, [r4, #0x0] - ldr r2, [r2, #0x4] - ldr r0, [r5, #0x34] - add r3, r2, r1, lsl #0x3 - ldr r1, [r2, r1, lsl #0x3] - ldr r2, [r3, #0x4] - bl FUN_020B4400 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B20C8 -FUN_020B20C8: ; 0x020B20C8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r6, #0x0 - str r6, [r0, #0x38] - ldr r7, [sp, #0x30] - str r6, [r0, #0x30] - mov r10, r1 - str r7, [r0, #0x34] - str r0, [sp, #0x0] - movs r8, r3 - mov r9, r2 - str r10, [r0, #0x3c] - ldr r11, [sp, #0x34] - beq _020B215C - mov r0, #0x1 - str r6, [sp, #0x8] - str r0, [sp, #0x4] -_020B210C: - mov r0, #0x28 - mul r4, r6, r0 - ldr r1, [sp, #0x4] - add r0, r10, r4 - bl FUN_020B1AD4 - mov r0, #0x54 - mla r5, r6, r0, r9 - ldr r1, [sp, #0x8] - mov r0, r7 - str r5, [r10, r4] - bl FUN_020AFC04 - mov r1, r0 - mov r0, r5 - mov r2, r11 - bl FUN_020B1F80 - add r0, r6, #0x1 - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 - cmp r6, r8 - blo _020B210C -_020B215C: - ldr r0, [sp, #0x0] - bl FUN_020B04C0 - ldr r0, [sp, #0x0] - ldr r3, [sp, #0x38] - ldr r2, [sp, #0x0] - add r0, r0, #0x44 - mov r1, #0x1 - str r3, [r2, #0x40] - bl FUN_020B1A68 - ldr r0, [sp, #0x0] - mov r1, #0x0 - strh r1, [r0, #0x2c] - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B2194 -FUN_020B2194: ; 0x020B2194 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - bl FUN_020B0518 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - mov r0, r7 - bl FUN_020B06E0 - mov r4, r0 - ldrh r1, [r4, #0x0] - ldr r0, [r7, #0x40] - bl FUN_020AFF34 - ldr r1, [r7, #0x18] - mov r6, r0 - ldr r1, [r1, #0x4] - add r0, r7, #0x44 - and r5, r1, #0xff - mov r1, #0x1 - bl FUN_020B1A68 - cmp r5, #0x0 - beq _020B2234 - cmp r5, #0x2 - bne _020B2208 - ldrsh r1, [r4, #0x4] - ldrsh r2, [r4, #0x6] - add r0, r7, #0x44 - bl FUN_020B1AB4 - b _020B2234 -_020B2208: - ldr r1, [r4, #0x4] - ldr r2, [r4, #0x8] - add r0, r7, #0x44 - bl FUN_020B1A78 - ldrh r1, [r4, #0x2] - add r0, r7, #0x44 - bl FUN_020B1A98 - ldrsh r1, [r4, #0xc] - ldrsh r2, [r4, #0xe] - add r0, r7, #0x44 - bl FUN_020B1AB4 -_020B2234: - ldrh r2, [r7, #0x2c] - mov r1, r6 - add r0, r7, #0x30 - bl FUN_020B24E0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B224C -FUN_020B224C: ; 0x020B224C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r4, r0 - ldr r2, [r4, #0x0] - mov r6, r1 - ldrh r5, [r2, #0x4] - bl FUN_020B0534 - cmp r0, #0x0 - beq _020B2318 - ldrh r1, [r4, #0x2c] - mov r0, r4 - add r1, r1, r5 - strh r1, [r4, #0x2c] - bl FUN_020B06E0 - mov r5, r0 - ldrh r1, [r5, #0x0] - ldr r0, [r4, #0x40] - bl FUN_020AFF34 - ldr r1, [r4, #0x18] - mov r7, r0 - ldr r1, [r1, #0x4] - add r0, r4, #0x44 - and r6, r1, #0xff - mov r1, #0x1 - bl FUN_020B1A68 - cmp r6, #0x0 - beq _020B2300 - cmp r6, #0x2 - bne _020B22D4 - ldrsh r1, [r5, #0x4] - ldrsh r2, [r5, #0x6] - add r0, r4, #0x44 - bl FUN_020B1AB4 - b _020B2300 -_020B22D4: - ldr r1, [r5, #0x4] - ldr r2, [r5, #0x8] - add r0, r4, #0x44 - bl FUN_020B1A78 - ldrh r1, [r5, #0x2] - add r0, r4, #0x44 - bl FUN_020B1A98 - ldrsh r1, [r5, #0xc] - ldrsh r2, [r5, #0xe] - add r0, r4, #0x44 - bl FUN_020B1AB4 -_020B2300: - ldrh r2, [r4, #0x2c] - mov r1, r7 - add r0, r4, #0x30 - bl FUN_020B24E0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} -_020B2318: - mov r1, r6 - add r0, r4, #0x30 - bl FUN_020B232C - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B232C -FUN_020B232C: ; 0x020B232C - stmdb sp!, {r4-r8,lr} - mov r7, r0 - ldr r0, [r7, #0x8] - mov r6, r1 - cmp r0, #0x1 - bne _020B238C - ldr r0, [r7, #0x0] - ldr r4, [r7, #0xc] - ldrh r0, [r0, #0x2] - mov r5, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r8,pc} - mov r8, #0x58 -_020B2360: - mla r0, r5, r8, r4 - mov r1, r6 - bl FUN_020B1EC4 - ldr r1, [r7, #0x0] - add r0, r5, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r1, #0x2] - mov r5, r0, lsr #0x10 - cmp r5, r1 - blo _020B2360 - ldmia sp!, {r4-r8,pc} -_020B238C: - ldr r0, [r7, #0x0] - ldr r4, [r7, #0xc] - ldrh r0, [r0, #0x0] - mov r5, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r8,pc} - mov r8, #0x28 -_020B23A8: - mul r0, r5, r8 - ldr r0, [r4, r0] - mov r1, r6 - bl FUN_020B1EC4 - ldr r1, [r7, #0x0] - add r0, r5, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r1, #0x0] - mov r5, r0, lsr #0x10 - cmp r5, r1 - blo _020B23A8 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B23D8 -FUN_020B23D8: ; 0x020B23D8 - stmdb sp!, {r4-r6,lr} - mov r5, r0 - ldrh r0, [r5, #0x0] - mov r4, #0x0 - mov r6, r4 - cmp r0, #0x0 - bls _020B2424 -_020B23F4: - mov r0, r5 - mov r1, r6 - bl FUN_020AFF34 - ldrh r0, [r0, #0x0] - ldrh r1, [r5, #0x0] - cmp r0, r4 - movhi r4, r0 - add r0, r6, #0x1 - mov r0, r0, lsl #0x10 - mov r6, r0, lsr #0x10 - cmp r6, r1 - blo _020B23F4 -_020B2424: - mov r0, r4 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020B242C -FUN_020B242C: ; 0x020B242C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r7, r0 - bl FUN_020B0438 - mov r1, #0x0 - mov r0, r7 - strh r1, [r7, #0x2c] - bl FUN_020B06E0 - mov r4, r0 - ldrh r1, [r4, #0x0] - ldr r0, [r7, #0x40] - bl FUN_020AFF34 - ldr r1, [r7, #0x18] - mov r6, r0 - ldr r1, [r1, #0x4] - add r0, r7, #0x44 - and r5, r1, #0xff - mov r1, #0x1 - bl FUN_020B1A68 - cmp r5, #0x0 - beq _020B24C8 - cmp r5, #0x2 - bne _020B249C - ldrsh r1, [r4, #0x4] - ldrsh r2, [r4, #0x6] - add r0, r7, #0x44 - bl FUN_020B1AB4 - b _020B24C8 -_020B249C: - ldr r1, [r4, #0x4] - ldr r2, [r4, #0x8] - add r0, r7, #0x44 - bl FUN_020B1A78 - ldrh r1, [r4, #0x2] - add r0, r7, #0x44 - bl FUN_020B1A98 - ldrsh r1, [r4, #0xc] - ldrsh r2, [r4, #0xe] - add r0, r7, #0x44 - bl FUN_020B1AB4 -_020B24C8: - ldrh r2, [r7, #0x2c] - mov r1, r6 - add r0, r7, #0x30 - bl FUN_020B24E0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B24E0 -FUN_020B24E0: ; 0x020B24E0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x14 - mov r10, r1 - str r0, [sp, #0x0] - str r10, [r0, #0x0] - ldr r0, [r0, #0x8] - mov r9, r2 - cmp r0, #0x1 - bne _020B2654 - ldrh r1, [r10, #0x2] - ldr r0, [sp, #0x0] - mov r4, #0x0 - ldr r8, [r0, #0xc] - cmp r1, #0x0 - bls _020B2544 - mov r3, r4 - mov r0, #0x58 -_020B2524: - mla r1, r4, r0, r8 - str r3, [r1, #0x54] - add r1, r4, #0x1 - mov r1, r1, lsl #0x10 - ldrh r2, [r10, #0x2] - mov r4, r1, lsr #0x10 - cmp r4, r2 - blo _020B2524 -_020B2544: - ldrh r0, [r10, #0x0] - mov r5, #0x0 - cmp r0, #0x0 - addls sp, sp, #0x14 - ldmlsia sp!, {r4-r11,pc} - str r5, [sp, #0x4] - mov r11, #0x1 -_020B2560: - ldr r0, [r10, #0x4] - mov r1, #0x58 - add r7, r0, r5, lsl #0x3 - ldrh r0, [r7, #0x6] - and r0, r0, #0xff00 - mov r0, r0, lsl #0x8 - mov r0, r0, lsr #0x10 - mla r6, r0, r1, r8 - ldr r0, [r6, #0x54] - cmp r0, #0x0 - bne _020B2634 - ldr r0, [sp, #0x0] - ldrh r1, [r7, #0x0] - ldr r0, [r0, #0x4] - bl FUN_020AFC04 - mov r4, r0 - mov r0, r6 - mov r1, r4 - bl FUN_020B1EE4 - str r11, [r6, #0x8] - ldrh r0, [r7, #0x6] - and r0, r0, #0xf - cmp r0, #0x1 - bne _020B2630 - ldrh r1, [r4, #0x0] - ldr r7, [sp, #0x4] - mov r3, r7 - cmp r1, #0x0 - bls _020B25F0 - ldr r2, [r4, #0xc] -_020B25D8: - add r0, r2, r3, lsl #0x3 - ldrh r0, [r0, #0x4] - add r3, r3, #0x1 - cmp r3, r1 - add r7, r7, r0 - blo _020B25D8 -_020B25F0: - mov r0, r6 - bl FUN_020B0408 - cmp r0, #0x0 - beq _020B261C - mov r0, r9 - mov r1, r7 - bl _u32_div_f - mov r0, r6 - mov r1, r1, lsl #0xc - bl FUN_020B1EC4 - b _020B2630 -_020B261C: - cmp r9, r7 - movcc r7, r9 - mov r0, r6 - mov r1, r7, lsl #0xc - bl FUN_020B1EC4 -_020B2630: - str r11, [r6, #0x54] -_020B2634: - add r0, r5, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r10, #0x0] - mov r5, r0, lsr #0x10 - cmp r5, r1 - blo _020B2560 - add sp, sp, #0x14 - ldmia sp!, {r4-r11,pc} -_020B2654: - ldrh r1, [r10, #0x0] - ldr r0, [sp, #0x0] - mov r4, #0x0 - cmp r1, #0x0 - ldr r11, [r0, #0xc] - addls sp, sp, #0x14 - ldmlsia sp!, {r4-r11,pc} - mov r0, #0x1 - str r4, [sp, #0xc] - str r0, [sp, #0x8] -_020B267C: - mov r0, #0x28 - mul r2, r4, r0 - ldr r3, [r10, #0x4] - mov r0, r4, lsl #0x3 - ldrh r1, [r3, r0] - ldr r0, [sp, #0x0] - ldr r6, [r11, r2] - ldr r0, [r0, #0x4] - add r7, r3, r4, lsl #0x3 - bl FUN_020AFC04 - mov r5, r0 - mov r0, r6 - mov r1, r5 - bl FUN_020B1EE4 - ldr r0, [sp, #0x8] - str r0, [r6, #0x8] - ldrh r0, [r7, #0x6] - and r0, r0, #0xf - cmp r0, #0x1 - bne _020B2740 - ldrh r1, [r5, #0x0] - ldr r8, [sp, #0xc] - mov r0, r8 - cmp r1, #0x0 - bls _020B2700 - ldr r3, [r5, #0xc] -_020B26E4: - add r1, r3, r0, lsl #0x3 - ldrh r2, [r1, #0x4] - add r0, r0, #0x1 - ldrh r1, [r5, #0x0] - add r8, r8, r2 - cmp r0, r1 - blo _020B26E4 -_020B2700: - mov r0, r6 - bl FUN_020B0408 - cmp r0, #0x0 - beq _020B272C - mov r0, r9 - mov r1, r8 - bl _u32_div_f - mov r0, r6 - mov r1, r1, lsl #0xc - bl FUN_020B1EC4 - b _020B2740 -_020B272C: - cmp r9, r8 - movcc r8, r9 - mov r0, r6 - mov r1, r8, lsl #0xc - bl FUN_020B1EC4 -_020B2740: - mov r0, #0x28 - mla r3, r4, r0, r11 - ldr r0, [sp, #0x8] - str r0, [r3, #0x8] - ldrsh r1, [r7, #0x2] - ldrsh r2, [r7, #0x4] - add r0, r3, #0xc - bl FUN_020B1AB4 - add r0, r4, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r10, #0x0] - mov r4, r0, lsr #0x10 - cmp r4, r1 - blo _020B267C - add sp, sp, #0x14 - ldmia sp!, {r4-r11,pc} - - arm_func_start thunk_FUN_020b5040 -thunk_FUN_020b5040: ; 0x020B2780 - ldr ip, _020B2788 ; =FUN_020B5040 - bx r12 - .balign 4 -_020B2788: .word FUN_020B5040 - - arm_func_start FUN_020B278C -FUN_020B278C: - ldr r0, [r0, #0x78] - bx lr - - arm_func_start FUN_020B2794 -FUN_020B2794: ; 0x020B2794 - stmdb sp!, {lr} - sub sp, sp, #0x1c - ldr r2, _020B2894 ; =UNK_021CDD70 - mov lr, #0x0 - ldr r12, [r2, #0x0] - ldr r3, _020B2898 ; =UNK_021CDEF4 - mov r2, #0x18 - str r1, [sp, #0x0] - str r1, [sp, #0xc] - mla r1, r12, r2, r3 - rsb r3, r0, #0x0 - str r0, [sp, #0x4] - add r0, sp, #0x0 - mov r2, r1 - str r3, [sp, #0x8] - str lr, [sp, #0x10] - str lr, [sp, #0x14] - bl FUN_020B423C - ldr r0, _020B2894 ; =UNK_021CDD70 - ldr r1, _020B289C ; =UNK_021CE1F4 - ldr r2, [r0, #0x0] - mov r0, #0x18 - mla r1, r2, r0, r1 - add r0, sp, #0x0 - mov r2, r1 - bl FUN_020B423C - ldr r0, _020B28A0 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020B2824 - ldr r1, _020B28A4 ; =UNK_02106570 - ldr r0, _020B28A8 ; =0x0000FFFE - ldrh r1, [r1, #0x0] - cmp r1, r0 - movne r0, #0x1 - bne _020B2828 -_020B2824: - mov r0, #0x0 -_020B2828: - cmp r0, #0x0 - ldreq r1, _020B2894 ; =UNK_021CDD70 - ldreq r0, _020B28A4 ; =UNK_02106570 - ldreq r1, [r1, #0x0] - streqh r1, [r0, #0x0] - ldr r0, _020B2894 ; =UNK_021CDD70 - ldr r1, _020B28AC ; =UNK_021CDDF4 - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x10 - add r12, r1, r0, lsr #0xd - ldrh r0, [r12, #0x4] - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020B288C - ; Jump table - b _020B2870 ; case 0 - b _020B288C ; case 1 - b _020B2870 ; case 2 - b _020B2870 ; case 3 -_020B2870: - ldr r0, _020B28B0 ; =UNK_021CDD64 - mov r1, #0x1 - ldrh r3, [r0, #0x0] - add r2, r3, #0x1 - strh r2, [r0, #0x0] - strh r3, [r12, #0x2] - strh r1, [r12, #0x4] -_020B288C: - add sp, sp, #0x1c - ldmia sp!, {pc} - .balign 4 -_020B2894: .word UNK_021CDD70 -_020B2898: .word UNK_021CDEF4 -_020B289C: .word UNK_021CE1F4 -_020B28A0: .word UNK_021CDD68 -_020B28A4: .word UNK_02106570 -_020B28A8: .word 0x0000FFFE -_020B28AC: .word UNK_021CDDF4 -_020B28B0: .word UNK_021CDD64 - - arm_func_start FUN_020B28B4 -FUN_020B28B4: ; 0x020B28B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x1c - ldr r2, _020B29E8 ; =UNK_021CDD70 - mov r12, #0x0 - ldr r3, [r2, #0x0] - mov r4, r1 - ldr r2, _020B29EC ; =UNK_021CDEF4 - mov r1, #0x18 - mla r1, r3, r1, r2 - mov r5, r0 - add r0, sp, #0x0 - mov r2, r1 - str r5, [sp, #0x0] - str r12, [sp, #0x4] - str r12, [sp, #0x8] - str r4, [sp, #0xc] - str r12, [sp, #0x10] - str r12, [sp, #0x14] - bl FUN_020B423C - mov r0, r5 - bl FX_Inv - mov r1, #0x0 - str r0, [sp, #0x0] - mov r0, r4 - str r1, [sp, #0x4] - str r1, [sp, #0x8] - bl FX_Inv - mov r3, #0x0 - ldr r1, _020B29E8 ; =UNK_021CDD70 - str r0, [sp, #0xc] - ldr r2, [r1, #0x0] - ldr r1, _020B29F0 ; =UNK_021CE1F4 - mov r0, #0x18 - mla r1, r2, r0, r1 - add r0, sp, #0x0 - mov r2, r1 - str r3, [sp, #0x10] - str r3, [sp, #0x14] - bl FUN_020B423C - ldr r0, _020B29F4 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020B2978 - ldr r1, _020B29F8 ; =UNK_02106570 - ldr r0, _020B29FC ; =0x0000FFFE - ldrh r1, [r1, #0x0] - cmp r1, r0 - movne r0, #0x1 - bne _020B297C -_020B2978: - mov r0, #0x0 -_020B297C: - cmp r0, #0x0 - ldreq r1, _020B29E8 ; =UNK_021CDD70 - ldreq r0, _020B29F8 ; =UNK_02106570 - ldreq r1, [r1, #0x0] - streqh r1, [r0, #0x0] - ldr r0, _020B29E8 ; =UNK_021CDD70 - ldr r1, _020B2A00 ; =UNK_021CDDF4 - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x10 - add r12, r1, r0, lsr #0xd - ldrh r0, [r12, #0x4] - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020B29E0 - ; Jump table - b _020B29C4 ; case 0 - b _020B29E0 ; case 1 - b _020B29C4 ; case 2 - b _020B29C4 ; case 3 -_020B29C4: - ldr r0, _020B2A04 ; =UNK_021CDD64 - mov r1, #0x1 - ldrh r3, [r0, #0x0] - add r2, r3, #0x1 - strh r2, [r0, #0x0] - strh r3, [r12, #0x2] - strh r1, [r12, #0x4] -_020B29E0: - add sp, sp, #0x1c - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B29E8: .word UNK_021CDD70 -_020B29EC: .word UNK_021CDEF4 -_020B29F0: .word UNK_021CE1F4 -_020B29F4: .word UNK_021CDD68 -_020B29F8: .word UNK_02106570 -_020B29FC: .word 0x0000FFFE -_020B2A00: .word UNK_021CDDF4 -_020B2A04: .word UNK_021CDD64 - - arm_func_start FUN_020B2A08 -FUN_020B2A08: ; 0x020B2A08 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x1c - ldr r3, _020B2AEC ; =UNK_021CDD68 - mov r4, r2 - ldr r2, [r3, #0x0] - cmp r2, #0x0 - beq _020B2A6C - ldr r2, _020B2AF0 ; =UNK_021CDD70 - mov r3, #0x18 - ldr r2, [r2, #0x0] - ldr lr, _020B2AF4 ; =UNK_021CDF04 - mul r5, r2, r3 - ldr r3, [lr, r5] - ldr ip, _020B2AF8 ; =UNK_021CDF08 - add r0, r3, r0 - str r0, [lr, r5] - ldr r0, [r12, r5] - ldr r3, _020B2AFC ; =UNK_021CDD74 - add r0, r0, r1 - str r0, [r12, r5] - ldr r0, [r3, r2, lsl #0x2] - add sp, sp, #0x1c - add r0, r0, r4 - str r0, [r3, r2, lsl #0x2] - ldmia sp!, {r4-r5,pc} -_020B2A6C: - ldr r2, _020B2AF0 ; =UNK_021CDD70 - mov lr, #0x1000 - ldr r12, [r2, #0x0] - ldr r3, _020B2B00 ; =UNK_021CDEF4 - mov r2, #0x18 - str r1, [sp, #0x14] - mla r1, r12, r2, r3 - mov r3, #0x0 - str r0, [sp, #0x10] - add r0, sp, #0x0 - mov r2, r1 - str lr, [sp, #0x0] - str r3, [sp, #0x4] - str r3, [sp, #0x8] - str lr, [sp, #0xc] - bl FUN_020B423C - ldr r0, _020B2AF0 ; =UNK_021CDD70 - ldr r1, _020B2B04 ; =UNK_021CE1F4 - ldr r2, [r0, #0x0] - mov r0, #0x18 - mla r1, r2, r0, r1 - add r0, sp, #0x0 - mov r2, r1 - bl FUN_020B423C - ldr r0, _020B2AF0 ; =UNK_021CDD70 - ldr r2, _020B2AFC ; =UNK_021CDD74 - ldr r1, [r0, #0x0] - ldr r0, [r2, r1, lsl #0x2] - add r0, r0, r4 - str r0, [r2, r1, lsl #0x2] - add sp, sp, #0x1c - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B2AEC: .word UNK_021CDD68 -_020B2AF0: .word UNK_021CDD70 -_020B2AF4: .word UNK_021CDF04 -_020B2AF8: .word UNK_021CDF08 -_020B2AFC: .word UNK_021CDD74 -_020B2B00: .word UNK_021CDEF4 -_020B2B04: .word UNK_021CE1F4 - - arm_func_start FUN_020B2B08 -FUN_020B2B08: ; 0x020B2B08 - ldr r0, _020B2B4C ; =UNK_021CDD70 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - movle r0, #0x1 - movgt r0, #0x0 - cmp r0, #0x0 - bxne lr - ldr r1, _020B2B4C ; =UNK_021CDD70 - ldr r0, _020B2B50 ; =UNK_02106570 - ldr r3, [r1, #0x0] - ldrh r2, [r0, #0x0] - sub r3, r3, #0x1 - str r3, [r1, #0x0] - cmp r2, r3 - ldrgt r1, _020B2B54 ; =0x0000FFFE - strgth r1, [r0, #0x0] - bx lr - .balign 4 -_020B2B4C: .word UNK_021CDD70 -_020B2B50: .word UNK_02106570 -_020B2B54: .word 0x0000FFFE - - arm_func_start FUN_020B2B58 -FUN_020B2B58: ; 0x020B2B58 - stmdb sp!, {r4-r10,lr} - ldr r0, _020B2D74 ; =UNK_021CDD6C - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x7c] - ands r0, r0, #0x1 - bne _020B2CA4 - ldr r0, _020B2D78 ; =UNK_021CDD70 - ldr r1, [r0, #0x0] - mov r0, r1, lsl #0x10 - add r5, r1, #0x1 - cmp r5, #0x20 - mov r4, r0, lsr #0x10 - movlt r0, #0x1 - movge r0, #0x0 - cmp r0, #0x0 - beq _020B2C44 - ldr r0, _020B2D7C ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020B2BE4 - ldr r1, _020B2D78 ; =UNK_021CDD70 - mov r0, #0x18 - ldr r3, [r1, #0x0] - ldr r1, _020B2D80 ; =UNK_021CDD74 - mul r8, r3, r0 - ldr r6, _020B2D84 ; =UNK_021CDF04 - mul r7, r5, r0 - ldr r2, [r6, r8] - ldr r0, [r1, r3, lsl #0x2] - ldr r3, _020B2D88 ; =UNK_021CDF08 - str r2, [r6, r7] - ldr r2, [r3, r8] - str r0, [r1, r5, lsl #0x2] - str r2, [r3, r7] - b _020B2C3C -_020B2BE4: - ldr r1, _020B2D78 ; =UNK_021CDD70 - mov r0, #0x18 - ldr r2, [r1, #0x0] - ldr r7, _020B2D80 ; =UNK_021CDD74 - mul lr, r2, r0 - ldr r1, _020B2D8C ; =UNK_021CDEF4 - mul r12, r5, r0 - ldr r8, _020B2D90 ; =UNK_021CE1F4 - add r10, r1, lr - ldr r6, [r7, r2, lsl #0x2] - add r9, r1, r12 - ldmia r10!, {r0-r3} - stmia r9!, {r0-r3} - ldmia r10, {r0-r1} - str r6, [r7, r5, lsl #0x2] - add r7, r8, lr - stmia r9, {r0-r1} - add r6, r8, r12 - ldmia r7!, {r0-r3} - stmia r6!, {r0-r3} - ldmia r7, {r0-r1} - stmia r6, {r0-r1} -_020B2C3C: - ldr r0, _020B2D78 ; =UNK_021CDD70 - str r5, [r0, #0x0] -_020B2C44: - ldr r0, _020B2D78 ; =UNK_021CDD70 - ldr r2, _020B2D94 ; =UNK_021CDDF4 - ldr r0, [r0, #0x0] - mov r5, r4, lsl #0x3 - mov r0, r0, lsl #0x10 - mov r3, r0, lsr #0x10 - add r4, r2, r4, lsl #0x3 - mov r6, r3, lsl #0x3 - ldrh r1, [r2, r5] - ldrh r0, [r4, #0x2] - add r3, r2, r3, lsl #0x3 - strh r1, [r2, r6] - strh r0, [r3, #0x2] - ldrh r2, [r4, #0x4] - ldrh r0, [r4, #0x6] - ldr r1, _020B2D98 ; =UNK_021CDDF8 - strh r2, [r3, #0x4] - strh r0, [r3, #0x6] - ldrh r0, [r1, r5] - cmp r0, #0x1 - moveq r0, #0x2 - streqh r0, [r1, r6] - strneh r0, [r1, r6] - ldmia sp!, {r4-r10,pc} -_020B2CA4: - ldr r0, _020B2D78 ; =UNK_021CDD70 - ldr r0, [r0, #0x0] - add r4, r0, #0x1 - cmp r4, #0x20 - movlt r0, #0x1 - movge r0, #0x0 - cmp r0, #0x0 - ldmeqia sp!, {r4-r10,pc} - ldr r0, _020B2D7C ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020B2D10 - ldr r1, _020B2D78 ; =UNK_021CDD70 - mov r0, #0x18 - ldr r3, [r1, #0x0] - ldr r1, _020B2D80 ; =UNK_021CDD74 - mul r7, r3, r0 - ldr r5, _020B2D84 ; =UNK_021CDF04 - mul r6, r4, r0 - ldr r2, [r5, r7] - ldr r0, [r1, r3, lsl #0x2] - ldr r3, _020B2D88 ; =UNK_021CDF08 - str r2, [r5, r6] - ldr r2, [r3, r7] - str r0, [r1, r4, lsl #0x2] - str r2, [r3, r6] - b _020B2D68 -_020B2D10: - ldr r1, _020B2D78 ; =UNK_021CDD70 - mov r0, #0x18 - ldr r2, [r1, #0x0] - ldr ip, _020B2D80 ; =UNK_021CDD74 - mul r9, r2, r0 - ldr r1, _020B2D8C ; =UNK_021CDEF4 - mul r8, r4, r0 - ldr lr, _020B2D90 ; =UNK_021CE1F4 - add r6, r1, r9 - ldr r5, [r12, r2, lsl #0x2] - add r7, r1, r8 - ldmia r6!, {r0-r3} - stmia r7!, {r0-r3} - ldmia r6, {r0-r1} - add r6, lr, r9 - stmia r7, {r0-r1} - add lr, lr, r8 - ldmia r6!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r6, {r0-r1} - stmia lr, {r0-r1} - str r5, [r12, r4, lsl #0x2] -_020B2D68: - ldr r0, _020B2D78 ; =UNK_021CDD70 - str r4, [r0, #0x0] - ldmia sp!, {r4-r10,pc} - .balign 4 -_020B2D74: .word UNK_021CDD6C -_020B2D78: .word UNK_021CDD70 -_020B2D7C: .word UNK_021CDD68 -_020B2D80: .word UNK_021CDD74 -_020B2D84: .word UNK_021CDF04 -_020B2D88: .word UNK_021CDF08 -_020B2D8C: .word UNK_021CDEF4 -_020B2D90: .word UNK_021CE1F4 -_020B2D94: .word UNK_021CDDF4 -_020B2D98: .word UNK_021CDDF8 - - arm_func_start FUN_020B2D9C -FUN_020B2D9C: ; 0x020B2D9C - stmdb sp!, {r4-r6,lr} - mov r4, r0 - ldrh r0, [r4, #0x56] - cmp r0, #0x0 - bne _020B2DBC - add r0, r4, #0x30 - bl FUN_020B2E78 - ldmia sp!, {r4-r6,pc} -_020B2DBC: - bl FUN_020B2B58 - ldrh r0, [r4, #0x56] - ands r0, r0, #0x8 - beq _020B2E0C - ldr r0, _020B2E70 ; =UNK_021CDD6C - ldrsh r6, [r4, #0x52] - ldr r0, [r0, #0x0] - ldrsh r5, [r4, #0x50] - bl FUN_020B4F88 - cmp r0, #0x0 - ldr r0, _020B2E70 ; =UNK_021CDD6C - rsbne r5, r5, #0x0 - ldr r0, [r0, #0x0] - bl FUN_020B4F74 - cmp r0, #0x0 - rsbne r6, r6, #0x0 - mov r0, r5, lsl #0xc - mov r1, r6, lsl #0xc - mov r2, #0x0 - bl FUN_020B2A08 -_020B2E0C: - ldrh r0, [r4, #0x56] - ands r0, r0, #0x4 - beq _020B2E40 - ldrh r0, [r4, #0x54] - ldr r2, _020B2E74 ; =UNK_020FFA38 - mov r0, r0, asr #0x4 - mov r1, r0, lsl #0x1 - add r0, r1, #0x1 - mov r3, r1, lsl #0x1 - mov r1, r0, lsl #0x1 - ldrsh r0, [r2, r3] - ldrsh r1, [r2, r1] - bl FUN_020B2794 -_020B2E40: - ldrh r0, [r4, #0x56] - ands r0, r0, #0x2 - beq _020B2E5C - ldr r0, [r4, #0x48] - ldr r1, [r4, #0x4c] - mov r2, #0x1000 - bl FUN_020B28B4 -_020B2E5C: - add r0, r4, #0x30 - bl FUN_020B2E78 - mov r0, #0x1 - bl FUN_020B2B08 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B2E70: .word UNK_021CDD6C -_020B2E74: .word UNK_020FFA38 - - arm_func_start FUN_020B2E78 -FUN_020B2E78: ; 0x020B2E78 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r5, r0 - ldr r0, [r5, #0x8] - cmp r0, #0x1 - bne _020B309C - ldr r0, [r5, #0x0] - mov r2, #0x0 - ldrh r0, [r0, #0x2] - cmp r0, #0x0 - bls _020B2ED0 - ldr r3, _020B3174 ; =UNK_021CE8F4 - mov r4, r2 -_020B2EAC: - add r0, r3, r2, lsl #0x2 - str r4, [r0, #0x4] - ldr r0, [r5, #0x0] - add r2, r2, #0x1 - ldrh r1, [r0, #0x2] - mov r0, r2, lsl #0x10 - mov r2, r0, lsr #0x10 - cmp r2, r1 - blo _020B2EAC -_020B2ED0: - ldr r0, _020B3178 ; =UNK_021CDD6C - mov r6, #0x1 - ldr r1, [r0, #0x0] - ldr r0, _020B3174 ; =UNK_021CE8F4 - str r6, [r0, #0x404] - ldr r0, [r1, #0x80] - cmp r0, #0x0 - beq _020B2FD8 - bl FUN_020B4948 - str r0, [sp, #0x0] - mov r0, r6 - bl FUN_020B497C - ldr r0, _020B3178 ; =UNK_021CDD6C - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x80] - bl FUN_020B4958 - ldr r2, [r5, #0x0] - mov r7, #0x0 - ldrh r0, [r2, #0x0] - cmp r0, #0x0 - bls _020B2FC0 - mov r11, r7 -_020B2F28: - ldr r0, [r2, #0x4] - ldr r9, [r5, #0xc] - add r10, r0, r7, lsl #0x3 - ldrh r0, [r10, #0x6] - and r0, r0, #0xff00 - mov r0, r0, lsl #0x8 - mov r8, r0, lsr #0x10 - ldr r0, _020B3174 ; =UNK_021CE8F4 - strh r8, [r0, #0x0] - bl FUN_020B2B58 - ldr r0, _020B3178 ; =UNK_021CDD6C - ldrsh r4, [r10, #0x4] - ldr r0, [r0, #0x0] - ldrsh r10, [r10, #0x2] - bl FUN_020B4F88 - cmp r0, #0x0 - ldr r0, _020B3178 ; =UNK_021CDD6C - rsbne r10, r10, #0x0 - ldr r0, [r0, #0x0] - bl FUN_020B4F74 - cmp r0, #0x0 - rsbne r4, r4, #0x0 - mov r2, r11 - mov r0, r10, lsl #0xc - mov r1, r4, lsl #0xc - bl FUN_020B2A08 - mov r0, #0x58 - mla r0, r8, r0, r9 - bl FUN_020B3554 - mov r0, r6 - bl FUN_020B2B08 - ldr r2, [r5, #0x0] - add r0, r7, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r2, #0x0] - mov r7, r0, lsr #0x10 - cmp r7, r1 - blo _020B2F28 -_020B2FC0: - mov r0, #0x0 - bl FUN_020B497C - ldr r0, [sp, #0x0] - bl FUN_020B4958 - bl FUN_020B4968 - b _020B3088 -_020B2FD8: - ldr r2, [r5, #0x0] - mov r7, #0x0 - ldrh r0, [r2, #0x0] - cmp r0, #0x0 - bls _020B3088 - str r7, [sp, #0x4] - mov r11, #0x58 -_020B2FF4: - ldr r0, [r2, #0x4] - ldr r9, [r5, #0xc] - add r10, r0, r7, lsl #0x3 - ldrh r0, [r10, #0x6] - and r0, r0, #0xff00 - mov r0, r0, lsl #0x8 - mov r8, r0, lsr #0x10 - ldr r0, _020B3174 ; =UNK_021CE8F4 - strh r8, [r0, #0x0] - bl FUN_020B2B58 - ldr r0, _020B3178 ; =UNK_021CDD6C - ldrsh r4, [r10, #0x4] - ldr r0, [r0, #0x0] - ldrsh r10, [r10, #0x2] - bl FUN_020B4F88 - cmp r0, #0x0 - ldr r0, _020B3178 ; =UNK_021CDD6C - rsbne r10, r10, #0x0 - ldr r0, [r0, #0x0] - bl FUN_020B4F74 - cmp r0, #0x0 - rsbne r4, r4, #0x0 - ldr r2, [sp, #0x4] - mov r0, r10, lsl #0xc - mov r1, r4, lsl #0xc - bl FUN_020B2A08 - mla r0, r8, r11, r9 - bl FUN_020B3554 - mov r0, r6 - bl FUN_020B2B08 - ldr r2, [r5, #0x0] - add r0, r7, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r2, #0x0] - mov r7, r0, lsr #0x10 - cmp r7, r1 - blo _020B2FF4 -_020B3088: - ldr r0, _020B3174 ; =UNK_021CE8F4 - mov r1, #0x0 - str r1, [r0, #0x404] - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} -_020B309C: - ldr r0, _020B3178 ; =UNK_021CDD6C - ldr r7, [r5, #0xc] - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x80] - cmp r0, #0x0 - beq _020B312C - bl FUN_020B4948 - mov r6, r0 - mov r0, #0x1 - bl FUN_020B497C - ldr r0, _020B3178 ; =UNK_021CDD6C - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x80] - bl FUN_020B4958 - ldr r0, [r5, #0x0] - mov r4, #0x0 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - bls _020B3110 - mov r8, #0x28 -_020B30EC: - mla r0, r4, r8, r7 - bl FUN_020B3474 - ldr r1, [r5, #0x0] - add r0, r4, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r1, #0x0] - mov r4, r0, lsr #0x10 - cmp r4, r1 - blo _020B30EC -_020B3110: - mov r0, #0x0 - bl FUN_020B497C - mov r0, r6 - bl FUN_020B4958 - bl FUN_020B4968 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} -_020B312C: - ldr r0, [r5, #0x0] - mov r4, #0x0 - ldrh r0, [r0, #0x0] - cmp r0, #0x0 - addls sp, sp, #0xc - ldmlsia sp!, {r4-r11,pc} - mov r6, #0x28 -_020B3148: - mla r0, r4, r6, r7 - bl FUN_020B3474 - ldr r1, [r5, #0x0] - add r0, r4, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r1, #0x0] - mov r4, r0, lsr #0x10 - cmp r4, r1 - blo _020B3148 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B3174: .word UNK_021CE8F4 -_020B3178: .word UNK_021CDD6C - - arm_func_start FUN_020B317C -FUN_020B317C: ; 0x020B317C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020B31EC ; =UNK_021CDD6C - mov r5, r0 - ldr r1, [r1, #0x0] - ldr r1, [r1, #0x80] - cmp r1, #0x0 - beq _020B31E0 - bl FUN_020B4948 - mov r4, r0 - mov r0, #0x1 - bl FUN_020B497C - ldr r0, _020B31EC ; =UNK_021CDD6C - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x80] - bl FUN_020B4958 - mov r0, r5 - bl FUN_020B3554 - mov r0, #0x0 - bl FUN_020B497C - mov r0, r4 - bl FUN_020B4958 - bl FUN_020B4968 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020B31E0: - bl FUN_020B3554 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B31EC: .word UNK_021CDD6C - - arm_func_start FUN_020B31F0 -FUN_020B31F0: ; 0x020B31F0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020B3260 ; =0x04000448 - mov r2, #0x1 - ldr r0, _020B3264 ; =UNK_021CDD6C - str r2, [r1, #0x0] - ldr r2, [r0, #0x0] - ldr r3, [r2, #0x7c] - cmp r3, #0x0 - beq _020B324C - ands r0, r3, #0x1 - ldrne r0, _020B3268 ; =UNK_021CDD68 - movne r1, #0x0 - strne r1, [r0, #0x0] - ands r0, r3, #0x2 - beq _020B323C - mov r0, #0x0 - str r0, [r2, #0x74] - bl FUN_020B4DA0 -_020B323C: - ldr r0, _020B3264 ; =UNK_021CDD6C - mov r1, #0x0 - ldr r0, [r0, #0x0] - str r1, [r0, #0x7c] -_020B324C: - ldr r0, _020B3264 ; =UNK_021CDD6C - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B3260: .word 0x04000448 -_020B3264: .word UNK_021CDD6C -_020B3268: .word UNK_021CDD68 - - arm_func_start FUN_020B326C -FUN_020B326C: ; 0x020B326C - stmdb sp!, {r4-r8,lr} - ldr r5, _020B330C ; =UNK_021CDD60 - ldr r3, _020B3310 ; =UNK_021CDD6C - ldrh r6, [r5, #0x0] - ldr r2, _020B3314 ; =UNK_021CDD70 - mov r4, #0x0 - ldr r7, _020B3318 ; =0x0000FFFE - ldr r1, _020B331C ; =UNK_02106570 - str r0, [r3, #0x0] - str r4, [r2, #0x0] - strh r7, [r1, #0x0] - cmp r6, #0x0 - ble _020B32D0 - ldr r8, _020B3320 ; =UNK_021CE4F4 - mvn r7, #0x0 - mov r6, #0x10 -_020B32AC: - mov r0, r7 - mov r2, r6 - add r1, r8, #0x10 - bl MIi_CpuClearFast - ldrh r0, [r5, #0x0] - add r4, r4, #0x1 - add r8, r8, #0x20 - cmp r4, r0 - blt _020B32AC -_020B32D0: - ldr r4, _020B330C ; =UNK_021CDD60 - mov r0, #0x0 - ldr r3, _020B3324 ; =UNK_021CDD64 - ldr r1, _020B3328 ; =UNK_021CDDF4 - mov r2, #0x100 - strh r0, [r4, #0x0] - strh r0, [r3, #0x0] - bl MIi_CpuClearFast - ldr r1, _020B332C ; =0x04000444 - mov r2, #0x0 - ldr r0, _020B3330 ; =0x04000454 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - bl FUN_020B4178 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020B330C: .word UNK_021CDD60 -_020B3310: .word UNK_021CDD6C -_020B3314: .word UNK_021CDD70 -_020B3318: .word 0x0000FFFE -_020B331C: .word UNK_02106570 -_020B3320: .word UNK_021CE4F4 -_020B3324: .word UNK_021CDD64 -_020B3328: .word UNK_021CDDF4 -_020B332C: .word 0x04000444 -_020B3330: .word 0x04000454 - - arm_func_start FUN_020B3334 -FUN_020B3334: ; 0x020B3334 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r1, r4 - mov r0, #0x0 - mov r2, #0x48 - bl MIi_CpuClear16 - mov r0, #0x1 - str r0, [r4, #0x10] - mov r0, #0x3 - ldr r1, _020B3380 ; =FUN_020B3EE0 - str r0, [r4, #0x14] - ldr r0, _020B3384 ; =FUN_020B3E48 - str r1, [r4, #0x18] - ldr r1, _020B3388 ; =FUN_020B3C40 - str r0, [r4, #0x1c] - ldr r0, _020B338C ; =FUN_020B3B90 - str r1, [r4, #0x20] - str r0, [r4, #0x24] - ldmia sp!, {r4,pc} - .balign 4 -_020B3380: .word FUN_020B3EE0 -_020B3384: .word FUN_020B3E48 -_020B3388: .word FUN_020B3C40 -_020B338C: .word FUN_020B3B90 - - arm_func_start FUN_020B3390 -FUN_020B3390: ; 0x020B3390 - ldr r2, [r0, #0x70] - str r2, [r1, #0x30] - str r1, [r0, #0x70] - bx lr - - arm_func_start FUN_020B33A0 -FUN_020B33A0: ; 0x020B33A0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r4, r0 - bl FUN_020B504C - mov r7, #0x0 - str r7, [r4, #0x70] - str r7, [r4, #0x74] - str r7, [r4, #0x78] - str r7, [r4, #0x7c] - str r7, [r4, #0x80] - str r7, [r4, #0x84] - strh r7, [r4, #0x88] - strh r7, [r4, #0x8a] - str r7, [r4, #0x8c] - str r7, [r4, #0x90] - ldr r1, _020B3454 ; =UNK_021CDD70 - strh r7, [r4, #0x94] - ldr r2, _020B3458 ; =0x0000FFFE - ldr r0, _020B345C ; =UNK_02106570 - ldr r6, _020B3460 ; =UNK_021CE4F4 - str r7, [r1, #0x0] - strh r2, [r0, #0x0] - mvn r5, #0x0 - mov r4, #0x10 -_020B3400: - mov r0, r5 - mov r2, r4 - add r1, r6, #0x10 - bl MIi_CpuClearFast - add r7, r7, #0x1 - cmp r7, #0x20 - add r6, r6, #0x20 - blt _020B3400 - ldr ip, _020B3464 ; =UNK_021CDD60 - mov r0, #0x0 - ldr r3, _020B3468 ; =UNK_021CDD64 - ldr r1, _020B346C ; =UNK_021CDDF4 - mov r2, #0x100 - strh r0, [r12, #0x0] - strh r0, [r3, #0x0] - bl MIi_CpuClearFast - ldr r0, _020B3470 ; =UNK_021CDD68 - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B3454: .word UNK_021CDD70 -_020B3458: .word 0x0000FFFE -_020B345C: .word UNK_02106570 -_020B3460: .word UNK_021CE4F4 -_020B3464: .word UNK_021CDD60 -_020B3468: .word UNK_021CDD64 -_020B346C: .word UNK_021CDDF4 -_020B3470: .word UNK_021CDD68 - - arm_func_start FUN_020B3474 -FUN_020B3474: ; 0x020B3474 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r0, [r5, #0x8] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - ldr r4, [r5, #0x0] - bl FUN_020B2B58 - ldrh r0, [r5, #0x1e] - ands r0, r0, #0x8 - beq _020B34E4 - ldr r0, _020B354C ; =UNK_021CDD6C - ldrsh r7, [r5, #0x1a] - ldr r0, [r0, #0x0] - ldrsh r6, [r5, #0x18] - bl FUN_020B4F88 - cmp r0, #0x0 - ldr r0, _020B354C ; =UNK_021CDD6C - rsbne r6, r6, #0x0 - ldr r0, [r0, #0x0] - bl FUN_020B4F74 - cmp r0, #0x0 - rsbne r7, r7, #0x0 - mov r0, r6, lsl #0xc - mov r1, r7, lsl #0xc - mov r2, #0x0 - bl FUN_020B2A08 -_020B34E4: - ldrh r0, [r5, #0x1e] - ands r0, r0, #0x4 - beq _020B3518 - ldrh r0, [r5, #0x1c] - ldr r2, _020B3550 ; =UNK_020FFA38 - mov r0, r0, asr #0x4 - mov r1, r0, lsl #0x1 - add r0, r1, #0x1 - mov r3, r1, lsl #0x1 - mov r1, r0, lsl #0x1 - ldrsh r0, [r2, r3] - ldrsh r1, [r2, r1] - bl FUN_020B2794 -_020B3518: - ldrh r0, [r5, #0x1e] - ands r0, r0, #0x2 - beq _020B3534 - ldr r0, [r5, #0x10] - ldr r1, [r5, #0x14] - mov r2, #0x1000 - bl FUN_020B28B4 -_020B3534: - mov r0, r4 - bl FUN_020B3554 - mov r0, #0x1 - bl FUN_020B2B08 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B354C: .word UNK_021CDD6C -_020B3550: .word UNK_020FFA38 - - arm_func_start FUN_020B3554 -FUN_020B3554: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldrh r0, [r5, #0x4a] - ldr r4, [r5, #0x2c] - cmp r0, #0x0 - bne _020B35C0 - ldr r2, [r5, #0x34] - mvn r0, #0x0 - cmp r2, r0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020B35B0 - ldr r1, _020B36B4 ; =UNK_02106574 - mov r0, r4 - str r2, [r1, #0x0] - bl FUN_020B36C0 - ldr r0, _020B36B4 ; =UNK_02106574 - mvn r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} -_020B35B0: - mov r0, r4 - bl FUN_020B36C0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} -_020B35C0: - bl FUN_020B2B58 - ldrh r0, [r5, #0x4a] - ands r0, r0, #0x8 - beq _020B3610 - ldr r0, _020B36B8 ; =UNK_021CDD6C - ldrsh r7, [r5, #0x46] - ldr r0, [r0, #0x0] - ldrsh r6, [r5, #0x44] - bl FUN_020B4F88 - cmp r0, #0x0 - ldr r0, _020B36B8 ; =UNK_021CDD6C - rsbne r6, r6, #0x0 - ldr r0, [r0, #0x0] - bl FUN_020B4F74 - cmp r0, #0x0 - rsbne r7, r7, #0x0 - mov r0, r6, lsl #0xc - mov r1, r7, lsl #0xc - mov r2, #0x0 - bl FUN_020B2A08 -_020B3610: - ldrh r0, [r5, #0x4a] - ands r0, r0, #0x4 - beq _020B3644 - ldrh r0, [r5, #0x48] - ldr r2, _020B36BC ; =UNK_020FFA38 - mov r0, r0, asr #0x4 - mov r1, r0, lsl #0x1 - add r0, r1, #0x1 - mov r3, r1, lsl #0x1 - mov r1, r0, lsl #0x1 - ldrsh r0, [r2, r3] - ldrsh r1, [r2, r1] - bl FUN_020B2794 -_020B3644: - ldrh r0, [r5, #0x4a] - ands r0, r0, #0x2 - beq _020B3660 - ldr r0, [r5, #0x3c] - ldr r1, [r5, #0x40] - mov r2, #0x1000 - bl FUN_020B28B4 -_020B3660: - ldr r2, [r5, #0x34] - mvn r0, #0x0 - cmp r2, r0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020B369C - ldr r1, _020B36B4 ; =UNK_02106574 - mov r0, r4 - str r2, [r1, #0x0] - bl FUN_020B36C0 - ldr r0, _020B36B4 ; =UNK_02106574 - mvn r1, #0x0 - str r1, [r0, #0x0] - b _020B36A4 -_020B369C: - mov r0, r4 - bl FUN_020B36C0 -_020B36A4: - mov r0, #0x1 - bl FUN_020B2B08 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B36B4: .word UNK_02106574 -_020B36B8: .word UNK_021CDD6C -_020B36BC: .word UNK_020FFA38 - - arm_func_start FUN_020B36C0 -FUN_020B36C0: ; 0x020B36C0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r5, _020B3B54 ; =UNK_021CDD6C - mov r10, r0 - ldr r0, [r5, #0x0] - ldr r1, [r0, #0x7c] - str r0, [sp, #0x0] - ldr r9, [r0, #0x70] - ands r0, r1, #0x2 - beq _020B38EC - ldr r0, [r9, #0x14] - cmp r0, #0x0 - beq _020B3840 - ldr r0, _020B3B58 ; =UNK_021CDD68 - mov r1, #0x0 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020B3720 - ldr r2, _020B3B5C ; =UNK_02106570 - ldr r0, _020B3B60 ; =0x0000FFFE - ldrh r2, [r2, #0x0] - cmp r2, r0 - movne r0, #0x1 - bne _020B3724 -_020B3720: - mov r0, #0x0 -_020B3724: - cmp r0, #0x0 - beq _020B37AC - ldr r0, _020B3B64 ; =UNK_021CE8F4 - ldr r1, [r0, #0x404] - cmp r1, #0x0 - beq _020B3788 - ldrh r1, [r0, #0x0] - ldr r0, _020B3B68 ; =UNK_021CE8F8 - ldr r1, [r0, r1, lsl #0x2] - cmp r1, #0x0 - bne _020B37AC - bl FUN_020B4010 - ldr r0, _020B3B6C ; =UNK_021CDD70 - ldr r2, _020B3B70 ; =UNK_021CDDF4 - ldr r0, [r0, #0x0] - ldr r1, _020B3B64 ; =UNK_021CE8F4 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0xd - ldrh r3, [r2, r0] - ldr r4, _020B3B74 ; =UNK_021CE4F4 - ldrh r2, [r1, #0x0] - ldr r0, _020B3B68 ; =UNK_021CE8F8 - add r1, r4, r3, lsl #0x5 - str r1, [r0, r2, lsl #0x2] - b _020B37AC -_020B3788: - bl FUN_020B4010 - ldr r0, _020B3B6C ; =UNK_021CDD70 - ldr r1, _020B3B70 ; =UNK_021CDDF4 - ldr r0, [r0, #0x0] - ldr r2, _020B3B74 ; =UNK_021CE4F4 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0xd - ldrh r0, [r1, r0] - add r1, r2, r0, lsl #0x5 -_020B37AC: - ldr r0, _020B3B58 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020B3B6C ; =UNK_021CDD70 - ldreq r3, _020B3B78 ; =UNK_021CDEF4 - ldreq r2, [r0, #0x0] - moveq r0, #0x18 - mlaeq r0, r2, r0, r3 - beq _020B37FC - ldr r2, _020B3B6C ; =UNK_021CDD70 - mov r0, #0x18 - ldr r2, [r2, #0x0] - ldr r3, _020B3B7C ; =UNK_021CDF04 - mul r4, r2, r0 - ldr r2, _020B3B80 ; =UNK_021CDF08 - ldr r3, [r3, r4] - ldr r0, _020B3B84 ; =UNK_02106578 - ldr r2, [r2, r4] - str r3, [r0, #0x10] - str r2, [r0, #0x14] -_020B37FC: - bl FUN_020B4FAC - ldr r1, _020B3B88 ; =UNK_02106574 - mvn r0, #0x0 - ldr r1, [r1, #0x0] - cmp r1, r0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020B3830 - mov r0, r10 - bl FUN_020B4BF4 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} -_020B3830: - mov r0, r10 - bl FUN_020B4CDC - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} -_020B3840: - ldr r0, _020B3B6C ; =UNK_021CDD70 - ldr r1, _020B3B8C ; =UNK_021CDD74 - ldr r2, [r0, #0x0] - ldr r0, [sp, #0x0] - ldr r1, [r1, r2, lsl #0x2] - bl FUN_020B4FA4 - ldr r0, _020B3B58 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020B3B6C ; =UNK_021CDD70 - ldreq r2, _020B3B78 ; =UNK_021CDEF4 - ldreq r1, [r0, #0x0] - moveq r0, #0x18 - mlaeq r0, r1, r0, r2 - beq _020B38A8 - ldr r1, _020B3B6C ; =UNK_021CDD70 - mov r0, #0x18 - ldr r1, [r1, #0x0] - ldr r2, _020B3B7C ; =UNK_021CDF04 - mul r3, r1, r0 - ldr r1, _020B3B80 ; =UNK_021CDF08 - ldr r2, [r2, r3] - ldr r0, _020B3B84 ; =UNK_02106578 - ldr r1, [r1, r3] - str r2, [r0, #0x10] - str r1, [r0, #0x14] -_020B38A8: - bl FUN_020B4FC4 - ldr r1, _020B3B88 ; =UNK_02106574 - mvn r0, #0x0 - ldr r1, [r1, #0x0] - cmp r1, r0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020B38DC - mov r0, r10 - bl FUN_020B4BF4 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} -_020B38DC: - mov r0, r10 - bl FUN_020B4CDC - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} -_020B38EC: - cmp r9, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r11,pc} - ldr r4, _020B3B6C ; =UNK_021CDD70 - ldr fp, _020B3B78 ; =UNK_021CDEF4 - mov r7, #0x0 - mov r6, #0x1 -_020B3908: - ldr r0, [r9, #0x10] - cmp r0, #0x0 - beq _020B3B40 - ldr r0, [r9, #0x14] - cmp r0, #0x0 - beq _020B3A8C - ldr r8, [r5, #0x0] - mov r1, r9 - str r9, [r8, #0x74] - mov r0, r8 - bl FUN_020B4F9C - ldr r1, [r9, #0x28] - ldr r2, [r9, #0x2c] - mov r0, r8 - bl FUN_020B5034 - mov r0, r8 - bl FUN_020B4E0C - ldr r0, _020B3B58 ; =UNK_021CDD68 - mov r1, r7 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - bne _020B3978 - ldr r0, _020B3B5C ; =UNK_02106570 - ldrh r2, [r0, #0x0] - ldr r0, _020B3B60 ; =0x0000FFFE - cmp r2, r0 - movne r0, r6 - bne _020B397C -_020B3978: - mov r0, r7 -_020B397C: - cmp r0, #0x0 - beq _020B3A04 - ldr r0, _020B3B64 ; =UNK_021CE8F4 - ldr r0, [r0, #0x404] - cmp r0, #0x0 - beq _020B39E4 - ldr r0, _020B3B64 ; =UNK_021CE8F4 - ldrh r1, [r0, #0x0] - add r0, r0, r1, lsl #0x2 - ldr r1, [r0, #0x4] - cmp r1, #0x0 - bne _020B3A04 - bl FUN_020B4010 - ldr r0, _020B3B64 ; =UNK_021CE8F4 - ldr r2, [r4, #0x0] - ldrh r1, [r0, #0x0] - mov r0, r2, lsl #0x10 - mov r2, r0, lsr #0xd - ldr r0, _020B3B70 ; =UNK_021CDDF4 - ldrh r3, [r0, r2] - ldr r0, _020B3B64 ; =UNK_021CE8F4 - add r2, r0, r1, lsl #0x2 - ldr r0, _020B3B74 ; =UNK_021CE4F4 - add r1, r0, r3, lsl #0x5 - str r1, [r2, #0x4] - b _020B3A04 -_020B39E4: - bl FUN_020B4010 - ldr r0, [r4, #0x0] - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0xd - ldr r0, _020B3B70 ; =UNK_021CDDF4 - ldrh r1, [r0, r1] - ldr r0, _020B3B74 ; =UNK_021CE4F4 - add r1, r0, r1, lsl #0x5 -_020B3A04: - ldr r0, _020B3B58 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r2, [r4, #0x0] - moveq r0, #0x18 - mlaeq r0, r2, r0, r11 - beq _020B3A44 - ldr r2, [r4, #0x0] - mov r0, #0x18 - mla r8, r2, r0, r11 - ldr r0, _020B3B84 ; =UNK_02106578 - ldr r3, [r8, #0x10] - mov r2, r0 - str r3, [r2, #0x10] - ldr r3, [r8, #0x14] - str r3, [r2, #0x14] -_020B3A44: - bl FUN_020B4FAC - ldr r0, _020B3B88 ; =UNK_02106574 - ldr r1, [r0, #0x0] - mvn r0, #0x0 - cmp r1, r0 - movne r0, r6 - moveq r0, r7 - cmp r0, #0x0 - beq _020B3A74 - mov r0, r10 - bl FUN_020B4BF4 - b _020B3A7C -_020B3A74: - mov r0, r10 - bl FUN_020B4CDC -_020B3A7C: - ldr r0, [r5, #0x0] - str r7, [r0, #0x74] - bl FUN_020B4DA0 - b _020B3B40 -_020B3A8C: - ldr r8, [r5, #0x0] - mov r1, r9 - mov r0, r8 - str r9, [r8, #0x74] - bl FUN_020B4F9C - mov r0, r8 - bl FUN_020B4E0C - ldr r2, [r4, #0x0] - ldr r1, _020B3B8C ; =UNK_021CDD74 - ldr r0, [sp, #0x0] - ldr r1, [r1, r2, lsl #0x2] - bl FUN_020B4FA4 - ldr r0, _020B3B58 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r1, [r4, #0x0] - moveq r0, #0x18 - mlaeq r0, r1, r0, r11 - beq _020B3AFC - ldr r1, [r4, #0x0] - mov r0, #0x18 - mla r3, r1, r0, r11 - ldr r0, _020B3B84 ; =UNK_02106578 - ldr r2, [r3, #0x10] - mov r1, r0 - str r2, [r1, #0x10] - ldr r2, [r3, #0x14] - str r2, [r1, #0x14] -_020B3AFC: - bl FUN_020B4FC4 - ldr r0, _020B3B88 ; =UNK_02106574 - ldr r1, [r0, #0x0] - mvn r0, #0x0 - cmp r1, r0 - movne r0, r6 - moveq r0, r7 - cmp r0, #0x0 - beq _020B3B2C - mov r0, r10 - bl FUN_020B4BF4 - b _020B3B34 -_020B3B2C: - mov r0, r10 - bl FUN_020B4CDC -_020B3B34: - ldr r0, [r5, #0x0] - str r7, [r0, #0x74] - bl FUN_020B4DA0 -_020B3B40: - ldr r9, [r9, #0x30] - cmp r9, #0x0 - bne _020B3908 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B3B54: .word UNK_021CDD6C -_020B3B58: .word UNK_021CDD68 -_020B3B5C: .word UNK_02106570 -_020B3B60: .word 0x0000FFFE -_020B3B64: .word UNK_021CE8F4 -_020B3B68: .word UNK_021CE8F8 -_020B3B6C: .word UNK_021CDD70 -_020B3B70: .word UNK_021CDDF4 -_020B3B74: .word UNK_021CE4F4 -_020B3B78: .word UNK_021CDEF4 -_020B3B7C: .word UNK_021CDF04 -_020B3B80: .word UNK_021CDF08 -_020B3B84: .word UNK_02106578 -_020B3B88: .word UNK_02106574 -_020B3B8C: .word UNK_021CDD74 - - arm_func_start FUN_020B3B90 -FUN_020B3B90: ; 0x020B3B90 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - ldr r0, _020B3C24 ; =UNK_021CDD6C - mov r12, r1 - ldr r0, [r0, #0x0] - mov r3, r2 - ldr r1, [r0, #0x74] - ldr r2, [r1, #0x44] - cmp r2, #0x0 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4-r6,pc} - ldr r2, _020B3C28 ; =UNK_021CDD68 - ldr r2, [r2, #0x0] - cmp r2, #0x0 - ldreq r2, _020B3C2C ; =UNK_021CDD70 - ldreq r4, _020B3C30 ; =UNK_021CDEF4 - ldreq lr, [r2, #0x0] - moveq r2, #0x18 - mlaeq r6, lr, r2, r4 - beq _020B3C0C - ldr lr, _020B3C2C ; =UNK_021CDD70 - mov r2, #0x18 - ldr lr, [lr, #0x0] - ldr r4, _020B3C34 ; =UNK_021CDF04 - mul r5, lr, r2 - ldr r2, _020B3C38 ; =UNK_021CDF08 - ldr r4, [r4, r5] - ldr r6, _020B3C3C ; =UNK_02106578 - ldr r2, [r2, r5] - str r4, [r6, #0x10] - str r2, [r6, #0x14] -_020B3C0C: - str r6, [sp, #0x0] - ldr lr, [r1, #0x44] - mov r2, r12 - blx lr - add sp, sp, #0x8 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B3C24: .word UNK_021CDD6C -_020B3C28: .word UNK_021CDD68 -_020B3C2C: .word UNK_021CDD70 -_020B3C30: .word UNK_021CDEF4 -_020B3C34: .word UNK_021CDF04 -_020B3C38: .word UNK_021CDF08 -_020B3C3C: .word UNK_02106578 - - arm_func_start FUN_020B3C40 -FUN_020B3C40: ; 0x020B3C40 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x8 - ldr r3, _020B3E2C ; =UNK_021CDD6C - add r4, r0, #0x38 - ldr r0, [r3, #0x0] - mov r6, r1 - mov r5, r2 - bl FUN_020B278C - cmp r0, #0x0 - beq _020B3C90 - ldrh r1, [r4, #0x4] - and r1, r1, #0xf000 - mov r1, r1, lsl #0x4 - mov r1, r1, lsr #0x10 - bl FUN_020B10B0 - ldr r1, [r4, #0x4] - and r0, r0, #0xf - bic r1, r1, #0xf000 - orr r0, r1, r0, lsl #0xc - str r0, [r4, #0x4] -_020B3C90: - ldr r0, _020B3E2C ; =UNK_021CDD6C - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x84] - cmp r0, #0x0 - beq _020B3DA4 - ldr r0, [r1, #0x84] - ands r0, r0, #0x1 - beq _020B3CC8 - ldrh r0, [r1, #0x88] - ldr r1, [r4, #0x4] - bic r1, r1, #0xc00 - and r0, r0, #0x3 - orr r0, r1, r0, lsl #0xa - str r0, [r4, #0x4] -_020B3CC8: - ldr r0, _020B3E2C ; =UNK_021CDD6C - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x84] - ands r0, r0, #0x2 - beq _020B3CF4 - ldrh r0, [r1, #0x8a] - ldr r1, [r4, #0x4] - bic r1, r1, #0xf000 - and r0, r0, #0xf - orr r0, r1, r0, lsl #0xc - str r0, [r4, #0x4] -_020B3CF4: - ldr r0, _020B3E2C ; =UNK_021CDD6C - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x84] - ands r0, r0, #0x10 - beq _020B3D2C - ldr r2, [r4, #0x4] - ldrh r0, [r1, #0x94] - mov r1, r2, lsl #0x10 - bic r2, r2, #0xf000 - add r0, r0, r1, lsr #0x1c - and r0, r0, #0xf - and r0, r0, #0xf - orr r0, r2, r0, lsl #0xc - str r0, [r4, #0x4] -_020B3D2C: - ldr r0, _020B3E2C ; =UNK_021CDD6C - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x84] - ands r0, r0, #0x4 - beq _020B3D60 - ldr r0, [r1, #0x90] - cmp r0, #0x0 - ldrne r0, [r4, #0x0] - orrne r0, r0, #0x1000 - strne r0, [r4, #0x0] - ldreq r0, [r4, #0x0] - biceq r0, r0, #0x1000 - streq r0, [r4, #0x0] -_020B3D60: - ldr r0, _020B3E2C ; =UNK_021CDD6C - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x84] - ands r0, r0, #0x8 - beq _020B3DA4 - ldr r0, [r4, #0x0] - ldrh r2, [r4, #0x4] - ldr r1, [r1, #0x8c] - bic r0, r0, #0xc00 - orr r0, r0, r1, lsl #0xa - str r0, [r4, #0x0] - ldrh r0, [r4, #0x4] - and r1, r2, #0xf000 - mov r1, r1, asr #0xc - bic r0, r0, #0xf000 - orr r0, r0, r1, lsl #0xc - strh r0, [r4, #0x4] -_020B3DA4: - ldr r0, _020B3E2C ; =UNK_021CDD6C - ldr r0, [r0, #0x0] - ldr r1, [r0, #0x74] - ldr r2, [r1, #0x40] - cmp r2, #0x0 - addeq sp, sp, #0x8 - ldmeqia sp!, {r4-r6,pc} - ldr r2, _020B3E30 ; =UNK_021CDD68 - ldr r2, [r2, #0x0] - cmp r2, #0x0 - ldreq r2, _020B3E34 ; =UNK_021CDD70 - ldreq r4, _020B3E38 ; =UNK_021CDEF4 - ldreq r3, [r2, #0x0] - moveq r2, #0x18 - mlaeq r4, r3, r2, r4 - beq _020B3E10 - ldr r3, _020B3E34 ; =UNK_021CDD70 - mov r2, #0x18 - ldr r4, [r3, #0x0] - ldr r3, _020B3E3C ; =UNK_021CDF04 - mul r12, r4, r2 - ldr r2, _020B3E40 ; =UNK_021CDF08 - ldr r3, [r3, r12] - ldr r4, _020B3E44 ; =UNK_02106578 - ldr r2, [r2, r12] - str r3, [r4, #0x10] - str r2, [r4, #0x14] -_020B3E10: - str r4, [sp, #0x0] - ldr r4, [r1, #0x40] - mov r2, r6 - mov r3, r5 - blx r4 - add sp, sp, #0x8 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B3E2C: .word UNK_021CDD6C -_020B3E30: .word UNK_021CDD68 -_020B3E34: .word UNK_021CDD70 -_020B3E38: .word UNK_021CDEF4 -_020B3E3C: .word UNK_021CDF04 -_020B3E40: .word UNK_021CDF08 -_020B3E44: .word UNK_02106578 - - arm_func_start FUN_020B3E48 -FUN_020B3E48: ; 0x020B3E48 - stmdb sp!, {r4,lr} - ldr r0, _020B3EC4 ; =UNK_021CDD6C - mov r2, r1 - ldr r0, [r0, #0x0] - ldr r1, [r0, #0x74] - ldr r3, [r1, #0x3c] - cmp r3, #0x0 - ldmeqia sp!, {r4,pc} - ldr r3, _020B3EC8 ; =UNK_021CDD68 - ldr r3, [r3, #0x0] - cmp r3, #0x0 - ldreq r3, _020B3ECC ; =UNK_021CDD70 - ldreq lr, _020B3ED0 ; =UNK_021CDEF4 - ldreq r12, [r3, #0x0] - moveq r3, #0x18 - mlaeq r3, r12, r3, lr - beq _020B3EB8 - ldr ip, _020B3ECC ; =UNK_021CDD70 - mov r3, #0x18 - ldr r12, [r12, #0x0] - ldr lr, _020B3ED4 ; =UNK_021CDF04 - mul r4, r12, r3 - ldr ip, _020B3ED8 ; =UNK_021CDF08 - ldr lr, [lr, r4] - ldr r3, _020B3EDC ; =UNK_02106578 - ldr r12, [r12, r4] - str lr, [r3, #0x10] - str r12, [r3, #0x14] -_020B3EB8: - ldr r12, [r1, #0x3c] - blx r12 - ldmia sp!, {r4,pc} - .balign 4 -_020B3EC4: .word UNK_021CDD6C -_020B3EC8: .word UNK_021CDD68 -_020B3ECC: .word UNK_021CDD70 -_020B3ED0: .word UNK_021CDEF4 -_020B3ED4: .word UNK_021CDF04 -_020B3ED8: .word UNK_021CDF08 -_020B3EDC: .word UNK_02106578 - - arm_func_start FUN_020B3EE0 -FUN_020B3EE0: ; 0x020B3EE0 - stmdb sp!, {r4-r6,lr} - ldr r2, _020B3FF4 ; =UNK_021CDD6C - mov r6, r0 - ldr r0, [r2, #0x0] - mov r5, r1 - ldr r4, [r0, #0x74] - ldr r0, [r4, #0x34] - cmp r0, #0x0 - beq _020B3F7C - ldr r0, _020B3FF8 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020B3FFC ; =UNK_021CDD70 - ldreq r1, _020B4000 ; =UNK_021CDEF4 - ldreq r2, [r0, #0x0] - moveq r0, #0x18 - mlaeq r1, r2, r0, r1 - beq _020B3F54 - ldr r1, _020B3FFC ; =UNK_021CDD70 - mov r0, #0x18 - ldr r2, [r1, #0x0] - ldr r1, _020B4004 ; =UNK_021CDF04 - mul r3, r2, r0 - ldr r0, _020B4008 ; =UNK_021CDF08 - ldr r2, [r1, r3] - ldr r1, _020B400C ; =UNK_02106578 - ldr r0, [r0, r3] - str r2, [r1, #0x10] - str r0, [r1, #0x14] -_020B3F54: - ldr r3, [r4, #0x34] - mov r0, r5 - mov r2, r4 - blx r3 - cmp r0, #0x0 - moveq r0, #0x0 - streq r0, [r6, #0x30] - ldmeqia sp!, {r4-r6,pc} - mov r0, #0x1 - str r0, [r6, #0x30] -_020B3F7C: - ldr r0, [r4, #0x38] - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r0, _020B3FF8 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldreq r0, _020B3FFC ; =UNK_021CDD70 - ldreq r2, _020B4000 ; =UNK_021CDEF4 - ldreq r1, [r0, #0x0] - moveq r0, #0x18 - mlaeq r3, r1, r0, r2 - beq _020B3FD8 - ldr r1, _020B3FFC ; =UNK_021CDD70 - mov r0, #0x18 - ldr r2, [r1, #0x0] - ldr r1, _020B4004 ; =UNK_021CDF04 - mul r6, r2, r0 - ldr r0, _020B4008 ; =UNK_021CDF08 - ldr r1, [r1, r6] - ldr r3, _020B400C ; =UNK_02106578 - ldr r0, [r0, r6] - str r1, [r3, #0x10] - str r0, [r3, #0x14] -_020B3FD8: - ldr r0, _020B3FF4 ; =UNK_021CDD6C - ldr r6, [r4, #0x38] - ldr r0, [r0, #0x0] - mov r1, r4 - mov r2, r5 - blx r6 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B3FF4: .word UNK_021CDD6C -_020B3FF8: .word UNK_021CDD68 -_020B3FFC: .word UNK_021CDD70 -_020B4000: .word UNK_021CDEF4 -_020B4004: .word UNK_021CDF04 -_020B4008: .word UNK_021CDF08 -_020B400C: .word UNK_02106578 - - arm_func_start FUN_020B4010 -FUN_020B4010: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020B4154 ; =UNK_021CDD70 - ldr r1, _020B4158 ; =UNK_021CDDF4 - ldr r0, [r0, #0x0] - mov r2, #0x1 - mov r0, r0, lsl #0x10 - add r3, r1, r0, lsr #0xd - ldrh r0, [r3, #0x4] - cmp r0, #0x1 - beq _020B4044 - cmp r0, #0x2 - movne r2, #0x0 -_020B4044: - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r0, _020B415C ; =UNK_021CDD60 - mov r2, #0x10 - ldrh r4, [r0, #0x0] - cmp r4, #0x1f - addcc r1, r4, #0x1 - strcch r1, [r0, #0x0] - ldr r0, _020B4160 ; =UNK_021CE4F4 - ldrh r5, [r3, #0x2] - add r0, r0, r4, lsl #0x5 - add r1, r0, #0x10 - mvn r0, #0x0 - strh r4, [r3, #0x0] - bl MIi_CpuClearFast - ldr r0, _020B4154 ; =UNK_021CDD70 - ldr r1, _020B4164 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - ldr r2, [r1, #0x0] - mov r1, r0, lsl #0x10 - cmp r2, #0x0 - ldr r3, _020B4158 ; =UNK_021CDDF4 - mov r1, r1, lsr #0xd - ldrh r1, [r3, r1] - ldr r3, _020B4160 ; =UNK_021CE4F4 - moveq r2, #0x18 - add r1, r3, r1, lsl #0x5 - ldreq r3, _020B4168 ; =UNK_021CE1F4 - mlaeq r12, r0, r2, r3 - beq _020B40E4 - mov r2, #0x18 - mul r3, r0, r2 - ldr r2, _020B416C ; =UNK_021CDF04 - ldr r0, _020B4170 ; =UNK_021CDF08 - ldr r2, [r2, r3] - ldr ip, _020B4174 ; =UNK_02106578 - ldr r0, [r0, r3] - str r2, [r12, #0x10] - str r0, [r12, #0x14] -_020B40E4: - ldr r2, [r12, #0x0] - ldr r0, _020B4154 ; =UNK_021CDD70 - str r2, [r1, #0x0] - ldr r2, [r12, #0x4] - str r2, [r1, #0x4] - ldr r2, [r12, #0x8] - str r2, [r1, #0x8] - ldr r2, [r12, #0xc] - str r2, [r1, #0xc] - ldr r0, [r0, #0x0] - mov r0, r0, lsl #0x10 - movs lr, r0, lsr #0x10 - addmi sp, sp, #0x4 - ldmmiia sp!, {r4-r5,pc} - ldr r3, _020B4158 ; =UNK_021CDDF4 - mov r0, #0x3 -_020B4124: - add r2, r3, lr, lsl #0x3 - ldrh r1, [r2, #0x2] - mov r12, lr, lsl #0x3 - cmp r5, r1 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,pc} - strh r0, [r2, #0x4] - strh r4, [r3, r12] - subs lr, lr, #0x1 - bpl _020B4124 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B4154: .word UNK_021CDD70 -_020B4158: .word UNK_021CDDF4 -_020B415C: .word UNK_021CDD60 -_020B4160: .word UNK_021CE4F4 -_020B4164: .word UNK_021CDD68 -_020B4168: .word UNK_021CE1F4 -_020B416C: .word UNK_021CDF04 -_020B4170: .word UNK_021CDF08 -_020B4174: .word UNK_02106578 - - arm_func_start FUN_020B4178 -FUN_020B4178: ; 0x020B4178 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r0, _020B4220 ; =UNK_021CDD68 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020B41B8 - ldr r1, _020B4224 ; =UNK_021CDD70 - mov r0, #0x18 - ldr r12, [r1, #0x0] - ldr r1, _020B4228 ; =UNK_021CDF04 - mul r3, r12, r0 - mov r2, #0x0 - ldr r0, _020B422C ; =UNK_021CDF08 - str r2, [r1, r3] - str r2, [r0, r3] - b _020B420C -_020B41B8: - ldr r0, _020B4224 ; =UNK_021CDD70 - mov lr, #0x18 - ldr r1, [r0, #0x0] - ldr r4, _020B4230 ; =UNK_021CDEF4 - mul r3, r1, lr - mov r2, #0x1000 - str r2, [r4, r3] - add r5, r4, r3 - mov r1, #0x0 - str r1, [r5, #0x4] - str r1, [r5, #0x8] - str r2, [r5, #0xc] - str r1, [r5, #0x10] - str r1, [r5, #0x14] - ldr r12, [r0, #0x0] - ldr r4, _020B4234 ; =UNK_021CE1F4 - ldmia r5!, {r0-r3} - mla lr, r12, lr, r4 - stmia lr!, {r0-r3} - ldmia r5, {r0-r1} - stmia lr, {r0-r1} -_020B420C: - ldr r0, _020B4238 ; =UNK_021CDD74 - mov r1, #0x0 - str r1, [r0, r12, lsl #0x2] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B4220: .word UNK_021CDD68 -_020B4224: .word UNK_021CDD70 -_020B4228: .word UNK_021CDF04 -_020B422C: .word UNK_021CDF08 -_020B4230: .word UNK_021CDEF4 -_020B4234: .word UNK_021CE1F4 -_020B4238: .word UNK_021CDD74 - - arm_func_start FUN_020B423C -FUN_020B423C: ; 0x020B423C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x1c - ldr r4, [r0, #0x4] - ldr r3, [r1, #0x8] - mov r12, r2 - smull r6, r5, r4, r3 - ldr r4, [r0, #0x0] - ldr r3, [r1, #0x0] - cmp r12, r1 - smlal r6, r5, r4, r3 - mov r3, r6, lsr #0xc - addeq r2, sp, #0x0 - orr r3, r3, r5, lsl #0x14 - str r3, [r2, #0x0] - ldr r4, [r0, #0x4] - ldr r3, [r1, #0xc] - ldr r5, [r0, #0x0] - smull r7, r6, r4, r3 - ldr r3, [r1, #0x4] - add lr, sp, #0x0 - smlal r7, r6, r5, r3 - mov r3, r7, lsr #0xc - orr r3, r3, r6, lsl #0x14 - str r3, [r2, #0x4] - ldr r4, [r0, #0xc] - ldr r3, [r1, #0x8] - ldr r5, [r0, #0x8] - smull r7, r6, r4, r3 - ldr r3, [r1, #0x0] - cmp r2, lr - smlal r7, r6, r5, r3 - mov r3, r7, lsr #0xc - orr r3, r3, r6, lsl #0x14 - str r3, [r2, #0x8] - ldr r4, [r0, #0xc] - ldr r3, [r1, #0xc] - ldr r5, [r0, #0x8] - smull r7, r6, r4, r3 - ldr r3, [r1, #0x4] - smlal r7, r6, r5, r3 - mov r3, r7, lsr #0xc - orr r3, r3, r6, lsl #0x14 - str r3, [r2, #0xc] - ldr r4, [r0, #0x14] - ldr r3, [r1, #0x8] - ldr r5, [r0, #0x10] - smull r7, r6, r4, r3 - ldr r3, [r1, #0x0] - ldr r4, [r1, #0x10] - smlal r7, r6, r5, r3 - mov r3, r7, lsr #0xc - orr r3, r3, r6, lsl #0x14 - add r3, r4, r3 - str r3, [r2, #0x10] - ldr r4, [r0, #0x14] - ldr r3, [r1, #0xc] - ldr r5, [r0, #0x10] - ldr r0, [r1, #0x4] - smull r6, r3, r4, r3 - smlal r6, r3, r5, r0 - mov r0, r6, lsr #0xc - ldr r1, [r1, #0x14] - orr r0, r0, r3, lsl #0x14 - add r0, r1, r0 - str r0, [r2, #0x14] - ldmeqia lr!, {r0-r3} - stmeqia r12!, {r0-r3} - ldmeqia lr, {r0-r1} - stmeqia r12, {r0-r1} - add sp, sp, #0x1c - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B4358 -FUN_020B4358: ; 0x020B4358 - stmdb sp!, {r4,lr} - ldr r2, _020B43A0 ; =UNK_021CED04 - mov r1, #0x30 - ldr r2, [r2, #0x0] - mla r4, r0, r1, r2 - mov r0, r4 - bl FUN_020B10CC - mov r0, #0x0 - str r0, [r4, #0xc] - str r0, [r4, #0x10] - str r0, [r4, #0x14] - str r0, [r4, #0x18] - str r0, [r4, #0x1c] - str r0, [r4, #0x20] - str r0, [r4, #0x24] - str r0, [r4, #0x28] - str r0, [r4, #0x2c] - ldmia sp!, {r4,pc} - .balign 4 -_020B43A0: .word UNK_021CED04 - - arm_func_start FUN_020B43A4 -FUN_020B43A4: ; 0x020B43A4 - ldr r1, _020B43F8 ; =UNK_021CED00 - mov r0, #0x0 - ldr r3, [r1, #0x0] - cmp r3, #0x0 - bls _020B43F0 - ldr r1, _020B43FC ; =UNK_021CED04 - ldr r2, [r1, #0x0] - mov r12, r2 -_020B43C4: - ldr r1, [r12, #0x1c] - cmp r1, #0x1 - movne r1, #0x30 - mlane r1, r0, r1, r2 - movne r2, #0x1 - strne r2, [r1, #0x1c] - bxne lr - add r0, r0, #0x1 - cmp r0, r3 - add r12, r12, #0x30 - blo _020B43C4 -_020B43F0: - mvn r0, #0x0 - bx lr - .balign 4 -_020B43F8: .word UNK_021CED00 -_020B43FC: .word UNK_021CED04 - - arm_func_start FUN_020B4400 -FUN_020B4400: ; 0x020B4400 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r1 - mov r4, r2 - bl FUN_020B469C - mvn r1, #0x0 - str r1, [r0, #0x24] - str r5, [r0, #0x28] - str r4, [r0, #0x2c] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020B442C -FUN_020B442C: ; 0x020B442C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x14 - mov r0, #0x0 - str r0, [sp, #0x0] - ldr r0, _020B4558 ; =UNK_021CED00 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addls sp, sp, #0x14 - ldmlsia sp!, {r4-r11,pc} - ldr r0, [sp, #0x0] - mov r5, #0x1 - str r0, [sp, #0x4] - mov r11, r0 - str r0, [sp, #0x8] - str r0, [sp, #0xc] -_020B4468: - ldr r0, _020B455C ; =UNK_021CED04 - ldr r1, [r0, #0x0] - ldr r0, [sp, #0x4] - add r8, r1, r0 - ldr r0, [r8, #0x1c] - cmp r0, #0x0 - beq _020B4528 - ldr r9, [sp, #0x8] - mov r0, r9 - cmp r0, #0x3 - bge _020B4520 - add r4, r8, #0x24 -_020B4498: - mov r6, r5, lsl r9 - mov r1, r11 - ldr r0, [r8, #0x24] - ands r0, r0, r6 - beq _020B44B8 - ldr r0, [r8, #0x20] - ands r0, r0, r6 - movne r1, r5 -_020B44B8: - cmp r1, #0x0 - beq _020B4514 - ldr r0, _020B4560 ; =UNK_020FF8C4 - cmp r9, #0x0 - ldr r7, [r0, r9, lsl #0x2] - ldreq r10, [r8, #0x14] - mov r0, r8 - mov r1, r9 - ldrne r10, [r8, #0x10] - bl FUN_020B10BC - mov r1, r0 - mov r0, r7 - ldr r7, _020B4564 ; =UNK_021CECFC - ldr r2, [r8, #0x28] - ldr r3, [r8, #0x2c] - ldr r7, [r7, #0x0] - add r2, r10, r2 - blx r7 - cmp r0, #0x0 - ldrne r1, [r4, #0x0] - mvnne r0, r6 - andne r0, r1, r0 - strne r0, [r4, #0x0] -_020B4514: - add r9, r9, #0x1 - cmp r9, #0x3 - blt _020B4498 -_020B4520: - ldr r0, [sp, #0xc] - str r0, [r8, #0x20] -_020B4528: - ldr r0, _020B4558 ; =UNK_021CED00 - ldr r1, [r0, #0x0] - ldr r0, [sp, #0x0] - add r0, r0, #0x1 - str r0, [sp, #0x0] - cmp r0, r1 - ldr r0, [sp, #0x4] - add r0, r0, #0x30 - str r0, [sp, #0x4] - blo _020B4468 - add sp, sp, #0x14 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B4558: .word UNK_021CED00 -_020B455C: .word UNK_021CED04 -_020B4560: .word UNK_020FF8C4 -_020B4564: .word UNK_021CECFC - - arm_func_start FUN_020B4568 -FUN_020B4568: ; 0x020B4568 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr ip, _020B45E4 ; =UNK_021CECFC - movs r6, r1 - ldr r1, _020B45E8 ; =UNK_021CED00 - ldr r3, _020B45EC ; =UNK_021CED04 - mov r7, r0 - str r2, [r12, #0x0] - mov r5, #0x0 - addeq sp, sp, #0x4 - str r7, [r3, #0x0] - str r6, [r1, #0x0] - ldmeqia sp!, {r4-r7,pc} - mov r4, r5 -_020B45A0: - mov r0, r7 - bl FUN_020B10CC - str r4, [r7, #0xc] - str r4, [r7, #0x10] - str r4, [r7, #0x14] - str r4, [r7, #0x18] - str r4, [r7, #0x1c] - str r4, [r7, #0x20] - str r4, [r7, #0x24] - str r4, [r7, #0x28] - add r5, r5, #0x1 - str r4, [r7, #0x2c] - cmp r5, r6 - add r7, r7, #0x30 - blo _020B45A0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B45E4: .word UNK_021CECFC -_020B45E8: .word UNK_021CED00 -_020B45EC: .word UNK_021CED04 - - arm_func_start FUN_020B45F0 -FUN_020B45F0: ; 0x020B45F0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldr ip, _020B4698 ; =UNK_021CED04 - mov r4, #0x30 - ldr r12, [r12, #0x0] - mov r7, r1 - mla r4, r0, r4, r12 - mov r0, r4 - mov r6, r2 - mov r5, r3 - bl FUN_020B10CC - mvn r0, #0x0 - cmp r7, r0 - beq _020B4638 - mov r0, r4 - mov r2, r7 - mov r1, #0x0 - bl FUN_020B10C4 -_020B4638: - mvn r0, #0x0 - cmp r6, r0 - beq _020B4654 - mov r0, r4 - mov r2, r6 - mov r1, #0x1 - bl FUN_020B10C4 -_020B4654: - mvn r0, #0x0 - cmp r5, r0 - beq _020B4670 - mov r0, r4 - mov r2, r5 - mov r1, #0x2 - bl FUN_020B10C4 -_020B4670: - ldr r1, [sp, #0x18] - ldr r0, [sp, #0x1c] - str r1, [r4, #0xc] - ldr r1, [sp, #0x20] - str r0, [r4, #0x10] - ldr r0, [sp, #0x24] - str r1, [r4, #0x14] - str r0, [r4, #0x18] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B4698: .word UNK_021CED04 - - arm_func_start FUN_020B469C -FUN_020B469C: ; 0x020B469C - ldr r2, _020B46B0 ; =UNK_021CED04 - mov r1, #0x30 - ldr r2, [r2, #0x0] - mla r0, r1, r0, r2 - bx lr - .balign 4 -_020B46B0: .word UNK_021CED04 - - arm_func_start FUN_020B46B4 -FUN_020B46B4: ; 0x020B46B4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x1c - add r12, sp, #0x4 - mov r5, r1 - mov r4, r2 - mov r7, r3 - mov r6, r0 - ldr r1, [sp, #0x30] - ldr r2, [sp, #0x34] - ldr r3, [sp, #0x38] - mov r0, r7 - str r12, [sp, #0x0] - bl FUN_020B498C - ldr r2, [r7, #0x0] - and r1, r2, #0x300 - cmp r1, #0x100 - beq _020B4708 - cmp r1, #0x300 - beq _020B4708 - and r0, r2, #0x30000000 - orr r1, r1, r0 -_020B4708: - cmp r1, #0x300 - bne _020B478C - ldr r0, _020B4914 ; =0xC000C000 - ldr r1, _020B4918 ; =UNK_021CED08 - and r0, r2, r0 - and r2, r0, #0xc0000000 - mov r12, r2, lsr #0x1e - and r0, r0, #0xc000 - mov lr, r0, asr #0xe - ldr r3, _020B491C ; =UNK_020FF8AC - ldr r0, [r1, #0x0] - ldr r2, _020B4920 ; =UNK_020FF894 - cmp r0, #0x0 - ldrne r0, _020B4924 ; =UNK_021CED10 - mov r12, r12, lsl #0x1 - add r1, r2, lr, lsl #0x3 - add r3, r3, lr, lsl #0x3 - ldrh r2, [r12, r3] - ldrh r1, [r12, r1] - ldrne r0, [r0, #0x0] - mov r2, r2, asr #0x1 - addne r3, r0, r4, lsl #0xc - mov r1, r1, asr #0x1 - add r0, r5, r1 - add r2, r6, r2 - ldr r1, _020B4928 ; =0x04000470 - mov r2, r2, lsl #0xc - str r2, [r1, #0x0] - mov r0, r0, lsl #0xc - moveq r3, r4, lsl #0xc - str r0, [r1, #0x0] - str r3, [r1, #0x0] - b _020B47C0 -_020B478C: - ldr r0, _020B4918 ; =UNK_021CED08 - ldr r1, _020B4928 ; =0x04000470 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldrne r0, _020B4924 ; =UNK_021CED10 - ldrne r0, [r0, #0x0] - addne r2, r0, r4, lsl #0xc - mov r0, r6, lsl #0xc - str r0, [r1, #0x0] - mov r0, r5, lsl #0xc - moveq r2, r4, lsl #0xc - str r0, [r1, #0x0] - str r2, [r1, #0x0] -_020B47C0: - ldr r0, [sp, #0x14] - ldr r1, [sp, #0x18] - ldr r2, _020B492C ; =0x0400046C - mov r0, r0, lsl #0xc - str r0, [r2, #0x0] - mov r0, r1, lsl #0xc - str r0, [r2, #0x0] - mov r1, #0x1000 - str r1, [r2, #0x0] - ldr r0, _020B4930 ; =0x04000500 - mov r1, #0x1 - str r1, [r0, #0x0] - ldr r0, [sp, #0x4] - ldr r1, [sp, #0x10] - mov r0, r0, lsl #0x8 - mov r1, r1, lsl #0x8 - mov r0, r0, asr #0x10 - mov r1, r1, asr #0x10 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, r1, lsr #0x10 - orr r2, r2, r0, lsl #0x10 - ldr r1, _020B4934 ; =0x04000488 - ldr r0, _020B4938 ; =0x04000490 - str r2, [r1, #0x0] - mov r2, #0x10000 - str r2, [r0, #0x0] - ldr r2, [sp, #0xc] - ldr r3, [sp, #0x10] - mov r2, r2, lsl #0x8 - mov r3, r3, lsl #0x8 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - mov r2, r2, lsl #0x10 - mov r3, r3, lsl #0x10 - mov r4, r2, lsr #0x10 - mov r2, r3, lsr #0x10 - orr r3, r4, r2, lsl #0x10 - ldr r2, _020B493C ; =0x00010040 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - ldr r2, [sp, #0xc] - ldr r3, [sp, #0x8] - mov r2, r2, lsl #0x8 - mov r3, r3, lsl #0x8 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - mov r2, r2, lsl #0x10 - mov r3, r3, lsl #0x10 - mov r4, r2, lsr #0x10 - mov r2, r3, lsr #0x10 - orr r2, r4, r2, lsl #0x10 - str r2, [r1, #0x0] - mov r2, #0x40 - str r2, [r0, #0x0] - ldr r2, [sp, #0x4] - ldr r3, [sp, #0x8] - mov r2, r2, lsl #0x8 - mov r3, r3, lsl #0x8 - mov r2, r2, asr #0x10 - mov r3, r3, asr #0x10 - mov r2, r2, lsl #0x10 - mov r3, r3, lsl #0x10 - mov r4, r2, lsr #0x10 - mov r2, r3, lsr #0x10 - orr r2, r4, r2, lsl #0x10 - str r2, [r1, #0x0] - mov r2, #0x0 - str r2, [r0, #0x0] - ldr r1, _020B4940 ; =0x04000504 - ldr r0, _020B4918 ; =UNK_021CED08 - str r2, [r1, #0x0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x1c - ldmeqia sp!, {r4-r7,pc} - ldr r1, _020B4924 ; =UNK_021CED10 - ldr r0, _020B4944 ; =UNK_02106590 - ldr r2, [r1, #0x0] - ldr r0, [r0, #0x0] - add r0, r2, r0 - str r0, [r1, #0x0] - add sp, sp, #0x1c - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B4914: .word 0xC000C000 -_020B4918: .word UNK_021CED08 -_020B491C: .word UNK_020FF8AC -_020B4920: .word UNK_020FF894 -_020B4924: .word UNK_021CED10 -_020B4928: .word 0x04000470 -_020B492C: .word 0x0400046C -_020B4930: .word 0x04000500 -_020B4934: .word 0x04000488 -_020B4938: .word 0x04000490 -_020B493C: .word 0x00010040 -_020B4940: .word 0x04000504 -_020B4944: .word UNK_02106590 - - arm_func_start FUN_020B4948 -FUN_020B4948: - ldr r0, _020B4954 ; =UNK_02106590 - ldr r0, [r0, #0x0] - bx lr - .balign 4 -_020B4954: .word UNK_02106590 - - arm_func_start FUN_020B4958 -FUN_020B4958: - ldr r1, _020B4964 ; =UNK_02106590 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020B4964: .word UNK_02106590 - - arm_func_start FUN_020B4968 -FUN_020B4968: ; 0x020B4968 - ldr r0, _020B4978 ; =UNK_021CED10 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020B4978: .word UNK_021CED10 - - arm_func_start FUN_020B497C -FUN_020B497C: - ldr r1, _020B4988 ; =UNK_021CED08 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020B4988: .word UNK_021CED08 - - arm_func_start FUN_020B498C -FUN_020B498C: ; 0x020B498C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0xc - mov r6, r0 - ldr r4, [r6, #0x0] - ldr r0, _020B4BCC ; =0xC000C000 - ldr r5, [r6, #0x4] - and r4, r4, r0 - and r0, r4, #0xc0000000 - and r4, r4, #0xc000 - mov lr, r0, lsr #0x1e - ldr r0, _020B4BD0 ; =UNK_020FF8AC - mov r12, r4, asr #0xe - ldr r8, _020B4BD4 ; =UNK_020FF894 - mov r4, lr, lsl #0x1 - add r0, r0, r12, lsl #0x3 - ldrh r9, [r4, r0] - ldr r0, [sp, #0x28] - mov r5, r5, lsl #0x16 - mov r5, r5, lsr #0x16 - mov r7, r5, lsl #0x10 - str r9, [r0, #0x10] - add r5, r8, r12, lsl #0x3 - ldrh r8, [r4, r5] - mov r5, r1 - mov r4, r3 - str r8, [r0, #0x14] - ldr r1, [r5, #0x14] - mov r7, r7, lsr #0x10 - cmp r1, #0x0 - bne _020B4A74 - ldr r1, [r5, #0x8] - mov r2, r2, lsr #0x3 - orr r1, r2, r1, lsl #0x1a - ldr r2, [r5, #0x0] - orr r1, r1, #0x40000000 - ldr r3, [r5, #0x4] - orr r1, r1, r2, lsl #0x14 - orr r2, r1, r3, lsl #0x17 - ldr r8, [r5, #0x10] - ldr r1, _020B4BD8 ; =0x040004A8 - orr r2, r2, r8, lsl #0x1d - str r2, [r1, #0x0] - ldr r1, [r5, #0x8] - ldr r2, [r5, #0x0] - cmp r1, #0x4 - moveq r1, r7, lsl #0xf - moveq r7, r1, lsr #0x10 - ldr r1, _020B4BDC ; =UNK_020FF8D8 - ldr r1, [r1, r2, lsl #0x2] - sub r1, r1, #0x1 - and r1, r7, r1 - mov r1, r1, lsl #0xf - str r1, [r0, #0x0] - ldr r1, [r5, #0x0] - mov r1, r7, asr r1 - mov r1, r1, lsl #0xf - str r1, [r0, #0x4] - b _020B4AE0 -_020B4A74: - and r1, r1, #0x700000 - mov r1, r1, asr #0x14 - mov r12, r12, lsl #0x10 - add r1, r1, #0x5 - ldr r3, [r5, #0x8] - mov lr, lr, lsl #0x10 - ldr sb, _020B4BE0 ; =UNK_020FF8F8 - mov r12, r12, lsr #0x10 - ldr r8, _020B4BE4 ; =UNK_020FF928 - add r1, r2, r7, lsl r1 - mov r2, r3, lsl #0x1a - orr r3, r2, r1, lsr #0x3 - mov r7, lr, lsr #0x10 - add r2, r9, r12, lsl #0x4 - add r1, r8, r12, lsl #0x4 - ldr r2, [r2, r7, lsl #0x2] - orr r3, r3, #0x40000000 - ldr r1, [r1, r7, lsl #0x2] - orr r2, r3, r2, lsl #0x14 - ldr r3, [r5, #0x10] - orr r2, r2, r1, lsl #0x17 - ldr r1, _020B4BD8 ; =0x040004A8 - orr r2, r2, r3, lsl #0x1d - str r2, [r1, #0x0] - mov r1, #0x0 - str r1, [r0, #0x0] - str r1, [r0, #0x4] -_020B4AE0: - ldr r2, [r0, #0x0] - ldr r1, [r0, #0x10] - add r1, r2, r1, lsl #0xc - str r1, [r0, #0x8] - ldr r2, [r0, #0x4] - ldr r1, [r0, #0x14] - add r1, r2, r1, lsl #0xc - str r1, [r0, #0xc] - ldr r1, [r6, #0x0] - mov r2, r1, lsl #0x2 - mov r1, r1, lsl #0x3 - movs r3, r1, lsr #0x1f - mov r12, r2, lsr #0x1f - ldrne r2, [r0, #0x0] - ldrne r1, [r0, #0x8] - strne r1, [r0, #0x0] - strne r2, [r0, #0x8] - cmp r12, #0x0 - ldrne r2, [r0, #0x4] - ldrne r1, [r0, #0xc] - strne r1, [r0, #0x4] - ldr r1, _020B4BE8 ; =UNK_021CED0C - strne r2, [r0, #0xc] - ldr r7, [r1, #0x0] - cmp r7, #0x0 - beq _020B4B60 - str r3, [sp, #0x0] - add r1, r0, #0x4 - add r2, r0, #0x8 - add r3, r0, #0xc - str r12, [sp, #0x4] - blx r7 -_020B4B60: - ldr r0, [r6, #0x4] - ldr r1, [r6, #0x0] - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x1c - mov r3, r1, lsl #0x12 - ldr r1, [r5, #0xc] - mov r0, r0, lsl #0x10 - ldr r2, _020B4BEC ; =UNK_020FF8D0 - mov r3, r3, lsr #0x1f - cmp r1, #0x0 - mov r0, r0, lsr #0x10 - ldr r1, [r2, r3, lsl #0x2] - movne r0, r0, lsl #0x9 - bne _020B4BA4 - cmp r1, #0x4 - moveq r0, #0x0 - movne r0, r0, lsl #0x5 -_020B4BA4: - cmp r1, #0x2 - moveq r2, #0x1 - movne r2, #0x0 - add r1, r4, r0 - rsb r0, r2, #0x4 - mov r1, r1, lsr r0 - ldr r0, _020B4BF0 ; =0x040004AC - str r1, [r0, #0x0] - add sp, sp, #0xc - ldmia sp!, {r4-r9,pc} - .balign 4 -_020B4BCC: .word 0xC000C000 -_020B4BD0: .word UNK_020FF8AC -_020B4BD4: .word UNK_020FF894 -_020B4BD8: .word 0x040004A8 -_020B4BDC: .word UNK_020FF8D8 -_020B4BE0: .word UNK_020FF8F8 -_020B4BE4: .word UNK_020FF928 -_020B4BE8: .word UNK_021CED0C -_020B4BEC: .word UNK_020FF8D0 -_020B4BF0: .word 0x040004AC - - arm_func_start FUN_020B4BF4 -FUN_020B4BF4: ; 0x020B4BF4 - stmdb sp!, {r4-r6,lr} - ldr r2, _020B4CD8 ; =UNK_021CED14 - mov r6, r0 - ldr r3, [r2, #0x0] - mov r4, r1 - ldr r5, [r3, #0x0] - ldr r0, [r5, #0x10] - cmp r0, #0x0 - ldmeqia sp!, {r4-r6,pc} - mov r0, #0x1 - str r0, [r3, #0x30] - ldr r3, [r5, #0x18] - cmp r3, #0x0 - beq _020B4C38 - ldr r0, [r2, #0x0] - mov r1, r6 - blx r3 -_020B4C38: - ldr r0, _020B4CD8 ; =UNK_021CED14 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x30] - cmp r0, #0x0 - beq _020B4CB8 - mvn r0, #0x0 - cmp r4, r0 - beq _020B4C7C - mov r0, r4 - ldr r4, [r5, #0x14] - bl FUN_020B469C - mov r3, #0x1 - mvn r1, r3, lsl r4 - ldr r2, [r0, #0x20] - and r1, r2, r1 - orr r1, r1, r3, lsl r4 - str r1, [r0, #0x20] -_020B4C7C: - ldr r0, [r5, #0x14] - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020B4CB8 - ; Jump table - b _020B4C9C ; case 0 - b _020B4CAC ; case 1 - b _020B4CAC ; case 2 - b _020B4CB8 ; case 3 -_020B4C9C: - mov r0, r5 - mov r1, r6 - bl FUN_020B5090 - b _020B4CB8 -_020B4CAC: - mov r0, r5 - mov r1, r6 - bl FUN_020B53B4 -_020B4CB8: - ldr r2, [r5, #0x1c] - cmp r2, #0x0 - ldmeqia sp!, {r4-r6,pc} - ldr r0, _020B4CD8 ; =UNK_021CED14 - mov r1, r6 - ldr r0, [r0, #0x0] - blx r2 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B4CD8: .word UNK_021CED14 - - arm_func_start FUN_020B4CDC -FUN_020B4CDC: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r1, _020B4D9C ; =UNK_021CED14 - mov r5, r0 - ldr r2, [r1, #0x0] - ldr r4, [r2, #0x0] - ldr r0, [r4, #0x10] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - mov r0, #0x1 - str r0, [r2, #0x30] - ldr r2, [r4, #0x18] - cmp r2, #0x0 - beq _020B4D24 - ldr r0, [r1, #0x0] - mov r1, r5 - blx r2 -_020B4D24: - ldr r0, _020B4D9C ; =UNK_021CED14 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x30] - cmp r0, #0x0 - beq _020B4D74 - ldr r0, [r4, #0x14] - cmp r0, #0x3 - addls pc, pc, r0, lsl #0x2 - b _020B4D74 - ; Jump table - b _020B4D58 ; case 0 - b _020B4D68 ; case 1 - b _020B4D68 ; case 2 - b _020B4D74 ; case 3 -_020B4D58: - mov r0, r4 - mov r1, r5 - bl FUN_020B5090 - b _020B4D74 -_020B4D68: - mov r0, r4 - mov r1, r5 - bl FUN_020B53B4 -_020B4D74: - ldr r2, [r4, #0x1c] - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - ldr r0, _020B4D9C ; =UNK_021CED14 - mov r1, r5 - ldr r0, [r0, #0x0] - blx r2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B4D9C: .word UNK_021CED14 - - arm_func_start FUN_020B4DA0 -FUN_020B4DA0: ; 0x020B4DA0 - ldr r0, _020B4E00 ; =UNK_021CED14 - ldr r3, [r0, #0x0] - ldr r1, [r3, #0x0] - ldr r1, [r1, #0x14] - cmp r1, #0x0 - bne _020B4DD8 - ldr r2, _020B4E04 ; =0x04000440 - mov r1, #0x0 - ldr r0, _020B4E08 ; =0x04000448 - str r1, [r2, #0x0] - mov r1, #0x1 - str r1, [r0, #0x0] - str r1, [r2, #0x0] - b _020B4DF0 -_020B4DD8: - mov r2, #0x0 - str r2, [r3, #0x10] - ldr r1, [r0, #0x0] - str r2, [r1, #0x2c] - ldr r0, [r0, #0x0] - str r2, [r0, #0x28] -_020B4DF0: - ldr r0, _020B4E00 ; =UNK_021CED14 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - .balign 4 -_020B4E00: .word UNK_021CED14 -_020B4E04: .word 0x04000440 -_020B4E08: .word 0x04000448 - - arm_func_start FUN_020B4E0C -FUN_020B4E0C: ; 0x020B4E0C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r2, _020B4F28 ; =UNK_021CED14 - mov r4, r0 - str r4, [r2, #0x0] - ldr r0, [r4, #0x0] - ldr r5, [r0, #0x14] - cmp r5, #0x0 - bne _020B4ED8 - ldr lr, _020B4F2C ; =0x04000440 - mov r1, #0x0 - ldr r0, _020B4F30 ; =0x04000444 - str r1, [lr, #0x0] - str r1, [r0, #0x0] - ldr r12, [r4, #0x0] - ldr r0, _020B4F34 ; =0x04000470 - ldr r3, [r12, #0x0] - ldr r12, [r12, #0x4] - rsb r3, r3, #0x0 - str r3, [r0, #0x0] - rsb r3, r12, #0x0 - str r3, [r0, #0x0] - str r1, [r0, #0x0] - mov r0, #0x1 - str r0, [lr, #0x0] - ldr r0, [r2, #0x0] - ldr r5, [r0, #0x8] - mov r0, r5 - bl FUN_020B19FC - cmp r0, #0x0 - moveq r0, #0x0 - beq _020B4E98 - mov r0, r5 - mov r1, #0x0 - bl FUN_020B1A14 -_020B4E98: - ldr r1, _020B4F28 ; =UNK_021CED14 - str r0, [r4, #0x14] - ldr r0, [r1, #0x0] - mov r1, #0x0 - ldr r5, [r0, #0xc] - mov r0, r5 - bl FUN_020B19A8 - cmp r0, #0x0 - moveq r0, #0x0 - beq _020B4ECC - mov r0, r5 - mov r1, #0x0 - bl FUN_020B19C4 -_020B4ECC: - add sp, sp, #0x4 - str r0, [r4, #0x18] - ldmia sp!, {r4-r5,pc} -_020B4ED8: - ldr r4, [r4, #0x8] - mov r1, r5 - mov r0, r4 - bl FUN_020B19FC - cmp r0, #0x0 - moveq r1, #0x0 - beq _020B4F14 - mov r0, r4 - mov r1, r5 - bl FUN_020B1A14 - ldr r1, [r4, #0x20] - and r1, r1, #0x700000 - mov r1, r1, asr #0x14 - add r1, r1, #0x5 - mov r1, r0, lsr r1 -_020B4F14: - ldr r0, _020B4F28 ; =UNK_021CED14 - ldr r0, [r0, #0x0] - str r1, [r0, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B4F28: .word UNK_021CED14 -_020B4F2C: .word 0x04000440 -_020B4F30: .word 0x04000444 -_020B4F34: .word 0x04000470 - - arm_func_start FUN_020B4F38 -FUN_020B4F38: ; 0x020B4F38 - cmp r1, #0x0 - ldrne r1, [r0, #0x24] - orrne r1, r1, #0x1 - strne r1, [r0, #0x24] - ldreq r1, [r0, #0x24] - biceq r1, r1, #0x1 - streq r1, [r0, #0x24] - cmp r2, #0x0 - ldrne r1, [r0, #0x24] - orrne r1, r1, #0x2 - strne r1, [r0, #0x24] - ldreq r1, [r0, #0x24] - biceq r1, r1, #0x2 - streq r1, [r0, #0x24] - bx lr - - arm_func_start FUN_020B4F74 -FUN_020B4F74: - ldr r0, [r0, #0x24] - ands r0, r0, #0x2 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020B4F88 -FUN_020B4F88: - ldr r0, [r0, #0x24] - ands r0, r0, #0x1 - movne r0, #0x1 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020B4F9C -FUN_020B4F9C: ; 0x020B4F9C - str r1, [r0, #0x0] - bx lr - - arm_func_start FUN_020B4FA4 -FUN_020B4FA4: ; 0x020B4FA4 - str r1, [r0, #0x34] - bx lr - - arm_func_start FUN_020B4FAC -FUN_020B4FAC: ; 0x020B4FAC - ldr r2, _020B4FC0 ; =UNK_021CED14 - ldr r2, [r2, #0x0] - str r0, [r2, #0x2c] - str r1, [r2, #0x28] - bx lr - .balign 4 -_020B4FC0: .word UNK_021CED14 - - arm_func_start FUN_020B4FC4 -FUN_020B4FC4: ; 0x020B4FC4 - ldr r1, _020B5028 ; =UNK_021CED14 - mov r3, #0x0 - ldr r12, [r1, #0x0] - mov r1, #0x1000 - str r0, [r12, #0x2c] - ldr r2, [r0, #0x0] - str r2, [r12, #0x40] - ldr r2, [r0, #0x4] - str r2, [r12, #0x44] - str r3, [r12, #0x48] - ldr r2, [r0, #0x8] - str r2, [r12, #0x4c] - ldr r2, [r0, #0xc] - str r2, [r12, #0x50] - str r3, [r12, #0x54] - str r3, [r12, #0x58] - str r3, [r12, #0x5c] - str r1, [r12, #0x60] - ldr r1, [r0, #0x10] - str r1, [r12, #0x64] - ldr r0, [r0, #0x14] - str r0, [r12, #0x68] - ldr r0, [r12, #0x34] - str r0, [r12, #0x6c] - bx lr - .balign 4 -_020B5028: .word UNK_021CED14 - - arm_func_start FUN_020B502C -FUN_020B502C: ; 0x020B502C - str r1, [r0, #0x4] - bx lr - - arm_func_start FUN_020B5034 -FUN_020B5034: ; 0x020B5034 - str r1, [r0, #0x1c] - str r2, [r0, #0x20] - bx lr - - arm_func_start FUN_020B5040 -FUN_020B5040: ; 0x020B5040 - str r1, [r0, #0x8] - str r2, [r0, #0xc] - bx lr - - arm_func_start FUN_020B504C -FUN_020B504C: ; 0x020B504C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r1, r4 - mov r0, #0x0 - mov r2, #0x70 - bl MIi_CpuClear16 - mov r1, #0x0 - str r1, [r4, #0x0] - mov r0, #0x2 - str r0, [r4, #0x4] - str r1, [r4, #0x8] - str r1, [r4, #0xc] - str r1, [r4, #0x24] - mov r0, #0x1 - str r0, [r4, #0x30] - str r1, [r4, #0x28] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B5090 -FUN_020B5090: ; 0x020B5090 - stmdb sp!, {r4-r10,lr} - ldr r5, _020B5158 ; =UNK_021CED14 - mov r9, r1 - ldrh r1, [r9, #0x0] - ldr r2, [r5, #0x0] - mov r10, r0 - add r7, r2, #0x38 - mov r8, #0x0 - cmp r1, #0x0 - ldmlsia sp!, {r4-r10,pc} - mov r6, #0x1 - mov r4, #0x6 -_020B50C0: - mul r1, r8, r4 - ldr r0, [r5, #0x0] - str r6, [r0, #0x30] - ldr r2, [r9, #0x4] - ldrh r0, [r2, r1] - add r1, r2, r1 - strh r0, [r7, #0x0] - ldrh r0, [r1, #0x2] - strh r0, [r7, #0x2] - ldrh r0, [r1, #0x4] - strh r0, [r7, #0x4] - ldr r3, [r10, #0x20] - cmp r3, #0x0 - beq _020B5108 - ldr r0, [r5, #0x0] - mov r1, r9 - mov r2, r8 - blx r3 -_020B5108: - ldr r0, [r5, #0x0] - ldr r0, [r0, #0x30] - cmp r0, #0x0 - beq _020B5120 - mov r0, r7 - bl FUN_020B515C -_020B5120: - ldr r3, [r10, #0x24] - cmp r3, #0x0 - beq _020B513C - ldr r0, [r5, #0x0] - mov r1, r9 - mov r2, r8 - blx r3 -_020B513C: - add r0, r8, #0x1 - mov r0, r0, lsl #0x10 - ldrh r1, [r9, #0x0] - mov r8, r0, lsr #0x10 - cmp r8, r1 - blo _020B50C0 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020B5158: .word UNK_021CED14 - - arm_func_start FUN_020B515C -FUN_020B515C: ; 0x020B515C - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldr r1, _020B53A4 ; =UNK_021CED14 - mov r7, r0 - ldr r0, [r1, #0x0] - add r0, r0, #0x40 - bl G3_LoadMtx43 - ldr r0, _020B53A4 ; =UNK_021CED14 - ldr r0, [r0, #0x0] - ldr r1, [r0, #0x24] - cmp r1, #0x0 - beq _020B533C - ldr r2, [r7, #0x0] - ldr r1, _020B53A8 ; =0xC000C000 - and r4, r2, r1 - bl FUN_020B4F88 - cmp r0, #0x0 - beq _020B51F4 - ldr r0, [r7, #0x0] - and r2, r4, #0xc000 - mov r0, r0, lsl #0x7 - mov r3, r0, lsr #0x17 - and r1, r4, #0xc0000000 - mov r1, r1, lsr #0x1e - ldr r0, _020B53AC ; =UNK_020FF8AC - mov r2, r2, asr #0xe - mov r1, r1, lsl #0x1 - add r0, r0, r2, lsl #0x3 - cmp r3, #0xff - ldrh r1, [r1, r0] - orrgt r0, r3, #0xff00 - movgt r0, r0, lsl #0x10 - movgt r3, r0, asr #0x10 - add r0, r3, r1 - rsb r0, r0, #0x0 - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 - b _020B5218 -_020B51F4: - ldr r0, [r7, #0x0] - mov r0, r0, lsl #0x7 - mov r0, r0, lsr #0x17 - cmp r0, #0xff - orrgt r0, r0, #0xff00 - movgt r0, r0, lsl #0x10 - movgt r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r1, r0, lsr #0x10 -_020B5218: - ldr r0, _020B53A4 ; =UNK_021CED14 - mov r1, r1, lsl #0x10 - ldr r0, [r0, #0x0] - mov r6, r1, asr #0x10 - bl FUN_020B4F74 - cmp r0, #0x0 - beq _020B527C - and r1, r4, #0xc000 - and r0, r4, #0xc0000000 - ldrb r4, [r7, #0x0] - ldr r2, _020B53B0 ; =UNK_020FF894 - mov r0, r0, lsr #0x1e - mov r3, r1, asr #0xe - mov r1, r0, lsl #0x1 - add r0, r2, r3, lsl #0x3 - cmp r4, #0x7f - ldrh r1, [r1, r0] - orrgt r0, r4, #0xff00 - movgt r0, r0, lsl #0x10 - movgt r4, r0, asr #0x10 - add r0, r4, r1 - rsb r0, r0, #0x0 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - b _020B5298 -_020B527C: - ldrb r0, [r7, #0x0] - cmp r0, #0x7f - orrgt r0, r0, #0xff00 - movgt r0, r0, lsl #0x10 - movgt r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 -_020B5298: - ldr r0, _020B53A4 ; =UNK_021CED14 - ldr r1, [r7, #0x0] - ldr r0, [r0, #0x0] - mov r5, r1, lsl #0x3 - bl FUN_020B4F88 - ldr r2, [r7, #0x0] - ldr r1, _020B53A4 ; =UNK_021CED14 - eor r5, r0, r5, lsr #0x1f - ldr r0, [r1, #0x0] - mov r8, r2, lsl #0x2 - bl FUN_020B4F74 - ldr r2, [r7, #0x0] - eor r1, r0, r8, lsr #0x1f - bic r0, r2, #0x10000000 - str r0, [r7, #0x0] - ldr r2, [r7, #0x0] - ldr r3, _020B53A4 ; =UNK_021CED14 - orr r2, r2, r5, lsl #0x1c - str r2, [r7, #0x0] - ldr r2, [r7, #0x0] - mov r0, r6 - bic r2, r2, #0x20000000 - str r2, [r7, #0x0] - ldr r5, [r7, #0x0] - mov r2, r4, lsl #0x10 - orr r1, r5, r1, lsl #0x1d - str r1, [r7, #0x0] - ldr r5, [r3, #0x0] - mov r1, r2, asr #0x10 - ldr r4, [r5, #0x8] - mov r3, r7 - add r2, r4, #0xc - str r2, [sp, #0x0] - ldr r4, [r5, #0x14] - mvn r2, #0x0 - str r4, [sp, #0x4] - ldr r4, [r5, #0x18] - str r4, [sp, #0x8] - bl FUN_020B46B4 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} -_020B533C: - ldr r2, _020B53A4 ; =UNK_021CED14 - ldr r0, [r7, #0x0] - ldr r5, [r2, #0x0] - mov r0, r0, lsl #0x7 - ldr r4, [r5, #0x8] - mov r0, r0, lsr #0x17 - cmp r0, #0xff - orrgt r0, r0, #0xff00 - movgt r0, r0, lsl #0x10 - ldrb r1, [r7, #0x0] - add r4, r4, #0xc - movgt r0, r0, asr #0x10 - str r4, [sp, #0x0] - ldr r4, [r5, #0x14] - cmp r1, #0x7f - orrgt r1, r1, #0xff00 - movgt r1, r1, lsl #0x10 - str r4, [sp, #0x4] - ldr r4, [r5, #0x18] - movgt r1, r1, asr #0x10 - mov r3, r7 - mvn r2, #0x0 - str r4, [sp, #0x8] - bl FUN_020B46B4 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020B53A4: .word UNK_021CED14 -_020B53A8: .word 0xC000C000 -_020B53AC: .word UNK_020FF8AC -_020B53B0: .word UNK_020FF894 - - arm_func_start FUN_020B53B4 -FUN_020B53B4: ; 0x020B53B4 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x44 - ldr r2, _020B57B0 ; =UNK_021CED14 - mov r10, r0 - ldr r0, [r2, #0x0] - mov r11, r1 - ldr r9, [r0, #0x2c] - ldr r1, _020B57B0 ; =UNK_021CED14 - cmp r9, #0x0 - ldreq sb, _020B57B4 ; =UNK_020FF958 - ldr r3, [r1, #0x0] - ldr r4, [r9, #0x10] - str r4, [sp, #0x18] - ldr r2, [r9, #0x14] - str r2, [sp, #0x1c] - ldr r1, [r10, #0x0] - sub r1, r4, r1 - str r1, [sp, #0x18] - ldr r1, [r10, #0x4] - sub r1, r2, r1 - str r1, [sp, #0x1c] - ldr r2, [r3, #0x24] - ldr r1, [r3, #0x10] - cmp r2, #0x0 - str r1, [sp, #0x4] - bne _020B5430 - ldr r1, [r3, #0x28] - cmp r1, #0x0 - movne r1, #0x1 - strne r1, [sp, #0x0] - bne _020B5438 -_020B5430: - mov r1, #0x0 - str r1, [sp, #0x0] -_020B5438: - ldrh r1, [r11, #0x0] - add r7, r0, #0x38 - mov r8, #0x0 - cmp r1, #0x0 - addls sp, sp, #0x44 - ldmlsia sp!, {r4-r11,pc} - mov r0, #0x1 - ldr r4, _020B57B0 ; =UNK_021CED14 - str r8, [sp, #0x14] - str r0, [sp, #0xc] -_020B5460: - ldr r2, [r4, #0x0] - ldr r0, [sp, #0xc] - mov r1, #0x6 - str r0, [r2, #0x30] - mul r0, r8, r1 - ldr r1, [r11, #0x4] - add r2, r1, r0 - ldrh r0, [r1, r0] - strh r0, [r7, #0x0] - ldrh r0, [r2, #0x2] - strh r0, [r7, #0x2] - ldrh r0, [r2, #0x4] - strh r0, [r7, #0x4] - ldr r3, [r10, #0x20] - cmp r3, #0x0 - beq _020B54B0 - ldr r0, [r4, #0x0] - mov r1, r11 - mov r2, r8 - blx r3 -_020B54B0: - ldr r0, [r4, #0x0] - ldr r0, [r0, #0x30] - cmp r0, #0x0 - beq _020B5790 - ldr r0, [sp, #0x0] - ldr r1, [r7, #0x4] - cmp r0, #0x0 - mov r0, #0x400 - rsb r0, r0, #0x0 - and r2, r1, r0 - ldr r0, [sp, #0x4] - mov r1, r1, lsl #0x16 - add r1, r0, r1, lsr #0x16 - ldr r0, _020B57B8 ; =0x000003FF - and r0, r1, r0 - orr r0, r2, r0 - str r0, [r7, #0x4] - beq _020B5600 - ldr r0, [r10, #0x14] - ldr lr, [r4, #0x0] - sub r1, r0, #0x1 - ldr r0, [r7, #0x0] - ldr r6, [lr, #0x28] - mov r2, r0, lsl #0x2 - mov r2, r2, lsr #0x1f - mov r2, r2, lsl #0x1 - mov r0, r0, lsl #0x3 - orr r5, r2, r0, lsr #0x1f - add r0, r6, r5, lsl #0x2 - add r0, r0, r1, lsl #0x1 - ldrh r1, [r0, #0x10] - ldr r0, _020B57BC ; =0x0000FFFF - str r1, [sp, #0x8] - cmp r1, r0 - bne _020B55CC - cmp r5, #0x0 - bne _020B5558 - ldr r1, [lr, #0x20] - mov r0, r6 - blx r1 - str r0, [sp, #0x8] - b _020B55B4 -_020B5558: - ands r0, r5, #0x1 - add r12, sp, #0x30 - ldmia r6, {r0-r3} - stmia r12, {r0-r3} - beq _020B5584 - ldr r1, [sp, #0x30] - ldr r0, [sp, #0x34] - rsb r1, r1, #0x0 - str r1, [sp, #0x30] - rsb r0, r0, #0x0 - str r0, [sp, #0x34] -_020B5584: - ands r0, r5, #0x2 - beq _020B55A4 - ldr r1, [sp, #0x38] - ldr r0, [sp, #0x3c] - rsb r1, r1, #0x0 - str r1, [sp, #0x38] - rsb r0, r0, #0x0 - str r0, [sp, #0x3c] -_020B55A4: - ldr r1, [lr, #0x20] - add r0, sp, #0x30 - blx r1 - str r0, [sp, #0x8] -_020B55B4: - ldr r1, [r10, #0x14] - add r0, r6, r5, lsl #0x2 - sub r1, r1, #0x1 - add r1, r0, r1, lsl #0x1 - ldr r0, [sp, #0x8] - strh r0, [r1, #0x10] -_020B55CC: - ldr r1, [r9, #0x0] - add r0, sp, #0x20 - str r1, [sp, #0x20] - ldr r2, [r9, #0x4] - mov r1, r7 - str r2, [sp, #0x24] - ldr r3, [r9, #0x8] - add r2, sp, #0x18 - str r3, [sp, #0x28] - ldr r3, [r9, #0xc] - str r3, [sp, #0x2c] - bl FUN_020B57D8 - b _020B5750 -_020B5600: - ldr r0, _020B57C0 ; =0x0000FFFE - str r0, [sp, #0x8] - ldr r0, [r4, #0x0] - ldr r1, [r0, #0x24] - cmp r1, #0x0 - beq _020B5714 - ldr r2, [r7, #0x0] - ldr r1, _020B57C4 ; =0xC000C000 - mov r6, r2, lsl #0x3 - and r5, r2, r1 - bl FUN_020B4F88 - ldr r1, [r7, #0x0] - eor r6, r0, r6, lsr #0x1f - mov r1, r1, lsl #0x2 - ldr r0, [r4, #0x0] - str r1, [sp, #0x10] - bl FUN_020B4F74 - ldr r1, [sp, #0x10] - eor r0, r0, r1, lsr #0x1f - ldr r1, [r7, #0x0] - bic r1, r1, #0x10000000 - str r1, [r7, #0x0] - ldr r1, [r7, #0x0] - orr r1, r1, r6, lsl #0x1c - str r1, [r7, #0x0] - ldr r1, [r7, #0x0] - bic r1, r1, #0x20000000 - str r1, [r7, #0x0] - ldr r1, [r7, #0x0] - orr r0, r1, r0, lsl #0x1d - str r0, [r7, #0x0] - ldr r0, [r4, #0x0] - bl FUN_020B4F88 - cmp r0, #0x0 - beq _020B56D4 - and r1, r5, #0xc000 - mov r2, r1, asr #0xe - ldr r1, _020B57C8 ; =UNK_020FF8AC - and r3, r5, #0xc0000000 - mov r3, r3, lsr #0x1e - add r2, r1, r2, lsl #0x3 - mov r3, r3, lsl #0x1 - ldr r0, [r7, #0x0] - ldr r1, _020B57CC ; =0xFE00FFFF - ldrh r2, [r3, r2] - and r1, r0, r1 - mov r0, r0, lsl #0x7 - add r0, r2, r0, lsr #0x17 - rsb r2, r0, #0x0 - ldr r0, _020B57D0 ; =0x000001FF - and r0, r2, r0 - orr r0, r1, r0, lsl #0x10 - str r0, [r7, #0x0] -_020B56D4: - ldr r0, [r4, #0x0] - bl FUN_020B4F74 - cmp r0, #0x0 - beq _020B5714 - and r1, r5, #0xc000 - mov r3, r1, asr #0xe - and r1, r5, #0xc0000000 - mov r1, r1, lsr #0x1e - mov r2, r1, lsl #0x1 - ldr r1, _020B57D4 ; =UNK_020FF894 - ldrb r0, [r7, #0x0] - add r1, r1, r3, lsl #0x3 - ldrh r1, [r2, r1] - add r0, r0, r1 - rsb r0, r0, #0x0 - strb r0, [r7, #0x0] -_020B5714: - ldr r2, [r7, #0x0] - ldr r0, _020B57CC ; =0xFE00FFFF - ldr r1, [sp, #0x18] - and r0, r2, r0 - mov r2, r2, lsl #0x7 - mov r2, r2, lsr #0x17 - add r2, r2, r1, asr #0xc - ldr r1, _020B57D0 ; =0x000001FF - and r1, r2, r1 - orr r0, r0, r1, lsl #0x10 - str r0, [r7, #0x0] - ldrb r1, [r7, #0x0] - ldr r0, [sp, #0x1c] - add r0, r1, r0, asr #0xc - strb r0, [r7, #0x0] -_020B5750: - ldr r3, [r4, #0x0] - ldr r1, [sp, #0x8] - ldr r2, [sp, #0x14] - ldr r3, [r3, #0x1c] - mov r0, r7 - blx r3 - cmp r0, #0x1 - addne sp, sp, #0x44 - ldmneia sp!, {r4-r11,pc} - ldr r3, [r10, #0x24] - cmp r3, #0x0 - beq _020B5790 - ldr r0, [r4, #0x0] - mov r1, r11 - mov r2, r8 - blx r3 -_020B5790: - add r0, r8, #0x1 - mov r0, r0, lsl #0x10 - mov r8, r0, lsr #0x10 - ldrh r0, [r11, #0x0] - cmp r8, r0 - blo _020B5460 - add sp, sp, #0x44 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B57B0: .word UNK_021CED14 -_020B57B4: .word UNK_020FF958 -_020B57B8: .word 0x000003FF -_020B57BC: .word 0x0000FFFF -_020B57C0: .word 0x0000FFFE -_020B57C4: .word 0xC000C000 -_020B57C8: .word UNK_020FF8AC -_020B57CC: .word 0xFE00FFFF -_020B57D0: .word 0x000001FF -_020B57D4: .word UNK_020FF894 - - arm_func_start FUN_020B57D8 -FUN_020B57D8: ; 0x020B57D8 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldr r4, [r1, #0x0] - ldr r3, _020B5A9C ; =0x01FF0000 - and r3, r4, r3 - mov r3, r3, lsr #0x10 - mov r3, r3, lsl #0x10 - mov r3, r3, asr #0x10 - cmp r3, #0xff - orrgt r3, r3, #0xff00 - movgt r3, r3, lsl #0x10 - movgt r3, r3, asr #0x10 - mov r3, r3, lsl #0xc - str r3, [sp, #0x0] - ldr r3, [r1, #0x0] - and r3, r3, #0xff - mov r3, r3, lsl #0x10 - mov r3, r3, asr #0x10 - cmp r3, #0x7f - orrgt r3, r3, #0xff00 - movgt r3, r3, lsl #0x10 - movgt r3, r3, asr #0x10 - mov r3, r3, lsl #0xc - str r3, [sp, #0x4] - ldr r5, [r1, #0x0] - and r4, r5, #0x300 - cmp r4, #0x100 - beq _020B5858 - cmp r4, #0x300 - beq _020B5858 - and r3, r5, #0x30000000 - orr r4, r4, r3 -_020B5858: - cmp r4, #0x300 - bne _020B58AC - ldr r3, _020B5AA0 ; =0xC000C000 - ldr r4, _020B5AA4 ; =UNK_020FF8AC - and r3, r5, r3 - and r5, r3, #0xc0000000 - and r3, r3, #0xc000 - mov r6, r5, lsr #0x1e - mov r5, r3, asr #0xe - ldr r3, _020B5AA8 ; =UNK_020FF894 - mov r6, r6, lsl #0x1 - add r4, r4, r5, lsl #0x3 - add r3, r3, r5, lsl #0x3 - ldrh r5, [r6, r4] - ldr r7, [sp, #0x0] - ldrh r3, [r6, r3] - ldr r4, [sp, #0x4] - add r5, r7, r5, lsl #0xb - add r3, r4, r3, lsl #0xb - str r5, [sp, #0x0] - str r3, [sp, #0x4] -_020B58AC: - ldr r5, [r0, #0x8] - ldr r4, [sp, #0x4] - add r3, sp, #0x0 - smull r8, r7, r5, r4 - cmp r3, r3 - ldr r6, [r0, #0x0] - mov r4, #0x1000 - addeq r3, sp, #0x8 - adds r8, r8, r4 - ldr r5, [sp, #0x0] - adc r7, r7, #0x0 - smlal r8, r7, r6, r5 - mov r5, r8, lsr #0xc - orr r5, r5, r7, lsl #0x14 - str r5, [r3, #0x0] - ldr r7, [r0, #0xc] - ldr r6, [sp, #0x4] - ldr r5, [r0, #0x4] - smull r8, r6, r7, r6 - adds r7, r8, r4 - ldr r4, [sp, #0x0] - adc r6, r6, #0x0 - smlal r7, r6, r5, r4 - mov r5, r7, lsr #0xc - add r4, sp, #0x8 - orr r5, r5, r6, lsl #0x14 - str r5, [r3, #0x4] - cmp r3, r4 - ldreq r3, [sp, #0xc] - ldreq r4, [sp, #0x8] - streq r3, [sp, #0x4] - ldr r3, _020B5AAC ; =UNK_021CED14 - streq r4, [sp, #0x0] - ldr r3, [r3, #0x0] - ldr r3, [r3, #0x4] - cmp r3, #0x0 - beq _020B597C - cmp r3, #0x2 - moveq r5, #0x300 - movne r5, #0x100 - cmp r5, #0x100 - ldreq r4, [r1, #0x0] - ldreq r3, _020B5AB0 ; =0xC1FFFCFF - andeq r3, r4, r3 - orreq r3, r3, r5 - streq r3, [r1, #0x0] - beq _020B597C - ldr r4, [r1, #0x0] - ldr r3, _020B5AB0 ; =0xC1FFFCFF - and r3, r4, r3 - orr r3, r3, r5 - str r3, [r1, #0x0] -_020B597C: - ldr r6, [r1, #0x0] - and r5, r6, #0x300 - cmp r5, #0x100 - beq _020B599C - cmp r5, #0x300 - beq _020B599C - and r3, r6, #0x30000000 - orr r5, r5, r3 -_020B599C: - ldr r3, _020B5AA0 ; =0xC000C000 - ldr r4, _020B5AA4 ; =UNK_020FF8AC - and r3, r6, r3 - and r6, r3, #0xc0000000 - and r3, r3, #0xc000 - mov lr, r3, asr #0xe - mov r6, r6, lsr #0x1e - mov r3, r6, lsl #0x1 - add r4, r4, lr, lsl #0x3 - ldrh r4, [r3, r4] - ldr r6, [r0, #0x0] - ldr r8, _020B5AA8 ; =UNK_020FF894 - mov r12, r4, asr #0x1 - mov r4, r12, lsl #0xc - rsb r7, r4, #0x0 - mla r7, r6, r12, r7 - add lr, r8, lr, lsl #0x3 - ldrh r3, [r3, lr] - ldr r6, [r0, #0x8] - ldr lr, [sp, #0x0] - mov r3, r3, asr #0x1 - mla r7, r6, r3, r7 - add r6, lr, r7 - str r6, [sp, #0x0] - mov lr, r3, lsl #0xc - ldr r6, [r0, #0x4] - rsb r7, lr, #0x0 - mla r7, r6, r12, r7 - ldr r0, [r0, #0xc] - ldr r6, [sp, #0x4] - mla r3, r0, r3, r7 - add r0, r6, r3 - str r0, [sp, #0x4] - cmp r5, #0x300 - moveq r0, #0x1 - movne r0, #0x0 - cmp r0, #0x0 - beq _020B5A4C - ldr r3, [sp, #0x0] - ldr r0, [sp, #0x4] - sub r3, r3, r4 - sub r0, r0, lr - str r3, [sp, #0x0] - str r0, [sp, #0x4] -_020B5A4C: - ldr r4, [sp, #0x0] - ldr r0, [r2, #0x0] - ldr r3, [sp, #0x4] - add r5, r4, r0 - str r5, [sp, #0x0] - ldr r2, [r2, #0x4] - ldr r0, _020B5AB4 ; =0x000001FF - add r2, r3, r2 - str r2, [sp, #0x4] - mov r3, r2, asr #0xc - ldr r4, [r1, #0x0] - ldr r2, _020B5AB8 ; =0xFE00FF00 - and r3, r3, #0xff - and r2, r4, r2 - and r4, r0, r5, asr #0xc - orr r0, r2, r3 - orr r0, r0, r4, lsl #0x10 - str r0, [r1, #0x0] - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020B5A9C: .word 0x01FF0000 -_020B5AA0: .word 0xC000C000 -_020B5AA4: .word UNK_020FF8AC -_020B5AA8: .word UNK_020FF894 -_020B5AAC: .word UNK_021CED14 -_020B5AB0: .word 0xC1FFFCFF -_020B5AB4: .word 0x000001FF -_020B5AB8: .word 0xFE00FF00 - - arm_func_start FUN_020B5ABC -FUN_020B5ABC: ; 0x020B5ABC - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0xc - add r5, sp, #0x0 - mov r4, #0x0 - str r4, [r5, #0x0] - str r4, [r5, #0x4] - mov r8, r2 - ldr r2, [sp, #0x28] - mov r5, r0 - mov r9, r1 - mov r4, r3 - cmp r2, #0x0 - mov r7, #0x1 - beq _020B5B24 - add r6, sp, #0x28 -_020B5AF8: - mov r0, r9 - mov r1, r8 - mov r3, r6 - bl FUN_020B5BC8 - ldr r1, [sp, #0x0] - ldr r2, [sp, #0x28] - cmp r0, r1 - strgt r0, [sp, #0x0] - add r7, r7, #0x1 - cmp r2, #0x0 - bne _020B5AF8 -_020B5B24: - ldr r0, [r9, #0x0] - sub r2, r7, #0x1 - ldrsb r1, [r0, #0x1] - ldr r0, [sp, #0x0] - add r1, r4, r1 - mul r1, r2, r1 - sub r1, r1, r4 - str r1, [sp, #0x4] - str r0, [r5, #0x0] - str r1, [r5, #0x4] - add sp, sp, #0xc - ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_020B5B54 -FUN_020B5B54: ; 0x020B5B54 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - str r2, [sp, #0x0] - add r3, sp, #0x4 - mov r2, #0x0 - str r2, [r3, #0x0] - mov r8, r0 - str r2, [r3, #0x4] - ldr r7, [r8, #0x4] - add r0, sp, #0x0 - mov r5, r1 - mov r4, #0x1 - blx r7 - cmp r0, #0x0 - beq _020B5BAC - add r6, sp, #0x0 -_020B5B94: - cmp r0, #0xa - mov r0, r6 - addeq r4, r4, #0x1 - blx r7 - cmp r0, #0x0 - bne _020B5B94 -_020B5BAC: - ldr r0, [r8, #0x0] - ldrsb r0, [r0, #0x1] - add r0, r5, r0 - mul r0, r4, r0 - sub r0, r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B5BC8 -FUN_020B5BC8: - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x8 - mov r8, r0 - str r2, [sp, #0x0] - ldr r4, [r8, #0x4] - add r0, sp, #0x0 - mov r7, r1 - mov r6, r3 - mov r5, #0x0 - blx r4 - movs r1, r0 - beq _020B5C58 - ldr sb, _020B5C84 ; =0x0000FFFF - add r10, sp, #0x0 -_020B5C00: - cmp r1, #0xa - beq _020B5C58 - mov r0, r8 - bl FUN_020B5CE4 - mov r1, r0 - cmp r1, r9 - ldreq r0, [r8, #0x0] - ldreqh r1, [r0, #0x2] - mov r0, r8 - bl FUN_020B5C88 - ldrh r1, [r8, #0x8] - cmp r1, #0x0 - ldrnesb r1, [r0, #0x0] - ldrneb r0, [r0, #0x1] - addne r0, r1, r0 - ldreqsb r0, [r0, #0x2] - add r1, r7, r0 - mov r0, r10 - add r5, r5, r1 - blx r4 - movs r1, r0 - bne _020B5C00 -_020B5C58: - cmp r6, #0x0 - beq _020B5C70 - cmp r1, #0xa - ldreq r0, [sp, #0x0] - movne r0, #0x0 - str r0, [r6, #0x0] -_020B5C70: - cmp r5, #0x0 - subgt r5, r5, r7 - mov r0, r5 - add sp, sp, #0x8 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020B5C84: .word 0x0000FFFF - - arm_func_start FUN_020B5C88 -FUN_020B5C88: ; 0x020B5C88 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x0] - ldr lr, [r3, #0xc] - cmp lr, #0x0 - beq _020B5CD8 -_020B5CA0: - ldrh r12, [lr, #0x0] - cmp r12, r1 - bhi _020B5CCC - ldrh r2, [lr, #0x2] - cmp r1, r2 - ldrlsh r2, [r0, #0xa] - addls r3, lr, #0x8 - subls r0, r1, r12 - mlals r0, r2, r0, r3 - addls sp, sp, #0x4 - ldmlsia sp!, {pc} -_020B5CCC: - ldr lr, [lr, #0x4] - cmp lr, #0x0 - bne _020B5CA0 -_020B5CD8: - add r0, r3, #0x4 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020B5CE4 -FUN_020B5CE4: ; 0x020B5CE4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x10] - cmp r0, #0x0 - beq _020B5D2C -_020B5CFC: - ldrh r2, [r0, #0x0] - cmp r2, r1 - bhi _020B5D20 - ldrh r2, [r0, #0x2] - cmp r1, r2 - bhi _020B5D20 - bl FUN_020B5D7C - add sp, sp, #0x4 - ldmia sp!, {pc} -_020B5D20: - ldr r0, [r0, #0x8] - cmp r0, #0x0 - bne _020B5CFC -_020B5D2C: - ldr r0, _020B5D38 ; =0x0000FFFF - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B5D38: .word 0x0000FFFF - - arm_func_start FUN_020B5D3C -FUN_020B5D3C: ; 0x020B5D3C - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, r1 - mov r1, r4 - bl FUN_020B7558 - sub r0, r0, #0x1 - strh r0, [r4, #0x8] - ldrh r0, [r4, #0x8] - cmp r0, #0x0 - movne r1, #0x2 - moveq r1, #0x3 - ldr r0, _020B5D78 ; =FUN_020B7718 - strh r1, [r4, #0xa] - str r0, [r4, #0x4] - ldmia sp!, {r4,pc} - .balign 4 -_020B5D78: .word FUN_020B7718 - - arm_func_start FUN_020B5D7C -FUN_020B5D7C: ; 0x020B5D7C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldrh r3, [r0, #0x4] - ldr r2, _020B5E4C ; =0x0000FFFF - cmp r3, #0x0 - beq _020B5DA8 - cmp r3, #0x1 - beq _020B5DC4 - cmp r3, #0x2 - beq _020B5DD8 - b _020B5E40 -_020B5DA8: - ldrh r2, [r0, #0x0] - ldrh r3, [r0, #0xc] - sub r0, r1, r2 - add r0, r3, r0 - mov r0, r0, lsl #0x10 - mov r2, r0, lsr #0x10 - b _020B5E40 -_020B5DC4: - ldrh r2, [r0, #0x0] - sub r1, r1, r2 - add r0, r0, r1, lsl #0x1 - ldrh r2, [r0, #0xc] - b _020B5E40 -_020B5DD8: - ldrh r3, [r0, #0xc] - add r0, r0, #0xc - add r0, r0, #0x2 - sub r3, r3, #0x1 - add lr, r0, r3, lsl #0x2 - cmp r0, lr - bhi _020B5E40 -_020B5DF4: - sub r12, lr, r0 - mov r3, r12, asr #0x1 - add r3, r12, r3, lsr #0x1e - mov r3, r3, asr #0x2 - add r3, r3, r3, lsr #0x1f - mov r12, r3, asr #0x1 - mov r3, r12, lsl #0x2 - ldrh r3, [r0, r3] - add r12, r0, r12, lsl #0x2 - cmp r3, r1 - addcc r0, r12, #0x4 - blo _020B5E38 - cmp r1, r3 - subcc lr, r12, #0x4 - blo _020B5E38 - ldrh r2, [r12, #0x2] - b _020B5E40 -_020B5E38: - cmp r0, lr - bls _020B5DF4 -_020B5E40: - mov r0, r2 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B5E4C: .word 0x0000FFFF - - arm_func_start FUN_020B5E50 -FUN_020B5E50: ; 0x020B5E50 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x3c - mov r7, r0 - mov r0, r1 - cmp r0, #0x8 - ldr r0, [sp, #0x60] - str r1, [sp, #0x10] - str r0, [sp, #0x60] - ldr r0, [sp, #0x6c] - str r2, [sp, #0x14] - str r0, [sp, #0x6c] - ldrlt r0, [sp, #0x10] - mov r11, r3 - ldr r6, [sp, #0x64] - ldr r5, [sp, #0x68] - movge r2, #0x3 - clzlt r0, r0 - rsblt r2, r0, #0x1f - ldr r0, [sp, #0x14] - cmp r0, #0x8 - ldrlt r0, [sp, #0x14] - movge r1, #0x3 - clzlt r0, r0 - rsblt r1, r0, #0x1f - ldr r0, _020B6170 ; =UNK_020FF970 - mvn r3, #0x0 - add r1, r0, r1, lsl #0x3 - add r0, r1, r2, lsl #0x1 - ldrb r4, [r1, r2, lsl #0x1] - ldrb r1, [r0, #0x1] - ldr r2, [sp, #0x14] - cmp r6, #0x0 - str r1, [sp, #0x18] - ldr r1, [sp, #0x10] - and r1, r1, r3, lsl r4 - str r1, [sp, #0x1c] - ldr r1, [sp, #0x18] - and r1, r2, r3, lsl r1 - str r1, [sp, #0x20] - moveq r1, #0x1 - streq r1, [sp, #0x24] - movne r1, #0x2 - strne r1, [sp, #0x24] - mov r1, #0x0 - str r1, [sp, #0x28] - bl FUN_020B704C - ldr r1, [sp, #0x10] - ldr r2, [sp, #0x14] - mov r10, r1, asr r4 - ldr r1, [sp, #0x18] - mov r1, r2, asr r1 - str r1, [sp, #0x2c] - ldr r1, [sp, #0x24] - mov r2, r1, lsl r4 - ldr r1, [sp, #0x18] - mov r2, r2, lsl r1 - ldr r1, [sp, #0x6c] - mov r9, r2, asr r1 - mov r1, #0x0 - str r1, [sp, #0x30] - str r1, [sp, #0x34] - b _020B5FE8 -_020B5F48: - ldr r2, [sp, #0x30] - ldr r1, [sp, #0x18] - ldr r8, [sp, #0x34] - mov r2, r2, lsl r1 - ldr r1, [sp, #0x60] - add lr, r1, r2, lsl #0x3 - b _020B5FD4 -_020B5F64: - mov r1, r8, lsl r4 - add r2, r11, r1, lsl #0x3 - ldr r1, _020B6174 ; =0x000001FF - ldr r3, [r7, #0x0] - and r12, r2, r1 - ldr r1, _020B6178 ; =0xFE00FF00 - and r2, lr, #0xff - and r1, r3, r1 - orr r1, r1, r2 - orr r1, r1, r12, lsl #0x10 - str r1, [r7, #0x0] - ldr r3, [r7, #0x0] - ldr r1, _020B617C ; =0x3FFF3FFF - mov r2, #0x400 - and r1, r3, r1 - orr r1, r1, r0 - str r1, [r7, #0x0] - rsb r1, r2, #0x0 - ldrh r2, [r7, #0x4] - add r8, r8, #0x1 - and r1, r2, r1 - orr r1, r1, r5 - strh r1, [r7, #0x4] - ldr r1, [r7, #0x0] - add r5, r5, r9 - bic r1, r1, #0x2000 - orr r1, r1, r6, lsl #0xd - str r1, [r7], #0x8 -_020B5FD4: - cmp r8, r10 - blt _020B5F64 - ldr r1, [sp, #0x30] - add r1, r1, #0x1 - str r1, [sp, #0x30] -_020B5FE8: - ldr r2, [sp, #0x30] - ldr r1, [sp, #0x2c] - cmp r2, r1 - blt _020B5F48 - ldr r0, [sp, #0x28] - mla r0, r10, r1, r0 - str r0, [sp, #0x28] - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x10] - cmp r1, r0 - bhs _020B6078 - ldr r0, [sp, #0x60] - ldr r1, [sp, #0x10] - str r0, [sp, #0x0] - ldr r0, [sp, #0x1c] - str r6, [sp, #0x4] - sub r4, r1, r0 - ldr r1, [sp, #0x6c] - str r5, [sp, #0x8] - str r1, [sp, #0xc] - ldr r1, [sp, #0x1c] - ldr r2, [sp, #0x20] - add r3, r11, r1, lsl #0x3 - mov r0, r7 - mov r1, r4 - bl FUN_020B5E50 - ldr r1, [sp, #0x24] - add r7, r7, r0, lsl #0x3 - mul r2, r1, r4 - ldr r1, [sp, #0x20] - mul r2, r1, r2 - ldr r1, [sp, #0x6c] - add r5, r5, r2, lsr r1 - ldr r1, [sp, #0x28] - add r0, r1, r0 - str r0, [sp, #0x28] -_020B6078: - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x14] - cmp r1, r0 - bhs _020B60F0 - ldr r1, [sp, #0x60] - ldr r0, [sp, #0x20] - mov r3, r11 - add r0, r1, r0, lsl #0x3 - str r0, [sp, #0x0] - str r6, [sp, #0x4] - ldr r1, [sp, #0x14] - ldr r0, [sp, #0x20] - str r5, [sp, #0x8] - sub r4, r1, r0 - ldr r1, [sp, #0x6c] - mov r0, r7 - str r1, [sp, #0xc] - ldr r1, [sp, #0x1c] - mov r2, r4 - bl FUN_020B5E50 - ldr r2, [sp, #0x24] - ldr r1, [sp, #0x1c] - add r7, r7, r0, lsl #0x3 - mul r1, r2, r1 - mul r2, r4, r1 - ldr r1, [sp, #0x6c] - add r5, r5, r2, lsr r1 - ldr r1, [sp, #0x28] - add r0, r1, r0 - str r0, [sp, #0x28] -_020B60F0: - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x10] - cmp r1, r0 - bhs _020B6164 - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x14] - cmp r1, r0 - bhs _020B6164 - ldr r1, [sp, #0x60] - ldr r0, [sp, #0x20] - ldr r2, [sp, #0x10] - add r0, r1, r0, lsl #0x3 - ldr r1, [sp, #0x1c] - ldr r3, [sp, #0x14] - str r0, [sp, #0x0] - sub r1, r2, r1 - ldr r2, [sp, #0x20] - str r6, [sp, #0x4] - sub r2, r3, r2 - ldr r3, [sp, #0x1c] - ldr r4, [sp, #0x6c] - str r5, [sp, #0x8] - mov r0, r7 - add r3, r11, r3, lsl #0x3 - str r4, [sp, #0xc] - bl FUN_020B5E50 - ldr r1, [sp, #0x28] - add r0, r1, r0 - str r0, [sp, #0x28] -_020B6164: - ldr r0, [sp, #0x28] - add sp, sp, #0x3c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B6170: .word UNK_020FF970 -_020B6174: .word 0x000001FF -_020B6178: .word 0xFE00FF00 -_020B617C: .word 0x3FFF3FFF - - arm_func_start FUN_020B6180 -FUN_020B6180: ; 0x020B6180 - stmdb sp!, {r4-r6,lr} - mov r3, r0, lsr #0x3 - mov r6, r1, lsr #0x3 - mul r12, r3, r6 - and r2, r0, #0x4 - and lr, r0, #0x2 - and r0, r0, #0x1 - add r4, r0, lr, lsr #0x1 - mov r5, r2, lsr #0x2 - and r0, r1, #0x4 - add lr, r12, #0x0 - add r12, r5, r4, lsl #0x1 - mla r12, r6, r12, lr - and lr, r1, #0x2 - and r1, r1, #0x1 - add lr, r1, lr, lsr #0x1 - mov r1, r0, lsr #0x2 - add r1, r1, lr, lsl #0x1 - mla r12, r3, r1, r12 - add r1, r4, r2, lsr #0x2 - add r0, lr, r0, lsr #0x2 - mla r0, r1, r0, r12 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020B61DC -FUN_020B61DC: ; 0x020B61DC - stmdb sp!, {r4-r8,lr} - ldr r12, [sp, #0x1c] - ldr r8, [sp, #0x18] - mov r12, r12, lsl #0x1c - mov r4, r12, lsr #0x10 - mov r6, #0x0 - cmp r2, #0x0 - ldmleia sp!, {r4-r8,pc} - mov lr, r3, lsl #0x1 - mov r12, r6 -_020B6204: - mov r5, r0 - mov r7, r12 - cmp r1, #0x0 - ble _020B622C -_020B6214: - orr r3, r4, r8 - add r7, r7, #0x1 - cmp r7, r1 - add r8, r8, #0x1 - strh r3, [r5], #0x2 - blt _020B6214 -_020B622C: - add r6, r6, #0x1 - cmp r6, r2 - add r0, r0, lr - blt _020B6204 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B6240 -FUN_020B6240: ; 0x020B6240 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x8 - ldr r5, [sp, #0x24] - ldr lr, [sp, #0x20] - cmp r5, #0x20 - ldr r12, [sp, #0x28] - bgt _020B6280 - mla r4, r5, lr, r3 - ldr lr, [sp, #0x2c] - str r12, [sp, #0x0] - mov r3, r5 - add r0, r0, r4, lsl #0x1 - str lr, [sp, #0x4] - bl FUN_020B61DC - add sp, sp, #0x8 - ldmia sp!, {r4-r8,pc} -_020B6280: - ldr r4, [sp, #0x2c] - add r7, lr, r2 - mov r2, r4, lsl #0x1c - cmp lr, r7 - add r8, r3, r1 - mov r4, r2, lsr #0x10 - addge sp, sp, #0x8 - ldmgeia sp!, {r4-r8,pc} -_020B62A0: - cmp lr, #0x20 - movlt r1, lr - addge r1, lr, #0x20 - mov r6, r3 - cmp r3, r8 - add r5, r0, r1, lsl #0x6 - bge _020B62E4 -_020B62BC: - cmp r6, #0x20 - movlt r1, r6 - addge r1, r6, #0x3e0 - orr r2, r4, r12 - mov r1, r1, lsl #0x1 - add r6, r6, #0x1 - strh r2, [r5, r1] - cmp r6, r8 - add r12, r12, #0x1 - blt _020B62BC -_020B62E4: - add lr, lr, #0x1 - cmp lr, r7 - blt _020B62A0 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B62F8 -FUN_020B62F8: ; 0x020B62F8 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x18 - cmp r2, #0x8 - movlt r4, r2 - movge r12, #0x3 - clzlt r4, r4 - rsblt r12, r4, #0x1f - cmp r3, #0x8 - movlt r4, r3 - movge r6, #0x3 - clzlt r4, r4 - rsblt r6, r4, #0x1f - ldr r4, _020B6378 ; =UNK_020FF970 - ldr r5, [sp, #0x28] - add r4, r4, r6, lsl #0x3 - ldrb r6, [r4, r12, lsl #0x1] - add r12, r4, r12, lsl #0x1 - ldr r4, _020B637C ; =FUN_020B6908 - strb r6, [sp, #0x14] - ldrb r6, [r12, #0x1] - ldr lr, _020B6380 ; =FUN_020B68AC - ldr ip, _020B6384 ; =FUN_020B64C0 - strb r6, [sp, #0x15] - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str lr, [sp, #0x8] - str r12, [sp, #0xc] - ldr r12, [sp, #0x14] - str r12, [sp, #0x10] - bl FUN_020B6488 - add sp, sp, #0x18 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B6378: .word UNK_020FF970 -_020B637C: .word FUN_020B6908 -_020B6380: .word FUN_020B68AC -_020B6384: .word FUN_020B64C0 - - arm_func_start FUN_020B6388 -FUN_020B6388: ; 0x020B6388 - stmdb sp!, {lr} - sub sp, sp, #0x14 - ldr lr, [sp, #0x18] - ldr ip, _020B63C0 ; =FUN_020B6B10 - str lr, [sp, #0x0] - ldr lr, _020B63C4 ; =FUN_020B68AC - str r12, [sp, #0x4] - ldr ip, _020B63C8 ; =FUN_020B66D4 - str lr, [sp, #0x8] - str r12, [sp, #0xc] - str r2, [sp, #0x10] - bl FUN_020B6488 - add sp, sp, #0x14 - ldmia sp!, {pc} - .balign 4 -_020B63C0: .word FUN_020B6B10 -_020B63C4: .word FUN_020B68AC -_020B63C8: .word FUN_020B66D4 - - arm_func_start FUN_020B63CC -FUN_020B63CC: ; 0x020B63CC - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - mov r7, r1 - ldrh r1, [sp, #0x2c] - mov r8, r0 - mov r0, r7 - mov r6, r2 - mov r5, r3 - bl FUN_020B5CE4 - ldr r1, _020B6484 ; =0x0000FFFF - mov r4, r0 - cmp r4, r1 - ldreq r0, [r7, #0x0] - ldreqh r4, [r0, #0x2] - mov r0, r7 - mov r1, r4 - bl FUN_020B5C88 - str r0, [sp, #0x8] - ldr r0, [r7, #0x0] - ldr r2, [sp, #0x28] - ldr r0, [r0, #0x8] - add r1, sp, #0x8 - ldrh r3, [r0, #0x2] - add r12, r0, #0x8 - mov r0, r8 - mla r3, r4, r3, r12 - str r3, [sp, #0xc] - str r2, [sp, #0x0] - str r1, [sp, #0x4] - ldr r1, [sp, #0x8] - ldr r4, [r8, #0x14] - ldrsb r2, [r1, #0x0] - mov r1, r7 - mov r3, r5 - add r2, r6, r2 - blx r4 - ldrh r0, [r7, #0x8] - cmp r0, #0x0 - ldrne r0, [sp, #0x8] - ldrnesb r1, [r0, #0x0] - ldrneb r0, [r0, #0x1] - addne r0, r1, r0 - ldreq r0, [sp, #0x8] - ldreqsb r0, [r0, #0x2] - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020B6484: .word 0x0000FFFF - - arm_func_start FUN_020B6488 -FUN_020B6488: ; 0x020B6488 - str r2, [r0, #0x4] - ldr r2, [sp, #0x0] - str r3, [r0, #0x8] - strb r2, [r0, #0xc] - ldr r2, [sp, #0x4] - str r1, [r0, #0x0] - ldr r1, [sp, #0x8] - str r2, [r0, #0x14] - ldr r2, [sp, #0xc] - str r1, [r0, #0x18] - ldr r1, [sp, #0x10] - str r2, [r0, #0x1c] - str r1, [r0, #0x10] - bx lr - - arm_func_start FUN_020B64C0 -FUN_020B64C0: ; 0x020B64C0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x54 - ldrb r4, [r0, #0xc] - mov r10, r2 - str r1, [sp, #0xc] - str r4, [sp, #0x44] - ldr r1, [sp, #0x44] - ldr r4, [sp, #0x78] - cmp r1, #0x4 - add r1, r10, r4 - str r1, [sp, #0x1c] - ldr r2, [sp, #0x7c] - mov r1, r3 - add r1, r1, r2 - str r1, [sp, #0x20] - ldrne r1, [sp, #0xc] - str r3, [sp, #0x10] - orrne r1, r1, r1, lsl #0x8 - orrne r1, r1, r1, lsl #0x10 - strne r1, [sp, #0xc] - bne _020B6528 - ldr r1, [sp, #0xc] - orr r1, r1, r1, lsl #0x4 - orr r1, r1, r1, lsl #0x8 - orr r1, r1, r1, lsl #0x10 - str r1, [sp, #0xc] -_020B6528: - bic r1, r10, #0x7 - str r1, [sp, #0x30] - ldr r1, [sp, #0x10] - ldr r2, [r0, #0x10] - bic r1, r1, #0x7 - str r1, [sp, #0x14] - ldr r1, [sp, #0x44] - str r2, [sp, #0x4c] - mov r3, r1, lsl #0x6 - mov r2, r3, asr #0x2 - ldr r1, [sp, #0x20] - add r3, r3, r2, lsr #0x1d - ldr r2, [sp, #0x1c] - add r6, r1, #0x7 - add r2, r2, #0x7 - bic r5, r2, #0x7 - bic r2, r6, #0x7 - ldr r1, [sp, #0x30] - str r2, [sp, #0x24] - mov r2, r3, asr #0x3 - str r2, [sp, #0x48] - mov r4, r1, asr #0x2 - ldr r2, [sp, #0x30] - ldr r1, [sp, #0x14] - add r2, r2, r4, lsr #0x1d - mov r2, r2, asr #0x3 - str r2, [sp, #0x2c] - ldr r2, [sp, #0x14] - mov r1, r1, asr #0x2 - add r1, r2, r1, lsr #0x1d - mov r6, r1, asr #0x3 - ldr r1, [sp, #0x24] - cmp r2, r1 - ldr r1, [r0, #0x4] - str r1, [sp, #0x40] - ldr r1, [r0, #0x8] - ldr r0, [r0, #0x0] - str r1, [sp, #0x3c] - str r0, [sp, #0x28] - ldrb r0, [sp, #0x4c] - str r0, [sp, #0x38] - ldrb r0, [sp, #0x4d] - str r0, [sp, #0x34] - addge sp, sp, #0x54 - ldmgeia sp!, {r4-r11,pc} - mov r4, #0x0 - mov r11, #0x8 -_020B65E4: - ldr r1, [sp, #0x14] - ldr r0, [sp, #0x10] - ldr r7, [sp, #0x2c] - cmp r1, r0 - movlt r1, r0 - ldrlt r0, [sp, #0x14] - sublt r9, r1, r0 - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x14] - movge r9, r4 - sub r0, r1, r0 - cmp r0, #0x8 - movgt r0, r11 - sub r0, r0, r9 - str r0, [sp, #0x18] - ldr r0, [sp, #0x30] - cmp r0, r5 - mov r8, r0 - bge _020B66B0 -_020B6630: - ldr r0, [sp, #0x38] - ldr r2, [sp, #0x40] - str r0, [sp, #0x0] - ldr r0, [sp, #0x34] - ldr r3, [sp, #0x3c] - str r0, [sp, #0x4] - mov r0, r7 - mov r1, r6 - bl FUN_020B7068 - ldr r2, [sp, #0x1c] - cmp r8, r10 - sublt r1, r10, r8 - sub r2, r2, r8 - movge r1, r4 - cmp r2, #0x8 - movgt r2, r11 - sub r3, r2, r1 - ldr r2, [sp, #0x18] - ldr r12, [sp, #0x48] - str r2, [sp, #0x0] - ldr r2, [sp, #0xc] - str r2, [sp, #0x4] - ldr r2, [sp, #0x44] - str r2, [sp, #0x8] - ldr r2, [sp, #0x28] - mla r0, r12, r0, r2 - mov r2, r9 - bl FUN_020B6F18 - add r8, r8, #0x8 - add r7, r7, #0x1 - cmp r8, r5 - blt _020B6630 -_020B66B0: - ldr r0, [sp, #0x14] - add r6, r6, #0x1 - add r1, r0, #0x8 - ldr r0, [sp, #0x24] - str r1, [sp, #0x14] - cmp r1, r0 - blt _020B65E4 - add sp, sp, #0x54 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B66D4 -FUN_020B66D4: ; 0x020B66D4 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x3c - ldrb r4, [r0, #0xc] - mov r10, r2 - str r1, [sp, #0xc] - str r4, [sp, #0x2c] - ldr r1, [sp, #0x2c] - ldr r4, [sp, #0x60] - cmp r1, #0x4 - add r1, r10, r4 - str r1, [sp, #0x18] - ldr r2, [sp, #0x64] - mov r1, r3 - add r1, r1, r2 - str r1, [sp, #0x1c] - ldrne r1, [sp, #0xc] - str r3, [sp, #0x10] - orrne r1, r1, r1, lsl #0x8 - orrne r1, r1, r1, lsl #0x10 - strne r1, [sp, #0xc] - bne _020B673C - ldr r1, [sp, #0xc] - orr r1, r1, r1, lsl #0x4 - orr r1, r1, r1, lsl #0x8 - orr r1, r1, r1, lsl #0x10 - str r1, [sp, #0xc] -_020B673C: - ldr r1, [sp, #0x10] - bic r1, r1, #0x7 - mov r2, r1, asr #0x2 - str r1, [sp, #0x14] - add r1, r1, r2, lsr #0x1d - ldr r2, [r0, #0x10] - mov r3, r1, asr #0x3 - mul r1, r3, r2 - bic r3, r10, #0x7 - str r3, [sp, #0x28] - ldr r3, [sp, #0x2c] - mov r6, r3, lsl #0x6 - ldr r3, [sp, #0x28] - mov r4, r6, asr #0x2 - mov r5, r3, asr #0x2 - add r5, r3, r5, lsr #0x1d - add r4, r6, r4, lsr #0x1d - mov r3, r4, asr #0x3 - str r3, [sp, #0x30] - ldr r3, [sp, #0x1c] - add r1, r1, r5, asr #0x3 - add r4, r3, #0x7 - ldr r3, [r0, #0x0] - ldr r0, [sp, #0x18] - add r5, r0, #0x7 - ldr r0, [sp, #0x30] - bic r7, r5, #0x7 - mla r1, r0, r1, r3 - bic r0, r4, #0x7 - str r0, [sp, #0x20] - ldr r0, [sp, #0x30] - str r1, [sp, #0x24] - mul r0, r2, r0 - str r0, [sp, #0x34] - ldr r1, [sp, #0x14] - ldr r0, [sp, #0x20] - cmp r1, r0 - addge sp, sp, #0x3c - ldmgeia sp!, {r4-r11,pc} - mov r5, #0x0 - mov r4, #0x8 -_020B67E0: - ldr r1, [sp, #0x14] - ldr r0, [sp, #0x10] - ldr r6, [sp, #0x24] - cmp r1, r0 - movlt r1, r0 - ldrlt r0, [sp, #0x14] - sublt r9, r1, r0 - ldr r1, [sp, #0x1c] - ldr r0, [sp, #0x14] - movge r9, r5 - sub r0, r1, r0 - cmp r0, #0x8 - movgt r0, r4 - sub r11, r0, r9 - ldr r0, [sp, #0x28] - cmp r0, r7 - mov r8, r0 - bge _020B687C -_020B6828: - ldr r0, [sp, #0x18] - cmp r8, r10 - sublt r1, r10, r8 - sub r0, r0, r8 - movge r1, r5 - cmp r0, #0x8 - movgt r0, r4 - sub r3, r0, r1 - ldr r0, [sp, #0xc] - str r11, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x2c] - mov r2, r9 - str r0, [sp, #0x8] - mov r0, r6 - bl FUN_020B6F18 - ldr r0, [sp, #0x30] - add r8, r8, #0x8 - add r6, r6, r0 - cmp r8, r7 - blt _020B6828 -_020B687C: - ldr r1, [sp, #0x24] - ldr r0, [sp, #0x34] - add r0, r1, r0 - str r0, [sp, #0x24] - ldr r0, [sp, #0x14] - add r1, r0, #0x8 - ldr r0, [sp, #0x20] - str r1, [sp, #0x14] - cmp r1, r0 - blt _020B67E0 - add sp, sp, #0x3c - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B68AC -FUN_020B68AC: ; 0x020B68AC - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r3, r0 - ldrb r2, [r3, #0xc] - ldr r12, [r3, #0x4] - cmp r2, #0x4 - orreq r0, r1, r1, lsl #0x4 - orreq r0, r0, r0, lsl #0x8 - orreq r1, r0, r0, lsl #0x10 - orrne r0, r1, r1, lsl #0x8 - orrne r1, r0, r0, lsl #0x10 - ldr r0, [r3, #0x8] - mov r2, r2, lsl #0x6 - mul lr, r12, r0 - mov r0, r2, asr #0x2 - add r0, r2, r0, lsr #0x1d - mov r2, r0, asr #0x3 - mov r0, r1 - mul r2, lr, r2 - ldr r1, [r3, #0x0] - bl MIi_CpuClearFast - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020B6908 -FUN_020B6908: ; 0x020B6908 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4c - ldr r7, [sp, #0x74] - ldrb r5, [r0, #0xc] - ldr r6, [r1, #0x0] - ldr r4, [r7, #0x0] - ldr r9, [r6, #0x8] - mov r8, r5, lsl #0x6 - ldrb r4, [r4, #0x1] - mov r5, r8, asr #0x2 - add r5, r8, r5, lsr #0x1d - ldrb r9, [r9, #0x1] - ldr r8, [r0, #0x4] - ldr r6, [r0, #0x8] - str r2, [sp, #0x8] - str r3, [sp, #0xc] - cmp r4, #0x0 - mov r5, r5, asr #0x3 - addeq sp, sp, #0x4c - ldmeqia sp!, {r4-r11,pc} - adds r3, r2, r4 - addmi sp, sp, #0x4c - ldmmiia sp!, {r4-r11,pc} - ldr r2, [sp, #0xc] - adds r2, r2, r9 - addmi sp, sp, #0x4c - ldmmiia sp!, {r4-r11,pc} - ldr r10, [sp, #0x8] - add r3, r3, #0x7 - cmp r10, #0x0 - movle r10, #0x0 - strle r10, [sp, #0x10] - movgt r10, r10, lsr #0x3 - strgt r10, [sp, #0x10] - ldr r10, [sp, #0xc] - add r2, r2, #0x7 - cmp r10, #0x0 - movle r10, #0x0 - mov r11, r2, lsr #0x3 - mov r3, r3, lsr #0x3 - movgt r10, r10, lsr #0x3 - cmp r3, r8 - movcs r3, r8 - cmp r11, r6 - ldr r2, [sp, #0x10] - movcs r11, r6 - subs r8, r3, r2 - addmi sp, sp, #0x4c - sub r3, r11, r10 - ldmmiia sp!, {r4-r11,pc} - cmp r3, #0x0 - addlt sp, sp, #0x4c - ldmltia sp!, {r4-r11,pc} - ldr r2, [sp, #0x8] - ldr r6, [r0, #0x0] - cmp r2, #0x0 - andge r2, r2, #0x7 - strge r2, [sp, #0x8] - ldr r2, [sp, #0xc] - ldr r11, [sp, #0x8] - cmp r2, #0x0 - andge r2, r2, #0x7 - strge r2, [sp, #0xc] - sub r8, r11, r8, lsl #0x3 - ldr r11, [sp, #0xc] - ldr r2, [sp, #0x70] - sub r3, r11, r3, lsl #0x3 - str r3, [sp, #0x14] - ldr r3, [r7, #0x4] - sub r2, r2, #0x1 - str r3, [sp, #0x28] - str r2, [sp, #0x48] - str r9, [sp, #0x38] - str r4, [sp, #0x34] - ldr r4, [r1, #0x0] - ldr r2, [sp, #0x14] - mov r3, r11 - cmp r3, r2 - ldr r2, [r4, #0x8] - ldrb r3, [r2, #0x6] - str r3, [sp, #0x40] - ldrb r2, [r0, #0xc] - str r2, [sp, #0x44] - ldr r1, [r1, #0x0] - ldr r1, [r1, #0x8] - ldrb r1, [r1, #0x0] - mul r1, r3, r1 - str r1, [sp, #0x3c] - ldr r1, [r0, #0x10] - str r1, [sp, #0x20] - ldr r1, [r0, #0x4] - ldr r0, [r0, #0x8] - ldrb r11, [sp, #0x20] - ldrb r4, [sp, #0x21] - str r1, [sp, #0x1c] - str r0, [sp, #0x18] - addle sp, sp, #0x4c - ldmleia sp!, {r4-r11,pc} -_020B6A90: - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x10] - str r0, [sp, #0x30] - ldr r0, [sp, #0x8] - cmp r0, r8 - mov r9, r0 - ble _020B6AEC -_020B6AAC: - ldr r2, [sp, #0x1c] - str r11, [sp, #0x0] - ldr r3, [sp, #0x18] - mov r0, r7 - mov r1, r10 - str r4, [sp, #0x4] - bl FUN_020B7068 - mla r1, r0, r5, r6 - add r0, sp, #0x24 - str r9, [sp, #0x2c] - str r1, [sp, #0x24] - bl FUN_020B6CAC - sub r9, r9, #0x8 - add r7, r7, #0x1 - cmp r9, r8 - bgt _020B6AAC -_020B6AEC: - ldr r0, [sp, #0xc] - add r10, r10, #0x1 - sub r1, r0, #0x8 - ldr r0, [sp, #0x14] - str r1, [sp, #0xc] - cmp r1, r0 - bgt _020B6A90 - add sp, sp, #0x4c - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B6B10 -FUN_020B6B10: ; 0x020B6B10 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x2c - ldr r4, [sp, #0x54] - ldrb r5, [r0, #0xc] - str r4, [sp, #0x54] - ldr r4, [r4, #0x0] - ldr r6, [r1, #0x0] - mov r7, r5, lsl #0x6 - ldrb r4, [r4, #0x1] - mov r5, r7, asr #0x2 - add r5, r7, r5, lsr #0x1d - cmp r4, #0x0 - ldr r6, [r6, #0x8] - mov r9, r3 - ldr r8, [r0, #0x4] - ldr r7, [r0, #0x8] - mov r10, r2 - mov r5, r5, asr #0x3 - addeq sp, sp, #0x2c - ldr lr, [r0, #0x0] - ldrb r3, [r6, #0x1] - ldmeqia sp!, {r4-r11,pc} - adds r6, r10, r4 - addmi sp, sp, #0x2c - ldmmiia sp!, {r4-r11,pc} - adds r2, r9, r3 - addmi sp, sp, #0x2c - ldmmiia sp!, {r4-r11,pc} - cmp r10, #0x0 - movle r11, #0x0 - add r6, r6, #0x7 - movgt r11, r10, lsr #0x3 - cmp r9, #0x0 - movle r12, #0x0 - add r2, r2, #0x7 - mov r6, r6, lsr #0x3 - movgt r12, r9, lsr #0x3 - cmp r6, r8 - movcs r6, r8 - mov r2, r2, lsr #0x3 - cmp r2, r7 - movcs r2, r7 - subs r7, r6, r11 - addmi sp, sp, #0x2c - sub r2, r2, r12 - ldmmiia sp!, {r4-r11,pc} - cmp r2, #0x0 - addlt sp, sp, #0x2c - ldmltia sp!, {r4-r11,pc} - ldr r6, [r0, #0x10] - cmp r10, #0x0 - sub r8, r6, r7 - mul r8, r5, r8 - mla r11, r6, r12, r11 - andge r10, r10, #0x7 - str r8, [sp, #0x0] - ldr r8, [sp, #0x54] - mla r6, r5, r11, lr - ldr r12, [r8, #0x4] - ldr r11, [sp, #0x50] - cmp r9, #0x0 - sub r8, r11, #0x1 - andge r9, r9, #0x7 - sub r11, r9, r2, lsl #0x3 - str r12, [sp, #0x8] - str r4, [sp, #0x14] - str r8, [sp, #0x28] - str r3, [sp, #0x18] - ldr r3, [r1, #0x0] - cmp r9, r11 - ldr r2, [r3, #0x8] - sub r7, r10, r7, lsl #0x3 - ldrb r2, [r2, #0x6] - str r2, [sp, #0x20] - ldrb r0, [r0, #0xc] - str r0, [sp, #0x24] - ldr r0, [r1, #0x0] - ldr r0, [r0, #0x8] - ldrb r0, [r0, #0x0] - mul r0, r2, r0 - str r0, [sp, #0x1c] - addle sp, sp, #0x2c - ldmleia sp!, {r4-r11,pc} - add r4, sp, #0x4 -_020B6C60: - mov r8, r10 - str r9, [sp, #0x10] - cmp r10, r7 - ble _020B6C90 -_020B6C70: - mov r0, r4 - str r6, [sp, #0x4] - str r8, [sp, #0xc] - bl FUN_020B6CAC - sub r8, r8, #0x8 - cmp r8, r7 - add r6, r6, r5 - bgt _020B6C70 -_020B6C90: - ldr r0, [sp, #0x0] - sub r9, r9, #0x8 - cmp r9, r11 - add r6, r6, r0 - bgt _020B6C60 - add sp, sp, #0x2c - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B6CAC -FUN_020B6CAC: ; 0x020B6CAC - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - ldr r5, [r0, #0x8] - ldr r4, [r0, #0xc] - cmp r5, #0x0 - strge r5, [sp, #0x0] - movlt r1, #0x0 - strlt r1, [sp, #0x0] - ldr r1, [r0, #0x10] - cmp r4, #0x0 - add r10, r5, r1 - ldr r1, [r0, #0x14] - movge r2, r4 - movlt r2, #0x0 - cmp r10, #0x8 - add r3, r4, r1 - movge r10, #0x8 - cmp r3, #0x8 - movge r3, #0x8 - cmp r4, #0x0 - movgt r4, #0x0 - cmp r5, #0x0 - ldr r8, [r0, #0x20] - movgt r5, #0x0 - rsb r1, r4, #0x0 - mul r7, r10, r8 - ldr r6, [r0, #0x1c] - rsb r4, r5, #0x0 - mul r9, r6, r4 - ldr r4, [r0, #0x18] - mov r10, r7 - str r4, [sp, #0x8] - ldr r4, [sp, #0x0] - cmp r8, #0x4 - mul r5, r4, r8 - ldr r4, [sp, #0x8] - str r5, [sp, #0x0] - mla r11, r1, r4, r9 - ldr r1, [r0, #0x4] - str r1, [sp, #0x4] - bne _020B6E24 - ldr r1, [r0, #0x0] - ldr r7, [r0, #0x24] - add r0, r1, r2, lsl #0x2 - str r0, [sp, #0xc] - add r0, r1, r3, lsl #0x2 - ldr r1, [sp, #0xc] - str r0, [sp, #0x10] - cmp r1, r0 - addcs sp, sp, #0x34 - ldmcsia sp!, {r4-r11,pc} - mov r0, #0x0 - add r9, sp, #0x24 - mov r4, #0xf - str r0, [sp, #0x1c] -_020B6D88: - ldr r0, [sp, #0xc] - mov r1, r11, lsr #0x1f - ldr r5, [r0, #0x0] - ldr r0, [sp, #0x4] - rsb r2, r1, r11, lsl #0x1d - add r0, r0, r11, lsr #0x3 - str r0, [sp, #0x24] - ldr r0, [sp, #0x1c] - add r1, r1, r2, ror #0x1d - strb r0, [sp, #0x28] - strb r0, [sp, #0x29] - mov r0, r9 - bl FUN_020B76B0 - ldr r8, [sp, #0x0] - mov r0, r8 - cmp r0, r10 - bhs _020B6DF8 -_020B6DCC: - mov r0, r9 - mov r1, r6 - bl FUN_020B76B0 - cmp r0, #0x0 - mvnne r1, r4, lsl r8 - addne r0, r7, r0 - andne r1, r5, r1 - orrne r5, r1, r0, lsl r8 - add r8, r8, #0x4 - cmp r8, r10 - blo _020B6DCC -_020B6DF8: - ldr r0, [sp, #0xc] - add r1, r0, #0x4 - str r5, [r0, #0x0] - ldr r0, [sp, #0x10] - str r1, [sp, #0xc] - cmp r1, r0 - ldr r0, [sp, #0x8] - add r11, r11, r0 - blo _020B6D88 - add sp, sp, #0x34 - ldmia sp!, {r4-r11,pc} -_020B6E24: - ldr r1, [r0, #0x0] - ldr r9, [r0, #0x24] - add r0, r1, r2, lsl #0x3 - str r0, [sp, #0x14] - add r0, r1, r3, lsl #0x3 - ldr r1, [sp, #0x14] - str r0, [sp, #0x18] - cmp r1, r0 - addcs sp, sp, #0x34 - ldmcsia sp!, {r4-r11,pc} - mov r0, #0x0 - mov r4, #0xff - str r0, [sp, #0x20] -_020B6E58: - mov r1, r11, lsr #0x1f - rsb r0, r1, r11, lsl #0x1d - add r1, r1, r0, ror #0x1d - ldr r0, [sp, #0x14] - ldr r8, [r0, #0x0] - ldr r7, [r0, #0x4] - ldr r0, [sp, #0x4] - add r0, r0, r11, lsr #0x3 - str r0, [sp, #0x2c] - ldr r0, [sp, #0x20] - strb r0, [sp, #0x30] - strb r0, [sp, #0x31] - add r0, sp, #0x2c - bl FUN_020B76B0 - ldr r0, [sp, #0x0] - cmp r0, r10 - mov r5, r0 - bhs _020B6EE8 -_020B6EA0: - add r0, sp, #0x2c - mov r1, r6 - bl FUN_020B76B0 - cmp r0, #0x0 - beq _020B6EDC - cmp r5, #0x20 - mvncc r1, r4, lsl r5 - addcc r0, r9, r0 - andcc r1, r8, r1 - orrcc r8, r1, r0, lsl r5 - subcs r2, r5, #0x20 - mvncs r1, r4, lsl r2 - addcs r0, r9, r0 - andcs r1, r7, r1 - orrcs r7, r1, r0, lsl r2 -_020B6EDC: - add r5, r5, #0x8 - cmp r5, r10 - blo _020B6EA0 -_020B6EE8: - ldr r0, [sp, #0x14] - str r8, [r0, #0x0] - add r1, r0, #0x8 - str r7, [r0, #0x4] - ldr r0, [sp, #0x18] - str r1, [sp, #0x14] - cmp r1, r0 - ldr r0, [sp, #0x8] - add r11, r11, r0 - blo _020B6E58 - add sp, sp, #0x34 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B6F18 -FUN_020B6F18: ; 0x020B6F18 - stmdb sp!, {r4-r6,lr} - mov lr, r0 - cmp r3, #0x8 - ldr r0, [sp, #0x14] - bne _020B6F4C - ldr r4, [sp, #0x10] - cmp r4, #0x8 - bne _020B6F4C - ldr r2, [sp, #0x18] - mov r1, lr - mov r2, r2, lsl #0x3 - bl MIi_CpuClearFast - ldmia sp!, {r4-r6,pc} -_020B6F4C: - ldr r4, [sp, #0x18] - cmp r4, #0x4 - bne _020B6FAC - mov r5, r1, lsl #0x2 - add r4, r5, r3, lsl #0x2 - mvn r3, #0x0 - rsb r4, r4, #0x20 - mov r3, r3, lsr r5 - add r1, r4, r1, lsl #0x2 - mov r3, r3, lsl r1 - ldr r1, [sp, #0x10] - add r5, lr, r2, lsl #0x2 - add r2, r5, r1, lsl #0x2 - and r6, r0, r3, lsr r4 - cmp r5, r2 - mvn r1, r3, lsr r4 - ldmcsia sp!, {r4-r6,pc} -_020B6F90: - ldr r0, [r5, #0x0] - and r0, r0, r1 - orr r0, r6, r0 - str r0, [r5], #0x4 - cmp r5, r2 - blo _020B6F90 - ldmia sp!, {r4-r6,pc} -_020B6FAC: - mov r12, r1, lsl #0x3 - add r1, r12, r3, lsl #0x3 - rsb r1, r1, #0x40 - mvn r3, #0x0 - cmp r1, #0x20 - mov r5, r3, lsr r12 - subcs r4, r1, #0x20 - addcs r3, r12, r4 - movcs r3, r5, lsl r3 - movcs r3, r3, lsr r4 - movcc r3, r5, lsl r12 - mvn r4, #0x0 - add r5, lr, r2, lsl #0x3 - cmp r12, #0x20 - mov r4, r4, lsl r1 - subcs r12, r12, #0x20 - addcs r1, r12, r1 - movcs r1, r4, lsr r1 - movcs r6, r1, lsl r12 - movcc r6, r4, lsr r1 - ldr r1, [sp, #0x10] - and lr, r0, r3 - add r4, r5, r1, lsl #0x3 - cmp r5, r4 - and r12, r0, r6 - mvn r2, r3 - mvn r1, r6 - ldmcsia sp!, {r4-r6,pc} -_020B701C: - ldr r0, [r5, #0x0] - and r0, r0, r2 - orr r0, lr, r0 - str r0, [r5, #0x0] - ldr r0, [r5, #0x4] - and r0, r0, r1 - orr r0, r12, r0 - str r0, [r5, #0x4] - add r5, r5, #0x8 - cmp r5, r4 - blo _020B701C - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020B704C -FUN_020B704C: ; 0x020B704C - ldrb r3, [r0, #0x1] - ldr r2, _020B7064 ; =UNK_020FF990 - ldrb r1, [r0, #0x0] - add r0, r2, r3, lsl #0x4 - ldr r0, [r0, r1, lsl #0x2] - bx lr - .balign 4 -_020B7064: .word UNK_020FF990 - - arm_func_start FUN_020B7068 -FUN_020B7068: ; 0x020B7068 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr fp, _020B7164 ; =UNK_020FF970 - mov r9, #0x0 - mov r10, #0x3 - mvn r7, #0x0 -_020B7080: - ldr r4, [sp, #0x2c] - ldr r6, [sp, #0x28] - and r12, r3, r7, lsl r4 - cmp r12, r1 - mov r8, r7, lsl r6 - mov r5, r7, lsl r4 - and lr, r2, r7, lsl r6 - bhi _020B70D0 - mla r9, r2, r12, r9 - cmp lr, r0 - movhi r2, lr - subhi r1, r1, r12 - subhi r3, r3, r12 - bhi _020B7118 - sub r3, r3, r12 - mla r9, lr, r3, r9 - sub r0, r0, lr - sub r1, r1, r12 - sub r2, r2, lr - b _020B7118 -_020B70D0: - cmp lr, r0 - mlals r9, lr, r12, r9 - mvn r3, r5 - movls r3, r12 - subls r0, r0, lr - subls r2, r2, lr - bls _020B7118 - and r2, r1, r5 - mla r5, lr, r2, r9 - and r2, r0, r8 - and r1, r1, r3 - add r2, r5, r2, lsl r4 - mvn r3, r8 - add r1, r2, r1, lsl r6 - and r0, r0, r3 - add sp, sp, #0x4 - add r0, r1, r0 - ldmia sp!, {r4-r11,pc} -_020B7118: - cmp r2, #0x8 - movlt r4, r2 - movge r5, r10 - clzlt r4, r4 - rsblt r5, r4, #0x1f - cmp r3, #0x8 - movge r4, r10 - movlt r4, r3 - clzlt r4, r4 - rsblt r4, r4, #0x1f - add r4, r11, r4, lsl #0x3 - add r6, r4, r5, lsl #0x1 - ldrb r5, [r4, r5, lsl #0x1] - ldrb r4, [r6, #0x1] - str r5, [sp, #0x28] - str r4, [sp, #0x2c] - b _020B7080 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B7164: .word UNK_020FF970 - - arm_func_start FUN_020B7168 -FUN_020B7168: ; 0x020B7168 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0xc - ldr r12, [sp, #0x28] - mov r7, r0 - mov r6, r1 - mov r5, r2 - mov r4, r3 - ands r0, r12, #0x100 - beq _020B71AC - ldr r0, [r7, #0x4] - ldr r1, [r7, #0xc] - ldr r2, [sp, #0x2c] - bl FUN_020B5B54 - ldr r1, [sp, #0x20] - sub r0, r1, r0 - add r5, r5, r0 - b _020B71E4 -_020B71AC: - ands r0, r12, #0x80 - beq _020B71E4 - ldr r0, [r7, #0x4] - ldr r1, [r7, #0xc] - ldr r2, [sp, #0x2c] - bl FUN_020B5B54 - ldr r2, [sp, #0x20] - add r1, r0, #0x1 - add r0, r2, #0x1 - add r0, r0, r0, lsr #0x1f - mov r2, r0, asr #0x1 - add r0, r1, r1, lsr #0x1f - sub r0, r2, r0, asr #0x1 - add r5, r5, r0 -_020B71E4: - ldr r1, [sp, #0x24] - ldr r0, [sp, #0x28] - str r1, [sp, #0x0] - ldr r12, [sp, #0x2c] - str r0, [sp, #0x4] - mov r0, r7 - mov r1, r6 - mov r2, r5 - mov r3, r4 - str r12, [sp, #0x8] - bl FUN_020B72C4 - add sp, sp, #0xc - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B7218 -FUN_020B7218: ; 0x020B7218 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x18 - ldr r4, [sp, #0x34] - mov r8, r0 - str r4, [sp, #0x0] - mov r7, r1 - mov r6, r2 - mov r5, r3 - ldr r4, [sp, #0x30] - ldr r1, [r8, #0x4] - ldr r2, [r8, #0x8] - ldr r3, [r8, #0xc] - add r0, sp, #0xc - bl FUN_020B5ABC - ands r0, r4, #0x10 - ldrne r0, [sp, #0xc] - addne r0, r0, #0x1 - addne r0, r0, r0, lsr #0x1f - subne r7, r7, r0, asr #0x1 - bne _020B7274 - ands r0, r4, #0x20 - ldrne r0, [sp, #0xc] - subne r7, r7, r0 -_020B7274: - ands r0, r4, #0x2 - ldrne r0, [sp, #0x10] - addne r0, r0, #0x1 - addne r0, r0, r0, lsr #0x1f - subne r6, r6, r0, asr #0x1 - bne _020B7298 - ands r0, r4, #0x4 - ldrne r0, [sp, #0x10] - subne r6, r6, r0 -_020B7298: - str r5, [sp, #0x0] - ldr r0, [sp, #0x34] - str r4, [sp, #0x4] - str r0, [sp, #0x8] - ldr r3, [sp, #0xc] - mov r0, r8 - mov r1, r7 - mov r2, r6 - bl FUN_020B72C4 - add sp, sp, #0x18 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B72C4 -FUN_020B72C4: ; 0x020B72C4 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x14 - mov r10, r0 - ldr r4, [r10, #0x4] - ldr r0, [sp, #0x40] - ldr r4, [r4, #0x0] - ldr r5, [r10, #0xc] - ldrsb r4, [r4, #0x1] - cmp r0, #0x0 - mov r9, r1 - str r0, [sp, #0xc] - ldr r0, [sp, #0x38] - mov r8, r2 - str r0, [sp, #0x38] - mov r7, r3 - add r6, r5, r4 - addeq sp, sp, #0x14 - ldmeqia sp!, {r4-r11,pc} - add r0, r7, #0x1 - ldr r1, [sp, #0x3c] - add r0, r0, r0, lsr #0x1f - mov r0, r0, asr #0x1 - and r5, r1, #0x800 - and r11, r1, #0x400 - str r0, [sp, #0x8] - mov r4, #0x0 -_020B732C: - mov r1, r9 - cmp r5, #0x0 - beq _020B7358 - ldr r0, [r10, #0x4] - ldr r1, [r10, #0x8] - ldr r2, [sp, #0xc] - mov r3, r4 - bl FUN_020B5BC8 - sub r0, r7, r0 - add r1, r9, r0 - b _020B7388 -_020B7358: - cmp r11, #0x0 - beq _020B7388 - ldr r0, [r10, #0x4] - ldr r1, [r10, #0x8] - ldr r2, [sp, #0xc] - mov r3, r4 - bl FUN_020B5BC8 - add r0, r0, #0x1 - add r1, r0, r0, lsr #0x1f - ldr r0, [sp, #0x8] - sub r0, r0, r1, asr #0x1 - add r1, r9, r0 -_020B7388: - ldr r2, [sp, #0xc] - add r3, sp, #0xc - str r2, [sp, #0x0] - str r3, [sp, #0x4] - ldr r3, [sp, #0x38] - mov r0, r10 - mov r2, r8 - bl FUN_020B73C0 - ldr r0, [sp, #0xc] - add r8, r8, r6 - cmp r0, #0x0 - bne _020B732C - add sp, sp, #0x14 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B73C0 -FUN_020B73C0: ; 0x020B73C0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r10, r0 - ldr r6, [r10, #0x8] - ldr r5, [r10, #0x4] - ldr r4, [sp, #0x30] - add r0, sp, #0x8 - str r4, [sp, #0x8] - ldr r4, [r5, #0x4] - mov r9, r1 - mov r8, r2 - mov r7, r3 - blx r4 - cmp r0, #0x0 - beq _020B743C - add r11, sp, #0x8 -_020B7400: - cmp r0, #0xa - beq _020B743C - str r7, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [r10, #0x0] - mov r1, r5 - mov r2, r9 - mov r3, r8 - bl FUN_020B63CC - add r1, r9, r0 - mov r0, r11 - add r9, r1, r6 - blx r4 - cmp r0, #0x0 - bne _020B7400 -_020B743C: - ldr r1, [sp, #0x34] - cmp r1, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r11,pc} - cmp r0, #0xa - ldreq r1, [sp, #0x8] - ldr r0, [sp, #0x34] - movne r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B7468 -FUN_020B7468: ; 0x020B7468 - stmdb sp!, {r4-r6,lr} - ldrh r2, [r0, #0xc] - ldrh r3, [r0, #0xe] - mov r1, #0x0 - add r2, r0, r2 - cmp r3, #0x0 - ldmleia sp!, {r4-r6,pc} - ldr r3, _020B7548 ; =0x46494E46 - ldr ip, _020B754C ; =0x43574448 - ldr r4, _020B7550 ; =0x434D4150 - ldr lr, _020B7554 ; =0x43474C50 -_020B7494: - ldr r5, [r2, #0x0] - cmp r5, r4 - bhi _020B74B0 - cmp r5, r4 - bhs _020B7518 - cmp r5, lr - b _020B752C -_020B74B0: - cmp r5, r12 - bhi _020B74C4 - cmp r5, r12 - beq _020B7500 - b _020B752C -_020B74C4: - cmp r5, r3 - bne _020B752C - add r6, r2, #0x8 - ldr r5, [r6, #0x8] - add r5, r5, r0 - str r5, [r6, #0x8] - ldr r5, [r6, #0xc] - cmp r5, #0x0 - addne r5, r5, r0 - strne r5, [r6, #0xc] - ldr r5, [r6, #0x10] - cmp r5, #0x0 - addne r5, r5, r0 - strne r5, [r6, #0x10] - b _020B752C -_020B7500: - add r6, r2, #0x8 - ldr r5, [r6, #0x4] - cmp r5, #0x0 - addne r5, r5, r0 - strne r5, [r6, #0x4] - b _020B752C -_020B7518: - add r6, r2, #0x8 - ldr r5, [r6, #0x8] - cmp r5, #0x0 - addne r5, r5, r0 - strne r5, [r6, #0x8] -_020B752C: - ldrh r5, [r0, #0xe] - ldr r6, [r2, #0x4] - add r1, r1, #0x1 - cmp r1, r5 - add r2, r2, r6 - blt _020B7494 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B7548: .word 0x46494E46 -_020B754C: .word 0x43574448 -_020B7550: .word 0x434D4150 -_020B7554: .word 0x43474C50 - - arm_func_start FUN_020B7558 -FUN_020B7558: ; 0x020B7558 - stmdb sp!, {r4-r6,lr} - movs r6, r0 - mov r5, r1 - beq _020B75C8 - cmp r6, #0x0 - beq _020B7584 - ldr r1, [r6, #0x0] - ldr r0, _020B76A8 ; =0x4E465452 - cmp r1, r0 - moveq r0, #0x1 - beq _020B7588 -_020B7584: - mov r0, #0x0 -_020B7588: - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020B75CC - cmp r6, #0x0 - beq _020B75B4 - ldrh r0, [r6, #0x6] - cmp r0, #0x100 - movcs r0, #0x1 - bhs _020B75B8 -_020B75B4: - mov r0, #0x0 -_020B75B8: - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - b _020B75CC -_020B75C8: - mov r0, #0x0 -_020B75CC: - cmp r0, #0x0 - movne r4, #0x0 - bne _020B7654 - cmp r6, #0x0 - beq _020B7640 - cmp r6, #0x0 - beq _020B75FC - ldr r1, [r6, #0x0] - ldr r0, _020B76A8 ; =0x4E465452 - cmp r1, r0 - moveq r0, #0x1 - beq _020B7600 -_020B75FC: - mov r0, #0x0 -_020B7600: - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - cmp r0, #0x0 - beq _020B7644 - cmp r6, #0x0 - beq _020B762C - ldrh r0, [r6, #0x6] - cmp r0, #0x1 - movcs r0, #0x1 - bhs _020B7630 -_020B762C: - mov r0, #0x0 -_020B7630: - cmp r0, #0x0 - movne r0, #0x1 - moveq r0, #0x0 - b _020B7644 -_020B7640: - mov r0, #0x0 -_020B7644: - cmp r0, #0x0 - movne r4, #0x1 - bne _020B7654 - bl OS_Terminate -_020B7654: - mov r0, r6 - bl FUN_020B7468 - ldr r1, _020B76AC ; =0x46494E46 - mov r0, r6 - bl FUN_020B01F8 - cmp r0, #0x0 - moveq r0, #0x0 - streq r0, [r5, #0x0] - ldmeqia sp!, {r4-r6,pc} - add r0, r0, #0x8 - str r0, [r5, #0x0] - cmp r4, #0x0 - beq _020B76A0 - ldr r2, [r5, #0x0] - mov r1, #0x0 - ldrsb r0, [r2, #0x6] - strb r0, [r2, #0x7] - ldr r0, [r5, #0x0] - strb r1, [r0, #0x6] -_020B76A0: - add r0, r4, #0x1 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B76A8: .word 0x4E465452 -_020B76AC: .word 0x46494E46 - - arm_func_start FUN_020B76B0 -FUN_020B76B0: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldrsb r2, [r0, #0x4] - ldrb r12, [r0, #0x5] - mov r4, r1 - cmp r2, r4 - subge r1, r2, r4 - movge r5, r12, lsr r1 - strgeb r1, [r0, #0x4] - bge _020B7704 - ldr r3, [r0, #0x0] - sub r1, r4, r2 - add r2, r3, #0x1 - str r2, [r0, #0x0] - ldrb r2, [r3, #0x0] - mov r5, r12, lsl r1 - strb r2, [r0, #0x5] - mov r2, #0x8 - strb r2, [r0, #0x4] - bl FUN_020B76B0 - orr r5, r0, r5 -_020B7704: - rsb r0, r4, #0x8 - mov r1, #0xff - and r0, r5, r1, asr r0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020B7718 -FUN_020B7718: ; 0x020B7718 - ldr r1, [r0, #0x0] - ldrh r2, [r1], #0x2 - str r1, [r0, #0x0] - mov r0, r2 - bx lr - - arm_func_start FUN_020B772C -FUN_020B772C: ; 0x020B772C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - ldrb r0, [r6, #0x9] - mov r5, #0x0 - cmp r0, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r7,pc} - add r4, r6, #0x8 -_020B7750: - ldrh r0, [r6, #0xe] - ldrh r1, [r4, r0] - add r0, r4, r0 - mla r0, r1, r5, r0 - ldr r0, [r0, #0x4] - add r7, r6, r0 - mov r0, r7 - bl FUN_020B79A4 - mov r0, r7 - bl FUN_020B780C - ldrb r0, [r6, #0x9] - add r5, r5, #0x1 - cmp r5, r0 - blo _020B7750 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B7790 -FUN_020B7790: ; 0x020B7790 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r8, r0 - ldrb r0, [r8, #0x9] - mov r7, r1 - mov r5, #0x1 - cmp r0, #0x0 - mov r6, #0x0 - bls _020B7800 - add r4, r8, #0x8 -_020B77B8: - ldrh r0, [r8, #0xe] - mov r1, r7 - ldrh r2, [r4, r0] - add r0, r4, r0 - mla r0, r2, r6, r0 - ldr r0, [r0, #0x4] - add r9, r8, r0 - mov r0, r9 - bl FUN_020B7A04 - and r5, r5, r0 - mov r0, r9 - mov r1, r7 - bl FUN_020B7864 - ldrb r1, [r8, #0x9] - add r6, r6, #0x1 - and r5, r5, r0 - cmp r6, r1 - blo _020B77B8 -_020B7800: - mov r0, r5 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_020B780C -FUN_020B780C: ; 0x020B780C - ldr r2, [r0, #0x8] - mov r1, #0x0 - add r2, r0, r2 - ldrh r0, [r2, #0x2] - add r12, r2, r0 - ldrb r0, [r12, #0x1] - cmp r0, #0x0 - bxls lr -_020B782C: - ldrh r2, [r12, #0x6] - ldrh r0, [r12, r2] - add r2, r12, r2 - add r2, r2, #0x4 - mla r3, r0, r1, r2 - ldrb r0, [r3, #0x3] - add r1, r1, #0x1 - ands r2, r0, #0x1 - bicne r0, r0, #0x1 - strneb r0, [r3, #0x3] - ldrb r0, [r12, #0x1] - cmp r1, r0 - blo _020B782C - bx lr - - arm_func_start FUN_020B7864 -FUN_020B7864: ; 0x020B7864 - stmdb sp!, {r4-r10,lr} - ldr r2, [r0, #0x8] - mov r10, r1 - add r9, r0, r2 - ldrh r0, [r9, #0x2] - mov r6, #0x1 - mov r7, #0x0 - add r8, r9, r0 - ldrb r0, [r8, #0x1] - cmp r0, #0x0 - bls _020B7908 - mov r5, r7 - mov r4, r7 -_020B7898: - ldrh r1, [r8, #0x6] - ldrh r0, [r10, #0x34] - add r2, r8, r1 - ldrh r1, [r2, #0x2] - add r0, r10, r0 - add r1, r2, r1 - add r1, r1, r5 - bl FUN_020BC2A0 - movs r3, r0 - beq _020B78F0 - ldrh r1, [r8, #0x6] - ldrh r0, [r8, r1] - add r1, r8, r1 - add r1, r1, #0x4 - mla r1, r0, r7, r1 - ldrb r0, [r1, #0x3] - ands r0, r0, #0x1 - bne _020B78F4 - mov r0, r9 - mov r2, r10 - bl FUN_020B7910 - b _020B78F4 -_020B78F0: - mov r6, r4 -_020B78F4: - ldrb r0, [r8, #0x1] - add r7, r7, #0x1 - add r5, r5, #0x10 - cmp r7, r0 - blo _020B7898 -_020B7908: - mov r0, r6 - ldmia sp!, {r4-r10,pc} - - arm_func_start FUN_020B7910 -FUN_020B7910: - stmdb sp!, {r4-r6,lr} - ldrh r5, [r1, #0x0] - ldr r2, [r2, #0x2c] - ldrh r4, [r3, #0x2] - mov r2, r2, lsl #0x10 - add r12, r0, r5 - mov r5, r2, lsr #0x10 - ands r2, r4, #0x1 - ldrh r4, [r3, #0x0] - moveq r3, r5, lsl #0xf - moveq r5, r3, lsr #0x10 - moveq r2, r4, lsl #0xf - moveq r4, r2, lsr #0x10 - ldrb r3, [r1, #0x2] - mov r2, #0x0 - cmp r3, #0x0 - bls _020B7994 - add r3, r4, r5 - mov r3, r3, lsl #0x10 - add r6, r0, #0x4 - mov r4, r3, lsr #0x10 -_020B7964: - ldrh r5, [r0, #0xa] - ldrb r3, [r12, r2] - add r2, r2, #0x1 - ldrh lr, [r6, r5] - add r5, r6, r5 - mla r3, lr, r3, r5 - ldr r3, [r3, #0x4] - add r3, r0, r3 - strh r4, [r3, #0x1c] - ldrb r3, [r1, #0x2] - cmp r2, r3 - blo _020B7964 -_020B7994: - ldrb r0, [r1, #0x3] - orr r0, r0, #0x1 - strb r0, [r1, #0x3] - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020B79A4 -FUN_020B79A4: ; 0x020B79A4 - stmdb sp!, {r4-r6,lr} - ldr r2, [r0, #0x8] - mov r4, #0x0 - ldrh r1, [r0, r2] - add r6, r0, r2 - add r5, r6, r1 - ldrb r0, [r5, #0x1] - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020B79C8: - ldrh r1, [r5, #0x6] - ldrh r0, [r5, r1] - add r1, r5, r1 - add r1, r1, #0x4 - mla r1, r0, r4, r1 - ldrb r0, [r1, #0x3] - ands r0, r0, #0x1 - beq _020B79F0 - mov r0, r6 - bl FUN_020B7AB8 -_020B79F0: - ldrb r0, [r5, #0x1] - add r4, r4, #0x1 - cmp r4, r0 - blo _020B79C8 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020B7A04 -FUN_020B7A04: ; 0x020B7A04 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - ldr r2, [r0, #0x8] - mov r10, r1 - ldrh r1, [r0, r2] - add r9, r0, r2 - mov r11, #0x1 - add r8, r9, r1 - ldrb r0, [r8, #0x1] - mov r7, #0x0 - cmp r0, #0x0 - bls _020B7AAC - mov r6, r7 - mov r4, r7 - add r5, r10, #0x3c -_020B7A40: - ldrh r1, [r8, #0x6] - mov r0, r5 - add r2, r8, r1 - ldrh r1, [r2, #0x2] - add r1, r2, r1 - add r1, r1, r6 - bl FUN_020BC2A0 - movs r3, r0 - beq _020B7A94 - ldrh r1, [r8, #0x6] - ldrh r0, [r8, r1] - add r1, r8, r1 - add r1, r1, #0x4 - mla r1, r0, r7, r1 - ldrb r0, [r1, #0x3] - ands r0, r0, #0x1 - bne _020B7A98 - mov r0, r9 - mov r2, r10 - bl FUN_020B7B40 - b _020B7A98 -_020B7A94: - mov r11, r4 -_020B7A98: - ldrb r0, [r8, #0x1] - add r7, r7, #0x1 - add r6, r6, #0x10 - cmp r7, r0 - blo _020B7A40 -_020B7AAC: - mov r0, r11 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B7AB8 -FUN_020B7AB8: ; 0x020B7AB8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldrh r4, [r1, #0x0] - ldrb r2, [r1, #0x2] - mov r3, #0x0 - add r12, r0, r4 - cmp r2, #0x0 - bls _020B7B28 - add r2, r0, #0x4 - mov r5, #0x1000 - ldr lr, _020B7B3C ; =0xC00F0000 -_020B7AE4: - ldrh r7, [r0, #0xa] - ldrb r4, [r12, r3] - add r3, r3, #0x1 - ldrh r6, [r2, r7] - add r7, r2, r7 - mla r4, r6, r4, r7 - ldr r4, [r4, #0x4] - add r6, r0, r4 - ldr r4, [r6, #0x14] - and r4, r4, lr - str r4, [r6, #0x14] - str r5, [r6, #0x24] - ldr r4, [r6, #0x24] - str r4, [r6, #0x28] - ldrb r4, [r1, #0x2] - cmp r3, r4 - blo _020B7AE4 -_020B7B28: - ldrb r0, [r1, #0x3] - bic r0, r0, #0x1 - strb r0, [r1, #0x3] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B7B3C: .word 0xC00F0000 - - arm_func_start FUN_020B7B40 -FUN_020B7B40: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - mov r11, r1 - mov r9, r3 - ldr r1, [r9, #0x0] - mov r10, r0 - and r0, r1, #0x1c000000 - cmp r0, #0x14000000 - ldrh r3, [r11, #0x0] - ldrne r1, [r2, #0x8] - mov r8, #0x0 - add r0, r10, r3 - str r0, [sp, #0x4] - ldrne r0, _020B7C50 ; =0x0000FFFF - andne r0, r1, r0 - strne r0, [sp, #0x0] - ldreq r1, [r2, #0x18] - ldreq r0, _020B7C50 ; =0x0000FFFF - andeq r0, r1, r0 - streq r0, [sp, #0x0] - ldrb r0, [r11, #0x2] - cmp r0, #0x0 - bls _020B7C3C - mov r4, #0x1000 - add r5, r10, #0x4 -_020B7BA4: - ldrh r6, [r10, #0xa] - ldr r0, [sp, #0x4] - ldr r1, [r9, #0x0] - ldrb r2, [r0, r8] - ldrh r3, [r5, r6] - ldr r0, [sp, #0x0] - add r6, r5, r6 - add r0, r1, r0 - mla r1, r3, r2, r6 - ldr r1, [r1, #0x4] - add r6, r10, r1 - ldr r1, [r6, #0x14] - orr r0, r1, r0 - str r0, [r6, #0x14] - ldr r3, [r9, #0x4] - ldr r0, _020B7C54 ; =0x000007FF - ldrh r1, [r6, #0x20] - and r2, r3, r0 - and r7, r0, r3, lsr #0xb - cmp r2, r1 - moveq r0, r4 - beq _020B7C08 - mov r0, r2, lsl #0xc - mov r1, r1, lsl #0xc - bl FX_Div -_020B7C08: - str r0, [r6, #0x24] - ldrh r1, [r6, #0x22] - cmp r7, r1 - moveq r0, r4 - beq _020B7C28 - mov r0, r7, lsl #0xc - mov r1, r1, lsl #0xc - bl FX_Div -_020B7C28: - str r0, [r6, #0x28] - ldrb r0, [r11, #0x2] - add r8, r8, #0x1 - cmp r8, r0 - blo _020B7BA4 -_020B7C3C: - ldrb r0, [r11, #0x3] - orr r0, r0, #0x1 - strb r0, [r11, #0x3] - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B7C50: .word 0x0000FFFF -_020B7C54: .word 0x000007FF - - arm_func_start FUN_020B7C58 -FUN_020B7C58: ; 0x020B7C58 - ldrh r2, [r0, #0x32] - mov r1, #0x0 - bic r2, r2, #0x1 - strh r2, [r0, #0x32] - ldr r2, [r0, #0x2c] - str r1, [r0, #0x2c] - mov r0, r2 - bx lr - - arm_func_start FUN_020B7C78 -FUN_020B7C78: ; 0x020B7C78 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - movs r4, r1 - mov r5, r0 - beq _020B7C90 - bl GX_BeginLoadTexPltt -_020B7C90: - ldrh r2, [r5, #0x30] - ldr r0, [r5, #0x38] - ldr r3, [r5, #0x2c] - ldr r1, _020B7CD8 ; =0x0000FFFF - add r0, r5, r0 - and r1, r3, r1 - mov r1, r1, lsl #0x3 - mov r2, r2, lsl #0x3 - bl GX_LoadTexPltt - ldrh r0, [r5, #0x32] - cmp r4, #0x0 - addeq sp, sp, #0x4 - orr r0, r0, #0x1 - strh r0, [r5, #0x32] - ldmeqia sp!, {r4-r5,pc} - bl GX_EndLoadTexPltt - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B7CD8: .word 0x0000FFFF - - arm_func_start FUN_020B7CDC -FUN_020B7CDC: ; 0x020B7CDC - str r1, [r0, #0x2c] - bx lr - - arm_func_start FUN_020B7CE4 -FUN_020B7CE4: ; 0x020B7CE4 - ldrh r0, [r0, #0x30] - mov r0, r0, lsl #0x3 - bx lr - - arm_func_start FUN_020B7CF0 -FUN_020B7CF0: ; 0x020B7CF0 - ldrh r12, [r0, #0x10] - mov r3, #0x0 - bic r12, r12, #0x1 - strh r12, [r0, #0x10] - ldrh r12, [r0, #0x20] - bic r12, r12, #0x1 - strh r12, [r0, #0x20] - ldr r12, [r0, #0x8] - str r12, [r1, #0x0] - str r3, [r0, #0x8] - ldr r1, [r0, #0x18] - str r1, [r2, #0x0] - str r3, [r0, #0x18] - bx lr - - arm_func_start FUN_020B7D28 -FUN_020B7D28: ; 0x020B7D28 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - movs r8, r1 - mov r9, r0 - beq _020B7D40 - bl GX_BeginLoadTex -_020B7D40: - ldrh r0, [r9, #0xc] - movs r2, r0, lsl #0x3 - beq _020B7D74 - ldr r1, [r9, #0x8] - ldr r0, _020B7DF4 ; =0x0000FFFF - ldr r3, [r9, #0x14] - and r1, r1, r0 - add r0, r9, r3 - mov r1, r1, lsl #0x3 - bl GX_LoadTex - ldrh r0, [r9, #0x10] - orr r0, r0, #0x1 - strh r0, [r9, #0x10] -_020B7D74: - ldrh r0, [r9, #0x1c] - movs r7, r0, lsl #0x3 - beq _020B7DDC - ldr r1, [r9, #0x18] - ldr r0, _020B7DF4 ; =0x0000FFFF - ldr r3, [r9, #0x24] - and r4, r1, r0 - mov r5, r4, lsl #0x3 - ldr r6, [r9, #0x28] - mov r1, r5 - mov r2, r7 - add r0, r9, r3 - add r6, r9, r6 - bl GX_LoadTex - ldr r0, _020B7DF8 ; =0x0001FFFF - and r1, r5, #0x40000 - and r0, r0, r4, lsl #0x3 - mov r0, r0, lsr #0x1 - add r2, r0, #0x20000 - mov r0, r6 - add r1, r2, r1, lsr #0x2 - mov r2, r7, lsr #0x1 - bl GX_LoadTex - ldrh r0, [r9, #0x20] - orr r0, r0, #0x1 - strh r0, [r9, #0x20] -_020B7DDC: - cmp r8, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r9,pc} - bl GX_EndLoadTex - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020B7DF4: .word 0x0000FFFF -_020B7DF8: .word 0x0001FFFF - - arm_func_start FUN_020B7DFC -FUN_020B7DFC: ; 0x020B7DFC - cmp r1, #0x0 - strne r1, [r0, #0x8] - cmp r2, #0x0 - strne r2, [r0, #0x18] - bx lr - - arm_func_start FUN_020B7E10 -FUN_020B7E10: ; 0x020B7E10 - ldrh r0, [r0, #0x1c] - mov r0, r0, lsl #0x3 - bx lr - - arm_func_start FUN_020B7E1C -FUN_020B7E1C: ; 0x020B7E1C - ldrh r0, [r0, #0xc] - mov r0, r0, lsl #0x3 - bx lr - - arm_func_start FUN_020B7E28 -FUN_020B7E28: ; 0x020B7E28 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - add r0, r5, #0x8 - mov r4, r1 - bl FUN_020B7E88 - cmp r0, #0x0 - bne _020B7E74 - mov r1, r4 - add r0, r5, #0x10 - bl FUN_020B7E88 - cmp r0, #0x0 - bne _020B7E74 - mov r1, r4 - add r0, r5, #0x18 - bl FUN_020B7E88 - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} -_020B7E74: - ldr r0, [r5, #0x0] - orr r0, r0, #0x10 - str r0, [r5, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020B7E88 -FUN_020B7E88: - ldr r2, [r0, #0x0] - cmp r2, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r2, r1 - bne _020B7EB8 - ldr r3, [r2, #0x10] - mov r2, #0x0 - str r3, [r0, #0x0] - str r2, [r1, #0x10] - mov r0, #0x1 - bx lr -_020B7EB8: - ldr r3, [r2, #0x10] - cmp r3, #0x0 - beq _020B7EF4 -_020B7EC4: - cmp r3, r1 - bne _020B7EE4 - ldr r1, [r3, #0x10] - mov r0, #0x0 - str r1, [r2, #0x10] - str r0, [r3, #0x10] - mov r0, #0x1 - bx lr -_020B7EE4: - mov r2, r3 - ldr r3, [r3, #0x10] - cmp r3, #0x0 - bne _020B7EC4 -_020B7EF4: - mov r0, #0x0 - bx lr - - arm_func_start FUN_020B7EFC -FUN_020B7EFC: ; 0x020B7EFC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - ldr r2, [r4, #0x8] - mov r5, r0 - ldrb r0, [r2, #0x0] - cmp r0, #0x4a - beq _020B7F50 - cmp r0, #0x4d - beq _020B7F34 - cmp r0, #0x56 - beq _020B7F6C - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020B7F34: - add r0, r5, #0x3c - bl FUN_020B7F88 - mov r1, r4 - add r0, r5, #0x8 - bl FUN_020B7FF8 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020B7F50: - add r0, r5, #0x44 - bl FUN_020B7F88 - mov r1, r4 - add r0, r5, #0x10 - bl FUN_020B7FF8 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020B7F6C: - add r0, r5, #0x4c - bl FUN_020B7F88 - mov r1, r4 - add r0, r5, #0x18 - bl FUN_020B7FF8 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020B7F88 -FUN_020B7F88: ; 0x020B7F88 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - mov r3, #0x1 - mov r4, #0x0 -_020B7FA4: - ldrb r2, [r1, #0x19] - mov r5, r4 - cmp r2, #0x0 - ble _020B7FE4 -_020B7FB4: - add r2, r1, r5, lsl #0x1 - ldrh r2, [r2, #0x1a] - ands r2, r2, #0x100 - movne lr, r5, asr #0x5 - andne r2, r5, #0x1f - ldrne r12, [r0, lr, lsl #0x2] - add r5, r5, #0x1 - orrne r2, r12, r3, lsl r2 - strne r2, [r0, lr, lsl #0x2] - ldrb r2, [r1, #0x19] - cmp r5, r2 - blt _020B7FB4 -_020B7FE4: - ldr r1, [r1, #0x10] - cmp r1, #0x0 - bne _020B7FA4 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020B7FF8 -FUN_020B7FF8: ; 0x020B7FF8 - ldr r12, [r0, #0x0] - cmp r12, #0x0 - streq r1, [r0, #0x0] - bxeq lr - ldr r3, [r12, #0x10] - cmp r3, #0x0 - bne _020B8058 - ldrb r3, [r12, #0x18] - ldrb r2, [r1, #0x18] - cmp r3, r2 - bls _020B8050 - ldr r2, [r1, #0x10] - mov r3, r1 - cmp r2, #0x0 - beq _020B8044 -_020B8034: - ldr r3, [r3, #0x10] - ldr r2, [r3, #0x10] - cmp r2, #0x0 - bne _020B8034 -_020B8044: - str r12, [r3, #0x10] - str r1, [r0, #0x0] - bx lr -_020B8050: - str r1, [r12, #0x10] - bx lr -_020B8058: - cmp r3, #0x0 - beq _020B80AC - ldrb r2, [r1, #0x18] -_020B8064: - ldrb r0, [r3, #0x18] - cmp r0, r2 - blo _020B809C - ldr r0, [r1, #0x10] - mov r2, r1 - cmp r0, #0x0 - beq _020B8090 -_020B8080: - ldr r2, [r2, #0x10] - ldr r0, [r2, #0x10] - cmp r0, #0x0 - bne _020B8080 -_020B8090: - str r1, [r12, #0x10] - str r3, [r2, #0x10] - bx lr -_020B809C: - mov r12, r3 - ldr r3, [r3, #0x10] - cmp r3, #0x0 - bne _020B8064 -_020B80AC: - str r1, [r12, #0x10] - bx lr - - arm_func_start FUN_020B80B4 -FUN_020B80B4: ; 0x020B80B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r1, r5 - mov r0, #0x0 - mov r2, #0x54 - bl MIi_CpuClear32 - ldr r0, _020B8104 ; =UNK_021065B4 - ldr r1, _020B8108 ; =UNK_021065B0 - ldr r2, [r0, #0x0] - ldr r0, _020B810C ; =UNK_021065AC - str r2, [r5, #0xc] - ldr r1, [r1, #0x0] - str r1, [r5, #0x14] - ldr r0, [r0, #0x0] - str r0, [r5, #0x1c] - str r4, [r5, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020B8104: .word UNK_021065B4 -_020B8108: .word UNK_021065B0 -_020B810C: .word UNK_021065AC - - arm_func_start FUN_020B8110 -FUN_020B8110: ; 0x020B8110 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r12, #0x0 - str r12, [r0, #0x0] - str r1, [r0, #0x8] - str r12, [r0, #0x10] - mov r4, #0x7f - strb r4, [r0, #0x18] - mov r4, #0x1000 - str r4, [r0, #0x4] - ldr lr, _020B81A4 ; =UNK_02106594 - str r3, [r0, #0x14] - ldr r6, [lr, #0x0] - cmp r6, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r7,pc} - ldrb r7, [r1, #0x0] - ldr r4, _020B81A8 ; =UNK_021065B8 -_020B8158: - ldrb r3, [r4, r12, lsl #0x3] - mov r5, r12, lsl #0x3 - cmp r7, r3 - bne _020B8190 - add r3, r4, r5 - ldrh lr, [r1, #0x2] - ldrh r3, [r3, #0x2] - cmp lr, r3 - bne _020B8190 - ldr r3, _020B81AC ; =UNK_021065BC - ldr r3, [r3, r5] - blx r3 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} -_020B8190: - add r12, r12, #0x1 - cmp r12, r6 - blo _020B8158 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B81A4: .word UNK_02106594 -_020B81A8: .word UNK_021065B8 -_020B81AC: .word UNK_021065BC - - arm_func_start FUN_020B81B0 -FUN_020B81B0: ; 0x020B81B0 - ldrb r0, [r0, #0x0] - cmp r0, #0x4a - beq _020B81E4 - cmp r0, #0x4d - beq _020B81D0 - cmp r0, #0x56 - beq _020B81E4 - b _020B81F8 -_020B81D0: - ldrb r0, [r1, #0x18] - mov r0, r0, lsl #0x1 - add r0, r0, #0x1c - bic r0, r0, #0x3 - bx lr -_020B81E4: - ldrb r0, [r1, #0x17] - mov r0, r0, lsl #0x1 - add r0, r0, #0x1c - bic r0, r0, #0x3 - bx lr -_020B81F8: - mov r0, #0x0 - bx lr - - arm_func_start FUN_020B8200 -FUN_020B8200: ; 0x020B8200 - cmp r0, #0x0 - ldrne ip, _020B8260 ; =UNK_021CED18 - ldrne r12, [r12, #0xa0] - andne r12, r12, #0xff - strne r12, [r0, #0x0] - cmp r1, #0x0 - ldrne r0, _020B8260 ; =UNK_021CED18 - ldrne r0, [r0, #0xa0] - movne r0, r0, lsr #0x8 - andne r0, r0, #0xff - strne r0, [r1, #0x0] - cmp r2, #0x0 - ldrne r0, _020B8260 ; =UNK_021CED18 - ldrne r0, [r0, #0xa0] - movne r0, r0, lsr #0x10 - andne r0, r0, #0xff - strne r0, [r2, #0x0] - cmp r3, #0x0 - ldrne r0, _020B8260 ; =UNK_021CED18 - ldrne r0, [r0, #0xa0] - movne r0, r0, lsr #0x18 - andne r0, r0, #0xff - strne r0, [r3, #0x0] - bx lr - .balign 4 -_020B8260: .word UNK_021CED18 - - arm_func_start FUN_020B8264 -FUN_020B8264: ; 0x020B8264 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020B829C ; =UNK_021CED18 - ldr r0, [r0, #0xfc] - ands r0, r0, #0x80 - bne _020B8290 - bl FUN_020B82E4 - ldr r0, _020B829C ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - orr r1, r1, #0x80 - str r1, [r0, #0xfc] -_020B8290: - ldr r0, _020B82A0 ; =UNK_021CEE78 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B829C: .word UNK_021CED18 -_020B82A0: .word UNK_021CEE78 - - arm_func_start FUN_020B82A4 -FUN_020B82A4: ; 0x020B82A4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020B82DC ; =UNK_021CED18 - ldr r0, [r0, #0xfc] - ands r0, r0, #0x80 - bne _020B82D0 - bl FUN_020B82E4 - ldr r0, _020B82DC ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - orr r1, r1, #0x80 - str r1, [r0, #0xfc] -_020B82D0: - ldr r0, _020B82E0 ; =UNK_021CEE48 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B82DC: .word UNK_021CED18 -_020B82E0: .word UNK_021CEE48 - - arm_func_start FUN_020B82E4 -FUN_020B82E4: ; 0x020B82E4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020B8330 ; =UNK_021CEDD4 - ldr r1, _020B8334 ; =UNK_021CED64 - ldr r2, _020B8338 ; =UNK_021CEE48 - bl MTX_Concat43 - ldr r3, _020B833C ; =UNK_021CED18 - ldr r0, _020B8338 ; =UNK_021CEE48 - ldr r2, [r3, #0xf4] - mov r1, r0 - str r2, [sp, #0x0] - ldr r2, [r3, #0xec] - ldr r3, [r3, #0xf0] - bl MTX_ScaleApply43 - ldr r0, _020B8338 ; =UNK_021CEE48 - ldr r1, _020B8340 ; =UNK_021CEE78 - bl MTX_Inverse43 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B8330: .word UNK_021CEDD4 -_020B8334: .word UNK_021CED64 -_020B8338: .word UNK_021CEE48 -_020B833C: .word UNK_021CED18 -_020B8340: .word UNK_021CEE78 - - arm_func_start FUN_020B8344 -FUN_020B8344: ; 0x020B8344 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020B8384 ; =UNK_021CED18 - ldr r0, [r0, #0xfc] - ands r0, r0, #0x8 - bne _020B8378 - ldr r0, _020B8388 ; =UNK_021CED64 - ldr r1, _020B838C ; =UNK_021CEE18 - bl MTX_Inverse43 - ldr r0, _020B8384 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - orr r1, r1, #0x8 - str r1, [r0, #0xfc] -_020B8378: - ldr r0, _020B838C ; =UNK_021CEE18 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B8384: .word UNK_021CED18 -_020B8388: .word UNK_021CED64 -_020B838C: .word UNK_021CEE18 - - arm_func_start FUN_020B8390 -FUN_020B8390: ; 0x020B8390 - orr r0, r0, r1, lsl #0x4 - - arm_func_start FUN_020B8394 -FUN_020B8394: ; 0x020B8394 - ldr r1, [sp, #0x4] - orr r0, r0, r2, lsl #0x6 - orr r0, r1, r0 - ldr r2, [sp, #0x0] - orr r1, r0, r3, lsl #0x18 - ldr r0, _020B83B8 ; =UNK_021CED18 - orr r1, r1, r2, lsl #0x10 - str r1, [r0, #0x9c] - bx lr - .balign 4 -_020B83B8: .word UNK_021CED18 - - arm_func_start FUN_020B83BC -FUN_020B83BC: ; 0x020B83BC - cmp r2, #0x0 - movne r2, #0x1 - orr r1, r0, r1, lsl #0x10 - moveq r2, #0x0 - ldr r0, _020B83DC ; =UNK_021CED18 - orr r1, r1, r2, lsl #0xf - str r1, [r0, #0x98] - bx lr - .balign 4 -_020B83DC: .word UNK_021CED18 - - arm_func_start FUN_020B83E0 -FUN_020B83E0: ; 0x020B83E0 - cmp r2, #0x0 - movne r2, #0x1 - orr r1, r0, r1, lsl #0x10 - moveq r2, #0x0 - ldr r0, _020B8400 ; =UNK_021CED18 - orr r1, r1, r2, lsl #0xf - str r1, [r0, #0x94] - bx lr - .balign 4 -_020B8400: .word UNK_021CED18 - - arm_func_start FUN_020B8404 -FUN_020B8404: ; 0x020B8404 - ldr r2, _020B8414 ; =UNK_021CEDC0 - orr r1, r1, r0, lsl #0x1e - str r1, [r2, r0, lsl #0x2] - bx lr - .balign 4 -_020B8414: .word UNK_021CEDC0 - - arm_func_start FUN_020B8418 -FUN_020B8418: ; 0x020B8418 - stmdb sp!, {r4,lr} - ldr ip, _020B8444 ; =0x000003FF - ldr lr, _020B8448 ; =UNK_021CED98 - and r4, r12, r1, asr #0x3 - and r1, r12, r2, asr #0x3 - and r2, r12, r3, asr #0x3 - orr r1, r4, r1, lsl #0xa - orr r1, r1, r2, lsl #0x14 - orr r1, r1, r0, lsl #0x1e - str r1, [lr, r0, lsl #0x2] - ldmia sp!, {r4,pc} - .balign 4 -_020B8444: .word 0x000003FF -_020B8448: .word UNK_021CED98 - - arm_func_start FUN_020B844C -FUN_020B844C: ; 0x020B844C - ldr r3, _020B846C ; =UNK_021CEE04 - ldmia r0, {r0-r2} - stmia r3, {r0-r2} - ldr r0, _020B8470 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - bic r1, r1, #0xa4 - str r1, [r0, #0xfc] - bx lr - .balign 4 -_020B846C: .word UNK_021CEE04 -_020B8470: .word UNK_021CED18 - - arm_func_start FUN_020B8474 -FUN_020B8474: ; 0x020B8474 - ldr r3, _020B8494 ; =UNK_021CEDF8 - ldmia r0, {r0-r2} - stmia r3, {r0-r2} - ldr r0, _020B8498 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - bic r1, r1, #0xa4 - str r1, [r0, #0xfc] - bx lr - .balign 4 -_020B8494: .word UNK_021CEDF8 -_020B8498: .word UNK_021CED18 - - arm_func_start FUN_020B849C -FUN_020B849C: ; 0x020B849C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r1, _020B84D4 ; =UNK_021CED18 - mov r2, #0x3e - ldr r0, [r1], #0x4 - bl FUN_020BB1C0 - ldr r0, _020B84D4 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - bic r1, r1, #0x1 - str r1, [r0, #0xfc] - bic r1, r1, #0x2 - str r1, [r0, #0xfc] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020B84D4: .word UNK_021CED18 - - arm_func_start FUN_020B84D8 -FUN_020B84D8: ; 0x020B84D8 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r8, _020B85F4 ; =0x17101610 - ldr r1, _020B85F8 ; =UNK_021CED18 - ldr r5, _020B85FC ; =0x32323232 - ldr r4, _020B8600 ; =0x60293130 - ldr r3, _020B8604 ; =0x33333333 - ldr r2, _020B8608 ; =0x002A1B19 - mov r7, #0x0 - mov r6, #0x2 - ldr r0, _020B860C ; =UNK_021CED64 - str r8, [r1, #0x0] - str r7, [r1, #0x4] - str r6, [r1, #0x48] - str r5, [r1, #0x7c] - str r4, [r1, #0x90] - str r3, [r1, #0xa4] - str r2, [r1, #0xb8] - bl MTX_Identity43_ - ldr r0, _020B8610 ; =UNK_021CED20 - bl MTX_Identity44_ - mov r2, r7 - ldr r1, _020B85F8 ; =UNK_021CED18 - ldr r7, _020B8614 ; =0x4210C210 - ldr r0, _020B8618 ; =0x40000200 - ldr lr, _020B861C ; =0x2D8B62D8 - ldr sb, _020B8620 ; =0x800001FF - ldr r8, _020B8624 ; =0xC0080000 - ldr r6, _020B8628 ; =0x001F008F - ldr r5, _020B862C ; =0xBFFF0000 - ldr r4, _020B8630 ; =0x00007FFF - ldr ip, _020B8634 ; =0x800003E0 - ldr r3, _020B8638 ; =0xC0007C00 - str r0, [r1, #0x84] - str lr, [r1, #0x80] - mov lr, #0x4000001f - ldr r0, _020B863C ; =UNK_021CEDD4 - str r9, [r1, #0x88] - str r8, [r1, #0x8c] - str r7, [r1, #0x94] - str r7, [r1, #0x98] - str r6, [r1, #0x9c] - str r5, [r1, #0xa0] - str r4, [r1, #0xa8] - str lr, [r1, #0xac] - str r12, [r1, #0xb0] - str r3, [r1, #0xb4] - str r2, [r1, #0xe0] - str r2, [r1, #0xe4] - str r2, [r1, #0xe8] - bl MTX_Identity33_ - mov r3, #0x1000 - ldr r0, _020B85F8 ; =UNK_021CED18 - mov r2, #0x0 - rsb r1, r3, #0x0 - str r3, [r0, #0xec] - str r3, [r0, #0xf0] - str r3, [r0, #0xf4] - str r2, [r0, #0xf8] - str r2, [r0, #0xfc] - str r2, [r0, #0x248] - str r2, [r0, #0x244] - str r2, [r0, #0x240] - str r2, [r0, #0x254] - str r2, [r0, #0x24c] - str r3, [r0, #0x250] - str r2, [r0, #0x25c] - str r2, [r0, #0x258] - str r1, [r0, #0x260] - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020B85F4: .word 0x17101610 -_020B85F8: .word UNK_021CED18 -_020B85FC: .word 0x32323232 -_020B8600: .word 0x60293130 -_020B8604: .word 0x33333333 -_020B8608: .word 0x002A1B19 -_020B860C: .word UNK_021CED64 -_020B8610: .word UNK_021CED20 -_020B8614: .word 0x4210C210 -_020B8618: .word 0x40000200 -_020B861C: .word 0x2D8B62D8 -_020B8620: .word 0x800001FF -_020B8624: .word 0xC0080000 -_020B8628: .word 0x001F008F -_020B862C: .word 0xBFFF0000 -_020B8630: .word 0x00007FFF -_020B8634: .word 0x800003E0 -_020B8638: .word 0xC0007C00 -_020B863C: .word UNK_021CEDD4 - - arm_func_start FUN_020B8640 -FUN_020B8640: ; 0x020B8640 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x8 - mov r7, r0 - mov r0, #0x0 - mov r6, r1 - str r0, [r7, #0x0] - add r4, sp, #0x0 - mov r5, r2, lsl #0x1 - mov r8, #0x1 -_020B8664: - add r1, r5, r6 - ldrh r2, [r1, #0x1a] - ands r1, r2, #0x100 - beq _020B869C - ldr r3, [r6, #0xc] - mov r0, r4 - mov r1, r6 - and r2, r2, #0xff - blx r3 - ldr r2, [r7, #0x0] - ldr r1, [sp, #0x0] - mov r0, r8 - orr r1, r2, r1 - str r1, [r7, #0x0] -_020B869C: - ldr r6, [r6, #0x10] - cmp r6, #0x0 - bne _020B8664 - add sp, sp, #0x8 - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020B86B0 -FUN_020B86B0: ; 0x020B86B0 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x5c - mov r9, r1 - ldr r3, [r9, #0x10] - mov r10, r0 - mov r8, r2 - cmp r3, #0x0 - bne _020B8704 - add r2, r9, r8, lsl #0x1 - ldrh r4, [r2, #0x1a] - and r2, r4, #0x300 - cmp r2, #0x100 - addne sp, sp, #0x5c - movne r0, #0x0 - ldmneia sp!, {r4-r11,pc} - ldr r3, [r9, #0xc] - and r2, r4, #0xff - blx r3 - add sp, sp, #0x5c - mov r0, #0x1 - ldmia sp!, {r4-r11,pc} -_020B8704: - mov r7, #0x0 - mov r3, r7 - mov r4, r9 - mov r2, r8, lsl #0x1 -_020B8714: - add r0, r2, r4 - ldrh r0, [r0, #0x1a] - and r0, r0, #0x300 - cmp r0, #0x100 - ldreq r0, [r4, #0x4] - moveq r1, r4 - ldr r4, [r4, #0x10] - addeq r7, r7, r0 - addeq r3, r3, #0x1 - cmp r4, #0x0 - bne _020B8714 - cmp r7, #0x0 - addeq sp, sp, #0x5c - moveq r0, #0x0 - ldmeqia sp!, {r4-r11,pc} - cmp r3, #0x1 - bne _020B877C - add r0, r1, r8, lsl #0x1 - ldrh r2, [r0, #0x1a] - ldr r3, [r1, #0xc] - mov r0, r10 - and r2, r2, #0xff - blx r3 - add sp, sp, #0x5c - mov r0, #0x1 - ldmia sp!, {r4-r11,pc} -_020B877C: - mov r1, r10 - mov r0, #0x0 - mov r2, #0x58 - bl MIi_CpuClearFast - mvn r0, #0x0 - str r0, [r10, #0x0] - add r5, sp, #0x0 - add r4, sp, #0x4 - add r11, sp, #0x10 -_020B87A0: - add r0, r9, r8, lsl #0x1 - ldrh r2, [r0, #0x1a] - and r0, r2, #0x300 - cmp r0, #0x100 - bne _020B8948 - ldr r0, [r9, #0x4] - cmp r0, #0x0 - ble _020B8948 - ldr r3, [r9, #0xc] - mov r0, r5 - mov r1, r9 - and r2, r2, #0xff - blx r3 - cmp r7, #0x1000 - ldreq r6, [r9, #0x4] - beq _020B87F0 - ldr r0, [r9, #0x4] - mov r1, r7 - bl FX_Div - mov r6, r0 -_020B87F0: - ldr r3, [sp, #0x0] - mov r1, r4 - mov r2, r6 - add r0, r10, #0x4 - and r3, r3, #0x1 - bl FUN_020B8998 - ldr r1, [sp, #0x0] - add r0, r10, #0x10 - and r3, r1, #0x8 - mov r1, r11 - mov r2, r6 - bl FUN_020B8998 - ldr r3, [sp, #0x0] - add r0, r10, #0x1c - add r1, sp, #0x1c - mov r2, r6 - and r3, r3, #0x10 - bl FUN_020B8998 - ldr r0, [sp, #0x0] - ands r0, r0, #0x4 - bne _020B8898 - ldr r0, [sp, #0x4c] - ldr r2, [r10, #0x4c] - smull r1, r0, r6, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - add r0, r2, r1 - str r0, [r10, #0x4c] - ldr r0, [sp, #0x50] - ldr r2, [r10, #0x50] - smull r1, r0, r6, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - add r0, r2, r1 - str r0, [r10, #0x50] - ldr r0, [sp, #0x54] - ldr r2, [r10, #0x54] - smull r1, r0, r6, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - add r0, r2, r1 - str r0, [r10, #0x54] -_020B8898: - ldr r0, [sp, #0x0] - ands r0, r0, #0x2 - bne _020B8920 - ldr r0, [sp, #0x28] - ldr r1, [r10, #0x28] - mul r0, r6, r0 - add r0, r1, r0, asr #0xc - str r0, [r10, #0x28] - ldr r0, [sp, #0x2c] - ldr r1, [r10, #0x2c] - mul r0, r6, r0 - add r0, r1, r0, asr #0xc - str r0, [r10, #0x2c] - ldr r0, [sp, #0x30] - ldr r1, [r10, #0x30] - mul r0, r6, r0 - add r0, r1, r0, asr #0xc - str r0, [r10, #0x30] - ldr r0, [sp, #0x34] - ldr r1, [r10, #0x34] - mul r0, r6, r0 - add r0, r1, r0, asr #0xc - str r0, [r10, #0x34] - ldr r0, [sp, #0x38] - ldr r1, [r10, #0x38] - mul r0, r6, r0 - add r0, r1, r0, asr #0xc - str r0, [r10, #0x38] - ldr r0, [sp, #0x3c] - ldr r1, [r10, #0x3c] - mul r0, r6, r0 - add r0, r1, r0, asr #0xc - str r0, [r10, #0x3c] - b _020B8938 -_020B8920: - ldr r0, [r10, #0x28] - add r0, r0, r6 - str r0, [r10, #0x28] - ldr r0, [r10, #0x38] - add r0, r0, r6 - str r0, [r10, #0x38] -_020B8938: - ldr r1, [r10, #0x0] - ldr r0, [sp, #0x0] - and r0, r1, r0 - str r0, [r10, #0x0] -_020B8948: - ldr r9, [r9, #0x10] - cmp r9, #0x0 - bne _020B87A0 - add r0, r10, #0x28 - add r1, r10, #0x34 - add r2, r10, #0x40 - bl VEC_CrossProduct - add r0, r10, #0x28 - mov r1, r0 - bl VEC_Normalize - add r0, r10, #0x40 - mov r1, r0 - bl VEC_Normalize - add r0, r10, #0x40 - add r1, r10, #0x28 - add r2, r10, #0x34 - bl VEC_CrossProduct - mov r0, #0x1 - add sp, sp, #0x5c - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020B8998 -FUN_020B8998: - cmp r3, #0x0 - beq _020B89C8 - ldr r1, [r0, #0x0] - add r1, r1, r2 - str r1, [r0, #0x0] - ldr r1, [r0, #0x4] - add r1, r1, r2 - str r1, [r0, #0x4] - ldr r1, [r0, #0x8] - add r1, r1, r2 - str r1, [r0, #0x8] - bx lr -_020B89C8: - ldr r3, [r1, #0x0] - ldr r12, [r0, #0x0] - mul r3, r2, r3 - add r3, r12, r3, asr #0xc - str r3, [r0, #0x0] - ldr r3, [r1, #0x4] - ldr r12, [r0, #0x4] - mul r3, r2, r3 - add r3, r12, r3, asr #0xc - str r3, [r0, #0x4] - ldr r1, [r1, #0x8] - ldr r3, [r0, #0x8] - mul r1, r2, r1 - add r1, r3, r1, asr #0xc - str r1, [r0, #0x8] - bx lr - - arm_func_start FUN_020B8A08 -FUN_020B8A08: ; 0x020B8A08 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r0 - mov r5, r1 - mov r0, #0x0 - mov r4, r2, lsl #0x1 - mov r7, #0x1 -_020B8A24: - add r1, r4, r5 - ldrh r2, [r1, #0x1a] - ands r1, r2, #0x100 - beq _020B8A4C - ldr r3, [r5, #0xc] - mov r0, r6 - mov r1, r5 - and r2, r2, #0xff - blx r3 - mov r0, r7 -_020B8A4C: - ldr r5, [r5, #0x10] - cmp r5, #0x0 - bne _020B8A24 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020B8A60 -FUN_020B8A60: ; 0x020B8A60 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x80 - mov r5, r0 - ldr r1, [r5, #0x8] - ands r0, r1, #0x200 - bne _020B8DB4 - ands r0, r1, #0x1 - beq _020B8DB4 - add r0, sp, #0x10 - mov r1, #0x0 - bl FUN_020BB824 - mov r0, #0x1e - str r0, [sp, #0x0] - add r1, sp, #0x0 - mov r0, #0x13 - mov r2, #0x1 - bl FUN_020BB1C0 - ldr r2, [r5, #0xb0] - ldr r0, [r2, #0x10] - and r1, r0, #0xc0000000 - cmp r1, #0xc0000000 - beq _020B8AF0 - bic r0, r0, #0xc0000000 - str r0, [r2, #0x10] - ldr r2, [r5, #0xb0] - ldr r3, _020B8DC8 ; =UNK_02106630 - ldr r0, [r2, #0x10] - ldr r1, _020B8DCC ; =UNK_02106634 - orr r0, r0, #0xc0000000 - str r0, [r2, #0x10] - ldr r2, [r5, #0xb0] - ldr r0, [r3, #0x0] - ldr r4, [r2, #0x10] - mov r2, #0x1 - str r4, [r3, #0x4] - bl FUN_020BB1C0 -_020B8AF0: - ldr r0, [r5, #0x40] - cmp r0, #0x0 - ldrneb r4, [r5, #0x99] - moveq r4, #0x0 - cmp r4, #0x1 - bne _020B8B3C - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x40] - blx r1 - ldr r0, [r5, #0x40] - cmp r0, #0x0 - ldrneb r4, [r5, #0x99] - ldr r0, [r5, #0x8] - moveq r4, #0x0 - and r0, r0, #0x40 - b _020B8B40 -_020B8B3C: - mov r0, #0x0 -_020B8B40: - cmp r0, #0x0 - bne _020B8B84 - ldr r0, [r5, #0xb0] - ldr r1, _020B8DD0 ; =UNK_02106660 - ldrh r6, [r0, #0x2e] - ldrh r3, [r0, #0x2c] - mov r0, #0x16 - rsb r2, r6, #0x0 - mov lr, r3, lsl #0xf - mov r12, r2, lsl #0xf - mov r3, r6, lsl #0xf - mov r2, #0x10 - str lr, [r1, #0x0] - str r12, [r1, #0x14] - str lr, [r1, #0x30] - str r3, [r1, #0x34] - bl FUN_020BB1C0 -_020B8B84: - cmp r4, #0x2 - bne _020B8BC0 - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x40] - blx r1 - ldr r0, [r5, #0x40] - cmp r0, #0x0 - ldrneb r4, [r5, #0x99] - ldr r0, [r5, #0x8] - moveq r4, #0x0 - and r0, r0, #0x40 - b _020B8BC4 -_020B8BC0: - mov r0, #0x0 -_020B8BC4: - cmp r0, #0x0 - bne _020B8C28 - ldr r12, [r5, #0xd8] - ldr r0, [r5, #0x0] - ldrh r2, [r12, #0xa] - add r3, r12, #0x4 - ldrb r0, [r0, #0x1] - ldrh r1, [r3, r2] - add r2, r3, r2 - mla r0, r1, r0, r2 - ldr r0, [r0, #0x4] - add r1, r12, r0 - ldrh r2, [r1, #0x1e] - ands r0, r2, #0x2000 - beq _020B8C28 - add r1, r1, #0x2c - ands r0, r2, #0x2 - addeq r1, r1, #0x8 - ands r0, r2, #0x4 - addeq r1, r1, #0x4 - ands r0, r2, #0x8 - addeq r1, r1, #0x8 - mov r0, #0x18 - mov r2, #0x10 - bl FUN_020BB1C0 -_020B8C28: - cmp r4, #0x3 - movne r0, #0x0 - bne _020B8C54 - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x40] - blx r1 - ldr r0, [r5, #0x8] - and r0, r0, #0x40 -_020B8C54: - cmp r0, #0x0 - bne _020B8D84 - ldr r0, _020B8DD4 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - ands r0, r1, #0x1 - beq _020B8CA0 - ldr r1, _020B8DD8 ; =UNK_021CEDF8 - mov r0, #0x1c - mov r2, #0x3 - bl FUN_020BB1C0 - ldr r1, _020B8DDC ; =UNK_021CEDD4 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - add r1, sp, #0x10 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 - b _020B8CE0 -_020B8CA0: - ands r0, r1, #0x2 - beq _020B8CBC - add r1, sp, #0x10 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 - b _020B8CE0 -_020B8CBC: - bl FUN_020B8344 - mov r1, r0 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 - add r1, sp, #0x10 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 -_020B8CE0: - bl FUN_020BB394 - ldr r0, _020B8DE0 ; =0x04000440 - mov r2, #0x0 - ldr r1, _020B8DE4 ; =0x04000444 - str r2, [r0, #0x0] - ldr r0, _020B8DE8 ; =0x04000454 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - add r4, sp, #0x40 -_020B8D04: - mov r0, r4 - bl G3X_GetClipMtx - cmp r0, #0x0 - bne _020B8D04 - ldr r1, _020B8DEC ; =0x04000448 - mov r2, #0x1 - str r2, [r1, #0x0] - ldr r0, _020B8DE0 ; =0x04000440 - mov r2, #0x3 - str r2, [r0, #0x0] - add r1, sp, #0x40 - mov r0, #0x16 - mov r2, #0x10 - bl FUN_020BB1C0 - ldr r1, [sp, #0x70] - ldr r0, [sp, #0x74] - mov r2, r1, asr #0x4 - mov r1, r0, asr #0x4 - mov r0, r2, lsl #0x8 - mov r1, r1, lsl #0x8 - mov r0, r0, asr #0x10 - mov r1, r1, asr #0x10 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, r1, lsr #0x10 - orr r3, r2, r0, lsl #0x10 - add r1, sp, #0x4 - mov r0, #0x22 - mov r2, #0x1 - str r3, [sp, #0x4] - bl FUN_020BB1C0 -_020B8D84: - mov r3, #0x2 - add r1, sp, #0x8 - mov r0, #0x10 - mov r2, #0x1 - str r3, [sp, #0x8] - bl FUN_020BB1C0 - mov r3, #0x1e - add r1, sp, #0xc - mov r0, #0x14 - mov r2, #0x1 - str r3, [sp, #0xc] - bl FUN_020BB1C0 -_020B8DB4: - ldr r0, [r5, #0x0] - add r0, r0, #0x3 - str r0, [r5, #0x0] - add sp, sp, #0x80 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020B8DC8: .word UNK_02106630 -_020B8DCC: .word UNK_02106634 -_020B8DD0: .word UNK_02106660 -_020B8DD4: .word UNK_021CED18 -_020B8DD8: .word UNK_021CEDF8 -_020B8DDC: .word UNK_021CEDD4 -_020B8DE0: .word 0x04000440 -_020B8DE4: .word 0x04000444 -_020B8DE8: .word 0x04000454 -_020B8DEC: .word 0x04000448 - - arm_func_start FUN_020B8DF0 -FUN_020B8DF0: ; 0x020B8DF0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x44 - mov r7, r0 - ldr r1, [r7, #0x8] - ands r0, r1, #0x200 - bne _020B90E8 - ands r0, r1, #0x1 - beq _020B90E8 - ldr r2, [r7, #0xb0] - ldr r0, [r2, #0x10] - and r1, r0, #0xc0000000 - cmp r1, #0x80000000 - beq _020B8E5C - bic r0, r0, #0xc0000000 - str r0, [r2, #0x10] - ldr r2, [r7, #0xb0] - ldr r3, _020B90FC ; =UNK_02106638 - ldr r0, [r2, #0x10] - ldr r1, _020B9100 ; =UNK_0210663C - orr r0, r0, #0x80000000 - str r0, [r2, #0x10] - ldr r2, [r7, #0xb0] - ldr r0, [r3, #0x0] - ldr r4, [r2, #0x10] - mov r2, #0x1 - str r4, [r3, #0x4] - bl FUN_020BB1C0 -_020B8E5C: - mov r0, #0x3 - str r0, [sp, #0x0] - add r1, sp, #0x0 - mov r0, #0x10 - mov r2, #0x1 - bl FUN_020BB1C0 - ldr r0, [r7, #0x3c] - cmp r0, #0x0 - ldrneb r6, [r7, #0x98] - moveq r6, #0x0 - cmp r6, #0x1 - bne _020B8EC0 - ldr r1, [r7, #0x8] - mov r0, r7 - bic r1, r1, #0x40 - str r1, [r7, #0x8] - ldr r1, [r7, #0x3c] - blx r1 - ldr r0, [r7, #0x3c] - cmp r0, #0x0 - ldrneb r6, [r7, #0x98] - ldr r0, [r7, #0x8] - moveq r6, #0x0 - and r0, r0, #0x40 - b _020B8EC4 -_020B8EC0: - mov r0, #0x0 -_020B8EC4: - cmp r0, #0x0 - bne _020B8F3C - ldr r0, [r7, #0xb0] - add r1, sp, #0x38 - ldrh r4, [r0, #0x2e] - ldrh r5, [r0, #0x2c] - mov r3, #0x10000 - rsb r0, r4, #0x0 - mov r12, r0, lsl #0xf - mov lr, r5, lsl #0xf - mov r0, #0x1b - mov r2, #0x3 - str lr, [sp, #0x38] - str r12, [sp, #0x3c] - str r3, [sp, #0x40] - bl FUN_020BB1C0 - mov r0, r5, lsl #0x13 - mov r1, r4, lsl #0x13 - mov r0, r0, asr #0x10 - mov r1, r1, asr #0x10 - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r2, r0, lsr #0x10 - mov r0, r1, lsr #0x10 - orr r3, r2, r0, lsl #0x10 - add r1, sp, #0x4 - mov r0, #0x22 - mov r2, #0x1 - str r3, [sp, #0x4] - bl FUN_020BB1C0 -_020B8F3C: - cmp r6, #0x2 - bne _020B8F78 - ldr r1, [r7, #0x8] - mov r0, r7 - bic r1, r1, #0x40 - str r1, [r7, #0x8] - ldr r1, [r7, #0x3c] - blx r1 - ldr r0, [r7, #0x3c] - cmp r0, #0x0 - ldrneb r6, [r7, #0x98] - ldr r0, [r7, #0x8] - moveq r6, #0x0 - and r0, r0, #0x40 - b _020B8F7C -_020B8F78: - mov r0, #0x0 -_020B8F7C: - cmp r0, #0x0 - bne _020B8FE0 - ldr r4, [r7, #0xd8] - ldr r0, [r7, #0x0] - ldrh r2, [r4, #0xa] - add r3, r4, #0x4 - ldrb r0, [r0, #0x1] - ldrh r1, [r3, r2] - add r2, r3, r2 - mla r0, r1, r0, r2 - ldr r0, [r0, #0x4] - add r1, r4, r0 - ldrh r2, [r1, #0x1e] - ands r0, r2, #0x2000 - beq _020B8FE0 - add r1, r1, #0x2c - ands r0, r2, #0x2 - addeq r1, r1, #0x8 - ands r0, r2, #0x4 - addeq r1, r1, #0x4 - ands r0, r2, #0x8 - addeq r1, r1, #0x8 - mov r0, #0x18 - mov r2, #0x10 - bl FUN_020BB1C0 -_020B8FE0: - cmp r6, #0x3 - movne r0, #0x0 - bne _020B900C - ldr r1, [r7, #0x8] - mov r0, r7 - bic r1, r1, #0x40 - str r1, [r7, #0x8] - ldr r1, [r7, #0x3c] - blx r1 - ldr r0, [r7, #0x8] - and r0, r0, #0x40 -_020B900C: - cmp r0, #0x0 - bne _020B90D0 - mov r3, #0x2 - add r1, sp, #0x8 - mov r0, #0x10 - mov r2, #0x1 - str r3, [sp, #0x8] - bl FUN_020BB1C0 - add r1, sp, #0x14 - mov r0, #0x0 - bl FUN_020BB824 - mov r3, #0x3 - add r1, sp, #0xc - mov r0, #0x10 - mov r2, #0x1 - str r3, [sp, #0xc] - bl FUN_020BB1C0 - ldr r0, _020B9104 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - ands r0, r1, #0x1 - beq _020B9094 - ldr r1, _020B9108 ; =UNK_021CED64 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - ldr r1, _020B910C ; =UNK_021CEDD4 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - add r1, sp, #0x14 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - b _020B90D0 -_020B9094: - ands r0, r1, #0x2 - beq _020B90C0 - ldr r1, _020B9108 ; =UNK_021CED64 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - add r1, sp, #0x14 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - b _020B90D0 -_020B90C0: - add r1, sp, #0x14 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 -_020B90D0: - mov r3, #0x2 - add r1, sp, #0x10 - mov r0, #0x10 - mov r2, #0x1 - str r3, [sp, #0x10] - bl FUN_020BB1C0 -_020B90E8: - ldr r0, [r7, #0x0] - add r0, r0, #0x3 - str r0, [r7, #0x0] - add sp, sp, #0x44 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020B90FC: .word UNK_02106638 -_020B9100: .word UNK_0210663C -_020B9104: .word UNK_021CED18 -_020B9108: .word UNK_021CED64 -_020B910C: .word UNK_021CEDD4 - - arm_func_start FUN_020B9110 -FUN_020B9110: ; 0x020B9110 - stmdb sp!, {r4,lr} - sub sp, sp, #0x10 - mov r4, r0 - ldr r2, [r4, #0x8] - ands r0, r2, #0x100 - bne _020B9164 - ands r0, r2, #0x200 - bne _020B9164 - cmp r1, #0x0 - ldreq r0, [r4, #0xe0] - add r1, sp, #0x0 - streq r0, [sp, #0x8] - streq r0, [sp, #0x4] - streq r0, [sp, #0x0] - ldrne r0, [r4, #0xe4] - mov r2, #0x3 - strne r0, [sp, #0x8] - strne r0, [sp, #0x4] - strne r0, [sp, #0x0] - mov r0, #0x1b - bl FUN_020BB1C0 -_020B9164: - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - add sp, sp, #0x10 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020B9178 -FUN_020B9178: ; 0x020B9178 - stmdb sp!, {r4-r6,lr} - mov r5, r0 - ldr r0, [r5, #0x34] - cmp r0, #0x0 - ldrneb r4, [r5, #0x96] - moveq r4, #0x0 - cmp r4, #0x1 - bne _020B91CC - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x34] - blx r1 - ldr r0, [r5, #0x34] - cmp r0, #0x0 - ldrneb r4, [r5, #0x96] - ldr r0, [r5, #0x8] - moveq r4, #0x0 - and r1, r0, #0x40 - b _020B91D0 -_020B91CC: - mov r1, #0x0 -_020B91D0: - ldr r0, [r5, #0x8] - ands r0, r0, #0x100 - bne _020B9228 - cmp r1, #0x0 - bne _020B9228 - ldr r0, [r5, #0x0] - ldrb r12, [r0, #0x1] - ldrb r3, [r0, #0x2] - ldrb lr, [r0, #0x3] - ldrb r2, [r0, #0x5] - ldrb r1, [r0, #0x6] - orr r3, r12, r3, lsl #0x8 - ldrb r6, [r0, #0x4] - orr r12, r3, lr, lsl #0x10 - ldrb r3, [r0, #0x7] - orr r1, r2, r1, lsl #0x8 - orr r6, r12, r6, lsl #0x18 - ldrb r2, [r0, #0x8] - orr r1, r1, r3, lsl #0x10 - add r0, r0, r6 - orr r1, r1, r2, lsl #0x18 - bl FUN_020BB2B0 -_020B9228: - cmp r4, #0x3 - bne _020B9248 - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x34] - blx r1 -_020B9248: - ldr r0, [r5, #0x0] - add r0, r0, #0x9 - str r0, [r5, #0x0] - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020B9258 -FUN_020B9258: ; 0x020B9258 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x8c - ldr r1, [r0, #0x4] - ldr r4, [r0, #0x0] - ldr r6, [r1, #0x4] - ldrb r2, [r4, #0x2] - ldr r3, [r6, #0x10] - mov r10, #0x0 - str r0, [sp, #0x0] - str r2, [sp, #0x8] - add r3, r6, r3 - add r1, sp, #0x34 - mov r0, r10 - mov r2, #0x54 - mov r9, r10 - str r3, [sp, #0x4] - add r8, r4, #0x3 - bl MIi_CpuClearFast - bl FUN_020BB394 - ldr r0, _020B98AC ; =0x04000440 - mov r7, r10 - str r7, [r0, #0x0] - mov r0, #0x1 - ldr r2, _020B98B0 ; =0x0400044C - ldr r1, _020B98B4 ; =0x04000454 - str r0, [r2, #0x0] - str r0, [sp, #0x10] - str r7, [r1, #0x0] - mov r1, #0x2 - ldr r0, _020B98AC ; =0x04000440 - str r1, [sp, #0x14] - str r1, [r0, #0x0] - ldr r0, [sp, #0x8] - cmp r0, #0x0 - bls _020B96CC -_020B92E4: - ldrb r4, [r8, #0x1] - mov r0, #0x64 - ldr r3, _020B98B8 ; =UNK_021D0380 - mul r0, r4, r0 - str r0, [sp, #0xc] - ldr r0, [sp, #0x0] - mov r1, r4, lsr #0x5 - add r0, r0, r1, lsl #0x2 - ldr r1, [sp, #0x10] - and r2, r4, #0x1f - mov r1, r1, lsl r2 - ldr r11, [r0, #0xcc] - ldr r2, [sp, #0xc] - ands r11, r1, r11 - add r6, r3, r2 - bne _020B9358 - ldr r3, [r0, #0xcc] - mov r2, #0x54 - orr r1, r3, r1 - str r1, [r0, #0xcc] - ldr r0, [sp, #0x4] - ldr r1, _020B98BC ; =0x04000450 - mla r0, r4, r2, r0 - ldrb r2, [r8, #0x0] - str r2, [r1, #0x0] - ldr r2, [sp, #0x10] - ldr r1, _020B98AC ; =0x04000440 - str r2, [r1, #0x0] - bl G3_MultMtx43 -_020B9358: - cmp r7, #0x0 - beq _020B9500 - ldr r2, [sp, #0x6c] - ldr r1, [r5, #0x0] - str r2, [sp, #0x18] - ldr r2, [sp, #0x70] - mov r0, r1, asr #0x1f - str r2, [sp, #0x1c] - ldr r2, [sp, #0x74] - ldr r12, [sp, #0x64] - str r2, [sp, #0x20] - ldr r2, [sp, #0x78] - ldr lr, [sp, #0x68] - str r2, [sp, #0x24] - ldr r2, [sp, #0x7c] - str r2, [sp, #0x28] - ldr r2, [sp, #0x80] - str r2, [sp, #0x2c] - ldr r2, [sp, #0x84] - str r2, [sp, #0x30] - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r0, r3, lsr #0xc - orr r0, r0, r2, lsl #0x14 - adds r0, r12, r0 - str r0, [sp, #0x64] - ldr r1, [r5, #0x4] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r0, r3, lsr #0xc - orr r0, r0, r2, lsl #0x14 - adds r0, lr, r0 - str r0, [sp, #0x68] - ldr r1, [r5, #0x8] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x18] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x6c] - ldr r1, [r5, #0xc] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x1c] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x70] - ldr r1, [r5, #0x10] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x20] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x74] - ldr r1, [r5, #0x14] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x24] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x78] - ldr r1, [r5, #0x18] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x28] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x7c] - ldr r1, [r5, #0x1c] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x2c] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x80] - ldr r1, [r5, #0x20] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r1, r3, lsr #0xc - ldr r0, [sp, #0x30] - orr r1, r1, r2, lsl #0x14 - adds r0, r0, r1 - str r0, [sp, #0x84] -_020B9500: - cmp r11, #0x0 - bne _020B9538 -_020B9508: - mov r0, r6 - bl G3X_GetClipMtx - cmp r0, #0x0 - bne _020B9508 - ldr r1, [sp, #0x14] - ldr r0, _020B98AC ; =0x04000440 - str r1, [r0, #0x0] - ldr r0, [sp, #0x4] - mov r1, #0x54 - mla r0, r4, r1, r0 - add r0, r0, #0x30 - bl G3_MultMtx33 -_020B9538: - ldrb r1, [r8, #0x2] - ldr r2, [sp, #0x34] - ldr r0, [r6, #0x0] - mov r10, r1, lsl #0x4 - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x34] - mov r9, r10, asr #0x1f - ldr r2, [sp, #0x38] - ldr r0, [r6, #0x4] - ldr r3, [sp, #0x3c] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x38] - ldr r0, [r6, #0x8] - ldr r2, [sp, #0x40] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r3, r1 - str r0, [sp, #0x3c] - ldr r0, [r6, #0x10] - ldr r3, [sp, #0x44] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x40] - ldr r0, [r6, #0x14] - ldr r2, [sp, #0x48] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r3, r1 - str r0, [sp, #0x44] - ldr r0, [r6, #0x18] - ldr r3, [sp, #0x4c] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x48] - ldr r0, [r6, #0x20] - ldr r2, [sp, #0x50] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r3, r1 - str r0, [sp, #0x4c] - ldr r0, [r6, #0x24] - ldr r3, [sp, #0x54] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x50] - ldr r0, [r6, #0x28] - ldr r2, [sp, #0x58] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r3, r1 - str r0, [sp, #0x54] - ldr r0, [r6, #0x30] - ldr r3, [sp, #0x5c] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x58] - ldr r0, [r6, #0x34] - ldr r2, [sp, #0x60] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r3, r1 - str r0, [sp, #0x5c] - ldr r0, [r6, #0x38] - smull r1, r0, r10, r0 - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - adds r0, r2, r1 - str r0, [sp, #0x60] - cmp r11, #0x0 - ldr r1, _020B98C0 ; =UNK_021D03C0 - ldr r0, [sp, #0xc] - add r5, r1, r0 - add r8, r8, #0x3 - bne _020B96BC -_020B96AC: - mov r0, r5 - bl G3X_GetVectorMtx - cmp r0, #0x0 - bne _020B96AC -_020B96BC: - ldr r0, [sp, #0x8] - add r7, r7, #0x1 - cmp r7, r0 - blo _020B92E4 -_020B96CC: - ldr r1, [r5, #0x0] - ldr r4, [sp, #0x64] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r0, r3, lsr #0xc - orr r0, r0, r2, lsl #0x14 - adds r0, r4, r0 - str r0, [sp, #0x64] - ldr r1, [r5, #0x4] - ldr r4, [sp, #0x68] - mov r0, r1, asr #0x1f - umull r3, r2, r10, r1 - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - mov r0, r3, lsr #0xc - orr r0, r0, r2, lsl #0x14 - adds r0, r4, r0 - str r0, [sp, #0x68] - ldr r1, [r5, #0x8] - ldr r4, [sp, #0x6c] - umull r0, r2, r10, r1 - mov r3, r0, lsr #0xc - mov r0, r1, asr #0x1f - mla r2, r10, r0, r2 - mla r2, r9, r1, r2 - orr r3, r3, r2, lsl #0x14 - adds r0, r4, r3 - str r0, [sp, #0x6c] - ldr r7, [r5, #0xc] - ldr r12, [sp, #0x70] - mov r6, r7, asr #0x1f - umull r11, r8, r10, r7 - mla r8, r10, r6, r8 - mla r8, r9, r7, r8 - mov r6, r11, lsr #0xc - orr r6, r6, r8, lsl #0x14 - adds r6, r12, r6 - str r6, [sp, #0x70] - ldr r7, [r5, #0x10] - ldr r4, [sp, #0x74] - mov r6, r7, asr #0x1f - umull r11, r8, r10, r7 - mla r8, r10, r6, r8 - mla r8, r9, r7, r8 - mov r6, r11, lsr #0xc - orr r6, r6, r8, lsl #0x14 - adds r4, r4, r6 - str r4, [sp, #0x74] - ldr r6, [r5, #0x14] - ldr r3, [sp, #0x78] - mov r4, r6, asr #0x1f - umull r8, r7, r10, r6 - mla r7, r10, r4, r7 - mla r7, r9, r6, r7 - mov r4, r8, lsr #0xc - orr r4, r4, r7, lsl #0x14 - adds r3, r3, r4 - str r3, [sp, #0x78] - ldr r4, [r5, #0x18] - ldr r2, [sp, #0x7c] - mov r3, r4, asr #0x1f - umull r7, r6, r10, r4 - mla r6, r10, r3, r6 - mla r6, r9, r4, r6 - mov r3, r7, lsr #0xc - orr r3, r3, r6, lsl #0x14 - adds r2, r2, r3 - str r2, [sp, #0x7c] - ldr r3, [r5, #0x1c] - ldr r1, [sp, #0x80] - mov r2, r3, asr #0x1f - umull r6, r4, r10, r3 - mla r4, r10, r2, r4 - mla r4, r9, r3, r4 - mov r2, r6, lsr #0xc - orr r2, r2, r4, lsl #0x14 - adds r1, r1, r2 - str r1, [sp, #0x80] - ldr r2, [r5, #0x20] - ldr lr, [sp, #0x84] - mov r1, r2, asr #0x1f - umull r4, r3, r10, r2 - mla r3, r10, r1, r3 - mla r3, r9, r2, r3 - mov r1, r4, lsr #0xc - orr r1, r1, r3, lsl #0x14 - adds r1, lr, r1 - add r0, sp, #0x64 - str r1, [sp, #0x84] - bl G3_LoadMtx43 - ldr r1, _020B98AC ; =0x04000440 - mov r2, #0x1 - add r0, sp, #0x34 - str r2, [r1, #0x0] - bl G3_LoadMtx43 - ldr r3, _020B98AC ; =0x04000440 - mov r0, #0x0 - str r0, [r3, #0x0] - ldr r1, _020B98BC ; =0x04000450 - mov r2, #0x1 - mov r0, #0x2 - str r2, [r1, #0x0] - str r0, [r3, #0x0] - ldr r0, [sp, #0x0] - ldr r1, [r0, #0x0] - ldr r0, _020B98B0 ; =0x0400044C - ldrb r2, [r1, #0x1] - mov r1, #0x3 - str r2, [r0, #0x0] - ldr r0, [sp, #0x0] - ldr r2, [r0, #0x0] - ldrb r0, [r2, #0x2] - add r0, r0, #0x1 - mla r1, r0, r1, r2 - ldr r0, [sp, #0x0] - str r1, [r0, #0x0] - add sp, sp, #0x8c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B98AC: .word 0x04000440 -_020B98B0: .word 0x0400044C -_020B98B4: .word 0x04000454 -_020B98B8: .word UNK_021D0380 -_020B98BC: .word 0x04000450 -_020B98C0: .word UNK_021D03C0 - - arm_func_start FUN_020B98C4 -FUN_020B98C4: ; 0x020B98C4 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xcc - mov r10, r0 - ldr r2, [r10, #0x8] - mov r9, r1 - ands r0, r2, #0x200 - mov r7, #0x2 - ldr r6, _020B9C28 ; =UNK_02106718 - ldr fp, _020B9C2C ; =UNK_02106724 - ldr r5, _020B9C30 ; =UNK_021066F4 - beq _020B992C - cmp r9, #0x40 - beq _020B9900 - cmp r9, #0x60 - bne _020B9904 -_020B9900: - add r7, r7, #0x1 -_020B9904: - cmp r9, #0x20 - beq _020B9914 - cmp r9, #0x60 - bne _020B9918 -_020B9914: - add r7, r7, #0x1 -_020B9918: - ldr r0, [r10, #0x0] - add sp, sp, #0xcc - add r0, r0, r7 - str r0, [r10, #0x0] - ldmia sp!, {r4-r11,pc} -_020B992C: - cmp r9, #0x40 - beq _020B993C - cmp r9, #0x60 - bne _020B9974 -_020B993C: - add r7, r7, #0x1 - ands r0, r2, #0x100 - bne _020B9974 - cmp r9, #0x40 - ldreq r0, [r10, #0x0] - add r1, sp, #0x0 - ldreqb r0, [r0, #0x2] - mov r2, #0x1 - streq r0, [sp, #0x0] - ldrne r0, [r10, #0x0] - ldrneb r0, [r0, #0x3] - strne r0, [sp, #0x0] - mov r0, #0x14 - bl FUN_020BB1C0 -_020B9974: - ldr r0, [r10, #0x2c] - cmp r0, #0x0 - ldrneb r8, [r10, #0x94] - moveq r8, #0x0 - cmp r8, #0x1 - bne _020B99C0 - ldr r1, [r10, #0x8] - mov r0, r10 - bic r1, r1, #0x40 - str r1, [r10, #0x8] - ldr r1, [r10, #0x2c] - blx r1 - ldr r0, [r10, #0x2c] - cmp r0, #0x0 - ldrneb r8, [r10, #0x94] - ldr r0, [r10, #0x8] - moveq r8, #0x0 - and r1, r0, #0x40 - b _020B99C4 -_020B99C0: - mov r1, #0x0 -_020B99C4: - ldr r0, [r10, #0x8] - ands r0, r0, #0x100 - bne _020B9BA4 - cmp r1, #0x0 - bne _020B9BA4 - bl FUN_020BB394 - ldr r2, _020B9C34 ; =0x00151110 - ldr r1, _020B9C38 ; =0x04000400 - mov r0, #0x0 - str r2, [r1, #0x0] - str r0, [r1, #0x0] - str r0, [r1, #0x0] - add r4, sp, #0x8 -_020B99F8: - mov r0, r4 - bl G3X_GetClipMtx - cmp r0, #0x0 - bne _020B99F8 - ldr r0, _020B9C3C ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - ands r0, r1, #0x1 - beq _020B9A38 - bl FUN_020B82A4 - add r1, sp, #0x48 - bl MTX_Copy43To44_ - add r0, sp, #0x8 - add r1, sp, #0x48 - mov r2, r0 - bl MTX_Concat44 - b _020B9A5C -_020B9A38: - ands r0, r1, #0x2 - beq _020B9A5C - ldr r0, _020B9C40 ; =UNK_021CED64 - add r1, sp, #0x88 - bl MTX_Copy43To44_ - add r0, sp, #0x8 - add r1, sp, #0x88 - mov r2, r0 - bl MTX_Concat44 -_020B9A5C: - ldr r1, [sp, #0x38] - add r0, sp, #0x8 - str r1, [r6, #0x0] - ldr r1, [sp, #0x3c] - str r1, [r6, #0x4] - ldr r1, [sp, #0x40] - str r1, [r6, #0x8] - bl VEC_Mag - str r0, [r11, #0x0] - add r0, sp, #0x18 - bl VEC_Mag - str r0, [r11, #0x4] - add r0, sp, #0x28 - bl VEC_Mag - str r0, [r11, #0x8] - ldr r0, [sp, #0x1c] - cmp r0, #0x0 - bne _020B9AB0 - ldr r0, [sp, #0x20] - cmp r0, #0x0 - beq _020B9AD4 -_020B9AB0: - add r0, sp, #0x18 - add r1, r5, #0xc - bl VEC_Normalize - ldr r0, [r5, #0x14] - rsb r0, r0, #0x0 - str r0, [r5, #0x1c] - ldr r0, [r5, #0x10] - str r0, [r5, #0x20] - b _020B9AF4 -_020B9AD4: - add r0, sp, #0x28 - add r1, r5, #0x18 - bl VEC_Normalize - ldr r0, [r5, #0x1c] - rsb r0, r0, #0x0 - str r0, [r5, #0x14] - ldr r0, [r5, #0x20] - str r0, [r5, #0x10] -_020B9AF4: - ldr r0, _020B9C3C ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - ands r0, r1, #0x1 - beq _020B9B48 - ldr r3, _020B9C44 ; =0x00171012 - ldr r1, _020B9C38 ; =0x04000400 - ldr r0, _020B9C48 ; =UNK_021066EC - mov r2, #0x8 - str r3, [r1, #0x0] - bl MIi_CpuSend32 - bl FUN_020B8264 - ldr r1, _020B9C38 ; =0x04000400 - mov r2, #0x30 - bl MIi_CpuSend32 - ldr r2, _020B9C4C ; =0x00001B19 - ldr r1, _020B9C38 ; =0x04000400 - ldr r0, _020B9C30 ; =UNK_021066F4 - str r2, [r1, #0x0] - mov r2, #0x3c - bl MIi_CpuSend32 - b _020B9BA4 -_020B9B48: - ands r0, r1, #0x2 - beq _020B9B94 - ldr r3, _020B9C44 ; =0x00171012 - ldr r1, _020B9C38 ; =0x04000400 - ldr r0, _020B9C48 ; =UNK_021066EC - mov r2, #0x8 - str r3, [r1, #0x0] - bl MIi_CpuSend32 - bl FUN_020B8344 - ldr r1, _020B9C38 ; =0x04000400 - mov r2, #0x30 - bl MIi_CpuSend32 - ldr r2, _020B9C4C ; =0x00001B19 - ldr r1, _020B9C38 ; =0x04000400 - ldr r0, _020B9C30 ; =UNK_021066F4 - str r2, [r1, #0x0] - mov r2, #0x3c - bl MIi_CpuSend32 - b _020B9BA4 -_020B9B94: - ldr r0, _020B9C50 ; =UNK_021066E8 - ldr r1, _020B9C38 ; =0x04000400 - mov r2, #0x48 - bl MIi_CpuSend32 -_020B9BA4: - cmp r8, #0x3 - movne r0, #0x0 - bne _020B9BD0 - ldr r1, [r10, #0x8] - mov r0, r10 - bic r1, r1, #0x40 - str r1, [r10, #0x8] - ldr r1, [r10, #0x2c] - blx r1 - ldr r0, [r10, #0x8] - and r0, r0, #0x40 -_020B9BD0: - cmp r9, #0x20 - beq _020B9BE0 - cmp r9, #0x60 - bne _020B9C14 -_020B9BE0: - cmp r0, #0x0 - add r7, r7, #0x1 - bne _020B9C14 - ldr r0, [r10, #0x8] - ands r0, r0, #0x100 - bne _020B9C14 - ldr r0, [r10, #0x0] - add r1, sp, #0x4 - ldrb r3, [r0, #0x2] - mov r0, #0x13 - mov r2, #0x1 - str r3, [sp, #0x4] - bl FUN_020BB1C0 -_020B9C14: - ldr r0, [r10, #0x0] - add r0, r0, r7 - str r0, [r10, #0x0] - add sp, sp, #0xcc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020B9C28: .word UNK_02106718 -_020B9C2C: .word UNK_02106724 -_020B9C30: .word UNK_021066F4 -_020B9C34: .word 0x00151110 -_020B9C38: .word 0x04000400 -_020B9C3C: .word UNK_021CED18 -_020B9C40: .word UNK_021CED64 -_020B9C44: .word 0x00171012 -_020B9C48: .word UNK_021066EC -_020B9C4C: .word 0x00001B19 -_020B9C50: .word UNK_021066E8 - - arm_func_start FUN_020B9C54 -FUN_020B9C54: ; 0x020B9C54 - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0xc8 - mov r9, r0 - ldr r2, [r9, #0x8] - mov r8, r1 - ands r0, r2, #0x200 - mov r6, #0x2 - ldr r5, _020B9F58 ; =UNK_021066D0 - ldr r4, _020B9F5C ; =UNK_021066DC - beq _020B9CB8 - cmp r8, #0x40 - beq _020B9C8C - cmp r8, #0x60 - bne _020B9C90 -_020B9C8C: - add r6, r6, #0x1 -_020B9C90: - cmp r8, #0x20 - beq _020B9CA0 - cmp r8, #0x60 - bne _020B9CA4 -_020B9CA0: - add r6, r6, #0x1 -_020B9CA4: - ldr r0, [r9, #0x0] - add sp, sp, #0xc8 - add r0, r0, r6 - str r0, [r9, #0x0] - ldmia sp!, {r4-r10,pc} -_020B9CB8: - cmp r8, #0x40 - beq _020B9CC8 - cmp r8, #0x60 - bne _020B9D00 -_020B9CC8: - add r6, r6, #0x1 - ands r0, r2, #0x100 - bne _020B9D00 - cmp r8, #0x40 - ldreq r0, [r9, #0x0] - add r1, sp, #0x0 - ldreqb r0, [r0, #0x2] - mov r2, #0x1 - streq r0, [sp, #0x0] - ldrne r0, [r9, #0x0] - ldrneb r0, [r0, #0x3] - strne r0, [sp, #0x0] - mov r0, #0x14 - bl FUN_020BB1C0 -_020B9D00: - ldr r0, [r9, #0x28] - cmp r0, #0x0 - ldrneb r7, [r9, #0x93] - moveq r7, #0x0 - cmp r7, #0x1 - bne _020B9D4C - ldr r1, [r9, #0x8] - mov r0, r9 - bic r1, r1, #0x40 - str r1, [r9, #0x8] - ldr r1, [r9, #0x28] - blx r1 - ldr r0, [r9, #0x28] - cmp r0, #0x0 - ldrneb r7, [r9, #0x93] - ldr r0, [r9, #0x8] - moveq r7, #0x0 - and r1, r0, #0x40 - b _020B9D50 -_020B9D4C: - mov r1, #0x0 -_020B9D50: - ldr r0, [r9, #0x8] - ands r0, r0, #0x100 - bne _020B9ED4 - cmp r1, #0x0 - bne _020B9ED4 - bl FUN_020BB394 - ldr r2, _020B9F60 ; =0x00151110 - ldr r1, _020B9F64 ; =0x04000400 - mov r0, #0x0 - str r2, [r1, #0x0] - str r0, [r1, #0x0] - str r0, [r1, #0x0] - add r10, sp, #0x8 -_020B9D84: - mov r0, r10 - bl G3X_GetClipMtx - cmp r0, #0x0 - bne _020B9D84 - ldr r0, _020B9F68 ; =UNK_021CED18 - ldr r1, [r0, #0xfc] - ands r0, r1, #0x1 - beq _020B9DC4 - bl FUN_020B82A4 - add r1, sp, #0x48 - bl MTX_Copy43To44_ - add r0, sp, #0x8 - add r1, sp, #0x48 - mov r2, r0 - bl MTX_Concat44 - b _020B9DE8 -_020B9DC4: - ands r0, r1, #0x2 - beq _020B9DE8 - ldr r0, _020B9F6C ; =UNK_021CED64 - add r1, sp, #0x88 - bl MTX_Copy43To44_ - add r0, sp, #0x8 - add r1, sp, #0x88 - mov r2, r0 - bl MTX_Concat44 -_020B9DE8: - ldr r1, [sp, #0x38] - add r0, sp, #0x8 - str r1, [r5, #0x0] - ldr r1, [sp, #0x3c] - str r1, [r5, #0x4] - ldr r1, [sp, #0x40] - str r1, [r5, #0x8] - bl VEC_Mag - str r0, [r4, #0x0] - add r0, sp, #0x18 - bl VEC_Mag - str r0, [r4, #0x4] - add r0, sp, #0x28 - bl VEC_Mag - ldr r1, _020B9F68 ; =UNK_021CED18 - str r0, [r4, #0x8] - ldr r1, [r1, #0xfc] - ands r0, r1, #0x1 - beq _020B9E78 - ldr r3, _020B9F70 ; =0x00171012 - ldr r1, _020B9F64 ; =0x04000400 - ldr r0, _020B9F74 ; =UNK_021066A4 - mov r2, #0x8 - str r3, [r1, #0x0] - bl MIi_CpuSend32 - bl FUN_020B8264 - ldr r1, _020B9F64 ; =0x04000400 - mov r2, #0x30 - bl MIi_CpuSend32 - ldr r2, _020B9F78 ; =0x00001B19 - ldr r1, _020B9F64 ; =0x04000400 - ldr r0, _020B9F7C ; =UNK_021066AC - str r2, [r1, #0x0] - mov r2, #0x3c - bl MIi_CpuSend32 - b _020B9ED4 -_020B9E78: - ands r0, r1, #0x2 - beq _020B9EC4 - ldr r3, _020B9F70 ; =0x00171012 - ldr r1, _020B9F64 ; =0x04000400 - ldr r0, _020B9F74 ; =UNK_021066A4 - mov r2, #0x8 - str r3, [r1, #0x0] - bl MIi_CpuSend32 - bl FUN_020B8344 - ldr r1, _020B9F64 ; =0x04000400 - mov r2, #0x30 - bl MIi_CpuSend32 - ldr r2, _020B9F78 ; =0x00001B19 - ldr r1, _020B9F64 ; =0x04000400 - ldr r0, _020B9F7C ; =UNK_021066AC - str r2, [r1, #0x0] - mov r2, #0x3c - bl MIi_CpuSend32 - b _020B9ED4 -_020B9EC4: - ldr r0, _020B9F80 ; =UNK_021066A0 - ldr r1, _020B9F64 ; =0x04000400 - mov r2, #0x48 - bl MIi_CpuSend32 -_020B9ED4: - cmp r7, #0x3 - movne r0, #0x0 - bne _020B9F00 - ldr r1, [r9, #0x8] - mov r0, r9 - bic r1, r1, #0x40 - str r1, [r9, #0x8] - ldr r1, [r9, #0x28] - blx r1 - ldr r0, [r9, #0x8] - and r0, r0, #0x40 -_020B9F00: - cmp r8, #0x20 - beq _020B9F10 - cmp r8, #0x60 - bne _020B9F44 -_020B9F10: - cmp r0, #0x0 - add r6, r6, #0x1 - bne _020B9F44 - ldr r0, [r9, #0x8] - ands r0, r0, #0x100 - bne _020B9F44 - ldr r0, [r9, #0x0] - add r1, sp, #0x4 - ldrb r3, [r0, #0x2] - mov r0, #0x13 - mov r2, #0x1 - str r3, [sp, #0x4] - bl FUN_020BB1C0 -_020B9F44: - ldr r0, [r9, #0x0] - add r0, r0, r6 - str r0, [r9, #0x0] - add sp, sp, #0xc8 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020B9F58: .word UNK_021066D0 -_020B9F5C: .word UNK_021066DC -_020B9F60: .word 0x00151110 -_020B9F64: .word 0x04000400 -_020B9F68: .word UNK_021CED18 -_020B9F6C: .word UNK_021CED64 -_020B9F70: .word 0x00171012 -_020B9F74: .word UNK_021066A4 -_020B9F78: .word 0x00001B19 -_020B9F7C: .word UNK_021066AC -_020B9F80: .word UNK_021066A0 - - arm_func_start FUN_020B9F84 -FUN_020B9F84: ; 0x020B9F84 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x14 - mov r10, r0 - ldr r0, [r10, #0x0] - mov r9, r1 - ldrb r4, [r0, #0x1] - mov r7, #0x4 - strb r4, [r10, #0xae] - ldr r0, [r10, #0x8] - orr r0, r0, #0x10 - str r0, [r10, #0x8] - ldr r1, [r10, #0x8] - ands r0, r1, #0x400 - beq _020BA01C - cmp r9, #0x40 - beq _020B9FCC - cmp r9, #0x60 - bne _020B9FD0 -_020B9FCC: - add r7, r7, #0x1 -_020B9FD0: - cmp r9, #0x20 - beq _020B9FE0 - cmp r9, #0x60 - bne _020BA008 -_020B9FE0: - add r7, r7, #0x1 - ands r0, r1, #0x100 - bne _020BA008 - ldr r0, [r10, #0x0] - add r1, sp, #0x8 - ldrb r3, [r0, #0x4] - mov r0, #0x14 - mov r2, #0x1 - str r3, [sp, #0x8] - bl FUN_020BB1C0 -_020BA008: - ldr r0, [r10, #0x0] - add sp, sp, #0x14 - add r0, r0, r7 - str r0, [r10, #0x0] - ldmia sp!, {r4-r11,pc} -_020BA01C: - cmp r9, #0x40 - beq _020BA02C - cmp r9, #0x60 - bne _020BA068 -_020BA02C: - cmp r9, #0x40 - ldreq r0, [r10, #0x0] - add r7, r7, #0x1 - ldreqb r0, [r0, #0x4] - streq r0, [sp, #0xc] - ldrne r0, [r10, #0x0] - ldrneb r0, [r0, #0x5] - strne r0, [sp, #0xc] - ldr r0, [r10, #0x8] - ands r0, r0, #0x100 - bne _020BA068 - add r1, sp, #0xc - mov r0, #0x14 - mov r2, #0x1 - bl FUN_020BB1C0 -_020BA068: - add r0, r10, #0x12c - str r0, [r10, #0xb4] - ldr r0, [r10, #0x24] - cmp r0, #0x0 - ldrneb r8, [r10, #0x92] - moveq r8, #0x0 - cmp r8, #0x1 - bne _020BA0BC - ldr r1, [r10, #0x8] - mov r0, r10 - bic r1, r1, #0x40 - str r1, [r10, #0x8] - ldr r1, [r10, #0x24] - blx r1 - ldr r0, [r10, #0x24] - cmp r0, #0x0 - ldrneb r8, [r10, #0x92] - ldr r0, [r10, #0x8] - moveq r8, #0x0 - and r0, r0, #0x40 - b _020BA0C0 -_020BA0BC: - mov r0, #0x0 -_020BA0C0: - cmp r0, #0x0 - bne _020BA2CC - ldr r0, [r10, #0x4] - ldr r1, [r0, #0x34] - cmp r1, #0x0 - beq _020BA0F4 - mov r0, #0x58 - mla r6, r4, r0, r1 - ldr r0, [r10, #0x8] - ands r0, r0, #0x80 - moveq r0, #0x1 - movne r0, #0x0 - b _020BA0FC -_020BA0F4: - add r6, r10, #0x12c - mov r0, #0x0 -_020BA0FC: - cmp r0, #0x0 - bne _020BA2C8 - mov r0, #0x0 - str r0, [r6, #0x0] - ldr r0, [r10, #0x4] - ldr r1, [r0, #0x10] - cmp r1, #0x0 - beq _020BA134 - ldr r3, [r0, #0x14] - mov r0, r6 - mov r2, r4 - blx r3 - cmp r0, #0x0 - bne _020BA2C8 -_020BA134: - ldr r2, [r10, #0xd4] - ldrh r0, [r2, #0x6] - ldrh r1, [r2, r0] - add r0, r2, r0 - mla r0, r1, r4, r0 - ldr r1, [r0, #0x4] - ldrh r0, [r2, r1] - add r4, r2, r1 - add r5, r4, #0x4 - ands r0, r0, #0x1 - ldrne r0, [r6, #0x0] - orrne r0, r0, #0x4 - strne r0, [r6, #0x0] - bne _020BA188 - ldr r0, [r5, #0x0] - str r0, [r6, #0x4c] - ldr r0, [r5, #0x4] - str r0, [r6, #0x50] - ldr r0, [r5, #0x8] - add r5, r5, #0xc - str r0, [r6, #0x54] -_020BA188: - ldrh r1, [r4, #0x0] - ands r0, r1, #0x2 - ldrne r0, [r6, #0x0] - orrne r0, r0, #0x2 - strne r0, [r6, #0x0] - bne _020BA2B0 - ands r0, r1, #0x8 - beq _020BA264 - and r1, r1, #0xf0 - mov r11, r1, asr #0x4 - ldrsh r1, [r5, #0x0] - add r0, r6, #0x28 - str r1, [sp, #0x0] - ldrsh r1, [r5, #0x2] - str r1, [sp, #0x4] - bl MI_Zero36B - ldrh r0, [r4, #0x0] - add r1, r6, r11, lsl #0x2 - add r5, r5, #0x4 - ands r0, r0, #0x100 - movne r0, #0x1000 - rsbne r2, r0, #0x0 - moveq r2, #0x1000 - str r2, [r1, #0x28] - ldr r0, _020BA3B4 ; =UNK_020FF9F0 - ldr r1, _020BA3B8 ; =UNK_020FF9F1 - ldrb r0, [r0, r11, lsl #0x2] - add r2, r6, r0, lsl #0x2 - ldr r0, [sp, #0x0] - str r0, [r2, #0x28] - ldrb r0, [r1, r11, lsl #0x2] - add r1, r6, r0, lsl #0x2 - ldr r0, [sp, #0x4] - str r0, [r1, #0x28] - ldrh r0, [r4, #0x0] - ands r0, r0, #0x200 - ldrne r0, [sp, #0x4] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x4] - ldr r0, _020BA3BC ; =UNK_020FF9F2 - ldrb r0, [r0, r11, lsl #0x2] - add r1, r6, r0, lsl #0x2 - ldr r0, [sp, #0x4] - str r0, [r1, #0x28] - ldrh r0, [r4, #0x0] - ands r0, r0, #0x400 - ldrne r0, [sp, #0x0] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x0] - ldr r0, _020BA3C0 ; =UNK_020FF9F3 - ldrb r0, [r0, r11, lsl #0x2] - add r1, r6, r0, lsl #0x2 - ldr r0, [sp, #0x0] - str r0, [r1, #0x28] - b _020BA2B0 -_020BA264: - ldrsh r0, [r4, #0x2] - str r0, [r6, #0x28] - ldrsh r0, [r5, #0x0] - str r0, [r6, #0x2c] - ldrsh r0, [r5, #0x2] - str r0, [r6, #0x30] - ldrsh r0, [r5, #0x4] - str r0, [r6, #0x34] - ldrsh r0, [r5, #0x6] - str r0, [r6, #0x38] - ldrsh r0, [r5, #0x8] - str r0, [r6, #0x3c] - ldrsh r0, [r5, #0xa] - str r0, [r6, #0x40] - ldrsh r0, [r5, #0xc] - str r0, [r6, #0x44] - ldrsh r0, [r5, #0xe] - add r5, r5, #0x10 - str r0, [r6, #0x48] -_020BA2B0: - ldrh r3, [r4, #0x0] - ldr r2, [r10, #0x0] - ldr r4, [r10, #0xe8] - mov r0, r6 - mov r1, r5 - blx r4 -_020BA2C8: - str r6, [r10, #0xb4] -_020BA2CC: - cmp r8, #0x2 - bne _020BA308 - ldr r1, [r10, #0x8] - mov r0, r10 - bic r1, r1, #0x40 - str r1, [r10, #0x8] - ldr r1, [r10, #0x24] - blx r1 - ldr r0, [r10, #0x24] - cmp r0, #0x0 - ldrneb r8, [r10, #0x92] - ldr r0, [r10, #0x8] - moveq r8, #0x0 - and r0, r0, #0x40 - b _020BA30C -_020BA308: - mov r0, #0x0 -_020BA30C: - cmp r0, #0x0 - bne _020BA32C - ldr r0, [r10, #0x8] - ands r0, r0, #0x100 - bne _020BA32C - ldr r0, [r10, #0xb4] - ldr r1, [r10, #0xec] - blx r1 -_020BA32C: - mov r0, #0x0 - str r0, [r10, #0xb4] - cmp r8, #0x3 - bne _020BA35C - ldr r1, [r10, #0x8] - mov r0, r10 - bic r1, r1, #0x40 - str r1, [r10, #0x8] - ldr r1, [r10, #0x24] - blx r1 - ldr r0, [r10, #0x8] - and r0, r0, #0x40 -_020BA35C: - cmp r9, #0x20 - beq _020BA36C - cmp r9, #0x60 - bne _020BA3A0 -_020BA36C: - cmp r0, #0x0 - add r7, r7, #0x1 - bne _020BA3A0 - ldr r0, [r10, #0x8] - ands r0, r0, #0x100 - bne _020BA3A0 - ldr r0, [r10, #0x0] - add r1, sp, #0x10 - ldrb r3, [r0, #0x4] - mov r0, #0x13 - mov r2, #0x1 - str r3, [sp, #0x10] - bl FUN_020BB1C0 -_020BA3A0: - ldr r0, [r10, #0x0] - add r0, r0, r7 - str r0, [r10, #0x0] - add sp, sp, #0x14 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020BA3B4: .word UNK_020FF9F0 -_020BA3B8: .word UNK_020FF9F1 -_020BA3BC: .word UNK_020FF9F2 -_020BA3C0: .word UNK_020FF9F3 - - arm_func_start FUN_020BA3C4 -FUN_020BA3C4: ; 0x020BA3C4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r0 - ldr r3, [r4, #0x8] - ands r2, r3, #0x200 - bne _020BA420 - ands r2, r3, #0x1 - beq _020BA420 - ands r2, r3, #0x2 - bne _020BA420 - ldr r5, [r4, #0xdc] - ldr r3, [r4, #0x0] - ldrh r2, [r5, #0x6] - ldrb r3, [r3, #0x1] - ldr ip, _020BA434 ; =UNK_02106650 - ldrh lr, [r5, r2] - add r2, r5, r2 - mla r2, lr, r3, r2 - ldr r2, [r2, #0x4] - ldrh lr, [r5, r2] - add r2, r5, r2 - ldr r12, [r12, lr, lsl #0x2] - blx r12 -_020BA420: - ldr r0, [r4, #0x0] - add r0, r0, #0x2 - str r0, [r4, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BA434: .word UNK_02106650 - - arm_func_start FUN_020BA438 -FUN_020BA438: ; 0x020BA438 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, [r6, #0x20] - mov r5, r2 - cmp r0, #0x0 - ldrneb r4, [r6, #0x91] - moveq r4, #0x0 - cmp r4, #0x1 - bne _020BA490 - ldr r1, [r6, #0x8] - mov r0, r6 - bic r1, r1, #0x40 - str r1, [r6, #0x8] - ldr r1, [r6, #0x20] - blx r1 - ldr r0, [r6, #0x20] - cmp r0, #0x0 - ldrneb r4, [r6, #0x91] - ldr r0, [r6, #0x8] - moveq r4, #0x0 - and r0, r0, #0x40 - b _020BA494 -_020BA490: - mov r0, #0x0 -_020BA494: - cmp r0, #0x0 - bne _020BA4B8 - ldr r0, [r6, #0x8] - ands r0, r0, #0x100 - bne _020BA4B8 - ldr r0, [r5, #0x8] - ldr r1, [r5, #0xc] - add r0, r5, r0 - bl FUN_020BB2B0 -_020BA4B8: - cmp r4, #0x2 - bne _020BA4E8 - ldr r1, [r6, #0x8] - mov r0, r6 - bic r1, r1, #0x40 - str r1, [r6, #0x8] - ldr r1, [r6, #0x20] - blx r1 - ldr r0, [r6, #0x20] - cmp r0, #0x0 - ldrneb r4, [r6, #0x91] - moveq r4, #0x0 -_020BA4E8: - cmp r4, #0x3 - ldmneia sp!, {r4-r6,pc} - ldr r1, [r6, #0x8] - mov r0, r6 - bic r1, r1, #0x40 - str r1, [r6, #0x8] - ldr r1, [r6, #0x20] - blx r1 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BA50C -FUN_020BA50C: ; 0x020BA50C - stmdb sp!, {r4-r6,lr} - mov r4, r0 - ldr r5, [r4, #0x8] - ands r0, r5, #0x200 - bne _020BA578 - ldr r2, [r4, #0x0] - ands r0, r5, #0x1 - ldrb r3, [r2, #0x1] - bne _020BA544 - ands r0, r5, #0x8 - beq _020BA544 - ldrb r0, [r4, #0xad] - cmp r3, r0 - beq _020BA578 -_020BA544: - ldr r6, [r4, #0xd8] - ldr ip, _020BA588 ; =UNK_02106640 - ldrh r2, [r6, #0xa] - add r5, r6, #0x4 - mov r0, r4 - ldrh lr, [r5, r2] - add r2, r5, r2 - mla r2, lr, r3, r2 - ldr r2, [r2, #0x4] - ldrh lr, [r6, r2] - add r2, r6, r2 - ldr r12, [r12, lr, lsl #0x2] - blx r12 -_020BA578: - ldr r0, [r4, #0x0] - add r0, r0, #0x2 - str r0, [r4, #0x0] - ldmia sp!, {r4-r6,pc} - .balign 4 -_020BA588: .word UNK_02106640 - - arm_func_start FUN_020BA58C -FUN_020BA58C: ; 0x020BA58C - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x20 - mov r8, r0 - mov r6, r3 - strb r6, [r8, #0xad] - ldr r3, [r8, #0x8] - add r0, r8, #0xf4 - orr r3, r3, #0x8 - str r3, [r8, #0x8] - str r0, [r8, #0xb0] - ldr r0, [r8, #0x1c] - mov r4, r1 - cmp r0, #0x0 - ldrneb r5, [r8, #0x90] - mov r7, r2 - moveq r5, #0x0 - cmp r5, #0x1 - bne _020BA608 - ldr r1, [r8, #0x8] - mov r0, r8 - bic r1, r1, #0x40 - str r1, [r8, #0x8] - ldr r1, [r8, #0x1c] - blx r1 - ldr r0, [r8, #0x1c] - cmp r0, #0x0 - ldrneb r5, [r8, #0x90] - ldr r0, [r8, #0x8] - moveq r5, #0x0 - and r0, r0, #0x40 - b _020BA60C -_020BA608: - mov r0, #0x0 -_020BA60C: - cmp r0, #0x0 - bne _020BA8C0 - ldr r0, [r8, #0x4] - ldr r0, [r0, #0x38] - cmp r0, #0x0 - beq _020BA638 - ldr r1, [r8, #0x8] - ands r1, r1, #0x80 - moveq r1, #0x38 - mlaeq r4, r6, r1, r0 - beq _020BA8BC -_020BA638: - cmp r4, #0x20 - beq _020BA648 - cmp r4, #0x40 - bne _020BA684 -_020BA648: - mov r1, r6, lsr #0x5 - add r1, r8, r1, lsl #0x2 - and r2, r6, #0x1f - mov r3, #0x1 - mov r2, r3, lsl r2 - ldr r1, [r1, #0xbc] - ands r1, r2, r1 - beq _020BA684 - cmp r0, #0x0 - movne r1, #0x38 - mlane r4, r6, r1, r0 - ldreq r1, _020BA9D8 ; =UNK_021CEF80 - moveq r0, #0x38 - mlaeq r4, r6, r0, r1 - b _020BA8BC -_020BA684: - cmp r0, #0x0 - beq _020BA6BC - add r4, r8, #0xbc - mov r3, r6, lsr #0x5 - ldr r2, [r4, r3, lsl #0x2] - and r0, r6, #0x1f - mov r1, #0x1 - orr r0, r2, r1, lsl r0 - str r0, [r4, r3, lsl #0x2] - ldr r1, [r8, #0x4] - mov r0, #0x38 - ldr r1, [r1, #0x38] - mla r4, r6, r0, r1 - b _020BA6F0 -_020BA6BC: - cmp r4, #0x40 - addne r4, r8, #0xf4 - bne _020BA6F0 - add lr, r8, #0xbc - mov r12, r6, lsr #0x5 - ldr r1, _020BA9D8 ; =UNK_021CEF80 - ldr r4, [lr, r12, lsl #0x2] - mov r0, #0x38 - and r2, r6, #0x1f - mov r3, #0x1 - orr r2, r4, r3, lsl r2 - mla r4, r6, r0, r1 - str r2, [lr, r12, lsl #0x2] -_020BA6F0: - mov r0, #0x0 - str r0, [r4, #0x0] - ldr r3, [r8, #0xd8] - ldrh r0, [r3, #0xa] - add r2, r3, #0x4 - ldrh r1, [r2, r0] - add r0, r2, r0 - mla r0, r1, r6, r0 - ldr r0, [r0, #0x4] - ldr r1, _020BA9DC ; =UNK_021CED18 - add r0, r3, r0 - ldrh r0, [r0, #0x1e] - ands r0, r0, #0x20 - ldrne r0, [r4, #0x0] - orrne r0, r0, #0x20 - strne r0, [r4, #0x0] - ldrh r2, [r7, #0x1e] - ldr r0, _020BA9E0 ; =UNK_020FF9D0 - ldr r12, [r1, #0x94] - mov r2, r2, asr #0x6 - and r2, r2, #0x7 - ldr lr, [r0, r2, lsl #0x2] - ldr r2, [r7, #0x4] - mvn r3, lr - and r3, r12, r3 - and r2, r2, lr - orr r2, r3, r2 - str r2, [r4, #0x4] - ldrh r12, [r7, #0x1e] - ldr r3, [r1, #0x98] - ldr r2, [r7, #0x8] - mov r12, r12, asr #0x9 - and r12, r12, #0x7 - ldr r12, [r0, r12, lsl #0x2] - mvn r0, r12 - and r3, r3, r0 - and r0, r2, r12 - orr r0, r3, r0 - str r0, [r4, #0x8] - ldr r3, [r7, #0x10] - ldr r0, [r7, #0xc] - ldr r2, [r1, #0x9c] - mvn r1, r3 - and r1, r2, r1 - and r0, r0, r3 - orr r0, r1, r0 - str r0, [r4, #0xc] - ldr r0, [r7, #0x14] - str r0, [r4, #0x10] - ldrh r0, [r7, #0x1c] - str r0, [r4, #0x14] - ldrh r1, [r7, #0x1e] - ands r0, r1, #0x1 - beq _020BA850 - ands r1, r1, #0x2 - ldrne r1, [r4, #0x0] - add r0, r7, #0x2c - orrne r1, r1, #0x1 - strne r1, [r4, #0x0] - bne _020BA7F4 - ldr r1, [r0, #0x0] - str r1, [r4, #0x18] - ldr r1, [r0, #0x4] - add r0, r0, #0x8 - str r1, [r4, #0x1c] -_020BA7F4: - ldrh r1, [r7, #0x1e] - ands r1, r1, #0x4 - ldrne r1, [r4, #0x0] - orrne r1, r1, #0x2 - strne r1, [r4, #0x0] - bne _020BA820 - ldrsh r1, [r0, #0x0] - strh r1, [r4, #0x20] - ldrsh r1, [r0, #0x2] - add r0, r0, #0x4 - strh r1, [r4, #0x22] -_020BA820: - ldrh r1, [r7, #0x1e] - ands r1, r1, #0x8 - ldreq r1, [r0, #0x0] - streq r1, [r4, #0x24] - ldreq r0, [r0, #0x4] - streq r0, [r4, #0x28] - ldrne r0, [r4, #0x0] - orrne r0, r0, #0x4 - strne r0, [r4, #0x0] - ldr r0, [r4, #0x0] - orr r0, r0, #0x8 - str r0, [r4, #0x0] -_020BA850: - ldr r0, [r8, #0x4] - ldr r1, [r0, #0x8] - cmp r1, #0x0 - beq _020BA890 - mov r2, r6, lsr #0x5 - add r2, r0, r2, lsl #0x2 - and r3, r6, #0x1f - mov r12, #0x1 - mov r3, r12, lsl r3 - ldr r2, [r2, #0x3c] - ands r2, r3, r2 - beq _020BA890 - ldr r3, [r0, #0xc] - mov r0, r4 - mov r2, r6 - blx r3 -_020BA890: - ldr r0, [r4, #0x0] - ands r0, r0, #0x18 - beq _020BA8BC - ldrh r0, [r7, #0x20] - strh r0, [r4, #0x2c] - ldrh r0, [r7, #0x22] - strh r0, [r4, #0x2e] - ldr r0, [r7, #0x24] - str r0, [r4, #0x30] - ldr r0, [r7, #0x28] - str r0, [r4, #0x34] -_020BA8BC: - str r4, [r8, #0xb0] -_020BA8C0: - cmp r5, #0x2 - bne _020BA8FC - ldr r1, [r8, #0x8] - mov r0, r8 - bic r1, r1, #0x40 - str r1, [r8, #0x8] - ldr r1, [r8, #0x1c] - blx r1 - ldr r0, [r8, #0x1c] - cmp r0, #0x0 - ldrneb r5, [r8, #0x90] - ldr r0, [r8, #0x8] - moveq r5, #0x0 - and r0, r0, #0x40 - b _020BA900 -_020BA8FC: - mov r0, #0x0 -_020BA900: - cmp r0, #0x0 - bne _020BA9AC - ldr r4, [r8, #0xb0] - ldr r1, [r4, #0xc] - ands r0, r1, #0x1f0000 - beq _020BA9A0 - ldr r0, [r4, #0x0] - ands r0, r0, #0x20 - bicne r0, r1, #0x1f0000 - strne r0, [r4, #0xc] - ldr r0, [r8, #0x8] - bic r0, r0, #0x2 - str r0, [r8, #0x8] - ldr r0, [r8, #0x8] - ands r0, r0, #0x100 - bne _020BA9AC - ldr r0, _020BA9E4 ; =0x00293130 - ldr r3, _020BA9E8 ; =0x00002B2A - str r0, [sp, #0x0] - ldr r2, [r4, #0x4] - add r1, sp, #0x4 - str r2, [sp, #0x4] - ldr r6, [r4, #0x8] - mov r2, #0x6 - str r6, [sp, #0x8] - ldr r6, [r4, #0xc] - str r6, [sp, #0xc] - str r3, [sp, #0x10] - ldr r3, [r4, #0x10] - str r3, [sp, #0x14] - ldr r3, [r4, #0x14] - str r3, [sp, #0x18] - bl FUN_020BB1C0 - ldr r0, [r4, #0x0] - ands r0, r0, #0x18 - beq _020BA9AC - ldr r1, [r8, #0xf0] - mov r0, r4 - blx r1 - b _020BA9AC -_020BA9A0: - ldr r0, [r8, #0x8] - orr r0, r0, #0x2 - str r0, [r8, #0x8] -_020BA9AC: - cmp r5, #0x3 - addne sp, sp, #0x20 - ldmneia sp!, {r4-r8,pc} - ldr r1, [r8, #0x8] - mov r0, r8 - bic r1, r1, #0x40 - str r1, [r8, #0x8] - ldr r1, [r8, #0x1c] - blx r1 - add sp, sp, #0x20 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020BA9D8: .word UNK_021CEF80 -_020BA9DC: .word UNK_021CED18 -_020BA9E0: .word UNK_020FF9D0 -_020BA9E4: .word 0x00293130 -_020BA9E8: .word 0x00002B2A - - arm_func_start FUN_020BA9EC -FUN_020BA9EC: ; 0x020BA9EC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r1, [r5, #0x8] - ands r0, r1, #0x200 - bne _020BAAAC - ands r0, r1, #0x1 - beq _020BAAAC - ldr r0, [r5, #0x18] - cmp r0, #0x0 - ldrneb r4, [r5, #0x8f] - moveq r4, #0x0 - cmp r4, #0x1 - bne _020BAA58 - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x18] - blx r1 - ldr r0, [r5, #0x18] - cmp r0, #0x0 - ldrneb r4, [r5, #0x8f] - ldr r0, [r5, #0x8] - moveq r4, #0x0 - and r0, r0, #0x40 - b _020BAA5C -_020BAA58: - mov r0, #0x0 -_020BAA5C: - cmp r0, #0x0 - bne _020BAA8C - ldr r0, [r5, #0x0] - ldrb r0, [r0, #0x1] - str r0, [sp, #0x0] - ldr r0, [r5, #0x8] - ands r0, r0, #0x100 - bne _020BAA8C - add r1, sp, #0x0 - mov r0, #0x14 - mov r2, #0x1 - bl FUN_020BB1C0 -_020BAA8C: - cmp r4, #0x3 - bne _020BAAAC - ldr r1, [r5, #0x8] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r5, #0x8] - ldr r1, [r5, #0x18] - blx r1 -_020BAAAC: - ldr r0, [r5, #0x0] - add r0, r0, #0x2 - str r0, [r5, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020BAAC0 -FUN_020BAAC0: ; 0x020BAAC0 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldr r0, [r6, #0x8] - ands r0, r0, #0x200 - bne _020BAC38 - ldr r1, [r6, #0x0] - add r0, r6, #0x184 - ldrb r1, [r1, #0x1] - strb r1, [r6, #0xac] - ldr r1, [r6, #0x8] - ldrb r4, [r6, #0xac] - orr r1, r1, #0x4 - str r1, [r6, #0x8] - str r0, [r6, #0xb8] - ldr r0, [r6, #0x14] - cmp r0, #0x0 - ldrneb r5, [r6, #0x8e] - moveq r5, #0x0 - cmp r5, #0x1 - bne _020BAB44 - ldr r1, [r6, #0x8] - mov r0, r6 - bic r1, r1, #0x40 - str r1, [r6, #0x8] - ldr r1, [r6, #0x14] - blx r1 - ldr r0, [r6, #0x14] - cmp r0, #0x0 - ldrneb r5, [r6, #0x8e] - ldr r0, [r6, #0x8] - moveq r5, #0x0 - and r0, r0, #0x40 - b _020BAB48 -_020BAB44: - mov r0, #0x0 -_020BAB48: - cmp r0, #0x0 - bne _020BABAC - ldr r12, [r6, #0x4] - ldr r1, [r12, #0x18] - cmp r1, #0x0 - beq _020BAB98 - mov r0, r4, lsr #0x5 - add r0, r12, r0, lsl #0x2 - and r2, r4, #0x1f - mov r3, #0x1 - mov r2, r3, lsl r2 - ldr r0, [r0, #0x4c] - ands r0, r2, r0 - beq _020BAB98 - ldr r0, [r6, #0xb8] - ldr r3, [r12, #0x1c] - mov r2, r4 - blx r3 - cmp r0, #0x0 - bne _020BABAC -_020BAB98: - ldr r1, [r6, #0x0] - ldr r0, [r6, #0xb8] - ldrb r1, [r1, #0x2] - and r1, r1, #0x1 - str r1, [r0, #0x0] -_020BABAC: - cmp r5, #0x2 - bne _020BABE8 - ldr r1, [r6, #0x8] - mov r0, r6 - bic r1, r1, #0x40 - str r1, [r6, #0x8] - ldr r1, [r6, #0x14] - blx r1 - ldr r0, [r6, #0x14] - cmp r0, #0x0 - ldrneb r5, [r6, #0x8e] - ldr r0, [r6, #0x8] - moveq r5, #0x0 - and r0, r0, #0x40 - b _020BABEC -_020BABE8: - mov r0, #0x0 -_020BABEC: - cmp r0, #0x0 - bne _020BAC18 - ldr r0, [r6, #0xb8] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - ldrne r0, [r6, #0x8] - orrne r0, r0, #0x1 - strne r0, [r6, #0x8] - ldreq r0, [r6, #0x8] - biceq r0, r0, #0x1 - streq r0, [r6, #0x8] -_020BAC18: - cmp r5, #0x3 - bne _020BAC38 - ldr r1, [r6, #0x8] - mov r0, r6 - bic r1, r1, #0x40 - str r1, [r6, #0x8] - ldr r1, [r6, #0x14] - blx r1 -_020BAC38: - ldr r0, [r6, #0x0] - add r0, r0, #0x3 - str r0, [r6, #0x0] - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BAC48 -FUN_020BAC48: ; 0x020BAC48 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r1, [r4, #0x10] - cmp r1, #0x0 - beq _020BAC60 - blx r1 -_020BAC60: - ldr r0, [r4, #0x8] - orr r0, r0, #0x20 - str r0, [r4, #0x8] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BAC70 -FUN_020BAC70: ; 0x020BAC70 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r1, [r4, #0xc] - cmp r1, #0x0 - beq _020BAC88 - blx r1 -_020BAC88: - ldr r0, [r4, #0x0] - add r0, r0, #0x1 - str r0, [r4, #0x0] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BAC98 -FUN_020BAC98: ; 0x020BAC98 - stmdb sp!, {r4,lr} - sub sp, sp, #0x188 - mov r4, r0 - ldr r0, [r4, #0x0] - and r0, r0, #0x10 - cmp r0, #0x10 - bne _020BAD2C - add r1, r4, #0x3c - mov r0, #0x0 - mov r2, #0x8 - bl MIi_CpuClear32 - add r1, r4, #0x44 - mov r0, #0x0 - mov r2, #0x8 - bl MIi_CpuClear32 - add r1, r4, #0x4c - mov r0, #0x0 - mov r2, #0x8 - bl MIi_CpuClear32 - ldr r1, [r4, #0x8] - cmp r1, #0x0 - beq _020BACF8 - add r0, r4, #0x3c - bl FUN_020BAD74 -_020BACF8: - ldr r1, [r4, #0x10] - cmp r1, #0x0 - beq _020BAD0C - add r0, r4, #0x44 - bl FUN_020BAD74 -_020BAD0C: - ldr r1, [r4, #0x18] - cmp r1, #0x0 - beq _020BAD20 - add r0, r4, #0x4c - bl FUN_020BAD74 -_020BAD20: - ldr r0, [r4, #0x0] - bic r0, r0, #0x10 - str r0, [r4, #0x0] -_020BAD2C: - ldr r2, _020BAD70 ; =UNK_021CEF7C - ldr r0, [r2, #0x0] - cmp r0, #0x0 - beq _020BAD4C - mov r1, r4 - bl FUN_020BADE4 - add sp, sp, #0x188 - ldmia sp!, {r4,pc} -_020BAD4C: - add r0, sp, #0x0 - mov r1, r4 - str r0, [r2, #0x0] - bl FUN_020BADE4 - ldr r0, _020BAD70 ; =UNK_021CEF7C - mov r1, #0x0 - str r1, [r0, #0x0] - add sp, sp, #0x188 - ldmia sp!, {r4,pc} - .balign 4 -_020BAD70: .word UNK_021CEF7C - - arm_func_start FUN_020BAD74 -FUN_020BAD74: - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - cmp r1, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r5,pc} - mov r3, #0x1 - mov r4, #0x0 -_020BAD90: - ldrb r2, [r1, #0x19] - mov r5, r4 - cmp r2, #0x0 - ble _020BADD0 -_020BADA0: - add r2, r1, r5, lsl #0x1 - ldrh r2, [r2, #0x1a] - ands r2, r2, #0x100 - movne lr, r5, asr #0x5 - andne r2, r5, #0x1f - ldrne r12, [r0, lr, lsl #0x2] - add r5, r5, #0x1 - orrne r2, r12, r3, lsl r2 - strne r2, [r0, lr, lsl #0x2] - ldrb r2, [r1, #0x19] - cmp r5, r2 - blt _020BADA0 -_020BADD0: - ldr r1, [r1, #0x10] - cmp r1, #0x0 - bne _020BAD90 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020BADE4 -FUN_020BADE4: ; 0x020BADE4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - mov r1, r5 - mov r0, #0x0 - mov r2, #0x188 - bl MIi_CpuClearFast - mov r0, #0x1 - str r0, [r5, #0xc4] - str r0, [r5, #0x8] - ldr r0, [r4, #0x30] - ldr r2, _020BAF60 ; =UNK_02106614 - cmp r0, #0x0 - strne r0, [r5, #0x0] - ldreq r1, [r4, #0x4] - ldreq r0, [r1, #0x4] - addeq r0, r1, r0 - streq r0, [r5, #0x0] - str r4, [r5, #0x4] - ldr r0, [r4, #0x4] - ldr r1, _020BAF64 ; =UNK_02106608 - add r0, r0, #0x40 - str r0, [r5, #0xd4] - ldr r12, [r4, #0x4] - ldr r0, _020BAF68 ; =UNK_02106620 - ldr r3, [r12, #0x8] - add r3, r12, r3 - str r3, [r5, #0xd8] - ldr r12, [r4, #0x4] - ldr r3, [r12, #0xc] - add r3, r12, r3 - str r3, [r5, #0xdc] - ldr r3, [r4, #0x4] - ldrb r3, [r3, #0x15] - ldr r2, [r2, r3, lsl #0x2] - str r2, [r5, #0xe8] - ldr r2, [r4, #0x4] - ldrb r2, [r2, #0x15] - ldr r1, [r1, r2, lsl #0x2] - str r1, [r5, #0xec] - ldr r1, [r4, #0x4] - ldrb r1, [r1, #0x16] - ldr r0, [r0, r1, lsl #0x2] - str r0, [r5, #0xf0] - ldr r0, [r4, #0x4] - ldr r0, [r0, #0x1c] - str r0, [r5, #0xe0] - ldr r0, [r4, #0x4] - ldr r0, [r0, #0x20] - str r0, [r5, #0xe4] - ldr r1, [r4, #0x20] - cmp r1, #0x0 - beq _020BAEE0 - ldrb r0, [r4, #0x24] - cmp r0, #0x20 - bhs _020BAEE0 - add r0, r5, r0, lsl #0x2 - str r1, [r0, #0xc] - ldrb r0, [r4, #0x24] - ldrb r1, [r4, #0x25] - add r0, r5, r0 - strb r1, [r0, #0x8c] -_020BAEE0: - ldr r0, [r4, #0x0] - ands r0, r0, #0x1 - ldrne r0, [r5, #0x8] - orrne r0, r0, #0x80 - strne r0, [r5, #0x8] - ldr r0, [r4, #0x0] - ands r0, r0, #0x2 - ldrne r0, [r5, #0x8] - orrne r0, r0, #0x100 - strne r0, [r5, #0x8] - ldr r0, [r4, #0x0] - ands r0, r0, #0x4 - ldrne r0, [r5, #0x8] - orrne r0, r0, #0x200 - strne r0, [r5, #0x8] - ldr r0, [r4, #0x0] - ands r0, r0, #0x8 - ldrne r0, [r5, #0x8] - orrne r0, r0, #0x400 - strne r0, [r5, #0x8] - ldr r1, [r4, #0x28] - cmp r1, #0x0 - beq _020BAF44 - mov r0, r5 - blx r1 -_020BAF44: - mov r0, r5 - bl FUN_020BAF6C - ldr r0, [r4, #0x0] - bic r0, r0, #0x1 - str r0, [r4, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BAF60: .word UNK_02106614 -_020BAF64: .word UNK_02106608 -_020BAF68: .word UNK_02106620 - - arm_func_start FUN_020BAF6C -FUN_020BAF6C: - stmdb sp!, {r4-r6,lr} - mov r5, r0 - ldr r6, _020BAFB4 ; =UNK_02106730 - add r4, r5, #0x8 -_020BAF7C: - ldr r1, [r4, #0x0] - mov r0, r5 - bic r1, r1, #0x40 - str r1, [r4, #0x0] - ldr r1, [r5, #0x0] - ldrb r3, [r1, #0x0] - and r1, r3, #0x1f - ldr r2, [r6, r1, lsl #0x2] - and r1, r3, #0xe0 - blx r2 - ldr r0, [r5, #0x8] - ands r0, r0, #0x20 - beq _020BAF7C - ldmia sp!, {r4-r6,pc} - .balign 4 -_020BAFB4: .word UNK_02106730 - - arm_func_start FUN_020BAFB8 -FUN_020BAFB8: ; 0x020BAFB8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x6c - mov r6, r0 - ldr r12, [r6, #0x1c] - mov r4, r1 - mov r5, r2 - mov r7, r3 - cmp r12, #0x1000 - beq _020BAFF8 - add r1, sp, #0x54 - mov r0, #0x1b - mov r2, #0x3 - str r12, [sp, #0x54] - str r12, [sp, #0x58] - str r12, [sp, #0x5c] - bl FUN_020BB1C0 -_020BAFF8: - cmp r7, #0x0 - beq _020BB150 - ldr r0, [r6, #0x8] - add r3, r6, r0 - ldrh r0, [r3, #0xa] - add r2, r3, #0x4 - ldrh r1, [r2, r0] - add r0, r2, r0 - mla r0, r1, r4, r0 - ldr r0, [r0, #0x4] - add r4, r3, r0 - ldr r0, [r4, #0xc] - ands r0, r0, #0x1f0000 - addeq sp, sp, #0x6c - ldmeqia sp!, {r4-r7,pc} - ldr r0, _020BB1B4 ; =0x00293130 - str r0, [sp, #0x0] - ldr r0, [r4, #0x4] - str r0, [sp, #0x4] - ldr r0, [r4, #0x8] - str r0, [sp, #0x8] - ldr r1, [r4, #0xc] - str r1, [sp, #0xc] - ldrh r0, [r4, #0x1e] - ands r0, r0, #0x20 - bicne r0, r1, #0x1f0000 - ldr r1, _020BB1B8 ; =0x00002B2A - strne r0, [sp, #0xc] - str r1, [sp, #0x10] - ldr r2, [r4, #0x14] - ldr r0, [sp, #0x0] - str r2, [sp, #0x14] - ldrh r3, [r4, #0x1c] - add r1, sp, #0x4 - mov r2, #0x6 - str r3, [sp, #0x18] - bl FUN_020BB1C0 - ldrh r0, [r4, #0x1e] - ands r0, r0, #0x1 - beq _020BB150 - ldrb r12, [r6, #0x16] - mov r3, #0x8 - ldr r1, _020BB1BC ; =UNK_02106620 - str r3, [sp, #0x1c] - ldrh r2, [r4, #0x20] - add r0, r4, #0x2c - ldr r1, [r1, r12, lsl #0x2] - strh r2, [sp, #0x48] - ldrh r2, [r4, #0x22] - strh r2, [sp, #0x4a] - ldr r2, [r4, #0x24] - str r2, [sp, #0x4c] - ldr r2, [r4, #0x28] - str r2, [sp, #0x50] - ldrh r2, [r4, #0x1e] - ands r2, r2, #0x2 - orrne r2, r3, #0x1 - strne r2, [sp, #0x1c] - bne _020BB0F8 - ldr r2, [r0, #0x0] - str r2, [sp, #0x34] - ldr r2, [r0, #0x4] - add r0, r0, #0x8 - str r2, [sp, #0x38] -_020BB0F8: - ldrh r2, [r4, #0x1e] - ands r2, r2, #0x4 - ldrne r2, [sp, #0x1c] - orrne r2, r2, #0x2 - strne r2, [sp, #0x1c] - bne _020BB124 - ldrsh r2, [r0, #0x0] - strh r2, [sp, #0x3c] - ldrsh r2, [r0, #0x2] - add r0, r0, #0x4 - strh r2, [sp, #0x3e] -_020BB124: - ldrh r2, [r4, #0x1e] - ands r2, r2, #0x8 - ldreq r2, [r0, #0x0] - streq r2, [sp, #0x40] - ldreq r0, [r0, #0x4] - streq r0, [sp, #0x44] - ldrne r0, [sp, #0x1c] - orrne r0, r0, #0x4 - strne r0, [sp, #0x1c] - add r0, sp, #0x1c - blx r1 -_020BB150: - ldr r0, [r6, #0xc] - add r2, r6, r0 - ldrh r0, [r2, #0x6] - ldrh r1, [r2, r0] - add r0, r2, r0 - mla r0, r1, r5, r0 - ldr r0, [r0, #0x4] - add r2, r2, r0 - ldr r0, [r2, #0x8] - ldr r1, [r2, #0xc] - add r0, r2, r0 - bl FUN_020BB2B0 - ldr r3, [r6, #0x20] - cmp r3, #0x1000 - addeq sp, sp, #0x6c - ldmeqia sp!, {r4-r7,pc} - add r1, sp, #0x60 - mov r0, #0x1b - mov r2, #0x3 - str r3, [sp, #0x60] - str r3, [sp, #0x64] - str r3, [sp, #0x68] - bl FUN_020BB1C0 - add sp, sp, #0x6c - ldmia sp!, {r4-r7,pc} - .balign 4 -_020BB1B4: .word 0x00293130 -_020BB1B8: .word 0x00002B2A -_020BB1BC: .word UNK_02106620 - - arm_func_start FUN_020BB1C0 -FUN_020BB1C0: - stmdb sp!, {r4-r6,lr} - ldr r3, _020BB2A4 ; =UNK_021D1C80 - mov r6, r0 - ldr r12, [r3, #0x0] - mov r5, r1 - mov r4, r2 - cmp r12, #0x0 - beq _020BB278 - ldr r0, _020BB2A8 ; =UNK_021D1C84 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020BB24C - ldr r2, [r12, #0x0] - add r0, r2, #0x1 - add r1, r0, r4 - cmp r1, #0xc0 - bhi _020BB24C - str r0, [r12, #0x0] - ldr r0, [r3, #0x0] - cmp r4, #0x0 - add r0, r0, r2, lsl #0x2 - str r6, [r0, #0x4] - ldmeqia sp!, {r4-r6,pc} - ldr r2, [r3, #0x0] - mov r0, r5 - ldr r1, [r2], #0x4 - add r1, r2, r1, lsl #0x2 - mov r2, r4, lsl #0x2 - bl MIi_CpuCopyFast - ldr r0, _020BB2A4 ; =UNK_021D1C80 - ldr r1, [r0, #0x0] - ldr r0, [r1, #0x0] - add r0, r0, r4 - str r0, [r1, #0x0] - ldmia sp!, {r4-r6,pc} -_020BB24C: - ldr r0, [r12, #0x0] - cmp r0, #0x0 - beq _020BB260 - bl FUN_020BB394 - b _020BB28C -_020BB260: - ldr r0, _020BB2A8 ; =UNK_021D1C84 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020BB28C - bl FUN_020BB37C - b _020BB28C -_020BB278: - ldr r0, _020BB2A8 ; =UNK_021D1C84 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020BB28C - bl FUN_020BB37C -_020BB28C: - ldr r1, _020BB2AC ; =0x04000400 - mov r0, r5 - mov r2, r4, lsl #0x2 - str r6, [r1, #0x0] - bl MIi_CpuSend32 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020BB2A4: .word UNK_021D1C80 -_020BB2A8: .word UNK_021D1C84 -_020BB2AC: .word 0x04000400 - - arm_func_start FUN_020BB2B0 -FUN_020BB2B0: ; 0x020BB2B0 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r4, r1 - mov r5, r0 - cmp r4, #0x100 - blo _020BB2DC - ldr r1, _020BB360 ; =GXi_DmaId - mvn r0, #0x0 - ldr r1, [r1, #0x0] - cmp r1, r0 - bne _020BB2F8 -_020BB2DC: - mov r2, r4, lsr #0x2 - ldr r0, [r5, #0x0] - add r1, r5, #0x4 - sub r2, r2, #0x1 - bl FUN_020BB1C0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020BB2F8: - bl FUN_020BB394 - ldr r0, _020BB364 ; =UNK_021D1C88 - ldr r1, _020BB368 ; =UNK_021D1C84 - ldr r0, [r0, #0x0] - mov r2, #0x1 - str r2, [r1, #0x0] - cmp r0, #0x0 - beq _020BB33C - ldr r0, _020BB360 ; =GXi_DmaId - str r1, [sp, #0x0] - ldr r0, [r0, #0x0] - ldr r3, _020BB36C ; =FUN_020BB370 - mov r1, r5 - mov r2, r4 - bl MI_SendGXCommandAsyncFast - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020BB33C: - ldr r0, _020BB360 ; =GXi_DmaId - str r1, [sp, #0x0] - ldr r0, [r0, #0x0] - ldr r3, _020BB36C ; =FUN_020BB370 - mov r1, r5 - mov r2, r4 - bl MI_SendGXCommandAsync - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BB360: .word GXi_DmaId -_020BB364: .word UNK_021D1C88 -_020BB368: .word UNK_021D1C84 -_020BB36C: .word FUN_020BB370 - - arm_func_start FUN_020BB370 -FUN_020BB370: ; 0x020BB370 - mov r1, #0x0 - str r1, [r0, #0x0] - bx lr - - arm_func_start FUN_020BB37C -FUN_020BB37C: ; 0x020BB37C - ldr r0, _020BB390 ; =UNK_021D1C84 -_020BB380: - ldr r1, [r0, #0x0] - cmp r1, #0x0 - bne _020BB380 - bx lr - .balign 4 -_020BB390: .word UNK_021D1C84 - - arm_func_start FUN_020BB394 -FUN_020BB394: ; 0x020BB394 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r0, _020BB3FC ; =UNK_021D1C84 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020BB3B0 - bl FUN_020BB37C -_020BB3B0: - ldr r0, _020BB400 ; =UNK_021D1C80 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r2, [r0, #0x0] - cmp r2, #0x0 - addeq sp, sp, #0x4 - ldmeqia sp!, {pc} - ldr r1, _020BB404 ; =0x04000400 - add r0, r0, #0x4 - mov r2, r2, lsl #0x2 - bl MIi_CpuSend32 - ldr r0, _020BB400 ; =UNK_021D1C80 - mov r1, #0x0 - ldr r0, [r0, #0x0] - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020BB3FC: .word UNK_021D1C84 -_020BB400: .word UNK_021D1C80 -_020BB404: .word 0x04000400 - - arm_func_start FUN_020BB408 -FUN_020BB408: ; 0x020BB408 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x1c - mov r5, r1 - mov r4, r2 - ldr r6, _020BB594 ; =UNK_021CED20 - ldr r1, _020BB598 ; =UNK_021CED64 - add r2, sp, #0x10 - bl MTX_MultVec43 - ldr r1, [sp, #0x14] - ldr r0, [r6, #0x1c] - ldr r2, [sp, #0x10] - smull r8, r7, r1, r0 - ldr r0, [r6, #0xc] - ldr r3, [sp, #0x18] - smlal r8, r7, r2, r0 - ldr r1, [r6, #0x2c] - ldr r0, [r6, #0x3c] - smlal r8, r7, r3, r1 - mov r1, r8, lsr #0xc - orr r1, r1, r7, lsl #0x14 - add r0, r1, r0 - bl FX_InvAsync - ldr r2, [sp, #0x14] - ldr r1, [r6, #0x10] - ldr r0, [r6, #0x14] - smull lr, r8, r2, r1 - smull r12, r9, r2, r0 - ldr r1, [sp, #0x10] - ldr r3, [r6, #0x0] - ldr r0, [sp, #0x18] - smlal lr, r8, r1, r3 - ldr r7, [r6, #0x20] - ldr r2, [r6, #0x30] - smlal lr, r8, r0, r7 - mov r3, lr, lsr #0xc - orr r3, r3, r8, lsl #0x14 - add r7, r3, r2 - ldr r3, [r6, #0x4] - ldr r8, [r6, #0x24] - smlal r12, r9, r1, r3 - smlal r12, r9, r0, r8 - mov r0, r12, lsr #0xc - ldr r2, [r6, #0x34] - orr r0, r0, r9, lsl #0x14 - add r6, r0, r2 - bl FX_GetDivResultFx64c - mov r2, r7, asr #0x1f - umull r9, lr, r0, r7 - mla lr, r0, r2, lr - mov r3, #0x80000000 - mla lr, r1, r7, lr - adds r9, r9, r3 - adc r2, lr, #0x0 - add r2, r2, #0x1000 - add r2, r2, r2, lsr #0x1f - mov r7, r2, asr #0x1 - umull lr, r2, r0, r6 - mov r12, r6, asr #0x1f - mla r2, r0, r12, r2 - mla r2, r1, r6, r2 - adds r3, lr, r3 - adc r0, r2, #0x0 - add r0, r0, #0x1000 - add r0, r0, r0, lsr #0x1f - mov r8, #0x0 - mov r6, r0, asr #0x1 - cmp r7, #0x0 - blt _020BB530 - cmp r6, #0x0 - blt _020BB530 - cmp r7, #0x1000 - bgt _020BB530 - cmp r6, #0x1000 - ble _020BB534 -_020BB530: - mvn r8, #0x0 -_020BB534: - add r0, sp, #0x0 - add r1, sp, #0x4 - add r2, sp, #0x8 - add r3, sp, #0xc - bl FUN_020B8200 - ldr r2, [sp, #0x0] - ldr r0, [sp, #0x8] - ldr r12, [sp, #0xc] - sub r0, r0, r2 - mul r0, r7, r0 - add r1, r0, #0x800 - ldr r3, [sp, #0x4] - add r1, r2, r1, asr #0xc - sub r0, r12, r3 - mul r0, r6, r0 - str r1, [r5, #0x0] - ldr r1, [sp, #0x4] - add r0, r0, #0x800 - rsb r1, r1, #0xbf - sub r1, r1, r0, asr #0xc - mov r0, r8 - str r1, [r4, #0x0] - add sp, sp, #0x1c - ldmia sp!, {r4-r9,pc} - .balign 4 -_020BB594: .word UNK_021CED20 -_020BB598: .word UNK_021CED64 - - arm_func_start FUN_020BB59C -FUN_020BB59C: ; 0x020BB59C - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r1, [r5, #0x0] - ldr r0, _020BB7C8 ; =0x30415642 - cmp r1, r0 - bhi _020BB5F4 - cmp r1, r0 - bhs _020BB7B0 - ldr r0, _020BB7CC ; =0x30414D42 - cmp r1, r0 - bhi _020BB5E4 - cmp r1, r0 - bhs _020BB7B0 - ldr r0, _020BB7D0 ; =0x30414342 - cmp r1, r0 - beq _020BB7B0 - b _020BB7BC -_020BB5E4: - ldr r0, _020BB7D4 ; =0x30415442 - cmp r1, r0 - beq _020BB7B0 - b _020BB7BC -_020BB5F4: - ldr r0, _020BB7D8 ; =0x30505442 - cmp r1, r0 - bhi _020BB618 - cmp r1, r0 - bhs _020BB7B0 - ldr r0, _020BB7DC ; =0x30444D42 - cmp r1, r0 - beq _020BB624 - b _020BB7BC -_020BB618: - ldr r0, _020BB7E0 ; =0x30585442 - cmp r1, r0 - bne _020BB7BC -_020BB624: - mov r11, #0x1 - mov r0, r5 - mov r9, r11 - mov r8, r11 - bl FUN_020BC0FC - movs r4, r0 - beq _020BB77C - bl FUN_020B7E1C - mov r7, r0 - mov r0, r4 - bl FUN_020B7E10 - mov r6, r0 - mov r0, r4 - bl FUN_020B7CE4 - mov r10, r0 - cmp r7, #0x0 - beq _020BB68C - ldr r0, _020BB7E4 ; =UNK_021064B8 - mov r1, #0x0 - ldr r3, [r0, #0x0] - mov r0, r7 - mov r2, r1 - blx r3 - movs r7, r0 - moveq r11, #0x0 - b _020BB690 -_020BB68C: - mov r7, #0x0 -_020BB690: - cmp r6, #0x0 - beq _020BB6BC - ldr r1, _020BB7E4 ; =UNK_021064B8 - mov r0, r6 - ldr r3, [r1, #0x0] - mov r1, #0x1 - mov r2, #0x0 - blx r3 - movs r6, r0 - moveq r9, #0x0 - b _020BB6C0 -_020BB6BC: - mov r6, #0x0 -_020BB6C0: - cmp r10, #0x0 - beq _020BB6F0 - ldr r1, _020BB7E8 ; =UNK_021064C0 - ldrh r2, [r4, #0x20] - ldr r3, [r1, #0x0] - mov r0, r10 - and r1, r2, #0x8000 - mov r2, #0x0 - blx r3 - movs r10, r0 - moveq r8, #0x0 - b _020BB6F4 -_020BB6F0: - mov r10, #0x0 -_020BB6F4: - cmp r11, #0x0 - beq _020BB70C - cmp r9, #0x0 - beq _020BB70C - cmp r8, #0x0 - bne _020BB748 -_020BB70C: - ldr r1, _020BB7EC ; =UNK_021064C4 - mov r0, r10 - ldr r1, [r1, #0x0] - blx r1 - ldr r1, _020BB7F0 ; =UNK_021064BC - mov r0, r6 - ldr r1, [r1, #0x0] - blx r1 - ldr r1, _020BB7F0 ; =UNK_021064BC - mov r0, r7 - ldr r1, [r1, #0x0] - blx r1 - add sp, sp, #0x4 - mov r0, #0x0 - ldmia sp!, {r4-r11,pc} -_020BB748: - mov r0, r4 - mov r1, r7 - mov r2, r6 - bl FUN_020B7DFC - mov r0, r4 - mov r1, r10 - bl FUN_020B7CDC - mov r0, r4 - mov r1, #0x1 - bl FUN_020B7D28 - mov r0, r4 - mov r1, #0x1 - bl FUN_020B7C78 -_020BB77C: - ldr r1, [r5, #0x0] - ldr r0, _020BB7DC ; =0x30444D42 - cmp r1, r0 - bne _020BB7A4 - mov r0, r5 - bl FUN_020BC13C - cmp r4, #0x0 - beq _020BB7A4 - mov r1, r4 - bl FUN_020B7790 -_020BB7A4: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,pc} -_020BB7B0: - add sp, sp, #0x4 - mov r0, #0x1 - ldmia sp!, {r4-r11,pc} -_020BB7BC: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020BB7C8: .word 0x30415642 -_020BB7CC: .word 0x30414D42 -_020BB7D0: .word 0x30414342 -_020BB7D4: .word 0x30415442 -_020BB7D8: .word 0x30505442 -_020BB7DC: .word 0x30444D42 -_020BB7E0: .word 0x30585442 -_020BB7E4: .word UNK_021064B8 -_020BB7E8: .word UNK_021064C0 -_020BB7EC: .word UNK_021064C4 -_020BB7F0: .word UNK_021064BC - - arm_func_start FUN_020BB7F4 -FUN_020BB7F4: ; 0x020BB7F4 - stmdb sp!, {lr} - sub sp, sp, #0x4 - bl G3X_Init - bl FUN_020B84D8 - ldr r1, _020BB820 ; =0x04000600 - ldr r0, [r1, #0x0] - bic r0, r0, #0xc0000000 - orr r0, r0, #0x80000000 - str r0, [r1, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020BB820: .word 0x04000600 - - arm_func_start FUN_020BB824 -FUN_020BB824: ; 0x020BB824 - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x40 - mov r6, r0 - mov r5, r1 - bl FUN_020BB394 - ldr r0, _020BB8B4 ; =0x04000440 - mov r2, #0x0 - ldr r1, _020BB8B8 ; =0x04000444 - str r2, [r0, #0x0] - ldr r0, _020BB8BC ; =0x04000454 - str r2, [r1, #0x0] - str r2, [r0, #0x0] - cmp r6, #0x0 - beq _020BB87C - add r4, sp, #0x0 -_020BB860: - mov r0, r4 - bl G3X_GetClipMtx - cmp r0, #0x0 - bne _020BB860 - add r0, sp, #0x0 - mov r1, r6 - bl MTX_Copy44To43_ -_020BB87C: - cmp r5, #0x0 - beq _020BB894 -_020BB884: - mov r0, r5 - bl G3X_GetVectorMtx - cmp r0, #0x0 - bne _020BB884 -_020BB894: - ldr r1, _020BB8C0 ; =0x04000448 - mov r2, #0x1 - ldr r0, _020BB8B4 ; =0x04000440 - str r2, [r1, #0x0] - mov r1, #0x2 - str r1, [r0, #0x0] - add sp, sp, #0x40 - ldmia sp!, {r4-r6,pc} - .balign 4 -_020BB8B4: .word 0x04000440 -_020BB8B8: .word 0x04000444 -_020BB8BC: .word 0x04000454 -_020BB8C0: .word 0x04000448 - - arm_func_start thunk_FUN_020ae84c -thunk_FUN_020ae84c: ; 0x020BB8C4 - ldr ip, _020BB8CC ; =FUN_020AE84C - bx r12 - .balign 4 -_020BB8CC: .word FUN_020AE84C - - arm_func_start FUN_020BB8D0 -FUN_020BB8D0: ; 0x020BB8D0 - stmdb sp!, {r4,lr} - mov r4, r0 - mov r0, r1 - mov r1, r2 - bl FUN_020B81B0 - mov r1, r0 - mov r0, r4 - bl FUN_020AE868 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BB8F4 -FUN_020BB8F4: ; 0x020BB8F4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BB910: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBC74 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BB910 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BB934 -FUN_020BB934: ; 0x020BB934 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BB950: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBCB8 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BB950 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BB974 -FUN_020BB974: ; 0x020BB974 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BB990: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBCFC - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BB990 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BB9B4 -FUN_020BB9B4: ; 0x020BB9B4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BB9D0: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBD40 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BB9D0 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BB9F4 -FUN_020BB9F4: ; 0x020BB9F4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBA10: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBD84 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBA10 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBA34 -FUN_020BBA34: ; 0x020BBA34 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBA50: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBDC8 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBA50 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBA74 -FUN_020BBA74: ; 0x020BBA74 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBA90: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBE0C - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBA90 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBAB4 -FUN_020BBAB4: ; 0x020BBAB4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBAD0: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBE50 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBAD0 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBAF4 -FUN_020BBAF4: ; 0x020BBAF4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBB10: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBE94 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBB10 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBB34 -FUN_020BBB34: ; 0x020BBB34 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBB50: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBED8 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBB50 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBB74 -FUN_020BBB74: ; 0x020BBB74 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBB90: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBF1C - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBB90 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBBB4 -FUN_020BBBB4: ; 0x020BBBB4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBBD0: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBF60 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBBD0 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBBF4 -FUN_020BBBF4: ; 0x020BBBF4 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBC10: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBFA4 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBC10 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBC34 -FUN_020BBC34: ; 0x020BBC34 - stmdb sp!, {r4-r6,lr} - mov r6, r0 - ldrb r0, [r6, #0x18] - mov r5, r1 - mov r4, #0x0 - cmp r0, #0x0 - ldmlsia sp!, {r4-r6,pc} -_020BBC50: - mov r0, r6 - mov r1, r4 - mov r2, r5 - bl FUN_020BBFE8 - ldrb r0, [r6, #0x18] - add r4, r4, #0x1 - cmp r4, r0 - blo _020BBC50 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BBC74 -FUN_020BBC74: ; 0x020BBC74 - ldr r3, [r0, #0x8] - cmp r2, #0x0 - add r12, r0, r3 - ldrh r0, [r12, #0xa] - add r3, r12, #0x4 - ldrh r2, [r3, r0] - add r0, r3, r0 - mla r0, r2, r1, r0 - ldr r0, [r0, #0x4] - add r1, r12, r0 - ldrne r0, [r1, #0xc] - orrne r0, r0, #0x800 - strne r0, [r1, #0xc] - ldreq r0, [r1, #0xc] - biceq r0, r0, #0x800 - streq r0, [r1, #0xc] - bx lr - - arm_func_start FUN_020BBCB8 -FUN_020BBCB8: ; 0x020BBCB8 - ldr r3, [r0, #0x8] - cmp r2, #0x0 - add r12, r0, r3 - ldrh r0, [r12, #0xa] - add r3, r12, #0x4 - ldrh r2, [r3, r0] - add r0, r3, r0 - mla r0, r2, r1, r0 - ldr r0, [r0, #0x4] - add r1, r12, r0 - ldrne r0, [r1, #0xc] - orrne r0, r0, #0x1000 - strne r0, [r1, #0xc] - ldreq r0, [r1, #0xc] - biceq r0, r0, #0x1000 - streq r0, [r1, #0xc] - bx lr - - arm_func_start FUN_020BBCFC -FUN_020BBCFC: ; 0x020BBCFC - ldr r3, [r0, #0x8] - cmp r2, #0x0 - add r12, r0, r3 - ldrh r0, [r12, #0xa] - add r3, r12, #0x4 - ldrh r2, [r3, r0] - add r0, r3, r0 - mla r0, r2, r1, r0 - ldr r0, [r0, #0x4] - add r1, r12, r0 - ldrne r0, [r1, #0xc] - orrne r0, r0, #0x2000 - strne r0, [r1, #0xc] - ldreq r0, [r1, #0xc] - biceq r0, r0, #0x2000 - streq r0, [r1, #0xc] - bx lr - - arm_func_start FUN_020BBD40 -FUN_020BBD40: ; 0x020BBD40 - ldr r3, [r0, #0x8] - cmp r2, #0x0 - add r12, r0, r3 - ldrh r0, [r12, #0xa] - add r3, r12, #0x4 - ldrh r2, [r3, r0] - add r0, r3, r0 - mla r0, r2, r1, r0 - ldr r0, [r0, #0x4] - add r1, r12, r0 - ldrne r0, [r1, #0xc] - orrne r0, r0, #0x4000 - strne r0, [r1, #0xc] - ldreq r0, [r1, #0xc] - biceq r0, r0, #0x4000 - streq r0, [r1, #0xc] - bx lr - - arm_func_start FUN_020BBD84 -FUN_020BBD84: ; 0x020BBD84 - ldr r3, [r0, #0x8] - cmp r2, #0x0 - add r12, r0, r3 - ldrh r0, [r12, #0xa] - add r3, r12, #0x4 - ldrh r2, [r3, r0] - add r0, r3, r0 - mla r0, r2, r1, r0 - ldr r0, [r0, #0x4] - add r1, r12, r0 - ldrne r0, [r1, #0xc] - orrne r0, r0, #0x8000 - strne r0, [r1, #0xc] - ldreq r0, [r1, #0xc] - biceq r0, r0, #0x8000 - streq r0, [r1, #0xc] - bx lr - - arm_func_start FUN_020BBDC8 -FUN_020BBDC8: ; 0x020BBDC8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x8] - add lr, r0, r3 - ldrh r0, [lr, #0xa] - add r12, lr, #0x4 - ldrh r3, [r12, r0] - add r0, r12, r0 - mla r0, r3, r1, r0 - ldr r0, [r0, #0x4] - add r1, lr, r0 - ldr r0, [r1, #0xc] - bic r0, r0, #0x1f0000 - orr r0, r0, r2, lsl #0x10 - str r0, [r1, #0xc] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BBE0C -FUN_020BBE0C: ; 0x020BBE0C - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x8] - add lr, r0, r3 - ldrh r0, [lr, #0xa] - add r12, lr, #0x4 - ldrh r3, [r12, r0] - add r0, r12, r0 - mla r0, r3, r1, r0 - ldr r0, [r0, #0x4] - add r1, lr, r0 - ldr r0, [r1, #0xc] - bic r0, r0, #0x3f000000 - orr r0, r0, r2, lsl #0x18 - str r0, [r1, #0xc] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BBE50 -FUN_020BBE50: ; 0x020BBE50 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x8] - add lr, r0, r3 - ldrh r0, [lr, #0xa] - add r12, lr, #0x4 - ldrh r3, [r12, r0] - add r0, r12, r0 - mla r0, r3, r1, r0 - ldr r0, [r0, #0x4] - add r1, lr, r0 - ldr r0, [r1, #0xc] - bic r0, r0, #0xc0 - orr r0, r0, r2, lsl #0x6 - str r0, [r1, #0xc] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BBE94 -FUN_020BBE94: ; 0x020BBE94 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x8] - add lr, r0, r3 - ldrh r0, [lr, #0xa] - add r12, lr, #0x4 - ldrh r3, [r12, r0] - add r0, r12, r0 - mla r0, r3, r1, r0 - ldr r0, [r0, #0x4] - add r1, lr, r0 - ldr r0, [r1, #0xc] - bic r0, r0, #0x30 - orr r0, r0, r2, lsl #0x4 - str r0, [r1, #0xc] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BBED8 -FUN_020BBED8: ; 0x020BBED8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r3, [r0, #0x8] - add lr, r0, r3 - ldrh r0, [lr, #0xa] - add r12, lr, #0x4 - ldrh r3, [r12, r0] - add r0, r12, r0 - mla r0, r3, r1, r0 - ldr r0, [r0, #0x4] - add r1, lr, r0 - ldr r0, [r1, #0xc] - bic r0, r0, #0xf - orr r0, r0, r2 - str r0, [r1, #0xc] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BBF1C -FUN_020BBF1C: ; 0x020BBF1C - stmdb sp!, {r4,lr} - ldr r12, [r0, #0x8] - ldr r3, _020BBF5C ; =0x8000FFFF - add r4, r0, r12 - ldrh r0, [r4, #0xa] - add lr, r4, #0x4 - ldrh r12, [lr, r0] - add r0, lr, r0 - mla r0, r12, r1, r0 - ldr r0, [r0, #0x4] - add r1, r4, r0 - ldr r0, [r1, #0x8] - and r0, r0, r3 - orr r0, r0, r2, lsl #0x10 - str r0, [r1, #0x8] - ldmia sp!, {r4,pc} - .balign 4 -_020BBF5C: .word 0x8000FFFF - - arm_func_start FUN_020BBF60 -FUN_020BBF60: ; 0x020BBF60 - stmdb sp!, {r4,lr} - ldr r12, [r0, #0x8] - mov r3, #0x8000 - add r4, r0, r12 - ldrh r12, [r4, #0xa] - add lr, r4, #0x4 - rsb r0, r3, #0x0 - ldrh r3, [lr, r12] - add r12, lr, r12 - mla r1, r3, r1, r12 - ldr r1, [r1, #0x4] - add r3, r4, r1 - ldr r1, [r3, #0x8] - and r0, r1, r0 - orr r0, r0, r2 - str r0, [r3, #0x8] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BBFA4 -FUN_020BBFA4: ; 0x020BBFA4 - stmdb sp!, {r4,lr} - ldr r12, [r0, #0x8] - ldr r3, _020BBFE4 ; =0x8000FFFF - add r4, r0, r12 - ldrh r0, [r4, #0xa] - add lr, r4, #0x4 - ldrh r12, [lr, r0] - add r0, lr, r0 - mla r0, r12, r1, r0 - ldr r0, [r0, #0x4] - add r1, r4, r0 - ldr r0, [r1, #0x4] - and r0, r0, r3 - orr r0, r0, r2, lsl #0x10 - str r0, [r1, #0x4] - ldmia sp!, {r4,pc} - .balign 4 -_020BBFE4: .word 0x8000FFFF - - arm_func_start FUN_020BBFE8 -FUN_020BBFE8: ; 0x020BBFE8 - stmdb sp!, {r4,lr} - ldr r12, [r0, #0x8] - mov r3, #0x8000 - add r4, r0, r12 - ldrh r12, [r4, #0xa] - add lr, r4, #0x4 - rsb r0, r3, #0x0 - ldrh r3, [lr, r12] - add r12, lr, r12 - mla r1, r3, r1, r12 - ldr r1, [r1, #0x4] - add r3, r4, r1 - ldr r1, [r3, #0x4] - and r0, r1, r0 - orr r0, r0, r2 - str r0, [r3, #0x4] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BC02C -FUN_020BC02C: ; 0x020BC02C - stmdb sp!, {r4-r6,lr} - ldrb r4, [r0, #0x18] - ldr r3, [r0, #0x8] - mov lr, #0x0 - cmp r4, #0x0 - add r12, r0, r3 - ldmlsia sp!, {r4-r6,pc} - mvn r3, r2 - add r0, r12, #0x4 -_020BC050: - ldrh r5, [r12, #0xa] - cmp r1, #0x0 - ldrh r6, [r0, r5] - add r5, r0, r5 - mla r5, r6, lr, r5 - ldr r5, [r5, #0x4] - add lr, lr, #0x1 - add r6, r12, r5 - ldrne r5, [r6, #0x10] - orrne r5, r5, r2 - strne r5, [r6, #0x10] - ldreq r5, [r6, #0x10] - andeq r5, r5, r3 - streq r5, [r6, #0x10] - cmp lr, r4 - blo _020BC050 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BC094 -FUN_020BC094: ; 0x020BC094 - stmdb sp!, {r4-r6,lr} - ldrb r4, [r0, #0x18] - ldr r3, [r0, #0x8] - mov lr, #0x0 - cmp r4, #0x0 - add r12, r0, r3 - ldmlsia sp!, {r4-r6,pc} - mvn r3, r2 - add r0, r12, #0x4 -_020BC0B8: - ldrh r5, [r12, #0xa] - cmp r1, #0x0 - ldrh r6, [r0, r5] - add r5, r0, r5 - mla r5, r6, lr, r5 - ldr r5, [r5, #0x4] - add lr, lr, #0x1 - add r6, r12, r5 - ldrneh r5, [r6, #0x1e] - orrne r5, r5, r2 - strneh r5, [r6, #0x1e] - ldreqh r5, [r6, #0x1e] - andeq r5, r5, r3 - streqh r5, [r6, #0x1e] - cmp lr, r4 - blo _020BC0B8 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BC0FC -FUN_020BC0FC: ; 0x020BC0FC - ldrh r2, [r0, #0xc] - ldrh r1, [r0, #0xe] - add r3, r0, r2 - cmp r1, #0x1 - bne _020BC12C - ldr r2, [r0, #0x0] - ldr r1, _020BC138 ; =0x30585442 - cmp r2, r1 - ldreq r1, [r3, #0x0] - addeq r0, r0, r1 - movne r0, #0x0 - bx lr -_020BC12C: - ldr r1, [r3, #0x4] - add r0, r0, r1 - bx lr - .balign 4 -_020BC138: .word 0x30585442 - - arm_func_start FUN_020BC13C -FUN_020BC13C: - ldrh r1, [r0, #0xc] - ldr r1, [r0, r1] - add r0, r0, r1 - bx lr - - arm_func_start FUN_020BC14C -FUN_020BC14C: - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldrb r2, [r0, #0x1] - cmp r2, #0x10 - bhs _020BC1E4 - cmp r2, #0x0 - ldr lr, [r1, #0x0] - ldr r12, [r1, #0x4] - ldr r3, [r1, #0x8] - ldr r2, [r1, #0xc] - mov r4, #0x0 - bls _020BC294 - ldrh r5, [r0, #0x6] - mov r1, r4 - add r6, r0, r5 - ldrh r5, [r6, #0x2] - add r6, r6, r5 -_020BC190: - ldr r5, [r6, r1] - add r7, r6, r1 - cmp r5, lr - bne _020BC1CC - ldr r5, [r7, #0x4] - cmp r5, r12 - bne _020BC1CC - ldr r5, [r7, #0x8] - cmp r5, r3 - bne _020BC1CC - ldr r5, [r7, #0xc] - cmp r5, r2 - addeq sp, sp, #0x4 - moveq r0, r4 - ldmeqia sp!, {r4-r7,pc} -_020BC1CC: - ldrb r5, [r0, #0x1] - add r4, r4, #0x1 - add r1, r1, #0x10 - cmp r4, r5 - blo _020BC190 - b _020BC294 -_020BC1E4: - add r3, r0, #0x8 - ldrb r2, [r3, #0x1] - cmp r2, #0x0 - beq _020BC294 - ldrb r5, [r3, r2, lsl #0x2] - ldrb r4, [r3, #0x0] - add r2, r3, r2, lsl #0x2 - cmp r4, r5 - bls _020BC238 -_020BC208: - mov r4, r5, asr #0x5 - ldr r12, [r1, r4, lsl #0x2] - and r4, r5, #0x1f - mov r4, r12, lsr r4 - and r4, r4, #0x1 - add r4, r2, r4 - ldrb r12, [r4, #0x1] - ldrb r4, [r2, #0x0] - ldrb r5, [r3, r12, lsl #0x2] - add r2, r3, r12, lsl #0x2 - cmp r4, r5 - bhi _020BC208 -_020BC238: - ldrh r4, [r0, #0x6] - ldr r3, [r1, #0x0] - add r12, r0, r4 - ldrh r4, [r12, #0x2] - ldrb r0, [r2, #0x3] - add r4, r12, r4 - ldr r2, [r4, r0, lsl #0x4] - add r4, r4, r0, lsl #0x4 - cmp r2, r3 - bne _020BC294 - ldr r3, [r4, #0x4] - ldr r2, [r1, #0x4] - cmp r3, r2 - bne _020BC294 - ldr r3, [r4, #0x8] - ldr r2, [r1, #0x8] - cmp r3, r2 - bne _020BC294 - ldr r2, [r4, #0xc] - ldr r1, [r1, #0xc] - cmp r2, r1 - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} -_020BC294: - mvn r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BC2A0 -FUN_020BC2A0: ; 0x020BC2A0 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldrb r2, [r0, #0x1] - cmp r2, #0x10 - bhs _020BC34C - cmp r2, #0x0 - ldr lr, [r1, #0x0] - ldr r12, [r1, #0x4] - ldr r3, [r1, #0x8] - ldr r2, [r1, #0xc] - mov r4, #0x0 - bls _020BC404 - ldrh r5, [r0, #0x6] - mov r1, r4 - add r6, r0, r5 - ldrh r5, [r6, #0x2] - add r6, r6, r5 -_020BC2E4: - ldr r5, [r6, r1] - add r7, r6, r1 - cmp r5, lr - bne _020BC334 - ldr r5, [r7, #0x4] - cmp r5, r12 - bne _020BC334 - ldr r5, [r7, #0x8] - cmp r5, r3 - bne _020BC334 - ldr r5, [r7, #0xc] - cmp r5, r2 - bne _020BC334 - ldrh r2, [r0, #0x6] - add sp, sp, #0x4 - ldrh r1, [r0, r2] - add r0, r0, r2 - add r0, r0, #0x4 - mla r0, r1, r4, r0 - ldmia sp!, {r4-r7,pc} -_020BC334: - ldrb r5, [r0, #0x1] - add r4, r4, #0x1 - add r1, r1, #0x10 - cmp r4, r5 - blo _020BC2E4 - b _020BC404 -_020BC34C: - add r3, r0, #0x8 - ldrb r2, [r3, #0x1] - cmp r2, #0x0 - beq _020BC404 - ldrb r5, [r3, r2, lsl #0x2] - ldrb r4, [r3, #0x0] - add r2, r3, r2, lsl #0x2 - cmp r4, r5 - bls _020BC3A0 -_020BC370: - mov r4, r5, asr #0x5 - ldr r12, [r1, r4, lsl #0x2] - and r4, r5, #0x1f - mov r4, r12, lsr r4 - and r4, r4, #0x1 - add r4, r2, r4 - ldrb r12, [r4, #0x1] - ldrb r4, [r2, #0x0] - ldrb r5, [r3, r12, lsl #0x2] - add r2, r3, r12, lsl #0x2 - cmp r4, r5 - bhi _020BC370 -_020BC3A0: - ldrh r4, [r0, #0x6] - ldrb r2, [r2, #0x3] - ldr r3, [r1, #0x0] - add r0, r0, r4 - ldrh r4, [r0, #0x2] - add r12, r0, r4 - ldr r4, [r12, r2, lsl #0x4] - add r12, r12, r2, lsl #0x4 - cmp r4, r3 - bne _020BC404 - ldr r4, [r12, #0x4] - ldr r3, [r1, #0x4] - cmp r4, r3 - bne _020BC404 - ldr r4, [r12, #0x8] - ldr r3, [r1, #0x8] - cmp r4, r3 - bne _020BC404 - ldr r3, [r12, #0xc] - ldr r1, [r1, #0xc] - cmp r3, r1 - ldreqh r1, [r0], #0x4 - addeq sp, sp, #0x4 - mlaeq r0, r1, r2, r0 - ldmeqia sp!, {r4-r7,pc} -_020BC404: - mov r0, #0x0 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BC410 -FUN_020BC410: ; 0x020BC410 - ldrh r3, [r0, #0x12] - add r0, r0, #0xc - ldrh r2, [r0, r3] - add r0, r0, r3 - add r0, r0, #0x4 - mla r0, r2, r1, r0 - bx lr - - arm_func_start FUN_020BC42C -FUN_020BC42C: ; 0x020BC42C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r2 - bl FUN_020BC410 - ldrsh r1, [r0, #0x4] - ldrh r3, [r0, #0x6] - mul r2, r1, r4 - add r3, r5, r3 - mov r2, r2, lsr #0xc - b _020BC45C -_020BC458: - sub r2, r2, #0x1 -_020BC45C: - cmp r2, #0x0 - beq _020BC474 - mov r1, r2, lsl #0x2 - ldrh r1, [r3, r1] - cmp r1, r4 - bhs _020BC458 -_020BC474: - ldrh r1, [r0, #0x0] - b _020BC480 -_020BC47C: - add r2, r2, #0x1 -_020BC480: - add r0, r2, #0x1 - cmp r0, r1 - bhs _020BC49C - add r0, r3, r2, lsl #0x2 - ldrh r0, [r0, #0x4] - cmp r0, r4 - bls _020BC47C -_020BC49C: - add r0, r3, r2, lsl #0x2 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020BC4A8 -FUN_020BC4A8: ; 0x020BC4A8 - ldrh r2, [r0, #0xa] - add r0, r0, r2 - add r0, r0, r1, lsl #0x4 - bx lr - - arm_func_start FUN_020BC4B8 -FUN_020BC4B8: ; 0x020BC4B8 - ldrh r2, [r0, #0x8] - add r0, r0, r2 - add r0, r0, r1, lsl #0x4 - bx lr - - arm_func_start FUN_020BC4C8 -FUN_020BC4C8: ; 0x020BC4C8 - ldrh r2, [r0, #0xc] - ldr r2, [r0, r2] - add r12, r0, r2 - ldrh r2, [r12, #0xe] - add r3, r12, #0x8 - ldrh r0, [r3, r2] - add r2, r3, r2 - add r2, r2, #0x4 - mul r1, r0, r1 - adds r0, r2, r1 - ldrne r0, [r0, #0x0] - addne r0, r12, r0 - moveq r0, #0x0 - bx lr - - arm_func_start FUN_020BC500 -FUN_020BC500: - stmdb sp!, {r4,lr} - ands r4, r3, #0x8000 - beq _020BC5E0 - mov r2, #0x0 - str r2, [r0, #0x20] - ldr r4, [r0, #0x20] - ldr r2, _020BC684 ; =0x00007FFF - str r4, [r0, #0x1c] - ldr r4, [r0, #0x1c] - and r3, r3, r2 - str r4, [r0, #0x18] - ldr r4, [r0, #0x18] - mov r2, #0x3 - str r4, [r0, #0x14] - ldr r4, [r0, #0x14] - mul r2, r3, r2 - str r4, [r0, #0x10] - ldr r4, [r0, #0x10] - mov r3, r2, lsl #0x1 - str r4, [r0, #0xc] - ldr r4, [r0, #0xc] - add r2, r1, r2, lsl #0x1 - str r4, [r0, #0x8] - ldr r4, [r0, #0x8] - str r4, [r0, #0x4] - ldr r4, [r0, #0x4] - str r4, [r0, #0x0] - ldrsh r4, [r1, r3] - ldrsh r12, [r2, #0x2] - ldrsh r3, [r2, #0x4] - and r1, r4, #0xf - ands r4, r4, #0x10 - movne lr, #0x1000 - rsbne lr, lr, #0x0 - moveq lr, #0x1000 - str lr, [r0, r1, lsl #0x2] - ldr r4, _020BC688 ; =UNK_020FFA14 - ldr lr, _020BC68C ; =UNK_020FFA15 - ldrb r4, [r4, r1, lsl #0x2] - str r12, [r0, r4, lsl #0x2] - ldrb lr, [lr, r1, lsl #0x2] - str r3, [r0, lr, lsl #0x2] - ldrsh lr, [r2, #0x0] - ands lr, lr, #0x20 - ldr lr, _020BC690 ; =UNK_020FFA16 - rsbne r3, r3, #0x0 - ldrb lr, [lr, r1, lsl #0x2] - str r3, [r0, lr, lsl #0x2] - ldrsh r2, [r2, #0x0] - ands r2, r2, #0x40 - ldr r2, _020BC694 ; =UNK_020FFA17 - rsbne r12, r12, #0x0 - ldrb r1, [r2, r1, lsl #0x2] - str r12, [r0, r1, lsl #0x2] - mov r0, #0x0 - ldmia sp!, {r4,pc} -_020BC5E0: - ldr r1, _020BC684 ; =0x00007FFF - mov r12, #0x5 - and r1, r3, r1 - mul r3, r1, r12 - add r1, r2, r3, lsl #0x1 - ldrsh lr, [r1, #0x8] - mov r12, r3, lsl #0x1 - mov r3, lr, asr #0x3 - str r3, [r0, #0x10] - ldrsh r12, [r2, r12] - and r2, lr, #0x7 - mov r2, r2, lsl #0x10 - mov r3, r12, asr #0x3 - str r3, [r0, #0x0] - ldrsh r3, [r1, #0x2] - and r12, r12, #0x7 - orr lr, r12, r2, asr #0xd - mov r2, r3, asr #0x3 - str r2, [r0, #0x4] - ldrsh r12, [r1, #0x4] - mov r2, lr, lsl #0x10 - and lr, r3, #0x7 - mov r3, r12, asr #0x3 - str r3, [r0, #0x8] - ldrsh r3, [r1, #0x6] - orr r1, lr, r2, asr #0xd - mov r1, r1, lsl #0x10 - and r2, r12, #0x7 - orr r1, r2, r1, asr #0xd - mov r1, r1, lsl #0x10 - and r2, r3, #0x7 - orr r1, r2, r1, asr #0xd - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - mov r2, r3, asr #0x3 - mov r1, r1, lsl #0x13 - str r2, [r0, #0xc] - mov r1, r1, asr #0x13 - str r1, [r0, #0x14] - mov r0, #0x1 - ldmia sp!, {r4,pc} - .balign 4 -_020BC684: .word 0x00007FFF -_020BC688: .word UNK_020FFA14 -_020BC68C: .word UNK_020FFA15 -_020BC690: .word UNK_020FFA16 -_020BC694: .word UNK_020FFA17 - - arm_func_start FUN_020BC698 -FUN_020BC698: ; 0x020BC698 - stmdb sp!, {r4-r10,lr} - sub sp, sp, #0x48 - ldrh r4, [r3, #0x4] - ldr r5, [r3, #0xc] - ldr r8, [r3, #0x10] - ldr r7, [r2, #0x4] - mov r12, r1, asr #0xc - sub r4, r4, #0x1 - mov r6, r0 - cmp r12, r4 - add r5, r3, r5 - add r4, r3, r8 - add r8, r3, r7 - ldr r7, [r2, #0x0] - bne _020BC780 - ands r0, r7, #0xc0000000 - beq _020BC6F0 - ands r0, r7, #0x40000000 - andne r0, r12, #0x1 - addne r12, r0, r12, lsr #0x1 - andeq r0, r12, #0x3 - addeq r12, r0, r12, lsr #0x2 -_020BC6F0: - ldr r0, [r3, #0x8] - ands r0, r0, #0x2 - movne r7, #0x0 - bne _020BC7F4 - mov r0, r12, lsl #0x1 - ldrh r3, [r8, r0] - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - cmp r0, #0x0 - addeq sp, sp, #0x48 - ldmeqia sp!, {r4-r10,pc} - ldr r9, [r6, #0x14] - ldr r5, [r6, #0x4] - ldr r4, [r6, #0x10] - ldr r2, [r6, #0x8] - mul r1, r5, r9 - mul r0, r2, r4 - sub r0, r1, r0 - ldr r7, [r6, #0xc] - ldr r8, [r6, #0x0] - mov r3, r0, asr #0xc - mul r1, r2, r7 - mul r0, r8, r9 - sub r2, r1, r0 - mul r1, r8, r4 - mul r0, r5, r7 - sub r0, r1, r0 - str r3, [r6, #0x18] - mov r1, r2, asr #0xc - str r1, [r6, #0x1c] - mov r0, r0, asr #0xc - add sp, sp, #0x48 - str r0, [r6, #0x20] - ldmia sp!, {r4-r10,pc} -_020BC780: - ands r0, r7, #0xc0000000 - beq _020BC7F0 - ldr r0, _020BC9C4 ; =0x1FFF0000 - ands r2, r7, #0x40000000 - and r0, r7, r0 - mov r0, r0, lsr #0x10 - beq _020BC7C4 - cmp r12, r0 - movcs r12, r0, lsr #0x1 - addcs r7, r12, #0x1 - bhs _020BC7F4 - ldr r0, _020BC9C8 ; =0x00001FFF - mov r12, r12, lsr #0x1 - add r7, r12, #0x1 - and r10, r1, r0 - mov r9, #0x2 - b _020BC800 -_020BC7C4: - cmp r12, r0 - andcs r0, r12, #0x3 - addcs r12, r0, r12, lsr #0x2 - addcs r7, r12, #0x1 - bhs _020BC7F4 - ldr r0, _020BC9CC ; =0x00003FFF - mov r12, r12, lsr #0x2 - add r7, r12, #0x1 - and r10, r1, r0 - mov r9, #0x4 - b _020BC800 -_020BC7F0: - add r7, r12, #0x1 -_020BC7F4: - ldr r0, _020BC9D0 ; =0x00000FFF - mov r9, #0x1 - and r10, r1, r0 -_020BC800: - mov r0, r12, lsl #0x1 - ldrh r3, [r8, r0] - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - mov r1, r7, lsl #0x1 - ldrh r3, [r8, r1] - orr r7, r0, #0x0 - add r0, sp, #0x24 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - ldr r3, [sp, #0x0] - ldr r1, [sp, #0x24] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r1, r2, r1, asr #0xc - str r1, [r6, #0x0] - ldr r3, [sp, #0x4] - ldr r1, [sp, #0x28] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r1, r2, r1, asr #0xc - str r1, [r6, #0x4] - ldr r3, [sp, #0x8] - ldr r1, [sp, #0x2c] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r1, r2, r1, asr #0xc - str r1, [r6, #0x8] - ldr r3, [sp, #0xc] - ldr r1, [sp, #0x30] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r1, r2, r1, asr #0xc - str r1, [r6, #0xc] - ldr r2, [sp, #0x10] - ldr r1, [sp, #0x34] - orr r7, r7, r0 - sub r0, r1, r2 - mul r1, r2, r9 - mul r0, r10, r0 - add r0, r1, r0, asr #0xc - str r0, [r6, #0x10] - ldr r2, [sp, #0x14] - ldr r0, [sp, #0x38] - mul r1, r2, r9 - sub r0, r0, r2 - mul r0, r10, r0 - add r2, r1, r0, asr #0xc - mov r0, r6 - mov r1, r6 - str r2, [r6, #0x14] - bl VEC_Normalize - add r0, r6, #0xc - mov r1, r0 - bl VEC_Normalize - cmp r7, #0x0 - bne _020BC968 - ldr r3, [sp, #0x18] - ldr r1, [sp, #0x3c] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r1, r2, r1, asr #0xc - str r1, [r6, #0x18] - ldr r3, [sp, #0x1c] - ldr r1, [sp, #0x40] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r1, r2, r1, asr #0xc - str r1, [r6, #0x1c] - ldr r3, [sp, #0x20] - ldr r1, [sp, #0x44] - mul r2, r3, r9 - sub r1, r1, r3 - mul r1, r10, r1 - add r2, r2, r1, asr #0xc - add r0, r6, #0x18 - mov r1, r0 - str r2, [r6, #0x20] - bl VEC_Normalize - add sp, sp, #0x48 - ldmia sp!, {r4-r10,pc} -_020BC968: - ldr r9, [r6, #0x14] - ldr r5, [r6, #0x4] - ldr r8, [r6, #0x0] - ldr r4, [r6, #0x10] - ldr r2, [r6, #0x8] - ldr r7, [r6, #0xc] - mul r1, r5, r9 - mul r0, r2, r4 - sub r0, r1, r0 - mov r3, r0, asr #0xc - mul r1, r2, r7 - mul r0, r8, r9 - sub r2, r1, r0 - mul r1, r8, r4 - mul r0, r5, r7 - sub r0, r1, r0 - str r3, [r6, #0x18] - mov r1, r2, asr #0xc - str r1, [r6, #0x1c] - mov r0, r0, asr #0xc - str r0, [r6, #0x20] - add sp, sp, #0x48 - ldmia sp!, {r4-r10,pc} - .balign 4 -_020BC9C4: .word 0x1FFF0000 -_020BC9C8: .word 0x00001FFF -_020BC9CC: .word 0x00003FFF -_020BC9D0: .word 0x00000FFF - - arm_func_start FUN_020BC9D4 -FUN_020BC9D4: ; 0x020BC9D4 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4c - ldr r5, [r3, #0xc] - ldr r4, [r3, #0x10] - ldr r12, [r2, #0x0] - ldr r2, [r2, #0x4] - mov r6, r0 - mov r0, r1, asr #0xc - add r5, r3, r5 - add r4, r3, r4 - add r8, r3, r2 - ands r1, r12, #0xc0000000 - beq _020BCD40 - ldr r1, _020BCDC0 ; =0x1FFF0000 - ands r2, r12, #0x40000000 - and r1, r12, r1 - mov r2, r1, lsr #0x10 - beq _020BCA44 - ands r1, r0, #0x1 - beq _020BCA3C - cmp r0, r2 - movhi r0, r2, lsr #0x1 - addhi r0, r0, #0x1 - bhi _020BCD40 - mov r7, r0, lsr #0x1 - b _020BCBE8 -_020BCA3C: - mov r0, r0, lsr #0x1 - b _020BCD40 -_020BCA44: - ands r1, r0, #0x3 - beq _020BCBE0 - cmp r0, r2 - addhi r0, r1, r2, lsr #0x2 - bhi _020BCD40 - ands r1, r0, #0x1 - beq _020BCBD8 - ands r1, r0, #0x2 - movne r9, r0, lsr #0x2 - addne r0, r9, #0x1 - moveq r0, r0, lsr #0x2 - addeq r9, r0, #0x1 - mov r0, r0, lsl #0x1 - ldrh r3, [r8, r0] - mov r0, r6 - mov r1, r5 - mov r2, r4 - mov r7, #0x0 - bl FUN_020BC500 - mov r1, r9, lsl #0x1 - ldrh r3, [r8, r1] - orr r7, r7, r0 - add r0, sp, #0x0 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - ldr r3, [sp, #0x0] - ldr r1, [r6, #0x0] - mov r2, #0x3 - mla r3, r1, r2, r3 - str r3, [r6, #0x0] - ldr r3, [sp, #0x4] - ldr r1, [r6, #0x4] - orr r7, r7, r0 - mla r0, r1, r2, r3 - str r0, [r6, #0x4] - ldr r3, [sp, #0x8] - ldr r1, [r6, #0x8] - mov r0, r6 - mla r3, r1, r2, r3 - str r3, [r6, #0x8] - ldr r4, [sp, #0xc] - ldr r3, [r6, #0xc] - mov r1, r6 - mla r4, r3, r2, r4 - str r4, [r6, #0xc] - ldr r4, [sp, #0x10] - ldr r3, [r6, #0x10] - mla r4, r3, r2, r4 - str r4, [r6, #0x10] - ldr r4, [sp, #0x14] - ldr r3, [r6, #0x14] - mla r2, r3, r2, r4 - str r2, [r6, #0x14] - bl VEC_Normalize - add r0, r6, #0xc - mov r1, r0 - bl VEC_Normalize - cmp r7, #0x0 - bne _020BCB7C - ldr r1, [sp, #0x18] - ldr r0, [r6, #0x18] - mov r2, #0x3 - mla r1, r0, r2, r1 - str r1, [r6, #0x18] - ldr r3, [sp, #0x1c] - ldr r1, [r6, #0x1c] - add r0, r6, #0x18 - mla r3, r1, r2, r3 - str r3, [r6, #0x1c] - ldr r4, [sp, #0x20] - ldr r3, [r6, #0x20] - mov r1, r0 - mla r2, r3, r2, r4 - str r2, [r6, #0x20] - bl VEC_Normalize - add sp, sp, #0x4c - ldmia sp!, {r4-r9,pc} -_020BCB7C: - ldr r12, [r6, #0x14] - ldr r5, [r6, #0x4] - ldr r4, [r6, #0x10] - ldr r2, [r6, #0x8] - mul r1, r5, r12 - mul r0, r2, r4 - sub r0, r1, r0 - ldr r7, [r6, #0xc] - ldr r8, [r6, #0x0] - mov r3, r0, asr #0xc - mul r1, r2, r7 - mul r0, r8, r12 - sub r2, r1, r0 - mul r1, r8, r4 - mul r0, r5, r7 - sub r0, r1, r0 - str r3, [r6, #0x18] - mov r1, r2, asr #0xc - str r1, [r6, #0x1c] - mov r0, r0, asr #0xc - add sp, sp, #0x4c - str r0, [r6, #0x20] - ldmia sp!, {r4-r9,pc} -_020BCBD8: - mov r7, r0, lsr #0x2 - b _020BCBE8 -_020BCBE0: - mov r0, r0, lsr #0x2 - b _020BCD40 -_020BCBE8: - mov r0, r7, lsl #0x1 - ldrh r3, [r8, r0] - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - add r1, r8, r7, lsl #0x1 - ldrh r3, [r1, #0x2] - orr r7, r0, #0x0 - add r0, sp, #0x24 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - ldr r2, [r6, #0x0] - ldr r1, [sp, #0x24] - orr r7, r7, r0 - add r0, r2, r1 - str r0, [r6, #0x0] - ldr r2, [r6, #0x4] - ldr r1, [sp, #0x28] - mov r0, r6 - add r1, r2, r1 - str r1, [r6, #0x4] - ldr r3, [r6, #0x8] - ldr r2, [sp, #0x2c] - mov r1, r6 - add r2, r3, r2 - str r2, [r6, #0x8] - ldr r3, [r6, #0xc] - ldr r2, [sp, #0x30] - add r2, r3, r2 - str r2, [r6, #0xc] - ldr r3, [r6, #0x10] - ldr r2, [sp, #0x34] - add r2, r3, r2 - str r2, [r6, #0x10] - ldr r3, [r6, #0x14] - ldr r2, [sp, #0x38] - add r2, r3, r2 - str r2, [r6, #0x14] - bl VEC_Normalize - add r0, r6, #0xc - mov r1, r0 - bl VEC_Normalize - cmp r7, #0x0 - bne _020BCCE4 - ldr r2, [r6, #0x18] - ldr r1, [sp, #0x3c] - add r0, r6, #0x18 - add r1, r2, r1 - str r1, [r6, #0x18] - ldr r3, [r6, #0x1c] - ldr r2, [sp, #0x40] - mov r1, r0 - add r2, r3, r2 - str r2, [r6, #0x1c] - ldr r3, [r6, #0x20] - ldr r2, [sp, #0x44] - add r2, r3, r2 - str r2, [r6, #0x20] - bl VEC_Normalize - add sp, sp, #0x4c - ldmia sp!, {r4-r9,pc} -_020BCCE4: - ldr r12, [r6, #0x14] - ldr r5, [r6, #0x4] - ldr r4, [r6, #0x10] - ldr r2, [r6, #0x8] - mul r1, r5, r12 - mul r0, r2, r4 - sub r0, r1, r0 - ldr r7, [r6, #0xc] - ldr r8, [r6, #0x0] - mov r3, r0, asr #0xc - mul r1, r2, r7 - mul r0, r8, r12 - sub r2, r1, r0 - mul r1, r8, r4 - mul r0, r5, r7 - sub r0, r1, r0 - str r3, [r6, #0x18] - mov r1, r2, asr #0xc - str r1, [r6, #0x1c] - mov r0, r0, asr #0xc - add sp, sp, #0x4c - str r0, [r6, #0x20] - ldmia sp!, {r4-r9,pc} -_020BCD40: - mov r0, r0, lsl #0x1 - ldrh r3, [r8, r0] - mov r0, r6 - mov r1, r5 - mov r2, r4 - bl FUN_020BC500 - cmp r0, #0x0 - addeq sp, sp, #0x4c - ldmeqia sp!, {r4-r9,pc} - ldr r12, [r6, #0x14] - ldr r5, [r6, #0x4] - ldr r8, [r6, #0x0] - ldr r4, [r6, #0x10] - ldr r2, [r6, #0x8] - ldr r7, [r6, #0xc] - mul r1, r5, r12 - mul r0, r2, r4 - sub r0, r1, r0 - mov r3, r0, asr #0xc - mul r1, r2, r7 - mul r0, r8, r12 - sub r2, r1, r0 - mul r1, r8, r4 - mul r0, r5, r7 - sub r0, r1, r0 - str r3, [r6, #0x18] - mov r1, r2, asr #0xc - str r1, [r6, #0x1c] - mov r0, r0, asr #0xc - str r0, [r6, #0x20] - add sp, sp, #0x4c - ldmia sp!, {r4-r9,pc} - .balign 4 -_020BCDC0: .word 0x1FFF0000 - - arm_func_start FUN_020BCDC4 -FUN_020BCDC4: ; 0x020BCDC4 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - ldrh r4, [r3, #0x4] - ldr r6, [r2, #0x4] - mov r5, r1, asr #0xc - sub r4, r4, #0x1 - cmp r5, r4 - add r6, r3, r6 - ldr r2, [r2, #0x0] - bne _020BCE58 - ands r4, r2, #0xc0000000 - beq _020BCE08 - ands r4, r2, #0x40000000 - andne r4, r5, #0x1 - addne r5, r4, r5, lsr #0x1 - andeq r4, r5, #0x3 - addeq r5, r4, r5, lsr #0x2 -_020BCE08: - ldr r3, [r3, #0x8] - ands r3, r3, #0x2 - movne r4, #0x0 - bne _020BCED4 - ands r1, r2, #0x20000000 - ldreq r2, [r6, r5, lsl #0x3] - addeq r1, r6, r5, lsl #0x3 - streq r2, [r0, #0x0] - ldreq r1, [r1, #0x4] - addeq sp, sp, #0x4 - streq r1, [r0, #0x4] - ldmeqia sp!, {r4-r7,pc} - mov r1, r5, lsl #0x2 - ldrsh r2, [r6, r1] - add r1, r6, r5, lsl #0x2 - add sp, sp, #0x4 - str r2, [r0, #0x0] - ldrsh r1, [r1, #0x2] - str r1, [r0, #0x4] - ldmia sp!, {r4-r7,pc} -_020BCE58: - ands r3, r2, #0xc0000000 - beq _020BCED0 - ldr r3, _020BCF60 ; =0x1FFF0000 - ands r4, r2, #0x40000000 - and r3, r2, r3 - mov r3, r3, lsr #0x10 - beq _020BCEA0 - cmp r5, r3 - movcs r5, r3, lsr #0x1 - addcs r4, r5, #0x1 - bhs _020BCED4 - ldr r3, _020BCF64 ; =0x00001FFF - mov r5, r5, lsr #0x1 - add r4, r5, #0x1 - and lr, r1, r3 - mov r12, #0x2 - mov r3, #0x1 - b _020BCEE4 -_020BCEA0: - cmp r5, r3 - andcs r3, r5, #0x3 - addcs r5, r3, r5, lsr #0x2 - addcs r4, r5, #0x1 - bhs _020BCED4 - ldr r3, _020BCF68 ; =0x00003FFF - mov r5, r5, lsr #0x2 - add r4, r5, #0x1 - and lr, r1, r3 - mov r12, #0x4 - mov r3, #0x2 - b _020BCEE4 -_020BCED0: - add r4, r5, #0x1 -_020BCED4: - ldr r3, _020BCF6C ; =0x00000FFF - mov r12, #0x1 - and lr, r1, r3 - mov r3, #0x0 -_020BCEE4: - ands r1, r2, #0x20000000 - beq _020BCF10 - mov r2, r5, lsl #0x2 - add r1, r6, r5, lsl #0x2 - mov r5, r4, lsl #0x2 - add r4, r6, r4, lsl #0x2 - ldrsh r2, [r6, r2] - ldrsh r1, [r1, #0x2] - ldrsh r5, [r6, r5] - ldrsh r4, [r4, #0x2] - b _020BCF28 -_020BCF10: - add r1, r6, r5, lsl #0x3 - add r7, r6, r4, lsl #0x3 - ldr r2, [r6, r5, lsl #0x3] - ldr r1, [r1, #0x4] - ldr r5, [r6, r4, lsl #0x3] - ldr r4, [r7, #0x4] -_020BCF28: - sub r5, r5, r2 - sub r4, r4, r1 - mul r6, r2, r12 - mul r2, lr, r5 - add r2, r6, r2, asr #0xc - mov r5, r2, asr r3 - mul r2, r1, r12 - mul r1, lr, r4 - add r1, r2, r1, asr #0xc - mov r1, r1, asr r3 - str r5, [r0, #0x0] - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020BCF60: .word 0x1FFF0000 -_020BCF64: .word 0x00001FFF -_020BCF68: .word 0x00003FFF -_020BCF6C: .word 0x00000FFF - - arm_func_start FUN_020BCF70 -FUN_020BCF70: ; 0x020BCF70 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldr r4, [r2, #0x4] - ldr r12, [r2, #0x0] - mov r1, r1, asr #0xc - add r3, r3, r4 - ands r2, r12, #0xc0000000 - beq _020BD0D0 - ldr r2, _020BD184 ; =0x1FFF0000 - ands r4, r12, #0x40000000 - and r2, r12, r2 - mov r4, r2, lsr #0x10 - beq _020BCFCC - ands r2, r1, #0x1 - beq _020BCFC4 - cmp r1, r4 - movhi r1, r4, lsr #0x1 - addhi r1, r1, #0x1 - bhi _020BD0D0 - mov r2, r1, lsr #0x1 - b _020BD110 -_020BCFC4: - mov r1, r1, lsr #0x1 - b _020BD0D0 -_020BCFCC: - ands r2, r1, #0x3 - beq _020BD0CC - cmp r1, r4 - addhi r1, r2, r4, lsr #0x2 - bhi _020BD0D0 - ands r2, r1, #0x1 - beq _020BD0C4 - ands r2, r1, #0x2 - movne r1, r1, lsr #0x2 - addne r2, r1, #0x1 - moveq r2, r1, lsr #0x2 - addeq r1, r2, #0x1 - ands r4, r12, #0x20000000 - beq _020BD04C - mov r5, r2, lsl #0x2 - mov r4, r1, lsl #0x2 - ldrsh r12, [r3, r5] - ldrsh r5, [r3, r4] - add r2, r3, r2, lsl #0x2 - add r4, r12, r12, lsl #0x1 - add r4, r5, r4 - mov r4, r4, asr #0x2 - str r4, [r0, #0x0] - add r1, r3, r1, lsl #0x2 - ldrsh r3, [r2, #0x2] - ldrsh r2, [r1, #0x2] - add sp, sp, #0x4 - add r1, r3, r3, lsl #0x1 - add r1, r2, r1 - mov r1, r1, asr #0x2 - str r1, [r0, #0x4] - ldmia sp!, {r4-r5,pc} -_020BD04C: - ldr r5, [r3, r2, lsl #0x3] - ldr r4, [r3, r1, lsl #0x3] - mov r12, r5, asr #0x1f - mov r12, r12, lsl #0x1 - mov lr, r5, lsl #0x1 - orr r12, r12, r5, lsr #0x1f - adds lr, lr, r5 - adc r12, r12, r5, asr #0x1f - adds lr, lr, r4 - adc r12, r12, r4, asr #0x1f - mov lr, lr, lsr #0x2 - orr lr, lr, r12, lsl #0x1e - str lr, [r0, #0x0] - add r2, r3, r2, lsl #0x3 - ldr r12, [r2, #0x4] - add r1, r3, r1, lsl #0x3 - mov r2, r12, asr #0x1f - mov r2, r2, lsl #0x1 - mov r3, r12, lsl #0x1 - ldr r1, [r1, #0x4] - orr r2, r2, r12, lsr #0x1f - adds r3, r3, r12 - adc r2, r2, r12, asr #0x1f - adds r3, r3, r1 - adc r1, r2, r1, asr #0x1f - mov r2, r3, lsr #0x2 - orr r2, r2, r1, lsl #0x1e - str r2, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} -_020BD0C4: - mov r2, r1, lsr #0x2 - b _020BD110 -_020BD0CC: - mov r1, r1, lsr #0x2 -_020BD0D0: - ands r2, r12, #0x20000000 - ldreq r2, [r3, r1, lsl #0x3] - addeq r1, r3, r1, lsl #0x3 - streq r2, [r0, #0x0] - ldreq r1, [r1, #0x4] - addeq sp, sp, #0x4 - streq r1, [r0, #0x4] - ldmeqia sp!, {r4-r5,pc} - mov r2, r1, lsl #0x2 - ldrsh r2, [r3, r2] - add r1, r3, r1, lsl #0x2 - add sp, sp, #0x4 - str r2, [r0, #0x0] - ldrsh r1, [r1, #0x2] - str r1, [r0, #0x4] - ldmia sp!, {r4-r5,pc} -_020BD110: - ands r1, r12, #0x20000000 - beq _020BD150 - mov r1, r2, lsl #0x2 - add r12, r3, r2, lsl #0x2 - ldrsh r2, [r3, r1] - ldrsh r1, [r12, #0x4] - add sp, sp, #0x4 - add r1, r2, r1 - mov r1, r1, asr #0x1 - str r1, [r0, #0x0] - ldrsh r2, [r12, #0x2] - ldrsh r1, [r12, #0x6] - add r1, r2, r1 - mov r1, r1, asr #0x1 - str r1, [r0, #0x4] - ldmia sp!, {r4-r5,pc} -_020BD150: - add r12, r3, r2, lsl #0x3 - ldr r2, [r3, r2, lsl #0x3] - ldr r1, [r12, #0x8] - add r1, r2, r1 - mov r1, r1, asr #0x1 - str r1, [r0, #0x0] - ldr r2, [r12, #0x4] - ldr r1, [r12, #0xc] - add r1, r2, r1 - mov r1, r1, asr #0x1 - str r1, [r0, #0x4] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BD184: .word 0x1FFF0000 - - arm_func_start FUN_020BD188 -FUN_020BD188: ; 0x020BD188 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - ldrh r4, [r3, #0x4] - ldr lr, [r2, #0x4] - mov r12, r1, asr #0xc - sub r4, r4, #0x1 - cmp r12, r4 - add r4, r3, lr - ldr lr, [r2, #0x0] - bne _020BD230 - ands r2, lr, #0xc0000000 - beq _020BD1CC - ands r2, lr, #0x40000000 - andne r2, r12, #0x1 - addne r12, r2, r12, lsr #0x1 - andeq r2, r12, #0x3 - addeq r12, r2, r12, lsr #0x2 -_020BD1CC: - ldr r2, [r3, #0x8] - ands r2, r2, #0x2 - beq _020BD210 - ldr r2, _020BD2E8 ; =0x00000FFF - ands r3, lr, #0x20000000 - and r3, r1, r2 - movne r1, r12, lsl #0x1 - ldrnesh r2, [r4, r1] - ldrnesh r1, [r4, #0x0] - add sp, sp, #0x4 - ldreq r2, [r4, r12, lsl #0x2] - ldreq r1, [r4, #0x0] - sub r1, r1, r2 - mul r1, r3, r1 - add r1, r2, r1, asr #0xc - str r1, [r0, #0x0] - ldmia sp!, {r4-r5,pc} -_020BD210: - ands r1, lr, #0x20000000 - movne r1, r12, lsl #0x1 - ldrnesh r1, [r4, r1] - add sp, sp, #0x4 - strne r1, [r0, #0x0] - ldreq r1, [r4, r12, lsl #0x2] - streq r1, [r0, #0x0] - ldmia sp!, {r4-r5,pc} -_020BD230: - ands r2, lr, #0xc0000000 - beq _020BD298 - ldr r2, _020BD2EC ; =0x1FFF0000 - ands r3, lr, #0x40000000 - and r2, lr, r2 - mov r2, r2, lsr #0x10 - beq _020BD270 - cmp r12, r2 - movcs r12, r2, lsr #0x1 - bhs _020BD298 - ldr r2, _020BD2F0 ; =0x00001FFF - mov r12, r12, lsr #0x1 - and r5, r1, r2 - mov r2, #0x2 - mov r1, #0x1 - b _020BD2A8 -_020BD270: - cmp r12, r2 - andcs r2, r12, #0x3 - addcs r12, r2, r12, lsr #0x2 - bhs _020BD298 - ldr r2, _020BD2F4 ; =0x00003FFF - mov r12, r12, lsr #0x2 - and r5, r1, r2 - mov r2, #0x4 - mov r1, #0x2 - b _020BD2A8 -_020BD298: - ldr r3, _020BD2E8 ; =0x00000FFF - mov r2, #0x1 - and r5, r1, r3 - mov r1, #0x0 -_020BD2A8: - ands r3, lr, #0x20000000 - addne r3, r4, r12, lsl #0x1 - movne lr, r12, lsl #0x1 - ldrnesh r12, [r4, lr] - ldrnesh r3, [r3, #0x2] - addeq r3, r4, r12, lsl #0x2 - ldreq r12, [r4, r12, lsl #0x2] - ldreq r3, [r3, #0x4] - mul r4, r12, r2 - sub r3, r3, r12 - mul r2, r5, r3 - add r2, r4, r2, asr #0xc - mov r1, r2, asr r1 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BD2E8: .word 0x00000FFF -_020BD2EC: .word 0x1FFF0000 -_020BD2F0: .word 0x00001FFF -_020BD2F4: .word 0x00003FFF - - arm_func_start FUN_020BD2F8 -FUN_020BD2F8: ; 0x020BD2F8 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr r12, [r2, #0x4] - ldr r2, [r2, #0x0] - mov r1, r1, asr #0xc - add r3, r3, r12 - ands r12, r2, #0xc0000000 - beq _020BD44C - ldr ip, _020BD46C ; =0x1FFF0000 - ands lr, r2, #0x40000000 - and r12, r2, r12 - mov lr, r12, lsr #0x10 - beq _020BD354 - ands r12, r1, #0x1 - beq _020BD34C - cmp r1, lr - movhi r1, lr, lsr #0x1 - addhi r1, r1, #0x1 - bhi _020BD44C - mov r12, r1, lsr #0x1 - b _020BD400 -_020BD34C: - mov r1, r1, lsr #0x1 - b _020BD44C -_020BD354: - ands r12, r1, #0x3 - beq _020BD3F8 - cmp r1, lr - addhi r1, r12, lr, lsr #0x2 - bhi _020BD44C - ands r12, r1, #0x1 - beq _020BD3F0 - ands r12, r1, #0x2 - movne lr, r1, lsr #0x2 - addne r12, lr, #0x1 - moveq r12, r1, lsr #0x2 - addeq lr, r12, #0x1 - ands r1, r2, #0x20000000 - beq _020BD3B4 - mov r2, r12, lsl #0x1 - mov r1, lr, lsl #0x1 - ldrsh r12, [r3, r2] - ldrsh r2, [r3, r1] - mov r1, #0x3 - add sp, sp, #0x4 - smlabb r1, r12, r1, r2 - mov r1, r1, asr #0x2 - str r1, [r0, #0x0] - ldmia sp!, {pc} -_020BD3B4: - ldr r12, [r3, r12, lsl #0x2] - ldr r1, [r3, lr, lsl #0x2] - mov r2, r12, asr #0x1f - mov r2, r2, lsl #0x1 - mov r3, r12, lsl #0x1 - orr r2, r2, r12, lsr #0x1f - adds r3, r3, r12 - adc r2, r2, r12, asr #0x1f - adds r3, r3, r1 - adc r1, r2, r1, asr #0x1f - mov r2, r3, lsr #0x2 - orr r2, r2, r1, lsl #0x1e - str r2, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} -_020BD3F0: - mov r12, r1, lsr #0x2 - b _020BD400 -_020BD3F8: - mov r1, r1, lsr #0x2 - b _020BD44C -_020BD400: - ands r1, r2, #0x20000000 - beq _020BD42C - mov r2, r12, lsl #0x1 - add r1, r3, r12, lsl #0x1 - ldrsh r2, [r3, r2] - ldrsh r1, [r1, #0x2] - add sp, sp, #0x4 - add r1, r2, r1 - mov r1, r1, asr #0x1 - str r1, [r0, #0x0] - ldmia sp!, {pc} -_020BD42C: - add r1, r3, r12, lsl #0x2 - ldr r2, [r3, r12, lsl #0x2] - ldr r1, [r1, #0x4] - mov r2, r2, asr #0x1 - add r1, r2, r1, asr #0x1 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} -_020BD44C: - ands r2, r2, #0x20000000 - movne r1, r1, lsl #0x1 - ldrnesh r1, [r3, r1] - strne r1, [r0, #0x0] - ldreq r1, [r3, r1, lsl #0x2] - streq r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020BD46C: .word 0x1FFF0000 - - arm_func_start FUN_020BD470 -FUN_020BD470: ; 0x020BD470 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x34 - mov r9, r0 - add r0, r9, r1, lsl #0x1 - ldrh r0, [r0, #0x14] - mov r7, r3 - mov r8, r2 - ldr r5, [r9, r0] - add r1, r9, r0 - ands r0, r5, #0x1 - movne r0, #0x7 - strne r0, [r7, #0x0] - bne _020BD814 - ldr r0, _020BD848 ; =0x00000FFF - add r4, r1, #0x4 - ands r0, r8, r0 - beq _020BD4C4 - ldr r0, [r9, #0x8] - ands r0, r0, #0x1 - movne r6, #0x1 - bne _020BD4C8 -_020BD4C4: - mov r6, #0x0 -_020BD4C8: - mov r0, #0x0 - str r0, [r7, #0x0] - ands r0, r5, #0x6 - bne _020BD5C0 - ands r0, r5, #0x8 - bne _020BD51C - cmp r6, #0x0 - beq _020BD500 - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x4c - bl FUN_020BD188 - b _020BD514 -_020BD500: - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x4c - bl FUN_020BD2F8 -_020BD514: - add r4, r4, #0x8 - b _020BD524 -_020BD51C: - ldr r0, [r4], #0x4 - str r0, [r7, #0x4c] -_020BD524: - ands r0, r5, #0x10 - bne _020BD568 - cmp r6, #0x0 - beq _020BD54C - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x50 - bl FUN_020BD188 - b _020BD560 -_020BD54C: - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x50 - bl FUN_020BD2F8 -_020BD560: - add r4, r4, #0x8 - b _020BD570 -_020BD568: - ldr r0, [r4], #0x4 - str r0, [r7, #0x50] -_020BD570: - ands r0, r5, #0x20 - bne _020BD5B4 - cmp r6, #0x0 - beq _020BD598 - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x54 - bl FUN_020BD188 - b _020BD5AC -_020BD598: - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x54 - bl FUN_020BD2F8 -_020BD5AC: - add r4, r4, #0x8 - b _020BD5DC -_020BD5B4: - ldr r0, [r4], #0x4 - str r0, [r7, #0x54] - b _020BD5DC -_020BD5C0: - ands r0, r5, #0x2 - ldrne r0, [r7, #0x0] - orrne r0, r0, #0x4 - strne r0, [r7, #0x0] - bne _020BD5DC - mov r0, r7 - bl FUN_020BDA08 -_020BD5DC: - ands r0, r5, #0xc0 - bne _020BD6A8 - ands r0, r5, #0x100 - bne _020BD628 - cmp r6, #0x0 - beq _020BD60C - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x28 - bl FUN_020BC698 - b _020BD620 -_020BD60C: - mov r1, r8 - mov r2, r4 - mov r3, r9 - add r0, r7, #0x28 - bl FUN_020BC9D4 -_020BD620: - add r4, r4, #0x8 - b _020BD6C4 -_020BD628: - ldr r1, [r9, #0xc] - ldr r2, [r9, #0x10] - ldr r3, [r4, #0x0] - add r0, r7, #0x28 - add r1, r9, r1 - add r2, r9, r2 - bl FUN_020BC500 - cmp r0, #0x0 - beq _020BD6A0 - ldr r12, [r7, #0x3c] - ldr r0, [r7, #0x2c] - ldr r3, [r7, #0x28] - ldr r11, [r7, #0x38] - ldr r1, [r7, #0x30] - ldr r2, [r7, #0x34] - mul r10, r0, r12 - mul lr, r1, r11 - sub r10, r10, lr - mov r10, r10, asr #0xc - mul lr, r1, r2 - mul r1, r3, r12 - sub r1, lr, r1 - mul r11, r3, r11 - mul r2, r0, r2 - sub r0, r11, r2 - str r10, [r7, #0x40] - mov r1, r1, asr #0xc - str r1, [r7, #0x44] - mov r0, r0, asr #0xc - str r0, [r7, #0x48] -_020BD6A0: - add r4, r4, #0x4 - b _020BD6C4 -_020BD6A8: - ands r0, r5, #0x40 - ldrne r0, [r7, #0x0] - orrne r0, r0, #0x2 - strne r0, [r7, #0x0] - bne _020BD6C4 - mov r0, r7 - bl FUN_020BD850 -_020BD6C4: - ands r0, r5, #0x600 - bne _020BD7F0 - ands r0, r5, #0x800 - bne _020BD71C - cmp r6, #0x0 - beq _020BD6F4 - add r0, sp, #0x0 - mov r1, r8 - mov r2, r4 - mov r3, r9 - bl FUN_020BCDC4 - b _020BD708 -_020BD6F4: - add r0, sp, #0x0 - mov r1, r8 - mov r2, r4 - mov r3, r9 - bl FUN_020BCF70 -_020BD708: - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - str r1, [sp, #0x18] - str r0, [sp, #0x24] - b _020BD72C -_020BD71C: - ldr r0, [r4, #0x0] - str r0, [sp, #0x18] - ldr r0, [r4, #0x4] - str r0, [sp, #0x24] -_020BD72C: - ands r0, r5, #0x1000 - bne _020BD77C - cmp r6, #0x0 - beq _020BD754 - add r0, sp, #0x8 - mov r1, r8 - mov r3, r9 - add r2, r4, #0x8 - bl FUN_020BCDC4 - b _020BD768 -_020BD754: - add r0, sp, #0x8 - mov r1, r8 - mov r3, r9 - add r2, r4, #0x8 - bl FUN_020BCF70 -_020BD768: - ldr r1, [sp, #0x8] - ldr r0, [sp, #0xc] - str r1, [sp, #0x1c] - str r0, [sp, #0x28] - b _020BD78C -_020BD77C: - ldr r0, [r4, #0x8] - str r0, [sp, #0x1c] - ldr r0, [r4, #0xc] - str r0, [sp, #0x28] -_020BD78C: - ands r0, r5, #0x2000 - bne _020BD7DC - cmp r6, #0x0 - beq _020BD7B4 - add r0, sp, #0x10 - mov r1, r8 - mov r3, r9 - add r2, r4, #0x10 - bl FUN_020BCDC4 - b _020BD7C8 -_020BD7B4: - add r0, sp, #0x10 - mov r1, r8 - mov r3, r9 - add r2, r4, #0x10 - bl FUN_020BCF70 -_020BD7C8: - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x14] - str r1, [sp, #0x20] - str r0, [sp, #0x2c] - b _020BD814 -_020BD7DC: - ldr r0, [r4, #0x10] - str r0, [sp, #0x20] - ldr r0, [r4, #0x14] - str r0, [sp, #0x2c] - b _020BD814 -_020BD7F0: - ands r0, r5, #0x200 - ldrne r0, [r7, #0x0] - orrne r0, r0, #0x1 - strne r0, [r7, #0x0] - bne _020BD814 - mov r0, r7 - bl FUN_020BD9A4 - add sp, sp, #0x34 - ldmia sp!, {r4-r11,pc} -_020BD814: - ldr r0, [r7, #0x0] - add r1, sp, #0x18 - ands r0, r0, #0x1 - ldr r0, _020BD84C ; =UNK_021CEF7C - movne r3, #0x4 - ldr r4, [r0, #0x0] - moveq r3, #0x0 - ldr r2, [r4, #0x0] - ldr r4, [r4, #0xe8] - mov r0, r7 - blx r4 - add sp, sp, #0x34 - ldmia sp!, {r4-r11,pc} - .balign 4 -_020BD848: .word 0x00000FFF -_020BD84C: .word UNK_021CEF7C - - arm_func_start FUN_020BD850 -FUN_020BD850: ; 0x020BD850 - stmdb sp!, {r4-r8,lr} - ldr r1, _020BD990 ; =UNK_021CEF7C - mov r8, r0 - ldr r0, [r1, #0x0] - ldr r3, [r0, #0xd4] - ldr r0, [r0, #0x0] - ldrh r2, [r3, #0x6] - ldrb r0, [r0, #0x1] - ldrh r1, [r3, r2] - add r2, r3, r2 - mla r0, r1, r0, r2 - ldr r0, [r0, #0x4] - ldrh r2, [r3, r0] - add r4, r3, r0 - add r1, r4, #0x4 - ands r0, r2, #0x1 - addeq r1, r1, #0xc - ands r0, r2, #0x2 - bne _020BD980 - ands r0, r2, #0x8 - beq _020BD934 - and r2, r2, #0xf0 - add r0, r8, #0x28 - mov r5, r2, asr #0x4 - ldrsh r7, [r1, #0x0] - ldrsh r6, [r1, #0x2] - bl MI_Zero36B - ldrh r0, [r4, #0x0] - add r1, r8, r5, lsl #0x2 - ands r0, r0, #0x100 - movne r0, #0x1000 - rsbne r2, r0, #0x0 - moveq r2, #0x1000 - ldr r0, _020BD994 ; =UNK_020FFA14 - str r2, [r1, #0x28] - ldrb r1, [r0, r5, lsl #0x2] - ldr r0, _020BD998 ; =UNK_020FFA15 - add r1, r8, r1, lsl #0x2 - str r7, [r1, #0x28] - ldrb r0, [r0, r5, lsl #0x2] - add r0, r8, r0, lsl #0x2 - str r6, [r0, #0x28] - ldrh r0, [r4, #0x0] - ands r0, r0, #0x200 - ldr r0, _020BD99C ; =UNK_020FFA16 - rsbne r6, r6, #0x0 - ldrb r0, [r0, r5, lsl #0x2] - add r0, r8, r0, lsl #0x2 - str r6, [r0, #0x28] - ldrh r0, [r4, #0x0] - ands r0, r0, #0x400 - ldr r0, _020BD9A0 ; =UNK_020FFA17 - rsbne r7, r7, #0x0 - ldrb r0, [r0, r5, lsl #0x2] - add r0, r8, r0, lsl #0x2 - str r7, [r0, #0x28] - ldmia sp!, {r4-r8,pc} -_020BD934: - ldrsh r0, [r4, #0x2] - str r0, [r8, #0x28] - ldrsh r0, [r1, #0x0] - str r0, [r8, #0x2c] - ldrsh r0, [r1, #0x2] - str r0, [r8, #0x30] - ldrsh r0, [r1, #0x4] - str r0, [r8, #0x34] - ldrsh r0, [r1, #0x6] - str r0, [r8, #0x38] - ldrsh r0, [r1, #0x8] - str r0, [r8, #0x3c] - ldrsh r0, [r1, #0xa] - str r0, [r8, #0x40] - ldrsh r0, [r1, #0xc] - str r0, [r8, #0x44] - ldrsh r0, [r1, #0xe] - str r0, [r8, #0x48] - ldmia sp!, {r4-r8,pc} -_020BD980: - ldr r0, [r8, #0x0] - orr r0, r0, #0x2 - str r0, [r8, #0x0] - ldmia sp!, {r4-r8,pc} - .balign 4 -_020BD990: .word UNK_021CEF7C -_020BD994: .word UNK_020FFA14 -_020BD998: .word UNK_020FFA15 -_020BD99C: .word UNK_020FFA16 -_020BD9A0: .word UNK_020FFA17 - - arm_func_start FUN_020BD9A4 -FUN_020BD9A4: ; 0x020BD9A4 - stmdb sp!, {r4,lr} - ldr r1, _020BDA04 ; =UNK_021CEF7C - ldr r12, [r1, #0x0] - ldr r4, [r12, #0xd4] - ldr r2, [r12, #0x0] - ldrh lr, [r4, #0x6] - ldrb r1, [r2, #0x1] - ldrh r3, [r4, lr] - add lr, r4, lr - mla r1, r3, r1, lr - ldr r1, [r1, #0x4] - ldrh r3, [r4, r1] - add r1, r4, r1 - add r1, r1, #0x4 - ands lr, r3, #0x1 - addeq r1, r1, #0xc - ands lr, r3, #0x2 - bne _020BD9F8 - ands lr, r3, #0x8 - addne r1, r1, #0x4 - addeq r1, r1, #0x10 -_020BD9F8: - ldr r12, [r12, #0xe8] - blx r12 - ldmia sp!, {r4,pc} - .balign 4 -_020BDA04: .word UNK_021CEF7C - - arm_func_start FUN_020BDA08 -FUN_020BDA08: ; 0x020BDA08 - ldr r1, _020BDA6C ; =UNK_021CEF7C - ldr r1, [r1, #0x0] - ldr r12, [r1, #0xd4] - ldr r1, [r1, #0x0] - ldrh r3, [r12, #0x6] - ldrb r1, [r1, #0x1] - ldrh r2, [r12, r3] - add r3, r12, r3 - mla r1, r2, r1, r3 - ldr r2, [r1, #0x4] - ldrh r1, [r12, r2] - add r2, r12, r2 - ands r1, r1, #0x1 - ldrne r1, [r0, #0x0] - orrne r1, r1, #0x4 - strne r1, [r0, #0x0] - bxne lr - ldr r1, [r2, #0x4] - add r2, r2, #0x4 - str r1, [r0, #0x4c] - ldr r1, [r2, #0x4] - str r1, [r0, #0x50] - ldr r1, [r2, #0x8] - str r1, [r0, #0x54] - bx lr - .balign 4 -_020BDA6C: .word UNK_021CEF7C - - arm_func_start FUN_020BDA70 -FUN_020BDA70: ; 0x020BDA70 - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r3, r0 - ldr r0, [r1, #0x8] - ldr r12, [r1, #0x0] - ldrh r1, [r0, #0x4] - mov r1, r1, lsl #0xc - cmp r12, r1 - subge r12, r1, #0x1 - bge _020BDAA0 - cmp r12, #0x0 - movlt r12, #0x0 -_020BDAA0: - mov r1, r2 - mov r2, r12 - bl FUN_020BD470 - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BDAB4 -FUN_020BDAB4: ; 0x020BDAB4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - mov r4, r1 - ldr r0, _020BDB3C ; =UNK_0210659C - str r4, [r5, #0x8] - ldr r0, [r0, #0x0] - add r1, r5, #0x1a - str r0, [r5, #0xc] - ldrb r2, [r2, #0x17] - mov r0, #0x0 - strb r2, [r5, #0x19] - ldrb r2, [r5, #0x19] - mov r2, r2, lsl #0x1 - bl MIi_CpuClear16 - ldrh r0, [r4, #0x6] - add r2, r4, #0x14 - mov r3, #0x0 - cmp r0, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r5,pc} -_020BDB08: - mov r0, r3, lsl #0x1 - ldrh r1, [r2, r0] - add r0, r5, r3, lsl #0x1 - add r3, r3, #0x1 - ldr r1, [r4, r1] - mov r1, r1, lsr #0x18 - orr r1, r1, #0x100 - strh r1, [r0, #0x1a] - ldrh r0, [r4, #0x6] - cmp r3, r0 - blo _020BDB08 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BDB3C: .word UNK_0210659C - - arm_func_start FUN_020BDB40 -FUN_020BDB40: ; 0x020BDB40 - stmdb sp!, {r4-r8,lr} - ldr r7, [r1, #0x8] - mov r2, r2, lsl #0x10 - ldrh r4, [r7, #0xe] - add r5, r7, #0x8 - ldr r6, [r1, #0x0] - ldrh r3, [r5, r4] - mov r1, r2, lsr #0x10 - add r2, r5, r4 - mul r4, r3, r1 - add r3, r2, #0x4 - mov r6, r6, asr #0xc - mov r8, r0 - ldr r1, [r3, r4] - mov r0, r7 - mov r2, r6 - add r5, r3, r4 - bl FUN_020BDDAC - mov r4, r0 - ldr r1, [r5, #0x4] - mov r0, r7 - mov r2, r6 - bl FUN_020BDDAC - ldr r1, [r8, #0x4] - mov r2, r6 - and r1, r1, #0x8000 - orr r1, r1, r4 - orr r0, r1, r0, lsl #0x10 - str r0, [r8, #0x4] - mov r0, r7 - ldr r1, [r5, #0xc] - bl FUN_020BDDAC - mov r4, r0 - mov r0, r7 - ldr r1, [r5, #0x8] - mov r2, r6 - bl FUN_020BDDAC - mov r2, r6 - ldr r1, [r8, #0x8] - and r1, r1, #0x8000 - orr r0, r1, r0 - orr r0, r0, r4, lsl #0x10 - str r0, [r8, #0x8] - mov r0, r7 - ldr r1, [r5, #0x10] - bl FUN_020BDCB8 - ldr r1, [r8, #0xc] - bic r1, r1, #0x1f0000 - orr r0, r1, r0, lsl #0x10 - str r0, [r8, #0xc] - ldmia sp!, {r4-r8,pc} - - arm_func_start FUN_020BDC0C -FUN_020BDC0C: ; 0x020BDC0C - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r3, _020BDCB4 ; =UNK_021065A8 - ldr r4, [r2, #0x8] - ldr r3, [r3, #0x0] - mov r9, r0 - str r3, [r9, #0xc] - ldrb r0, [r2, #0x18] - mov r8, r1 - add r4, r2, r4 - strb r0, [r9, #0x19] - ldrb r2, [r9, #0x19] - add r1, r9, #0x1a - mov r0, #0x0 - mov r2, r2, lsl #0x1 - bl MIi_CpuClear16 - ldrb r0, [r8, #0x9] - mov r7, #0x0 - cmp r0, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r9,pc} - mov r6, r7 - add r5, r8, #0x8 - add r4, r4, #0x4 -_020BDC6C: - ldrh r1, [r8, #0xe] - mov r0, r4 - add r2, r5, r1 - ldrh r1, [r2, #0x2] - add r1, r2, r1 - add r1, r1, r6 - bl FUN_020BC14C - cmp r0, #0x0 - orrge r1, r7, #0x100 - addge r0, r9, r0, lsl #0x1 - strgeh r1, [r0, #0x1a] - ldrb r0, [r8, #0x9] - add r7, r7, #0x1 - add r6, r6, #0x10 - cmp r7, r0 - blo _020BDC6C - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020BDCB4: .word UNK_021065A8 - - arm_func_start FUN_020BDCB8 -FUN_020BDCB8: ; 0x020BDCB8 - ands r3, r1, #0x20000000 - movne r0, r1, lsl #0x10 - movne r0, r0, lsr #0x10 - bxne lr - ldr r3, _020BDDA4 ; =0x0000FFFF - ands r12, r1, #0xc0000000 - and r3, r1, r3 - add r0, r0, r3 - ldreqb r0, [r0, r2] - bxeq lr - ldr r3, _020BDDA8 ; =0x1FFF0000 - ands r12, r1, #0x40000000 - and r1, r1, r3 - mov r3, r1, lsr #0x10 - beq _020BDD30 - ands r1, r2, #0x1 - beq _020BDD28 - cmp r2, r3 - addhi r0, r0, r3, lsr #0x1 - ldrhib r0, [r0, #0x1] - bxhi lr - add r1, r0, r2, lsr #0x1 - ldrb r2, [r0, r2, lsr #0x1] - ldrb r0, [r1, #0x1] - add r0, r2, r0 - mov r0, r0, lsl #0xf - mov r0, r0, lsr #0x10 - bx lr -_020BDD28: - ldrb r0, [r0, r2, lsr #0x1] - bx lr -_020BDD30: - ands r1, r2, #0x3 - beq _020BDD9C - cmp r2, r3 - addhi r0, r0, r3, lsr #0x2 - ldrhib r0, [r1, r0] - bxhi lr - ands r1, r2, #0x1 - beq _020BDD80 - ands r1, r2, #0x2 - movne r1, r2, lsr #0x2 - addne r2, r1, #0x1 - moveq r2, r2, lsr #0x2 - addeq r1, r2, #0x1 - ldrb r2, [r0, r2] - ldrb r1, [r0, r1] - mov r0, #0x3 - mla r0, r2, r0, r1 - mov r0, r0, lsl #0xe - mov r0, r0, lsr #0x10 - bx lr -_020BDD80: - add r1, r0, r2, lsr #0x2 - ldrb r2, [r0, r2, lsr #0x2] - ldrb r0, [r1, #0x1] - add r0, r2, r0 - mov r0, r0, lsl #0xf - mov r0, r0, lsr #0x10 - bx lr -_020BDD9C: - ldrb r0, [r0, r2, lsr #0x2] - bx lr - .balign 4 -_020BDDA4: .word 0x0000FFFF -_020BDDA8: .word 0x1FFF0000 - - arm_func_start FUN_020BDDAC -FUN_020BDDAC: ; 0x020BDDAC - stmdb sp!, {lr} - sub sp, sp, #0x4 - ands r3, r1, #0x20000000 - movne r0, r1, lsl #0x10 - addne sp, sp, #0x4 - movne r0, r0, lsr #0x10 - ldmneia sp!, {pc} - ldr r3, _020BDF2C ; =0x0000FFFF - ands r12, r1, #0xc0000000 - and r3, r1, r3 - add r0, r0, r3 - moveq r1, r2, lsl #0x1 - addeq sp, sp, #0x4 - ldreqh r0, [r0, r1] - ldmeqia sp!, {pc} - ldr r3, _020BDF30 ; =0x1FFF0000 - ands r12, r1, #0x40000000 - and r1, r1, r3 - mov r3, r1, lsr #0x10 - beq _020BDE34 - ands r1, r2, #0x1 - beq _020BDE24 - cmp r2, r3 - bichi r1, r3, #0x1 - addhi r0, r0, r1 - addhi sp, sp, #0x4 - ldrhih r0, [r0, #0x2] - ldmhiia sp!, {pc} - mov r1, r2, lsr #0x1 - b _020BDEE0 -_020BDE24: - bic r1, r2, #0x1 - add sp, sp, #0x4 - ldrh r0, [r0, r1] - ldmia sp!, {pc} -_020BDE34: - ands r1, r2, #0x3 - beq _020BDECC - cmp r2, r3 - movhi r2, r3, lsr #0x2 - movhi r1, r1, lsl #0x1 - addhi r0, r0, r2, lsl #0x1 - addhi sp, sp, #0x4 - ldrhih r0, [r1, r0] - ldmhiia sp!, {pc} - ands r1, r2, #0x1 - beq _020BDEC4 - ands r1, r2, #0x2 - movne r1, r2, lsr #0x2 - addne r2, r1, #0x1 - moveq r2, r2, lsr #0x2 - addeq r1, r2, #0x1 - mov r2, r2, lsl #0x1 - mov r1, r1, lsl #0x1 - ldrh r12, [r0, r2] - ldrh lr, [r0, r1] - ldr r0, _020BDF34 ; =0x00007C1F - and r3, r12, #0x3e0 - and r2, lr, #0x3e0 - mov r1, #0x3 - mla r2, r3, r1, r2 - and r12, r12, r0 - and r3, lr, r0 - mla r1, r12, r1, r3 - mov r2, r2, lsr #0x2 - and r1, r0, r1, lsr #0x2 - and r0, r2, #0x3e0 - orr r0, r1, r0 - mov r0, r0, lsl #0x10 - add sp, sp, #0x4 - mov r0, r0, lsr #0x10 - ldmia sp!, {pc} -_020BDEC4: - mov r1, r2, lsr #0x2 - b _020BDEE0 -_020BDECC: - mov r1, r2, lsr #0x2 - mov r1, r1, lsl #0x1 - add sp, sp, #0x4 - ldrh r0, [r0, r1] - ldmia sp!, {pc} -_020BDEE0: - mov r2, r1, lsl #0x1 - add r1, r0, r1, lsl #0x1 - ldrh r3, [r0, r2] - ldrh r12, [r1, #0x2] - ldr r0, _020BDF34 ; =0x00007C1F - and r2, r3, #0x3e0 - and r1, r12, #0x3e0 - add r1, r2, r1 - mov r1, r1, lsr #0x1 - and r3, r3, r0 - and r2, r12, r0 - add r2, r3, r2 - and r2, r0, r2, lsr #0x1 - and r0, r1, #0x3e0 - orr r0, r2, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - add sp, sp, #0x4 - ldmia sp!, {pc} - .balign 4 -_020BDF2C: .word 0x0000FFFF -_020BDF30: .word 0x1FFF0000 -_020BDF34: .word 0x00007C1F - - arm_func_start FUN_020BDF38 -FUN_020BDF38: ; 0x020BDF38 - stmdb sp!, {r4,lr} - ldr r12, [r1, #0x0] - mov r4, r0 - mov r2, r2, lsl #0x10 - ldr r0, [r1, #0x8] - mov r1, r2, lsr #0x10 - mov r3, r4 - mov r2, r12, asr #0xc - bl FUN_020BE030 - ldr r0, [r4, #0x10] - bic r0, r0, #0xc0000000 - str r0, [r4, #0x10] - ldr r0, [r4, #0x10] - orr r0, r0, #0x40000000 - str r0, [r4, #0x10] - ldr r0, [r4, #0x0] - orr r0, r0, #0x8 - str r0, [r4, #0x0] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BDF84 -FUN_020BDF84: ; 0x020BDF84 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r3, _020BE02C ; =UNK_021065A0 - ldr r4, [r2, #0x8] - ldr r3, [r3, #0x0] - mov r9, r0 - str r3, [r9, #0xc] - ldrb r0, [r2, #0x18] - mov r8, r1 - add r4, r2, r4 - strb r0, [r9, #0x19] - ldrb r2, [r9, #0x19] - add r1, r9, #0x1a - mov r0, #0x0 - mov r2, r2, lsl #0x1 - bl MIi_CpuClear16 - ldrb r0, [r8, #0x9] - mov r7, #0x0 - cmp r0, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r9,pc} - mov r6, r7 - add r5, r8, #0x8 - add r4, r4, #0x4 -_020BDFE4: - ldrh r1, [r8, #0xe] - mov r0, r4 - add r2, r5, r1 - ldrh r1, [r2, #0x2] - add r1, r2, r1 - add r1, r1, r6 - bl FUN_020BC14C - cmp r0, #0x0 - orrge r1, r7, #0x100 - addge r0, r9, r0, lsl #0x1 - strgeh r1, [r0, #0x1a] - ldrb r0, [r8, #0x9] - add r7, r7, #0x1 - add r6, r6, #0x10 - cmp r7, r0 - blo _020BDFE4 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020BE02C: .word UNK_021065A0 - - arm_func_start FUN_020BE030 -FUN_020BE030: ; 0x020BE030 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - mov r8, r0 - ldrh r4, [r8, #0xe] - add r5, r8, #0x8 - mov r6, r3 - ldrh r3, [r5, r4] - add r4, r5, r4 - add r4, r4, #0x4 - mla r5, r3, r1, r4 - mov r7, r2 - ldr r1, [r5, #0x18] - ldr r2, [r5, #0x1c] - mov r3, r7 - ldr r4, [r6, #0x0] - bl FUN_020BE238 - mov r9, r0 - ldr r1, [r5, #0x20] - mov r0, r8 - ldr r2, [r5, #0x24] - mov r3, r7 - bl FUN_020BE238 - cmp r9, #0x0 - bne _020BE09C - cmp r0, #0x0 - orreq r4, r4, #0x4 - beq _020BE0A8 -_020BE09C: - str r9, [r6, #0x24] - str r0, [r6, #0x28] - bic r4, r4, #0x4 -_020BE0A8: - ldr r1, [r5, #0x10] - ldr r2, [r5, #0x14] - mov r0, r8 - mov r3, r7 - bl FUN_020BE12C - cmp r0, #0x10000000 - strneh r0, [r6, #0x20] - movne r0, r0, lsr #0x10 - strneh r0, [r6, #0x22] - orreq r4, r4, #0x2 - ldr r1, [r5, #0x0] - ldr r2, [r5, #0x4] - mov r0, r8 - mov r3, r7 - bicne r4, r4, #0x2 - bl FUN_020BE238 - mov r9, r0 - ldr r1, [r5, #0x8] - ldr r2, [r5, #0xc] - mov r0, r8 - mov r3, r7 - bl FUN_020BE238 - cmp r9, #0x1000 - bne _020BE114 - cmp r0, #0x1000 - orreq r4, r4, #0x1 - beq _020BE120 -_020BE114: - str r9, [r6, #0x18] - str r0, [r6, #0x1c] - bic r4, r4, #0x1 -_020BE120: - str r4, [r6, #0x0] - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - - arm_func_start FUN_020BE12C -FUN_020BE12C: ; 0x020BE12C - ands r12, r1, #0x20000000 - movne r0, r2 - bxne lr - add r0, r0, r2 - ands r2, r1, #0xc0000000 - beq _020BE1F8 - ldr r2, _020BE234 ; =0x0000FFFF - ands r12, r1, #0x40000000 - and r2, r1, r2 - beq _020BE17C - ands r1, r3, #0x1 - beq _020BE174 - cmp r3, r2 - movhi r1, r2, lsr #0x1 - addhi r3, r1, #0x1 - bhi _020BE1F8 - mov r2, r3, lsr #0x1 - b _020BE200 -_020BE174: - mov r3, r3, lsr #0x1 - b _020BE1F8 -_020BE17C: - ands r1, r3, #0x3 - beq _020BE1F4 - cmp r3, r2 - addhi r3, r1, r2, lsr #0x2 - bhi _020BE1F8 - ands r1, r3, #0x1 - beq _020BE1EC - ands r1, r3, #0x2 - movne r1, r3, lsr #0x2 - addne r2, r1, #0x1 - moveq r2, r3, lsr #0x2 - addeq r1, r2, #0x1 - mov r12, r2, lsl #0x2 - add r3, r0, r2, lsl #0x2 - mov r2, r1, lsl #0x2 - add r1, r0, r1, lsl #0x2 - ldrsh r12, [r0, r12] - ldrsh r2, [r0, r2] - mov r0, #0x3 - ldrsh r3, [r3, #0x2] - ldrsh r1, [r1, #0x2] - mla r2, r12, r0, r2 - mla r1, r3, r0, r1 - ldr r0, _020BE234 ; =0x0000FFFF - mov r1, r1, asr #0x2 - and r0, r0, r2, asr #0x2 - orr r0, r0, r1, lsl #0x10 - bx lr -_020BE1EC: - mov r2, r3, lsr #0x2 - b _020BE200 -_020BE1F4: - mov r3, r3, lsr #0x2 -_020BE1F8: - ldr r0, [r0, r3, lsl #0x2] - bx lr -_020BE200: - add r1, r0, r2, lsl #0x2 - mov r2, r2, lsl #0x2 - ldrsh r12, [r0, r2] - ldrsh r3, [r1, #0x4] - ldrsh r2, [r1, #0x2] - ldrsh r1, [r1, #0x6] - ldr r0, _020BE234 ; =0x0000FFFF - add r3, r12, r3 - add r1, r2, r1 - and r2, r0, r3, asr #0x1 - mov r0, r1, asr #0x1 - orr r0, r2, r0, lsl #0x10 - bx lr - .balign 4 -_020BE234: .word 0x0000FFFF - - arm_func_start FUN_020BE238 -FUN_020BE238: - ands r12, r1, #0x20000000 - movne r0, r2 - bxne lr - add r0, r0, r2 - ands r2, r1, #0xc0000000 - beq _020BE2F0 - ldr r2, _020BE330 ; =0x0000FFFF - ands r12, r1, #0x40000000 - and r12, r1, r2 - beq _020BE288 - ands r2, r3, #0x1 - beq _020BE280 - cmp r3, r12 - movhi r2, r12, lsr #0x1 - addhi r3, r2, #0x1 - bhi _020BE2F0 - mov r3, r3, lsr #0x1 - b _020BE304 -_020BE280: - mov r3, r3, lsr #0x1 - b _020BE2F0 -_020BE288: - ands r2, r3, #0x3 - beq _020BE2EC - cmp r3, r12 - addhi r3, r2, r12, lsr #0x2 - bhi _020BE2F0 - ands r2, r3, #0x1 - beq _020BE2E4 - ands r2, r3, #0x2 - movne r3, r3, lsr #0x2 - addne r2, r3, #0x1 - moveq r2, r3, lsr #0x2 - addeq r3, r2, #0x1 - ands r1, r1, #0x10000000 - movne r2, r2, lsl #0x1 - movne r1, r3, lsl #0x1 - ldrnesh r2, [r0, r2] - ldrnesh r1, [r0, r1] - ldreq r2, [r0, r2, lsl #0x2] - ldreq r1, [r0, r3, lsl #0x2] - mov r0, #0x3 - mla r0, r2, r0, r1 - mov r0, r0, asr #0x2 - bx lr -_020BE2E4: - mov r3, r3, lsr #0x2 - b _020BE304 -_020BE2EC: - mov r3, r3, lsr #0x2 -_020BE2F0: - ands r1, r1, #0x10000000 - movne r1, r3, lsl #0x1 - ldrnesh r0, [r0, r1] - ldreq r0, [r0, r3, lsl #0x2] - bx lr -_020BE304: - ands r1, r1, #0x10000000 - movne r2, r3, lsl #0x1 - addne r1, r0, r3, lsl #0x1 - ldrnesh r2, [r0, r2] - ldrnesh r0, [r1, #0x2] - addeq r1, r0, r3, lsl #0x2 - ldreq r2, [r0, r3, lsl #0x2] - ldreq r0, [r1, #0x4] - add r0, r2, r0 - mov r0, r0, asr #0x1 - bx lr - .balign 4 -_020BE330: .word 0x0000FFFF - - arm_func_start FUN_020BE334 -FUN_020BE334: ; 0x020BE334 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r6, r1 - ldr r3, [r6, #0x0] - ldr r5, [r6, #0x8] - mov r1, r2, lsl #0x10 - mov r2, r3, lsl #0x4 - mov r7, r0 - mov r0, r5 - mov r1, r1, lsr #0x10 - mov r2, r2, lsr #0x10 - bl FUN_020BC42C - mov r4, r0 - ldrb r1, [r4, #0x2] - mov r0, r5 - bl FUN_020BC4B8 - mov r1, r0 - ldr r0, [r6, #0x14] - mov r2, r7 - bl FUN_020BE408 - ldrb r1, [r4, #0x3] - cmp r1, #0xff - addeq sp, sp, #0x4 - ldmeqia sp!, {r4-r7,pc} - mov r0, r5 - bl FUN_020BC4A8 - mov r1, r0 - ldr r0, [r6, #0x14] - mov r2, r7 - bl FUN_020BE3B4 - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BE3B4 -FUN_020BE3B4: ; 0x020BE3B4 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldrh r0, [r5, #0x34] - mov r4, r2 - add r0, r5, r0 - bl FUN_020BC2A0 - ldr r1, [r5, #0x2c] - ldrh r2, [r0, #0x2] - mov r1, r1, lsl #0x10 - mov r3, r1, lsr #0x10 - ands r1, r2, #0x1 - ldrh r0, [r0, #0x0] - moveq r1, r3, lsl #0xf - moveq r3, r1, lsr #0x10 - moveq r0, r0, lsl #0xf - moveq r0, r0, lsr #0x10 - add r0, r0, r3 - str r0, [r4, #0x14] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020BE408 -FUN_020BE408: ; 0x020BE408 - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - add r0, r5, #0x3c - mov r4, r2 - bl FUN_020BC2A0 - ldr r1, [r0, #0x0] - ldr r3, [r4, #0x10] - and r1, r1, #0x1c000000 - cmp r1, #0x14000000 - ldrne r2, [r5, #0x8] - ldrne r1, _020BE4E0 ; =0x0000FFFF - andne r5, r2, r1 - ldreq r2, [r5, #0x18] - ldreq r1, _020BE4E0 ; =0x0000FFFF - andeq r5, r2, r1 - ldr r1, _020BE4E4 ; =0xC00F0000 - ldr r2, _020BE4E8 ; =0x000007FF - and r1, r3, r1 - str r1, [r4, #0x10] - ldr r1, [r0, #0x0] - ldr r3, [r4, #0x10] - add r1, r1, r5 - orr r1, r3, r1 - str r1, [r4, #0x10] - ldr r3, [r0, #0x4] - ldr r1, _020BE4EC ; =0x003FF800 - and r3, r3, r2 - strh r3, [r4, #0x2c] - ldr r3, [r0, #0x4] - and r1, r3, r1 - mov r1, r1, lsr #0xb - strh r1, [r4, #0x2e] - ldr r3, [r0, #0x4] - ldrh r1, [r4, #0x2c] - and r0, r3, r2 - and r5, r2, r3, lsr #0xb - cmp r0, r1 - moveq r0, #0x1000 - beq _020BE4B4 - mov r0, r0, lsl #0xc - mov r1, r1, lsl #0xc - bl FX_Div -_020BE4B4: - str r0, [r4, #0x30] - ldrh r1, [r4, #0x2e] - cmp r5, r1 - moveq r0, #0x1000 - beq _020BE4D4 - mov r0, r5, lsl #0xc - mov r1, r1, lsl #0xc - bl FX_Div -_020BE4D4: - str r0, [r4, #0x34] - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - .balign 4 -_020BE4E0: .word 0x0000FFFF -_020BE4E4: .word 0xC00F0000 -_020BE4E8: .word 0x000007FF -_020BE4EC: .word 0x003FF800 - - arm_func_start FUN_020BE4F0 -FUN_020BE4F0: ; 0x020BE4F0 - stmdb sp!, {r4-r9,lr} - sub sp, sp, #0x4 - ldr r3, _020BE59C ; =UNK_021065A4 - ldr r4, [r2, #0x8] - ldr r3, [r3, #0x0] - mov r9, r0 - str r3, [r9, #0xc] - ldrb r0, [r2, #0x18] - mov r8, r1 - add r4, r2, r4 - strb r0, [r9, #0x19] - str r8, [r9, #0x8] - ldrb r2, [r9, #0x19] - add r1, r9, #0x1a - mov r0, #0x0 - mov r2, r2, lsl #0x1 - bl MIi_CpuClear16 - ldrb r0, [r8, #0xd] - mov r7, #0x0 - cmp r0, #0x0 - addls sp, sp, #0x4 - ldmlsia sp!, {r4-r9,pc} - mov r6, r7 - add r5, r8, #0xc - add r4, r4, #0x4 -_020BE554: - ldrh r1, [r8, #0x12] - mov r0, r4 - add r2, r5, r1 - ldrh r1, [r2, #0x2] - add r1, r2, r1 - add r1, r1, r6 - bl FUN_020BC14C - cmp r0, #0x0 - orrge r1, r7, #0x100 - addge r0, r9, r0, lsl #0x1 - strgeh r1, [r0, #0x1a] - ldrb r0, [r8, #0xd] - add r7, r7, #0x1 - add r6, r6, #0x10 - cmp r7, r0 - blo _020BE554 - add sp, sp, #0x4 - ldmia sp!, {r4-r9,pc} - .balign 4 -_020BE59C: .word UNK_021065A4 - - arm_func_start FUN_020BE5A0 -FUN_020BE5A0: ; 0x020BE5A0 - stmdb sp!, {lr} - sub sp, sp, #0x4 - ldr lr, [r1, #0x8] - ldr r3, [r1, #0x0] - ldrh r1, [lr, #0x6] - mov r12, r3, asr #0xc - mov r3, #0x1 - mla r2, r12, r1, r2 - mov r1, r2, lsr #0x5 - add r1, lr, r1, lsl #0x2 - ldr r1, [r1, #0xc] - and r2, r2, #0x1f - and r1, r1, r3, lsl r2 - str r1, [r0, #0x0] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BE5E0 -FUN_020BE5E0: ; 0x020BE5E0 - ldr r3, _020BE628 ; =UNK_02106598 - mov r12, #0x0 - ldr r3, [r3, #0x0] - str r3, [r0, #0xc] - ldrb r2, [r2, #0x17] - strb r2, [r0, #0x19] - str r1, [r0, #0x8] - ldrb r1, [r0, #0x19] - cmp r1, #0x0 - bxls lr -_020BE608: - orr r2, r12, #0x100 - add r1, r0, r12, lsl #0x1 - strh r2, [r1, #0x1a] - ldrb r1, [r0, #0x19] - add r12, r12, #0x1 - cmp r12, r1 - blo _020BE608 - bx lr - .balign 4 -_020BE628: .word UNK_02106598 - - arm_func_start FUN_020BE62C -FUN_020BE62C: ; 0x020BE62C - ands r2, r3, #0x4 - ldrne r1, [r0, #0x0] - orrne r1, r1, #0x1 - strne r1, [r0, #0x0] - bne _020BE658 - - arm_func_start FUN_020BE640 -FUN_020BE640: ; 0x020BE640 - ldr r2, [r1, #0x0] - str r2, [r0, #0x4] - ldr r2, [r1, #0x4] - str r2, [r0, #0x8] - ldr r1, [r1, #0x8] - str r1, [r0, #0xc] -_020BE658: - ldr r1, [r0, #0x0] - orr r1, r1, #0x18 - str r1, [r0, #0x0] - bx lr - - arm_func_start FUN_020BE668 -FUN_020BE668: ; 0x020BE668 - stmdb sp!, {r4,lr} - mov r4, r0 - ldr r1, [r4, #0x0] - ands r0, r1, #0x4 - bne _020BE6AC - ands r0, r1, #0x2 - bne _020BE698 - add r1, r4, #0x28 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 - b _020BE6C4 -_020BE698: - add r1, r4, #0x4c - mov r0, #0x1c - mov r2, #0x3 - bl FUN_020BB1C0 - b _020BE6C4 -_020BE6AC: - ands r0, r1, #0x2 - bne _020BE6C4 - add r1, r4, #0x28 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 -_020BE6C4: - ldr r0, [r4, #0x0] - ands r0, r0, #0x1 - ldmneia sp!, {r4,pc} - add r1, r4, #0x4 - mov r0, #0x1b - mov r2, #0x3 - bl FUN_020BB1C0 - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BE6E4 -FUN_020BE6E4: ; 0x020BE6E4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x50 - mov r4, r0 - ldr r0, [r4, #0x0] - mov r1, #0x0 - ands r0, r0, #0x8 - ldrne r0, _020BE820 ; =0x00101610 - mov r3, #0x3 - strne r0, [sp, #0x0] - ldreq r0, _020BE824 ; =0x00101810 - mov r2, #0x2 - streq r0, [sp, #0x0] - mov r0, #0x1000 - str r0, [sp, #0x44] - str r3, [sp, #0x4] - str r2, [sp, #0x48] - str r1, [sp, #0x40] - str r1, [sp, #0x34] - str r1, [sp, #0x30] - str r1, [sp, #0x2c] - str r1, [sp, #0x28] - str r1, [sp, #0x24] - str r1, [sp, #0x20] - str r1, [sp, #0x14] - str r1, [sp, #0x10] - ldr r1, [r4, #0x0] - ldr r0, _020BE828 ; =UNK_021067B0 - and r1, r1, #0x7 - ldr r2, [r0, r1, lsl #0x2] - add r0, sp, #0x8 - mov r1, r4 - blx r2 - ldr r3, [r4, #0x30] - cmp r3, #0x1000 - beq _020BE7B4 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - smull r2, r0, r3, r0 - mov r2, r2, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x8] - ldr r2, [r4, #0x30] - ldr r0, [sp, #0x38] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0xc] - ldr r1, [r4, #0x30] - smull r2, r0, r1, r0 - mov r1, r2, lsr #0xc - orr r1, r1, r0, lsl #0x14 - str r1, [sp, #0x38] -_020BE7B4: - ldr r3, [r4, #0x34] - cmp r3, #0x1000 - beq _020BE804 - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x1c] - smull r2, r0, r3, r0 - mov r2, r2, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x18] - ldr r2, [r4, #0x34] - ldr r0, [sp, #0x3c] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0x1c] - ldr r1, [r4, #0x34] - smull r2, r0, r1, r0 - mov r1, r2, lsr #0xc - orr r1, r1, r0, lsl #0x14 - str r1, [sp, #0x3c] -_020BE804: - add r1, sp, #0x0 - ldr r0, [sp, #0x0] - add r1, r1, #0x4 - mov r2, #0x12 - bl FUN_020BB1C0 - add sp, sp, #0x50 - ldmia sp!, {r4,pc} - .balign 4 -_020BE820: .word 0x00101610 -_020BE824: .word 0x00101810 -_020BE828: .word UNK_021067B0 - - arm_func_start FUN_020BE82C -FUN_020BE82C: ; 0x020BE82C - mov r2, #0x1000 - str r2, [r0, #0x0] - mov r1, #0x0 - str r1, [r0, #0x4] - str r1, [r0, #0x10] - str r2, [r0, #0x14] - str r1, [r0, #0x30] - str r1, [r0, #0x34] - bx lr - - arm_func_start FUN_020BE850 -FUN_020BE850: ; 0x020BE850 - ldr r2, [r1, #0x18] - mov r12, #0x0 - str r2, [r0, #0x0] - ldr r2, [r1, #0x1c] - str r2, [r0, #0x14] - str r12, [r0, #0x4] - str r12, [r0, #0x30] - ldr r2, [r1, #0x1c] - ldrh r3, [r1, #0x2e] - mov r1, r2, lsl #0x1 - rsb r1, r1, #0x0 - add r1, r1, #0x2000 - mul r1, r3, r1 - mov r1, r1, lsl #0x3 - str r1, [r0, #0x34] - str r12, [r0, #0x10] - bx lr - - arm_func_start FUN_020BE894 -FUN_020BE894: ; 0x020BE894 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - mov r6, r0 - mov r4, r2, lsl #0xc - mov r7, r1, lsl #0xc - mov r0, r7 - mov r1, r4 - bl FX_DivAsync - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x0] - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x14] - bl FX_GetDivResult - ldrsh r2, [r5, #0x20] - mov r1, r7 - rsb r2, r2, #0x0 - mul r0, r2, r0 - mov r2, r0, asr #0xc - mov r0, r4 - str r2, [r6, #0x4] - bl FX_DivAsync - ldrsh r1, [r5, #0x20] - ldrsh r0, [r5, #0x22] - ldrh r2, [r5, #0x2c] - add r0, r1, r0 - rsb r0, r0, #0x0 - add r0, r0, #0x1000 - mul r0, r2, r0 - mov r0, r0, lsl #0x3 - str r0, [r6, #0x30] - ldrsh r1, [r5, #0x20] - ldrsh r0, [r5, #0x22] - ldrh r2, [r5, #0x2e] - sub r0, r1, r0 - add r0, r0, #0x1000 - mul r0, r2, r0 - mov r0, r0, lsl #0x3 - str r0, [r6, #0x34] - bl FX_GetDivResult - ldrsh r1, [r5, #0x20] - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r6, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BE954 -FUN_020BE954: ; 0x020BE954 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r1 - ldrh r2, [r9, #0x2c] - ldrh r1, [r9, #0x2e] - mov r10, r0 - mov r8, r2, lsl #0xc - mov r11, r1, lsl #0xc - mov r0, r11 - mov r1, r8 - bl FX_DivAsync - ldrsh r5, [r9, #0x22] - ldr r3, [r9, #0x18] - ldrsh r0, [r9, #0x20] - ldr r4, [r9, #0x1c] - smull r2, r1, r3, r5 - mov r6, r2, lsr #0xc - orr r6, r6, r1, lsl #0x14 - smull r2, r1, r3, r0 - mov r7, r2, lsr #0xc - orr r7, r7, r1, lsl #0x14 - smull r3, r2, r4, r0 - smull r1, r0, r4, r5 - mov r5, r3, lsr #0xc - orr r5, r5, r2, lsl #0x14 - mov r4, r1, lsr #0xc - orr r4, r4, r0, lsl #0x14 - str r6, [r10, #0x0] - str r4, [r10, #0x14] - bl FX_GetDivResult - mov r1, r11 - rsb r2, r5, #0x0 - mul r0, r2, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x4] - mov r0, r8 - bl FX_DivAsync - sub r1, r5, r4 - add r0, r7, r6 - ldrh r3, [r9, #0x2c] - ldr r2, [r9, #0x18] - sub r0, r2, r0 - mul r0, r3, r0 - mov r0, r0, lsl #0x3 - str r0, [r10, #0x30] - ldrh r2, [r9, #0x2e] - ldr r0, [r9, #0x1c] - sub r0, r1, r0 - add r0, r0, #0x2000 - mul r0, r2, r0 - mov r0, r0, lsl #0x3 - str r0, [r10, #0x34] - bl FX_GetDivResult - mul r0, r7, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020BEA3C -FUN_020BEA3C: ; 0x020BEA3C - mov r2, #0x1000 - str r2, [r0, #0x0] - str r2, [r0, #0x14] - mov r12, #0x0 - str r12, [r0, #0x4] - ldrh r2, [r1, #0x2c] - ldr r3, [r1, #0x24] - mul r2, r3, r2 - rsb r2, r2, #0x0 - mov r2, r2, lsl #0x4 - str r2, [r0, #0x30] - ldrh r2, [r1, #0x2e] - ldr r1, [r1, #0x28] - mul r2, r1, r2 - mov r1, r2, lsl #0x4 - str r1, [r0, #0x34] - str r12, [r0, #0x10] - bx lr - - arm_func_start FUN_020BEA84 -FUN_020BEA84: ; 0x020BEA84 - stmdb sp!, {r4,lr} - ldr r3, [r1, #0x18] - mov r2, #0x0 - str r3, [r0, #0x0] - ldr r3, [r1, #0x1c] - str r3, [r0, #0x14] - str r2, [r0, #0x4] - ldr r4, [r1, #0x18] - ldr r3, [r1, #0x24] - ldrh lr, [r1, #0x2c] - smull r12, r3, r4, r3 - mov r4, r12, lsr #0x8 - orr r4, r4, r3, lsl #0x18 - rsb r3, r4, #0x0 - mul r3, lr, r3 - str r3, [r0, #0x30] - ldr r4, [r1, #0x1c] - ldr r12, [r1, #0x28] - mov r3, r4, lsl #0x1 - smull lr, r12, r4, r12 - rsb r4, r3, #0x0 - mov r3, lr, lsr #0x8 - ldrh lr, [r1, #0x2e] - add r1, r4, #0x2000 - orr r3, r3, r12, lsl #0x18 - mul r4, lr, r1 - mul r1, lr, r3 - add r1, r1, r4, lsl #0x3 - str r1, [r0, #0x34] - str r2, [r0, #0x10] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BEB00 -FUN_020BEB00: ; 0x020BEB00 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - mov r6, r0 - mov r4, r2, lsl #0xc - mov r7, r1, lsl #0xc - mov r0, r7 - mov r1, r4 - bl FX_DivAsync - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x0] - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x14] - bl FX_GetDivResult - ldrsh r2, [r5, #0x20] - mov r1, r7 - rsb r2, r2, #0x0 - mul r0, r2, r0 - mov r2, r0, asr #0xc - mov r0, r4 - str r2, [r6, #0x4] - bl FX_DivAsync - ldrsh r2, [r5, #0x20] - ldrsh r1, [r5, #0x22] - ldrh r3, [r5, #0x2c] - ldr r0, [r5, #0x24] - add r1, r2, r1 - rsb r1, r1, #0x0 - add r1, r1, #0x1000 - mul r2, r3, r1 - mul r1, r0, r3 - mov r0, r2, lsl #0x3 - sub r0, r0, r1, lsl #0x4 - str r0, [r6, #0x30] - ldrsh r2, [r5, #0x20] - ldrsh r1, [r5, #0x22] - ldrh r3, [r5, #0x2e] - ldr r0, [r5, #0x28] - sub r1, r2, r1 - add r1, r1, #0x1000 - mul r2, r3, r1 - mul r1, r0, r3 - mov r0, r2, lsl #0x3 - add r0, r0, r1, lsl #0x4 - str r0, [r6, #0x34] - bl FX_GetDivResult - ldrsh r1, [r5, #0x20] - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r6, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BEBD8 -FUN_020BEBD8: ; 0x020BEBD8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r1 - ldrh r2, [r9, #0x2c] - ldrh r1, [r9, #0x2e] - mov r10, r0 - mov r8, r2, lsl #0xc - mov r11, r1, lsl #0xc - mov r0, r11 - mov r1, r8 - bl FX_DivAsync - ldrsh r5, [r9, #0x22] - ldr r3, [r9, #0x18] - ldrsh r0, [r9, #0x20] - ldr r4, [r9, #0x1c] - smull r2, r1, r3, r5 - mov r6, r2, lsr #0xc - orr r6, r6, r1, lsl #0x14 - smull r2, r1, r3, r0 - mov r7, r2, lsr #0xc - orr r7, r7, r1, lsl #0x14 - smull r3, r2, r4, r0 - smull r1, r0, r4, r5 - mov r5, r3, lsr #0xc - orr r5, r5, r2, lsl #0x14 - mov r4, r1, lsr #0xc - orr r4, r4, r0, lsl #0x14 - str r6, [r10, #0x0] - str r4, [r10, #0x14] - bl FX_GetDivResult - mov r1, r11 - rsb r2, r5, #0x0 - mul r0, r2, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x4] - mov r0, r8 - bl FX_DivAsync - sub r1, r5, r4 - add r2, r7, r6 - ldr r5, [r9, #0x18] - ldrh r0, [r9, #0x2c] - sub r3, r5, r2 - ldr r2, [r9, #0x24] - mul r4, r0, r3 - smull r3, r2, r5, r2 - mov r4, r4, lsl #0x3 - mov r3, r3, lsr #0x8 - orr r3, r3, r2, lsl #0x18 - mul r2, r0, r3 - sub r0, r4, r2 - str r0, [r10, #0x30] - ldr r4, [r9, #0x1c] - ldrh r3, [r9, #0x2e] - sub r0, r1, r4 - add r0, r0, #0x2000 - mul r2, r3, r0 - ldr r0, [r9, #0x28] - smull r1, r0, r4, r0 - mov r1, r1, lsr #0x8 - orr r1, r1, r0, lsl #0x18 - mul r0, r3, r1 - add r0, r0, r2, lsl #0x3 - str r0, [r10, #0x34] - bl FX_GetDivResult - mul r0, r7, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020BECEC -FUN_020BECEC: ; 0x020BECEC - stmdb sp!, {r4-r8,lr} - mov r12, r0 - ands r0, r3, #0x4 - ldrb r3, [r2, #0x3] - beq _020BED40 - ldr r1, [r12, #0x0] - ands r0, r3, #0x2 - orr r0, r1, #0x1 - str r0, [r12, #0x0] - beq _020BEDB8 - ldr r0, _020BEE2C ; =UNK_021CEF7C - ldrb r7, [r2, #0x1] - ldr r0, [r0, #0x0] - mov r1, #0x1 - add r6, r0, #0xc4 - mov r5, r7, lsr #0x5 - ldr r4, [r6, r5, lsl #0x2] - and r0, r7, #0x1f - orr r0, r4, r1, lsl r0 - str r0, [r6, r5, lsl #0x2] - b _020BEDB8 -_020BED40: - ldr r4, [r1, #0x0] - ands r0, r3, #0x2 - str r4, [r12, #0x4] - ldr r0, [r1, #0x4] - str r0, [r12, #0x8] - ldr r0, [r1, #0x8] - str r0, [r12, #0xc] - beq _020BEDB8 - ldr lr, _020BEE2C ; =UNK_021CEF7C - ldrb r0, [r2, #0x1] - ldr r4, [lr, #0x0] - mov lr, #0x18 - add r8, r4, #0xc4 - mov r7, r0, lsr #0x5 - and r4, r0, #0x1f - mov r5, #0x1 - mvn r4, r5, lsl r4 - ldr r6, [r8, r7, lsl #0x2] - mul r5, r0, lr - and r0, r6, r4 - str r0, [r8, r7, lsl #0x2] - ldr r4, [r1, #0xc] - ldr r0, _020BEE30 ; =UNK_021CFD8C - ldr lr, _020BEE34 ; =UNK_021CFD90 - str r4, [r0, r5] - ldr r4, [r1, #0x10] - ldr r0, _020BEE38 ; =UNK_021CFD94 - str r4, [lr, r5] - ldr r1, [r1, #0x14] - str r1, [r0, r5] -_020BEDB8: - ands r0, r3, #0x1 - beq _020BEE1C - ldrb r0, [r2, #0x2] - ldr r2, [r12, #0x0] - ldr r1, _020BEE2C ; =UNK_021CEF7C - orr r2, r2, #0x20 - str r2, [r12, #0x0] - ldr r2, [r1, #0x0] - mov r1, r0, lsr #0x5 - add r1, r2, r1, lsl #0x2 - and r2, r0, #0x1f - mov r3, #0x1 - mov r2, r3, lsl r2 - ldr r1, [r1, #0xc4] - ands r1, r2, r1 - ldrne r0, [r12, #0x0] - orrne r0, r0, #0x8 - strne r0, [r12, #0x0] - bne _020BEE1C - ldr r2, _020BEE30 ; =UNK_021CFD8C - mov r1, #0x18 - mla r1, r0, r1, r2 - add r3, r12, #0x10 - ldmia r1, {r0-r2} - stmia r3, {r0-r2} -_020BEE1C: - ldr r0, [r12, #0x0] - orr r0, r0, #0x10 - str r0, [r12, #0x0] - ldmia sp!, {r4-r8,pc} - .balign 4 -_020BEE2C: .word UNK_021CEF7C -_020BEE30: .word UNK_021CFD8C -_020BEE34: .word UNK_021CFD90 -_020BEE38: .word UNK_021CFD94 - - arm_func_start FUN_020BEE3C -FUN_020BEE3C: ; 0x020BEE3C - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0x4 - mov r5, r0 - ldr r1, [r5, #0x0] - mov r4, #0x0 - ands r0, r1, #0x4 - moveq r4, #0x1 - ands r0, r1, #0x20 - beq _020BEE94 - ands r0, r1, #0x8 - bne _020BEE94 - cmp r4, #0x0 - beq _020BEE84 - add r1, r5, #0x4c - mov r0, #0x1c - mov r2, #0x3 - bl FUN_020BB1C0 - mov r4, #0x0 -_020BEE84: - add r1, r5, #0x10 - mov r0, #0x1b - mov r2, #0x3 - bl FUN_020BB1C0 -_020BEE94: - ldr r0, [r5, #0x0] - ands r0, r0, #0x2 - bne _020BEED0 - cmp r4, #0x0 - beq _020BEEBC - add r1, r5, #0x28 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 - b _020BEEE8 -_020BEEBC: - add r1, r5, #0x28 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - b _020BEEE8 -_020BEED0: - cmp r4, #0x0 - beq _020BEEE8 - add r1, r5, #0x4c - mov r0, #0x1c - mov r2, #0x3 - bl FUN_020BB1C0 -_020BEEE8: - ldr r0, [r5, #0x0] - ands r0, r0, #0x1 - addne sp, sp, #0x4 - ldmneia sp!, {r4-r5,pc} - add r1, r5, #0x4 - mov r0, #0x1b - mov r2, #0x3 - bl FUN_020BB1C0 - add sp, sp, #0x4 - ldmia sp!, {r4-r5,pc} - - arm_func_start FUN_020BEF10 -FUN_020BEF10: ; 0x020BEF10 - stmdb sp!, {lr} - sub sp, sp, #0x3c - ldr r1, [r0, #0x0] - mov r3, #0x0 - ands r1, r1, #0x8 - ldrne r1, _020BF0CC ; =0x00101710 - mov r2, #0x3 - strne r1, [sp, #0x0] - ldreq r1, _020BF0D0 ; =0x00101910 - str r3, [sp, #0x34] - streq r1, [sp, #0x0] - mov r1, #0x2 - str r1, [sp, #0x38] - str r3, [sp, #0x28] - str r3, [sp, #0x24] - str r3, [sp, #0x20] - str r3, [sp, #0x1c] - str r3, [sp, #0x14] - str r3, [sp, #0x10] - str r3, [sp, #0xc] - str r2, [sp, #0x4] - ldr r2, [r0, #0x0] - ands r1, r2, #0x4 - beq _020BEFA0 - str r3, [sp, #0x2c] - str r3, [sp, #0x30] - ldr r1, [r0, #0x0] - ands r1, r1, #0x1 - movne r1, #0x1000 - strne r1, [sp, #0x8] - strne r1, [sp, #0x18] - ldreq r1, [r0, #0x18] - streq r1, [sp, #0x8] - ldreq r1, [r0, #0x1c] - streq r1, [sp, #0x18] - b _020BF040 -_020BEFA0: - ands r1, r2, #0x1 - beq _020BEFE8 - ldr r2, [r0, #0x24] - ldrh r1, [r0, #0x2c] - mov r2, r2, lsl #0x4 - rsb r2, r2, #0x0 - mul r1, r2, r1 - str r1, [sp, #0x2c] - ldr r2, [r0, #0x28] - ldrh r1, [r0, #0x2e] - mov r2, r2, lsl #0x4 - rsb r2, r2, #0x0 - mul r3, r2, r1 - mov r1, #0x1000 - str r3, [sp, #0x30] - str r1, [sp, #0x8] - str r1, [sp, #0x18] - b _020BF040 -_020BEFE8: - ldr r2, [r0, #0x18] - ldr r1, [r0, #0x24] - ldrh r12, [r0, #0x2c] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0x8 - orr r2, r2, r1, lsl #0x18 - rsb r1, r2, #0x0 - mul r1, r12, r1 - str r1, [sp, #0x2c] - ldr r2, [r0, #0x1c] - ldr r1, [r0, #0x28] - ldrh r12, [r0, #0x2e] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0x8 - orr r2, r2, r1, lsl #0x18 - rsb r1, r2, #0x0 - mul r1, r12, r1 - str r1, [sp, #0x30] - ldr r1, [r0, #0x18] - str r1, [sp, #0x8] - ldr r1, [r0, #0x1c] - str r1, [sp, #0x18] -_020BF040: - ldr r12, [r0, #0x30] - cmp r12, #0x1000 - beq _020BF078 - ldr r2, [sp, #0x8] - ldr r1, [sp, #0x2c] - smull r3, r2, r12, r2 - mov r3, r3, lsr #0xc - orr r3, r3, r2, lsl #0x14 - str r3, [sp, #0x8] - ldr r2, [r0, #0x30] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0x2c] -_020BF078: - ldr r12, [r0, #0x34] - cmp r12, #0x1000 - beq _020BF0B0 - ldr r2, [sp, #0x18] - ldr r1, [sp, #0x30] - smull r3, r2, r12, r2 - mov r3, r3, lsr #0xc - orr r3, r3, r2, lsl #0x14 - str r3, [sp, #0x18] - ldr r0, [r0, #0x34] - smull r2, r1, r0, r1 - mov r0, r2, lsr #0xc - orr r0, r0, r1, lsl #0x14 - str r0, [sp, #0x30] -_020BF0B0: - add r1, sp, #0x0 - ldr r0, [sp, #0x0] - add r1, r1, #0x4 - mov r2, #0xe - bl FUN_020BB1C0 - add sp, sp, #0x3c - ldmia sp!, {pc} - .balign 4 -_020BF0CC: .word 0x00101710 -_020BF0D0: .word 0x00101910 - - arm_func_start FUN_020BF0D4 -FUN_020BF0D4: ; 0x020BF0D4 - stmdb sp!, {r4-r8,lr} - mov r5, r0 - ands r0, r3, #0x4 - ldrb r4, [r2, #0x1] - ldrb r0, [r2, #0x2] - beq _020BF174 - ldr r2, [r5, #0x0] - ldr r1, _020BF2E0 ; =UNK_021CEF7C - orr r2, r2, #0x1 - str r2, [r5, #0x0] - ldr r3, [r1, #0x0] - mov r1, r0, lsr #0x5 - add r1, r3, r1, lsl #0x2 - and r2, r0, #0x1f - mov r6, #0x1 - mov r2, r6, lsl r2 - ldr r1, [r1, #0xc4] - ands r1, r2, r1 - beq _020BF148 - add r3, r3, #0xc4 - mov r2, r4, lsr #0x5 - ldr r1, [r3, r2, lsl #0x2] - and r0, r4, #0x1f - orr r0, r1, r6, lsl r0 - str r0, [r3, r2, lsl #0x2] - ldr r0, [r5, #0x0] - orr r0, r0, #0x18 - str r0, [r5, #0x0] - ldmia sp!, {r4-r8,pc} -_020BF148: - ldr r1, _020BF2E4 ; =UNK_021CFD80 - mov r2, #0x18 - mla r6, r0, r2, r1 - mla r1, r4, r2, r1 - mov r0, r6 - bl MIi_CpuCopy32 - mov r0, r6 - add r1, r5, #0x10 - mov r2, #0x18 - bl MIi_CpuCopy32 - ldmia sp!, {r4-r8,pc} -_020BF174: - ldr r3, [r1, #0x0] - ldr r2, _020BF2E0 ; =UNK_021CEF7C - str r3, [r5, #0x4] - ldr r3, [r1, #0x4] - mov r7, r0, lsr #0x5 - str r3, [r5, #0x8] - ldr r3, [r1, #0x8] - and r8, r0, #0x1f - str r3, [r5, #0xc] - ldr r6, [r2, #0x0] - mov r3, #0x1 - add r2, r6, r7, lsl #0x2 - mov r7, r3, lsl r8 - ldr r2, [r2, #0xc4] - ands r2, r7, r2 - beq _020BF200 - ldr r3, _020BF2E4 ; =UNK_021CFD80 - mov r2, #0x18 - mov r0, r1 - mla r1, r4, r2, r3 - bl MIi_CpuCopy32 - ldr r0, _020BF2E0 ; =UNK_021CEF7C - mov r2, r4, lsr #0x5 - ldr r1, [r0, #0x0] - and r0, r4, #0x1f - add r3, r1, #0xc4 - mov r1, #0x1 - mvn r0, r1, lsl r0 - ldr r1, [r3, r2, lsl #0x2] - and r0, r1, r0 - str r0, [r3, r2, lsl #0x2] - ldr r0, [r5, #0x0] - orr r0, r0, #0x18 - str r0, [r5, #0x0] - ldmia sp!, {r4-r8,pc} -_020BF200: - mov r2, #0x18 - mul r12, r0, r2 - and r7, r4, #0x1f - ldr r0, _020BF2E4 ; =UNK_021CFD80 - add r6, r6, #0xc4 - mov lr, r4, lsr #0x5 - mvn r7, r3, lsl r7 - ldr r8, [r6, lr, lsl #0x2] - mul r3, r4, r2 - and r4, r8, r7 - str r4, [r6, lr, lsl #0x2] - ldr r7, [r1, #0x0] - ldr r4, [r0, r12] - ldr r6, _020BF2E8 ; =UNK_021CFD84 - smull r8, r4, r7, r4 - mov r7, r8, lsr #0xc - orr r7, r7, r4, lsl #0x14 - str r7, [r0, r3] - ldr r8, [r1, #0x4] - ldr r4, [r6, r12] - ldr r7, _020BF2EC ; =UNK_021CFD88 - smull lr, r4, r8, r4 - mov r8, lr, lsr #0xc - orr r8, r8, r4, lsl #0x14 - str r8, [r6, r3] - ldr r8, [r1, #0x8] - ldr r4, [r7, r12] - ldr r6, _020BF2F0 ; =UNK_021CFD8C - smull lr, r4, r8, r4 - mov r8, lr, lsr #0xc - orr r8, r8, r4, lsl #0x14 - str r8, [r7, r3] - ldr r7, [r1, #0xc] - ldr r4, [r6, r12] - ldr lr, _020BF2F4 ; =UNK_021CFD90 - smull r8, r4, r7, r4 - mov r7, r8, lsr #0xc - orr r7, r7, r4, lsl #0x14 - str r7, [r6, r3] - ldr r7, [r1, #0x10] - ldr r4, [lr, r12] - ldr r6, _020BF2F8 ; =UNK_021CFD94 - smull r8, r4, r7, r4 - add r0, r0, r12 - mov r7, r8, lsr #0xc - orr r7, r7, r4, lsl #0x14 - str r7, [lr, r3] - ldr lr, [r1, #0x14] - ldr r4, [r6, r12] - add r1, r5, #0x10 - smull r5, r4, lr, r4 - mov r5, r5, lsr #0xc - orr r5, r5, r4, lsl #0x14 - str r5, [r6, r3] - bl MIi_CpuCopy32 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020BF2E0: .word UNK_021CEF7C -_020BF2E4: .word UNK_021CFD80 -_020BF2E8: .word UNK_021CFD84 -_020BF2EC: .word UNK_021CFD88 -_020BF2F0: .word UNK_021CFD8C -_020BF2F4: .word UNK_021CFD90 -_020BF2F8: .word UNK_021CFD94 - - arm_func_start FUN_020BF2FC -FUN_020BF2FC: ; 0x020BF2FC - stmdb sp!, {r4-r6,lr} - sub sp, sp, #0x10 - mov r6, r0 - ldr r0, [r6, #0x0] - mov r5, #0x0 - ands r4, r0, #0x18 - bne _020BF328 - add r1, r6, #0x1c - mov r0, #0x1b - mov r2, #0x3 - bl FUN_020BB1C0 -_020BF328: - ldr r0, [r6, #0x0] - ands r0, r0, #0x4 - bne _020BF398 - cmp r4, #0x0 - movne r5, #0x1 - bne _020BF398 - ldr r2, [r6, #0x4c] - ldr r0, [r6, #0x10] - add r1, sp, #0x0 - smull r3, r0, r2, r0 - mov r2, r3, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x0] - ldr r3, [r6, #0x50] - ldr r2, [r6, #0x14] - mov r0, #0x1c - smull r12, r2, r3, r2 - mov r3, r12, lsr #0xc - orr r3, r3, r2, lsl #0x14 - str r3, [sp, #0x4] - ldr r12, [r6, #0x54] - ldr r3, [r6, #0x18] - mov r2, #0x3 - smull lr, r3, r12, r3 - mov r12, lr, lsr #0xc - orr r12, r12, r3, lsl #0x14 - str r12, [sp, #0x8] - bl FUN_020BB1C0 -_020BF398: - ldr r0, [r6, #0x0] - ands r0, r0, #0x2 - bne _020BF3D4 - cmp r5, #0x0 - beq _020BF3C0 - add r1, r6, #0x28 - mov r0, #0x19 - mov r2, #0xc - bl FUN_020BB1C0 - b _020BF3EC -_020BF3C0: - add r1, r6, #0x28 - mov r0, #0x1a - mov r2, #0x9 - bl FUN_020BB1C0 - b _020BF3EC -_020BF3D4: - cmp r5, #0x0 - beq _020BF3EC - add r1, r6, #0x4c - mov r0, #0x1c - mov r2, #0x3 - bl FUN_020BB1C0 -_020BF3EC: - cmp r4, #0x0 - bne _020BF404 - add r1, r6, #0x10 - mov r0, #0x1b - mov r2, #0x3 - bl FUN_020BB1C0 -_020BF404: - ldr r0, [r6, #0x0] - ands r0, r0, #0x1 - addne sp, sp, #0x10 - ldmneia sp!, {r4-r6,pc} - add r1, r6, #0x4 - mov r0, #0x1b - mov r2, #0x3 - bl FUN_020BB1C0 - add sp, sp, #0x10 - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BF42C -FUN_020BF42C: ; 0x020BF42C - stmdb sp!, {r4,lr} - sub sp, sp, #0x50 - mov r4, r0 - ldr r0, [r4, #0x0] - mov r1, #0x0 - ands r0, r0, #0x8 - ldrne r0, _020BF568 ; =0x00101610 - mov r3, #0x3 - strne r0, [sp, #0x0] - ldreq r0, _020BF56C ; =0x00101810 - mov r2, #0x2 - streq r0, [sp, #0x0] - mov r0, #0x1000 - str r0, [sp, #0x44] - str r3, [sp, #0x4] - str r2, [sp, #0x48] - str r1, [sp, #0x40] - str r1, [sp, #0x34] - str r1, [sp, #0x30] - str r1, [sp, #0x2c] - str r1, [sp, #0x28] - str r1, [sp, #0x24] - str r1, [sp, #0x20] - str r1, [sp, #0x14] - str r1, [sp, #0x10] - ldr r1, [r4, #0x0] - ldr r0, _020BF570 ; =UNK_021067D0 - and r1, r1, #0x7 - ldr r2, [r0, r1, lsl #0x2] - add r0, sp, #0x8 - mov r1, r4 - blx r2 - ldr r3, [r4, #0x30] - cmp r3, #0x1000 - beq _020BF4FC - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - smull r2, r0, r3, r0 - mov r2, r2, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x8] - ldr r2, [r4, #0x30] - ldr r0, [sp, #0x38] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0xc] - ldr r1, [r4, #0x30] - smull r2, r0, r1, r0 - mov r1, r2, lsr #0xc - orr r1, r1, r0, lsl #0x14 - str r1, [sp, #0x38] -_020BF4FC: - ldr r3, [r4, #0x34] - cmp r3, #0x1000 - beq _020BF54C - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x1c] - smull r2, r0, r3, r0 - mov r2, r2, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x18] - ldr r2, [r4, #0x34] - ldr r0, [sp, #0x3c] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0x1c] - ldr r1, [r4, #0x34] - smull r2, r0, r1, r0 - mov r1, r2, lsr #0xc - orr r1, r1, r0, lsl #0x14 - str r1, [sp, #0x3c] -_020BF54C: - add r1, sp, #0x0 - ldr r0, [sp, #0x0] - add r1, r1, #0x4 - mov r2, #0x12 - bl FUN_020BB1C0 - add sp, sp, #0x50 - ldmia sp!, {r4,pc} - .balign 4 -_020BF568: .word 0x00101610 -_020BF56C: .word 0x00101810 -_020BF570: .word UNK_021067D0 - - arm_func_start FUN_020BF574 -FUN_020BF574: ; 0x020BF574 - mov r2, #0x1000 - str r2, [r0, #0x0] - mov r1, #0x0 - str r1, [r0, #0x4] - str r1, [r0, #0x10] - str r2, [r0, #0x14] - str r1, [r0, #0x30] - str r1, [r0, #0x34] - bx lr - - arm_func_start FUN_020BF598 -FUN_020BF598: ; 0x020BF598 - ldr r2, [r1, #0x18] - mov r12, #0x0 - str r2, [r0, #0x0] - ldr r2, [r1, #0x1c] - str r2, [r0, #0x14] - str r12, [r0, #0x4] - ldr r3, [r1, #0x18] - ldrh r2, [r1, #0x2c] - rsb r3, r3, #0x1000 - mul r2, r3, r2 - mov r2, r2, lsl #0x3 - str r2, [r0, #0x30] - ldr r2, [r1, #0x1c] - ldrh r1, [r1, #0x2e] - rsb r2, r2, #0x1000 - mul r1, r2, r1 - mov r1, r1, lsl #0x3 - str r1, [r0, #0x34] - str r12, [r0, #0x10] - bx lr - - arm_func_start FUN_020BF5E8 -FUN_020BF5E8: ; 0x020BF5E8 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - mov r6, r0 - mov r4, r2, lsl #0xc - mov r7, r1, lsl #0xc - mov r0, r7 - mov r1, r4 - bl FX_DivAsync - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x0] - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x14] - bl FX_GetDivResult - ldrsh r2, [r5, #0x20] - mov r1, r7 - mul r0, r2, r0 - mov r2, r0, asr #0xc - mov r0, r4 - str r2, [r6, #0x4] - bl FX_DivAsync - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - ldrsh r4, [r5, #0x22] - rsb r0, r2, #0x0 - rsb r1, r1, #0x0 - mov r0, r0, lsl #0xb - ldrsh r3, [r5, #0x20] - mov r1, r1, lsl #0xb - smull r7, lr, r4, r0 - smull r12, r4, r3, r1 - subs r7, r7, r12 - sbc r3, lr, r4 - mov r4, r7, lsr #0x8 - orr r4, r4, r3, lsl #0x18 - add r2, r4, r2, lsl #0xf - str r2, [r6, #0x30] - ldrsh r2, [r5, #0x22] - ldrsh r3, [r5, #0x20] - ldrh r12, [r5, #0x2e] - smull r4, r1, r2, r1 - smlal r4, r1, r3, r0 - mov r0, r4, lsr #0x8 - orr r0, r0, r1, lsl #0x18 - add r0, r0, r12, lsl #0xf - str r0, [r6, #0x34] - bl FX_GetDivResult - ldrsh r1, [r5, #0x20] - rsb r1, r1, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r6, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BF6C8 -FUN_020BF6C8: ; 0x020BF6C8 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r1 - ldrh r2, [r9, #0x2c] - ldrh r1, [r9, #0x2e] - mov r10, r0 - mov r8, r2, lsl #0xc - mov r11, r1, lsl #0xc - mov r0, r11 - mov r1, r8 - bl FX_DivAsync - ldrsh r0, [r9, #0x22] - ldr r3, [r9, #0x18] - ldrsh r5, [r9, #0x20] - ldr r4, [r9, #0x1c] - smull r2, r1, r3, r0 - mov r7, r2, lsr #0xc - orr r7, r7, r1, lsl #0x14 - smull r2, r1, r3, r5 - mov r6, r2, lsr #0xc - orr r6, r6, r1, lsl #0x14 - smull r3, r2, r4, r0 - smull r1, r0, r4, r5 - mov r5, r3, lsr #0xc - orr r5, r5, r2, lsl #0x14 - mov r4, r1, lsr #0xc - orr r4, r4, r0, lsl #0x14 - str r7, [r10, #0x0] - str r5, [r10, #0x14] - bl FX_GetDivResult - mov r1, r11 - mul r0, r4, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x4] - mov r0, r8 - bl FX_DivAsync - ldrh r3, [r9, #0x2c] - ldrh r1, [r9, #0x2e] - rsb r0, r3, #0x0 - rsb r1, r1, #0x0 - mov r2, r1, lsl #0xb - mov r11, r0, lsl #0xb - smull r1, r0, r7, r11 - smull r8, r7, r5, r2 - smlal r8, r7, r4, r11 - mov r4, r8, lsr #0x8 - orr r4, r4, r7, lsl #0x18 - smull r5, r2, r6, r2 - subs r1, r1, r5 - sbc r0, r0, r2 - mov r1, r1, lsr #0x8 - orr r1, r1, r0, lsl #0x18 - add r0, r1, r3, lsl #0xf - str r0, [r10, #0x30] - ldrh r0, [r9, #0x2e] - add r0, r4, r0, lsl #0xf - str r0, [r10, #0x34] - bl FX_GetDivResult - rsb r1, r6, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020BF7C8 -FUN_020BF7C8: ; 0x020BF7C8 - mov r2, #0x1000 - str r2, [r0, #0x0] - str r2, [r0, #0x14] - mov r12, #0x0 - str r12, [r0, #0x4] - ldr r3, [r1, #0x24] - ldrh r2, [r1, #0x2c] - rsb r3, r3, #0x0 - mul r2, r3, r2 - mov r2, r2, lsl #0x4 - str r2, [r0, #0x30] - ldrh r2, [r1, #0x2e] - ldr r1, [r1, #0x28] - mul r2, r1, r2 - mov r1, r2, lsl #0x4 - str r1, [r0, #0x34] - str r12, [r0, #0x10] - bx lr - - arm_func_start FUN_020BF810 -FUN_020BF810: ; 0x020BF810 - stmdb sp!, {r4-r6,lr} - ldr r2, [r1, #0x18] - mov r3, #0x0 - str r2, [r0, #0x0] - ldr r2, [r1, #0x1c] - str r2, [r0, #0x14] - str r3, [r0, #0x4] - ldrh r5, [r1, #0x2c] - ldr r12, [r1, #0x24] - ldrh r2, [r1, #0x2e] - mul lr, r12, r5 - rsb r12, r5, #0x0 - mov r12, r12, lsl #0xb - ldr r4, [r1, #0x18] - sub r12, r12, lr - smull lr, r12, r4, r12 - ldr r6, [r1, #0x28] - mov r4, lr, lsr #0x8 - orr r4, r4, r12, lsl #0x18 - add r4, r4, r5, lsl #0xf - str r4, [r0, #0x30] - mul r4, r6, r2 - rsb r5, r2, #0x0 - ldr r2, [r1, #0x1c] - add r4, r4, r5, lsl #0xb - smull lr, r12, r2, r4 - mov r2, lr, lsr #0x8 - ldrh r1, [r1, #0x2e] - orr r2, r2, r12, lsl #0x18 - add r1, r2, r1, lsl #0xf - str r1, [r0, #0x34] - str r3, [r0, #0x10] - ldmia sp!, {r4-r6,pc} - - arm_func_start FUN_020BF894 -FUN_020BF894: ; 0x020BF894 - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - mov r6, r0 - mov r4, r2, lsl #0xc - mov r7, r1, lsl #0xc - mov r0, r7 - mov r1, r4 - bl FX_DivAsync - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x0] - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x14] - bl FX_GetDivResult - ldrsh r2, [r5, #0x20] - mov r1, r7 - mul r0, r2, r0 - mov r2, r0, asr #0xc - mov r0, r4 - str r2, [r6, #0x4] - bl FX_DivAsync - ldrh r2, [r5, #0x2c] - ldrh r7, [r5, #0x2e] - ldr r1, [r5, #0x28] - ldr r0, [r5, #0x24] - rsb r4, r2, #0x0 - mul r3, r1, r7 - rsb r1, r7, #0x0 - add r1, r3, r1, lsl #0xb - ldrsh r3, [r5, #0x20] - mov r7, r4, lsl #0xb - mul r4, r0, r2 - sub r0, r7, r4 - ldrsh lr, [r5, #0x22] - smull r12, r4, r3, r1 - smull r7, r3, lr, r0 - subs r7, r7, r12 - sbc r3, r3, r4 - mov r4, r7, lsr #0x8 - orr r4, r4, r3, lsl #0x18 - add r2, r4, r2, lsl #0xf - str r2, [r6, #0x30] - ldrsh r2, [r5, #0x22] - ldrsh r3, [r5, #0x20] - ldrh r12, [r5, #0x2e] - smull r4, r1, r2, r1 - smlal r4, r1, r3, r0 - mov r0, r4, lsr #0x8 - orr r0, r0, r1, lsl #0x18 - add r0, r0, r12, lsl #0xf - str r0, [r6, #0x34] - bl FX_GetDivResult - ldrsh r1, [r5, #0x20] - rsb r1, r1, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r6, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BF988 -FUN_020BF988: ; 0x020BF988 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r1 - ldrh r2, [r9, #0x2c] - ldrh r1, [r9, #0x2e] - mov r10, r0 - mov r8, r2, lsl #0xc - mov r11, r1, lsl #0xc - mov r0, r11 - mov r1, r8 - bl FX_DivAsync - ldrsh r0, [r9, #0x22] - ldr r3, [r9, #0x18] - ldrsh r5, [r9, #0x20] - ldr r4, [r9, #0x1c] - smull r2, r1, r3, r0 - mov r7, r2, lsr #0xc - orr r7, r7, r1, lsl #0x14 - smull r2, r1, r3, r5 - mov r6, r2, lsr #0xc - orr r6, r6, r1, lsl #0x14 - smull r3, r2, r4, r0 - smull r1, r0, r4, r5 - mov r5, r3, lsr #0xc - orr r5, r5, r2, lsl #0x14 - mov r4, r1, lsr #0xc - orr r4, r4, r0, lsl #0x14 - str r7, [r10, #0x0] - str r5, [r10, #0x14] - bl FX_GetDivResult - mov r1, r11 - mul r0, r4, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x4] - mov r0, r8 - bl FX_DivAsync - ldrh r1, [r9, #0x2c] - ldrh r8, [r9, #0x2e] - ldr r2, [r9, #0x28] - rsb r0, r1, #0x0 - mul r3, r2, r8 - rsb r2, r8, #0x0 - add r8, r3, r2, lsl #0xb - mov r0, r0, lsl #0xb - smull r3, r2, r5, r8 - smull r8, r5, r6, r8 - ldr r11, [r9, #0x24] - mul r12, r11, r1 - sub r0, r0, r12 - smlal r3, r2, r4, r0 - smull r4, r0, r7, r0 - subs r4, r4, r8 - sbc r0, r0, r5 - mov r4, r4, lsr #0x8 - orr r4, r4, r0, lsl #0x18 - add r0, r4, r1, lsl #0xf - str r0, [r10, #0x30] - ldrh r1, [r9, #0x2e] - mov r0, r3, lsr #0x8 - orr r0, r0, r2, lsl #0x18 - add r0, r0, r1, lsl #0xf - str r0, [r10, #0x34] - bl FX_GetDivResult - rsb r1, r6, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020BFA9C -FUN_020BFA9C: ; 0x020BFA9C - stmdb sp!, {r4,lr} - sub sp, sp, #0x50 - mov r4, r0 - ldr r0, [r4, #0x0] - mov r3, #0x3 - ands r0, r0, #0x8 - ldrne r0, _020BFC1C ; =0x00101610 - mov r2, #0x2 - strne r0, [sp, #0x0] - ldreq r0, _020BFC20 ; =0x00101810 - mov r1, #0x1000 - streq r0, [sp, #0x0] - mov r0, #0x0 - str r3, [sp, #0x4] - str r2, [sp, #0x48] - str r1, [sp, #0x44] - str r0, [sp, #0x40] - str r0, [sp, #0x34] - str r0, [sp, #0x30] - str r0, [sp, #0x2c] - str r0, [sp, #0x28] - str r0, [sp, #0x24] - str r0, [sp, #0x20] - str r0, [sp, #0x14] - str r0, [sp, #0x10] - ldr r0, [r4, #0x0] - ands r0, r0, #0x1 - strne r1, [r4, #0x1c] - ldrne r0, [r4, #0x1c] - strne r0, [r4, #0x18] - ldr r0, [r4, #0x0] - ands r0, r0, #0x2 - movne r0, #0x1000 - strneh r0, [r4, #0x22] - movne r0, #0x0 - strneh r0, [r4, #0x20] - ldr r0, [r4, #0x0] - ands r0, r0, #0x4 - movne r0, #0x0 - strne r0, [r4, #0x28] - ldrne r0, [r4, #0x28] - strne r0, [r4, #0x24] - ldr r1, [r4, #0x0] - ldr r0, _020BFC24 ; =UNK_021067F0 - and r1, r1, #0x7 - ldr r2, [r0, r1, lsl #0x2] - add r0, sp, #0x8 - mov r1, r4 - blx r2 - ldr r3, [r4, #0x30] - cmp r3, #0x1000 - beq _020BFBB0 - ldr r0, [sp, #0x8] - ldr r1, [sp, #0xc] - smull r2, r0, r3, r0 - mov r2, r2, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x8] - ldr r2, [r4, #0x30] - ldr r0, [sp, #0x38] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0xc] - ldr r1, [r4, #0x30] - smull r2, r0, r1, r0 - mov r1, r2, lsr #0xc - orr r1, r1, r0, lsl #0x14 - str r1, [sp, #0x38] -_020BFBB0: - ldr r3, [r4, #0x34] - cmp r3, #0x1000 - beq _020BFC00 - ldr r0, [sp, #0x18] - ldr r1, [sp, #0x1c] - smull r2, r0, r3, r0 - mov r2, r2, lsr #0xc - orr r2, r2, r0, lsl #0x14 - str r2, [sp, #0x18] - ldr r2, [r4, #0x34] - ldr r0, [sp, #0x3c] - smull r3, r1, r2, r1 - mov r2, r3, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [sp, #0x1c] - ldr r1, [r4, #0x34] - smull r2, r0, r1, r0 - mov r1, r2, lsr #0xc - orr r1, r1, r0, lsl #0x14 - str r1, [sp, #0x3c] -_020BFC00: - add r1, sp, #0x0 - ldr r0, [sp, #0x0] - add r1, r1, #0x4 - mov r2, #0x12 - bl FUN_020BB1C0 - add sp, sp, #0x50 - ldmia sp!, {r4,pc} - .balign 4 -_020BFC1C: .word 0x00101610 -_020BFC20: .word 0x00101810 -_020BFC24: .word UNK_021067F0 - - arm_func_start FUN_020BFC28 -FUN_020BFC28: ; 0x020BFC28 - mov r2, #0x1000 - str r2, [r0, #0x0] - mov r1, #0x0 - str r1, [r0, #0x4] - str r1, [r0, #0x10] - str r2, [r0, #0x14] - str r1, [r0, #0x30] - str r1, [r0, #0x34] - bx lr - - arm_func_start FUN_020BFC4C -FUN_020BFC4C: ; 0x020BFC4C - ldr r2, [r1, #0x18] - mov r3, #0x0 - str r2, [r0, #0x0] - ldr r2, [r1, #0x1c] - str r2, [r0, #0x14] - str r3, [r0, #0x4] - str r3, [r0, #0x30] - ldrh r2, [r1, #0x2e] - ldr r1, [r1, #0x1c] - rsb r2, r2, #0x0 - sub r1, r1, #0x1000 - mul r1, r2, r1 - mov r1, r1, lsl #0x4 - str r1, [r0, #0x34] - str r3, [r0, #0x10] - bx lr - - arm_func_start FUN_020BFC8C -FUN_020BFC8C: ; 0x020BFC8C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - mov r6, r0 - mov r4, r2, lsl #0xc - mov r7, r1, lsl #0xc - mov r0, r7 - mov r1, r4 - bl FX_DivAsync - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x0] - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x14] - bl FX_GetDivResult - ldrsh r2, [r5, #0x20] - mov r1, r7 - mul r0, r2, r0 - mov r2, r0, asr #0xc - mov r0, r4 - str r2, [r6, #0x4] - bl FX_DivAsync - ldrh r1, [r5, #0x2c] - ldrsh r0, [r5, #0x20] - mul r0, r1, r0 - mov r0, r0, lsl #0x4 - str r0, [r6, #0x30] - ldrh r1, [r5, #0x2e] - ldrsh r0, [r5, #0x22] - rsb r1, r1, #0x0 - sub r0, r0, #0x1000 - mul r0, r1, r0 - mov r0, r0, lsl #0x4 - str r0, [r6, #0x34] - bl FX_GetDivResult - ldrsh r1, [r5, #0x20] - rsb r1, r1, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r6, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BFD38 -FUN_020BFD38: ; 0x020BFD38 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r9, r1 - ldrh r2, [r9, #0x2c] - ldrh r1, [r9, #0x2e] - mov r10, r0 - mov r8, r2, lsl #0xc - mov r11, r1, lsl #0xc - mov r0, r11 - mov r1, r8 - bl FX_DivAsync - ldrsh r3, [r9, #0x22] - ldr r0, [r9, #0x18] - ldrsh r7, [r9, #0x20] - ldr r5, [r9, #0x1c] - smull r2, r1, r0, r3 - mov r2, r2, lsr #0xc - orr r2, r2, r1, lsl #0x14 - str r2, [r10, #0x0] - smull r2, r1, r5, r3 - mov r4, r2, lsr #0xc - orr r4, r4, r1, lsl #0x14 - smull r2, r1, r0, r7 - mov r6, r2, lsr #0xc - orr r6, r6, r1, lsl #0x14 - str r4, [r10, #0x14] - bl FX_GetDivResult - smull r2, r1, r5, r7 - mov r2, r2, lsr #0xc - orr r2, r2, r1, lsl #0x14 - mul r0, r2, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x4] - mov r0, r8 - mov r1, r11 - bl FX_DivAsync - sub r0, r4, #0x1000 - ldrh r1, [r9, #0x2c] - mul r2, r1, r6 - mov r1, r2, lsl #0x4 - str r1, [r10, #0x30] - ldrh r1, [r9, #0x2e] - rsb r1, r1, #0x0 - mul r0, r1, r0 - mov r0, r0, lsl #0x4 - str r0, [r10, #0x34] - bl FX_GetDivResult - rsb r1, r6, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r10, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} - - arm_func_start FUN_020BFE0C -FUN_020BFE0C: ; 0x020BFE0C - stmdb sp!, {lr} - sub sp, sp, #0x4 - mov r2, #0x1000 - str r2, [r0, #0x0] - str r2, [r0, #0x14] - mov lr, #0x0 - str lr, [r0, #0x4] - ldr r2, [r1, #0x24] - ldrh r3, [r1, #0x2c] - rsb r2, r2, #0x0 - ldr r12, [r1, #0x28] - mul r2, r3, r2 - mov r2, r2, lsl #0x4 - str r2, [r0, #0x30] - ldrh r1, [r1, #0x2e] - rsb r2, r12, #0x0 - rsb r1, r1, #0x0 - mul r2, r1, r2 - mov r1, r2, lsl #0x4 - str r1, [r0, #0x34] - str lr, [r0, #0x10] - add sp, sp, #0x4 - ldmia sp!, {pc} - - arm_func_start FUN_020BFE68 -FUN_020BFE68: ; 0x020BFE68 - stmdb sp!, {r4,lr} - ldr r3, [r1, #0x18] - mov r2, #0x0 - str r3, [r0, #0x0] - ldr r3, [r1, #0x1c] - str r3, [r0, #0x14] - str r2, [r0, #0x4] - ldr r12, [r1, #0x24] - ldr r3, [r1, #0x18] - ldr r4, [r1, #0x28] - smull lr, r3, r12, r3 - mov r12, lr, lsr #0xc - orr r12, r12, r3, lsl #0x14 - ldrh lr, [r1, #0x2c] - rsb r3, r12, #0x0 - ldr r12, [r1, #0x1c] - rsb r4, r4, #0x0 - mul r3, lr, r3 - smull lr, r12, r4, r12 - mov r3, r3, lsl #0x4 - str r3, [r0, #0x30] - mov r4, lr, lsr #0xc - ldrh r3, [r1, #0x2e] - ldr r1, [r1, #0x1c] - orr r4, r4, r12, lsl #0x14 - add r1, r1, r4 - rsb r3, r3, #0x0 - sub r1, r1, #0x1000 - mul r1, r3, r1 - mov r1, r1, lsl #0x4 - str r1, [r0, #0x34] - str r2, [r0, #0x10] - ldmia sp!, {r4,pc} - - arm_func_start FUN_020BFEEC -FUN_020BFEEC: ; 0x020BFEEC - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x4 - mov r5, r1 - ldrh r2, [r5, #0x2c] - ldrh r1, [r5, #0x2e] - mov r6, r0 - mov r4, r2, lsl #0xc - mov r7, r1, lsl #0xc - mov r0, r7 - mov r1, r4 - bl FX_DivAsync - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x0] - ldrsh r0, [r5, #0x22] - str r0, [r6, #0x14] - bl FX_GetDivResult - ldrsh r2, [r5, #0x20] - mov r1, r7 - mul r0, r2, r0 - mov r2, r0, asr #0xc - mov r0, r4 - str r2, [r6, #0x4] - bl FX_DivAsync - ldrsh lr, [r5, #0x20] - ldr r4, [r5, #0x28] - ldrsh r0, [r5, #0x22] - ldr r12, [r5, #0x24] - smull r3, r2, r4, lr - smlal r3, r2, r12, r0 - smull r1, r0, r4, r0 - mov r3, r3, lsr #0xc - orr r3, r3, r2, lsl #0x14 - sub r4, lr, r3 - smull r3, r2, r12, lr - subs r1, r3, r1 - sbc r0, r2, r0 - ldrh r2, [r5, #0x2c] - mov r1, r1, lsr #0xc - orr r1, r1, r0, lsl #0x14 - mul r0, r2, r4 - mov r0, r0, lsl #0x4 - str r0, [r6, #0x30] - ldrsh r0, [r5, #0x22] - ldrh r2, [r5, #0x2e] - add r0, r0, r1 - rsb r1, r2, #0x0 - sub r0, r0, #0x1000 - mul r0, r1, r0 - mov r0, r0, lsl #0x4 - str r0, [r6, #0x34] - bl FX_GetDivResult - ldrsh r1, [r5, #0x20] - rsb r1, r1, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r6, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r7,pc} - - arm_func_start FUN_020BFFD4 -FUN_020BFFD4: ; 0x020BFFD4 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x4 - mov r6, r1 - ldrh r2, [r6, #0x2c] - ldrh r1, [r6, #0x2e] - mov r7, r0 - mov r10, r2, lsl #0xc - mov r11, r1, lsl #0xc - mov r0, r11 - mov r1, r10 - bl FX_DivAsync - ldrsh r3, [r6, #0x22] - ldr r0, [r6, #0x18] - ldrsh r9, [r6, #0x20] - smull r2, r1, r0, r3 - mov r2, r2, lsr #0xc - ldr r8, [r6, #0x1c] - orr r2, r2, r1, lsl #0x14 - str r2, [r7, #0x0] - smull r2, r1, r8, r3 - mov r4, r2, lsr #0xc - orr r4, r4, r1, lsl #0x14 - smull r2, r1, r0, r9 - mov r5, r2, lsr #0xc - orr r5, r5, r1, lsl #0x14 - str r4, [r7, #0x14] - bl FX_GetDivResult - smull r2, r1, r8, r9 - mov r2, r2, lsr #0xc - orr r2, r2, r1, lsl #0x14 - mul r0, r2, r0 - mov r0, r0, asr #0xc - str r0, [r7, #0x4] - mov r0, r10 - mov r1, r11 - bl FX_DivAsync - ldr lr, [r6, #0x1c] - ldrsh r2, [r6, #0x20] - ldr r8, [r6, #0x24] - ldr r0, [r6, #0x28] - smull r10, r9, r8, r2 - ldrh r1, [r6, #0x2c] - smull r3, r2, r0, r2 - ldrsh r12, [r6, #0x22] - str r1, [sp, #0x0] - mov r11, lr, asr #0x1f - smlal r3, r2, r8, r12 - smull r8, r12, r0, r12 - subs r8, r10, r8 - sbc r0, r9, r12 - mov r9, r8, lsr #0xc - mov r12, r3, lsr #0xc - orr r9, r9, r0, lsl #0x14 - mov r3, r2, asr #0xc - orr r12, r12, r2, lsl #0x14 - umull r10, r2, r9, lr - mla r2, r9, r11, r2 - mov r8, r0, asr #0xc - mla r2, r8, lr, r2 - ldr r1, [r6, #0x18] - mov r8, r10, lsr #0xc - orr r8, r8, r2, lsl #0x14 - add r2, r4, r8 - mov r0, r1, asr #0x1f - umull r8, r4, r12, r1 - mla r4, r12, r0, r4 - mla r4, r3, r1, r4 - mov r0, r8, lsr #0xc - orr r0, r0, r4, lsl #0x14 - sub r1, r5, r0 - ldr r0, [sp, #0x0] - sub r2, r2, #0x1000 - mul r1, r0, r1 - mov r0, r1, lsl #0x4 - str r0, [r7, #0x30] - ldrh r0, [r6, #0x2e] - rsb r0, r0, #0x0 - mul r1, r0, r2 - mov r0, r1, lsl #0x4 - str r0, [r7, #0x34] - bl FX_GetDivResult - rsb r1, r5, #0x0 - mul r0, r1, r0 - mov r0, r0, asr #0xc - str r0, [r7, #0x10] - add sp, sp, #0x4 - ldmia sp!, {r4-r11,pc} diff --git a/arm9/global.inc b/arm9/global.inc index b3f4dcbb..f389ad93 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5572,229 +5572,229 @@ .extern VCT_Main .extern VCT_Cleanup .extern VCT_Init -.extern FUN_020ADA84 -.extern FUN_020ADA98 -.extern FUN_020ADAB0 -.extern FUN_020ADB18 -.extern FUN_020ADBE8 -.extern FUN_020ADC74 -.extern FUN_020ADDC0 -.extern FUN_020ADDC8 -.extern FUN_020ADDF0 -.extern FUN_020ADE2C -.extern FUN_020AE554 -.extern FUN_020AE5B0 -.extern FUN_020AE600 -.extern FUN_020AE638 -.extern FUN_020AE684 -.extern FUN_020AE82C -.extern FUN_020AE84C -.extern FUN_020AE868 -.extern FUN_020AE8CC -.extern FUN_020AE918 -.extern FUN_020AEAF4 -.extern FUN_020AEB70 -.extern FUN_020AEC60 -.extern FUN_020AEC7C -.extern FUN_020AEC98 -.extern FUN_020AEDF4 -.extern FUN_020AEE40 -.extern FUN_020AEEB8 -.extern FUN_020AEF1C -.extern FUN_020AF2E0 -.extern FUN_020AF2F4 -.extern FUN_020AF30C -.extern FUN_020AF6A4 -.extern FUN_020AF894 -.extern FUN_020AF9C4 -.extern FUN_020AFA28 -.extern FUN_020AFA30 -.extern FUN_020AFA80 -.extern FUN_020AFBA8 -.extern FUN_020AFBFC -.extern FUN_020AFC04 -.extern FUN_020AFEB8 -.extern FUN_020AFFD8 -.extern FUN_020B0030 -.extern FUN_020B0088 -.extern FUN_020B00F0 -.extern FUN_020B0138 -.extern FUN_020B0180 -.extern FUN_020B0250 -.extern FUN_020B02C8 -.extern FUN_020B0448 -.extern FUN_020B04FC -.extern FUN_020B0830 -.extern FUN_020B0870 -.extern FUN_020B0888 -.extern FUN_020B0BB0 -.extern FUN_020B0C7C -.extern FUN_020B0D58 -.extern FUN_020B0E34 -.extern FUN_020B0FC0 -.extern FUN_020B10E8 -.extern FUN_020B1240 -.extern FUN_020B1340 -.extern FUN_020B1528 -.extern FUN_020B1768 -.extern FUN_020B19C4 -.extern FUN_020B19DC -.extern FUN_020B1A14 -.extern FUN_020B1A1C -.extern FUN_020B1A24 -.extern FUN_020B1AF8 -.extern FUN_020B1EA4 -.extern FUN_020B1EC4 -.extern FUN_020B1EE4 -.extern FUN_020B1EFC -.extern FUN_020B1F80 -.extern FUN_020B20C8 -.extern FUN_020B2194 -.extern FUN_020B224C -.extern FUN_020B23D8 -.extern FUN_020B242C -.extern FUN_020B2794 -.extern FUN_020B28B4 -.extern FUN_020B2A08 -.extern FUN_020B2B08 -.extern FUN_020B2B58 -.extern FUN_020B2D9C -.extern FUN_020B317C -.extern FUN_020B31F0 -.extern FUN_020B326C -.extern FUN_020B3334 -.extern FUN_020B3390 -.extern FUN_020B33A0 -.extern FUN_020B4358 -.extern FUN_020B43A4 -.extern FUN_020B442C -.extern FUN_020B4568 -.extern FUN_020B4F38 -.extern FUN_020B502C -.extern FUN_020B5C88 -.extern FUN_020B5CE4 -.extern FUN_020B5D3C -.extern FUN_020B5E50 -.extern FUN_020B6180 -.extern FUN_020B6240 -.extern FUN_020B62F8 -.extern FUN_020B6388 -.extern FUN_020B63CC -.extern FUN_020B7168 -.extern FUN_020B7218 -.extern FUN_020B772C -.extern FUN_020B7790 -.extern FUN_020B7C58 -.extern FUN_020B7C78 -.extern FUN_020B7CDC -.extern FUN_020B7CE4 -.extern FUN_020B7CF0 -.extern FUN_020B7D28 -.extern FUN_020B7DFC -.extern FUN_020B7E10 -.extern FUN_020B7E1C -.extern FUN_020B7E28 -.extern FUN_020B7EFC -.extern FUN_020B80B4 -.extern FUN_020B8110 -.extern FUN_020B8344 -.extern FUN_020B8390 -.extern FUN_020B83BC -.extern FUN_020B83E0 -.extern FUN_020B8404 -.extern FUN_020B8418 -.extern FUN_020B844C -.extern FUN_020B8474 -.extern FUN_020B849C -.extern FUN_020BAC98 -.extern FUN_020BAFB8 -.extern FUN_020BB1C0 -.extern FUN_020BB394 -.extern FUN_020BB408 -.extern FUN_020BB59C -.extern FUN_020BB7F4 -.extern FUN_020BB8D0 -.extern FUN_020BB8F4 -.extern FUN_020BB934 -.extern FUN_020BB974 -.extern FUN_020BB9B4 -.extern FUN_020BB9F4 -.extern FUN_020BBA34 -.extern FUN_020BBA74 -.extern FUN_020BBAB4 -.extern FUN_020BBAF4 -.extern FUN_020BBB34 -.extern FUN_020BBB74 -.extern FUN_020BBBB4 -.extern FUN_020BBBF4 -.extern FUN_020BBC34 -.extern FUN_020BC02C -.extern FUN_020BC094 -.extern FUN_020BC0FC -.extern FUN_020BC13C -.extern FUN_020BC2A0 -.extern FUN_020BC4C8 -.extern FUN_020C0174 -.extern FUN_020C01A0 -.extern SDAT_Init -.extern FUN_020C03B8 -.extern FUN_020C041C -.extern FUN_020C044C -.extern FUN_020C04DC -.extern FUN_020C0510 -.extern FUN_020C054C -.extern FUN_020C0670 -.extern FUN_020C0688 -.extern FUN_020C0DD4 -.extern FUN_020C0E14 -.extern FUN_020C0E7C -.extern FUN_020C0EA4 -.extern FUN_020C0EF4 -.extern FUN_020C0F30 -.extern FUN_020C0F40 -.extern FUN_020C0F50 -.extern FUN_020C0F68 -.extern FUN_020C0F80 -.extern FUN_020C0F8C -.extern FUN_020C0F9C -.extern FUN_020C0FDC -.extern FUN_020C1040 -.extern FUN_020C10A4 -.extern FUN_020C1148 -.extern FUN_020C1180 -.extern FUN_020C13C4 -.extern FUN_020C1430 -.extern FUN_020C1458 -.extern FUN_020C14AC -.extern FUN_020C1674 -.extern FUN_020C169C -.extern FUN_020C16FC -.extern FUN_020C1E58 -.extern FUN_020C1E68 -.extern FUN_020C1EA4 -.extern FUN_020C1F54 -.extern FUN_020C1FA4 -.extern FUN_020C1FF0 -.extern FUN_020C20DC -.extern FUN_020C2104 -.extern FUN_020C217C -.extern FUN_020C226C -.extern FUN_020C22D0 -.extern FUN_020C23FC -.extern FUN_020C2444 -.extern SDAT_Open -.extern FUN_020C2828 -.extern FUN_020C290C -.extern FUN_020C2A94 -.extern FUN_020C35E0 -.extern FUN_020C360C -.extern FUN_020C3640 -.extern FUN_020C3674 -.extern FUN_020C36A8 -.extern FUN_020C3888 -.extern FUN_020C3910 -.extern FUN_020C3980 -.extern FUN_020C39CC +.extern NNS_FndGetPrevListObject +.extern NNS_FndGetNextListObject +.extern NNS_FndRemoveListObject +.extern NNS_FndInsertListObject +.extern NNS_FndAppendListObject +.extern NNS_FndInitList +.extern NNS_FndGetSizeForMBlockExpHeap +.extern NNS_FndGetTotalFreeSizeForExpHeap +.extern NNS_FndFreeToExpHeap +.extern NNS_FndResizeForMBlockExpHeap +.extern NNS_FndFreeByStateToFrmHeap +.extern NNS_FndRecordStateForFrmHeap +.extern NNS_FndFreeToFrmHeap +.extern NNS_FndAllocFromFrmHeapEx +.extern NNS_FndCreateFrmHeapEx +.extern NNS_FndInitAllocatorForExpHeap +.extern NNS_FndFreeToAllocator +.extern NNS_FndAllocFromAllocator +.extern NNS_GfdSetFrmTexVramState +.extern NNS_GfdGetFrmTexVramState +.extern NNS_GfdResetFrmTexVramState +.extern NNS_GfdInitFrmTexVramManager +.extern NNS_GfdResetFrmPlttVramState +.extern NNS_GfdSetFrmPlttVramState +.extern NNS_GfdGetFrmPlttVramState +.extern NNS_GfdInitFrmPlttVramManager +.extern NNS_GfdRegisterNewVramTransferTask +.extern NNS_GfdDoVramTransfer +.extern NNS_GfdInitVramTransferManager +.extern IsVramTransferTaskQueueEmpty_ +.extern IsVramTransferTaskQueueFull_ +.extern GetNextIndex_ +.extern NNS_GfdResetLnkTexVramState +.extern NNS_GfdFreeLnkTexVram +.extern NNS_GfdInitLnkTexVramManager +.extern NNS_GfdGetLnkTexVramManagerWorkSize +.extern NNS_GfdResetLnkPlttVramState +.extern NNS_GfdFreeLnkPlttVram +.extern NNS_GfdInitLnkPlttVramManager +.extern NNS_GfdGetLnkPlttVramManagerWorkSize +.extern NNS_G2dGetAnimSequenceByIdx +.extern NNS_G2dGetUnpackedCellBank +.extern NNS_G2dGetUnpackedMultiCellBank +.extern NNS_G2dGetUnpackedBGCharacterData +.extern NNS_G2dGetUnpackedCharacterData +.extern NNS_G2dGetUnpackedPaletteCompressInfo +.extern NNS_G2dGetUnpackedPaletteData +.extern NNS_G2dGetUnpackedScreenData +.extern NNS_G2dDrawSpriteFast +.extern NNS_G2dSetupSoftwareSpriteCamera +.extern NNS_G2dResetAnimCtrlState +.extern NNS_G2dGetAnimCtrlCurrentFrame +.extern NNS_G2dGetOamManagerOamCapacity +.extern NNS_G2dApplyAndResetOamManagerBuffer +.extern NNS_G2dResetOamManagerBuffer +.extern NNS_G2dEntryOamManagerAffine +.extern NNS_G2dEntryOamManagerOamWithAffineIdx +.extern NNS_G2dEntryOamManagerOam +.extern NNS_G2dGetNewOamManagerInstance +.extern NNS_G2dInitOamManagerModule +.extern NNS_G2dLoadPaletteEx +.extern NNS_G2dLoadPalette +.extern NNS_G2dLoadImageVramTransfer +.extern NNS_G2dLoadImage2DMapping +.extern NNS_G2dLoadImage1DMapping +.extern NNS_G2dGetImagePaletteLocation +.extern NNS_G2dInitImagePaletteProxy +.extern NNS_G2dGetImageLocation +.extern NNS_G2dSetImageLocation +.extern NNS_G2dInitImageProxy +.extern NNS_G2dMakeCellToOams +.extern NNS_G2dSetCellAnimationCurrentFrame +.extern NNS_G2dTickCellAnimation +.extern NNS_G2dSetCellAnimationSequence +.extern NNS_G2dInitCellAnimationVramTransfered +.extern NNS_G2dInitCellAnimation +.extern NNS_G2dInitMCAnimation +.extern NNS_G2dSetMCAnimationCurrentFrame +.extern NNS_G2dTickMCAnimation +.extern NNS_G2dGetMCBankNumNodesRequired +.extern NNS_G2dSetAnimSequenceToMCAnimation +.extern NNS_G2dRotZ +.extern NNS_G2dScale +.extern NNS_G2dTranslate +.extern NNS_G2dPopMtx +.extern NNS_G2dPushMtx +.extern NNS_G2dDrawMultiCellAnimation +.extern NNS_G2dDrawCellAnimation +.extern NNS_G2dEndRendering +.extern NNS_G2dBeginRendering +.extern NNS_G2dInitRenderSurface +.extern NNS_G2dAddRendererTargetSurface +.extern NNS_G2dInitRenderer +.extern NNS_G2dFreeCellTransferStateHandle +.extern NNS_G2dGetNewCellTransferStateHandle +.extern NNS_G2dUpdateCellTransferStateManager +.extern NNS_G2dInitCellTransferStateManager +.extern NNS_G2dSetRndCoreFlipMode +.extern NNS_G2dSetRndCoreAffineOverwriteMode +.extern NNS_G2dFontGetCharWidthsFromIndex +.extern NNS_G2dFontFindGlyphIndex +.extern NNS_G2dFontInitUTF16 +.extern NNS_G2dArrangeOBJ1D +.extern NNSi_G2dCalcRequiredOBJ +.extern NNS_G2dMapScrToCharText +.extern NNS_G2dCharCanvasInitForOBJ1D +.extern NNS_G2dCharCanvasInitForBG +.extern NNS_G2dCharCanvasDrawChar +.extern NNSi_G2dTextCanvasDrawTextRect +.extern NNSi_G2dTextCanvasDrawText +.extern NNS_G3dReleaseMdlSet +.extern NNS_G3dBindMdlSet +.extern NNS_G3dPlttReleasePlttKey +.extern NNS_G3dPlttLoad +.extern NNS_G3dPlttSetPlttKey +.extern NNS_G3dPlttGetRequiredSize +.extern NNS_G3dTexReleaseTexKey +.extern NNS_G3dTexLoad +.extern NNS_G3dTexSetTexKey +.extern NNS_G3dTex4x4GetRequiredSize +.extern NNS_G3dTexGetRequiredSize +.extern NNS_G3dRenderObjRemoveAnmObj +.extern NNS_G3dRenderObjAddAnmObj +.extern NNS_G3dRenderObjInit +.extern NNS_G3dAnmObjInit +.extern NNS_G3dGlbGetInvV +.extern NNS_G3dGlbPolygonAttr +.extern NNS_G3dGlbMaterialColorSpecEmi +.extern NNS_G3dGlbMaterialColorDiffAmb +.extern NNS_G3dGlbLightColor +.extern NNS_G3dGlbLightVector +.extern NNS_G3dGlbSetBaseScale +.extern NNS_G3dGlbSetBaseTrans +.extern NNS_G3dGlbFlushP +.extern NNS_G3dDraw +.extern NNS_G3dDraw1Mat1Shp +.extern NNS_G3dGeBufferOP_N +.extern NNS_G3dGeFlushBuffer +.extern NNS_G3dWorldPosToScrPos +.extern NNS_G3dResDefaultSetup +.extern NNS_G3dInit +.extern NNS_G3dAllocAnmObj +.extern NNS_G3dMdlSetMdlXLDepthUpdateAll +.extern NNS_G3dMdlSetMdlFarClipAll +.extern NNS_G3dMdlSetMdl1DotAll +.extern NNS_G3dMdlSetMdlDepthTestCondAll +.extern NNS_G3dMdlSetMdlFogEnableFlagAll +.extern NNS_G3dMdlSetMdlAlphaAll +.extern NNS_G3dMdlSetMdlPolygonIDAll +.extern NNS_G3dMdlSetMdlCullModeAll +.extern NNS_G3dMdlSetMdlPolygonModeAll +.extern NNS_G3dMdlSetMdlLightEnableFlagAll +.extern NNS_G3dMdlSetMdlEmiAll +.extern NNS_G3dMdlSetMdlSpecAll +.extern NNS_G3dMdlSetMdlAmbAll +.extern NNS_G3dMdlSetMdlDiffAll +.extern NNSi_G3dModifyPolygonAttrMask +.extern NNSi_G3dModifyMatFlag +.extern NNS_G3dGetTex +.extern NNS_G3dGetMdlSet +.extern NNS_G3dGetResDataByName +.extern NNS_G3dGetAnmByIdx +.extern NNS_SndSetMonoFlag +.extern NNS_SndMain +.extern NNS_SndInit +.extern NNS_SndWaveOutIsPlaying +.extern NNS_SndWaveOutSetPan +.extern NNS_SndWaveOutSetSpeed +.extern NNS_SndWaveOutSetVolume +.extern NNS_SndWaveOutStop +.extern NNS_SndWaveOutStart +.extern NNS_SndWaveOutFreeChannel +.extern NNS_SndWaveOutAllocChannel +.extern NNS_SndPlayerGetTick +.extern NNS_SndPlayerGetSeqNo +.extern NNS_SndPlayerSetTrackPan +.extern NNS_SndPlayerSetTrackPitch +.extern NNS_SndPlayerMoveVolume +.extern NNS_SndPlayerSetInitialVolume +.extern NNS_SndPlayerSetVolume +.extern NNS_SndPlayerCountPlayingSeqByPlayerNo +.extern NNS_SndHandleReleaseSeq +.extern NNS_SndHandleInit +.extern NNS_SndPlayerPause +.extern NNS_SndPlayerStopSeqAll +.extern NNS_SndPlayerStopSeqBySeqNo +.extern NNS_SndPlayerStopSeqByPlayerNo +.extern NNS_SndPlayerStopSeq +.extern NNS_SndPlayerSetAllocatableChannel +.extern NNS_SndPlayerSetPlayerVolume +.extern NNS_SndStrmSetVolume +.extern NNS_SndStrmStop +.extern NNS_SndStrmStart +.extern NNS_SndStrmSetup +.extern NNS_SndStrmFreeChannel +.extern NNS_SndStrmAllocChannel +.extern NNS_SndStrmInit +.extern NNS_SndCaptureIsActive +.extern NNS_SndCaptureStopEffect +.extern NNS_SndCaptureStartEffect +.extern NNS_SndCaptureStopReverb +.extern NNS_SndCaptureSetReverbVolume +.extern NNS_SndCaptureStartReverb +.extern NNS_SndArcGetFileAddress +.extern NNS_SndArcReadFile +.extern NNS_SndArcGetFileSize +.extern NNS_SndArcGetWaveArcInfo +.extern NNS_SndArcGetBankInfo +.extern NNS_SndArcGetSeqParam +.extern NNS_SndArcInitOnMemory +.extern NNS_SndArcInit +.extern NNS_SndHeapLoadState +.extern NNS_SndHeapSaveState +.extern NNS_SndHeapCreate +.extern NNS_SndArcLoadSeqEx +.extern NNS_SndArcLoadWaveArc +.extern NNS_SndArcLoadBank +.extern NNS_SndArcLoadSeq +.extern NNS_SndArcLoadGroup +.extern NNS_SndArcPlayerStartSeqArc +.extern NNS_SndArcPlayerStartSeqEx +.extern NNS_SndArcPlayerStartSeq +.extern NNS_SndArcPlayerSetup .extern FUN_020C5D8C .extern FUN_020C5E04 .extern FUN_020C6034 @@ -8191,8 +8191,8 @@ .extern UNK_020FB764 .extern UNK_020FD144 .extern UNK_020FD6D4 -.extern UNK_021064B8 -.extern UNK_021064C0 +.extern NNS_GfdDefaultFuncAllocTexVram +.extern NNS_GfdDefaultFuncAllocPlttVram .extern gMain .extern UNK_021C8ECC .extern UNK_021C8ED0 @@ -8236,14 +8236,10 @@ .extern Unk_02106A04 .extern UNK_020FF368 .extern UNK_020FF3D4 -.extern UNK_020FFA38 +.extern FX_SinCosTable_ .extern UNK_02105BB8 -.extern UNK_021064BC -.extern UNK_021064C4 -.extern UNK_021CED20 -.extern UNK_021CED98 -.extern UNK_021CEDD4 -.extern UNK_021CEF70 +.extern NNS_GfdDefaultFuncFreeTexVram +.extern NNS_GfdDefaultFuncFreePlttVram .extern UnloadOverlayByID .extern VEC_Add .extern VEC_CrossProduct @@ -8465,16 +8461,16 @@ .extern sys_exit .extern sys_readc .extern sys_writec -.extern tempName_NNS_FndAllocFromExpHeapEx -.extern tempName_NNS_FndCreateExpHeapEx +.extern NNS_FndAllocFromExpHeapEx +.extern NNS_FndCreateExpHeapEx .extern DWC_ClearDirtyFlag .extern DWC_CreateUserData -.extern thunk_FUN_020adc8c -.extern thunk_FUN_020adc8c_2 -.extern thunk_FUN_020ae84c -.extern thunk_FUN_020afda0 -.extern thunk_FUN_020afda0_2 -.extern thunk_FUN_020b5040 +.extern NNS_FndDestroyExpHeap +.extern NNS_FndDestroyFrmHeap +.extern NNS_G3dFreeAnmObj +.extern NNS_G2dGetUnpackedMCAnimBank +.extern NNS_G2dGetUnpackedAnimBank +.extern NNS_G2dSetRendererImageProxy .extern vsnprintf .extern vsscanf .extern vswprintf @@ -8499,8 +8495,8 @@ .extern DWCi_BACKUPlWriteAll .extern DWCi_BM_SetWiFiInfo .extern DWC_Auth_CheckWiFiIDNeedCreate -.extern UNK_021064B8 -.extern UNK_021064C0 +.extern NNS_GfdDefaultFuncAllocTexVram +.extern NNS_GfdDefaultFuncAllocPlttVram .extern MOD18_0224CA58 .extern MOD18_0223DFB4 .extern MOD18_02245FA0 @@ -8520,3 +8516,152 @@ .extern FUN_020254A0 .extern FUN_020254B4 .extern FUN_02041464 +.extern NNS_G2dGetCellDataByIdx +.extern NNS_G2dBindAnimCtrl +.extern NNS_G2dInitAnimCtrl +.extern NNS_G2dSetAnimCtrlCurrentFrame +.extern NNS_G2dTickAnimCtrl +.extern NNS_G2dGetAnimCtrlCurrentElement +.extern NNSi_G2dSrtcInitControl +.extern NNSi_G2dSrtcSetSRTScale +.extern NNSi_G2dSrtcSetSRTRotZ +.extern NNSi_G2dSrtcSetTrans +.extern NNS_G2dSetCellTransferStateRequested +.extern NNSi_G2dInitCellTransferState +.extern NNSi_objSizeHTbl +.extern NNSi_objSizeWTbl +.extern NNSi_G2dGetVramLocation +.extern NNSi_G2dSetVramLocation +.extern NNSi_G2dInitializeVRamLocation +.extern NNSi_G2dBitReaderRead +.extern NNSi_G2dGetUnpackedFont +.extern NNSi_G2dSplitCharUTF16 +.extern NNS_G2dGetMultiCellDataByIdx +.extern NNSi_G2dIsAnimCtrlLoopAnim +.extern NNSi_G2dInitializeNode +.extern NNS_G2dFindBinaryBlock +.extern NNSi_G2dUnpackUserExCellAttrBank +.extern GXi_DmaId +.extern NNS_G2dGetPaletteTableValue +.extern NNSi_G2dMtxConcat32 +.extern NNSi_G2dGetOamSoftEmuAutoZOffsetStep +.extern NNSi_G2dSetOamSoftEmuAutoZOffsetStep +.extern NNSi_G2dResetOamSoftEmuAutoZOffset +.extern NNSi_G2dSetOamSoftEmuAutoZOffsetFlag +.extern NNS_G2dRndCoreDrawCellVramTransfer +.extern NNS_G2dRndCoreDrawCell +.extern NNS_G2dRndCoreEndRendering +.extern NNS_G2dRndCoreBeginRendering +.extern NNS_G2dIsRndCoreFlipV +.extern NNS_G2dIsRndCoreFlipH +.extern NNS_G2dSetRndCoreSurface +.extern NNS_G2dSetRndCore3DSoftSpriteZvalue +.extern NNS_G2dSetRndCoreCurrentMtx2D +.extern NNS_G2dSetRndCoreCurrentMtx3D +.extern NNS_G2dSetRndCoreOamRegisterFunc +.extern NNS_G2dSetRndCoreImageProxy +.extern NNS_G2dInitRndCore +.extern NNS_G2dIsImagePaletteReadyToUse +.extern NNS_G2dIsImageReadyToUse +.extern NNSi_G2dGetCellTransferState +.extern NNS_G2dDrawOneOam3DDirectWithPosFast +.extern NNSi_G2dFontGetTextRect +.extern NNSi_G2dFontGetTextHeight +.extern NNSi_G2dFontGetStringWidth +.extern NNS_G3dGeSendDL +.extern NNS_G3dSendTexSRT_FuncArray +.extern NNSi_G3dAnmCalcNsBca +.extern NNSi_G3dAnmObjInitNsBca +.extern NNSi_G3dAnmCalcNsBma +.extern NNSi_G3dAnmObjInitNsBma +.extern NNSi_G3dAnmCalcNsBta +.extern NNSi_G3dAnmObjInitNsBta +.extern NNSi_G3dAnmCalcNsBtp +.extern NNSi_G3dAnmObjInitNsBtp +.extern NNSi_G3dAnmCalcNsBva +.extern NNSi_G3dAnmObjInitNsBva +.extern NNSi_G3dGetJointScaleBasic +.extern NNSi_G3dSendJointSRTBasic +.extern NNSi_G3dSendTexSRTMaya +.extern NNSi_G3dGetJointScaleMaya +.extern NNSi_G3dSendJointSRTMaya +.extern NNSi_G3dSendTexSRTSi3d +.extern NNSi_G3dGetJointScaleSi3d +.extern NNSi_G3dSendJointSRTSi3d +.extern NNSi_G3dSendTexSRT3dsMax +.extern NNSi_G3dSendTexSRTXsi +.extern NNS_G3dAnmFmtNum +.extern NNS_G3dFuncBlendVisDefault +.extern NNS_G3dFuncBlendJntDefault +.extern NNS_G3dFuncBlendMatDefault +.extern NNS_G3dAnmObjInitFuncArray +.extern NNS_G3dRS +.extern NNS_G3dAnmObjCalcSizeRequired +.extern NNS_G3dFuncAnmJntNsBcaDefault +.extern NNS_G3dGetResDictIdxByName +.extern NNS_G3dFuncAnmMatNsBmaDefault +.extern NNS_G3dFuncAnmMatNsBtaDefault +.extern NNSi_G3dGetTexPatAnmFV +.extern NNSi_G3dGetTexPatAnmPlttNameByIdx +.extern NNSi_G3dGetTexPatAnmTexNameByIdx +.extern NNS_G3dFuncAnmMatNsBtpDefault +.extern NNS_G3dFuncAnmVisNsBvaDefault +.extern NNS_G3dGlbGetInvWV +.extern NNS_G3dGlbGetWV +.extern NNS_G3dGetCurrentMtx +.extern NNS_G3dSendJointSRT_FuncArray +.extern NNS_G3dGetJointScale_FuncArray +.extern NNS_G3dGlb +.extern NNS_G3dGlbGetViewPort +.extern NNS_G3dGlbInit +.extern NNSi_GfdFreeLnkVram +.extern NNSi_GfdAllocLnkVramAligned +.extern NNSi_GfdAddNewFreeBlock +.extern NNSi_GfdInitLnkVramBlockPool +.extern NNSi_GfdInitLnkVramMan +.extern NNSi_GfdAllocLnkVram +.extern NNS_SndFreeAlarm +.extern NNS_SndAllocAlarm +.extern NNS_SndUnlockCapture +.extern NNS_SndLockCapture +.extern NNS_SndUnlockChannel +.extern NNS_SndLockChannel +.extern NNSi_SndFaderIsFinished +.extern NNSi_SndFaderUpdate +.extern NNSi_SndFaderGet +.extern NNSi_SndFaderSet +.extern NNS_G3dRSOnGlb +.extern NNSi_SndFaderInit +.extern SingleWaveDisposeCallback +.extern NNSi_SndInitResourceMgr +.extern NNSi_SndPlayerMain +.extern NNSi_SndPlayerInit +.extern NNSi_SndCaptureEndSleep +.extern NNSi_SndCaptureBeginSleep +.extern NNSi_SndCaptureMain +.extern NNSi_SndCaptureInit +.extern NNSi_SndArcStrmMain +.extern NNS_SndHeapClear +.extern NNS_SndHeapDestroy +.extern NNS_SndHeapAlloc +.extern SNDi_DecibelTable +.extern NNS_SndArcSetFileAddress +.extern NNS_SndArcGetGroupInfo +.extern NNS_SndArcGetSeqArcInfo +.extern NNS_SndArcGetSeqInfo +.extern NNS_SndArcGetCurrent +.extern NNS_SndArcSetCurrent +.extern LoadSingleWaves +.extern NNSi_SndPlayerAllocHeap +.extern NNSi_SndPlayerStartSeq +.extern NNSi_SndPlayerAllocSeqPlayer +.extern NNS_SndPlayerSetSeqArcNo +.extern NNS_SndPlayerSetSeqNo +.extern NNS_SndPlayerSetChannelPriority +.extern NNS_SndPlayerCreateHeap +.extern NNS_SndPlayerSetPlayableSeqCount +.extern NNS_SndArcGetPlayerInfo +.extern NNSi_SndArcLoadBank +.extern NNSi_SndArcLoadSeq +.extern NNSi_SndSeqArcGetSeqInfo +.extern NNSi_SndPlayerFreeSeqPlayer diff --git a/arm9/lib/include/NNS_SND_arc.h b/arm9/lib/include/NNS_SND_arc.h new file mode 100644 index 00000000..656c8728 --- /dev/null +++ b/arm9/lib/include/NNS_SND_arc.h @@ -0,0 +1,38 @@ +#ifndef GUARD_NNS_SND_ARC_H +#define GUARD_NNS_SND_ARC_H + +#include "SND_main.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, int); +void NNS_SndHandleReleaseSeq(void); + +#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 new file mode 100644 index 00000000..851c08ab --- /dev/null +++ b/arm9/lib/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/include/NNS_SND_heap.h b/arm9/lib/include/NNS_SND_heap.h new file mode 100644 index 00000000..9dc06a24 --- /dev/null +++ b/arm9/lib/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 *, u32);
+int NNS_SndHeapSaveState(NNSSndHeapHandle *);
+void NNS_SndHeapLoadState(NNSSndHeapHandle *, int);
+
+#endif //GUARD_NNS_SND_HEAP_H
diff --git a/arm9/lib/src/FX_sincos.c b/arm9/lib/src/FX_sincos.c new file mode 100644 index 00000000..89c8fc78 --- /dev/null +++ b/arm9/lib/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/modules/04/asm/thumb_04.s b/arm9/modules/04/asm/thumb_04.s index 12374ec5..db78d4fc 100644 --- a/arm9/modules/04/asm/thumb_04.s +++ b/arm9/modules/04/asm/thumb_04.s @@ -61,7 +61,7 @@ _021D74F2: bic r0, r1 mov r1, #0x2b lsl r1, r1, #0xc - bl tempName_NNS_FndCreateExpHeapEx + bl NNS_FndCreateExpHeapEx ldr r1, _021D7644 ; =UNK04_0220FBC0 ldr r3, _021D7654 ; =0x00001F08 ldr r2, [r1] @@ -195,7 +195,7 @@ MOD04_021D7660: ; 0x021D7660 beq _021D7698 ldr r0, _021D76A4 ; =0x00001F08 ldr r0, [r1, r0] - bl thunk_FUN_020adc8c + bl NNS_FndDestroyExpHeap ldr r0, _021D76A0 ; =UNK04_0220FBC0 ldr r1, _021D76A8 ; =0x00001F54 ldr r2, [r0] @@ -1130,7 +1130,7 @@ MOD04_021D7DA8: ; 0x021D7DA8 ldr r0, _021D7DE8 ; =0x00001F08 ldr r0, [r1, r0] add r1, r5, #0 - bl tempName_NNS_FndAllocFromExpHeapEx + bl NNS_FndAllocFromExpHeapEx add r5, r0, #0 bne _021D7DD8 mov r0, #1 @@ -1160,7 +1160,7 @@ MOD04_021D7DEC: ; 0x021D7DEC ldr r0, _021D7E14 ; =0x00001F08 ldr r0, [r1, r0] add r1, r5, #0 - bl FUN_020ADDF0 + bl NNS_FndFreeToExpHeap add r0, r4, #0 bl OS_RestoreInterrupts _021D7E0C: @@ -2347,12 +2347,12 @@ _021D86CE: str r1, [r2, r0] mov r0, #1 bl FUN_020AA770 - bl SDAT_Init + bl NNS_SndInit ldr r0, _021D8718 ; =UNK04_0220FBC8 ldr r1, [r0, #4] ldr r0, _021D8728 ; =0x00003504 add r0, r1, r0 - bl FUN_020C16FC + bl NNS_SndStrmInit ldr r1, _021D8718 ; =UNK04_0220FBC8 mov r0, #0 ldr r2, [r1, #4] @@ -2887,13 +2887,13 @@ _021D8ACA: ldr r0, [r5, #4] add r2, sp, #0x10 add r0, r0, r3 - bl FUN_020C169C + bl NNS_SndStrmAllocChannel add r0, r5, #0 ldr r1, [r0, #4] ldr r0, _021D8BDC ; =0x00003504 add r0, r1, r0 mov r1, #0 - bl FUN_020C13C4 + bl NNS_SndStrmSetVolume mov r0, #0x41 str r0, [sp] mov r0, #2 @@ -2914,7 +2914,7 @@ _021D8ACA: add r2, r3, r2 mov r1, #1 lsl r3, r7, #1 - bl FUN_020C14AC + bl NNS_SndStrmSetup ldr r2, _021D8BCC ; =UNK04_0220FBC8 ldr r1, _021D8BE4 ; =0x000034F8 ldr r0, [r2, #4] @@ -2975,14 +2975,14 @@ _021D8BEC: .word 0x000034FC thumb_func_start MOD04_021D8BF0 MOD04_021D8BF0: ; 0x021D8BF0 ldr r0, _021D8BFC ; =UNK04_0220FBC8 - ldr r3, _021D8C00 ; =FUN_020C1458 + ldr r3, _021D8C00 ; =NNS_SndStrmStart ldr r1, [r0, #4] ldr r0, _021D8C04 ; =0x00003504 add r0, r1, r0 bx r3 .align 2, 0 _021D8BFC: .word UNK04_0220FBC8 -_021D8C00: .word FUN_020C1458 +_021D8C00: .word NNS_SndStrmStart _021D8C04: .word 0x00003504 thumb_func_start MOD04_021D8C08 @@ -3052,12 +3052,12 @@ MOD04_021D8C6C: ; 0x021D8C6C ldr r1, [r0, #4] ldr r0, _021D8CC4 ; =0x00003504 add r0, r1, r0 - bl FUN_020C1430 + bl NNS_SndStrmStop ldr r0, _021D8CBC ; =UNK04_0220FBC8 ldr r1, [r0, #4] ldr r0, _021D8CC4 ; =0x00003504 add r0, r1, r0 - bl FUN_020C1674 + bl NNS_SndStrmFreeChannel bl VCT_Cleanup ldr r1, _021D8CBC ; =UNK04_0220FBC8 mov r0, #0x35 diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s index e66ad6aa..ec0e0a0e 100644 --- a/arm9/modules/05/asm/mod05_021D74E0.s +++ b/arm9/modules/05/asm/mod05_021D74E0.s @@ -727,7 +727,7 @@ MOD05_021D7B10: ; 0x021D7B10 MOD05_021D7B38: ; 0x021D7B38 push {lr} sub sp, #0x14 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7c @@ -826,7 +826,7 @@ MOD05_021D7BE0: ; 0x021D7BE0 ldr r0, [r0] ldr r1, [r4, #0x2c] bl MOD05_021E805C - ldr r5, _021D7C98 ; =UNK_021CED20 + ldr r5, _021D7C98 ; =NNS_G3dGlb + 0x8 add r3, sp, #0x40 mov r2, #8 _021D7C0E: @@ -859,29 +859,29 @@ _021D7C1C: orr r2, r0 add r0, r1, r2 str r0, [sp, #0x38] - ldr r1, _021D7C98 ; =UNK_021CED20 + ldr r1, _021D7C98 ; =NNS_G3dGlb + 0x8 add r0, sp, #0 mov r2, #0x40 bl MIi_CpuCopyFast - ldr r1, _021D7C9C ; =UNK_021CED98 + ldr r1, _021D7C9C ; =NNS_G3dGlb + 0x80 mov r0, #0x50 ldr r2, [r1, #0x7c] bic r2, r0 str r2, [r1, #0x7c] - bl FUN_020B849C + bl NNS_G3dGlbFlushP ldr r0, [r4, #0x3c] bl MOD05_021E4BA0 bl FUN_0201F178 - ldr r1, _021D7C98 ; =UNK_021CED20 + ldr r1, _021D7C98 ; =NNS_G3dGlb + 0x8 add r0, sp, #0x40 mov r2, #0x40 bl MIi_CpuCopyFast - ldr r1, _021D7C9C ; =UNK_021CED98 + ldr r1, _021D7C9C ; =NNS_G3dGlb + 0x80 mov r0, #0x50 ldr r2, [r1, #0x7c] bic r2, r0 str r2, [r1, #0x7c] - bl FUN_020B849C + bl NNS_G3dGlbFlushP ldr r0, [r4, #4] ldr r0, [r0, #4] bl MOD05_021D7FD0 @@ -892,8 +892,8 @@ _021D7C1C: add sp, #0x80 pop {r3, r4, r5, pc} nop -_021D7C98: .word UNK_021CED20 -_021D7C9C: .word UNK_021CED98 +_021D7C98: .word NNS_G3dGlb + 0x8 +_021D7C9C: .word NNS_G3dGlb + 0x80 _021D7CA0: .word UNK_02105BB8 thumb_func_start MOD05_021D7CA4 diff --git a/arm9/modules/05/asm/mod05_021D9A48.s b/arm9/modules/05/asm/mod05_021D9A48.s index 2e5469f9..85ba30d1 100644 --- a/arm9/modules/05/asm/mod05_021D9A48.s +++ b/arm9/modules/05/asm/mod05_021D9A48.s @@ -82,7 +82,7 @@ _021D9ABE: _021D9AD0: add r0, r4, #0 mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx add r6, r0, #0 bne _021D9AE0 bl ErrorHandling @@ -90,7 +90,7 @@ _021D9AE0: ldr r0, [sp, #0x1c] add r1, r6, #0 add r2, r7, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r5] cmp r5, #0 bne _021D9AF4 @@ -100,7 +100,7 @@ _021D9AF4: ldr r3, [sp, #0x18] add r1, r6, #0 add r2, r7, #0 - bl FUN_020B8110 + bl NNS_G3dAnmObjInit add r0, r4, #0 pop {r3, r4, r5, r6, r7, pc} @@ -117,7 +117,7 @@ _021D9B0E: mov r0, #0 pop {r3, pc} _021D9B16: - bl FUN_020B7E28 + bl NNS_G3dRenderObjRemoveAnmObj mov r0, #1 pop {r3, pc} .balign 4, 0 @@ -571,7 +571,7 @@ _021D9E58: add r1, r6, r1 ldr r0, [sp] ldr r1, [r1, #0x10] - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj _021D9E6A: add sp, #0x18 mov r0, #1 @@ -671,7 +671,7 @@ _021D9F12: add r1, r4, r1 ldr r0, [sp, #0xc] ldr r1, [r1, #0x10] - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj mov r0, #1 str r0, [sp] b _021D9F32 @@ -709,7 +709,7 @@ _021D9F54: bne _021D9F6E ldr r1, [r5, #0x10] add r0, r6, #0 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj str r7, [r5, #0x10] ldr r0, [r5, #0x24] bl FreeToHeap @@ -743,7 +743,7 @@ _021D9F90: bne _021D9FAC ldr r1, [r5] add r0, r4, #0 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj mov r0, #0 str r0, [r5] ldr r0, [r5, #0x14] @@ -1320,7 +1320,7 @@ _021DA360: bl MOD05_021D9B04 ldr r0, [r6, #0x14] ldr r1, [sp] - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj _021DA378: add r0, r4, #1 lsl r0, r0, #0x18 diff --git a/arm9/modules/05/asm/mod05_021DB44C.s b/arm9/modules/05/asm/mod05_021DB44C.s index 039db6a9..6da3dfc5 100644 --- a/arm9/modules/05/asm/mod05_021DB44C.s +++ b/arm9/modules/05/asm/mod05_021DB44C.s @@ -229,21 +229,21 @@ MOD05_021DB5EC: ; 0x021DB5EC add r4, r0, #0 mov r1, #0 mov r2, #0x40 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag add r0, r4, #0 mov r1, #0 mov r2, #0x80 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag mov r2, #2 add r0, r4, #0 mov r1, #0 lsl r2, r2, #8 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag mov r2, #1 add r0, r4, #0 mov r1, #0 lsl r2, r2, #0xa - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag pop {r4, pc} thumb_func_start MOD05_021DB61C diff --git a/arm9/modules/05/asm/mod05_021DBABC.s b/arm9/modules/05/asm/mod05_021DBABC.s index 0481b9eb..2c2bb7d6 100644 --- a/arm9/modules/05/asm/mod05_021DBABC.s +++ b/arm9/modules/05/asm/mod05_021DBABC.s @@ -51,7 +51,7 @@ _021DBAFA: ldrsh r2, [r5, r2] ldrsh r3, [r5, r3] add r0, r4, #0 - bl FUN_020B8418 + bl NNS_G3dGlbLightVector _021DBB14: add r1, r4, #4 mov r0, #1 @@ -60,7 +60,7 @@ _021DBB14: beq _021DBB26 ldrh r1, [r6, #0x18] add r0, r4, #0 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor _021DBB26: add r4, r4, #1 add r5, r5, #6 @@ -77,7 +77,7 @@ _021DBB26: ldrh r0, [r0, #0x20] ldrh r1, [r1, #0x22] ldr r2, [r2, #0x28] - bl FUN_020B83E0 + bl NNS_G3dGlbMaterialColorDiffAmb _021DBB48: mov r0, #3 lsl r0, r0, #0xa @@ -89,7 +89,7 @@ _021DBB48: ldrh r0, [r0, #0x24] ldrh r1, [r1, #0x26] ldr r2, [r2, #0x2c] - bl FUN_020B83BC + bl NNS_G3dGlbMaterialColorSpecEmi _021DBB60: mov r0, #1 lsl r0, r0, #0xc @@ -109,7 +109,7 @@ _021DBB60: ldr r0, [r0, #0x30] ldr r2, [r2, #0x38] ldr r3, [r3, #0x3c] - bl FUN_020B8390 + bl NNS_G3dGlbPolygonAttr _021DBB88: add sp, #0xc pop {r4, r5, r6, r7, pc} @@ -126,7 +126,7 @@ MOD05_021DBB8C: ; 0x021DBB8C beq _021DBBA4 ldrh r1, [r5, #0x20] add r0, r6, #0 - bl FUN_020BBC34 + bl NNS_G3dMdlSetMdlDiffAll _021DBBA4: mov r0, #2 lsl r0, r0, #8 @@ -134,7 +134,7 @@ _021DBBA4: beq _021DBBB4 ldrh r1, [r5, #0x22] add r0, r6, #0 - bl FUN_020BBBF4 + bl NNS_G3dMdlSetMdlAmbAll _021DBBB4: mov r0, #1 lsl r0, r0, #0xa @@ -142,7 +142,7 @@ _021DBBB4: beq _021DBBC4 ldrh r1, [r5, #0x24] add r0, r6, #0 - bl FUN_020BBBB4 + bl NNS_G3dMdlSetMdlSpecAll _021DBBC4: mov r0, #2 lsl r0, r0, #0xa @@ -150,7 +150,7 @@ _021DBBC4: beq _021DBBD4 ldrh r1, [r5, #0x26] add r0, r6, #0 - bl FUN_020BBB74 + bl NNS_G3dMdlSetMdlEmiAll _021DBBD4: mov r0, #1 lsl r0, r0, #0xc @@ -158,7 +158,7 @@ _021DBBD4: beq _021DBBE4 ldr r1, [r5, #0x30] add r0, r6, #0 - bl FUN_020BBB34 + bl NNS_G3dMdlSetMdlLightEnableFlagAll _021DBBE4: mov r0, #2 lsl r0, r0, #0xc @@ -166,7 +166,7 @@ _021DBBE4: beq _021DBBF4 ldr r1, [r5, #0x34] add r0, r6, #0 - bl FUN_020BBAF4 + bl NNS_G3dMdlSetMdlPolygonModeAll _021DBBF4: mov r0, #1 lsl r0, r0, #0xe @@ -174,7 +174,7 @@ _021DBBF4: beq _021DBC04 ldr r1, [r5, #0x38] add r0, r6, #0 - bl FUN_020BBAB4 + bl NNS_G3dMdlSetMdlCullModeAll _021DBC04: mov r0, #2 lsl r0, r0, #0xe @@ -182,7 +182,7 @@ _021DBC04: beq _021DBC14 ldr r1, [r5, #0x3c] add r0, r6, #0 - bl FUN_020BBA74 + bl NNS_G3dMdlSetMdlPolygonIDAll _021DBC14: mov r0, #1 lsl r0, r0, #0x10 @@ -190,7 +190,7 @@ _021DBC14: beq _021DBC24 ldr r1, [r5, #0x40] add r0, r6, #0 - bl FUN_020BBA34 + bl NNS_G3dMdlSetMdlAlphaAll _021DBC24: mov r1, #2 lsl r1, r1, #0x10 @@ -201,7 +201,7 @@ _021DBC24: lsr r1, r1, #2 add r0, r6, #0 and r1, r2 - bl FUN_020BB9F4 + bl NNS_G3dMdlSetMdlFogEnableFlagAll _021DBC3A: mov r1, #1 lsl r1, r1, #0x12 @@ -212,7 +212,7 @@ _021DBC3A: lsr r1, r1, #4 add r0, r6, #0 and r1, r2 - bl FUN_020BB9B4 + bl NNS_G3dMdlSetMdlDepthTestCondAll _021DBC50: mov r1, #2 lsl r1, r1, #0x12 @@ -223,7 +223,7 @@ _021DBC50: lsr r1, r1, #6 add r0, r6, #0 and r1, r2 - bl FUN_020BB974 + bl NNS_G3dMdlSetMdl1DotAll _021DBC66: mov r1, #1 lsl r1, r1, #0x14 @@ -234,7 +234,7 @@ _021DBC66: lsr r1, r1, #8 add r0, r6, #0 and r1, r2 - bl FUN_020BB934 + bl NNS_G3dMdlSetMdlFarClipAll _021DBC7C: mov r1, #2 lsl r1, r1, #0x14 @@ -245,7 +245,7 @@ _021DBC7C: lsr r1, r1, #0xa add r0, r6, #0 and r1, r2 - bl FUN_020BB8F4 + bl NNS_G3dMdlSetMdlXLDepthUpdateAll _021DBC92: pop {r4, r5, r6, pc} @@ -268,7 +268,7 @@ MOD05_021DBC94: ; 0x021DBC94 ldrsh r1, [r5, r4] ldrsh r2, [r2, r4] ldrsh r3, [r3, r4] - bl FUN_020B8418 + bl NNS_G3dGlbLightVector pop {r4, r5, r6, pc} thumb_func_start MOD05_021DBCBC @@ -280,7 +280,7 @@ MOD05_021DBCBC: ; 0x021DBCBC strh r2, [r4, r3] add r0, r1, #0 ldrh r1, [r4, r3] - bl FUN_020B8404 + bl NNS_G3dGlbLightColor pop {r4, pc} thumb_func_start MOD05_021DBCD0 diff --git a/arm9/modules/05/asm/mod05_021DBEF4.s b/arm9/modules/05/asm/mod05_021DBEF4.s index 1d56d13e..f65de9d8 100644 --- a/arm9/modules/05/asm/mod05_021DBEF4.s +++ b/arm9/modules/05/asm/mod05_021DBEF4.s @@ -133,7 +133,7 @@ _021DBFA8: str r0, [r1, r5] add r0, r1, #0 ldr r0, [r0, r5] - bl FUN_020BC0FC + bl NNS_G3dGetTex add r1, r6, r5 str r0, [r1, #8] add r0, r4, #0 diff --git a/arm9/modules/05/asm/mod05_021DC0B8.s b/arm9/modules/05/asm/mod05_021DC0B8.s index 1714cbec..b637fb93 100644 --- a/arm9/modules/05/asm/mod05_021DC0B8.s +++ b/arm9/modules/05/asm/mod05_021DC0B8.s @@ -1220,7 +1220,7 @@ _021DC998: str r2, [r1, r0] ldr r1, [r4, #0xc] add r0, r3, #4 - ldr r6, _021DCA38 ; =UNK_021CEF70 + ldr r6, _021DCA38 ; =NNS_G3dGlb + 0x258 add r5, r1, r0 ldmia r6!, {r0, r1} stmia r5!, {r0, r1} @@ -1271,7 +1271,7 @@ _021DCA30: pop {r4, r5, r6, pc} .balign 4, 0 _021DCA34: .word 0x00000F48 -_021DCA38: .word UNK_021CEF70 +_021DCA38: .word NNS_G3dGlb + 0x258 _021DCA3C: .word 0x00000F58 _021DCA40: .word 0x0400000C @@ -1897,7 +1897,7 @@ MOD05_021DCECC: ; 0x021DCECC bl NARC_AllocAndReadWholeMember add r1, sp, #0x14 str r0, [sp] - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r1, [sp, #0x14] mov r0, #2 ldr r1, [r1, #0xc] @@ -1934,7 +1934,7 @@ MOD05_021DCF14: ; 0x021DCF14 bl NARC_AllocAndReadWholeMember add r1, sp, #0x14 str r0, [sp, #8] - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r3, [sp, #0x14] mov r0, #0 str r0, [sp] @@ -1985,7 +1985,7 @@ MOD05_021DCF68: ; 0x021DCF68 _021DCFA0: ldr r0, [sp, #0x14] add r1, sp, #0x18 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r3, [sp, #0x18] mov r0, #0 str r0, [sp] @@ -2285,7 +2285,7 @@ MOD05_021DD180: ; 0x021DD180 ldr r0, [sp, #0xc] lsl r1, r1, #0x12 bl FX_Div - ldr r3, _021DD2B0 ; =UNK_021CEF70 + ldr r3, _021DD2B0 ; =NNS_G3dGlb + 0x258 str r0, [sp, #0xc] ldmia r3!, {r0, r1} add r2, sp, #0x14 @@ -2391,7 +2391,7 @@ _021DD2A4: add sp, #0x20 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 -_021DD2B0: .word UNK_021CEF70 +_021DD2B0: .word NNS_G3dGlb + 0x258 _021DD2B4: .word 0x00000F4C _021DD2B8: .word 0xFFFFF000 diff --git a/arm9/modules/05/asm/mod05_021E3444.s b/arm9/modules/05/asm/mod05_021E3444.s index ea709996..d8a13888 100644 --- a/arm9/modules/05/asm/mod05_021E3444.s +++ b/arm9/modules/05/asm/mod05_021E3444.s @@ -1232,7 +1232,7 @@ MOD05_021E3DA0: ; 0x021E3DA0 bl MTX_Identity22_ add r0, sp, #8 ldrh r0, [r0, #0x14] - ldr r3, _021E3E0C ; =UNK_020FFA38 + ldr r3, _021E3E0C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1271,7 +1271,7 @@ MOD05_021E3DA0: ; 0x021E3DA0 bl FUN_0200CA98 pop {r3, r4, r5, r6, r7, pc} nop -_021E3E0C: .word UNK_020FFA38 +_021E3E0C: .word FX_SinCosTable_ _021E3E10: .word MOD05_021E3D70 thumb_func_start MOD05_021E3E14 @@ -1652,7 +1652,7 @@ MOD05_021E40F0: ; 0x021E40F0 bl DC_FlushRange add r0, r6, #0 mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r1, r0, #0 add r0, r5, #0 add r2, r4, #0 @@ -1671,7 +1671,7 @@ MOD05_021E4118: ; 0x021E4118 bl DC_FlushRange add r0, r6, #0 mov r1, #1 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation add r1, r0, #0 add r0, r5, #0 add r2, r4, #0 @@ -2286,7 +2286,7 @@ MOD05_021E45A0: ; 0x021E45A0 add r4, r1, #0 lsl r1, r0, #1 lsl r0, r1, #1 - ldr r2, _021E4680 ; =UNK_020FFA38 + ldr r2, _021E4680 ; =FX_SinCosTable_ add r1, r1, #1 lsl r1, r1, #1 ldrsh r0, [r2, r0] @@ -2297,7 +2297,7 @@ MOD05_021E45A0: ; 0x021E45A0 asr r0, r4, #4 lsl r1, r0, #1 lsl r0, r1, #1 - ldr r2, _021E4680 ; =UNK_020FFA38 + ldr r2, _021E4680 ; =FX_SinCosTable_ add r1, r1, #1 lsl r1, r1, #1 ldrsh r0, [r2, r0] @@ -2389,7 +2389,7 @@ _021E464C: add sp, #0x20 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 -_021E4680: .word UNK_020FFA38 +_021E4680: .word FX_SinCosTable_ _021E4684: .word 0x00000000 thumb_func_start MOD05_021E4688 diff --git a/arm9/modules/05/asm/mod05_021E4AE4.s b/arm9/modules/05/asm/mod05_021E4AE4.s index b05969ea..635d46f6 100644 --- a/arm9/modules/05/asm/mod05_021E4AE4.s +++ b/arm9/modules/05/asm/mod05_021E4AE4.s @@ -573,7 +573,7 @@ _021E4EC0: add r0, r4, #0 bl FUN_0201F8E0 mov r1, #1 - bl FUN_020BB9F4 + bl NNS_G3dMdlSetMdlFogEnableFlagAll add r0, r4, #0 bl FUN_0201F8E0 bl MOD05_021DB5EC @@ -969,7 +969,7 @@ MOD05_021E5198: ; 0x021E5198 ldr r0, [r4] add r6, r1, #0 add r5, r2, #0 - bl FUN_020BC0FC + bl NNS_G3dGetTex cmp r0, #0 beq _021E51C8 bl FUN_0201B254 @@ -979,13 +979,13 @@ MOD05_021E5198: ; 0x021E5198 ldr r1, [r0, #8] bl DC_FlushRange ldr r0, [r4] - bl FUN_020BB59C + bl NNS_G3dResDefaultSetup cmp r0, #0 bne _021E51C8 bl ErrorHandling _021E51C8: ldr r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -997,7 +997,7 @@ _021E51C8: _021E51E0: ldr r1, [r5] add r0, r6, #0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit pop {r4, r5, r6, pc} .balign 4, 0 @@ -1038,7 +1038,7 @@ MOD05_021E5224: ; 0x021E5224 add r2, r3, #0 bl MOD05_021E4C6C str r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet str r0, [r4, #4] ldrh r1, [r0, #0xe] add r1, r0, r1 @@ -1046,7 +1046,7 @@ MOD05_021E5224: ; 0x021E5224 add r0, r0, r1 str r0, [r4, #8] ldr r0, [r4] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r4, #0xc] cmp r0, #0 beq _021E525A @@ -1071,17 +1071,17 @@ MOD05_021E5260: ; 0x021E5260 bl MOD05_021E4C6C str r0, [r5] mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx str r0, [r5, #4] ldr r1, [r5, #4] ldr r2, [r4, #8] add r0, r6, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r5, #8] ldr r1, [r5, #4] ldr r2, [r4, #8] ldr r3, [r4, #0xc] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit pop {r4, r5, r6, pc} .balign 4, 0 diff --git a/arm9/modules/05/asm/mod05_021E55BC.s b/arm9/modules/05/asm/mod05_021E55BC.s index 43186ebe..9c384261 100644 --- a/arm9/modules/05/asm/mod05_021E55BC.s +++ b/arm9/modules/05/asm/mod05_021E55BC.s @@ -207,7 +207,7 @@ _021E5716: lsl r0, r0, #0xc sub r0, r1, r0 str r0, [sp, #0x5c] - bl FUN_020B8344 + bl NNS_G3dGlbGetInvV mov r2, #0 add r5, r0, #0 add r0, sp, #0x24 diff --git a/arm9/modules/05/asm/mod05_021E577C.s b/arm9/modules/05/asm/mod05_021E577C.s index bf86c095..6ae8f9ed 100644 --- a/arm9/modules/05/asm/mod05_021E577C.s +++ b/arm9/modules/05/asm/mod05_021E577C.s @@ -186,7 +186,7 @@ _021E58B2: lsl r0, r0, #0xc sub r0, r1, r0 str r0, [sp, #0x5c] - bl FUN_020B8344 + bl NNS_G3dGlbGetInvV mov r2, #0 add r5, r0, #0 add r0, sp, #0x24 diff --git a/arm9/modules/05/asm/mod05_021E5918.s b/arm9/modules/05/asm/mod05_021E5918.s index 0322f00e..8459b021 100644 --- a/arm9/modules/05/asm/mod05_021E5918.s +++ b/arm9/modules/05/asm/mod05_021E5918.s @@ -188,7 +188,7 @@ _021E5A4E: lsl r0, r0, #0xc sub r0, r1, r0 str r0, [sp, #0x5c] - bl FUN_020B8344 + bl NNS_G3dGlbGetInvV mov r2, #0 add r5, r0, #0 add r0, sp, #0x24 diff --git a/arm9/modules/05/asm/mod05_021E5AB4.s b/arm9/modules/05/asm/mod05_021E5AB4.s index ff3779f5..3b0d6a5f 100644 --- a/arm9/modules/05/asm/mod05_021E5AB4.s +++ b/arm9/modules/05/asm/mod05_021E5AB4.s @@ -131,13 +131,13 @@ MOD05_021E5B80: ; 0x021E5B80 add r0, r4, #4 ldr r1, [r2, #0x18] ldr r2, [r2, #0xc] - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4] ldr r3, [r5, #8] ldr r1, [r3, #0x18] ldr r2, [r3, #0xc] ldr r3, [r3, #0x10] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #8] add r0, r4, #0 add r0, #0x18 @@ -146,7 +146,7 @@ MOD05_021E5B80: ; 0x021E5B80 add r0, r4, #0 ldr r1, [r4] add r0, #0x18 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r6, #0 add r1, sp, #0 bl FUN_0206477C @@ -166,7 +166,7 @@ MOD05_021E5BF8: ; 0x021E5BF8 ldr r4, [r1] ldr r1, [r4] add r0, r4, #4 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj add r0, r4, #0 bl MOD05_021E4C00 pop {r4, pc} @@ -209,7 +209,7 @@ _021E5C40: bne _021E5C40 ldr r0, [r5] str r0, [r3] - bl FUN_020B8344 + bl NNS_G3dGlbGetInvV mov r2, #0 add r5, r0, #0 add r0, sp, #0x24 diff --git a/arm9/modules/05/asm/mod05_021E5C8C.s b/arm9/modules/05/asm/mod05_021E5C8C.s index ab321b6f..dc59dcec 100644 --- a/arm9/modules/05/asm/mod05_021E5C8C.s +++ b/arm9/modules/05/asm/mod05_021E5C8C.s @@ -129,13 +129,13 @@ MOD05_021E5D50: ; 0x021E5D50 add r0, r4, #4 ldr r1, [r2, #0x1c] ldr r2, [r2, #0x10] - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4] ldr r3, [r5, #8] ldr r1, [r3, #0x1c] ldr r2, [r3, #0x10] ldr r3, [r3, #0x14] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #8] add r0, r4, #0 add r0, #0x18 @@ -144,7 +144,7 @@ MOD05_021E5D50: ; 0x021E5D50 add r0, r4, #0 ldr r1, [r4] add r0, #0x18 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r6, #0 add r1, sp, #0 bl FUN_0206477C @@ -164,7 +164,7 @@ MOD05_021E5DC8: ; 0x021E5DC8 ldr r4, [r1] ldr r1, [r4] add r0, r4, #4 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj add r0, r4, #0 bl MOD05_021E4C00 pop {r4, pc} diff --git a/arm9/modules/05/asm/mod05_021E5E10.s b/arm9/modules/05/asm/mod05_021E5E10.s index e2e6814e..f5f3ef70 100644 --- a/arm9/modules/05/asm/mod05_021E5E10.s +++ b/arm9/modules/05/asm/mod05_021E5E10.s @@ -165,13 +165,13 @@ MOD05_021E5F18: ; 0x021E5F18 add r0, r4, #4 ldr r1, [r2, #0x18] ldr r2, [r2, #0xc] - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4] ldr r3, [r5, #8] ldr r1, [r3, #0x18] ldr r2, [r3, #0xc] ldr r3, [r3, #0x10] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #8] add r0, r4, #0 add r0, #0x18 @@ -180,7 +180,7 @@ MOD05_021E5F18: ; 0x021E5F18 add r0, r4, #0 ldr r1, [r4] add r0, #0x18 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r6, #0 add r1, sp, #0 bl FUN_0206477C @@ -200,7 +200,7 @@ MOD05_021E5F90: ; 0x021E5F90 ldr r4, [r1] ldr r1, [r4] add r0, r4, #4 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj add r0, r4, #0 bl MOD05_021E4C00 pop {r4, pc} diff --git a/arm9/modules/05/asm/mod05_021E7C00.s b/arm9/modules/05/asm/mod05_021E7C00.s index 2e968e4f..686fe698 100644 --- a/arm9/modules/05/asm/mod05_021E7C00.s +++ b/arm9/modules/05/asm/mod05_021E7C00.s @@ -448,14 +448,14 @@ MOD05_021E7F10: ; 0x021E7F10 add r4, r3, #0 bl MOD05_021F4BD0 ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] add r1, r0, r1 add r0, r5, #0 str r1, [r4] - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit pop {r3, r4, r5, pc} .balign 4, 0 @@ -466,18 +466,18 @@ MOD05_021E7F34: ; 0x021E7F34 add r0, r1, #0 add r4, r2, #0 add r5, r3, #0 - bl FUN_020B8474 - ldr r1, _021E7FB4 ; =UNK_021CEDD4 + bl NNS_G3dGlbSetBaseTrans + ldr r1, _021E7FB4 ; =NNS_G3dGlb + 0xBC add r0, r4, #0 bl MI_Copy36B - ldr r1, _021E7FB8 ; =UNK_021CED98 + ldr r1, _021E7FB8 ; =NNS_G3dGlb + 0x80 mov r0, #0xa4 ldr r2, [r1, #0x7c] bic r2, r0 add r0, r5, #0 str r2, [r1, #0x7c] - bl FUN_020B844C - bl FUN_020B849C + bl NNS_G3dGlbSetBaseScale + bl NNS_G3dGlbFlushP add r2, sp, #0 ldr r0, [sp, #0x1c] ldr r1, [sp, #0x18] @@ -511,7 +511,7 @@ _021E7F98: ldrh r2, [r2, #2] add r0, r7, #0 add r1, r5, #0 - bl FUN_020BAFB8 + bl NNS_G3dDraw1Mat1Shp add r0, r4, #1 lsl r0, r0, #0x18 lsr r4, r0, #0x18 @@ -522,8 +522,8 @@ _021E7F98: _021E7FB0: pop {r3, r4, r5, r6, r7, pc} nop -_021E7FB4: .word UNK_021CEDD4 -_021E7FB8: .word UNK_021CED98 +_021E7FB4: .word NNS_G3dGlb + 0xBC +_021E7FB8: .word NNS_G3dGlb + 0x80 thumb_func_start MOD05_021E7FBC MOD05_021E7FBC: ; 0x021E7FBC diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index 13563cc2..ebf46a48 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -12073,7 +12073,7 @@ _021EE78C: bne _021EE7C4 sub r0, #0x10 ldr r0, [r2, r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet add r7, r0, #0 ldrh r0, [r7, #0xe] add r0, r7, r0 @@ -13883,8 +13883,8 @@ MOD05_021EF514: ; 0x021EF514 push {r3, r4, r5, r6, r7, lr} add r5, r0, #0 bl FUN_020162FC - bl FUN_020AF6A4 - bl FUN_020AFA30 + bl NNS_GfdResetLnkTexVramState + bl NNS_GfdResetLnkPlttVramState mov r4, #0 add r6, r5, #4 mov r7, #0x30 @@ -14531,7 +14531,7 @@ _021EF9B0: _021EF9B6: ldr r0, [r4, #0xc] ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet add r5, r0, #0 ldrb r0, [r5, #9] cmp r0, #1 @@ -14547,7 +14547,7 @@ _021EF9CA: _021EF9D8: ldr r0, [r4, #8] add r1, r5, #0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit ldr r0, [r4, #0x18] mov r1, #1 str r1, [r0] @@ -14621,14 +14621,14 @@ MOD05_021EFA40: ; 0x021EFA40 bl ErrorHandling _021EFA6A: ldr r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrb r0, [r0, #9] cmp r0, #1 beq _021EFA7A bl ErrorHandling _021EFA7A: ldr r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -14638,7 +14638,7 @@ _021EFA7A: _021EFA8E: add r0, r5, #0 add r1, r4, #0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit add r0, r4, #0 pop {r3, r4, r5, pc} .balign 4, 0 @@ -15780,7 +15780,7 @@ _021F03A8: asr r0, r1, #4 lsl r3, r0, #1 lsl r1, r3, #1 - ldr r2, _021F0438 ; =UNK_020FFA38 + ldr r2, _021F0438 ; =FX_SinCosTable_ add r3, r3, #1 lsl r3, r3, #1 ldrsh r1, [r2, r1] @@ -15794,7 +15794,7 @@ _021F03A8: asr r0, r5, #4 lsl r2, r0, #1 lsl r1, r2, #1 - ldr r3, _021F0438 ; =UNK_020FFA38 + ldr r3, _021F0438 ; =FX_SinCosTable_ add r2, r2, #1 lsl r2, r2, #1 ldrsh r1, [r3, r1] @@ -15839,7 +15839,7 @@ _021F03A8: pop {r4, r5, r6, r7, pc} nop _021F0434: .word UNK05_021F8B6C -_021F0438: .word UNK_020FFA38 +_021F0438: .word FX_SinCosTable_ thumb_func_start MOD05_021F043C MOD05_021F043C: ; 0x021F043C @@ -15866,7 +15866,7 @@ MOD05_021F0454: ; 0x021F0454 bl FUN_0201F008 strh r0, [r5] ldrh r0, [r5] - ldr r2, _021F04F0 ; =UNK_020FFA38 + ldr r2, _021F04F0 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r1, r0, #1 lsl r0, r1, #1 @@ -15909,7 +15909,7 @@ MOD05_021F0454: ; 0x021F0454 str r0, [r5, #0x1c] add r0, sp, #0 ldrh r0, [r0] - ldr r3, _021F04F0 ; =UNK_020FFA38 + ldr r3, _021F04F0 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -15924,7 +15924,7 @@ MOD05_021F0454: ; 0x021F0454 add sp, #0x2c pop {r4, r5, pc} nop -_021F04F0: .word UNK_020FFA38 +_021F04F0: .word FX_SinCosTable_ _021F04F4: .word UNK05_021F8B78 thumb_func_start MOD05_021F04F8 @@ -21368,7 +21368,7 @@ MOD05_021F2E70: ; 0x021F2E70 add r0, r4, #0 bl FUN_0201F8E0 mov r1, #1 - bl FUN_020BB9F4 + bl NNS_G3dMdlSetMdlFogEnableFlagAll add r0, r4, #0 bl FUN_0201F8E0 bl MOD05_021DB5EC @@ -22303,7 +22303,7 @@ _021F3596: mov r2, #0 bl MOD05_021F2DB0 str r0, [r5, #0x10] - bl FUN_020BC0FC + bl NNS_G3dGetTex add r4, r0, #0 add r0, r6, #0 bl MOD05_021F2E00 @@ -25006,7 +25006,7 @@ _021F49E4: str r0, [r5, r1] sub r0, r1, #4 ldr r0, [r5, r0] - bl FUN_020BC0FC + bl NNS_G3dGetTex ldr r1, _021F4BA8 ; =0x000008A4 str r0, [r5, r1] ldrh r0, [r7, #8] @@ -25014,7 +25014,7 @@ _021F49E4: beq _021F4A2C sub r0, r1, #4 ldr r0, [r5, r0] - bl FUN_020BC0FC + bl NNS_G3dGetTex ldr r1, _021F4BB0 ; =0x000008A8 str r0, [r5, r1] b _021F4A32 @@ -25099,7 +25099,7 @@ _021F4ABE: cmp r6, r0 bge _021F4AEC ldr r0, [r4, #4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet add r1, r0, #0 ldrh r2, [r1, #0xe] ldr r3, [r7, #4] @@ -25137,7 +25137,7 @@ _021F4B10: mov r2, #4 bl NARC_AllocAndReadWholeMember str r0, [r5, #4] - bl FUN_020BC0FC + bl NNS_G3dGetTex add r4, r0, #0 beq _021F4B46 bl FUN_0201B3C4 @@ -26120,7 +26120,7 @@ MOD05_021F5268: ; 0x021F5268 add r2, r5, #0 bl UncompressFromNarc str r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet str r0, [r4, #4] ldrh r1, [r0, #0xe] add r1, r0, r1 @@ -26128,7 +26128,7 @@ MOD05_021F5268: ; 0x021F5268 add r0, r0, r1 str r0, [r4, #8] ldr r0, [r4] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r4, #0xc] cmp r0, #0 beq _021F52A4 @@ -26166,18 +26166,18 @@ MOD05_021F52C8: ; 0x021F52C8 beq _021F52F8 add r1, sp, #4 add r2, sp, #0 - bl FUN_020B7CF0 - ldr r1, _021F5314 ; =UNK_021064BC + bl NNS_G3dTexReleaseTexKey + ldr r1, _021F5314 ; =NNS_GfdDefaultFuncFreeTexVram ldr r0, [sp, #4] ldr r1, [r1] blx r1 - ldr r1, _021F5314 ; =UNK_021064BC + ldr r1, _021F5314 ; =NNS_GfdDefaultFuncFreeTexVram ldr r0, [sp] ldr r1, [r1] blx r1 ldr r0, [r4, #0xc] - bl FUN_020B7C58 - ldr r1, _021F5318 ; =UNK_021064C4 + bl NNS_G3dPlttReleasePlttKey + ldr r1, _021F5318 ; =NNS_GfdDefaultFuncFreePlttVram ldr r1, [r1] blx r1 _021F52F8: @@ -26196,8 +26196,8 @@ _021F5306: add sp, #8 pop {r4, pc} nop -_021F5314: .word UNK_021064BC -_021F5318: .word UNK_021064C4 +_021F5314: .word NNS_GfdDefaultFuncFreeTexVram +_021F5318: .word NNS_GfdDefaultFuncFreePlttVram thumb_func_start MOD05_021F531C MOD05_021F531C: ; 0x021F531C @@ -26241,7 +26241,7 @@ MOD05_021F5358: ; 0x021F5358 beq _021F5376 add r0, r1, #0 ldr r1, [r4, #8] - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj ldr r0, [r4, #0x10] cmp r0, #0 bne _021F5376 @@ -26343,7 +26343,7 @@ MOD05_021F5400: ; 0x021F5400 bl memset ldr r1, [r5, #8] add r0, r4, #0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit mov r0, #1 str r0, [r4, #0x6c] lsl r0, r0, #0xc @@ -26354,11 +26354,11 @@ MOD05_021F5400: ; 0x021F5400 thumb_func_start MOD05_021F5424 MOD05_021F5424: ; 0x021F5424 - ldr r3, _021F542C ; =FUN_020B7EFC + ldr r3, _021F542C ; =NNS_G3dRenderObjAddAnmObj ldr r1, [r1, #8] bx r3 nop -_021F542C: .word FUN_020B7EFC +_021F542C: .word NNS_G3dRenderObjAddAnmObj thumb_func_start MOD05_021F5430 MOD05_021F5430: ; 0x021F5430 @@ -26373,7 +26373,7 @@ MOD05_021F5430: ; 0x021F5430 add r0, r4, #0 add r0, #0x70 ldrh r0, [r0] - ldr r3, _021F54C8 ; =UNK_020FFA38 + ldr r3, _021F54C8 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -26390,7 +26390,7 @@ MOD05_021F5430: ; 0x021F5430 add r0, r4, #0 add r0, #0x74 ldrh r0, [r0] - ldr r3, _021F54C8 ; =UNK_020FFA38 + ldr r3, _021F54C8 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -26407,7 +26407,7 @@ MOD05_021F5430: ; 0x021F5430 add r0, r4, #0 add r0, #0x72 ldrh r0, [r0] - ldr r3, _021F54C8 ; =UNK_020FFA38 + ldr r3, _021F54C8 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -26432,7 +26432,7 @@ _021F54C4: add sp, #0x48 pop {r4, pc} .balign 4, 0 -_021F54C8: .word UNK_020FFA38 +_021F54C8: .word FX_SinCosTable_ thumb_func_start MOD05_021F54CC MOD05_021F54CC: ; 0x021F54CC @@ -26471,17 +26471,17 @@ MOD05_021F54EC: ; 0x021F54EC add r0, r2, #0 mov r1, #0 add r6, r3, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx str r0, [r5, #4] ldr r1, [r5, #4] ldr r2, [r4, #8] add r0, r6, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r5, #8] ldr r1, [r5, #4] ldr r2, [r4, #8] ldr r3, [r4, #0xc] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit pop {r4, r5, r6, pc} thumb_func_start MOD05_021F5518 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 62cd7742..9679d0e0 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -2393,7 +2393,7 @@ MOD06_0223A828: ; 0x0223A828 str r1, [r0] mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add r4, #0x40 add r0, r4, #0 bl MOD06_0223A400 @@ -2401,7 +2401,7 @@ MOD06_0223A828: ; 0x0223A828 mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N _0223A860: add sp, #4 pop {r3, r4, pc} @@ -23537,11 +23537,11 @@ MOD06_02244F84: ; 0x02244F84 add r7, r0, #0 add r0, r5, #0 mov r1, #1 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation str r0, [sp] add r0, r7, #0 mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation mov r1, #0x32 add r5, r0, #0 add r0, r4, #0 @@ -24040,7 +24040,7 @@ _02245392: ldr r1, [r5, #0x2c] bl MOD05_021F4BD0 ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -28490,7 +28490,7 @@ MOD06_02247544: ; 0x02247544 bl NARC_AllocAndReadWholeMember add r1, r5, #0 add r4, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r1, [r5] mov r0, #3 ldr r1, [r1, #0xc] @@ -28513,7 +28513,7 @@ MOD06_0224756C: ; 0x0224756C bl NARC_AllocAndReadWholeMember add r1, r4, #0 add r6, r0, #0 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r3, [r4] mov r0, #0 str r0, [sp] @@ -28551,7 +28551,7 @@ MOD06_022475A4: ; 0x022475A4 bl NARC_AllocAndReadWholeMember add r1, r4, #0 add r6, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r3, [r4] add r0, r5, #0 add r2, r3, #0 @@ -28870,7 +28870,7 @@ MOD06_02247808: ; 0x02247808 bl FUN_020094F0 bl FUN_02009C5C mov r1, #1 - bl FUN_020B1A14 + bl NNS_G2dGetImageLocation mov r1, #0x32 add r5, r0, #0 add r0, r4, #0 @@ -28923,7 +28923,7 @@ MOD06_02247860: ; 0x02247860 add r1, r6, #0 bl FUN_02009E54 mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r5, r0, #0 add r0, r4, #0 mov r1, #0x20 @@ -32641,12 +32641,12 @@ MOD06_022494E4: ; 0x022494E4 ldr r0, [r5, r0] mov r1, #1 lsl r2, r2, #0x10 - bl FUN_020BC02C + bl NNSi_G3dModifyPolygonAttrMask mov r0, #0x49 lsl r0, r0, #2 ldr r0, [r5, r0] add r1, r4, #0 - bl FUN_020BBA34 + bl NNS_G3dMdlSetMdlAlphaAll pop {r3, r4, r5, pc} thumb_func_start MOD06_02249508 @@ -34087,10 +34087,10 @@ _0224A000: ldr r0, [r4, #0x18] mov r1, #1 lsl r2, r2, #0x10 - bl FUN_020BC02C + bl NNSi_G3dModifyPolygonAttrMask ldr r0, [r4, #0x18] ldr r1, [r4, #0xc] - bl FUN_020BBA34 + bl NNS_G3dMdlSetMdlAlphaAll ldr r0, [r4, #0x14] add r1, sp, #0x30 add r2, sp, #0 @@ -35048,13 +35048,13 @@ MOD06_0224A710: ; 0x0224A710 add r0, r4, #4 ldr r1, [r2, #0x18] ldr r2, [r2, #0xc] - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4] ldr r3, [r5, #0x14] ldr r1, [r3, #0x18] ldr r2, [r3, #0xc] ldr r3, [r3, #0x10] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #0x14] add r0, r4, #0 add r0, #0x18 @@ -35063,7 +35063,7 @@ MOD06_0224A710: ; 0x0224A710 add r0, r4, #0 ldr r1, [r4] add r0, #0x18 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj ldr r0, [r5, #0x18] bl FUN_02058448 str r0, [r5, #4] @@ -35108,7 +35108,7 @@ MOD06_0224A7C8: ; 0x0224A7C8 ldr r4, [r1, #0x1c] ldr r1, [r4] add r0, r4, #4 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj add r0, r4, #0 bl MOD05_021E4C00 pop {r4, pc} @@ -36429,13 +36429,13 @@ MOD06_0224B188: ; 0x0224B188 add r0, r4, #4 ldr r1, [r2, #0x18] ldr r2, [r2, #0xc] - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4] ldr r3, [r5, #8] ldr r1, [r3, #0x18] ldr r2, [r3, #0xc] ldr r3, [r3, #0x10] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #8] add r0, r4, #0 add r0, #0x18 @@ -36444,7 +36444,7 @@ MOD06_0224B188: ; 0x0224B188 add r0, r4, #0 ldr r1, [r4] add r0, #0x18 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r6, #0 add r1, sp, #0 bl FUN_0206477C @@ -36464,7 +36464,7 @@ MOD06_0224B200: ; 0x0224B200 ldr r4, [r1] ldr r1, [r4] add r0, r4, #4 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj add r0, r4, #0 bl MOD05_021E4C00 pop {r4, pc} @@ -36635,13 +36635,13 @@ MOD06_0224B324: ; 0x0224B324 add r0, r4, #4 ldr r1, [r2, #0x18] ldr r2, [r2, #0xc] - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4] ldr r3, [r5, #8] ldr r1, [r3, #0x18] ldr r2, [r3, #0xc] ldr r3, [r3, #0x10] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #8] add r0, r4, #0 add r0, #0x18 @@ -36650,7 +36650,7 @@ MOD06_0224B324: ; 0x0224B324 add r0, r4, #0 ldr r1, [r4] add r0, #0x18 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r6, #0 add r1, sp, #0 bl FUN_0206477C @@ -36670,7 +36670,7 @@ MOD06_0224B39C: ; 0x0224B39C ldr r4, [r1] ldr r1, [r4] add r0, r4, #4 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj add r0, r4, #0 bl MOD05_021E4C00 pop {r4, pc} @@ -38617,14 +38617,14 @@ _0224C328: bl MOD05_021F4BD0 str r0, [sp, #0x18] ldr r0, [r6] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] add r7, r0, r1 ldr r0, [sp, #0x18] ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -38901,7 +38901,7 @@ _0224C590: ldr r1, [r5, #0x2c] bl MOD05_021F4BD0 ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r2, sp, #0x18 mov r3, #0 @@ -43012,7 +43012,7 @@ _0224E604: ldr r1, [r6, #0x2c] bl MOD05_021F4BD0 ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s index 1110fa5c..e810c620 100644 --- a/arm9/modules/07/asm/module_07.s +++ b/arm9/modules/07/asm/module_07.s @@ -3155,7 +3155,7 @@ _0221380C: .word 0x00000B58 thumb_func_start MOD07_02213810 MOD07_02213810: ; 0x02213810 push {r4, lr} - ldr r3, _02213830 ; =UNK_021064B8 + ldr r3, _02213830 ; =NNS_GfdDefaultFuncAllocTexVram mov r2, #0 ldr r3, [r3] blx r3 @@ -3169,12 +3169,12 @@ _02213828: lsr r0, r0, #0xd pop {r4, pc} nop -_02213830: .word UNK_021064B8 +_02213830: .word NNS_GfdDefaultFuncAllocTexVram thumb_func_start MOD07_02213834 MOD07_02213834: ; 0x02213834 push {r4, lr} - ldr r3, _02213854 ; =UNK_021064C0 + ldr r3, _02213854 ; =NNS_GfdDefaultFuncAllocPlttVram mov r2, #1 ldr r3, [r3] blx r3 @@ -3188,7 +3188,7 @@ _0221384C: lsr r0, r0, #0xd pop {r4, pc} nop -_02213854: .word UNK_021064C0 +_02213854: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD07_02213858 MOD07_02213858: ; 0x02213858 @@ -3319,7 +3319,7 @@ MOD07_02213924: ; 0x02213924 bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x10 add r4, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r2, [sp, #0x10] mov r0, #3 ldr r1, [r2, #0xc] diff --git a/arm9/modules/08/asm/module_08.s b/arm9/modules/08/asm/module_08.s index b6af83a9..0ff32867 100644 --- a/arm9/modules/08/asm/module_08.s +++ b/arm9/modules/08/asm/module_08.s @@ -8063,7 +8063,7 @@ MOD08_02215A44: ; 0x02215A44 cmp r0, #0 ble _02215A62 bl FUN_020222AC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera _02215A62: bl FUN_02013388 _02215A66: @@ -8072,7 +8072,7 @@ _02215A66: thumb_func_start MOD08_02215A68 MOD08_02215A68: ; 0x02215A68 push {r4, lr} - ldr r3, _02215A80 ; =UNK_021064B8 + ldr r3, _02215A80 ; =NNS_GfdDefaultFuncAllocTexVram mov r2, #0 ldr r3, [r3] blx r3 @@ -8082,12 +8082,12 @@ MOD08_02215A68: ; 0x02215A68 lsr r0, r0, #0xd pop {r4, pc} nop -_02215A80: .word UNK_021064B8 +_02215A80: .word NNS_GfdDefaultFuncAllocTexVram thumb_func_start MOD08_02215A84 MOD08_02215A84: ; 0x02215A84 push {r4, lr} - ldr r3, _02215A9C ; =UNK_021064C0 + ldr r3, _02215A9C ; =NNS_GfdDefaultFuncAllocPlttVram mov r2, #0 ldr r3, [r3] blx r3 @@ -8097,7 +8097,7 @@ MOD08_02215A84: ; 0x02215A84 lsr r0, r0, #0xd pop {r4, pc} nop -_02215A9C: .word UNK_021064C0 +_02215A9C: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD08_02215AA0 MOD08_02215AA0: ; 0x02215AA0 @@ -12792,7 +12792,7 @@ _02217DA2: ldr r2, [r4, #0xc] asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _02217E2C ; =UNK_020FFA38 + ldr r0, _02217E2C ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -12813,7 +12813,7 @@ _02217DA2: lsl r0, r0, #1 add r0, r0, #1 lsl r1, r0, #1 - ldr r0, _02217E2C ; =UNK_020FFA38 + ldr r0, _02217E2C ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -12834,7 +12834,7 @@ _02217E26: mov r0, #0 pop {r4, pc} nop -_02217E2C: .word UNK_020FFA38 +_02217E2C: .word FX_SinCosTable_ thumb_func_start MOD08_02217E30 MOD08_02217E30: ; 0x02217E30 @@ -13221,7 +13221,7 @@ _022180CE: lsl r0, r0, #1 add r0, r0, #1 lsl r1, r0, #1 - ldr r0, _0221811C ; =UNK_020FFA38 + ldr r0, _0221811C ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -13242,7 +13242,7 @@ _02218116: mov r0, #0 pop {r4, pc} nop -_0221811C: .word UNK_020FFA38 +_0221811C: .word FX_SinCosTable_ thumb_func_start MOD08_02218120 MOD08_02218120: ; 0x02218120 @@ -38351,7 +38351,7 @@ _02224CA6: mul r0, r1 asr r0, r0, #4 lsl r0, r0, #2 - ldr r1, _02224D70 ; =UNK_020FFA38 + ldr r1, _02224D70 ; =FX_SinCosTable_ str r0, [sp, #0x18] add r1, r1, r0 mov r0, #2 @@ -38371,7 +38371,7 @@ _02224CA6: lsl r0, r1, #4 asr r6, r0, #0x10 mov r2, #3 - ldr r1, _02224D70 ; =UNK_020FFA38 + ldr r1, _02224D70 ; =FX_SinCosTable_ ldr r0, [sp, #0x18] lsl r2, r2, #0x10 ldrsh r0, [r1, r0] @@ -38437,7 +38437,7 @@ _02224D50: pop {r3, r4, r5, r6, r7, pc} nop _02224D6C: .word 0x00001555 -_02224D70: .word UNK_020FFA38 +_02224D70: .word FX_SinCosTable_ _02224D74: .word 0x00000000 _02224D78: .word MOD08_02224AF4 @@ -39693,7 +39693,7 @@ _022257C6: lsr r0, r0, #0x10 asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _0222586C ; =UNK_020FFA38 + ldr r0, _0222586C ; =FX_SinCosTable_ ldr r3, [r6, #0x14] ldrsh r0, [r0, r1] lsl r2, r2, #0xc @@ -39762,7 +39762,7 @@ _02225852: add sp, #8 pop {r3, r4, r5, r6, r7, pc} nop -_0222586C: .word UNK_020FFA38 +_0222586C: .word FX_SinCosTable_ _02225870: .word 0x00000132 _02225874: .word 0x00000000 _02225878: .word 0x00003FFF @@ -40033,7 +40033,7 @@ MOD08_02225A70: ; 0x02225A70 lsr r0, r0, #0x10 asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _02225B30 ; =UNK_020FFA38 + ldr r0, _02225B30 ; =FX_SinCosTable_ lsl r2, r2, #0xc ldrsh r0, [r0, r1] mov r3, #0 @@ -40096,7 +40096,7 @@ _02225B2A: add sp, #0xc pop {r4, r5, r6, r7, pc} .align 2, 0 -_02225B30: .word UNK_020FFA38 +_02225B30: .word FX_SinCosTable_ _02225B34: .word 0x00000000 _02225B38: .word 0x45800000 @@ -40407,7 +40407,7 @@ _02225D8C: lsr r0, r0, #0x10 asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _02225E0C ; =UNK_020FFA38 + ldr r0, _02225E0C ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -40459,7 +40459,7 @@ _02225E02: pop {r4, r5, r6, r7, pc} nop _02225E08: .word 0x00000199 -_02225E0C: .word UNK_020FFA38 +_02225E0C: .word FX_SinCosTable_ _02225E10: .word 0x00000000 thumb_func_start MOD08_02225E14 diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s index 63e3d1e0..a3085247 100644 --- a/arm9/modules/09/asm/module_09.s +++ b/arm9/modules/09/asm/module_09.s @@ -2185,7 +2185,7 @@ MOD09_02212F8C: ; 0x02212F8C bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x10 add r4, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r1, [sp, #0x10] add r0, r5, #0 add r1, #0xc @@ -2199,7 +2199,7 @@ MOD09_02212F8C: ; 0x02212F8C bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x10 add r4, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r1, [sp, #0x10] add r0, r5, #0 add r1, #0xc @@ -3409,7 +3409,7 @@ _02213976: bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0xc add r7, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData mov r0, #0 str r0, [sp] mov r0, #0x20 @@ -14010,7 +14010,7 @@ MOD09_022191C0: ; 0x022191C0 bl AllocAndReadWholeNarcMemberByIdPair add r1, sp, #0x10 add r4, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r1, [sp, #0x10] add r0, r5, #0 add r1, #0xc diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index 1bc8e471..42f3f754 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -3061,14 +3061,14 @@ _0222EFD8: .word FUN_020223BC thumb_func_start MOD11_0222EFDC MOD11_0222EFDC: ; 0x0222EFDC push {r3, r4, r5, lr} - ldr r3, _0222F014 ; =UNK_021064B8 + ldr r3, _0222F014 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _0222F018 ; =UNK_021064C0 + ldr r3, _0222F018 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0 add r4, r0, #0 ldr r3, [r3] @@ -3087,8 +3087,8 @@ _0222F00C: bl FUN_02012CC8 pop {r3, r4, r5, pc} nop -_0222F014: .word UNK_021064B8 -_0222F018: .word UNK_021064C0 +_0222F014: .word NNS_GfdDefaultFuncAllocTexVram +_0222F018: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD11_0222F01C MOD11_0222F01C: ; 0x0222F01C diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s index 01de211a..7d0a23a3 100644 --- a/arm9/modules/12/asm/module_12.s +++ b/arm9/modules/12/asm/module_12.s @@ -744,14 +744,14 @@ MOD12_0222DC80: ; 0x0222DC80 thumb_func_start MOD12_0222DCAC MOD12_0222DCAC: ; 0x0222DCAC push {r3, r4, r5, lr} - ldr r3, _0222DCE4 ; =UNK_021064B8 + ldr r3, _0222DCE4 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _0222DCE8 ; =UNK_021064C0 + ldr r3, _0222DCE8 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0 add r4, r0, #0 ldr r3, [r3] @@ -770,8 +770,8 @@ _0222DCDC: bl FUN_02012CC8 pop {r3, r4, r5, pc} nop -_0222DCE4: .word UNK_021064B8 -_0222DCE8: .word UNK_021064C0 +_0222DCE4: .word NNS_GfdDefaultFuncAllocTexVram +_0222DCE8: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD12_0222DCEC MOD12_0222DCEC: ; 0x0222DCEC @@ -3999,14 +3999,14 @@ MOD12_0222F6B4: ; 0x0222F6B4 thumb_func_start MOD12_0222F6E0 MOD12_0222F6E0: ; 0x0222F6E0 push {r3, r4, r5, lr} - ldr r3, _0222F718 ; =UNK_021064B8 + ldr r3, _0222F718 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _0222F71C ; =UNK_021064C0 + ldr r3, _0222F71C ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0 add r4, r0, #0 ldr r3, [r3] @@ -4025,8 +4025,8 @@ _0222F710: bl FUN_02012CC8 pop {r3, r4, r5, pc} nop -_0222F718: .word UNK_021064B8 -_0222F71C: .word UNK_021064C0 +_0222F718: .word NNS_GfdDefaultFuncAllocTexVram +_0222F71C: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD12_0222F720 MOD12_0222F720: ; 0x0222F720 @@ -6350,7 +6350,7 @@ MOD12_02230A40: ; 0x02230A40 thumb_func_start MOD12_02230A60 MOD12_02230A60: ; 0x02230A60 push {r4, lr} - ldr r3, _02230A78 ; =UNK_021064B8 + ldr r3, _02230A78 ; =NNS_GfdDefaultFuncAllocTexVram mov r2, #0 ldr r3, [r3] blx r3 @@ -6360,12 +6360,12 @@ MOD12_02230A60: ; 0x02230A60 lsr r0, r0, #0xd pop {r4, pc} nop -_02230A78: .word UNK_021064B8 +_02230A78: .word NNS_GfdDefaultFuncAllocTexVram thumb_func_start MOD12_02230A7C MOD12_02230A7C: ; 0x02230A7C push {r4, lr} - ldr r3, _02230A94 ; =UNK_021064C0 + ldr r3, _02230A94 ; =NNS_GfdDefaultFuncAllocPlttVram mov r2, #0 ldr r3, [r3] blx r3 @@ -6375,7 +6375,7 @@ MOD12_02230A7C: ; 0x02230A7C lsr r0, r0, #0xd pop {r4, pc} nop -_02230A94: .word UNK_021064C0 +_02230A94: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD12_02230A98 MOD12_02230A98: ; 0x02230A98 @@ -42062,14 +42062,14 @@ _02241B08: .word 0x00000133 thumb_func_start MOD12_02241B0C MOD12_02241B0C: ; 0x02241B0C push {r3, r4, r5, lr} - ldr r3, _02241B44 ; =UNK_021064B8 + ldr r3, _02241B44 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _02241B48 ; =UNK_021064C0 + ldr r3, _02241B48 ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0 add r4, r0, #0 ldr r3, [r3] @@ -42088,8 +42088,8 @@ _02241B3C: bl FUN_02012CC8 pop {r3, r4, r5, pc} nop -_02241B44: .word UNK_021064B8 -_02241B48: .word UNK_021064C0 +_02241B44: .word NNS_GfdDefaultFuncAllocTexVram +_02241B48: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_start MOD12_02241B4C MOD12_02241B4C: ; 0x02241B4C diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s index 0e89d90f..5aee0b46 100644 --- a/arm9/modules/13/asm/module_13_arm2.s +++ b/arm9/modules/13/asm/module_13_arm2.s @@ -25937,27 +25937,27 @@ _022341D8: .word 0x0000A001 arm_func_start MOD13_022341DC MOD13_022341DC: ; 0x022341DC - ldr ip, _022341E4 ; =FUN_020C01A0 + ldr ip, _022341E4 ; =NNS_SndMain bx ip .align 2, 0 -_022341E4: .word FUN_020C01A0 +_022341E4: .word NNS_SndMain arm_func_start MOD13_022341E8 MOD13_022341E8: ; 0x022341E8 ldr r0, _02234200 ; =0x02243154 - ldr ip, _02234204 ; =FUN_020C10A4 + ldr ip, _02234204 ; =NNS_SndPlayerStopSeq ldr r0, [r0] mov r1, #0 add r0, r0, #0x90 bx ip .align 2, 0 _02234200: .word MOD13_02243154 -_02234204: .word FUN_020C10A4 +_02234204: .word NNS_SndPlayerStopSeq arm_func_start MOD13_02234208 MOD13_02234208: ; 0x02234208 ldr r2, _02234224 ; =0x02243154 - ldr ip, _02234228 ; =FUN_020C0EA4 + ldr ip, _02234228 ; =NNS_SndPlayerSetTrackPitch ldr r3, [r2] mov r2, r1 mov r1, r0 @@ -25965,32 +25965,32 @@ MOD13_02234208: ; 0x02234208 bx ip .align 2, 0 _02234224: .word MOD13_02243154 -_02234228: .word FUN_020C0EA4 +_02234228: .word NNS_SndPlayerSetTrackPitch arm_func_start MOD13_0223422C MOD13_0223422C: ; 0x0223422C ldr r2, _02234244 ; =0x02243154 mov r1, r0 ldr r0, [r2] - ldr ip, _02234248 ; =FUN_020C0F40 + ldr ip, _02234248 ; =NNS_SndPlayerSetVolume add r0, r0, #0x90 bx ip .align 2, 0 _02234244: .word MOD13_02243154 -_02234248: .word FUN_020C0F40 +_02234248: .word NNS_SndPlayerSetVolume arm_func_start MOD13_0223424C MOD13_0223424C: ; 0x0223424C ldr r1, _02234268 ; =0x02243154 mov r2, r0 ldr r0, [r1] - ldr ip, _0223426C ; =FUN_020C3888 + ldr ip, _0223426C ; =NNS_SndArcPlayerStartSeqArc mov r1, #0 add r0, r0, #0x90 bx ip .align 2, 0 _02234268: .word MOD13_02243154 -_0223426C: .word FUN_020C3888 +_0223426C: .word NNS_SndArcPlayerStartSeqArc arm_func_start MOD13_02234270 MOD13_02234270: ; 0x02234270 @@ -26024,17 +26024,17 @@ MOD13_022342A0: ; 0x022342A0 ldr r1, _0223432C ; =0x02243154 ldr r1, [r1] str r0, [r1, #0x94] - bl SDAT_Init + bl NNS_SndInit ldr r0, _0223432C ; =0x02243154 ldr r0, [r0] ldr r1, [r0, #0x94] - bl FUN_020C2444 + bl NNS_SndArcInitOnMemory mov r0, #0 - bl FUN_020C39CC + bl NNS_SndArcPlayerSetup ldr r0, _0223432C ; =0x02243154 ldr r0, [r0] add r0, r0, #0x90 - bl FUN_020C0F80 + bl NNS_SndHandleInit mov r0, #0 ldr r1, _02234334 ; =MOD13_022341DC mov r2, r0 @@ -33219,7 +33219,7 @@ MOD13_0223A440: ; 0x0223A440 str r1, [sp, #0xc] ldrb r1, [r4, #0x36] ldrb r2, [r4, #0x37] - bl FUN_020B5E50 + bl NNS_G2dArrangeOBJ1D add sp, sp, #0x10 ldmia sp!, {r4, r5, r6, r7, r8, pc} @@ -33245,7 +33245,7 @@ MOD13_0223A4F0: ; 0x0223A4F0 str lr, [sp, #8] add r0, r0, #0x20 str ip, [sp, #0xc] - bl FUN_020B7168 + bl NNSi_G2dTextCanvasDrawTextRect add sp, sp, #0x14 ldmia sp!, {pc} @@ -33271,14 +33271,14 @@ _0223A564: ldr r0, [r0] add r5, r0, r4 mov r0, r5 - bl FUN_020B5CE4 + bl NNS_G2dFontFindGlyphIndex mov r1, r0 ldr r0, _0223A5EC ; =0x0000FFFF cmp r1, r0 ldreq r0, [r5] ldreqh r1, [r0, #2] mov r0, r5 - bl FUN_020B5C88 + bl NNS_G2dFontGetCharWidthsFromIndex ldrh r1, [r5, #8] ldrh r2, [r7] ldr r3, [sp, #8] @@ -33319,7 +33319,7 @@ MOD13_0223A5F0: ; 0x0223A5F0 mla r1, ip, r3, lr mov r3, r2 mov r2, r4 - bl FUN_020B63CC + bl NNS_G2dCharCanvasDrawChar add sp, sp, #8 ldmia sp!, {r4, pc} .align 2, 0 @@ -33334,7 +33334,7 @@ MOD13_0223A634: ; 0x0223A634 str lr, [sp] add r0, r0, #0x20 str ip, [sp, #4] - bl FUN_020B7218 + bl NNSi_G2dTextCanvasDrawText add sp, sp, #0xc ldmia sp!, {pc} @@ -33504,7 +33504,7 @@ _0223A88C: mov r0, r6 mov r2, r4 mov r3, r5 - bl FUN_020B6388 + bl NNS_G2dCharCanvasInitForBG ldr r1, _0223A954 ; =0x022431A4 mov r0, #0xc ldr r2, [r1] @@ -33533,7 +33533,7 @@ _0223A8E0: str r7, [sp, #8] mov r4, #0xf str r4, [sp, #0xc] - bl FUN_020B6240 + bl NNS_G2dMapScrToCharText mov r0, r6 mov r1, #0 bl MOD13_0223A4D8 @@ -33601,7 +33601,7 @@ MOD13_0223A9A4: ; 0x0223A9A4 mov r0, r6 strh r1, [r4, #0x34] mov r1, r5 - bl FUN_020B6180 + bl NNSi_G2dCalcRequiredOBJ ldr r1, [sp, #0x20] cmp r7, #1 str r0, [r1] @@ -33614,7 +33614,7 @@ MOD13_0223A9A4: ; 0x0223A9A4 mov r2, r6 mov r3, r5 add r1, ip, r7, lsl #7 - bl FUN_020B62F8 + bl NNS_G2dCharCanvasInitForOBJ1D ldr r2, [r4, #0x18] mov r0, r4 mov r1, #0 @@ -33694,7 +33694,7 @@ _0223AB20: add r0, r2, r8, lsl #2 ldr r1, [r0, #0x78c] add r0, r2, r7 - bl FUN_020B5D3C + bl NNS_G2dFontInitUTF16 add r8, r8, #1 cmp r8, #2 add r7, r7, #0xc @@ -34004,7 +34004,7 @@ MOD13_0223AF48: ; 0x0223AF48 ldr r0, _0223AF8C ; =0x022431A8 mov r1, r5 ldr r0, [r0] - bl FUN_020ADDF0 + bl NNS_FndFreeToExpHeap mov r0, r4 bl OS_EnableIrqMask add sp, sp, #4 @@ -34026,7 +34026,7 @@ MOD13_0223AF90: ; 0x0223AF90 ldmeqia sp!, {r4, r5, pc} ldr r0, _0223AFDC ; =0x022431A8 ldr r0, [r0] - bl FUN_020ADDF0 + bl NNS_FndFreeToExpHeap mov r0, r4 bl OS_EnableIrqMask mov r0, #0 @@ -34060,7 +34060,7 @@ MOD13_0223B004: ; 0x0223B004 ldr r0, [r1] mov r1, r6 mov r2, r5 - bl tempName_NNS_FndAllocFromExpHeapEx + bl NNS_FndAllocFromExpHeapEx movs r5, r0 bne _0223B03C bl OS_Terminate @@ -34078,7 +34078,7 @@ MOD13_0223B050: ; 0x0223B050 sub sp, sp, #4 ldr r0, _0223B078 ; =0x022431A8 ldr r0, [r0] - bl thunk_FUN_020adc8c + bl NNS_FndDestroyExpHeap ldr r0, _0223B078 ; =0x022431A8 mov r1, #0 str r1, [r0] @@ -34097,7 +34097,7 @@ MOD13_0223B07C: ; 0x0223B07C mov r0, r4 mov r1, #0x40000 mov r2, #0 - bl tempName_NNS_FndCreateExpHeapEx + bl NNS_FndCreateExpHeapEx ldr r1, _0223B0B8 ; =0x022431A8 cmp r0, #0 str r0, [r1] diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s index 3a321743..b95ab0d6 100644 --- a/arm9/modules/14/asm/module_14.s +++ b/arm9/modules/14/asm/module_14.s @@ -10519,7 +10519,7 @@ _021DC79C: mov r1, #0x10 orr r1, r2 str r1, [r0] - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r2, #0x80 @@ -10547,7 +10547,7 @@ _021DC79C: mov r0, #0x51 lsl r0, r0, #2 add r0, r4, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0xa str r0, [sp] mov r0, #0x51 @@ -10765,7 +10765,7 @@ MOD14_021DCA0C: ; 0x021DCA0C bl MOD14_021DDEF4 bl G3X_ResetMtxStack bl G3X_ResetMtxStack_2 - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera mov r0, #0x56 lsl r0, r0, #2 ldr r0, [r4, r0] @@ -13079,7 +13079,7 @@ _021DDC74: .word 0x0000B22C thumb_func_start MOD14_021DDC78 MOD14_021DDC78: ; 0x021DDC78 push {r3, lr} - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack mov r0, #1 add r1, r0, #0 @@ -13815,7 +13815,7 @@ MOD14_021DE1D0: ; 0x021DE1D0 cmp r0, #0 beq _021DE268 add r1, sp, #0x14 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 beq _021DE262 mov r0, #0xa @@ -13895,7 +13895,7 @@ MOD14_021DE278: ; 0x021DE278 cmp r0, #0 beq _021DE2DC add r1, sp, #8 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r0, _021DE2E4 ; =0x00005984 mov r1, #3 ldr r0, [r5, r0] @@ -15793,7 +15793,7 @@ MOD14_021DF144: ; 0x021DF144 sub sp, #0x38 add r4, r0, #0 add r0, #0x24 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 @@ -18635,7 +18635,7 @@ MOD14_021E078C: ; 0x021E078C add r4, r1, #0 add r6, r2, #0 str r3, [sp, #8] - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy bl FUN_0206B888 add r1, r0, #0 mov r0, #0xa @@ -18656,10 +18656,10 @@ MOD14_021E078C: ; 0x021E078C cmp r0, #0 beq _021E0818 add r0, sp, #0x18 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy ldr r0, [sp, #0xc] add r1, sp, #0x10 - bl FUN_020B00F0 + bl NNS_G2dGetUnpackedPaletteCompressInfo ldr r2, [sp, #0x14] add r7, r0, #0 ldr r0, [r2, #0xc] @@ -18678,14 +18678,14 @@ MOD14_021E078C: ; 0x021E078C ldr r1, [sp, #0x10] mov r2, #0xc0 mov r3, #1 - bl FUN_020B10E8 + bl NNS_G2dLoadPaletteEx b _021E0812 _021E0806: ldr r0, [sp, #0x14] mov r1, #0xc0 mov r2, #1 add r3, sp, #0x18 - bl FUN_020B1240 + bl NNS_G2dLoadPalette _021E0812: ldr r0, [sp, #0xc] bl FreeToHeap @@ -18805,7 +18805,7 @@ MOD14_021E08E4: ; 0x021E08E4 _021E08F4: add r0, r5, #4 str r6, [r5] - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, r4, #0 add r5, #0x34 sub r4, r4, #1 @@ -18913,7 +18913,7 @@ MOD14_021E0940: ; 0x021E0940 bl GetBoxMonData strh r0, [r4, #0x2e] add r0, r4, #4 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, r5, #0 add r0, #0x4c str r0, [sp] @@ -18926,7 +18926,7 @@ MOD14_021E0940: ; 0x021E0940 add r0, r5, #0 add r0, #0x4c add r1, sp, #0x1c - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -18942,7 +18942,7 @@ MOD14_021E0940: ; 0x021E0940 ldr r1, [sp, #0x60] ldr r0, [sp, #0x1c] lsl r1, r1, #5 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping add r0, r4, #4 str r0, [sp, #0x20] ldr r0, [sp, #0x5c] @@ -19031,10 +19031,10 @@ MOD14_021E0A60: ; 0x021E0A60 bl GetBoxMonData strh r0, [r4, #0x2e] add r0, r4, #4 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy ldr r0, [sp, #0x58] add r1, sp, #0x18 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -19050,7 +19050,7 @@ MOD14_021E0A60: ; 0x021E0A60 ldr r1, [sp, #0x6c] ldr r0, [sp, #0x18] lsl r1, r1, #5 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping add r0, r4, #4 str r0, [sp, #0x1c] ldr r0, [sp, #0x68] @@ -19160,7 +19160,7 @@ MOD14_021E0BBC: ; 0x021E0BBC cmp r0, #0 beq _021E0C18 add r0, r4, #4 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, r5, #0 add r0, #0x4c str r0, [sp] @@ -19173,7 +19173,7 @@ MOD14_021E0BBC: ; 0x021E0BBC add r5, #0x4c add r0, r5, #0 add r1, sp, #4 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData mov r2, #1 lsl r2, r2, #0x1a ldr r1, [r2] @@ -19188,7 +19188,7 @@ MOD14_021E0BBC: ; 0x021E0BBC str r1, [r0, #0x10] ldr r0, [sp, #4] lsl r1, r6, #5 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping ldr r0, [r4] add r1, r4, #4 bl FUN_02020334 @@ -19309,7 +19309,7 @@ MOD14_021E0CCC: ; 0x021E0CCC sub sp, #0x38 add r4, r0, #0 add r0, #0x18 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 mov r0, #0x9d str r3, [sp] @@ -19705,7 +19705,7 @@ MOD14_021E0FA8: ; 0x021E0FA8 add r4, r5, #0 _021E0FE0: add r0, sp, #0x44 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r0, #0 str r0, [sp] mov r0, #1 @@ -19758,7 +19758,7 @@ _021E103E: cmp r0, #2 blo _021E0FE0 add r0, sp, #0x44 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 mov r0, #0xb9 str r3, [sp] @@ -21925,7 +21925,7 @@ _021E211E: ldr r2, [sp, #0x14] ldr r3, [sp, #0x48] lsl r1, r1, #5 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping add sp, #0x34 pop {r4, r5, r6, r7, pc} _021E2132: @@ -22053,7 +22053,7 @@ MOD14_021E21E4: ; 0x021E21E4 pop {r4, r5, r6, pc} _021E2214: add r0, sp, #4 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, sp, #4 str r0, [sp] add r0, r5, #0 @@ -22100,7 +22100,7 @@ MOD14_021E223C: ; 0x021E223C mov r5, #0x20 _021E227C: add r0, sp, #0x1c - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, sp, #0x1c str r0, [sp] ldr r2, [sp, #8] @@ -22987,7 +22987,7 @@ MOD14_021E2940: ; 0x021E2940 add r0, sp, #0x30 bl MOD14_021DDDB4 add r0, sp, #0xc - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy lsl r0, r4, #0x10 lsr r0, r0, #0x10 mov r1, #1 @@ -23012,7 +23012,7 @@ MOD14_021E2940: ; 0x021E2940 mov r1, #0xbe ldr r0, [sp, #8] lsl r1, r1, #8 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping lsl r0, r4, #0x10 lsr r0, r0, #0x10 mov r1, #2 @@ -24714,7 +24714,7 @@ MOD14_021E3664: ; 0x021E3664 add r4, r0, #0 bl MOD14_021E36FC add r0, sp, #0x14 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r0, #2 @@ -24829,7 +24829,7 @@ MOD14_021E36FC: ; 0x021E36FC str r0, [r1] add r0, r4, #0 add r0, #0x18 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0xa str r0, [sp] add r4, #0x18 @@ -25553,7 +25553,7 @@ _021E3CB2: str r0, [sp, #0x10] _021E3CC2: add r0, sp, #0x14 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, sp, #0x14 str r0, [sp] add r0, r7, #0 @@ -25752,7 +25752,7 @@ MOD14_021E3E1C: ; 0x021E3E1C bl MOD14_021DC484 str r0, [sp, #0x14] add r0, sp, #0x18 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r0, #2 @@ -27198,12 +27198,12 @@ MOD14_021E4890: ; 0x021E4890 add r5, r6, #0 _021E48EA: add r0, sp, #0x10 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy ldr r0, [sp, #0xc] ldr r1, [r4] mov r2, #1 add r3, sp, #0x10 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping mov r0, #0 str r0, [sp] mov r0, #1 @@ -29425,7 +29425,7 @@ MOD14_021E5A08: ; 0x021E5A08 mov r3, #0 bl FUN_02006930 add r0, sp, #0x48 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r0, #2 @@ -29583,11 +29583,11 @@ _021E5BA0: add r0, r0, r6 str r0, [r4, #0x18] add r0, sp, #0x34 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy ldr r2, [r4, #0x18] add r0, sp, #0x34 mov r1, #2 - bl FUN_020B1A1C + bl NNS_G2dSetImageLocation ldr r0, _021E5BFC ; =0x04001000 mov r2, #0 ldr r1, [r0] @@ -29711,7 +29711,7 @@ MOD14_021E5C68: ; 0x021E5C68 add r0, r5, #0 add r0, #0xe8 add r1, sp, #4 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #4] mov r1, #2 ldr r0, [r0, #0x14] diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s index cd1cb9eb..bd42feb3 100644 --- a/arm9/modules/15/asm/module_15.s +++ b/arm9/modules/15/asm/module_15.s @@ -2592,7 +2592,7 @@ MOD15_021D87F8: ; 0x021D87F8 bl FUN_02015F1C str r5, [r4, #0x18] str r6, [r4, #0x1c] - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -2925,19 +2925,19 @@ MOD15_021D8AB4: ; 0x021D8AB4 mov r0, #0x66 lsl r0, r0, #2 add r0, r4, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0x6b lsl r0, r0, #2 add r0, r4, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0x15 lsl r0, r0, #4 add r0, r4, r0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r0, #0x5d lsl r0, r0, #2 add r0, r4, r0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 @@ -7801,9 +7801,9 @@ MOD15_021DB154: ; 0x021DB154 sub sp, #0x4c add r4, r0, #0 add r0, sp, #0x38 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy add r0, sp, #0x14 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r0, #0x23 str r0, [sp] add r0, sp, #0x38 diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s index adc8e5c2..4588def6 100644 --- a/arm9/modules/16/asm/module_16.s +++ b/arm9/modules/16/asm/module_16.s @@ -1996,7 +1996,7 @@ MOD16_021D8424: ; 0x021D8424 push {r4, r5, lr} sub sp, #0x24 add r4, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -2053,7 +2053,7 @@ _021D849C: .word 0x000019FC thumb_func_start MOD16_021D84A0 MOD16_021D84A0: ; 0x021D84A0 push {r3, lr} - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _021D8500 ; =0x04000060 ldr r2, _021D8504 ; =0xFFFFCFFD @@ -2089,11 +2089,11 @@ MOD16_021D84A0: ; 0x021D84A0 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager pop {r3, pc} .align 2, 0 _021D8500: .word 0x04000060 @@ -2106,8 +2106,8 @@ _021D8510: .word 0xBFFF0000 thumb_func_start MOD16_021D8514 MOD16_021D8514: ; 0x021D8514 push {r3, lr} - bl FUN_020AEAF4 - bl FUN_020AEC60 + bl NNS_GfdResetFrmTexVramState + bl NNS_GfdResetFrmPlttVramState pop {r3, pc} thumb_func_end MOD16_021D8514 @@ -2313,7 +2313,7 @@ MOD16_021D86B4: ; 0x021D86B4 lsl r0, r0, #2 ldr r0, [r4, r0] bl FUN_0201FDEC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera mov r0, #0x55 lsl r0, r0, #2 ldr r0, [r4, r0] @@ -3182,7 +3182,7 @@ MOD16_021D8CB4: ; 0x021D8CB4 add r7, r0, #0 beq _021D8CF6 add r1, sp, #4 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 beq _021D8CF0 cmp r4, #0 @@ -3220,7 +3220,7 @@ MOD16_021D8CFC: ; 0x021D8CFC add r7, r0, #0 beq _021D8D42 add r1, sp, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0 beq _021D8D3C cmp r4, #0 @@ -3258,7 +3258,7 @@ MOD16_021D8D48: ; 0x021D8D48 add r4, r0, #0 beq _021D8D6A add r1, r5, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData cmp r0, #0 bne _021D8D6A add r0, r4, #0 @@ -3280,7 +3280,7 @@ MOD16_021D8D70: ; 0x021D8D70 add r4, r0, #0 beq _021D8D92 add r1, r5, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0 bne _021D8D92 add r0, r4, #0 @@ -3302,7 +3302,7 @@ MOD16_021D8D98: ; 0x021D8D98 add r4, r0, #0 beq _021D8DBA add r1, r5, #0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 bne _021D8DBA add r0, r4, #0 @@ -3545,14 +3545,14 @@ MOD16_021D8F9C: ; 0x021D8F9C mov r1, #0x55 lsl r1, r1, #2 str r0, [r5, r1] - ldr r3, _021D9030 ; =UNK_021064B8 + ldr r3, _021D9030 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _021D9034 ; =UNK_021064C0 + ldr r3, _021D9034 ; =NNS_GfdDefaultFuncAllocPlttVram add r4, r0, #0 ldr r3, [r3] mov r0, #0x80 @@ -3607,8 +3607,8 @@ _021D9004: add sp, #0x10 pop {r3, r4, r5, r6, r7, pc} nop -_021D9030: .word UNK_021064B8 -_021D9034: .word UNK_021064C0 +_021D9030: .word NNS_GfdDefaultFuncAllocTexVram +_021D9034: .word NNS_GfdDefaultFuncAllocPlttVram _021D9038: .word 0x7FFF0000 _021D903C: .word 0xFFFF0000 _021D9040: .word MOD16_021FF490 @@ -29023,7 +29023,7 @@ _021E4ACE: lsr r0, r0, #0x10 asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _021E4B10 ; =UNK_020FFA38 + ldr r0, _021E4B10 ; =FX_SinCosTable_ mov r2, #3 ldrsh r0, [r0, r1] lsl r2, r2, #0x10 @@ -29044,7 +29044,7 @@ _021E4ACE: pop {r3, pc} .align 2, 0 _021E4B0C: .word 0x00007FFF -_021E4B10: .word UNK_020FFA38 +_021E4B10: .word FX_SinCosTable_ thumb_func_end MOD16_021E4AC0 thumb_func_start MOD16_021E4B14 @@ -49298,7 +49298,7 @@ MOD16_021EE2A4: ; 0x021EE2A4 lsl r4, r0, #1 add r0, r4, #1 lsl r1, r0, #1 - ldr r0, _021EE354 ; =UNK_020FFA38 + ldr r0, _021EE354 ; =FX_SinCosTable_ mov r3, #0 ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -49312,7 +49312,7 @@ MOD16_021EE2A4: ; 0x021EE2A4 lsr r5, r2, #0xc orr r5, r0 mov r2, #0xe - ldr r0, _021EE354 ; =UNK_020FFA38 + ldr r0, _021EE354 ; =FX_SinCosTable_ lsl r1, r4, #1 ldrsh r0, [r0, r1] lsl r2, r2, #0xe @@ -49364,7 +49364,7 @@ MOD16_021EE2A4: ; 0x021EE2A4 add sp, #0x10 pop {r3, r4, r5, r6, r7, pc} .align 2, 0 -_021EE354: .word UNK_020FFA38 +_021EE354: .word FX_SinCosTable_ thumb_func_end MOD16_021EE2A4 thumb_func_start MOD16_021EE358 @@ -49737,7 +49737,7 @@ MOD16_021EE5D0: ; 0x021EE5D0 bl FUN_02003974 ldr r0, [sp, #4] mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r2, r5, #0 add r2, #0xbc add r1, r0, #0 @@ -49762,7 +49762,7 @@ MOD16_021EE5D0: ; 0x021EE5D0 bl FUN_02003974 ldr r0, [sp, #8] mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r5, #0xc0 add r1, r0, #0 ldr r2, [r5] diff --git a/arm9/modules/17/asm/module_17.s b/arm9/modules/17/asm/module_17.s index b96d5a98..234719b2 100644 --- a/arm9/modules/17/asm/module_17.s +++ b/arm9/modules/17/asm/module_17.s @@ -508,7 +508,7 @@ MOD17_021D786C: ; 0x021D786C push {r4, lr} add r4, r0, #0 bl FUN_020222AC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera ldr r0, [r4, #0x1c] cmp r0, #0 beq _021D7884 @@ -768,7 +768,7 @@ MOD17_021D7A2C: ; 0x021D7A2C lsl r5, r5, #2 add r0, r6, #0 add r1, r1, r5 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [r4, #0x30] ldr r0, [r0, r5] pop {r4, r5, r6, pc} @@ -1046,7 +1046,7 @@ MOD17_021D7C28: ; 0x021D7C28 add r6, r2, #0 ldr r7, [sp, #0x18] str r1, [r0] - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera ldr r1, _021D7CB0 ; =0x04000470 lsl r0, r4, #0xc str r0, [r1] @@ -1055,7 +1055,7 @@ MOD17_021D7C28: ; 0x021D7C28 mov r0, #0 str r0, [r1] ldr r0, [sp] - ldr r1, _021D7CB4 ; =UNK_020FFA38 + ldr r1, _021D7CB4 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r0, r2, #1 @@ -1101,7 +1101,7 @@ _021D7CA0: nop _021D7CAC: .word 0x04000454 _021D7CB0: .word 0x04000470 -_021D7CB4: .word UNK_020FFA38 +_021D7CB4: .word FX_SinCosTable_ _021D7CB8: .word 0x0400046C _021D7CBC: .word 0x04000448 thumb_func_end MOD17_021D7C28 @@ -1173,7 +1173,7 @@ _021D7D24: .word MOD17_021DE32C thumb_func_start MOD17_021D7D28 MOD17_021D7D28: ; 0x021D7D28 push {r3, lr} - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack mov r0, #1 add r1, r0, #0 @@ -1218,11 +1218,11 @@ MOD17_021D7D28: ; 0x021D7D28 str r0, [r2] str r1, [r2, #0x40] mov r1, #1 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager pop {r3, pc} .align 2, 0 _021D7D9C: .word 0x04000008 @@ -1253,7 +1253,7 @@ MOD17_021D7DB0: ; 0x021D7DB0 mov r0, #0x10 orr r0, r1 str r0, [r2] - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule bl GX_DisableEngineALayers bl GX_DisableEngineBLayers mov r0, #0x1f @@ -1272,8 +1272,8 @@ _021D7DFC: .word 0xFFCFFFEF thumb_func_start MOD17_021D7E00 MOD17_021D7E00: ; 0x021D7E00 push {r3, lr} - bl FUN_020AEAF4 - bl FUN_020AEC60 + bl NNS_GfdResetFrmTexVramState + bl NNS_GfdResetFrmPlttVramState pop {r3, pc} thumb_func_end MOD17_021D7E00 @@ -1282,7 +1282,7 @@ MOD17_021D7E0C: ; 0x021D7E0C push {r3, lr} bl GX_DisableEngineALayers bl GX_DisableEngineBLayers - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule pop {r3, pc} thumb_func_end MOD17_021D7E0C @@ -1658,7 +1658,7 @@ MOD17_021D80CC: ; 0x021D80CC bl FUN_0201E00C bl FUN_0201D168 bl FUN_0201E0BC - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7c @@ -1787,7 +1787,7 @@ _021D81C6: ldr r1, [r6, #8] add r0, r4, #0 add r1, r1, #4 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r1, [r7] ldr r0, [r6, #8] str r1, [r0] @@ -1851,7 +1851,7 @@ _021D822A: ldr r0, [sp, #0xc] add r1, r1, r6 add r1, r1, #4 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r0, [r5, #8] add r0, r0, r6 ldr r0, [r0, #4] @@ -1914,13 +1914,13 @@ MOD17_021D82E4: ; 0x021D82E4 add r6, r3, #0 bl FUN_02006D98 str r0, [r5, #0x20] - ldr r3, _021D833C ; =UNK_021064B8 + ldr r3, _021D833C ; =NNS_GfdDefaultFuncAllocTexVram mov r1, #0 ldr r3, [r3] add r0, r4, #0 add r2, r1, #0 blx r3 - ldr r3, _021D8340 ; =UNK_021064C0 + ldr r3, _021D8340 ; =NNS_GfdDefaultFuncAllocPlttVram add r4, r0, #0 ldr r3, [r3] add r0, r6, #0 @@ -1948,8 +1948,8 @@ MOD17_021D82E4: ; 0x021D82E4 str r0, [r5, #0x24] pop {r4, r5, r6, pc} nop -_021D833C: .word UNK_021064B8 -_021D8340: .word UNK_021064C0 +_021D833C: .word NNS_GfdDefaultFuncAllocTexVram +_021D8340: .word NNS_GfdDefaultFuncAllocPlttVram _021D8344: .word 0x7FFF0000 _021D8348: .word 0xFFFF0000 thumb_func_end MOD17_021D82E4 @@ -8916,7 +8916,7 @@ MOD17_021DB700: ; 0x021DB700 bl UncompressFromNarc add r1, sp, #0x10 add r6, r0, #0 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #0x10] ldr r0, [r0, #0x14] bl FUN_02008A74 @@ -13727,7 +13727,7 @@ _021DDAC6: add r1, r1, r5 add r0, r7, #0 add r1, r1, #4 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #4] ldr r1, [r0] ldr r0, [r4] @@ -13758,7 +13758,7 @@ _021DDB1E: ldr r1, [r4, #8] add r0, r5, #0 add r1, r1, #4 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r0, [sp, #4] ldr r1, [r0] ldr r0, [r4, #8] @@ -13875,7 +13875,7 @@ MOD17_021DDC30: ; 0x021DDC30 bl OverlayManager_GetData add r5, r0, #0 bl FUN_020222AC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera ldr r0, [r5, #0x10] bl MOD17_021DD518 mov r0, #0 diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s index dccb0b7d..d90cf62c 100644 --- a/arm9/modules/18/asm/module_18.s +++ b/arm9/modules/18/asm/module_18.s @@ -5780,7 +5780,7 @@ MOD18_0223C37C: ; 0x0223C37C ldr r1, [r0] ldr r0, _0223C56C ; =0x000009EB strb r2, [r1, r0] - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7c @@ -17178,7 +17178,7 @@ _02241A30: lsl r2, r2, #0xa asr r0, r0, #4 lsl r6, r0, #1 - ldr r0, _02241AAC ; =UNK_020FFA38 + ldr r0, _02241AAC ; =FX_SinCosTable_ lsl r1, r6, #1 ldrsh r0, [r0, r1] mov r3, #0 @@ -17194,7 +17194,7 @@ _02241A30: orr r4, r0 add r0, r6, #1 lsl r1, r0, #1 - ldr r0, _02241AAC ; =UNK_020FFA38 + ldr r0, _02241AAC ; =FX_SinCosTable_ mov r2, #0xa ldrsh r0, [r0, r1] lsl r2, r2, #0xa @@ -17233,7 +17233,7 @@ _02241AA8: add sp, #0x10 pop {r3, r4, r5, r6, r7, pc} .align 2, 0 -_02241AAC: .word UNK_020FFA38 +_02241AAC: .word FX_SinCosTable_ _02241AB0: .word MOD18_022513A0 thumb_func_end MOD18_02241A04 @@ -17478,7 +17478,7 @@ _02241C70: ldr r2, [sp] asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _02241D34 ; =UNK_020FFA38 + ldr r0, _02241D34 ; =FX_SinCosTable_ asr r3, r2, #0x1f ldrsh r0, [r0, r1] asr r1, r0, #0x1f @@ -17504,7 +17504,7 @@ _02241C70: lsl r0, r0, #1 add r0, r0, #1 lsl r1, r0, #1 - ldr r0, _02241D34 ; =UNK_020FFA38 + ldr r0, _02241D34 ; =FX_SinCosTable_ ldrsh r0, [r0, r1] asr r1, r0, #0x1f bl _ll_mul @@ -17561,7 +17561,7 @@ _02241D24: .word MOD18_02241AB4 _02241D28: .word MOD18_022513A0 _02241D2C: .word 0x00000B3B _02241D30: .word 0x00000000 -_02241D34: .word UNK_020FFA38 +_02241D34: .word FX_SinCosTable_ thumb_func_end MOD18_02241AD0 thumb_func_start MOD18_02241D38 @@ -18343,7 +18343,7 @@ MOD18_02242320: ; 0x02242320 ldrh r0, [r2, r1] asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _022423AC ; =UNK_020FFA38 + ldr r0, _022423AC ; =FX_SinCosTable_ ldrsh r1, [r0, r1] mov r0, #1 lsl r0, r0, #0xc @@ -18373,7 +18373,7 @@ _022423A4: pop {r4, r5, pc} .align 2, 0 _022423A8: .word MOD18_022513A0 -_022423AC: .word UNK_020FFA38 +_022423AC: .word FX_SinCosTable_ thumb_func_end MOD18_02242320 thumb_func_start MOD18_022423B0 @@ -18529,7 +18529,7 @@ _022424D4: ldrh r0, [r4, #0x1c] asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _02242594 ; =UNK_020FFA38 + ldr r0, _02242594 ; =FX_SinCosTable_ ldrsh r1, [r0, r1] ldr r0, [r5, #0x48] sub r0, r0, r1 @@ -18538,7 +18538,7 @@ _022424D4: ldr r0, [r5, #0x44] asr r1, r1, #4 lsl r2, r1, #2 - ldr r1, _02242594 ; =UNK_020FFA38 + ldr r1, _02242594 ; =FX_SinCosTable_ add r2, r1, r2 mov r1, #2 ldrsh r1, [r2, r1] @@ -18616,7 +18616,7 @@ _02242584: .word 0x00000000 _02242588: .word MOD18_022500C0 _0224258C: .word 0x00000626 _02242590: .word MOD18_022513A0 -_02242594: .word UNK_020FFA38 +_02242594: .word FX_SinCosTable_ _02242598: .word 0x0000FFFF thumb_func_end MOD18_022423B0 @@ -21387,7 +21387,7 @@ _02243B16: str r0, [sp, #0x24] add r0, sp, #0x1c add r1, sp, #0x18 - bl FUN_020BB408 + bl NNS_G3dWorldPosToScrPos ldr r0, [sp, #0x18] lsl r0, r0, #0xc str r0, [sp, #0x1c] diff --git a/arm9/modules/20/asm/module_20.s b/arm9/modules/20/asm/module_20.s index ee93d317..6b339173 100644 --- a/arm9/modules/20/asm/module_20.s +++ b/arm9/modules/20/asm/module_20.s @@ -1223,7 +1223,7 @@ MOD20_02252C5C: ; 0x02252C5C lsl r0, r0, #4 str r7, [r4, r0] ldr r0, [r4, r0] - bl FUN_020B0888 + bl NNS_G2dResetOamManagerBuffer mov r0, #0x15 lsl r0, r0, #4 ldr r0, [r4, r0] @@ -3062,7 +3062,7 @@ _02253A4E: bl NARC_ReadFromMember add r0, r7, #0 add r1, sp, #0x20 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #0x20] add r1, r5, #0 ldr r0, [r0, #0x14] @@ -3239,7 +3239,7 @@ MOD20_02253BA4: ; 0x02253BA4 str r7, [r4] str r5, [r4, #0x18] add r0, r7, #0 - bl FUN_020B0830 + bl NNS_G2dGetOamManagerOamCapacity strh r0, [r4, #0x10] ldrh r1, [r4, #0x10] add r0, r5, #0 @@ -3354,7 +3354,7 @@ _02253C96: mov r1, #2 add r0, #8 lsl r1, r1, #0xc - bl FUN_020B1EC4 + bl NNS_G2dTickCellAnimation add r0, r4, #0 add r0, #0x86 ldrb r0, [r0] @@ -3391,7 +3391,7 @@ _02253CAE: ldr r2, [r4, #0x34] add r0, r5, #0 lsr r1, r1, #0x10 - bl FUN_020B1AF8 + bl NNS_G2dMakeCellToOams b _02253D86 _02253CEE: ldr r0, [r4, #0x6c] @@ -3404,7 +3404,7 @@ _02253CEE: add r0, #0x8c ldrh r2, [r6, #0x10] ldrh r0, [r0] - ldr r1, _02253E58 ; =UNK_020FFA38 + ldr r1, _02253E58 ; =FX_SinCosTable_ add r0, r2, r0 lsl r0, r0, #0x10 lsr r0, r0, #0x10 @@ -3425,7 +3425,7 @@ _02253D20: beq _02253D3E asr r0, r0, #4 lsl r3, r0, #2 - ldr r1, _02253E58 ; =UNK_020FFA38 + ldr r1, _02253E58 ; =FX_SinCosTable_ ldr r0, [r4, #0x6c] add r2, r1, r3 ldrsh r1, [r1, r3] @@ -3452,7 +3452,7 @@ _02253D62: ldr r0, [sp, #0xc] ldr r1, [r4, #0x6c] ldr r0, [r0] - bl FUN_020B0BB0 + bl NNS_G2dEntryOamManagerAffine add r1, sp, #0x18 str r1, [sp] str r0, [sp, #4] @@ -3464,7 +3464,7 @@ _02253D62: ldr r3, [r4, #0x6c] add r0, r5, #0 lsr r1, r1, #0x10 - bl FUN_020B1AF8 + bl NNS_G2dMakeCellToOams _02253D86: ldr r1, [sp, #0x10] sub r1, r1, r0 @@ -3569,12 +3569,12 @@ _02253E38: lsl r2, r2, #0xd ldr r0, [r0] lsr r2, r2, #0x10 - bl FUN_020B0D58 + bl NNS_G2dEntryOamManagerOam _02253E52: add sp, #0x20 pop {r3, r4, r5, r6, r7, pc} nop -_02253E58: .word UNK_020FFA38 +_02253E58: .word FX_SinCosTable_ _02253E5C: .word 0xDFFFFFFF _02253E60: .word 0xFFFFF3FF _02253E64: .word 0xFFFF0FFF @@ -3607,12 +3607,12 @@ MOD20_02253E74: ; 0x02253E74 ldr r0, [r6, #0xc] str r0, [r4, #4] ldrh r1, [r5, #8] - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx add r1, r0, #0 add r0, r4, #0 ldr r2, [r4] add r0, #8 - bl FUN_020B1F80 + bl NNS_G2dInitCellAnimation ldr r1, [r5] ldr r0, [r5, #4] str r1, [r4, #0x64] @@ -3686,12 +3686,12 @@ MOD20_02253F28: ; 0x02253F28 lsl r1, r1, #0x10 ldr r0, [r4, #4] lsr r1, r1, #0x10 - bl FUN_020AFC04 + bl NNS_G2dGetAnimSequenceByIdx add r1, r0, #0 add r0, r4, #0 ldr r2, [r4] add r0, #8 - bl FUN_020B1F80 + bl NNS_G2dInitCellAnimation pop {r4, pc} thumb_func_end MOD20_02253F28 @@ -3820,7 +3820,7 @@ MOD20_02253FBC: ; 0x02253FBC beq _0225400E add r1, r5, #0 add r1, #8 - bl FUN_020AFEB8 + bl NNS_G2dGetUnpackedCellBank cmp r0, #0 bne _02253FFC mov r0, #0 @@ -3829,7 +3829,7 @@ _02253FFC: ldr r0, [r5, #4] add r5, #0xc add r1, r5, #0 - bl thunk_FUN_020afda0 + bl NNS_G2dGetUnpackedMCAnimBank cmp r0, #0 bne _0225400E mov r0, #0 diff --git a/arm9/modules/27/asm/module_27.s b/arm9/modules/27/asm/module_27.s index 7d7fa32a..0bb87572 100644 --- a/arm9/modules/27/asm/module_27.s +++ b/arm9/modules/27/asm/module_27.s @@ -1015,7 +1015,7 @@ _02254FFC: bl NARC_ReadFromMember ldr r0, [sp, #0x18] add r1, sp, #0x20 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #0x20] mov r1, #2 ldr r0, [r0, #0x14] diff --git a/arm9/modules/28/asm/module_28.s b/arm9/modules/28/asm/module_28.s index 618309d1..07792caf 100644 --- a/arm9/modules/28/asm/module_28.s +++ b/arm9/modules/28/asm/module_28.s @@ -670,7 +670,7 @@ _02254D24: bl NARC_AllocAndReadWholeMember add r1, sp, #0x2c str r0, [sp, #0x20] - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, [sp, #0x2c] mov r1, #1 ldr r0, [r0, #0x14] diff --git a/arm9/modules/53/asm/module_53.s b/arm9/modules/53/asm/module_53.s index f49ce02c..67dd59d4 100644 --- a/arm9/modules/53/asm/module_53.s +++ b/arm9/modules/53/asm/module_53.s @@ -898,7 +898,7 @@ MOD53_021D7C84: ; 0x021D7C84 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r5, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s index 1131a268..0469af07 100644 --- a/arm9/modules/54/asm/module_54.s +++ b/arm9/modules/54/asm/module_54.s @@ -819,7 +819,7 @@ MOD54_021D7BBC: ; 0x021D7BBC push {r4, r5, r6, r7, lr} sub sp, #0x14 add r6, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index c221c2d0..d9a9cad6 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -865,7 +865,7 @@ MOD55_021D7C20: ; 0x021D7C20 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r5, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e @@ -4013,7 +4013,7 @@ _021D9570: .word MOD55_021DA314 thumb_func_start MOD55_021D9574 MOD55_021D9574: ; 0x021D9574 push {r3, lr} - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack mov r0, #1 add r1, r0, #0 @@ -4807,7 +4807,7 @@ MOD55_021D9C50: ; 0x021D9C50 add r4, r1, #0 bl G3X_ResetMtxStack bl G3X_ResetMtxStack_2 - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera add r0, r5, #0 add r0, #0xdc ldr r0, [r0] @@ -4862,7 +4862,7 @@ MOD55_021D9CC4: ; 0x021D9CC4 add r4, r1, #0 bl G3X_ResetMtxStack bl G3X_ResetMtxStack_2 - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera add r0, r5, #0 add r0, #0xdc ldr r0, [r0] diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 8626dac2..e9abf575 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -1085,7 +1085,7 @@ MOD56_022126E0: ; 0x022126E0 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r6, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e diff --git a/arm9/modules/57/asm/module_57.s b/arm9/modules/57/asm/module_57.s index 463396ab..4f7db66f 100644 --- a/arm9/modules/57/asm/module_57.s +++ b/arm9/modules/57/asm/module_57.s @@ -1022,7 +1022,7 @@ _021D7D4C: ldr r0, [r4, r1] add r1, r1, #4 add r1, r4, r1 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 bne _021D7D60 bl ErrorHandling @@ -1076,7 +1076,7 @@ _021D7DBC: ldr r0, [r4, r1] add r1, r1, #4 add r1, r4, r1 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 bne _021D7DD0 bl ErrorHandling @@ -3573,7 +3573,7 @@ MOD57_021D9184: ; 0x021D9184 sub sp, #0x3c add r7, r0, #0 bl MOD57_021D9578 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -3709,7 +3709,7 @@ _021D9290: beq _021D92CA ldr r1, [sp, #0x18] add r1, r1, r6 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0 bne _021D92CE mov r0, #0x1e @@ -4024,7 +4024,7 @@ _021D9536: ldr r0, [r1, r0] bl FUN_02020354 mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation str r0, [sp] lsl r0, r4, #5 str r0, [sp, #4] diff --git a/arm9/modules/58/asm/module_58.s b/arm9/modules/58/asm/module_58.s index 7f3bd998..b47aeeba 100644 --- a/arm9/modules/58/asm/module_58.s +++ b/arm9/modules/58/asm/module_58.s @@ -715,7 +715,7 @@ MOD58_021DA044: ; 0x021DA044 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r5, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e diff --git a/arm9/modules/60/asm/module_60.s b/arm9/modules/60/asm/module_60.s index fa7752a8..8c6d04fc 100644 --- a/arm9/modules/60/asm/module_60.s +++ b/arm9/modules/60/asm/module_60.s @@ -403,7 +403,7 @@ MOD60_021D77D4: ; 0x021D77D4 str r0, [r4, #0x10] _021D7804: bl FUN_0200BC30 - bl FUN_020AEEB8 + bl NNS_GfdDoVramTransfer ldr r0, [r4, #0x14] bl FUN_0201AB60 ldr r3, _021D782C ; =0x027E0000 @@ -688,7 +688,7 @@ MOD60_021D7A40: ; 0x021D7A40 bl NARC_ReadWholeMember add r0, r6, #0 add r1, sp, #0x20 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r3, [sp, #0x20] mov r1, #0 str r1, [sp] @@ -719,7 +719,7 @@ MOD60_021D7A40: ; 0x021D7A40 bl NARC_ReadWholeMember add r0, r6, #0 add r1, sp, #0x1c - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r1, [sp, #0x1c] mov r0, #0 ldr r1, [r1, #0xc] @@ -748,7 +748,7 @@ MOD60_021D7A40: ; 0x021D7A40 add r1, r5, #0 ldr r0, [r5, #0x24] add r1, #0x28 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData add r0, r4, #0 bl NARC_dtor mov r3, #0 diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s index 54af7ce1..ed9e0e05 100644 --- a/arm9/modules/61/asm/module_61.s +++ b/arm9/modules/61/asm/module_61.s @@ -737,7 +737,7 @@ _021D7A7A: beq _021D7A88 bl FUN_0200BC30 _021D7A88: - bl FUN_020AEEB8 + bl NNS_GfdDoVramTransfer ldr r0, [r4, #0x18] bl FUN_0201AB60 ldr r3, _021D7AA0 ; =0x027E0000 @@ -1087,7 +1087,7 @@ MOD61_021D7CE8: ; 0x021D7CE8 bl NARC_ReadWholeMember add r0, r7, #0 add r1, sp, #0x28 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r3, [sp, #0x28] mov r0, #0 str r0, [sp] @@ -1119,7 +1119,7 @@ MOD61_021D7CE8: ; 0x021D7CE8 bl NARC_ReadWholeMember add r0, r4, #0 add r1, sp, #0x24 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r2, [sp, #0x24] mov r0, #4 ldr r1, [r2, #0xc] @@ -1253,7 +1253,7 @@ _021D7E00: add r1, r5, #0 ldr r0, [r5, #0x34] add r1, #0x3c - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData mov r0, #0x4f mov r1, #0x24 bl GetNarcMemberSizeByIdPair @@ -1268,7 +1268,7 @@ _021D7E00: add r1, r5, #0 ldr r0, [r5, #0x38] add r1, #0x40 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData add r0, r6, #0 bl NARC_dtor mov r3, #0 diff --git a/arm9/modules/62/asm/module_62.s b/arm9/modules/62/asm/module_62.s index f1eb2a70..3d0ee0fd 100644 --- a/arm9/modules/62/asm/module_62.s +++ b/arm9/modules/62/asm/module_62.s @@ -1815,14 +1815,14 @@ _0222E35C: .word 0x04000580 thumb_func_start MOD62_0222E360 MOD62_0222E360: ; 0x0222E360 push {r3, r4, r5, lr} - ldr r3, _0222E398 ; =UNK_021064B8 + ldr r3, _0222E398 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _0222E39C ; =UNK_021064C0 + ldr r3, _0222E39C ; =NNS_GfdDefaultFuncAllocPlttVram mov r1, #0 add r4, r0, #0 ldr r3, [r3] @@ -1841,8 +1841,8 @@ _0222E390: bl FUN_02012CC8 pop {r3, r4, r5, pc} nop -_0222E398: .word UNK_021064B8 -_0222E39C: .word UNK_021064C0 +_0222E398: .word NNS_GfdDefaultFuncAllocTexVram +_0222E39C: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_end MOD62_0222E360 thumb_func_start MOD62_0222E3A0 @@ -1853,7 +1853,7 @@ MOD62_0222E3A0: ; 0x0222E3A0 cmp r0, #0 ble _0222E3B6 bl FUN_020222AC - bl FUN_020B02C8 + bl NNS_G2dSetupSoftwareSpriteCamera _0222E3B6: bl FUN_02013388 mov r0, #1 diff --git a/arm9/modules/63/asm/mod63_021D74E0.s b/arm9/modules/63/asm/mod63_021D74E0.s index 11daacd0..ab30c4e0 100644 --- a/arm9/modules/63/asm/mod63_021D74E0.s +++ b/arm9/modules/63/asm/mod63_021D74E0.s @@ -519,24 +519,24 @@ MOD63_021D78BC: ; 0x021D78BC bl FUN_0201B234 ldr r0, [r5, #0x60] mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx add r4, r0, #0 add r0, r5, #0 ldr r2, [r5, #0x58] add r0, #0x68 add r1, r4, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r5, #0x64] ldr r0, [r5, #0x5c] - bl FUN_020BC0FC + bl NNS_G3dGetTex add r3, r0, #0 ldr r0, [r5, #0x64] ldr r2, [r5, #0x58] add r1, r4, #0 - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r5, #0x64] add r0, r5, #4 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r4, r5, #0 add r6, sp, #0xc mov r3, #0 @@ -579,7 +579,7 @@ MOD63_021D7970: ; 0x021D7970 add r4, r0, #0 ldr r1, [r4, #0x64] add r0, #0x68 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj ldr r0, [r4, #0x60] bl FreeToHeap ldr r0, [r4, #0x5c] @@ -1006,10 +1006,10 @@ _021D7C52: ldrsh r2, [r5, r2] ldrsh r3, [r5, r3] mov r0, #0 - bl FUN_020B8418 + bl NNS_G3dGlbLightVector ldr r1, _021D7D68 ; =0x00007FFF mov r0, #0 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor ldr r3, _021D7D6C ; =0x0000010E mov r0, #1 add r2, r3, #2 @@ -1017,10 +1017,10 @@ _021D7C52: add r3, r3, #4 ldrsh r2, [r5, r2] ldrsh r3, [r5, r3] - bl FUN_020B8418 + bl NNS_G3dGlbLightVector ldr r1, _021D7D68 ; =0x00007FFF mov r0, #1 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor ldr r2, _021D7D60 ; =0x04000060 ldr r0, _021D7D64 ; =0xFFFFCFFF ldrh r1, [r2] @@ -1770,7 +1770,7 @@ _021D8272: str r1, [r0] ldr r1, _021D835C ; =0x00007FFF mov r0, #1 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor add r0, r5, #0 add r1, r4, #0 add r0, #0xa8 @@ -2260,7 +2260,7 @@ _021D86B2: lsl r1, r1, #0x10 mov r0, #1 lsr r1, r1, #0x10 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor pop {r4, pc} .align 2, 0 _021D86DC: .word 0x00000116 diff --git a/arm9/modules/63/asm/mod63_021D8890.s b/arm9/modules/63/asm/mod63_021D8890.s index e501157b..ccd31d01 100644 --- a/arm9/modules/63/asm/mod63_021D8890.s +++ b/arm9/modules/63/asm/mod63_021D8890.s @@ -417,14 +417,14 @@ MOD63_021D8BD8: ; 0x021D8BD8 add r3, r1, #0 bl FUN_02022318 str r0, [r4, #0x10] - ldr r3, _021D8C18 ; =UNK_021064B8 + ldr r3, _021D8C18 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #2 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _021D8C1C ; =UNK_021064C0 + ldr r3, _021D8C1C ; =NNS_GfdDefaultFuncAllocPlttVram mov r0, #0x80 ldr r3, [r3] mov r1, #0 @@ -434,8 +434,8 @@ MOD63_021D8BD8: ; 0x021D8BD8 pop {r4, pc} nop _021D8C14: .word MOD63_021D8C20 -_021D8C18: .word UNK_021064B8 -_021D8C1C: .word UNK_021064C0 +_021D8C18: .word NNS_GfdDefaultFuncAllocTexVram +_021D8C1C: .word NNS_GfdDefaultFuncAllocPlttVram thumb_func_end MOD63_021D8BD8 thumb_func_start MOD63_021D8C20 @@ -1565,11 +1565,11 @@ _021D950C: asr r1, r1, #0x10 asr r2, r2, #0x10 asr r3, r3, #0x10 - bl FUN_020B8418 + bl NNS_G3dGlbLightVector lsl r1, r4, #1 ldrh r1, [r7, r1] add r0, r4, #0 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor add r0, r4, #1 lsl r0, r0, #0x18 lsr r4, r0, #0x18 @@ -1578,11 +1578,11 @@ _021D950C: ldr r0, _021D9594 ; =0x00004210 ldr r1, _021D9598 ; =0x0000318A mov r2, #0 - bl FUN_020B83E0 + bl NNS_G3dGlbMaterialColorDiffAmb ldr r0, _021D959C ; =0x00004A52 ldr r1, _021D95A0 ; =0x000039CE mov r2, #0 - bl FUN_020B83BC + bl NNS_G3dGlbMaterialColorSpecEmi mov r0, #0x1f str r0, [sp] mov r0, #2 @@ -1592,7 +1592,7 @@ _021D950C: mov r0, #0xd mov r2, #2 add r3, r1, #0 - bl FUN_020B8390 + bl NNS_G3dGlbPolygonAttr ldr r0, _021D95A4 ; =MOD63_021D8CB0 add r1, r5, #0 bl Main_SetVBlankIntrCB @@ -1767,7 +1767,7 @@ _021D96C6: beq _021D96F4 ldr r1, [sp, #0x14] add r1, r1, r7 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0 bne _021D96F8 ldr r0, [r6, #0x2c] @@ -1912,7 +1912,7 @@ MOD63_021D9810: ; 0x021D9810 mov r2, #0x4c bl AllocAndReadWholeNarcMemberByIdPair str r0, [r5, #0x3c] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r5, #0x40] bl FUN_0201B3C4 cmp r0, #0 @@ -1965,7 +1965,7 @@ _021D9890: add r0, r5, r6 add r0, #0x9c ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrb r0, [r0, #9] cmp r0, #1 beq _021D98A4 @@ -1974,7 +1974,7 @@ _021D98A4: add r0, r5, r6 add r0, #0x9c ldr r0, [r0] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet ldrh r1, [r0, #0xe] add r1, r0, r1 ldr r1, [r1, #0xc] @@ -1985,29 +1985,29 @@ _021D98BC: ldr r0, [sp, #0x10] add r1, r4, #0 add r0, r0, r6 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit add r0, r4, #0 mov r1, #0 mov r2, #0x40 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag add r0, r4, #0 mov r1, #0 mov r2, #0x80 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag mov r2, #2 add r0, r4, #0 mov r1, #0 lsl r2, r2, #8 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag mov r2, #1 add r0, r4, #0 mov r1, #0 lsl r2, r2, #0xa - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag add r0, r4, #0 mov r1, #0 mov r2, #0xf - bl FUN_020BC02C + bl NNSi_G3dModifyPolygonAttrMask add r0, r7, #1 lsl r0, r0, #0x18 lsr r7, r0, #0x18 @@ -3038,7 +3038,7 @@ MOD63_021DA158: ; 0x021DA158 beq _021DA18E add r1, r4, #0 add r1, #0x14 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData cmp r0, #0 bne _021DA192 ldr r0, [r4, #0x14] diff --git a/arm9/modules/63/asm/mod63_021DA640.s b/arm9/modules/63/asm/mod63_021DA640.s index 6095d832..5bcdfbd2 100644 --- a/arm9/modules/63/asm/mod63_021DA640.s +++ b/arm9/modules/63/asm/mod63_021DA640.s @@ -108,7 +108,7 @@ MOD63_021DA6E8: ; 0x021DA6E8 orr r0, r1 str r0, [r2] bl MOD63_021DA640 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -876,7 +876,7 @@ MOD63_021DAD18: ; 0x021DAD18 add r6, r2, #0 bl FUN_02020354 mov r1, #1 - bl FUN_020B19C4 + bl NNS_G2dGetImagePaletteLocation add r7, r0, #0 cmp r6, #0 bne _021DAD44 diff --git a/arm9/modules/63/asm/mod63_021DAE5C.s b/arm9/modules/63/asm/mod63_021DAE5C.s index 52b453e2..77623c5c 100644 --- a/arm9/modules/63/asm/mod63_021DAE5C.s +++ b/arm9/modules/63/asm/mod63_021DAE5C.s @@ -239,7 +239,7 @@ MOD63_021DAFEC: ; 0x021DAFEC orr r0, r1 str r0, [r3] bl MOD63_021DAE5C - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c index 6f9e7036..84461fe1 100644 --- a/arm9/modules/63/src/mod63_021DB450.c +++ b/arm9/modules/63/src/mod63_021DB450.c @@ -5,8 +5,8 @@ #include "mod63_021DB450.h" //todo resolve to static code -extern u32 (*UNK_021064B8)(u32 param0, u32 param1, u32 param2); -extern u32 (*UNK_021064C0)(u32 param0, u32 param1, u32 param2); +extern u32 (*NNS_GfdDefaultFuncAllocTexVram)(u32 param0, u32 param1, u32 param2); +extern u32 (*NNS_GfdDefaultFuncAllocPlttVram)(u32 param0, u32 param1, u32 param2); extern void FUN_0201327C(u32 param0); extern void FUN_020132BC(u32 param0); @@ -29,7 +29,7 @@ extern void FUN_020072E8(struct UnkStruct63_021DB450 *); extern void FUN_020081C4(struct UnkStruct63_021DB450 *); extern void FUN_020222AC(void); -extern void FUN_020B02C8(void); +extern void NNS_G2dSetupSoftwareSpriteCamera(void); extern u32 FUN_02006ED4(struct UnkStruct63_021DB450 *); extern void FUN_020222B4(u32, u32); @@ -50,7 +50,7 @@ const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3]; THUMB_FUNC u32 MOD63_021DB450(u32 param0, u32 param1) { - u32 res0 = (UNK_021064B8)(param0, param1, 0); + u32 res0 = (NNS_GfdDefaultFuncAllocTexVram)(param0, param1, 0); FUN_0201327C(res0); GF_ASSERT(res0); return (u32)((u16)res0 * 8); @@ -58,7 +58,7 @@ THUMB_FUNC u32 MOD63_021DB450(u32 param0, u32 param1) THUMB_FUNC u32 MOD63_021DB474(u32 param0, u32 param1) { - u32 res0 = (UNK_021064C0)(param0, param1, 1); + u32 res0 = (NNS_GfdDefaultFuncAllocPlttVram)(param0, param1, 1); GF_ASSERT(res0); FUN_020132BC(res0); return (u32)((u16)res0 * 8); @@ -114,7 +114,7 @@ THUMB_FUNC void MOD63_021DB5A8(UnkStruct63_021DB450 *param0) return; } FUN_020222AC(); - FUN_020B02C8(); + NNS_G2dSetupSoftwareSpriteCamera(); (void)FUN_02006ED4(param0->field_00); MOD63_021DB934(); FUN_020222B4(1, 0); diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s index ce90e965..fa1d5be3 100644 --- a/arm9/modules/64/asm/module_64.s +++ b/arm9/modules/64/asm/module_64.s @@ -416,7 +416,7 @@ MOD64_021D785C: ; 0x021D785C push {r4, r5, lr} sub sp, #0x24 add r4, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -456,7 +456,7 @@ MOD64_021D78B4: ; 0x021D78B4 push {r3, r4, lr} sub sp, #4 add r4, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _021D7940 ; =0x04000060 ldr r1, _021D7944 ; =0xFFFFCFFD @@ -511,11 +511,11 @@ _021D7900: str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager add sp, #4 pop {r3, r4, pc} .align 2, 0 @@ -533,8 +533,8 @@ _021D7960: .word 0xBFFF0000 thumb_func_start MOD64_021D7964 MOD64_021D7964: ; 0x021D7964 push {r3, lr} - bl FUN_020AEAF4 - bl FUN_020AEC60 + bl NNS_GfdResetFrmTexVramState + bl NNS_GfdResetFrmPlttVramState pop {r3, pc} thumb_func_end MOD64_021D7964 @@ -741,13 +741,13 @@ MOD64_021D7B04: ; 0x021D7B04 mov r1, #2 lsl r1, r1, #8 str r0, [r5, r1] - ldr r3, _021D7BA4 ; =UNK_021064B8 + ldr r3, _021D7BA4 ; =NNS_GfdDefaultFuncAllocTexVram lsl r0, r1, #6 mov r1, #0 ldr r3, [r3] add r2, r1, #0 blx r3 - ldr r3, _021D7BA8 ; =UNK_021064C0 + ldr r3, _021D7BA8 ; =NNS_GfdDefaultFuncAllocPlttVram add r4, r0, #0 ldr r3, [r3] mov r0, #0x80 @@ -808,8 +808,8 @@ _021D7B8E: blt _021D7B8E pop {r3, r4, r5, r6, r7, pc} nop -_021D7BA4: .word UNK_021064B8 -_021D7BA8: .word UNK_021064C0 +_021D7BA4: .word NNS_GfdDefaultFuncAllocTexVram +_021D7BA8: .word NNS_GfdDefaultFuncAllocPlttVram _021D7BAC: .word 0x7FFF0000 _021D7BB0: .word 0xFFFF0000 thumb_func_end MOD64_021D7B04 @@ -1059,7 +1059,7 @@ MOD64_021D7D7C: ; 0x021D7D7C mov r0, #0x52 bl UncompressFromNarc str r0, [r4, #0x54] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet str r0, [r4, #0x58] ldrh r1, [r0, #0xe] add r1, r0, r1 @@ -1067,7 +1067,7 @@ MOD64_021D7D7C: ; 0x021D7D7C add r0, r0, r1 str r0, [r4, #0x5c] ldr r0, [r4, #0x54] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r4, #0x60] bl FUN_0201B3C4 ldr r0, [r4, #0x54] @@ -1075,7 +1075,7 @@ MOD64_021D7D7C: ; 0x021D7D7C bl FUN_0201B3A8 ldr r1, [r4, #0x5c] add r0, r4, #0 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit add sp, #4 pop {r3, r4, pc} thumb_func_end MOD64_021D7D7C @@ -1094,20 +1094,20 @@ MOD64_021D7DC0: ; 0x021D7DC0 bl UncompressFromNarc str r0, [r4, #0x64] mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx str r0, [r4, #0x68] ldr r1, [r4, #0x68] ldr r2, [r4, #0x5c] add r0, r5, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4, #0x6c] ldr r1, [r4, #0x68] ldr r2, [r4, #0x5c] ldr r3, [r4, #0x60] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit ldr r1, [r4, #0x6c] add r0, r4, #0 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add sp, #4 pop {r3, r4, r5, r6, pc} .align 2, 0 @@ -1128,7 +1128,7 @@ _021D7E14: beq _021D7E28 ldr r1, [r5, #0x6c] add r0, r4, #0 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj ldr r0, [r5, #0x64] bl FreeToHeap _021D7E28: @@ -1149,7 +1149,7 @@ MOD64_021D7E34: ; 0x021D7E34 add r0, r4, #0 add r0, #0x90 ldrh r0, [r0] - ldr r3, _021D7ECC ; =UNK_020FFA38 + ldr r3, _021D7ECC ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1166,7 +1166,7 @@ MOD64_021D7E34: ; 0x021D7E34 add r0, r4, #0 add r0, #0x92 ldrh r0, [r0] - ldr r3, _021D7ECC ; =UNK_020FFA38 + ldr r3, _021D7ECC ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1183,7 +1183,7 @@ MOD64_021D7E34: ; 0x021D7E34 add r0, r4, #0 add r0, #0x94 ldrh r0, [r0] - ldr r3, _021D7ECC ; =UNK_020FFA38 + ldr r3, _021D7ECC ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1211,7 +1211,7 @@ _021D7EC8: add sp, #0x48 pop {r4, pc} .align 2, 0 -_021D7ECC: .word UNK_020FFA38 +_021D7ECC: .word FX_SinCosTable_ thumb_func_end MOD64_021D7E34 thumb_func_start MOD64_021D7ED0 @@ -1442,18 +1442,18 @@ MOD64_021D8058: ; 0x021D8058 ldr r2, _021D809C ; =0xFFFFF000 add r1, r0, #0 add r3, r0, #0 - bl FUN_020B8418 + bl NNS_G3dGlbLightVector ldr r1, _021D80A0 ; =0x00007FFF mov r0, #0 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor ldr r0, _021D80A0 ; =0x00007FFF mov r2, #0 add r1, r0, #0 - bl FUN_020B83E0 + bl NNS_G3dGlbMaterialColorDiffAmb ldr r0, _021D80A0 ; =0x00007FFF mov r2, #0 add r1, r0, #0 - bl FUN_020B83BC + bl NNS_G3dGlbMaterialColorSpecEmi mov r0, #0x26 lsl r0, r0, #4 mov r4, #0 @@ -1634,9 +1634,9 @@ MOD64_021D81D8: ; 0x021D81D8 mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 - bl FUN_020BB394 - bl FUN_020B02C8 + bl NNS_G3dGeBufferOP_N + bl NNS_G3dGeFlushBuffer + bl NNS_G2dSetupSoftwareSpriteCamera mov r0, #2 lsl r0, r0, #8 ldr r0, [r4, r0] @@ -1648,11 +1648,11 @@ MOD64_021D81D8: ; 0x021D81D8 mov r0, #0x12 add r1, sp, #4 str r2, [sp, #4] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N bl FUN_0201EBA4 add r0, r4, #0 bl MOD64_021D8058 @@ -1660,7 +1660,7 @@ MOD64_021D81D8: ; 0x021D81D8 mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r0, #0 add r1, r0, #0 bl FUN_020222B4 @@ -2795,7 +2795,7 @@ MOD64_021D8A90: ; 0x021D8A90 lsr r0, r0, #0x10 asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _021D8ADC ; =UNK_020FFA38 + ldr r0, _021D8ADC ; =FX_SinCosTable_ ldr r2, [r4, #4] ldrsh r0, [r0, r1] asr r3, r2, #0x1f @@ -2818,7 +2818,7 @@ MOD64_021D8A90: ; 0x021D8A90 pop {r4, pc} nop _021D8AD8: .word 0x0000FFFF -_021D8ADC: .word UNK_020FFA38 +_021D8ADC: .word FX_SinCosTable_ thumb_func_end MOD64_021D8A90 thumb_func_start MOD64_021D8AE0 diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s index b3f219dc..e9e1ed78 100644 --- a/arm9/modules/65/asm/module_65.s +++ b/arm9/modules/65/asm/module_65.s @@ -5301,7 +5301,7 @@ MOD65_021D9E98: ; 0x021D9E98 mov r2, #0x1c add r5, r0, #0 bl MI_CpuFill8 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_Init bl G3X_InitMtxStack ldr r0, _021D9F34 ; =0x04000060 @@ -5388,8 +5388,8 @@ MOD65_021D9F50: ; 0x021D9F50 mov r0, #2 str r0, [r2] str r3, [r1] - bl FUN_020B849C - bl FUN_020B02C8 + bl NNS_G3dGlbFlushP + bl NNS_G2dSetupSoftwareSpriteCamera ldr r0, [r4, #4] bl FUN_02006ED4 ldr r0, _021D9F88 ; =0x04000540 diff --git a/arm9/modules/66/asm/module_66.s b/arm9/modules/66/asm/module_66.s index 0dda816f..2fc19d08 100644 --- a/arm9/modules/66/asm/module_66.s +++ b/arm9/modules/66/asm/module_66.s @@ -138,7 +138,7 @@ MOD66_021D75C8: ; 0x021D75C8 beq _021D75DE blx r1 _021D75DE: - bl FUN_020AEEB8 + bl NNS_GfdDoVramTransfer add r0, r4, #0 bl MOD66_021D9220 ldr r0, [r4, #0x28] diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s index d88f4eb8..b62037b8 100644 --- a/arm9/modules/69/asm/module_69.s +++ b/arm9/modules/69/asm/module_69.s @@ -686,7 +686,7 @@ MOD69_0222DB2C: ; 0x0222DB2C mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, _0222DB98 ; =0x00001B38 ldr r0, [r4, r0] bl MOD69_0222F11C @@ -694,11 +694,11 @@ MOD69_0222DB2C: ; 0x0222DB2C mov r0, #0x12 add r1, sp, #4 str r2, [sp, #4] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, _0222DB9C ; =0x00001B3C ldr r0, [r4, r0] bl MOD69_0222F63C @@ -706,7 +706,7 @@ MOD69_0222DB2C: ; 0x0222DB2C mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, _0222DBA0 ; =0x04000540 mov r1, #1 str r1, [r0] @@ -921,7 +921,7 @@ MOD69_0222DD54: ; 0x0222DD54 push {r3, r4, lr} sub sp, #4 add r4, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _0222DDE4 ; =0x04000060 ldr r2, _0222DDE8 ; =0xFFFFCFFD @@ -957,11 +957,11 @@ MOD69_0222DD54: ; 0x0222DD54 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager mov r0, #1 add r1, r0, #0 bl GX_EngineAToggleLayers @@ -1071,7 +1071,7 @@ MOD69_0222DE98: ; 0x0222DE98 push {r3, r4, lr} sub sp, #0x1c add r4, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -1193,19 +1193,19 @@ _0222DF72: str r0, [sp, #0x34] _0222DF98: add r0, sp, #0x5c - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, sp, #0x48 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy ldr r0, [sp, #0x44] add r1, r7, #0 mov r2, #1 add r3, sp, #0x5c - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping ldr r0, [sp, #0x40] add r1, r6, #0 mov r2, #1 add r3, sp, #0x48 - bl FUN_020B1240 + bl NNS_G2dLoadPalette ldr r0, [sp, #0x20] add r0, r0, #1 str r0, [sp, #0x94] @@ -1333,20 +1333,20 @@ _0222DF98: b _0222DF98 _0222E0D4: add r0, sp, #0x5c - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, sp, #0x48 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r1, #0x96 ldr r0, [sp, #0x44] lsl r1, r1, #8 mov r2, #1 add r3, sp, #0x5c - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping ldr r0, [sp, #0x40] mov r1, #0xc0 mov r2, #1 add r3, sp, #0x48 - bl FUN_020B1240 + bl NNS_G2dLoadPalette ldr r0, [sp, #0x14] ldr r0, [r0, #0xc] ldr r0, [r0] @@ -2169,7 +2169,7 @@ _0222E77E: str r0, [r3] add r0, r4, #0 add r0, #0x48 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0x19 add r0, r4, #0 lsl r3, r3, #8 @@ -2179,7 +2179,7 @@ _0222E77E: add r0, #0x48 mov r1, #1 add r2, r2, r3 - bl FUN_020B1A1C + bl NNS_G2dSetImageLocation ldr r0, _0222E7BC ; =MOD69_0222E7C0 add r1, r4, #0 mov r2, #0 @@ -3795,10 +3795,10 @@ _0222F408: mov r1, #1 bl G3B_LightVector ldrh r0, [r4, #0x28] - ldr r3, _0222F62C ; =UNK_020FFA38 + ldr r3, _0222F62C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _0222F62C ; =UNK_020FFA38 + ldr r0, _0222F62C ; =FX_SinCosTable_ add r2, r0, r1 ldrsh r1, [r3, r1] mov r3, #2 @@ -3810,10 +3810,10 @@ _0222F408: add r1, r5, #0 bl MTX_Concat44 ldrh r0, [r4, #0x2a] - ldr r3, _0222F62C ; =UNK_020FFA38 + ldr r3, _0222F62C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _0222F62C ; =UNK_020FFA38 + ldr r0, _0222F62C ; =FX_SinCosTable_ add r2, r0, r1 ldrsh r1, [r3, r1] mov r3, #2 @@ -3825,10 +3825,10 @@ _0222F408: add r1, r5, #0 bl MTX_Concat44 ldrh r0, [r4, #0x2c] - ldr r3, _0222F62C ; =UNK_020FFA38 + ldr r3, _0222F62C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r1, r0, #2 - ldr r0, _0222F62C ; =UNK_020FFA38 + ldr r0, _0222F62C ; =FX_SinCosTable_ add r2, r0, r1 ldrsh r1, [r3, r1] mov r3, #2 @@ -3950,7 +3950,7 @@ _0222F61C: .word 0x0000019A _0222F620: .word 0x00002D6B _0222F624: .word 0x00000FFF _0222F628: .word 0xFFFFF001 -_0222F62C: .word UNK_020FFA38 +_0222F62C: .word FX_SinCosTable_ _0222F630: .word 0x00007FFF _0222F634: .word 0x00008D1C _0222F638: .word 0x0000151C diff --git a/arm9/modules/70/asm/module_70.s b/arm9/modules/70/asm/module_70.s index eb5ef973..f6d3dc58 100644 --- a/arm9/modules/70/asm/module_70.s +++ b/arm9/modules/70/asm/module_70.s @@ -407,7 +407,7 @@ MOD70_021D77CC: ; 0x021D77CC mov r0, #0x3d bl FUN_02016B94 str r0, [r4, #0x10] - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -1462,19 +1462,19 @@ MOD70_021D7FF8: ; 0x021D7FF8 add r7, r4, #0 _021D8050: add r0, sp, #0x2c - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, sp, #0x18 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy ldr r0, [sp, #0x14] add r1, r4, #0 mov r2, #1 add r3, sp, #0x2c - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping ldr r0, [sp, #0x10] add r1, r7, #0 mov r2, #1 add r3, sp, #0x18 - bl FUN_020B1240 + bl NNS_G2dLoadPalette ldr r0, [r6] lsl r0, r0, #0xc str r0, [sp, #0x58] diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index d5c1ec6f..b9d99cf4 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -2224,7 +2224,7 @@ MOD71_0222E884: ; 0x0222E884 add r6, r0, #0 beq _0222E8D6 add r1, sp, #4 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData cmp r0, #0 beq _0222E8D0 ldr r0, [sp, #0x1c] @@ -2449,7 +2449,7 @@ MOD71_0222EA68: ; 0x0222EA68 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r5, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7f diff --git a/arm9/modules/73/asm/module_73.s b/arm9/modules/73/asm/module_73.s index 4a086c51..f00d35cf 100644 --- a/arm9/modules/73/asm/module_73.s +++ b/arm9/modules/73/asm/module_73.s @@ -2366,9 +2366,9 @@ MOD73_021D8858: ; 0x021D8858 mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 - bl FUN_020BB394 - bl FUN_020B02C8 + bl NNS_G3dGeBufferOP_N + bl NNS_G3dGeFlushBuffer + bl NNS_G2dSetupSoftwareSpriteCamera mov r0, #0xaf lsl r0, r0, #2 ldr r0, [r4, r0] @@ -2380,7 +2380,7 @@ _021D8882: mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r0, #0 add r1, r0, #0 bl FUN_020222B4 @@ -2595,7 +2595,7 @@ MOD73_021D8A18: ; 0x021D8A18 push {r4, r5, lr} sub sp, #0x24 add r4, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -2754,7 +2754,7 @@ _021D8B3A: MOD73_021D8B4C: ; 0x021D8B4C push {r3, r4, lr} sub sp, #4 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _021D8BB8 ; =0x04000060 ldr r2, _021D8BBC ; =0xFFFFCFFD @@ -2793,11 +2793,11 @@ MOD73_021D8B4C: ; 0x021D8B4C str r0, [r2] str r1, [r2, #0x40] mov r1, #1 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #2 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager add sp, #4 pop {r3, r4, pc} nop @@ -2812,8 +2812,8 @@ _021D8BCC: .word 0xBFFF0000 thumb_func_start MOD73_021D8BD0 MOD73_021D8BD0: ; 0x021D8BD0 push {r3, lr} - bl FUN_020AEAF4 - bl FUN_020AEC60 + bl NNS_GfdResetFrmTexVramState + bl NNS_GfdResetFrmPlttVramState pop {r3, pc} thumb_func_end MOD73_021D8BD0 @@ -6738,7 +6738,7 @@ _021DA906: str r0, [sp, #0x6c] asr r0, r0, #0x1f lsl r3, r2, #1 - ldr r1, _021DAAA0 ; =UNK_020FFA38 + ldr r1, _021DAAA0 ; =FX_SinCosTable_ str r0, [sp, #0x70] ldr r0, [sp, #0xa8] ldrsh r6, [r1, r3] @@ -6904,7 +6904,7 @@ _021DA906: pop {r3, r4, r5, r6, r7, pc} nop _021DAA9C: .word MOD73_021DBE7C -_021DAAA0: .word UNK_020FFA38 +_021DAAA0: .word FX_SinCosTable_ _021DAAA4: .word 0x0000019A thumb_func_end MOD73_021DA8BC @@ -7130,7 +7130,7 @@ _021DABFC: lsl r4, r0, #1 add r0, r4, #1 lsl r1, r0, #1 - ldr r0, _021DAC98 ; =UNK_020FFA38 + ldr r0, _021DAC98 ; =FX_SinCosTable_ add r2, r6, #0 ldrsh r0, [r0, r1] add r3, r7, #0 @@ -7146,7 +7146,7 @@ _021DABFC: lsr r0, r0, #0xc orr r0, r1 str r0, [sp] - ldr r0, _021DAC98 ; =UNK_020FFA38 + ldr r0, _021DAC98 ; =FX_SinCosTable_ lsl r1, r4, #1 ldrsh r0, [r0, r1] add r2, r6, #0 @@ -7177,7 +7177,7 @@ _021DAC94: add sp, #0xc pop {r4, r5, r6, r7, pc} .align 2, 0 -_021DAC98: .word UNK_020FFA38 +_021DAC98: .word FX_SinCosTable_ thumb_func_end MOD73_021DABD0 thumb_func_start MOD73_021DAC9C @@ -7706,7 +7706,7 @@ MOD73_021DB020: ; 0x021DB020 asr r0, r0, #4 lsl r1, r0, #1 add r0, r1, #1 - ldr r7, _021DB124 ; =UNK_020FFA38 + ldr r7, _021DB124 ; =FX_SinCosTable_ lsl r0, r0, #1 ldrsh r3, [r7, r0] asr r6, r3, #0x1f @@ -7819,7 +7819,7 @@ _021DB112: add sp, #0x1c pop {r4, r5, r6, r7, pc} nop -_021DB124: .word UNK_020FFA38 +_021DB124: .word FX_SinCosTable_ _021DB128: .word 0x00000000 thumb_func_end MOD73_021DB020 diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s index 0189a34d..651527c1 100644 --- a/arm9/modules/74/asm/module_74.s +++ b/arm9/modules/74/asm/module_74.s @@ -341,7 +341,7 @@ MOD74_021D7784: ; 0x021D7784 push {r4, lr} add r4, r0, #0 bl MOD74_021D82E8 - bl FUN_020AEEB8 + bl NNS_GfdDoVramTransfer ldr r0, [r4, #0x10] bl FUN_0201AB60 ldr r3, _021D77A4 ; =0x027E0000 diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s index 82294cbf..f84a1de7 100644 --- a/arm9/modules/75/asm/module_75.s +++ b/arm9/modules/75/asm/module_75.s @@ -7834,7 +7834,7 @@ MOD75_021EA950: ; 0x021EA950 bl NARC_AllocAndReadWholeMember add r1, r5, #0 add r4, r0, #0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData add r0, r4, #0 pop {r3, r4, r5, pc} thumb_func_end MOD75_021EA950 @@ -8587,7 +8587,7 @@ MOD75_021EAF54: ; 0x021EAF54 bl NARC_AllocAndReadWholeMember add r1, r5, #0 add r4, r0, #0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData add r0, r4, #0 pop {r3, r4, r5, pc} thumb_func_end MOD75_021EAF54 diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s index 4dce464f..bdbf644f 100644 --- a/arm9/modules/77/asm/module_77.s +++ b/arm9/modules/77/asm/module_77.s @@ -2554,7 +2554,7 @@ MOD77_021D89F4: ; 0x021D89F4 asr r1, r1, #0x10 asr r2, r2, #0x10 asr r3, r3, #0x10 - bl FUN_020B8418 + bl NNS_G3dGlbLightVector pop {r4, pc} nop _021D8A28: .word 0x0000C2DC @@ -2567,7 +2567,7 @@ MOD77_021D8A30: ; 0x021D8A30 sub sp, #0x24 add r4, r1, #0 ldr r1, [r4, #4] - ldr r3, _021D8AA4 ; =UNK_020FFA38 + ldr r3, _021D8AA4 ; =FX_SinCosTable_ lsl r1, r1, #0x10 lsr r1, r1, #0x10 asr r1, r1, #4 @@ -2580,7 +2580,7 @@ MOD77_021D8A30: ; 0x021D8A30 add r5, r0, #0 bl MTX_RotY33_ ldr r0, [r4] - ldr r3, _021D8AA4 ; =UNK_020FFA38 + ldr r3, _021D8AA4 ; =FX_SinCosTable_ lsl r0, r0, #0x10 lsr r0, r0, #0x10 asr r0, r0, #4 @@ -2597,7 +2597,7 @@ MOD77_021D8A30: ; 0x021D8A30 add r2, r5, #0 bl MTX_Concat33 ldr r0, [r4, #8] - ldr r3, _021D8AA4 ; =UNK_020FFA38 + ldr r3, _021D8AA4 ; =FX_SinCosTable_ lsl r0, r0, #0x10 lsr r0, r0, #0x10 asr r0, r0, #4 @@ -2616,7 +2616,7 @@ MOD77_021D8A30: ; 0x021D8A30 add sp, #0x24 pop {r4, r5, pc} nop -_021D8AA4: .word UNK_020FFA38 +_021D8AA4: .word FX_SinCosTable_ thumb_func_end MOD77_021D8A30 thumb_func_start MOD77_021D8AA8 @@ -2625,7 +2625,7 @@ MOD77_021D8AA8: ; 0x021D8AA8 sub sp, #0x24 add r4, r1, #0 ldr r1, [r4] - ldr r3, _021D8B1C ; =UNK_020FFA38 + ldr r3, _021D8B1C ; =FX_SinCosTable_ lsl r1, r1, #0x10 lsr r1, r1, #0x10 asr r1, r1, #4 @@ -2638,7 +2638,7 @@ MOD77_021D8AA8: ; 0x021D8AA8 add r5, r0, #0 bl MTX_RotY33_ ldr r0, [r4, #4] - ldr r3, _021D8B1C ; =UNK_020FFA38 + ldr r3, _021D8B1C ; =FX_SinCosTable_ neg r0, r0 lsl r0, r0, #0x10 lsr r0, r0, #0x10 @@ -2656,7 +2656,7 @@ MOD77_021D8AA8: ; 0x021D8AA8 add r2, r5, #0 bl MTX_Concat33 ldr r0, [r4, #8] - ldr r3, _021D8B1C ; =UNK_020FFA38 + ldr r3, _021D8B1C ; =FX_SinCosTable_ lsl r0, r0, #0x10 lsr r0, r0, #0x10 asr r0, r0, #4 @@ -2675,7 +2675,7 @@ MOD77_021D8AA8: ; 0x021D8AA8 add sp, #0x24 pop {r4, r5, pc} .align 2, 0 -_021D8B1C: .word UNK_020FFA38 +_021D8B1C: .word FX_SinCosTable_ thumb_func_end MOD77_021D8AA8 thumb_func_start MOD77_021D8B20 diff --git a/arm9/modules/78/asm/module_78.s b/arm9/modules/78/asm/module_78.s index 5d9f4625..7fc7439a 100644 --- a/arm9/modules/78/asm/module_78.s +++ b/arm9/modules/78/asm/module_78.s @@ -66,13 +66,13 @@ _021D7558: ldrsh r2, [r3, r7] ldrsh r3, [r3, r6] add r0, r4, #0 - bl FUN_020B8418 + bl NNS_G3dGlbLightVector ldr r2, [r5, #4] lsl r1, r4, #1 add r1, r2, r1 ldrh r1, [r1, #0x18] add r0, r4, #0 - bl FUN_020B8404 + bl NNS_G3dGlbLightColor add r0, r4, #1 lsl r0, r0, #0x18 lsr r4, r0, #0x18 @@ -82,12 +82,12 @@ _021D7558: ldrh r0, [r2, #0x20] ldrh r1, [r2, #0x22] ldr r2, [r2, #0x28] - bl FUN_020B83E0 + bl NNS_G3dGlbMaterialColorDiffAmb ldr r2, [r5, #4] ldrh r0, [r2, #0x24] ldrh r1, [r2, #0x26] ldr r2, [r2, #0x2c] - bl FUN_020B83BC + bl NNS_G3dGlbMaterialColorSpecEmi ldr r3, [r5, #4] ldr r0, [r3, #0x40] str r0, [sp] @@ -97,7 +97,7 @@ _021D7558: ldr r1, [r3, #0x34] ldr r2, [r3, #0x38] ldr r3, [r3, #0x3c] - bl FUN_020B8390 + bl NNS_G3dGlbPolygonAttr mov r0, #0 mov r1, #0x48 bl FUN_02079A70 @@ -243,7 +243,7 @@ _021D76C8: add r1, #0x80 ldr r1, [r1] add r0, r7, #0 - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj ldr r0, [r5, #0x60] bl FreeToHeap add r0, r4, #1 @@ -358,26 +358,26 @@ MOD78_021D778C: ; 0x021D778C add r2, #0x5c bl FUN_0201B234 ldr r0, [r5, #0x5c] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [sp, #4] ldr r0, [r5, #0x58] mov r1, #0 mov r2, #0x40 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag ldr r0, [r5, #0x58] mov r1, #0 mov r2, #0x80 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag mov r2, #2 ldr r0, [r5, #0x58] mov r1, #0 lsl r2, r2, #8 - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag mov r2, #1 ldr r0, [r5, #0x58] mov r1, #0 lsl r2, r2, #0xa - bl FUN_020BC094 + bl NNSi_G3dModifyMatFlag add r0, r5, #0 str r0, [sp, #8] add r0, #0x70 @@ -402,12 +402,12 @@ _021D780E: bl NARC_AllocAndReadWholeMember str r0, [r4, #0x60] mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx add r7, r0, #0 ldr r0, [sp, #8] ldr r2, [r5, #0x58] add r1, r7, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj add r1, r4, #0 add r1, #0x80 str r0, [r1] @@ -417,11 +417,11 @@ _021D780E: ldr r2, [r5, #0x58] ldr r3, [sp, #4] add r1, r7, #0 - bl FUN_020B8110 + bl NNS_G3dAnmObjInit add r4, #0x80 ldr r1, [r4] add r0, r5, #4 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r6, #1 lsl r0, r0, #0x18 lsr r6, r0, #0x18 diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index ea6a3c13..9abe50f0 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -1473,7 +1473,7 @@ _0222DFE4: mov r1, #2 lsl r1, r1, #0x10 mov r2, #0 - bl tempName_NNS_FndCreateExpHeapEx + bl NNS_FndCreateExpHeapEx str r0, [r4, #0x4c] mov r0, #1 str r0, [r5] @@ -1830,7 +1830,7 @@ MOD80_0222E3CC: ; 0x0222E3CC push {r4, r5, r6, r7, lr} sub sp, #0x1c add r5, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e @@ -2269,7 +2269,7 @@ MOD80_0222E750: ; 0x0222E750 add r1, r5, #0 ldr r0, [r0] add r2, r4, #0 - bl tempName_NNS_FndAllocFromExpHeapEx + bl NNS_FndAllocFromExpHeapEx add r4, r0, #0 add r0, r6, #0 bl OS_RestoreInterrupts @@ -2289,7 +2289,7 @@ MOD80_0222E778: ; 0x0222E778 ldr r0, _0222E798 ; =0x02237E24 add r1, r5, #0 ldr r0, [r0] - bl FUN_020ADDF0 + bl NNS_FndFreeToExpHeap add r0, r4, #0 bl OS_RestoreInterrupts _0222E794: @@ -10717,7 +10717,7 @@ MOD80_02232BAC: ; 0x02232BAC add r4, r0, #0 beq _02232BCE add r1, r5, #0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 bne _02232BCE add r0, r4, #0 diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s index 63312258..5074a352 100644 --- a/arm9/modules/81/asm/module_81.s +++ b/arm9/modules/81/asm/module_81.s @@ -106,7 +106,7 @@ _02237F0A: lsl r1, r1, #2 str r0, [r4, r1] _02237F22: - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #1 str r0, [sp] mov r0, #0x7f @@ -1479,7 +1479,7 @@ MOD81_02238940: ; 0x02238940 add r5, r0, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N bl FUN_0201EBA4 ldr r0, [r5, #0x1c] mov r6, #0 @@ -1504,7 +1504,7 @@ _02238976: mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add sp, #4 pop {r3, r4, r5, r6, pc} .align 2, 0 @@ -1520,7 +1520,7 @@ MOD81_02238988: ; 0x02238988 add r0, r4, #0 add r0, #0x80 ldrh r0, [r0] - ldr r3, _02238A34 ; =UNK_020FFA38 + ldr r3, _02238A34 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1537,7 +1537,7 @@ MOD81_02238988: ; 0x02238988 add r0, r4, #0 add r0, #0x82 ldrh r0, [r0] - ldr r3, _02238A34 ; =UNK_020FFA38 + ldr r3, _02238A34 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1554,7 +1554,7 @@ MOD81_02238988: ; 0x02238988 add r0, r4, #0 add r0, #0x84 ldrh r0, [r0] - ldr r3, _02238A34 ; =UNK_020FFA38 + ldr r3, _02238A34 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1579,7 +1579,7 @@ MOD81_02238988: ; 0x02238988 add r2, r0, #0 add r3, r0, #0 str r0, [sp, #4] - bl FUN_020B8390 + bl NNS_G3dGlbPolygonAttr _02238A20: add r1, r4, #0 add r0, r4, #4 @@ -1591,7 +1591,7 @@ _02238A20: add sp, #0x50 pop {r4, pc} .align 2, 0 -_02238A34: .word UNK_020FFA38 +_02238A34: .word FX_SinCosTable_ thumb_func_end MOD81_02238988 thumb_func_start MOD81_02238A38 @@ -1668,7 +1668,7 @@ MOD81_02238A84: ; 0x02238A84 ldr r0, [r4, r6] cmp r0, #0 beq _02238B02 - bl FUN_020BC13C + bl NNS_G3dGetMdlSet str r0, [r5, #0x58] ldrh r1, [r0, #0xe] add r1, r0, r1 @@ -1676,7 +1676,7 @@ MOD81_02238A84: ; 0x02238A84 add r0, r0, r1 str r0, [r5, #0x5c] ldr r0, [r5] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r5, #0x60] bl FUN_0201B3C4 ldr r0, [r5] @@ -1684,7 +1684,7 @@ MOD81_02238A84: ; 0x02238A84 bl FUN_0201B3A8 ldr r1, [r5, #0x5c] add r0, r5, #4 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit ldr r0, [sp, #0x20] mov r1, #0x1f str r0, [r5, #0x68] @@ -1777,13 +1777,13 @@ MOD81_02238B5C: ; 0x02238B5C mov r2, #0x1f mov r1, #0 lsl r2, r2, #0x10 - bl FUN_020BC02C + bl NNSi_G3dModifyPolygonAttrMask pop {r3, pc} _02238B76: mov r2, #0x1f mov r1, #1 lsl r2, r2, #0x10 - bl FUN_020BC02C + bl NNSi_G3dModifyPolygonAttrMask pop {r3, pc} .align 2, 0 thumb_func_end MOD81_02238B5C @@ -1806,7 +1806,7 @@ MOD81_02238B8C: ; 0x02238B8C add r0, r4, #0 add r0, #0x80 ldrh r0, [r0] - ldr r3, _02238C3C ; =UNK_020FFA38 + ldr r3, _02238C3C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1823,7 +1823,7 @@ MOD81_02238B8C: ; 0x02238B8C add r0, r4, #0 add r0, #0x82 ldrh r0, [r0] - ldr r3, _02238C3C ; =UNK_020FFA38 + ldr r3, _02238C3C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1840,7 +1840,7 @@ MOD81_02238B8C: ; 0x02238B8C add r0, r4, #0 add r0, #0x84 ldrh r0, [r0] - ldr r3, _02238C3C ; =UNK_020FFA38 + ldr r3, _02238C3C ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1857,7 +1857,7 @@ MOD81_02238B8C: ; 0x02238B8C mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N bl FUN_0201EBA4 add r1, r4, #0 ldr r0, [r4, #0x5c] @@ -1871,12 +1871,12 @@ MOD81_02238B8C: ; 0x02238B8C mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N add r0, r4, #0 add sp, #0x4c pop {r3, r4, pc} .align 2, 0 -_02238C3C: .word UNK_020FFA38 +_02238C3C: .word FX_SinCosTable_ thumb_func_end MOD81_02238B8C thumb_func_start MOD81_02238C40 @@ -2123,9 +2123,9 @@ MOD81_02238DFC: ; 0x02238DFC mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 - bl FUN_020BB394 - bl FUN_020B02C8 + bl NNS_G3dGeBufferOP_N + bl NNS_G3dGeFlushBuffer + bl NNS_G2dSetupSoftwareSpriteCamera ldr r0, [r4, #0xc] bl FUN_020081C4 ldr r0, [r4, #0xc] @@ -2134,7 +2134,7 @@ MOD81_02238DFC: ; 0x02238DFC str r2, [sp] mov r0, #0x12 add r1, sp, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, [r4, #0x5c] bl MOD81_02238940 mov r0, #0 @@ -2694,7 +2694,7 @@ MOD81_022392D8: ; 0x022392D8 push {r3, r4, r5, r6, lr} sub sp, #4 add r5, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _02239380 ; =0x04000060 ldr r2, _02239384 ; =0xFFFFCFFD @@ -2730,19 +2730,19 @@ MOD81_022392D8: ; 0x022392D8 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 - ldr r3, _02239394 ; =UNK_021064B8 + bl NNS_GfdInitFrmPlttVramManager + ldr r3, _02239394 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #1 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _02239398 ; =UNK_021064C0 + ldr r3, _02239398 ; =NNS_GfdDefaultFuncAllocPlttVram add r4, r0, #0 ldr r3, [r3] mov r0, #0x80 @@ -2774,8 +2774,8 @@ _02239384: .word 0xFFFFCFFD _02239388: .word 0x0000CFFB _0223938C: .word 0x04000540 _02239390: .word 0xBFFF0000 -_02239394: .word UNK_021064B8 -_02239398: .word UNK_021064C0 +_02239394: .word NNS_GfdDefaultFuncAllocTexVram +_02239398: .word NNS_GfdDefaultFuncAllocPlttVram _0223939C: .word 0x7FFF0000 _022393A0: .word 0xFFFF0000 thumb_func_end MOD81_022392D8 @@ -2829,9 +2829,9 @@ MOD81_022393F4: ; 0x022393F4 mov r3, #8 bl MOD81_0223874C add r0, sp, #0x5c - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy add r0, sp, #0x38 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 @@ -3962,7 +3962,7 @@ MOD81_02239CDC: ; 0x02239CDC push {r4, lr} sub sp, #0x10 add r4, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _02239DBC ; =0x04000060 ldr r1, _02239DC0 ; =0xFFFFCFFD @@ -4006,11 +4006,11 @@ MOD81_02239CDC: ; 0x02239CDC str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager mov r0, #1 add r1, r0, #0 bl GX_EngineAToggleLayers @@ -4099,9 +4099,9 @@ MOD81_02239E00: ; 0x02239E00 mov r3, #0xc bl MOD81_0223874C add r0, sp, #0x60 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy add r0, sp, #0x3c - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 @@ -5879,7 +5879,7 @@ MOD81_0223ABD8: ; 0x0223ABD8 push {r3, r4, lr} sub sp, #0x24 add r4, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _0223ACAC ; =0x04000060 ldr r1, _0223ACB0 ; =0xFFFFCFFD @@ -5923,11 +5923,11 @@ MOD81_0223ABD8: ; 0x0223ABD8 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager mov r0, #1 add r1, r0, #0 bl GX_EngineAToggleLayers @@ -6006,9 +6006,9 @@ MOD81_0223ACE8: ; 0x0223ACE8 mov r3, #8 bl MOD81_0223874C add r0, sp, #0x5c - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy add r0, sp, #0x38 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 @@ -7391,7 +7391,7 @@ MOD81_0223B7E8: ; 0x0223B7E8 push {r3, r4, lr} sub sp, #0x24 add r4, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _0223B8C8 ; =0x04000060 ldr r1, _0223B8CC ; =0xFFFFCFFD @@ -7435,11 +7435,11 @@ MOD81_0223B7E8: ; 0x0223B7E8 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager mov r0, #1 add r1, r0, #0 bl GX_EngineAToggleLayers @@ -7525,9 +7525,9 @@ MOD81_0223B908: ; 0x0223B908 mov r3, #8 bl MOD81_0223874C add r0, sp, #0x5c - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy add r0, sp, #0x38 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 @@ -8643,7 +8643,7 @@ MOD81_0223C1DC: ; 0x0223C1DC push {r4, lr} sub sp, #0x10 add r4, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _0223C2C0 ; =0x04000060 ldr r1, _0223C2C4 ; =0xFFFFCFFD @@ -8687,11 +8687,11 @@ MOD81_0223C1DC: ; 0x0223C1DC str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager mov r0, #1 add r1, r0, #0 bl GX_EngineAToggleLayers @@ -9177,9 +9177,9 @@ MOD81_0223C60C: ; 0x0223C60C mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 - bl FUN_020BB394 - bl FUN_020B02C8 + bl NNS_G3dGeBufferOP_N + bl NNS_G3dGeFlushBuffer + bl NNS_G2dSetupSoftwareSpriteCamera ldr r0, [r4, #0x10] bl FUN_020081C4 ldr r0, [r4, #0x10] @@ -9188,7 +9188,7 @@ MOD81_0223C60C: ; 0x0223C60C str r2, [sp] mov r0, #0x12 add r1, sp, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N ldr r0, [r4, #0x60] cmp r0, #0 beq _0223C64A @@ -9746,7 +9746,7 @@ MOD81_0223CAC4: ; 0x0223CAC4 push {r3, r4, r5, r6, lr} sub sp, #4 add r5, r0, #0 - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _0223CB6C ; =0x04000060 ldr r2, _0223CB70 ; =0xFFFFCFFD @@ -9782,19 +9782,19 @@ MOD81_0223CAC4: ; 0x0223CAC4 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 - ldr r3, _0223CB80 ; =UNK_021064B8 + bl NNS_GfdInitFrmPlttVramManager + ldr r3, _0223CB80 ; =NNS_GfdDefaultFuncAllocTexVram mov r0, #1 mov r1, #0 ldr r3, [r3] lsl r0, r0, #0xe add r2, r1, #0 blx r3 - ldr r3, _0223CB84 ; =UNK_021064C0 + ldr r3, _0223CB84 ; =NNS_GfdDefaultFuncAllocPlttVram add r4, r0, #0 ldr r3, [r3] mov r0, #0x80 @@ -9826,8 +9826,8 @@ _0223CB70: .word 0xFFFFCFFD _0223CB74: .word 0x0000CFFB _0223CB78: .word 0x04000540 _0223CB7C: .word 0xBFFF0000 -_0223CB80: .word UNK_021064B8 -_0223CB84: .word UNK_021064C0 +_0223CB80: .word NNS_GfdDefaultFuncAllocTexVram +_0223CB84: .word NNS_GfdDefaultFuncAllocPlttVram _0223CB88: .word 0x7FFF0000 _0223CB8C: .word 0xFFFF0000 thumb_func_end MOD81_0223CAC4 @@ -9881,9 +9881,9 @@ MOD81_0223CBE0: ; 0x0223CBE0 mov r3, #8 bl MOD81_0223874C add r0, sp, #0x5c - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy add r0, sp, #0x38 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r3, #0 str r3, [sp] mov r2, #1 diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s index 6af5c444..7b00d33a 100644 --- a/arm9/modules/82/asm/module_82.s +++ b/arm9/modules/82/asm/module_82.s @@ -715,7 +715,7 @@ _0222DA48: mov r1, #2 lsl r1, r1, #0x10 mov r2, #0 - bl tempName_NNS_FndCreateExpHeapEx + bl NNS_FndCreateExpHeapEx str r0, [r4, #0x28] mov r0, #1 str r0, [r5] @@ -984,7 +984,7 @@ MOD82_0222DD54: ; 0x0222DD54 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r6, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e @@ -1256,7 +1256,7 @@ MOD82_0222DF74: ; 0x0222DF74 add r1, r5, #0 ldr r0, [r0, #4] add r2, r4, #0 - bl tempName_NNS_FndAllocFromExpHeapEx + bl NNS_FndAllocFromExpHeapEx add r4, r0, #0 add r0, r6, #0 bl OS_RestoreInterrupts @@ -1276,7 +1276,7 @@ MOD82_0222DF9C: ; 0x0222DF9C ldr r0, _0222DFBC ; =0x0222FC0C add r1, r5, #0 ldr r0, [r0, #4] - bl FUN_020ADDF0 + bl NNS_FndFreeToExpHeap add r0, r4, #0 bl OS_RestoreInterrupts _0222DFB8: diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index 233b529a..f067a6f1 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -9385,7 +9385,7 @@ MOD83_022320D8: ; 0x022320D8 bl UncompressFromNarc add r1, sp, #4 add r7, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r0, _02232114 ; =0x0000299C ldr r2, [sp, #4] lsl r1, r4, #0x18 @@ -15684,7 +15684,7 @@ MOD83_022350EC: ; 0x022350EC push {r4, r5, r6, r7, lr} sub sp, #0x14 add r6, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e @@ -15971,7 +15971,7 @@ MOD83_022352FC: ; 0x022352FC bl ReadWholeNarcMemberByIdPair add r0, r4, #0 add r1, r7, #0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData cmp r0, #0 bne _02235330 add r0, r4, #0 @@ -15994,7 +15994,7 @@ MOD83_02235334: ; 0x02235334 bl NARC_ReadWholeMember add r0, r4, #0 add r1, r5, #0 - bl FUN_020B0030 + bl NNS_G2dGetUnpackedBGCharacterData pop {r4, r5, r6, pc} .align 2, 0 thumb_func_end MOD83_02235334 @@ -23333,7 +23333,7 @@ MOD83_02238B4C: ; 0x02238B4C push {r4, r5, r6, r7, lr} sub sp, #0x14 ldr r6, _02238BB4 ; =MOD83_0223BC30 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x7e @@ -24223,7 +24223,7 @@ MOD83_022391EC: ; 0x022391EC bl UncompressFromNarc add r1, sp, #0x14 str r0, [sp, #0x10] - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData ldr r2, [sp, #0x14] mov r3, #6 add r0, r5, #0 diff --git a/arm9/modules/84/asm/module_84_thumb1.s b/arm9/modules/84/asm/module_84_thumb1.s index 53dfe036..2f29a2a9 100644 --- a/arm9/modules/84/asm/module_84_thumb1.s +++ b/arm9/modules/84/asm/module_84_thumb1.s @@ -55,7 +55,7 @@ _021D7516: str r0, [r4, #0x18] mov r0, #0 str r0, [r4, #0x1c] - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -727,7 +727,7 @@ MOD84_021D7AB8: ; 0x021D7AB8 thumb_func_start MOD84_021D7AC8 MOD84_021D7AC8: ; 0x021D7AC8 push {r3, lr} - bl FUN_020BB7F4 + bl NNS_G3dInit bl G3X_InitMtxStack ldr r0, _021D7B3C ; =0x04000060 ldr r2, _021D7B40 ; =0xFFFFCFFD @@ -761,11 +761,11 @@ MOD84_021D7AC8: ; 0x021D7AC8 str r0, [r1, #0x40] mov r0, #1 add r1, r0, #0 - bl FUN_020AEB70 + bl NNS_GfdInitFrmTexVramManager mov r0, #1 lsl r0, r0, #0xe mov r1, #1 - bl FUN_020AEDF4 + bl NNS_GfdInitFrmPlttVramManager mov r0, #1 add r1, r0, #0 bl GX_EngineAToggleLayers @@ -899,7 +899,7 @@ MOD84_021D7BC8: ; 0x021D7BC8 add r0, #0x98 strh r1, [r0] ldr r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet str r0, [r4, #0x5c] ldrh r1, [r0, #0xe] add r1, r0, r1 @@ -907,7 +907,7 @@ MOD84_021D7BC8: ; 0x021D7BC8 add r0, r0, r1 str r0, [r4, #0x60] ldr r0, [r4] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r4, #0x64] bl FUN_0201B3C4 ldr r0, [r4] @@ -916,7 +916,7 @@ MOD84_021D7BC8: ; 0x021D7BC8 add r0, r4, #0 ldr r1, [r4, #0x60] add r0, #8 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit mov r2, #0 str r2, [sp] add r0, sp, #8 @@ -937,22 +937,22 @@ MOD84_021D7BC8: ; 0x021D7BC8 bl FUN_02016B20 ldr r0, [r4, #4] mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx add r5, r0, #0 add r0, r4, #0 ldr r2, [r4, #0x60] add r0, #0x6c add r1, r5, #0 - bl FUN_020BB8D0 + bl NNS_G3dAllocAnmObj str r0, [r4, #0x68] ldr r2, [r4, #0x60] ldr r3, [r4, #0x64] add r1, r5, #0 - bl FUN_020B8110 + bl NNS_G3dAnmObjInit add r0, r4, #0 ldr r1, [r4, #0x68] add r0, #8 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r4, #0 mov r1, #0 add r0, #0x9c @@ -981,7 +981,7 @@ MOD84_021D7CD4: ; 0x021D7CD4 add r0, r4, #0 ldr r1, [r4, #0x68] add r0, #0x6c - bl thunk_FUN_020ae84c + bl NNS_G3dFreeAnmObj ldr r0, [r4, #4] bl FreeToHeap _021D7CF0: @@ -1002,7 +1002,7 @@ MOD84_021D7CFC: ; 0x021D7CFC mov r1, #0 mov r0, #0x11 add r2, r1, #0 - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N bl FUN_0201EBA4 add r4, #0x38 add r0, sp, #0x28 @@ -1010,7 +1010,7 @@ MOD84_021D7CFC: ; 0x021D7CFC add r0, r4, #0 add r0, #0x94 ldrh r0, [r0] - ldr r3, _021D7DF0 ; =UNK_020FFA38 + ldr r3, _021D7DF0 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1027,7 +1027,7 @@ MOD84_021D7CFC: ; 0x021D7CFC add r0, r4, #0 add r0, #0x96 ldrh r0, [r0] - ldr r3, _021D7DF0 ; =UNK_020FFA38 + ldr r3, _021D7DF0 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1044,7 +1044,7 @@ MOD84_021D7CFC: ; 0x021D7CFC add r0, r4, #0 add r0, #0x98 ldrh r0, [r0] - ldr r3, _021D7DF0 ; =UNK_020FFA38 + ldr r3, _021D7DF0 ; =FX_SinCosTable_ asr r0, r0, #4 lsl r2, r0, #1 lsl r1, r2, #1 @@ -1098,14 +1098,14 @@ _021D7DBA: mov r0, #0x12 add r1, sp, #0 str r2, [sp] - bl FUN_020BB1C0 + bl NNS_G3dGeBufferOP_N mov r0, #0 mov r1, #1 bl FUN_020222B4 add sp, #0x4c pop {r3, r4, pc} nop -_021D7DF0: .word UNK_020FFA38 +_021D7DF0: .word FX_SinCosTable_ thumb_func_end MOD84_021D7CFC thumb_func_start MOD84_021D7DF4 @@ -1168,7 +1168,7 @@ _021D7E08: add r0, #0x98 strh r1, [r0] ldr r0, [r4] - bl FUN_020BC13C + bl NNS_G3dGetMdlSet str r0, [r4, #0x5c] ldrh r1, [r0, #0xe] add r1, r0, r1 @@ -1176,7 +1176,7 @@ _021D7E08: add r0, r0, r1 str r0, [r4, #0x60] ldr r0, [r4] - bl FUN_020BC0FC + bl NNS_G3dGetTex str r0, [r4, #0x64] bl FUN_0201B3C4 ldr r0, [r4] @@ -1185,22 +1185,22 @@ _021D7E08: add r0, r4, #0 ldr r1, [r4, #0x60] add r0, #8 - bl FUN_020B80B4 + bl NNS_G3dRenderObjInit _021D7E9A: ldr r0, [r4, #4] cmp r0, #0 beq _021D7ED0 mov r1, #0 - bl FUN_020BC4C8 + bl NNS_G3dGetAnmByIdx add r1, r0, #0 ldr r0, [r4, #0x68] ldr r2, [r4, #0x60] ldr r3, [r4, #0x64] - bl FUN_020B8110 + bl NNS_G3dAnmObjInit add r0, r4, #0 ldr r1, [r4, #0x68] add r0, #8 - bl FUN_020B7EFC + bl NNS_G3dRenderObjAddAnmObj add r0, r4, #0 mov r1, #0 add r0, #0x9c @@ -1227,27 +1227,27 @@ MOD84_021D7EDC: ; 0x021D7EDC mov r0, #0x82 lsl r0, r0, #2 add r0, r5, r0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r0, #0x8b lsl r0, r0, #2 add r0, r5, r0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r0, #0x25 lsl r0, r0, #4 add r0, r5, r0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r0, #0x9d lsl r0, r0, #2 add r0, r5, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0xa2 lsl r0, r0, #2 add r0, r5, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0xa7 lsl r0, r0, #2 add r0, r5, r0 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy ldr r0, [r5, #0x18] ldr r0, [r0] cmp r0, #1 diff --git a/arm9/modules/84/asm/module_84_thumb2.s b/arm9/modules/84/asm/module_84_thumb2.s index 82d292c6..6a42cff9 100644 --- a/arm9/modules/84/asm/module_84_thumb2.s +++ b/arm9/modules/84/asm/module_84_thumb2.s @@ -1836,10 +1836,10 @@ _021D8ECE: _021D8EF2: add r0, r4, #0 add r0, #0x10 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, r4, #0 add r0, #0x34 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r2, #0 str r2, [sp] mov r0, #1 @@ -1922,12 +1922,12 @@ _021D8F86: lsr r7, r5, #1 _021D8FA6: add r0, r4, #0 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy ldr r0, [sp, #0x20] add r1, r5, #0 mov r2, #1 add r3, r4, #0 - bl FUN_020B1768 + bl NNS_G2dLoadImage1DMapping add r6, r6, #1 add r4, #0x24 add r5, r5, r7 @@ -3164,7 +3164,7 @@ _021D995A: str r0, [r4, #0x48] add r0, r4, #0 add r0, #0x10 - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy mov r2, #0 str r2, [sp] mov r0, #1 @@ -3181,7 +3181,7 @@ _021D995A: bl FUN_02006AE4 add r0, r4, #0 add r0, #0x34 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r0, #0x4b str r0, [sp] add r0, r4, #0 @@ -4259,10 +4259,10 @@ _021DA1E2: str r0, [r4, #0x54] add r0, r4, #0 add r0, #0x1c - bl FUN_020B1A24 + bl NNS_G2dInitImageProxy add r0, r4, #0 add r0, #0x40 - bl FUN_020B19DC + bl NNS_G2dInitImagePaletteProxy mov r2, #0 str r2, [sp] mov r0, #1 diff --git a/arm9/modules/85/asm/module_85.s b/arm9/modules/85/asm/module_85.s index a7798340..bad84718 100644 --- a/arm9/modules/85/asm/module_85.s +++ b/arm9/modules/85/asm/module_85.s @@ -570,7 +570,7 @@ MOD85_021D797C: ; 0x021D797C ldr r1, _021D7B1C ; =0x00000448 add r5, r0, #0 add r1, r4, r1 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r1, _021D7B1C ; =0x00000448 mov r2, #0x1a ldr r1, [r4, r1] @@ -588,7 +588,7 @@ MOD85_021D797C: ; 0x021D797C ldr r1, _021D7B20 ; =0x00000444 add r5, r0, #0 add r1, r4, r1 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, _021D7B20 ; =0x00000444 mov r1, #0 ldr r3, [r4, r0] @@ -609,7 +609,7 @@ MOD85_021D797C: ; 0x021D797C lsl r1, r1, #6 add r1, r4, r1 add r5, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData mov r0, #0x11 lsl r0, r0, #6 ldr r3, [r4, r0] @@ -633,7 +633,7 @@ MOD85_021D797C: ; 0x021D797C ldr r1, _021D7B20 ; =0x00000444 add r5, r0, #0 add r1, r4, r1 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, _021D7B20 ; =0x00000444 mov r1, #0 ldr r3, [r4, r0] @@ -654,7 +654,7 @@ MOD85_021D797C: ; 0x021D797C lsl r1, r1, #6 add r1, r4, r1 add r5, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData mov r0, #0x11 lsl r0, r0, #6 ldr r3, [r4, r0] @@ -678,7 +678,7 @@ MOD85_021D797C: ; 0x021D797C ldr r1, _021D7B1C ; =0x00000448 add r5, r0, #0 add r1, r4, r1 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r1, _021D7B1C ; =0x00000448 mov r2, #0x1a ldr r1, [r4, r1] @@ -696,7 +696,7 @@ MOD85_021D797C: ; 0x021D797C ldr r1, _021D7B20 ; =0x00000444 add r5, r0, #0 add r1, r4, r1 - bl FUN_020B0088 + bl NNS_G2dGetUnpackedCharacterData ldr r0, _021D7B20 ; =0x00000444 mov r1, #0 ldr r3, [r4, r0] @@ -717,7 +717,7 @@ MOD85_021D797C: ; 0x021D797C lsl r1, r1, #6 add r1, r4, r1 add r5, r0, #0 - bl FUN_020B0180 + bl NNS_G2dGetUnpackedScreenData mov r0, #0x11 lsl r0, r0, #6 ldr r3, [r4, r0] @@ -933,7 +933,7 @@ MOD85_021D7CB0: ; 0x021D7CB0 push {r3, r4, lr} sub sp, #0x1c add r4, r0, #0 - bl FUN_020B0FC0 + bl NNS_G2dInitOamManagerModule mov r0, #0 str r0, [sp] mov r1, #0x80 @@ -8587,7 +8587,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r6, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData ldr r0, [sp] mov r1, #1 add r2, r4, #4 @@ -8627,7 +8627,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r6, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData add r2, r4, #0 ldr r0, [sp] mov r1, #0 @@ -8641,7 +8641,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r6, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData add r2, r4, #0 ldr r0, [sp] mov r1, #0 @@ -8655,7 +8655,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r6, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData add r2, r4, #0 ldr r0, [sp] mov r1, #0 @@ -8669,7 +8669,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r6, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData mov r2, #0x51 lsl r2, r2, #2 ldr r0, [sp] @@ -8684,7 +8684,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r6, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData mov r2, #0x59 lsl r2, r2, #2 ldr r0, [sp] @@ -8705,7 +8705,7 @@ MOD85_021DB494: ; 0x021DB494 bl MOD85_021D8144 add r1, sp, #0 add r5, r0, #0 - bl FUN_020B0138 + bl NNS_G2dGetUnpackedPaletteData mov r2, #0x69 lsl r2, r2, #2 ldr r0, [sp] diff --git a/arm9/src/heap.c b/arm9/src/heap.c index f28b4f88..7ae25c3b 100644 --- a/arm9/src/heap.c +++ b/arm9/src/heap.c @@ -3,14 +3,14 @@ #include "unk_02031734.h" -extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2); -extern void *tempName_NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2); -extern void thunk_FUN_020adc8c(); -extern void FUN_020ADDF0(void *ptr1, void *ptr2); -extern u32 FUN_020ADDC8(void *param0); -extern void FUN_020AE82C(u32 param0, void *param1, u32 param2); -extern u32 FUN_020ADDC0(void *param0); -extern void FUN_020ADE2C(void *ptr1, void *ptr2, u32 param2); +extern void *NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2); +extern void *NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2); +extern void NNS_FndDestroyExpHeap(); +extern void NNS_FndFreeToExpHeap(void *ptr1, void *ptr2); +extern u32 NNS_FndGetTotalFreeSizeForExpHeap(void *param0); +extern void NNS_FndInitAllocatorForExpHeap(u32 param0, void *param1, u32 param2); +extern u32 NNS_FndGetSizeForMBlockExpHeap(void *param0); +extern void NNS_FndResizeForMBlockExpHeap(void *ptr1, void *ptr2, u32 param2); struct UnkStruct_020166C8 UNK_021C4D28; @@ -68,7 +68,7 @@ THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size) if (ptr != 0) { - UNK_021C4D28.unk00[r7] = tempName_NNS_FndCreateExpHeapEx(ptr, param0[0], 0); + UNK_021C4D28.unk00[r7] = NNS_FndCreateExpHeapEx(ptr, param0[0], 0); UNK_021C4D28.unk10[r7] = (u8)r7; } else @@ -143,13 +143,13 @@ THUMB_FUNC u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3) void *ptr2 = UNK_021C4D28.unk00[ptr[param0]]; if (ptr2 != 0) { - void *ptr3 = tempName_NNS_FndAllocFromExpHeapEx(ptr2, param2, param3); + void *ptr3 = NNS_FndAllocFromExpHeapEx(ptr2, param2, param3); if (ptr3 != 0) { param3 = FUN_020167F4(); if (param3 >= 0) { - UNK_021C4D28.unk00[param3] = tempName_NNS_FndCreateExpHeapEx(ptr3, param2, 0); + UNK_021C4D28.unk00[param3] = NNS_FndCreateExpHeapEx(ptr3, param2, 0); if (UNK_021C4D28.unk00[param3] != 0) @@ -193,14 +193,14 @@ THUMB_FUNC void FUN_020168D0(u32 heap_id) if (UNK_021C4D28.unk00[UNK_021C4D28.unk10[heap_id]] != 0) { - thunk_FUN_020adc8c(); + NNS_FndDestroyExpHeap(); u8 index = UNK_021C4D28.unk10[heap_id]; void *ptr1 = UNK_021C4D28.unk04[index]; void *ptr2 = UNK_021C4D28.unk08[index]; if (ptr1 != 0 && ptr2 != 0) { - FUN_020ADDF0(ptr1, ptr2); + NNS_FndFreeToExpHeap(ptr1, ptr2); } else { @@ -221,7 +221,7 @@ THUMB_FUNC u32 *FUN_02016944(void *param0, u32 param1, s32 param2, u32 param3) OSIntrMode intr_mode = OS_DisableInterrupts(); param1 += 16; - u32 *ptr = (u32 *)tempName_NNS_FndAllocFromExpHeapEx(param0, param1, param2); + u32 *ptr = (u32 *)NNS_FndAllocFromExpHeapEx(param0, param1, param2); OS_RestoreInterrupts(intr_mode); if (ptr != 0) @@ -301,7 +301,7 @@ void FreeToHeap(void *ptr) UNK_021C4D28.unk0c[heap_id]--; OSIntrMode intr_mode = OS_DisableInterrupts(); - FUN_020ADDF0(ptr2, ptr - 16); + NNS_FndFreeToExpHeap(ptr2, ptr - 16); OS_RestoreInterrupts(intr_mode); return; } @@ -322,7 +322,7 @@ void FreeToHeapExplicit(u32 param0, void *param1) u8 heap_id = (u8)((u32 *)param1)[-1]; GF_ASSERT (heap_id == param0); - FUN_020ADDF0(ptr, param1 - 16); + NNS_FndFreeToExpHeap(ptr, param1 - 16); GF_ASSERT (UNK_021C4D28.unk0c[param0]); UNK_021C4D28.unk0c[param0]--; @@ -337,7 +337,7 @@ THUMB_FUNC u32 FUN_02016AF8(u32 param0) if (param0 < UNK_021C4D28.unk14) { u8 index = UNK_021C4D28.unk10[param0]; - return FUN_020ADDC8(UNK_021C4D28.unk00[index]); + return NNS_FndGetTotalFreeSizeForExpHeap(UNK_021C4D28.unk00[index]); } ErrorHandling(); @@ -350,7 +350,7 @@ THUMB_FUNC void FUN_02016B20(u32 param0, u32 param1, u32 param2) { u8 index = UNK_021C4D28.unk10[param1]; - FUN_020AE82C(param0, UNK_021C4D28.unk00[index], param2); + NNS_FndInitAllocatorForExpHeap(param0, UNK_021C4D28.unk00[index], param2); return; } @@ -362,13 +362,13 @@ THUMB_FUNC void FUN_02016B44(void *ptr, u32 param1) GF_ASSERT (OS_GetProcMode() != OS_PROCMODE_IRQ); param1 += 16; - if (FUN_020ADDC0(ptr - 16) >= param1) + if (NNS_FndGetSizeForMBlockExpHeap(ptr - 16) >= param1) { u8 heap_id = (u8)((u32 *)ptr)[-1]; u8 index = UNK_021C4D28.unk10[heap_id]; - FUN_020ADE2C(UNK_021C4D28.unk00[index], ptr - 16, param1); + NNS_FndResizeForMBlockExpHeap(UNK_021C4D28.unk00[index], ptr - 16, param1); return; } ErrorHandling(); diff --git a/arm9/src/math_util.c b/arm9/src/math_util.c index 4ecee59c..ac3b77f0 100644 --- a/arm9/src/math_util.c +++ b/arm9/src/math_util.c @@ -1,7 +1,7 @@ #include "global.h" #include "math_util.h" -extern const s16 UNK_020FFA38[]; // temporary until further notice +extern const s16 FX_SinCosTable_[]; // temporary until further notice /* * Constant tables @@ -697,8 +697,8 @@ THUMB_FUNC void MTX22_2DAffine(struct Mtx22 * mtx, u16 radians, fx32 x, fx32 y, radians = (u16)((u32)(radians * 65535) / 360); // shut up the compiler MTX_Rot22_(mtx, - UNK_020FFA38[((radians >> 4) * 2)], // TODO: macros - UNK_020FFA38[((radians >> 4) * 2) + 1]); // TODO: macros + FX_SinCosTable_[((radians >> 4) * 2)], // TODO: macros + FX_SinCosTable_[((radians >> 4) * 2) + 1]); // TODO: macros MTX_ScaleApply22(mtx, mtx, x, y); } diff --git a/arm9/src/sound.c b/arm9/src/sound.c index a1e31bbd..95d14c64 100644 --- a/arm9/src/sound.c +++ b/arm9/src/sound.c @@ -6,7 +6,8 @@ #pragma thumb on static struct SoundData sSoundDataBuffer; -static u32 UNK_02107070[2]; +static u32 UNK_02107070; +static u32 UNK_02107074; void FUN_02003C40(void); BOOL FUN_02003D04(void); @@ -28,15 +29,15 @@ extern void FUN_02005CFC(void); void InitSoundData(void * a0, struct Options * a1) { struct SoundData * sdat = GetSoundDataPointer(); - SDAT_Init(); + NNS_SndInit(); FUN_020040C8(); FUN_02004064(sdat); - sdat->unk_00090 = FUN_020C2A94(sdat->unk_00094, sizeof(sdat->unk_00094)); - SDAT_Open(&sdat->header, "data/sound/sound_data.sdat", sdat->unk_00090, 0); - FUN_020C39CC(sdat->unk_00090); + sdat->heap = NNS_SndHeapCreate(sdat->unk_00094, sizeof(sdat->unk_00094)); + NNS_SndArcInit(&sdat->header, "data/sound/sound_data.sdat", sdat->heap, 0); + NNS_SndArcPlayerSetup(sdat->heap); FUN_02004088(sdat); FUN_020040A4(sdat); - UNK_02107070[1] = 0; + UNK_02107074 = 0; sdat->unk_BCD4C = a0; FUN_02004D60(a1->soundMethod); } @@ -51,13 +52,13 @@ void DoSoundUpdateFrame(void) FUN_02003C40(); } FUN_02005CFC(); - FUN_020C01A0(); + NNS_SndMain(); } void FUN_02003C40(void) { struct SoundData * sdat = GetSoundDataPointer(); - switch (UNK_02107070[0]) + switch (UNK_02107070) { case 1: FUN_02003CE8(2); @@ -92,7 +93,7 @@ void FUN_02003CE8(int a0) { struct SoundData * sdat = GetSoundDataPointer(); sdat->unk_BCCFC = 0; - UNK_02107070[0] = (u32)a0; + UNK_02107070 = (u32)a0; } BOOL FUN_02003D04(void) @@ -202,7 +203,7 @@ void * FUN_02003D38(u32 a0) int FUN_02003F3C(int * a0) { struct SoundData * sdat = GetSoundDataPointer(); - int r4 = FUN_020C290C(sdat->unk_00090); + int r4 = NNS_SndHeapSaveState(sdat->heap); GF_ASSERT(r4 != -1); if (a0 != NULL) *a0 = r4; @@ -212,37 +213,37 @@ int FUN_02003F3C(int * a0) void FUN_02003F64(int a0) { struct SoundData * sdat = GetSoundDataPointer(); - FUN_020C2828(sdat->unk_00090, a0); + NNS_SndHeapLoadState(sdat->heap, a0); } -BOOL FUN_02003F78(u32 * a0) +BOOL FUN_02003F78(int a0) { struct SoundData * sdat = GetSoundDataPointer(); - return FUN_020C36A8(a0, sdat->unk_00090); + return NNS_SndArcLoadGroup(a0, sdat->heap); } -BOOL FUN_02003F90(u32 * a0) +BOOL FUN_02003F90(int a0) { struct SoundData * sdat = GetSoundDataPointer(); - return FUN_020C3674(a0, sdat->unk_00090); + return NNS_SndArcLoadSeq(a0, sdat->heap); } -BOOL FUN_02003FA8(u32 * a0, u32 * a1) +BOOL FUN_02003FA8(int a0, u32 a1) { struct SoundData * sdat = GetSoundDataPointer(); - return FUN_020C35E0(a0, a1, sdat->unk_00090); + return NNS_SndArcLoadSeqEx(a0, a1, sdat->heap); } -BOOL FUN_02003FC4(u32 * a0) +BOOL FUN_02003FC4(int a0) { struct SoundData * sdat = GetSoundDataPointer(); - return FUN_020C360C(a0, sdat->unk_00090); + return NNS_SndArcLoadWaveArc(a0, sdat->heap); } -BOOL FUN_02003FDC(u32 * a0) +BOOL FUN_02003FDC(int a0) { struct SoundData * sdat = GetSoundDataPointer(); - return FUN_020C3640(a0, sdat->unk_00090); + return NNS_SndArcLoadBank(a0, sdat->heap); } u32 * FUN_02003FF4(int a0) @@ -295,14 +296,14 @@ void FUN_02004088(struct SoundData * sdat) int i; for (i = 0; i < 9; i++) { - FUN_020C0F80(&sdat->unk_BBC94[i]); + NNS_SndHandleInit(&sdat->unk_BBC94[i]); } } void FUN_020040A4(struct SoundData * sdat) { FUN_02003F3C(&sdat->unk_BCD1C[0]); - FUN_02003F78(NULL); + FUN_02003F78(0); FUN_02003F3C(&sdat->unk_BCD1C[1]); } @@ -315,7 +316,7 @@ void FUN_020040C8(void) void FUN_020040DC(void) { - FUN_020C1040(7, 0); + NNS_SndPlayerStopSeqByPlayerNo(7, 0); FUN_02003FF4(7); - FUN_020C0F68(); + NNS_SndHandleReleaseSeq(); } diff --git a/arm9/src/unk_02016B94.c b/arm9/src/unk_02016B94.c index 4183087b..a8be5958 100644 --- a/arm9/src/unk_02016B94.c +++ b/arm9/src/unk_02016B94.c @@ -5,8 +5,8 @@ #include "gx.h" #include "heap.h" -extern void FUN_020B0030(void *param0, u32 *param1); -extern void FUN_020B0138(void *param0, u32 *param1); +extern void NNS_G2dGetUnpackedBGCharacterData(void *param0, u32 *param1); +extern void NNS_G2dGetUnpackedPaletteData(void *param0, u32 *param1); const u8 UNK_020EDB30[8] = { 0x10, @@ -7747,7 +7747,7 @@ THUMB_FUNC u32 FUN_0201AB28(struct Window *window, u32 heap_id, const char *path void *ptr = FUN_020161A4(heap_id, path); window->unk00 = ptr; u32 st0; - FUN_020B0030(ptr, &st0); + NNS_G2dGetUnpackedBGCharacterData(ptr, &st0); return st0; } @@ -7757,7 +7757,7 @@ THUMB_FUNC u32 FUN_0201AB44(struct Window *window, u32 heap_id, const char *path void *ptr = FUN_020161A4(heap_id, path); window->unk00 = ptr; u32 st0; - FUN_020B0138(ptr, &st0); + NNS_G2dGetUnpackedPaletteData(ptr, &st0); return st0; } diff --git a/include/sdat.h b/include/sdat.h deleted file mode 100644 index 3ba8583c..00000000 --- a/include/sdat.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef GUARD_LIBSDAT_H -#define GUARD_LIBSDAT_H - -struct SDATHeader -{ - // Generic header - char magic[4]; - u16 bom; - u16 version; - u32 filesize; - u16 header_size; - u16 section_count; - // SDAT chunks - u32 symb_offset, symb_size; - u32 info_offset, info_size; - u32 fat_offset, fat_size; - u32 file_offset, file_size; -}; - -struct SDATFileMgr -{ - struct SDATHeader header; - BOOL is_init; - FSFile file; // 00034 - FSFileID fileID; // 7C - void * fat_p; - void * symb_p; - void * info_p; -}; - -void SDAT_Init(void); -void * FUN_020C2A94(void *, u32); -void SDAT_Open(struct SDATFileMgr *, char *, void *, u32); -void FUN_020C39CC(void *); -void FUN_020C01A0(void); -int FUN_020C290C(void *); -void FUN_020C2828(void *, int); -BOOL FUN_020C36A8(u32 *, void *); -BOOL FUN_020C3674(u32 *, void *); -BOOL FUN_020C35E0(u32 *, u32 *, void *); -BOOL FUN_020C360C(u32 *, void *); -BOOL FUN_020C3640(u32 *, void *); -void FUN_020C0F80(u32 *); -void FUN_020C1040(int, int); -void FUN_020C0F68(void); - -#endif //GUARD_LIBSDAT_H diff --git a/include/sound.h b/include/sound.h index 9b50542f..9e171634 100644 --- a/include/sound.h +++ b/include/sound.h @@ -2,13 +2,15 @@ #define POKEDIAMOND_SOUND_H #include "FS_file.h" -#include "sdat.h" +#include "NNS_SND_arc.h" +#include "NNS_SND_heap.h" +#include "NNS_SND_arc_loader.h" #include "player_data.h" struct SoundData { - struct SDATFileMgr header; - void * unk_00090; + NNSSndArc header; + NNSSndHeapHandle * heap; // 0x00090 u8 unk_00094[0xBBC00]; u32 unk_BBC94[9]; u32 unk_BBCB8; @@ -54,11 +56,11 @@ void InitSoundData(void * a0, struct Options * a1); void * FUN_02003D38(u32 a0); int FUN_02003F3C(int * a0); void FUN_02003F64(int a0); -BOOL FUN_02003F78(u32 * a0); -BOOL FUN_02003F90(u32 * a0); -BOOL FUN_02003FA8(u32 * a0, u32 * a1); -BOOL FUN_02003FC4(u32 * a0); -BOOL FUN_02003FDC(u32 * a0); +BOOL FUN_02003F78(int a0); +BOOL FUN_02003F90(int a0); +BOOL FUN_02003FA8(int a0, u32 a1); +BOOL FUN_02003FC4(int a0); +BOOL FUN_02003FDC(int a0); u32 * FUN_02003FF4(int a0); u32 FUN_02004018(u32 a0); void DoSoundUpdateFrame(void); |