summaryrefslogtreecommitdiff
path: root/arm9/asm
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/asm')
-rw-r--r--arm9/asm/NNS_FND_allocator.s65
-rw-r--r--arm9/asm/NNS_FND_expheap.s583
-rw-r--r--arm9/asm/NNS_FND_frameheap.s243
-rw-r--r--arm9/asm/NNS_FND_heapcommon.s112
-rw-r--r--arm9/asm/NNS_FND_list.s169
-rw-r--r--arm9/asm/NNS_G2D_g2d_animation.s336
-rw-r--r--arm9/asm/NNS_G2D_g2d_cellanimati.s417
-rw-r--r--arm9/asm/NNS_G2D_g2d_celltransfe.s286
-rw-r--r--arm9/asm/NNS_G2D_g2d_charcanvas.s1357
-rw-r--r--arm9/asm/NNS_G2D_g2d_font.s284
-rw-r--r--arm9/asm/NNS_G2D_g2d_image.s780
-rw-r--r--arm9/asm/NNS_G2D_g2d_load.s55
-rw-r--r--arm9/asm/NNS_G2D_g2d_multicellan.s490
-rw-r--r--arm9/asm/NNS_G2D_g2d_nan_load.s155
-rw-r--r--arm9/asm/NNS_G2D_g2d_ncg_load.s66
-rw-r--r--arm9/asm/NNS_G2D_g2d_ncl_load.s66
-rw-r--r--arm9/asm/NNS_G2D_g2d_nft_load.s180
-rw-r--r--arm9/asm/NNS_G2D_g2d_nmc_load.s83
-rw-r--r--arm9/asm/NNS_G2D_g2d_nob_load.s112
-rw-r--r--arm9/asm/NNS_G2D_g2d_node.s18
-rw-r--r--arm9/asm/NNS_G2D_g2d_nsc_load.s21
-rw-r--r--arm9/asm/NNS_G2D_g2d_oam.s667
-rw-r--r--arm9/asm/NNS_G2D_g2d_oamsoftware.s421
-rw-r--r--arm9/asm/NNS_G2D_g2d_palettetabl.s11
-rw-r--r--arm9/asm/NNS_G2D_g2d_renderer.s1984
-rw-r--r--arm9/asm/NNS_G2D_g2d_renderercor.s1095
-rw-r--r--arm9/asm/NNS_G2D_g2d_softsprite.s129
-rw-r--r--arm9/asm/NNS_G2D_g2d_srtcontrol.s62
-rw-r--r--arm9/asm/NNS_G2D_g2d_textcanvas.s221
-rw-r--r--arm9/asm/NNS_G2D_g2di_bitreader.s35
-rw-r--r--arm9/asm/NNS_G2D_g2di_mtx32.s79
-rw-r--r--arm9/asm/NNS_G2D_g2di_splitchar.s13
-rw-r--r--arm9/asm/NNS_G3D_1mat1shp.s143
-rw-r--r--arm9/asm/NNS_G3D_3dsmax.s466
-rw-r--r--arm9/asm/NNS_G3D_anm.s352
-rw-r--r--arm9/asm/NNS_G3D_basic.s62
-rw-r--r--arm9/asm/NNS_G3D_cgtool.s23
-rw-r--r--arm9/asm/NNS_G3D_gecom.s197
-rw-r--r--arm9/asm/NNS_G3D_glbstate.s355
-rw-r--r--arm9/asm/NNS_G3D_kernel.s858
-rw-r--r--arm9/asm/NNS_G3D_maya.s594
-rw-r--r--arm9/asm/NNS_G3D_mem.s25
-rw-r--r--arm9/asm/NNS_G3D_model.s656
-rw-r--r--arm9/asm/NNS_G3D_nsbca.s1591
-rw-r--r--arm9/asm/NNS_G3D_nsbma.s287
-rw-r--r--arm9/asm/NNS_G3D_nsbta.s299
-rw-r--r--arm9/asm/NNS_G3D_nsbtp.s180
-rw-r--r--arm9/asm/NNS_G3D_nsbva.s49
-rw-r--r--arm9/asm/NNS_G3D_res_struct_acce.s317
-rw-r--r--arm9/asm/NNS_G3D_sbc.s2738
-rw-r--r--arm9/asm/NNS_G3D_si3d.s359
-rw-r--r--arm9/asm/NNS_G3D_util.s349
-rw-r--r--arm9/asm/NNS_G3D_xsi.s477
-rw-r--r--arm9/asm/NNS_GFD_gfd_frameplttvr.s165
-rw-r--r--arm9/asm/NNS_GFD_gfd_frametexvra.s316
-rw-r--r--arm9/asm/NNS_GFD_gfd_linkedlistp.s152
-rw-r--r--arm9/asm/NNS_GFD_gfd_linkedlistt.s283
-rw-r--r--arm9/asm/NNS_GFD_gfd_plttvramman.s26
-rw-r--r--arm9/asm/NNS_GFD_gfd_texvramman.s26
-rw-r--r--arm9/asm/NNS_GFD_gfd_vramtransfe.s592
-rw-r--r--arm9/asm/NNS_GFD_gfdi_linkedlist.s261
-rw-r--r--arm9/asm/NNS_SND_capture.s680
-rw-r--r--arm9/asm/NNS_SND_fader.s63
-rw-r--r--arm9/asm/NNS_SND_heap.s282
-rw-r--r--arm9/asm/NNS_SND_main.s125
-rw-r--r--arm9/asm/NNS_SND_player.s877
-rw-r--r--arm9/asm/NNS_SND_resource_mgr.s129
-rw-r--r--arm9/asm/NNS_SND_seqdata.s23
-rw-r--r--arm9/asm/NNS_SND_sndarc.s525
-rw-r--r--arm9/asm/NNS_SND_sndarc_loader.s872
-rw-r--r--arm9/asm/NNS_SND_sndarc_player.s261
-rw-r--r--arm9/asm/NNS_SND_sndarc_stream.s263
-rw-r--r--arm9/asm/NNS_SND_stream.s456
-rw-r--r--arm9/asm/NNS_SND_waveout.s240
-rw-r--r--arm9/asm/macros/function.inc5
-rw-r--r--arm9/asm/sndlib.s4758
-rw-r--r--arm9/asm/unk_020040F4.s90
-rw-r--r--arm9/asm/unk_020051F4.s40
-rw-r--r--arm9/asm/unk_02006864.s36
-rw-r--r--arm9/asm/unk_02006D98.s38
-rw-r--r--arm9/asm/unk_02008DEC.s14
-rw-r--r--arm9/asm/unk_02009EAC.s16
-rw-r--r--arm9/asm/unk_0200BB14.s2
-rw-r--r--arm9/asm/unk_0200CABC.s6
-rw-r--r--arm9/asm/unk_0200E850.s10
-rw-r--r--arm9/asm/unk_02011744.s4
-rw-r--r--arm9/asm/unk_02012004.s6
-rw-r--r--arm9/asm/unk_02012944.s4
-rw-r--r--arm9/asm/unk_02012CC8.s22
-rw-r--r--arm9/asm/unk_02013CD4.s48
-rw-r--r--arm9/asm/unk_02014BF4.s30
-rw-r--r--arm9/asm/unk_0201B1A8.s100
-rw-r--r--arm9/asm/unk_0201B6D0.s44
-rw-r--r--arm9/asm/unk_0201C24C.s12
-rw-r--r--arm9/asm/unk_0201C360.s4
-rw-r--r--arm9/asm/unk_0201C7A0.s14
-rw-r--r--arm9/asm/unk_0201D040.s18
-rw-r--r--arm9/asm/unk_0201E00C.s10
-rw-r--r--arm9/asm/unk_0201E7D8.s82
-rw-r--r--arm9/asm/unk_0201F06C.s164
-rw-r--r--arm9/asm/unk_02020C44.s52
-rw-r--r--arm9/asm/unk_0202134C.s6
-rw-r--r--arm9/asm/unk_02022318.s14
-rw-r--r--arm9/asm/unk_02033B68.s4
-rw-r--r--arm9/asm/unk_02053750.s10
-rw-r--r--arm9/asm/unk_020607D4.s2
-rw-r--r--arm9/asm/unk_0206DE24.s22
-rw-r--r--arm9/asm/unk_0206F3FC.s4
-rw-r--r--arm9/asm/unk_020772F0.s2
-rw-r--r--arm9/asm/unk_020799E8.s8
-rw-r--r--arm9/asm/unk_02079C70.s2
-rw-r--r--arm9/asm/unk_0207EF6C.s8
-rw-r--r--arm9/asm/unk_02086414.s22
-rw-r--r--arm9/asm/unk_0208AC14.s56
-rw-r--r--arm9/asm/unk_020ADA84.s23258
115 files changed, 28107 insertions, 28529 deletions
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}