summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf78
-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
-rw-r--r--arm9/global.inc629
-rw-r--r--arm9/lib/include/NNS_SND_arc.h38
-rw-r--r--arm9/lib/include/NNS_SND_arc_loader.h12
-rw-r--r--arm9/lib/include/NNS_SND_heap.h11
-rw-r--r--arm9/lib/src/FX_sincos.c4105
-rw-r--r--arm9/modules/04/asm/thumb_04.s26
-rw-r--r--arm9/modules/05/asm/mod05_021D74E0.s20
-rw-r--r--arm9/modules/05/asm/mod05_021D9A48.s18
-rw-r--r--arm9/modules/05/asm/mod05_021DB44C.s8
-rw-r--r--arm9/modules/05/asm/mod05_021DBABC.s42
-rw-r--r--arm9/modules/05/asm/mod05_021DBEF4.s2
-rw-r--r--arm9/modules/05/asm/mod05_021DC0B8.s14
-rw-r--r--arm9/modules/05/asm/mod05_021E3444.s14
-rw-r--r--arm9/modules/05/asm/mod05_021E4AE4.s20
-rw-r--r--arm9/modules/05/asm/mod05_021E55BC.s2
-rw-r--r--arm9/modules/05/asm/mod05_021E577C.s2
-rw-r--r--arm9/modules/05/asm/mod05_021E5918.s2
-rw-r--r--arm9/modules/05/asm/mod05_021E5AB4.s10
-rw-r--r--arm9/modules/05/asm/mod05_021E5C8C.s8
-rw-r--r--arm9/modules/05/asm/mod05_021E5E10.s8
-rw-r--r--arm9/modules/05/asm/mod05_021E7C00.s20
-rw-r--r--arm9/modules/05/asm/module_05.s80
-rw-r--r--arm9/modules/06/asm/module_06.s60
-rw-r--r--arm9/modules/07/asm/module_07.s10
-rw-r--r--arm9/modules/08/asm/module_08.s38
-rw-r--r--arm9/modules/09/asm/module_09.s8
-rw-r--r--arm9/modules/11/asm/module_11_thumb1.s8
-rw-r--r--arm9/modules/12/asm/module_12.s32
-rw-r--r--arm9/modules/13/asm/module_13_arm2.s60
-rw-r--r--arm9/modules/14/asm/module_14.s80
-rw-r--r--arm9/modules/15/asm/module_15.s14
-rw-r--r--arm9/modules/16/asm/module_16.s46
-rw-r--r--arm9/modules/17/asm/module_17.s46
-rw-r--r--arm9/modules/18/asm/module_18.s26
-rw-r--r--arm9/modules/20/asm/module_20.s34
-rw-r--r--arm9/modules/27/asm/module_27.s2
-rw-r--r--arm9/modules/28/asm/module_28.s2
-rw-r--r--arm9/modules/53/asm/module_53.s2
-rw-r--r--arm9/modules/54/asm/module_54.s2
-rw-r--r--arm9/modules/55/asm/module_55.s8
-rw-r--r--arm9/modules/56/asm/module_56.s2
-rw-r--r--arm9/modules/57/asm/module_57.s10
-rw-r--r--arm9/modules/58/asm/module_58.s2
-rw-r--r--arm9/modules/60/asm/module_60.s8
-rw-r--r--arm9/modules/61/asm/module_61.s10
-rw-r--r--arm9/modules/62/asm/module_62.s10
-rw-r--r--arm9/modules/63/asm/mod63_021D74E0.s24
-rw-r--r--arm9/modules/63/asm/mod63_021D8890.s40
-rw-r--r--arm9/modules/63/asm/mod63_021DA640.s4
-rw-r--r--arm9/modules/63/asm/mod63_021DAE5C.s2
-rw-r--r--arm9/modules/63/src/mod63_021DB450.c12
-rw-r--r--arm9/modules/64/asm/module_64.s68
-rw-r--r--arm9/modules/65/asm/module_65.s6
-rw-r--r--arm9/modules/66/asm/module_66.s2
-rw-r--r--arm9/modules/69/asm/module_69.s50
-rw-r--r--arm9/modules/70/asm/module_70.s10
-rw-r--r--arm9/modules/71/asm/module_71.s4
-rw-r--r--arm9/modules/73/asm/module_73.s34
-rw-r--r--arm9/modules/74/asm/module_74.s2
-rw-r--r--arm9/modules/75/asm/module_75.s4
-rw-r--r--arm9/modules/77/asm/module_77.s18
-rw-r--r--arm9/modules/78/asm/module_78.s30
-rw-r--r--arm9/modules/80/asm/module_80.s10
-rw-r--r--arm9/modules/81/asm/module_81.s126
-rw-r--r--arm9/modules/82/asm/module_82.s8
-rw-r--r--arm9/modules/83/asm/module_83.s12
-rw-r--r--arm9/modules/84/asm/module_84_thumb1.s60
-rw-r--r--arm9/modules/84/asm/module_84_thumb2.s16
-rw-r--r--arm9/modules/85/asm/module_85.s32
-rw-r--r--arm9/src/heap.c40
-rw-r--r--arm9/src/math_util.c6
-rw-r--r--arm9/src/sound.c51
-rw-r--r--arm9/src/unk_02016B94.c8
-rw-r--r--include/sdat.h47
-rw-r--r--include/sound.h18
191 files changed, 33494 insertions, 29575 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 0be7bc5a..5d1426c3 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -356,8 +356,81 @@ Static arm9
Object WCM_util.o
Object WIFI_stubsmd5_dummy.o
Object libVCT.o
- Object unk_020ADA84.o
- Object sndlib.o
+ ### Nitro System SDK ###
+ Object NNS_FND_list.o
+ Object NNS_FND_heapcommon.o
+ Object NNS_FND_expheap.o
+ Object NNS_FND_frameheap.o
+ Object NNS_FND_allocator.o
+ Object NNS_GFD_gfd_texvramman.o
+ Object NNS_GFD_gfd_plttvramman.o
+ Object NNS_GFD_gfd_frametexvra.o
+ Object NNS_GFD_gfd_frameplttvr.o
+ Object NNS_GFD_gfd_vramtransfe.o
+ Object NNS_GFD_gfdi_linkedlist.o
+ Object NNS_GFD_gfd_linkedlistt.o
+ Object NNS_GFD_gfd_linkedlistp.o
+ Object NNS_G2D_g2d_nan_load.o
+ Object NNS_G2D_g2d_nob_load.o
+ Object NNS_G2D_g2d_nmc_load.o
+ Object NNS_G2D_g2d_ncg_load.o
+ Object NNS_G2D_g2d_ncl_load.o
+ Object NNS_G2D_g2d_nsc_load.o
+ Object NNS_G2D_g2d_load.o
+ Object NNS_G2D_g2d_softsprite.o
+ Object NNS_G2D_g2d_animation.o
+ Object NNS_G2D_g2d_oam.o
+ Object NNS_G2D_g2d_palettetabl.o
+ Object NNS_G2D_g2d_image.o
+ Object NNS_G2D_g2d_srtcontrol.o
+ Object NNS_G2D_g2d_node.o
+ Object NNS_G2D_g2d_cellanimati.o
+ Object NNS_G2D_g2d_multicellan.o
+ Object NNS_G2D_g2d_renderer.o
+ Object NNS_G2D_g2di_mtx32.o
+ Object NNS_G2D_g2d_celltransfe.o
+ Object NNS_G2D_g2d_oamsoftware.o
+ Object NNS_G2D_g2d_renderercor.o
+ Object NNS_G2D_g2d_font.o
+ Object NNS_G2D_g2d_charcanvas.o
+ Object NNS_G2D_g2d_textcanvas.o
+ Object NNS_G2D_g2d_nft_load.o
+ Object NNS_G2D_g2di_bitreader.o
+ Object NNS_G2D_g2di_splitchar.o
+ Object NNS_G3D_kernel.o
+ Object NNS_G3D_glbstate.o
+ Object NNS_G3D_anm.o
+ Object NNS_G3D_cgtool.o
+ Object NNS_G3D_sbc.o
+ Object NNS_G3D_1mat1shp.o
+ Object NNS_G3D_gecom.o
+ Object NNS_G3D_util.o
+ Object NNS_G3D_mem.o
+ Object NNS_G3D_model.o
+ Object NNS_G3D_res_struct_acce.o
+ Object NNS_G3D_nsbca.o
+ Object NNS_G3D_nsbma.o
+ Object NNS_G3D_nsbta.o
+ Object NNS_G3D_nsbtp.o
+ Object NNS_G3D_nsbva.o
+ Object NNS_G3D_basic.o
+ Object NNS_G3D_maya.o
+ Object NNS_G3D_si3d.o
+ Object NNS_G3D_3dsmax.o
+ Object NNS_G3D_xsi.o
+ Object NNS_SND_main.o
+ Object NNS_SND_resource_mgr.o
+ Object NNS_SND_waveout.o
+ Object NNS_SND_player.o
+ Object NNS_SND_stream.o
+ Object NNS_SND_capture.o
+ Object NNS_SND_sndarc.o
+ Object NNS_SND_heap.o
+ Object NNS_SND_sndarc_loader.o
+ Object NNS_SND_sndarc_player.o
+ Object NNS_SND_sndarc_stream.o
+ Object NNS_SND_seqdata.o
+ Object NNS_SND_fader.o
### Nitro SDK ###
Object FX_mtx22.o
Object FX_mtx33.o
@@ -365,6 +438,7 @@ Static arm9
Object FX_mtx44.o
Object FX_cp.o
Object FX_vec.o
+ Object FX_sincos.o
Object FX_atan.o
Object FX.o
Object GX.o
diff --git a/arm9/asm/NNS_FND_allocator.s b/arm9/asm/NNS_FND_allocator.s
new file mode 100644
index 00000000..537ce6a0
--- /dev/null
+++ b/arm9/asm/NNS_FND_allocator.s
@@ -0,0 +1,65 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .rodata
+ ; static const in function
+
+ .global sAllocatorFunc$7864
+sAllocatorFunc$7864: ; 0x020FF7CC
+ .word AllocatorAllocForExpHeap
+ .word AllocatorFreeForExpHeap
+ .text
+
+ arm_func_start NNS_FndInitAllocatorForExpHeap
+NNS_FndInitAllocatorForExpHeap: ; 0x020AE82C
+ ldr ip, _020AE848 ; =sAllocatorFunc$7864
+ mov r3, #0x0
+ str r12, [r0, #0x0]
+ str r1, [r0, #0x4]
+ str r2, [r0, #0x8]
+ str r3, [r0, #0xc]
+ bx lr
+ .balign 4
+_020AE848: .word sAllocatorFunc$7864
+ arm_func_end NNS_FndInitAllocatorForExpHeap
+
+ arm_func_start NNS_FndFreeToAllocator
+NNS_FndFreeToAllocator: ; 0x020AE84C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ ldr r2, [r2, #0x4]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndFreeToAllocator
+
+ arm_func_start NNS_FndAllocFromAllocator
+NNS_FndAllocFromAllocator: ; 0x020AE868
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ ldr r2, [r2, #0x0]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndAllocFromAllocator
+
+ arm_func_start AllocatorFreeForExpHeap
+AllocatorFreeForExpHeap: ; 0x020AE884
+ ldr ip, _020AE890 ; =NNS_FndFreeToExpHeap
+ ldr r0, [r0, #0x4]
+ bx r12
+ .balign 4
+_020AE890: .word NNS_FndFreeToExpHeap
+ arm_func_end AllocatorFreeForExpHeap
+
+ arm_func_start AllocatorAllocForExpHeap
+AllocatorAllocForExpHeap: ; 0x020AE894
+ ldr ip, _020AE8A8 ; =NNS_FndAllocFromExpHeapEx
+ mov r2, r0
+ ldr r0, [r2, #0x4]
+ ldr r2, [r2, #0x8]
+ bx r12
+ .balign 4
+_020AE8A8: .word NNS_FndAllocFromExpHeapEx
+ arm_func_end AllocatorAllocForExpHeap
diff --git a/arm9/asm/NNS_FND_expheap.s b/arm9/asm/NNS_FND_expheap.s
new file mode 100644
index 00000000..e94dba38
--- /dev/null
+++ b/arm9/asm/NNS_FND_expheap.s
@@ -0,0 +1,583 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .extern NNSi_FndInitHeapHead
+ .extern NNSi_FndFinalizeHeap
+ .text
+
+ arm_func_start NNS_FndGetSizeForMBlockExpHeap
+NNS_FndGetSizeForMBlockExpHeap: ; 0x020ADDC0
+ ldr r0, [r0, #-0xc]
+ bx lr
+ arm_func_end NNS_FndGetSizeForMBlockExpHeap
+
+ arm_func_start NNS_FndGetTotalFreeSizeForExpHeap
+NNS_FndGetTotalFreeSizeForExpHeap: ; 0x020ADDC8
+ ldr r2, [r0, #0x24]
+ mov r0, #0x0
+ cmp r2, #0x0
+ bxeq lr
+_020ADDD8:
+ ldr r1, [r2, #0x4]
+ ldr r2, [r2, #0xc]
+ add r0, r0, r1
+ cmp r2, #0x0
+ bne _020ADDD8
+ bx lr
+ arm_func_end NNS_FndGetTotalFreeSizeForExpHeap
+
+ arm_func_start NNS_FndFreeToExpHeap
+NNS_FndFreeToExpHeap: ; 0x020ADDF0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ sub r4, r1, #0x10
+ add r5, r0, #0x24
+ add r0, sp, #0x0
+ mov r1, r4
+ bl GetRegionOfMBlock
+ mov r1, r4
+ add r0, r5, #0x8
+ bl RemoveMBlock
+ add r1, sp, #0x0
+ mov r0, r5
+ bl RecycleRegion
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_FndFreeToExpHeap
+
+ arm_func_start NNS_FndResizeForMBlockExpHeap
+NNS_FndResizeForMBlockExpHeap: ; 0x020ADE2C
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x10
+ mov r4, r1
+ mov r10, r2
+ sub r6, r4, #0x10
+ add r1, r10, #0x3
+ mov r5, r0
+ ldr r8, [r6, #0x4]
+ bic r10, r1, #0x3
+ cmp r10, r8
+ add r7, r5, #0x24
+ addeq sp, sp, #0x10
+ moveq r0, r10
+ ldmeqia sp!, {r4-r10,pc}
+ cmp r10, r8
+ bls _020ADF60
+ ldr r9, [r7, #0x0]
+ add r0, r6, #0x10
+ cmp r9, #0x0
+ add r0, r8, r0
+ beq _020ADE94
+_020ADE80:
+ cmp r9, r0
+ beq _020ADE94
+ ldr r9, [r9, #0xc]
+ cmp r9, #0x0
+ bne _020ADE80
+_020ADE94:
+ cmp r9, #0x0
+ beq _020ADEB0
+ ldr r0, [r9, #0x4]
+ add r1, r8, #0x10
+ add r0, r1, r0
+ cmp r10, r0
+ bls _020ADEBC
+_020ADEB0:
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r10,pc}
+_020ADEBC:
+ add r0, sp, #0x0
+ mov r1, r9
+ bl GetRegionOfMBlock
+ mov r0, r7
+ mov r1, r9
+ bl RemoveMBlock
+ ldr r2, [sp, #0x4]
+ add r3, r10, r4
+ ldr r9, [sp, #0x0]
+ sub r1, r2, r3
+ str r3, [sp, #0x0]
+ cmp r1, #0x10
+ strcc r2, [sp, #0x0]
+ mov r8, r0
+ ldr r0, [sp, #0x0]
+ sub r0, r0, r4
+ str r0, [r6, #0x4]
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ blo _020ADF30
+ ldr r1, _020ADF9C ; =0x00004652
+ add r0, sp, #0x0
+ bl InitMBlock
+ mov r1, r0
+ mov r0, r7
+ mov r2, r8
+ bl InsertMBlock
+_020ADF30:
+ ldr r0, [r5, #0x20]
+ ldr r1, [sp, #0x0]
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ sub r2, r1, r9
+ ands r0, r0, #0x1
+ beq _020ADF90
+ mov r1, r9
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ b _020ADF90
+_020ADF60:
+ add r0, r10, r4
+ str r0, [sp, #0x8]
+ ldr r1, [r6, #0x4]
+ add r0, r6, #0x10
+ add r0, r1, r0
+ str r0, [sp, #0xc]
+ add r1, sp, #0x8
+ mov r0, r7
+ str r10, [r6, #0x4]
+ bl RecycleRegion
+ cmp r0, #0x0
+ streq r8, [r6, #0x4]
+_020ADF90:
+ ldr r0, [r6, #0x4]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020ADF9C: .word 0x00004652
+ arm_func_end NNS_FndResizeForMBlockExpHeap
+
+ arm_func_start NNS_FndAllocFromExpHeapEx
+NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ moveq r1, #0x1
+ add r1, r1, #0x3
+ cmp r2, #0x0
+ bic r1, r1, #0x3
+ blt _020ADFCC
+ bl AllocFromHead
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADFCC:
+ rsb r2, r2, #0x0
+ bl AllocFromTail
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndAllocFromExpHeapEx
+
+ arm_func_start NNS_FndDestroyExpHeap
+NNS_FndDestroyExpHeap: ; 0x020ADFDC
+ ldr ip, _020ADFE4 ; =NNSi_FndFinalizeHeap
+ bx r12
+ .balign 4
+_020ADFE4: .word NNSi_FndFinalizeHeap
+ arm_func_end NNS_FndDestroyExpHeap
+
+ arm_func_start NNS_FndCreateExpHeapEx
+NNS_FndCreateExpHeapEx: ; 0x020ADFE8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ add r1, r1, r0
+ add r0, r0, #0x3
+ bic r1, r1, #0x3
+ bic r0, r0, #0x3
+ cmp r0, r1
+ bhi _020AE014
+ sub r3, r1, r0
+ cmp r3, #0x4c
+ bhs _020AE020
+_020AE014:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020AE020:
+ bl InitExpHeap
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndCreateExpHeapEx
+
+ arm_func_start RecycleRegion
+RecycleRegion:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r1
+ ldr r2, [r5, #0x0]
+ ldr r1, [r5, #0x4]
+ mov r6, r0
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ ldr r1, [r6, #0x0]
+ mov r4, #0x0
+ cmp r1, #0x0
+ beq _020AE0A0
+ ldr r0, [r5, #0x0]
+_020AE060:
+ cmp r1, r0
+ movcc r4, r1
+ blo _020AE094
+ ldr r0, [r5, #0x4]
+ cmp r1, r0
+ bne _020AE0A0
+ ldr r2, [r1, #0x4]
+ add r0, r1, #0x10
+ add r2, r2, r0
+ mov r0, r6
+ str r2, [sp, #0x4]
+ bl RemoveMBlock
+ b _020AE0A0
+_020AE094:
+ ldr r1, [r1, #0xc]
+ cmp r1, #0x0
+ bne _020AE060
+_020AE0A0:
+ cmp r4, #0x0
+ beq _020AE0D4
+ ldr r2, [r4, #0x4]
+ add r1, r4, #0x10
+ ldr r0, [r5, #0x0]
+ add r1, r2, r1
+ cmp r1, r0
+ bne _020AE0D4
+ mov r0, r6
+ mov r1, r4
+ str r4, [sp, #0x0]
+ bl RemoveMBlock
+ mov r4, r0
+_020AE0D4:
+ ldr r1, [sp, #0x4]
+ ldr r0, [sp, #0x0]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ addcc sp, sp, #0x8
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r6,pc}
+ ldr r1, _020AE118 ; =0x00004652
+ add r0, sp, #0x0
+ bl InitMBlock
+ mov r1, r0
+ mov r0, r6
+ mov r2, r4
+ bl InsertMBlock
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AE118: .word 0x00004652
+ arm_func_end RecycleRegion
+
+ local_arm_func_start AllocFromTail
+AllocFromTail: ; 0x020AE11C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ add r0, r0, #0x24
+ ldrh r4, [r0, #0x12]
+ mov r3, r1
+ mvn lr, #0x0
+ and r1, r4, #0x1
+ mov r1, r1, lsl #0x10
+ movs r1, r1, lsr #0x10
+ moveq r5, #0x1
+ mov r1, #0x0
+ ldr r4, [r0, #0x4]
+ movne r5, #0x0
+ mov r12, r1
+ cmp r4, #0x0
+ beq _020AE1B0
+ sub r2, r2, #0x1
+ mvn r2, r2
+_020AE164:
+ ldr r8, [r4, #0x4]
+ add r9, r4, #0x10
+ add r6, r8, r9
+ sub r6, r6, r3
+ and r7, r2, r6
+ subs r6, r7, r9
+ bmi _020AE1A4
+ cmp lr, r8
+ bls _020AE1A4
+ mov r1, r4
+ mov lr, r8
+ mov r12, r7
+ cmp r5, #0x0
+ bne _020AE1B0
+ cmp r8, r3
+ beq _020AE1B0
+_020AE1A4:
+ ldr r4, [r4, #0x8]
+ cmp r4, #0x0
+ bne _020AE164
+_020AE1B0:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+ mov r4, #0x1
+ mov r2, r12
+ str r4, [sp, #0x0]
+ bl AllocUsedBlockFromFreeBlock
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end AllocFromTail
+
+ local_arm_func_start AllocFromHead
+AllocFromHead: ; 0x020AE1D8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ add r0, r0, #0x24
+ ldrh r4, [r0, #0x12]
+ mov r3, r1
+ ldr r5, [r0, #0x0]
+ and r1, r4, #0x1
+ mov r1, r1, lsl #0x10
+ movs r1, r1, lsr #0x10
+ moveq r6, #0x1
+ mov r1, #0x0
+ movne r6, #0x0
+ mov lr, r1
+ cmp r5, #0x0
+ mvn r4, #0x0
+ beq _020AE270
+ sub r12, r2, #0x1
+ mvn r2, r12
+_020AE220:
+ add r8, r5, #0x10
+ add r7, r12, r8
+ and r9, r2, r7
+ sub r7, r9, r8
+ ldr r8, [r5, #0x4]
+ add r7, r3, r7
+ cmp r8, r7
+ blo _020AE264
+ cmp r4, r8
+ bls _020AE264
+ mov r1, r5
+ mov r4, r8
+ mov lr, r9
+ cmp r6, #0x0
+ bne _020AE270
+ cmp r8, r3
+ beq _020AE270
+_020AE264:
+ ldr r5, [r5, #0xc]
+ cmp r5, #0x0
+ bne _020AE220
+_020AE270:
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+ mov r4, #0x0
+ mov r2, lr
+ str r4, [sp, #0x0]
+ bl AllocUsedBlockFromFreeBlock
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end AllocFromHead
+
+ arm_func_start AllocUsedBlockFromFreeBlock
+AllocUsedBlockFromFreeBlock: ; 0x020AE298
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x18
+ mov r7, r0
+ add r0, sp, #0x0
+ mov r8, r1
+ mov r6, r2
+ mov r5, r3
+ bl GetRegionOfMBlock
+ ldr r3, [sp, #0x4]
+ sub r4, r6, #0x10
+ add r2, r5, r6
+ mov r0, r7
+ mov r1, r8
+ str r4, [sp, #0x4]
+ str r3, [sp, #0xc]
+ str r2, [sp, #0x8]
+ bl RemoveMBlock
+ ldr r2, [sp, #0x0]
+ ldr r1, [sp, #0x4]
+ mov r5, r0
+ sub r0, r1, r2
+ cmp r0, #0x10
+ strcc r2, [sp, #0x4]
+ blo _020AE318
+ ldr r1, _020AE418 ; =0x00004652
+ add r0, sp, #0x0
+ bl InitMBlock
+ mov r1, r0
+ mov r0, r7
+ mov r2, r5
+ bl InsertMBlock
+ mov r5, r0
+_020AE318:
+ ldr r1, [sp, #0xc]
+ ldr r0, [sp, #0x8]
+ sub r0, r1, r0
+ cmp r0, #0x10
+ strcc r1, [sp, #0x8]
+ blo _020AE34C
+ ldr r1, _020AE418 ; =0x00004652
+ add r0, sp, #0x8
+ bl InitMBlock
+ mov r1, r0
+ mov r0, r7
+ mov r2, r5
+ bl InsertMBlock
+_020AE34C:
+ ldr r0, [r7, #-0x4]
+ ldr r1, [sp, #0x4]
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ ldr r2, [sp, #0x8]
+ mov r0, r0, lsr #0x10
+ sub r2, r2, r1
+ ands r0, r0, #0x1
+ beq _020AE378
+ mov r0, #0x0
+ bl MIi_CpuClear32
+_020AE378:
+ ldr r2, [sp, #0x8]
+ ldr r1, _020AE41C ; =0x00005544
+ add r0, sp, #0x10
+ str r4, [sp, #0x10]
+ str r2, [sp, #0x14]
+ bl InitMBlock
+ mov r1, r0
+ ldrh r3, [r1, #0x2]
+ ldrh r2, [sp, #0x30]
+ add r0, r7, #0x8
+ bic r3, r3, #0x8000
+ strh r3, [r1, #0x2]
+ ldrh r3, [r1, #0x2]
+ and r2, r2, #0x1
+ orr r2, r3, r2, lsl #0xf
+ strh r2, [r1, #0x2]
+ ldrh r2, [r1, #0x2]
+ ldr r3, [sp, #0x4]
+ bic r2, r2, #0x7f00
+ strh r2, [r1, #0x2]
+ sub r2, r1, r3
+ mov r2, r2, lsl #0x10
+ mov r2, r2, lsr #0x10
+ ldrh r3, [r1, #0x2]
+ and r2, r2, #0x7f
+ orr r2, r3, r2, lsl #0x8
+ strh r2, [r1, #0x2]
+ ldrh r2, [r1, #0x2]
+ ldrh r3, [r7, #0x10]
+ bic r2, r2, #0xff
+ strh r2, [r1, #0x2]
+ ldrh r2, [r1, #0x2]
+ and r3, r3, #0xff
+ orr r2, r2, r3
+ strh r2, [r1, #0x2]
+ ldr r2, [r7, #0xc]
+ bl InsertMBlock
+ mov r0, r6
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020AE418: .word 0x00004652
+_020AE41C: .word 0x00005544
+ arm_func_end AllocUsedBlockFromFreeBlock
+
+ arm_func_start InitExpHeap
+InitExpHeap: ; 0x020AE420
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r3, r1
+ add r4, r5, #0x24
+ str r2, [sp, #0x0]
+ ldr r1, _020AE498 ; =0x45585048
+ add r2, r4, #0x14
+ bl NNSi_FndInitHeapHead
+ mov r0, #0x0
+ strh r0, [r4, #0x10]
+ strh r0, [r4, #0x12]
+ ldrh r2, [r4, #0x12]
+ ldr r1, _020AE49C ; =0x00004652
+ add r0, sp, #0x4
+ bic r2, r2, #0x1
+ strh r2, [r4, #0x12]
+ ldr r2, [r5, #0x18]
+ str r2, [sp, #0x4]
+ ldr r2, [r5, #0x1c]
+ str r2, [sp, #0x8]
+ bl InitMBlock
+ str r0, [r5, #0x24]
+ str r0, [r4, #0x4]
+ mov r1, #0x0
+ str r1, [r4, #0x8]
+ mov r0, r5
+ str r1, [r4, #0xc]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AE498: .word 0x45585048
+_020AE49C: .word 0x00004652
+ arm_func_end InitExpHeap
+
+ arm_func_start InitMBlock
+InitMBlock: ; 0x020AE4A0
+ ldr r3, [r0, #0x0]
+ mov r2, #0x0
+ strh r1, [r3, #0x0]
+ strh r2, [r3, #0x2]
+ ldr r1, [r0, #0x4]
+ add r0, r3, #0x10
+ sub r0, r1, r0
+ str r0, [r3, #0x4]
+ str r2, [r3, #0x8]
+ mov r0, r3
+ str r2, [r3, #0xc]
+ bx lr
+ arm_func_end InitMBlock
+
+ arm_func_start InsertMBlock
+InsertMBlock: ; 0x020AE4D0
+ str r2, [r1, #0x8]
+ cmp r2, #0x0
+ ldrne r3, [r2, #0xc]
+ strne r1, [r2, #0xc]
+ ldreq r3, [r0, #0x0]
+ streq r1, [r0, #0x0]
+ str r3, [r1, #0xc]
+ cmp r3, #0x0
+ strne r1, [r3, #0x8]
+ streq r1, [r0, #0x4]
+ mov r0, r1
+ bx lr
+ arm_func_end InsertMBlock
+
+ arm_func_start RemoveMBlock
+RemoveMBlock: ; 0x020AE500
+ ldr r2, [r1, #0x8]
+ ldr r1, [r1, #0xc]
+ cmp r2, #0x0
+ strne r1, [r2, #0xc]
+ streq r1, [r0, #0x0]
+ cmp r1, #0x0
+ strne r2, [r1, #0x8]
+ streq r2, [r0, #0x4]
+ mov r0, r2
+ bx lr
+ arm_func_end RemoveMBlock
+
+ arm_func_start GetRegionOfMBlock
+GetRegionOfMBlock: ; 0x020AE528
+ ldrh r2, [r1, #0x2]
+ add r3, r1, #0x10
+ mov r2, r2, asr #0x8
+ and r2, r2, #0x7f
+ mov r2, r2, lsl #0x10
+ sub r2, r1, r2, lsr #0x10
+ str r2, [r0, #0x0]
+ ldr r1, [r1, #0x4]
+ add r1, r1, r3
+ str r1, [r0, #0x4]
+ bx lr
+ arm_func_end GetRegionOfMBlock
diff --git a/arm9/asm/NNS_FND_frameheap.s b/arm9/asm/NNS_FND_frameheap.s
new file mode 100644
index 00000000..cfa221d4
--- /dev/null
+++ b/arm9/asm/NNS_FND_frameheap.s
@@ -0,0 +1,243 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .extern NNSi_FndInitHeapHead
+ .extern NNSi_FndFinalizeHeap
+ .text
+
+ arm_func_start NNS_FndFreeByStateToFrmHeap
+NNS_FndFreeByStateToFrmHeap: ; 0x020AE554
+ add r2, r0, #0x24
+ cmp r1, #0x0
+ ldr r3, [r2, #0x8]
+ beq _020AE584
+ cmp r3, #0x0
+ beq _020AE584
+_020AE56C:
+ ldr r0, [r3, #0x0]
+ cmp r0, r1
+ beq _020AE584
+ ldr r3, [r3, #0xc]
+ cmp r3, #0x0
+ bne _020AE56C
+_020AE584:
+ cmp r3, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ ldr r1, [r3, #0x4]
+ mov r0, #0x1
+ str r1, [r2, #0x0]
+ ldr r1, [r3, #0x8]
+ str r1, [r2, #0x4]
+ ldr r1, [r3, #0xc]
+ str r1, [r2, #0x8]
+ bx lr
+ arm_func_end NNS_FndFreeByStateToFrmHeap
+
+ arm_func_start NNS_FndRecordStateForFrmHeap
+NNS_FndRecordStateForFrmHeap: ; 0x020AE5B0
+ stmdb sp!, {r4-r6,lr}
+ add r4, r0, #0x24
+ ldr r5, [r0, #0x24]
+ mov r6, r1
+ mov r0, r4
+ mov r1, #0x10
+ mov r2, #0x4
+ bl AllocFromHead
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ str r6, [r0, #0x0]
+ str r5, [r0, #0x4]
+ ldr r1, [r4, #0x4]
+ str r1, [r0, #0x8]
+ ldr r1, [r4, #0x8]
+ str r1, [r0, #0xc]
+ str r0, [r4, #0x8]
+ mov r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_FndRecordStateForFrmHeap
+
+ arm_func_start NNS_FndFreeToFrmHeap
+NNS_FndFreeToFrmHeap: ; 0x020AE600
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ ands r1, r4, #0x1
+ beq _020AE61C
+ bl FreeHead
+_020AE61C:
+ ands r0, r4, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ mov r0, r5
+ bl FreeTail
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_FndFreeToFrmHeap
+
+ arm_func_start NNS_FndAllocFromFrmHeapEx
+NNS_FndAllocFromFrmHeapEx: ; 0x020AE638
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ moveq r1, #0x1
+ add r1, r1, #0x3
+ add r0, r0, #0x24
+ cmp r2, #0x0
+ bic r1, r1, #0x3
+ blt _020AE668
+ bl AllocFromHead
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020AE668:
+ rsb r2, r2, #0x0
+ bl AllocFromTail
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndAllocFromFrmHeapEx
+
+ arm_func_start NNS_FndDestroyFrmHeap
+NNS_FndDestroyFrmHeap: ; 0x020AE678
+ ldr ip, _020AE680 ; =NNSi_FndFinalizeHeap
+ bx r12
+ .balign 4
+_020AE680: .word NNSi_FndFinalizeHeap
+ arm_func_end NNS_FndDestroyFrmHeap
+
+ arm_func_start NNS_FndCreateFrmHeapEx
+NNS_FndCreateFrmHeapEx: ; 0x020AE684
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ add r1, r1, r0
+ add r0, r0, #0x3
+ bic r1, r1, #0x3
+ bic r0, r0, #0x3
+ cmp r0, r1
+ bhi _020AE6B0
+ sub r3, r1, r0
+ cmp r3, #0x30
+ bhs _020AE6BC
+_020AE6B0:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {pc}
+_020AE6BC:
+ bl InitFrameHeap
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndCreateFrmHeapEx
+
+ arm_func_start FreeTail
+FreeTail: ; 0x020AE6C8
+ add r2, r0, #0x24
+ ldr r3, [r2, #0x8]
+ cmp r3, #0x0
+ beq _020AE6EC
+_020AE6D8:
+ ldr r1, [r0, #0x1c]
+ str r1, [r3, #0x8]
+ ldr r3, [r3, #0xc]
+ cmp r3, #0x0
+ bne _020AE6D8
+_020AE6EC:
+ ldr r0, [r0, #0x1c]
+ str r0, [r2, #0x4]
+ bx lr
+ arm_func_end FreeTail
+
+ arm_func_start FreeHead
+FreeHead: ; 0x020AE6F8
+ ldr r1, [r0, #0x18]
+ add r2, r0, #0x24
+ str r1, [r0, #0x24]
+ mov r0, #0x0
+ str r0, [r2, #0x8]
+ bx lr
+ arm_func_end FreeHead
+
+ local_arm_func_start AllocFromTail
+AllocFromTail: ; 0x020AE710
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r3, [r5, #0x4]
+ sub r0, r2, #0x1
+ mvn r2, r0
+ sub r1, r3, r1
+ ldr r0, [r5, #0x0]
+ and r4, r2, r1
+ cmp r4, r0
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r5,pc}
+ ldr r0, [r5, #-0x4]
+ sub r2, r3, r4
+ and r0, r0, #0xff
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ ands r0, r0, #0x1
+ beq _020AE76C
+ mov r1, r4
+ mov r0, #0x0
+ bl MIi_CpuClear32
+_020AE76C:
+ mov r0, r4
+ str r4, [r5, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end AllocFromTail
+
+ local_arm_func_start AllocFromHead
+AllocFromHead:
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x0]
+ sub r2, r2, #0x1
+ mvn r3, r2
+ add r2, r2, r0
+ and r5, r3, r2
+ ldr r2, [r6, #0x4]
+ add r4, r1, r5
+ cmp r4, r2
+ movhi r0, #0x0
+ ldmhiia sp!, {r4-r6,pc}
+ ldr r1, [r6, #-0x4]
+ sub r2, r4, r0
+ and r1, r1, #0xff
+ mov r1, r1, lsl #0x10
+ mov r1, r1, lsr #0x10
+ ands r1, r1, #0x1
+ beq _020AE7D4
+ mov r1, r0
+ mov r0, #0x0
+ bl MIi_CpuClear32
+_020AE7D4:
+ mov r0, r5
+ str r4, [r6, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end AllocFromHead
+
+ arm_func_start InitFrameHeap
+InitFrameHeap: ; 0x020AE7E0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r3, r1
+ add r4, r5, #0x24
+ str r2, [sp, #0x0]
+ ldr r1, _020AE828 ; =0x46524D48
+ add r2, r4, #0xc
+ bl NNSi_FndInitHeapHead
+ ldr r0, [r5, #0x18]
+ mov r1, #0x0
+ str r0, [r5, #0x24]
+ ldr r2, [r5, #0x1c]
+ mov r0, r5
+ str r2, [r4, #0x4]
+ str r1, [r4, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AE828: .word 0x46524D48
+ arm_func_end InitFrameHeap
diff --git a/arm9/asm/NNS_FND_heapcommon.s b/arm9/asm/NNS_FND_heapcommon.s
new file mode 100644
index 00000000..ca3108d2
--- /dev/null
+++ b/arm9/asm/NNS_FND_heapcommon.s
@@ -0,0 +1,112 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sRootListInitialized
+sRootListInitialized: ; 0x021CCD38
+ .space 0x4
+
+ .global sRootList
+sRootList: ; 0x021CCD3C
+ .space 0xc
+ .text
+
+ arm_func_start NNSi_FndFinalizeHeap
+NNSi_FndFinalizeHeap: ; 0x020ADC8C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl FindListContainHeap
+ mov r1, r4
+ bl NNS_FndRemoveListObject
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_FndFinalizeHeap
+
+ arm_func_start NNSi_FndInitHeapHead
+NNSi_FndInitHeapHead:
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ str r1, [r4, #0x0]
+ str r2, [r4, #0x18]
+ str r3, [r4, #0x1c]
+ mov r0, #0x0
+ str r0, [r4, #0x20]
+ ldr r1, [r4, #0x20]
+ ldrh r0, [sp, #0x8]
+ bic r1, r1, #0xff
+ str r1, [r4, #0x20]
+ ldr r1, [r4, #0x20]
+ and r0, r0, #0xff
+ orr r2, r1, r0
+ add r0, r4, #0xc
+ mov r1, #0x4
+ str r2, [r4, #0x20]
+ bl NNS_FndInitList
+ ldr r0, _020ADD28 ; =sRootListInitialized
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020ADD14
+ ldr r0, _020ADD2C ; =sRootList
+ mov r1, #0x4
+ bl NNS_FndInitList
+ ldr r0, _020ADD28 ; =sRootListInitialized
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020ADD14:
+ mov r0, r4
+ bl FindListContainHeap
+ mov r1, r4
+ bl NNS_FndAppendListObject
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ADD28: .word sRootListInitialized
+_020ADD2C: .word sRootList
+ arm_func_end NNSi_FndInitHeapHead
+
+ arm_func_start FindListContainHeap
+FindListContainHeap: ; 0x020ADD30
+ stmdb sp!, {r4,lr}
+ ldr r4, _020ADD54 ; =sRootList
+ mov r1, r0
+ mov r0, r4
+ bl FindContainHeap
+ cmp r0, #0x0
+ addne r4, r0, #0xc
+ mov r0, r4
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020ADD54: .word sRootList
+ arm_func_end FindListContainHeap
+
+ arm_func_start FindContainHeap
+FindContainHeap:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r1, #0x0
+ mov r6, r0
+ bl NNS_FndGetNextListObject
+ movs r4, r0
+ beq _020ADDB8
+_020ADD74:
+ ldr r0, [r4, #0x18]
+ cmp r0, r5
+ bhi _020ADDA4
+ ldr r0, [r4, #0x1c]
+ cmp r5, r0
+ bhs _020ADDA4
+ mov r1, r5
+ add r0, r4, #0xc
+ bl FindContainHeap
+ cmp r0, #0x0
+ moveq r0, r4
+ ldmia sp!, {r4-r6,pc}
+_020ADDA4:
+ mov r0, r6
+ mov r1, r4
+ bl NNS_FndGetNextListObject
+ movs r4, r0
+ bne _020ADD74
+_020ADDB8:
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end FindContainHeap
diff --git a/arm9/asm/NNS_FND_list.s b/arm9/asm/NNS_FND_list.s
new file mode 100644
index 00000000..21999c11
--- /dev/null
+++ b/arm9/asm/NNS_FND_list.s
@@ -0,0 +1,169 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .text
+
+ arm_func_start NNS_FndGetPrevListObject
+NNS_FndGetPrevListObject: ; 0x020ADA84
+ cmp r1, #0x0
+ ldreq r0, [r0, #0x4]
+ ldrneh r0, [r0, #0xa]
+ ldrne r0, [r1, r0]
+ bx lr
+ arm_func_end NNS_FndGetPrevListObject
+
+ arm_func_start NNS_FndGetNextListObject
+NNS_FndGetNextListObject: ; 0x020ADA98
+ cmp r1, #0x0
+ ldreq r0, [r0, #0x0]
+ ldrneh r0, [r0, #0xa]
+ addne r0, r1, r0
+ ldrne r0, [r0, #0x4]
+ bx lr
+ arm_func_end NNS_FndGetNextListObject
+
+ arm_func_start NNS_FndRemoveListObject
+NNS_FndRemoveListObject: ; 0x020ADAB0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r12, [r0, #0xa]
+ ldr r3, [r1, r12]
+ add lr, r1, r12
+ cmp r3, #0x0
+ ldreq r1, [lr, #0x4]
+ streq r1, [r0, #0x0]
+ ldrne r2, [lr, #0x4]
+ addne r1, r3, r12
+ strne r2, [r1, #0x4]
+ ldr r3, [lr, #0x4]
+ cmp r3, #0x0
+ ldreq r1, [lr, #0x0]
+ streq r1, [r0, #0x4]
+ ldrneh r1, [r0, #0xa]
+ ldrne r2, [lr, #0x0]
+ strne r2, [r3, r1]
+ mov r1, #0x0
+ str r1, [lr, #0x0]
+ str r1, [lr, #0x4]
+ ldrh r1, [r0, #0x8]
+ sub r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndRemoveListObject
+
+ arm_func_start NNS_FndInsertListObject
+NNS_FndInsertListObject: ; 0x020ADB18
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ bne _020ADB38
+ mov r1, r2
+ bl NNS_FndAppendListObject
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADB38:
+ ldr r3, [r0, #0x0]
+ cmp r1, r3
+ bne _020ADB54
+ mov r1, r2
+ bl NNS_FndPrependListObject
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADB54:
+ ldrh lr, [r0, #0xa]
+ ldr r3, [r1, lr]
+ add r12, r2, lr
+ str r3, [r2, lr]
+ str r1, [r12, #0x4]
+ add r3, r3, lr
+ str r2, [r3, #0x4]
+ ldrh r3, [r0, #0xa]
+ str r2, [r1, r3]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndInsertListObject
+
+ arm_func_start NNS_FndPrependListObject
+NNS_FndPrependListObject: ; 0x020ADB8C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ bne _020ADBAC
+ bl SetFirstObject
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADBAC:
+ ldrh r3, [r0, #0xa]
+ mov r2, #0x0
+ str r2, [r1, r3]
+ ldr r2, [r0, #0x0]
+ add r3, r1, r3
+ str r2, [r3, #0x4]
+ ldrh r2, [r0, #0xa]
+ ldr r3, [r0, #0x0]
+ str r1, [r3, r2]
+ str r1, [r0, #0x0]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndPrependListObject
+
+ arm_func_start NNS_FndAppendListObject
+NNS_FndAppendListObject: ; 0x020ADBE8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ bne _020ADC08
+ bl SetFirstObject
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020ADC08:
+ ldrh r12, [r0, #0xa]
+ ldr r3, [r0, #0x4]
+ mov r2, #0x0
+ str r3, [r1, r12]
+ add r3, r1, r12
+ str r2, [r3, #0x4]
+ ldrh r2, [r0, #0xa]
+ ldr r3, [r0, #0x4]
+ add r2, r3, r2
+ str r1, [r2, #0x4]
+ str r1, [r0, #0x4]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_FndAppendListObject
+
+ arm_func_start SetFirstObject
+SetFirstObject: ; 0x020ADC48
+ ldrh r3, [r0, #0xa]
+ mov r2, #0x0
+ add r12, r1, r3
+ str r2, [r12, #0x4]
+ str r2, [r1, r3]
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ bx lr
+ arm_func_end SetFirstObject
+
+ arm_func_start NNS_FndInitList
+NNS_FndInitList: ; 0x020ADC74
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x4]
+ strh r2, [r0, #0x8]
+ strh r1, [r0, #0xa]
+ bx lr
+ arm_func_end NNS_FndInitList
diff --git a/arm9/asm/NNS_G2D_g2d_animation.s b/arm9/asm/NNS_G2D_g2d_animation.s
new file mode 100644
index 00000000..23daa1c6
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_animation.s
@@ -0,0 +1,336 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dIsAnimCtrlLoopAnim
+NNSi_G2dIsAnimCtrlLoopAnim: ; 0x020B0408
+ ldr r1, [r0, #0x14]
+ cmp r1, #0x0
+ ldreq r0, [r0, #0x18]
+ ldreq r1, [r0, #0x8]
+ cmp r1, #0x2
+ beq _020B0428
+ cmp r1, #0x4
+ bne _020B0430
+_020B0428:
+ mov r0, #0x1
+ bx lr
+_020B0430:
+ mov r0, #0x0
+ bx lr
+ arm_func_end NNSi_G2dIsAnimCtrlLoopAnim
+
+ arm_func_start NNS_G2dBindAnimCtrl
+NNS_G2dBindAnimCtrl: ; 0x020B0438
+ ldr ip, _020B0444 ; =NNS_G2dResetAnimCtrlState
+ str r1, [r0, #0x18]
+ bx r12
+ .balign 4
+_020B0444: .word NNS_G2dResetAnimCtrlState
+ arm_func_end NNS_G2dBindAnimCtrl
+
+ arm_func_start NNS_G2dResetAnimCtrlState
+NNS_G2dResetAnimCtrlState: ; 0x020B0448
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ movgt r2, #0x1
+ ldr r1, [r0, #0x4]
+ movle r2, #0x0
+ eors r1, r2, r1
+ beq _020B047C
+ ldr r2, [r0, #0x18]
+ ldrh r1, [r2, #0x2]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ str r1, [r0, #0x0]
+ b _020B0494
+_020B047C:
+ ldr r2, [r0, #0x18]
+ ldrh r1, [r2, #0x0]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ sub r1, r1, #0x8
+ str r1, [r0, #0x0]
+_020B0494:
+ ldr ip, _020B04A4 ; =NNS_G2dTickAnimCtrl
+ mov r1, #0x0
+ str r1, [r0, #0xc]
+ bx r12
+ .balign 4
+_020B04A4: .word NNS_G2dTickAnimCtrl
+ arm_func_end NNS_G2dResetAnimCtrlState
+
+ arm_func_start NNS_G2dInitAnimCallBackFunctor
+NNS_G2dInitAnimCallBackFunctor: ; 0x020B04A8
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x8]
+ strh r1, [r0, #0xc]
+ bx lr
+ arm_func_end NNS_G2dInitAnimCallBackFunctor
+
+ arm_func_start NNS_G2dInitAnimCtrl
+NNS_G2dInitAnimCtrl: ; 0x020B04C0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r0, r4, #0x1c
+ bl NNS_G2dInitAnimCallBackFunctor
+ mov r1, #0x0
+ str r1, [r4, #0x0]
+ str r1, [r4, #0x4]
+ mov r0, #0x1
+ str r0, [r4, #0x8]
+ str r1, [r4, #0xc]
+ mov r0, #0x1000
+ str r0, [r4, #0x10]
+ str r1, [r4, #0x14]
+ str r1, [r4, #0x18]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dInitAnimCtrl
+
+ arm_func_start NNS_G2dGetAnimCtrlCurrentFrame
+NNS_G2dGetAnimCtrlCurrentFrame: ; 0x020B04FC
+ ldr r1, [r0, #0x18]
+ ldr r2, [r0, #0x0]
+ ldr r0, [r1, #0xc]
+ sub r0, r2, r0
+ mov r0, r0, lsl #0xd
+ mov r0, r0, lsr #0x10
+ bx lr
+ arm_func_end NNS_G2dGetAnimCtrlCurrentFrame
+
+ arm_func_start NNS_G2dSetAnimCtrlCurrentFrame
+NNS_G2dSetAnimCtrlCurrentFrame: ; 0x020B0518
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl SetAnimCtrlCurrentFrameImpl_
+ cmp r0, #0x0
+ movne r1, #0x0
+ strne r1, [r4, #0xc]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dSetAnimCtrlCurrentFrame
+
+ arm_func_start NNS_G2dTickAnimCtrl
+NNS_G2dTickAnimCtrl: ; 0x020B0534
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ ldr r0, [r8, #0x8]
+ mov r7, #0x0
+ cmp r0, #0x1
+ movne r0, r7
+ ldmneia sp!, {r4-r8,pc}
+ ldr r2, [r8, #0x10]
+ mov r0, #0x800
+ smull r3, r1, r2, r1
+ adds r0, r3, r0
+ adc r1, r1, r7
+ mov r0, r0, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ bl abs
+ ldr r1, [r8, #0xc]
+ add r6, r8, #0xc
+ add r0, r1, r0
+ str r0, [r8, #0xc]
+ mov r4, r7
+ mov r5, #0x1
+ b _020B06A8
+_020B058C:
+ ldr r0, [r8, #0x0]
+ ldr r1, [r6, #0x0]
+ ldrh r0, [r0, #0x4]
+ mov r7, r5
+ sub r0, r1, r0, lsl #0xc
+ str r0, [r6, #0x0]
+ ldr r0, [r8, #0x10]
+ cmp r0, #0x0
+ movgt r1, r5
+ ldr r0, [r8, #0x4]
+ movle r1, r4
+ eors r0, r1, r0
+ ldrne r0, [r8, #0x0]
+ addne r0, r0, #0x8
+ strne r0, [r8, #0x0]
+ ldreq r0, [r8, #0x0]
+ subeq r0, r0, #0x8
+ streq r0, [r8, #0x0]
+ ldr r1, [r8, #0x10]
+ ldr r0, [r8, #0x0]
+ cmp r1, #0x0
+ movgt r2, r5
+ ldr r1, [r8, #0x4]
+ movle r2, r4
+ eors r1, r2, r1
+ beq _020B0614
+ ldr r2, [r8, #0x18]
+ ldrh r1, [r2, #0x0]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ cmp r0, r1
+ movcs r0, r5
+ movcc r0, r4
+ b _020B0634
+_020B0614:
+ ldr r2, [r8, #0x18]
+ ldrh r1, [r2, #0x2]
+ ldr r2, [r2, #0xc]
+ add r1, r2, r1, lsl #0x3
+ sub r1, r1, #0x8
+ cmp r0, r1
+ movls r0, r5
+ movhi r0, r4
+_020B0634:
+ cmp r0, #0x0
+ beq _020B0644
+ mov r0, r8
+ bl SequenceEdgeHandle_
+_020B0644:
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ beq _020B06A8
+ ldr r0, [r8, #0x18]
+ ldr r2, [r8, #0x1c]
+ ldr r1, [r8, #0x0]
+ ldr r0, [r0, #0xc]
+ cmp r2, #0x2
+ sub r0, r1, r0
+ mov r0, r0, lsl #0xd
+ mov r1, r0, lsr #0x10
+ beq _020B0680
+ cmp r2, #0x3
+ beq _020B069C
+ b _020B06A8
+_020B0680:
+ ldrh r0, [r8, #0x28]
+ cmp r1, r0
+ bne _020B06A8
+ ldr r0, [r8, #0x20]
+ ldr r2, [r8, #0x24]
+ blx r2
+ b _020B06A8
+_020B069C:
+ ldr r0, [r8, #0x20]
+ ldr r2, [r8, #0x24]
+ blx r2
+_020B06A8:
+ ldr r0, [r8, #0x8]
+ cmp r0, #0x0
+ beq _020B06CC
+ ldr r0, [r8, #0x0]
+ ldr r1, [r8, #0xc]
+ ldrh r0, [r0, #0x4]
+ cmp r1, r0, lsl #0xc
+ movge r0, r5
+ bge _020B06D0
+_020B06CC:
+ mov r0, r4
+_020B06D0:
+ cmp r0, #0x0
+ bne _020B058C
+ mov r0, r7
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNS_G2dTickAnimCtrl
+
+ arm_func_start NNS_G2dGetAnimCtrlCurrentElement
+NNS_G2dGetAnimCtrlCurrentElement: ; 0x020B06E0
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x0]
+ bx lr
+ arm_func_end NNS_G2dGetAnimCtrlCurrentElement
+
+ arm_func_start SetAnimCtrlCurrentFrameImpl_
+SetAnimCtrlCurrentFrameImpl_: ; 0x020B06EC
+ ldr r3, [r0, #0x18]
+ ldrh r2, [r3, #0x0]
+ cmp r1, r2
+ ldrcc r2, [r3, #0xc]
+ addcc r1, r2, r1, lsl #0x3
+ strcc r1, [r0, #0x0]
+ movcc r0, #0x1
+ movcs r0, #0x0
+ bx lr
+ arm_func_end SetAnimCtrlCurrentFrameImpl_
+
+ arm_func_start SequenceEdgeHandle_
+SequenceEdgeHandle_: ; 0x020B0710
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [r4, #0x18]
+ ldreq r0, [r0, #0x8]
+ cmp r0, #0x3
+ beq _020B0738
+ cmp r0, #0x4
+ bne _020B07B4
+_020B0738:
+ ldr r0, [r4, #0x4]
+ eor r0, r0, #0x1
+ str r0, [r4, #0x4]
+ ldr r1, [r4, #0x18]
+ ldr r2, [r4, #0x0]
+ ldrh r0, [r1, #0x2]
+ ldr r1, [r1, #0xc]
+ add r0, r1, r0, lsl #0x3
+ sub r0, r0, #0x8
+ cmp r2, r0
+ bhi _020B0800
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x1
+ bne _020B0780
+ ldr r0, [r4, #0x20]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x24]
+ blx r2
+_020B0780:
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [r4, #0x18]
+ ldreq r0, [r0, #0x8]
+ cmp r0, #0x2
+ beq _020B07A8
+ cmp r0, #0x4
+ movne r0, #0x0
+ strne r0, [r4, #0x8]
+ bne _020B0800
+_020B07A8:
+ mov r0, r4
+ bl NNS_G2dResetAnimCtrlState
+ b _020B0800
+_020B07B4:
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0x1
+ bne _020B07D0
+ ldr r0, [r4, #0x20]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x24]
+ blx r2
+_020B07D0:
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [r4, #0x18]
+ ldreq r0, [r0, #0x8]
+ cmp r0, #0x2
+ beq _020B07F8
+ cmp r0, #0x4
+ movne r0, #0x0
+ strne r0, [r4, #0x8]
+ bne _020B0800
+_020B07F8:
+ mov r0, r4
+ bl NNS_G2dResetAnimCtrlState
+_020B0800:
+ ldr r1, [r4, #0x18]
+ ldr r2, [r4, #0x0]
+ ldrh r0, [r1, #0x0]
+ ldr r1, [r1, #0xc]
+ add r0, r1, r0, lsl #0x3
+ sub r0, r0, #0x8
+ cmp r2, r0
+ strhi r0, [r4, #0x0]
+ ldmhiia sp!, {r4,pc}
+ cmp r2, r1
+ strcc r1, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+ arm_func_end SequenceEdgeHandle_
diff --git a/arm9/asm/NNS_G2D_g2d_cellanimati.s b/arm9/asm/NNS_G2D_g2d_cellanimati.s
new file mode 100644
index 00000000..31720d7a
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_cellanimati.s
@@ -0,0 +1,417 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dMakeCellToOams
+NNS_G2dMakeCellToOams: ; 0x020B1AF8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ ldrh r5, [r2, #0x0]
+ ldr r4, [sp, #0x60]
+ ldr r10, [sp, #0x58]
+ str r4, [sp, #0x60]
+ cmp r1, r5
+ movcs r1, r5
+ mov r4, #0x0
+ cmp r1, #0x0
+ str r4, [sp, #0x0]
+ bls _020B1E7C
+ ldrh r4, [sp, #0x5c]
+ mov r4, r4, lsl #0x19
+ str r4, [sp, #0x4]
+ ldr r4, [sp, #0x0]
+ str r4, [sp, #0x14]
+ mov r4, #0x100
+ str r4, [sp, #0xc]
+ mov r4, #0x300
+ str r4, [sp, #0x8]
+ mov r4, #0x1
+ str r4, [sp, #0x10]
+_020B1B54:
+ ldr r5, [sp, #0x0]
+ mov r6, #0x6
+ mul r6, r5, r6
+ ldr r8, [r2, #0x4]
+ ldr r4, [sp, #0x0]
+ add r7, r0, r5, lsl #0x3
+ ldrh r5, [r8, r6]
+ mov r4, r4, lsl #0x3
+ add r9, r8, r6
+ strh r5, [r0, r4]
+ ldrh r4, [r9, #0x2]
+ cmp r3, #0x0
+ strh r4, [r7, #0x2]
+ ldrh r4, [r9, #0x4]
+ strh r4, [r7, #0x4]
+ bne _020B1B9C
+ cmp r10, #0x0
+ beq _020B1E60
+_020B1B9C:
+ ldr r5, [r7, #0x0]
+ ldr r4, _020B1E88 ; =0x01FF0000
+ and r4, r5, r4
+ mov r4, r4, lsr #0x10
+ mov r4, r4, lsl #0x10
+ mov r4, r4, asr #0x10
+ cmp r4, #0xff
+ orrgt r4, r4, #0xff00
+ movgt r4, r4, lsl #0x10
+ movgt r4, r4, asr #0x10
+ mov r4, r4, lsl #0xc
+ str r4, [sp, #0x20]
+ ldr r4, [r7, #0x0]
+ and r4, r4, #0xff
+ mov r4, r4, lsl #0x10
+ mov r4, r4, asr #0x10
+ cmp r4, #0x7f
+ orrgt r4, r4, #0xff00
+ movgt r4, r4, lsl #0x10
+ movgt r4, r4, asr #0x10
+ mov r4, r4, lsl #0xc
+ str r4, [sp, #0x24]
+ cmp r3, #0x0
+ beq _020B1E00
+ ldr r5, [r7, #0x0]
+ and r6, r5, #0x300
+ cmp r6, #0x100
+ beq _020B1C1C
+ cmp r6, #0x300
+ beq _020B1C1C
+ and r4, r5, #0x30000000
+ orr r6, r6, r4
+_020B1C1C:
+ cmp r6, #0x300
+ bne _020B1C70
+ ldr r4, _020B1E8C ; =0xC000C000
+ ldr r8, _020B1E90 ; =NNSi_objSizeWTbl
+ and r5, r5, r4
+ and r4, r5, #0xc000
+ mov r6, r4, asr #0xe
+ and r4, r5, #0xc0000000
+ mov r4, r4, lsr #0x1e
+ mov r4, r4, lsl #0x1
+ add r8, r8, r6, lsl #0x3
+ ldrh r9, [r4, r8]
+ ldr r8, _020B1E94 ; =NNSi_objSizeHTbl
+ ldr r5, [sp, #0x20]
+ add r6, r8, r6, lsl #0x3
+ add r5, r5, r9, lsl #0xb
+ str r5, [sp, #0x20]
+ ldrh r4, [r4, r6]
+ ldr r5, [sp, #0x24]
+ add r4, r5, r4, lsl #0xb
+ str r4, [sp, #0x24]
+_020B1C70:
+ ldr r4, [sp, #0x60]
+ ldr r5, [r3, #0x8]
+ cmp r4, #0x0
+ ldrne r8, [sp, #0x8]
+ add r4, sp, #0x20
+ ldreq r8, [sp, #0xc]
+ mov r6, r4
+ cmp r8, #0x300
+ ldreq r9, [sp, #0x10]
+ mov r12, #0x1000
+ ldrne r9, [sp, #0x14]
+ cmp r4, r4
+ ldr r4, [sp, #0x24]
+ addeq r6, sp, #0x28
+ smull r11, r4, r5, r4
+ adds r5, r11, r12
+ adc r11, r4, #0x0
+ ldr r4, [r3, #0x0]
+ ldr lr, [sp, #0x20]
+ smlal r5, r11, r4, lr
+ mov r4, r5, lsr #0xc
+ orr r4, r4, r11, lsl #0x14
+ str r4, [r6, #0x0]
+ ldr r4, [r3, #0xc]
+ ldr r5, [sp, #0x24]
+ ldr lr, [r3, #0x4]
+ smull r11, r5, r4, r5
+ adds r11, r11, r12
+ adc r4, r5, #0x0
+ add r5, sp, #0x28
+ cmp r6, r5
+ ldr r5, [sp, #0x20]
+ smlal r11, r4, lr, r5
+ mov r5, r11, lsr #0xc
+ orr r5, r5, r4, lsl #0x14
+ str r5, [r6, #0x4]
+ ldreq r5, [sp, #0x28]
+ ldreq r4, [sp, #0x2c]
+ streq r5, [sp, #0x20]
+ streq r4, [sp, #0x24]
+ cmp r8, #0x100
+ beq _020B1D38
+ cmp r8, #0x300
+ beq _020B1D38
+ ldr r5, [r7, #0x0]
+ ldr r4, _020B1E98 ; =0xC1FFFCFF
+ and r4, r5, r4
+ orr r4, r4, r8
+ str r4, [r7, #0x0]
+ b _020B1D54
+_020B1D38:
+ ldr r5, [r7, #0x0]
+ ldr r4, _020B1E98 ; =0xC1FFFCFF
+ and r4, r5, r4
+ orr r5, r4, r8
+ ldr r4, [sp, #0x4]
+ orr r4, r4, r5
+ str r4, [r7, #0x0]
+_020B1D54:
+ ldr r6, [r7, #0x0]
+ ldr r5, _020B1E8C ; =0xC000C000
+ cmp r9, #0x0
+ and r8, r6, r5
+ and r5, r8, #0xc000
+ mov r6, r5, asr #0xe
+ and r5, r8, #0xc0000000
+ ldr r8, _020B1E90 ; =NNSi_objSizeWTbl
+ mov r5, r5, lsr #0x1e
+ mov r5, r5, lsl #0x1
+ add r8, r8, r6, lsl #0x3
+ ldrh r9, [r5, r8]
+ ldr r8, _020B1E94 ; =NNSi_objSizeHTbl
+ ldr r4, [sp, #0x20]
+ add r6, r8, r6, lsl #0x3
+ mov r11, r9, asr #0x1
+ ldrh r5, [r5, r6]
+ mov r8, r11, lsl #0xc
+ ldr r6, [r3, #0x0]
+ rsb r12, r8, #0x0
+ mov r9, r5, asr #0x1
+ mla r12, r6, r11, r12
+ ldr r5, [r3, #0x8]
+ mla r6, r5, r9, r12
+ add r6, r4, r6
+ str r6, [sp, #0x20]
+ ldr r12, [r3, #0x4]
+ mov r5, r9, lsl #0xc
+ str r12, [sp, #0x1c]
+ ldr r12, [r3, #0xc]
+ rsb lr, r5, #0x0
+ str r12, [sp, #0x18]
+ ldr r12, [sp, #0x1c]
+ ldr r4, [sp, #0x24]
+ mla r11, r12, r11, lr
+ ldr r12, [sp, #0x18]
+ subne r6, r6, r8
+ mla r9, r12, r9, r11
+ add r4, r4, r9
+ str r4, [sp, #0x24]
+ subne r4, r4, r5
+ strne r6, [sp, #0x20]
+ strne r4, [sp, #0x24]
+_020B1E00:
+ cmp r10, #0x0
+ beq _020B1E28
+ ldr r6, [sp, #0x20]
+ ldr r4, [r10, #0x0]
+ ldr r5, [sp, #0x24]
+ add r4, r6, r4
+ str r4, [sp, #0x20]
+ ldr r4, [r10, #0x4]
+ add r4, r5, r4
+ str r4, [sp, #0x24]
+_020B1E28:
+ ldr r4, [sp, #0x20]
+ ldr r6, [r7, #0x0]
+ add r5, r4, #0x800
+ ldr r4, _020B1E9C ; =0x000001FF
+ and r4, r4, r5, asr #0xc
+ ldr r5, _020B1EA0 ; =0xFE00FF00
+ and r6, r6, r5
+ ldr r5, [sp, #0x24]
+ add r5, r5, #0x800
+ mov r5, r5, asr #0xc
+ and r5, r5, #0xff
+ orr r5, r6, r5
+ orr r4, r5, r4, lsl #0x10
+ str r4, [r7, #0x0]
+_020B1E60:
+ ldr r4, [sp, #0x0]
+ add r4, r4, #0x1
+ mov r4, r4, lsl #0x10
+ mov r4, r4, lsr #0x10
+ str r4, [sp, #0x0]
+ cmp r4, r1
+ blo _020B1B54
+_020B1E7C:
+ mov r0, r1
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B1E88: .word 0x01FF0000
+_020B1E8C: .word 0xC000C000
+_020B1E90: .word NNSi_objSizeWTbl
+_020B1E94: .word NNSi_objSizeHTbl
+_020B1E98: .word 0xC1FFFCFF
+_020B1E9C: .word 0x000001FF
+_020B1EA0: .word 0xFE00FF00
+ arm_func_end NNS_G2dMakeCellToOams
+
+ arm_func_start NNS_G2dSetCellAnimationCurrentFrame
+NNS_G2dSetCellAnimationCurrentFrame: ; 0x020B1EA4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl NNS_G2dSetAnimCtrlCurrentFrame
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ mov r0, r4
+ bl ApplyCurrentAnimResult_
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dSetCellAnimationCurrentFrame
+
+ arm_func_start NNS_G2dTickCellAnimation
+NNS_G2dTickCellAnimation: ; 0x020B1EC4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl NNS_G2dTickAnimCtrl
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ mov r0, r4
+ bl ApplyCurrentAnimResult_
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dTickCellAnimation
+
+ arm_func_start NNS_G2dSetCellAnimationSequence
+NNS_G2dSetCellAnimationSequence: ; 0x020B1EE4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl NNS_G2dBindAnimCtrl
+ mov r0, r4
+ bl ApplyCurrentAnimResult_
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dSetCellAnimationSequence
+
+ arm_func_start NNS_G2dInitCellAnimationVramTransfered
+NNS_G2dInitCellAnimationVramTransfered: ; 0x020B1EFC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r4, r2
+ ldr r2, [r4, #0xc]
+ mov r5, r1
+ ldr r1, [r2, #0x0]
+ ldr r2, [sp, #0x34]
+ str r1, [sp, #0x0]
+ ldr r1, [sp, #0x38]
+ str r2, [sp, #0x4]
+ mov r6, r3
+ mov r7, r0
+ ldr r12, [sp, #0x3c]
+ str r1, [sp, #0x8]
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x2c]
+ ldr r3, [sp, #0x30]
+ mov r0, r6
+ str r12, [sp, #0xc]
+ bl NNSi_G2dInitCellTransferState
+ str r6, [r7, #0x34]
+ str r4, [r7, #0x30]
+ add r0, r7, #0x38
+ mov r1, #0x1
+ str r6, [r7, #0x34]
+ bl NNSi_G2dSrtcInitControl
+ mov r0, r7
+ bl NNS_G2dInitAnimCtrl
+ mov r0, r7
+ mov r1, r5
+ bl NNS_G2dSetCellAnimationSequence
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G2dInitCellAnimationVramTransfered
+
+ arm_func_start NNS_G2dInitCellAnimation
+NNS_G2dInitCellAnimation: ; 0x020B1F80
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ str r2, [r5, #0x30]
+ mvn r2, #0x0
+ add r0, r5, #0x38
+ mov r1, #0x1
+ str r2, [r5, #0x34]
+ bl NNSi_G2dSrtcInitControl
+ mov r0, r5
+ bl NNS_G2dInitAnimCtrl
+ mov r0, r5
+ mov r1, r4
+ bl NNS_G2dSetCellAnimationSequence
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_G2dInitCellAnimation
+
+ arm_func_start ApplyCurrentAnimResult_
+ApplyCurrentAnimResult_: ; 0x020B1FC4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x0]
+ ldrh r1, [r1, #0x4]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ bl NNS_G2dGetAnimCtrlCurrentElement
+ mov r4, r0
+ ldr r7, [r5, #0x30]
+ ldrh r1, [r4, #0x0]
+ mov r0, r7
+ bl NNS_G2dGetCellDataByIdx
+ str r0, [r5, #0x2c]
+ ldr r1, [r5, #0x18]
+ add r0, r5, #0x38
+ ldr r2, [r1, #0x4]
+ mov r1, #0x1
+ and r6, r2, #0xff
+ bl NNSi_G2dSrtcInitControl
+ cmp r6, #0x0
+ beq _020B2068
+ cmp r6, #0x2
+ bne _020B203C
+ ldrsh r1, [r4, #0x4]
+ ldrsh r2, [r4, #0x6]
+ add r0, r5, #0x38
+ bl NNSi_G2dSrtcSetTrans
+ b _020B2068
+_020B203C:
+ ldr r1, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r0, r5, #0x38
+ bl NNSi_G2dSrtcSetSRTScale
+ ldrh r1, [r4, #0x2]
+ add r0, r5, #0x38
+ bl NNSi_G2dSrtcSetSRTRotZ
+ ldrsh r1, [r4, #0xc]
+ ldrsh r2, [r4, #0xe]
+ add r0, r5, #0x38
+ bl NNSi_G2dSrtcSetTrans
+_020B2068:
+ ldr r2, [r7, #0xc]
+ cmp r2, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r1, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ ldrh r1, [r4, #0x0]
+ ldr r2, [r2, #0x4]
+ ldr r0, [r5, #0x34]
+ add r3, r2, r1, lsl #0x3
+ ldr r1, [r2, r1, lsl #0x3]
+ ldr r2, [r3, #0x4]
+ bl NNS_G2dSetCellTransferStateRequested
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end ApplyCurrentAnimResult_
diff --git a/arm9/asm/NNS_G2D_g2d_celltransfe.s b/arm9/asm/NNS_G2D_g2d_celltransfe.s
new file mode 100644
index 00000000..0e41bdba
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_celltransfe.s
@@ -0,0 +1,286 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global cvtTbl$7926
+cvtTbl$7926: ; 0x020FF8C4
+ .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00
+ ; static const in function
+
+ .section .bss
+
+ .global s_pTaskRegisterFunc
+s_pTaskRegisterFunc: ; 0x021CECFC
+ .space 0x4
+
+ .global s_numCellState
+s_numCellState: ; 0x021CED00
+ .space 0x4
+
+ .global s_pCellStateArray
+s_pCellStateArray: ; 0x021CED04
+ .space 0x4
+
+ .section .text
+
+ arm_func_start NNS_G2dFreeCellTransferStateHandle
+NNS_G2dFreeCellTransferStateHandle: ; 0x020B4358
+ stmdb sp!, {r4,lr}
+ ldr r2, _020B43A0 ; =s_pCellStateArray
+ mov r1, #0x30
+ ldr r2, [r2, #0x0]
+ mla r4, r0, r1, r2
+ mov r0, r4
+ bl NNSi_G2dInitializeVRamLocation
+ mov r0, #0x0
+ str r0, [r4, #0xc]
+ str r0, [r4, #0x10]
+ str r0, [r4, #0x14]
+ str r0, [r4, #0x18]
+ str r0, [r4, #0x1c]
+ str r0, [r4, #0x20]
+ str r0, [r4, #0x24]
+ str r0, [r4, #0x28]
+ str r0, [r4, #0x2c]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B43A0: .word s_pCellStateArray
+ arm_func_end NNS_G2dFreeCellTransferStateHandle
+
+ arm_func_start NNS_G2dGetNewCellTransferStateHandle
+NNS_G2dGetNewCellTransferStateHandle: ; 0x020B43A4
+ ldr r1, _020B43F8 ; =s_numCellState
+ mov r0, #0x0
+ ldr r3, [r1, #0x0]
+ cmp r3, #0x0
+ bls _020B43F0
+ ldr r1, _020B43FC ; =s_pCellStateArray
+ ldr r2, [r1, #0x0]
+ mov r12, r2
+_020B43C4:
+ ldr r1, [r12, #0x1c]
+ cmp r1, #0x1
+ movne r1, #0x30
+ mlane r1, r0, r1, r2
+ movne r2, #0x1
+ strne r2, [r1, #0x1c]
+ bxne lr
+ add r0, r0, #0x1
+ cmp r0, r3
+ add r12, r12, #0x30
+ blo _020B43C4
+_020B43F0:
+ mvn r0, #0x0
+ bx lr
+ .balign 4
+_020B43F8: .word s_numCellState
+_020B43FC: .word s_pCellStateArray
+ arm_func_end NNS_G2dGetNewCellTransferStateHandle
+
+ arm_func_start NNS_G2dSetCellTransferStateRequested
+NNS_G2dSetCellTransferStateRequested: ; 0x020B4400
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ bl NNSi_G2dGetCellTransferState
+ mvn r1, #0x0
+ str r1, [r0, #0x24]
+ str r5, [r0, #0x28]
+ str r4, [r0, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_G2dSetCellTransferStateRequested
+
+ arm_func_start NNS_G2dUpdateCellTransferStateManager
+NNS_G2dUpdateCellTransferStateManager: ; 0x020B442C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r0, _020B4558 ; =s_numCellState
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+ ldr r0, [sp, #0x0]
+ mov r5, #0x1
+ str r0, [sp, #0x4]
+ mov r11, r0
+ str r0, [sp, #0x8]
+ str r0, [sp, #0xc]
+_020B4468:
+ ldr r0, _020B455C ; =s_pCellStateArray
+ ldr r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ add r8, r1, r0
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ beq _020B4528
+ ldr r9, [sp, #0x8]
+ mov r0, r9
+ cmp r0, #0x3
+ bge _020B4520
+ add r4, r8, #0x24
+_020B4498:
+ mov r6, r5, lsl r9
+ mov r1, r11
+ ldr r0, [r8, #0x24]
+ ands r0, r0, r6
+ beq _020B44B8
+ ldr r0, [r8, #0x20]
+ ands r0, r0, r6
+ movne r1, r5
+_020B44B8:
+ cmp r1, #0x0
+ beq _020B4514
+ ldr r0, _020B4560 ; =cvtTbl$7926
+ cmp r9, #0x0
+ ldr r7, [r0, r9, lsl #0x2]
+ ldreq r10, [r8, #0x14]
+ mov r0, r8
+ mov r1, r9
+ ldrne r10, [r8, #0x10]
+ bl NNSi_G2dGetVramLocation
+ mov r1, r0
+ mov r0, r7
+ ldr r7, _020B4564 ; =s_pTaskRegisterFunc
+ ldr r2, [r8, #0x28]
+ ldr r3, [r8, #0x2c]
+ ldr r7, [r7, #0x0]
+ add r2, r10, r2
+ blx r7
+ cmp r0, #0x0
+ ldrne r1, [r4, #0x0]
+ mvnne r0, r6
+ andne r0, r1, r0
+ strne r0, [r4, #0x0]
+_020B4514:
+ add r9, r9, #0x1
+ cmp r9, #0x3
+ blt _020B4498
+_020B4520:
+ ldr r0, [sp, #0xc]
+ str r0, [r8, #0x20]
+_020B4528:
+ ldr r0, _020B4558 ; =s_numCellState
+ ldr r1, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ add r0, r0, #0x1
+ str r0, [sp, #0x0]
+ cmp r0, r1
+ ldr r0, [sp, #0x4]
+ add r0, r0, #0x30
+ str r0, [sp, #0x4]
+ blo _020B4468
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B4558: .word s_numCellState
+_020B455C: .word s_pCellStateArray
+_020B4560: .word cvtTbl$7926
+_020B4564: .word s_pTaskRegisterFunc
+ arm_func_end NNS_G2dUpdateCellTransferStateManager
+
+ arm_func_start NNS_G2dInitCellTransferStateManager
+NNS_G2dInitCellTransferStateManager: ; 0x020B4568
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020B45E4 ; =s_pTaskRegisterFunc
+ movs r6, r1
+ ldr r1, _020B45E8 ; =s_numCellState
+ ldr r3, _020B45EC ; =s_pCellStateArray
+ mov r7, r0
+ str r2, [r12, #0x0]
+ mov r5, #0x0
+ addeq sp, sp, #0x4
+ str r7, [r3, #0x0]
+ str r6, [r1, #0x0]
+ ldmeqia sp!, {r4-r7,pc}
+ mov r4, r5
+_020B45A0:
+ mov r0, r7
+ bl NNSi_G2dInitializeVRamLocation
+ str r4, [r7, #0xc]
+ str r4, [r7, #0x10]
+ str r4, [r7, #0x14]
+ str r4, [r7, #0x18]
+ str r4, [r7, #0x1c]
+ str r4, [r7, #0x20]
+ str r4, [r7, #0x24]
+ str r4, [r7, #0x28]
+ add r5, r5, #0x1
+ str r4, [r7, #0x2c]
+ cmp r5, r6
+ add r7, r7, #0x30
+ blo _020B45A0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B45E4: .word s_pTaskRegisterFunc
+_020B45E8: .word s_numCellState
+_020B45EC: .word s_pCellStateArray
+ arm_func_end NNS_G2dInitCellTransferStateManager
+
+ arm_func_start NNSi_G2dInitCellTransferState
+NNSi_G2dInitCellTransferState: ; 0x020B45F0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020B4698 ; =s_pCellStateArray
+ mov r4, #0x30
+ ldr r12, [r12, #0x0]
+ mov r7, r1
+ mla r4, r0, r4, r12
+ mov r0, r4
+ mov r6, r2
+ mov r5, r3
+ bl NNSi_G2dInitializeVRamLocation
+ mvn r0, #0x0
+ cmp r7, r0
+ beq _020B4638
+ mov r0, r4
+ mov r2, r7
+ mov r1, #0x0
+ bl NNSi_G2dSetVramLocation
+_020B4638:
+ mvn r0, #0x0
+ cmp r6, r0
+ beq _020B4654
+ mov r0, r4
+ mov r2, r6
+ mov r1, #0x1
+ bl NNSi_G2dSetVramLocation
+_020B4654:
+ mvn r0, #0x0
+ cmp r5, r0
+ beq _020B4670
+ mov r0, r4
+ mov r2, r5
+ mov r1, #0x2
+ bl NNSi_G2dSetVramLocation
+_020B4670:
+ ldr r1, [sp, #0x18]
+ ldr r0, [sp, #0x1c]
+ str r1, [r4, #0xc]
+ ldr r1, [sp, #0x20]
+ str r0, [r4, #0x10]
+ ldr r0, [sp, #0x24]
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B4698: .word s_pCellStateArray
+ arm_func_end NNSi_G2dInitCellTransferState
+
+ arm_func_start NNSi_G2dGetCellTransferState
+NNSi_G2dGetCellTransferState: ; 0x020B469C
+ ldr r2, _020B46B0 ; =s_pCellStateArray
+ mov r1, #0x30
+ ldr r2, [r2, #0x0]
+ mla r0, r1, r0, r2
+ bx lr
+ .balign 4
+_020B46B0: .word s_pCellStateArray
+ arm_func_end NNSi_G2dGetCellTransferState
diff --git a/arm9/asm/NNS_G2D_g2d_charcanvas.s b/arm9/asm/NNS_G2D_g2d_charcanvas.s
new file mode 100644
index 00000000..6f483596
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_charcanvas.s
@@ -0,0 +1,1357 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global objs$8221
+objs$8221: ; 0x020FF970
+ .byte 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01
+ .byte 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03
+
+ .global shape$8277
+shape$8277: ; 0x020FF990
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0xC0
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0
+
+ .section .text
+
+ arm_func_start NNS_G2dArrangeOBJ1D
+NNS_G2dArrangeOBJ1D: ; 0x020B5E50
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ mov r7, r0
+ mov r0, r1
+ cmp r0, #0x8
+ ldr r0, [sp, #0x60]
+ str r1, [sp, #0x10]
+ str r0, [sp, #0x60]
+ ldr r0, [sp, #0x6c]
+ str r2, [sp, #0x14]
+ str r0, [sp, #0x6c]
+ ldrlt r0, [sp, #0x10]
+ mov r11, r3
+ ldr r6, [sp, #0x64]
+ ldr r5, [sp, #0x68]
+ movge r2, #0x3
+ clzlt r0, r0
+ rsblt r2, r0, #0x1f
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x8
+ ldrlt r0, [sp, #0x14]
+ movge r1, #0x3
+ clzlt r0, r0
+ rsblt r1, r0, #0x1f
+ ldr r0, _020B6170 ; =objs$8221
+ mvn r3, #0x0
+ add r1, r0, r1, lsl #0x3
+ add r0, r1, r2, lsl #0x1
+ ldrb r4, [r1, r2, lsl #0x1]
+ ldrb r1, [r0, #0x1]
+ ldr r2, [sp, #0x14]
+ cmp r6, #0x0
+ str r1, [sp, #0x18]
+ ldr r1, [sp, #0x10]
+ and r1, r1, r3, lsl r4
+ str r1, [sp, #0x1c]
+ ldr r1, [sp, #0x18]
+ and r1, r2, r3, lsl r1
+ str r1, [sp, #0x20]
+ moveq r1, #0x1
+ streq r1, [sp, #0x24]
+ movne r1, #0x2
+ strne r1, [sp, #0x24]
+ mov r1, #0x0
+ str r1, [sp, #0x28]
+ bl OBJSizeToShape
+ ldr r1, [sp, #0x10]
+ ldr r2, [sp, #0x14]
+ mov r10, r1, asr r4
+ ldr r1, [sp, #0x18]
+ mov r1, r2, asr r1
+ str r1, [sp, #0x2c]
+ ldr r1, [sp, #0x24]
+ mov r2, r1, lsl r4
+ ldr r1, [sp, #0x18]
+ mov r2, r2, lsl r1
+ ldr r1, [sp, #0x6c]
+ mov r9, r2, asr r1
+ mov r1, #0x0
+ str r1, [sp, #0x30]
+ str r1, [sp, #0x34]
+ b _020B5FE8
+_020B5F48:
+ ldr r2, [sp, #0x30]
+ ldr r1, [sp, #0x18]
+ ldr r8, [sp, #0x34]
+ mov r2, r2, lsl r1
+ ldr r1, [sp, #0x60]
+ add lr, r1, r2, lsl #0x3
+ b _020B5FD4
+_020B5F64:
+ mov r1, r8, lsl r4
+ add r2, r11, r1, lsl #0x3
+ ldr r1, _020B6174 ; =0x000001FF
+ ldr r3, [r7, #0x0]
+ and r12, r2, r1
+ ldr r1, _020B6178 ; =0xFE00FF00
+ and r2, lr, #0xff
+ and r1, r3, r1
+ orr r1, r1, r2
+ orr r1, r1, r12, lsl #0x10
+ str r1, [r7, #0x0]
+ ldr r3, [r7, #0x0]
+ ldr r1, _020B617C ; =0x3FFF3FFF
+ mov r2, #0x400
+ and r1, r3, r1
+ orr r1, r1, r0
+ str r1, [r7, #0x0]
+ rsb r1, r2, #0x0
+ ldrh r2, [r7, #0x4]
+ add r8, r8, #0x1
+ and r1, r2, r1
+ orr r1, r1, r5
+ strh r1, [r7, #0x4]
+ ldr r1, [r7, #0x0]
+ add r5, r5, r9
+ bic r1, r1, #0x2000
+ orr r1, r1, r6, lsl #0xd
+ str r1, [r7], #0x8
+_020B5FD4:
+ cmp r8, r10
+ blt _020B5F64
+ ldr r1, [sp, #0x30]
+ add r1, r1, #0x1
+ str r1, [sp, #0x30]
+_020B5FE8:
+ ldr r2, [sp, #0x30]
+ ldr r1, [sp, #0x2c]
+ cmp r2, r1
+ blt _020B5F48
+ ldr r0, [sp, #0x28]
+ mla r0, r10, r1, r0
+ str r0, [sp, #0x28]
+ ldr r1, [sp, #0x1c]
+ ldr r0, [sp, #0x10]
+ cmp r1, r0
+ bhs _020B6078
+ ldr r0, [sp, #0x60]
+ ldr r1, [sp, #0x10]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x1c]
+ str r6, [sp, #0x4]
+ sub r4, r1, r0
+ ldr r1, [sp, #0x6c]
+ str r5, [sp, #0x8]
+ str r1, [sp, #0xc]
+ ldr r1, [sp, #0x1c]
+ ldr r2, [sp, #0x20]
+ add r3, r11, r1, lsl #0x3
+ mov r0, r7
+ mov r1, r4
+ bl NNS_G2dArrangeOBJ1D
+ ldr r1, [sp, #0x24]
+ add r7, r7, r0, lsl #0x3
+ mul r2, r1, r4
+ ldr r1, [sp, #0x20]
+ mul r2, r1, r2
+ ldr r1, [sp, #0x6c]
+ add r5, r5, r2, lsr r1
+ ldr r1, [sp, #0x28]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+_020B6078:
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ cmp r1, r0
+ bhs _020B60F0
+ ldr r1, [sp, #0x60]
+ ldr r0, [sp, #0x20]
+ mov r3, r11
+ add r0, r1, r0, lsl #0x3
+ str r0, [sp, #0x0]
+ str r6, [sp, #0x4]
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x20]
+ str r5, [sp, #0x8]
+ sub r4, r1, r0
+ ldr r1, [sp, #0x6c]
+ mov r0, r7
+ str r1, [sp, #0xc]
+ ldr r1, [sp, #0x1c]
+ mov r2, r4
+ bl NNS_G2dArrangeOBJ1D
+ ldr r2, [sp, #0x24]
+ ldr r1, [sp, #0x1c]
+ add r7, r7, r0, lsl #0x3
+ mul r1, r2, r1
+ mul r2, r4, r1
+ ldr r1, [sp, #0x6c]
+ add r5, r5, r2, lsr r1
+ ldr r1, [sp, #0x28]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+_020B60F0:
+ ldr r1, [sp, #0x1c]
+ ldr r0, [sp, #0x10]
+ cmp r1, r0
+ bhs _020B6164
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ cmp r1, r0
+ bhs _020B6164
+ ldr r1, [sp, #0x60]
+ ldr r0, [sp, #0x20]
+ ldr r2, [sp, #0x10]
+ add r0, r1, r0, lsl #0x3
+ ldr r1, [sp, #0x1c]
+ ldr r3, [sp, #0x14]
+ str r0, [sp, #0x0]
+ sub r1, r2, r1
+ ldr r2, [sp, #0x20]
+ str r6, [sp, #0x4]
+ sub r2, r3, r2
+ ldr r3, [sp, #0x1c]
+ ldr r4, [sp, #0x6c]
+ str r5, [sp, #0x8]
+ mov r0, r7
+ add r3, r11, r3, lsl #0x3
+ str r4, [sp, #0xc]
+ bl NNS_G2dArrangeOBJ1D
+ ldr r1, [sp, #0x28]
+ add r0, r1, r0
+ str r0, [sp, #0x28]
+_020B6164:
+ ldr r0, [sp, #0x28]
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B6170: .word objs$8221
+_020B6174: .word 0x000001FF
+_020B6178: .word 0xFE00FF00
+_020B617C: .word 0x3FFF3FFF
+ arm_func_end NNS_G2dArrangeOBJ1D
+
+ arm_func_start NNSi_G2dCalcRequiredOBJ
+NNSi_G2dCalcRequiredOBJ: ; 0x020B6180
+ stmdb sp!, {r4-r6,lr}
+ mov r3, r0, lsr #0x3
+ mov r6, r1, lsr #0x3
+ mul r12, r3, r6
+ and r2, r0, #0x4
+ and lr, r0, #0x2
+ and r0, r0, #0x1
+ add r4, r0, lr, lsr #0x1
+ mov r5, r2, lsr #0x2
+ and r0, r1, #0x4
+ add lr, r12, #0x0
+ add r12, r5, r4, lsl #0x1
+ mla r12, r6, r12, lr
+ and lr, r1, #0x2
+ and r1, r1, #0x1
+ add lr, r1, lr, lsr #0x1
+ mov r1, r0, lsr #0x2
+ add r1, r1, lr, lsl #0x1
+ mla r12, r3, r1, r12
+ add r1, r4, r2, lsr #0x2
+ add r0, lr, r0, lsr #0x2
+ mla r0, r1, r0, r12
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G2dCalcRequiredOBJ
+
+ arm_func_start NNS_G2dMapScrToChar256x16Pltt
+NNS_G2dMapScrToChar256x16Pltt: ; 0x020B61DC
+ stmdb sp!, {r4-r8,lr}
+ ldr r12, [sp, #0x1c]
+ ldr r8, [sp, #0x18]
+ mov r12, r12, lsl #0x1c
+ mov r4, r12, lsr #0x10
+ mov r6, #0x0
+ cmp r2, #0x0
+ ldmleia sp!, {r4-r8,pc}
+ mov lr, r3, lsl #0x1
+ mov r12, r6
+_020B6204:
+ mov r5, r0
+ mov r7, r12
+ cmp r1, #0x0
+ ble _020B622C
+_020B6214:
+ orr r3, r4, r8
+ add r7, r7, #0x1
+ cmp r7, r1
+ add r8, r8, #0x1
+ strh r3, [r5], #0x2
+ blt _020B6214
+_020B622C:
+ add r6, r6, #0x1
+ cmp r6, r2
+ add r0, r0, lr
+ blt _020B6204
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNS_G2dMapScrToChar256x16Pltt
+
+ arm_func_start NNS_G2dMapScrToCharText
+NNS_G2dMapScrToCharText: ; 0x020B6240
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ ldr r5, [sp, #0x24]
+ ldr lr, [sp, #0x20]
+ cmp r5, #0x20
+ ldr r12, [sp, #0x28]
+ bgt _020B6280
+ mla r4, r5, lr, r3
+ ldr lr, [sp, #0x2c]
+ str r12, [sp, #0x0]
+ mov r3, r5
+ add r0, r0, r4, lsl #0x1
+ str lr, [sp, #0x4]
+ bl NNS_G2dMapScrToChar256x16Pltt
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+_020B6280:
+ ldr r4, [sp, #0x2c]
+ add r7, lr, r2
+ mov r2, r4, lsl #0x1c
+ cmp lr, r7
+ add r8, r3, r1
+ mov r4, r2, lsr #0x10
+ addge sp, sp, #0x8
+ ldmgeia sp!, {r4-r8,pc}
+_020B62A0:
+ cmp lr, #0x20
+ movlt r1, lr
+ addge r1, lr, #0x20
+ mov r6, r3
+ cmp r3, r8
+ add r5, r0, r1, lsl #0x6
+ bge _020B62E4
+_020B62BC:
+ cmp r6, #0x20
+ movlt r1, r6
+ addge r1, r6, #0x3e0
+ orr r2, r4, r12
+ mov r1, r1, lsl #0x1
+ add r6, r6, #0x1
+ strh r2, [r5, r1]
+ cmp r6, r8
+ add r12, r12, #0x1
+ blt _020B62BC
+_020B62E4:
+ add lr, lr, #0x1
+ cmp lr, r7
+ blt _020B62A0
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNS_G2dMapScrToCharText
+
+ arm_func_start NNS_G2dCharCanvasInitForOBJ1D
+NNS_G2dCharCanvasInitForOBJ1D: ; 0x020B62F8
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x18
+ cmp r2, #0x8
+ movlt r4, r2
+ movge r12, #0x3
+ clzlt r4, r4
+ rsblt r12, r4, #0x1f
+ cmp r3, #0x8
+ movlt r4, r3
+ movge r6, #0x3
+ clzlt r4, r4
+ rsblt r6, r4, #0x1f
+ ldr r4, _020B6378 ; =objs$8221
+ ldr r5, [sp, #0x28]
+ add r4, r4, r6, lsl #0x3
+ ldrb r6, [r4, r12, lsl #0x1]
+ add r12, r4, r12, lsl #0x1
+ ldr r4, _020B637C ; =DrawGlyph1D
+ strb r6, [sp, #0x14]
+ ldrb r6, [r12, #0x1]
+ ldr lr, _020B6380 ; =ClearContinuous
+ ldr ip, _020B6384 ; =ClearArea1D
+ strb r6, [sp, #0x15]
+ str r5, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str lr, [sp, #0x8]
+ str r12, [sp, #0xc]
+ ldr r12, [sp, #0x14]
+ str r12, [sp, #0x10]
+ bl InitCharCanvas
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B6378: .word objs$8221
+_020B637C: .word DrawGlyph1D
+_020B6380: .word ClearContinuous
+_020B6384: .word ClearArea1D
+ arm_func_end NNS_G2dCharCanvasInitForOBJ1D
+
+ arm_func_start NNS_G2dCharCanvasInitForBG
+NNS_G2dCharCanvasInitForBG: ; 0x020B6388
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ ldr lr, [sp, #0x18]
+ ldr ip, _020B63C0 ; =DrawGlyphLine
+ str lr, [sp, #0x0]
+ ldr lr, _020B63C4 ; =ClearContinuous
+ str r12, [sp, #0x4]
+ ldr ip, _020B63C8 ; =ClearAreaLine
+ str lr, [sp, #0x8]
+ str r12, [sp, #0xc]
+ str r2, [sp, #0x10]
+ bl InitCharCanvas
+ add sp, sp, #0x14
+ ldmia sp!, {pc}
+ .balign 4
+_020B63C0: .word DrawGlyphLine
+_020B63C4: .word ClearContinuous
+_020B63C8: .word ClearAreaLine
+ arm_func_end NNS_G2dCharCanvasInitForBG
+
+ arm_func_start NNS_G2dCharCanvasDrawChar
+NNS_G2dCharCanvasDrawChar: ; 0x020B63CC
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ mov r7, r1
+ ldrh r1, [sp, #0x2c]
+ mov r8, r0
+ mov r0, r7
+ mov r6, r2
+ mov r5, r3
+ bl NNS_G2dFontFindGlyphIndex
+ ldr r1, _020B6484 ; =0x0000FFFF
+ mov r4, r0
+ cmp r4, r1
+ ldreq r0, [r7, #0x0]
+ ldreqh r4, [r0, #0x2]
+ mov r0, r7
+ mov r1, r4
+ bl NNS_G2dFontGetCharWidthsFromIndex
+ str r0, [sp, #0x8]
+ ldr r0, [r7, #0x0]
+ ldr r2, [sp, #0x28]
+ ldr r0, [r0, #0x8]
+ add r1, sp, #0x8
+ ldrh r3, [r0, #0x2]
+ add r12, r0, #0x8
+ mov r0, r8
+ mla r3, r4, r3, r12
+ str r3, [sp, #0xc]
+ str r2, [sp, #0x0]
+ str r1, [sp, #0x4]
+ ldr r1, [sp, #0x8]
+ ldr r4, [r8, #0x14]
+ ldrsb r2, [r1, #0x0]
+ mov r1, r7
+ mov r3, r5
+ add r2, r6, r2
+ blx r4
+ ldrh r0, [r7, #0x8]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x8]
+ ldrnesb r1, [r0, #0x0]
+ ldrneb r0, [r0, #0x1]
+ addne r0, r1, r0
+ ldreq r0, [sp, #0x8]
+ ldreqsb r0, [r0, #0x2]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B6484: .word 0x0000FFFF
+ arm_func_end NNS_G2dCharCanvasDrawChar
+
+ arm_func_start InitCharCanvas
+InitCharCanvas: ; 0x020B6488
+ str r2, [r0, #0x4]
+ ldr r2, [sp, #0x0]
+ str r3, [r0, #0x8]
+ strb r2, [r0, #0xc]
+ ldr r2, [sp, #0x4]
+ str r1, [r0, #0x0]
+ ldr r1, [sp, #0x8]
+ str r2, [r0, #0x14]
+ ldr r2, [sp, #0xc]
+ str r1, [r0, #0x18]
+ ldr r1, [sp, #0x10]
+ str r2, [r0, #0x1c]
+ str r1, [r0, #0x10]
+ bx lr
+ arm_func_end InitCharCanvas
+
+ arm_func_start ClearArea1D
+ClearArea1D: ; 0x020B64C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x54
+ ldrb r4, [r0, #0xc]
+ mov r10, r2
+ str r1, [sp, #0xc]
+ str r4, [sp, #0x44]
+ ldr r1, [sp, #0x44]
+ ldr r4, [sp, #0x78]
+ cmp r1, #0x4
+ add r1, r10, r4
+ str r1, [sp, #0x1c]
+ ldr r2, [sp, #0x7c]
+ mov r1, r3
+ add r1, r1, r2
+ str r1, [sp, #0x20]
+ ldrne r1, [sp, #0xc]
+ str r3, [sp, #0x10]
+ orrne r1, r1, r1, lsl #0x8
+ orrne r1, r1, r1, lsl #0x10
+ strne r1, [sp, #0xc]
+ bne _020B6528
+ ldr r1, [sp, #0xc]
+ orr r1, r1, r1, lsl #0x4
+ orr r1, r1, r1, lsl #0x8
+ orr r1, r1, r1, lsl #0x10
+ str r1, [sp, #0xc]
+_020B6528:
+ bic r1, r10, #0x7
+ str r1, [sp, #0x30]
+ ldr r1, [sp, #0x10]
+ ldr r2, [r0, #0x10]
+ bic r1, r1, #0x7
+ str r1, [sp, #0x14]
+ ldr r1, [sp, #0x44]
+ str r2, [sp, #0x4c]
+ mov r3, r1, lsl #0x6
+ mov r2, r3, asr #0x2
+ ldr r1, [sp, #0x20]
+ add r3, r3, r2, lsr #0x1d
+ ldr r2, [sp, #0x1c]
+ add r6, r1, #0x7
+ add r2, r2, #0x7
+ bic r5, r2, #0x7
+ bic r2, r6, #0x7
+ ldr r1, [sp, #0x30]
+ str r2, [sp, #0x24]
+ mov r2, r3, asr #0x3
+ str r2, [sp, #0x48]
+ mov r4, r1, asr #0x2
+ ldr r2, [sp, #0x30]
+ ldr r1, [sp, #0x14]
+ add r2, r2, r4, lsr #0x1d
+ mov r2, r2, asr #0x3
+ str r2, [sp, #0x2c]
+ ldr r2, [sp, #0x14]
+ mov r1, r1, asr #0x2
+ add r1, r2, r1, lsr #0x1d
+ mov r6, r1, asr #0x3
+ ldr r1, [sp, #0x24]
+ cmp r2, r1
+ ldr r1, [r0, #0x4]
+ str r1, [sp, #0x40]
+ ldr r1, [r0, #0x8]
+ ldr r0, [r0, #0x0]
+ str r1, [sp, #0x3c]
+ str r0, [sp, #0x28]
+ ldrb r0, [sp, #0x4c]
+ str r0, [sp, #0x38]
+ ldrb r0, [sp, #0x4d]
+ str r0, [sp, #0x34]
+ addge sp, sp, #0x54
+ ldmgeia sp!, {r4-r11,pc}
+ mov r4, #0x0
+ mov r11, #0x8
+_020B65E4:
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x10]
+ ldr r7, [sp, #0x2c]
+ cmp r1, r0
+ movlt r1, r0
+ ldrlt r0, [sp, #0x14]
+ sublt r9, r1, r0
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x14]
+ movge r9, r4
+ sub r0, r1, r0
+ cmp r0, #0x8
+ movgt r0, r11
+ sub r0, r0, r9
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #0x30]
+ cmp r0, r5
+ mov r8, r0
+ bge _020B66B0
+_020B6630:
+ ldr r0, [sp, #0x38]
+ ldr r2, [sp, #0x40]
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x34]
+ ldr r3, [sp, #0x3c]
+ str r0, [sp, #0x4]
+ mov r0, r7
+ mov r1, r6
+ bl GetCharIndex1D
+ ldr r2, [sp, #0x1c]
+ cmp r8, r10
+ sublt r1, r10, r8
+ sub r2, r2, r8
+ movge r1, r4
+ cmp r2, #0x8
+ movgt r2, r11
+ sub r3, r2, r1
+ ldr r2, [sp, #0x18]
+ ldr r12, [sp, #0x48]
+ str r2, [sp, #0x0]
+ ldr r2, [sp, #0xc]
+ str r2, [sp, #0x4]
+ ldr r2, [sp, #0x44]
+ str r2, [sp, #0x8]
+ ldr r2, [sp, #0x28]
+ mla r0, r12, r0, r2
+ mov r2, r9
+ bl ClearChar
+ add r8, r8, #0x8
+ add r7, r7, #0x1
+ cmp r8, r5
+ blt _020B6630
+_020B66B0:
+ ldr r0, [sp, #0x14]
+ add r6, r6, #0x1
+ add r1, r0, #0x8
+ ldr r0, [sp, #0x24]
+ str r1, [sp, #0x14]
+ cmp r1, r0
+ blt _020B65E4
+ add sp, sp, #0x54
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end ClearArea1D
+
+ arm_func_start ClearAreaLine
+ClearAreaLine: ; 0x020B66D4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ ldrb r4, [r0, #0xc]
+ mov r10, r2
+ str r1, [sp, #0xc]
+ str r4, [sp, #0x2c]
+ ldr r1, [sp, #0x2c]
+ ldr r4, [sp, #0x60]
+ cmp r1, #0x4
+ add r1, r10, r4
+ str r1, [sp, #0x18]
+ ldr r2, [sp, #0x64]
+ mov r1, r3
+ add r1, r1, r2
+ str r1, [sp, #0x1c]
+ ldrne r1, [sp, #0xc]
+ str r3, [sp, #0x10]
+ orrne r1, r1, r1, lsl #0x8
+ orrne r1, r1, r1, lsl #0x10
+ strne r1, [sp, #0xc]
+ bne _020B673C
+ ldr r1, [sp, #0xc]
+ orr r1, r1, r1, lsl #0x4
+ orr r1, r1, r1, lsl #0x8
+ orr r1, r1, r1, lsl #0x10
+ str r1, [sp, #0xc]
+_020B673C:
+ ldr r1, [sp, #0x10]
+ bic r1, r1, #0x7
+ mov r2, r1, asr #0x2
+ str r1, [sp, #0x14]
+ add r1, r1, r2, lsr #0x1d
+ ldr r2, [r0, #0x10]
+ mov r3, r1, asr #0x3
+ mul r1, r3, r2
+ bic r3, r10, #0x7
+ str r3, [sp, #0x28]
+ ldr r3, [sp, #0x2c]
+ mov r6, r3, lsl #0x6
+ ldr r3, [sp, #0x28]
+ mov r4, r6, asr #0x2
+ mov r5, r3, asr #0x2
+ add r5, r3, r5, lsr #0x1d
+ add r4, r6, r4, lsr #0x1d
+ mov r3, r4, asr #0x3
+ str r3, [sp, #0x30]
+ ldr r3, [sp, #0x1c]
+ add r1, r1, r5, asr #0x3
+ add r4, r3, #0x7
+ ldr r3, [r0, #0x0]
+ ldr r0, [sp, #0x18]
+ add r5, r0, #0x7
+ ldr r0, [sp, #0x30]
+ bic r7, r5, #0x7
+ mla r1, r0, r1, r3
+ bic r0, r4, #0x7
+ str r0, [sp, #0x20]
+ ldr r0, [sp, #0x30]
+ str r1, [sp, #0x24]
+ mul r0, r2, r0
+ str r0, [sp, #0x34]
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x20]
+ cmp r1, r0
+ addge sp, sp, #0x3c
+ ldmgeia sp!, {r4-r11,pc}
+ mov r5, #0x0
+ mov r4, #0x8
+_020B67E0:
+ ldr r1, [sp, #0x14]
+ ldr r0, [sp, #0x10]
+ ldr r6, [sp, #0x24]
+ cmp r1, r0
+ movlt r1, r0
+ ldrlt r0, [sp, #0x14]
+ sublt r9, r1, r0
+ ldr r1, [sp, #0x1c]
+ ldr r0, [sp, #0x14]
+ movge r9, r5
+ sub r0, r1, r0
+ cmp r0, #0x8
+ movgt r0, r4
+ sub r11, r0, r9
+ ldr r0, [sp, #0x28]
+ cmp r0, r7
+ mov r8, r0
+ bge _020B687C
+_020B6828:
+ ldr r0, [sp, #0x18]
+ cmp r8, r10
+ sublt r1, r10, r8
+ sub r0, r0, r8
+ movge r1, r5
+ cmp r0, #0x8
+ movgt r0, r4
+ sub r3, r0, r1
+ ldr r0, [sp, #0xc]
+ str r11, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x2c]
+ mov r2, r9
+ str r0, [sp, #0x8]
+ mov r0, r6
+ bl ClearChar
+ ldr r0, [sp, #0x30]
+ add r8, r8, #0x8
+ add r6, r6, r0
+ cmp r8, r7
+ blt _020B6828
+_020B687C:
+ ldr r1, [sp, #0x24]
+ ldr r0, [sp, #0x34]
+ add r0, r1, r0
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #0x14]
+ add r1, r0, #0x8
+ ldr r0, [sp, #0x20]
+ str r1, [sp, #0x14]
+ cmp r1, r0
+ blt _020B67E0
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end ClearAreaLine
+
+ arm_func_start ClearContinuous
+ClearContinuous: ; 0x020B68AC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r0
+ ldrb r2, [r3, #0xc]
+ ldr r12, [r3, #0x4]
+ cmp r2, #0x4
+ orreq r0, r1, r1, lsl #0x4
+ orreq r0, r0, r0, lsl #0x8
+ orreq r1, r0, r0, lsl #0x10
+ orrne r0, r1, r1, lsl #0x8
+ orrne r1, r0, r0, lsl #0x10
+ ldr r0, [r3, #0x8]
+ mov r2, r2, lsl #0x6
+ mul lr, r12, r0
+ mov r0, r2, asr #0x2
+ add r0, r2, r0, lsr #0x1d
+ mov r2, r0, asr #0x3
+ mov r0, r1
+ mul r2, lr, r2
+ ldr r1, [r3, #0x0]
+ bl MIi_CpuClearFast
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end ClearContinuous
+
+ arm_func_start DrawGlyph1D
+DrawGlyph1D: ; 0x020B6908
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4c
+ ldr r7, [sp, #0x74]
+ ldrb r5, [r0, #0xc]
+ ldr r6, [r1, #0x0]
+ ldr r4, [r7, #0x0]
+ ldr r9, [r6, #0x8]
+ mov r8, r5, lsl #0x6
+ ldrb r4, [r4, #0x1]
+ mov r5, r8, asr #0x2
+ add r5, r8, r5, lsr #0x1d
+ ldrb r9, [r9, #0x1]
+ ldr r8, [r0, #0x4]
+ ldr r6, [r0, #0x8]
+ str r2, [sp, #0x8]
+ str r3, [sp, #0xc]
+ cmp r4, #0x0
+ mov r5, r5, asr #0x3
+ addeq sp, sp, #0x4c
+ ldmeqia sp!, {r4-r11,pc}
+ adds r3, r2, r4
+ addmi sp, sp, #0x4c
+ ldmmiia sp!, {r4-r11,pc}
+ ldr r2, [sp, #0xc]
+ adds r2, r2, r9
+ addmi sp, sp, #0x4c
+ ldmmiia sp!, {r4-r11,pc}
+ ldr r10, [sp, #0x8]
+ add r3, r3, #0x7
+ cmp r10, #0x0
+ movle r10, #0x0
+ strle r10, [sp, #0x10]
+ movgt r10, r10, lsr #0x3
+ strgt r10, [sp, #0x10]
+ ldr r10, [sp, #0xc]
+ add r2, r2, #0x7
+ cmp r10, #0x0
+ movle r10, #0x0
+ mov r11, r2, lsr #0x3
+ mov r3, r3, lsr #0x3
+ movgt r10, r10, lsr #0x3
+ cmp r3, r8
+ movcs r3, r8
+ cmp r11, r6
+ ldr r2, [sp, #0x10]
+ movcs r11, r6
+ subs r8, r3, r2
+ addmi sp, sp, #0x4c
+ sub r3, r11, r10
+ ldmmiia sp!, {r4-r11,pc}
+ cmp r3, #0x0
+ addlt sp, sp, #0x4c
+ ldmltia sp!, {r4-r11,pc}
+ ldr r2, [sp, #0x8]
+ ldr r6, [r0, #0x0]
+ cmp r2, #0x0
+ andge r2, r2, #0x7
+ strge r2, [sp, #0x8]
+ ldr r2, [sp, #0xc]
+ ldr r11, [sp, #0x8]
+ cmp r2, #0x0
+ andge r2, r2, #0x7
+ strge r2, [sp, #0xc]
+ sub r8, r11, r8, lsl #0x3
+ ldr r11, [sp, #0xc]
+ ldr r2, [sp, #0x70]
+ sub r3, r11, r3, lsl #0x3
+ str r3, [sp, #0x14]
+ ldr r3, [r7, #0x4]
+ sub r2, r2, #0x1
+ str r3, [sp, #0x28]
+ str r2, [sp, #0x48]
+ str r9, [sp, #0x38]
+ str r4, [sp, #0x34]
+ ldr r4, [r1, #0x0]
+ ldr r2, [sp, #0x14]
+ mov r3, r11
+ cmp r3, r2
+ ldr r2, [r4, #0x8]
+ ldrb r3, [r2, #0x6]
+ str r3, [sp, #0x40]
+ ldrb r2, [r0, #0xc]
+ str r2, [sp, #0x44]
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x8]
+ ldrb r1, [r1, #0x0]
+ mul r1, r3, r1
+ str r1, [sp, #0x3c]
+ ldr r1, [r0, #0x10]
+ str r1, [sp, #0x20]
+ ldr r1, [r0, #0x4]
+ ldr r0, [r0, #0x8]
+ ldrb r11, [sp, #0x20]
+ ldrb r4, [sp, #0x21]
+ str r1, [sp, #0x1c]
+ str r0, [sp, #0x18]
+ addle sp, sp, #0x4c
+ ldmleia sp!, {r4-r11,pc}
+_020B6A90:
+ ldr r0, [sp, #0xc]
+ ldr r7, [sp, #0x10]
+ str r0, [sp, #0x30]
+ ldr r0, [sp, #0x8]
+ cmp r0, r8
+ mov r9, r0
+ ble _020B6AEC
+_020B6AAC:
+ ldr r2, [sp, #0x1c]
+ str r11, [sp, #0x0]
+ ldr r3, [sp, #0x18]
+ mov r0, r7
+ mov r1, r10
+ str r4, [sp, #0x4]
+ bl GetCharIndex1D
+ mla r1, r0, r5, r6
+ add r0, sp, #0x24
+ str r9, [sp, #0x2c]
+ str r1, [sp, #0x24]
+ bl LetterChar
+ sub r9, r9, #0x8
+ add r7, r7, #0x1
+ cmp r9, r8
+ bgt _020B6AAC
+_020B6AEC:
+ ldr r0, [sp, #0xc]
+ add r10, r10, #0x1
+ sub r1, r0, #0x8
+ ldr r0, [sp, #0x14]
+ str r1, [sp, #0xc]
+ cmp r1, r0
+ bgt _020B6A90
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end DrawGlyph1D
+
+ arm_func_start DrawGlyphLine
+DrawGlyphLine: ; 0x020B6B10
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x2c
+ ldr r4, [sp, #0x54]
+ ldrb r5, [r0, #0xc]
+ str r4, [sp, #0x54]
+ ldr r4, [r4, #0x0]
+ ldr r6, [r1, #0x0]
+ mov r7, r5, lsl #0x6
+ ldrb r4, [r4, #0x1]
+ mov r5, r7, asr #0x2
+ add r5, r7, r5, lsr #0x1d
+ cmp r4, #0x0
+ ldr r6, [r6, #0x8]
+ mov r9, r3
+ ldr r8, [r0, #0x4]
+ ldr r7, [r0, #0x8]
+ mov r10, r2
+ mov r5, r5, asr #0x3
+ addeq sp, sp, #0x2c
+ ldr lr, [r0, #0x0]
+ ldrb r3, [r6, #0x1]
+ ldmeqia sp!, {r4-r11,pc}
+ adds r6, r10, r4
+ addmi sp, sp, #0x2c
+ ldmmiia sp!, {r4-r11,pc}
+ adds r2, r9, r3
+ addmi sp, sp, #0x2c
+ ldmmiia sp!, {r4-r11,pc}
+ cmp r10, #0x0
+ movle r11, #0x0
+ add r6, r6, #0x7
+ movgt r11, r10, lsr #0x3
+ cmp r9, #0x0
+ movle r12, #0x0
+ add r2, r2, #0x7
+ mov r6, r6, lsr #0x3
+ movgt r12, r9, lsr #0x3
+ cmp r6, r8
+ movcs r6, r8
+ mov r2, r2, lsr #0x3
+ cmp r2, r7
+ movcs r2, r7
+ subs r7, r6, r11
+ addmi sp, sp, #0x2c
+ sub r2, r2, r12
+ ldmmiia sp!, {r4-r11,pc}
+ cmp r2, #0x0
+ addlt sp, sp, #0x2c
+ ldmltia sp!, {r4-r11,pc}
+ ldr r6, [r0, #0x10]
+ cmp r10, #0x0
+ sub r8, r6, r7
+ mul r8, r5, r8
+ mla r11, r6, r12, r11
+ andge r10, r10, #0x7
+ str r8, [sp, #0x0]
+ ldr r8, [sp, #0x54]
+ mla r6, r5, r11, lr
+ ldr r12, [r8, #0x4]
+ ldr r11, [sp, #0x50]
+ cmp r9, #0x0
+ sub r8, r11, #0x1
+ andge r9, r9, #0x7
+ sub r11, r9, r2, lsl #0x3
+ str r12, [sp, #0x8]
+ str r4, [sp, #0x14]
+ str r8, [sp, #0x28]
+ str r3, [sp, #0x18]
+ ldr r3, [r1, #0x0]
+ cmp r9, r11
+ ldr r2, [r3, #0x8]
+ sub r7, r10, r7, lsl #0x3
+ ldrb r2, [r2, #0x6]
+ str r2, [sp, #0x20]
+ ldrb r0, [r0, #0xc]
+ str r0, [sp, #0x24]
+ ldr r0, [r1, #0x0]
+ ldr r0, [r0, #0x8]
+ ldrb r0, [r0, #0x0]
+ mul r0, r2, r0
+ str r0, [sp, #0x1c]
+ addle sp, sp, #0x2c
+ ldmleia sp!, {r4-r11,pc}
+ add r4, sp, #0x4
+_020B6C60:
+ mov r8, r10
+ str r9, [sp, #0x10]
+ cmp r10, r7
+ ble _020B6C90
+_020B6C70:
+ mov r0, r4
+ str r6, [sp, #0x4]
+ str r8, [sp, #0xc]
+ bl LetterChar
+ sub r8, r8, #0x8
+ cmp r8, r7
+ add r6, r6, r5
+ bgt _020B6C70
+_020B6C90:
+ ldr r0, [sp, #0x0]
+ sub r9, r9, #0x8
+ cmp r9, r11
+ add r6, r6, r0
+ bgt _020B6C60
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end DrawGlyphLine
+
+ arm_func_start LetterChar
+LetterChar: ; 0x020B6CAC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ ldr r5, [r0, #0x8]
+ ldr r4, [r0, #0xc]
+ cmp r5, #0x0
+ strge r5, [sp, #0x0]
+ movlt r1, #0x0
+ strlt r1, [sp, #0x0]
+ ldr r1, [r0, #0x10]
+ cmp r4, #0x0
+ add r10, r5, r1
+ ldr r1, [r0, #0x14]
+ movge r2, r4
+ movlt r2, #0x0
+ cmp r10, #0x8
+ add r3, r4, r1
+ movge r10, #0x8
+ cmp r3, #0x8
+ movge r3, #0x8
+ cmp r4, #0x0
+ movgt r4, #0x0
+ cmp r5, #0x0
+ ldr r8, [r0, #0x20]
+ movgt r5, #0x0
+ rsb r1, r4, #0x0
+ mul r7, r10, r8
+ ldr r6, [r0, #0x1c]
+ rsb r4, r5, #0x0
+ mul r9, r6, r4
+ ldr r4, [r0, #0x18]
+ mov r10, r7
+ str r4, [sp, #0x8]
+ ldr r4, [sp, #0x0]
+ cmp r8, #0x4
+ mul r5, r4, r8
+ ldr r4, [sp, #0x8]
+ str r5, [sp, #0x0]
+ mla r11, r1, r4, r9
+ ldr r1, [r0, #0x4]
+ str r1, [sp, #0x4]
+ bne _020B6E24
+ ldr r1, [r0, #0x0]
+ ldr r7, [r0, #0x24]
+ add r0, r1, r2, lsl #0x2
+ str r0, [sp, #0xc]
+ add r0, r1, r3, lsl #0x2
+ ldr r1, [sp, #0xc]
+ str r0, [sp, #0x10]
+ cmp r1, r0
+ addcs sp, sp, #0x34
+ ldmcsia sp!, {r4-r11,pc}
+ mov r0, #0x0
+ add r9, sp, #0x24
+ mov r4, #0xf
+ str r0, [sp, #0x1c]
+_020B6D88:
+ ldr r0, [sp, #0xc]
+ mov r1, r11, lsr #0x1f
+ ldr r5, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ rsb r2, r1, r11, lsl #0x1d
+ add r0, r0, r11, lsr #0x3
+ str r0, [sp, #0x24]
+ ldr r0, [sp, #0x1c]
+ add r1, r1, r2, ror #0x1d
+ strb r0, [sp, #0x28]
+ strb r0, [sp, #0x29]
+ mov r0, r9
+ bl NNSi_G2dBitReaderRead
+ ldr r8, [sp, #0x0]
+ mov r0, r8
+ cmp r0, r10
+ bhs _020B6DF8
+_020B6DCC:
+ mov r0, r9
+ mov r1, r6
+ bl NNSi_G2dBitReaderRead
+ cmp r0, #0x0
+ mvnne r1, r4, lsl r8
+ addne r0, r7, r0
+ andne r1, r5, r1
+ orrne r5, r1, r0, lsl r8
+ add r8, r8, #0x4
+ cmp r8, r10
+ blo _020B6DCC
+_020B6DF8:
+ ldr r0, [sp, #0xc]
+ add r1, r0, #0x4
+ str r5, [r0, #0x0]
+ ldr r0, [sp, #0x10]
+ str r1, [sp, #0xc]
+ cmp r1, r0
+ ldr r0, [sp, #0x8]
+ add r11, r11, r0
+ blo _020B6D88
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+_020B6E24:
+ ldr r1, [r0, #0x0]
+ ldr r9, [r0, #0x24]
+ add r0, r1, r2, lsl #0x3
+ str r0, [sp, #0x14]
+ add r0, r1, r3, lsl #0x3
+ ldr r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ cmp r1, r0
+ addcs sp, sp, #0x34
+ ldmcsia sp!, {r4-r11,pc}
+ mov r0, #0x0
+ mov r4, #0xff
+ str r0, [sp, #0x20]
+_020B6E58:
+ mov r1, r11, lsr #0x1f
+ rsb r0, r1, r11, lsl #0x1d
+ add r1, r1, r0, ror #0x1d
+ ldr r0, [sp, #0x14]
+ ldr r8, [r0, #0x0]
+ ldr r7, [r0, #0x4]
+ ldr r0, [sp, #0x4]
+ add r0, r0, r11, lsr #0x3
+ str r0, [sp, #0x2c]
+ ldr r0, [sp, #0x20]
+ strb r0, [sp, #0x30]
+ strb r0, [sp, #0x31]
+ add r0, sp, #0x2c
+ bl NNSi_G2dBitReaderRead
+ ldr r0, [sp, #0x0]
+ cmp r0, r10
+ mov r5, r0
+ bhs _020B6EE8
+_020B6EA0:
+ add r0, sp, #0x2c
+ mov r1, r6
+ bl NNSi_G2dBitReaderRead
+ cmp r0, #0x0
+ beq _020B6EDC
+ cmp r5, #0x20
+ mvncc r1, r4, lsl r5
+ addcc r0, r9, r0
+ andcc r1, r8, r1
+ orrcc r8, r1, r0, lsl r5
+ subcs r2, r5, #0x20
+ mvncs r1, r4, lsl r2
+ addcs r0, r9, r0
+ andcs r1, r7, r1
+ orrcs r7, r1, r0, lsl r2
+_020B6EDC:
+ add r5, r5, #0x8
+ cmp r5, r10
+ blo _020B6EA0
+_020B6EE8:
+ ldr r0, [sp, #0x14]
+ str r8, [r0, #0x0]
+ add r1, r0, #0x8
+ str r7, [r0, #0x4]
+ ldr r0, [sp, #0x18]
+ str r1, [sp, #0x14]
+ cmp r1, r0
+ ldr r0, [sp, #0x8]
+ add r11, r11, r0
+ blo _020B6E58
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end LetterChar
+
+ arm_func_start ClearChar
+ClearChar: ; 0x020B6F18
+ stmdb sp!, {r4-r6,lr}
+ mov lr, r0
+ cmp r3, #0x8
+ ldr r0, [sp, #0x14]
+ bne _020B6F4C
+ ldr r4, [sp, #0x10]
+ cmp r4, #0x8
+ bne _020B6F4C
+ ldr r2, [sp, #0x18]
+ mov r1, lr
+ mov r2, r2, lsl #0x3
+ bl MIi_CpuClearFast
+ ldmia sp!, {r4-r6,pc}
+_020B6F4C:
+ ldr r4, [sp, #0x18]
+ cmp r4, #0x4
+ bne _020B6FAC
+ mov r5, r1, lsl #0x2
+ add r4, r5, r3, lsl #0x2
+ mvn r3, #0x0
+ rsb r4, r4, #0x20
+ mov r3, r3, lsr r5
+ add r1, r4, r1, lsl #0x2
+ mov r3, r3, lsl r1
+ ldr r1, [sp, #0x10]
+ add r5, lr, r2, lsl #0x2
+ add r2, r5, r1, lsl #0x2
+ and r6, r0, r3, lsr r4
+ cmp r5, r2
+ mvn r1, r3, lsr r4
+ ldmcsia sp!, {r4-r6,pc}
+_020B6F90:
+ ldr r0, [r5, #0x0]
+ and r0, r0, r1
+ orr r0, r6, r0
+ str r0, [r5], #0x4
+ cmp r5, r2
+ blo _020B6F90
+ ldmia sp!, {r4-r6,pc}
+_020B6FAC:
+ mov r12, r1, lsl #0x3
+ add r1, r12, r3, lsl #0x3
+ rsb r1, r1, #0x40
+ mvn r3, #0x0
+ cmp r1, #0x20
+ mov r5, r3, lsr r12
+ subcs r4, r1, #0x20
+ addcs r3, r12, r4
+ movcs r3, r5, lsl r3
+ movcs r3, r3, lsr r4
+ movcc r3, r5, lsl r12
+ mvn r4, #0x0
+ add r5, lr, r2, lsl #0x3
+ cmp r12, #0x20
+ mov r4, r4, lsl r1
+ subcs r12, r12, #0x20
+ addcs r1, r12, r1
+ movcs r1, r4, lsr r1
+ movcs r6, r1, lsl r12
+ movcc r6, r4, lsr r1
+ ldr r1, [sp, #0x10]
+ and lr, r0, r3
+ add r4, r5, r1, lsl #0x3
+ cmp r5, r4
+ and r12, r0, r6
+ mvn r2, r3
+ mvn r1, r6
+ ldmcsia sp!, {r4-r6,pc}
+_020B701C:
+ ldr r0, [r5, #0x0]
+ and r0, r0, r2
+ orr r0, lr, r0
+ str r0, [r5, #0x0]
+ ldr r0, [r5, #0x4]
+ and r0, r0, r1
+ orr r0, r12, r0
+ str r0, [r5, #0x4]
+ add r5, r5, #0x8
+ cmp r5, r4
+ blo _020B701C
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end ClearChar
+
+ arm_func_start OBJSizeToShape
+OBJSizeToShape: ; 0x020B704C
+ ldrb r3, [r0, #0x1]
+ ldr r2, _020B7064 ; =shape$8277
+ ldrb r1, [r0, #0x0]
+ add r0, r2, r3, lsl #0x4
+ ldr r0, [r0, r1, lsl #0x2]
+ bx lr
+ .balign 4
+_020B7064: .word shape$8277
+ arm_func_end OBJSizeToShape
+
+ arm_func_start GetCharIndex1D
+GetCharIndex1D: ; 0x020B7068
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr fp, _020B7164 ; =objs$8221
+ mov r9, #0x0
+ mov r10, #0x3
+ mvn r7, #0x0
+_020B7080:
+ ldr r4, [sp, #0x2c]
+ ldr r6, [sp, #0x28]
+ and r12, r3, r7, lsl r4
+ cmp r12, r1
+ mov r8, r7, lsl r6
+ mov r5, r7, lsl r4
+ and lr, r2, r7, lsl r6
+ bhi _020B70D0
+ mla r9, r2, r12, r9
+ cmp lr, r0
+ movhi r2, lr
+ subhi r1, r1, r12
+ subhi r3, r3, r12
+ bhi _020B7118
+ sub r3, r3, r12
+ mla r9, lr, r3, r9
+ sub r0, r0, lr
+ sub r1, r1, r12
+ sub r2, r2, lr
+ b _020B7118
+_020B70D0:
+ cmp lr, r0
+ mlals r9, lr, r12, r9
+ mvn r3, r5
+ movls r3, r12
+ subls r0, r0, lr
+ subls r2, r2, lr
+ bls _020B7118
+ and r2, r1, r5
+ mla r5, lr, r2, r9
+ and r2, r0, r8
+ and r1, r1, r3
+ add r2, r5, r2, lsl r4
+ mvn r3, r8
+ add r1, r2, r1, lsl r6
+ and r0, r0, r3
+ add sp, sp, #0x4
+ add r0, r1, r0
+ ldmia sp!, {r4-r11,pc}
+_020B7118:
+ cmp r2, #0x8
+ movlt r4, r2
+ movge r5, r10
+ clzlt r4, r4
+ rsblt r5, r4, #0x1f
+ cmp r3, #0x8
+ movge r4, r10
+ movlt r4, r3
+ clzlt r4, r4
+ rsblt r4, r4, #0x1f
+ add r4, r11, r4, lsl #0x3
+ add r6, r4, r5, lsl #0x1
+ ldrb r5, [r4, r5, lsl #0x1]
+ ldrb r4, [r6, #0x1]
+ str r5, [sp, #0x28]
+ str r4, [sp, #0x2c]
+ b _020B7080
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B7164: .word objs$8221
+ arm_func_end GetCharIndex1D
diff --git a/arm9/asm/NNS_G2D_g2d_font.s b/arm9/asm/NNS_G2D_g2d_font.s
new file mode 100644
index 00000000..162fe423
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_font.s
@@ -0,0 +1,284 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dFontGetTextRect
+NNSi_G2dFontGetTextRect: ; 0x020B5ABC
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ add r5, sp, #0x0
+ mov r4, #0x0
+ str r4, [r5, #0x0]
+ str r4, [r5, #0x4]
+ mov r8, r2
+ ldr r2, [sp, #0x28]
+ mov r5, r0
+ mov r9, r1
+ mov r4, r3
+ cmp r2, #0x0
+ mov r7, #0x1
+ beq _020B5B24
+ add r6, sp, #0x28
+_020B5AF8:
+ mov r0, r9
+ mov r1, r8
+ mov r3, r6
+ bl NNSi_G2dFontGetStringWidth
+ ldr r1, [sp, #0x0]
+ ldr r2, [sp, #0x28]
+ cmp r0, r1
+ strgt r0, [sp, #0x0]
+ add r7, r7, #0x1
+ cmp r2, #0x0
+ bne _020B5AF8
+_020B5B24:
+ ldr r0, [r9, #0x0]
+ sub r2, r7, #0x1
+ ldrsb r1, [r0, #0x1]
+ ldr r0, [sp, #0x0]
+ add r1, r4, r1
+ mul r1, r2, r1
+ sub r1, r1, r4
+ str r1, [sp, #0x4]
+ str r0, [r5, #0x0]
+ str r1, [r5, #0x4]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end NNSi_G2dFontGetTextRect
+
+ arm_func_start NNSi_G2dFontGetTextHeight
+NNSi_G2dFontGetTextHeight: ; 0x020B5B54
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ str r2, [sp, #0x0]
+ add r3, sp, #0x4
+ mov r2, #0x0
+ str r2, [r3, #0x0]
+ mov r8, r0
+ str r2, [r3, #0x4]
+ ldr r7, [r8, #0x4]
+ add r0, sp, #0x0
+ mov r5, r1
+ mov r4, #0x1
+ blx r7
+ cmp r0, #0x0
+ beq _020B5BAC
+ add r6, sp, #0x0
+_020B5B94:
+ cmp r0, #0xa
+ mov r0, r6
+ addeq r4, r4, #0x1
+ blx r7
+ cmp r0, #0x0
+ bne _020B5B94
+_020B5BAC:
+ ldr r0, [r8, #0x0]
+ ldrsb r0, [r0, #0x1]
+ add r0, r5, r0
+ mul r0, r4, r0
+ sub r0, r0, r5
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNSi_G2dFontGetTextHeight
+
+ arm_func_start NNSi_G2dFontGetStringWidth
+NNSi_G2dFontGetStringWidth: ; 0x020B5BC8
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ str r2, [sp, #0x0]
+ ldr r4, [r8, #0x4]
+ add r0, sp, #0x0
+ mov r7, r1
+ mov r6, r3
+ mov r5, #0x0
+ blx r4
+ movs r1, r0
+ beq _020B5C58
+ ldr sb, _020B5C84 ; =0x0000FFFF
+ add r10, sp, #0x0
+_020B5C00:
+ cmp r1, #0xa
+ beq _020B5C58
+ mov r0, r8
+ bl NNS_G2dFontFindGlyphIndex
+ mov r1, r0
+ cmp r1, r9
+ ldreq r0, [r8, #0x0]
+ ldreqh r1, [r0, #0x2]
+ mov r0, r8
+ bl NNS_G2dFontGetCharWidthsFromIndex
+ ldrh r1, [r8, #0x8]
+ cmp r1, #0x0
+ ldrnesb r1, [r0, #0x0]
+ ldrneb r0, [r0, #0x1]
+ addne r0, r1, r0
+ ldreqsb r0, [r0, #0x2]
+ add r1, r7, r0
+ mov r0, r10
+ add r5, r5, r1
+ blx r4
+ movs r1, r0
+ bne _020B5C00
+_020B5C58:
+ cmp r6, #0x0
+ beq _020B5C70
+ cmp r1, #0xa
+ ldreq r0, [sp, #0x0]
+ movne r0, #0x0
+ str r0, [r6, #0x0]
+_020B5C70:
+ cmp r5, #0x0
+ subgt r5, r5, r7
+ mov r0, r5
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B5C84: .word 0x0000FFFF
+ arm_func_end NNSi_G2dFontGetStringWidth
+
+ arm_func_start NNS_G2dFontGetCharWidthsFromIndex
+NNS_G2dFontGetCharWidthsFromIndex: ; 0x020B5C88
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x0]
+ ldr lr, [r3, #0xc]
+ cmp lr, #0x0
+ beq _020B5CD8
+_020B5CA0:
+ ldrh r12, [lr, #0x0]
+ cmp r12, r1
+ bhi _020B5CCC
+ ldrh r2, [lr, #0x2]
+ cmp r1, r2
+ ldrlsh r2, [r0, #0xa]
+ addls r3, lr, #0x8
+ subls r0, r1, r12
+ mlals r0, r2, r0, r3
+ addls sp, sp, #0x4
+ ldmlsia sp!, {pc}
+_020B5CCC:
+ ldr lr, [lr, #0x4]
+ cmp lr, #0x0
+ bne _020B5CA0
+_020B5CD8:
+ add r0, r3, #0x4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G2dFontGetCharWidthsFromIndex
+
+ arm_func_start NNS_G2dFontFindGlyphIndex
+NNS_G2dFontFindGlyphIndex: ; 0x020B5CE4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x10]
+ cmp r0, #0x0
+ beq _020B5D2C
+_020B5CFC:
+ ldrh r2, [r0, #0x0]
+ cmp r2, r1
+ bhi _020B5D20
+ ldrh r2, [r0, #0x2]
+ cmp r1, r2
+ bhi _020B5D20
+ bl GetGlyphIndex
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020B5D20:
+ ldr r0, [r0, #0x8]
+ cmp r0, #0x0
+ bne _020B5CFC
+_020B5D2C:
+ ldr r0, _020B5D38 ; =0x0000FFFF
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B5D38: .word 0x0000FFFF
+ arm_func_end NNS_G2dFontFindGlyphIndex
+
+ arm_func_start NNS_G2dFontInitUTF16
+NNS_G2dFontInitUTF16: ; 0x020B5D3C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, r1
+ mov r1, r4
+ bl NNSi_G2dGetUnpackedFont
+ sub r0, r0, #0x1
+ strh r0, [r4, #0x8]
+ ldrh r0, [r4, #0x8]
+ cmp r0, #0x0
+ movne r1, #0x2
+ moveq r1, #0x3
+ ldr r0, _020B5D78 ; =NNSi_G2dSplitCharUTF16
+ strh r1, [r4, #0xa]
+ str r0, [r4, #0x4]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B5D78: .word NNSi_G2dSplitCharUTF16
+ arm_func_end NNS_G2dFontInitUTF16
+
+ arm_func_start GetGlyphIndex
+GetGlyphIndex: ; 0x020B5D7C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r3, [r0, #0x4]
+ ldr r2, _020B5E4C ; =0x0000FFFF
+ cmp r3, #0x0
+ beq _020B5DA8
+ cmp r3, #0x1
+ beq _020B5DC4
+ cmp r3, #0x2
+ beq _020B5DD8
+ b _020B5E40
+_020B5DA8:
+ ldrh r2, [r0, #0x0]
+ ldrh r3, [r0, #0xc]
+ sub r0, r1, r2
+ add r0, r3, r0
+ mov r0, r0, lsl #0x10
+ mov r2, r0, lsr #0x10
+ b _020B5E40
+_020B5DC4:
+ ldrh r2, [r0, #0x0]
+ sub r1, r1, r2
+ add r0, r0, r1, lsl #0x1
+ ldrh r2, [r0, #0xc]
+ b _020B5E40
+_020B5DD8:
+ ldrh r3, [r0, #0xc]
+ add r0, r0, #0xc
+ add r0, r0, #0x2
+ sub r3, r3, #0x1
+ add lr, r0, r3, lsl #0x2
+ cmp r0, lr
+ bhi _020B5E40
+_020B5DF4:
+ sub r12, lr, r0
+ mov r3, r12, asr #0x1
+ add r3, r12, r3, lsr #0x1e
+ mov r3, r3, asr #0x2
+ add r3, r3, r3, lsr #0x1f
+ mov r12, r3, asr #0x1
+ mov r3, r12, lsl #0x2
+ ldrh r3, [r0, r3]
+ add r12, r0, r12, lsl #0x2
+ cmp r3, r1
+ addcc r0, r12, #0x4
+ blo _020B5E38
+ cmp r1, r3
+ subcc lr, r12, #0x4
+ blo _020B5E38
+ ldrh r2, [r12, #0x2]
+ b _020B5E40
+_020B5E38:
+ cmp r0, lr
+ bls _020B5DF4
+_020B5E40:
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B5E4C: .word 0x0000FFFF
+ arm_func_end GetGlyphIndex
diff --git a/arm9/asm/NNS_G2D_g2d_image.s b/arm9/asm/NNS_G2D_g2d_image.s
new file mode 100644
index 00000000..796da6c6
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_image.s
@@ -0,0 +1,780 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dGetVramLocation
+NNSi_G2dGetVramLocation: ; 0x020B10BC
+ ldr r0, [r0, r1, lsl #0x2]
+ bx lr
+ arm_func_end NNSi_G2dGetVramLocation
+
+ arm_func_start NNSi_G2dSetVramLocation
+NNSi_G2dSetVramLocation: ; 0x020B10C4
+ str r2, [r0, r1, lsl #0x2]
+ bx lr
+ arm_func_end NNSi_G2dSetVramLocation
+
+ arm_func_start NNSi_G2dInitializeVRamLocation
+NNSi_G2dInitializeVRamLocation: ; 0x020B10CC
+ mov r2, #0x0
+ mvn r1, #0x0
+_020B10D4:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blt _020B10D4
+ bx lr
+ arm_func_end NNSi_G2dInitializeVRamLocation
+
+ arm_func_start NNS_G2dLoadPaletteEx
+NNS_G2dLoadPaletteEx: ; 0x020B10E8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r10, r0
+ ldr r0, [r10, #0x0]
+ mov r9, r1
+ cmp r0, #0x3
+ ldr r0, [sp, #0x28]
+ moveq r7, #0x20
+ str r0, [sp, #0x28]
+ ldrh r0, [r9, #0x0]
+ movne r7, #0x200
+ mov r11, r2
+ mov r8, r3
+ str r0, [sp, #0x0]
+ mov r6, #0x0
+ cmp r0, #0x0
+ bls _020B1210
+_020B112C:
+ ldr r1, [r9, #0x4]
+ mov r0, r6, lsl #0x1
+ ldrh r2, [r1, r0]
+ ldr r0, [r10, #0xc]
+ ldr r1, [r10, #0x8]
+ mla r5, r7, r2, r11
+ mla r4, r7, r6, r0
+ bl DC_FlushRange
+ cmp r8, #0x0
+ beq _020B11E0
+ cmp r8, #0x1
+ beq _020B1168
+ cmp r8, #0x2
+ beq _020B11A4
+ b _020B11F8
+_020B1168:
+ ldr r0, [r10, #0x4]
+ cmp r0, #0x0
+ beq _020B1190
+ bl GX_BeginLoadOBJExtPltt
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GX_LoadOBJExtPltt
+ bl GX_EndLoadOBJExtPltt
+ b _020B11F8
+_020B1190:
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GX_LoadOBJPltt
+ b _020B11F8
+_020B11A4:
+ ldr r0, [r10, #0x4]
+ cmp r0, #0x0
+ beq _020B11CC
+ bl GXS_BeginLoadOBJExtPltt
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GXS_LoadOBJExtPltt
+ bl GXS_EndLoadOBJExtPltt
+ b _020B11F8
+_020B11CC:
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GXS_LoadOBJPltt
+ b _020B11F8
+_020B11E0:
+ bl GX_BeginLoadTexPltt
+ mov r0, r4
+ mov r1, r5
+ mov r2, r7
+ bl GX_LoadTexPltt
+ bl GX_EndLoadTexPltt
+_020B11F8:
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ ldr r0, [sp, #0x0]
+ cmp r6, r0
+ blo _020B112C
+_020B1210:
+ ldr r0, [sp, #0x28]
+ ldr r2, [r10, #0x0]
+ mov r1, r0
+ str r2, [r1, #0x0]
+ ldr r4, [r10, #0x4]
+ mov r3, r0
+ mov r1, r8
+ mov r2, r11
+ str r4, [r3, #0x4]
+ bl NNS_G2dSetImagePaletteLocation
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end NNS_G2dLoadPaletteEx
+
+ arm_func_start NNS_G2dLoadPalette
+NNS_G2dLoadPalette: ; 0x020B1240
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ ldr r5, [r9, #0xc]
+ ldr r4, [r9, #0x8]
+ mov r8, r1
+ mov r7, r2
+ mov r0, r5
+ mov r1, r4
+ mov r6, r3
+ bl DC_FlushRange
+ cmp r7, #0x0
+ beq _020B1300
+ cmp r7, #0x1
+ beq _020B1288
+ cmp r7, #0x2
+ beq _020B12C4
+ b _020B1318
+_020B1288:
+ ldr r0, [r9, #0x4]
+ cmp r0, #0x0
+ beq _020B12B0
+ bl GX_BeginLoadOBJExtPltt
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GX_LoadOBJExtPltt
+ bl GX_EndLoadOBJExtPltt
+ b _020B1318
+_020B12B0:
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GX_LoadOBJPltt
+ b _020B1318
+_020B12C4:
+ ldr r0, [r9, #0x4]
+ cmp r0, #0x0
+ beq _020B12EC
+ bl GXS_BeginLoadOBJExtPltt
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GXS_LoadOBJExtPltt
+ bl GXS_EndLoadOBJExtPltt
+ b _020B1318
+_020B12EC:
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GXS_LoadOBJPltt
+ b _020B1318
+_020B1300:
+ bl GX_BeginLoadTexPltt
+ mov r0, r5
+ mov r1, r8
+ mov r2, r4
+ bl GX_LoadTexPltt
+ bl GX_EndLoadTexPltt
+_020B1318:
+ ldr r1, [r9, #0x0]
+ mov r0, r6
+ str r1, [r6, #0x0]
+ ldr r3, [r9, #0x4]
+ mov r1, r7
+ mov r2, r8
+ str r3, [r6, #0x4]
+ bl NNS_G2dSetImagePaletteLocation
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end NNS_G2dLoadPalette
+
+ arm_func_start NNS_G2dLoadImageVramTransfer
+NNS_G2dLoadImageVramTransfer: ; 0x020B1340
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ ldr r0, [r7, #0x14]
+ ldr r1, [r7, #0x10]
+ mov r5, r2
+ mov r4, r3
+ bl DC_FlushRange
+ cmp r5, #0x0
+ ldr r0, [r7, #0x8]
+ beq _020B13B8
+ cmp r5, #0x1
+ beq _020B1384
+ cmp r5, #0x2
+ beq _020B13A0
+ b _020B13B8
+_020B1384:
+ mov r3, #0x4000000
+ ldr r2, [r3, #0x0]
+ ldr r1, _020B1520 ; =0xFFCFFFEF
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+ b _020B13B8
+_020B13A0:
+ ldr r3, _020B1524 ; =0x04001000
+ ldr r1, _020B1520 ; =0xFFCFFFEF
+ ldr r2, [r3, #0x0]
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+_020B13B8:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _020B14D8
+ ldrh r0, [r7, #0x2]
+ cmp r0, #0x10
+ bgt _020B1408
+ cmp r0, #0x10
+ bge _020B1434
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B1444
+ ; Jump table
+ b _020B1444 ; case 0
+ b _020B1414 ; case 1
+ b _020B141C ; case 2
+ b _020B1444 ; case 3
+ b _020B1424 ; case 4
+ b _020B1444 ; case 5
+ b _020B1444 ; case 6
+ b _020B1444 ; case 7
+ b _020B142C ; case 8
+_020B1408:
+ cmp r0, #0x20
+ beq _020B143C
+ b _020B1444
+_020B1414:
+ mov r0, #0x0
+ b _020B1448
+_020B141C:
+ mov r0, #0x1
+ b _020B1448
+_020B1424:
+ mov r0, #0x2
+ b _020B1448
+_020B142C:
+ mov r0, #0x3
+ b _020B1448
+_020B1434:
+ mov r0, #0x4
+ b _020B1448
+_020B143C:
+ mov r0, #0x5
+ b _020B1448
+_020B1444:
+ mov r0, #0x0
+_020B1448:
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x10
+ bgt _020B1490
+ cmp r0, #0x10
+ bge _020B14BC
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B14CC
+ ; Jump table
+ b _020B14CC ; case 0
+ b _020B149C ; case 1
+ b _020B14A4 ; case 2
+ b _020B14CC ; case 3
+ b _020B14AC ; case 4
+ b _020B14CC ; case 5
+ b _020B14CC ; case 6
+ b _020B14CC ; case 7
+ b _020B14B4 ; case 8
+_020B1490:
+ cmp r0, #0x20
+ beq _020B14C4
+ b _020B14CC
+_020B149C:
+ mov r0, #0x0
+ b _020B14D0
+_020B14A4:
+ mov r0, #0x1
+ b _020B14D0
+_020B14AC:
+ mov r0, #0x2
+ b _020B14D0
+_020B14B4:
+ mov r0, #0x3
+ b _020B14D0
+_020B14BC:
+ mov r0, #0x4
+ b _020B14D0
+_020B14C4:
+ mov r0, #0x5
+ b _020B14D0
+_020B14CC:
+ mov r0, #0x0
+_020B14D0:
+ str r0, [r4, #0x10]
+ b _020B14E8
+_020B14D8:
+ ldrh r0, [r7, #0x2]
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ str r0, [r4, #0x10]
+_020B14E8:
+ ldr r1, [r7, #0x4]
+ mov r0, #0x0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ mov r0, #0x1
+ str r0, [r4, #0x1c]
+ ldr r3, [r7, #0x8]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r6
+ str r3, [r4, #0x20]
+ bl NNS_G2dSetImageLocation
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B1520: .word 0xFFCFFFEF
+_020B1524: .word 0x04001000
+ arm_func_end NNS_G2dLoadImageVramTransfer
+
+ arm_func_start NNS_G2dLoadImage2DMapping
+NNS_G2dLoadImage2DMapping: ; 0x020B1528
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ movs r5, r2
+ mov r6, r1
+ mov r4, r3
+ ldr r0, [r7, #0x8]
+ beq _020B1590
+ cmp r5, #0x1
+ beq _020B155C
+ cmp r5, #0x2
+ beq _020B1578
+ b _020B1590
+_020B155C:
+ mov r3, #0x4000000
+ ldr r2, [r3, #0x0]
+ ldr r1, _020B1760 ; =0xFFCFFFEF
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+ b _020B1590
+_020B1578:
+ ldr r3, _020B1764 ; =0x04001000
+ ldr r1, _020B1760 ; =0xFFCFFFEF
+ ldr r2, [r3, #0x0]
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+_020B1590:
+ ldr r0, [r7, #0x14]
+ ldr r1, [r7, #0x10]
+ bl DC_FlushRange
+ cmp r5, #0x0
+ beq _020B15B8
+ cmp r5, #0x1
+ beq _020B15D4
+ cmp r5, #0x2
+ beq _020B15E8
+ b _020B15F8
+_020B15B8:
+ bl GX_BeginLoadTex
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadTex
+ bl GX_EndLoadTex
+ b _020B15F8
+_020B15D4:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadOBJ
+ b _020B15F8
+_020B15E8:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GXS_LoadOBJ
+_020B15F8:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _020B1718
+ ldrh r0, [r7, #0x2]
+ cmp r0, #0x10
+ bgt _020B1648
+ cmp r0, #0x10
+ bge _020B1674
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B1684
+ ; Jump table
+ b _020B1684 ; case 0
+ b _020B1654 ; case 1
+ b _020B165C ; case 2
+ b _020B1684 ; case 3
+ b _020B1664 ; case 4
+ b _020B1684 ; case 5
+ b _020B1684 ; case 6
+ b _020B1684 ; case 7
+ b _020B166C ; case 8
+_020B1648:
+ cmp r0, #0x20
+ beq _020B167C
+ b _020B1684
+_020B1654:
+ mov r0, #0x0
+ b _020B1688
+_020B165C:
+ mov r0, #0x1
+ b _020B1688
+_020B1664:
+ mov r0, #0x2
+ b _020B1688
+_020B166C:
+ mov r0, #0x3
+ b _020B1688
+_020B1674:
+ mov r0, #0x4
+ b _020B1688
+_020B167C:
+ mov r0, #0x5
+ b _020B1688
+_020B1684:
+ mov r0, #0x0
+_020B1688:
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x10
+ bgt _020B16D0
+ cmp r0, #0x10
+ bge _020B16FC
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B170C
+ ; Jump table
+ b _020B170C ; case 0
+ b _020B16DC ; case 1
+ b _020B16E4 ; case 2
+ b _020B170C ; case 3
+ b _020B16EC ; case 4
+ b _020B170C ; case 5
+ b _020B170C ; case 6
+ b _020B170C ; case 7
+ b _020B16F4 ; case 8
+_020B16D0:
+ cmp r0, #0x20
+ beq _020B1704
+ b _020B170C
+_020B16DC:
+ mov r0, #0x0
+ b _020B1710
+_020B16E4:
+ mov r0, #0x1
+ b _020B1710
+_020B16EC:
+ mov r0, #0x2
+ b _020B1710
+_020B16F4:
+ mov r0, #0x3
+ b _020B1710
+_020B16FC:
+ mov r0, #0x4
+ b _020B1710
+_020B1704:
+ mov r0, #0x5
+ b _020B1710
+_020B170C:
+ mov r0, #0x0
+_020B1710:
+ str r0, [r4, #0x10]
+ b _020B1728
+_020B1718:
+ ldrh r0, [r7, #0x2]
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ str r0, [r4, #0x10]
+_020B1728:
+ ldr r1, [r7, #0x4]
+ mov r0, #0x0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ mov r0, #0x1
+ str r0, [r4, #0x1c]
+ ldr r3, [r7, #0x8]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r6
+ str r3, [r4, #0x20]
+ bl NNS_G2dSetImageLocation
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B1760: .word 0xFFCFFFEF
+_020B1764: .word 0x04001000
+ arm_func_end NNS_G2dLoadImage2DMapping
+
+ arm_func_start NNS_G2dLoadImage1DMapping
+NNS_G2dLoadImage1DMapping: ; 0x020B1768
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ movs r5, r2
+ mov r6, r1
+ mov r4, r3
+ ldr r0, [r7, #0x8]
+ beq _020B17D0
+ cmp r5, #0x1
+ beq _020B179C
+ cmp r5, #0x2
+ beq _020B17B8
+ b _020B17D0
+_020B179C:
+ mov r3, #0x4000000
+ ldr r2, [r3, #0x0]
+ ldr r1, _020B19A0 ; =0xFFCFFFEF
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+ b _020B17D0
+_020B17B8:
+ ldr r3, _020B19A4 ; =0x04001000
+ ldr r1, _020B19A0 ; =0xFFCFFFEF
+ ldr r2, [r3, #0x0]
+ and r1, r2, r1
+ orr r0, r1, r0
+ str r0, [r3, #0x0]
+_020B17D0:
+ ldr r0, [r7, #0x14]
+ ldr r1, [r7, #0x10]
+ bl DC_FlushRange
+ cmp r5, #0x0
+ beq _020B17F8
+ cmp r5, #0x1
+ beq _020B1814
+ cmp r5, #0x2
+ beq _020B1828
+ b _020B1838
+_020B17F8:
+ bl GX_BeginLoadTex
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadTex
+ bl GX_EndLoadTex
+ b _020B1838
+_020B1814:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GX_LoadOBJ
+ b _020B1838
+_020B1828:
+ ldr r0, [r7, #0x14]
+ ldr r2, [r7, #0x10]
+ mov r1, r6
+ bl GXS_LoadOBJ
+_020B1838:
+ ldr r0, [r7, #0x8]
+ cmp r0, #0x0
+ bne _020B1958
+ ldrh r0, [r7, #0x2]
+ cmp r0, #0x10
+ bgt _020B1888
+ cmp r0, #0x10
+ bge _020B18B4
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B18C4
+ ; Jump table
+ b _020B18C4 ; case 0
+ b _020B1894 ; case 1
+ b _020B189C ; case 2
+ b _020B18C4 ; case 3
+ b _020B18A4 ; case 4
+ b _020B18C4 ; case 5
+ b _020B18C4 ; case 6
+ b _020B18C4 ; case 7
+ b _020B18AC ; case 8
+_020B1888:
+ cmp r0, #0x20
+ beq _020B18BC
+ b _020B18C4
+_020B1894:
+ mov r0, #0x0
+ b _020B18C8
+_020B189C:
+ mov r0, #0x1
+ b _020B18C8
+_020B18A4:
+ mov r0, #0x2
+ b _020B18C8
+_020B18AC:
+ mov r0, #0x3
+ b _020B18C8
+_020B18B4:
+ mov r0, #0x4
+ b _020B18C8
+_020B18BC:
+ mov r0, #0x5
+ b _020B18C8
+_020B18C4:
+ mov r0, #0x0
+_020B18C8:
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ cmp r0, #0x10
+ bgt _020B1910
+ cmp r0, #0x10
+ bge _020B193C
+ cmp r0, #0x8
+ addls pc, pc, r0, lsl #0x2
+ b _020B194C
+ ; Jump table
+ b _020B194C ; case 0
+ b _020B191C ; case 1
+ b _020B1924 ; case 2
+ b _020B194C ; case 3
+ b _020B192C ; case 4
+ b _020B194C ; case 5
+ b _020B194C ; case 6
+ b _020B194C ; case 7
+ b _020B1934 ; case 8
+_020B1910:
+ cmp r0, #0x20
+ beq _020B1944
+ b _020B194C
+_020B191C:
+ mov r0, #0x0
+ b _020B1950
+_020B1924:
+ mov r0, #0x1
+ b _020B1950
+_020B192C:
+ mov r0, #0x2
+ b _020B1950
+_020B1934:
+ mov r0, #0x3
+ b _020B1950
+_020B193C:
+ mov r0, #0x4
+ b _020B1950
+_020B1944:
+ mov r0, #0x5
+ b _020B1950
+_020B194C:
+ mov r0, #0x0
+_020B1950:
+ str r0, [r4, #0x10]
+ b _020B1968
+_020B1958:
+ ldrh r0, [r7, #0x2]
+ str r0, [r4, #0xc]
+ ldrh r0, [r7, #0x0]
+ str r0, [r4, #0x10]
+_020B1968:
+ ldr r1, [r7, #0x4]
+ mov r0, #0x0
+ str r1, [r4, #0x14]
+ str r0, [r4, #0x18]
+ mov r0, #0x1
+ str r0, [r4, #0x1c]
+ ldr r3, [r7, #0x8]
+ mov r0, r4
+ mov r1, r5
+ mov r2, r6
+ str r3, [r4, #0x20]
+ bl NNS_G2dSetImageLocation
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B19A0: .word 0xFFCFFFEF
+_020B19A4: .word 0x04001000
+ arm_func_end NNS_G2dLoadImage1DMapping
+
+ arm_func_start NNS_G2dIsImagePaletteReadyToUse
+NNS_G2dIsImagePaletteReadyToUse: ; 0x020B19A8
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [r0, #0x8]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dIsImagePaletteReadyToUse
+
+ arm_func_start NNS_G2dGetImagePaletteLocation
+NNS_G2dGetImagePaletteLocation: ; 0x020B19C4
+ add r0, r0, r1, lsl #0x2
+ ldr r0, [r0, #0x8]
+ bx lr
+ arm_func_end NNS_G2dGetImagePaletteLocation
+
+ arm_func_start NNS_G2dSetImagePaletteLocation
+NNS_G2dSetImagePaletteLocation: ; 0x020B19D0
+ add r0, r0, r1, lsl #0x2
+ str r2, [r0, #0x8]
+ bx lr
+ arm_func_end NNS_G2dSetImagePaletteLocation
+
+ arm_func_start NNS_G2dInitImagePaletteProxy
+NNS_G2dInitImagePaletteProxy: ; 0x020B19DC
+ mov r3, #0x0
+ mvn r2, #0x0
+_020B19E4:
+ add r1, r0, r3, lsl #0x2
+ add r3, r3, #0x1
+ str r2, [r1, #0x8]
+ cmp r3, #0x3
+ blt _020B19E4
+ bx lr
+ arm_func_end NNS_G2dInitImagePaletteProxy
+
+ arm_func_start NNS_G2dIsImageReadyToUse
+NNS_G2dIsImageReadyToUse: ; 0x020B19FC
+ ldr r1, [r0, r1, lsl #0x2]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dIsImageReadyToUse
+
+ arm_func_start NNS_G2dGetImageLocation
+NNS_G2dGetImageLocation: ; 0x020B1A14
+ ldr r0, [r0, r1, lsl #0x2]
+ bx lr
+ arm_func_end NNS_G2dGetImageLocation
+
+ arm_func_start NNS_G2dSetImageLocation
+NNS_G2dSetImageLocation: ; 0x020B1A1C
+ str r2, [r0, r1, lsl #0x2]
+ bx lr
+ arm_func_end NNS_G2dSetImageLocation
+
+ arm_func_start NNS_G2dInitImageProxy
+NNS_G2dInitImageProxy: ; 0x020B1A24
+ mov r2, #0x0
+ mvn r1, #0x0
+_020B1A2C:
+ str r1, [r0, r2, lsl #0x2]
+ add r2, r2, #0x1
+ cmp r2, #0x3
+ blt _020B1A2C
+ bx lr
+ arm_func_end NNS_G2dInitImageProxy
diff --git a/arm9/asm/NNS_G2D_g2d_load.s b/arm9/asm/NNS_G2D_g2d_load.s
new file mode 100644
index 00000000..340d8b17
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_load.s
@@ -0,0 +1,55 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dUnpackUserExCellAttrBank
+NNSi_G2dUnpackUserExCellAttrBank: ; 0x020B01B0
+ ldr r1, [r0, #0x4]
+ mov r12, #0x0
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ ldrh r1, [r0, #0x0]
+ cmp r1, #0x0
+ bxls lr
+_020B01CC:
+ ldr r3, [r0, #0x4]
+ add r1, r12, #0x1
+ ldr r2, [r3, r12, lsl #0x2]
+ mov r1, r1, lsl #0x10
+ add r2, r0, r2
+ str r2, [r3, r12, lsl #0x2]
+ ldrh r2, [r0, #0x0]
+ mov r12, r1, lsr #0x10
+ cmp r12, r2
+ blo _020B01CC
+ bx lr
+ arm_func_end NNSi_G2dUnpackUserExCellAttrBank
+
+ arm_func_start NNS_G2dFindBinaryBlock
+NNS_G2dFindBinaryBlock: ; 0x020B01F8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r2, [r0, #0xc]
+ ldrh r12, [r0, #0xe]
+ mov lr, #0x0
+ add r0, r0, r2
+ cmp r12, #0x0
+ bls _020B0244
+_020B0218:
+ ldr r2, [r0, #0x0]
+ cmp r2, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ add r2, lr, #0x1
+ mov r2, r2, lsl #0x10
+ ldr r3, [r0, #0x4]
+ mov lr, r2, lsr #0x10
+ cmp lr, r12
+ add r0, r0, r3
+ blo _020B0218
+_020B0244:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G2dFindBinaryBlock
diff --git a/arm9/asm/NNS_G2D_g2d_multicellan.s b/arm9/asm/NNS_G2D_g2d_multicellan.s
new file mode 100644
index 00000000..8e2206df
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_multicellan.s
@@ -0,0 +1,490 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dInitMCAnimation
+NNS_G2dInitMCAnimation: ; 0x020B20C8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r6, #0x0
+ str r6, [r0, #0x38]
+ ldr r7, [sp, #0x30]
+ str r6, [r0, #0x30]
+ mov r10, r1
+ str r7, [r0, #0x34]
+ str r0, [sp, #0x0]
+ movs r8, r3
+ mov r9, r2
+ str r10, [r0, #0x3c]
+ ldr r11, [sp, #0x34]
+ beq _020B215C
+ mov r0, #0x1
+ str r6, [sp, #0x8]
+ str r0, [sp, #0x4]
+_020B210C:
+ mov r0, #0x28
+ mul r4, r6, r0
+ ldr r1, [sp, #0x4]
+ add r0, r10, r4
+ bl NNSi_G2dInitializeNode
+ mov r0, #0x54
+ mla r5, r6, r0, r9
+ ldr r1, [sp, #0x8]
+ mov r0, r7
+ str r5, [r10, r4]
+ bl NNS_G2dGetAnimSequenceByIdx
+ mov r1, r0
+ mov r0, r5
+ mov r2, r11
+ bl NNS_G2dInitCellAnimation
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ cmp r6, r8
+ blo _020B210C
+_020B215C:
+ ldr r0, [sp, #0x0]
+ bl NNS_G2dInitAnimCtrl
+ ldr r0, [sp, #0x0]
+ ldr r3, [sp, #0x38]
+ ldr r2, [sp, #0x0]
+ add r0, r0, #0x44
+ mov r1, #0x1
+ str r3, [r2, #0x40]
+ bl NNSi_G2dSrtcInitControl
+ ldr r0, [sp, #0x0]
+ mov r1, #0x0
+ strh r1, [r0, #0x2c]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end NNS_G2dInitMCAnimation
+
+ arm_func_start NNS_G2dSetMCAnimationCurrentFrame
+NNS_G2dSetMCAnimationCurrentFrame: ; 0x020B2194
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl NNS_G2dSetAnimCtrlCurrentFrame
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ mov r0, r7
+ bl NNS_G2dGetAnimCtrlCurrentElement
+ mov r4, r0
+ ldrh r1, [r4, #0x0]
+ ldr r0, [r7, #0x40]
+ bl NNS_G2dGetMultiCellDataByIdx
+ ldr r1, [r7, #0x18]
+ mov r6, r0
+ ldr r1, [r1, #0x4]
+ add r0, r7, #0x44
+ and r5, r1, #0xff
+ mov r1, #0x1
+ bl NNSi_G2dSrtcInitControl
+ cmp r5, #0x0
+ beq _020B2234
+ cmp r5, #0x2
+ bne _020B2208
+ ldrsh r1, [r4, #0x4]
+ ldrsh r2, [r4, #0x6]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetTrans
+ b _020B2234
+_020B2208:
+ ldr r1, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetSRTScale
+ ldrh r1, [r4, #0x2]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetSRTRotZ
+ ldrsh r1, [r4, #0xc]
+ ldrsh r2, [r4, #0xe]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetTrans
+_020B2234:
+ ldrh r2, [r7, #0x2c]
+ mov r1, r6
+ add r0, r7, #0x30
+ bl SetMCDataToMCInstanceImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G2dSetMCAnimationCurrentFrame
+
+ arm_func_start NNS_G2dTickMCAnimation
+NNS_G2dTickMCAnimation: ; 0x020B224C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r2, [r4, #0x0]
+ mov r6, r1
+ ldrh r5, [r2, #0x4]
+ bl NNS_G2dTickAnimCtrl
+ cmp r0, #0x0
+ beq _020B2318
+ ldrh r1, [r4, #0x2c]
+ mov r0, r4
+ add r1, r1, r5
+ strh r1, [r4, #0x2c]
+ bl NNS_G2dGetAnimCtrlCurrentElement
+ mov r5, r0
+ ldrh r1, [r5, #0x0]
+ ldr r0, [r4, #0x40]
+ bl NNS_G2dGetMultiCellDataByIdx
+ ldr r1, [r4, #0x18]
+ mov r7, r0
+ ldr r1, [r1, #0x4]
+ add r0, r4, #0x44
+ and r6, r1, #0xff
+ mov r1, #0x1
+ bl NNSi_G2dSrtcInitControl
+ cmp r6, #0x0
+ beq _020B2300
+ cmp r6, #0x2
+ bne _020B22D4
+ ldrsh r1, [r5, #0x4]
+ ldrsh r2, [r5, #0x6]
+ add r0, r4, #0x44
+ bl NNSi_G2dSrtcSetTrans
+ b _020B2300
+_020B22D4:
+ ldr r1, [r5, #0x4]
+ ldr r2, [r5, #0x8]
+ add r0, r4, #0x44
+ bl NNSi_G2dSrtcSetSRTScale
+ ldrh r1, [r5, #0x2]
+ add r0, r4, #0x44
+ bl NNSi_G2dSrtcSetSRTRotZ
+ ldrsh r1, [r5, #0xc]
+ ldrsh r2, [r5, #0xe]
+ add r0, r4, #0x44
+ bl NNSi_G2dSrtcSetTrans
+_020B2300:
+ ldrh r2, [r4, #0x2c]
+ mov r1, r7
+ add r0, r4, #0x30
+ bl SetMCDataToMCInstanceImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B2318:
+ mov r1, r6
+ add r0, r4, #0x30
+ bl NNS_G2dTickMCInstance
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G2dTickMCAnimation
+
+ arm_func_start NNS_G2dTickMCInstance
+NNS_G2dTickMCInstance: ; 0x020B232C
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ ldr r0, [r7, #0x8]
+ mov r6, r1
+ cmp r0, #0x1
+ bne _020B238C
+ ldr r0, [r7, #0x0]
+ ldr r4, [r7, #0xc]
+ ldrh r0, [r0, #0x2]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r8,pc}
+ mov r8, #0x58
+_020B2360:
+ mla r0, r5, r8, r4
+ mov r1, r6
+ bl NNS_G2dTickCellAnimation
+ ldr r1, [r7, #0x0]
+ add r0, r5, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x2]
+ mov r5, r0, lsr #0x10
+ cmp r5, r1
+ blo _020B2360
+ ldmia sp!, {r4-r8,pc}
+_020B238C:
+ ldr r0, [r7, #0x0]
+ ldr r4, [r7, #0xc]
+ ldrh r0, [r0, #0x0]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r8,pc}
+ mov r8, #0x28
+_020B23A8:
+ mul r0, r5, r8
+ ldr r0, [r4, r0]
+ mov r1, r6
+ bl NNS_G2dTickCellAnimation
+ ldr r1, [r7, #0x0]
+ add r0, r5, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r5, r0, lsr #0x10
+ cmp r5, r1
+ blo _020B23A8
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNS_G2dTickMCInstance
+
+ arm_func_start NNS_G2dGetMCBankNumNodesRequired
+NNS_G2dGetMCBankNumNodesRequired: ; 0x020B23D8
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldrh r0, [r5, #0x0]
+ mov r4, #0x0
+ mov r6, r4
+ cmp r0, #0x0
+ bls _020B2424
+_020B23F4:
+ mov r0, r5
+ mov r1, r6
+ bl NNS_G2dGetMultiCellDataByIdx
+ ldrh r0, [r0, #0x0]
+ ldrh r1, [r5, #0x0]
+ cmp r0, r4
+ movhi r4, r0
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ cmp r6, r1
+ blo _020B23F4
+_020B2424:
+ mov r0, r4
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G2dGetMCBankNumNodesRequired
+
+ arm_func_start NNS_G2dSetAnimSequenceToMCAnimation
+NNS_G2dSetAnimSequenceToMCAnimation: ; 0x020B242C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ bl NNS_G2dBindAnimCtrl
+ mov r1, #0x0
+ mov r0, r7
+ strh r1, [r7, #0x2c]
+ bl NNS_G2dGetAnimCtrlCurrentElement
+ mov r4, r0
+ ldrh r1, [r4, #0x0]
+ ldr r0, [r7, #0x40]
+ bl NNS_G2dGetMultiCellDataByIdx
+ ldr r1, [r7, #0x18]
+ mov r6, r0
+ ldr r1, [r1, #0x4]
+ add r0, r7, #0x44
+ and r5, r1, #0xff
+ mov r1, #0x1
+ bl NNSi_G2dSrtcInitControl
+ cmp r5, #0x0
+ beq _020B24C8
+ cmp r5, #0x2
+ bne _020B249C
+ ldrsh r1, [r4, #0x4]
+ ldrsh r2, [r4, #0x6]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetTrans
+ b _020B24C8
+_020B249C:
+ ldr r1, [r4, #0x4]
+ ldr r2, [r4, #0x8]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetSRTScale
+ ldrh r1, [r4, #0x2]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetSRTRotZ
+ ldrsh r1, [r4, #0xc]
+ ldrsh r2, [r4, #0xe]
+ add r0, r7, #0x44
+ bl NNSi_G2dSrtcSetTrans
+_020B24C8:
+ ldrh r2, [r7, #0x2c]
+ mov r1, r6
+ add r0, r7, #0x30
+ bl SetMCDataToMCInstanceImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G2dSetAnimSequenceToMCAnimation
+
+ arm_func_start SetMCDataToMCInstanceImpl_
+SetMCDataToMCInstanceImpl_: ; 0x020B24E0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r1
+ str r0, [sp, #0x0]
+ str r10, [r0, #0x0]
+ ldr r0, [r0, #0x8]
+ mov r9, r2
+ cmp r0, #0x1
+ bne _020B2654
+ ldrh r1, [r10, #0x2]
+ ldr r0, [sp, #0x0]
+ mov r4, #0x0
+ ldr r8, [r0, #0xc]
+ cmp r1, #0x0
+ bls _020B2544
+ mov r3, r4
+ mov r0, #0x58
+_020B2524:
+ mla r1, r4, r0, r8
+ str r3, [r1, #0x54]
+ add r1, r4, #0x1
+ mov r1, r1, lsl #0x10
+ ldrh r2, [r10, #0x2]
+ mov r4, r1, lsr #0x10
+ cmp r4, r2
+ blo _020B2524
+_020B2544:
+ ldrh r0, [r10, #0x0]
+ mov r5, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+ str r5, [sp, #0x4]
+ mov r11, #0x1
+_020B2560:
+ ldr r0, [r10, #0x4]
+ mov r1, #0x58
+ add r7, r0, r5, lsl #0x3
+ ldrh r0, [r7, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x10
+ mla r6, r0, r1, r8
+ ldr r0, [r6, #0x54]
+ cmp r0, #0x0
+ bne _020B2634
+ ldr r0, [sp, #0x0]
+ ldrh r1, [r7, #0x0]
+ ldr r0, [r0, #0x4]
+ bl NNS_G2dGetAnimSequenceByIdx
+ mov r4, r0
+ mov r0, r6
+ mov r1, r4
+ bl NNS_G2dSetCellAnimationSequence
+ str r11, [r6, #0x8]
+ ldrh r0, [r7, #0x6]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _020B2630
+ ldrh r1, [r4, #0x0]
+ ldr r7, [sp, #0x4]
+ mov r3, r7
+ cmp r1, #0x0
+ bls _020B25F0
+ ldr r2, [r4, #0xc]
+_020B25D8:
+ add r0, r2, r3, lsl #0x3
+ ldrh r0, [r0, #0x4]
+ add r3, r3, #0x1
+ cmp r3, r1
+ add r7, r7, r0
+ blo _020B25D8
+_020B25F0:
+ mov r0, r6
+ bl NNSi_G2dIsAnimCtrlLoopAnim
+ cmp r0, #0x0
+ beq _020B261C
+ mov r0, r9
+ mov r1, r7
+ bl _u32_div_f
+ mov r0, r6
+ mov r1, r1, lsl #0xc
+ bl NNS_G2dTickCellAnimation
+ b _020B2630
+_020B261C:
+ cmp r9, r7
+ movcc r7, r9
+ mov r0, r6
+ mov r1, r7, lsl #0xc
+ bl NNS_G2dTickCellAnimation
+_020B2630:
+ str r11, [r6, #0x54]
+_020B2634:
+ add r0, r5, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r10, #0x0]
+ mov r5, r0, lsr #0x10
+ cmp r5, r1
+ blo _020B2560
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+_020B2654:
+ ldrh r1, [r10, #0x0]
+ ldr r0, [sp, #0x0]
+ mov r4, #0x0
+ cmp r1, #0x0
+ ldr r11, [r0, #0xc]
+ addls sp, sp, #0x14
+ ldmlsia sp!, {r4-r11,pc}
+ mov r0, #0x1
+ str r4, [sp, #0xc]
+ str r0, [sp, #0x8]
+_020B267C:
+ mov r0, #0x28
+ mul r2, r4, r0
+ ldr r3, [r10, #0x4]
+ mov r0, r4, lsl #0x3
+ ldrh r1, [r3, r0]
+ ldr r0, [sp, #0x0]
+ ldr r6, [r11, r2]
+ ldr r0, [r0, #0x4]
+ add r7, r3, r4, lsl #0x3
+ bl NNS_G2dGetAnimSequenceByIdx
+ mov r5, r0
+ mov r0, r6
+ mov r1, r5
+ bl NNS_G2dSetCellAnimationSequence
+ ldr r0, [sp, #0x8]
+ str r0, [r6, #0x8]
+ ldrh r0, [r7, #0x6]
+ and r0, r0, #0xf
+ cmp r0, #0x1
+ bne _020B2740
+ ldrh r1, [r5, #0x0]
+ ldr r8, [sp, #0xc]
+ mov r0, r8
+ cmp r1, #0x0
+ bls _020B2700
+ ldr r3, [r5, #0xc]
+_020B26E4:
+ add r1, r3, r0, lsl #0x3
+ ldrh r2, [r1, #0x4]
+ add r0, r0, #0x1
+ ldrh r1, [r5, #0x0]
+ add r8, r8, r2
+ cmp r0, r1
+ blo _020B26E4
+_020B2700:
+ mov r0, r6
+ bl NNSi_G2dIsAnimCtrlLoopAnim
+ cmp r0, #0x0
+ beq _020B272C
+ mov r0, r9
+ mov r1, r8
+ bl _u32_div_f
+ mov r0, r6
+ mov r1, r1, lsl #0xc
+ bl NNS_G2dTickCellAnimation
+ b _020B2740
+_020B272C:
+ cmp r9, r8
+ movcc r8, r9
+ mov r0, r6
+ mov r1, r8, lsl #0xc
+ bl NNS_G2dTickCellAnimation
+_020B2740:
+ mov r0, #0x28
+ mla r3, r4, r0, r11
+ ldr r0, [sp, #0x8]
+ str r0, [r3, #0x8]
+ ldrsh r1, [r7, #0x2]
+ ldrsh r2, [r7, #0x4]
+ add r0, r3, #0xc
+ bl NNSi_G2dSrtcSetTrans
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r10, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B267C
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end SetMCDataToMCInstanceImpl_
diff --git a/arm9/asm/NNS_G2D_g2d_nan_load.s b/arm9/asm/NNS_G2D_g2d_nan_load.s
new file mode 100644
index 00000000..6e8b6c27
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_nan_load.s
@@ -0,0 +1,155 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dGetAnimSequenceByIdx
+NNS_G2dGetAnimSequenceByIdx: ; 0x020AFC04
+ ldrh r2, [r0, #0x0]
+ cmp r2, r1
+ ldrhi r0, [r0, #0x4]
+ addhi r0, r0, r1, lsl #0x4
+ movls r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dGetAnimSequenceByIdx
+
+ arm_func_start NNS_G2dUnpackNAN
+NNS_G2dUnpackNAN: ; 0x020AFC1C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x4]
+ mov r6, #0x0
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, r0
+ str r1, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ add r1, r1, r0
+ str r1, [r0, #0xc]
+ ldrh r1, [r0, #0x0]
+ ldr r4, [r0, #0x4]
+ ldr lr, [r0, #0x8]
+ cmp r1, #0x0
+ ldr r12, [r0, #0xc]
+ bls _020AFCCC
+ mov r1, r6
+_020AFC68:
+ add r2, r4, r6, lsl #0x4
+ ldr r5, [r2, #0xc]
+ mov r3, r6, lsl #0x4
+ add r5, lr, r5
+ str r5, [r2, #0xc]
+ ldrh r7, [r4, r3]
+ mov r5, r1
+ cmp r7, #0x0
+ bls _020AFCB4
+_020AFC8C:
+ ldr r9, [r2, #0xc]
+ add r7, r5, #0x1
+ ldr r8, [r9, r5, lsl #0x3]
+ mov r7, r7, lsl #0x10
+ add r8, r12, r8
+ str r8, [r9, r5, lsl #0x3]
+ ldrh r8, [r4, r3]
+ mov r5, r7, lsr #0x10
+ cmp r5, r8
+ blo _020AFC8C
+_020AFCB4:
+ add r2, r6, #0x1
+ mov r2, r2, lsl #0x10
+ ldrh r3, [r0, #0x0]
+ mov r6, r2, lsr #0x10
+ cmp r6, r3
+ blo _020AFC68
+_020AFCCC:
+ ldr r1, [r0, #0x14]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,pc}
+ add r1, r1, r0
+ str r1, [r0, #0x14]
+ ldr r1, [r0, #0x14]
+ mov r12, #0x0
+ add r2, r1, #0x8
+ ldr r0, [r2, #0x4]
+ add r0, r0, r2
+ str r0, [r2, #0x4]
+ ldrh r0, [r1, #0x8]
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+ mov r0, r12
+ mov r6, r12
+_020AFD14:
+ ldr r5, [r2, #0x4]
+ mov r3, r6
+ add r1, r5, r0
+ ldr r4, [r1, #0x4]
+ add r4, r4, r2
+ str r4, [r1, #0x4]
+ ldr r4, [r1, #0x8]
+ add r4, r4, r2
+ str r4, [r1, #0x8]
+ ldrh r4, [r5, r0]
+ cmp r4, #0x0
+ bls _020AFD6C
+ mov r7, r6
+_020AFD48:
+ ldr r5, [r1, #0x8]
+ add r3, r3, #0x1
+ ldr r4, [r5, r7]
+ add r4, r4, r2
+ str r4, [r5, r7]
+ ldrh r4, [r1, #0x0]
+ add r7, r7, #0x4
+ cmp r3, r4
+ blo _020AFD48
+_020AFD6C:
+ ldrh r1, [r2, #0x0]
+ add r12, r12, #0x1
+ add r0, r0, #0xc
+ cmp r12, r1
+ blo _020AFD14
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end NNS_G2dUnpackNAN
+
+ arm_func_start NNS_G2dGetUnpackedMCAnimBank
+NNS_G2dGetUnpackedMCAnimBank: ; 0x020AFD88
+ ldr ip, _020AFD90 ; =GetUnpackedAnimBankImpl_
+ bx r12
+ .balign 4
+_020AFD90: .word GetUnpackedAnimBankImpl_
+ arm_func_end NNS_G2dGetUnpackedMCAnimBank
+
+ arm_func_start NNS_G2dGetUnpackedAnimBank
+NNS_G2dGetUnpackedAnimBank: ; 0x020AFD94
+ ldr ip, _020AFD9C ; =GetUnpackedAnimBankImpl_
+ bx r12
+ .balign 4
+_020AFD9C: .word GetUnpackedAnimBankImpl_
+ arm_func_end NNS_G2dGetUnpackedAnimBank
+
+ arm_func_start GetUnpackedAnimBankImpl_
+GetUnpackedAnimBankImpl_: ; 0x020AFDA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020AFDE4 ; =0x41424E4B
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNS_G2dUnpackNAN
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AFDE4: .word 0x41424E4B
+ arm_func_end GetUnpackedAnimBankImpl_
diff --git a/arm9/asm/NNS_G2D_g2d_ncg_load.s b/arm9/asm/NNS_G2D_g2d_ncg_load.s
new file mode 100644
index 00000000..95535da5
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_ncg_load.s
@@ -0,0 +1,66 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dUnpackBGNCG
+NNS_G2dUnpackBGNCG: ; 0x020B0020
+ ldr r1, [r0, #0x14]
+ add r1, r1, r0
+ str r1, [r0, #0x14]
+ bx lr
+ arm_func_end NNS_G2dUnpackBGNCG
+
+ arm_func_start NNS_G2dGetUnpackedBGCharacterData
+NNS_G2dGetUnpackedBGCharacterData: ; 0x020B0030
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B0074 ; =0x43484152
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNS_G2dUnpackBGNCG
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B0074: .word 0x43484152
+ arm_func_end NNS_G2dGetUnpackedBGCharacterData
+
+ arm_func_start NNS_G2dUnpackNCG
+NNS_G2dUnpackNCG: ; 0x020B0078
+ ldr r1, [r0, #0x14]
+ add r1, r1, r0
+ str r1, [r0, #0x14]
+ bx lr
+ arm_func_end NNS_G2dUnpackNCG
+
+ arm_func_start NNS_G2dGetUnpackedCharacterData
+NNS_G2dGetUnpackedCharacterData: ; 0x020B0088
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B00CC ; =0x43484152
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNS_G2dUnpackNCG
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B00CC: .word 0x43484152
+ arm_func_end NNS_G2dGetUnpackedCharacterData
diff --git a/arm9/asm/NNS_G2D_g2d_ncl_load.s b/arm9/asm/NNS_G2D_g2d_ncl_load.s
new file mode 100644
index 00000000..1fc246b2
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_ncl_load.s
@@ -0,0 +1,66 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dUnpackNCL
+NNS_G2dUnpackNCL: ; 0x020B00D0
+ ldr r1, [r0, #0xc]
+ add r1, r1, r0
+ str r1, [r0, #0xc]
+ bx lr
+ arm_func_end NNS_G2dUnpackNCL
+
+ arm_func_start NNSi_G2dUnpackNCLCmpInfo
+NNSi_G2dUnpackNCLCmpInfo: ; 0x020B00E0
+ ldr r1, [r0, #0x4]
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ bx lr
+ arm_func_end NNSi_G2dUnpackNCLCmpInfo
+
+ arm_func_start NNS_G2dGetUnpackedPaletteCompressInfo
+NNS_G2dGetUnpackedPaletteCompressInfo: ; 0x020B00F0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B0134 ; =0x50434D50
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNSi_G2dUnpackNCLCmpInfo
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B0134: .word 0x50434D50
+ arm_func_end NNS_G2dGetUnpackedPaletteCompressInfo
+
+ arm_func_start NNS_G2dGetUnpackedPaletteData
+NNS_G2dGetUnpackedPaletteData: ; 0x020B0138
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B017C ; =0x504C5454
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNS_G2dUnpackNCL
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B017C: .word 0x504C5454
+ arm_func_end NNS_G2dGetUnpackedPaletteData
diff --git a/arm9/asm/NNS_G2D_g2d_nft_load.s b/arm9/asm/NNS_G2D_g2d_nft_load.s
new file mode 100644
index 00000000..3f9c0e77
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_nft_load.s
@@ -0,0 +1,180 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dUnpackNFT
+NNSi_G2dUnpackNFT: ; 0x020B7468
+ stmdb sp!, {r4-r6,lr}
+ ldrh r2, [r0, #0xc]
+ ldrh r3, [r0, #0xe]
+ mov r1, #0x0
+ add r2, r0, r2
+ cmp r3, #0x0
+ ldmleia sp!, {r4-r6,pc}
+ ldr r3, _020B7548 ; =0x46494E46
+ ldr ip, _020B754C ; =0x43574448
+ ldr r4, _020B7550 ; =0x434D4150
+ ldr lr, _020B7554 ; =0x43474C50
+_020B7494:
+ ldr r5, [r2, #0x0]
+ cmp r5, r4
+ bhi _020B74B0
+ cmp r5, r4
+ bhs _020B7518
+ cmp r5, lr
+ b _020B752C
+_020B74B0:
+ cmp r5, r12
+ bhi _020B74C4
+ cmp r5, r12
+ beq _020B7500
+ b _020B752C
+_020B74C4:
+ cmp r5, r3
+ bne _020B752C
+ add r6, r2, #0x8
+ ldr r5, [r6, #0x8]
+ add r5, r5, r0
+ str r5, [r6, #0x8]
+ ldr r5, [r6, #0xc]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0xc]
+ ldr r5, [r6, #0x10]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0x10]
+ b _020B752C
+_020B7500:
+ add r6, r2, #0x8
+ ldr r5, [r6, #0x4]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0x4]
+ b _020B752C
+_020B7518:
+ add r6, r2, #0x8
+ ldr r5, [r6, #0x8]
+ cmp r5, #0x0
+ addne r5, r5, r0
+ strne r5, [r6, #0x8]
+_020B752C:
+ ldrh r5, [r0, #0xe]
+ ldr r6, [r2, #0x4]
+ add r1, r1, #0x1
+ cmp r1, r5
+ add r2, r2, r6
+ blt _020B7494
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B7548: .word 0x46494E46
+_020B754C: .word 0x43574448
+_020B7550: .word 0x434D4150
+_020B7554: .word 0x43474C50
+ arm_func_end NNSi_G2dUnpackNFT
+
+ arm_func_start NNSi_G2dGetUnpackedFont
+NNSi_G2dGetUnpackedFont: ; 0x020B7558
+ stmdb sp!, {r4-r6,lr}
+ movs r6, r0
+ mov r5, r1
+ beq _020B75C8
+ cmp r6, #0x0
+ beq _020B7584
+ ldr r1, [r6, #0x0]
+ ldr r0, _020B76A8 ; =0x4E465452
+ cmp r1, r0
+ moveq r0, #0x1
+ beq _020B7588
+_020B7584:
+ mov r0, #0x0
+_020B7588:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B75CC
+ cmp r6, #0x0
+ beq _020B75B4
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x100
+ movcs r0, #0x1
+ bhs _020B75B8
+_020B75B4:
+ mov r0, #0x0
+_020B75B8:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ b _020B75CC
+_020B75C8:
+ mov r0, #0x0
+_020B75CC:
+ cmp r0, #0x0
+ movne r4, #0x0
+ bne _020B7654
+ cmp r6, #0x0
+ beq _020B7640
+ cmp r6, #0x0
+ beq _020B75FC
+ ldr r1, [r6, #0x0]
+ ldr r0, _020B76A8 ; =0x4E465452
+ cmp r1, r0
+ moveq r0, #0x1
+ beq _020B7600
+_020B75FC:
+ mov r0, #0x0
+_020B7600:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B7644
+ cmp r6, #0x0
+ beq _020B762C
+ ldrh r0, [r6, #0x6]
+ cmp r0, #0x1
+ movcs r0, #0x1
+ bhs _020B7630
+_020B762C:
+ mov r0, #0x0
+_020B7630:
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ b _020B7644
+_020B7640:
+ mov r0, #0x0
+_020B7644:
+ cmp r0, #0x0
+ movne r4, #0x1
+ bne _020B7654
+ bl OS_Terminate
+_020B7654:
+ mov r0, r6
+ bl NNSi_G2dUnpackNFT
+ ldr r1, _020B76AC ; =0x46494E46
+ mov r0, r6
+ bl NNS_G2dFindBinaryBlock
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r6,pc}
+ add r0, r0, #0x8
+ str r0, [r5, #0x0]
+ cmp r4, #0x0
+ beq _020B76A0
+ ldr r2, [r5, #0x0]
+ mov r1, #0x0
+ ldrsb r0, [r2, #0x6]
+ strb r0, [r2, #0x7]
+ ldr r0, [r5, #0x0]
+ strb r1, [r0, #0x6]
+_020B76A0:
+ add r0, r4, #0x1
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B76A8: .word 0x4E465452
+_020B76AC: .word 0x46494E46
+ arm_func_end NNSi_G2dGetUnpackedFont
diff --git a/arm9/asm/NNS_G2D_g2d_nmc_load.s b/arm9/asm/NNS_G2D_g2d_nmc_load.s
new file mode 100644
index 00000000..abe55e8e
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_nmc_load.s
@@ -0,0 +1,83 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dGetMultiCellDataByIdx
+NNS_G2dGetMultiCellDataByIdx: ; 0x020AFF34
+ ldrh r2, [r0, #0x0]
+ cmp r1, r2
+ ldrcc r0, [r0, #0x4]
+ addcc r0, r0, r1, lsl #0x3
+ movcs r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dGetMultiCellDataByIdx
+
+ arm_func_start NNS_G2dUnpackNMC
+NNS_G2dUnpackNMC: ; 0x020AFF4C
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0x4]
+ mov r4, #0x0
+ add r1, r1, r0
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, r0
+ str r1, [r0, #0x8]
+ ldrh r1, [r0, #0x0]
+ ldr lr, [r0, #0x4]
+ cmp r1, #0x0
+ bls _020AFFA8
+_020AFF7C:
+ add r3, lr, r4, lsl #0x3
+ ldr r12, [r0, #0x8]
+ ldr r2, [r3, #0x4]
+ add r1, r4, #0x1
+ add r2, r12, r2
+ str r2, [r3, #0x4]
+ mov r1, r1, lsl #0x10
+ ldrh r2, [r0, #0x0]
+ mov r4, r1, lsr #0x10
+ cmp r4, r2
+ blo _020AFF7C
+_020AFFA8:
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,pc}
+ add r1, r1, r0
+ str r1, [r0, #0x10]
+ ldr r0, [r0, #0x10]
+ bl UnpackExtendedData_
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dUnpackNMC
+
+ arm_func_start UnpackExtendedData_
+UnpackExtendedData_: ; 0x020AFFC8
+ ldr ip, _020AFFD4 ; =NNSi_G2dUnpackUserExCellAttrBank
+ add r0, r0, #0x8
+ bx r12
+ .balign 4
+_020AFFD4: .word NNSi_G2dUnpackUserExCellAttrBank
+ arm_func_end UnpackExtendedData_
+
+ arm_func_start NNS_G2dGetUnpackedMultiCellBank
+NNS_G2dGetUnpackedMultiCellBank: ; 0x020AFFD8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020B001C ; =0x4D43424B
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNS_G2dUnpackNMC
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B001C: .word 0x4D43424B
+ arm_func_end NNS_G2dGetUnpackedMultiCellBank
diff --git a/arm9/asm/NNS_G2D_g2d_nob_load.s b/arm9/asm/NNS_G2D_g2d_nob_load.s
new file mode 100644
index 00000000..319a6a4a
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_nob_load.s
@@ -0,0 +1,112 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dUnpackNCE
+NNS_G2dUnpackNCE: ; 0x020AFDE8
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r1, [r5, #0x4]
+ add r1, r1, r5
+ str r1, [r5, #0x4]
+ bl GetPtrOamArrayHead_
+ ldrh r1, [r5, #0x0]
+ mov r4, r0
+ mov r6, #0x0
+ cmp r1, #0x0
+ bls _020AFE44
+_020AFE14:
+ mov r0, r5
+ mov r1, r6
+ bl NNS_G2dGetCellDataByIdx
+ ldr r2, [r0, #0x4]
+ add r1, r6, #0x1
+ add r2, r2, r4
+ str r2, [r0, #0x4]
+ mov r0, r1, lsl #0x10
+ ldrh r1, [r5, #0x0]
+ mov r6, r0, lsr #0x10
+ cmp r6, r1
+ blo _020AFE14
+_020AFE44:
+ ldr r0, [r5, #0xc]
+ cmp r0, #0x0
+ beq _020AFE6C
+ add r0, r0, r5
+ str r0, [r5, #0xc]
+ ldr r1, [r5, #0xc]
+ ldr r0, [r1, #0x4]
+ add r0, r0, r1
+ str r0, [r1, #0x4]
+ str r1, [r5, #0xc]
+_020AFE6C:
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ add r0, r0, r5
+ str r0, [r5, #0x14]
+ ldr r0, [r5, #0x14]
+ bl UnPackExtendedData_
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G2dUnpackNCE
+
+ arm_func_start NNS_G2dGetCellDataByIdx
+NNS_G2dGetCellDataByIdx: ; 0x020AFE8C
+ ldrh r2, [r0, #0x0]
+ cmp r1, r2
+ movcs r0, #0x0
+ bxcs lr
+ ldrh r2, [r0, #0x2]
+ ands r2, r2, #0x1
+ ldrne r0, [r0, #0x4]
+ addne r0, r0, r1, lsl #0x4
+ ldreq r0, [r0, #0x4]
+ addeq r0, r0, r1, lsl #0x3
+ bx lr
+ arm_func_end NNS_G2dGetCellDataByIdx
+
+ arm_func_start NNS_G2dGetUnpackedCellBank
+NNS_G2dGetUnpackedCellBank: ; 0x020AFEB8
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldr r1, _020AFEFC ; =0x4345424B
+ bl NNS_G2dFindBinaryBlock
+ movs r4, r0
+ moveq r0, #0x0
+ addeq sp, sp, #0x4
+ streq r0, [r5, #0x0]
+ ldmeqia sp!, {r4-r5,pc}
+ add r0, r4, #0x8
+ bl NNS_G2dUnpackNCE
+ add r0, r4, #0x8
+ str r0, [r5, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AFEFC: .word 0x4345424B
+ arm_func_end NNS_G2dGetUnpackedCellBank
+
+ arm_func_start UnPackExtendedData_
+UnPackExtendedData_: ; 0x020AFF00
+ ldr ip, _020AFF0C ; =NNSi_G2dUnpackUserExCellAttrBank
+ add r0, r0, #0x8
+ bx r12
+ .balign 4
+_020AFF0C: .word NNSi_G2dUnpackUserExCellAttrBank
+ arm_func_end UnPackExtendedData_
+
+ arm_func_start GetPtrOamArrayHead_
+GetPtrOamArrayHead_: ; 0x020AFF10
+ ldrh r1, [r0, #0x2]
+ ands r1, r1, #0x1
+ ldrneh r1, [r0, #0x0]
+ ldrne r0, [r0, #0x4]
+ addne r0, r0, r1, lsl #0x4
+ ldreqh r1, [r0, #0x0]
+ ldreq r0, [r0, #0x4]
+ addeq r0, r0, r1, lsl #0x3
+ bx lr
+ arm_func_end GetPtrOamArrayHead_
diff --git a/arm9/asm/NNS_G2D_g2d_node.s b/arm9/asm/NNS_G2D_g2d_node.s
new file mode 100644
index 00000000..eb4e2497
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_node.s
@@ -0,0 +1,18 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dInitializeNode
+NNSi_G2dInitializeNode: ; 0x020B1AD4
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+ mov r1, #0x1
+ str r1, [r0, #0x8]
+ ldr ip, _020B1AF4 ; =NNSi_G2dSrtcInitControl
+ add r0, r0, #0xc
+ bx r12
+ .balign 4
+_020B1AF4: .word NNSi_G2dSrtcInitControl
+ arm_func_end NNSi_G2dInitializeNode
diff --git a/arm9/asm/NNS_G2D_g2d_nsc_load.s b/arm9/asm/NNS_G2D_g2d_nsc_load.s
new file mode 100644
index 00000000..4f2bb65c
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_nsc_load.s
@@ -0,0 +1,21 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dGetUnpackedScreenData
+NNS_G2dGetUnpackedScreenData: ; 0x020B0180
+ stmdb sp!, {r4,lr}
+ mov r4, r1
+ ldr r1, _020B01AC ; =0x5343524E
+ bl NNS_G2dFindBinaryBlock
+ cmp r0, #0x0
+ addne r0, r0, #0x8
+ strne r0, [r4, #0x0]
+ movne r0, #0x1
+ moveq r0, #0x0
+ streq r0, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B01AC: .word 0x5343524E
+ arm_func_end NNS_G2dGetUnpackedScreenData
diff --git a/arm9/asm/NNS_G2D_g2d_oam.s b/arm9/asm/NNS_G2D_g2d_oam.s
new file mode 100644
index 00000000..cec3db64
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_oam.s
@@ -0,0 +1,667 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global NNSi_objSizeHTbl
+NNSi_objSizeHTbl: ; 0x020FF894
+ .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00
+ .byte 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00
+
+ .global NNSi_objSizeWTbl
+NNSi_objSizeWTbl: ; 0x020FF8AC
+ .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00
+ .byte 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00
+ ; static const in function
+
+ .section .data
+
+ .global funcTbl$8497
+funcTbl$8497: ; 0x0210655C
+ .word CpuLoadOAMMain_
+ .word CpuLoadOAMSub_
+ .word 0
+ .word 0
+ .word 0
+
+ .section .bss
+
+ .global numRegisterdInstance_
+numRegisterdInstance_: ; 0x021CCD9C
+ .space 0x4
+
+ .global oamCache_
+oamCache_: ; 0x021CCDA0
+ .space 0xFC0
+
+ .section .text
+
+ arm_func_start NNS_G2dGetOamManagerOamCapacity
+NNS_G2dGetOamManagerOamCapacity: ; 0x020B0830
+ ldrh r3, [r0, #0x6]
+ ldrh r2, [r0, #0x8]
+ mov r12, #0x0
+ add r1, r3, #0x1
+ cmp r2, r1
+ bgt _020B0854
+ ldrh r0, [r0, #0x4]
+ cmp r0, r3
+ movls r12, #0x1
+_020B0854:
+ cmp r12, #0x0
+ subne r0, r3, r2
+ addne r0, r0, #0x1
+ movne r0, r0, lsl #0x10
+ movne r0, r0, lsr #0x10
+ moveq r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dGetOamManagerOamCapacity
+
+ arm_func_start NNS_G2dApplyAndResetOamManagerBuffer
+NNS_G2dApplyAndResetOamManagerBuffer: ; 0x020B0870
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl NNS_G2dApplyOamManagerToHW
+ mov r0, r4
+ bl NNS_G2dResetOamManagerBuffer
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dApplyAndResetOamManagerBuffer
+
+ arm_func_start NNS_G2dResetOamManagerBuffer
+NNS_G2dResetOamManagerBuffer: ; 0x020B0888
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x0
+ beq _020B0944
+ ldrh r2, [r5, #0x6]
+ ldrh r1, [r5, #0x8]
+ mov r3, #0x0
+ add r0, r2, #0x1
+ cmp r1, r0
+ bgt _020B08C0
+ ldrh r0, [r5, #0x4]
+ cmp r0, r2
+ movls r3, #0x1
+_020B08C0:
+ cmp r3, #0x0
+ moveq r4, #0x0
+ beq _020B08E0
+ ldrh r0, [r5, #0x4]
+ sub r0, r2, r0
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0xd
+_020B08E0:
+ ldr r2, [r5, #0x0]
+ ldr r1, _020B09AC ; =oamCache_
+ mov r0, #0x540
+ mla r1, r2, r0, r1
+ ldrh r0, [r5, #0x4]
+ add r2, r1, #0x100
+ mov r1, r4
+ add r6, r2, r0, lsl #0x3
+ mov r0, r6
+ bl DC_InvalidateRange
+ ldr r0, _020B09B0 ; =GXi_DmaId
+ mvn r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, r1
+ beq _020B0930
+ mov r1, r6
+ mov r3, r4
+ mov r2, #0xc0
+ bl MI_DmaFill32
+ b _020B0998
+_020B0930:
+ mov r1, r6
+ mov r2, r4
+ mov r0, #0xc0
+ bl MIi_CpuClear32
+ b _020B0998
+_020B0944:
+ ldr r2, [r5, #0x0]
+ ldr r1, _020B09AC ; =oamCache_
+ mov r0, #0x540
+ mla r1, r2, r0, r1
+ ldrh r2, [r5, #0x4]
+ ldrh r0, [r5, #0x6]
+ add r1, r1, #0x100
+ add r3, r1, r2, lsl #0x3
+ sub r0, r0, r2
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ movs r2, r0, lsr #0x10
+ mov r0, #0x0
+ beq _020B0998
+ mov r1, #0xc0
+_020B0980:
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ cmp r0, r2
+ strh r1, [r3], #0x8
+ blo _020B0980
+_020B0998:
+ ldrh r0, [r5, #0x4]
+ strh r0, [r5, #0x8]
+ ldrh r0, [r5, #0xa]
+ strh r0, [r5, #0xe]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B09AC: .word oamCache_
+_020B09B0: .word GXi_DmaId
+ arm_func_end NNS_G2dResetOamManagerBuffer
+
+ arm_func_start NNS_G2dApplyOamManagerToHW
+NNS_G2dApplyOamManagerToHW: ; 0x020B09B4
+ stmdb sp!, {r4-r10,lr}
+ mov r7, r0
+ ldr r0, [r7, #0x14]
+ cmp r0, #0x0
+ beq _020B0A48
+ ldr r5, [r7, #0x0]
+ ldr r1, _020B0BA8 ; =oamCache_
+ mov r0, #0x540
+ mla r1, r5, r0, r1
+ ldrh r2, [r7, #0x4]
+ ldrh r0, [r7, #0x6]
+ add r1, r1, #0x100
+ add r4, r1, r2, lsl #0x3
+ sub r0, r0, r2
+ add r0, r0, #0x1
+ mov r0, r0, lsl #0x13
+ mov r6, r0, lsr #0x10
+ mov r2, r2, lsl #0x13
+ mov r0, r4
+ mov r1, r6
+ mov r7, r2, lsr #0x10
+ bl DC_FlushRange
+ cmp r5, #0x0
+ beq _020B0A20
+ cmp r5, #0x1
+ beq _020B0A34
+ ldmia sp!, {r4-r10,pc}
+_020B0A20:
+ mov r0, r4
+ mov r1, r7
+ mov r2, r6
+ bl GX_LoadOAM
+ ldmia sp!, {r4-r10,pc}
+_020B0A34:
+ mov r0, r4
+ mov r1, r7
+ mov r2, r6
+ bl GXS_LoadOAM
+ ldmia sp!, {r4-r10,pc}
+_020B0A48:
+ ldr r0, [r7, #0x0]
+ ldr r2, _020B0BA8 ; =oamCache_
+ mov r1, #0x540
+ mla r2, r0, r1, r2
+ ldrh r5, [r7, #0x4]
+ ldrh r1, [r7, #0x6]
+ ldr r3, _020B0BAC ; =funcTbl$8497
+ add r4, r2, #0x100
+ sub r1, r1, r5
+ add r1, r1, #0x1
+ mov r1, r1, lsl #0x10
+ mov r2, r5, lsl #0x13
+ add r6, r4, r5, lsl #0x3
+ movs r5, r1, lsr #0x10
+ mov r4, r2, lsr #0x10
+ ldr r9, [r3, r0, lsl #0x2]
+ mov r10, #0x0
+ beq _020B0AC8
+ mov r8, #0x6
+_020B0A94:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r8
+ blx r9
+ add r0, r10, #0x1
+ add r2, r4, #0x8
+ mov r1, r0, lsl #0x10
+ mov r0, r2, lsl #0x10
+ mov r10, r1, lsr #0x10
+ cmp r10, r5
+ mov r4, r0, lsr #0x10
+ add r6, r6, #0x8
+ blo _020B0A94
+_020B0AC8:
+ ldrh r2, [r7, #0xc]
+ ldrh r1, [r7, #0xe]
+ mov r3, #0x0
+ add r0, r2, #0x1
+ cmp r1, r0
+ bgt _020B0AEC
+ ldrh r0, [r7, #0xa]
+ cmp r0, r2
+ movls r3, #0x1
+_020B0AEC:
+ cmp r3, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+ ldr r0, [r7, #0x0]
+ ldr r2, _020B0BA8 ; =oamCache_
+ mov r1, #0x540
+ mla r2, r0, r1, r2
+ ldrh r5, [r7, #0xa]
+ add r4, r2, #0x100
+ ldrh r1, [r7, #0xc]
+ mov r2, r5, lsl #0x15
+ ldr r3, _020B0BAC ; =funcTbl$8497
+ sub r1, r1, r5
+ add r1, r1, #0x1
+ mov r1, r1, lsl #0x10
+ add r9, r4, r5, lsl #0x5
+ ldr r5, [r3, r0, lsl #0x2]
+ movs r8, r1, lsr #0x10
+ mov r7, r2, lsr #0x10
+ mov r6, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+ mov r4, #0x2
+_020B0B40:
+ mov r2, r4
+ add r0, r9, #0x6
+ add r1, r7, #0x6
+ blx r5
+ mov r2, r4
+ add r0, r9, #0xe
+ add r1, r7, #0xe
+ blx r5
+ mov r2, r4
+ add r0, r9, #0x16
+ add r1, r7, #0x16
+ blx r5
+ add r0, r9, #0x1e
+ add r1, r7, #0x1e
+ mov r2, r4
+ blx r5
+ add r0, r7, #0x20
+ mov r0, r0, lsl #0x10
+ mov r7, r0, lsr #0x10
+ add r9, r9, #0x20
+ add r0, r6, #0x1
+ mov r0, r0, lsl #0x10
+ mov r6, r0, lsr #0x10
+ cmp r6, r8
+ blo _020B0B40
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B0BA8: .word oamCache_
+_020B0BAC: .word funcTbl$8497
+ arm_func_end NNS_G2dApplyOamManagerToHW
+
+ arm_func_start NNS_G2dEntryOamManagerAffine
+NNS_G2dEntryOamManagerAffine: ; 0x020B0BB0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldrh r12, [r0, #0xc]
+ ldrh r3, [r0, #0xe]
+ mov lr, #0x0
+ add r2, r12, #0x1
+ cmp r3, r2
+ bgt _020B0BDC
+ ldrh r2, [r0, #0xa]
+ cmp r2, r12
+ movls lr, #0x1
+_020B0BDC:
+ cmp lr, #0x0
+ subne r2, r12, r3
+ addne r2, r2, #0x1
+ movne r2, r2, lsl #0x10
+ movne r2, r2, lsr #0x10
+ moveq r2, #0x0
+ cmp r2, #0x1
+ movcs r2, #0x1
+ movcc r2, #0x0
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldreq r0, _020B0C74 ; =0x0000FFFE
+ ldmeqia sp!, {pc}
+ ldr lr, [r0, #0x0]
+ ldr r3, _020B0C78 ; =oamCache_
+ mov r2, #0x540
+ mla r12, lr, r2, r3
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r0, #0xe]
+ add r12, r12, #0x100
+ mov r3, r3, asr #0x4
+ add r12, r12, r2, lsl #0x5
+ strh r3, [r12, #0x6]
+ ldr r3, [r1, #0x4]
+ mov r3, r3, asr #0x4
+ strh r3, [r12, #0xe]
+ ldr r3, [r1, #0x8]
+ mov r3, r3, asr #0x4
+ strh r3, [r12, #0x16]
+ ldr r1, [r1, #0xc]
+ mov r1, r1, asr #0x4
+ strh r1, [r12, #0x1e]
+ ldrh r1, [r0, #0xe]
+ add r1, r1, #0x1
+ strh r1, [r0, #0xe]
+ mov r0, r2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B0C74: .word 0x0000FFFE
+_020B0C78: .word oamCache_
+ arm_func_end NNS_G2dEntryOamManagerAffine
+
+ arm_func_start NNS_G2dEntryOamManagerOamWithAffineIdx
+NNS_G2dEntryOamManagerOamWithAffineIdx: ; 0x020B0C7C
+ stmdb sp!, {r4,lr}
+ ldrh r12, [r0, #0x6]
+ ldrh r4, [r0, #0x8]
+ mov lr, #0x0
+ add r3, r12, #0x1
+ cmp r4, r3
+ bgt _020B0CA4
+ ldrh r3, [r0, #0x4]
+ cmp r3, r12
+ movls lr, #0x1
+_020B0CA4:
+ cmp lr, #0x0
+ subne r3, r12, r4
+ addne r3, r3, #0x1
+ movne r3, r3, lsl #0x10
+ movne r3, r3, lsr #0x10
+ moveq r3, #0x0
+ cmp r3, #0x1
+ movcs r3, #0x1
+ movcc r3, #0x0
+ cmp r3, #0x0
+ beq _020B0D48
+ ldr r4, [r0, #0x0]
+ ldr ip, _020B0D50 ; =oamCache_
+ mov r3, #0x540
+ mla r12, r4, r3, r12
+ ldrh r3, [r0, #0x8]
+ add r4, r12, #0x100
+ ldrh r12, [r1, #0x0]
+ mov lr, r3, lsl #0x3
+ add r3, r4, r3, lsl #0x3
+ strh r12, [r4, lr]
+ ldrh lr, [r1, #0x2]
+ ldr ip, _020B0D54 ; =0x0000FFFE
+ strh lr, [r3, #0x2]
+ ldrh r1, [r1, #0x4]
+ cmp r2, r12
+ strh r1, [r3, #0x4]
+ beq _020B0D34
+ ldr r1, [r3, #0x0]
+ mov r12, r1, lsl #0x16
+ mov r12, r12, lsr #0x1e
+ ands r12, r12, #0x1
+ bicne r12, r1, #0x3e000000
+ andne r1, r2, #0x1f
+ orrne r1, r12, r1, lsl #0x19
+ strne r1, [r3, #0x0]
+_020B0D34:
+ ldrh r1, [r0, #0x8]
+ add r1, r1, #0x1
+ strh r1, [r0, #0x8]
+ mov r0, #0x1
+ ldmia sp!, {r4,pc}
+_020B0D48:
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B0D50: .word oamCache_
+_020B0D54: .word 0x0000FFFE
+ arm_func_end NNS_G2dEntryOamManagerOamWithAffineIdx
+
+ arm_func_start NNS_G2dEntryOamManagerOam
+NNS_G2dEntryOamManagerOam: ; 0x020B0D58
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrh lr, [r0, #0x6]
+ ldrh r12, [r0, #0x8]
+ mov r4, #0x0
+ add r3, lr, #0x1
+ cmp r12, r3
+ bgt _020B0D84
+ ldrh r3, [r0, #0x4]
+ cmp r3, lr
+ movls r4, #0x1
+_020B0D84:
+ cmp r4, #0x0
+ subne r3, lr, r12
+ addne r3, r3, #0x1
+ movne r3, r3, lsl #0x10
+ movne r3, r3, lsr #0x10
+ moveq r3, #0x0
+ cmp r3, r2
+ movcs r3, #0x1
+ movcc r3, #0x0
+ cmp r3, #0x0
+ beq _020B0E24
+ ldr lr, [r0, #0x0]
+ ldr ip, _020B0E30 ; =oamCache_
+ mov r3, #0x540
+ mla r12, lr, r3, r12
+ ldrh r3, [r0, #0x8]
+ add r12, r12, #0x100
+ cmp r2, #0x0
+ add r4, r12, r3, lsl #0x3
+ mov r5, #0x0
+ ble _020B0E18
+ add r3, r0, #0x8
+_020B0DDC:
+ ldrh lr, [r1, #0x0]
+ mov r0, r5, lsl #0x3
+ add r12, r4, r5, lsl #0x3
+ strh lr, [r4, r0]
+ ldrh r0, [r1, #0x2]
+ add r5, r5, #0x1
+ cmp r5, r2
+ strh r0, [r12, #0x2]
+ ldrh r0, [r1, #0x4]
+ add r1, r1, #0x8
+ strh r0, [r12, #0x4]
+ ldrh r0, [r3, #0x0]
+ add r0, r0, #0x1
+ strh r0, [r3, #0x0]
+ blt _020B0DDC
+_020B0E18:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r5,pc}
+_020B0E24:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B0E30: .word oamCache_
+ arm_func_end NNS_G2dEntryOamManagerOam
+
+ arm_func_start NNS_G2dGetNewOamManagerInstance
+NNS_G2dGetNewOamManagerInstance: ; 0x020B0E34
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r5, [sp, #0x1c]
+ ldr r6, _020B0FB4 ; =oamCache_
+ mov r4, #0x540
+ mla r4, r5, r4, r6
+ mov lr, r1
+ sub r1, r2, #0x1
+ add r1, lr, r1
+ mov r1, r1, lsl #0x10
+ mov r12, r1, lsr #0x10
+ add r7, r4, lr, lsl #0x1
+ add r2, r4, r12, lsl #0x1
+ mov r6, r0
+ mov r5, r3
+ cmp r7, r2
+ mov r3, lr, lsl #0x1
+ bhi _020B0E9C
+ ldr r0, _020B0FB8 ; =0x0000FFFF
+_020B0E80:
+ ldrh r1, [r7, #0x0]
+ cmp r1, r0
+ movne r0, #0x0
+ bne _020B0EA0
+ add r7, r7, #0x2
+ cmp r7, r2
+ bls _020B0E80
+_020B0E9C:
+ mov r0, #0x1
+_020B0EA0:
+ cmp r0, #0x0
+ beq _020B0EE0
+ ldr r0, _020B0FBC ; =numRegisterdInstance_
+ sub r2, r12, lr
+ ldrh r7, [r0, #0x0]
+ add r1, r4, r3
+ mov r2, r2, lsl #0x1
+ add r3, r7, #0x1
+ strh r3, [r0, #0x0]
+ strh r7, [r6, #0x10]
+ strh lr, [r6, #0x4]
+ strh r12, [r6, #0x6]
+ strh lr, [r6, #0x8]
+ ldrh r0, [r6, #0x10]
+ bl MIi_CpuClear16
+ b _020B0EEC
+_020B0EE0:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020B0EEC:
+ ldrh r0, [sp, #0x18]
+ add r4, r4, #0x500
+ cmp r0, #0x0
+ bne _020B0F18
+ mov r0, #0x20
+ strh r0, [r6, #0xa]
+ mov r0, #0x0
+ strh r0, [r6, #0xc]
+ ldrh r0, [r6, #0xa]
+ strh r0, [r6, #0xe]
+ b _020B0F98
+_020B0F18:
+ sub r0, r0, #0x1
+ add r0, r5, r0
+ mov r0, r0, lsl #0x10
+ mov r12, r0, lsr #0x10
+ add r7, r4, r5, lsl #0x1
+ add r2, r4, r12, lsl #0x1
+ cmp r7, r2
+ mov r3, r5, lsl #0x1
+ bhi _020B0F5C
+ ldr r0, _020B0FB8 ; =0x0000FFFF
+_020B0F40:
+ ldrh r1, [r7, #0x0]
+ cmp r1, r0
+ movne r0, #0x0
+ bne _020B0F60
+ add r7, r7, #0x2
+ cmp r7, r2
+ bls _020B0F40
+_020B0F5C:
+ mov r0, #0x1
+_020B0F60:
+ cmp r0, #0x0
+ beq _020B0F8C
+ strh r5, [r6, #0xa]
+ strh r12, [r6, #0xc]
+ strh r5, [r6, #0xe]
+ ldrh r0, [r6, #0x10]
+ sub r2, r12, r5
+ add r1, r4, r3
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ b _020B0F98
+_020B0F8C:
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r7,pc}
+_020B0F98:
+ mov r1, #0x0
+ ldr r0, [sp, #0x1c]
+ str r1, [r6, #0x14]
+ str r0, [r6, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B0FB4: .word oamCache_
+_020B0FB8: .word 0x0000FFFF
+_020B0FBC: .word numRegisterdInstance_
+ arm_func_end NNS_G2dGetNewOamManagerInstance
+
+ arm_func_start NNS_G2dInitOamManagerModule
+NNS_G2dInitOamManagerModule: ; 0x020B0FC0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B1060 ; =oamCache_ + 0x100
+ mov r0, #0xc0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ ldr r1, _020B1064 ; =oamCache_ + 0x640
+ mov r0, #0xc0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ ldr r1, _020B1068 ; =oamCache_ + 0xB80
+ mov r0, #0xc0
+ mov r2, #0x400
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1070 ; =oamCache_
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1074 ; =oamCache_ + 0x540
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1078 ; =oamCache_ + 0xA80
+ mov r2, #0x100
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B107C ; =oamCache_ + 0x500
+ mov r2, #0x40
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1080 ; =oamCache_ + 0xA40
+ mov r2, #0x40
+ bl MIi_CpuClear16
+ ldr r0, _020B106C ; =0x0000FFFF
+ ldr r1, _020B1084 ; =oamCache_ + 0xF80
+ mov r2, #0x40
+ bl MIi_CpuClear16
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B1060: .word oamCache_ + 0x100
+_020B1064: .word oamCache_ + 0x640
+_020B1068: .word oamCache_ + 0xB80
+_020B106C: .word 0x0000FFFF
+_020B1070: .word oamCache_
+_020B1074: .word oamCache_ + 0x540
+_020B1078: .word oamCache_ + 0xA80
+_020B107C: .word oamCache_ + 0x500
+_020B1080: .word oamCache_ + 0xA40
+_020B1084: .word oamCache_ + 0xF80
+ arm_func_end NNS_G2dInitOamManagerModule
+
+ arm_func_start CpuLoadOAMMain_
+CpuLoadOAMMain_: ; 0x020B1088
+ ldr ip, _020B1094 ; =MIi_CpuCopy16
+ add r1, r1, #0x7000000
+ bx r12
+ .balign 4
+_020B1094: .word MIi_CpuCopy16
+ arm_func_end CpuLoadOAMMain_
+
+ arm_func_start CpuLoadOAMSub_
+CpuLoadOAMSub_: ; 0x020B1098
+ ldr r3, _020B10A8 ; =0x07000400
+ ldr ip, _020B10AC ; =MIi_CpuCopy16
+ add r1, r1, r3
+ bx r12
+ .balign 4
+_020B10A8: .word 0x07000400
+_020B10AC: .word MIi_CpuCopy16
+ arm_func_end CpuLoadOAMSub_
diff --git a/arm9/asm/NNS_G2D_g2d_oamsoftware.s b/arm9/asm/NNS_G2D_g2d_oamsoftware.s
new file mode 100644
index 00000000..c89c4787
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_oamsoftware.s
@@ -0,0 +1,421 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global pltFmtTbl$8430
+pltFmtTbl$8430: ; 0x020FF8D0
+ .byte 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
+ ; static const in function
+
+ .global texSize_$8337
+texSize_$8337: ; 0x020FF8D8
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
+ .byte 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00
+
+ .global gxTexSizeSTbl
+gxTexSizeSTbl: ; 0x020FF8F8
+ .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
+
+ .global gxTexSizeTTbl
+gxTexSizeTTbl: ; 0x020FF928
+ .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
+
+ .section .data
+
+ .global zOffsetStep_
+zOffsetStep_: ; 0x02106590
+ .byte 0x00, 0xF0, 0xFF, 0xFF
+
+ .section .bss
+
+ .global bAutoZOffsetAdd_
+bAutoZOffsetAdd_: ; 0x021CED08
+ .space 0x4
+
+ .global s_pUVFlipCorrectFunc
+s_pUVFlipCorrectFunc: ; 0x021CED0C
+ .space 0x4
+
+ .global zOffset_
+zOffset_: ; 0x021CED10
+ .space 0x4
+
+ .section .text
+
+ arm_func_start NNS_G2dDrawOneOam3DDirectWithPosFast
+NNS_G2dDrawOneOam3DDirectWithPosFast: ; 0x020B46B4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x1c
+ add r12, sp, #0x4
+ mov r5, r1
+ mov r4, r2
+ mov r7, r3
+ mov r6, r0
+ ldr r1, [sp, #0x30]
+ ldr r2, [sp, #0x34]
+ ldr r3, [sp, #0x38]
+ mov r0, r7
+ str r12, [sp, #0x0]
+ bl CalcSpriteParams_
+ ldr r2, [r7, #0x0]
+ and r1, r2, #0x300
+ cmp r1, #0x100
+ beq _020B4708
+ cmp r1, #0x300
+ beq _020B4708
+ and r0, r2, #0x30000000
+ orr r1, r1, r0
+_020B4708:
+ cmp r1, #0x300
+ bne _020B478C
+ ldr r0, _020B4914 ; =0xC000C000
+ ldr r1, _020B4918 ; =bAutoZOffsetAdd_
+ and r0, r2, r0
+ and r2, r0, #0xc0000000
+ mov r12, r2, lsr #0x1e
+ and r0, r0, #0xc000
+ mov lr, r0, asr #0xe
+ ldr r3, _020B491C ; =NNSi_objSizeWTbl
+ ldr r0, [r1, #0x0]
+ ldr r2, _020B4920 ; =NNSi_objSizeHTbl
+ cmp r0, #0x0
+ ldrne r0, _020B4924 ; =zOffset_
+ mov r12, r12, lsl #0x1
+ add r1, r2, lr, lsl #0x3
+ add r3, r3, lr, lsl #0x3
+ ldrh r2, [r12, r3]
+ ldrh r1, [r12, r1]
+ ldrne r0, [r0, #0x0]
+ mov r2, r2, asr #0x1
+ addne r3, r0, r4, lsl #0xc
+ mov r1, r1, asr #0x1
+ add r0, r5, r1
+ add r2, r6, r2
+ ldr r1, _020B4928 ; =0x04000470
+ mov r2, r2, lsl #0xc
+ str r2, [r1, #0x0]
+ mov r0, r0, lsl #0xc
+ moveq r3, r4, lsl #0xc
+ str r0, [r1, #0x0]
+ str r3, [r1, #0x0]
+ b _020B47C0
+_020B478C:
+ ldr r0, _020B4918 ; =bAutoZOffsetAdd_
+ ldr r1, _020B4928 ; =0x04000470
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldrne r0, _020B4924 ; =zOffset_
+ ldrne r0, [r0, #0x0]
+ addne r2, r0, r4, lsl #0xc
+ mov r0, r6, lsl #0xc
+ str r0, [r1, #0x0]
+ mov r0, r5, lsl #0xc
+ moveq r2, r4, lsl #0xc
+ str r0, [r1, #0x0]
+ str r2, [r1, #0x0]
+_020B47C0:
+ ldr r0, [sp, #0x14]
+ ldr r1, [sp, #0x18]
+ ldr r2, _020B492C ; =0x0400046C
+ mov r0, r0, lsl #0xc
+ str r0, [r2, #0x0]
+ mov r0, r1, lsl #0xc
+ str r0, [r2, #0x0]
+ mov r1, #0x1000
+ str r1, [r2, #0x0]
+ ldr r0, _020B4930 ; =0x04000500
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ ldr r1, [sp, #0x10]
+ mov r0, r0, lsl #0x8
+ mov r1, r1, lsl #0x8
+ mov r0, r0, asr #0x10
+ mov r1, r1, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsr #0x10
+ orr r2, r2, r0, lsl #0x10
+ ldr r1, _020B4934 ; =0x04000488
+ ldr r0, _020B4938 ; =0x04000490
+ str r2, [r1, #0x0]
+ mov r2, #0x10000
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x10]
+ mov r2, r2, lsl #0x8
+ mov r3, r3, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r3, r3, asr #0x10
+ mov r2, r2, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r4, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ orr r3, r4, r2, lsl #0x10
+ ldr r2, _020B493C ; =0x00010040
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0xc]
+ ldr r3, [sp, #0x8]
+ mov r2, r2, lsl #0x8
+ mov r3, r3, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r3, r3, asr #0x10
+ mov r2, r2, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r4, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ orr r2, r4, r2, lsl #0x10
+ str r2, [r1, #0x0]
+ mov r2, #0x40
+ str r2, [r0, #0x0]
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ mov r2, r2, lsl #0x8
+ mov r3, r3, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r3, r3, asr #0x10
+ mov r2, r2, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r4, r2, lsr #0x10
+ mov r2, r3, lsr #0x10
+ orr r2, r4, r2, lsl #0x10
+ str r2, [r1, #0x0]
+ mov r2, #0x0
+ str r2, [r0, #0x0]
+ ldr r1, _020B4940 ; =0x04000504
+ ldr r0, _020B4918 ; =bAutoZOffsetAdd_
+ str r2, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x1c
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r1, _020B4924 ; =zOffset_
+ ldr r0, _020B4944 ; =zOffsetStep_
+ ldr r2, [r1, #0x0]
+ ldr r0, [r0, #0x0]
+ add r0, r2, r0
+ str r0, [r1, #0x0]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B4914: .word 0xC000C000
+_020B4918: .word bAutoZOffsetAdd_
+_020B491C: .word NNSi_objSizeWTbl
+_020B4920: .word NNSi_objSizeHTbl
+_020B4924: .word zOffset_
+_020B4928: .word 0x04000470
+_020B492C: .word 0x0400046C
+_020B4930: .word 0x04000500
+_020B4934: .word 0x04000488
+_020B4938: .word 0x04000490
+_020B493C: .word 0x00010040
+_020B4940: .word 0x04000504
+_020B4944: .word zOffsetStep_
+ arm_func_end NNS_G2dDrawOneOam3DDirectWithPosFast
+
+ arm_func_start NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+NNSi_G2dGetOamSoftEmuAutoZOffsetStep: ; 0x020B4948
+ ldr r0, _020B4954 ; =zOffsetStep_
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B4954: .word zOffsetStep_
+ arm_func_end NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+
+ arm_func_start NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+NNSi_G2dSetOamSoftEmuAutoZOffsetStep: ; 0x020B4958
+ ldr r1, _020B4964 ; =zOffsetStep_
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020B4964: .word zOffsetStep_
+ arm_func_end NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+
+ arm_func_start NNSi_G2dResetOamSoftEmuAutoZOffset
+NNSi_G2dResetOamSoftEmuAutoZOffset: ; 0x020B4968
+ ldr r0, _020B4978 ; =zOffset_
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B4978: .word zOffset_
+ arm_func_end NNSi_G2dResetOamSoftEmuAutoZOffset
+
+ arm_func_start NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+NNSi_G2dSetOamSoftEmuAutoZOffsetFlag: ; 0x020B497C
+ ldr r1, _020B4988 ; =bAutoZOffsetAdd_
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020B4988: .word bAutoZOffsetAdd_
+ arm_func_end NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+
+ arm_func_start CalcSpriteParams_
+CalcSpriteParams_: ; 0x020B498C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0xc
+ mov r6, r0
+ ldr r4, [r6, #0x0]
+ ldr r0, _020B4BCC ; =0xC000C000
+ ldr r5, [r6, #0x4]
+ and r4, r4, r0
+ and r0, r4, #0xc0000000
+ and r4, r4, #0xc000
+ mov lr, r0, lsr #0x1e
+ ldr r0, _020B4BD0 ; =NNSi_objSizeWTbl
+ mov r12, r4, asr #0xe
+ ldr r8, _020B4BD4 ; =NNSi_objSizeHTbl
+ mov r4, lr, lsl #0x1
+ add r0, r0, r12, lsl #0x3
+ ldrh r9, [r4, r0]
+ ldr r0, [sp, #0x28]
+ mov r5, r5, lsl #0x16
+ mov r5, r5, lsr #0x16
+ mov r7, r5, lsl #0x10
+ str r9, [r0, #0x10]
+ add r5, r8, r12, lsl #0x3
+ ldrh r8, [r4, r5]
+ mov r5, r1
+ mov r4, r3
+ str r8, [r0, #0x14]
+ ldr r1, [r5, #0x14]
+ mov r7, r7, lsr #0x10
+ cmp r1, #0x0
+ bne _020B4A74
+ ldr r1, [r5, #0x8]
+ mov r2, r2, lsr #0x3
+ orr r1, r2, r1, lsl #0x1a
+ ldr r2, [r5, #0x0]
+ orr r1, r1, #0x40000000
+ ldr r3, [r5, #0x4]
+ orr r1, r1, r2, lsl #0x14
+ orr r2, r1, r3, lsl #0x17
+ ldr r8, [r5, #0x10]
+ ldr r1, _020B4BD8 ; =0x040004A8
+ orr r2, r2, r8, lsl #0x1d
+ str r2, [r1, #0x0]
+ ldr r1, [r5, #0x8]
+ ldr r2, [r5, #0x0]
+ cmp r1, #0x4
+ moveq r1, r7, lsl #0xf
+ moveq r7, r1, lsr #0x10
+ ldr r1, _020B4BDC ; =texSize_$8337
+ ldr r1, [r1, r2, lsl #0x2]
+ sub r1, r1, #0x1
+ and r1, r7, r1
+ mov r1, r1, lsl #0xf
+ str r1, [r0, #0x0]
+ ldr r1, [r5, #0x0]
+ mov r1, r7, asr r1
+ mov r1, r1, lsl #0xf
+ str r1, [r0, #0x4]
+ b _020B4AE0
+_020B4A74:
+ and r1, r1, #0x700000
+ mov r1, r1, asr #0x14
+ mov r12, r12, lsl #0x10
+ add r1, r1, #0x5
+ ldr r3, [r5, #0x8]
+ mov lr, lr, lsl #0x10
+ ldr sb, _020B4BE0 ; =gxTexSizeSTbl
+ mov r12, r12, lsr #0x10
+ ldr r8, _020B4BE4 ; =gxTexSizeTTbl
+ add r1, r2, r7, lsl r1
+ mov r2, r3, lsl #0x1a
+ orr r3, r2, r1, lsr #0x3
+ mov r7, lr, lsr #0x10
+ add r2, r9, r12, lsl #0x4
+ add r1, r8, r12, lsl #0x4
+ ldr r2, [r2, r7, lsl #0x2]
+ orr r3, r3, #0x40000000
+ ldr r1, [r1, r7, lsl #0x2]
+ orr r2, r3, r2, lsl #0x14
+ ldr r3, [r5, #0x10]
+ orr r2, r2, r1, lsl #0x17
+ ldr r1, _020B4BD8 ; =0x040004A8
+ orr r2, r2, r3, lsl #0x1d
+ str r2, [r1, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ str r1, [r0, #0x4]
+_020B4AE0:
+ ldr r2, [r0, #0x0]
+ ldr r1, [r0, #0x10]
+ add r1, r2, r1, lsl #0xc
+ str r1, [r0, #0x8]
+ ldr r2, [r0, #0x4]
+ ldr r1, [r0, #0x14]
+ add r1, r2, r1, lsl #0xc
+ str r1, [r0, #0xc]
+ ldr r1, [r6, #0x0]
+ mov r2, r1, lsl #0x2
+ mov r1, r1, lsl #0x3
+ movs r3, r1, lsr #0x1f
+ mov r12, r2, lsr #0x1f
+ ldrne r2, [r0, #0x0]
+ ldrne r1, [r0, #0x8]
+ strne r1, [r0, #0x0]
+ strne r2, [r0, #0x8]
+ cmp r12, #0x0
+ ldrne r2, [r0, #0x4]
+ ldrne r1, [r0, #0xc]
+ strne r1, [r0, #0x4]
+ ldr r1, _020B4BE8 ; =s_pUVFlipCorrectFunc
+ strne r2, [r0, #0xc]
+ ldr r7, [r1, #0x0]
+ cmp r7, #0x0
+ beq _020B4B60
+ str r3, [sp, #0x0]
+ add r1, r0, #0x4
+ add r2, r0, #0x8
+ add r3, r0, #0xc
+ str r12, [sp, #0x4]
+ blx r7
+_020B4B60:
+ ldr r0, [r6, #0x4]
+ ldr r1, [r6, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x1c
+ mov r3, r1, lsl #0x12
+ ldr r1, [r5, #0xc]
+ mov r0, r0, lsl #0x10
+ ldr r2, _020B4BEC ; =pltFmtTbl$8430
+ mov r3, r3, lsr #0x1f
+ cmp r1, #0x0
+ mov r0, r0, lsr #0x10
+ ldr r1, [r2, r3, lsl #0x2]
+ movne r0, r0, lsl #0x9
+ bne _020B4BA4
+ cmp r1, #0x4
+ moveq r0, #0x0
+ movne r0, r0, lsl #0x5
+_020B4BA4:
+ cmp r1, #0x2
+ moveq r2, #0x1
+ movne r2, #0x0
+ add r1, r4, r0
+ rsb r0, r2, #0x4
+ mov r1, r1, lsr r0
+ ldr r0, _020B4BF0 ; =0x040004AC
+ str r1, [r0, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020B4BCC: .word 0xC000C000
+_020B4BD0: .word NNSi_objSizeWTbl
+_020B4BD4: .word NNSi_objSizeHTbl
+_020B4BD8: .word 0x040004A8
+_020B4BDC: .word texSize_$8337
+_020B4BE0: .word gxTexSizeSTbl
+_020B4BE4: .word gxTexSizeTTbl
+_020B4BE8: .word s_pUVFlipCorrectFunc
+_020B4BEC: .word pltFmtTbl$8430
+_020B4BF0: .word 0x040004AC
+ arm_func_end CalcSpriteParams_
diff --git a/arm9/asm/NNS_G2D_g2d_palettetabl.s b/arm9/asm/NNS_G2D_g2d_palettetabl.s
new file mode 100644
index 00000000..a8d342cf
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_palettetabl.s
@@ -0,0 +1,11 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dGetPaletteTableValue
+NNS_G2dGetPaletteTableValue: ; 0x020B10B0
+ mov r1, r1, lsl #0x1
+ ldrh r0, [r0, r1]
+ bx lr
+ arm_func_end NNS_G2dGetPaletteTableValue
diff --git a/arm9/asm/NNS_G2D_g2d_renderer.s b/arm9/asm/NNS_G2D_g2d_renderer.s
new file mode 100644
index 00000000..5cd5eaac
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_renderer.s
@@ -0,0 +1,1984 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global firstSRTransformedMtxIdx_
+firstSRTransformedMtxIdx_: ; 0x02106570
+ .short -2
+ .balign 4, 0
+
+ .global currenVramTransferHandle_
+currenVramTransferHandle_: ; 0x02106574
+ .word -1
+
+ .global mtxI_
+mtxI_: ; 0x02106578
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .section .bss
+
+ .global currentMtxCachePos_
+currentMtxCachePos_: ; 0x021CDD60
+ .space 0x4
+
+ .global groupID_
+groupID_: ; 0x021CDD64
+ .space 0x4
+
+ .global bDonotUseSRTransform
+bDonotUseSRTransform: ; 0x021CDD68
+ .space 0x4
+
+ .global pCurrentInstance_
+pCurrentInstance_: ; 0x021CDD6C
+ .space 0x4
+
+ .global stackPos_
+stackPos_: ; 0x021CDD70
+ .space 0x4
+
+ .global fxZStack_
+fxZStack_: ; 0x021CDD74
+ .space 0x80
+
+ .global mtxStateStack_
+mtxStateStack_: ; 0x021CDDF4
+ .space 0x100
+
+ .global mtxStack_
+mtxStack_: ; 0x021CDEF4
+ .space 0x300
+
+ .global mtxStackFor2DHW_
+mtxStackFor2DHW_: ; 0x021CE1F4
+ .space 0x300
+
+ .global mtxCacheBuffer_
+mtxCacheBuffer_: ; 0x021CE4F4
+ .space 0x400
+
+ .global mcRenderState_
+mcRenderState_: ; 0x021CE8F4
+ .space 0x408
+
+ .section .text
+
+ arm_func_start NNS_G2dSetRendererImageProxy
+NNS_G2dSetRendererImageProxy: ; 0x020B2780
+ ldr ip, _020B2788 ; =NNS_G2dSetRndCoreImageProxy
+ bx r12
+ .balign 4
+_020B2788: .word NNS_G2dSetRndCoreImageProxy
+ arm_func_end NNS_G2dSetRendererImageProxy
+
+ arm_func_start NNS_G2dGetRendererPaletteTbl
+NNS_G2dGetRendererPaletteTbl: ; 0x020B278C
+ ldr r0, [r0, #0x78]
+ bx lr
+ arm_func_end NNS_G2dGetRendererPaletteTbl
+
+ arm_func_start NNS_G2dRotZ
+NNS_G2dRotZ: ; 0x020B2794
+ stmdb sp!, {lr}
+ sub sp, sp, #0x1c
+ ldr r2, _020B2894 ; =stackPos_
+ mov lr, #0x0
+ ldr r12, [r2, #0x0]
+ ldr r3, _020B2898 ; =mtxStack_
+ mov r2, #0x18
+ str r1, [sp, #0x0]
+ str r1, [sp, #0xc]
+ mla r1, r12, r2, r3
+ rsb r3, r0, #0x0
+ str r0, [sp, #0x4]
+ add r0, sp, #0x0
+ mov r2, r1
+ str r3, [sp, #0x8]
+ str lr, [sp, #0x10]
+ str lr, [sp, #0x14]
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B2894 ; =stackPos_
+ ldr r1, _020B289C ; =mtxStackFor2DHW_
+ ldr r2, [r0, #0x0]
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B28A0 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B2824
+ ldr r1, _020B28A4 ; =firstSRTransformedMtxIdx_
+ ldr r0, _020B28A8 ; =0x0000FFFE
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ bne _020B2828
+_020B2824:
+ mov r0, #0x0
+_020B2828:
+ cmp r0, #0x0
+ ldreq r1, _020B2894 ; =stackPos_
+ ldreq r0, _020B28A4 ; =firstSRTransformedMtxIdx_
+ ldreq r1, [r1, #0x0]
+ streqh r1, [r0, #0x0]
+ ldr r0, _020B2894 ; =stackPos_
+ ldr r1, _020B28AC ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ add r12, r1, r0, lsr #0xd
+ ldrh r0, [r12, #0x4]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B288C
+ ; Jump table
+ b _020B2870 ; case 0
+ b _020B288C ; case 1
+ b _020B2870 ; case 2
+ b _020B2870 ; case 3
+_020B2870:
+ ldr r0, _020B28B0 ; =groupID_
+ mov r1, #0x1
+ ldrh r3, [r0, #0x0]
+ add r2, r3, #0x1
+ strh r2, [r0, #0x0]
+ strh r3, [r12, #0x2]
+ strh r1, [r12, #0x4]
+_020B288C:
+ add sp, sp, #0x1c
+ ldmia sp!, {pc}
+ .balign 4
+_020B2894: .word stackPos_
+_020B2898: .word mtxStack_
+_020B289C: .word mtxStackFor2DHW_
+_020B28A0: .word bDonotUseSRTransform
+_020B28A4: .word firstSRTransformedMtxIdx_
+_020B28A8: .word 0x0000FFFE
+_020B28AC: .word mtxStateStack_
+_020B28B0: .word groupID_
+ arm_func_end NNS_G2dRotZ
+
+ arm_func_start NNS_G2dScale
+NNS_G2dScale: ; 0x020B28B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x1c
+ ldr r2, _020B29E8 ; =stackPos_
+ mov r12, #0x0
+ ldr r3, [r2, #0x0]
+ mov r4, r1
+ ldr r2, _020B29EC ; =mtxStack_
+ mov r1, #0x18
+ mla r1, r3, r1, r2
+ mov r5, r0
+ add r0, sp, #0x0
+ mov r2, r1
+ str r5, [sp, #0x0]
+ str r12, [sp, #0x4]
+ str r12, [sp, #0x8]
+ str r4, [sp, #0xc]
+ str r12, [sp, #0x10]
+ str r12, [sp, #0x14]
+ bl NNSi_G2dMtxConcat32
+ mov r0, r5
+ bl FX_Inv
+ mov r1, #0x0
+ str r0, [sp, #0x0]
+ mov r0, r4
+ str r1, [sp, #0x4]
+ str r1, [sp, #0x8]
+ bl FX_Inv
+ mov r3, #0x0
+ ldr r1, _020B29E8 ; =stackPos_
+ str r0, [sp, #0xc]
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B29F0 ; =mtxStackFor2DHW_
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ str r3, [sp, #0x10]
+ str r3, [sp, #0x14]
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B29F4 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B2978
+ ldr r1, _020B29F8 ; =firstSRTransformedMtxIdx_
+ ldr r0, _020B29FC ; =0x0000FFFE
+ ldrh r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ bne _020B297C
+_020B2978:
+ mov r0, #0x0
+_020B297C:
+ cmp r0, #0x0
+ ldreq r1, _020B29E8 ; =stackPos_
+ ldreq r0, _020B29F8 ; =firstSRTransformedMtxIdx_
+ ldreq r1, [r1, #0x0]
+ streqh r1, [r0, #0x0]
+ ldr r0, _020B29E8 ; =stackPos_
+ ldr r1, _020B2A00 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ add r12, r1, r0, lsr #0xd
+ ldrh r0, [r12, #0x4]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B29E0
+ ; Jump table
+ b _020B29C4 ; case 0
+ b _020B29E0 ; case 1
+ b _020B29C4 ; case 2
+ b _020B29C4 ; case 3
+_020B29C4:
+ ldr r0, _020B2A04 ; =groupID_
+ mov r1, #0x1
+ ldrh r3, [r0, #0x0]
+ add r2, r3, #0x1
+ strh r2, [r0, #0x0]
+ strh r3, [r12, #0x2]
+ strh r1, [r12, #0x4]
+_020B29E0:
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B29E8: .word stackPos_
+_020B29EC: .word mtxStack_
+_020B29F0: .word mtxStackFor2DHW_
+_020B29F4: .word bDonotUseSRTransform
+_020B29F8: .word firstSRTransformedMtxIdx_
+_020B29FC: .word 0x0000FFFE
+_020B2A00: .word mtxStateStack_
+_020B2A04: .word groupID_
+ arm_func_end NNS_G2dScale
+
+ arm_func_start NNS_G2dTranslate
+NNS_G2dTranslate: ; 0x020B2A08
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x1c
+ ldr r3, _020B2AEC ; =bDonotUseSRTransform
+ mov r4, r2
+ ldr r2, [r3, #0x0]
+ cmp r2, #0x0
+ beq _020B2A6C
+ ldr r2, _020B2AF0 ; =stackPos_
+ mov r3, #0x18
+ ldr r2, [r2, #0x0]
+ ldr lr, _020B2AF4 ; =mtxStack_ + 0x10
+ mul r5, r2, r3
+ ldr r3, [lr, r5]
+ ldr ip, _020B2AF8 ; =mtxStack_ + 0x14
+ add r0, r3, r0
+ str r0, [lr, r5]
+ ldr r0, [r12, r5]
+ ldr r3, _020B2AFC ; =fxZStack_
+ add r0, r0, r1
+ str r0, [r12, r5]
+ ldr r0, [r3, r2, lsl #0x2]
+ add sp, sp, #0x1c
+ add r0, r0, r4
+ str r0, [r3, r2, lsl #0x2]
+ ldmia sp!, {r4-r5,pc}
+_020B2A6C:
+ ldr r2, _020B2AF0 ; =stackPos_
+ mov lr, #0x1000
+ ldr r12, [r2, #0x0]
+ ldr r3, _020B2B00 ; =mtxStack_
+ mov r2, #0x18
+ str r1, [sp, #0x14]
+ mla r1, r12, r2, r3
+ mov r3, #0x0
+ str r0, [sp, #0x10]
+ add r0, sp, #0x0
+ mov r2, r1
+ str lr, [sp, #0x0]
+ str r3, [sp, #0x4]
+ str r3, [sp, #0x8]
+ str lr, [sp, #0xc]
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B2AF0 ; =stackPos_
+ ldr r1, _020B2B04 ; =mtxStackFor2DHW_
+ ldr r2, [r0, #0x0]
+ mov r0, #0x18
+ mla r1, r2, r0, r1
+ add r0, sp, #0x0
+ mov r2, r1
+ bl NNSi_G2dMtxConcat32
+ ldr r0, _020B2AF0 ; =stackPos_
+ ldr r2, _020B2AFC ; =fxZStack_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r2, r1, lsl #0x2]
+ add r0, r0, r4
+ str r0, [r2, r1, lsl #0x2]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B2AEC: .word bDonotUseSRTransform
+_020B2AF0: .word stackPos_
+_020B2AF4: .word mtxStack_ + 0x10
+_020B2AF8: .word mtxStack_ + 0x14
+_020B2AFC: .word fxZStack_
+_020B2B00: .word mtxStack_
+_020B2B04: .word mtxStackFor2DHW_
+ arm_func_end NNS_G2dTranslate
+
+ arm_func_start NNS_G2dPopMtx
+NNS_G2dPopMtx: ; 0x020B2B08
+ ldr r0, _020B2B4C ; =stackPos_
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ movle r0, #0x1
+ movgt r0, #0x0
+ cmp r0, #0x0
+ bxne lr
+ ldr r1, _020B2B4C ; =stackPos_
+ ldr r0, _020B2B50 ; =firstSRTransformedMtxIdx_
+ ldr r3, [r1, #0x0]
+ ldrh r2, [r0, #0x0]
+ sub r3, r3, #0x1
+ str r3, [r1, #0x0]
+ cmp r2, r3
+ ldrgt r1, _020B2B54 ; =0x0000FFFE
+ strgth r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B2B4C: .word stackPos_
+_020B2B50: .word firstSRTransformedMtxIdx_
+_020B2B54: .word 0x0000FFFE
+ arm_func_end NNS_G2dPopMtx
+
+ arm_func_start NNS_G2dPushMtx
+NNS_G2dPushMtx: ; 0x020B2B58
+ stmdb sp!, {r4-r10,lr}
+ ldr r0, _020B2D74 ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x7c]
+ ands r0, r0, #0x1
+ bne _020B2CA4
+ ldr r0, _020B2D78 ; =stackPos_
+ ldr r1, [r0, #0x0]
+ mov r0, r1, lsl #0x10
+ add r5, r1, #0x1
+ cmp r5, #0x20
+ mov r4, r0, lsr #0x10
+ movlt r0, #0x1
+ movge r0, #0x0
+ cmp r0, #0x0
+ beq _020B2C44
+ ldr r0, _020B2D7C ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B2BE4
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r3, [r1, #0x0]
+ ldr r1, _020B2D80 ; =fxZStack_
+ mul r8, r3, r0
+ ldr r6, _020B2D84 ; =mtxStack_ + 0x10
+ mul r7, r5, r0
+ ldr r2, [r6, r8]
+ ldr r0, [r1, r3, lsl #0x2]
+ ldr r3, _020B2D88 ; =mtxStack_ + 0x14
+ str r2, [r6, r7]
+ ldr r2, [r3, r8]
+ str r0, [r1, r5, lsl #0x2]
+ str r2, [r3, r7]
+ b _020B2C3C
+_020B2BE4:
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r7, _020B2D80 ; =fxZStack_
+ mul lr, r2, r0
+ ldr r1, _020B2D8C ; =mtxStack_
+ mul r12, r5, r0
+ ldr r8, _020B2D90 ; =mtxStackFor2DHW_
+ add r10, r1, lr
+ ldr r6, [r7, r2, lsl #0x2]
+ add r9, r1, r12
+ ldmia r10!, {r0-r3}
+ stmia r9!, {r0-r3}
+ ldmia r10, {r0-r1}
+ str r6, [r7, r5, lsl #0x2]
+ add r7, r8, lr
+ stmia r9, {r0-r1}
+ add r6, r8, r12
+ ldmia r7!, {r0-r3}
+ stmia r6!, {r0-r3}
+ ldmia r7, {r0-r1}
+ stmia r6, {r0-r1}
+_020B2C3C:
+ ldr r0, _020B2D78 ; =stackPos_
+ str r5, [r0, #0x0]
+_020B2C44:
+ ldr r0, _020B2D78 ; =stackPos_
+ ldr r2, _020B2D94 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r5, r4, lsl #0x3
+ mov r0, r0, lsl #0x10
+ mov r3, r0, lsr #0x10
+ add r4, r2, r4, lsl #0x3
+ mov r6, r3, lsl #0x3
+ ldrh r1, [r2, r5]
+ ldrh r0, [r4, #0x2]
+ add r3, r2, r3, lsl #0x3
+ strh r1, [r2, r6]
+ strh r0, [r3, #0x2]
+ ldrh r2, [r4, #0x4]
+ ldrh r0, [r4, #0x6]
+ ldr r1, _020B2D98 ; =mtxStateStack_ + 0x4
+ strh r2, [r3, #0x4]
+ strh r0, [r3, #0x6]
+ ldrh r0, [r1, r5]
+ cmp r0, #0x1
+ moveq r0, #0x2
+ streqh r0, [r1, r6]
+ strneh r0, [r1, r6]
+ ldmia sp!, {r4-r10,pc}
+_020B2CA4:
+ ldr r0, _020B2D78 ; =stackPos_
+ ldr r0, [r0, #0x0]
+ add r4, r0, #0x1
+ cmp r4, #0x20
+ movlt r0, #0x1
+ movge r0, #0x0
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+ ldr r0, _020B2D7C ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B2D10
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r3, [r1, #0x0]
+ ldr r1, _020B2D80 ; =fxZStack_
+ mul r7, r3, r0
+ ldr r5, _020B2D84 ; =mtxStack_ + 0x10
+ mul r6, r4, r0
+ ldr r2, [r5, r7]
+ ldr r0, [r1, r3, lsl #0x2]
+ ldr r3, _020B2D88 ; =mtxStack_ + 0x14
+ str r2, [r5, r6]
+ ldr r2, [r3, r7]
+ str r0, [r1, r4, lsl #0x2]
+ str r2, [r3, r6]
+ b _020B2D68
+_020B2D10:
+ ldr r1, _020B2D78 ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr ip, _020B2D80 ; =fxZStack_
+ mul r9, r2, r0
+ ldr r1, _020B2D8C ; =mtxStack_
+ mul r8, r4, r0
+ ldr lr, _020B2D90 ; =mtxStackFor2DHW_
+ add r6, r1, r9
+ ldr r5, [r12, r2, lsl #0x2]
+ add r7, r1, r8
+ ldmia r6!, {r0-r3}
+ stmia r7!, {r0-r3}
+ ldmia r6, {r0-r1}
+ add r6, lr, r9
+ stmia r7, {r0-r1}
+ add lr, lr, r8
+ ldmia r6!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r6, {r0-r1}
+ stmia lr, {r0-r1}
+ str r5, [r12, r4, lsl #0x2]
+_020B2D68:
+ ldr r0, _020B2D78 ; =stackPos_
+ str r4, [r0, #0x0]
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B2D74: .word pCurrentInstance_
+_020B2D78: .word stackPos_
+_020B2D7C: .word bDonotUseSRTransform
+_020B2D80: .word fxZStack_
+_020B2D84: .word mtxStack_ + 0x10
+_020B2D88: .word mtxStack_ + 0x14
+_020B2D8C: .word mtxStack_
+_020B2D90: .word mtxStackFor2DHW_
+_020B2D94: .word mtxStateStack_
+_020B2D98: .word mtxStateStack_ + 0x4
+ arm_func_end NNS_G2dPushMtx
+
+ arm_func_start NNS_G2dDrawMultiCellAnimation
+NNS_G2dDrawMultiCellAnimation: ; 0x020B2D9C
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldrh r0, [r4, #0x56]
+ cmp r0, #0x0
+ bne _020B2DBC
+ add r0, r4, #0x30
+ bl NNS_G2dDrawMultiCell
+ ldmia sp!, {r4-r6,pc}
+_020B2DBC:
+ bl NNS_G2dPushMtx
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x8
+ beq _020B2E0C
+ ldr r0, _020B2E70 ; =pCurrentInstance_
+ ldrsh r6, [r4, #0x52]
+ ldr r0, [r0, #0x0]
+ ldrsh r5, [r4, #0x50]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B2E70 ; =pCurrentInstance_
+ rsbne r5, r5, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r6, r6, #0x0
+ mov r0, r5, lsl #0xc
+ mov r1, r6, lsl #0xc
+ mov r2, #0x0
+ bl NNS_G2dTranslate
+_020B2E0C:
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x4
+ beq _020B2E40
+ ldrh r0, [r4, #0x54]
+ ldr r2, _020B2E74 ; =FX_SinCosTable_
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl NNS_G2dRotZ
+_020B2E40:
+ ldrh r0, [r4, #0x56]
+ ands r0, r0, #0x2
+ beq _020B2E5C
+ ldr r0, [r4, #0x48]
+ ldr r1, [r4, #0x4c]
+ mov r2, #0x1000
+ bl NNS_G2dScale
+_020B2E5C:
+ add r0, r4, #0x30
+ bl NNS_G2dDrawMultiCell
+ mov r0, #0x1
+ bl NNS_G2dPopMtx
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B2E70: .word pCurrentInstance_
+_020B2E74: .word FX_SinCosTable_
+ arm_func_end NNS_G2dDrawMultiCellAnimation
+
+ arm_func_start NNS_G2dDrawMultiCell
+NNS_G2dDrawMultiCell: ; 0x020B2E78
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x1
+ bne _020B309C
+ ldr r0, [r5, #0x0]
+ mov r2, #0x0
+ ldrh r0, [r0, #0x2]
+ cmp r0, #0x0
+ bls _020B2ED0
+ ldr r3, _020B3174 ; =mcRenderState_
+ mov r4, r2
+_020B2EAC:
+ add r0, r3, r2, lsl #0x2
+ str r4, [r0, #0x4]
+ ldr r0, [r5, #0x0]
+ add r2, r2, #0x1
+ ldrh r1, [r0, #0x2]
+ mov r0, r2, lsl #0x10
+ mov r2, r0, lsr #0x10
+ cmp r2, r1
+ blo _020B2EAC
+_020B2ED0:
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ mov r6, #0x1
+ ldr r1, [r0, #0x0]
+ ldr r0, _020B3174 ; =mcRenderState_
+ str r6, [r0, #0x404]
+ ldr r0, [r1, #0x80]
+ cmp r0, #0x0
+ beq _020B2FD8
+ bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+ str r0, [sp, #0x0]
+ mov r0, r6
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ ldr r2, [r5, #0x0]
+ mov r7, #0x0
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ bls _020B2FC0
+ mov r11, r7
+_020B2F28:
+ ldr r0, [r2, #0x4]
+ ldr r9, [r5, #0xc]
+ add r10, r0, r7, lsl #0x3
+ ldrh r0, [r10, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r8, r0, lsr #0x10
+ ldr r0, _020B3174 ; =mcRenderState_
+ strh r8, [r0, #0x0]
+ bl NNS_G2dPushMtx
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldrsh r4, [r10, #0x4]
+ ldr r0, [r0, #0x0]
+ ldrsh r10, [r10, #0x2]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ rsbne r10, r10, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r4, r4, #0x0
+ mov r2, r11
+ mov r0, r10, lsl #0xc
+ mov r1, r4, lsl #0xc
+ bl NNS_G2dTranslate
+ mov r0, #0x58
+ mla r0, r8, r0, r9
+ bl DrawCellAnimationImpl_
+ mov r0, r6
+ bl NNS_G2dPopMtx
+ ldr r2, [r5, #0x0]
+ add r0, r7, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r2, #0x0]
+ mov r7, r0, lsr #0x10
+ cmp r7, r1
+ blo _020B2F28
+_020B2FC0:
+ mov r0, #0x0
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, [sp, #0x0]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ bl NNSi_G2dResetOamSoftEmuAutoZOffset
+ b _020B3088
+_020B2FD8:
+ ldr r2, [r5, #0x0]
+ mov r7, #0x0
+ ldrh r0, [r2, #0x0]
+ cmp r0, #0x0
+ bls _020B3088
+ str r7, [sp, #0x4]
+ mov r11, #0x58
+_020B2FF4:
+ ldr r0, [r2, #0x4]
+ ldr r9, [r5, #0xc]
+ add r10, r0, r7, lsl #0x3
+ ldrh r0, [r10, #0x6]
+ and r0, r0, #0xff00
+ mov r0, r0, lsl #0x8
+ mov r8, r0, lsr #0x10
+ ldr r0, _020B3174 ; =mcRenderState_
+ strh r8, [r0, #0x0]
+ bl NNS_G2dPushMtx
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldrsh r4, [r10, #0x4]
+ ldr r0, [r0, #0x0]
+ ldrsh r10, [r10, #0x2]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ rsbne r10, r10, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r4, r4, #0x0
+ ldr r2, [sp, #0x4]
+ mov r0, r10, lsl #0xc
+ mov r1, r4, lsl #0xc
+ bl NNS_G2dTranslate
+ mla r0, r8, r11, r9
+ bl DrawCellAnimationImpl_
+ mov r0, r6
+ bl NNS_G2dPopMtx
+ ldr r2, [r5, #0x0]
+ add r0, r7, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r2, #0x0]
+ mov r7, r0, lsr #0x10
+ cmp r7, r1
+ blo _020B2FF4
+_020B3088:
+ ldr r0, _020B3174 ; =mcRenderState_
+ mov r1, #0x0
+ str r1, [r0, #0x404]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020B309C:
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldr r7, [r5, #0xc]
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ cmp r0, #0x0
+ beq _020B312C
+ bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+ mov r6, r0
+ mov r0, #0x1
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, _020B3178 ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ ldr r0, [r5, #0x0]
+ mov r4, #0x0
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ bls _020B3110
+ mov r8, #0x28
+_020B30EC:
+ mla r0, r4, r8, r7
+ bl DrawNode_
+ ldr r1, [r5, #0x0]
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B30EC
+_020B3110:
+ mov r0, #0x0
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ mov r0, r6
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ bl NNSi_G2dResetOamSoftEmuAutoZOffset
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020B312C:
+ ldr r0, [r5, #0x0]
+ mov r4, #0x0
+ ldrh r0, [r0, #0x0]
+ cmp r0, #0x0
+ addls sp, sp, #0xc
+ ldmlsia sp!, {r4-r11,pc}
+ mov r6, #0x28
+_020B3148:
+ mla r0, r4, r6, r7
+ bl DrawNode_
+ ldr r1, [r5, #0x0]
+ add r0, r4, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r1, #0x0]
+ mov r4, r0, lsr #0x10
+ cmp r4, r1
+ blo _020B3148
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B3174: .word mcRenderState_
+_020B3178: .word pCurrentInstance_
+ arm_func_end NNS_G2dDrawMultiCell
+
+ arm_func_start NNS_G2dDrawCellAnimation
+NNS_G2dDrawCellAnimation: ; 0x020B317C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B31EC ; =pCurrentInstance_
+ mov r5, r0
+ ldr r1, [r1, #0x0]
+ ldr r1, [r1, #0x80]
+ cmp r1, #0x0
+ beq _020B31E0
+ bl NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+ mov r4, r0
+ mov r0, #0x1
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ ldr r0, _020B31EC ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x80]
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ mov r0, r5
+ bl DrawCellAnimationImpl_
+ mov r0, #0x0
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+ mov r0, r4
+ bl NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+ bl NNSi_G2dResetOamSoftEmuAutoZOffset
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B31E0:
+ bl DrawCellAnimationImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B31EC: .word pCurrentInstance_
+ arm_func_end NNS_G2dDrawCellAnimation
+
+ arm_func_start NNS_G2dEndRendering
+NNS_G2dEndRendering: ; 0x020B31F0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B3260 ; =0x04000448
+ mov r2, #0x1
+ ldr r0, _020B3264 ; =pCurrentInstance_
+ str r2, [r1, #0x0]
+ ldr r2, [r0, #0x0]
+ ldr r3, [r2, #0x7c]
+ cmp r3, #0x0
+ beq _020B324C
+ ands r0, r3, #0x1
+ ldrne r0, _020B3268 ; =bDonotUseSRTransform
+ movne r1, #0x0
+ strne r1, [r0, #0x0]
+ ands r0, r3, #0x2
+ beq _020B323C
+ mov r0, #0x0
+ str r0, [r2, #0x74]
+ bl NNS_G2dRndCoreEndRendering
+_020B323C:
+ ldr r0, _020B3264 ; =pCurrentInstance_
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x7c]
+_020B324C:
+ ldr r0, _020B3264 ; =pCurrentInstance_
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B3260: .word 0x04000448
+_020B3264: .word pCurrentInstance_
+_020B3268: .word bDonotUseSRTransform
+ arm_func_end NNS_G2dEndRendering
+
+ arm_func_start NNS_G2dBeginRendering
+NNS_G2dBeginRendering: ; 0x020B326C
+ stmdb sp!, {r4-r8,lr}
+ ldr r5, _020B330C ; =currentMtxCachePos_
+ ldr r3, _020B3310 ; =pCurrentInstance_
+ ldrh r6, [r5, #0x0]
+ ldr r2, _020B3314 ; =stackPos_
+ mov r4, #0x0
+ ldr r7, _020B3318 ; =0x0000FFFE
+ ldr r1, _020B331C ; =firstSRTransformedMtxIdx_
+ str r0, [r3, #0x0]
+ str r4, [r2, #0x0]
+ strh r7, [r1, #0x0]
+ cmp r6, #0x0
+ ble _020B32D0
+ ldr r8, _020B3320 ; =mtxCacheBuffer_
+ mvn r7, #0x0
+ mov r6, #0x10
+_020B32AC:
+ mov r0, r7
+ mov r2, r6
+ add r1, r8, #0x10
+ bl MIi_CpuClearFast
+ ldrh r0, [r5, #0x0]
+ add r4, r4, #0x1
+ add r8, r8, #0x20
+ cmp r4, r0
+ blt _020B32AC
+_020B32D0:
+ ldr r4, _020B330C ; =currentMtxCachePos_
+ mov r0, #0x0
+ ldr r3, _020B3324 ; =groupID_
+ ldr r1, _020B3328 ; =mtxStateStack_
+ mov r2, #0x100
+ strh r0, [r4, #0x0]
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r1, _020B332C ; =0x04000444
+ mov r2, #0x0
+ ldr r0, _020B3330 ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ bl NNSi_G2dIdentity
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B330C: .word currentMtxCachePos_
+_020B3310: .word pCurrentInstance_
+_020B3314: .word stackPos_
+_020B3318: .word 0x0000FFFE
+_020B331C: .word firstSRTransformedMtxIdx_
+_020B3320: .word mtxCacheBuffer_
+_020B3324: .word groupID_
+_020B3328: .word mtxStateStack_
+_020B332C: .word 0x04000444
+_020B3330: .word 0x04000454
+ arm_func_end NNS_G2dBeginRendering
+
+ arm_func_start NNS_G2dInitRenderSurface
+NNS_G2dInitRenderSurface: ; 0x020B3334
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, r4
+ mov r0, #0x0
+ mov r2, #0x48
+ bl MIi_CpuClear16
+ mov r0, #0x1
+ str r0, [r4, #0x10]
+ mov r0, #0x3
+ ldr r1, _020B3380 ; =RndCoreCBFuncBeforeCell_
+ str r0, [r4, #0x14]
+ ldr r0, _020B3384 ; =RndCoreCBFuncAfterCell_
+ str r1, [r4, #0x18]
+ ldr r1, _020B3388 ; =RndCoreCBFuncBeforeOBJ_
+ str r0, [r4, #0x1c]
+ ldr r0, _020B338C ; =RndCoreCBFuncAfterOBJ_
+ str r1, [r4, #0x20]
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B3380: .word RndCoreCBFuncBeforeCell_
+_020B3384: .word RndCoreCBFuncAfterCell_
+_020B3388: .word RndCoreCBFuncBeforeOBJ_
+_020B338C: .word RndCoreCBFuncAfterOBJ_
+ arm_func_end NNS_G2dInitRenderSurface
+
+ arm_func_start NNS_G2dAddRendererTargetSurface
+NNS_G2dAddRendererTargetSurface: ; 0x020B3390
+ ldr r2, [r0, #0x70]
+ str r2, [r1, #0x30]
+ str r1, [r0, #0x70]
+ bx lr
+ arm_func_end NNS_G2dAddRendererTargetSurface
+
+ arm_func_start NNS_G2dInitRenderer
+NNS_G2dInitRenderer: ; 0x020B33A0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ bl NNS_G2dInitRndCore
+ mov r7, #0x0
+ str r7, [r4, #0x70]
+ str r7, [r4, #0x74]
+ str r7, [r4, #0x78]
+ str r7, [r4, #0x7c]
+ str r7, [r4, #0x80]
+ str r7, [r4, #0x84]
+ strh r7, [r4, #0x88]
+ strh r7, [r4, #0x8a]
+ str r7, [r4, #0x8c]
+ str r7, [r4, #0x90]
+ ldr r1, _020B3454 ; =stackPos_
+ strh r7, [r4, #0x94]
+ ldr r2, _020B3458 ; =0x0000FFFE
+ ldr r0, _020B345C ; =firstSRTransformedMtxIdx_
+ ldr r6, _020B3460 ; =mtxCacheBuffer_
+ str r7, [r1, #0x0]
+ strh r2, [r0, #0x0]
+ mvn r5, #0x0
+ mov r4, #0x10
+_020B3400:
+ mov r0, r5
+ mov r2, r4
+ add r1, r6, #0x10
+ bl MIi_CpuClearFast
+ add r7, r7, #0x1
+ cmp r7, #0x20
+ add r6, r6, #0x20
+ blt _020B3400
+ ldr ip, _020B3464 ; =currentMtxCachePos_
+ mov r0, #0x0
+ ldr r3, _020B3468 ; =groupID_
+ ldr r1, _020B346C ; =mtxStateStack_
+ mov r2, #0x100
+ strh r0, [r12, #0x0]
+ strh r0, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020B3470 ; =bDonotUseSRTransform
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B3454: .word stackPos_
+_020B3458: .word 0x0000FFFE
+_020B345C: .word firstSRTransformedMtxIdx_
+_020B3460: .word mtxCacheBuffer_
+_020B3464: .word currentMtxCachePos_
+_020B3468: .word groupID_
+_020B346C: .word mtxStateStack_
+_020B3470: .word bDonotUseSRTransform
+ arm_func_end NNS_G2dInitRenderer
+
+ arm_func_start DrawNode_
+DrawNode_: ; 0x020B3474
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r4, [r5, #0x0]
+ bl NNS_G2dPushMtx
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x8
+ beq _020B34E4
+ ldr r0, _020B354C ; =pCurrentInstance_
+ ldrsh r7, [r5, #0x1a]
+ ldr r0, [r0, #0x0]
+ ldrsh r6, [r5, #0x18]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B354C ; =pCurrentInstance_
+ rsbne r6, r6, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r7, r7, #0x0
+ mov r0, r6, lsl #0xc
+ mov r1, r7, lsl #0xc
+ mov r2, #0x0
+ bl NNS_G2dTranslate
+_020B34E4:
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x4
+ beq _020B3518
+ ldrh r0, [r5, #0x1c]
+ ldr r2, _020B3550 ; =FX_SinCosTable_
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl NNS_G2dRotZ
+_020B3518:
+ ldrh r0, [r5, #0x1e]
+ ands r0, r0, #0x2
+ beq _020B3534
+ ldr r0, [r5, #0x10]
+ ldr r1, [r5, #0x14]
+ mov r2, #0x1000
+ bl NNS_G2dScale
+_020B3534:
+ mov r0, r4
+ bl DrawCellAnimationImpl_
+ mov r0, #0x1
+ bl NNS_G2dPopMtx
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B354C: .word pCurrentInstance_
+_020B3550: .word FX_SinCosTable_
+ arm_func_end DrawNode_
+
+ arm_func_start DrawCellAnimationImpl_
+DrawCellAnimationImpl_: ; 0x020B3554
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x4a]
+ ldr r4, [r5, #0x2c]
+ cmp r0, #0x0
+ bne _020B35C0
+ ldr r2, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B35B0
+ ldr r1, _020B36B4 ; =currenVramTransferHandle_
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl DrawCellImpl_
+ ldr r0, _020B36B4 ; =currenVramTransferHandle_
+ mvn r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B35B0:
+ mov r0, r4
+ bl DrawCellImpl_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B35C0:
+ bl NNS_G2dPushMtx
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x8
+ beq _020B3610
+ ldr r0, _020B36B8 ; =pCurrentInstance_
+ ldrsh r7, [r5, #0x46]
+ ldr r0, [r0, #0x0]
+ ldrsh r6, [r5, #0x44]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ ldr r0, _020B36B8 ; =pCurrentInstance_
+ rsbne r6, r6, #0x0
+ ldr r0, [r0, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ rsbne r7, r7, #0x0
+ mov r0, r6, lsl #0xc
+ mov r1, r7, lsl #0xc
+ mov r2, #0x0
+ bl NNS_G2dTranslate
+_020B3610:
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x4
+ beq _020B3644
+ ldrh r0, [r5, #0x48]
+ ldr r2, _020B36BC ; =FX_SinCosTable_
+ mov r0, r0, asr #0x4
+ mov r1, r0, lsl #0x1
+ add r0, r1, #0x1
+ mov r3, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ ldrsh r0, [r2, r3]
+ ldrsh r1, [r2, r1]
+ bl NNS_G2dRotZ
+_020B3644:
+ ldrh r0, [r5, #0x4a]
+ ands r0, r0, #0x2
+ beq _020B3660
+ ldr r0, [r5, #0x3c]
+ ldr r1, [r5, #0x40]
+ mov r2, #0x1000
+ bl NNS_G2dScale
+_020B3660:
+ ldr r2, [r5, #0x34]
+ mvn r0, #0x0
+ cmp r2, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B369C
+ ldr r1, _020B36B4 ; =currenVramTransferHandle_
+ mov r0, r4
+ str r2, [r1, #0x0]
+ bl DrawCellImpl_
+ ldr r0, _020B36B4 ; =currenVramTransferHandle_
+ mvn r1, #0x0
+ str r1, [r0, #0x0]
+ b _020B36A4
+_020B369C:
+ mov r0, r4
+ bl DrawCellImpl_
+_020B36A4:
+ mov r0, #0x1
+ bl NNS_G2dPopMtx
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B36B4: .word currenVramTransferHandle_
+_020B36B8: .word pCurrentInstance_
+_020B36BC: .word FX_SinCosTable_
+ arm_func_end DrawCellAnimationImpl_
+
+ arm_func_start DrawCellImpl_
+DrawCellImpl_: ; 0x020B36C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020B3B54 ; =pCurrentInstance_
+ mov r10, r0
+ ldr r0, [r5, #0x0]
+ ldr r1, [r0, #0x7c]
+ str r0, [sp, #0x0]
+ ldr r9, [r0, #0x70]
+ ands r0, r1, #0x2
+ beq _020B38EC
+ ldr r0, [r9, #0x14]
+ cmp r0, #0x0
+ beq _020B3840
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B3720
+ ldr r2, _020B3B5C ; =firstSRTransformedMtxIdx_
+ ldr r0, _020B3B60 ; =0x0000FFFE
+ ldrh r2, [r2, #0x0]
+ cmp r2, r0
+ movne r0, #0x1
+ bne _020B3724
+_020B3720:
+ mov r0, #0x0
+_020B3724:
+ cmp r0, #0x0
+ beq _020B37AC
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldr r1, [r0, #0x404]
+ cmp r1, #0x0
+ beq _020B3788
+ ldrh r1, [r0, #0x0]
+ ldr r0, _020B3B68 ; =mcRenderState_ + 0x4
+ ldr r1, [r0, r1, lsl #0x2]
+ cmp r1, #0x0
+ bne _020B37AC
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, _020B3B6C ; =stackPos_
+ ldr r2, _020B3B70 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ ldr r1, _020B3B64 ; =mcRenderState_
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0xd
+ ldrh r3, [r2, r0]
+ ldr r4, _020B3B74 ; =mtxCacheBuffer_
+ ldrh r2, [r1, #0x0]
+ ldr r0, _020B3B68 ; =mcRenderState_ + 0x4
+ add r1, r4, r3, lsl #0x5
+ str r1, [r0, r2, lsl #0x2]
+ b _020B37AC
+_020B3788:
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, _020B3B6C ; =stackPos_
+ ldr r1, _020B3B70 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ ldr r2, _020B3B74 ; =mtxCacheBuffer_
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0xd
+ ldrh r0, [r1, r0]
+ add r1, r2, r0, lsl #0x5
+_020B37AC:
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3B6C ; =stackPos_
+ ldreq r3, _020B3B78 ; =mtxStack_
+ ldreq r2, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r2, r0, r3
+ beq _020B37FC
+ ldr r2, _020B3B6C ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r2, #0x0]
+ ldr r3, _020B3B7C ; =mtxStack_ + 0x10
+ mul r4, r2, r0
+ ldr r2, _020B3B80 ; =mtxStack_ + 0x14
+ ldr r3, [r3, r4]
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r2, [r2, r4]
+ str r3, [r0, #0x10]
+ str r2, [r0, #0x14]
+_020B37FC:
+ bl NNS_G2dSetRndCoreCurrentMtx2D
+ ldr r1, _020B3B88 ; =currenVramTransferHandle_
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B3830
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B3830:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B3840:
+ ldr r0, _020B3B6C ; =stackPos_
+ ldr r1, _020B3B8C ; =fxZStack_
+ ldr r2, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ bl NNS_G2dSetRndCore3DSoftSpriteZvalue
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3B6C ; =stackPos_
+ ldreq r2, _020B3B78 ; =mtxStack_
+ ldreq r1, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r1, r0, r2
+ beq _020B38A8
+ ldr r1, _020B3B6C ; =stackPos_
+ mov r0, #0x18
+ ldr r1, [r1, #0x0]
+ ldr r2, _020B3B7C ; =mtxStack_ + 0x10
+ mul r3, r1, r0
+ ldr r1, _020B3B80 ; =mtxStack_ + 0x14
+ ldr r2, [r2, r3]
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r1, [r1, r3]
+ str r2, [r0, #0x10]
+ str r1, [r0, #0x14]
+_020B38A8:
+ bl NNS_G2dSetRndCoreCurrentMtx3D
+ ldr r1, _020B3B88 ; =currenVramTransferHandle_
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ movne r0, #0x1
+ moveq r0, #0x0
+ cmp r0, #0x0
+ beq _020B38DC
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B38DC:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020B38EC:
+ cmp r9, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r11,pc}
+ ldr r4, _020B3B6C ; =stackPos_
+ ldr fp, _020B3B78 ; =mtxStack_
+ mov r7, #0x0
+ mov r6, #0x1
+_020B3908:
+ ldr r0, [r9, #0x10]
+ cmp r0, #0x0
+ beq _020B3B40
+ ldr r0, [r9, #0x14]
+ cmp r0, #0x0
+ beq _020B3A8C
+ ldr r8, [r5, #0x0]
+ mov r1, r9
+ str r9, [r8, #0x74]
+ mov r0, r8
+ bl NNS_G2dSetRndCoreSurface
+ ldr r1, [r9, #0x28]
+ ldr r2, [r9, #0x2c]
+ mov r0, r8
+ bl NNS_G2dSetRndCoreOamRegisterFunc
+ mov r0, r8
+ bl NNS_G2dRndCoreBeginRendering
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ mov r1, r7
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ bne _020B3978
+ ldr r0, _020B3B5C ; =firstSRTransformedMtxIdx_
+ ldrh r2, [r0, #0x0]
+ ldr r0, _020B3B60 ; =0x0000FFFE
+ cmp r2, r0
+ movne r0, r6
+ bne _020B397C
+_020B3978:
+ mov r0, r7
+_020B397C:
+ cmp r0, #0x0
+ beq _020B3A04
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldr r0, [r0, #0x404]
+ cmp r0, #0x0
+ beq _020B39E4
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldrh r1, [r0, #0x0]
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [r0, #0x4]
+ cmp r1, #0x0
+ bne _020B3A04
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, _020B3B64 ; =mcRenderState_
+ ldr r2, [r4, #0x0]
+ ldrh r1, [r0, #0x0]
+ mov r0, r2, lsl #0x10
+ mov r2, r0, lsr #0xd
+ ldr r0, _020B3B70 ; =mtxStateStack_
+ ldrh r3, [r0, r2]
+ ldr r0, _020B3B64 ; =mcRenderState_
+ add r2, r0, r1, lsl #0x2
+ ldr r0, _020B3B74 ; =mtxCacheBuffer_
+ add r1, r0, r3, lsl #0x5
+ str r1, [r2, #0x4]
+ b _020B3A04
+_020B39E4:
+ bl NNSi_G2dMCMStoreCurrentMtxToMtxCache
+ ldr r0, [r4, #0x0]
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0xd
+ ldr r0, _020B3B70 ; =mtxStateStack_
+ ldrh r1, [r0, r1]
+ ldr r0, _020B3B74 ; =mtxCacheBuffer_
+ add r1, r0, r1, lsl #0x5
+_020B3A04:
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r2, [r4, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r2, r0, r11
+ beq _020B3A44
+ ldr r2, [r4, #0x0]
+ mov r0, #0x18
+ mla r8, r2, r0, r11
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r3, [r8, #0x10]
+ mov r2, r0
+ str r3, [r2, #0x10]
+ ldr r3, [r8, #0x14]
+ str r3, [r2, #0x14]
+_020B3A44:
+ bl NNS_G2dSetRndCoreCurrentMtx2D
+ ldr r0, _020B3B88 ; =currenVramTransferHandle_
+ ldr r1, [r0, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, r6
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020B3A74
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ b _020B3A7C
+_020B3A74:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+_020B3A7C:
+ ldr r0, [r5, #0x0]
+ str r7, [r0, #0x74]
+ bl NNS_G2dRndCoreEndRendering
+ b _020B3B40
+_020B3A8C:
+ ldr r8, [r5, #0x0]
+ mov r1, r9
+ mov r0, r8
+ str r9, [r8, #0x74]
+ bl NNS_G2dSetRndCoreSurface
+ mov r0, r8
+ bl NNS_G2dRndCoreBeginRendering
+ ldr r2, [r4, #0x0]
+ ldr r1, _020B3B8C ; =fxZStack_
+ ldr r0, [sp, #0x0]
+ ldr r1, [r1, r2, lsl #0x2]
+ bl NNS_G2dSetRndCore3DSoftSpriteZvalue
+ ldr r0, _020B3B58 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r1, [r4, #0x0]
+ moveq r0, #0x18
+ mlaeq r0, r1, r0, r11
+ beq _020B3AFC
+ ldr r1, [r4, #0x0]
+ mov r0, #0x18
+ mla r3, r1, r0, r11
+ ldr r0, _020B3B84 ; =mtxI_
+ ldr r2, [r3, #0x10]
+ mov r1, r0
+ str r2, [r1, #0x10]
+ ldr r2, [r3, #0x14]
+ str r2, [r1, #0x14]
+_020B3AFC:
+ bl NNS_G2dSetRndCoreCurrentMtx3D
+ ldr r0, _020B3B88 ; =currenVramTransferHandle_
+ ldr r1, [r0, #0x0]
+ mvn r0, #0x0
+ cmp r1, r0
+ movne r0, r6
+ moveq r0, r7
+ cmp r0, #0x0
+ beq _020B3B2C
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCellVramTransfer
+ b _020B3B34
+_020B3B2C:
+ mov r0, r10
+ bl NNS_G2dRndCoreDrawCell
+_020B3B34:
+ ldr r0, [r5, #0x0]
+ str r7, [r0, #0x74]
+ bl NNS_G2dRndCoreEndRendering
+_020B3B40:
+ ldr r9, [r9, #0x30]
+ cmp r9, #0x0
+ bne _020B3908
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B3B54: .word pCurrentInstance_
+_020B3B58: .word bDonotUseSRTransform
+_020B3B5C: .word firstSRTransformedMtxIdx_
+_020B3B60: .word 0x0000FFFE
+_020B3B64: .word mcRenderState_
+_020B3B68: .word mcRenderState_ + 0x4
+_020B3B6C: .word stackPos_
+_020B3B70: .word mtxStateStack_
+_020B3B74: .word mtxCacheBuffer_
+_020B3B78: .word mtxStack_
+_020B3B7C: .word mtxStack_ + 0x10
+_020B3B80: .word mtxStack_ + 0x14
+_020B3B84: .word mtxI_
+_020B3B88: .word currenVramTransferHandle_
+_020B3B8C: .word fxZStack_
+ arm_func_end DrawCellImpl_
+
+ arm_func_start RndCoreCBFuncAfterOBJ_
+RndCoreCBFuncAfterOBJ_: ; 0x020B3B90
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r0, _020B3C24 ; =pCurrentInstance_
+ mov r12, r1
+ ldr r0, [r0, #0x0]
+ mov r3, r2
+ ldr r1, [r0, #0x74]
+ ldr r2, [r1, #0x44]
+ cmp r2, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, _020B3C28 ; =bDonotUseSRTransform
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldreq r2, _020B3C2C ; =stackPos_
+ ldreq r4, _020B3C30 ; =mtxStack_
+ ldreq lr, [r2, #0x0]
+ moveq r2, #0x18
+ mlaeq r6, lr, r2, r4
+ beq _020B3C0C
+ ldr lr, _020B3C2C ; =stackPos_
+ mov r2, #0x18
+ ldr lr, [lr, #0x0]
+ ldr r4, _020B3C34 ; =mtxStack_ + 0x10
+ mul r5, lr, r2
+ ldr r2, _020B3C38 ; =mtxStack_ + 0x14
+ ldr r4, [r4, r5]
+ ldr r6, _020B3C3C ; =mtxI_
+ ldr r2, [r2, r5]
+ str r4, [r6, #0x10]
+ str r2, [r6, #0x14]
+_020B3C0C:
+ str r6, [sp, #0x0]
+ ldr lr, [r1, #0x44]
+ mov r2, r12
+ blx lr
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3C24: .word pCurrentInstance_
+_020B3C28: .word bDonotUseSRTransform
+_020B3C2C: .word stackPos_
+_020B3C30: .word mtxStack_
+_020B3C34: .word mtxStack_ + 0x10
+_020B3C38: .word mtxStack_ + 0x14
+_020B3C3C: .word mtxI_
+ arm_func_end RndCoreCBFuncAfterOBJ_
+
+ arm_func_start RndCoreCBFuncBeforeOBJ_
+RndCoreCBFuncBeforeOBJ_: ; 0x020B3C40
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ ldr r3, _020B3E2C ; =pCurrentInstance_
+ add r4, r0, #0x38
+ ldr r0, [r3, #0x0]
+ mov r6, r1
+ mov r5, r2
+ bl NNS_G2dGetRendererPaletteTbl
+ cmp r0, #0x0
+ beq _020B3C90
+ ldrh r1, [r4, #0x4]
+ and r1, r1, #0xf000
+ mov r1, r1, lsl #0x4
+ mov r1, r1, lsr #0x10
+ bl NNS_G2dGetPaletteTableValue
+ ldr r1, [r4, #0x4]
+ and r0, r0, #0xf
+ bic r1, r1, #0xf000
+ orr r0, r1, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3C90:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ cmp r0, #0x0
+ beq _020B3DA4
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x1
+ beq _020B3CC8
+ ldrh r0, [r1, #0x88]
+ ldr r1, [r4, #0x4]
+ bic r1, r1, #0xc00
+ and r0, r0, #0x3
+ orr r0, r1, r0, lsl #0xa
+ str r0, [r4, #0x4]
+_020B3CC8:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x2
+ beq _020B3CF4
+ ldrh r0, [r1, #0x8a]
+ ldr r1, [r4, #0x4]
+ bic r1, r1, #0xf000
+ and r0, r0, #0xf
+ orr r0, r1, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3CF4:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x10
+ beq _020B3D2C
+ ldr r2, [r4, #0x4]
+ ldrh r0, [r1, #0x94]
+ mov r1, r2, lsl #0x10
+ bic r2, r2, #0xf000
+ add r0, r0, r1, lsr #0x1c
+ and r0, r0, #0xf
+ and r0, r0, #0xf
+ orr r0, r2, r0, lsl #0xc
+ str r0, [r4, #0x4]
+_020B3D2C:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x4
+ beq _020B3D60
+ ldr r0, [r1, #0x90]
+ cmp r0, #0x0
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x1000
+ strne r0, [r4, #0x0]
+ ldreq r0, [r4, #0x0]
+ biceq r0, r0, #0x1000
+ streq r0, [r4, #0x0]
+_020B3D60:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x84]
+ ands r0, r0, #0x8
+ beq _020B3DA4
+ ldr r0, [r4, #0x0]
+ ldrh r2, [r4, #0x4]
+ ldr r1, [r1, #0x8c]
+ bic r0, r0, #0xc00
+ orr r0, r0, r1, lsl #0xa
+ str r0, [r4, #0x0]
+ ldrh r0, [r4, #0x4]
+ and r1, r2, #0xf000
+ mov r1, r1, asr #0xc
+ bic r0, r0, #0xf000
+ orr r0, r0, r1, lsl #0xc
+ strh r0, [r4, #0x4]
+_020B3DA4:
+ ldr r0, _020B3E2C ; =pCurrentInstance_
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x74]
+ ldr r2, [r1, #0x40]
+ cmp r2, #0x0
+ addeq sp, sp, #0x8
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, _020B3E30 ; =bDonotUseSRTransform
+ ldr r2, [r2, #0x0]
+ cmp r2, #0x0
+ ldreq r2, _020B3E34 ; =stackPos_
+ ldreq r4, _020B3E38 ; =mtxStack_
+ ldreq r3, [r2, #0x0]
+ moveq r2, #0x18
+ mlaeq r4, r3, r2, r4
+ beq _020B3E10
+ ldr r3, _020B3E34 ; =stackPos_
+ mov r2, #0x18
+ ldr r4, [r3, #0x0]
+ ldr r3, _020B3E3C ; =mtxStack_ + 0x10
+ mul r12, r4, r2
+ ldr r2, _020B3E40 ; =mtxStack_ + 0x14
+ ldr r3, [r3, r12]
+ ldr r4, _020B3E44 ; =mtxI_
+ ldr r2, [r2, r12]
+ str r3, [r4, #0x10]
+ str r2, [r4, #0x14]
+_020B3E10:
+ str r4, [sp, #0x0]
+ ldr r4, [r1, #0x40]
+ mov r2, r6
+ mov r3, r5
+ blx r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3E2C: .word pCurrentInstance_
+_020B3E30: .word bDonotUseSRTransform
+_020B3E34: .word stackPos_
+_020B3E38: .word mtxStack_
+_020B3E3C: .word mtxStack_ + 0x10
+_020B3E40: .word mtxStack_ + 0x14
+_020B3E44: .word mtxI_
+ arm_func_end RndCoreCBFuncBeforeOBJ_
+
+ arm_func_start RndCoreCBFuncAfterCell_
+RndCoreCBFuncAfterCell_: ; 0x020B3E48
+ stmdb sp!, {r4,lr}
+ ldr r0, _020B3EC4 ; =pCurrentInstance_
+ mov r2, r1
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x74]
+ ldr r3, [r1, #0x3c]
+ cmp r3, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r3, _020B3EC8 ; =bDonotUseSRTransform
+ ldr r3, [r3, #0x0]
+ cmp r3, #0x0
+ ldreq r3, _020B3ECC ; =stackPos_
+ ldreq lr, _020B3ED0 ; =mtxStack_
+ ldreq r12, [r3, #0x0]
+ moveq r3, #0x18
+ mlaeq r3, r12, r3, lr
+ beq _020B3EB8
+ ldr ip, _020B3ECC ; =stackPos_
+ mov r3, #0x18
+ ldr r12, [r12, #0x0]
+ ldr lr, _020B3ED4 ; =mtxStack_ + 0x10
+ mul r4, r12, r3
+ ldr ip, _020B3ED8 ; =mtxStack_ + 0x14
+ ldr lr, [lr, r4]
+ ldr r3, _020B3EDC ; =mtxI_
+ ldr r12, [r12, r4]
+ str lr, [r3, #0x10]
+ str r12, [r3, #0x14]
+_020B3EB8:
+ ldr r12, [r1, #0x3c]
+ blx r12
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B3EC4: .word pCurrentInstance_
+_020B3EC8: .word bDonotUseSRTransform
+_020B3ECC: .word stackPos_
+_020B3ED0: .word mtxStack_
+_020B3ED4: .word mtxStack_ + 0x10
+_020B3ED8: .word mtxStack_ + 0x14
+_020B3EDC: .word mtxI_
+ arm_func_end RndCoreCBFuncAfterCell_
+
+ arm_func_start RndCoreCBFuncBeforeCell_
+RndCoreCBFuncBeforeCell_: ; 0x020B3EE0
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020B3FF4 ; =pCurrentInstance_
+ mov r6, r0
+ ldr r0, [r2, #0x0]
+ mov r5, r1
+ ldr r4, [r0, #0x74]
+ ldr r0, [r4, #0x34]
+ cmp r0, #0x0
+ beq _020B3F7C
+ ldr r0, _020B3FF8 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3FFC ; =stackPos_
+ ldreq r1, _020B4000 ; =mtxStack_
+ ldreq r2, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r1, r2, r0, r1
+ beq _020B3F54
+ ldr r1, _020B3FFC ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B4004 ; =mtxStack_ + 0x10
+ mul r3, r2, r0
+ ldr r0, _020B4008 ; =mtxStack_ + 0x14
+ ldr r2, [r1, r3]
+ ldr r1, _020B400C ; =mtxI_
+ ldr r0, [r0, r3]
+ str r2, [r1, #0x10]
+ str r0, [r1, #0x14]
+_020B3F54:
+ ldr r3, [r4, #0x34]
+ mov r0, r5
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ moveq r0, #0x0
+ streq r0, [r6, #0x30]
+ ldmeqia sp!, {r4-r6,pc}
+ mov r0, #0x1
+ str r0, [r6, #0x30]
+_020B3F7C:
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r0, _020B3FF8 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldreq r0, _020B3FFC ; =stackPos_
+ ldreq r2, _020B4000 ; =mtxStack_
+ ldreq r1, [r0, #0x0]
+ moveq r0, #0x18
+ mlaeq r3, r1, r0, r2
+ beq _020B3FD8
+ ldr r1, _020B3FFC ; =stackPos_
+ mov r0, #0x18
+ ldr r2, [r1, #0x0]
+ ldr r1, _020B4004 ; =mtxStack_ + 0x10
+ mul r6, r2, r0
+ ldr r0, _020B4008 ; =mtxStack_ + 0x14
+ ldr r1, [r1, r6]
+ ldr r3, _020B400C ; =mtxI_
+ ldr r0, [r0, r6]
+ str r1, [r3, #0x10]
+ str r0, [r3, #0x14]
+_020B3FD8:
+ ldr r0, _020B3FF4 ; =pCurrentInstance_
+ ldr r6, [r4, #0x38]
+ ldr r0, [r0, #0x0]
+ mov r1, r4
+ mov r2, r5
+ blx r6
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B3FF4: .word pCurrentInstance_
+_020B3FF8: .word bDonotUseSRTransform
+_020B3FFC: .word stackPos_
+_020B4000: .word mtxStack_
+_020B4004: .word mtxStack_ + 0x10
+_020B4008: .word mtxStack_ + 0x14
+_020B400C: .word mtxI_
+ arm_func_end RndCoreCBFuncBeforeCell_
+
+ arm_func_start NNSi_G2dMCMStoreCurrentMtxToMtxCache
+NNSi_G2dMCMStoreCurrentMtxToMtxCache: ; 0x020B4010
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B4154 ; =stackPos_
+ ldr r1, _020B4158 ; =mtxStateStack_
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r0, lsl #0x10
+ add r3, r1, r0, lsr #0xd
+ ldrh r0, [r3, #0x4]
+ cmp r0, #0x1
+ beq _020B4044
+ cmp r0, #0x2
+ movne r2, #0x0
+_020B4044:
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r0, _020B415C ; =currentMtxCachePos_
+ mov r2, #0x10
+ ldrh r4, [r0, #0x0]
+ cmp r4, #0x1f
+ addcc r1, r4, #0x1
+ strcch r1, [r0, #0x0]
+ ldr r0, _020B4160 ; =mtxCacheBuffer_
+ ldrh r5, [r3, #0x2]
+ add r0, r0, r4, lsl #0x5
+ add r1, r0, #0x10
+ mvn r0, #0x0
+ strh r4, [r3, #0x0]
+ bl MIi_CpuClearFast
+ ldr r0, _020B4154 ; =stackPos_
+ ldr r1, _020B4164 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ ldr r2, [r1, #0x0]
+ mov r1, r0, lsl #0x10
+ cmp r2, #0x0
+ ldr r3, _020B4158 ; =mtxStateStack_
+ mov r1, r1, lsr #0xd
+ ldrh r1, [r3, r1]
+ ldr r3, _020B4160 ; =mtxCacheBuffer_
+ moveq r2, #0x18
+ add r1, r3, r1, lsl #0x5
+ ldreq r3, _020B4168 ; =mtxStackFor2DHW_
+ mlaeq r12, r0, r2, r3
+ beq _020B40E4
+ mov r2, #0x18
+ mul r3, r0, r2
+ ldr r2, _020B416C ; =mtxStack_ + 0x10
+ ldr r0, _020B4170 ; =mtxStack_ + 0x14
+ ldr r2, [r2, r3]
+ ldr ip, _020B4174 ; =mtxI_
+ ldr r0, [r0, r3]
+ str r2, [r12, #0x10]
+ str r0, [r12, #0x14]
+_020B40E4:
+ ldr r2, [r12, #0x0]
+ ldr r0, _020B4154 ; =stackPos_
+ str r2, [r1, #0x0]
+ ldr r2, [r12, #0x4]
+ str r2, [r1, #0x4]
+ ldr r2, [r12, #0x8]
+ str r2, [r1, #0x8]
+ ldr r2, [r12, #0xc]
+ str r2, [r1, #0xc]
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x10
+ movs lr, r0, lsr #0x10
+ addmi sp, sp, #0x4
+ ldmmiia sp!, {r4-r5,pc}
+ ldr r3, _020B4158 ; =mtxStateStack_
+ mov r0, #0x3
+_020B4124:
+ add r2, r3, lr, lsl #0x3
+ ldrh r1, [r2, #0x2]
+ mov r12, lr, lsl #0x3
+ cmp r5, r1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+ strh r0, [r2, #0x4]
+ strh r4, [r3, r12]
+ subs lr, lr, #0x1
+ bpl _020B4124
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4154: .word stackPos_
+_020B4158: .word mtxStateStack_
+_020B415C: .word currentMtxCachePos_
+_020B4160: .word mtxCacheBuffer_
+_020B4164: .word bDonotUseSRTransform
+_020B4168: .word mtxStackFor2DHW_
+_020B416C: .word mtxStack_ + 0x10
+_020B4170: .word mtxStack_ + 0x14
+_020B4174: .word mtxI_
+ arm_func_end NNSi_G2dMCMStoreCurrentMtxToMtxCache
+
+ arm_func_start NNSi_G2dIdentity
+NNSi_G2dIdentity: ; 0x020B4178
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B4220 ; =bDonotUseSRTransform
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020B41B8
+ ldr r1, _020B4224 ; =stackPos_
+ mov r0, #0x18
+ ldr r12, [r1, #0x0]
+ ldr r1, _020B4228 ; =mtxStack_ + 0x10
+ mul r3, r12, r0
+ mov r2, #0x0
+ ldr r0, _020B422C ; =mtxStack_ + 0x14
+ str r2, [r1, r3]
+ str r2, [r0, r3]
+ b _020B420C
+_020B41B8:
+ ldr r0, _020B4224 ; =stackPos_
+ mov lr, #0x18
+ ldr r1, [r0, #0x0]
+ ldr r4, _020B4230 ; =mtxStack_
+ mul r3, r1, lr
+ mov r2, #0x1000
+ str r2, [r4, r3]
+ add r5, r4, r3
+ mov r1, #0x0
+ str r1, [r5, #0x4]
+ str r1, [r5, #0x8]
+ str r2, [r5, #0xc]
+ str r1, [r5, #0x10]
+ str r1, [r5, #0x14]
+ ldr r12, [r0, #0x0]
+ ldr r4, _020B4234 ; =mtxStackFor2DHW_
+ ldmia r5!, {r0-r3}
+ mla lr, r12, lr, r4
+ stmia lr!, {r0-r3}
+ ldmia r5, {r0-r1}
+ stmia lr, {r0-r1}
+_020B420C:
+ ldr r0, _020B4238 ; =fxZStack_
+ mov r1, #0x0
+ str r1, [r0, r12, lsl #0x2]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4220: .word bDonotUseSRTransform
+_020B4224: .word stackPos_
+_020B4228: .word mtxStack_ + 0x10
+_020B422C: .word mtxStack_ + 0x14
+_020B4230: .word mtxStack_
+_020B4234: .word mtxStackFor2DHW_
+_020B4238: .word fxZStack_
+ arm_func_end NNSi_G2dIdentity
diff --git a/arm9/asm/NNS_G2D_g2d_renderercor.s b/arm9/asm/NNS_G2D_g2d_renderercor.s
new file mode 100644
index 00000000..bf415c1c
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_renderercor.s
@@ -0,0 +1,1095 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global mtxIdentity_
+mtxIdentity_: ; 0x020FF958
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ ; static const in function
+
+ .section .bss
+
+ .global pTheInstance_
+pTheInstance_: ; 0x021CED14
+ .space 0x4
+
+ .section .text
+
+ arm_func_start NNS_G2dRndCoreDrawCellVramTransfer
+NNS_G2dRndCoreDrawCellVramTransfer: ; 0x020B4BF4
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, _020B4CD8 ; =pTheInstance_
+ mov r6, r0
+ ldr r3, [r2, #0x0]
+ mov r4, r1
+ ldr r5, [r3, #0x0]
+ ldr r0, [r5, #0x10]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r0, #0x1
+ str r0, [r3, #0x30]
+ ldr r3, [r5, #0x18]
+ cmp r3, #0x0
+ beq _020B4C38
+ ldr r0, [r2, #0x0]
+ mov r1, r6
+ blx r3
+_020B4C38:
+ ldr r0, _020B4CD8 ; =pTheInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B4CB8
+ mvn r0, #0x0
+ cmp r4, r0
+ beq _020B4C7C
+ mov r0, r4
+ ldr r4, [r5, #0x14]
+ bl NNSi_G2dGetCellTransferState
+ mov r3, #0x1
+ mvn r1, r3, lsl r4
+ ldr r2, [r0, #0x20]
+ and r1, r2, r1
+ orr r1, r1, r3, lsl r4
+ str r1, [r0, #0x20]
+_020B4C7C:
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B4CB8
+ ; Jump table
+ b _020B4C9C ; case 0
+ b _020B4CAC ; case 1
+ b _020B4CAC ; case 2
+ b _020B4CB8 ; case 3
+_020B4C9C:
+ mov r0, r5
+ mov r1, r6
+ bl DrawCellToSurface3D_
+ b _020B4CB8
+_020B4CAC:
+ mov r0, r5
+ mov r1, r6
+ bl DrawCellToSurface2D_
+_020B4CB8:
+ ldr r2, [r5, #0x1c]
+ cmp r2, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r0, _020B4CD8 ; =pTheInstance_
+ mov r1, r6
+ ldr r0, [r0, #0x0]
+ blx r2
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B4CD8: .word pTheInstance_
+ arm_func_end NNS_G2dRndCoreDrawCellVramTransfer
+
+ arm_func_start NNS_G2dRndCoreDrawCell
+NNS_G2dRndCoreDrawCell: ; 0x020B4CDC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B4D9C ; =pTheInstance_
+ mov r5, r0
+ ldr r2, [r1, #0x0]
+ ldr r4, [r2, #0x0]
+ ldr r0, [r4, #0x10]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ mov r0, #0x1
+ str r0, [r2, #0x30]
+ ldr r2, [r4, #0x18]
+ cmp r2, #0x0
+ beq _020B4D24
+ ldr r0, [r1, #0x0]
+ mov r1, r5
+ blx r2
+_020B4D24:
+ ldr r0, _020B4D9C ; =pTheInstance_
+ ldr r0, [r0, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B4D74
+ ldr r0, [r4, #0x14]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020B4D74
+ ; Jump table
+ b _020B4D58 ; case 0
+ b _020B4D68 ; case 1
+ b _020B4D68 ; case 2
+ b _020B4D74 ; case 3
+_020B4D58:
+ mov r0, r4
+ mov r1, r5
+ bl DrawCellToSurface3D_
+ b _020B4D74
+_020B4D68:
+ mov r0, r4
+ mov r1, r5
+ bl DrawCellToSurface2D_
+_020B4D74:
+ ldr r2, [r4, #0x1c]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r0, _020B4D9C ; =pTheInstance_
+ mov r1, r5
+ ldr r0, [r0, #0x0]
+ blx r2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4D9C: .word pTheInstance_
+ arm_func_end NNS_G2dRndCoreDrawCell
+
+ arm_func_start NNS_G2dRndCoreEndRendering
+NNS_G2dRndCoreEndRendering: ; 0x020B4DA0
+ ldr r0, _020B4E00 ; =pTheInstance_
+ ldr r3, [r0, #0x0]
+ ldr r1, [r3, #0x0]
+ ldr r1, [r1, #0x14]
+ cmp r1, #0x0
+ bne _020B4DD8
+ ldr r2, _020B4E04 ; =0x04000440
+ mov r1, #0x0
+ ldr r0, _020B4E08 ; =0x04000448
+ str r1, [r2, #0x0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ str r1, [r2, #0x0]
+ b _020B4DF0
+_020B4DD8:
+ mov r2, #0x0
+ str r2, [r3, #0x10]
+ ldr r1, [r0, #0x0]
+ str r2, [r1, #0x2c]
+ ldr r0, [r0, #0x0]
+ str r2, [r0, #0x28]
+_020B4DF0:
+ ldr r0, _020B4E00 ; =pTheInstance_
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ .balign 4
+_020B4E00: .word pTheInstance_
+_020B4E04: .word 0x04000440
+_020B4E08: .word 0x04000448
+ arm_func_end NNS_G2dRndCoreEndRendering
+
+ arm_func_start NNS_G2dRndCoreBeginRendering
+NNS_G2dRndCoreBeginRendering: ; 0x020B4E0C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r2, _020B4F28 ; =pTheInstance_
+ mov r4, r0
+ str r4, [r2, #0x0]
+ ldr r0, [r4, #0x0]
+ ldr r5, [r0, #0x14]
+ cmp r5, #0x0
+ bne _020B4ED8
+ ldr lr, _020B4F2C ; =0x04000440
+ mov r1, #0x0
+ ldr r0, _020B4F30 ; =0x04000444
+ str r1, [lr, #0x0]
+ str r1, [r0, #0x0]
+ ldr r12, [r4, #0x0]
+ ldr r0, _020B4F34 ; =0x04000470
+ ldr r3, [r12, #0x0]
+ ldr r12, [r12, #0x4]
+ rsb r3, r3, #0x0
+ str r3, [r0, #0x0]
+ rsb r3, r12, #0x0
+ str r3, [r0, #0x0]
+ str r1, [r0, #0x0]
+ mov r0, #0x1
+ str r0, [lr, #0x0]
+ ldr r0, [r2, #0x0]
+ ldr r5, [r0, #0x8]
+ mov r0, r5
+ bl NNS_G2dIsImageReadyToUse
+ cmp r0, #0x0
+ moveq r0, #0x0
+ beq _020B4E98
+ mov r0, r5
+ mov r1, #0x0
+ bl NNS_G2dGetImageLocation
+_020B4E98:
+ ldr r1, _020B4F28 ; =pTheInstance_
+ str r0, [r4, #0x14]
+ ldr r0, [r1, #0x0]
+ mov r1, #0x0
+ ldr r5, [r0, #0xc]
+ mov r0, r5
+ bl NNS_G2dIsImagePaletteReadyToUse
+ cmp r0, #0x0
+ moveq r0, #0x0
+ beq _020B4ECC
+ mov r0, r5
+ mov r1, #0x0
+ bl NNS_G2dGetImagePaletteLocation
+_020B4ECC:
+ add sp, sp, #0x4
+ str r0, [r4, #0x18]
+ ldmia sp!, {r4-r5,pc}
+_020B4ED8:
+ ldr r4, [r4, #0x8]
+ mov r1, r5
+ mov r0, r4
+ bl NNS_G2dIsImageReadyToUse
+ cmp r0, #0x0
+ moveq r1, #0x0
+ beq _020B4F14
+ mov r0, r4
+ mov r1, r5
+ bl NNS_G2dGetImageLocation
+ ldr r1, [r4, #0x20]
+ and r1, r1, #0x700000
+ mov r1, r1, asr #0x14
+ add r1, r1, #0x5
+ mov r1, r0, lsr r1
+_020B4F14:
+ ldr r0, _020B4F28 ; =pTheInstance_
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B4F28: .word pTheInstance_
+_020B4F2C: .word 0x04000440
+_020B4F30: .word 0x04000444
+_020B4F34: .word 0x04000470
+ arm_func_end NNS_G2dRndCoreBeginRendering
+
+ arm_func_start NNS_G2dSetRndCoreFlipMode
+NNS_G2dSetRndCoreFlipMode: ; 0x020B4F38
+ cmp r1, #0x0
+ ldrne r1, [r0, #0x24]
+ orrne r1, r1, #0x1
+ strne r1, [r0, #0x24]
+ ldreq r1, [r0, #0x24]
+ biceq r1, r1, #0x1
+ streq r1, [r0, #0x24]
+ cmp r2, #0x0
+ ldrne r1, [r0, #0x24]
+ orrne r1, r1, #0x2
+ strne r1, [r0, #0x24]
+ ldreq r1, [r0, #0x24]
+ biceq r1, r1, #0x2
+ streq r1, [r0, #0x24]
+ bx lr
+ arm_func_end NNS_G2dSetRndCoreFlipMode
+
+ arm_func_start NNS_G2dIsRndCoreFlipV
+NNS_G2dIsRndCoreFlipV: ; 0x020B4F74
+ ldr r0, [r0, #0x24]
+ ands r0, r0, #0x2
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dIsRndCoreFlipV
+
+ arm_func_start NNS_G2dIsRndCoreFlipH
+NNS_G2dIsRndCoreFlipH: ; 0x020B4F88
+ ldr r0, [r0, #0x24]
+ ands r0, r0, #0x1
+ movne r0, #0x1
+ moveq r0, #0x0
+ bx lr
+ arm_func_end NNS_G2dIsRndCoreFlipH
+
+ arm_func_start NNS_G2dSetRndCoreSurface
+NNS_G2dSetRndCoreSurface: ; 0x020B4F9C
+ str r1, [r0, #0x0]
+ bx lr
+ arm_func_end NNS_G2dSetRndCoreSurface
+
+ arm_func_start NNS_G2dSetRndCore3DSoftSpriteZvalue
+NNS_G2dSetRndCore3DSoftSpriteZvalue: ; 0x020B4FA4
+ str r1, [r0, #0x34]
+ bx lr
+ arm_func_end NNS_G2dSetRndCore3DSoftSpriteZvalue
+
+ arm_func_start NNS_G2dSetRndCoreCurrentMtx2D
+NNS_G2dSetRndCoreCurrentMtx2D: ; 0x020B4FAC
+ ldr r2, _020B4FC0 ; =pTheInstance_
+ ldr r2, [r2, #0x0]
+ str r0, [r2, #0x2c]
+ str r1, [r2, #0x28]
+ bx lr
+ .balign 4
+_020B4FC0: .word pTheInstance_
+ arm_func_end NNS_G2dSetRndCoreCurrentMtx2D
+
+ arm_func_start NNS_G2dSetRndCoreCurrentMtx3D
+NNS_G2dSetRndCoreCurrentMtx3D: ; 0x020B4FC4
+ ldr r1, _020B5028 ; =pTheInstance_
+ mov r3, #0x0
+ ldr r12, [r1, #0x0]
+ mov r1, #0x1000
+ str r0, [r12, #0x2c]
+ ldr r2, [r0, #0x0]
+ str r2, [r12, #0x40]
+ ldr r2, [r0, #0x4]
+ str r2, [r12, #0x44]
+ str r3, [r12, #0x48]
+ ldr r2, [r0, #0x8]
+ str r2, [r12, #0x4c]
+ ldr r2, [r0, #0xc]
+ str r2, [r12, #0x50]
+ str r3, [r12, #0x54]
+ str r3, [r12, #0x58]
+ str r3, [r12, #0x5c]
+ str r1, [r12, #0x60]
+ ldr r1, [r0, #0x10]
+ str r1, [r12, #0x64]
+ ldr r0, [r0, #0x14]
+ str r0, [r12, #0x68]
+ ldr r0, [r12, #0x34]
+ str r0, [r12, #0x6c]
+ bx lr
+ .balign 4
+_020B5028: .word pTheInstance_
+ arm_func_end NNS_G2dSetRndCoreCurrentMtx3D
+
+ arm_func_start NNS_G2dSetRndCoreAffineOverwriteMode
+NNS_G2dSetRndCoreAffineOverwriteMode: ; 0x020B502C
+ str r1, [r0, #0x4]
+ bx lr
+ arm_func_end NNS_G2dSetRndCoreAffineOverwriteMode
+
+ arm_func_start NNS_G2dSetRndCoreOamRegisterFunc
+NNS_G2dSetRndCoreOamRegisterFunc: ; 0x020B5034
+ str r1, [r0, #0x1c]
+ str r2, [r0, #0x20]
+ bx lr
+ arm_func_end NNS_G2dSetRndCoreOamRegisterFunc
+
+ arm_func_start NNS_G2dSetRndCoreImageProxy
+NNS_G2dSetRndCoreImageProxy: ; 0x020B5040
+ str r1, [r0, #0x8]
+ str r2, [r0, #0xc]
+ bx lr
+ arm_func_end NNS_G2dSetRndCoreImageProxy
+
+ arm_func_start NNS_G2dInitRndCore
+NNS_G2dInitRndCore: ; 0x020B504C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r1, r4
+ mov r0, #0x0
+ mov r2, #0x70
+ bl MIi_CpuClear16
+ mov r1, #0x0
+ str r1, [r4, #0x0]
+ mov r0, #0x2
+ str r0, [r4, #0x4]
+ str r1, [r4, #0x8]
+ str r1, [r4, #0xc]
+ str r1, [r4, #0x24]
+ mov r0, #0x1
+ str r0, [r4, #0x30]
+ str r1, [r4, #0x28]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G2dInitRndCore
+
+ arm_func_start DrawCellToSurface3D_
+DrawCellToSurface3D_: ; 0x020B5090
+ stmdb sp!, {r4-r10,lr}
+ ldr r5, _020B5158 ; =pTheInstance_
+ mov r9, r1
+ ldrh r1, [r9, #0x0]
+ ldr r2, [r5, #0x0]
+ mov r10, r0
+ add r7, r2, #0x38
+ mov r8, #0x0
+ cmp r1, #0x0
+ ldmlsia sp!, {r4-r10,pc}
+ mov r6, #0x1
+ mov r4, #0x6
+_020B50C0:
+ mul r1, r8, r4
+ ldr r0, [r5, #0x0]
+ str r6, [r0, #0x30]
+ ldr r2, [r9, #0x4]
+ ldrh r0, [r2, r1]
+ add r1, r2, r1
+ strh r0, [r7, #0x0]
+ ldrh r0, [r1, #0x2]
+ strh r0, [r7, #0x2]
+ ldrh r0, [r1, #0x4]
+ strh r0, [r7, #0x4]
+ ldr r3, [r10, #0x20]
+ cmp r3, #0x0
+ beq _020B5108
+ ldr r0, [r5, #0x0]
+ mov r1, r9
+ mov r2, r8
+ blx r3
+_020B5108:
+ ldr r0, [r5, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B5120
+ mov r0, r7
+ bl DrawOamToSurface3D_
+_020B5120:
+ ldr r3, [r10, #0x24]
+ cmp r3, #0x0
+ beq _020B513C
+ ldr r0, [r5, #0x0]
+ mov r1, r9
+ mov r2, r8
+ blx r3
+_020B513C:
+ add r0, r8, #0x1
+ mov r0, r0, lsl #0x10
+ ldrh r1, [r9, #0x0]
+ mov r8, r0, lsr #0x10
+ cmp r8, r1
+ blo _020B50C0
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B5158: .word pTheInstance_
+ arm_func_end DrawCellToSurface3D_
+
+ arm_func_start DrawOamToSurface3D_
+DrawOamToSurface3D_: ; 0x020B515C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldr r1, _020B53A4 ; =pTheInstance_
+ mov r7, r0
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x40
+ bl G3_LoadMtx43
+ ldr r0, _020B53A4 ; =pTheInstance_
+ ldr r0, [r0, #0x0]
+ ldr r1, [r0, #0x24]
+ cmp r1, #0x0
+ beq _020B533C
+ ldr r2, [r7, #0x0]
+ ldr r1, _020B53A8 ; =0xC000C000
+ and r4, r2, r1
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ beq _020B51F4
+ ldr r0, [r7, #0x0]
+ and r2, r4, #0xc000
+ mov r0, r0, lsl #0x7
+ mov r3, r0, lsr #0x17
+ and r1, r4, #0xc0000000
+ mov r1, r1, lsr #0x1e
+ ldr r0, _020B53AC ; =NNSi_objSizeWTbl
+ mov r2, r2, asr #0xe
+ mov r1, r1, lsl #0x1
+ add r0, r0, r2, lsl #0x3
+ cmp r3, #0xff
+ ldrh r1, [r1, r0]
+ orrgt r0, r3, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r3, r0, asr #0x10
+ add r0, r3, r1
+ rsb r0, r0, #0x0
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+ b _020B5218
+_020B51F4:
+ ldr r0, [r7, #0x0]
+ mov r0, r0, lsl #0x7
+ mov r0, r0, lsr #0x17
+ cmp r0, #0xff
+ orrgt r0, r0, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r0, r0, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r0, lsr #0x10
+_020B5218:
+ ldr r0, _020B53A4 ; =pTheInstance_
+ mov r1, r1, lsl #0x10
+ ldr r0, [r0, #0x0]
+ mov r6, r1, asr #0x10
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ beq _020B527C
+ and r1, r4, #0xc000
+ and r0, r4, #0xc0000000
+ ldrb r4, [r7, #0x0]
+ ldr r2, _020B53B0 ; =NNSi_objSizeHTbl
+ mov r0, r0, lsr #0x1e
+ mov r3, r1, asr #0xe
+ mov r1, r0, lsl #0x1
+ add r0, r2, r3, lsl #0x3
+ cmp r4, #0x7f
+ ldrh r1, [r1, r0]
+ orrgt r0, r4, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r4, r0, asr #0x10
+ add r0, r4, r1
+ rsb r0, r0, #0x0
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+ b _020B5298
+_020B527C:
+ ldrb r0, [r7, #0x0]
+ cmp r0, #0x7f
+ orrgt r0, r0, #0xff00
+ movgt r0, r0, lsl #0x10
+ movgt r0, r0, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r4, r0, lsr #0x10
+_020B5298:
+ ldr r0, _020B53A4 ; =pTheInstance_
+ ldr r1, [r7, #0x0]
+ ldr r0, [r0, #0x0]
+ mov r5, r1, lsl #0x3
+ bl NNS_G2dIsRndCoreFlipH
+ ldr r2, [r7, #0x0]
+ ldr r1, _020B53A4 ; =pTheInstance_
+ eor r5, r0, r5, lsr #0x1f
+ ldr r0, [r1, #0x0]
+ mov r8, r2, lsl #0x2
+ bl NNS_G2dIsRndCoreFlipV
+ ldr r2, [r7, #0x0]
+ eor r1, r0, r8, lsr #0x1f
+ bic r0, r2, #0x10000000
+ str r0, [r7, #0x0]
+ ldr r2, [r7, #0x0]
+ ldr r3, _020B53A4 ; =pTheInstance_
+ orr r2, r2, r5, lsl #0x1c
+ str r2, [r7, #0x0]
+ ldr r2, [r7, #0x0]
+ mov r0, r6
+ bic r2, r2, #0x20000000
+ str r2, [r7, #0x0]
+ ldr r5, [r7, #0x0]
+ mov r2, r4, lsl #0x10
+ orr r1, r5, r1, lsl #0x1d
+ str r1, [r7, #0x0]
+ ldr r5, [r3, #0x0]
+ mov r1, r2, asr #0x10
+ ldr r4, [r5, #0x8]
+ mov r3, r7
+ add r2, r4, #0xc
+ str r2, [sp, #0x0]
+ ldr r4, [r5, #0x14]
+ mvn r2, #0x0
+ str r4, [sp, #0x4]
+ ldr r4, [r5, #0x18]
+ str r4, [sp, #0x8]
+ bl NNS_G2dDrawOneOam3DDirectWithPosFast
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+_020B533C:
+ ldr r2, _020B53A4 ; =pTheInstance_
+ ldr r0, [r7, #0x0]
+ ldr r5, [r2, #0x0]
+ mov r0, r0, lsl #0x7
+ ldr r4, [r5, #0x8]
+ mov r0, r0, lsr #0x17
+ cmp r0, #0xff
+ orrgt r0, r0, #0xff00
+ movgt r0, r0, lsl #0x10
+ ldrb r1, [r7, #0x0]
+ add r4, r4, #0xc
+ movgt r0, r0, asr #0x10
+ str r4, [sp, #0x0]
+ ldr r4, [r5, #0x14]
+ cmp r1, #0x7f
+ orrgt r1, r1, #0xff00
+ movgt r1, r1, lsl #0x10
+ str r4, [sp, #0x4]
+ ldr r4, [r5, #0x18]
+ movgt r1, r1, asr #0x10
+ mov r3, r7
+ mvn r2, #0x0
+ str r4, [sp, #0x8]
+ bl NNS_G2dDrawOneOam3DDirectWithPosFast
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B53A4: .word pTheInstance_
+_020B53A8: .word 0xC000C000
+_020B53AC: .word NNSi_objSizeWTbl
+_020B53B0: .word NNSi_objSizeHTbl
+ arm_func_end DrawOamToSurface3D_
+
+ arm_func_start DrawCellToSurface2D_
+DrawCellToSurface2D_: ; 0x020B53B4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x44
+ ldr r2, _020B57B0 ; =pTheInstance_
+ mov r10, r0
+ ldr r0, [r2, #0x0]
+ mov r11, r1
+ ldr r9, [r0, #0x2c]
+ ldr r1, _020B57B0 ; =pTheInstance_
+ cmp r9, #0x0
+ ldreq sb, _020B57B4 ; =mtxIdentity_
+ ldr r3, [r1, #0x0]
+ ldr r4, [r9, #0x10]
+ str r4, [sp, #0x18]
+ ldr r2, [r9, #0x14]
+ str r2, [sp, #0x1c]
+ ldr r1, [r10, #0x0]
+ sub r1, r4, r1
+ str r1, [sp, #0x18]
+ ldr r1, [r10, #0x4]
+ sub r1, r2, r1
+ str r1, [sp, #0x1c]
+ ldr r2, [r3, #0x24]
+ ldr r1, [r3, #0x10]
+ cmp r2, #0x0
+ str r1, [sp, #0x4]
+ bne _020B5430
+ ldr r1, [r3, #0x28]
+ cmp r1, #0x0
+ movne r1, #0x1
+ strne r1, [sp, #0x0]
+ bne _020B5438
+_020B5430:
+ mov r1, #0x0
+ str r1, [sp, #0x0]
+_020B5438:
+ ldrh r1, [r11, #0x0]
+ add r7, r0, #0x38
+ mov r8, #0x0
+ cmp r1, #0x0
+ addls sp, sp, #0x44
+ ldmlsia sp!, {r4-r11,pc}
+ mov r0, #0x1
+ ldr r4, _020B57B0 ; =pTheInstance_
+ str r8, [sp, #0x14]
+ str r0, [sp, #0xc]
+_020B5460:
+ ldr r2, [r4, #0x0]
+ ldr r0, [sp, #0xc]
+ mov r1, #0x6
+ str r0, [r2, #0x30]
+ mul r0, r8, r1
+ ldr r1, [r11, #0x4]
+ add r2, r1, r0
+ ldrh r0, [r1, r0]
+ strh r0, [r7, #0x0]
+ ldrh r0, [r2, #0x2]
+ strh r0, [r7, #0x2]
+ ldrh r0, [r2, #0x4]
+ strh r0, [r7, #0x4]
+ ldr r3, [r10, #0x20]
+ cmp r3, #0x0
+ beq _020B54B0
+ ldr r0, [r4, #0x0]
+ mov r1, r11
+ mov r2, r8
+ blx r3
+_020B54B0:
+ ldr r0, [r4, #0x0]
+ ldr r0, [r0, #0x30]
+ cmp r0, #0x0
+ beq _020B5790
+ ldr r0, [sp, #0x0]
+ ldr r1, [r7, #0x4]
+ cmp r0, #0x0
+ mov r0, #0x400
+ rsb r0, r0, #0x0
+ and r2, r1, r0
+ ldr r0, [sp, #0x4]
+ mov r1, r1, lsl #0x16
+ add r1, r0, r1, lsr #0x16
+ ldr r0, _020B57B8 ; =0x000003FF
+ and r0, r1, r0
+ orr r0, r2, r0
+ str r0, [r7, #0x4]
+ beq _020B5600
+ ldr r0, [r10, #0x14]
+ ldr lr, [r4, #0x0]
+ sub r1, r0, #0x1
+ ldr r0, [r7, #0x0]
+ ldr r6, [lr, #0x28]
+ mov r2, r0, lsl #0x2
+ mov r2, r2, lsr #0x1f
+ mov r2, r2, lsl #0x1
+ mov r0, r0, lsl #0x3
+ orr r5, r2, r0, lsr #0x1f
+ add r0, r6, r5, lsl #0x2
+ add r0, r0, r1, lsl #0x1
+ ldrh r1, [r0, #0x10]
+ ldr r0, _020B57BC ; =0x0000FFFF
+ str r1, [sp, #0x8]
+ cmp r1, r0
+ bne _020B55CC
+ cmp r5, #0x0
+ bne _020B5558
+ ldr r1, [lr, #0x20]
+ mov r0, r6
+ blx r1
+ str r0, [sp, #0x8]
+ b _020B55B4
+_020B5558:
+ ands r0, r5, #0x1
+ add r12, sp, #0x30
+ ldmia r6, {r0-r3}
+ stmia r12, {r0-r3}
+ beq _020B5584
+ ldr r1, [sp, #0x30]
+ ldr r0, [sp, #0x34]
+ rsb r1, r1, #0x0
+ str r1, [sp, #0x30]
+ rsb r0, r0, #0x0
+ str r0, [sp, #0x34]
+_020B5584:
+ ands r0, r5, #0x2
+ beq _020B55A4
+ ldr r1, [sp, #0x38]
+ ldr r0, [sp, #0x3c]
+ rsb r1, r1, #0x0
+ str r1, [sp, #0x38]
+ rsb r0, r0, #0x0
+ str r0, [sp, #0x3c]
+_020B55A4:
+ ldr r1, [lr, #0x20]
+ add r0, sp, #0x30
+ blx r1
+ str r0, [sp, #0x8]
+_020B55B4:
+ ldr r1, [r10, #0x14]
+ add r0, r6, r5, lsl #0x2
+ sub r1, r1, #0x1
+ add r1, r0, r1, lsl #0x1
+ ldr r0, [sp, #0x8]
+ strh r0, [r1, #0x10]
+_020B55CC:
+ ldr r1, [r9, #0x0]
+ add r0, sp, #0x20
+ str r1, [sp, #0x20]
+ ldr r2, [r9, #0x4]
+ mov r1, r7
+ str r2, [sp, #0x24]
+ ldr r3, [r9, #0x8]
+ add r2, sp, #0x18
+ str r3, [sp, #0x28]
+ ldr r3, [r9, #0xc]
+ str r3, [sp, #0x2c]
+ bl DoAffineTransforme_
+ b _020B5750
+_020B5600:
+ ldr r0, _020B57C0 ; =0x0000FFFE
+ str r0, [sp, #0x8]
+ ldr r0, [r4, #0x0]
+ ldr r1, [r0, #0x24]
+ cmp r1, #0x0
+ beq _020B5714
+ ldr r2, [r7, #0x0]
+ ldr r1, _020B57C4 ; =0xC000C000
+ mov r6, r2, lsl #0x3
+ and r5, r2, r1
+ bl NNS_G2dIsRndCoreFlipH
+ ldr r1, [r7, #0x0]
+ eor r6, r0, r6, lsr #0x1f
+ mov r1, r1, lsl #0x2
+ ldr r0, [r4, #0x0]
+ str r1, [sp, #0x10]
+ bl NNS_G2dIsRndCoreFlipV
+ ldr r1, [sp, #0x10]
+ eor r0, r0, r1, lsr #0x1f
+ ldr r1, [r7, #0x0]
+ bic r1, r1, #0x10000000
+ str r1, [r7, #0x0]
+ ldr r1, [r7, #0x0]
+ orr r1, r1, r6, lsl #0x1c
+ str r1, [r7, #0x0]
+ ldr r1, [r7, #0x0]
+ bic r1, r1, #0x20000000
+ str r1, [r7, #0x0]
+ ldr r1, [r7, #0x0]
+ orr r0, r1, r0, lsl #0x1d
+ str r0, [r7, #0x0]
+ ldr r0, [r4, #0x0]
+ bl NNS_G2dIsRndCoreFlipH
+ cmp r0, #0x0
+ beq _020B56D4
+ and r1, r5, #0xc000
+ mov r2, r1, asr #0xe
+ ldr r1, _020B57C8 ; =NNSi_objSizeWTbl
+ and r3, r5, #0xc0000000
+ mov r3, r3, lsr #0x1e
+ add r2, r1, r2, lsl #0x3
+ mov r3, r3, lsl #0x1
+ ldr r0, [r7, #0x0]
+ ldr r1, _020B57CC ; =0xFE00FFFF
+ ldrh r2, [r3, r2]
+ and r1, r0, r1
+ mov r0, r0, lsl #0x7
+ add r0, r2, r0, lsr #0x17
+ rsb r2, r0, #0x0
+ ldr r0, _020B57D0 ; =0x000001FF
+ and r0, r2, r0
+ orr r0, r1, r0, lsl #0x10
+ str r0, [r7, #0x0]
+_020B56D4:
+ ldr r0, [r4, #0x0]
+ bl NNS_G2dIsRndCoreFlipV
+ cmp r0, #0x0
+ beq _020B5714
+ and r1, r5, #0xc000
+ mov r3, r1, asr #0xe
+ and r1, r5, #0xc0000000
+ mov r1, r1, lsr #0x1e
+ mov r2, r1, lsl #0x1
+ ldr r1, _020B57D4 ; =NNSi_objSizeHTbl
+ ldrb r0, [r7, #0x0]
+ add r1, r1, r3, lsl #0x3
+ ldrh r1, [r2, r1]
+ add r0, r0, r1
+ rsb r0, r0, #0x0
+ strb r0, [r7, #0x0]
+_020B5714:
+ ldr r2, [r7, #0x0]
+ ldr r0, _020B57CC ; =0xFE00FFFF
+ ldr r1, [sp, #0x18]
+ and r0, r2, r0
+ mov r2, r2, lsl #0x7
+ mov r2, r2, lsr #0x17
+ add r2, r2, r1, asr #0xc
+ ldr r1, _020B57D0 ; =0x000001FF
+ and r1, r2, r1
+ orr r0, r0, r1, lsl #0x10
+ str r0, [r7, #0x0]
+ ldrb r1, [r7, #0x0]
+ ldr r0, [sp, #0x1c]
+ add r0, r1, r0, asr #0xc
+ strb r0, [r7, #0x0]
+_020B5750:
+ ldr r3, [r4, #0x0]
+ ldr r1, [sp, #0x8]
+ ldr r2, [sp, #0x14]
+ ldr r3, [r3, #0x1c]
+ mov r0, r7
+ blx r3
+ cmp r0, #0x1
+ addne sp, sp, #0x44
+ ldmneia sp!, {r4-r11,pc}
+ ldr r3, [r10, #0x24]
+ cmp r3, #0x0
+ beq _020B5790
+ ldr r0, [r4, #0x0]
+ mov r1, r11
+ mov r2, r8
+ blx r3
+_020B5790:
+ add r0, r8, #0x1
+ mov r0, r0, lsl #0x10
+ mov r8, r0, lsr #0x10
+ ldrh r0, [r11, #0x0]
+ cmp r8, r0
+ blo _020B5460
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B57B0: .word pTheInstance_
+_020B57B4: .word mtxIdentity_
+_020B57B8: .word 0x000003FF
+_020B57BC: .word 0x0000FFFF
+_020B57C0: .word 0x0000FFFE
+_020B57C4: .word 0xC000C000
+_020B57C8: .word NNSi_objSizeWTbl
+_020B57CC: .word 0xFE00FFFF
+_020B57D0: .word 0x000001FF
+_020B57D4: .word NNSi_objSizeHTbl
+ arm_func_end DrawCellToSurface2D_
+
+ arm_func_start DoAffineTransforme_
+DoAffineTransforme_: ; 0x020B57D8
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldr r4, [r1, #0x0]
+ ldr r3, _020B5A9C ; =0x01FF0000
+ and r3, r4, r3
+ mov r3, r3, lsr #0x10
+ mov r3, r3, lsl #0x10
+ mov r3, r3, asr #0x10
+ cmp r3, #0xff
+ orrgt r3, r3, #0xff00
+ movgt r3, r3, lsl #0x10
+ movgt r3, r3, asr #0x10
+ mov r3, r3, lsl #0xc
+ str r3, [sp, #0x0]
+ ldr r3, [r1, #0x0]
+ and r3, r3, #0xff
+ mov r3, r3, lsl #0x10
+ mov r3, r3, asr #0x10
+ cmp r3, #0x7f
+ orrgt r3, r3, #0xff00
+ movgt r3, r3, lsl #0x10
+ movgt r3, r3, asr #0x10
+ mov r3, r3, lsl #0xc
+ str r3, [sp, #0x4]
+ ldr r5, [r1, #0x0]
+ and r4, r5, #0x300
+ cmp r4, #0x100
+ beq _020B5858
+ cmp r4, #0x300
+ beq _020B5858
+ and r3, r5, #0x30000000
+ orr r4, r4, r3
+_020B5858:
+ cmp r4, #0x300
+ bne _020B58AC
+ ldr r3, _020B5AA0 ; =0xC000C000
+ ldr r4, _020B5AA4 ; =NNSi_objSizeWTbl
+ and r3, r5, r3
+ and r5, r3, #0xc0000000
+ and r3, r3, #0xc000
+ mov r6, r5, lsr #0x1e
+ mov r5, r3, asr #0xe
+ ldr r3, _020B5AA8 ; =NNSi_objSizeHTbl
+ mov r6, r6, lsl #0x1
+ add r4, r4, r5, lsl #0x3
+ add r3, r3, r5, lsl #0x3
+ ldrh r5, [r6, r4]
+ ldr r7, [sp, #0x0]
+ ldrh r3, [r6, r3]
+ ldr r4, [sp, #0x4]
+ add r5, r7, r5, lsl #0xb
+ add r3, r4, r3, lsl #0xb
+ str r5, [sp, #0x0]
+ str r3, [sp, #0x4]
+_020B58AC:
+ ldr r5, [r0, #0x8]
+ ldr r4, [sp, #0x4]
+ add r3, sp, #0x0
+ smull r8, r7, r5, r4
+ cmp r3, r3
+ ldr r6, [r0, #0x0]
+ mov r4, #0x1000
+ addeq r3, sp, #0x8
+ adds r8, r8, r4
+ ldr r5, [sp, #0x0]
+ adc r7, r7, #0x0
+ smlal r8, r7, r6, r5
+ mov r5, r8, lsr #0xc
+ orr r5, r5, r7, lsl #0x14
+ str r5, [r3, #0x0]
+ ldr r7, [r0, #0xc]
+ ldr r6, [sp, #0x4]
+ ldr r5, [r0, #0x4]
+ smull r8, r6, r7, r6
+ adds r7, r8, r4
+ ldr r4, [sp, #0x0]
+ adc r6, r6, #0x0
+ smlal r7, r6, r5, r4
+ mov r5, r7, lsr #0xc
+ add r4, sp, #0x8
+ orr r5, r5, r6, lsl #0x14
+ str r5, [r3, #0x4]
+ cmp r3, r4
+ ldreq r3, [sp, #0xc]
+ ldreq r4, [sp, #0x8]
+ streq r3, [sp, #0x4]
+ ldr r3, _020B5AAC ; =pTheInstance_
+ streq r4, [sp, #0x0]
+ ldr r3, [r3, #0x0]
+ ldr r3, [r3, #0x4]
+ cmp r3, #0x0
+ beq _020B597C
+ cmp r3, #0x2
+ moveq r5, #0x300
+ movne r5, #0x100
+ cmp r5, #0x100
+ ldreq r4, [r1, #0x0]
+ ldreq r3, _020B5AB0 ; =0xC1FFFCFF
+ andeq r3, r4, r3
+ orreq r3, r3, r5
+ streq r3, [r1, #0x0]
+ beq _020B597C
+ ldr r4, [r1, #0x0]
+ ldr r3, _020B5AB0 ; =0xC1FFFCFF
+ and r3, r4, r3
+ orr r3, r3, r5
+ str r3, [r1, #0x0]
+_020B597C:
+ ldr r6, [r1, #0x0]
+ and r5, r6, #0x300
+ cmp r5, #0x100
+ beq _020B599C
+ cmp r5, #0x300
+ beq _020B599C
+ and r3, r6, #0x30000000
+ orr r5, r5, r3
+_020B599C:
+ ldr r3, _020B5AA0 ; =0xC000C000
+ ldr r4, _020B5AA4 ; =NNSi_objSizeWTbl
+ and r3, r6, r3
+ and r6, r3, #0xc0000000
+ and r3, r3, #0xc000
+ mov lr, r3, asr #0xe
+ mov r6, r6, lsr #0x1e
+ mov r3, r6, lsl #0x1
+ add r4, r4, lr, lsl #0x3
+ ldrh r4, [r3, r4]
+ ldr r6, [r0, #0x0]
+ ldr r8, _020B5AA8 ; =NNSi_objSizeHTbl
+ mov r12, r4, asr #0x1
+ mov r4, r12, lsl #0xc
+ rsb r7, r4, #0x0
+ mla r7, r6, r12, r7
+ add lr, r8, lr, lsl #0x3
+ ldrh r3, [r3, lr]
+ ldr r6, [r0, #0x8]
+ ldr lr, [sp, #0x0]
+ mov r3, r3, asr #0x1
+ mla r7, r6, r3, r7
+ add r6, lr, r7
+ str r6, [sp, #0x0]
+ mov lr, r3, lsl #0xc
+ ldr r6, [r0, #0x4]
+ rsb r7, lr, #0x0
+ mla r7, r6, r12, r7
+ ldr r0, [r0, #0xc]
+ ldr r6, [sp, #0x4]
+ mla r3, r0, r3, r7
+ add r0, r6, r3
+ str r0, [sp, #0x4]
+ cmp r5, #0x300
+ moveq r0, #0x1
+ movne r0, #0x0
+ cmp r0, #0x0
+ beq _020B5A4C
+ ldr r3, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ sub r3, r3, r4
+ sub r0, r0, lr
+ str r3, [sp, #0x0]
+ str r0, [sp, #0x4]
+_020B5A4C:
+ ldr r4, [sp, #0x0]
+ ldr r0, [r2, #0x0]
+ ldr r3, [sp, #0x4]
+ add r5, r4, r0
+ str r5, [sp, #0x0]
+ ldr r2, [r2, #0x4]
+ ldr r0, _020B5AB4 ; =0x000001FF
+ add r2, r3, r2
+ str r2, [sp, #0x4]
+ mov r3, r2, asr #0xc
+ ldr r4, [r1, #0x0]
+ ldr r2, _020B5AB8 ; =0xFE00FF00
+ and r3, r3, #0xff
+ and r2, r4, r2
+ and r4, r0, r5, asr #0xc
+ orr r0, r2, r3
+ orr r0, r0, r4, lsl #0x10
+ str r0, [r1, #0x0]
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020B5A9C: .word 0x01FF0000
+_020B5AA0: .word 0xC000C000
+_020B5AA4: .word NNSi_objSizeWTbl
+_020B5AA8: .word NNSi_objSizeHTbl
+_020B5AAC: .word pTheInstance_
+_020B5AB0: .word 0xC1FFFCFF
+_020B5AB4: .word 0x000001FF
+_020B5AB8: .word 0xFE00FF00
+ arm_func_end DoAffineTransforme_
diff --git a/arm9/asm/NNS_G2D_g2d_softsprite.s b/arm9/asm/NNS_G2D_g2d_softsprite.s
new file mode 100644
index 00000000..49cddc88
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_softsprite.s
@@ -0,0 +1,129 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G2dDrawSpriteFast
+NNS_G2dDrawSpriteFast: ; 0x020B0250
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020B02C0 ; =0x04000470
+ mov r0, r0, lsl #0xc
+ str r0, [r5, #0x0]
+ mov r4, r1, lsl #0xc
+ ldr r12, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ ldr r1, [sp, #0x1c]
+ str r4, [r5, #0x0]
+ mov r4, r2, lsl #0xc
+ ldr r2, [sp, #0x18]
+ ldr lr, _020B02C4 ; =0x0400046C
+ str r4, [r5, #0x0]
+ mov r4, r3, lsl #0xc
+ ldr r3, [sp, #0x20]
+ str r4, [lr, #0x0]
+ mov r12, r12, lsl #0xc
+ str r12, [lr, #0x0]
+ mov r12, #0x1000
+ mov r0, r0, lsl #0xc
+ mov r1, r1, lsl #0xc
+ mov r2, r2, lsl #0xc
+ mov r3, r3, lsl #0xc
+ str r12, [lr, #0x0]
+ bl DrawOneQuad_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B02C0: .word 0x04000470
+_020B02C4: .word 0x0400046C
+ arm_func_end NNS_G2dDrawSpriteFast
+
+ arm_func_start NNS_G2dSetupSoftwareSpriteCamera
+NNS_G2dSetupSoftwareSpriteCamera: ; 0x020B02C8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x14
+ ldr r2, _020B0330 ; =0xBFFF0000
+ ldr r0, _020B0334 ; =0x04000580
+ mov r1, #0x400000
+ str r2, [r0, #0x0]
+ rsb r0, r1, #0x0
+ str r0, [sp, #0x0]
+ str r1, [sp, #0x4]
+ mov r0, #0x0
+ str r1, [sp, #0x8]
+ mov r1, #0x1
+ str r1, [sp, #0xc]
+ mov r2, r0
+ mov r1, #0xc0000
+ mov r3, #0x100000
+ str r0, [sp, #0x10]
+ bl G3i_OrthoW_
+ ldr r1, _020B0338 ; =0x0400044C
+ mov r2, #0x0
+ ldr r0, _020B033C ; =0x04000440
+ str r2, [r1, #0x0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x14
+ ldmia sp!, {pc}
+ .balign 4
+_020B0330: .word 0xBFFF0000
+_020B0334: .word 0x04000580
+_020B0338: .word 0x0400044C
+_020B033C: .word 0x04000440
+ arm_func_end NNS_G2dSetupSoftwareSpriteCamera
+
+ arm_func_start DrawOneQuad_
+DrawOneQuad_: ; 0x020B0340
+ stmdb sp!, {r4-r6,lr}
+ mov r3, r3, lsl #0x8
+ mov r0, r0, lsl #0x8
+ mov r4, r3, asr #0x10
+ mov r3, r0, asr #0x10
+ mov r0, r4, lsl #0x10
+ mov r3, r3, lsl #0x10
+ mov r1, r1, lsl #0x8
+ mov r1, r1, asr #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r2, lsl #0x8
+ mov r2, r2, asr #0x10
+ mov r2, r2, lsl #0x10
+ ldr ip, _020B03F4 ; =0x04000500
+ mov lr, #0x1
+ mov r6, r0, lsr #0x10
+ mov r5, r3, lsr #0x10
+ mov r3, r1, lsr #0x10
+ mov r1, r2, lsr #0x10
+ ldr r4, _020B03F8 ; =0x04000488
+ str lr, [r12, #0x0]
+ orr r0, r5, r6, lsl #0x10
+ ldr lr, _020B03FC ; =0x0400048C
+ str r0, [r4, #0x0]
+ mov r0, #0x10000000
+ str r0, [lr, #0x0]
+ mov r12, #0x0
+ str r12, [lr, #0x0]
+ orr r2, r3, r6, lsl #0x10
+ ldr r0, _020B0400 ; =0x10001000
+ str r2, [r4, #0x0]
+ str r0, [lr, #0x0]
+ str r12, [lr, #0x0]
+ orr r0, r3, r1, lsl #0x10
+ str r0, [r4, #0x0]
+ mov r0, #0x1000
+ str r0, [lr, #0x0]
+ str r12, [lr, #0x0]
+ orr r0, r5, r1, lsl #0x10
+ str r0, [r4, #0x0]
+ str r12, [lr, #0x0]
+ ldr r0, _020B0404 ; =0x04000504
+ str r12, [lr, #0x0]
+ str r12, [r0, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B03F4: .word 0x04000500
+_020B03F8: .word 0x04000488
+_020B03FC: .word 0x0400048C
+_020B0400: .word 0x10001000
+_020B0404: .word 0x04000504
+ arm_func_end DrawOneQuad_
diff --git a/arm9/asm/NNS_G2D_g2d_srtcontrol.s b/arm9/asm/NNS_G2D_g2d_srtcontrol.s
new file mode 100644
index 00000000..7c9139ef
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_srtcontrol.s
@@ -0,0 +1,62 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dSrtcSetInitialValue
+NNSi_G2dSrtcSetInitialValue: ; 0x020B1A40
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ add r1, r4, #0x4
+ mov r0, #0x0
+ mov r2, #0x18
+ bl MIi_CpuClear16
+ mov r0, #0x1000
+ str r0, [r4, #0x4]
+ str r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_G2dSrtcSetInitialValue
+
+ arm_func_start NNSi_G2dSrtcInitControl
+NNSi_G2dSrtcInitControl: ; 0x020B1A68
+ ldr ip, _020B1A74 ; =NNSi_G2dSrtcSetInitialValue
+ str r1, [r0, #0x0]
+ bx r12
+ .balign 4
+_020B1A74: .word NNSi_G2dSrtcSetInitialValue
+ arm_func_end NNSi_G2dSrtcInitControl
+
+ arm_func_start NNSi_G2dSrtcSetSRTScale
+NNSi_G2dSrtcSetSRTScale: ; 0x020B1A78
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x1
+ ldreqh r3, [r0, #0x12]
+ orreq r3, r3, #0x2
+ streqh r3, [r0, #0x12]
+ streq r1, [r0, #0x4]
+ streq r2, [r0, #0x8]
+ bx lr
+ arm_func_end NNSi_G2dSrtcSetSRTScale
+
+ arm_func_start NNSi_G2dSrtcSetSRTRotZ
+NNSi_G2dSrtcSetSRTRotZ: ; 0x020B1A98
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x1
+ ldreqh r2, [r0, #0x12]
+ orreq r2, r2, #0x4
+ streqh r2, [r0, #0x12]
+ streqh r1, [r0, #0x10]
+ bx lr
+ arm_func_end NNSi_G2dSrtcSetSRTRotZ
+
+ arm_func_start NNSi_G2dSrtcSetTrans
+NNSi_G2dSrtcSetTrans: ; 0x020B1AB4
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x1
+ ldreqh r3, [r0, #0x12]
+ orreq r3, r3, #0x8
+ streqh r3, [r0, #0x12]
+ streqh r1, [r0, #0xc]
+ streqh r2, [r0, #0xe]
+ bx lr
+ arm_func_end NNSi_G2dSrtcSetTrans
diff --git a/arm9/asm/NNS_G2D_g2d_textcanvas.s b/arm9/asm/NNS_G2D_g2d_textcanvas.s
new file mode 100644
index 00000000..95ebf85a
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2d_textcanvas.s
@@ -0,0 +1,221 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dTextCanvasDrawTextRect
+NNSi_G2dTextCanvasDrawTextRect: ; 0x020B7168
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ ldr r12, [sp, #0x28]
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ ands r0, r12, #0x100
+ beq _020B71AC
+ ldr r0, [r7, #0x4]
+ ldr r1, [r7, #0xc]
+ ldr r2, [sp, #0x2c]
+ bl NNSi_G2dFontGetTextHeight
+ ldr r1, [sp, #0x20]
+ sub r0, r1, r0
+ add r5, r5, r0
+ b _020B71E4
+_020B71AC:
+ ands r0, r12, #0x80
+ beq _020B71E4
+ ldr r0, [r7, #0x4]
+ ldr r1, [r7, #0xc]
+ ldr r2, [sp, #0x2c]
+ bl NNSi_G2dFontGetTextHeight
+ ldr r2, [sp, #0x20]
+ add r1, r0, #0x1
+ add r0, r2, #0x1
+ add r0, r0, r0, lsr #0x1f
+ mov r2, r0, asr #0x1
+ add r0, r1, r1, lsr #0x1f
+ sub r0, r2, r0, asr #0x1
+ add r5, r5, r0
+_020B71E4:
+ ldr r1, [sp, #0x24]
+ ldr r0, [sp, #0x28]
+ str r1, [sp, #0x0]
+ ldr r12, [sp, #0x2c]
+ str r0, [sp, #0x4]
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ mov r3, r4
+ str r12, [sp, #0x8]
+ bl NNSi_G2dTextCanvasDrawTextAlign
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNSi_G2dTextCanvasDrawTextRect
+
+ arm_func_start NNSi_G2dTextCanvasDrawText
+NNSi_G2dTextCanvasDrawText: ; 0x020B7218
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x18
+ ldr r4, [sp, #0x34]
+ mov r8, r0
+ str r4, [sp, #0x0]
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ ldr r4, [sp, #0x30]
+ ldr r1, [r8, #0x4]
+ ldr r2, [r8, #0x8]
+ ldr r3, [r8, #0xc]
+ add r0, sp, #0xc
+ bl NNSi_G2dFontGetTextRect
+ ands r0, r4, #0x10
+ ldrne r0, [sp, #0xc]
+ addne r0, r0, #0x1
+ addne r0, r0, r0, lsr #0x1f
+ subne r7, r7, r0, asr #0x1
+ bne _020B7274
+ ands r0, r4, #0x20
+ ldrne r0, [sp, #0xc]
+ subne r7, r7, r0
+_020B7274:
+ ands r0, r4, #0x2
+ ldrne r0, [sp, #0x10]
+ addne r0, r0, #0x1
+ addne r0, r0, r0, lsr #0x1f
+ subne r6, r6, r0, asr #0x1
+ bne _020B7298
+ ands r0, r4, #0x4
+ ldrne r0, [sp, #0x10]
+ subne r6, r6, r0
+_020B7298:
+ str r5, [sp, #0x0]
+ ldr r0, [sp, #0x34]
+ str r4, [sp, #0x4]
+ str r0, [sp, #0x8]
+ ldr r3, [sp, #0xc]
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ bl NNSi_G2dTextCanvasDrawTextAlign
+ add sp, sp, #0x18
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNSi_G2dTextCanvasDrawText
+
+ arm_func_start NNSi_G2dTextCanvasDrawTextAlign
+NNSi_G2dTextCanvasDrawTextAlign: ; 0x020B72C4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ ldr r4, [r10, #0x4]
+ ldr r0, [sp, #0x40]
+ ldr r4, [r4, #0x0]
+ ldr r5, [r10, #0xc]
+ ldrsb r4, [r4, #0x1]
+ cmp r0, #0x0
+ mov r9, r1
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x38]
+ mov r8, r2
+ str r0, [sp, #0x38]
+ mov r7, r3
+ add r6, r5, r4
+ addeq sp, sp, #0x14
+ ldmeqia sp!, {r4-r11,pc}
+ add r0, r7, #0x1
+ ldr r1, [sp, #0x3c]
+ add r0, r0, r0, lsr #0x1f
+ mov r0, r0, asr #0x1
+ and r5, r1, #0x800
+ and r11, r1, #0x400
+ str r0, [sp, #0x8]
+ mov r4, #0x0
+_020B732C:
+ mov r1, r9
+ cmp r5, #0x0
+ beq _020B7358
+ ldr r0, [r10, #0x4]
+ ldr r1, [r10, #0x8]
+ ldr r2, [sp, #0xc]
+ mov r3, r4
+ bl NNSi_G2dFontGetStringWidth
+ sub r0, r7, r0
+ add r1, r9, r0
+ b _020B7388
+_020B7358:
+ cmp r11, #0x0
+ beq _020B7388
+ ldr r0, [r10, #0x4]
+ ldr r1, [r10, #0x8]
+ ldr r2, [sp, #0xc]
+ mov r3, r4
+ bl NNSi_G2dFontGetStringWidth
+ add r0, r0, #0x1
+ add r1, r0, r0, lsr #0x1f
+ ldr r0, [sp, #0x8]
+ sub r0, r0, r1, asr #0x1
+ add r1, r9, r0
+_020B7388:
+ ldr r2, [sp, #0xc]
+ add r3, sp, #0xc
+ str r2, [sp, #0x0]
+ str r3, [sp, #0x4]
+ ldr r3, [sp, #0x38]
+ mov r0, r10
+ mov r2, r8
+ bl NNSi_G2dTextCanvasDrawString
+ ldr r0, [sp, #0xc]
+ add r8, r8, r6
+ cmp r0, #0x0
+ bne _020B732C
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end NNSi_G2dTextCanvasDrawTextAlign
+
+ arm_func_start NNSi_G2dTextCanvasDrawString
+NNSi_G2dTextCanvasDrawString: ; 0x020B73C0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r0
+ ldr r6, [r10, #0x8]
+ ldr r5, [r10, #0x4]
+ ldr r4, [sp, #0x30]
+ add r0, sp, #0x8
+ str r4, [sp, #0x8]
+ ldr r4, [r5, #0x4]
+ mov r9, r1
+ mov r8, r2
+ mov r7, r3
+ blx r4
+ cmp r0, #0x0
+ beq _020B743C
+ add r11, sp, #0x8
+_020B7400:
+ cmp r0, #0xa
+ beq _020B743C
+ str r7, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [r10, #0x0]
+ mov r1, r5
+ mov r2, r9
+ mov r3, r8
+ bl NNS_G2dCharCanvasDrawChar
+ add r1, r9, r0
+ mov r0, r11
+ add r9, r1, r6
+ blx r4
+ cmp r0, #0x0
+ bne _020B7400
+_020B743C:
+ ldr r1, [sp, #0x34]
+ cmp r1, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,pc}
+ cmp r0, #0xa
+ ldreq r1, [sp, #0x8]
+ ldr r0, [sp, #0x34]
+ movne r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end NNSi_G2dTextCanvasDrawString
diff --git a/arm9/asm/NNS_G2D_g2di_bitreader.s b/arm9/asm/NNS_G2D_g2di_bitreader.s
new file mode 100644
index 00000000..d36c774f
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2di_bitreader.s
@@ -0,0 +1,35 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dBitReaderRead
+NNSi_G2dBitReaderRead: ; 0x020B76B0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrsb r2, [r0, #0x4]
+ ldrb r12, [r0, #0x5]
+ mov r4, r1
+ cmp r2, r4
+ subge r1, r2, r4
+ movge r5, r12, lsr r1
+ strgeb r1, [r0, #0x4]
+ bge _020B7704
+ ldr r3, [r0, #0x0]
+ sub r1, r4, r2
+ add r2, r3, #0x1
+ str r2, [r0, #0x0]
+ ldrb r2, [r3, #0x0]
+ mov r5, r12, lsl r1
+ strb r2, [r0, #0x5]
+ mov r2, #0x8
+ strb r2, [r0, #0x4]
+ bl NNSi_G2dBitReaderRead
+ orr r5, r0, r5
+_020B7704:
+ rsb r0, r4, #0x8
+ mov r1, #0xff
+ and r0, r5, r1, asr r0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNSi_G2dBitReaderRead
diff --git a/arm9/asm/NNS_G2D_g2di_mtx32.s b/arm9/asm/NNS_G2D_g2di_mtx32.s
new file mode 100644
index 00000000..68fa5831
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2di_mtx32.s
@@ -0,0 +1,79 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dMtxConcat32
+NNSi_G2dMtxConcat32: ; 0x020B423C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x1c
+ ldr r4, [r0, #0x4]
+ ldr r3, [r1, #0x8]
+ mov r12, r2
+ smull r6, r5, r4, r3
+ ldr r4, [r0, #0x0]
+ ldr r3, [r1, #0x0]
+ cmp r12, r1
+ smlal r6, r5, r4, r3
+ mov r3, r6, lsr #0xc
+ addeq r2, sp, #0x0
+ orr r3, r3, r5, lsl #0x14
+ str r3, [r2, #0x0]
+ ldr r4, [r0, #0x4]
+ ldr r3, [r1, #0xc]
+ ldr r5, [r0, #0x0]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x4]
+ add lr, sp, #0x0
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0x4]
+ ldr r4, [r0, #0xc]
+ ldr r3, [r1, #0x8]
+ ldr r5, [r0, #0x8]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x0]
+ cmp r2, lr
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0x8]
+ ldr r4, [r0, #0xc]
+ ldr r3, [r1, #0xc]
+ ldr r5, [r0, #0x8]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x4]
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ str r3, [r2, #0xc]
+ ldr r4, [r0, #0x14]
+ ldr r3, [r1, #0x8]
+ ldr r5, [r0, #0x10]
+ smull r7, r6, r4, r3
+ ldr r3, [r1, #0x0]
+ ldr r4, [r1, #0x10]
+ smlal r7, r6, r5, r3
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ add r3, r4, r3
+ str r3, [r2, #0x10]
+ ldr r4, [r0, #0x14]
+ ldr r3, [r1, #0xc]
+ ldr r5, [r0, #0x10]
+ ldr r0, [r1, #0x4]
+ smull r6, r3, r4, r3
+ smlal r6, r3, r5, r0
+ mov r0, r6, lsr #0xc
+ ldr r1, [r1, #0x14]
+ orr r0, r0, r3, lsl #0x14
+ add r0, r1, r0
+ str r0, [r2, #0x14]
+ ldmeqia lr!, {r0-r3}
+ stmeqia r12!, {r0-r3}
+ ldmeqia lr, {r0-r1}
+ stmeqia r12, {r0-r1}
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNSi_G2dMtxConcat32
diff --git a/arm9/asm/NNS_G2D_g2di_splitchar.s b/arm9/asm/NNS_G2D_g2di_splitchar.s
new file mode 100644
index 00000000..4df7621d
--- /dev/null
+++ b/arm9/asm/NNS_G2D_g2di_splitchar.s
@@ -0,0 +1,13 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G2dSplitCharUTF16
+NNSi_G2dSplitCharUTF16: ; 0x020B7718
+ ldr r1, [r0, #0x0]
+ ldrh r2, [r1], #0x2
+ str r1, [r0, #0x0]
+ mov r0, r2
+ bx lr
+ arm_func_end NNSi_G2dSplitCharUTF16
diff --git a/arm9/asm/NNS_G3D_1mat1shp.s b/arm9/asm/NNS_G3D_1mat1shp.s
new file mode 100644
index 00000000..01cb5a35
--- /dev/null
+++ b/arm9/asm/NNS_G3D_1mat1shp.s
@@ -0,0 +1,143 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G3dDraw1Mat1Shp
+NNS_G3dDraw1Mat1Shp: ; 0x020BAFB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x6c
+ mov r6, r0
+ ldr r12, [r6, #0x1c]
+ mov r4, r1
+ mov r5, r2
+ mov r7, r3
+ cmp r12, #0x1000
+ beq _020BAFF8
+ add r1, sp, #0x54
+ mov r0, #0x1b
+ mov r2, #0x3
+ str r12, [sp, #0x54]
+ str r12, [sp, #0x58]
+ str r12, [sp, #0x5c]
+ bl NNS_G3dGeBufferOP_N
+_020BAFF8:
+ cmp r7, #0x0
+ beq _020BB150
+ ldr r0, [r6, #0x8]
+ add r3, r6, r0
+ ldrh r0, [r3, #0xa]
+ add r2, r3, #0x4
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r4, r0
+ ldr r0, [r0, #0x4]
+ add r4, r3, r0
+ ldr r0, [r4, #0xc]
+ ands r0, r0, #0x1f0000
+ addeq sp, sp, #0x6c
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r0, _020BB1B4 ; =0x00293130
+ str r0, [sp, #0x0]
+ ldr r0, [r4, #0x4]
+ str r0, [sp, #0x4]
+ ldr r0, [r4, #0x8]
+ str r0, [sp, #0x8]
+ ldr r1, [r4, #0xc]
+ str r1, [sp, #0xc]
+ ldrh r0, [r4, #0x1e]
+ ands r0, r0, #0x20
+ bicne r0, r1, #0x1f0000
+ ldr r1, _020BB1B8 ; =0x00002B2A
+ strne r0, [sp, #0xc]
+ str r1, [sp, #0x10]
+ ldr r2, [r4, #0x14]
+ ldr r0, [sp, #0x0]
+ str r2, [sp, #0x14]
+ ldrh r3, [r4, #0x1c]
+ add r1, sp, #0x4
+ mov r2, #0x6
+ str r3, [sp, #0x18]
+ bl NNS_G3dGeBufferOP_N
+ ldrh r0, [r4, #0x1e]
+ ands r0, r0, #0x1
+ beq _020BB150
+ ldrb r12, [r6, #0x16]
+ mov r3, #0x8
+ ldr r1, _020BB1BC ; =NNS_G3dSendTexSRT_FuncArray
+ str r3, [sp, #0x1c]
+ ldrh r2, [r4, #0x20]
+ add r0, r4, #0x2c
+ ldr r1, [r1, r12, lsl #0x2]
+ strh r2, [sp, #0x48]
+ ldrh r2, [r4, #0x22]
+ strh r2, [sp, #0x4a]
+ ldr r2, [r4, #0x24]
+ str r2, [sp, #0x4c]
+ ldr r2, [r4, #0x28]
+ str r2, [sp, #0x50]
+ ldrh r2, [r4, #0x1e]
+ ands r2, r2, #0x2
+ orrne r2, r3, #0x1
+ strne r2, [sp, #0x1c]
+ bne _020BB0F8
+ ldr r2, [r0, #0x0]
+ str r2, [sp, #0x34]
+ ldr r2, [r0, #0x4]
+ add r0, r0, #0x8
+ str r2, [sp, #0x38]
+_020BB0F8:
+ ldrh r2, [r4, #0x1e]
+ ands r2, r2, #0x4
+ ldrne r2, [sp, #0x1c]
+ orrne r2, r2, #0x2
+ strne r2, [sp, #0x1c]
+ bne _020BB124
+ ldrsh r2, [r0, #0x0]
+ strh r2, [sp, #0x3c]
+ ldrsh r2, [r0, #0x2]
+ add r0, r0, #0x4
+ strh r2, [sp, #0x3e]
+_020BB124:
+ ldrh r2, [r4, #0x1e]
+ ands r2, r2, #0x8
+ ldreq r2, [r0, #0x0]
+ streq r2, [sp, #0x40]
+ ldreq r0, [r0, #0x4]
+ streq r0, [sp, #0x44]
+ ldrne r0, [sp, #0x1c]
+ orrne r0, r0, #0x4
+ strne r0, [sp, #0x1c]
+ add r0, sp, #0x1c
+ blx r1
+_020BB150:
+ ldr r0, [r6, #0xc]
+ add r2, r6, r0
+ ldrh r0, [r2, #0x6]
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r5, r0
+ ldr r0, [r0, #0x4]
+ add r2, r2, r0
+ ldr r0, [r2, #0x8]
+ ldr r1, [r2, #0xc]
+ add r0, r2, r0
+ bl NNS_G3dGeSendDL
+ ldr r3, [r6, #0x20]
+ cmp r3, #0x1000
+ addeq sp, sp, #0x6c
+ ldmeqia sp!, {r4-r7,pc}
+ add r1, sp, #0x60
+ mov r0, #0x1b
+ mov r2, #0x3
+ str r3, [sp, #0x60]
+ str r3, [sp, #0x64]
+ str r3, [sp, #0x68]
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x6c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020BB1B4: .word 0x00293130
+_020BB1B8: .word 0x00002B2A
+_020BB1BC: .word NNS_G3dSendTexSRT_FuncArray
+ arm_func_end NNS_G3dDraw1Mat1Shp
diff --git a/arm9/asm/NNS_G3D_3dsmax.s b/arm9/asm/NNS_G3D_3dsmax.s
new file mode 100644
index 00000000..e54e2315
--- /dev/null
+++ b/arm9/asm/NNS_G3D_3dsmax.s
@@ -0,0 +1,466 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+calcTexMtx_: ; 0x021067D0
+ .word texmtxCalc_flag_
+ .word texmtxCalc_flagS_
+ .word texmtxCalc_flagR_
+ .word texmtxCalc_flagRS_
+ .word texmtxCalc_flagT_
+ .word texmtxCalc_flagTS_
+ .word texmtxCalc_flagTR_
+ .word texmtxCalc_flagTRS_
+
+ .section .text
+
+ arm_func_start NNSi_G3dSendTexSRT3dsMax
+NNSi_G3dSendTexSRT3dsMax: ; 0x020BF42C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x50
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ ands r0, r0, #0x8
+ ldrne r0, _020BF568 ; =0x00101610
+ mov r3, #0x3
+ strne r0, [sp, #0x0]
+ ldreq r0, _020BF56C ; =0x00101810
+ mov r2, #0x2
+ streq r0, [sp, #0x0]
+ mov r0, #0x1000
+ str r0, [sp, #0x44]
+ str r3, [sp, #0x4]
+ str r2, [sp, #0x48]
+ str r1, [sp, #0x40]
+ str r1, [sp, #0x34]
+ str r1, [sp, #0x30]
+ str r1, [sp, #0x2c]
+ str r1, [sp, #0x28]
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x20]
+ str r1, [sp, #0x14]
+ str r1, [sp, #0x10]
+ ldr r1, [r4, #0x0]
+ ldr r0, _020BF570 ; =calcTexMtx_
+ and r1, r1, #0x7
+ ldr r2, [r0, r1, lsl #0x2]
+ add r0, sp, #0x8
+ mov r1, r4
+ blx r2
+ ldr r3, [r4, #0x30]
+ cmp r3, #0x1000
+ beq _020BF4FC
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x8]
+ ldr r2, [r4, #0x30]
+ ldr r0, [sp, #0x38]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0xc]
+ ldr r1, [r4, #0x30]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x38]
+_020BF4FC:
+ ldr r3, [r4, #0x34]
+ cmp r3, #0x1000
+ beq _020BF54C
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x1c]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x18]
+ ldr r2, [r4, #0x34]
+ ldr r0, [sp, #0x3c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x1c]
+ ldr r1, [r4, #0x34]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x3c]
+_020BF54C:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0x12
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x50
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BF568: .word 0x00101610
+_020BF56C: .word 0x00101810
+_020BF570: .word calcTexMtx_
+ arm_func_end NNSi_G3dSendTexSRT3dsMax
+
+ local_arm_func_start texmtxCalc_flagTRS_
+texmtxCalc_flagTRS_: ; 0x020BF574
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ bx lr
+ arm_func_end texmtxCalc_flagTRS_
+
+ local_arm_func_start texmtxCalc_flagTR_
+texmtxCalc_flagTR_: ; 0x020BF598
+ ldr r2, [r1, #0x18]
+ mov r12, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r12, [r0, #0x4]
+ ldr r3, [r1, #0x18]
+ ldrh r2, [r1, #0x2c]
+ rsb r3, r3, #0x1000
+ mul r2, r3, r2
+ mov r2, r2, lsl #0x3
+ str r2, [r0, #0x30]
+ ldr r2, [r1, #0x1c]
+ ldrh r1, [r1, #0x2e]
+ rsb r2, r2, #0x1000
+ mul r1, r2, r1
+ mov r1, r1, lsl #0x3
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+ arm_func_end texmtxCalc_flagTR_
+
+ local_arm_func_start texmtxCalc_flagTS_
+texmtxCalc_flagTS_: ; 0x020BF5E8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ ldrsh r4, [r5, #0x22]
+ rsb r0, r2, #0x0
+ rsb r1, r1, #0x0
+ mov r0, r0, lsl #0xb
+ ldrsh r3, [r5, #0x20]
+ mov r1, r1, lsl #0xb
+ smull r7, lr, r4, r0
+ smull r12, r4, r3, r1
+ subs r7, r7, r12
+ sbc r3, lr, r4
+ mov r4, r7, lsr #0x8
+ orr r4, r4, r3, lsl #0x18
+ add r2, r4, r2, lsl #0xf
+ str r2, [r6, #0x30]
+ ldrsh r2, [r5, #0x22]
+ ldrsh r3, [r5, #0x20]
+ ldrh r12, [r5, #0x2e]
+ smull r4, r1, r2, r1
+ smlal r4, r1, r3, r0
+ mov r0, r4, lsr #0x8
+ orr r0, r0, r1, lsl #0x18
+ add r0, r0, r12, lsl #0xf
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end texmtxCalc_flagTS_
+
+ local_arm_func_start texmtxCalc_flagT_
+texmtxCalc_flagT_: ; 0x020BF6C8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r0, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r5, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r7, [r10, #0x0]
+ str r5, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ mul r0, r4, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ ldrh r3, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ rsb r0, r3, #0x0
+ rsb r1, r1, #0x0
+ mov r2, r1, lsl #0xb
+ mov r11, r0, lsl #0xb
+ smull r1, r0, r7, r11
+ smull r8, r7, r5, r2
+ smlal r8, r7, r4, r11
+ mov r4, r8, lsr #0x8
+ orr r4, r4, r7, lsl #0x18
+ smull r5, r2, r6, r2
+ subs r1, r1, r5
+ sbc r0, r0, r2
+ mov r1, r1, lsr #0x8
+ orr r1, r1, r0, lsl #0x18
+ add r0, r1, r3, lsl #0xf
+ str r0, [r10, #0x30]
+ ldrh r0, [r9, #0x2e]
+ add r0, r4, r0, lsl #0xf
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r6, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end texmtxCalc_flagT_
+
+ local_arm_func_start texmtxCalc_flagRS_
+texmtxCalc_flagRS_: ; 0x020BF7C8
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ mov r12, #0x0
+ str r12, [r0, #0x4]
+ ldr r3, [r1, #0x24]
+ ldrh r2, [r1, #0x2c]
+ rsb r3, r3, #0x0
+ mul r2, r3, r2
+ mov r2, r2, lsl #0x4
+ str r2, [r0, #0x30]
+ ldrh r2, [r1, #0x2e]
+ ldr r1, [r1, #0x28]
+ mul r2, r1, r2
+ mov r1, r2, lsl #0x4
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+ arm_func_end texmtxCalc_flagRS_
+
+ local_arm_func_start texmtxCalc_flagR_
+texmtxCalc_flagR_: ; 0x020BF810
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, [r1, #0x18]
+ mov r3, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r3, [r0, #0x4]
+ ldrh r5, [r1, #0x2c]
+ ldr r12, [r1, #0x24]
+ ldrh r2, [r1, #0x2e]
+ mul lr, r12, r5
+ rsb r12, r5, #0x0
+ mov r12, r12, lsl #0xb
+ ldr r4, [r1, #0x18]
+ sub r12, r12, lr
+ smull lr, r12, r4, r12
+ ldr r6, [r1, #0x28]
+ mov r4, lr, lsr #0x8
+ orr r4, r4, r12, lsl #0x18
+ add r4, r4, r5, lsl #0xf
+ str r4, [r0, #0x30]
+ mul r4, r6, r2
+ rsb r5, r2, #0x0
+ ldr r2, [r1, #0x1c]
+ add r4, r4, r5, lsl #0xb
+ smull lr, r12, r2, r4
+ mov r2, lr, lsr #0x8
+ ldrh r1, [r1, #0x2e]
+ orr r2, r2, r12, lsl #0x18
+ add r1, r2, r1, lsl #0xf
+ str r1, [r0, #0x34]
+ str r3, [r0, #0x10]
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end texmtxCalc_flagR_
+
+ local_arm_func_start texmtxCalc_flagS_
+texmtxCalc_flagS_: ; 0x020BF894
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrh r2, [r5, #0x2c]
+ ldrh r7, [r5, #0x2e]
+ ldr r1, [r5, #0x28]
+ ldr r0, [r5, #0x24]
+ rsb r4, r2, #0x0
+ mul r3, r1, r7
+ rsb r1, r7, #0x0
+ add r1, r3, r1, lsl #0xb
+ ldrsh r3, [r5, #0x20]
+ mov r7, r4, lsl #0xb
+ mul r4, r0, r2
+ sub r0, r7, r4
+ ldrsh lr, [r5, #0x22]
+ smull r12, r4, r3, r1
+ smull r7, r3, lr, r0
+ subs r7, r7, r12
+ sbc r3, r3, r4
+ mov r4, r7, lsr #0x8
+ orr r4, r4, r3, lsl #0x18
+ add r2, r4, r2, lsl #0xf
+ str r2, [r6, #0x30]
+ ldrsh r2, [r5, #0x22]
+ ldrsh r3, [r5, #0x20]
+ ldrh r12, [r5, #0x2e]
+ smull r4, r1, r2, r1
+ smlal r4, r1, r3, r0
+ mov r0, r4, lsr #0x8
+ orr r0, r0, r1, lsl #0x18
+ add r0, r0, r12, lsl #0xf
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end texmtxCalc_flagS_
+
+ local_arm_func_start texmtxCalc_flag_
+texmtxCalc_flag_: ; 0x020BF988
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r0, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r5, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r7, [r10, #0x0]
+ str r5, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ mul r0, r4, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ ldrh r1, [r9, #0x2c]
+ ldrh r8, [r9, #0x2e]
+ ldr r2, [r9, #0x28]
+ rsb r0, r1, #0x0
+ mul r3, r2, r8
+ rsb r2, r8, #0x0
+ add r8, r3, r2, lsl #0xb
+ mov r0, r0, lsl #0xb
+ smull r3, r2, r5, r8
+ smull r8, r5, r6, r8
+ ldr r11, [r9, #0x24]
+ mul r12, r11, r1
+ sub r0, r0, r12
+ smlal r3, r2, r4, r0
+ smull r4, r0, r7, r0
+ subs r4, r4, r8
+ sbc r0, r0, r5
+ mov r4, r4, lsr #0x8
+ orr r4, r4, r0, lsl #0x18
+ add r0, r4, r1, lsl #0xf
+ str r0, [r10, #0x30]
+ ldrh r1, [r9, #0x2e]
+ mov r0, r3, lsr #0x8
+ orr r0, r0, r2, lsl #0x18
+ add r0, r0, r1, lsl #0xf
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r6, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end texmtxCalc_flag_
diff --git a/arm9/asm/NNS_G3D_anm.s b/arm9/asm/NNS_G3D_anm.s
new file mode 100644
index 00000000..512ef7c0
--- /dev/null
+++ b/arm9/asm/NNS_G3D_anm.s
@@ -0,0 +1,352 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global NNS_G3dAnmFmtNum
+NNS_G3dAnmFmtNum: ; 0x02106594
+ .byte 0x05, 0x00, 0x00, 0x00
+
+ .global NNS_G3dFuncAnmVisNsBvaDefault
+NNS_G3dFuncAnmVisNsBvaDefault: ; 0x02106598
+ .word NNSi_G3dAnmCalcNsBva
+
+ .global NNS_G3dFuncAnmJntNsBcaDefault
+NNS_G3dFuncAnmJntNsBcaDefault: ; 0x0210659C
+ .word NNSi_G3dAnmCalcNsBca
+
+ .global NNS_G3dFuncAnmMatNsBtaDefault
+NNS_G3dFuncAnmMatNsBtaDefault: ; 0x021065A0
+ .word NNSi_G3dAnmCalcNsBta
+
+ .global NNS_G3dFuncAnmMatNsBtpDefault
+NNS_G3dFuncAnmMatNsBtpDefault: ; 0x021065A4
+ .word NNSi_G3dAnmCalcNsBtp
+
+ .global NNS_G3dFuncAnmMatNsBmaDefault
+NNS_G3dFuncAnmMatNsBmaDefault: ; 0x021065A8
+ .word NNSi_G3dAnmCalcNsBma
+
+ .global NNS_G3dFuncBlendVisDefault
+NNS_G3dFuncBlendVisDefault: ; 0x021065AC
+ .word NNSi_G3dAnmBlendVis
+
+ .global NNS_G3dFuncBlendJntDefault
+NNS_G3dFuncBlendJntDefault: ; 0x021065B0
+ .word NNSi_G3dAnmBlendJnt
+
+ .global NNS_G3dFuncBlendMatDefault
+NNS_G3dFuncBlendMatDefault: ; 0x021065B4
+ .word NNSi_G3dAnmBlendMat
+
+ .global NNS_G3dAnmObjInitFuncArray
+NNS_G3dAnmObjInitFuncArray: ; 0x021065B8
+ .byte 0x4D, 0x00, 0x41, 0x4D
+ .word NNSi_G3dAnmObjInitNsBma
+ .byte 0x4D, 0x00, 0x50, 0x54
+ .word NNSi_G3dAnmObjInitNsBtp
+ .byte 0x4D, 0x00, 0x41, 0x54
+ .word NNSi_G3dAnmObjInitNsBta
+ .byte 0x56, 0x00, 0x41, 0x56
+ .word NNSi_G3dAnmObjInitNsBva
+ .byte 0x4A, 0x00, 0x41, 0x43
+ .word NNSi_G3dAnmObjInitNsBca
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .section .text
+
+ arm_func_start NNSi_G3dAnmBlendVis
+NNSi_G3dAnmBlendVis: ; 0x020B8640
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r7, r0
+ mov r0, #0x0
+ mov r6, r1
+ str r0, [r7, #0x0]
+ add r4, sp, #0x0
+ mov r5, r2, lsl #0x1
+ mov r8, #0x1
+_020B8664:
+ add r1, r5, r6
+ ldrh r2, [r1, #0x1a]
+ ands r1, r2, #0x100
+ beq _020B869C
+ ldr r3, [r6, #0xc]
+ mov r0, r4
+ mov r1, r6
+ and r2, r2, #0xff
+ blx r3
+ ldr r2, [r7, #0x0]
+ ldr r1, [sp, #0x0]
+ mov r0, r8
+ orr r1, r2, r1
+ str r1, [r7, #0x0]
+_020B869C:
+ ldr r6, [r6, #0x10]
+ cmp r6, #0x0
+ bne _020B8664
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNSi_G3dAnmBlendVis
+
+ arm_func_start NNSi_G3dAnmBlendJnt
+NNSi_G3dAnmBlendJnt: ; 0x020B86B0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x5c
+ mov r9, r1
+ ldr r3, [r9, #0x10]
+ mov r10, r0
+ mov r8, r2
+ cmp r3, #0x0
+ bne _020B8704
+ add r2, r9, r8, lsl #0x1
+ ldrh r4, [r2, #0x1a]
+ and r2, r4, #0x300
+ cmp r2, #0x100
+ addne sp, sp, #0x5c
+ movne r0, #0x0
+ ldmneia sp!, {r4-r11,pc}
+ ldr r3, [r9, #0xc]
+ and r2, r4, #0xff
+ blx r3
+ add sp, sp, #0x5c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020B8704:
+ mov r7, #0x0
+ mov r3, r7
+ mov r4, r9
+ mov r2, r8, lsl #0x1
+_020B8714:
+ add r0, r2, r4
+ ldrh r0, [r0, #0x1a]
+ and r0, r0, #0x300
+ cmp r0, #0x100
+ ldreq r0, [r4, #0x4]
+ moveq r1, r4
+ ldr r4, [r4, #0x10]
+ addeq r7, r7, r0
+ addeq r3, r3, #0x1
+ cmp r4, #0x0
+ bne _020B8714
+ cmp r7, #0x0
+ addeq sp, sp, #0x5c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r11,pc}
+ cmp r3, #0x1
+ bne _020B877C
+ add r0, r1, r8, lsl #0x1
+ ldrh r2, [r0, #0x1a]
+ ldr r3, [r1, #0xc]
+ mov r0, r10
+ and r2, r2, #0xff
+ blx r3
+ add sp, sp, #0x5c
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020B877C:
+ mov r1, r10
+ mov r0, #0x0
+ mov r2, #0x58
+ bl MIi_CpuClearFast
+ mvn r0, #0x0
+ str r0, [r10, #0x0]
+ add r5, sp, #0x0
+ add r4, sp, #0x4
+ add r11, sp, #0x10
+_020B87A0:
+ add r0, r9, r8, lsl #0x1
+ ldrh r2, [r0, #0x1a]
+ and r0, r2, #0x300
+ cmp r0, #0x100
+ bne _020B8948
+ ldr r0, [r9, #0x4]
+ cmp r0, #0x0
+ ble _020B8948
+ ldr r3, [r9, #0xc]
+ mov r0, r5
+ mov r1, r9
+ and r2, r2, #0xff
+ blx r3
+ cmp r7, #0x1000
+ ldreq r6, [r9, #0x4]
+ beq _020B87F0
+ ldr r0, [r9, #0x4]
+ mov r1, r7
+ bl FX_Div
+ mov r6, r0
+_020B87F0:
+ ldr r3, [sp, #0x0]
+ mov r1, r4
+ mov r2, r6
+ add r0, r10, #0x4
+ and r3, r3, #0x1
+ bl blendScaleVec_
+ ldr r1, [sp, #0x0]
+ add r0, r10, #0x10
+ and r3, r1, #0x8
+ mov r1, r11
+ mov r2, r6
+ bl blendScaleVec_
+ ldr r3, [sp, #0x0]
+ add r0, r10, #0x1c
+ add r1, sp, #0x1c
+ mov r2, r6
+ and r3, r3, #0x10
+ bl blendScaleVec_
+ ldr r0, [sp, #0x0]
+ ands r0, r0, #0x4
+ bne _020B8898
+ ldr r0, [sp, #0x4c]
+ ldr r2, [r10, #0x4c]
+ smull r1, r0, r6, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r2, r1
+ str r0, [r10, #0x4c]
+ ldr r0, [sp, #0x50]
+ ldr r2, [r10, #0x50]
+ smull r1, r0, r6, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r2, r1
+ str r0, [r10, #0x50]
+ ldr r0, [sp, #0x54]
+ ldr r2, [r10, #0x54]
+ smull r1, r0, r6, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ add r0, r2, r1
+ str r0, [r10, #0x54]
+_020B8898:
+ ldr r0, [sp, #0x0]
+ ands r0, r0, #0x2
+ bne _020B8920
+ ldr r0, [sp, #0x28]
+ ldr r1, [r10, #0x28]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x28]
+ ldr r0, [sp, #0x2c]
+ ldr r1, [r10, #0x2c]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x2c]
+ ldr r0, [sp, #0x30]
+ ldr r1, [r10, #0x30]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x30]
+ ldr r0, [sp, #0x34]
+ ldr r1, [r10, #0x34]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x34]
+ ldr r0, [sp, #0x38]
+ ldr r1, [r10, #0x38]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x38]
+ ldr r0, [sp, #0x3c]
+ ldr r1, [r10, #0x3c]
+ mul r0, r6, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r10, #0x3c]
+ b _020B8938
+_020B8920:
+ ldr r0, [r10, #0x28]
+ add r0, r0, r6
+ str r0, [r10, #0x28]
+ ldr r0, [r10, #0x38]
+ add r0, r0, r6
+ str r0, [r10, #0x38]
+_020B8938:
+ ldr r1, [r10, #0x0]
+ ldr r0, [sp, #0x0]
+ and r0, r1, r0
+ str r0, [r10, #0x0]
+_020B8948:
+ ldr r9, [r9, #0x10]
+ cmp r9, #0x0
+ bne _020B87A0
+ add r0, r10, #0x28
+ add r1, r10, #0x34
+ add r2, r10, #0x40
+ bl VEC_CrossProduct
+ add r0, r10, #0x28
+ mov r1, r0
+ bl VEC_Normalize
+ add r0, r10, #0x40
+ mov r1, r0
+ bl VEC_Normalize
+ add r0, r10, #0x40
+ add r1, r10, #0x28
+ add r2, r10, #0x34
+ bl VEC_CrossProduct
+ mov r0, #0x1
+ add sp, sp, #0x5c
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end NNSi_G3dAnmBlendJnt
+
+ arm_func_start blendScaleVec_
+blendScaleVec_: ; 0x020B8998
+ cmp r3, #0x0
+ beq _020B89C8
+ ldr r1, [r0, #0x0]
+ add r1, r1, r2
+ str r1, [r0, #0x0]
+ ldr r1, [r0, #0x4]
+ add r1, r1, r2
+ str r1, [r0, #0x4]
+ ldr r1, [r0, #0x8]
+ add r1, r1, r2
+ str r1, [r0, #0x8]
+ bx lr
+_020B89C8:
+ ldr r3, [r1, #0x0]
+ ldr r12, [r0, #0x0]
+ mul r3, r2, r3
+ add r3, r12, r3, asr #0xc
+ str r3, [r0, #0x0]
+ ldr r3, [r1, #0x4]
+ ldr r12, [r0, #0x4]
+ mul r3, r2, r3
+ add r3, r12, r3, asr #0xc
+ str r3, [r0, #0x4]
+ ldr r1, [r1, #0x8]
+ ldr r3, [r0, #0x8]
+ mul r1, r2, r1
+ add r1, r3, r1, asr #0xc
+ str r1, [r0, #0x8]
+ bx lr
+ arm_func_end blendScaleVec_
+
+ arm_func_start NNSi_G3dAnmBlendMat
+NNSi_G3dAnmBlendMat: ; 0x020B8A08
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ mov r5, r1
+ mov r0, #0x0
+ mov r4, r2, lsl #0x1
+ mov r7, #0x1
+_020B8A24:
+ add r1, r4, r5
+ ldrh r2, [r1, #0x1a]
+ ands r1, r2, #0x100
+ beq _020B8A4C
+ ldr r3, [r5, #0xc]
+ mov r0, r6
+ mov r1, r5
+ and r2, r2, #0xff
+ blx r3
+ mov r0, r7
+_020B8A4C:
+ ldr r5, [r5, #0x10]
+ cmp r5, #0x0
+ bne _020B8A24
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNSi_G3dAnmBlendMat
diff --git a/arm9/asm/NNS_G3D_basic.s b/arm9/asm/NNS_G3D_basic.s
new file mode 100644
index 00000000..a9849429
--- /dev/null
+++ b/arm9/asm/NNS_G3D_basic.s
@@ -0,0 +1,62 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G3dGetJointScaleBasic
+NNSi_G3dGetJointScaleBasic: ; 0x020BE62C
+ ands r2, r3, #0x4
+ ldrne r1, [r0, #0x0]
+ orrne r1, r1, #0x1
+ strne r1, [r0, #0x0]
+ bne _020BE658
+ ldr r2, [r1, #0x0]
+ str r2, [r0, #0x4]
+ ldr r2, [r1, #0x4]
+ str r2, [r0, #0x8]
+ ldr r1, [r1, #0x8]
+ str r1, [r0, #0xc]
+_020BE658:
+ ldr r1, [r0, #0x0]
+ orr r1, r1, #0x18
+ str r1, [r0, #0x0]
+ bx lr
+ arm_func_end NNSi_G3dGetJointScaleBasic
+
+ arm_func_start NNSi_G3dSendJointSRTBasic
+NNSi_G3dSendJointSRTBasic: ; 0x020BE668
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x0]
+ ands r0, r1, #0x4
+ bne _020BE6AC
+ ands r0, r1, #0x2
+ bne _020BE698
+ add r1, r4, #0x28
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+ b _020BE6C4
+_020BE698:
+ add r1, r4, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+ b _020BE6C4
+_020BE6AC:
+ ands r0, r1, #0x2
+ bne _020BE6C4
+ add r1, r4, #0x28
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+_020BE6C4:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x1
+ ldmneia sp!, {r4,pc}
+ add r1, r4, #0x4
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_G3dSendJointSRTBasic
diff --git a/arm9/asm/NNS_G3D_cgtool.s b/arm9/asm/NNS_G3D_cgtool.s
new file mode 100644
index 00000000..e17cfaf5
--- /dev/null
+++ b/arm9/asm/NNS_G3D_cgtool.s
@@ -0,0 +1,23 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global NNS_G3dSendJointSRT_FuncArray
+NNS_G3dSendJointSRT_FuncArray: ; 0x02106608
+ .word NNSi_G3dSendJointSRTBasic
+ .word NNSi_G3dSendJointSRTMaya
+ .word NNSi_G3dSendJointSRTSi3d
+
+ .global NNS_G3dGetJointScale_FuncArray
+NNS_G3dGetJointScale_FuncArray: ; 0x02106614
+ .word NNSi_G3dGetJointScaleBasic
+ .word NNSi_G3dGetJointScaleMaya
+ .word NNSi_G3dGetJointScaleSi3d
+
+ .global NNS_G3dSendTexSRT_FuncArray
+NNS_G3dSendTexSRT_FuncArray: ; 0x02106620
+ .word NNSi_G3dSendTexSRTMaya
+ .word NNSi_G3dSendTexSRTSi3d
+ .word NNSi_G3dSendTexSRT3dsMax
+ .word NNSi_G3dSendTexSRTXsi
diff --git a/arm9/asm/NNS_G3D_gecom.s b/arm9/asm/NNS_G3D_gecom.s
new file mode 100644
index 00000000..2caeb535
--- /dev/null
+++ b/arm9/asm/NNS_G3D_gecom.s
@@ -0,0 +1,197 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global NNS_G3dGeBuffer
+NNS_G3dGeBuffer: ; 0x021D1C80
+ .space 0x4
+
+ .global NNS_G3dFlagGXDmaAsync
+NNS_G3dFlagGXDmaAsync: ; 0x021D1C84
+ .space 0x4
+
+ .global NNS_G3dFlagUseFastDma
+NNS_G3dFlagUseFastDma: ; 0x021D1C88
+ .space 0x4
+
+ .section .text
+
+ arm_func_start NNS_G3dGeBufferOP_N
+NNS_G3dGeBufferOP_N: ; 0x020BB1C0
+ stmdb sp!, {r4-r6,lr}
+ ldr r3, _020BB2A4 ; =NNS_G3dGeBuffer
+ mov r6, r0
+ ldr r12, [r3, #0x0]
+ mov r5, r1
+ mov r4, r2
+ cmp r12, #0x0
+ beq _020BB278
+ ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB24C
+ ldr r2, [r12, #0x0]
+ add r0, r2, #0x1
+ add r1, r0, r4
+ cmp r1, #0xc0
+ bhi _020BB24C
+ str r0, [r12, #0x0]
+ ldr r0, [r3, #0x0]
+ cmp r4, #0x0
+ add r0, r0, r2, lsl #0x2
+ str r6, [r0, #0x4]
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, [r3, #0x0]
+ mov r0, r5
+ ldr r1, [r2], #0x4
+ add r1, r2, r1, lsl #0x2
+ mov r2, r4, lsl #0x2
+ bl MIi_CpuCopyFast
+ ldr r0, _020BB2A4 ; =NNS_G3dGeBuffer
+ ldr r1, [r0, #0x0]
+ ldr r0, [r1, #0x0]
+ add r0, r0, r4
+ str r0, [r1, #0x0]
+ ldmia sp!, {r4-r6,pc}
+_020BB24C:
+ ldr r0, [r12, #0x0]
+ cmp r0, #0x0
+ beq _020BB260
+ bl NNS_G3dGeFlushBuffer
+ b _020BB28C
+_020BB260:
+ ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB28C
+ bl NNS_G3dGeWaitSendDL
+ b _020BB28C
+_020BB278:
+ ldr r0, _020BB2A8 ; =NNS_G3dFlagGXDmaAsync
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB28C
+ bl NNS_G3dGeWaitSendDL
+_020BB28C:
+ ldr r1, _020BB2AC ; =0x04000400
+ mov r0, r5
+ mov r2, r4, lsl #0x2
+ str r6, [r1, #0x0]
+ bl MIi_CpuSend32
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BB2A4: .word NNS_G3dGeBuffer
+_020BB2A8: .word NNS_G3dFlagGXDmaAsync
+_020BB2AC: .word 0x04000400
+ arm_func_end NNS_G3dGeBufferOP_N
+
+ arm_func_start NNS_G3dGeSendDL
+NNS_G3dGeSendDL: ; 0x020BB2B0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r5, r0
+ cmp r4, #0x100
+ blo _020BB2DC
+ ldr r1, _020BB360 ; =GXi_DmaId
+ mvn r0, #0x0
+ ldr r1, [r1, #0x0]
+ cmp r1, r0
+ bne _020BB2F8
+_020BB2DC:
+ mov r2, r4, lsr #0x2
+ ldr r0, [r5, #0x0]
+ add r1, r5, #0x4
+ sub r2, r2, #0x1
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020BB2F8:
+ bl NNS_G3dGeFlushBuffer
+ ldr r0, _020BB364 ; =NNS_G3dFlagUseFastDma
+ ldr r1, _020BB368 ; =NNS_G3dFlagGXDmaAsync
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ cmp r0, #0x0
+ beq _020BB33C
+ ldr r0, _020BB360 ; =GXi_DmaId
+ str r1, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020BB36C ; =simpleUnlock_
+ mov r1, r5
+ mov r2, r4
+ bl MI_SendGXCommandAsyncFast
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020BB33C:
+ ldr r0, _020BB360 ; =GXi_DmaId
+ str r1, [sp, #0x0]
+ ldr r0, [r0, #0x0]
+ ldr r3, _020BB36C ; =simpleUnlock_
+ mov r1, r5
+ mov r2, r4
+ bl MI_SendGXCommandAsync
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BB360: .word GXi_DmaId
+_020BB364: .word NNS_G3dFlagUseFastDma
+_020BB368: .word NNS_G3dFlagGXDmaAsync
+_020BB36C: .word simpleUnlock_
+ arm_func_end NNS_G3dGeSendDL
+
+ arm_func_start simpleUnlock_
+simpleUnlock_: ; 0x020BB370
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ arm_func_end simpleUnlock_
+
+ arm_func_start NNS_G3dGeWaitSendDL
+NNS_G3dGeWaitSendDL: ; 0x020BB37C
+ ldr r0, _020BB390 ; =NNS_G3dFlagGXDmaAsync
+_020BB380:
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ bne _020BB380
+ bx lr
+ .balign 4
+_020BB390: .word NNS_G3dFlagGXDmaAsync
+ arm_func_end NNS_G3dGeWaitSendDL
+
+ arm_func_start NNS_G3dGeFlushBuffer
+NNS_G3dGeFlushBuffer: ; 0x020BB394
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020BB3FC ; =NNS_G3dFlagGXDmaAsync
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020BB3B0
+ bl NNS_G3dGeWaitSendDL
+_020BB3B0:
+ ldr r0, _020BB400 ; =NNS_G3dGeBuffer
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r1, _020BB404 ; =0x04000400
+ add r0, r0, #0x4
+ mov r2, r2, lsl #0x2
+ bl MIi_CpuSend32
+ ldr r0, _020BB400 ; =NNS_G3dGeBuffer
+ mov r1, #0x0
+ ldr r0, [r0, #0x0]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BB3FC: .word NNS_G3dFlagGXDmaAsync
+_020BB400: .word NNS_G3dGeBuffer
+_020BB404: .word 0x04000400
+ arm_func_end NNS_G3dGeFlushBuffer
diff --git a/arm9/asm/NNS_G3D_glbstate.s b/arm9/asm/NNS_G3D_glbstate.s
new file mode 100644
index 00000000..3dbb215f
--- /dev/null
+++ b/arm9/asm/NNS_G3D_glbstate.s
@@ -0,0 +1,355 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global NNS_G3dGlb
+NNS_G3dGlb: ; 0x021CED18
+ .space 0x264
+
+ .section .text
+
+ arm_func_start NNS_G3dGlbGetViewPort
+NNS_G3dGlbGetViewPort: ; 0x020B8200
+ cmp r0, #0x0
+ ldrne ip, _020B8260 ; =NNS_G3dGlb
+ ldrne r12, [r12, #0xa0]
+ andne r12, r12, #0xff
+ strne r12, [r0, #0x0]
+ cmp r1, #0x0
+ ldrne r0, _020B8260 ; =NNS_G3dGlb
+ ldrne r0, [r0, #0xa0]
+ movne r0, r0, lsr #0x8
+ andne r0, r0, #0xff
+ strne r0, [r1, #0x0]
+ cmp r2, #0x0
+ ldrne r0, _020B8260 ; =NNS_G3dGlb
+ ldrne r0, [r0, #0xa0]
+ movne r0, r0, lsr #0x10
+ andne r0, r0, #0xff
+ strne r0, [r2, #0x0]
+ cmp r3, #0x0
+ ldrne r0, _020B8260 ; =NNS_G3dGlb
+ ldrne r0, [r0, #0xa0]
+ movne r0, r0, lsr #0x18
+ andne r0, r0, #0xff
+ strne r0, [r3, #0x0]
+ bx lr
+ .balign 4
+_020B8260: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbGetViewPort
+
+ arm_func_start NNS_G3dGlbGetInvWV
+NNS_G3dGlbGetInvWV: ; 0x020B8264
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B829C ; =NNS_G3dGlb
+ ldr r0, [r0, #0xfc]
+ ands r0, r0, #0x80
+ bne _020B8290
+ bl calcSrtCameraMtx_
+ ldr r0, _020B829C ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ orr r1, r1, #0x80
+ str r1, [r0, #0xfc]
+_020B8290:
+ ldr r0, _020B82A0 ; =NNS_G3dGlb + 0x160
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B829C: .word NNS_G3dGlb
+_020B82A0: .word NNS_G3dGlb + 0x160
+ arm_func_end NNS_G3dGlbGetInvWV
+
+ arm_func_start NNS_G3dGlbGetWV
+NNS_G3dGlbGetWV: ; 0x020B82A4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B82DC ; =NNS_G3dGlb
+ ldr r0, [r0, #0xfc]
+ ands r0, r0, #0x80
+ bne _020B82D0
+ bl calcSrtCameraMtx_
+ ldr r0, _020B82DC ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ orr r1, r1, #0x80
+ str r1, [r0, #0xfc]
+_020B82D0:
+ ldr r0, _020B82E0 ; =NNS_G3dGlb + 0x130
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B82DC: .word NNS_G3dGlb
+_020B82E0: .word NNS_G3dGlb + 0x130
+ arm_func_end NNS_G3dGlbGetWV
+
+ arm_func_start calcSrtCameraMtx_
+calcSrtCameraMtx_: ; 0x020B82E4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B8330 ; =NNS_G3dGlb + 0xBC
+ ldr r1, _020B8334 ; =NNS_G3dGlb + 0x4C
+ ldr r2, _020B8338 ; =NNS_G3dGlb + 0x130
+ bl MTX_Concat43
+ ldr r3, _020B833C ; =NNS_G3dGlb
+ ldr r0, _020B8338 ; =NNS_G3dGlb + 0x130
+ ldr r2, [r3, #0xf4]
+ mov r1, r0
+ str r2, [sp, #0x0]
+ ldr r2, [r3, #0xec]
+ ldr r3, [r3, #0xf0]
+ bl MTX_ScaleApply43
+ ldr r0, _020B8338 ; =NNS_G3dGlb + 0x130
+ ldr r1, _020B8340 ; =NNS_G3dGlb + 0x160
+ bl MTX_Inverse43
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B8330: .word NNS_G3dGlb + 0xBC
+_020B8334: .word NNS_G3dGlb + 0x4C
+_020B8338: .word NNS_G3dGlb + 0x130
+_020B833C: .word NNS_G3dGlb
+_020B8340: .word NNS_G3dGlb + 0x160
+ arm_func_end calcSrtCameraMtx_
+
+ arm_func_start NNS_G3dGlbGetInvV
+NNS_G3dGlbGetInvV: ; 0x020B8344
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020B8384 ; =NNS_G3dGlb
+ ldr r0, [r0, #0xfc]
+ ands r0, r0, #0x8
+ bne _020B8378
+ ldr r0, _020B8388 ; =NNS_G3dGlb + 0x4C
+ ldr r1, _020B838C ; =NNS_G3dGlb + 0x100
+ bl MTX_Inverse43
+ ldr r0, _020B8384 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ orr r1, r1, #0x8
+ str r1, [r0, #0xfc]
+_020B8378:
+ ldr r0, _020B838C ; =NNS_G3dGlb + 0x100
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B8384: .word NNS_G3dGlb
+_020B8388: .word NNS_G3dGlb + 0x4C
+_020B838C: .word NNS_G3dGlb + 0x100
+ arm_func_end NNS_G3dGlbGetInvV
+
+ arm_func_start NNS_G3dGlbPolygonAttr
+NNS_G3dGlbPolygonAttr: ; 0x020B8390
+ orr r0, r0, r1, lsl #0x4
+ ldr r1, [sp, #0x4]
+ orr r0, r0, r2, lsl #0x6
+ orr r0, r1, r0
+ ldr r2, [sp, #0x0]
+ orr r1, r0, r3, lsl #0x18
+ ldr r0, _020B83B8 ; =NNS_G3dGlb
+ orr r1, r1, r2, lsl #0x10
+ str r1, [r0, #0x9c]
+ bx lr
+ .balign 4
+_020B83B8: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbPolygonAttr
+
+ arm_func_start NNS_G3dGlbMaterialColorSpecEmi
+NNS_G3dGlbMaterialColorSpecEmi: ; 0x020B83BC
+ cmp r2, #0x0
+ movne r2, #0x1
+ orr r1, r0, r1, lsl #0x10
+ moveq r2, #0x0
+ ldr r0, _020B83DC ; =NNS_G3dGlb
+ orr r1, r1, r2, lsl #0xf
+ str r1, [r0, #0x98]
+ bx lr
+ .balign 4
+_020B83DC: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbMaterialColorSpecEmi
+
+ arm_func_start NNS_G3dGlbMaterialColorDiffAmb
+NNS_G3dGlbMaterialColorDiffAmb: ; 0x020B83E0
+ cmp r2, #0x0
+ movne r2, #0x1
+ orr r1, r0, r1, lsl #0x10
+ moveq r2, #0x0
+ ldr r0, _020B8400 ; =NNS_G3dGlb
+ orr r1, r1, r2, lsl #0xf
+ str r1, [r0, #0x94]
+ bx lr
+ .balign 4
+_020B8400: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbMaterialColorDiffAmb
+
+ arm_func_start NNS_G3dGlbLightColor
+NNS_G3dGlbLightColor: ; 0x020B8404
+ ldr r2, _020B8414 ; =NNS_G3dGlb + 0xA8
+ orr r1, r1, r0, lsl #0x1e
+ str r1, [r2, r0, lsl #0x2]
+ bx lr
+ .balign 4
+_020B8414: .word NNS_G3dGlb + 0xA8
+ arm_func_end NNS_G3dGlbLightColor
+
+ arm_func_start NNS_G3dGlbLightVector
+NNS_G3dGlbLightVector: ; 0x020B8418
+ stmdb sp!, {r4,lr}
+ ldr ip, _020B8444 ; =0x000003FF
+ ldr lr, _020B8448 ; =NNS_G3dGlb + 0x80
+ and r4, r12, r1, asr #0x3
+ and r1, r12, r2, asr #0x3
+ and r2, r12, r3, asr #0x3
+ orr r1, r4, r1, lsl #0xa
+ orr r1, r1, r2, lsl #0x14
+ orr r1, r1, r0, lsl #0x1e
+ str r1, [lr, r0, lsl #0x2]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020B8444: .word 0x000003FF
+_020B8448: .word NNS_G3dGlb + 0x80
+ arm_func_end NNS_G3dGlbLightVector
+
+ arm_func_start NNS_G3dGlbSetBaseScale
+NNS_G3dGlbSetBaseScale: ; 0x020B844C
+ ldr r3, _020B846C ; =NNS_G3dGlb + 0xEC
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r0, _020B8470 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ bic r1, r1, #0xa4
+ str r1, [r0, #0xfc]
+ bx lr
+ .balign 4
+_020B846C: .word NNS_G3dGlb + 0xEC
+_020B8470: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbSetBaseScale
+
+ arm_func_start NNS_G3dGlbSetBaseTrans
+NNS_G3dGlbSetBaseTrans: ; 0x020B8474
+ ldr r3, _020B8494 ; =NNS_G3dGlb + 0xE0
+ ldmia r0, {r0-r2}
+ stmia r3, {r0-r2}
+ ldr r0, _020B8498 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ bic r1, r1, #0xa4
+ str r1, [r0, #0xfc]
+ bx lr
+ .balign 4
+_020B8494: .word NNS_G3dGlb + 0xE0
+_020B8498: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbSetBaseTrans
+
+ arm_func_start NNS_G3dGlbFlushP
+NNS_G3dGlbFlushP: ; 0x020B849C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, _020B84D4 ; =NNS_G3dGlb
+ mov r2, #0x3e
+ ldr r0, [r1], #0x4
+ bl NNS_G3dGeBufferOP_N
+ ldr r0, _020B84D4 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ bic r1, r1, #0x1
+ str r1, [r0, #0xfc]
+ bic r1, r1, #0x2
+ str r1, [r0, #0xfc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020B84D4: .word NNS_G3dGlb
+ arm_func_end NNS_G3dGlbFlushP
+
+ arm_func_start NNS_G3dGlbInit
+NNS_G3dGlbInit: ; 0x020B84D8
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r8, _020B85F4 ; =0x17101610
+ ldr r1, _020B85F8 ; =NNS_G3dGlb
+ ldr r5, _020B85FC ; =0x32323232
+ ldr r4, _020B8600 ; =0x60293130
+ ldr r3, _020B8604 ; =0x33333333
+ ldr r2, _020B8608 ; =0x002A1B19
+ mov r7, #0x0
+ mov r6, #0x2
+ ldr r0, _020B860C ; =NNS_G3dGlb + 0x4C
+ str r8, [r1, #0x0]
+ str r7, [r1, #0x4]
+ str r6, [r1, #0x48]
+ str r5, [r1, #0x7c]
+ str r4, [r1, #0x90]
+ str r3, [r1, #0xa4]
+ str r2, [r1, #0xb8]
+ bl MTX_Identity43_
+ ldr r0, _020B8610 ; =NNS_G3dGlb + 0x8
+ bl MTX_Identity44_
+ mov r2, r7
+ ldr r1, _020B85F8 ; =NNS_G3dGlb
+ ldr r7, _020B8614 ; =0x4210C210
+ ldr r0, _020B8618 ; =0x40000200
+ ldr lr, _020B861C ; =0x2D8B62D8
+ ldr sb, _020B8620 ; =0x800001FF
+ ldr r8, _020B8624 ; =0xC0080000
+ ldr r6, _020B8628 ; =0x001F008F
+ ldr r5, _020B862C ; =0xBFFF0000
+ ldr r4, _020B8630 ; =0x00007FFF
+ ldr ip, _020B8634 ; =0x800003E0
+ ldr r3, _020B8638 ; =0xC0007C00
+ str r0, [r1, #0x84]
+ str lr, [r1, #0x80]
+ mov lr, #0x4000001f
+ ldr r0, _020B863C ; =NNS_G3dGlb + 0xBC
+ str r9, [r1, #0x88]
+ str r8, [r1, #0x8c]
+ str r7, [r1, #0x94]
+ str r7, [r1, #0x98]
+ str r6, [r1, #0x9c]
+ str r5, [r1, #0xa0]
+ str r4, [r1, #0xa8]
+ str lr, [r1, #0xac]
+ str r12, [r1, #0xb0]
+ str r3, [r1, #0xb4]
+ str r2, [r1, #0xe0]
+ str r2, [r1, #0xe4]
+ str r2, [r1, #0xe8]
+ bl MTX_Identity33_
+ mov r3, #0x1000
+ ldr r0, _020B85F8 ; =NNS_G3dGlb
+ mov r2, #0x0
+ rsb r1, r3, #0x0
+ str r3, [r0, #0xec]
+ str r3, [r0, #0xf0]
+ str r3, [r0, #0xf4]
+ str r2, [r0, #0xf8]
+ str r2, [r0, #0xfc]
+ str r2, [r0, #0x248]
+ str r2, [r0, #0x244]
+ str r2, [r0, #0x240]
+ str r2, [r0, #0x254]
+ str r2, [r0, #0x24c]
+ str r3, [r0, #0x250]
+ str r2, [r0, #0x25c]
+ str r2, [r0, #0x258]
+ str r1, [r0, #0x260]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020B85F4: .word 0x17101610
+_020B85F8: .word NNS_G3dGlb
+_020B85FC: .word 0x32323232
+_020B8600: .word 0x60293130
+_020B8604: .word 0x33333333
+_020B8608: .word 0x002A1B19
+_020B860C: .word NNS_G3dGlb + 0x4C
+_020B8610: .word NNS_G3dGlb + 0x8
+_020B8614: .word 0x4210C210
+_020B8618: .word 0x40000200
+_020B861C: .word 0x2D8B62D8
+_020B8620: .word 0x800001FF
+_020B8624: .word 0xC0080000
+_020B8628: .word 0x001F008F
+_020B862C: .word 0xBFFF0000
+_020B8630: .word 0x00007FFF
+_020B8634: .word 0x800003E0
+_020B8638: .word 0xC0007C00
+_020B863C: .word NNS_G3dGlb + 0xBC
+ arm_func_end NNS_G3dGlbInit
diff --git a/arm9/asm/NNS_G3D_kernel.s b/arm9/asm/NNS_G3D_kernel.s
new file mode 100644
index 00000000..ebf3d210
--- /dev/null
+++ b/arm9/asm/NNS_G3D_kernel.s
@@ -0,0 +1,858 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G3dReleaseMdlSet
+NNS_G3dReleaseMdlSet: ; 0x020B772C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r0
+ ldrb r0, [r6, #0x9]
+ mov r5, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r7,pc}
+ add r4, r6, #0x8
+_020B7750:
+ ldrh r0, [r6, #0xe]
+ ldrh r1, [r4, r0]
+ add r0, r4, r0
+ mla r0, r1, r5, r0
+ ldr r0, [r0, #0x4]
+ add r7, r6, r0
+ mov r0, r7
+ bl NNS_G3dReleaseMdlTex
+ mov r0, r7
+ bl NNS_G3dReleaseMdlPltt
+ ldrb r0, [r6, #0x9]
+ add r5, r5, #0x1
+ cmp r5, r0
+ blo _020B7750
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G3dReleaseMdlSet
+
+ arm_func_start NNS_G3dBindMdlSet
+NNS_G3dBindMdlSet: ; 0x020B7790
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ ldrb r0, [r8, #0x9]
+ mov r7, r1
+ mov r5, #0x1
+ cmp r0, #0x0
+ mov r6, #0x0
+ bls _020B7800
+ add r4, r8, #0x8
+_020B77B8:
+ ldrh r0, [r8, #0xe]
+ mov r1, r7
+ ldrh r2, [r4, r0]
+ add r0, r4, r0
+ mla r0, r2, r6, r0
+ ldr r0, [r0, #0x4]
+ add r9, r8, r0
+ mov r0, r9
+ bl NNS_G3dBindMdlTex
+ and r5, r5, r0
+ mov r0, r9
+ mov r1, r7
+ bl NNS_G3dBindMdlPltt
+ ldrb r1, [r8, #0x9]
+ add r6, r6, #0x1
+ and r5, r5, r0
+ cmp r6, r1
+ blo _020B77B8
+_020B7800:
+ mov r0, r5
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end NNS_G3dBindMdlSet
+
+ arm_func_start NNS_G3dReleaseMdlPltt
+NNS_G3dReleaseMdlPltt: ; 0x020B780C
+ ldr r2, [r0, #0x8]
+ mov r1, #0x0
+ add r2, r0, r2
+ ldrh r0, [r2, #0x2]
+ add r12, r2, r0
+ ldrb r0, [r12, #0x1]
+ cmp r0, #0x0
+ bxls lr
+_020B782C:
+ ldrh r2, [r12, #0x6]
+ ldrh r0, [r12, r2]
+ add r2, r12, r2
+ add r2, r2, #0x4
+ mla r3, r0, r1, r2
+ ldrb r0, [r3, #0x3]
+ add r1, r1, #0x1
+ ands r2, r0, #0x1
+ bicne r0, r0, #0x1
+ strneb r0, [r3, #0x3]
+ ldrb r0, [r12, #0x1]
+ cmp r1, r0
+ blo _020B782C
+ bx lr
+ arm_func_end NNS_G3dReleaseMdlPltt
+
+ arm_func_start NNS_G3dBindMdlPltt
+NNS_G3dBindMdlPltt: ; 0x020B7864
+ stmdb sp!, {r4-r10,lr}
+ ldr r2, [r0, #0x8]
+ mov r10, r1
+ add r9, r0, r2
+ ldrh r0, [r9, #0x2]
+ mov r6, #0x1
+ mov r7, #0x0
+ add r8, r9, r0
+ ldrb r0, [r8, #0x1]
+ cmp r0, #0x0
+ bls _020B7908
+ mov r5, r7
+ mov r4, r7
+_020B7898:
+ ldrh r1, [r8, #0x6]
+ ldrh r0, [r10, #0x34]
+ add r2, r8, r1
+ ldrh r1, [r2, #0x2]
+ add r0, r10, r0
+ add r1, r2, r1
+ add r1, r1, r5
+ bl NNS_G3dGetResDataByName
+ movs r3, r0
+ beq _020B78F0
+ ldrh r1, [r8, #0x6]
+ ldrh r0, [r8, r1]
+ add r1, r8, r1
+ add r1, r1, #0x4
+ mla r1, r0, r7, r1
+ ldrb r0, [r1, #0x3]
+ ands r0, r0, #0x1
+ bne _020B78F4
+ mov r0, r9
+ mov r2, r10
+ bl bindMdlPltt_Internal_
+ b _020B78F4
+_020B78F0:
+ mov r6, r4
+_020B78F4:
+ ldrb r0, [r8, #0x1]
+ add r7, r7, #0x1
+ add r5, r5, #0x10
+ cmp r7, r0
+ blo _020B7898
+_020B7908:
+ mov r0, r6
+ ldmia sp!, {r4-r10,pc}
+ arm_func_end NNS_G3dBindMdlPltt
+
+ arm_func_start bindMdlPltt_Internal_
+bindMdlPltt_Internal_: ; 0x020B7910
+ stmdb sp!, {r4-r6,lr}
+ ldrh r5, [r1, #0x0]
+ ldr r2, [r2, #0x2c]
+ ldrh r4, [r3, #0x2]
+ mov r2, r2, lsl #0x10
+ add r12, r0, r5
+ mov r5, r2, lsr #0x10
+ ands r2, r4, #0x1
+ ldrh r4, [r3, #0x0]
+ moveq r3, r5, lsl #0xf
+ moveq r5, r3, lsr #0x10
+ moveq r2, r4, lsl #0xf
+ moveq r4, r2, lsr #0x10
+ ldrb r3, [r1, #0x2]
+ mov r2, #0x0
+ cmp r3, #0x0
+ bls _020B7994
+ add r3, r4, r5
+ mov r3, r3, lsl #0x10
+ add r6, r0, #0x4
+ mov r4, r3, lsr #0x10
+_020B7964:
+ ldrh r5, [r0, #0xa]
+ ldrb r3, [r12, r2]
+ add r2, r2, #0x1
+ ldrh lr, [r6, r5]
+ add r5, r6, r5
+ mla r3, lr, r3, r5
+ ldr r3, [r3, #0x4]
+ add r3, r0, r3
+ strh r4, [r3, #0x1c]
+ ldrb r3, [r1, #0x2]
+ cmp r2, r3
+ blo _020B7964
+_020B7994:
+ ldrb r0, [r1, #0x3]
+ orr r0, r0, #0x1
+ strb r0, [r1, #0x3]
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end bindMdlPltt_Internal_
+
+ arm_func_start NNS_G3dReleaseMdlTex
+NNS_G3dReleaseMdlTex: ; 0x020B79A4
+ stmdb sp!, {r4-r6,lr}
+ ldr r2, [r0, #0x8]
+ mov r4, #0x0
+ ldrh r1, [r0, r2]
+ add r6, r0, r2
+ add r5, r6, r1
+ ldrb r0, [r5, #0x1]
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020B79C8:
+ ldrh r1, [r5, #0x6]
+ ldrh r0, [r5, r1]
+ add r1, r5, r1
+ add r1, r1, #0x4
+ mla r1, r0, r4, r1
+ ldrb r0, [r1, #0x3]
+ ands r0, r0, #0x1
+ beq _020B79F0
+ mov r0, r6
+ bl releaseMdlTex_Internal_
+_020B79F0:
+ ldrb r0, [r5, #0x1]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020B79C8
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dReleaseMdlTex
+
+ arm_func_start NNS_G3dBindMdlTex
+NNS_G3dBindMdlTex: ; 0x020B7A04
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ mov r10, r1
+ ldrh r1, [r0, r2]
+ add r9, r0, r2
+ mov r11, #0x1
+ add r8, r9, r1
+ ldrb r0, [r8, #0x1]
+ mov r7, #0x0
+ cmp r0, #0x0
+ bls _020B7AAC
+ mov r6, r7
+ mov r4, r7
+ add r5, r10, #0x3c
+_020B7A40:
+ ldrh r1, [r8, #0x6]
+ mov r0, r5
+ add r2, r8, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl NNS_G3dGetResDataByName
+ movs r3, r0
+ beq _020B7A94
+ ldrh r1, [r8, #0x6]
+ ldrh r0, [r8, r1]
+ add r1, r8, r1
+ add r1, r1, #0x4
+ mla r1, r0, r7, r1
+ ldrb r0, [r1, #0x3]
+ ands r0, r0, #0x1
+ bne _020B7A98
+ mov r0, r9
+ mov r2, r10
+ bl bindMdlTex_Internal_
+ b _020B7A98
+_020B7A94:
+ mov r11, r4
+_020B7A98:
+ ldrb r0, [r8, #0x1]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020B7A40
+_020B7AAC:
+ mov r0, r11
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end NNS_G3dBindMdlTex
+
+ arm_func_start releaseMdlTex_Internal_
+releaseMdlTex_Internal_: ; 0x020B7AB8
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrh r4, [r1, #0x0]
+ ldrb r2, [r1, #0x2]
+ mov r3, #0x0
+ add r12, r0, r4
+ cmp r2, #0x0
+ bls _020B7B28
+ add r2, r0, #0x4
+ mov r5, #0x1000
+ ldr lr, _020B7B3C ; =0xC00F0000
+_020B7AE4:
+ ldrh r7, [r0, #0xa]
+ ldrb r4, [r12, r3]
+ add r3, r3, #0x1
+ ldrh r6, [r2, r7]
+ add r7, r2, r7
+ mla r4, r6, r4, r7
+ ldr r4, [r4, #0x4]
+ add r6, r0, r4
+ ldr r4, [r6, #0x14]
+ and r4, r4, lr
+ str r4, [r6, #0x14]
+ str r5, [r6, #0x24]
+ ldr r4, [r6, #0x24]
+ str r4, [r6, #0x28]
+ ldrb r4, [r1, #0x2]
+ cmp r3, r4
+ blo _020B7AE4
+_020B7B28:
+ ldrb r0, [r1, #0x3]
+ bic r0, r0, #0x1
+ strb r0, [r1, #0x3]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B7B3C: .word 0xC00F0000
+ arm_func_end releaseMdlTex_Internal_
+
+ arm_func_start bindMdlTex_Internal_
+bindMdlTex_Internal_: ; 0x020B7B40
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r11, r1
+ mov r9, r3
+ ldr r1, [r9, #0x0]
+ mov r10, r0
+ and r0, r1, #0x1c000000
+ cmp r0, #0x14000000
+ ldrh r3, [r11, #0x0]
+ ldrne r1, [r2, #0x8]
+ mov r8, #0x0
+ add r0, r10, r3
+ str r0, [sp, #0x4]
+ ldrne r0, _020B7C50 ; =0x0000FFFF
+ andne r0, r1, r0
+ strne r0, [sp, #0x0]
+ ldreq r1, [r2, #0x18]
+ ldreq r0, _020B7C50 ; =0x0000FFFF
+ andeq r0, r1, r0
+ streq r0, [sp, #0x0]
+ ldrb r0, [r11, #0x2]
+ cmp r0, #0x0
+ bls _020B7C3C
+ mov r4, #0x1000
+ add r5, r10, #0x4
+_020B7BA4:
+ ldrh r6, [r10, #0xa]
+ ldr r0, [sp, #0x4]
+ ldr r1, [r9, #0x0]
+ ldrb r2, [r0, r8]
+ ldrh r3, [r5, r6]
+ ldr r0, [sp, #0x0]
+ add r6, r5, r6
+ add r0, r1, r0
+ mla r1, r3, r2, r6
+ ldr r1, [r1, #0x4]
+ add r6, r10, r1
+ ldr r1, [r6, #0x14]
+ orr r0, r1, r0
+ str r0, [r6, #0x14]
+ ldr r3, [r9, #0x4]
+ ldr r0, _020B7C54 ; =0x000007FF
+ ldrh r1, [r6, #0x20]
+ and r2, r3, r0
+ and r7, r0, r3, lsr #0xb
+ cmp r2, r1
+ moveq r0, r4
+ beq _020B7C08
+ mov r0, r2, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020B7C08:
+ str r0, [r6, #0x24]
+ ldrh r1, [r6, #0x22]
+ cmp r7, r1
+ moveq r0, r4
+ beq _020B7C28
+ mov r0, r7, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020B7C28:
+ str r0, [r6, #0x28]
+ ldrb r0, [r11, #0x2]
+ add r8, r8, #0x1
+ cmp r8, r0
+ blo _020B7BA4
+_020B7C3C:
+ ldrb r0, [r11, #0x3]
+ orr r0, r0, #0x1
+ strb r0, [r11, #0x3]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B7C50: .word 0x0000FFFF
+_020B7C54: .word 0x000007FF
+ arm_func_end bindMdlTex_Internal_
+
+ arm_func_start NNS_G3dPlttReleasePlttKey
+NNS_G3dPlttReleasePlttKey: ; 0x020B7C58
+ ldrh r2, [r0, #0x32]
+ mov r1, #0x0
+ bic r2, r2, #0x1
+ strh r2, [r0, #0x32]
+ ldr r2, [r0, #0x2c]
+ str r1, [r0, #0x2c]
+ mov r0, r2
+ bx lr
+ arm_func_end NNS_G3dPlttReleasePlttKey
+
+ arm_func_start NNS_G3dPlttLoad
+NNS_G3dPlttLoad: ; 0x020B7C78
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r4, r1
+ mov r5, r0
+ beq _020B7C90
+ bl GX_BeginLoadTexPltt
+_020B7C90:
+ ldrh r2, [r5, #0x30]
+ ldr r0, [r5, #0x38]
+ ldr r3, [r5, #0x2c]
+ ldr r1, _020B7CD8 ; =0x0000FFFF
+ add r0, r5, r0
+ and r1, r3, r1
+ mov r1, r1, lsl #0x3
+ mov r2, r2, lsl #0x3
+ bl GX_LoadTexPltt
+ ldrh r0, [r5, #0x32]
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ orr r0, r0, #0x1
+ strh r0, [r5, #0x32]
+ ldmeqia sp!, {r4-r5,pc}
+ bl GX_EndLoadTexPltt
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B7CD8: .word 0x0000FFFF
+ arm_func_end NNS_G3dPlttLoad
+
+ arm_func_start NNS_G3dPlttSetPlttKey
+NNS_G3dPlttSetPlttKey: ; 0x020B7CDC
+ str r1, [r0, #0x2c]
+ bx lr
+ arm_func_end NNS_G3dPlttSetPlttKey
+
+ arm_func_start NNS_G3dPlttGetRequiredSize
+NNS_G3dPlttGetRequiredSize: ; 0x020B7CE4
+ ldrh r0, [r0, #0x30]
+ mov r0, r0, lsl #0x3
+ bx lr
+ arm_func_end NNS_G3dPlttGetRequiredSize
+
+ arm_func_start NNS_G3dTexReleaseTexKey
+NNS_G3dTexReleaseTexKey: ; 0x020B7CF0
+ ldrh r12, [r0, #0x10]
+ mov r3, #0x0
+ bic r12, r12, #0x1
+ strh r12, [r0, #0x10]
+ ldrh r12, [r0, #0x20]
+ bic r12, r12, #0x1
+ strh r12, [r0, #0x20]
+ ldr r12, [r0, #0x8]
+ str r12, [r1, #0x0]
+ str r3, [r0, #0x8]
+ ldr r1, [r0, #0x18]
+ str r1, [r2, #0x0]
+ str r3, [r0, #0x18]
+ bx lr
+ arm_func_end NNS_G3dTexReleaseTexKey
+
+ arm_func_start NNS_G3dTexLoad
+NNS_G3dTexLoad: ; 0x020B7D28
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ movs r8, r1
+ mov r9, r0
+ beq _020B7D40
+ bl GX_BeginLoadTex
+_020B7D40:
+ ldrh r0, [r9, #0xc]
+ movs r2, r0, lsl #0x3
+ beq _020B7D74
+ ldr r1, [r9, #0x8]
+ ldr r0, _020B7DF4 ; =0x0000FFFF
+ ldr r3, [r9, #0x14]
+ and r1, r1, r0
+ add r0, r9, r3
+ mov r1, r1, lsl #0x3
+ bl GX_LoadTex
+ ldrh r0, [r9, #0x10]
+ orr r0, r0, #0x1
+ strh r0, [r9, #0x10]
+_020B7D74:
+ ldrh r0, [r9, #0x1c]
+ movs r7, r0, lsl #0x3
+ beq _020B7DDC
+ ldr r1, [r9, #0x18]
+ ldr r0, _020B7DF4 ; =0x0000FFFF
+ ldr r3, [r9, #0x24]
+ and r4, r1, r0
+ mov r5, r4, lsl #0x3
+ ldr r6, [r9, #0x28]
+ mov r1, r5
+ mov r2, r7
+ add r0, r9, r3
+ add r6, r9, r6
+ bl GX_LoadTex
+ ldr r0, _020B7DF8 ; =0x0001FFFF
+ and r1, r5, #0x40000
+ and r0, r0, r4, lsl #0x3
+ mov r0, r0, lsr #0x1
+ add r2, r0, #0x20000
+ mov r0, r6
+ add r1, r2, r1, lsr #0x2
+ mov r2, r7, lsr #0x1
+ bl GX_LoadTex
+ ldrh r0, [r9, #0x20]
+ orr r0, r0, #0x1
+ strh r0, [r9, #0x20]
+_020B7DDC:
+ cmp r8, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r9,pc}
+ bl GX_EndLoadTex
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020B7DF4: .word 0x0000FFFF
+_020B7DF8: .word 0x0001FFFF
+ arm_func_end NNS_G3dTexLoad
+
+ arm_func_start NNS_G3dTexSetTexKey
+NNS_G3dTexSetTexKey: ; 0x020B7DFC
+ cmp r1, #0x0
+ strne r1, [r0, #0x8]
+ cmp r2, #0x0
+ strne r2, [r0, #0x18]
+ bx lr
+ arm_func_end NNS_G3dTexSetTexKey
+
+ arm_func_start NNS_G3dTex4x4GetRequiredSize
+NNS_G3dTex4x4GetRequiredSize: ; 0x020B7E10
+ ldrh r0, [r0, #0x1c]
+ mov r0, r0, lsl #0x3
+ bx lr
+ arm_func_end NNS_G3dTex4x4GetRequiredSize
+
+ arm_func_start NNS_G3dTexGetRequiredSize
+NNS_G3dTexGetRequiredSize: ; 0x020B7E1C
+ ldrh r0, [r0, #0xc]
+ mov r0, r0, lsl #0x3
+ bx lr
+ arm_func_end NNS_G3dTexGetRequiredSize
+
+ arm_func_start NNS_G3dRenderObjRemoveAnmObj
+NNS_G3dRenderObjRemoveAnmObj: ; 0x020B7E28
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ add r0, r5, #0x8
+ mov r4, r1
+ bl removeLink_
+ cmp r0, #0x0
+ bne _020B7E74
+ mov r1, r4
+ add r0, r5, #0x10
+ bl removeLink_
+ cmp r0, #0x0
+ bne _020B7E74
+ mov r1, r4
+ add r0, r5, #0x18
+ bl removeLink_
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+_020B7E74:
+ ldr r0, [r5, #0x0]
+ orr r0, r0, #0x10
+ str r0, [r5, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_G3dRenderObjRemoveAnmObj
+
+ arm_func_start removeLink_
+removeLink_: ; 0x020B7E88
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r2, r1
+ bne _020B7EB8
+ ldr r3, [r2, #0x10]
+ mov r2, #0x0
+ str r3, [r0, #0x0]
+ str r2, [r1, #0x10]
+ mov r0, #0x1
+ bx lr
+_020B7EB8:
+ ldr r3, [r2, #0x10]
+ cmp r3, #0x0
+ beq _020B7EF4
+_020B7EC4:
+ cmp r3, r1
+ bne _020B7EE4
+ ldr r1, [r3, #0x10]
+ mov r0, #0x0
+ str r1, [r2, #0x10]
+ str r0, [r3, #0x10]
+ mov r0, #0x1
+ bx lr
+_020B7EE4:
+ mov r2, r3
+ ldr r3, [r3, #0x10]
+ cmp r3, #0x0
+ bne _020B7EC4
+_020B7EF4:
+ mov r0, #0x0
+ bx lr
+ arm_func_end removeLink_
+
+ arm_func_start NNS_G3dRenderObjAddAnmObj
+NNS_G3dRenderObjAddAnmObj: ; 0x020B7EFC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ ldr r2, [r4, #0x8]
+ mov r5, r0
+ ldrb r0, [r2, #0x0]
+ cmp r0, #0x4a
+ beq _020B7F50
+ cmp r0, #0x4d
+ beq _020B7F34
+ cmp r0, #0x56
+ beq _020B7F6C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B7F34:
+ add r0, r5, #0x3c
+ bl updateHintVec_
+ mov r1, r4
+ add r0, r5, #0x8
+ bl addLink_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B7F50:
+ add r0, r5, #0x44
+ bl updateHintVec_
+ mov r1, r4
+ add r0, r5, #0x10
+ bl addLink_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020B7F6C:
+ add r0, r5, #0x4c
+ bl updateHintVec_
+ mov r1, r4
+ add r0, r5, #0x18
+ bl addLink_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNS_G3dRenderObjAddAnmObj
+
+ local_arm_func_start updateHintVec_
+updateHintVec_: ; 0x020B7F88
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ mov r3, #0x1
+ mov r4, #0x0
+_020B7FA4:
+ ldrb r2, [r1, #0x19]
+ mov r5, r4
+ cmp r2, #0x0
+ ble _020B7FE4
+_020B7FB4:
+ add r2, r1, r5, lsl #0x1
+ ldrh r2, [r2, #0x1a]
+ ands r2, r2, #0x100
+ movne lr, r5, asr #0x5
+ andne r2, r5, #0x1f
+ ldrne r12, [r0, lr, lsl #0x2]
+ add r5, r5, #0x1
+ orrne r2, r12, r3, lsl r2
+ strne r2, [r0, lr, lsl #0x2]
+ ldrb r2, [r1, #0x19]
+ cmp r5, r2
+ blt _020B7FB4
+_020B7FE4:
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x0
+ bne _020B7FA4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end updateHintVec_
+
+ arm_func_start addLink_
+addLink_: ; 0x020B7FF8
+ ldr r12, [r0, #0x0]
+ cmp r12, #0x0
+ streq r1, [r0, #0x0]
+ bxeq lr
+ ldr r3, [r12, #0x10]
+ cmp r3, #0x0
+ bne _020B8058
+ ldrb r3, [r12, #0x18]
+ ldrb r2, [r1, #0x18]
+ cmp r3, r2
+ bls _020B8050
+ ldr r2, [r1, #0x10]
+ mov r3, r1
+ cmp r2, #0x0
+ beq _020B8044
+_020B8034:
+ ldr r3, [r3, #0x10]
+ ldr r2, [r3, #0x10]
+ cmp r2, #0x0
+ bne _020B8034
+_020B8044:
+ str r12, [r3, #0x10]
+ str r1, [r0, #0x0]
+ bx lr
+_020B8050:
+ str r1, [r12, #0x10]
+ bx lr
+_020B8058:
+ cmp r3, #0x0
+ beq _020B80AC
+ ldrb r2, [r1, #0x18]
+_020B8064:
+ ldrb r0, [r3, #0x18]
+ cmp r0, r2
+ blo _020B809C
+ ldr r0, [r1, #0x10]
+ mov r2, r1
+ cmp r0, #0x0
+ beq _020B8090
+_020B8080:
+ ldr r2, [r2, #0x10]
+ ldr r0, [r2, #0x10]
+ cmp r0, #0x0
+ bne _020B8080
+_020B8090:
+ str r1, [r12, #0x10]
+ str r3, [r2, #0x10]
+ bx lr
+_020B809C:
+ mov r12, r3
+ ldr r3, [r3, #0x10]
+ cmp r3, #0x0
+ bne _020B8064
+_020B80AC:
+ str r1, [r12, #0x10]
+ bx lr
+ arm_func_end addLink_
+
+ arm_func_start NNS_G3dRenderObjInit
+NNS_G3dRenderObjInit: ; 0x020B80B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r1, r5
+ mov r0, #0x0
+ mov r2, #0x54
+ bl MIi_CpuClear32
+ ldr r0, _020B8104 ; =NNS_G3dFuncBlendMatDefault
+ ldr r1, _020B8108 ; =NNS_G3dFuncBlendJntDefault
+ ldr r2, [r0, #0x0]
+ ldr r0, _020B810C ; =NNS_G3dFuncBlendVisDefault
+ str r2, [r5, #0xc]
+ ldr r1, [r1, #0x0]
+ str r1, [r5, #0x14]
+ ldr r0, [r0, #0x0]
+ str r0, [r5, #0x1c]
+ str r4, [r5, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020B8104: .word NNS_G3dFuncBlendMatDefault
+_020B8108: .word NNS_G3dFuncBlendJntDefault
+_020B810C: .word NNS_G3dFuncBlendVisDefault
+ arm_func_end NNS_G3dRenderObjInit
+
+ arm_func_start NNS_G3dAnmObjInit
+NNS_G3dAnmObjInit: ; 0x020B8110
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ str r12, [r0, #0x0]
+ str r1, [r0, #0x8]
+ str r12, [r0, #0x10]
+ mov r4, #0x7f
+ strb r4, [r0, #0x18]
+ mov r4, #0x1000
+ str r4, [r0, #0x4]
+ ldr lr, _020B81A4 ; =NNS_G3dAnmFmtNum
+ str r3, [r0, #0x14]
+ ldr r6, [lr, #0x0]
+ cmp r6, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r7,pc}
+ ldrb r7, [r1, #0x0]
+ ldr r4, _020B81A8 ; =NNS_G3dAnmObjInitFuncArray
+_020B8158:
+ ldrb r3, [r4, r12, lsl #0x3]
+ mov r5, r12, lsl #0x3
+ cmp r7, r3
+ bne _020B8190
+ add r3, r4, r5
+ ldrh lr, [r1, #0x2]
+ ldrh r3, [r3, #0x2]
+ cmp lr, r3
+ bne _020B8190
+ ldr r3, _020B81AC ; =NNS_G3dAnmObjInitFuncArray + 0x4
+ ldr r3, [r3, r5]
+ blx r3
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+_020B8190:
+ add r12, r12, #0x1
+ cmp r12, r6
+ blo _020B8158
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B81A4: .word NNS_G3dAnmFmtNum
+_020B81A8: .word NNS_G3dAnmObjInitFuncArray
+_020B81AC: .word NNS_G3dAnmObjInitFuncArray + 0x4
+ arm_func_end NNS_G3dAnmObjInit
+
+ arm_func_start NNS_G3dAnmObjCalcSizeRequired
+NNS_G3dAnmObjCalcSizeRequired: ; 0x020B81B0
+ ldrb r0, [r0, #0x0]
+ cmp r0, #0x4a
+ beq _020B81E4
+ cmp r0, #0x4d
+ beq _020B81D0
+ cmp r0, #0x56
+ beq _020B81E4
+ b _020B81F8
+_020B81D0:
+ ldrb r0, [r1, #0x18]
+ mov r0, r0, lsl #0x1
+ add r0, r0, #0x1c
+ bic r0, r0, #0x3
+ bx lr
+_020B81E4:
+ ldrb r0, [r1, #0x17]
+ mov r0, r0, lsl #0x1
+ add r0, r0, #0x1c
+ bic r0, r0, #0x3
+ bx lr
+_020B81F8:
+ mov r0, #0x0
+ bx lr
+ arm_func_end NNS_G3dAnmObjCalcSizeRequired
diff --git a/arm9/asm/NNS_G3D_maya.s b/arm9/asm/NNS_G3D_maya.s
new file mode 100644
index 00000000..7a675533
--- /dev/null
+++ b/arm9/asm/NNS_G3D_maya.s
@@ -0,0 +1,594 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+calcTexMtx_: ; 0x021067B0
+ .word texmtxCalc_flag_
+ .word texmtxCalc_flagS_
+ .word texmtxCalc_flagR_
+ .word texmtxCalc_flagRS_
+ .word texmtxCalc_flagT_
+ .word texmtxCalc_flagTS_
+ .word texmtxCalc_flagTR_
+ .word texmtxCalc_flagTRS_
+
+ .section .text
+
+ arm_func_start NNSi_G3dSendTexSRTMaya
+NNSi_G3dSendTexSRTMaya: ; 0x020BE6E4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x50
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ ands r0, r0, #0x8
+ ldrne r0, _020BE820 ; =0x00101610
+ mov r3, #0x3
+ strne r0, [sp, #0x0]
+ ldreq r0, _020BE824 ; =0x00101810
+ mov r2, #0x2
+ streq r0, [sp, #0x0]
+ mov r0, #0x1000
+ str r0, [sp, #0x44]
+ str r3, [sp, #0x4]
+ str r2, [sp, #0x48]
+ str r1, [sp, #0x40]
+ str r1, [sp, #0x34]
+ str r1, [sp, #0x30]
+ str r1, [sp, #0x2c]
+ str r1, [sp, #0x28]
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x20]
+ str r1, [sp, #0x14]
+ str r1, [sp, #0x10]
+ ldr r1, [r4, #0x0]
+ ldr r0, _020BE828 ; =calcTexMtx_
+ and r1, r1, #0x7
+ ldr r2, [r0, r1, lsl #0x2]
+ add r0, sp, #0x8
+ mov r1, r4
+ blx r2
+ ldr r3, [r4, #0x30]
+ cmp r3, #0x1000
+ beq _020BE7B4
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x8]
+ ldr r2, [r4, #0x30]
+ ldr r0, [sp, #0x38]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0xc]
+ ldr r1, [r4, #0x30]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x38]
+_020BE7B4:
+ ldr r3, [r4, #0x34]
+ cmp r3, #0x1000
+ beq _020BE804
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x1c]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x18]
+ ldr r2, [r4, #0x34]
+ ldr r0, [sp, #0x3c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x1c]
+ ldr r1, [r4, #0x34]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x3c]
+_020BE804:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0x12
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x50
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BE820: .word 0x00101610
+_020BE824: .word 0x00101810
+_020BE828: .word calcTexMtx_
+ arm_func_end NNSi_G3dSendTexSRTMaya
+
+ local_arm_func_start texmtxCalc_flagTRS_
+texmtxCalc_flagTRS_: ; 0x020BE82C
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ bx lr
+ arm_func_end texmtxCalc_flagTRS_
+
+ local_arm_func_start texmtxCalc_flagTR_
+texmtxCalc_flagTR_: ; 0x020BE850
+ ldr r2, [r1, #0x18]
+ mov r12, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r12, [r0, #0x4]
+ str r12, [r0, #0x30]
+ ldr r2, [r1, #0x1c]
+ ldrh r3, [r1, #0x2e]
+ mov r1, r2, lsl #0x1
+ rsb r1, r1, #0x0
+ add r1, r1, #0x2000
+ mul r1, r3, r1
+ mov r1, r1, lsl #0x3
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+ arm_func_end texmtxCalc_flagTR_
+
+ local_arm_func_start texmtxCalc_flagTS_
+texmtxCalc_flagTS_: ; 0x020BE894
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ rsb r2, r2, #0x0
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrsh r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x22]
+ ldrh r2, [r5, #0x2c]
+ add r0, r1, r0
+ rsb r0, r0, #0x0
+ add r0, r0, #0x1000
+ mul r0, r2, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r6, #0x30]
+ ldrsh r1, [r5, #0x20]
+ ldrsh r0, [r5, #0x22]
+ ldrh r2, [r5, #0x2e]
+ sub r0, r1, r0
+ add r0, r0, #0x1000
+ mul r0, r2, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end texmtxCalc_flagTS_
+
+ local_arm_func_start texmtxCalc_flagT_
+texmtxCalc_flagT_: ; 0x020BE954
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r5, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r0, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r6, [r10, #0x0]
+ str r4, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ rsb r2, r5, #0x0
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ sub r1, r5, r4
+ add r0, r7, r6
+ ldrh r3, [r9, #0x2c]
+ ldr r2, [r9, #0x18]
+ sub r0, r2, r0
+ mul r0, r3, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r10, #0x30]
+ ldrh r2, [r9, #0x2e]
+ ldr r0, [r9, #0x1c]
+ sub r0, r1, r0
+ add r0, r0, #0x2000
+ mul r0, r2, r0
+ mov r0, r0, lsl #0x3
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ mul r0, r7, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end texmtxCalc_flagT_
+
+ local_arm_func_start texmtxCalc_flagRS_
+texmtxCalc_flagRS_: ; 0x020BEA3C
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ mov r12, #0x0
+ str r12, [r0, #0x4]
+ ldrh r2, [r1, #0x2c]
+ ldr r3, [r1, #0x24]
+ mul r2, r3, r2
+ rsb r2, r2, #0x0
+ mov r2, r2, lsl #0x4
+ str r2, [r0, #0x30]
+ ldrh r2, [r1, #0x2e]
+ ldr r1, [r1, #0x28]
+ mul r2, r1, r2
+ mov r1, r2, lsl #0x4
+ str r1, [r0, #0x34]
+ str r12, [r0, #0x10]
+ bx lr
+ arm_func_end texmtxCalc_flagRS_
+
+ local_arm_func_start texmtxCalc_flagR_
+texmtxCalc_flagR_: ; 0x020BEA84
+ stmdb sp!, {r4,lr}
+ ldr r3, [r1, #0x18]
+ mov r2, #0x0
+ str r3, [r0, #0x0]
+ ldr r3, [r1, #0x1c]
+ str r3, [r0, #0x14]
+ str r2, [r0, #0x4]
+ ldr r4, [r1, #0x18]
+ ldr r3, [r1, #0x24]
+ ldrh lr, [r1, #0x2c]
+ smull r12, r3, r4, r3
+ mov r4, r12, lsr #0x8
+ orr r4, r4, r3, lsl #0x18
+ rsb r3, r4, #0x0
+ mul r3, lr, r3
+ str r3, [r0, #0x30]
+ ldr r4, [r1, #0x1c]
+ ldr r12, [r1, #0x28]
+ mov r3, r4, lsl #0x1
+ smull lr, r12, r4, r12
+ rsb r4, r3, #0x0
+ mov r3, lr, lsr #0x8
+ ldrh lr, [r1, #0x2e]
+ add r1, r4, #0x2000
+ orr r3, r3, r12, lsl #0x18
+ mul r4, lr, r1
+ mul r1, lr, r3
+ add r1, r1, r4, lsl #0x3
+ str r1, [r0, #0x34]
+ str r2, [r0, #0x10]
+ ldmia sp!, {r4,pc}
+ arm_func_end texmtxCalc_flagR_
+
+ local_arm_func_start texmtxCalc_flagS_
+texmtxCalc_flagS_: ; 0x020BEB00
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ rsb r2, r2, #0x0
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrsh r2, [r5, #0x20]
+ ldrsh r1, [r5, #0x22]
+ ldrh r3, [r5, #0x2c]
+ ldr r0, [r5, #0x24]
+ add r1, r2, r1
+ rsb r1, r1, #0x0
+ add r1, r1, #0x1000
+ mul r2, r3, r1
+ mul r1, r0, r3
+ mov r0, r2, lsl #0x3
+ sub r0, r0, r1, lsl #0x4
+ str r0, [r6, #0x30]
+ ldrsh r2, [r5, #0x20]
+ ldrsh r1, [r5, #0x22]
+ ldrh r3, [r5, #0x2e]
+ ldr r0, [r5, #0x28]
+ sub r1, r2, r1
+ add r1, r1, #0x1000
+ mul r2, r3, r1
+ mul r1, r0, r3
+ mov r0, r2, lsl #0x3
+ add r0, r0, r1, lsl #0x4
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end texmtxCalc_flagS_
+
+ local_arm_func_start texmtxCalc_flag_
+texmtxCalc_flag_: ; 0x020BEBD8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r5, [r9, #0x22]
+ ldr r3, [r9, #0x18]
+ ldrsh r0, [r9, #0x20]
+ ldr r4, [r9, #0x1c]
+ smull r2, r1, r3, r5
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ smull r2, r1, r3, r0
+ mov r7, r2, lsr #0xc
+ orr r7, r7, r1, lsl #0x14
+ smull r3, r2, r4, r0
+ smull r1, r0, r4, r5
+ mov r5, r3, lsr #0xc
+ orr r5, r5, r2, lsl #0x14
+ mov r4, r1, lsr #0xc
+ orr r4, r4, r0, lsl #0x14
+ str r6, [r10, #0x0]
+ str r4, [r10, #0x14]
+ bl FX_GetDivResult
+ mov r1, r11
+ rsb r2, r5, #0x0
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ bl FX_DivAsync
+ sub r1, r5, r4
+ add r2, r7, r6
+ ldr r5, [r9, #0x18]
+ ldrh r0, [r9, #0x2c]
+ sub r3, r5, r2
+ ldr r2, [r9, #0x24]
+ mul r4, r0, r3
+ smull r3, r2, r5, r2
+ mov r4, r4, lsl #0x3
+ mov r3, r3, lsr #0x8
+ orr r3, r3, r2, lsl #0x18
+ mul r2, r0, r3
+ sub r0, r4, r2
+ str r0, [r10, #0x30]
+ ldr r4, [r9, #0x1c]
+ ldrh r3, [r9, #0x2e]
+ sub r0, r1, r4
+ add r0, r0, #0x2000
+ mul r2, r3, r0
+ ldr r0, [r9, #0x28]
+ smull r1, r0, r4, r0
+ mov r1, r1, lsr #0x8
+ orr r1, r1, r0, lsl #0x18
+ mul r0, r3, r1
+ add r0, r0, r2, lsl #0x3
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ mul r0, r7, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end texmtxCalc_flag_
+
+ arm_func_start NNSi_G3dGetJointScaleMaya
+NNSi_G3dGetJointScaleMaya: ; 0x020BECEC
+ stmdb sp!, {r4-r8,lr}
+ mov r12, r0
+ ands r0, r3, #0x4
+ ldrb r3, [r2, #0x3]
+ beq _020BED40
+ ldr r1, [r12, #0x0]
+ ands r0, r3, #0x2
+ orr r0, r1, #0x1
+ str r0, [r12, #0x0]
+ beq _020BEDB8
+ ldr r0, _020BEE2C ; =NNS_G3dRS
+ ldrb r7, [r2, #0x1]
+ ldr r0, [r0, #0x0]
+ mov r1, #0x1
+ add r6, r0, #0xc4
+ mov r5, r7, lsr #0x5
+ ldr r4, [r6, r5, lsl #0x2]
+ and r0, r7, #0x1f
+ orr r0, r4, r1, lsl r0
+ str r0, [r6, r5, lsl #0x2]
+ b _020BEDB8
+_020BED40:
+ ldr r4, [r1, #0x0]
+ ands r0, r3, #0x2
+ str r4, [r12, #0x4]
+ ldr r0, [r1, #0x4]
+ str r0, [r12, #0x8]
+ ldr r0, [r1, #0x8]
+ str r0, [r12, #0xc]
+ beq _020BEDB8
+ ldr lr, _020BEE2C ; =NNS_G3dRS
+ ldrb r0, [r2, #0x1]
+ ldr r4, [lr, #0x0]
+ mov lr, #0x18
+ add r8, r4, #0xc4
+ mov r7, r0, lsr #0x5
+ and r4, r0, #0x1f
+ mov r5, #0x1
+ mvn r4, r5, lsl r4
+ ldr r6, [r8, r7, lsl #0x2]
+ mul r5, r0, lr
+ and r0, r6, r4
+ str r0, [r8, r7, lsl #0x2]
+ ldr r4, [r1, #0xc]
+ ldr r0, _020BEE30 ; =NNS_G3dRSOnGlb + 0xE0C
+ ldr lr, _020BEE34 ; =NNS_G3dRSOnGlb + 0xE10
+ str r4, [r0, r5]
+ ldr r4, [r1, #0x10]
+ ldr r0, _020BEE38 ; =NNS_G3dRSOnGlb + 0xE14
+ str r4, [lr, r5]
+ ldr r1, [r1, #0x14]
+ str r1, [r0, r5]
+_020BEDB8:
+ ands r0, r3, #0x1
+ beq _020BEE1C
+ ldrb r0, [r2, #0x2]
+ ldr r2, [r12, #0x0]
+ ldr r1, _020BEE2C ; =NNS_G3dRS
+ orr r2, r2, #0x20
+ str r2, [r12, #0x0]
+ ldr r2, [r1, #0x0]
+ mov r1, r0, lsr #0x5
+ add r1, r2, r1, lsl #0x2
+ and r2, r0, #0x1f
+ mov r3, #0x1
+ mov r2, r3, lsl r2
+ ldr r1, [r1, #0xc4]
+ ands r1, r2, r1
+ ldrne r0, [r12, #0x0]
+ orrne r0, r0, #0x8
+ strne r0, [r12, #0x0]
+ bne _020BEE1C
+ ldr r2, _020BEE30 ; =NNS_G3dRSOnGlb + 0xE0C
+ mov r1, #0x18
+ mla r1, r0, r1, r2
+ add r3, r12, #0x10
+ ldmia r1, {r0-r2}
+ stmia r3, {r0-r2}
+_020BEE1C:
+ ldr r0, [r12, #0x0]
+ orr r0, r0, #0x10
+ str r0, [r12, #0x0]
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BEE2C: .word NNS_G3dRS
+_020BEE30: .word NNS_G3dRSOnGlb + 0xE0C
+_020BEE34: .word NNS_G3dRSOnGlb + 0xE10
+_020BEE38: .word NNS_G3dRSOnGlb + 0xE14
+ arm_func_end NNSi_G3dGetJointScaleMaya
+
+ arm_func_start NNSi_G3dSendJointSRTMaya
+NNSi_G3dSendJointSRTMaya: ; 0x020BEE3C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x0]
+ mov r4, #0x0
+ ands r0, r1, #0x4
+ moveq r4, #0x1
+ ands r0, r1, #0x20
+ beq _020BEE94
+ ands r0, r1, #0x8
+ bne _020BEE94
+ cmp r4, #0x0
+ beq _020BEE84
+ add r1, r5, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+ mov r4, #0x0
+_020BEE84:
+ add r1, r5, #0x10
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+_020BEE94:
+ ldr r0, [r5, #0x0]
+ ands r0, r0, #0x2
+ bne _020BEED0
+ cmp r4, #0x0
+ beq _020BEEBC
+ add r1, r5, #0x28
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+ b _020BEEE8
+_020BEEBC:
+ add r1, r5, #0x28
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ b _020BEEE8
+_020BEED0:
+ cmp r4, #0x0
+ beq _020BEEE8
+ add r1, r5, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+_020BEEE8:
+ ldr r0, [r5, #0x0]
+ ands r0, r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+ add r1, r5, #0x4
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNSi_G3dSendJointSRTMaya
diff --git a/arm9/asm/NNS_G3D_mem.s b/arm9/asm/NNS_G3D_mem.s
new file mode 100644
index 00000000..e01336e5
--- /dev/null
+++ b/arm9/asm/NNS_G3D_mem.s
@@ -0,0 +1,25 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G3dFreeAnmObj
+NNS_G3dFreeAnmObj: ; 0x020BB8C4
+ ldr ip, _020BB8CC ; =NNS_FndFreeToAllocator
+ bx r12
+ .balign 4
+_020BB8CC: .word NNS_FndFreeToAllocator
+ arm_func_end NNS_G3dFreeAnmObj
+
+ arm_func_start NNS_G3dAllocAnmObj
+NNS_G3dAllocAnmObj: ; 0x020BB8D0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, r1
+ mov r1, r2
+ bl NNS_G3dAnmObjCalcSizeRequired
+ mov r1, r0
+ mov r0, r4
+ bl NNS_FndAllocFromAllocator
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G3dAllocAnmObj
diff --git a/arm9/asm/NNS_G3D_model.s b/arm9/asm/NNS_G3D_model.s
new file mode 100644
index 00000000..958a9b8a
--- /dev/null
+++ b/arm9/asm/NNS_G3D_model.s
@@ -0,0 +1,656 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G3dMdlSetMdlXLDepthUpdateAll
+NNS_G3dMdlSetMdlXLDepthUpdateAll: ; 0x020BB8F4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB910:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlXLDepthUpdate
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB910
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlXLDepthUpdateAll
+
+ arm_func_start NNS_G3dMdlSetMdlFarClipAll
+NNS_G3dMdlSetMdlFarClipAll: ; 0x020BB934
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB950:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlFarClip
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB950
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlFarClipAll
+
+ arm_func_start NNS_G3dMdlSetMdl1DotAll
+NNS_G3dMdlSetMdl1DotAll: ; 0x020BB974
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB990:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdl1Dot
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB990
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdl1DotAll
+
+ arm_func_start NNS_G3dMdlSetMdlDepthTestCondAll
+NNS_G3dMdlSetMdlDepthTestCondAll: ; 0x020BB9B4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BB9D0:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlDepthTestCond
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BB9D0
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlDepthTestCondAll
+
+ arm_func_start NNS_G3dMdlSetMdlFogEnableFlagAll
+NNS_G3dMdlSetMdlFogEnableFlagAll: ; 0x020BB9F4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBA10:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlFogEnableFlag
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBA10
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlFogEnableFlagAll
+
+ arm_func_start NNS_G3dMdlSetMdlAlphaAll
+NNS_G3dMdlSetMdlAlphaAll: ; 0x020BBA34
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBA50:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlAlpha
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBA50
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlAlphaAll
+
+ arm_func_start NNS_G3dMdlSetMdlPolygonIDAll
+NNS_G3dMdlSetMdlPolygonIDAll: ; 0x020BBA74
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBA90:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlPolygonID
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBA90
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlPolygonIDAll
+
+ arm_func_start NNS_G3dMdlSetMdlCullModeAll
+NNS_G3dMdlSetMdlCullModeAll: ; 0x020BBAB4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBAD0:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlCullMode
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBAD0
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlCullModeAll
+
+ arm_func_start NNS_G3dMdlSetMdlPolygonModeAll
+NNS_G3dMdlSetMdlPolygonModeAll: ; 0x020BBAF4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBB10:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlPolygonMode
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBB10
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlPolygonModeAll
+
+ arm_func_start NNS_G3dMdlSetMdlLightEnableFlagAll
+NNS_G3dMdlSetMdlLightEnableFlagAll: ; 0x020BBB34
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBB50:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlLightEnableFlag
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBB50
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlLightEnableFlagAll
+
+ arm_func_start NNS_G3dMdlSetMdlEmiAll
+NNS_G3dMdlSetMdlEmiAll: ; 0x020BBB74
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBB90:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlEmi
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBB90
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlEmiAll
+
+ arm_func_start NNS_G3dMdlSetMdlSpecAll
+NNS_G3dMdlSetMdlSpecAll: ; 0x020BBBB4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBBD0:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlSpec
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBBD0
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlSpecAll
+
+ arm_func_start NNS_G3dMdlSetMdlAmbAll
+NNS_G3dMdlSetMdlAmbAll: ; 0x020BBBF4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBC10:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlAmb
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBC10
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlAmbAll
+
+ arm_func_start NNS_G3dMdlSetMdlDiffAll
+NNS_G3dMdlSetMdlDiffAll: ; 0x020BBC34
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldrb r0, [r6, #0x18]
+ mov r5, r1
+ mov r4, #0x0
+ cmp r0, #0x0
+ ldmlsia sp!, {r4-r6,pc}
+_020BBC50:
+ mov r0, r6
+ mov r1, r4
+ mov r2, r5
+ bl NNS_G3dMdlSetMdlDiff
+ ldrb r0, [r6, #0x18]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blo _020BBC50
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNS_G3dMdlSetMdlDiffAll
+
+ arm_func_start NNS_G3dMdlSetMdlXLDepthUpdate
+NNS_G3dMdlSetMdlXLDepthUpdate: ; 0x020BBC74
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x800
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x800
+ streq r0, [r1, #0xc]
+ bx lr
+ arm_func_end NNS_G3dMdlSetMdlXLDepthUpdate
+
+ arm_func_start NNS_G3dMdlSetMdlFarClip
+NNS_G3dMdlSetMdlFarClip: ; 0x020BBCB8
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x1000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x1000
+ streq r0, [r1, #0xc]
+ bx lr
+ arm_func_end NNS_G3dMdlSetMdlFarClip
+
+ arm_func_start NNS_G3dMdlSetMdl1Dot
+NNS_G3dMdlSetMdl1Dot: ; 0x020BBCFC
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x2000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x2000
+ streq r0, [r1, #0xc]
+ bx lr
+ arm_func_end NNS_G3dMdlSetMdl1Dot
+
+ arm_func_start NNS_G3dMdlSetMdlDepthTestCond
+NNS_G3dMdlSetMdlDepthTestCond: ; 0x020BBD40
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x4000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x4000
+ streq r0, [r1, #0xc]
+ bx lr
+ arm_func_end NNS_G3dMdlSetMdlDepthTestCond
+
+ arm_func_start NNS_G3dMdlSetMdlFogEnableFlag
+NNS_G3dMdlSetMdlFogEnableFlag: ; 0x020BBD84
+ ldr r3, [r0, #0x8]
+ cmp r2, #0x0
+ add r12, r0, r3
+ ldrh r0, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrh r2, [r3, r0]
+ add r0, r3, r0
+ mla r0, r2, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrne r0, [r1, #0xc]
+ orrne r0, r0, #0x8000
+ strne r0, [r1, #0xc]
+ ldreq r0, [r1, #0xc]
+ biceq r0, r0, #0x8000
+ streq r0, [r1, #0xc]
+ bx lr
+ arm_func_end NNS_G3dMdlSetMdlFogEnableFlag
+
+ arm_func_start NNS_G3dMdlSetMdlAlpha
+NNS_G3dMdlSetMdlAlpha: ; 0x020BBDC8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0x1f0000
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G3dMdlSetMdlAlpha
+
+ arm_func_start NNS_G3dMdlSetMdlPolygonID
+NNS_G3dMdlSetMdlPolygonID: ; 0x020BBE0C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0x3f000000
+ orr r0, r0, r2, lsl #0x18
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G3dMdlSetMdlPolygonID
+
+ arm_func_start NNS_G3dMdlSetMdlCullMode
+NNS_G3dMdlSetMdlCullMode: ; 0x020BBE50
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0xc0
+ orr r0, r0, r2, lsl #0x6
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G3dMdlSetMdlCullMode
+
+ arm_func_start NNS_G3dMdlSetMdlPolygonMode
+NNS_G3dMdlSetMdlPolygonMode: ; 0x020BBE94
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0x30
+ orr r0, r0, r2, lsl #0x4
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G3dMdlSetMdlPolygonMode
+
+ arm_func_start NNS_G3dMdlSetMdlLightEnableFlag
+NNS_G3dMdlSetMdlLightEnableFlag: ; 0x020BBED8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x8]
+ add lr, r0, r3
+ ldrh r0, [lr, #0xa]
+ add r12, lr, #0x4
+ ldrh r3, [r12, r0]
+ add r0, r12, r0
+ mla r0, r3, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, lr, r0
+ ldr r0, [r1, #0xc]
+ bic r0, r0, #0xf
+ orr r0, r0, r2
+ str r0, [r1, #0xc]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNS_G3dMdlSetMdlLightEnableFlag
+
+ arm_func_start NNS_G3dMdlSetMdlEmi
+NNS_G3dMdlSetMdlEmi: ; 0x020BBF1C
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ ldr r3, _020BBF5C ; =0x8000FFFF
+ add r4, r0, r12
+ ldrh r0, [r4, #0xa]
+ add lr, r4, #0x4
+ ldrh r12, [lr, r0]
+ add r0, lr, r0
+ mla r0, r12, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r4, r0
+ ldr r0, [r1, #0x8]
+ and r0, r0, r3
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0x8]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BBF5C: .word 0x8000FFFF
+ arm_func_end NNS_G3dMdlSetMdlEmi
+
+ arm_func_start NNS_G3dMdlSetMdlSpec
+NNS_G3dMdlSetMdlSpec: ; 0x020BBF60
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ mov r3, #0x8000
+ add r4, r0, r12
+ ldrh r12, [r4, #0xa]
+ add lr, r4, #0x4
+ rsb r0, r3, #0x0
+ ldrh r3, [lr, r12]
+ add r12, lr, r12
+ mla r1, r3, r1, r12
+ ldr r1, [r1, #0x4]
+ add r3, r4, r1
+ ldr r1, [r3, #0x8]
+ and r0, r1, r0
+ orr r0, r0, r2
+ str r0, [r3, #0x8]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G3dMdlSetMdlSpec
+
+ arm_func_start NNS_G3dMdlSetMdlAmb
+NNS_G3dMdlSetMdlAmb: ; 0x020BBFA4
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ ldr r3, _020BBFE4 ; =0x8000FFFF
+ add r4, r0, r12
+ ldrh r0, [r4, #0xa]
+ add lr, r4, #0x4
+ ldrh r12, [lr, r0]
+ add r0, lr, r0
+ mla r0, r12, r1, r0
+ ldr r0, [r0, #0x4]
+ add r1, r4, r0
+ ldr r0, [r1, #0x4]
+ and r0, r0, r3
+ orr r0, r0, r2, lsl #0x10
+ str r0, [r1, #0x4]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BBFE4: .word 0x8000FFFF
+ arm_func_end NNS_G3dMdlSetMdlAmb
+
+ arm_func_start NNS_G3dMdlSetMdlDiff
+NNS_G3dMdlSetMdlDiff: ; 0x020BBFE8
+ stmdb sp!, {r4,lr}
+ ldr r12, [r0, #0x8]
+ mov r3, #0x8000
+ add r4, r0, r12
+ ldrh r12, [r4, #0xa]
+ add lr, r4, #0x4
+ rsb r0, r3, #0x0
+ ldrh r3, [lr, r12]
+ add r12, lr, r12
+ mla r1, r3, r1, r12
+ ldr r1, [r1, #0x4]
+ add r3, r4, r1
+ ldr r1, [r3, #0x4]
+ and r0, r1, r0
+ orr r0, r0, r2
+ str r0, [r3, #0x4]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNS_G3dMdlSetMdlDiff
+
+ arm_func_start NNSi_G3dModifyPolygonAttrMask
+NNSi_G3dModifyPolygonAttrMask: ; 0x020BC02C
+ stmdb sp!, {r4-r6,lr}
+ ldrb r4, [r0, #0x18]
+ ldr r3, [r0, #0x8]
+ mov lr, #0x0
+ cmp r4, #0x0
+ add r12, r0, r3
+ ldmlsia sp!, {r4-r6,pc}
+ mvn r3, r2
+ add r0, r12, #0x4
+_020BC050:
+ ldrh r5, [r12, #0xa]
+ cmp r1, #0x0
+ ldrh r6, [r0, r5]
+ add r5, r0, r5
+ mla r5, r6, lr, r5
+ ldr r5, [r5, #0x4]
+ add lr, lr, #0x1
+ add r6, r12, r5
+ ldrne r5, [r6, #0x10]
+ orrne r5, r5, r2
+ strne r5, [r6, #0x10]
+ ldreq r5, [r6, #0x10]
+ andeq r5, r5, r3
+ streq r5, [r6, #0x10]
+ cmp lr, r4
+ blo _020BC050
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G3dModifyPolygonAttrMask
+
+ arm_func_start NNSi_G3dModifyMatFlag
+NNSi_G3dModifyMatFlag: ; 0x020BC094
+ stmdb sp!, {r4-r6,lr}
+ ldrb r4, [r0, #0x18]
+ ldr r3, [r0, #0x8]
+ mov lr, #0x0
+ cmp r4, #0x0
+ add r12, r0, r3
+ ldmlsia sp!, {r4-r6,pc}
+ mvn r3, r2
+ add r0, r12, #0x4
+_020BC0B8:
+ ldrh r5, [r12, #0xa]
+ cmp r1, #0x0
+ ldrh r6, [r0, r5]
+ add r5, r0, r5
+ mla r5, r6, lr, r5
+ ldr r5, [r5, #0x4]
+ add lr, lr, #0x1
+ add r6, r12, r5
+ ldrneh r5, [r6, #0x1e]
+ orrne r5, r5, r2
+ strneh r5, [r6, #0x1e]
+ ldreqh r5, [r6, #0x1e]
+ andeq r5, r5, r3
+ streqh r5, [r6, #0x1e]
+ cmp lr, r4
+ blo _020BC0B8
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G3dModifyMatFlag
diff --git a/arm9/asm/NNS_G3D_nsbca.s b/arm9/asm/NNS_G3D_nsbca.s
new file mode 100644
index 00000000..a29deb70
--- /dev/null
+++ b/arm9/asm/NNS_G3D_nsbca.s
@@ -0,0 +1,1591 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global pivotUtil_
+pivotUtil_: ; 0x020FFA14
+ .byte 0x04, 0x05, 0x07, 0x08
+ .byte 0x03, 0x05, 0x06, 0x08
+ .byte 0x03, 0x04, 0x06, 0x07
+ .byte 0x01, 0x02, 0x07, 0x08
+ .byte 0x00, 0x02, 0x06, 0x08
+ .byte 0x00, 0x01, 0x06, 0x07
+ .byte 0x01, 0x02, 0x04, 0x05
+ .byte 0x00, 0x02, 0x03, 0x05
+ .byte 0x00, 0x01, 0x03, 0x04
+
+ .section .text
+
+ arm_func_start getRotDataByIdx_
+getRotDataByIdx_: ; 0x020BC500
+ stmdb sp!, {r4,lr}
+ ands r4, r3, #0x8000
+ beq _020BC5E0
+ mov r2, #0x0
+ str r2, [r0, #0x20]
+ ldr r4, [r0, #0x20]
+ ldr r2, _020BC684 ; =0x00007FFF
+ str r4, [r0, #0x1c]
+ ldr r4, [r0, #0x1c]
+ and r3, r3, r2
+ str r4, [r0, #0x18]
+ ldr r4, [r0, #0x18]
+ mov r2, #0x3
+ str r4, [r0, #0x14]
+ ldr r4, [r0, #0x14]
+ mul r2, r3, r2
+ str r4, [r0, #0x10]
+ ldr r4, [r0, #0x10]
+ mov r3, r2, lsl #0x1
+ str r4, [r0, #0xc]
+ ldr r4, [r0, #0xc]
+ add r2, r1, r2, lsl #0x1
+ str r4, [r0, #0x8]
+ ldr r4, [r0, #0x8]
+ str r4, [r0, #0x4]
+ ldr r4, [r0, #0x4]
+ str r4, [r0, #0x0]
+ ldrsh r4, [r1, r3]
+ ldrsh r12, [r2, #0x2]
+ ldrsh r3, [r2, #0x4]
+ and r1, r4, #0xf
+ ands r4, r4, #0x10
+ movne lr, #0x1000
+ rsbne lr, lr, #0x0
+ moveq lr, #0x1000
+ str lr, [r0, r1, lsl #0x2]
+ ldr r4, _020BC688 ; =pivotUtil_
+ ldr lr, _020BC68C ; =pivotUtil_ + 1
+ ldrb r4, [r4, r1, lsl #0x2]
+ str r12, [r0, r4, lsl #0x2]
+ ldrb lr, [lr, r1, lsl #0x2]
+ str r3, [r0, lr, lsl #0x2]
+ ldrsh lr, [r2, #0x0]
+ ands lr, lr, #0x20
+ ldr lr, _020BC690 ; =pivotUtil_ + 2
+ rsbne r3, r3, #0x0
+ ldrb lr, [lr, r1, lsl #0x2]
+ str r3, [r0, lr, lsl #0x2]
+ ldrsh r2, [r2, #0x0]
+ ands r2, r2, #0x40
+ ldr r2, _020BC694 ; =pivotUtil_ + 3
+ rsbne r12, r12, #0x0
+ ldrb r1, [r2, r1, lsl #0x2]
+ str r12, [r0, r1, lsl #0x2]
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020BC5E0:
+ ldr r1, _020BC684 ; =0x00007FFF
+ mov r12, #0x5
+ and r1, r3, r1
+ mul r3, r1, r12
+ add r1, r2, r3, lsl #0x1
+ ldrsh lr, [r1, #0x8]
+ mov r12, r3, lsl #0x1
+ mov r3, lr, asr #0x3
+ str r3, [r0, #0x10]
+ ldrsh r12, [r2, r12]
+ and r2, lr, #0x7
+ mov r2, r2, lsl #0x10
+ mov r3, r12, asr #0x3
+ str r3, [r0, #0x0]
+ ldrsh r3, [r1, #0x2]
+ and r12, r12, #0x7
+ orr lr, r12, r2, asr #0xd
+ mov r2, r3, asr #0x3
+ str r2, [r0, #0x4]
+ ldrsh r12, [r1, #0x4]
+ mov r2, lr, lsl #0x10
+ and lr, r3, #0x7
+ mov r3, r12, asr #0x3
+ str r3, [r0, #0x8]
+ ldrsh r3, [r1, #0x6]
+ orr r1, lr, r2, asr #0xd
+ mov r1, r1, lsl #0x10
+ and r2, r12, #0x7
+ orr r1, r2, r1, asr #0xd
+ mov r1, r1, lsl #0x10
+ and r2, r3, #0x7
+ orr r1, r2, r1, asr #0xd
+ mov r1, r1, lsl #0x10
+ mov r1, r1, asr #0x10
+ mov r2, r3, asr #0x3
+ mov r1, r1, lsl #0x13
+ str r2, [r0, #0xc]
+ mov r1, r1, asr #0x13
+ str r1, [r0, #0x14]
+ mov r0, #0x1
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BC684: .word 0x00007FFF
+_020BC688: .word pivotUtil_
+_020BC68C: .word pivotUtil_ + 1
+_020BC690: .word pivotUtil_ + 2
+_020BC694: .word pivotUtil_ + 3
+ arm_func_end getRotDataByIdx_
+
+ arm_func_start getRotDataEx_
+getRotDataEx_: ; 0x020BC698
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x48
+ ldrh r4, [r3, #0x4]
+ ldr r5, [r3, #0xc]
+ ldr r8, [r3, #0x10]
+ ldr r7, [r2, #0x4]
+ mov r12, r1, asr #0xc
+ sub r4, r4, #0x1
+ mov r6, r0
+ cmp r12, r4
+ add r5, r3, r5
+ add r4, r3, r8
+ add r8, r3, r7
+ ldr r7, [r2, #0x0]
+ bne _020BC780
+ ands r0, r7, #0xc0000000
+ beq _020BC6F0
+ ands r0, r7, #0x40000000
+ andne r0, r12, #0x1
+ addne r12, r0, r12, lsr #0x1
+ andeq r0, r12, #0x3
+ addeq r12, r0, r12, lsr #0x2
+_020BC6F0:
+ ldr r0, [r3, #0x8]
+ ands r0, r0, #0x2
+ movne r7, #0x0
+ bne _020BC7F4
+ mov r0, r12, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ cmp r0, #0x0
+ addeq sp, sp, #0x48
+ ldmeqia sp!, {r4-r10,pc}
+ ldr r9, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ mul r1, r5, r9
+ mul r0, r2, r4
+ sub r0, r1, r0
+ ldr r7, [r6, #0xc]
+ ldr r8, [r6, #0x0]
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r9
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ add sp, sp, #0x48
+ str r0, [r6, #0x20]
+ ldmia sp!, {r4-r10,pc}
+_020BC780:
+ ands r0, r7, #0xc0000000
+ beq _020BC7F0
+ ldr r0, _020BC9C4 ; =0x1FFF0000
+ ands r2, r7, #0x40000000
+ and r0, r7, r0
+ mov r0, r0, lsr #0x10
+ beq _020BC7C4
+ cmp r12, r0
+ movcs r12, r0, lsr #0x1
+ addcs r7, r12, #0x1
+ bhs _020BC7F4
+ ldr r0, _020BC9C8 ; =0x00001FFF
+ mov r12, r12, lsr #0x1
+ add r7, r12, #0x1
+ and r10, r1, r0
+ mov r9, #0x2
+ b _020BC800
+_020BC7C4:
+ cmp r12, r0
+ andcs r0, r12, #0x3
+ addcs r12, r0, r12, lsr #0x2
+ addcs r7, r12, #0x1
+ bhs _020BC7F4
+ ldr r0, _020BC9CC ; =0x00003FFF
+ mov r12, r12, lsr #0x2
+ add r7, r12, #0x1
+ and r10, r1, r0
+ mov r9, #0x4
+ b _020BC800
+_020BC7F0:
+ add r7, r12, #0x1
+_020BC7F4:
+ ldr r0, _020BC9D0 ; =0x00000FFF
+ mov r9, #0x1
+ and r10, r1, r0
+_020BC800:
+ mov r0, r12, lsl #0x1
+ ldrh r3, [r8, r0]
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ mov r1, r7, lsl #0x1
+ ldrh r3, [r8, r1]
+ orr r7, r0, #0x0
+ add r0, sp, #0x24
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ ldr r3, [sp, #0x0]
+ ldr r1, [sp, #0x24]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x0]
+ ldr r3, [sp, #0x4]
+ ldr r1, [sp, #0x28]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x4]
+ ldr r3, [sp, #0x8]
+ ldr r1, [sp, #0x2c]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x8]
+ ldr r3, [sp, #0xc]
+ ldr r1, [sp, #0x30]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0xc]
+ ldr r2, [sp, #0x10]
+ ldr r1, [sp, #0x34]
+ orr r7, r7, r0
+ sub r0, r1, r2
+ mul r1, r2, r9
+ mul r0, r10, r0
+ add r0, r1, r0, asr #0xc
+ str r0, [r6, #0x10]
+ ldr r2, [sp, #0x14]
+ ldr r0, [sp, #0x38]
+ mul r1, r2, r9
+ sub r0, r0, r2
+ mul r0, r10, r0
+ add r2, r1, r0, asr #0xc
+ mov r0, r6
+ mov r1, r6
+ str r2, [r6, #0x14]
+ bl VEC_Normalize
+ add r0, r6, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+ cmp r7, #0x0
+ bne _020BC968
+ ldr r3, [sp, #0x18]
+ ldr r1, [sp, #0x3c]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x18]
+ ldr r3, [sp, #0x1c]
+ ldr r1, [sp, #0x40]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r6, #0x1c]
+ ldr r3, [sp, #0x20]
+ ldr r1, [sp, #0x44]
+ mul r2, r3, r9
+ sub r1, r1, r3
+ mul r1, r10, r1
+ add r2, r2, r1, asr #0xc
+ add r0, r6, #0x18
+ mov r1, r0
+ str r2, [r6, #0x20]
+ bl VEC_Normalize
+ add sp, sp, #0x48
+ ldmia sp!, {r4-r10,pc}
+_020BC968:
+ ldr r9, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r8, [r6, #0x0]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ ldr r7, [r6, #0xc]
+ mul r1, r5, r9
+ mul r0, r2, r4
+ sub r0, r1, r0
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r9
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x20]
+ add sp, sp, #0x48
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020BC9C4: .word 0x1FFF0000
+_020BC9C8: .word 0x00001FFF
+_020BC9CC: .word 0x00003FFF
+_020BC9D0: .word 0x00000FFF
+ arm_func_end getRotDataEx_
+
+ arm_func_start getRotData_
+getRotData_: ; 0x020BC9D4
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4c
+ ldr r5, [r3, #0xc]
+ ldr r4, [r3, #0x10]
+ ldr r12, [r2, #0x0]
+ ldr r2, [r2, #0x4]
+ mov r6, r0
+ mov r0, r1, asr #0xc
+ add r5, r3, r5
+ add r4, r3, r4
+ add r8, r3, r2
+ ands r1, r12, #0xc0000000
+ beq _020BCD40
+ ldr r1, _020BCDC0 ; =0x1FFF0000
+ ands r2, r12, #0x40000000
+ and r1, r12, r1
+ mov r2, r1, lsr #0x10
+ beq _020BCA44
+ ands r1, r0, #0x1
+ beq _020BCA3C
+ cmp r0, r2
+ movhi r0, r2, lsr #0x1
+ addhi r0, r0, #0x1
+ bhi _020BCD40
+ mov r7, r0, lsr #0x1
+ b _020BCBE8
+_020BCA3C:
+ mov r0, r0, lsr #0x1
+ b _020BCD40
+_020BCA44:
+ ands r1, r0, #0x3
+ beq _020BCBE0
+ cmp r0, r2
+ addhi r0, r1, r2, lsr #0x2
+ bhi _020BCD40
+ ands r1, r0, #0x1
+ beq _020BCBD8
+ ands r1, r0, #0x2
+ movne r9, r0, lsr #0x2
+ addne r0, r9, #0x1
+ moveq r0, r0, lsr #0x2
+ addeq r9, r0, #0x1
+ mov r0, r0, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ mov r7, #0x0
+ bl getRotDataByIdx_
+ mov r1, r9, lsl #0x1
+ ldrh r3, [r8, r1]
+ orr r7, r7, r0
+ add r0, sp, #0x0
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ ldr r3, [sp, #0x0]
+ ldr r1, [r6, #0x0]
+ mov r2, #0x3
+ mla r3, r1, r2, r3
+ str r3, [r6, #0x0]
+ ldr r3, [sp, #0x4]
+ ldr r1, [r6, #0x4]
+ orr r7, r7, r0
+ mla r0, r1, r2, r3
+ str r0, [r6, #0x4]
+ ldr r3, [sp, #0x8]
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ mla r3, r1, r2, r3
+ str r3, [r6, #0x8]
+ ldr r4, [sp, #0xc]
+ ldr r3, [r6, #0xc]
+ mov r1, r6
+ mla r4, r3, r2, r4
+ str r4, [r6, #0xc]
+ ldr r4, [sp, #0x10]
+ ldr r3, [r6, #0x10]
+ mla r4, r3, r2, r4
+ str r4, [r6, #0x10]
+ ldr r4, [sp, #0x14]
+ ldr r3, [r6, #0x14]
+ mla r2, r3, r2, r4
+ str r2, [r6, #0x14]
+ bl VEC_Normalize
+ add r0, r6, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+ cmp r7, #0x0
+ bne _020BCB7C
+ ldr r1, [sp, #0x18]
+ ldr r0, [r6, #0x18]
+ mov r2, #0x3
+ mla r1, r0, r2, r1
+ str r1, [r6, #0x18]
+ ldr r3, [sp, #0x1c]
+ ldr r1, [r6, #0x1c]
+ add r0, r6, #0x18
+ mla r3, r1, r2, r3
+ str r3, [r6, #0x1c]
+ ldr r4, [sp, #0x20]
+ ldr r3, [r6, #0x20]
+ mov r1, r0
+ mla r2, r3, r2, r4
+ str r2, [r6, #0x20]
+ bl VEC_Normalize
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9,pc}
+_020BCB7C:
+ ldr r12, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ mul r1, r5, r12
+ mul r0, r2, r4
+ sub r0, r1, r0
+ ldr r7, [r6, #0xc]
+ ldr r8, [r6, #0x0]
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r12
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ add sp, sp, #0x4c
+ str r0, [r6, #0x20]
+ ldmia sp!, {r4-r9,pc}
+_020BCBD8:
+ mov r7, r0, lsr #0x2
+ b _020BCBE8
+_020BCBE0:
+ mov r0, r0, lsr #0x2
+ b _020BCD40
+_020BCBE8:
+ mov r0, r7, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ add r1, r8, r7, lsl #0x1
+ ldrh r3, [r1, #0x2]
+ orr r7, r0, #0x0
+ add r0, sp, #0x24
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ ldr r2, [r6, #0x0]
+ ldr r1, [sp, #0x24]
+ orr r7, r7, r0
+ add r0, r2, r1
+ str r0, [r6, #0x0]
+ ldr r2, [r6, #0x4]
+ ldr r1, [sp, #0x28]
+ mov r0, r6
+ add r1, r2, r1
+ str r1, [r6, #0x4]
+ ldr r3, [r6, #0x8]
+ ldr r2, [sp, #0x2c]
+ mov r1, r6
+ add r2, r3, r2
+ str r2, [r6, #0x8]
+ ldr r3, [r6, #0xc]
+ ldr r2, [sp, #0x30]
+ add r2, r3, r2
+ str r2, [r6, #0xc]
+ ldr r3, [r6, #0x10]
+ ldr r2, [sp, #0x34]
+ add r2, r3, r2
+ str r2, [r6, #0x10]
+ ldr r3, [r6, #0x14]
+ ldr r2, [sp, #0x38]
+ add r2, r3, r2
+ str r2, [r6, #0x14]
+ bl VEC_Normalize
+ add r0, r6, #0xc
+ mov r1, r0
+ bl VEC_Normalize
+ cmp r7, #0x0
+ bne _020BCCE4
+ ldr r2, [r6, #0x18]
+ ldr r1, [sp, #0x3c]
+ add r0, r6, #0x18
+ add r1, r2, r1
+ str r1, [r6, #0x18]
+ ldr r3, [r6, #0x1c]
+ ldr r2, [sp, #0x40]
+ mov r1, r0
+ add r2, r3, r2
+ str r2, [r6, #0x1c]
+ ldr r3, [r6, #0x20]
+ ldr r2, [sp, #0x44]
+ add r2, r3, r2
+ str r2, [r6, #0x20]
+ bl VEC_Normalize
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9,pc}
+_020BCCE4:
+ ldr r12, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ mul r1, r5, r12
+ mul r0, r2, r4
+ sub r0, r1, r0
+ ldr r7, [r6, #0xc]
+ ldr r8, [r6, #0x0]
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r12
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ add sp, sp, #0x4c
+ str r0, [r6, #0x20]
+ ldmia sp!, {r4-r9,pc}
+_020BCD40:
+ mov r0, r0, lsl #0x1
+ ldrh r3, [r8, r0]
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl getRotDataByIdx_
+ cmp r0, #0x0
+ addeq sp, sp, #0x4c
+ ldmeqia sp!, {r4-r9,pc}
+ ldr r12, [r6, #0x14]
+ ldr r5, [r6, #0x4]
+ ldr r8, [r6, #0x0]
+ ldr r4, [r6, #0x10]
+ ldr r2, [r6, #0x8]
+ ldr r7, [r6, #0xc]
+ mul r1, r5, r12
+ mul r0, r2, r4
+ sub r0, r1, r0
+ mov r3, r0, asr #0xc
+ mul r1, r2, r7
+ mul r0, r8, r12
+ sub r2, r1, r0
+ mul r1, r8, r4
+ mul r0, r5, r7
+ sub r0, r1, r0
+ str r3, [r6, #0x18]
+ mov r1, r2, asr #0xc
+ str r1, [r6, #0x1c]
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x20]
+ add sp, sp, #0x4c
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BCDC0: .word 0x1FFF0000
+ arm_func_end getRotData_
+
+ arm_func_start getScaleDataEx_
+getScaleDataEx_: ; 0x020BCDC4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrh r4, [r3, #0x4]
+ ldr r6, [r2, #0x4]
+ mov r5, r1, asr #0xc
+ sub r4, r4, #0x1
+ cmp r5, r4
+ add r6, r3, r6
+ ldr r2, [r2, #0x0]
+ bne _020BCE58
+ ands r4, r2, #0xc0000000
+ beq _020BCE08
+ ands r4, r2, #0x40000000
+ andne r4, r5, #0x1
+ addne r5, r4, r5, lsr #0x1
+ andeq r4, r5, #0x3
+ addeq r5, r4, r5, lsr #0x2
+_020BCE08:
+ ldr r3, [r3, #0x8]
+ ands r3, r3, #0x2
+ movne r4, #0x0
+ bne _020BCED4
+ ands r1, r2, #0x20000000
+ ldreq r2, [r6, r5, lsl #0x3]
+ addeq r1, r6, r5, lsl #0x3
+ streq r2, [r0, #0x0]
+ ldreq r1, [r1, #0x4]
+ addeq sp, sp, #0x4
+ streq r1, [r0, #0x4]
+ ldmeqia sp!, {r4-r7,pc}
+ mov r1, r5, lsl #0x2
+ ldrsh r2, [r6, r1]
+ add r1, r6, r5, lsl #0x2
+ add sp, sp, #0x4
+ str r2, [r0, #0x0]
+ ldrsh r1, [r1, #0x2]
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r7,pc}
+_020BCE58:
+ ands r3, r2, #0xc0000000
+ beq _020BCED0
+ ldr r3, _020BCF60 ; =0x1FFF0000
+ ands r4, r2, #0x40000000
+ and r3, r2, r3
+ mov r3, r3, lsr #0x10
+ beq _020BCEA0
+ cmp r5, r3
+ movcs r5, r3, lsr #0x1
+ addcs r4, r5, #0x1
+ bhs _020BCED4
+ ldr r3, _020BCF64 ; =0x00001FFF
+ mov r5, r5, lsr #0x1
+ add r4, r5, #0x1
+ and lr, r1, r3
+ mov r12, #0x2
+ mov r3, #0x1
+ b _020BCEE4
+_020BCEA0:
+ cmp r5, r3
+ andcs r3, r5, #0x3
+ addcs r5, r3, r5, lsr #0x2
+ addcs r4, r5, #0x1
+ bhs _020BCED4
+ ldr r3, _020BCF68 ; =0x00003FFF
+ mov r5, r5, lsr #0x2
+ add r4, r5, #0x1
+ and lr, r1, r3
+ mov r12, #0x4
+ mov r3, #0x2
+ b _020BCEE4
+_020BCED0:
+ add r4, r5, #0x1
+_020BCED4:
+ ldr r3, _020BCF6C ; =0x00000FFF
+ mov r12, #0x1
+ and lr, r1, r3
+ mov r3, #0x0
+_020BCEE4:
+ ands r1, r2, #0x20000000
+ beq _020BCF10
+ mov r2, r5, lsl #0x2
+ add r1, r6, r5, lsl #0x2
+ mov r5, r4, lsl #0x2
+ add r4, r6, r4, lsl #0x2
+ ldrsh r2, [r6, r2]
+ ldrsh r1, [r1, #0x2]
+ ldrsh r5, [r6, r5]
+ ldrsh r4, [r4, #0x2]
+ b _020BCF28
+_020BCF10:
+ add r1, r6, r5, lsl #0x3
+ add r7, r6, r4, lsl #0x3
+ ldr r2, [r6, r5, lsl #0x3]
+ ldr r1, [r1, #0x4]
+ ldr r5, [r6, r4, lsl #0x3]
+ ldr r4, [r7, #0x4]
+_020BCF28:
+ sub r5, r5, r2
+ sub r4, r4, r1
+ mul r6, r2, r12
+ mul r2, lr, r5
+ add r2, r6, r2, asr #0xc
+ mov r5, r2, asr r3
+ mul r2, r1, r12
+ mul r1, lr, r4
+ add r1, r2, r1, asr #0xc
+ mov r1, r1, asr r3
+ str r5, [r0, #0x0]
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020BCF60: .word 0x1FFF0000
+_020BCF64: .word 0x00001FFF
+_020BCF68: .word 0x00003FFF
+_020BCF6C: .word 0x00000FFF
+ arm_func_end getScaleDataEx_
+
+ arm_func_start getScaleData_
+getScaleData_: ; 0x020BCF70
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r4, [r2, #0x4]
+ ldr r12, [r2, #0x0]
+ mov r1, r1, asr #0xc
+ add r3, r3, r4
+ ands r2, r12, #0xc0000000
+ beq _020BD0D0
+ ldr r2, _020BD184 ; =0x1FFF0000
+ ands r4, r12, #0x40000000
+ and r2, r12, r2
+ mov r4, r2, lsr #0x10
+ beq _020BCFCC
+ ands r2, r1, #0x1
+ beq _020BCFC4
+ cmp r1, r4
+ movhi r1, r4, lsr #0x1
+ addhi r1, r1, #0x1
+ bhi _020BD0D0
+ mov r2, r1, lsr #0x1
+ b _020BD110
+_020BCFC4:
+ mov r1, r1, lsr #0x1
+ b _020BD0D0
+_020BCFCC:
+ ands r2, r1, #0x3
+ beq _020BD0CC
+ cmp r1, r4
+ addhi r1, r2, r4, lsr #0x2
+ bhi _020BD0D0
+ ands r2, r1, #0x1
+ beq _020BD0C4
+ ands r2, r1, #0x2
+ movne r1, r1, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r1, lsr #0x2
+ addeq r1, r2, #0x1
+ ands r4, r12, #0x20000000
+ beq _020BD04C
+ mov r5, r2, lsl #0x2
+ mov r4, r1, lsl #0x2
+ ldrsh r12, [r3, r5]
+ ldrsh r5, [r3, r4]
+ add r2, r3, r2, lsl #0x2
+ add r4, r12, r12, lsl #0x1
+ add r4, r5, r4
+ mov r4, r4, asr #0x2
+ str r4, [r0, #0x0]
+ add r1, r3, r1, lsl #0x2
+ ldrsh r3, [r2, #0x2]
+ ldrsh r2, [r1, #0x2]
+ add sp, sp, #0x4
+ add r1, r3, r3, lsl #0x1
+ add r1, r2, r1
+ mov r1, r1, asr #0x2
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r5,pc}
+_020BD04C:
+ ldr r5, [r3, r2, lsl #0x3]
+ ldr r4, [r3, r1, lsl #0x3]
+ mov r12, r5, asr #0x1f
+ mov r12, r12, lsl #0x1
+ mov lr, r5, lsl #0x1
+ orr r12, r12, r5, lsr #0x1f
+ adds lr, lr, r5
+ adc r12, r12, r5, asr #0x1f
+ adds lr, lr, r4
+ adc r12, r12, r4, asr #0x1f
+ mov lr, lr, lsr #0x2
+ orr lr, lr, r12, lsl #0x1e
+ str lr, [r0, #0x0]
+ add r2, r3, r2, lsl #0x3
+ ldr r12, [r2, #0x4]
+ add r1, r3, r1, lsl #0x3
+ mov r2, r12, asr #0x1f
+ mov r2, r2, lsl #0x1
+ mov r3, r12, lsl #0x1
+ ldr r1, [r1, #0x4]
+ orr r2, r2, r12, lsr #0x1f
+ adds r3, r3, r12
+ adc r2, r2, r12, asr #0x1f
+ adds r3, r3, r1
+ adc r1, r2, r1, asr #0x1f
+ mov r2, r3, lsr #0x2
+ orr r2, r2, r1, lsl #0x1e
+ str r2, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020BD0C4:
+ mov r2, r1, lsr #0x2
+ b _020BD110
+_020BD0CC:
+ mov r1, r1, lsr #0x2
+_020BD0D0:
+ ands r2, r12, #0x20000000
+ ldreq r2, [r3, r1, lsl #0x3]
+ addeq r1, r3, r1, lsl #0x3
+ streq r2, [r0, #0x0]
+ ldreq r1, [r1, #0x4]
+ addeq sp, sp, #0x4
+ streq r1, [r0, #0x4]
+ ldmeqia sp!, {r4-r5,pc}
+ mov r2, r1, lsl #0x2
+ ldrsh r2, [r3, r2]
+ add r1, r3, r1, lsl #0x2
+ add sp, sp, #0x4
+ str r2, [r0, #0x0]
+ ldrsh r1, [r1, #0x2]
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r5,pc}
+_020BD110:
+ ands r1, r12, #0x20000000
+ beq _020BD150
+ mov r1, r2, lsl #0x2
+ add r12, r3, r2, lsl #0x2
+ ldrsh r2, [r3, r1]
+ ldrsh r1, [r12, #0x4]
+ add sp, sp, #0x4
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x0]
+ ldrsh r2, [r12, #0x2]
+ ldrsh r1, [r12, #0x6]
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x4]
+ ldmia sp!, {r4-r5,pc}
+_020BD150:
+ add r12, r3, r2, lsl #0x3
+ ldr r2, [r3, r2, lsl #0x3]
+ ldr r1, [r12, #0x8]
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x0]
+ ldr r2, [r12, #0x4]
+ ldr r1, [r12, #0xc]
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BD184: .word 0x1FFF0000
+ arm_func_end getScaleData_
+
+ arm_func_start getTransDataEx_
+getTransDataEx_: ; 0x020BD188
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldrh r4, [r3, #0x4]
+ ldr lr, [r2, #0x4]
+ mov r12, r1, asr #0xc
+ sub r4, r4, #0x1
+ cmp r12, r4
+ add r4, r3, lr
+ ldr lr, [r2, #0x0]
+ bne _020BD230
+ ands r2, lr, #0xc0000000
+ beq _020BD1CC
+ ands r2, lr, #0x40000000
+ andne r2, r12, #0x1
+ addne r12, r2, r12, lsr #0x1
+ andeq r2, r12, #0x3
+ addeq r12, r2, r12, lsr #0x2
+_020BD1CC:
+ ldr r2, [r3, #0x8]
+ ands r2, r2, #0x2
+ beq _020BD210
+ ldr r2, _020BD2E8 ; =0x00000FFF
+ ands r3, lr, #0x20000000
+ and r3, r1, r2
+ movne r1, r12, lsl #0x1
+ ldrnesh r2, [r4, r1]
+ ldrnesh r1, [r4, #0x0]
+ add sp, sp, #0x4
+ ldreq r2, [r4, r12, lsl #0x2]
+ ldreq r1, [r4, #0x0]
+ sub r1, r1, r2
+ mul r1, r3, r1
+ add r1, r2, r1, asr #0xc
+ str r1, [r0, #0x0]
+ ldmia sp!, {r4-r5,pc}
+_020BD210:
+ ands r1, lr, #0x20000000
+ movne r1, r12, lsl #0x1
+ ldrnesh r1, [r4, r1]
+ add sp, sp, #0x4
+ strne r1, [r0, #0x0]
+ ldreq r1, [r4, r12, lsl #0x2]
+ streq r1, [r0, #0x0]
+ ldmia sp!, {r4-r5,pc}
+_020BD230:
+ ands r2, lr, #0xc0000000
+ beq _020BD298
+ ldr r2, _020BD2EC ; =0x1FFF0000
+ ands r3, lr, #0x40000000
+ and r2, lr, r2
+ mov r2, r2, lsr #0x10
+ beq _020BD270
+ cmp r12, r2
+ movcs r12, r2, lsr #0x1
+ bhs _020BD298
+ ldr r2, _020BD2F0 ; =0x00001FFF
+ mov r12, r12, lsr #0x1
+ and r5, r1, r2
+ mov r2, #0x2
+ mov r1, #0x1
+ b _020BD2A8
+_020BD270:
+ cmp r12, r2
+ andcs r2, r12, #0x3
+ addcs r12, r2, r12, lsr #0x2
+ bhs _020BD298
+ ldr r2, _020BD2F4 ; =0x00003FFF
+ mov r12, r12, lsr #0x2
+ and r5, r1, r2
+ mov r2, #0x4
+ mov r1, #0x2
+ b _020BD2A8
+_020BD298:
+ ldr r3, _020BD2E8 ; =0x00000FFF
+ mov r2, #0x1
+ and r5, r1, r3
+ mov r1, #0x0
+_020BD2A8:
+ ands r3, lr, #0x20000000
+ addne r3, r4, r12, lsl #0x1
+ movne lr, r12, lsl #0x1
+ ldrnesh r12, [r4, lr]
+ ldrnesh r3, [r3, #0x2]
+ addeq r3, r4, r12, lsl #0x2
+ ldreq r12, [r4, r12, lsl #0x2]
+ ldreq r3, [r3, #0x4]
+ mul r4, r12, r2
+ sub r3, r3, r12
+ mul r2, r5, r3
+ add r2, r4, r2, asr #0xc
+ mov r1, r2, asr r1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BD2E8: .word 0x00000FFF
+_020BD2EC: .word 0x1FFF0000
+_020BD2F0: .word 0x00001FFF
+_020BD2F4: .word 0x00003FFF
+ arm_func_end getTransDataEx_
+
+ arm_func_start getTransData_
+getTransData_: ; 0x020BD2F8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r12, [r2, #0x4]
+ ldr r2, [r2, #0x0]
+ mov r1, r1, asr #0xc
+ add r3, r3, r12
+ ands r12, r2, #0xc0000000
+ beq _020BD44C
+ ldr ip, _020BD46C ; =0x1FFF0000
+ ands lr, r2, #0x40000000
+ and r12, r2, r12
+ mov lr, r12, lsr #0x10
+ beq _020BD354
+ ands r12, r1, #0x1
+ beq _020BD34C
+ cmp r1, lr
+ movhi r1, lr, lsr #0x1
+ addhi r1, r1, #0x1
+ bhi _020BD44C
+ mov r12, r1, lsr #0x1
+ b _020BD400
+_020BD34C:
+ mov r1, r1, lsr #0x1
+ b _020BD44C
+_020BD354:
+ ands r12, r1, #0x3
+ beq _020BD3F8
+ cmp r1, lr
+ addhi r1, r12, lr, lsr #0x2
+ bhi _020BD44C
+ ands r12, r1, #0x1
+ beq _020BD3F0
+ ands r12, r1, #0x2
+ movne lr, r1, lsr #0x2
+ addne r12, lr, #0x1
+ moveq r12, r1, lsr #0x2
+ addeq lr, r12, #0x1
+ ands r1, r2, #0x20000000
+ beq _020BD3B4
+ mov r2, r12, lsl #0x1
+ mov r1, lr, lsl #0x1
+ ldrsh r12, [r3, r2]
+ ldrsh r2, [r3, r1]
+ mov r1, #0x3
+ add sp, sp, #0x4
+ smlabb r1, r12, r1, r2
+ mov r1, r1, asr #0x2
+ str r1, [r0, #0x0]
+ ldmia sp!, {pc}
+_020BD3B4:
+ ldr r12, [r3, r12, lsl #0x2]
+ ldr r1, [r3, lr, lsl #0x2]
+ mov r2, r12, asr #0x1f
+ mov r2, r2, lsl #0x1
+ mov r3, r12, lsl #0x1
+ orr r2, r2, r12, lsr #0x1f
+ adds r3, r3, r12
+ adc r2, r2, r12, asr #0x1f
+ adds r3, r3, r1
+ adc r1, r2, r1, asr #0x1f
+ mov r2, r3, lsr #0x2
+ orr r2, r2, r1, lsl #0x1e
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020BD3F0:
+ mov r12, r1, lsr #0x2
+ b _020BD400
+_020BD3F8:
+ mov r1, r1, lsr #0x2
+ b _020BD44C
+_020BD400:
+ ands r1, r2, #0x20000000
+ beq _020BD42C
+ mov r2, r12, lsl #0x1
+ add r1, r3, r12, lsl #0x1
+ ldrsh r2, [r3, r2]
+ ldrsh r1, [r1, #0x2]
+ add sp, sp, #0x4
+ add r1, r2, r1
+ mov r1, r1, asr #0x1
+ str r1, [r0, #0x0]
+ ldmia sp!, {pc}
+_020BD42C:
+ add r1, r3, r12, lsl #0x2
+ ldr r2, [r3, r12, lsl #0x2]
+ ldr r1, [r1, #0x4]
+ mov r2, r2, asr #0x1
+ add r1, r2, r1, asr #0x1
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020BD44C:
+ ands r2, r2, #0x20000000
+ movne r1, r1, lsl #0x1
+ ldrnesh r1, [r3, r1]
+ strne r1, [r0, #0x0]
+ ldreq r1, [r3, r1, lsl #0x2]
+ streq r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BD46C: .word 0x1FFF0000
+ arm_func_end getTransData_
+
+ arm_func_start getJntSRTAnmResult_
+getJntSRTAnmResult_: ; 0x020BD470
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x34
+ mov r9, r0
+ add r0, r9, r1, lsl #0x1
+ ldrh r0, [r0, #0x14]
+ mov r7, r3
+ mov r8, r2
+ ldr r5, [r9, r0]
+ add r1, r9, r0
+ ands r0, r5, #0x1
+ movne r0, #0x7
+ strne r0, [r7, #0x0]
+ bne _020BD814
+ ldr r0, _020BD848 ; =0x00000FFF
+ add r4, r1, #0x4
+ ands r0, r8, r0
+ beq _020BD4C4
+ ldr r0, [r9, #0x8]
+ ands r0, r0, #0x1
+ movne r6, #0x1
+ bne _020BD4C8
+_020BD4C4:
+ mov r6, #0x0
+_020BD4C8:
+ mov r0, #0x0
+ str r0, [r7, #0x0]
+ ands r0, r5, #0x6
+ bne _020BD5C0
+ ands r0, r5, #0x8
+ bne _020BD51C
+ cmp r6, #0x0
+ beq _020BD500
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x4c
+ bl getTransDataEx_
+ b _020BD514
+_020BD500:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x4c
+ bl getTransData_
+_020BD514:
+ add r4, r4, #0x8
+ b _020BD524
+_020BD51C:
+ ldr r0, [r4], #0x4
+ str r0, [r7, #0x4c]
+_020BD524:
+ ands r0, r5, #0x10
+ bne _020BD568
+ cmp r6, #0x0
+ beq _020BD54C
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x50
+ bl getTransDataEx_
+ b _020BD560
+_020BD54C:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x50
+ bl getTransData_
+_020BD560:
+ add r4, r4, #0x8
+ b _020BD570
+_020BD568:
+ ldr r0, [r4], #0x4
+ str r0, [r7, #0x50]
+_020BD570:
+ ands r0, r5, #0x20
+ bne _020BD5B4
+ cmp r6, #0x0
+ beq _020BD598
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x54
+ bl getTransDataEx_
+ b _020BD5AC
+_020BD598:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x54
+ bl getTransData_
+_020BD5AC:
+ add r4, r4, #0x8
+ b _020BD5DC
+_020BD5B4:
+ ldr r0, [r4], #0x4
+ str r0, [r7, #0x54]
+ b _020BD5DC
+_020BD5C0:
+ ands r0, r5, #0x2
+ ldrne r0, [r7, #0x0]
+ orrne r0, r0, #0x4
+ strne r0, [r7, #0x0]
+ bne _020BD5DC
+ mov r0, r7
+ bl getMdlTrans_
+_020BD5DC:
+ ands r0, r5, #0xc0
+ bne _020BD6A8
+ ands r0, r5, #0x100
+ bne _020BD628
+ cmp r6, #0x0
+ beq _020BD60C
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x28
+ bl getRotDataEx_
+ b _020BD620
+_020BD60C:
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ add r0, r7, #0x28
+ bl getRotData_
+_020BD620:
+ add r4, r4, #0x8
+ b _020BD6C4
+_020BD628:
+ ldr r1, [r9, #0xc]
+ ldr r2, [r9, #0x10]
+ ldr r3, [r4, #0x0]
+ add r0, r7, #0x28
+ add r1, r9, r1
+ add r2, r9, r2
+ bl getRotDataByIdx_
+ cmp r0, #0x0
+ beq _020BD6A0
+ ldr r12, [r7, #0x3c]
+ ldr r0, [r7, #0x2c]
+ ldr r3, [r7, #0x28]
+ ldr r11, [r7, #0x38]
+ ldr r1, [r7, #0x30]
+ ldr r2, [r7, #0x34]
+ mul r10, r0, r12
+ mul lr, r1, r11
+ sub r10, r10, lr
+ mov r10, r10, asr #0xc
+ mul lr, r1, r2
+ mul r1, r3, r12
+ sub r1, lr, r1
+ mul r11, r3, r11
+ mul r2, r0, r2
+ sub r0, r11, r2
+ str r10, [r7, #0x40]
+ mov r1, r1, asr #0xc
+ str r1, [r7, #0x44]
+ mov r0, r0, asr #0xc
+ str r0, [r7, #0x48]
+_020BD6A0:
+ add r4, r4, #0x4
+ b _020BD6C4
+_020BD6A8:
+ ands r0, r5, #0x40
+ ldrne r0, [r7, #0x0]
+ orrne r0, r0, #0x2
+ strne r0, [r7, #0x0]
+ bne _020BD6C4
+ mov r0, r7
+ bl getMdlRot_
+_020BD6C4:
+ ands r0, r5, #0x600
+ bne _020BD7F0
+ ands r0, r5, #0x800
+ bne _020BD71C
+ cmp r6, #0x0
+ beq _020BD6F4
+ add r0, sp, #0x0
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ bl getScaleDataEx_
+ b _020BD708
+_020BD6F4:
+ add r0, sp, #0x0
+ mov r1, r8
+ mov r2, r4
+ mov r3, r9
+ bl getScaleData_
+_020BD708:
+ ldr r1, [sp, #0x0]
+ ldr r0, [sp, #0x4]
+ str r1, [sp, #0x18]
+ str r0, [sp, #0x24]
+ b _020BD72C
+_020BD71C:
+ ldr r0, [r4, #0x0]
+ str r0, [sp, #0x18]
+ ldr r0, [r4, #0x4]
+ str r0, [sp, #0x24]
+_020BD72C:
+ ands r0, r5, #0x1000
+ bne _020BD77C
+ cmp r6, #0x0
+ beq _020BD754
+ add r0, sp, #0x8
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x8
+ bl getScaleDataEx_
+ b _020BD768
+_020BD754:
+ add r0, sp, #0x8
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x8
+ bl getScaleData_
+_020BD768:
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ str r1, [sp, #0x1c]
+ str r0, [sp, #0x28]
+ b _020BD78C
+_020BD77C:
+ ldr r0, [r4, #0x8]
+ str r0, [sp, #0x1c]
+ ldr r0, [r4, #0xc]
+ str r0, [sp, #0x28]
+_020BD78C:
+ ands r0, r5, #0x2000
+ bne _020BD7DC
+ cmp r6, #0x0
+ beq _020BD7B4
+ add r0, sp, #0x10
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x10
+ bl getScaleDataEx_
+ b _020BD7C8
+_020BD7B4:
+ add r0, sp, #0x10
+ mov r1, r8
+ mov r3, r9
+ add r2, r4, #0x10
+ bl getScaleData_
+_020BD7C8:
+ ldr r1, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ str r1, [sp, #0x20]
+ str r0, [sp, #0x2c]
+ b _020BD814
+_020BD7DC:
+ ldr r0, [r4, #0x10]
+ str r0, [sp, #0x20]
+ ldr r0, [r4, #0x14]
+ str r0, [sp, #0x2c]
+ b _020BD814
+_020BD7F0:
+ ands r0, r5, #0x200
+ ldrne r0, [r7, #0x0]
+ orrne r0, r0, #0x1
+ strne r0, [r7, #0x0]
+ bne _020BD814
+ mov r0, r7
+ bl getMdlScale_
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+_020BD814:
+ ldr r0, [r7, #0x0]
+ add r1, sp, #0x18
+ ands r0, r0, #0x1
+ ldr r0, _020BD84C ; =NNS_G3dRS
+ movne r3, #0x4
+ ldr r4, [r0, #0x0]
+ moveq r3, #0x0
+ ldr r2, [r4, #0x0]
+ ldr r4, [r4, #0xe8]
+ mov r0, r7
+ blx r4
+ add sp, sp, #0x34
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020BD848: .word 0x00000FFF
+_020BD84C: .word NNS_G3dRS
+ arm_func_end getJntSRTAnmResult_
+
+ arm_func_start getMdlRot_
+getMdlRot_: ; 0x020BD850
+ stmdb sp!, {r4-r8,lr}
+ ldr r1, _020BD990 ; =NNS_G3dRS
+ mov r8, r0
+ ldr r0, [r1, #0x0]
+ ldr r3, [r0, #0xd4]
+ ldr r0, [r0, #0x0]
+ ldrh r2, [r3, #0x6]
+ ldrb r0, [r0, #0x1]
+ ldrh r1, [r3, r2]
+ add r2, r3, r2
+ mla r0, r1, r0, r2
+ ldr r0, [r0, #0x4]
+ ldrh r2, [r3, r0]
+ add r4, r3, r0
+ add r1, r4, #0x4
+ ands r0, r2, #0x1
+ addeq r1, r1, #0xc
+ ands r0, r2, #0x2
+ bne _020BD980
+ ands r0, r2, #0x8
+ beq _020BD934
+ and r2, r2, #0xf0
+ add r0, r8, #0x28
+ mov r5, r2, asr #0x4
+ ldrsh r7, [r1, #0x0]
+ ldrsh r6, [r1, #0x2]
+ bl MI_Zero36B
+ ldrh r0, [r4, #0x0]
+ add r1, r8, r5, lsl #0x2
+ ands r0, r0, #0x100
+ movne r0, #0x1000
+ rsbne r2, r0, #0x0
+ moveq r2, #0x1000
+ ldr r0, _020BD994 ; =pivotUtil_
+ str r2, [r1, #0x28]
+ ldrb r1, [r0, r5, lsl #0x2]
+ ldr r0, _020BD998 ; =pivotUtil_ + 1
+ add r1, r8, r1, lsl #0x2
+ str r7, [r1, #0x28]
+ ldrb r0, [r0, r5, lsl #0x2]
+ add r0, r8, r0, lsl #0x2
+ str r6, [r0, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x200
+ ldr r0, _020BD99C ; =pivotUtil_ + 2
+ rsbne r6, r6, #0x0
+ ldrb r0, [r0, r5, lsl #0x2]
+ add r0, r8, r0, lsl #0x2
+ str r6, [r0, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x400
+ ldr r0, _020BD9A0 ; =pivotUtil_ + 3
+ rsbne r7, r7, #0x0
+ ldrb r0, [r0, r5, lsl #0x2]
+ add r0, r8, r0, lsl #0x2
+ str r7, [r0, #0x28]
+ ldmia sp!, {r4-r8,pc}
+_020BD934:
+ ldrsh r0, [r4, #0x2]
+ str r0, [r8, #0x28]
+ ldrsh r0, [r1, #0x0]
+ str r0, [r8, #0x2c]
+ ldrsh r0, [r1, #0x2]
+ str r0, [r8, #0x30]
+ ldrsh r0, [r1, #0x4]
+ str r0, [r8, #0x34]
+ ldrsh r0, [r1, #0x6]
+ str r0, [r8, #0x38]
+ ldrsh r0, [r1, #0x8]
+ str r0, [r8, #0x3c]
+ ldrsh r0, [r1, #0xa]
+ str r0, [r8, #0x40]
+ ldrsh r0, [r1, #0xc]
+ str r0, [r8, #0x44]
+ ldrsh r0, [r1, #0xe]
+ str r0, [r8, #0x48]
+ ldmia sp!, {r4-r8,pc}
+_020BD980:
+ ldr r0, [r8, #0x0]
+ orr r0, r0, #0x2
+ str r0, [r8, #0x0]
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BD990: .word NNS_G3dRS
+_020BD994: .word pivotUtil_
+_020BD998: .word pivotUtil_ + 1
+_020BD99C: .word pivotUtil_ + 2
+_020BD9A0: .word pivotUtil_ + 3
+ arm_func_end getMdlRot_
+
+ arm_func_start getMdlScale_
+getMdlScale_: ; 0x020BD9A4
+ stmdb sp!, {r4,lr}
+ ldr r1, _020BDA04 ; =NNS_G3dRS
+ ldr r12, [r1, #0x0]
+ ldr r4, [r12, #0xd4]
+ ldr r2, [r12, #0x0]
+ ldrh lr, [r4, #0x6]
+ ldrb r1, [r2, #0x1]
+ ldrh r3, [r4, lr]
+ add lr, r4, lr
+ mla r1, r3, r1, lr
+ ldr r1, [r1, #0x4]
+ ldrh r3, [r4, r1]
+ add r1, r4, r1
+ add r1, r1, #0x4
+ ands lr, r3, #0x1
+ addeq r1, r1, #0xc
+ ands lr, r3, #0x2
+ bne _020BD9F8
+ ands lr, r3, #0x8
+ addne r1, r1, #0x4
+ addeq r1, r1, #0x10
+_020BD9F8:
+ ldr r12, [r12, #0xe8]
+ blx r12
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BDA04: .word NNS_G3dRS
+ arm_func_end getMdlScale_
+
+ arm_func_start getMdlTrans_
+getMdlTrans_: ; 0x020BDA08
+ ldr r1, _020BDA6C ; =NNS_G3dRS
+ ldr r1, [r1, #0x0]
+ ldr r12, [r1, #0xd4]
+ ldr r1, [r1, #0x0]
+ ldrh r3, [r12, #0x6]
+ ldrb r1, [r1, #0x1]
+ ldrh r2, [r12, r3]
+ add r3, r12, r3
+ mla r1, r2, r1, r3
+ ldr r2, [r1, #0x4]
+ ldrh r1, [r12, r2]
+ add r2, r12, r2
+ ands r1, r1, #0x1
+ ldrne r1, [r0, #0x0]
+ orrne r1, r1, #0x4
+ strne r1, [r0, #0x0]
+ bxne lr
+ ldr r1, [r2, #0x4]
+ add r2, r2, #0x4
+ str r1, [r0, #0x4c]
+ ldr r1, [r2, #0x4]
+ str r1, [r0, #0x50]
+ ldr r1, [r2, #0x8]
+ str r1, [r0, #0x54]
+ bx lr
+ .balign 4
+_020BDA6C: .word NNS_G3dRS
+ arm_func_end getMdlTrans_
+
+ arm_func_start NNSi_G3dAnmCalcNsBca
+NNSi_G3dAnmCalcNsBca: ; 0x020BDA70
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r3, r0
+ ldr r0, [r1, #0x8]
+ ldr r12, [r1, #0x0]
+ ldrh r1, [r0, #0x4]
+ mov r1, r1, lsl #0xc
+ cmp r12, r1
+ subge r12, r1, #0x1
+ bge _020BDAA0
+ cmp r12, #0x0
+ movlt r12, #0x0
+_020BDAA0:
+ mov r1, r2
+ mov r2, r12
+ bl getJntSRTAnmResult_
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNSi_G3dAnmCalcNsBca
+
+ arm_func_start NNSi_G3dAnmObjInitNsBca
+NNSi_G3dAnmObjInitNsBca: ; 0x020BDAB4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ ldr r0, _020BDB3C ; =NNS_G3dFuncAnmJntNsBcaDefault
+ str r4, [r5, #0x8]
+ ldr r0, [r0, #0x0]
+ add r1, r5, #0x1a
+ str r0, [r5, #0xc]
+ ldrb r2, [r2, #0x17]
+ mov r0, #0x0
+ strb r2, [r5, #0x19]
+ ldrb r2, [r5, #0x19]
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrh r0, [r4, #0x6]
+ add r2, r4, #0x14
+ mov r3, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r5,pc}
+_020BDB08:
+ mov r0, r3, lsl #0x1
+ ldrh r1, [r2, r0]
+ add r0, r5, r3, lsl #0x1
+ add r3, r3, #0x1
+ ldr r1, [r4, r1]
+ mov r1, r1, lsr #0x18
+ orr r1, r1, #0x100
+ strh r1, [r0, #0x1a]
+ ldrh r0, [r4, #0x6]
+ cmp r3, r0
+ blo _020BDB08
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BDB3C: .word NNS_G3dFuncAnmJntNsBcaDefault
+ arm_func_end NNSi_G3dAnmObjInitNsBca
diff --git a/arm9/asm/NNS_G3D_nsbma.s b/arm9/asm/NNS_G3D_nsbma.s
new file mode 100644
index 00000000..acadbe75
--- /dev/null
+++ b/arm9/asm/NNS_G3D_nsbma.s
@@ -0,0 +1,287 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G3dAnmCalcNsBma
+NNSi_G3dAnmCalcNsBma: ; 0x020BDB40
+ stmdb sp!, {r4-r8,lr}
+ ldr r7, [r1, #0x8]
+ mov r2, r2, lsl #0x10
+ ldrh r4, [r7, #0xe]
+ add r5, r7, #0x8
+ ldr r6, [r1, #0x0]
+ ldrh r3, [r5, r4]
+ mov r1, r2, lsr #0x10
+ add r2, r5, r4
+ mul r4, r3, r1
+ add r3, r2, #0x4
+ mov r6, r6, asr #0xc
+ mov r8, r0
+ ldr r1, [r3, r4]
+ mov r0, r7
+ mov r2, r6
+ add r5, r3, r4
+ bl GetMatColAnmValue_
+ mov r4, r0
+ ldr r1, [r5, #0x4]
+ mov r0, r7
+ mov r2, r6
+ bl GetMatColAnmValue_
+ ldr r1, [r8, #0x4]
+ mov r2, r6
+ and r1, r1, #0x8000
+ orr r1, r1, r4
+ orr r0, r1, r0, lsl #0x10
+ str r0, [r8, #0x4]
+ mov r0, r7
+ ldr r1, [r5, #0xc]
+ bl GetMatColAnmValue_
+ mov r4, r0
+ mov r0, r7
+ ldr r1, [r5, #0x8]
+ mov r2, r6
+ bl GetMatColAnmValue_
+ mov r2, r6
+ ldr r1, [r8, #0x8]
+ and r1, r1, #0x8000
+ orr r0, r1, r0
+ orr r0, r0, r4, lsl #0x10
+ str r0, [r8, #0x8]
+ mov r0, r7
+ ldr r1, [r5, #0x10]
+ bl GetMatColAnmuAlphaValue_
+ ldr r1, [r8, #0xc]
+ bic r1, r1, #0x1f0000
+ orr r0, r1, r0, lsl #0x10
+ str r0, [r8, #0xc]
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end NNSi_G3dAnmCalcNsBma
+
+ arm_func_start NNSi_G3dAnmObjInitNsBma
+NNSi_G3dAnmObjInitNsBma: ; 0x020BDC0C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020BDCB4 ; =NNS_G3dFuncAnmMatNsBmaDefault
+ ldr r4, [r2, #0x8]
+ ldr r3, [r3, #0x0]
+ mov r9, r0
+ str r3, [r9, #0xc]
+ ldrb r0, [r2, #0x18]
+ mov r8, r1
+ add r4, r2, r4
+ strb r0, [r9, #0x19]
+ ldrb r2, [r9, #0x19]
+ add r1, r9, #0x1a
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrb r0, [r8, #0x9]
+ mov r7, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+ mov r6, r7
+ add r5, r8, #0x8
+ add r4, r4, #0x4
+_020BDC6C:
+ ldrh r1, [r8, #0xe]
+ mov r0, r4
+ add r2, r5, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl NNS_G3dGetResDictIdxByName
+ cmp r0, #0x0
+ orrge r1, r7, #0x100
+ addge r0, r9, r0, lsl #0x1
+ strgeh r1, [r0, #0x1a]
+ ldrb r0, [r8, #0x9]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020BDC6C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BDCB4: .word NNS_G3dFuncAnmMatNsBmaDefault
+ arm_func_end NNSi_G3dAnmObjInitNsBma
+
+ arm_func_start GetMatColAnmuAlphaValue_
+GetMatColAnmuAlphaValue_: ; 0x020BDCB8
+ ands r3, r1, #0x20000000
+ movne r0, r1, lsl #0x10
+ movne r0, r0, lsr #0x10
+ bxne lr
+ ldr r3, _020BDDA4 ; =0x0000FFFF
+ ands r12, r1, #0xc0000000
+ and r3, r1, r3
+ add r0, r0, r3
+ ldreqb r0, [r0, r2]
+ bxeq lr
+ ldr r3, _020BDDA8 ; =0x1FFF0000
+ ands r12, r1, #0x40000000
+ and r1, r1, r3
+ mov r3, r1, lsr #0x10
+ beq _020BDD30
+ ands r1, r2, #0x1
+ beq _020BDD28
+ cmp r2, r3
+ addhi r0, r0, r3, lsr #0x1
+ ldrhib r0, [r0, #0x1]
+ bxhi lr
+ add r1, r0, r2, lsr #0x1
+ ldrb r2, [r0, r2, lsr #0x1]
+ ldrb r0, [r1, #0x1]
+ add r0, r2, r0
+ mov r0, r0, lsl #0xf
+ mov r0, r0, lsr #0x10
+ bx lr
+_020BDD28:
+ ldrb r0, [r0, r2, lsr #0x1]
+ bx lr
+_020BDD30:
+ ands r1, r2, #0x3
+ beq _020BDD9C
+ cmp r2, r3
+ addhi r0, r0, r3, lsr #0x2
+ ldrhib r0, [r1, r0]
+ bxhi lr
+ ands r1, r2, #0x1
+ beq _020BDD80
+ ands r1, r2, #0x2
+ movne r1, r2, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r2, lsr #0x2
+ addeq r1, r2, #0x1
+ ldrb r2, [r0, r2]
+ ldrb r1, [r0, r1]
+ mov r0, #0x3
+ mla r0, r2, r0, r1
+ mov r0, r0, lsl #0xe
+ mov r0, r0, lsr #0x10
+ bx lr
+_020BDD80:
+ add r1, r0, r2, lsr #0x2
+ ldrb r2, [r0, r2, lsr #0x2]
+ ldrb r0, [r1, #0x1]
+ add r0, r2, r0
+ mov r0, r0, lsl #0xf
+ mov r0, r0, lsr #0x10
+ bx lr
+_020BDD9C:
+ ldrb r0, [r0, r2, lsr #0x2]
+ bx lr
+ .balign 4
+_020BDDA4: .word 0x0000FFFF
+_020BDDA8: .word 0x1FFF0000
+ arm_func_end GetMatColAnmuAlphaValue_
+
+ arm_func_start GetMatColAnmValue_
+GetMatColAnmValue_: ; 0x020BDDAC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ands r3, r1, #0x20000000
+ movne r0, r1, lsl #0x10
+ addne sp, sp, #0x4
+ movne r0, r0, lsr #0x10
+ ldmneia sp!, {pc}
+ ldr r3, _020BDF2C ; =0x0000FFFF
+ ands r12, r1, #0xc0000000
+ and r3, r1, r3
+ add r0, r0, r3
+ moveq r1, r2, lsl #0x1
+ addeq sp, sp, #0x4
+ ldreqh r0, [r0, r1]
+ ldmeqia sp!, {pc}
+ ldr r3, _020BDF30 ; =0x1FFF0000
+ ands r12, r1, #0x40000000
+ and r1, r1, r3
+ mov r3, r1, lsr #0x10
+ beq _020BDE34
+ ands r1, r2, #0x1
+ beq _020BDE24
+ cmp r2, r3
+ bichi r1, r3, #0x1
+ addhi r0, r0, r1
+ addhi sp, sp, #0x4
+ ldrhih r0, [r0, #0x2]
+ ldmhiia sp!, {pc}
+ mov r1, r2, lsr #0x1
+ b _020BDEE0
+_020BDE24:
+ bic r1, r2, #0x1
+ add sp, sp, #0x4
+ ldrh r0, [r0, r1]
+ ldmia sp!, {pc}
+_020BDE34:
+ ands r1, r2, #0x3
+ beq _020BDECC
+ cmp r2, r3
+ movhi r2, r3, lsr #0x2
+ movhi r1, r1, lsl #0x1
+ addhi r0, r0, r2, lsl #0x1
+ addhi sp, sp, #0x4
+ ldrhih r0, [r1, r0]
+ ldmhiia sp!, {pc}
+ ands r1, r2, #0x1
+ beq _020BDEC4
+ ands r1, r2, #0x2
+ movne r1, r2, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r2, lsr #0x2
+ addeq r1, r2, #0x1
+ mov r2, r2, lsl #0x1
+ mov r1, r1, lsl #0x1
+ ldrh r12, [r0, r2]
+ ldrh lr, [r0, r1]
+ ldr r0, _020BDF34 ; =0x00007C1F
+ and r3, r12, #0x3e0
+ and r2, lr, #0x3e0
+ mov r1, #0x3
+ mla r2, r3, r1, r2
+ and r12, r12, r0
+ and r3, lr, r0
+ mla r1, r12, r1, r3
+ mov r2, r2, lsr #0x2
+ and r1, r0, r1, lsr #0x2
+ and r0, r2, #0x3e0
+ orr r0, r1, r0
+ mov r0, r0, lsl #0x10
+ add sp, sp, #0x4
+ mov r0, r0, lsr #0x10
+ ldmia sp!, {pc}
+_020BDEC4:
+ mov r1, r2, lsr #0x2
+ b _020BDEE0
+_020BDECC:
+ mov r1, r2, lsr #0x2
+ mov r1, r1, lsl #0x1
+ add sp, sp, #0x4
+ ldrh r0, [r0, r1]
+ ldmia sp!, {pc}
+_020BDEE0:
+ mov r2, r1, lsl #0x1
+ add r1, r0, r1, lsl #0x1
+ ldrh r3, [r0, r2]
+ ldrh r12, [r1, #0x2]
+ ldr r0, _020BDF34 ; =0x00007C1F
+ and r2, r3, #0x3e0
+ and r1, r12, #0x3e0
+ add r1, r2, r1
+ mov r1, r1, lsr #0x1
+ and r3, r3, r0
+ and r2, r12, r0
+ add r2, r3, r2
+ and r2, r0, r2, lsr #0x1
+ and r0, r1, #0x3e0
+ orr r0, r2, r0
+ mov r0, r0, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BDF2C: .word 0x0000FFFF
+_020BDF30: .word 0x1FFF0000
+_020BDF34: .word 0x00007C1F
+ arm_func_end GetMatColAnmValue_
diff --git a/arm9/asm/NNS_G3D_nsbta.s b/arm9/asm/NNS_G3D_nsbta.s
new file mode 100644
index 00000000..a9fde7cb
--- /dev/null
+++ b/arm9/asm/NNS_G3D_nsbta.s
@@ -0,0 +1,299 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G3dAnmCalcNsBta
+NNSi_G3dAnmCalcNsBta: ; 0x020BDF38
+ stmdb sp!, {r4,lr}
+ ldr r12, [r1, #0x0]
+ mov r4, r0
+ mov r2, r2, lsl #0x10
+ ldr r0, [r1, #0x8]
+ mov r1, r2, lsr #0x10
+ mov r3, r4
+ mov r2, r12, asr #0xc
+ bl GetTexSRTAnm_
+ ldr r0, [r4, #0x10]
+ bic r0, r0, #0xc0000000
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x10]
+ orr r0, r0, #0x40000000
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x0]
+ orr r0, r0, #0x8
+ str r0, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_G3dAnmCalcNsBta
+
+ arm_func_start NNSi_G3dAnmObjInitNsBta
+NNSi_G3dAnmObjInitNsBta: ; 0x020BDF84
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020BE02C ; =NNS_G3dFuncAnmMatNsBtaDefault
+ ldr r4, [r2, #0x8]
+ ldr r3, [r3, #0x0]
+ mov r9, r0
+ str r3, [r9, #0xc]
+ ldrb r0, [r2, #0x18]
+ mov r8, r1
+ add r4, r2, r4
+ strb r0, [r9, #0x19]
+ ldrb r2, [r9, #0x19]
+ add r1, r9, #0x1a
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrb r0, [r8, #0x9]
+ mov r7, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+ mov r6, r7
+ add r5, r8, #0x8
+ add r4, r4, #0x4
+_020BDFE4:
+ ldrh r1, [r8, #0xe]
+ mov r0, r4
+ add r2, r5, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl NNS_G3dGetResDictIdxByName
+ cmp r0, #0x0
+ orrge r1, r7, #0x100
+ addge r0, r9, r0, lsl #0x1
+ strgeh r1, [r0, #0x1a]
+ ldrb r0, [r8, #0x9]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020BDFE4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BE02C: .word NNS_G3dFuncAnmMatNsBtaDefault
+ arm_func_end NNSi_G3dAnmObjInitNsBta
+
+ arm_func_start GetTexSRTAnm_
+GetTexSRTAnm_: ; 0x020BE030
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r8, r0
+ ldrh r4, [r8, #0xe]
+ add r5, r8, #0x8
+ mov r6, r3
+ ldrh r3, [r5, r4]
+ add r4, r5, r4
+ add r4, r4, #0x4
+ mla r5, r3, r1, r4
+ mov r7, r2
+ ldr r1, [r5, #0x18]
+ ldr r2, [r5, #0x1c]
+ mov r3, r7
+ ldr r4, [r6, #0x0]
+ bl GetTexSRTAnmVectorVal_
+ mov r9, r0
+ ldr r1, [r5, #0x20]
+ mov r0, r8
+ ldr r2, [r5, #0x24]
+ mov r3, r7
+ bl GetTexSRTAnmVectorVal_
+ cmp r9, #0x0
+ bne _020BE09C
+ cmp r0, #0x0
+ orreq r4, r4, #0x4
+ beq _020BE0A8
+_020BE09C:
+ str r9, [r6, #0x24]
+ str r0, [r6, #0x28]
+ bic r4, r4, #0x4
+_020BE0A8:
+ ldr r1, [r5, #0x10]
+ ldr r2, [r5, #0x14]
+ mov r0, r8
+ mov r3, r7
+ bl GetTexSRTAnmSinCosVal_
+ cmp r0, #0x10000000
+ strneh r0, [r6, #0x20]
+ movne r0, r0, lsr #0x10
+ strneh r0, [r6, #0x22]
+ orreq r4, r4, #0x2
+ ldr r1, [r5, #0x0]
+ ldr r2, [r5, #0x4]
+ mov r0, r8
+ mov r3, r7
+ bicne r4, r4, #0x2
+ bl GetTexSRTAnmVectorVal_
+ mov r9, r0
+ ldr r1, [r5, #0x8]
+ ldr r2, [r5, #0xc]
+ mov r0, r8
+ mov r3, r7
+ bl GetTexSRTAnmVectorVal_
+ cmp r9, #0x1000
+ bne _020BE114
+ cmp r0, #0x1000
+ orreq r4, r4, #0x1
+ beq _020BE120
+_020BE114:
+ str r9, [r6, #0x18]
+ str r0, [r6, #0x1c]
+ bic r4, r4, #0x1
+_020BE120:
+ str r4, [r6, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ arm_func_end GetTexSRTAnm_
+
+ arm_func_start GetTexSRTAnmSinCosVal_
+GetTexSRTAnmSinCosVal_: ; 0x020BE12C
+ ands r12, r1, #0x20000000
+ movne r0, r2
+ bxne lr
+ add r0, r0, r2
+ ands r2, r1, #0xc0000000
+ beq _020BE1F8
+ ldr r2, _020BE234 ; =0x0000FFFF
+ ands r12, r1, #0x40000000
+ and r2, r1, r2
+ beq _020BE17C
+ ands r1, r3, #0x1
+ beq _020BE174
+ cmp r3, r2
+ movhi r1, r2, lsr #0x1
+ addhi r3, r1, #0x1
+ bhi _020BE1F8
+ mov r2, r3, lsr #0x1
+ b _020BE200
+_020BE174:
+ mov r3, r3, lsr #0x1
+ b _020BE1F8
+_020BE17C:
+ ands r1, r3, #0x3
+ beq _020BE1F4
+ cmp r3, r2
+ addhi r3, r1, r2, lsr #0x2
+ bhi _020BE1F8
+ ands r1, r3, #0x1
+ beq _020BE1EC
+ ands r1, r3, #0x2
+ movne r1, r3, lsr #0x2
+ addne r2, r1, #0x1
+ moveq r2, r3, lsr #0x2
+ addeq r1, r2, #0x1
+ mov r12, r2, lsl #0x2
+ add r3, r0, r2, lsl #0x2
+ mov r2, r1, lsl #0x2
+ add r1, r0, r1, lsl #0x2
+ ldrsh r12, [r0, r12]
+ ldrsh r2, [r0, r2]
+ mov r0, #0x3
+ ldrsh r3, [r3, #0x2]
+ ldrsh r1, [r1, #0x2]
+ mla r2, r12, r0, r2
+ mla r1, r3, r0, r1
+ ldr r0, _020BE234 ; =0x0000FFFF
+ mov r1, r1, asr #0x2
+ and r0, r0, r2, asr #0x2
+ orr r0, r0, r1, lsl #0x10
+ bx lr
+_020BE1EC:
+ mov r2, r3, lsr #0x2
+ b _020BE200
+_020BE1F4:
+ mov r3, r3, lsr #0x2
+_020BE1F8:
+ ldr r0, [r0, r3, lsl #0x2]
+ bx lr
+_020BE200:
+ add r1, r0, r2, lsl #0x2
+ mov r2, r2, lsl #0x2
+ ldrsh r12, [r0, r2]
+ ldrsh r3, [r1, #0x4]
+ ldrsh r2, [r1, #0x2]
+ ldrsh r1, [r1, #0x6]
+ ldr r0, _020BE234 ; =0x0000FFFF
+ add r3, r12, r3
+ add r1, r2, r1
+ and r2, r0, r3, asr #0x1
+ mov r0, r1, asr #0x1
+ orr r0, r2, r0, lsl #0x10
+ bx lr
+ .balign 4
+_020BE234: .word 0x0000FFFF
+ arm_func_end GetTexSRTAnmSinCosVal_
+
+ arm_func_start GetTexSRTAnmVectorVal_
+GetTexSRTAnmVectorVal_: ; 0x020BE238
+ ands r12, r1, #0x20000000
+ movne r0, r2
+ bxne lr
+ add r0, r0, r2
+ ands r2, r1, #0xc0000000
+ beq _020BE2F0
+ ldr r2, _020BE330 ; =0x0000FFFF
+ ands r12, r1, #0x40000000
+ and r12, r1, r2
+ beq _020BE288
+ ands r2, r3, #0x1
+ beq _020BE280
+ cmp r3, r12
+ movhi r2, r12, lsr #0x1
+ addhi r3, r2, #0x1
+ bhi _020BE2F0
+ mov r3, r3, lsr #0x1
+ b _020BE304
+_020BE280:
+ mov r3, r3, lsr #0x1
+ b _020BE2F0
+_020BE288:
+ ands r2, r3, #0x3
+ beq _020BE2EC
+ cmp r3, r12
+ addhi r3, r2, r12, lsr #0x2
+ bhi _020BE2F0
+ ands r2, r3, #0x1
+ beq _020BE2E4
+ ands r2, r3, #0x2
+ movne r3, r3, lsr #0x2
+ addne r2, r3, #0x1
+ moveq r2, r3, lsr #0x2
+ addeq r3, r2, #0x1
+ ands r1, r1, #0x10000000
+ movne r2, r2, lsl #0x1
+ movne r1, r3, lsl #0x1
+ ldrnesh r2, [r0, r2]
+ ldrnesh r1, [r0, r1]
+ ldreq r2, [r0, r2, lsl #0x2]
+ ldreq r1, [r0, r3, lsl #0x2]
+ mov r0, #0x3
+ mla r0, r2, r0, r1
+ mov r0, r0, asr #0x2
+ bx lr
+_020BE2E4:
+ mov r3, r3, lsr #0x2
+ b _020BE304
+_020BE2EC:
+ mov r3, r3, lsr #0x2
+_020BE2F0:
+ ands r1, r1, #0x10000000
+ movne r1, r3, lsl #0x1
+ ldrnesh r0, [r0, r1]
+ ldreq r0, [r0, r3, lsl #0x2]
+ bx lr
+_020BE304:
+ ands r1, r1, #0x10000000
+ movne r2, r3, lsl #0x1
+ addne r1, r0, r3, lsl #0x1
+ ldrnesh r2, [r0, r2]
+ ldrnesh r0, [r1, #0x2]
+ addeq r1, r0, r3, lsl #0x2
+ ldreq r2, [r0, r3, lsl #0x2]
+ ldreq r0, [r1, #0x4]
+ add r0, r2, r0
+ mov r0, r0, asr #0x1
+ bx lr
+ .balign 4
+_020BE330: .word 0x0000FFFF
+ arm_func_end GetTexSRTAnmVectorVal_
diff --git a/arm9/asm/NNS_G3D_nsbtp.s b/arm9/asm/NNS_G3D_nsbtp.s
new file mode 100644
index 00000000..0ae2aa13
--- /dev/null
+++ b/arm9/asm/NNS_G3D_nsbtp.s
@@ -0,0 +1,180 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G3dAnmCalcNsBtp
+NNSi_G3dAnmCalcNsBtp: ; 0x020BE334
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldr r3, [r6, #0x0]
+ ldr r5, [r6, #0x8]
+ mov r1, r2, lsl #0x10
+ mov r2, r3, lsl #0x4
+ mov r7, r0
+ mov r0, r5
+ mov r1, r1, lsr #0x10
+ mov r2, r2, lsr #0x10
+ bl NNSi_G3dGetTexPatAnmFV
+ mov r4, r0
+ ldrb r1, [r4, #0x2]
+ mov r0, r5
+ bl NNSi_G3dGetTexPatAnmTexNameByIdx
+ mov r1, r0
+ ldr r0, [r6, #0x14]
+ mov r2, r7
+ bl SetTexParamaters_
+ ldrb r1, [r4, #0x3]
+ cmp r1, #0xff
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ mov r0, r5
+ bl NNSi_G3dGetTexPatAnmPlttNameByIdx
+ mov r1, r0
+ ldr r0, [r6, #0x14]
+ mov r2, r7
+ bl SetPlttParamaters_
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNSi_G3dAnmCalcNsBtp
+
+ arm_func_start SetPlttParamaters_
+SetPlttParamaters_: ; 0x020BE3B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrh r0, [r5, #0x34]
+ mov r4, r2
+ add r0, r5, r0
+ bl NNS_G3dGetResDataByName
+ ldr r1, [r5, #0x2c]
+ ldrh r2, [r0, #0x2]
+ mov r1, r1, lsl #0x10
+ mov r3, r1, lsr #0x10
+ ands r1, r2, #0x1
+ ldrh r0, [r0, #0x0]
+ moveq r1, r3, lsl #0xf
+ moveq r3, r1, lsr #0x10
+ moveq r0, r0, lsl #0xf
+ moveq r0, r0, lsr #0x10
+ add r0, r0, r3
+ str r0, [r4, #0x14]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end SetPlttParamaters_
+
+ arm_func_start SetTexParamaters_
+SetTexParamaters_: ; 0x020BE408
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ add r0, r5, #0x3c
+ mov r4, r2
+ bl NNS_G3dGetResDataByName
+ ldr r1, [r0, #0x0]
+ ldr r3, [r4, #0x10]
+ and r1, r1, #0x1c000000
+ cmp r1, #0x14000000
+ ldrne r2, [r5, #0x8]
+ ldrne r1, _020BE4E0 ; =0x0000FFFF
+ andne r5, r2, r1
+ ldreq r2, [r5, #0x18]
+ ldreq r1, _020BE4E0 ; =0x0000FFFF
+ andeq r5, r2, r1
+ ldr r1, _020BE4E4 ; =0xC00F0000
+ ldr r2, _020BE4E8 ; =0x000007FF
+ and r1, r3, r1
+ str r1, [r4, #0x10]
+ ldr r1, [r0, #0x0]
+ ldr r3, [r4, #0x10]
+ add r1, r1, r5
+ orr r1, r3, r1
+ str r1, [r4, #0x10]
+ ldr r3, [r0, #0x4]
+ ldr r1, _020BE4EC ; =0x003FF800
+ and r3, r3, r2
+ strh r3, [r4, #0x2c]
+ ldr r3, [r0, #0x4]
+ and r1, r3, r1
+ mov r1, r1, lsr #0xb
+ strh r1, [r4, #0x2e]
+ ldr r3, [r0, #0x4]
+ ldrh r1, [r4, #0x2c]
+ and r0, r3, r2
+ and r5, r2, r3, lsr #0xb
+ cmp r0, r1
+ moveq r0, #0x1000
+ beq _020BE4B4
+ mov r0, r0, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020BE4B4:
+ str r0, [r4, #0x30]
+ ldrh r1, [r4, #0x2e]
+ cmp r5, r1
+ moveq r0, #0x1000
+ beq _020BE4D4
+ mov r0, r5, lsl #0xc
+ mov r1, r1, lsl #0xc
+ bl FX_Div
+_020BE4D4:
+ str r0, [r4, #0x34]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BE4E0: .word 0x0000FFFF
+_020BE4E4: .word 0xC00F0000
+_020BE4E8: .word 0x000007FF
+_020BE4EC: .word 0x003FF800
+ arm_func_end SetTexParamaters_
+
+ arm_func_start NNSi_G3dAnmObjInitNsBtp
+NNSi_G3dAnmObjInitNsBtp: ; 0x020BE4F0
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020BE59C ; =NNS_G3dFuncAnmMatNsBtpDefault
+ ldr r4, [r2, #0x8]
+ ldr r3, [r3, #0x0]
+ mov r9, r0
+ str r3, [r9, #0xc]
+ ldrb r0, [r2, #0x18]
+ mov r8, r1
+ add r4, r2, r4
+ strb r0, [r9, #0x19]
+ str r8, [r9, #0x8]
+ ldrb r2, [r9, #0x19]
+ add r1, r9, #0x1a
+ mov r0, #0x0
+ mov r2, r2, lsl #0x1
+ bl MIi_CpuClear16
+ ldrb r0, [r8, #0xd]
+ mov r7, #0x0
+ cmp r0, #0x0
+ addls sp, sp, #0x4
+ ldmlsia sp!, {r4-r9,pc}
+ mov r6, r7
+ add r5, r8, #0xc
+ add r4, r4, #0x4
+_020BE554:
+ ldrh r1, [r8, #0x12]
+ mov r0, r4
+ add r2, r5, r1
+ ldrh r1, [r2, #0x2]
+ add r1, r2, r1
+ add r1, r1, r6
+ bl NNS_G3dGetResDictIdxByName
+ cmp r0, #0x0
+ orrge r1, r7, #0x100
+ addge r0, r9, r0, lsl #0x1
+ strgeh r1, [r0, #0x1a]
+ ldrb r0, [r8, #0xd]
+ add r7, r7, #0x1
+ add r6, r6, #0x10
+ cmp r7, r0
+ blo _020BE554
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BE59C: .word NNS_G3dFuncAnmMatNsBtpDefault
+ arm_func_end NNSi_G3dAnmObjInitNsBtp
diff --git a/arm9/asm/NNS_G3D_nsbva.s b/arm9/asm/NNS_G3D_nsbva.s
new file mode 100644
index 00000000..e8dc75e4
--- /dev/null
+++ b/arm9/asm/NNS_G3D_nsbva.s
@@ -0,0 +1,49 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G3dAnmCalcNsBva
+NNSi_G3dAnmCalcNsBva: ; 0x020BE5A0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr lr, [r1, #0x8]
+ ldr r3, [r1, #0x0]
+ ldrh r1, [lr, #0x6]
+ mov r12, r3, asr #0xc
+ mov r3, #0x1
+ mla r2, r12, r1, r2
+ mov r1, r2, lsr #0x5
+ add r1, lr, r1, lsl #0x2
+ ldr r1, [r1, #0xc]
+ and r2, r2, #0x1f
+ and r1, r1, r3, lsl r2
+ str r1, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNSi_G3dAnmCalcNsBva
+
+ arm_func_start NNSi_G3dAnmObjInitNsBva
+NNSi_G3dAnmObjInitNsBva: ; 0x020BE5E0
+ ldr r3, _020BE628 ; =NNS_G3dFuncAnmVisNsBvaDefault
+ mov r12, #0x0
+ ldr r3, [r3, #0x0]
+ str r3, [r0, #0xc]
+ ldrb r2, [r2, #0x17]
+ strb r2, [r0, #0x19]
+ str r1, [r0, #0x8]
+ ldrb r1, [r0, #0x19]
+ cmp r1, #0x0
+ bxls lr
+_020BE608:
+ orr r2, r12, #0x100
+ add r1, r0, r12, lsl #0x1
+ strh r2, [r1, #0x1a]
+ ldrb r1, [r0, #0x19]
+ add r12, r12, #0x1
+ cmp r12, r1
+ blo _020BE608
+ bx lr
+ .balign 4
+_020BE628: .word NNS_G3dFuncAnmVisNsBvaDefault
+ arm_func_end NNSi_G3dAnmObjInitNsBva
diff --git a/arm9/asm/NNS_G3D_res_struct_acce.s b/arm9/asm/NNS_G3D_res_struct_acce.s
new file mode 100644
index 00000000..e0420f9b
--- /dev/null
+++ b/arm9/asm/NNS_G3D_res_struct_acce.s
@@ -0,0 +1,317 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G3dGetTex
+NNS_G3dGetTex: ; 0x020BC0FC
+ ldrh r2, [r0, #0xc]
+ ldrh r1, [r0, #0xe]
+ add r3, r0, r2
+ cmp r1, #0x1
+ bne _020BC12C
+ ldr r2, [r0, #0x0]
+ ldr r1, _020BC138 ; =0x30585442
+ cmp r2, r1
+ ldreq r1, [r3, #0x0]
+ addeq r0, r0, r1
+ movne r0, #0x0
+ bx lr
+_020BC12C:
+ ldr r1, [r3, #0x4]
+ add r0, r0, r1
+ bx lr
+ .balign 4
+_020BC138: .word 0x30585442
+ arm_func_end NNS_G3dGetTex
+
+ arm_func_start NNS_G3dGetMdlSet
+NNS_G3dGetMdlSet: ; 0x020BC13C
+ ldrh r1, [r0, #0xc]
+ ldr r1, [r0, r1]
+ add r0, r0, r1
+ bx lr
+ arm_func_end NNS_G3dGetMdlSet
+
+ arm_func_start NNS_G3dGetResDictIdxByName
+NNS_G3dGetResDictIdxByName: ; 0x020BC14C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrb r2, [r0, #0x1]
+ cmp r2, #0x10
+ bhs _020BC1E4
+ cmp r2, #0x0
+ ldr lr, [r1, #0x0]
+ ldr r12, [r1, #0x4]
+ ldr r3, [r1, #0x8]
+ ldr r2, [r1, #0xc]
+ mov r4, #0x0
+ bls _020BC294
+ ldrh r5, [r0, #0x6]
+ mov r1, r4
+ add r6, r0, r5
+ ldrh r5, [r6, #0x2]
+ add r6, r6, r5
+_020BC190:
+ ldr r5, [r6, r1]
+ add r7, r6, r1
+ cmp r5, lr
+ bne _020BC1CC
+ ldr r5, [r7, #0x4]
+ cmp r5, r12
+ bne _020BC1CC
+ ldr r5, [r7, #0x8]
+ cmp r5, r3
+ bne _020BC1CC
+ ldr r5, [r7, #0xc]
+ cmp r5, r2
+ addeq sp, sp, #0x4
+ moveq r0, r4
+ ldmeqia sp!, {r4-r7,pc}
+_020BC1CC:
+ ldrb r5, [r0, #0x1]
+ add r4, r4, #0x1
+ add r1, r1, #0x10
+ cmp r4, r5
+ blo _020BC190
+ b _020BC294
+_020BC1E4:
+ add r3, r0, #0x8
+ ldrb r2, [r3, #0x1]
+ cmp r2, #0x0
+ beq _020BC294
+ ldrb r5, [r3, r2, lsl #0x2]
+ ldrb r4, [r3, #0x0]
+ add r2, r3, r2, lsl #0x2
+ cmp r4, r5
+ bls _020BC238
+_020BC208:
+ mov r4, r5, asr #0x5
+ ldr r12, [r1, r4, lsl #0x2]
+ and r4, r5, #0x1f
+ mov r4, r12, lsr r4
+ and r4, r4, #0x1
+ add r4, r2, r4
+ ldrb r12, [r4, #0x1]
+ ldrb r4, [r2, #0x0]
+ ldrb r5, [r3, r12, lsl #0x2]
+ add r2, r3, r12, lsl #0x2
+ cmp r4, r5
+ bhi _020BC208
+_020BC238:
+ ldrh r4, [r0, #0x6]
+ ldr r3, [r1, #0x0]
+ add r12, r0, r4
+ ldrh r4, [r12, #0x2]
+ ldrb r0, [r2, #0x3]
+ add r4, r12, r4
+ ldr r2, [r4, r0, lsl #0x4]
+ add r4, r4, r0, lsl #0x4
+ cmp r2, r3
+ bne _020BC294
+ ldr r3, [r4, #0x4]
+ ldr r2, [r1, #0x4]
+ cmp r3, r2
+ bne _020BC294
+ ldr r3, [r4, #0x8]
+ ldr r2, [r1, #0x8]
+ cmp r3, r2
+ bne _020BC294
+ ldr r2, [r4, #0xc]
+ ldr r1, [r1, #0xc]
+ cmp r2, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+_020BC294:
+ mvn r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G3dGetResDictIdxByName
+
+ arm_func_start NNS_G3dGetResDataByName
+NNS_G3dGetResDataByName: ; 0x020BC2A0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldrb r2, [r0, #0x1]
+ cmp r2, #0x10
+ bhs _020BC34C
+ cmp r2, #0x0
+ ldr lr, [r1, #0x0]
+ ldr r12, [r1, #0x4]
+ ldr r3, [r1, #0x8]
+ ldr r2, [r1, #0xc]
+ mov r4, #0x0
+ bls _020BC404
+ ldrh r5, [r0, #0x6]
+ mov r1, r4
+ add r6, r0, r5
+ ldrh r5, [r6, #0x2]
+ add r6, r6, r5
+_020BC2E4:
+ ldr r5, [r6, r1]
+ add r7, r6, r1
+ cmp r5, lr
+ bne _020BC334
+ ldr r5, [r7, #0x4]
+ cmp r5, r12
+ bne _020BC334
+ ldr r5, [r7, #0x8]
+ cmp r5, r3
+ bne _020BC334
+ ldr r5, [r7, #0xc]
+ cmp r5, r2
+ bne _020BC334
+ ldrh r2, [r0, #0x6]
+ add sp, sp, #0x4
+ ldrh r1, [r0, r2]
+ add r0, r0, r2
+ add r0, r0, #0x4
+ mla r0, r1, r4, r0
+ ldmia sp!, {r4-r7,pc}
+_020BC334:
+ ldrb r5, [r0, #0x1]
+ add r4, r4, #0x1
+ add r1, r1, #0x10
+ cmp r4, r5
+ blo _020BC2E4
+ b _020BC404
+_020BC34C:
+ add r3, r0, #0x8
+ ldrb r2, [r3, #0x1]
+ cmp r2, #0x0
+ beq _020BC404
+ ldrb r5, [r3, r2, lsl #0x2]
+ ldrb r4, [r3, #0x0]
+ add r2, r3, r2, lsl #0x2
+ cmp r4, r5
+ bls _020BC3A0
+_020BC370:
+ mov r4, r5, asr #0x5
+ ldr r12, [r1, r4, lsl #0x2]
+ and r4, r5, #0x1f
+ mov r4, r12, lsr r4
+ and r4, r4, #0x1
+ add r4, r2, r4
+ ldrb r12, [r4, #0x1]
+ ldrb r4, [r2, #0x0]
+ ldrb r5, [r3, r12, lsl #0x2]
+ add r2, r3, r12, lsl #0x2
+ cmp r4, r5
+ bhi _020BC370
+_020BC3A0:
+ ldrh r4, [r0, #0x6]
+ ldrb r2, [r2, #0x3]
+ ldr r3, [r1, #0x0]
+ add r0, r0, r4
+ ldrh r4, [r0, #0x2]
+ add r12, r0, r4
+ ldr r4, [r12, r2, lsl #0x4]
+ add r12, r12, r2, lsl #0x4
+ cmp r4, r3
+ bne _020BC404
+ ldr r4, [r12, #0x4]
+ ldr r3, [r1, #0x4]
+ cmp r4, r3
+ bne _020BC404
+ ldr r4, [r12, #0x8]
+ ldr r3, [r1, #0x8]
+ cmp r4, r3
+ bne _020BC404
+ ldr r3, [r12, #0xc]
+ ldr r1, [r1, #0xc]
+ cmp r3, r1
+ ldreqh r1, [r0], #0x4
+ addeq sp, sp, #0x4
+ mlaeq r0, r1, r2, r0
+ ldmeqia sp!, {r4-r7,pc}
+_020BC404:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end NNS_G3dGetResDataByName
+
+ arm_func_start NNSi_G3dGetTexPatAnmDataByIdx
+NNSi_G3dGetTexPatAnmDataByIdx: ; 0x020BC410
+ ldrh r3, [r0, #0x12]
+ add r0, r0, #0xc
+ ldrh r2, [r0, r3]
+ add r0, r0, r3
+ add r0, r0, #0x4
+ mla r0, r2, r1, r0
+ bx lr
+ arm_func_end NNSi_G3dGetTexPatAnmDataByIdx
+
+ arm_func_start NNSi_G3dGetTexPatAnmFV
+NNSi_G3dGetTexPatAnmFV: ; 0x020BC42C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r2
+ bl NNSi_G3dGetTexPatAnmDataByIdx
+ ldrsh r1, [r0, #0x4]
+ ldrh r3, [r0, #0x6]
+ mul r2, r1, r4
+ add r3, r5, r3
+ mov r2, r2, lsr #0xc
+ b _020BC45C
+_020BC458:
+ sub r2, r2, #0x1
+_020BC45C:
+ cmp r2, #0x0
+ beq _020BC474
+ mov r1, r2, lsl #0x2
+ ldrh r1, [r3, r1]
+ cmp r1, r4
+ bhs _020BC458
+_020BC474:
+ ldrh r1, [r0, #0x0]
+ b _020BC480
+_020BC47C:
+ add r2, r2, #0x1
+_020BC480:
+ add r0, r2, #0x1
+ cmp r0, r1
+ bhs _020BC49C
+ add r0, r3, r2, lsl #0x2
+ ldrh r0, [r0, #0x4]
+ cmp r0, r4
+ bls _020BC47C
+_020BC49C:
+ add r0, r3, r2, lsl #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNSi_G3dGetTexPatAnmFV
+
+ arm_func_start NNSi_G3dGetTexPatAnmPlttNameByIdx
+NNSi_G3dGetTexPatAnmPlttNameByIdx: ; 0x020BC4A8
+ ldrh r2, [r0, #0xa]
+ add r0, r0, r2
+ add r0, r0, r1, lsl #0x4
+ bx lr
+ arm_func_end NNSi_G3dGetTexPatAnmPlttNameByIdx
+
+ arm_func_start NNSi_G3dGetTexPatAnmTexNameByIdx
+NNSi_G3dGetTexPatAnmTexNameByIdx: ; 0x020BC4B8
+ ldrh r2, [r0, #0x8]
+ add r0, r0, r2
+ add r0, r0, r1, lsl #0x4
+ bx lr
+ arm_func_end NNSi_G3dGetTexPatAnmTexNameByIdx
+
+ arm_func_start NNS_G3dGetAnmByIdx
+NNS_G3dGetAnmByIdx: ; 0x020BC4C8
+ ldrh r2, [r0, #0xc]
+ ldr r2, [r0, r2]
+ add r12, r0, r2
+ ldrh r2, [r12, #0xe]
+ add r3, r12, #0x8
+ ldrh r0, [r3, r2]
+ add r2, r3, r2
+ add r2, r2, #0x4
+ mul r1, r0, r1
+ adds r0, r2, r1
+ ldrne r0, [r0, #0x0]
+ addne r0, r12, r0
+ moveq r0, #0x0
+ bx lr
+ arm_func_end NNS_G3dGetAnmByIdx
diff --git a/arm9/asm/NNS_G3D_sbc.s b/arm9/asm/NNS_G3D_sbc.s
new file mode 100644
index 00000000..86ee394f
--- /dev/null
+++ b/arm9/asm/NNS_G3D_sbc.s
@@ -0,0 +1,2738 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global matColorMask_$8998
+matColorMask_$8998: ; 0x020FF9D0
+ .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F
+ .byte 0x00, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F
+ ; static const in function
+
+ .global pivotUtil_$9100
+pivotUtil_$9100: ; 0x020FF9F0
+ .byte 0x04, 0x05, 0x07, 0x08
+ .byte 0x03, 0x05, 0x06, 0x08
+ .byte 0x03, 0x04, 0x06, 0x07
+ .byte 0x01, 0x02, 0x07, 0x08
+ .byte 0x00, 0x02, 0x06, 0x08
+ .byte 0x00, 0x01, 0x06, 0x07
+ .byte 0x01, 0x02, 0x04, 0x05
+ .byte 0x00, 0x02, 0x03, 0x05
+ .byte 0x00, 0x01, 0x03, 0x04
+ ; static const in function
+
+ .section .data
+
+ .global cmd$9407
+cmd$9407: ; 0x02106630
+ .byte 0x2A, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ .global cmd$9366
+cmd$9366: ; 0x02106638
+ .byte 0x2A, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ .global NNS_G3dFuncSbcMatTable
+NNS_G3dFuncSbcMatTable: ; 0x02106640
+ .word NNSi_G3dFuncSbc_MAT_InternalDefault
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global NNS_G3dFuncSbcShpTable
+NNS_G3dFuncSbcShpTable: ; 0x02106650
+ .word NNSi_G3dFuncSbc_SHP_InternalDefault
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global mtx$9412
+mtx$9412: ; 0x02106660
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00
+
+ .global bbcmd1$9173
+bbcmd1$9173: ; 0x021066A0
+ .byte 0x12, 0x10, 0x17, 0x1B
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global bbcmd1$9234
+bbcmd1$9234: ; 0x021066E8
+ .byte 0x12, 0x10, 0x17, 0x1B
+ .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x10, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .global NNS_G3dFuncSbcTable
+NNS_G3dFuncSbcTable: ; 0x02106730
+ .word NNSi_G3dFuncSbc_NOP
+ .word NNSi_G3dFuncSbc_RET
+ .word NNSi_G3dFuncSbc_NODE
+ .word NNSi_G3dFuncSbc_MTX
+ .word NNSi_G3dFuncSbc_MAT
+ .word NNSi_G3dFuncSbc_SHP
+ .word NNSi_G3dFuncSbc_NODEDESC
+ .word NNSi_G3dFuncSbc_BB
+ .word NNSi_G3dFuncSbc_BBY
+ .word NNSi_G3dFuncSbc_NODEMIX
+ .word NNSi_G3dFuncSbc_CALLDL
+ .word NNSi_G3dFuncSbc_POSSCALE
+ .word NNSi_G3dFuncSbc_ENVMAP
+ .word NNSi_G3dFuncSbc_PRJMAP
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .section .bss
+
+ .global NNS_G3dRS
+NNS_G3dRS: ; 0x021CEF7C
+ .space 0x4
+
+ .global NNS_G3dRSOnGlb
+NNS_G3dRSOnGlb: ; 0x021CEF80
+ .space 0x2d00
+
+ .section .text
+
+ arm_func_start NNSi_G3dFuncSbc_PRJMAP
+NNSi_G3dFuncSbc_PRJMAP: ; 0x020B8A60
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x80
+ mov r5, r0
+ ldr r1, [r5, #0x8]
+ ands r0, r1, #0x200
+ bne _020B8DB4
+ ands r0, r1, #0x1
+ beq _020B8DB4
+ add r0, sp, #0x10
+ mov r1, #0x0
+ bl NNS_G3dGetCurrentMtx
+ mov r0, #0x1e
+ str r0, [sp, #0x0]
+ add r1, sp, #0x0
+ mov r0, #0x13
+ mov r2, #0x1
+ bl NNS_G3dGeBufferOP_N
+ ldr r2, [r5, #0xb0]
+ ldr r0, [r2, #0x10]
+ and r1, r0, #0xc0000000
+ cmp r1, #0xc0000000
+ beq _020B8AF0
+ bic r0, r0, #0xc0000000
+ str r0, [r2, #0x10]
+ ldr r2, [r5, #0xb0]
+ ldr r3, _020B8DC8 ; =cmd$9407
+ ldr r0, [r2, #0x10]
+ ldr r1, _020B8DCC ; =cmd$9407 + 0x4
+ orr r0, r0, #0xc0000000
+ str r0, [r2, #0x10]
+ ldr r2, [r5, #0xb0]
+ ldr r0, [r3, #0x0]
+ ldr r4, [r2, #0x10]
+ mov r2, #0x1
+ str r4, [r3, #0x4]
+ bl NNS_G3dGeBufferOP_N
+_020B8AF0:
+ ldr r0, [r5, #0x40]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x99]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020B8B3C
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x40]
+ blx r1
+ ldr r0, [r5, #0x40]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x99]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020B8B40
+_020B8B3C:
+ mov r0, #0x0
+_020B8B40:
+ cmp r0, #0x0
+ bne _020B8B84
+ ldr r0, [r5, #0xb0]
+ ldr r1, _020B8DD0 ; =mtx$9412
+ ldrh r6, [r0, #0x2e]
+ ldrh r3, [r0, #0x2c]
+ mov r0, #0x16
+ rsb r2, r6, #0x0
+ mov lr, r3, lsl #0xf
+ mov r12, r2, lsl #0xf
+ mov r3, r6, lsl #0xf
+ mov r2, #0x10
+ str lr, [r1, #0x0]
+ str r12, [r1, #0x14]
+ str lr, [r1, #0x30]
+ str r3, [r1, #0x34]
+ bl NNS_G3dGeBufferOP_N
+_020B8B84:
+ cmp r4, #0x2
+ bne _020B8BC0
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x40]
+ blx r1
+ ldr r0, [r5, #0x40]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x99]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020B8BC4
+_020B8BC0:
+ mov r0, #0x0
+_020B8BC4:
+ cmp r0, #0x0
+ bne _020B8C28
+ ldr r12, [r5, #0xd8]
+ ldr r0, [r5, #0x0]
+ ldrh r2, [r12, #0xa]
+ add r3, r12, #0x4
+ ldrb r0, [r0, #0x1]
+ ldrh r1, [r3, r2]
+ add r2, r3, r2
+ mla r0, r1, r0, r2
+ ldr r0, [r0, #0x4]
+ add r1, r12, r0
+ ldrh r2, [r1, #0x1e]
+ ands r0, r2, #0x2000
+ beq _020B8C28
+ add r1, r1, #0x2c
+ ands r0, r2, #0x2
+ addeq r1, r1, #0x8
+ ands r0, r2, #0x4
+ addeq r1, r1, #0x4
+ ands r0, r2, #0x8
+ addeq r1, r1, #0x8
+ mov r0, #0x18
+ mov r2, #0x10
+ bl NNS_G3dGeBufferOP_N
+_020B8C28:
+ cmp r4, #0x3
+ movne r0, #0x0
+ bne _020B8C54
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x40]
+ blx r1
+ ldr r0, [r5, #0x8]
+ and r0, r0, #0x40
+_020B8C54:
+ cmp r0, #0x0
+ bne _020B8D84
+ ldr r0, _020B8DD4 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B8CA0
+ ldr r1, _020B8DD8 ; =NNS_G3dGlb + 0xE0
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+ ldr r1, _020B8DDC ; =NNS_G3dGlb + 0xBC
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ add r1, sp, #0x10
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+ b _020B8CE0
+_020B8CA0:
+ ands r0, r1, #0x2
+ beq _020B8CBC
+ add r1, sp, #0x10
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+ b _020B8CE0
+_020B8CBC:
+ bl NNS_G3dGlbGetInvV
+ mov r1, r0
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+ add r1, sp, #0x10
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+_020B8CE0:
+ bl NNS_G3dGeFlushBuffer
+ ldr r0, _020B8DE0 ; =0x04000440
+ mov r2, #0x0
+ ldr r1, _020B8DE4 ; =0x04000444
+ str r2, [r0, #0x0]
+ ldr r0, _020B8DE8 ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add r4, sp, #0x40
+_020B8D04:
+ mov r0, r4
+ bl G3X_GetClipMtx
+ cmp r0, #0x0
+ bne _020B8D04
+ ldr r1, _020B8DEC ; =0x04000448
+ mov r2, #0x1
+ str r2, [r1, #0x0]
+ ldr r0, _020B8DE0 ; =0x04000440
+ mov r2, #0x3
+ str r2, [r0, #0x0]
+ add r1, sp, #0x40
+ mov r0, #0x16
+ mov r2, #0x10
+ bl NNS_G3dGeBufferOP_N
+ ldr r1, [sp, #0x70]
+ ldr r0, [sp, #0x74]
+ mov r2, r1, asr #0x4
+ mov r1, r0, asr #0x4
+ mov r0, r2, lsl #0x8
+ mov r1, r1, lsl #0x8
+ mov r0, r0, asr #0x10
+ mov r1, r1, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsr #0x10
+ orr r3, r2, r0, lsl #0x10
+ add r1, sp, #0x4
+ mov r0, #0x22
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl NNS_G3dGeBufferOP_N
+_020B8D84:
+ mov r3, #0x2
+ add r1, sp, #0x8
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl NNS_G3dGeBufferOP_N
+ mov r3, #0x1e
+ add r1, sp, #0xc
+ mov r0, #0x14
+ mov r2, #0x1
+ str r3, [sp, #0xc]
+ bl NNS_G3dGeBufferOP_N
+_020B8DB4:
+ ldr r0, [r5, #0x0]
+ add r0, r0, #0x3
+ str r0, [r5, #0x0]
+ add sp, sp, #0x80
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020B8DC8: .word cmd$9407
+_020B8DCC: .word cmd$9407 + 0x4
+_020B8DD0: .word mtx$9412
+_020B8DD4: .word NNS_G3dGlb
+_020B8DD8: .word NNS_G3dGlb + 0xE0
+_020B8DDC: .word NNS_G3dGlb + 0xBC
+_020B8DE0: .word 0x04000440
+_020B8DE4: .word 0x04000444
+_020B8DE8: .word 0x04000454
+_020B8DEC: .word 0x04000448
+ arm_func_end NNSi_G3dFuncSbc_PRJMAP
+
+ arm_func_start NNSi_G3dFuncSbc_ENVMAP
+NNSi_G3dFuncSbc_ENVMAP: ; 0x020B8DF0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x44
+ mov r7, r0
+ ldr r1, [r7, #0x8]
+ ands r0, r1, #0x200
+ bne _020B90E8
+ ands r0, r1, #0x1
+ beq _020B90E8
+ ldr r2, [r7, #0xb0]
+ ldr r0, [r2, #0x10]
+ and r1, r0, #0xc0000000
+ cmp r1, #0x80000000
+ beq _020B8E5C
+ bic r0, r0, #0xc0000000
+ str r0, [r2, #0x10]
+ ldr r2, [r7, #0xb0]
+ ldr r3, _020B90FC ; =cmd$9366
+ ldr r0, [r2, #0x10]
+ ldr r1, _020B9100 ; =cmd$9366 + 0x4
+ orr r0, r0, #0x80000000
+ str r0, [r2, #0x10]
+ ldr r2, [r7, #0xb0]
+ ldr r0, [r3, #0x0]
+ ldr r4, [r2, #0x10]
+ mov r2, #0x1
+ str r4, [r3, #0x4]
+ bl NNS_G3dGeBufferOP_N
+_020B8E5C:
+ mov r0, #0x3
+ str r0, [sp, #0x0]
+ add r1, sp, #0x0
+ mov r0, #0x10
+ mov r2, #0x1
+ bl NNS_G3dGeBufferOP_N
+ ldr r0, [r7, #0x3c]
+ cmp r0, #0x0
+ ldrneb r6, [r7, #0x98]
+ moveq r6, #0x0
+ cmp r6, #0x1
+ bne _020B8EC0
+ ldr r1, [r7, #0x8]
+ mov r0, r7
+ bic r1, r1, #0x40
+ str r1, [r7, #0x8]
+ ldr r1, [r7, #0x3c]
+ blx r1
+ ldr r0, [r7, #0x3c]
+ cmp r0, #0x0
+ ldrneb r6, [r7, #0x98]
+ ldr r0, [r7, #0x8]
+ moveq r6, #0x0
+ and r0, r0, #0x40
+ b _020B8EC4
+_020B8EC0:
+ mov r0, #0x0
+_020B8EC4:
+ cmp r0, #0x0
+ bne _020B8F3C
+ ldr r0, [r7, #0xb0]
+ add r1, sp, #0x38
+ ldrh r4, [r0, #0x2e]
+ ldrh r5, [r0, #0x2c]
+ mov r3, #0x10000
+ rsb r0, r4, #0x0
+ mov r12, r0, lsl #0xf
+ mov lr, r5, lsl #0xf
+ mov r0, #0x1b
+ mov r2, #0x3
+ str lr, [sp, #0x38]
+ str r12, [sp, #0x3c]
+ str r3, [sp, #0x40]
+ bl NNS_G3dGeBufferOP_N
+ mov r0, r5, lsl #0x13
+ mov r1, r4, lsl #0x13
+ mov r0, r0, asr #0x10
+ mov r1, r1, asr #0x10
+ mov r0, r0, lsl #0x10
+ mov r1, r1, lsl #0x10
+ mov r2, r0, lsr #0x10
+ mov r0, r1, lsr #0x10
+ orr r3, r2, r0, lsl #0x10
+ add r1, sp, #0x4
+ mov r0, #0x22
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl NNS_G3dGeBufferOP_N
+_020B8F3C:
+ cmp r6, #0x2
+ bne _020B8F78
+ ldr r1, [r7, #0x8]
+ mov r0, r7
+ bic r1, r1, #0x40
+ str r1, [r7, #0x8]
+ ldr r1, [r7, #0x3c]
+ blx r1
+ ldr r0, [r7, #0x3c]
+ cmp r0, #0x0
+ ldrneb r6, [r7, #0x98]
+ ldr r0, [r7, #0x8]
+ moveq r6, #0x0
+ and r0, r0, #0x40
+ b _020B8F7C
+_020B8F78:
+ mov r0, #0x0
+_020B8F7C:
+ cmp r0, #0x0
+ bne _020B8FE0
+ ldr r4, [r7, #0xd8]
+ ldr r0, [r7, #0x0]
+ ldrh r2, [r4, #0xa]
+ add r3, r4, #0x4
+ ldrb r0, [r0, #0x1]
+ ldrh r1, [r3, r2]
+ add r2, r3, r2
+ mla r0, r1, r0, r2
+ ldr r0, [r0, #0x4]
+ add r1, r4, r0
+ ldrh r2, [r1, #0x1e]
+ ands r0, r2, #0x2000
+ beq _020B8FE0
+ add r1, r1, #0x2c
+ ands r0, r2, #0x2
+ addeq r1, r1, #0x8
+ ands r0, r2, #0x4
+ addeq r1, r1, #0x4
+ ands r0, r2, #0x8
+ addeq r1, r1, #0x8
+ mov r0, #0x18
+ mov r2, #0x10
+ bl NNS_G3dGeBufferOP_N
+_020B8FE0:
+ cmp r6, #0x3
+ movne r0, #0x0
+ bne _020B900C
+ ldr r1, [r7, #0x8]
+ mov r0, r7
+ bic r1, r1, #0x40
+ str r1, [r7, #0x8]
+ ldr r1, [r7, #0x3c]
+ blx r1
+ ldr r0, [r7, #0x8]
+ and r0, r0, #0x40
+_020B900C:
+ cmp r0, #0x0
+ bne _020B90D0
+ mov r3, #0x2
+ add r1, sp, #0x8
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl NNS_G3dGeBufferOP_N
+ add r1, sp, #0x14
+ mov r0, #0x0
+ bl NNS_G3dGetCurrentMtx
+ mov r3, #0x3
+ add r1, sp, #0xc
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0xc]
+ bl NNS_G3dGeBufferOP_N
+ ldr r0, _020B9104 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9094
+ ldr r1, _020B9108 ; =NNS_G3dGlb + 0x4C
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ ldr r1, _020B910C ; =NNS_G3dGlb + 0xBC
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ add r1, sp, #0x14
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ b _020B90D0
+_020B9094:
+ ands r0, r1, #0x2
+ beq _020B90C0
+ ldr r1, _020B9108 ; =NNS_G3dGlb + 0x4C
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ add r1, sp, #0x14
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ b _020B90D0
+_020B90C0:
+ add r1, sp, #0x14
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+_020B90D0:
+ mov r3, #0x2
+ add r1, sp, #0x10
+ mov r0, #0x10
+ mov r2, #0x1
+ str r3, [sp, #0x10]
+ bl NNS_G3dGeBufferOP_N
+_020B90E8:
+ ldr r0, [r7, #0x0]
+ add r0, r0, #0x3
+ str r0, [r7, #0x0]
+ add sp, sp, #0x44
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020B90FC: .word cmd$9366
+_020B9100: .word cmd$9366 + 0x4
+_020B9104: .word NNS_G3dGlb
+_020B9108: .word NNS_G3dGlb + 0x4C
+_020B910C: .word NNS_G3dGlb + 0xBC
+ arm_func_end NNSi_G3dFuncSbc_ENVMAP
+
+ arm_func_start NNSi_G3dFuncSbc_POSSCALE
+NNSi_G3dFuncSbc_POSSCALE: ; 0x020B9110
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x10
+ mov r4, r0
+ ldr r2, [r4, #0x8]
+ ands r0, r2, #0x100
+ bne _020B9164
+ ands r0, r2, #0x200
+ bne _020B9164
+ cmp r1, #0x0
+ ldreq r0, [r4, #0xe0]
+ add r1, sp, #0x0
+ streq r0, [sp, #0x8]
+ streq r0, [sp, #0x4]
+ streq r0, [sp, #0x0]
+ ldrne r0, [r4, #0xe4]
+ mov r2, #0x3
+ strne r0, [sp, #0x8]
+ strne r0, [sp, #0x4]
+ strne r0, [sp, #0x0]
+ mov r0, #0x1b
+ bl NNS_G3dGeBufferOP_N
+_020B9164:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x1
+ str r0, [r4, #0x0]
+ add sp, sp, #0x10
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_G3dFuncSbc_POSSCALE
+
+ arm_func_start NNSi_G3dFuncSbc_CALLDL
+NNSi_G3dFuncSbc_CALLDL: ; 0x020B9178
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r0, [r5, #0x34]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x96]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020B91CC
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x34]
+ blx r1
+ ldr r0, [r5, #0x34]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x96]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r1, r0, #0x40
+ b _020B91D0
+_020B91CC:
+ mov r1, #0x0
+_020B91D0:
+ ldr r0, [r5, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9228
+ cmp r1, #0x0
+ bne _020B9228
+ ldr r0, [r5, #0x0]
+ ldrb r12, [r0, #0x1]
+ ldrb r3, [r0, #0x2]
+ ldrb lr, [r0, #0x3]
+ ldrb r2, [r0, #0x5]
+ ldrb r1, [r0, #0x6]
+ orr r3, r12, r3, lsl #0x8
+ ldrb r6, [r0, #0x4]
+ orr r12, r3, lr, lsl #0x10
+ ldrb r3, [r0, #0x7]
+ orr r1, r2, r1, lsl #0x8
+ orr r6, r12, r6, lsl #0x18
+ ldrb r2, [r0, #0x8]
+ orr r1, r1, r3, lsl #0x10
+ add r0, r0, r6
+ orr r1, r1, r2, lsl #0x18
+ bl NNS_G3dGeSendDL
+_020B9228:
+ cmp r4, #0x3
+ bne _020B9248
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x34]
+ blx r1
+_020B9248:
+ ldr r0, [r5, #0x0]
+ add r0, r0, #0x9
+ str r0, [r5, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G3dFuncSbc_CALLDL
+
+ arm_func_start NNSi_G3dFuncSbc_NODEMIX
+NNSi_G3dFuncSbc_NODEMIX: ; 0x020B9258
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x8c
+ ldr r1, [r0, #0x4]
+ ldr r4, [r0, #0x0]
+ ldr r6, [r1, #0x4]
+ ldrb r2, [r4, #0x2]
+ ldr r3, [r6, #0x10]
+ mov r10, #0x0
+ str r0, [sp, #0x0]
+ str r2, [sp, #0x8]
+ add r3, r6, r3
+ add r1, sp, #0x34
+ mov r0, r10
+ mov r2, #0x54
+ mov r9, r10
+ str r3, [sp, #0x4]
+ add r8, r4, #0x3
+ bl MIi_CpuClearFast
+ bl NNS_G3dGeFlushBuffer
+ ldr r0, _020B98AC ; =0x04000440
+ mov r7, r10
+ str r7, [r0, #0x0]
+ mov r0, #0x1
+ ldr r2, _020B98B0 ; =0x0400044C
+ ldr r1, _020B98B4 ; =0x04000454
+ str r0, [r2, #0x0]
+ str r0, [sp, #0x10]
+ str r7, [r1, #0x0]
+ mov r1, #0x2
+ ldr r0, _020B98AC ; =0x04000440
+ str r1, [sp, #0x14]
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ bls _020B96CC
+_020B92E4:
+ ldrb r4, [r8, #0x1]
+ mov r0, #0x64
+ ldr r3, _020B98B8 ; =NNS_G3dRSOnGlb + 0x1400
+ mul r0, r4, r0
+ str r0, [sp, #0xc]
+ ldr r0, [sp, #0x0]
+ mov r1, r4, lsr #0x5
+ add r0, r0, r1, lsl #0x2
+ ldr r1, [sp, #0x10]
+ and r2, r4, #0x1f
+ mov r1, r1, lsl r2
+ ldr r11, [r0, #0xcc]
+ ldr r2, [sp, #0xc]
+ ands r11, r1, r11
+ add r6, r3, r2
+ bne _020B9358
+ ldr r3, [r0, #0xcc]
+ mov r2, #0x54
+ orr r1, r3, r1
+ str r1, [r0, #0xcc]
+ ldr r0, [sp, #0x4]
+ ldr r1, _020B98BC ; =0x04000450
+ mla r0, r4, r2, r0
+ ldrb r2, [r8, #0x0]
+ str r2, [r1, #0x0]
+ ldr r2, [sp, #0x10]
+ ldr r1, _020B98AC ; =0x04000440
+ str r2, [r1, #0x0]
+ bl G3_MultMtx43
+_020B9358:
+ cmp r7, #0x0
+ beq _020B9500
+ ldr r2, [sp, #0x6c]
+ ldr r1, [r5, #0x0]
+ str r2, [sp, #0x18]
+ ldr r2, [sp, #0x70]
+ mov r0, r1, asr #0x1f
+ str r2, [sp, #0x1c]
+ ldr r2, [sp, #0x74]
+ ldr r12, [sp, #0x64]
+ str r2, [sp, #0x20]
+ ldr r2, [sp, #0x78]
+ ldr lr, [sp, #0x68]
+ str r2, [sp, #0x24]
+ ldr r2, [sp, #0x7c]
+ str r2, [sp, #0x28]
+ ldr r2, [sp, #0x80]
+ str r2, [sp, #0x2c]
+ ldr r2, [sp, #0x84]
+ str r2, [sp, #0x30]
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, r12, r0
+ str r0, [sp, #0x64]
+ ldr r1, [r5, #0x4]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, lr, r0
+ str r0, [sp, #0x68]
+ ldr r1, [r5, #0x8]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x18]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x6c]
+ ldr r1, [r5, #0xc]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x1c]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x70]
+ ldr r1, [r5, #0x10]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x20]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x74]
+ ldr r1, [r5, #0x14]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x24]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x78]
+ ldr r1, [r5, #0x18]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x28]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x7c]
+ ldr r1, [r5, #0x1c]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x2c]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x80]
+ ldr r1, [r5, #0x20]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r1, r3, lsr #0xc
+ ldr r0, [sp, #0x30]
+ orr r1, r1, r2, lsl #0x14
+ adds r0, r0, r1
+ str r0, [sp, #0x84]
+_020B9500:
+ cmp r11, #0x0
+ bne _020B9538
+_020B9508:
+ mov r0, r6
+ bl G3X_GetClipMtx
+ cmp r0, #0x0
+ bne _020B9508
+ ldr r1, [sp, #0x14]
+ ldr r0, _020B98AC ; =0x04000440
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x4]
+ mov r1, #0x54
+ mla r0, r4, r1, r0
+ add r0, r0, #0x30
+ bl G3_MultMtx33
+_020B9538:
+ ldrb r1, [r8, #0x2]
+ ldr r2, [sp, #0x34]
+ ldr r0, [r6, #0x0]
+ mov r10, r1, lsl #0x4
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x34]
+ mov r9, r10, asr #0x1f
+ ldr r2, [sp, #0x38]
+ ldr r0, [r6, #0x4]
+ ldr r3, [sp, #0x3c]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x38]
+ ldr r0, [r6, #0x8]
+ ldr r2, [sp, #0x40]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x3c]
+ ldr r0, [r6, #0x10]
+ ldr r3, [sp, #0x44]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x40]
+ ldr r0, [r6, #0x14]
+ ldr r2, [sp, #0x48]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x44]
+ ldr r0, [r6, #0x18]
+ ldr r3, [sp, #0x4c]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x48]
+ ldr r0, [r6, #0x20]
+ ldr r2, [sp, #0x50]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x4c]
+ ldr r0, [r6, #0x24]
+ ldr r3, [sp, #0x54]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x50]
+ ldr r0, [r6, #0x28]
+ ldr r2, [sp, #0x58]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x54]
+ ldr r0, [r6, #0x30]
+ ldr r3, [sp, #0x5c]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x58]
+ ldr r0, [r6, #0x34]
+ ldr r2, [sp, #0x60]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r3, r1
+ str r0, [sp, #0x5c]
+ ldr r0, [r6, #0x38]
+ smull r1, r0, r10, r0
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ adds r0, r2, r1
+ str r0, [sp, #0x60]
+ cmp r11, #0x0
+ ldr r1, _020B98C0 ; =NNS_G3dRSOnGlb + 0x1440
+ ldr r0, [sp, #0xc]
+ add r5, r1, r0
+ add r8, r8, #0x3
+ bne _020B96BC
+_020B96AC:
+ mov r0, r5
+ bl G3X_GetVectorMtx
+ cmp r0, #0x0
+ bne _020B96AC
+_020B96BC:
+ ldr r0, [sp, #0x8]
+ add r7, r7, #0x1
+ cmp r7, r0
+ blo _020B92E4
+_020B96CC:
+ ldr r1, [r5, #0x0]
+ ldr r4, [sp, #0x64]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, r4, r0
+ str r0, [sp, #0x64]
+ ldr r1, [r5, #0x4]
+ ldr r4, [sp, #0x68]
+ mov r0, r1, asr #0x1f
+ umull r3, r2, r10, r1
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ mov r0, r3, lsr #0xc
+ orr r0, r0, r2, lsl #0x14
+ adds r0, r4, r0
+ str r0, [sp, #0x68]
+ ldr r1, [r5, #0x8]
+ ldr r4, [sp, #0x6c]
+ umull r0, r2, r10, r1
+ mov r3, r0, lsr #0xc
+ mov r0, r1, asr #0x1f
+ mla r2, r10, r0, r2
+ mla r2, r9, r1, r2
+ orr r3, r3, r2, lsl #0x14
+ adds r0, r4, r3
+ str r0, [sp, #0x6c]
+ ldr r7, [r5, #0xc]
+ ldr r12, [sp, #0x70]
+ mov r6, r7, asr #0x1f
+ umull r11, r8, r10, r7
+ mla r8, r10, r6, r8
+ mla r8, r9, r7, r8
+ mov r6, r11, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ adds r6, r12, r6
+ str r6, [sp, #0x70]
+ ldr r7, [r5, #0x10]
+ ldr r4, [sp, #0x74]
+ mov r6, r7, asr #0x1f
+ umull r11, r8, r10, r7
+ mla r8, r10, r6, r8
+ mla r8, r9, r7, r8
+ mov r6, r11, lsr #0xc
+ orr r6, r6, r8, lsl #0x14
+ adds r4, r4, r6
+ str r4, [sp, #0x74]
+ ldr r6, [r5, #0x14]
+ ldr r3, [sp, #0x78]
+ mov r4, r6, asr #0x1f
+ umull r8, r7, r10, r6
+ mla r7, r10, r4, r7
+ mla r7, r9, r6, r7
+ mov r4, r8, lsr #0xc
+ orr r4, r4, r7, lsl #0x14
+ adds r3, r3, r4
+ str r3, [sp, #0x78]
+ ldr r4, [r5, #0x18]
+ ldr r2, [sp, #0x7c]
+ mov r3, r4, asr #0x1f
+ umull r7, r6, r10, r4
+ mla r6, r10, r3, r6
+ mla r6, r9, r4, r6
+ mov r3, r7, lsr #0xc
+ orr r3, r3, r6, lsl #0x14
+ adds r2, r2, r3
+ str r2, [sp, #0x7c]
+ ldr r3, [r5, #0x1c]
+ ldr r1, [sp, #0x80]
+ mov r2, r3, asr #0x1f
+ umull r6, r4, r10, r3
+ mla r4, r10, r2, r4
+ mla r4, r9, r3, r4
+ mov r2, r6, lsr #0xc
+ orr r2, r2, r4, lsl #0x14
+ adds r1, r1, r2
+ str r1, [sp, #0x80]
+ ldr r2, [r5, #0x20]
+ ldr lr, [sp, #0x84]
+ mov r1, r2, asr #0x1f
+ umull r4, r3, r10, r2
+ mla r3, r10, r1, r3
+ mla r3, r9, r2, r3
+ mov r1, r4, lsr #0xc
+ orr r1, r1, r3, lsl #0x14
+ adds r1, lr, r1
+ add r0, sp, #0x64
+ str r1, [sp, #0x84]
+ bl G3_LoadMtx43
+ ldr r1, _020B98AC ; =0x04000440
+ mov r2, #0x1
+ add r0, sp, #0x34
+ str r2, [r1, #0x0]
+ bl G3_LoadMtx43
+ ldr r3, _020B98AC ; =0x04000440
+ mov r0, #0x0
+ str r0, [r3, #0x0]
+ ldr r1, _020B98BC ; =0x04000450
+ mov r2, #0x1
+ mov r0, #0x2
+ str r2, [r1, #0x0]
+ str r0, [r3, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r1, [r0, #0x0]
+ ldr r0, _020B98B0 ; =0x0400044C
+ ldrb r2, [r1, #0x1]
+ mov r1, #0x3
+ str r2, [r0, #0x0]
+ ldr r0, [sp, #0x0]
+ ldr r2, [r0, #0x0]
+ ldrb r0, [r2, #0x2]
+ add r0, r0, #0x1
+ mla r1, r0, r1, r2
+ ldr r0, [sp, #0x0]
+ str r1, [r0, #0x0]
+ add sp, sp, #0x8c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B98AC: .word 0x04000440
+_020B98B0: .word 0x0400044C
+_020B98B4: .word 0x04000454
+_020B98B8: .word NNS_G3dRSOnGlb + 0x1400
+_020B98BC: .word 0x04000450
+_020B98C0: .word NNS_G3dRSOnGlb + 0x1440
+ arm_func_end NNSi_G3dFuncSbc_NODEMIX
+
+ arm_func_start NNSi_G3dFuncSbc_BBY
+NNSi_G3dFuncSbc_BBY: ; 0x020B98C4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xcc
+ mov r10, r0
+ ldr r2, [r10, #0x8]
+ mov r9, r1
+ ands r0, r2, #0x200
+ mov r7, #0x2
+ ldr r6, _020B9C28 ; =bbcmd1$9234 + 0x30
+ ldr fp, _020B9C2C ; =bbcmd1$9234 + 0x3C
+ ldr r5, _020B9C30 ; =bbcmd1$9234 + 0xC
+ beq _020B992C
+ cmp r9, #0x40
+ beq _020B9900
+ cmp r9, #0x60
+ bne _020B9904
+_020B9900:
+ add r7, r7, #0x1
+_020B9904:
+ cmp r9, #0x20
+ beq _020B9914
+ cmp r9, #0x60
+ bne _020B9918
+_020B9914:
+ add r7, r7, #0x1
+_020B9918:
+ ldr r0, [r10, #0x0]
+ add sp, sp, #0xcc
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ ldmia sp!, {r4-r11,pc}
+_020B992C:
+ cmp r9, #0x40
+ beq _020B993C
+ cmp r9, #0x60
+ bne _020B9974
+_020B993C:
+ add r7, r7, #0x1
+ ands r0, r2, #0x100
+ bne _020B9974
+ cmp r9, #0x40
+ ldreq r0, [r10, #0x0]
+ add r1, sp, #0x0
+ ldreqb r0, [r0, #0x2]
+ mov r2, #0x1
+ streq r0, [sp, #0x0]
+ ldrne r0, [r10, #0x0]
+ ldrneb r0, [r0, #0x3]
+ strne r0, [sp, #0x0]
+ mov r0, #0x14
+ bl NNS_G3dGeBufferOP_N
+_020B9974:
+ ldr r0, [r10, #0x2c]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x94]
+ moveq r8, #0x0
+ cmp r8, #0x1
+ bne _020B99C0
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x2c]
+ blx r1
+ ldr r0, [r10, #0x2c]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x94]
+ ldr r0, [r10, #0x8]
+ moveq r8, #0x0
+ and r1, r0, #0x40
+ b _020B99C4
+_020B99C0:
+ mov r1, #0x0
+_020B99C4:
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9BA4
+ cmp r1, #0x0
+ bne _020B9BA4
+ bl NNS_G3dGeFlushBuffer
+ ldr r2, _020B9C34 ; =0x00151110
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r0, #0x0
+ str r2, [r1, #0x0]
+ str r0, [r1, #0x0]
+ str r0, [r1, #0x0]
+ add r4, sp, #0x8
+_020B99F8:
+ mov r0, r4
+ bl G3X_GetClipMtx
+ cmp r0, #0x0
+ bne _020B99F8
+ ldr r0, _020B9C3C ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9A38
+ bl NNS_G3dGlbGetWV
+ add r1, sp, #0x48
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x48
+ mov r2, r0
+ bl MTX_Concat44
+ b _020B9A5C
+_020B9A38:
+ ands r0, r1, #0x2
+ beq _020B9A5C
+ ldr r0, _020B9C40 ; =NNS_G3dGlb + 0x4C
+ add r1, sp, #0x88
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x88
+ mov r2, r0
+ bl MTX_Concat44
+_020B9A5C:
+ ldr r1, [sp, #0x38]
+ add r0, sp, #0x8
+ str r1, [r6, #0x0]
+ ldr r1, [sp, #0x3c]
+ str r1, [r6, #0x4]
+ ldr r1, [sp, #0x40]
+ str r1, [r6, #0x8]
+ bl VEC_Mag
+ str r0, [r11, #0x0]
+ add r0, sp, #0x18
+ bl VEC_Mag
+ str r0, [r11, #0x4]
+ add r0, sp, #0x28
+ bl VEC_Mag
+ str r0, [r11, #0x8]
+ ldr r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _020B9AB0
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ beq _020B9AD4
+_020B9AB0:
+ add r0, sp, #0x18
+ add r1, r5, #0xc
+ bl VEC_Normalize
+ ldr r0, [r5, #0x14]
+ rsb r0, r0, #0x0
+ str r0, [r5, #0x1c]
+ ldr r0, [r5, #0x10]
+ str r0, [r5, #0x20]
+ b _020B9AF4
+_020B9AD4:
+ add r0, sp, #0x28
+ add r1, r5, #0x18
+ bl VEC_Normalize
+ ldr r0, [r5, #0x1c]
+ rsb r0, r0, #0x0
+ str r0, [r5, #0x14]
+ ldr r0, [r5, #0x20]
+ str r0, [r5, #0x10]
+_020B9AF4:
+ ldr r0, _020B9C3C ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9B48
+ ldr r3, _020B9C44 ; =0x00171012
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C48 ; =bbcmd1$9234 + 0x4
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl NNS_G3dGlbGetInvWV
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9C4C ; =0x00001B19
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C30 ; =bbcmd1$9234 + 0xC
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9BA4
+_020B9B48:
+ ands r0, r1, #0x2
+ beq _020B9B94
+ ldr r3, _020B9C44 ; =0x00171012
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C48 ; =bbcmd1$9234 + 0x4
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl NNS_G3dGlbGetInvV
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9C4C ; =0x00001B19
+ ldr r1, _020B9C38 ; =0x04000400
+ ldr r0, _020B9C30 ; =bbcmd1$9234 + 0xC
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9BA4
+_020B9B94:
+ ldr r0, _020B9C50 ; =bbcmd1$9234
+ ldr r1, _020B9C38 ; =0x04000400
+ mov r2, #0x48
+ bl MIi_CpuSend32
+_020B9BA4:
+ cmp r8, #0x3
+ movne r0, #0x0
+ bne _020B9BD0
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x2c]
+ blx r1
+ ldr r0, [r10, #0x8]
+ and r0, r0, #0x40
+_020B9BD0:
+ cmp r9, #0x20
+ beq _020B9BE0
+ cmp r9, #0x60
+ bne _020B9C14
+_020B9BE0:
+ cmp r0, #0x0
+ add r7, r7, #0x1
+ bne _020B9C14
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9C14
+ ldr r0, [r10, #0x0]
+ add r1, sp, #0x4
+ ldrb r3, [r0, #0x2]
+ mov r0, #0x13
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl NNS_G3dGeBufferOP_N
+_020B9C14:
+ ldr r0, [r10, #0x0]
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ add sp, sp, #0xcc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020B9C28: .word bbcmd1$9234 + 0x30
+_020B9C2C: .word bbcmd1$9234 + 0x3C
+_020B9C30: .word bbcmd1$9234 + 0xC
+_020B9C34: .word 0x00151110
+_020B9C38: .word 0x04000400
+_020B9C3C: .word NNS_G3dGlb
+_020B9C40: .word NNS_G3dGlb + 0x4C
+_020B9C44: .word 0x00171012
+_020B9C48: .word bbcmd1$9234 + 0x4
+_020B9C4C: .word 0x00001B19
+_020B9C50: .word bbcmd1$9234
+ arm_func_end NNSi_G3dFuncSbc_BBY
+
+ arm_func_start NNSi_G3dFuncSbc_BB
+NNSi_G3dFuncSbc_BB: ; 0x020B9C54
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0xc8
+ mov r9, r0
+ ldr r2, [r9, #0x8]
+ mov r8, r1
+ ands r0, r2, #0x200
+ mov r6, #0x2
+ ldr r5, _020B9F58 ; =bbcmd1$9173 + 0x30
+ ldr r4, _020B9F5C ; =bbcmd1$9173 + 0x3C
+ beq _020B9CB8
+ cmp r8, #0x40
+ beq _020B9C8C
+ cmp r8, #0x60
+ bne _020B9C90
+_020B9C8C:
+ add r6, r6, #0x1
+_020B9C90:
+ cmp r8, #0x20
+ beq _020B9CA0
+ cmp r8, #0x60
+ bne _020B9CA4
+_020B9CA0:
+ add r6, r6, #0x1
+_020B9CA4:
+ ldr r0, [r9, #0x0]
+ add sp, sp, #0xc8
+ add r0, r0, r6
+ str r0, [r9, #0x0]
+ ldmia sp!, {r4-r10,pc}
+_020B9CB8:
+ cmp r8, #0x40
+ beq _020B9CC8
+ cmp r8, #0x60
+ bne _020B9D00
+_020B9CC8:
+ add r6, r6, #0x1
+ ands r0, r2, #0x100
+ bne _020B9D00
+ cmp r8, #0x40
+ ldreq r0, [r9, #0x0]
+ add r1, sp, #0x0
+ ldreqb r0, [r0, #0x2]
+ mov r2, #0x1
+ streq r0, [sp, #0x0]
+ ldrne r0, [r9, #0x0]
+ ldrneb r0, [r0, #0x3]
+ strne r0, [sp, #0x0]
+ mov r0, #0x14
+ bl NNS_G3dGeBufferOP_N
+_020B9D00:
+ ldr r0, [r9, #0x28]
+ cmp r0, #0x0
+ ldrneb r7, [r9, #0x93]
+ moveq r7, #0x0
+ cmp r7, #0x1
+ bne _020B9D4C
+ ldr r1, [r9, #0x8]
+ mov r0, r9
+ bic r1, r1, #0x40
+ str r1, [r9, #0x8]
+ ldr r1, [r9, #0x28]
+ blx r1
+ ldr r0, [r9, #0x28]
+ cmp r0, #0x0
+ ldrneb r7, [r9, #0x93]
+ ldr r0, [r9, #0x8]
+ moveq r7, #0x0
+ and r1, r0, #0x40
+ b _020B9D50
+_020B9D4C:
+ mov r1, #0x0
+_020B9D50:
+ ldr r0, [r9, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9ED4
+ cmp r1, #0x0
+ bne _020B9ED4
+ bl NNS_G3dGeFlushBuffer
+ ldr r2, _020B9F60 ; =0x00151110
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r0, #0x0
+ str r2, [r1, #0x0]
+ str r0, [r1, #0x0]
+ str r0, [r1, #0x0]
+ add r10, sp, #0x8
+_020B9D84:
+ mov r0, r10
+ bl G3X_GetClipMtx
+ cmp r0, #0x0
+ bne _020B9D84
+ ldr r0, _020B9F68 ; =NNS_G3dGlb
+ ldr r1, [r0, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9DC4
+ bl NNS_G3dGlbGetWV
+ add r1, sp, #0x48
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x48
+ mov r2, r0
+ bl MTX_Concat44
+ b _020B9DE8
+_020B9DC4:
+ ands r0, r1, #0x2
+ beq _020B9DE8
+ ldr r0, _020B9F6C ; =NNS_G3dGlb + 0x4C
+ add r1, sp, #0x88
+ bl MTX_Copy43To44_
+ add r0, sp, #0x8
+ add r1, sp, #0x88
+ mov r2, r0
+ bl MTX_Concat44
+_020B9DE8:
+ ldr r1, [sp, #0x38]
+ add r0, sp, #0x8
+ str r1, [r5, #0x0]
+ ldr r1, [sp, #0x3c]
+ str r1, [r5, #0x4]
+ ldr r1, [sp, #0x40]
+ str r1, [r5, #0x8]
+ bl VEC_Mag
+ str r0, [r4, #0x0]
+ add r0, sp, #0x18
+ bl VEC_Mag
+ str r0, [r4, #0x4]
+ add r0, sp, #0x28
+ bl VEC_Mag
+ ldr r1, _020B9F68 ; =NNS_G3dGlb
+ str r0, [r4, #0x8]
+ ldr r1, [r1, #0xfc]
+ ands r0, r1, #0x1
+ beq _020B9E78
+ ldr r3, _020B9F70 ; =0x00171012
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F74 ; =bbcmd1$9173 + 0x4
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl NNS_G3dGlbGetInvWV
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9F78 ; =0x00001B19
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F7C ; =bbcmd1$9173 + 0xC
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9ED4
+_020B9E78:
+ ands r0, r1, #0x2
+ beq _020B9EC4
+ ldr r3, _020B9F70 ; =0x00171012
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F74 ; =bbcmd1$9173 + 0x4
+ mov r2, #0x8
+ str r3, [r1, #0x0]
+ bl MIi_CpuSend32
+ bl NNS_G3dGlbGetInvV
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r2, #0x30
+ bl MIi_CpuSend32
+ ldr r2, _020B9F78 ; =0x00001B19
+ ldr r1, _020B9F64 ; =0x04000400
+ ldr r0, _020B9F7C ; =bbcmd1$9173 + 0xC
+ str r2, [r1, #0x0]
+ mov r2, #0x3c
+ bl MIi_CpuSend32
+ b _020B9ED4
+_020B9EC4:
+ ldr r0, _020B9F80 ; =bbcmd1$9173
+ ldr r1, _020B9F64 ; =0x04000400
+ mov r2, #0x48
+ bl MIi_CpuSend32
+_020B9ED4:
+ cmp r7, #0x3
+ movne r0, #0x0
+ bne _020B9F00
+ ldr r1, [r9, #0x8]
+ mov r0, r9
+ bic r1, r1, #0x40
+ str r1, [r9, #0x8]
+ ldr r1, [r9, #0x28]
+ blx r1
+ ldr r0, [r9, #0x8]
+ and r0, r0, #0x40
+_020B9F00:
+ cmp r8, #0x20
+ beq _020B9F10
+ cmp r8, #0x60
+ bne _020B9F44
+_020B9F10:
+ cmp r0, #0x0
+ add r6, r6, #0x1
+ bne _020B9F44
+ ldr r0, [r9, #0x8]
+ ands r0, r0, #0x100
+ bne _020B9F44
+ ldr r0, [r9, #0x0]
+ add r1, sp, #0x4
+ ldrb r3, [r0, #0x2]
+ mov r0, #0x13
+ mov r2, #0x1
+ str r3, [sp, #0x4]
+ bl NNS_G3dGeBufferOP_N
+_020B9F44:
+ ldr r0, [r9, #0x0]
+ add r0, r0, r6
+ str r0, [r9, #0x0]
+ add sp, sp, #0xc8
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020B9F58: .word bbcmd1$9173 + 0x30
+_020B9F5C: .word bbcmd1$9173 + 0x3C
+_020B9F60: .word 0x00151110
+_020B9F64: .word 0x04000400
+_020B9F68: .word NNS_G3dGlb
+_020B9F6C: .word NNS_G3dGlb + 0x4C
+_020B9F70: .word 0x00171012
+_020B9F74: .word bbcmd1$9173 + 0x4
+_020B9F78: .word 0x00001B19
+_020B9F7C: .word bbcmd1$9173 + 0xC
+_020B9F80: .word bbcmd1$9173
+ arm_func_end NNSi_G3dFuncSbc_BB
+
+ arm_func_start NNSi_G3dFuncSbc_NODEDESC
+NNSi_G3dFuncSbc_NODEDESC: ; 0x020B9F84
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x14
+ mov r10, r0
+ ldr r0, [r10, #0x0]
+ mov r9, r1
+ ldrb r4, [r0, #0x1]
+ mov r7, #0x4
+ strb r4, [r10, #0xae]
+ ldr r0, [r10, #0x8]
+ orr r0, r0, #0x10
+ str r0, [r10, #0x8]
+ ldr r1, [r10, #0x8]
+ ands r0, r1, #0x400
+ beq _020BA01C
+ cmp r9, #0x40
+ beq _020B9FCC
+ cmp r9, #0x60
+ bne _020B9FD0
+_020B9FCC:
+ add r7, r7, #0x1
+_020B9FD0:
+ cmp r9, #0x20
+ beq _020B9FE0
+ cmp r9, #0x60
+ bne _020BA008
+_020B9FE0:
+ add r7, r7, #0x1
+ ands r0, r1, #0x100
+ bne _020BA008
+ ldr r0, [r10, #0x0]
+ add r1, sp, #0x8
+ ldrb r3, [r0, #0x4]
+ mov r0, #0x14
+ mov r2, #0x1
+ str r3, [sp, #0x8]
+ bl NNS_G3dGeBufferOP_N
+_020BA008:
+ ldr r0, [r10, #0x0]
+ add sp, sp, #0x14
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ ldmia sp!, {r4-r11,pc}
+_020BA01C:
+ cmp r9, #0x40
+ beq _020BA02C
+ cmp r9, #0x60
+ bne _020BA068
+_020BA02C:
+ cmp r9, #0x40
+ ldreq r0, [r10, #0x0]
+ add r7, r7, #0x1
+ ldreqb r0, [r0, #0x4]
+ streq r0, [sp, #0xc]
+ ldrne r0, [r10, #0x0]
+ ldrneb r0, [r0, #0x5]
+ strne r0, [sp, #0xc]
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA068
+ add r1, sp, #0xc
+ mov r0, #0x14
+ mov r2, #0x1
+ bl NNS_G3dGeBufferOP_N
+_020BA068:
+ add r0, r10, #0x12c
+ str r0, [r10, #0xb4]
+ ldr r0, [r10, #0x24]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x92]
+ moveq r8, #0x0
+ cmp r8, #0x1
+ bne _020BA0BC
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x24]
+ blx r1
+ ldr r0, [r10, #0x24]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x92]
+ ldr r0, [r10, #0x8]
+ moveq r8, #0x0
+ and r0, r0, #0x40
+ b _020BA0C0
+_020BA0BC:
+ mov r0, #0x0
+_020BA0C0:
+ cmp r0, #0x0
+ bne _020BA2CC
+ ldr r0, [r10, #0x4]
+ ldr r1, [r0, #0x34]
+ cmp r1, #0x0
+ beq _020BA0F4
+ mov r0, #0x58
+ mla r6, r4, r0, r1
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x80
+ moveq r0, #0x1
+ movne r0, #0x0
+ b _020BA0FC
+_020BA0F4:
+ add r6, r10, #0x12c
+ mov r0, #0x0
+_020BA0FC:
+ cmp r0, #0x0
+ bne _020BA2C8
+ mov r0, #0x0
+ str r0, [r6, #0x0]
+ ldr r0, [r10, #0x4]
+ ldr r1, [r0, #0x10]
+ cmp r1, #0x0
+ beq _020BA134
+ ldr r3, [r0, #0x14]
+ mov r0, r6
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ bne _020BA2C8
+_020BA134:
+ ldr r2, [r10, #0xd4]
+ ldrh r0, [r2, #0x6]
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r4, r0
+ ldr r1, [r0, #0x4]
+ ldrh r0, [r2, r1]
+ add r4, r2, r1
+ add r5, r4, #0x4
+ ands r0, r0, #0x1
+ ldrne r0, [r6, #0x0]
+ orrne r0, r0, #0x4
+ strne r0, [r6, #0x0]
+ bne _020BA188
+ ldr r0, [r5, #0x0]
+ str r0, [r6, #0x4c]
+ ldr r0, [r5, #0x4]
+ str r0, [r6, #0x50]
+ ldr r0, [r5, #0x8]
+ add r5, r5, #0xc
+ str r0, [r6, #0x54]
+_020BA188:
+ ldrh r1, [r4, #0x0]
+ ands r0, r1, #0x2
+ ldrne r0, [r6, #0x0]
+ orrne r0, r0, #0x2
+ strne r0, [r6, #0x0]
+ bne _020BA2B0
+ ands r0, r1, #0x8
+ beq _020BA264
+ and r1, r1, #0xf0
+ mov r11, r1, asr #0x4
+ ldrsh r1, [r5, #0x0]
+ add r0, r6, #0x28
+ str r1, [sp, #0x0]
+ ldrsh r1, [r5, #0x2]
+ str r1, [sp, #0x4]
+ bl MI_Zero36B
+ ldrh r0, [r4, #0x0]
+ add r1, r6, r11, lsl #0x2
+ add r5, r5, #0x4
+ ands r0, r0, #0x100
+ movne r0, #0x1000
+ rsbne r2, r0, #0x0
+ moveq r2, #0x1000
+ str r2, [r1, #0x28]
+ ldr r0, _020BA3B4 ; =pivotUtil_$9100
+ ldr r1, _020BA3B8 ; =pivotUtil_$9100 + 1
+ ldrb r0, [r0, r11, lsl #0x2]
+ add r2, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x0]
+ str r0, [r2, #0x28]
+ ldrb r0, [r1, r11, lsl #0x2]
+ add r1, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x4]
+ str r0, [r1, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x200
+ ldrne r0, [sp, #0x4]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x4]
+ ldr r0, _020BA3BC ; =pivotUtil_$9100 + 2
+ ldrb r0, [r0, r11, lsl #0x2]
+ add r1, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x4]
+ str r0, [r1, #0x28]
+ ldrh r0, [r4, #0x0]
+ ands r0, r0, #0x400
+ ldrne r0, [sp, #0x0]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x0]
+ ldr r0, _020BA3C0 ; =pivotUtil_$9100 + 3
+ ldrb r0, [r0, r11, lsl #0x2]
+ add r1, r6, r0, lsl #0x2
+ ldr r0, [sp, #0x0]
+ str r0, [r1, #0x28]
+ b _020BA2B0
+_020BA264:
+ ldrsh r0, [r4, #0x2]
+ str r0, [r6, #0x28]
+ ldrsh r0, [r5, #0x0]
+ str r0, [r6, #0x2c]
+ ldrsh r0, [r5, #0x2]
+ str r0, [r6, #0x30]
+ ldrsh r0, [r5, #0x4]
+ str r0, [r6, #0x34]
+ ldrsh r0, [r5, #0x6]
+ str r0, [r6, #0x38]
+ ldrsh r0, [r5, #0x8]
+ str r0, [r6, #0x3c]
+ ldrsh r0, [r5, #0xa]
+ str r0, [r6, #0x40]
+ ldrsh r0, [r5, #0xc]
+ str r0, [r6, #0x44]
+ ldrsh r0, [r5, #0xe]
+ add r5, r5, #0x10
+ str r0, [r6, #0x48]
+_020BA2B0:
+ ldrh r3, [r4, #0x0]
+ ldr r2, [r10, #0x0]
+ ldr r4, [r10, #0xe8]
+ mov r0, r6
+ mov r1, r5
+ blx r4
+_020BA2C8:
+ str r6, [r10, #0xb4]
+_020BA2CC:
+ cmp r8, #0x2
+ bne _020BA308
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x24]
+ blx r1
+ ldr r0, [r10, #0x24]
+ cmp r0, #0x0
+ ldrneb r8, [r10, #0x92]
+ ldr r0, [r10, #0x8]
+ moveq r8, #0x0
+ and r0, r0, #0x40
+ b _020BA30C
+_020BA308:
+ mov r0, #0x0
+_020BA30C:
+ cmp r0, #0x0
+ bne _020BA32C
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA32C
+ ldr r0, [r10, #0xb4]
+ ldr r1, [r10, #0xec]
+ blx r1
+_020BA32C:
+ mov r0, #0x0
+ str r0, [r10, #0xb4]
+ cmp r8, #0x3
+ bne _020BA35C
+ ldr r1, [r10, #0x8]
+ mov r0, r10
+ bic r1, r1, #0x40
+ str r1, [r10, #0x8]
+ ldr r1, [r10, #0x24]
+ blx r1
+ ldr r0, [r10, #0x8]
+ and r0, r0, #0x40
+_020BA35C:
+ cmp r9, #0x20
+ beq _020BA36C
+ cmp r9, #0x60
+ bne _020BA3A0
+_020BA36C:
+ cmp r0, #0x0
+ add r7, r7, #0x1
+ bne _020BA3A0
+ ldr r0, [r10, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA3A0
+ ldr r0, [r10, #0x0]
+ add r1, sp, #0x10
+ ldrb r3, [r0, #0x4]
+ mov r0, #0x13
+ mov r2, #0x1
+ str r3, [sp, #0x10]
+ bl NNS_G3dGeBufferOP_N
+_020BA3A0:
+ ldr r0, [r10, #0x0]
+ add r0, r0, r7
+ str r0, [r10, #0x0]
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020BA3B4: .word pivotUtil_$9100
+_020BA3B8: .word pivotUtil_$9100 + 1
+_020BA3BC: .word pivotUtil_$9100 + 2
+_020BA3C0: .word pivotUtil_$9100 + 3
+ arm_func_end NNSi_G3dFuncSbc_NODEDESC
+
+ arm_func_start NNSi_G3dFuncSbc_SHP
+NNSi_G3dFuncSbc_SHP: ; 0x020BA3C4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ ands r2, r3, #0x200
+ bne _020BA420
+ ands r2, r3, #0x1
+ beq _020BA420
+ ands r2, r3, #0x2
+ bne _020BA420
+ ldr r5, [r4, #0xdc]
+ ldr r3, [r4, #0x0]
+ ldrh r2, [r5, #0x6]
+ ldrb r3, [r3, #0x1]
+ ldr ip, _020BA434 ; =NNS_G3dFuncSbcShpTable
+ ldrh lr, [r5, r2]
+ add r2, r5, r2
+ mla r2, lr, r3, r2
+ ldr r2, [r2, #0x4]
+ ldrh lr, [r5, r2]
+ add r2, r5, r2
+ ldr r12, [r12, lr, lsl #0x2]
+ blx r12
+_020BA420:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x2
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BA434: .word NNS_G3dFuncSbcShpTable
+ arm_func_end NNSi_G3dFuncSbc_SHP
+
+ arm_func_start NNSi_G3dFuncSbc_SHP_InternalDefault
+NNSi_G3dFuncSbc_SHP_InternalDefault: ; 0x020BA438
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x20]
+ mov r5, r2
+ cmp r0, #0x0
+ ldrneb r4, [r6, #0x91]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020BA490
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x20]
+ blx r1
+ ldr r0, [r6, #0x20]
+ cmp r0, #0x0
+ ldrneb r4, [r6, #0x91]
+ ldr r0, [r6, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020BA494
+_020BA490:
+ mov r0, #0x0
+_020BA494:
+ cmp r0, #0x0
+ bne _020BA4B8
+ ldr r0, [r6, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA4B8
+ ldr r0, [r5, #0x8]
+ ldr r1, [r5, #0xc]
+ add r0, r5, r0
+ bl NNS_G3dGeSendDL
+_020BA4B8:
+ cmp r4, #0x2
+ bne _020BA4E8
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x20]
+ blx r1
+ ldr r0, [r6, #0x20]
+ cmp r0, #0x0
+ ldrneb r4, [r6, #0x91]
+ moveq r4, #0x0
+_020BA4E8:
+ cmp r4, #0x3
+ ldmneia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x20]
+ blx r1
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G3dFuncSbc_SHP_InternalDefault
+
+ arm_func_start NNSi_G3dFuncSbc_MAT
+NNSi_G3dFuncSbc_MAT: ; 0x020BA50C
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldr r5, [r4, #0x8]
+ ands r0, r5, #0x200
+ bne _020BA578
+ ldr r2, [r4, #0x0]
+ ands r0, r5, #0x1
+ ldrb r3, [r2, #0x1]
+ bne _020BA544
+ ands r0, r5, #0x8
+ beq _020BA544
+ ldrb r0, [r4, #0xad]
+ cmp r3, r0
+ beq _020BA578
+_020BA544:
+ ldr r6, [r4, #0xd8]
+ ldr ip, _020BA588 ; =NNS_G3dFuncSbcMatTable
+ ldrh r2, [r6, #0xa]
+ add r5, r6, #0x4
+ mov r0, r4
+ ldrh lr, [r5, r2]
+ add r2, r5, r2
+ mla r2, lr, r3, r2
+ ldr r2, [r2, #0x4]
+ ldrh lr, [r6, r2]
+ add r2, r6, r2
+ ldr r12, [r12, lr, lsl #0x2]
+ blx r12
+_020BA578:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x2
+ str r0, [r4, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BA588: .word NNS_G3dFuncSbcMatTable
+ arm_func_end NNSi_G3dFuncSbc_MAT
+
+ arm_func_start NNSi_G3dFuncSbc_MAT_InternalDefault
+NNSi_G3dFuncSbc_MAT_InternalDefault: ; 0x020BA58C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x20
+ mov r8, r0
+ mov r6, r3
+ strb r6, [r8, #0xad]
+ ldr r3, [r8, #0x8]
+ add r0, r8, #0xf4
+ orr r3, r3, #0x8
+ str r3, [r8, #0x8]
+ str r0, [r8, #0xb0]
+ ldr r0, [r8, #0x1c]
+ mov r4, r1
+ cmp r0, #0x0
+ ldrneb r5, [r8, #0x90]
+ mov r7, r2
+ moveq r5, #0x0
+ cmp r5, #0x1
+ bne _020BA608
+ ldr r1, [r8, #0x8]
+ mov r0, r8
+ bic r1, r1, #0x40
+ str r1, [r8, #0x8]
+ ldr r1, [r8, #0x1c]
+ blx r1
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ ldrneb r5, [r8, #0x90]
+ ldr r0, [r8, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BA60C
+_020BA608:
+ mov r0, #0x0
+_020BA60C:
+ cmp r0, #0x0
+ bne _020BA8C0
+ ldr r0, [r8, #0x4]
+ ldr r0, [r0, #0x38]
+ cmp r0, #0x0
+ beq _020BA638
+ ldr r1, [r8, #0x8]
+ ands r1, r1, #0x80
+ moveq r1, #0x38
+ mlaeq r4, r6, r1, r0
+ beq _020BA8BC
+_020BA638:
+ cmp r4, #0x20
+ beq _020BA648
+ cmp r4, #0x40
+ bne _020BA684
+_020BA648:
+ mov r1, r6, lsr #0x5
+ add r1, r8, r1, lsl #0x2
+ and r2, r6, #0x1f
+ mov r3, #0x1
+ mov r2, r3, lsl r2
+ ldr r1, [r1, #0xbc]
+ ands r1, r2, r1
+ beq _020BA684
+ cmp r0, #0x0
+ movne r1, #0x38
+ mlane r4, r6, r1, r0
+ ldreq r1, _020BA9D8 ; =NNS_G3dRSOnGlb
+ moveq r0, #0x38
+ mlaeq r4, r6, r0, r1
+ b _020BA8BC
+_020BA684:
+ cmp r0, #0x0
+ beq _020BA6BC
+ add r4, r8, #0xbc
+ mov r3, r6, lsr #0x5
+ ldr r2, [r4, r3, lsl #0x2]
+ and r0, r6, #0x1f
+ mov r1, #0x1
+ orr r0, r2, r1, lsl r0
+ str r0, [r4, r3, lsl #0x2]
+ ldr r1, [r8, #0x4]
+ mov r0, #0x38
+ ldr r1, [r1, #0x38]
+ mla r4, r6, r0, r1
+ b _020BA6F0
+_020BA6BC:
+ cmp r4, #0x40
+ addne r4, r8, #0xf4
+ bne _020BA6F0
+ add lr, r8, #0xbc
+ mov r12, r6, lsr #0x5
+ ldr r1, _020BA9D8 ; =NNS_G3dRSOnGlb
+ ldr r4, [lr, r12, lsl #0x2]
+ mov r0, #0x38
+ and r2, r6, #0x1f
+ mov r3, #0x1
+ orr r2, r4, r3, lsl r2
+ mla r4, r6, r0, r1
+ str r2, [lr, r12, lsl #0x2]
+_020BA6F0:
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ ldr r3, [r8, #0xd8]
+ ldrh r0, [r3, #0xa]
+ add r2, r3, #0x4
+ ldrh r1, [r2, r0]
+ add r0, r2, r0
+ mla r0, r1, r6, r0
+ ldr r0, [r0, #0x4]
+ ldr r1, _020BA9DC ; =NNS_G3dGlb
+ add r0, r3, r0
+ ldrh r0, [r0, #0x1e]
+ ands r0, r0, #0x20
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x20
+ strne r0, [r4, #0x0]
+ ldrh r2, [r7, #0x1e]
+ ldr r0, _020BA9E0 ; =matColorMask_$8998
+ ldr r12, [r1, #0x94]
+ mov r2, r2, asr #0x6
+ and r2, r2, #0x7
+ ldr lr, [r0, r2, lsl #0x2]
+ ldr r2, [r7, #0x4]
+ mvn r3, lr
+ and r3, r12, r3
+ and r2, r2, lr
+ orr r2, r3, r2
+ str r2, [r4, #0x4]
+ ldrh r12, [r7, #0x1e]
+ ldr r3, [r1, #0x98]
+ ldr r2, [r7, #0x8]
+ mov r12, r12, asr #0x9
+ and r12, r12, #0x7
+ ldr r12, [r0, r12, lsl #0x2]
+ mvn r0, r12
+ and r3, r3, r0
+ and r0, r2, r12
+ orr r0, r3, r0
+ str r0, [r4, #0x8]
+ ldr r3, [r7, #0x10]
+ ldr r0, [r7, #0xc]
+ ldr r2, [r1, #0x9c]
+ mvn r1, r3
+ and r1, r2, r1
+ and r0, r0, r3
+ orr r0, r1, r0
+ str r0, [r4, #0xc]
+ ldr r0, [r7, #0x14]
+ str r0, [r4, #0x10]
+ ldrh r0, [r7, #0x1c]
+ str r0, [r4, #0x14]
+ ldrh r1, [r7, #0x1e]
+ ands r0, r1, #0x1
+ beq _020BA850
+ ands r1, r1, #0x2
+ ldrne r1, [r4, #0x0]
+ add r0, r7, #0x2c
+ orrne r1, r1, #0x1
+ strne r1, [r4, #0x0]
+ bne _020BA7F4
+ ldr r1, [r0, #0x0]
+ str r1, [r4, #0x18]
+ ldr r1, [r0, #0x4]
+ add r0, r0, #0x8
+ str r1, [r4, #0x1c]
+_020BA7F4:
+ ldrh r1, [r7, #0x1e]
+ ands r1, r1, #0x4
+ ldrne r1, [r4, #0x0]
+ orrne r1, r1, #0x2
+ strne r1, [r4, #0x0]
+ bne _020BA820
+ ldrsh r1, [r0, #0x0]
+ strh r1, [r4, #0x20]
+ ldrsh r1, [r0, #0x2]
+ add r0, r0, #0x4
+ strh r1, [r4, #0x22]
+_020BA820:
+ ldrh r1, [r7, #0x1e]
+ ands r1, r1, #0x8
+ ldreq r1, [r0, #0x0]
+ streq r1, [r4, #0x24]
+ ldreq r0, [r0, #0x4]
+ streq r0, [r4, #0x28]
+ ldrne r0, [r4, #0x0]
+ orrne r0, r0, #0x4
+ strne r0, [r4, #0x0]
+ ldr r0, [r4, #0x0]
+ orr r0, r0, #0x8
+ str r0, [r4, #0x0]
+_020BA850:
+ ldr r0, [r8, #0x4]
+ ldr r1, [r0, #0x8]
+ cmp r1, #0x0
+ beq _020BA890
+ mov r2, r6, lsr #0x5
+ add r2, r0, r2, lsl #0x2
+ and r3, r6, #0x1f
+ mov r12, #0x1
+ mov r3, r12, lsl r3
+ ldr r2, [r2, #0x3c]
+ ands r2, r3, r2
+ beq _020BA890
+ ldr r3, [r0, #0xc]
+ mov r0, r4
+ mov r2, r6
+ blx r3
+_020BA890:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x18
+ beq _020BA8BC
+ ldrh r0, [r7, #0x20]
+ strh r0, [r4, #0x2c]
+ ldrh r0, [r7, #0x22]
+ strh r0, [r4, #0x2e]
+ ldr r0, [r7, #0x24]
+ str r0, [r4, #0x30]
+ ldr r0, [r7, #0x28]
+ str r0, [r4, #0x34]
+_020BA8BC:
+ str r4, [r8, #0xb0]
+_020BA8C0:
+ cmp r5, #0x2
+ bne _020BA8FC
+ ldr r1, [r8, #0x8]
+ mov r0, r8
+ bic r1, r1, #0x40
+ str r1, [r8, #0x8]
+ ldr r1, [r8, #0x1c]
+ blx r1
+ ldr r0, [r8, #0x1c]
+ cmp r0, #0x0
+ ldrneb r5, [r8, #0x90]
+ ldr r0, [r8, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BA900
+_020BA8FC:
+ mov r0, #0x0
+_020BA900:
+ cmp r0, #0x0
+ bne _020BA9AC
+ ldr r4, [r8, #0xb0]
+ ldr r1, [r4, #0xc]
+ ands r0, r1, #0x1f0000
+ beq _020BA9A0
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x20
+ bicne r0, r1, #0x1f0000
+ strne r0, [r4, #0xc]
+ ldr r0, [r8, #0x8]
+ bic r0, r0, #0x2
+ str r0, [r8, #0x8]
+ ldr r0, [r8, #0x8]
+ ands r0, r0, #0x100
+ bne _020BA9AC
+ ldr r0, _020BA9E4 ; =0x00293130
+ ldr r3, _020BA9E8 ; =0x00002B2A
+ str r0, [sp, #0x0]
+ ldr r2, [r4, #0x4]
+ add r1, sp, #0x4
+ str r2, [sp, #0x4]
+ ldr r6, [r4, #0x8]
+ mov r2, #0x6
+ str r6, [sp, #0x8]
+ ldr r6, [r4, #0xc]
+ str r6, [sp, #0xc]
+ str r3, [sp, #0x10]
+ ldr r3, [r4, #0x10]
+ str r3, [sp, #0x14]
+ ldr r3, [r4, #0x14]
+ str r3, [sp, #0x18]
+ bl NNS_G3dGeBufferOP_N
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x18
+ beq _020BA9AC
+ ldr r1, [r8, #0xf0]
+ mov r0, r4
+ blx r1
+ b _020BA9AC
+_020BA9A0:
+ ldr r0, [r8, #0x8]
+ orr r0, r0, #0x2
+ str r0, [r8, #0x8]
+_020BA9AC:
+ cmp r5, #0x3
+ addne sp, sp, #0x20
+ ldmneia sp!, {r4-r8,pc}
+ ldr r1, [r8, #0x8]
+ mov r0, r8
+ bic r1, r1, #0x40
+ str r1, [r8, #0x8]
+ ldr r1, [r8, #0x1c]
+ blx r1
+ add sp, sp, #0x20
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BA9D8: .word NNS_G3dRSOnGlb
+_020BA9DC: .word NNS_G3dGlb
+_020BA9E0: .word matColorMask_$8998
+_020BA9E4: .word 0x00293130
+_020BA9E8: .word 0x00002B2A
+ arm_func_end NNSi_G3dFuncSbc_MAT_InternalDefault
+
+ arm_func_start NNSi_G3dFuncSbc_MTX
+NNSi_G3dFuncSbc_MTX: ; 0x020BA9EC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x8]
+ ands r0, r1, #0x200
+ bne _020BAAAC
+ ands r0, r1, #0x1
+ beq _020BAAAC
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x8f]
+ moveq r4, #0x0
+ cmp r4, #0x1
+ bne _020BAA58
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x18]
+ blx r1
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x0
+ ldrneb r4, [r5, #0x8f]
+ ldr r0, [r5, #0x8]
+ moveq r4, #0x0
+ and r0, r0, #0x40
+ b _020BAA5C
+_020BAA58:
+ mov r0, #0x0
+_020BAA5C:
+ cmp r0, #0x0
+ bne _020BAA8C
+ ldr r0, [r5, #0x0]
+ ldrb r0, [r0, #0x1]
+ str r0, [sp, #0x0]
+ ldr r0, [r5, #0x8]
+ ands r0, r0, #0x100
+ bne _020BAA8C
+ add r1, sp, #0x0
+ mov r0, #0x14
+ mov r2, #0x1
+ bl NNS_G3dGeBufferOP_N
+_020BAA8C:
+ cmp r4, #0x3
+ bne _020BAAAC
+ ldr r1, [r5, #0x8]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r5, #0x8]
+ ldr r1, [r5, #0x18]
+ blx r1
+_020BAAAC:
+ ldr r0, [r5, #0x0]
+ add r0, r0, #0x2
+ str r0, [r5, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end NNSi_G3dFuncSbc_MTX
+
+ arm_func_start NNSi_G3dFuncSbc_NODE
+NNSi_G3dFuncSbc_NODE: ; 0x020BAAC0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r0, [r6, #0x8]
+ ands r0, r0, #0x200
+ bne _020BAC38
+ ldr r1, [r6, #0x0]
+ add r0, r6, #0x184
+ ldrb r1, [r1, #0x1]
+ strb r1, [r6, #0xac]
+ ldr r1, [r6, #0x8]
+ ldrb r4, [r6, #0xac]
+ orr r1, r1, #0x4
+ str r1, [r6, #0x8]
+ str r0, [r6, #0xb8]
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ ldrneb r5, [r6, #0x8e]
+ moveq r5, #0x0
+ cmp r5, #0x1
+ bne _020BAB44
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x14]
+ blx r1
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ ldrneb r5, [r6, #0x8e]
+ ldr r0, [r6, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BAB48
+_020BAB44:
+ mov r0, #0x0
+_020BAB48:
+ cmp r0, #0x0
+ bne _020BABAC
+ ldr r12, [r6, #0x4]
+ ldr r1, [r12, #0x18]
+ cmp r1, #0x0
+ beq _020BAB98
+ mov r0, r4, lsr #0x5
+ add r0, r12, r0, lsl #0x2
+ and r2, r4, #0x1f
+ mov r3, #0x1
+ mov r2, r3, lsl r2
+ ldr r0, [r0, #0x4c]
+ ands r0, r2, r0
+ beq _020BAB98
+ ldr r0, [r6, #0xb8]
+ ldr r3, [r12, #0x1c]
+ mov r2, r4
+ blx r3
+ cmp r0, #0x0
+ bne _020BABAC
+_020BAB98:
+ ldr r1, [r6, #0x0]
+ ldr r0, [r6, #0xb8]
+ ldrb r1, [r1, #0x2]
+ and r1, r1, #0x1
+ str r1, [r0, #0x0]
+_020BABAC:
+ cmp r5, #0x2
+ bne _020BABE8
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x14]
+ blx r1
+ ldr r0, [r6, #0x14]
+ cmp r0, #0x0
+ ldrneb r5, [r6, #0x8e]
+ ldr r0, [r6, #0x8]
+ moveq r5, #0x0
+ and r0, r0, #0x40
+ b _020BABEC
+_020BABE8:
+ mov r0, #0x0
+_020BABEC:
+ cmp r0, #0x0
+ bne _020BAC18
+ ldr r0, [r6, #0xb8]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ ldrne r0, [r6, #0x8]
+ orrne r0, r0, #0x1
+ strne r0, [r6, #0x8]
+ ldreq r0, [r6, #0x8]
+ biceq r0, r0, #0x1
+ streq r0, [r6, #0x8]
+_020BAC18:
+ cmp r5, #0x3
+ bne _020BAC38
+ ldr r1, [r6, #0x8]
+ mov r0, r6
+ bic r1, r1, #0x40
+ str r1, [r6, #0x8]
+ ldr r1, [r6, #0x14]
+ blx r1
+_020BAC38:
+ ldr r0, [r6, #0x0]
+ add r0, r0, #0x3
+ str r0, [r6, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G3dFuncSbc_NODE
+
+ arm_func_start NNSi_G3dFuncSbc_RET
+NNSi_G3dFuncSbc_RET: ; 0x020BAC48
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x0
+ beq _020BAC60
+ blx r1
+_020BAC60:
+ ldr r0, [r4, #0x8]
+ orr r0, r0, #0x20
+ str r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_G3dFuncSbc_RET
+
+ arm_func_start NNSi_G3dFuncSbc_NOP
+NNSi_G3dFuncSbc_NOP: ; 0x020BAC70
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0xc]
+ cmp r1, #0x0
+ beq _020BAC88
+ blx r1
+_020BAC88:
+ ldr r0, [r4, #0x0]
+ add r0, r0, #0x1
+ str r0, [r4, #0x0]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_G3dFuncSbc_NOP
+
+ arm_func_start NNS_G3dDraw
+NNS_G3dDraw: ; 0x020BAC98
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x188
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ and r0, r0, #0x10
+ cmp r0, #0x10
+ bne _020BAD2C
+ add r1, r4, #0x3c
+ mov r0, #0x0
+ mov r2, #0x8
+ bl MIi_CpuClear32
+ add r1, r4, #0x44
+ mov r0, #0x0
+ mov r2, #0x8
+ bl MIi_CpuClear32
+ add r1, r4, #0x4c
+ mov r0, #0x0
+ mov r2, #0x8
+ bl MIi_CpuClear32
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ beq _020BACF8
+ add r0, r4, #0x3c
+ bl updateHintVec_
+_020BACF8:
+ ldr r1, [r4, #0x10]
+ cmp r1, #0x0
+ beq _020BAD0C
+ add r0, r4, #0x44
+ bl updateHintVec_
+_020BAD0C:
+ ldr r1, [r4, #0x18]
+ cmp r1, #0x0
+ beq _020BAD20
+ add r0, r4, #0x4c
+ bl updateHintVec_
+_020BAD20:
+ ldr r0, [r4, #0x0]
+ bic r0, r0, #0x10
+ str r0, [r4, #0x0]
+_020BAD2C:
+ ldr r2, _020BAD70 ; =NNS_G3dRS
+ ldr r0, [r2, #0x0]
+ cmp r0, #0x0
+ beq _020BAD4C
+ mov r1, r4
+ bl G3dDrawInternal_
+ add sp, sp, #0x188
+ ldmia sp!, {r4,pc}
+_020BAD4C:
+ add r0, sp, #0x0
+ mov r1, r4
+ str r0, [r2, #0x0]
+ bl G3dDrawInternal_
+ ldr r0, _020BAD70 ; =NNS_G3dRS
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ add sp, sp, #0x188
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BAD70: .word NNS_G3dRS
+ arm_func_end NNS_G3dDraw
+
+ local_arm_func_start updateHintVec_
+updateHintVec_: ; 0x020BAD74
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ mov r3, #0x1
+ mov r4, #0x0
+_020BAD90:
+ ldrb r2, [r1, #0x19]
+ mov r5, r4
+ cmp r2, #0x0
+ ble _020BADD0
+_020BADA0:
+ add r2, r1, r5, lsl #0x1
+ ldrh r2, [r2, #0x1a]
+ ands r2, r2, #0x100
+ movne lr, r5, asr #0x5
+ andne r2, r5, #0x1f
+ ldrne r12, [r0, lr, lsl #0x2]
+ add r5, r5, #0x1
+ orrne r2, r12, r3, lsl r2
+ strne r2, [r0, lr, lsl #0x2]
+ ldrb r2, [r1, #0x19]
+ cmp r5, r2
+ blt _020BADA0
+_020BADD0:
+ ldr r1, [r1, #0x10]
+ cmp r1, #0x0
+ bne _020BAD90
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end updateHintVec_
+
+ arm_func_start G3dDrawInternal_
+G3dDrawInternal_: ; 0x020BADE4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r1, r5
+ mov r0, #0x0
+ mov r2, #0x188
+ bl MIi_CpuClearFast
+ mov r0, #0x1
+ str r0, [r5, #0xc4]
+ str r0, [r5, #0x8]
+ ldr r0, [r4, #0x30]
+ ldr r2, _020BAF60 ; =NNS_G3dGetJointScale_FuncArray
+ cmp r0, #0x0
+ strne r0, [r5, #0x0]
+ ldreq r1, [r4, #0x4]
+ ldreq r0, [r1, #0x4]
+ addeq r0, r1, r0
+ streq r0, [r5, #0x0]
+ str r4, [r5, #0x4]
+ ldr r0, [r4, #0x4]
+ ldr r1, _020BAF64 ; =NNS_G3dSendJointSRT_FuncArray
+ add r0, r0, #0x40
+ str r0, [r5, #0xd4]
+ ldr r12, [r4, #0x4]
+ ldr r0, _020BAF68 ; =NNS_G3dSendTexSRT_FuncArray
+ ldr r3, [r12, #0x8]
+ add r3, r12, r3
+ str r3, [r5, #0xd8]
+ ldr r12, [r4, #0x4]
+ ldr r3, [r12, #0xc]
+ add r3, r12, r3
+ str r3, [r5, #0xdc]
+ ldr r3, [r4, #0x4]
+ ldrb r3, [r3, #0x15]
+ ldr r2, [r2, r3, lsl #0x2]
+ str r2, [r5, #0xe8]
+ ldr r2, [r4, #0x4]
+ ldrb r2, [r2, #0x15]
+ ldr r1, [r1, r2, lsl #0x2]
+ str r1, [r5, #0xec]
+ ldr r1, [r4, #0x4]
+ ldrb r1, [r1, #0x16]
+ ldr r0, [r0, r1, lsl #0x2]
+ str r0, [r5, #0xf0]
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0x1c]
+ str r0, [r5, #0xe0]
+ ldr r0, [r4, #0x4]
+ ldr r0, [r0, #0x20]
+ str r0, [r5, #0xe4]
+ ldr r1, [r4, #0x20]
+ cmp r1, #0x0
+ beq _020BAEE0
+ ldrb r0, [r4, #0x24]
+ cmp r0, #0x20
+ bhs _020BAEE0
+ add r0, r5, r0, lsl #0x2
+ str r1, [r0, #0xc]
+ ldrb r0, [r4, #0x24]
+ ldrb r1, [r4, #0x25]
+ add r0, r5, r0
+ strb r1, [r0, #0x8c]
+_020BAEE0:
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x1
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x80
+ strne r0, [r5, #0x8]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x2
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x100
+ strne r0, [r5, #0x8]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x4
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x200
+ strne r0, [r5, #0x8]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x8
+ ldrne r0, [r5, #0x8]
+ orrne r0, r0, #0x400
+ strne r0, [r5, #0x8]
+ ldr r1, [r4, #0x28]
+ cmp r1, #0x0
+ beq _020BAF44
+ mov r0, r5
+ blx r1
+_020BAF44:
+ mov r0, r5
+ bl G3dDrawInternal_Loop_
+ ldr r0, [r4, #0x0]
+ bic r0, r0, #0x1
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020BAF60: .word NNS_G3dGetJointScale_FuncArray
+_020BAF64: .word NNS_G3dSendJointSRT_FuncArray
+_020BAF68: .word NNS_G3dSendTexSRT_FuncArray
+ arm_func_end G3dDrawInternal_
+
+ arm_func_start G3dDrawInternal_Loop_
+G3dDrawInternal_Loop_: ; 0x020BAF6C
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r0
+ ldr r6, _020BAFB4 ; =NNS_G3dFuncSbcTable
+ add r4, r5, #0x8
+_020BAF7C:
+ ldr r1, [r4, #0x0]
+ mov r0, r5
+ bic r1, r1, #0x40
+ str r1, [r4, #0x0]
+ ldr r1, [r5, #0x0]
+ ldrb r3, [r1, #0x0]
+ and r1, r3, #0x1f
+ ldr r2, [r6, r1, lsl #0x2]
+ and r1, r3, #0xe0
+ blx r2
+ ldr r0, [r5, #0x8]
+ ands r0, r0, #0x20
+ beq _020BAF7C
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BAFB4: .word NNS_G3dFuncSbcTable
+ arm_func_end G3dDrawInternal_Loop_
diff --git a/arm9/asm/NNS_G3D_si3d.s b/arm9/asm/NNS_G3D_si3d.s
new file mode 100644
index 00000000..66bfe460
--- /dev/null
+++ b/arm9/asm/NNS_G3D_si3d.s
@@ -0,0 +1,359 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_G3dSendTexSRTSi3d
+NNSi_G3dSendTexSRTSi3d: ; 0x020BEF10
+ stmdb sp!, {lr}
+ sub sp, sp, #0x3c
+ ldr r1, [r0, #0x0]
+ mov r3, #0x0
+ ands r1, r1, #0x8
+ ldrne r1, _020BF0CC ; =0x00101710
+ mov r2, #0x3
+ strne r1, [sp, #0x0]
+ ldreq r1, _020BF0D0 ; =0x00101910
+ str r3, [sp, #0x34]
+ streq r1, [sp, #0x0]
+ mov r1, #0x2
+ str r1, [sp, #0x38]
+ str r3, [sp, #0x28]
+ str r3, [sp, #0x24]
+ str r3, [sp, #0x20]
+ str r3, [sp, #0x1c]
+ str r3, [sp, #0x14]
+ str r3, [sp, #0x10]
+ str r3, [sp, #0xc]
+ str r2, [sp, #0x4]
+ ldr r2, [r0, #0x0]
+ ands r1, r2, #0x4
+ beq _020BEFA0
+ str r3, [sp, #0x2c]
+ str r3, [sp, #0x30]
+ ldr r1, [r0, #0x0]
+ ands r1, r1, #0x1
+ movne r1, #0x1000
+ strne r1, [sp, #0x8]
+ strne r1, [sp, #0x18]
+ ldreq r1, [r0, #0x18]
+ streq r1, [sp, #0x8]
+ ldreq r1, [r0, #0x1c]
+ streq r1, [sp, #0x18]
+ b _020BF040
+_020BEFA0:
+ ands r1, r2, #0x1
+ beq _020BEFE8
+ ldr r2, [r0, #0x24]
+ ldrh r1, [r0, #0x2c]
+ mov r2, r2, lsl #0x4
+ rsb r2, r2, #0x0
+ mul r1, r2, r1
+ str r1, [sp, #0x2c]
+ ldr r2, [r0, #0x28]
+ ldrh r1, [r0, #0x2e]
+ mov r2, r2, lsl #0x4
+ rsb r2, r2, #0x0
+ mul r3, r2, r1
+ mov r1, #0x1000
+ str r3, [sp, #0x30]
+ str r1, [sp, #0x8]
+ str r1, [sp, #0x18]
+ b _020BF040
+_020BEFE8:
+ ldr r2, [r0, #0x18]
+ ldr r1, [r0, #0x24]
+ ldrh r12, [r0, #0x2c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0x8
+ orr r2, r2, r1, lsl #0x18
+ rsb r1, r2, #0x0
+ mul r1, r12, r1
+ str r1, [sp, #0x2c]
+ ldr r2, [r0, #0x1c]
+ ldr r1, [r0, #0x28]
+ ldrh r12, [r0, #0x2e]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0x8
+ orr r2, r2, r1, lsl #0x18
+ rsb r1, r2, #0x0
+ mul r1, r12, r1
+ str r1, [sp, #0x30]
+ ldr r1, [r0, #0x18]
+ str r1, [sp, #0x8]
+ ldr r1, [r0, #0x1c]
+ str r1, [sp, #0x18]
+_020BF040:
+ ldr r12, [r0, #0x30]
+ cmp r12, #0x1000
+ beq _020BF078
+ ldr r2, [sp, #0x8]
+ ldr r1, [sp, #0x2c]
+ smull r3, r2, r12, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [sp, #0x8]
+ ldr r2, [r0, #0x30]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x2c]
+_020BF078:
+ ldr r12, [r0, #0x34]
+ cmp r12, #0x1000
+ beq _020BF0B0
+ ldr r2, [sp, #0x18]
+ ldr r1, [sp, #0x30]
+ smull r3, r2, r12, r2
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [sp, #0x18]
+ ldr r0, [r0, #0x34]
+ smull r2, r1, r0, r1
+ mov r0, r2, lsr #0xc
+ orr r0, r0, r1, lsl #0x14
+ str r0, [sp, #0x30]
+_020BF0B0:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0xe
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x3c
+ ldmia sp!, {pc}
+ .balign 4
+_020BF0CC: .word 0x00101710
+_020BF0D0: .word 0x00101910
+ arm_func_end NNSi_G3dSendTexSRTSi3d
+
+ arm_func_start NNSi_G3dGetJointScaleSi3d
+NNSi_G3dGetJointScaleSi3d: ; 0x020BF0D4
+ stmdb sp!, {r4-r8,lr}
+ mov r5, r0
+ ands r0, r3, #0x4
+ ldrb r4, [r2, #0x1]
+ ldrb r0, [r2, #0x2]
+ beq _020BF174
+ ldr r2, [r5, #0x0]
+ ldr r1, _020BF2E0 ; =NNS_G3dRS
+ orr r2, r2, #0x1
+ str r2, [r5, #0x0]
+ ldr r3, [r1, #0x0]
+ mov r1, r0, lsr #0x5
+ add r1, r3, r1, lsl #0x2
+ and r2, r0, #0x1f
+ mov r6, #0x1
+ mov r2, r6, lsl r2
+ ldr r1, [r1, #0xc4]
+ ands r1, r2, r1
+ beq _020BF148
+ add r3, r3, #0xc4
+ mov r2, r4, lsr #0x5
+ ldr r1, [r3, r2, lsl #0x2]
+ and r0, r4, #0x1f
+ orr r0, r1, r6, lsl r0
+ str r0, [r3, r2, lsl #0x2]
+ ldr r0, [r5, #0x0]
+ orr r0, r0, #0x18
+ str r0, [r5, #0x0]
+ ldmia sp!, {r4-r8,pc}
+_020BF148:
+ ldr r1, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00
+ mov r2, #0x18
+ mla r6, r0, r2, r1
+ mla r1, r4, r2, r1
+ mov r0, r6
+ bl MIi_CpuCopy32
+ mov r0, r6
+ add r1, r5, #0x10
+ mov r2, #0x18
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r8,pc}
+_020BF174:
+ ldr r3, [r1, #0x0]
+ ldr r2, _020BF2E0 ; =NNS_G3dRS
+ str r3, [r5, #0x4]
+ ldr r3, [r1, #0x4]
+ mov r7, r0, lsr #0x5
+ str r3, [r5, #0x8]
+ ldr r3, [r1, #0x8]
+ and r8, r0, #0x1f
+ str r3, [r5, #0xc]
+ ldr r6, [r2, #0x0]
+ mov r3, #0x1
+ add r2, r6, r7, lsl #0x2
+ mov r7, r3, lsl r8
+ ldr r2, [r2, #0xc4]
+ ands r2, r7, r2
+ beq _020BF200
+ ldr r3, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00
+ mov r2, #0x18
+ mov r0, r1
+ mla r1, r4, r2, r3
+ bl MIi_CpuCopy32
+ ldr r0, _020BF2E0 ; =NNS_G3dRS
+ mov r2, r4, lsr #0x5
+ ldr r1, [r0, #0x0]
+ and r0, r4, #0x1f
+ add r3, r1, #0xc4
+ mov r1, #0x1
+ mvn r0, r1, lsl r0
+ ldr r1, [r3, r2, lsl #0x2]
+ and r0, r1, r0
+ str r0, [r3, r2, lsl #0x2]
+ ldr r0, [r5, #0x0]
+ orr r0, r0, #0x18
+ str r0, [r5, #0x0]
+ ldmia sp!, {r4-r8,pc}
+_020BF200:
+ mov r2, #0x18
+ mul r12, r0, r2
+ and r7, r4, #0x1f
+ ldr r0, _020BF2E4 ; =NNS_G3dRSOnGlb + 0xE00
+ add r6, r6, #0xc4
+ mov lr, r4, lsr #0x5
+ mvn r7, r3, lsl r7
+ ldr r8, [r6, lr, lsl #0x2]
+ mul r3, r4, r2
+ and r4, r8, r7
+ str r4, [r6, lr, lsl #0x2]
+ ldr r7, [r1, #0x0]
+ ldr r4, [r0, r12]
+ ldr r6, _020BF2E8 ; =NNS_G3dRSOnGlb + 0xE04
+ smull r8, r4, r7, r4
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r4, lsl #0x14
+ str r7, [r0, r3]
+ ldr r8, [r1, #0x4]
+ ldr r4, [r6, r12]
+ ldr r7, _020BF2EC ; =NNS_G3dRSOnGlb + 0xE08
+ smull lr, r4, r8, r4
+ mov r8, lr, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ str r8, [r6, r3]
+ ldr r8, [r1, #0x8]
+ ldr r4, [r7, r12]
+ ldr r6, _020BF2F0 ; =NNS_G3dRSOnGlb + 0xE0C
+ smull lr, r4, r8, r4
+ mov r8, lr, lsr #0xc
+ orr r8, r8, r4, lsl #0x14
+ str r8, [r7, r3]
+ ldr r7, [r1, #0xc]
+ ldr r4, [r6, r12]
+ ldr lr, _020BF2F4 ; =NNS_G3dRSOnGlb + 0xE10
+ smull r8, r4, r7, r4
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r4, lsl #0x14
+ str r7, [r6, r3]
+ ldr r7, [r1, #0x10]
+ ldr r4, [lr, r12]
+ ldr r6, _020BF2F8 ; =NNS_G3dRSOnGlb + 0xE14
+ smull r8, r4, r7, r4
+ add r0, r0, r12
+ mov r7, r8, lsr #0xc
+ orr r7, r7, r4, lsl #0x14
+ str r7, [lr, r3]
+ ldr lr, [r1, #0x14]
+ ldr r4, [r6, r12]
+ add r1, r5, #0x10
+ smull r5, r4, lr, r4
+ mov r5, r5, lsr #0xc
+ orr r5, r5, r4, lsl #0x14
+ str r5, [r6, r3]
+ bl MIi_CpuCopy32
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020BF2E0: .word NNS_G3dRS
+_020BF2E4: .word NNS_G3dRSOnGlb + 0xE00
+_020BF2E8: .word NNS_G3dRSOnGlb + 0xE04
+_020BF2EC: .word NNS_G3dRSOnGlb + 0xE08
+_020BF2F0: .word NNS_G3dRSOnGlb + 0xE0C
+_020BF2F4: .word NNS_G3dRSOnGlb + 0xE10
+_020BF2F8: .word NNS_G3dRSOnGlb + 0xE14
+ arm_func_end NNSi_G3dGetJointScaleSi3d
+
+ arm_func_start NNSi_G3dSendJointSRTSi3d
+NNSi_G3dSendJointSRTSi3d: ; 0x020BF2FC
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x10
+ mov r6, r0
+ ldr r0, [r6, #0x0]
+ mov r5, #0x0
+ ands r4, r0, #0x18
+ bne _020BF328
+ add r1, r6, #0x1c
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+_020BF328:
+ ldr r0, [r6, #0x0]
+ ands r0, r0, #0x4
+ bne _020BF398
+ cmp r4, #0x0
+ movne r5, #0x1
+ bne _020BF398
+ ldr r2, [r6, #0x4c]
+ ldr r0, [r6, #0x10]
+ add r1, sp, #0x0
+ smull r3, r0, r2, r0
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x0]
+ ldr r3, [r6, #0x50]
+ ldr r2, [r6, #0x14]
+ mov r0, #0x1c
+ smull r12, r2, r3, r2
+ mov r3, r12, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ str r3, [sp, #0x4]
+ ldr r12, [r6, #0x54]
+ ldr r3, [r6, #0x18]
+ mov r2, #0x3
+ smull lr, r3, r12, r3
+ mov r12, lr, lsr #0xc
+ orr r12, r12, r3, lsl #0x14
+ str r12, [sp, #0x8]
+ bl NNS_G3dGeBufferOP_N
+_020BF398:
+ ldr r0, [r6, #0x0]
+ ands r0, r0, #0x2
+ bne _020BF3D4
+ cmp r5, #0x0
+ beq _020BF3C0
+ add r1, r6, #0x28
+ mov r0, #0x19
+ mov r2, #0xc
+ bl NNS_G3dGeBufferOP_N
+ b _020BF3EC
+_020BF3C0:
+ add r1, r6, #0x28
+ mov r0, #0x1a
+ mov r2, #0x9
+ bl NNS_G3dGeBufferOP_N
+ b _020BF3EC
+_020BF3D4:
+ cmp r5, #0x0
+ beq _020BF3EC
+ add r1, r6, #0x4c
+ mov r0, #0x1c
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+_020BF3EC:
+ cmp r4, #0x0
+ bne _020BF404
+ add r1, r6, #0x10
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+_020BF404:
+ ldr r0, [r6, #0x0]
+ ands r0, r0, #0x1
+ addne sp, sp, #0x10
+ ldmneia sp!, {r4-r6,pc}
+ add r1, r6, #0x4
+ mov r0, #0x1b
+ mov r2, #0x3
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_G3dSendJointSRTSi3d
diff --git a/arm9/asm/NNS_G3D_util.s b/arm9/asm/NNS_G3D_util.s
new file mode 100644
index 00000000..932cf871
--- /dev/null
+++ b/arm9/asm/NNS_G3D_util.s
@@ -0,0 +1,349 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNS_G3dWorldPosToScrPos
+NNS_G3dWorldPosToScrPos: ; 0x020BB408
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x1c
+ mov r5, r1
+ mov r4, r2
+ ldr r6, _020BB594 ; =NNS_G3dGlb + 0x8
+ ldr r1, _020BB598 ; =NNS_G3dGlb + 0x4C
+ add r2, sp, #0x10
+ bl MTX_MultVec43
+ ldr r1, [sp, #0x14]
+ ldr r0, [r6, #0x1c]
+ ldr r2, [sp, #0x10]
+ smull r8, r7, r1, r0
+ ldr r0, [r6, #0xc]
+ ldr r3, [sp, #0x18]
+ smlal r8, r7, r2, r0
+ ldr r1, [r6, #0x2c]
+ ldr r0, [r6, #0x3c]
+ smlal r8, r7, r3, r1
+ mov r1, r8, lsr #0xc
+ orr r1, r1, r7, lsl #0x14
+ add r0, r1, r0
+ bl FX_InvAsync
+ ldr r2, [sp, #0x14]
+ ldr r1, [r6, #0x10]
+ ldr r0, [r6, #0x14]
+ smull lr, r8, r2, r1
+ smull r12, r9, r2, r0
+ ldr r1, [sp, #0x10]
+ ldr r3, [r6, #0x0]
+ ldr r0, [sp, #0x18]
+ smlal lr, r8, r1, r3
+ ldr r7, [r6, #0x20]
+ ldr r2, [r6, #0x30]
+ smlal lr, r8, r0, r7
+ mov r3, lr, lsr #0xc
+ orr r3, r3, r8, lsl #0x14
+ add r7, r3, r2
+ ldr r3, [r6, #0x4]
+ ldr r8, [r6, #0x24]
+ smlal r12, r9, r1, r3
+ smlal r12, r9, r0, r8
+ mov r0, r12, lsr #0xc
+ ldr r2, [r6, #0x34]
+ orr r0, r0, r9, lsl #0x14
+ add r6, r0, r2
+ bl FX_GetDivResultFx64c
+ mov r2, r7, asr #0x1f
+ umull r9, lr, r0, r7
+ mla lr, r0, r2, lr
+ mov r3, #0x80000000
+ mla lr, r1, r7, lr
+ adds r9, r9, r3
+ adc r2, lr, #0x0
+ add r2, r2, #0x1000
+ add r2, r2, r2, lsr #0x1f
+ mov r7, r2, asr #0x1
+ umull lr, r2, r0, r6
+ mov r12, r6, asr #0x1f
+ mla r2, r0, r12, r2
+ mla r2, r1, r6, r2
+ adds r3, lr, r3
+ adc r0, r2, #0x0
+ add r0, r0, #0x1000
+ add r0, r0, r0, lsr #0x1f
+ mov r8, #0x0
+ mov r6, r0, asr #0x1
+ cmp r7, #0x0
+ blt _020BB530
+ cmp r6, #0x0
+ blt _020BB530
+ cmp r7, #0x1000
+ bgt _020BB530
+ cmp r6, #0x1000
+ ble _020BB534
+_020BB530:
+ mvn r8, #0x0
+_020BB534:
+ add r0, sp, #0x0
+ add r1, sp, #0x4
+ add r2, sp, #0x8
+ add r3, sp, #0xc
+ bl NNS_G3dGlbGetViewPort
+ ldr r2, [sp, #0x0]
+ ldr r0, [sp, #0x8]
+ ldr r12, [sp, #0xc]
+ sub r0, r0, r2
+ mul r0, r7, r0
+ add r1, r0, #0x800
+ ldr r3, [sp, #0x4]
+ add r1, r2, r1, asr #0xc
+ sub r0, r12, r3
+ mul r0, r6, r0
+ str r1, [r5, #0x0]
+ ldr r1, [sp, #0x4]
+ add r0, r0, #0x800
+ rsb r1, r1, #0xbf
+ sub r1, r1, r0, asr #0xc
+ mov r0, r8
+ str r1, [r4, #0x0]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020BB594: .word NNS_G3dGlb + 0x8
+_020BB598: .word NNS_G3dGlb + 0x4C
+ arm_func_end NNS_G3dWorldPosToScrPos
+
+ arm_func_start NNS_G3dResDefaultSetup
+NNS_G3dResDefaultSetup: ; 0x020BB59C
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r1, [r5, #0x0]
+ ldr r0, _020BB7C8 ; =0x30415642
+ cmp r1, r0
+ bhi _020BB5F4
+ cmp r1, r0
+ bhs _020BB7B0
+ ldr r0, _020BB7CC ; =0x30414D42
+ cmp r1, r0
+ bhi _020BB5E4
+ cmp r1, r0
+ bhs _020BB7B0
+ ldr r0, _020BB7D0 ; =0x30414342
+ cmp r1, r0
+ beq _020BB7B0
+ b _020BB7BC
+_020BB5E4:
+ ldr r0, _020BB7D4 ; =0x30415442
+ cmp r1, r0
+ beq _020BB7B0
+ b _020BB7BC
+_020BB5F4:
+ ldr r0, _020BB7D8 ; =0x30505442
+ cmp r1, r0
+ bhi _020BB618
+ cmp r1, r0
+ bhs _020BB7B0
+ ldr r0, _020BB7DC ; =0x30444D42
+ cmp r1, r0
+ beq _020BB624
+ b _020BB7BC
+_020BB618:
+ ldr r0, _020BB7E0 ; =0x30585442
+ cmp r1, r0
+ bne _020BB7BC
+_020BB624:
+ mov r11, #0x1
+ mov r0, r5
+ mov r9, r11
+ mov r8, r11
+ bl NNS_G3dGetTex
+ movs r4, r0
+ beq _020BB77C
+ bl NNS_G3dTexGetRequiredSize
+ mov r7, r0
+ mov r0, r4
+ bl NNS_G3dTex4x4GetRequiredSize
+ mov r6, r0
+ mov r0, r4
+ bl NNS_G3dPlttGetRequiredSize
+ mov r10, r0
+ cmp r7, #0x0
+ beq _020BB68C
+ ldr r0, _020BB7E4 ; =NNS_GfdDefaultFuncAllocTexVram
+ mov r1, #0x0
+ ldr r3, [r0, #0x0]
+ mov r0, r7
+ mov r2, r1
+ blx r3
+ movs r7, r0
+ moveq r11, #0x0
+ b _020BB690
+_020BB68C:
+ mov r7, #0x0
+_020BB690:
+ cmp r6, #0x0
+ beq _020BB6BC
+ ldr r1, _020BB7E4 ; =NNS_GfdDefaultFuncAllocTexVram
+ mov r0, r6
+ ldr r3, [r1, #0x0]
+ mov r1, #0x1
+ mov r2, #0x0
+ blx r3
+ movs r6, r0
+ moveq r9, #0x0
+ b _020BB6C0
+_020BB6BC:
+ mov r6, #0x0
+_020BB6C0:
+ cmp r10, #0x0
+ beq _020BB6F0
+ ldr r1, _020BB7E8 ; =NNS_GfdDefaultFuncAllocPlttVram
+ ldrh r2, [r4, #0x20]
+ ldr r3, [r1, #0x0]
+ mov r0, r10
+ and r1, r2, #0x8000
+ mov r2, #0x0
+ blx r3
+ movs r10, r0
+ moveq r8, #0x0
+ b _020BB6F4
+_020BB6F0:
+ mov r10, #0x0
+_020BB6F4:
+ cmp r11, #0x0
+ beq _020BB70C
+ cmp r9, #0x0
+ beq _020BB70C
+ cmp r8, #0x0
+ bne _020BB748
+_020BB70C:
+ ldr r1, _020BB7EC ; =NNS_GfdDefaultFuncFreePlttVram
+ mov r0, r10
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020BB7F0 ; =NNS_GfdDefaultFuncFreeTexVram
+ mov r0, r6
+ ldr r1, [r1, #0x0]
+ blx r1
+ ldr r1, _020BB7F0 ; =NNS_GfdDefaultFuncFreeTexVram
+ mov r0, r7
+ ldr r1, [r1, #0x0]
+ blx r1
+ add sp, sp, #0x4
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020BB748:
+ mov r0, r4
+ mov r1, r7
+ mov r2, r6
+ bl NNS_G3dTexSetTexKey
+ mov r0, r4
+ mov r1, r10
+ bl NNS_G3dPlttSetPlttKey
+ mov r0, r4
+ mov r1, #0x1
+ bl NNS_G3dTexLoad
+ mov r0, r4
+ mov r1, #0x1
+ bl NNS_G3dPlttLoad
+_020BB77C:
+ ldr r1, [r5, #0x0]
+ ldr r0, _020BB7DC ; =0x30444D42
+ cmp r1, r0
+ bne _020BB7A4
+ mov r0, r5
+ bl NNS_G3dGetMdlSet
+ cmp r4, #0x0
+ beq _020BB7A4
+ mov r1, r4
+ bl NNS_G3dBindMdlSet
+_020BB7A4:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020BB7B0:
+ add sp, sp, #0x4
+ mov r0, #0x1
+ ldmia sp!, {r4-r11,pc}
+_020BB7BC:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020BB7C8: .word 0x30415642
+_020BB7CC: .word 0x30414D42
+_020BB7D0: .word 0x30414342
+_020BB7D4: .word 0x30415442
+_020BB7D8: .word 0x30505442
+_020BB7DC: .word 0x30444D42
+_020BB7E0: .word 0x30585442
+_020BB7E4: .word NNS_GfdDefaultFuncAllocTexVram
+_020BB7E8: .word NNS_GfdDefaultFuncAllocPlttVram
+_020BB7EC: .word NNS_GfdDefaultFuncFreePlttVram
+_020BB7F0: .word NNS_GfdDefaultFuncFreeTexVram
+ arm_func_end NNS_G3dResDefaultSetup
+
+ arm_func_start NNS_G3dInit
+NNS_G3dInit: ; 0x020BB7F4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl G3X_Init
+ bl NNS_G3dGlbInit
+ ldr r1, _020BB820 ; =0x04000600
+ ldr r0, [r1, #0x0]
+ bic r0, r0, #0xc0000000
+ orr r0, r0, #0x80000000
+ str r0, [r1, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020BB820: .word 0x04000600
+ arm_func_end NNS_G3dInit
+
+ arm_func_start NNS_G3dGetCurrentMtx
+NNS_G3dGetCurrentMtx: ; 0x020BB824
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x40
+ mov r6, r0
+ mov r5, r1
+ bl NNS_G3dGeFlushBuffer
+ ldr r0, _020BB8B4 ; =0x04000440
+ mov r2, #0x0
+ ldr r1, _020BB8B8 ; =0x04000444
+ str r2, [r0, #0x0]
+ ldr r0, _020BB8BC ; =0x04000454
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ cmp r6, #0x0
+ beq _020BB87C
+ add r4, sp, #0x0
+_020BB860:
+ mov r0, r4
+ bl G3X_GetClipMtx
+ cmp r0, #0x0
+ bne _020BB860
+ add r0, sp, #0x0
+ mov r1, r6
+ bl MTX_Copy44To43_
+_020BB87C:
+ cmp r5, #0x0
+ beq _020BB894
+_020BB884:
+ mov r0, r5
+ bl G3X_GetVectorMtx
+ cmp r0, #0x0
+ bne _020BB884
+_020BB894:
+ ldr r1, _020BB8C0 ; =0x04000448
+ mov r2, #0x1
+ ldr r0, _020BB8B4 ; =0x04000440
+ str r2, [r1, #0x0]
+ mov r1, #0x2
+ str r1, [r0, #0x0]
+ add sp, sp, #0x40
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020BB8B4: .word 0x04000440
+_020BB8B8: .word 0x04000444
+_020BB8BC: .word 0x04000454
+_020BB8C0: .word 0x04000448
+ arm_func_end NNS_G3dGetCurrentMtx
diff --git a/arm9/asm/NNS_G3D_xsi.s b/arm9/asm/NNS_G3D_xsi.s
new file mode 100644
index 00000000..63787926
--- /dev/null
+++ b/arm9/asm/NNS_G3D_xsi.s
@@ -0,0 +1,477 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global calcTexMtx_
+calcTexMtx_: ; 0x021067F0
+ .word texmtxCalc_flag_
+ .word texmtxCalc_flagS_
+ .word texmtxCalc_flagR_
+ .word texmtxCalc_flagRS_
+ .word texmtxCalc_flagT_
+ .word texmtxCalc_flagTS_
+ .word texmtxCalc_flagTR_
+ .word texmtxCalc_flagTRS_
+
+ .section .text
+
+ arm_func_start NNSi_G3dSendTexSRTXsi
+NNSi_G3dSendTexSRTXsi: ; 0x020BFA9C
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x50
+ mov r4, r0
+ ldr r0, [r4, #0x0]
+ mov r3, #0x3
+ ands r0, r0, #0x8
+ ldrne r0, _020BFC1C ; =0x00101610
+ mov r2, #0x2
+ strne r0, [sp, #0x0]
+ ldreq r0, _020BFC20 ; =0x00101810
+ mov r1, #0x1000
+ streq r0, [sp, #0x0]
+ mov r0, #0x0
+ str r3, [sp, #0x4]
+ str r2, [sp, #0x48]
+ str r1, [sp, #0x44]
+ str r0, [sp, #0x40]
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x30]
+ str r0, [sp, #0x2c]
+ str r0, [sp, #0x28]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x14]
+ str r0, [sp, #0x10]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x1
+ strne r1, [r4, #0x1c]
+ ldrne r0, [r4, #0x1c]
+ strne r0, [r4, #0x18]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x2
+ movne r0, #0x1000
+ strneh r0, [r4, #0x22]
+ movne r0, #0x0
+ strneh r0, [r4, #0x20]
+ ldr r0, [r4, #0x0]
+ ands r0, r0, #0x4
+ movne r0, #0x0
+ strne r0, [r4, #0x28]
+ ldrne r0, [r4, #0x28]
+ strne r0, [r4, #0x24]
+ ldr r1, [r4, #0x0]
+ ldr r0, _020BFC24 ; =calcTexMtx_
+ and r1, r1, #0x7
+ ldr r2, [r0, r1, lsl #0x2]
+ add r0, sp, #0x8
+ mov r1, r4
+ blx r2
+ ldr r3, [r4, #0x30]
+ cmp r3, #0x1000
+ beq _020BFBB0
+ ldr r0, [sp, #0x8]
+ ldr r1, [sp, #0xc]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x8]
+ ldr r2, [r4, #0x30]
+ ldr r0, [sp, #0x38]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0xc]
+ ldr r1, [r4, #0x30]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x38]
+_020BFBB0:
+ ldr r3, [r4, #0x34]
+ cmp r3, #0x1000
+ beq _020BFC00
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x1c]
+ smull r2, r0, r3, r0
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r0, lsl #0x14
+ str r2, [sp, #0x18]
+ ldr r2, [r4, #0x34]
+ ldr r0, [sp, #0x3c]
+ smull r3, r1, r2, r1
+ mov r2, r3, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [sp, #0x1c]
+ ldr r1, [r4, #0x34]
+ smull r2, r0, r1, r0
+ mov r1, r2, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ str r1, [sp, #0x3c]
+_020BFC00:
+ add r1, sp, #0x0
+ ldr r0, [sp, #0x0]
+ add r1, r1, #0x4
+ mov r2, #0x12
+ bl NNS_G3dGeBufferOP_N
+ add sp, sp, #0x50
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020BFC1C: .word 0x00101610
+_020BFC20: .word 0x00101810
+_020BFC24: .word calcTexMtx_
+ arm_func_end NNSi_G3dSendTexSRTXsi
+
+ arm_func_start texmtxCalc_flagTRS_
+texmtxCalc_flagTRS_: ; 0x020BFC28
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+ str r1, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r1, [r0, #0x30]
+ str r1, [r0, #0x34]
+ bx lr
+ arm_func_end texmtxCalc_flagTRS_
+
+ arm_func_start texmtxCalc_flagTR_
+texmtxCalc_flagTR_: ; 0x020BFC4C
+ ldr r2, [r1, #0x18]
+ mov r3, #0x0
+ str r2, [r0, #0x0]
+ ldr r2, [r1, #0x1c]
+ str r2, [r0, #0x14]
+ str r3, [r0, #0x4]
+ str r3, [r0, #0x30]
+ ldrh r2, [r1, #0x2e]
+ ldr r1, [r1, #0x1c]
+ rsb r2, r2, #0x0
+ sub r1, r1, #0x1000
+ mul r1, r2, r1
+ mov r1, r1, lsl #0x4
+ str r1, [r0, #0x34]
+ str r3, [r0, #0x10]
+ bx lr
+ arm_func_end texmtxCalc_flagTR_
+
+ arm_func_start texmtxCalc_flagTS_
+texmtxCalc_flagTS_: ; 0x020BFC8C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrh r1, [r5, #0x2c]
+ ldrsh r0, [r5, #0x20]
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x30]
+ ldrh r1, [r5, #0x2e]
+ ldrsh r0, [r5, #0x22]
+ rsb r1, r1, #0x0
+ sub r0, r0, #0x1000
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end texmtxCalc_flagTS_
+
+ arm_func_start texmtxCalc_flagT_
+texmtxCalc_flagT_: ; 0x020BFD38
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r9, r1
+ ldrh r2, [r9, #0x2c]
+ ldrh r1, [r9, #0x2e]
+ mov r10, r0
+ mov r8, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r8
+ bl FX_DivAsync
+ ldrsh r3, [r9, #0x22]
+ ldr r0, [r9, #0x18]
+ ldrsh r7, [r9, #0x20]
+ ldr r5, [r9, #0x1c]
+ smull r2, r1, r0, r3
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r10, #0x0]
+ smull r2, r1, r5, r3
+ mov r4, r2, lsr #0xc
+ orr r4, r4, r1, lsl #0x14
+ smull r2, r1, r0, r7
+ mov r6, r2, lsr #0xc
+ orr r6, r6, r1, lsl #0x14
+ str r4, [r10, #0x14]
+ bl FX_GetDivResult
+ smull r2, r1, r5, r7
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x4]
+ mov r0, r8
+ mov r1, r11
+ bl FX_DivAsync
+ sub r0, r4, #0x1000
+ ldrh r1, [r9, #0x2c]
+ mul r2, r1, r6
+ mov r1, r2, lsl #0x4
+ str r1, [r10, #0x30]
+ ldrh r1, [r9, #0x2e]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r10, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r6, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r10, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end texmtxCalc_flagT_
+
+ arm_func_start texmtxCalc_flagRS_
+texmtxCalc_flagRS_: ; 0x020BFE0C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, #0x1000
+ str r2, [r0, #0x0]
+ str r2, [r0, #0x14]
+ mov lr, #0x0
+ str lr, [r0, #0x4]
+ ldr r2, [r1, #0x24]
+ ldrh r3, [r1, #0x2c]
+ rsb r2, r2, #0x0
+ ldr r12, [r1, #0x28]
+ mul r2, r3, r2
+ mov r2, r2, lsl #0x4
+ str r2, [r0, #0x30]
+ ldrh r1, [r1, #0x2e]
+ rsb r2, r12, #0x0
+ rsb r1, r1, #0x0
+ mul r2, r1, r2
+ mov r1, r2, lsl #0x4
+ str r1, [r0, #0x34]
+ str lr, [r0, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end texmtxCalc_flagRS_
+
+ arm_func_start texmtxCalc_flagR_
+texmtxCalc_flagR_: ; 0x020BFE68
+ stmdb sp!, {r4,lr}
+ ldr r3, [r1, #0x18]
+ mov r2, #0x0
+ str r3, [r0, #0x0]
+ ldr r3, [r1, #0x1c]
+ str r3, [r0, #0x14]
+ str r2, [r0, #0x4]
+ ldr r12, [r1, #0x24]
+ ldr r3, [r1, #0x18]
+ ldr r4, [r1, #0x28]
+ smull lr, r3, r12, r3
+ mov r12, lr, lsr #0xc
+ orr r12, r12, r3, lsl #0x14
+ ldrh lr, [r1, #0x2c]
+ rsb r3, r12, #0x0
+ ldr r12, [r1, #0x1c]
+ rsb r4, r4, #0x0
+ mul r3, lr, r3
+ smull lr, r12, r4, r12
+ mov r3, r3, lsl #0x4
+ str r3, [r0, #0x30]
+ mov r4, lr, lsr #0xc
+ ldrh r3, [r1, #0x2e]
+ ldr r1, [r1, #0x1c]
+ orr r4, r4, r12, lsl #0x14
+ add r1, r1, r4
+ rsb r3, r3, #0x0
+ sub r1, r1, #0x1000
+ mul r1, r3, r1
+ mov r1, r1, lsl #0x4
+ str r1, [r0, #0x34]
+ str r2, [r0, #0x10]
+ ldmia sp!, {r4,pc}
+ arm_func_end texmtxCalc_flagR_
+
+ arm_func_start texmtxCalc_flagS_
+texmtxCalc_flagS_: ; 0x020BFEEC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r1
+ ldrh r2, [r5, #0x2c]
+ ldrh r1, [r5, #0x2e]
+ mov r6, r0
+ mov r4, r2, lsl #0xc
+ mov r7, r1, lsl #0xc
+ mov r0, r7
+ mov r1, r4
+ bl FX_DivAsync
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x0]
+ ldrsh r0, [r5, #0x22]
+ str r0, [r6, #0x14]
+ bl FX_GetDivResult
+ ldrsh r2, [r5, #0x20]
+ mov r1, r7
+ mul r0, r2, r0
+ mov r2, r0, asr #0xc
+ mov r0, r4
+ str r2, [r6, #0x4]
+ bl FX_DivAsync
+ ldrsh lr, [r5, #0x20]
+ ldr r4, [r5, #0x28]
+ ldrsh r0, [r5, #0x22]
+ ldr r12, [r5, #0x24]
+ smull r3, r2, r4, lr
+ smlal r3, r2, r12, r0
+ smull r1, r0, r4, r0
+ mov r3, r3, lsr #0xc
+ orr r3, r3, r2, lsl #0x14
+ sub r4, lr, r3
+ smull r3, r2, r12, lr
+ subs r1, r3, r1
+ sbc r0, r2, r0
+ ldrh r2, [r5, #0x2c]
+ mov r1, r1, lsr #0xc
+ orr r1, r1, r0, lsl #0x14
+ mul r0, r2, r4
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x30]
+ ldrsh r0, [r5, #0x22]
+ ldrh r2, [r5, #0x2e]
+ add r0, r0, r1
+ rsb r1, r2, #0x0
+ sub r0, r0, #0x1000
+ mul r0, r1, r0
+ mov r0, r0, lsl #0x4
+ str r0, [r6, #0x34]
+ bl FX_GetDivResult
+ ldrsh r1, [r5, #0x20]
+ rsb r1, r1, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r6, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ arm_func_end texmtxCalc_flagS_
+
+ arm_func_start texmtxCalc_flag_
+texmtxCalc_flag_: ; 0x020BFFD4
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r6, r1
+ ldrh r2, [r6, #0x2c]
+ ldrh r1, [r6, #0x2e]
+ mov r7, r0
+ mov r10, r2, lsl #0xc
+ mov r11, r1, lsl #0xc
+ mov r0, r11
+ mov r1, r10
+ bl FX_DivAsync
+ ldrsh r3, [r6, #0x22]
+ ldr r0, [r6, #0x18]
+ ldrsh r9, [r6, #0x20]
+ smull r2, r1, r0, r3
+ mov r2, r2, lsr #0xc
+ ldr r8, [r6, #0x1c]
+ orr r2, r2, r1, lsl #0x14
+ str r2, [r7, #0x0]
+ smull r2, r1, r8, r3
+ mov r4, r2, lsr #0xc
+ orr r4, r4, r1, lsl #0x14
+ smull r2, r1, r0, r9
+ mov r5, r2, lsr #0xc
+ orr r5, r5, r1, lsl #0x14
+ str r4, [r7, #0x14]
+ bl FX_GetDivResult
+ smull r2, r1, r8, r9
+ mov r2, r2, lsr #0xc
+ orr r2, r2, r1, lsl #0x14
+ mul r0, r2, r0
+ mov r0, r0, asr #0xc
+ str r0, [r7, #0x4]
+ mov r0, r10
+ mov r1, r11
+ bl FX_DivAsync
+ ldr lr, [r6, #0x1c]
+ ldrsh r2, [r6, #0x20]
+ ldr r8, [r6, #0x24]
+ ldr r0, [r6, #0x28]
+ smull r10, r9, r8, r2
+ ldrh r1, [r6, #0x2c]
+ smull r3, r2, r0, r2
+ ldrsh r12, [r6, #0x22]
+ str r1, [sp, #0x0]
+ mov r11, lr, asr #0x1f
+ smlal r3, r2, r8, r12
+ smull r8, r12, r0, r12
+ subs r8, r10, r8
+ sbc r0, r9, r12
+ mov r9, r8, lsr #0xc
+ mov r12, r3, lsr #0xc
+ orr r9, r9, r0, lsl #0x14
+ mov r3, r2, asr #0xc
+ orr r12, r12, r2, lsl #0x14
+ umull r10, r2, r9, lr
+ mla r2, r9, r11, r2
+ mov r8, r0, asr #0xc
+ mla r2, r8, lr, r2
+ ldr r1, [r6, #0x18]
+ mov r8, r10, lsr #0xc
+ orr r8, r8, r2, lsl #0x14
+ add r2, r4, r8
+ mov r0, r1, asr #0x1f
+ umull r8, r4, r12, r1
+ mla r4, r12, r0, r4
+ mla r4, r3, r1, r4
+ mov r0, r8, lsr #0xc
+ orr r0, r0, r4, lsl #0x14
+ sub r1, r5, r0
+ ldr r0, [sp, #0x0]
+ sub r2, r2, #0x1000
+ mul r1, r0, r1
+ mov r0, r1, lsl #0x4
+ str r0, [r7, #0x30]
+ ldrh r0, [r6, #0x2e]
+ rsb r0, r0, #0x0
+ mul r1, r0, r2
+ mov r0, r1, lsl #0x4
+ str r0, [r7, #0x34]
+ bl FX_GetDivResult
+ rsb r1, r5, #0x0
+ mul r0, r1, r0
+ mov r0, r0, asr #0xc
+ str r0, [r7, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+ arm_func_end texmtxCalc_flag_
diff --git a/arm9/asm/NNS_GFD_gfd_frameplttvr.s b/arm9/asm/NNS_GFD_gfd_frameplttvr.s
new file mode 100644
index 00000000..63d32aec
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_frameplttvr.s
@@ -0,0 +1,165 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global s_managerState_
+s_managerState_: ; 0x021CCD4C
+ .space 0xc
+
+ .section .text
+
+ arm_func_start NNS_GfdResetFrmPlttVramState
+NNS_GfdResetFrmPlttVramState: ; 0x020AEC60
+ ldr r0, _020AEC78 ; =s_managerState_
+ mov r2, #0x0
+ ldr r1, [r0, #0x8]
+ str r2, [r0, #0x0]
+ str r1, [r0, #0x4]
+ bx lr
+ .balign 4
+_020AEC78: .word s_managerState_
+ arm_func_end NNS_GfdResetFrmPlttVramState
+
+ arm_func_start NNS_GfdSetFrmPlttVramState
+NNS_GfdSetFrmPlttVramState: ; 0x020AEC7C
+ ldr r2, [r0, #0x0]
+ ldr r1, _020AEC94 ; =s_managerState_
+ str r2, [r1, #0x0]
+ ldr r0, [r0, #0x4]
+ str r0, [r1, #0x4]
+ bx lr
+ .balign 4
+_020AEC94: .word s_managerState_
+ arm_func_end NNS_GfdSetFrmPlttVramState
+
+ arm_func_start NNS_GfdGetFrmPlttVramState
+NNS_GfdGetFrmPlttVramState: ; 0x020AEC98
+ ldr r1, _020AECB0 ; =s_managerState_
+ ldr r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldr r1, [r1, #0x4]
+ str r1, [r0, #0x4]
+ bx lr
+ .balign 4
+_020AECB0: .word s_managerState_
+ arm_func_end NNS_GfdGetFrmPlttVramState
+
+ arm_func_start NNS_GfdFreeFrmPlttVram
+NNS_GfdFreeFrmPlttVram: ; 0x020AECB4
+ mov r0, #0x0
+ bx lr
+ arm_func_end NNS_GfdFreeFrmPlttVram
+
+ arm_func_start NNS_GfdAllocFrmPlttVram
+NNS_GfdAllocFrmPlttVram: ; 0x020AECBC
+ stmdb sp!, {r4,lr}
+ cmp r0, #0x0
+ moveq r0, #0x8
+ addne r0, r0, #0x7
+ ldr ip, _020AEDE8 ; =0x0007FFF8
+ bicne r0, r0, #0x7
+ cmp r0, r12
+ mov r3, #0x0
+ movcs r0, #0x0
+ ldmcsia sp!, {r4,pc}
+ cmp r2, #0x1
+ bne _020AED64
+ ldr r2, _020AEDEC ; =s_managerState_
+ cmp r1, #0x0
+ ldr r12, [r2, #0x0]
+ andne r2, r12, #0x7
+ rsbne r2, r2, #0x8
+ andne r4, r2, #0x7
+ andeq r2, r12, #0xf
+ rsbeq r2, r2, #0x10
+ andeq r4, r2, #0xf
+ ldr r2, _020AEDEC ; =s_managerState_
+ add lr, r0, r4
+ ldr r2, [r2, #0x4]
+ sub r2, r2, r12
+ cmp r2, lr
+ blo _020AED5C
+ cmp r1, #0x0
+ add r1, r12, lr
+ beq _020AED40
+ cmp r1, #0x10000
+ movhi r12, #0x0
+ bhi _020AEDCC
+_020AED40:
+ ldr r1, _020AEDEC ; =s_managerState_
+ add r3, r12, r4
+ ldr r2, [r1, #0x0]
+ mov r12, #0x1
+ add r2, r2, lr
+ str r2, [r1, #0x0]
+ b _020AEDCC
+_020AED5C:
+ mov r12, #0x0
+ b _020AEDCC
+_020AED64:
+ ldr r2, _020AEDEC ; =s_managerState_
+ ldr r12, [r2, #0x4]
+ cmp r12, r0
+ blo _020AEDC8
+ sub r2, r12, r0
+ cmp r1, #0x0
+ andne r4, r2, #0x7
+ andeq r4, r2, #0xf
+ ldr r2, _020AEDEC ; =s_managerState_
+ add lr, r0, r4
+ ldr r2, [r2, #0x0]
+ sub r2, r12, r2
+ cmp r2, lr
+ blo _020AEDC8
+ cmp r1, #0x0
+ beq _020AEDB0
+ cmp r12, #0x10000
+ movhi r12, #0x0
+ bhi _020AEDCC
+_020AEDB0:
+ ldr r1, _020AEDEC ; =s_managerState_
+ mov r12, #0x1
+ ldr r2, [r1, #0x4]
+ sub r3, r2, lr
+ str r3, [r1, #0x4]
+ b _020AEDCC
+_020AEDC8:
+ mov r12, #0x0
+_020AEDCC:
+ cmp r12, #0x0
+ ldrne r1, _020AEDF0 ; =0x0000FFFF
+ movne r2, r0, lsr #0x3
+ andne r0, r1, r3, lsr #0x3
+ orrne r0, r0, r2, lsl #0x10
+ moveq r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AEDE8: .word 0x0007FFF8
+_020AEDEC: .word s_managerState_
+_020AEDF0: .word 0x0000FFFF
+ arm_func_end NNS_GfdAllocFrmPlttVram
+
+ arm_func_start NNS_GfdInitFrmPlttVramManager
+NNS_GfdInitFrmPlttVramManager: ; 0x020AEDF4
+ stmdb sp!, {r4,lr}
+ ldr r2, _020AEE2C ; =s_managerState_
+ mov r4, r1
+ str r0, [r2, #0x8]
+ bl NNS_GfdResetFrmPlttVramState
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r3, _020AEE30 ; =NNS_GfdAllocFrmPlttVram
+ ldr r1, _020AEE34 ; =NNS_GfdDefaultFuncAllocPlttVram
+ ldr r2, _020AEE38 ; =NNS_GfdFreeFrmPlttVram
+ ldr r0, _020AEE3C ; =NNS_GfdDefaultFuncFreePlttVram
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AEE2C: .word s_managerState_
+_020AEE30: .word NNS_GfdAllocFrmPlttVram
+_020AEE34: .word NNS_GfdDefaultFuncAllocPlttVram
+_020AEE38: .word NNS_GfdFreeFrmPlttVram
+_020AEE3C: .word NNS_GfdDefaultFuncFreePlttVram
+ arm_func_end NNS_GfdInitFrmPlttVramManager
diff --git a/arm9/asm/NNS_GFD_gfd_frametexvra.s b/arm9/asm/NNS_GFD_gfd_frametexvra.s
new file mode 100644
index 00000000..6cc4da87
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_frametexvra.s
@@ -0,0 +1,316 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global tex4x4SearchArray_
+tex4x4SearchArray_: ; 0x021064C8
+ .word vramRegions_
+ .word vramRegions_ + 0x48
+
+ .global texNrmSearchArray_
+texNrmSearchArray_: ; 0x021064D0
+ .word vramRegions_ + 0x60
+ .word vramRegions_ + 0x48
+ .word vramRegions_
+ .word vramRegions_ + 0x30
+ .word vramRegions_ + 0x18
+
+ .global vramRegions_
+vramRegions_: ; 0x021064E4
+ .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
+ .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
+ .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00
+ .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
+ .byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00
+ .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00
+ .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00
+
+ .section .bss
+
+ .global frmExVramMan_
+frmExVramMan_: ; 0x021CCD48
+ .space 0x4
+
+ .section .text
+
+ arm_func_start NNS_GfdSetFrmTexVramState
+NNS_GfdSetFrmTexVramState: ; 0x020AE8CC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, #0x0
+ ldr r3, _020AE914 ; =vramRegions_
+ mov r12, lr
+ mov r2, #0x1
+_020AE8E4:
+ ldr r1, [r0, r12, lsl #0x2]
+ add lr, lr, #0x1
+ str r1, [r3, #0x0]
+ ldr r1, [r0, r2, lsl #0x2]
+ cmp lr, #0x5
+ str r1, [r3, #0x4]
+ add r12, r12, #0x2
+ add r3, r3, #0x18
+ add r2, r2, #0x2
+ blt _020AE8E4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AE914: .word vramRegions_
+ arm_func_end NNS_GfdSetFrmTexVramState
+
+ arm_func_start NNS_GfdGetFrmTexVramState
+NNS_GfdGetFrmTexVramState: ; 0x020AE918
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov lr, #0x0
+ ldr ip, _020AE960 ; =vramRegions_
+ mov r3, lr
+ mov r2, #0x1
+_020AE930:
+ ldr r1, [r12, #0x0]
+ add lr, lr, #0x1
+ str r1, [r0, r3, lsl #0x2]
+ ldr r1, [r12, #0x4]
+ cmp lr, #0x5
+ str r1, [r0, r2, lsl #0x2]
+ add r12, r12, #0x18
+ add r3, r3, #0x2
+ add r2, r2, #0x2
+ blt _020AE930
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AE960: .word vramRegions_
+ arm_func_end NNS_GfdGetFrmTexVramState
+
+ arm_func_start NNS_GfdFreeFrmTexVram
+NNS_GfdFreeFrmTexVram: ; 0x020AE964
+ mov r0, #0x0
+ bx lr
+ arm_func_end NNS_GfdFreeFrmTexVram
+
+ arm_func_start NNS_GfdAllocFrmTexVram
+NNS_GfdAllocFrmTexVram: ; 0x020AE96C
+ stmdb sp!, {r4-r10,lr}
+ cmp r0, #0x0
+ moveq r7, #0x10
+ addne r0, r0, #0xf
+ bicne r7, r0, #0xf
+ ldr r0, _020AEADC ; =0x0007FFF0
+ cmp r7, r0
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r10,pc}
+ cmp r1, #0x0
+ beq _020AEA5C
+ mov lr, r7, lsr #0x1
+ mov r6, #0x0
+ ldr r2, _020AEAE0 ; =vramRegions_ + 0x30
+ ldr r3, _020AEAE4 ; =vramRegions_ + 0x18
+ ldr ip, _020AEAE8 ; =tex4x4SearchArray_
+ mov r0, r6
+_020AE9B0:
+ ldr r5, [r12, r6, lsl #0x2]
+ ldr r4, [r5, #0x8]
+ cmp r4, #0x0
+ beq _020AEA48
+ ldr r9, [r5, #0x4]
+ ldr r4, [r5, #0x0]
+ sub r4, r9, r4
+ cmp r4, r7
+ blo _020AEA48
+ ldrh r4, [r5, #0x10]
+ cmp r4, #0x0
+ beq _020AE9EC
+ cmp r4, #0x3
+ beq _020AE9F4
+ b _020AE9FC
+_020AE9EC:
+ mov r4, r3
+ b _020AEA00
+_020AE9F4:
+ mov r4, r2
+ b _020AEA00
+_020AE9FC:
+ mov r4, r0
+_020AEA00:
+ ldr r9, [r4, #0x8]
+ cmp r9, #0x0
+ beq _020AEA48
+ ldr r10, [r4, #0x4]
+ ldr r9, [r4, #0x0]
+ sub r9, r10, r9
+ cmp r9, lr
+ blo _020AEA48
+ ldr r3, [r5, #0x0]
+ mov r0, #0x1
+ add r2, r3, r7
+ str r2, [r5, #0x0]
+ ldr r2, [r4, #0x0]
+ add r2, r2, lr
+ str r2, [r4, #0x0]
+ ldr r2, [r5, #0x14]
+ add r8, r3, r2
+ b _020AEAB8
+_020AEA48:
+ add r6, r6, #0x1
+ cmp r6, #0x2
+ blt _020AE9B0
+ mov r0, #0x0
+ b _020AEAB8
+_020AEA5C:
+ ldr r3, _020AEAEC ; =texNrmSearchArray_
+ mov r5, #0x0
+_020AEA64:
+ ldr r4, [r3, r5, lsl #0x2]
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ beq _020AEAA8
+ ldr r2, [r4, #0x4]
+ ldr r0, [r4, #0x0]
+ sub r0, r2, r0
+ cmp r0, r7
+ blo _020AEAA8
+ ldr r2, [r4, #0x4]
+ mov r0, #0x1
+ sub r2, r2, r7
+ str r2, [r4, #0x4]
+ ldr r3, [r4, #0x4]
+ ldr r2, [r4, #0x14]
+ add r8, r3, r2
+ b _020AEAB8
+_020AEAA8:
+ add r5, r5, #0x1
+ cmp r5, #0x5
+ blt _020AEA64
+ mov r0, #0x0
+_020AEAB8:
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+ ldr r0, _020AEAF0 ; =0x0000FFFF
+ mov r2, r7, lsr #0x4
+ and r0, r0, r8, lsr #0x3
+ orr r0, r0, r2, lsl #0x10
+ orr r0, r0, r1, lsl #0x1f
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020AEADC: .word 0x0007FFF0
+_020AEAE0: .word vramRegions_ + 0x30
+_020AEAE4: .word vramRegions_ + 0x18
+_020AEAE8: .word tex4x4SearchArray_
+_020AEAEC: .word texNrmSearchArray_
+_020AEAF0: .word 0x0000FFFF
+ arm_func_end NNS_GfdAllocFrmTexVram
+
+ arm_func_start NNS_GfdResetFrmTexVramState
+NNS_GfdResetFrmTexVramState: ; 0x020AEAF4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r0, _020AEB68 ; =frmExVramMan_
+ mov r6, #0x0
+ ldrh r7, [r0, #0x0]
+ ldr r5, _020AEB6C ; =vramRegions_
+ mov lr, r6
+ cmp r7, #0x1
+ addhi r7, r7, #0x1
+ mov r1, r6
+ mov r3, r6
+ mov r4, #0x1
+ mov r0, #0x20000
+ mov r2, #0x10000
+_020AEB2C:
+ cmp r6, r7
+ strlt r4, [r5, #0x8]
+ strge lr, [r5, #0x8]
+ ldr r12, [r5, #0xc]
+ add r6, r6, #0x1
+ cmp r12, #0x0
+ strne r3, [r5, #0x0]
+ strne r2, [r5, #0x4]
+ streq r1, [r5, #0x0]
+ streq r0, [r5, #0x4]
+ cmp r6, #0x5
+ add r5, r5, #0x18
+ blt _020AEB2C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AEB68: .word frmExVramMan_
+_020AEB6C: .word vramRegions_
+ arm_func_end NNS_GfdResetFrmTexVramState
+
+ arm_func_start NNS_GfdInitFrmTexVramManager
+NNS_GfdInitFrmTexVramManager: ; 0x020AEB70
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ cmp r5, #0x2
+ bhi _020AEBA8
+ mov r12, #0x1
+ mov r0, #0x4
+ mov r1, #0x3
+ mov r2, #0x2
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl NNSi_GfdSetTexNrmSearchArray
+ b _020AEBC4
+_020AEBA8:
+ mov r12, #0x1
+ mov r0, #0x4
+ mov r1, #0x3
+ mov r2, #0x0
+ mov r3, #0x2
+ str r12, [sp, #0x0]
+ bl NNSi_GfdSetTexNrmSearchArray
+_020AEBC4:
+ ldr r0, _020AEBFC ; =frmExVramMan_
+ strh r5, [r0, #0x0]
+ bl NNS_GfdResetFrmTexVramState
+ cmp r4, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r3, _020AEC00 ; =NNS_GfdAllocFrmTexVram
+ ldr r1, _020AEC04 ; =NNS_GfdDefaultFuncAllocTexVram
+ ldr r2, _020AEC08 ; =NNS_GfdFreeFrmTexVram
+ ldr r0, _020AEC0C ; =NNS_GfdDefaultFuncFreeTexVram
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AEBFC: .word frmExVramMan_
+_020AEC00: .word NNS_GfdAllocFrmTexVram
+_020AEC04: .word NNS_GfdDefaultFuncAllocTexVram
+_020AEC08: .word NNS_GfdFreeFrmTexVram
+_020AEC0C: .word NNS_GfdDefaultFuncFreeTexVram
+ arm_func_end NNS_GfdInitFrmTexVramManager
+
+ arm_func_start NNSi_GfdSetTexNrmSearchArray
+NNSi_GfdSetTexNrmSearchArray: ; 0x020AEC10
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr lr, [sp, #0x18]
+ ldr r6, _020AEC58 ; =vramRegions_
+ mov r12, #0x18
+ mla r7, r0, r12, r6
+ ldr r0, _020AEC5C ; =texNrmSearchArray_
+ mla r5, r1, r12, r6
+ mla r4, r2, r12, r6
+ mla r2, r3, r12, r6
+ mla r1, lr, r12, r6
+ str r7, [r0, #0x0]
+ str r5, [r0, #0x4]
+ str r4, [r0, #0x8]
+ str r2, [r0, #0xc]
+ str r1, [r0, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020AEC58: .word vramRegions_
+_020AEC5C: .word texNrmSearchArray_
+ arm_func_end NNSi_GfdSetTexNrmSearchArray
diff --git a/arm9/asm/NNS_GFD_gfd_linkedlistp.s b/arm9/asm/NNS_GFD_gfd_linkedlistp.s
new file mode 100644
index 00000000..dd1af2f9
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_linkedlistp.s
@@ -0,0 +1,152 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+mgr_: ; 0x021CCD88
+ .space 0x14
+
+ .section .text
+
+ arm_func_start NNS_GfdResetLnkPlttVramState
+NNS_GfdResetLnkPlttVramState: ; 0x020AFA30
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020AFA78 ; =mgr_
+ ldr r1, [r0, #0x10]
+ ldr r0, [r0, #0xc]
+ mov r1, r1, lsr #0x4
+ bl NNSi_GfdInitLnkVramBlockPool
+ ldr r1, _020AFA78 ; =mgr_
+ str r0, [r1, #0x4]
+ mov r0, r1
+ bl NNSi_GfdInitLnkVramMan
+ ldr r0, _020AFA78 ; =mgr_
+ ldr r1, _020AFA7C ; =mgr_ + 0x4
+ ldr r3, [r0, #0x8]
+ mov r2, #0x0
+ bl NNSi_GfdAddNewFreeBlock
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AFA78: .word mgr_
+_020AFA7C: .word mgr_ + 0x4
+ arm_func_end NNS_GfdResetLnkPlttVramState
+
+ arm_func_start NNS_GfdFreeLnkPlttVram
+NNS_GfdFreeLnkPlttVram: ; 0x020AFA80
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r1, #0x10000
+ rsb r2, r1, #0x0
+ ldr r1, _020AFAC8 ; =0x0000FFFF
+ and r2, r0, r2
+ and r12, r0, r1
+ mov r3, r2, lsr #0x10
+ ldr r0, _020AFACC ; =mgr_
+ ldr r1, _020AFAD0 ; =mgr_ + 0x4
+ mov r2, r12, lsl #0x3
+ mov r3, r3, lsl #0x3
+ bl NNSi_GfdFreeLnkVram
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AFAC8: .word 0x0000FFFF
+_020AFACC: .word mgr_
+_020AFAD0: .word mgr_ + 0x4
+ arm_func_end NNS_GfdFreeLnkPlttVram
+
+ arm_func_start NNS_GfdAllocLnkPlttVram
+NNS_GfdAllocLnkPlttVram: ; 0x020AFAD4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x8
+ cmp r0, #0x0
+ moveq r4, #0x8
+ addne r0, r0, #0x7
+ bicne r4, r0, #0x7
+ ldr r0, _020AFB98 ; =0x0007FFF8
+ cmp r4, r0
+ addcs sp, sp, #0x8
+ movcs r0, #0x0
+ ldmcsia sp!, {r4,pc}
+ cmp r1, #0x0
+ beq _020AFB50
+ mov r12, #0x8
+ ldr r0, _020AFB9C ; =mgr_
+ ldr r1, _020AFBA0 ; =mgr_ + 0x4
+ add r2, sp, #0x4
+ mov r3, r4
+ str r12, [sp, #0x0]
+ bl NNSi_GfdAllocLnkVramAligned
+ ldr r2, [sp, #0x4]
+ add r1, r2, r4
+ cmp r1, #0x10000
+ bls _020AFB6C
+ ldr r0, _020AFB9C ; =mgr_
+ ldr r1, _020AFBA0 ; =mgr_ + 0x4
+ mov r3, r4
+ bl NNSi_GfdFreeLnkVram
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+_020AFB50:
+ ldr r0, _020AFB9C ; =mgr_
+ mov r12, #0x10
+ ldr r1, _020AFBA0 ; =mgr_ + 0x4
+ add r2, sp, #0x4
+ mov r3, r4
+ str r12, [sp, #0x0]
+ bl NNSi_GfdAllocLnkVramAligned
+_020AFB6C:
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r1, [sp, #0x4]
+ ldr r0, _020AFBA4 ; =0x0000FFFF
+ mov r2, r4, lsr #0x3
+ and r0, r0, r1, lsr #0x3
+ orr r0, r0, r2, lsl #0x10
+ add sp, sp, #0x8
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AFB98: .word 0x0007FFF8
+_020AFB9C: .word mgr_
+_020AFBA0: .word mgr_ + 0x4
+_020AFBA4: .word 0x0000FFFF
+ arm_func_end NNS_GfdAllocLnkPlttVram
+
+ arm_func_start NNS_GfdInitLnkPlttVramManager
+NNS_GfdInitLnkPlttVramManager: ; 0x020AFBA8
+ stmdb sp!, {r4,lr}
+ ldr ip, _020AFBE8 ; =mgr_
+ mov r4, r3
+ str r0, [r12, #0x8]
+ str r1, [r12, #0xc]
+ str r2, [r12, #0x10]
+ bl NNS_GfdResetLnkPlttVramState
+ cmp r4, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r3, _020AFBEC ; =NNS_GfdAllocLnkPlttVram
+ ldr r1, _020AFBF0 ; =NNS_GfdDefaultFuncAllocPlttVram
+ ldr r2, _020AFBF4 ; =NNS_GfdFreeLnkPlttVram
+ ldr r0, _020AFBF8 ; =NNS_GfdDefaultFuncFreePlttVram
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020AFBE8: .word mgr_
+_020AFBEC: .word NNS_GfdAllocLnkPlttVram
+_020AFBF0: .word NNS_GfdDefaultFuncAllocPlttVram
+_020AFBF4: .word NNS_GfdFreeLnkPlttVram
+_020AFBF8: .word NNS_GfdDefaultFuncFreePlttVram
+ arm_func_end NNS_GfdInitLnkPlttVramManager
+
+ arm_func_start NNS_GfdGetLnkPlttVramManagerWorkSize
+NNS_GfdGetLnkPlttVramManagerWorkSize: ; 0x020AFBFC
+ mov r0, r0, lsl #0x4
+ bx lr
+ arm_func_end NNS_GfdGetLnkPlttVramManagerWorkSize
diff --git a/arm9/asm/NNS_GFD_gfd_linkedlistt.s b/arm9/asm/NNS_GFD_gfd_linkedlistt.s
new file mode 100644
index 00000000..6522bf3b
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_linkedlistt.s
@@ -0,0 +1,283 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global __LOCAL_LABEL__$7929
+__LOCAL_LABEL__$7929: ; 0x020FF864
+ .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
+ .section .bss
+
+mgr_: ; 0x021CCD6C
+ .space 0x1C
+
+ .section .text
+
+ arm_func_start NNS_GfdResetLnkTexVramState
+NNS_GfdResetLnkTexVramState: ; 0x020AF6A4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x30
+ ldr r6, _020AF884 ; =__LOCAL_LABEL__$7929
+ add r5, sp, #0x0
+ ldmia r6!, {r0-r3}
+ mov r12, r5
+ stmia r5!, {r0-r3}
+ ldmia r6!, {r0-r3}
+ stmia r5!, {r0-r3}
+ ldr r4, _020AF888 ; =mgr_
+ ldmia r6, {r0-r3}
+ stmia r5, {r0-r3}
+ ldr lr, [r4, #0x10]
+ ldr r1, [r4, #0xc]
+ add r0, lr, lr, lsr #0x1
+ mov r4, lr, lsr #0x1
+ sub r0, r1, r0
+ mov r3, #0x0
+_020AF6EC:
+ cmp r3, #0x0
+ beq _020AF6FC
+ cmp r3, #0x2
+ bne _020AF734
+_020AF6FC:
+ ldr r2, [r12, #0x0]
+ cmp r2, #0x0
+ beq _020AF734
+ cmp lr, #0x0
+ beq _020AF734
+ ldr r1, [r12, #0x8]
+ cmp r2, lr
+ movhi r2, lr
+ add r1, r1, r2
+ str r1, [r12, #0x8]
+ ldr r1, [r12, #0x0]
+ sub lr, lr, r2
+ sub r1, r1, r2
+ str r1, [r12, #0x0]
+_020AF734:
+ add r3, r3, #0x1
+ cmp r3, #0x4
+ add r12, r12, #0xc
+ blo _020AF6EC
+ ldr r1, [sp, #0xc]
+ add r5, sp, #0x0
+ sub r1, r1, r4
+ str r1, [sp, #0xc]
+ mov r3, #0x0
+_020AF758:
+ ldr r2, [r5, #0x0]
+ cmp r2, #0x0
+ beq _020AF790
+ cmp r0, #0x0
+ beq _020AF790
+ ldr r1, [r5, #0x4]
+ cmp r2, r0
+ movhi r2, r0
+ add r1, r1, r2
+ str r1, [r5, #0x4]
+ ldr r1, [r5, #0x0]
+ sub r0, r0, r2
+ sub r1, r1, r2
+ str r1, [r5, #0x0]
+_020AF790:
+ add r3, r3, #0x1
+ cmp r3, #0x4
+ add r5, r5, #0xc
+ blo _020AF758
+ ldr r0, _020AF888 ; =mgr_
+ bl NNSi_GfdInitLnkVramMan
+ ldr r0, _020AF88C ; =mgr_ + 0x4
+ bl NNSi_GfdInitLnkVramMan
+ ldr r0, _020AF888 ; =mgr_
+ ldr r1, [r0, #0x18]
+ ldr r0, [r0, #0x14]
+ mov r1, r1, lsr #0x4
+ bl NNSi_GfdInitLnkVramBlockPool
+ ldr r3, [sp, #0x8]
+ ldr r1, _020AF888 ; =mgr_
+ cmp r3, #0x0
+ str r0, [r1, #0x8]
+ beq _020AF7E8
+ ldr r0, _020AF88C ; =mgr_ + 0x4
+ ldr r1, _020AF890 ; =mgr_ + 0x8
+ mov r2, #0x0
+ bl NNSi_GfdAddNewFreeBlock
+_020AF7E8:
+ ldr r3, [sp, #0x4]
+ ldr r2, [sp, #0x8]
+ cmp r3, #0x0
+ beq _020AF804
+ ldr r0, _020AF888 ; =mgr_
+ ldr r1, _020AF890 ; =mgr_ + 0x8
+ bl NNSi_GfdAddNewFreeBlock
+_020AF804:
+ ldr r3, [sp, #0x20]
+ cmp r3, #0x0
+ beq _020AF820
+ ldr r0, _020AF88C ; =mgr_ + 0x4
+ ldr r1, _020AF890 ; =mgr_ + 0x8
+ mov r2, #0x40000
+ bl NNSi_GfdAddNewFreeBlock
+_020AF820:
+ ldr r3, [sp, #0x1c]
+ ldr r0, [sp, #0x20]
+ cmp r3, #0x0
+ add r2, r0, #0x40000
+ beq _020AF840
+ ldr r0, _020AF888 ; =mgr_
+ ldr r1, _020AF890 ; =mgr_ + 0x8
+ bl NNSi_GfdAddNewFreeBlock
+_020AF840:
+ ldr r3, [sp, #0x28]
+ cmp r3, #0x0
+ beq _020AF85C
+ ldr r0, _020AF888 ; =mgr_
+ ldr r1, _020AF890 ; =mgr_ + 0x8
+ mov r2, #0x60000
+ bl NNSi_GfdAddNewFreeBlock
+_020AF85C:
+ ldr r3, [sp, #0x10]
+ cmp r3, #0x0
+ addeq sp, sp, #0x30
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r0, _020AF888 ; =mgr_
+ ldr r1, _020AF890 ; =mgr_ + 0x8
+ add r2, r4, #0x20000
+ bl NNSi_GfdAddNewFreeBlock
+ add sp, sp, #0x30
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AF884: .word __LOCAL_LABEL__$7929
+_020AF888: .word mgr_
+_020AF88C: .word mgr_ + 0x4
+_020AF890: .word mgr_ + 0x8
+ arm_func_end NNS_GfdResetLnkTexVramState
+
+ arm_func_start NNS_GfdFreeLnkTexVram
+NNS_GfdFreeLnkTexVram: ; 0x020AF894
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, _020AF908 ; =0x7FFF0000
+ ldr r1, _020AF90C ; =0x0000FFFF
+ and r2, r0, r2
+ and r3, r0, r1
+ mov r1, r2, lsr #0x10
+ and r0, r0, #0x80000000
+ mov r2, r3, lsl #0x3
+ movs r3, r1, lsl #0x4
+ mov r0, r0, lsr #0x1f
+ beq _020AF8FC
+ cmp r0, #0x0
+ beq _020AF8DC
+ ldr r0, _020AF910 ; =mgr_ + 0x4
+ ldr r1, _020AF914 ; =mgr_ + 0x8
+ bl NNSi_GfdFreeLnkVram
+ b _020AF8E8
+_020AF8DC:
+ ldr r0, _020AF918 ; =mgr_
+ ldr r1, _020AF914 ; =mgr_ + 0x8
+ bl NNSi_GfdFreeLnkVram
+_020AF8E8:
+ cmp r0, #0x0
+ movne r0, #0x0
+ add sp, sp, #0x4
+ moveq r0, #0x1
+ ldmia sp!, {pc}
+_020AF8FC:
+ mov r0, #0x2
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AF908: .word 0x7FFF0000
+_020AF90C: .word 0x0000FFFF
+_020AF910: .word mgr_ + 0x4
+_020AF914: .word mgr_ + 0x8
+_020AF918: .word mgr_
+ arm_func_end NNS_GfdFreeLnkTexVram
+
+ arm_func_start NNS_GfdAllocLnkTexVram
+NNS_GfdAllocLnkTexVram: ; 0x020AF91C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ moveq r5, #0x10
+ addne r0, r0, #0xf
+ bicne r5, r0, #0xf
+ ldr r0, _020AF9B0 ; =0x0007FFF0
+ mov r4, r1
+ cmp r5, r0
+ addcs sp, sp, #0x4
+ movcs r0, #0x0
+ ldmcsia sp!, {r4-r5,pc}
+ cmp r4, #0x0
+ beq _020AF96C
+ ldr r0, _020AF9B4 ; =mgr_ + 0x4
+ ldr r1, _020AF9B8 ; =mgr_ + 0x8
+ add r2, sp, #0x0
+ mov r3, r5
+ bl NNSi_GfdAllocLnkVram
+ b _020AF980
+_020AF96C:
+ ldr r0, _020AF9BC ; =mgr_
+ ldr r1, _020AF9B8 ; =mgr_ + 0x8
+ add r2, sp, #0x0
+ mov r3, r5
+ bl NNSi_GfdAllocLnkVram
+_020AF980:
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r1, [sp, #0x0]
+ ldr r0, _020AF9C0 ; =0x0000FFFF
+ mov r2, r5, lsr #0x4
+ and r0, r0, r1, lsr #0x3
+ orr r0, r0, r2, lsl #0x10
+ orr r0, r0, r4, lsl #0x1f
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AF9B0: .word 0x0007FFF0
+_020AF9B4: .word mgr_ + 0x4
+_020AF9B8: .word mgr_ + 0x8
+_020AF9BC: .word mgr_
+_020AF9C0: .word 0x0000FFFF
+ arm_func_end NNS_GfdAllocLnkTexVram
+
+ arm_func_start NNS_GfdInitLnkTexVramManager
+NNS_GfdInitLnkTexVramManager: ; 0x020AF9C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr ip, _020AFA14 ; =mgr_
+ str r0, [r12, #0xc]
+ str r1, [r12, #0x10]
+ str r2, [r12, #0x14]
+ str r3, [r12, #0x18]
+ bl NNS_GfdResetLnkTexVramState
+ ldr r0, [sp, #0x8]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r3, _020AFA18 ; =NNS_GfdAllocLnkTexVram
+ ldr r1, _020AFA1C ; =NNS_GfdDefaultFuncAllocTexVram
+ ldr r2, _020AFA20 ; =NNS_GfdFreeLnkTexVram
+ ldr r0, _020AFA24 ; =NNS_GfdDefaultFuncFreeTexVram
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020AFA14: .word mgr_
+_020AFA18: .word NNS_GfdAllocLnkTexVram
+_020AFA1C: .word NNS_GfdDefaultFuncAllocTexVram
+_020AFA20: .word NNS_GfdFreeLnkTexVram
+_020AFA24: .word NNS_GfdDefaultFuncFreeTexVram
+ arm_func_end NNS_GfdInitLnkTexVramManager
+
+ arm_func_start NNS_GfdGetLnkTexVramManagerWorkSize
+NNS_GfdGetLnkTexVramManagerWorkSize: ; 0x020AFA28
+ mov r0, r0, lsl #0x4
+ bx lr
+ arm_func_end NNS_GfdGetLnkTexVramManagerWorkSize
diff --git a/arm9/asm/NNS_GFD_gfd_plttvramman.s b/arm9/asm/NNS_GFD_gfd_plttvramman.s
new file mode 100644
index 00000000..c869a9a1
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_plttvramman.s
@@ -0,0 +1,26 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global NNS_GfdDefaultFuncAllocPlttVram
+NNS_GfdDefaultFuncAllocPlttVram: ; 0x021064C0
+ .word AllocPlttVram_
+
+ .global NNS_GfdDefaultFuncFreePlttVram
+NNS_GfdDefaultFuncFreePlttVram: ; 0x021064C4
+ .word FreePlttVram_
+
+ .section .text
+
+ arm_func_start FreePlttVram_
+FreePlttVram_: ; 0x020AE8BC
+ mvn r0, #0x0
+ bx lr
+ arm_func_end FreePlttVram_
+
+ arm_func_start AllocPlttVram_
+AllocPlttVram_: ; 0x020AE8C4
+ mov r0, #0x0
+ bx lr
+ arm_func_end AllocPlttVram_
diff --git a/arm9/asm/NNS_GFD_gfd_texvramman.s b/arm9/asm/NNS_GFD_gfd_texvramman.s
new file mode 100644
index 00000000..d2f6c88f
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_texvramman.s
@@ -0,0 +1,26 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global NNS_GfdDefaultFuncAllocTexVram
+NNS_GfdDefaultFuncAllocTexVram: ; 0x021064B8
+ .word AllocTexVram_
+
+ .global NNS_GfdDefaultFuncFreeTexVram
+NNS_GfdDefaultFuncFreeTexVram: ; 0x021064BC
+ .word FreeTexVram_
+
+ .section .text
+
+ arm_func_start FreeTexVram_
+FreeTexVram_: ; 0x020AE8AC
+ mvn r0, #0x0
+ bx lr
+ arm_func_end FreeTexVram_
+
+ arm_func_start AllocTexVram_
+AllocTexVram_: ; 0x020AE8B4
+ mov r0, #0x0
+ bx lr
+ arm_func_end AllocTexVram_
diff --git a/arm9/asm/NNS_GFD_gfd_vramtransfe.s b/arm9/asm/NNS_GFD_gfd_vramtransfe.s
new file mode 100644
index 00000000..9e3a8863
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfd_vramtransfe.s
@@ -0,0 +1,592 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .rodata
+
+ .global transFunc$7934
+transFunc$7934: ; 0x020FF7D4
+ .word DoTransfer3dTex
+ .word DoTransfer3dTexPltt
+ .word DoTransfer3dClearImageColor
+ .word DoTransfer3dClearImageDepth
+ .word DoTransfer2dBG0CharMain
+ .word DoTransfer2dBG1CharMain
+ .word DoTransfer2dBG2CharMain
+ .word DoTransfer2dBG3CharMain
+ .word DoTransfer2dBG0ScrMain
+ .word DoTransfer2dBG1ScrMain
+ .word DoTransfer2dBG2ScrMain
+ .word DoTransfer2dBG3ScrMain
+ .word DoTransfer2dBG2BmpMain
+ .word DoTransfer2dBG3BmpMain
+ .word DoTransfer2dObjPlttMain
+ .word DoTransfer2dBGPlttMain
+ .word DoTransfer2dObjExtPlttMain
+ .word DoTransfer2dBGExtPlttMain
+ .word DoTransfer2dObjOamMain
+ .word DoTransfer2dObjCharMain
+ .word DoTransfer2dBG0CharSub
+ .word DoTransfer2dBG1CharSub
+ .word DoTransfer2dBG2CharSub
+ .word DoTransfer2dBG3CharSub
+ .word DoTransfer2dBG0ScrSub
+ .word DoTransfer2dBG1ScrSub
+ .word DoTransfer2dBG2ScrSub
+ .word DoTransfer2dBG3ScrSub
+ .word DoTransfer2dBG2BmpSub
+ .word DoTransfer2dBG3BmpSub
+ .word DoTransfer2dObjPlttSub
+ .word DoTransfer2dBGPlttSub
+ .word DoTransfer2dObjExtPlttSub
+ .word DoTransfer2dBGExtPlttSub
+ .word DoTransfer2dObjOamSub
+ .word DoTransfer2dObjCharSub
+ ; const initializer
+
+ .section .bss
+
+ .global s_VramTransferManager
+s_VramTransferManager: ; 0x021CCD58
+ .space 0x14
+
+ .section .text
+
+ arm_func_start NNS_GfdRegisterNewVramTransferTask
+NNS_GfdRegisterNewVramTransferTask: ; 0x020AEE40
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020AEEB4 ; =s_VramTransferManager
+ mov r9, r0
+ mov r0, r5
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl IsVramTransferTaskQueueFull_
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+ mov r0, r5
+ bl NNSi_GfdGetEndVramTransferTaskQueue
+ mov r4, r0
+ str r9, [r4, #0x0]
+ str r7, [r4, #0x4]
+ str r8, [r4, #0x8]
+ mov r0, r5
+ str r6, [r4, #0xc]
+ bl NNSi_GfdPushVramTransferTaskQueue
+ ldr r2, [r5, #0x10]
+ ldr r1, [r4, #0xc]
+ mov r0, #0x1
+ add r1, r2, r1
+ str r1, [r5, #0x10]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020AEEB4: .word s_VramTransferManager
+ arm_func_end NNS_GfdRegisterNewVramTransferTask
+
+ arm_func_start NNS_GfdDoVramTransfer
+NNS_GfdDoVramTransfer: ; 0x020AEEB8
+ stmdb sp!, {r4-r6,lr}
+ ldr r6, _020AEF18 ; =s_VramTransferManager
+ mov r0, r6
+ bl NNSi_GfdGetFrontVramTransferTaskQueue
+ mov r5, r0
+ mov r0, r6
+ bl NNSi_GfdPopVramTransferTaskQueue
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ add r4, r6, #0x10
+_020AEEE0:
+ mov r0, r5
+ bl DoTransfer_
+ ldr r2, [r4, #0x0]
+ ldr r1, [r5, #0xc]
+ mov r0, r6
+ sub r1, r2, r1
+ str r1, [r4, #0x0]
+ bl NNSi_GfdGetFrontVramTransferTaskQueue
+ mov r5, r0
+ mov r0, r6
+ bl NNSi_GfdPopVramTransferTaskQueue
+ cmp r0, #0x0
+ bne _020AEEE0
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020AEF18: .word s_VramTransferManager
+ arm_func_end NNS_GfdDoVramTransfer
+
+ arm_func_start NNS_GfdInitVramTransferManager
+NNS_GfdInitVramTransferManager: ; 0x020AEF1C
+ ldr r2, _020AEF34 ; =s_VramTransferManager
+ ldr ip, _020AEF38 ; =ResetTaskQueue_
+ str r0, [r2, #0x0]
+ mov r0, r2
+ str r1, [r2, #0x4]
+ bx r12
+ .balign 4
+_020AEF34: .word s_VramTransferManager
+_020AEF38: .word ResetTaskQueue_
+ arm_func_end NNS_GfdInitVramTransferManager
+
+ arm_func_start NNSi_GfdPopVramTransferTaskQueue
+NNSi_GfdPopVramTransferTaskQueue: ; 0x020AEF3C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl IsVramTransferTaskQueueEmpty_
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+ ldrh r1, [r4, #0x8]
+ mov r0, r4
+ bl GetNextIndex_
+ strh r0, [r4, #0x8]
+ ldrh r1, [r4, #0xc]
+ mov r0, #0x1
+ sub r1, r1, #0x1
+ strh r1, [r4, #0xc]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_GfdPopVramTransferTaskQueue
+
+ arm_func_start NNSi_GfdGetEndVramTransferTaskQueue
+NNSi_GfdGetEndVramTransferTaskQueue: ; 0x020AEF78
+ ldrh r1, [r0, #0xa]
+ ldr r0, [r0, #0x0]
+ add r0, r0, r1, lsl #0x4
+ bx lr
+ arm_func_end NNSi_GfdGetEndVramTransferTaskQueue
+
+ arm_func_start NNSi_GfdGetFrontVramTransferTaskQueue
+NNSi_GfdGetFrontVramTransferTaskQueue: ; 0x020AEF88
+ ldrh r1, [r0, #0x8]
+ ldr r0, [r0, #0x0]
+ add r0, r0, r1, lsl #0x4
+ bx lr
+ arm_func_end NNSi_GfdGetFrontVramTransferTaskQueue
+
+ arm_func_start NNSi_GfdPushVramTransferTaskQueue
+NNSi_GfdPushVramTransferTaskQueue: ; 0x020AEF98
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl IsVramTransferTaskQueueFull_
+ cmp r0, #0x0
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+ ldrh r1, [r4, #0xa]
+ mov r0, r4
+ bl GetNextIndex_
+ strh r0, [r4, #0xa]
+ ldrh r1, [r4, #0xc]
+ mov r0, #0x1
+ add r1, r1, #0x1
+ strh r1, [r4, #0xc]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_GfdPushVramTransferTaskQueue
+
+ arm_func_start ResetTaskQueue_
+ResetTaskQueue_: ; 0x020AEFD4
+ mov r2, #0x0
+ strh r2, [r0, #0xa]
+ ldrh r1, [r0, #0xa]
+ strh r1, [r0, #0x8]
+ strh r2, [r0, #0xc]
+ str r2, [r0, #0x10]
+ bx lr
+ arm_func_end ResetTaskQueue_
+
+ arm_func_start DoTransfer_
+DoTransfer_: ; 0x020AEFF0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r3, [r5, #0x0]
+ ldr r2, _020AF02C ; =transFunc$7934
+ ldr r0, [r5, #0x4]
+ ldr r1, [r5, #0xc]
+ ldr r4, [r2, r3, lsl #0x2]
+ bl DC_FlushRange
+ ldr r0, [r5, #0x4]
+ ldr r1, [r5, #0x8]
+ ldr r2, [r5, #0xc]
+ blx r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020AF02C: .word transFunc$7934
+ arm_func_end DoTransfer_
+DoTransfer2dObjCharSub:
+ ldr ip, _020AF038 ; =GXS_LoadOBJ
+ bx r12
+ .balign 4
+_020AF038: .word GXS_LoadOBJ
+ arm_func_end DoTransfer2dObjCharSub
+
+ arm_func_start DoTransfer2dObjOamSub
+DoTransfer2dObjOamSub: ; 0x020AF03C
+ ldr ip, _020AF044 ; =GXS_LoadOAM
+ bx r12
+ .balign 4
+_020AF044: .word GXS_LoadOAM
+ arm_func_end DoTransfer2dObjOamSub
+
+ arm_func_start DoTransfer2dBGExtPlttSub
+DoTransfer2dBGExtPlttSub: ; 0x020AF048
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GXS_BeginLoadBGExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GXS_LoadBGExtPltt
+ bl GXS_EndLoadBGExtPltt
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end DoTransfer2dBGExtPlttSub
+
+ arm_func_start DoTransfer2dObjExtPlttSub
+DoTransfer2dObjExtPlttSub: ; 0x020AF074
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GXS_BeginLoadOBJExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GXS_LoadOBJExtPltt
+ bl GXS_EndLoadOBJExtPltt
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end DoTransfer2dObjExtPlttSub
+
+ arm_func_start DoTransfer2dBGPlttSub
+DoTransfer2dBGPlttSub: ; 0x020AF0A0
+ ldr ip, _020AF0A8 ; =GXS_LoadBGPltt
+ bx r12
+ .balign 4
+_020AF0A8: .word GXS_LoadBGPltt
+ arm_func_end DoTransfer2dBGPlttSub
+
+ arm_func_start DoTransfer2dObjPlttSub
+DoTransfer2dObjPlttSub: ; 0x020AF0AC
+ ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt
+ bx r12
+ .balign 4
+_020AF0B4: .word GXS_LoadOBJPltt
+ arm_func_end DoTransfer2dObjPlttSub
+
+ arm_func_start DoTransfer2dBG3BmpSub
+DoTransfer2dBG3BmpSub: ; 0x020AF0B8
+ ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF0C0: .word GXS_LoadBG3Scr
+ arm_func_end DoTransfer2dBG3BmpSub
+
+ arm_func_start DoTransfer2dBG2BmpSub
+DoTransfer2dBG2BmpSub: ; 0x020AF0C4
+ ldr ip, _020AF0CC ; =GXS_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF0CC: .word GXS_LoadBG2Scr
+ arm_func_end DoTransfer2dBG2BmpSub
+
+ arm_func_start DoTransfer2dBG3ScrSub
+DoTransfer2dBG3ScrSub: ; 0x020AF0D0
+ ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF0D8: .word GXS_LoadBG3Scr
+ arm_func_end DoTransfer2dBG3ScrSub
+
+ arm_func_start DoTransfer2dBG2ScrSub
+DoTransfer2dBG2ScrSub: ; 0x020AF0DC
+ ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF0E4: .word GXS_LoadBG2Scr
+ arm_func_end DoTransfer2dBG2ScrSub
+
+ arm_func_start DoTransfer2dBG1ScrSub
+DoTransfer2dBG1ScrSub: ; 0x020AF0E8
+ ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr
+ bx r12
+ .balign 4
+_020AF0F0: .word GXS_LoadBG1Scr
+ arm_func_end DoTransfer2dBG1ScrSub
+
+ arm_func_start DoTransfer2dBG0ScrSub
+DoTransfer2dBG0ScrSub: ; 0x020AF0F4
+ ldr ip, _020AF0FC ; =GXS_LoadBG0Scr
+ bx r12
+ .balign 4
+_020AF0FC: .word GXS_LoadBG0Scr
+ arm_func_end DoTransfer2dBG0ScrSub
+
+ arm_func_start DoTransfer2dBG3CharSub
+DoTransfer2dBG3CharSub: ; 0x020AF100
+ ldr ip, _020AF108 ; =GXS_LoadBG3Char
+ bx r12
+ .balign 4
+_020AF108: .word GXS_LoadBG3Char
+ arm_func_end DoTransfer2dBG3CharSub
+
+ arm_func_start DoTransfer2dBG2CharSub
+DoTransfer2dBG2CharSub: ; 0x020AF10C
+ ldr ip, _020AF114 ; =GXS_LoadBG2Char
+ bx r12
+ .balign 4
+_020AF114: .word GXS_LoadBG2Char
+ arm_func_end DoTransfer2dBG2CharSub
+
+ arm_func_start DoTransfer2dBG1CharSub
+DoTransfer2dBG1CharSub: ; 0x020AF118
+ ldr ip, _020AF120 ; =GXS_LoadBG1Char
+ bx r12
+ .balign 4
+_020AF120: .word GXS_LoadBG1Char
+ arm_func_end DoTransfer2dBG1CharSub
+
+ arm_func_start DoTransfer2dBG0CharSub
+DoTransfer2dBG0CharSub: ; 0x020AF124
+ ldr ip, _020AF12C ; =GXS_LoadBG0Char
+ bx r12
+ .balign 4
+_020AF12C: .word GXS_LoadBG0Char
+ arm_func_end DoTransfer2dBG0CharSub
+
+ arm_func_start DoTransfer2dObjCharMain
+DoTransfer2dObjCharMain: ; 0x020AF130
+ ldr ip, _020AF138 ; =GX_LoadOBJ
+ bx r12
+ .balign 4
+_020AF138: .word GX_LoadOBJ
+ arm_func_end DoTransfer2dObjCharMain
+
+ arm_func_start DoTransfer2dObjOamMain
+DoTransfer2dObjOamMain: ; 0x020AF13C
+ ldr ip, _020AF144 ; =GX_LoadOAM
+ bx r12
+ .balign 4
+_020AF144: .word GX_LoadOAM
+ arm_func_end DoTransfer2dObjOamMain
+
+ arm_func_start DoTransfer2dBGExtPlttMain
+DoTransfer2dBGExtPlttMain: ; 0x020AF148
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadBGExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadBGExtPltt
+ bl GX_EndLoadBGExtPltt
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end DoTransfer2dBGExtPlttMain
+
+ arm_func_start DoTransfer2dObjExtPlttMain
+DoTransfer2dObjExtPlttMain: ; 0x020AF174
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadOBJExtPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadOBJExtPltt
+ bl GX_EndLoadOBJExtPltt
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end DoTransfer2dObjExtPlttMain
+
+ arm_func_start DoTransfer2dBGPlttMain
+DoTransfer2dBGPlttMain: ; 0x020AF1A0
+ ldr ip, _020AF1A8 ; =GX_LoadBGPltt
+ bx r12
+ .balign 4
+_020AF1A8: .word GX_LoadBGPltt
+ arm_func_end DoTransfer2dBGPlttMain
+
+ arm_func_start DoTransfer2dObjPlttMain
+DoTransfer2dObjPlttMain: ; 0x020AF1AC
+ ldr ip, _020AF1B4 ; =GX_LoadOBJPltt
+ bx r12
+ .balign 4
+_020AF1B4: .word GX_LoadOBJPltt
+ arm_func_end DoTransfer2dObjPlttMain
+
+ arm_func_start DoTransfer2dBG3BmpMain
+DoTransfer2dBG3BmpMain: ; 0x020AF1B8
+ ldr ip, _020AF1C0 ; =GX_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF1C0: .word GX_LoadBG3Scr
+ arm_func_end DoTransfer2dBG3BmpMain
+
+ arm_func_start DoTransfer2dBG2BmpMain
+DoTransfer2dBG2BmpMain: ; 0x020AF1C4
+ ldr ip, _020AF1CC ; =GX_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF1CC: .word GX_LoadBG2Scr
+ arm_func_end DoTransfer2dBG2BmpMain
+
+ arm_func_start DoTransfer2dBG3ScrMain
+DoTransfer2dBG3ScrMain: ; 0x020AF1D0
+ ldr ip, _020AF1D8 ; =GX_LoadBG3Scr
+ bx r12
+ .balign 4
+_020AF1D8: .word GX_LoadBG3Scr
+ arm_func_end DoTransfer2dBG3ScrMain
+
+ arm_func_start DoTransfer2dBG2ScrMain
+DoTransfer2dBG2ScrMain: ; 0x020AF1DC
+ ldr ip, _020AF1E4 ; =GX_LoadBG2Scr
+ bx r12
+ .balign 4
+_020AF1E4: .word GX_LoadBG2Scr
+ arm_func_end DoTransfer2dBG2ScrMain
+
+ arm_func_start DoTransfer2dBG1ScrMain
+DoTransfer2dBG1ScrMain: ; 0x020AF1E8
+ ldr ip, _020AF1F0 ; =GX_LoadBG1Scr
+ bx r12
+ .balign 4
+_020AF1F0: .word GX_LoadBG1Scr
+ arm_func_end DoTransfer2dBG1ScrMain
+
+ arm_func_start DoTransfer2dBG0ScrMain
+DoTransfer2dBG0ScrMain: ; 0x020AF1F4
+ ldr ip, _020AF1FC ; =GX_LoadBG0Scr
+ bx r12
+ .balign 4
+_020AF1FC: .word GX_LoadBG0Scr
+ arm_func_end DoTransfer2dBG0ScrMain
+
+ arm_func_start DoTransfer2dBG3CharMain
+DoTransfer2dBG3CharMain: ; 0x020AF200
+ ldr ip, _020AF208 ; =GX_LoadBG3Char
+ bx r12
+ .balign 4
+_020AF208: .word GX_LoadBG3Char
+ arm_func_end DoTransfer2dBG3CharMain
+
+ arm_func_start DoTransfer2dBG2CharMain
+DoTransfer2dBG2CharMain: ; 0x020AF20C
+ ldr ip, _020AF214 ; =GX_LoadBG2Char
+ bx r12
+ .balign 4
+_020AF214: .word GX_LoadBG2Char
+ arm_func_end DoTransfer2dBG2CharMain
+
+ arm_func_start DoTransfer2dBG1CharMain
+DoTransfer2dBG1CharMain: ; 0x020AF218
+ ldr ip, _020AF220 ; =GX_LoadBG1Char
+ bx r12
+ .balign 4
+_020AF220: .word GX_LoadBG1Char
+ arm_func_end DoTransfer2dBG1CharMain
+
+ arm_func_start DoTransfer2dBG0CharMain
+DoTransfer2dBG0CharMain: ; 0x020AF224
+ ldr ip, _020AF22C ; =GX_LoadBG0Char
+ bx r12
+ .balign 4
+_020AF22C: .word GX_LoadBG0Char
+ arm_func_end DoTransfer2dBG0CharMain
+
+ arm_func_start DoTransfer3dClearImageDepth
+DoTransfer3dClearImageDepth: ; 0x020AF230
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r2
+ bl GX_BeginLoadClearImage
+ mov r0, r5
+ mov r1, r4
+ bl GX_LoadClearImageDepth
+ bl GX_EndLoadClearImage
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end DoTransfer3dClearImageDepth
+
+ arm_func_start DoTransfer3dClearImageColor
+DoTransfer3dClearImageColor: ; 0x020AF25C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r2
+ bl GX_BeginLoadClearImage
+ mov r0, r5
+ mov r1, r4
+ bl GX_LoadClearImageColor
+ bl GX_EndLoadClearImage
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ arm_func_end DoTransfer3dClearImageColor
+
+ arm_func_start DoTransfer3dTexPltt
+DoTransfer3dTexPltt: ; 0x020AF288
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadTexPltt
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadTexPltt
+ bl GX_EndLoadTexPltt
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end DoTransfer3dTexPltt
+
+ arm_func_start DoTransfer3dTex
+DoTransfer3dTex: ; 0x020AF2B4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl GX_BeginLoadTex
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl GX_LoadTex
+ bl GX_EndLoadTex
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end DoTransfer3dTex
+
+ arm_func_start IsVramTransferTaskQueueEmpty_
+IsVramTransferTaskQueueEmpty_: ; 0x020AF2E0
+ ldrh r0, [r0, #0xc]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+ arm_func_end IsVramTransferTaskQueueEmpty_
+
+ arm_func_start IsVramTransferTaskQueueFull_
+IsVramTransferTaskQueueFull_: ; 0x020AF2F4
+ ldrh r1, [r0, #0xc]
+ ldr r0, [r0, #0x4]
+ cmp r1, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ bx lr
+ arm_func_end IsVramTransferTaskQueueFull_
+
+ arm_func_start GetNextIndex_
+GetNextIndex_: ; 0x020AF30C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r0
+ add r0, r1, #0x1
+ ldr r1, [r2, #0x4]
+ bl _u32_div_f
+ mov r0, r1, lsl #0x10
+ mov r0, r0, lsr #0x10
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end GetNextIndex_
diff --git a/arm9/asm/NNS_GFD_gfdi_linkedlist.s b/arm9/asm/NNS_GFD_gfdi_linkedlist.s
new file mode 100644
index 00000000..125a146e
--- /dev/null
+++ b/arm9/asm/NNS_GFD_gfdi_linkedlist.s
@@ -0,0 +1,261 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_GfdFreeLnkVram
+NNSi_GfdFreeLnkVram: ; 0x020AF334
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x10
+ add r3, r2, r3
+ str r2, [sp, #0x0]
+ str r2, [sp, #0x8]
+ str r3, [sp, #0x4]
+ str r3, [sp, #0xc]
+ ldr r3, [r0, #0x0]
+ add r12, sp, #0x0
+ cmp r3, #0x0
+ beq _020AF418
+ mov r6, #0x0
+_020AF364:
+ ldr r5, [r3, #0x0]
+ ldr r4, [r12, #0x4]
+ ldr r2, [r3, #0xc]
+ cmp r5, r4
+ bne _020AF3B8
+ ldr r4, [r3, #0x4]
+ add r4, r5, r4
+ str r4, [sp, #0xc]
+ ldr r4, [r3, #0x8]
+ cmp r4, #0x0
+ strne r2, [r4, #0xc]
+ streq r2, [r0, #0x0]
+ cmp r2, #0x0
+ strne r4, [r2, #0x8]
+ ldr r4, [r1, #0x0]
+ cmp r4, #0x0
+ strne r3, [r4, #0x8]
+ ldr r4, [r1, #0x0]
+ str r4, [r3, #0xc]
+ str r6, [r3, #0x8]
+ str r3, [r1, #0x0]
+_020AF3B8:
+ ldr r5, [r3, #0x0]
+ ldr lr, [r3, #0x4]
+ ldr r4, [r12, #0x0]
+ add lr, r5, lr
+ cmp r4, lr
+ bne _020AF40C
+ str r5, [sp, #0x8]
+ ldr r5, [r3, #0x8]
+ ldr r4, [r3, #0xc]
+ cmp r5, #0x0
+ strne r4, [r5, #0xc]
+ streq r4, [r0, #0x0]
+ cmp r4, #0x0
+ strne r5, [r4, #0x8]
+ ldr lr, [r1, #0x0]
+ cmp lr, #0x0
+ strne r3, [lr, #0x8]
+ ldr lr, [r1, #0x0]
+ str lr, [r3, #0xc]
+ str r6, [r3, #0x8]
+ str r3, [r1, #0x0]
+_020AF40C:
+ mov r3, r2
+ cmp r2, #0x0
+ bne _020AF364
+_020AF418:
+ ldr r4, [r1, #0x0]
+ cmp r4, #0x0
+ ldrne r2, [r4, #0xc]
+ strne r2, [r1, #0x0]
+ cmp r4, #0x0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, [sp, #0x8]
+ mov r1, #0x0
+ str r2, [r4, #0x0]
+ ldr r3, [sp, #0xc]
+ ldr r2, [sp, #0x8]
+ sub r2, r3, r2
+ str r2, [r4, #0x4]
+ str r1, [r4, #0x8]
+ str r1, [r4, #0xc]
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ strne r4, [r1, #0x8]
+ ldr r2, [r0, #0x0]
+ mov r1, #0x0
+ str r2, [r4, #0xc]
+ str r1, [r4, #0x8]
+ str r4, [r0, #0x0]
+ mov r0, #0x1
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r6,pc}
+ arm_func_end NNSi_GfdFreeLnkVram
+
+ arm_func_start NNSi_GfdAllocLnkVramAligned
+NNSi_GfdAllocLnkVramAligned: ; 0x020AF488
+ stmdb sp!, {r4-r10,lr}
+ ldr r4, [r0, #0x0]
+ ldr r9, [sp, #0x20]
+ cmp r4, #0x0
+ mov r5, #0x0
+ beq _020AF4EC
+ sub r12, r9, #0x1
+ mvn lr, r12
+_020AF4A8:
+ cmp r9, #0x1
+ ldrls r8, [r4, #0x0]
+ movls r6, r5
+ movls r7, r3
+ bls _020AF4D0
+ ldr r7, [r4, #0x0]
+ add r6, r7, r12
+ and r8, lr, r6
+ sub r6, r8, r7
+ add r7, r3, r6
+_020AF4D0:
+ ldr r10, [r4, #0x4]
+ cmp r10, r7
+ movcs r5, r4
+ bhs _020AF4EC
+ ldr r4, [r4, #0xc]
+ cmp r4, #0x0
+ bne _020AF4A8
+_020AF4EC:
+ cmp r5, #0x0
+ beq _020AF5B8
+ cmp r6, #0x0
+ beq _020AF54C
+ ldr r9, [r1, #0x0]
+ cmp r9, #0x0
+ ldrne r3, [r9, #0xc]
+ strne r3, [r1, #0x0]
+ cmp r9, #0x0
+ beq _020AF5B8
+ ldr r4, [r5, #0x0]
+ mov r3, #0x0
+ str r4, [r9, #0x0]
+ str r6, [r9, #0x4]
+ str r3, [r9, #0x8]
+ str r3, [r9, #0xc]
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ strne r9, [r3, #0x8]
+ ldr r4, [r0, #0x0]
+ mov r3, #0x0
+ str r4, [r9, #0xc]
+ str r3, [r9, #0x8]
+ str r9, [r0, #0x0]
+_020AF54C:
+ ldr r3, [r5, #0x4]
+ sub r3, r3, r7
+ str r3, [r5, #0x4]
+ ldr r3, [r5, #0x0]
+ add r3, r3, r7
+ str r3, [r5, #0x0]
+ ldr r3, [r5, #0x4]
+ cmp r3, #0x0
+ bne _020AF5AC
+ ldr r4, [r5, #0x8]
+ ldr r3, [r5, #0xc]
+ cmp r4, #0x0
+ strne r3, [r4, #0xc]
+ streq r3, [r0, #0x0]
+ cmp r3, #0x0
+ strne r4, [r3, #0x8]
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ strne r5, [r0, #0x8]
+ ldr r3, [r1, #0x0]
+ mov r0, #0x0
+ str r3, [r5, #0xc]
+ str r0, [r5, #0x8]
+ str r5, [r1, #0x0]
+_020AF5AC:
+ str r8, [r2, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {r4-r10,pc}
+_020AF5B8:
+ mov r0, #0x0
+ str r0, [r2, #0x0]
+ ldmia sp!, {r4-r10,pc}
+ arm_func_end NNSi_GfdAllocLnkVramAligned
+
+ arm_func_start NNSi_GfdAllocLnkVram
+NNSi_GfdAllocLnkVram: ; 0x020AF5C4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ str r12, [sp, #0x0]
+ bl NNSi_GfdAllocLnkVramAligned
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNSi_GfdAllocLnkVram
+
+ arm_func_start NNSi_GfdAddNewFreeBlock
+NNSi_GfdAddNewFreeBlock: ; 0x020AF5E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr lr, [r1, #0x0]
+ cmp lr, #0x0
+ ldrne r12, [lr, #0xc]
+ strne r12, [r1, #0x0]
+ cmp lr, #0x0
+ beq _020AF640
+ str r2, [lr, #0x0]
+ str r3, [lr, #0x4]
+ mov r1, #0x0
+ str r1, [lr, #0x8]
+ str r1, [lr, #0xc]
+ ldr r1, [r0, #0x0]
+ add sp, sp, #0x4
+ cmp r1, #0x0
+ strne lr, [r1, #0x8]
+ ldr r2, [r0, #0x0]
+ mov r1, #0x0
+ str r2, [lr, #0xc]
+ str r1, [lr, #0x8]
+ str lr, [r0, #0x0]
+ mov r0, #0x1
+ ldmia sp!, {pc}
+_020AF640:
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ arm_func_end NNSi_GfdAddNewFreeBlock
+
+ arm_func_start NNSi_GfdInitLnkVramBlockPool
+NNSi_GfdInitLnkVramBlockPool: ; 0x020AF64C
+ stmdb sp!, {r4,lr}
+ subs lr, r1, #0x1
+ mov r2, #0x0
+ beq _020AF684
+ mov r4, r0
+_020AF660:
+ add r12, r2, #0x1
+ add r2, r0, r2, lsl #0x4
+ add r3, r0, r12, lsl #0x4
+ str r3, [r2, #0xc]
+ str r4, [r3, #0x8]
+ mov r2, r12
+ cmp r12, lr
+ add r4, r4, #0x10
+ blo _020AF660
+_020AF684:
+ mov r2, #0x0
+ str r2, [r0, #0x8]
+ add r1, r0, r1, lsl #0x4
+ str r2, [r1, #-0x4]
+ ldmia sp!, {r4,pc}
+ arm_func_end NNSi_GfdInitLnkVramBlockPool
+
+ arm_func_start NNSi_GfdInitLnkVramMan
+NNSi_GfdInitLnkVramMan: ; 0x020AF698
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+ arm_func_end NNSi_GfdInitLnkVramMan
diff --git a/arm9/asm/NNS_SND_capture.s b/arm9/asm/NNS_SND_capture.s
new file mode 100644
index 00000000..a4e04212
--- /dev/null
+++ b/arm9/asm/NNS_SND_capture.s
@@ -0,0 +1,680 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sIsThreadCreated
+sIsThreadCreated: ; 0x021D27A4
+ .space 0x4
+
+ .global sCurEffectInfo
+sCurEffectInfo: ; 0x021D27A8
+ .space 0x4
+
+ .global sMesgQ
+sMesgQ: ; 0x021D27AC
+ .space 0x20
+
+ .global sCapParam
+sCapParam: ; 0x021D27CC
+ .space 0x54
+
+ .global sEffectInfoBuffer
+sEffectInfoBuffer: ; 0x021D2820
+ .space 0xa0
+
+ .section .text
+
+ local_arm_func_start AlarmCallback
+AlarmCallback: ; 0x020C177C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ ldr r4, [r7, #0x18]
+ ldr r0, [r7, #0x1c]
+ ldr r1, _020C186C ; =sIsThreadCreated
+ mul r0, r4, r0
+ ldr r3, [r7, #0xc]
+ ldr r2, [r7, #0x10]
+ ldr r1, [r1, #0x0]
+ add r6, r3, r0
+ cmp r1, #0x0
+ add r5, r2, r0
+ beq _020C180C
+ ldr r2, _020C1870 ; =sCurEffectInfo
+ mov r1, #0x14
+ ldr r2, [r2, #0x0]
+ ldr r3, _020C1874 ; =sEffectInfoBuffer
+ mul r1, r2, r1
+ str r7, [r3, r1]
+ add r1, r3, r1
+ str r4, [r1, #0x4]
+ str r0, [r1, #0x8]
+ str r6, [r1, #0xc]
+ ldr r0, _020C1878 ; =sMesgQ
+ mov r2, #0x0
+ str r5, [r1, #0x10]
+ bl OS_SendMessage
+ ldr r0, _020C1870 ; =sCurEffectInfo
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ cmp r1, #0x8
+ movge r1, #0x0
+ strge r1, [r0, #0x0]
+ b _020C1844
+_020C180C:
+ mov r0, r6
+ mov r1, r4
+ bl DC_InvalidateRange
+ mov r0, r5
+ mov r1, r4
+ bl DC_InvalidateRange
+ ldr r1, [r7, #0x38]
+ mov r0, r6
+ str r1, [sp, #0x0]
+ ldr r3, [r7, #0x8]
+ ldr r6, [r7, #0x34]
+ mov r1, r5
+ mov r2, r4
+ blx r6
+_020C1844:
+ ldr r0, [r7, #0x1c]
+ add r0, r0, #0x1
+ str r0, [r7, #0x1c]
+ ldr r1, [r7, #0x1c]
+ ldr r0, [r7, #0x30]
+ cmp r1, r0
+ movge r0, #0x0
+ strge r0, [r7, #0x1c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C186C: .word sIsThreadCreated
+_020C1870: .word sCurEffectInfo
+_020C1874: .word sEffectInfoBuffer
+_020C1878: .word sMesgQ
+
+ arm_func_start NNSi_SndCaptureEndSleep
+NNSi_SndCaptureEndSleep: ; 0x020C187C
+ stmdb sp!, {r4,lr}
+ ldr r4, _020C18F4 ; =sCapParam
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ mov r0, #0x0
+ str r0, [r4, #0x1c]
+ ldr r1, [r4, #0xc]
+ ldr r2, [r4, #0x14]
+ bl MIi_CpuClear32
+ ldr r1, [r4, #0x10]
+ ldr r2, [r4, #0x14]
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ ldr r0, [r4, #0xc]
+ ldr r1, [r4, #0x14]
+ bl DC_FlushRange
+ ldr r0, [r4, #0x10]
+ ldr r1, [r4, #0x14]
+ bl DC_FlushRange
+ ldr r1, [r4, #0x2c]
+ mov r3, #0x0
+ cmp r1, #0x0
+ movge r0, #0x1
+ movge r2, r0, lsl r1
+ ldr r0, [r4, #0x24]
+ ldr r1, [r4, #0x28]
+ movlt r2, #0x0
+ bl SND_StartTimer
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C18F4: .word sCapParam
+
+ arm_func_start NNSi_SndCaptureBeginSleep
+NNSi_SndCaptureBeginSleep: ; 0x020C18F8
+ stmdb sp!, {r4,lr}
+ ldr r3, _020C194C ; =sCapParam
+ ldr r0, [r3, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r1, [r3, #0x2c]
+ cmp r1, #0x0
+ movge r0, #0x1
+ movge r2, r0, lsl r1
+ ldr r0, [r3, #0x24]
+ ldr r1, [r3, #0x28]
+ movlt r2, #0x0
+ mov r3, #0x0
+ bl SND_StopTimer
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C194C: .word sCapParam
+
+ arm_func_start NNSi_SndCaptureStop
+NNSi_SndCaptureStop: ; 0x020C1950
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020C1A3C ; =sCapParam
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r1, [r4, #0x2c]
+ mov r3, #0x0
+ cmp r1, #0x0
+ movge r7, #0x1
+ movlt r7, #0x0
+ cmp r7, #0x0
+ movne r0, #0x1
+ movne r2, r0, lsl r1
+ ldr r0, [r4, #0x24]
+ ldr r1, [r4, #0x28]
+ moveq r2, #0x0
+ bl SND_StopTimer
+ cmp r7, #0x0
+ beq _020C19DC
+ bl SND_GetCurrentCommandTag
+ mov r5, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r5
+ bl SND_WaitForCommandProc
+ ldr r6, _020C1A40 ; =sMesgQ
+ mov r5, #0x0
+_020C19C4:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r5
+ bl OS_ReceiveMessage
+ cmp r0, #0x0
+ bne _020C19C4
+_020C19DC:
+ ldr r0, [r4, #0x28]
+ cmp r0, #0x0
+ beq _020C19EC
+ bl NNS_SndUnlockCapture
+_020C19EC:
+ ldr r0, [r4, #0x20]
+ cmp r0, #0x0
+ beq _020C19FC
+ bl NNS_SndUnlockChannel
+_020C19FC:
+ cmp r7, #0x0
+ beq _020C1A0C
+ ldr r0, [r4, #0x2c]
+ bl NNS_SndFreeAlarm
+_020C1A0C:
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x1
+ bne _020C1A2C
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r0
+ mov r3, r0
+ bl SND_SetOutputSelector
+_020C1A2C:
+ mov r0, #0x0
+ str r0, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C1A3C: .word sCapParam
+_020C1A40: .word sMesgQ
+
+ arm_func_start NNSi_SndCaptureStart
+NNSi_SndCaptureStart: ; 0x020C1A44
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x3c
+ mov r10, r3
+ str r0, [sp, #0x18]
+ str r2, [sp, #0x20]
+ mov r2, #0x0
+ str r1, [sp, #0x1c]
+ mov r0, r1
+ mov r1, r10
+ ldr r9, [sp, #0x6c]
+ ldr r8, [sp, #0x74]
+ str r2, [sp, #0x2c]
+ mvn r6, #0x0
+ ldr r4, _020C1D90 ; =sCapParam
+ bl DC_FlushRange
+ ldr r0, [sp, #0x20]
+ mov r1, r10
+ bl DC_FlushRange
+ ldr r0, [sp, #0x60]
+ ldr r1, [sp, #0x70]
+ cmp r0, #0x1
+ moveq r7, #0x1
+ ldr r0, _020C1D94 ; =0x00FFB0FF
+ movne r7, #0x0
+ bl _s32_div_f
+ ldr r1, [sp, #0x84]
+ mov r11, r0
+ cmp r1, #0x0
+ beq _020C1B00
+ add r1, r11, #0x10
+ bic r11, r1, #0x1f
+ mov r2, r11, asr #0x5
+ mov r0, r10
+ cmp r7, #0x0
+ ldr r1, [sp, #0x80]
+ moveq r0, r10, lsr #0x1
+ str r2, [sp, #0x34]
+ bl _u32_div_f
+ ldr r1, [sp, #0x34]
+ mov r5, #0x20
+ mul r0, r1, r0
+ str r0, [sp, #0x30]
+ cmp r7, #0x0
+ ldr r0, [sp, #0x34]
+ moveq r5, r5, lsr #0x1
+ mul r0, r5, r0
+ mov r5, r0
+_020C1B00:
+ cmp r7, #0x0
+ movne r0, #0x0
+ strne r0, [sp, #0x28]
+ moveq r0, #0x1
+ streq r0, [sp, #0x28]
+ cmp r7, #0x0
+ movne r0, #0x1
+ strne r0, [sp, #0x24]
+ moveq r0, #0x0
+ streq r0, [sp, #0x24]
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x2
+ movne r0, #0xa
+ strne r0, [sp, #0x2c]
+ ldr r0, [sp, #0x84]
+ cmp r0, #0x0
+ beq _020C1B58
+ bl NNS_SndAllocAlarm
+ movs r6, r0
+ addmi sp, sp, #0x3c
+ movmi r0, #0x0
+ ldmmiia sp!, {r4-r11,pc}
+_020C1B58:
+ mov r0, #0x3
+ bl NNS_SndLockCapture
+ cmp r0, #0x0
+ bne _020C1B84
+ cmp r6, #0x0
+ blt _020C1B78
+ mov r0, r6
+ bl NNS_SndFreeAlarm
+_020C1B78:
+ add sp, sp, #0x3c
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020C1B84:
+ mov r0, #0xa
+ bl NNS_SndLockChannel
+ cmp r0, #0x0
+ bne _020C1BB8
+ cmp r6, #0x0
+ blt _020C1BA4
+ mov r0, r6
+ bl NNS_SndFreeAlarm
+_020C1BA4:
+ mov r0, #0x3
+ bl NNS_SndUnlockCapture
+ add sp, sp, #0x3c
+ mov r0, #0x0
+ ldmia sp!, {r4-r11,pc}
+_020C1BB8:
+ mov r0, #0x0
+ mov r7, r10, lsr #0x2
+ str r0, [sp, #0x0]
+ str r7, [sp, #0x4]
+ str r8, [sp, #0x8]
+ str r0, [sp, #0xc]
+ cmp r9, #0x0
+ movne r3, #0x1
+ ldr r1, [sp, #0x78]
+ str r11, [sp, #0x10]
+ str r1, [sp, #0x14]
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x1c]
+ moveq r3, #0x2
+ mov r0, #0x1
+ bl SND_SetupChannelPcm
+ ldr r1, [sp, #0x64]
+ str r9, [sp, #0x0]
+ str r1, [sp, #0x4]
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x24]
+ str r0, [sp, #0x8]
+ ldr r2, [sp, #0x1c]
+ mov r0, #0x0
+ mov r3, r7
+ bl SND_SetupCapture
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ str r7, [sp, #0x4]
+ str r8, [sp, #0x8]
+ str r0, [sp, #0xc]
+ cmp r9, #0x0
+ movne r3, #0x1
+ ldr r2, [sp, #0x7c]
+ str r11, [sp, #0x10]
+ str r2, [sp, #0x14]
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x20]
+ moveq r3, #0x2
+ mov r0, #0x3
+ bl SND_SetupChannelPcm
+ ldr r2, [sp, #0x64]
+ str r9, [sp, #0x0]
+ str r2, [sp, #0x4]
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x24]
+ str r0, [sp, #0x8]
+ ldr r2, [sp, #0x20]
+ mov r3, r7
+ mov r0, #0x1
+ bl SND_SetupCapture
+ cmp r6, #0x0
+ blt _020C1CA8
+ ldr r2, [sp, #0x30]
+ ldr r3, _020C1D98 ; =AlarmCallback
+ mov r1, r2
+ mov r0, r6
+ add r1, r1, r5
+ str r4, [sp, #0x0]
+ bl SND_SetupAlarm
+_020C1CA8:
+ ldr r0, [sp, #0x18]
+ cmp r0, #0x1
+ bne _020C1CC8
+ mov r0, #0x1
+ mov r2, r0
+ mov r3, r0
+ mov r1, #0x2
+ bl SND_SetOutputSelector
+_020C1CC8:
+ cmp r6, #0x0
+ movge r0, #0x1
+ movge r2, r0, lsl r6
+ ldr r0, [sp, #0x2c]
+ movlt r2, #0x0
+ mov r1, #0x3
+ mov r3, #0x0
+ bl SND_StartTimer
+ mov r0, #0x1
+ str r0, [r4, #0x0]
+ ldr r0, [sp, #0x18]
+ ldr r1, [sp, #0x80]
+ str r0, [r4, #0x4]
+ mov r0, #0xa
+ str r0, [r4, #0x20]
+ ldr r0, [sp, #0x2c]
+ str r0, [r4, #0x24]
+ mov r0, #0x3
+ str r0, [r4, #0x28]
+ ldr r0, [sp, #0x60]
+ str r6, [r4, #0x2c]
+ str r0, [r4, #0x8]
+ ldr r0, [sp, #0x1c]
+ str r0, [r4, #0xc]
+ ldr r0, [sp, #0x20]
+ str r0, [r4, #0x10]
+ mov r0, r10
+ str r10, [r4, #0x14]
+ bl _u32_div_f
+ str r0, [r4, #0x18]
+ mov r1, #0x0
+ str r1, [r4, #0x1c]
+ ldr r0, [sp, #0x80]
+ ldr r1, [sp, #0x84]
+ str r0, [r4, #0x30]
+ ldr r0, [sp, #0x88]
+ str r1, [r4, #0x34]
+ str r0, [r4, #0x38]
+ add r0, r4, #0x3c
+ str r8, [r4, #0x50]
+ bl NNSi_SndFaderInit
+ add r0, r4, #0x3c
+ mov r1, r8, lsl #0x8
+ mov r2, #0x1
+ bl NNSi_SndFaderSet
+ mov r0, #0x0
+ str r0, [r4, #0x4c]
+ mov r0, #0x1
+ add sp, sp, #0x3c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C1D90: .word sCapParam
+_020C1D94: .word 0x00FFB0FF
+_020C1D98: .word AlarmCallback
+
+ arm_func_start NNSi_SndCaptureMain
+NNSi_SndCaptureMain: ; 0x020C1D9C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020C1E34 ; =sCapParam
+ ldr r0, [r5, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r0, [r5, #0x4]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r5,pc}
+ add r4, r5, #0x3c
+ mov r0, r4
+ bl NNSi_SndFaderUpdate
+ ldr r0, [r5, #0x4c]
+ cmp r0, #0x0
+ beq _020C1DFC
+ mov r0, r4
+ bl NNSi_SndFaderIsFinished
+ cmp r0, #0x0
+ beq _020C1DFC
+ bl NNSi_SndCaptureStop
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+_020C1DFC:
+ mov r0, r4
+ bl NNSi_SndFaderGet
+ ldr r1, [r5, #0x50]
+ mov r4, r0, asr #0x8
+ cmp r4, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r0, [r5, #0x24]
+ mov r1, r4
+ mov r2, #0x0
+ bl SND_SetChannelVolume
+ str r4, [r5, #0x50]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C1E34: .word sCapParam
+
+ arm_func_start NNSi_SndCaptureInit
+NNSi_SndCaptureInit: ; 0x020C1E38
+ ldr r1, _020C1E50 ; =sIsThreadCreated
+ mov r2, #0x0
+ ldr r0, _020C1E54 ; =sCapParam
+ str r2, [r1, #0x0]
+ str r2, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C1E50: .word sIsThreadCreated
+_020C1E54: .word sCapParam
+
+ arm_func_start NNS_SndCaptureIsActive
+NNS_SndCaptureIsActive: ; 0x020C1E58
+ ldr r0, _020C1E64 ; =sCapParam
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C1E64: .word sCapParam
+
+ arm_func_start NNS_SndCaptureStopEffect
+NNS_SndCaptureStopEffect: ; 0x020C1E68
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C1EA0 ; =sCapParam
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x1
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ bl NNSi_SndCaptureStop
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020C1EA0: .word sCapParam
+
+ arm_func_start NNS_SndCaptureStartEffect
+NNS_SndCaptureStartEffect: ; 0x020C1EA4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x2c
+ mov r5, r0
+ mov r4, r1
+ mov r7, r2
+ mov r6, r3
+ bl NNS_SndCaptureStopEffect
+ ldr r0, _020C1F50 ; =sCapParam
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x2c
+ movne r0, #0x0
+ ldmneia sp!, {r4-r7,pc}
+ mov r1, r5
+ mov r2, r4
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ mov r0, r5
+ mov r1, r4
+ bl DC_FlushRange
+ str r7, [sp, #0x0]
+ mov r2, #0x0
+ str r2, [sp, #0x4]
+ str r2, [sp, #0x8]
+ mov r0, #0x1
+ str r0, [sp, #0xc]
+ str r6, [sp, #0x10]
+ mov r1, #0x7f
+ str r1, [sp, #0x14]
+ str r2, [sp, #0x18]
+ ldr r2, [sp, #0x40]
+ str r1, [sp, #0x1c]
+ ldr r1, [sp, #0x44]
+ str r2, [sp, #0x20]
+ ldr r12, [sp, #0x48]
+ str r1, [sp, #0x24]
+ mov r1, r5
+ mov r3, r4, lsr #0x1
+ add r2, r5, r4, lsr #0x1
+ str r12, [sp, #0x28]
+ bl NNSi_SndCaptureStart
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C1F50: .word sCapParam
+
+ arm_func_start NNS_SndCaptureStopReverb
+NNS_SndCaptureStopReverb: ; 0x020C1F54
+ stmdb sp!, {r4,lr}
+ ldr r4, _020C1FA0 ; =sCapParam
+ mov r2, r0
+ ldr r0, [r4, #0x0]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x0
+ ldmneia sp!, {r4,pc}
+ cmp r2, #0x0
+ bne _020C1F88
+ bl NNSi_SndCaptureStop
+ ldmia sp!, {r4,pc}
+_020C1F88:
+ add r0, r4, #0x3c
+ mov r1, #0x0
+ bl NNSi_SndFaderSet
+ mov r0, #0x1
+ str r0, [r4, #0x4c]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C1FA0: .word sCapParam
+
+ arm_func_start NNS_SndCaptureSetReverbVolume
+NNS_SndCaptureSetReverbVolume: ; 0x020C1FA4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, _020C1FEC ; =sCapParam
+ mov r12, r0
+ ldr r0, [r3, #0x0]
+ mov r2, r1
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r3, #0x4]
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ add r0, r3, #0x3c
+ mov r1, r12, lsl #0x8
+ bl NNSi_SndFaderSet
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020C1FEC: .word sCapParam
+
+ arm_func_start NNS_SndCaptureStartReverb
+NNS_SndCaptureStartReverb: ; 0x020C1FF0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x2c
+ mov r5, r0
+ mov r0, #0x0
+ mov r4, r1
+ mov r7, r2
+ mov r6, r3
+ bl NNS_SndCaptureStopReverb
+ ldr r0, _020C2098 ; =sCapParam
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addne sp, sp, #0x2c
+ movne r0, #0x0
+ ldmneia sp!, {r4-r7,pc}
+ mov r1, r5
+ mov r2, r4
+ mov r0, #0x0
+ bl MIi_CpuClear32
+ mov r0, r5
+ mov r1, r4
+ bl DC_FlushRange
+ str r7, [sp, #0x0]
+ mov r0, #0x0
+ str r0, [sp, #0x4]
+ str r0, [sp, #0x8]
+ mov r1, #0x1
+ str r1, [sp, #0xc]
+ ldr r1, [sp, #0x40]
+ str r6, [sp, #0x10]
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ mov r1, #0x7f
+ str r1, [sp, #0x1c]
+ str r0, [sp, #0x20]
+ str r0, [sp, #0x24]
+ mov r1, r5
+ mov r3, r4, lsr #0x1
+ add r2, r5, r4, lsr #0x1
+ str r0, [sp, #0x28]
+ bl NNSi_SndCaptureStart
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C2098: .word sCapParam
diff --git a/arm9/asm/NNS_SND_fader.s b/arm9/asm/NNS_SND_fader.s
new file mode 100644
index 00000000..938456a9
--- /dev/null
+++ b/arm9/asm/NNS_SND_fader.s
@@ -0,0 +1,63 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_SndFaderIsFinished
+NNSi_SndFaderIsFinished: ; 0x020C3DDC
+ ldr r1, [r0, #0x8]
+ ldr r0, [r0, #0xc]
+ cmp r1, r0
+ movge r0, #0x1
+ movlt r0, #0x0
+ bx lr
+
+ arm_func_start NNSi_SndFaderUpdate
+NNSi_SndFaderUpdate: ; 0x020C3DF4
+ ldr r2, [r0, #0x8]
+ ldr r1, [r0, #0xc]
+ cmp r2, r1
+ addlt r1, r2, #0x1
+ strlt r1, [r0, #0x8]
+ bx lr
+
+ arm_func_start NNSi_SndFaderGet
+NNSi_SndFaderGet: ; 0x020C3E0C
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0xc]
+ ldr r2, [r0, #0x8]
+ cmp r2, r1
+ ldrge r0, [r0, #0x4]
+ ldmgeia sp!, {r4,pc}
+ ldr r4, [r0, #0x0]
+ ldr r0, [r0, #0x4]
+ sub r0, r0, r4
+ mul r0, r2, r0
+ bl _s32_div_f
+ add r0, r4, r0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNSi_SndFaderSet
+NNSi_SndFaderSet: ; 0x020C3E40
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl NNSi_SndFaderGet
+ str r0, [r6, #0x0]
+ str r5, [r6, #0x4]
+ str r4, [r6, #0xc]
+ mov r0, #0x0
+ str r0, [r6, #0x8]
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start NNSi_SndFaderInit
+NNSi_SndFaderInit: ; 0x020C3E6C
+ mov r2, #0x0
+ str r2, [r0, #0x4]
+ ldr r1, [r0, #0x4]
+ str r1, [r0, #0x0]
+ str r2, [r0, #0xc]
+ ldr r1, [r0, #0xc]
+ str r1, [r0, #0x8]
+ bx lr
diff --git a/arm9/asm/NNS_SND_heap.s b/arm9/asm/NNS_SND_heap.s
new file mode 100644
index 00000000..554c6bab
--- /dev/null
+++ b/arm9/asm/NNS_SND_heap.s
@@ -0,0 +1,282 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start EraseSync
+EraseSync: ; 0x020C2774
+ stmdb sp!, {r4,lr}
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NewSection
+NewSection: ; 0x020C2794
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x0]
+ mov r1, #0x14
+ mov r2, #0x4
+ bl NNS_FndAllocFromFrmHeapEx
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+ bl InitHeapSection
+ mov r1, r4
+ add r0, r5, #0x4
+ bl NNS_FndAppendListObject
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start InitHeap
+InitHeap: ; 0x020C27DC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ add r0, r5, #0x4
+ mov r1, #0xc
+ bl NNS_FndInitList
+ mov r0, r5
+ str r4, [r5, #0x0]
+ bl NewSection
+ cmp r0, #0x0
+ movne r0, #0x1
+ moveq r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start InitHeapSection
+InitHeapSection: ; 0x020C2818
+ ldr ip, _020C2824 ; =NNS_FndInitList
+ mov r1, #0x0
+ bx r12
+ .balign 4
+_020C2824: .word NNS_FndInitList
+
+ arm_func_start NNS_SndHeapLoadState
+NNS_SndHeapLoadState: ; 0x020C2828
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x4
+ mov r7, #0x0
+ movs r9, r1
+ mov r10, r0
+ mov r6, r7
+ bne _020C2850
+ bl NNS_SndHeapClear
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+_020C2850:
+ ldrh r0, [r10, #0xc]
+ cmp r9, r0
+ bge _020C28D8
+ mov r11, r7
+ add r5, r10, #0x4
+ mov r4, #0x1
+_020C2868:
+ mov r0, r5
+ mov r1, r11
+ bl NNS_FndGetPrevListObject
+ mov r1, r7
+ mov r8, r0
+ bl NNS_FndGetPrevListObject
+ movs r7, r0
+ beq _020C28C0
+_020C2888:
+ ldr r12, [r7, #0xc]
+ cmp r12, #0x0
+ beq _020C28AC
+ ldr r1, [r7, #0x8]
+ ldr r2, [r7, #0x10]
+ ldr r3, [r7, #0x14]
+ add r0, r7, #0x20
+ blx r12
+ mov r6, r4
+_020C28AC:
+ mov r0, r8
+ mov r1, r7
+ bl NNS_FndGetPrevListObject
+ movs r7, r0
+ bne _020C2888
+_020C28C0:
+ mov r0, r5
+ mov r1, r8
+ bl NNS_FndRemoveListObject
+ ldrh r0, [r10, #0xc]
+ cmp r9, r0
+ blt _020C2868
+_020C28D8:
+ ldr r0, [r10, #0x0]
+ mov r1, r9
+ bl NNS_FndFreeByStateToFrmHeap
+ cmp r6, #0x0
+ beq _020C28F0
+ bl EraseSync
+_020C28F0:
+ ldrh r1, [r10, #0xc]
+ ldr r0, [r10, #0x0]
+ bl NNS_FndRecordStateForFrmHeap
+ mov r0, r10
+ bl NewSection
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start NNS_SndHeapSaveState
+NNS_SndHeapSaveState: ; 0x020C290C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrh r1, [r4, #0xc]
+ ldr r0, [r4, #0x0]
+ bl NNS_FndRecordStateForFrmHeap
+ cmp r0, #0x0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ mov r0, r4
+ bl NewSection
+ cmp r0, #0x0
+ ldrneh r0, [r4, #0xc]
+ subne r0, r0, #0x1
+ ldmneia sp!, {r4,pc}
+ ldr r0, [r4, #0x0]
+ mov r1, #0x0
+ bl NNS_FndFreeByStateToFrmHeap
+ mvn r0, #0x0
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndHeapAlloc
+NNS_SndHeapAlloc: ; 0x020C2958
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r8, r0
+ add r0, r7, #0x1f
+ bic r1, r0, #0x1f
+ mov r6, r2
+ ldr r0, [r8, #0x0]
+ add r1, r1, #0x20
+ mov r2, #0x20
+ mov r5, r3
+ bl NNS_FndAllocFromFrmHeapEx // some allocator?
+ movs r4, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ add r0, r8, #0x4
+ mov r1, #0x0
+ bl NNS_FndGetPrevListObject
+ str r7, [r4, #0x8]
+ str r6, [r4, #0xc]
+ ldr r2, [sp, #0x18]
+ str r5, [r4, #0x10]
+ mov r1, r4
+ str r2, [r4, #0x14]
+ bl NNS_FndAppendListObject
+ add r0, r4, #0x20
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start NNS_SndHeapClear
+NNS_SndHeapClear: ; 0x020C29C0
+ stmdb sp!, {r4-r10,lr}
+ mov r8, r0
+ mov r5, #0x0
+ mov r1, r5
+ add r0, r8, #0x4
+ bl NNS_FndGetPrevListObject
+ movs r7, r0
+ beq _020C2A58
+ add r9, r8, #0x4
+ mov r10, #0x1
+ mov r4, r5
+_020C29EC:
+ mov r0, r7
+ mov r1, r4
+ bl NNS_FndGetPrevListObject
+ movs r6, r0
+ beq _020C2A38
+_020C2A00:
+ ldr r12, [r6, #0xc]
+ cmp r12, #0x0
+ beq _020C2A24
+ ldr r1, [r6, #0x8]
+ ldr r2, [r6, #0x10]
+ ldr r3, [r6, #0x14]
+ add r0, r6, #0x20
+ blx r12
+ mov r5, r10
+_020C2A24:
+ mov r0, r7
+ mov r1, r6
+ bl NNS_FndGetPrevListObject
+ movs r6, r0
+ bne _020C2A00
+_020C2A38:
+ mov r0, r9
+ mov r1, r7
+ bl NNS_FndRemoveListObject
+ mov r0, r9
+ mov r1, r4
+ bl NNS_FndGetPrevListObject
+ movs r7, r0
+ bne _020C29EC
+_020C2A58:
+ ldr r0, [r8, #0x0]
+ mov r1, #0x3
+ bl NNS_FndFreeToFrmHeap
+ cmp r5, #0x0
+ beq _020C2A70
+ bl EraseSync
+_020C2A70:
+ mov r0, r8
+ bl NewSection
+ ldmia sp!, {r4-r10,pc}
+
+ arm_func_start NNS_SndHeapDestroy
+NNS_SndHeapDestroy: ; 0x020C2A7C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl NNS_SndHeapClear
+ ldr r0, [r4, #0x0]
+ bl NNS_FndDestroyFrmHeap
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndHeapCreate
+NNS_SndHeapCreate: ; 0x020C2A94
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ add r2, r0, #0x3
+ add r0, r0, r1
+ bic r5, r2, #0x3
+ cmp r5, r0
+ addhi sp, sp, #0x4
+ movhi r0, #0x0
+ ldmhiia sp!, {r4-r5,pc}
+ sub r1, r0, r5
+ cmp r1, #0x10
+ addcc sp, sp, #0x4
+ movcc r0, #0x0
+ ldmccia sp!, {r4-r5,pc}
+ add r0, r5, #0x10
+ sub r1, r1, #0x10
+ mov r2, #0x0
+ bl NNS_FndCreateFrmHeapEx
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+ mov r0, r5
+ mov r1, r4
+ bl InitHeap
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, r5
+ ldmneia sp!, {r4-r5,pc}
+ mov r0, r4
+ bl NNS_FndDestroyFrmHeap
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
diff --git a/arm9/asm/NNS_SND_main.s b/arm9/asm/NNS_SND_main.s
new file mode 100644
index 00000000..4cbe3d65
--- /dev/null
+++ b/arm9/asm/NNS_SND_main.s
@@ -0,0 +1,125 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sCurDriverInfo
+sCurDriverInfo: ; 0x021D1C8C
+ .space 0x4
+
+ .global sDriverInfoFirstFlag
+sDriverInfoFirstFlag: ; 0x021D1C90
+ .space 0x4
+
+ .global initialized$8127
+initialized$8127: ; 0x021D1C94
+ .space 0x4
+
+ .global sPreSleepCallback
+sPreSleepCallback: ; 0x021D1C98
+ .space 0xc
+
+ .global sPostSleepCallback
+sPostSleepCallback: ; 0x021D1CA4
+ .space 0xc
+
+ .section .text
+
+ local_arm_func_start EndSleep
+EndSleep: ; 0x020C0130
+ ldr ip, _020C0138 ; =NNSi_SndCaptureEndSleep
+ bx r12
+ .balign 4
+_020C0138: .word NNSi_SndCaptureEndSleep
+
+ local_arm_func_start BeginSleep
+BeginSleep: ; 0x020C013C
+ stmdb sp!, {r4,lr}
+ bl NNSi_SndCaptureBeginSleep
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r0
+ mov r3, r0
+ bl SND_StopTimer
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndSetMonoFlag
+NNS_SndSetMonoFlag: ; 0x020C0174
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ cmp r0, #0x0
+ beq _020C0194
+ mov r0, #0x40
+ bl SND_SetMasterPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+_020C0194:
+ bl SND_ResetMasterPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndMain
+NNS_SndMain: ; 0x020C01A0
+ stmdb sp!, {r4,lr}
+ mov r4, #0x0
+_020C01A8:
+ mov r0, r4
+ bl SND_RecvCommandReply
+ cmp r0, #0x0
+ bne _020C01A8
+ bl NNSi_SndPlayerMain
+ bl NNSi_SndCaptureMain
+ bl NNSi_SndArcStrmMain
+ mov r0, #0x0
+ bl SND_FlushCommand
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndInit
+NNS_SndInit: ; 0x020C01D0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, _020C0254 ; =initialized$8127
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ bl SND_Init
+ ldr ip, _020C0258 ; =BeginSleep
+ ldr r0, _020C025C ; =sPreSleepCallback
+ mov r3, #0x0
+ ldr r1, _020C0260 ; =sPostSleepCallback
+ ldr r2, _020C0264 ; =EndSleep
+ str r12, [r0, #0x0]
+ str r3, [r0, #0x4]
+ str r2, [r1, #0x0]
+ str r3, [r1, #0x4]
+ bl PM_PrependPreSleepCallback
+ ldr r0, _020C0260 ; =sPostSleepCallback
+ bl PM_AppendPostSleepCallback
+ bl NNSi_SndInitResourceMgr
+ bl NNSi_SndCaptureInit
+ bl NNSi_SndPlayerInit
+ ldr r1, _020C0268 ; =sCurDriverInfo
+ mvn r3, #0x0
+ ldr r0, _020C026C ; =sDriverInfoFirstFlag
+ mov r2, #0x1
+ strb r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+ .balign 4
+_020C0254: .word initialized$8127
+_020C0258: .word BeginSleep
+_020C025C: .word sPreSleepCallback
+_020C0260: .word sPostSleepCallback
+_020C0264: .word EndSleep
+_020C0268: .word sCurDriverInfo
+_020C026C: .word sDriverInfoFirstFlag
diff --git a/arm9/asm/NNS_SND_player.s b/arm9/asm/NNS_SND_player.s
new file mode 100644
index 00000000..caaf345e
--- /dev/null
+++ b/arm9/asm/NNS_SND_player.s
@@ -0,0 +1,877 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sFreeList
+sFreeList: ; 0x021D1DFC
+ .space 0xc
+
+ .global sPrioList
+sPrioList: ; 0x021D1E08
+ .space 0xc
+
+ .global sSeqPlayer
+sSeqPlayer: ; 0x021D1E14
+ .space 0x440
+
+ .global sPlayer
+sPlayer: ; 0x021D2254
+ .space 0x480
+
+ .section .text
+
+ arm_func_start SetPlayerPriority
+SetPlayerPriority: ; 0x020C06CC
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ ldr r4, [r6, #0x4]
+ mov r5, r1
+ cmp r4, #0x0
+ beq _020C06F8
+ mov r0, r4
+ mov r1, r6
+ bl NNS_FndRemoveListObject
+ mov r0, #0x0
+ str r0, [r6, #0x4]
+_020C06F8:
+ ldr r0, _020C0728 ; =sPrioList
+ mov r1, r6
+ bl NNS_FndRemoveListObject
+ strb r5, [r6, #0x3d]
+ cmp r4, #0x0
+ beq _020C071C
+ mov r0, r4
+ mov r1, r6
+ bl InsertPlayerList
+_020C071C:
+ mov r0, r6
+ bl InsertPrioList
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C0728: .word sPrioList
+
+ arm_func_start PlayerHeapDisposeCallback
+PlayerHeapDisposeCallback: ; 0x020C072C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ bl NNS_SndHeapDestroy
+ ldr r1, [r4, #0xc]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x8]
+ ldmneia sp!, {r4,pc}
+ ldr r1, [r4, #0x10]
+ ldr r2, _020C0778 ; =sPlayer
+ mov r0, #0x24
+ mla r0, r1, r0, r2
+ mov r1, r4
+ add r0, r0, #0xc
+ bl NNS_FndRemoveListObject
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C0778: .word sPlayer
+
+ local_arm_func_start ShutdownPlayer
+ShutdownPlayer: ; 0x020C077C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r1, [r4, #0x0]
+ cmp r1, #0x0
+ movne r0, #0x0
+ strne r0, [r1, #0x0]
+ strne r0, [r4, #0x0]
+ ldr r5, [r4, #0x4]
+ mov r1, r4
+ mov r0, r5
+ bl NNS_FndRemoveListObject
+ mov r0, #0x0
+ str r0, [r4, #0x4]
+ ldr r1, [r4, #0x8]
+ cmp r1, #0x0
+ beq _020C07D8
+ add r0, r5, #0xc
+ bl NNS_FndAppendListObject
+ ldr r0, [r4, #0x8]
+ mov r1, #0x0
+ str r1, [r0, #0xc]
+ str r1, [r4, #0x8]
+_020C07D8:
+ ldr r0, _020C0800 ; =sPrioList
+ mov r1, r4
+ bl NNS_FndRemoveListObject
+ ldr r0, _020C0804 ; =sFreeList
+ mov r1, r4
+ bl NNS_FndAppendListObject
+ mov r0, #0x0
+ strb r0, [r4, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C0800: .word sPrioList
+_020C0804: .word sFreeList
+
+ arm_func_start AllocSeqPlayer
+AllocSeqPlayer: ; 0x020C0808
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, _020C0874 ; =sFreeList
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ movs r4, r0
+ bne _020C0850
+ ldr r0, _020C0878 ; =sPrioList
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ mov r4, r0
+ ldrb r1, [r4, #0x3d]
+ cmp r5, r1
+ addlt sp, sp, #0x4
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r5,pc}
+ bl ForceStopSeq
+_020C0850:
+ ldr r0, _020C0874 ; =sFreeList
+ mov r1, r4
+ bl NNS_FndRemoveListObject
+ mov r0, r4
+ strb r5, [r4, #0x3d]
+ bl InsertPrioList
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C0874: .word sFreeList
+_020C0878: .word sPrioList
+
+ arm_func_start ForceStopSeq
+ForceStopSeq: ; 0x020C087C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldrb r0, [r4, #0x2c]
+ cmp r0, #0x2
+ bne _020C089C
+ ldrb r0, [r4, #0x3c]
+ ldr r1, _020C08B0 ; =0xFFFFFD2D
+ bl SND_SetPlayerVolume
+_020C089C:
+ ldrb r0, [r4, #0x3c]
+ bl SND_StopSeq
+ mov r0, r4
+ bl ShutdownPlayer
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C08B0: .word 0xFFFFFD2D
+
+ arm_func_start InsertPrioList
+InsertPrioList: ; 0x020C08B4
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, _020C090C ; =sPrioList
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ movs r1, r0
+ beq _020C08F8
+ ldr r4, _020C090C ; =sPrioList
+_020C08D8:
+ ldrb r2, [r5, #0x3d]
+ ldrb r0, [r1, #0x3d]
+ cmp r2, r0
+ blo _020C08F8
+ mov r0, r4
+ bl NNS_FndGetNextListObject
+ movs r1, r0
+ bne _020C08D8
+_020C08F8:
+ ldr r0, _020C090C ; =sPrioList
+ mov r2, r5
+ bl NNS_FndInsertListObject
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C090C: .word sPrioList
+
+ arm_func_start InsertPlayerList
+InsertPlayerList: ; 0x020C0910
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, #0x0
+ mov r5, r0
+ bl NNS_FndGetNextListObject
+ movs r1, r0
+ beq _020C0950
+_020C0930:
+ ldrb r2, [r4, #0x3d]
+ ldrb r0, [r1, #0x3d]
+ cmp r2, r0
+ blo _020C0950
+ mov r0, r5
+ bl NNS_FndGetNextListObject
+ movs r1, r0
+ bne _020C0930
+_020C0950:
+ mov r0, r5
+ mov r2, r4
+ bl NNS_FndInsertListObject
+ str r5, [r4, #0x4]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start InitPlayer
+InitPlayer: ; 0x020C0968
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x0
+ strb r0, [r4, #0x2e]
+ strb r0, [r4, #0x2d]
+ strb r0, [r4, #0x2f]
+ strh r0, [r4, #0x34]
+ strh r0, [r4, #0x3e]
+ mov r1, #0x7f
+ strb r1, [r4, #0x40]
+ add r0, r4, #0x1c
+ strb r1, [r4, #0x41]
+ bl NNSi_SndFaderInit
+ add r0, r4, #0x1c
+ mov r1, #0x7f00
+ mov r2, #0x1
+ bl NNSi_SndFaderSet
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNSi_SndPlayerAllocHeap
+NNSi_SndPlayerAllocHeap: ; 0x020C09B0
+ stmdb sp!, {r4-r6,lr}
+ ldr r3, _020C0A00 ; =sPlayer
+ mov r2, #0x24
+ mla r5, r0, r2, r3
+ mov r6, r1
+ add r0, r5, #0xc
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ movs r4, r0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r1, r4
+ add r0, r5, #0xc
+ bl NNS_FndRemoveListObject
+ str r6, [r4, #0xc]
+ str r4, [r6, #0x8]
+ ldr r0, [r4, #0x8]
+ bl NNS_SndHeapClear
+ ldr r0, [r4, #0x8]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C0A00: .word sPlayer
+
+ arm_func_start NNSi_SndPlayerPause
+NNSi_SndPlayerPause: ; 0x020C0A04
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ movs r5, r0
+ mov r4, r1
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldrb r0, [r5, #0x2e]
+ cmp r4, r0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldrb r0, [r5, #0x3c]
+ bl SND_PauseSeq
+ strb r4, [r5, #0x2e]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start NNSi_SndPlayerStopSeq
+NNSi_SndPlayerStopSeq: ; 0x020C0A40
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ mov r2, r1
+ ldmeqia sp!, {r4,pc}
+ ldrb r1, [r4, #0x2c]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,pc}
+ cmp r2, #0x0
+ bne _020C0A6C
+ bl ForceStopSeq
+ ldmia sp!, {r4,pc}
+_020C0A6C:
+ add r0, r4, #0x1c
+ mov r1, #0x0
+ bl NNSi_SndFaderSet
+ mov r0, r4
+ mov r1, #0x0
+ bl SetPlayerPriority
+ mov r0, #0x2
+ strb r0, [r4, #0x2c]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNSi_SndPlayerStartSeq
+NNSi_SndPlayerStartSeq: ; 0x020C0A90
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldrb r0, [r5, #0x3c]
+ ldr r4, [r5, #0x4]
+ bl SND_PrepareSeq
+ ldr r2, [r4, #0x1c]
+ cmp r2, #0x0
+ beq _020C0AC0
+ ldrb r0, [r5, #0x3c]
+ ldr r1, _020C0AE4 ; =0x0000FFFF
+ bl SND_SetTrackAllocatableChannel
+_020C0AC0:
+ mov r0, r5
+ bl InitPlayer
+ bl SND_GetCurrentCommandTag
+ str r0, [r5, #0x30]
+ mov r0, #0x1
+ strb r0, [r5, #0x2f]
+ strb r0, [r5, #0x2c]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C0AE4: .word 0x0000FFFF
+
+ arm_func_start NNSi_SndPlayerFreeSeqPlayer
+NNSi_SndPlayerFreeSeqPlayer: ; 0x020C0AE8
+ ldr ip, _020C0AF0 ; =ShutdownPlayer
+ bx r12
+ .balign 4
+_020C0AF0: .word ShutdownPlayer
+
+ arm_func_start NNSi_SndPlayerAllocSeqPlayer
+NNSi_SndPlayerAllocSeqPlayer: ; 0x020C0AF4
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr ip, _020C0B9C ; =sPlayer
+ mov r3, #0x24
+ mov r4, r0
+ ldr r5, [r4, #0x0]
+ mla r6, r1, r3, r12
+ mov r7, r2
+ cmp r5, #0x0
+ beq _020C0B20
+ bl NNS_SndHandleReleaseSeq
+_020C0B20:
+ ldrh r1, [r6, #0x8]
+ ldr r0, [r6, #0x18]
+ cmp r1, r0
+ blo _020C0B64
+ mov r0, r6
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+ ldrb r1, [r0, #0x3d]
+ cmp r7, r1
+ addlt sp, sp, #0x4
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r7,pc}
+ bl ForceStopSeq
+_020C0B64:
+ mov r0, r7
+ bl AllocSeqPlayer
+ movs r5, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+ mov r0, r6
+ mov r1, r5
+ bl InsertPlayerList
+ str r4, [r5, #0x0]
+ mov r0, r5
+ str r5, [r4, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C0B9C: .word sPlayer
+
+ arm_func_start NNSi_SndPlayerMain
+NNSi_SndPlayerMain: ; 0x020C0BA0
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ bl SND_GetPlayerStatus
+ str r0, [sp, #0x0]
+ ldr r0, _020C0D14 ; =sPrioList
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ movs r10, r0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r11,pc}
+ mov r0, #0x8000
+ rsb r0, r0, #0x0
+ ldr r4, _020C0D18 ; =SNDi_DecibelTable
+ str r0, [sp, #0x4]
+ mov r5, #0x1
+ mov r11, #0x0
+_020C0BE0:
+ ldr r0, _020C0D14 ; =sPrioList
+ mov r1, r10
+ bl NNS_FndGetNextListObject
+ ldrb r1, [r10, #0x2d]
+ mov r9, r0
+ cmp r1, #0x0
+ bne _020C0C0C
+ ldr r0, [r10, #0x30]
+ bl SND_IsFinishedCommandTag
+ cmp r0, #0x0
+ strneb r5, [r10, #0x2d]
+_020C0C0C:
+ ldrb r0, [r10, #0x2d]
+ cmp r0, #0x0
+ beq _020C0C38
+ ldrb r0, [r10, #0x3c]
+ mov r1, r5, lsl r0
+ ldr r0, [sp, #0x0]
+ ands r0, r0, r1
+ bne _020C0C38
+ mov r0, r10
+ bl ShutdownPlayer
+ b _020C0D00
+_020C0C38:
+ add r0, r10, #0x1c
+ bl NNSi_SndFaderUpdate
+ ldr r0, [r10, #0x4]
+ ldrb r2, [r10, #0x41]
+ ldrb r1, [r10, #0x40]
+ ldrb r0, [r0, #0x20]
+ mov r3, r2, lsl #0x1
+ mov r2, r1, lsl #0x1
+ mov r1, r0, lsl #0x1
+ add r0, r10, #0x1c
+ ldrsh r8, [r4, r3]
+ ldrsh r7, [r4, r2]
+ ldrsh r6, [r4, r1]
+ bl NNSi_SndFaderGet
+ mov r0, r0, asr #0x8
+ mov r2, r0, lsl #0x1
+ add r1, r7, r8
+ mov r0, #0x8000
+ ldrsh r2, [r4, r2]
+ add r1, r6, r1
+ rsb r0, r0, #0x0
+ add r6, r2, r1
+ cmp r6, r0
+ ldrlt r6, [sp, #0x4]
+ blt _020C0CA8
+ ldr r0, _020C0D1C ; =0x00007FFF
+ cmp r6, r0
+ movgt r6, r0
+_020C0CA8:
+ ldrsh r0, [r10, #0x3e]
+ cmp r6, r0
+ beq _020C0CC4
+ ldrb r0, [r10, #0x3c]
+ mov r1, r6
+ bl SND_SetPlayerVolume
+ strh r6, [r10, #0x3e]
+_020C0CC4:
+ ldrb r0, [r10, #0x2c]
+ cmp r0, #0x2
+ bne _020C0CE8
+ add r0, r10, #0x1c
+ bl NNSi_SndFaderIsFinished
+ cmp r0, #0x0
+ beq _020C0CE8
+ mov r0, r10
+ bl ForceStopSeq
+_020C0CE8:
+ ldrb r0, [r10, #0x2f]
+ cmp r0, #0x0
+ beq _020C0D00
+ ldrb r0, [r10, #0x3c]
+ bl SND_StartPreparedSeq
+ strb r11, [r10, #0x2f]
+_020C0D00:
+ mov r10, r9
+ cmp r9, #0x0
+ bne _020C0BE0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C0D14: .word sPrioList
+_020C0D18: .word SNDi_DecibelTable
+_020C0D1C: .word 0x00007FFF
+
+ arm_func_start NNSi_SndPlayerInit
+NNSi_SndPlayerInit: ; 0x020C0D20
+ stmdb sp!, {r4-r10,lr}
+ ldr r0, _020C0DC4 ; =sPrioList
+ mov r1, #0x14
+ bl NNS_FndInitList
+ ldr r0, _020C0DC8 ; =sFreeList
+ mov r1, #0x14
+ bl NNS_FndInitList
+ ldr r6, _020C0DCC ; =sSeqPlayer
+ mov r7, #0x0
+ ldr r4, _020C0DC8 ; =sFreeList
+ mov r5, r7
+_020C0D4C:
+ strb r5, [r6, #0x2c]
+ mov r0, r4
+ mov r1, r6
+ strb r7, [r6, #0x3c]
+ bl NNS_FndAppendListObject
+ add r7, r7, #0x1
+ cmp r7, #0x10
+ add r6, r6, #0x44
+ blt _020C0D4C
+ ldr sl, _020C0DD0 ; =sPlayer
+ mov r9, #0x0
+ mov r7, r9
+ mov r4, r9
+ mov r8, #0xc
+ mov r6, #0x7f
+ mov r5, #0x1
+_020C0D8C:
+ mov r0, r10
+ mov r1, r8
+ bl NNS_FndInitList
+ mov r1, r7
+ add r0, r10, #0xc
+ bl NNS_FndInitList
+ strb r6, [r10, #0x20]
+ str r5, [r10, #0x18]
+ add r9, r9, #0x1
+ str r4, [r10, #0x1c]
+ cmp r9, #0x20
+ add r10, r10, #0x24
+ blt _020C0D8C
+ ldmia sp!, {r4-r10,pc}
+ .balign 4
+_020C0DC4: .word sPrioList
+_020C0DC8: .word sFreeList
+_020C0DCC: .word sSeqPlayer
+_020C0DD0: .word sPlayer
+
+ arm_func_start NNS_SndPlayerGetTick
+NNS_SndPlayerGetTick: ; 0x020C0DD4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {pc}
+ ldrb r0, [r1, #0x2d]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {pc}
+ ldrb r0, [r1, #0x3c]
+ bl SND_GetPlayerTickCounter
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndPlayerGetSeqNo
+NNS_SndPlayerGetSeqNo: ; 0x020C0E14
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ mvneq r0, #0x0
+ bxeq lr
+ ldrh r0, [r1, #0x34]
+ cmp r0, #0x1
+ mvnne r0, #0x0
+ ldreqh r0, [r1, #0x38]
+ bx lr
+
+ arm_func_start NNS_SndPlayerSetSeqArcNo
+NNS_SndPlayerSetSeqArcNo: ; 0x020C0E38
+ ldr r12, [r0, #0x0]
+ cmp r12, #0x0
+ bxeq lr
+ mov r3, #0x2
+ strh r3, [r12, #0x34]
+ ldr r3, [r0, #0x0]
+ strh r1, [r3, #0x38]
+ ldr r0, [r0, #0x0]
+ strh r2, [r0, #0x3a]
+ bx lr
+
+ arm_func_start NNS_SndPlayerSetSeqNo
+NNS_SndPlayerSetSeqNo: ; 0x020C0E60
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ movne r2, #0x1
+ strneh r2, [r3, #0x34]
+ ldrne r0, [r0, #0x0]
+ strneh r1, [r0, #0x38]
+ bx lr
+
+ arm_func_start NNS_SndPlayerSetTrackPan
+NNS_SndPlayerSetTrackPan: ; 0x020C0E7C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r0, #0x3c]
+ bl SND_SetTrackPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndPlayerSetTrackPitch
+NNS_SndPlayerSetTrackPitch: ; 0x020C0EA4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r0, #0x3c]
+ bl SND_SetTrackPitch
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndPlayerSetChannelPriority
+NNS_SndPlayerSetChannelPriority: ; 0x020C0ECC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r0, #0x3c]
+ bl SND_SetPlayerChannelPriority
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndPlayerMoveVolume
+NNS_SndPlayerMoveVolume: ; 0x020C0EF4
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r3, [r0, #0x0]
+ cmp r3, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldrb r0, [r3, #0x2c]
+ cmp r0, #0x2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ add r0, r3, #0x1c
+ mov r1, r1, lsl #0x8
+ bl NNSi_SndFaderSet
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndPlayerSetInitialVolume
+NNS_SndPlayerSetInitialVolume: ; 0x020C0F30
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ strneb r1, [r0, #0x40]
+ bx lr
+
+ arm_func_start NNS_SndPlayerSetVolume
+NNS_SndPlayerSetVolume: ; 0x020C0F40
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ strneb r1, [r0, #0x41]
+ bx lr
+
+ arm_func_start NNS_SndPlayerCountPlayingSeqByPlayerNo
+NNS_SndPlayerCountPlayingSeqByPlayerNo: ; 0x020C0F50
+ mov r1, #0x24
+ mul r1, r0, r1
+ ldr r0, _020C0F64 ; =sPlayer + 0x8
+ ldrh r0, [r0, r1]
+ bx lr
+ .balign 4
+_020C0F64: .word sPlayer + 0x8
+
+ arm_func_start NNS_SndHandleReleaseSeq
+NNS_SndHandleReleaseSeq: ; 0x020C0F68
+ ldr r2, [r0, #0x0]
+ cmp r2, #0x0
+ movne r1, #0x0
+ strne r1, [r2, #0x0]
+ strne r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start NNS_SndHandleInit
+NNS_SndHandleInit: ; 0x020C0F80
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+ bx lr
+
+ arm_func_start NNS_SndPlayerPause
+NNS_SndPlayerPause: ; 0x020C0F8C
+ ldr ip, _020C0F98 ; =NNSi_SndPlayerPause
+ ldr r0, [r0, #0x0]
+ bx r12
+ .balign 4
+_020C0F98: .word NNSi_SndPlayerPause
+
+ arm_func_start NNS_SndPlayerStopSeqAll
+NNS_SndPlayerStopSeqAll: ; 0x020C0F9C
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, _020C0FD8 ; =sSeqPlayer
+ mov r6, r0
+ mov r5, #0x0
+_020C0FAC:
+ ldrb r0, [r4, #0x2c]
+ cmp r0, #0x0
+ beq _020C0FC4
+ mov r0, r4
+ mov r1, r6
+ bl NNSi_SndPlayerStopSeq
+_020C0FC4:
+ add r5, r5, #0x1
+ cmp r5, #0x10
+ add r4, r4, #0x44
+ blt _020C0FAC
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C0FD8: .word sSeqPlayer
+
+ arm_func_start NNS_SndPlayerStopSeqBySeqNo
+NNS_SndPlayerStopSeqBySeqNo: ; 0x020C0FDC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r4, _020C103C ; =sSeqPlayer
+ mov r7, r0
+ mov r6, r1
+ mov r5, #0x0
+_020C0FF4:
+ ldrb r0, [r4, #0x2c]
+ cmp r0, #0x0
+ beq _020C1024
+ ldrh r0, [r4, #0x34]
+ cmp r0, #0x1
+ bne _020C1024
+ ldrh r0, [r4, #0x38]
+ cmp r0, r7
+ bne _020C1024
+ mov r0, r4
+ mov r1, r6
+ bl NNSi_SndPlayerStopSeq
+_020C1024:
+ add r5, r5, #0x1
+ cmp r5, #0x10
+ add r4, r4, #0x44
+ blt _020C0FF4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C103C: .word sSeqPlayer
+
+ arm_func_start NNS_SndPlayerStopSeqByPlayerNo
+NNS_SndPlayerStopSeqByPlayerNo: ; 0x020C1040
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r3, _020C109C ; =sPlayer
+ mov r2, #0x24
+ mla r4, r0, r2, r3
+ ldr r5, _020C10A0 ; =sSeqPlayer
+ mov r7, r1
+ mov r6, #0x0
+_020C1060:
+ ldrb r0, [r5, #0x2c]
+ cmp r0, #0x0
+ beq _020C1084
+ ldr r0, [r5, #0x4]
+ cmp r0, r4
+ bne _020C1084
+ mov r0, r5
+ mov r1, r7
+ bl NNSi_SndPlayerStopSeq
+_020C1084:
+ add r6, r6, #0x1
+ cmp r6, #0x10
+ add r5, r5, #0x44
+ blt _020C1060
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C109C: .word sPlayer
+_020C10A0: .word sSeqPlayer
+
+ arm_func_start NNS_SndPlayerStopSeq
+NNS_SndPlayerStopSeq: ; 0x020C10A4
+ ldr ip, _020C10B0 ; =NNSi_SndPlayerStopSeq
+ ldr r0, [r0, #0x0]
+ bx r12
+ .balign 4
+_020C10B0: .word NNSi_SndPlayerStopSeq
+
+ arm_func_start NNS_SndPlayerCreateHeap
+NNS_SndPlayerCreateHeap: ; 0x020C10B4
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r5, r2
+ mov r6, r0
+ mov r0, r1
+ mov r3, #0x0
+ ldr r2, _020C1140 ; =PlayerHeapDisposeCallback
+ add r1, r5, #0x14
+ str r3, [sp, #0x0]
+ bl NNS_SndHeapAlloc
+ movs r4, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r2, #0x0
+ str r2, [r4, #0xc]
+ str r6, [r4, #0x10]
+ mov r1, r5
+ add r0, r4, #0x14
+ str r2, [r4, #0x8]
+ bl NNS_SndHeapCreate
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r2, _020C1144 ; =sPlayer
+ mov r1, #0x24
+ mla r2, r6, r1, r2
+ str r0, [r4, #0x8]
+ mov r1, r4
+ add r0, r2, #0xc
+ bl NNS_FndAppendListObject
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C1140: .word PlayerHeapDisposeCallback
+_020C1144: .word sPlayer
+
+ arm_func_start NNS_SndPlayerSetAllocatableChannel
+NNS_SndPlayerSetAllocatableChannel: ; 0x020C1148
+ mov r2, #0x24
+ mul r2, r0, r2
+ ldr r0, _020C115C ; =sPlayer + 0x1C
+ str r1, [r0, r2]
+ bx lr
+ .balign 4
+_020C115C: .word sPlayer + 0x1C
+
+ arm_func_start NNS_SndPlayerSetPlayableSeqCount
+NNS_SndPlayerSetPlayableSeqCount: ; 0x020C1160
+ mov r2, #0x24
+ mul r2, r0, r2
+ mov r0, r1, lsl #0x10
+ ldr r1, _020C117C ; =sPlayer + 0x18
+ mov r0, r0, lsr #0x10
+ str r0, [r1, r2]
+ bx lr
+ .balign 4
+_020C117C: .word sPlayer + 0x18
+
+ arm_func_start NNS_SndPlayerSetPlayerVolume
+NNS_SndPlayerSetPlayerVolume: ; 0x020C1180
+ mov r2, #0x24
+ mul r2, r0, r2
+ ldr r0, _020C1194 ; =sPlayer + 0x20
+ strb r1, [r0, r2]
+ bx lr
+ .balign 4
+_020C1194: .word sPlayer + 0x20
diff --git a/arm9/asm/NNS_SND_resource_mgr.s b/arm9/asm/NNS_SND_resource_mgr.s
new file mode 100644
index 00000000..944754cc
--- /dev/null
+++ b/arm9/asm/NNS_SND_resource_mgr.s
@@ -0,0 +1,129 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sCaptureLock
+sCaptureLock: ; 0x021D1CB0
+ .space 0x4
+
+ .global sAlarmLock
+sAlarmLock: ; 0x021D1CB4
+ .space 0x4
+
+ .global sChannelLock
+sChannelLock: ; 0x021D1CB8
+ .space 0x4
+
+ .section .text
+
+ arm_func_start NNSi_SndInitResourceMgr
+NNSi_SndInitResourceMgr: ; 0x020C0270
+ ldr r2, _020C0290 ; =sChannelLock
+ mov r3, #0x0
+ ldr r1, _020C0294 ; =sCaptureLock
+ ldr r0, _020C0298 ; =sAlarmLock
+ str r3, [r2, #0x0]
+ str r3, [r1, #0x0]
+ str r3, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C0290: .word sChannelLock
+_020C0294: .word sCaptureLock
+_020C0298: .word sAlarmLock
+
+ arm_func_start NNS_SndFreeAlarm
+NNS_SndFreeAlarm: ; 0x020C029C
+ ldr r1, _020C02B8 ; =sAlarmLock
+ mov r2, #0x1
+ mvn r0, r2, lsl r0
+ ldr r2, [r1, #0x0]
+ and r0, r2, r0
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020C02B8: .word sAlarmLock
+
+ arm_func_start NNS_SndAllocAlarm
+NNS_SndAllocAlarm: ; 0x020C02BC
+ ldr r0, _020C02FC ; =sAlarmLock
+ mov r3, #0x1
+ ldr r2, [r0, #0x0]
+ mov r0, #0x0
+_020C02CC:
+ ands r1, r2, r3
+ ldreq r1, _020C02FC ; =sAlarmLock
+ ldreq r2, [r1, #0x0]
+ orreq r2, r2, r3
+ streq r2, [r1, #0x0]
+ bxeq lr
+ add r0, r0, #0x1
+ cmp r0, #0x8
+ mov r3, r3, lsl #0x1
+ blt _020C02CC
+ mvn r0, #0x0
+ bx lr
+ .balign 4
+_020C02FC: .word sAlarmLock
+
+ arm_func_start NNS_SndUnlockCapture
+NNS_SndUnlockCapture: ; 0x020C0300
+ ldr r1, _020C0318 ; =sCaptureLock
+ mvn r0, r0
+ ldr r2, [r1, #0x0]
+ and r0, r2, r0
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020C0318: .word sCaptureLock
+
+ arm_func_start NNS_SndLockCapture
+NNS_SndLockCapture: ; 0x020C031C
+ ldr r1, _020C033C ; =sCaptureLock
+ ldr r2, [r1, #0x0]
+ ands r3, r0, r2
+ movne r0, #0x0
+ orreq r0, r2, r0
+ streq r0, [r1, #0x0]
+ moveq r0, #0x1
+ bx lr
+ .balign 4
+_020C033C: .word sCaptureLock
+
+ arm_func_start NNS_SndUnlockChannel
+NNS_SndUnlockChannel: ; 0x020C0340
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ ldmeqia sp!, {r4,pc}
+ mov r1, #0x0
+ bl SND_UnlockChannel
+ ldr r0, _020C036C ; =sChannelLock
+ mvn r1, r4
+ ldr r2, [r0, #0x0]
+ and r1, r2, r1
+ str r1, [r0, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C036C: .word sChannelLock
+
+ arm_func_start NNS_SndLockChannel
+NNS_SndLockChannel: ; 0x020C0370
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+ ldr r1, _020C03B4 ; =sChannelLock
+ ldr r1, [r1, #0x0]
+ ands r1, r4, r1
+ movne r0, #0x0
+ ldmneia sp!, {r4,pc}
+ mov r1, #0x0
+ bl SND_LockChannel
+ ldr r1, _020C03B4 ; =sChannelLock
+ mov r0, #0x1
+ ldr r2, [r1, #0x0]
+ orr r2, r2, r4
+ str r2, [r1, #0x0]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C03B4: .word sChannelLock
diff --git a/arm9/asm/NNS_SND_seqdata.s b/arm9/asm/NNS_SND_seqdata.s
new file mode 100644
index 00000000..60cf2420
--- /dev/null
+++ b/arm9/asm/NNS_SND_seqdata.s
@@ -0,0 +1,23 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start NNSi_SndSeqArcGetSeqInfo
+NNSi_SndSeqArcGetSeqInfo: ; 0x020C3D9C
+ cmp r1, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r2, [r0, #0x1c]
+ cmp r1, r2
+ movcs r0, #0x0
+ bxcs lr
+ mov r2, #0xc
+ mul r2, r1, r2
+ add r3, r0, #0x20
+ ldr r1, [r3, r2]
+ mvn r0, #0x0
+ cmp r1, r0
+ add r0, r3, r2
+ moveq r0, #0x0
+ bx lr
diff --git a/arm9/asm/NNS_SND_sndarc.s b/arm9/asm/NNS_SND_sndarc.s
new file mode 100644
index 00000000..aa46de46
--- /dev/null
+++ b/arm9/asm/NNS_SND_sndarc.s
@@ -0,0 +1,525 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sCurrent
+sCurrent: ; 0x021D28C0
+ .space 0x4
+
+ .section .text
+
+ arm_func_start SymbolDisposeCallback
+SymbolDisposeCallback: ; 0x020C209C
+ mov r0, #0x0
+ str r0, [r2, #0x88]
+ bx lr
+
+ arm_func_start FatDisposeCallback
+FatDisposeCallback: ; 0x020C20A8
+ mov r0, #0x0
+ str r0, [r2, #0x84]
+ bx lr
+
+ arm_func_start InfoDisposeCallback
+InfoDisposeCallback: ; 0x020C20B4
+ mov r0, #0x0
+ str r0, [r2, #0x8c]
+ bx lr
+
+ arm_func_start NNS_SndArcSetFileAddress
+NNS_SndArcSetFileAddress: ; 0x020C20C0
+ ldr r2, _020C20D8 ; =sCurrent
+ ldr r2, [r2, #0x0]
+ ldr r2, [r2, #0x84]
+ add r0, r2, r0, lsl #0x4
+ str r1, [r0, #0x14]
+ bx lr
+ .balign 4
+_020C20D8: .word sCurrent
+
+ arm_func_start NNS_SndArcGetFileAddress
+NNS_SndArcGetFileAddress: ; 0x020C20DC
+ ldr r1, _020C2100 ; =sCurrent
+ ldr r1, [r1, #0x0]
+ ldr r2, [r1, #0x84]
+ ldr r1, [r2, #0x8]
+ cmp r0, r1
+ movcs r0, #0x0
+ addcc r0, r2, r0, lsl #0x4
+ ldrcc r0, [r0, #0x14]
+ bx lr
+ .balign 4
+_020C2100: .word sCurrent
+
+ arm_func_start NNS_SndArcReadFile
+NNS_SndArcReadFile: ; 0x020C2104
+ stmdb sp!, {r4-r6,lr}
+ ldr r4, _020C2178 ; =sCurrent
+ mov r5, r2
+ ldr r4, [r4, #0x0]
+ mov r6, r1
+ ldr r2, [r4, #0x84]
+ ldr r1, [r2, #0x8]
+ cmp r0, r1
+ mvncs r0, #0x0
+ ldmcsia sp!, {r4-r6,pc}
+ add r1, r2, #0xc
+ add r1, r1, r0, lsl #0x4
+ ldr r0, [r1, #0x4]
+ ldr r1, [r1, #0x0]
+ sub r0, r0, r3
+ cmp r5, r0
+ movhi r5, r0
+ add r0, r4, #0x34
+ add r1, r1, r3
+ mov r2, #0x0
+ bl FS_SeekFile
+ cmp r0, #0x0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r1, r6
+ mov r2, r5
+ add r0, r4, #0x34
+ bl FS_ReadFile
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C2178: .word sCurrent
+
+ arm_func_start NNS_SndArcGetFileSize
+NNS_SndArcGetFileSize: ; 0x020C217C
+ ldr r1, _020C21A0 ; =sCurrent
+ ldr r1, [r1, #0x0]
+ ldr r2, [r1, #0x84]
+ ldr r1, [r2, #0x8]
+ cmp r0, r1
+ movcs r0, #0x0
+ addcc r0, r2, r0, lsl #0x4
+ ldrcc r0, [r0, #0x10]
+ bx lr
+ .balign 4
+_020C21A0: .word sCurrent
+
+ arm_func_start NNS_SndArcGetGroupInfo
+NNS_SndArcGetGroupInfo: ; 0x020C21A4
+ ldr r1, _020C2204 ; =sCurrent
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x1c]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2204: .word sCurrent
+
+ arm_func_start NNS_SndArcGetPlayerInfo
+NNS_SndArcGetPlayerInfo: ; 0x020C2208
+ ldr r1, _020C2268 ; =sCurrent
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x18]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2268: .word sCurrent
+
+ arm_func_start NNS_SndArcGetWaveArcInfo
+NNS_SndArcGetWaveArcInfo: ; 0x020C226C
+ ldr r1, _020C22CC ; =sCurrent
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x14]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C22CC: .word sCurrent
+
+ arm_func_start NNS_SndArcGetBankInfo
+NNS_SndArcGetBankInfo: ; 0x020C22D0
+ ldr r1, _020C2330 ; =sCurrent
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x10]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2330: .word sCurrent
+
+ arm_func_start NNS_SndArcGetSeqArcInfo
+NNS_SndArcGetSeqArcInfo: ; 0x020C2334
+ ldr r1, _020C2394 ; =sCurrent
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0xc]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C2394: .word sCurrent
+
+ arm_func_start NNS_SndArcGetSeqInfo
+NNS_SndArcGetSeqInfo: ; 0x020C2398
+ ldr r1, _020C23F8 ; =sCurrent
+ ldr r3, [r1, #0x0]
+ ldr r2, [r3, #0x8c]
+ ldr r1, [r2, #0x8]
+ cmp r1, #0x0
+ moveq r2, #0x0
+ addne r2, r2, r1
+ cmp r2, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ movlt r0, #0x0
+ bxlt lr
+ ldr r1, [r2, #0x0]
+ cmp r0, r1
+ movcs r0, #0x0
+ bxcs lr
+ add r0, r2, r0, lsl #0x2
+ ldr r1, [r0, #0x4]
+ ldr r0, [r3, #0x8c]
+ cmp r1, #0x0
+ moveq r0, #0x0
+ addne r0, r0, r1
+ bx lr
+ .balign 4
+_020C23F8: .word sCurrent
+
+ arm_func_start NNS_SndArcGetSeqParam
+NNS_SndArcGetSeqParam: ; 0x020C23FC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl NNS_SndArcGetSeqInfo
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r0, #0x4
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndArcGetCurrent
+NNS_SndArcGetCurrent: ; 0x020C241C
+ ldr r0, _020C2428 ; =sCurrent
+ ldr r0, [r0, #0x0]
+ bx lr
+ .balign 4
+_020C2428: .word sCurrent
+
+ arm_func_start NNS_SndArcSetCurrent
+NNS_SndArcSetCurrent: ; 0x020C242C
+ ldr r1, _020C2440 ; =sCurrent
+ ldr r2, [r1, #0x0]
+ str r0, [r1, #0x0]
+ mov r0, r2
+ bx lr
+ .balign 4
+_020C2440: .word sCurrent
+
+ arm_func_start NNS_SndArcInitOnMemory
+NNS_SndArcInitOnMemory: ; 0x020C2444
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ mov r4, r1
+ mov r0, r4
+ mov r1, r5
+ mov r2, #0x30
+ bl MIi_CpuCopy32
+ ldr r0, [r5, #0x18]
+ mov r12, #0x0
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r4, r0
+ str r0, [r5, #0x8c]
+ ldr r0, [r5, #0x20]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r4, r0
+ str r0, [r5, #0x84]
+ ldr r0, [r5, #0x10]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ addne r0, r4, r0
+ str r0, [r5, #0x88]
+ ldr r2, [r5, #0x84]
+ ldr r0, [r2, #0x8]
+ cmp r0, #0x0
+ bls _020C24F0
+ mov r3, r12
+ mov r1, r12
+_020C24BC:
+ add r2, r2, #0xc
+ ldr r0, [r2, r3]
+ add r2, r2, r3
+ cmp r0, #0x0
+ moveq r0, r1
+ addne r0, r4, r0
+ str r0, [r2, #0x8]
+ ldr r2, [r5, #0x84]
+ add r12, r12, #0x1
+ ldr r0, [r2, #0x8]
+ add r3, r3, #0x10
+ cmp r12, r0
+ blo _020C24BC
+_020C24F0:
+ mov r1, #0x0
+ ldr r0, _020C2508 ; =sCurrent
+ str r1, [r5, #0x30]
+ str r5, [r0, #0x0]
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C2508: .word sCurrent
+SDATi_ReadHeaders:
+ stmdb sp!, {r4-r6,lr}
+ sub sp, sp, #0x8
+ mov r6, r0
+ mov r5, r1
+ mov r1, #0x0
+ mov r4, r2
+ mov r2, r1
+ add r0, r6, #0x34
+ bl FS_SeekFile
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r1, r6
+ add r0, r6, #0x34
+ mov r2, #0x30
+ bl FS_ReadFile
+ cmp r0, #0x30
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+ cmp r5, #0x0
+ beq _020C26E0
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r1, [r6, #0x1c]
+ ldr r2, _020C26EC ; =InfoDisposeCallback
+ mov r0, r5
+ mov r3, r6
+ bl NNS_SndHeapAlloc
+ str r0, [r6, #0x8c]
+ ldr r0, [r6, #0x8c]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x18]
+ add r0, r6, #0x34
+ mov r2, #0x0
+ bl FS_SeekFile
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x8c]
+ ldr r2, [r6, #0x1c]
+ add r0, r6, #0x34
+ bl FS_ReadFile
+ ldr r1, [r6, #0x1c]
+ cmp r0, r1
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldr r1, [r6, #0x24]
+ ldr r2, _020C26F0 ; =FatDisposeCallback
+ mov r0, r5
+ mov r3, r6
+ bl NNS_SndHeapAlloc
+ str r0, [r6, #0x84]
+ ldr r0, [r6, #0x84]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x20]
+ add r0, r6, #0x34
+ mov r2, #0x0
+ bl FS_SeekFile
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x84]
+ ldr r2, [r6, #0x24]
+ add r0, r6, #0x34
+ bl FS_ReadFile
+ ldr r1, [r6, #0x24]
+ cmp r0, r1
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+ cmp r4, #0x0
+ beq _020C26E0
+ ldr r1, [r6, #0x14]
+ cmp r1, #0x0
+ beq _020C26E0
+ mov r4, #0x0
+ ldr r2, _020C26F4 ; =SymbolDisposeCallback
+ mov r0, r5
+ mov r3, r6
+ str r4, [sp, #0x0]
+ bl NNS_SndHeapAlloc
+ str r0, [r6, #0x88]
+ ldr r0, [r6, #0x88]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, r4
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x10]
+ add r0, r6, #0x34
+ mov r2, r4
+ bl FS_SeekFile
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, r4
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r1, [r6, #0x88]
+ ldr r2, [r6, #0x14]
+ add r0, r6, #0x34
+ bl FS_ReadFile
+ ldr r1, [r6, #0x14]
+ cmp r0, r1
+ addne sp, sp, #0x8
+ movne r0, r4
+ ldmneia sp!, {r4-r6,pc}
+_020C26E0:
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C26EC: .word InfoDisposeCallback
+_020C26F0: .word FatDisposeCallback
+_020C26F4: .word SymbolDisposeCallback
+
+ arm_func_start NNS_SndArcInit
+NNS_SndArcInit: ; 0x020C26F8
+ ; r0: &sSoundDataBuffer
+ ; r1: char* filename
+ ; r2: (&sSoundDataBuffer)->unk_0090
+ ; r3: 0
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r0
+ mov r12, #0x0
+ str r12, [r6, #0x8c]
+ str r12, [r6, #0x84]
+ add r0, r6, #0x7c
+ mov r5, r2
+ mov r4, r3
+ str r12, [r6, #0x88]
+ bl FS_ConvertPathToFileID
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ add r0, r6, #0x34
+ bl FS_InitFile
+ add r1, r6, #0x7c
+ add r0, r6, #0x34
+ ldmia r1, {r1-r2}
+ bl FS_OpenFileFast
+ cmp r0, #0x0
+ ldmeqia sp!, {r4-r6,pc}
+ mov r3, #0x1
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ str r3, [r6, #0x30]
+ bl SDATi_ReadHeaders
+ cmp r0, #0x0
+ ldrne r0, _020C2770 ; =sCurrent
+ strne r6, [r0, #0x0]
+ ldmia sp!, {r4-r6,pc}
+ .balign 4
+_020C2770: .word sCurrent
diff --git a/arm9/asm/NNS_SND_sndarc_loader.s b/arm9/asm/NNS_SND_sndarc_loader.s
new file mode 100644
index 00000000..26636305
--- /dev/null
+++ b/arm9/asm/NNS_SND_sndarc_loader.s
@@ -0,0 +1,872 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global waveArcHeader$8213
+waveArcHeader$8213: ; 0x021D28C4
+ .space 0x3c
+
+ .section .text
+
+ arm_func_start LoadSingleWaves
+LoadSingleWaves: ; 0x020C2B1C
+ stmdb sp!, {r4-r10,lr}
+ sub sp, sp, #0x20
+ mov r8, r0
+ add r0, sp, #0x8
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ ldr r4, [sp, #0x40]
+ bl SND_GetFirstInstDataPos
+ ldr r1, [sp, #0x8]
+ ldr r0, [sp, #0xc]
+ str r1, [sp, #0x0]
+ str r0, [sp, #0x4]
+ cmp r7, #0x0
+ add r2, sp, #0x0
+ addeq sp, sp, #0x20
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+ add r1, sp, #0x10
+ mov r0, r7
+ bl SND_GetNextInstData
+ cmp r0, #0x0
+ beq _020C2BD4
+ add r10, sp, #0x10
+ add r9, sp, #0x0
+_020C2B80:
+ ldrb r0, [sp, #0x10]
+ cmp r0, #0x1
+ bne _020C2BBC
+ ldrh r0, [sp, #0x14]
+ cmp r6, r0
+ bne _020C2BBC
+ ldrh r1, [sp, #0x12]
+ mov r0, r8
+ mov r2, r5
+ mov r3, r4
+ bl LoadSingleWave
+ cmp r0, #0x0
+ addeq sp, sp, #0x20
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r10,pc}
+_020C2BBC:
+ mov r0, r7
+ mov r1, r10
+ mov r2, r9
+ bl SND_GetNextInstData
+ cmp r0, #0x0
+ bne _020C2B80
+_020C2BD4:
+ mov r0, #0x1
+ add sp, sp, #0x20
+ ldmia sp!, {r4-r10,pc}
+
+ arm_func_start LoadSingleWave
+LoadSingleWave: ; 0x020C2BE0
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl SND_GetWaveDataAddress
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ movne r0, #0x1
+ ldmneia sp!, {r4-r9,pc}
+ mov r0, r7
+ bl SND_GetWaveDataCount
+ ldr r1, [r7, #0x38]
+ sub r0, r0, #0x1
+ add r1, r1, r6
+ add r1, r7, r1, lsl #0x2
+ cmp r6, r0
+ ldrcc r0, [r1, #0x40]
+ ldr r8, [r1, #0x3c]
+ ldrcs r0, [r7, #0x8]
+ cmp r4, #0x0
+ sub r9, r0, r8
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+ ldr r2, _020C2CBC ; =SingleWaveDisposeCallback
+ mov r0, r4
+ mov r3, r7
+ add r1, r9, #0x20
+ str r6, [sp, #0x0]
+ bl NNS_SndHeapAlloc
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+ mov r0, r5
+ mov r1, r4
+ mov r2, r9
+ mov r3, r8
+ bl NNS_SndArcReadFile
+ cmp r9, r0
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+ mov r0, r4
+ mov r1, r9
+ bl DC_StoreRange
+ mov r0, r7
+ mov r1, r6
+ mov r2, r4
+ bl SND_SetWaveDataAddress
+ mov r0, #0x1
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020C2CBC: .word SingleWaveDisposeCallback
+
+ arm_func_start SingleWaveDisposeCallback
+SingleWaveDisposeCallback: ; 0x020C2CC0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r5, r2
+ mov r7, r0
+ mov r4, r3
+ mov r6, r1
+ mov r0, r5
+ mov r1, r4
+ bl SND_GetWaveDataAddress
+ cmp r7, r0
+ bne _020C2CFC
+ mov r0, r5
+ mov r1, r4
+ mov r2, #0x0
+ bl SND_SetWaveDataAddress
+_020C2CFC:
+ mov r0, r7
+ add r1, r7, r6
+ bl SND_InvalidateWaveData
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start WaveArcTableDisposeCallback
+WaveArcTableDisposeCallback: ; 0x020C2D10
+ stmdb sp!, {r4,lr}
+ mov r1, r2
+ mov r4, r0
+ mov r2, r3
+ bl DisposeCallback
+ mov r0, r4
+ bl SND_DestroyWaveArc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start WaveArcDisposeCallback
+WaveArcDisposeCallback: ; 0x020C2D30
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, r2
+ mov r5, r0
+ mov r2, r3
+ bl DisposeCallback
+ mov r0, r5
+ add r1, r5, r4
+ bl SND_InvalidateWaveData
+ mov r0, r5
+ bl SND_DestroyWaveArc
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start BankDisposeCallback
+BankDisposeCallback: ; 0x020C2D68
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, r2
+ mov r5, r0
+ mov r2, r3
+ bl DisposeCallback
+ mov r0, r5
+ add r1, r5, r4
+ bl SND_InvalidateBankData
+ mov r0, r5
+ bl SND_DestroyBank
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start SeqDisposeCallback
+SeqDisposeCallback: ; 0x020C2DA0
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r1
+ mov r1, r2
+ mov r5, r0
+ mov r2, r3
+ bl DisposeCallback
+ mov r0, r5
+ add r1, r5, r4
+ bl SND_InvalidateSeqData
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start DisposeCallback
+DisposeCallback: ; 0x020C2DD0
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ movs r5, r1
+ mov r7, r0
+ mov r6, r2
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r7,pc}
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r0, r5
+ bl NNS_SndArcSetCurrent
+ mov r5, r0
+ mov r0, r6
+ bl NNS_SndArcGetFileAddress
+ cmp r7, r0
+ bne _020C2E1C
+ mov r0, r6
+ mov r1, #0x0
+ bl NNS_SndArcSetFileAddress
+_020C2E1C:
+ mov r0, r5
+ bl NNS_SndArcSetCurrent
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start LoadWaveArcTable
+LoadWaveArcTable: ; 0x020C2E34
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x4
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ bl NNS_SndArcGetFileAddress
+ movs r6, r0
+ bne _020C2F40
+ ldr r1, _020C2F4C ; =waveArcHeader$8213
+ mov r0, r9
+ mov r2, #0x3c
+ mov r3, #0x0
+ bl NNS_SndArcReadFile
+ cmp r0, #0x3c
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+ ldr r0, _020C2F4C ; =waveArcHeader$8213
+ cmp r8, #0x0
+ ldr r0, [r0, #0x38]
+ addeq sp, sp, #0x4
+ mov r4, r0, lsl #0x2
+ mov r0, r4, lsl #0x1
+ add r5, r0, #0x3c
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+ cmp r7, #0x0
+ moveq r3, #0x0
+ beq _020C2EB0
+ bl NNS_SndArcGetCurrent
+ mov r3, r0
+_020C2EB0:
+ ldr r2, _020C2F50 ; =WaveArcTableDisposeCallback
+ mov r0, r8
+ add r1, r5, #0x20
+ str r9, [sp, #0x0]
+ bl NNS_SndHeapAlloc
+ movs r6, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r9,pc}
+ mov r0, r9
+ mov r1, r6
+ add r2, r4, #0x3c
+ mov r3, #0x0
+ bl NNS_SndArcReadFile
+ add r1, r4, #0x3c
+ cmp r0, r1
+ addne sp, sp, #0x4
+ movne r0, #0x0
+ ldmneia sp!, {r4-r9,pc}
+ ldr r1, [r6, #0x38]
+ add r0, r6, #0x3c
+ mov r2, r4
+ add r1, r0, r1, lsl #0x2
+ bl MI_CpuCopy8
+ mov r2, r4
+ add r0, r6, #0x3c
+ mov r1, #0x0
+ bl MI_CpuFill8
+ mov r0, r6
+ mov r1, r5
+ bl DC_StoreRange
+ cmp r7, #0x0
+ beq _020C2F40
+ mov r0, r9
+ mov r1, r6
+ bl NNS_SndArcSetFileAddress
+_020C2F40:
+ mov r0, r6
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020C2F4C: .word waveArcHeader$8213
+_020C2F50: .word WaveArcTableDisposeCallback
+
+ arm_func_start LoadWaveArc
+LoadWaveArc: ; 0x020C2F54
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl NNS_SndArcGetFileAddress
+ movs r4, r0
+ bne _020C2FBC
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C2F88
+ bl NNS_SndArcGetCurrent
+ mov r2, r0
+_020C2F88:
+ ldr r1, _020C2FC8 ; =WaveArcDisposeCallback
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl NNSi_SndArcLoadFile
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C2FBC
+ cmp r4, #0x0
+ beq _020C2FBC
+ mov r0, r7
+ mov r1, r4
+ bl NNS_SndArcSetFileAddress
+_020C2FBC:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C2FC8: .word WaveArcDisposeCallback
+
+ arm_func_start LoadBank
+LoadBank: ; 0x020C2FCC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl NNS_SndArcGetFileAddress
+ movs r4, r0
+ bne _020C3034
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C3000
+ bl NNS_SndArcGetCurrent
+ mov r2, r0
+_020C3000:
+ ldr r1, _020C3040 ; =BankDisposeCallback
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl NNSi_SndArcLoadFile
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C3034
+ cmp r4, #0x0
+ beq _020C3034
+ mov r0, r7
+ mov r1, r4
+ bl NNS_SndArcSetFileAddress
+_020C3034:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C3040: .word BankDisposeCallback
+
+ arm_func_start LoadSeqArc
+LoadSeqArc: ; 0x020C3044
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl NNS_SndArcGetFileAddress
+ movs r4, r0
+ bne _020C30AC
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C3078
+ bl NNS_SndArcGetCurrent
+ mov r2, r0
+_020C3078:
+ ldr r1, _020C30B8 ; =SeqDisposeCallback
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl NNSi_SndArcLoadFile
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C30AC
+ cmp r4, #0x0
+ beq _020C30AC
+ mov r0, r7
+ mov r1, r4
+ bl NNS_SndArcSetFileAddress
+_020C30AC:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C30B8: .word SeqDisposeCallback
+
+ arm_func_start LoadSeq
+LoadSeq: ; 0x020C30BC
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl NNS_SndArcGetFileAddress
+ movs r4, r0
+ bne _020C3124
+ cmp r5, #0x0
+ moveq r2, #0x0
+ beq _020C30F0
+ bl NNS_SndArcGetCurrent
+ mov r2, r0
+_020C30F0:
+ ldr r1, _020C3130 ; =SeqDisposeCallback
+ mov r0, r7
+ mov r3, r7
+ str r6, [sp, #0x0]
+ bl NNSi_SndArcLoadFile
+ mov r4, r0
+ cmp r5, #0x0
+ beq _020C3124
+ cmp r4, #0x0
+ beq _020C3124
+ mov r0, r7
+ mov r1, r4
+ bl NNS_SndArcSetFileAddress
+_020C3124:
+ mov r0, r4
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C3130: .word SeqDisposeCallback
+
+ arm_func_start NNSi_SndArcLoadFile
+NNSi_SndArcLoadFile: ; 0x020C3134
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r4, r3
+ bl NNS_SndArcGetFileSize
+ movs r5, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ ldr r0, [sp, #0x20]
+ cmp r0, #0x0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ mov r2, r7
+ mov r3, r6
+ add r1, r5, #0x20
+ str r4, [sp, #0x0]
+ bl NNS_SndHeapAlloc
+ movs r4, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ mov r0, r8
+ mov r1, r4
+ mov r2, r5
+ mov r3, #0x0
+ bl NNS_SndArcReadFile
+ cmp r5, r0
+ addne sp, sp, #0x8
+ movne r0, #0x0
+ ldmneia sp!, {r4-r8,pc}
+ mov r0, r4
+ mov r1, r5
+ bl DC_StoreRange
+ mov r0, r4
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start NNSi_SndArcLoadWaveArc
+NNSi_SndArcLoadWaveArc: ; 0x020C31D4
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl NNS_SndArcGetWaveArcInfo
+ cmp r0, #0x0
+ moveq r0, #0x5
+ ldmeqia sp!, {r4-r6,pc}
+ ands r1, r6, #0x4
+ beq _020C324C
+ ldrb r1, [r0, #0x3]
+ ands r1, r1, #0x1
+ beq _020C3224
+ ldr r0, [r0, #0x0]
+ mov r1, r5
+ mov r0, r0, lsl #0x8
+ mov r2, r4
+ mov r0, r0, lsr #0x8
+ bl LoadWaveArcTable
+ b _020C323C
+_020C3224:
+ ldr r0, [r0, #0x0]
+ mov r1, r5
+ mov r0, r0, lsl #0x8
+ mov r2, r4
+ mov r0, r0, lsr #0x8
+ bl LoadWaveArc
+_020C323C:
+ cmp r0, #0x0
+ bne _020C325C
+ mov r0, #0x9
+ ldmia sp!, {r4-r6,pc}
+_020C324C:
+ ldr r0, [r0, #0x0]
+ mov r0, r0, lsl #0x8
+ mov r0, r0, lsr #0x8
+ bl NNS_SndArcGetFileAddress
+_020C325C:
+ ldr r1, [sp, #0x10]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start NNSi_SndArcLoadBank
+NNSi_SndArcLoadBank: ; 0x020C3270
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r10, r1
+ mov r9, r2
+ mov r11, r3
+ bl NNS_SndArcGetBankInfo
+ movs r8, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x4
+ ldmeqia sp!, {r4-r11,pc}
+ ands r0, r10, #0x2
+ beq _020C32C4
+ ldr r0, [r8, #0x0]
+ mov r1, r9
+ mov r2, r11
+ bl LoadBank
+ movs r7, r0
+ bne _020C32D0
+ add sp, sp, #0xc
+ mov r0, #0x8
+ ldmia sp!, {r4-r11,pc}
+_020C32C4:
+ ldr r0, [r8, #0x0]
+ bl NNS_SndArcGetFileAddress
+ mov r7, r0
+_020C32D0:
+ and r5, r10, #0x4
+ mov r6, #0x0
+_020C32D8:
+ add r0, r8, r6, lsl #0x1
+ ldrh r0, [r0, #0x4]
+ ldr r1, _020C33B4 ; =0x0000FFFF
+ cmp r0, r1
+ beq _020C3390
+ bl NNS_SndArcGetWaveArcInfo
+ movs r4, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x5
+ ldmeqia sp!, {r4-r11,pc}
+ add r0, sp, #0x4
+ str r0, [sp, #0x0]
+ add r0, r8, r6, lsl #0x1
+ ldrh r0, [r0, #0x4]
+ mov r1, r10
+ mov r2, r9
+ mov r3, r11
+ bl NNSi_SndArcLoadWaveArc
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,pc}
+ ldrb r0, [r4, #0x3]
+ ands r0, r0, #0x1
+ beq _020C3370
+ cmp r5, #0x0
+ beq _020C3370
+ str r9, [sp, #0x0]
+ ldr r1, [r4, #0x0]
+ ldr r0, [sp, #0x4]
+ mov r3, r1, lsl #0x8
+ mov r1, r7
+ mov r2, r6
+ mov r3, r3, lsr #0x8
+ bl LoadSingleWaves
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x9
+ ldmeqia sp!, {r4-r11,pc}
+_020C3370:
+ cmp r7, #0x0
+ beq _020C3390
+ ldr r2, [sp, #0x4]
+ cmp r2, #0x0
+ beq _020C3390
+ mov r0, r7
+ mov r1, r6
+ bl SND_AssignWaveArc
+_020C3390:
+ add r6, r6, #0x1
+ cmp r6, #0x4
+ blt _020C32D8
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ strne r7, [r0, #0x0]
+ mov r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C33B4: .word 0x0000FFFF
+
+ arm_func_start NNSi_SndArcLoadSeqArc
+NNSi_SndArcLoadSeqArc: ; 0x020C33B8
+ stmdb sp!, {r4-r6,lr}
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl NNS_SndArcGetSeqArcInfo
+ cmp r0, #0x0
+ moveq r0, #0x3
+ ldmeqia sp!, {r4-r6,pc}
+ ands r1, r6, #0x8
+ beq _020C3400
+ ldr r0, [r0, #0x0]
+ mov r1, r5
+ mov r2, r4
+ bl LoadSeqArc
+ cmp r0, #0x0
+ bne _020C3408
+ mov r0, #0x7
+ ldmia sp!, {r4-r6,pc}
+_020C3400:
+ ldr r0, [r0, #0x0]
+ bl NNS_SndArcGetFileAddress
+_020C3408:
+ ldr r1, [sp, #0x10]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start NNSi_SndArcLoadSeq
+NNSi_SndArcLoadSeq: ; 0x020C341C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl NNS_SndArcGetSeqInfo
+ movs r4, r0
+ addeq sp, sp, #0x4
+ moveq r0, #0x2
+ ldmeqia sp!, {r4-r7,pc}
+ mov r0, #0x0
+ str r0, [sp, #0x0]
+ ldrh r0, [r4, #0x4]
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ bl NNSi_SndArcLoadBank
+ cmp r0, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {r4-r7,pc}
+ ands r0, r7, #0x1
+ beq _020C3498
+ ldr r0, [r4, #0x0]
+ mov r1, r6
+ mov r2, r5
+ bl LoadSeq
+ cmp r0, #0x0
+ bne _020C34A0
+ add sp, sp, #0x4
+ mov r0, #0x6
+ ldmia sp!, {r4-r7,pc}
+_020C3498:
+ ldr r0, [r4, #0x0]
+ bl NNS_SndArcGetFileAddress
+_020C34A0:
+ ldr r1, [sp, #0x18]
+ cmp r1, #0x0
+ strne r0, [r1, #0x0]
+ mov r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start NNSi_SndArcLoadGroup
+NNSi_SndArcLoadGroup: ; 0x020C34B8
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ mov r9, r1
+ bl NNS_SndArcGetGroupInfo
+ movs r8, r0
+ addeq sp, sp, #0xc
+ moveq r0, #0x1
+ ldmeqia sp!, {r4-r11,pc}
+ ldr r0, [r8, #0x0]
+ mov r7, #0x0
+ cmp r0, #0x0
+ bls _020C35D4
+ add r6, r8, #0x4
+ str r7, [sp, #0x4]
+ mov r11, r7
+ mov r10, r7
+ mov r5, r7
+ mov r4, #0x1
+_020C3500:
+ ldrb r0, [r6, #0x0]
+ cmp r0, #0x3
+ addls pc, pc, r0, lsl #0x2
+ b _020C35C0
+ ; Jump table
+ b _020C3520 ; case 0
+ b _020C3570 ; case 1
+ b _020C3598 ; case 2
+ b _020C3548 ; case 3
+_020C3520:
+ str r5, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r2, r9
+ mov r3, r4
+ bl NNSi_SndArcLoadSeq
+ cmp r0, #0x0
+ beq _020C35C0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020C3548:
+ str r10, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r2, r9
+ mov r3, r4
+ bl NNSi_SndArcLoadSeqArc
+ cmp r0, #0x0
+ beq _020C35C0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020C3570:
+ str r11, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r2, r9
+ mov r3, r4
+ bl NNSi_SndArcLoadBank
+ cmp r0, #0x0
+ beq _020C35C0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+_020C3598:
+ ldr r0, [sp, #0x4]
+ mov r2, r9
+ str r0, [sp, #0x0]
+ ldrb r1, [r6, #0x1]
+ ldr r0, [r6, #0x4]
+ mov r3, r4
+ bl NNSi_SndArcLoadWaveArc
+ cmp r0, #0x0
+ addne sp, sp, #0xc
+ ldmneia sp!, {r4-r11,pc}
+_020C35C0:
+ ldr r0, [r8, #0x0]
+ add r7, r7, #0x1
+ cmp r7, r0
+ add r6, r6, #0x8
+ blo _020C3500
+_020C35D4:
+ mov r0, #0x0
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+
+ arm_func_start NNS_SndArcLoadSeqEx
+NNS_SndArcLoadSeqEx: ; 0x020C35E0
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r12, #0x0
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadSeq
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndArcLoadWaveArc
+NNS_SndArcLoadWaveArc: ; 0x020C360C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r12, #0x0
+ mov r1, #0xff
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadWaveArc
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndArcLoadBank
+NNS_SndArcLoadBank: ; 0x020C3640
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r12, #0x0
+ mov r1, #0xff
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadBank
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndArcLoadSeq
+NNS_SndArcLoadSeq: ; 0x020C3674
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ mov r2, r1
+ mov r12, #0x0
+ mov r1, #0xff
+ mov r3, #0x1
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadSeq
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndArcLoadGroup
+NNS_SndArcLoadGroup: ; 0x020C36A8
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ bl NNSi_SndArcLoadGroup
+ cmp r0, #0x0
+ moveq r0, #0x1
+ movne r0, #0x0
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
diff --git a/arm9/asm/NNS_SND_sndarc_player.s b/arm9/asm/NNS_SND_sndarc_player.s
new file mode 100644
index 00000000..c043967b
--- /dev/null
+++ b/arm9/asm/NNS_SND_sndarc_player.s
@@ -0,0 +1,261 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start StartSeqArc
+StartSeqArc: ; 0x020C36C8
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x8
+ mov r7, r2
+ mov r2, r3
+ ldr r6, [sp, #0x20]
+ mov r4, r0
+ mov r8, r1
+ bl NNSi_SndPlayerAllocSeqPlayer
+ movs r5, r0
+ addeq sp, sp, #0x8
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ mov r0, r8
+ mov r1, r5
+ bl NNSi_SndPlayerAllocHeap
+ add r12, sp, #0x4
+ mov r2, r0
+ mov r0, r7
+ mov r1, #0x6
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadBank
+ cmp r0, #0x0
+ beq _020C373C
+ mov r0, r5
+ bl NNSi_SndPlayerFreeSeqPlayer
+ add sp, sp, #0x8
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020C373C:
+ ldr r12, [sp, #0x24]
+ ldr r2, [r6, #0x0]
+ ldr r1, [r12, #0x18]
+ ldr r3, [sp, #0x4]
+ mov r0, r5
+ add r1, r12, r1
+ bl NNSi_SndPlayerStartSeq
+ ldrb r1, [r6, #0x6]
+ mov r0, r4
+ bl NNS_SndPlayerSetInitialVolume
+ ldrb r1, [r6, #0x7]
+ mov r0, r4
+ bl NNS_SndPlayerSetChannelPriority
+ ldr r1, [sp, #0x28]
+ ldr r2, [sp, #0x2c]
+ mov r0, r4
+ bl NNS_SndPlayerSetSeqArcNo
+ mov r0, #0x1
+ add sp, sp, #0x8
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start StartSeq
+StartSeq: ; 0x020C378C
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ mov r8, r2
+ mov r2, r3
+ ldr r5, [sp, #0x28]
+ mov r6, r0
+ mov r7, r1
+ bl NNSi_SndPlayerAllocSeqPlayer
+ movs r4, r0
+ addeq sp, sp, #0x10
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ mov r0, r7
+ mov r1, r4
+ bl NNSi_SndPlayerAllocHeap
+ mov r7, r0
+ add r12, sp, #0x8
+ mov r0, r8
+ mov r2, r7
+ mov r1, #0x6
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadBank
+ cmp r0, #0x0
+ beq _020C3804
+ mov r0, r4
+ bl NNSi_SndPlayerFreeSeqPlayer
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020C3804:
+ ldr r0, [sp, #0x2c]
+ add r12, sp, #0x4
+ mov r2, r7
+ mov r1, #0x1
+ mov r3, #0x0
+ str r12, [sp, #0x0]
+ bl NNSi_SndArcLoadSeq
+ cmp r0, #0x0
+ beq _020C383C
+ mov r0, r4
+ bl NNSi_SndPlayerFreeSeqPlayer
+ add sp, sp, #0x10
+ mov r0, #0x0
+ ldmia sp!, {r4-r8,pc}
+_020C383C:
+ ldr r2, [sp, #0x4]
+ ldr r3, [sp, #0x8]
+ ldr r1, [r2, #0x18]
+ mov r0, r4
+ add r1, r2, r1
+ mov r2, #0x0
+ bl NNSi_SndPlayerStartSeq
+ ldrb r1, [r5, #0x6]
+ mov r0, r6
+ bl NNS_SndPlayerSetInitialVolume
+ ldrb r1, [r5, #0x7]
+ mov r0, r6
+ bl NNS_SndPlayerSetChannelPriority
+ ldr r1, [sp, #0x2c]
+ mov r0, r6
+ bl NNS_SndPlayerSetSeqNo
+ mov r0, #0x1
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start NNS_SndArcPlayerStartSeqArc
+NNS_SndArcPlayerStartSeqArc: ; 0x020C3888
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r6, r1
+ mov r7, r0
+ mov r0, r6
+ mov r5, r2
+ bl NNS_SndArcGetSeqArcInfo
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+ ldr r0, [r0, #0x0]
+ bl NNS_SndArcGetFileAddress
+ movs r4, r0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+ mov r1, r5
+ bl NNSi_SndSeqArcGetSeqInfo
+ cmp r0, #0x0
+ addeq sp, sp, #0x14
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+ str r0, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str r6, [sp, #0x8]
+ str r5, [sp, #0xc]
+ ldrb r1, [r0, #0x9]
+ ldrh r2, [r0, #0x4]
+ ldrb r3, [r0, #0x8]
+ mov r0, r7
+ bl StartSeqArc
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start NNS_SndArcPlayerStartSeqEx
+NNS_SndArcPlayerStartSeqEx: ; 0x020C3910
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0xc
+ mov r7, r0
+ ldr r0, [sp, #0x20]
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl NNS_SndArcGetSeqInfo
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r7,pc}
+ cmp r4, #0x0
+ ldrltb r4, [r0, #0x8]
+ cmp r5, #0x0
+ ldrlth r5, [r0, #0x4]
+ cmp r6, #0x0
+ ldrltb r6, [r0, #0x9]
+ ldr r12, [sp, #0x20]
+ mov r2, r5
+ str r0, [sp, #0x0]
+ mov r0, r7
+ mov r1, r6
+ mov r3, r4
+ str r12, [sp, #0x4]
+ bl StartSeq
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r7,pc}
+
+ arm_func_start NNS_SndArcPlayerStartSeq
+NNS_SndArcPlayerStartSeq: ; 0x020C3980
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r4, r1
+ mov r5, r0
+ mov r0, r4
+ bl NNS_SndArcGetSeqInfo
+ cmp r0, #0x0
+ addeq sp, sp, #0xc
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r5,pc}
+ str r0, [sp, #0x0]
+ str r4, [sp, #0x4]
+ ldrb r1, [r0, #0x9]
+ ldrh r2, [r0, #0x4]
+ ldrb r3, [r0, #0x8]
+ mov r0, r5
+ bl StartSeq
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start NNS_SndArcPlayerSetup
+NNS_SndArcPlayerSetup: ; 0x020C39CC
+ stmdb sp!, {r4-r8,lr}
+ mov r6, r0
+ bl NNS_SndArcGetCurrent
+ mov r5, #0x0
+ mov r7, r5
+_020C39E0:
+ mov r0, r5
+ bl NNS_SndArcGetPlayerInfo
+ movs r4, r0
+ beq _020C3A58
+ ldrb r1, [r4, #0x0]
+ mov r0, r5
+ bl NNS_SndPlayerSetPlayableSeqCount
+ ldrh r1, [r4, #0x2]
+ mov r0, r5
+ bl NNS_SndPlayerSetAllocatableChannel
+ ldr r0, [r4, #0x4]
+ cmp r0, #0x0
+ beq _020C3A58
+ cmp r6, #0x0
+ beq _020C3A58
+ ldrb r0, [r4, #0x0]
+ mov r8, r7
+ cmp r0, #0x0
+ ble _020C3A58
+_020C3A2C:
+ ldr r2, [r4, #0x4]
+ mov r0, r5
+ mov r1, r6
+ bl NNS_SndPlayerCreateHeap
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4-r8,pc}
+ ldrb r0, [r4, #0x0]
+ add r8, r8, #0x1
+ cmp r8, r0
+ blt _020C3A2C
+_020C3A58:
+ add r5, r5, #0x1
+ cmp r5, #0x20
+ blt _020C39E0
+ mov r0, #0x1
+ ldmia sp!, {r4-r8,pc}
diff --git a/arm9/asm/NNS_SND_sndarc_stream.s b/arm9/asm/NNS_SND_sndarc_stream.s
new file mode 100644
index 00000000..1962bdcc
--- /dev/null
+++ b/arm9/asm/NNS_SND_sndarc_stream.s
@@ -0,0 +1,263 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sPrepareThread
+sPrepareThread: ; 0x021D2900
+ .space 0x4
+
+ .global sFreeCommandList
+sFreeCommandList: ; 0x021D2904
+ .space 0xC
+ ; sStrmThread
+ .global sStrmThread
+sStrmThread: ; 0x021D2910
+ .space 0x4EC
+
+ .global sStrmPlayer
+sStrmPlayer: ; 0x021D2DFC
+ .space 0x5c0
+
+ .section .text
+
+ arm_func_start FreeCommandBuffer
+FreeCommandBuffer: ; 0x020C3A6C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ bl OS_DisableInterrupts
+ mov r4, r0
+ ldr r0, _020C3A9C ; =sFreeCommandList
+ mov r1, r5
+ bl NNS_FndAppendListObject
+ mov r0, r4
+ bl OS_RestoreInterrupts
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C3A9C: .word sFreeCommandList
+
+ arm_func_start RemoveCommandByPlayer
+RemoveCommandByPlayer: ; 0x020C3AA0
+ stmdb sp!, {r4-r8,lr}
+ mov r8, r0
+ mov r7, r1
+ bl OS_DisableInterrupts
+ mov r6, r0
+ mov r0, r8
+ mov r1, #0x0
+ bl NNS_FndGetNextListObject
+ movs r5, r0
+ beq _020C3B04
+_020C3AC8:
+ mov r0, r8
+ mov r1, r5
+ bl NNS_FndGetNextListObject
+ ldr r1, [r5, #0x8]
+ mov r4, r0
+ cmp r1, r7
+ bne _020C3AF8
+ mov r0, r8
+ mov r1, r5
+ bl NNS_FndRemoveListObject
+ mov r0, r5
+ bl FreeCommandBuffer
+_020C3AF8:
+ mov r5, r4
+ cmp r4, #0x0
+ bne _020C3AC8
+_020C3B04:
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ ldmia sp!, {r4-r8,pc}
+
+ arm_func_start FreeChannel
+FreeChannel: ; 0x020C3B10
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x120]
+ cmp r1, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ sub r1, r1, #0x1
+ str r1, [r0, #0x120]
+ ldr r1, [r0, #0x120]
+ cmp r1, #0x0
+ addne sp, sp, #0x4
+ ldmneia sp!, {pc}
+ bl NNS_SndStrmFreeChannel
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ local_arm_func_start ShutdownPlayer
+ShutdownPlayer: ; 0x020C3B4C
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r1, [r4, #0x110]
+ mov r1, r1, lsl #0x1f
+ movs r1, r1, asr #0x1f
+ ldmeqia sp!, {r4,pc}
+ bl FreeChannel
+ ldr r1, [r4, #0x164]
+ mov r0, r4
+ blx r1
+ ldr r0, _020C3BA8 ; =sStrmThread + 0x4E0
+ mov r1, r4
+ bl RemoveCommandByPlayer
+ ldr r0, _020C3BAC ; =sPrepareThread
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020C3B9C
+ mov r1, r4
+ add r0, r0, #0x4e0
+ bl RemoveCommandByPlayer
+_020C3B9C:
+ mov r0, r4
+ bl FreePlayer
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C3BA8: .word sStrmThread + 0x4E0
+_020C3BAC: .word sPrepareThread
+
+ local_arm_func_start ForceStopStrm
+ForceStopStrm: ; 0x020C3BB0
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, _020C3C40 ; =sStrmThread + 0x4C8
+ bl OS_LockMutex
+ ldr r0, _020C3C44 ; =sPrepareThread
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ beq _020C3BDC
+ ldr r0, _020C3C48 ; =0x000004C8
+ add r0, r1, r0
+ bl OS_LockMutex
+_020C3BDC:
+ ldr r0, [r4, #0x110]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ beq _020C3BF4
+ mov r0, r4
+ bl NNS_SndStrmStop
+_020C3BF4:
+ ldr r0, [r4, #0x110]
+ mov r0, r0, lsl #0x1f
+ movs r0, r0, asr #0x1f
+ beq _020C3C10
+ ldr r1, [r4, #0x16c]
+ mov r0, r4
+ blx r1
+_020C3C10:
+ mov r0, r4
+ bl ShutdownPlayer
+ ldr r0, _020C3C40 ; =sStrmThread + 0x4C8
+ bl OS_UnlockMutex
+ ldr r0, _020C3C44 ; =sPrepareThread
+ ldr r1, [r0, #0x0]
+ cmp r1, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r0, _020C3C48 ; =0x000004C8
+ add r0, r1, r0
+ bl OS_UnlockMutex
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C3C40: .word sStrmThread + 0x4C8
+_020C3C44: .word sPrepareThread
+_020C3C48: .word 0x000004C8
+
+ arm_func_start FreePlayer
+FreePlayer: ; 0x020C3C4C
+ ldr r2, [r0, #0x14c]
+ cmp r2, #0x0
+ movne r1, #0x0
+ strne r1, [r2, #0x0]
+ strne r1, [r0, #0x14c]
+ ldr r1, [r0, #0x110]
+ bic r1, r1, #0x1
+ str r1, [r0, #0x110]
+ ldr r1, [r0, #0x110]
+ bic r1, r1, #0x4
+ str r1, [r0, #0x110]
+ ldr r1, [r0, #0x110]
+ bic r1, r1, #0x2
+ str r1, [r0, #0x110]
+ bx lr
+
+ arm_func_start NNSi_SndArcStrmMain
+NNSi_SndArcStrmMain: ; 0x020C3C88
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x4
+ ldr r5, _020C3D94 ; =sStrmPlayer
+ mov r7, #0x0
+ ldr r4, _020C3D98 ; =SNDi_DecibelTable
+_020C3C9C:
+ ldr r1, [r5, #0x110]
+ mov r0, r1, lsl #0x1f
+ movs r0, r0, asr #0x1f
+ beq _020C3D7C
+ ldr r0, [r5, #0x114]
+ cmp r0, #0x0
+ bne _020C3CC4
+ mov r0, r5
+ bl ForceStopStrm
+ b _020C3D7C
+_020C3CC4:
+ mov r0, r1, lsl #0x1d
+ movs r0, r0, asr #0x1f
+ beq _020C3CFC
+ ldr r0, [r5, #0x118]
+ cmp r0, #0x0
+ beq _020C3CFC
+ mov r0, r5
+ bl NNS_SndStrmStart
+ ldr r0, [r5, #0x110]
+ orr r0, r0, #0x2
+ str r0, [r5, #0x110]
+ ldr r0, [r5, #0x110]
+ bic r0, r0, #0x4
+ str r0, [r5, #0x110]
+_020C3CFC:
+ ldr r0, [r5, #0x110]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ beq _020C3D7C
+ add r0, r5, #0xe8
+ bl NNSi_SndFaderUpdate
+ ldr r1, [r5, #0x154]
+ add r0, r5, #0xe8
+ mov r1, r1, lsl #0x1
+ ldrsh r6, [r4, r1]
+ bl NNSi_SndFaderGet
+ mov r0, r0, asr #0x8
+ mov r0, r0, lsl #0x1
+ ldrsh r1, [r4, r0]
+ ldr r0, [r5, #0x158]
+ add r6, r1, r6
+ cmp r6, r0
+ beq _020C3D54
+ mov r0, r5
+ mov r1, r6
+ bl NNS_SndStrmSetVolume
+ str r6, [r5, #0x158]
+_020C3D54:
+ ldr r0, [r5, #0x110]
+ mov r0, r0, lsl #0x1c
+ movs r0, r0, asr #0x1f
+ beq _020C3D7C
+ add r0, r5, #0xe8
+ bl NNSi_SndFaderIsFinished
+ cmp r0, #0x0
+ beq _020C3D7C
+ mov r0, r5
+ bl ForceStopStrm
+_020C3D7C:
+ add r7, r7, #0x1
+ cmp r7, #0x4
+ add r5, r5, #0x170
+ blt _020C3C9C
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020C3D94: .word sStrmPlayer
+_020C3D98: .word SNDi_DecibelTable
diff --git a/arm9/asm/NNS_SND_stream.s b/arm9/asm/NNS_SND_stream.s
new file mode 100644
index 00000000..53432742
--- /dev/null
+++ b/arm9/asm/NNS_SND_stream.s
@@ -0,0 +1,456 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global bInitialized$7761
+bInitialized$7761: ; 0x021D26D4
+ .space 0x4
+
+ .global sStrmList
+sStrmList: ; 0x021D26D8
+ .space 0xc
+
+ .global buffer$7877
+buffer$7877: ; 0x021D26E4
+ .space 0x40
+
+ .global sStrmChannel
+sStrmChannel: ; 0x021D2724
+ .space 0x80
+
+ .section .text
+
+ local_arm_func_start EndSleep
+EndSleep: ; 0x020C1198
+ stmdb sp!, {r4-r6,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x24]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ ldmeqia sp!, {r4-r6,pc}
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ beq _020C11E8
+ mov r5, #0x1
+_020C11C0:
+ bl OS_DisableInterrupts
+ mov r6, r0
+ mov r0, r4
+ mov r1, r5
+ bl StrmCallback
+ mov r0, r6
+ bl OS_RestoreInterrupts
+ ldr r0, [r4, #0x38]
+ cmp r0, #0x0
+ bne _020C11C0
+_020C11E8:
+ ldr r0, [r4, #0x40]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r2, r2, lsl r0
+ ldr r0, [r4, #0x44]
+ mov r3, r1
+ bl SND_StartTimer
+ ldmia sp!, {r4-r6,pc}
+
+ local_arm_func_start BeginSleep
+BeginSleep: ; 0x020C1208
+ stmdb sp!, {r4,lr}
+ ldr r1, [r0, #0x24]
+ mov r1, r1, lsl #0x1e
+ movs r1, r1, asr #0x1f
+ ldmeqia sp!, {r4,pc}
+ ldr r2, [r0, #0x40]
+ mov r3, #0x1
+ mov r1, #0x0
+ mov r2, r3, lsl r2
+ ldr r0, [r0, #0x44]
+ mov r3, r1
+ bl SND_StopTimer
+ bl SND_GetCurrentCommandTag
+ mov r4, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r4
+ bl SND_WaitForCommandProc
+ ldmia sp!, {r4,pc}
+
+ arm_func_start StrmCallback
+StrmCallback: ; 0x020C1254
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ ldr r0, [r5, #0x28]
+ ldr r1, [r5, #0x2c]
+ bl _u32_div_f
+ ldr r1, [r5, #0x48]
+ ldr r2, [r5, #0x38]
+ mov r3, r0
+ mul lr, r3, r2
+ cmp r1, #0x0
+ mov r12, #0x0
+ ble _020C12B8
+ ldr r2, _020C1300 ; =sStrmChannel
+ ldr r0, _020C1304 ; =buffer$7877
+_020C1294:
+ add r1, r5, r12
+ ldrb r1, [r1, #0x4c]
+ ldr r1, [r2, r1, lsl #0x3]
+ add r1, r1, lr
+ str r1, [r0, r12, lsl #0x2]
+ ldr r1, [r5, #0x48]
+ add r12, r12, #0x1
+ cmp r12, r1
+ blt _020C1294
+_020C12B8:
+ ldr r0, [r5, #0x20]
+ ldr r2, _020C1304 ; =buffer$7877
+ str r0, [sp, #0x0]
+ ldr r12, [r5, #0x34]
+ mov r0, r4
+ str r12, [sp, #0x4]
+ ldr r4, [r5, #0x30]
+ blx r4
+ ldr r0, [r5, #0x38]
+ add r0, r0, #0x1
+ str r0, [r5, #0x38]
+ ldr r1, [r5, #0x38]
+ ldr r0, [r5, #0x2c]
+ cmp r1, r0
+ movge r0, #0x0
+ strge r0, [r5, #0x38]
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C1300: .word sStrmChannel
+_020C1304: .word buffer$7877
+
+ local_arm_func_start AlarmCallback
+AlarmCallback: ; 0x020C1308
+ ldr ip, _020C1314 ; =StrmCallback
+ mov r1, #0x1
+ bx r12
+ .balign 4
+_020C1314: .word StrmCallback
+
+ arm_func_start ShutdownStrm
+ShutdownStrm: ; 0x020C1318
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x40]
+ bl NNS_SndFreeAlarm
+ ldr r0, _020C1344 ; =sStrmList
+ mov r1, r4
+ bl NNS_FndRemoveListObject
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x1
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C1344: .word sStrmList
+
+ local_arm_func_start ForceStopStrm
+ForceStopStrm: ; 0x020C1348
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ ldr r0, [r4, #0x24]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ beq _020C13B4
+ ldr r0, [r4, #0x40]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r2, r2, lsl r0
+ ldr r0, [r4, #0x44]
+ mov r3, r1
+ bl SND_StopTimer
+ add r0, r4, #0x8
+ bl PM_DeletePreSleepCallback
+ add r0, r4, #0x14
+ bl PM_DeletePostSleepCallback
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x2
+ str r0, [r4, #0x24]
+ bl SND_GetCurrentCommandTag
+ mov r5, r0
+ mov r0, #0x1
+ bl SND_FlushCommand
+ mov r0, r5
+ bl SND_WaitForCommandProc
+_020C13B4:
+ mov r0, r4
+ bl ShutdownStrm
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+
+ arm_func_start NNS_SndStrmSetVolume
+NNS_SndStrmSetVolume: ; 0x020C13C4
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r0
+ str r1, [r7, #0x3c]
+ ldr r0, [r7, #0x48]
+ mov r5, #0x0
+ cmp r0, #0x0
+ ldmleia sp!, {r4-r8,pc}
+ ldr r4, _020C142C ; =sStrmChannel
+ mov r8, #0x1
+_020C13E8:
+ add r0, r7, r5
+ ldrb r6, [r0, #0x4c]
+ ldr r1, [r7, #0x3c]
+ add r0, r4, r6, lsl #0x3
+ ldr r0, [r0, #0x4]
+ add r0, r1, r0
+ bl SND_CalcChannelVolume
+ mov r2, r0
+ mov r0, r8, lsl r6
+ and r1, r2, #0xff
+ mov r2, r2, asr #0x8
+ bl SND_SetChannelVolume
+ ldr r0, [r7, #0x48]
+ add r5, r5, #0x1
+ cmp r5, r0
+ blt _020C13E8
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020C142C: .word sStrmChannel
+
+ arm_func_start NNS_SndStrmStop
+NNS_SndStrmStop: ; 0x020C1430
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r1, [r0, #0x24]
+ mov r1, r1, lsl #0x1f
+ movs r1, r1, asr #0x1f
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ bl ForceStopStrm
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndStrmStart
+NNS_SndStrmStart: ; 0x020C1458
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x40]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r2, r2, lsl r0
+ ldr r0, [r4, #0x44]
+ mov r3, r1
+ bl SND_StartTimer
+ ldr r0, [r4, #0x24]
+ mov r0, r0, lsl #0x1e
+ movs r0, r0, asr #0x1f
+ ldmneia sp!, {r4,pc}
+ add r0, r4, #0x8
+ bl PM_PrependPreSleepCallback
+ add r0, r4, #0x14
+ bl PM_AppendPostSleepCallback
+ ldr r0, [r4, #0x24]
+ orr r0, r0, #0x2
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndStrmSetup
+NNS_SndStrmSetup: ; 0x020C14AC
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x24
+ mov r10, r0
+ ldr r4, [r10, #0x24]
+ mov r9, r1
+ mov r1, r4, lsl #0x1f
+ movs r1, r1, asr #0x1f
+ ldr r1, [sp, #0x4c]
+ str r2, [sp, #0x18]
+ mov r4, r3
+ str r1, [sp, #0x4c]
+ beq _020C14E0
+ bl NNS_SndStrmStop
+_020C14E0:
+ ldr r0, [sp, #0x4c]
+ ldr r2, [r10, #0x48]
+ mov r0, r0, lsl #0x5
+ mul r1, r2, r0
+ mov r0, r4
+ bl _u32_div_f
+ ldr r1, [sp, #0x4c]
+ ldr r2, [sp, #0x48]
+ mul r1, r0, r1
+ mov r0, r1, lsl #0x5
+ str r0, [r10, #0x28]
+ ldr r0, [r10, #0x28]
+ cmp r9, #0x1
+ moveq r0, r0, lsr #0x1
+ mul r0, r2, r0
+ ldr r1, [sp, #0x4c]
+ bl _u32_div_f
+ str r0, [sp, #0x1c]
+ bl NNS_SndAllocAlarm
+ str r0, [r10, #0x40]
+ ldr r0, [r10, #0x40]
+ cmp r0, #0x0
+ addlt sp, sp, #0x24
+ movlt r0, #0x0
+ ldmltia sp!, {r4-r11,pc}
+ ldr r0, [r10, #0x48]
+ mov r8, #0x0
+ cmp r0, #0x0
+ ble _020C15D4
+ ldr r0, [sp, #0x48]
+ mov r7, r0, lsl #0x5
+ ldr r6, _020C1668 ; =sStrmChannel
+ mov r5, r8
+ mov r4, #0x7f
+ mov r11, #0x40
+ mov r0, #0x1
+ str r0, [sp, #0x20]
+_020C1574:
+ ldr r2, [r10, #0x28]
+ ldr r1, [sp, #0x18]
+ add r0, r10, r8
+ mla r1, r2, r8, r1
+ ldrb r0, [r0, #0x4c]
+ ldr r3, [sp, #0x20]
+ str r1, [r6, r0, lsl #0x3]
+ add r1, r6, r0, lsl #0x3
+ str r5, [r1, #0x4]
+ str r5, [sp, #0x0]
+ ldr r2, [r10, #0x28]
+ mov r1, r9
+ mov r2, r2, lsr #0x2
+ str r2, [sp, #0x4]
+ str r4, [sp, #0x8]
+ str r5, [sp, #0xc]
+ str r7, [sp, #0x10]
+ str r11, [sp, #0x14]
+ ldr r2, [r6, r0, lsl #0x3]
+ bl SND_SetupChannelPcm
+ ldr r0, [r10, #0x48]
+ add r8, r8, #0x1
+ cmp r8, r0
+ blt _020C1574
+_020C15D4:
+ str r10, [sp, #0x0]
+ ldr r1, [sp, #0x1c]
+ ldr r0, [r10, #0x40]
+ ldr r3, _020C166C ; =AlarmCallback
+ mov r2, r1
+ bl SND_SetupAlarm
+ ldr r0, _020C1670 ; =sStrmList
+ mov r1, r10
+ bl NNS_FndAppendListObject
+ ldr r0, [sp, #0x4c]
+ str r9, [r10, #0x20]
+ str r0, [r10, #0x2c]
+ ldr r1, [sp, #0x50]
+ ldr r0, [sp, #0x54]
+ str r1, [r10, #0x30]
+ str r0, [r10, #0x34]
+ mov r0, #0x0
+ str r0, [r10, #0x38]
+ str r0, [r10, #0x3c]
+ ldr r0, [r10, #0x24]
+ bic r0, r0, #0x1
+ orr r0, r0, #0x1
+ str r0, [r10, #0x24]
+ bl OS_DisableInterrupts
+ mov r4, r0
+ mov r2, #0x1
+ mov r0, r10
+ mov r1, #0x0
+ str r2, [r10, #0x2c]
+ bl StrmCallback
+ ldr r1, [sp, #0x4c]
+ mov r0, r4
+ str r1, [r10, #0x2c]
+ bl OS_RestoreInterrupts
+ mov r0, #0x1
+ add sp, sp, #0x24
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020C1668: .word sStrmChannel
+_020C166C: .word AlarmCallback
+_020C1670: .word sStrmList
+
+ arm_func_start NNS_SndStrmFreeChannel
+NNS_SndStrmFreeChannel: ; 0x020C1674
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x44]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ bl NNS_SndUnlockChannel
+ mov r0, #0x0
+ str r0, [r4, #0x44]
+ str r0, [r4, #0x48]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndStrmAllocChannel
+NNS_SndStrmAllocChannel: ; 0x020C169C
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r1
+ mov r4, #0x0
+ mov r6, r0
+ mov r12, r4
+ cmp r5, #0x0
+ ble _020C16DC
+ mov r1, #0x1
+_020C16BC:
+ ldrb r3, [r2, r12]
+ add r0, r6, r12
+ strb r3, [r0, #0x4c]
+ ldrb r0, [r2, r12]
+ add r12, r12, #0x1
+ cmp r12, r5
+ orr r4, r4, r1, lsl r0
+ blt _020C16BC
+_020C16DC:
+ mov r0, r4
+ bl NNS_SndLockChannel
+ cmp r0, #0x0
+ moveq r0, #0x0
+ strne r5, [r6, #0x48]
+ strne r4, [r6, #0x44]
+ movne r0, #0x1
+ ldmia sp!, {r4-r6,pc}
+
+ arm_func_start NNS_SndStrmInit
+NNS_SndStrmInit: ; 0x020C16FC
+ stmdb sp!, {r4,lr}
+ ldr r1, _020C176C ; =bInitialized$7761
+ mov r4, r0
+ ldr r0, [r1, #0x0]
+ cmp r0, #0x0
+ bne _020C172C
+ ldr r0, _020C1770 ; =sStrmList
+ mov r1, #0x0
+ bl NNS_FndInitList
+ ldr r0, _020C176C ; =bInitialized$7761
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020C172C:
+ ldr r1, _020C1774 ; =BeginSleep
+ ldr r0, _020C1778 ; =EndSleep
+ str r1, [r4, #0x8]
+ str r4, [r4, #0xc]
+ str r0, [r4, #0x14]
+ str r4, [r4, #0x18]
+ mov r0, #0x0
+ str r0, [r4, #0x44]
+ str r0, [r4, #0x48]
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x1
+ str r0, [r4, #0x24]
+ ldr r0, [r4, #0x24]
+ bic r0, r0, #0x2
+ str r0, [r4, #0x24]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C176C: .word bInitialized$7761
+_020C1770: .word sStrmList
+_020C1774: .word BeginSleep
+_020C1778: .word EndSleep
diff --git a/arm9/asm/NNS_SND_waveout.s b/arm9/asm/NNS_SND_waveout.s
new file mode 100644
index 00000000..b3c6591f
--- /dev/null
+++ b/arm9/asm/NNS_SND_waveout.s
@@ -0,0 +1,240 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .bss
+
+ .global sWaveOut
+sWaveOut: ; 0x021D1CBC
+ .space 0x140
+
+ .section .text
+
+ arm_func_start NNS_SndWaveOutIsPlaying
+NNS_SndWaveOutIsPlaying: ; 0x020C03B8
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r0, [r4, #0xc]
+ cmp r0, #0x0
+ bne _020C03F8
+ ldr r0, [r4, #0x10]
+ bl SND_IsFinishedCommandTag
+ cmp r0, #0x0
+ moveq r0, #0x1
+ ldmeqia sp!, {r4,pc}
+ mov r0, #0x1
+ str r0, [r4, #0xc]
+_020C03F8:
+ bl SND_GetChannelStatus
+ ldr r1, [r4, #0x0]
+ mov r2, #0x1
+ mov r1, r2, lsl r1
+ ands r0, r1, r0
+ movne r0, r2
+ moveq r0, #0x0
+ streq r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndWaveOutSetPan
+NNS_SndWaveOutSetPan: ; 0x020C041C
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r2, lsl r0
+ bl SND_SetChannelPan
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndWaveOutSetSpeed
+NNS_SndWaveOutSetSpeed: ; 0x020C044C
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0x4
+ mov r5, r0
+ ldr r0, [r5, #0x8]
+ mov r4, r1
+ cmp r0, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {r4-r5,pc}
+ ldr r2, [r5, #0x4]
+ ldr r0, _020C04D4 ; =0xD87F8000
+ mov r3, r2, asr #0x1f
+ mov r1, #0x7f
+ bl _ll_udiv
+ mov r2, r4
+ mov r3, r4, asr #0x1f
+ bl _ll_udiv
+ mov r2, #0x0
+ mov r3, r0
+ mov r0, #0x10
+ cmp r1, r2
+ cmpeq r3, r0
+ movcc r3, r0
+ blo _020C04B8
+ ldr r0, _020C04D8 ; =0x0000FFFF
+ cmp r1, r2
+ cmpeq r3, r0
+ movhi r3, r0
+_020C04B8:
+ ldr r0, [r5, #0x0]
+ mov r1, #0x1
+ mov r0, r1, lsl r0
+ mov r1, r3
+ bl SND_SetChannelTimer
+ add sp, sp, #0x4
+ ldmia sp!, {r4-r5,pc}
+ .balign 4
+_020C04D4: .word 0xD87F8000
+_020C04D8: .word 0x0000FFFF
+
+ arm_func_start NNS_SndWaveOutSetVolume
+NNS_SndWaveOutSetVolume: ; 0x020C04DC
+ stmdb sp!, {lr}
+ sub sp, sp, #0x4
+ ldr r2, [r0, #0x8]
+ cmp r2, #0x0
+ addeq sp, sp, #0x4
+ ldmeqia sp!, {pc}
+ ldr r0, [r0, #0x0]
+ mov r2, #0x1
+ mov r0, r2, lsl r0
+ mov r2, #0x0
+ bl SND_SetChannelVolume
+ add sp, sp, #0x4
+ ldmia sp!, {pc}
+
+ arm_func_start NNS_SndWaveOutStop
+NNS_SndWaveOutStop: ; 0x020C0510
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ ldr r0, [r4, #0x0]
+ mov r2, #0x1
+ mov r1, #0x0
+ mov r0, r2, lsl r0
+ mov r2, r1
+ mov r3, r1
+ bl SND_StopTimer
+ mov r0, #0x0
+ str r0, [r4, #0x8]
+ ldmia sp!, {r4,pc}
+
+ arm_func_start NNS_SndWaveOutStart
+NNS_SndWaveOutStart: ; 0x020C054C
+ stmdb sp!, {r4-r9,lr}
+ sub sp, sp, #0x1c
+ movs r8, r1
+ mov r9, r0
+ mov r7, r2
+ mov r6, r3
+ beq _020C0584
+ cmp r8, #0x1
+ ldreq r0, [sp, #0x3c]
+ ldreq r1, [sp, #0x38]
+ moveq r0, r0, asr #0x1
+ moveq r5, r1, asr #0x1
+ subeq r4, r0, r1, asr #0x1
+ b _020C0598
+_020C0584:
+ ldr r0, [sp, #0x3c]
+ ldr r1, [sp, #0x38]
+ mov r0, r0, asr #0x2
+ mov r5, r1, asr #0x2
+ sub r4, r0, r1, asr #0x2
+_020C0598:
+ ldr r2, [sp, #0x40]
+ ldr r0, _020C0668 ; =0xD87F8000
+ mov r3, r2, asr #0x1f
+ mov r1, #0x7f
+ bl _ll_udiv
+ ldr r2, [sp, #0x48]
+ mov r3, r2, asr #0x1f
+ bl _ll_udiv
+ mov r3, #0x0
+ mov r2, #0x10
+ cmp r1, r3
+ cmpeq r0, r2
+ movcc r0, r2
+ blo _020C05E0
+ ldr r2, _020C066C ; =0x0000FFFF
+ cmp r1, r3
+ cmpeq r0, r2
+ movhi r0, r2
+_020C05E0:
+ str r5, [sp, #0x0]
+ ldr r1, [sp, #0x44]
+ str r4, [sp, #0x4]
+ str r1, [sp, #0x8]
+ mov r1, #0x0
+ str r1, [sp, #0xc]
+ cmp r6, #0x0
+ movne r3, #0x1
+ ldr r1, [sp, #0x4c]
+ str r0, [sp, #0x10]
+ str r1, [sp, #0x14]
+ ldr r0, [r9, #0x0]
+ moveq r3, #0x2
+ mov r1, r8
+ mov r2, r7
+ bl SND_SetupChannelPcm
+ mov r1, #0x0
+ ldr r0, [r9, #0x0]
+ mov r2, #0x1
+ mov r0, r2, lsl r0
+ mov r2, r1
+ mov r3, r1
+ bl SND_StartTimer
+ mov r0, #0x1
+ str r0, [r9, #0x8]
+ mov r0, #0x0
+ str r0, [r9, #0xc]
+ bl SND_GetCurrentCommandTag
+ str r0, [r9, #0x10]
+ ldr r1, [sp, #0x40]
+ mov r0, #0x1
+ str r1, [r9, #0x4]
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r9,pc}
+ .balign 4
+_020C0668: .word 0xD87F8000
+_020C066C: .word 0x0000FFFF
+
+ arm_func_start NNS_SndWaveOutFreeChannel
+NNS_SndWaveOutFreeChannel: ; 0x020C0670
+ ldr r0, [r0, #0x0]
+ mov r1, #0x1
+ ldr ip, _020C0684 ; =NNS_SndUnlockChannel
+ mov r0, r1, lsl r0
+ bx r12
+ .balign 4
+_020C0684: .word NNS_SndUnlockChannel
+
+ arm_func_start NNS_SndWaveOutAllocChannel
+NNS_SndWaveOutAllocChannel: ; 0x020C0688
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ mov r0, #0x1
+ mov r0, r0, lsl r4
+ bl NNS_SndLockChannel
+ cmp r0, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ mov r0, #0x14
+ mul r0, r4, r0
+ ldr r2, _020C06C8 ; =sWaveOut
+ mov r1, #0x0
+ str r4, [r2, r0]
+ add r0, r2, r0
+ str r1, [r0, #0x8]
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020C06C8: .word sWaveOut
diff --git a/arm9/asm/macros/function.inc b/arm9/asm/macros/function.inc
index 6b9e5f40..3323f53e 100644
--- a/arm9/asm/macros/function.inc
+++ b/arm9/asm/macros/function.inc
@@ -4,6 +4,11 @@
.arm
.endm
+ .macro local_arm_func_start name
+ .balign 4, 0
+ .arm
+ .endm
+
.macro arm_func_end name
.size \name, .-\name
.endm
diff --git a/arm9/asm/sndlib.s b/arm9/asm/sndlib.s
deleted file mode 100644
index 840e72d3..00000000
--- a/arm9/asm/sndlib.s
+++ /dev/null
@@ -1,4758 +0,0 @@
- ; Compiled with MWCCARM 1.2 sp3
-
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern SNDi_DecibelTable
-
- .bss
-
- .global UNK_021D1C8C
-UNK_021D1C8C: ; 0x021D1C8C
- .space 0x4
-
- .global UNK_021D1C90
-UNK_021D1C90: ; 0x021D1C90
- .space 0x4
-
- .global UNK_021D1C94
-UNK_021D1C94: ; 0x021D1C94
- .space 0x4
-
- .global UNK_021D1C98
-UNK_021D1C98: ; 0x021D1C98
- .space 0xc
-
- .global UNK_021D1CA4
-UNK_021D1CA4: ; 0x021D1CA4
- .space 0xc
-
- .global UNK_021D1CB0
-UNK_021D1CB0: ; 0x021D1CB0
- .space 0x4
-
- .global UNK_021D1CB4
-UNK_021D1CB4: ; 0x021D1CB4
- .space 0x4
-
- .global UNK_021D1CB8
-UNK_021D1CB8: ; 0x021D1CB8
- .space 0x4
-
- .global UNK_021D1CBC
-UNK_021D1CBC: ; 0x021D1CBC
- .space 0x140
-
- .global UNK_021D1DFC
-UNK_021D1DFC: ; 0x021D1DFC
- .space 0xc
-
- .global UNK_021D1E08
-UNK_021D1E08: ; 0x021D1E08
- .space 0xc
-
- .global UNK_021D1E14
-UNK_021D1E14: ; 0x021D1E14
- .space 0x440
-
- .global UNK_021D2254
-UNK_021D2254: ; 0x021D2254
- .space 0x8
-
- .global UNK_021D225C
-UNK_021D225C: ; 0x021D225C
- .space 0x10
-
- .global UNK_021D226C
-UNK_021D226C: ; 0x021D226C
- .space 0x4
-
- .global UNK_021D2270
-UNK_021D2270: ; 0x021D2270
- .space 0x4
-
- .global UNK_021D2274
-UNK_021D2274: ; 0x021D2274
- .space 0x460
-
- .global UNK_021D26D4
-UNK_021D26D4: ; 0x021D26D4
- .space 0x4
-
- .global UNK_021D26D8
-UNK_021D26D8: ; 0x021D26D8
- .space 0xc
-
- .global UNK_021D26E4
-UNK_021D26E4: ; 0x021D26E4
- .space 0x40
-
- .global UNK_021D2724
-UNK_021D2724: ; 0x021D2724
- .space 0x80
-
- .global UNK_021D27A4
-UNK_021D27A4: ; 0x021D27A4
- .space 0x4
-
- .global UNK_021D27A8
-UNK_021D27A8: ; 0x021D27A8
- .space 0x4
-
- .global UNK_021D27AC
-UNK_021D27AC: ; 0x021D27AC
- .space 0x20
-
- .global UNK_021D27CC
-UNK_021D27CC: ; 0x021D27CC
- .space 0x54
-
- .global UNK_021D2820
-UNK_021D2820: ; 0x021D2820
- .space 0xa0
-
- .global UNK_021D28C0
-UNK_021D28C0: ; 0x021D28C0
- .space 0x4
-
- .global UNK_021D28C4
-UNK_021D28C4: ; 0x021D28C4
- .space 0x3c
-
- .global UNK_021D2900
-UNK_021D2900: ; 0x021D2900
- .space 0x4
-
- .global UNK_021D2904
-UNK_021D2904: ; 0x021D2904
- .space 0x4d4
-
- .global UNK_021D2DD8
-UNK_021D2DD8: ; 0x021D2DD8
- .space 0x18
-
- .global UNK_021D2DF0
-UNK_021D2DF0: ; 0x021D2DF0
- .space 0xc
-
- .global UNK_021D2DFC
-UNK_021D2DFC: ; 0x021D2DFC
- .space 0x5c0
-
- .text
-
- arm_func_start FUN_020C0130
-FUN_020C0130: ; 0x020C0130
- ldr ip, _020C0138 ; =FUN_020C187C
- bx r12
- .balign 4
-_020C0138: .word FUN_020C187C
-
- arm_func_start FUN_020C013C
-FUN_020C013C: ; 0x020C013C
- stmdb sp!, {r4,lr}
- bl FUN_020C18F8
- mov r0, #0x0
- mov r1, r0
- mov r2, r0
- mov r3, r0
- bl SND_StopTimer
- bl SND_GetCurrentCommandTag
- mov r4, r0
- mov r0, #0x1
- bl SND_FlushCommand
- mov r0, r4
- bl SND_WaitForCommandProc
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C0174
-FUN_020C0174: ; 0x020C0174
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r0, #0x0
- beq _020C0194
- mov r0, #0x40
- bl SND_SetMasterPan
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020C0194:
- bl SND_ResetMasterPan
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C01A0
-FUN_020C01A0: ; 0x020C01A0
- stmdb sp!, {r4,lr}
- mov r4, #0x0
-_020C01A8:
- mov r0, r4
- bl SND_RecvCommandReply
- cmp r0, #0x0
- bne _020C01A8
- bl FUN_020C0BA0
- bl FUN_020C1D9C
- bl FUN_020C3C88
- mov r0, #0x0
- bl SND_FlushCommand
- ldmia sp!, {r4,pc}
-
- arm_func_start SDAT_Init
-SDAT_Init: ; 0x020C01D0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020C0254 ; =UNK_021D1C94
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {pc}
- mov r1, #0x1
- str r1, [r0, #0x0]
- bl SND_Init
- ldr ip, _020C0258 ; =FUN_020C013C
- ldr r0, _020C025C ; =UNK_021D1C98
- mov r3, #0x0
- ldr r1, _020C0260 ; =UNK_021D1CA4
- ldr r2, _020C0264 ; =FUN_020C0130
- str r12, [r0, #0x0]
- str r3, [r0, #0x4]
- str r2, [r1, #0x0]
- str r3, [r1, #0x4]
- bl PM_PrependPreSleepCallback
- ldr r0, _020C0260 ; =UNK_021D1CA4
- bl PM_AppendPostSleepCallback
- bl FUN_020C0270
- bl FUN_020C1E38
- bl FUN_020C0D20
- ldr r1, _020C0268 ; =UNK_021D1C8C
- mvn r3, #0x0
- ldr r0, _020C026C ; =UNK_021D1C90
- mov r2, #0x1
- strb r3, [r1, #0x0]
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020C0254: .word UNK_021D1C94
-_020C0258: .word FUN_020C013C
-_020C025C: .word UNK_021D1C98
-_020C0260: .word UNK_021D1CA4
-_020C0264: .word FUN_020C0130
-_020C0268: .word UNK_021D1C8C
-_020C026C: .word UNK_021D1C90
-
- arm_func_start FUN_020C0270
-FUN_020C0270: ; 0x020C0270
- ldr r2, _020C0290 ; =UNK_021D1CB8
- mov r3, #0x0
- ldr r1, _020C0294 ; =UNK_021D1CB0
- ldr r0, _020C0298 ; =UNK_021D1CB4
- str r3, [r2, #0x0]
- str r3, [r1, #0x0]
- str r3, [r0, #0x0]
- bx lr
- .balign 4
-_020C0290: .word UNK_021D1CB8
-_020C0294: .word UNK_021D1CB0
-_020C0298: .word UNK_021D1CB4
-
- arm_func_start FUN_020C029C
-FUN_020C029C: ; 0x020C029C
- ldr r1, _020C02B8 ; =UNK_021D1CB4
- mov r2, #0x1
- mvn r0, r2, lsl r0
- ldr r2, [r1, #0x0]
- and r0, r2, r0
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_020C02B8: .word UNK_021D1CB4
-
- arm_func_start FUN_020C02BC
-FUN_020C02BC: ; 0x020C02BC
- ldr r0, _020C02FC ; =UNK_021D1CB4
- mov r3, #0x1
- ldr r2, [r0, #0x0]
- mov r0, #0x0
-_020C02CC:
- ands r1, r2, r3
- ldreq r1, _020C02FC ; =UNK_021D1CB4
- ldreq r2, [r1, #0x0]
- orreq r2, r2, r3
- streq r2, [r1, #0x0]
- bxeq lr
- add r0, r0, #0x1
- cmp r0, #0x8
- mov r3, r3, lsl #0x1
- blt _020C02CC
- mvn r0, #0x0
- bx lr
- .balign 4
-_020C02FC: .word UNK_021D1CB4
-
- arm_func_start FUN_020C0300
-FUN_020C0300: ; 0x020C0300
- ldr r1, _020C0318 ; =UNK_021D1CB0
- mvn r0, r0
- ldr r2, [r1, #0x0]
- and r0, r2, r0
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_020C0318: .word UNK_021D1CB0
-
- arm_func_start FUN_020C031C
-FUN_020C031C:
- ldr r1, _020C033C ; =UNK_021D1CB0
- ldr r2, [r1, #0x0]
- ands r3, r0, r2
- movne r0, #0x0
- orreq r0, r2, r0
- streq r0, [r1, #0x0]
- moveq r0, #0x1
- bx lr
- .balign 4
-_020C033C: .word UNK_021D1CB0
-
- arm_func_start FUN_020C0340
-FUN_020C0340:
- stmdb sp!, {r4,lr}
- movs r4, r0
- ldmeqia sp!, {r4,pc}
- mov r1, #0x0
- bl SND_UnlockChannel
- ldr r0, _020C036C ; =UNK_021D1CB8
- mvn r1, r4
- ldr r2, [r0, #0x0]
- and r1, r2, r1
- str r1, [r0, #0x0]
- ldmia sp!, {r4,pc}
- .balign 4
-_020C036C: .word UNK_021D1CB8
-
- arm_func_start FUN_020C0370
-FUN_020C0370:
- stmdb sp!, {r4,lr}
- movs r4, r0
- moveq r0, #0x1
- ldmeqia sp!, {r4,pc}
- ldr r1, _020C03B4 ; =UNK_021D1CB8
- ldr r1, [r1, #0x0]
- ands r1, r4, r1
- movne r0, #0x0
- ldmneia sp!, {r4,pc}
- mov r1, #0x0
- bl SND_LockChannel
- ldr r1, _020C03B4 ; =UNK_021D1CB8
- mov r0, #0x1
- ldr r2, [r1, #0x0]
- orr r2, r2, r4
- str r2, [r1, #0x0]
- ldmia sp!, {r4,pc}
- .balign 4
-_020C03B4: .word UNK_021D1CB8
-
- arm_func_start FUN_020C03B8
-FUN_020C03B8: ; 0x020C03B8
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x8]
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r0, [r4, #0xc]
- cmp r0, #0x0
- bne _020C03F8
- ldr r0, [r4, #0x10]
- bl SND_IsFinishedCommandTag
- cmp r0, #0x0
- moveq r0, #0x1
- ldmeqia sp!, {r4,pc}
- mov r0, #0x1
- str r0, [r4, #0xc]
-_020C03F8:
- bl SND_GetChannelStatus
- ldr r1, [r4, #0x0]
- mov r2, #0x1
- mov r1, r2, lsl r1
- ands r0, r1, r0
- movne r0, r2
- moveq r0, #0x0
- streq r0, [r4, #0x8]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C041C
-FUN_020C041C: ; 0x020C041C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x8]
- cmp r2, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r0, [r0, #0x0]
- mov r2, #0x1
- mov r0, r2, lsl r0
- bl SND_SetChannelPan
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C044C
-FUN_020C044C: ; 0x020C044C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r0, [r5, #0x8]
- mov r4, r1
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldr r2, [r5, #0x4]
- ldr r0, _020C04D4 ; =0xD87F8000
- mov r3, r2, asr #0x1f
- mov r1, #0x7f
- bl _ll_udiv
- mov r2, r4
- mov r3, r4, asr #0x1f
- bl _ll_udiv
- mov r2, #0x0
- mov r3, r0
- mov r0, #0x10
- cmp r1, r2
- cmpeq r3, r0
- movcc r3, r0
- blo _020C04B8
- ldr r0, _020C04D8 ; =0x0000FFFF
- cmp r1, r2
- cmpeq r3, r0
- movhi r3, r0
-_020C04B8:
- ldr r0, [r5, #0x0]
- mov r1, #0x1
- mov r0, r1, lsl r0
- mov r1, r3
- bl SND_SetChannelTimer
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C04D4: .word 0xD87F8000
-_020C04D8: .word 0x0000FFFF
-
- arm_func_start FUN_020C04DC
-FUN_020C04DC: ; 0x020C04DC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x8]
- cmp r2, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r0, [r0, #0x0]
- mov r2, #0x1
- mov r0, r2, lsl r0
- mov r2, #0x0
- bl SND_SetChannelVolume
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C0510
-FUN_020C0510: ; 0x020C0510
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x8]
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r0, [r4, #0x0]
- mov r2, #0x1
- mov r1, #0x0
- mov r0, r2, lsl r0
- mov r2, r1
- mov r3, r1
- bl SND_StopTimer
- mov r0, #0x0
- str r0, [r4, #0x8]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C054C
-FUN_020C054C: ; 0x020C054C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x1c
- movs r8, r1
- mov r9, r0
- mov r7, r2
- mov r6, r3
- beq _020C0584
- cmp r8, #0x1
- ldreq r0, [sp, #0x3c]
- ldreq r1, [sp, #0x38]
- moveq r0, r0, asr #0x1
- moveq r5, r1, asr #0x1
- subeq r4, r0, r1, asr #0x1
- b _020C0598
-_020C0584:
- ldr r0, [sp, #0x3c]
- ldr r1, [sp, #0x38]
- mov r0, r0, asr #0x2
- mov r5, r1, asr #0x2
- sub r4, r0, r1, asr #0x2
-_020C0598:
- ldr r2, [sp, #0x40]
- ldr r0, _020C0668 ; =0xD87F8000
- mov r3, r2, asr #0x1f
- mov r1, #0x7f
- bl _ll_udiv
- ldr r2, [sp, #0x48]
- mov r3, r2, asr #0x1f
- bl _ll_udiv
- mov r3, #0x0
- mov r2, #0x10
- cmp r1, r3
- cmpeq r0, r2
- movcc r0, r2
- blo _020C05E0
- ldr r2, _020C066C ; =0x0000FFFF
- cmp r1, r3
- cmpeq r0, r2
- movhi r0, r2
-_020C05E0:
- str r5, [sp, #0x0]
- ldr r1, [sp, #0x44]
- str r4, [sp, #0x4]
- str r1, [sp, #0x8]
- mov r1, #0x0
- str r1, [sp, #0xc]
- cmp r6, #0x0
- movne r3, #0x1
- ldr r1, [sp, #0x4c]
- str r0, [sp, #0x10]
- str r1, [sp, #0x14]
- ldr r0, [r9, #0x0]
- moveq r3, #0x2
- mov r1, r8
- mov r2, r7
- bl SND_SetupChannelPcm
- mov r1, #0x0
- ldr r0, [r9, #0x0]
- mov r2, #0x1
- mov r0, r2, lsl r0
- mov r2, r1
- mov r3, r1
- bl SND_StartTimer
- mov r0, #0x1
- str r0, [r9, #0x8]
- mov r0, #0x0
- str r0, [r9, #0xc]
- bl SND_GetCurrentCommandTag
- str r0, [r9, #0x10]
- ldr r1, [sp, #0x40]
- mov r0, #0x1
- str r1, [r9, #0x4]
- add sp, sp, #0x1c
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020C0668: .word 0xD87F8000
-_020C066C: .word 0x0000FFFF
-
- arm_func_start FUN_020C0670
-FUN_020C0670: ; 0x020C0670
- ldr r0, [r0, #0x0]
- mov r1, #0x1
- ldr ip, _020C0684 ; =FUN_020C0340
- mov r0, r1, lsl r0
- bx r12
- .balign 4
-_020C0684: .word FUN_020C0340
-
- arm_func_start FUN_020C0688
-FUN_020C0688: ; 0x020C0688
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r0, #0x1
- mov r0, r0, lsl r4
- bl FUN_020C0370
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- mov r0, #0x14
- mul r0, r4, r0
- ldr r2, _020C06C8 ; =UNK_021D1CBC
- mov r1, #0x0
- str r4, [r2, r0]
- add r0, r2, r0
- str r1, [r0, #0x8]
- ldmia sp!, {r4,pc}
- .balign 4
-_020C06C8: .word UNK_021D1CBC
-
- arm_func_start FUN_020C06CC
-FUN_020C06CC: ; 0x020C06CC
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldr r4, [r6, #0x4]
- mov r5, r1
- cmp r4, #0x0
- beq _020C06F8
- mov r0, r4
- mov r1, r6
- bl FUN_020ADAB0
- mov r0, #0x0
- str r0, [r6, #0x4]
-_020C06F8:
- ldr r0, _020C0728 ; =UNK_021D1E08
- mov r1, r6
- bl FUN_020ADAB0
- strb r5, [r6, #0x3d]
- cmp r4, #0x0
- beq _020C071C
- mov r0, r4
- mov r1, r6
- bl FUN_020C0910
-_020C071C:
- mov r0, r6
- bl FUN_020C08B4
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C0728: .word UNK_021D1E08
-
- arm_func_start FUN_020C072C
-FUN_020C072C: ; 0x020C072C
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x8]
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- bl FUN_020C2A7C
- ldr r1, [r4, #0xc]
- cmp r1, #0x0
- movne r0, #0x0
- strne r0, [r1, #0x8]
- ldmneia sp!, {r4,pc}
- ldr r1, [r4, #0x10]
- ldr r2, _020C0778 ; =UNK_021D2254
- mov r0, #0x24
- mla r0, r1, r0, r2
- mov r1, r4
- add r0, r0, #0xc
- bl FUN_020ADAB0
- ldmia sp!, {r4,pc}
- .balign 4
-_020C0778: .word UNK_021D2254
-
- arm_func_start FUN_020C077C
-FUN_020C077C: ; 0x020C077C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- ldr r1, [r4, #0x0]
- cmp r1, #0x0
- movne r0, #0x0
- strne r0, [r1, #0x0]
- strne r0, [r4, #0x0]
- ldr r5, [r4, #0x4]
- mov r1, r4
- mov r0, r5
- bl FUN_020ADAB0
- mov r0, #0x0
- str r0, [r4, #0x4]
- ldr r1, [r4, #0x8]
- cmp r1, #0x0
- beq _020C07D8
- add r0, r5, #0xc
- bl FUN_020ADBE8
- ldr r0, [r4, #0x8]
- mov r1, #0x0
- str r1, [r0, #0xc]
- str r1, [r4, #0x8]
-_020C07D8:
- ldr r0, _020C0800 ; =UNK_021D1E08
- mov r1, r4
- bl FUN_020ADAB0
- ldr r0, _020C0804 ; =UNK_021D1DFC
- mov r1, r4
- bl FUN_020ADBE8
- mov r0, #0x0
- strb r0, [r4, #0x2c]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C0800: .word UNK_021D1E08
-_020C0804: .word UNK_021D1DFC
-
- arm_func_start FUN_020C0808
-FUN_020C0808: ; 0x020C0808
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r0, _020C0874 ; =UNK_021D1DFC
- mov r1, #0x0
- bl FUN_020ADA98
- movs r4, r0
- bne _020C0850
- ldr r0, _020C0878 ; =UNK_021D1E08
- mov r1, #0x0
- bl FUN_020ADA98
- mov r4, r0
- ldrb r1, [r4, #0x3d]
- cmp r5, r1
- addlt sp, sp, #0x4
- movlt r0, #0x0
- ldmltia sp!, {r4-r5,pc}
- bl FUN_020C087C
-_020C0850:
- ldr r0, _020C0874 ; =UNK_021D1DFC
- mov r1, r4
- bl FUN_020ADAB0
- mov r0, r4
- strb r5, [r4, #0x3d]
- bl FUN_020C08B4
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C0874: .word UNK_021D1DFC
-_020C0878: .word UNK_021D1E08
-
- arm_func_start FUN_020C087C
-FUN_020C087C: ; 0x020C087C
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldrb r0, [r4, #0x2c]
- cmp r0, #0x2
- bne _020C089C
- ldrb r0, [r4, #0x3c]
- ldr r1, _020C08B0 ; =0xFFFFFD2D
- bl SND_SetPlayerVolume
-_020C089C:
- ldrb r0, [r4, #0x3c]
- bl SND_StopSeq
- mov r0, r4
- bl FUN_020C077C
- ldmia sp!, {r4,pc}
- .balign 4
-_020C08B0: .word 0xFFFFFD2D
-
- arm_func_start FUN_020C08B4
-FUN_020C08B4: ; 0x020C08B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r0, _020C090C ; =UNK_021D1E08
- mov r1, #0x0
- bl FUN_020ADA98
- movs r1, r0
- beq _020C08F8
- ldr r4, _020C090C ; =UNK_021D1E08
-_020C08D8:
- ldrb r2, [r5, #0x3d]
- ldrb r0, [r1, #0x3d]
- cmp r2, r0
- blo _020C08F8
- mov r0, r4
- bl FUN_020ADA98
- movs r1, r0
- bne _020C08D8
-_020C08F8:
- ldr r0, _020C090C ; =UNK_021D1E08
- mov r2, r5
- bl FUN_020ADB18
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C090C: .word UNK_021D1E08
-
- arm_func_start FUN_020C0910
-FUN_020C0910: ; 0x020C0910
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r1, #0x0
- mov r5, r0
- bl FUN_020ADA98
- movs r1, r0
- beq _020C0950
-_020C0930:
- ldrb r2, [r4, #0x3d]
- ldrb r0, [r1, #0x3d]
- cmp r2, r0
- blo _020C0950
- mov r0, r5
- bl FUN_020ADA98
- movs r1, r0
- bne _020C0930
-_020C0950:
- mov r0, r5
- mov r2, r4
- bl FUN_020ADB18
- str r5, [r4, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C0968
-FUN_020C0968: ; 0x020C0968
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r0, #0x0
- strb r0, [r4, #0x2e]
- strb r0, [r4, #0x2d]
- strb r0, [r4, #0x2f]
- strh r0, [r4, #0x34]
- strh r0, [r4, #0x3e]
- mov r1, #0x7f
- strb r1, [r4, #0x40]
- add r0, r4, #0x1c
- strb r1, [r4, #0x41]
- bl FUN_020C3E6C
- add r0, r4, #0x1c
- mov r1, #0x7f00
- mov r2, #0x1
- bl FUN_020C3E40
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C09B0
-FUN_020C09B0: ; 0x020C09B0
- stmdb sp!, {r4-r6,lr}
- ldr r3, _020C0A00 ; =UNK_021D2254
- mov r2, #0x24
- mla r5, r0, r2, r3
- mov r6, r1
- add r0, r5, #0xc
- mov r1, #0x0
- bl FUN_020ADA98
- movs r4, r0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r1, r4
- add r0, r5, #0xc
- bl FUN_020ADAB0
- str r6, [r4, #0xc]
- str r4, [r6, #0x8]
- ldr r0, [r4, #0x8]
- bl FUN_020C29C0
- ldr r0, [r4, #0x8]
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C0A00: .word UNK_021D2254
-
- arm_func_start FUN_020C0A04
-FUN_020C0A04: ; 0x020C0A04
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- movs r5, r0
- mov r4, r1
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldrb r0, [r5, #0x2e]
- cmp r4, r0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldrb r0, [r5, #0x3c]
- bl SND_PauseSeq
- strb r4, [r5, #0x2e]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C0A40
-FUN_020C0A40: ; 0x020C0A40
- stmdb sp!, {r4,lr}
- movs r4, r0
- mov r2, r1
- ldmeqia sp!, {r4,pc}
- ldrb r1, [r4, #0x2c]
- cmp r1, #0x0
- ldmeqia sp!, {r4,pc}
- cmp r2, #0x0
- bne _020C0A6C
- bl FUN_020C087C
- ldmia sp!, {r4,pc}
-_020C0A6C:
- add r0, r4, #0x1c
- mov r1, #0x0
- bl FUN_020C3E40
- mov r0, r4
- mov r1, #0x0
- bl FUN_020C06CC
- mov r0, #0x2
- strb r0, [r4, #0x2c]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C0A90
-FUN_020C0A90: ; 0x020C0A90
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldrb r0, [r5, #0x3c]
- ldr r4, [r5, #0x4]
- bl SND_PrepareSeq
- ldr r2, [r4, #0x1c]
- cmp r2, #0x0
- beq _020C0AC0
- ldrb r0, [r5, #0x3c]
- ldr r1, _020C0AE4 ; =0x0000FFFF
- bl SND_SetTrackAllocatableChannel
-_020C0AC0:
- mov r0, r5
- bl FUN_020C0968
- bl SND_GetCurrentCommandTag
- str r0, [r5, #0x30]
- mov r0, #0x1
- strb r0, [r5, #0x2f]
- strb r0, [r5, #0x2c]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C0AE4: .word 0x0000FFFF
-
- arm_func_start thunk_FUN_020c077c
-thunk_FUN_020c077c: ; 0x020C0AE8
- ldr ip, _020C0AF0 ; =FUN_020C077C
- bx r12
- .balign 4
-_020C0AF0: .word FUN_020C077C
-
- arm_func_start FUN_020C0AF4
-FUN_020C0AF4: ; 0x020C0AF4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr ip, _020C0B9C ; =UNK_021D2254
- mov r3, #0x24
- mov r4, r0
- ldr r5, [r4, #0x0]
- mla r6, r1, r3, r12
- mov r7, r2
- cmp r5, #0x0
- beq _020C0B20
- bl FUN_020C0F68
-_020C0B20:
- ldrh r1, [r6, #0x8]
- ldr r0, [r6, #0x18]
- cmp r1, r0
- blo _020C0B64
- mov r0, r6
- mov r1, #0x0
- bl FUN_020ADA98
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,pc}
- ldrb r1, [r0, #0x3d]
- cmp r7, r1
- addlt sp, sp, #0x4
- movlt r0, #0x0
- ldmltia sp!, {r4-r7,pc}
- bl FUN_020C087C
-_020C0B64:
- mov r0, r7
- bl FUN_020C0808
- movs r5, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,pc}
- mov r0, r6
- mov r1, r5
- bl FUN_020C0910
- str r4, [r5, #0x0]
- mov r0, r5
- str r5, [r4, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C0B9C: .word UNK_021D2254
-
- arm_func_start FUN_020C0BA0
-FUN_020C0BA0: ; 0x020C0BA0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- bl SND_GetPlayerStatus
- str r0, [sp, #0x0]
- ldr r0, _020C0D14 ; =UNK_021D1E08
- mov r1, #0x0
- bl FUN_020ADA98
- movs r10, r0
- addeq sp, sp, #0xc
- ldmeqia sp!, {r4-r11,pc}
- mov r0, #0x8000
- rsb r0, r0, #0x0
- ldr r4, _020C0D18 ; =SNDi_DecibelTable
- str r0, [sp, #0x4]
- mov r5, #0x1
- mov r11, #0x0
-_020C0BE0:
- ldr r0, _020C0D14 ; =UNK_021D1E08
- mov r1, r10
- bl FUN_020ADA98
- ldrb r1, [r10, #0x2d]
- mov r9, r0
- cmp r1, #0x0
- bne _020C0C0C
- ldr r0, [r10, #0x30]
- bl SND_IsFinishedCommandTag
- cmp r0, #0x0
- strneb r5, [r10, #0x2d]
-_020C0C0C:
- ldrb r0, [r10, #0x2d]
- cmp r0, #0x0
- beq _020C0C38
- ldrb r0, [r10, #0x3c]
- mov r1, r5, lsl r0
- ldr r0, [sp, #0x0]
- ands r0, r0, r1
- bne _020C0C38
- mov r0, r10
- bl FUN_020C077C
- b _020C0D00
-_020C0C38:
- add r0, r10, #0x1c
- bl FUN_020C3DF4
- ldr r0, [r10, #0x4]
- ldrb r2, [r10, #0x41]
- ldrb r1, [r10, #0x40]
- ldrb r0, [r0, #0x20]
- mov r3, r2, lsl #0x1
- mov r2, r1, lsl #0x1
- mov r1, r0, lsl #0x1
- add r0, r10, #0x1c
- ldrsh r8, [r4, r3]
- ldrsh r7, [r4, r2]
- ldrsh r6, [r4, r1]
- bl FUN_020C3E0C
- mov r0, r0, asr #0x8
- mov r2, r0, lsl #0x1
- add r1, r7, r8
- mov r0, #0x8000
- ldrsh r2, [r4, r2]
- add r1, r6, r1
- rsb r0, r0, #0x0
- add r6, r2, r1
- cmp r6, r0
- ldrlt r6, [sp, #0x4]
- blt _020C0CA8
- ldr r0, _020C0D1C ; =0x00007FFF
- cmp r6, r0
- movgt r6, r0
-_020C0CA8:
- ldrsh r0, [r10, #0x3e]
- cmp r6, r0
- beq _020C0CC4
- ldrb r0, [r10, #0x3c]
- mov r1, r6
- bl SND_SetPlayerVolume
- strh r6, [r10, #0x3e]
-_020C0CC4:
- ldrb r0, [r10, #0x2c]
- cmp r0, #0x2
- bne _020C0CE8
- add r0, r10, #0x1c
- bl FUN_020C3DDC
- cmp r0, #0x0
- beq _020C0CE8
- mov r0, r10
- bl FUN_020C087C
-_020C0CE8:
- ldrb r0, [r10, #0x2f]
- cmp r0, #0x0
- beq _020C0D00
- ldrb r0, [r10, #0x3c]
- bl SND_StartPreparedSeq
- strb r11, [r10, #0x2f]
-_020C0D00:
- mov r10, r9
- cmp r9, #0x0
- bne _020C0BE0
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020C0D14: .word UNK_021D1E08
-_020C0D18: .word SNDi_DecibelTable
-_020C0D1C: .word 0x00007FFF
-
- arm_func_start FUN_020C0D20
-FUN_020C0D20: ; 0x020C0D20
- stmdb sp!, {r4-r10,lr}
- ldr r0, _020C0DC4 ; =UNK_021D1E08
- mov r1, #0x14
- bl FUN_020ADC74
- ldr r0, _020C0DC8 ; =UNK_021D1DFC
- mov r1, #0x14
- bl FUN_020ADC74
- ldr r6, _020C0DCC ; =UNK_021D1E14
- mov r7, #0x0
- ldr r4, _020C0DC8 ; =UNK_021D1DFC
- mov r5, r7
-_020C0D4C:
- strb r5, [r6, #0x2c]
- mov r0, r4
- mov r1, r6
- strb r7, [r6, #0x3c]
- bl FUN_020ADBE8
- add r7, r7, #0x1
- cmp r7, #0x10
- add r6, r6, #0x44
- blt _020C0D4C
- ldr sl, _020C0DD0 ; =UNK_021D2254
- mov r9, #0x0
- mov r7, r9
- mov r4, r9
- mov r8, #0xc
- mov r6, #0x7f
- mov r5, #0x1
-_020C0D8C:
- mov r0, r10
- mov r1, r8
- bl FUN_020ADC74
- mov r1, r7
- add r0, r10, #0xc
- bl FUN_020ADC74
- strb r6, [r10, #0x20]
- str r5, [r10, #0x18]
- add r9, r9, #0x1
- str r4, [r10, #0x1c]
- cmp r9, #0x20
- add r10, r10, #0x24
- blt _020C0D8C
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020C0DC4: .word UNK_021D1E08
-_020C0DC8: .word UNK_021D1DFC
-_020C0DCC: .word UNK_021D1E14
-_020C0DD0: .word UNK_021D2254
-
- arm_func_start FUN_020C0DD4
-FUN_020C0DD4: ; 0x020C0DD4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {pc}
- ldrb r0, [r1, #0x2d]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {pc}
- ldrb r0, [r1, #0x3c]
- bl SND_GetPlayerTickCounter
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C0E14
-FUN_020C0E14: ; 0x020C0E14
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- mvneq r0, #0x0
- bxeq lr
- ldrh r0, [r1, #0x34]
- cmp r0, #0x1
- mvnne r0, #0x0
- ldreqh r0, [r1, #0x38]
- bx lr
-
- arm_func_start FUN_020C0E38
-FUN_020C0E38: ; 0x020C0E38
- ldr r12, [r0, #0x0]
- cmp r12, #0x0
- bxeq lr
- mov r3, #0x2
- strh r3, [r12, #0x34]
- ldr r3, [r0, #0x0]
- strh r1, [r3, #0x38]
- ldr r0, [r0, #0x0]
- strh r2, [r0, #0x3a]
- bx lr
-
- arm_func_start FUN_020C0E60
-FUN_020C0E60: ; 0x020C0E60
- ldr r3, [r0, #0x0]
- cmp r3, #0x0
- movne r2, #0x1
- strneh r2, [r3, #0x34]
- ldrne r0, [r0, #0x0]
- strneh r1, [r0, #0x38]
- bx lr
-
- arm_func_start FUN_020C0E7C
-FUN_020C0E7C: ; 0x020C0E7C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldrb r0, [r0, #0x3c]
- bl SND_SetTrackPan
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C0EA4
-FUN_020C0EA4: ; 0x020C0EA4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldrb r0, [r0, #0x3c]
- bl SND_SetTrackPitch
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C0ECC
-FUN_020C0ECC: ; 0x020C0ECC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldrb r0, [r0, #0x3c]
- bl SND_SetPlayerChannelPriority
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C0EF4
-FUN_020C0EF4: ; 0x020C0EF4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x0]
- cmp r3, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldrb r0, [r3, #0x2c]
- cmp r0, #0x2
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- add r0, r3, #0x1c
- mov r1, r1, lsl #0x8
- bl FUN_020C3E40
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C0F30
-FUN_020C0F30: ; 0x020C0F30
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- strneb r1, [r0, #0x40]
- bx lr
-
- arm_func_start FUN_020C0F40
-FUN_020C0F40: ; 0x020C0F40
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- strneb r1, [r0, #0x41]
- bx lr
-
- arm_func_start FUN_020C0F50
-FUN_020C0F50: ; 0x020C0F50
- mov r1, #0x24
- mul r1, r0, r1
- ldr r0, _020C0F64 ; =UNK_021D225C
- ldrh r0, [r0, r1]
- bx lr
- .balign 4
-_020C0F64: .word UNK_021D225C
-
- arm_func_start FUN_020C0F68
-FUN_020C0F68: ; 0x020C0F68
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- movne r1, #0x0
- strne r1, [r2, #0x0]
- strne r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020C0F80
-FUN_020C0F80: ; 0x020C0F80
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020C0F8C
-FUN_020C0F8C: ; 0x020C0F8C
- ldr ip, _020C0F98 ; =FUN_020C0A04
- ldr r0, [r0, #0x0]
- bx r12
- .balign 4
-_020C0F98: .word FUN_020C0A04
-
- arm_func_start FUN_020C0F9C
-FUN_020C0F9C: ; 0x020C0F9C
- stmdb sp!, {r4-r6,lr}
- ldr r4, _020C0FD8 ; =UNK_021D1E14
- mov r6, r0
- mov r5, #0x0
-_020C0FAC:
- ldrb r0, [r4, #0x2c]
- cmp r0, #0x0
- beq _020C0FC4
- mov r0, r4
- mov r1, r6
- bl FUN_020C0A40
-_020C0FC4:
- add r5, r5, #0x1
- cmp r5, #0x10
- add r4, r4, #0x44
- blt _020C0FAC
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C0FD8: .word UNK_021D1E14
-
- arm_func_start FUN_020C0FDC
-FUN_020C0FDC: ; 0x020C0FDC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r4, _020C103C ; =UNK_021D1E14
- mov r7, r0
- mov r6, r1
- mov r5, #0x0
-_020C0FF4:
- ldrb r0, [r4, #0x2c]
- cmp r0, #0x0
- beq _020C1024
- ldrh r0, [r4, #0x34]
- cmp r0, #0x1
- bne _020C1024
- ldrh r0, [r4, #0x38]
- cmp r0, r7
- bne _020C1024
- mov r0, r4
- mov r1, r6
- bl FUN_020C0A40
-_020C1024:
- add r5, r5, #0x1
- cmp r5, #0x10
- add r4, r4, #0x44
- blt _020C0FF4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C103C: .word UNK_021D1E14
-
- arm_func_start FUN_020C1040
-FUN_020C1040: ; 0x020C1040
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r3, _020C109C ; =UNK_021D2254
- mov r2, #0x24
- mla r4, r0, r2, r3
- ldr r5, _020C10A0 ; =UNK_021D1E14
- mov r7, r1
- mov r6, #0x0
-_020C1060:
- ldrb r0, [r5, #0x2c]
- cmp r0, #0x0
- beq _020C1084
- ldr r0, [r5, #0x4]
- cmp r0, r4
- bne _020C1084
- mov r0, r5
- mov r1, r7
- bl FUN_020C0A40
-_020C1084:
- add r6, r6, #0x1
- cmp r6, #0x10
- add r5, r5, #0x44
- blt _020C1060
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C109C: .word UNK_021D2254
-_020C10A0: .word UNK_021D1E14
-
- arm_func_start FUN_020C10A4
-FUN_020C10A4: ; 0x020C10A4
- ldr ip, _020C10B0 ; =FUN_020C0A40
- ldr r0, [r0, #0x0]
- bx r12
- .balign 4
-_020C10B0: .word FUN_020C0A40
-
- arm_func_start FUN_020C10B4
-FUN_020C10B4:
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r5, r2
- mov r6, r0
- mov r0, r1
- mov r3, #0x0
- ldr r2, _020C1140 ; =FUN_020C072C
- add r1, r5, #0x14
- str r3, [sp, #0x0]
- bl SDATi_AllocAndInitChunk
- movs r4, r0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r2, #0x0
- str r2, [r4, #0xc]
- str r6, [r4, #0x10]
- mov r1, r5
- add r0, r4, #0x14
- str r2, [r4, #0x8]
- bl FUN_020C2A94
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r2, _020C1144 ; =UNK_021D2254
- mov r1, #0x24
- mla r2, r6, r1, r2
- str r0, [r4, #0x8]
- mov r1, r4
- add r0, r2, #0xc
- bl FUN_020ADBE8
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C1140: .word FUN_020C072C
-_020C1144: .word UNK_021D2254
-
- arm_func_start FUN_020C1148
-FUN_020C1148: ; 0x020C1148
- mov r2, #0x24
- mul r2, r0, r2
- ldr r0, _020C115C ; =UNK_021D2270
- str r1, [r0, r2]
- bx lr
- .balign 4
-_020C115C: .word UNK_021D2270
-
- arm_func_start FUN_020C1160
-FUN_020C1160: ; 0x020C1160
- mov r2, #0x24
- mul r2, r0, r2
- mov r0, r1, lsl #0x10
- ldr r1, _020C117C ; =UNK_021D226C
- mov r0, r0, lsr #0x10
- str r0, [r1, r2]
- bx lr
- .balign 4
-_020C117C: .word UNK_021D226C
-
- arm_func_start FUN_020C1180
-FUN_020C1180: ; 0x020C1180
- mov r2, #0x24
- mul r2, r0, r2
- ldr r0, _020C1194 ; =UNK_021D2274
- strb r1, [r0, r2]
- bx lr
- .balign 4
-_020C1194: .word UNK_021D2274
-
- arm_func_start FUN_020C1198
-FUN_020C1198: ; 0x020C1198
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- ldr r0, [r4, #0x24]
- mov r0, r0, lsl #0x1e
- movs r0, r0, asr #0x1f
- ldmeqia sp!, {r4-r6,pc}
- ldr r0, [r4, #0x38]
- cmp r0, #0x0
- beq _020C11E8
- mov r5, #0x1
-_020C11C0:
- bl OS_DisableInterrupts
- mov r6, r0
- mov r0, r4
- mov r1, r5
- bl FUN_020C1254
- mov r0, r6
- bl OS_RestoreInterrupts
- ldr r0, [r4, #0x38]
- cmp r0, #0x0
- bne _020C11C0
-_020C11E8:
- ldr r0, [r4, #0x40]
- mov r2, #0x1
- mov r1, #0x0
- mov r2, r2, lsl r0
- ldr r0, [r4, #0x44]
- mov r3, r1
- bl SND_StartTimer
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020C1208
-FUN_020C1208: ; 0x020C1208
- stmdb sp!, {r4,lr}
- ldr r1, [r0, #0x24]
- mov r1, r1, lsl #0x1e
- movs r1, r1, asr #0x1f
- ldmeqia sp!, {r4,pc}
- ldr r2, [r0, #0x40]
- mov r3, #0x1
- mov r1, #0x0
- mov r2, r3, lsl r2
- ldr r0, [r0, #0x44]
- mov r3, r1
- bl SND_StopTimer
- bl SND_GetCurrentCommandTag
- mov r4, r0
- mov r0, #0x1
- bl SND_FlushCommand
- mov r0, r4
- bl SND_WaitForCommandProc
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C1254
-FUN_020C1254: ; 0x020C1254
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r5, r0
- mov r4, r1
- ldr r0, [r5, #0x28]
- ldr r1, [r5, #0x2c]
- bl _u32_div_f
- ldr r1, [r5, #0x48]
- ldr r2, [r5, #0x38]
- mov r3, r0
- mul lr, r3, r2
- cmp r1, #0x0
- mov r12, #0x0
- ble _020C12B8
- ldr r2, _020C1300 ; =UNK_021D2724
- ldr r0, _020C1304 ; =UNK_021D26E4
-_020C1294:
- add r1, r5, r12
- ldrb r1, [r1, #0x4c]
- ldr r1, [r2, r1, lsl #0x3]
- add r1, r1, lr
- str r1, [r0, r12, lsl #0x2]
- ldr r1, [r5, #0x48]
- add r12, r12, #0x1
- cmp r12, r1
- blt _020C1294
-_020C12B8:
- ldr r0, [r5, #0x20]
- ldr r2, _020C1304 ; =UNK_021D26E4
- str r0, [sp, #0x0]
- ldr r12, [r5, #0x34]
- mov r0, r4
- str r12, [sp, #0x4]
- ldr r4, [r5, #0x30]
- blx r4
- ldr r0, [r5, #0x38]
- add r0, r0, #0x1
- str r0, [r5, #0x38]
- ldr r1, [r5, #0x38]
- ldr r0, [r5, #0x2c]
- cmp r1, r0
- movge r0, #0x0
- strge r0, [r5, #0x38]
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C1300: .word UNK_021D2724
-_020C1304: .word UNK_021D26E4
-
- arm_func_start FUN_020C1308
-FUN_020C1308: ; 0x020C1308
- ldr ip, _020C1314 ; =FUN_020C1254
- mov r1, #0x1
- bx r12
- .balign 4
-_020C1314: .word FUN_020C1254
-
- arm_func_start FUN_020C1318
-FUN_020C1318: ; 0x020C1318
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x40]
- bl FUN_020C029C
- ldr r0, _020C1344 ; =UNK_021D26D8
- mov r1, r4
- bl FUN_020ADAB0
- ldr r0, [r4, #0x24]
- bic r0, r0, #0x1
- str r0, [r4, #0x24]
- ldmia sp!, {r4,pc}
- .balign 4
-_020C1344: .word UNK_021D26D8
-
- arm_func_start FUN_020C1348
-FUN_020C1348: ; 0x020C1348
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- ldr r0, [r4, #0x24]
- mov r0, r0, lsl #0x1e
- movs r0, r0, asr #0x1f
- beq _020C13B4
- ldr r0, [r4, #0x40]
- mov r2, #0x1
- mov r1, #0x0
- mov r2, r2, lsl r0
- ldr r0, [r4, #0x44]
- mov r3, r1
- bl SND_StopTimer
- add r0, r4, #0x8
- bl PM_DeletePreSleepCallback
- add r0, r4, #0x14
- bl PM_DeletePostSleepCallback
- ldr r0, [r4, #0x24]
- bic r0, r0, #0x2
- str r0, [r4, #0x24]
- bl SND_GetCurrentCommandTag
- mov r5, r0
- mov r0, #0x1
- bl SND_FlushCommand
- mov r0, r5
- bl SND_WaitForCommandProc
-_020C13B4:
- mov r0, r4
- bl FUN_020C1318
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C13C4
-FUN_020C13C4: ; 0x020C13C4
- stmdb sp!, {r4-r8,lr}
- mov r7, r0
- str r1, [r7, #0x3c]
- ldr r0, [r7, #0x48]
- mov r5, #0x0
- cmp r0, #0x0
- ldmleia sp!, {r4-r8,pc}
- ldr r4, _020C142C ; =UNK_021D2724
- mov r8, #0x1
-_020C13E8:
- add r0, r7, r5
- ldrb r6, [r0, #0x4c]
- ldr r1, [r7, #0x3c]
- add r0, r4, r6, lsl #0x3
- ldr r0, [r0, #0x4]
- add r0, r1, r0
- bl SND_CalcChannelVolume
- mov r2, r0
- mov r0, r8, lsl r6
- and r1, r2, #0xff
- mov r2, r2, asr #0x8
- bl SND_SetChannelVolume
- ldr r0, [r7, #0x48]
- add r5, r5, #0x1
- cmp r5, r0
- blt _020C13E8
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020C142C: .word UNK_021D2724
-
- arm_func_start FUN_020C1430
-FUN_020C1430: ; 0x020C1430
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, [r0, #0x24]
- mov r1, r1, lsl #0x1f
- movs r1, r1, asr #0x1f
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- bl FUN_020C1348
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C1458
-FUN_020C1458: ; 0x020C1458
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x40]
- mov r2, #0x1
- mov r1, #0x0
- mov r2, r2, lsl r0
- ldr r0, [r4, #0x44]
- mov r3, r1
- bl SND_StartTimer
- ldr r0, [r4, #0x24]
- mov r0, r0, lsl #0x1e
- movs r0, r0, asr #0x1f
- ldmneia sp!, {r4,pc}
- add r0, r4, #0x8
- bl PM_PrependPreSleepCallback
- add r0, r4, #0x14
- bl PM_AppendPostSleepCallback
- ldr r0, [r4, #0x24]
- orr r0, r0, #0x2
- str r0, [r4, #0x24]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C14AC
-FUN_020C14AC: ; 0x020C14AC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x24
- mov r10, r0
- ldr r4, [r10, #0x24]
- mov r9, r1
- mov r1, r4, lsl #0x1f
- movs r1, r1, asr #0x1f
- ldr r1, [sp, #0x4c]
- str r2, [sp, #0x18]
- mov r4, r3
- str r1, [sp, #0x4c]
- beq _020C14E0
- bl FUN_020C1430
-_020C14E0:
- ldr r0, [sp, #0x4c]
- ldr r2, [r10, #0x48]
- mov r0, r0, lsl #0x5
- mul r1, r2, r0
- mov r0, r4
- bl _u32_div_f
- ldr r1, [sp, #0x4c]
- ldr r2, [sp, #0x48]
- mul r1, r0, r1
- mov r0, r1, lsl #0x5
- str r0, [r10, #0x28]
- ldr r0, [r10, #0x28]
- cmp r9, #0x1
- moveq r0, r0, lsr #0x1
- mul r0, r2, r0
- ldr r1, [sp, #0x4c]
- bl _u32_div_f
- str r0, [sp, #0x1c]
- bl FUN_020C02BC
- str r0, [r10, #0x40]
- ldr r0, [r10, #0x40]
- cmp r0, #0x0
- addlt sp, sp, #0x24
- movlt r0, #0x0
- ldmltia sp!, {r4-r11,pc}
- ldr r0, [r10, #0x48]
- mov r8, #0x0
- cmp r0, #0x0
- ble _020C15D4
- ldr r0, [sp, #0x48]
- mov r7, r0, lsl #0x5
- ldr r6, _020C1668 ; =UNK_021D2724
- mov r5, r8
- mov r4, #0x7f
- mov r11, #0x40
- mov r0, #0x1
- str r0, [sp, #0x20]
-_020C1574:
- ldr r2, [r10, #0x28]
- ldr r1, [sp, #0x18]
- add r0, r10, r8
- mla r1, r2, r8, r1
- ldrb r0, [r0, #0x4c]
- ldr r3, [sp, #0x20]
- str r1, [r6, r0, lsl #0x3]
- add r1, r6, r0, lsl #0x3
- str r5, [r1, #0x4]
- str r5, [sp, #0x0]
- ldr r2, [r10, #0x28]
- mov r1, r9
- mov r2, r2, lsr #0x2
- str r2, [sp, #0x4]
- str r4, [sp, #0x8]
- str r5, [sp, #0xc]
- str r7, [sp, #0x10]
- str r11, [sp, #0x14]
- ldr r2, [r6, r0, lsl #0x3]
- bl SND_SetupChannelPcm
- ldr r0, [r10, #0x48]
- add r8, r8, #0x1
- cmp r8, r0
- blt _020C1574
-_020C15D4:
- str r10, [sp, #0x0]
- ldr r1, [sp, #0x1c]
- ldr r0, [r10, #0x40]
- ldr r3, _020C166C ; =FUN_020C1308
- mov r2, r1
- bl SND_SetupAlarm
- ldr r0, _020C1670 ; =UNK_021D26D8
- mov r1, r10
- bl FUN_020ADBE8
- ldr r0, [sp, #0x4c]
- str r9, [r10, #0x20]
- str r0, [r10, #0x2c]
- ldr r1, [sp, #0x50]
- ldr r0, [sp, #0x54]
- str r1, [r10, #0x30]
- str r0, [r10, #0x34]
- mov r0, #0x0
- str r0, [r10, #0x38]
- str r0, [r10, #0x3c]
- ldr r0, [r10, #0x24]
- bic r0, r0, #0x1
- orr r0, r0, #0x1
- str r0, [r10, #0x24]
- bl OS_DisableInterrupts
- mov r4, r0
- mov r2, #0x1
- mov r0, r10
- mov r1, #0x0
- str r2, [r10, #0x2c]
- bl FUN_020C1254
- ldr r1, [sp, #0x4c]
- mov r0, r4
- str r1, [r10, #0x2c]
- bl OS_RestoreInterrupts
- mov r0, #0x1
- add sp, sp, #0x24
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020C1668: .word UNK_021D2724
-_020C166C: .word FUN_020C1308
-_020C1670: .word UNK_021D26D8
-
- arm_func_start FUN_020C1674
-FUN_020C1674: ; 0x020C1674
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x44]
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- bl FUN_020C0340
- mov r0, #0x0
- str r0, [r4, #0x44]
- str r0, [r4, #0x48]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C169C
-FUN_020C169C: ; 0x020C169C
- stmdb sp!, {r4-r6,lr}
- mov r5, r1
- mov r4, #0x0
- mov r6, r0
- mov r12, r4
- cmp r5, #0x0
- ble _020C16DC
- mov r1, #0x1
-_020C16BC:
- ldrb r3, [r2, r12]
- add r0, r6, r12
- strb r3, [r0, #0x4c]
- ldrb r0, [r2, r12]
- add r12, r12, #0x1
- cmp r12, r5
- orr r4, r4, r1, lsl r0
- blt _020C16BC
-_020C16DC:
- mov r0, r4
- bl FUN_020C0370
- cmp r0, #0x0
- moveq r0, #0x0
- strne r5, [r6, #0x48]
- strne r4, [r6, #0x44]
- movne r0, #0x1
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020C16FC
-FUN_020C16FC: ; 0x020C16FC
- stmdb sp!, {r4,lr}
- ldr r1, _020C176C ; =UNK_021D26D4
- mov r4, r0
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- bne _020C172C
- ldr r0, _020C1770 ; =UNK_021D26D8
- mov r1, #0x0
- bl FUN_020ADC74
- ldr r0, _020C176C ; =UNK_021D26D4
- mov r1, #0x1
- str r1, [r0, #0x0]
-_020C172C:
- ldr r1, _020C1774 ; =FUN_020C1208
- ldr r0, _020C1778 ; =FUN_020C1198
- str r1, [r4, #0x8]
- str r4, [r4, #0xc]
- str r0, [r4, #0x14]
- str r4, [r4, #0x18]
- mov r0, #0x0
- str r0, [r4, #0x44]
- str r0, [r4, #0x48]
- ldr r0, [r4, #0x24]
- bic r0, r0, #0x1
- str r0, [r4, #0x24]
- ldr r0, [r4, #0x24]
- bic r0, r0, #0x2
- str r0, [r4, #0x24]
- ldmia sp!, {r4,pc}
- .balign 4
-_020C176C: .word UNK_021D26D4
-_020C1770: .word UNK_021D26D8
-_020C1774: .word FUN_020C1208
-_020C1778: .word FUN_020C1198
-
- arm_func_start FUN_020C177C
-FUN_020C177C: ; 0x020C177C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- ldr r4, [r7, #0x18]
- ldr r0, [r7, #0x1c]
- ldr r1, _020C186C ; =UNK_021D27A4
- mul r0, r4, r0
- ldr r3, [r7, #0xc]
- ldr r2, [r7, #0x10]
- ldr r1, [r1, #0x0]
- add r6, r3, r0
- cmp r1, #0x0
- add r5, r2, r0
- beq _020C180C
- ldr r2, _020C1870 ; =UNK_021D27A8
- mov r1, #0x14
- ldr r2, [r2, #0x0]
- ldr r3, _020C1874 ; =UNK_021D2820
- mul r1, r2, r1
- str r7, [r3, r1]
- add r1, r3, r1
- str r4, [r1, #0x4]
- str r0, [r1, #0x8]
- str r6, [r1, #0xc]
- ldr r0, _020C1878 ; =UNK_021D27AC
- mov r2, #0x0
- str r5, [r1, #0x10]
- bl OS_SendMessage
- ldr r0, _020C1870 ; =UNK_021D27A8
- ldr r1, [r0, #0x0]
- add r1, r1, #0x1
- str r1, [r0, #0x0]
- cmp r1, #0x8
- movge r1, #0x0
- strge r1, [r0, #0x0]
- b _020C1844
-_020C180C:
- mov r0, r6
- mov r1, r4
- bl DC_InvalidateRange
- mov r0, r5
- mov r1, r4
- bl DC_InvalidateRange
- ldr r1, [r7, #0x38]
- mov r0, r6
- str r1, [sp, #0x0]
- ldr r3, [r7, #0x8]
- ldr r6, [r7, #0x34]
- mov r1, r5
- mov r2, r4
- blx r6
-_020C1844:
- ldr r0, [r7, #0x1c]
- add r0, r0, #0x1
- str r0, [r7, #0x1c]
- ldr r1, [r7, #0x1c]
- ldr r0, [r7, #0x30]
- cmp r1, r0
- movge r0, #0x0
- strge r0, [r7, #0x1c]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C186C: .word UNK_021D27A4
-_020C1870: .word UNK_021D27A8
-_020C1874: .word UNK_021D2820
-_020C1878: .word UNK_021D27AC
-
- arm_func_start FUN_020C187C
-FUN_020C187C: ; 0x020C187C
- stmdb sp!, {r4,lr}
- ldr r4, _020C18F4 ; =UNK_021D27CC
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- mov r0, #0x0
- str r0, [r4, #0x1c]
- ldr r1, [r4, #0xc]
- ldr r2, [r4, #0x14]
- bl MIi_CpuClear32
- ldr r1, [r4, #0x10]
- ldr r2, [r4, #0x14]
- mov r0, #0x0
- bl MIi_CpuClear32
- ldr r0, [r4, #0xc]
- ldr r1, [r4, #0x14]
- bl DC_FlushRange
- ldr r0, [r4, #0x10]
- ldr r1, [r4, #0x14]
- bl DC_FlushRange
- ldr r1, [r4, #0x2c]
- mov r3, #0x0
- cmp r1, #0x0
- movge r0, #0x1
- movge r2, r0, lsl r1
- ldr r0, [r4, #0x24]
- ldr r1, [r4, #0x28]
- movlt r2, #0x0
- bl SND_StartTimer
- ldmia sp!, {r4,pc}
- .balign 4
-_020C18F4: .word UNK_021D27CC
-
- arm_func_start FUN_020C18F8
-FUN_020C18F8:
- stmdb sp!, {r4,lr}
- ldr r3, _020C194C ; =UNK_021D27CC
- ldr r0, [r3, #0x0]
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r1, [r3, #0x2c]
- cmp r1, #0x0
- movge r0, #0x1
- movge r2, r0, lsl r1
- ldr r0, [r3, #0x24]
- ldr r1, [r3, #0x28]
- movlt r2, #0x0
- mov r3, #0x0
- bl SND_StopTimer
- bl SND_GetCurrentCommandTag
- mov r4, r0
- mov r0, #0x1
- bl SND_FlushCommand
- mov r0, r4
- bl SND_WaitForCommandProc
- ldmia sp!, {r4,pc}
- .balign 4
-_020C194C: .word UNK_021D27CC
-
- arm_func_start FUN_020C1950
-FUN_020C1950: ; 0x020C1950
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r4, _020C1A3C ; =UNK_021D27CC
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- ldr r1, [r4, #0x2c]
- mov r3, #0x0
- cmp r1, #0x0
- movge r7, #0x1
- movlt r7, #0x0
- cmp r7, #0x0
- movne r0, #0x1
- movne r2, r0, lsl r1
- ldr r0, [r4, #0x24]
- ldr r1, [r4, #0x28]
- moveq r2, #0x0
- bl SND_StopTimer
- cmp r7, #0x0
- beq _020C19DC
- bl SND_GetCurrentCommandTag
- mov r5, r0
- mov r0, #0x1
- bl SND_FlushCommand
- mov r0, r5
- bl SND_WaitForCommandProc
- ldr r6, _020C1A40 ; =UNK_021D27AC
- mov r5, #0x0
-_020C19C4:
- mov r0, r6
- mov r1, r5
- mov r2, r5
- bl OS_ReceiveMessage
- cmp r0, #0x0
- bne _020C19C4
-_020C19DC:
- ldr r0, [r4, #0x28]
- cmp r0, #0x0
- beq _020C19EC
- bl FUN_020C0300
-_020C19EC:
- ldr r0, [r4, #0x20]
- cmp r0, #0x0
- beq _020C19FC
- bl FUN_020C0340
-_020C19FC:
- cmp r7, #0x0
- beq _020C1A0C
- ldr r0, [r4, #0x2c]
- bl FUN_020C029C
-_020C1A0C:
- ldr r0, [r4, #0x4]
- cmp r0, #0x1
- bne _020C1A2C
- mov r0, #0x0
- mov r1, r0
- mov r2, r0
- mov r3, r0
- bl SND_SetOutputSelector
-_020C1A2C:
- mov r0, #0x0
- str r0, [r4, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C1A3C: .word UNK_021D27CC
-_020C1A40: .word UNK_021D27AC
-
- arm_func_start FUN_020C1A44
-FUN_020C1A44: ; 0x020C1A44
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x3c
- mov r10, r3
- str r0, [sp, #0x18]
- str r2, [sp, #0x20]
- mov r2, #0x0
- str r1, [sp, #0x1c]
- mov r0, r1
- mov r1, r10
- ldr r9, [sp, #0x6c]
- ldr r8, [sp, #0x74]
- str r2, [sp, #0x2c]
- mvn r6, #0x0
- ldr r4, _020C1D90 ; =UNK_021D27CC
- bl DC_FlushRange
- ldr r0, [sp, #0x20]
- mov r1, r10
- bl DC_FlushRange
- ldr r0, [sp, #0x60]
- ldr r1, [sp, #0x70]
- cmp r0, #0x1
- moveq r7, #0x1
- ldr r0, _020C1D94 ; =0x00FFB0FF
- movne r7, #0x0
- bl _s32_div_f
- ldr r1, [sp, #0x84]
- mov r11, r0
- cmp r1, #0x0
- beq _020C1B00
- add r1, r11, #0x10
- bic r11, r1, #0x1f
- mov r2, r11, asr #0x5
- mov r0, r10
- cmp r7, #0x0
- ldr r1, [sp, #0x80]
- moveq r0, r10, lsr #0x1
- str r2, [sp, #0x34]
- bl _u32_div_f
- ldr r1, [sp, #0x34]
- mov r5, #0x20
- mul r0, r1, r0
- str r0, [sp, #0x30]
- cmp r7, #0x0
- ldr r0, [sp, #0x34]
- moveq r5, r5, lsr #0x1
- mul r0, r5, r0
- mov r5, r0
-_020C1B00:
- cmp r7, #0x0
- movne r0, #0x0
- strne r0, [sp, #0x28]
- moveq r0, #0x1
- streq r0, [sp, #0x28]
- cmp r7, #0x0
- movne r0, #0x1
- strne r0, [sp, #0x24]
- moveq r0, #0x0
- streq r0, [sp, #0x24]
- ldr r0, [sp, #0x18]
- cmp r0, #0x2
- movne r0, #0xa
- strne r0, [sp, #0x2c]
- ldr r0, [sp, #0x84]
- cmp r0, #0x0
- beq _020C1B58
- bl FUN_020C02BC
- movs r6, r0
- addmi sp, sp, #0x3c
- movmi r0, #0x0
- ldmmiia sp!, {r4-r11,pc}
-_020C1B58:
- mov r0, #0x3
- bl FUN_020C031C
- cmp r0, #0x0
- bne _020C1B84
- cmp r6, #0x0
- blt _020C1B78
- mov r0, r6
- bl FUN_020C029C
-_020C1B78:
- add sp, sp, #0x3c
- mov r0, #0x0
- ldmia sp!, {r4-r11,pc}
-_020C1B84:
- mov r0, #0xa
- bl FUN_020C0370
- cmp r0, #0x0
- bne _020C1BB8
- cmp r6, #0x0
- blt _020C1BA4
- mov r0, r6
- bl FUN_020C029C
-_020C1BA4:
- mov r0, #0x3
- bl FUN_020C0300
- add sp, sp, #0x3c
- mov r0, #0x0
- ldmia sp!, {r4-r11,pc}
-_020C1BB8:
- mov r0, #0x0
- mov r7, r10, lsr #0x2
- str r0, [sp, #0x0]
- str r7, [sp, #0x4]
- str r8, [sp, #0x8]
- str r0, [sp, #0xc]
- cmp r9, #0x0
- movne r3, #0x1
- ldr r1, [sp, #0x78]
- str r11, [sp, #0x10]
- str r1, [sp, #0x14]
- ldr r1, [sp, #0x28]
- ldr r2, [sp, #0x1c]
- moveq r3, #0x2
- mov r0, #0x1
- bl SND_SetupChannelPcm
- ldr r1, [sp, #0x64]
- str r9, [sp, #0x0]
- str r1, [sp, #0x4]
- ldr r0, [sp, #0x68]
- ldr r1, [sp, #0x24]
- str r0, [sp, #0x8]
- ldr r2, [sp, #0x1c]
- mov r0, #0x0
- mov r3, r7
- bl SND_SetupCapture
- mov r0, #0x0
- str r0, [sp, #0x0]
- str r7, [sp, #0x4]
- str r8, [sp, #0x8]
- str r0, [sp, #0xc]
- cmp r9, #0x0
- movne r3, #0x1
- ldr r2, [sp, #0x7c]
- str r11, [sp, #0x10]
- str r2, [sp, #0x14]
- ldr r1, [sp, #0x28]
- ldr r2, [sp, #0x20]
- moveq r3, #0x2
- mov r0, #0x3
- bl SND_SetupChannelPcm
- ldr r2, [sp, #0x64]
- str r9, [sp, #0x0]
- str r2, [sp, #0x4]
- ldr r0, [sp, #0x68]
- ldr r1, [sp, #0x24]
- str r0, [sp, #0x8]
- ldr r2, [sp, #0x20]
- mov r3, r7
- mov r0, #0x1
- bl SND_SetupCapture
- cmp r6, #0x0
- blt _020C1CA8
- ldr r2, [sp, #0x30]
- ldr r3, _020C1D98 ; =FUN_020C177C
- mov r1, r2
- mov r0, r6
- add r1, r1, r5
- str r4, [sp, #0x0]
- bl SND_SetupAlarm
-_020C1CA8:
- ldr r0, [sp, #0x18]
- cmp r0, #0x1
- bne _020C1CC8
- mov r0, #0x1
- mov r2, r0
- mov r3, r0
- mov r1, #0x2
- bl SND_SetOutputSelector
-_020C1CC8:
- cmp r6, #0x0
- movge r0, #0x1
- movge r2, r0, lsl r6
- ldr r0, [sp, #0x2c]
- movlt r2, #0x0
- mov r1, #0x3
- mov r3, #0x0
- bl SND_StartTimer
- mov r0, #0x1
- str r0, [r4, #0x0]
- ldr r0, [sp, #0x18]
- ldr r1, [sp, #0x80]
- str r0, [r4, #0x4]
- mov r0, #0xa
- str r0, [r4, #0x20]
- ldr r0, [sp, #0x2c]
- str r0, [r4, #0x24]
- mov r0, #0x3
- str r0, [r4, #0x28]
- ldr r0, [sp, #0x60]
- str r6, [r4, #0x2c]
- str r0, [r4, #0x8]
- ldr r0, [sp, #0x1c]
- str r0, [r4, #0xc]
- ldr r0, [sp, #0x20]
- str r0, [r4, #0x10]
- mov r0, r10
- str r10, [r4, #0x14]
- bl _u32_div_f
- str r0, [r4, #0x18]
- mov r1, #0x0
- str r1, [r4, #0x1c]
- ldr r0, [sp, #0x80]
- ldr r1, [sp, #0x84]
- str r0, [r4, #0x30]
- ldr r0, [sp, #0x88]
- str r1, [r4, #0x34]
- str r0, [r4, #0x38]
- add r0, r4, #0x3c
- str r8, [r4, #0x50]
- bl FUN_020C3E6C
- add r0, r4, #0x3c
- mov r1, r8, lsl #0x8
- mov r2, #0x1
- bl FUN_020C3E40
- mov r0, #0x0
- str r0, [r4, #0x4c]
- mov r0, #0x1
- add sp, sp, #0x3c
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020C1D90: .word UNK_021D27CC
-_020C1D94: .word 0x00FFB0FF
-_020C1D98: .word FUN_020C177C
-
- arm_func_start FUN_020C1D9C
-FUN_020C1D9C: ; 0x020C1D9C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r5, _020C1E34 ; =UNK_021D27CC
- ldr r0, [r5, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldr r0, [r5, #0x4]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,pc}
- add r4, r5, #0x3c
- mov r0, r4
- bl FUN_020C3DF4
- ldr r0, [r5, #0x4c]
- cmp r0, #0x0
- beq _020C1DFC
- mov r0, r4
- bl FUN_020C3DDC
- cmp r0, #0x0
- beq _020C1DFC
- bl FUN_020C1950
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020C1DFC:
- mov r0, r4
- bl FUN_020C3E0C
- ldr r1, [r5, #0x50]
- mov r4, r0, asr #0x8
- cmp r4, r1
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldr r0, [r5, #0x24]
- mov r1, r4
- mov r2, #0x0
- bl SND_SetChannelVolume
- str r4, [r5, #0x50]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C1E34: .word UNK_021D27CC
-
- arm_func_start FUN_020C1E38
-FUN_020C1E38: ; 0x020C1E38
- ldr r1, _020C1E50 ; =UNK_021D27A4
- mov r2, #0x0
- ldr r0, _020C1E54 ; =UNK_021D27CC
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
- bx lr
- .balign 4
-_020C1E50: .word UNK_021D27A4
-_020C1E54: .word UNK_021D27CC
-
- arm_func_start FUN_020C1E58
-FUN_020C1E58: ; 0x020C1E58
- ldr r0, _020C1E64 ; =UNK_021D27CC
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020C1E64: .word UNK_021D27CC
-
- arm_func_start FUN_020C1E68
-FUN_020C1E68: ; 0x020C1E68
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020C1EA0 ; =UNK_021D27CC
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r0, [r0, #0x4]
- cmp r0, #0x1
- addne sp, sp, #0x4
- ldmneia sp!, {pc}
- bl FUN_020C1950
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020C1EA0: .word UNK_021D27CC
-
- arm_func_start FUN_020C1EA4
-FUN_020C1EA4: ; 0x020C1EA4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x2c
- mov r5, r0
- mov r4, r1
- mov r7, r2
- mov r6, r3
- bl FUN_020C1E68
- ldr r0, _020C1F50 ; =UNK_021D27CC
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x2c
- movne r0, #0x0
- ldmneia sp!, {r4-r7,pc}
- mov r1, r5
- mov r2, r4
- mov r0, #0x0
- bl MIi_CpuClear32
- mov r0, r5
- mov r1, r4
- bl DC_FlushRange
- str r7, [sp, #0x0]
- mov r2, #0x0
- str r2, [sp, #0x4]
- str r2, [sp, #0x8]
- mov r0, #0x1
- str r0, [sp, #0xc]
- str r6, [sp, #0x10]
- mov r1, #0x7f
- str r1, [sp, #0x14]
- str r2, [sp, #0x18]
- ldr r2, [sp, #0x40]
- str r1, [sp, #0x1c]
- ldr r1, [sp, #0x44]
- str r2, [sp, #0x20]
- ldr r12, [sp, #0x48]
- str r1, [sp, #0x24]
- mov r1, r5
- mov r3, r4, lsr #0x1
- add r2, r5, r4, lsr #0x1
- str r12, [sp, #0x28]
- bl FUN_020C1A44
- add sp, sp, #0x2c
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C1F50: .word UNK_021D27CC
-
- arm_func_start FUN_020C1F54
-FUN_020C1F54: ; 0x020C1F54
- stmdb sp!, {r4,lr}
- ldr r4, _020C1FA0 ; =UNK_021D27CC
- mov r2, r0
- ldr r0, [r4, #0x0]
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r0, [r4, #0x4]
- cmp r0, #0x0
- ldmneia sp!, {r4,pc}
- cmp r2, #0x0
- bne _020C1F88
- bl FUN_020C1950
- ldmia sp!, {r4,pc}
-_020C1F88:
- add r0, r4, #0x3c
- mov r1, #0x0
- bl FUN_020C3E40
- mov r0, #0x1
- str r0, [r4, #0x4c]
- ldmia sp!, {r4,pc}
- .balign 4
-_020C1FA0: .word UNK_021D27CC
-
- arm_func_start FUN_020C1FA4
-FUN_020C1FA4: ; 0x020C1FA4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, _020C1FEC ; =UNK_021D27CC
- mov r12, r0
- ldr r0, [r3, #0x0]
- mov r2, r1
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r0, [r3, #0x4]
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {pc}
- add r0, r3, #0x3c
- mov r1, r12, lsl #0x8
- bl FUN_020C3E40
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020C1FEC: .word UNK_021D27CC
-
- arm_func_start FUN_020C1FF0
-FUN_020C1FF0: ; 0x020C1FF0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x2c
- mov r5, r0
- mov r0, #0x0
- mov r4, r1
- mov r7, r2
- mov r6, r3
- bl FUN_020C1F54
- ldr r0, _020C2098 ; =UNK_021D27CC
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addne sp, sp, #0x2c
- movne r0, #0x0
- ldmneia sp!, {r4-r7,pc}
- mov r1, r5
- mov r2, r4
- mov r0, #0x0
- bl MIi_CpuClear32
- mov r0, r5
- mov r1, r4
- bl DC_FlushRange
- str r7, [sp, #0x0]
- mov r0, #0x0
- str r0, [sp, #0x4]
- str r0, [sp, #0x8]
- mov r1, #0x1
- str r1, [sp, #0xc]
- ldr r1, [sp, #0x40]
- str r6, [sp, #0x10]
- str r1, [sp, #0x14]
- str r0, [sp, #0x18]
- mov r1, #0x7f
- str r1, [sp, #0x1c]
- str r0, [sp, #0x20]
- str r0, [sp, #0x24]
- mov r1, r5
- mov r3, r4, lsr #0x1
- add r2, r5, r4, lsr #0x1
- str r0, [sp, #0x28]
- bl FUN_020C1A44
- add sp, sp, #0x2c
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C2098: .word UNK_021D27CC
-
- arm_func_start SDATi_SymbDtor
-SDATi_SymbDtor: ; 0x020C209C
- mov r0, #0x0
- str r0, [r2, #0x88]
- bx lr
-
- arm_func_start SDATi_FatDtor
-SDATi_FatDtor: ; 0x020C20A8
- mov r0, #0x0
- str r0, [r2, #0x84]
- bx lr
-
- arm_func_start SDATi_InfoDtor
-SDATi_InfoDtor: ; 0x020C20B4
- mov r0, #0x0
- str r0, [r2, #0x8c]
- bx lr
-
- arm_func_start FUN_020C20C0
-FUN_020C20C0: ; 0x020C20C0
- ldr r2, _020C20D8 ; =UNK_021D28C0
- ldr r2, [r2, #0x0]
- ldr r2, [r2, #0x84]
- add r0, r2, r0, lsl #0x4
- str r1, [r0, #0x14]
- bx lr
- .balign 4
-_020C20D8: .word UNK_021D28C0
-
- arm_func_start FUN_020C20DC
-FUN_020C20DC:
- ldr r1, _020C2100 ; =UNK_021D28C0
- ldr r1, [r1, #0x0]
- ldr r2, [r1, #0x84]
- ldr r1, [r2, #0x8]
- cmp r0, r1
- movcs r0, #0x0
- addcc r0, r2, r0, lsl #0x4
- ldrcc r0, [r0, #0x14]
- bx lr
- .balign 4
-_020C2100: .word UNK_021D28C0
-
- arm_func_start FUN_020C2104
-FUN_020C2104:
- stmdb sp!, {r4-r6,lr}
- ldr r4, _020C2178 ; =UNK_021D28C0
- mov r5, r2
- ldr r4, [r4, #0x0]
- mov r6, r1
- ldr r2, [r4, #0x84]
- ldr r1, [r2, #0x8]
- cmp r0, r1
- mvncs r0, #0x0
- ldmcsia sp!, {r4-r6,pc}
- add r1, r2, #0xc
- add r1, r1, r0, lsl #0x4
- ldr r0, [r1, #0x4]
- ldr r1, [r1, #0x0]
- sub r0, r0, r3
- cmp r5, r0
- movhi r5, r0
- add r0, r4, #0x34
- add r1, r1, r3
- mov r2, #0x0
- bl FS_SeekFile
- cmp r0, #0x0
- mvneq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r1, r6
- mov r2, r5
- add r0, r4, #0x34
- bl FS_ReadFile
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C2178: .word UNK_021D28C0
-
- arm_func_start FUN_020C217C
-FUN_020C217C: ; 0x020C217C
- ldr r1, _020C21A0 ; =UNK_021D28C0
- ldr r1, [r1, #0x0]
- ldr r2, [r1, #0x84]
- ldr r1, [r2, #0x8]
- cmp r0, r1
- movcs r0, #0x0
- addcc r0, r2, r0, lsl #0x4
- ldrcc r0, [r0, #0x10]
- bx lr
- .balign 4
-_020C21A0: .word UNK_021D28C0
-
- arm_func_start FUN_020C21A4
-FUN_020C21A4: ; 0x020C21A4
- ldr r1, _020C2204 ; =UNK_021D28C0
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0x8c]
- ldr r1, [r2, #0x1c]
- cmp r1, #0x0
- moveq r2, #0x0
- addne r2, r2, r1
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r1, [r2, #0x0]
- cmp r0, r1
- movcs r0, #0x0
- bxcs lr
- add r0, r2, r0, lsl #0x2
- ldr r1, [r0, #0x4]
- ldr r0, [r3, #0x8c]
- cmp r1, #0x0
- moveq r0, #0x0
- addne r0, r0, r1
- bx lr
- .balign 4
-_020C2204: .word UNK_021D28C0
-
- arm_func_start FUN_020C2208
-FUN_020C2208: ; 0x020C2208
- ldr r1, _020C2268 ; =UNK_021D28C0
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0x8c]
- ldr r1, [r2, #0x18]
- cmp r1, #0x0
- moveq r2, #0x0
- addne r2, r2, r1
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r1, [r2, #0x0]
- cmp r0, r1
- movcs r0, #0x0
- bxcs lr
- add r0, r2, r0, lsl #0x2
- ldr r1, [r0, #0x4]
- ldr r0, [r3, #0x8c]
- cmp r1, #0x0
- moveq r0, #0x0
- addne r0, r0, r1
- bx lr
- .balign 4
-_020C2268: .word UNK_021D28C0
-
- arm_func_start FUN_020C226C
-FUN_020C226C:
- ldr r1, _020C22CC ; =UNK_021D28C0
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0x8c]
- ldr r1, [r2, #0x14]
- cmp r1, #0x0
- moveq r2, #0x0
- addne r2, r2, r1
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r1, [r2, #0x0]
- cmp r0, r1
- movcs r0, #0x0
- bxcs lr
- add r0, r2, r0, lsl #0x2
- ldr r1, [r0, #0x4]
- ldr r0, [r3, #0x8c]
- cmp r1, #0x0
- moveq r0, #0x0
- addne r0, r0, r1
- bx lr
- .balign 4
-_020C22CC: .word UNK_021D28C0
-
- arm_func_start FUN_020C22D0
-FUN_020C22D0: ; 0x020C22D0
- ldr r1, _020C2330 ; =UNK_021D28C0
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0x8c]
- ldr r1, [r2, #0x10]
- cmp r1, #0x0
- moveq r2, #0x0
- addne r2, r2, r1
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r1, [r2, #0x0]
- cmp r0, r1
- movcs r0, #0x0
- bxcs lr
- add r0, r2, r0, lsl #0x2
- ldr r1, [r0, #0x4]
- ldr r0, [r3, #0x8c]
- cmp r1, #0x0
- moveq r0, #0x0
- addne r0, r0, r1
- bx lr
- .balign 4
-_020C2330: .word UNK_021D28C0
-
- arm_func_start FUN_020C2334
-FUN_020C2334:
- ldr r1, _020C2394 ; =UNK_021D28C0
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0x8c]
- ldr r1, [r2, #0xc]
- cmp r1, #0x0
- moveq r2, #0x0
- addne r2, r2, r1
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r1, [r2, #0x0]
- cmp r0, r1
- movcs r0, #0x0
- bxcs lr
- add r0, r2, r0, lsl #0x2
- ldr r1, [r0, #0x4]
- ldr r0, [r3, #0x8c]
- cmp r1, #0x0
- moveq r0, #0x0
- addne r0, r0, r1
- bx lr
- .balign 4
-_020C2394: .word UNK_021D28C0
-
- arm_func_start FUN_020C2398
-FUN_020C2398:
- ldr r1, _020C23F8 ; =UNK_021D28C0
- ldr r3, [r1, #0x0]
- ldr r2, [r3, #0x8c]
- ldr r1, [r2, #0x8]
- cmp r1, #0x0
- moveq r2, #0x0
- addne r2, r2, r1
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r0, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r1, [r2, #0x0]
- cmp r0, r1
- movcs r0, #0x0
- bxcs lr
- add r0, r2, r0, lsl #0x2
- ldr r1, [r0, #0x4]
- ldr r0, [r3, #0x8c]
- cmp r1, #0x0
- moveq r0, #0x0
- addne r0, r0, r1
- bx lr
- .balign 4
-_020C23F8: .word UNK_021D28C0
-
- arm_func_start FUN_020C23FC
-FUN_020C23FC: ; 0x020C23FC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_020C2398
- cmp r0, #0x0
- moveq r0, #0x0
- addne r0, r0, #0x4
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C241C
-FUN_020C241C: ; 0x020C241C
- ldr r0, _020C2428 ; =UNK_021D28C0
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020C2428: .word UNK_021D28C0
-
- arm_func_start FUN_020C242C
-FUN_020C242C: ; 0x020C242C
- ldr r1, _020C2440 ; =UNK_021D28C0
- ldr r2, [r1, #0x0]
- str r0, [r1, #0x0]
- mov r0, r2
- bx lr
- .balign 4
-_020C2440: .word UNK_021D28C0
-
- arm_func_start FUN_020C2444
-FUN_020C2444: ; 0x020C2444
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- mov r0, r4
- mov r1, r5
- mov r2, #0x30
- bl MIi_CpuCopy32
- ldr r0, [r5, #0x18]
- mov r12, #0x0
- cmp r0, #0x0
- moveq r0, #0x0
- addne r0, r4, r0
- str r0, [r5, #0x8c]
- ldr r0, [r5, #0x20]
- cmp r0, #0x0
- moveq r0, #0x0
- addne r0, r4, r0
- str r0, [r5, #0x84]
- ldr r0, [r5, #0x10]
- cmp r0, #0x0
- moveq r0, #0x0
- addne r0, r4, r0
- str r0, [r5, #0x88]
- ldr r2, [r5, #0x84]
- ldr r0, [r2, #0x8]
- cmp r0, #0x0
- bls _020C24F0
- mov r3, r12
- mov r1, r12
-_020C24BC:
- add r2, r2, #0xc
- ldr r0, [r2, r3]
- add r2, r2, r3
- cmp r0, #0x0
- moveq r0, r1
- addne r0, r4, r0
- str r0, [r2, #0x8]
- ldr r2, [r5, #0x84]
- add r12, r12, #0x1
- ldr r0, [r2, #0x8]
- add r3, r3, #0x10
- cmp r12, r0
- blo _020C24BC
-_020C24F0:
- mov r1, #0x0
- ldr r0, _020C2508 ; =UNK_021D28C0
- str r1, [r5, #0x30]
- str r5, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C2508: .word UNK_021D28C0
-
- arm_func_start SDATi_ReadHeaders
-SDATi_ReadHeaders:
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r6, r0
- mov r5, r1
- mov r1, #0x0
- mov r4, r2
- mov r2, r1
- add r0, r6, #0x34
- bl FS_SeekFile
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r1, r6
- add r0, r6, #0x34
- mov r2, #0x30
- bl FS_ReadFile
- cmp r0, #0x30
- addne sp, sp, #0x8
- movne r0, #0x0
- ldmneia sp!, {r4-r6,pc}
- cmp r5, #0x0
- beq _020C26E0
- mov r0, #0x0
- str r0, [sp, #0x0]
- ldr r1, [r6, #0x1c]
- ldr r2, _020C26EC ; =SDATi_InfoDtor
- mov r0, r5
- mov r3, r6
- bl SDATi_AllocAndInitChunk
- str r0, [r6, #0x8c]
- ldr r0, [r6, #0x8c]
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x18]
- add r0, r6, #0x34
- mov r2, #0x0
- bl FS_SeekFile
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x8c]
- ldr r2, [r6, #0x1c]
- add r0, r6, #0x34
- bl FS_ReadFile
- ldr r1, [r6, #0x1c]
- cmp r0, r1
- addne sp, sp, #0x8
- movne r0, #0x0
- ldmneia sp!, {r4-r6,pc}
- mov r0, #0x0
- str r0, [sp, #0x0]
- ldr r1, [r6, #0x24]
- ldr r2, _020C26F0 ; =SDATi_FatDtor
- mov r0, r5
- mov r3, r6
- bl SDATi_AllocAndInitChunk
- str r0, [r6, #0x84]
- ldr r0, [r6, #0x84]
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x20]
- add r0, r6, #0x34
- mov r2, #0x0
- bl FS_SeekFile
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x84]
- ldr r2, [r6, #0x24]
- add r0, r6, #0x34
- bl FS_ReadFile
- ldr r1, [r6, #0x24]
- cmp r0, r1
- addne sp, sp, #0x8
- movne r0, #0x0
- ldmneia sp!, {r4-r6,pc}
- cmp r4, #0x0
- beq _020C26E0
- ldr r1, [r6, #0x14]
- cmp r1, #0x0
- beq _020C26E0
- mov r4, #0x0
- ldr r2, _020C26F4 ; =SDATi_SymbDtor
- mov r0, r5
- mov r3, r6
- str r4, [sp, #0x0]
- bl SDATi_AllocAndInitChunk
- str r0, [r6, #0x88]
- ldr r0, [r6, #0x88]
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, r4
- ldmeqia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x10]
- add r0, r6, #0x34
- mov r2, r4
- bl FS_SeekFile
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, r4
- ldmeqia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x88]
- ldr r2, [r6, #0x14]
- add r0, r6, #0x34
- bl FS_ReadFile
- ldr r1, [r6, #0x14]
- cmp r0, r1
- addne sp, sp, #0x8
- movne r0, r4
- ldmneia sp!, {r4-r6,pc}
-_020C26E0:
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C26EC: .word SDATi_InfoDtor
-_020C26F0: .word SDATi_FatDtor
-_020C26F4: .word SDATi_SymbDtor
-
- arm_func_start SDAT_Open
-SDAT_Open: ; 0x020C26F8
- ; r0: &sSoundDataBuffer
- ; r1: char* filename
- ; r2: (&sSoundDataBuffer)->unk_0090
- ; r3: 0
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r12, #0x0
- str r12, [r6, #0x8c]
- str r12, [r6, #0x84]
- add r0, r6, #0x7c
- mov r5, r2
- mov r4, r3
- str r12, [r6, #0x88]
- bl FS_ConvertPathToFileID
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- add r0, r6, #0x34
- bl FS_InitFile
- add r1, r6, #0x7c
- add r0, r6, #0x34
- ldmia r1, {r1-r2}
- bl FS_OpenFileFast
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r3, #0x1
- mov r0, r6
- mov r1, r5
- mov r2, r4
- str r3, [r6, #0x30]
- bl SDATi_ReadHeaders
- cmp r0, #0x0
- ldrne r0, _020C2770 ; =UNK_021D28C0
- strne r6, [r0, #0x0]
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020C2770: .word UNK_021D28C0
-
- arm_func_start FUN_020C2774
-FUN_020C2774: ; 0x020C2774
- stmdb sp!, {r4,lr}
- bl SND_GetCurrentCommandTag
- mov r4, r0
- mov r0, #0x1
- bl SND_FlushCommand
- mov r0, r4
- bl SND_WaitForCommandProc
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C2794
-FUN_020C2794:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r0, [r5, #0x0]
- mov r1, #0x14
- mov r2, #0x4
- bl FUN_020AE638
- movs r4, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,pc}
- bl FUN_020C2818
- mov r1, r4
- add r0, r5, #0x4
- bl FUN_020ADBE8
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C27DC
-FUN_020C27DC:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- add r0, r5, #0x4
- mov r1, #0xc
- bl FUN_020ADC74
- mov r0, r5
- str r4, [r5, #0x0]
- bl FUN_020C2794
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C2818
-FUN_020C2818: ; 0x020C2818
- ldr ip, _020C2824 ; =FUN_020ADC74
- mov r1, #0x0
- bx r12
- .balign 4
-_020C2824: .word FUN_020ADC74
-
- arm_func_start FUN_020C2828
-FUN_020C2828: ; 0x020C2828
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r7, #0x0
- movs r9, r1
- mov r10, r0
- mov r6, r7
- bne _020C2850
- bl FUN_020C29C0
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-_020C2850:
- ldrh r0, [r10, #0xc]
- cmp r9, r0
- bge _020C28D8
- mov r11, r7
- add r5, r10, #0x4
- mov r4, #0x1
-_020C2868:
- mov r0, r5
- mov r1, r11
- bl FUN_020ADA84
- mov r1, r7
- mov r8, r0
- bl FUN_020ADA84
- movs r7, r0
- beq _020C28C0
-_020C2888:
- ldr r12, [r7, #0xc]
- cmp r12, #0x0
- beq _020C28AC
- ldr r1, [r7, #0x8]
- ldr r2, [r7, #0x10]
- ldr r3, [r7, #0x14]
- add r0, r7, #0x20
- blx r12
- mov r6, r4
-_020C28AC:
- mov r0, r8
- mov r1, r7
- bl FUN_020ADA84
- movs r7, r0
- bne _020C2888
-_020C28C0:
- mov r0, r5
- mov r1, r8
- bl FUN_020ADAB0
- ldrh r0, [r10, #0xc]
- cmp r9, r0
- blt _020C2868
-_020C28D8:
- ldr r0, [r10, #0x0]
- mov r1, r9
- bl FUN_020AE554
- cmp r6, #0x0
- beq _020C28F0
- bl FUN_020C2774
-_020C28F0:
- ldrh r1, [r10, #0xc]
- ldr r0, [r10, #0x0]
- bl FUN_020AE5B0
- mov r0, r10
- bl FUN_020C2794
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020C290C
-FUN_020C290C: ; 0x020C290C
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldrh r1, [r4, #0xc]
- ldr r0, [r4, #0x0]
- bl FUN_020AE5B0
- cmp r0, #0x0
- mvneq r0, #0x0
- ldmeqia sp!, {r4,pc}
- mov r0, r4
- bl FUN_020C2794
- cmp r0, #0x0
- ldrneh r0, [r4, #0xc]
- subne r0, r0, #0x1
- ldmneia sp!, {r4,pc}
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- bl FUN_020AE554
- mvn r0, #0x0
- ldmia sp!, {r4,pc}
-
- arm_func_start SDATi_AllocAndInitChunk
-SDATi_AllocAndInitChunk: ; 0x020C2958
- stmdb sp!, {r4-r8,lr}
- mov r7, r1
- mov r8, r0
- add r0, r7, #0x1f
- bic r1, r0, #0x1f
- mov r6, r2
- ldr r0, [r8, #0x0]
- add r1, r1, #0x20
- mov r2, #0x20
- mov r5, r3
- bl FUN_020AE638 // some allocator?
- movs r4, r0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- add r0, r8, #0x4
- mov r1, #0x0
- bl FUN_020ADA84
- str r7, [r4, #0x8]
- str r6, [r4, #0xc]
- ldr r2, [sp, #0x18]
- str r5, [r4, #0x10]
- mov r1, r4
- str r2, [r4, #0x14]
- bl FUN_020ADBE8
- add r0, r4, #0x20
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020C29C0
-FUN_020C29C0:
- stmdb sp!, {r4-r10,lr}
- mov r8, r0
- mov r5, #0x0
- mov r1, r5
- add r0, r8, #0x4
- bl FUN_020ADA84
- movs r7, r0
- beq _020C2A58
- add r9, r8, #0x4
- mov r10, #0x1
- mov r4, r5
-_020C29EC:
- mov r0, r7
- mov r1, r4
- bl FUN_020ADA84
- movs r6, r0
- beq _020C2A38
-_020C2A00:
- ldr r12, [r6, #0xc]
- cmp r12, #0x0
- beq _020C2A24
- ldr r1, [r6, #0x8]
- ldr r2, [r6, #0x10]
- ldr r3, [r6, #0x14]
- add r0, r6, #0x20
- blx r12
- mov r5, r10
-_020C2A24:
- mov r0, r7
- mov r1, r6
- bl FUN_020ADA84
- movs r6, r0
- bne _020C2A00
-_020C2A38:
- mov r0, r9
- mov r1, r7
- bl FUN_020ADAB0
- mov r0, r9
- mov r1, r4
- bl FUN_020ADA84
- movs r7, r0
- bne _020C29EC
-_020C2A58:
- ldr r0, [r8, #0x0]
- mov r1, #0x3
- bl FUN_020AE600
- cmp r5, #0x0
- beq _020C2A70
- bl FUN_020C2774
-_020C2A70:
- mov r0, r8
- bl FUN_020C2794
- ldmia sp!, {r4-r10,pc}
-
- arm_func_start FUN_020C2A7C
-FUN_020C2A7C: ; 0x020C2A7C
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020C29C0
- ldr r0, [r4, #0x0]
- bl thunk_FUN_020adc8c_2
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C2A94
-FUN_020C2A94:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- add r2, r0, #0x3
- add r0, r0, r1
- bic r5, r2, #0x3
- cmp r5, r0
- addhi sp, sp, #0x4
- movhi r0, #0x0
- ldmhiia sp!, {r4-r5,pc}
- sub r1, r0, r5
- cmp r1, #0x10
- addcc sp, sp, #0x4
- movcc r0, #0x0
- ldmccia sp!, {r4-r5,pc}
- add r0, r5, #0x10
- sub r1, r1, #0x10
- mov r2, #0x0
- bl FUN_020AE684
- movs r4, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,pc}
- mov r0, r5
- mov r1, r4
- bl FUN_020C27DC
- cmp r0, #0x0
- addne sp, sp, #0x4
- movne r0, r5
- ldmneia sp!, {r4-r5,pc}
- mov r0, r4
- bl thunk_FUN_020adc8c_2
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C2B1C
-FUN_020C2B1C:
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x20
- mov r8, r0
- add r0, sp, #0x8
- mov r7, r1
- mov r6, r2
- mov r5, r3
- ldr r4, [sp, #0x40]
- bl SND_GetFirstInstDataPos
- ldr r1, [sp, #0x8]
- ldr r0, [sp, #0xc]
- str r1, [sp, #0x0]
- str r0, [sp, #0x4]
- cmp r7, #0x0
- add r2, sp, #0x0
- addeq sp, sp, #0x20
- moveq r0, #0x0
- ldmeqia sp!, {r4-r10,pc}
- add r1, sp, #0x10
- mov r0, r7
- bl SND_GetNextInstData
- cmp r0, #0x0
- beq _020C2BD4
- add r10, sp, #0x10
- add r9, sp, #0x0
-_020C2B80:
- ldrb r0, [sp, #0x10]
- cmp r0, #0x1
- bne _020C2BBC
- ldrh r0, [sp, #0x14]
- cmp r6, r0
- bne _020C2BBC
- ldrh r1, [sp, #0x12]
- mov r0, r8
- mov r2, r5
- mov r3, r4
- bl FUN_020C2BE0
- cmp r0, #0x0
- addeq sp, sp, #0x20
- moveq r0, #0x0
- ldmeqia sp!, {r4-r10,pc}
-_020C2BBC:
- mov r0, r7
- mov r1, r10
- mov r2, r9
- bl SND_GetNextInstData
- cmp r0, #0x0
- bne _020C2B80
-_020C2BD4:
- mov r0, #0x1
- add sp, sp, #0x20
- ldmia sp!, {r4-r10,pc}
-
- arm_func_start FUN_020C2BE0
-FUN_020C2BE0:
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl SND_GetWaveDataAddress
- cmp r0, #0x0
- addne sp, sp, #0x4
- movne r0, #0x1
- ldmneia sp!, {r4-r9,pc}
- mov r0, r7
- bl SND_GetWaveDataCount
- ldr r1, [r7, #0x38]
- sub r0, r0, #0x1
- add r1, r1, r6
- add r1, r7, r1, lsl #0x2
- cmp r6, r0
- ldrcc r0, [r1, #0x40]
- ldr r8, [r1, #0x3c]
- ldrcs r0, [r7, #0x8]
- cmp r4, #0x0
- sub r9, r0, r8
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- ldr r2, _020C2CBC ; =FUN_020C2CC0
- mov r0, r4
- mov r3, r7
- add r1, r9, #0x20
- str r6, [sp, #0x0]
- bl SDATi_AllocAndInitChunk
- movs r4, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- mov r0, r5
- mov r1, r4
- mov r2, r9
- mov r3, r8
- bl FUN_020C2104
- cmp r9, r0
- addne sp, sp, #0x4
- movne r0, #0x0
- ldmneia sp!, {r4-r9,pc}
- mov r0, r4
- mov r1, r9
- bl DC_StoreRange
- mov r0, r7
- mov r1, r6
- mov r2, r4
- bl SND_SetWaveDataAddress
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020C2CBC: .word FUN_020C2CC0
-
- arm_func_start FUN_020C2CC0
-FUN_020C2CC0: ; 0x020C2CC0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r2
- mov r7, r0
- mov r4, r3
- mov r6, r1
- mov r0, r5
- mov r1, r4
- bl SND_GetWaveDataAddress
- cmp r7, r0
- bne _020C2CFC
- mov r0, r5
- mov r1, r4
- mov r2, #0x0
- bl SND_SetWaveDataAddress
-_020C2CFC:
- mov r0, r7
- add r1, r7, r6
- bl SND_InvalidateWaveData
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020C2D10
-FUN_020C2D10: ; 0x020C2D10
- stmdb sp!, {r4,lr}
- mov r1, r2
- mov r4, r0
- mov r2, r3
- bl FUN_020C2DD0
- mov r0, r4
- bl SND_DestroyWaveArc
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C2D30
-FUN_020C2D30: ; 0x020C2D30
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r1, r2
- mov r5, r0
- mov r2, r3
- bl FUN_020C2DD0
- mov r0, r5
- add r1, r5, r4
- bl SND_InvalidateWaveData
- mov r0, r5
- bl SND_DestroyWaveArc
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C2D68
-FUN_020C2D68: ; 0x020C2D68
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r1, r2
- mov r5, r0
- mov r2, r3
- bl FUN_020C2DD0
- mov r0, r5
- add r1, r5, r4
- bl SND_InvalidateBankData
- mov r0, r5
- bl SND_DestroyBank
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C2DA0
-FUN_020C2DA0: ; 0x020C2DA0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r1, r2
- mov r5, r0
- mov r2, r3
- bl FUN_020C2DD0
- mov r0, r5
- add r1, r5, r4
- bl SND_InvalidateSeqData
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C2DD0
-FUN_020C2DD0: ; 0x020C2DD0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- movs r5, r1
- mov r7, r0
- mov r6, r2
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- bl OS_DisableInterrupts
- mov r4, r0
- mov r0, r5
- bl FUN_020C242C
- mov r5, r0
- mov r0, r6
- bl FUN_020C20DC
- cmp r7, r0
- bne _020C2E1C
- mov r0, r6
- mov r1, #0x0
- bl FUN_020C20C0
-_020C2E1C:
- mov r0, r5
- bl FUN_020C242C
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020C2E34
-FUN_020C2E34: ; 0x020C2E34
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r9, r0
- mov r8, r1
- mov r7, r2
- bl FUN_020C20DC
- movs r6, r0
- bne _020C2F40
- ldr r1, _020C2F4C ; =UNK_021D28C4
- mov r0, r9
- mov r2, #0x3c
- mov r3, #0x0
- bl FUN_020C2104
- cmp r0, #0x3c
- addne sp, sp, #0x4
- movne r0, #0x0
- ldmneia sp!, {r4-r9,pc}
- ldr r0, _020C2F4C ; =UNK_021D28C4
- cmp r8, #0x0
- ldr r0, [r0, #0x38]
- addeq sp, sp, #0x4
- mov r4, r0, lsl #0x2
- mov r0, r4, lsl #0x1
- add r5, r0, #0x3c
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- cmp r7, #0x0
- moveq r3, #0x0
- beq _020C2EB0
- bl FUN_020C241C
- mov r3, r0
-_020C2EB0:
- ldr r2, _020C2F50 ; =FUN_020C2D10
- mov r0, r8
- add r1, r5, #0x20
- str r9, [sp, #0x0]
- bl SDATi_AllocAndInitChunk
- movs r6, r0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- mov r0, r9
- mov r1, r6
- add r2, r4, #0x3c
- mov r3, #0x0
- bl FUN_020C2104
- add r1, r4, #0x3c
- cmp r0, r1
- addne sp, sp, #0x4
- movne r0, #0x0
- ldmneia sp!, {r4-r9,pc}
- ldr r1, [r6, #0x38]
- add r0, r6, #0x3c
- mov r2, r4
- add r1, r0, r1, lsl #0x2
- bl MI_CpuCopy8
- mov r2, r4
- add r0, r6, #0x3c
- mov r1, #0x0
- bl MI_CpuFill8
- mov r0, r6
- mov r1, r5
- bl DC_StoreRange
- cmp r7, #0x0
- beq _020C2F40
- mov r0, r9
- mov r1, r6
- bl FUN_020C20C0
-_020C2F40:
- mov r0, r6
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020C2F4C: .word UNK_021D28C4
-_020C2F50: .word FUN_020C2D10
-
- arm_func_start FUN_020C2F54
-FUN_020C2F54:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl FUN_020C20DC
- movs r4, r0
- bne _020C2FBC
- cmp r5, #0x0
- moveq r2, #0x0
- beq _020C2F88
- bl FUN_020C241C
- mov r2, r0
-_020C2F88:
- ldr r1, _020C2FC8 ; =FUN_020C2D30
- mov r0, r7
- mov r3, r7
- str r6, [sp, #0x0]
- bl FUN_020C3134
- mov r4, r0
- cmp r5, #0x0
- beq _020C2FBC
- cmp r4, #0x0
- beq _020C2FBC
- mov r0, r7
- mov r1, r4
- bl FUN_020C20C0
-_020C2FBC:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C2FC8: .word FUN_020C2D30
-
- arm_func_start FUN_020C2FCC
-FUN_020C2FCC: ; 0x020C2FCC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl FUN_020C20DC
- movs r4, r0
- bne _020C3034
- cmp r5, #0x0
- moveq r2, #0x0
- beq _020C3000
- bl FUN_020C241C
- mov r2, r0
-_020C3000:
- ldr r1, _020C3040 ; =FUN_020C2D68
- mov r0, r7
- mov r3, r7
- str r6, [sp, #0x0]
- bl FUN_020C3134
- mov r4, r0
- cmp r5, #0x0
- beq _020C3034
- cmp r4, #0x0
- beq _020C3034
- mov r0, r7
- mov r1, r4
- bl FUN_020C20C0
-_020C3034:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C3040: .word FUN_020C2D68
-
- arm_func_start FUN_020C3044
-FUN_020C3044:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl FUN_020C20DC
- movs r4, r0
- bne _020C30AC
- cmp r5, #0x0
- moveq r2, #0x0
- beq _020C3078
- bl FUN_020C241C
- mov r2, r0
-_020C3078:
- ldr r1, _020C30B8 ; =FUN_020C2DA0
- mov r0, r7
- mov r3, r7
- str r6, [sp, #0x0]
- bl FUN_020C3134
- mov r4, r0
- cmp r5, #0x0
- beq _020C30AC
- cmp r4, #0x0
- beq _020C30AC
- mov r0, r7
- mov r1, r4
- bl FUN_020C20C0
-_020C30AC:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C30B8: .word FUN_020C2DA0
-
- arm_func_start FUN_020C30BC
-FUN_020C30BC:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- mov r5, r2
- bl FUN_020C20DC
- movs r4, r0
- bne _020C3124
- cmp r5, #0x0
- moveq r2, #0x0
- beq _020C30F0
- bl FUN_020C241C
- mov r2, r0
-_020C30F0:
- ldr r1, _020C3130 ; =FUN_020C2DA0
- mov r0, r7
- mov r3, r7
- str r6, [sp, #0x0]
- bl FUN_020C3134
- mov r4, r0
- cmp r5, #0x0
- beq _020C3124
- cmp r4, #0x0
- beq _020C3124
- mov r0, r7
- mov r1, r4
- bl FUN_020C20C0
-_020C3124:
- mov r0, r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C3130: .word FUN_020C2DA0
-
- arm_func_start FUN_020C3134
-FUN_020C3134: ; 0x020C3134
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- mov r8, r0
- mov r7, r1
- mov r6, r2
- mov r4, r3
- bl FUN_020C217C
- movs r5, r0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- ldr r0, [sp, #0x20]
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- mov r2, r7
- mov r3, r6
- add r1, r5, #0x20
- str r4, [sp, #0x0]
- bl SDATi_AllocAndInitChunk
- movs r4, r0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- mov r0, r8
- mov r1, r4
- mov r2, r5
- mov r3, #0x0
- bl FUN_020C2104
- cmp r5, r0
- addne sp, sp, #0x8
- movne r0, #0x0
- ldmneia sp!, {r4-r8,pc}
- mov r0, r4
- mov r1, r5
- bl DC_StoreRange
- mov r0, r4
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020C31D4
-FUN_020C31D4:
- stmdb sp!, {r4-r6,lr}
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl FUN_020C226C
- cmp r0, #0x0
- moveq r0, #0x5
- ldmeqia sp!, {r4-r6,pc}
- ands r1, r6, #0x4
- beq _020C324C
- ldrb r1, [r0, #0x3]
- ands r1, r1, #0x1
- beq _020C3224
- ldr r0, [r0, #0x0]
- mov r1, r5
- mov r0, r0, lsl #0x8
- mov r2, r4
- mov r0, r0, lsr #0x8
- bl FUN_020C2E34
- b _020C323C
-_020C3224:
- ldr r0, [r0, #0x0]
- mov r1, r5
- mov r0, r0, lsl #0x8
- mov r2, r4
- mov r0, r0, lsr #0x8
- bl FUN_020C2F54
-_020C323C:
- cmp r0, #0x0
- bne _020C325C
- mov r0, #0x9
- ldmia sp!, {r4-r6,pc}
-_020C324C:
- ldr r0, [r0, #0x0]
- mov r0, r0, lsl #0x8
- mov r0, r0, lsr #0x8
- bl FUN_020C20DC
-_020C325C:
- ldr r1, [sp, #0x10]
- cmp r1, #0x0
- strne r0, [r1, #0x0]
- mov r0, #0x0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020C3270
-FUN_020C3270:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r10, r1
- mov r9, r2
- mov r11, r3
- bl FUN_020C22D0
- movs r8, r0
- addeq sp, sp, #0xc
- moveq r0, #0x4
- ldmeqia sp!, {r4-r11,pc}
- ands r0, r10, #0x2
- beq _020C32C4
- ldr r0, [r8, #0x0]
- mov r1, r9
- mov r2, r11
- bl FUN_020C2FCC
- movs r7, r0
- bne _020C32D0
- add sp, sp, #0xc
- mov r0, #0x8
- ldmia sp!, {r4-r11,pc}
-_020C32C4:
- ldr r0, [r8, #0x0]
- bl FUN_020C20DC
- mov r7, r0
-_020C32D0:
- and r5, r10, #0x4
- mov r6, #0x0
-_020C32D8:
- add r0, r8, r6, lsl #0x1
- ldrh r0, [r0, #0x4]
- ldr r1, _020C33B4 ; =0x0000FFFF
- cmp r0, r1
- beq _020C3390
- bl FUN_020C226C
- movs r4, r0
- addeq sp, sp, #0xc
- moveq r0, #0x5
- ldmeqia sp!, {r4-r11,pc}
- add r0, sp, #0x4
- str r0, [sp, #0x0]
- add r0, r8, r6, lsl #0x1
- ldrh r0, [r0, #0x4]
- mov r1, r10
- mov r2, r9
- mov r3, r11
- bl FUN_020C31D4
- cmp r0, #0x0
- addne sp, sp, #0xc
- ldmneia sp!, {r4-r11,pc}
- ldrb r0, [r4, #0x3]
- ands r0, r0, #0x1
- beq _020C3370
- cmp r5, #0x0
- beq _020C3370
- str r9, [sp, #0x0]
- ldr r1, [r4, #0x0]
- ldr r0, [sp, #0x4]
- mov r3, r1, lsl #0x8
- mov r1, r7
- mov r2, r6
- mov r3, r3, lsr #0x8
- bl FUN_020C2B1C
- cmp r0, #0x0
- addeq sp, sp, #0xc
- moveq r0, #0x9
- ldmeqia sp!, {r4-r11,pc}
-_020C3370:
- cmp r7, #0x0
- beq _020C3390
- ldr r2, [sp, #0x4]
- cmp r2, #0x0
- beq _020C3390
- mov r0, r7
- mov r1, r6
- bl SND_AssignWaveArc
-_020C3390:
- add r6, r6, #0x1
- cmp r6, #0x4
- blt _020C32D8
- ldr r0, [sp, #0x30]
- cmp r0, #0x0
- strne r7, [r0, #0x0]
- mov r0, #0x0
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020C33B4: .word 0x0000FFFF
-
- arm_func_start FUN_020C33B8
-FUN_020C33B8:
- stmdb sp!, {r4-r6,lr}
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl FUN_020C2334
- cmp r0, #0x0
- moveq r0, #0x3
- ldmeqia sp!, {r4-r6,pc}
- ands r1, r6, #0x8
- beq _020C3400
- ldr r0, [r0, #0x0]
- mov r1, r5
- mov r2, r4
- bl FUN_020C3044
- cmp r0, #0x0
- bne _020C3408
- mov r0, #0x7
- ldmia sp!, {r4-r6,pc}
-_020C3400:
- ldr r0, [r0, #0x0]
- bl FUN_020C20DC
-_020C3408:
- ldr r1, [sp, #0x10]
- cmp r1, #0x0
- strne r0, [r1, #0x0]
- mov r0, #0x0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020C341C
-FUN_020C341C:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r1
- mov r6, r2
- mov r5, r3
- bl FUN_020C2398
- movs r4, r0
- addeq sp, sp, #0x4
- moveq r0, #0x2
- ldmeqia sp!, {r4-r7,pc}
- mov r0, #0x0
- str r0, [sp, #0x0]
- ldrh r0, [r4, #0x4]
- mov r1, r7
- mov r2, r6
- mov r3, r5
- bl FUN_020C3270
- cmp r0, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r7,pc}
- ands r0, r7, #0x1
- beq _020C3498
- ldr r0, [r4, #0x0]
- mov r1, r6
- mov r2, r5
- bl FUN_020C30BC
- cmp r0, #0x0
- bne _020C34A0
- add sp, sp, #0x4
- mov r0, #0x6
- ldmia sp!, {r4-r7,pc}
-_020C3498:
- ldr r0, [r4, #0x0]
- bl FUN_020C20DC
-_020C34A0:
- ldr r1, [sp, #0x18]
- cmp r1, #0x0
- strne r0, [r1, #0x0]
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020C34B8
-FUN_020C34B8:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r9, r1
- bl FUN_020C21A4
- movs r8, r0
- addeq sp, sp, #0xc
- moveq r0, #0x1
- ldmeqia sp!, {r4-r11,pc}
- ldr r0, [r8, #0x0]
- mov r7, #0x0
- cmp r0, #0x0
- bls _020C35D4
- add r6, r8, #0x4
- str r7, [sp, #0x4]
- mov r11, r7
- mov r10, r7
- mov r5, r7
- mov r4, #0x1
-_020C3500:
- ldrb r0, [r6, #0x0]
- cmp r0, #0x3
- addls pc, pc, r0, lsl #0x2
- b _020C35C0
- ; Jump table
- b _020C3520 ; case 0
- b _020C3570 ; case 1
- b _020C3598 ; case 2
- b _020C3548 ; case 3
-_020C3520:
- str r5, [sp, #0x0]
- ldrb r1, [r6, #0x1]
- ldr r0, [r6, #0x4]
- mov r2, r9
- mov r3, r4
- bl FUN_020C341C
- cmp r0, #0x0
- beq _020C35C0
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-_020C3548:
- str r10, [sp, #0x0]
- ldrb r1, [r6, #0x1]
- ldr r0, [r6, #0x4]
- mov r2, r9
- mov r3, r4
- bl FUN_020C33B8
- cmp r0, #0x0
- beq _020C35C0
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-_020C3570:
- str r11, [sp, #0x0]
- ldrb r1, [r6, #0x1]
- ldr r0, [r6, #0x4]
- mov r2, r9
- mov r3, r4
- bl FUN_020C3270
- cmp r0, #0x0
- beq _020C35C0
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-_020C3598:
- ldr r0, [sp, #0x4]
- mov r2, r9
- str r0, [sp, #0x0]
- ldrb r1, [r6, #0x1]
- ldr r0, [r6, #0x4]
- mov r3, r4
- bl FUN_020C31D4
- cmp r0, #0x0
- addne sp, sp, #0xc
- ldmneia sp!, {r4-r11,pc}
-_020C35C0:
- ldr r0, [r8, #0x0]
- add r7, r7, #0x1
- cmp r7, r0
- add r6, r6, #0x8
- blo _020C3500
-_020C35D4:
- mov r0, #0x0
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020C35E0
-FUN_020C35E0: ; 0x020C35E0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r12, #0x0
- mov r3, #0x1
- str r12, [sp, #0x0]
- bl FUN_020C341C
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C360C
-FUN_020C360C: ; 0x020C360C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r12, #0x0
- mov r1, #0xff
- mov r3, #0x1
- str r12, [sp, #0x0]
- bl FUN_020C31D4
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C3640
-FUN_020C3640: ; 0x020C3640
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r12, #0x0
- mov r1, #0xff
- mov r3, #0x1
- str r12, [sp, #0x0]
- bl FUN_020C3270
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C3674
-FUN_020C3674: ; 0x020C3674
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r1
- mov r12, #0x0
- mov r1, #0xff
- mov r3, #0x1
- str r12, [sp, #0x0]
- bl FUN_020C341C
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C36A8
-FUN_020C36A8: ; 0x020C36A8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl FUN_020C34B8
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C36C8
-FUN_020C36C8: ; 0x020C36C8
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- mov r7, r2
- mov r2, r3
- ldr r6, [sp, #0x20]
- mov r4, r0
- mov r8, r1
- bl FUN_020C0AF4
- movs r5, r0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- mov r0, r8
- mov r1, r5
- bl FUN_020C09B0
- add r12, sp, #0x4
- mov r2, r0
- mov r0, r7
- mov r1, #0x6
- mov r3, #0x0
- str r12, [sp, #0x0]
- bl FUN_020C3270
- cmp r0, #0x0
- beq _020C373C
- mov r0, r5
- bl thunk_FUN_020c077c
- add sp, sp, #0x8
- mov r0, #0x0
- ldmia sp!, {r4-r8,pc}
-_020C373C:
- ldr r12, [sp, #0x24]
- ldr r2, [r6, #0x0]
- ldr r1, [r12, #0x18]
- ldr r3, [sp, #0x4]
- mov r0, r5
- add r1, r12, r1
- bl FUN_020C0A90
- ldrb r1, [r6, #0x6]
- mov r0, r4
- bl FUN_020C0F30
- ldrb r1, [r6, #0x7]
- mov r0, r4
- bl FUN_020C0ECC
- ldr r1, [sp, #0x28]
- ldr r2, [sp, #0x2c]
- mov r0, r4
- bl FUN_020C0E38
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020C378C
-FUN_020C378C: ; 0x020C378C
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x10
- mov r8, r2
- mov r2, r3
- ldr r5, [sp, #0x28]
- mov r6, r0
- mov r7, r1
- bl FUN_020C0AF4
- movs r4, r0
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- mov r0, r7
- mov r1, r4
- bl FUN_020C09B0
- mov r7, r0
- add r12, sp, #0x8
- mov r0, r8
- mov r2, r7
- mov r1, #0x6
- mov r3, #0x0
- str r12, [sp, #0x0]
- bl FUN_020C3270
- cmp r0, #0x0
- beq _020C3804
- mov r0, r4
- bl thunk_FUN_020c077c
- add sp, sp, #0x10
- mov r0, #0x0
- ldmia sp!, {r4-r8,pc}
-_020C3804:
- ldr r0, [sp, #0x2c]
- add r12, sp, #0x4
- mov r2, r7
- mov r1, #0x1
- mov r3, #0x0
- str r12, [sp, #0x0]
- bl FUN_020C341C
- cmp r0, #0x0
- beq _020C383C
- mov r0, r4
- bl thunk_FUN_020c077c
- add sp, sp, #0x10
- mov r0, #0x0
- ldmia sp!, {r4-r8,pc}
-_020C383C:
- ldr r2, [sp, #0x4]
- ldr r3, [sp, #0x8]
- ldr r1, [r2, #0x18]
- mov r0, r4
- add r1, r2, r1
- mov r2, #0x0
- bl FUN_020C0A90
- ldrb r1, [r5, #0x6]
- mov r0, r6
- bl FUN_020C0F30
- ldrb r1, [r5, #0x7]
- mov r0, r6
- bl FUN_020C0ECC
- ldr r1, [sp, #0x2c]
- mov r0, r6
- bl FUN_020C0E60
- mov r0, #0x1
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020C3888
-FUN_020C3888: ; 0x020C3888
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x14
- mov r6, r1
- mov r7, r0
- mov r0, r6
- mov r5, r2
- bl FUN_020C2334
- cmp r0, #0x0
- addeq sp, sp, #0x14
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,pc}
- ldr r0, [r0, #0x0]
- bl FUN_020C20DC
- movs r4, r0
- addeq sp, sp, #0x14
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,pc}
- mov r1, r5
- bl FUN_020C3D9C
- cmp r0, #0x0
- addeq sp, sp, #0x14
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,pc}
- str r0, [sp, #0x0]
- str r4, [sp, #0x4]
- str r6, [sp, #0x8]
- str r5, [sp, #0xc]
- ldrb r1, [r0, #0x9]
- ldrh r2, [r0, #0x4]
- ldrb r3, [r0, #0x8]
- mov r0, r7
- bl FUN_020C36C8
- add sp, sp, #0x14
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020C3910
-FUN_020C3910: ; 0x020C3910
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- mov r7, r0
- ldr r0, [sp, #0x20]
- mov r6, r1
- mov r5, r2
- mov r4, r3
- bl FUN_020C2398
- cmp r0, #0x0
- addeq sp, sp, #0xc
- moveq r0, #0x0
- ldmeqia sp!, {r4-r7,pc}
- cmp r4, #0x0
- ldrltb r4, [r0, #0x8]
- cmp r5, #0x0
- ldrlth r5, [r0, #0x4]
- cmp r6, #0x0
- ldrltb r6, [r0, #0x9]
- ldr r12, [sp, #0x20]
- mov r2, r5
- str r0, [sp, #0x0]
- mov r0, r7
- mov r1, r6
- mov r3, r4
- str r12, [sp, #0x4]
- bl FUN_020C378C
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020C3980
-FUN_020C3980: ; 0x020C3980
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r4, r1
- mov r5, r0
- mov r0, r4
- bl FUN_020C2398
- cmp r0, #0x0
- addeq sp, sp, #0xc
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,pc}
- str r0, [sp, #0x0]
- str r4, [sp, #0x4]
- ldrb r1, [r0, #0x9]
- ldrh r2, [r0, #0x4]
- ldrb r3, [r0, #0x8]
- mov r0, r5
- bl FUN_020C378C
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020C39CC
-FUN_020C39CC: ; 0x020C39CC
- stmdb sp!, {r4-r8,lr}
- mov r6, r0
- bl FUN_020C241C
- mov r5, #0x0
- mov r7, r5
-_020C39E0:
- mov r0, r5
- bl FUN_020C2208
- movs r4, r0
- beq _020C3A58
- ldrb r1, [r4, #0x0]
- mov r0, r5
- bl FUN_020C1160
- ldrh r1, [r4, #0x2]
- mov r0, r5
- bl FUN_020C1148
- ldr r0, [r4, #0x4]
- cmp r0, #0x0
- beq _020C3A58
- cmp r6, #0x0
- beq _020C3A58
- ldrb r0, [r4, #0x0]
- mov r8, r7
- cmp r0, #0x0
- ble _020C3A58
-_020C3A2C:
- ldr r2, [r4, #0x4]
- mov r0, r5
- mov r1, r6
- bl FUN_020C10B4
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r8,pc}
- ldrb r0, [r4, #0x0]
- add r8, r8, #0x1
- cmp r8, r0
- blt _020C3A2C
-_020C3A58:
- add r5, r5, #0x1
- cmp r5, #0x20
- blt _020C39E0
- mov r0, #0x1
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020C3A6C
-FUN_020C3A6C: ; 0x020C3A6C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- bl OS_DisableInterrupts
- mov r4, r0
- ldr r0, _020C3A9C ; =UNK_021D2904
- mov r1, r5
- bl FUN_020ADBE8
- mov r0, r4
- bl OS_RestoreInterrupts
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020C3A9C: .word UNK_021D2904
-
- arm_func_start FUN_020C3AA0
-FUN_020C3AA0: ; 0x020C3AA0
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- mov r7, r1
- bl OS_DisableInterrupts
- mov r6, r0
- mov r0, r8
- mov r1, #0x0
- bl FUN_020ADA98
- movs r5, r0
- beq _020C3B04
-_020C3AC8:
- mov r0, r8
- mov r1, r5
- bl FUN_020ADA98
- ldr r1, [r5, #0x8]
- mov r4, r0
- cmp r1, r7
- bne _020C3AF8
- mov r0, r8
- mov r1, r5
- bl FUN_020ADAB0
- mov r0, r5
- bl FUN_020C3A6C
-_020C3AF8:
- mov r5, r4
- cmp r4, #0x0
- bne _020C3AC8
-_020C3B04:
- mov r0, r6
- bl OS_RestoreInterrupts
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020C3B10
-FUN_020C3B10: ; 0x020C3B10
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, [r0, #0x120]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- sub r1, r1, #0x1
- str r1, [r0, #0x120]
- ldr r1, [r0, #0x120]
- cmp r1, #0x0
- addne sp, sp, #0x4
- ldmneia sp!, {pc}
- bl FUN_020C1674
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020C3B4C
-FUN_020C3B4C: ; 0x020C3B4C
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r1, [r4, #0x110]
- mov r1, r1, lsl #0x1f
- movs r1, r1, asr #0x1f
- ldmeqia sp!, {r4,pc}
- bl FUN_020C3B10
- ldr r1, [r4, #0x164]
- mov r0, r4
- blx r1
- ldr r0, _020C3BA8 ; =UNK_021D2DF0
- mov r1, r4
- bl FUN_020C3AA0
- ldr r0, _020C3BAC ; =UNK_021D2900
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020C3B9C
- mov r1, r4
- add r0, r0, #0x4e0
- bl FUN_020C3AA0
-_020C3B9C:
- mov r0, r4
- bl FUN_020C3C4C
- ldmia sp!, {r4,pc}
- .balign 4
-_020C3BA8: .word UNK_021D2DF0
-_020C3BAC: .word UNK_021D2900
-
- arm_func_start FUN_020C3BB0
-FUN_020C3BB0: ; 0x020C3BB0
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, _020C3C40 ; =UNK_021D2DD8
- bl OS_LockMutex
- ldr r0, _020C3C44 ; =UNK_021D2900
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- beq _020C3BDC
- ldr r0, _020C3C48 ; =0x000004C8
- add r0, r1, r0
- bl OS_LockMutex
-_020C3BDC:
- ldr r0, [r4, #0x110]
- mov r0, r0, lsl #0x1e
- movs r0, r0, asr #0x1f
- beq _020C3BF4
- mov r0, r4
- bl FUN_020C1430
-_020C3BF4:
- ldr r0, [r4, #0x110]
- mov r0, r0, lsl #0x1f
- movs r0, r0, asr #0x1f
- beq _020C3C10
- ldr r1, [r4, #0x16c]
- mov r0, r4
- blx r1
-_020C3C10:
- mov r0, r4
- bl FUN_020C3B4C
- ldr r0, _020C3C40 ; =UNK_021D2DD8
- bl OS_UnlockMutex
- ldr r0, _020C3C44 ; =UNK_021D2900
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r0, _020C3C48 ; =0x000004C8
- add r0, r1, r0
- bl OS_UnlockMutex
- ldmia sp!, {r4,pc}
- .balign 4
-_020C3C40: .word UNK_021D2DD8
-_020C3C44: .word UNK_021D2900
-_020C3C48: .word 0x000004C8
-
- arm_func_start FUN_020C3C4C
-FUN_020C3C4C: ; 0x020C3C4C
- ldr r2, [r0, #0x14c]
- cmp r2, #0x0
- movne r1, #0x0
- strne r1, [r2, #0x0]
- strne r1, [r0, #0x14c]
- ldr r1, [r0, #0x110]
- bic r1, r1, #0x1
- str r1, [r0, #0x110]
- ldr r1, [r0, #0x110]
- bic r1, r1, #0x4
- str r1, [r0, #0x110]
- ldr r1, [r0, #0x110]
- bic r1, r1, #0x2
- str r1, [r0, #0x110]
- bx lr
-
- arm_func_start FUN_020C3C88
-FUN_020C3C88:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r5, _020C3D94 ; =UNK_021D2DFC
- mov r7, #0x0
- ldr r4, _020C3D98 ; =SNDi_DecibelTable
-_020C3C9C:
- ldr r1, [r5, #0x110]
- mov r0, r1, lsl #0x1f
- movs r0, r0, asr #0x1f
- beq _020C3D7C
- ldr r0, [r5, #0x114]
- cmp r0, #0x0
- bne _020C3CC4
- mov r0, r5
- bl FUN_020C3BB0
- b _020C3D7C
-_020C3CC4:
- mov r0, r1, lsl #0x1d
- movs r0, r0, asr #0x1f
- beq _020C3CFC
- ldr r0, [r5, #0x118]
- cmp r0, #0x0
- beq _020C3CFC
- mov r0, r5
- bl FUN_020C1458
- ldr r0, [r5, #0x110]
- orr r0, r0, #0x2
- str r0, [r5, #0x110]
- ldr r0, [r5, #0x110]
- bic r0, r0, #0x4
- str r0, [r5, #0x110]
-_020C3CFC:
- ldr r0, [r5, #0x110]
- mov r0, r0, lsl #0x1e
- movs r0, r0, asr #0x1f
- beq _020C3D7C
- add r0, r5, #0xe8
- bl FUN_020C3DF4
- ldr r1, [r5, #0x154]
- add r0, r5, #0xe8
- mov r1, r1, lsl #0x1
- ldrsh r6, [r4, r1]
- bl FUN_020C3E0C
- mov r0, r0, asr #0x8
- mov r0, r0, lsl #0x1
- ldrsh r1, [r4, r0]
- ldr r0, [r5, #0x158]
- add r6, r1, r6
- cmp r6, r0
- beq _020C3D54
- mov r0, r5
- mov r1, r6
- bl FUN_020C13C4
- str r6, [r5, #0x158]
-_020C3D54:
- ldr r0, [r5, #0x110]
- mov r0, r0, lsl #0x1c
- movs r0, r0, asr #0x1f
- beq _020C3D7C
- add r0, r5, #0xe8
- bl FUN_020C3DDC
- cmp r0, #0x0
- beq _020C3D7C
- mov r0, r5
- bl FUN_020C3BB0
-_020C3D7C:
- add r7, r7, #0x1
- cmp r7, #0x4
- add r5, r5, #0x170
- blt _020C3C9C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020C3D94: .word UNK_021D2DFC
-_020C3D98: .word SNDi_DecibelTable
-
- arm_func_start FUN_020C3D9C
-FUN_020C3D9C:
- cmp r1, #0x0
- movlt r0, #0x0
- bxlt lr
- ldr r2, [r0, #0x1c]
- cmp r1, r2
- movcs r0, #0x0
- bxcs lr
- mov r2, #0xc
- mul r2, r1, r2
- add r3, r0, #0x20
- ldr r1, [r3, r2]
- mvn r0, #0x0
- cmp r1, r0
- add r0, r3, r2
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020C3DDC
-FUN_020C3DDC:
- ldr r1, [r0, #0x8]
- ldr r0, [r0, #0xc]
- cmp r1, r0
- movge r0, #0x1
- movlt r0, #0x0
- bx lr
-
- arm_func_start FUN_020C3DF4
-FUN_020C3DF4: ; 0x020C3DF4
- ldr r2, [r0, #0x8]
- ldr r1, [r0, #0xc]
- cmp r2, r1
- addlt r1, r2, #0x1
- strlt r1, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_020C3E0C
-FUN_020C3E0C:
- stmdb sp!, {r4,lr}
- ldr r1, [r0, #0xc]
- ldr r2, [r0, #0x8]
- cmp r2, r1
- ldrge r0, [r0, #0x4]
- ldmgeia sp!, {r4,pc}
- ldr r4, [r0, #0x0]
- ldr r0, [r0, #0x4]
- sub r0, r0, r4
- mul r0, r2, r0
- bl _s32_div_f
- add r0, r4, r0
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020C3E40
-FUN_020C3E40:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl FUN_020C3E0C
- str r0, [r6, #0x0]
- str r5, [r6, #0x4]
- str r4, [r6, #0xc]
- mov r0, #0x0
- str r0, [r6, #0x8]
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020C3E6C
-FUN_020C3E6C: ; 0x020C3E6C
- mov r2, #0x0
- str r2, [r0, #0x4]
- ldr r1, [r0, #0x4]
- str r1, [r0, #0x0]
- str r2, [r0, #0xc]
- ldr r1, [r0, #0xc]
- str r1, [r0, #0x8]
- bx lr
diff --git a/arm9/asm/unk_020040F4.s b/arm9/asm/unk_020040F4.s
index e2418c14..5e62cb80 100644
--- a/arm9/asm/unk_020040F4.s
+++ b/arm9/asm/unk_020040F4.s
@@ -922,7 +922,7 @@ _02004800:
add r0, r4, #0x0
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C0F8C
+ bl NNS_SndPlayerPause
strb r5, [r6, #0x0]
_0200480E:
pop {r4-r6, pc}
@@ -948,7 +948,7 @@ FUN_02004828: ; 0x02004828
bl FUN_02003FF4
add r1, r5, #0x0
add r2, r4, #0x0
- bl FUN_020C0EF4
+ bl NNS_SndPlayerMoveVolume
pop {r3-r5, pc}
thumb_func_start FUN_0200483C
@@ -964,7 +964,7 @@ _02004844:
_0200484A:
bl FUN_02003FF4
add r1, r4, #0x0
- bl FUN_020C0F30
+ bl NNS_SndPlayerSetInitialVolume
pop {r4, pc}
.balign 4
@@ -972,7 +972,7 @@ _0200484A:
FUN_02004858: ; 0x02004858
push {r3-r5, lr}
add r5, r1, #0x0
- bl FUN_020C23FC
+ bl NNS_SndArcGetSeqParam
cmp r5, #0x1
beq _02004868
cmp r5, #0x8
@@ -1018,7 +1018,7 @@ FUN_020048A0: ; 0x020048A0
add r1, r5, #0x0
add r3, r2, #0x0
str r4, [sp, #0x0]
- bl FUN_020C3910
+ bl NNS_SndArcPlayerStartSeqEx
pop {r3-r5, pc}
.balign 4
@@ -1030,7 +1030,7 @@ FUN_020048BC: ; 0x020048BC
bl ErrorHandling
_020048C6:
add r0, r4, #0x0
- bl FUN_020C0F50
+ bl NNS_SndPlayerCountPlayingSeqByPlayerNo
pop {r4, pc}
.balign 4
@@ -1042,7 +1042,7 @@ FUN_020048D0: ; 0x020048D0
mov r0, #0xff
pop {r3, pc}
_020048DA:
- bl FUN_020C23FC
+ bl NNS_SndArcGetSeqParam
cmp r0, #0x0
bne _020048E6
mov r0, #0xff
@@ -1054,22 +1054,22 @@ _020048E6:
thumb_func_start FUN_020048EC
FUN_020048EC: ; 0x020048EC
- ldr r3, _020048F0 ; =FUN_020C0E14
+ ldr r3, _020048F0 ; =NNS_SndPlayerGetSeqNo
bx r3
.balign 4
-_020048F0: .word FUN_020C0E14
+_020048F0: .word NNS_SndPlayerGetSeqNo
thumb_func_start FUN_020048F4
FUN_020048F4: ; 0x020048F4
push {r3, lr}
bl FUN_02004900
- bl FUN_020C22D0
+ bl NNS_SndArcGetBankInfo
pop {r3, pc}
thumb_func_start FUN_02004900
FUN_02004900: ; 0x02004900
push {r3, lr}
- bl FUN_020C23FC
+ bl NNS_SndArcGetSeqParam
cmp r0, #0x0
bne _0200490E
mov r0, #0x0
@@ -1166,7 +1166,7 @@ _020049A8:
bl FUN_02003D38
add r4, r0, #0x0
add r0, r5, #0x0
- bl FUN_020C0688
+ bl NNS_SndWaveOutAllocChannel
str r0, [r4, #0x0]
cmp r0, #0x0
bne _020049CA
@@ -1187,7 +1187,7 @@ _020049D6:
bl FUN_02003D38
add r6, r0, #0x0
add r0, r5, #0x0
- bl FUN_020C0688
+ bl NNS_SndWaveOutAllocChannel
str r0, [r6, #0x0]
cmp r0, #0x0
bne _020049F4
@@ -1230,7 +1230,7 @@ _02004A2A:
add r0, r5, #0x0
bl FUN_02004930
ldr r0, [r0, #0x0]
- bl FUN_020C0670
+ bl NNS_SndWaveOutFreeChannel
mov r0, #0x0
strb r0, [r6, #0x0]
pop {r4-r6, pc}
@@ -1244,7 +1244,7 @@ _02004A4C:
add r0, r5, #0x0
bl FUN_02004930
ldr r0, [r0, #0x0]
- bl FUN_020C0670
+ bl NNS_SndWaveOutFreeChannel
mov r0, #0x0
strb r0, [r4, #0x0]
pop {r4-r6, pc}
@@ -1276,7 +1276,7 @@ FUN_02004A6C: ; 0x02004A6C
ldr r2, [r3, #0x8]
ldr r0, [r0, #0x0]
ldr r3, [r3, #0xc]
- bl FUN_020C054C
+ bl NNS_SndWaveOutStart
add r5, r0, #0x0
bne _02004AA4
add r0, r4, #0x0
@@ -1292,7 +1292,7 @@ FUN_02004AAC: ; 0x02004AAC
push {r3, lr}
bl FUN_02004930
ldr r0, [r0, #0x0]
- bl FUN_020C0510
+ bl NNS_SndWaveOutStop
pop {r3, pc}
.balign 4
@@ -1301,7 +1301,7 @@ FUN_02004ABC: ; 0x02004ABC
push {r3, lr}
bl FUN_02004930
ldr r0, [r0, #0x0]
- bl FUN_020C03B8
+ bl NNS_SndWaveOutIsPlaying
pop {r3, pc}
.balign 4
@@ -1316,7 +1316,7 @@ _02004AD6:
bl FUN_02004930
ldr r0, [r0, #0x0]
add r1, r4, #0x0
- bl FUN_020C041C
+ bl NNS_SndWaveOutSetPan
pop {r4, pc}
thumb_func_start FUN_02004AE4
@@ -1326,7 +1326,7 @@ FUN_02004AE4: ; 0x02004AE4
bl FUN_02004930
ldr r0, [r0, #0x0]
add r1, r4, #0x0
- bl FUN_020C044C
+ bl NNS_SndWaveOutSetSpeed
pop {r4, pc}
.balign 4
@@ -1346,14 +1346,14 @@ FUN_02004AF8: ; 0x02004AF8
bl _s32_div_f
add r1, r0, #0x0
ldr r0, [r4, #0x0]
- bl FUN_020C04DC
+ bl NNS_SndWaveOutSetVolume
pop {r3-r5, pc}
_02004B20:
add r0, r4, #0x0
bl FUN_02004930
ldr r0, [r0, #0x0]
add r1, r5, #0x0
- bl FUN_020C04DC
+ bl NNS_SndWaveOutSetVolume
pop {r3-r5, pc}
thumb_func_start FUN_02004B30
@@ -1375,7 +1375,7 @@ FUN_02004B30: ; 0x02004B30
bl ErrorHandling
_02004B54:
add r0, r6, #0x0
- bl FUN_020C226C
+ bl NNS_SndArcGetWaveArcInfo
add r7, r0, #0x0
bne _02004B68
bl ErrorHandling
@@ -1386,7 +1386,7 @@ _02004B68:
ldr r0, [r7, #0x0]
lsl r0, r0, #0x8
lsr r0, r0, #0x8
- bl FUN_020C217C
+ bl NNS_SndArcGetFileSize
add r6, r0, #0x0
bne _02004B80
bl ErrorHandling
@@ -1416,7 +1416,7 @@ _02004B9C:
lsr r0, r0, #0x8
add r2, r6, #0x0
mov r3, #0x0
- bl FUN_020C2104
+ bl NNS_SndArcReadFile
mov r1, #0x0
mvn r1, r1
cmp r0, r1
@@ -1518,10 +1518,10 @@ _02004C76:
thumb_func_start FUN_02004C78
FUN_02004C78: ; 0x02004C78
- ldr r3, _02004C7C ; =FUN_020C1E58
+ ldr r3, _02004C7C ; =NNS_SndCaptureIsActive
bx r3
.balign 4
-_02004C7C: .word FUN_020C1E58
+_02004C7C: .word NNS_SndCaptureIsActive
thumb_func_start FUN_02004C80
FUN_02004C80: ; 0x02004C80
@@ -1537,23 +1537,23 @@ FUN_02004C80: ; 0x02004C80
mov r2, #0x0
lsl r3, r3, #0x6
str r4, [sp, #0x0]
- bl FUN_020C1FF0
+ bl NNS_SndCaptureStartReverb
add sp, #0x4
pop {r3-r4, pc}
thumb_func_start FUN_02004CA4
FUN_02004CA4: ; 0x02004CA4
- ldr r3, _02004CA8 ; =FUN_020C1F54
+ ldr r3, _02004CA8 ; =NNS_SndCaptureStopReverb
bx r3
.balign 4
-_02004CA8: .word FUN_020C1F54
+_02004CA8: .word NNS_SndCaptureStopReverb
thumb_func_start FUN_02004CAC
FUN_02004CAC: ; 0x02004CAC
- ldr r3, _02004CB0 ; =FUN_020C1FA4
+ ldr r3, _02004CB0 ; =NNS_SndCaptureSetReverbVolume
bx r3
.balign 4
-_02004CB0: .word FUN_020C1FA4
+_02004CB0: .word NNS_SndCaptureSetReverbVolume
thumb_func_start FUN_02004CB4
FUN_02004CB4: ; 0x02004CB4
@@ -1579,7 +1579,7 @@ FUN_02004CB4: ; 0x02004CB4
ldr r3, _02004CF8 ; =0x000055F0
add r0, r4, #0x0
mov r2, #0x0
- bl FUN_020C1EA4
+ bl NNS_SndCaptureStartEffect
add sp, #0xc
pop {r3-r4, pc}
nop
@@ -1588,10 +1588,10 @@ _02004CF8: .word 0x000055F0
thumb_func_start FUN_02004CFC
FUN_02004CFC: ; 0x02004CFC
- ldr r3, _02004D00 ; =FUN_020C1E68
+ ldr r3, _02004D00 ; =NNS_SndCaptureStopEffect
bx r3
.balign 4
-_02004D00: .word FUN_020C1E68
+_02004D00: .word NNS_SndCaptureStopEffect
thumb_func_start FUN_02004D04
FUN_02004D04: ; 0x02004D04
@@ -1619,7 +1619,7 @@ FUN_02004D20: ; 0x02004D20
bl FUN_02003FF4
add r1, r5, #0x0
add r2, r4, #0x0
- bl FUN_020C0EA4
+ bl NNS_SndPlayerSetTrackPitch
pop {r3-r5, pc}
thumb_func_start FUN_02004D34
@@ -1642,14 +1642,14 @@ FUN_02004D4C: ; 0x02004D4C
bl FUN_02003FF4
add r1, r5, #0x0
add r2, r4, #0x0
- bl FUN_020C0E7C
+ bl NNS_SndPlayerSetTrackPan
pop {r3-r5, pc}
thumb_func_start FUN_02004D60
FUN_02004D60: ; 0x02004D60
push {r4, lr}
add r4, r0, #0x0
- bl FUN_020C0174
+ bl NNS_SndSetMonoFlag
ldr r0, _02004D70 ; =UNK_021C3DD8
str r4, [r0, #0x0]
pop {r4, pc}
@@ -1866,7 +1866,7 @@ FUN_02004ED0: ; 0x02004ED0
_02004EF0:
mov r0, #0x1
_02004EF2:
- bl FUN_020C226C
+ bl NNS_SndArcGetWaveArcInfo
cmp r0, #0x0
bne _02004F02
bl ErrorHandling
@@ -1876,7 +1876,7 @@ _02004F02:
ldr r0, [r0, #0x0]
lsl r0, r0, #0x8
lsr r0, r0, #0x8
- bl FUN_020C20DC
+ bl NNS_SndArcGetFileAddress
cmp r0, #0x0
bne _02004F18
bl ErrorHandling
@@ -1928,7 +1928,7 @@ _02004F62:
FUN_02004F64: ; 0x02004F64
push {r3, lr}
bl FUN_02003FF4
- bl FUN_020C0DD4
+ bl NNS_SndPlayerGetTick
pop {r3, pc}
thumb_func_start FUN_02004F70
@@ -2216,12 +2216,12 @@ _0200515A:
thumb_func_start FUN_02005160
FUN_02005160: ; 0x02005160
- ldr r3, _02005168 ; =FUN_020C1148
+ ldr r3, _02005168 ; =NNS_SndPlayerSetAllocatableChannel
add r1, r0, #0x0
mov r0, #0x7
bx r3
.balign 4
-_02005168: .word FUN_020C1148
+_02005168: .word NNS_SndPlayerSetAllocatableChannel
thumb_func_start FUN_0200516C
FUN_0200516C: ; 0x0200516C
@@ -2282,7 +2282,7 @@ _020051E8: .word 0x0000047E
thumb_func_start FUN_020051EC
FUN_020051EC: ; 0x020051EC
- ldr r3, _020051F0 ; =FUN_020C1180
+ ldr r3, _020051F0 ; =NNS_SndPlayerSetPlayerVolume
bx r3
.balign 4
-_020051F0: .word FUN_020C1180
+_020051F0: .word NNS_SndPlayerSetPlayerVolume
diff --git a/arm9/asm/unk_020051F4.s b/arm9/asm/unk_020051F4.s
index ccb8d272..12b0c8cb 100644
--- a/arm9/asm/unk_020051F4.s
+++ b/arm9/asm/unk_020051F4.s
@@ -12,7 +12,7 @@ FUN_020051F4: ; 0x020051F4
add r4, r0, #0x0
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C3980
+ bl NNS_SndArcPlayerStartSeq
add r6, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
@@ -90,7 +90,7 @@ FUN_02005288: ; 0x02005288
add r0, r4, #0x0
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C3980
+ bl NNS_SndArcPlayerStartSeq
pop {r3-r5, pc}
.balign 4
@@ -123,7 +123,7 @@ FUN_020052B8: ; 0x020052B8
add r0, r6, #0x0
add r3, r1, #0x0
str r5, [sp, #0x0]
- bl FUN_020C3910
+ bl NNS_SndArcPlayerStartSeqEx
add sp, #0x4
pop {r3-r6, pc}
.balign 4
@@ -152,7 +152,7 @@ _0200532A:
mov r0, #0x7
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C3980
+ bl NNS_SndArcPlayerStartSeq
add r4, r0, #0x0
add r0, r5, #0x0
bl FUN_02004110
@@ -165,14 +165,14 @@ _0200532A:
FUN_02005350: ; 0x02005350
push {r4, lr}
add r4, r0, #0x0
- bl FUN_020C0FDC
+ bl NNS_SndPlayerStopSeqBySeqNo
add r0, r4, #0x0
bl FUN_020048D0
cmp r0, #0xff
beq _0200536E
bl FUN_02004018
bl FUN_02003FF4
- bl FUN_020C0F68
+ bl NNS_SndHandleReleaseSeq
_0200536E:
bl FUN_02005374
pop {r4, pc}
@@ -270,7 +270,7 @@ FUN_0200541C: ; 0x0200541C
bl FUN_02003D38
add r4, r0, #0x0
mov r0, #0x0
- bl FUN_020C0F9C
+ bl NNS_SndPlayerStopSeqAll
ldrb r0, [r5, #0x0]
cmp r0, #0x1
bne _02005440
@@ -299,7 +299,7 @@ FUN_02005454: ; 0x02005454
mov r0, #0x7
bl FUN_02003FF4
mov r1, #0x0
- bl FUN_020C10A4
+ bl NNS_SndPlayerStopSeq
bl FUN_02005374
mov r5, #0x0
add r4, r5, #0x0
@@ -351,7 +351,7 @@ FUN_020054C8: ; 0x020054C8
add r4, r0, #0x0
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C3980
+ bl NNS_SndArcPlayerStartSeq
add r6, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
@@ -362,10 +362,10 @@ FUN_020054C8: ; 0x020054C8
thumb_func_start FUN_020054F0
FUN_020054F0: ; 0x020054F0
- ldr r3, _020054F4 ; =FUN_020C0FDC
+ ldr r3, _020054F4 ; =NNS_SndPlayerStopSeqBySeqNo
bx r3
.balign 4
-_020054F4: .word FUN_020C0FDC
+_020054F4: .word NNS_SndPlayerStopSeqBySeqNo
thumb_func_start FUN_020054F8
FUN_020054F8: ; 0x020054F8
@@ -373,7 +373,7 @@ FUN_020054F8: ; 0x020054F8
add r4, r1, #0x0
bl FUN_02003FF4
add r1, r4, #0x0
- bl FUN_020C10A4
+ bl NNS_SndPlayerStopSeq
pop {r4, pc}
thumb_func_start FUN_02005508
@@ -411,7 +411,7 @@ FUN_02005530: ; 0x02005530
bl FUN_02003FF4
add r1, r5, #0x0
add r2, r4, #0x0
- bl FUN_020C0E7C
+ bl NNS_SndPlayerSetTrackPan
pop {r3-r5, pc}
thumb_func_start FUN_0200554C
@@ -428,7 +428,7 @@ _0200555C:
bl FUN_02003FF4
add r1, r7, #0x0
add r2, r6, #0x0
- bl FUN_020C0E7C
+ bl NNS_SndPlayerSetTrackPan
add r5, r5, #0x1
cmp r5, #0x4
blt _0200555C
@@ -483,7 +483,7 @@ _020055BC:
sub r1, r1, #0x3
add r2, r5, #0x0
add r3, r1, #0x0
- bl FUN_020C3910
+ bl NNS_SndArcPlayerStartSeqEx
add r4, r0, #0x0
add r0, r5, #0x0
mov r1, #0x1
@@ -497,7 +497,7 @@ _020055E8:
sub r1, r1, #0x3
add r2, r5, #0x0
add r3, r1, #0x0
- bl FUN_020C3910
+ bl NNS_SndArcPlayerStartSeqEx
add r4, r0, #0x0
add r0, r5, #0x0
mov r1, #0x8
@@ -525,11 +525,11 @@ FUN_02005614: ; 0x02005614
mov r0, #0x1
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C10A4
+ bl NNS_SndPlayerStopSeq
mov r0, #0x8
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C10A4
+ bl NNS_SndPlayerStopSeq
ldrb r0, [r6, #0x0]
cmp r0, #0x1
bne _02005658
@@ -1239,7 +1239,7 @@ _02005C48:
mov r0, #0x2
bl FUN_02003FF4
add r1, r5, #0x0
- bl FUN_020C3980
+ bl NNS_SndArcPlayerStartSeq
add r4, r0, #0x0
add r0, r5, #0x0
mov r1, #0x2
@@ -1279,7 +1279,7 @@ FUN_02005CA0: ; 0x02005CA0
mov r0, #0x2
bl FUN_02003FF4
add r1, r4, #0x0
- bl FUN_020C10A4
+ bl NNS_SndPlayerStopSeq
mov r0, #0x6
bl FUN_02004748
bl FUN_02003F64
diff --git a/arm9/asm/unk_02006864.s b/arm9/asm/unk_02006864.s
index 5bd62750..75adbe92 100644
--- a/arm9/asm/unk_02006864.s
+++ b/arm9/asm/unk_02006864.s
@@ -5,8 +5,8 @@
.global UNK_020ECB98
UNK_020ECB98: ; 0x020ECB98
- .word FUN_020B1768
- .word FUN_020B1528
+ .word NNS_G2dLoadImage1DMapping
+ .word NNS_G2dLoadImage2DMapping
.global UNK_020ECBA0
UNK_020ECBA0: ; 0x020ECBA0
@@ -14,7 +14,7 @@ UNK_020ECBA0: ; 0x020ECBA0
.global UNK_020ECBA8
UNK_020ECBA8: ; 0x020ECBA8
- .word FUN_020B1768, FUN_020B1528
+ .word NNS_G2dLoadImage1DMapping, NNS_G2dLoadImage2DMapping
.global UNK_020ECBB0
UNK_020ECBB0: ; 0x020ECBB0
@@ -38,7 +38,7 @@ FUN_0200687C: ; 0x0200687C
add r7, r0, #0x0
beq _020068C2
add r1, sp, #0x4
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0x0
beq _020068BC
cmp r4, #0x0
@@ -78,7 +78,7 @@ FUN_020068C8: ; 0x020068C8
add r7, r0, #0x0
beq _0200692C
add r1, sp, #0x4
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
cmp r0, #0x0
beq _02006926
cmp r4, #0x0
@@ -147,7 +147,7 @@ FUN_02006948: ; 0x02006948
cmp r0, #0x0
beq _02006A2A
add r1, sp, #0x8
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0x0
beq _02006A24
ldr r0, [sp, #0x8]
@@ -262,7 +262,7 @@ FUN_02006A34: ; 0x02006A34
add r7, r0, #0x0
beq _02006A80
add r1, sp, #0x4
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
cmp r0, #0x0
beq _02006A7A
cmp r4, #0x0
@@ -306,11 +306,11 @@ FUN_02006A8C: ; 0x02006A8C
add r6, r0, #0x0
beq _02006AE0
add r1, sp, #0x4
- bl FUN_020B00F0
+ bl NNS_G2dGetUnpackedPaletteCompressInfo
add r7, r0, #0x0
add r0, r6, #0x0
add r1, sp, #0x8
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0x0
beq _02006ADA
cmp r7, #0x0
@@ -321,14 +321,14 @@ FUN_02006A8C: ; 0x02006A8C
ldr r0, [sp, #0x8]
ldr r1, [sp, #0x4]
add r3, r5, #0x0
- bl FUN_020B10E8
+ bl NNS_G2dLoadPaletteEx
b _02006ADA
_02006ACE:
ldr r0, [sp, #0x8]
ldr r3, [sp, #0x24]
add r1, r4, #0x0
add r2, r5, #0x0
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
_02006ADA:
add r0, r6, #0x0
bl FreeToHeap
@@ -349,7 +349,7 @@ FUN_02006AE4: ; 0x02006AE4
ldr r4, _02006B30 ; =0x00000000
beq _02006B28
add r1, sp, #0x4
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
cmp r0, #0x0
beq _02006B22
ldr r1, [sp, #0x18]
@@ -391,7 +391,7 @@ FUN_02006B38: ; 0x02006B38
add r4, r0, #0x0
beq _02006B9E
add r1, sp, #0x4
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
cmp r0, #0x0
beq _02006B98
ldr r1, [sp, #0x18]
@@ -453,7 +453,7 @@ FUN_02006BB0: ; 0x02006BB0
add r5, r0, #0x0
beq _02006BD6
add r1, r4, #0x0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0x0
bne _02006BD6
add r0, r5, #0x0
@@ -476,7 +476,7 @@ FUN_02006BDC: ; 0x02006BDC
add r5, r0, #0x0
beq _02006C02
add r1, r4, #0x0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
cmp r0, #0x0
bne _02006C02
add r0, r5, #0x0
@@ -498,7 +498,7 @@ FUN_02006C08: ; 0x02006C08
add r4, r0, #0x0
beq _02006C2C
add r1, r5, #0x0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0x0
bne _02006C2C
add r0, r4, #0x0
@@ -520,7 +520,7 @@ FUN_02006C30: ; 0x02006C30
add r5, r0, #0x0
beq _02006C56
add r1, r4, #0x0
- bl FUN_020AFEB8
+ bl NNS_G2dGetUnpackedCellBank
cmp r0, #0x0
bne _02006C56
add r0, r5, #0x0
@@ -543,7 +543,7 @@ FUN_02006C5C: ; 0x02006C5C
add r5, r0, #0x0
beq _02006C82
add r1, r4, #0x0
- bl thunk_FUN_020afda0_2
+ bl NNS_G2dGetUnpackedAnimBank
cmp r0, #0x0
bne _02006C82
add r0, r5, #0x0
diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s
index 0e1ff930..4b0a737d 100644
--- a/arm9/asm/unk_02006D98.s
+++ b/arm9/asm/unk_02006D98.s
@@ -2,7 +2,7 @@
.include "global.inc"
.extern UNK_020ECD4C
- .extern UNK_020FFA38
+ .extern FX_SinCosTable_
.section .rodata
@@ -144,7 +144,7 @@ _02006E12:
add r5, #0x98
cmp r6, #0x4
blt _02006E12
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r2, _02006EC8 ; =0x000002E3
mov r0, #0x0
strb r0, [r4, r2]
@@ -155,7 +155,7 @@ _02006E12:
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0xc
str r0, [sp, #0x4]
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #0xc]
mov r1, #0xaf
ldr r0, [r0, #0x4]
@@ -235,7 +235,7 @@ FUN_02006ED4: ; 0x02006ED4
bl FUN_020082A8
add r0, r5, #0x0
bl FUN_020086F4
- bl FUN_020BB394
+ bl NNS_G3dGeFlushBuffer
mov r6, #0x9f
mov r0, #0x0
ldr r4, _02007250 ; =0x04000444
@@ -295,7 +295,7 @@ _02006F48:
add r1, #0x24
blx r2
_02006F56:
- bl FUN_020BB394
+ bl NNS_G3dGeFlushBuffer
ldr r0, _02007258 ; =0x000002E3
ldrb r0, [r5, r0]
cmp r0, #0x1
@@ -349,7 +349,7 @@ _02006F7E:
ldrh r0, [r4, #0x38]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _02007268 ; =UNK_020FFA38
+ ldr r0, _02007268 ; =FX_SinCosTable_
add r2, r0, r1
ldrsh r0, [r0, r1]
mov r1, #0x2
@@ -358,7 +358,7 @@ _02006F7E:
ldrh r0, [r4, #0x3a]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _02007268 ; =UNK_020FFA38
+ ldr r0, _02007268 ; =FX_SinCosTable_
add r2, r0, r1
ldrsh r0, [r0, r1]
mov r1, #0x2
@@ -367,7 +367,7 @@ _02006F7E:
ldrh r0, [r4, #0x3c]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _02007268 ; =UNK_020FFA38
+ ldr r0, _02007268 ; =FX_SinCosTable_
add r2, r0, r1
ldrsh r0, [r0, r1]
mov r1, #0x2
@@ -505,7 +505,7 @@ _02006F7E:
add r2, r3, r2
asr r1, r1, #0x10
mov r3, r12
- bl FUN_020B0250
+ bl NNS_G2dDrawSpriteFast
b _02007174
_02007104:
mov r0, #0x34
@@ -562,7 +562,7 @@ _02007104:
lsl r1, r1, #0x10
asr r1, r1, #0x10
add r2, r6, r2
- bl FUN_020B0250
+ bl NNS_G2dDrawSpriteFast
_02007174:
add r0, r4, #0x0
add r0, #0x6c
@@ -689,7 +689,7 @@ _02007258: .word 0x000002E3
_0200725C: .word 0x04000454
_02007260: .word 0x040004AC
_02007264: .word 0x04000470
-_02007268: .word UNK_020FFA38
+_02007268: .word FX_SinCosTable_
_0200726C: .word 0x040004C0
_02007270: .word 0x00004210
_02007274: .word 0x040004A4
@@ -725,7 +725,7 @@ _0200727C:
lsl r1, r1, #0x10
ldr r2, _020072E0 ; =0xFFFFFC18
asr r1, r1, #0x10
- bl FUN_020B0250
+ bl NNS_G2dDrawSpriteFast
_020072BC:
ldr r0, [sp, #0x14]
add r4, #0x98
@@ -2884,7 +2884,7 @@ FUN_020081C4: ; 0x020081C4
strb r1, [r4, r0]
sub r0, #0x81
add r0, r4, r0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0xae
lsl r3, r3, #0x2
mov r1, #0x20
@@ -2910,7 +2910,7 @@ FUN_020081C4: ; 0x020081C4
ldr r1, [r4, r1]
mov r2, #0x0
add r3, r4, r3
- bl FUN_020B1528
+ bl NNS_G2dLoadImage2DMapping
_02008212:
ldr r0, _02008258 ; =0x000002E2
ldrb r1, [r4, r0]
@@ -2920,7 +2920,7 @@ _02008212:
strb r1, [r4, r0]
sub r0, #0x5e
add r0, r4, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r3, #0xaa
lsl r3, r3, #0x2
add r0, r3, #0x0
@@ -2941,7 +2941,7 @@ _02008212:
add r0, r4, r0
mov r2, #0x0
add r3, r4, r3
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
_02008252:
pop {r4, pc}
.balign 4
@@ -3037,7 +3037,7 @@ _020082CC:
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x58
str r0, [sp, #0x4c]
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #0x58]
mov r1, #0xaf
ldr r0, [r0, #0x4]
@@ -3600,7 +3600,7 @@ _02008706:
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x18
str r0, [sp, #0x10]
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r0, [sp, #0x18]
mov r7, #0x0
ldr r1, [r0, #0x0]
@@ -3646,7 +3646,7 @@ _0200874A:
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x18
str r0, [sp, #0x4]
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r0, [sp, #0x18]
mov r7, #0xad
ldr r0, [r0, #0xc]
diff --git a/arm9/asm/unk_02008DEC.s b/arm9/asm/unk_02008DEC.s
index 1b0161ae..b05df5ca 100644
--- a/arm9/asm/unk_02008DEC.s
+++ b/arm9/asm/unk_02008DEC.s
@@ -1457,7 +1457,7 @@ FUN_0200986C: ; 0x0200986C
add r4, r0, #0x0
add r0, r6, #0x0
add r1, r4, #0x0
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
str r5, [r4, #0x4]
add r0, r4, #0x0
pop {r4-r6, pc}
@@ -1475,7 +1475,7 @@ FUN_0200988C: ; 0x0200988C
add r4, r0, #0x0
add r0, r7, #0x0
add r1, r4, #0x0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
str r5, [r4, #0x4]
str r6, [r4, #0x8]
add r0, r4, #0x0
@@ -1492,7 +1492,7 @@ FUN_020098B0: ; 0x020098B0
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
- bl FUN_020AFEB8
+ bl NNS_G2dGetUnpackedCellBank
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -1507,7 +1507,7 @@ FUN_020098CC: ; 0x020098CC
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
- bl thunk_FUN_020afda0_2
+ bl NNS_G2dGetUnpackedAnimBank
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -1522,7 +1522,7 @@ FUN_020098E8: ; 0x020098E8
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
- bl FUN_020AFFD8
+ bl NNS_G2dGetUnpackedMultiCellBank
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -1537,7 +1537,7 @@ FUN_02009904: ; 0x02009904
add r4, r0, #0x0
add r0, r5, #0x0
add r1, r4, #0x0
- bl thunk_FUN_020afda0
+ bl NNS_G2dGetUnpackedMCAnimBank
add r0, r4, #0x0
pop {r3-r5, pc}
.balign 4
@@ -2266,7 +2266,7 @@ FUN_02009E88: ; 0x02009E88
mov r1, #0x0
bl FUN_02009E54
add r1, r4, #0x0
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
mov r1, #0x0
mvn r1, r1
cmp r0, r1
diff --git a/arm9/asm/unk_02009EAC.s b/arm9/asm/unk_02009EAC.s
index a6a7e7d7..2c51446b 100644
--- a/arm9/asm/unk_02009EAC.s
+++ b/arm9/asm/unk_02009EAC.s
@@ -95,7 +95,7 @@ _02009F1C:
lsl r2, r4, #0x10
lsr r1, r1, #0x10
lsr r2, r2, #0x10
- bl FUN_020B0E34
+ bl NNS_G2dGetNewOamManagerInstance
cmp r0, #0x0
bne _02009F48
bl ErrorHandling
@@ -118,7 +118,7 @@ _02009F48:
lsr r1, r1, #0x10
lsr r2, r2, #0x10
lsr r3, r3, #0x10
- bl FUN_020B0E34
+ bl NNS_G2dGetNewOamManagerInstance
cmp r0, #0x0
bne _02009F78
bl ErrorHandling
@@ -135,11 +135,11 @@ FUN_02009F80: ; 0x02009F80
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _02009F98
- bl FUN_020B0870
+ bl NNS_G2dApplyAndResetOamManagerBuffer
ldr r0, _02009F9C ; =UNK_021C4670
ldr r0, [r0, #0x0]
add r0, #0x1c
- bl FUN_020B0870
+ bl NNS_G2dApplyAndResetOamManagerBuffer
_02009F98:
pop {r3, pc}
nop
@@ -264,7 +264,7 @@ FUN_0200A074: ; 0x0200A074
add r2, r1, #0x0
ldr r0, [r0, #0x0]
add r1, r3, #0x0
- bl FUN_020B0C7C
+ bl NNS_G2dEntryOamManagerOamWithAffineIdx
add r4, r0, #0x0
bne _0200A08C
bl ErrorHandling
@@ -283,7 +283,7 @@ FUN_0200A094: ; 0x0200A094
ldr r0, [r0, #0x0]
add r1, r3, #0x0
add r0, #0x1c
- bl FUN_020B0C7C
+ bl NNS_G2dEntryOamManagerOamWithAffineIdx
add r4, r0, #0x0
bne _0200A0AE
bl ErrorHandling
@@ -299,7 +299,7 @@ FUN_0200A0B8: ; 0x0200A0B8
add r1, r0, #0x0
ldr r0, _0200A0D4 ; =UNK_021C4670
ldr r0, [r0, #0x0]
- bl FUN_020B0BB0
+ bl NNS_G2dEntryOamManagerAffine
add r4, r0, #0x0
ldr r0, _0200A0D8 ; =0x0000FFFE
cmp r4, r0
@@ -319,7 +319,7 @@ FUN_0200A0DC: ; 0x0200A0DC
ldr r0, _0200A0FC ; =UNK_021C4670
ldr r0, [r0, #0x0]
add r0, #0x1c
- bl FUN_020B0BB0
+ bl NNS_G2dEntryOamManagerAffine
add r4, r0, #0x0
ldr r0, _0200A100 ; =0x0000FFFE
cmp r4, r0
diff --git a/arm9/asm/unk_0200BB14.s b/arm9/asm/unk_0200BB14.s
index 04f67c6e..7a041be2 100644
--- a/arm9/asm/unk_0200BB14.s
+++ b/arm9/asm/unk_0200BB14.s
@@ -90,7 +90,7 @@ _0200BB8A:
ldr r1, [r5, #0x0]
add r0, r7, #0x0
bl FUN_0201E00C
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
ldr r0, [r5, #0x8]
cmp r0, #0x1
bne _0200BBD6
diff --git a/arm9/asm/unk_0200CABC.s b/arm9/asm/unk_0200CABC.s
index 27b27a76..bf4889d8 100644
--- a/arm9/asm/unk_0200CABC.s
+++ b/arm9/asm/unk_0200CABC.s
@@ -1084,7 +1084,7 @@ FUN_0200D300: ; 0x0200D300
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x18
str r0, [sp, #0x14]
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
add r2, sp, #0x20
ldr r1, [sp, #0x18]
ldrb r2, [r2, #0x10]
@@ -2574,7 +2574,7 @@ FUN_0200DEF4: ; 0x0200DEF4
bl FUN_02009C5C
mov r1, #0x1
str r0, [sp, #0x4]
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
mov r1, #0x19
add r7, r0, #0x0
add r0, r4, #0x0
@@ -2601,7 +2601,7 @@ FUN_0200DEF4: ; 0x0200DEF4
ldr r1, [sp, #0x4]
bl FUN_02009E54
mov r1, #0x1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r5, r0, #0x0
add r0, r4, #0x0
mov r1, #0x20
diff --git a/arm9/asm/unk_0200E850.s b/arm9/asm/unk_0200E850.s
index 15526585..f42d0a24 100644
--- a/arm9/asm/unk_0200E850.s
+++ b/arm9/asm/unk_0200E850.s
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_020FFA38
+ .extern FX_SinCosTable_
.section .rodata
@@ -1353,7 +1353,7 @@ FUN_0200F0B4: ; 0x0200F0B4
asr r0, r0, #0x4
lsl r1, r0, #0x1
lsl r0, r1, #0x1
- ldr r2, _0200F0C8 ; =UNK_020FFA38
+ ldr r2, _0200F0C8 ; =FX_SinCosTable_
add r1, r1, #0x1
lsl r1, r1, #0x1
ldr r3, _0200F0CC ; =FX_Div
@@ -1361,7 +1361,7 @@ FUN_0200F0B4: ; 0x0200F0B4
ldrsh r1, [r2, r1]
bx r3
.balign 4
-_0200F0C8: .word UNK_020FFA38
+_0200F0C8: .word FX_SinCosTable_
_0200F0CC: .word FX_Div
thumb_func_start FUN_0200F0D0
@@ -4153,7 +4153,7 @@ FUN_020105A0: ; 0x020105A0
ldr r2, [r4, #0xc]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _02010680 ; =UNK_020FFA38
+ ldr r0, _02010680 ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -4249,7 +4249,7 @@ _02010634:
add sp, #0x110
pop {r4-r7, pc}
.balign 4
-_02010680: .word UNK_020FFA38
+_02010680: .word FX_SinCosTable_
_02010684: .word 0x0000FFFF
thumb_func_start FUN_02010688
diff --git a/arm9/asm/unk_02011744.s b/arm9/asm/unk_02011744.s
index 40ddf1ab..ff9364c9 100644
--- a/arm9/asm/unk_02011744.s
+++ b/arm9/asm/unk_02011744.s
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_020FFA38
+ .extern FX_SinCosTable_
.section .rodata
@@ -870,7 +870,7 @@ _02011D52:
beq _02011D92
_02011D68:
add r0, r5, #0x0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
str r7, [sp, #0x0]
ldr r0, [sp, #0x30]
str r6, [sp, #0x4]
diff --git a/arm9/asm/unk_02012004.s b/arm9/asm/unk_02012004.s
index 042302c6..e43e4bb2 100644
--- a/arm9/asm/unk_02012004.s
+++ b/arm9/asm/unk_02012004.s
@@ -82,7 +82,7 @@ FUN_02012044: ; 0x02012044
_02012054:
add r0, r4, #0x0
add r1, r5, #0x0
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
add r6, r0, #0x0
cmp r5, #0x0
bne _02012066
@@ -309,7 +309,7 @@ FUN_020121E8: ; 0x020121E8
_02012204:
ldr r0, [sp, #0x20]
add r1, sp, #0x2c
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
cmp r0, #0x0
bne _02012214
bl ErrorHandling
@@ -649,7 +649,7 @@ FUN_02012470: ; 0x02012470
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x0
add r5, r0, #0x0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0x1
beq _0201249C
bl ErrorHandling
diff --git a/arm9/asm/unk_02012944.s b/arm9/asm/unk_02012944.s
index 03ccc1ea..1c1f2ab2 100644
--- a/arm9/asm/unk_02012944.s
+++ b/arm9/asm/unk_02012944.s
@@ -323,7 +323,7 @@ FUN_02012B88: ; 0x02012B88
_02012BA0:
asr r0, r4, #0x4
lsl r1, r0, #0x2
- ldr r0, _02012BDC ; =UNK_020FFA38
+ ldr r0, _02012BDC ; =FX_SinCosTable_
ldr r2, [sp, #0x4]
ldrsh r0, [r0, r1]
ldr r3, [sp, #0x8]
@@ -351,7 +351,7 @@ _02012BD6:
add sp, #0xc
pop {r4-r7, pc}
nop
-_02012BDC: .word UNK_020FFA38
+_02012BDC: .word FX_SinCosTable_
_02012BE0: .word 0x00000000
thumb_func_start FUN_02012BE4
diff --git a/arm9/asm/unk_02012CC8.s b/arm9/asm/unk_02012CC8.s
index 781d1d6d..2961eba7 100644
--- a/arm9/asm/unk_02012CC8.s
+++ b/arm9/asm/unk_02012CC8.s
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021CED64
+ .extern NNS_G3dGlb
.section .rodata
@@ -205,7 +205,7 @@ FUN_02012DE4: ; 0x02012DE4
beq _02012E02
add r0, r5, #0x0
add r0, #0x58
- bl FUN_020AE8CC
+ bl NNS_GfdSetFrmTexVramState
b _02012E22
_02012E02:
mov r0, #0x2
@@ -218,7 +218,7 @@ _02012E0E:
ldr r0, [r4, #0x58]
cmp r0, #0x0
beq _02012E1A
- bl FUN_020AF894
+ bl NNS_GfdFreeLnkTexVram
str r7, [r4, #0x58]
_02012E1A:
add r6, r6, #0x1
@@ -234,7 +234,7 @@ _02012E22:
beq _02012E38
add r0, r5, #0x0
add r0, #0x98
- bl FUN_020AEC7C
+ bl NNS_GfdSetFrmPlttVramState
b _02012E60
_02012E38:
mov r0, #0x8
@@ -249,7 +249,7 @@ _02012E44:
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _02012E58
- bl FUN_020AFA80
+ bl NNS_GfdFreeLnkPlttVram
add r0, r4, #0x0
add r0, #0x98
str r7, [r0, #0x0]
@@ -766,7 +766,7 @@ _020131B2:
beq _020131C8
add r0, r5, #0x0
add r0, #0x58
- bl FUN_020AE918
+ bl NNS_GfdGetFrmTexVramState
b _020131DE
_020131C8:
mov r0, #0x2
@@ -787,7 +787,7 @@ _020131DE:
beq _020131EE
add r0, r5, #0x0
add r0, #0x98
- bl FUN_020AEC98
+ bl NNS_GfdGetFrmPlttVramState
b _02013208
_020131EE:
mov r0, #0x8
@@ -952,19 +952,19 @@ FUN_02013300: ; 0x02013300
bl FUN_0201EB8C
bl FUN_0201EBA4
_0201331C:
- bl FUN_020B849C
+ bl NNS_G3dGlbFlushP
ldr r0, [r4, #0x0]
- ldr r1, _02013338 ; =UNK_021CED64
+ ldr r1, _02013338 ; =NNS_G3dGlb + 0x4C
bl FUN_0208AD80
ldr r0, [r4, #0x20]
cmp r0, #0x0
beq _02013332
bl FUN_0201EB98
_02013332:
- bl FUN_020B849C
+ bl NNS_G3dGlbFlushP
pop {r4, pc}
.balign 4
-_02013338: .word UNK_021CED64
+_02013338: .word NNS_G3dGlb + 0x4C
thumb_func_start FUN_0201333C
FUN_0201333C: ; 0x0201333C
diff --git a/arm9/asm/unk_02013CD4.s b/arm9/asm/unk_02013CD4.s
index 7f278032..330a8c95 100644
--- a/arm9/asm/unk_02013CD4.s
+++ b/arm9/asm/unk_02013CD4.s
@@ -1,11 +1,11 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021064C0
- .extern UNK_020FFA38
- .extern UNK_021064B8
- .extern UNK_021064C4
- .extern UNK_021064BC
+ .extern NNS_GfdDefaultFuncAllocPlttVram
+ .extern FX_SinCosTable_
+ .extern NNS_GfdDefaultFuncAllocTexVram
+ .extern NNS_GfdDefaultFuncFreePlttVram
+ .extern NNS_GfdDefaultFuncFreeTexVram
.text
@@ -141,7 +141,7 @@ _02013DC6:
thumb_func_start FUN_02013DD4
FUN_02013DD4: ; 0x02013DD4
push {r4, lr}
- ldr r1, _02013DE8 ; =UNK_021064BC
+ ldr r1, _02013DE8 ; =NNS_GfdDefaultFuncFreeTexVram
add r4, r0, #0x0
ldr r0, [r4, #0x0]
ldr r1, [r1, #0x0]
@@ -150,7 +150,7 @@ FUN_02013DD4: ; 0x02013DD4
bl FUN_02013F50
pop {r4, pc}
.balign 4
-_02013DE8: .word UNK_021064BC
+_02013DE8: .word NNS_GfdDefaultFuncFreeTexVram
thumb_func_start FUN_02013DEC
FUN_02013DEC: ; 0x02013DEC
@@ -204,7 +204,7 @@ _02013E36:
thumb_func_start FUN_02013E44
FUN_02013E44: ; 0x02013E44
push {r4, lr}
- ldr r1, _02013E58 ; =UNK_021064C4
+ ldr r1, _02013E58 ; =NNS_GfdDefaultFuncFreePlttVram
add r4, r0, #0x0
ldr r0, [r4, #0x0]
ldr r1, [r1, #0x0]
@@ -213,7 +213,7 @@ FUN_02013E44: ; 0x02013E44
bl FUN_02013F5C
pop {r4, pc}
.balign 4
-_02013E58: .word UNK_021064C4
+_02013E58: .word NNS_GfdDefaultFuncFreePlttVram
thumb_func_start FUN_02013E5C
FUN_02013E5C: ; 0x02013E5C
@@ -401,21 +401,21 @@ _02013F4C: .word 0x00007FFF
thumb_func_start FUN_02013F50
FUN_02013F50: ; 0x02013F50
- ldr r3, _02013F58 ; =FUN_020B1A24
+ ldr r3, _02013F58 ; =NNS_G2dInitImageProxy
mov r1, #0x0
stmia r0!, {r1}
bx r3
.balign 4
-_02013F58: .word FUN_020B1A24
+_02013F58: .word NNS_G2dInitImageProxy
thumb_func_start FUN_02013F5C
FUN_02013F5C: ; 0x02013F5C
- ldr r3, _02013F64 ; =FUN_020B19DC
+ ldr r3, _02013F64 ; =NNS_G2dInitImagePaletteProxy
mov r1, #0x0
stmia r0!, {r1}
bx r3
.balign 4
-_02013F64: .word FUN_020B19DC
+_02013F64: .word NNS_G2dInitImagePaletteProxy
thumb_func_start FUN_02013F68
FUN_02013F68: ; 0x02013F68
@@ -585,7 +585,7 @@ _02014076:
thumb_func_start FUN_0201407C
FUN_0201407C: ; 0x0201407C
push {r3, lr}
- ldr r3, _0201408C ; =UNK_021064B8
+ ldr r3, _0201408C ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0x0
ldr r0, [r0, #0x10]
ldr r3, [r3, #0x0]
@@ -593,12 +593,12 @@ FUN_0201407C: ; 0x0201407C
blx r3
pop {r3, pc}
.balign 4
-_0201408C: .word UNK_021064B8
+_0201408C: .word NNS_GfdDefaultFuncAllocTexVram
thumb_func_start FUN_02014090
FUN_02014090: ; 0x02014090
push {r3, lr}
- ldr r3, _020140A0 ; =UNK_021064C0
+ ldr r3, _020140A0 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0x0
ldr r3, [r3, #0x0]
lsl r0, r0, #0x5
@@ -606,7 +606,7 @@ FUN_02014090: ; 0x02014090
blx r3
pop {r3, pc}
.balign 4
-_020140A0: .word UNK_021064C0
+_020140A0: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_020140A4
FUN_020140A4: ; 0x020140A4
@@ -615,7 +615,7 @@ FUN_020140A4: ; 0x020140A4
add r3, r2, #0x0
lsr r1, r1, #0xd
mov r2, #0x0
- bl FUN_020B1528
+ bl NNS_G2dLoadImage2DMapping
pop {r3, pc}
thumb_func_start FUN_020140B4
@@ -632,7 +632,7 @@ FUN_020140B4: ; 0x020140B4
str r2, [r5, #0x8]
lsr r1, r1, #0xd
mov r2, #0x0
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
str r4, [r5, #0x8]
pop {r3-r5, pc}
.balign 4
@@ -741,7 +741,7 @@ _02014172:
str r1, [r3, #0x0]
str r2, [r3, #0x0]
ldr r0, [r5, #0x18]
- ldr r1, _0201420C ; =UNK_020FFA38
+ ldr r1, _0201420C ; =FX_SinCosTable_
asr r0, r0, #0x4
lsl r2, r0, #0x1
lsl r0, r2, #0x1
@@ -781,7 +781,7 @@ _02014172:
str r4, [sp, #0x10]
ldrsh r3, [r5, r3]
add r1, r0, #0x0
- bl FUN_020B0250
+ bl NNS_G2dDrawSpriteFast
ldr r0, _02014214 ; =0x04000448
mov r1, #0x1
str r1, [r0, #0x0]
@@ -793,7 +793,7 @@ _020141FC: .word 0x7FFF8000
_02014200: .word 0x00004210
_02014204: .word 0x040004AC
_02014208: .word 0x04000470
-_0201420C: .word UNK_020FFA38
+_0201420C: .word FX_SinCosTable_
_02014210: .word 0x0400046C
_02014214: .word 0x04000448
@@ -868,14 +868,14 @@ _0201424C:
ldr r0, [r5, #0x4]
mov r1, #0x0
add r0, r0, #0x4
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
add r1, r0, #0x0
add r0, r7, #0x0
bl FUN_02013F14
ldr r0, [r5, #0x8]
mov r1, #0x0
add r0, r0, #0x4
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r1, r0, #0x0
add r0, r7, #0x0
bl FUN_02013F18
diff --git a/arm9/asm/unk_02014BF4.s b/arm9/asm/unk_02014BF4.s
index 20e8fa45..a8205c88 100644
--- a/arm9/asm/unk_02014BF4.s
+++ b/arm9/asm/unk_02014BF4.s
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_020FFA38
+ .extern FX_SinCosTable_
.section .rodata
@@ -1311,7 +1311,7 @@ FUN_0201551C: ; 0x0201551C
ldr r2, [sp, #0x4]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _0201554C ; =UNK_020FFA38
+ ldr r0, _0201554C ; =FX_SinCosTable_
ldrsh r0, [r0, r1]
mul r0, r2
asr r1, r0, #0xc
@@ -1323,7 +1323,7 @@ FUN_0201551C: ; 0x0201551C
add sp, #0xc
pop {r3-r4, pc}
nop
-_0201554C: .word UNK_020FFA38
+_0201554C: .word FX_SinCosTable_
thumb_func_start FUN_02015550
FUN_02015550: ; 0x02015550
@@ -1340,7 +1340,7 @@ FUN_02015550: ; 0x02015550
lsl r1, r1, #0x1
add r1, r1, #0x1
lsl r2, r1, #0x1
- ldr r1, _02015584 ; =UNK_020FFA38
+ ldr r1, _02015584 ; =FX_SinCosTable_
ldrsh r1, [r1, r2]
mul r1, r0
add r0, sp, #0x0
@@ -1352,7 +1352,7 @@ FUN_02015550: ; 0x02015550
add sp, #0xc
pop {r3-r4, pc}
nop
-_02015584: .word UNK_020FFA38
+_02015584: .word FX_SinCosTable_
thumb_func_start FUN_02015588
FUN_02015588: ; 0x02015588
@@ -2032,7 +2032,7 @@ _02015A5C: ; jump table (using 16-bit offset)
_02015A64:
asr r0, r1, #0x4
lsl r1, r0, #0x2
- ldr r0, _02015AE8 ; =UNK_020FFA38
+ ldr r0, _02015AE8 ; =FX_SinCosTable_
ldr r2, [r4, #0xc]
ldrsh r0, [r0, r1]
mul r0, r2
@@ -2045,7 +2045,7 @@ _02015A78:
lsl r1, r1, #0x1
add r1, r1, #0x1
lsl r2, r1, #0x1
- ldr r1, _02015AE8 ; =UNK_020FFA38
+ ldr r1, _02015AE8 ; =FX_SinCosTable_
ldr r0, [r4, #0xc]
ldrsh r1, [r1, r2]
mul r1, r0
@@ -2056,7 +2056,7 @@ _02015A78:
_02015A90:
asr r0, r1, #0x4
lsl r1, r0, #0x2
- ldr r0, _02015AE8 ; =UNK_020FFA38
+ ldr r0, _02015AE8 ; =FX_SinCosTable_
ldr r2, [r4, #0xc]
ldrsh r0, [r0, r1]
mul r0, r2
@@ -2070,7 +2070,7 @@ _02015AA6:
lsl r1, r1, #0x1
add r1, r1, #0x1
lsl r2, r1, #0x1
- ldr r1, _02015AE8 ; =UNK_020FFA38
+ ldr r1, _02015AE8 ; =FX_SinCosTable_
ldr r0, [r4, #0xc]
ldrsh r1, [r1, r2]
mul r1, r0
@@ -2101,7 +2101,7 @@ _02015AC4:
_02015AE6:
pop {r4, pc}
.balign 4
-_02015AE8: .word UNK_020FFA38
+_02015AE8: .word FX_SinCosTable_
thumb_func_start FUN_02015AEC
FUN_02015AEC: ; 0x02015AEC
@@ -2135,7 +2135,7 @@ _02015B1A: ; jump table (using 16-bit offset)
_02015B22:
asr r0, r1, #0x4
lsl r1, r0, #0x2
- ldr r0, _02015BA8 ; =UNK_020FFA38
+ ldr r0, _02015BA8 ; =FX_SinCosTable_
ldr r2, [r4, #0xc]
ldrsh r0, [r0, r1]
mul r0, r2
@@ -2148,7 +2148,7 @@ _02015B36:
lsl r1, r1, #0x1
add r1, r1, #0x1
lsl r2, r1, #0x1
- ldr r1, _02015BA8 ; =UNK_020FFA38
+ ldr r1, _02015BA8 ; =FX_SinCosTable_
ldr r0, [r4, #0xc]
ldrsh r1, [r1, r2]
mul r1, r0
@@ -2159,7 +2159,7 @@ _02015B36:
_02015B4E:
asr r0, r1, #0x4
lsl r1, r0, #0x2
- ldr r0, _02015BA8 ; =UNK_020FFA38
+ ldr r0, _02015BA8 ; =FX_SinCosTable_
ldr r2, [r4, #0xc]
ldrsh r0, [r0, r1]
mul r0, r2
@@ -2173,7 +2173,7 @@ _02015B64:
lsl r1, r1, #0x1
add r1, r1, #0x1
lsl r2, r1, #0x1
- ldr r1, _02015BA8 ; =UNK_020FFA38
+ ldr r1, _02015BA8 ; =FX_SinCosTable_
ldr r0, [r4, #0xc]
ldrsh r1, [r1, r2]
mul r1, r0
@@ -2204,7 +2204,7 @@ _02015B82:
_02015BA4:
pop {r4, pc}
nop
-_02015BA8: .word UNK_020FFA38
+_02015BA8: .word FX_SinCosTable_
thumb_func_start FUN_02015BAC
FUN_02015BAC: ; 0x02015BAC
diff --git a/arm9/asm/unk_0201B1A8.s b/arm9/asm/unk_0201B1A8.s
index 05245bc6..28308d53 100644
--- a/arm9/asm/unk_0201B1A8.s
+++ b/arm9/asm/unk_0201B1A8.s
@@ -1,12 +1,12 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021CED98
- .extern UNK_021CEDD4
- .extern UNK_021064C0
- .extern UNK_021064B8
- .extern UNK_021064C4
- .extern UNK_021064BC
+ .extern NNS_G3dGlb
+ .extern NNS_G3dGlb
+ .extern NNS_GfdDefaultFuncAllocPlttVram
+ .extern NNS_GfdDefaultFuncAllocTexVram
+ .extern NNS_GfdDefaultFuncFreePlttVram
+ .extern NNS_GfdDefaultFuncFreeTexVram
.section .bss
@@ -23,7 +23,7 @@ FUN_0201B1A8: ; 0x0201B1A8
add r4, r2, #0x0
bl FUN_020161A4
str r0, [r5, #0x0]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
cmp r0, #0x0
beq _0201B1D2
bl FUN_0201B254
@@ -33,10 +33,10 @@ FUN_0201B1A8: ; 0x0201B1A8
ldr r1, [r0, #0x8]
bl DC_FlushRange
ldr r0, [r5, #0x0]
- bl FUN_020BB59C
+ bl NNS_G3dResDefaultSetup
_0201B1D2:
ldr r0, [r5, #0x0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -50,7 +50,7 @@ FUN_0201B1E4: ; 0x0201B1E4
add r5, r1, #0x0
add r4, r0, #0x0
ldr r0, [r5, #0x0]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
cmp r0, #0x0
beq _0201B20A
bl FUN_0201B254
@@ -60,10 +60,10 @@ FUN_0201B1E4: ; 0x0201B1E4
ldr r1, [r0, #0x8]
bl DC_FlushRange
ldr r0, [r5, #0x0]
- bl FUN_020BB59C
+ bl NNS_G3dResDefaultSetup
_0201B20A:
ldr r0, [r5, #0x0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -81,7 +81,7 @@ FUN_0201B21C: ; 0x0201B21C
bl FUN_0201B1A8
ldr r1, [r4, #0x0]
add r0, r5, #0x0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
pop {r3-r5, pc}
thumb_func_start FUN_0201B234
@@ -98,7 +98,7 @@ FUN_0201B234: ; 0x0201B234
_0201B24A:
ldr r1, [r4, #0x0]
add r0, r5, #0x0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
pop {r3-r5, pc}
thumb_func_start FUN_0201B254
@@ -125,24 +125,24 @@ FUN_0201B26C: ; 0x0201B26C
add r0, r1, #0x0
add r4, r2, #0x0
add r6, r3, #0x0
- bl FUN_020B8474
- ldr r1, _0201B2A0 ; =UNK_021CEDD4
+ bl NNS_G3dGlbSetBaseTrans
+ ldr r1, _0201B2A0 ; =NNS_G3dGlb + 0xBC
add r0, r4, #0x0
bl MI_Copy36B
- ldr r1, _0201B2A4 ; =UNK_021CED98
+ ldr r1, _0201B2A4 ; =NNS_G3dGlb + 0x80
mov r0, #0xa4
ldr r2, [r1, #0x7c]
bic r2, r0
add r0, r6, #0x0
str r2, [r1, #0x7c]
- bl FUN_020B844C
- bl FUN_020B849C
+ bl NNS_G3dGlbSetBaseScale
+ bl NNS_G3dGlbFlushP
add r0, r5, #0x0
- bl FUN_020BAC98
+ bl NNS_G3dDraw
pop {r4-r6, pc}
nop
-_0201B2A0: .word UNK_021CEDD4
-_0201B2A4: .word UNK_021CED98
+_0201B2A0: .word NNS_G3dGlb + 0xBC
+_0201B2A4: .word NNS_G3dGlb + 0x80
thumb_func_start FUN_0201B2A8
FUN_0201B2A8: ; 0x0201B2A8
@@ -151,28 +151,28 @@ FUN_0201B2A8: ; 0x0201B2A8
add r0, r1, #0x0
add r4, r2, #0x0
add r6, r3, #0x0
- bl FUN_020B8474
- ldr r1, _0201B2E4 ; =UNK_021CEDD4
+ bl NNS_G3dGlbSetBaseTrans
+ ldr r1, _0201B2E4 ; =NNS_G3dGlb + 0xBC
add r0, r4, #0x0
bl MI_Copy36B
- ldr r1, _0201B2E8 ; =UNK_021CED98
+ ldr r1, _0201B2E8 ; =NNS_G3dGlb + 0x80
mov r0, #0xa4
ldr r2, [r1, #0x7c]
bic r2, r0
str r2, [r1, #0x7c]
add r0, r6, #0x0
- bl FUN_020B844C
- bl FUN_020B849C
+ bl NNS_G3dGlbSetBaseScale
+ bl NNS_G3dGlbFlushP
mov r1, #0x0
ldr r0, [r5, #0x4]
add r2, r1, #0x0
mov r3, #0x1
- bl FUN_020BAFB8
- bl FUN_020BB394
+ bl NNS_G3dDraw1Mat1Shp
+ bl NNS_G3dGeFlushBuffer
pop {r4-r6, pc}
.balign 4
-_0201B2E4: .word UNK_021CEDD4
-_0201B2E8: .word UNK_021CED98
+_0201B2E4: .word NNS_G3dGlb + 0xBC
+_0201B2E8: .word NNS_G3dGlb + 0x80
thumb_func_start FUN_0201B2EC
FUN_0201B2EC: ; 0x0201B2EC
@@ -269,11 +269,11 @@ _0201B3A4: .word FUN_020223BC
FUN_0201B3A8: ; 0x0201B3A8
push {r4, lr}
add r4, r1, #0x0
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
cmp r4, #0x0
beq _0201B3BE
add r1, r4, #0x0
- bl FUN_020B7790
+ bl NNS_G3dBindMdlSet
mov r0, #0x1
pop {r4, pc}
_0201B3BE:
@@ -299,17 +299,17 @@ _0201B3D2:
str r1, [sp, #0x0]
cmp r5, #0x0
beq _0201B4D0
- bl FUN_020B7E1C
+ bl NNS_G3dTexGetRequiredSize
add r6, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7E10
+ bl NNS_G3dTex4x4GetRequiredSize
add r4, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7CE4
+ bl NNS_G3dPlttGetRequiredSize
str r0, [sp, #0xc]
cmp r6, #0x0
beq _0201B412
- ldr r3, _0201B4D8 ; =UNK_021064B8
+ ldr r3, _0201B4D8 ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0x0
ldr r3, [r3, #0x0]
add r0, r6, #0x0
@@ -325,7 +325,7 @@ _0201B412:
_0201B414:
cmp r4, #0x0
beq _0201B42E
- ldr r3, _0201B4D8 ; =UNK_021064B8
+ ldr r3, _0201B4D8 ; =NNS_GfdDefaultFuncAllocTexVram
add r0, r4, #0x0
ldr r3, [r3, #0x0]
mov r1, #0x1
@@ -342,7 +342,7 @@ _0201B430:
ldr r0, [sp, #0xc]
cmp r0, #0x0
beq _0201B450
- ldr r3, _0201B4DC ; =UNK_021064C0
+ ldr r3, _0201B4DC ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0x2
ldrh r2, [r5, #0x20]
lsl r1, r1, #0xe
@@ -361,7 +361,7 @@ _0201B452:
ldr r0, [sp, #0x8]
cmp r0, #0x0
bne _0201B46E
- ldr r1, _0201B4E0 ; =UNK_021064BC
+ ldr r1, _0201B4E0 ; =NNS_GfdDefaultFuncFreeTexVram
add r0, r7, #0x0
ldr r1, [r1, #0x0]
blx r1
@@ -376,7 +376,7 @@ _0201B46E:
ldr r0, [sp, #0x4]
cmp r0, #0x0
bne _0201B48A
- ldr r1, _0201B4E0 ; =UNK_021064BC
+ ldr r1, _0201B4E0 ; =NNS_GfdDefaultFuncFreeTexVram
add r0, r6, #0x0
ldr r1, [r1, #0x0]
blx r1
@@ -391,7 +391,7 @@ _0201B48A:
ldr r0, [sp, #0x0]
cmp r0, #0x0
bne _0201B4A6
- ldr r1, _0201B4E4 ; =UNK_021064C4
+ ldr r1, _0201B4E4 ; =NNS_GfdDefaultFuncFreePlttVram
add r0, r4, #0x0
ldr r1, [r1, #0x0]
blx r1
@@ -406,25 +406,25 @@ _0201B4A6:
add r0, r5, #0x0
add r1, r7, #0x0
add r2, r6, #0x0
- bl FUN_020B7DFC
+ bl NNS_G3dTexSetTexKey
add r0, r5, #0x0
add r1, r4, #0x0
- bl FUN_020B7CDC
+ bl NNS_G3dPlttSetPlttKey
ldr r1, [r5, #0x4]
add r0, r5, #0x0
bl DC_FlushRange
add r0, r5, #0x0
mov r1, #0x1
- bl FUN_020B7D28
+ bl NNS_G3dTexLoad
add r0, r5, #0x0
mov r1, #0x1
- bl FUN_020B7C78
+ bl NNS_G3dPlttLoad
_0201B4D0:
mov r0, #0x1
add sp, #0x10
pop {r3-r7, pc}
nop
-_0201B4D8: .word UNK_021064B8
-_0201B4DC: .word UNK_021064C0
-_0201B4E0: .word UNK_021064BC
-_0201B4E4: .word UNK_021064C4
+_0201B4D8: .word NNS_GfdDefaultFuncAllocTexVram
+_0201B4DC: .word NNS_GfdDefaultFuncAllocPlttVram
+_0201B4E0: .word NNS_GfdDefaultFuncFreeTexVram
+_0201B4E4: .word NNS_GfdDefaultFuncFreePlttVram
diff --git a/arm9/asm/unk_0201B6D0.s b/arm9/asm/unk_0201B6D0.s
index b65b3870..1d795e17 100644
--- a/arm9/asm/unk_0201B6D0.s
+++ b/arm9/asm/unk_0201B6D0.s
@@ -1,8 +1,8 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021CEDD4
- .extern UNK_021CED98
+ .extern NNS_G3dGlb
+ .extern NNS_G3dGlb
.text
@@ -38,22 +38,22 @@ FUN_0201B6D0: ; 0x0201B6D0
ldrsh r3, [r4, r3]
bl FUN_0201B808
add r0, sp, #0x1c
- bl FUN_020B8474
- ldr r1, _0201B764 ; =UNK_021CEDD4
+ bl NNS_G3dGlbSetBaseTrans
+ ldr r1, _0201B764 ; =NNS_G3dGlb + 0xBC
add r0, r5, #0x0
bl MI_Copy36B
- ldr r1, _0201B768 ; =UNK_021CED98
+ ldr r1, _0201B768 ; =NNS_G3dGlb + 0x80
mov r0, #0xa4
ldr r2, [r1, #0x7c]
bic r2, r0
add r0, r7, #0x0
str r2, [r1, #0x7c]
- bl FUN_020B844C
- bl FUN_020B849C
+ bl NNS_G3dGlbSetBaseScale
+ bl NNS_G3dGlbFlushP
mov r1, #0x0
mov r0, #0x11
add r2, r1, #0x0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, [r4, #0x24]
add r1, sp, #0x10
str r0, [sp, #0x10]
@@ -61,7 +61,7 @@ FUN_0201B6D0: ; 0x0201B6D0
str r0, [sp, #0x18]
mov r0, #0x1b
mov r2, #0x3
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add r0, sp, #0x28
bl FUN_0201B82C
add r4, r0, #0x0
@@ -69,13 +69,13 @@ FUN_0201B6D0: ; 0x0201B6D0
mov r0, #0x12
add r1, sp, #0xc
str r2, [sp, #0xc]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add r0, r4, #0x0
add sp, #0x34
pop {r4-r7, pc}
.balign 4
-_0201B764: .word UNK_021CEDD4
-_0201B768: .word UNK_021CED98
+_0201B764: .word NNS_G3dGlb + 0xBC
+_0201B768: .word NNS_G3dGlb + 0x80
thumb_func_start FUN_0201B76C
FUN_0201B76C: ; 0x0201B76C
@@ -97,12 +97,12 @@ FUN_0201B76C: ; 0x0201B76C
add r2, r0, #0x0
bl FUN_0201B808
add r0, r5, #0x0
- bl FUN_020B8474
- bl FUN_020B849C
+ bl NNS_G3dGlbSetBaseTrans
+ bl NNS_G3dGlbFlushP
mov r1, #0x0
mov r0, #0x11
add r2, r1, #0x0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, [r4, #0x10]
lsl r2, r0, #0xc
ldr r0, [r4, #0xc]
@@ -115,7 +115,7 @@ FUN_0201B76C: ; 0x0201B76C
mov r0, #0x1b
add r1, sp, #0x10
mov r2, #0x3
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add r0, sp, #0x1c
bl FUN_0201B82C
add r4, r0, #0x0
@@ -123,7 +123,7 @@ FUN_0201B76C: ; 0x0201B76C
mov r0, #0x12
add r1, sp, #0xc
str r2, [sp, #0xc]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add r0, r4, #0x0
add sp, #0x28
pop {r3-r5, pc}
@@ -183,22 +183,22 @@ FUN_0201B82C: ; 0x0201B82C
mov r0, #0x29
add r1, sp, #0x4
str r2, [sp, #0x8]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r0, #0x0
str r0, [sp, #0x0]
mov r0, #0x40
add r1, sp, #0x0
mov r2, #0x1
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r1, #0x0
mov r0, #0x41
add r2, r1, #0x0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r0, #0x70
add r1, r4, #0x0
mov r2, #0x3
- bl FUN_020BB1C0
- bl FUN_020BB394
+ bl NNS_G3dGeBufferOP_N
+ bl NNS_G3dGeFlushBuffer
add r4, sp, #0x8
_0201B86A:
add r0, r4, #0x0
diff --git a/arm9/asm/unk_0201C24C.s b/arm9/asm/unk_0201C24C.s
index 36817113..9e5cd227 100644
--- a/arm9/asm/unk_0201C24C.s
+++ b/arm9/asm/unk_0201C24C.s
@@ -43,7 +43,7 @@ _0201C272:
ldr r1, [r1, #0x0]
ldr r0, [r1, #0x8]
ldr r1, [r1, #0x0]
- bl FUN_020AEF1C
+ bl NNS_GfdInitVramTransferManager
pop {r3-r5, pc}
nop
_0201C298: .word UNK_021C5934
@@ -102,7 +102,7 @@ _0201C2FA:
add r1, r4, #0x0
add r2, r6, #0x0
add r3, r7, #0x0
- bl FUN_020AEE40
+ bl NNS_GfdRegisterNewVramTransferTask
pop {r3-r7, pc}
.balign 4
_0201C308: .word UNK_021C5934
@@ -114,7 +114,7 @@ FUN_0201C30C: ; 0x0201C30C
ldr r0, [r0, #0x0]
cmp r0, #0x0
beq _0201C322
- bl FUN_020AEEB8
+ bl NNS_GfdDoVramTransfer
ldr r0, _0201C324 ; =UNK_021C5934
mov r1, #0x0
ldr r0, [r0, #0x0]
@@ -135,7 +135,7 @@ FUN_0201C328: ; 0x0201C328
ldr r2, _0201C344 ; =FUN_0201C358
add r1, r4, #0x0
add r5, r0, #0x0
- bl FUN_020B4568
+ bl NNS_G2dInitCellTransferStateManager
add r0, r5, #0x0
pop {r3-r5, pc}
.balign 4
@@ -143,10 +143,10 @@ _0201C344: .word FUN_0201C358
thumb_func_start FUN_0201C348
FUN_0201C348: ; 0x0201C348
- ldr r3, _0201C34C ; =FUN_020B442C
+ ldr r3, _0201C34C ; =NNS_G2dUpdateCellTransferStateManager
bx r3
.balign 4
-_0201C34C: .word FUN_020B442C
+_0201C34C: .word NNS_G2dUpdateCellTransferStateManager
thumb_func_start FUN_0201C350
FUN_0201C350: ; 0x0201C350
diff --git a/arm9/asm/unk_0201C360.s b/arm9/asm/unk_0201C360.s
index 5f8ccb52..078b3ee3 100644
--- a/arm9/asm/unk_0201C360.s
+++ b/arm9/asm/unk_0201C360.s
@@ -321,7 +321,7 @@ FUN_0201C578: ; 0x0201C578
add r0, r4, #0x0
add r0, #0x3c
add r1, sp, #0x0
- bl FUN_020BC2A0
+ bl NNS_G3dGetResDataByName
add r1, r0, #0x0
bne _0201C598
add sp, #0x10
@@ -397,7 +397,7 @@ FUN_0201C5FC: ; 0x0201C5FC
add r0, r4, #0x0
add r0, #0x3c
add r1, sp, #0x0
- bl FUN_020BC2A0
+ bl NNS_G3dGetResDataByName
add r1, r0, #0x0
add r0, r4, #0x0
bl FUN_0201C5A4
diff --git a/arm9/asm/unk_0201C7A0.s b/arm9/asm/unk_0201C7A0.s
index 0a43b49f..aa8bfe83 100644
--- a/arm9/asm/unk_0201C7A0.s
+++ b/arm9/asm/unk_0201C7A0.s
@@ -2,7 +2,7 @@
.include "global.inc"
.extern gSineTable
- .extern UNK_020FFA38
+ .extern FX_SinCosTable_
.text
@@ -401,7 +401,7 @@ FUN_0201CAA8: ; 0x0201CAA8
sub sp, #0x24
add r4, r1, #0x0
ldr r1, [r4, #0x0]
- ldr r3, _0201CB1C ; =UNK_020FFA38
+ ldr r3, _0201CB1C ; =FX_SinCosTable_
lsl r1, r1, #0x10
lsr r1, r1, #0x10
asr r1, r1, #0x4
@@ -414,7 +414,7 @@ FUN_0201CAA8: ; 0x0201CAA8
add r5, r0, #0x0
bl MTX_RotX33_
ldr r0, [r4, #0x4]
- ldr r3, _0201CB1C ; =UNK_020FFA38
+ ldr r3, _0201CB1C ; =FX_SinCosTable_
lsl r0, r0, #0x10
lsr r0, r0, #0x10
asr r0, r0, #0x4
@@ -431,7 +431,7 @@ FUN_0201CAA8: ; 0x0201CAA8
add r2, r5, #0x0
bl MTX_Concat33
ldr r0, [r4, #0x8]
- ldr r3, _0201CB1C ; =UNK_020FFA38
+ ldr r3, _0201CB1C ; =FX_SinCosTable_
lsl r0, r0, #0x10
lsr r0, r0, #0x10
asr r0, r0, #0x4
@@ -450,7 +450,7 @@ FUN_0201CAA8: ; 0x0201CAA8
add sp, #0x24
pop {r4-r5, pc}
nop
-_0201CB1C: .word UNK_020FFA38
+_0201CB1C: .word FX_SinCosTable_
thumb_func_start FUN_0201CB20
FUN_0201CB20: ; 0x0201CB20
@@ -504,7 +504,7 @@ FUN_0201CB7C: ; 0x0201CB7C
lsl r2, r0, #0x1
add r6, r1, #0x0
lsl r0, r2, #0x1
- ldr r1, _0201CBE8 ; =UNK_020FFA38
+ ldr r1, _0201CBE8 ; =FX_SinCosTable_
add r2, r2, #0x1
lsl r2, r2, #0x1
ldrsh r0, [r1, r0]
@@ -550,4 +550,4 @@ FUN_0201CB7C: ; 0x0201CB7C
str r1, [r5, #0x0]
pop {r3-r7, pc}
.balign 4
-_0201CBE8: .word UNK_020FFA38
+_0201CBE8: .word FX_SinCosTable_
diff --git a/arm9/asm/unk_0201D040.s b/arm9/asm/unk_0201D040.s
index ba8c7b75..ab0c07c9 100644
--- a/arm9/asm/unk_0201D040.s
+++ b/arm9/asm/unk_0201D040.s
@@ -858,11 +858,11 @@ FUN_0201D690: ; 0x0201D690
add r1, #0x3c
strb r2, [r1, #0x0]
str r2, [r0, #0x40]
- ldr r3, _0201D6B0 ; =FUN_020B1A24
+ ldr r3, _0201D6B0 ; =NNS_G2dInitImageProxy
add r0, #0x10
bx r3
nop
-_0201D6B0: .word FUN_020B1A24
+_0201D6B0: .word NNS_G2dInitImageProxy
thumb_func_start FUN_0201D6B4
FUN_0201D6B4: ; 0x0201D6B4
@@ -1277,7 +1277,7 @@ FUN_0201D9B0: ; 0x0201D9B0
push {r4, lr}
add r4, r0, #0x0
add r0, #0x10
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
ldr r1, [r4, #0x4]
cmp r1, #0x3
beq _0201D9C8
@@ -1325,13 +1325,13 @@ _0201DA04:
add r5, #0x10
add r2, r4, #0x0
add r3, r5, #0x0
- bl FUN_020B1528
+ bl NNS_G2dLoadImage2DMapping
b _0201DA20
_0201DA16:
add r5, #0x10
add r2, r4, #0x0
add r3, r5, #0x0
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
_0201DA20:
cmp r4, #0x1
bne _0201DA2C
@@ -1351,7 +1351,7 @@ FUN_0201DA38: ; 0x0201DA38
push {r4, lr}
add r4, r0, #0x0
add r0, #0x10
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
ldr r1, [r4, #0x4]
cmp r1, #0x3
beq _0201DA50
@@ -1394,7 +1394,7 @@ _0201DA88:
add r5, #0x10
add r2, r4, #0x0
add r3, r5, #0x0
- bl FUN_020B1340
+ bl NNS_G2dLoadImageVramTransfer
cmp r4, #0x1
bne _0201DAA0
mov r0, #0x1
@@ -1932,7 +1932,7 @@ FUN_0201DE4C: ; 0x0201DE4C
beq _0201DE8A
add r0, r4, #0x0
add r0, #0x10
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
ldr r1, _0201DECC ; =UNK_021C5994
ldr r2, [r1, #0x0]
ldr r1, [r2, #0x1c]
@@ -1958,7 +1958,7 @@ _0201DE8A:
beq _0201DEC4
add r0, r4, #0x0
add r0, #0x10
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
ldr r1, _0201DECC ; =UNK_021C5994
ldr r2, [r1, #0x0]
ldr r1, [r2, #0x20]
diff --git a/arm9/asm/unk_0201E00C.s b/arm9/asm/unk_0201E00C.s
index 744cbe95..ae49b439 100644
--- a/arm9/asm/unk_0201E00C.s
+++ b/arm9/asm/unk_0201E00C.s
@@ -378,7 +378,7 @@ _0201E2A4:
_0201E2A6:
cmp r4, #0x0
beq _0201E2B6
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r1, r4, #0x0
bl _u32_div_f
pop {r4, pc}
@@ -434,7 +434,7 @@ FUN_0201E2F8: ; 0x0201E2F8
str r0, [r4, #0xc]
add r4, #0x10
add r0, r4, #0x0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
pop {r4, pc}
thumb_func_start FUN_0201E314
@@ -675,7 +675,7 @@ FUN_0201E4BC: ; 0x0201E4BC
push {r4, lr}
add r4, r0, #0x0
add r0, #0x10
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
ldr r0, [r4, #0x4]
mov r2, #0x1
tst r0, r2
@@ -684,7 +684,7 @@ FUN_0201E4BC: ; 0x0201E4BC
ldr r0, [r4, #0x0]
ldr r1, [r4, #0x24]
add r3, #0x10
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
_0201E4DA:
ldr r0, [r4, #0x4]
mov r2, #0x2
@@ -694,7 +694,7 @@ _0201E4DA:
ldr r1, [r4, #0x28]
add r4, #0x10
add r3, r4, #0x0
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
_0201E4EE:
pop {r4, pc}
diff --git a/arm9/asm/unk_0201E7D8.s b/arm9/asm/unk_0201E7D8.s
index a70f909d..32f01a13 100644
--- a/arm9/asm/unk_0201E7D8.s
+++ b/arm9/asm/unk_0201E7D8.s
@@ -1,13 +1,13 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021CED98
- .extern UNK_021CEF64
- .extern UNK_021CED20
- .extern UNK_020FFA38
- .extern UNK_021CEF58
- .extern UNK_021CEF70
- .extern UNK_021CED64
+ .extern NNS_G3dGlb
+ .extern NNS_G3dGlb
+ .extern NNS_G3dGlb
+ .extern FX_SinCosTable_
+ .extern NNS_G3dGlb
+ .extern NNS_G3dGlb
+ .extern NNS_G3dGlb
.section .data
@@ -32,7 +32,7 @@ FUN_0201E7D8: ; 0x0201E7D8
ldrh r4, [r5, #0x3c]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _0201E8B4 ; =UNK_020FFA38
+ ldr r0, _0201E8B4 ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -46,7 +46,7 @@ FUN_0201E7D8: ; 0x0201E7D8
lsl r2, r2, #0x1
add r2, r2, #0x1
lsl r3, r2, #0x1
- ldr r2, _0201E8B4 ; =UNK_020FFA38
+ ldr r2, _0201E8B4 ; =FX_SinCosTable_
lsl r1, r1, #0x14
ldrsh r2, [r2, r3]
lsr r0, r0, #0xc
@@ -69,7 +69,7 @@ FUN_0201E7D8: ; 0x0201E7D8
lsl r0, r0, #0x1
add r0, r0, #0x1
lsl r1, r0, #0x1
- ldr r0, _0201E8B4 ; =UNK_020FFA38
+ ldr r0, _0201E8B4 ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -86,7 +86,7 @@ FUN_0201E7D8: ; 0x0201E7D8
lsl r2, r2, #0x1
add r2, r2, #0x1
lsl r3, r2, #0x1
- ldr r2, _0201E8B4 ; =UNK_020FFA38
+ ldr r2, _0201E8B4 ; =FX_SinCosTable_
orr r0, r1
ldrsh r2, [r2, r3]
asr r1, r0, #0x1f
@@ -106,7 +106,7 @@ FUN_0201E7D8: ; 0x0201E7D8
str r1, [r5, #0x1c]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _0201E8B4 ; =UNK_020FFA38
+ ldr r0, _0201E8B4 ; =FX_SinCosTable_
ldr r2, [r5, #0x38]
ldrsh r0, [r0, r1]
asr r3, r2, #0x1f
@@ -129,7 +129,7 @@ FUN_0201E7D8: ; 0x0201E7D8
bl VEC_Add
pop {r3-r5, pc}
nop
-_0201E8B4: .word UNK_020FFA38
+_0201E8B4: .word FX_SinCosTable_
thumb_func_start FUN_0201E8B8
FUN_0201E8B8: ; 0x0201E8B8
@@ -140,7 +140,7 @@ FUN_0201E8B8: ; 0x0201E8B8
ldrh r4, [r5, #0x3c]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _0201E998 ; =UNK_020FFA38
+ ldr r0, _0201E998 ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -154,7 +154,7 @@ FUN_0201E8B8: ; 0x0201E8B8
lsl r2, r2, #0x1
add r2, r2, #0x1
lsl r3, r2, #0x1
- ldr r2, _0201E998 ; =UNK_020FFA38
+ ldr r2, _0201E998 ; =FX_SinCosTable_
lsl r1, r1, #0x14
ldrsh r2, [r2, r3]
lsr r0, r0, #0xc
@@ -178,7 +178,7 @@ FUN_0201E8B8: ; 0x0201E8B8
lsl r0, r0, #0x1
add r0, r0, #0x1
lsl r1, r0, #0x1
- ldr r0, _0201E998 ; =UNK_020FFA38
+ ldr r0, _0201E998 ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -195,7 +195,7 @@ FUN_0201E8B8: ; 0x0201E8B8
lsl r2, r2, #0x1
add r2, r2, #0x1
lsl r3, r2, #0x1
- ldr r2, _0201E998 ; =UNK_020FFA38
+ ldr r2, _0201E998 ; =FX_SinCosTable_
orr r0, r1
ldrsh r2, [r2, r3]
asr r1, r0, #0x1f
@@ -216,7 +216,7 @@ FUN_0201E8B8: ; 0x0201E8B8
lsr r0, r0, #0x10
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _0201E998 ; =UNK_020FFA38
+ ldr r0, _0201E998 ; =FX_SinCosTable_
ldr r2, [r5, #0x38]
ldrsh r0, [r0, r1]
asr r3, r2, #0x1f
@@ -240,7 +240,7 @@ FUN_0201E8B8: ; 0x0201E8B8
bl VEC_Add
pop {r3-r5, pc}
.balign 4
-_0201E998: .word UNK_020FFA38
+_0201E998: .word FX_SinCosTable_
thumb_func_start FUN_0201E99C
FUN_0201E99C: ; 0x0201E99C
@@ -249,7 +249,7 @@ FUN_0201E99C: ; 0x0201E99C
strh r0, [r2, #0x0]
asr r0, r0, #0x4
lsl r3, r0, #0x1
- ldr r2, _0201E9E0 ; =UNK_020FFA38
+ ldr r2, _0201E9E0 ; =FX_SinCosTable_
lsl r0, r3, #0x1
ldrsh r0, [r2, r0]
str r0, [r1, #0x0]
@@ -278,7 +278,7 @@ FUN_0201E99C: ; 0x0201E99C
str r2, [r1, #0x64]
bx lr
nop
-_0201E9E0: .word UNK_020FFA38
+_0201E9E0: .word FX_SinCosTable_
_0201E9E4: .word 0x00001555
thumb_func_start FUN_0201E9E8
@@ -576,7 +576,7 @@ FUN_0201EBA4: ; 0x0201EBA4
str r0, [r3, #0x0]
_0201EBEE:
ldr r0, _0201EC40 ; =UNK_021C59A4
- ldr r5, _0201EC44 ; =UNK_021CEF58
+ ldr r5, _0201EC44 ; =NNS_G3dGlb + 0x240
ldr r4, [r0, #0x0]
add r3, r4, #0x0
add r2, r4, #0x0
@@ -588,26 +588,26 @@ _0201EBEE:
add r2, #0x2c
str r0, [r5, #0x0]
add r6, r2, #0x0
- ldr r5, _0201EC48 ; =UNK_021CEF64
+ ldr r5, _0201EC48 ; =NNS_G3dGlb + 0x24C
ldmia r6!, {r0-r1}
stmia r5!, {r0-r1}
ldr r0, [r6, #0x0]
add r3, #0x20
str r0, [r5, #0x0]
add r6, r3, #0x0
- ldr r5, _0201EC4C ; =UNK_021CEF70
+ ldr r5, _0201EC4C ; =NNS_G3dGlb + 0x258
ldmia r6!, {r0-r1}
stmia r5!, {r0-r1}
ldr r0, [r6, #0x0]
add r1, r2, #0x0
str r0, [r5, #0x0]
- ldr r0, _0201EC50 ; =UNK_021CED64
+ ldr r0, _0201EC50 ; =NNS_G3dGlb + 0x4C
add r2, r3, #0x0
str r0, [sp, #0x0]
add r0, r4, #0x0
mov r3, #0x0
bl G3i_LookAt_
- ldr r1, _0201EC54 ; =UNK_021CED98
+ ldr r1, _0201EC54 ; =NNS_G3dGlb + 0x80
mov r0, #0xe8
ldr r2, [r1, #0x7c]
bic r2, r0
@@ -617,11 +617,11 @@ _0201EC3A:
pop {r3-r6, pc}
nop
_0201EC40: .word UNK_021C59A4
-_0201EC44: .word UNK_021CEF58
-_0201EC48: .word UNK_021CEF64
-_0201EC4C: .word UNK_021CEF70
-_0201EC50: .word UNK_021CED64
-_0201EC54: .word UNK_021CED98
+_0201EC44: .word NNS_G3dGlb + 0x240
+_0201EC48: .word NNS_G3dGlb + 0x24C
+_0201EC4C: .word NNS_G3dGlb + 0x258
+_0201EC50: .word NNS_G3dGlb + 0x4C
+_0201EC54: .word NNS_G3dGlb + 0x80
thumb_func_start FUN_0201EC58
FUN_0201EC58: ; 0x0201EC58
@@ -882,14 +882,14 @@ FUN_0201EE2C: ; 0x0201EE2C
str r0, [sp, #0x4]
mov r0, #0x0
str r0, [sp, #0x8]
- ldr r0, _0201EEE4 ; =UNK_021CED20
+ ldr r0, _0201EEE4 ; =NNS_G3dGlb + 0x8
str r0, [sp, #0xc]
ldr r0, [r5, #0x0]
ldr r1, [r5, #0x4]
ldr r2, [r5, #0x8]
ldr r3, [r5, #0xc]
bl G3i_PerspectiveW_
- ldr r1, _0201EEE8 ; =UNK_021CED98
+ ldr r1, _0201EEE8 ; =NNS_G3dGlb + 0x80
mov r0, #0x50
ldr r2, [r1, #0x7c]
add r5, #0x44
@@ -939,12 +939,12 @@ _0201EE6C:
lsl r0, r6, #0x1
str r0, [sp, #0x8]
str r2, [sp, #0xc]
- ldr r0, _0201EEE4 ; =UNK_021CED20
+ ldr r0, _0201EEE4 ; =NNS_G3dGlb + 0x8
neg r2, r3
str r0, [sp, #0x10]
add r0, r4, #0x0
bl G3i_OrthoW_
- ldr r1, _0201EEE8 ; =UNK_021CED98
+ ldr r1, _0201EEE8 ; =NNS_G3dGlb + 0x80
mov r0, #0x50
ldr r2, [r1, #0x7c]
add r5, #0x44
@@ -958,8 +958,8 @@ _0201EE6C:
add sp, #0x14
pop {r3-r6, pc}
nop
-_0201EEE4: .word UNK_021CED20
-_0201EEE8: .word UNK_021CED98
+_0201EEE4: .word NNS_G3dGlb + 0x8
+_0201EEE8: .word NNS_G3dGlb + 0x80
_0201EEEC: .word UNK_02105BB8
thumb_func_start FUN_0201EEF0
@@ -973,7 +973,7 @@ FUN_0201EEF0: ; 0x0201EEF0
ldr r3, _0201EF24 ; =FUN_0201EE2C
asr r0, r0, #0x4
lsl r2, r0, #0x2
- ldr r0, _0201EF28 ; =UNK_020FFA38
+ ldr r0, _0201EF28 ; =FX_SinCosTable_
ldrsh r2, [r0, r2]
str r2, [r1, #0x0]
add r2, r1, #0x0
@@ -991,7 +991,7 @@ FUN_0201EEF0: ; 0x0201EEF0
bx r3
nop
_0201EF24: .word FUN_0201EE2C
-_0201EF28: .word UNK_020FFA38
+_0201EF28: .word FX_SinCosTable_
thumb_func_start FUN_0201EF2C
FUN_0201EF2C: ; 0x0201EF2C
@@ -1008,7 +1008,7 @@ FUN_0201EF2C: ; 0x0201EF2C
ldrh r0, [r0, #0x0]
asr r0, r0, #0x4
lsl r2, r0, #0x2
- ldr r0, _0201EF6C ; =UNK_020FFA38
+ ldr r0, _0201EF6C ; =FX_SinCosTable_
ldrsh r2, [r0, r2]
str r2, [r1, #0x0]
add r2, r1, #0x0
@@ -1026,7 +1026,7 @@ FUN_0201EF2C: ; 0x0201EF2C
bx r3
nop
_0201EF68: .word FUN_0201EE2C
-_0201EF6C: .word UNK_020FFA38
+_0201EF6C: .word FX_SinCosTable_
thumb_func_start FUN_0201EF70
FUN_0201EF70: ; 0x0201EF70
diff --git a/arm9/asm/unk_0201F06C.s b/arm9/asm/unk_0201F06C.s
index e48364ec..84b32634 100644
--- a/arm9/asm/unk_0201F06C.s
+++ b/arm9/asm/unk_0201F06C.s
@@ -1,11 +1,11 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_020FFA38
- .extern UNK_021064C0
- .extern UNK_021064B8
- .extern UNK_021064BC
- .extern UNK_021064C4
+ .extern FX_SinCosTable_
+ .extern NNS_GfdDefaultFuncAllocPlttVram
+ .extern NNS_GfdDefaultFuncAllocTexVram
+ .extern NNS_GfdDefaultFuncFreeTexVram
+ .extern NNS_GfdDefaultFuncFreePlttVram
.section .rodata
@@ -569,18 +569,18 @@ FUN_0201F454: ; 0x0201F454
add r4, r1, #0x0
add r6, r2, #0x0
add r7, r3, #0x0
- bl FUN_020B7E1C
+ bl NNS_G3dTexGetRequiredSize
str r0, [sp, #0x8]
add r0, r5, #0x0
- bl FUN_020B7E10
+ bl NNS_G3dTex4x4GetRequiredSize
str r0, [sp, #0x4]
add r0, r5, #0x0
- bl FUN_020B7CE4
+ bl NNS_G3dPlttGetRequiredSize
str r0, [sp, #0x0]
ldr r0, [sp, #0x8]
cmp r0, #0x0
beq _0201F492
- ldr r3, _0201F4E4 ; =UNK_021064B8
+ ldr r3, _0201F4E4 ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0x0
ldr r3, [r3, #0x0]
add r2, r1, #0x0
@@ -597,7 +597,7 @@ _0201F496:
ldr r0, [sp, #0x4]
cmp r0, #0x0
beq _0201F4B2
- ldr r3, _0201F4E4 ; =UNK_021064B8
+ ldr r3, _0201F4E4 ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0x1
ldr r3, [r3, #0x0]
mov r2, #0x0
@@ -614,7 +614,7 @@ _0201F4B6:
ldr r0, [sp, #0x0]
cmp r0, #0x0
beq _0201F4DA
- ldr r3, _0201F4E8 ; =UNK_021064C0
+ ldr r3, _0201F4E8 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0x2
ldrh r2, [r5, #0x20]
lsl r1, r1, #0xe
@@ -635,17 +635,17 @@ _0201F4DE:
add sp, #0xc
pop {r4-r7, pc}
nop
-_0201F4E4: .word UNK_021064B8
-_0201F4E8: .word UNK_021064C0
+_0201F4E4: .word NNS_GfdDefaultFuncAllocTexVram
+_0201F4E8: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_0201F4EC
FUN_0201F4EC: ; 0x0201F4EC
push {r3-r5, lr}
add r5, r0, #0x0
add r4, r3, #0x0
- bl FUN_020B7CF0
+ bl NNS_G3dTexReleaseTexKey
add r0, r5, #0x0
- bl FUN_020B7C58
+ bl NNS_G3dPlttReleasePlttKey
str r0, [r4, #0x0]
pop {r3-r5, pc}
@@ -656,14 +656,14 @@ FUN_0201F500: ; 0x0201F500
ldr r1, [r2, #0x0]
ldr r2, [r3, #0x0]
add r5, r0, #0x0
- bl FUN_020B7DFC
+ bl NNS_G3dTexSetTexKey
ldr r1, [sp, #0x10]
add r0, r5, #0x0
ldr r1, [r1, #0x0]
- bl FUN_020B7CDC
+ bl NNS_G3dPlttSetPlttKey
add r0, r4, #0x0
add r1, r5, #0x0
- bl FUN_020B7790
+ bl NNS_G3dBindMdlSet
pop {r3-r5, pc}
.balign 4
@@ -675,28 +675,28 @@ FUN_0201F524: ; 0x0201F524
add r4, r2, #0x0
cmp r0, #0x0
beq _0201F536
- ldr r1, _0201F550 ; =UNK_021064BC
+ ldr r1, _0201F550 ; =NNS_GfdDefaultFuncFreeTexVram
ldr r1, [r1, #0x0]
blx r1
_0201F536:
ldr r0, [r5, #0x0]
cmp r0, #0x0
beq _0201F542
- ldr r1, _0201F550 ; =UNK_021064BC
+ ldr r1, _0201F550 ; =NNS_GfdDefaultFuncFreeTexVram
ldr r1, [r1, #0x0]
blx r1
_0201F542:
ldr r0, [r4, #0x0]
cmp r0, #0x0
beq _0201F54E
- ldr r1, _0201F554 ; =UNK_021064C4
+ ldr r1, _0201F554 ; =NNS_GfdDefaultFuncFreePlttVram
ldr r1, [r1, #0x0]
blx r1
_0201F54E:
pop {r3-r5, pc}
.balign 4
-_0201F550: .word UNK_021064BC
-_0201F554: .word UNK_021064C4
+_0201F550: .word NNS_GfdDefaultFuncFreeTexVram
+_0201F554: .word NNS_GfdDefaultFuncFreePlttVram
thumb_func_start FUN_0201F558
FUN_0201F558: ; 0x0201F558
@@ -713,22 +713,22 @@ _0201F568:
mov r0, #0x0
pop {r3-r7, pc}
_0201F56E:
- bl FUN_020B7E1C
+ bl NNS_G3dTexGetRequiredSize
str r0, [sp, #0x0]
add r0, r4, #0x0
- bl FUN_020B7E10
+ bl NNS_G3dTex4x4GetRequiredSize
str r0, [sp, #0x4]
add r0, r4, #0x0
- bl FUN_020B7CE4
+ bl NNS_G3dPlttGetRequiredSize
add r4, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7E1C
+ bl NNS_G3dTexGetRequiredSize
add r6, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7E10
+ bl NNS_G3dTex4x4GetRequiredSize
add r7, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7CE4
+ bl NNS_G3dPlttGetRequiredSize
ldr r1, [sp, #0x0]
cmp r1, r6
bne _0201F5AA
@@ -780,7 +780,7 @@ FUN_0201F5D4: ; 0x0201F5D4
add r0, r5, #0x0
ldr r1, [r5, #0x7c]
add r0, #0x24
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
add r0, r5, #0x0
add r0, #0xa8
ldrb r0, [r0, #0x0]
@@ -882,7 +882,7 @@ FUN_0201F69C: ; 0x0201F69C
add r0, r5, #0x0
ldr r1, [r5, #0x7c]
add r0, #0x24
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
add r0, r4, #0x0
bl FUN_0201FBCC
add r5, #0x84
@@ -1602,7 +1602,7 @@ FUN_0201FB9C: ; 0x0201FB9C
add r5, r2, #0x0
bl FUN_0201FC90
add r7, r0, #0x0
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
add r4, r0, #0x0
ldrh r0, [r4, #0xe]
add r0, r4, r0
@@ -1612,7 +1612,7 @@ FUN_0201FB9C: ; 0x0201FB9C
cmp r5, #0x0
beq _0201FBC6
add r0, r7, #0x0
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r5, #0x0]
_0201FBC6:
add r0, r4, #0x0
@@ -1724,7 +1724,7 @@ FUN_0201FC70: ; 0x0201FC70
sub sp, #0xc
add r4, r0, #0x0
ldr r0, [r4, #0x78]
- bl FUN_020B772C
+ bl NNS_G3dReleaseMdlSet
add r4, #0x80
ldr r0, [r4, #0x0]
add r1, sp, #0x4
@@ -1828,7 +1828,7 @@ _0201FD0C:
ldr r0, [r4, r1]
add r1, r1, #0x4
add r1, r4, r1
- bl thunk_FUN_020afda0_2
+ bl NNS_G2dGetUnpackedAnimBank
mov r0, #0x12
mov r1, #0x1
lsl r0, r0, #0x4
@@ -2002,10 +2002,10 @@ FUN_0201FE6C: ; 0x0201FE6C
bl memset
add r0, r4, #0x0
add r0, #0xb4
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, r4, #0x0
add r0, #0xd8
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0x0
str r0, [r4, #0x30]
pop {r4, pc}
@@ -2072,7 +2072,7 @@ _0201FEA6:
add r1, r4, #0x0
add r1, #0x26
ldrb r1, [r1, #0x0]
- bl FUN_020B502C
+ bl NNS_G2dSetRndCoreAffineOverwriteMode
add r0, r4, #0x0
add r0, #0x27
ldrb r2, [r0, #0x0]
@@ -2084,7 +2084,7 @@ _0201FEA6:
mov r3, #0x2
and r1, r2
and r2, r3
- bl FUN_020B4F38
+ bl NNS_G2dSetRndCoreFlipMode
add r0, r4, #0x0
mov r2, #0x1
add r0, #0x34
@@ -2193,13 +2193,13 @@ _0201FFE4:
ldr r1, [r1, #0x0]
add r0, #0xb4
add r4, #0x40
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
mov r1, #0x0
mvn r1, r1
cmp r0, r1
beq _0202000E
ldr r0, [r4, #0x5c]
- bl FUN_020B4358
+ bl NNS_G2dFreeCellTransferStateHandle
_0202000E:
add r0, r5, #0x0
add r0, #0xec
@@ -2409,11 +2409,11 @@ _0202014A:
lsl r1, r1, #0x10
ldr r0, [r4, #0x4]
lsr r1, r1, #0x10
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x8
- bl FUN_020B1EE4
+ bl NNS_G2dSetCellAnimationSequence
mov r0, #0x1
str r0, [r4, #0x10]
pop {r4, pc}
@@ -2422,11 +2422,11 @@ _02020168:
add r4, #0x40
ldr r0, [r4, #0x6c]
add r1, r3, #0x0
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x8
- bl FUN_020B242C
+ bl NNS_G2dSetAnimSequenceToMCAnimation
mov r0, #0x1
str r0, [r4, #0x10]
pop {r4, pc}
@@ -2459,7 +2459,7 @@ _020201A8:
add r5, #0x40
add r0, r5, #0x0
add r0, #0x8
- bl FUN_020B0448
+ bl NNS_G2dResetAnimCtrlState
mov r0, #0x1
str r0, [r5, #0x10]
add r0, r4, #0x0
@@ -2471,7 +2471,7 @@ _020201C2:
add r5, #0x40
add r0, r5, #0x0
add r0, #0x8
- bl FUN_020B0448
+ bl NNS_G2dResetAnimCtrlState
mov r0, #0x1
str r0, [r5, #0x10]
add r0, r4, #0x0
@@ -2499,12 +2499,12 @@ FUN_020201E4: ; 0x020201E4
_020201F4:
add r0, #0x40
add r0, #0x8
- bl FUN_020B1EC4
+ bl NNS_G2dTickCellAnimation
pop {r3, pc}
_020201FE:
add r0, #0x40
add r0, #0x8
- bl FUN_020B224C
+ bl NNS_G2dTickMCAnimation
pop {r3, pc}
thumb_func_start FUN_02020208
@@ -2520,22 +2520,22 @@ FUN_02020208: ; 0x02020208
_02020218:
add r0, #0x40
add r0, #0x8
- bl FUN_020B1EA4
+ bl NNS_G2dSetCellAnimationCurrentFrame
pop {r3, pc}
_02020222:
add r0, #0x40
add r0, #0x8
- bl FUN_020B2194
+ bl NNS_G2dSetMCAnimationCurrentFrame
pop {r3, pc}
thumb_func_start FUN_0202022C
FUN_0202022C: ; 0x0202022C
- ldr r3, _02020234 ; =FUN_020B04FC
+ ldr r3, _02020234 ; =NNS_G2dGetAnimCtrlCurrentFrame
add r0, #0x40
add r0, #0x8
bx r3
.balign 4
-_02020234: .word FUN_020B04FC
+_02020234: .word NNS_G2dGetAnimCtrlCurrentFrame
thumb_func_start FUN_02020238
FUN_02020238: ; 0x02020238
@@ -2969,12 +2969,12 @@ FUN_0202050C: ; 0x0202050C
add r4, #0x40
ldr r0, [r4, #0x4]
mov r1, #0x0
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
add r4, #0x8
add r1, r0, #0x0
ldr r2, [r5, #0x40]
add r0, r4, #0x0
- bl FUN_020B1F80
+ bl NNS_G2dInitCellAnimation
pop {r3-r5, pc}
.balign 4
@@ -2986,22 +2986,22 @@ FUN_0202052C: ; 0x0202052C
add r4, r6, #0x0
add r4, #0x40
add r5, r0, #0x0
- bl FUN_020B43A4
+ bl NNS_G2dGetNewCellTransferStateHandle
str r0, [r4, #0x5c]
ldr r0, [r4, #0x4]
mov r1, #0x0
ldr r5, [r5, #0x4]
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
str r0, [sp, #0x18]
add r0, r6, #0x0
add r0, #0xb4
mov r1, #0x1
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
add r7, r0, #0x0
add r0, r6, #0x0
add r0, #0xb4
mov r1, #0x2
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
mov r1, #0x0
mvn r1, r1
str r1, [sp, #0x0]
@@ -3018,7 +3018,7 @@ FUN_0202052C: ; 0x0202052C
ldr r2, [r6, #0x40]
ldr r3, [r4, #0x5c]
add r0, #0x8
- bl FUN_020B1EFC
+ bl NNS_G2dInitCellAnimationVramTransfered
add sp, #0x1c
pop {r4-r7, pc}
@@ -3032,10 +3032,10 @@ FUN_02020588: ; 0x02020588
ldr r0, [r4, #0x6c]
add r7, r1, #0x0
mov r1, #0x0
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
str r0, [sp, #0xc]
ldr r0, [r4, #0x68]
- bl FUN_020B23D8
+ bl NNS_G2dGetMCBankNumNodesRequired
add r6, r0, #0x0
mov r1, #0x28
add r0, r7, #0x0
@@ -3058,11 +3058,11 @@ FUN_02020588: ; 0x02020588
ldr r1, [r4, #0x70]
ldr r2, [r4, #0x74]
add r0, #0x8
- bl FUN_020B20C8
+ bl NNS_G2dInitMCAnimation
add r4, #0x8
ldr r1, [sp, #0xc]
add r0, r4, #0x0
- bl FUN_020B242C
+ bl NNS_G2dSetAnimSequenceToMCAnimation
add sp, #0x10
pop {r3-r7, pc}
.balign 4
@@ -3087,7 +3087,7 @@ _02020600:
_02020602:
cmp r4, #0x0
beq _02020612
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r1, r4, #0x0
bl _u32_div_f
pop {r4, pc}
@@ -3115,19 +3115,19 @@ FUN_02020618: ; 0x02020618
ldr r0, [r5, r0]
add r1, #0xb4
add r2, #0xd8
- bl thunk_FUN_020b5040
+ bl NNS_G2dSetRendererImageProxy
mov r0, #0x45
lsl r0, r0, #0x2
ldr r0, [r5, r0]
- bl FUN_020B326C
- bl FUN_020B2B58
+ bl NNS_G2dBeginRendering
+ bl NNS_G2dPushMtx
add r1, r4, #0x0
mov r0, #0x45
add r1, #0x26
lsl r0, r0, #0x2
ldrb r1, [r1, #0x0]
ldr r0, [r5, r0]
- bl FUN_020B502C
+ bl NNS_G2dSetRndCoreAffineOverwriteMode
add r0, r4, #0x0
add r0, #0x26
ldrb r0, [r0, #0x0]
@@ -3143,7 +3143,7 @@ FUN_02020618: ; 0x02020618
mov r3, #0x2
and r1, r2
and r2, r3
- bl FUN_020B4F38
+ bl NNS_G2dSetRndCoreFlipMode
b _0202068E
_02020680:
mov r0, #0x45
@@ -3151,12 +3151,12 @@ _02020680:
mov r1, #0x0
ldr r0, [r5, r0]
add r2, r1, #0x0
- bl FUN_020B4F38
+ bl NNS_G2dSetRndCoreFlipMode
_0202068E:
ldr r0, [sp, #0x0]
ldr r1, [sp, #0x4]
ldr r2, [sp, #0x8]
- bl FUN_020B2A08
+ bl NNS_G2dTranslate
add r0, r4, #0x0
add r0, #0x26
ldrb r0, [r0, #0x0]
@@ -3165,13 +3165,13 @@ _0202068E:
ldr r0, [r4, #0xc]
ldr r1, [r4, #0x10]
ldr r2, [r4, #0x14]
- bl FUN_020B2A08
+ bl NNS_G2dTranslate
ldr r0, [r4, #0x18]
ldr r1, [r4, #0x1c]
ldr r2, [r4, #0x20]
- bl FUN_020B28B4
+ bl NNS_G2dScale
ldrh r0, [r4, #0x24]
- ldr r2, _02020770 ; =UNK_020FFA38
+ ldr r2, _02020770 ; =FX_SinCosTable_
asr r0, r0, #0x4
lsl r1, r0, #0x1
lsl r0, r1, #0x1
@@ -3179,14 +3179,14 @@ _0202068E:
lsl r1, r1, #0x1
ldrsh r0, [r2, r0]
ldrsh r1, [r2, r1]
- bl FUN_020B2794
+ bl NNS_G2dRotZ
ldr r0, [r4, #0xc]
ldr r1, [r4, #0x10]
ldr r2, [r4, #0x14]
neg r0, r0
neg r1, r1
neg r2, r2
- bl FUN_020B2A08
+ bl NNS_G2dTranslate
_020206DC:
add r0, r4, #0x0
add r0, #0x28
@@ -3249,20 +3249,20 @@ _0202074E:
add r4, #0x40
add r4, #0x8
add r0, r4, #0x0
- bl FUN_020B317C
+ bl NNS_G2dDrawCellAnimation
b _02020764
_0202075A:
add r4, #0x40
add r4, #0x8
add r0, r4, #0x0
- bl FUN_020B2D9C
+ bl NNS_G2dDrawMultiCellAnimation
_02020764:
- bl FUN_020B2B08
- bl FUN_020B31F0
+ bl NNS_G2dPopMtx
+ bl NNS_G2dEndRendering
add sp, #0xc
pop {r3-r6, pc}
.balign 4
-_02020770: .word UNK_020FFA38
+_02020770: .word FX_SinCosTable_
thumb_func_start FUN_02020774
FUN_02020774: ; 0x02020774
diff --git a/arm9/asm/unk_02020C44.s b/arm9/asm/unk_02020C44.s
index c1870c5a..4c6cb725 100644
--- a/arm9/asm/unk_02020C44.s
+++ b/arm9/asm/unk_02020C44.s
@@ -1,10 +1,10 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021064B8
- .extern UNK_021064C0
- .extern UNK_021064C4
- .extern UNK_021064BC
+ .extern NNS_GfdDefaultFuncAllocTexVram
+ .extern NNS_GfdDefaultFuncAllocPlttVram
+ .extern NNS_GfdDefaultFuncFreePlttVram
+ .extern NNS_GfdDefaultFuncFreeTexVram
.text
@@ -488,7 +488,7 @@ _02020FA4:
ldr r0, [r4, #0x4]
cmp r0, #0x0
beq _02020FB8
- ldr r1, _02020FE8 ; =UNK_021064BC
+ ldr r1, _02020FE8 ; =NNS_GfdDefaultFuncFreeTexVram
ldr r1, [r1, #0x0]
blx r1
cmp r0, #0x0
@@ -498,7 +498,7 @@ _02020FB8:
ldr r0, [r4, #0x8]
cmp r0, #0x0
beq _02020FCC
- ldr r1, _02020FE8 ; =UNK_021064BC
+ ldr r1, _02020FE8 ; =NNS_GfdDefaultFuncFreeTexVram
ldr r1, [r1, #0x0]
blx r1
cmp r0, #0x0
@@ -508,7 +508,7 @@ _02020FCC:
ldr r0, [r4, #0xc]
cmp r0, #0x0
beq _02020FE0
- ldr r1, _02020FEC ; =UNK_021064C4
+ ldr r1, _02020FEC ; =NNS_GfdDefaultFuncFreePlttVram
ldr r1, [r1, #0x0]
blx r1
cmp r0, #0x0
@@ -519,8 +519,8 @@ _02020FE0:
bl FUN_0202120C
pop {r3-r5, pc}
.balign 4
-_02020FE8: .word UNK_021064BC
-_02020FEC: .word UNK_021064C4
+_02020FE8: .word NNS_GfdDefaultFuncFreeTexVram
+_02020FEC: .word NNS_GfdDefaultFuncFreePlttVram
thumb_func_start FUN_02020FF0
FUN_02020FF0: ; 0x02020FF0
@@ -842,7 +842,7 @@ FUN_02021220: ; 0x02021220
push {r3, lr}
ldr r0, [r0, #0x0]
bl FUN_02020E0C
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
pop {r3, pc}
.balign 4
@@ -858,7 +858,7 @@ FUN_02021230: ; 0x02021230
_02021240:
ldr r0, [r0, #0x10]
_02021242:
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
pop {r3, pc}
thumb_func_start FUN_02021248
@@ -869,17 +869,17 @@ FUN_02021248: ; 0x02021248
str r1, [sp, #0x0]
str r2, [sp, #0x4]
str r3, [sp, #0x8]
- bl FUN_020B7E1C
+ bl NNS_G3dTexGetRequiredSize
add r7, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7E10
+ bl NNS_G3dTex4x4GetRequiredSize
add r6, r0, #0x0
add r0, r5, #0x0
- bl FUN_020B7CE4
+ bl NNS_G3dPlttGetRequiredSize
add r4, r0, #0x0
cmp r7, #0x0
beq _0202127E
- ldr r3, _020212B0 ; =UNK_021064B8
+ ldr r3, _020212B0 ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0x0
ldr r3, [r3, #0x0]
add r0, r7, #0x0
@@ -890,7 +890,7 @@ FUN_02021248: ; 0x02021248
_0202127E:
cmp r6, #0x0
beq _02021292
- ldr r3, _020212B0 ; =UNK_021064B8
+ ldr r3, _020212B0 ; =NNS_GfdDefaultFuncAllocTexVram
add r0, r6, #0x0
ldr r3, [r3, #0x0]
mov r1, #0x1
@@ -901,7 +901,7 @@ _0202127E:
_02021292:
cmp r4, #0x0
beq _020212AC
- ldr r3, _020212B4 ; =UNK_021064C0
+ ldr r3, _020212B4 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0x2
ldrh r2, [r5, #0x20]
lsl r1, r1, #0xe
@@ -916,8 +916,8 @@ _020212AC:
add sp, #0xc
pop {r4-r7, pc}
.balign 4
-_020212B0: .word UNK_021064B8
-_020212B4: .word UNK_021064C0
+_020212B0: .word NNS_GfdDefaultFuncAllocTexVram
+_020212B4: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_020212B8
FUN_020212B8: ; 0x020212B8
@@ -933,10 +933,10 @@ FUN_020212B8: ; 0x020212B8
bl DC_FlushRange
add r0, r4, #0x0
mov r1, #0x1
- bl FUN_020B7D28
+ bl NNS_G3dTexLoad
add r0, r4, #0x0
mov r1, #0x1
- bl FUN_020B7C78
+ bl NNS_G3dPlttLoad
pop {r4, pc}
.balign 4
@@ -945,10 +945,10 @@ FUN_020212E4: ; 0x020212E4
push {r3-r5, lr}
add r5, r0, #0x0
add r4, r3, #0x0
- bl FUN_020B7DFC
+ bl NNS_G3dTexSetTexKey
add r0, r5, #0x0
add r1, r4, #0x0
- bl FUN_020B7CDC
+ bl NNS_G3dPlttSetPlttKey
pop {r3-r5, pc}
thumb_func_start FUN_020212F8
@@ -958,9 +958,9 @@ FUN_020212F8: ; 0x020212F8
add r4, r0, #0x0
add r1, sp, #0x4
add r2, sp, #0x0
- bl FUN_020B7CF0
+ bl NNS_G3dTexReleaseTexKey
add r0, r4, #0x0
- bl FUN_020B7C58
+ bl NNS_G3dPlttReleasePlttKey
add sp, #0x8
pop {r4, pc}
@@ -986,7 +986,7 @@ FUN_02021310: ; 0x02021310
FUN_02021334: ; 0x02021334
push {r3-r5, lr}
add r5, r0, #0x0
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
add r4, r0, #0x0
bne _02021344
bl ErrorHandling
diff --git a/arm9/asm/unk_0202134C.s b/arm9/asm/unk_0202134C.s
index 30aa1d51..b45f4e91 100644
--- a/arm9/asm/unk_0202134C.s
+++ b/arm9/asm/unk_0202134C.s
@@ -8,7 +8,7 @@ FUN_0202134C: ; 0x0202134C
push {r3-r5, lr}
add r5, r0, #0x0
add r4, r1, #0x0
- bl FUN_020B33A0
+ bl NNS_G2dInitRenderer
add r5, #0x80
str r4, [r5, #0x0]
pop {r3-r5, pc}
@@ -20,7 +20,7 @@ FUN_0202135C: ; 0x0202135C
add r4, r1, #0x0
add r6, r2, #0x0
add r7, r3, #0x0
- bl FUN_020B3334
+ bl NNS_G2dInitRenderSurface
add r2, r5, #0x0
ldmia r4!, {r0-r1}
stmia r2!, {r0-r1}
@@ -36,7 +36,7 @@ FUN_0202135C: ; 0x0202135C
cmp r0, #0x0
beq _0202138C
add r1, r5, #0x0
- bl FUN_020B3390
+ bl NNS_G2dAddRendererTargetSurface
_0202138C:
pop {r3-r7, pc}
.balign 4
diff --git a/arm9/asm/unk_02022318.s b/arm9/asm/unk_02022318.s
index cf87cdb9..9564742c 100644
--- a/arm9/asm/unk_02022318.s
+++ b/arm9/asm/unk_02022318.s
@@ -15,7 +15,7 @@ FUN_02022318: ; 0x02022318
bl AllocFromHeap
add r4, r0, #0x0
str r6, [r4, #0x0]
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
mov r1, #0x2
ldr r0, _020223B8 ; =0x04000540
@@ -23,7 +23,7 @@ FUN_02022318: ; 0x02022318
str r1, [r0, #0x0]
bne _02022364
lsl r0, r5, #0x7
- bl FUN_020AFA28
+ bl NNS_GfdGetLnkTexVramManagerWorkSize
add r6, r0, #0x0
ldr r0, [r4, #0x0]
add r1, r6, #0x0
@@ -35,20 +35,20 @@ FUN_02022318: ; 0x02022318
lsl r0, r5, #0x11
mov r1, #0x0
add r3, r6, #0x0
- bl FUN_020AF9C4
+ bl NNS_GfdInitLnkTexVramManager
b _0202236E
_02022364:
lsl r0, r5, #0x10
lsr r0, r0, #0x10
mov r1, #0x1
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
_0202236E:
ldr r0, [sp, #0x4]
cmp r0, #0x0
bne _02022398
ldr r0, [sp, #0x20]
lsl r0, r0, #0x8
- bl FUN_020AFBFC
+ bl NNS_GfdGetLnkPlttVramManagerWorkSize
add r5, r0, #0x0
ldr r0, [r4, #0x0]
add r1, r5, #0x0
@@ -59,14 +59,14 @@ _0202236E:
lsl r0, r0, #0xd
add r2, r5, #0x0
mov r3, #0x1
- bl FUN_020AFBA8
+ bl NNS_GfdInitLnkPlttVramManager
b _020223A4
_02022398:
ldr r0, [sp, #0x20]
mov r1, #0x1
lsl r0, r0, #0x1d
lsr r0, r0, #0x10
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
_020223A4:
ldr r0, [sp, #0x24]
cmp r0, #0x0
diff --git a/arm9/asm/unk_02033B68.s b/arm9/asm/unk_02033B68.s
index 39125d06..9e204377 100644
--- a/arm9/asm/unk_02033B68.s
+++ b/arm9/asm/unk_02033B68.s
@@ -333,7 +333,7 @@ FUN_02033D3C: ; 0x02033D3C
bl DC_FlushRange
ldr r0, [sp, #0x4]
add r1, sp, #0x0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r5, #0x1
bne _02033D80
ldr r0, [sp, #0x0]
@@ -386,7 +386,7 @@ _02033DC8:
bl DC_FlushRange
ldr r0, [sp, #0x4]
add r1, sp, #0x0
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
cmp r5, #0x1
bne _02033DF0
mov r0, #0x1
diff --git a/arm9/asm/unk_02053750.s b/arm9/asm/unk_02053750.s
index 4724c308..0cf428b2 100644
--- a/arm9/asm/unk_02053750.s
+++ b/arm9/asm/unk_02053750.s
@@ -1,7 +1,7 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_020FFA38
+ .extern FX_SinCosTable_
.section .rodata
.global UNK_020F5C04
@@ -1320,7 +1320,7 @@ FUN_020540E8: ; 0x020540E8
ldr r1, [sp, #0x4]
asr r0, r0, #0x4
lsl r5, r0, #0x2
- ldr r0, _02054164 ; =UNK_020FFA38
+ ldr r0, _02054164 ; =FX_SinCosTable_
ldrsh r5, [r0, r5]
asr r0, r5, #0x1f
lsr r6, r5, #0x10
@@ -1363,7 +1363,7 @@ _0205415E:
add sp, #0xc
pop {r3-r6, pc}
.balign 4
-_02054164: .word UNK_020FFA38
+_02054164: .word FX_SinCosTable_
thumb_func_start FUN_02054168
FUN_02054168: ; 0x02054168
@@ -1801,7 +1801,7 @@ _0205447E:
ldr r6, [sp, #0x4]
asr r0, r0, #0x4
lsl r1, r0, #0x2
- ldr r0, _02054500 ; =UNK_020FFA38
+ ldr r0, _02054500 ; =FX_SinCosTable_
ldrsh r0, [r0, r1]
asr r3, r0, #0x1f
lsr r1, r0, #0xf
@@ -1851,7 +1851,7 @@ _020544F8:
add sp, #0xc
pop {r4-r7, pc}
nop
-_02054500: .word UNK_020FFA38
+_02054500: .word FX_SinCosTable_
_02054504: .word 0x00000666
thumb_func_start FUN_02054508
diff --git a/arm9/asm/unk_020607D4.s b/arm9/asm/unk_020607D4.s
index 45fc311a..c017c561 100644
--- a/arm9/asm/unk_020607D4.s
+++ b/arm9/asm/unk_020607D4.s
@@ -556,7 +556,7 @@ _02060BF6:
add r0, r4, #0x0
bl MOD05_021F4BD0
ldr r0, [r0, #0x0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r2, sp, #0x20
mov r3, #0x0
diff --git a/arm9/asm/unk_0206DE24.s b/arm9/asm/unk_0206DE24.s
index 0bc45eb2..32d784c4 100644
--- a/arm9/asm/unk_0206DE24.s
+++ b/arm9/asm/unk_0206DE24.s
@@ -1,8 +1,8 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021064C0
- .extern UNK_021064B8
+ .extern NNS_GfdDefaultFuncAllocPlttVram
+ .extern NNS_GfdDefaultFuncAllocTexVram
.text
@@ -128,14 +128,14 @@ _0206DF14: .word 0x04000580
thumb_func_start FUN_0206DF18
FUN_0206DF18: ; 0x0206DF18
push {r3-r5, lr}
- ldr r3, _0206DF50 ; =UNK_021064B8
+ ldr r3, _0206DF50 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #0x2
mov r1, #0x0
ldr r3, [r3, #0x0]
lsl r0, r0, #0xe
add r2, r1, #0x0
blx r3
- ldr r3, _0206DF54 ; =UNK_021064C0
+ ldr r3, _0206DF54 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0x0
add r4, r0, #0x0
ldr r3, [r3, #0x0]
@@ -154,8 +154,8 @@ _0206DF48:
bl FUN_02012CC8
pop {r3-r5, pc}
nop
-_0206DF50: .word UNK_021064B8
-_0206DF54: .word UNK_021064C0
+_0206DF50: .word NNS_GfdDefaultFuncAllocTexVram
+_0206DF54: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_0206DF58
FUN_0206DF58: ; 0x0206DF58
@@ -165,7 +165,7 @@ FUN_0206DF58: ; 0x0206DF58
cmp r0, #0x0
ble _0206DF6E
bl FUN_020222AC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
_0206DF6E:
bl FUN_02013388
mov r0, #0x1
@@ -176,7 +176,7 @@ _0206DF6E:
thumb_func_start FUN_0206DF7C
FUN_0206DF7C: ; 0x0206DF7C
push {r4, lr}
- ldr r3, _0206DF94 ; =UNK_021064B8
+ ldr r3, _0206DF94 ; =NNS_GfdDefaultFuncAllocTexVram
mov r2, #0x0
ldr r3, [r3, #0x0]
blx r3
@@ -186,12 +186,12 @@ FUN_0206DF7C: ; 0x0206DF7C
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_0206DF94: .word UNK_021064B8
+_0206DF94: .word NNS_GfdDefaultFuncAllocTexVram
thumb_func_start FUN_0206DF98
FUN_0206DF98: ; 0x0206DF98
push {r4, lr}
- ldr r3, _0206DFB0 ; =UNK_021064C0
+ ldr r3, _0206DFB0 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r2, #0x0
ldr r3, [r3, #0x0]
blx r3
@@ -201,7 +201,7 @@ FUN_0206DF98: ; 0x0206DF98
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_0206DFB0: .word UNK_021064C0
+_0206DFB0: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_0206DFB4
FUN_0206DFB4: ; 0x0206DFB4
diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s
index 1a62b92b..a50d92bf 100644
--- a/arm9/asm/unk_0206F3FC.s
+++ b/arm9/asm/unk_0206F3FC.s
@@ -1274,7 +1274,7 @@ FUN_0206FD24: ; 0x0206FD24
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x10
add r4, r0, #0x0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r2, [sp, #0x10]
mov r0, #0x3
ldr r1, [r2, #0xc]
@@ -6204,7 +6204,7 @@ FUN_020724D4: ; 0x020724D4
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0xc
str r0, [sp, #0x8]
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r0, [sp, #0xc]
mov r4, #0x0
str r0, [sp, #0x4]
diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s
index 16a7190f..703233b3 100644
--- a/arm9/asm/unk_020772F0.s
+++ b/arm9/asm/unk_020772F0.s
@@ -2418,7 +2418,7 @@ FUN_02078140: ; 0x02078140
push {r4-r7, lr}
sub sp, #0x14
add r5, r0, #0x0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0x0
str r0, [sp, #0x0]
mov r1, #0x80
diff --git a/arm9/asm/unk_020799E8.s b/arm9/asm/unk_020799E8.s
index 7f35d1a7..9227ca82 100644
--- a/arm9/asm/unk_020799E8.s
+++ b/arm9/asm/unk_020799E8.s
@@ -264,7 +264,7 @@ FUN_02079B60: ; 0x02079B60
_02079B9A:
add r0, r7, #0x0
add r1, sp, #0x10
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
cmp r4, #0x0
bne _02079BAE
ldr r0, [sp, #0x10]
@@ -286,7 +286,7 @@ _02079BAE:
_02079BC6:
add r0, r7, #0x0
add r1, sp, #0xc
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
cmp r4, #0x0
bne _02079BDA
ldr r0, [sp, #0xc]
@@ -322,7 +322,7 @@ _02079BF8:
_02079C10:
add r0, r7, #0x0
add r1, sp, #0x8
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r4, #0x0
bne _02079C24
ldr r0, [sp, #0x8]
@@ -363,6 +363,6 @@ FUN_02079C40: ; 0x02079C40
bl NARC_ReadWholeMember
add r0, r4, #0x0
add r1, r7, #0x0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
add r0, r4, #0x0
pop {r3-r7, pc}
diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s
index 617a122a..625807ae 100644
--- a/arm9/asm/unk_02079C70.s
+++ b/arm9/asm/unk_02079C70.s
@@ -2750,7 +2750,7 @@ _0207B256:
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0xc
add r4, r0, #0x0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
mov r3, #0x0
str r3, [sp, #0x0]
mov r0, #0x20
diff --git a/arm9/asm/unk_0207EF6C.s b/arm9/asm/unk_0207EF6C.s
index 8fcaed0c..e4e29259 100644
--- a/arm9/asm/unk_0207EF6C.s
+++ b/arm9/asm/unk_0207EF6C.s
@@ -99,7 +99,7 @@ UNK_020FB6E6: ; 0x020FB6E6
FUN_0207EF6C: ; 0x0207EF6C
push {r3-r4, lr}
sub sp, #0x4
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_Init
bl G3X_InitMtxStack
ldr r0, _0207EFEC ; =0x04000060
@@ -183,16 +183,16 @@ FUN_0207F008: ; 0x0207F008
mov r0, #0x2
str r0, [r2, #0x0]
str r3, [r1, #0x0]
- bl FUN_020B849C
+ bl NNS_G3dGlbFlushP
mov r0, #0xb7
lsl r0, r0, #0x2
add r0, r4, r0
bl FUN_0207F108
- bl FUN_020B849C
+ bl NNS_G3dGlbFlushP
add r0, r4, #0x0
bl FUN_0207F1A4
_0207F046:
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
mov r0, #0xae
lsl r0, r0, #0x2
ldr r0, [r4, r0]
diff --git a/arm9/asm/unk_02086414.s b/arm9/asm/unk_02086414.s
index 94945259..7ae62351 100644
--- a/arm9/asm/unk_02086414.s
+++ b/arm9/asm/unk_02086414.s
@@ -1,8 +1,8 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_021064B8
- .extern UNK_021064C0
+ .extern NNS_GfdDefaultFuncAllocTexVram
+ .extern NNS_GfdDefaultFuncAllocPlttVram
.section .rodata
@@ -217,14 +217,14 @@ _02086508: .word 0x04000580
thumb_func_start FUN_0208650C
FUN_0208650C: ; 0x0208650C
push {r3-r5, lr}
- ldr r3, _02086544 ; =UNK_021064B8
+ ldr r3, _02086544 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #0x2
mov r1, #0x0
ldr r3, [r3, #0x0]
lsl r0, r0, #0xe
add r2, r1, #0x0
blx r3
- ldr r3, _02086548 ; =UNK_021064C0
+ ldr r3, _02086548 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0x0
add r4, r0, #0x0
ldr r3, [r3, #0x0]
@@ -243,8 +243,8 @@ _0208653C:
bl FUN_02012CC8
pop {r3-r5, pc}
nop
-_02086544: .word UNK_021064B8
-_02086548: .word UNK_021064C0
+_02086544: .word NNS_GfdDefaultFuncAllocTexVram
+_02086548: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_0208654C
FUN_0208654C: ; 0x0208654C
@@ -400,7 +400,7 @@ FUN_02086698: ; 0x02086698
cmp r0, #0x0
ble _020866AE
bl FUN_020222AC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
_020866AE:
bl FUN_02013388
mov r0, #0x1
@@ -845,7 +845,7 @@ FUN_020869F0: ; 0x020869F0
thumb_func_start FUN_02086A48
FUN_02086A48: ; 0x02086A48
push {r4, lr}
- ldr r3, _02086A60 ; =UNK_021064B8
+ ldr r3, _02086A60 ; =NNS_GfdDefaultFuncAllocTexVram
mov r2, #0x0
ldr r3, [r3, #0x0]
blx r3
@@ -855,12 +855,12 @@ FUN_02086A48: ; 0x02086A48
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02086A60: .word UNK_021064B8
+_02086A60: .word NNS_GfdDefaultFuncAllocTexVram
thumb_func_start FUN_02086A64
FUN_02086A64: ; 0x02086A64
push {r4, lr}
- ldr r3, _02086A7C ; =UNK_021064C0
+ ldr r3, _02086A7C ; =NNS_GfdDefaultFuncAllocPlttVram
mov r2, #0x0
ldr r3, [r3, #0x0]
blx r3
@@ -870,7 +870,7 @@ FUN_02086A64: ; 0x02086A64
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02086A7C: .word UNK_021064C0
+_02086A7C: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start FUN_02086A80
FUN_02086A80: ; 0x02086A80
diff --git a/arm9/asm/unk_0208AC14.s b/arm9/asm/unk_0208AC14.s
index 4d334a19..2f1ab9a6 100644
--- a/arm9/asm/unk_0208AC14.s
+++ b/arm9/asm/unk_0208AC14.s
@@ -1,9 +1,9 @@
.include "asm/macros.inc"
.include "global.inc"
- .extern UNK_020FFA38
- .extern UNK_021064B8
- .extern UNK_021064C0
+ .extern FX_SinCosTable_
+ .extern NNS_GfdDefaultFuncAllocTexVram
+ .extern NNS_GfdDefaultFuncAllocPlttVram
.section .data
.global UNK_02106158
@@ -773,7 +773,7 @@ _0208B60C:
FUN_0208B630: ; 0x0208B630
stmdb sp!, {lr}
sub sp, sp, #0x4
- ldr r3, _0208B660 ; =UNK_021064C0
+ ldr r3, _0208B660 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r2, #0x0
ldr r3, [r3, #0x0]
blx r3
@@ -784,14 +784,14 @@ FUN_0208B630: ; 0x0208B630
ldmia sp!, {lr}
bx lr
.balign 4
-_0208B660: .word UNK_021064C0
+_0208B660: .word NNS_GfdDefaultFuncAllocPlttVram
_0208B664: .word 0x0000FFFF
arm_func_start FUN_0208B668
FUN_0208B668: ; 0x0208B668
stmdb sp!, {lr}
sub sp, sp, #0x4
- ldr r3, _0208B698 ; =UNK_021064B8
+ ldr r3, _0208B698 ; =NNS_GfdDefaultFuncAllocTexVram
mov r2, #0x0
ldr r3, [r3, #0x0]
blx r3
@@ -802,7 +802,7 @@ FUN_0208B668: ; 0x0208B668
ldmia sp!, {lr}
bx lr
.balign 4
-_0208B698: .word UNK_021064B8
+_0208B698: .word NNS_GfdDefaultFuncAllocTexVram
_0208B69C: .word 0x0000FFFF
arm_func_start FUN_0208B6A0
@@ -1823,7 +1823,7 @@ FUN_0208C4F4: ; 0x0208C4F4
ldr r0, [r5, #0x40]
ldrh r1, [r4, #0x20]
ldr r0, [r0, #0x20]
- ldr r6, _0208C954 ; =UNK_020FFA38
+ ldr r6, _0208C954 ; =FX_SinCosTable_
ldr r0, [r0, #0x14]
mov r1, r1, asr #0x4
ldrh r0, [r0, #0x0]
@@ -2087,7 +2087,7 @@ _0208C8BC:
bx lr
.balign 4
_0208C950: .word 0x040004A4
-_0208C954: .word UNK_020FFA38
+_0208C954: .word FX_SinCosTable_
_0208C958: .word UNK_02106160
_0208C95C: .word 0x00000CCD
_0208C960: .word 0xFFFFF333
@@ -2125,7 +2125,7 @@ FUN_0208C974: ; 0x0208C974
ldr r0, [r5, #0x40]
ldrh r1, [r4, #0x20]
ldr r0, [r0, #0x20]
- ldr r6, _0208CDD0 ; =UNK_020FFA38
+ ldr r6, _0208CDD0 ; =FX_SinCosTable_
ldr r0, [r0, #0x0]
mov r1, r1, asr #0x4
mov r2, r1, lsl #0x1
@@ -2388,7 +2388,7 @@ _0208CD38:
bx lr
.balign 4
_0208CDCC: .word 0x040004A4
-_0208CDD0: .word UNK_020FFA38
+_0208CDD0: .word FX_SinCosTable_
_0208CDD4: .word UNK_02106160
_0208CDD8: .word 0x00000CCD
_0208CDDC: .word 0xFFFFF333
@@ -2426,7 +2426,7 @@ FUN_0208CDF0: ; 0x0208CDF0
ldr r0, [r5, #0x40]
ldrh r1, [r4, #0x20]
ldr r0, [r0, #0x20]
- ldr r6, _0208D128 ; =UNK_020FFA38
+ ldr r6, _0208D128 ; =FX_SinCosTable_
ldr r0, [r0, #0x14]
mov r1, r1, asr #0x4
ldrh r0, [r0, #0x0]
@@ -2612,7 +2612,7 @@ _0208D090:
bx lr
.balign 4
_0208D124: .word 0x040004A4
-_0208D128: .word UNK_020FFA38
+_0208D128: .word FX_SinCosTable_
_0208D12C: .word UNK_02106160
_0208D130: .word 0x04000454
_0208D134: .word 0x04000470
@@ -2648,7 +2648,7 @@ FUN_0208D140: ; 0x0208D140
ldr r0, [r5, #0x40]
ldrh r1, [r4, #0x20]
ldr r0, [r0, #0x20]
- ldr r6, _0208D478 ; =UNK_020FFA38
+ ldr r6, _0208D478 ; =FX_SinCosTable_
ldr r0, [r0, #0x0]
mov r1, r1, asr #0x4
mov r2, r1, lsl #0x1
@@ -2834,7 +2834,7 @@ _0208D3E0:
bx lr
.balign 4
_0208D474: .word 0x040004A4
-_0208D478: .word UNK_020FFA38
+_0208D478: .word FX_SinCosTable_
_0208D47C: .word UNK_02106160
_0208D480: .word 0x04000454
_0208D484: .word 0x04000470
@@ -3854,7 +3854,7 @@ _0208E39C:
str r3, [sp, #0x8]
bl MTX_MultVec43
ldrh r0, [r6, #0x20]
- ldr r2, _0208E69C ; =UNK_020FFA38
+ ldr r2, _0208E69C ; =FX_SinCosTable_
mov r9, #0x0
mov r0, r0, asr #0x4
mov r3, r0, lsl #0x1
@@ -3935,7 +3935,7 @@ _0208E4BC:
str r3, [sp, #0x8]
bl MTX_MultVec43
ldrh r0, [r6, #0x20]
- ldr r2, _0208E69C ; =UNK_020FFA38
+ ldr r2, _0208E69C ; =FX_SinCosTable_
mov lr, #0x0
mov r0, r0, asr #0x4
mov r3, r0, lsl #0x1
@@ -4029,7 +4029,7 @@ _0208E620:
bx lr
.balign 4
_0208E698: .word 0x040004A4
-_0208E69C: .word UNK_020FFA38
+_0208E69C: .word FX_SinCosTable_
_0208E6A0: .word 0x04000454
_0208E6A4: .word 0x04000470
_0208E6A8: .word 0x04000480
@@ -4139,7 +4139,7 @@ _0208E7E0:
str r3, [sp, #0x8]
bl MTX_MultVec43
ldrh r0, [r8, #0x20]
- ldr r2, _0208EAE8 ; =UNK_020FFA38
+ ldr r2, _0208EAE8 ; =FX_SinCosTable_
ldr r12, [sp, #0x0]
mov r0, r0, asr #0x4
mov r3, r0, lsl #0x1
@@ -4220,7 +4220,7 @@ _0208E90C:
str r3, [sp, #0x8]
bl MTX_MultVec43
ldrh r0, [r8, #0x20]
- ldr r2, _0208EAE8 ; =UNK_020FFA38
+ ldr r2, _0208EAE8 ; =FX_SinCosTable_
mov r8, #0x0
mov r0, r0, asr #0x4
mov r3, r0, lsl #0x1
@@ -4313,7 +4313,7 @@ _0208EA70:
bx lr
.balign 4
_0208EAE4: .word 0x040004A4
-_0208EAE8: .word UNK_020FFA38
+_0208EAE8: .word FX_SinCosTable_
_0208EAEC: .word 0x04000454
_0208EAF0: .word 0x04000470
_0208EAF4: .word 0x04000480
@@ -4846,12 +4846,12 @@ _0208F294:
add r1, r1, #0x10000
mov r2, r0, lsl #0x1
str r1, [sp, #0x18]
- ldr r0, _0208FD98 ; =UNK_020FFA38
+ ldr r0, _0208FD98 ; =FX_SinCosTable_
mov r1, r2, lsl #0x1
ldrsh r0, [r0, r1]
add r1, r2, #0x1
mov r2, r1, lsl #0x1
- ldr r1, _0208FD98 ; =UNK_020FFA38
+ ldr r1, _0208FD98 ; =FX_SinCosTable_
ldrsh r3, [r1, r2]
ldr r2, [r9, #0x5c]
mov r1, #0x800
@@ -5562,7 +5562,7 @@ _0208FD88: .word 0x00000FFF
_0208FD8C: .word UNK_021C8C5C
_0208FD90: .word 0x5EEDF715
_0208FD94: .word 0x1B0CB173
-_0208FD98: .word UNK_020FFA38
+_0208FD98: .word FX_SinCosTable_
_0208FD9C: .word 0x00000003
_0208FDA0: .word 0xAAAAAAAB
_0208FDA4: .word 0x0000FFFF
@@ -6265,7 +6265,7 @@ FUN_02090780: ; 0x02090780
b _02090838
_020907AC:
ldrh r1, [r0, #0x0]
- ldr r3, _02090854 ; =UNK_020FFA38
+ ldr r3, _02090854 ; =FX_SinCosTable_
add r0, sp, #0x0
mov r1, r1, asr #0x4
mov r2, r1, lsl #0x1
@@ -6278,7 +6278,7 @@ _020907AC:
b _02090838
_020907DC:
ldrh r1, [r0, #0x0]
- ldr r3, _02090854 ; =UNK_020FFA38
+ ldr r3, _02090854 ; =FX_SinCosTable_
add r0, sp, #0x0
mov r1, r1, asr #0x4
mov r2, r1, lsl #0x1
@@ -6291,7 +6291,7 @@ _020907DC:
b _02090838
_0209080C:
ldrh r1, [r0, #0x0]
- ldr r3, _02090854 ; =UNK_020FFA38
+ ldr r3, _02090854 ; =FX_SinCosTable_
add r0, sp, #0x0
mov r1, r1, asr #0x4
mov r2, r1, lsl #0x1
@@ -6310,7 +6310,7 @@ _02090838:
ldmia sp!, {r4,lr}
bx lr
.balign 4
-_02090854: .word UNK_020FFA38
+_02090854: .word FX_SinCosTable_
arm_func_start FUN_02090858
FUN_02090858: ; 0x02090858
diff --git a/arm9/asm/unk_020ADA84.s b/arm9/asm/unk_020ADA84.s
deleted file mode 100644
index 29fddc4a..00000000
--- a/arm9/asm/unk_020ADA84.s
+++ /dev/null
@@ -1,23258 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern SNDi_DecibelTable
- .extern GXi_DmaId
-
- .section .rodata
-
- .global UNK_020FF7CC
-UNK_020FF7CC: ; 0x020FF7CC
- .word FUN_020AE894
- .word FUN_020AE884
-
- .global UNK_020FF7D4
-UNK_020FF7D4: ; 0x020FF7D4
- .word FUN_020AF2B4
- .word FUN_020AF288
- .word FUN_020AF25C
- .word FUN_020AF230
- .word GX_LoadBG0Char_2
- .word GX_LoadBG1Char_2
- .word GX_LoadBG2Char_2
- .word GX_LoadBG3Char_2
- .word GX_LoadBG0Scr_2
- .word GX_LoadBG1Scr_2
- .word GX_LoadBG2Scr_2
- .word GX_LoadBG3Scr_2
- .word GX_LoadBG2Scr_3
- .word GX_LoadBG3Scr_3
- .word GX_LoadOBJPltt_2
- .word GX_LoadBGPltt_2
- .word FUN_020AF174
- .word FUN_020AF148
- .word GX_LoadOAM_2
- .word GX_LoadOBJ_2
- .word GXS_LoadBG0Char_2
- .word GXS_LoadBG1Char_2
- .word GXS_LoadBG2Char_2
- .word GXS_LoadBG3Char_2
- .word GXS_LoadBG0Scr_2
- .word GXS_LoadBG1Scr_2
- .word GXS_LoadBG2Scr_2
- .word GXS_LoadBG3Scr_2
- .word GXS_LoadBG2Scr_3
- .word GXS_LoadBG3Scr_3
- .word GXS_LoadOBJPltt_2
- .word GXS_LoadBGPltt_2
- .word FUN_020AF074
- .word FUN_020AF048
- .word GXS_LoadOAM_2
- .word GXS_LoadOBJ_2
-
- .global UNK_020FF864
-UNK_020FF864: ; 0x020FF864
- .byte 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_020FF894
-UNK_020FF894: ; 0x020FF894
- .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00
- .byte 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00
-
- .global UNK_020FF8AC
-UNK_020FF8AC: ; 0x020FF8AC
- .byte 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x40, 0x00
- .byte 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00
-
- .global UNK_020FF8C4
-UNK_020FF8C4: ; 0x020FF8C4
- .byte 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00
-
- .global UNK_020FF8D0
-UNK_020FF8D0: ; 0x020FF8D0
- .byte 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
-
- .global UNK_020FF8D8
-UNK_020FF8D8: ; 0x020FF8D8
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
- .byte 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00
-
- .global UNK_020FF8F8
-UNK_020FF8F8: ; 0x020FF8F8
- .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
-
- .global UNK_020FF928
-UNK_020FF928: ; 0x020FF928
- .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
-
- .global UNK_020FF958
-UNK_020FF958: ; 0x020FF958
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_020FF970
-UNK_020FF970: ; 0x020FF970
- .byte 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x01
- .byte 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x03, 0x03, 0x03
-
- .global UNK_020FF990
-UNK_020FF990: ; 0x020FF990
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x80, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0xC0
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0
-
- .global UNK_020FF9D0
-UNK_020FF9D0: ; 0x020FF9D0
- .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xFF, 0x7F, 0xFF, 0x7F
- .byte 0x00, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F
-
- .global UNK_020FF9F0
-UNK_020FF9F0: ; 0x020FF9F0
- .byte 0x04
-
- .global UNK_020FF9F1
-UNK_020FF9F1: ; 0x020FF9F1
- .byte 0x05
-
- .global UNK_020FF9F2
-UNK_020FF9F2: ; 0x020FF9F2
- .byte 0x07
-
- .global UNK_020FF9F3
-UNK_020FF9F3: ; 0x020FF9F3
- .byte 0x08, 0x03, 0x05, 0x06, 0x08, 0x03, 0x04, 0x06, 0x07, 0x01, 0x02, 0x07, 0x08, 0x00, 0x02, 0x06
- .byte 0x08, 0x00, 0x01, 0x06, 0x07, 0x01, 0x02, 0x04, 0x05, 0x00, 0x02, 0x03, 0x05, 0x00, 0x01, 0x03
- .byte 0x04
-
- .global UNK_020FFA14
-UNK_020FFA14: ; 0x020FFA14
- .byte 0x04
-
- .global UNK_020FFA15
-UNK_020FFA15: ; 0x020FFA15
- .byte 0x05
-
- .global UNK_020FFA16
-UNK_020FFA16: ; 0x020FFA16
- .byte 0x07
-
- .global UNK_020FFA17
-UNK_020FFA17: ; 0x020FFA17
- .byte 0x08, 0x03, 0x05, 0x06, 0x08, 0x03, 0x04, 0x06, 0x07, 0x01, 0x02, 0x07, 0x08, 0x00, 0x02, 0x06
- .byte 0x08, 0x00, 0x01, 0x06, 0x07, 0x01, 0x02, 0x04, 0x05, 0x00, 0x02, 0x03, 0x05, 0x00, 0x01, 0x03
- .byte 0x04
-
- .global UNK_020FFA38
-UNK_020FFA38: ; 0x020FFA38
- .byte 0x00, 0x00, 0x00, 0x10, 0x06, 0x00, 0x00, 0x10, 0x0D, 0x00, 0x00, 0x10, 0x13, 0x00, 0x00, 0x10,
- .byte 0x19, 0x00, 0x00, 0x10, 0x1F, 0x00, 0x00, 0x10, 0x26, 0x00, 0x00, 0x10, 0x2C, 0x00, 0x00, 0x10,
- .byte 0x32, 0x00, 0x00, 0x10, 0x39, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x10, 0x45, 0x00, 0xFF, 0x0F,
- .byte 0x4B, 0x00, 0xFF, 0x0F, 0x52, 0x00, 0xFF, 0x0F, 0x58, 0x00, 0xFF, 0x0F, 0x5E, 0x00, 0xFF, 0x0F,
- .byte 0x65, 0x00, 0xFF, 0x0F, 0x6B, 0x00, 0xFF, 0x0F, 0x71, 0x00, 0xFE, 0x0F, 0x77, 0x00, 0xFE, 0x0F,
- .byte 0x7E, 0x00, 0xFE, 0x0F, 0x84, 0x00, 0xFE, 0x0F, 0x8A, 0x00, 0xFE, 0x0F, 0x90, 0x00, 0xFD, 0x0F,
- .byte 0x97, 0x00, 0xFD, 0x0F, 0x9D, 0x00, 0xFD, 0x0F, 0xA3, 0x00, 0xFD, 0x0F, 0xAA, 0x00, 0xFC, 0x0F,
- .byte 0xB0, 0x00, 0xFC, 0x0F, 0xB6, 0x00, 0xFC, 0x0F, 0xBC, 0x00, 0xFC, 0x0F, 0xC3, 0x00, 0xFB, 0x0F,
- .byte 0xC9, 0x00, 0xFB, 0x0F, 0xCF, 0x00, 0xFB, 0x0F, 0xD6, 0x00, 0xFA, 0x0F, 0xDC, 0x00, 0xFA, 0x0F,
- .byte 0xE2, 0x00, 0xFA, 0x0F, 0xE8, 0x00, 0xF9, 0x0F, 0xEF, 0x00, 0xF9, 0x0F, 0xF5, 0x00, 0xF9, 0x0F,
- .byte 0xFB, 0x00, 0xF8, 0x0F, 0x01, 0x01, 0xF8, 0x0F, 0x08, 0x01, 0xF8, 0x0F, 0x0E, 0x01, 0xF7, 0x0F,
- .byte 0x14, 0x01, 0xF7, 0x0F, 0x1B, 0x01, 0xF6, 0x0F, 0x21, 0x01, 0xF6, 0x0F, 0x27, 0x01, 0xF5, 0x0F,
- .byte 0x2D, 0x01, 0xF5, 0x0F, 0x34, 0x01, 0xF4, 0x0F, 0x3A, 0x01, 0xF4, 0x0F, 0x40, 0x01, 0xF3, 0x0F,
- .byte 0x46, 0x01, 0xF3, 0x0F, 0x4D, 0x01, 0xF2, 0x0F, 0x53, 0x01, 0xF2, 0x0F, 0x59, 0x01, 0xF1, 0x0F,
- .byte 0x5F, 0x01, 0xF1, 0x0F, 0x66, 0x01, 0xF0, 0x0F, 0x6C, 0x01, 0xF0, 0x0F, 0x72, 0x01, 0xEF, 0x0F,
- .byte 0x78, 0x01, 0xEF, 0x0F, 0x7F, 0x01, 0xEE, 0x0F, 0x85, 0x01, 0xED, 0x0F, 0x8B, 0x01, 0xED, 0x0F,
- .byte 0x91, 0x01, 0xEC, 0x0F, 0x98, 0x01, 0xEC, 0x0F, 0x9E, 0x01, 0xEB, 0x0F, 0xA4, 0x01, 0xEA, 0x0F,
- .byte 0xAA, 0x01, 0xEA, 0x0F, 0xB1, 0x01, 0xE9, 0x0F, 0xB7, 0x01, 0xE8, 0x0F, 0xBD, 0x01, 0xE8, 0x0F,
- .byte 0xC3, 0x01, 0xE7, 0x0F, 0xCA, 0x01, 0xE6, 0x0F, 0xD0, 0x01, 0xE6, 0x0F, 0xD6, 0x01, 0xE5, 0x0F,
- .byte 0xDC, 0x01, 0xE4, 0x0F, 0xE3, 0x01, 0xE3, 0x0F, 0xE9, 0x01, 0xE3, 0x0F, 0xEF, 0x01, 0xE2, 0x0F,
- .byte 0xF5, 0x01, 0xE1, 0x0F, 0xFC, 0x01, 0xE0, 0x0F, 0x02, 0x02, 0xE0, 0x0F, 0x08, 0x02, 0xDF, 0x0F,
- .byte 0x0E, 0x02, 0xDE, 0x0F, 0x15, 0x02, 0xDD, 0x0F, 0x1B, 0x02, 0xDC, 0x0F, 0x21, 0x02, 0xDC, 0x0F,
- .byte 0x27, 0x02, 0xDB, 0x0F, 0x2D, 0x02, 0xDA, 0x0F, 0x34, 0x02, 0xD9, 0x0F, 0x3A, 0x02, 0xD8, 0x0F,
- .byte 0x40, 0x02, 0xD7, 0x0F, 0x46, 0x02, 0xD6, 0x0F, 0x4D, 0x02, 0xD5, 0x0F, 0x53, 0x02, 0xD5, 0x0F,
- .byte 0x59, 0x02, 0xD4, 0x0F, 0x5F, 0x02, 0xD3, 0x0F, 0x65, 0x02, 0xD2, 0x0F, 0x6C, 0x02, 0xD1, 0x0F,
- .byte 0x72, 0x02, 0xD0, 0x0F, 0x78, 0x02, 0xCF, 0x0F, 0x7E, 0x02, 0xCE, 0x0F, 0x84, 0x02, 0xCD, 0x0F,
- .byte 0x8B, 0x02, 0xCC, 0x0F, 0x91, 0x02, 0xCB, 0x0F, 0x97, 0x02, 0xCA, 0x0F, 0x9D, 0x02, 0xC9, 0x0F,
- .byte 0xA3, 0x02, 0xC8, 0x0F, 0xAA, 0x02, 0xC7, 0x0F, 0xB0, 0x02, 0xC6, 0x0F, 0xB6, 0x02, 0xC5, 0x0F,
- .byte 0xBC, 0x02, 0xC4, 0x0F, 0xC2, 0x02, 0xC3, 0x0F, 0xC9, 0x02, 0xC2, 0x0F, 0xCF, 0x02, 0xC0, 0x0F,
- .byte 0xD5, 0x02, 0xBF, 0x0F, 0xDB, 0x02, 0xBE, 0x0F, 0xE1, 0x02, 0xBD, 0x0F, 0xE8, 0x02, 0xBC, 0x0F,
- .byte 0xEE, 0x02, 0xBB, 0x0F, 0xF4, 0x02, 0xBA, 0x0F, 0xFA, 0x02, 0xB8, 0x0F, 0x00, 0x03, 0xB7, 0x0F,
- .byte 0x06, 0x03, 0xB6, 0x0F, 0x0D, 0x03, 0xB5, 0x0F, 0x13, 0x03, 0xB4, 0x0F, 0x19, 0x03, 0xB3, 0x0F,
- .byte 0x1F, 0x03, 0xB1, 0x0F, 0x25, 0x03, 0xB0, 0x0F, 0x2B, 0x03, 0xAF, 0x0F, 0x32, 0x03, 0xAE, 0x0F,
- .byte 0x38, 0x03, 0xAC, 0x0F, 0x3E, 0x03, 0xAB, 0x0F, 0x44, 0x03, 0xAA, 0x0F, 0x4A, 0x03, 0xA8, 0x0F,
- .byte 0x50, 0x03, 0xA7, 0x0F, 0x56, 0x03, 0xA6, 0x0F, 0x5D, 0x03, 0xA5, 0x0F, 0x63, 0x03, 0xA3, 0x0F,
- .byte 0x69, 0x03, 0xA2, 0x0F, 0x6F, 0x03, 0xA1, 0x0F, 0x75, 0x03, 0x9F, 0x0F, 0x7B, 0x03, 0x9E, 0x0F,
- .byte 0x81, 0x03, 0x9C, 0x0F, 0x88, 0x03, 0x9B, 0x0F, 0x8E, 0x03, 0x9A, 0x0F, 0x94, 0x03, 0x98, 0x0F,
- .byte 0x9A, 0x03, 0x97, 0x0F, 0xA0, 0x03, 0x95, 0x0F, 0xA6, 0x03, 0x94, 0x0F, 0xAC, 0x03, 0x93, 0x0F,
- .byte 0xB2, 0x03, 0x91, 0x0F, 0xB9, 0x03, 0x90, 0x0F, 0xBF, 0x03, 0x8E, 0x0F, 0xC5, 0x03, 0x8D, 0x0F,
- .byte 0xCB, 0x03, 0x8B, 0x0F, 0xD1, 0x03, 0x8A, 0x0F, 0xD7, 0x03, 0x88, 0x0F, 0xDD, 0x03, 0x87, 0x0F,
- .byte 0xE3, 0x03, 0x85, 0x0F, 0xE9, 0x03, 0x84, 0x0F, 0xEF, 0x03, 0x82, 0x0F, 0xF6, 0x03, 0x81, 0x0F,
- .byte 0xFC, 0x03, 0x7F, 0x0F, 0x02, 0x04, 0x7D, 0x0F, 0x08, 0x04, 0x7C, 0x0F, 0x0E, 0x04, 0x7A, 0x0F,
- .byte 0x14, 0x04, 0x79, 0x0F, 0x1A, 0x04, 0x77, 0x0F, 0x20, 0x04, 0x76, 0x0F, 0x26, 0x04, 0x74, 0x0F,
- .byte 0x2C, 0x04, 0x72, 0x0F, 0x32, 0x04, 0x71, 0x0F, 0x38, 0x04, 0x6F, 0x0F, 0x3E, 0x04, 0x6D, 0x0F,
- .byte 0x44, 0x04, 0x6C, 0x0F, 0x4B, 0x04, 0x6A, 0x0F, 0x51, 0x04, 0x68, 0x0F, 0x57, 0x04, 0x67, 0x0F,
- .byte 0x5D, 0x04, 0x65, 0x0F, 0x63, 0x04, 0x63, 0x0F, 0x69, 0x04, 0x61, 0x0F, 0x6F, 0x04, 0x60, 0x0F,
- .byte 0x75, 0x04, 0x5E, 0x0F, 0x7B, 0x04, 0x5C, 0x0F, 0x81, 0x04, 0x5A, 0x0F, 0x87, 0x04, 0x59, 0x0F,
- .byte 0x8D, 0x04, 0x57, 0x0F, 0x93, 0x04, 0x55, 0x0F, 0x99, 0x04, 0x53, 0x0F, 0x9F, 0x04, 0x51, 0x0F,
- .byte 0xA5, 0x04, 0x50, 0x0F, 0xAB, 0x04, 0x4E, 0x0F, 0xB1, 0x04, 0x4C, 0x0F, 0xB7, 0x04, 0x4A, 0x0F,
- .byte 0xBD, 0x04, 0x48, 0x0F, 0xC3, 0x04, 0x46, 0x0F, 0xC9, 0x04, 0x45, 0x0F, 0xCF, 0x04, 0x43, 0x0F,
- .byte 0xD5, 0x04, 0x41, 0x0F, 0xDB, 0x04, 0x3F, 0x0F, 0xE1, 0x04, 0x3D, 0x0F, 0xE7, 0x04, 0x3B, 0x0F,
- .byte 0xED, 0x04, 0x39, 0x0F, 0xF3, 0x04, 0x37, 0x0F, 0xF9, 0x04, 0x35, 0x0F, 0xFF, 0x04, 0x33, 0x0F,
- .byte 0x05, 0x05, 0x31, 0x0F, 0x0B, 0x05, 0x2F, 0x0F, 0x11, 0x05, 0x2D, 0x0F, 0x17, 0x05, 0x2B, 0x0F,
- .byte 0x1D, 0x05, 0x29, 0x0F, 0x23, 0x05, 0x27, 0x0F, 0x29, 0x05, 0x25, 0x0F, 0x2F, 0x05, 0x23, 0x0F,
- .byte 0x34, 0x05, 0x21, 0x0F, 0x3A, 0x05, 0x1F, 0x0F, 0x40, 0x05, 0x1D, 0x0F, 0x46, 0x05, 0x1B, 0x0F,
- .byte 0x4C, 0x05, 0x19, 0x0F, 0x52, 0x05, 0x17, 0x0F, 0x58, 0x05, 0x15, 0x0F, 0x5E, 0x05, 0x13, 0x0F,
- .byte 0x64, 0x05, 0x11, 0x0F, 0x6A, 0x05, 0x0E, 0x0F, 0x70, 0x05, 0x0C, 0x0F, 0x76, 0x05, 0x0A, 0x0F,
- .byte 0x7C, 0x05, 0x08, 0x0F, 0x81, 0x05, 0x06, 0x0F, 0x87, 0x05, 0x04, 0x0F, 0x8D, 0x05, 0x02, 0x0F,
- .byte 0x93, 0x05, 0xFF, 0x0E, 0x99, 0x05, 0xFD, 0x0E, 0x9F, 0x05, 0xFB, 0x0E, 0xA5, 0x05, 0xF9, 0x0E,
- .byte 0xAB, 0x05, 0xF7, 0x0E, 0xB1, 0x05, 0xF4, 0x0E, 0xB6, 0x05, 0xF2, 0x0E, 0xBC, 0x05, 0xF0, 0x0E,
- .byte 0xC2, 0x05, 0xEE, 0x0E, 0xC8, 0x05, 0xEB, 0x0E, 0xCE, 0x05, 0xE9, 0x0E, 0xD4, 0x05, 0xE7, 0x0E,
- .byte 0xDA, 0x05, 0xE4, 0x0E, 0xDF, 0x05, 0xE2, 0x0E, 0xE5, 0x05, 0xE0, 0x0E, 0xEB, 0x05, 0xDD, 0x0E,
- .byte 0xF1, 0x05, 0xDB, 0x0E, 0xF7, 0x05, 0xD9, 0x0E, 0xFD, 0x05, 0xD6, 0x0E, 0x02, 0x06, 0xD4, 0x0E,
- .byte 0x08, 0x06, 0xD2, 0x0E, 0x0E, 0x06, 0xCF, 0x0E, 0x14, 0x06, 0xCD, 0x0E, 0x1A, 0x06, 0xCB, 0x0E,
- .byte 0x1F, 0x06, 0xC8, 0x0E, 0x25, 0x06, 0xC6, 0x0E, 0x2B, 0x06, 0xC3, 0x0E, 0x31, 0x06, 0xC1, 0x0E,
- .byte 0x37, 0x06, 0xBF, 0x0E, 0x3C, 0x06, 0xBC, 0x0E, 0x42, 0x06, 0xBA, 0x0E, 0x48, 0x06, 0xB7, 0x0E,
- .byte 0x4E, 0x06, 0xB5, 0x0E, 0x54, 0x06, 0xB2, 0x0E, 0x59, 0x06, 0xB0, 0x0E, 0x5F, 0x06, 0xAD, 0x0E,
- .byte 0x65, 0x06, 0xAB, 0x0E, 0x6B, 0x06, 0xA8, 0x0E, 0x70, 0x06, 0xA6, 0x0E, 0x76, 0x06, 0xA3, 0x0E,
- .byte 0x7C, 0x06, 0xA1, 0x0E, 0x82, 0x06, 0x9E, 0x0E, 0x87, 0x06, 0x9B, 0x0E, 0x8D, 0x06, 0x99, 0x0E,
- .byte 0x93, 0x06, 0x96, 0x0E, 0x99, 0x06, 0x94, 0x0E, 0x9E, 0x06, 0x91, 0x0E, 0xA4, 0x06, 0x8F, 0x0E,
- .byte 0xAA, 0x06, 0x8C, 0x0E, 0xAF, 0x06, 0x89, 0x0E, 0xB5, 0x06, 0x87, 0x0E, 0xBB, 0x06, 0x84, 0x0E,
- .byte 0xC1, 0x06, 0x81, 0x0E, 0xC6, 0x06, 0x7F, 0x0E, 0xCC, 0x06, 0x7C, 0x0E, 0xD2, 0x06, 0x79, 0x0E,
- .byte 0xD7, 0x06, 0x77, 0x0E, 0xDD, 0x06, 0x74, 0x0E, 0xE3, 0x06, 0x71, 0x0E, 0xE8, 0x06, 0x6F, 0x0E,
- .byte 0xEE, 0x06, 0x6C, 0x0E, 0xF4, 0x06, 0x69, 0x0E, 0xF9, 0x06, 0x66, 0x0E, 0xFF, 0x06, 0x64, 0x0E,
- .byte 0x05, 0x07, 0x61, 0x0E, 0x0A, 0x07, 0x5E, 0x0E, 0x10, 0x07, 0x5B, 0x0E, 0x15, 0x07, 0x59, 0x0E,
- .byte 0x1B, 0x07, 0x56, 0x0E, 0x21, 0x07, 0x53, 0x0E, 0x26, 0x07, 0x50, 0x0E, 0x2C, 0x07, 0x4D, 0x0E,
- .byte 0x32, 0x07, 0x4B, 0x0E, 0x37, 0x07, 0x48, 0x0E, 0x3D, 0x07, 0x45, 0x0E, 0x42, 0x07, 0x42, 0x0E,
- .byte 0x48, 0x07, 0x3F, 0x0E, 0x4E, 0x07, 0x3C, 0x0E, 0x53, 0x07, 0x3A, 0x0E, 0x59, 0x07, 0x37, 0x0E,
- .byte 0x5E, 0x07, 0x34, 0x0E, 0x64, 0x07, 0x31, 0x0E, 0x6A, 0x07, 0x2E, 0x0E, 0x6F, 0x07, 0x2B, 0x0E,
- .byte 0x75, 0x07, 0x28, 0x0E, 0x7A, 0x07, 0x25, 0x0E, 0x80, 0x07, 0x22, 0x0E, 0x85, 0x07, 0x1F, 0x0E,
- .byte 0x8B, 0x07, 0x1C, 0x0E, 0x90, 0x07, 0x19, 0x0E, 0x96, 0x07, 0x16, 0x0E, 0x9B, 0x07, 0x13, 0x0E,
- .byte 0xA1, 0x07, 0x10, 0x0E, 0xA6, 0x07, 0x0D, 0x0E, 0xAC, 0x07, 0x0A, 0x0E, 0xB2, 0x07, 0x07, 0x0E,
- .byte 0xB7, 0x07, 0x04, 0x0E, 0xBD, 0x07, 0x01, 0x0E, 0xC2, 0x07, 0xFE, 0x0D, 0xC8, 0x07, 0xFB, 0x0D,
- .byte 0xCD, 0x07, 0xF8, 0x0D, 0xD2, 0x07, 0xF5, 0x0D, 0xD8, 0x07, 0xF2, 0x0D, 0xDD, 0x07, 0xEF, 0x0D,
- .byte 0xE3, 0x07, 0xEC, 0x0D, 0xE8, 0x07, 0xE9, 0x0D, 0xEE, 0x07, 0xE6, 0x0D, 0xF3, 0x07, 0xE3, 0x0D,
- .byte 0xF9, 0x07, 0xDF, 0x0D, 0xFE, 0x07, 0xDC, 0x0D, 0x04, 0x08, 0xD9, 0x0D, 0x09, 0x08, 0xD6, 0x0D,
- .byte 0x0E, 0x08, 0xD3, 0x0D, 0x14, 0x08, 0xD0, 0x0D, 0x19, 0x08, 0xCC, 0x0D, 0x1F, 0x08, 0xC9, 0x0D,
- .byte 0x24, 0x08, 0xC6, 0x0D, 0x2A, 0x08, 0xC3, 0x0D, 0x2F, 0x08, 0xC0, 0x0D, 0x34, 0x08, 0xBC, 0x0D,
- .byte 0x3A, 0x08, 0xB9, 0x0D, 0x3F, 0x08, 0xB6, 0x0D, 0x45, 0x08, 0xB3, 0x0D, 0x4A, 0x08, 0xB0, 0x0D,
- .byte 0x4F, 0x08, 0xAC, 0x0D, 0x55, 0x08, 0xA9, 0x0D, 0x5A, 0x08, 0xA6, 0x0D, 0x5F, 0x08, 0xA2, 0x0D,
- .byte 0x65, 0x08, 0x9F, 0x0D, 0x6A, 0x08, 0x9C, 0x0D, 0x6F, 0x08, 0x99, 0x0D, 0x75, 0x08, 0x95, 0x0D,
- .byte 0x7A, 0x08, 0x92, 0x0D, 0x7F, 0x08, 0x8F, 0x0D, 0x85, 0x08, 0x8B, 0x0D, 0x8A, 0x08, 0x88, 0x0D,
- .byte 0x8F, 0x08, 0x85, 0x0D, 0x95, 0x08, 0x81, 0x0D, 0x9A, 0x08, 0x7E, 0x0D, 0x9F, 0x08, 0x7A, 0x0D,
- .byte 0xA5, 0x08, 0x77, 0x0D, 0xAA, 0x08, 0x74, 0x0D, 0xAF, 0x08, 0x70, 0x0D, 0xB4, 0x08, 0x6D, 0x0D,
- .byte 0xBA, 0x08, 0x69, 0x0D, 0xBF, 0x08, 0x66, 0x0D, 0xC4, 0x08, 0x62, 0x0D, 0xC9, 0x08, 0x5F, 0x0D,
- .byte 0xCF, 0x08, 0x5C, 0x0D, 0xD4, 0x08, 0x58, 0x0D, 0xD9, 0x08, 0x55, 0x0D, 0xDE, 0x08, 0x51, 0x0D,
- .byte 0xE4, 0x08, 0x4E, 0x0D, 0xE9, 0x08, 0x4A, 0x0D, 0xEE, 0x08, 0x47, 0x0D, 0xF3, 0x08, 0x43, 0x0D,
- .byte 0xF8, 0x08, 0x40, 0x0D, 0xFE, 0x08, 0x3C, 0x0D, 0x03, 0x09, 0x39, 0x0D, 0x08, 0x09, 0x35, 0x0D,
- .byte 0x0D, 0x09, 0x32, 0x0D, 0x12, 0x09, 0x2E, 0x0D, 0x18, 0x09, 0x2A, 0x0D, 0x1D, 0x09, 0x27, 0x0D,
- .byte 0x22, 0x09, 0x23, 0x0D, 0x27, 0x09, 0x20, 0x0D, 0x2C, 0x09, 0x1C, 0x0D, 0x31, 0x09, 0x18, 0x0D,
- .byte 0x37, 0x09, 0x15, 0x0D, 0x3C, 0x09, 0x11, 0x0D, 0x41, 0x09, 0x0E, 0x0D, 0x46, 0x09, 0x0A, 0x0D,
- .byte 0x4B, 0x09, 0x06, 0x0D, 0x50, 0x09, 0x03, 0x0D, 0x55, 0x09, 0xFF, 0x0C, 0x5A, 0x09, 0xFB, 0x0C,
- .byte 0x5F, 0x09, 0xF8, 0x0C, 0x65, 0x09, 0xF4, 0x0C, 0x6A, 0x09, 0xF0, 0x0C, 0x6F, 0x09, 0xED, 0x0C,
- .byte 0x74, 0x09, 0xE9, 0x0C, 0x79, 0x09, 0xE5, 0x0C, 0x7E, 0x09, 0xE1, 0x0C, 0x83, 0x09, 0xDE, 0x0C,
- .byte 0x88, 0x09, 0xDA, 0x0C, 0x8D, 0x09, 0xD6, 0x0C, 0x92, 0x09, 0xD2, 0x0C, 0x97, 0x09, 0xCF, 0x0C,
- .byte 0x9C, 0x09, 0xCB, 0x0C, 0xA1, 0x09, 0xC7, 0x0C, 0xA6, 0x09, 0xC3, 0x0C, 0xAB, 0x09, 0xC0, 0x0C,
- .byte 0xB0, 0x09, 0xBC, 0x0C, 0xB5, 0x09, 0xB8, 0x0C, 0xBA, 0x09, 0xB4, 0x0C, 0xBF, 0x09, 0xB0, 0x0C,
- .byte 0xC4, 0x09, 0xAC, 0x0C, 0xC9, 0x09, 0xA9, 0x0C, 0xCE, 0x09, 0xA5, 0x0C, 0xD3, 0x09, 0xA1, 0x0C,
- .byte 0xD8, 0x09, 0x9D, 0x0C, 0xDD, 0x09, 0x99, 0x0C, 0xE2, 0x09, 0x95, 0x0C, 0xE7, 0x09, 0x91, 0x0C,
- .byte 0xEC, 0x09, 0x8E, 0x0C, 0xF1, 0x09, 0x8A, 0x0C, 0xF6, 0x09, 0x86, 0x0C, 0xFB, 0x09, 0x82, 0x0C,
- .byte 0xFF, 0x09, 0x7E, 0x0C, 0x04, 0x0A, 0x7A, 0x0C, 0x09, 0x0A, 0x76, 0x0C, 0x0E, 0x0A, 0x72, 0x0C,
- .byte 0x13, 0x0A, 0x6E, 0x0C, 0x18, 0x0A, 0x6A, 0x0C, 0x1D, 0x0A, 0x66, 0x0C, 0x22, 0x0A, 0x62, 0x0C,
- .byte 0x26, 0x0A, 0x5E, 0x0C, 0x2B, 0x0A, 0x5A, 0x0C, 0x30, 0x0A, 0x56, 0x0C, 0x35, 0x0A, 0x52, 0x0C,
- .byte 0x3A, 0x0A, 0x4E, 0x0C, 0x3F, 0x0A, 0x4A, 0x0C, 0x44, 0x0A, 0x46, 0x0C, 0x48, 0x0A, 0x42, 0x0C,
- .byte 0x4D, 0x0A, 0x3E, 0x0C, 0x52, 0x0A, 0x3A, 0x0C, 0x57, 0x0A, 0x36, 0x0C, 0x5C, 0x0A, 0x32, 0x0C,
- .byte 0x60, 0x0A, 0x2E, 0x0C, 0x65, 0x0A, 0x2A, 0x0C, 0x6A, 0x0A, 0x26, 0x0C, 0x6F, 0x0A, 0x22, 0x0C,
- .byte 0x73, 0x0A, 0x1E, 0x0C, 0x78, 0x0A, 0x19, 0x0C, 0x7D, 0x0A, 0x15, 0x0C, 0x82, 0x0A, 0x11, 0x0C,
- .byte 0x86, 0x0A, 0x0D, 0x0C, 0x8B, 0x0A, 0x09, 0x0C, 0x90, 0x0A, 0x05, 0x0C, 0x95, 0x0A, 0x01, 0x0C,
- .byte 0x99, 0x0A, 0xFC, 0x0B, 0x9E, 0x0A, 0xF8, 0x0B, 0xA3, 0x0A, 0xF4, 0x0B, 0xA7, 0x0A, 0xF0, 0x0B,
- .byte 0xAC, 0x0A, 0xEC, 0x0B, 0xB1, 0x0A, 0xE8, 0x0B, 0xB5, 0x0A, 0xE3, 0x0B, 0xBA, 0x0A, 0xDF, 0x0B,
- .byte 0xBF, 0x0A, 0xDB, 0x0B, 0xC3, 0x0A, 0xD7, 0x0B, 0xC8, 0x0A, 0xD2, 0x0B, 0xCD, 0x0A, 0xCE, 0x0B,
- .byte 0xD1, 0x0A, 0xCA, 0x0B, 0xD6, 0x0A, 0xC6, 0x0B, 0xDB, 0x0A, 0xC1, 0x0B, 0xDF, 0x0A, 0xBD, 0x0B,
- .byte 0xE4, 0x0A, 0xB9, 0x0B, 0xE8, 0x0A, 0xB5, 0x0B, 0xED, 0x0A, 0xB0, 0x0B, 0xF2, 0x0A, 0xAC, 0x0B,
- .byte 0xF6, 0x0A, 0xA8, 0x0B, 0xFB, 0x0A, 0xA3, 0x0B, 0xFF, 0x0A, 0x9F, 0x0B, 0x04, 0x0B, 0x9B, 0x0B,
- .byte 0x08, 0x0B, 0x97, 0x0B, 0x0D, 0x0B, 0x92, 0x0B, 0x11, 0x0B, 0x8E, 0x0B, 0x16, 0x0B, 0x89, 0x0B,
- .byte 0x1B, 0x0B, 0x85, 0x0B, 0x1F, 0x0B, 0x81, 0x0B, 0x24, 0x0B, 0x7C, 0x0B, 0x28, 0x0B, 0x78, 0x0B,
- .byte 0x2D, 0x0B, 0x74, 0x0B, 0x31, 0x0B, 0x6F, 0x0B, 0x36, 0x0B, 0x6B, 0x0B, 0x3A, 0x0B, 0x66, 0x0B,
- .byte 0x3E, 0x0B, 0x62, 0x0B, 0x43, 0x0B, 0x5E, 0x0B, 0x47, 0x0B, 0x59, 0x0B, 0x4C, 0x0B, 0x55, 0x0B,
- .byte 0x50, 0x0B, 0x50, 0x0B, 0x55, 0x0B, 0x4C, 0x0B, 0x59, 0x0B, 0x47, 0x0B, 0x5E, 0x0B, 0x43, 0x0B,
- .byte 0x62, 0x0B, 0x3E, 0x0B, 0x66, 0x0B, 0x3A, 0x0B, 0x6B, 0x0B, 0x36, 0x0B, 0x6F, 0x0B, 0x31, 0x0B,
- .byte 0x74, 0x0B, 0x2D, 0x0B, 0x78, 0x0B, 0x28, 0x0B, 0x7C, 0x0B, 0x24, 0x0B, 0x81, 0x0B, 0x1F, 0x0B,
- .byte 0x85, 0x0B, 0x1B, 0x0B, 0x89, 0x0B, 0x16, 0x0B, 0x8E, 0x0B, 0x11, 0x0B, 0x92, 0x0B, 0x0D, 0x0B,
- .byte 0x97, 0x0B, 0x08, 0x0B, 0x9B, 0x0B, 0x04, 0x0B, 0x9F, 0x0B, 0xFF, 0x0A, 0xA3, 0x0B, 0xFB, 0x0A,
- .byte 0xA8, 0x0B, 0xF6, 0x0A, 0xAC, 0x0B, 0xF2, 0x0A, 0xB0, 0x0B, 0xED, 0x0A, 0xB5, 0x0B, 0xE8, 0x0A,
- .byte 0xB9, 0x0B, 0xE4, 0x0A, 0xBD, 0x0B, 0xDF, 0x0A, 0xC1, 0x0B, 0xDB, 0x0A, 0xC6, 0x0B, 0xD6, 0x0A,
- .byte 0xCA, 0x0B, 0xD1, 0x0A, 0xCE, 0x0B, 0xCD, 0x0A, 0xD2, 0x0B, 0xC8, 0x0A, 0xD7, 0x0B, 0xC3, 0x0A,
- .byte 0xDB, 0x0B, 0xBF, 0x0A, 0xDF, 0x0B, 0xBA, 0x0A, 0xE3, 0x0B, 0xB5, 0x0A, 0xE8, 0x0B, 0xB1, 0x0A,
- .byte 0xEC, 0x0B, 0xAC, 0x0A, 0xF0, 0x0B, 0xA7, 0x0A, 0xF4, 0x0B, 0xA3, 0x0A, 0xF8, 0x0B, 0x9E, 0x0A,
- .byte 0xFC, 0x0B, 0x99, 0x0A, 0x01, 0x0C, 0x95, 0x0A, 0x05, 0x0C, 0x90, 0x0A, 0x09, 0x0C, 0x8B, 0x0A,
- .byte 0x0D, 0x0C, 0x86, 0x0A, 0x11, 0x0C, 0x82, 0x0A, 0x15, 0x0C, 0x7D, 0x0A, 0x19, 0x0C, 0x78, 0x0A,
- .byte 0x1E, 0x0C, 0x73, 0x0A, 0x22, 0x0C, 0x6F, 0x0A, 0x26, 0x0C, 0x6A, 0x0A, 0x2A, 0x0C, 0x65, 0x0A,
- .byte 0x2E, 0x0C, 0x60, 0x0A, 0x32, 0x0C, 0x5C, 0x0A, 0x36, 0x0C, 0x57, 0x0A, 0x3A, 0x0C, 0x52, 0x0A,
- .byte 0x3E, 0x0C, 0x4D, 0x0A, 0x42, 0x0C, 0x48, 0x0A, 0x46, 0x0C, 0x44, 0x0A, 0x4A, 0x0C, 0x3F, 0x0A,
- .byte 0x4E, 0x0C, 0x3A, 0x0A, 0x52, 0x0C, 0x35, 0x0A, 0x56, 0x0C, 0x30, 0x0A, 0x5A, 0x0C, 0x2B, 0x0A,
- .byte 0x5E, 0x0C, 0x26, 0x0A, 0x62, 0x0C, 0x22, 0x0A, 0x66, 0x0C, 0x1D, 0x0A, 0x6A, 0x0C, 0x18, 0x0A,
- .byte 0x6E, 0x0C, 0x13, 0x0A, 0x72, 0x0C, 0x0E, 0x0A, 0x76, 0x0C, 0x09, 0x0A, 0x7A, 0x0C, 0x04, 0x0A,
- .byte 0x7E, 0x0C, 0xFF, 0x09, 0x82, 0x0C, 0xFB, 0x09, 0x86, 0x0C, 0xF6, 0x09, 0x8A, 0x0C, 0xF1, 0x09,
- .byte 0x8E, 0x0C, 0xEC, 0x09, 0x91, 0x0C, 0xE7, 0x09, 0x95, 0x0C, 0xE2, 0x09, 0x99, 0x0C, 0xDD, 0x09,
- .byte 0x9D, 0x0C, 0xD8, 0x09, 0xA1, 0x0C, 0xD3, 0x09, 0xA5, 0x0C, 0xCE, 0x09, 0xA9, 0x0C, 0xC9, 0x09,
- .byte 0xAC, 0x0C, 0xC4, 0x09, 0xB0, 0x0C, 0xBF, 0x09, 0xB4, 0x0C, 0xBA, 0x09, 0xB8, 0x0C, 0xB5, 0x09,
- .byte 0xBC, 0x0C, 0xB0, 0x09, 0xC0, 0x0C, 0xAB, 0x09, 0xC3, 0x0C, 0xA6, 0x09, 0xC7, 0x0C, 0xA1, 0x09,
- .byte 0xCB, 0x0C, 0x9C, 0x09, 0xCF, 0x0C, 0x97, 0x09, 0xD2, 0x0C, 0x92, 0x09, 0xD6, 0x0C, 0x8D, 0x09,
- .byte 0xDA, 0x0C, 0x88, 0x09, 0xDE, 0x0C, 0x83, 0x09, 0xE1, 0x0C, 0x7E, 0x09, 0xE5, 0x0C, 0x79, 0x09,
- .byte 0xE9, 0x0C, 0x74, 0x09, 0xED, 0x0C, 0x6F, 0x09, 0xF0, 0x0C, 0x6A, 0x09, 0xF4, 0x0C, 0x65, 0x09,
- .byte 0xF8, 0x0C, 0x5F, 0x09, 0xFB, 0x0C, 0x5A, 0x09, 0xFF, 0x0C, 0x55, 0x09, 0x03, 0x0D, 0x50, 0x09,
- .byte 0x06, 0x0D, 0x4B, 0x09, 0x0A, 0x0D, 0x46, 0x09, 0x0E, 0x0D, 0x41, 0x09, 0x11, 0x0D, 0x3C, 0x09,
- .byte 0x15, 0x0D, 0x37, 0x09, 0x18, 0x0D, 0x31, 0x09, 0x1C, 0x0D, 0x2C, 0x09, 0x20, 0x0D, 0x27, 0x09,
- .byte 0x23, 0x0D, 0x22, 0x09, 0x27, 0x0D, 0x1D, 0x09, 0x2A, 0x0D, 0x18, 0x09, 0x2E, 0x0D, 0x12, 0x09,
- .byte 0x32, 0x0D, 0x0D, 0x09, 0x35, 0x0D, 0x08, 0x09, 0x39, 0x0D, 0x03, 0x09, 0x3C, 0x0D, 0xFE, 0x08,
- .byte 0x40, 0x0D, 0xF8, 0x08, 0x43, 0x0D, 0xF3, 0x08, 0x47, 0x0D, 0xEE, 0x08, 0x4A, 0x0D, 0xE9, 0x08,
- .byte 0x4E, 0x0D, 0xE4, 0x08, 0x51, 0x0D, 0xDE, 0x08, 0x55, 0x0D, 0xD9, 0x08, 0x58, 0x0D, 0xD4, 0x08,
- .byte 0x5C, 0x0D, 0xCF, 0x08, 0x5F, 0x0D, 0xC9, 0x08, 0x62, 0x0D, 0xC4, 0x08, 0x66, 0x0D, 0xBF, 0x08,
- .byte 0x69, 0x0D, 0xBA, 0x08, 0x6D, 0x0D, 0xB4, 0x08, 0x70, 0x0D, 0xAF, 0x08, 0x74, 0x0D, 0xAA, 0x08,
- .byte 0x77, 0x0D, 0xA5, 0x08, 0x7A, 0x0D, 0x9F, 0x08, 0x7E, 0x0D, 0x9A, 0x08, 0x81, 0x0D, 0x95, 0x08,
- .byte 0x85, 0x0D, 0x8F, 0x08, 0x88, 0x0D, 0x8A, 0x08, 0x8B, 0x0D, 0x85, 0x08, 0x8F, 0x0D, 0x7F, 0x08,
- .byte 0x92, 0x0D, 0x7A, 0x08, 0x95, 0x0D, 0x75, 0x08, 0x99, 0x0D, 0x6F, 0x08, 0x9C, 0x0D, 0x6A, 0x08,
- .byte 0x9F, 0x0D, 0x65, 0x08, 0xA2, 0x0D, 0x5F, 0x08, 0xA6, 0x0D, 0x5A, 0x08, 0xA9, 0x0D, 0x55, 0x08,
- .byte 0xAC, 0x0D, 0x4F, 0x08, 0xB0, 0x0D, 0x4A, 0x08, 0xB3, 0x0D, 0x45, 0x08, 0xB6, 0x0D, 0x3F, 0x08,
- .byte 0xB9, 0x0D, 0x3A, 0x08, 0xBC, 0x0D, 0x34, 0x08, 0xC0, 0x0D, 0x2F, 0x08, 0xC3, 0x0D, 0x2A, 0x08,
- .byte 0xC6, 0x0D, 0x24, 0x08, 0xC9, 0x0D, 0x1F, 0x08, 0xCC, 0x0D, 0x19, 0x08, 0xD0, 0x0D, 0x14, 0x08,
- .byte 0xD3, 0x0D, 0x0E, 0x08, 0xD6, 0x0D, 0x09, 0x08, 0xD9, 0x0D, 0x04, 0x08, 0xDC, 0x0D, 0xFE, 0x07,
- .byte 0xDF, 0x0D, 0xF9, 0x07, 0xE3, 0x0D, 0xF3, 0x07, 0xE6, 0x0D, 0xEE, 0x07, 0xE9, 0x0D, 0xE8, 0x07,
- .byte 0xEC, 0x0D, 0xE3, 0x07, 0xEF, 0x0D, 0xDD, 0x07, 0xF2, 0x0D, 0xD8, 0x07, 0xF5, 0x0D, 0xD2, 0x07,
- .byte 0xF8, 0x0D, 0xCD, 0x07, 0xFB, 0x0D, 0xC8, 0x07, 0xFE, 0x0D, 0xC2, 0x07, 0x01, 0x0E, 0xBD, 0x07,
- .byte 0x04, 0x0E, 0xB7, 0x07, 0x07, 0x0E, 0xB2, 0x07, 0x0A, 0x0E, 0xAC, 0x07, 0x0D, 0x0E, 0xA6, 0x07,
- .byte 0x10, 0x0E, 0xA1, 0x07, 0x13, 0x0E, 0x9B, 0x07, 0x16, 0x0E, 0x96, 0x07, 0x19, 0x0E, 0x90, 0x07,
- .byte 0x1C, 0x0E, 0x8B, 0x07, 0x1F, 0x0E, 0x85, 0x07, 0x22, 0x0E, 0x80, 0x07, 0x25, 0x0E, 0x7A, 0x07,
- .byte 0x28, 0x0E, 0x75, 0x07, 0x2B, 0x0E, 0x6F, 0x07, 0x2E, 0x0E, 0x6A, 0x07, 0x31, 0x0E, 0x64, 0x07,
- .byte 0x34, 0x0E, 0x5E, 0x07, 0x37, 0x0E, 0x59, 0x07, 0x3A, 0x0E, 0x53, 0x07, 0x3C, 0x0E, 0x4E, 0x07,
- .byte 0x3F, 0x0E, 0x48, 0x07, 0x42, 0x0E, 0x42, 0x07, 0x45, 0x0E, 0x3D, 0x07, 0x48, 0x0E, 0x37, 0x07,
- .byte 0x4B, 0x0E, 0x32, 0x07, 0x4D, 0x0E, 0x2C, 0x07, 0x50, 0x0E, 0x26, 0x07, 0x53, 0x0E, 0x21, 0x07,
- .byte 0x56, 0x0E, 0x1B, 0x07, 0x59, 0x0E, 0x15, 0x07, 0x5B, 0x0E, 0x10, 0x07, 0x5E, 0x0E, 0x0A, 0x07,
- .byte 0x61, 0x0E, 0x05, 0x07, 0x64, 0x0E, 0xFF, 0x06, 0x66, 0x0E, 0xF9, 0x06, 0x69, 0x0E, 0xF4, 0x06,
- .byte 0x6C, 0x0E, 0xEE, 0x06, 0x6F, 0x0E, 0xE8, 0x06, 0x71, 0x0E, 0xE3, 0x06, 0x74, 0x0E, 0xDD, 0x06,
- .byte 0x77, 0x0E, 0xD7, 0x06, 0x79, 0x0E, 0xD2, 0x06, 0x7C, 0x0E, 0xCC, 0x06, 0x7F, 0x0E, 0xC6, 0x06,
- .byte 0x81, 0x0E, 0xC1, 0x06, 0x84, 0x0E, 0xBB, 0x06, 0x87, 0x0E, 0xB5, 0x06, 0x89, 0x0E, 0xAF, 0x06,
- .byte 0x8C, 0x0E, 0xAA, 0x06, 0x8F, 0x0E, 0xA4, 0x06, 0x91, 0x0E, 0x9E, 0x06, 0x94, 0x0E, 0x99, 0x06,
- .byte 0x96, 0x0E, 0x93, 0x06, 0x99, 0x0E, 0x8D, 0x06, 0x9B, 0x0E, 0x87, 0x06, 0x9E, 0x0E, 0x82, 0x06,
- .byte 0xA1, 0x0E, 0x7C, 0x06, 0xA3, 0x0E, 0x76, 0x06, 0xA6, 0x0E, 0x70, 0x06, 0xA8, 0x0E, 0x6B, 0x06,
- .byte 0xAB, 0x0E, 0x65, 0x06, 0xAD, 0x0E, 0x5F, 0x06, 0xB0, 0x0E, 0x59, 0x06, 0xB2, 0x0E, 0x54, 0x06,
- .byte 0xB5, 0x0E, 0x4E, 0x06, 0xB7, 0x0E, 0x48, 0x06, 0xBA, 0x0E, 0x42, 0x06, 0xBC, 0x0E, 0x3C, 0x06,
- .byte 0xBF, 0x0E, 0x37, 0x06, 0xC1, 0x0E, 0x31, 0x06, 0xC3, 0x0E, 0x2B, 0x06, 0xC6, 0x0E, 0x25, 0x06,
- .byte 0xC8, 0x0E, 0x1F, 0x06, 0xCB, 0x0E, 0x1A, 0x06, 0xCD, 0x0E, 0x14, 0x06, 0xCF, 0x0E, 0x0E, 0x06,
- .byte 0xD2, 0x0E, 0x08, 0x06, 0xD4, 0x0E, 0x02, 0x06, 0xD6, 0x0E, 0xFD, 0x05, 0xD9, 0x0E, 0xF7, 0x05,
- .byte 0xDB, 0x0E, 0xF1, 0x05, 0xDD, 0x0E, 0xEB, 0x05, 0xE0, 0x0E, 0xE5, 0x05, 0xE2, 0x0E, 0xDF, 0x05,
- .byte 0xE4, 0x0E, 0xDA, 0x05, 0xE7, 0x0E, 0xD4, 0x05, 0xE9, 0x0E, 0xCE, 0x05, 0xEB, 0x0E, 0xC8, 0x05,
- .byte 0xEE, 0x0E, 0xC2, 0x05, 0xF0, 0x0E, 0xBC, 0x05, 0xF2, 0x0E, 0xB6, 0x05, 0xF4, 0x0E, 0xB1, 0x05,
- .byte 0xF7, 0x0E, 0xAB, 0x05, 0xF9, 0x0E, 0xA5, 0x05, 0xFB, 0x0E, 0x9F, 0x05, 0xFD, 0x0E, 0x99, 0x05,
- .byte 0xFF, 0x0E, 0x93, 0x05, 0x02, 0x0F, 0x8D, 0x05, 0x04, 0x0F, 0x87, 0x05, 0x06, 0x0F, 0x81, 0x05,
- .byte 0x08, 0x0F, 0x7C, 0x05, 0x0A, 0x0F, 0x76, 0x05, 0x0C, 0x0F, 0x70, 0x05, 0x0E, 0x0F, 0x6A, 0x05,
- .byte 0x11, 0x0F, 0x64, 0x05, 0x13, 0x0F, 0x5E, 0x05, 0x15, 0x0F, 0x58, 0x05, 0x17, 0x0F, 0x52, 0x05,
- .byte 0x19, 0x0F, 0x4C, 0x05, 0x1B, 0x0F, 0x46, 0x05, 0x1D, 0x0F, 0x40, 0x05, 0x1F, 0x0F, 0x3A, 0x05,
- .byte 0x21, 0x0F, 0x34, 0x05, 0x23, 0x0F, 0x2F, 0x05, 0x25, 0x0F, 0x29, 0x05, 0x27, 0x0F, 0x23, 0x05,
- .byte 0x29, 0x0F, 0x1D, 0x05, 0x2B, 0x0F, 0x17, 0x05, 0x2D, 0x0F, 0x11, 0x05, 0x2F, 0x0F, 0x0B, 0x05,
- .byte 0x31, 0x0F, 0x05, 0x05, 0x33, 0x0F, 0xFF, 0x04, 0x35, 0x0F, 0xF9, 0x04, 0x37, 0x0F, 0xF3, 0x04,
- .byte 0x39, 0x0F, 0xED, 0x04, 0x3B, 0x0F, 0xE7, 0x04, 0x3D, 0x0F, 0xE1, 0x04, 0x3F, 0x0F, 0xDB, 0x04,
- .byte 0x41, 0x0F, 0xD5, 0x04, 0x43, 0x0F, 0xCF, 0x04, 0x45, 0x0F, 0xC9, 0x04, 0x46, 0x0F, 0xC3, 0x04,
- .byte 0x48, 0x0F, 0xBD, 0x04, 0x4A, 0x0F, 0xB7, 0x04, 0x4C, 0x0F, 0xB1, 0x04, 0x4E, 0x0F, 0xAB, 0x04,
- .byte 0x50, 0x0F, 0xA5, 0x04, 0x51, 0x0F, 0x9F, 0x04, 0x53, 0x0F, 0x99, 0x04, 0x55, 0x0F, 0x93, 0x04,
- .byte 0x57, 0x0F, 0x8D, 0x04, 0x59, 0x0F, 0x87, 0x04, 0x5A, 0x0F, 0x81, 0x04, 0x5C, 0x0F, 0x7B, 0x04,
- .byte 0x5E, 0x0F, 0x75, 0x04, 0x60, 0x0F, 0x6F, 0x04, 0x61, 0x0F, 0x69, 0x04, 0x63, 0x0F, 0x63, 0x04,
- .byte 0x65, 0x0F, 0x5D, 0x04, 0x67, 0x0F, 0x57, 0x04, 0x68, 0x0F, 0x51, 0x04, 0x6A, 0x0F, 0x4B, 0x04,
- .byte 0x6C, 0x0F, 0x44, 0x04, 0x6D, 0x0F, 0x3E, 0x04, 0x6F, 0x0F, 0x38, 0x04, 0x71, 0x0F, 0x32, 0x04,
- .byte 0x72, 0x0F, 0x2C, 0x04, 0x74, 0x0F, 0x26, 0x04, 0x76, 0x0F, 0x20, 0x04, 0x77, 0x0F, 0x1A, 0x04,
- .byte 0x79, 0x0F, 0x14, 0x04, 0x7A, 0x0F, 0x0E, 0x04, 0x7C, 0x0F, 0x08, 0x04, 0x7D, 0x0F, 0x02, 0x04,
- .byte 0x7F, 0x0F, 0xFC, 0x03, 0x81, 0x0F, 0xF6, 0x03, 0x82, 0x0F, 0xEF, 0x03, 0x84, 0x0F, 0xE9, 0x03,
- .byte 0x85, 0x0F, 0xE3, 0x03, 0x87, 0x0F, 0xDD, 0x03, 0x88, 0x0F, 0xD7, 0x03, 0x8A, 0x0F, 0xD1, 0x03,
- .byte 0x8B, 0x0F, 0xCB, 0x03, 0x8D, 0x0F, 0xC5, 0x03, 0x8E, 0x0F, 0xBF, 0x03, 0x90, 0x0F, 0xB9, 0x03,
- .byte 0x91, 0x0F, 0xB2, 0x03, 0x93, 0x0F, 0xAC, 0x03, 0x94, 0x0F, 0xA6, 0x03, 0x95, 0x0F, 0xA0, 0x03,
- .byte 0x97, 0x0F, 0x9A, 0x03, 0x98, 0x0F, 0x94, 0x03, 0x9A, 0x0F, 0x8E, 0x03, 0x9B, 0x0F, 0x88, 0x03,
- .byte 0x9C, 0x0F, 0x81, 0x03, 0x9E, 0x0F, 0x7B, 0x03, 0x9F, 0x0F, 0x75, 0x03, 0xA1, 0x0F, 0x6F, 0x03,
- .byte 0xA2, 0x0F, 0x69, 0x03, 0xA3, 0x0F, 0x63, 0x03, 0xA5, 0x0F, 0x5D, 0x03, 0xA6, 0x0F, 0x56, 0x03,
- .byte 0xA7, 0x0F, 0x50, 0x03, 0xA8, 0x0F, 0x4A, 0x03, 0xAA, 0x0F, 0x44, 0x03, 0xAB, 0x0F, 0x3E, 0x03,
- .byte 0xAC, 0x0F, 0x38, 0x03, 0xAE, 0x0F, 0x32, 0x03, 0xAF, 0x0F, 0x2B, 0x03, 0xB0, 0x0F, 0x25, 0x03,
- .byte 0xB1, 0x0F, 0x1F, 0x03, 0xB3, 0x0F, 0x19, 0x03, 0xB4, 0x0F, 0x13, 0x03, 0xB5, 0x0F, 0x0D, 0x03,
- .byte 0xB6, 0x0F, 0x06, 0x03, 0xB7, 0x0F, 0x00, 0x03, 0xB8, 0x0F, 0xFA, 0x02, 0xBA, 0x0F, 0xF4, 0x02,
- .byte 0xBB, 0x0F, 0xEE, 0x02, 0xBC, 0x0F, 0xE8, 0x02, 0xBD, 0x0F, 0xE1, 0x02, 0xBE, 0x0F, 0xDB, 0x02,
- .byte 0xBF, 0x0F, 0xD5, 0x02, 0xC0, 0x0F, 0xCF, 0x02, 0xC2, 0x0F, 0xC9, 0x02, 0xC3, 0x0F, 0xC2, 0x02,
- .byte 0xC4, 0x0F, 0xBC, 0x02, 0xC5, 0x0F, 0xB6, 0x02, 0xC6, 0x0F, 0xB0, 0x02, 0xC7, 0x0F, 0xAA, 0x02,
- .byte 0xC8, 0x0F, 0xA3, 0x02, 0xC9, 0x0F, 0x9D, 0x02, 0xCA, 0x0F, 0x97, 0x02, 0xCB, 0x0F, 0x91, 0x02,
- .byte 0xCC, 0x0F, 0x8B, 0x02, 0xCD, 0x0F, 0x84, 0x02, 0xCE, 0x0F, 0x7E, 0x02, 0xCF, 0x0F, 0x78, 0x02,
- .byte 0xD0, 0x0F, 0x72, 0x02, 0xD1, 0x0F, 0x6C, 0x02, 0xD2, 0x0F, 0x65, 0x02, 0xD3, 0x0F, 0x5F, 0x02,
- .byte 0xD4, 0x0F, 0x59, 0x02, 0xD5, 0x0F, 0x53, 0x02, 0xD5, 0x0F, 0x4D, 0x02, 0xD6, 0x0F, 0x46, 0x02,
- .byte 0xD7, 0x0F, 0x40, 0x02, 0xD8, 0x0F, 0x3A, 0x02, 0xD9, 0x0F, 0x34, 0x02, 0xDA, 0x0F, 0x2D, 0x02,
- .byte 0xDB, 0x0F, 0x27, 0x02, 0xDC, 0x0F, 0x21, 0x02, 0xDC, 0x0F, 0x1B, 0x02, 0xDD, 0x0F, 0x15, 0x02,
- .byte 0xDE, 0x0F, 0x0E, 0x02, 0xDF, 0x0F, 0x08, 0x02, 0xE0, 0x0F, 0x02, 0x02, 0xE0, 0x0F, 0xFC, 0x01,
- .byte 0xE1, 0x0F, 0xF5, 0x01, 0xE2, 0x0F, 0xEF, 0x01, 0xE3, 0x0F, 0xE9, 0x01, 0xE3, 0x0F, 0xE3, 0x01,
- .byte 0xE4, 0x0F, 0xDC, 0x01, 0xE5, 0x0F, 0xD6, 0x01, 0xE6, 0x0F, 0xD0, 0x01, 0xE6, 0x0F, 0xCA, 0x01,
- .byte 0xE7, 0x0F, 0xC3, 0x01, 0xE8, 0x0F, 0xBD, 0x01, 0xE8, 0x0F, 0xB7, 0x01, 0xE9, 0x0F, 0xB1, 0x01,
- .byte 0xEA, 0x0F, 0xAA, 0x01, 0xEA, 0x0F, 0xA4, 0x01, 0xEB, 0x0F, 0x9E, 0x01, 0xEC, 0x0F, 0x98, 0x01,
- .byte 0xEC, 0x0F, 0x91, 0x01, 0xED, 0x0F, 0x8B, 0x01, 0xED, 0x0F, 0x85, 0x01, 0xEE, 0x0F, 0x7F, 0x01,
- .byte 0xEF, 0x0F, 0x78, 0x01, 0xEF, 0x0F, 0x72, 0x01, 0xF0, 0x0F, 0x6C, 0x01, 0xF0, 0x0F, 0x66, 0x01,
- .byte 0xF1, 0x0F, 0x5F, 0x01, 0xF1, 0x0F, 0x59, 0x01, 0xF2, 0x0F, 0x53, 0x01, 0xF2, 0x0F, 0x4D, 0x01,
- .byte 0xF3, 0x0F, 0x46, 0x01, 0xF3, 0x0F, 0x40, 0x01, 0xF4, 0x0F, 0x3A, 0x01, 0xF4, 0x0F, 0x34, 0x01,
- .byte 0xF5, 0x0F, 0x2D, 0x01, 0xF5, 0x0F, 0x27, 0x01, 0xF6, 0x0F, 0x21, 0x01, 0xF6, 0x0F, 0x1B, 0x01,
- .byte 0xF7, 0x0F, 0x14, 0x01, 0xF7, 0x0F, 0x0E, 0x01, 0xF8, 0x0F, 0x08, 0x01, 0xF8, 0x0F, 0x01, 0x01,
- .byte 0xF8, 0x0F, 0xFB, 0x00, 0xF9, 0x0F, 0xF5, 0x00, 0xF9, 0x0F, 0xEF, 0x00, 0xF9, 0x0F, 0xE8, 0x00,
- .byte 0xFA, 0x0F, 0xE2, 0x00, 0xFA, 0x0F, 0xDC, 0x00, 0xFA, 0x0F, 0xD6, 0x00, 0xFB, 0x0F, 0xCF, 0x00,
- .byte 0xFB, 0x0F, 0xC9, 0x00, 0xFB, 0x0F, 0xC3, 0x00, 0xFC, 0x0F, 0xBC, 0x00, 0xFC, 0x0F, 0xB6, 0x00,
- .byte 0xFC, 0x0F, 0xB0, 0x00, 0xFC, 0x0F, 0xAA, 0x00, 0xFD, 0x0F, 0xA3, 0x00, 0xFD, 0x0F, 0x9D, 0x00,
- .byte 0xFD, 0x0F, 0x97, 0x00, 0xFD, 0x0F, 0x90, 0x00, 0xFE, 0x0F, 0x8A, 0x00, 0xFE, 0x0F, 0x84, 0x00,
- .byte 0xFE, 0x0F, 0x7E, 0x00, 0xFE, 0x0F, 0x77, 0x00, 0xFE, 0x0F, 0x71, 0x00, 0xFF, 0x0F, 0x6B, 0x00,
- .byte 0xFF, 0x0F, 0x65, 0x00, 0xFF, 0x0F, 0x5E, 0x00, 0xFF, 0x0F, 0x58, 0x00, 0xFF, 0x0F, 0x52, 0x00,
- .byte 0xFF, 0x0F, 0x4B, 0x00, 0xFF, 0x0F, 0x45, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x10, 0x39, 0x00,
- .byte 0x00, 0x10, 0x32, 0x00, 0x00, 0x10, 0x2C, 0x00, 0x00, 0x10, 0x26, 0x00, 0x00, 0x10, 0x1F, 0x00,
- .byte 0x00, 0x10, 0x19, 0x00, 0x00, 0x10, 0x13, 0x00, 0x00, 0x10, 0x0D, 0x00, 0x00, 0x10, 0x06, 0x00,
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0xFA, 0xFF, 0x00, 0x10, 0xF3, 0xFF, 0x00, 0x10, 0xED, 0xFF,
- .byte 0x00, 0x10, 0xE7, 0xFF, 0x00, 0x10, 0xE1, 0xFF, 0x00, 0x10, 0xDA, 0xFF, 0x00, 0x10, 0xD4, 0xFF,
- .byte 0x00, 0x10, 0xCE, 0xFF, 0x00, 0x10, 0xC7, 0xFF, 0x00, 0x10, 0xC1, 0xFF, 0xFF, 0x0F, 0xBB, 0xFF,
- .byte 0xFF, 0x0F, 0xB5, 0xFF, 0xFF, 0x0F, 0xAE, 0xFF, 0xFF, 0x0F, 0xA8, 0xFF, 0xFF, 0x0F, 0xA2, 0xFF,
- .byte 0xFF, 0x0F, 0x9B, 0xFF, 0xFF, 0x0F, 0x95, 0xFF, 0xFE, 0x0F, 0x8F, 0xFF, 0xFE, 0x0F, 0x89, 0xFF,
- .byte 0xFE, 0x0F, 0x82, 0xFF, 0xFE, 0x0F, 0x7C, 0xFF, 0xFE, 0x0F, 0x76, 0xFF, 0xFD, 0x0F, 0x70, 0xFF,
- .byte 0xFD, 0x0F, 0x69, 0xFF, 0xFD, 0x0F, 0x63, 0xFF, 0xFD, 0x0F, 0x5D, 0xFF, 0xFC, 0x0F, 0x56, 0xFF,
- .byte 0xFC, 0x0F, 0x50, 0xFF, 0xFC, 0x0F, 0x4A, 0xFF, 0xFC, 0x0F, 0x44, 0xFF, 0xFB, 0x0F, 0x3D, 0xFF,
- .byte 0xFB, 0x0F, 0x37, 0xFF, 0xFB, 0x0F, 0x31, 0xFF, 0xFA, 0x0F, 0x2A, 0xFF, 0xFA, 0x0F, 0x24, 0xFF,
- .byte 0xFA, 0x0F, 0x1E, 0xFF, 0xF9, 0x0F, 0x18, 0xFF, 0xF9, 0x0F, 0x11, 0xFF, 0xF9, 0x0F, 0x0B, 0xFF,
- .byte 0xF8, 0x0F, 0x05, 0xFF, 0xF8, 0x0F, 0xFF, 0xFE, 0xF8, 0x0F, 0xF8, 0xFE, 0xF7, 0x0F, 0xF2, 0xFE,
- .byte 0xF7, 0x0F, 0xEC, 0xFE, 0xF6, 0x0F, 0xE5, 0xFE, 0xF6, 0x0F, 0xDF, 0xFE, 0xF5, 0x0F, 0xD9, 0xFE,
- .byte 0xF5, 0x0F, 0xD3, 0xFE, 0xF4, 0x0F, 0xCC, 0xFE, 0xF4, 0x0F, 0xC6, 0xFE, 0xF3, 0x0F, 0xC0, 0xFE,
- .byte 0xF3, 0x0F, 0xBA, 0xFE, 0xF2, 0x0F, 0xB3, 0xFE, 0xF2, 0x0F, 0xAD, 0xFE, 0xF1, 0x0F, 0xA7, 0xFE,
- .byte 0xF1, 0x0F, 0xA1, 0xFE, 0xF0, 0x0F, 0x9A, 0xFE, 0xF0, 0x0F, 0x94, 0xFE, 0xEF, 0x0F, 0x8E, 0xFE,
- .byte 0xEF, 0x0F, 0x88, 0xFE, 0xEE, 0x0F, 0x81, 0xFE, 0xED, 0x0F, 0x7B, 0xFE, 0xED, 0x0F, 0x75, 0xFE,
- .byte 0xEC, 0x0F, 0x6F, 0xFE, 0xEC, 0x0F, 0x68, 0xFE, 0xEB, 0x0F, 0x62, 0xFE, 0xEA, 0x0F, 0x5C, 0xFE,
- .byte 0xEA, 0x0F, 0x56, 0xFE, 0xE9, 0x0F, 0x4F, 0xFE, 0xE8, 0x0F, 0x49, 0xFE, 0xE8, 0x0F, 0x43, 0xFE,
- .byte 0xE7, 0x0F, 0x3D, 0xFE, 0xE6, 0x0F, 0x36, 0xFE, 0xE6, 0x0F, 0x30, 0xFE, 0xE5, 0x0F, 0x2A, 0xFE,
- .byte 0xE4, 0x0F, 0x24, 0xFE, 0xE3, 0x0F, 0x1D, 0xFE, 0xE3, 0x0F, 0x17, 0xFE, 0xE2, 0x0F, 0x11, 0xFE,
- .byte 0xE1, 0x0F, 0x0B, 0xFE, 0xE0, 0x0F, 0x04, 0xFE, 0xE0, 0x0F, 0xFE, 0xFD, 0xDF, 0x0F, 0xF8, 0xFD,
- .byte 0xDE, 0x0F, 0xF2, 0xFD, 0xDD, 0x0F, 0xEB, 0xFD, 0xDC, 0x0F, 0xE5, 0xFD, 0xDC, 0x0F, 0xDF, 0xFD,
- .byte 0xDB, 0x0F, 0xD9, 0xFD, 0xDA, 0x0F, 0xD3, 0xFD, 0xD9, 0x0F, 0xCC, 0xFD, 0xD8, 0x0F, 0xC6, 0xFD,
- .byte 0xD7, 0x0F, 0xC0, 0xFD, 0xD6, 0x0F, 0xBA, 0xFD, 0xD5, 0x0F, 0xB3, 0xFD, 0xD5, 0x0F, 0xAD, 0xFD,
- .byte 0xD4, 0x0F, 0xA7, 0xFD, 0xD3, 0x0F, 0xA1, 0xFD, 0xD2, 0x0F, 0x9B, 0xFD, 0xD1, 0x0F, 0x94, 0xFD,
- .byte 0xD0, 0x0F, 0x8E, 0xFD, 0xCF, 0x0F, 0x88, 0xFD, 0xCE, 0x0F, 0x82, 0xFD, 0xCD, 0x0F, 0x7C, 0xFD,
- .byte 0xCC, 0x0F, 0x75, 0xFD, 0xCB, 0x0F, 0x6F, 0xFD, 0xCA, 0x0F, 0x69, 0xFD, 0xC9, 0x0F, 0x63, 0xFD,
- .byte 0xC8, 0x0F, 0x5D, 0xFD, 0xC7, 0x0F, 0x56, 0xFD, 0xC6, 0x0F, 0x50, 0xFD, 0xC5, 0x0F, 0x4A, 0xFD,
- .byte 0xC4, 0x0F, 0x44, 0xFD, 0xC3, 0x0F, 0x3E, 0xFD, 0xC2, 0x0F, 0x37, 0xFD, 0xC0, 0x0F, 0x31, 0xFD,
- .byte 0xBF, 0x0F, 0x2B, 0xFD, 0xBE, 0x0F, 0x25, 0xFD, 0xBD, 0x0F, 0x1F, 0xFD, 0xBC, 0x0F, 0x18, 0xFD,
- .byte 0xBB, 0x0F, 0x12, 0xFD, 0xBA, 0x0F, 0x0C, 0xFD, 0xB8, 0x0F, 0x06, 0xFD, 0xB7, 0x0F, 0x00, 0xFD,
- .byte 0xB6, 0x0F, 0xFA, 0xFC, 0xB5, 0x0F, 0xF3, 0xFC, 0xB4, 0x0F, 0xED, 0xFC, 0xB3, 0x0F, 0xE7, 0xFC,
- .byte 0xB1, 0x0F, 0xE1, 0xFC, 0xB0, 0x0F, 0xDB, 0xFC, 0xAF, 0x0F, 0xD5, 0xFC, 0xAE, 0x0F, 0xCE, 0xFC,
- .byte 0xAC, 0x0F, 0xC8, 0xFC, 0xAB, 0x0F, 0xC2, 0xFC, 0xAA, 0x0F, 0xBC, 0xFC, 0xA8, 0x0F, 0xB6, 0xFC,
- .byte 0xA7, 0x0F, 0xB0, 0xFC, 0xA6, 0x0F, 0xAA, 0xFC, 0xA5, 0x0F, 0xA3, 0xFC, 0xA3, 0x0F, 0x9D, 0xFC,
- .byte 0xA2, 0x0F, 0x97, 0xFC, 0xA1, 0x0F, 0x91, 0xFC, 0x9F, 0x0F, 0x8B, 0xFC, 0x9E, 0x0F, 0x85, 0xFC,
- .byte 0x9C, 0x0F, 0x7F, 0xFC, 0x9B, 0x0F, 0x78, 0xFC, 0x9A, 0x0F, 0x72, 0xFC, 0x98, 0x0F, 0x6C, 0xFC,
- .byte 0x97, 0x0F, 0x66, 0xFC, 0x95, 0x0F, 0x60, 0xFC, 0x94, 0x0F, 0x5A, 0xFC, 0x93, 0x0F, 0x54, 0xFC,
- .byte 0x91, 0x0F, 0x4E, 0xFC, 0x90, 0x0F, 0x47, 0xFC, 0x8E, 0x0F, 0x41, 0xFC, 0x8D, 0x0F, 0x3B, 0xFC,
- .byte 0x8B, 0x0F, 0x35, 0xFC, 0x8A, 0x0F, 0x2F, 0xFC, 0x88, 0x0F, 0x29, 0xFC, 0x87, 0x0F, 0x23, 0xFC,
- .byte 0x85, 0x0F, 0x1D, 0xFC, 0x84, 0x0F, 0x17, 0xFC, 0x82, 0x0F, 0x11, 0xFC, 0x81, 0x0F, 0x0A, 0xFC,
- .byte 0x7F, 0x0F, 0x04, 0xFC, 0x7D, 0x0F, 0xFE, 0xFB, 0x7C, 0x0F, 0xF8, 0xFB, 0x7A, 0x0F, 0xF2, 0xFB,
- .byte 0x79, 0x0F, 0xEC, 0xFB, 0x77, 0x0F, 0xE6, 0xFB, 0x76, 0x0F, 0xE0, 0xFB, 0x74, 0x0F, 0xDA, 0xFB,
- .byte 0x72, 0x0F, 0xD4, 0xFB, 0x71, 0x0F, 0xCE, 0xFB, 0x6F, 0x0F, 0xC8, 0xFB, 0x6D, 0x0F, 0xC2, 0xFB,
- .byte 0x6C, 0x0F, 0xBC, 0xFB, 0x6A, 0x0F, 0xB5, 0xFB, 0x68, 0x0F, 0xAF, 0xFB, 0x67, 0x0F, 0xA9, 0xFB,
- .byte 0x65, 0x0F, 0xA3, 0xFB, 0x63, 0x0F, 0x9D, 0xFB, 0x61, 0x0F, 0x97, 0xFB, 0x60, 0x0F, 0x91, 0xFB,
- .byte 0x5E, 0x0F, 0x8B, 0xFB, 0x5C, 0x0F, 0x85, 0xFB, 0x5A, 0x0F, 0x7F, 0xFB, 0x59, 0x0F, 0x79, 0xFB,
- .byte 0x57, 0x0F, 0x73, 0xFB, 0x55, 0x0F, 0x6D, 0xFB, 0x53, 0x0F, 0x67, 0xFB, 0x51, 0x0F, 0x61, 0xFB,
- .byte 0x50, 0x0F, 0x5B, 0xFB, 0x4E, 0x0F, 0x55, 0xFB, 0x4C, 0x0F, 0x4F, 0xFB, 0x4A, 0x0F, 0x49, 0xFB,
- .byte 0x48, 0x0F, 0x43, 0xFB, 0x46, 0x0F, 0x3D, 0xFB, 0x45, 0x0F, 0x37, 0xFB, 0x43, 0x0F, 0x31, 0xFB,
- .byte 0x41, 0x0F, 0x2B, 0xFB, 0x3F, 0x0F, 0x25, 0xFB, 0x3D, 0x0F, 0x1F, 0xFB, 0x3B, 0x0F, 0x19, 0xFB,
- .byte 0x39, 0x0F, 0x13, 0xFB, 0x37, 0x0F, 0x0D, 0xFB, 0x35, 0x0F, 0x07, 0xFB, 0x33, 0x0F, 0x01, 0xFB,
- .byte 0x31, 0x0F, 0xFB, 0xFA, 0x2F, 0x0F, 0xF5, 0xFA, 0x2D, 0x0F, 0xEF, 0xFA, 0x2B, 0x0F, 0xE9, 0xFA,
- .byte 0x29, 0x0F, 0xE3, 0xFA, 0x27, 0x0F, 0xDD, 0xFA, 0x25, 0x0F, 0xD7, 0xFA, 0x23, 0x0F, 0xD1, 0xFA,
- .byte 0x21, 0x0F, 0xCC, 0xFA, 0x1F, 0x0F, 0xC6, 0xFA, 0x1D, 0x0F, 0xC0, 0xFA, 0x1B, 0x0F, 0xBA, 0xFA,
- .byte 0x19, 0x0F, 0xB4, 0xFA, 0x17, 0x0F, 0xAE, 0xFA, 0x15, 0x0F, 0xA8, 0xFA, 0x13, 0x0F, 0xA2, 0xFA,
- .byte 0x11, 0x0F, 0x9C, 0xFA, 0x0E, 0x0F, 0x96, 0xFA, 0x0C, 0x0F, 0x90, 0xFA, 0x0A, 0x0F, 0x8A, 0xFA,
- .byte 0x08, 0x0F, 0x84, 0xFA, 0x06, 0x0F, 0x7F, 0xFA, 0x04, 0x0F, 0x79, 0xFA, 0x02, 0x0F, 0x73, 0xFA,
- .byte 0xFF, 0x0E, 0x6D, 0xFA, 0xFD, 0x0E, 0x67, 0xFA, 0xFB, 0x0E, 0x61, 0xFA, 0xF9, 0x0E, 0x5B, 0xFA,
- .byte 0xF7, 0x0E, 0x55, 0xFA, 0xF4, 0x0E, 0x4F, 0xFA, 0xF2, 0x0E, 0x4A, 0xFA, 0xF0, 0x0E, 0x44, 0xFA,
- .byte 0xEE, 0x0E, 0x3E, 0xFA, 0xEB, 0x0E, 0x38, 0xFA, 0xE9, 0x0E, 0x32, 0xFA, 0xE7, 0x0E, 0x2C, 0xFA,
- .byte 0xE4, 0x0E, 0x26, 0xFA, 0xE2, 0x0E, 0x21, 0xFA, 0xE0, 0x0E, 0x1B, 0xFA, 0xDD, 0x0E, 0x15, 0xFA,
- .byte 0xDB, 0x0E, 0x0F, 0xFA, 0xD9, 0x0E, 0x09, 0xFA, 0xD6, 0x0E, 0x03, 0xFA, 0xD4, 0x0E, 0xFE, 0xF9,
- .byte 0xD2, 0x0E, 0xF8, 0xF9, 0xCF, 0x0E, 0xF2, 0xF9, 0xCD, 0x0E, 0xEC, 0xF9, 0xCB, 0x0E, 0xE6, 0xF9,
- .byte 0xC8, 0x0E, 0xE1, 0xF9, 0xC6, 0x0E, 0xDB, 0xF9, 0xC3, 0x0E, 0xD5, 0xF9, 0xC1, 0x0E, 0xCF, 0xF9,
- .byte 0xBF, 0x0E, 0xC9, 0xF9, 0xBC, 0x0E, 0xC4, 0xF9, 0xBA, 0x0E, 0xBE, 0xF9, 0xB7, 0x0E, 0xB8, 0xF9,
- .byte 0xB5, 0x0E, 0xB2, 0xF9, 0xB2, 0x0E, 0xAC, 0xF9, 0xB0, 0x0E, 0xA7, 0xF9, 0xAD, 0x0E, 0xA1, 0xF9,
- .byte 0xAB, 0x0E, 0x9B, 0xF9, 0xA8, 0x0E, 0x95, 0xF9, 0xA6, 0x0E, 0x90, 0xF9, 0xA3, 0x0E, 0x8A, 0xF9,
- .byte 0xA1, 0x0E, 0x84, 0xF9, 0x9E, 0x0E, 0x7E, 0xF9, 0x9B, 0x0E, 0x79, 0xF9, 0x99, 0x0E, 0x73, 0xF9,
- .byte 0x96, 0x0E, 0x6D, 0xF9, 0x94, 0x0E, 0x67, 0xF9, 0x91, 0x0E, 0x62, 0xF9, 0x8F, 0x0E, 0x5C, 0xF9,
- .byte 0x8C, 0x0E, 0x56, 0xF9, 0x89, 0x0E, 0x51, 0xF9, 0x87, 0x0E, 0x4B, 0xF9, 0x84, 0x0E, 0x45, 0xF9,
- .byte 0x81, 0x0E, 0x3F, 0xF9, 0x7F, 0x0E, 0x3A, 0xF9, 0x7C, 0x0E, 0x34, 0xF9, 0x79, 0x0E, 0x2E, 0xF9,
- .byte 0x77, 0x0E, 0x29, 0xF9, 0x74, 0x0E, 0x23, 0xF9, 0x71, 0x0E, 0x1D, 0xF9, 0x6F, 0x0E, 0x18, 0xF9,
- .byte 0x6C, 0x0E, 0x12, 0xF9, 0x69, 0x0E, 0x0C, 0xF9, 0x66, 0x0E, 0x07, 0xF9, 0x64, 0x0E, 0x01, 0xF9,
- .byte 0x61, 0x0E, 0xFB, 0xF8, 0x5E, 0x0E, 0xF6, 0xF8, 0x5B, 0x0E, 0xF0, 0xF8, 0x59, 0x0E, 0xEB, 0xF8,
- .byte 0x56, 0x0E, 0xE5, 0xF8, 0x53, 0x0E, 0xDF, 0xF8, 0x50, 0x0E, 0xDA, 0xF8, 0x4D, 0x0E, 0xD4, 0xF8,
- .byte 0x4B, 0x0E, 0xCE, 0xF8, 0x48, 0x0E, 0xC9, 0xF8, 0x45, 0x0E, 0xC3, 0xF8, 0x42, 0x0E, 0xBE, 0xF8,
- .byte 0x3F, 0x0E, 0xB8, 0xF8, 0x3C, 0x0E, 0xB2, 0xF8, 0x3A, 0x0E, 0xAD, 0xF8, 0x37, 0x0E, 0xA7, 0xF8,
- .byte 0x34, 0x0E, 0xA2, 0xF8, 0x31, 0x0E, 0x9C, 0xF8, 0x2E, 0x0E, 0x96, 0xF8, 0x2B, 0x0E, 0x91, 0xF8,
- .byte 0x28, 0x0E, 0x8B, 0xF8, 0x25, 0x0E, 0x86, 0xF8, 0x22, 0x0E, 0x80, 0xF8, 0x1F, 0x0E, 0x7B, 0xF8,
- .byte 0x1C, 0x0E, 0x75, 0xF8, 0x19, 0x0E, 0x70, 0xF8, 0x16, 0x0E, 0x6A, 0xF8, 0x13, 0x0E, 0x65, 0xF8,
- .byte 0x10, 0x0E, 0x5F, 0xF8, 0x0D, 0x0E, 0x5A, 0xF8, 0x0A, 0x0E, 0x54, 0xF8, 0x07, 0x0E, 0x4E, 0xF8,
- .byte 0x04, 0x0E, 0x49, 0xF8, 0x01, 0x0E, 0x43, 0xF8, 0xFE, 0x0D, 0x3E, 0xF8, 0xFB, 0x0D, 0x38, 0xF8,
- .byte 0xF8, 0x0D, 0x33, 0xF8, 0xF5, 0x0D, 0x2E, 0xF8, 0xF2, 0x0D, 0x28, 0xF8, 0xEF, 0x0D, 0x23, 0xF8,
- .byte 0xEC, 0x0D, 0x1D, 0xF8, 0xE9, 0x0D, 0x18, 0xF8, 0xE6, 0x0D, 0x12, 0xF8, 0xE3, 0x0D, 0x0D, 0xF8,
- .byte 0xDF, 0x0D, 0x07, 0xF8, 0xDC, 0x0D, 0x02, 0xF8, 0xD9, 0x0D, 0xFC, 0xF7, 0xD6, 0x0D, 0xF7, 0xF7,
- .byte 0xD3, 0x0D, 0xF2, 0xF7, 0xD0, 0x0D, 0xEC, 0xF7, 0xCC, 0x0D, 0xE7, 0xF7, 0xC9, 0x0D, 0xE1, 0xF7,
- .byte 0xC6, 0x0D, 0xDC, 0xF7, 0xC3, 0x0D, 0xD6, 0xF7, 0xC0, 0x0D, 0xD1, 0xF7, 0xBC, 0x0D, 0xCC, 0xF7,
- .byte 0xB9, 0x0D, 0xC6, 0xF7, 0xB6, 0x0D, 0xC1, 0xF7, 0xB3, 0x0D, 0xBB, 0xF7, 0xB0, 0x0D, 0xB6, 0xF7,
- .byte 0xAC, 0x0D, 0xB1, 0xF7, 0xA9, 0x0D, 0xAB, 0xF7, 0xA6, 0x0D, 0xA6, 0xF7, 0xA2, 0x0D, 0xA1, 0xF7,
- .byte 0x9F, 0x0D, 0x9B, 0xF7, 0x9C, 0x0D, 0x96, 0xF7, 0x99, 0x0D, 0x91, 0xF7, 0x95, 0x0D, 0x8B, 0xF7,
- .byte 0x92, 0x0D, 0x86, 0xF7, 0x8F, 0x0D, 0x81, 0xF7, 0x8B, 0x0D, 0x7B, 0xF7, 0x88, 0x0D, 0x76, 0xF7,
- .byte 0x85, 0x0D, 0x71, 0xF7, 0x81, 0x0D, 0x6B, 0xF7, 0x7E, 0x0D, 0x66, 0xF7, 0x7A, 0x0D, 0x61, 0xF7,
- .byte 0x77, 0x0D, 0x5B, 0xF7, 0x74, 0x0D, 0x56, 0xF7, 0x70, 0x0D, 0x51, 0xF7, 0x6D, 0x0D, 0x4C, 0xF7,
- .byte 0x69, 0x0D, 0x46, 0xF7, 0x66, 0x0D, 0x41, 0xF7, 0x62, 0x0D, 0x3C, 0xF7, 0x5F, 0x0D, 0x37, 0xF7,
- .byte 0x5C, 0x0D, 0x31, 0xF7, 0x58, 0x0D, 0x2C, 0xF7, 0x55, 0x0D, 0x27, 0xF7, 0x51, 0x0D, 0x22, 0xF7,
- .byte 0x4E, 0x0D, 0x1C, 0xF7, 0x4A, 0x0D, 0x17, 0xF7, 0x47, 0x0D, 0x12, 0xF7, 0x43, 0x0D, 0x0D, 0xF7,
- .byte 0x40, 0x0D, 0x08, 0xF7, 0x3C, 0x0D, 0x02, 0xF7, 0x39, 0x0D, 0xFD, 0xF6, 0x35, 0x0D, 0xF8, 0xF6,
- .byte 0x32, 0x0D, 0xF3, 0xF6, 0x2E, 0x0D, 0xEE, 0xF6, 0x2A, 0x0D, 0xE8, 0xF6, 0x27, 0x0D, 0xE3, 0xF6,
- .byte 0x23, 0x0D, 0xDE, 0xF6, 0x20, 0x0D, 0xD9, 0xF6, 0x1C, 0x0D, 0xD4, 0xF6, 0x18, 0x0D, 0xCF, 0xF6,
- .byte 0x15, 0x0D, 0xC9, 0xF6, 0x11, 0x0D, 0xC4, 0xF6, 0x0E, 0x0D, 0xBF, 0xF6, 0x0A, 0x0D, 0xBA, 0xF6,
- .byte 0x06, 0x0D, 0xB5, 0xF6, 0x03, 0x0D, 0xB0, 0xF6, 0xFF, 0x0C, 0xAB, 0xF6, 0xFB, 0x0C, 0xA6, 0xF6,
- .byte 0xF8, 0x0C, 0xA1, 0xF6, 0xF4, 0x0C, 0x9B, 0xF6, 0xF0, 0x0C, 0x96, 0xF6, 0xED, 0x0C, 0x91, 0xF6,
- .byte 0xE9, 0x0C, 0x8C, 0xF6, 0xE5, 0x0C, 0x87, 0xF6, 0xE1, 0x0C, 0x82, 0xF6, 0xDE, 0x0C, 0x7D, 0xF6,
- .byte 0xDA, 0x0C, 0x78, 0xF6, 0xD6, 0x0C, 0x73, 0xF6, 0xD2, 0x0C, 0x6E, 0xF6, 0xCF, 0x0C, 0x69, 0xF6,
- .byte 0xCB, 0x0C, 0x64, 0xF6, 0xC7, 0x0C, 0x5F, 0xF6, 0xC3, 0x0C, 0x5A, 0xF6, 0xC0, 0x0C, 0x55, 0xF6,
- .byte 0xBC, 0x0C, 0x50, 0xF6, 0xB8, 0x0C, 0x4B, 0xF6, 0xB4, 0x0C, 0x46, 0xF6, 0xB0, 0x0C, 0x41, 0xF6,
- .byte 0xAC, 0x0C, 0x3C, 0xF6, 0xA9, 0x0C, 0x37, 0xF6, 0xA5, 0x0C, 0x32, 0xF6, 0xA1, 0x0C, 0x2D, 0xF6,
- .byte 0x9D, 0x0C, 0x28, 0xF6, 0x99, 0x0C, 0x23, 0xF6, 0x95, 0x0C, 0x1E, 0xF6, 0x91, 0x0C, 0x19, 0xF6,
- .byte 0x8E, 0x0C, 0x14, 0xF6, 0x8A, 0x0C, 0x0F, 0xF6, 0x86, 0x0C, 0x0A, 0xF6, 0x82, 0x0C, 0x05, 0xF6,
- .byte 0x7E, 0x0C, 0x01, 0xF6, 0x7A, 0x0C, 0xFC, 0xF5, 0x76, 0x0C, 0xF7, 0xF5, 0x72, 0x0C, 0xF2, 0xF5,
- .byte 0x6E, 0x0C, 0xED, 0xF5, 0x6A, 0x0C, 0xE8, 0xF5, 0x66, 0x0C, 0xE3, 0xF5, 0x62, 0x0C, 0xDE, 0xF5,
- .byte 0x5E, 0x0C, 0xDA, 0xF5, 0x5A, 0x0C, 0xD5, 0xF5, 0x56, 0x0C, 0xD0, 0xF5, 0x52, 0x0C, 0xCB, 0xF5,
- .byte 0x4E, 0x0C, 0xC6, 0xF5, 0x4A, 0x0C, 0xC1, 0xF5, 0x46, 0x0C, 0xBC, 0xF5, 0x42, 0x0C, 0xB8, 0xF5,
- .byte 0x3E, 0x0C, 0xB3, 0xF5, 0x3A, 0x0C, 0xAE, 0xF5, 0x36, 0x0C, 0xA9, 0xF5, 0x32, 0x0C, 0xA4, 0xF5,
- .byte 0x2E, 0x0C, 0xA0, 0xF5, 0x2A, 0x0C, 0x9B, 0xF5, 0x26, 0x0C, 0x96, 0xF5, 0x22, 0x0C, 0x91, 0xF5,
- .byte 0x1E, 0x0C, 0x8D, 0xF5, 0x19, 0x0C, 0x88, 0xF5, 0x15, 0x0C, 0x83, 0xF5, 0x11, 0x0C, 0x7E, 0xF5,
- .byte 0x0D, 0x0C, 0x7A, 0xF5, 0x09, 0x0C, 0x75, 0xF5, 0x05, 0x0C, 0x70, 0xF5, 0x01, 0x0C, 0x6B, 0xF5,
- .byte 0xFC, 0x0B, 0x67, 0xF5, 0xF8, 0x0B, 0x62, 0xF5, 0xF4, 0x0B, 0x5D, 0xF5, 0xF0, 0x0B, 0x59, 0xF5,
- .byte 0xEC, 0x0B, 0x54, 0xF5, 0xE8, 0x0B, 0x4F, 0xF5, 0xE3, 0x0B, 0x4B, 0xF5, 0xDF, 0x0B, 0x46, 0xF5,
- .byte 0xDB, 0x0B, 0x41, 0xF5, 0xD7, 0x0B, 0x3D, 0xF5, 0xD2, 0x0B, 0x38, 0xF5, 0xCE, 0x0B, 0x33, 0xF5,
- .byte 0xCA, 0x0B, 0x2F, 0xF5, 0xC6, 0x0B, 0x2A, 0xF5, 0xC1, 0x0B, 0x25, 0xF5, 0xBD, 0x0B, 0x21, 0xF5,
- .byte 0xB9, 0x0B, 0x1C, 0xF5, 0xB5, 0x0B, 0x18, 0xF5, 0xB0, 0x0B, 0x13, 0xF5, 0xAC, 0x0B, 0x0E, 0xF5,
- .byte 0xA8, 0x0B, 0x0A, 0xF5, 0xA3, 0x0B, 0x05, 0xF5, 0x9F, 0x0B, 0x01, 0xF5, 0x9B, 0x0B, 0xFC, 0xF4,
- .byte 0x97, 0x0B, 0xF8, 0xF4, 0x92, 0x0B, 0xF3, 0xF4, 0x8E, 0x0B, 0xEF, 0xF4, 0x89, 0x0B, 0xEA, 0xF4,
- .byte 0x85, 0x0B, 0xE5, 0xF4, 0x81, 0x0B, 0xE1, 0xF4, 0x7C, 0x0B, 0xDC, 0xF4, 0x78, 0x0B, 0xD8, 0xF4,
- .byte 0x74, 0x0B, 0xD3, 0xF4, 0x6F, 0x0B, 0xCF, 0xF4, 0x6B, 0x0B, 0xCA, 0xF4, 0x66, 0x0B, 0xC6, 0xF4,
- .byte 0x62, 0x0B, 0xC2, 0xF4, 0x5E, 0x0B, 0xBD, 0xF4, 0x59, 0x0B, 0xB9, 0xF4, 0x55, 0x0B, 0xB4, 0xF4,
- .byte 0x50, 0x0B, 0xB0, 0xF4, 0x4C, 0x0B, 0xAB, 0xF4, 0x47, 0x0B, 0xA7, 0xF4, 0x43, 0x0B, 0xA2, 0xF4,
- .byte 0x3E, 0x0B, 0x9E, 0xF4, 0x3A, 0x0B, 0x9A, 0xF4, 0x36, 0x0B, 0x95, 0xF4, 0x31, 0x0B, 0x91, 0xF4,
- .byte 0x2D, 0x0B, 0x8C, 0xF4, 0x28, 0x0B, 0x88, 0xF4, 0x24, 0x0B, 0x84, 0xF4, 0x1F, 0x0B, 0x7F, 0xF4,
- .byte 0x1B, 0x0B, 0x7B, 0xF4, 0x16, 0x0B, 0x77, 0xF4, 0x11, 0x0B, 0x72, 0xF4, 0x0D, 0x0B, 0x6E, 0xF4,
- .byte 0x08, 0x0B, 0x69, 0xF4, 0x04, 0x0B, 0x65, 0xF4, 0xFF, 0x0A, 0x61, 0xF4, 0xFB, 0x0A, 0x5D, 0xF4,
- .byte 0xF6, 0x0A, 0x58, 0xF4, 0xF2, 0x0A, 0x54, 0xF4, 0xED, 0x0A, 0x50, 0xF4, 0xE8, 0x0A, 0x4B, 0xF4,
- .byte 0xE4, 0x0A, 0x47, 0xF4, 0xDF, 0x0A, 0x43, 0xF4, 0xDB, 0x0A, 0x3F, 0xF4, 0xD6, 0x0A, 0x3A, 0xF4,
- .byte 0xD1, 0x0A, 0x36, 0xF4, 0xCD, 0x0A, 0x32, 0xF4, 0xC8, 0x0A, 0x2E, 0xF4, 0xC3, 0x0A, 0x29, 0xF4,
- .byte 0xBF, 0x0A, 0x25, 0xF4, 0xBA, 0x0A, 0x21, 0xF4, 0xB5, 0x0A, 0x1D, 0xF4, 0xB1, 0x0A, 0x18, 0xF4,
- .byte 0xAC, 0x0A, 0x14, 0xF4, 0xA7, 0x0A, 0x10, 0xF4, 0xA3, 0x0A, 0x0C, 0xF4, 0x9E, 0x0A, 0x08, 0xF4,
- .byte 0x99, 0x0A, 0x04, 0xF4, 0x95, 0x0A, 0xFF, 0xF3, 0x90, 0x0A, 0xFB, 0xF3, 0x8B, 0x0A, 0xF7, 0xF3,
- .byte 0x86, 0x0A, 0xF3, 0xF3, 0x82, 0x0A, 0xEF, 0xF3, 0x7D, 0x0A, 0xEB, 0xF3, 0x78, 0x0A, 0xE7, 0xF3,
- .byte 0x73, 0x0A, 0xE2, 0xF3, 0x6F, 0x0A, 0xDE, 0xF3, 0x6A, 0x0A, 0xDA, 0xF3, 0x65, 0x0A, 0xD6, 0xF3,
- .byte 0x60, 0x0A, 0xD2, 0xF3, 0x5C, 0x0A, 0xCE, 0xF3, 0x57, 0x0A, 0xCA, 0xF3, 0x52, 0x0A, 0xC6, 0xF3,
- .byte 0x4D, 0x0A, 0xC2, 0xF3, 0x48, 0x0A, 0xBE, 0xF3, 0x44, 0x0A, 0xBA, 0xF3, 0x3F, 0x0A, 0xB6, 0xF3,
- .byte 0x3A, 0x0A, 0xB2, 0xF3, 0x35, 0x0A, 0xAE, 0xF3, 0x30, 0x0A, 0xAA, 0xF3, 0x2B, 0x0A, 0xA6, 0xF3,
- .byte 0x26, 0x0A, 0xA2, 0xF3, 0x22, 0x0A, 0x9E, 0xF3, 0x1D, 0x0A, 0x9A, 0xF3, 0x18, 0x0A, 0x96, 0xF3,
- .byte 0x13, 0x0A, 0x92, 0xF3, 0x0E, 0x0A, 0x8E, 0xF3, 0x09, 0x0A, 0x8A, 0xF3, 0x04, 0x0A, 0x86, 0xF3,
- .byte 0xFF, 0x09, 0x82, 0xF3, 0xFB, 0x09, 0x7E, 0xF3, 0xF6, 0x09, 0x7A, 0xF3, 0xF1, 0x09, 0x76, 0xF3,
- .byte 0xEC, 0x09, 0x72, 0xF3, 0xE7, 0x09, 0x6F, 0xF3, 0xE2, 0x09, 0x6B, 0xF3, 0xDD, 0x09, 0x67, 0xF3,
- .byte 0xD8, 0x09, 0x63, 0xF3, 0xD3, 0x09, 0x5F, 0xF3, 0xCE, 0x09, 0x5B, 0xF3, 0xC9, 0x09, 0x57, 0xF3,
- .byte 0xC4, 0x09, 0x54, 0xF3, 0xBF, 0x09, 0x50, 0xF3, 0xBA, 0x09, 0x4C, 0xF3, 0xB5, 0x09, 0x48, 0xF3,
- .byte 0xB0, 0x09, 0x44, 0xF3, 0xAB, 0x09, 0x40, 0xF3, 0xA6, 0x09, 0x3D, 0xF3, 0xA1, 0x09, 0x39, 0xF3,
- .byte 0x9C, 0x09, 0x35, 0xF3, 0x97, 0x09, 0x31, 0xF3, 0x92, 0x09, 0x2E, 0xF3, 0x8D, 0x09, 0x2A, 0xF3,
- .byte 0x88, 0x09, 0x26, 0xF3, 0x83, 0x09, 0x22, 0xF3, 0x7E, 0x09, 0x1F, 0xF3, 0x79, 0x09, 0x1B, 0xF3,
- .byte 0x74, 0x09, 0x17, 0xF3, 0x6F, 0x09, 0x13, 0xF3, 0x6A, 0x09, 0x10, 0xF3, 0x65, 0x09, 0x0C, 0xF3,
- .byte 0x5F, 0x09, 0x08, 0xF3, 0x5A, 0x09, 0x05, 0xF3, 0x55, 0x09, 0x01, 0xF3, 0x50, 0x09, 0xFD, 0xF2,
- .byte 0x4B, 0x09, 0xFA, 0xF2, 0x46, 0x09, 0xF6, 0xF2, 0x41, 0x09, 0xF2, 0xF2, 0x3C, 0x09, 0xEF, 0xF2,
- .byte 0x37, 0x09, 0xEB, 0xF2, 0x31, 0x09, 0xE8, 0xF2, 0x2C, 0x09, 0xE4, 0xF2, 0x27, 0x09, 0xE0, 0xF2,
- .byte 0x22, 0x09, 0xDD, 0xF2, 0x1D, 0x09, 0xD9, 0xF2, 0x18, 0x09, 0xD6, 0xF2, 0x12, 0x09, 0xD2, 0xF2,
- .byte 0x0D, 0x09, 0xCE, 0xF2, 0x08, 0x09, 0xCB, 0xF2, 0x03, 0x09, 0xC7, 0xF2, 0xFE, 0x08, 0xC4, 0xF2,
- .byte 0xF8, 0x08, 0xC0, 0xF2, 0xF3, 0x08, 0xBD, 0xF2, 0xEE, 0x08, 0xB9, 0xF2, 0xE9, 0x08, 0xB6, 0xF2,
- .byte 0xE4, 0x08, 0xB2, 0xF2, 0xDE, 0x08, 0xAF, 0xF2, 0xD9, 0x08, 0xAB, 0xF2, 0xD4, 0x08, 0xA8, 0xF2,
- .byte 0xCF, 0x08, 0xA4, 0xF2, 0xC9, 0x08, 0xA1, 0xF2, 0xC4, 0x08, 0x9E, 0xF2, 0xBF, 0x08, 0x9A, 0xF2,
- .byte 0xBA, 0x08, 0x97, 0xF2, 0xB4, 0x08, 0x93, 0xF2, 0xAF, 0x08, 0x90, 0xF2, 0xAA, 0x08, 0x8C, 0xF2,
- .byte 0xA5, 0x08, 0x89, 0xF2, 0x9F, 0x08, 0x86, 0xF2, 0x9A, 0x08, 0x82, 0xF2, 0x95, 0x08, 0x7F, 0xF2,
- .byte 0x8F, 0x08, 0x7B, 0xF2, 0x8A, 0x08, 0x78, 0xF2, 0x85, 0x08, 0x75, 0xF2, 0x7F, 0x08, 0x71, 0xF2,
- .byte 0x7A, 0x08, 0x6E, 0xF2, 0x75, 0x08, 0x6B, 0xF2, 0x6F, 0x08, 0x67, 0xF2, 0x6A, 0x08, 0x64, 0xF2,
- .byte 0x65, 0x08, 0x61, 0xF2, 0x5F, 0x08, 0x5E, 0xF2, 0x5A, 0x08, 0x5A, 0xF2, 0x55, 0x08, 0x57, 0xF2,
- .byte 0x4F, 0x08, 0x54, 0xF2, 0x4A, 0x08, 0x50, 0xF2, 0x45, 0x08, 0x4D, 0xF2, 0x3F, 0x08, 0x4A, 0xF2,
- .byte 0x3A, 0x08, 0x47, 0xF2, 0x34, 0x08, 0x44, 0xF2, 0x2F, 0x08, 0x40, 0xF2, 0x2A, 0x08, 0x3D, 0xF2,
- .byte 0x24, 0x08, 0x3A, 0xF2, 0x1F, 0x08, 0x37, 0xF2, 0x19, 0x08, 0x34, 0xF2, 0x14, 0x08, 0x30, 0xF2,
- .byte 0x0E, 0x08, 0x2D, 0xF2, 0x09, 0x08, 0x2A, 0xF2, 0x04, 0x08, 0x27, 0xF2, 0xFE, 0x07, 0x24, 0xF2,
- .byte 0xF9, 0x07, 0x21, 0xF2, 0xF3, 0x07, 0x1D, 0xF2, 0xEE, 0x07, 0x1A, 0xF2, 0xE8, 0x07, 0x17, 0xF2,
- .byte 0xE3, 0x07, 0x14, 0xF2, 0xDD, 0x07, 0x11, 0xF2, 0xD8, 0x07, 0x0E, 0xF2, 0xD2, 0x07, 0x0B, 0xF2,
- .byte 0xCD, 0x07, 0x08, 0xF2, 0xC8, 0x07, 0x05, 0xF2, 0xC2, 0x07, 0x02, 0xF2, 0xBD, 0x07, 0xFF, 0xF1,
- .byte 0xB7, 0x07, 0xFC, 0xF1, 0xB2, 0x07, 0xF9, 0xF1, 0xAC, 0x07, 0xF6, 0xF1, 0xA6, 0x07, 0xF3, 0xF1,
- .byte 0xA1, 0x07, 0xF0, 0xF1, 0x9B, 0x07, 0xED, 0xF1, 0x96, 0x07, 0xEA, 0xF1, 0x90, 0x07, 0xE7, 0xF1,
- .byte 0x8B, 0x07, 0xE4, 0xF1, 0x85, 0x07, 0xE1, 0xF1, 0x80, 0x07, 0xDE, 0xF1, 0x7A, 0x07, 0xDB, 0xF1,
- .byte 0x75, 0x07, 0xD8, 0xF1, 0x6F, 0x07, 0xD5, 0xF1, 0x6A, 0x07, 0xD2, 0xF1, 0x64, 0x07, 0xCF, 0xF1,
- .byte 0x5E, 0x07, 0xCC, 0xF1, 0x59, 0x07, 0xC9, 0xF1, 0x53, 0x07, 0xC6, 0xF1, 0x4E, 0x07, 0xC4, 0xF1,
- .byte 0x48, 0x07, 0xC1, 0xF1, 0x42, 0x07, 0xBE, 0xF1, 0x3D, 0x07, 0xBB, 0xF1, 0x37, 0x07, 0xB8, 0xF1,
- .byte 0x32, 0x07, 0xB5, 0xF1, 0x2C, 0x07, 0xB3, 0xF1, 0x26, 0x07, 0xB0, 0xF1, 0x21, 0x07, 0xAD, 0xF1,
- .byte 0x1B, 0x07, 0xAA, 0xF1, 0x15, 0x07, 0xA7, 0xF1, 0x10, 0x07, 0xA5, 0xF1, 0x0A, 0x07, 0xA2, 0xF1,
- .byte 0x05, 0x07, 0x9F, 0xF1, 0xFF, 0x06, 0x9C, 0xF1, 0xF9, 0x06, 0x9A, 0xF1, 0xF4, 0x06, 0x97, 0xF1,
- .byte 0xEE, 0x06, 0x94, 0xF1, 0xE8, 0x06, 0x91, 0xF1, 0xE3, 0x06, 0x8F, 0xF1, 0xDD, 0x06, 0x8C, 0xF1,
- .byte 0xD7, 0x06, 0x89, 0xF1, 0xD2, 0x06, 0x87, 0xF1, 0xCC, 0x06, 0x84, 0xF1, 0xC6, 0x06, 0x81, 0xF1,
- .byte 0xC1, 0x06, 0x7F, 0xF1, 0xBB, 0x06, 0x7C, 0xF1, 0xB5, 0x06, 0x79, 0xF1, 0xAF, 0x06, 0x77, 0xF1,
- .byte 0xAA, 0x06, 0x74, 0xF1, 0xA4, 0x06, 0x71, 0xF1, 0x9E, 0x06, 0x6F, 0xF1, 0x99, 0x06, 0x6C, 0xF1,
- .byte 0x93, 0x06, 0x6A, 0xF1, 0x8D, 0x06, 0x67, 0xF1, 0x87, 0x06, 0x65, 0xF1, 0x82, 0x06, 0x62, 0xF1,
- .byte 0x7C, 0x06, 0x5F, 0xF1, 0x76, 0x06, 0x5D, 0xF1, 0x70, 0x06, 0x5A, 0xF1, 0x6B, 0x06, 0x58, 0xF1,
- .byte 0x65, 0x06, 0x55, 0xF1, 0x5F, 0x06, 0x53, 0xF1, 0x59, 0x06, 0x50, 0xF1, 0x54, 0x06, 0x4E, 0xF1,
- .byte 0x4E, 0x06, 0x4B, 0xF1, 0x48, 0x06, 0x49, 0xF1, 0x42, 0x06, 0x46, 0xF1, 0x3C, 0x06, 0x44, 0xF1,
- .byte 0x37, 0x06, 0x41, 0xF1, 0x31, 0x06, 0x3F, 0xF1, 0x2B, 0x06, 0x3D, 0xF1, 0x25, 0x06, 0x3A, 0xF1,
- .byte 0x1F, 0x06, 0x38, 0xF1, 0x1A, 0x06, 0x35, 0xF1, 0x14, 0x06, 0x33, 0xF1, 0x0E, 0x06, 0x31, 0xF1,
- .byte 0x08, 0x06, 0x2E, 0xF1, 0x02, 0x06, 0x2C, 0xF1, 0xFD, 0x05, 0x2A, 0xF1, 0xF7, 0x05, 0x27, 0xF1,
- .byte 0xF1, 0x05, 0x25, 0xF1, 0xEB, 0x05, 0x23, 0xF1, 0xE5, 0x05, 0x20, 0xF1, 0xDF, 0x05, 0x1E, 0xF1,
- .byte 0xDA, 0x05, 0x1C, 0xF1, 0xD4, 0x05, 0x19, 0xF1, 0xCE, 0x05, 0x17, 0xF1, 0xC8, 0x05, 0x15, 0xF1,
- .byte 0xC2, 0x05, 0x12, 0xF1, 0xBC, 0x05, 0x10, 0xF1, 0xB6, 0x05, 0x0E, 0xF1, 0xB1, 0x05, 0x0C, 0xF1,
- .byte 0xAB, 0x05, 0x09, 0xF1, 0xA5, 0x05, 0x07, 0xF1, 0x9F, 0x05, 0x05, 0xF1, 0x99, 0x05, 0x03, 0xF1,
- .byte 0x93, 0x05, 0x01, 0xF1, 0x8D, 0x05, 0xFE, 0xF0, 0x87, 0x05, 0xFC, 0xF0, 0x81, 0x05, 0xFA, 0xF0,
- .byte 0x7C, 0x05, 0xF8, 0xF0, 0x76, 0x05, 0xF6, 0xF0, 0x70, 0x05, 0xF4, 0xF0, 0x6A, 0x05, 0xF2, 0xF0,
- .byte 0x64, 0x05, 0xEF, 0xF0, 0x5E, 0x05, 0xED, 0xF0, 0x58, 0x05, 0xEB, 0xF0, 0x52, 0x05, 0xE9, 0xF0,
- .byte 0x4C, 0x05, 0xE7, 0xF0, 0x46, 0x05, 0xE5, 0xF0, 0x40, 0x05, 0xE3, 0xF0, 0x3A, 0x05, 0xE1, 0xF0,
- .byte 0x34, 0x05, 0xDF, 0xF0, 0x2F, 0x05, 0xDD, 0xF0, 0x29, 0x05, 0xDB, 0xF0, 0x23, 0x05, 0xD9, 0xF0,
- .byte 0x1D, 0x05, 0xD7, 0xF0, 0x17, 0x05, 0xD5, 0xF0, 0x11, 0x05, 0xD3, 0xF0, 0x0B, 0x05, 0xD1, 0xF0,
- .byte 0x05, 0x05, 0xCF, 0xF0, 0xFF, 0x04, 0xCD, 0xF0, 0xF9, 0x04, 0xCB, 0xF0, 0xF3, 0x04, 0xC9, 0xF0,
- .byte 0xED, 0x04, 0xC7, 0xF0, 0xE7, 0x04, 0xC5, 0xF0, 0xE1, 0x04, 0xC3, 0xF0, 0xDB, 0x04, 0xC1, 0xF0,
- .byte 0xD5, 0x04, 0xBF, 0xF0, 0xCF, 0x04, 0xBD, 0xF0, 0xC9, 0x04, 0xBB, 0xF0, 0xC3, 0x04, 0xBA, 0xF0,
- .byte 0xBD, 0x04, 0xB8, 0xF0, 0xB7, 0x04, 0xB6, 0xF0, 0xB1, 0x04, 0xB4, 0xF0, 0xAB, 0x04, 0xB2, 0xF0,
- .byte 0xA5, 0x04, 0xB0, 0xF0, 0x9F, 0x04, 0xAF, 0xF0, 0x99, 0x04, 0xAD, 0xF0, 0x93, 0x04, 0xAB, 0xF0,
- .byte 0x8D, 0x04, 0xA9, 0xF0, 0x87, 0x04, 0xA7, 0xF0, 0x81, 0x04, 0xA6, 0xF0, 0x7B, 0x04, 0xA4, 0xF0,
- .byte 0x75, 0x04, 0xA2, 0xF0, 0x6F, 0x04, 0xA0, 0xF0, 0x69, 0x04, 0x9F, 0xF0, 0x63, 0x04, 0x9D, 0xF0,
- .byte 0x5D, 0x04, 0x9B, 0xF0, 0x57, 0x04, 0x99, 0xF0, 0x51, 0x04, 0x98, 0xF0, 0x4B, 0x04, 0x96, 0xF0,
- .byte 0x44, 0x04, 0x94, 0xF0, 0x3E, 0x04, 0x93, 0xF0, 0x38, 0x04, 0x91, 0xF0, 0x32, 0x04, 0x8F, 0xF0,
- .byte 0x2C, 0x04, 0x8E, 0xF0, 0x26, 0x04, 0x8C, 0xF0, 0x20, 0x04, 0x8A, 0xF0, 0x1A, 0x04, 0x89, 0xF0,
- .byte 0x14, 0x04, 0x87, 0xF0, 0x0E, 0x04, 0x86, 0xF0, 0x08, 0x04, 0x84, 0xF0, 0x02, 0x04, 0x83, 0xF0,
- .byte 0xFC, 0x03, 0x81, 0xF0, 0xF6, 0x03, 0x7F, 0xF0, 0xEF, 0x03, 0x7E, 0xF0, 0xE9, 0x03, 0x7C, 0xF0,
- .byte 0xE3, 0x03, 0x7B, 0xF0, 0xDD, 0x03, 0x79, 0xF0, 0xD7, 0x03, 0x78, 0xF0, 0xD1, 0x03, 0x76, 0xF0,
- .byte 0xCB, 0x03, 0x75, 0xF0, 0xC5, 0x03, 0x73, 0xF0, 0xBF, 0x03, 0x72, 0xF0, 0xB9, 0x03, 0x70, 0xF0,
- .byte 0xB2, 0x03, 0x6F, 0xF0, 0xAC, 0x03, 0x6D, 0xF0, 0xA6, 0x03, 0x6C, 0xF0, 0xA0, 0x03, 0x6B, 0xF0,
- .byte 0x9A, 0x03, 0x69, 0xF0, 0x94, 0x03, 0x68, 0xF0, 0x8E, 0x03, 0x66, 0xF0, 0x88, 0x03, 0x65, 0xF0,
- .byte 0x81, 0x03, 0x64, 0xF0, 0x7B, 0x03, 0x62, 0xF0, 0x75, 0x03, 0x61, 0xF0, 0x6F, 0x03, 0x5F, 0xF0,
- .byte 0x69, 0x03, 0x5E, 0xF0, 0x63, 0x03, 0x5D, 0xF0, 0x5D, 0x03, 0x5B, 0xF0, 0x56, 0x03, 0x5A, 0xF0,
- .byte 0x50, 0x03, 0x59, 0xF0, 0x4A, 0x03, 0x58, 0xF0, 0x44, 0x03, 0x56, 0xF0, 0x3E, 0x03, 0x55, 0xF0,
- .byte 0x38, 0x03, 0x54, 0xF0, 0x32, 0x03, 0x52, 0xF0, 0x2B, 0x03, 0x51, 0xF0, 0x25, 0x03, 0x50, 0xF0,
- .byte 0x1F, 0x03, 0x4F, 0xF0, 0x19, 0x03, 0x4D, 0xF0, 0x13, 0x03, 0x4C, 0xF0, 0x0D, 0x03, 0x4B, 0xF0,
- .byte 0x06, 0x03, 0x4A, 0xF0, 0x00, 0x03, 0x49, 0xF0, 0xFA, 0x02, 0x48, 0xF0, 0xF4, 0x02, 0x46, 0xF0,
- .byte 0xEE, 0x02, 0x45, 0xF0, 0xE8, 0x02, 0x44, 0xF0, 0xE1, 0x02, 0x43, 0xF0, 0xDB, 0x02, 0x42, 0xF0,
- .byte 0xD5, 0x02, 0x41, 0xF0, 0xCF, 0x02, 0x40, 0xF0, 0xC9, 0x02, 0x3E, 0xF0, 0xC2, 0x02, 0x3D, 0xF0,
- .byte 0xBC, 0x02, 0x3C, 0xF0, 0xB6, 0x02, 0x3B, 0xF0, 0xB0, 0x02, 0x3A, 0xF0, 0xAA, 0x02, 0x39, 0xF0,
- .byte 0xA3, 0x02, 0x38, 0xF0, 0x9D, 0x02, 0x37, 0xF0, 0x97, 0x02, 0x36, 0xF0, 0x91, 0x02, 0x35, 0xF0,
- .byte 0x8B, 0x02, 0x34, 0xF0, 0x84, 0x02, 0x33, 0xF0, 0x7E, 0x02, 0x32, 0xF0, 0x78, 0x02, 0x31, 0xF0,
- .byte 0x72, 0x02, 0x30, 0xF0, 0x6C, 0x02, 0x2F, 0xF0, 0x65, 0x02, 0x2E, 0xF0, 0x5F, 0x02, 0x2D, 0xF0,
- .byte 0x59, 0x02, 0x2C, 0xF0, 0x53, 0x02, 0x2B, 0xF0, 0x4D, 0x02, 0x2B, 0xF0, 0x46, 0x02, 0x2A, 0xF0,
- .byte 0x40, 0x02, 0x29, 0xF0, 0x3A, 0x02, 0x28, 0xF0, 0x34, 0x02, 0x27, 0xF0, 0x2D, 0x02, 0x26, 0xF0,
- .byte 0x27, 0x02, 0x25, 0xF0, 0x21, 0x02, 0x24, 0xF0, 0x1B, 0x02, 0x24, 0xF0, 0x15, 0x02, 0x23, 0xF0,
- .byte 0x0E, 0x02, 0x22, 0xF0, 0x08, 0x02, 0x21, 0xF0, 0x02, 0x02, 0x20, 0xF0, 0xFC, 0x01, 0x20, 0xF0,
- .byte 0xF5, 0x01, 0x1F, 0xF0, 0xEF, 0x01, 0x1E, 0xF0, 0xE9, 0x01, 0x1D, 0xF0, 0xE3, 0x01, 0x1D, 0xF0,
- .byte 0xDC, 0x01, 0x1C, 0xF0, 0xD6, 0x01, 0x1B, 0xF0, 0xD0, 0x01, 0x1A, 0xF0, 0xCA, 0x01, 0x1A, 0xF0,
- .byte 0xC3, 0x01, 0x19, 0xF0, 0xBD, 0x01, 0x18, 0xF0, 0xB7, 0x01, 0x18, 0xF0, 0xB1, 0x01, 0x17, 0xF0,
- .byte 0xAA, 0x01, 0x16, 0xF0, 0xA4, 0x01, 0x16, 0xF0, 0x9E, 0x01, 0x15, 0xF0, 0x98, 0x01, 0x14, 0xF0,
- .byte 0x91, 0x01, 0x14, 0xF0, 0x8B, 0x01, 0x13, 0xF0, 0x85, 0x01, 0x13, 0xF0, 0x7F, 0x01, 0x12, 0xF0,
- .byte 0x78, 0x01, 0x11, 0xF0, 0x72, 0x01, 0x11, 0xF0, 0x6C, 0x01, 0x10, 0xF0, 0x66, 0x01, 0x10, 0xF0,
- .byte 0x5F, 0x01, 0x0F, 0xF0, 0x59, 0x01, 0x0F, 0xF0, 0x53, 0x01, 0x0E, 0xF0, 0x4D, 0x01, 0x0E, 0xF0,
- .byte 0x46, 0x01, 0x0D, 0xF0, 0x40, 0x01, 0x0D, 0xF0, 0x3A, 0x01, 0x0C, 0xF0, 0x34, 0x01, 0x0C, 0xF0,
- .byte 0x2D, 0x01, 0x0B, 0xF0, 0x27, 0x01, 0x0B, 0xF0, 0x21, 0x01, 0x0A, 0xF0, 0x1B, 0x01, 0x0A, 0xF0,
- .byte 0x14, 0x01, 0x09, 0xF0, 0x0E, 0x01, 0x09, 0xF0, 0x08, 0x01, 0x08, 0xF0, 0x01, 0x01, 0x08, 0xF0,
- .byte 0xFB, 0x00, 0x08, 0xF0, 0xF5, 0x00, 0x07, 0xF0, 0xEF, 0x00, 0x07, 0xF0, 0xE8, 0x00, 0x07, 0xF0,
- .byte 0xE2, 0x00, 0x06, 0xF0, 0xDC, 0x00, 0x06, 0xF0, 0xD6, 0x00, 0x06, 0xF0, 0xCF, 0x00, 0x05, 0xF0,
- .byte 0xC9, 0x00, 0x05, 0xF0, 0xC3, 0x00, 0x05, 0xF0, 0xBC, 0x00, 0x04, 0xF0, 0xB6, 0x00, 0x04, 0xF0,
- .byte 0xB0, 0x00, 0x04, 0xF0, 0xAA, 0x00, 0x04, 0xF0, 0xA3, 0x00, 0x03, 0xF0, 0x9D, 0x00, 0x03, 0xF0,
- .byte 0x97, 0x00, 0x03, 0xF0, 0x90, 0x00, 0x03, 0xF0, 0x8A, 0x00, 0x02, 0xF0, 0x84, 0x00, 0x02, 0xF0,
- .byte 0x7E, 0x00, 0x02, 0xF0, 0x77, 0x00, 0x02, 0xF0, 0x71, 0x00, 0x02, 0xF0, 0x6B, 0x00, 0x01, 0xF0,
- .byte 0x65, 0x00, 0x01, 0xF0, 0x5E, 0x00, 0x01, 0xF0, 0x58, 0x00, 0x01, 0xF0, 0x52, 0x00, 0x01, 0xF0,
- .byte 0x4B, 0x00, 0x01, 0xF0, 0x45, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x00, 0xF0, 0x39, 0x00, 0x00, 0xF0,
- .byte 0x32, 0x00, 0x00, 0xF0, 0x2C, 0x00, 0x00, 0xF0, 0x26, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xF0,
- .byte 0x19, 0x00, 0x00, 0xF0, 0x13, 0x00, 0x00, 0xF0, 0x0D, 0x00, 0x00, 0xF0, 0x06, 0x00, 0x00, 0xF0,
- .byte 0x00, 0x00, 0x00, 0xF0, 0xFA, 0xFF, 0x00, 0xF0, 0xF3, 0xFF, 0x00, 0xF0, 0xED, 0xFF, 0x00, 0xF0,
- .byte 0xE7, 0xFF, 0x00, 0xF0, 0xE1, 0xFF, 0x00, 0xF0, 0xDA, 0xFF, 0x00, 0xF0, 0xD4, 0xFF, 0x00, 0xF0,
- .byte 0xCE, 0xFF, 0x00, 0xF0, 0xC7, 0xFF, 0x00, 0xF0, 0xC1, 0xFF, 0x00, 0xF0, 0xBB, 0xFF, 0x01, 0xF0,
- .byte 0xB5, 0xFF, 0x01, 0xF0, 0xAE, 0xFF, 0x01, 0xF0, 0xA8, 0xFF, 0x01, 0xF0, 0xA2, 0xFF, 0x01, 0xF0,
- .byte 0x9B, 0xFF, 0x01, 0xF0, 0x95, 0xFF, 0x01, 0xF0, 0x8F, 0xFF, 0x02, 0xF0, 0x89, 0xFF, 0x02, 0xF0,
- .byte 0x82, 0xFF, 0x02, 0xF0, 0x7C, 0xFF, 0x02, 0xF0, 0x76, 0xFF, 0x02, 0xF0, 0x70, 0xFF, 0x03, 0xF0,
- .byte 0x69, 0xFF, 0x03, 0xF0, 0x63, 0xFF, 0x03, 0xF0, 0x5D, 0xFF, 0x03, 0xF0, 0x56, 0xFF, 0x04, 0xF0,
- .byte 0x50, 0xFF, 0x04, 0xF0, 0x4A, 0xFF, 0x04, 0xF0, 0x44, 0xFF, 0x04, 0xF0, 0x3D, 0xFF, 0x05, 0xF0,
- .byte 0x37, 0xFF, 0x05, 0xF0, 0x31, 0xFF, 0x05, 0xF0, 0x2A, 0xFF, 0x06, 0xF0, 0x24, 0xFF, 0x06, 0xF0,
- .byte 0x1E, 0xFF, 0x06, 0xF0, 0x18, 0xFF, 0x07, 0xF0, 0x11, 0xFF, 0x07, 0xF0, 0x0B, 0xFF, 0x07, 0xF0,
- .byte 0x05, 0xFF, 0x08, 0xF0, 0xFF, 0xFE, 0x08, 0xF0, 0xF8, 0xFE, 0x08, 0xF0, 0xF2, 0xFE, 0x09, 0xF0,
- .byte 0xEC, 0xFE, 0x09, 0xF0, 0xE5, 0xFE, 0x0A, 0xF0, 0xDF, 0xFE, 0x0A, 0xF0, 0xD9, 0xFE, 0x0B, 0xF0,
- .byte 0xD3, 0xFE, 0x0B, 0xF0, 0xCC, 0xFE, 0x0C, 0xF0, 0xC6, 0xFE, 0x0C, 0xF0, 0xC0, 0xFE, 0x0D, 0xF0,
- .byte 0xBA, 0xFE, 0x0D, 0xF0, 0xB3, 0xFE, 0x0E, 0xF0, 0xAD, 0xFE, 0x0E, 0xF0, 0xA7, 0xFE, 0x0F, 0xF0,
- .byte 0xA1, 0xFE, 0x0F, 0xF0, 0x9A, 0xFE, 0x10, 0xF0, 0x94, 0xFE, 0x10, 0xF0, 0x8E, 0xFE, 0x11, 0xF0,
- .byte 0x88, 0xFE, 0x11, 0xF0, 0x81, 0xFE, 0x12, 0xF0, 0x7B, 0xFE, 0x13, 0xF0, 0x75, 0xFE, 0x13, 0xF0,
- .byte 0x6F, 0xFE, 0x14, 0xF0, 0x68, 0xFE, 0x14, 0xF0, 0x62, 0xFE, 0x15, 0xF0, 0x5C, 0xFE, 0x16, 0xF0,
- .byte 0x56, 0xFE, 0x16, 0xF0, 0x4F, 0xFE, 0x17, 0xF0, 0x49, 0xFE, 0x18, 0xF0, 0x43, 0xFE, 0x18, 0xF0,
- .byte 0x3D, 0xFE, 0x19, 0xF0, 0x36, 0xFE, 0x1A, 0xF0, 0x30, 0xFE, 0x1A, 0xF0, 0x2A, 0xFE, 0x1B, 0xF0,
- .byte 0x24, 0xFE, 0x1C, 0xF0, 0x1D, 0xFE, 0x1D, 0xF0, 0x17, 0xFE, 0x1D, 0xF0, 0x11, 0xFE, 0x1E, 0xF0,
- .byte 0x0B, 0xFE, 0x1F, 0xF0, 0x04, 0xFE, 0x20, 0xF0, 0xFE, 0xFD, 0x20, 0xF0, 0xF8, 0xFD, 0x21, 0xF0,
- .byte 0xF2, 0xFD, 0x22, 0xF0, 0xEB, 0xFD, 0x23, 0xF0, 0xE5, 0xFD, 0x24, 0xF0, 0xDF, 0xFD, 0x24, 0xF0,
- .byte 0xD9, 0xFD, 0x25, 0xF0, 0xD3, 0xFD, 0x26, 0xF0, 0xCC, 0xFD, 0x27, 0xF0, 0xC6, 0xFD, 0x28, 0xF0,
- .byte 0xC0, 0xFD, 0x29, 0xF0, 0xBA, 0xFD, 0x2A, 0xF0, 0xB3, 0xFD, 0x2B, 0xF0, 0xAD, 0xFD, 0x2B, 0xF0,
- .byte 0xA7, 0xFD, 0x2C, 0xF0, 0xA1, 0xFD, 0x2D, 0xF0, 0x9B, 0xFD, 0x2E, 0xF0, 0x94, 0xFD, 0x2F, 0xF0,
- .byte 0x8E, 0xFD, 0x30, 0xF0, 0x88, 0xFD, 0x31, 0xF0, 0x82, 0xFD, 0x32, 0xF0, 0x7C, 0xFD, 0x33, 0xF0,
- .byte 0x75, 0xFD, 0x34, 0xF0, 0x6F, 0xFD, 0x35, 0xF0, 0x69, 0xFD, 0x36, 0xF0, 0x63, 0xFD, 0x37, 0xF0,
- .byte 0x5D, 0xFD, 0x38, 0xF0, 0x56, 0xFD, 0x39, 0xF0, 0x50, 0xFD, 0x3A, 0xF0, 0x4A, 0xFD, 0x3B, 0xF0,
- .byte 0x44, 0xFD, 0x3C, 0xF0, 0x3E, 0xFD, 0x3D, 0xF0, 0x37, 0xFD, 0x3E, 0xF0, 0x31, 0xFD, 0x40, 0xF0,
- .byte 0x2B, 0xFD, 0x41, 0xF0, 0x25, 0xFD, 0x42, 0xF0, 0x1F, 0xFD, 0x43, 0xF0, 0x18, 0xFD, 0x44, 0xF0,
- .byte 0x12, 0xFD, 0x45, 0xF0, 0x0C, 0xFD, 0x46, 0xF0, 0x06, 0xFD, 0x48, 0xF0, 0x00, 0xFD, 0x49, 0xF0,
- .byte 0xFA, 0xFC, 0x4A, 0xF0, 0xF3, 0xFC, 0x4B, 0xF0, 0xED, 0xFC, 0x4C, 0xF0, 0xE7, 0xFC, 0x4D, 0xF0,
- .byte 0xE1, 0xFC, 0x4F, 0xF0, 0xDB, 0xFC, 0x50, 0xF0, 0xD5, 0xFC, 0x51, 0xF0, 0xCE, 0xFC, 0x52, 0xF0,
- .byte 0xC8, 0xFC, 0x54, 0xF0, 0xC2, 0xFC, 0x55, 0xF0, 0xBC, 0xFC, 0x56, 0xF0, 0xB6, 0xFC, 0x58, 0xF0,
- .byte 0xB0, 0xFC, 0x59, 0xF0, 0xAA, 0xFC, 0x5A, 0xF0, 0xA3, 0xFC, 0x5B, 0xF0, 0x9D, 0xFC, 0x5D, 0xF0,
- .byte 0x97, 0xFC, 0x5E, 0xF0, 0x91, 0xFC, 0x5F, 0xF0, 0x8B, 0xFC, 0x61, 0xF0, 0x85, 0xFC, 0x62, 0xF0,
- .byte 0x7F, 0xFC, 0x64, 0xF0, 0x78, 0xFC, 0x65, 0xF0, 0x72, 0xFC, 0x66, 0xF0, 0x6C, 0xFC, 0x68, 0xF0,
- .byte 0x66, 0xFC, 0x69, 0xF0, 0x60, 0xFC, 0x6B, 0xF0, 0x5A, 0xFC, 0x6C, 0xF0, 0x54, 0xFC, 0x6D, 0xF0,
- .byte 0x4E, 0xFC, 0x6F, 0xF0, 0x47, 0xFC, 0x70, 0xF0, 0x41, 0xFC, 0x72, 0xF0, 0x3B, 0xFC, 0x73, 0xF0,
- .byte 0x35, 0xFC, 0x75, 0xF0, 0x2F, 0xFC, 0x76, 0xF0, 0x29, 0xFC, 0x78, 0xF0, 0x23, 0xFC, 0x79, 0xF0,
- .byte 0x1D, 0xFC, 0x7B, 0xF0, 0x17, 0xFC, 0x7C, 0xF0, 0x11, 0xFC, 0x7E, 0xF0, 0x0A, 0xFC, 0x7F, 0xF0,
- .byte 0x04, 0xFC, 0x81, 0xF0, 0xFE, 0xFB, 0x83, 0xF0, 0xF8, 0xFB, 0x84, 0xF0, 0xF2, 0xFB, 0x86, 0xF0,
- .byte 0xEC, 0xFB, 0x87, 0xF0, 0xE6, 0xFB, 0x89, 0xF0, 0xE0, 0xFB, 0x8A, 0xF0, 0xDA, 0xFB, 0x8C, 0xF0,
- .byte 0xD4, 0xFB, 0x8E, 0xF0, 0xCE, 0xFB, 0x8F, 0xF0, 0xC8, 0xFB, 0x91, 0xF0, 0xC2, 0xFB, 0x93, 0xF0,
- .byte 0xBC, 0xFB, 0x94, 0xF0, 0xB5, 0xFB, 0x96, 0xF0, 0xAF, 0xFB, 0x98, 0xF0, 0xA9, 0xFB, 0x99, 0xF0,
- .byte 0xA3, 0xFB, 0x9B, 0xF0, 0x9D, 0xFB, 0x9D, 0xF0, 0x97, 0xFB, 0x9F, 0xF0, 0x91, 0xFB, 0xA0, 0xF0,
- .byte 0x8B, 0xFB, 0xA2, 0xF0, 0x85, 0xFB, 0xA4, 0xF0, 0x7F, 0xFB, 0xA6, 0xF0, 0x79, 0xFB, 0xA7, 0xF0,
- .byte 0x73, 0xFB, 0xA9, 0xF0, 0x6D, 0xFB, 0xAB, 0xF0, 0x67, 0xFB, 0xAD, 0xF0, 0x61, 0xFB, 0xAF, 0xF0,
- .byte 0x5B, 0xFB, 0xB0, 0xF0, 0x55, 0xFB, 0xB2, 0xF0, 0x4F, 0xFB, 0xB4, 0xF0, 0x49, 0xFB, 0xB6, 0xF0,
- .byte 0x43, 0xFB, 0xB8, 0xF0, 0x3D, 0xFB, 0xBA, 0xF0, 0x37, 0xFB, 0xBB, 0xF0, 0x31, 0xFB, 0xBD, 0xF0,
- .byte 0x2B, 0xFB, 0xBF, 0xF0, 0x25, 0xFB, 0xC1, 0xF0, 0x1F, 0xFB, 0xC3, 0xF0, 0x19, 0xFB, 0xC5, 0xF0,
- .byte 0x13, 0xFB, 0xC7, 0xF0, 0x0D, 0xFB, 0xC9, 0xF0, 0x07, 0xFB, 0xCB, 0xF0, 0x01, 0xFB, 0xCD, 0xF0,
- .byte 0xFB, 0xFA, 0xCF, 0xF0, 0xF5, 0xFA, 0xD1, 0xF0, 0xEF, 0xFA, 0xD3, 0xF0, 0xE9, 0xFA, 0xD5, 0xF0,
- .byte 0xE3, 0xFA, 0xD7, 0xF0, 0xDD, 0xFA, 0xD9, 0xF0, 0xD7, 0xFA, 0xDB, 0xF0, 0xD1, 0xFA, 0xDD, 0xF0,
- .byte 0xCC, 0xFA, 0xDF, 0xF0, 0xC6, 0xFA, 0xE1, 0xF0, 0xC0, 0xFA, 0xE3, 0xF0, 0xBA, 0xFA, 0xE5, 0xF0,
- .byte 0xB4, 0xFA, 0xE7, 0xF0, 0xAE, 0xFA, 0xE9, 0xF0, 0xA8, 0xFA, 0xEB, 0xF0, 0xA2, 0xFA, 0xED, 0xF0,
- .byte 0x9C, 0xFA, 0xEF, 0xF0, 0x96, 0xFA, 0xF2, 0xF0, 0x90, 0xFA, 0xF4, 0xF0, 0x8A, 0xFA, 0xF6, 0xF0,
- .byte 0x84, 0xFA, 0xF8, 0xF0, 0x7F, 0xFA, 0xFA, 0xF0, 0x79, 0xFA, 0xFC, 0xF0, 0x73, 0xFA, 0xFE, 0xF0,
- .byte 0x6D, 0xFA, 0x01, 0xF1, 0x67, 0xFA, 0x03, 0xF1, 0x61, 0xFA, 0x05, 0xF1, 0x5B, 0xFA, 0x07, 0xF1,
- .byte 0x55, 0xFA, 0x09, 0xF1, 0x4F, 0xFA, 0x0C, 0xF1, 0x4A, 0xFA, 0x0E, 0xF1, 0x44, 0xFA, 0x10, 0xF1,
- .byte 0x3E, 0xFA, 0x12, 0xF1, 0x38, 0xFA, 0x15, 0xF1, 0x32, 0xFA, 0x17, 0xF1, 0x2C, 0xFA, 0x19, 0xF1,
- .byte 0x26, 0xFA, 0x1C, 0xF1, 0x21, 0xFA, 0x1E, 0xF1, 0x1B, 0xFA, 0x20, 0xF1, 0x15, 0xFA, 0x23, 0xF1,
- .byte 0x0F, 0xFA, 0x25, 0xF1, 0x09, 0xFA, 0x27, 0xF1, 0x03, 0xFA, 0x2A, 0xF1, 0xFE, 0xF9, 0x2C, 0xF1,
- .byte 0xF8, 0xF9, 0x2E, 0xF1, 0xF2, 0xF9, 0x31, 0xF1, 0xEC, 0xF9, 0x33, 0xF1, 0xE6, 0xF9, 0x35, 0xF1,
- .byte 0xE1, 0xF9, 0x38, 0xF1, 0xDB, 0xF9, 0x3A, 0xF1, 0xD5, 0xF9, 0x3D, 0xF1, 0xCF, 0xF9, 0x3F, 0xF1,
- .byte 0xC9, 0xF9, 0x41, 0xF1, 0xC4, 0xF9, 0x44, 0xF1, 0xBE, 0xF9, 0x46, 0xF1, 0xB8, 0xF9, 0x49, 0xF1,
- .byte 0xB2, 0xF9, 0x4B, 0xF1, 0xAC, 0xF9, 0x4E, 0xF1, 0xA7, 0xF9, 0x50, 0xF1, 0xA1, 0xF9, 0x53, 0xF1,
- .byte 0x9B, 0xF9, 0x55, 0xF1, 0x95, 0xF9, 0x58, 0xF1, 0x90, 0xF9, 0x5A, 0xF1, 0x8A, 0xF9, 0x5D, 0xF1,
- .byte 0x84, 0xF9, 0x5F, 0xF1, 0x7E, 0xF9, 0x62, 0xF1, 0x79, 0xF9, 0x65, 0xF1, 0x73, 0xF9, 0x67, 0xF1,
- .byte 0x6D, 0xF9, 0x6A, 0xF1, 0x67, 0xF9, 0x6C, 0xF1, 0x62, 0xF9, 0x6F, 0xF1, 0x5C, 0xF9, 0x71, 0xF1,
- .byte 0x56, 0xF9, 0x74, 0xF1, 0x51, 0xF9, 0x77, 0xF1, 0x4B, 0xF9, 0x79, 0xF1, 0x45, 0xF9, 0x7C, 0xF1,
- .byte 0x3F, 0xF9, 0x7F, 0xF1, 0x3A, 0xF9, 0x81, 0xF1, 0x34, 0xF9, 0x84, 0xF1, 0x2E, 0xF9, 0x87, 0xF1,
- .byte 0x29, 0xF9, 0x89, 0xF1, 0x23, 0xF9, 0x8C, 0xF1, 0x1D, 0xF9, 0x8F, 0xF1, 0x18, 0xF9, 0x91, 0xF1,
- .byte 0x12, 0xF9, 0x94, 0xF1, 0x0C, 0xF9, 0x97, 0xF1, 0x07, 0xF9, 0x9A, 0xF1, 0x01, 0xF9, 0x9C, 0xF1,
- .byte 0xFB, 0xF8, 0x9F, 0xF1, 0xF6, 0xF8, 0xA2, 0xF1, 0xF0, 0xF8, 0xA5, 0xF1, 0xEB, 0xF8, 0xA7, 0xF1,
- .byte 0xE5, 0xF8, 0xAA, 0xF1, 0xDF, 0xF8, 0xAD, 0xF1, 0xDA, 0xF8, 0xB0, 0xF1, 0xD4, 0xF8, 0xB3, 0xF1,
- .byte 0xCE, 0xF8, 0xB5, 0xF1, 0xC9, 0xF8, 0xB8, 0xF1, 0xC3, 0xF8, 0xBB, 0xF1, 0xBE, 0xF8, 0xBE, 0xF1,
- .byte 0xB8, 0xF8, 0xC1, 0xF1, 0xB2, 0xF8, 0xC4, 0xF1, 0xAD, 0xF8, 0xC6, 0xF1, 0xA7, 0xF8, 0xC9, 0xF1,
- .byte 0xA2, 0xF8, 0xCC, 0xF1, 0x9C, 0xF8, 0xCF, 0xF1, 0x96, 0xF8, 0xD2, 0xF1, 0x91, 0xF8, 0xD5, 0xF1,
- .byte 0x8B, 0xF8, 0xD8, 0xF1, 0x86, 0xF8, 0xDB, 0xF1, 0x80, 0xF8, 0xDE, 0xF1, 0x7B, 0xF8, 0xE1, 0xF1,
- .byte 0x75, 0xF8, 0xE4, 0xF1, 0x70, 0xF8, 0xE7, 0xF1, 0x6A, 0xF8, 0xEA, 0xF1, 0x65, 0xF8, 0xED, 0xF1,
- .byte 0x5F, 0xF8, 0xF0, 0xF1, 0x5A, 0xF8, 0xF3, 0xF1, 0x54, 0xF8, 0xF6, 0xF1, 0x4E, 0xF8, 0xF9, 0xF1,
- .byte 0x49, 0xF8, 0xFC, 0xF1, 0x43, 0xF8, 0xFF, 0xF1, 0x3E, 0xF8, 0x02, 0xF2, 0x38, 0xF8, 0x05, 0xF2,
- .byte 0x33, 0xF8, 0x08, 0xF2, 0x2E, 0xF8, 0x0B, 0xF2, 0x28, 0xF8, 0x0E, 0xF2, 0x23, 0xF8, 0x11, 0xF2,
- .byte 0x1D, 0xF8, 0x14, 0xF2, 0x18, 0xF8, 0x17, 0xF2, 0x12, 0xF8, 0x1A, 0xF2, 0x0D, 0xF8, 0x1D, 0xF2,
- .byte 0x07, 0xF8, 0x21, 0xF2, 0x02, 0xF8, 0x24, 0xF2, 0xFC, 0xF7, 0x27, 0xF2, 0xF7, 0xF7, 0x2A, 0xF2,
- .byte 0xF2, 0xF7, 0x2D, 0xF2, 0xEC, 0xF7, 0x30, 0xF2, 0xE7, 0xF7, 0x34, 0xF2, 0xE1, 0xF7, 0x37, 0xF2,
- .byte 0xDC, 0xF7, 0x3A, 0xF2, 0xD6, 0xF7, 0x3D, 0xF2, 0xD1, 0xF7, 0x40, 0xF2, 0xCC, 0xF7, 0x44, 0xF2,
- .byte 0xC6, 0xF7, 0x47, 0xF2, 0xC1, 0xF7, 0x4A, 0xF2, 0xBB, 0xF7, 0x4D, 0xF2, 0xB6, 0xF7, 0x50, 0xF2,
- .byte 0xB1, 0xF7, 0x54, 0xF2, 0xAB, 0xF7, 0x57, 0xF2, 0xA6, 0xF7, 0x5A, 0xF2, 0xA1, 0xF7, 0x5E, 0xF2,
- .byte 0x9B, 0xF7, 0x61, 0xF2, 0x96, 0xF7, 0x64, 0xF2, 0x91, 0xF7, 0x67, 0xF2, 0x8B, 0xF7, 0x6B, 0xF2,
- .byte 0x86, 0xF7, 0x6E, 0xF2, 0x81, 0xF7, 0x71, 0xF2, 0x7B, 0xF7, 0x75, 0xF2, 0x76, 0xF7, 0x78, 0xF2,
- .byte 0x71, 0xF7, 0x7B, 0xF2, 0x6B, 0xF7, 0x7F, 0xF2, 0x66, 0xF7, 0x82, 0xF2, 0x61, 0xF7, 0x86, 0xF2,
- .byte 0x5B, 0xF7, 0x89, 0xF2, 0x56, 0xF7, 0x8C, 0xF2, 0x51, 0xF7, 0x90, 0xF2, 0x4C, 0xF7, 0x93, 0xF2,
- .byte 0x46, 0xF7, 0x97, 0xF2, 0x41, 0xF7, 0x9A, 0xF2, 0x3C, 0xF7, 0x9E, 0xF2, 0x37, 0xF7, 0xA1, 0xF2,
- .byte 0x31, 0xF7, 0xA4, 0xF2, 0x2C, 0xF7, 0xA8, 0xF2, 0x27, 0xF7, 0xAB, 0xF2, 0x22, 0xF7, 0xAF, 0xF2,
- .byte 0x1C, 0xF7, 0xB2, 0xF2, 0x17, 0xF7, 0xB6, 0xF2, 0x12, 0xF7, 0xB9, 0xF2, 0x0D, 0xF7, 0xBD, 0xF2,
- .byte 0x08, 0xF7, 0xC0, 0xF2, 0x02, 0xF7, 0xC4, 0xF2, 0xFD, 0xF6, 0xC7, 0xF2, 0xF8, 0xF6, 0xCB, 0xF2,
- .byte 0xF3, 0xF6, 0xCE, 0xF2, 0xEE, 0xF6, 0xD2, 0xF2, 0xE8, 0xF6, 0xD6, 0xF2, 0xE3, 0xF6, 0xD9, 0xF2,
- .byte 0xDE, 0xF6, 0xDD, 0xF2, 0xD9, 0xF6, 0xE0, 0xF2, 0xD4, 0xF6, 0xE4, 0xF2, 0xCF, 0xF6, 0xE8, 0xF2,
- .byte 0xC9, 0xF6, 0xEB, 0xF2, 0xC4, 0xF6, 0xEF, 0xF2, 0xBF, 0xF6, 0xF2, 0xF2, 0xBA, 0xF6, 0xF6, 0xF2,
- .byte 0xB5, 0xF6, 0xFA, 0xF2, 0xB0, 0xF6, 0xFD, 0xF2, 0xAB, 0xF6, 0x01, 0xF3, 0xA6, 0xF6, 0x05, 0xF3,
- .byte 0xA1, 0xF6, 0x08, 0xF3, 0x9B, 0xF6, 0x0C, 0xF3, 0x96, 0xF6, 0x10, 0xF3, 0x91, 0xF6, 0x13, 0xF3,
- .byte 0x8C, 0xF6, 0x17, 0xF3, 0x87, 0xF6, 0x1B, 0xF3, 0x82, 0xF6, 0x1F, 0xF3, 0x7D, 0xF6, 0x22, 0xF3,
- .byte 0x78, 0xF6, 0x26, 0xF3, 0x73, 0xF6, 0x2A, 0xF3, 0x6E, 0xF6, 0x2E, 0xF3, 0x69, 0xF6, 0x31, 0xF3,
- .byte 0x64, 0xF6, 0x35, 0xF3, 0x5F, 0xF6, 0x39, 0xF3, 0x5A, 0xF6, 0x3D, 0xF3, 0x55, 0xF6, 0x40, 0xF3,
- .byte 0x50, 0xF6, 0x44, 0xF3, 0x4B, 0xF6, 0x48, 0xF3, 0x46, 0xF6, 0x4C, 0xF3, 0x41, 0xF6, 0x50, 0xF3,
- .byte 0x3C, 0xF6, 0x54, 0xF3, 0x37, 0xF6, 0x57, 0xF3, 0x32, 0xF6, 0x5B, 0xF3, 0x2D, 0xF6, 0x5F, 0xF3,
- .byte 0x28, 0xF6, 0x63, 0xF3, 0x23, 0xF6, 0x67, 0xF3, 0x1E, 0xF6, 0x6B, 0xF3, 0x19, 0xF6, 0x6F, 0xF3,
- .byte 0x14, 0xF6, 0x72, 0xF3, 0x0F, 0xF6, 0x76, 0xF3, 0x0A, 0xF6, 0x7A, 0xF3, 0x05, 0xF6, 0x7E, 0xF3,
- .byte 0x01, 0xF6, 0x82, 0xF3, 0xFC, 0xF5, 0x86, 0xF3, 0xF7, 0xF5, 0x8A, 0xF3, 0xF2, 0xF5, 0x8E, 0xF3,
- .byte 0xED, 0xF5, 0x92, 0xF3, 0xE8, 0xF5, 0x96, 0xF3, 0xE3, 0xF5, 0x9A, 0xF3, 0xDE, 0xF5, 0x9E, 0xF3,
- .byte 0xDA, 0xF5, 0xA2, 0xF3, 0xD5, 0xF5, 0xA6, 0xF3, 0xD0, 0xF5, 0xAA, 0xF3, 0xCB, 0xF5, 0xAE, 0xF3,
- .byte 0xC6, 0xF5, 0xB2, 0xF3, 0xC1, 0xF5, 0xB6, 0xF3, 0xBC, 0xF5, 0xBA, 0xF3, 0xB8, 0xF5, 0xBE, 0xF3,
- .byte 0xB3, 0xF5, 0xC2, 0xF3, 0xAE, 0xF5, 0xC6, 0xF3, 0xA9, 0xF5, 0xCA, 0xF3, 0xA4, 0xF5, 0xCE, 0xF3,
- .byte 0xA0, 0xF5, 0xD2, 0xF3, 0x9B, 0xF5, 0xD6, 0xF3, 0x96, 0xF5, 0xDA, 0xF3, 0x91, 0xF5, 0xDE, 0xF3,
- .byte 0x8D, 0xF5, 0xE2, 0xF3, 0x88, 0xF5, 0xE7, 0xF3, 0x83, 0xF5, 0xEB, 0xF3, 0x7E, 0xF5, 0xEF, 0xF3,
- .byte 0x7A, 0xF5, 0xF3, 0xF3, 0x75, 0xF5, 0xF7, 0xF3, 0x70, 0xF5, 0xFB, 0xF3, 0x6B, 0xF5, 0xFF, 0xF3,
- .byte 0x67, 0xF5, 0x04, 0xF4, 0x62, 0xF5, 0x08, 0xF4, 0x5D, 0xF5, 0x0C, 0xF4, 0x59, 0xF5, 0x10, 0xF4,
- .byte 0x54, 0xF5, 0x14, 0xF4, 0x4F, 0xF5, 0x18, 0xF4, 0x4B, 0xF5, 0x1D, 0xF4, 0x46, 0xF5, 0x21, 0xF4,
- .byte 0x41, 0xF5, 0x25, 0xF4, 0x3D, 0xF5, 0x29, 0xF4, 0x38, 0xF5, 0x2E, 0xF4, 0x33, 0xF5, 0x32, 0xF4,
- .byte 0x2F, 0xF5, 0x36, 0xF4, 0x2A, 0xF5, 0x3A, 0xF4, 0x25, 0xF5, 0x3F, 0xF4, 0x21, 0xF5, 0x43, 0xF4,
- .byte 0x1C, 0xF5, 0x47, 0xF4, 0x18, 0xF5, 0x4B, 0xF4, 0x13, 0xF5, 0x50, 0xF4, 0x0E, 0xF5, 0x54, 0xF4,
- .byte 0x0A, 0xF5, 0x58, 0xF4, 0x05, 0xF5, 0x5D, 0xF4, 0x01, 0xF5, 0x61, 0xF4, 0xFC, 0xF4, 0x65, 0xF4,
- .byte 0xF8, 0xF4, 0x69, 0xF4, 0xF3, 0xF4, 0x6E, 0xF4, 0xEF, 0xF4, 0x72, 0xF4, 0xEA, 0xF4, 0x77, 0xF4,
- .byte 0xE5, 0xF4, 0x7B, 0xF4, 0xE1, 0xF4, 0x7F, 0xF4, 0xDC, 0xF4, 0x84, 0xF4, 0xD8, 0xF4, 0x88, 0xF4,
- .byte 0xD3, 0xF4, 0x8C, 0xF4, 0xCF, 0xF4, 0x91, 0xF4, 0xCA, 0xF4, 0x95, 0xF4, 0xC6, 0xF4, 0x9A, 0xF4,
- .byte 0xC2, 0xF4, 0x9E, 0xF4, 0xBD, 0xF4, 0xA2, 0xF4, 0xB9, 0xF4, 0xA7, 0xF4, 0xB4, 0xF4, 0xAB, 0xF4,
- .byte 0xB0, 0xF4, 0xB0, 0xF4, 0xAB, 0xF4, 0xB4, 0xF4, 0xA7, 0xF4, 0xB9, 0xF4, 0xA2, 0xF4, 0xBD, 0xF4,
- .byte 0x9E, 0xF4, 0xC2, 0xF4, 0x9A, 0xF4, 0xC6, 0xF4, 0x95, 0xF4, 0xCA, 0xF4, 0x91, 0xF4, 0xCF, 0xF4,
- .byte 0x8C, 0xF4, 0xD3, 0xF4, 0x88, 0xF4, 0xD8, 0xF4, 0x84, 0xF4, 0xDC, 0xF4, 0x7F, 0xF4, 0xE1, 0xF4,
- .byte 0x7B, 0xF4, 0xE5, 0xF4, 0x77, 0xF4, 0xEA, 0xF4, 0x72, 0xF4, 0xEF, 0xF4, 0x6E, 0xF4, 0xF3, 0xF4,
- .byte 0x69, 0xF4, 0xF8, 0xF4, 0x65, 0xF4, 0xFC, 0xF4, 0x61, 0xF4, 0x01, 0xF5, 0x5D, 0xF4, 0x05, 0xF5,
- .byte 0x58, 0xF4, 0x0A, 0xF5, 0x54, 0xF4, 0x0E, 0xF5, 0x50, 0xF4, 0x13, 0xF5, 0x4B, 0xF4, 0x18, 0xF5,
- .byte 0x47, 0xF4, 0x1C, 0xF5, 0x43, 0xF4, 0x21, 0xF5, 0x3F, 0xF4, 0x25, 0xF5, 0x3A, 0xF4, 0x2A, 0xF5,
- .byte 0x36, 0xF4, 0x2F, 0xF5, 0x32, 0xF4, 0x33, 0xF5, 0x2E, 0xF4, 0x38, 0xF5, 0x29, 0xF4, 0x3D, 0xF5,
- .byte 0x25, 0xF4, 0x41, 0xF5, 0x21, 0xF4, 0x46, 0xF5, 0x1D, 0xF4, 0x4B, 0xF5, 0x18, 0xF4, 0x4F, 0xF5,
- .byte 0x14, 0xF4, 0x54, 0xF5, 0x10, 0xF4, 0x59, 0xF5, 0x0C, 0xF4, 0x5D, 0xF5, 0x08, 0xF4, 0x62, 0xF5,
- .byte 0x04, 0xF4, 0x67, 0xF5, 0xFF, 0xF3, 0x6B, 0xF5, 0xFB, 0xF3, 0x70, 0xF5, 0xF7, 0xF3, 0x75, 0xF5,
- .byte 0xF3, 0xF3, 0x7A, 0xF5, 0xEF, 0xF3, 0x7E, 0xF5, 0xEB, 0xF3, 0x83, 0xF5, 0xE7, 0xF3, 0x88, 0xF5,
- .byte 0xE2, 0xF3, 0x8D, 0xF5, 0xDE, 0xF3, 0x91, 0xF5, 0xDA, 0xF3, 0x96, 0xF5, 0xD6, 0xF3, 0x9B, 0xF5,
- .byte 0xD2, 0xF3, 0xA0, 0xF5, 0xCE, 0xF3, 0xA4, 0xF5, 0xCA, 0xF3, 0xA9, 0xF5, 0xC6, 0xF3, 0xAE, 0xF5,
- .byte 0xC2, 0xF3, 0xB3, 0xF5, 0xBE, 0xF3, 0xB8, 0xF5, 0xBA, 0xF3, 0xBC, 0xF5, 0xB6, 0xF3, 0xC1, 0xF5,
- .byte 0xB2, 0xF3, 0xC6, 0xF5, 0xAE, 0xF3, 0xCB, 0xF5, 0xAA, 0xF3, 0xD0, 0xF5, 0xA6, 0xF3, 0xD5, 0xF5,
- .byte 0xA2, 0xF3, 0xDA, 0xF5, 0x9E, 0xF3, 0xDE, 0xF5, 0x9A, 0xF3, 0xE3, 0xF5, 0x96, 0xF3, 0xE8, 0xF5,
- .byte 0x92, 0xF3, 0xED, 0xF5, 0x8E, 0xF3, 0xF2, 0xF5, 0x8A, 0xF3, 0xF7, 0xF5, 0x86, 0xF3, 0xFC, 0xF5,
- .byte 0x82, 0xF3, 0x01, 0xF6, 0x7E, 0xF3, 0x05, 0xF6, 0x7A, 0xF3, 0x0A, 0xF6, 0x76, 0xF3, 0x0F, 0xF6,
- .byte 0x72, 0xF3, 0x14, 0xF6, 0x6F, 0xF3, 0x19, 0xF6, 0x6B, 0xF3, 0x1E, 0xF6, 0x67, 0xF3, 0x23, 0xF6,
- .byte 0x63, 0xF3, 0x28, 0xF6, 0x5F, 0xF3, 0x2D, 0xF6, 0x5B, 0xF3, 0x32, 0xF6, 0x57, 0xF3, 0x37, 0xF6,
- .byte 0x54, 0xF3, 0x3C, 0xF6, 0x50, 0xF3, 0x41, 0xF6, 0x4C, 0xF3, 0x46, 0xF6, 0x48, 0xF3, 0x4B, 0xF6,
- .byte 0x44, 0xF3, 0x50, 0xF6, 0x40, 0xF3, 0x55, 0xF6, 0x3D, 0xF3, 0x5A, 0xF6, 0x39, 0xF3, 0x5F, 0xF6,
- .byte 0x35, 0xF3, 0x64, 0xF6, 0x31, 0xF3, 0x69, 0xF6, 0x2E, 0xF3, 0x6E, 0xF6, 0x2A, 0xF3, 0x73, 0xF6,
- .byte 0x26, 0xF3, 0x78, 0xF6, 0x22, 0xF3, 0x7D, 0xF6, 0x1F, 0xF3, 0x82, 0xF6, 0x1B, 0xF3, 0x87, 0xF6,
- .byte 0x17, 0xF3, 0x8C, 0xF6, 0x13, 0xF3, 0x91, 0xF6, 0x10, 0xF3, 0x96, 0xF6, 0x0C, 0xF3, 0x9B, 0xF6,
- .byte 0x08, 0xF3, 0xA1, 0xF6, 0x05, 0xF3, 0xA6, 0xF6, 0x01, 0xF3, 0xAB, 0xF6, 0xFD, 0xF2, 0xB0, 0xF6,
- .byte 0xFA, 0xF2, 0xB5, 0xF6, 0xF6, 0xF2, 0xBA, 0xF6, 0xF2, 0xF2, 0xBF, 0xF6, 0xEF, 0xF2, 0xC4, 0xF6,
- .byte 0xEB, 0xF2, 0xC9, 0xF6, 0xE8, 0xF2, 0xCF, 0xF6, 0xE4, 0xF2, 0xD4, 0xF6, 0xE0, 0xF2, 0xD9, 0xF6,
- .byte 0xDD, 0xF2, 0xDE, 0xF6, 0xD9, 0xF2, 0xE3, 0xF6, 0xD6, 0xF2, 0xE8, 0xF6, 0xD2, 0xF2, 0xEE, 0xF6,
- .byte 0xCE, 0xF2, 0xF3, 0xF6, 0xCB, 0xF2, 0xF8, 0xF6, 0xC7, 0xF2, 0xFD, 0xF6, 0xC4, 0xF2, 0x02, 0xF7,
- .byte 0xC0, 0xF2, 0x08, 0xF7, 0xBD, 0xF2, 0x0D, 0xF7, 0xB9, 0xF2, 0x12, 0xF7, 0xB6, 0xF2, 0x17, 0xF7,
- .byte 0xB2, 0xF2, 0x1C, 0xF7, 0xAF, 0xF2, 0x22, 0xF7, 0xAB, 0xF2, 0x27, 0xF7, 0xA8, 0xF2, 0x2C, 0xF7,
- .byte 0xA4, 0xF2, 0x31, 0xF7, 0xA1, 0xF2, 0x37, 0xF7, 0x9E, 0xF2, 0x3C, 0xF7, 0x9A, 0xF2, 0x41, 0xF7,
- .byte 0x97, 0xF2, 0x46, 0xF7, 0x93, 0xF2, 0x4C, 0xF7, 0x90, 0xF2, 0x51, 0xF7, 0x8C, 0xF2, 0x56, 0xF7,
- .byte 0x89, 0xF2, 0x5B, 0xF7, 0x86, 0xF2, 0x61, 0xF7, 0x82, 0xF2, 0x66, 0xF7, 0x7F, 0xF2, 0x6B, 0xF7,
- .byte 0x7B, 0xF2, 0x71, 0xF7, 0x78, 0xF2, 0x76, 0xF7, 0x75, 0xF2, 0x7B, 0xF7, 0x71, 0xF2, 0x81, 0xF7,
- .byte 0x6E, 0xF2, 0x86, 0xF7, 0x6B, 0xF2, 0x8B, 0xF7, 0x67, 0xF2, 0x91, 0xF7, 0x64, 0xF2, 0x96, 0xF7,
- .byte 0x61, 0xF2, 0x9B, 0xF7, 0x5E, 0xF2, 0xA1, 0xF7, 0x5A, 0xF2, 0xA6, 0xF7, 0x57, 0xF2, 0xAB, 0xF7,
- .byte 0x54, 0xF2, 0xB1, 0xF7, 0x50, 0xF2, 0xB6, 0xF7, 0x4D, 0xF2, 0xBB, 0xF7, 0x4A, 0xF2, 0xC1, 0xF7,
- .byte 0x47, 0xF2, 0xC6, 0xF7, 0x44, 0xF2, 0xCC, 0xF7, 0x40, 0xF2, 0xD1, 0xF7, 0x3D, 0xF2, 0xD6, 0xF7,
- .byte 0x3A, 0xF2, 0xDC, 0xF7, 0x37, 0xF2, 0xE1, 0xF7, 0x34, 0xF2, 0xE7, 0xF7, 0x30, 0xF2, 0xEC, 0xF7,
- .byte 0x2D, 0xF2, 0xF2, 0xF7, 0x2A, 0xF2, 0xF7, 0xF7, 0x27, 0xF2, 0xFC, 0xF7, 0x24, 0xF2, 0x02, 0xF8,
- .byte 0x21, 0xF2, 0x07, 0xF8, 0x1D, 0xF2, 0x0D, 0xF8, 0x1A, 0xF2, 0x12, 0xF8, 0x17, 0xF2, 0x18, 0xF8,
- .byte 0x14, 0xF2, 0x1D, 0xF8, 0x11, 0xF2, 0x23, 0xF8, 0x0E, 0xF2, 0x28, 0xF8, 0x0B, 0xF2, 0x2E, 0xF8,
- .byte 0x08, 0xF2, 0x33, 0xF8, 0x05, 0xF2, 0x38, 0xF8, 0x02, 0xF2, 0x3E, 0xF8, 0xFF, 0xF1, 0x43, 0xF8,
- .byte 0xFC, 0xF1, 0x49, 0xF8, 0xF9, 0xF1, 0x4E, 0xF8, 0xF6, 0xF1, 0x54, 0xF8, 0xF3, 0xF1, 0x5A, 0xF8,
- .byte 0xF0, 0xF1, 0x5F, 0xF8, 0xED, 0xF1, 0x65, 0xF8, 0xEA, 0xF1, 0x6A, 0xF8, 0xE7, 0xF1, 0x70, 0xF8,
- .byte 0xE4, 0xF1, 0x75, 0xF8, 0xE1, 0xF1, 0x7B, 0xF8, 0xDE, 0xF1, 0x80, 0xF8, 0xDB, 0xF1, 0x86, 0xF8,
- .byte 0xD8, 0xF1, 0x8B, 0xF8, 0xD5, 0xF1, 0x91, 0xF8, 0xD2, 0xF1, 0x96, 0xF8, 0xCF, 0xF1, 0x9C, 0xF8,
- .byte 0xCC, 0xF1, 0xA2, 0xF8, 0xC9, 0xF1, 0xA7, 0xF8, 0xC6, 0xF1, 0xAD, 0xF8, 0xC4, 0xF1, 0xB2, 0xF8,
- .byte 0xC1, 0xF1, 0xB8, 0xF8, 0xBE, 0xF1, 0xBE, 0xF8, 0xBB, 0xF1, 0xC3, 0xF8, 0xB8, 0xF1, 0xC9, 0xF8,
- .byte 0xB5, 0xF1, 0xCE, 0xF8, 0xB3, 0xF1, 0xD4, 0xF8, 0xB0, 0xF1, 0xDA, 0xF8, 0xAD, 0xF1, 0xDF, 0xF8,
- .byte 0xAA, 0xF1, 0xE5, 0xF8, 0xA7, 0xF1, 0xEB, 0xF8, 0xA5, 0xF1, 0xF0, 0xF8, 0xA2, 0xF1, 0xF6, 0xF8,
- .byte 0x9F, 0xF1, 0xFB, 0xF8, 0x9C, 0xF1, 0x01, 0xF9, 0x9A, 0xF1, 0x07, 0xF9, 0x97, 0xF1, 0x0C, 0xF9,
- .byte 0x94, 0xF1, 0x12, 0xF9, 0x91, 0xF1, 0x18, 0xF9, 0x8F, 0xF1, 0x1D, 0xF9, 0x8C, 0xF1, 0x23, 0xF9,
- .byte 0x89, 0xF1, 0x29, 0xF9, 0x87, 0xF1, 0x2E, 0xF9, 0x84, 0xF1, 0x34, 0xF9, 0x81, 0xF1, 0x3A, 0xF9,
- .byte 0x7F, 0xF1, 0x3F, 0xF9, 0x7C, 0xF1, 0x45, 0xF9, 0x79, 0xF1, 0x4B, 0xF9, 0x77, 0xF1, 0x51, 0xF9,
- .byte 0x74, 0xF1, 0x56, 0xF9, 0x71, 0xF1, 0x5C, 0xF9, 0x6F, 0xF1, 0x62, 0xF9, 0x6C, 0xF1, 0x67, 0xF9,
- .byte 0x6A, 0xF1, 0x6D, 0xF9, 0x67, 0xF1, 0x73, 0xF9, 0x65, 0xF1, 0x79, 0xF9, 0x62, 0xF1, 0x7E, 0xF9,
- .byte 0x5F, 0xF1, 0x84, 0xF9, 0x5D, 0xF1, 0x8A, 0xF9, 0x5A, 0xF1, 0x90, 0xF9, 0x58, 0xF1, 0x95, 0xF9,
- .byte 0x55, 0xF1, 0x9B, 0xF9, 0x53, 0xF1, 0xA1, 0xF9, 0x50, 0xF1, 0xA7, 0xF9, 0x4E, 0xF1, 0xAC, 0xF9,
- .byte 0x4B, 0xF1, 0xB2, 0xF9, 0x49, 0xF1, 0xB8, 0xF9, 0x46, 0xF1, 0xBE, 0xF9, 0x44, 0xF1, 0xC4, 0xF9,
- .byte 0x41, 0xF1, 0xC9, 0xF9, 0x3F, 0xF1, 0xCF, 0xF9, 0x3D, 0xF1, 0xD5, 0xF9, 0x3A, 0xF1, 0xDB, 0xF9,
- .byte 0x38, 0xF1, 0xE1, 0xF9, 0x35, 0xF1, 0xE6, 0xF9, 0x33, 0xF1, 0xEC, 0xF9, 0x31, 0xF1, 0xF2, 0xF9,
- .byte 0x2E, 0xF1, 0xF8, 0xF9, 0x2C, 0xF1, 0xFE, 0xF9, 0x2A, 0xF1, 0x03, 0xFA, 0x27, 0xF1, 0x09, 0xFA,
- .byte 0x25, 0xF1, 0x0F, 0xFA, 0x23, 0xF1, 0x15, 0xFA, 0x20, 0xF1, 0x1B, 0xFA, 0x1E, 0xF1, 0x21, 0xFA,
- .byte 0x1C, 0xF1, 0x26, 0xFA, 0x19, 0xF1, 0x2C, 0xFA, 0x17, 0xF1, 0x32, 0xFA, 0x15, 0xF1, 0x38, 0xFA,
- .byte 0x12, 0xF1, 0x3E, 0xFA, 0x10, 0xF1, 0x44, 0xFA, 0x0E, 0xF1, 0x4A, 0xFA, 0x0C, 0xF1, 0x4F, 0xFA,
- .byte 0x09, 0xF1, 0x55, 0xFA, 0x07, 0xF1, 0x5B, 0xFA, 0x05, 0xF1, 0x61, 0xFA, 0x03, 0xF1, 0x67, 0xFA,
- .byte 0x01, 0xF1, 0x6D, 0xFA, 0xFE, 0xF0, 0x73, 0xFA, 0xFC, 0xF0, 0x79, 0xFA, 0xFA, 0xF0, 0x7F, 0xFA,
- .byte 0xF8, 0xF0, 0x84, 0xFA, 0xF6, 0xF0, 0x8A, 0xFA, 0xF4, 0xF0, 0x90, 0xFA, 0xF2, 0xF0, 0x96, 0xFA,
- .byte 0xEF, 0xF0, 0x9C, 0xFA, 0xED, 0xF0, 0xA2, 0xFA, 0xEB, 0xF0, 0xA8, 0xFA, 0xE9, 0xF0, 0xAE, 0xFA,
- .byte 0xE7, 0xF0, 0xB4, 0xFA, 0xE5, 0xF0, 0xBA, 0xFA, 0xE3, 0xF0, 0xC0, 0xFA, 0xE1, 0xF0, 0xC6, 0xFA,
- .byte 0xDF, 0xF0, 0xCC, 0xFA, 0xDD, 0xF0, 0xD1, 0xFA, 0xDB, 0xF0, 0xD7, 0xFA, 0xD9, 0xF0, 0xDD, 0xFA,
- .byte 0xD7, 0xF0, 0xE3, 0xFA, 0xD5, 0xF0, 0xE9, 0xFA, 0xD3, 0xF0, 0xEF, 0xFA, 0xD1, 0xF0, 0xF5, 0xFA,
- .byte 0xCF, 0xF0, 0xFB, 0xFA, 0xCD, 0xF0, 0x01, 0xFB, 0xCB, 0xF0, 0x07, 0xFB, 0xC9, 0xF0, 0x0D, 0xFB,
- .byte 0xC7, 0xF0, 0x13, 0xFB, 0xC5, 0xF0, 0x19, 0xFB, 0xC3, 0xF0, 0x1F, 0xFB, 0xC1, 0xF0, 0x25, 0xFB,
- .byte 0xBF, 0xF0, 0x2B, 0xFB, 0xBD, 0xF0, 0x31, 0xFB, 0xBB, 0xF0, 0x37, 0xFB, 0xBA, 0xF0, 0x3D, 0xFB,
- .byte 0xB8, 0xF0, 0x43, 0xFB, 0xB6, 0xF0, 0x49, 0xFB, 0xB4, 0xF0, 0x4F, 0xFB, 0xB2, 0xF0, 0x55, 0xFB,
- .byte 0xB0, 0xF0, 0x5B, 0xFB, 0xAF, 0xF0, 0x61, 0xFB, 0xAD, 0xF0, 0x67, 0xFB, 0xAB, 0xF0, 0x6D, 0xFB,
- .byte 0xA9, 0xF0, 0x73, 0xFB, 0xA7, 0xF0, 0x79, 0xFB, 0xA6, 0xF0, 0x7F, 0xFB, 0xA4, 0xF0, 0x85, 0xFB,
- .byte 0xA2, 0xF0, 0x8B, 0xFB, 0xA0, 0xF0, 0x91, 0xFB, 0x9F, 0xF0, 0x97, 0xFB, 0x9D, 0xF0, 0x9D, 0xFB,
- .byte 0x9B, 0xF0, 0xA3, 0xFB, 0x99, 0xF0, 0xA9, 0xFB, 0x98, 0xF0, 0xAF, 0xFB, 0x96, 0xF0, 0xB5, 0xFB,
- .byte 0x94, 0xF0, 0xBC, 0xFB, 0x93, 0xF0, 0xC2, 0xFB, 0x91, 0xF0, 0xC8, 0xFB, 0x8F, 0xF0, 0xCE, 0xFB,
- .byte 0x8E, 0xF0, 0xD4, 0xFB, 0x8C, 0xF0, 0xDA, 0xFB, 0x8A, 0xF0, 0xE0, 0xFB, 0x89, 0xF0, 0xE6, 0xFB,
- .byte 0x87, 0xF0, 0xEC, 0xFB, 0x86, 0xF0, 0xF2, 0xFB, 0x84, 0xF0, 0xF8, 0xFB, 0x83, 0xF0, 0xFE, 0xFB,
- .byte 0x81, 0xF0, 0x04, 0xFC, 0x7F, 0xF0, 0x0A, 0xFC, 0x7E, 0xF0, 0x11, 0xFC, 0x7C, 0xF0, 0x17, 0xFC,
- .byte 0x7B, 0xF0, 0x1D, 0xFC, 0x79, 0xF0, 0x23, 0xFC, 0x78, 0xF0, 0x29, 0xFC, 0x76, 0xF0, 0x2F, 0xFC,
- .byte 0x75, 0xF0, 0x35, 0xFC, 0x73, 0xF0, 0x3B, 0xFC, 0x72, 0xF0, 0x41, 0xFC, 0x70, 0xF0, 0x47, 0xFC,
- .byte 0x6F, 0xF0, 0x4E, 0xFC, 0x6D, 0xF0, 0x54, 0xFC, 0x6C, 0xF0, 0x5A, 0xFC, 0x6B, 0xF0, 0x60, 0xFC,
- .byte 0x69, 0xF0, 0x66, 0xFC, 0x68, 0xF0, 0x6C, 0xFC, 0x66, 0xF0, 0x72, 0xFC, 0x65, 0xF0, 0x78, 0xFC,
- .byte 0x64, 0xF0, 0x7F, 0xFC, 0x62, 0xF0, 0x85, 0xFC, 0x61, 0xF0, 0x8B, 0xFC, 0x5F, 0xF0, 0x91, 0xFC,
- .byte 0x5E, 0xF0, 0x97, 0xFC, 0x5D, 0xF0, 0x9D, 0xFC, 0x5B, 0xF0, 0xA3, 0xFC, 0x5A, 0xF0, 0xAA, 0xFC,
- .byte 0x59, 0xF0, 0xB0, 0xFC, 0x58, 0xF0, 0xB6, 0xFC, 0x56, 0xF0, 0xBC, 0xFC, 0x55, 0xF0, 0xC2, 0xFC,
- .byte 0x54, 0xF0, 0xC8, 0xFC, 0x52, 0xF0, 0xCE, 0xFC, 0x51, 0xF0, 0xD5, 0xFC, 0x50, 0xF0, 0xDB, 0xFC,
- .byte 0x4F, 0xF0, 0xE1, 0xFC, 0x4D, 0xF0, 0xE7, 0xFC, 0x4C, 0xF0, 0xED, 0xFC, 0x4B, 0xF0, 0xF3, 0xFC,
- .byte 0x4A, 0xF0, 0xFA, 0xFC, 0x49, 0xF0, 0x00, 0xFD, 0x48, 0xF0, 0x06, 0xFD, 0x46, 0xF0, 0x0C, 0xFD,
- .byte 0x45, 0xF0, 0x12, 0xFD, 0x44, 0xF0, 0x18, 0xFD, 0x43, 0xF0, 0x1F, 0xFD, 0x42, 0xF0, 0x25, 0xFD,
- .byte 0x41, 0xF0, 0x2B, 0xFD, 0x40, 0xF0, 0x31, 0xFD, 0x3E, 0xF0, 0x37, 0xFD, 0x3D, 0xF0, 0x3E, 0xFD,
- .byte 0x3C, 0xF0, 0x44, 0xFD, 0x3B, 0xF0, 0x4A, 0xFD, 0x3A, 0xF0, 0x50, 0xFD, 0x39, 0xF0, 0x56, 0xFD,
- .byte 0x38, 0xF0, 0x5D, 0xFD, 0x37, 0xF0, 0x63, 0xFD, 0x36, 0xF0, 0x69, 0xFD, 0x35, 0xF0, 0x6F, 0xFD,
- .byte 0x34, 0xF0, 0x75, 0xFD, 0x33, 0xF0, 0x7C, 0xFD, 0x32, 0xF0, 0x82, 0xFD, 0x31, 0xF0, 0x88, 0xFD,
- .byte 0x30, 0xF0, 0x8E, 0xFD, 0x2F, 0xF0, 0x94, 0xFD, 0x2E, 0xF0, 0x9B, 0xFD, 0x2D, 0xF0, 0xA1, 0xFD,
- .byte 0x2C, 0xF0, 0xA7, 0xFD, 0x2B, 0xF0, 0xAD, 0xFD, 0x2B, 0xF0, 0xB3, 0xFD, 0x2A, 0xF0, 0xBA, 0xFD,
- .byte 0x29, 0xF0, 0xC0, 0xFD, 0x28, 0xF0, 0xC6, 0xFD, 0x27, 0xF0, 0xCC, 0xFD, 0x26, 0xF0, 0xD3, 0xFD,
- .byte 0x25, 0xF0, 0xD9, 0xFD, 0x24, 0xF0, 0xDF, 0xFD, 0x24, 0xF0, 0xE5, 0xFD, 0x23, 0xF0, 0xEB, 0xFD,
- .byte 0x22, 0xF0, 0xF2, 0xFD, 0x21, 0xF0, 0xF8, 0xFD, 0x20, 0xF0, 0xFE, 0xFD, 0x20, 0xF0, 0x04, 0xFE,
- .byte 0x1F, 0xF0, 0x0B, 0xFE, 0x1E, 0xF0, 0x11, 0xFE, 0x1D, 0xF0, 0x17, 0xFE, 0x1D, 0xF0, 0x1D, 0xFE,
- .byte 0x1C, 0xF0, 0x24, 0xFE, 0x1B, 0xF0, 0x2A, 0xFE, 0x1A, 0xF0, 0x30, 0xFE, 0x1A, 0xF0, 0x36, 0xFE,
- .byte 0x19, 0xF0, 0x3D, 0xFE, 0x18, 0xF0, 0x43, 0xFE, 0x18, 0xF0, 0x49, 0xFE, 0x17, 0xF0, 0x4F, 0xFE,
- .byte 0x16, 0xF0, 0x56, 0xFE, 0x16, 0xF0, 0x5C, 0xFE, 0x15, 0xF0, 0x62, 0xFE, 0x14, 0xF0, 0x68, 0xFE,
- .byte 0x14, 0xF0, 0x6F, 0xFE, 0x13, 0xF0, 0x75, 0xFE, 0x13, 0xF0, 0x7B, 0xFE, 0x12, 0xF0, 0x81, 0xFE,
- .byte 0x11, 0xF0, 0x88, 0xFE, 0x11, 0xF0, 0x8E, 0xFE, 0x10, 0xF0, 0x94, 0xFE, 0x10, 0xF0, 0x9A, 0xFE,
- .byte 0x0F, 0xF0, 0xA1, 0xFE, 0x0F, 0xF0, 0xA7, 0xFE, 0x0E, 0xF0, 0xAD, 0xFE, 0x0E, 0xF0, 0xB3, 0xFE,
- .byte 0x0D, 0xF0, 0xBA, 0xFE, 0x0D, 0xF0, 0xC0, 0xFE, 0x0C, 0xF0, 0xC6, 0xFE, 0x0C, 0xF0, 0xCC, 0xFE,
- .byte 0x0B, 0xF0, 0xD3, 0xFE, 0x0B, 0xF0, 0xD9, 0xFE, 0x0A, 0xF0, 0xDF, 0xFE, 0x0A, 0xF0, 0xE5, 0xFE,
- .byte 0x09, 0xF0, 0xEC, 0xFE, 0x09, 0xF0, 0xF2, 0xFE, 0x08, 0xF0, 0xF8, 0xFE, 0x08, 0xF0, 0xFF, 0xFE,
- .byte 0x08, 0xF0, 0x05, 0xFF, 0x07, 0xF0, 0x0B, 0xFF, 0x07, 0xF0, 0x11, 0xFF, 0x07, 0xF0, 0x18, 0xFF,
- .byte 0x06, 0xF0, 0x1E, 0xFF, 0x06, 0xF0, 0x24, 0xFF, 0x06, 0xF0, 0x2A, 0xFF, 0x05, 0xF0, 0x31, 0xFF,
- .byte 0x05, 0xF0, 0x37, 0xFF, 0x05, 0xF0, 0x3D, 0xFF, 0x04, 0xF0, 0x44, 0xFF, 0x04, 0xF0, 0x4A, 0xFF,
- .byte 0x04, 0xF0, 0x50, 0xFF, 0x04, 0xF0, 0x56, 0xFF, 0x03, 0xF0, 0x5D, 0xFF, 0x03, 0xF0, 0x63, 0xFF,
- .byte 0x03, 0xF0, 0x69, 0xFF, 0x03, 0xF0, 0x70, 0xFF, 0x02, 0xF0, 0x76, 0xFF, 0x02, 0xF0, 0x7C, 0xFF,
- .byte 0x02, 0xF0, 0x82, 0xFF, 0x02, 0xF0, 0x89, 0xFF, 0x02, 0xF0, 0x8F, 0xFF, 0x01, 0xF0, 0x95, 0xFF,
- .byte 0x01, 0xF0, 0x9B, 0xFF, 0x01, 0xF0, 0xA2, 0xFF, 0x01, 0xF0, 0xA8, 0xFF, 0x01, 0xF0, 0xAE, 0xFF,
- .byte 0x01, 0xF0, 0xB5, 0xFF, 0x01, 0xF0, 0xBB, 0xFF, 0x00, 0xF0, 0xC1, 0xFF, 0x00, 0xF0, 0xC7, 0xFF,
- .byte 0x00, 0xF0, 0xCE, 0xFF, 0x00, 0xF0, 0xD4, 0xFF, 0x00, 0xF0, 0xDA, 0xFF, 0x00, 0xF0, 0xE1, 0xFF,
- .byte 0x00, 0xF0, 0xE7, 0xFF, 0x00, 0xF0, 0xED, 0xFF, 0x00, 0xF0, 0xF3, 0xFF, 0x00, 0xF0, 0xFA, 0xFF,
- .byte 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x06, 0x00, 0x00, 0xF0, 0x0D, 0x00, 0x00, 0xF0, 0x13, 0x00,
- .byte 0x00, 0xF0, 0x19, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0xF0, 0x26, 0x00, 0x00, 0xF0, 0x2C, 0x00,
- .byte 0x00, 0xF0, 0x32, 0x00, 0x00, 0xF0, 0x39, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x01, 0xF0, 0x45, 0x00,
- .byte 0x01, 0xF0, 0x4B, 0x00, 0x01, 0xF0, 0x52, 0x00, 0x01, 0xF0, 0x58, 0x00, 0x01, 0xF0, 0x5E, 0x00,
- .byte 0x01, 0xF0, 0x65, 0x00, 0x01, 0xF0, 0x6B, 0x00, 0x02, 0xF0, 0x71, 0x00, 0x02, 0xF0, 0x77, 0x00,
- .byte 0x02, 0xF0, 0x7E, 0x00, 0x02, 0xF0, 0x84, 0x00, 0x02, 0xF0, 0x8A, 0x00, 0x03, 0xF0, 0x90, 0x00,
- .byte 0x03, 0xF0, 0x97, 0x00, 0x03, 0xF0, 0x9D, 0x00, 0x03, 0xF0, 0xA3, 0x00, 0x04, 0xF0, 0xAA, 0x00,
- .byte 0x04, 0xF0, 0xB0, 0x00, 0x04, 0xF0, 0xB6, 0x00, 0x04, 0xF0, 0xBC, 0x00, 0x05, 0xF0, 0xC3, 0x00,
- .byte 0x05, 0xF0, 0xC9, 0x00, 0x05, 0xF0, 0xCF, 0x00, 0x06, 0xF0, 0xD6, 0x00, 0x06, 0xF0, 0xDC, 0x00,
- .byte 0x06, 0xF0, 0xE2, 0x00, 0x07, 0xF0, 0xE8, 0x00, 0x07, 0xF0, 0xEF, 0x00, 0x07, 0xF0, 0xF5, 0x00,
- .byte 0x08, 0xF0, 0xFB, 0x00, 0x08, 0xF0, 0x01, 0x01, 0x08, 0xF0, 0x08, 0x01, 0x09, 0xF0, 0x0E, 0x01,
- .byte 0x09, 0xF0, 0x14, 0x01, 0x0A, 0xF0, 0x1B, 0x01, 0x0A, 0xF0, 0x21, 0x01, 0x0B, 0xF0, 0x27, 0x01,
- .byte 0x0B, 0xF0, 0x2D, 0x01, 0x0C, 0xF0, 0x34, 0x01, 0x0C, 0xF0, 0x3A, 0x01, 0x0D, 0xF0, 0x40, 0x01,
- .byte 0x0D, 0xF0, 0x46, 0x01, 0x0E, 0xF0, 0x4D, 0x01, 0x0E, 0xF0, 0x53, 0x01, 0x0F, 0xF0, 0x59, 0x01,
- .byte 0x0F, 0xF0, 0x5F, 0x01, 0x10, 0xF0, 0x66, 0x01, 0x10, 0xF0, 0x6C, 0x01, 0x11, 0xF0, 0x72, 0x01,
- .byte 0x11, 0xF0, 0x78, 0x01, 0x12, 0xF0, 0x7F, 0x01, 0x13, 0xF0, 0x85, 0x01, 0x13, 0xF0, 0x8B, 0x01,
- .byte 0x14, 0xF0, 0x91, 0x01, 0x14, 0xF0, 0x98, 0x01, 0x15, 0xF0, 0x9E, 0x01, 0x16, 0xF0, 0xA4, 0x01,
- .byte 0x16, 0xF0, 0xAA, 0x01, 0x17, 0xF0, 0xB1, 0x01, 0x18, 0xF0, 0xB7, 0x01, 0x18, 0xF0, 0xBD, 0x01,
- .byte 0x19, 0xF0, 0xC3, 0x01, 0x1A, 0xF0, 0xCA, 0x01, 0x1A, 0xF0, 0xD0, 0x01, 0x1B, 0xF0, 0xD6, 0x01,
- .byte 0x1C, 0xF0, 0xDC, 0x01, 0x1D, 0xF0, 0xE3, 0x01, 0x1D, 0xF0, 0xE9, 0x01, 0x1E, 0xF0, 0xEF, 0x01,
- .byte 0x1F, 0xF0, 0xF5, 0x01, 0x20, 0xF0, 0xFC, 0x01, 0x20, 0xF0, 0x02, 0x02, 0x21, 0xF0, 0x08, 0x02,
- .byte 0x22, 0xF0, 0x0E, 0x02, 0x23, 0xF0, 0x15, 0x02, 0x24, 0xF0, 0x1B, 0x02, 0x24, 0xF0, 0x21, 0x02,
- .byte 0x25, 0xF0, 0x27, 0x02, 0x26, 0xF0, 0x2D, 0x02, 0x27, 0xF0, 0x34, 0x02, 0x28, 0xF0, 0x3A, 0x02,
- .byte 0x29, 0xF0, 0x40, 0x02, 0x2A, 0xF0, 0x46, 0x02, 0x2B, 0xF0, 0x4D, 0x02, 0x2B, 0xF0, 0x53, 0x02,
- .byte 0x2C, 0xF0, 0x59, 0x02, 0x2D, 0xF0, 0x5F, 0x02, 0x2E, 0xF0, 0x65, 0x02, 0x2F, 0xF0, 0x6C, 0x02,
- .byte 0x30, 0xF0, 0x72, 0x02, 0x31, 0xF0, 0x78, 0x02, 0x32, 0xF0, 0x7E, 0x02, 0x33, 0xF0, 0x84, 0x02,
- .byte 0x34, 0xF0, 0x8B, 0x02, 0x35, 0xF0, 0x91, 0x02, 0x36, 0xF0, 0x97, 0x02, 0x37, 0xF0, 0x9D, 0x02,
- .byte 0x38, 0xF0, 0xA3, 0x02, 0x39, 0xF0, 0xAA, 0x02, 0x3A, 0xF0, 0xB0, 0x02, 0x3B, 0xF0, 0xB6, 0x02,
- .byte 0x3C, 0xF0, 0xBC, 0x02, 0x3D, 0xF0, 0xC2, 0x02, 0x3E, 0xF0, 0xC9, 0x02, 0x40, 0xF0, 0xCF, 0x02,
- .byte 0x41, 0xF0, 0xD5, 0x02, 0x42, 0xF0, 0xDB, 0x02, 0x43, 0xF0, 0xE1, 0x02, 0x44, 0xF0, 0xE8, 0x02,
- .byte 0x45, 0xF0, 0xEE, 0x02, 0x46, 0xF0, 0xF4, 0x02, 0x48, 0xF0, 0xFA, 0x02, 0x49, 0xF0, 0x00, 0x03,
- .byte 0x4A, 0xF0, 0x06, 0x03, 0x4B, 0xF0, 0x0D, 0x03, 0x4C, 0xF0, 0x13, 0x03, 0x4D, 0xF0, 0x19, 0x03,
- .byte 0x4F, 0xF0, 0x1F, 0x03, 0x50, 0xF0, 0x25, 0x03, 0x51, 0xF0, 0x2B, 0x03, 0x52, 0xF0, 0x32, 0x03,
- .byte 0x54, 0xF0, 0x38, 0x03, 0x55, 0xF0, 0x3E, 0x03, 0x56, 0xF0, 0x44, 0x03, 0x58, 0xF0, 0x4A, 0x03,
- .byte 0x59, 0xF0, 0x50, 0x03, 0x5A, 0xF0, 0x56, 0x03, 0x5B, 0xF0, 0x5D, 0x03, 0x5D, 0xF0, 0x63, 0x03,
- .byte 0x5E, 0xF0, 0x69, 0x03, 0x5F, 0xF0, 0x6F, 0x03, 0x61, 0xF0, 0x75, 0x03, 0x62, 0xF0, 0x7B, 0x03,
- .byte 0x64, 0xF0, 0x81, 0x03, 0x65, 0xF0, 0x88, 0x03, 0x66, 0xF0, 0x8E, 0x03, 0x68, 0xF0, 0x94, 0x03,
- .byte 0x69, 0xF0, 0x9A, 0x03, 0x6B, 0xF0, 0xA0, 0x03, 0x6C, 0xF0, 0xA6, 0x03, 0x6D, 0xF0, 0xAC, 0x03,
- .byte 0x6F, 0xF0, 0xB2, 0x03, 0x70, 0xF0, 0xB9, 0x03, 0x72, 0xF0, 0xBF, 0x03, 0x73, 0xF0, 0xC5, 0x03,
- .byte 0x75, 0xF0, 0xCB, 0x03, 0x76, 0xF0, 0xD1, 0x03, 0x78, 0xF0, 0xD7, 0x03, 0x79, 0xF0, 0xDD, 0x03,
- .byte 0x7B, 0xF0, 0xE3, 0x03, 0x7C, 0xF0, 0xE9, 0x03, 0x7E, 0xF0, 0xEF, 0x03, 0x7F, 0xF0, 0xF6, 0x03,
- .byte 0x81, 0xF0, 0xFC, 0x03, 0x83, 0xF0, 0x02, 0x04, 0x84, 0xF0, 0x08, 0x04, 0x86, 0xF0, 0x0E, 0x04,
- .byte 0x87, 0xF0, 0x14, 0x04, 0x89, 0xF0, 0x1A, 0x04, 0x8A, 0xF0, 0x20, 0x04, 0x8C, 0xF0, 0x26, 0x04,
- .byte 0x8E, 0xF0, 0x2C, 0x04, 0x8F, 0xF0, 0x32, 0x04, 0x91, 0xF0, 0x38, 0x04, 0x93, 0xF0, 0x3E, 0x04,
- .byte 0x94, 0xF0, 0x44, 0x04, 0x96, 0xF0, 0x4B, 0x04, 0x98, 0xF0, 0x51, 0x04, 0x99, 0xF0, 0x57, 0x04,
- .byte 0x9B, 0xF0, 0x5D, 0x04, 0x9D, 0xF0, 0x63, 0x04, 0x9F, 0xF0, 0x69, 0x04, 0xA0, 0xF0, 0x6F, 0x04,
- .byte 0xA2, 0xF0, 0x75, 0x04, 0xA4, 0xF0, 0x7B, 0x04, 0xA6, 0xF0, 0x81, 0x04, 0xA7, 0xF0, 0x87, 0x04,
- .byte 0xA9, 0xF0, 0x8D, 0x04, 0xAB, 0xF0, 0x93, 0x04, 0xAD, 0xF0, 0x99, 0x04, 0xAF, 0xF0, 0x9F, 0x04,
- .byte 0xB0, 0xF0, 0xA5, 0x04, 0xB2, 0xF0, 0xAB, 0x04, 0xB4, 0xF0, 0xB1, 0x04, 0xB6, 0xF0, 0xB7, 0x04,
- .byte 0xB8, 0xF0, 0xBD, 0x04, 0xBA, 0xF0, 0xC3, 0x04, 0xBB, 0xF0, 0xC9, 0x04, 0xBD, 0xF0, 0xCF, 0x04,
- .byte 0xBF, 0xF0, 0xD5, 0x04, 0xC1, 0xF0, 0xDB, 0x04, 0xC3, 0xF0, 0xE1, 0x04, 0xC5, 0xF0, 0xE7, 0x04,
- .byte 0xC7, 0xF0, 0xED, 0x04, 0xC9, 0xF0, 0xF3, 0x04, 0xCB, 0xF0, 0xF9, 0x04, 0xCD, 0xF0, 0xFF, 0x04,
- .byte 0xCF, 0xF0, 0x05, 0x05, 0xD1, 0xF0, 0x0B, 0x05, 0xD3, 0xF0, 0x11, 0x05, 0xD5, 0xF0, 0x17, 0x05,
- .byte 0xD7, 0xF0, 0x1D, 0x05, 0xD9, 0xF0, 0x23, 0x05, 0xDB, 0xF0, 0x29, 0x05, 0xDD, 0xF0, 0x2F, 0x05,
- .byte 0xDF, 0xF0, 0x34, 0x05, 0xE1, 0xF0, 0x3A, 0x05, 0xE3, 0xF0, 0x40, 0x05, 0xE5, 0xF0, 0x46, 0x05,
- .byte 0xE7, 0xF0, 0x4C, 0x05, 0xE9, 0xF0, 0x52, 0x05, 0xEB, 0xF0, 0x58, 0x05, 0xED, 0xF0, 0x5E, 0x05,
- .byte 0xEF, 0xF0, 0x64, 0x05, 0xF2, 0xF0, 0x6A, 0x05, 0xF4, 0xF0, 0x70, 0x05, 0xF6, 0xF0, 0x76, 0x05,
- .byte 0xF8, 0xF0, 0x7C, 0x05, 0xFA, 0xF0, 0x81, 0x05, 0xFC, 0xF0, 0x87, 0x05, 0xFE, 0xF0, 0x8D, 0x05,
- .byte 0x01, 0xF1, 0x93, 0x05, 0x03, 0xF1, 0x99, 0x05, 0x05, 0xF1, 0x9F, 0x05, 0x07, 0xF1, 0xA5, 0x05,
- .byte 0x09, 0xF1, 0xAB, 0x05, 0x0C, 0xF1, 0xB1, 0x05, 0x0E, 0xF1, 0xB6, 0x05, 0x10, 0xF1, 0xBC, 0x05,
- .byte 0x12, 0xF1, 0xC2, 0x05, 0x15, 0xF1, 0xC8, 0x05, 0x17, 0xF1, 0xCE, 0x05, 0x19, 0xF1, 0xD4, 0x05,
- .byte 0x1C, 0xF1, 0xDA, 0x05, 0x1E, 0xF1, 0xDF, 0x05, 0x20, 0xF1, 0xE5, 0x05, 0x23, 0xF1, 0xEB, 0x05,
- .byte 0x25, 0xF1, 0xF1, 0x05, 0x27, 0xF1, 0xF7, 0x05, 0x2A, 0xF1, 0xFD, 0x05, 0x2C, 0xF1, 0x02, 0x06,
- .byte 0x2E, 0xF1, 0x08, 0x06, 0x31, 0xF1, 0x0E, 0x06, 0x33, 0xF1, 0x14, 0x06, 0x35, 0xF1, 0x1A, 0x06,
- .byte 0x38, 0xF1, 0x1F, 0x06, 0x3A, 0xF1, 0x25, 0x06, 0x3D, 0xF1, 0x2B, 0x06, 0x3F, 0xF1, 0x31, 0x06,
- .byte 0x41, 0xF1, 0x37, 0x06, 0x44, 0xF1, 0x3C, 0x06, 0x46, 0xF1, 0x42, 0x06, 0x49, 0xF1, 0x48, 0x06,
- .byte 0x4B, 0xF1, 0x4E, 0x06, 0x4E, 0xF1, 0x54, 0x06, 0x50, 0xF1, 0x59, 0x06, 0x53, 0xF1, 0x5F, 0x06,
- .byte 0x55, 0xF1, 0x65, 0x06, 0x58, 0xF1, 0x6B, 0x06, 0x5A, 0xF1, 0x70, 0x06, 0x5D, 0xF1, 0x76, 0x06,
- .byte 0x5F, 0xF1, 0x7C, 0x06, 0x62, 0xF1, 0x82, 0x06, 0x65, 0xF1, 0x87, 0x06, 0x67, 0xF1, 0x8D, 0x06,
- .byte 0x6A, 0xF1, 0x93, 0x06, 0x6C, 0xF1, 0x99, 0x06, 0x6F, 0xF1, 0x9E, 0x06, 0x71, 0xF1, 0xA4, 0x06,
- .byte 0x74, 0xF1, 0xAA, 0x06, 0x77, 0xF1, 0xAF, 0x06, 0x79, 0xF1, 0xB5, 0x06, 0x7C, 0xF1, 0xBB, 0x06,
- .byte 0x7F, 0xF1, 0xC1, 0x06, 0x81, 0xF1, 0xC6, 0x06, 0x84, 0xF1, 0xCC, 0x06, 0x87, 0xF1, 0xD2, 0x06,
- .byte 0x89, 0xF1, 0xD7, 0x06, 0x8C, 0xF1, 0xDD, 0x06, 0x8F, 0xF1, 0xE3, 0x06, 0x91, 0xF1, 0xE8, 0x06,
- .byte 0x94, 0xF1, 0xEE, 0x06, 0x97, 0xF1, 0xF4, 0x06, 0x9A, 0xF1, 0xF9, 0x06, 0x9C, 0xF1, 0xFF, 0x06,
- .byte 0x9F, 0xF1, 0x05, 0x07, 0xA2, 0xF1, 0x0A, 0x07, 0xA5, 0xF1, 0x10, 0x07, 0xA7, 0xF1, 0x15, 0x07,
- .byte 0xAA, 0xF1, 0x1B, 0x07, 0xAD, 0xF1, 0x21, 0x07, 0xB0, 0xF1, 0x26, 0x07, 0xB3, 0xF1, 0x2C, 0x07,
- .byte 0xB5, 0xF1, 0x32, 0x07, 0xB8, 0xF1, 0x37, 0x07, 0xBB, 0xF1, 0x3D, 0x07, 0xBE, 0xF1, 0x42, 0x07,
- .byte 0xC1, 0xF1, 0x48, 0x07, 0xC4, 0xF1, 0x4E, 0x07, 0xC6, 0xF1, 0x53, 0x07, 0xC9, 0xF1, 0x59, 0x07,
- .byte 0xCC, 0xF1, 0x5E, 0x07, 0xCF, 0xF1, 0x64, 0x07, 0xD2, 0xF1, 0x6A, 0x07, 0xD5, 0xF1, 0x6F, 0x07,
- .byte 0xD8, 0xF1, 0x75, 0x07, 0xDB, 0xF1, 0x7A, 0x07, 0xDE, 0xF1, 0x80, 0x07, 0xE1, 0xF1, 0x85, 0x07,
- .byte 0xE4, 0xF1, 0x8B, 0x07, 0xE7, 0xF1, 0x90, 0x07, 0xEA, 0xF1, 0x96, 0x07, 0xED, 0xF1, 0x9B, 0x07,
- .byte 0xF0, 0xF1, 0xA1, 0x07, 0xF3, 0xF1, 0xA6, 0x07, 0xF6, 0xF1, 0xAC, 0x07, 0xF9, 0xF1, 0xB2, 0x07,
- .byte 0xFC, 0xF1, 0xB7, 0x07, 0xFF, 0xF1, 0xBD, 0x07, 0x02, 0xF2, 0xC2, 0x07, 0x05, 0xF2, 0xC8, 0x07,
- .byte 0x08, 0xF2, 0xCD, 0x07, 0x0B, 0xF2, 0xD2, 0x07, 0x0E, 0xF2, 0xD8, 0x07, 0x11, 0xF2, 0xDD, 0x07,
- .byte 0x14, 0xF2, 0xE3, 0x07, 0x17, 0xF2, 0xE8, 0x07, 0x1A, 0xF2, 0xEE, 0x07, 0x1D, 0xF2, 0xF3, 0x07,
- .byte 0x21, 0xF2, 0xF9, 0x07, 0x24, 0xF2, 0xFE, 0x07, 0x27, 0xF2, 0x04, 0x08, 0x2A, 0xF2, 0x09, 0x08,
- .byte 0x2D, 0xF2, 0x0E, 0x08, 0x30, 0xF2, 0x14, 0x08, 0x34, 0xF2, 0x19, 0x08, 0x37, 0xF2, 0x1F, 0x08,
- .byte 0x3A, 0xF2, 0x24, 0x08, 0x3D, 0xF2, 0x2A, 0x08, 0x40, 0xF2, 0x2F, 0x08, 0x44, 0xF2, 0x34, 0x08,
- .byte 0x47, 0xF2, 0x3A, 0x08, 0x4A, 0xF2, 0x3F, 0x08, 0x4D, 0xF2, 0x45, 0x08, 0x50, 0xF2, 0x4A, 0x08,
- .byte 0x54, 0xF2, 0x4F, 0x08, 0x57, 0xF2, 0x55, 0x08, 0x5A, 0xF2, 0x5A, 0x08, 0x5E, 0xF2, 0x5F, 0x08,
- .byte 0x61, 0xF2, 0x65, 0x08, 0x64, 0xF2, 0x6A, 0x08, 0x67, 0xF2, 0x6F, 0x08, 0x6B, 0xF2, 0x75, 0x08,
- .byte 0x6E, 0xF2, 0x7A, 0x08, 0x71, 0xF2, 0x7F, 0x08, 0x75, 0xF2, 0x85, 0x08, 0x78, 0xF2, 0x8A, 0x08,
- .byte 0x7B, 0xF2, 0x8F, 0x08, 0x7F, 0xF2, 0x95, 0x08, 0x82, 0xF2, 0x9A, 0x08, 0x86, 0xF2, 0x9F, 0x08,
- .byte 0x89, 0xF2, 0xA5, 0x08, 0x8C, 0xF2, 0xAA, 0x08, 0x90, 0xF2, 0xAF, 0x08, 0x93, 0xF2, 0xB4, 0x08,
- .byte 0x97, 0xF2, 0xBA, 0x08, 0x9A, 0xF2, 0xBF, 0x08, 0x9E, 0xF2, 0xC4, 0x08, 0xA1, 0xF2, 0xC9, 0x08,
- .byte 0xA4, 0xF2, 0xCF, 0x08, 0xA8, 0xF2, 0xD4, 0x08, 0xAB, 0xF2, 0xD9, 0x08, 0xAF, 0xF2, 0xDE, 0x08,
- .byte 0xB2, 0xF2, 0xE4, 0x08, 0xB6, 0xF2, 0xE9, 0x08, 0xB9, 0xF2, 0xEE, 0x08, 0xBD, 0xF2, 0xF3, 0x08,
- .byte 0xC0, 0xF2, 0xF8, 0x08, 0xC4, 0xF2, 0xFE, 0x08, 0xC7, 0xF2, 0x03, 0x09, 0xCB, 0xF2, 0x08, 0x09,
- .byte 0xCE, 0xF2, 0x0D, 0x09, 0xD2, 0xF2, 0x12, 0x09, 0xD6, 0xF2, 0x18, 0x09, 0xD9, 0xF2, 0x1D, 0x09,
- .byte 0xDD, 0xF2, 0x22, 0x09, 0xE0, 0xF2, 0x27, 0x09, 0xE4, 0xF2, 0x2C, 0x09, 0xE8, 0xF2, 0x31, 0x09,
- .byte 0xEB, 0xF2, 0x37, 0x09, 0xEF, 0xF2, 0x3C, 0x09, 0xF2, 0xF2, 0x41, 0x09, 0xF6, 0xF2, 0x46, 0x09,
- .byte 0xFA, 0xF2, 0x4B, 0x09, 0xFD, 0xF2, 0x50, 0x09, 0x01, 0xF3, 0x55, 0x09, 0x05, 0xF3, 0x5A, 0x09,
- .byte 0x08, 0xF3, 0x5F, 0x09, 0x0C, 0xF3, 0x65, 0x09, 0x10, 0xF3, 0x6A, 0x09, 0x13, 0xF3, 0x6F, 0x09,
- .byte 0x17, 0xF3, 0x74, 0x09, 0x1B, 0xF3, 0x79, 0x09, 0x1F, 0xF3, 0x7E, 0x09, 0x22, 0xF3, 0x83, 0x09,
- .byte 0x26, 0xF3, 0x88, 0x09, 0x2A, 0xF3, 0x8D, 0x09, 0x2E, 0xF3, 0x92, 0x09, 0x31, 0xF3, 0x97, 0x09,
- .byte 0x35, 0xF3, 0x9C, 0x09, 0x39, 0xF3, 0xA1, 0x09, 0x3D, 0xF3, 0xA6, 0x09, 0x40, 0xF3, 0xAB, 0x09,
- .byte 0x44, 0xF3, 0xB0, 0x09, 0x48, 0xF3, 0xB5, 0x09, 0x4C, 0xF3, 0xBA, 0x09, 0x50, 0xF3, 0xBF, 0x09,
- .byte 0x54, 0xF3, 0xC4, 0x09, 0x57, 0xF3, 0xC9, 0x09, 0x5B, 0xF3, 0xCE, 0x09, 0x5F, 0xF3, 0xD3, 0x09,
- .byte 0x63, 0xF3, 0xD8, 0x09, 0x67, 0xF3, 0xDD, 0x09, 0x6B, 0xF3, 0xE2, 0x09, 0x6F, 0xF3, 0xE7, 0x09,
- .byte 0x72, 0xF3, 0xEC, 0x09, 0x76, 0xF3, 0xF1, 0x09, 0x7A, 0xF3, 0xF6, 0x09, 0x7E, 0xF3, 0xFB, 0x09,
- .byte 0x82, 0xF3, 0xFF, 0x09, 0x86, 0xF3, 0x04, 0x0A, 0x8A, 0xF3, 0x09, 0x0A, 0x8E, 0xF3, 0x0E, 0x0A,
- .byte 0x92, 0xF3, 0x13, 0x0A, 0x96, 0xF3, 0x18, 0x0A, 0x9A, 0xF3, 0x1D, 0x0A, 0x9E, 0xF3, 0x22, 0x0A,
- .byte 0xA2, 0xF3, 0x26, 0x0A, 0xA6, 0xF3, 0x2B, 0x0A, 0xAA, 0xF3, 0x30, 0x0A, 0xAE, 0xF3, 0x35, 0x0A,
- .byte 0xB2, 0xF3, 0x3A, 0x0A, 0xB6, 0xF3, 0x3F, 0x0A, 0xBA, 0xF3, 0x44, 0x0A, 0xBE, 0xF3, 0x48, 0x0A,
- .byte 0xC2, 0xF3, 0x4D, 0x0A, 0xC6, 0xF3, 0x52, 0x0A, 0xCA, 0xF3, 0x57, 0x0A, 0xCE, 0xF3, 0x5C, 0x0A,
- .byte 0xD2, 0xF3, 0x60, 0x0A, 0xD6, 0xF3, 0x65, 0x0A, 0xDA, 0xF3, 0x6A, 0x0A, 0xDE, 0xF3, 0x6F, 0x0A,
- .byte 0xE2, 0xF3, 0x73, 0x0A, 0xE7, 0xF3, 0x78, 0x0A, 0xEB, 0xF3, 0x7D, 0x0A, 0xEF, 0xF3, 0x82, 0x0A,
- .byte 0xF3, 0xF3, 0x86, 0x0A, 0xF7, 0xF3, 0x8B, 0x0A, 0xFB, 0xF3, 0x90, 0x0A, 0xFF, 0xF3, 0x95, 0x0A,
- .byte 0x04, 0xF4, 0x99, 0x0A, 0x08, 0xF4, 0x9E, 0x0A, 0x0C, 0xF4, 0xA3, 0x0A, 0x10, 0xF4, 0xA7, 0x0A,
- .byte 0x14, 0xF4, 0xAC, 0x0A, 0x18, 0xF4, 0xB1, 0x0A, 0x1D, 0xF4, 0xB5, 0x0A, 0x21, 0xF4, 0xBA, 0x0A,
- .byte 0x25, 0xF4, 0xBF, 0x0A, 0x29, 0xF4, 0xC3, 0x0A, 0x2E, 0xF4, 0xC8, 0x0A, 0x32, 0xF4, 0xCD, 0x0A,
- .byte 0x36, 0xF4, 0xD1, 0x0A, 0x3A, 0xF4, 0xD6, 0x0A, 0x3F, 0xF4, 0xDB, 0x0A, 0x43, 0xF4, 0xDF, 0x0A,
- .byte 0x47, 0xF4, 0xE4, 0x0A, 0x4B, 0xF4, 0xE8, 0x0A, 0x50, 0xF4, 0xED, 0x0A, 0x54, 0xF4, 0xF2, 0x0A,
- .byte 0x58, 0xF4, 0xF6, 0x0A, 0x5D, 0xF4, 0xFB, 0x0A, 0x61, 0xF4, 0xFF, 0x0A, 0x65, 0xF4, 0x04, 0x0B,
- .byte 0x69, 0xF4, 0x08, 0x0B, 0x6E, 0xF4, 0x0D, 0x0B, 0x72, 0xF4, 0x11, 0x0B, 0x77, 0xF4, 0x16, 0x0B,
- .byte 0x7B, 0xF4, 0x1B, 0x0B, 0x7F, 0xF4, 0x1F, 0x0B, 0x84, 0xF4, 0x24, 0x0B, 0x88, 0xF4, 0x28, 0x0B,
- .byte 0x8C, 0xF4, 0x2D, 0x0B, 0x91, 0xF4, 0x31, 0x0B, 0x95, 0xF4, 0x36, 0x0B, 0x9A, 0xF4, 0x3A, 0x0B,
- .byte 0x9E, 0xF4, 0x3E, 0x0B, 0xA2, 0xF4, 0x43, 0x0B, 0xA7, 0xF4, 0x47, 0x0B, 0xAB, 0xF4, 0x4C, 0x0B,
- .byte 0xB0, 0xF4, 0x50, 0x0B, 0xB4, 0xF4, 0x55, 0x0B, 0xB9, 0xF4, 0x59, 0x0B, 0xBD, 0xF4, 0x5E, 0x0B,
- .byte 0xC2, 0xF4, 0x62, 0x0B, 0xC6, 0xF4, 0x66, 0x0B, 0xCA, 0xF4, 0x6B, 0x0B, 0xCF, 0xF4, 0x6F, 0x0B,
- .byte 0xD3, 0xF4, 0x74, 0x0B, 0xD8, 0xF4, 0x78, 0x0B, 0xDC, 0xF4, 0x7C, 0x0B, 0xE1, 0xF4, 0x81, 0x0B,
- .byte 0xE5, 0xF4, 0x85, 0x0B, 0xEA, 0xF4, 0x89, 0x0B, 0xEF, 0xF4, 0x8E, 0x0B, 0xF3, 0xF4, 0x92, 0x0B,
- .byte 0xF8, 0xF4, 0x97, 0x0B, 0xFC, 0xF4, 0x9B, 0x0B, 0x01, 0xF5, 0x9F, 0x0B, 0x05, 0xF5, 0xA3, 0x0B,
- .byte 0x0A, 0xF5, 0xA8, 0x0B, 0x0E, 0xF5, 0xAC, 0x0B, 0x13, 0xF5, 0xB0, 0x0B, 0x18, 0xF5, 0xB5, 0x0B,
- .byte 0x1C, 0xF5, 0xB9, 0x0B, 0x21, 0xF5, 0xBD, 0x0B, 0x25, 0xF5, 0xC1, 0x0B, 0x2A, 0xF5, 0xC6, 0x0B,
- .byte 0x2F, 0xF5, 0xCA, 0x0B, 0x33, 0xF5, 0xCE, 0x0B, 0x38, 0xF5, 0xD2, 0x0B, 0x3D, 0xF5, 0xD7, 0x0B,
- .byte 0x41, 0xF5, 0xDB, 0x0B, 0x46, 0xF5, 0xDF, 0x0B, 0x4B, 0xF5, 0xE3, 0x0B, 0x4F, 0xF5, 0xE8, 0x0B,
- .byte 0x54, 0xF5, 0xEC, 0x0B, 0x59, 0xF5, 0xF0, 0x0B, 0x5D, 0xF5, 0xF4, 0x0B, 0x62, 0xF5, 0xF8, 0x0B,
- .byte 0x67, 0xF5, 0xFC, 0x0B, 0x6B, 0xF5, 0x01, 0x0C, 0x70, 0xF5, 0x05, 0x0C, 0x75, 0xF5, 0x09, 0x0C,
- .byte 0x7A, 0xF5, 0x0D, 0x0C, 0x7E, 0xF5, 0x11, 0x0C, 0x83, 0xF5, 0x15, 0x0C, 0x88, 0xF5, 0x19, 0x0C,
- .byte 0x8D, 0xF5, 0x1E, 0x0C, 0x91, 0xF5, 0x22, 0x0C, 0x96, 0xF5, 0x26, 0x0C, 0x9B, 0xF5, 0x2A, 0x0C,
- .byte 0xA0, 0xF5, 0x2E, 0x0C, 0xA4, 0xF5, 0x32, 0x0C, 0xA9, 0xF5, 0x36, 0x0C, 0xAE, 0xF5, 0x3A, 0x0C,
- .byte 0xB3, 0xF5, 0x3E, 0x0C, 0xB8, 0xF5, 0x42, 0x0C, 0xBC, 0xF5, 0x46, 0x0C, 0xC1, 0xF5, 0x4A, 0x0C,
- .byte 0xC6, 0xF5, 0x4E, 0x0C, 0xCB, 0xF5, 0x52, 0x0C, 0xD0, 0xF5, 0x56, 0x0C, 0xD5, 0xF5, 0x5A, 0x0C,
- .byte 0xDA, 0xF5, 0x5E, 0x0C, 0xDE, 0xF5, 0x62, 0x0C, 0xE3, 0xF5, 0x66, 0x0C, 0xE8, 0xF5, 0x6A, 0x0C,
- .byte 0xED, 0xF5, 0x6E, 0x0C, 0xF2, 0xF5, 0x72, 0x0C, 0xF7, 0xF5, 0x76, 0x0C, 0xFC, 0xF5, 0x7A, 0x0C,
- .byte 0x01, 0xF6, 0x7E, 0x0C, 0x05, 0xF6, 0x82, 0x0C, 0x0A, 0xF6, 0x86, 0x0C, 0x0F, 0xF6, 0x8A, 0x0C,
- .byte 0x14, 0xF6, 0x8E, 0x0C, 0x19, 0xF6, 0x91, 0x0C, 0x1E, 0xF6, 0x95, 0x0C, 0x23, 0xF6, 0x99, 0x0C,
- .byte 0x28, 0xF6, 0x9D, 0x0C, 0x2D, 0xF6, 0xA1, 0x0C, 0x32, 0xF6, 0xA5, 0x0C, 0x37, 0xF6, 0xA9, 0x0C,
- .byte 0x3C, 0xF6, 0xAC, 0x0C, 0x41, 0xF6, 0xB0, 0x0C, 0x46, 0xF6, 0xB4, 0x0C, 0x4B, 0xF6, 0xB8, 0x0C,
- .byte 0x50, 0xF6, 0xBC, 0x0C, 0x55, 0xF6, 0xC0, 0x0C, 0x5A, 0xF6, 0xC3, 0x0C, 0x5F, 0xF6, 0xC7, 0x0C,
- .byte 0x64, 0xF6, 0xCB, 0x0C, 0x69, 0xF6, 0xCF, 0x0C, 0x6E, 0xF6, 0xD2, 0x0C, 0x73, 0xF6, 0xD6, 0x0C,
- .byte 0x78, 0xF6, 0xDA, 0x0C, 0x7D, 0xF6, 0xDE, 0x0C, 0x82, 0xF6, 0xE1, 0x0C, 0x87, 0xF6, 0xE5, 0x0C,
- .byte 0x8C, 0xF6, 0xE9, 0x0C, 0x91, 0xF6, 0xED, 0x0C, 0x96, 0xF6, 0xF0, 0x0C, 0x9B, 0xF6, 0xF4, 0x0C,
- .byte 0xA1, 0xF6, 0xF8, 0x0C, 0xA6, 0xF6, 0xFB, 0x0C, 0xAB, 0xF6, 0xFF, 0x0C, 0xB0, 0xF6, 0x03, 0x0D,
- .byte 0xB5, 0xF6, 0x06, 0x0D, 0xBA, 0xF6, 0x0A, 0x0D, 0xBF, 0xF6, 0x0E, 0x0D, 0xC4, 0xF6, 0x11, 0x0D,
- .byte 0xC9, 0xF6, 0x15, 0x0D, 0xCF, 0xF6, 0x18, 0x0D, 0xD4, 0xF6, 0x1C, 0x0D, 0xD9, 0xF6, 0x20, 0x0D,
- .byte 0xDE, 0xF6, 0x23, 0x0D, 0xE3, 0xF6, 0x27, 0x0D, 0xE8, 0xF6, 0x2A, 0x0D, 0xEE, 0xF6, 0x2E, 0x0D,
- .byte 0xF3, 0xF6, 0x32, 0x0D, 0xF8, 0xF6, 0x35, 0x0D, 0xFD, 0xF6, 0x39, 0x0D, 0x02, 0xF7, 0x3C, 0x0D,
- .byte 0x08, 0xF7, 0x40, 0x0D, 0x0D, 0xF7, 0x43, 0x0D, 0x12, 0xF7, 0x47, 0x0D, 0x17, 0xF7, 0x4A, 0x0D,
- .byte 0x1C, 0xF7, 0x4E, 0x0D, 0x22, 0xF7, 0x51, 0x0D, 0x27, 0xF7, 0x55, 0x0D, 0x2C, 0xF7, 0x58, 0x0D,
- .byte 0x31, 0xF7, 0x5C, 0x0D, 0x37, 0xF7, 0x5F, 0x0D, 0x3C, 0xF7, 0x62, 0x0D, 0x41, 0xF7, 0x66, 0x0D,
- .byte 0x46, 0xF7, 0x69, 0x0D, 0x4C, 0xF7, 0x6D, 0x0D, 0x51, 0xF7, 0x70, 0x0D, 0x56, 0xF7, 0x74, 0x0D,
- .byte 0x5B, 0xF7, 0x77, 0x0D, 0x61, 0xF7, 0x7A, 0x0D, 0x66, 0xF7, 0x7E, 0x0D, 0x6B, 0xF7, 0x81, 0x0D,
- .byte 0x71, 0xF7, 0x85, 0x0D, 0x76, 0xF7, 0x88, 0x0D, 0x7B, 0xF7, 0x8B, 0x0D, 0x81, 0xF7, 0x8F, 0x0D,
- .byte 0x86, 0xF7, 0x92, 0x0D, 0x8B, 0xF7, 0x95, 0x0D, 0x91, 0xF7, 0x99, 0x0D, 0x96, 0xF7, 0x9C, 0x0D,
- .byte 0x9B, 0xF7, 0x9F, 0x0D, 0xA1, 0xF7, 0xA2, 0x0D, 0xA6, 0xF7, 0xA6, 0x0D, 0xAB, 0xF7, 0xA9, 0x0D,
- .byte 0xB1, 0xF7, 0xAC, 0x0D, 0xB6, 0xF7, 0xB0, 0x0D, 0xBB, 0xF7, 0xB3, 0x0D, 0xC1, 0xF7, 0xB6, 0x0D,
- .byte 0xC6, 0xF7, 0xB9, 0x0D, 0xCC, 0xF7, 0xBC, 0x0D, 0xD1, 0xF7, 0xC0, 0x0D, 0xD6, 0xF7, 0xC3, 0x0D,
- .byte 0xDC, 0xF7, 0xC6, 0x0D, 0xE1, 0xF7, 0xC9, 0x0D, 0xE7, 0xF7, 0xCC, 0x0D, 0xEC, 0xF7, 0xD0, 0x0D,
- .byte 0xF2, 0xF7, 0xD3, 0x0D, 0xF7, 0xF7, 0xD6, 0x0D, 0xFC, 0xF7, 0xD9, 0x0D, 0x02, 0xF8, 0xDC, 0x0D,
- .byte 0x07, 0xF8, 0xDF, 0x0D, 0x0D, 0xF8, 0xE3, 0x0D, 0x12, 0xF8, 0xE6, 0x0D, 0x18, 0xF8, 0xE9, 0x0D,
- .byte 0x1D, 0xF8, 0xEC, 0x0D, 0x23, 0xF8, 0xEF, 0x0D, 0x28, 0xF8, 0xF2, 0x0D, 0x2E, 0xF8, 0xF5, 0x0D,
- .byte 0x33, 0xF8, 0xF8, 0x0D, 0x38, 0xF8, 0xFB, 0x0D, 0x3E, 0xF8, 0xFE, 0x0D, 0x43, 0xF8, 0x01, 0x0E,
- .byte 0x49, 0xF8, 0x04, 0x0E, 0x4E, 0xF8, 0x07, 0x0E, 0x54, 0xF8, 0x0A, 0x0E, 0x5A, 0xF8, 0x0D, 0x0E,
- .byte 0x5F, 0xF8, 0x10, 0x0E, 0x65, 0xF8, 0x13, 0x0E, 0x6A, 0xF8, 0x16, 0x0E, 0x70, 0xF8, 0x19, 0x0E,
- .byte 0x75, 0xF8, 0x1C, 0x0E, 0x7B, 0xF8, 0x1F, 0x0E, 0x80, 0xF8, 0x22, 0x0E, 0x86, 0xF8, 0x25, 0x0E,
- .byte 0x8B, 0xF8, 0x28, 0x0E, 0x91, 0xF8, 0x2B, 0x0E, 0x96, 0xF8, 0x2E, 0x0E, 0x9C, 0xF8, 0x31, 0x0E,
- .byte 0xA2, 0xF8, 0x34, 0x0E, 0xA7, 0xF8, 0x37, 0x0E, 0xAD, 0xF8, 0x3A, 0x0E, 0xB2, 0xF8, 0x3C, 0x0E,
- .byte 0xB8, 0xF8, 0x3F, 0x0E, 0xBE, 0xF8, 0x42, 0x0E, 0xC3, 0xF8, 0x45, 0x0E, 0xC9, 0xF8, 0x48, 0x0E,
- .byte 0xCE, 0xF8, 0x4B, 0x0E, 0xD4, 0xF8, 0x4D, 0x0E, 0xDA, 0xF8, 0x50, 0x0E, 0xDF, 0xF8, 0x53, 0x0E,
- .byte 0xE5, 0xF8, 0x56, 0x0E, 0xEB, 0xF8, 0x59, 0x0E, 0xF0, 0xF8, 0x5B, 0x0E, 0xF6, 0xF8, 0x5E, 0x0E,
- .byte 0xFB, 0xF8, 0x61, 0x0E, 0x01, 0xF9, 0x64, 0x0E, 0x07, 0xF9, 0x66, 0x0E, 0x0C, 0xF9, 0x69, 0x0E,
- .byte 0x12, 0xF9, 0x6C, 0x0E, 0x18, 0xF9, 0x6F, 0x0E, 0x1D, 0xF9, 0x71, 0x0E, 0x23, 0xF9, 0x74, 0x0E,
- .byte 0x29, 0xF9, 0x77, 0x0E, 0x2E, 0xF9, 0x79, 0x0E, 0x34, 0xF9, 0x7C, 0x0E, 0x3A, 0xF9, 0x7F, 0x0E,
- .byte 0x3F, 0xF9, 0x81, 0x0E, 0x45, 0xF9, 0x84, 0x0E, 0x4B, 0xF9, 0x87, 0x0E, 0x51, 0xF9, 0x89, 0x0E,
- .byte 0x56, 0xF9, 0x8C, 0x0E, 0x5C, 0xF9, 0x8F, 0x0E, 0x62, 0xF9, 0x91, 0x0E, 0x67, 0xF9, 0x94, 0x0E,
- .byte 0x6D, 0xF9, 0x96, 0x0E, 0x73, 0xF9, 0x99, 0x0E, 0x79, 0xF9, 0x9B, 0x0E, 0x7E, 0xF9, 0x9E, 0x0E,
- .byte 0x84, 0xF9, 0xA1, 0x0E, 0x8A, 0xF9, 0xA3, 0x0E, 0x90, 0xF9, 0xA6, 0x0E, 0x95, 0xF9, 0xA8, 0x0E,
- .byte 0x9B, 0xF9, 0xAB, 0x0E, 0xA1, 0xF9, 0xAD, 0x0E, 0xA7, 0xF9, 0xB0, 0x0E, 0xAC, 0xF9, 0xB2, 0x0E,
- .byte 0xB2, 0xF9, 0xB5, 0x0E, 0xB8, 0xF9, 0xB7, 0x0E, 0xBE, 0xF9, 0xBA, 0x0E, 0xC4, 0xF9, 0xBC, 0x0E,
- .byte 0xC9, 0xF9, 0xBF, 0x0E, 0xCF, 0xF9, 0xC1, 0x0E, 0xD5, 0xF9, 0xC3, 0x0E, 0xDB, 0xF9, 0xC6, 0x0E,
- .byte 0xE1, 0xF9, 0xC8, 0x0E, 0xE6, 0xF9, 0xCB, 0x0E, 0xEC, 0xF9, 0xCD, 0x0E, 0xF2, 0xF9, 0xCF, 0x0E,
- .byte 0xF8, 0xF9, 0xD2, 0x0E, 0xFE, 0xF9, 0xD4, 0x0E, 0x03, 0xFA, 0xD6, 0x0E, 0x09, 0xFA, 0xD9, 0x0E,
- .byte 0x0F, 0xFA, 0xDB, 0x0E, 0x15, 0xFA, 0xDD, 0x0E, 0x1B, 0xFA, 0xE0, 0x0E, 0x21, 0xFA, 0xE2, 0x0E,
- .byte 0x26, 0xFA, 0xE4, 0x0E, 0x2C, 0xFA, 0xE7, 0x0E, 0x32, 0xFA, 0xE9, 0x0E, 0x38, 0xFA, 0xEB, 0x0E,
- .byte 0x3E, 0xFA, 0xEE, 0x0E, 0x44, 0xFA, 0xF0, 0x0E, 0x4A, 0xFA, 0xF2, 0x0E, 0x4F, 0xFA, 0xF4, 0x0E,
- .byte 0x55, 0xFA, 0xF7, 0x0E, 0x5B, 0xFA, 0xF9, 0x0E, 0x61, 0xFA, 0xFB, 0x0E, 0x67, 0xFA, 0xFD, 0x0E,
- .byte 0x6D, 0xFA, 0xFF, 0x0E, 0x73, 0xFA, 0x02, 0x0F, 0x79, 0xFA, 0x04, 0x0F, 0x7F, 0xFA, 0x06, 0x0F,
- .byte 0x84, 0xFA, 0x08, 0x0F, 0x8A, 0xFA, 0x0A, 0x0F, 0x90, 0xFA, 0x0C, 0x0F, 0x96, 0xFA, 0x0E, 0x0F,
- .byte 0x9C, 0xFA, 0x11, 0x0F, 0xA2, 0xFA, 0x13, 0x0F, 0xA8, 0xFA, 0x15, 0x0F, 0xAE, 0xFA, 0x17, 0x0F,
- .byte 0xB4, 0xFA, 0x19, 0x0F, 0xBA, 0xFA, 0x1B, 0x0F, 0xC0, 0xFA, 0x1D, 0x0F, 0xC6, 0xFA, 0x1F, 0x0F,
- .byte 0xCC, 0xFA, 0x21, 0x0F, 0xD1, 0xFA, 0x23, 0x0F, 0xD7, 0xFA, 0x25, 0x0F, 0xDD, 0xFA, 0x27, 0x0F,
- .byte 0xE3, 0xFA, 0x29, 0x0F, 0xE9, 0xFA, 0x2B, 0x0F, 0xEF, 0xFA, 0x2D, 0x0F, 0xF5, 0xFA, 0x2F, 0x0F,
- .byte 0xFB, 0xFA, 0x31, 0x0F, 0x01, 0xFB, 0x33, 0x0F, 0x07, 0xFB, 0x35, 0x0F, 0x0D, 0xFB, 0x37, 0x0F,
- .byte 0x13, 0xFB, 0x39, 0x0F, 0x19, 0xFB, 0x3B, 0x0F, 0x1F, 0xFB, 0x3D, 0x0F, 0x25, 0xFB, 0x3F, 0x0F,
- .byte 0x2B, 0xFB, 0x41, 0x0F, 0x31, 0xFB, 0x43, 0x0F, 0x37, 0xFB, 0x45, 0x0F, 0x3D, 0xFB, 0x46, 0x0F,
- .byte 0x43, 0xFB, 0x48, 0x0F, 0x49, 0xFB, 0x4A, 0x0F, 0x4F, 0xFB, 0x4C, 0x0F, 0x55, 0xFB, 0x4E, 0x0F,
- .byte 0x5B, 0xFB, 0x50, 0x0F, 0x61, 0xFB, 0x51, 0x0F, 0x67, 0xFB, 0x53, 0x0F, 0x6D, 0xFB, 0x55, 0x0F,
- .byte 0x73, 0xFB, 0x57, 0x0F, 0x79, 0xFB, 0x59, 0x0F, 0x7F, 0xFB, 0x5A, 0x0F, 0x85, 0xFB, 0x5C, 0x0F,
- .byte 0x8B, 0xFB, 0x5E, 0x0F, 0x91, 0xFB, 0x60, 0x0F, 0x97, 0xFB, 0x61, 0x0F, 0x9D, 0xFB, 0x63, 0x0F,
- .byte 0xA3, 0xFB, 0x65, 0x0F, 0xA9, 0xFB, 0x67, 0x0F, 0xAF, 0xFB, 0x68, 0x0F, 0xB5, 0xFB, 0x6A, 0x0F,
- .byte 0xBC, 0xFB, 0x6C, 0x0F, 0xC2, 0xFB, 0x6D, 0x0F, 0xC8, 0xFB, 0x6F, 0x0F, 0xCE, 0xFB, 0x71, 0x0F,
- .byte 0xD4, 0xFB, 0x72, 0x0F, 0xDA, 0xFB, 0x74, 0x0F, 0xE0, 0xFB, 0x76, 0x0F, 0xE6, 0xFB, 0x77, 0x0F,
- .byte 0xEC, 0xFB, 0x79, 0x0F, 0xF2, 0xFB, 0x7A, 0x0F, 0xF8, 0xFB, 0x7C, 0x0F, 0xFE, 0xFB, 0x7D, 0x0F,
- .byte 0x04, 0xFC, 0x7F, 0x0F, 0x0A, 0xFC, 0x81, 0x0F, 0x11, 0xFC, 0x82, 0x0F, 0x17, 0xFC, 0x84, 0x0F,
- .byte 0x1D, 0xFC, 0x85, 0x0F, 0x23, 0xFC, 0x87, 0x0F, 0x29, 0xFC, 0x88, 0x0F, 0x2F, 0xFC, 0x8A, 0x0F,
- .byte 0x35, 0xFC, 0x8B, 0x0F, 0x3B, 0xFC, 0x8D, 0x0F, 0x41, 0xFC, 0x8E, 0x0F, 0x47, 0xFC, 0x90, 0x0F,
- .byte 0x4E, 0xFC, 0x91, 0x0F, 0x54, 0xFC, 0x93, 0x0F, 0x5A, 0xFC, 0x94, 0x0F, 0x60, 0xFC, 0x95, 0x0F,
- .byte 0x66, 0xFC, 0x97, 0x0F, 0x6C, 0xFC, 0x98, 0x0F, 0x72, 0xFC, 0x9A, 0x0F, 0x78, 0xFC, 0x9B, 0x0F,
- .byte 0x7F, 0xFC, 0x9C, 0x0F, 0x85, 0xFC, 0x9E, 0x0F, 0x8B, 0xFC, 0x9F, 0x0F, 0x91, 0xFC, 0xA1, 0x0F,
- .byte 0x97, 0xFC, 0xA2, 0x0F, 0x9D, 0xFC, 0xA3, 0x0F, 0xA3, 0xFC, 0xA5, 0x0F, 0xAA, 0xFC, 0xA6, 0x0F,
- .byte 0xB0, 0xFC, 0xA7, 0x0F, 0xB6, 0xFC, 0xA8, 0x0F, 0xBC, 0xFC, 0xAA, 0x0F, 0xC2, 0xFC, 0xAB, 0x0F,
- .byte 0xC8, 0xFC, 0xAC, 0x0F, 0xCE, 0xFC, 0xAE, 0x0F, 0xD5, 0xFC, 0xAF, 0x0F, 0xDB, 0xFC, 0xB0, 0x0F,
- .byte 0xE1, 0xFC, 0xB1, 0x0F, 0xE7, 0xFC, 0xB3, 0x0F, 0xED, 0xFC, 0xB4, 0x0F, 0xF3, 0xFC, 0xB5, 0x0F,
- .byte 0xFA, 0xFC, 0xB6, 0x0F, 0x00, 0xFD, 0xB7, 0x0F, 0x06, 0xFD, 0xB8, 0x0F, 0x0C, 0xFD, 0xBA, 0x0F,
- .byte 0x12, 0xFD, 0xBB, 0x0F, 0x18, 0xFD, 0xBC, 0x0F, 0x1F, 0xFD, 0xBD, 0x0F, 0x25, 0xFD, 0xBE, 0x0F,
- .byte 0x2B, 0xFD, 0xBF, 0x0F, 0x31, 0xFD, 0xC0, 0x0F, 0x37, 0xFD, 0xC2, 0x0F, 0x3E, 0xFD, 0xC3, 0x0F,
- .byte 0x44, 0xFD, 0xC4, 0x0F, 0x4A, 0xFD, 0xC5, 0x0F, 0x50, 0xFD, 0xC6, 0x0F, 0x56, 0xFD, 0xC7, 0x0F,
- .byte 0x5D, 0xFD, 0xC8, 0x0F, 0x63, 0xFD, 0xC9, 0x0F, 0x69, 0xFD, 0xCA, 0x0F, 0x6F, 0xFD, 0xCB, 0x0F,
- .byte 0x75, 0xFD, 0xCC, 0x0F, 0x7C, 0xFD, 0xCD, 0x0F, 0x82, 0xFD, 0xCE, 0x0F, 0x88, 0xFD, 0xCF, 0x0F,
- .byte 0x8E, 0xFD, 0xD0, 0x0F, 0x94, 0xFD, 0xD1, 0x0F, 0x9B, 0xFD, 0xD2, 0x0F, 0xA1, 0xFD, 0xD3, 0x0F,
- .byte 0xA7, 0xFD, 0xD4, 0x0F, 0xAD, 0xFD, 0xD5, 0x0F, 0xB3, 0xFD, 0xD5, 0x0F, 0xBA, 0xFD, 0xD6, 0x0F,
- .byte 0xC0, 0xFD, 0xD7, 0x0F, 0xC6, 0xFD, 0xD8, 0x0F, 0xCC, 0xFD, 0xD9, 0x0F, 0xD3, 0xFD, 0xDA, 0x0F,
- .byte 0xD9, 0xFD, 0xDB, 0x0F, 0xDF, 0xFD, 0xDC, 0x0F, 0xE5, 0xFD, 0xDC, 0x0F, 0xEB, 0xFD, 0xDD, 0x0F,
- .byte 0xF2, 0xFD, 0xDE, 0x0F, 0xF8, 0xFD, 0xDF, 0x0F, 0xFE, 0xFD, 0xE0, 0x0F, 0x04, 0xFE, 0xE0, 0x0F,
- .byte 0x0B, 0xFE, 0xE1, 0x0F, 0x11, 0xFE, 0xE2, 0x0F, 0x17, 0xFE, 0xE3, 0x0F, 0x1D, 0xFE, 0xE3, 0x0F,
- .byte 0x24, 0xFE, 0xE4, 0x0F, 0x2A, 0xFE, 0xE5, 0x0F, 0x30, 0xFE, 0xE6, 0x0F, 0x36, 0xFE, 0xE6, 0x0F,
- .byte 0x3D, 0xFE, 0xE7, 0x0F, 0x43, 0xFE, 0xE8, 0x0F, 0x49, 0xFE, 0xE8, 0x0F, 0x4F, 0xFE, 0xE9, 0x0F,
- .byte 0x56, 0xFE, 0xEA, 0x0F, 0x5C, 0xFE, 0xEA, 0x0F, 0x62, 0xFE, 0xEB, 0x0F, 0x68, 0xFE, 0xEC, 0x0F,
- .byte 0x6F, 0xFE, 0xEC, 0x0F, 0x75, 0xFE, 0xED, 0x0F, 0x7B, 0xFE, 0xED, 0x0F, 0x81, 0xFE, 0xEE, 0x0F,
- .byte 0x88, 0xFE, 0xEF, 0x0F, 0x8E, 0xFE, 0xEF, 0x0F, 0x94, 0xFE, 0xF0, 0x0F, 0x9A, 0xFE, 0xF0, 0x0F,
- .byte 0xA1, 0xFE, 0xF1, 0x0F, 0xA7, 0xFE, 0xF1, 0x0F, 0xAD, 0xFE, 0xF2, 0x0F, 0xB3, 0xFE, 0xF2, 0x0F,
- .byte 0xBA, 0xFE, 0xF3, 0x0F, 0xC0, 0xFE, 0xF3, 0x0F, 0xC6, 0xFE, 0xF4, 0x0F, 0xCC, 0xFE, 0xF4, 0x0F,
- .byte 0xD3, 0xFE, 0xF5, 0x0F, 0xD9, 0xFE, 0xF5, 0x0F, 0xDF, 0xFE, 0xF6, 0x0F, 0xE5, 0xFE, 0xF6, 0x0F,
- .byte 0xEC, 0xFE, 0xF7, 0x0F, 0xF2, 0xFE, 0xF7, 0x0F, 0xF8, 0xFE, 0xF8, 0x0F, 0xFF, 0xFE, 0xF8, 0x0F,
- .byte 0x05, 0xFF, 0xF8, 0x0F, 0x0B, 0xFF, 0xF9, 0x0F, 0x11, 0xFF, 0xF9, 0x0F, 0x18, 0xFF, 0xF9, 0x0F,
- .byte 0x1E, 0xFF, 0xFA, 0x0F, 0x24, 0xFF, 0xFA, 0x0F, 0x2A, 0xFF, 0xFA, 0x0F, 0x31, 0xFF, 0xFB, 0x0F,
- .byte 0x37, 0xFF, 0xFB, 0x0F, 0x3D, 0xFF, 0xFB, 0x0F, 0x44, 0xFF, 0xFC, 0x0F, 0x4A, 0xFF, 0xFC, 0x0F,
- .byte 0x50, 0xFF, 0xFC, 0x0F, 0x56, 0xFF, 0xFC, 0x0F, 0x5D, 0xFF, 0xFD, 0x0F, 0x63, 0xFF, 0xFD, 0x0F,
- .byte 0x69, 0xFF, 0xFD, 0x0F, 0x70, 0xFF, 0xFD, 0x0F, 0x76, 0xFF, 0xFE, 0x0F, 0x7C, 0xFF, 0xFE, 0x0F,
- .byte 0x82, 0xFF, 0xFE, 0x0F, 0x89, 0xFF, 0xFE, 0x0F, 0x8F, 0xFF, 0xFE, 0x0F, 0x95, 0xFF, 0xFF, 0x0F,
- .byte 0x9B, 0xFF, 0xFF, 0x0F, 0xA2, 0xFF, 0xFF, 0x0F, 0xA8, 0xFF, 0xFF, 0x0F, 0xAE, 0xFF, 0xFF, 0x0F,
- .byte 0xB5, 0xFF, 0xFF, 0x0F, 0xBB, 0xFF, 0xFF, 0x0F, 0xC1, 0xFF, 0x00, 0x10, 0xC7, 0xFF, 0x00, 0x10,
- .byte 0xCE, 0xFF, 0x00, 0x10, 0xD4, 0xFF, 0x00, 0x10, 0xDA, 0xFF, 0x00, 0x10, 0xE1, 0xFF, 0x00, 0x10,
- .byte 0xE7, 0xFF, 0x00, 0x10, 0xED, 0xFF, 0x00, 0x10, 0xF3, 0xFF, 0x00, 0x10, 0xFA, 0xFF, 0x00, 0x10
-
- .section .data
-
- .global UNK_021064B8
-UNK_021064B8: ; 0x021064B8
- .word FUN_020AE8B4
-
- .global UNK_021064BC
-UNK_021064BC: ; 0x021064BC
- .word FUN_020AE8AC
-
- .global UNK_021064C0
-UNK_021064C0: ; 0x021064C0
- .word FUN_020AE8C4
-
- .global UNK_021064C4
-UNK_021064C4: ; 0x021064C4
- .word FUN_020AE8BC
-
- .global UNK_021064C8
-UNK_021064C8: ; 0x021064C8
- .word UNK_021064E4
- .word UNK_0210652C
-
- .global UNK_021064D0
-UNK_021064D0: ; 0x021064D0
- .word UNK_02106544
- .word UNK_0210652C
- .word UNK_021064E4
- .word UNK_02106514
- .word UNK_021064FC
-
- .global UNK_021064E4
-UNK_021064E4: ; 0x021064E4
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_021064FC
-UNK_021064FC: ; 0x021064FC
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x02, 0x00
-
- .global UNK_02106514
-UNK_02106514: ; 0x02106514
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
- .byte 0x02, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0x00
-
- .global UNK_0210652C
-UNK_0210652C: ; 0x0210652C
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00
-
- .global UNK_02106544
-UNK_02106544: ; 0x02106544
- .byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x04, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x06, 0x00
-
- .global UNK_0210655C
-UNK_0210655C: ; 0x0210655C
- .word FUN_020B1088
- .word FUN_020B1098
- .word 0
- .word 0
- .word 0
-
- .global UNK_02106570
-UNK_02106570: ; 0x02106570
- .short -2
-
- .balign 4, 0
- .global UNK_02106574
-UNK_02106574: ; 0x02106574
- .word -1
-
- .global UNK_02106578
-UNK_02106578: ; 0x02106578
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106590
-UNK_02106590: ; 0x02106590
- .byte 0x00, 0xF0, 0xFF, 0xFF
-
- .global UNK_02106594
-UNK_02106594: ; 0x02106594
- .byte 0x05, 0x00, 0x00, 0x00
-
- .global UNK_02106598
-UNK_02106598: ; 0x02106598
- .word FUN_020BE5A0
-
- .global UNK_0210659C
-UNK_0210659C: ; 0x0210659C
- .word FUN_020BDA70
-
- .global UNK_021065A0
-UNK_021065A0: ; 0x021065A0
- .word FUN_020BDF38
-
- .global UNK_021065A4
-UNK_021065A4: ; 0x021065A4
- .word FUN_020BE334
-
- .global UNK_021065A8
-UNK_021065A8: ; 0x021065A8
- .word FUN_020BDB40
-
- .global UNK_021065AC
-UNK_021065AC: ; 0x021065AC
- .word FUN_020B8640
-
- .global UNK_021065B0
-UNK_021065B0: ; 0x021065B0
- .word FUN_020B86B0
-
- .global UNK_021065B4
-UNK_021065B4: ; 0x021065B4
- .word FUN_020B8A08
-
- .global UNK_021065B8
-UNK_021065B8: ; 0x021065B8
- .byte 0x4D, 0x00, 0x41, 0x4D
-
- .global UNK_021065BC
-UNK_021065BC: ; 0x021065BC
- .word FUN_020BDC0C
- .byte 0x4D, 0x00, 0x50, 0x54
- .word FUN_020BE4F0
- .byte 0x4D, 0x00, 0x41, 0x54
- .word FUN_020BDF84
- .byte 0x56, 0x00, 0x41, 0x56
- .word FUN_020BE5E0
- .byte 0x4A, 0x00, 0x41, 0x43
- .word FUN_020BDAB4
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106608
-UNK_02106608: ; 0x02106608
- .word FUN_020BE668
- .word FUN_020BEE3C
- .word FUN_020BF2FC
-
- .global UNK_02106614
-UNK_02106614: ; 0x02106614
- .word FUN_020BE62C
- .word FUN_020BECEC
- .word FUN_020BF0D4
-
- .global UNK_02106620
-UNK_02106620: ; 0x02106620
- .word FUN_020BE6E4
- .word FUN_020BEF10
- .word FUN_020BF42C
- .word FUN_020BFA9C
-
- .global UNK_02106630
-UNK_02106630: ; 0x02106630
- .byte 0x2A, 0x00, 0x00, 0x00
-
- .global UNK_02106634
-UNK_02106634: ; 0x02106634
- .byte 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106638
-UNK_02106638: ; 0x02106638
- .byte 0x2A, 0x00, 0x00, 0x00
-
- .global UNK_0210663C
-UNK_0210663C: ; 0x0210663C
- .byte 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106640
-UNK_02106640: ; 0x02106640
- .word FUN_020BA58C
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106650
-UNK_02106650: ; 0x02106650
- .word FUN_020BA438
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106660
-UNK_02106660: ; 0x02106660
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00
-
- .global UNK_021066A0
-UNK_021066A0: ; 0x021066A0
- .byte 0x12, 0x10, 0x17, 0x1B
-
- .global UNK_021066A4
-UNK_021066A4: ; 0x021066A4
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
-
- .global UNK_021066AC
-UNK_021066AC: ; 0x021066AC
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x10, 0x00, 0x00
-
- .global UNK_021066D0
-UNK_021066D0: ; 0x021066D0
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_021066DC
-UNK_021066DC: ; 0x021066DC
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_021066E8
-UNK_021066E8: ; 0x021066E8
- .byte 0x12, 0x10, 0x17, 0x1B
-
- .global UNK_021066EC
-UNK_021066EC: ; 0x021066EC
- .byte 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00
-
- .global UNK_021066F4
-UNK_021066F4: ; 0x021066F4
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x10, 0x00, 0x00
-
- .global UNK_02106718
-UNK_02106718: ; 0x02106718
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106724
-UNK_02106724: ; 0x02106724
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_02106730
-UNK_02106730: ; 0x02106730
- .word FUN_020BAC70
- .word FUN_020BAC48
- .word FUN_020BAAC0
- .word FUN_020BA9EC
- .word FUN_020BA50C
- .word FUN_020BA3C4
- .word FUN_020B9F84
- .word FUN_020B9C54
- .word FUN_020B98C4
- .word FUN_020B9258
- .word FUN_020B9178
- .word FUN_020B9110
- .word FUN_020B8DF0
- .word FUN_020B8A60
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
- .global UNK_021067B0
-UNK_021067B0: ; 0x021067B0
- .word FUN_020BEBD8
- .word FUN_020BEB00
- .word FUN_020BEA84
- .word FUN_020BEA3C
- .word FUN_020BE954
- .word FUN_020BE894
- .word FUN_020BE850
- .word FUN_020BE82C
-
- .global UNK_021067D0
-UNK_021067D0: ; 0x021067D0
- .word FUN_020BF988
- .word FUN_020BF894
- .word FUN_020BF810
- .word FUN_020BF7C8
- .word FUN_020BF6C8
- .word FUN_020BF5E8
- .word FUN_020BF598
- .word FUN_020BF574
-
- .global UNK_021067F0
-UNK_021067F0: ; 0x021067F0
- .word FUN_020BFFD4
- .word FUN_020BFEEC
- .word FUN_020BFE68
- .word FUN_020BFE0C
- .word FUN_020BFD38
- .word FUN_020BFC8C
- .word FUN_020BFC4C
- .word FUN_020BFC28
-
- .section .bss
-
- .global UNK_021CCD38
-UNK_021CCD38: ; 0x021CCD38
- .space 0x4
-
- .global UNK_021CCD3C
-UNK_021CCD3C: ; 0x021CCD3C
- .space 0xc
-
- .global UNK_021CCD48
-UNK_021CCD48: ; 0x021CCD48
- .space 0x4
-
- .global UNK_021CCD4C
-UNK_021CCD4C: ; 0x021CCD4C
- .space 0xc
-
- .global UNK_021CCD58
-UNK_021CCD58: ; 0x021CCD58
- .space 0x14
-
- .global UNK_021CCD6C
-UNK_021CCD6C: ; 0x021CCD6C
- .space 0x4
-
- .global UNK_021CCD70
-UNK_021CCD70: ; 0x021CCD70
- .space 0x4
-
- .global UNK_021CCD74
-UNK_021CCD74: ; 0x021CCD74
- .space 0x14
-
- .global UNK_021CCD88
-UNK_021CCD88: ; 0x021CCD88
- .space 0x4
-
- .global UNK_021CCD8C
-UNK_021CCD8C: ; 0x021CCD8C
- .space 0x10
-
- .global UNK_021CCD9C
-UNK_021CCD9C: ; 0x021CCD9C
- .space 0x4
-
- .global UNK_021CCDA0
-UNK_021CCDA0: ; 0x021CCDA0
- .space 0x100
-
- .global UNK_021CCEA0
-UNK_021CCEA0: ; 0x021CCEA0
- .space 0x400
-
- .global UNK_021CD2A0
-UNK_021CD2A0: ; 0x021CD2A0
- .space 0x40
-
- .global UNK_021CD2E0
-UNK_021CD2E0: ; 0x021CD2E0
- .space 0x100
-
- .global UNK_021CD3E0
-UNK_021CD3E0: ; 0x021CD3E0
- .space 0x400
-
- .global UNK_021CD7E0
-UNK_021CD7E0: ; 0x021CD7E0
- .space 0x40
-
- .global UNK_021CD820
-UNK_021CD820: ; 0x021CD820
- .space 0x100
-
- .global UNK_021CD920
-UNK_021CD920: ; 0x021CD920
- .space 0x400
-
- .global UNK_021CDD20
-UNK_021CDD20: ; 0x021CDD20
- .space 0x40
-
- .global UNK_021CDD60
-UNK_021CDD60: ; 0x021CDD60
- .space 0x4
-
- .global UNK_021CDD64
-UNK_021CDD64: ; 0x021CDD64
- .space 0x4
-
- .global UNK_021CDD68
-UNK_021CDD68: ; 0x021CDD68
- .space 0x4
-
- .global UNK_021CDD6C
-UNK_021CDD6C: ; 0x021CDD6C
- .space 0x4
-
- .global UNK_021CDD70
-UNK_021CDD70: ; 0x021CDD70
- .space 0x4
-
- .global UNK_021CDD74
-UNK_021CDD74: ; 0x021CDD74
- .space 0x80
-
- .global UNK_021CDDF4
-UNK_021CDDF4: ; 0x021CDDF4
- .space 0x4
-
- .global UNK_021CDDF8
-UNK_021CDDF8: ; 0x021CDDF8
- .space 0xfc
-
- .global UNK_021CDEF4
-UNK_021CDEF4: ; 0x021CDEF4
- .space 0x10
-
- .global UNK_021CDF04
-UNK_021CDF04: ; 0x021CDF04
- .space 0x4
-
- .global UNK_021CDF08
-UNK_021CDF08: ; 0x021CDF08
- .space 0x2ec
-
- .global UNK_021CE1F4
-UNK_021CE1F4: ; 0x021CE1F4
- .space 0x300
-
- .global UNK_021CE4F4
-UNK_021CE4F4: ; 0x021CE4F4
- .space 0x400
-
- .global UNK_021CE8F4
-UNK_021CE8F4: ; 0x021CE8F4
- .space 0x4
-
- .global UNK_021CE8F8
-UNK_021CE8F8: ; 0x021CE8F8
- .space 0x404
-
- .global UNK_021CECFC
-UNK_021CECFC: ; 0x021CECFC
- .space 0x4
-
- .global UNK_021CED00
-UNK_021CED00: ; 0x021CED00
- .space 0x4
-
- .global UNK_021CED04
-UNK_021CED04: ; 0x021CED04
- .space 0x4
-
- .global UNK_021CED08
-UNK_021CED08: ; 0x021CED08
- .space 0x4
-
- .global UNK_021CED0C
-UNK_021CED0C: ; 0x021CED0C
- .space 0x4
-
- .global UNK_021CED10
-UNK_021CED10: ; 0x021CED10
- .space 0x4
-
- .global UNK_021CED14
-UNK_021CED14: ; 0x021CED14
- .space 0x4
-
- .global UNK_021CED18
-UNK_021CED18: ; 0x021CED18
- .space 0x8
-
- .global UNK_021CED20
-UNK_021CED20: ; 0x021CED20
- .space 0x44
-
- .global UNK_021CED64
-UNK_021CED64: ; 0x021CED64
- .space 0x34
-
- .global UNK_021CED98
-UNK_021CED98: ; 0x021CED98
- .space 0x28
-
- .global UNK_021CEDC0
-UNK_021CEDC0: ; 0x021CEDC0
- .space 0x14
-
- .global UNK_021CEDD4
-UNK_021CEDD4: ; 0x021CEDD4
- .space 0x24
-
- .global UNK_021CEDF8
-UNK_021CEDF8: ; 0x021CEDF8
- .space 0xc
-
- .global UNK_021CEE04
-UNK_021CEE04: ; 0x021CEE04
- .space 0x14
-
- .global UNK_021CEE18
-UNK_021CEE18: ; 0x021CEE18
- .space 0x30
-
- .global UNK_021CEE48
-UNK_021CEE48: ; 0x021CEE48
- .space 0x30
-
- .global UNK_021CEE78
-UNK_021CEE78: ; 0x021CEE78
- .space 0xe0
-
- .global UNK_021CEF58
-UNK_021CEF58: ; 0x021CEF58
- .space 0xc
-
- .global UNK_021CEF64
-UNK_021CEF64: ; 0x021CEF64
- .space 0xc
-
- .global UNK_021CEF70
-UNK_021CEF70: ; 0x021CEF70
- .space 0xc
-
- .global UNK_021CEF7C
-UNK_021CEF7C: ; 0x021CEF7C
- .space 0x4
-
- .global UNK_021CEF80
-UNK_021CEF80: ; 0x021CEF80
- .space 0xe00
-
- .global UNK_021CFD80
-UNK_021CFD80: ; 0x021CFD80
- .space 0x4
-
- .global UNK_021CFD84
-UNK_021CFD84: ; 0x021CFD84
- .space 0x4
-
- .global UNK_021CFD88
-UNK_021CFD88: ; 0x021CFD88
- .space 0x4
-
- .global UNK_021CFD8C
-UNK_021CFD8C: ; 0x021CFD8C
- .space 0x4
-
- .global UNK_021CFD90
-UNK_021CFD90: ; 0x021CFD90
- .space 0x4
-
- .global UNK_021CFD94
-UNK_021CFD94: ; 0x021CFD94
- .space 0x2ba
-
- .global UNK_021D004E
-UNK_021D004E: ; 0x021D004E
- .space 0x332
-
- .global UNK_021D0380
-UNK_021D0380: ; 0x021D0380
- .space 0x40
-
- .global UNK_021D03C0
-UNK_021D03C0: ; 0x021D03C0
- .space 0xb42
-
- .global UNK_021D0F02
-UNK_021D0F02: ; 0x021D0F02
- .space 0xd7e
-
- .global UNK_021D1C80
-UNK_021D1C80: ; 0x021D1C80
- .space 0x4
-
- .global UNK_021D1C84
-UNK_021D1C84: ; 0x021D1C84
- .space 0x4
-
- .global UNK_021D1C88
-UNK_021D1C88: ; 0x021D1C88
- .space 0x4
-
- .text
-
- arm_func_start FUN_020ADA84
-FUN_020ADA84: ; 0x020ADA84
- cmp r1, #0x0
- ldreq r0, [r0, #0x4]
- ldrneh r0, [r0, #0xa]
- ldrne r0, [r1, r0]
- bx lr
-
- arm_func_start FUN_020ADA98
-FUN_020ADA98: ; 0x020ADA98
- cmp r1, #0x0
- ldreq r0, [r0, #0x0]
- ldrneh r0, [r0, #0xa]
- addne r0, r1, r0
- ldrne r0, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_020ADAB0
-FUN_020ADAB0: ; 0x020ADAB0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldrh r12, [r0, #0xa]
- ldr r3, [r1, r12]
- add lr, r1, r12
- cmp r3, #0x0
- ldreq r1, [lr, #0x4]
- streq r1, [r0, #0x0]
- ldrne r2, [lr, #0x4]
- addne r1, r3, r12
- strne r2, [r1, #0x4]
- ldr r3, [lr, #0x4]
- cmp r3, #0x0
- ldreq r1, [lr, #0x0]
- streq r1, [r0, #0x4]
- ldrneh r1, [r0, #0xa]
- ldrne r2, [lr, #0x0]
- strne r2, [r3, r1]
- mov r1, #0x0
- str r1, [lr, #0x0]
- str r1, [lr, #0x4]
- ldrh r1, [r0, #0x8]
- sub r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020ADB18
-FUN_020ADB18: ; 0x020ADB18
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- bne _020ADB38
- mov r1, r2
- bl FUN_020ADBE8
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADB38:
- ldr r3, [r0, #0x0]
- cmp r1, r3
- bne _020ADB54
- mov r1, r2
- bl FUN_020ADB8C
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADB54:
- ldrh lr, [r0, #0xa]
- ldr r3, [r1, lr]
- add r12, r2, lr
- str r3, [r2, lr]
- str r1, [r12, #0x4]
- add r3, r3, lr
- str r2, [r3, #0x4]
- ldrh r3, [r0, #0xa]
- str r2, [r1, r3]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020ADB8C
-FUN_020ADB8C: ; 0x020ADB8C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- bne _020ADBAC
- bl FUN_020ADC48
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADBAC:
- ldrh r3, [r0, #0xa]
- mov r2, #0x0
- str r2, [r1, r3]
- ldr r2, [r0, #0x0]
- add r3, r1, r3
- str r2, [r3, #0x4]
- ldrh r2, [r0, #0xa]
- ldr r3, [r0, #0x0]
- str r1, [r3, r2]
- str r1, [r0, #0x0]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020ADBE8
-FUN_020ADBE8: ; 0x020ADBE8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- bne _020ADC08
- bl FUN_020ADC48
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADC08:
- ldrh r12, [r0, #0xa]
- ldr r3, [r0, #0x4]
- mov r2, #0x0
- str r3, [r1, r12]
- add r3, r1, r12
- str r2, [r3, #0x4]
- ldrh r2, [r0, #0xa]
- ldr r3, [r0, #0x4]
- add r2, r3, r2
- str r1, [r2, #0x4]
- str r1, [r0, #0x4]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020ADC48
-FUN_020ADC48: ; 0x020ADC48
- ldrh r3, [r0, #0xa]
- mov r2, #0x0
- add r12, r1, r3
- str r2, [r12, #0x4]
- str r2, [r1, r3]
- str r1, [r0, #0x0]
- str r1, [r0, #0x4]
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_020ADC74
-FUN_020ADC74: ; 0x020ADC74
- mov r2, #0x0
- str r2, [r0, #0x0]
- str r2, [r0, #0x4]
- strh r2, [r0, #0x8]
- strh r1, [r0, #0xa]
- bx lr
-
- arm_func_start FUN_020ADC8C
-FUN_020ADC8C: ; 0x020ADC8C
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020ADD30
- mov r1, r4
- bl FUN_020ADAB0
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020ADCA4
-FUN_020ADCA4:
- stmdb sp!, {r4,lr}
- mov r4, r0
- str r1, [r4, #0x0]
- str r2, [r4, #0x18]
- str r3, [r4, #0x1c]
- mov r0, #0x0
- str r0, [r4, #0x20]
- ldr r1, [r4, #0x20]
- ldrh r0, [sp, #0x8]
- bic r1, r1, #0xff
- str r1, [r4, #0x20]
- ldr r1, [r4, #0x20]
- and r0, r0, #0xff
- orr r2, r1, r0
- add r0, r4, #0xc
- mov r1, #0x4
- str r2, [r4, #0x20]
- bl FUN_020ADC74
- ldr r0, _020ADD28 ; =UNK_021CCD38
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020ADD14
- ldr r0, _020ADD2C ; =UNK_021CCD3C
- mov r1, #0x4
- bl FUN_020ADC74
- ldr r0, _020ADD28 ; =UNK_021CCD38
- mov r1, #0x1
- str r1, [r0, #0x0]
-_020ADD14:
- mov r0, r4
- bl FUN_020ADD30
- mov r1, r4
- bl FUN_020ADBE8
- ldmia sp!, {r4,pc}
- .balign 4
-_020ADD28: .word UNK_021CCD38
-_020ADD2C: .word UNK_021CCD3C
-
- arm_func_start FUN_020ADD30
-FUN_020ADD30: ; 0x020ADD30
- stmdb sp!, {r4,lr}
- ldr r4, _020ADD54 ; =UNK_021CCD3C
- mov r1, r0
- mov r0, r4
- bl FUN_020ADD58
- cmp r0, #0x0
- addne r4, r0, #0xc
- mov r0, r4
- ldmia sp!, {r4,pc}
- .balign 4
-_020ADD54: .word UNK_021CCD3C
-
- arm_func_start FUN_020ADD58
-FUN_020ADD58:
- stmdb sp!, {r4-r6,lr}
- mov r5, r1
- mov r1, #0x0
- mov r6, r0
- bl FUN_020ADA98
- movs r4, r0
- beq _020ADDB8
-_020ADD74:
- ldr r0, [r4, #0x18]
- cmp r0, r5
- bhi _020ADDA4
- ldr r0, [r4, #0x1c]
- cmp r5, r0
- bhs _020ADDA4
- mov r1, r5
- add r0, r4, #0xc
- bl FUN_020ADD58
- cmp r0, #0x0
- moveq r0, r4
- ldmia sp!, {r4-r6,pc}
-_020ADDA4:
- mov r0, r6
- mov r1, r4
- bl FUN_020ADA98
- movs r4, r0
- bne _020ADD74
-_020ADDB8:
- mov r0, #0x0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020ADDC0
-FUN_020ADDC0: ; 0x020ADDC0
- ldr r0, [r0, #-0xc]
- bx lr
-
- arm_func_start FUN_020ADDC8
-FUN_020ADDC8: ; 0x020ADDC8
- ldr r2, [r0, #0x24]
- mov r0, #0x0
- cmp r2, #0x0
- bxeq lr
-_020ADDD8:
- ldr r1, [r2, #0x4]
- ldr r2, [r2, #0xc]
- add r0, r0, r1
- cmp r2, #0x0
- bne _020ADDD8
- bx lr
-
- arm_func_start FUN_020ADDF0
-FUN_020ADDF0: ; 0x020ADDF0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- sub r4, r1, #0x10
- add r5, r0, #0x24
- add r0, sp, #0x0
- mov r1, r4
- bl FUN_020AE528
- mov r1, r4
- add r0, r5, #0x8
- bl FUN_020AE500
- add r1, sp, #0x0
- mov r0, r5
- bl FUN_020AE02C
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020ADE2C
-FUN_020ADE2C: ; 0x020ADE2C
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x10
- mov r4, r1
- mov r10, r2
- sub r6, r4, #0x10
- add r1, r10, #0x3
- mov r5, r0
- ldr r8, [r6, #0x4]
- bic r10, r1, #0x3
- cmp r10, r8
- add r7, r5, #0x24
- addeq sp, sp, #0x10
- moveq r0, r10
- ldmeqia sp!, {r4-r10,pc}
- cmp r10, r8
- bls _020ADF60
- ldr r9, [r7, #0x0]
- add r0, r6, #0x10
- cmp r9, #0x0
- add r0, r8, r0
- beq _020ADE94
-_020ADE80:
- cmp r9, r0
- beq _020ADE94
- ldr r9, [r9, #0xc]
- cmp r9, #0x0
- bne _020ADE80
-_020ADE94:
- cmp r9, #0x0
- beq _020ADEB0
- ldr r0, [r9, #0x4]
- add r1, r8, #0x10
- add r0, r1, r0
- cmp r10, r0
- bls _020ADEBC
-_020ADEB0:
- add sp, sp, #0x10
- mov r0, #0x0
- ldmia sp!, {r4-r10,pc}
-_020ADEBC:
- add r0, sp, #0x0
- mov r1, r9
- bl FUN_020AE528
- mov r0, r7
- mov r1, r9
- bl FUN_020AE500
- ldr r2, [sp, #0x4]
- add r3, r10, r4
- ldr r9, [sp, #0x0]
- sub r1, r2, r3
- str r3, [sp, #0x0]
- cmp r1, #0x10
- strcc r2, [sp, #0x0]
- mov r8, r0
- ldr r0, [sp, #0x0]
- sub r0, r0, r4
- str r0, [r6, #0x4]
- ldr r1, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r0, r1, r0
- cmp r0, #0x10
- blo _020ADF30
- ldr r1, _020ADF9C ; =0x00004652
- add r0, sp, #0x0
- bl FUN_020AE4A0
- mov r1, r0
- mov r0, r7
- mov r2, r8
- bl FUN_020AE4D0
-_020ADF30:
- ldr r0, [r5, #0x20]
- ldr r1, [sp, #0x0]
- and r0, r0, #0xff
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- sub r2, r1, r9
- ands r0, r0, #0x1
- beq _020ADF90
- mov r1, r9
- mov r0, #0x0
- bl MIi_CpuClear32
- b _020ADF90
-_020ADF60:
- add r0, r10, r4
- str r0, [sp, #0x8]
- ldr r1, [r6, #0x4]
- add r0, r6, #0x10
- add r0, r1, r0
- str r0, [sp, #0xc]
- add r1, sp, #0x8
- mov r0, r7
- str r10, [r6, #0x4]
- bl FUN_020AE02C
- cmp r0, #0x0
- streq r8, [r6, #0x4]
-_020ADF90:
- ldr r0, [r6, #0x4]
- add sp, sp, #0x10
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020ADF9C: .word 0x00004652
-
- arm_func_start tempName_NNS_FndAllocFromExpHeapEx
-tempName_NNS_FndAllocFromExpHeapEx: ; 0x020ADFA0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- moveq r1, #0x1
- add r1, r1, #0x3
- cmp r2, #0x0
- bic r1, r1, #0x3
- blt _020ADFCC
- bl FUN_020AE1D8
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020ADFCC:
- rsb r2, r2, #0x0
- bl FUN_020AE11C
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start thunk_FUN_020adc8c
-thunk_FUN_020adc8c: ; 0x020ADFDC
- ldr ip, _020ADFE4 ; =FUN_020ADC8C
- bx r12
- .balign 4
-_020ADFE4: .word FUN_020ADC8C
-
- arm_func_start tempName_NNS_FndCreateExpHeapEx
-tempName_NNS_FndCreateExpHeapEx: ; 0x020ADFE8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- add r1, r1, r0
- add r0, r0, #0x3
- bic r1, r1, #0x3
- bic r0, r0, #0x3
- cmp r0, r1
- bhi _020AE014
- sub r3, r1, r0
- cmp r3, #0x4c
- bhs _020AE020
-_020AE014:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {pc}
-_020AE020:
- bl FUN_020AE420
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AE02C
-FUN_020AE02C:
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- mov r5, r1
- ldr r2, [r5, #0x0]
- ldr r1, [r5, #0x4]
- mov r6, r0
- str r2, [sp, #0x0]
- str r1, [sp, #0x4]
- ldr r1, [r6, #0x0]
- mov r4, #0x0
- cmp r1, #0x0
- beq _020AE0A0
- ldr r0, [r5, #0x0]
-_020AE060:
- cmp r1, r0
- movcc r4, r1
- blo _020AE094
- ldr r0, [r5, #0x4]
- cmp r1, r0
- bne _020AE0A0
- ldr r2, [r1, #0x4]
- add r0, r1, #0x10
- add r2, r2, r0
- mov r0, r6
- str r2, [sp, #0x4]
- bl FUN_020AE500
- b _020AE0A0
-_020AE094:
- ldr r1, [r1, #0xc]
- cmp r1, #0x0
- bne _020AE060
-_020AE0A0:
- cmp r4, #0x0
- beq _020AE0D4
- ldr r2, [r4, #0x4]
- add r1, r4, #0x10
- ldr r0, [r5, #0x0]
- add r1, r2, r1
- cmp r1, r0
- bne _020AE0D4
- mov r0, r6
- mov r1, r4
- str r4, [sp, #0x0]
- bl FUN_020AE500
- mov r4, r0
-_020AE0D4:
- ldr r1, [sp, #0x4]
- ldr r0, [sp, #0x0]
- sub r0, r1, r0
- cmp r0, #0x10
- addcc sp, sp, #0x8
- movcc r0, #0x0
- ldmccia sp!, {r4-r6,pc}
- ldr r1, _020AE118 ; =0x00004652
- add r0, sp, #0x0
- bl FUN_020AE4A0
- mov r1, r0
- mov r0, r6
- mov r2, r4
- bl FUN_020AE4D0
- mov r0, #0x1
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020AE118: .word 0x00004652
-
- arm_func_start FUN_020AE11C
-FUN_020AE11C: ; 0x020AE11C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- add r0, r0, #0x24
- ldrh r4, [r0, #0x12]
- mov r3, r1
- mvn lr, #0x0
- and r1, r4, #0x1
- mov r1, r1, lsl #0x10
- movs r1, r1, lsr #0x10
- moveq r5, #0x1
- mov r1, #0x0
- ldr r4, [r0, #0x4]
- movne r5, #0x0
- mov r12, r1
- cmp r4, #0x0
- beq _020AE1B0
- sub r2, r2, #0x1
- mvn r2, r2
-_020AE164:
- ldr r8, [r4, #0x4]
- add r9, r4, #0x10
- add r6, r8, r9
- sub r6, r6, r3
- and r7, r2, r6
- subs r6, r7, r9
- bmi _020AE1A4
- cmp lr, r8
- bls _020AE1A4
- mov r1, r4
- mov lr, r8
- mov r12, r7
- cmp r5, #0x0
- bne _020AE1B0
- cmp r8, r3
- beq _020AE1B0
-_020AE1A4:
- ldr r4, [r4, #0x8]
- cmp r4, #0x0
- bne _020AE164
-_020AE1B0:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- mov r4, #0x1
- mov r2, r12
- str r4, [sp, #0x0]
- bl FUN_020AE298
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_020AE1D8
-FUN_020AE1D8: ; 0x020AE1D8
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- add r0, r0, #0x24
- ldrh r4, [r0, #0x12]
- mov r3, r1
- ldr r5, [r0, #0x0]
- and r1, r4, #0x1
- mov r1, r1, lsl #0x10
- movs r1, r1, lsr #0x10
- moveq r6, #0x1
- mov r1, #0x0
- movne r6, #0x0
- mov lr, r1
- cmp r5, #0x0
- mvn r4, #0x0
- beq _020AE270
- sub r12, r2, #0x1
- mvn r2, r12
-_020AE220:
- add r8, r5, #0x10
- add r7, r12, r8
- and r9, r2, r7
- sub r7, r9, r8
- ldr r8, [r5, #0x4]
- add r7, r3, r7
- cmp r8, r7
- blo _020AE264
- cmp r4, r8
- bls _020AE264
- mov r1, r5
- mov r4, r8
- mov lr, r9
- cmp r6, #0x0
- bne _020AE270
- cmp r8, r3
- beq _020AE270
-_020AE264:
- ldr r5, [r5, #0xc]
- cmp r5, #0x0
- bne _020AE220
-_020AE270:
- cmp r1, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r9,pc}
- mov r4, #0x0
- mov r2, lr
- str r4, [sp, #0x0]
- bl FUN_020AE298
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_020AE298
-FUN_020AE298: ; 0x020AE298
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x18
- mov r7, r0
- add r0, sp, #0x0
- mov r8, r1
- mov r6, r2
- mov r5, r3
- bl FUN_020AE528
- ldr r3, [sp, #0x4]
- sub r4, r6, #0x10
- add r2, r5, r6
- mov r0, r7
- mov r1, r8
- str r4, [sp, #0x4]
- str r3, [sp, #0xc]
- str r2, [sp, #0x8]
- bl FUN_020AE500
- ldr r2, [sp, #0x0]
- ldr r1, [sp, #0x4]
- mov r5, r0
- sub r0, r1, r2
- cmp r0, #0x10
- strcc r2, [sp, #0x4]
- blo _020AE318
- ldr r1, _020AE418 ; =0x00004652
- add r0, sp, #0x0
- bl FUN_020AE4A0
- mov r1, r0
- mov r0, r7
- mov r2, r5
- bl FUN_020AE4D0
- mov r5, r0
-_020AE318:
- ldr r1, [sp, #0xc]
- ldr r0, [sp, #0x8]
- sub r0, r1, r0
- cmp r0, #0x10
- strcc r1, [sp, #0x8]
- blo _020AE34C
- ldr r1, _020AE418 ; =0x00004652
- add r0, sp, #0x8
- bl FUN_020AE4A0
- mov r1, r0
- mov r0, r7
- mov r2, r5
- bl FUN_020AE4D0
-_020AE34C:
- ldr r0, [r7, #-0x4]
- ldr r1, [sp, #0x4]
- and r0, r0, #0xff
- mov r0, r0, lsl #0x10
- ldr r2, [sp, #0x8]
- mov r0, r0, lsr #0x10
- sub r2, r2, r1
- ands r0, r0, #0x1
- beq _020AE378
- mov r0, #0x0
- bl MIi_CpuClear32
-_020AE378:
- ldr r2, [sp, #0x8]
- ldr r1, _020AE41C ; =0x00005544
- add r0, sp, #0x10
- str r4, [sp, #0x10]
- str r2, [sp, #0x14]
- bl FUN_020AE4A0
- mov r1, r0
- ldrh r3, [r1, #0x2]
- ldrh r2, [sp, #0x30]
- add r0, r7, #0x8
- bic r3, r3, #0x8000
- strh r3, [r1, #0x2]
- ldrh r3, [r1, #0x2]
- and r2, r2, #0x1
- orr r2, r3, r2, lsl #0xf
- strh r2, [r1, #0x2]
- ldrh r2, [r1, #0x2]
- ldr r3, [sp, #0x4]
- bic r2, r2, #0x7f00
- strh r2, [r1, #0x2]
- sub r2, r1, r3
- mov r2, r2, lsl #0x10
- mov r2, r2, lsr #0x10
- ldrh r3, [r1, #0x2]
- and r2, r2, #0x7f
- orr r2, r3, r2, lsl #0x8
- strh r2, [r1, #0x2]
- ldrh r2, [r1, #0x2]
- ldrh r3, [r7, #0x10]
- bic r2, r2, #0xff
- strh r2, [r1, #0x2]
- ldrh r2, [r1, #0x2]
- and r3, r3, #0xff
- orr r2, r2, r3
- strh r2, [r1, #0x2]
- ldr r2, [r7, #0xc]
- bl FUN_020AE4D0
- mov r0, r6
- add sp, sp, #0x18
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020AE418: .word 0x00004652
-_020AE41C: .word 0x00005544
-
- arm_func_start FUN_020AE420
-FUN_020AE420: ; 0x020AE420
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0xc
- mov r5, r0
- mov r3, r1
- add r4, r5, #0x24
- str r2, [sp, #0x0]
- ldr r1, _020AE498 ; =0x45585048
- add r2, r4, #0x14
- bl FUN_020ADCA4
- mov r0, #0x0
- strh r0, [r4, #0x10]
- strh r0, [r4, #0x12]
- ldrh r2, [r4, #0x12]
- ldr r1, _020AE49C ; =0x00004652
- add r0, sp, #0x4
- bic r2, r2, #0x1
- strh r2, [r4, #0x12]
- ldr r2, [r5, #0x18]
- str r2, [sp, #0x4]
- ldr r2, [r5, #0x1c]
- str r2, [sp, #0x8]
- bl FUN_020AE4A0
- str r0, [r5, #0x24]
- str r0, [r4, #0x4]
- mov r1, #0x0
- str r1, [r4, #0x8]
- mov r0, r5
- str r1, [r4, #0xc]
- add sp, sp, #0xc
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AE498: .word 0x45585048
-_020AE49C: .word 0x00004652
-
- arm_func_start FUN_020AE4A0
-FUN_020AE4A0: ; 0x020AE4A0
- ldr r3, [r0, #0x0]
- mov r2, #0x0
- strh r1, [r3, #0x0]
- strh r2, [r3, #0x2]
- ldr r1, [r0, #0x4]
- add r0, r3, #0x10
- sub r0, r1, r0
- str r0, [r3, #0x4]
- str r2, [r3, #0x8]
- mov r0, r3
- str r2, [r3, #0xc]
- bx lr
-
- arm_func_start FUN_020AE4D0
-FUN_020AE4D0: ; 0x020AE4D0
- str r2, [r1, #0x8]
- cmp r2, #0x0
- ldrne r3, [r2, #0xc]
- strne r1, [r2, #0xc]
- ldreq r3, [r0, #0x0]
- streq r1, [r0, #0x0]
- str r3, [r1, #0xc]
- cmp r3, #0x0
- strne r1, [r3, #0x8]
- streq r1, [r0, #0x4]
- mov r0, r1
- bx lr
-
- arm_func_start FUN_020AE500
-FUN_020AE500: ; 0x020AE500
- ldr r2, [r1, #0x8]
- ldr r1, [r1, #0xc]
- cmp r2, #0x0
- strne r1, [r2, #0xc]
- streq r1, [r0, #0x0]
- cmp r1, #0x0
- strne r2, [r1, #0x8]
- streq r2, [r0, #0x4]
- mov r0, r2
- bx lr
-
- arm_func_start FUN_020AE528
-FUN_020AE528: ; 0x020AE528
- ldrh r2, [r1, #0x2]
- add r3, r1, #0x10
- mov r2, r2, asr #0x8
- and r2, r2, #0x7f
- mov r2, r2, lsl #0x10
- sub r2, r1, r2, lsr #0x10
- str r2, [r0, #0x0]
- ldr r1, [r1, #0x4]
- add r1, r1, r3
- str r1, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_020AE554
-FUN_020AE554: ; 0x020AE554
- add r2, r0, #0x24
- cmp r1, #0x0
- ldr r3, [r2, #0x8]
- beq _020AE584
- cmp r3, #0x0
- beq _020AE584
-_020AE56C:
- ldr r0, [r3, #0x0]
- cmp r0, r1
- beq _020AE584
- ldr r3, [r3, #0xc]
- cmp r3, #0x0
- bne _020AE56C
-_020AE584:
- cmp r3, #0x0
- moveq r0, #0x0
- bxeq lr
- ldr r1, [r3, #0x4]
- mov r0, #0x1
- str r1, [r2, #0x0]
- ldr r1, [r3, #0x8]
- str r1, [r2, #0x4]
- ldr r1, [r3, #0xc]
- str r1, [r2, #0x8]
- bx lr
-
- arm_func_start FUN_020AE5B0
-FUN_020AE5B0: ; 0x020AE5B0
- stmdb sp!, {r4-r6,lr}
- add r4, r0, #0x24
- ldr r5, [r0, #0x24]
- mov r6, r1
- mov r0, r4
- mov r1, #0x10
- mov r2, #0x4
- bl FUN_020AE77C
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- str r6, [r0, #0x0]
- str r5, [r0, #0x4]
- ldr r1, [r4, #0x4]
- str r1, [r0, #0x8]
- ldr r1, [r4, #0x8]
- str r1, [r0, #0xc]
- str r0, [r4, #0x8]
- mov r0, #0x1
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AE600
-FUN_020AE600: ; 0x020AE600
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r5, r0
- ands r1, r4, #0x1
- beq _020AE61C
- bl FUN_020AE6F8
-_020AE61C:
- ands r0, r4, #0x2
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- mov r0, r5
- bl FUN_020AE6C8
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020AE638
-FUN_020AE638: ; 0x020AE638
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- moveq r1, #0x1
- add r1, r1, #0x3
- add r0, r0, #0x24
- cmp r2, #0x0
- bic r1, r1, #0x3
- blt _020AE668
- bl FUN_020AE77C
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020AE668:
- rsb r2, r2, #0x0
- bl FUN_020AE710
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start thunk_FUN_020adc8c_2
-thunk_FUN_020adc8c_2: ; 0x020AE678
- ldr ip, _020AE680 ; =FUN_020ADC8C
- bx r12
- .balign 4
-_020AE680: .word FUN_020ADC8C
-
- arm_func_start FUN_020AE684
-FUN_020AE684: ; 0x020AE684
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- add r1, r1, r0
- add r0, r0, #0x3
- bic r1, r1, #0x3
- bic r0, r0, #0x3
- cmp r0, r1
- bhi _020AE6B0
- sub r3, r1, r0
- cmp r3, #0x30
- bhs _020AE6BC
-_020AE6B0:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {pc}
-_020AE6BC:
- bl FUN_020AE7E0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AE6C8
-FUN_020AE6C8: ; 0x020AE6C8
- add r2, r0, #0x24
- ldr r3, [r2, #0x8]
- cmp r3, #0x0
- beq _020AE6EC
-_020AE6D8:
- ldr r1, [r0, #0x1c]
- str r1, [r3, #0x8]
- ldr r3, [r3, #0xc]
- cmp r3, #0x0
- bne _020AE6D8
-_020AE6EC:
- ldr r0, [r0, #0x1c]
- str r0, [r2, #0x4]
- bx lr
-
- arm_func_start FUN_020AE6F8
-FUN_020AE6F8: ; 0x020AE6F8
- ldr r1, [r0, #0x18]
- add r2, r0, #0x24
- str r1, [r0, #0x24]
- mov r0, #0x0
- str r0, [r2, #0x8]
- bx lr
-
- arm_func_start FUN_020AE710
-FUN_020AE710: ; 0x020AE710
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r3, [r5, #0x4]
- sub r0, r2, #0x1
- mvn r2, r0
- sub r1, r3, r1
- ldr r0, [r5, #0x0]
- and r4, r2, r1
- cmp r4, r0
- addcc sp, sp, #0x4
- movcc r0, #0x0
- ldmccia sp!, {r4-r5,pc}
- ldr r0, [r5, #-0x4]
- sub r2, r3, r4
- and r0, r0, #0xff
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- ands r0, r0, #0x1
- beq _020AE76C
- mov r1, r4
- mov r0, #0x0
- bl MIi_CpuClear32
-_020AE76C:
- mov r0, r4
- str r4, [r5, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020AE77C
-FUN_020AE77C:
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldr r0, [r6, #0x0]
- sub r2, r2, #0x1
- mvn r3, r2
- add r2, r2, r0
- and r5, r3, r2
- ldr r2, [r6, #0x4]
- add r4, r1, r5
- cmp r4, r2
- movhi r0, #0x0
- ldmhiia sp!, {r4-r6,pc}
- ldr r1, [r6, #-0x4]
- sub r2, r4, r0
- and r1, r1, #0xff
- mov r1, r1, lsl #0x10
- mov r1, r1, lsr #0x10
- ands r1, r1, #0x1
- beq _020AE7D4
- mov r1, r0
- mov r0, #0x0
- bl MIi_CpuClear32
-_020AE7D4:
- mov r0, r5
- str r4, [r6, #0x0]
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AE7E0
-FUN_020AE7E0: ; 0x020AE7E0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r3, r1
- add r4, r5, #0x24
- str r2, [sp, #0x0]
- ldr r1, _020AE828 ; =0x46524D48
- add r2, r4, #0xc
- bl FUN_020ADCA4
- ldr r0, [r5, #0x18]
- mov r1, #0x0
- str r0, [r5, #0x24]
- ldr r2, [r5, #0x1c]
- mov r0, r5
- str r2, [r4, #0x4]
- str r1, [r4, #0x8]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AE828: .word 0x46524D48
-
- arm_func_start FUN_020AE82C
-FUN_020AE82C: ; 0x020AE82C
- ldr ip, _020AE848 ; =UNK_020FF7CC
- mov r3, #0x0
- str r12, [r0, #0x0]
- str r1, [r0, #0x4]
- str r2, [r0, #0x8]
- str r3, [r0, #0xc]
- bx lr
- .balign 4
-_020AE848: .word UNK_020FF7CC
-
- arm_func_start FUN_020AE84C
-FUN_020AE84C: ; 0x020AE84C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- ldr r2, [r2, #0x4]
- blx r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AE868
-FUN_020AE868: ; 0x020AE868
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x0]
- ldr r2, [r2, #0x0]
- blx r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AE884
-FUN_020AE884: ; 0x020AE884
- ldr ip, _020AE890 ; =FUN_020ADDF0
- ldr r0, [r0, #0x4]
- bx r12
- .balign 4
-_020AE890: .word FUN_020ADDF0
-
- arm_func_start FUN_020AE894
-FUN_020AE894: ; 0x020AE894
- ldr ip, _020AE8A8 ; =tempName_NNS_FndAllocFromExpHeapEx
- mov r2, r0
- ldr r0, [r2, #0x4]
- ldr r2, [r2, #0x8]
- bx r12
- .balign 4
-_020AE8A8: .word tempName_NNS_FndAllocFromExpHeapEx
-
- arm_func_start FUN_020AE8AC
-FUN_020AE8AC: ; 0x020AE8AC
- mvn r0, #0x0
- bx lr
-
- arm_func_start FUN_020AE8B4
-FUN_020AE8B4: ; 0x020AE8B4
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020AE8BC
-FUN_020AE8BC: ; 0x020AE8BC
- mvn r0, #0x0
- bx lr
-
- arm_func_start FUN_020AE8C4
-FUN_020AE8C4: ; 0x020AE8C4
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020AE8CC
-FUN_020AE8CC: ; 0x020AE8CC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, #0x0
- ldr r3, _020AE914 ; =UNK_021064E4
- mov r12, lr
- mov r2, #0x1
-_020AE8E4:
- ldr r1, [r0, r12, lsl #0x2]
- add lr, lr, #0x1
- str r1, [r3, #0x0]
- ldr r1, [r0, r2, lsl #0x2]
- cmp lr, #0x5
- str r1, [r3, #0x4]
- add r12, r12, #0x2
- add r3, r3, #0x18
- add r2, r2, #0x2
- blt _020AE8E4
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020AE914: .word UNK_021064E4
-
- arm_func_start FUN_020AE918
-FUN_020AE918: ; 0x020AE918
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov lr, #0x0
- ldr ip, _020AE960 ; =UNK_021064E4
- mov r3, lr
- mov r2, #0x1
-_020AE930:
- ldr r1, [r12, #0x0]
- add lr, lr, #0x1
- str r1, [r0, r3, lsl #0x2]
- ldr r1, [r12, #0x4]
- cmp lr, #0x5
- str r1, [r0, r2, lsl #0x2]
- add r12, r12, #0x18
- add r3, r3, #0x2
- add r2, r2, #0x2
- blt _020AE930
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020AE960: .word UNK_021064E4
-
- arm_func_start FUN_020AE964
-FUN_020AE964: ; 0x020AE964
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020AE96C
-FUN_020AE96C: ; 0x020AE96C
- stmdb sp!, {r4-r10,lr}
- cmp r0, #0x0
- moveq r7, #0x10
- addne r0, r0, #0xf
- bicne r7, r0, #0xf
- ldr r0, _020AEADC ; =0x0007FFF0
- cmp r7, r0
- movcs r0, #0x0
- ldmcsia sp!, {r4-r10,pc}
- cmp r1, #0x0
- beq _020AEA5C
- mov lr, r7, lsr #0x1
- mov r6, #0x0
- ldr r2, _020AEAE0 ; =UNK_02106514
- ldr r3, _020AEAE4 ; =UNK_021064FC
- ldr ip, _020AEAE8 ; =UNK_021064C8
- mov r0, r6
-_020AE9B0:
- ldr r5, [r12, r6, lsl #0x2]
- ldr r4, [r5, #0x8]
- cmp r4, #0x0
- beq _020AEA48
- ldr r9, [r5, #0x4]
- ldr r4, [r5, #0x0]
- sub r4, r9, r4
- cmp r4, r7
- blo _020AEA48
- ldrh r4, [r5, #0x10]
- cmp r4, #0x0
- beq _020AE9EC
- cmp r4, #0x3
- beq _020AE9F4
- b _020AE9FC
-_020AE9EC:
- mov r4, r3
- b _020AEA00
-_020AE9F4:
- mov r4, r2
- b _020AEA00
-_020AE9FC:
- mov r4, r0
-_020AEA00:
- ldr r9, [r4, #0x8]
- cmp r9, #0x0
- beq _020AEA48
- ldr r10, [r4, #0x4]
- ldr r9, [r4, #0x0]
- sub r9, r10, r9
- cmp r9, lr
- blo _020AEA48
- ldr r3, [r5, #0x0]
- mov r0, #0x1
- add r2, r3, r7
- str r2, [r5, #0x0]
- ldr r2, [r4, #0x0]
- add r2, r2, lr
- str r2, [r4, #0x0]
- ldr r2, [r5, #0x14]
- add r8, r3, r2
- b _020AEAB8
-_020AEA48:
- add r6, r6, #0x1
- cmp r6, #0x2
- blt _020AE9B0
- mov r0, #0x0
- b _020AEAB8
-_020AEA5C:
- ldr r3, _020AEAEC ; =UNK_021064D0
- mov r5, #0x0
-_020AEA64:
- ldr r4, [r3, r5, lsl #0x2]
- ldr r0, [r4, #0x8]
- cmp r0, #0x0
- beq _020AEAA8
- ldr r2, [r4, #0x4]
- ldr r0, [r4, #0x0]
- sub r0, r2, r0
- cmp r0, r7
- blo _020AEAA8
- ldr r2, [r4, #0x4]
- mov r0, #0x1
- sub r2, r2, r7
- str r2, [r4, #0x4]
- ldr r3, [r4, #0x4]
- ldr r2, [r4, #0x14]
- add r8, r3, r2
- b _020AEAB8
-_020AEAA8:
- add r5, r5, #0x1
- cmp r5, #0x5
- blt _020AEA64
- mov r0, #0x0
-_020AEAB8:
- cmp r0, #0x0
- moveq r0, #0x0
- ldmeqia sp!, {r4-r10,pc}
- ldr r0, _020AEAF0 ; =0x0000FFFF
- mov r2, r7, lsr #0x4
- and r0, r0, r8, lsr #0x3
- orr r0, r0, r2, lsl #0x10
- orr r0, r0, r1, lsl #0x1f
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020AEADC: .word 0x0007FFF0
-_020AEAE0: .word UNK_02106514
-_020AEAE4: .word UNK_021064FC
-_020AEAE8: .word UNK_021064C8
-_020AEAEC: .word UNK_021064D0
-_020AEAF0: .word 0x0000FFFF
-
- arm_func_start FUN_020AEAF4
-FUN_020AEAF4:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r0, _020AEB68 ; =UNK_021CCD48
- mov r6, #0x0
- ldrh r7, [r0, #0x0]
- ldr r5, _020AEB6C ; =UNK_021064E4
- mov lr, r6
- cmp r7, #0x1
- addhi r7, r7, #0x1
- mov r1, r6
- mov r3, r6
- mov r4, #0x1
- mov r0, #0x20000
- mov r2, #0x10000
-_020AEB2C:
- cmp r6, r7
- strlt r4, [r5, #0x8]
- strge lr, [r5, #0x8]
- ldr r12, [r5, #0xc]
- add r6, r6, #0x1
- cmp r12, #0x0
- strne r3, [r5, #0x0]
- strne r2, [r5, #0x4]
- streq r1, [r5, #0x0]
- streq r0, [r5, #0x4]
- cmp r6, #0x5
- add r5, r5, #0x18
- blt _020AEB2C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020AEB68: .word UNK_021CCD48
-_020AEB6C: .word UNK_021064E4
-
- arm_func_start FUN_020AEB70
-FUN_020AEB70: ; 0x020AEB70
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- cmp r5, #0x2
- bhi _020AEBA8
- mov r12, #0x1
- mov r0, #0x4
- mov r1, #0x3
- mov r2, #0x2
- mov r3, #0x0
- str r12, [sp, #0x0]
- bl FUN_020AEC10
- b _020AEBC4
-_020AEBA8:
- mov r12, #0x1
- mov r0, #0x4
- mov r1, #0x3
- mov r2, #0x0
- mov r3, #0x2
- str r12, [sp, #0x0]
- bl FUN_020AEC10
-_020AEBC4:
- ldr r0, _020AEBFC ; =UNK_021CCD48
- strh r5, [r0, #0x0]
- bl FUN_020AEAF4
- cmp r4, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldr r3, _020AEC00 ; =FUN_020AE96C
- ldr r1, _020AEC04 ; =UNK_021064B8
- ldr r2, _020AEC08 ; =FUN_020AE964
- ldr r0, _020AEC0C ; =UNK_021064BC
- str r3, [r1, #0x0]
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AEBFC: .word UNK_021CCD48
-_020AEC00: .word FUN_020AE96C
-_020AEC04: .word UNK_021064B8
-_020AEC08: .word FUN_020AE964
-_020AEC0C: .word UNK_021064BC
-
- arm_func_start FUN_020AEC10
-FUN_020AEC10: ; 0x020AEC10
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr lr, [sp, #0x18]
- ldr r6, _020AEC58 ; =UNK_021064E4
- mov r12, #0x18
- mla r7, r0, r12, r6
- ldr r0, _020AEC5C ; =UNK_021064D0
- mla r5, r1, r12, r6
- mla r4, r2, r12, r6
- mla r2, r3, r12, r6
- mla r1, lr, r12, r6
- str r7, [r0, #0x0]
- str r5, [r0, #0x4]
- str r4, [r0, #0x8]
- str r2, [r0, #0xc]
- str r1, [r0, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020AEC58: .word UNK_021064E4
-_020AEC5C: .word UNK_021064D0
-
- arm_func_start FUN_020AEC60
-FUN_020AEC60:
- ldr r0, _020AEC78 ; =UNK_021CCD4C
- mov r2, #0x0
- ldr r1, [r0, #0x8]
- str r2, [r0, #0x0]
- str r1, [r0, #0x4]
- bx lr
- .balign 4
-_020AEC78: .word UNK_021CCD4C
-
- arm_func_start FUN_020AEC7C
-FUN_020AEC7C: ; 0x020AEC7C
- ldr r2, [r0, #0x0]
- ldr r1, _020AEC94 ; =UNK_021CCD4C
- str r2, [r1, #0x0]
- ldr r0, [r0, #0x4]
- str r0, [r1, #0x4]
- bx lr
- .balign 4
-_020AEC94: .word UNK_021CCD4C
-
- arm_func_start FUN_020AEC98
-FUN_020AEC98: ; 0x020AEC98
- ldr r1, _020AECB0 ; =UNK_021CCD4C
- ldr r2, [r1, #0x0]
- str r2, [r0, #0x0]
- ldr r1, [r1, #0x4]
- str r1, [r0, #0x4]
- bx lr
- .balign 4
-_020AECB0: .word UNK_021CCD4C
-
- arm_func_start FUN_020AECB4
-FUN_020AECB4: ; 0x020AECB4
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020AECBC
-FUN_020AECBC: ; 0x020AECBC
- stmdb sp!, {r4,lr}
- cmp r0, #0x0
- moveq r0, #0x8
- addne r0, r0, #0x7
- ldr ip, _020AEDE8 ; =0x0007FFF8
- bicne r0, r0, #0x7
- cmp r0, r12
- mov r3, #0x0
- movcs r0, #0x0
- ldmcsia sp!, {r4,pc}
- cmp r2, #0x1
- bne _020AED64
- ldr r2, _020AEDEC ; =UNK_021CCD4C
- cmp r1, #0x0
- ldr r12, [r2, #0x0]
- andne r2, r12, #0x7
- rsbne r2, r2, #0x8
- andne r4, r2, #0x7
- andeq r2, r12, #0xf
- rsbeq r2, r2, #0x10
- andeq r4, r2, #0xf
- ldr r2, _020AEDEC ; =UNK_021CCD4C
- add lr, r0, r4
- ldr r2, [r2, #0x4]
- sub r2, r2, r12
- cmp r2, lr
- blo _020AED5C
- cmp r1, #0x0
- add r1, r12, lr
- beq _020AED40
- cmp r1, #0x10000
- movhi r12, #0x0
- bhi _020AEDCC
-_020AED40:
- ldr r1, _020AEDEC ; =UNK_021CCD4C
- add r3, r12, r4
- ldr r2, [r1, #0x0]
- mov r12, #0x1
- add r2, r2, lr
- str r2, [r1, #0x0]
- b _020AEDCC
-_020AED5C:
- mov r12, #0x0
- b _020AEDCC
-_020AED64:
- ldr r2, _020AEDEC ; =UNK_021CCD4C
- ldr r12, [r2, #0x4]
- cmp r12, r0
- blo _020AEDC8
- sub r2, r12, r0
- cmp r1, #0x0
- andne r4, r2, #0x7
- andeq r4, r2, #0xf
- ldr r2, _020AEDEC ; =UNK_021CCD4C
- add lr, r0, r4
- ldr r2, [r2, #0x0]
- sub r2, r12, r2
- cmp r2, lr
- blo _020AEDC8
- cmp r1, #0x0
- beq _020AEDB0
- cmp r12, #0x10000
- movhi r12, #0x0
- bhi _020AEDCC
-_020AEDB0:
- ldr r1, _020AEDEC ; =UNK_021CCD4C
- mov r12, #0x1
- ldr r2, [r1, #0x4]
- sub r3, r2, lr
- str r3, [r1, #0x4]
- b _020AEDCC
-_020AEDC8:
- mov r12, #0x0
-_020AEDCC:
- cmp r12, #0x0
- ldrne r1, _020AEDF0 ; =0x0000FFFF
- movne r2, r0, lsr #0x3
- andne r0, r1, r3, lsr #0x3
- orrne r0, r0, r2, lsl #0x10
- moveq r0, #0x0
- ldmia sp!, {r4,pc}
- .balign 4
-_020AEDE8: .word 0x0007FFF8
-_020AEDEC: .word UNK_021CCD4C
-_020AEDF0: .word 0x0000FFFF
-
- arm_func_start FUN_020AEDF4
-FUN_020AEDF4: ; 0x020AEDF4
- stmdb sp!, {r4,lr}
- ldr r2, _020AEE2C ; =UNK_021CCD4C
- mov r4, r1
- str r0, [r2, #0x8]
- bl FUN_020AEC60
- cmp r4, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r3, _020AEE30 ; =FUN_020AECBC
- ldr r1, _020AEE34 ; =UNK_021064C0
- ldr r2, _020AEE38 ; =FUN_020AECB4
- ldr r0, _020AEE3C ; =UNK_021064C4
- str r3, [r1, #0x0]
- str r2, [r0, #0x0]
- ldmia sp!, {r4,pc}
- .balign 4
-_020AEE2C: .word UNK_021CCD4C
-_020AEE30: .word FUN_020AECBC
-_020AEE34: .word UNK_021064C0
-_020AEE38: .word FUN_020AECB4
-_020AEE3C: .word UNK_021064C4
-
- arm_func_start FUN_020AEE40
-FUN_020AEE40: ; 0x020AEE40
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r5, _020AEEB4 ; =UNK_021CCD58
- mov r9, r0
- mov r0, r5
- mov r8, r1
- mov r7, r2
- mov r6, r3
- bl FUN_020AF2F4
- cmp r0, #0x0
- addne sp, sp, #0x4
- movne r0, #0x0
- ldmneia sp!, {r4-r9,pc}
- mov r0, r5
- bl FUN_020AEF78
- mov r4, r0
- str r9, [r4, #0x0]
- str r7, [r4, #0x4]
- str r8, [r4, #0x8]
- mov r0, r5
- str r6, [r4, #0xc]
- bl FUN_020AEF98
- ldr r2, [r5, #0x10]
- ldr r1, [r4, #0xc]
- mov r0, #0x1
- add r1, r2, r1
- str r1, [r5, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020AEEB4: .word UNK_021CCD58
-
- arm_func_start FUN_020AEEB8
-FUN_020AEEB8: ; 0x020AEEB8
- stmdb sp!, {r4-r6,lr}
- ldr r6, _020AEF18 ; =UNK_021CCD58
- mov r0, r6
- bl FUN_020AEF88
- mov r5, r0
- mov r0, r6
- bl FUN_020AEF3C
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- add r4, r6, #0x10
-_020AEEE0:
- mov r0, r5
- bl FUN_020AEFF0
- ldr r2, [r4, #0x0]
- ldr r1, [r5, #0xc]
- mov r0, r6
- sub r1, r2, r1
- str r1, [r4, #0x0]
- bl FUN_020AEF88
- mov r5, r0
- mov r0, r6
- bl FUN_020AEF3C
- cmp r0, #0x0
- bne _020AEEE0
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020AEF18: .word UNK_021CCD58
-
- arm_func_start FUN_020AEF1C
-FUN_020AEF1C: ; 0x020AEF1C
- ldr r2, _020AEF34 ; =UNK_021CCD58
- ldr ip, _020AEF38 ; =FUN_020AEFD4
- str r0, [r2, #0x0]
- mov r0, r2
- str r1, [r2, #0x4]
- bx r12
- .balign 4
-_020AEF34: .word UNK_021CCD58
-_020AEF38: .word FUN_020AEFD4
-
- arm_func_start FUN_020AEF3C
-FUN_020AEF3C:
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020AF2E0
- cmp r0, #0x0
- movne r0, #0x0
- ldmneia sp!, {r4,pc}
- ldrh r1, [r4, #0x8]
- mov r0, r4
- bl FUN_020AF30C
- strh r0, [r4, #0x8]
- ldrh r1, [r4, #0xc]
- mov r0, #0x1
- sub r1, r1, #0x1
- strh r1, [r4, #0xc]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020AEF78
-FUN_020AEF78: ; 0x020AEF78
- ldrh r1, [r0, #0xa]
- ldr r0, [r0, #0x0]
- add r0, r0, r1, lsl #0x4
- bx lr
-
- arm_func_start FUN_020AEF88
-FUN_020AEF88: ; 0x020AEF88
- ldrh r1, [r0, #0x8]
- ldr r0, [r0, #0x0]
- add r0, r0, r1, lsl #0x4
- bx lr
-
- arm_func_start FUN_020AEF98
-FUN_020AEF98: ; 0x020AEF98
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020AF2F4
- cmp r0, #0x0
- movne r0, #0x0
- ldmneia sp!, {r4,pc}
- ldrh r1, [r4, #0xa]
- mov r0, r4
- bl FUN_020AF30C
- strh r0, [r4, #0xa]
- ldrh r1, [r4, #0xc]
- mov r0, #0x1
- add r1, r1, #0x1
- strh r1, [r4, #0xc]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020AEFD4
-FUN_020AEFD4: ; 0x020AEFD4
- mov r2, #0x0
- strh r2, [r0, #0xa]
- ldrh r1, [r0, #0xa]
- strh r1, [r0, #0x8]
- strh r2, [r0, #0xc]
- str r2, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020AEFF0
-FUN_020AEFF0: ; 0x020AEFF0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r3, [r5, #0x0]
- ldr r2, _020AF02C ; =UNK_020FF7D4
- ldr r0, [r5, #0x4]
- ldr r1, [r5, #0xc]
- ldr r4, [r2, r3, lsl #0x2]
- bl DC_FlushRange
- ldr r0, [r5, #0x4]
- ldr r1, [r5, #0x8]
- ldr r2, [r5, #0xc]
- blx r4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AF02C: .word UNK_020FF7D4
-
- arm_func_start GXS_LoadOBJ_2
-GXS_LoadOBJ_2:
- ldr ip, _020AF038 ; =GXS_LoadOBJ
- bx r12
- .balign 4
-_020AF038: .word GXS_LoadOBJ
-
- arm_func_start GXS_LoadOAM_2
-GXS_LoadOAM_2: ; 0x020AF03C
- ldr ip, _020AF044 ; =GXS_LoadOAM
- bx r12
- .balign 4
-_020AF044: .word GXS_LoadOAM
-
- arm_func_start FUN_020AF048
-FUN_020AF048: ; 0x020AF048
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl GXS_BeginLoadBGExtPltt
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl GXS_LoadBGExtPltt
- bl GXS_EndLoadBGExtPltt
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AF074
-FUN_020AF074: ; 0x020AF074
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl GXS_BeginLoadOBJExtPltt
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl GXS_LoadOBJExtPltt
- bl GXS_EndLoadOBJExtPltt
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start GXS_LoadBGPltt_2
-GXS_LoadBGPltt_2: ; 0x020AF0A0
- ldr ip, _020AF0A8 ; =GXS_LoadBGPltt
- bx r12
- .balign 4
-_020AF0A8: .word GXS_LoadBGPltt
-
- arm_func_start GXS_LoadOBJPltt_2
-GXS_LoadOBJPltt_2: ; 0x020AF0AC
- ldr ip, _020AF0B4 ; =GXS_LoadOBJPltt
- bx r12
- .balign 4
-_020AF0B4: .word GXS_LoadOBJPltt
-
- arm_func_start GXS_LoadBG3Scr_3
-GXS_LoadBG3Scr_3: ; 0x020AF0B8
- ldr ip, _020AF0C0 ; =GXS_LoadBG3Scr
- bx r12
- .balign 4
-_020AF0C0: .word GXS_LoadBG3Scr
-
- arm_func_start GXS_LoadBG2Scr_3
-GXS_LoadBG2Scr_3: ; 0x020AF0C4
- ldr ip, _020AF0CC ; =GXS_LoadBG2Scr
- bx r12
- .balign 4
-_020AF0CC: .word GXS_LoadBG2Scr
-
- arm_func_start GXS_LoadBG3Scr_2
-GXS_LoadBG3Scr_2: ; 0x020AF0D0
- ldr ip, _020AF0D8 ; =GXS_LoadBG3Scr
- bx r12
- .balign 4
-_020AF0D8: .word GXS_LoadBG3Scr
-
- arm_func_start GXS_LoadBG2Scr_2
-GXS_LoadBG2Scr_2: ; 0x020AF0DC
- ldr ip, _020AF0E4 ; =GXS_LoadBG2Scr
- bx r12
- .balign 4
-_020AF0E4: .word GXS_LoadBG2Scr
-
- arm_func_start GXS_LoadBG1Scr_2
-GXS_LoadBG1Scr_2: ; 0x020AF0E8
- ldr ip, _020AF0F0 ; =GXS_LoadBG1Scr
- bx r12
- .balign 4
-_020AF0F0: .word GXS_LoadBG1Scr
-
- arm_func_start GXS_LoadBG0Scr_2
-GXS_LoadBG0Scr_2: ; 0x020AF0F4
- ldr ip, _020AF0FC ; =GXS_LoadBG0Scr
- bx r12
- .balign 4
-_020AF0FC: .word GXS_LoadBG0Scr
-
- arm_func_start GXS_LoadBG3Char_2
-GXS_LoadBG3Char_2: ; 0x020AF100
- ldr ip, _020AF108 ; =GXS_LoadBG3Char
- bx r12
- .balign 4
-_020AF108: .word GXS_LoadBG3Char
-
- arm_func_start GXS_LoadBG2Char_2
-GXS_LoadBG2Char_2: ; 0x020AF10C
- ldr ip, _020AF114 ; =GXS_LoadBG2Char
- bx r12
- .balign 4
-_020AF114: .word GXS_LoadBG2Char
-
- arm_func_start GXS_LoadBG1Char_2
-GXS_LoadBG1Char_2: ; 0x020AF118
- ldr ip, _020AF120 ; =GXS_LoadBG1Char
- bx r12
- .balign 4
-_020AF120: .word GXS_LoadBG1Char
-
- arm_func_start GXS_LoadBG0Char_2
-GXS_LoadBG0Char_2: ; 0x020AF124
- ldr ip, _020AF12C ; =GXS_LoadBG0Char
- bx r12
- .balign 4
-_020AF12C: .word GXS_LoadBG0Char
-
- arm_func_start GX_LoadOBJ_2
-GX_LoadOBJ_2: ; 0x020AF130
- ldr ip, _020AF138 ; =GX_LoadOBJ
- bx r12
- .balign 4
-_020AF138: .word GX_LoadOBJ
-
- arm_func_start GX_LoadOAM_2
-GX_LoadOAM_2: ; 0x020AF13C
- ldr ip, _020AF144 ; =GX_LoadOAM
- bx r12
- .balign 4
-_020AF144: .word GX_LoadOAM
-
- arm_func_start FUN_020AF148
-FUN_020AF148: ; 0x020AF148
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl GX_BeginLoadBGExtPltt
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl GX_LoadBGExtPltt
- bl GX_EndLoadBGExtPltt
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AF174
-FUN_020AF174: ; 0x020AF174
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl GX_BeginLoadOBJExtPltt
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl GX_LoadOBJExtPltt
- bl GX_EndLoadOBJExtPltt
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start GX_LoadBGPltt_2
-GX_LoadBGPltt_2: ; 0x020AF1A0
- ldr ip, _020AF1A8 ; =GX_LoadBGPltt
- bx r12
- .balign 4
-_020AF1A8: .word GX_LoadBGPltt
-
- arm_func_start GX_LoadOBJPltt_2
-GX_LoadOBJPltt_2: ; 0x020AF1AC
- ldr ip, _020AF1B4 ; =GX_LoadOBJPltt
- bx r12
- .balign 4
-_020AF1B4: .word GX_LoadOBJPltt
-
- arm_func_start GX_LoadBG3Scr_3
-GX_LoadBG3Scr_3: ; 0x020AF1B8
- ldr ip, _020AF1C0 ; =GX_LoadBG3Scr
- bx r12
- .balign 4
-_020AF1C0: .word GX_LoadBG3Scr
-
- arm_func_start GX_LoadBG2Scr_3
-GX_LoadBG2Scr_3: ; 0x020AF1C4
- ldr ip, _020AF1CC ; =GX_LoadBG2Scr
- bx r12
- .balign 4
-_020AF1CC: .word GX_LoadBG2Scr
-
- arm_func_start GX_LoadBG3Scr_2
-GX_LoadBG3Scr_2: ; 0x020AF1D0
- ldr ip, _020AF1D8 ; =GX_LoadBG3Scr
- bx r12
- .balign 4
-_020AF1D8: .word GX_LoadBG3Scr
-
- arm_func_start GX_LoadBG2Scr_2
-GX_LoadBG2Scr_2: ; 0x020AF1DC
- ldr ip, _020AF1E4 ; =GX_LoadBG2Scr
- bx r12
- .balign 4
-_020AF1E4: .word GX_LoadBG2Scr
-
- arm_func_start GX_LoadBG1Scr_2
-GX_LoadBG1Scr_2: ; 0x020AF1E8
- ldr ip, _020AF1F0 ; =GX_LoadBG1Scr
- bx r12
- .balign 4
-_020AF1F0: .word GX_LoadBG1Scr
-
- arm_func_start GX_LoadBG0Scr_2
-GX_LoadBG0Scr_2: ; 0x020AF1F4
- ldr ip, _020AF1FC ; =GX_LoadBG0Scr
- bx r12
- .balign 4
-_020AF1FC: .word GX_LoadBG0Scr
-
- arm_func_start GX_LoadBG3Char_2
-GX_LoadBG3Char_2: ; 0x020AF200
- ldr ip, _020AF208 ; =GX_LoadBG3Char
- bx r12
- .balign 4
-_020AF208: .word GX_LoadBG3Char
-
- arm_func_start GX_LoadBG2Char_2
-GX_LoadBG2Char_2: ; 0x020AF20C
- ldr ip, _020AF214 ; =GX_LoadBG2Char
- bx r12
- .balign 4
-_020AF214: .word GX_LoadBG2Char
-
- arm_func_start GX_LoadBG1Char_2
-GX_LoadBG1Char_2: ; 0x020AF218
- ldr ip, _020AF220 ; =GX_LoadBG1Char
- bx r12
- .balign 4
-_020AF220: .word GX_LoadBG1Char
-
- arm_func_start GX_LoadBG0Char_2
-GX_LoadBG0Char_2: ; 0x020AF224
- ldr ip, _020AF22C ; =GX_LoadBG0Char
- bx r12
- .balign 4
-_020AF22C: .word GX_LoadBG0Char
-
- arm_func_start FUN_020AF230
-FUN_020AF230: ; 0x020AF230
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r2
- bl GX_BeginLoadClearImage
- mov r0, r5
- mov r1, r4
- bl GX_LoadClearImageDepth
- bl GX_EndLoadClearImage
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020AF25C
-FUN_020AF25C: ; 0x020AF25C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r2
- bl GX_BeginLoadClearImage
- mov r0, r5
- mov r1, r4
- bl GX_LoadClearImageColor
- bl GX_EndLoadClearImage
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020AF288
-FUN_020AF288: ; 0x020AF288
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl GX_BeginLoadTexPltt
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl GX_LoadTexPltt
- bl GX_EndLoadTexPltt
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AF2B4
-FUN_020AF2B4: ; 0x020AF2B4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- mov r5, r1
- mov r4, r2
- bl GX_BeginLoadTex
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl GX_LoadTex
- bl GX_EndLoadTex
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AF2E0
-FUN_020AF2E0: ; 0x020AF2E0
- ldrh r0, [r0, #0xc]
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- bx lr
-
- arm_func_start FUN_020AF2F4
-FUN_020AF2F4: ; 0x020AF2F4
- ldrh r1, [r0, #0xc]
- ldr r0, [r0, #0x4]
- cmp r1, r0
- moveq r0, #0x1
- movne r0, #0x0
- bx lr
-
- arm_func_start FUN_020AF30C
-FUN_020AF30C: ; 0x020AF30C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, r0
- add r0, r1, #0x1
- ldr r1, [r2, #0x4]
- bl _u32_div_f
- mov r0, r1, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AF334
-FUN_020AF334:
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x10
- add r3, r2, r3
- str r2, [sp, #0x0]
- str r2, [sp, #0x8]
- str r3, [sp, #0x4]
- str r3, [sp, #0xc]
- ldr r3, [r0, #0x0]
- add r12, sp, #0x0
- cmp r3, #0x0
- beq _020AF418
- mov r6, #0x0
-_020AF364:
- ldr r5, [r3, #0x0]
- ldr r4, [r12, #0x4]
- ldr r2, [r3, #0xc]
- cmp r5, r4
- bne _020AF3B8
- ldr r4, [r3, #0x4]
- add r4, r5, r4
- str r4, [sp, #0xc]
- ldr r4, [r3, #0x8]
- cmp r4, #0x0
- strne r2, [r4, #0xc]
- streq r2, [r0, #0x0]
- cmp r2, #0x0
- strne r4, [r2, #0x8]
- ldr r4, [r1, #0x0]
- cmp r4, #0x0
- strne r3, [r4, #0x8]
- ldr r4, [r1, #0x0]
- str r4, [r3, #0xc]
- str r6, [r3, #0x8]
- str r3, [r1, #0x0]
-_020AF3B8:
- ldr r5, [r3, #0x0]
- ldr lr, [r3, #0x4]
- ldr r4, [r12, #0x0]
- add lr, r5, lr
- cmp r4, lr
- bne _020AF40C
- str r5, [sp, #0x8]
- ldr r5, [r3, #0x8]
- ldr r4, [r3, #0xc]
- cmp r5, #0x0
- strne r4, [r5, #0xc]
- streq r4, [r0, #0x0]
- cmp r4, #0x0
- strne r5, [r4, #0x8]
- ldr lr, [r1, #0x0]
- cmp lr, #0x0
- strne r3, [lr, #0x8]
- ldr lr, [r1, #0x0]
- str lr, [r3, #0xc]
- str r6, [r3, #0x8]
- str r3, [r1, #0x0]
-_020AF40C:
- mov r3, r2
- cmp r2, #0x0
- bne _020AF364
-_020AF418:
- ldr r4, [r1, #0x0]
- cmp r4, #0x0
- ldrne r2, [r4, #0xc]
- strne r2, [r1, #0x0]
- cmp r4, #0x0
- addeq sp, sp, #0x10
- moveq r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r2, [sp, #0x8]
- mov r1, #0x0
- str r2, [r4, #0x0]
- ldr r3, [sp, #0xc]
- ldr r2, [sp, #0x8]
- sub r2, r3, r2
- str r2, [r4, #0x4]
- str r1, [r4, #0x8]
- str r1, [r4, #0xc]
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- strne r4, [r1, #0x8]
- ldr r2, [r0, #0x0]
- mov r1, #0x0
- str r2, [r4, #0xc]
- str r1, [r4, #0x8]
- str r4, [r0, #0x0]
- mov r0, #0x1
- add sp, sp, #0x10
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AF488
-FUN_020AF488:
- stmdb sp!, {r4-r10,lr}
- ldr r4, [r0, #0x0]
- ldr r9, [sp, #0x20]
- cmp r4, #0x0
- mov r5, #0x0
- beq _020AF4EC
- sub r12, r9, #0x1
- mvn lr, r12
-_020AF4A8:
- cmp r9, #0x1
- ldrls r8, [r4, #0x0]
- movls r6, r5
- movls r7, r3
- bls _020AF4D0
- ldr r7, [r4, #0x0]
- add r6, r7, r12
- and r8, lr, r6
- sub r6, r8, r7
- add r7, r3, r6
-_020AF4D0:
- ldr r10, [r4, #0x4]
- cmp r10, r7
- movcs r5, r4
- bhs _020AF4EC
- ldr r4, [r4, #0xc]
- cmp r4, #0x0
- bne _020AF4A8
-_020AF4EC:
- cmp r5, #0x0
- beq _020AF5B8
- cmp r6, #0x0
- beq _020AF54C
- ldr r9, [r1, #0x0]
- cmp r9, #0x0
- ldrne r3, [r9, #0xc]
- strne r3, [r1, #0x0]
- cmp r9, #0x0
- beq _020AF5B8
- ldr r4, [r5, #0x0]
- mov r3, #0x0
- str r4, [r9, #0x0]
- str r6, [r9, #0x4]
- str r3, [r9, #0x8]
- str r3, [r9, #0xc]
- ldr r3, [r0, #0x0]
- cmp r3, #0x0
- strne r9, [r3, #0x8]
- ldr r4, [r0, #0x0]
- mov r3, #0x0
- str r4, [r9, #0xc]
- str r3, [r9, #0x8]
- str r9, [r0, #0x0]
-_020AF54C:
- ldr r3, [r5, #0x4]
- sub r3, r3, r7
- str r3, [r5, #0x4]
- ldr r3, [r5, #0x0]
- add r3, r3, r7
- str r3, [r5, #0x0]
- ldr r3, [r5, #0x4]
- cmp r3, #0x0
- bne _020AF5AC
- ldr r4, [r5, #0x8]
- ldr r3, [r5, #0xc]
- cmp r4, #0x0
- strne r3, [r4, #0xc]
- streq r3, [r0, #0x0]
- cmp r3, #0x0
- strne r4, [r3, #0x8]
- ldr r0, [r1, #0x0]
- cmp r0, #0x0
- strne r5, [r0, #0x8]
- ldr r3, [r1, #0x0]
- mov r0, #0x0
- str r3, [r5, #0xc]
- str r0, [r5, #0x8]
- str r5, [r1, #0x0]
-_020AF5AC:
- str r8, [r2, #0x0]
- mov r0, #0x1
- ldmia sp!, {r4-r10,pc}
-_020AF5B8:
- mov r0, #0x0
- str r0, [r2, #0x0]
- ldmia sp!, {r4-r10,pc}
-
- arm_func_start FUN_020AF5C4
-FUN_020AF5C4:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r12, #0x0
- str r12, [sp, #0x0]
- bl FUN_020AF488
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AF5E0
-FUN_020AF5E0: ; 0x020AF5E0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr lr, [r1, #0x0]
- cmp lr, #0x0
- ldrne r12, [lr, #0xc]
- strne r12, [r1, #0x0]
- cmp lr, #0x0
- beq _020AF640
- str r2, [lr, #0x0]
- str r3, [lr, #0x4]
- mov r1, #0x0
- str r1, [lr, #0x8]
- str r1, [lr, #0xc]
- ldr r1, [r0, #0x0]
- add sp, sp, #0x4
- cmp r1, #0x0
- strne lr, [r1, #0x8]
- ldr r2, [r0, #0x0]
- mov r1, #0x0
- str r2, [lr, #0xc]
- str r1, [lr, #0x8]
- str lr, [r0, #0x0]
- mov r0, #0x1
- ldmia sp!, {pc}
-_020AF640:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020AF64C
-FUN_020AF64C: ; 0x020AF64C
- stmdb sp!, {r4,lr}
- subs lr, r1, #0x1
- mov r2, #0x0
- beq _020AF684
- mov r4, r0
-_020AF660:
- add r12, r2, #0x1
- add r2, r0, r2, lsl #0x4
- add r3, r0, r12, lsl #0x4
- str r3, [r2, #0xc]
- str r4, [r3, #0x8]
- mov r2, r12
- cmp r12, lr
- add r4, r4, #0x10
- blo _020AF660
-_020AF684:
- mov r2, #0x0
- str r2, [r0, #0x8]
- add r1, r0, r1, lsl #0x4
- str r2, [r1, #-0x4]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020AF698
-FUN_020AF698: ; 0x020AF698
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020AF6A4
-FUN_020AF6A4: ; 0x020AF6A4
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x30
- ldr r6, _020AF884 ; =UNK_020FF864
- add r5, sp, #0x0
- ldmia r6!, {r0-r3}
- mov r12, r5
- stmia r5!, {r0-r3}
- ldmia r6!, {r0-r3}
- stmia r5!, {r0-r3}
- ldr r4, _020AF888 ; =UNK_021CCD6C
- ldmia r6, {r0-r3}
- stmia r5, {r0-r3}
- ldr lr, [r4, #0x10]
- ldr r1, [r4, #0xc]
- add r0, lr, lr, lsr #0x1
- mov r4, lr, lsr #0x1
- sub r0, r1, r0
- mov r3, #0x0
-_020AF6EC:
- cmp r3, #0x0
- beq _020AF6FC
- cmp r3, #0x2
- bne _020AF734
-_020AF6FC:
- ldr r2, [r12, #0x0]
- cmp r2, #0x0
- beq _020AF734
- cmp lr, #0x0
- beq _020AF734
- ldr r1, [r12, #0x8]
- cmp r2, lr
- movhi r2, lr
- add r1, r1, r2
- str r1, [r12, #0x8]
- ldr r1, [r12, #0x0]
- sub lr, lr, r2
- sub r1, r1, r2
- str r1, [r12, #0x0]
-_020AF734:
- add r3, r3, #0x1
- cmp r3, #0x4
- add r12, r12, #0xc
- blo _020AF6EC
- ldr r1, [sp, #0xc]
- add r5, sp, #0x0
- sub r1, r1, r4
- str r1, [sp, #0xc]
- mov r3, #0x0
-_020AF758:
- ldr r2, [r5, #0x0]
- cmp r2, #0x0
- beq _020AF790
- cmp r0, #0x0
- beq _020AF790
- ldr r1, [r5, #0x4]
- cmp r2, r0
- movhi r2, r0
- add r1, r1, r2
- str r1, [r5, #0x4]
- ldr r1, [r5, #0x0]
- sub r0, r0, r2
- sub r1, r1, r2
- str r1, [r5, #0x0]
-_020AF790:
- add r3, r3, #0x1
- cmp r3, #0x4
- add r5, r5, #0xc
- blo _020AF758
- ldr r0, _020AF888 ; =UNK_021CCD6C
- bl FUN_020AF698
- ldr r0, _020AF88C ; =UNK_021CCD70
- bl FUN_020AF698
- ldr r0, _020AF888 ; =UNK_021CCD6C
- ldr r1, [r0, #0x18]
- ldr r0, [r0, #0x14]
- mov r1, r1, lsr #0x4
- bl FUN_020AF64C
- ldr r3, [sp, #0x8]
- ldr r1, _020AF888 ; =UNK_021CCD6C
- cmp r3, #0x0
- str r0, [r1, #0x8]
- beq _020AF7E8
- ldr r0, _020AF88C ; =UNK_021CCD70
- ldr r1, _020AF890 ; =UNK_021CCD74
- mov r2, #0x0
- bl FUN_020AF5E0
-_020AF7E8:
- ldr r3, [sp, #0x4]
- ldr r2, [sp, #0x8]
- cmp r3, #0x0
- beq _020AF804
- ldr r0, _020AF888 ; =UNK_021CCD6C
- ldr r1, _020AF890 ; =UNK_021CCD74
- bl FUN_020AF5E0
-_020AF804:
- ldr r3, [sp, #0x20]
- cmp r3, #0x0
- beq _020AF820
- ldr r0, _020AF88C ; =UNK_021CCD70
- ldr r1, _020AF890 ; =UNK_021CCD74
- mov r2, #0x40000
- bl FUN_020AF5E0
-_020AF820:
- ldr r3, [sp, #0x1c]
- ldr r0, [sp, #0x20]
- cmp r3, #0x0
- add r2, r0, #0x40000
- beq _020AF840
- ldr r0, _020AF888 ; =UNK_021CCD6C
- ldr r1, _020AF890 ; =UNK_021CCD74
- bl FUN_020AF5E0
-_020AF840:
- ldr r3, [sp, #0x28]
- cmp r3, #0x0
- beq _020AF85C
- ldr r0, _020AF888 ; =UNK_021CCD6C
- ldr r1, _020AF890 ; =UNK_021CCD74
- mov r2, #0x60000
- bl FUN_020AF5E0
-_020AF85C:
- ldr r3, [sp, #0x10]
- cmp r3, #0x0
- addeq sp, sp, #0x30
- ldmeqia sp!, {r4-r6,pc}
- ldr r0, _020AF888 ; =UNK_021CCD6C
- ldr r1, _020AF890 ; =UNK_021CCD74
- add r2, r4, #0x20000
- bl FUN_020AF5E0
- add sp, sp, #0x30
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020AF884: .word UNK_020FF864
-_020AF888: .word UNK_021CCD6C
-_020AF88C: .word UNK_021CCD70
-_020AF890: .word UNK_021CCD74
-
- arm_func_start FUN_020AF894
-FUN_020AF894: ; 0x020AF894
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r2, _020AF908 ; =0x7FFF0000
- ldr r1, _020AF90C ; =0x0000FFFF
- and r2, r0, r2
- and r3, r0, r1
- mov r1, r2, lsr #0x10
- and r0, r0, #0x80000000
- mov r2, r3, lsl #0x3
- movs r3, r1, lsl #0x4
- mov r0, r0, lsr #0x1f
- beq _020AF8FC
- cmp r0, #0x0
- beq _020AF8DC
- ldr r0, _020AF910 ; =UNK_021CCD70
- ldr r1, _020AF914 ; =UNK_021CCD74
- bl FUN_020AF334
- b _020AF8E8
-_020AF8DC:
- ldr r0, _020AF918 ; =UNK_021CCD6C
- ldr r1, _020AF914 ; =UNK_021CCD74
- bl FUN_020AF334
-_020AF8E8:
- cmp r0, #0x0
- movne r0, #0x0
- add sp, sp, #0x4
- moveq r0, #0x1
- ldmia sp!, {pc}
-_020AF8FC:
- mov r0, #0x2
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020AF908: .word 0x7FFF0000
-_020AF90C: .word 0x0000FFFF
-_020AF910: .word UNK_021CCD70
-_020AF914: .word UNK_021CCD74
-_020AF918: .word UNK_021CCD6C
-
- arm_func_start FUN_020AF91C
-FUN_020AF91C: ; 0x020AF91C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- cmp r0, #0x0
- moveq r5, #0x10
- addne r0, r0, #0xf
- bicne r5, r0, #0xf
- ldr r0, _020AF9B0 ; =0x0007FFF0
- mov r4, r1
- cmp r5, r0
- addcs sp, sp, #0x4
- movcs r0, #0x0
- ldmcsia sp!, {r4-r5,pc}
- cmp r4, #0x0
- beq _020AF96C
- ldr r0, _020AF9B4 ; =UNK_021CCD70
- ldr r1, _020AF9B8 ; =UNK_021CCD74
- add r2, sp, #0x0
- mov r3, r5
- bl FUN_020AF5C4
- b _020AF980
-_020AF96C:
- ldr r0, _020AF9BC ; =UNK_021CCD6C
- ldr r1, _020AF9B8 ; =UNK_021CCD74
- add r2, sp, #0x0
- mov r3, r5
- bl FUN_020AF5C4
-_020AF980:
- cmp r0, #0x0
- addeq sp, sp, #0x4
- moveq r0, #0x0
- ldmeqia sp!, {r4-r5,pc}
- ldr r1, [sp, #0x0]
- ldr r0, _020AF9C0 ; =0x0000FFFF
- mov r2, r5, lsr #0x4
- and r0, r0, r1, lsr #0x3
- orr r0, r0, r2, lsl #0x10
- orr r0, r0, r4, lsl #0x1f
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AF9B0: .word 0x0007FFF0
-_020AF9B4: .word UNK_021CCD70
-_020AF9B8: .word UNK_021CCD74
-_020AF9BC: .word UNK_021CCD6C
-_020AF9C0: .word 0x0000FFFF
-
- arm_func_start FUN_020AF9C4
-FUN_020AF9C4: ; 0x020AF9C4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr ip, _020AFA14 ; =UNK_021CCD6C
- str r0, [r12, #0xc]
- str r1, [r12, #0x10]
- str r2, [r12, #0x14]
- str r3, [r12, #0x18]
- bl FUN_020AF6A4
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r3, _020AFA18 ; =FUN_020AF91C
- ldr r1, _020AFA1C ; =UNK_021064B8
- ldr r2, _020AFA20 ; =FUN_020AF894
- ldr r0, _020AFA24 ; =UNK_021064BC
- str r3, [r1, #0x0]
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020AFA14: .word UNK_021CCD6C
-_020AFA18: .word FUN_020AF91C
-_020AFA1C: .word UNK_021064B8
-_020AFA20: .word FUN_020AF894
-_020AFA24: .word UNK_021064BC
-
- arm_func_start FUN_020AFA28
-FUN_020AFA28: ; 0x020AFA28
- mov r0, r0, lsl #0x4
- bx lr
-
- arm_func_start FUN_020AFA30
-FUN_020AFA30:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020AFA78 ; =UNK_021CCD88
- ldr r1, [r0, #0x10]
- ldr r0, [r0, #0xc]
- mov r1, r1, lsr #0x4
- bl FUN_020AF64C
- ldr r1, _020AFA78 ; =UNK_021CCD88
- str r0, [r1, #0x4]
- mov r0, r1
- bl FUN_020AF698
- ldr r0, _020AFA78 ; =UNK_021CCD88
- ldr r1, _020AFA7C ; =UNK_021CCD8C
- ldr r3, [r0, #0x8]
- mov r2, #0x0
- bl FUN_020AF5E0
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020AFA78: .word UNK_021CCD88
-_020AFA7C: .word UNK_021CCD8C
-
- arm_func_start FUN_020AFA80
-FUN_020AFA80: ; 0x020AFA80
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r1, #0x10000
- rsb r2, r1, #0x0
- ldr r1, _020AFAC8 ; =0x0000FFFF
- and r2, r0, r2
- and r12, r0, r1
- mov r3, r2, lsr #0x10
- ldr r0, _020AFACC ; =UNK_021CCD88
- ldr r1, _020AFAD0 ; =UNK_021CCD8C
- mov r2, r12, lsl #0x3
- mov r3, r3, lsl #0x3
- bl FUN_020AF334
- cmp r0, #0x0
- moveq r0, #0x1
- movne r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020AFAC8: .word 0x0000FFFF
-_020AFACC: .word UNK_021CCD88
-_020AFAD0: .word UNK_021CCD8C
-
- arm_func_start FUN_020AFAD4
-FUN_020AFAD4: ; 0x020AFAD4
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x8
- cmp r0, #0x0
- moveq r4, #0x8
- addne r0, r0, #0x7
- bicne r4, r0, #0x7
- ldr r0, _020AFB98 ; =0x0007FFF8
- cmp r4, r0
- addcs sp, sp, #0x8
- movcs r0, #0x0
- ldmcsia sp!, {r4,pc}
- cmp r1, #0x0
- beq _020AFB50
- mov r12, #0x8
- ldr r0, _020AFB9C ; =UNK_021CCD88
- ldr r1, _020AFBA0 ; =UNK_021CCD8C
- add r2, sp, #0x4
- mov r3, r4
- str r12, [sp, #0x0]
- bl FUN_020AF488
- ldr r2, [sp, #0x4]
- add r1, r2, r4
- cmp r1, #0x10000
- bls _020AFB6C
- ldr r0, _020AFB9C ; =UNK_021CCD88
- ldr r1, _020AFBA0 ; =UNK_021CCD8C
- mov r3, r4
- bl FUN_020AF334
- add sp, sp, #0x8
- mov r0, #0x0
- ldmia sp!, {r4,pc}
-_020AFB50:
- ldr r0, _020AFB9C ; =UNK_021CCD88
- mov r12, #0x10
- ldr r1, _020AFBA0 ; =UNK_021CCD8C
- add r2, sp, #0x4
- mov r3, r4
- str r12, [sp, #0x0]
- bl FUN_020AF488
-_020AFB6C:
- cmp r0, #0x0
- addeq sp, sp, #0x8
- moveq r0, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r1, [sp, #0x4]
- ldr r0, _020AFBA4 ; =0x0000FFFF
- mov r2, r4, lsr #0x3
- and r0, r0, r1, lsr #0x3
- orr r0, r0, r2, lsl #0x10
- add sp, sp, #0x8
- ldmia sp!, {r4,pc}
- .balign 4
-_020AFB98: .word 0x0007FFF8
-_020AFB9C: .word UNK_021CCD88
-_020AFBA0: .word UNK_021CCD8C
-_020AFBA4: .word 0x0000FFFF
-
- arm_func_start FUN_020AFBA8
-FUN_020AFBA8: ; 0x020AFBA8
- stmdb sp!, {r4,lr}
- ldr ip, _020AFBE8 ; =UNK_021CCD88
- mov r4, r3
- str r0, [r12, #0x8]
- str r1, [r12, #0xc]
- str r2, [r12, #0x10]
- bl FUN_020AFA30
- cmp r4, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r3, _020AFBEC ; =FUN_020AFAD4
- ldr r1, _020AFBF0 ; =UNK_021064C0
- ldr r2, _020AFBF4 ; =FUN_020AFA80
- ldr r0, _020AFBF8 ; =UNK_021064C4
- str r3, [r1, #0x0]
- str r2, [r0, #0x0]
- ldmia sp!, {r4,pc}
- .balign 4
-_020AFBE8: .word UNK_021CCD88
-_020AFBEC: .word FUN_020AFAD4
-_020AFBF0: .word UNK_021064C0
-_020AFBF4: .word FUN_020AFA80
-_020AFBF8: .word UNK_021064C4
-
- arm_func_start FUN_020AFBFC
-FUN_020AFBFC: ; 0x020AFBFC
- mov r0, r0, lsl #0x4
- bx lr
-
- arm_func_start FUN_020AFC04
-FUN_020AFC04: ; 0x020AFC04
- ldrh r2, [r0, #0x0]
- cmp r2, r1
- ldrhi r0, [r0, #0x4]
- addhi r0, r0, r1, lsl #0x4
- movls r0, #0x0
- bx lr
-
- arm_func_start FUN_020AFC1C
-FUN_020AFC1C: ; 0x020AFC1C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r1, [r0, #0x4]
- mov r6, #0x0
- add r1, r1, r0
- str r1, [r0, #0x4]
- ldr r1, [r0, #0x8]
- add r1, r1, r0
- str r1, [r0, #0x8]
- ldr r1, [r0, #0xc]
- add r1, r1, r0
- str r1, [r0, #0xc]
- ldrh r1, [r0, #0x0]
- ldr r4, [r0, #0x4]
- ldr lr, [r0, #0x8]
- cmp r1, #0x0
- ldr r12, [r0, #0xc]
- bls _020AFCCC
- mov r1, r6
-_020AFC68:
- add r2, r4, r6, lsl #0x4
- ldr r5, [r2, #0xc]
- mov r3, r6, lsl #0x4
- add r5, lr, r5
- str r5, [r2, #0xc]
- ldrh r7, [r4, r3]
- mov r5, r1
- cmp r7, #0x0
- bls _020AFCB4
-_020AFC8C:
- ldr r9, [r2, #0xc]
- add r7, r5, #0x1
- ldr r8, [r9, r5, lsl #0x3]
- mov r7, r7, lsl #0x10
- add r8, r12, r8
- str r8, [r9, r5, lsl #0x3]
- ldrh r8, [r4, r3]
- mov r5, r7, lsr #0x10
- cmp r5, r8
- blo _020AFC8C
-_020AFCB4:
- add r2, r6, #0x1
- mov r2, r2, lsl #0x10
- ldrh r3, [r0, #0x0]
- mov r6, r2, lsr #0x10
- cmp r6, r3
- blo _020AFC68
-_020AFCCC:
- ldr r1, [r0, #0x14]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r9,pc}
- add r1, r1, r0
- str r1, [r0, #0x14]
- ldr r1, [r0, #0x14]
- mov r12, #0x0
- add r2, r1, #0x8
- ldr r0, [r2, #0x4]
- add r0, r0, r2
- str r0, [r2, #0x4]
- ldrh r0, [r1, #0x8]
- cmp r0, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r9,pc}
- mov r0, r12
- mov r6, r12
-_020AFD14:
- ldr r5, [r2, #0x4]
- mov r3, r6
- add r1, r5, r0
- ldr r4, [r1, #0x4]
- add r4, r4, r2
- str r4, [r1, #0x4]
- ldr r4, [r1, #0x8]
- add r4, r4, r2
- str r4, [r1, #0x8]
- ldrh r4, [r5, r0]
- cmp r4, #0x0
- bls _020AFD6C
- mov r7, r6
-_020AFD48:
- ldr r5, [r1, #0x8]
- add r3, r3, #0x1
- ldr r4, [r5, r7]
- add r4, r4, r2
- str r4, [r5, r7]
- ldrh r4, [r1, #0x0]
- add r7, r7, #0x4
- cmp r3, r4
- blo _020AFD48
-_020AFD6C:
- ldrh r1, [r2, #0x0]
- add r12, r12, #0x1
- add r0, r0, #0xc
- cmp r12, r1
- blo _020AFD14
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start thunk_FUN_020afda0
-thunk_FUN_020afda0: ; 0x020AFD88
- ldr ip, _020AFD90 ; =FUN_020AFDA0
- bx r12
- .balign 4
-_020AFD90: .word FUN_020AFDA0
-
- arm_func_start thunk_FUN_020afda0_2
-thunk_FUN_020afda0_2: ; 0x020AFD94
- ldr ip, _020AFD9C ; =FUN_020AFDA0
- bx r12
- .balign 4
-_020AFD9C: .word FUN_020AFDA0
-
- arm_func_start FUN_020AFDA0
-FUN_020AFDA0: ; 0x020AFDA0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020AFDE4 ; =0x41424E4B
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020AFC1C
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AFDE4: .word 0x41424E4B
-
- arm_func_start FUN_020AFDE8
-FUN_020AFDE8: ; 0x020AFDE8
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- ldr r1, [r5, #0x4]
- add r1, r1, r5
- str r1, [r5, #0x4]
- bl FUN_020AFF10
- ldrh r1, [r5, #0x0]
- mov r4, r0
- mov r6, #0x0
- cmp r1, #0x0
- bls _020AFE44
-_020AFE14:
- mov r0, r5
- mov r1, r6
- bl FUN_020AFE8C
- ldr r2, [r0, #0x4]
- add r1, r6, #0x1
- add r2, r2, r4
- str r2, [r0, #0x4]
- mov r0, r1, lsl #0x10
- ldrh r1, [r5, #0x0]
- mov r6, r0, lsr #0x10
- cmp r6, r1
- blo _020AFE14
-_020AFE44:
- ldr r0, [r5, #0xc]
- cmp r0, #0x0
- beq _020AFE6C
- add r0, r0, r5
- str r0, [r5, #0xc]
- ldr r1, [r5, #0xc]
- ldr r0, [r1, #0x4]
- add r0, r0, r1
- str r0, [r1, #0x4]
- str r1, [r5, #0xc]
-_020AFE6C:
- ldr r0, [r5, #0x14]
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- add r0, r0, r5
- str r0, [r5, #0x14]
- ldr r0, [r5, #0x14]
- bl FUN_020AFF00
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020AFE8C
-FUN_020AFE8C: ; 0x020AFE8C
- ldrh r2, [r0, #0x0]
- cmp r1, r2
- movcs r0, #0x0
- bxcs lr
- ldrh r2, [r0, #0x2]
- ands r2, r2, #0x1
- ldrne r0, [r0, #0x4]
- addne r0, r0, r1, lsl #0x4
- ldreq r0, [r0, #0x4]
- addeq r0, r0, r1, lsl #0x3
- bx lr
-
- arm_func_start FUN_020AFEB8
-FUN_020AFEB8: ; 0x020AFEB8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020AFEFC ; =0x4345424B
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020AFDE8
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020AFEFC: .word 0x4345424B
-
- arm_func_start FUN_020AFF00
-FUN_020AFF00: ; 0x020AFF00
- ldr ip, _020AFF0C ; =FUN_020B01B0
- add r0, r0, #0x8
- bx r12
- .balign 4
-_020AFF0C: .word FUN_020B01B0
-
- arm_func_start FUN_020AFF10
-FUN_020AFF10: ; 0x020AFF10
- ldrh r1, [r0, #0x2]
- ands r1, r1, #0x1
- ldrneh r1, [r0, #0x0]
- ldrne r0, [r0, #0x4]
- addne r0, r0, r1, lsl #0x4
- ldreqh r1, [r0, #0x0]
- ldreq r0, [r0, #0x4]
- addeq r0, r0, r1, lsl #0x3
- bx lr
-
- arm_func_start FUN_020AFF34
-FUN_020AFF34: ; 0x020AFF34
- ldrh r2, [r0, #0x0]
- cmp r1, r2
- ldrcc r0, [r0, #0x4]
- addcc r0, r0, r1, lsl #0x3
- movcs r0, #0x0
- bx lr
-
- arm_func_start FUN_020AFF4C
-FUN_020AFF4C: ; 0x020AFF4C
- stmdb sp!, {r4,lr}
- ldr r1, [r0, #0x4]
- mov r4, #0x0
- add r1, r1, r0
- str r1, [r0, #0x4]
- ldr r1, [r0, #0x8]
- add r1, r1, r0
- str r1, [r0, #0x8]
- ldrh r1, [r0, #0x0]
- ldr lr, [r0, #0x4]
- cmp r1, #0x0
- bls _020AFFA8
-_020AFF7C:
- add r3, lr, r4, lsl #0x3
- ldr r12, [r0, #0x8]
- ldr r2, [r3, #0x4]
- add r1, r4, #0x1
- add r2, r12, r2
- str r2, [r3, #0x4]
- mov r1, r1, lsl #0x10
- ldrh r2, [r0, #0x0]
- mov r4, r1, lsr #0x10
- cmp r4, r2
- blo _020AFF7C
-_020AFFA8:
- ldr r1, [r0, #0x10]
- cmp r1, #0x0
- ldmeqia sp!, {r4,pc}
- add r1, r1, r0
- str r1, [r0, #0x10]
- ldr r0, [r0, #0x10]
- bl FUN_020AFFC8
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020AFFC8
-FUN_020AFFC8: ; 0x020AFFC8
- ldr ip, _020AFFD4 ; =FUN_020B01B0
- add r0, r0, #0x8
- bx r12
- .balign 4
-_020AFFD4: .word FUN_020B01B0
-
- arm_func_start FUN_020AFFD8
-FUN_020AFFD8: ; 0x020AFFD8
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020B001C ; =0x4D43424B
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020AFF4C
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B001C: .word 0x4D43424B
-
- arm_func_start FUN_020B0020
-FUN_020B0020: ; 0x020B0020
- ldr r1, [r0, #0x14]
- add r1, r1, r0
- str r1, [r0, #0x14]
- bx lr
-
- arm_func_start FUN_020B0030
-FUN_020B0030: ; 0x020B0030
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020B0074 ; =0x43484152
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020B0020
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B0074: .word 0x43484152
-
- arm_func_start FUN_020B0078
-FUN_020B0078: ; 0x020B0078
- ldr r1, [r0, #0x14]
- add r1, r1, r0
- str r1, [r0, #0x14]
- bx lr
-
- arm_func_start FUN_020B0088
-FUN_020B0088: ; 0x020B0088
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020B00CC ; =0x43484152
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020B0078
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B00CC: .word 0x43484152
-
- arm_func_start FUN_020B00D0
-FUN_020B00D0: ; 0x020B00D0
- ldr r1, [r0, #0xc]
- add r1, r1, r0
- str r1, [r0, #0xc]
- bx lr
-
- arm_func_start FUN_020B00E0
-FUN_020B00E0: ; 0x020B00E0
- ldr r1, [r0, #0x4]
- add r1, r1, r0
- str r1, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_020B00F0
-FUN_020B00F0: ; 0x020B00F0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020B0134 ; =0x50434D50
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020B00E0
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B0134: .word 0x50434D50
-
- arm_func_start FUN_020B0138
-FUN_020B0138: ; 0x020B0138
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldr r1, _020B017C ; =0x504C5454
- bl FUN_020B01F8
- movs r4, r0
- moveq r0, #0x0
- addeq sp, sp, #0x4
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r5,pc}
- add r0, r4, #0x8
- bl FUN_020B00D0
- add r0, r4, #0x8
- str r0, [r5, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B017C: .word 0x504C5454
-
- arm_func_start FUN_020B0180
-FUN_020B0180: ; 0x020B0180
- stmdb sp!, {r4,lr}
- mov r4, r1
- ldr r1, _020B01AC ; =0x5343524E
- bl FUN_020B01F8
- cmp r0, #0x0
- addne r0, r0, #0x8
- strne r0, [r4, #0x0]
- movne r0, #0x1
- moveq r0, #0x0
- streq r0, [r4, #0x0]
- ldmia sp!, {r4,pc}
- .balign 4
-_020B01AC: .word 0x5343524E
-
- arm_func_start FUN_020B01B0
-FUN_020B01B0: ; 0x020B01B0
- ldr r1, [r0, #0x4]
- mov r12, #0x0
- add r1, r1, r0
- str r1, [r0, #0x4]
- ldrh r1, [r0, #0x0]
- cmp r1, #0x0
- bxls lr
-_020B01CC:
- ldr r3, [r0, #0x4]
- add r1, r12, #0x1
- ldr r2, [r3, r12, lsl #0x2]
- mov r1, r1, lsl #0x10
- add r2, r0, r2
- str r2, [r3, r12, lsl #0x2]
- ldrh r2, [r0, #0x0]
- mov r12, r1, lsr #0x10
- cmp r12, r2
- blo _020B01CC
- bx lr
-
- arm_func_start FUN_020B01F8
-FUN_020B01F8:
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldrh r2, [r0, #0xc]
- ldrh r12, [r0, #0xe]
- mov lr, #0x0
- add r0, r0, r2
- cmp r12, #0x0
- bls _020B0244
-_020B0218:
- ldr r2, [r0, #0x0]
- cmp r2, r1
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- add r2, lr, #0x1
- mov r2, r2, lsl #0x10
- ldr r3, [r0, #0x4]
- mov lr, r2, lsr #0x10
- cmp lr, r12
- add r0, r0, r3
- blo _020B0218
-_020B0244:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020B0250
-FUN_020B0250: ; 0x020B0250
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r5, _020B02C0 ; =0x04000470
- mov r0, r0, lsl #0xc
- str r0, [r5, #0x0]
- mov r4, r1, lsl #0xc
- ldr r12, [sp, #0x10]
- ldr r0, [sp, #0x14]
- ldr r1, [sp, #0x1c]
- str r4, [r5, #0x0]
- mov r4, r2, lsl #0xc
- ldr r2, [sp, #0x18]
- ldr lr, _020B02C4 ; =0x0400046C
- str r4, [r5, #0x0]
- mov r4, r3, lsl #0xc
- ldr r3, [sp, #0x20]
- str r4, [lr, #0x0]
- mov r12, r12, lsl #0xc
- str r12, [lr, #0x0]
- mov r12, #0x1000
- mov r0, r0, lsl #0xc
- mov r1, r1, lsl #0xc
- mov r2, r2, lsl #0xc
- mov r3, r3, lsl #0xc
- str r12, [lr, #0x0]
- bl FUN_020B0340
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B02C0: .word 0x04000470
-_020B02C4: .word 0x0400046C
-
- arm_func_start FUN_020B02C8
-FUN_020B02C8: ; 0x020B02C8
- stmdb sp!, {lr}
- sub sp, sp, #0x14
- ldr r2, _020B0330 ; =0xBFFF0000
- ldr r0, _020B0334 ; =0x04000580
- mov r1, #0x400000
- str r2, [r0, #0x0]
- rsb r0, r1, #0x0
- str r0, [sp, #0x0]
- str r1, [sp, #0x4]
- mov r0, #0x0
- str r1, [sp, #0x8]
- mov r1, #0x1
- str r1, [sp, #0xc]
- mov r2, r0
- mov r1, #0xc0000
- mov r3, #0x100000
- str r0, [sp, #0x10]
- bl G3i_OrthoW_
- ldr r1, _020B0338 ; =0x0400044C
- mov r2, #0x0
- ldr r0, _020B033C ; =0x04000440
- str r2, [r1, #0x0]
- mov r1, #0x1
- str r1, [r0, #0x0]
- add sp, sp, #0x14
- ldmia sp!, {pc}
- .balign 4
-_020B0330: .word 0xBFFF0000
-_020B0334: .word 0x04000580
-_020B0338: .word 0x0400044C
-_020B033C: .word 0x04000440
-
- arm_func_start FUN_020B0340
-FUN_020B0340: ; 0x020B0340
- stmdb sp!, {r4-r6,lr}
- mov r3, r3, lsl #0x8
- mov r0, r0, lsl #0x8
- mov r4, r3, asr #0x10
- mov r3, r0, asr #0x10
- mov r0, r4, lsl #0x10
- mov r3, r3, lsl #0x10
- mov r1, r1, lsl #0x8
- mov r1, r1, asr #0x10
- mov r1, r1, lsl #0x10
- mov r2, r2, lsl #0x8
- mov r2, r2, asr #0x10
- mov r2, r2, lsl #0x10
- ldr ip, _020B03F4 ; =0x04000500
- mov lr, #0x1
- mov r6, r0, lsr #0x10
- mov r5, r3, lsr #0x10
- mov r3, r1, lsr #0x10
- mov r1, r2, lsr #0x10
- ldr r4, _020B03F8 ; =0x04000488
- str lr, [r12, #0x0]
- orr r0, r5, r6, lsl #0x10
- ldr lr, _020B03FC ; =0x0400048C
- str r0, [r4, #0x0]
- mov r0, #0x10000000
- str r0, [lr, #0x0]
- mov r12, #0x0
- str r12, [lr, #0x0]
- orr r2, r3, r6, lsl #0x10
- ldr r0, _020B0400 ; =0x10001000
- str r2, [r4, #0x0]
- str r0, [lr, #0x0]
- str r12, [lr, #0x0]
- orr r0, r3, r1, lsl #0x10
- str r0, [r4, #0x0]
- mov r0, #0x1000
- str r0, [lr, #0x0]
- str r12, [lr, #0x0]
- orr r0, r5, r1, lsl #0x10
- str r0, [r4, #0x0]
- str r12, [lr, #0x0]
- ldr r0, _020B0404 ; =0x04000504
- str r12, [lr, #0x0]
- str r12, [r0, #0x0]
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B03F4: .word 0x04000500
-_020B03F8: .word 0x04000488
-_020B03FC: .word 0x0400048C
-_020B0400: .word 0x10001000
-_020B0404: .word 0x04000504
-
- arm_func_start FUN_020B0408
-FUN_020B0408:
- ldr r1, [r0, #0x14]
- cmp r1, #0x0
- ldreq r0, [r0, #0x18]
- ldreq r1, [r0, #0x8]
- cmp r1, #0x2
- beq _020B0428
- cmp r1, #0x4
- bne _020B0430
-_020B0428:
- mov r0, #0x1
- bx lr
-_020B0430:
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020B0438
-FUN_020B0438: ; 0x020B0438
- ldr ip, _020B0444 ; =FUN_020B0448
- str r1, [r0, #0x18]
- bx r12
- .balign 4
-_020B0444: .word FUN_020B0448
-
- arm_func_start FUN_020B0448
-FUN_020B0448: ; 0x020B0448
- ldr r1, [r0, #0x10]
- cmp r1, #0x0
- movgt r2, #0x1
- ldr r1, [r0, #0x4]
- movle r2, #0x0
- eors r1, r2, r1
- beq _020B047C
- ldr r2, [r0, #0x18]
- ldrh r1, [r2, #0x2]
- ldr r2, [r2, #0xc]
- add r1, r2, r1, lsl #0x3
- str r1, [r0, #0x0]
- b _020B0494
-_020B047C:
- ldr r2, [r0, #0x18]
- ldrh r1, [r2, #0x0]
- ldr r2, [r2, #0xc]
- add r1, r2, r1, lsl #0x3
- sub r1, r1, #0x8
- str r1, [r0, #0x0]
-_020B0494:
- ldr ip, _020B04A4 ; =FUN_020B0534
- mov r1, #0x0
- str r1, [r0, #0xc]
- bx r12
- .balign 4
-_020B04A4: .word FUN_020B0534
-
- arm_func_start FUN_020B04A8
-FUN_020B04A8: ; 0x020B04A8
- mov r1, #0x0
- str r1, [r0, #0x0]
- str r1, [r0, #0x4]
- str r1, [r0, #0x8]
- strh r1, [r0, #0xc]
- bx lr
-
- arm_func_start FUN_020B04C0
-FUN_020B04C0: ; 0x020B04C0
- stmdb sp!, {r4,lr}
- mov r4, r0
- add r0, r4, #0x1c
- bl FUN_020B04A8
- mov r1, #0x0
- str r1, [r4, #0x0]
- str r1, [r4, #0x4]
- mov r0, #0x1
- str r0, [r4, #0x8]
- str r1, [r4, #0xc]
- mov r0, #0x1000
- str r0, [r4, #0x10]
- str r1, [r4, #0x14]
- str r1, [r4, #0x18]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B04FC
-FUN_020B04FC: ; 0x020B04FC
- ldr r1, [r0, #0x18]
- ldr r2, [r0, #0x0]
- ldr r0, [r1, #0xc]
- sub r0, r2, r0
- mov r0, r0, lsl #0xd
- mov r0, r0, lsr #0x10
- bx lr
-
- arm_func_start FUN_020B0518
-FUN_020B0518:
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020B06EC
- cmp r0, #0x0
- movne r1, #0x0
- strne r1, [r4, #0xc]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B0534
-FUN_020B0534:
- stmdb sp!, {r4-r8,lr}
- mov r8, r0
- ldr r0, [r8, #0x8]
- mov r7, #0x0
- cmp r0, #0x1
- movne r0, r7
- ldmneia sp!, {r4-r8,pc}
- ldr r2, [r8, #0x10]
- mov r0, #0x800
- smull r3, r1, r2, r1
- adds r0, r3, r0
- adc r1, r1, r7
- mov r0, r0, lsr #0xc
- orr r0, r0, r1, lsl #0x14
- bl abs
- ldr r1, [r8, #0xc]
- add r6, r8, #0xc
- add r0, r1, r0
- str r0, [r8, #0xc]
- mov r4, r7
- mov r5, #0x1
- b _020B06A8
-_020B058C:
- ldr r0, [r8, #0x0]
- ldr r1, [r6, #0x0]
- ldrh r0, [r0, #0x4]
- mov r7, r5
- sub r0, r1, r0, lsl #0xc
- str r0, [r6, #0x0]
- ldr r0, [r8, #0x10]
- cmp r0, #0x0
- movgt r1, r5
- ldr r0, [r8, #0x4]
- movle r1, r4
- eors r0, r1, r0
- ldrne r0, [r8, #0x0]
- addne r0, r0, #0x8
- strne r0, [r8, #0x0]
- ldreq r0, [r8, #0x0]
- subeq r0, r0, #0x8
- streq r0, [r8, #0x0]
- ldr r1, [r8, #0x10]
- ldr r0, [r8, #0x0]
- cmp r1, #0x0
- movgt r2, r5
- ldr r1, [r8, #0x4]
- movle r2, r4
- eors r1, r2, r1
- beq _020B0614
- ldr r2, [r8, #0x18]
- ldrh r1, [r2, #0x0]
- ldr r2, [r2, #0xc]
- add r1, r2, r1, lsl #0x3
- cmp r0, r1
- movcs r0, r5
- movcc r0, r4
- b _020B0634
-_020B0614:
- ldr r2, [r8, #0x18]
- ldrh r1, [r2, #0x2]
- ldr r2, [r2, #0xc]
- add r1, r2, r1, lsl #0x3
- sub r1, r1, #0x8
- cmp r0, r1
- movls r0, r5
- movhi r0, r4
-_020B0634:
- cmp r0, #0x0
- beq _020B0644
- mov r0, r8
- bl FUN_020B0710
-_020B0644:
- ldr r0, [r8, #0x1c]
- cmp r0, #0x0
- beq _020B06A8
- ldr r0, [r8, #0x18]
- ldr r2, [r8, #0x1c]
- ldr r1, [r8, #0x0]
- ldr r0, [r0, #0xc]
- cmp r2, #0x2
- sub r0, r1, r0
- mov r0, r0, lsl #0xd
- mov r1, r0, lsr #0x10
- beq _020B0680
- cmp r2, #0x3
- beq _020B069C
- b _020B06A8
-_020B0680:
- ldrh r0, [r8, #0x28]
- cmp r1, r0
- bne _020B06A8
- ldr r0, [r8, #0x20]
- ldr r2, [r8, #0x24]
- blx r2
- b _020B06A8
-_020B069C:
- ldr r0, [r8, #0x20]
- ldr r2, [r8, #0x24]
- blx r2
-_020B06A8:
- ldr r0, [r8, #0x8]
- cmp r0, #0x0
- beq _020B06CC
- ldr r0, [r8, #0x0]
- ldr r1, [r8, #0xc]
- ldrh r0, [r0, #0x4]
- cmp r1, r0, lsl #0xc
- movge r0, r5
- bge _020B06D0
-_020B06CC:
- mov r0, r4
-_020B06D0:
- cmp r0, #0x0
- bne _020B058C
- mov r0, r7
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B06E0
-FUN_020B06E0: ; 0x020B06E0
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020B06EC
-FUN_020B06EC:
- ldr r3, [r0, #0x18]
- ldrh r2, [r3, #0x0]
- cmp r1, r2
- ldrcc r2, [r3, #0xc]
- addcc r1, r2, r1, lsl #0x3
- strcc r1, [r0, #0x0]
- movcc r0, #0x1
- movcs r0, #0x0
- bx lr
-
- arm_func_start FUN_020B0710
-FUN_020B0710: ; 0x020B0710
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r0, [r4, #0x14]
- cmp r0, #0x0
- ldreq r0, [r4, #0x18]
- ldreq r0, [r0, #0x8]
- cmp r0, #0x3
- beq _020B0738
- cmp r0, #0x4
- bne _020B07B4
-_020B0738:
- ldr r0, [r4, #0x4]
- eor r0, r0, #0x1
- str r0, [r4, #0x4]
- ldr r1, [r4, #0x18]
- ldr r2, [r4, #0x0]
- ldrh r0, [r1, #0x2]
- ldr r1, [r1, #0xc]
- add r0, r1, r0, lsl #0x3
- sub r0, r0, #0x8
- cmp r2, r0
- bhi _020B0800
- ldr r0, [r4, #0x1c]
- cmp r0, #0x1
- bne _020B0780
- ldr r0, [r4, #0x20]
- ldr r1, [r4, #0xc]
- ldr r2, [r4, #0x24]
- blx r2
-_020B0780:
- ldr r0, [r4, #0x14]
- cmp r0, #0x0
- ldreq r0, [r4, #0x18]
- ldreq r0, [r0, #0x8]
- cmp r0, #0x2
- beq _020B07A8
- cmp r0, #0x4
- movne r0, #0x0
- strne r0, [r4, #0x8]
- bne _020B0800
-_020B07A8:
- mov r0, r4
- bl FUN_020B0448
- b _020B0800
-_020B07B4:
- ldr r0, [r4, #0x1c]
- cmp r0, #0x1
- bne _020B07D0
- ldr r0, [r4, #0x20]
- ldr r1, [r4, #0xc]
- ldr r2, [r4, #0x24]
- blx r2
-_020B07D0:
- ldr r0, [r4, #0x14]
- cmp r0, #0x0
- ldreq r0, [r4, #0x18]
- ldreq r0, [r0, #0x8]
- cmp r0, #0x2
- beq _020B07F8
- cmp r0, #0x4
- movne r0, #0x0
- strne r0, [r4, #0x8]
- bne _020B0800
-_020B07F8:
- mov r0, r4
- bl FUN_020B0448
-_020B0800:
- ldr r1, [r4, #0x18]
- ldr r2, [r4, #0x0]
- ldrh r0, [r1, #0x0]
- ldr r1, [r1, #0xc]
- add r0, r1, r0, lsl #0x3
- sub r0, r0, #0x8
- cmp r2, r0
- strhi r0, [r4, #0x0]
- ldmhiia sp!, {r4,pc}
- cmp r2, r1
- strcc r1, [r4, #0x0]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B0830
-FUN_020B0830: ; 0x020B0830
- ldrh r3, [r0, #0x6]
- ldrh r2, [r0, #0x8]
- mov r12, #0x0
- add r1, r3, #0x1
- cmp r2, r1
- bgt _020B0854
- ldrh r0, [r0, #0x4]
- cmp r0, r3
- movls r12, #0x1
-_020B0854:
- cmp r12, #0x0
- subne r0, r3, r2
- addne r0, r0, #0x1
- movne r0, r0, lsl #0x10
- movne r0, r0, lsr #0x10
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020B0870
-FUN_020B0870: ; 0x020B0870
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020B09B4
- mov r0, r4
- bl FUN_020B0888
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B0888
-FUN_020B0888: ; 0x020B0888
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- ldr r0, [r5, #0x14]
- cmp r0, #0x0
- beq _020B0944
- ldrh r2, [r5, #0x6]
- ldrh r1, [r5, #0x8]
- mov r3, #0x0
- add r0, r2, #0x1
- cmp r1, r0
- bgt _020B08C0
- ldrh r0, [r5, #0x4]
- cmp r0, r2
- movls r3, #0x1
-_020B08C0:
- cmp r3, #0x0
- moveq r4, #0x0
- beq _020B08E0
- ldrh r0, [r5, #0x4]
- sub r0, r2, r0
- add r0, r0, #0x1
- mov r0, r0, lsl #0x10
- mov r4, r0, lsr #0xd
-_020B08E0:
- ldr r2, [r5, #0x0]
- ldr r1, _020B09AC ; =UNK_021CCDA0
- mov r0, #0x540
- mla r1, r2, r0, r1
- ldrh r0, [r5, #0x4]
- add r2, r1, #0x100
- mov r1, r4
- add r6, r2, r0, lsl #0x3
- mov r0, r6
- bl DC_InvalidateRange
- ldr r0, _020B09B0 ; =GXi_DmaId
- mvn r1, #0x0
- ldr r0, [r0, #0x0]
- cmp r0, r1
- beq _020B0930
- mov r1, r6
- mov r3, r4
- mov r2, #0xc0
- bl MI_DmaFill32
- b _020B0998
-_020B0930:
- mov r1, r6
- mov r2, r4
- mov r0, #0xc0
- bl MIi_CpuClear32
- b _020B0998
-_020B0944:
- ldr r2, [r5, #0x0]
- ldr r1, _020B09AC ; =UNK_021CCDA0
- mov r0, #0x540
- mla r1, r2, r0, r1
- ldrh r2, [r5, #0x4]
- ldrh r0, [r5, #0x6]
- add r1, r1, #0x100
- add r3, r1, r2, lsl #0x3
- sub r0, r0, r2
- add r0, r0, #0x1
- mov r0, r0, lsl #0x10
- movs r2, r0, lsr #0x10
- mov r0, #0x0
- beq _020B0998
- mov r1, #0xc0
-_020B0980:
- add r0, r0, #0x1
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- cmp r0, r2
- strh r1, [r3], #0x8
- blo _020B0980
-_020B0998:
- ldrh r0, [r5, #0x4]
- strh r0, [r5, #0x8]
- ldrh r0, [r5, #0xa]
- strh r0, [r5, #0xe]
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B09AC: .word UNK_021CCDA0
-_020B09B0: .word GXi_DmaId
-
- arm_func_start FUN_020B09B4
-FUN_020B09B4: ; 0x020B09B4
- stmdb sp!, {r4-r10,lr}
- mov r7, r0
- ldr r0, [r7, #0x14]
- cmp r0, #0x0
- beq _020B0A48
- ldr r5, [r7, #0x0]
- ldr r1, _020B0BA8 ; =UNK_021CCDA0
- mov r0, #0x540
- mla r1, r5, r0, r1
- ldrh r2, [r7, #0x4]
- ldrh r0, [r7, #0x6]
- add r1, r1, #0x100
- add r4, r1, r2, lsl #0x3
- sub r0, r0, r2
- add r0, r0, #0x1
- mov r0, r0, lsl #0x13
- mov r6, r0, lsr #0x10
- mov r2, r2, lsl #0x13
- mov r0, r4
- mov r1, r6
- mov r7, r2, lsr #0x10
- bl DC_FlushRange
- cmp r5, #0x0
- beq _020B0A20
- cmp r5, #0x1
- beq _020B0A34
- ldmia sp!, {r4-r10,pc}
-_020B0A20:
- mov r0, r4
- mov r1, r7
- mov r2, r6
- bl GX_LoadOAM
- ldmia sp!, {r4-r10,pc}
-_020B0A34:
- mov r0, r4
- mov r1, r7
- mov r2, r6
- bl GXS_LoadOAM
- ldmia sp!, {r4-r10,pc}
-_020B0A48:
- ldr r0, [r7, #0x0]
- ldr r2, _020B0BA8 ; =UNK_021CCDA0
- mov r1, #0x540
- mla r2, r0, r1, r2
- ldrh r5, [r7, #0x4]
- ldrh r1, [r7, #0x6]
- ldr r3, _020B0BAC ; =UNK_0210655C
- add r4, r2, #0x100
- sub r1, r1, r5
- add r1, r1, #0x1
- mov r1, r1, lsl #0x10
- mov r2, r5, lsl #0x13
- add r6, r4, r5, lsl #0x3
- movs r5, r1, lsr #0x10
- mov r4, r2, lsr #0x10
- ldr r9, [r3, r0, lsl #0x2]
- mov r10, #0x0
- beq _020B0AC8
- mov r8, #0x6
-_020B0A94:
- mov r0, r6
- mov r1, r4
- mov r2, r8
- blx r9
- add r0, r10, #0x1
- add r2, r4, #0x8
- mov r1, r0, lsl #0x10
- mov r0, r2, lsl #0x10
- mov r10, r1, lsr #0x10
- cmp r10, r5
- mov r4, r0, lsr #0x10
- add r6, r6, #0x8
- blo _020B0A94
-_020B0AC8:
- ldrh r2, [r7, #0xc]
- ldrh r1, [r7, #0xe]
- mov r3, #0x0
- add r0, r2, #0x1
- cmp r1, r0
- bgt _020B0AEC
- ldrh r0, [r7, #0xa]
- cmp r0, r2
- movls r3, #0x1
-_020B0AEC:
- cmp r3, #0x0
- ldmeqia sp!, {r4-r10,pc}
- ldr r0, [r7, #0x0]
- ldr r2, _020B0BA8 ; =UNK_021CCDA0
- mov r1, #0x540
- mla r2, r0, r1, r2
- ldrh r5, [r7, #0xa]
- add r4, r2, #0x100
- ldrh r1, [r7, #0xc]
- mov r2, r5, lsl #0x15
- ldr r3, _020B0BAC ; =UNK_0210655C
- sub r1, r1, r5
- add r1, r1, #0x1
- mov r1, r1, lsl #0x10
- add r9, r4, r5, lsl #0x5
- ldr r5, [r3, r0, lsl #0x2]
- movs r8, r1, lsr #0x10
- mov r7, r2, lsr #0x10
- mov r6, #0x0
- ldmeqia sp!, {r4-r10,pc}
- mov r4, #0x2
-_020B0B40:
- mov r2, r4
- add r0, r9, #0x6
- add r1, r7, #0x6
- blx r5
- mov r2, r4
- add r0, r9, #0xe
- add r1, r7, #0xe
- blx r5
- mov r2, r4
- add r0, r9, #0x16
- add r1, r7, #0x16
- blx r5
- add r0, r9, #0x1e
- add r1, r7, #0x1e
- mov r2, r4
- blx r5
- add r0, r7, #0x20
- mov r0, r0, lsl #0x10
- mov r7, r0, lsr #0x10
- add r9, r9, #0x20
- add r0, r6, #0x1
- mov r0, r0, lsl #0x10
- mov r6, r0, lsr #0x10
- cmp r6, r8
- blo _020B0B40
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020B0BA8: .word UNK_021CCDA0
-_020B0BAC: .word UNK_0210655C
-
- arm_func_start FUN_020B0BB0
-FUN_020B0BB0: ; 0x020B0BB0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldrh r12, [r0, #0xc]
- ldrh r3, [r0, #0xe]
- mov lr, #0x0
- add r2, r12, #0x1
- cmp r3, r2
- bgt _020B0BDC
- ldrh r2, [r0, #0xa]
- cmp r2, r12
- movls lr, #0x1
-_020B0BDC:
- cmp lr, #0x0
- subne r2, r12, r3
- addne r2, r2, #0x1
- movne r2, r2, lsl #0x10
- movne r2, r2, lsr #0x10
- moveq r2, #0x0
- cmp r2, #0x1
- movcs r2, #0x1
- movcc r2, #0x0
- cmp r2, #0x0
- addeq sp, sp, #0x4
- ldreq r0, _020B0C74 ; =0x0000FFFE
- ldmeqia sp!, {pc}
- ldr lr, [r0, #0x0]
- ldr r3, _020B0C78 ; =UNK_021CCDA0
- mov r2, #0x540
- mla r12, lr, r2, r3
- ldr r3, [r1, #0x0]
- ldrh r2, [r0, #0xe]
- add r12, r12, #0x100
- mov r3, r3, asr #0x4
- add r12, r12, r2, lsl #0x5
- strh r3, [r12, #0x6]
- ldr r3, [r1, #0x4]
- mov r3, r3, asr #0x4
- strh r3, [r12, #0xe]
- ldr r3, [r1, #0x8]
- mov r3, r3, asr #0x4
- strh r3, [r12, #0x16]
- ldr r1, [r1, #0xc]
- mov r1, r1, asr #0x4
- strh r1, [r12, #0x1e]
- ldrh r1, [r0, #0xe]
- add r1, r1, #0x1
- strh r1, [r0, #0xe]
- mov r0, r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B0C74: .word 0x0000FFFE
-_020B0C78: .word UNK_021CCDA0
-
- arm_func_start FUN_020B0C7C
-FUN_020B0C7C: ; 0x020B0C7C
- stmdb sp!, {r4,lr}
- ldrh r12, [r0, #0x6]
- ldrh r4, [r0, #0x8]
- mov lr, #0x0
- add r3, r12, #0x1
- cmp r4, r3
- bgt _020B0CA4
- ldrh r3, [r0, #0x4]
- cmp r3, r12
- movls lr, #0x1
-_020B0CA4:
- cmp lr, #0x0
- subne r3, r12, r4
- addne r3, r3, #0x1
- movne r3, r3, lsl #0x10
- movne r3, r3, lsr #0x10
- moveq r3, #0x0
- cmp r3, #0x1
- movcs r3, #0x1
- movcc r3, #0x0
- cmp r3, #0x0
- beq _020B0D48
- ldr r4, [r0, #0x0]
- ldr ip, _020B0D50 ; =UNK_021CCDA0
- mov r3, #0x540
- mla r12, r4, r3, r12
- ldrh r3, [r0, #0x8]
- add r4, r12, #0x100
- ldrh r12, [r1, #0x0]
- mov lr, r3, lsl #0x3
- add r3, r4, r3, lsl #0x3
- strh r12, [r4, lr]
- ldrh lr, [r1, #0x2]
- ldr ip, _020B0D54 ; =0x0000FFFE
- strh lr, [r3, #0x2]
- ldrh r1, [r1, #0x4]
- cmp r2, r12
- strh r1, [r3, #0x4]
- beq _020B0D34
- ldr r1, [r3, #0x0]
- mov r12, r1, lsl #0x16
- mov r12, r12, lsr #0x1e
- ands r12, r12, #0x1
- bicne r12, r1, #0x3e000000
- andne r1, r2, #0x1f
- orrne r1, r12, r1, lsl #0x19
- strne r1, [r3, #0x0]
-_020B0D34:
- ldrh r1, [r0, #0x8]
- add r1, r1, #0x1
- strh r1, [r0, #0x8]
- mov r0, #0x1
- ldmia sp!, {r4,pc}
-_020B0D48:
- mov r0, #0x0
- ldmia sp!, {r4,pc}
- .balign 4
-_020B0D50: .word UNK_021CCDA0
-_020B0D54: .word 0x0000FFFE
-
- arm_func_start FUN_020B0D58
-FUN_020B0D58: ; 0x020B0D58
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldrh lr, [r0, #0x6]
- ldrh r12, [r0, #0x8]
- mov r4, #0x0
- add r3, lr, #0x1
- cmp r12, r3
- bgt _020B0D84
- ldrh r3, [r0, #0x4]
- cmp r3, lr
- movls r4, #0x1
-_020B0D84:
- cmp r4, #0x0
- subne r3, lr, r12
- addne r3, r3, #0x1
- movne r3, r3, lsl #0x10
- movne r3, r3, lsr #0x10
- moveq r3, #0x0
- cmp r3, r2
- movcs r3, #0x1
- movcc r3, #0x0
- cmp r3, #0x0
- beq _020B0E24
- ldr lr, [r0, #0x0]
- ldr ip, _020B0E30 ; =UNK_021CCDA0
- mov r3, #0x540
- mla r12, lr, r3, r12
- ldrh r3, [r0, #0x8]
- add r12, r12, #0x100
- cmp r2, #0x0
- add r4, r12, r3, lsl #0x3
- mov r5, #0x0
- ble _020B0E18
- add r3, r0, #0x8
-_020B0DDC:
- ldrh lr, [r1, #0x0]
- mov r0, r5, lsl #0x3
- add r12, r4, r5, lsl #0x3
- strh lr, [r4, r0]
- ldrh r0, [r1, #0x2]
- add r5, r5, #0x1
- cmp r5, r2
- strh r0, [r12, #0x2]
- ldrh r0, [r1, #0x4]
- add r1, r1, #0x8
- strh r0, [r12, #0x4]
- ldrh r0, [r3, #0x0]
- add r0, r0, #0x1
- strh r0, [r3, #0x0]
- blt _020B0DDC
-_020B0E18:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r5,pc}
-_020B0E24:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B0E30: .word UNK_021CCDA0
-
- arm_func_start FUN_020B0E34
-FUN_020B0E34: ; 0x020B0E34
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr r5, [sp, #0x1c]
- ldr r6, _020B0FB4 ; =UNK_021CCDA0
- mov r4, #0x540
- mla r4, r5, r4, r6
- mov lr, r1
- sub r1, r2, #0x1
- add r1, lr, r1
- mov r1, r1, lsl #0x10
- mov r12, r1, lsr #0x10
- add r7, r4, lr, lsl #0x1
- add r2, r4, r12, lsl #0x1
- mov r6, r0
- mov r5, r3
- cmp r7, r2
- mov r3, lr, lsl #0x1
- bhi _020B0E9C
- ldr r0, _020B0FB8 ; =0x0000FFFF
-_020B0E80:
- ldrh r1, [r7, #0x0]
- cmp r1, r0
- movne r0, #0x0
- bne _020B0EA0
- add r7, r7, #0x2
- cmp r7, r2
- bls _020B0E80
-_020B0E9C:
- mov r0, #0x1
-_020B0EA0:
- cmp r0, #0x0
- beq _020B0EE0
- ldr r0, _020B0FBC ; =UNK_021CCD9C
- sub r2, r12, lr
- ldrh r7, [r0, #0x0]
- add r1, r4, r3
- mov r2, r2, lsl #0x1
- add r3, r7, #0x1
- strh r3, [r0, #0x0]
- strh r7, [r6, #0x10]
- strh lr, [r6, #0x4]
- strh r12, [r6, #0x6]
- strh lr, [r6, #0x8]
- ldrh r0, [r6, #0x10]
- bl MIi_CpuClear16
- b _020B0EEC
-_020B0EE0:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,pc}
-_020B0EEC:
- ldrh r0, [sp, #0x18]
- add r4, r4, #0x500
- cmp r0, #0x0
- bne _020B0F18
- mov r0, #0x20
- strh r0, [r6, #0xa]
- mov r0, #0x0
- strh r0, [r6, #0xc]
- ldrh r0, [r6, #0xa]
- strh r0, [r6, #0xe]
- b _020B0F98
-_020B0F18:
- sub r0, r0, #0x1
- add r0, r5, r0
- mov r0, r0, lsl #0x10
- mov r12, r0, lsr #0x10
- add r7, r4, r5, lsl #0x1
- add r2, r4, r12, lsl #0x1
- cmp r7, r2
- mov r3, r5, lsl #0x1
- bhi _020B0F5C
- ldr r0, _020B0FB8 ; =0x0000FFFF
-_020B0F40:
- ldrh r1, [r7, #0x0]
- cmp r1, r0
- movne r0, #0x0
- bne _020B0F60
- add r7, r7, #0x2
- cmp r7, r2
- bls _020B0F40
-_020B0F5C:
- mov r0, #0x1
-_020B0F60:
- cmp r0, #0x0
- beq _020B0F8C
- strh r5, [r6, #0xa]
- strh r12, [r6, #0xc]
- strh r5, [r6, #0xe]
- ldrh r0, [r6, #0x10]
- sub r2, r12, r5
- add r1, r4, r3
- mov r2, r2, lsl #0x1
- bl MIi_CpuClear16
- b _020B0F98
-_020B0F8C:
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r7,pc}
-_020B0F98:
- mov r1, #0x0
- ldr r0, [sp, #0x1c]
- str r1, [r6, #0x14]
- str r0, [r6, #0x0]
- mov r0, #0x1
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B0FB4: .word UNK_021CCDA0
-_020B0FB8: .word 0x0000FFFF
-_020B0FBC: .word UNK_021CCD9C
-
- arm_func_start FUN_020B0FC0
-FUN_020B0FC0: ; 0x020B0FC0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020B1060 ; =UNK_021CCEA0
- mov r0, #0xc0
- mov r2, #0x400
- bl MIi_CpuClear16
- ldr r1, _020B1064 ; =UNK_021CD3E0
- mov r0, #0xc0
- mov r2, #0x400
- bl MIi_CpuClear16
- ldr r1, _020B1068 ; =UNK_021CD920
- mov r0, #0xc0
- mov r2, #0x400
- bl MIi_CpuClear16
- ldr r0, _020B106C ; =0x0000FFFF
- ldr r1, _020B1070 ; =UNK_021CCDA0
- mov r2, #0x100
- bl MIi_CpuClear16
- ldr r0, _020B106C ; =0x0000FFFF
- ldr r1, _020B1074 ; =UNK_021CD2E0
- mov r2, #0x100
- bl MIi_CpuClear16
- ldr r0, _020B106C ; =0x0000FFFF
- ldr r1, _020B1078 ; =UNK_021CD820
- mov r2, #0x100
- bl MIi_CpuClear16
- ldr r0, _020B106C ; =0x0000FFFF
- ldr r1, _020B107C ; =UNK_021CD2A0
- mov r2, #0x40
- bl MIi_CpuClear16
- ldr r0, _020B106C ; =0x0000FFFF
- ldr r1, _020B1080 ; =UNK_021CD7E0
- mov r2, #0x40
- bl MIi_CpuClear16
- ldr r0, _020B106C ; =0x0000FFFF
- ldr r1, _020B1084 ; =UNK_021CDD20
- mov r2, #0x40
- bl MIi_CpuClear16
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B1060: .word UNK_021CCEA0
-_020B1064: .word UNK_021CD3E0
-_020B1068: .word UNK_021CD920
-_020B106C: .word 0x0000FFFF
-_020B1070: .word UNK_021CCDA0
-_020B1074: .word UNK_021CD2E0
-_020B1078: .word UNK_021CD820
-_020B107C: .word UNK_021CD2A0
-_020B1080: .word UNK_021CD7E0
-_020B1084: .word UNK_021CDD20
-
- arm_func_start FUN_020B1088
-FUN_020B1088: ; 0x020B1088
- ldr ip, _020B1094 ; =MIi_CpuCopy16
- add r1, r1, #0x7000000
- bx r12
- .balign 4
-_020B1094: .word MIi_CpuCopy16
-
- arm_func_start FUN_020B1098
-FUN_020B1098: ; 0x020B1098
- ldr r3, _020B10A8 ; =0x07000400
- ldr ip, _020B10AC ; =MIi_CpuCopy16
- add r1, r1, r3
- bx r12
- .balign 4
-_020B10A8: .word 0x07000400
-_020B10AC: .word MIi_CpuCopy16
-
- arm_func_start FUN_020B10B0
-FUN_020B10B0: ; 0x020B10B0
- mov r1, r1, lsl #0x1
- ldrh r0, [r0, r1]
- bx lr
-
- arm_func_start FUN_020B10BC
-FUN_020B10BC: ; 0x020B10BC
- ldr r0, [r0, r1, lsl #0x2]
- bx lr
-
- arm_func_start FUN_020B10C4
-FUN_020B10C4:
- str r2, [r0, r1, lsl #0x2]
- bx lr
-
- arm_func_start FUN_020B10CC
-FUN_020B10CC:
- mov r2, #0x0
- mvn r1, #0x0
-_020B10D4:
- str r1, [r0, r2, lsl #0x2]
- add r2, r2, #0x1
- cmp r2, #0x3
- blt _020B10D4
- bx lr
-
- arm_func_start FUN_020B10E8
-FUN_020B10E8: ; 0x020B10E8
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r10, r0
- ldr r0, [r10, #0x0]
- mov r9, r1
- cmp r0, #0x3
- ldr r0, [sp, #0x28]
- moveq r7, #0x20
- str r0, [sp, #0x28]
- ldrh r0, [r9, #0x0]
- movne r7, #0x200
- mov r11, r2
- mov r8, r3
- str r0, [sp, #0x0]
- mov r6, #0x0
- cmp r0, #0x0
- bls _020B1210
-_020B112C:
- ldr r1, [r9, #0x4]
- mov r0, r6, lsl #0x1
- ldrh r2, [r1, r0]
- ldr r0, [r10, #0xc]
- ldr r1, [r10, #0x8]
- mla r5, r7, r2, r11
- mla r4, r7, r6, r0
- bl DC_FlushRange
- cmp r8, #0x0
- beq _020B11E0
- cmp r8, #0x1
- beq _020B1168
- cmp r8, #0x2
- beq _020B11A4
- b _020B11F8
-_020B1168:
- ldr r0, [r10, #0x4]
- cmp r0, #0x0
- beq _020B1190
- bl GX_BeginLoadOBJExtPltt
- mov r0, r4
- mov r1, r5
- mov r2, r7
- bl GX_LoadOBJExtPltt
- bl GX_EndLoadOBJExtPltt
- b _020B11F8
-_020B1190:
- mov r0, r4
- mov r1, r5
- mov r2, r7
- bl GX_LoadOBJPltt
- b _020B11F8
-_020B11A4:
- ldr r0, [r10, #0x4]
- cmp r0, #0x0
- beq _020B11CC
- bl GXS_BeginLoadOBJExtPltt
- mov r0, r4
- mov r1, r5
- mov r2, r7
- bl GXS_LoadOBJExtPltt
- bl GXS_EndLoadOBJExtPltt
- b _020B11F8
-_020B11CC:
- mov r0, r4
- mov r1, r5
- mov r2, r7
- bl GXS_LoadOBJPltt
- b _020B11F8
-_020B11E0:
- bl GX_BeginLoadTexPltt
- mov r0, r4
- mov r1, r5
- mov r2, r7
- bl GX_LoadTexPltt
- bl GX_EndLoadTexPltt
-_020B11F8:
- add r0, r6, #0x1
- mov r0, r0, lsl #0x10
- mov r6, r0, lsr #0x10
- ldr r0, [sp, #0x0]
- cmp r6, r0
- blo _020B112C
-_020B1210:
- ldr r0, [sp, #0x28]
- ldr r2, [r10, #0x0]
- mov r1, r0
- str r2, [r1, #0x0]
- ldr r4, [r10, #0x4]
- mov r3, r0
- mov r1, r8
- mov r2, r11
- str r4, [r3, #0x4]
- bl FUN_020B19D0
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B1240
-FUN_020B1240: ; 0x020B1240
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r9, r0
- ldr r5, [r9, #0xc]
- ldr r4, [r9, #0x8]
- mov r8, r1
- mov r7, r2
- mov r0, r5
- mov r1, r4
- mov r6, r3
- bl DC_FlushRange
- cmp r7, #0x0
- beq _020B1300
- cmp r7, #0x1
- beq _020B1288
- cmp r7, #0x2
- beq _020B12C4
- b _020B1318
-_020B1288:
- ldr r0, [r9, #0x4]
- cmp r0, #0x0
- beq _020B12B0
- bl GX_BeginLoadOBJExtPltt
- mov r0, r5
- mov r1, r8
- mov r2, r4
- bl GX_LoadOBJExtPltt
- bl GX_EndLoadOBJExtPltt
- b _020B1318
-_020B12B0:
- mov r0, r5
- mov r1, r8
- mov r2, r4
- bl GX_LoadOBJPltt
- b _020B1318
-_020B12C4:
- ldr r0, [r9, #0x4]
- cmp r0, #0x0
- beq _020B12EC
- bl GXS_BeginLoadOBJExtPltt
- mov r0, r5
- mov r1, r8
- mov r2, r4
- bl GXS_LoadOBJExtPltt
- bl GXS_EndLoadOBJExtPltt
- b _020B1318
-_020B12EC:
- mov r0, r5
- mov r1, r8
- mov r2, r4
- bl GXS_LoadOBJPltt
- b _020B1318
-_020B1300:
- bl GX_BeginLoadTexPltt
- mov r0, r5
- mov r1, r8
- mov r2, r4
- bl GX_LoadTexPltt
- bl GX_EndLoadTexPltt
-_020B1318:
- ldr r1, [r9, #0x0]
- mov r0, r6
- str r1, [r6, #0x0]
- ldr r3, [r9, #0x4]
- mov r1, r7
- mov r2, r8
- str r3, [r6, #0x4]
- bl FUN_020B19D0
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_020B1340
-FUN_020B1340: ; 0x020B1340
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- mov r6, r1
- ldr r0, [r7, #0x14]
- ldr r1, [r7, #0x10]
- mov r5, r2
- mov r4, r3
- bl DC_FlushRange
- cmp r5, #0x0
- ldr r0, [r7, #0x8]
- beq _020B13B8
- cmp r5, #0x1
- beq _020B1384
- cmp r5, #0x2
- beq _020B13A0
- b _020B13B8
-_020B1384:
- mov r3, #0x4000000
- ldr r2, [r3, #0x0]
- ldr r1, _020B1520 ; =0xFFCFFFEF
- and r1, r2, r1
- orr r0, r1, r0
- str r0, [r3, #0x0]
- b _020B13B8
-_020B13A0:
- ldr r3, _020B1524 ; =0x04001000
- ldr r1, _020B1520 ; =0xFFCFFFEF
- ldr r2, [r3, #0x0]
- and r1, r2, r1
- orr r0, r1, r0
- str r0, [r3, #0x0]
-_020B13B8:
- ldr r0, [r7, #0x8]
- cmp r0, #0x0
- bne _020B14D8
- ldrh r0, [r7, #0x2]
- cmp r0, #0x10
- bgt _020B1408
- cmp r0, #0x10
- bge _020B1434
- cmp r0, #0x8
- addls pc, pc, r0, lsl #0x2
- b _020B1444
- ; Jump table
- b _020B1444 ; case 0
- b _020B1414 ; case 1
- b _020B141C ; case 2
- b _020B1444 ; case 3
- b _020B1424 ; case 4
- b _020B1444 ; case 5
- b _020B1444 ; case 6
- b _020B1444 ; case 7
- b _020B142C ; case 8
-_020B1408:
- cmp r0, #0x20
- beq _020B143C
- b _020B1444
-_020B1414:
- mov r0, #0x0
- b _020B1448
-_020B141C:
- mov r0, #0x1
- b _020B1448
-_020B1424:
- mov r0, #0x2
- b _020B1448
-_020B142C:
- mov r0, #0x3
- b _020B1448
-_020B1434:
- mov r0, #0x4
- b _020B1448
-_020B143C:
- mov r0, #0x5
- b _020B1448
-_020B1444:
- mov r0, #0x0
-_020B1448:
- str r0, [r4, #0xc]
- ldrh r0, [r7, #0x0]
- cmp r0, #0x10
- bgt _020B1490
- cmp r0, #0x10
- bge _020B14BC
- cmp r0, #0x8
- addls pc, pc, r0, lsl #0x2
- b _020B14CC
- ; Jump table
- b _020B14CC ; case 0
- b _020B149C ; case 1
- b _020B14A4 ; case 2
- b _020B14CC ; case 3
- b _020B14AC ; case 4
- b _020B14CC ; case 5
- b _020B14CC ; case 6
- b _020B14CC ; case 7
- b _020B14B4 ; case 8
-_020B1490:
- cmp r0, #0x20
- beq _020B14C4
- b _020B14CC
-_020B149C:
- mov r0, #0x0
- b _020B14D0
-_020B14A4:
- mov r0, #0x1
- b _020B14D0
-_020B14AC:
- mov r0, #0x2
- b _020B14D0
-_020B14B4:
- mov r0, #0x3
- b _020B14D0
-_020B14BC:
- mov r0, #0x4
- b _020B14D0
-_020B14C4:
- mov r0, #0x5
- b _020B14D0
-_020B14CC:
- mov r0, #0x0
-_020B14D0:
- str r0, [r4, #0x10]
- b _020B14E8
-_020B14D8:
- ldrh r0, [r7, #0x2]
- str r0, [r4, #0xc]
- ldrh r0, [r7, #0x0]
- str r0, [r4, #0x10]
-_020B14E8:
- ldr r1, [r7, #0x4]
- mov r0, #0x0
- str r1, [r4, #0x14]
- str r0, [r4, #0x18]
- mov r0, #0x1
- str r0, [r4, #0x1c]
- ldr r3, [r7, #0x8]
- mov r0, r4
- mov r1, r5
- mov r2, r6
- str r3, [r4, #0x20]
- bl FUN_020B1A1C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B1520: .word 0xFFCFFFEF
-_020B1524: .word 0x04001000
-
- arm_func_start FUN_020B1528
-FUN_020B1528: ; 0x020B1528
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- movs r5, r2
- mov r6, r1
- mov r4, r3
- ldr r0, [r7, #0x8]
- beq _020B1590
- cmp r5, #0x1
- beq _020B155C
- cmp r5, #0x2
- beq _020B1578
- b _020B1590
-_020B155C:
- mov r3, #0x4000000
- ldr r2, [r3, #0x0]
- ldr r1, _020B1760 ; =0xFFCFFFEF
- and r1, r2, r1
- orr r0, r1, r0
- str r0, [r3, #0x0]
- b _020B1590
-_020B1578:
- ldr r3, _020B1764 ; =0x04001000
- ldr r1, _020B1760 ; =0xFFCFFFEF
- ldr r2, [r3, #0x0]
- and r1, r2, r1
- orr r0, r1, r0
- str r0, [r3, #0x0]
-_020B1590:
- ldr r0, [r7, #0x14]
- ldr r1, [r7, #0x10]
- bl DC_FlushRange
- cmp r5, #0x0
- beq _020B15B8
- cmp r5, #0x1
- beq _020B15D4
- cmp r5, #0x2
- beq _020B15E8
- b _020B15F8
-_020B15B8:
- bl GX_BeginLoadTex
- ldr r0, [r7, #0x14]
- ldr r2, [r7, #0x10]
- mov r1, r6
- bl GX_LoadTex
- bl GX_EndLoadTex
- b _020B15F8
-_020B15D4:
- ldr r0, [r7, #0x14]
- ldr r2, [r7, #0x10]
- mov r1, r6
- bl GX_LoadOBJ
- b _020B15F8
-_020B15E8:
- ldr r0, [r7, #0x14]
- ldr r2, [r7, #0x10]
- mov r1, r6
- bl GXS_LoadOBJ
-_020B15F8:
- ldr r0, [r7, #0x8]
- cmp r0, #0x0
- bne _020B1718
- ldrh r0, [r7, #0x2]
- cmp r0, #0x10
- bgt _020B1648
- cmp r0, #0x10
- bge _020B1674
- cmp r0, #0x8
- addls pc, pc, r0, lsl #0x2
- b _020B1684
- ; Jump table
- b _020B1684 ; case 0
- b _020B1654 ; case 1
- b _020B165C ; case 2
- b _020B1684 ; case 3
- b _020B1664 ; case 4
- b _020B1684 ; case 5
- b _020B1684 ; case 6
- b _020B1684 ; case 7
- b _020B166C ; case 8
-_020B1648:
- cmp r0, #0x20
- beq _020B167C
- b _020B1684
-_020B1654:
- mov r0, #0x0
- b _020B1688
-_020B165C:
- mov r0, #0x1
- b _020B1688
-_020B1664:
- mov r0, #0x2
- b _020B1688
-_020B166C:
- mov r0, #0x3
- b _020B1688
-_020B1674:
- mov r0, #0x4
- b _020B1688
-_020B167C:
- mov r0, #0x5
- b _020B1688
-_020B1684:
- mov r0, #0x0
-_020B1688:
- str r0, [r4, #0xc]
- ldrh r0, [r7, #0x0]
- cmp r0, #0x10
- bgt _020B16D0
- cmp r0, #0x10
- bge _020B16FC
- cmp r0, #0x8
- addls pc, pc, r0, lsl #0x2
- b _020B170C
- ; Jump table
- b _020B170C ; case 0
- b _020B16DC ; case 1
- b _020B16E4 ; case 2
- b _020B170C ; case 3
- b _020B16EC ; case 4
- b _020B170C ; case 5
- b _020B170C ; case 6
- b _020B170C ; case 7
- b _020B16F4 ; case 8
-_020B16D0:
- cmp r0, #0x20
- beq _020B1704
- b _020B170C
-_020B16DC:
- mov r0, #0x0
- b _020B1710
-_020B16E4:
- mov r0, #0x1
- b _020B1710
-_020B16EC:
- mov r0, #0x2
- b _020B1710
-_020B16F4:
- mov r0, #0x3
- b _020B1710
-_020B16FC:
- mov r0, #0x4
- b _020B1710
-_020B1704:
- mov r0, #0x5
- b _020B1710
-_020B170C:
- mov r0, #0x0
-_020B1710:
- str r0, [r4, #0x10]
- b _020B1728
-_020B1718:
- ldrh r0, [r7, #0x2]
- str r0, [r4, #0xc]
- ldrh r0, [r7, #0x0]
- str r0, [r4, #0x10]
-_020B1728:
- ldr r1, [r7, #0x4]
- mov r0, #0x0
- str r1, [r4, #0x14]
- str r0, [r4, #0x18]
- mov r0, #0x1
- str r0, [r4, #0x1c]
- ldr r3, [r7, #0x8]
- mov r0, r4
- mov r1, r5
- mov r2, r6
- str r3, [r4, #0x20]
- bl FUN_020B1A1C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B1760: .word 0xFFCFFFEF
-_020B1764: .word 0x04001000
-
- arm_func_start FUN_020B1768
-FUN_020B1768: ; 0x020B1768
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- movs r5, r2
- mov r6, r1
- mov r4, r3
- ldr r0, [r7, #0x8]
- beq _020B17D0
- cmp r5, #0x1
- beq _020B179C
- cmp r5, #0x2
- beq _020B17B8
- b _020B17D0
-_020B179C:
- mov r3, #0x4000000
- ldr r2, [r3, #0x0]
- ldr r1, _020B19A0 ; =0xFFCFFFEF
- and r1, r2, r1
- orr r0, r1, r0
- str r0, [r3, #0x0]
- b _020B17D0
-_020B17B8:
- ldr r3, _020B19A4 ; =0x04001000
- ldr r1, _020B19A0 ; =0xFFCFFFEF
- ldr r2, [r3, #0x0]
- and r1, r2, r1
- orr r0, r1, r0
- str r0, [r3, #0x0]
-_020B17D0:
- ldr r0, [r7, #0x14]
- ldr r1, [r7, #0x10]
- bl DC_FlushRange
- cmp r5, #0x0
- beq _020B17F8
- cmp r5, #0x1
- beq _020B1814
- cmp r5, #0x2
- beq _020B1828
- b _020B1838
-_020B17F8:
- bl GX_BeginLoadTex
- ldr r0, [r7, #0x14]
- ldr r2, [r7, #0x10]
- mov r1, r6
- bl GX_LoadTex
- bl GX_EndLoadTex
- b _020B1838
-_020B1814:
- ldr r0, [r7, #0x14]
- ldr r2, [r7, #0x10]
- mov r1, r6
- bl GX_LoadOBJ
- b _020B1838
-_020B1828:
- ldr r0, [r7, #0x14]
- ldr r2, [r7, #0x10]
- mov r1, r6
- bl GXS_LoadOBJ
-_020B1838:
- ldr r0, [r7, #0x8]
- cmp r0, #0x0
- bne _020B1958
- ldrh r0, [r7, #0x2]
- cmp r0, #0x10
- bgt _020B1888
- cmp r0, #0x10
- bge _020B18B4
- cmp r0, #0x8
- addls pc, pc, r0, lsl #0x2
- b _020B18C4
- ; Jump table
- b _020B18C4 ; case 0
- b _020B1894 ; case 1
- b _020B189C ; case 2
- b _020B18C4 ; case 3
- b _020B18A4 ; case 4
- b _020B18C4 ; case 5
- b _020B18C4 ; case 6
- b _020B18C4 ; case 7
- b _020B18AC ; case 8
-_020B1888:
- cmp r0, #0x20
- beq _020B18BC
- b _020B18C4
-_020B1894:
- mov r0, #0x0
- b _020B18C8
-_020B189C:
- mov r0, #0x1
- b _020B18C8
-_020B18A4:
- mov r0, #0x2
- b _020B18C8
-_020B18AC:
- mov r0, #0x3
- b _020B18C8
-_020B18B4:
- mov r0, #0x4
- b _020B18C8
-_020B18BC:
- mov r0, #0x5
- b _020B18C8
-_020B18C4:
- mov r0, #0x0
-_020B18C8:
- str r0, [r4, #0xc]
- ldrh r0, [r7, #0x0]
- cmp r0, #0x10
- bgt _020B1910
- cmp r0, #0x10
- bge _020B193C
- cmp r0, #0x8
- addls pc, pc, r0, lsl #0x2
- b _020B194C
- ; Jump table
- b _020B194C ; case 0
- b _020B191C ; case 1
- b _020B1924 ; case 2
- b _020B194C ; case 3
- b _020B192C ; case 4
- b _020B194C ; case 5
- b _020B194C ; case 6
- b _020B194C ; case 7
- b _020B1934 ; case 8
-_020B1910:
- cmp r0, #0x20
- beq _020B1944
- b _020B194C
-_020B191C:
- mov r0, #0x0
- b _020B1950
-_020B1924:
- mov r0, #0x1
- b _020B1950
-_020B192C:
- mov r0, #0x2
- b _020B1950
-_020B1934:
- mov r0, #0x3
- b _020B1950
-_020B193C:
- mov r0, #0x4
- b _020B1950
-_020B1944:
- mov r0, #0x5
- b _020B1950
-_020B194C:
- mov r0, #0x0
-_020B1950:
- str r0, [r4, #0x10]
- b _020B1968
-_020B1958:
- ldrh r0, [r7, #0x2]
- str r0, [r4, #0xc]
- ldrh r0, [r7, #0x0]
- str r0, [r4, #0x10]
-_020B1968:
- ldr r1, [r7, #0x4]
- mov r0, #0x0
- str r1, [r4, #0x14]
- str r0, [r4, #0x18]
- mov r0, #0x1
- str r0, [r4, #0x1c]
- ldr r3, [r7, #0x8]
- mov r0, r4
- mov r1, r5
- mov r2, r6
- str r3, [r4, #0x20]
- bl FUN_020B1A1C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B19A0: .word 0xFFCFFFEF
-_020B19A4: .word 0x04001000
-
- arm_func_start FUN_020B19A8
-FUN_020B19A8:
- add r0, r0, r1, lsl #0x2
- ldr r1, [r0, #0x8]
- mvn r0, #0x0
- cmp r1, r0
- movne r0, #0x1
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020B19C4
-FUN_020B19C4: ; 0x020B19C4
- add r0, r0, r1, lsl #0x2
- ldr r0, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_020B19D0
-FUN_020B19D0: ; 0x020B19D0
- add r0, r0, r1, lsl #0x2
- str r2, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_020B19DC
-FUN_020B19DC: ; 0x020B19DC
- mov r3, #0x0
- mvn r2, #0x0
-_020B19E4:
- add r1, r0, r3, lsl #0x2
- add r3, r3, #0x1
- str r2, [r1, #0x8]
- cmp r3, #0x3
- blt _020B19E4
- bx lr
-
- arm_func_start FUN_020B19FC
-FUN_020B19FC:
- ldr r1, [r0, r1, lsl #0x2]
- mvn r0, #0x0
- cmp r1, r0
- movne r0, #0x1
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020B1A14
-FUN_020B1A14: ; 0x020B1A14
- ldr r0, [r0, r1, lsl #0x2]
- bx lr
-
- arm_func_start FUN_020B1A1C
-FUN_020B1A1C: ; 0x020B1A1C
- str r2, [r0, r1, lsl #0x2]
- bx lr
-
- arm_func_start FUN_020B1A24
-FUN_020B1A24: ; 0x020B1A24
- mov r2, #0x0
- mvn r1, #0x0
-_020B1A2C:
- str r1, [r0, r2, lsl #0x2]
- add r2, r2, #0x1
- cmp r2, #0x3
- blt _020B1A2C
- bx lr
-
- arm_func_start FUN_020B1A40
-FUN_020B1A40: ; 0x020B1A40
- stmdb sp!, {r4,lr}
- mov r4, r0
- add r1, r4, #0x4
- mov r0, #0x0
- mov r2, #0x18
- bl MIi_CpuClear16
- mov r0, #0x1000
- str r0, [r4, #0x4]
- str r0, [r4, #0x8]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B1A68
-FUN_020B1A68:
- ldr ip, _020B1A74 ; =FUN_020B1A40
- str r1, [r0, #0x0]
- bx r12
- .balign 4
-_020B1A74: .word FUN_020B1A40
-
- arm_func_start FUN_020B1A78
-FUN_020B1A78: ; 0x020B1A78
- ldr r3, [r0, #0x0]
- cmp r3, #0x1
- ldreqh r3, [r0, #0x12]
- orreq r3, r3, #0x2
- streqh r3, [r0, #0x12]
- streq r1, [r0, #0x4]
- streq r2, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_020B1A98
-FUN_020B1A98: ; 0x020B1A98
- ldr r2, [r0, #0x0]
- cmp r2, #0x1
- ldreqh r2, [r0, #0x12]
- orreq r2, r2, #0x4
- streqh r2, [r0, #0x12]
- streqh r1, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020B1AB4
-FUN_020B1AB4: ; 0x020B1AB4
- ldr r3, [r0, #0x0]
- cmp r3, #0x1
- ldreqh r3, [r0, #0x12]
- orreq r3, r3, #0x8
- streqh r3, [r0, #0x12]
- streqh r1, [r0, #0xc]
- streqh r2, [r0, #0xe]
- bx lr
-
- arm_func_start FUN_020B1AD4
-FUN_020B1AD4: ; 0x020B1AD4
- mov r2, #0x0
- str r2, [r0, #0x0]
- str r1, [r0, #0x4]
- mov r1, #0x1
- str r1, [r0, #0x8]
- ldr ip, _020B1AF4 ; =FUN_020B1A68
- add r0, r0, #0xc
- bx r12
- .balign 4
-_020B1AF4: .word FUN_020B1A68
-
- arm_func_start FUN_020B1AF8
-FUN_020B1AF8: ; 0x020B1AF8
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x34
- ldrh r5, [r2, #0x0]
- ldr r4, [sp, #0x60]
- ldr r10, [sp, #0x58]
- str r4, [sp, #0x60]
- cmp r1, r5
- movcs r1, r5
- mov r4, #0x0
- cmp r1, #0x0
- str r4, [sp, #0x0]
- bls _020B1E7C
- ldrh r4, [sp, #0x5c]
- mov r4, r4, lsl #0x19
- str r4, [sp, #0x4]
- ldr r4, [sp, #0x0]
- str r4, [sp, #0x14]
- mov r4, #0x100
- str r4, [sp, #0xc]
- mov r4, #0x300
- str r4, [sp, #0x8]
- mov r4, #0x1
- str r4, [sp, #0x10]
-_020B1B54:
- ldr r5, [sp, #0x0]
- mov r6, #0x6
- mul r6, r5, r6
- ldr r8, [r2, #0x4]
- ldr r4, [sp, #0x0]
- add r7, r0, r5, lsl #0x3
- ldrh r5, [r8, r6]
- mov r4, r4, lsl #0x3
- add r9, r8, r6
- strh r5, [r0, r4]
- ldrh r4, [r9, #0x2]
- cmp r3, #0x0
- strh r4, [r7, #0x2]
- ldrh r4, [r9, #0x4]
- strh r4, [r7, #0x4]
- bne _020B1B9C
- cmp r10, #0x0
- beq _020B1E60
-_020B1B9C:
- ldr r5, [r7, #0x0]
- ldr r4, _020B1E88 ; =0x01FF0000
- and r4, r5, r4
- mov r4, r4, lsr #0x10
- mov r4, r4, lsl #0x10
- mov r4, r4, asr #0x10
- cmp r4, #0xff
- orrgt r4, r4, #0xff00
- movgt r4, r4, lsl #0x10
- movgt r4, r4, asr #0x10
- mov r4, r4, lsl #0xc
- str r4, [sp, #0x20]
- ldr r4, [r7, #0x0]
- and r4, r4, #0xff
- mov r4, r4, lsl #0x10
- mov r4, r4, asr #0x10
- cmp r4, #0x7f
- orrgt r4, r4, #0xff00
- movgt r4, r4, lsl #0x10
- movgt r4, r4, asr #0x10
- mov r4, r4, lsl #0xc
- str r4, [sp, #0x24]
- cmp r3, #0x0
- beq _020B1E00
- ldr r5, [r7, #0x0]
- and r6, r5, #0x300
- cmp r6, #0x100
- beq _020B1C1C
- cmp r6, #0x300
- beq _020B1C1C
- and r4, r5, #0x30000000
- orr r6, r6, r4
-_020B1C1C:
- cmp r6, #0x300
- bne _020B1C70
- ldr r4, _020B1E8C ; =0xC000C000
- ldr r8, _020B1E90 ; =UNK_020FF8AC
- and r5, r5, r4
- and r4, r5, #0xc000
- mov r6, r4, asr #0xe
- and r4, r5, #0xc0000000
- mov r4, r4, lsr #0x1e
- mov r4, r4, lsl #0x1
- add r8, r8, r6, lsl #0x3
- ldrh r9, [r4, r8]
- ldr r8, _020B1E94 ; =UNK_020FF894
- ldr r5, [sp, #0x20]
- add r6, r8, r6, lsl #0x3
- add r5, r5, r9, lsl #0xb
- str r5, [sp, #0x20]
- ldrh r4, [r4, r6]
- ldr r5, [sp, #0x24]
- add r4, r5, r4, lsl #0xb
- str r4, [sp, #0x24]
-_020B1C70:
- ldr r4, [sp, #0x60]
- ldr r5, [r3, #0x8]
- cmp r4, #0x0
- ldrne r8, [sp, #0x8]
- add r4, sp, #0x20
- ldreq r8, [sp, #0xc]
- mov r6, r4
- cmp r8, #0x300
- ldreq r9, [sp, #0x10]
- mov r12, #0x1000
- ldrne r9, [sp, #0x14]
- cmp r4, r4
- ldr r4, [sp, #0x24]
- addeq r6, sp, #0x28
- smull r11, r4, r5, r4
- adds r5, r11, r12
- adc r11, r4, #0x0
- ldr r4, [r3, #0x0]
- ldr lr, [sp, #0x20]
- smlal r5, r11, r4, lr
- mov r4, r5, lsr #0xc
- orr r4, r4, r11, lsl #0x14
- str r4, [r6, #0x0]
- ldr r4, [r3, #0xc]
- ldr r5, [sp, #0x24]
- ldr lr, [r3, #0x4]
- smull r11, r5, r4, r5
- adds r11, r11, r12
- adc r4, r5, #0x0
- add r5, sp, #0x28
- cmp r6, r5
- ldr r5, [sp, #0x20]
- smlal r11, r4, lr, r5
- mov r5, r11, lsr #0xc
- orr r5, r5, r4, lsl #0x14
- str r5, [r6, #0x4]
- ldreq r5, [sp, #0x28]
- ldreq r4, [sp, #0x2c]
- streq r5, [sp, #0x20]
- streq r4, [sp, #0x24]
- cmp r8, #0x100
- beq _020B1D38
- cmp r8, #0x300
- beq _020B1D38
- ldr r5, [r7, #0x0]
- ldr r4, _020B1E98 ; =0xC1FFFCFF
- and r4, r5, r4
- orr r4, r4, r8
- str r4, [r7, #0x0]
- b _020B1D54
-_020B1D38:
- ldr r5, [r7, #0x0]
- ldr r4, _020B1E98 ; =0xC1FFFCFF
- and r4, r5, r4
- orr r5, r4, r8
- ldr r4, [sp, #0x4]
- orr r4, r4, r5
- str r4, [r7, #0x0]
-_020B1D54:
- ldr r6, [r7, #0x0]
- ldr r5, _020B1E8C ; =0xC000C000
- cmp r9, #0x0
- and r8, r6, r5
- and r5, r8, #0xc000
- mov r6, r5, asr #0xe
- and r5, r8, #0xc0000000
- ldr r8, _020B1E90 ; =UNK_020FF8AC
- mov r5, r5, lsr #0x1e
- mov r5, r5, lsl #0x1
- add r8, r8, r6, lsl #0x3
- ldrh r9, [r5, r8]
- ldr r8, _020B1E94 ; =UNK_020FF894
- ldr r4, [sp, #0x20]
- add r6, r8, r6, lsl #0x3
- mov r11, r9, asr #0x1
- ldrh r5, [r5, r6]
- mov r8, r11, lsl #0xc
- ldr r6, [r3, #0x0]
- rsb r12, r8, #0x0
- mov r9, r5, asr #0x1
- mla r12, r6, r11, r12
- ldr r5, [r3, #0x8]
- mla r6, r5, r9, r12
- add r6, r4, r6
- str r6, [sp, #0x20]
- ldr r12, [r3, #0x4]
- mov r5, r9, lsl #0xc
- str r12, [sp, #0x1c]
- ldr r12, [r3, #0xc]
- rsb lr, r5, #0x0
- str r12, [sp, #0x18]
- ldr r12, [sp, #0x1c]
- ldr r4, [sp, #0x24]
- mla r11, r12, r11, lr
- ldr r12, [sp, #0x18]
- subne r6, r6, r8
- mla r9, r12, r9, r11
- add r4, r4, r9
- str r4, [sp, #0x24]
- subne r4, r4, r5
- strne r6, [sp, #0x20]
- strne r4, [sp, #0x24]
-_020B1E00:
- cmp r10, #0x0
- beq _020B1E28
- ldr r6, [sp, #0x20]
- ldr r4, [r10, #0x0]
- ldr r5, [sp, #0x24]
- add r4, r6, r4
- str r4, [sp, #0x20]
- ldr r4, [r10, #0x4]
- add r4, r5, r4
- str r4, [sp, #0x24]
-_020B1E28:
- ldr r4, [sp, #0x20]
- ldr r6, [r7, #0x0]
- add r5, r4, #0x800
- ldr r4, _020B1E9C ; =0x000001FF
- and r4, r4, r5, asr #0xc
- ldr r5, _020B1EA0 ; =0xFE00FF00
- and r6, r6, r5
- ldr r5, [sp, #0x24]
- add r5, r5, #0x800
- mov r5, r5, asr #0xc
- and r5, r5, #0xff
- orr r5, r6, r5
- orr r4, r5, r4, lsl #0x10
- str r4, [r7, #0x0]
-_020B1E60:
- ldr r4, [sp, #0x0]
- add r4, r4, #0x1
- mov r4, r4, lsl #0x10
- mov r4, r4, lsr #0x10
- str r4, [sp, #0x0]
- cmp r4, r1
- blo _020B1B54
-_020B1E7C:
- mov r0, r1
- add sp, sp, #0x34
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B1E88: .word 0x01FF0000
-_020B1E8C: .word 0xC000C000
-_020B1E90: .word UNK_020FF8AC
-_020B1E94: .word UNK_020FF894
-_020B1E98: .word 0xC1FFFCFF
-_020B1E9C: .word 0x000001FF
-_020B1EA0: .word 0xFE00FF00
-
- arm_func_start FUN_020B1EA4
-FUN_020B1EA4: ; 0x020B1EA4
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020B0518
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- mov r0, r4
- bl FUN_020B1FC4
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B1EC4
-FUN_020B1EC4: ; 0x020B1EC4
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020B0534
- cmp r0, #0x0
- ldmeqia sp!, {r4,pc}
- mov r0, r4
- bl FUN_020B1FC4
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B1EE4
-FUN_020B1EE4: ; 0x020B1EE4
- stmdb sp!, {r4,lr}
- mov r4, r0
- bl FUN_020B0438
- mov r0, r4
- bl FUN_020B1FC4
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B1EFC
-FUN_020B1EFC: ; 0x020B1EFC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x14
- mov r4, r2
- ldr r2, [r4, #0xc]
- mov r5, r1
- ldr r1, [r2, #0x0]
- ldr r2, [sp, #0x34]
- str r1, [sp, #0x0]
- ldr r1, [sp, #0x38]
- str r2, [sp, #0x4]
- mov r6, r3
- mov r7, r0
- ldr r12, [sp, #0x3c]
- str r1, [sp, #0x8]
- ldr r1, [sp, #0x28]
- ldr r2, [sp, #0x2c]
- ldr r3, [sp, #0x30]
- mov r0, r6
- str r12, [sp, #0xc]
- bl FUN_020B45F0
- str r6, [r7, #0x34]
- str r4, [r7, #0x30]
- add r0, r7, #0x38
- mov r1, #0x1
- str r6, [r7, #0x34]
- bl FUN_020B1A68
- mov r0, r7
- bl FUN_020B04C0
- mov r0, r7
- mov r1, r5
- bl FUN_020B1EE4
- add sp, sp, #0x14
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B1F80
-FUN_020B1F80: ; 0x020B1F80
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- str r2, [r5, #0x30]
- mvn r2, #0x0
- add r0, r5, #0x38
- mov r1, #0x1
- str r2, [r5, #0x34]
- bl FUN_020B1A68
- mov r0, r5
- bl FUN_020B04C0
- mov r0, r5
- mov r1, r4
- bl FUN_020B1EE4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020B1FC4
-FUN_020B1FC4: ; 0x020B1FC4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r1, [r5, #0x0]
- ldrh r1, [r1, #0x4]
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- bl FUN_020B06E0
- mov r4, r0
- ldr r7, [r5, #0x30]
- ldrh r1, [r4, #0x0]
- mov r0, r7
- bl FUN_020AFE8C
- str r0, [r5, #0x2c]
- ldr r1, [r5, #0x18]
- add r0, r5, #0x38
- ldr r2, [r1, #0x4]
- mov r1, #0x1
- and r6, r2, #0xff
- bl FUN_020B1A68
- cmp r6, #0x0
- beq _020B2068
- cmp r6, #0x2
- bne _020B203C
- ldrsh r1, [r4, #0x4]
- ldrsh r2, [r4, #0x6]
- add r0, r5, #0x38
- bl FUN_020B1AB4
- b _020B2068
-_020B203C:
- ldr r1, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r0, r5, #0x38
- bl FUN_020B1A78
- ldrh r1, [r4, #0x2]
- add r0, r5, #0x38
- bl FUN_020B1A98
- ldrsh r1, [r4, #0xc]
- ldrsh r2, [r4, #0xe]
- add r0, r5, #0x38
- bl FUN_020B1AB4
-_020B2068:
- ldr r2, [r7, #0xc]
- cmp r2, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- ldr r1, [r5, #0x34]
- mvn r0, #0x0
- cmp r1, r0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- ldrh r1, [r4, #0x0]
- ldr r2, [r2, #0x4]
- ldr r0, [r5, #0x34]
- add r3, r2, r1, lsl #0x3
- ldr r1, [r2, r1, lsl #0x3]
- ldr r2, [r3, #0x4]
- bl FUN_020B4400
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B20C8
-FUN_020B20C8: ; 0x020B20C8
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r6, #0x0
- str r6, [r0, #0x38]
- ldr r7, [sp, #0x30]
- str r6, [r0, #0x30]
- mov r10, r1
- str r7, [r0, #0x34]
- str r0, [sp, #0x0]
- movs r8, r3
- mov r9, r2
- str r10, [r0, #0x3c]
- ldr r11, [sp, #0x34]
- beq _020B215C
- mov r0, #0x1
- str r6, [sp, #0x8]
- str r0, [sp, #0x4]
-_020B210C:
- mov r0, #0x28
- mul r4, r6, r0
- ldr r1, [sp, #0x4]
- add r0, r10, r4
- bl FUN_020B1AD4
- mov r0, #0x54
- mla r5, r6, r0, r9
- ldr r1, [sp, #0x8]
- mov r0, r7
- str r5, [r10, r4]
- bl FUN_020AFC04
- mov r1, r0
- mov r0, r5
- mov r2, r11
- bl FUN_020B1F80
- add r0, r6, #0x1
- mov r0, r0, lsl #0x10
- mov r6, r0, lsr #0x10
- cmp r6, r8
- blo _020B210C
-_020B215C:
- ldr r0, [sp, #0x0]
- bl FUN_020B04C0
- ldr r0, [sp, #0x0]
- ldr r3, [sp, #0x38]
- ldr r2, [sp, #0x0]
- add r0, r0, #0x44
- mov r1, #0x1
- str r3, [r2, #0x40]
- bl FUN_020B1A68
- ldr r0, [sp, #0x0]
- mov r1, #0x0
- strh r1, [r0, #0x2c]
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B2194
-FUN_020B2194: ; 0x020B2194
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- bl FUN_020B0518
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- mov r0, r7
- bl FUN_020B06E0
- mov r4, r0
- ldrh r1, [r4, #0x0]
- ldr r0, [r7, #0x40]
- bl FUN_020AFF34
- ldr r1, [r7, #0x18]
- mov r6, r0
- ldr r1, [r1, #0x4]
- add r0, r7, #0x44
- and r5, r1, #0xff
- mov r1, #0x1
- bl FUN_020B1A68
- cmp r5, #0x0
- beq _020B2234
- cmp r5, #0x2
- bne _020B2208
- ldrsh r1, [r4, #0x4]
- ldrsh r2, [r4, #0x6]
- add r0, r7, #0x44
- bl FUN_020B1AB4
- b _020B2234
-_020B2208:
- ldr r1, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r0, r7, #0x44
- bl FUN_020B1A78
- ldrh r1, [r4, #0x2]
- add r0, r7, #0x44
- bl FUN_020B1A98
- ldrsh r1, [r4, #0xc]
- ldrsh r2, [r4, #0xe]
- add r0, r7, #0x44
- bl FUN_020B1AB4
-_020B2234:
- ldrh r2, [r7, #0x2c]
- mov r1, r6
- add r0, r7, #0x30
- bl FUN_020B24E0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B224C
-FUN_020B224C: ; 0x020B224C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r0
- ldr r2, [r4, #0x0]
- mov r6, r1
- ldrh r5, [r2, #0x4]
- bl FUN_020B0534
- cmp r0, #0x0
- beq _020B2318
- ldrh r1, [r4, #0x2c]
- mov r0, r4
- add r1, r1, r5
- strh r1, [r4, #0x2c]
- bl FUN_020B06E0
- mov r5, r0
- ldrh r1, [r5, #0x0]
- ldr r0, [r4, #0x40]
- bl FUN_020AFF34
- ldr r1, [r4, #0x18]
- mov r7, r0
- ldr r1, [r1, #0x4]
- add r0, r4, #0x44
- and r6, r1, #0xff
- mov r1, #0x1
- bl FUN_020B1A68
- cmp r6, #0x0
- beq _020B2300
- cmp r6, #0x2
- bne _020B22D4
- ldrsh r1, [r5, #0x4]
- ldrsh r2, [r5, #0x6]
- add r0, r4, #0x44
- bl FUN_020B1AB4
- b _020B2300
-_020B22D4:
- ldr r1, [r5, #0x4]
- ldr r2, [r5, #0x8]
- add r0, r4, #0x44
- bl FUN_020B1A78
- ldrh r1, [r5, #0x2]
- add r0, r4, #0x44
- bl FUN_020B1A98
- ldrsh r1, [r5, #0xc]
- ldrsh r2, [r5, #0xe]
- add r0, r4, #0x44
- bl FUN_020B1AB4
-_020B2300:
- ldrh r2, [r4, #0x2c]
- mov r1, r7
- add r0, r4, #0x30
- bl FUN_020B24E0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-_020B2318:
- mov r1, r6
- add r0, r4, #0x30
- bl FUN_020B232C
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B232C
-FUN_020B232C: ; 0x020B232C
- stmdb sp!, {r4-r8,lr}
- mov r7, r0
- ldr r0, [r7, #0x8]
- mov r6, r1
- cmp r0, #0x1
- bne _020B238C
- ldr r0, [r7, #0x0]
- ldr r4, [r7, #0xc]
- ldrh r0, [r0, #0x2]
- mov r5, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r8,pc}
- mov r8, #0x58
-_020B2360:
- mla r0, r5, r8, r4
- mov r1, r6
- bl FUN_020B1EC4
- ldr r1, [r7, #0x0]
- add r0, r5, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r1, #0x2]
- mov r5, r0, lsr #0x10
- cmp r5, r1
- blo _020B2360
- ldmia sp!, {r4-r8,pc}
-_020B238C:
- ldr r0, [r7, #0x0]
- ldr r4, [r7, #0xc]
- ldrh r0, [r0, #0x0]
- mov r5, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r8,pc}
- mov r8, #0x28
-_020B23A8:
- mul r0, r5, r8
- ldr r0, [r4, r0]
- mov r1, r6
- bl FUN_020B1EC4
- ldr r1, [r7, #0x0]
- add r0, r5, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r1, #0x0]
- mov r5, r0, lsr #0x10
- cmp r5, r1
- blo _020B23A8
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B23D8
-FUN_020B23D8: ; 0x020B23D8
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- ldrh r0, [r5, #0x0]
- mov r4, #0x0
- mov r6, r4
- cmp r0, #0x0
- bls _020B2424
-_020B23F4:
- mov r0, r5
- mov r1, r6
- bl FUN_020AFF34
- ldrh r0, [r0, #0x0]
- ldrh r1, [r5, #0x0]
- cmp r0, r4
- movhi r4, r0
- add r0, r6, #0x1
- mov r0, r0, lsl #0x10
- mov r6, r0, lsr #0x10
- cmp r6, r1
- blo _020B23F4
-_020B2424:
- mov r0, r4
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020B242C
-FUN_020B242C: ; 0x020B242C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r7, r0
- bl FUN_020B0438
- mov r1, #0x0
- mov r0, r7
- strh r1, [r7, #0x2c]
- bl FUN_020B06E0
- mov r4, r0
- ldrh r1, [r4, #0x0]
- ldr r0, [r7, #0x40]
- bl FUN_020AFF34
- ldr r1, [r7, #0x18]
- mov r6, r0
- ldr r1, [r1, #0x4]
- add r0, r7, #0x44
- and r5, r1, #0xff
- mov r1, #0x1
- bl FUN_020B1A68
- cmp r5, #0x0
- beq _020B24C8
- cmp r5, #0x2
- bne _020B249C
- ldrsh r1, [r4, #0x4]
- ldrsh r2, [r4, #0x6]
- add r0, r7, #0x44
- bl FUN_020B1AB4
- b _020B24C8
-_020B249C:
- ldr r1, [r4, #0x4]
- ldr r2, [r4, #0x8]
- add r0, r7, #0x44
- bl FUN_020B1A78
- ldrh r1, [r4, #0x2]
- add r0, r7, #0x44
- bl FUN_020B1A98
- ldrsh r1, [r4, #0xc]
- ldrsh r2, [r4, #0xe]
- add r0, r7, #0x44
- bl FUN_020B1AB4
-_020B24C8:
- ldrh r2, [r7, #0x2c]
- mov r1, r6
- add r0, r7, #0x30
- bl FUN_020B24E0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B24E0
-FUN_020B24E0: ; 0x020B24E0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r10, r1
- str r0, [sp, #0x0]
- str r10, [r0, #0x0]
- ldr r0, [r0, #0x8]
- mov r9, r2
- cmp r0, #0x1
- bne _020B2654
- ldrh r1, [r10, #0x2]
- ldr r0, [sp, #0x0]
- mov r4, #0x0
- ldr r8, [r0, #0xc]
- cmp r1, #0x0
- bls _020B2544
- mov r3, r4
- mov r0, #0x58
-_020B2524:
- mla r1, r4, r0, r8
- str r3, [r1, #0x54]
- add r1, r4, #0x1
- mov r1, r1, lsl #0x10
- ldrh r2, [r10, #0x2]
- mov r4, r1, lsr #0x10
- cmp r4, r2
- blo _020B2524
-_020B2544:
- ldrh r0, [r10, #0x0]
- mov r5, #0x0
- cmp r0, #0x0
- addls sp, sp, #0x14
- ldmlsia sp!, {r4-r11,pc}
- str r5, [sp, #0x4]
- mov r11, #0x1
-_020B2560:
- ldr r0, [r10, #0x4]
- mov r1, #0x58
- add r7, r0, r5, lsl #0x3
- ldrh r0, [r7, #0x6]
- and r0, r0, #0xff00
- mov r0, r0, lsl #0x8
- mov r0, r0, lsr #0x10
- mla r6, r0, r1, r8
- ldr r0, [r6, #0x54]
- cmp r0, #0x0
- bne _020B2634
- ldr r0, [sp, #0x0]
- ldrh r1, [r7, #0x0]
- ldr r0, [r0, #0x4]
- bl FUN_020AFC04
- mov r4, r0
- mov r0, r6
- mov r1, r4
- bl FUN_020B1EE4
- str r11, [r6, #0x8]
- ldrh r0, [r7, #0x6]
- and r0, r0, #0xf
- cmp r0, #0x1
- bne _020B2630
- ldrh r1, [r4, #0x0]
- ldr r7, [sp, #0x4]
- mov r3, r7
- cmp r1, #0x0
- bls _020B25F0
- ldr r2, [r4, #0xc]
-_020B25D8:
- add r0, r2, r3, lsl #0x3
- ldrh r0, [r0, #0x4]
- add r3, r3, #0x1
- cmp r3, r1
- add r7, r7, r0
- blo _020B25D8
-_020B25F0:
- mov r0, r6
- bl FUN_020B0408
- cmp r0, #0x0
- beq _020B261C
- mov r0, r9
- mov r1, r7
- bl _u32_div_f
- mov r0, r6
- mov r1, r1, lsl #0xc
- bl FUN_020B1EC4
- b _020B2630
-_020B261C:
- cmp r9, r7
- movcc r7, r9
- mov r0, r6
- mov r1, r7, lsl #0xc
- bl FUN_020B1EC4
-_020B2630:
- str r11, [r6, #0x54]
-_020B2634:
- add r0, r5, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r10, #0x0]
- mov r5, r0, lsr #0x10
- cmp r5, r1
- blo _020B2560
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,pc}
-_020B2654:
- ldrh r1, [r10, #0x0]
- ldr r0, [sp, #0x0]
- mov r4, #0x0
- cmp r1, #0x0
- ldr r11, [r0, #0xc]
- addls sp, sp, #0x14
- ldmlsia sp!, {r4-r11,pc}
- mov r0, #0x1
- str r4, [sp, #0xc]
- str r0, [sp, #0x8]
-_020B267C:
- mov r0, #0x28
- mul r2, r4, r0
- ldr r3, [r10, #0x4]
- mov r0, r4, lsl #0x3
- ldrh r1, [r3, r0]
- ldr r0, [sp, #0x0]
- ldr r6, [r11, r2]
- ldr r0, [r0, #0x4]
- add r7, r3, r4, lsl #0x3
- bl FUN_020AFC04
- mov r5, r0
- mov r0, r6
- mov r1, r5
- bl FUN_020B1EE4
- ldr r0, [sp, #0x8]
- str r0, [r6, #0x8]
- ldrh r0, [r7, #0x6]
- and r0, r0, #0xf
- cmp r0, #0x1
- bne _020B2740
- ldrh r1, [r5, #0x0]
- ldr r8, [sp, #0xc]
- mov r0, r8
- cmp r1, #0x0
- bls _020B2700
- ldr r3, [r5, #0xc]
-_020B26E4:
- add r1, r3, r0, lsl #0x3
- ldrh r2, [r1, #0x4]
- add r0, r0, #0x1
- ldrh r1, [r5, #0x0]
- add r8, r8, r2
- cmp r0, r1
- blo _020B26E4
-_020B2700:
- mov r0, r6
- bl FUN_020B0408
- cmp r0, #0x0
- beq _020B272C
- mov r0, r9
- mov r1, r8
- bl _u32_div_f
- mov r0, r6
- mov r1, r1, lsl #0xc
- bl FUN_020B1EC4
- b _020B2740
-_020B272C:
- cmp r9, r8
- movcc r8, r9
- mov r0, r6
- mov r1, r8, lsl #0xc
- bl FUN_020B1EC4
-_020B2740:
- mov r0, #0x28
- mla r3, r4, r0, r11
- ldr r0, [sp, #0x8]
- str r0, [r3, #0x8]
- ldrsh r1, [r7, #0x2]
- ldrsh r2, [r7, #0x4]
- add r0, r3, #0xc
- bl FUN_020B1AB4
- add r0, r4, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r10, #0x0]
- mov r4, r0, lsr #0x10
- cmp r4, r1
- blo _020B267C
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start thunk_FUN_020b5040
-thunk_FUN_020b5040: ; 0x020B2780
- ldr ip, _020B2788 ; =FUN_020B5040
- bx r12
- .balign 4
-_020B2788: .word FUN_020B5040
-
- arm_func_start FUN_020B278C
-FUN_020B278C:
- ldr r0, [r0, #0x78]
- bx lr
-
- arm_func_start FUN_020B2794
-FUN_020B2794: ; 0x020B2794
- stmdb sp!, {lr}
- sub sp, sp, #0x1c
- ldr r2, _020B2894 ; =UNK_021CDD70
- mov lr, #0x0
- ldr r12, [r2, #0x0]
- ldr r3, _020B2898 ; =UNK_021CDEF4
- mov r2, #0x18
- str r1, [sp, #0x0]
- str r1, [sp, #0xc]
- mla r1, r12, r2, r3
- rsb r3, r0, #0x0
- str r0, [sp, #0x4]
- add r0, sp, #0x0
- mov r2, r1
- str r3, [sp, #0x8]
- str lr, [sp, #0x10]
- str lr, [sp, #0x14]
- bl FUN_020B423C
- ldr r0, _020B2894 ; =UNK_021CDD70
- ldr r1, _020B289C ; =UNK_021CE1F4
- ldr r2, [r0, #0x0]
- mov r0, #0x18
- mla r1, r2, r0, r1
- add r0, sp, #0x0
- mov r2, r1
- bl FUN_020B423C
- ldr r0, _020B28A0 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020B2824
- ldr r1, _020B28A4 ; =UNK_02106570
- ldr r0, _020B28A8 ; =0x0000FFFE
- ldrh r1, [r1, #0x0]
- cmp r1, r0
- movne r0, #0x1
- bne _020B2828
-_020B2824:
- mov r0, #0x0
-_020B2828:
- cmp r0, #0x0
- ldreq r1, _020B2894 ; =UNK_021CDD70
- ldreq r0, _020B28A4 ; =UNK_02106570
- ldreq r1, [r1, #0x0]
- streqh r1, [r0, #0x0]
- ldr r0, _020B2894 ; =UNK_021CDD70
- ldr r1, _020B28AC ; =UNK_021CDDF4
- ldr r0, [r0, #0x0]
- mov r0, r0, lsl #0x10
- add r12, r1, r0, lsr #0xd
- ldrh r0, [r12, #0x4]
- cmp r0, #0x3
- addls pc, pc, r0, lsl #0x2
- b _020B288C
- ; Jump table
- b _020B2870 ; case 0
- b _020B288C ; case 1
- b _020B2870 ; case 2
- b _020B2870 ; case 3
-_020B2870:
- ldr r0, _020B28B0 ; =UNK_021CDD64
- mov r1, #0x1
- ldrh r3, [r0, #0x0]
- add r2, r3, #0x1
- strh r2, [r0, #0x0]
- strh r3, [r12, #0x2]
- strh r1, [r12, #0x4]
-_020B288C:
- add sp, sp, #0x1c
- ldmia sp!, {pc}
- .balign 4
-_020B2894: .word UNK_021CDD70
-_020B2898: .word UNK_021CDEF4
-_020B289C: .word UNK_021CE1F4
-_020B28A0: .word UNK_021CDD68
-_020B28A4: .word UNK_02106570
-_020B28A8: .word 0x0000FFFE
-_020B28AC: .word UNK_021CDDF4
-_020B28B0: .word UNK_021CDD64
-
- arm_func_start FUN_020B28B4
-FUN_020B28B4: ; 0x020B28B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x1c
- ldr r2, _020B29E8 ; =UNK_021CDD70
- mov r12, #0x0
- ldr r3, [r2, #0x0]
- mov r4, r1
- ldr r2, _020B29EC ; =UNK_021CDEF4
- mov r1, #0x18
- mla r1, r3, r1, r2
- mov r5, r0
- add r0, sp, #0x0
- mov r2, r1
- str r5, [sp, #0x0]
- str r12, [sp, #0x4]
- str r12, [sp, #0x8]
- str r4, [sp, #0xc]
- str r12, [sp, #0x10]
- str r12, [sp, #0x14]
- bl FUN_020B423C
- mov r0, r5
- bl FX_Inv
- mov r1, #0x0
- str r0, [sp, #0x0]
- mov r0, r4
- str r1, [sp, #0x4]
- str r1, [sp, #0x8]
- bl FX_Inv
- mov r3, #0x0
- ldr r1, _020B29E8 ; =UNK_021CDD70
- str r0, [sp, #0xc]
- ldr r2, [r1, #0x0]
- ldr r1, _020B29F0 ; =UNK_021CE1F4
- mov r0, #0x18
- mla r1, r2, r0, r1
- add r0, sp, #0x0
- mov r2, r1
- str r3, [sp, #0x10]
- str r3, [sp, #0x14]
- bl FUN_020B423C
- ldr r0, _020B29F4 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020B2978
- ldr r1, _020B29F8 ; =UNK_02106570
- ldr r0, _020B29FC ; =0x0000FFFE
- ldrh r1, [r1, #0x0]
- cmp r1, r0
- movne r0, #0x1
- bne _020B297C
-_020B2978:
- mov r0, #0x0
-_020B297C:
- cmp r0, #0x0
- ldreq r1, _020B29E8 ; =UNK_021CDD70
- ldreq r0, _020B29F8 ; =UNK_02106570
- ldreq r1, [r1, #0x0]
- streqh r1, [r0, #0x0]
- ldr r0, _020B29E8 ; =UNK_021CDD70
- ldr r1, _020B2A00 ; =UNK_021CDDF4
- ldr r0, [r0, #0x0]
- mov r0, r0, lsl #0x10
- add r12, r1, r0, lsr #0xd
- ldrh r0, [r12, #0x4]
- cmp r0, #0x3
- addls pc, pc, r0, lsl #0x2
- b _020B29E0
- ; Jump table
- b _020B29C4 ; case 0
- b _020B29E0 ; case 1
- b _020B29C4 ; case 2
- b _020B29C4 ; case 3
-_020B29C4:
- ldr r0, _020B2A04 ; =UNK_021CDD64
- mov r1, #0x1
- ldrh r3, [r0, #0x0]
- add r2, r3, #0x1
- strh r2, [r0, #0x0]
- strh r3, [r12, #0x2]
- strh r1, [r12, #0x4]
-_020B29E0:
- add sp, sp, #0x1c
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B29E8: .word UNK_021CDD70
-_020B29EC: .word UNK_021CDEF4
-_020B29F0: .word UNK_021CE1F4
-_020B29F4: .word UNK_021CDD68
-_020B29F8: .word UNK_02106570
-_020B29FC: .word 0x0000FFFE
-_020B2A00: .word UNK_021CDDF4
-_020B2A04: .word UNK_021CDD64
-
- arm_func_start FUN_020B2A08
-FUN_020B2A08: ; 0x020B2A08
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x1c
- ldr r3, _020B2AEC ; =UNK_021CDD68
- mov r4, r2
- ldr r2, [r3, #0x0]
- cmp r2, #0x0
- beq _020B2A6C
- ldr r2, _020B2AF0 ; =UNK_021CDD70
- mov r3, #0x18
- ldr r2, [r2, #0x0]
- ldr lr, _020B2AF4 ; =UNK_021CDF04
- mul r5, r2, r3
- ldr r3, [lr, r5]
- ldr ip, _020B2AF8 ; =UNK_021CDF08
- add r0, r3, r0
- str r0, [lr, r5]
- ldr r0, [r12, r5]
- ldr r3, _020B2AFC ; =UNK_021CDD74
- add r0, r0, r1
- str r0, [r12, r5]
- ldr r0, [r3, r2, lsl #0x2]
- add sp, sp, #0x1c
- add r0, r0, r4
- str r0, [r3, r2, lsl #0x2]
- ldmia sp!, {r4-r5,pc}
-_020B2A6C:
- ldr r2, _020B2AF0 ; =UNK_021CDD70
- mov lr, #0x1000
- ldr r12, [r2, #0x0]
- ldr r3, _020B2B00 ; =UNK_021CDEF4
- mov r2, #0x18
- str r1, [sp, #0x14]
- mla r1, r12, r2, r3
- mov r3, #0x0
- str r0, [sp, #0x10]
- add r0, sp, #0x0
- mov r2, r1
- str lr, [sp, #0x0]
- str r3, [sp, #0x4]
- str r3, [sp, #0x8]
- str lr, [sp, #0xc]
- bl FUN_020B423C
- ldr r0, _020B2AF0 ; =UNK_021CDD70
- ldr r1, _020B2B04 ; =UNK_021CE1F4
- ldr r2, [r0, #0x0]
- mov r0, #0x18
- mla r1, r2, r0, r1
- add r0, sp, #0x0
- mov r2, r1
- bl FUN_020B423C
- ldr r0, _020B2AF0 ; =UNK_021CDD70
- ldr r2, _020B2AFC ; =UNK_021CDD74
- ldr r1, [r0, #0x0]
- ldr r0, [r2, r1, lsl #0x2]
- add r0, r0, r4
- str r0, [r2, r1, lsl #0x2]
- add sp, sp, #0x1c
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B2AEC: .word UNK_021CDD68
-_020B2AF0: .word UNK_021CDD70
-_020B2AF4: .word UNK_021CDF04
-_020B2AF8: .word UNK_021CDF08
-_020B2AFC: .word UNK_021CDD74
-_020B2B00: .word UNK_021CDEF4
-_020B2B04: .word UNK_021CE1F4
-
- arm_func_start FUN_020B2B08
-FUN_020B2B08: ; 0x020B2B08
- ldr r0, _020B2B4C ; =UNK_021CDD70
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- movle r0, #0x1
- movgt r0, #0x0
- cmp r0, #0x0
- bxne lr
- ldr r1, _020B2B4C ; =UNK_021CDD70
- ldr r0, _020B2B50 ; =UNK_02106570
- ldr r3, [r1, #0x0]
- ldrh r2, [r0, #0x0]
- sub r3, r3, #0x1
- str r3, [r1, #0x0]
- cmp r2, r3
- ldrgt r1, _020B2B54 ; =0x0000FFFE
- strgth r1, [r0, #0x0]
- bx lr
- .balign 4
-_020B2B4C: .word UNK_021CDD70
-_020B2B50: .word UNK_02106570
-_020B2B54: .word 0x0000FFFE
-
- arm_func_start FUN_020B2B58
-FUN_020B2B58: ; 0x020B2B58
- stmdb sp!, {r4-r10,lr}
- ldr r0, _020B2D74 ; =UNK_021CDD6C
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x7c]
- ands r0, r0, #0x1
- bne _020B2CA4
- ldr r0, _020B2D78 ; =UNK_021CDD70
- ldr r1, [r0, #0x0]
- mov r0, r1, lsl #0x10
- add r5, r1, #0x1
- cmp r5, #0x20
- mov r4, r0, lsr #0x10
- movlt r0, #0x1
- movge r0, #0x0
- cmp r0, #0x0
- beq _020B2C44
- ldr r0, _020B2D7C ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020B2BE4
- ldr r1, _020B2D78 ; =UNK_021CDD70
- mov r0, #0x18
- ldr r3, [r1, #0x0]
- ldr r1, _020B2D80 ; =UNK_021CDD74
- mul r8, r3, r0
- ldr r6, _020B2D84 ; =UNK_021CDF04
- mul r7, r5, r0
- ldr r2, [r6, r8]
- ldr r0, [r1, r3, lsl #0x2]
- ldr r3, _020B2D88 ; =UNK_021CDF08
- str r2, [r6, r7]
- ldr r2, [r3, r8]
- str r0, [r1, r5, lsl #0x2]
- str r2, [r3, r7]
- b _020B2C3C
-_020B2BE4:
- ldr r1, _020B2D78 ; =UNK_021CDD70
- mov r0, #0x18
- ldr r2, [r1, #0x0]
- ldr r7, _020B2D80 ; =UNK_021CDD74
- mul lr, r2, r0
- ldr r1, _020B2D8C ; =UNK_021CDEF4
- mul r12, r5, r0
- ldr r8, _020B2D90 ; =UNK_021CE1F4
- add r10, r1, lr
- ldr r6, [r7, r2, lsl #0x2]
- add r9, r1, r12
- ldmia r10!, {r0-r3}
- stmia r9!, {r0-r3}
- ldmia r10, {r0-r1}
- str r6, [r7, r5, lsl #0x2]
- add r7, r8, lr
- stmia r9, {r0-r1}
- add r6, r8, r12
- ldmia r7!, {r0-r3}
- stmia r6!, {r0-r3}
- ldmia r7, {r0-r1}
- stmia r6, {r0-r1}
-_020B2C3C:
- ldr r0, _020B2D78 ; =UNK_021CDD70
- str r5, [r0, #0x0]
-_020B2C44:
- ldr r0, _020B2D78 ; =UNK_021CDD70
- ldr r2, _020B2D94 ; =UNK_021CDDF4
- ldr r0, [r0, #0x0]
- mov r5, r4, lsl #0x3
- mov r0, r0, lsl #0x10
- mov r3, r0, lsr #0x10
- add r4, r2, r4, lsl #0x3
- mov r6, r3, lsl #0x3
- ldrh r1, [r2, r5]
- ldrh r0, [r4, #0x2]
- add r3, r2, r3, lsl #0x3
- strh r1, [r2, r6]
- strh r0, [r3, #0x2]
- ldrh r2, [r4, #0x4]
- ldrh r0, [r4, #0x6]
- ldr r1, _020B2D98 ; =UNK_021CDDF8
- strh r2, [r3, #0x4]
- strh r0, [r3, #0x6]
- ldrh r0, [r1, r5]
- cmp r0, #0x1
- moveq r0, #0x2
- streqh r0, [r1, r6]
- strneh r0, [r1, r6]
- ldmia sp!, {r4-r10,pc}
-_020B2CA4:
- ldr r0, _020B2D78 ; =UNK_021CDD70
- ldr r0, [r0, #0x0]
- add r4, r0, #0x1
- cmp r4, #0x20
- movlt r0, #0x1
- movge r0, #0x0
- cmp r0, #0x0
- ldmeqia sp!, {r4-r10,pc}
- ldr r0, _020B2D7C ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020B2D10
- ldr r1, _020B2D78 ; =UNK_021CDD70
- mov r0, #0x18
- ldr r3, [r1, #0x0]
- ldr r1, _020B2D80 ; =UNK_021CDD74
- mul r7, r3, r0
- ldr r5, _020B2D84 ; =UNK_021CDF04
- mul r6, r4, r0
- ldr r2, [r5, r7]
- ldr r0, [r1, r3, lsl #0x2]
- ldr r3, _020B2D88 ; =UNK_021CDF08
- str r2, [r5, r6]
- ldr r2, [r3, r7]
- str r0, [r1, r4, lsl #0x2]
- str r2, [r3, r6]
- b _020B2D68
-_020B2D10:
- ldr r1, _020B2D78 ; =UNK_021CDD70
- mov r0, #0x18
- ldr r2, [r1, #0x0]
- ldr ip, _020B2D80 ; =UNK_021CDD74
- mul r9, r2, r0
- ldr r1, _020B2D8C ; =UNK_021CDEF4
- mul r8, r4, r0
- ldr lr, _020B2D90 ; =UNK_021CE1F4
- add r6, r1, r9
- ldr r5, [r12, r2, lsl #0x2]
- add r7, r1, r8
- ldmia r6!, {r0-r3}
- stmia r7!, {r0-r3}
- ldmia r6, {r0-r1}
- add r6, lr, r9
- stmia r7, {r0-r1}
- add lr, lr, r8
- ldmia r6!, {r0-r3}
- stmia lr!, {r0-r3}
- ldmia r6, {r0-r1}
- stmia lr, {r0-r1}
- str r5, [r12, r4, lsl #0x2]
-_020B2D68:
- ldr r0, _020B2D78 ; =UNK_021CDD70
- str r4, [r0, #0x0]
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020B2D74: .word UNK_021CDD6C
-_020B2D78: .word UNK_021CDD70
-_020B2D7C: .word UNK_021CDD68
-_020B2D80: .word UNK_021CDD74
-_020B2D84: .word UNK_021CDF04
-_020B2D88: .word UNK_021CDF08
-_020B2D8C: .word UNK_021CDEF4
-_020B2D90: .word UNK_021CE1F4
-_020B2D94: .word UNK_021CDDF4
-_020B2D98: .word UNK_021CDDF8
-
- arm_func_start FUN_020B2D9C
-FUN_020B2D9C: ; 0x020B2D9C
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- ldrh r0, [r4, #0x56]
- cmp r0, #0x0
- bne _020B2DBC
- add r0, r4, #0x30
- bl FUN_020B2E78
- ldmia sp!, {r4-r6,pc}
-_020B2DBC:
- bl FUN_020B2B58
- ldrh r0, [r4, #0x56]
- ands r0, r0, #0x8
- beq _020B2E0C
- ldr r0, _020B2E70 ; =UNK_021CDD6C
- ldrsh r6, [r4, #0x52]
- ldr r0, [r0, #0x0]
- ldrsh r5, [r4, #0x50]
- bl FUN_020B4F88
- cmp r0, #0x0
- ldr r0, _020B2E70 ; =UNK_021CDD6C
- rsbne r5, r5, #0x0
- ldr r0, [r0, #0x0]
- bl FUN_020B4F74
- cmp r0, #0x0
- rsbne r6, r6, #0x0
- mov r0, r5, lsl #0xc
- mov r1, r6, lsl #0xc
- mov r2, #0x0
- bl FUN_020B2A08
-_020B2E0C:
- ldrh r0, [r4, #0x56]
- ands r0, r0, #0x4
- beq _020B2E40
- ldrh r0, [r4, #0x54]
- ldr r2, _020B2E74 ; =UNK_020FFA38
- mov r0, r0, asr #0x4
- mov r1, r0, lsl #0x1
- add r0, r1, #0x1
- mov r3, r1, lsl #0x1
- mov r1, r0, lsl #0x1
- ldrsh r0, [r2, r3]
- ldrsh r1, [r2, r1]
- bl FUN_020B2794
-_020B2E40:
- ldrh r0, [r4, #0x56]
- ands r0, r0, #0x2
- beq _020B2E5C
- ldr r0, [r4, #0x48]
- ldr r1, [r4, #0x4c]
- mov r2, #0x1000
- bl FUN_020B28B4
-_020B2E5C:
- add r0, r4, #0x30
- bl FUN_020B2E78
- mov r0, #0x1
- bl FUN_020B2B08
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B2E70: .word UNK_021CDD6C
-_020B2E74: .word UNK_020FFA38
-
- arm_func_start FUN_020B2E78
-FUN_020B2E78: ; 0x020B2E78
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r5, r0
- ldr r0, [r5, #0x8]
- cmp r0, #0x1
- bne _020B309C
- ldr r0, [r5, #0x0]
- mov r2, #0x0
- ldrh r0, [r0, #0x2]
- cmp r0, #0x0
- bls _020B2ED0
- ldr r3, _020B3174 ; =UNK_021CE8F4
- mov r4, r2
-_020B2EAC:
- add r0, r3, r2, lsl #0x2
- str r4, [r0, #0x4]
- ldr r0, [r5, #0x0]
- add r2, r2, #0x1
- ldrh r1, [r0, #0x2]
- mov r0, r2, lsl #0x10
- mov r2, r0, lsr #0x10
- cmp r2, r1
- blo _020B2EAC
-_020B2ED0:
- ldr r0, _020B3178 ; =UNK_021CDD6C
- mov r6, #0x1
- ldr r1, [r0, #0x0]
- ldr r0, _020B3174 ; =UNK_021CE8F4
- str r6, [r0, #0x404]
- ldr r0, [r1, #0x80]
- cmp r0, #0x0
- beq _020B2FD8
- bl FUN_020B4948
- str r0, [sp, #0x0]
- mov r0, r6
- bl FUN_020B497C
- ldr r0, _020B3178 ; =UNK_021CDD6C
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x80]
- bl FUN_020B4958
- ldr r2, [r5, #0x0]
- mov r7, #0x0
- ldrh r0, [r2, #0x0]
- cmp r0, #0x0
- bls _020B2FC0
- mov r11, r7
-_020B2F28:
- ldr r0, [r2, #0x4]
- ldr r9, [r5, #0xc]
- add r10, r0, r7, lsl #0x3
- ldrh r0, [r10, #0x6]
- and r0, r0, #0xff00
- mov r0, r0, lsl #0x8
- mov r8, r0, lsr #0x10
- ldr r0, _020B3174 ; =UNK_021CE8F4
- strh r8, [r0, #0x0]
- bl FUN_020B2B58
- ldr r0, _020B3178 ; =UNK_021CDD6C
- ldrsh r4, [r10, #0x4]
- ldr r0, [r0, #0x0]
- ldrsh r10, [r10, #0x2]
- bl FUN_020B4F88
- cmp r0, #0x0
- ldr r0, _020B3178 ; =UNK_021CDD6C
- rsbne r10, r10, #0x0
- ldr r0, [r0, #0x0]
- bl FUN_020B4F74
- cmp r0, #0x0
- rsbne r4, r4, #0x0
- mov r2, r11
- mov r0, r10, lsl #0xc
- mov r1, r4, lsl #0xc
- bl FUN_020B2A08
- mov r0, #0x58
- mla r0, r8, r0, r9
- bl FUN_020B3554
- mov r0, r6
- bl FUN_020B2B08
- ldr r2, [r5, #0x0]
- add r0, r7, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r2, #0x0]
- mov r7, r0, lsr #0x10
- cmp r7, r1
- blo _020B2F28
-_020B2FC0:
- mov r0, #0x0
- bl FUN_020B497C
- ldr r0, [sp, #0x0]
- bl FUN_020B4958
- bl FUN_020B4968
- b _020B3088
-_020B2FD8:
- ldr r2, [r5, #0x0]
- mov r7, #0x0
- ldrh r0, [r2, #0x0]
- cmp r0, #0x0
- bls _020B3088
- str r7, [sp, #0x4]
- mov r11, #0x58
-_020B2FF4:
- ldr r0, [r2, #0x4]
- ldr r9, [r5, #0xc]
- add r10, r0, r7, lsl #0x3
- ldrh r0, [r10, #0x6]
- and r0, r0, #0xff00
- mov r0, r0, lsl #0x8
- mov r8, r0, lsr #0x10
- ldr r0, _020B3174 ; =UNK_021CE8F4
- strh r8, [r0, #0x0]
- bl FUN_020B2B58
- ldr r0, _020B3178 ; =UNK_021CDD6C
- ldrsh r4, [r10, #0x4]
- ldr r0, [r0, #0x0]
- ldrsh r10, [r10, #0x2]
- bl FUN_020B4F88
- cmp r0, #0x0
- ldr r0, _020B3178 ; =UNK_021CDD6C
- rsbne r10, r10, #0x0
- ldr r0, [r0, #0x0]
- bl FUN_020B4F74
- cmp r0, #0x0
- rsbne r4, r4, #0x0
- ldr r2, [sp, #0x4]
- mov r0, r10, lsl #0xc
- mov r1, r4, lsl #0xc
- bl FUN_020B2A08
- mla r0, r8, r11, r9
- bl FUN_020B3554
- mov r0, r6
- bl FUN_020B2B08
- ldr r2, [r5, #0x0]
- add r0, r7, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r2, #0x0]
- mov r7, r0, lsr #0x10
- cmp r7, r1
- blo _020B2FF4
-_020B3088:
- ldr r0, _020B3174 ; =UNK_021CE8F4
- mov r1, #0x0
- str r1, [r0, #0x404]
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-_020B309C:
- ldr r0, _020B3178 ; =UNK_021CDD6C
- ldr r7, [r5, #0xc]
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x80]
- cmp r0, #0x0
- beq _020B312C
- bl FUN_020B4948
- mov r6, r0
- mov r0, #0x1
- bl FUN_020B497C
- ldr r0, _020B3178 ; =UNK_021CDD6C
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x80]
- bl FUN_020B4958
- ldr r0, [r5, #0x0]
- mov r4, #0x0
- ldrh r0, [r0, #0x0]
- cmp r0, #0x0
- bls _020B3110
- mov r8, #0x28
-_020B30EC:
- mla r0, r4, r8, r7
- bl FUN_020B3474
- ldr r1, [r5, #0x0]
- add r0, r4, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r1, #0x0]
- mov r4, r0, lsr #0x10
- cmp r4, r1
- blo _020B30EC
-_020B3110:
- mov r0, #0x0
- bl FUN_020B497C
- mov r0, r6
- bl FUN_020B4958
- bl FUN_020B4968
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-_020B312C:
- ldr r0, [r5, #0x0]
- mov r4, #0x0
- ldrh r0, [r0, #0x0]
- cmp r0, #0x0
- addls sp, sp, #0xc
- ldmlsia sp!, {r4-r11,pc}
- mov r6, #0x28
-_020B3148:
- mla r0, r4, r6, r7
- bl FUN_020B3474
- ldr r1, [r5, #0x0]
- add r0, r4, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r1, #0x0]
- mov r4, r0, lsr #0x10
- cmp r4, r1
- blo _020B3148
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B3174: .word UNK_021CE8F4
-_020B3178: .word UNK_021CDD6C
-
- arm_func_start FUN_020B317C
-FUN_020B317C: ; 0x020B317C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r1, _020B31EC ; =UNK_021CDD6C
- mov r5, r0
- ldr r1, [r1, #0x0]
- ldr r1, [r1, #0x80]
- cmp r1, #0x0
- beq _020B31E0
- bl FUN_020B4948
- mov r4, r0
- mov r0, #0x1
- bl FUN_020B497C
- ldr r0, _020B31EC ; =UNK_021CDD6C
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x80]
- bl FUN_020B4958
- mov r0, r5
- bl FUN_020B3554
- mov r0, #0x0
- bl FUN_020B497C
- mov r0, r4
- bl FUN_020B4958
- bl FUN_020B4968
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020B31E0:
- bl FUN_020B3554
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B31EC: .word UNK_021CDD6C
-
- arm_func_start FUN_020B31F0
-FUN_020B31F0: ; 0x020B31F0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020B3260 ; =0x04000448
- mov r2, #0x1
- ldr r0, _020B3264 ; =UNK_021CDD6C
- str r2, [r1, #0x0]
- ldr r2, [r0, #0x0]
- ldr r3, [r2, #0x7c]
- cmp r3, #0x0
- beq _020B324C
- ands r0, r3, #0x1
- ldrne r0, _020B3268 ; =UNK_021CDD68
- movne r1, #0x0
- strne r1, [r0, #0x0]
- ands r0, r3, #0x2
- beq _020B323C
- mov r0, #0x0
- str r0, [r2, #0x74]
- bl FUN_020B4DA0
-_020B323C:
- ldr r0, _020B3264 ; =UNK_021CDD6C
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- str r1, [r0, #0x7c]
-_020B324C:
- ldr r0, _020B3264 ; =UNK_021CDD6C
- mov r1, #0x0
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B3260: .word 0x04000448
-_020B3264: .word UNK_021CDD6C
-_020B3268: .word UNK_021CDD68
-
- arm_func_start FUN_020B326C
-FUN_020B326C: ; 0x020B326C
- stmdb sp!, {r4-r8,lr}
- ldr r5, _020B330C ; =UNK_021CDD60
- ldr r3, _020B3310 ; =UNK_021CDD6C
- ldrh r6, [r5, #0x0]
- ldr r2, _020B3314 ; =UNK_021CDD70
- mov r4, #0x0
- ldr r7, _020B3318 ; =0x0000FFFE
- ldr r1, _020B331C ; =UNK_02106570
- str r0, [r3, #0x0]
- str r4, [r2, #0x0]
- strh r7, [r1, #0x0]
- cmp r6, #0x0
- ble _020B32D0
- ldr r8, _020B3320 ; =UNK_021CE4F4
- mvn r7, #0x0
- mov r6, #0x10
-_020B32AC:
- mov r0, r7
- mov r2, r6
- add r1, r8, #0x10
- bl MIi_CpuClearFast
- ldrh r0, [r5, #0x0]
- add r4, r4, #0x1
- add r8, r8, #0x20
- cmp r4, r0
- blt _020B32AC
-_020B32D0:
- ldr r4, _020B330C ; =UNK_021CDD60
- mov r0, #0x0
- ldr r3, _020B3324 ; =UNK_021CDD64
- ldr r1, _020B3328 ; =UNK_021CDDF4
- mov r2, #0x100
- strh r0, [r4, #0x0]
- strh r0, [r3, #0x0]
- bl MIi_CpuClearFast
- ldr r1, _020B332C ; =0x04000444
- mov r2, #0x0
- ldr r0, _020B3330 ; =0x04000454
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
- bl FUN_020B4178
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020B330C: .word UNK_021CDD60
-_020B3310: .word UNK_021CDD6C
-_020B3314: .word UNK_021CDD70
-_020B3318: .word 0x0000FFFE
-_020B331C: .word UNK_02106570
-_020B3320: .word UNK_021CE4F4
-_020B3324: .word UNK_021CDD64
-_020B3328: .word UNK_021CDDF4
-_020B332C: .word 0x04000444
-_020B3330: .word 0x04000454
-
- arm_func_start FUN_020B3334
-FUN_020B3334: ; 0x020B3334
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r1, r4
- mov r0, #0x0
- mov r2, #0x48
- bl MIi_CpuClear16
- mov r0, #0x1
- str r0, [r4, #0x10]
- mov r0, #0x3
- ldr r1, _020B3380 ; =FUN_020B3EE0
- str r0, [r4, #0x14]
- ldr r0, _020B3384 ; =FUN_020B3E48
- str r1, [r4, #0x18]
- ldr r1, _020B3388 ; =FUN_020B3C40
- str r0, [r4, #0x1c]
- ldr r0, _020B338C ; =FUN_020B3B90
- str r1, [r4, #0x20]
- str r0, [r4, #0x24]
- ldmia sp!, {r4,pc}
- .balign 4
-_020B3380: .word FUN_020B3EE0
-_020B3384: .word FUN_020B3E48
-_020B3388: .word FUN_020B3C40
-_020B338C: .word FUN_020B3B90
-
- arm_func_start FUN_020B3390
-FUN_020B3390: ; 0x020B3390
- ldr r2, [r0, #0x70]
- str r2, [r1, #0x30]
- str r1, [r0, #0x70]
- bx lr
-
- arm_func_start FUN_020B33A0
-FUN_020B33A0: ; 0x020B33A0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r4, r0
- bl FUN_020B504C
- mov r7, #0x0
- str r7, [r4, #0x70]
- str r7, [r4, #0x74]
- str r7, [r4, #0x78]
- str r7, [r4, #0x7c]
- str r7, [r4, #0x80]
- str r7, [r4, #0x84]
- strh r7, [r4, #0x88]
- strh r7, [r4, #0x8a]
- str r7, [r4, #0x8c]
- str r7, [r4, #0x90]
- ldr r1, _020B3454 ; =UNK_021CDD70
- strh r7, [r4, #0x94]
- ldr r2, _020B3458 ; =0x0000FFFE
- ldr r0, _020B345C ; =UNK_02106570
- ldr r6, _020B3460 ; =UNK_021CE4F4
- str r7, [r1, #0x0]
- strh r2, [r0, #0x0]
- mvn r5, #0x0
- mov r4, #0x10
-_020B3400:
- mov r0, r5
- mov r2, r4
- add r1, r6, #0x10
- bl MIi_CpuClearFast
- add r7, r7, #0x1
- cmp r7, #0x20
- add r6, r6, #0x20
- blt _020B3400
- ldr ip, _020B3464 ; =UNK_021CDD60
- mov r0, #0x0
- ldr r3, _020B3468 ; =UNK_021CDD64
- ldr r1, _020B346C ; =UNK_021CDDF4
- mov r2, #0x100
- strh r0, [r12, #0x0]
- strh r0, [r3, #0x0]
- bl MIi_CpuClearFast
- ldr r0, _020B3470 ; =UNK_021CDD68
- mov r1, #0x0
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B3454: .word UNK_021CDD70
-_020B3458: .word 0x0000FFFE
-_020B345C: .word UNK_02106570
-_020B3460: .word UNK_021CE4F4
-_020B3464: .word UNK_021CDD60
-_020B3468: .word UNK_021CDD64
-_020B346C: .word UNK_021CDDF4
-_020B3470: .word UNK_021CDD68
-
- arm_func_start FUN_020B3474
-FUN_020B3474: ; 0x020B3474
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r0, [r5, #0x8]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- ldr r4, [r5, #0x0]
- bl FUN_020B2B58
- ldrh r0, [r5, #0x1e]
- ands r0, r0, #0x8
- beq _020B34E4
- ldr r0, _020B354C ; =UNK_021CDD6C
- ldrsh r7, [r5, #0x1a]
- ldr r0, [r0, #0x0]
- ldrsh r6, [r5, #0x18]
- bl FUN_020B4F88
- cmp r0, #0x0
- ldr r0, _020B354C ; =UNK_021CDD6C
- rsbne r6, r6, #0x0
- ldr r0, [r0, #0x0]
- bl FUN_020B4F74
- cmp r0, #0x0
- rsbne r7, r7, #0x0
- mov r0, r6, lsl #0xc
- mov r1, r7, lsl #0xc
- mov r2, #0x0
- bl FUN_020B2A08
-_020B34E4:
- ldrh r0, [r5, #0x1e]
- ands r0, r0, #0x4
- beq _020B3518
- ldrh r0, [r5, #0x1c]
- ldr r2, _020B3550 ; =UNK_020FFA38
- mov r0, r0, asr #0x4
- mov r1, r0, lsl #0x1
- add r0, r1, #0x1
- mov r3, r1, lsl #0x1
- mov r1, r0, lsl #0x1
- ldrsh r0, [r2, r3]
- ldrsh r1, [r2, r1]
- bl FUN_020B2794
-_020B3518:
- ldrh r0, [r5, #0x1e]
- ands r0, r0, #0x2
- beq _020B3534
- ldr r0, [r5, #0x10]
- ldr r1, [r5, #0x14]
- mov r2, #0x1000
- bl FUN_020B28B4
-_020B3534:
- mov r0, r4
- bl FUN_020B3554
- mov r0, #0x1
- bl FUN_020B2B08
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B354C: .word UNK_021CDD6C
-_020B3550: .word UNK_020FFA38
-
- arm_func_start FUN_020B3554
-FUN_020B3554:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldrh r0, [r5, #0x4a]
- ldr r4, [r5, #0x2c]
- cmp r0, #0x0
- bne _020B35C0
- ldr r2, [r5, #0x34]
- mvn r0, #0x0
- cmp r2, r0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020B35B0
- ldr r1, _020B36B4 ; =UNK_02106574
- mov r0, r4
- str r2, [r1, #0x0]
- bl FUN_020B36C0
- ldr r0, _020B36B4 ; =UNK_02106574
- mvn r1, #0x0
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-_020B35B0:
- mov r0, r4
- bl FUN_020B36C0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-_020B35C0:
- bl FUN_020B2B58
- ldrh r0, [r5, #0x4a]
- ands r0, r0, #0x8
- beq _020B3610
- ldr r0, _020B36B8 ; =UNK_021CDD6C
- ldrsh r7, [r5, #0x46]
- ldr r0, [r0, #0x0]
- ldrsh r6, [r5, #0x44]
- bl FUN_020B4F88
- cmp r0, #0x0
- ldr r0, _020B36B8 ; =UNK_021CDD6C
- rsbne r6, r6, #0x0
- ldr r0, [r0, #0x0]
- bl FUN_020B4F74
- cmp r0, #0x0
- rsbne r7, r7, #0x0
- mov r0, r6, lsl #0xc
- mov r1, r7, lsl #0xc
- mov r2, #0x0
- bl FUN_020B2A08
-_020B3610:
- ldrh r0, [r5, #0x4a]
- ands r0, r0, #0x4
- beq _020B3644
- ldrh r0, [r5, #0x48]
- ldr r2, _020B36BC ; =UNK_020FFA38
- mov r0, r0, asr #0x4
- mov r1, r0, lsl #0x1
- add r0, r1, #0x1
- mov r3, r1, lsl #0x1
- mov r1, r0, lsl #0x1
- ldrsh r0, [r2, r3]
- ldrsh r1, [r2, r1]
- bl FUN_020B2794
-_020B3644:
- ldrh r0, [r5, #0x4a]
- ands r0, r0, #0x2
- beq _020B3660
- ldr r0, [r5, #0x3c]
- ldr r1, [r5, #0x40]
- mov r2, #0x1000
- bl FUN_020B28B4
-_020B3660:
- ldr r2, [r5, #0x34]
- mvn r0, #0x0
- cmp r2, r0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020B369C
- ldr r1, _020B36B4 ; =UNK_02106574
- mov r0, r4
- str r2, [r1, #0x0]
- bl FUN_020B36C0
- ldr r0, _020B36B4 ; =UNK_02106574
- mvn r1, #0x0
- str r1, [r0, #0x0]
- b _020B36A4
-_020B369C:
- mov r0, r4
- bl FUN_020B36C0
-_020B36A4:
- mov r0, #0x1
- bl FUN_020B2B08
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B36B4: .word UNK_02106574
-_020B36B8: .word UNK_021CDD6C
-_020B36BC: .word UNK_020FFA38
-
- arm_func_start FUN_020B36C0
-FUN_020B36C0: ; 0x020B36C0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- ldr r5, _020B3B54 ; =UNK_021CDD6C
- mov r10, r0
- ldr r0, [r5, #0x0]
- ldr r1, [r0, #0x7c]
- str r0, [sp, #0x0]
- ldr r9, [r0, #0x70]
- ands r0, r1, #0x2
- beq _020B38EC
- ldr r0, [r9, #0x14]
- cmp r0, #0x0
- beq _020B3840
- ldr r0, _020B3B58 ; =UNK_021CDD68
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020B3720
- ldr r2, _020B3B5C ; =UNK_02106570
- ldr r0, _020B3B60 ; =0x0000FFFE
- ldrh r2, [r2, #0x0]
- cmp r2, r0
- movne r0, #0x1
- bne _020B3724
-_020B3720:
- mov r0, #0x0
-_020B3724:
- cmp r0, #0x0
- beq _020B37AC
- ldr r0, _020B3B64 ; =UNK_021CE8F4
- ldr r1, [r0, #0x404]
- cmp r1, #0x0
- beq _020B3788
- ldrh r1, [r0, #0x0]
- ldr r0, _020B3B68 ; =UNK_021CE8F8
- ldr r1, [r0, r1, lsl #0x2]
- cmp r1, #0x0
- bne _020B37AC
- bl FUN_020B4010
- ldr r0, _020B3B6C ; =UNK_021CDD70
- ldr r2, _020B3B70 ; =UNK_021CDDF4
- ldr r0, [r0, #0x0]
- ldr r1, _020B3B64 ; =UNK_021CE8F4
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0xd
- ldrh r3, [r2, r0]
- ldr r4, _020B3B74 ; =UNK_021CE4F4
- ldrh r2, [r1, #0x0]
- ldr r0, _020B3B68 ; =UNK_021CE8F8
- add r1, r4, r3, lsl #0x5
- str r1, [r0, r2, lsl #0x2]
- b _020B37AC
-_020B3788:
- bl FUN_020B4010
- ldr r0, _020B3B6C ; =UNK_021CDD70
- ldr r1, _020B3B70 ; =UNK_021CDDF4
- ldr r0, [r0, #0x0]
- ldr r2, _020B3B74 ; =UNK_021CE4F4
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0xd
- ldrh r0, [r1, r0]
- add r1, r2, r0, lsl #0x5
-_020B37AC:
- ldr r0, _020B3B58 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r0, _020B3B6C ; =UNK_021CDD70
- ldreq r3, _020B3B78 ; =UNK_021CDEF4
- ldreq r2, [r0, #0x0]
- moveq r0, #0x18
- mlaeq r0, r2, r0, r3
- beq _020B37FC
- ldr r2, _020B3B6C ; =UNK_021CDD70
- mov r0, #0x18
- ldr r2, [r2, #0x0]
- ldr r3, _020B3B7C ; =UNK_021CDF04
- mul r4, r2, r0
- ldr r2, _020B3B80 ; =UNK_021CDF08
- ldr r3, [r3, r4]
- ldr r0, _020B3B84 ; =UNK_02106578
- ldr r2, [r2, r4]
- str r3, [r0, #0x10]
- str r2, [r0, #0x14]
-_020B37FC:
- bl FUN_020B4FAC
- ldr r1, _020B3B88 ; =UNK_02106574
- mvn r0, #0x0
- ldr r1, [r1, #0x0]
- cmp r1, r0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020B3830
- mov r0, r10
- bl FUN_020B4BF4
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-_020B3830:
- mov r0, r10
- bl FUN_020B4CDC
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-_020B3840:
- ldr r0, _020B3B6C ; =UNK_021CDD70
- ldr r1, _020B3B8C ; =UNK_021CDD74
- ldr r2, [r0, #0x0]
- ldr r0, [sp, #0x0]
- ldr r1, [r1, r2, lsl #0x2]
- bl FUN_020B4FA4
- ldr r0, _020B3B58 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r0, _020B3B6C ; =UNK_021CDD70
- ldreq r2, _020B3B78 ; =UNK_021CDEF4
- ldreq r1, [r0, #0x0]
- moveq r0, #0x18
- mlaeq r0, r1, r0, r2
- beq _020B38A8
- ldr r1, _020B3B6C ; =UNK_021CDD70
- mov r0, #0x18
- ldr r1, [r1, #0x0]
- ldr r2, _020B3B7C ; =UNK_021CDF04
- mul r3, r1, r0
- ldr r1, _020B3B80 ; =UNK_021CDF08
- ldr r2, [r2, r3]
- ldr r0, _020B3B84 ; =UNK_02106578
- ldr r1, [r1, r3]
- str r2, [r0, #0x10]
- str r1, [r0, #0x14]
-_020B38A8:
- bl FUN_020B4FC4
- ldr r1, _020B3B88 ; =UNK_02106574
- mvn r0, #0x0
- ldr r1, [r1, #0x0]
- cmp r1, r0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020B38DC
- mov r0, r10
- bl FUN_020B4BF4
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-_020B38DC:
- mov r0, r10
- bl FUN_020B4CDC
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-_020B38EC:
- cmp r9, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r11,pc}
- ldr r4, _020B3B6C ; =UNK_021CDD70
- ldr fp, _020B3B78 ; =UNK_021CDEF4
- mov r7, #0x0
- mov r6, #0x1
-_020B3908:
- ldr r0, [r9, #0x10]
- cmp r0, #0x0
- beq _020B3B40
- ldr r0, [r9, #0x14]
- cmp r0, #0x0
- beq _020B3A8C
- ldr r8, [r5, #0x0]
- mov r1, r9
- str r9, [r8, #0x74]
- mov r0, r8
- bl FUN_020B4F9C
- ldr r1, [r9, #0x28]
- ldr r2, [r9, #0x2c]
- mov r0, r8
- bl FUN_020B5034
- mov r0, r8
- bl FUN_020B4E0C
- ldr r0, _020B3B58 ; =UNK_021CDD68
- mov r1, r7
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- bne _020B3978
- ldr r0, _020B3B5C ; =UNK_02106570
- ldrh r2, [r0, #0x0]
- ldr r0, _020B3B60 ; =0x0000FFFE
- cmp r2, r0
- movne r0, r6
- bne _020B397C
-_020B3978:
- mov r0, r7
-_020B397C:
- cmp r0, #0x0
- beq _020B3A04
- ldr r0, _020B3B64 ; =UNK_021CE8F4
- ldr r0, [r0, #0x404]
- cmp r0, #0x0
- beq _020B39E4
- ldr r0, _020B3B64 ; =UNK_021CE8F4
- ldrh r1, [r0, #0x0]
- add r0, r0, r1, lsl #0x2
- ldr r1, [r0, #0x4]
- cmp r1, #0x0
- bne _020B3A04
- bl FUN_020B4010
- ldr r0, _020B3B64 ; =UNK_021CE8F4
- ldr r2, [r4, #0x0]
- ldrh r1, [r0, #0x0]
- mov r0, r2, lsl #0x10
- mov r2, r0, lsr #0xd
- ldr r0, _020B3B70 ; =UNK_021CDDF4
- ldrh r3, [r0, r2]
- ldr r0, _020B3B64 ; =UNK_021CE8F4
- add r2, r0, r1, lsl #0x2
- ldr r0, _020B3B74 ; =UNK_021CE4F4
- add r1, r0, r3, lsl #0x5
- str r1, [r2, #0x4]
- b _020B3A04
-_020B39E4:
- bl FUN_020B4010
- ldr r0, [r4, #0x0]
- mov r0, r0, lsl #0x10
- mov r1, r0, lsr #0xd
- ldr r0, _020B3B70 ; =UNK_021CDDF4
- ldrh r1, [r0, r1]
- ldr r0, _020B3B74 ; =UNK_021CE4F4
- add r1, r0, r1, lsl #0x5
-_020B3A04:
- ldr r0, _020B3B58 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r2, [r4, #0x0]
- moveq r0, #0x18
- mlaeq r0, r2, r0, r11
- beq _020B3A44
- ldr r2, [r4, #0x0]
- mov r0, #0x18
- mla r8, r2, r0, r11
- ldr r0, _020B3B84 ; =UNK_02106578
- ldr r3, [r8, #0x10]
- mov r2, r0
- str r3, [r2, #0x10]
- ldr r3, [r8, #0x14]
- str r3, [r2, #0x14]
-_020B3A44:
- bl FUN_020B4FAC
- ldr r0, _020B3B88 ; =UNK_02106574
- ldr r1, [r0, #0x0]
- mvn r0, #0x0
- cmp r1, r0
- movne r0, r6
- moveq r0, r7
- cmp r0, #0x0
- beq _020B3A74
- mov r0, r10
- bl FUN_020B4BF4
- b _020B3A7C
-_020B3A74:
- mov r0, r10
- bl FUN_020B4CDC
-_020B3A7C:
- ldr r0, [r5, #0x0]
- str r7, [r0, #0x74]
- bl FUN_020B4DA0
- b _020B3B40
-_020B3A8C:
- ldr r8, [r5, #0x0]
- mov r1, r9
- mov r0, r8
- str r9, [r8, #0x74]
- bl FUN_020B4F9C
- mov r0, r8
- bl FUN_020B4E0C
- ldr r2, [r4, #0x0]
- ldr r1, _020B3B8C ; =UNK_021CDD74
- ldr r0, [sp, #0x0]
- ldr r1, [r1, r2, lsl #0x2]
- bl FUN_020B4FA4
- ldr r0, _020B3B58 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r1, [r4, #0x0]
- moveq r0, #0x18
- mlaeq r0, r1, r0, r11
- beq _020B3AFC
- ldr r1, [r4, #0x0]
- mov r0, #0x18
- mla r3, r1, r0, r11
- ldr r0, _020B3B84 ; =UNK_02106578
- ldr r2, [r3, #0x10]
- mov r1, r0
- str r2, [r1, #0x10]
- ldr r2, [r3, #0x14]
- str r2, [r1, #0x14]
-_020B3AFC:
- bl FUN_020B4FC4
- ldr r0, _020B3B88 ; =UNK_02106574
- ldr r1, [r0, #0x0]
- mvn r0, #0x0
- cmp r1, r0
- movne r0, r6
- moveq r0, r7
- cmp r0, #0x0
- beq _020B3B2C
- mov r0, r10
- bl FUN_020B4BF4
- b _020B3B34
-_020B3B2C:
- mov r0, r10
- bl FUN_020B4CDC
-_020B3B34:
- ldr r0, [r5, #0x0]
- str r7, [r0, #0x74]
- bl FUN_020B4DA0
-_020B3B40:
- ldr r9, [r9, #0x30]
- cmp r9, #0x0
- bne _020B3908
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B3B54: .word UNK_021CDD6C
-_020B3B58: .word UNK_021CDD68
-_020B3B5C: .word UNK_02106570
-_020B3B60: .word 0x0000FFFE
-_020B3B64: .word UNK_021CE8F4
-_020B3B68: .word UNK_021CE8F8
-_020B3B6C: .word UNK_021CDD70
-_020B3B70: .word UNK_021CDDF4
-_020B3B74: .word UNK_021CE4F4
-_020B3B78: .word UNK_021CDEF4
-_020B3B7C: .word UNK_021CDF04
-_020B3B80: .word UNK_021CDF08
-_020B3B84: .word UNK_02106578
-_020B3B88: .word UNK_02106574
-_020B3B8C: .word UNK_021CDD74
-
- arm_func_start FUN_020B3B90
-FUN_020B3B90: ; 0x020B3B90
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- ldr r0, _020B3C24 ; =UNK_021CDD6C
- mov r12, r1
- ldr r0, [r0, #0x0]
- mov r3, r2
- ldr r1, [r0, #0x74]
- ldr r2, [r1, #0x44]
- cmp r2, #0x0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r6,pc}
- ldr r2, _020B3C28 ; =UNK_021CDD68
- ldr r2, [r2, #0x0]
- cmp r2, #0x0
- ldreq r2, _020B3C2C ; =UNK_021CDD70
- ldreq r4, _020B3C30 ; =UNK_021CDEF4
- ldreq lr, [r2, #0x0]
- moveq r2, #0x18
- mlaeq r6, lr, r2, r4
- beq _020B3C0C
- ldr lr, _020B3C2C ; =UNK_021CDD70
- mov r2, #0x18
- ldr lr, [lr, #0x0]
- ldr r4, _020B3C34 ; =UNK_021CDF04
- mul r5, lr, r2
- ldr r2, _020B3C38 ; =UNK_021CDF08
- ldr r4, [r4, r5]
- ldr r6, _020B3C3C ; =UNK_02106578
- ldr r2, [r2, r5]
- str r4, [r6, #0x10]
- str r2, [r6, #0x14]
-_020B3C0C:
- str r6, [sp, #0x0]
- ldr lr, [r1, #0x44]
- mov r2, r12
- blx lr
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B3C24: .word UNK_021CDD6C
-_020B3C28: .word UNK_021CDD68
-_020B3C2C: .word UNK_021CDD70
-_020B3C30: .word UNK_021CDEF4
-_020B3C34: .word UNK_021CDF04
-_020B3C38: .word UNK_021CDF08
-_020B3C3C: .word UNK_02106578
-
- arm_func_start FUN_020B3C40
-FUN_020B3C40: ; 0x020B3C40
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x8
- ldr r3, _020B3E2C ; =UNK_021CDD6C
- add r4, r0, #0x38
- ldr r0, [r3, #0x0]
- mov r6, r1
- mov r5, r2
- bl FUN_020B278C
- cmp r0, #0x0
- beq _020B3C90
- ldrh r1, [r4, #0x4]
- and r1, r1, #0xf000
- mov r1, r1, lsl #0x4
- mov r1, r1, lsr #0x10
- bl FUN_020B10B0
- ldr r1, [r4, #0x4]
- and r0, r0, #0xf
- bic r1, r1, #0xf000
- orr r0, r1, r0, lsl #0xc
- str r0, [r4, #0x4]
-_020B3C90:
- ldr r0, _020B3E2C ; =UNK_021CDD6C
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x84]
- cmp r0, #0x0
- beq _020B3DA4
- ldr r0, [r1, #0x84]
- ands r0, r0, #0x1
- beq _020B3CC8
- ldrh r0, [r1, #0x88]
- ldr r1, [r4, #0x4]
- bic r1, r1, #0xc00
- and r0, r0, #0x3
- orr r0, r1, r0, lsl #0xa
- str r0, [r4, #0x4]
-_020B3CC8:
- ldr r0, _020B3E2C ; =UNK_021CDD6C
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x84]
- ands r0, r0, #0x2
- beq _020B3CF4
- ldrh r0, [r1, #0x8a]
- ldr r1, [r4, #0x4]
- bic r1, r1, #0xf000
- and r0, r0, #0xf
- orr r0, r1, r0, lsl #0xc
- str r0, [r4, #0x4]
-_020B3CF4:
- ldr r0, _020B3E2C ; =UNK_021CDD6C
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x84]
- ands r0, r0, #0x10
- beq _020B3D2C
- ldr r2, [r4, #0x4]
- ldrh r0, [r1, #0x94]
- mov r1, r2, lsl #0x10
- bic r2, r2, #0xf000
- add r0, r0, r1, lsr #0x1c
- and r0, r0, #0xf
- and r0, r0, #0xf
- orr r0, r2, r0, lsl #0xc
- str r0, [r4, #0x4]
-_020B3D2C:
- ldr r0, _020B3E2C ; =UNK_021CDD6C
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x84]
- ands r0, r0, #0x4
- beq _020B3D60
- ldr r0, [r1, #0x90]
- cmp r0, #0x0
- ldrne r0, [r4, #0x0]
- orrne r0, r0, #0x1000
- strne r0, [r4, #0x0]
- ldreq r0, [r4, #0x0]
- biceq r0, r0, #0x1000
- streq r0, [r4, #0x0]
-_020B3D60:
- ldr r0, _020B3E2C ; =UNK_021CDD6C
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x84]
- ands r0, r0, #0x8
- beq _020B3DA4
- ldr r0, [r4, #0x0]
- ldrh r2, [r4, #0x4]
- ldr r1, [r1, #0x8c]
- bic r0, r0, #0xc00
- orr r0, r0, r1, lsl #0xa
- str r0, [r4, #0x0]
- ldrh r0, [r4, #0x4]
- and r1, r2, #0xf000
- mov r1, r1, asr #0xc
- bic r0, r0, #0xf000
- orr r0, r0, r1, lsl #0xc
- strh r0, [r4, #0x4]
-_020B3DA4:
- ldr r0, _020B3E2C ; =UNK_021CDD6C
- ldr r0, [r0, #0x0]
- ldr r1, [r0, #0x74]
- ldr r2, [r1, #0x40]
- cmp r2, #0x0
- addeq sp, sp, #0x8
- ldmeqia sp!, {r4-r6,pc}
- ldr r2, _020B3E30 ; =UNK_021CDD68
- ldr r2, [r2, #0x0]
- cmp r2, #0x0
- ldreq r2, _020B3E34 ; =UNK_021CDD70
- ldreq r4, _020B3E38 ; =UNK_021CDEF4
- ldreq r3, [r2, #0x0]
- moveq r2, #0x18
- mlaeq r4, r3, r2, r4
- beq _020B3E10
- ldr r3, _020B3E34 ; =UNK_021CDD70
- mov r2, #0x18
- ldr r4, [r3, #0x0]
- ldr r3, _020B3E3C ; =UNK_021CDF04
- mul r12, r4, r2
- ldr r2, _020B3E40 ; =UNK_021CDF08
- ldr r3, [r3, r12]
- ldr r4, _020B3E44 ; =UNK_02106578
- ldr r2, [r2, r12]
- str r3, [r4, #0x10]
- str r2, [r4, #0x14]
-_020B3E10:
- str r4, [sp, #0x0]
- ldr r4, [r1, #0x40]
- mov r2, r6
- mov r3, r5
- blx r4
- add sp, sp, #0x8
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B3E2C: .word UNK_021CDD6C
-_020B3E30: .word UNK_021CDD68
-_020B3E34: .word UNK_021CDD70
-_020B3E38: .word UNK_021CDEF4
-_020B3E3C: .word UNK_021CDF04
-_020B3E40: .word UNK_021CDF08
-_020B3E44: .word UNK_02106578
-
- arm_func_start FUN_020B3E48
-FUN_020B3E48: ; 0x020B3E48
- stmdb sp!, {r4,lr}
- ldr r0, _020B3EC4 ; =UNK_021CDD6C
- mov r2, r1
- ldr r0, [r0, #0x0]
- ldr r1, [r0, #0x74]
- ldr r3, [r1, #0x3c]
- cmp r3, #0x0
- ldmeqia sp!, {r4,pc}
- ldr r3, _020B3EC8 ; =UNK_021CDD68
- ldr r3, [r3, #0x0]
- cmp r3, #0x0
- ldreq r3, _020B3ECC ; =UNK_021CDD70
- ldreq lr, _020B3ED0 ; =UNK_021CDEF4
- ldreq r12, [r3, #0x0]
- moveq r3, #0x18
- mlaeq r3, r12, r3, lr
- beq _020B3EB8
- ldr ip, _020B3ECC ; =UNK_021CDD70
- mov r3, #0x18
- ldr r12, [r12, #0x0]
- ldr lr, _020B3ED4 ; =UNK_021CDF04
- mul r4, r12, r3
- ldr ip, _020B3ED8 ; =UNK_021CDF08
- ldr lr, [lr, r4]
- ldr r3, _020B3EDC ; =UNK_02106578
- ldr r12, [r12, r4]
- str lr, [r3, #0x10]
- str r12, [r3, #0x14]
-_020B3EB8:
- ldr r12, [r1, #0x3c]
- blx r12
- ldmia sp!, {r4,pc}
- .balign 4
-_020B3EC4: .word UNK_021CDD6C
-_020B3EC8: .word UNK_021CDD68
-_020B3ECC: .word UNK_021CDD70
-_020B3ED0: .word UNK_021CDEF4
-_020B3ED4: .word UNK_021CDF04
-_020B3ED8: .word UNK_021CDF08
-_020B3EDC: .word UNK_02106578
-
- arm_func_start FUN_020B3EE0
-FUN_020B3EE0: ; 0x020B3EE0
- stmdb sp!, {r4-r6,lr}
- ldr r2, _020B3FF4 ; =UNK_021CDD6C
- mov r6, r0
- ldr r0, [r2, #0x0]
- mov r5, r1
- ldr r4, [r0, #0x74]
- ldr r0, [r4, #0x34]
- cmp r0, #0x0
- beq _020B3F7C
- ldr r0, _020B3FF8 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r0, _020B3FFC ; =UNK_021CDD70
- ldreq r1, _020B4000 ; =UNK_021CDEF4
- ldreq r2, [r0, #0x0]
- moveq r0, #0x18
- mlaeq r1, r2, r0, r1
- beq _020B3F54
- ldr r1, _020B3FFC ; =UNK_021CDD70
- mov r0, #0x18
- ldr r2, [r1, #0x0]
- ldr r1, _020B4004 ; =UNK_021CDF04
- mul r3, r2, r0
- ldr r0, _020B4008 ; =UNK_021CDF08
- ldr r2, [r1, r3]
- ldr r1, _020B400C ; =UNK_02106578
- ldr r0, [r0, r3]
- str r2, [r1, #0x10]
- str r0, [r1, #0x14]
-_020B3F54:
- ldr r3, [r4, #0x34]
- mov r0, r5
- mov r2, r4
- blx r3
- cmp r0, #0x0
- moveq r0, #0x0
- streq r0, [r6, #0x30]
- ldmeqia sp!, {r4-r6,pc}
- mov r0, #0x1
- str r0, [r6, #0x30]
-_020B3F7C:
- ldr r0, [r4, #0x38]
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r0, _020B3FF8 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldreq r0, _020B3FFC ; =UNK_021CDD70
- ldreq r2, _020B4000 ; =UNK_021CDEF4
- ldreq r1, [r0, #0x0]
- moveq r0, #0x18
- mlaeq r3, r1, r0, r2
- beq _020B3FD8
- ldr r1, _020B3FFC ; =UNK_021CDD70
- mov r0, #0x18
- ldr r2, [r1, #0x0]
- ldr r1, _020B4004 ; =UNK_021CDF04
- mul r6, r2, r0
- ldr r0, _020B4008 ; =UNK_021CDF08
- ldr r1, [r1, r6]
- ldr r3, _020B400C ; =UNK_02106578
- ldr r0, [r0, r6]
- str r1, [r3, #0x10]
- str r0, [r3, #0x14]
-_020B3FD8:
- ldr r0, _020B3FF4 ; =UNK_021CDD6C
- ldr r6, [r4, #0x38]
- ldr r0, [r0, #0x0]
- mov r1, r4
- mov r2, r5
- blx r6
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B3FF4: .word UNK_021CDD6C
-_020B3FF8: .word UNK_021CDD68
-_020B3FFC: .word UNK_021CDD70
-_020B4000: .word UNK_021CDEF4
-_020B4004: .word UNK_021CDF04
-_020B4008: .word UNK_021CDF08
-_020B400C: .word UNK_02106578
-
- arm_func_start FUN_020B4010
-FUN_020B4010:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020B4154 ; =UNK_021CDD70
- ldr r1, _020B4158 ; =UNK_021CDDF4
- ldr r0, [r0, #0x0]
- mov r2, #0x1
- mov r0, r0, lsl #0x10
- add r3, r1, r0, lsr #0xd
- ldrh r0, [r3, #0x4]
- cmp r0, #0x1
- beq _020B4044
- cmp r0, #0x2
- movne r2, #0x0
-_020B4044:
- cmp r2, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldr r0, _020B415C ; =UNK_021CDD60
- mov r2, #0x10
- ldrh r4, [r0, #0x0]
- cmp r4, #0x1f
- addcc r1, r4, #0x1
- strcch r1, [r0, #0x0]
- ldr r0, _020B4160 ; =UNK_021CE4F4
- ldrh r5, [r3, #0x2]
- add r0, r0, r4, lsl #0x5
- add r1, r0, #0x10
- mvn r0, #0x0
- strh r4, [r3, #0x0]
- bl MIi_CpuClearFast
- ldr r0, _020B4154 ; =UNK_021CDD70
- ldr r1, _020B4164 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- ldr r2, [r1, #0x0]
- mov r1, r0, lsl #0x10
- cmp r2, #0x0
- ldr r3, _020B4158 ; =UNK_021CDDF4
- mov r1, r1, lsr #0xd
- ldrh r1, [r3, r1]
- ldr r3, _020B4160 ; =UNK_021CE4F4
- moveq r2, #0x18
- add r1, r3, r1, lsl #0x5
- ldreq r3, _020B4168 ; =UNK_021CE1F4
- mlaeq r12, r0, r2, r3
- beq _020B40E4
- mov r2, #0x18
- mul r3, r0, r2
- ldr r2, _020B416C ; =UNK_021CDF04
- ldr r0, _020B4170 ; =UNK_021CDF08
- ldr r2, [r2, r3]
- ldr ip, _020B4174 ; =UNK_02106578
- ldr r0, [r0, r3]
- str r2, [r12, #0x10]
- str r0, [r12, #0x14]
-_020B40E4:
- ldr r2, [r12, #0x0]
- ldr r0, _020B4154 ; =UNK_021CDD70
- str r2, [r1, #0x0]
- ldr r2, [r12, #0x4]
- str r2, [r1, #0x4]
- ldr r2, [r12, #0x8]
- str r2, [r1, #0x8]
- ldr r2, [r12, #0xc]
- str r2, [r1, #0xc]
- ldr r0, [r0, #0x0]
- mov r0, r0, lsl #0x10
- movs lr, r0, lsr #0x10
- addmi sp, sp, #0x4
- ldmmiia sp!, {r4-r5,pc}
- ldr r3, _020B4158 ; =UNK_021CDDF4
- mov r0, #0x3
-_020B4124:
- add r2, r3, lr, lsl #0x3
- ldrh r1, [r2, #0x2]
- mov r12, lr, lsl #0x3
- cmp r5, r1
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,pc}
- strh r0, [r2, #0x4]
- strh r4, [r3, r12]
- subs lr, lr, #0x1
- bpl _020B4124
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B4154: .word UNK_021CDD70
-_020B4158: .word UNK_021CDDF4
-_020B415C: .word UNK_021CDD60
-_020B4160: .word UNK_021CE4F4
-_020B4164: .word UNK_021CDD68
-_020B4168: .word UNK_021CE1F4
-_020B416C: .word UNK_021CDF04
-_020B4170: .word UNK_021CDF08
-_020B4174: .word UNK_02106578
-
- arm_func_start FUN_020B4178
-FUN_020B4178: ; 0x020B4178
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r0, _020B4220 ; =UNK_021CDD68
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020B41B8
- ldr r1, _020B4224 ; =UNK_021CDD70
- mov r0, #0x18
- ldr r12, [r1, #0x0]
- ldr r1, _020B4228 ; =UNK_021CDF04
- mul r3, r12, r0
- mov r2, #0x0
- ldr r0, _020B422C ; =UNK_021CDF08
- str r2, [r1, r3]
- str r2, [r0, r3]
- b _020B420C
-_020B41B8:
- ldr r0, _020B4224 ; =UNK_021CDD70
- mov lr, #0x18
- ldr r1, [r0, #0x0]
- ldr r4, _020B4230 ; =UNK_021CDEF4
- mul r3, r1, lr
- mov r2, #0x1000
- str r2, [r4, r3]
- add r5, r4, r3
- mov r1, #0x0
- str r1, [r5, #0x4]
- str r1, [r5, #0x8]
- str r2, [r5, #0xc]
- str r1, [r5, #0x10]
- str r1, [r5, #0x14]
- ldr r12, [r0, #0x0]
- ldr r4, _020B4234 ; =UNK_021CE1F4
- ldmia r5!, {r0-r3}
- mla lr, r12, lr, r4
- stmia lr!, {r0-r3}
- ldmia r5, {r0-r1}
- stmia lr, {r0-r1}
-_020B420C:
- ldr r0, _020B4238 ; =UNK_021CDD74
- mov r1, #0x0
- str r1, [r0, r12, lsl #0x2]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B4220: .word UNK_021CDD68
-_020B4224: .word UNK_021CDD70
-_020B4228: .word UNK_021CDF04
-_020B422C: .word UNK_021CDF08
-_020B4230: .word UNK_021CDEF4
-_020B4234: .word UNK_021CE1F4
-_020B4238: .word UNK_021CDD74
-
- arm_func_start FUN_020B423C
-FUN_020B423C: ; 0x020B423C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x1c
- ldr r4, [r0, #0x4]
- ldr r3, [r1, #0x8]
- mov r12, r2
- smull r6, r5, r4, r3
- ldr r4, [r0, #0x0]
- ldr r3, [r1, #0x0]
- cmp r12, r1
- smlal r6, r5, r4, r3
- mov r3, r6, lsr #0xc
- addeq r2, sp, #0x0
- orr r3, r3, r5, lsl #0x14
- str r3, [r2, #0x0]
- ldr r4, [r0, #0x4]
- ldr r3, [r1, #0xc]
- ldr r5, [r0, #0x0]
- smull r7, r6, r4, r3
- ldr r3, [r1, #0x4]
- add lr, sp, #0x0
- smlal r7, r6, r5, r3
- mov r3, r7, lsr #0xc
- orr r3, r3, r6, lsl #0x14
- str r3, [r2, #0x4]
- ldr r4, [r0, #0xc]
- ldr r3, [r1, #0x8]
- ldr r5, [r0, #0x8]
- smull r7, r6, r4, r3
- ldr r3, [r1, #0x0]
- cmp r2, lr
- smlal r7, r6, r5, r3
- mov r3, r7, lsr #0xc
- orr r3, r3, r6, lsl #0x14
- str r3, [r2, #0x8]
- ldr r4, [r0, #0xc]
- ldr r3, [r1, #0xc]
- ldr r5, [r0, #0x8]
- smull r7, r6, r4, r3
- ldr r3, [r1, #0x4]
- smlal r7, r6, r5, r3
- mov r3, r7, lsr #0xc
- orr r3, r3, r6, lsl #0x14
- str r3, [r2, #0xc]
- ldr r4, [r0, #0x14]
- ldr r3, [r1, #0x8]
- ldr r5, [r0, #0x10]
- smull r7, r6, r4, r3
- ldr r3, [r1, #0x0]
- ldr r4, [r1, #0x10]
- smlal r7, r6, r5, r3
- mov r3, r7, lsr #0xc
- orr r3, r3, r6, lsl #0x14
- add r3, r4, r3
- str r3, [r2, #0x10]
- ldr r4, [r0, #0x14]
- ldr r3, [r1, #0xc]
- ldr r5, [r0, #0x10]
- ldr r0, [r1, #0x4]
- smull r6, r3, r4, r3
- smlal r6, r3, r5, r0
- mov r0, r6, lsr #0xc
- ldr r1, [r1, #0x14]
- orr r0, r0, r3, lsl #0x14
- add r0, r1, r0
- str r0, [r2, #0x14]
- ldmeqia lr!, {r0-r3}
- stmeqia r12!, {r0-r3}
- ldmeqia lr, {r0-r1}
- stmeqia r12, {r0-r1}
- add sp, sp, #0x1c
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B4358
-FUN_020B4358: ; 0x020B4358
- stmdb sp!, {r4,lr}
- ldr r2, _020B43A0 ; =UNK_021CED04
- mov r1, #0x30
- ldr r2, [r2, #0x0]
- mla r4, r0, r1, r2
- mov r0, r4
- bl FUN_020B10CC
- mov r0, #0x0
- str r0, [r4, #0xc]
- str r0, [r4, #0x10]
- str r0, [r4, #0x14]
- str r0, [r4, #0x18]
- str r0, [r4, #0x1c]
- str r0, [r4, #0x20]
- str r0, [r4, #0x24]
- str r0, [r4, #0x28]
- str r0, [r4, #0x2c]
- ldmia sp!, {r4,pc}
- .balign 4
-_020B43A0: .word UNK_021CED04
-
- arm_func_start FUN_020B43A4
-FUN_020B43A4: ; 0x020B43A4
- ldr r1, _020B43F8 ; =UNK_021CED00
- mov r0, #0x0
- ldr r3, [r1, #0x0]
- cmp r3, #0x0
- bls _020B43F0
- ldr r1, _020B43FC ; =UNK_021CED04
- ldr r2, [r1, #0x0]
- mov r12, r2
-_020B43C4:
- ldr r1, [r12, #0x1c]
- cmp r1, #0x1
- movne r1, #0x30
- mlane r1, r0, r1, r2
- movne r2, #0x1
- strne r2, [r1, #0x1c]
- bxne lr
- add r0, r0, #0x1
- cmp r0, r3
- add r12, r12, #0x30
- blo _020B43C4
-_020B43F0:
- mvn r0, #0x0
- bx lr
- .balign 4
-_020B43F8: .word UNK_021CED00
-_020B43FC: .word UNK_021CED04
-
- arm_func_start FUN_020B4400
-FUN_020B4400: ; 0x020B4400
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r1
- mov r4, r2
- bl FUN_020B469C
- mvn r1, #0x0
- str r1, [r0, #0x24]
- str r5, [r0, #0x28]
- str r4, [r0, #0x2c]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020B442C
-FUN_020B442C: ; 0x020B442C
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r0, #0x0
- str r0, [sp, #0x0]
- ldr r0, _020B4558 ; =UNK_021CED00
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addls sp, sp, #0x14
- ldmlsia sp!, {r4-r11,pc}
- ldr r0, [sp, #0x0]
- mov r5, #0x1
- str r0, [sp, #0x4]
- mov r11, r0
- str r0, [sp, #0x8]
- str r0, [sp, #0xc]
-_020B4468:
- ldr r0, _020B455C ; =UNK_021CED04
- ldr r1, [r0, #0x0]
- ldr r0, [sp, #0x4]
- add r8, r1, r0
- ldr r0, [r8, #0x1c]
- cmp r0, #0x0
- beq _020B4528
- ldr r9, [sp, #0x8]
- mov r0, r9
- cmp r0, #0x3
- bge _020B4520
- add r4, r8, #0x24
-_020B4498:
- mov r6, r5, lsl r9
- mov r1, r11
- ldr r0, [r8, #0x24]
- ands r0, r0, r6
- beq _020B44B8
- ldr r0, [r8, #0x20]
- ands r0, r0, r6
- movne r1, r5
-_020B44B8:
- cmp r1, #0x0
- beq _020B4514
- ldr r0, _020B4560 ; =UNK_020FF8C4
- cmp r9, #0x0
- ldr r7, [r0, r9, lsl #0x2]
- ldreq r10, [r8, #0x14]
- mov r0, r8
- mov r1, r9
- ldrne r10, [r8, #0x10]
- bl FUN_020B10BC
- mov r1, r0
- mov r0, r7
- ldr r7, _020B4564 ; =UNK_021CECFC
- ldr r2, [r8, #0x28]
- ldr r3, [r8, #0x2c]
- ldr r7, [r7, #0x0]
- add r2, r10, r2
- blx r7
- cmp r0, #0x0
- ldrne r1, [r4, #0x0]
- mvnne r0, r6
- andne r0, r1, r0
- strne r0, [r4, #0x0]
-_020B4514:
- add r9, r9, #0x1
- cmp r9, #0x3
- blt _020B4498
-_020B4520:
- ldr r0, [sp, #0xc]
- str r0, [r8, #0x20]
-_020B4528:
- ldr r0, _020B4558 ; =UNK_021CED00
- ldr r1, [r0, #0x0]
- ldr r0, [sp, #0x0]
- add r0, r0, #0x1
- str r0, [sp, #0x0]
- cmp r0, r1
- ldr r0, [sp, #0x4]
- add r0, r0, #0x30
- str r0, [sp, #0x4]
- blo _020B4468
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B4558: .word UNK_021CED00
-_020B455C: .word UNK_021CED04
-_020B4560: .word UNK_020FF8C4
-_020B4564: .word UNK_021CECFC
-
- arm_func_start FUN_020B4568
-FUN_020B4568: ; 0x020B4568
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr ip, _020B45E4 ; =UNK_021CECFC
- movs r6, r1
- ldr r1, _020B45E8 ; =UNK_021CED00
- ldr r3, _020B45EC ; =UNK_021CED04
- mov r7, r0
- str r2, [r12, #0x0]
- mov r5, #0x0
- addeq sp, sp, #0x4
- str r7, [r3, #0x0]
- str r6, [r1, #0x0]
- ldmeqia sp!, {r4-r7,pc}
- mov r4, r5
-_020B45A0:
- mov r0, r7
- bl FUN_020B10CC
- str r4, [r7, #0xc]
- str r4, [r7, #0x10]
- str r4, [r7, #0x14]
- str r4, [r7, #0x18]
- str r4, [r7, #0x1c]
- str r4, [r7, #0x20]
- str r4, [r7, #0x24]
- str r4, [r7, #0x28]
- add r5, r5, #0x1
- str r4, [r7, #0x2c]
- cmp r5, r6
- add r7, r7, #0x30
- blo _020B45A0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B45E4: .word UNK_021CECFC
-_020B45E8: .word UNK_021CED00
-_020B45EC: .word UNK_021CED04
-
- arm_func_start FUN_020B45F0
-FUN_020B45F0: ; 0x020B45F0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldr ip, _020B4698 ; =UNK_021CED04
- mov r4, #0x30
- ldr r12, [r12, #0x0]
- mov r7, r1
- mla r4, r0, r4, r12
- mov r0, r4
- mov r6, r2
- mov r5, r3
- bl FUN_020B10CC
- mvn r0, #0x0
- cmp r7, r0
- beq _020B4638
- mov r0, r4
- mov r2, r7
- mov r1, #0x0
- bl FUN_020B10C4
-_020B4638:
- mvn r0, #0x0
- cmp r6, r0
- beq _020B4654
- mov r0, r4
- mov r2, r6
- mov r1, #0x1
- bl FUN_020B10C4
-_020B4654:
- mvn r0, #0x0
- cmp r5, r0
- beq _020B4670
- mov r0, r4
- mov r2, r5
- mov r1, #0x2
- bl FUN_020B10C4
-_020B4670:
- ldr r1, [sp, #0x18]
- ldr r0, [sp, #0x1c]
- str r1, [r4, #0xc]
- ldr r1, [sp, #0x20]
- str r0, [r4, #0x10]
- ldr r0, [sp, #0x24]
- str r1, [r4, #0x14]
- str r0, [r4, #0x18]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B4698: .word UNK_021CED04
-
- arm_func_start FUN_020B469C
-FUN_020B469C: ; 0x020B469C
- ldr r2, _020B46B0 ; =UNK_021CED04
- mov r1, #0x30
- ldr r2, [r2, #0x0]
- mla r0, r1, r0, r2
- bx lr
- .balign 4
-_020B46B0: .word UNK_021CED04
-
- arm_func_start FUN_020B46B4
-FUN_020B46B4: ; 0x020B46B4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x1c
- add r12, sp, #0x4
- mov r5, r1
- mov r4, r2
- mov r7, r3
- mov r6, r0
- ldr r1, [sp, #0x30]
- ldr r2, [sp, #0x34]
- ldr r3, [sp, #0x38]
- mov r0, r7
- str r12, [sp, #0x0]
- bl FUN_020B498C
- ldr r2, [r7, #0x0]
- and r1, r2, #0x300
- cmp r1, #0x100
- beq _020B4708
- cmp r1, #0x300
- beq _020B4708
- and r0, r2, #0x30000000
- orr r1, r1, r0
-_020B4708:
- cmp r1, #0x300
- bne _020B478C
- ldr r0, _020B4914 ; =0xC000C000
- ldr r1, _020B4918 ; =UNK_021CED08
- and r0, r2, r0
- and r2, r0, #0xc0000000
- mov r12, r2, lsr #0x1e
- and r0, r0, #0xc000
- mov lr, r0, asr #0xe
- ldr r3, _020B491C ; =UNK_020FF8AC
- ldr r0, [r1, #0x0]
- ldr r2, _020B4920 ; =UNK_020FF894
- cmp r0, #0x0
- ldrne r0, _020B4924 ; =UNK_021CED10
- mov r12, r12, lsl #0x1
- add r1, r2, lr, lsl #0x3
- add r3, r3, lr, lsl #0x3
- ldrh r2, [r12, r3]
- ldrh r1, [r12, r1]
- ldrne r0, [r0, #0x0]
- mov r2, r2, asr #0x1
- addne r3, r0, r4, lsl #0xc
- mov r1, r1, asr #0x1
- add r0, r5, r1
- add r2, r6, r2
- ldr r1, _020B4928 ; =0x04000470
- mov r2, r2, lsl #0xc
- str r2, [r1, #0x0]
- mov r0, r0, lsl #0xc
- moveq r3, r4, lsl #0xc
- str r0, [r1, #0x0]
- str r3, [r1, #0x0]
- b _020B47C0
-_020B478C:
- ldr r0, _020B4918 ; =UNK_021CED08
- ldr r1, _020B4928 ; =0x04000470
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldrne r0, _020B4924 ; =UNK_021CED10
- ldrne r0, [r0, #0x0]
- addne r2, r0, r4, lsl #0xc
- mov r0, r6, lsl #0xc
- str r0, [r1, #0x0]
- mov r0, r5, lsl #0xc
- moveq r2, r4, lsl #0xc
- str r0, [r1, #0x0]
- str r2, [r1, #0x0]
-_020B47C0:
- ldr r0, [sp, #0x14]
- ldr r1, [sp, #0x18]
- ldr r2, _020B492C ; =0x0400046C
- mov r0, r0, lsl #0xc
- str r0, [r2, #0x0]
- mov r0, r1, lsl #0xc
- str r0, [r2, #0x0]
- mov r1, #0x1000
- str r1, [r2, #0x0]
- ldr r0, _020B4930 ; =0x04000500
- mov r1, #0x1
- str r1, [r0, #0x0]
- ldr r0, [sp, #0x4]
- ldr r1, [sp, #0x10]
- mov r0, r0, lsl #0x8
- mov r1, r1, lsl #0x8
- mov r0, r0, asr #0x10
- mov r1, r1, asr #0x10
- mov r0, r0, lsl #0x10
- mov r1, r1, lsl #0x10
- mov r2, r0, lsr #0x10
- mov r0, r1, lsr #0x10
- orr r2, r2, r0, lsl #0x10
- ldr r1, _020B4934 ; =0x04000488
- ldr r0, _020B4938 ; =0x04000490
- str r2, [r1, #0x0]
- mov r2, #0x10000
- str r2, [r0, #0x0]
- ldr r2, [sp, #0xc]
- ldr r3, [sp, #0x10]
- mov r2, r2, lsl #0x8
- mov r3, r3, lsl #0x8
- mov r2, r2, asr #0x10
- mov r3, r3, asr #0x10
- mov r2, r2, lsl #0x10
- mov r3, r3, lsl #0x10
- mov r4, r2, lsr #0x10
- mov r2, r3, lsr #0x10
- orr r3, r4, r2, lsl #0x10
- ldr r2, _020B493C ; =0x00010040
- str r3, [r1, #0x0]
- str r2, [r0, #0x0]
- ldr r2, [sp, #0xc]
- ldr r3, [sp, #0x8]
- mov r2, r2, lsl #0x8
- mov r3, r3, lsl #0x8
- mov r2, r2, asr #0x10
- mov r3, r3, asr #0x10
- mov r2, r2, lsl #0x10
- mov r3, r3, lsl #0x10
- mov r4, r2, lsr #0x10
- mov r2, r3, lsr #0x10
- orr r2, r4, r2, lsl #0x10
- str r2, [r1, #0x0]
- mov r2, #0x40
- str r2, [r0, #0x0]
- ldr r2, [sp, #0x4]
- ldr r3, [sp, #0x8]
- mov r2, r2, lsl #0x8
- mov r3, r3, lsl #0x8
- mov r2, r2, asr #0x10
- mov r3, r3, asr #0x10
- mov r2, r2, lsl #0x10
- mov r3, r3, lsl #0x10
- mov r4, r2, lsr #0x10
- mov r2, r3, lsr #0x10
- orr r2, r4, r2, lsl #0x10
- str r2, [r1, #0x0]
- mov r2, #0x0
- str r2, [r0, #0x0]
- ldr r1, _020B4940 ; =0x04000504
- ldr r0, _020B4918 ; =UNK_021CED08
- str r2, [r1, #0x0]
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x1c
- ldmeqia sp!, {r4-r7,pc}
- ldr r1, _020B4924 ; =UNK_021CED10
- ldr r0, _020B4944 ; =UNK_02106590
- ldr r2, [r1, #0x0]
- ldr r0, [r0, #0x0]
- add r0, r2, r0
- str r0, [r1, #0x0]
- add sp, sp, #0x1c
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B4914: .word 0xC000C000
-_020B4918: .word UNK_021CED08
-_020B491C: .word UNK_020FF8AC
-_020B4920: .word UNK_020FF894
-_020B4924: .word UNK_021CED10
-_020B4928: .word 0x04000470
-_020B492C: .word 0x0400046C
-_020B4930: .word 0x04000500
-_020B4934: .word 0x04000488
-_020B4938: .word 0x04000490
-_020B493C: .word 0x00010040
-_020B4940: .word 0x04000504
-_020B4944: .word UNK_02106590
-
- arm_func_start FUN_020B4948
-FUN_020B4948:
- ldr r0, _020B4954 ; =UNK_02106590
- ldr r0, [r0, #0x0]
- bx lr
- .balign 4
-_020B4954: .word UNK_02106590
-
- arm_func_start FUN_020B4958
-FUN_020B4958:
- ldr r1, _020B4964 ; =UNK_02106590
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_020B4964: .word UNK_02106590
-
- arm_func_start FUN_020B4968
-FUN_020B4968: ; 0x020B4968
- ldr r0, _020B4978 ; =UNK_021CED10
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_020B4978: .word UNK_021CED10
-
- arm_func_start FUN_020B497C
-FUN_020B497C:
- ldr r1, _020B4988 ; =UNK_021CED08
- str r0, [r1, #0x0]
- bx lr
- .balign 4
-_020B4988: .word UNK_021CED08
-
- arm_func_start FUN_020B498C
-FUN_020B498C: ; 0x020B498C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0xc
- mov r6, r0
- ldr r4, [r6, #0x0]
- ldr r0, _020B4BCC ; =0xC000C000
- ldr r5, [r6, #0x4]
- and r4, r4, r0
- and r0, r4, #0xc0000000
- and r4, r4, #0xc000
- mov lr, r0, lsr #0x1e
- ldr r0, _020B4BD0 ; =UNK_020FF8AC
- mov r12, r4, asr #0xe
- ldr r8, _020B4BD4 ; =UNK_020FF894
- mov r4, lr, lsl #0x1
- add r0, r0, r12, lsl #0x3
- ldrh r9, [r4, r0]
- ldr r0, [sp, #0x28]
- mov r5, r5, lsl #0x16
- mov r5, r5, lsr #0x16
- mov r7, r5, lsl #0x10
- str r9, [r0, #0x10]
- add r5, r8, r12, lsl #0x3
- ldrh r8, [r4, r5]
- mov r5, r1
- mov r4, r3
- str r8, [r0, #0x14]
- ldr r1, [r5, #0x14]
- mov r7, r7, lsr #0x10
- cmp r1, #0x0
- bne _020B4A74
- ldr r1, [r5, #0x8]
- mov r2, r2, lsr #0x3
- orr r1, r2, r1, lsl #0x1a
- ldr r2, [r5, #0x0]
- orr r1, r1, #0x40000000
- ldr r3, [r5, #0x4]
- orr r1, r1, r2, lsl #0x14
- orr r2, r1, r3, lsl #0x17
- ldr r8, [r5, #0x10]
- ldr r1, _020B4BD8 ; =0x040004A8
- orr r2, r2, r8, lsl #0x1d
- str r2, [r1, #0x0]
- ldr r1, [r5, #0x8]
- ldr r2, [r5, #0x0]
- cmp r1, #0x4
- moveq r1, r7, lsl #0xf
- moveq r7, r1, lsr #0x10
- ldr r1, _020B4BDC ; =UNK_020FF8D8
- ldr r1, [r1, r2, lsl #0x2]
- sub r1, r1, #0x1
- and r1, r7, r1
- mov r1, r1, lsl #0xf
- str r1, [r0, #0x0]
- ldr r1, [r5, #0x0]
- mov r1, r7, asr r1
- mov r1, r1, lsl #0xf
- str r1, [r0, #0x4]
- b _020B4AE0
-_020B4A74:
- and r1, r1, #0x700000
- mov r1, r1, asr #0x14
- mov r12, r12, lsl #0x10
- add r1, r1, #0x5
- ldr r3, [r5, #0x8]
- mov lr, lr, lsl #0x10
- ldr sb, _020B4BE0 ; =UNK_020FF8F8
- mov r12, r12, lsr #0x10
- ldr r8, _020B4BE4 ; =UNK_020FF928
- add r1, r2, r7, lsl r1
- mov r2, r3, lsl #0x1a
- orr r3, r2, r1, lsr #0x3
- mov r7, lr, lsr #0x10
- add r2, r9, r12, lsl #0x4
- add r1, r8, r12, lsl #0x4
- ldr r2, [r2, r7, lsl #0x2]
- orr r3, r3, #0x40000000
- ldr r1, [r1, r7, lsl #0x2]
- orr r2, r3, r2, lsl #0x14
- ldr r3, [r5, #0x10]
- orr r2, r2, r1, lsl #0x17
- ldr r1, _020B4BD8 ; =0x040004A8
- orr r2, r2, r3, lsl #0x1d
- str r2, [r1, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x0]
- str r1, [r0, #0x4]
-_020B4AE0:
- ldr r2, [r0, #0x0]
- ldr r1, [r0, #0x10]
- add r1, r2, r1, lsl #0xc
- str r1, [r0, #0x8]
- ldr r2, [r0, #0x4]
- ldr r1, [r0, #0x14]
- add r1, r2, r1, lsl #0xc
- str r1, [r0, #0xc]
- ldr r1, [r6, #0x0]
- mov r2, r1, lsl #0x2
- mov r1, r1, lsl #0x3
- movs r3, r1, lsr #0x1f
- mov r12, r2, lsr #0x1f
- ldrne r2, [r0, #0x0]
- ldrne r1, [r0, #0x8]
- strne r1, [r0, #0x0]
- strne r2, [r0, #0x8]
- cmp r12, #0x0
- ldrne r2, [r0, #0x4]
- ldrne r1, [r0, #0xc]
- strne r1, [r0, #0x4]
- ldr r1, _020B4BE8 ; =UNK_021CED0C
- strne r2, [r0, #0xc]
- ldr r7, [r1, #0x0]
- cmp r7, #0x0
- beq _020B4B60
- str r3, [sp, #0x0]
- add r1, r0, #0x4
- add r2, r0, #0x8
- add r3, r0, #0xc
- str r12, [sp, #0x4]
- blx r7
-_020B4B60:
- ldr r0, [r6, #0x4]
- ldr r1, [r6, #0x0]
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x1c
- mov r3, r1, lsl #0x12
- ldr r1, [r5, #0xc]
- mov r0, r0, lsl #0x10
- ldr r2, _020B4BEC ; =UNK_020FF8D0
- mov r3, r3, lsr #0x1f
- cmp r1, #0x0
- mov r0, r0, lsr #0x10
- ldr r1, [r2, r3, lsl #0x2]
- movne r0, r0, lsl #0x9
- bne _020B4BA4
- cmp r1, #0x4
- moveq r0, #0x0
- movne r0, r0, lsl #0x5
-_020B4BA4:
- cmp r1, #0x2
- moveq r2, #0x1
- movne r2, #0x0
- add r1, r4, r0
- rsb r0, r2, #0x4
- mov r1, r1, lsr r0
- ldr r0, _020B4BF0 ; =0x040004AC
- str r1, [r0, #0x0]
- add sp, sp, #0xc
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020B4BCC: .word 0xC000C000
-_020B4BD0: .word UNK_020FF8AC
-_020B4BD4: .word UNK_020FF894
-_020B4BD8: .word 0x040004A8
-_020B4BDC: .word UNK_020FF8D8
-_020B4BE0: .word UNK_020FF8F8
-_020B4BE4: .word UNK_020FF928
-_020B4BE8: .word UNK_021CED0C
-_020B4BEC: .word UNK_020FF8D0
-_020B4BF0: .word 0x040004AC
-
- arm_func_start FUN_020B4BF4
-FUN_020B4BF4: ; 0x020B4BF4
- stmdb sp!, {r4-r6,lr}
- ldr r2, _020B4CD8 ; =UNK_021CED14
- mov r6, r0
- ldr r3, [r2, #0x0]
- mov r4, r1
- ldr r5, [r3, #0x0]
- ldr r0, [r5, #0x10]
- cmp r0, #0x0
- ldmeqia sp!, {r4-r6,pc}
- mov r0, #0x1
- str r0, [r3, #0x30]
- ldr r3, [r5, #0x18]
- cmp r3, #0x0
- beq _020B4C38
- ldr r0, [r2, #0x0]
- mov r1, r6
- blx r3
-_020B4C38:
- ldr r0, _020B4CD8 ; =UNK_021CED14
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x30]
- cmp r0, #0x0
- beq _020B4CB8
- mvn r0, #0x0
- cmp r4, r0
- beq _020B4C7C
- mov r0, r4
- ldr r4, [r5, #0x14]
- bl FUN_020B469C
- mov r3, #0x1
- mvn r1, r3, lsl r4
- ldr r2, [r0, #0x20]
- and r1, r2, r1
- orr r1, r1, r3, lsl r4
- str r1, [r0, #0x20]
-_020B4C7C:
- ldr r0, [r5, #0x14]
- cmp r0, #0x3
- addls pc, pc, r0, lsl #0x2
- b _020B4CB8
- ; Jump table
- b _020B4C9C ; case 0
- b _020B4CAC ; case 1
- b _020B4CAC ; case 2
- b _020B4CB8 ; case 3
-_020B4C9C:
- mov r0, r5
- mov r1, r6
- bl FUN_020B5090
- b _020B4CB8
-_020B4CAC:
- mov r0, r5
- mov r1, r6
- bl FUN_020B53B4
-_020B4CB8:
- ldr r2, [r5, #0x1c]
- cmp r2, #0x0
- ldmeqia sp!, {r4-r6,pc}
- ldr r0, _020B4CD8 ; =UNK_021CED14
- mov r1, r6
- ldr r0, [r0, #0x0]
- blx r2
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B4CD8: .word UNK_021CED14
-
- arm_func_start FUN_020B4CDC
-FUN_020B4CDC:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r1, _020B4D9C ; =UNK_021CED14
- mov r5, r0
- ldr r2, [r1, #0x0]
- ldr r4, [r2, #0x0]
- ldr r0, [r4, #0x10]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- mov r0, #0x1
- str r0, [r2, #0x30]
- ldr r2, [r4, #0x18]
- cmp r2, #0x0
- beq _020B4D24
- ldr r0, [r1, #0x0]
- mov r1, r5
- blx r2
-_020B4D24:
- ldr r0, _020B4D9C ; =UNK_021CED14
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x30]
- cmp r0, #0x0
- beq _020B4D74
- ldr r0, [r4, #0x14]
- cmp r0, #0x3
- addls pc, pc, r0, lsl #0x2
- b _020B4D74
- ; Jump table
- b _020B4D58 ; case 0
- b _020B4D68 ; case 1
- b _020B4D68 ; case 2
- b _020B4D74 ; case 3
-_020B4D58:
- mov r0, r4
- mov r1, r5
- bl FUN_020B5090
- b _020B4D74
-_020B4D68:
- mov r0, r4
- mov r1, r5
- bl FUN_020B53B4
-_020B4D74:
- ldr r2, [r4, #0x1c]
- cmp r2, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- ldr r0, _020B4D9C ; =UNK_021CED14
- mov r1, r5
- ldr r0, [r0, #0x0]
- blx r2
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B4D9C: .word UNK_021CED14
-
- arm_func_start FUN_020B4DA0
-FUN_020B4DA0: ; 0x020B4DA0
- ldr r0, _020B4E00 ; =UNK_021CED14
- ldr r3, [r0, #0x0]
- ldr r1, [r3, #0x0]
- ldr r1, [r1, #0x14]
- cmp r1, #0x0
- bne _020B4DD8
- ldr r2, _020B4E04 ; =0x04000440
- mov r1, #0x0
- ldr r0, _020B4E08 ; =0x04000448
- str r1, [r2, #0x0]
- mov r1, #0x1
- str r1, [r0, #0x0]
- str r1, [r2, #0x0]
- b _020B4DF0
-_020B4DD8:
- mov r2, #0x0
- str r2, [r3, #0x10]
- ldr r1, [r0, #0x0]
- str r2, [r1, #0x2c]
- ldr r0, [r0, #0x0]
- str r2, [r0, #0x28]
-_020B4DF0:
- ldr r0, _020B4E00 ; =UNK_021CED14
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_020B4E00: .word UNK_021CED14
-_020B4E04: .word 0x04000440
-_020B4E08: .word 0x04000448
-
- arm_func_start FUN_020B4E0C
-FUN_020B4E0C: ; 0x020B4E0C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r2, _020B4F28 ; =UNK_021CED14
- mov r4, r0
- str r4, [r2, #0x0]
- ldr r0, [r4, #0x0]
- ldr r5, [r0, #0x14]
- cmp r5, #0x0
- bne _020B4ED8
- ldr lr, _020B4F2C ; =0x04000440
- mov r1, #0x0
- ldr r0, _020B4F30 ; =0x04000444
- str r1, [lr, #0x0]
- str r1, [r0, #0x0]
- ldr r12, [r4, #0x0]
- ldr r0, _020B4F34 ; =0x04000470
- ldr r3, [r12, #0x0]
- ldr r12, [r12, #0x4]
- rsb r3, r3, #0x0
- str r3, [r0, #0x0]
- rsb r3, r12, #0x0
- str r3, [r0, #0x0]
- str r1, [r0, #0x0]
- mov r0, #0x1
- str r0, [lr, #0x0]
- ldr r0, [r2, #0x0]
- ldr r5, [r0, #0x8]
- mov r0, r5
- bl FUN_020B19FC
- cmp r0, #0x0
- moveq r0, #0x0
- beq _020B4E98
- mov r0, r5
- mov r1, #0x0
- bl FUN_020B1A14
-_020B4E98:
- ldr r1, _020B4F28 ; =UNK_021CED14
- str r0, [r4, #0x14]
- ldr r0, [r1, #0x0]
- mov r1, #0x0
- ldr r5, [r0, #0xc]
- mov r0, r5
- bl FUN_020B19A8
- cmp r0, #0x0
- moveq r0, #0x0
- beq _020B4ECC
- mov r0, r5
- mov r1, #0x0
- bl FUN_020B19C4
-_020B4ECC:
- add sp, sp, #0x4
- str r0, [r4, #0x18]
- ldmia sp!, {r4-r5,pc}
-_020B4ED8:
- ldr r4, [r4, #0x8]
- mov r1, r5
- mov r0, r4
- bl FUN_020B19FC
- cmp r0, #0x0
- moveq r1, #0x0
- beq _020B4F14
- mov r0, r4
- mov r1, r5
- bl FUN_020B1A14
- ldr r1, [r4, #0x20]
- and r1, r1, #0x700000
- mov r1, r1, asr #0x14
- add r1, r1, #0x5
- mov r1, r0, lsr r1
-_020B4F14:
- ldr r0, _020B4F28 ; =UNK_021CED14
- ldr r0, [r0, #0x0]
- str r1, [r0, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B4F28: .word UNK_021CED14
-_020B4F2C: .word 0x04000440
-_020B4F30: .word 0x04000444
-_020B4F34: .word 0x04000470
-
- arm_func_start FUN_020B4F38
-FUN_020B4F38: ; 0x020B4F38
- cmp r1, #0x0
- ldrne r1, [r0, #0x24]
- orrne r1, r1, #0x1
- strne r1, [r0, #0x24]
- ldreq r1, [r0, #0x24]
- biceq r1, r1, #0x1
- streq r1, [r0, #0x24]
- cmp r2, #0x0
- ldrne r1, [r0, #0x24]
- orrne r1, r1, #0x2
- strne r1, [r0, #0x24]
- ldreq r1, [r0, #0x24]
- biceq r1, r1, #0x2
- streq r1, [r0, #0x24]
- bx lr
-
- arm_func_start FUN_020B4F74
-FUN_020B4F74:
- ldr r0, [r0, #0x24]
- ands r0, r0, #0x2
- movne r0, #0x1
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020B4F88
-FUN_020B4F88:
- ldr r0, [r0, #0x24]
- ands r0, r0, #0x1
- movne r0, #0x1
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020B4F9C
-FUN_020B4F9C: ; 0x020B4F9C
- str r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020B4FA4
-FUN_020B4FA4: ; 0x020B4FA4
- str r1, [r0, #0x34]
- bx lr
-
- arm_func_start FUN_020B4FAC
-FUN_020B4FAC: ; 0x020B4FAC
- ldr r2, _020B4FC0 ; =UNK_021CED14
- ldr r2, [r2, #0x0]
- str r0, [r2, #0x2c]
- str r1, [r2, #0x28]
- bx lr
- .balign 4
-_020B4FC0: .word UNK_021CED14
-
- arm_func_start FUN_020B4FC4
-FUN_020B4FC4: ; 0x020B4FC4
- ldr r1, _020B5028 ; =UNK_021CED14
- mov r3, #0x0
- ldr r12, [r1, #0x0]
- mov r1, #0x1000
- str r0, [r12, #0x2c]
- ldr r2, [r0, #0x0]
- str r2, [r12, #0x40]
- ldr r2, [r0, #0x4]
- str r2, [r12, #0x44]
- str r3, [r12, #0x48]
- ldr r2, [r0, #0x8]
- str r2, [r12, #0x4c]
- ldr r2, [r0, #0xc]
- str r2, [r12, #0x50]
- str r3, [r12, #0x54]
- str r3, [r12, #0x58]
- str r3, [r12, #0x5c]
- str r1, [r12, #0x60]
- ldr r1, [r0, #0x10]
- str r1, [r12, #0x64]
- ldr r0, [r0, #0x14]
- str r0, [r12, #0x68]
- ldr r0, [r12, #0x34]
- str r0, [r12, #0x6c]
- bx lr
- .balign 4
-_020B5028: .word UNK_021CED14
-
- arm_func_start FUN_020B502C
-FUN_020B502C: ; 0x020B502C
- str r1, [r0, #0x4]
- bx lr
-
- arm_func_start FUN_020B5034
-FUN_020B5034: ; 0x020B5034
- str r1, [r0, #0x1c]
- str r2, [r0, #0x20]
- bx lr
-
- arm_func_start FUN_020B5040
-FUN_020B5040: ; 0x020B5040
- str r1, [r0, #0x8]
- str r2, [r0, #0xc]
- bx lr
-
- arm_func_start FUN_020B504C
-FUN_020B504C: ; 0x020B504C
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r1, r4
- mov r0, #0x0
- mov r2, #0x70
- bl MIi_CpuClear16
- mov r1, #0x0
- str r1, [r4, #0x0]
- mov r0, #0x2
- str r0, [r4, #0x4]
- str r1, [r4, #0x8]
- str r1, [r4, #0xc]
- str r1, [r4, #0x24]
- mov r0, #0x1
- str r0, [r4, #0x30]
- str r1, [r4, #0x28]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B5090
-FUN_020B5090: ; 0x020B5090
- stmdb sp!, {r4-r10,lr}
- ldr r5, _020B5158 ; =UNK_021CED14
- mov r9, r1
- ldrh r1, [r9, #0x0]
- ldr r2, [r5, #0x0]
- mov r10, r0
- add r7, r2, #0x38
- mov r8, #0x0
- cmp r1, #0x0
- ldmlsia sp!, {r4-r10,pc}
- mov r6, #0x1
- mov r4, #0x6
-_020B50C0:
- mul r1, r8, r4
- ldr r0, [r5, #0x0]
- str r6, [r0, #0x30]
- ldr r2, [r9, #0x4]
- ldrh r0, [r2, r1]
- add r1, r2, r1
- strh r0, [r7, #0x0]
- ldrh r0, [r1, #0x2]
- strh r0, [r7, #0x2]
- ldrh r0, [r1, #0x4]
- strh r0, [r7, #0x4]
- ldr r3, [r10, #0x20]
- cmp r3, #0x0
- beq _020B5108
- ldr r0, [r5, #0x0]
- mov r1, r9
- mov r2, r8
- blx r3
-_020B5108:
- ldr r0, [r5, #0x0]
- ldr r0, [r0, #0x30]
- cmp r0, #0x0
- beq _020B5120
- mov r0, r7
- bl FUN_020B515C
-_020B5120:
- ldr r3, [r10, #0x24]
- cmp r3, #0x0
- beq _020B513C
- ldr r0, [r5, #0x0]
- mov r1, r9
- mov r2, r8
- blx r3
-_020B513C:
- add r0, r8, #0x1
- mov r0, r0, lsl #0x10
- ldrh r1, [r9, #0x0]
- mov r8, r0, lsr #0x10
- cmp r8, r1
- blo _020B50C0
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020B5158: .word UNK_021CED14
-
- arm_func_start FUN_020B515C
-FUN_020B515C: ; 0x020B515C
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x10
- ldr r1, _020B53A4 ; =UNK_021CED14
- mov r7, r0
- ldr r0, [r1, #0x0]
- add r0, r0, #0x40
- bl G3_LoadMtx43
- ldr r0, _020B53A4 ; =UNK_021CED14
- ldr r0, [r0, #0x0]
- ldr r1, [r0, #0x24]
- cmp r1, #0x0
- beq _020B533C
- ldr r2, [r7, #0x0]
- ldr r1, _020B53A8 ; =0xC000C000
- and r4, r2, r1
- bl FUN_020B4F88
- cmp r0, #0x0
- beq _020B51F4
- ldr r0, [r7, #0x0]
- and r2, r4, #0xc000
- mov r0, r0, lsl #0x7
- mov r3, r0, lsr #0x17
- and r1, r4, #0xc0000000
- mov r1, r1, lsr #0x1e
- ldr r0, _020B53AC ; =UNK_020FF8AC
- mov r2, r2, asr #0xe
- mov r1, r1, lsl #0x1
- add r0, r0, r2, lsl #0x3
- cmp r3, #0xff
- ldrh r1, [r1, r0]
- orrgt r0, r3, #0xff00
- movgt r0, r0, lsl #0x10
- movgt r3, r0, asr #0x10
- add r0, r3, r1
- rsb r0, r0, #0x0
- mov r0, r0, lsl #0x10
- mov r1, r0, lsr #0x10
- b _020B5218
-_020B51F4:
- ldr r0, [r7, #0x0]
- mov r0, r0, lsl #0x7
- mov r0, r0, lsr #0x17
- cmp r0, #0xff
- orrgt r0, r0, #0xff00
- movgt r0, r0, lsl #0x10
- movgt r0, r0, asr #0x10
- mov r0, r0, lsl #0x10
- mov r1, r0, lsr #0x10
-_020B5218:
- ldr r0, _020B53A4 ; =UNK_021CED14
- mov r1, r1, lsl #0x10
- ldr r0, [r0, #0x0]
- mov r6, r1, asr #0x10
- bl FUN_020B4F74
- cmp r0, #0x0
- beq _020B527C
- and r1, r4, #0xc000
- and r0, r4, #0xc0000000
- ldrb r4, [r7, #0x0]
- ldr r2, _020B53B0 ; =UNK_020FF894
- mov r0, r0, lsr #0x1e
- mov r3, r1, asr #0xe
- mov r1, r0, lsl #0x1
- add r0, r2, r3, lsl #0x3
- cmp r4, #0x7f
- ldrh r1, [r1, r0]
- orrgt r0, r4, #0xff00
- movgt r0, r0, lsl #0x10
- movgt r4, r0, asr #0x10
- add r0, r4, r1
- rsb r0, r0, #0x0
- mov r0, r0, lsl #0x10
- mov r4, r0, lsr #0x10
- b _020B5298
-_020B527C:
- ldrb r0, [r7, #0x0]
- cmp r0, #0x7f
- orrgt r0, r0, #0xff00
- movgt r0, r0, lsl #0x10
- movgt r0, r0, asr #0x10
- mov r0, r0, lsl #0x10
- mov r4, r0, lsr #0x10
-_020B5298:
- ldr r0, _020B53A4 ; =UNK_021CED14
- ldr r1, [r7, #0x0]
- ldr r0, [r0, #0x0]
- mov r5, r1, lsl #0x3
- bl FUN_020B4F88
- ldr r2, [r7, #0x0]
- ldr r1, _020B53A4 ; =UNK_021CED14
- eor r5, r0, r5, lsr #0x1f
- ldr r0, [r1, #0x0]
- mov r8, r2, lsl #0x2
- bl FUN_020B4F74
- ldr r2, [r7, #0x0]
- eor r1, r0, r8, lsr #0x1f
- bic r0, r2, #0x10000000
- str r0, [r7, #0x0]
- ldr r2, [r7, #0x0]
- ldr r3, _020B53A4 ; =UNK_021CED14
- orr r2, r2, r5, lsl #0x1c
- str r2, [r7, #0x0]
- ldr r2, [r7, #0x0]
- mov r0, r6
- bic r2, r2, #0x20000000
- str r2, [r7, #0x0]
- ldr r5, [r7, #0x0]
- mov r2, r4, lsl #0x10
- orr r1, r5, r1, lsl #0x1d
- str r1, [r7, #0x0]
- ldr r5, [r3, #0x0]
- mov r1, r2, asr #0x10
- ldr r4, [r5, #0x8]
- mov r3, r7
- add r2, r4, #0xc
- str r2, [sp, #0x0]
- ldr r4, [r5, #0x14]
- mvn r2, #0x0
- str r4, [sp, #0x4]
- ldr r4, [r5, #0x18]
- str r4, [sp, #0x8]
- bl FUN_020B46B4
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,pc}
-_020B533C:
- ldr r2, _020B53A4 ; =UNK_021CED14
- ldr r0, [r7, #0x0]
- ldr r5, [r2, #0x0]
- mov r0, r0, lsl #0x7
- ldr r4, [r5, #0x8]
- mov r0, r0, lsr #0x17
- cmp r0, #0xff
- orrgt r0, r0, #0xff00
- movgt r0, r0, lsl #0x10
- ldrb r1, [r7, #0x0]
- add r4, r4, #0xc
- movgt r0, r0, asr #0x10
- str r4, [sp, #0x0]
- ldr r4, [r5, #0x14]
- cmp r1, #0x7f
- orrgt r1, r1, #0xff00
- movgt r1, r1, lsl #0x10
- str r4, [sp, #0x4]
- ldr r4, [r5, #0x18]
- movgt r1, r1, asr #0x10
- mov r3, r7
- mvn r2, #0x0
- str r4, [sp, #0x8]
- bl FUN_020B46B4
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020B53A4: .word UNK_021CED14
-_020B53A8: .word 0xC000C000
-_020B53AC: .word UNK_020FF8AC
-_020B53B0: .word UNK_020FF894
-
- arm_func_start FUN_020B53B4
-FUN_020B53B4: ; 0x020B53B4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x44
- ldr r2, _020B57B0 ; =UNK_021CED14
- mov r10, r0
- ldr r0, [r2, #0x0]
- mov r11, r1
- ldr r9, [r0, #0x2c]
- ldr r1, _020B57B0 ; =UNK_021CED14
- cmp r9, #0x0
- ldreq sb, _020B57B4 ; =UNK_020FF958
- ldr r3, [r1, #0x0]
- ldr r4, [r9, #0x10]
- str r4, [sp, #0x18]
- ldr r2, [r9, #0x14]
- str r2, [sp, #0x1c]
- ldr r1, [r10, #0x0]
- sub r1, r4, r1
- str r1, [sp, #0x18]
- ldr r1, [r10, #0x4]
- sub r1, r2, r1
- str r1, [sp, #0x1c]
- ldr r2, [r3, #0x24]
- ldr r1, [r3, #0x10]
- cmp r2, #0x0
- str r1, [sp, #0x4]
- bne _020B5430
- ldr r1, [r3, #0x28]
- cmp r1, #0x0
- movne r1, #0x1
- strne r1, [sp, #0x0]
- bne _020B5438
-_020B5430:
- mov r1, #0x0
- str r1, [sp, #0x0]
-_020B5438:
- ldrh r1, [r11, #0x0]
- add r7, r0, #0x38
- mov r8, #0x0
- cmp r1, #0x0
- addls sp, sp, #0x44
- ldmlsia sp!, {r4-r11,pc}
- mov r0, #0x1
- ldr r4, _020B57B0 ; =UNK_021CED14
- str r8, [sp, #0x14]
- str r0, [sp, #0xc]
-_020B5460:
- ldr r2, [r4, #0x0]
- ldr r0, [sp, #0xc]
- mov r1, #0x6
- str r0, [r2, #0x30]
- mul r0, r8, r1
- ldr r1, [r11, #0x4]
- add r2, r1, r0
- ldrh r0, [r1, r0]
- strh r0, [r7, #0x0]
- ldrh r0, [r2, #0x2]
- strh r0, [r7, #0x2]
- ldrh r0, [r2, #0x4]
- strh r0, [r7, #0x4]
- ldr r3, [r10, #0x20]
- cmp r3, #0x0
- beq _020B54B0
- ldr r0, [r4, #0x0]
- mov r1, r11
- mov r2, r8
- blx r3
-_020B54B0:
- ldr r0, [r4, #0x0]
- ldr r0, [r0, #0x30]
- cmp r0, #0x0
- beq _020B5790
- ldr r0, [sp, #0x0]
- ldr r1, [r7, #0x4]
- cmp r0, #0x0
- mov r0, #0x400
- rsb r0, r0, #0x0
- and r2, r1, r0
- ldr r0, [sp, #0x4]
- mov r1, r1, lsl #0x16
- add r1, r0, r1, lsr #0x16
- ldr r0, _020B57B8 ; =0x000003FF
- and r0, r1, r0
- orr r0, r2, r0
- str r0, [r7, #0x4]
- beq _020B5600
- ldr r0, [r10, #0x14]
- ldr lr, [r4, #0x0]
- sub r1, r0, #0x1
- ldr r0, [r7, #0x0]
- ldr r6, [lr, #0x28]
- mov r2, r0, lsl #0x2
- mov r2, r2, lsr #0x1f
- mov r2, r2, lsl #0x1
- mov r0, r0, lsl #0x3
- orr r5, r2, r0, lsr #0x1f
- add r0, r6, r5, lsl #0x2
- add r0, r0, r1, lsl #0x1
- ldrh r1, [r0, #0x10]
- ldr r0, _020B57BC ; =0x0000FFFF
- str r1, [sp, #0x8]
- cmp r1, r0
- bne _020B55CC
- cmp r5, #0x0
- bne _020B5558
- ldr r1, [lr, #0x20]
- mov r0, r6
- blx r1
- str r0, [sp, #0x8]
- b _020B55B4
-_020B5558:
- ands r0, r5, #0x1
- add r12, sp, #0x30
- ldmia r6, {r0-r3}
- stmia r12, {r0-r3}
- beq _020B5584
- ldr r1, [sp, #0x30]
- ldr r0, [sp, #0x34]
- rsb r1, r1, #0x0
- str r1, [sp, #0x30]
- rsb r0, r0, #0x0
- str r0, [sp, #0x34]
-_020B5584:
- ands r0, r5, #0x2
- beq _020B55A4
- ldr r1, [sp, #0x38]
- ldr r0, [sp, #0x3c]
- rsb r1, r1, #0x0
- str r1, [sp, #0x38]
- rsb r0, r0, #0x0
- str r0, [sp, #0x3c]
-_020B55A4:
- ldr r1, [lr, #0x20]
- add r0, sp, #0x30
- blx r1
- str r0, [sp, #0x8]
-_020B55B4:
- ldr r1, [r10, #0x14]
- add r0, r6, r5, lsl #0x2
- sub r1, r1, #0x1
- add r1, r0, r1, lsl #0x1
- ldr r0, [sp, #0x8]
- strh r0, [r1, #0x10]
-_020B55CC:
- ldr r1, [r9, #0x0]
- add r0, sp, #0x20
- str r1, [sp, #0x20]
- ldr r2, [r9, #0x4]
- mov r1, r7
- str r2, [sp, #0x24]
- ldr r3, [r9, #0x8]
- add r2, sp, #0x18
- str r3, [sp, #0x28]
- ldr r3, [r9, #0xc]
- str r3, [sp, #0x2c]
- bl FUN_020B57D8
- b _020B5750
-_020B5600:
- ldr r0, _020B57C0 ; =0x0000FFFE
- str r0, [sp, #0x8]
- ldr r0, [r4, #0x0]
- ldr r1, [r0, #0x24]
- cmp r1, #0x0
- beq _020B5714
- ldr r2, [r7, #0x0]
- ldr r1, _020B57C4 ; =0xC000C000
- mov r6, r2, lsl #0x3
- and r5, r2, r1
- bl FUN_020B4F88
- ldr r1, [r7, #0x0]
- eor r6, r0, r6, lsr #0x1f
- mov r1, r1, lsl #0x2
- ldr r0, [r4, #0x0]
- str r1, [sp, #0x10]
- bl FUN_020B4F74
- ldr r1, [sp, #0x10]
- eor r0, r0, r1, lsr #0x1f
- ldr r1, [r7, #0x0]
- bic r1, r1, #0x10000000
- str r1, [r7, #0x0]
- ldr r1, [r7, #0x0]
- orr r1, r1, r6, lsl #0x1c
- str r1, [r7, #0x0]
- ldr r1, [r7, #0x0]
- bic r1, r1, #0x20000000
- str r1, [r7, #0x0]
- ldr r1, [r7, #0x0]
- orr r0, r1, r0, lsl #0x1d
- str r0, [r7, #0x0]
- ldr r0, [r4, #0x0]
- bl FUN_020B4F88
- cmp r0, #0x0
- beq _020B56D4
- and r1, r5, #0xc000
- mov r2, r1, asr #0xe
- ldr r1, _020B57C8 ; =UNK_020FF8AC
- and r3, r5, #0xc0000000
- mov r3, r3, lsr #0x1e
- add r2, r1, r2, lsl #0x3
- mov r3, r3, lsl #0x1
- ldr r0, [r7, #0x0]
- ldr r1, _020B57CC ; =0xFE00FFFF
- ldrh r2, [r3, r2]
- and r1, r0, r1
- mov r0, r0, lsl #0x7
- add r0, r2, r0, lsr #0x17
- rsb r2, r0, #0x0
- ldr r0, _020B57D0 ; =0x000001FF
- and r0, r2, r0
- orr r0, r1, r0, lsl #0x10
- str r0, [r7, #0x0]
-_020B56D4:
- ldr r0, [r4, #0x0]
- bl FUN_020B4F74
- cmp r0, #0x0
- beq _020B5714
- and r1, r5, #0xc000
- mov r3, r1, asr #0xe
- and r1, r5, #0xc0000000
- mov r1, r1, lsr #0x1e
- mov r2, r1, lsl #0x1
- ldr r1, _020B57D4 ; =UNK_020FF894
- ldrb r0, [r7, #0x0]
- add r1, r1, r3, lsl #0x3
- ldrh r1, [r2, r1]
- add r0, r0, r1
- rsb r0, r0, #0x0
- strb r0, [r7, #0x0]
-_020B5714:
- ldr r2, [r7, #0x0]
- ldr r0, _020B57CC ; =0xFE00FFFF
- ldr r1, [sp, #0x18]
- and r0, r2, r0
- mov r2, r2, lsl #0x7
- mov r2, r2, lsr #0x17
- add r2, r2, r1, asr #0xc
- ldr r1, _020B57D0 ; =0x000001FF
- and r1, r2, r1
- orr r0, r0, r1, lsl #0x10
- str r0, [r7, #0x0]
- ldrb r1, [r7, #0x0]
- ldr r0, [sp, #0x1c]
- add r0, r1, r0, asr #0xc
- strb r0, [r7, #0x0]
-_020B5750:
- ldr r3, [r4, #0x0]
- ldr r1, [sp, #0x8]
- ldr r2, [sp, #0x14]
- ldr r3, [r3, #0x1c]
- mov r0, r7
- blx r3
- cmp r0, #0x1
- addne sp, sp, #0x44
- ldmneia sp!, {r4-r11,pc}
- ldr r3, [r10, #0x24]
- cmp r3, #0x0
- beq _020B5790
- ldr r0, [r4, #0x0]
- mov r1, r11
- mov r2, r8
- blx r3
-_020B5790:
- add r0, r8, #0x1
- mov r0, r0, lsl #0x10
- mov r8, r0, lsr #0x10
- ldrh r0, [r11, #0x0]
- cmp r8, r0
- blo _020B5460
- add sp, sp, #0x44
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B57B0: .word UNK_021CED14
-_020B57B4: .word UNK_020FF958
-_020B57B8: .word 0x000003FF
-_020B57BC: .word 0x0000FFFF
-_020B57C0: .word 0x0000FFFE
-_020B57C4: .word 0xC000C000
-_020B57C8: .word UNK_020FF8AC
-_020B57CC: .word 0xFE00FFFF
-_020B57D0: .word 0x000001FF
-_020B57D4: .word UNK_020FF894
-
- arm_func_start FUN_020B57D8
-FUN_020B57D8: ; 0x020B57D8
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x10
- ldr r4, [r1, #0x0]
- ldr r3, _020B5A9C ; =0x01FF0000
- and r3, r4, r3
- mov r3, r3, lsr #0x10
- mov r3, r3, lsl #0x10
- mov r3, r3, asr #0x10
- cmp r3, #0xff
- orrgt r3, r3, #0xff00
- movgt r3, r3, lsl #0x10
- movgt r3, r3, asr #0x10
- mov r3, r3, lsl #0xc
- str r3, [sp, #0x0]
- ldr r3, [r1, #0x0]
- and r3, r3, #0xff
- mov r3, r3, lsl #0x10
- mov r3, r3, asr #0x10
- cmp r3, #0x7f
- orrgt r3, r3, #0xff00
- movgt r3, r3, lsl #0x10
- movgt r3, r3, asr #0x10
- mov r3, r3, lsl #0xc
- str r3, [sp, #0x4]
- ldr r5, [r1, #0x0]
- and r4, r5, #0x300
- cmp r4, #0x100
- beq _020B5858
- cmp r4, #0x300
- beq _020B5858
- and r3, r5, #0x30000000
- orr r4, r4, r3
-_020B5858:
- cmp r4, #0x300
- bne _020B58AC
- ldr r3, _020B5AA0 ; =0xC000C000
- ldr r4, _020B5AA4 ; =UNK_020FF8AC
- and r3, r5, r3
- and r5, r3, #0xc0000000
- and r3, r3, #0xc000
- mov r6, r5, lsr #0x1e
- mov r5, r3, asr #0xe
- ldr r3, _020B5AA8 ; =UNK_020FF894
- mov r6, r6, lsl #0x1
- add r4, r4, r5, lsl #0x3
- add r3, r3, r5, lsl #0x3
- ldrh r5, [r6, r4]
- ldr r7, [sp, #0x0]
- ldrh r3, [r6, r3]
- ldr r4, [sp, #0x4]
- add r5, r7, r5, lsl #0xb
- add r3, r4, r3, lsl #0xb
- str r5, [sp, #0x0]
- str r3, [sp, #0x4]
-_020B58AC:
- ldr r5, [r0, #0x8]
- ldr r4, [sp, #0x4]
- add r3, sp, #0x0
- smull r8, r7, r5, r4
- cmp r3, r3
- ldr r6, [r0, #0x0]
- mov r4, #0x1000
- addeq r3, sp, #0x8
- adds r8, r8, r4
- ldr r5, [sp, #0x0]
- adc r7, r7, #0x0
- smlal r8, r7, r6, r5
- mov r5, r8, lsr #0xc
- orr r5, r5, r7, lsl #0x14
- str r5, [r3, #0x0]
- ldr r7, [r0, #0xc]
- ldr r6, [sp, #0x4]
- ldr r5, [r0, #0x4]
- smull r8, r6, r7, r6
- adds r7, r8, r4
- ldr r4, [sp, #0x0]
- adc r6, r6, #0x0
- smlal r7, r6, r5, r4
- mov r5, r7, lsr #0xc
- add r4, sp, #0x8
- orr r5, r5, r6, lsl #0x14
- str r5, [r3, #0x4]
- cmp r3, r4
- ldreq r3, [sp, #0xc]
- ldreq r4, [sp, #0x8]
- streq r3, [sp, #0x4]
- ldr r3, _020B5AAC ; =UNK_021CED14
- streq r4, [sp, #0x0]
- ldr r3, [r3, #0x0]
- ldr r3, [r3, #0x4]
- cmp r3, #0x0
- beq _020B597C
- cmp r3, #0x2
- moveq r5, #0x300
- movne r5, #0x100
- cmp r5, #0x100
- ldreq r4, [r1, #0x0]
- ldreq r3, _020B5AB0 ; =0xC1FFFCFF
- andeq r3, r4, r3
- orreq r3, r3, r5
- streq r3, [r1, #0x0]
- beq _020B597C
- ldr r4, [r1, #0x0]
- ldr r3, _020B5AB0 ; =0xC1FFFCFF
- and r3, r4, r3
- orr r3, r3, r5
- str r3, [r1, #0x0]
-_020B597C:
- ldr r6, [r1, #0x0]
- and r5, r6, #0x300
- cmp r5, #0x100
- beq _020B599C
- cmp r5, #0x300
- beq _020B599C
- and r3, r6, #0x30000000
- orr r5, r5, r3
-_020B599C:
- ldr r3, _020B5AA0 ; =0xC000C000
- ldr r4, _020B5AA4 ; =UNK_020FF8AC
- and r3, r6, r3
- and r6, r3, #0xc0000000
- and r3, r3, #0xc000
- mov lr, r3, asr #0xe
- mov r6, r6, lsr #0x1e
- mov r3, r6, lsl #0x1
- add r4, r4, lr, lsl #0x3
- ldrh r4, [r3, r4]
- ldr r6, [r0, #0x0]
- ldr r8, _020B5AA8 ; =UNK_020FF894
- mov r12, r4, asr #0x1
- mov r4, r12, lsl #0xc
- rsb r7, r4, #0x0
- mla r7, r6, r12, r7
- add lr, r8, lr, lsl #0x3
- ldrh r3, [r3, lr]
- ldr r6, [r0, #0x8]
- ldr lr, [sp, #0x0]
- mov r3, r3, asr #0x1
- mla r7, r6, r3, r7
- add r6, lr, r7
- str r6, [sp, #0x0]
- mov lr, r3, lsl #0xc
- ldr r6, [r0, #0x4]
- rsb r7, lr, #0x0
- mla r7, r6, r12, r7
- ldr r0, [r0, #0xc]
- ldr r6, [sp, #0x4]
- mla r3, r0, r3, r7
- add r0, r6, r3
- str r0, [sp, #0x4]
- cmp r5, #0x300
- moveq r0, #0x1
- movne r0, #0x0
- cmp r0, #0x0
- beq _020B5A4C
- ldr r3, [sp, #0x0]
- ldr r0, [sp, #0x4]
- sub r3, r3, r4
- sub r0, r0, lr
- str r3, [sp, #0x0]
- str r0, [sp, #0x4]
-_020B5A4C:
- ldr r4, [sp, #0x0]
- ldr r0, [r2, #0x0]
- ldr r3, [sp, #0x4]
- add r5, r4, r0
- str r5, [sp, #0x0]
- ldr r2, [r2, #0x4]
- ldr r0, _020B5AB4 ; =0x000001FF
- add r2, r3, r2
- str r2, [sp, #0x4]
- mov r3, r2, asr #0xc
- ldr r4, [r1, #0x0]
- ldr r2, _020B5AB8 ; =0xFE00FF00
- and r3, r3, #0xff
- and r2, r4, r2
- and r4, r0, r5, asr #0xc
- orr r0, r2, r3
- orr r0, r0, r4, lsl #0x10
- str r0, [r1, #0x0]
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020B5A9C: .word 0x01FF0000
-_020B5AA0: .word 0xC000C000
-_020B5AA4: .word UNK_020FF8AC
-_020B5AA8: .word UNK_020FF894
-_020B5AAC: .word UNK_021CED14
-_020B5AB0: .word 0xC1FFFCFF
-_020B5AB4: .word 0x000001FF
-_020B5AB8: .word 0xFE00FF00
-
- arm_func_start FUN_020B5ABC
-FUN_020B5ABC: ; 0x020B5ABC
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0xc
- add r5, sp, #0x0
- mov r4, #0x0
- str r4, [r5, #0x0]
- str r4, [r5, #0x4]
- mov r8, r2
- ldr r2, [sp, #0x28]
- mov r5, r0
- mov r9, r1
- mov r4, r3
- cmp r2, #0x0
- mov r7, #0x1
- beq _020B5B24
- add r6, sp, #0x28
-_020B5AF8:
- mov r0, r9
- mov r1, r8
- mov r3, r6
- bl FUN_020B5BC8
- ldr r1, [sp, #0x0]
- ldr r2, [sp, #0x28]
- cmp r0, r1
- strgt r0, [sp, #0x0]
- add r7, r7, #0x1
- cmp r2, #0x0
- bne _020B5AF8
-_020B5B24:
- ldr r0, [r9, #0x0]
- sub r2, r7, #0x1
- ldrsb r1, [r0, #0x1]
- ldr r0, [sp, #0x0]
- add r1, r4, r1
- mul r1, r2, r1
- sub r1, r1, r4
- str r1, [sp, #0x4]
- str r0, [r5, #0x0]
- str r1, [r5, #0x4]
- add sp, sp, #0xc
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_020B5B54
-FUN_020B5B54: ; 0x020B5B54
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x10
- str r2, [sp, #0x0]
- add r3, sp, #0x4
- mov r2, #0x0
- str r2, [r3, #0x0]
- mov r8, r0
- str r2, [r3, #0x4]
- ldr r7, [r8, #0x4]
- add r0, sp, #0x0
- mov r5, r1
- mov r4, #0x1
- blx r7
- cmp r0, #0x0
- beq _020B5BAC
- add r6, sp, #0x0
-_020B5B94:
- cmp r0, #0xa
- mov r0, r6
- addeq r4, r4, #0x1
- blx r7
- cmp r0, #0x0
- bne _020B5B94
-_020B5BAC:
- ldr r0, [r8, #0x0]
- ldrsb r0, [r0, #0x1]
- add r0, r5, r0
- mul r0, r4, r0
- sub r0, r0, r5
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B5BC8
-FUN_020B5BC8:
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x8
- mov r8, r0
- str r2, [sp, #0x0]
- ldr r4, [r8, #0x4]
- add r0, sp, #0x0
- mov r7, r1
- mov r6, r3
- mov r5, #0x0
- blx r4
- movs r1, r0
- beq _020B5C58
- ldr sb, _020B5C84 ; =0x0000FFFF
- add r10, sp, #0x0
-_020B5C00:
- cmp r1, #0xa
- beq _020B5C58
- mov r0, r8
- bl FUN_020B5CE4
- mov r1, r0
- cmp r1, r9
- ldreq r0, [r8, #0x0]
- ldreqh r1, [r0, #0x2]
- mov r0, r8
- bl FUN_020B5C88
- ldrh r1, [r8, #0x8]
- cmp r1, #0x0
- ldrnesb r1, [r0, #0x0]
- ldrneb r0, [r0, #0x1]
- addne r0, r1, r0
- ldreqsb r0, [r0, #0x2]
- add r1, r7, r0
- mov r0, r10
- add r5, r5, r1
- blx r4
- movs r1, r0
- bne _020B5C00
-_020B5C58:
- cmp r6, #0x0
- beq _020B5C70
- cmp r1, #0xa
- ldreq r0, [sp, #0x0]
- movne r0, #0x0
- str r0, [r6, #0x0]
-_020B5C70:
- cmp r5, #0x0
- subgt r5, r5, r7
- mov r0, r5
- add sp, sp, #0x8
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020B5C84: .word 0x0000FFFF
-
- arm_func_start FUN_020B5C88
-FUN_020B5C88: ; 0x020B5C88
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x0]
- ldr lr, [r3, #0xc]
- cmp lr, #0x0
- beq _020B5CD8
-_020B5CA0:
- ldrh r12, [lr, #0x0]
- cmp r12, r1
- bhi _020B5CCC
- ldrh r2, [lr, #0x2]
- cmp r1, r2
- ldrlsh r2, [r0, #0xa]
- addls r3, lr, #0x8
- subls r0, r1, r12
- mlals r0, r2, r0, r3
- addls sp, sp, #0x4
- ldmlsia sp!, {pc}
-_020B5CCC:
- ldr lr, [lr, #0x4]
- cmp lr, #0x0
- bne _020B5CA0
-_020B5CD8:
- add r0, r3, #0x4
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020B5CE4
-FUN_020B5CE4: ; 0x020B5CE4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, [r0, #0x0]
- ldr r0, [r0, #0x10]
- cmp r0, #0x0
- beq _020B5D2C
-_020B5CFC:
- ldrh r2, [r0, #0x0]
- cmp r2, r1
- bhi _020B5D20
- ldrh r2, [r0, #0x2]
- cmp r1, r2
- bhi _020B5D20
- bl FUN_020B5D7C
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020B5D20:
- ldr r0, [r0, #0x8]
- cmp r0, #0x0
- bne _020B5CFC
-_020B5D2C:
- ldr r0, _020B5D38 ; =0x0000FFFF
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B5D38: .word 0x0000FFFF
-
- arm_func_start FUN_020B5D3C
-FUN_020B5D3C: ; 0x020B5D3C
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r0, r1
- mov r1, r4
- bl FUN_020B7558
- sub r0, r0, #0x1
- strh r0, [r4, #0x8]
- ldrh r0, [r4, #0x8]
- cmp r0, #0x0
- movne r1, #0x2
- moveq r1, #0x3
- ldr r0, _020B5D78 ; =FUN_020B7718
- strh r1, [r4, #0xa]
- str r0, [r4, #0x4]
- ldmia sp!, {r4,pc}
- .balign 4
-_020B5D78: .word FUN_020B7718
-
- arm_func_start FUN_020B5D7C
-FUN_020B5D7C: ; 0x020B5D7C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldrh r3, [r0, #0x4]
- ldr r2, _020B5E4C ; =0x0000FFFF
- cmp r3, #0x0
- beq _020B5DA8
- cmp r3, #0x1
- beq _020B5DC4
- cmp r3, #0x2
- beq _020B5DD8
- b _020B5E40
-_020B5DA8:
- ldrh r2, [r0, #0x0]
- ldrh r3, [r0, #0xc]
- sub r0, r1, r2
- add r0, r3, r0
- mov r0, r0, lsl #0x10
- mov r2, r0, lsr #0x10
- b _020B5E40
-_020B5DC4:
- ldrh r2, [r0, #0x0]
- sub r1, r1, r2
- add r0, r0, r1, lsl #0x1
- ldrh r2, [r0, #0xc]
- b _020B5E40
-_020B5DD8:
- ldrh r3, [r0, #0xc]
- add r0, r0, #0xc
- add r0, r0, #0x2
- sub r3, r3, #0x1
- add lr, r0, r3, lsl #0x2
- cmp r0, lr
- bhi _020B5E40
-_020B5DF4:
- sub r12, lr, r0
- mov r3, r12, asr #0x1
- add r3, r12, r3, lsr #0x1e
- mov r3, r3, asr #0x2
- add r3, r3, r3, lsr #0x1f
- mov r12, r3, asr #0x1
- mov r3, r12, lsl #0x2
- ldrh r3, [r0, r3]
- add r12, r0, r12, lsl #0x2
- cmp r3, r1
- addcc r0, r12, #0x4
- blo _020B5E38
- cmp r1, r3
- subcc lr, r12, #0x4
- blo _020B5E38
- ldrh r2, [r12, #0x2]
- b _020B5E40
-_020B5E38:
- cmp r0, lr
- bls _020B5DF4
-_020B5E40:
- mov r0, r2
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B5E4C: .word 0x0000FFFF
-
- arm_func_start FUN_020B5E50
-FUN_020B5E50: ; 0x020B5E50
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x3c
- mov r7, r0
- mov r0, r1
- cmp r0, #0x8
- ldr r0, [sp, #0x60]
- str r1, [sp, #0x10]
- str r0, [sp, #0x60]
- ldr r0, [sp, #0x6c]
- str r2, [sp, #0x14]
- str r0, [sp, #0x6c]
- ldrlt r0, [sp, #0x10]
- mov r11, r3
- ldr r6, [sp, #0x64]
- ldr r5, [sp, #0x68]
- movge r2, #0x3
- clzlt r0, r0
- rsblt r2, r0, #0x1f
- ldr r0, [sp, #0x14]
- cmp r0, #0x8
- ldrlt r0, [sp, #0x14]
- movge r1, #0x3
- clzlt r0, r0
- rsblt r1, r0, #0x1f
- ldr r0, _020B6170 ; =UNK_020FF970
- mvn r3, #0x0
- add r1, r0, r1, lsl #0x3
- add r0, r1, r2, lsl #0x1
- ldrb r4, [r1, r2, lsl #0x1]
- ldrb r1, [r0, #0x1]
- ldr r2, [sp, #0x14]
- cmp r6, #0x0
- str r1, [sp, #0x18]
- ldr r1, [sp, #0x10]
- and r1, r1, r3, lsl r4
- str r1, [sp, #0x1c]
- ldr r1, [sp, #0x18]
- and r1, r2, r3, lsl r1
- str r1, [sp, #0x20]
- moveq r1, #0x1
- streq r1, [sp, #0x24]
- movne r1, #0x2
- strne r1, [sp, #0x24]
- mov r1, #0x0
- str r1, [sp, #0x28]
- bl FUN_020B704C
- ldr r1, [sp, #0x10]
- ldr r2, [sp, #0x14]
- mov r10, r1, asr r4
- ldr r1, [sp, #0x18]
- mov r1, r2, asr r1
- str r1, [sp, #0x2c]
- ldr r1, [sp, #0x24]
- mov r2, r1, lsl r4
- ldr r1, [sp, #0x18]
- mov r2, r2, lsl r1
- ldr r1, [sp, #0x6c]
- mov r9, r2, asr r1
- mov r1, #0x0
- str r1, [sp, #0x30]
- str r1, [sp, #0x34]
- b _020B5FE8
-_020B5F48:
- ldr r2, [sp, #0x30]
- ldr r1, [sp, #0x18]
- ldr r8, [sp, #0x34]
- mov r2, r2, lsl r1
- ldr r1, [sp, #0x60]
- add lr, r1, r2, lsl #0x3
- b _020B5FD4
-_020B5F64:
- mov r1, r8, lsl r4
- add r2, r11, r1, lsl #0x3
- ldr r1, _020B6174 ; =0x000001FF
- ldr r3, [r7, #0x0]
- and r12, r2, r1
- ldr r1, _020B6178 ; =0xFE00FF00
- and r2, lr, #0xff
- and r1, r3, r1
- orr r1, r1, r2
- orr r1, r1, r12, lsl #0x10
- str r1, [r7, #0x0]
- ldr r3, [r7, #0x0]
- ldr r1, _020B617C ; =0x3FFF3FFF
- mov r2, #0x400
- and r1, r3, r1
- orr r1, r1, r0
- str r1, [r7, #0x0]
- rsb r1, r2, #0x0
- ldrh r2, [r7, #0x4]
- add r8, r8, #0x1
- and r1, r2, r1
- orr r1, r1, r5
- strh r1, [r7, #0x4]
- ldr r1, [r7, #0x0]
- add r5, r5, r9
- bic r1, r1, #0x2000
- orr r1, r1, r6, lsl #0xd
- str r1, [r7], #0x8
-_020B5FD4:
- cmp r8, r10
- blt _020B5F64
- ldr r1, [sp, #0x30]
- add r1, r1, #0x1
- str r1, [sp, #0x30]
-_020B5FE8:
- ldr r2, [sp, #0x30]
- ldr r1, [sp, #0x2c]
- cmp r2, r1
- blt _020B5F48
- ldr r0, [sp, #0x28]
- mla r0, r10, r1, r0
- str r0, [sp, #0x28]
- ldr r1, [sp, #0x1c]
- ldr r0, [sp, #0x10]
- cmp r1, r0
- bhs _020B6078
- ldr r0, [sp, #0x60]
- ldr r1, [sp, #0x10]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x1c]
- str r6, [sp, #0x4]
- sub r4, r1, r0
- ldr r1, [sp, #0x6c]
- str r5, [sp, #0x8]
- str r1, [sp, #0xc]
- ldr r1, [sp, #0x1c]
- ldr r2, [sp, #0x20]
- add r3, r11, r1, lsl #0x3
- mov r0, r7
- mov r1, r4
- bl FUN_020B5E50
- ldr r1, [sp, #0x24]
- add r7, r7, r0, lsl #0x3
- mul r2, r1, r4
- ldr r1, [sp, #0x20]
- mul r2, r1, r2
- ldr r1, [sp, #0x6c]
- add r5, r5, r2, lsr r1
- ldr r1, [sp, #0x28]
- add r0, r1, r0
- str r0, [sp, #0x28]
-_020B6078:
- ldr r1, [sp, #0x20]
- ldr r0, [sp, #0x14]
- cmp r1, r0
- bhs _020B60F0
- ldr r1, [sp, #0x60]
- ldr r0, [sp, #0x20]
- mov r3, r11
- add r0, r1, r0, lsl #0x3
- str r0, [sp, #0x0]
- str r6, [sp, #0x4]
- ldr r1, [sp, #0x14]
- ldr r0, [sp, #0x20]
- str r5, [sp, #0x8]
- sub r4, r1, r0
- ldr r1, [sp, #0x6c]
- mov r0, r7
- str r1, [sp, #0xc]
- ldr r1, [sp, #0x1c]
- mov r2, r4
- bl FUN_020B5E50
- ldr r2, [sp, #0x24]
- ldr r1, [sp, #0x1c]
- add r7, r7, r0, lsl #0x3
- mul r1, r2, r1
- mul r2, r4, r1
- ldr r1, [sp, #0x6c]
- add r5, r5, r2, lsr r1
- ldr r1, [sp, #0x28]
- add r0, r1, r0
- str r0, [sp, #0x28]
-_020B60F0:
- ldr r1, [sp, #0x1c]
- ldr r0, [sp, #0x10]
- cmp r1, r0
- bhs _020B6164
- ldr r1, [sp, #0x20]
- ldr r0, [sp, #0x14]
- cmp r1, r0
- bhs _020B6164
- ldr r1, [sp, #0x60]
- ldr r0, [sp, #0x20]
- ldr r2, [sp, #0x10]
- add r0, r1, r0, lsl #0x3
- ldr r1, [sp, #0x1c]
- ldr r3, [sp, #0x14]
- str r0, [sp, #0x0]
- sub r1, r2, r1
- ldr r2, [sp, #0x20]
- str r6, [sp, #0x4]
- sub r2, r3, r2
- ldr r3, [sp, #0x1c]
- ldr r4, [sp, #0x6c]
- str r5, [sp, #0x8]
- mov r0, r7
- add r3, r11, r3, lsl #0x3
- str r4, [sp, #0xc]
- bl FUN_020B5E50
- ldr r1, [sp, #0x28]
- add r0, r1, r0
- str r0, [sp, #0x28]
-_020B6164:
- ldr r0, [sp, #0x28]
- add sp, sp, #0x3c
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B6170: .word UNK_020FF970
-_020B6174: .word 0x000001FF
-_020B6178: .word 0xFE00FF00
-_020B617C: .word 0x3FFF3FFF
-
- arm_func_start FUN_020B6180
-FUN_020B6180: ; 0x020B6180
- stmdb sp!, {r4-r6,lr}
- mov r3, r0, lsr #0x3
- mov r6, r1, lsr #0x3
- mul r12, r3, r6
- and r2, r0, #0x4
- and lr, r0, #0x2
- and r0, r0, #0x1
- add r4, r0, lr, lsr #0x1
- mov r5, r2, lsr #0x2
- and r0, r1, #0x4
- add lr, r12, #0x0
- add r12, r5, r4, lsl #0x1
- mla r12, r6, r12, lr
- and lr, r1, #0x2
- and r1, r1, #0x1
- add lr, r1, lr, lsr #0x1
- mov r1, r0, lsr #0x2
- add r1, r1, lr, lsl #0x1
- mla r12, r3, r1, r12
- add r1, r4, r2, lsr #0x2
- add r0, lr, r0, lsr #0x2
- mla r0, r1, r0, r12
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020B61DC
-FUN_020B61DC: ; 0x020B61DC
- stmdb sp!, {r4-r8,lr}
- ldr r12, [sp, #0x1c]
- ldr r8, [sp, #0x18]
- mov r12, r12, lsl #0x1c
- mov r4, r12, lsr #0x10
- mov r6, #0x0
- cmp r2, #0x0
- ldmleia sp!, {r4-r8,pc}
- mov lr, r3, lsl #0x1
- mov r12, r6
-_020B6204:
- mov r5, r0
- mov r7, r12
- cmp r1, #0x0
- ble _020B622C
-_020B6214:
- orr r3, r4, r8
- add r7, r7, #0x1
- cmp r7, r1
- add r8, r8, #0x1
- strh r3, [r5], #0x2
- blt _020B6214
-_020B622C:
- add r6, r6, #0x1
- cmp r6, r2
- add r0, r0, lr
- blt _020B6204
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B6240
-FUN_020B6240: ; 0x020B6240
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- ldr r5, [sp, #0x24]
- ldr lr, [sp, #0x20]
- cmp r5, #0x20
- ldr r12, [sp, #0x28]
- bgt _020B6280
- mla r4, r5, lr, r3
- ldr lr, [sp, #0x2c]
- str r12, [sp, #0x0]
- mov r3, r5
- add r0, r0, r4, lsl #0x1
- str lr, [sp, #0x4]
- bl FUN_020B61DC
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,pc}
-_020B6280:
- ldr r4, [sp, #0x2c]
- add r7, lr, r2
- mov r2, r4, lsl #0x1c
- cmp lr, r7
- add r8, r3, r1
- mov r4, r2, lsr #0x10
- addge sp, sp, #0x8
- ldmgeia sp!, {r4-r8,pc}
-_020B62A0:
- cmp lr, #0x20
- movlt r1, lr
- addge r1, lr, #0x20
- mov r6, r3
- cmp r3, r8
- add r5, r0, r1, lsl #0x6
- bge _020B62E4
-_020B62BC:
- cmp r6, #0x20
- movlt r1, r6
- addge r1, r6, #0x3e0
- orr r2, r4, r12
- mov r1, r1, lsl #0x1
- add r6, r6, #0x1
- strh r2, [r5, r1]
- cmp r6, r8
- add r12, r12, #0x1
- blt _020B62BC
-_020B62E4:
- add lr, lr, #0x1
- cmp lr, r7
- blt _020B62A0
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B62F8
-FUN_020B62F8: ; 0x020B62F8
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x18
- cmp r2, #0x8
- movlt r4, r2
- movge r12, #0x3
- clzlt r4, r4
- rsblt r12, r4, #0x1f
- cmp r3, #0x8
- movlt r4, r3
- movge r6, #0x3
- clzlt r4, r4
- rsblt r6, r4, #0x1f
- ldr r4, _020B6378 ; =UNK_020FF970
- ldr r5, [sp, #0x28]
- add r4, r4, r6, lsl #0x3
- ldrb r6, [r4, r12, lsl #0x1]
- add r12, r4, r12, lsl #0x1
- ldr r4, _020B637C ; =FUN_020B6908
- strb r6, [sp, #0x14]
- ldrb r6, [r12, #0x1]
- ldr lr, _020B6380 ; =FUN_020B68AC
- ldr ip, _020B6384 ; =FUN_020B64C0
- strb r6, [sp, #0x15]
- str r5, [sp, #0x0]
- str r4, [sp, #0x4]
- str lr, [sp, #0x8]
- str r12, [sp, #0xc]
- ldr r12, [sp, #0x14]
- str r12, [sp, #0x10]
- bl FUN_020B6488
- add sp, sp, #0x18
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B6378: .word UNK_020FF970
-_020B637C: .word FUN_020B6908
-_020B6380: .word FUN_020B68AC
-_020B6384: .word FUN_020B64C0
-
- arm_func_start FUN_020B6388
-FUN_020B6388: ; 0x020B6388
- stmdb sp!, {lr}
- sub sp, sp, #0x14
- ldr lr, [sp, #0x18]
- ldr ip, _020B63C0 ; =FUN_020B6B10
- str lr, [sp, #0x0]
- ldr lr, _020B63C4 ; =FUN_020B68AC
- str r12, [sp, #0x4]
- ldr ip, _020B63C8 ; =FUN_020B66D4
- str lr, [sp, #0x8]
- str r12, [sp, #0xc]
- str r2, [sp, #0x10]
- bl FUN_020B6488
- add sp, sp, #0x14
- ldmia sp!, {pc}
- .balign 4
-_020B63C0: .word FUN_020B6B10
-_020B63C4: .word FUN_020B68AC
-_020B63C8: .word FUN_020B66D4
-
- arm_func_start FUN_020B63CC
-FUN_020B63CC: ; 0x020B63CC
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x10
- mov r7, r1
- ldrh r1, [sp, #0x2c]
- mov r8, r0
- mov r0, r7
- mov r6, r2
- mov r5, r3
- bl FUN_020B5CE4
- ldr r1, _020B6484 ; =0x0000FFFF
- mov r4, r0
- cmp r4, r1
- ldreq r0, [r7, #0x0]
- ldreqh r4, [r0, #0x2]
- mov r0, r7
- mov r1, r4
- bl FUN_020B5C88
- str r0, [sp, #0x8]
- ldr r0, [r7, #0x0]
- ldr r2, [sp, #0x28]
- ldr r0, [r0, #0x8]
- add r1, sp, #0x8
- ldrh r3, [r0, #0x2]
- add r12, r0, #0x8
- mov r0, r8
- mla r3, r4, r3, r12
- str r3, [sp, #0xc]
- str r2, [sp, #0x0]
- str r1, [sp, #0x4]
- ldr r1, [sp, #0x8]
- ldr r4, [r8, #0x14]
- ldrsb r2, [r1, #0x0]
- mov r1, r7
- mov r3, r5
- add r2, r6, r2
- blx r4
- ldrh r0, [r7, #0x8]
- cmp r0, #0x0
- ldrne r0, [sp, #0x8]
- ldrnesb r1, [r0, #0x0]
- ldrneb r0, [r0, #0x1]
- addne r0, r1, r0
- ldreq r0, [sp, #0x8]
- ldreqsb r0, [r0, #0x2]
- add sp, sp, #0x10
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020B6484: .word 0x0000FFFF
-
- arm_func_start FUN_020B6488
-FUN_020B6488: ; 0x020B6488
- str r2, [r0, #0x4]
- ldr r2, [sp, #0x0]
- str r3, [r0, #0x8]
- strb r2, [r0, #0xc]
- ldr r2, [sp, #0x4]
- str r1, [r0, #0x0]
- ldr r1, [sp, #0x8]
- str r2, [r0, #0x14]
- ldr r2, [sp, #0xc]
- str r1, [r0, #0x18]
- ldr r1, [sp, #0x10]
- str r2, [r0, #0x1c]
- str r1, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020B64C0
-FUN_020B64C0: ; 0x020B64C0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x54
- ldrb r4, [r0, #0xc]
- mov r10, r2
- str r1, [sp, #0xc]
- str r4, [sp, #0x44]
- ldr r1, [sp, #0x44]
- ldr r4, [sp, #0x78]
- cmp r1, #0x4
- add r1, r10, r4
- str r1, [sp, #0x1c]
- ldr r2, [sp, #0x7c]
- mov r1, r3
- add r1, r1, r2
- str r1, [sp, #0x20]
- ldrne r1, [sp, #0xc]
- str r3, [sp, #0x10]
- orrne r1, r1, r1, lsl #0x8
- orrne r1, r1, r1, lsl #0x10
- strne r1, [sp, #0xc]
- bne _020B6528
- ldr r1, [sp, #0xc]
- orr r1, r1, r1, lsl #0x4
- orr r1, r1, r1, lsl #0x8
- orr r1, r1, r1, lsl #0x10
- str r1, [sp, #0xc]
-_020B6528:
- bic r1, r10, #0x7
- str r1, [sp, #0x30]
- ldr r1, [sp, #0x10]
- ldr r2, [r0, #0x10]
- bic r1, r1, #0x7
- str r1, [sp, #0x14]
- ldr r1, [sp, #0x44]
- str r2, [sp, #0x4c]
- mov r3, r1, lsl #0x6
- mov r2, r3, asr #0x2
- ldr r1, [sp, #0x20]
- add r3, r3, r2, lsr #0x1d
- ldr r2, [sp, #0x1c]
- add r6, r1, #0x7
- add r2, r2, #0x7
- bic r5, r2, #0x7
- bic r2, r6, #0x7
- ldr r1, [sp, #0x30]
- str r2, [sp, #0x24]
- mov r2, r3, asr #0x3
- str r2, [sp, #0x48]
- mov r4, r1, asr #0x2
- ldr r2, [sp, #0x30]
- ldr r1, [sp, #0x14]
- add r2, r2, r4, lsr #0x1d
- mov r2, r2, asr #0x3
- str r2, [sp, #0x2c]
- ldr r2, [sp, #0x14]
- mov r1, r1, asr #0x2
- add r1, r2, r1, lsr #0x1d
- mov r6, r1, asr #0x3
- ldr r1, [sp, #0x24]
- cmp r2, r1
- ldr r1, [r0, #0x4]
- str r1, [sp, #0x40]
- ldr r1, [r0, #0x8]
- ldr r0, [r0, #0x0]
- str r1, [sp, #0x3c]
- str r0, [sp, #0x28]
- ldrb r0, [sp, #0x4c]
- str r0, [sp, #0x38]
- ldrb r0, [sp, #0x4d]
- str r0, [sp, #0x34]
- addge sp, sp, #0x54
- ldmgeia sp!, {r4-r11,pc}
- mov r4, #0x0
- mov r11, #0x8
-_020B65E4:
- ldr r1, [sp, #0x14]
- ldr r0, [sp, #0x10]
- ldr r7, [sp, #0x2c]
- cmp r1, r0
- movlt r1, r0
- ldrlt r0, [sp, #0x14]
- sublt r9, r1, r0
- ldr r1, [sp, #0x20]
- ldr r0, [sp, #0x14]
- movge r9, r4
- sub r0, r1, r0
- cmp r0, #0x8
- movgt r0, r11
- sub r0, r0, r9
- str r0, [sp, #0x18]
- ldr r0, [sp, #0x30]
- cmp r0, r5
- mov r8, r0
- bge _020B66B0
-_020B6630:
- ldr r0, [sp, #0x38]
- ldr r2, [sp, #0x40]
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x34]
- ldr r3, [sp, #0x3c]
- str r0, [sp, #0x4]
- mov r0, r7
- mov r1, r6
- bl FUN_020B7068
- ldr r2, [sp, #0x1c]
- cmp r8, r10
- sublt r1, r10, r8
- sub r2, r2, r8
- movge r1, r4
- cmp r2, #0x8
- movgt r2, r11
- sub r3, r2, r1
- ldr r2, [sp, #0x18]
- ldr r12, [sp, #0x48]
- str r2, [sp, #0x0]
- ldr r2, [sp, #0xc]
- str r2, [sp, #0x4]
- ldr r2, [sp, #0x44]
- str r2, [sp, #0x8]
- ldr r2, [sp, #0x28]
- mla r0, r12, r0, r2
- mov r2, r9
- bl FUN_020B6F18
- add r8, r8, #0x8
- add r7, r7, #0x1
- cmp r8, r5
- blt _020B6630
-_020B66B0:
- ldr r0, [sp, #0x14]
- add r6, r6, #0x1
- add r1, r0, #0x8
- ldr r0, [sp, #0x24]
- str r1, [sp, #0x14]
- cmp r1, r0
- blt _020B65E4
- add sp, sp, #0x54
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B66D4
-FUN_020B66D4: ; 0x020B66D4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x3c
- ldrb r4, [r0, #0xc]
- mov r10, r2
- str r1, [sp, #0xc]
- str r4, [sp, #0x2c]
- ldr r1, [sp, #0x2c]
- ldr r4, [sp, #0x60]
- cmp r1, #0x4
- add r1, r10, r4
- str r1, [sp, #0x18]
- ldr r2, [sp, #0x64]
- mov r1, r3
- add r1, r1, r2
- str r1, [sp, #0x1c]
- ldrne r1, [sp, #0xc]
- str r3, [sp, #0x10]
- orrne r1, r1, r1, lsl #0x8
- orrne r1, r1, r1, lsl #0x10
- strne r1, [sp, #0xc]
- bne _020B673C
- ldr r1, [sp, #0xc]
- orr r1, r1, r1, lsl #0x4
- orr r1, r1, r1, lsl #0x8
- orr r1, r1, r1, lsl #0x10
- str r1, [sp, #0xc]
-_020B673C:
- ldr r1, [sp, #0x10]
- bic r1, r1, #0x7
- mov r2, r1, asr #0x2
- str r1, [sp, #0x14]
- add r1, r1, r2, lsr #0x1d
- ldr r2, [r0, #0x10]
- mov r3, r1, asr #0x3
- mul r1, r3, r2
- bic r3, r10, #0x7
- str r3, [sp, #0x28]
- ldr r3, [sp, #0x2c]
- mov r6, r3, lsl #0x6
- ldr r3, [sp, #0x28]
- mov r4, r6, asr #0x2
- mov r5, r3, asr #0x2
- add r5, r3, r5, lsr #0x1d
- add r4, r6, r4, lsr #0x1d
- mov r3, r4, asr #0x3
- str r3, [sp, #0x30]
- ldr r3, [sp, #0x1c]
- add r1, r1, r5, asr #0x3
- add r4, r3, #0x7
- ldr r3, [r0, #0x0]
- ldr r0, [sp, #0x18]
- add r5, r0, #0x7
- ldr r0, [sp, #0x30]
- bic r7, r5, #0x7
- mla r1, r0, r1, r3
- bic r0, r4, #0x7
- str r0, [sp, #0x20]
- ldr r0, [sp, #0x30]
- str r1, [sp, #0x24]
- mul r0, r2, r0
- str r0, [sp, #0x34]
- ldr r1, [sp, #0x14]
- ldr r0, [sp, #0x20]
- cmp r1, r0
- addge sp, sp, #0x3c
- ldmgeia sp!, {r4-r11,pc}
- mov r5, #0x0
- mov r4, #0x8
-_020B67E0:
- ldr r1, [sp, #0x14]
- ldr r0, [sp, #0x10]
- ldr r6, [sp, #0x24]
- cmp r1, r0
- movlt r1, r0
- ldrlt r0, [sp, #0x14]
- sublt r9, r1, r0
- ldr r1, [sp, #0x1c]
- ldr r0, [sp, #0x14]
- movge r9, r5
- sub r0, r1, r0
- cmp r0, #0x8
- movgt r0, r4
- sub r11, r0, r9
- ldr r0, [sp, #0x28]
- cmp r0, r7
- mov r8, r0
- bge _020B687C
-_020B6828:
- ldr r0, [sp, #0x18]
- cmp r8, r10
- sublt r1, r10, r8
- sub r0, r0, r8
- movge r1, r5
- cmp r0, #0x8
- movgt r0, r4
- sub r3, r0, r1
- ldr r0, [sp, #0xc]
- str r11, [sp, #0x0]
- str r0, [sp, #0x4]
- ldr r0, [sp, #0x2c]
- mov r2, r9
- str r0, [sp, #0x8]
- mov r0, r6
- bl FUN_020B6F18
- ldr r0, [sp, #0x30]
- add r8, r8, #0x8
- add r6, r6, r0
- cmp r8, r7
- blt _020B6828
-_020B687C:
- ldr r1, [sp, #0x24]
- ldr r0, [sp, #0x34]
- add r0, r1, r0
- str r0, [sp, #0x24]
- ldr r0, [sp, #0x14]
- add r1, r0, #0x8
- ldr r0, [sp, #0x20]
- str r1, [sp, #0x14]
- cmp r1, r0
- blt _020B67E0
- add sp, sp, #0x3c
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B68AC
-FUN_020B68AC: ; 0x020B68AC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r3, r0
- ldrb r2, [r3, #0xc]
- ldr r12, [r3, #0x4]
- cmp r2, #0x4
- orreq r0, r1, r1, lsl #0x4
- orreq r0, r0, r0, lsl #0x8
- orreq r1, r0, r0, lsl #0x10
- orrne r0, r1, r1, lsl #0x8
- orrne r1, r0, r0, lsl #0x10
- ldr r0, [r3, #0x8]
- mov r2, r2, lsl #0x6
- mul lr, r12, r0
- mov r0, r2, asr #0x2
- add r0, r2, r0, lsr #0x1d
- mov r2, r0, asr #0x3
- mov r0, r1
- mul r2, lr, r2
- ldr r1, [r3, #0x0]
- bl MIi_CpuClearFast
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020B6908
-FUN_020B6908: ; 0x020B6908
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4c
- ldr r7, [sp, #0x74]
- ldrb r5, [r0, #0xc]
- ldr r6, [r1, #0x0]
- ldr r4, [r7, #0x0]
- ldr r9, [r6, #0x8]
- mov r8, r5, lsl #0x6
- ldrb r4, [r4, #0x1]
- mov r5, r8, asr #0x2
- add r5, r8, r5, lsr #0x1d
- ldrb r9, [r9, #0x1]
- ldr r8, [r0, #0x4]
- ldr r6, [r0, #0x8]
- str r2, [sp, #0x8]
- str r3, [sp, #0xc]
- cmp r4, #0x0
- mov r5, r5, asr #0x3
- addeq sp, sp, #0x4c
- ldmeqia sp!, {r4-r11,pc}
- adds r3, r2, r4
- addmi sp, sp, #0x4c
- ldmmiia sp!, {r4-r11,pc}
- ldr r2, [sp, #0xc]
- adds r2, r2, r9
- addmi sp, sp, #0x4c
- ldmmiia sp!, {r4-r11,pc}
- ldr r10, [sp, #0x8]
- add r3, r3, #0x7
- cmp r10, #0x0
- movle r10, #0x0
- strle r10, [sp, #0x10]
- movgt r10, r10, lsr #0x3
- strgt r10, [sp, #0x10]
- ldr r10, [sp, #0xc]
- add r2, r2, #0x7
- cmp r10, #0x0
- movle r10, #0x0
- mov r11, r2, lsr #0x3
- mov r3, r3, lsr #0x3
- movgt r10, r10, lsr #0x3
- cmp r3, r8
- movcs r3, r8
- cmp r11, r6
- ldr r2, [sp, #0x10]
- movcs r11, r6
- subs r8, r3, r2
- addmi sp, sp, #0x4c
- sub r3, r11, r10
- ldmmiia sp!, {r4-r11,pc}
- cmp r3, #0x0
- addlt sp, sp, #0x4c
- ldmltia sp!, {r4-r11,pc}
- ldr r2, [sp, #0x8]
- ldr r6, [r0, #0x0]
- cmp r2, #0x0
- andge r2, r2, #0x7
- strge r2, [sp, #0x8]
- ldr r2, [sp, #0xc]
- ldr r11, [sp, #0x8]
- cmp r2, #0x0
- andge r2, r2, #0x7
- strge r2, [sp, #0xc]
- sub r8, r11, r8, lsl #0x3
- ldr r11, [sp, #0xc]
- ldr r2, [sp, #0x70]
- sub r3, r11, r3, lsl #0x3
- str r3, [sp, #0x14]
- ldr r3, [r7, #0x4]
- sub r2, r2, #0x1
- str r3, [sp, #0x28]
- str r2, [sp, #0x48]
- str r9, [sp, #0x38]
- str r4, [sp, #0x34]
- ldr r4, [r1, #0x0]
- ldr r2, [sp, #0x14]
- mov r3, r11
- cmp r3, r2
- ldr r2, [r4, #0x8]
- ldrb r3, [r2, #0x6]
- str r3, [sp, #0x40]
- ldrb r2, [r0, #0xc]
- str r2, [sp, #0x44]
- ldr r1, [r1, #0x0]
- ldr r1, [r1, #0x8]
- ldrb r1, [r1, #0x0]
- mul r1, r3, r1
- str r1, [sp, #0x3c]
- ldr r1, [r0, #0x10]
- str r1, [sp, #0x20]
- ldr r1, [r0, #0x4]
- ldr r0, [r0, #0x8]
- ldrb r11, [sp, #0x20]
- ldrb r4, [sp, #0x21]
- str r1, [sp, #0x1c]
- str r0, [sp, #0x18]
- addle sp, sp, #0x4c
- ldmleia sp!, {r4-r11,pc}
-_020B6A90:
- ldr r0, [sp, #0xc]
- ldr r7, [sp, #0x10]
- str r0, [sp, #0x30]
- ldr r0, [sp, #0x8]
- cmp r0, r8
- mov r9, r0
- ble _020B6AEC
-_020B6AAC:
- ldr r2, [sp, #0x1c]
- str r11, [sp, #0x0]
- ldr r3, [sp, #0x18]
- mov r0, r7
- mov r1, r10
- str r4, [sp, #0x4]
- bl FUN_020B7068
- mla r1, r0, r5, r6
- add r0, sp, #0x24
- str r9, [sp, #0x2c]
- str r1, [sp, #0x24]
- bl FUN_020B6CAC
- sub r9, r9, #0x8
- add r7, r7, #0x1
- cmp r9, r8
- bgt _020B6AAC
-_020B6AEC:
- ldr r0, [sp, #0xc]
- add r10, r10, #0x1
- sub r1, r0, #0x8
- ldr r0, [sp, #0x14]
- str r1, [sp, #0xc]
- cmp r1, r0
- bgt _020B6A90
- add sp, sp, #0x4c
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B6B10
-FUN_020B6B10: ; 0x020B6B10
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x2c
- ldr r4, [sp, #0x54]
- ldrb r5, [r0, #0xc]
- str r4, [sp, #0x54]
- ldr r4, [r4, #0x0]
- ldr r6, [r1, #0x0]
- mov r7, r5, lsl #0x6
- ldrb r4, [r4, #0x1]
- mov r5, r7, asr #0x2
- add r5, r7, r5, lsr #0x1d
- cmp r4, #0x0
- ldr r6, [r6, #0x8]
- mov r9, r3
- ldr r8, [r0, #0x4]
- ldr r7, [r0, #0x8]
- mov r10, r2
- mov r5, r5, asr #0x3
- addeq sp, sp, #0x2c
- ldr lr, [r0, #0x0]
- ldrb r3, [r6, #0x1]
- ldmeqia sp!, {r4-r11,pc}
- adds r6, r10, r4
- addmi sp, sp, #0x2c
- ldmmiia sp!, {r4-r11,pc}
- adds r2, r9, r3
- addmi sp, sp, #0x2c
- ldmmiia sp!, {r4-r11,pc}
- cmp r10, #0x0
- movle r11, #0x0
- add r6, r6, #0x7
- movgt r11, r10, lsr #0x3
- cmp r9, #0x0
- movle r12, #0x0
- add r2, r2, #0x7
- mov r6, r6, lsr #0x3
- movgt r12, r9, lsr #0x3
- cmp r6, r8
- movcs r6, r8
- mov r2, r2, lsr #0x3
- cmp r2, r7
- movcs r2, r7
- subs r7, r6, r11
- addmi sp, sp, #0x2c
- sub r2, r2, r12
- ldmmiia sp!, {r4-r11,pc}
- cmp r2, #0x0
- addlt sp, sp, #0x2c
- ldmltia sp!, {r4-r11,pc}
- ldr r6, [r0, #0x10]
- cmp r10, #0x0
- sub r8, r6, r7
- mul r8, r5, r8
- mla r11, r6, r12, r11
- andge r10, r10, #0x7
- str r8, [sp, #0x0]
- ldr r8, [sp, #0x54]
- mla r6, r5, r11, lr
- ldr r12, [r8, #0x4]
- ldr r11, [sp, #0x50]
- cmp r9, #0x0
- sub r8, r11, #0x1
- andge r9, r9, #0x7
- sub r11, r9, r2, lsl #0x3
- str r12, [sp, #0x8]
- str r4, [sp, #0x14]
- str r8, [sp, #0x28]
- str r3, [sp, #0x18]
- ldr r3, [r1, #0x0]
- cmp r9, r11
- ldr r2, [r3, #0x8]
- sub r7, r10, r7, lsl #0x3
- ldrb r2, [r2, #0x6]
- str r2, [sp, #0x20]
- ldrb r0, [r0, #0xc]
- str r0, [sp, #0x24]
- ldr r0, [r1, #0x0]
- ldr r0, [r0, #0x8]
- ldrb r0, [r0, #0x0]
- mul r0, r2, r0
- str r0, [sp, #0x1c]
- addle sp, sp, #0x2c
- ldmleia sp!, {r4-r11,pc}
- add r4, sp, #0x4
-_020B6C60:
- mov r8, r10
- str r9, [sp, #0x10]
- cmp r10, r7
- ble _020B6C90
-_020B6C70:
- mov r0, r4
- str r6, [sp, #0x4]
- str r8, [sp, #0xc]
- bl FUN_020B6CAC
- sub r8, r8, #0x8
- cmp r8, r7
- add r6, r6, r5
- bgt _020B6C70
-_020B6C90:
- ldr r0, [sp, #0x0]
- sub r9, r9, #0x8
- cmp r9, r11
- add r6, r6, r0
- bgt _020B6C60
- add sp, sp, #0x2c
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B6CAC
-FUN_020B6CAC: ; 0x020B6CAC
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x34
- ldr r5, [r0, #0x8]
- ldr r4, [r0, #0xc]
- cmp r5, #0x0
- strge r5, [sp, #0x0]
- movlt r1, #0x0
- strlt r1, [sp, #0x0]
- ldr r1, [r0, #0x10]
- cmp r4, #0x0
- add r10, r5, r1
- ldr r1, [r0, #0x14]
- movge r2, r4
- movlt r2, #0x0
- cmp r10, #0x8
- add r3, r4, r1
- movge r10, #0x8
- cmp r3, #0x8
- movge r3, #0x8
- cmp r4, #0x0
- movgt r4, #0x0
- cmp r5, #0x0
- ldr r8, [r0, #0x20]
- movgt r5, #0x0
- rsb r1, r4, #0x0
- mul r7, r10, r8
- ldr r6, [r0, #0x1c]
- rsb r4, r5, #0x0
- mul r9, r6, r4
- ldr r4, [r0, #0x18]
- mov r10, r7
- str r4, [sp, #0x8]
- ldr r4, [sp, #0x0]
- cmp r8, #0x4
- mul r5, r4, r8
- ldr r4, [sp, #0x8]
- str r5, [sp, #0x0]
- mla r11, r1, r4, r9
- ldr r1, [r0, #0x4]
- str r1, [sp, #0x4]
- bne _020B6E24
- ldr r1, [r0, #0x0]
- ldr r7, [r0, #0x24]
- add r0, r1, r2, lsl #0x2
- str r0, [sp, #0xc]
- add r0, r1, r3, lsl #0x2
- ldr r1, [sp, #0xc]
- str r0, [sp, #0x10]
- cmp r1, r0
- addcs sp, sp, #0x34
- ldmcsia sp!, {r4-r11,pc}
- mov r0, #0x0
- add r9, sp, #0x24
- mov r4, #0xf
- str r0, [sp, #0x1c]
-_020B6D88:
- ldr r0, [sp, #0xc]
- mov r1, r11, lsr #0x1f
- ldr r5, [r0, #0x0]
- ldr r0, [sp, #0x4]
- rsb r2, r1, r11, lsl #0x1d
- add r0, r0, r11, lsr #0x3
- str r0, [sp, #0x24]
- ldr r0, [sp, #0x1c]
- add r1, r1, r2, ror #0x1d
- strb r0, [sp, #0x28]
- strb r0, [sp, #0x29]
- mov r0, r9
- bl FUN_020B76B0
- ldr r8, [sp, #0x0]
- mov r0, r8
- cmp r0, r10
- bhs _020B6DF8
-_020B6DCC:
- mov r0, r9
- mov r1, r6
- bl FUN_020B76B0
- cmp r0, #0x0
- mvnne r1, r4, lsl r8
- addne r0, r7, r0
- andne r1, r5, r1
- orrne r5, r1, r0, lsl r8
- add r8, r8, #0x4
- cmp r8, r10
- blo _020B6DCC
-_020B6DF8:
- ldr r0, [sp, #0xc]
- add r1, r0, #0x4
- str r5, [r0, #0x0]
- ldr r0, [sp, #0x10]
- str r1, [sp, #0xc]
- cmp r1, r0
- ldr r0, [sp, #0x8]
- add r11, r11, r0
- blo _020B6D88
- add sp, sp, #0x34
- ldmia sp!, {r4-r11,pc}
-_020B6E24:
- ldr r1, [r0, #0x0]
- ldr r9, [r0, #0x24]
- add r0, r1, r2, lsl #0x3
- str r0, [sp, #0x14]
- add r0, r1, r3, lsl #0x3
- ldr r1, [sp, #0x14]
- str r0, [sp, #0x18]
- cmp r1, r0
- addcs sp, sp, #0x34
- ldmcsia sp!, {r4-r11,pc}
- mov r0, #0x0
- mov r4, #0xff
- str r0, [sp, #0x20]
-_020B6E58:
- mov r1, r11, lsr #0x1f
- rsb r0, r1, r11, lsl #0x1d
- add r1, r1, r0, ror #0x1d
- ldr r0, [sp, #0x14]
- ldr r8, [r0, #0x0]
- ldr r7, [r0, #0x4]
- ldr r0, [sp, #0x4]
- add r0, r0, r11, lsr #0x3
- str r0, [sp, #0x2c]
- ldr r0, [sp, #0x20]
- strb r0, [sp, #0x30]
- strb r0, [sp, #0x31]
- add r0, sp, #0x2c
- bl FUN_020B76B0
- ldr r0, [sp, #0x0]
- cmp r0, r10
- mov r5, r0
- bhs _020B6EE8
-_020B6EA0:
- add r0, sp, #0x2c
- mov r1, r6
- bl FUN_020B76B0
- cmp r0, #0x0
- beq _020B6EDC
- cmp r5, #0x20
- mvncc r1, r4, lsl r5
- addcc r0, r9, r0
- andcc r1, r8, r1
- orrcc r8, r1, r0, lsl r5
- subcs r2, r5, #0x20
- mvncs r1, r4, lsl r2
- addcs r0, r9, r0
- andcs r1, r7, r1
- orrcs r7, r1, r0, lsl r2
-_020B6EDC:
- add r5, r5, #0x8
- cmp r5, r10
- blo _020B6EA0
-_020B6EE8:
- ldr r0, [sp, #0x14]
- str r8, [r0, #0x0]
- add r1, r0, #0x8
- str r7, [r0, #0x4]
- ldr r0, [sp, #0x18]
- str r1, [sp, #0x14]
- cmp r1, r0
- ldr r0, [sp, #0x8]
- add r11, r11, r0
- blo _020B6E58
- add sp, sp, #0x34
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B6F18
-FUN_020B6F18: ; 0x020B6F18
- stmdb sp!, {r4-r6,lr}
- mov lr, r0
- cmp r3, #0x8
- ldr r0, [sp, #0x14]
- bne _020B6F4C
- ldr r4, [sp, #0x10]
- cmp r4, #0x8
- bne _020B6F4C
- ldr r2, [sp, #0x18]
- mov r1, lr
- mov r2, r2, lsl #0x3
- bl MIi_CpuClearFast
- ldmia sp!, {r4-r6,pc}
-_020B6F4C:
- ldr r4, [sp, #0x18]
- cmp r4, #0x4
- bne _020B6FAC
- mov r5, r1, lsl #0x2
- add r4, r5, r3, lsl #0x2
- mvn r3, #0x0
- rsb r4, r4, #0x20
- mov r3, r3, lsr r5
- add r1, r4, r1, lsl #0x2
- mov r3, r3, lsl r1
- ldr r1, [sp, #0x10]
- add r5, lr, r2, lsl #0x2
- add r2, r5, r1, lsl #0x2
- and r6, r0, r3, lsr r4
- cmp r5, r2
- mvn r1, r3, lsr r4
- ldmcsia sp!, {r4-r6,pc}
-_020B6F90:
- ldr r0, [r5, #0x0]
- and r0, r0, r1
- orr r0, r6, r0
- str r0, [r5], #0x4
- cmp r5, r2
- blo _020B6F90
- ldmia sp!, {r4-r6,pc}
-_020B6FAC:
- mov r12, r1, lsl #0x3
- add r1, r12, r3, lsl #0x3
- rsb r1, r1, #0x40
- mvn r3, #0x0
- cmp r1, #0x20
- mov r5, r3, lsr r12
- subcs r4, r1, #0x20
- addcs r3, r12, r4
- movcs r3, r5, lsl r3
- movcs r3, r3, lsr r4
- movcc r3, r5, lsl r12
- mvn r4, #0x0
- add r5, lr, r2, lsl #0x3
- cmp r12, #0x20
- mov r4, r4, lsl r1
- subcs r12, r12, #0x20
- addcs r1, r12, r1
- movcs r1, r4, lsr r1
- movcs r6, r1, lsl r12
- movcc r6, r4, lsr r1
- ldr r1, [sp, #0x10]
- and lr, r0, r3
- add r4, r5, r1, lsl #0x3
- cmp r5, r4
- and r12, r0, r6
- mvn r2, r3
- mvn r1, r6
- ldmcsia sp!, {r4-r6,pc}
-_020B701C:
- ldr r0, [r5, #0x0]
- and r0, r0, r2
- orr r0, lr, r0
- str r0, [r5, #0x0]
- ldr r0, [r5, #0x4]
- and r0, r0, r1
- orr r0, r12, r0
- str r0, [r5, #0x4]
- add r5, r5, #0x8
- cmp r5, r4
- blo _020B701C
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020B704C
-FUN_020B704C: ; 0x020B704C
- ldrb r3, [r0, #0x1]
- ldr r2, _020B7064 ; =UNK_020FF990
- ldrb r1, [r0, #0x0]
- add r0, r2, r3, lsl #0x4
- ldr r0, [r0, r1, lsl #0x2]
- bx lr
- .balign 4
-_020B7064: .word UNK_020FF990
-
- arm_func_start FUN_020B7068
-FUN_020B7068: ; 0x020B7068
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- ldr fp, _020B7164 ; =UNK_020FF970
- mov r9, #0x0
- mov r10, #0x3
- mvn r7, #0x0
-_020B7080:
- ldr r4, [sp, #0x2c]
- ldr r6, [sp, #0x28]
- and r12, r3, r7, lsl r4
- cmp r12, r1
- mov r8, r7, lsl r6
- mov r5, r7, lsl r4
- and lr, r2, r7, lsl r6
- bhi _020B70D0
- mla r9, r2, r12, r9
- cmp lr, r0
- movhi r2, lr
- subhi r1, r1, r12
- subhi r3, r3, r12
- bhi _020B7118
- sub r3, r3, r12
- mla r9, lr, r3, r9
- sub r0, r0, lr
- sub r1, r1, r12
- sub r2, r2, lr
- b _020B7118
-_020B70D0:
- cmp lr, r0
- mlals r9, lr, r12, r9
- mvn r3, r5
- movls r3, r12
- subls r0, r0, lr
- subls r2, r2, lr
- bls _020B7118
- and r2, r1, r5
- mla r5, lr, r2, r9
- and r2, r0, r8
- and r1, r1, r3
- add r2, r5, r2, lsl r4
- mvn r3, r8
- add r1, r2, r1, lsl r6
- and r0, r0, r3
- add sp, sp, #0x4
- add r0, r1, r0
- ldmia sp!, {r4-r11,pc}
-_020B7118:
- cmp r2, #0x8
- movlt r4, r2
- movge r5, r10
- clzlt r4, r4
- rsblt r5, r4, #0x1f
- cmp r3, #0x8
- movge r4, r10
- movlt r4, r3
- clzlt r4, r4
- rsblt r4, r4, #0x1f
- add r4, r11, r4, lsl #0x3
- add r6, r4, r5, lsl #0x1
- ldrb r5, [r4, r5, lsl #0x1]
- ldrb r4, [r6, #0x1]
- str r5, [sp, #0x28]
- str r4, [sp, #0x2c]
- b _020B7080
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B7164: .word UNK_020FF970
-
- arm_func_start FUN_020B7168
-FUN_020B7168: ; 0x020B7168
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0xc
- ldr r12, [sp, #0x28]
- mov r7, r0
- mov r6, r1
- mov r5, r2
- mov r4, r3
- ands r0, r12, #0x100
- beq _020B71AC
- ldr r0, [r7, #0x4]
- ldr r1, [r7, #0xc]
- ldr r2, [sp, #0x2c]
- bl FUN_020B5B54
- ldr r1, [sp, #0x20]
- sub r0, r1, r0
- add r5, r5, r0
- b _020B71E4
-_020B71AC:
- ands r0, r12, #0x80
- beq _020B71E4
- ldr r0, [r7, #0x4]
- ldr r1, [r7, #0xc]
- ldr r2, [sp, #0x2c]
- bl FUN_020B5B54
- ldr r2, [sp, #0x20]
- add r1, r0, #0x1
- add r0, r2, #0x1
- add r0, r0, r0, lsr #0x1f
- mov r2, r0, asr #0x1
- add r0, r1, r1, lsr #0x1f
- sub r0, r2, r0, asr #0x1
- add r5, r5, r0
-_020B71E4:
- ldr r1, [sp, #0x24]
- ldr r0, [sp, #0x28]
- str r1, [sp, #0x0]
- ldr r12, [sp, #0x2c]
- str r0, [sp, #0x4]
- mov r0, r7
- mov r1, r6
- mov r2, r5
- mov r3, r4
- str r12, [sp, #0x8]
- bl FUN_020B72C4
- add sp, sp, #0xc
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B7218
-FUN_020B7218: ; 0x020B7218
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x18
- ldr r4, [sp, #0x34]
- mov r8, r0
- str r4, [sp, #0x0]
- mov r7, r1
- mov r6, r2
- mov r5, r3
- ldr r4, [sp, #0x30]
- ldr r1, [r8, #0x4]
- ldr r2, [r8, #0x8]
- ldr r3, [r8, #0xc]
- add r0, sp, #0xc
- bl FUN_020B5ABC
- ands r0, r4, #0x10
- ldrne r0, [sp, #0xc]
- addne r0, r0, #0x1
- addne r0, r0, r0, lsr #0x1f
- subne r7, r7, r0, asr #0x1
- bne _020B7274
- ands r0, r4, #0x20
- ldrne r0, [sp, #0xc]
- subne r7, r7, r0
-_020B7274:
- ands r0, r4, #0x2
- ldrne r0, [sp, #0x10]
- addne r0, r0, #0x1
- addne r0, r0, r0, lsr #0x1f
- subne r6, r6, r0, asr #0x1
- bne _020B7298
- ands r0, r4, #0x4
- ldrne r0, [sp, #0x10]
- subne r6, r6, r0
-_020B7298:
- str r5, [sp, #0x0]
- ldr r0, [sp, #0x34]
- str r4, [sp, #0x4]
- str r0, [sp, #0x8]
- ldr r3, [sp, #0xc]
- mov r0, r8
- mov r1, r7
- mov r2, r6
- bl FUN_020B72C4
- add sp, sp, #0x18
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B72C4
-FUN_020B72C4: ; 0x020B72C4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r10, r0
- ldr r4, [r10, #0x4]
- ldr r0, [sp, #0x40]
- ldr r4, [r4, #0x0]
- ldr r5, [r10, #0xc]
- ldrsb r4, [r4, #0x1]
- cmp r0, #0x0
- mov r9, r1
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x38]
- mov r8, r2
- str r0, [sp, #0x38]
- mov r7, r3
- add r6, r5, r4
- addeq sp, sp, #0x14
- ldmeqia sp!, {r4-r11,pc}
- add r0, r7, #0x1
- ldr r1, [sp, #0x3c]
- add r0, r0, r0, lsr #0x1f
- mov r0, r0, asr #0x1
- and r5, r1, #0x800
- and r11, r1, #0x400
- str r0, [sp, #0x8]
- mov r4, #0x0
-_020B732C:
- mov r1, r9
- cmp r5, #0x0
- beq _020B7358
- ldr r0, [r10, #0x4]
- ldr r1, [r10, #0x8]
- ldr r2, [sp, #0xc]
- mov r3, r4
- bl FUN_020B5BC8
- sub r0, r7, r0
- add r1, r9, r0
- b _020B7388
-_020B7358:
- cmp r11, #0x0
- beq _020B7388
- ldr r0, [r10, #0x4]
- ldr r1, [r10, #0x8]
- ldr r2, [sp, #0xc]
- mov r3, r4
- bl FUN_020B5BC8
- add r0, r0, #0x1
- add r1, r0, r0, lsr #0x1f
- ldr r0, [sp, #0x8]
- sub r0, r0, r1, asr #0x1
- add r1, r9, r0
-_020B7388:
- ldr r2, [sp, #0xc]
- add r3, sp, #0xc
- str r2, [sp, #0x0]
- str r3, [sp, #0x4]
- ldr r3, [sp, #0x38]
- mov r0, r10
- mov r2, r8
- bl FUN_020B73C0
- ldr r0, [sp, #0xc]
- add r8, r8, r6
- cmp r0, #0x0
- bne _020B732C
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B73C0
-FUN_020B73C0: ; 0x020B73C0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r10, r0
- ldr r6, [r10, #0x8]
- ldr r5, [r10, #0x4]
- ldr r4, [sp, #0x30]
- add r0, sp, #0x8
- str r4, [sp, #0x8]
- ldr r4, [r5, #0x4]
- mov r9, r1
- mov r8, r2
- mov r7, r3
- blx r4
- cmp r0, #0x0
- beq _020B743C
- add r11, sp, #0x8
-_020B7400:
- cmp r0, #0xa
- beq _020B743C
- str r7, [sp, #0x0]
- str r0, [sp, #0x4]
- ldr r0, [r10, #0x0]
- mov r1, r5
- mov r2, r9
- mov r3, r8
- bl FUN_020B63CC
- add r1, r9, r0
- mov r0, r11
- add r9, r1, r6
- blx r4
- cmp r0, #0x0
- bne _020B7400
-_020B743C:
- ldr r1, [sp, #0x34]
- cmp r1, #0x0
- addeq sp, sp, #0xc
- ldmeqia sp!, {r4-r11,pc}
- cmp r0, #0xa
- ldreq r1, [sp, #0x8]
- ldr r0, [sp, #0x34]
- movne r1, #0x0
- str r1, [r0, #0x0]
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B7468
-FUN_020B7468: ; 0x020B7468
- stmdb sp!, {r4-r6,lr}
- ldrh r2, [r0, #0xc]
- ldrh r3, [r0, #0xe]
- mov r1, #0x0
- add r2, r0, r2
- cmp r3, #0x0
- ldmleia sp!, {r4-r6,pc}
- ldr r3, _020B7548 ; =0x46494E46
- ldr ip, _020B754C ; =0x43574448
- ldr r4, _020B7550 ; =0x434D4150
- ldr lr, _020B7554 ; =0x43474C50
-_020B7494:
- ldr r5, [r2, #0x0]
- cmp r5, r4
- bhi _020B74B0
- cmp r5, r4
- bhs _020B7518
- cmp r5, lr
- b _020B752C
-_020B74B0:
- cmp r5, r12
- bhi _020B74C4
- cmp r5, r12
- beq _020B7500
- b _020B752C
-_020B74C4:
- cmp r5, r3
- bne _020B752C
- add r6, r2, #0x8
- ldr r5, [r6, #0x8]
- add r5, r5, r0
- str r5, [r6, #0x8]
- ldr r5, [r6, #0xc]
- cmp r5, #0x0
- addne r5, r5, r0
- strne r5, [r6, #0xc]
- ldr r5, [r6, #0x10]
- cmp r5, #0x0
- addne r5, r5, r0
- strne r5, [r6, #0x10]
- b _020B752C
-_020B7500:
- add r6, r2, #0x8
- ldr r5, [r6, #0x4]
- cmp r5, #0x0
- addne r5, r5, r0
- strne r5, [r6, #0x4]
- b _020B752C
-_020B7518:
- add r6, r2, #0x8
- ldr r5, [r6, #0x8]
- cmp r5, #0x0
- addne r5, r5, r0
- strne r5, [r6, #0x8]
-_020B752C:
- ldrh r5, [r0, #0xe]
- ldr r6, [r2, #0x4]
- add r1, r1, #0x1
- cmp r1, r5
- add r2, r2, r6
- blt _020B7494
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B7548: .word 0x46494E46
-_020B754C: .word 0x43574448
-_020B7550: .word 0x434D4150
-_020B7554: .word 0x43474C50
-
- arm_func_start FUN_020B7558
-FUN_020B7558: ; 0x020B7558
- stmdb sp!, {r4-r6,lr}
- movs r6, r0
- mov r5, r1
- beq _020B75C8
- cmp r6, #0x0
- beq _020B7584
- ldr r1, [r6, #0x0]
- ldr r0, _020B76A8 ; =0x4E465452
- cmp r1, r0
- moveq r0, #0x1
- beq _020B7588
-_020B7584:
- mov r0, #0x0
-_020B7588:
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020B75CC
- cmp r6, #0x0
- beq _020B75B4
- ldrh r0, [r6, #0x6]
- cmp r0, #0x100
- movcs r0, #0x1
- bhs _020B75B8
-_020B75B4:
- mov r0, #0x0
-_020B75B8:
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- b _020B75CC
-_020B75C8:
- mov r0, #0x0
-_020B75CC:
- cmp r0, #0x0
- movne r4, #0x0
- bne _020B7654
- cmp r6, #0x0
- beq _020B7640
- cmp r6, #0x0
- beq _020B75FC
- ldr r1, [r6, #0x0]
- ldr r0, _020B76A8 ; =0x4E465452
- cmp r1, r0
- moveq r0, #0x1
- beq _020B7600
-_020B75FC:
- mov r0, #0x0
-_020B7600:
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- cmp r0, #0x0
- beq _020B7644
- cmp r6, #0x0
- beq _020B762C
- ldrh r0, [r6, #0x6]
- cmp r0, #0x1
- movcs r0, #0x1
- bhs _020B7630
-_020B762C:
- mov r0, #0x0
-_020B7630:
- cmp r0, #0x0
- movne r0, #0x1
- moveq r0, #0x0
- b _020B7644
-_020B7640:
- mov r0, #0x0
-_020B7644:
- cmp r0, #0x0
- movne r4, #0x1
- bne _020B7654
- bl OS_Terminate
-_020B7654:
- mov r0, r6
- bl FUN_020B7468
- ldr r1, _020B76AC ; =0x46494E46
- mov r0, r6
- bl FUN_020B01F8
- cmp r0, #0x0
- moveq r0, #0x0
- streq r0, [r5, #0x0]
- ldmeqia sp!, {r4-r6,pc}
- add r0, r0, #0x8
- str r0, [r5, #0x0]
- cmp r4, #0x0
- beq _020B76A0
- ldr r2, [r5, #0x0]
- mov r1, #0x0
- ldrsb r0, [r2, #0x6]
- strb r0, [r2, #0x7]
- ldr r0, [r5, #0x0]
- strb r1, [r0, #0x6]
-_020B76A0:
- add r0, r4, #0x1
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B76A8: .word 0x4E465452
-_020B76AC: .word 0x46494E46
-
- arm_func_start FUN_020B76B0
-FUN_020B76B0:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldrsb r2, [r0, #0x4]
- ldrb r12, [r0, #0x5]
- mov r4, r1
- cmp r2, r4
- subge r1, r2, r4
- movge r5, r12, lsr r1
- strgeb r1, [r0, #0x4]
- bge _020B7704
- ldr r3, [r0, #0x0]
- sub r1, r4, r2
- add r2, r3, #0x1
- str r2, [r0, #0x0]
- ldrb r2, [r3, #0x0]
- mov r5, r12, lsl r1
- strb r2, [r0, #0x5]
- mov r2, #0x8
- strb r2, [r0, #0x4]
- bl FUN_020B76B0
- orr r5, r0, r5
-_020B7704:
- rsb r0, r4, #0x8
- mov r1, #0xff
- and r0, r5, r1, asr r0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020B7718
-FUN_020B7718: ; 0x020B7718
- ldr r1, [r0, #0x0]
- ldrh r2, [r1], #0x2
- str r1, [r0, #0x0]
- mov r0, r2
- bx lr
-
- arm_func_start FUN_020B772C
-FUN_020B772C: ; 0x020B772C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- ldrb r0, [r6, #0x9]
- mov r5, #0x0
- cmp r0, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r7,pc}
- add r4, r6, #0x8
-_020B7750:
- ldrh r0, [r6, #0xe]
- ldrh r1, [r4, r0]
- add r0, r4, r0
- mla r0, r1, r5, r0
- ldr r0, [r0, #0x4]
- add r7, r6, r0
- mov r0, r7
- bl FUN_020B79A4
- mov r0, r7
- bl FUN_020B780C
- ldrb r0, [r6, #0x9]
- add r5, r5, #0x1
- cmp r5, r0
- blo _020B7750
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B7790
-FUN_020B7790: ; 0x020B7790
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r8, r0
- ldrb r0, [r8, #0x9]
- mov r7, r1
- mov r5, #0x1
- cmp r0, #0x0
- mov r6, #0x0
- bls _020B7800
- add r4, r8, #0x8
-_020B77B8:
- ldrh r0, [r8, #0xe]
- mov r1, r7
- ldrh r2, [r4, r0]
- add r0, r4, r0
- mla r0, r2, r6, r0
- ldr r0, [r0, #0x4]
- add r9, r8, r0
- mov r0, r9
- bl FUN_020B7A04
- and r5, r5, r0
- mov r0, r9
- mov r1, r7
- bl FUN_020B7864
- ldrb r1, [r8, #0x9]
- add r6, r6, #0x1
- and r5, r5, r0
- cmp r6, r1
- blo _020B77B8
-_020B7800:
- mov r0, r5
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_020B780C
-FUN_020B780C: ; 0x020B780C
- ldr r2, [r0, #0x8]
- mov r1, #0x0
- add r2, r0, r2
- ldrh r0, [r2, #0x2]
- add r12, r2, r0
- ldrb r0, [r12, #0x1]
- cmp r0, #0x0
- bxls lr
-_020B782C:
- ldrh r2, [r12, #0x6]
- ldrh r0, [r12, r2]
- add r2, r12, r2
- add r2, r2, #0x4
- mla r3, r0, r1, r2
- ldrb r0, [r3, #0x3]
- add r1, r1, #0x1
- ands r2, r0, #0x1
- bicne r0, r0, #0x1
- strneb r0, [r3, #0x3]
- ldrb r0, [r12, #0x1]
- cmp r1, r0
- blo _020B782C
- bx lr
-
- arm_func_start FUN_020B7864
-FUN_020B7864: ; 0x020B7864
- stmdb sp!, {r4-r10,lr}
- ldr r2, [r0, #0x8]
- mov r10, r1
- add r9, r0, r2
- ldrh r0, [r9, #0x2]
- mov r6, #0x1
- mov r7, #0x0
- add r8, r9, r0
- ldrb r0, [r8, #0x1]
- cmp r0, #0x0
- bls _020B7908
- mov r5, r7
- mov r4, r7
-_020B7898:
- ldrh r1, [r8, #0x6]
- ldrh r0, [r10, #0x34]
- add r2, r8, r1
- ldrh r1, [r2, #0x2]
- add r0, r10, r0
- add r1, r2, r1
- add r1, r1, r5
- bl FUN_020BC2A0
- movs r3, r0
- beq _020B78F0
- ldrh r1, [r8, #0x6]
- ldrh r0, [r8, r1]
- add r1, r8, r1
- add r1, r1, #0x4
- mla r1, r0, r7, r1
- ldrb r0, [r1, #0x3]
- ands r0, r0, #0x1
- bne _020B78F4
- mov r0, r9
- mov r2, r10
- bl FUN_020B7910
- b _020B78F4
-_020B78F0:
- mov r6, r4
-_020B78F4:
- ldrb r0, [r8, #0x1]
- add r7, r7, #0x1
- add r5, r5, #0x10
- cmp r7, r0
- blo _020B7898
-_020B7908:
- mov r0, r6
- ldmia sp!, {r4-r10,pc}
-
- arm_func_start FUN_020B7910
-FUN_020B7910:
- stmdb sp!, {r4-r6,lr}
- ldrh r5, [r1, #0x0]
- ldr r2, [r2, #0x2c]
- ldrh r4, [r3, #0x2]
- mov r2, r2, lsl #0x10
- add r12, r0, r5
- mov r5, r2, lsr #0x10
- ands r2, r4, #0x1
- ldrh r4, [r3, #0x0]
- moveq r3, r5, lsl #0xf
- moveq r5, r3, lsr #0x10
- moveq r2, r4, lsl #0xf
- moveq r4, r2, lsr #0x10
- ldrb r3, [r1, #0x2]
- mov r2, #0x0
- cmp r3, #0x0
- bls _020B7994
- add r3, r4, r5
- mov r3, r3, lsl #0x10
- add r6, r0, #0x4
- mov r4, r3, lsr #0x10
-_020B7964:
- ldrh r5, [r0, #0xa]
- ldrb r3, [r12, r2]
- add r2, r2, #0x1
- ldrh lr, [r6, r5]
- add r5, r6, r5
- mla r3, lr, r3, r5
- ldr r3, [r3, #0x4]
- add r3, r0, r3
- strh r4, [r3, #0x1c]
- ldrb r3, [r1, #0x2]
- cmp r2, r3
- blo _020B7964
-_020B7994:
- ldrb r0, [r1, #0x3]
- orr r0, r0, #0x1
- strb r0, [r1, #0x3]
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020B79A4
-FUN_020B79A4: ; 0x020B79A4
- stmdb sp!, {r4-r6,lr}
- ldr r2, [r0, #0x8]
- mov r4, #0x0
- ldrh r1, [r0, r2]
- add r6, r0, r2
- add r5, r6, r1
- ldrb r0, [r5, #0x1]
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020B79C8:
- ldrh r1, [r5, #0x6]
- ldrh r0, [r5, r1]
- add r1, r5, r1
- add r1, r1, #0x4
- mla r1, r0, r4, r1
- ldrb r0, [r1, #0x3]
- ands r0, r0, #0x1
- beq _020B79F0
- mov r0, r6
- bl FUN_020B7AB8
-_020B79F0:
- ldrb r0, [r5, #0x1]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020B79C8
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020B7A04
-FUN_020B7A04: ; 0x020B7A04
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- ldr r2, [r0, #0x8]
- mov r10, r1
- ldrh r1, [r0, r2]
- add r9, r0, r2
- mov r11, #0x1
- add r8, r9, r1
- ldrb r0, [r8, #0x1]
- mov r7, #0x0
- cmp r0, #0x0
- bls _020B7AAC
- mov r6, r7
- mov r4, r7
- add r5, r10, #0x3c
-_020B7A40:
- ldrh r1, [r8, #0x6]
- mov r0, r5
- add r2, r8, r1
- ldrh r1, [r2, #0x2]
- add r1, r2, r1
- add r1, r1, r6
- bl FUN_020BC2A0
- movs r3, r0
- beq _020B7A94
- ldrh r1, [r8, #0x6]
- ldrh r0, [r8, r1]
- add r1, r8, r1
- add r1, r1, #0x4
- mla r1, r0, r7, r1
- ldrb r0, [r1, #0x3]
- ands r0, r0, #0x1
- bne _020B7A98
- mov r0, r9
- mov r2, r10
- bl FUN_020B7B40
- b _020B7A98
-_020B7A94:
- mov r11, r4
-_020B7A98:
- ldrb r0, [r8, #0x1]
- add r7, r7, #0x1
- add r6, r6, #0x10
- cmp r7, r0
- blo _020B7A40
-_020B7AAC:
- mov r0, r11
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B7AB8
-FUN_020B7AB8: ; 0x020B7AB8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldrh r4, [r1, #0x0]
- ldrb r2, [r1, #0x2]
- mov r3, #0x0
- add r12, r0, r4
- cmp r2, #0x0
- bls _020B7B28
- add r2, r0, #0x4
- mov r5, #0x1000
- ldr lr, _020B7B3C ; =0xC00F0000
-_020B7AE4:
- ldrh r7, [r0, #0xa]
- ldrb r4, [r12, r3]
- add r3, r3, #0x1
- ldrh r6, [r2, r7]
- add r7, r2, r7
- mla r4, r6, r4, r7
- ldr r4, [r4, #0x4]
- add r6, r0, r4
- ldr r4, [r6, #0x14]
- and r4, r4, lr
- str r4, [r6, #0x14]
- str r5, [r6, #0x24]
- ldr r4, [r6, #0x24]
- str r4, [r6, #0x28]
- ldrb r4, [r1, #0x2]
- cmp r3, r4
- blo _020B7AE4
-_020B7B28:
- ldrb r0, [r1, #0x3]
- bic r0, r0, #0x1
- strb r0, [r1, #0x3]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B7B3C: .word 0xC00F0000
-
- arm_func_start FUN_020B7B40
-FUN_020B7B40:
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xc
- mov r11, r1
- mov r9, r3
- ldr r1, [r9, #0x0]
- mov r10, r0
- and r0, r1, #0x1c000000
- cmp r0, #0x14000000
- ldrh r3, [r11, #0x0]
- ldrne r1, [r2, #0x8]
- mov r8, #0x0
- add r0, r10, r3
- str r0, [sp, #0x4]
- ldrne r0, _020B7C50 ; =0x0000FFFF
- andne r0, r1, r0
- strne r0, [sp, #0x0]
- ldreq r1, [r2, #0x18]
- ldreq r0, _020B7C50 ; =0x0000FFFF
- andeq r0, r1, r0
- streq r0, [sp, #0x0]
- ldrb r0, [r11, #0x2]
- cmp r0, #0x0
- bls _020B7C3C
- mov r4, #0x1000
- add r5, r10, #0x4
-_020B7BA4:
- ldrh r6, [r10, #0xa]
- ldr r0, [sp, #0x4]
- ldr r1, [r9, #0x0]
- ldrb r2, [r0, r8]
- ldrh r3, [r5, r6]
- ldr r0, [sp, #0x0]
- add r6, r5, r6
- add r0, r1, r0
- mla r1, r3, r2, r6
- ldr r1, [r1, #0x4]
- add r6, r10, r1
- ldr r1, [r6, #0x14]
- orr r0, r1, r0
- str r0, [r6, #0x14]
- ldr r3, [r9, #0x4]
- ldr r0, _020B7C54 ; =0x000007FF
- ldrh r1, [r6, #0x20]
- and r2, r3, r0
- and r7, r0, r3, lsr #0xb
- cmp r2, r1
- moveq r0, r4
- beq _020B7C08
- mov r0, r2, lsl #0xc
- mov r1, r1, lsl #0xc
- bl FX_Div
-_020B7C08:
- str r0, [r6, #0x24]
- ldrh r1, [r6, #0x22]
- cmp r7, r1
- moveq r0, r4
- beq _020B7C28
- mov r0, r7, lsl #0xc
- mov r1, r1, lsl #0xc
- bl FX_Div
-_020B7C28:
- str r0, [r6, #0x28]
- ldrb r0, [r11, #0x2]
- add r8, r8, #0x1
- cmp r8, r0
- blo _020B7BA4
-_020B7C3C:
- ldrb r0, [r11, #0x3]
- orr r0, r0, #0x1
- strb r0, [r11, #0x3]
- add sp, sp, #0xc
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B7C50: .word 0x0000FFFF
-_020B7C54: .word 0x000007FF
-
- arm_func_start FUN_020B7C58
-FUN_020B7C58: ; 0x020B7C58
- ldrh r2, [r0, #0x32]
- mov r1, #0x0
- bic r2, r2, #0x1
- strh r2, [r0, #0x32]
- ldr r2, [r0, #0x2c]
- str r1, [r0, #0x2c]
- mov r0, r2
- bx lr
-
- arm_func_start FUN_020B7C78
-FUN_020B7C78: ; 0x020B7C78
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- movs r4, r1
- mov r5, r0
- beq _020B7C90
- bl GX_BeginLoadTexPltt
-_020B7C90:
- ldrh r2, [r5, #0x30]
- ldr r0, [r5, #0x38]
- ldr r3, [r5, #0x2c]
- ldr r1, _020B7CD8 ; =0x0000FFFF
- add r0, r5, r0
- and r1, r3, r1
- mov r1, r1, lsl #0x3
- mov r2, r2, lsl #0x3
- bl GX_LoadTexPltt
- ldrh r0, [r5, #0x32]
- cmp r4, #0x0
- addeq sp, sp, #0x4
- orr r0, r0, #0x1
- strh r0, [r5, #0x32]
- ldmeqia sp!, {r4-r5,pc}
- bl GX_EndLoadTexPltt
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B7CD8: .word 0x0000FFFF
-
- arm_func_start FUN_020B7CDC
-FUN_020B7CDC: ; 0x020B7CDC
- str r1, [r0, #0x2c]
- bx lr
-
- arm_func_start FUN_020B7CE4
-FUN_020B7CE4: ; 0x020B7CE4
- ldrh r0, [r0, #0x30]
- mov r0, r0, lsl #0x3
- bx lr
-
- arm_func_start FUN_020B7CF0
-FUN_020B7CF0: ; 0x020B7CF0
- ldrh r12, [r0, #0x10]
- mov r3, #0x0
- bic r12, r12, #0x1
- strh r12, [r0, #0x10]
- ldrh r12, [r0, #0x20]
- bic r12, r12, #0x1
- strh r12, [r0, #0x20]
- ldr r12, [r0, #0x8]
- str r12, [r1, #0x0]
- str r3, [r0, #0x8]
- ldr r1, [r0, #0x18]
- str r1, [r2, #0x0]
- str r3, [r0, #0x18]
- bx lr
-
- arm_func_start FUN_020B7D28
-FUN_020B7D28: ; 0x020B7D28
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- movs r8, r1
- mov r9, r0
- beq _020B7D40
- bl GX_BeginLoadTex
-_020B7D40:
- ldrh r0, [r9, #0xc]
- movs r2, r0, lsl #0x3
- beq _020B7D74
- ldr r1, [r9, #0x8]
- ldr r0, _020B7DF4 ; =0x0000FFFF
- ldr r3, [r9, #0x14]
- and r1, r1, r0
- add r0, r9, r3
- mov r1, r1, lsl #0x3
- bl GX_LoadTex
- ldrh r0, [r9, #0x10]
- orr r0, r0, #0x1
- strh r0, [r9, #0x10]
-_020B7D74:
- ldrh r0, [r9, #0x1c]
- movs r7, r0, lsl #0x3
- beq _020B7DDC
- ldr r1, [r9, #0x18]
- ldr r0, _020B7DF4 ; =0x0000FFFF
- ldr r3, [r9, #0x24]
- and r4, r1, r0
- mov r5, r4, lsl #0x3
- ldr r6, [r9, #0x28]
- mov r1, r5
- mov r2, r7
- add r0, r9, r3
- add r6, r9, r6
- bl GX_LoadTex
- ldr r0, _020B7DF8 ; =0x0001FFFF
- and r1, r5, #0x40000
- and r0, r0, r4, lsl #0x3
- mov r0, r0, lsr #0x1
- add r2, r0, #0x20000
- mov r0, r6
- add r1, r2, r1, lsr #0x2
- mov r2, r7, lsr #0x1
- bl GX_LoadTex
- ldrh r0, [r9, #0x20]
- orr r0, r0, #0x1
- strh r0, [r9, #0x20]
-_020B7DDC:
- cmp r8, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r9,pc}
- bl GX_EndLoadTex
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020B7DF4: .word 0x0000FFFF
-_020B7DF8: .word 0x0001FFFF
-
- arm_func_start FUN_020B7DFC
-FUN_020B7DFC: ; 0x020B7DFC
- cmp r1, #0x0
- strne r1, [r0, #0x8]
- cmp r2, #0x0
- strne r2, [r0, #0x18]
- bx lr
-
- arm_func_start FUN_020B7E10
-FUN_020B7E10: ; 0x020B7E10
- ldrh r0, [r0, #0x1c]
- mov r0, r0, lsl #0x3
- bx lr
-
- arm_func_start FUN_020B7E1C
-FUN_020B7E1C: ; 0x020B7E1C
- ldrh r0, [r0, #0xc]
- mov r0, r0, lsl #0x3
- bx lr
-
- arm_func_start FUN_020B7E28
-FUN_020B7E28: ; 0x020B7E28
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- add r0, r5, #0x8
- mov r4, r1
- bl FUN_020B7E88
- cmp r0, #0x0
- bne _020B7E74
- mov r1, r4
- add r0, r5, #0x10
- bl FUN_020B7E88
- cmp r0, #0x0
- bne _020B7E74
- mov r1, r4
- add r0, r5, #0x18
- bl FUN_020B7E88
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
-_020B7E74:
- ldr r0, [r5, #0x0]
- orr r0, r0, #0x10
- str r0, [r5, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020B7E88
-FUN_020B7E88:
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- moveq r0, #0x0
- bxeq lr
- cmp r2, r1
- bne _020B7EB8
- ldr r3, [r2, #0x10]
- mov r2, #0x0
- str r3, [r0, #0x0]
- str r2, [r1, #0x10]
- mov r0, #0x1
- bx lr
-_020B7EB8:
- ldr r3, [r2, #0x10]
- cmp r3, #0x0
- beq _020B7EF4
-_020B7EC4:
- cmp r3, r1
- bne _020B7EE4
- ldr r1, [r3, #0x10]
- mov r0, #0x0
- str r1, [r2, #0x10]
- str r0, [r3, #0x10]
- mov r0, #0x1
- bx lr
-_020B7EE4:
- mov r2, r3
- ldr r3, [r3, #0x10]
- cmp r3, #0x0
- bne _020B7EC4
-_020B7EF4:
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020B7EFC
-FUN_020B7EFC: ; 0x020B7EFC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- ldr r2, [r4, #0x8]
- mov r5, r0
- ldrb r0, [r2, #0x0]
- cmp r0, #0x4a
- beq _020B7F50
- cmp r0, #0x4d
- beq _020B7F34
- cmp r0, #0x56
- beq _020B7F6C
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020B7F34:
- add r0, r5, #0x3c
- bl FUN_020B7F88
- mov r1, r4
- add r0, r5, #0x8
- bl FUN_020B7FF8
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020B7F50:
- add r0, r5, #0x44
- bl FUN_020B7F88
- mov r1, r4
- add r0, r5, #0x10
- bl FUN_020B7FF8
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020B7F6C:
- add r0, r5, #0x4c
- bl FUN_020B7F88
- mov r1, r4
- add r0, r5, #0x18
- bl FUN_020B7FF8
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020B7F88
-FUN_020B7F88: ; 0x020B7F88
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- mov r3, #0x1
- mov r4, #0x0
-_020B7FA4:
- ldrb r2, [r1, #0x19]
- mov r5, r4
- cmp r2, #0x0
- ble _020B7FE4
-_020B7FB4:
- add r2, r1, r5, lsl #0x1
- ldrh r2, [r2, #0x1a]
- ands r2, r2, #0x100
- movne lr, r5, asr #0x5
- andne r2, r5, #0x1f
- ldrne r12, [r0, lr, lsl #0x2]
- add r5, r5, #0x1
- orrne r2, r12, r3, lsl r2
- strne r2, [r0, lr, lsl #0x2]
- ldrb r2, [r1, #0x19]
- cmp r5, r2
- blt _020B7FB4
-_020B7FE4:
- ldr r1, [r1, #0x10]
- cmp r1, #0x0
- bne _020B7FA4
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020B7FF8
-FUN_020B7FF8: ; 0x020B7FF8
- ldr r12, [r0, #0x0]
- cmp r12, #0x0
- streq r1, [r0, #0x0]
- bxeq lr
- ldr r3, [r12, #0x10]
- cmp r3, #0x0
- bne _020B8058
- ldrb r3, [r12, #0x18]
- ldrb r2, [r1, #0x18]
- cmp r3, r2
- bls _020B8050
- ldr r2, [r1, #0x10]
- mov r3, r1
- cmp r2, #0x0
- beq _020B8044
-_020B8034:
- ldr r3, [r3, #0x10]
- ldr r2, [r3, #0x10]
- cmp r2, #0x0
- bne _020B8034
-_020B8044:
- str r12, [r3, #0x10]
- str r1, [r0, #0x0]
- bx lr
-_020B8050:
- str r1, [r12, #0x10]
- bx lr
-_020B8058:
- cmp r3, #0x0
- beq _020B80AC
- ldrb r2, [r1, #0x18]
-_020B8064:
- ldrb r0, [r3, #0x18]
- cmp r0, r2
- blo _020B809C
- ldr r0, [r1, #0x10]
- mov r2, r1
- cmp r0, #0x0
- beq _020B8090
-_020B8080:
- ldr r2, [r2, #0x10]
- ldr r0, [r2, #0x10]
- cmp r0, #0x0
- bne _020B8080
-_020B8090:
- str r1, [r12, #0x10]
- str r3, [r2, #0x10]
- bx lr
-_020B809C:
- mov r12, r3
- ldr r3, [r3, #0x10]
- cmp r3, #0x0
- bne _020B8064
-_020B80AC:
- str r1, [r12, #0x10]
- bx lr
-
- arm_func_start FUN_020B80B4
-FUN_020B80B4: ; 0x020B80B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- mov r1, r5
- mov r0, #0x0
- mov r2, #0x54
- bl MIi_CpuClear32
- ldr r0, _020B8104 ; =UNK_021065B4
- ldr r1, _020B8108 ; =UNK_021065B0
- ldr r2, [r0, #0x0]
- ldr r0, _020B810C ; =UNK_021065AC
- str r2, [r5, #0xc]
- ldr r1, [r1, #0x0]
- str r1, [r5, #0x14]
- ldr r0, [r0, #0x0]
- str r0, [r5, #0x1c]
- str r4, [r5, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020B8104: .word UNK_021065B4
-_020B8108: .word UNK_021065B0
-_020B810C: .word UNK_021065AC
-
- arm_func_start FUN_020B8110
-FUN_020B8110: ; 0x020B8110
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r12, #0x0
- str r12, [r0, #0x0]
- str r1, [r0, #0x8]
- str r12, [r0, #0x10]
- mov r4, #0x7f
- strb r4, [r0, #0x18]
- mov r4, #0x1000
- str r4, [r0, #0x4]
- ldr lr, _020B81A4 ; =UNK_02106594
- str r3, [r0, #0x14]
- ldr r6, [lr, #0x0]
- cmp r6, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r7,pc}
- ldrb r7, [r1, #0x0]
- ldr r4, _020B81A8 ; =UNK_021065B8
-_020B8158:
- ldrb r3, [r4, r12, lsl #0x3]
- mov r5, r12, lsl #0x3
- cmp r7, r3
- bne _020B8190
- add r3, r4, r5
- ldrh lr, [r1, #0x2]
- ldrh r3, [r3, #0x2]
- cmp lr, r3
- bne _020B8190
- ldr r3, _020B81AC ; =UNK_021065BC
- ldr r3, [r3, r5]
- blx r3
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-_020B8190:
- add r12, r12, #0x1
- cmp r12, r6
- blo _020B8158
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B81A4: .word UNK_02106594
-_020B81A8: .word UNK_021065B8
-_020B81AC: .word UNK_021065BC
-
- arm_func_start FUN_020B81B0
-FUN_020B81B0: ; 0x020B81B0
- ldrb r0, [r0, #0x0]
- cmp r0, #0x4a
- beq _020B81E4
- cmp r0, #0x4d
- beq _020B81D0
- cmp r0, #0x56
- beq _020B81E4
- b _020B81F8
-_020B81D0:
- ldrb r0, [r1, #0x18]
- mov r0, r0, lsl #0x1
- add r0, r0, #0x1c
- bic r0, r0, #0x3
- bx lr
-_020B81E4:
- ldrb r0, [r1, #0x17]
- mov r0, r0, lsl #0x1
- add r0, r0, #0x1c
- bic r0, r0, #0x3
- bx lr
-_020B81F8:
- mov r0, #0x0
- bx lr
-
- arm_func_start FUN_020B8200
-FUN_020B8200: ; 0x020B8200
- cmp r0, #0x0
- ldrne ip, _020B8260 ; =UNK_021CED18
- ldrne r12, [r12, #0xa0]
- andne r12, r12, #0xff
- strne r12, [r0, #0x0]
- cmp r1, #0x0
- ldrne r0, _020B8260 ; =UNK_021CED18
- ldrne r0, [r0, #0xa0]
- movne r0, r0, lsr #0x8
- andne r0, r0, #0xff
- strne r0, [r1, #0x0]
- cmp r2, #0x0
- ldrne r0, _020B8260 ; =UNK_021CED18
- ldrne r0, [r0, #0xa0]
- movne r0, r0, lsr #0x10
- andne r0, r0, #0xff
- strne r0, [r2, #0x0]
- cmp r3, #0x0
- ldrne r0, _020B8260 ; =UNK_021CED18
- ldrne r0, [r0, #0xa0]
- movne r0, r0, lsr #0x18
- andne r0, r0, #0xff
- strne r0, [r3, #0x0]
- bx lr
- .balign 4
-_020B8260: .word UNK_021CED18
-
- arm_func_start FUN_020B8264
-FUN_020B8264: ; 0x020B8264
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020B829C ; =UNK_021CED18
- ldr r0, [r0, #0xfc]
- ands r0, r0, #0x80
- bne _020B8290
- bl FUN_020B82E4
- ldr r0, _020B829C ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- orr r1, r1, #0x80
- str r1, [r0, #0xfc]
-_020B8290:
- ldr r0, _020B82A0 ; =UNK_021CEE78
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B829C: .word UNK_021CED18
-_020B82A0: .word UNK_021CEE78
-
- arm_func_start FUN_020B82A4
-FUN_020B82A4: ; 0x020B82A4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020B82DC ; =UNK_021CED18
- ldr r0, [r0, #0xfc]
- ands r0, r0, #0x80
- bne _020B82D0
- bl FUN_020B82E4
- ldr r0, _020B82DC ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- orr r1, r1, #0x80
- str r1, [r0, #0xfc]
-_020B82D0:
- ldr r0, _020B82E0 ; =UNK_021CEE48
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B82DC: .word UNK_021CED18
-_020B82E0: .word UNK_021CEE48
-
- arm_func_start FUN_020B82E4
-FUN_020B82E4: ; 0x020B82E4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020B8330 ; =UNK_021CEDD4
- ldr r1, _020B8334 ; =UNK_021CED64
- ldr r2, _020B8338 ; =UNK_021CEE48
- bl MTX_Concat43
- ldr r3, _020B833C ; =UNK_021CED18
- ldr r0, _020B8338 ; =UNK_021CEE48
- ldr r2, [r3, #0xf4]
- mov r1, r0
- str r2, [sp, #0x0]
- ldr r2, [r3, #0xec]
- ldr r3, [r3, #0xf0]
- bl MTX_ScaleApply43
- ldr r0, _020B8338 ; =UNK_021CEE48
- ldr r1, _020B8340 ; =UNK_021CEE78
- bl MTX_Inverse43
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B8330: .word UNK_021CEDD4
-_020B8334: .word UNK_021CED64
-_020B8338: .word UNK_021CEE48
-_020B833C: .word UNK_021CED18
-_020B8340: .word UNK_021CEE78
-
- arm_func_start FUN_020B8344
-FUN_020B8344: ; 0x020B8344
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020B8384 ; =UNK_021CED18
- ldr r0, [r0, #0xfc]
- ands r0, r0, #0x8
- bne _020B8378
- ldr r0, _020B8388 ; =UNK_021CED64
- ldr r1, _020B838C ; =UNK_021CEE18
- bl MTX_Inverse43
- ldr r0, _020B8384 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- orr r1, r1, #0x8
- str r1, [r0, #0xfc]
-_020B8378:
- ldr r0, _020B838C ; =UNK_021CEE18
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B8384: .word UNK_021CED18
-_020B8388: .word UNK_021CED64
-_020B838C: .word UNK_021CEE18
-
- arm_func_start FUN_020B8390
-FUN_020B8390: ; 0x020B8390
- orr r0, r0, r1, lsl #0x4
-
- arm_func_start FUN_020B8394
-FUN_020B8394: ; 0x020B8394
- ldr r1, [sp, #0x4]
- orr r0, r0, r2, lsl #0x6
- orr r0, r1, r0
- ldr r2, [sp, #0x0]
- orr r1, r0, r3, lsl #0x18
- ldr r0, _020B83B8 ; =UNK_021CED18
- orr r1, r1, r2, lsl #0x10
- str r1, [r0, #0x9c]
- bx lr
- .balign 4
-_020B83B8: .word UNK_021CED18
-
- arm_func_start FUN_020B83BC
-FUN_020B83BC: ; 0x020B83BC
- cmp r2, #0x0
- movne r2, #0x1
- orr r1, r0, r1, lsl #0x10
- moveq r2, #0x0
- ldr r0, _020B83DC ; =UNK_021CED18
- orr r1, r1, r2, lsl #0xf
- str r1, [r0, #0x98]
- bx lr
- .balign 4
-_020B83DC: .word UNK_021CED18
-
- arm_func_start FUN_020B83E0
-FUN_020B83E0: ; 0x020B83E0
- cmp r2, #0x0
- movne r2, #0x1
- orr r1, r0, r1, lsl #0x10
- moveq r2, #0x0
- ldr r0, _020B8400 ; =UNK_021CED18
- orr r1, r1, r2, lsl #0xf
- str r1, [r0, #0x94]
- bx lr
- .balign 4
-_020B8400: .word UNK_021CED18
-
- arm_func_start FUN_020B8404
-FUN_020B8404: ; 0x020B8404
- ldr r2, _020B8414 ; =UNK_021CEDC0
- orr r1, r1, r0, lsl #0x1e
- str r1, [r2, r0, lsl #0x2]
- bx lr
- .balign 4
-_020B8414: .word UNK_021CEDC0
-
- arm_func_start FUN_020B8418
-FUN_020B8418: ; 0x020B8418
- stmdb sp!, {r4,lr}
- ldr ip, _020B8444 ; =0x000003FF
- ldr lr, _020B8448 ; =UNK_021CED98
- and r4, r12, r1, asr #0x3
- and r1, r12, r2, asr #0x3
- and r2, r12, r3, asr #0x3
- orr r1, r4, r1, lsl #0xa
- orr r1, r1, r2, lsl #0x14
- orr r1, r1, r0, lsl #0x1e
- str r1, [lr, r0, lsl #0x2]
- ldmia sp!, {r4,pc}
- .balign 4
-_020B8444: .word 0x000003FF
-_020B8448: .word UNK_021CED98
-
- arm_func_start FUN_020B844C
-FUN_020B844C: ; 0x020B844C
- ldr r3, _020B846C ; =UNK_021CEE04
- ldmia r0, {r0-r2}
- stmia r3, {r0-r2}
- ldr r0, _020B8470 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- bic r1, r1, #0xa4
- str r1, [r0, #0xfc]
- bx lr
- .balign 4
-_020B846C: .word UNK_021CEE04
-_020B8470: .word UNK_021CED18
-
- arm_func_start FUN_020B8474
-FUN_020B8474: ; 0x020B8474
- ldr r3, _020B8494 ; =UNK_021CEDF8
- ldmia r0, {r0-r2}
- stmia r3, {r0-r2}
- ldr r0, _020B8498 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- bic r1, r1, #0xa4
- str r1, [r0, #0xfc]
- bx lr
- .balign 4
-_020B8494: .word UNK_021CEDF8
-_020B8498: .word UNK_021CED18
-
- arm_func_start FUN_020B849C
-FUN_020B849C: ; 0x020B849C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r1, _020B84D4 ; =UNK_021CED18
- mov r2, #0x3e
- ldr r0, [r1], #0x4
- bl FUN_020BB1C0
- ldr r0, _020B84D4 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- bic r1, r1, #0x1
- str r1, [r0, #0xfc]
- bic r1, r1, #0x2
- str r1, [r0, #0xfc]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020B84D4: .word UNK_021CED18
-
- arm_func_start FUN_020B84D8
-FUN_020B84D8: ; 0x020B84D8
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r8, _020B85F4 ; =0x17101610
- ldr r1, _020B85F8 ; =UNK_021CED18
- ldr r5, _020B85FC ; =0x32323232
- ldr r4, _020B8600 ; =0x60293130
- ldr r3, _020B8604 ; =0x33333333
- ldr r2, _020B8608 ; =0x002A1B19
- mov r7, #0x0
- mov r6, #0x2
- ldr r0, _020B860C ; =UNK_021CED64
- str r8, [r1, #0x0]
- str r7, [r1, #0x4]
- str r6, [r1, #0x48]
- str r5, [r1, #0x7c]
- str r4, [r1, #0x90]
- str r3, [r1, #0xa4]
- str r2, [r1, #0xb8]
- bl MTX_Identity43_
- ldr r0, _020B8610 ; =UNK_021CED20
- bl MTX_Identity44_
- mov r2, r7
- ldr r1, _020B85F8 ; =UNK_021CED18
- ldr r7, _020B8614 ; =0x4210C210
- ldr r0, _020B8618 ; =0x40000200
- ldr lr, _020B861C ; =0x2D8B62D8
- ldr sb, _020B8620 ; =0x800001FF
- ldr r8, _020B8624 ; =0xC0080000
- ldr r6, _020B8628 ; =0x001F008F
- ldr r5, _020B862C ; =0xBFFF0000
- ldr r4, _020B8630 ; =0x00007FFF
- ldr ip, _020B8634 ; =0x800003E0
- ldr r3, _020B8638 ; =0xC0007C00
- str r0, [r1, #0x84]
- str lr, [r1, #0x80]
- mov lr, #0x4000001f
- ldr r0, _020B863C ; =UNK_021CEDD4
- str r9, [r1, #0x88]
- str r8, [r1, #0x8c]
- str r7, [r1, #0x94]
- str r7, [r1, #0x98]
- str r6, [r1, #0x9c]
- str r5, [r1, #0xa0]
- str r4, [r1, #0xa8]
- str lr, [r1, #0xac]
- str r12, [r1, #0xb0]
- str r3, [r1, #0xb4]
- str r2, [r1, #0xe0]
- str r2, [r1, #0xe4]
- str r2, [r1, #0xe8]
- bl MTX_Identity33_
- mov r3, #0x1000
- ldr r0, _020B85F8 ; =UNK_021CED18
- mov r2, #0x0
- rsb r1, r3, #0x0
- str r3, [r0, #0xec]
- str r3, [r0, #0xf0]
- str r3, [r0, #0xf4]
- str r2, [r0, #0xf8]
- str r2, [r0, #0xfc]
- str r2, [r0, #0x248]
- str r2, [r0, #0x244]
- str r2, [r0, #0x240]
- str r2, [r0, #0x254]
- str r2, [r0, #0x24c]
- str r3, [r0, #0x250]
- str r2, [r0, #0x25c]
- str r2, [r0, #0x258]
- str r1, [r0, #0x260]
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020B85F4: .word 0x17101610
-_020B85F8: .word UNK_021CED18
-_020B85FC: .word 0x32323232
-_020B8600: .word 0x60293130
-_020B8604: .word 0x33333333
-_020B8608: .word 0x002A1B19
-_020B860C: .word UNK_021CED64
-_020B8610: .word UNK_021CED20
-_020B8614: .word 0x4210C210
-_020B8618: .word 0x40000200
-_020B861C: .word 0x2D8B62D8
-_020B8620: .word 0x800001FF
-_020B8624: .word 0xC0080000
-_020B8628: .word 0x001F008F
-_020B862C: .word 0xBFFF0000
-_020B8630: .word 0x00007FFF
-_020B8634: .word 0x800003E0
-_020B8638: .word 0xC0007C00
-_020B863C: .word UNK_021CEDD4
-
- arm_func_start FUN_020B8640
-FUN_020B8640: ; 0x020B8640
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x8
- mov r7, r0
- mov r0, #0x0
- mov r6, r1
- str r0, [r7, #0x0]
- add r4, sp, #0x0
- mov r5, r2, lsl #0x1
- mov r8, #0x1
-_020B8664:
- add r1, r5, r6
- ldrh r2, [r1, #0x1a]
- ands r1, r2, #0x100
- beq _020B869C
- ldr r3, [r6, #0xc]
- mov r0, r4
- mov r1, r6
- and r2, r2, #0xff
- blx r3
- ldr r2, [r7, #0x0]
- ldr r1, [sp, #0x0]
- mov r0, r8
- orr r1, r2, r1
- str r1, [r7, #0x0]
-_020B869C:
- ldr r6, [r6, #0x10]
- cmp r6, #0x0
- bne _020B8664
- add sp, sp, #0x8
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020B86B0
-FUN_020B86B0: ; 0x020B86B0
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x5c
- mov r9, r1
- ldr r3, [r9, #0x10]
- mov r10, r0
- mov r8, r2
- cmp r3, #0x0
- bne _020B8704
- add r2, r9, r8, lsl #0x1
- ldrh r4, [r2, #0x1a]
- and r2, r4, #0x300
- cmp r2, #0x100
- addne sp, sp, #0x5c
- movne r0, #0x0
- ldmneia sp!, {r4-r11,pc}
- ldr r3, [r9, #0xc]
- and r2, r4, #0xff
- blx r3
- add sp, sp, #0x5c
- mov r0, #0x1
- ldmia sp!, {r4-r11,pc}
-_020B8704:
- mov r7, #0x0
- mov r3, r7
- mov r4, r9
- mov r2, r8, lsl #0x1
-_020B8714:
- add r0, r2, r4
- ldrh r0, [r0, #0x1a]
- and r0, r0, #0x300
- cmp r0, #0x100
- ldreq r0, [r4, #0x4]
- moveq r1, r4
- ldr r4, [r4, #0x10]
- addeq r7, r7, r0
- addeq r3, r3, #0x1
- cmp r4, #0x0
- bne _020B8714
- cmp r7, #0x0
- addeq sp, sp, #0x5c
- moveq r0, #0x0
- ldmeqia sp!, {r4-r11,pc}
- cmp r3, #0x1
- bne _020B877C
- add r0, r1, r8, lsl #0x1
- ldrh r2, [r0, #0x1a]
- ldr r3, [r1, #0xc]
- mov r0, r10
- and r2, r2, #0xff
- blx r3
- add sp, sp, #0x5c
- mov r0, #0x1
- ldmia sp!, {r4-r11,pc}
-_020B877C:
- mov r1, r10
- mov r0, #0x0
- mov r2, #0x58
- bl MIi_CpuClearFast
- mvn r0, #0x0
- str r0, [r10, #0x0]
- add r5, sp, #0x0
- add r4, sp, #0x4
- add r11, sp, #0x10
-_020B87A0:
- add r0, r9, r8, lsl #0x1
- ldrh r2, [r0, #0x1a]
- and r0, r2, #0x300
- cmp r0, #0x100
- bne _020B8948
- ldr r0, [r9, #0x4]
- cmp r0, #0x0
- ble _020B8948
- ldr r3, [r9, #0xc]
- mov r0, r5
- mov r1, r9
- and r2, r2, #0xff
- blx r3
- cmp r7, #0x1000
- ldreq r6, [r9, #0x4]
- beq _020B87F0
- ldr r0, [r9, #0x4]
- mov r1, r7
- bl FX_Div
- mov r6, r0
-_020B87F0:
- ldr r3, [sp, #0x0]
- mov r1, r4
- mov r2, r6
- add r0, r10, #0x4
- and r3, r3, #0x1
- bl FUN_020B8998
- ldr r1, [sp, #0x0]
- add r0, r10, #0x10
- and r3, r1, #0x8
- mov r1, r11
- mov r2, r6
- bl FUN_020B8998
- ldr r3, [sp, #0x0]
- add r0, r10, #0x1c
- add r1, sp, #0x1c
- mov r2, r6
- and r3, r3, #0x10
- bl FUN_020B8998
- ldr r0, [sp, #0x0]
- ands r0, r0, #0x4
- bne _020B8898
- ldr r0, [sp, #0x4c]
- ldr r2, [r10, #0x4c]
- smull r1, r0, r6, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- add r0, r2, r1
- str r0, [r10, #0x4c]
- ldr r0, [sp, #0x50]
- ldr r2, [r10, #0x50]
- smull r1, r0, r6, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- add r0, r2, r1
- str r0, [r10, #0x50]
- ldr r0, [sp, #0x54]
- ldr r2, [r10, #0x54]
- smull r1, r0, r6, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- add r0, r2, r1
- str r0, [r10, #0x54]
-_020B8898:
- ldr r0, [sp, #0x0]
- ands r0, r0, #0x2
- bne _020B8920
- ldr r0, [sp, #0x28]
- ldr r1, [r10, #0x28]
- mul r0, r6, r0
- add r0, r1, r0, asr #0xc
- str r0, [r10, #0x28]
- ldr r0, [sp, #0x2c]
- ldr r1, [r10, #0x2c]
- mul r0, r6, r0
- add r0, r1, r0, asr #0xc
- str r0, [r10, #0x2c]
- ldr r0, [sp, #0x30]
- ldr r1, [r10, #0x30]
- mul r0, r6, r0
- add r0, r1, r0, asr #0xc
- str r0, [r10, #0x30]
- ldr r0, [sp, #0x34]
- ldr r1, [r10, #0x34]
- mul r0, r6, r0
- add r0, r1, r0, asr #0xc
- str r0, [r10, #0x34]
- ldr r0, [sp, #0x38]
- ldr r1, [r10, #0x38]
- mul r0, r6, r0
- add r0, r1, r0, asr #0xc
- str r0, [r10, #0x38]
- ldr r0, [sp, #0x3c]
- ldr r1, [r10, #0x3c]
- mul r0, r6, r0
- add r0, r1, r0, asr #0xc
- str r0, [r10, #0x3c]
- b _020B8938
-_020B8920:
- ldr r0, [r10, #0x28]
- add r0, r0, r6
- str r0, [r10, #0x28]
- ldr r0, [r10, #0x38]
- add r0, r0, r6
- str r0, [r10, #0x38]
-_020B8938:
- ldr r1, [r10, #0x0]
- ldr r0, [sp, #0x0]
- and r0, r1, r0
- str r0, [r10, #0x0]
-_020B8948:
- ldr r9, [r9, #0x10]
- cmp r9, #0x0
- bne _020B87A0
- add r0, r10, #0x28
- add r1, r10, #0x34
- add r2, r10, #0x40
- bl VEC_CrossProduct
- add r0, r10, #0x28
- mov r1, r0
- bl VEC_Normalize
- add r0, r10, #0x40
- mov r1, r0
- bl VEC_Normalize
- add r0, r10, #0x40
- add r1, r10, #0x28
- add r2, r10, #0x34
- bl VEC_CrossProduct
- mov r0, #0x1
- add sp, sp, #0x5c
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020B8998
-FUN_020B8998:
- cmp r3, #0x0
- beq _020B89C8
- ldr r1, [r0, #0x0]
- add r1, r1, r2
- str r1, [r0, #0x0]
- ldr r1, [r0, #0x4]
- add r1, r1, r2
- str r1, [r0, #0x4]
- ldr r1, [r0, #0x8]
- add r1, r1, r2
- str r1, [r0, #0x8]
- bx lr
-_020B89C8:
- ldr r3, [r1, #0x0]
- ldr r12, [r0, #0x0]
- mul r3, r2, r3
- add r3, r12, r3, asr #0xc
- str r3, [r0, #0x0]
- ldr r3, [r1, #0x4]
- ldr r12, [r0, #0x4]
- mul r3, r2, r3
- add r3, r12, r3, asr #0xc
- str r3, [r0, #0x4]
- ldr r1, [r1, #0x8]
- ldr r3, [r0, #0x8]
- mul r1, r2, r1
- add r1, r3, r1, asr #0xc
- str r1, [r0, #0x8]
- bx lr
-
- arm_func_start FUN_020B8A08
-FUN_020B8A08: ; 0x020B8A08
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r0
- mov r5, r1
- mov r0, #0x0
- mov r4, r2, lsl #0x1
- mov r7, #0x1
-_020B8A24:
- add r1, r4, r5
- ldrh r2, [r1, #0x1a]
- ands r1, r2, #0x100
- beq _020B8A4C
- ldr r3, [r5, #0xc]
- mov r0, r6
- mov r1, r5
- and r2, r2, #0xff
- blx r3
- mov r0, r7
-_020B8A4C:
- ldr r5, [r5, #0x10]
- cmp r5, #0x0
- bne _020B8A24
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020B8A60
-FUN_020B8A60: ; 0x020B8A60
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x80
- mov r5, r0
- ldr r1, [r5, #0x8]
- ands r0, r1, #0x200
- bne _020B8DB4
- ands r0, r1, #0x1
- beq _020B8DB4
- add r0, sp, #0x10
- mov r1, #0x0
- bl FUN_020BB824
- mov r0, #0x1e
- str r0, [sp, #0x0]
- add r1, sp, #0x0
- mov r0, #0x13
- mov r2, #0x1
- bl FUN_020BB1C0
- ldr r2, [r5, #0xb0]
- ldr r0, [r2, #0x10]
- and r1, r0, #0xc0000000
- cmp r1, #0xc0000000
- beq _020B8AF0
- bic r0, r0, #0xc0000000
- str r0, [r2, #0x10]
- ldr r2, [r5, #0xb0]
- ldr r3, _020B8DC8 ; =UNK_02106630
- ldr r0, [r2, #0x10]
- ldr r1, _020B8DCC ; =UNK_02106634
- orr r0, r0, #0xc0000000
- str r0, [r2, #0x10]
- ldr r2, [r5, #0xb0]
- ldr r0, [r3, #0x0]
- ldr r4, [r2, #0x10]
- mov r2, #0x1
- str r4, [r3, #0x4]
- bl FUN_020BB1C0
-_020B8AF0:
- ldr r0, [r5, #0x40]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x99]
- moveq r4, #0x0
- cmp r4, #0x1
- bne _020B8B3C
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x40]
- blx r1
- ldr r0, [r5, #0x40]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x99]
- ldr r0, [r5, #0x8]
- moveq r4, #0x0
- and r0, r0, #0x40
- b _020B8B40
-_020B8B3C:
- mov r0, #0x0
-_020B8B40:
- cmp r0, #0x0
- bne _020B8B84
- ldr r0, [r5, #0xb0]
- ldr r1, _020B8DD0 ; =UNK_02106660
- ldrh r6, [r0, #0x2e]
- ldrh r3, [r0, #0x2c]
- mov r0, #0x16
- rsb r2, r6, #0x0
- mov lr, r3, lsl #0xf
- mov r12, r2, lsl #0xf
- mov r3, r6, lsl #0xf
- mov r2, #0x10
- str lr, [r1, #0x0]
- str r12, [r1, #0x14]
- str lr, [r1, #0x30]
- str r3, [r1, #0x34]
- bl FUN_020BB1C0
-_020B8B84:
- cmp r4, #0x2
- bne _020B8BC0
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x40]
- blx r1
- ldr r0, [r5, #0x40]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x99]
- ldr r0, [r5, #0x8]
- moveq r4, #0x0
- and r0, r0, #0x40
- b _020B8BC4
-_020B8BC0:
- mov r0, #0x0
-_020B8BC4:
- cmp r0, #0x0
- bne _020B8C28
- ldr r12, [r5, #0xd8]
- ldr r0, [r5, #0x0]
- ldrh r2, [r12, #0xa]
- add r3, r12, #0x4
- ldrb r0, [r0, #0x1]
- ldrh r1, [r3, r2]
- add r2, r3, r2
- mla r0, r1, r0, r2
- ldr r0, [r0, #0x4]
- add r1, r12, r0
- ldrh r2, [r1, #0x1e]
- ands r0, r2, #0x2000
- beq _020B8C28
- add r1, r1, #0x2c
- ands r0, r2, #0x2
- addeq r1, r1, #0x8
- ands r0, r2, #0x4
- addeq r1, r1, #0x4
- ands r0, r2, #0x8
- addeq r1, r1, #0x8
- mov r0, #0x18
- mov r2, #0x10
- bl FUN_020BB1C0
-_020B8C28:
- cmp r4, #0x3
- movne r0, #0x0
- bne _020B8C54
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x40]
- blx r1
- ldr r0, [r5, #0x8]
- and r0, r0, #0x40
-_020B8C54:
- cmp r0, #0x0
- bne _020B8D84
- ldr r0, _020B8DD4 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- ands r0, r1, #0x1
- beq _020B8CA0
- ldr r1, _020B8DD8 ; =UNK_021CEDF8
- mov r0, #0x1c
- mov r2, #0x3
- bl FUN_020BB1C0
- ldr r1, _020B8DDC ; =UNK_021CEDD4
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- add r1, sp, #0x10
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
- b _020B8CE0
-_020B8CA0:
- ands r0, r1, #0x2
- beq _020B8CBC
- add r1, sp, #0x10
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
- b _020B8CE0
-_020B8CBC:
- bl FUN_020B8344
- mov r1, r0
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
- add r1, sp, #0x10
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
-_020B8CE0:
- bl FUN_020BB394
- ldr r0, _020B8DE0 ; =0x04000440
- mov r2, #0x0
- ldr r1, _020B8DE4 ; =0x04000444
- str r2, [r0, #0x0]
- ldr r0, _020B8DE8 ; =0x04000454
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
- add r4, sp, #0x40
-_020B8D04:
- mov r0, r4
- bl G3X_GetClipMtx
- cmp r0, #0x0
- bne _020B8D04
- ldr r1, _020B8DEC ; =0x04000448
- mov r2, #0x1
- str r2, [r1, #0x0]
- ldr r0, _020B8DE0 ; =0x04000440
- mov r2, #0x3
- str r2, [r0, #0x0]
- add r1, sp, #0x40
- mov r0, #0x16
- mov r2, #0x10
- bl FUN_020BB1C0
- ldr r1, [sp, #0x70]
- ldr r0, [sp, #0x74]
- mov r2, r1, asr #0x4
- mov r1, r0, asr #0x4
- mov r0, r2, lsl #0x8
- mov r1, r1, lsl #0x8
- mov r0, r0, asr #0x10
- mov r1, r1, asr #0x10
- mov r0, r0, lsl #0x10
- mov r1, r1, lsl #0x10
- mov r2, r0, lsr #0x10
- mov r0, r1, lsr #0x10
- orr r3, r2, r0, lsl #0x10
- add r1, sp, #0x4
- mov r0, #0x22
- mov r2, #0x1
- str r3, [sp, #0x4]
- bl FUN_020BB1C0
-_020B8D84:
- mov r3, #0x2
- add r1, sp, #0x8
- mov r0, #0x10
- mov r2, #0x1
- str r3, [sp, #0x8]
- bl FUN_020BB1C0
- mov r3, #0x1e
- add r1, sp, #0xc
- mov r0, #0x14
- mov r2, #0x1
- str r3, [sp, #0xc]
- bl FUN_020BB1C0
-_020B8DB4:
- ldr r0, [r5, #0x0]
- add r0, r0, #0x3
- str r0, [r5, #0x0]
- add sp, sp, #0x80
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020B8DC8: .word UNK_02106630
-_020B8DCC: .word UNK_02106634
-_020B8DD0: .word UNK_02106660
-_020B8DD4: .word UNK_021CED18
-_020B8DD8: .word UNK_021CEDF8
-_020B8DDC: .word UNK_021CEDD4
-_020B8DE0: .word 0x04000440
-_020B8DE4: .word 0x04000444
-_020B8DE8: .word 0x04000454
-_020B8DEC: .word 0x04000448
-
- arm_func_start FUN_020B8DF0
-FUN_020B8DF0: ; 0x020B8DF0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x44
- mov r7, r0
- ldr r1, [r7, #0x8]
- ands r0, r1, #0x200
- bne _020B90E8
- ands r0, r1, #0x1
- beq _020B90E8
- ldr r2, [r7, #0xb0]
- ldr r0, [r2, #0x10]
- and r1, r0, #0xc0000000
- cmp r1, #0x80000000
- beq _020B8E5C
- bic r0, r0, #0xc0000000
- str r0, [r2, #0x10]
- ldr r2, [r7, #0xb0]
- ldr r3, _020B90FC ; =UNK_02106638
- ldr r0, [r2, #0x10]
- ldr r1, _020B9100 ; =UNK_0210663C
- orr r0, r0, #0x80000000
- str r0, [r2, #0x10]
- ldr r2, [r7, #0xb0]
- ldr r0, [r3, #0x0]
- ldr r4, [r2, #0x10]
- mov r2, #0x1
- str r4, [r3, #0x4]
- bl FUN_020BB1C0
-_020B8E5C:
- mov r0, #0x3
- str r0, [sp, #0x0]
- add r1, sp, #0x0
- mov r0, #0x10
- mov r2, #0x1
- bl FUN_020BB1C0
- ldr r0, [r7, #0x3c]
- cmp r0, #0x0
- ldrneb r6, [r7, #0x98]
- moveq r6, #0x0
- cmp r6, #0x1
- bne _020B8EC0
- ldr r1, [r7, #0x8]
- mov r0, r7
- bic r1, r1, #0x40
- str r1, [r7, #0x8]
- ldr r1, [r7, #0x3c]
- blx r1
- ldr r0, [r7, #0x3c]
- cmp r0, #0x0
- ldrneb r6, [r7, #0x98]
- ldr r0, [r7, #0x8]
- moveq r6, #0x0
- and r0, r0, #0x40
- b _020B8EC4
-_020B8EC0:
- mov r0, #0x0
-_020B8EC4:
- cmp r0, #0x0
- bne _020B8F3C
- ldr r0, [r7, #0xb0]
- add r1, sp, #0x38
- ldrh r4, [r0, #0x2e]
- ldrh r5, [r0, #0x2c]
- mov r3, #0x10000
- rsb r0, r4, #0x0
- mov r12, r0, lsl #0xf
- mov lr, r5, lsl #0xf
- mov r0, #0x1b
- mov r2, #0x3
- str lr, [sp, #0x38]
- str r12, [sp, #0x3c]
- str r3, [sp, #0x40]
- bl FUN_020BB1C0
- mov r0, r5, lsl #0x13
- mov r1, r4, lsl #0x13
- mov r0, r0, asr #0x10
- mov r1, r1, asr #0x10
- mov r0, r0, lsl #0x10
- mov r1, r1, lsl #0x10
- mov r2, r0, lsr #0x10
- mov r0, r1, lsr #0x10
- orr r3, r2, r0, lsl #0x10
- add r1, sp, #0x4
- mov r0, #0x22
- mov r2, #0x1
- str r3, [sp, #0x4]
- bl FUN_020BB1C0
-_020B8F3C:
- cmp r6, #0x2
- bne _020B8F78
- ldr r1, [r7, #0x8]
- mov r0, r7
- bic r1, r1, #0x40
- str r1, [r7, #0x8]
- ldr r1, [r7, #0x3c]
- blx r1
- ldr r0, [r7, #0x3c]
- cmp r0, #0x0
- ldrneb r6, [r7, #0x98]
- ldr r0, [r7, #0x8]
- moveq r6, #0x0
- and r0, r0, #0x40
- b _020B8F7C
-_020B8F78:
- mov r0, #0x0
-_020B8F7C:
- cmp r0, #0x0
- bne _020B8FE0
- ldr r4, [r7, #0xd8]
- ldr r0, [r7, #0x0]
- ldrh r2, [r4, #0xa]
- add r3, r4, #0x4
- ldrb r0, [r0, #0x1]
- ldrh r1, [r3, r2]
- add r2, r3, r2
- mla r0, r1, r0, r2
- ldr r0, [r0, #0x4]
- add r1, r4, r0
- ldrh r2, [r1, #0x1e]
- ands r0, r2, #0x2000
- beq _020B8FE0
- add r1, r1, #0x2c
- ands r0, r2, #0x2
- addeq r1, r1, #0x8
- ands r0, r2, #0x4
- addeq r1, r1, #0x4
- ands r0, r2, #0x8
- addeq r1, r1, #0x8
- mov r0, #0x18
- mov r2, #0x10
- bl FUN_020BB1C0
-_020B8FE0:
- cmp r6, #0x3
- movne r0, #0x0
- bne _020B900C
- ldr r1, [r7, #0x8]
- mov r0, r7
- bic r1, r1, #0x40
- str r1, [r7, #0x8]
- ldr r1, [r7, #0x3c]
- blx r1
- ldr r0, [r7, #0x8]
- and r0, r0, #0x40
-_020B900C:
- cmp r0, #0x0
- bne _020B90D0
- mov r3, #0x2
- add r1, sp, #0x8
- mov r0, #0x10
- mov r2, #0x1
- str r3, [sp, #0x8]
- bl FUN_020BB1C0
- add r1, sp, #0x14
- mov r0, #0x0
- bl FUN_020BB824
- mov r3, #0x3
- add r1, sp, #0xc
- mov r0, #0x10
- mov r2, #0x1
- str r3, [sp, #0xc]
- bl FUN_020BB1C0
- ldr r0, _020B9104 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- ands r0, r1, #0x1
- beq _020B9094
- ldr r1, _020B9108 ; =UNK_021CED64
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- ldr r1, _020B910C ; =UNK_021CEDD4
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- add r1, sp, #0x14
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- b _020B90D0
-_020B9094:
- ands r0, r1, #0x2
- beq _020B90C0
- ldr r1, _020B9108 ; =UNK_021CED64
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- add r1, sp, #0x14
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- b _020B90D0
-_020B90C0:
- add r1, sp, #0x14
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
-_020B90D0:
- mov r3, #0x2
- add r1, sp, #0x10
- mov r0, #0x10
- mov r2, #0x1
- str r3, [sp, #0x10]
- bl FUN_020BB1C0
-_020B90E8:
- ldr r0, [r7, #0x0]
- add r0, r0, #0x3
- str r0, [r7, #0x0]
- add sp, sp, #0x44
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020B90FC: .word UNK_02106638
-_020B9100: .word UNK_0210663C
-_020B9104: .word UNK_021CED18
-_020B9108: .word UNK_021CED64
-_020B910C: .word UNK_021CEDD4
-
- arm_func_start FUN_020B9110
-FUN_020B9110: ; 0x020B9110
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x10
- mov r4, r0
- ldr r2, [r4, #0x8]
- ands r0, r2, #0x100
- bne _020B9164
- ands r0, r2, #0x200
- bne _020B9164
- cmp r1, #0x0
- ldreq r0, [r4, #0xe0]
- add r1, sp, #0x0
- streq r0, [sp, #0x8]
- streq r0, [sp, #0x4]
- streq r0, [sp, #0x0]
- ldrne r0, [r4, #0xe4]
- mov r2, #0x3
- strne r0, [sp, #0x8]
- strne r0, [sp, #0x4]
- strne r0, [sp, #0x0]
- mov r0, #0x1b
- bl FUN_020BB1C0
-_020B9164:
- ldr r0, [r4, #0x0]
- add r0, r0, #0x1
- str r0, [r4, #0x0]
- add sp, sp, #0x10
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020B9178
-FUN_020B9178: ; 0x020B9178
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- ldr r0, [r5, #0x34]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x96]
- moveq r4, #0x0
- cmp r4, #0x1
- bne _020B91CC
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x34]
- blx r1
- ldr r0, [r5, #0x34]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x96]
- ldr r0, [r5, #0x8]
- moveq r4, #0x0
- and r1, r0, #0x40
- b _020B91D0
-_020B91CC:
- mov r1, #0x0
-_020B91D0:
- ldr r0, [r5, #0x8]
- ands r0, r0, #0x100
- bne _020B9228
- cmp r1, #0x0
- bne _020B9228
- ldr r0, [r5, #0x0]
- ldrb r12, [r0, #0x1]
- ldrb r3, [r0, #0x2]
- ldrb lr, [r0, #0x3]
- ldrb r2, [r0, #0x5]
- ldrb r1, [r0, #0x6]
- orr r3, r12, r3, lsl #0x8
- ldrb r6, [r0, #0x4]
- orr r12, r3, lr, lsl #0x10
- ldrb r3, [r0, #0x7]
- orr r1, r2, r1, lsl #0x8
- orr r6, r12, r6, lsl #0x18
- ldrb r2, [r0, #0x8]
- orr r1, r1, r3, lsl #0x10
- add r0, r0, r6
- orr r1, r1, r2, lsl #0x18
- bl FUN_020BB2B0
-_020B9228:
- cmp r4, #0x3
- bne _020B9248
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x34]
- blx r1
-_020B9248:
- ldr r0, [r5, #0x0]
- add r0, r0, #0x9
- str r0, [r5, #0x0]
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020B9258
-FUN_020B9258: ; 0x020B9258
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x8c
- ldr r1, [r0, #0x4]
- ldr r4, [r0, #0x0]
- ldr r6, [r1, #0x4]
- ldrb r2, [r4, #0x2]
- ldr r3, [r6, #0x10]
- mov r10, #0x0
- str r0, [sp, #0x0]
- str r2, [sp, #0x8]
- add r3, r6, r3
- add r1, sp, #0x34
- mov r0, r10
- mov r2, #0x54
- mov r9, r10
- str r3, [sp, #0x4]
- add r8, r4, #0x3
- bl MIi_CpuClearFast
- bl FUN_020BB394
- ldr r0, _020B98AC ; =0x04000440
- mov r7, r10
- str r7, [r0, #0x0]
- mov r0, #0x1
- ldr r2, _020B98B0 ; =0x0400044C
- ldr r1, _020B98B4 ; =0x04000454
- str r0, [r2, #0x0]
- str r0, [sp, #0x10]
- str r7, [r1, #0x0]
- mov r1, #0x2
- ldr r0, _020B98AC ; =0x04000440
- str r1, [sp, #0x14]
- str r1, [r0, #0x0]
- ldr r0, [sp, #0x8]
- cmp r0, #0x0
- bls _020B96CC
-_020B92E4:
- ldrb r4, [r8, #0x1]
- mov r0, #0x64
- ldr r3, _020B98B8 ; =UNK_021D0380
- mul r0, r4, r0
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x0]
- mov r1, r4, lsr #0x5
- add r0, r0, r1, lsl #0x2
- ldr r1, [sp, #0x10]
- and r2, r4, #0x1f
- mov r1, r1, lsl r2
- ldr r11, [r0, #0xcc]
- ldr r2, [sp, #0xc]
- ands r11, r1, r11
- add r6, r3, r2
- bne _020B9358
- ldr r3, [r0, #0xcc]
- mov r2, #0x54
- orr r1, r3, r1
- str r1, [r0, #0xcc]
- ldr r0, [sp, #0x4]
- ldr r1, _020B98BC ; =0x04000450
- mla r0, r4, r2, r0
- ldrb r2, [r8, #0x0]
- str r2, [r1, #0x0]
- ldr r2, [sp, #0x10]
- ldr r1, _020B98AC ; =0x04000440
- str r2, [r1, #0x0]
- bl G3_MultMtx43
-_020B9358:
- cmp r7, #0x0
- beq _020B9500
- ldr r2, [sp, #0x6c]
- ldr r1, [r5, #0x0]
- str r2, [sp, #0x18]
- ldr r2, [sp, #0x70]
- mov r0, r1, asr #0x1f
- str r2, [sp, #0x1c]
- ldr r2, [sp, #0x74]
- ldr r12, [sp, #0x64]
- str r2, [sp, #0x20]
- ldr r2, [sp, #0x78]
- ldr lr, [sp, #0x68]
- str r2, [sp, #0x24]
- ldr r2, [sp, #0x7c]
- str r2, [sp, #0x28]
- ldr r2, [sp, #0x80]
- str r2, [sp, #0x2c]
- ldr r2, [sp, #0x84]
- str r2, [sp, #0x30]
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r0, r3, lsr #0xc
- orr r0, r0, r2, lsl #0x14
- adds r0, r12, r0
- str r0, [sp, #0x64]
- ldr r1, [r5, #0x4]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r0, r3, lsr #0xc
- orr r0, r0, r2, lsl #0x14
- adds r0, lr, r0
- str r0, [sp, #0x68]
- ldr r1, [r5, #0x8]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x18]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x6c]
- ldr r1, [r5, #0xc]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x1c]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x70]
- ldr r1, [r5, #0x10]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x20]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x74]
- ldr r1, [r5, #0x14]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x24]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x78]
- ldr r1, [r5, #0x18]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x28]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x7c]
- ldr r1, [r5, #0x1c]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x2c]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x80]
- ldr r1, [r5, #0x20]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r1, r3, lsr #0xc
- ldr r0, [sp, #0x30]
- orr r1, r1, r2, lsl #0x14
- adds r0, r0, r1
- str r0, [sp, #0x84]
-_020B9500:
- cmp r11, #0x0
- bne _020B9538
-_020B9508:
- mov r0, r6
- bl G3X_GetClipMtx
- cmp r0, #0x0
- bne _020B9508
- ldr r1, [sp, #0x14]
- ldr r0, _020B98AC ; =0x04000440
- str r1, [r0, #0x0]
- ldr r0, [sp, #0x4]
- mov r1, #0x54
- mla r0, r4, r1, r0
- add r0, r0, #0x30
- bl G3_MultMtx33
-_020B9538:
- ldrb r1, [r8, #0x2]
- ldr r2, [sp, #0x34]
- ldr r0, [r6, #0x0]
- mov r10, r1, lsl #0x4
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x34]
- mov r9, r10, asr #0x1f
- ldr r2, [sp, #0x38]
- ldr r0, [r6, #0x4]
- ldr r3, [sp, #0x3c]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x38]
- ldr r0, [r6, #0x8]
- ldr r2, [sp, #0x40]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r3, r1
- str r0, [sp, #0x3c]
- ldr r0, [r6, #0x10]
- ldr r3, [sp, #0x44]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x40]
- ldr r0, [r6, #0x14]
- ldr r2, [sp, #0x48]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r3, r1
- str r0, [sp, #0x44]
- ldr r0, [r6, #0x18]
- ldr r3, [sp, #0x4c]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x48]
- ldr r0, [r6, #0x20]
- ldr r2, [sp, #0x50]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r3, r1
- str r0, [sp, #0x4c]
- ldr r0, [r6, #0x24]
- ldr r3, [sp, #0x54]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x50]
- ldr r0, [r6, #0x28]
- ldr r2, [sp, #0x58]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r3, r1
- str r0, [sp, #0x54]
- ldr r0, [r6, #0x30]
- ldr r3, [sp, #0x5c]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x58]
- ldr r0, [r6, #0x34]
- ldr r2, [sp, #0x60]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r3, r1
- str r0, [sp, #0x5c]
- ldr r0, [r6, #0x38]
- smull r1, r0, r10, r0
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- adds r0, r2, r1
- str r0, [sp, #0x60]
- cmp r11, #0x0
- ldr r1, _020B98C0 ; =UNK_021D03C0
- ldr r0, [sp, #0xc]
- add r5, r1, r0
- add r8, r8, #0x3
- bne _020B96BC
-_020B96AC:
- mov r0, r5
- bl G3X_GetVectorMtx
- cmp r0, #0x0
- bne _020B96AC
-_020B96BC:
- ldr r0, [sp, #0x8]
- add r7, r7, #0x1
- cmp r7, r0
- blo _020B92E4
-_020B96CC:
- ldr r1, [r5, #0x0]
- ldr r4, [sp, #0x64]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r0, r3, lsr #0xc
- orr r0, r0, r2, lsl #0x14
- adds r0, r4, r0
- str r0, [sp, #0x64]
- ldr r1, [r5, #0x4]
- ldr r4, [sp, #0x68]
- mov r0, r1, asr #0x1f
- umull r3, r2, r10, r1
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- mov r0, r3, lsr #0xc
- orr r0, r0, r2, lsl #0x14
- adds r0, r4, r0
- str r0, [sp, #0x68]
- ldr r1, [r5, #0x8]
- ldr r4, [sp, #0x6c]
- umull r0, r2, r10, r1
- mov r3, r0, lsr #0xc
- mov r0, r1, asr #0x1f
- mla r2, r10, r0, r2
- mla r2, r9, r1, r2
- orr r3, r3, r2, lsl #0x14
- adds r0, r4, r3
- str r0, [sp, #0x6c]
- ldr r7, [r5, #0xc]
- ldr r12, [sp, #0x70]
- mov r6, r7, asr #0x1f
- umull r11, r8, r10, r7
- mla r8, r10, r6, r8
- mla r8, r9, r7, r8
- mov r6, r11, lsr #0xc
- orr r6, r6, r8, lsl #0x14
- adds r6, r12, r6
- str r6, [sp, #0x70]
- ldr r7, [r5, #0x10]
- ldr r4, [sp, #0x74]
- mov r6, r7, asr #0x1f
- umull r11, r8, r10, r7
- mla r8, r10, r6, r8
- mla r8, r9, r7, r8
- mov r6, r11, lsr #0xc
- orr r6, r6, r8, lsl #0x14
- adds r4, r4, r6
- str r4, [sp, #0x74]
- ldr r6, [r5, #0x14]
- ldr r3, [sp, #0x78]
- mov r4, r6, asr #0x1f
- umull r8, r7, r10, r6
- mla r7, r10, r4, r7
- mla r7, r9, r6, r7
- mov r4, r8, lsr #0xc
- orr r4, r4, r7, lsl #0x14
- adds r3, r3, r4
- str r3, [sp, #0x78]
- ldr r4, [r5, #0x18]
- ldr r2, [sp, #0x7c]
- mov r3, r4, asr #0x1f
- umull r7, r6, r10, r4
- mla r6, r10, r3, r6
- mla r6, r9, r4, r6
- mov r3, r7, lsr #0xc
- orr r3, r3, r6, lsl #0x14
- adds r2, r2, r3
- str r2, [sp, #0x7c]
- ldr r3, [r5, #0x1c]
- ldr r1, [sp, #0x80]
- mov r2, r3, asr #0x1f
- umull r6, r4, r10, r3
- mla r4, r10, r2, r4
- mla r4, r9, r3, r4
- mov r2, r6, lsr #0xc
- orr r2, r2, r4, lsl #0x14
- adds r1, r1, r2
- str r1, [sp, #0x80]
- ldr r2, [r5, #0x20]
- ldr lr, [sp, #0x84]
- mov r1, r2, asr #0x1f
- umull r4, r3, r10, r2
- mla r3, r10, r1, r3
- mla r3, r9, r2, r3
- mov r1, r4, lsr #0xc
- orr r1, r1, r3, lsl #0x14
- adds r1, lr, r1
- add r0, sp, #0x64
- str r1, [sp, #0x84]
- bl G3_LoadMtx43
- ldr r1, _020B98AC ; =0x04000440
- mov r2, #0x1
- add r0, sp, #0x34
- str r2, [r1, #0x0]
- bl G3_LoadMtx43
- ldr r3, _020B98AC ; =0x04000440
- mov r0, #0x0
- str r0, [r3, #0x0]
- ldr r1, _020B98BC ; =0x04000450
- mov r2, #0x1
- mov r0, #0x2
- str r2, [r1, #0x0]
- str r0, [r3, #0x0]
- ldr r0, [sp, #0x0]
- ldr r1, [r0, #0x0]
- ldr r0, _020B98B0 ; =0x0400044C
- ldrb r2, [r1, #0x1]
- mov r1, #0x3
- str r2, [r0, #0x0]
- ldr r0, [sp, #0x0]
- ldr r2, [r0, #0x0]
- ldrb r0, [r2, #0x2]
- add r0, r0, #0x1
- mla r1, r0, r1, r2
- ldr r0, [sp, #0x0]
- str r1, [r0, #0x0]
- add sp, sp, #0x8c
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B98AC: .word 0x04000440
-_020B98B0: .word 0x0400044C
-_020B98B4: .word 0x04000454
-_020B98B8: .word UNK_021D0380
-_020B98BC: .word 0x04000450
-_020B98C0: .word UNK_021D03C0
-
- arm_func_start FUN_020B98C4
-FUN_020B98C4: ; 0x020B98C4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0xcc
- mov r10, r0
- ldr r2, [r10, #0x8]
- mov r9, r1
- ands r0, r2, #0x200
- mov r7, #0x2
- ldr r6, _020B9C28 ; =UNK_02106718
- ldr fp, _020B9C2C ; =UNK_02106724
- ldr r5, _020B9C30 ; =UNK_021066F4
- beq _020B992C
- cmp r9, #0x40
- beq _020B9900
- cmp r9, #0x60
- bne _020B9904
-_020B9900:
- add r7, r7, #0x1
-_020B9904:
- cmp r9, #0x20
- beq _020B9914
- cmp r9, #0x60
- bne _020B9918
-_020B9914:
- add r7, r7, #0x1
-_020B9918:
- ldr r0, [r10, #0x0]
- add sp, sp, #0xcc
- add r0, r0, r7
- str r0, [r10, #0x0]
- ldmia sp!, {r4-r11,pc}
-_020B992C:
- cmp r9, #0x40
- beq _020B993C
- cmp r9, #0x60
- bne _020B9974
-_020B993C:
- add r7, r7, #0x1
- ands r0, r2, #0x100
- bne _020B9974
- cmp r9, #0x40
- ldreq r0, [r10, #0x0]
- add r1, sp, #0x0
- ldreqb r0, [r0, #0x2]
- mov r2, #0x1
- streq r0, [sp, #0x0]
- ldrne r0, [r10, #0x0]
- ldrneb r0, [r0, #0x3]
- strne r0, [sp, #0x0]
- mov r0, #0x14
- bl FUN_020BB1C0
-_020B9974:
- ldr r0, [r10, #0x2c]
- cmp r0, #0x0
- ldrneb r8, [r10, #0x94]
- moveq r8, #0x0
- cmp r8, #0x1
- bne _020B99C0
- ldr r1, [r10, #0x8]
- mov r0, r10
- bic r1, r1, #0x40
- str r1, [r10, #0x8]
- ldr r1, [r10, #0x2c]
- blx r1
- ldr r0, [r10, #0x2c]
- cmp r0, #0x0
- ldrneb r8, [r10, #0x94]
- ldr r0, [r10, #0x8]
- moveq r8, #0x0
- and r1, r0, #0x40
- b _020B99C4
-_020B99C0:
- mov r1, #0x0
-_020B99C4:
- ldr r0, [r10, #0x8]
- ands r0, r0, #0x100
- bne _020B9BA4
- cmp r1, #0x0
- bne _020B9BA4
- bl FUN_020BB394
- ldr r2, _020B9C34 ; =0x00151110
- ldr r1, _020B9C38 ; =0x04000400
- mov r0, #0x0
- str r2, [r1, #0x0]
- str r0, [r1, #0x0]
- str r0, [r1, #0x0]
- add r4, sp, #0x8
-_020B99F8:
- mov r0, r4
- bl G3X_GetClipMtx
- cmp r0, #0x0
- bne _020B99F8
- ldr r0, _020B9C3C ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- ands r0, r1, #0x1
- beq _020B9A38
- bl FUN_020B82A4
- add r1, sp, #0x48
- bl MTX_Copy43To44_
- add r0, sp, #0x8
- add r1, sp, #0x48
- mov r2, r0
- bl MTX_Concat44
- b _020B9A5C
-_020B9A38:
- ands r0, r1, #0x2
- beq _020B9A5C
- ldr r0, _020B9C40 ; =UNK_021CED64
- add r1, sp, #0x88
- bl MTX_Copy43To44_
- add r0, sp, #0x8
- add r1, sp, #0x88
- mov r2, r0
- bl MTX_Concat44
-_020B9A5C:
- ldr r1, [sp, #0x38]
- add r0, sp, #0x8
- str r1, [r6, #0x0]
- ldr r1, [sp, #0x3c]
- str r1, [r6, #0x4]
- ldr r1, [sp, #0x40]
- str r1, [r6, #0x8]
- bl VEC_Mag
- str r0, [r11, #0x0]
- add r0, sp, #0x18
- bl VEC_Mag
- str r0, [r11, #0x4]
- add r0, sp, #0x28
- bl VEC_Mag
- str r0, [r11, #0x8]
- ldr r0, [sp, #0x1c]
- cmp r0, #0x0
- bne _020B9AB0
- ldr r0, [sp, #0x20]
- cmp r0, #0x0
- beq _020B9AD4
-_020B9AB0:
- add r0, sp, #0x18
- add r1, r5, #0xc
- bl VEC_Normalize
- ldr r0, [r5, #0x14]
- rsb r0, r0, #0x0
- str r0, [r5, #0x1c]
- ldr r0, [r5, #0x10]
- str r0, [r5, #0x20]
- b _020B9AF4
-_020B9AD4:
- add r0, sp, #0x28
- add r1, r5, #0x18
- bl VEC_Normalize
- ldr r0, [r5, #0x1c]
- rsb r0, r0, #0x0
- str r0, [r5, #0x14]
- ldr r0, [r5, #0x20]
- str r0, [r5, #0x10]
-_020B9AF4:
- ldr r0, _020B9C3C ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- ands r0, r1, #0x1
- beq _020B9B48
- ldr r3, _020B9C44 ; =0x00171012
- ldr r1, _020B9C38 ; =0x04000400
- ldr r0, _020B9C48 ; =UNK_021066EC
- mov r2, #0x8
- str r3, [r1, #0x0]
- bl MIi_CpuSend32
- bl FUN_020B8264
- ldr r1, _020B9C38 ; =0x04000400
- mov r2, #0x30
- bl MIi_CpuSend32
- ldr r2, _020B9C4C ; =0x00001B19
- ldr r1, _020B9C38 ; =0x04000400
- ldr r0, _020B9C30 ; =UNK_021066F4
- str r2, [r1, #0x0]
- mov r2, #0x3c
- bl MIi_CpuSend32
- b _020B9BA4
-_020B9B48:
- ands r0, r1, #0x2
- beq _020B9B94
- ldr r3, _020B9C44 ; =0x00171012
- ldr r1, _020B9C38 ; =0x04000400
- ldr r0, _020B9C48 ; =UNK_021066EC
- mov r2, #0x8
- str r3, [r1, #0x0]
- bl MIi_CpuSend32
- bl FUN_020B8344
- ldr r1, _020B9C38 ; =0x04000400
- mov r2, #0x30
- bl MIi_CpuSend32
- ldr r2, _020B9C4C ; =0x00001B19
- ldr r1, _020B9C38 ; =0x04000400
- ldr r0, _020B9C30 ; =UNK_021066F4
- str r2, [r1, #0x0]
- mov r2, #0x3c
- bl MIi_CpuSend32
- b _020B9BA4
-_020B9B94:
- ldr r0, _020B9C50 ; =UNK_021066E8
- ldr r1, _020B9C38 ; =0x04000400
- mov r2, #0x48
- bl MIi_CpuSend32
-_020B9BA4:
- cmp r8, #0x3
- movne r0, #0x0
- bne _020B9BD0
- ldr r1, [r10, #0x8]
- mov r0, r10
- bic r1, r1, #0x40
- str r1, [r10, #0x8]
- ldr r1, [r10, #0x2c]
- blx r1
- ldr r0, [r10, #0x8]
- and r0, r0, #0x40
-_020B9BD0:
- cmp r9, #0x20
- beq _020B9BE0
- cmp r9, #0x60
- bne _020B9C14
-_020B9BE0:
- cmp r0, #0x0
- add r7, r7, #0x1
- bne _020B9C14
- ldr r0, [r10, #0x8]
- ands r0, r0, #0x100
- bne _020B9C14
- ldr r0, [r10, #0x0]
- add r1, sp, #0x4
- ldrb r3, [r0, #0x2]
- mov r0, #0x13
- mov r2, #0x1
- str r3, [sp, #0x4]
- bl FUN_020BB1C0
-_020B9C14:
- ldr r0, [r10, #0x0]
- add r0, r0, r7
- str r0, [r10, #0x0]
- add sp, sp, #0xcc
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020B9C28: .word UNK_02106718
-_020B9C2C: .word UNK_02106724
-_020B9C30: .word UNK_021066F4
-_020B9C34: .word 0x00151110
-_020B9C38: .word 0x04000400
-_020B9C3C: .word UNK_021CED18
-_020B9C40: .word UNK_021CED64
-_020B9C44: .word 0x00171012
-_020B9C48: .word UNK_021066EC
-_020B9C4C: .word 0x00001B19
-_020B9C50: .word UNK_021066E8
-
- arm_func_start FUN_020B9C54
-FUN_020B9C54: ; 0x020B9C54
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0xc8
- mov r9, r0
- ldr r2, [r9, #0x8]
- mov r8, r1
- ands r0, r2, #0x200
- mov r6, #0x2
- ldr r5, _020B9F58 ; =UNK_021066D0
- ldr r4, _020B9F5C ; =UNK_021066DC
- beq _020B9CB8
- cmp r8, #0x40
- beq _020B9C8C
- cmp r8, #0x60
- bne _020B9C90
-_020B9C8C:
- add r6, r6, #0x1
-_020B9C90:
- cmp r8, #0x20
- beq _020B9CA0
- cmp r8, #0x60
- bne _020B9CA4
-_020B9CA0:
- add r6, r6, #0x1
-_020B9CA4:
- ldr r0, [r9, #0x0]
- add sp, sp, #0xc8
- add r0, r0, r6
- str r0, [r9, #0x0]
- ldmia sp!, {r4-r10,pc}
-_020B9CB8:
- cmp r8, #0x40
- beq _020B9CC8
- cmp r8, #0x60
- bne _020B9D00
-_020B9CC8:
- add r6, r6, #0x1
- ands r0, r2, #0x100
- bne _020B9D00
- cmp r8, #0x40
- ldreq r0, [r9, #0x0]
- add r1, sp, #0x0
- ldreqb r0, [r0, #0x2]
- mov r2, #0x1
- streq r0, [sp, #0x0]
- ldrne r0, [r9, #0x0]
- ldrneb r0, [r0, #0x3]
- strne r0, [sp, #0x0]
- mov r0, #0x14
- bl FUN_020BB1C0
-_020B9D00:
- ldr r0, [r9, #0x28]
- cmp r0, #0x0
- ldrneb r7, [r9, #0x93]
- moveq r7, #0x0
- cmp r7, #0x1
- bne _020B9D4C
- ldr r1, [r9, #0x8]
- mov r0, r9
- bic r1, r1, #0x40
- str r1, [r9, #0x8]
- ldr r1, [r9, #0x28]
- blx r1
- ldr r0, [r9, #0x28]
- cmp r0, #0x0
- ldrneb r7, [r9, #0x93]
- ldr r0, [r9, #0x8]
- moveq r7, #0x0
- and r1, r0, #0x40
- b _020B9D50
-_020B9D4C:
- mov r1, #0x0
-_020B9D50:
- ldr r0, [r9, #0x8]
- ands r0, r0, #0x100
- bne _020B9ED4
- cmp r1, #0x0
- bne _020B9ED4
- bl FUN_020BB394
- ldr r2, _020B9F60 ; =0x00151110
- ldr r1, _020B9F64 ; =0x04000400
- mov r0, #0x0
- str r2, [r1, #0x0]
- str r0, [r1, #0x0]
- str r0, [r1, #0x0]
- add r10, sp, #0x8
-_020B9D84:
- mov r0, r10
- bl G3X_GetClipMtx
- cmp r0, #0x0
- bne _020B9D84
- ldr r0, _020B9F68 ; =UNK_021CED18
- ldr r1, [r0, #0xfc]
- ands r0, r1, #0x1
- beq _020B9DC4
- bl FUN_020B82A4
- add r1, sp, #0x48
- bl MTX_Copy43To44_
- add r0, sp, #0x8
- add r1, sp, #0x48
- mov r2, r0
- bl MTX_Concat44
- b _020B9DE8
-_020B9DC4:
- ands r0, r1, #0x2
- beq _020B9DE8
- ldr r0, _020B9F6C ; =UNK_021CED64
- add r1, sp, #0x88
- bl MTX_Copy43To44_
- add r0, sp, #0x8
- add r1, sp, #0x88
- mov r2, r0
- bl MTX_Concat44
-_020B9DE8:
- ldr r1, [sp, #0x38]
- add r0, sp, #0x8
- str r1, [r5, #0x0]
- ldr r1, [sp, #0x3c]
- str r1, [r5, #0x4]
- ldr r1, [sp, #0x40]
- str r1, [r5, #0x8]
- bl VEC_Mag
- str r0, [r4, #0x0]
- add r0, sp, #0x18
- bl VEC_Mag
- str r0, [r4, #0x4]
- add r0, sp, #0x28
- bl VEC_Mag
- ldr r1, _020B9F68 ; =UNK_021CED18
- str r0, [r4, #0x8]
- ldr r1, [r1, #0xfc]
- ands r0, r1, #0x1
- beq _020B9E78
- ldr r3, _020B9F70 ; =0x00171012
- ldr r1, _020B9F64 ; =0x04000400
- ldr r0, _020B9F74 ; =UNK_021066A4
- mov r2, #0x8
- str r3, [r1, #0x0]
- bl MIi_CpuSend32
- bl FUN_020B8264
- ldr r1, _020B9F64 ; =0x04000400
- mov r2, #0x30
- bl MIi_CpuSend32
- ldr r2, _020B9F78 ; =0x00001B19
- ldr r1, _020B9F64 ; =0x04000400
- ldr r0, _020B9F7C ; =UNK_021066AC
- str r2, [r1, #0x0]
- mov r2, #0x3c
- bl MIi_CpuSend32
- b _020B9ED4
-_020B9E78:
- ands r0, r1, #0x2
- beq _020B9EC4
- ldr r3, _020B9F70 ; =0x00171012
- ldr r1, _020B9F64 ; =0x04000400
- ldr r0, _020B9F74 ; =UNK_021066A4
- mov r2, #0x8
- str r3, [r1, #0x0]
- bl MIi_CpuSend32
- bl FUN_020B8344
- ldr r1, _020B9F64 ; =0x04000400
- mov r2, #0x30
- bl MIi_CpuSend32
- ldr r2, _020B9F78 ; =0x00001B19
- ldr r1, _020B9F64 ; =0x04000400
- ldr r0, _020B9F7C ; =UNK_021066AC
- str r2, [r1, #0x0]
- mov r2, #0x3c
- bl MIi_CpuSend32
- b _020B9ED4
-_020B9EC4:
- ldr r0, _020B9F80 ; =UNK_021066A0
- ldr r1, _020B9F64 ; =0x04000400
- mov r2, #0x48
- bl MIi_CpuSend32
-_020B9ED4:
- cmp r7, #0x3
- movne r0, #0x0
- bne _020B9F00
- ldr r1, [r9, #0x8]
- mov r0, r9
- bic r1, r1, #0x40
- str r1, [r9, #0x8]
- ldr r1, [r9, #0x28]
- blx r1
- ldr r0, [r9, #0x8]
- and r0, r0, #0x40
-_020B9F00:
- cmp r8, #0x20
- beq _020B9F10
- cmp r8, #0x60
- bne _020B9F44
-_020B9F10:
- cmp r0, #0x0
- add r6, r6, #0x1
- bne _020B9F44
- ldr r0, [r9, #0x8]
- ands r0, r0, #0x100
- bne _020B9F44
- ldr r0, [r9, #0x0]
- add r1, sp, #0x4
- ldrb r3, [r0, #0x2]
- mov r0, #0x13
- mov r2, #0x1
- str r3, [sp, #0x4]
- bl FUN_020BB1C0
-_020B9F44:
- ldr r0, [r9, #0x0]
- add r0, r0, r6
- str r0, [r9, #0x0]
- add sp, sp, #0xc8
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020B9F58: .word UNK_021066D0
-_020B9F5C: .word UNK_021066DC
-_020B9F60: .word 0x00151110
-_020B9F64: .word 0x04000400
-_020B9F68: .word UNK_021CED18
-_020B9F6C: .word UNK_021CED64
-_020B9F70: .word 0x00171012
-_020B9F74: .word UNK_021066A4
-_020B9F78: .word 0x00001B19
-_020B9F7C: .word UNK_021066AC
-_020B9F80: .word UNK_021066A0
-
- arm_func_start FUN_020B9F84
-FUN_020B9F84: ; 0x020B9F84
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x14
- mov r10, r0
- ldr r0, [r10, #0x0]
- mov r9, r1
- ldrb r4, [r0, #0x1]
- mov r7, #0x4
- strb r4, [r10, #0xae]
- ldr r0, [r10, #0x8]
- orr r0, r0, #0x10
- str r0, [r10, #0x8]
- ldr r1, [r10, #0x8]
- ands r0, r1, #0x400
- beq _020BA01C
- cmp r9, #0x40
- beq _020B9FCC
- cmp r9, #0x60
- bne _020B9FD0
-_020B9FCC:
- add r7, r7, #0x1
-_020B9FD0:
- cmp r9, #0x20
- beq _020B9FE0
- cmp r9, #0x60
- bne _020BA008
-_020B9FE0:
- add r7, r7, #0x1
- ands r0, r1, #0x100
- bne _020BA008
- ldr r0, [r10, #0x0]
- add r1, sp, #0x8
- ldrb r3, [r0, #0x4]
- mov r0, #0x14
- mov r2, #0x1
- str r3, [sp, #0x8]
- bl FUN_020BB1C0
-_020BA008:
- ldr r0, [r10, #0x0]
- add sp, sp, #0x14
- add r0, r0, r7
- str r0, [r10, #0x0]
- ldmia sp!, {r4-r11,pc}
-_020BA01C:
- cmp r9, #0x40
- beq _020BA02C
- cmp r9, #0x60
- bne _020BA068
-_020BA02C:
- cmp r9, #0x40
- ldreq r0, [r10, #0x0]
- add r7, r7, #0x1
- ldreqb r0, [r0, #0x4]
- streq r0, [sp, #0xc]
- ldrne r0, [r10, #0x0]
- ldrneb r0, [r0, #0x5]
- strne r0, [sp, #0xc]
- ldr r0, [r10, #0x8]
- ands r0, r0, #0x100
- bne _020BA068
- add r1, sp, #0xc
- mov r0, #0x14
- mov r2, #0x1
- bl FUN_020BB1C0
-_020BA068:
- add r0, r10, #0x12c
- str r0, [r10, #0xb4]
- ldr r0, [r10, #0x24]
- cmp r0, #0x0
- ldrneb r8, [r10, #0x92]
- moveq r8, #0x0
- cmp r8, #0x1
- bne _020BA0BC
- ldr r1, [r10, #0x8]
- mov r0, r10
- bic r1, r1, #0x40
- str r1, [r10, #0x8]
- ldr r1, [r10, #0x24]
- blx r1
- ldr r0, [r10, #0x24]
- cmp r0, #0x0
- ldrneb r8, [r10, #0x92]
- ldr r0, [r10, #0x8]
- moveq r8, #0x0
- and r0, r0, #0x40
- b _020BA0C0
-_020BA0BC:
- mov r0, #0x0
-_020BA0C0:
- cmp r0, #0x0
- bne _020BA2CC
- ldr r0, [r10, #0x4]
- ldr r1, [r0, #0x34]
- cmp r1, #0x0
- beq _020BA0F4
- mov r0, #0x58
- mla r6, r4, r0, r1
- ldr r0, [r10, #0x8]
- ands r0, r0, #0x80
- moveq r0, #0x1
- movne r0, #0x0
- b _020BA0FC
-_020BA0F4:
- add r6, r10, #0x12c
- mov r0, #0x0
-_020BA0FC:
- cmp r0, #0x0
- bne _020BA2C8
- mov r0, #0x0
- str r0, [r6, #0x0]
- ldr r0, [r10, #0x4]
- ldr r1, [r0, #0x10]
- cmp r1, #0x0
- beq _020BA134
- ldr r3, [r0, #0x14]
- mov r0, r6
- mov r2, r4
- blx r3
- cmp r0, #0x0
- bne _020BA2C8
-_020BA134:
- ldr r2, [r10, #0xd4]
- ldrh r0, [r2, #0x6]
- ldrh r1, [r2, r0]
- add r0, r2, r0
- mla r0, r1, r4, r0
- ldr r1, [r0, #0x4]
- ldrh r0, [r2, r1]
- add r4, r2, r1
- add r5, r4, #0x4
- ands r0, r0, #0x1
- ldrne r0, [r6, #0x0]
- orrne r0, r0, #0x4
- strne r0, [r6, #0x0]
- bne _020BA188
- ldr r0, [r5, #0x0]
- str r0, [r6, #0x4c]
- ldr r0, [r5, #0x4]
- str r0, [r6, #0x50]
- ldr r0, [r5, #0x8]
- add r5, r5, #0xc
- str r0, [r6, #0x54]
-_020BA188:
- ldrh r1, [r4, #0x0]
- ands r0, r1, #0x2
- ldrne r0, [r6, #0x0]
- orrne r0, r0, #0x2
- strne r0, [r6, #0x0]
- bne _020BA2B0
- ands r0, r1, #0x8
- beq _020BA264
- and r1, r1, #0xf0
- mov r11, r1, asr #0x4
- ldrsh r1, [r5, #0x0]
- add r0, r6, #0x28
- str r1, [sp, #0x0]
- ldrsh r1, [r5, #0x2]
- str r1, [sp, #0x4]
- bl MI_Zero36B
- ldrh r0, [r4, #0x0]
- add r1, r6, r11, lsl #0x2
- add r5, r5, #0x4
- ands r0, r0, #0x100
- movne r0, #0x1000
- rsbne r2, r0, #0x0
- moveq r2, #0x1000
- str r2, [r1, #0x28]
- ldr r0, _020BA3B4 ; =UNK_020FF9F0
- ldr r1, _020BA3B8 ; =UNK_020FF9F1
- ldrb r0, [r0, r11, lsl #0x2]
- add r2, r6, r0, lsl #0x2
- ldr r0, [sp, #0x0]
- str r0, [r2, #0x28]
- ldrb r0, [r1, r11, lsl #0x2]
- add r1, r6, r0, lsl #0x2
- ldr r0, [sp, #0x4]
- str r0, [r1, #0x28]
- ldrh r0, [r4, #0x0]
- ands r0, r0, #0x200
- ldrne r0, [sp, #0x4]
- rsbne r0, r0, #0x0
- strne r0, [sp, #0x4]
- ldr r0, _020BA3BC ; =UNK_020FF9F2
- ldrb r0, [r0, r11, lsl #0x2]
- add r1, r6, r0, lsl #0x2
- ldr r0, [sp, #0x4]
- str r0, [r1, #0x28]
- ldrh r0, [r4, #0x0]
- ands r0, r0, #0x400
- ldrne r0, [sp, #0x0]
- rsbne r0, r0, #0x0
- strne r0, [sp, #0x0]
- ldr r0, _020BA3C0 ; =UNK_020FF9F3
- ldrb r0, [r0, r11, lsl #0x2]
- add r1, r6, r0, lsl #0x2
- ldr r0, [sp, #0x0]
- str r0, [r1, #0x28]
- b _020BA2B0
-_020BA264:
- ldrsh r0, [r4, #0x2]
- str r0, [r6, #0x28]
- ldrsh r0, [r5, #0x0]
- str r0, [r6, #0x2c]
- ldrsh r0, [r5, #0x2]
- str r0, [r6, #0x30]
- ldrsh r0, [r5, #0x4]
- str r0, [r6, #0x34]
- ldrsh r0, [r5, #0x6]
- str r0, [r6, #0x38]
- ldrsh r0, [r5, #0x8]
- str r0, [r6, #0x3c]
- ldrsh r0, [r5, #0xa]
- str r0, [r6, #0x40]
- ldrsh r0, [r5, #0xc]
- str r0, [r6, #0x44]
- ldrsh r0, [r5, #0xe]
- add r5, r5, #0x10
- str r0, [r6, #0x48]
-_020BA2B0:
- ldrh r3, [r4, #0x0]
- ldr r2, [r10, #0x0]
- ldr r4, [r10, #0xe8]
- mov r0, r6
- mov r1, r5
- blx r4
-_020BA2C8:
- str r6, [r10, #0xb4]
-_020BA2CC:
- cmp r8, #0x2
- bne _020BA308
- ldr r1, [r10, #0x8]
- mov r0, r10
- bic r1, r1, #0x40
- str r1, [r10, #0x8]
- ldr r1, [r10, #0x24]
- blx r1
- ldr r0, [r10, #0x24]
- cmp r0, #0x0
- ldrneb r8, [r10, #0x92]
- ldr r0, [r10, #0x8]
- moveq r8, #0x0
- and r0, r0, #0x40
- b _020BA30C
-_020BA308:
- mov r0, #0x0
-_020BA30C:
- cmp r0, #0x0
- bne _020BA32C
- ldr r0, [r10, #0x8]
- ands r0, r0, #0x100
- bne _020BA32C
- ldr r0, [r10, #0xb4]
- ldr r1, [r10, #0xec]
- blx r1
-_020BA32C:
- mov r0, #0x0
- str r0, [r10, #0xb4]
- cmp r8, #0x3
- bne _020BA35C
- ldr r1, [r10, #0x8]
- mov r0, r10
- bic r1, r1, #0x40
- str r1, [r10, #0x8]
- ldr r1, [r10, #0x24]
- blx r1
- ldr r0, [r10, #0x8]
- and r0, r0, #0x40
-_020BA35C:
- cmp r9, #0x20
- beq _020BA36C
- cmp r9, #0x60
- bne _020BA3A0
-_020BA36C:
- cmp r0, #0x0
- add r7, r7, #0x1
- bne _020BA3A0
- ldr r0, [r10, #0x8]
- ands r0, r0, #0x100
- bne _020BA3A0
- ldr r0, [r10, #0x0]
- add r1, sp, #0x10
- ldrb r3, [r0, #0x4]
- mov r0, #0x13
- mov r2, #0x1
- str r3, [sp, #0x10]
- bl FUN_020BB1C0
-_020BA3A0:
- ldr r0, [r10, #0x0]
- add r0, r0, r7
- str r0, [r10, #0x0]
- add sp, sp, #0x14
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020BA3B4: .word UNK_020FF9F0
-_020BA3B8: .word UNK_020FF9F1
-_020BA3BC: .word UNK_020FF9F2
-_020BA3C0: .word UNK_020FF9F3
-
- arm_func_start FUN_020BA3C4
-FUN_020BA3C4: ; 0x020BA3C4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r0
- ldr r3, [r4, #0x8]
- ands r2, r3, #0x200
- bne _020BA420
- ands r2, r3, #0x1
- beq _020BA420
- ands r2, r3, #0x2
- bne _020BA420
- ldr r5, [r4, #0xdc]
- ldr r3, [r4, #0x0]
- ldrh r2, [r5, #0x6]
- ldrb r3, [r3, #0x1]
- ldr ip, _020BA434 ; =UNK_02106650
- ldrh lr, [r5, r2]
- add r2, r5, r2
- mla r2, lr, r3, r2
- ldr r2, [r2, #0x4]
- ldrh lr, [r5, r2]
- add r2, r5, r2
- ldr r12, [r12, lr, lsl #0x2]
- blx r12
-_020BA420:
- ldr r0, [r4, #0x0]
- add r0, r0, #0x2
- str r0, [r4, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BA434: .word UNK_02106650
-
- arm_func_start FUN_020BA438
-FUN_020BA438: ; 0x020BA438
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldr r0, [r6, #0x20]
- mov r5, r2
- cmp r0, #0x0
- ldrneb r4, [r6, #0x91]
- moveq r4, #0x0
- cmp r4, #0x1
- bne _020BA490
- ldr r1, [r6, #0x8]
- mov r0, r6
- bic r1, r1, #0x40
- str r1, [r6, #0x8]
- ldr r1, [r6, #0x20]
- blx r1
- ldr r0, [r6, #0x20]
- cmp r0, #0x0
- ldrneb r4, [r6, #0x91]
- ldr r0, [r6, #0x8]
- moveq r4, #0x0
- and r0, r0, #0x40
- b _020BA494
-_020BA490:
- mov r0, #0x0
-_020BA494:
- cmp r0, #0x0
- bne _020BA4B8
- ldr r0, [r6, #0x8]
- ands r0, r0, #0x100
- bne _020BA4B8
- ldr r0, [r5, #0x8]
- ldr r1, [r5, #0xc]
- add r0, r5, r0
- bl FUN_020BB2B0
-_020BA4B8:
- cmp r4, #0x2
- bne _020BA4E8
- ldr r1, [r6, #0x8]
- mov r0, r6
- bic r1, r1, #0x40
- str r1, [r6, #0x8]
- ldr r1, [r6, #0x20]
- blx r1
- ldr r0, [r6, #0x20]
- cmp r0, #0x0
- ldrneb r4, [r6, #0x91]
- moveq r4, #0x0
-_020BA4E8:
- cmp r4, #0x3
- ldmneia sp!, {r4-r6,pc}
- ldr r1, [r6, #0x8]
- mov r0, r6
- bic r1, r1, #0x40
- str r1, [r6, #0x8]
- ldr r1, [r6, #0x20]
- blx r1
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BA50C
-FUN_020BA50C: ; 0x020BA50C
- stmdb sp!, {r4-r6,lr}
- mov r4, r0
- ldr r5, [r4, #0x8]
- ands r0, r5, #0x200
- bne _020BA578
- ldr r2, [r4, #0x0]
- ands r0, r5, #0x1
- ldrb r3, [r2, #0x1]
- bne _020BA544
- ands r0, r5, #0x8
- beq _020BA544
- ldrb r0, [r4, #0xad]
- cmp r3, r0
- beq _020BA578
-_020BA544:
- ldr r6, [r4, #0xd8]
- ldr ip, _020BA588 ; =UNK_02106640
- ldrh r2, [r6, #0xa]
- add r5, r6, #0x4
- mov r0, r4
- ldrh lr, [r5, r2]
- add r2, r5, r2
- mla r2, lr, r3, r2
- ldr r2, [r2, #0x4]
- ldrh lr, [r6, r2]
- add r2, r6, r2
- ldr r12, [r12, lr, lsl #0x2]
- blx r12
-_020BA578:
- ldr r0, [r4, #0x0]
- add r0, r0, #0x2
- str r0, [r4, #0x0]
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020BA588: .word UNK_02106640
-
- arm_func_start FUN_020BA58C
-FUN_020BA58C: ; 0x020BA58C
- stmdb sp!, {r4-r8,lr}
- sub sp, sp, #0x20
- mov r8, r0
- mov r6, r3
- strb r6, [r8, #0xad]
- ldr r3, [r8, #0x8]
- add r0, r8, #0xf4
- orr r3, r3, #0x8
- str r3, [r8, #0x8]
- str r0, [r8, #0xb0]
- ldr r0, [r8, #0x1c]
- mov r4, r1
- cmp r0, #0x0
- ldrneb r5, [r8, #0x90]
- mov r7, r2
- moveq r5, #0x0
- cmp r5, #0x1
- bne _020BA608
- ldr r1, [r8, #0x8]
- mov r0, r8
- bic r1, r1, #0x40
- str r1, [r8, #0x8]
- ldr r1, [r8, #0x1c]
- blx r1
- ldr r0, [r8, #0x1c]
- cmp r0, #0x0
- ldrneb r5, [r8, #0x90]
- ldr r0, [r8, #0x8]
- moveq r5, #0x0
- and r0, r0, #0x40
- b _020BA60C
-_020BA608:
- mov r0, #0x0
-_020BA60C:
- cmp r0, #0x0
- bne _020BA8C0
- ldr r0, [r8, #0x4]
- ldr r0, [r0, #0x38]
- cmp r0, #0x0
- beq _020BA638
- ldr r1, [r8, #0x8]
- ands r1, r1, #0x80
- moveq r1, #0x38
- mlaeq r4, r6, r1, r0
- beq _020BA8BC
-_020BA638:
- cmp r4, #0x20
- beq _020BA648
- cmp r4, #0x40
- bne _020BA684
-_020BA648:
- mov r1, r6, lsr #0x5
- add r1, r8, r1, lsl #0x2
- and r2, r6, #0x1f
- mov r3, #0x1
- mov r2, r3, lsl r2
- ldr r1, [r1, #0xbc]
- ands r1, r2, r1
- beq _020BA684
- cmp r0, #0x0
- movne r1, #0x38
- mlane r4, r6, r1, r0
- ldreq r1, _020BA9D8 ; =UNK_021CEF80
- moveq r0, #0x38
- mlaeq r4, r6, r0, r1
- b _020BA8BC
-_020BA684:
- cmp r0, #0x0
- beq _020BA6BC
- add r4, r8, #0xbc
- mov r3, r6, lsr #0x5
- ldr r2, [r4, r3, lsl #0x2]
- and r0, r6, #0x1f
- mov r1, #0x1
- orr r0, r2, r1, lsl r0
- str r0, [r4, r3, lsl #0x2]
- ldr r1, [r8, #0x4]
- mov r0, #0x38
- ldr r1, [r1, #0x38]
- mla r4, r6, r0, r1
- b _020BA6F0
-_020BA6BC:
- cmp r4, #0x40
- addne r4, r8, #0xf4
- bne _020BA6F0
- add lr, r8, #0xbc
- mov r12, r6, lsr #0x5
- ldr r1, _020BA9D8 ; =UNK_021CEF80
- ldr r4, [lr, r12, lsl #0x2]
- mov r0, #0x38
- and r2, r6, #0x1f
- mov r3, #0x1
- orr r2, r4, r3, lsl r2
- mla r4, r6, r0, r1
- str r2, [lr, r12, lsl #0x2]
-_020BA6F0:
- mov r0, #0x0
- str r0, [r4, #0x0]
- ldr r3, [r8, #0xd8]
- ldrh r0, [r3, #0xa]
- add r2, r3, #0x4
- ldrh r1, [r2, r0]
- add r0, r2, r0
- mla r0, r1, r6, r0
- ldr r0, [r0, #0x4]
- ldr r1, _020BA9DC ; =UNK_021CED18
- add r0, r3, r0
- ldrh r0, [r0, #0x1e]
- ands r0, r0, #0x20
- ldrne r0, [r4, #0x0]
- orrne r0, r0, #0x20
- strne r0, [r4, #0x0]
- ldrh r2, [r7, #0x1e]
- ldr r0, _020BA9E0 ; =UNK_020FF9D0
- ldr r12, [r1, #0x94]
- mov r2, r2, asr #0x6
- and r2, r2, #0x7
- ldr lr, [r0, r2, lsl #0x2]
- ldr r2, [r7, #0x4]
- mvn r3, lr
- and r3, r12, r3
- and r2, r2, lr
- orr r2, r3, r2
- str r2, [r4, #0x4]
- ldrh r12, [r7, #0x1e]
- ldr r3, [r1, #0x98]
- ldr r2, [r7, #0x8]
- mov r12, r12, asr #0x9
- and r12, r12, #0x7
- ldr r12, [r0, r12, lsl #0x2]
- mvn r0, r12
- and r3, r3, r0
- and r0, r2, r12
- orr r0, r3, r0
- str r0, [r4, #0x8]
- ldr r3, [r7, #0x10]
- ldr r0, [r7, #0xc]
- ldr r2, [r1, #0x9c]
- mvn r1, r3
- and r1, r2, r1
- and r0, r0, r3
- orr r0, r1, r0
- str r0, [r4, #0xc]
- ldr r0, [r7, #0x14]
- str r0, [r4, #0x10]
- ldrh r0, [r7, #0x1c]
- str r0, [r4, #0x14]
- ldrh r1, [r7, #0x1e]
- ands r0, r1, #0x1
- beq _020BA850
- ands r1, r1, #0x2
- ldrne r1, [r4, #0x0]
- add r0, r7, #0x2c
- orrne r1, r1, #0x1
- strne r1, [r4, #0x0]
- bne _020BA7F4
- ldr r1, [r0, #0x0]
- str r1, [r4, #0x18]
- ldr r1, [r0, #0x4]
- add r0, r0, #0x8
- str r1, [r4, #0x1c]
-_020BA7F4:
- ldrh r1, [r7, #0x1e]
- ands r1, r1, #0x4
- ldrne r1, [r4, #0x0]
- orrne r1, r1, #0x2
- strne r1, [r4, #0x0]
- bne _020BA820
- ldrsh r1, [r0, #0x0]
- strh r1, [r4, #0x20]
- ldrsh r1, [r0, #0x2]
- add r0, r0, #0x4
- strh r1, [r4, #0x22]
-_020BA820:
- ldrh r1, [r7, #0x1e]
- ands r1, r1, #0x8
- ldreq r1, [r0, #0x0]
- streq r1, [r4, #0x24]
- ldreq r0, [r0, #0x4]
- streq r0, [r4, #0x28]
- ldrne r0, [r4, #0x0]
- orrne r0, r0, #0x4
- strne r0, [r4, #0x0]
- ldr r0, [r4, #0x0]
- orr r0, r0, #0x8
- str r0, [r4, #0x0]
-_020BA850:
- ldr r0, [r8, #0x4]
- ldr r1, [r0, #0x8]
- cmp r1, #0x0
- beq _020BA890
- mov r2, r6, lsr #0x5
- add r2, r0, r2, lsl #0x2
- and r3, r6, #0x1f
- mov r12, #0x1
- mov r3, r12, lsl r3
- ldr r2, [r2, #0x3c]
- ands r2, r3, r2
- beq _020BA890
- ldr r3, [r0, #0xc]
- mov r0, r4
- mov r2, r6
- blx r3
-_020BA890:
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x18
- beq _020BA8BC
- ldrh r0, [r7, #0x20]
- strh r0, [r4, #0x2c]
- ldrh r0, [r7, #0x22]
- strh r0, [r4, #0x2e]
- ldr r0, [r7, #0x24]
- str r0, [r4, #0x30]
- ldr r0, [r7, #0x28]
- str r0, [r4, #0x34]
-_020BA8BC:
- str r4, [r8, #0xb0]
-_020BA8C0:
- cmp r5, #0x2
- bne _020BA8FC
- ldr r1, [r8, #0x8]
- mov r0, r8
- bic r1, r1, #0x40
- str r1, [r8, #0x8]
- ldr r1, [r8, #0x1c]
- blx r1
- ldr r0, [r8, #0x1c]
- cmp r0, #0x0
- ldrneb r5, [r8, #0x90]
- ldr r0, [r8, #0x8]
- moveq r5, #0x0
- and r0, r0, #0x40
- b _020BA900
-_020BA8FC:
- mov r0, #0x0
-_020BA900:
- cmp r0, #0x0
- bne _020BA9AC
- ldr r4, [r8, #0xb0]
- ldr r1, [r4, #0xc]
- ands r0, r1, #0x1f0000
- beq _020BA9A0
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x20
- bicne r0, r1, #0x1f0000
- strne r0, [r4, #0xc]
- ldr r0, [r8, #0x8]
- bic r0, r0, #0x2
- str r0, [r8, #0x8]
- ldr r0, [r8, #0x8]
- ands r0, r0, #0x100
- bne _020BA9AC
- ldr r0, _020BA9E4 ; =0x00293130
- ldr r3, _020BA9E8 ; =0x00002B2A
- str r0, [sp, #0x0]
- ldr r2, [r4, #0x4]
- add r1, sp, #0x4
- str r2, [sp, #0x4]
- ldr r6, [r4, #0x8]
- mov r2, #0x6
- str r6, [sp, #0x8]
- ldr r6, [r4, #0xc]
- str r6, [sp, #0xc]
- str r3, [sp, #0x10]
- ldr r3, [r4, #0x10]
- str r3, [sp, #0x14]
- ldr r3, [r4, #0x14]
- str r3, [sp, #0x18]
- bl FUN_020BB1C0
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x18
- beq _020BA9AC
- ldr r1, [r8, #0xf0]
- mov r0, r4
- blx r1
- b _020BA9AC
-_020BA9A0:
- ldr r0, [r8, #0x8]
- orr r0, r0, #0x2
- str r0, [r8, #0x8]
-_020BA9AC:
- cmp r5, #0x3
- addne sp, sp, #0x20
- ldmneia sp!, {r4-r8,pc}
- ldr r1, [r8, #0x8]
- mov r0, r8
- bic r1, r1, #0x40
- str r1, [r8, #0x8]
- ldr r1, [r8, #0x1c]
- blx r1
- add sp, sp, #0x20
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020BA9D8: .word UNK_021CEF80
-_020BA9DC: .word UNK_021CED18
-_020BA9E0: .word UNK_020FF9D0
-_020BA9E4: .word 0x00293130
-_020BA9E8: .word 0x00002B2A
-
- arm_func_start FUN_020BA9EC
-FUN_020BA9EC: ; 0x020BA9EC
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r1, [r5, #0x8]
- ands r0, r1, #0x200
- bne _020BAAAC
- ands r0, r1, #0x1
- beq _020BAAAC
- ldr r0, [r5, #0x18]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x8f]
- moveq r4, #0x0
- cmp r4, #0x1
- bne _020BAA58
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x18]
- blx r1
- ldr r0, [r5, #0x18]
- cmp r0, #0x0
- ldrneb r4, [r5, #0x8f]
- ldr r0, [r5, #0x8]
- moveq r4, #0x0
- and r0, r0, #0x40
- b _020BAA5C
-_020BAA58:
- mov r0, #0x0
-_020BAA5C:
- cmp r0, #0x0
- bne _020BAA8C
- ldr r0, [r5, #0x0]
- ldrb r0, [r0, #0x1]
- str r0, [sp, #0x0]
- ldr r0, [r5, #0x8]
- ands r0, r0, #0x100
- bne _020BAA8C
- add r1, sp, #0x0
- mov r0, #0x14
- mov r2, #0x1
- bl FUN_020BB1C0
-_020BAA8C:
- cmp r4, #0x3
- bne _020BAAAC
- ldr r1, [r5, #0x8]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r5, #0x8]
- ldr r1, [r5, #0x18]
- blx r1
-_020BAAAC:
- ldr r0, [r5, #0x0]
- add r0, r0, #0x2
- str r0, [r5, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020BAAC0
-FUN_020BAAC0: ; 0x020BAAC0
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldr r0, [r6, #0x8]
- ands r0, r0, #0x200
- bne _020BAC38
- ldr r1, [r6, #0x0]
- add r0, r6, #0x184
- ldrb r1, [r1, #0x1]
- strb r1, [r6, #0xac]
- ldr r1, [r6, #0x8]
- ldrb r4, [r6, #0xac]
- orr r1, r1, #0x4
- str r1, [r6, #0x8]
- str r0, [r6, #0xb8]
- ldr r0, [r6, #0x14]
- cmp r0, #0x0
- ldrneb r5, [r6, #0x8e]
- moveq r5, #0x0
- cmp r5, #0x1
- bne _020BAB44
- ldr r1, [r6, #0x8]
- mov r0, r6
- bic r1, r1, #0x40
- str r1, [r6, #0x8]
- ldr r1, [r6, #0x14]
- blx r1
- ldr r0, [r6, #0x14]
- cmp r0, #0x0
- ldrneb r5, [r6, #0x8e]
- ldr r0, [r6, #0x8]
- moveq r5, #0x0
- and r0, r0, #0x40
- b _020BAB48
-_020BAB44:
- mov r0, #0x0
-_020BAB48:
- cmp r0, #0x0
- bne _020BABAC
- ldr r12, [r6, #0x4]
- ldr r1, [r12, #0x18]
- cmp r1, #0x0
- beq _020BAB98
- mov r0, r4, lsr #0x5
- add r0, r12, r0, lsl #0x2
- and r2, r4, #0x1f
- mov r3, #0x1
- mov r2, r3, lsl r2
- ldr r0, [r0, #0x4c]
- ands r0, r2, r0
- beq _020BAB98
- ldr r0, [r6, #0xb8]
- ldr r3, [r12, #0x1c]
- mov r2, r4
- blx r3
- cmp r0, #0x0
- bne _020BABAC
-_020BAB98:
- ldr r1, [r6, #0x0]
- ldr r0, [r6, #0xb8]
- ldrb r1, [r1, #0x2]
- and r1, r1, #0x1
- str r1, [r0, #0x0]
-_020BABAC:
- cmp r5, #0x2
- bne _020BABE8
- ldr r1, [r6, #0x8]
- mov r0, r6
- bic r1, r1, #0x40
- str r1, [r6, #0x8]
- ldr r1, [r6, #0x14]
- blx r1
- ldr r0, [r6, #0x14]
- cmp r0, #0x0
- ldrneb r5, [r6, #0x8e]
- ldr r0, [r6, #0x8]
- moveq r5, #0x0
- and r0, r0, #0x40
- b _020BABEC
-_020BABE8:
- mov r0, #0x0
-_020BABEC:
- cmp r0, #0x0
- bne _020BAC18
- ldr r0, [r6, #0xb8]
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- ldrne r0, [r6, #0x8]
- orrne r0, r0, #0x1
- strne r0, [r6, #0x8]
- ldreq r0, [r6, #0x8]
- biceq r0, r0, #0x1
- streq r0, [r6, #0x8]
-_020BAC18:
- cmp r5, #0x3
- bne _020BAC38
- ldr r1, [r6, #0x8]
- mov r0, r6
- bic r1, r1, #0x40
- str r1, [r6, #0x8]
- ldr r1, [r6, #0x14]
- blx r1
-_020BAC38:
- ldr r0, [r6, #0x0]
- add r0, r0, #0x3
- str r0, [r6, #0x0]
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BAC48
-FUN_020BAC48: ; 0x020BAC48
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r1, [r4, #0x10]
- cmp r1, #0x0
- beq _020BAC60
- blx r1
-_020BAC60:
- ldr r0, [r4, #0x8]
- orr r0, r0, #0x20
- str r0, [r4, #0x8]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BAC70
-FUN_020BAC70: ; 0x020BAC70
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r1, [r4, #0xc]
- cmp r1, #0x0
- beq _020BAC88
- blx r1
-_020BAC88:
- ldr r0, [r4, #0x0]
- add r0, r0, #0x1
- str r0, [r4, #0x0]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BAC98
-FUN_020BAC98: ; 0x020BAC98
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x188
- mov r4, r0
- ldr r0, [r4, #0x0]
- and r0, r0, #0x10
- cmp r0, #0x10
- bne _020BAD2C
- add r1, r4, #0x3c
- mov r0, #0x0
- mov r2, #0x8
- bl MIi_CpuClear32
- add r1, r4, #0x44
- mov r0, #0x0
- mov r2, #0x8
- bl MIi_CpuClear32
- add r1, r4, #0x4c
- mov r0, #0x0
- mov r2, #0x8
- bl MIi_CpuClear32
- ldr r1, [r4, #0x8]
- cmp r1, #0x0
- beq _020BACF8
- add r0, r4, #0x3c
- bl FUN_020BAD74
-_020BACF8:
- ldr r1, [r4, #0x10]
- cmp r1, #0x0
- beq _020BAD0C
- add r0, r4, #0x44
- bl FUN_020BAD74
-_020BAD0C:
- ldr r1, [r4, #0x18]
- cmp r1, #0x0
- beq _020BAD20
- add r0, r4, #0x4c
- bl FUN_020BAD74
-_020BAD20:
- ldr r0, [r4, #0x0]
- bic r0, r0, #0x10
- str r0, [r4, #0x0]
-_020BAD2C:
- ldr r2, _020BAD70 ; =UNK_021CEF7C
- ldr r0, [r2, #0x0]
- cmp r0, #0x0
- beq _020BAD4C
- mov r1, r4
- bl FUN_020BADE4
- add sp, sp, #0x188
- ldmia sp!, {r4,pc}
-_020BAD4C:
- add r0, sp, #0x0
- mov r1, r4
- str r0, [r2, #0x0]
- bl FUN_020BADE4
- ldr r0, _020BAD70 ; =UNK_021CEF7C
- mov r1, #0x0
- str r1, [r0, #0x0]
- add sp, sp, #0x188
- ldmia sp!, {r4,pc}
- .balign 4
-_020BAD70: .word UNK_021CEF7C
-
- arm_func_start FUN_020BAD74
-FUN_020BAD74:
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- cmp r1, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r5,pc}
- mov r3, #0x1
- mov r4, #0x0
-_020BAD90:
- ldrb r2, [r1, #0x19]
- mov r5, r4
- cmp r2, #0x0
- ble _020BADD0
-_020BADA0:
- add r2, r1, r5, lsl #0x1
- ldrh r2, [r2, #0x1a]
- ands r2, r2, #0x100
- movne lr, r5, asr #0x5
- andne r2, r5, #0x1f
- ldrne r12, [r0, lr, lsl #0x2]
- add r5, r5, #0x1
- orrne r2, r12, r3, lsl r2
- strne r2, [r0, lr, lsl #0x2]
- ldrb r2, [r1, #0x19]
- cmp r5, r2
- blt _020BADA0
-_020BADD0:
- ldr r1, [r1, #0x10]
- cmp r1, #0x0
- bne _020BAD90
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020BADE4
-FUN_020BADE4: ; 0x020BADE4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- mov r1, r5
- mov r0, #0x0
- mov r2, #0x188
- bl MIi_CpuClearFast
- mov r0, #0x1
- str r0, [r5, #0xc4]
- str r0, [r5, #0x8]
- ldr r0, [r4, #0x30]
- ldr r2, _020BAF60 ; =UNK_02106614
- cmp r0, #0x0
- strne r0, [r5, #0x0]
- ldreq r1, [r4, #0x4]
- ldreq r0, [r1, #0x4]
- addeq r0, r1, r0
- streq r0, [r5, #0x0]
- str r4, [r5, #0x4]
- ldr r0, [r4, #0x4]
- ldr r1, _020BAF64 ; =UNK_02106608
- add r0, r0, #0x40
- str r0, [r5, #0xd4]
- ldr r12, [r4, #0x4]
- ldr r0, _020BAF68 ; =UNK_02106620
- ldr r3, [r12, #0x8]
- add r3, r12, r3
- str r3, [r5, #0xd8]
- ldr r12, [r4, #0x4]
- ldr r3, [r12, #0xc]
- add r3, r12, r3
- str r3, [r5, #0xdc]
- ldr r3, [r4, #0x4]
- ldrb r3, [r3, #0x15]
- ldr r2, [r2, r3, lsl #0x2]
- str r2, [r5, #0xe8]
- ldr r2, [r4, #0x4]
- ldrb r2, [r2, #0x15]
- ldr r1, [r1, r2, lsl #0x2]
- str r1, [r5, #0xec]
- ldr r1, [r4, #0x4]
- ldrb r1, [r1, #0x16]
- ldr r0, [r0, r1, lsl #0x2]
- str r0, [r5, #0xf0]
- ldr r0, [r4, #0x4]
- ldr r0, [r0, #0x1c]
- str r0, [r5, #0xe0]
- ldr r0, [r4, #0x4]
- ldr r0, [r0, #0x20]
- str r0, [r5, #0xe4]
- ldr r1, [r4, #0x20]
- cmp r1, #0x0
- beq _020BAEE0
- ldrb r0, [r4, #0x24]
- cmp r0, #0x20
- bhs _020BAEE0
- add r0, r5, r0, lsl #0x2
- str r1, [r0, #0xc]
- ldrb r0, [r4, #0x24]
- ldrb r1, [r4, #0x25]
- add r0, r5, r0
- strb r1, [r0, #0x8c]
-_020BAEE0:
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x1
- ldrne r0, [r5, #0x8]
- orrne r0, r0, #0x80
- strne r0, [r5, #0x8]
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x2
- ldrne r0, [r5, #0x8]
- orrne r0, r0, #0x100
- strne r0, [r5, #0x8]
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x4
- ldrne r0, [r5, #0x8]
- orrne r0, r0, #0x200
- strne r0, [r5, #0x8]
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x8
- ldrne r0, [r5, #0x8]
- orrne r0, r0, #0x400
- strne r0, [r5, #0x8]
- ldr r1, [r4, #0x28]
- cmp r1, #0x0
- beq _020BAF44
- mov r0, r5
- blx r1
-_020BAF44:
- mov r0, r5
- bl FUN_020BAF6C
- ldr r0, [r4, #0x0]
- bic r0, r0, #0x1
- str r0, [r4, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BAF60: .word UNK_02106614
-_020BAF64: .word UNK_02106608
-_020BAF68: .word UNK_02106620
-
- arm_func_start FUN_020BAF6C
-FUN_020BAF6C:
- stmdb sp!, {r4-r6,lr}
- mov r5, r0
- ldr r6, _020BAFB4 ; =UNK_02106730
- add r4, r5, #0x8
-_020BAF7C:
- ldr r1, [r4, #0x0]
- mov r0, r5
- bic r1, r1, #0x40
- str r1, [r4, #0x0]
- ldr r1, [r5, #0x0]
- ldrb r3, [r1, #0x0]
- and r1, r3, #0x1f
- ldr r2, [r6, r1, lsl #0x2]
- and r1, r3, #0xe0
- blx r2
- ldr r0, [r5, #0x8]
- ands r0, r0, #0x20
- beq _020BAF7C
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020BAFB4: .word UNK_02106730
-
- arm_func_start FUN_020BAFB8
-FUN_020BAFB8: ; 0x020BAFB8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x6c
- mov r6, r0
- ldr r12, [r6, #0x1c]
- mov r4, r1
- mov r5, r2
- mov r7, r3
- cmp r12, #0x1000
- beq _020BAFF8
- add r1, sp, #0x54
- mov r0, #0x1b
- mov r2, #0x3
- str r12, [sp, #0x54]
- str r12, [sp, #0x58]
- str r12, [sp, #0x5c]
- bl FUN_020BB1C0
-_020BAFF8:
- cmp r7, #0x0
- beq _020BB150
- ldr r0, [r6, #0x8]
- add r3, r6, r0
- ldrh r0, [r3, #0xa]
- add r2, r3, #0x4
- ldrh r1, [r2, r0]
- add r0, r2, r0
- mla r0, r1, r4, r0
- ldr r0, [r0, #0x4]
- add r4, r3, r0
- ldr r0, [r4, #0xc]
- ands r0, r0, #0x1f0000
- addeq sp, sp, #0x6c
- ldmeqia sp!, {r4-r7,pc}
- ldr r0, _020BB1B4 ; =0x00293130
- str r0, [sp, #0x0]
- ldr r0, [r4, #0x4]
- str r0, [sp, #0x4]
- ldr r0, [r4, #0x8]
- str r0, [sp, #0x8]
- ldr r1, [r4, #0xc]
- str r1, [sp, #0xc]
- ldrh r0, [r4, #0x1e]
- ands r0, r0, #0x20
- bicne r0, r1, #0x1f0000
- ldr r1, _020BB1B8 ; =0x00002B2A
- strne r0, [sp, #0xc]
- str r1, [sp, #0x10]
- ldr r2, [r4, #0x14]
- ldr r0, [sp, #0x0]
- str r2, [sp, #0x14]
- ldrh r3, [r4, #0x1c]
- add r1, sp, #0x4
- mov r2, #0x6
- str r3, [sp, #0x18]
- bl FUN_020BB1C0
- ldrh r0, [r4, #0x1e]
- ands r0, r0, #0x1
- beq _020BB150
- ldrb r12, [r6, #0x16]
- mov r3, #0x8
- ldr r1, _020BB1BC ; =UNK_02106620
- str r3, [sp, #0x1c]
- ldrh r2, [r4, #0x20]
- add r0, r4, #0x2c
- ldr r1, [r1, r12, lsl #0x2]
- strh r2, [sp, #0x48]
- ldrh r2, [r4, #0x22]
- strh r2, [sp, #0x4a]
- ldr r2, [r4, #0x24]
- str r2, [sp, #0x4c]
- ldr r2, [r4, #0x28]
- str r2, [sp, #0x50]
- ldrh r2, [r4, #0x1e]
- ands r2, r2, #0x2
- orrne r2, r3, #0x1
- strne r2, [sp, #0x1c]
- bne _020BB0F8
- ldr r2, [r0, #0x0]
- str r2, [sp, #0x34]
- ldr r2, [r0, #0x4]
- add r0, r0, #0x8
- str r2, [sp, #0x38]
-_020BB0F8:
- ldrh r2, [r4, #0x1e]
- ands r2, r2, #0x4
- ldrne r2, [sp, #0x1c]
- orrne r2, r2, #0x2
- strne r2, [sp, #0x1c]
- bne _020BB124
- ldrsh r2, [r0, #0x0]
- strh r2, [sp, #0x3c]
- ldrsh r2, [r0, #0x2]
- add r0, r0, #0x4
- strh r2, [sp, #0x3e]
-_020BB124:
- ldrh r2, [r4, #0x1e]
- ands r2, r2, #0x8
- ldreq r2, [r0, #0x0]
- streq r2, [sp, #0x40]
- ldreq r0, [r0, #0x4]
- streq r0, [sp, #0x44]
- ldrne r0, [sp, #0x1c]
- orrne r0, r0, #0x4
- strne r0, [sp, #0x1c]
- add r0, sp, #0x1c
- blx r1
-_020BB150:
- ldr r0, [r6, #0xc]
- add r2, r6, r0
- ldrh r0, [r2, #0x6]
- ldrh r1, [r2, r0]
- add r0, r2, r0
- mla r0, r1, r5, r0
- ldr r0, [r0, #0x4]
- add r2, r2, r0
- ldr r0, [r2, #0x8]
- ldr r1, [r2, #0xc]
- add r0, r2, r0
- bl FUN_020BB2B0
- ldr r3, [r6, #0x20]
- cmp r3, #0x1000
- addeq sp, sp, #0x6c
- ldmeqia sp!, {r4-r7,pc}
- add r1, sp, #0x60
- mov r0, #0x1b
- mov r2, #0x3
- str r3, [sp, #0x60]
- str r3, [sp, #0x64]
- str r3, [sp, #0x68]
- bl FUN_020BB1C0
- add sp, sp, #0x6c
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020BB1B4: .word 0x00293130
-_020BB1B8: .word 0x00002B2A
-_020BB1BC: .word UNK_02106620
-
- arm_func_start FUN_020BB1C0
-FUN_020BB1C0:
- stmdb sp!, {r4-r6,lr}
- ldr r3, _020BB2A4 ; =UNK_021D1C80
- mov r6, r0
- ldr r12, [r3, #0x0]
- mov r5, r1
- mov r4, r2
- cmp r12, #0x0
- beq _020BB278
- ldr r0, _020BB2A8 ; =UNK_021D1C84
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020BB24C
- ldr r2, [r12, #0x0]
- add r0, r2, #0x1
- add r1, r0, r4
- cmp r1, #0xc0
- bhi _020BB24C
- str r0, [r12, #0x0]
- ldr r0, [r3, #0x0]
- cmp r4, #0x0
- add r0, r0, r2, lsl #0x2
- str r6, [r0, #0x4]
- ldmeqia sp!, {r4-r6,pc}
- ldr r2, [r3, #0x0]
- mov r0, r5
- ldr r1, [r2], #0x4
- add r1, r2, r1, lsl #0x2
- mov r2, r4, lsl #0x2
- bl MIi_CpuCopyFast
- ldr r0, _020BB2A4 ; =UNK_021D1C80
- ldr r1, [r0, #0x0]
- ldr r0, [r1, #0x0]
- add r0, r0, r4
- str r0, [r1, #0x0]
- ldmia sp!, {r4-r6,pc}
-_020BB24C:
- ldr r0, [r12, #0x0]
- cmp r0, #0x0
- beq _020BB260
- bl FUN_020BB394
- b _020BB28C
-_020BB260:
- ldr r0, _020BB2A8 ; =UNK_021D1C84
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020BB28C
- bl FUN_020BB37C
- b _020BB28C
-_020BB278:
- ldr r0, _020BB2A8 ; =UNK_021D1C84
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020BB28C
- bl FUN_020BB37C
-_020BB28C:
- ldr r1, _020BB2AC ; =0x04000400
- mov r0, r5
- mov r2, r4, lsl #0x2
- str r6, [r1, #0x0]
- bl MIi_CpuSend32
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020BB2A4: .word UNK_021D1C80
-_020BB2A8: .word UNK_021D1C84
-_020BB2AC: .word 0x04000400
-
- arm_func_start FUN_020BB2B0
-FUN_020BB2B0: ; 0x020BB2B0
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r4, r1
- mov r5, r0
- cmp r4, #0x100
- blo _020BB2DC
- ldr r1, _020BB360 ; =GXi_DmaId
- mvn r0, #0x0
- ldr r1, [r1, #0x0]
- cmp r1, r0
- bne _020BB2F8
-_020BB2DC:
- mov r2, r4, lsr #0x2
- ldr r0, [r5, #0x0]
- add r1, r5, #0x4
- sub r2, r2, #0x1
- bl FUN_020BB1C0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020BB2F8:
- bl FUN_020BB394
- ldr r0, _020BB364 ; =UNK_021D1C88
- ldr r1, _020BB368 ; =UNK_021D1C84
- ldr r0, [r0, #0x0]
- mov r2, #0x1
- str r2, [r1, #0x0]
- cmp r0, #0x0
- beq _020BB33C
- ldr r0, _020BB360 ; =GXi_DmaId
- str r1, [sp, #0x0]
- ldr r0, [r0, #0x0]
- ldr r3, _020BB36C ; =FUN_020BB370
- mov r1, r5
- mov r2, r4
- bl MI_SendGXCommandAsyncFast
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020BB33C:
- ldr r0, _020BB360 ; =GXi_DmaId
- str r1, [sp, #0x0]
- ldr r0, [r0, #0x0]
- ldr r3, _020BB36C ; =FUN_020BB370
- mov r1, r5
- mov r2, r4
- bl MI_SendGXCommandAsync
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BB360: .word GXi_DmaId
-_020BB364: .word UNK_021D1C88
-_020BB368: .word UNK_021D1C84
-_020BB36C: .word FUN_020BB370
-
- arm_func_start FUN_020BB370
-FUN_020BB370: ; 0x020BB370
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020BB37C
-FUN_020BB37C: ; 0x020BB37C
- ldr r0, _020BB390 ; =UNK_021D1C84
-_020BB380:
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- bne _020BB380
- bx lr
- .balign 4
-_020BB390: .word UNK_021D1C84
-
- arm_func_start FUN_020BB394
-FUN_020BB394: ; 0x020BB394
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r0, _020BB3FC ; =UNK_021D1C84
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- beq _020BB3B0
- bl FUN_020BB37C
-_020BB3B0:
- ldr r0, _020BB400 ; =UNK_021D1C80
- ldr r0, [r0, #0x0]
- cmp r0, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r2, [r0, #0x0]
- cmp r2, #0x0
- addeq sp, sp, #0x4
- ldmeqia sp!, {pc}
- ldr r1, _020BB404 ; =0x04000400
- add r0, r0, #0x4
- mov r2, r2, lsl #0x2
- bl MIi_CpuSend32
- ldr r0, _020BB400 ; =UNK_021D1C80
- mov r1, #0x0
- ldr r0, [r0, #0x0]
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020BB3FC: .word UNK_021D1C84
-_020BB400: .word UNK_021D1C80
-_020BB404: .word 0x04000400
-
- arm_func_start FUN_020BB408
-FUN_020BB408: ; 0x020BB408
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x1c
- mov r5, r1
- mov r4, r2
- ldr r6, _020BB594 ; =UNK_021CED20
- ldr r1, _020BB598 ; =UNK_021CED64
- add r2, sp, #0x10
- bl MTX_MultVec43
- ldr r1, [sp, #0x14]
- ldr r0, [r6, #0x1c]
- ldr r2, [sp, #0x10]
- smull r8, r7, r1, r0
- ldr r0, [r6, #0xc]
- ldr r3, [sp, #0x18]
- smlal r8, r7, r2, r0
- ldr r1, [r6, #0x2c]
- ldr r0, [r6, #0x3c]
- smlal r8, r7, r3, r1
- mov r1, r8, lsr #0xc
- orr r1, r1, r7, lsl #0x14
- add r0, r1, r0
- bl FX_InvAsync
- ldr r2, [sp, #0x14]
- ldr r1, [r6, #0x10]
- ldr r0, [r6, #0x14]
- smull lr, r8, r2, r1
- smull r12, r9, r2, r0
- ldr r1, [sp, #0x10]
- ldr r3, [r6, #0x0]
- ldr r0, [sp, #0x18]
- smlal lr, r8, r1, r3
- ldr r7, [r6, #0x20]
- ldr r2, [r6, #0x30]
- smlal lr, r8, r0, r7
- mov r3, lr, lsr #0xc
- orr r3, r3, r8, lsl #0x14
- add r7, r3, r2
- ldr r3, [r6, #0x4]
- ldr r8, [r6, #0x24]
- smlal r12, r9, r1, r3
- smlal r12, r9, r0, r8
- mov r0, r12, lsr #0xc
- ldr r2, [r6, #0x34]
- orr r0, r0, r9, lsl #0x14
- add r6, r0, r2
- bl FX_GetDivResultFx64c
- mov r2, r7, asr #0x1f
- umull r9, lr, r0, r7
- mla lr, r0, r2, lr
- mov r3, #0x80000000
- mla lr, r1, r7, lr
- adds r9, r9, r3
- adc r2, lr, #0x0
- add r2, r2, #0x1000
- add r2, r2, r2, lsr #0x1f
- mov r7, r2, asr #0x1
- umull lr, r2, r0, r6
- mov r12, r6, asr #0x1f
- mla r2, r0, r12, r2
- mla r2, r1, r6, r2
- adds r3, lr, r3
- adc r0, r2, #0x0
- add r0, r0, #0x1000
- add r0, r0, r0, lsr #0x1f
- mov r8, #0x0
- mov r6, r0, asr #0x1
- cmp r7, #0x0
- blt _020BB530
- cmp r6, #0x0
- blt _020BB530
- cmp r7, #0x1000
- bgt _020BB530
- cmp r6, #0x1000
- ble _020BB534
-_020BB530:
- mvn r8, #0x0
-_020BB534:
- add r0, sp, #0x0
- add r1, sp, #0x4
- add r2, sp, #0x8
- add r3, sp, #0xc
- bl FUN_020B8200
- ldr r2, [sp, #0x0]
- ldr r0, [sp, #0x8]
- ldr r12, [sp, #0xc]
- sub r0, r0, r2
- mul r0, r7, r0
- add r1, r0, #0x800
- ldr r3, [sp, #0x4]
- add r1, r2, r1, asr #0xc
- sub r0, r12, r3
- mul r0, r6, r0
- str r1, [r5, #0x0]
- ldr r1, [sp, #0x4]
- add r0, r0, #0x800
- rsb r1, r1, #0xbf
- sub r1, r1, r0, asr #0xc
- mov r0, r8
- str r1, [r4, #0x0]
- add sp, sp, #0x1c
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020BB594: .word UNK_021CED20
-_020BB598: .word UNK_021CED64
-
- arm_func_start FUN_020BB59C
-FUN_020BB59C: ; 0x020BB59C
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r1, [r5, #0x0]
- ldr r0, _020BB7C8 ; =0x30415642
- cmp r1, r0
- bhi _020BB5F4
- cmp r1, r0
- bhs _020BB7B0
- ldr r0, _020BB7CC ; =0x30414D42
- cmp r1, r0
- bhi _020BB5E4
- cmp r1, r0
- bhs _020BB7B0
- ldr r0, _020BB7D0 ; =0x30414342
- cmp r1, r0
- beq _020BB7B0
- b _020BB7BC
-_020BB5E4:
- ldr r0, _020BB7D4 ; =0x30415442
- cmp r1, r0
- beq _020BB7B0
- b _020BB7BC
-_020BB5F4:
- ldr r0, _020BB7D8 ; =0x30505442
- cmp r1, r0
- bhi _020BB618
- cmp r1, r0
- bhs _020BB7B0
- ldr r0, _020BB7DC ; =0x30444D42
- cmp r1, r0
- beq _020BB624
- b _020BB7BC
-_020BB618:
- ldr r0, _020BB7E0 ; =0x30585442
- cmp r1, r0
- bne _020BB7BC
-_020BB624:
- mov r11, #0x1
- mov r0, r5
- mov r9, r11
- mov r8, r11
- bl FUN_020BC0FC
- movs r4, r0
- beq _020BB77C
- bl FUN_020B7E1C
- mov r7, r0
- mov r0, r4
- bl FUN_020B7E10
- mov r6, r0
- mov r0, r4
- bl FUN_020B7CE4
- mov r10, r0
- cmp r7, #0x0
- beq _020BB68C
- ldr r0, _020BB7E4 ; =UNK_021064B8
- mov r1, #0x0
- ldr r3, [r0, #0x0]
- mov r0, r7
- mov r2, r1
- blx r3
- movs r7, r0
- moveq r11, #0x0
- b _020BB690
-_020BB68C:
- mov r7, #0x0
-_020BB690:
- cmp r6, #0x0
- beq _020BB6BC
- ldr r1, _020BB7E4 ; =UNK_021064B8
- mov r0, r6
- ldr r3, [r1, #0x0]
- mov r1, #0x1
- mov r2, #0x0
- blx r3
- movs r6, r0
- moveq r9, #0x0
- b _020BB6C0
-_020BB6BC:
- mov r6, #0x0
-_020BB6C0:
- cmp r10, #0x0
- beq _020BB6F0
- ldr r1, _020BB7E8 ; =UNK_021064C0
- ldrh r2, [r4, #0x20]
- ldr r3, [r1, #0x0]
- mov r0, r10
- and r1, r2, #0x8000
- mov r2, #0x0
- blx r3
- movs r10, r0
- moveq r8, #0x0
- b _020BB6F4
-_020BB6F0:
- mov r10, #0x0
-_020BB6F4:
- cmp r11, #0x0
- beq _020BB70C
- cmp r9, #0x0
- beq _020BB70C
- cmp r8, #0x0
- bne _020BB748
-_020BB70C:
- ldr r1, _020BB7EC ; =UNK_021064C4
- mov r0, r10
- ldr r1, [r1, #0x0]
- blx r1
- ldr r1, _020BB7F0 ; =UNK_021064BC
- mov r0, r6
- ldr r1, [r1, #0x0]
- blx r1
- ldr r1, _020BB7F0 ; =UNK_021064BC
- mov r0, r7
- ldr r1, [r1, #0x0]
- blx r1
- add sp, sp, #0x4
- mov r0, #0x0
- ldmia sp!, {r4-r11,pc}
-_020BB748:
- mov r0, r4
- mov r1, r7
- mov r2, r6
- bl FUN_020B7DFC
- mov r0, r4
- mov r1, r10
- bl FUN_020B7CDC
- mov r0, r4
- mov r1, #0x1
- bl FUN_020B7D28
- mov r0, r4
- mov r1, #0x1
- bl FUN_020B7C78
-_020BB77C:
- ldr r1, [r5, #0x0]
- ldr r0, _020BB7DC ; =0x30444D42
- cmp r1, r0
- bne _020BB7A4
- mov r0, r5
- bl FUN_020BC13C
- cmp r4, #0x0
- beq _020BB7A4
- mov r1, r4
- bl FUN_020B7790
-_020BB7A4:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,pc}
-_020BB7B0:
- add sp, sp, #0x4
- mov r0, #0x1
- ldmia sp!, {r4-r11,pc}
-_020BB7BC:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020BB7C8: .word 0x30415642
-_020BB7CC: .word 0x30414D42
-_020BB7D0: .word 0x30414342
-_020BB7D4: .word 0x30415442
-_020BB7D8: .word 0x30505442
-_020BB7DC: .word 0x30444D42
-_020BB7E0: .word 0x30585442
-_020BB7E4: .word UNK_021064B8
-_020BB7E8: .word UNK_021064C0
-_020BB7EC: .word UNK_021064C4
-_020BB7F0: .word UNK_021064BC
-
- arm_func_start FUN_020BB7F4
-FUN_020BB7F4: ; 0x020BB7F4
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- bl G3X_Init
- bl FUN_020B84D8
- ldr r1, _020BB820 ; =0x04000600
- ldr r0, [r1, #0x0]
- bic r0, r0, #0xc0000000
- orr r0, r0, #0x80000000
- str r0, [r1, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020BB820: .word 0x04000600
-
- arm_func_start FUN_020BB824
-FUN_020BB824: ; 0x020BB824
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x40
- mov r6, r0
- mov r5, r1
- bl FUN_020BB394
- ldr r0, _020BB8B4 ; =0x04000440
- mov r2, #0x0
- ldr r1, _020BB8B8 ; =0x04000444
- str r2, [r0, #0x0]
- ldr r0, _020BB8BC ; =0x04000454
- str r2, [r1, #0x0]
- str r2, [r0, #0x0]
- cmp r6, #0x0
- beq _020BB87C
- add r4, sp, #0x0
-_020BB860:
- mov r0, r4
- bl G3X_GetClipMtx
- cmp r0, #0x0
- bne _020BB860
- add r0, sp, #0x0
- mov r1, r6
- bl MTX_Copy44To43_
-_020BB87C:
- cmp r5, #0x0
- beq _020BB894
-_020BB884:
- mov r0, r5
- bl G3X_GetVectorMtx
- cmp r0, #0x0
- bne _020BB884
-_020BB894:
- ldr r1, _020BB8C0 ; =0x04000448
- mov r2, #0x1
- ldr r0, _020BB8B4 ; =0x04000440
- str r2, [r1, #0x0]
- mov r1, #0x2
- str r1, [r0, #0x0]
- add sp, sp, #0x40
- ldmia sp!, {r4-r6,pc}
- .balign 4
-_020BB8B4: .word 0x04000440
-_020BB8B8: .word 0x04000444
-_020BB8BC: .word 0x04000454
-_020BB8C0: .word 0x04000448
-
- arm_func_start thunk_FUN_020ae84c
-thunk_FUN_020ae84c: ; 0x020BB8C4
- ldr ip, _020BB8CC ; =FUN_020AE84C
- bx r12
- .balign 4
-_020BB8CC: .word FUN_020AE84C
-
- arm_func_start FUN_020BB8D0
-FUN_020BB8D0: ; 0x020BB8D0
- stmdb sp!, {r4,lr}
- mov r4, r0
- mov r0, r1
- mov r1, r2
- bl FUN_020B81B0
- mov r1, r0
- mov r0, r4
- bl FUN_020AE868
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BB8F4
-FUN_020BB8F4: ; 0x020BB8F4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BB910:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBC74
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BB910
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BB934
-FUN_020BB934: ; 0x020BB934
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BB950:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBCB8
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BB950
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BB974
-FUN_020BB974: ; 0x020BB974
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BB990:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBCFC
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BB990
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BB9B4
-FUN_020BB9B4: ; 0x020BB9B4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BB9D0:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBD40
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BB9D0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BB9F4
-FUN_020BB9F4: ; 0x020BB9F4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBA10:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBD84
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBA10
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBA34
-FUN_020BBA34: ; 0x020BBA34
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBA50:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBDC8
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBA50
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBA74
-FUN_020BBA74: ; 0x020BBA74
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBA90:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBE0C
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBA90
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBAB4
-FUN_020BBAB4: ; 0x020BBAB4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBAD0:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBE50
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBAD0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBAF4
-FUN_020BBAF4: ; 0x020BBAF4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBB10:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBE94
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBB10
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBB34
-FUN_020BBB34: ; 0x020BBB34
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBB50:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBED8
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBB50
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBB74
-FUN_020BBB74: ; 0x020BBB74
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBB90:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBF1C
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBB90
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBBB4
-FUN_020BBBB4: ; 0x020BBBB4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBBD0:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBF60
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBBD0
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBBF4
-FUN_020BBBF4: ; 0x020BBBF4
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBC10:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBFA4
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBC10
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBC34
-FUN_020BBC34: ; 0x020BBC34
- stmdb sp!, {r4-r6,lr}
- mov r6, r0
- ldrb r0, [r6, #0x18]
- mov r5, r1
- mov r4, #0x0
- cmp r0, #0x0
- ldmlsia sp!, {r4-r6,pc}
-_020BBC50:
- mov r0, r6
- mov r1, r4
- mov r2, r5
- bl FUN_020BBFE8
- ldrb r0, [r6, #0x18]
- add r4, r4, #0x1
- cmp r4, r0
- blo _020BBC50
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BBC74
-FUN_020BBC74: ; 0x020BBC74
- ldr r3, [r0, #0x8]
- cmp r2, #0x0
- add r12, r0, r3
- ldrh r0, [r12, #0xa]
- add r3, r12, #0x4
- ldrh r2, [r3, r0]
- add r0, r3, r0
- mla r0, r2, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r12, r0
- ldrne r0, [r1, #0xc]
- orrne r0, r0, #0x800
- strne r0, [r1, #0xc]
- ldreq r0, [r1, #0xc]
- biceq r0, r0, #0x800
- streq r0, [r1, #0xc]
- bx lr
-
- arm_func_start FUN_020BBCB8
-FUN_020BBCB8: ; 0x020BBCB8
- ldr r3, [r0, #0x8]
- cmp r2, #0x0
- add r12, r0, r3
- ldrh r0, [r12, #0xa]
- add r3, r12, #0x4
- ldrh r2, [r3, r0]
- add r0, r3, r0
- mla r0, r2, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r12, r0
- ldrne r0, [r1, #0xc]
- orrne r0, r0, #0x1000
- strne r0, [r1, #0xc]
- ldreq r0, [r1, #0xc]
- biceq r0, r0, #0x1000
- streq r0, [r1, #0xc]
- bx lr
-
- arm_func_start FUN_020BBCFC
-FUN_020BBCFC: ; 0x020BBCFC
- ldr r3, [r0, #0x8]
- cmp r2, #0x0
- add r12, r0, r3
- ldrh r0, [r12, #0xa]
- add r3, r12, #0x4
- ldrh r2, [r3, r0]
- add r0, r3, r0
- mla r0, r2, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r12, r0
- ldrne r0, [r1, #0xc]
- orrne r0, r0, #0x2000
- strne r0, [r1, #0xc]
- ldreq r0, [r1, #0xc]
- biceq r0, r0, #0x2000
- streq r0, [r1, #0xc]
- bx lr
-
- arm_func_start FUN_020BBD40
-FUN_020BBD40: ; 0x020BBD40
- ldr r3, [r0, #0x8]
- cmp r2, #0x0
- add r12, r0, r3
- ldrh r0, [r12, #0xa]
- add r3, r12, #0x4
- ldrh r2, [r3, r0]
- add r0, r3, r0
- mla r0, r2, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r12, r0
- ldrne r0, [r1, #0xc]
- orrne r0, r0, #0x4000
- strne r0, [r1, #0xc]
- ldreq r0, [r1, #0xc]
- biceq r0, r0, #0x4000
- streq r0, [r1, #0xc]
- bx lr
-
- arm_func_start FUN_020BBD84
-FUN_020BBD84: ; 0x020BBD84
- ldr r3, [r0, #0x8]
- cmp r2, #0x0
- add r12, r0, r3
- ldrh r0, [r12, #0xa]
- add r3, r12, #0x4
- ldrh r2, [r3, r0]
- add r0, r3, r0
- mla r0, r2, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r12, r0
- ldrne r0, [r1, #0xc]
- orrne r0, r0, #0x8000
- strne r0, [r1, #0xc]
- ldreq r0, [r1, #0xc]
- biceq r0, r0, #0x8000
- streq r0, [r1, #0xc]
- bx lr
-
- arm_func_start FUN_020BBDC8
-FUN_020BBDC8: ; 0x020BBDC8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x8]
- add lr, r0, r3
- ldrh r0, [lr, #0xa]
- add r12, lr, #0x4
- ldrh r3, [r12, r0]
- add r0, r12, r0
- mla r0, r3, r1, r0
- ldr r0, [r0, #0x4]
- add r1, lr, r0
- ldr r0, [r1, #0xc]
- bic r0, r0, #0x1f0000
- orr r0, r0, r2, lsl #0x10
- str r0, [r1, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BBE0C
-FUN_020BBE0C: ; 0x020BBE0C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x8]
- add lr, r0, r3
- ldrh r0, [lr, #0xa]
- add r12, lr, #0x4
- ldrh r3, [r12, r0]
- add r0, r12, r0
- mla r0, r3, r1, r0
- ldr r0, [r0, #0x4]
- add r1, lr, r0
- ldr r0, [r1, #0xc]
- bic r0, r0, #0x3f000000
- orr r0, r0, r2, lsl #0x18
- str r0, [r1, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BBE50
-FUN_020BBE50: ; 0x020BBE50
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x8]
- add lr, r0, r3
- ldrh r0, [lr, #0xa]
- add r12, lr, #0x4
- ldrh r3, [r12, r0]
- add r0, r12, r0
- mla r0, r3, r1, r0
- ldr r0, [r0, #0x4]
- add r1, lr, r0
- ldr r0, [r1, #0xc]
- bic r0, r0, #0xc0
- orr r0, r0, r2, lsl #0x6
- str r0, [r1, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BBE94
-FUN_020BBE94: ; 0x020BBE94
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x8]
- add lr, r0, r3
- ldrh r0, [lr, #0xa]
- add r12, lr, #0x4
- ldrh r3, [r12, r0]
- add r0, r12, r0
- mla r0, r3, r1, r0
- ldr r0, [r0, #0x4]
- add r1, lr, r0
- ldr r0, [r1, #0xc]
- bic r0, r0, #0x30
- orr r0, r0, r2, lsl #0x4
- str r0, [r1, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BBED8
-FUN_020BBED8: ; 0x020BBED8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r3, [r0, #0x8]
- add lr, r0, r3
- ldrh r0, [lr, #0xa]
- add r12, lr, #0x4
- ldrh r3, [r12, r0]
- add r0, r12, r0
- mla r0, r3, r1, r0
- ldr r0, [r0, #0x4]
- add r1, lr, r0
- ldr r0, [r1, #0xc]
- bic r0, r0, #0xf
- orr r0, r0, r2
- str r0, [r1, #0xc]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BBF1C
-FUN_020BBF1C: ; 0x020BBF1C
- stmdb sp!, {r4,lr}
- ldr r12, [r0, #0x8]
- ldr r3, _020BBF5C ; =0x8000FFFF
- add r4, r0, r12
- ldrh r0, [r4, #0xa]
- add lr, r4, #0x4
- ldrh r12, [lr, r0]
- add r0, lr, r0
- mla r0, r12, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r4, r0
- ldr r0, [r1, #0x8]
- and r0, r0, r3
- orr r0, r0, r2, lsl #0x10
- str r0, [r1, #0x8]
- ldmia sp!, {r4,pc}
- .balign 4
-_020BBF5C: .word 0x8000FFFF
-
- arm_func_start FUN_020BBF60
-FUN_020BBF60: ; 0x020BBF60
- stmdb sp!, {r4,lr}
- ldr r12, [r0, #0x8]
- mov r3, #0x8000
- add r4, r0, r12
- ldrh r12, [r4, #0xa]
- add lr, r4, #0x4
- rsb r0, r3, #0x0
- ldrh r3, [lr, r12]
- add r12, lr, r12
- mla r1, r3, r1, r12
- ldr r1, [r1, #0x4]
- add r3, r4, r1
- ldr r1, [r3, #0x8]
- and r0, r1, r0
- orr r0, r0, r2
- str r0, [r3, #0x8]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BBFA4
-FUN_020BBFA4: ; 0x020BBFA4
- stmdb sp!, {r4,lr}
- ldr r12, [r0, #0x8]
- ldr r3, _020BBFE4 ; =0x8000FFFF
- add r4, r0, r12
- ldrh r0, [r4, #0xa]
- add lr, r4, #0x4
- ldrh r12, [lr, r0]
- add r0, lr, r0
- mla r0, r12, r1, r0
- ldr r0, [r0, #0x4]
- add r1, r4, r0
- ldr r0, [r1, #0x4]
- and r0, r0, r3
- orr r0, r0, r2, lsl #0x10
- str r0, [r1, #0x4]
- ldmia sp!, {r4,pc}
- .balign 4
-_020BBFE4: .word 0x8000FFFF
-
- arm_func_start FUN_020BBFE8
-FUN_020BBFE8: ; 0x020BBFE8
- stmdb sp!, {r4,lr}
- ldr r12, [r0, #0x8]
- mov r3, #0x8000
- add r4, r0, r12
- ldrh r12, [r4, #0xa]
- add lr, r4, #0x4
- rsb r0, r3, #0x0
- ldrh r3, [lr, r12]
- add r12, lr, r12
- mla r1, r3, r1, r12
- ldr r1, [r1, #0x4]
- add r3, r4, r1
- ldr r1, [r3, #0x4]
- and r0, r1, r0
- orr r0, r0, r2
- str r0, [r3, #0x4]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BC02C
-FUN_020BC02C: ; 0x020BC02C
- stmdb sp!, {r4-r6,lr}
- ldrb r4, [r0, #0x18]
- ldr r3, [r0, #0x8]
- mov lr, #0x0
- cmp r4, #0x0
- add r12, r0, r3
- ldmlsia sp!, {r4-r6,pc}
- mvn r3, r2
- add r0, r12, #0x4
-_020BC050:
- ldrh r5, [r12, #0xa]
- cmp r1, #0x0
- ldrh r6, [r0, r5]
- add r5, r0, r5
- mla r5, r6, lr, r5
- ldr r5, [r5, #0x4]
- add lr, lr, #0x1
- add r6, r12, r5
- ldrne r5, [r6, #0x10]
- orrne r5, r5, r2
- strne r5, [r6, #0x10]
- ldreq r5, [r6, #0x10]
- andeq r5, r5, r3
- streq r5, [r6, #0x10]
- cmp lr, r4
- blo _020BC050
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BC094
-FUN_020BC094: ; 0x020BC094
- stmdb sp!, {r4-r6,lr}
- ldrb r4, [r0, #0x18]
- ldr r3, [r0, #0x8]
- mov lr, #0x0
- cmp r4, #0x0
- add r12, r0, r3
- ldmlsia sp!, {r4-r6,pc}
- mvn r3, r2
- add r0, r12, #0x4
-_020BC0B8:
- ldrh r5, [r12, #0xa]
- cmp r1, #0x0
- ldrh r6, [r0, r5]
- add r5, r0, r5
- mla r5, r6, lr, r5
- ldr r5, [r5, #0x4]
- add lr, lr, #0x1
- add r6, r12, r5
- ldrneh r5, [r6, #0x1e]
- orrne r5, r5, r2
- strneh r5, [r6, #0x1e]
- ldreqh r5, [r6, #0x1e]
- andeq r5, r5, r3
- streqh r5, [r6, #0x1e]
- cmp lr, r4
- blo _020BC0B8
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BC0FC
-FUN_020BC0FC: ; 0x020BC0FC
- ldrh r2, [r0, #0xc]
- ldrh r1, [r0, #0xe]
- add r3, r0, r2
- cmp r1, #0x1
- bne _020BC12C
- ldr r2, [r0, #0x0]
- ldr r1, _020BC138 ; =0x30585442
- cmp r2, r1
- ldreq r1, [r3, #0x0]
- addeq r0, r0, r1
- movne r0, #0x0
- bx lr
-_020BC12C:
- ldr r1, [r3, #0x4]
- add r0, r0, r1
- bx lr
- .balign 4
-_020BC138: .word 0x30585442
-
- arm_func_start FUN_020BC13C
-FUN_020BC13C:
- ldrh r1, [r0, #0xc]
- ldr r1, [r0, r1]
- add r0, r0, r1
- bx lr
-
- arm_func_start FUN_020BC14C
-FUN_020BC14C:
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldrb r2, [r0, #0x1]
- cmp r2, #0x10
- bhs _020BC1E4
- cmp r2, #0x0
- ldr lr, [r1, #0x0]
- ldr r12, [r1, #0x4]
- ldr r3, [r1, #0x8]
- ldr r2, [r1, #0xc]
- mov r4, #0x0
- bls _020BC294
- ldrh r5, [r0, #0x6]
- mov r1, r4
- add r6, r0, r5
- ldrh r5, [r6, #0x2]
- add r6, r6, r5
-_020BC190:
- ldr r5, [r6, r1]
- add r7, r6, r1
- cmp r5, lr
- bne _020BC1CC
- ldr r5, [r7, #0x4]
- cmp r5, r12
- bne _020BC1CC
- ldr r5, [r7, #0x8]
- cmp r5, r3
- bne _020BC1CC
- ldr r5, [r7, #0xc]
- cmp r5, r2
- addeq sp, sp, #0x4
- moveq r0, r4
- ldmeqia sp!, {r4-r7,pc}
-_020BC1CC:
- ldrb r5, [r0, #0x1]
- add r4, r4, #0x1
- add r1, r1, #0x10
- cmp r4, r5
- blo _020BC190
- b _020BC294
-_020BC1E4:
- add r3, r0, #0x8
- ldrb r2, [r3, #0x1]
- cmp r2, #0x0
- beq _020BC294
- ldrb r5, [r3, r2, lsl #0x2]
- ldrb r4, [r3, #0x0]
- add r2, r3, r2, lsl #0x2
- cmp r4, r5
- bls _020BC238
-_020BC208:
- mov r4, r5, asr #0x5
- ldr r12, [r1, r4, lsl #0x2]
- and r4, r5, #0x1f
- mov r4, r12, lsr r4
- and r4, r4, #0x1
- add r4, r2, r4
- ldrb r12, [r4, #0x1]
- ldrb r4, [r2, #0x0]
- ldrb r5, [r3, r12, lsl #0x2]
- add r2, r3, r12, lsl #0x2
- cmp r4, r5
- bhi _020BC208
-_020BC238:
- ldrh r4, [r0, #0x6]
- ldr r3, [r1, #0x0]
- add r12, r0, r4
- ldrh r4, [r12, #0x2]
- ldrb r0, [r2, #0x3]
- add r4, r12, r4
- ldr r2, [r4, r0, lsl #0x4]
- add r4, r4, r0, lsl #0x4
- cmp r2, r3
- bne _020BC294
- ldr r3, [r4, #0x4]
- ldr r2, [r1, #0x4]
- cmp r3, r2
- bne _020BC294
- ldr r3, [r4, #0x8]
- ldr r2, [r1, #0x8]
- cmp r3, r2
- bne _020BC294
- ldr r2, [r4, #0xc]
- ldr r1, [r1, #0xc]
- cmp r2, r1
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
-_020BC294:
- mvn r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BC2A0
-FUN_020BC2A0: ; 0x020BC2A0
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldrb r2, [r0, #0x1]
- cmp r2, #0x10
- bhs _020BC34C
- cmp r2, #0x0
- ldr lr, [r1, #0x0]
- ldr r12, [r1, #0x4]
- ldr r3, [r1, #0x8]
- ldr r2, [r1, #0xc]
- mov r4, #0x0
- bls _020BC404
- ldrh r5, [r0, #0x6]
- mov r1, r4
- add r6, r0, r5
- ldrh r5, [r6, #0x2]
- add r6, r6, r5
-_020BC2E4:
- ldr r5, [r6, r1]
- add r7, r6, r1
- cmp r5, lr
- bne _020BC334
- ldr r5, [r7, #0x4]
- cmp r5, r12
- bne _020BC334
- ldr r5, [r7, #0x8]
- cmp r5, r3
- bne _020BC334
- ldr r5, [r7, #0xc]
- cmp r5, r2
- bne _020BC334
- ldrh r2, [r0, #0x6]
- add sp, sp, #0x4
- ldrh r1, [r0, r2]
- add r0, r0, r2
- add r0, r0, #0x4
- mla r0, r1, r4, r0
- ldmia sp!, {r4-r7,pc}
-_020BC334:
- ldrb r5, [r0, #0x1]
- add r4, r4, #0x1
- add r1, r1, #0x10
- cmp r4, r5
- blo _020BC2E4
- b _020BC404
-_020BC34C:
- add r3, r0, #0x8
- ldrb r2, [r3, #0x1]
- cmp r2, #0x0
- beq _020BC404
- ldrb r5, [r3, r2, lsl #0x2]
- ldrb r4, [r3, #0x0]
- add r2, r3, r2, lsl #0x2
- cmp r4, r5
- bls _020BC3A0
-_020BC370:
- mov r4, r5, asr #0x5
- ldr r12, [r1, r4, lsl #0x2]
- and r4, r5, #0x1f
- mov r4, r12, lsr r4
- and r4, r4, #0x1
- add r4, r2, r4
- ldrb r12, [r4, #0x1]
- ldrb r4, [r2, #0x0]
- ldrb r5, [r3, r12, lsl #0x2]
- add r2, r3, r12, lsl #0x2
- cmp r4, r5
- bhi _020BC370
-_020BC3A0:
- ldrh r4, [r0, #0x6]
- ldrb r2, [r2, #0x3]
- ldr r3, [r1, #0x0]
- add r0, r0, r4
- ldrh r4, [r0, #0x2]
- add r12, r0, r4
- ldr r4, [r12, r2, lsl #0x4]
- add r12, r12, r2, lsl #0x4
- cmp r4, r3
- bne _020BC404
- ldr r4, [r12, #0x4]
- ldr r3, [r1, #0x4]
- cmp r4, r3
- bne _020BC404
- ldr r4, [r12, #0x8]
- ldr r3, [r1, #0x8]
- cmp r4, r3
- bne _020BC404
- ldr r3, [r12, #0xc]
- ldr r1, [r1, #0xc]
- cmp r3, r1
- ldreqh r1, [r0], #0x4
- addeq sp, sp, #0x4
- mlaeq r0, r1, r2, r0
- ldmeqia sp!, {r4-r7,pc}
-_020BC404:
- mov r0, #0x0
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BC410
-FUN_020BC410: ; 0x020BC410
- ldrh r3, [r0, #0x12]
- add r0, r0, #0xc
- ldrh r2, [r0, r3]
- add r0, r0, r3
- add r0, r0, #0x4
- mla r0, r2, r1, r0
- bx lr
-
- arm_func_start FUN_020BC42C
-FUN_020BC42C: ; 0x020BC42C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r2
- bl FUN_020BC410
- ldrsh r1, [r0, #0x4]
- ldrh r3, [r0, #0x6]
- mul r2, r1, r4
- add r3, r5, r3
- mov r2, r2, lsr #0xc
- b _020BC45C
-_020BC458:
- sub r2, r2, #0x1
-_020BC45C:
- cmp r2, #0x0
- beq _020BC474
- mov r1, r2, lsl #0x2
- ldrh r1, [r3, r1]
- cmp r1, r4
- bhs _020BC458
-_020BC474:
- ldrh r1, [r0, #0x0]
- b _020BC480
-_020BC47C:
- add r2, r2, #0x1
-_020BC480:
- add r0, r2, #0x1
- cmp r0, r1
- bhs _020BC49C
- add r0, r3, r2, lsl #0x2
- ldrh r0, [r0, #0x4]
- cmp r0, r4
- bls _020BC47C
-_020BC49C:
- add r0, r3, r2, lsl #0x2
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020BC4A8
-FUN_020BC4A8: ; 0x020BC4A8
- ldrh r2, [r0, #0xa]
- add r0, r0, r2
- add r0, r0, r1, lsl #0x4
- bx lr
-
- arm_func_start FUN_020BC4B8
-FUN_020BC4B8: ; 0x020BC4B8
- ldrh r2, [r0, #0x8]
- add r0, r0, r2
- add r0, r0, r1, lsl #0x4
- bx lr
-
- arm_func_start FUN_020BC4C8
-FUN_020BC4C8: ; 0x020BC4C8
- ldrh r2, [r0, #0xc]
- ldr r2, [r0, r2]
- add r12, r0, r2
- ldrh r2, [r12, #0xe]
- add r3, r12, #0x8
- ldrh r0, [r3, r2]
- add r2, r3, r2
- add r2, r2, #0x4
- mul r1, r0, r1
- adds r0, r2, r1
- ldrne r0, [r0, #0x0]
- addne r0, r12, r0
- moveq r0, #0x0
- bx lr
-
- arm_func_start FUN_020BC500
-FUN_020BC500:
- stmdb sp!, {r4,lr}
- ands r4, r3, #0x8000
- beq _020BC5E0
- mov r2, #0x0
- str r2, [r0, #0x20]
- ldr r4, [r0, #0x20]
- ldr r2, _020BC684 ; =0x00007FFF
- str r4, [r0, #0x1c]
- ldr r4, [r0, #0x1c]
- and r3, r3, r2
- str r4, [r0, #0x18]
- ldr r4, [r0, #0x18]
- mov r2, #0x3
- str r4, [r0, #0x14]
- ldr r4, [r0, #0x14]
- mul r2, r3, r2
- str r4, [r0, #0x10]
- ldr r4, [r0, #0x10]
- mov r3, r2, lsl #0x1
- str r4, [r0, #0xc]
- ldr r4, [r0, #0xc]
- add r2, r1, r2, lsl #0x1
- str r4, [r0, #0x8]
- ldr r4, [r0, #0x8]
- str r4, [r0, #0x4]
- ldr r4, [r0, #0x4]
- str r4, [r0, #0x0]
- ldrsh r4, [r1, r3]
- ldrsh r12, [r2, #0x2]
- ldrsh r3, [r2, #0x4]
- and r1, r4, #0xf
- ands r4, r4, #0x10
- movne lr, #0x1000
- rsbne lr, lr, #0x0
- moveq lr, #0x1000
- str lr, [r0, r1, lsl #0x2]
- ldr r4, _020BC688 ; =UNK_020FFA14
- ldr lr, _020BC68C ; =UNK_020FFA15
- ldrb r4, [r4, r1, lsl #0x2]
- str r12, [r0, r4, lsl #0x2]
- ldrb lr, [lr, r1, lsl #0x2]
- str r3, [r0, lr, lsl #0x2]
- ldrsh lr, [r2, #0x0]
- ands lr, lr, #0x20
- ldr lr, _020BC690 ; =UNK_020FFA16
- rsbne r3, r3, #0x0
- ldrb lr, [lr, r1, lsl #0x2]
- str r3, [r0, lr, lsl #0x2]
- ldrsh r2, [r2, #0x0]
- ands r2, r2, #0x40
- ldr r2, _020BC694 ; =UNK_020FFA17
- rsbne r12, r12, #0x0
- ldrb r1, [r2, r1, lsl #0x2]
- str r12, [r0, r1, lsl #0x2]
- mov r0, #0x0
- ldmia sp!, {r4,pc}
-_020BC5E0:
- ldr r1, _020BC684 ; =0x00007FFF
- mov r12, #0x5
- and r1, r3, r1
- mul r3, r1, r12
- add r1, r2, r3, lsl #0x1
- ldrsh lr, [r1, #0x8]
- mov r12, r3, lsl #0x1
- mov r3, lr, asr #0x3
- str r3, [r0, #0x10]
- ldrsh r12, [r2, r12]
- and r2, lr, #0x7
- mov r2, r2, lsl #0x10
- mov r3, r12, asr #0x3
- str r3, [r0, #0x0]
- ldrsh r3, [r1, #0x2]
- and r12, r12, #0x7
- orr lr, r12, r2, asr #0xd
- mov r2, r3, asr #0x3
- str r2, [r0, #0x4]
- ldrsh r12, [r1, #0x4]
- mov r2, lr, lsl #0x10
- and lr, r3, #0x7
- mov r3, r12, asr #0x3
- str r3, [r0, #0x8]
- ldrsh r3, [r1, #0x6]
- orr r1, lr, r2, asr #0xd
- mov r1, r1, lsl #0x10
- and r2, r12, #0x7
- orr r1, r2, r1, asr #0xd
- mov r1, r1, lsl #0x10
- and r2, r3, #0x7
- orr r1, r2, r1, asr #0xd
- mov r1, r1, lsl #0x10
- mov r1, r1, asr #0x10
- mov r2, r3, asr #0x3
- mov r1, r1, lsl #0x13
- str r2, [r0, #0xc]
- mov r1, r1, asr #0x13
- str r1, [r0, #0x14]
- mov r0, #0x1
- ldmia sp!, {r4,pc}
- .balign 4
-_020BC684: .word 0x00007FFF
-_020BC688: .word UNK_020FFA14
-_020BC68C: .word UNK_020FFA15
-_020BC690: .word UNK_020FFA16
-_020BC694: .word UNK_020FFA17
-
- arm_func_start FUN_020BC698
-FUN_020BC698: ; 0x020BC698
- stmdb sp!, {r4-r10,lr}
- sub sp, sp, #0x48
- ldrh r4, [r3, #0x4]
- ldr r5, [r3, #0xc]
- ldr r8, [r3, #0x10]
- ldr r7, [r2, #0x4]
- mov r12, r1, asr #0xc
- sub r4, r4, #0x1
- mov r6, r0
- cmp r12, r4
- add r5, r3, r5
- add r4, r3, r8
- add r8, r3, r7
- ldr r7, [r2, #0x0]
- bne _020BC780
- ands r0, r7, #0xc0000000
- beq _020BC6F0
- ands r0, r7, #0x40000000
- andne r0, r12, #0x1
- addne r12, r0, r12, lsr #0x1
- andeq r0, r12, #0x3
- addeq r12, r0, r12, lsr #0x2
-_020BC6F0:
- ldr r0, [r3, #0x8]
- ands r0, r0, #0x2
- movne r7, #0x0
- bne _020BC7F4
- mov r0, r12, lsl #0x1
- ldrh r3, [r8, r0]
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- cmp r0, #0x0
- addeq sp, sp, #0x48
- ldmeqia sp!, {r4-r10,pc}
- ldr r9, [r6, #0x14]
- ldr r5, [r6, #0x4]
- ldr r4, [r6, #0x10]
- ldr r2, [r6, #0x8]
- mul r1, r5, r9
- mul r0, r2, r4
- sub r0, r1, r0
- ldr r7, [r6, #0xc]
- ldr r8, [r6, #0x0]
- mov r3, r0, asr #0xc
- mul r1, r2, r7
- mul r0, r8, r9
- sub r2, r1, r0
- mul r1, r8, r4
- mul r0, r5, r7
- sub r0, r1, r0
- str r3, [r6, #0x18]
- mov r1, r2, asr #0xc
- str r1, [r6, #0x1c]
- mov r0, r0, asr #0xc
- add sp, sp, #0x48
- str r0, [r6, #0x20]
- ldmia sp!, {r4-r10,pc}
-_020BC780:
- ands r0, r7, #0xc0000000
- beq _020BC7F0
- ldr r0, _020BC9C4 ; =0x1FFF0000
- ands r2, r7, #0x40000000
- and r0, r7, r0
- mov r0, r0, lsr #0x10
- beq _020BC7C4
- cmp r12, r0
- movcs r12, r0, lsr #0x1
- addcs r7, r12, #0x1
- bhs _020BC7F4
- ldr r0, _020BC9C8 ; =0x00001FFF
- mov r12, r12, lsr #0x1
- add r7, r12, #0x1
- and r10, r1, r0
- mov r9, #0x2
- b _020BC800
-_020BC7C4:
- cmp r12, r0
- andcs r0, r12, #0x3
- addcs r12, r0, r12, lsr #0x2
- addcs r7, r12, #0x1
- bhs _020BC7F4
- ldr r0, _020BC9CC ; =0x00003FFF
- mov r12, r12, lsr #0x2
- add r7, r12, #0x1
- and r10, r1, r0
- mov r9, #0x4
- b _020BC800
-_020BC7F0:
- add r7, r12, #0x1
-_020BC7F4:
- ldr r0, _020BC9D0 ; =0x00000FFF
- mov r9, #0x1
- and r10, r1, r0
-_020BC800:
- mov r0, r12, lsl #0x1
- ldrh r3, [r8, r0]
- add r0, sp, #0x0
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- mov r1, r7, lsl #0x1
- ldrh r3, [r8, r1]
- orr r7, r0, #0x0
- add r0, sp, #0x24
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- ldr r3, [sp, #0x0]
- ldr r1, [sp, #0x24]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r1, r2, r1, asr #0xc
- str r1, [r6, #0x0]
- ldr r3, [sp, #0x4]
- ldr r1, [sp, #0x28]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r1, r2, r1, asr #0xc
- str r1, [r6, #0x4]
- ldr r3, [sp, #0x8]
- ldr r1, [sp, #0x2c]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r1, r2, r1, asr #0xc
- str r1, [r6, #0x8]
- ldr r3, [sp, #0xc]
- ldr r1, [sp, #0x30]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r1, r2, r1, asr #0xc
- str r1, [r6, #0xc]
- ldr r2, [sp, #0x10]
- ldr r1, [sp, #0x34]
- orr r7, r7, r0
- sub r0, r1, r2
- mul r1, r2, r9
- mul r0, r10, r0
- add r0, r1, r0, asr #0xc
- str r0, [r6, #0x10]
- ldr r2, [sp, #0x14]
- ldr r0, [sp, #0x38]
- mul r1, r2, r9
- sub r0, r0, r2
- mul r0, r10, r0
- add r2, r1, r0, asr #0xc
- mov r0, r6
- mov r1, r6
- str r2, [r6, #0x14]
- bl VEC_Normalize
- add r0, r6, #0xc
- mov r1, r0
- bl VEC_Normalize
- cmp r7, #0x0
- bne _020BC968
- ldr r3, [sp, #0x18]
- ldr r1, [sp, #0x3c]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r1, r2, r1, asr #0xc
- str r1, [r6, #0x18]
- ldr r3, [sp, #0x1c]
- ldr r1, [sp, #0x40]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r1, r2, r1, asr #0xc
- str r1, [r6, #0x1c]
- ldr r3, [sp, #0x20]
- ldr r1, [sp, #0x44]
- mul r2, r3, r9
- sub r1, r1, r3
- mul r1, r10, r1
- add r2, r2, r1, asr #0xc
- add r0, r6, #0x18
- mov r1, r0
- str r2, [r6, #0x20]
- bl VEC_Normalize
- add sp, sp, #0x48
- ldmia sp!, {r4-r10,pc}
-_020BC968:
- ldr r9, [r6, #0x14]
- ldr r5, [r6, #0x4]
- ldr r8, [r6, #0x0]
- ldr r4, [r6, #0x10]
- ldr r2, [r6, #0x8]
- ldr r7, [r6, #0xc]
- mul r1, r5, r9
- mul r0, r2, r4
- sub r0, r1, r0
- mov r3, r0, asr #0xc
- mul r1, r2, r7
- mul r0, r8, r9
- sub r2, r1, r0
- mul r1, r8, r4
- mul r0, r5, r7
- sub r0, r1, r0
- str r3, [r6, #0x18]
- mov r1, r2, asr #0xc
- str r1, [r6, #0x1c]
- mov r0, r0, asr #0xc
- str r0, [r6, #0x20]
- add sp, sp, #0x48
- ldmia sp!, {r4-r10,pc}
- .balign 4
-_020BC9C4: .word 0x1FFF0000
-_020BC9C8: .word 0x00001FFF
-_020BC9CC: .word 0x00003FFF
-_020BC9D0: .word 0x00000FFF
-
- arm_func_start FUN_020BC9D4
-FUN_020BC9D4: ; 0x020BC9D4
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4c
- ldr r5, [r3, #0xc]
- ldr r4, [r3, #0x10]
- ldr r12, [r2, #0x0]
- ldr r2, [r2, #0x4]
- mov r6, r0
- mov r0, r1, asr #0xc
- add r5, r3, r5
- add r4, r3, r4
- add r8, r3, r2
- ands r1, r12, #0xc0000000
- beq _020BCD40
- ldr r1, _020BCDC0 ; =0x1FFF0000
- ands r2, r12, #0x40000000
- and r1, r12, r1
- mov r2, r1, lsr #0x10
- beq _020BCA44
- ands r1, r0, #0x1
- beq _020BCA3C
- cmp r0, r2
- movhi r0, r2, lsr #0x1
- addhi r0, r0, #0x1
- bhi _020BCD40
- mov r7, r0, lsr #0x1
- b _020BCBE8
-_020BCA3C:
- mov r0, r0, lsr #0x1
- b _020BCD40
-_020BCA44:
- ands r1, r0, #0x3
- beq _020BCBE0
- cmp r0, r2
- addhi r0, r1, r2, lsr #0x2
- bhi _020BCD40
- ands r1, r0, #0x1
- beq _020BCBD8
- ands r1, r0, #0x2
- movne r9, r0, lsr #0x2
- addne r0, r9, #0x1
- moveq r0, r0, lsr #0x2
- addeq r9, r0, #0x1
- mov r0, r0, lsl #0x1
- ldrh r3, [r8, r0]
- mov r0, r6
- mov r1, r5
- mov r2, r4
- mov r7, #0x0
- bl FUN_020BC500
- mov r1, r9, lsl #0x1
- ldrh r3, [r8, r1]
- orr r7, r7, r0
- add r0, sp, #0x0
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- ldr r3, [sp, #0x0]
- ldr r1, [r6, #0x0]
- mov r2, #0x3
- mla r3, r1, r2, r3
- str r3, [r6, #0x0]
- ldr r3, [sp, #0x4]
- ldr r1, [r6, #0x4]
- orr r7, r7, r0
- mla r0, r1, r2, r3
- str r0, [r6, #0x4]
- ldr r3, [sp, #0x8]
- ldr r1, [r6, #0x8]
- mov r0, r6
- mla r3, r1, r2, r3
- str r3, [r6, #0x8]
- ldr r4, [sp, #0xc]
- ldr r3, [r6, #0xc]
- mov r1, r6
- mla r4, r3, r2, r4
- str r4, [r6, #0xc]
- ldr r4, [sp, #0x10]
- ldr r3, [r6, #0x10]
- mla r4, r3, r2, r4
- str r4, [r6, #0x10]
- ldr r4, [sp, #0x14]
- ldr r3, [r6, #0x14]
- mla r2, r3, r2, r4
- str r2, [r6, #0x14]
- bl VEC_Normalize
- add r0, r6, #0xc
- mov r1, r0
- bl VEC_Normalize
- cmp r7, #0x0
- bne _020BCB7C
- ldr r1, [sp, #0x18]
- ldr r0, [r6, #0x18]
- mov r2, #0x3
- mla r1, r0, r2, r1
- str r1, [r6, #0x18]
- ldr r3, [sp, #0x1c]
- ldr r1, [r6, #0x1c]
- add r0, r6, #0x18
- mla r3, r1, r2, r3
- str r3, [r6, #0x1c]
- ldr r4, [sp, #0x20]
- ldr r3, [r6, #0x20]
- mov r1, r0
- mla r2, r3, r2, r4
- str r2, [r6, #0x20]
- bl VEC_Normalize
- add sp, sp, #0x4c
- ldmia sp!, {r4-r9,pc}
-_020BCB7C:
- ldr r12, [r6, #0x14]
- ldr r5, [r6, #0x4]
- ldr r4, [r6, #0x10]
- ldr r2, [r6, #0x8]
- mul r1, r5, r12
- mul r0, r2, r4
- sub r0, r1, r0
- ldr r7, [r6, #0xc]
- ldr r8, [r6, #0x0]
- mov r3, r0, asr #0xc
- mul r1, r2, r7
- mul r0, r8, r12
- sub r2, r1, r0
- mul r1, r8, r4
- mul r0, r5, r7
- sub r0, r1, r0
- str r3, [r6, #0x18]
- mov r1, r2, asr #0xc
- str r1, [r6, #0x1c]
- mov r0, r0, asr #0xc
- add sp, sp, #0x4c
- str r0, [r6, #0x20]
- ldmia sp!, {r4-r9,pc}
-_020BCBD8:
- mov r7, r0, lsr #0x2
- b _020BCBE8
-_020BCBE0:
- mov r0, r0, lsr #0x2
- b _020BCD40
-_020BCBE8:
- mov r0, r7, lsl #0x1
- ldrh r3, [r8, r0]
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- add r1, r8, r7, lsl #0x1
- ldrh r3, [r1, #0x2]
- orr r7, r0, #0x0
- add r0, sp, #0x24
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- ldr r2, [r6, #0x0]
- ldr r1, [sp, #0x24]
- orr r7, r7, r0
- add r0, r2, r1
- str r0, [r6, #0x0]
- ldr r2, [r6, #0x4]
- ldr r1, [sp, #0x28]
- mov r0, r6
- add r1, r2, r1
- str r1, [r6, #0x4]
- ldr r3, [r6, #0x8]
- ldr r2, [sp, #0x2c]
- mov r1, r6
- add r2, r3, r2
- str r2, [r6, #0x8]
- ldr r3, [r6, #0xc]
- ldr r2, [sp, #0x30]
- add r2, r3, r2
- str r2, [r6, #0xc]
- ldr r3, [r6, #0x10]
- ldr r2, [sp, #0x34]
- add r2, r3, r2
- str r2, [r6, #0x10]
- ldr r3, [r6, #0x14]
- ldr r2, [sp, #0x38]
- add r2, r3, r2
- str r2, [r6, #0x14]
- bl VEC_Normalize
- add r0, r6, #0xc
- mov r1, r0
- bl VEC_Normalize
- cmp r7, #0x0
- bne _020BCCE4
- ldr r2, [r6, #0x18]
- ldr r1, [sp, #0x3c]
- add r0, r6, #0x18
- add r1, r2, r1
- str r1, [r6, #0x18]
- ldr r3, [r6, #0x1c]
- ldr r2, [sp, #0x40]
- mov r1, r0
- add r2, r3, r2
- str r2, [r6, #0x1c]
- ldr r3, [r6, #0x20]
- ldr r2, [sp, #0x44]
- add r2, r3, r2
- str r2, [r6, #0x20]
- bl VEC_Normalize
- add sp, sp, #0x4c
- ldmia sp!, {r4-r9,pc}
-_020BCCE4:
- ldr r12, [r6, #0x14]
- ldr r5, [r6, #0x4]
- ldr r4, [r6, #0x10]
- ldr r2, [r6, #0x8]
- mul r1, r5, r12
- mul r0, r2, r4
- sub r0, r1, r0
- ldr r7, [r6, #0xc]
- ldr r8, [r6, #0x0]
- mov r3, r0, asr #0xc
- mul r1, r2, r7
- mul r0, r8, r12
- sub r2, r1, r0
- mul r1, r8, r4
- mul r0, r5, r7
- sub r0, r1, r0
- str r3, [r6, #0x18]
- mov r1, r2, asr #0xc
- str r1, [r6, #0x1c]
- mov r0, r0, asr #0xc
- add sp, sp, #0x4c
- str r0, [r6, #0x20]
- ldmia sp!, {r4-r9,pc}
-_020BCD40:
- mov r0, r0, lsl #0x1
- ldrh r3, [r8, r0]
- mov r0, r6
- mov r1, r5
- mov r2, r4
- bl FUN_020BC500
- cmp r0, #0x0
- addeq sp, sp, #0x4c
- ldmeqia sp!, {r4-r9,pc}
- ldr r12, [r6, #0x14]
- ldr r5, [r6, #0x4]
- ldr r8, [r6, #0x0]
- ldr r4, [r6, #0x10]
- ldr r2, [r6, #0x8]
- ldr r7, [r6, #0xc]
- mul r1, r5, r12
- mul r0, r2, r4
- sub r0, r1, r0
- mov r3, r0, asr #0xc
- mul r1, r2, r7
- mul r0, r8, r12
- sub r2, r1, r0
- mul r1, r8, r4
- mul r0, r5, r7
- sub r0, r1, r0
- str r3, [r6, #0x18]
- mov r1, r2, asr #0xc
- str r1, [r6, #0x1c]
- mov r0, r0, asr #0xc
- str r0, [r6, #0x20]
- add sp, sp, #0x4c
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020BCDC0: .word 0x1FFF0000
-
- arm_func_start FUN_020BCDC4
-FUN_020BCDC4: ; 0x020BCDC4
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- ldrh r4, [r3, #0x4]
- ldr r6, [r2, #0x4]
- mov r5, r1, asr #0xc
- sub r4, r4, #0x1
- cmp r5, r4
- add r6, r3, r6
- ldr r2, [r2, #0x0]
- bne _020BCE58
- ands r4, r2, #0xc0000000
- beq _020BCE08
- ands r4, r2, #0x40000000
- andne r4, r5, #0x1
- addne r5, r4, r5, lsr #0x1
- andeq r4, r5, #0x3
- addeq r5, r4, r5, lsr #0x2
-_020BCE08:
- ldr r3, [r3, #0x8]
- ands r3, r3, #0x2
- movne r4, #0x0
- bne _020BCED4
- ands r1, r2, #0x20000000
- ldreq r2, [r6, r5, lsl #0x3]
- addeq r1, r6, r5, lsl #0x3
- streq r2, [r0, #0x0]
- ldreq r1, [r1, #0x4]
- addeq sp, sp, #0x4
- streq r1, [r0, #0x4]
- ldmeqia sp!, {r4-r7,pc}
- mov r1, r5, lsl #0x2
- ldrsh r2, [r6, r1]
- add r1, r6, r5, lsl #0x2
- add sp, sp, #0x4
- str r2, [r0, #0x0]
- ldrsh r1, [r1, #0x2]
- str r1, [r0, #0x4]
- ldmia sp!, {r4-r7,pc}
-_020BCE58:
- ands r3, r2, #0xc0000000
- beq _020BCED0
- ldr r3, _020BCF60 ; =0x1FFF0000
- ands r4, r2, #0x40000000
- and r3, r2, r3
- mov r3, r3, lsr #0x10
- beq _020BCEA0
- cmp r5, r3
- movcs r5, r3, lsr #0x1
- addcs r4, r5, #0x1
- bhs _020BCED4
- ldr r3, _020BCF64 ; =0x00001FFF
- mov r5, r5, lsr #0x1
- add r4, r5, #0x1
- and lr, r1, r3
- mov r12, #0x2
- mov r3, #0x1
- b _020BCEE4
-_020BCEA0:
- cmp r5, r3
- andcs r3, r5, #0x3
- addcs r5, r3, r5, lsr #0x2
- addcs r4, r5, #0x1
- bhs _020BCED4
- ldr r3, _020BCF68 ; =0x00003FFF
- mov r5, r5, lsr #0x2
- add r4, r5, #0x1
- and lr, r1, r3
- mov r12, #0x4
- mov r3, #0x2
- b _020BCEE4
-_020BCED0:
- add r4, r5, #0x1
-_020BCED4:
- ldr r3, _020BCF6C ; =0x00000FFF
- mov r12, #0x1
- and lr, r1, r3
- mov r3, #0x0
-_020BCEE4:
- ands r1, r2, #0x20000000
- beq _020BCF10
- mov r2, r5, lsl #0x2
- add r1, r6, r5, lsl #0x2
- mov r5, r4, lsl #0x2
- add r4, r6, r4, lsl #0x2
- ldrsh r2, [r6, r2]
- ldrsh r1, [r1, #0x2]
- ldrsh r5, [r6, r5]
- ldrsh r4, [r4, #0x2]
- b _020BCF28
-_020BCF10:
- add r1, r6, r5, lsl #0x3
- add r7, r6, r4, lsl #0x3
- ldr r2, [r6, r5, lsl #0x3]
- ldr r1, [r1, #0x4]
- ldr r5, [r6, r4, lsl #0x3]
- ldr r4, [r7, #0x4]
-_020BCF28:
- sub r5, r5, r2
- sub r4, r4, r1
- mul r6, r2, r12
- mul r2, lr, r5
- add r2, r6, r2, asr #0xc
- mov r5, r2, asr r3
- mul r2, r1, r12
- mul r1, lr, r4
- add r1, r2, r1, asr #0xc
- mov r1, r1, asr r3
- str r5, [r0, #0x0]
- str r1, [r0, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
- .balign 4
-_020BCF60: .word 0x1FFF0000
-_020BCF64: .word 0x00001FFF
-_020BCF68: .word 0x00003FFF
-_020BCF6C: .word 0x00000FFF
-
- arm_func_start FUN_020BCF70
-FUN_020BCF70: ; 0x020BCF70
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldr r4, [r2, #0x4]
- ldr r12, [r2, #0x0]
- mov r1, r1, asr #0xc
- add r3, r3, r4
- ands r2, r12, #0xc0000000
- beq _020BD0D0
- ldr r2, _020BD184 ; =0x1FFF0000
- ands r4, r12, #0x40000000
- and r2, r12, r2
- mov r4, r2, lsr #0x10
- beq _020BCFCC
- ands r2, r1, #0x1
- beq _020BCFC4
- cmp r1, r4
- movhi r1, r4, lsr #0x1
- addhi r1, r1, #0x1
- bhi _020BD0D0
- mov r2, r1, lsr #0x1
- b _020BD110
-_020BCFC4:
- mov r1, r1, lsr #0x1
- b _020BD0D0
-_020BCFCC:
- ands r2, r1, #0x3
- beq _020BD0CC
- cmp r1, r4
- addhi r1, r2, r4, lsr #0x2
- bhi _020BD0D0
- ands r2, r1, #0x1
- beq _020BD0C4
- ands r2, r1, #0x2
- movne r1, r1, lsr #0x2
- addne r2, r1, #0x1
- moveq r2, r1, lsr #0x2
- addeq r1, r2, #0x1
- ands r4, r12, #0x20000000
- beq _020BD04C
- mov r5, r2, lsl #0x2
- mov r4, r1, lsl #0x2
- ldrsh r12, [r3, r5]
- ldrsh r5, [r3, r4]
- add r2, r3, r2, lsl #0x2
- add r4, r12, r12, lsl #0x1
- add r4, r5, r4
- mov r4, r4, asr #0x2
- str r4, [r0, #0x0]
- add r1, r3, r1, lsl #0x2
- ldrsh r3, [r2, #0x2]
- ldrsh r2, [r1, #0x2]
- add sp, sp, #0x4
- add r1, r3, r3, lsl #0x1
- add r1, r2, r1
- mov r1, r1, asr #0x2
- str r1, [r0, #0x4]
- ldmia sp!, {r4-r5,pc}
-_020BD04C:
- ldr r5, [r3, r2, lsl #0x3]
- ldr r4, [r3, r1, lsl #0x3]
- mov r12, r5, asr #0x1f
- mov r12, r12, lsl #0x1
- mov lr, r5, lsl #0x1
- orr r12, r12, r5, lsr #0x1f
- adds lr, lr, r5
- adc r12, r12, r5, asr #0x1f
- adds lr, lr, r4
- adc r12, r12, r4, asr #0x1f
- mov lr, lr, lsr #0x2
- orr lr, lr, r12, lsl #0x1e
- str lr, [r0, #0x0]
- add r2, r3, r2, lsl #0x3
- ldr r12, [r2, #0x4]
- add r1, r3, r1, lsl #0x3
- mov r2, r12, asr #0x1f
- mov r2, r2, lsl #0x1
- mov r3, r12, lsl #0x1
- ldr r1, [r1, #0x4]
- orr r2, r2, r12, lsr #0x1f
- adds r3, r3, r12
- adc r2, r2, r12, asr #0x1f
- adds r3, r3, r1
- adc r1, r2, r1, asr #0x1f
- mov r2, r3, lsr #0x2
- orr r2, r2, r1, lsl #0x1e
- str r2, [r0, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-_020BD0C4:
- mov r2, r1, lsr #0x2
- b _020BD110
-_020BD0CC:
- mov r1, r1, lsr #0x2
-_020BD0D0:
- ands r2, r12, #0x20000000
- ldreq r2, [r3, r1, lsl #0x3]
- addeq r1, r3, r1, lsl #0x3
- streq r2, [r0, #0x0]
- ldreq r1, [r1, #0x4]
- addeq sp, sp, #0x4
- streq r1, [r0, #0x4]
- ldmeqia sp!, {r4-r5,pc}
- mov r2, r1, lsl #0x2
- ldrsh r2, [r3, r2]
- add r1, r3, r1, lsl #0x2
- add sp, sp, #0x4
- str r2, [r0, #0x0]
- ldrsh r1, [r1, #0x2]
- str r1, [r0, #0x4]
- ldmia sp!, {r4-r5,pc}
-_020BD110:
- ands r1, r12, #0x20000000
- beq _020BD150
- mov r1, r2, lsl #0x2
- add r12, r3, r2, lsl #0x2
- ldrsh r2, [r3, r1]
- ldrsh r1, [r12, #0x4]
- add sp, sp, #0x4
- add r1, r2, r1
- mov r1, r1, asr #0x1
- str r1, [r0, #0x0]
- ldrsh r2, [r12, #0x2]
- ldrsh r1, [r12, #0x6]
- add r1, r2, r1
- mov r1, r1, asr #0x1
- str r1, [r0, #0x4]
- ldmia sp!, {r4-r5,pc}
-_020BD150:
- add r12, r3, r2, lsl #0x3
- ldr r2, [r3, r2, lsl #0x3]
- ldr r1, [r12, #0x8]
- add r1, r2, r1
- mov r1, r1, asr #0x1
- str r1, [r0, #0x0]
- ldr r2, [r12, #0x4]
- ldr r1, [r12, #0xc]
- add r1, r2, r1
- mov r1, r1, asr #0x1
- str r1, [r0, #0x4]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BD184: .word 0x1FFF0000
-
- arm_func_start FUN_020BD188
-FUN_020BD188: ; 0x020BD188
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- ldrh r4, [r3, #0x4]
- ldr lr, [r2, #0x4]
- mov r12, r1, asr #0xc
- sub r4, r4, #0x1
- cmp r12, r4
- add r4, r3, lr
- ldr lr, [r2, #0x0]
- bne _020BD230
- ands r2, lr, #0xc0000000
- beq _020BD1CC
- ands r2, lr, #0x40000000
- andne r2, r12, #0x1
- addne r12, r2, r12, lsr #0x1
- andeq r2, r12, #0x3
- addeq r12, r2, r12, lsr #0x2
-_020BD1CC:
- ldr r2, [r3, #0x8]
- ands r2, r2, #0x2
- beq _020BD210
- ldr r2, _020BD2E8 ; =0x00000FFF
- ands r3, lr, #0x20000000
- and r3, r1, r2
- movne r1, r12, lsl #0x1
- ldrnesh r2, [r4, r1]
- ldrnesh r1, [r4, #0x0]
- add sp, sp, #0x4
- ldreq r2, [r4, r12, lsl #0x2]
- ldreq r1, [r4, #0x0]
- sub r1, r1, r2
- mul r1, r3, r1
- add r1, r2, r1, asr #0xc
- str r1, [r0, #0x0]
- ldmia sp!, {r4-r5,pc}
-_020BD210:
- ands r1, lr, #0x20000000
- movne r1, r12, lsl #0x1
- ldrnesh r1, [r4, r1]
- add sp, sp, #0x4
- strne r1, [r0, #0x0]
- ldreq r1, [r4, r12, lsl #0x2]
- streq r1, [r0, #0x0]
- ldmia sp!, {r4-r5,pc}
-_020BD230:
- ands r2, lr, #0xc0000000
- beq _020BD298
- ldr r2, _020BD2EC ; =0x1FFF0000
- ands r3, lr, #0x40000000
- and r2, lr, r2
- mov r2, r2, lsr #0x10
- beq _020BD270
- cmp r12, r2
- movcs r12, r2, lsr #0x1
- bhs _020BD298
- ldr r2, _020BD2F0 ; =0x00001FFF
- mov r12, r12, lsr #0x1
- and r5, r1, r2
- mov r2, #0x2
- mov r1, #0x1
- b _020BD2A8
-_020BD270:
- cmp r12, r2
- andcs r2, r12, #0x3
- addcs r12, r2, r12, lsr #0x2
- bhs _020BD298
- ldr r2, _020BD2F4 ; =0x00003FFF
- mov r12, r12, lsr #0x2
- and r5, r1, r2
- mov r2, #0x4
- mov r1, #0x2
- b _020BD2A8
-_020BD298:
- ldr r3, _020BD2E8 ; =0x00000FFF
- mov r2, #0x1
- and r5, r1, r3
- mov r1, #0x0
-_020BD2A8:
- ands r3, lr, #0x20000000
- addne r3, r4, r12, lsl #0x1
- movne lr, r12, lsl #0x1
- ldrnesh r12, [r4, lr]
- ldrnesh r3, [r3, #0x2]
- addeq r3, r4, r12, lsl #0x2
- ldreq r12, [r4, r12, lsl #0x2]
- ldreq r3, [r3, #0x4]
- mul r4, r12, r2
- sub r3, r3, r12
- mul r2, r5, r3
- add r2, r4, r2, asr #0xc
- mov r1, r2, asr r1
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BD2E8: .word 0x00000FFF
-_020BD2EC: .word 0x1FFF0000
-_020BD2F0: .word 0x00001FFF
-_020BD2F4: .word 0x00003FFF
-
- arm_func_start FUN_020BD2F8
-FUN_020BD2F8: ; 0x020BD2F8
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr r12, [r2, #0x4]
- ldr r2, [r2, #0x0]
- mov r1, r1, asr #0xc
- add r3, r3, r12
- ands r12, r2, #0xc0000000
- beq _020BD44C
- ldr ip, _020BD46C ; =0x1FFF0000
- ands lr, r2, #0x40000000
- and r12, r2, r12
- mov lr, r12, lsr #0x10
- beq _020BD354
- ands r12, r1, #0x1
- beq _020BD34C
- cmp r1, lr
- movhi r1, lr, lsr #0x1
- addhi r1, r1, #0x1
- bhi _020BD44C
- mov r12, r1, lsr #0x1
- b _020BD400
-_020BD34C:
- mov r1, r1, lsr #0x1
- b _020BD44C
-_020BD354:
- ands r12, r1, #0x3
- beq _020BD3F8
- cmp r1, lr
- addhi r1, r12, lr, lsr #0x2
- bhi _020BD44C
- ands r12, r1, #0x1
- beq _020BD3F0
- ands r12, r1, #0x2
- movne lr, r1, lsr #0x2
- addne r12, lr, #0x1
- moveq r12, r1, lsr #0x2
- addeq lr, r12, #0x1
- ands r1, r2, #0x20000000
- beq _020BD3B4
- mov r2, r12, lsl #0x1
- mov r1, lr, lsl #0x1
- ldrsh r12, [r3, r2]
- ldrsh r2, [r3, r1]
- mov r1, #0x3
- add sp, sp, #0x4
- smlabb r1, r12, r1, r2
- mov r1, r1, asr #0x2
- str r1, [r0, #0x0]
- ldmia sp!, {pc}
-_020BD3B4:
- ldr r12, [r3, r12, lsl #0x2]
- ldr r1, [r3, lr, lsl #0x2]
- mov r2, r12, asr #0x1f
- mov r2, r2, lsl #0x1
- mov r3, r12, lsl #0x1
- orr r2, r2, r12, lsr #0x1f
- adds r3, r3, r12
- adc r2, r2, r12, asr #0x1f
- adds r3, r3, r1
- adc r1, r2, r1, asr #0x1f
- mov r2, r3, lsr #0x2
- orr r2, r2, r1, lsl #0x1e
- str r2, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020BD3F0:
- mov r12, r1, lsr #0x2
- b _020BD400
-_020BD3F8:
- mov r1, r1, lsr #0x2
- b _020BD44C
-_020BD400:
- ands r1, r2, #0x20000000
- beq _020BD42C
- mov r2, r12, lsl #0x1
- add r1, r3, r12, lsl #0x1
- ldrsh r2, [r3, r2]
- ldrsh r1, [r1, #0x2]
- add sp, sp, #0x4
- add r1, r2, r1
- mov r1, r1, asr #0x1
- str r1, [r0, #0x0]
- ldmia sp!, {pc}
-_020BD42C:
- add r1, r3, r12, lsl #0x2
- ldr r2, [r3, r12, lsl #0x2]
- ldr r1, [r1, #0x4]
- mov r2, r2, asr #0x1
- add r1, r2, r1, asr #0x1
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-_020BD44C:
- ands r2, r2, #0x20000000
- movne r1, r1, lsl #0x1
- ldrnesh r1, [r3, r1]
- strne r1, [r0, #0x0]
- ldreq r1, [r3, r1, lsl #0x2]
- streq r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020BD46C: .word 0x1FFF0000
-
- arm_func_start FUN_020BD470
-FUN_020BD470: ; 0x020BD470
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x34
- mov r9, r0
- add r0, r9, r1, lsl #0x1
- ldrh r0, [r0, #0x14]
- mov r7, r3
- mov r8, r2
- ldr r5, [r9, r0]
- add r1, r9, r0
- ands r0, r5, #0x1
- movne r0, #0x7
- strne r0, [r7, #0x0]
- bne _020BD814
- ldr r0, _020BD848 ; =0x00000FFF
- add r4, r1, #0x4
- ands r0, r8, r0
- beq _020BD4C4
- ldr r0, [r9, #0x8]
- ands r0, r0, #0x1
- movne r6, #0x1
- bne _020BD4C8
-_020BD4C4:
- mov r6, #0x0
-_020BD4C8:
- mov r0, #0x0
- str r0, [r7, #0x0]
- ands r0, r5, #0x6
- bne _020BD5C0
- ands r0, r5, #0x8
- bne _020BD51C
- cmp r6, #0x0
- beq _020BD500
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x4c
- bl FUN_020BD188
- b _020BD514
-_020BD500:
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x4c
- bl FUN_020BD2F8
-_020BD514:
- add r4, r4, #0x8
- b _020BD524
-_020BD51C:
- ldr r0, [r4], #0x4
- str r0, [r7, #0x4c]
-_020BD524:
- ands r0, r5, #0x10
- bne _020BD568
- cmp r6, #0x0
- beq _020BD54C
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x50
- bl FUN_020BD188
- b _020BD560
-_020BD54C:
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x50
- bl FUN_020BD2F8
-_020BD560:
- add r4, r4, #0x8
- b _020BD570
-_020BD568:
- ldr r0, [r4], #0x4
- str r0, [r7, #0x50]
-_020BD570:
- ands r0, r5, #0x20
- bne _020BD5B4
- cmp r6, #0x0
- beq _020BD598
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x54
- bl FUN_020BD188
- b _020BD5AC
-_020BD598:
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x54
- bl FUN_020BD2F8
-_020BD5AC:
- add r4, r4, #0x8
- b _020BD5DC
-_020BD5B4:
- ldr r0, [r4], #0x4
- str r0, [r7, #0x54]
- b _020BD5DC
-_020BD5C0:
- ands r0, r5, #0x2
- ldrne r0, [r7, #0x0]
- orrne r0, r0, #0x4
- strne r0, [r7, #0x0]
- bne _020BD5DC
- mov r0, r7
- bl FUN_020BDA08
-_020BD5DC:
- ands r0, r5, #0xc0
- bne _020BD6A8
- ands r0, r5, #0x100
- bne _020BD628
- cmp r6, #0x0
- beq _020BD60C
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x28
- bl FUN_020BC698
- b _020BD620
-_020BD60C:
- mov r1, r8
- mov r2, r4
- mov r3, r9
- add r0, r7, #0x28
- bl FUN_020BC9D4
-_020BD620:
- add r4, r4, #0x8
- b _020BD6C4
-_020BD628:
- ldr r1, [r9, #0xc]
- ldr r2, [r9, #0x10]
- ldr r3, [r4, #0x0]
- add r0, r7, #0x28
- add r1, r9, r1
- add r2, r9, r2
- bl FUN_020BC500
- cmp r0, #0x0
- beq _020BD6A0
- ldr r12, [r7, #0x3c]
- ldr r0, [r7, #0x2c]
- ldr r3, [r7, #0x28]
- ldr r11, [r7, #0x38]
- ldr r1, [r7, #0x30]
- ldr r2, [r7, #0x34]
- mul r10, r0, r12
- mul lr, r1, r11
- sub r10, r10, lr
- mov r10, r10, asr #0xc
- mul lr, r1, r2
- mul r1, r3, r12
- sub r1, lr, r1
- mul r11, r3, r11
- mul r2, r0, r2
- sub r0, r11, r2
- str r10, [r7, #0x40]
- mov r1, r1, asr #0xc
- str r1, [r7, #0x44]
- mov r0, r0, asr #0xc
- str r0, [r7, #0x48]
-_020BD6A0:
- add r4, r4, #0x4
- b _020BD6C4
-_020BD6A8:
- ands r0, r5, #0x40
- ldrne r0, [r7, #0x0]
- orrne r0, r0, #0x2
- strne r0, [r7, #0x0]
- bne _020BD6C4
- mov r0, r7
- bl FUN_020BD850
-_020BD6C4:
- ands r0, r5, #0x600
- bne _020BD7F0
- ands r0, r5, #0x800
- bne _020BD71C
- cmp r6, #0x0
- beq _020BD6F4
- add r0, sp, #0x0
- mov r1, r8
- mov r2, r4
- mov r3, r9
- bl FUN_020BCDC4
- b _020BD708
-_020BD6F4:
- add r0, sp, #0x0
- mov r1, r8
- mov r2, r4
- mov r3, r9
- bl FUN_020BCF70
-_020BD708:
- ldr r1, [sp, #0x0]
- ldr r0, [sp, #0x4]
- str r1, [sp, #0x18]
- str r0, [sp, #0x24]
- b _020BD72C
-_020BD71C:
- ldr r0, [r4, #0x0]
- str r0, [sp, #0x18]
- ldr r0, [r4, #0x4]
- str r0, [sp, #0x24]
-_020BD72C:
- ands r0, r5, #0x1000
- bne _020BD77C
- cmp r6, #0x0
- beq _020BD754
- add r0, sp, #0x8
- mov r1, r8
- mov r3, r9
- add r2, r4, #0x8
- bl FUN_020BCDC4
- b _020BD768
-_020BD754:
- add r0, sp, #0x8
- mov r1, r8
- mov r3, r9
- add r2, r4, #0x8
- bl FUN_020BCF70
-_020BD768:
- ldr r1, [sp, #0x8]
- ldr r0, [sp, #0xc]
- str r1, [sp, #0x1c]
- str r0, [sp, #0x28]
- b _020BD78C
-_020BD77C:
- ldr r0, [r4, #0x8]
- str r0, [sp, #0x1c]
- ldr r0, [r4, #0xc]
- str r0, [sp, #0x28]
-_020BD78C:
- ands r0, r5, #0x2000
- bne _020BD7DC
- cmp r6, #0x0
- beq _020BD7B4
- add r0, sp, #0x10
- mov r1, r8
- mov r3, r9
- add r2, r4, #0x10
- bl FUN_020BCDC4
- b _020BD7C8
-_020BD7B4:
- add r0, sp, #0x10
- mov r1, r8
- mov r3, r9
- add r2, r4, #0x10
- bl FUN_020BCF70
-_020BD7C8:
- ldr r1, [sp, #0x10]
- ldr r0, [sp, #0x14]
- str r1, [sp, #0x20]
- str r0, [sp, #0x2c]
- b _020BD814
-_020BD7DC:
- ldr r0, [r4, #0x10]
- str r0, [sp, #0x20]
- ldr r0, [r4, #0x14]
- str r0, [sp, #0x2c]
- b _020BD814
-_020BD7F0:
- ands r0, r5, #0x200
- ldrne r0, [r7, #0x0]
- orrne r0, r0, #0x1
- strne r0, [r7, #0x0]
- bne _020BD814
- mov r0, r7
- bl FUN_020BD9A4
- add sp, sp, #0x34
- ldmia sp!, {r4-r11,pc}
-_020BD814:
- ldr r0, [r7, #0x0]
- add r1, sp, #0x18
- ands r0, r0, #0x1
- ldr r0, _020BD84C ; =UNK_021CEF7C
- movne r3, #0x4
- ldr r4, [r0, #0x0]
- moveq r3, #0x0
- ldr r2, [r4, #0x0]
- ldr r4, [r4, #0xe8]
- mov r0, r7
- blx r4
- add sp, sp, #0x34
- ldmia sp!, {r4-r11,pc}
- .balign 4
-_020BD848: .word 0x00000FFF
-_020BD84C: .word UNK_021CEF7C
-
- arm_func_start FUN_020BD850
-FUN_020BD850: ; 0x020BD850
- stmdb sp!, {r4-r8,lr}
- ldr r1, _020BD990 ; =UNK_021CEF7C
- mov r8, r0
- ldr r0, [r1, #0x0]
- ldr r3, [r0, #0xd4]
- ldr r0, [r0, #0x0]
- ldrh r2, [r3, #0x6]
- ldrb r0, [r0, #0x1]
- ldrh r1, [r3, r2]
- add r2, r3, r2
- mla r0, r1, r0, r2
- ldr r0, [r0, #0x4]
- ldrh r2, [r3, r0]
- add r4, r3, r0
- add r1, r4, #0x4
- ands r0, r2, #0x1
- addeq r1, r1, #0xc
- ands r0, r2, #0x2
- bne _020BD980
- ands r0, r2, #0x8
- beq _020BD934
- and r2, r2, #0xf0
- add r0, r8, #0x28
- mov r5, r2, asr #0x4
- ldrsh r7, [r1, #0x0]
- ldrsh r6, [r1, #0x2]
- bl MI_Zero36B
- ldrh r0, [r4, #0x0]
- add r1, r8, r5, lsl #0x2
- ands r0, r0, #0x100
- movne r0, #0x1000
- rsbne r2, r0, #0x0
- moveq r2, #0x1000
- ldr r0, _020BD994 ; =UNK_020FFA14
- str r2, [r1, #0x28]
- ldrb r1, [r0, r5, lsl #0x2]
- ldr r0, _020BD998 ; =UNK_020FFA15
- add r1, r8, r1, lsl #0x2
- str r7, [r1, #0x28]
- ldrb r0, [r0, r5, lsl #0x2]
- add r0, r8, r0, lsl #0x2
- str r6, [r0, #0x28]
- ldrh r0, [r4, #0x0]
- ands r0, r0, #0x200
- ldr r0, _020BD99C ; =UNK_020FFA16
- rsbne r6, r6, #0x0
- ldrb r0, [r0, r5, lsl #0x2]
- add r0, r8, r0, lsl #0x2
- str r6, [r0, #0x28]
- ldrh r0, [r4, #0x0]
- ands r0, r0, #0x400
- ldr r0, _020BD9A0 ; =UNK_020FFA17
- rsbne r7, r7, #0x0
- ldrb r0, [r0, r5, lsl #0x2]
- add r0, r8, r0, lsl #0x2
- str r7, [r0, #0x28]
- ldmia sp!, {r4-r8,pc}
-_020BD934:
- ldrsh r0, [r4, #0x2]
- str r0, [r8, #0x28]
- ldrsh r0, [r1, #0x0]
- str r0, [r8, #0x2c]
- ldrsh r0, [r1, #0x2]
- str r0, [r8, #0x30]
- ldrsh r0, [r1, #0x4]
- str r0, [r8, #0x34]
- ldrsh r0, [r1, #0x6]
- str r0, [r8, #0x38]
- ldrsh r0, [r1, #0x8]
- str r0, [r8, #0x3c]
- ldrsh r0, [r1, #0xa]
- str r0, [r8, #0x40]
- ldrsh r0, [r1, #0xc]
- str r0, [r8, #0x44]
- ldrsh r0, [r1, #0xe]
- str r0, [r8, #0x48]
- ldmia sp!, {r4-r8,pc}
-_020BD980:
- ldr r0, [r8, #0x0]
- orr r0, r0, #0x2
- str r0, [r8, #0x0]
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020BD990: .word UNK_021CEF7C
-_020BD994: .word UNK_020FFA14
-_020BD998: .word UNK_020FFA15
-_020BD99C: .word UNK_020FFA16
-_020BD9A0: .word UNK_020FFA17
-
- arm_func_start FUN_020BD9A4
-FUN_020BD9A4: ; 0x020BD9A4
- stmdb sp!, {r4,lr}
- ldr r1, _020BDA04 ; =UNK_021CEF7C
- ldr r12, [r1, #0x0]
- ldr r4, [r12, #0xd4]
- ldr r2, [r12, #0x0]
- ldrh lr, [r4, #0x6]
- ldrb r1, [r2, #0x1]
- ldrh r3, [r4, lr]
- add lr, r4, lr
- mla r1, r3, r1, lr
- ldr r1, [r1, #0x4]
- ldrh r3, [r4, r1]
- add r1, r4, r1
- add r1, r1, #0x4
- ands lr, r3, #0x1
- addeq r1, r1, #0xc
- ands lr, r3, #0x2
- bne _020BD9F8
- ands lr, r3, #0x8
- addne r1, r1, #0x4
- addeq r1, r1, #0x10
-_020BD9F8:
- ldr r12, [r12, #0xe8]
- blx r12
- ldmia sp!, {r4,pc}
- .balign 4
-_020BDA04: .word UNK_021CEF7C
-
- arm_func_start FUN_020BDA08
-FUN_020BDA08: ; 0x020BDA08
- ldr r1, _020BDA6C ; =UNK_021CEF7C
- ldr r1, [r1, #0x0]
- ldr r12, [r1, #0xd4]
- ldr r1, [r1, #0x0]
- ldrh r3, [r12, #0x6]
- ldrb r1, [r1, #0x1]
- ldrh r2, [r12, r3]
- add r3, r12, r3
- mla r1, r2, r1, r3
- ldr r2, [r1, #0x4]
- ldrh r1, [r12, r2]
- add r2, r12, r2
- ands r1, r1, #0x1
- ldrne r1, [r0, #0x0]
- orrne r1, r1, #0x4
- strne r1, [r0, #0x0]
- bxne lr
- ldr r1, [r2, #0x4]
- add r2, r2, #0x4
- str r1, [r0, #0x4c]
- ldr r1, [r2, #0x4]
- str r1, [r0, #0x50]
- ldr r1, [r2, #0x8]
- str r1, [r0, #0x54]
- bx lr
- .balign 4
-_020BDA6C: .word UNK_021CEF7C
-
- arm_func_start FUN_020BDA70
-FUN_020BDA70: ; 0x020BDA70
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r3, r0
- ldr r0, [r1, #0x8]
- ldr r12, [r1, #0x0]
- ldrh r1, [r0, #0x4]
- mov r1, r1, lsl #0xc
- cmp r12, r1
- subge r12, r1, #0x1
- bge _020BDAA0
- cmp r12, #0x0
- movlt r12, #0x0
-_020BDAA0:
- mov r1, r2
- mov r2, r12
- bl FUN_020BD470
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BDAB4
-FUN_020BDAB4: ; 0x020BDAB4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- mov r4, r1
- ldr r0, _020BDB3C ; =UNK_0210659C
- str r4, [r5, #0x8]
- ldr r0, [r0, #0x0]
- add r1, r5, #0x1a
- str r0, [r5, #0xc]
- ldrb r2, [r2, #0x17]
- mov r0, #0x0
- strb r2, [r5, #0x19]
- ldrb r2, [r5, #0x19]
- mov r2, r2, lsl #0x1
- bl MIi_CpuClear16
- ldrh r0, [r4, #0x6]
- add r2, r4, #0x14
- mov r3, #0x0
- cmp r0, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r5,pc}
-_020BDB08:
- mov r0, r3, lsl #0x1
- ldrh r1, [r2, r0]
- add r0, r5, r3, lsl #0x1
- add r3, r3, #0x1
- ldr r1, [r4, r1]
- mov r1, r1, lsr #0x18
- orr r1, r1, #0x100
- strh r1, [r0, #0x1a]
- ldrh r0, [r4, #0x6]
- cmp r3, r0
- blo _020BDB08
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BDB3C: .word UNK_0210659C
-
- arm_func_start FUN_020BDB40
-FUN_020BDB40: ; 0x020BDB40
- stmdb sp!, {r4-r8,lr}
- ldr r7, [r1, #0x8]
- mov r2, r2, lsl #0x10
- ldrh r4, [r7, #0xe]
- add r5, r7, #0x8
- ldr r6, [r1, #0x0]
- ldrh r3, [r5, r4]
- mov r1, r2, lsr #0x10
- add r2, r5, r4
- mul r4, r3, r1
- add r3, r2, #0x4
- mov r6, r6, asr #0xc
- mov r8, r0
- ldr r1, [r3, r4]
- mov r0, r7
- mov r2, r6
- add r5, r3, r4
- bl FUN_020BDDAC
- mov r4, r0
- ldr r1, [r5, #0x4]
- mov r0, r7
- mov r2, r6
- bl FUN_020BDDAC
- ldr r1, [r8, #0x4]
- mov r2, r6
- and r1, r1, #0x8000
- orr r1, r1, r4
- orr r0, r1, r0, lsl #0x10
- str r0, [r8, #0x4]
- mov r0, r7
- ldr r1, [r5, #0xc]
- bl FUN_020BDDAC
- mov r4, r0
- mov r0, r7
- ldr r1, [r5, #0x8]
- mov r2, r6
- bl FUN_020BDDAC
- mov r2, r6
- ldr r1, [r8, #0x8]
- and r1, r1, #0x8000
- orr r0, r1, r0
- orr r0, r0, r4, lsl #0x10
- str r0, [r8, #0x8]
- mov r0, r7
- ldr r1, [r5, #0x10]
- bl FUN_020BDCB8
- ldr r1, [r8, #0xc]
- bic r1, r1, #0x1f0000
- orr r0, r1, r0, lsl #0x10
- str r0, [r8, #0xc]
- ldmia sp!, {r4-r8,pc}
-
- arm_func_start FUN_020BDC0C
-FUN_020BDC0C: ; 0x020BDC0C
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r3, _020BDCB4 ; =UNK_021065A8
- ldr r4, [r2, #0x8]
- ldr r3, [r3, #0x0]
- mov r9, r0
- str r3, [r9, #0xc]
- ldrb r0, [r2, #0x18]
- mov r8, r1
- add r4, r2, r4
- strb r0, [r9, #0x19]
- ldrb r2, [r9, #0x19]
- add r1, r9, #0x1a
- mov r0, #0x0
- mov r2, r2, lsl #0x1
- bl MIi_CpuClear16
- ldrb r0, [r8, #0x9]
- mov r7, #0x0
- cmp r0, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r9,pc}
- mov r6, r7
- add r5, r8, #0x8
- add r4, r4, #0x4
-_020BDC6C:
- ldrh r1, [r8, #0xe]
- mov r0, r4
- add r2, r5, r1
- ldrh r1, [r2, #0x2]
- add r1, r2, r1
- add r1, r1, r6
- bl FUN_020BC14C
- cmp r0, #0x0
- orrge r1, r7, #0x100
- addge r0, r9, r0, lsl #0x1
- strgeh r1, [r0, #0x1a]
- ldrb r0, [r8, #0x9]
- add r7, r7, #0x1
- add r6, r6, #0x10
- cmp r7, r0
- blo _020BDC6C
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020BDCB4: .word UNK_021065A8
-
- arm_func_start FUN_020BDCB8
-FUN_020BDCB8: ; 0x020BDCB8
- ands r3, r1, #0x20000000
- movne r0, r1, lsl #0x10
- movne r0, r0, lsr #0x10
- bxne lr
- ldr r3, _020BDDA4 ; =0x0000FFFF
- ands r12, r1, #0xc0000000
- and r3, r1, r3
- add r0, r0, r3
- ldreqb r0, [r0, r2]
- bxeq lr
- ldr r3, _020BDDA8 ; =0x1FFF0000
- ands r12, r1, #0x40000000
- and r1, r1, r3
- mov r3, r1, lsr #0x10
- beq _020BDD30
- ands r1, r2, #0x1
- beq _020BDD28
- cmp r2, r3
- addhi r0, r0, r3, lsr #0x1
- ldrhib r0, [r0, #0x1]
- bxhi lr
- add r1, r0, r2, lsr #0x1
- ldrb r2, [r0, r2, lsr #0x1]
- ldrb r0, [r1, #0x1]
- add r0, r2, r0
- mov r0, r0, lsl #0xf
- mov r0, r0, lsr #0x10
- bx lr
-_020BDD28:
- ldrb r0, [r0, r2, lsr #0x1]
- bx lr
-_020BDD30:
- ands r1, r2, #0x3
- beq _020BDD9C
- cmp r2, r3
- addhi r0, r0, r3, lsr #0x2
- ldrhib r0, [r1, r0]
- bxhi lr
- ands r1, r2, #0x1
- beq _020BDD80
- ands r1, r2, #0x2
- movne r1, r2, lsr #0x2
- addne r2, r1, #0x1
- moveq r2, r2, lsr #0x2
- addeq r1, r2, #0x1
- ldrb r2, [r0, r2]
- ldrb r1, [r0, r1]
- mov r0, #0x3
- mla r0, r2, r0, r1
- mov r0, r0, lsl #0xe
- mov r0, r0, lsr #0x10
- bx lr
-_020BDD80:
- add r1, r0, r2, lsr #0x2
- ldrb r2, [r0, r2, lsr #0x2]
- ldrb r0, [r1, #0x1]
- add r0, r2, r0
- mov r0, r0, lsl #0xf
- mov r0, r0, lsr #0x10
- bx lr
-_020BDD9C:
- ldrb r0, [r0, r2, lsr #0x2]
- bx lr
- .balign 4
-_020BDDA4: .word 0x0000FFFF
-_020BDDA8: .word 0x1FFF0000
-
- arm_func_start FUN_020BDDAC
-FUN_020BDDAC: ; 0x020BDDAC
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ands r3, r1, #0x20000000
- movne r0, r1, lsl #0x10
- addne sp, sp, #0x4
- movne r0, r0, lsr #0x10
- ldmneia sp!, {pc}
- ldr r3, _020BDF2C ; =0x0000FFFF
- ands r12, r1, #0xc0000000
- and r3, r1, r3
- add r0, r0, r3
- moveq r1, r2, lsl #0x1
- addeq sp, sp, #0x4
- ldreqh r0, [r0, r1]
- ldmeqia sp!, {pc}
- ldr r3, _020BDF30 ; =0x1FFF0000
- ands r12, r1, #0x40000000
- and r1, r1, r3
- mov r3, r1, lsr #0x10
- beq _020BDE34
- ands r1, r2, #0x1
- beq _020BDE24
- cmp r2, r3
- bichi r1, r3, #0x1
- addhi r0, r0, r1
- addhi sp, sp, #0x4
- ldrhih r0, [r0, #0x2]
- ldmhiia sp!, {pc}
- mov r1, r2, lsr #0x1
- b _020BDEE0
-_020BDE24:
- bic r1, r2, #0x1
- add sp, sp, #0x4
- ldrh r0, [r0, r1]
- ldmia sp!, {pc}
-_020BDE34:
- ands r1, r2, #0x3
- beq _020BDECC
- cmp r2, r3
- movhi r2, r3, lsr #0x2
- movhi r1, r1, lsl #0x1
- addhi r0, r0, r2, lsl #0x1
- addhi sp, sp, #0x4
- ldrhih r0, [r1, r0]
- ldmhiia sp!, {pc}
- ands r1, r2, #0x1
- beq _020BDEC4
- ands r1, r2, #0x2
- movne r1, r2, lsr #0x2
- addne r2, r1, #0x1
- moveq r2, r2, lsr #0x2
- addeq r1, r2, #0x1
- mov r2, r2, lsl #0x1
- mov r1, r1, lsl #0x1
- ldrh r12, [r0, r2]
- ldrh lr, [r0, r1]
- ldr r0, _020BDF34 ; =0x00007C1F
- and r3, r12, #0x3e0
- and r2, lr, #0x3e0
- mov r1, #0x3
- mla r2, r3, r1, r2
- and r12, r12, r0
- and r3, lr, r0
- mla r1, r12, r1, r3
- mov r2, r2, lsr #0x2
- and r1, r0, r1, lsr #0x2
- and r0, r2, #0x3e0
- orr r0, r1, r0
- mov r0, r0, lsl #0x10
- add sp, sp, #0x4
- mov r0, r0, lsr #0x10
- ldmia sp!, {pc}
-_020BDEC4:
- mov r1, r2, lsr #0x2
- b _020BDEE0
-_020BDECC:
- mov r1, r2, lsr #0x2
- mov r1, r1, lsl #0x1
- add sp, sp, #0x4
- ldrh r0, [r0, r1]
- ldmia sp!, {pc}
-_020BDEE0:
- mov r2, r1, lsl #0x1
- add r1, r0, r1, lsl #0x1
- ldrh r3, [r0, r2]
- ldrh r12, [r1, #0x2]
- ldr r0, _020BDF34 ; =0x00007C1F
- and r2, r3, #0x3e0
- and r1, r12, #0x3e0
- add r1, r2, r1
- mov r1, r1, lsr #0x1
- and r3, r3, r0
- and r2, r12, r0
- add r2, r3, r2
- and r2, r0, r2, lsr #0x1
- and r0, r1, #0x3e0
- orr r0, r2, r0
- mov r0, r0, lsl #0x10
- mov r0, r0, lsr #0x10
- add sp, sp, #0x4
- ldmia sp!, {pc}
- .balign 4
-_020BDF2C: .word 0x0000FFFF
-_020BDF30: .word 0x1FFF0000
-_020BDF34: .word 0x00007C1F
-
- arm_func_start FUN_020BDF38
-FUN_020BDF38: ; 0x020BDF38
- stmdb sp!, {r4,lr}
- ldr r12, [r1, #0x0]
- mov r4, r0
- mov r2, r2, lsl #0x10
- ldr r0, [r1, #0x8]
- mov r1, r2, lsr #0x10
- mov r3, r4
- mov r2, r12, asr #0xc
- bl FUN_020BE030
- ldr r0, [r4, #0x10]
- bic r0, r0, #0xc0000000
- str r0, [r4, #0x10]
- ldr r0, [r4, #0x10]
- orr r0, r0, #0x40000000
- str r0, [r4, #0x10]
- ldr r0, [r4, #0x0]
- orr r0, r0, #0x8
- str r0, [r4, #0x0]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BDF84
-FUN_020BDF84: ; 0x020BDF84
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r3, _020BE02C ; =UNK_021065A0
- ldr r4, [r2, #0x8]
- ldr r3, [r3, #0x0]
- mov r9, r0
- str r3, [r9, #0xc]
- ldrb r0, [r2, #0x18]
- mov r8, r1
- add r4, r2, r4
- strb r0, [r9, #0x19]
- ldrb r2, [r9, #0x19]
- add r1, r9, #0x1a
- mov r0, #0x0
- mov r2, r2, lsl #0x1
- bl MIi_CpuClear16
- ldrb r0, [r8, #0x9]
- mov r7, #0x0
- cmp r0, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r9,pc}
- mov r6, r7
- add r5, r8, #0x8
- add r4, r4, #0x4
-_020BDFE4:
- ldrh r1, [r8, #0xe]
- mov r0, r4
- add r2, r5, r1
- ldrh r1, [r2, #0x2]
- add r1, r2, r1
- add r1, r1, r6
- bl FUN_020BC14C
- cmp r0, #0x0
- orrge r1, r7, #0x100
- addge r0, r9, r0, lsl #0x1
- strgeh r1, [r0, #0x1a]
- ldrb r0, [r8, #0x9]
- add r7, r7, #0x1
- add r6, r6, #0x10
- cmp r7, r0
- blo _020BDFE4
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020BE02C: .word UNK_021065A0
-
- arm_func_start FUN_020BE030
-FUN_020BE030: ; 0x020BE030
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- mov r8, r0
- ldrh r4, [r8, #0xe]
- add r5, r8, #0x8
- mov r6, r3
- ldrh r3, [r5, r4]
- add r4, r5, r4
- add r4, r4, #0x4
- mla r5, r3, r1, r4
- mov r7, r2
- ldr r1, [r5, #0x18]
- ldr r2, [r5, #0x1c]
- mov r3, r7
- ldr r4, [r6, #0x0]
- bl FUN_020BE238
- mov r9, r0
- ldr r1, [r5, #0x20]
- mov r0, r8
- ldr r2, [r5, #0x24]
- mov r3, r7
- bl FUN_020BE238
- cmp r9, #0x0
- bne _020BE09C
- cmp r0, #0x0
- orreq r4, r4, #0x4
- beq _020BE0A8
-_020BE09C:
- str r9, [r6, #0x24]
- str r0, [r6, #0x28]
- bic r4, r4, #0x4
-_020BE0A8:
- ldr r1, [r5, #0x10]
- ldr r2, [r5, #0x14]
- mov r0, r8
- mov r3, r7
- bl FUN_020BE12C
- cmp r0, #0x10000000
- strneh r0, [r6, #0x20]
- movne r0, r0, lsr #0x10
- strneh r0, [r6, #0x22]
- orreq r4, r4, #0x2
- ldr r1, [r5, #0x0]
- ldr r2, [r5, #0x4]
- mov r0, r8
- mov r3, r7
- bicne r4, r4, #0x2
- bl FUN_020BE238
- mov r9, r0
- ldr r1, [r5, #0x8]
- ldr r2, [r5, #0xc]
- mov r0, r8
- mov r3, r7
- bl FUN_020BE238
- cmp r9, #0x1000
- bne _020BE114
- cmp r0, #0x1000
- orreq r4, r4, #0x1
- beq _020BE120
-_020BE114:
- str r9, [r6, #0x18]
- str r0, [r6, #0x1c]
- bic r4, r4, #0x1
-_020BE120:
- str r4, [r6, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
-
- arm_func_start FUN_020BE12C
-FUN_020BE12C: ; 0x020BE12C
- ands r12, r1, #0x20000000
- movne r0, r2
- bxne lr
- add r0, r0, r2
- ands r2, r1, #0xc0000000
- beq _020BE1F8
- ldr r2, _020BE234 ; =0x0000FFFF
- ands r12, r1, #0x40000000
- and r2, r1, r2
- beq _020BE17C
- ands r1, r3, #0x1
- beq _020BE174
- cmp r3, r2
- movhi r1, r2, lsr #0x1
- addhi r3, r1, #0x1
- bhi _020BE1F8
- mov r2, r3, lsr #0x1
- b _020BE200
-_020BE174:
- mov r3, r3, lsr #0x1
- b _020BE1F8
-_020BE17C:
- ands r1, r3, #0x3
- beq _020BE1F4
- cmp r3, r2
- addhi r3, r1, r2, lsr #0x2
- bhi _020BE1F8
- ands r1, r3, #0x1
- beq _020BE1EC
- ands r1, r3, #0x2
- movne r1, r3, lsr #0x2
- addne r2, r1, #0x1
- moveq r2, r3, lsr #0x2
- addeq r1, r2, #0x1
- mov r12, r2, lsl #0x2
- add r3, r0, r2, lsl #0x2
- mov r2, r1, lsl #0x2
- add r1, r0, r1, lsl #0x2
- ldrsh r12, [r0, r12]
- ldrsh r2, [r0, r2]
- mov r0, #0x3
- ldrsh r3, [r3, #0x2]
- ldrsh r1, [r1, #0x2]
- mla r2, r12, r0, r2
- mla r1, r3, r0, r1
- ldr r0, _020BE234 ; =0x0000FFFF
- mov r1, r1, asr #0x2
- and r0, r0, r2, asr #0x2
- orr r0, r0, r1, lsl #0x10
- bx lr
-_020BE1EC:
- mov r2, r3, lsr #0x2
- b _020BE200
-_020BE1F4:
- mov r3, r3, lsr #0x2
-_020BE1F8:
- ldr r0, [r0, r3, lsl #0x2]
- bx lr
-_020BE200:
- add r1, r0, r2, lsl #0x2
- mov r2, r2, lsl #0x2
- ldrsh r12, [r0, r2]
- ldrsh r3, [r1, #0x4]
- ldrsh r2, [r1, #0x2]
- ldrsh r1, [r1, #0x6]
- ldr r0, _020BE234 ; =0x0000FFFF
- add r3, r12, r3
- add r1, r2, r1
- and r2, r0, r3, asr #0x1
- mov r0, r1, asr #0x1
- orr r0, r2, r0, lsl #0x10
- bx lr
- .balign 4
-_020BE234: .word 0x0000FFFF
-
- arm_func_start FUN_020BE238
-FUN_020BE238:
- ands r12, r1, #0x20000000
- movne r0, r2
- bxne lr
- add r0, r0, r2
- ands r2, r1, #0xc0000000
- beq _020BE2F0
- ldr r2, _020BE330 ; =0x0000FFFF
- ands r12, r1, #0x40000000
- and r12, r1, r2
- beq _020BE288
- ands r2, r3, #0x1
- beq _020BE280
- cmp r3, r12
- movhi r2, r12, lsr #0x1
- addhi r3, r2, #0x1
- bhi _020BE2F0
- mov r3, r3, lsr #0x1
- b _020BE304
-_020BE280:
- mov r3, r3, lsr #0x1
- b _020BE2F0
-_020BE288:
- ands r2, r3, #0x3
- beq _020BE2EC
- cmp r3, r12
- addhi r3, r2, r12, lsr #0x2
- bhi _020BE2F0
- ands r2, r3, #0x1
- beq _020BE2E4
- ands r2, r3, #0x2
- movne r3, r3, lsr #0x2
- addne r2, r3, #0x1
- moveq r2, r3, lsr #0x2
- addeq r3, r2, #0x1
- ands r1, r1, #0x10000000
- movne r2, r2, lsl #0x1
- movne r1, r3, lsl #0x1
- ldrnesh r2, [r0, r2]
- ldrnesh r1, [r0, r1]
- ldreq r2, [r0, r2, lsl #0x2]
- ldreq r1, [r0, r3, lsl #0x2]
- mov r0, #0x3
- mla r0, r2, r0, r1
- mov r0, r0, asr #0x2
- bx lr
-_020BE2E4:
- mov r3, r3, lsr #0x2
- b _020BE304
-_020BE2EC:
- mov r3, r3, lsr #0x2
-_020BE2F0:
- ands r1, r1, #0x10000000
- movne r1, r3, lsl #0x1
- ldrnesh r0, [r0, r1]
- ldreq r0, [r0, r3, lsl #0x2]
- bx lr
-_020BE304:
- ands r1, r1, #0x10000000
- movne r2, r3, lsl #0x1
- addne r1, r0, r3, lsl #0x1
- ldrnesh r2, [r0, r2]
- ldrnesh r0, [r1, #0x2]
- addeq r1, r0, r3, lsl #0x2
- ldreq r2, [r0, r3, lsl #0x2]
- ldreq r0, [r1, #0x4]
- add r0, r2, r0
- mov r0, r0, asr #0x1
- bx lr
- .balign 4
-_020BE330: .word 0x0000FFFF
-
- arm_func_start FUN_020BE334
-FUN_020BE334: ; 0x020BE334
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r6, r1
- ldr r3, [r6, #0x0]
- ldr r5, [r6, #0x8]
- mov r1, r2, lsl #0x10
- mov r2, r3, lsl #0x4
- mov r7, r0
- mov r0, r5
- mov r1, r1, lsr #0x10
- mov r2, r2, lsr #0x10
- bl FUN_020BC42C
- mov r4, r0
- ldrb r1, [r4, #0x2]
- mov r0, r5
- bl FUN_020BC4B8
- mov r1, r0
- ldr r0, [r6, #0x14]
- mov r2, r7
- bl FUN_020BE408
- ldrb r1, [r4, #0x3]
- cmp r1, #0xff
- addeq sp, sp, #0x4
- ldmeqia sp!, {r4-r7,pc}
- mov r0, r5
- bl FUN_020BC4A8
- mov r1, r0
- ldr r0, [r6, #0x14]
- mov r2, r7
- bl FUN_020BE3B4
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BE3B4
-FUN_020BE3B4: ; 0x020BE3B4
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldrh r0, [r5, #0x34]
- mov r4, r2
- add r0, r5, r0
- bl FUN_020BC2A0
- ldr r1, [r5, #0x2c]
- ldrh r2, [r0, #0x2]
- mov r1, r1, lsl #0x10
- mov r3, r1, lsr #0x10
- ands r1, r2, #0x1
- ldrh r0, [r0, #0x0]
- moveq r1, r3, lsl #0xf
- moveq r3, r1, lsr #0x10
- moveq r0, r0, lsl #0xf
- moveq r0, r0, lsr #0x10
- add r0, r0, r3
- str r0, [r4, #0x14]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020BE408
-FUN_020BE408: ; 0x020BE408
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- add r0, r5, #0x3c
- mov r4, r2
- bl FUN_020BC2A0
- ldr r1, [r0, #0x0]
- ldr r3, [r4, #0x10]
- and r1, r1, #0x1c000000
- cmp r1, #0x14000000
- ldrne r2, [r5, #0x8]
- ldrne r1, _020BE4E0 ; =0x0000FFFF
- andne r5, r2, r1
- ldreq r2, [r5, #0x18]
- ldreq r1, _020BE4E0 ; =0x0000FFFF
- andeq r5, r2, r1
- ldr r1, _020BE4E4 ; =0xC00F0000
- ldr r2, _020BE4E8 ; =0x000007FF
- and r1, r3, r1
- str r1, [r4, #0x10]
- ldr r1, [r0, #0x0]
- ldr r3, [r4, #0x10]
- add r1, r1, r5
- orr r1, r3, r1
- str r1, [r4, #0x10]
- ldr r3, [r0, #0x4]
- ldr r1, _020BE4EC ; =0x003FF800
- and r3, r3, r2
- strh r3, [r4, #0x2c]
- ldr r3, [r0, #0x4]
- and r1, r3, r1
- mov r1, r1, lsr #0xb
- strh r1, [r4, #0x2e]
- ldr r3, [r0, #0x4]
- ldrh r1, [r4, #0x2c]
- and r0, r3, r2
- and r5, r2, r3, lsr #0xb
- cmp r0, r1
- moveq r0, #0x1000
- beq _020BE4B4
- mov r0, r0, lsl #0xc
- mov r1, r1, lsl #0xc
- bl FX_Div
-_020BE4B4:
- str r0, [r4, #0x30]
- ldrh r1, [r4, #0x2e]
- cmp r5, r1
- moveq r0, #0x1000
- beq _020BE4D4
- mov r0, r5, lsl #0xc
- mov r1, r1, lsl #0xc
- bl FX_Div
-_020BE4D4:
- str r0, [r4, #0x34]
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
- .balign 4
-_020BE4E0: .word 0x0000FFFF
-_020BE4E4: .word 0xC00F0000
-_020BE4E8: .word 0x000007FF
-_020BE4EC: .word 0x003FF800
-
- arm_func_start FUN_020BE4F0
-FUN_020BE4F0: ; 0x020BE4F0
- stmdb sp!, {r4-r9,lr}
- sub sp, sp, #0x4
- ldr r3, _020BE59C ; =UNK_021065A4
- ldr r4, [r2, #0x8]
- ldr r3, [r3, #0x0]
- mov r9, r0
- str r3, [r9, #0xc]
- ldrb r0, [r2, #0x18]
- mov r8, r1
- add r4, r2, r4
- strb r0, [r9, #0x19]
- str r8, [r9, #0x8]
- ldrb r2, [r9, #0x19]
- add r1, r9, #0x1a
- mov r0, #0x0
- mov r2, r2, lsl #0x1
- bl MIi_CpuClear16
- ldrb r0, [r8, #0xd]
- mov r7, #0x0
- cmp r0, #0x0
- addls sp, sp, #0x4
- ldmlsia sp!, {r4-r9,pc}
- mov r6, r7
- add r5, r8, #0xc
- add r4, r4, #0x4
-_020BE554:
- ldrh r1, [r8, #0x12]
- mov r0, r4
- add r2, r5, r1
- ldrh r1, [r2, #0x2]
- add r1, r2, r1
- add r1, r1, r6
- bl FUN_020BC14C
- cmp r0, #0x0
- orrge r1, r7, #0x100
- addge r0, r9, r0, lsl #0x1
- strgeh r1, [r0, #0x1a]
- ldrb r0, [r8, #0xd]
- add r7, r7, #0x1
- add r6, r6, #0x10
- cmp r7, r0
- blo _020BE554
- add sp, sp, #0x4
- ldmia sp!, {r4-r9,pc}
- .balign 4
-_020BE59C: .word UNK_021065A4
-
- arm_func_start FUN_020BE5A0
-FUN_020BE5A0: ; 0x020BE5A0
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- ldr lr, [r1, #0x8]
- ldr r3, [r1, #0x0]
- ldrh r1, [lr, #0x6]
- mov r12, r3, asr #0xc
- mov r3, #0x1
- mla r2, r12, r1, r2
- mov r1, r2, lsr #0x5
- add r1, lr, r1, lsl #0x2
- ldr r1, [r1, #0xc]
- and r2, r2, #0x1f
- and r1, r1, r3, lsl r2
- str r1, [r0, #0x0]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BE5E0
-FUN_020BE5E0: ; 0x020BE5E0
- ldr r3, _020BE628 ; =UNK_02106598
- mov r12, #0x0
- ldr r3, [r3, #0x0]
- str r3, [r0, #0xc]
- ldrb r2, [r2, #0x17]
- strb r2, [r0, #0x19]
- str r1, [r0, #0x8]
- ldrb r1, [r0, #0x19]
- cmp r1, #0x0
- bxls lr
-_020BE608:
- orr r2, r12, #0x100
- add r1, r0, r12, lsl #0x1
- strh r2, [r1, #0x1a]
- ldrb r1, [r0, #0x19]
- add r12, r12, #0x1
- cmp r12, r1
- blo _020BE608
- bx lr
- .balign 4
-_020BE628: .word UNK_02106598
-
- arm_func_start FUN_020BE62C
-FUN_020BE62C: ; 0x020BE62C
- ands r2, r3, #0x4
- ldrne r1, [r0, #0x0]
- orrne r1, r1, #0x1
- strne r1, [r0, #0x0]
- bne _020BE658
-
- arm_func_start FUN_020BE640
-FUN_020BE640: ; 0x020BE640
- ldr r2, [r1, #0x0]
- str r2, [r0, #0x4]
- ldr r2, [r1, #0x4]
- str r2, [r0, #0x8]
- ldr r1, [r1, #0x8]
- str r1, [r0, #0xc]
-_020BE658:
- ldr r1, [r0, #0x0]
- orr r1, r1, #0x18
- str r1, [r0, #0x0]
- bx lr
-
- arm_func_start FUN_020BE668
-FUN_020BE668: ; 0x020BE668
- stmdb sp!, {r4,lr}
- mov r4, r0
- ldr r1, [r4, #0x0]
- ands r0, r1, #0x4
- bne _020BE6AC
- ands r0, r1, #0x2
- bne _020BE698
- add r1, r4, #0x28
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
- b _020BE6C4
-_020BE698:
- add r1, r4, #0x4c
- mov r0, #0x1c
- mov r2, #0x3
- bl FUN_020BB1C0
- b _020BE6C4
-_020BE6AC:
- ands r0, r1, #0x2
- bne _020BE6C4
- add r1, r4, #0x28
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
-_020BE6C4:
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x1
- ldmneia sp!, {r4,pc}
- add r1, r4, #0x4
- mov r0, #0x1b
- mov r2, #0x3
- bl FUN_020BB1C0
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BE6E4
-FUN_020BE6E4: ; 0x020BE6E4
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x50
- mov r4, r0
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- ands r0, r0, #0x8
- ldrne r0, _020BE820 ; =0x00101610
- mov r3, #0x3
- strne r0, [sp, #0x0]
- ldreq r0, _020BE824 ; =0x00101810
- mov r2, #0x2
- streq r0, [sp, #0x0]
- mov r0, #0x1000
- str r0, [sp, #0x44]
- str r3, [sp, #0x4]
- str r2, [sp, #0x48]
- str r1, [sp, #0x40]
- str r1, [sp, #0x34]
- str r1, [sp, #0x30]
- str r1, [sp, #0x2c]
- str r1, [sp, #0x28]
- str r1, [sp, #0x24]
- str r1, [sp, #0x20]
- str r1, [sp, #0x14]
- str r1, [sp, #0x10]
- ldr r1, [r4, #0x0]
- ldr r0, _020BE828 ; =UNK_021067B0
- and r1, r1, #0x7
- ldr r2, [r0, r1, lsl #0x2]
- add r0, sp, #0x8
- mov r1, r4
- blx r2
- ldr r3, [r4, #0x30]
- cmp r3, #0x1000
- beq _020BE7B4
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0xc]
- smull r2, r0, r3, r0
- mov r2, r2, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x8]
- ldr r2, [r4, #0x30]
- ldr r0, [sp, #0x38]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0xc]
- ldr r1, [r4, #0x30]
- smull r2, r0, r1, r0
- mov r1, r2, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- str r1, [sp, #0x38]
-_020BE7B4:
- ldr r3, [r4, #0x34]
- cmp r3, #0x1000
- beq _020BE804
- ldr r0, [sp, #0x18]
- ldr r1, [sp, #0x1c]
- smull r2, r0, r3, r0
- mov r2, r2, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x18]
- ldr r2, [r4, #0x34]
- ldr r0, [sp, #0x3c]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0x1c]
- ldr r1, [r4, #0x34]
- smull r2, r0, r1, r0
- mov r1, r2, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- str r1, [sp, #0x3c]
-_020BE804:
- add r1, sp, #0x0
- ldr r0, [sp, #0x0]
- add r1, r1, #0x4
- mov r2, #0x12
- bl FUN_020BB1C0
- add sp, sp, #0x50
- ldmia sp!, {r4,pc}
- .balign 4
-_020BE820: .word 0x00101610
-_020BE824: .word 0x00101810
-_020BE828: .word UNK_021067B0
-
- arm_func_start FUN_020BE82C
-FUN_020BE82C: ; 0x020BE82C
- mov r2, #0x1000
- str r2, [r0, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x4]
- str r1, [r0, #0x10]
- str r2, [r0, #0x14]
- str r1, [r0, #0x30]
- str r1, [r0, #0x34]
- bx lr
-
- arm_func_start FUN_020BE850
-FUN_020BE850: ; 0x020BE850
- ldr r2, [r1, #0x18]
- mov r12, #0x0
- str r2, [r0, #0x0]
- ldr r2, [r1, #0x1c]
- str r2, [r0, #0x14]
- str r12, [r0, #0x4]
- str r12, [r0, #0x30]
- ldr r2, [r1, #0x1c]
- ldrh r3, [r1, #0x2e]
- mov r1, r2, lsl #0x1
- rsb r1, r1, #0x0
- add r1, r1, #0x2000
- mul r1, r3, r1
- mov r1, r1, lsl #0x3
- str r1, [r0, #0x34]
- str r12, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020BE894
-FUN_020BE894: ; 0x020BE894
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- mov r6, r0
- mov r4, r2, lsl #0xc
- mov r7, r1, lsl #0xc
- mov r0, r7
- mov r1, r4
- bl FX_DivAsync
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x0]
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x14]
- bl FX_GetDivResult
- ldrsh r2, [r5, #0x20]
- mov r1, r7
- rsb r2, r2, #0x0
- mul r0, r2, r0
- mov r2, r0, asr #0xc
- mov r0, r4
- str r2, [r6, #0x4]
- bl FX_DivAsync
- ldrsh r1, [r5, #0x20]
- ldrsh r0, [r5, #0x22]
- ldrh r2, [r5, #0x2c]
- add r0, r1, r0
- rsb r0, r0, #0x0
- add r0, r0, #0x1000
- mul r0, r2, r0
- mov r0, r0, lsl #0x3
- str r0, [r6, #0x30]
- ldrsh r1, [r5, #0x20]
- ldrsh r0, [r5, #0x22]
- ldrh r2, [r5, #0x2e]
- sub r0, r1, r0
- add r0, r0, #0x1000
- mul r0, r2, r0
- mov r0, r0, lsl #0x3
- str r0, [r6, #0x34]
- bl FX_GetDivResult
- ldrsh r1, [r5, #0x20]
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r6, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BE954
-FUN_020BE954: ; 0x020BE954
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r9, r1
- ldrh r2, [r9, #0x2c]
- ldrh r1, [r9, #0x2e]
- mov r10, r0
- mov r8, r2, lsl #0xc
- mov r11, r1, lsl #0xc
- mov r0, r11
- mov r1, r8
- bl FX_DivAsync
- ldrsh r5, [r9, #0x22]
- ldr r3, [r9, #0x18]
- ldrsh r0, [r9, #0x20]
- ldr r4, [r9, #0x1c]
- smull r2, r1, r3, r5
- mov r6, r2, lsr #0xc
- orr r6, r6, r1, lsl #0x14
- smull r2, r1, r3, r0
- mov r7, r2, lsr #0xc
- orr r7, r7, r1, lsl #0x14
- smull r3, r2, r4, r0
- smull r1, r0, r4, r5
- mov r5, r3, lsr #0xc
- orr r5, r5, r2, lsl #0x14
- mov r4, r1, lsr #0xc
- orr r4, r4, r0, lsl #0x14
- str r6, [r10, #0x0]
- str r4, [r10, #0x14]
- bl FX_GetDivResult
- mov r1, r11
- rsb r2, r5, #0x0
- mul r0, r2, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x4]
- mov r0, r8
- bl FX_DivAsync
- sub r1, r5, r4
- add r0, r7, r6
- ldrh r3, [r9, #0x2c]
- ldr r2, [r9, #0x18]
- sub r0, r2, r0
- mul r0, r3, r0
- mov r0, r0, lsl #0x3
- str r0, [r10, #0x30]
- ldrh r2, [r9, #0x2e]
- ldr r0, [r9, #0x1c]
- sub r0, r1, r0
- add r0, r0, #0x2000
- mul r0, r2, r0
- mov r0, r0, lsl #0x3
- str r0, [r10, #0x34]
- bl FX_GetDivResult
- mul r0, r7, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020BEA3C
-FUN_020BEA3C: ; 0x020BEA3C
- mov r2, #0x1000
- str r2, [r0, #0x0]
- str r2, [r0, #0x14]
- mov r12, #0x0
- str r12, [r0, #0x4]
- ldrh r2, [r1, #0x2c]
- ldr r3, [r1, #0x24]
- mul r2, r3, r2
- rsb r2, r2, #0x0
- mov r2, r2, lsl #0x4
- str r2, [r0, #0x30]
- ldrh r2, [r1, #0x2e]
- ldr r1, [r1, #0x28]
- mul r2, r1, r2
- mov r1, r2, lsl #0x4
- str r1, [r0, #0x34]
- str r12, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020BEA84
-FUN_020BEA84: ; 0x020BEA84
- stmdb sp!, {r4,lr}
- ldr r3, [r1, #0x18]
- mov r2, #0x0
- str r3, [r0, #0x0]
- ldr r3, [r1, #0x1c]
- str r3, [r0, #0x14]
- str r2, [r0, #0x4]
- ldr r4, [r1, #0x18]
- ldr r3, [r1, #0x24]
- ldrh lr, [r1, #0x2c]
- smull r12, r3, r4, r3
- mov r4, r12, lsr #0x8
- orr r4, r4, r3, lsl #0x18
- rsb r3, r4, #0x0
- mul r3, lr, r3
- str r3, [r0, #0x30]
- ldr r4, [r1, #0x1c]
- ldr r12, [r1, #0x28]
- mov r3, r4, lsl #0x1
- smull lr, r12, r4, r12
- rsb r4, r3, #0x0
- mov r3, lr, lsr #0x8
- ldrh lr, [r1, #0x2e]
- add r1, r4, #0x2000
- orr r3, r3, r12, lsl #0x18
- mul r4, lr, r1
- mul r1, lr, r3
- add r1, r1, r4, lsl #0x3
- str r1, [r0, #0x34]
- str r2, [r0, #0x10]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BEB00
-FUN_020BEB00: ; 0x020BEB00
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- mov r6, r0
- mov r4, r2, lsl #0xc
- mov r7, r1, lsl #0xc
- mov r0, r7
- mov r1, r4
- bl FX_DivAsync
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x0]
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x14]
- bl FX_GetDivResult
- ldrsh r2, [r5, #0x20]
- mov r1, r7
- rsb r2, r2, #0x0
- mul r0, r2, r0
- mov r2, r0, asr #0xc
- mov r0, r4
- str r2, [r6, #0x4]
- bl FX_DivAsync
- ldrsh r2, [r5, #0x20]
- ldrsh r1, [r5, #0x22]
- ldrh r3, [r5, #0x2c]
- ldr r0, [r5, #0x24]
- add r1, r2, r1
- rsb r1, r1, #0x0
- add r1, r1, #0x1000
- mul r2, r3, r1
- mul r1, r0, r3
- mov r0, r2, lsl #0x3
- sub r0, r0, r1, lsl #0x4
- str r0, [r6, #0x30]
- ldrsh r2, [r5, #0x20]
- ldrsh r1, [r5, #0x22]
- ldrh r3, [r5, #0x2e]
- ldr r0, [r5, #0x28]
- sub r1, r2, r1
- add r1, r1, #0x1000
- mul r2, r3, r1
- mul r1, r0, r3
- mov r0, r2, lsl #0x3
- add r0, r0, r1, lsl #0x4
- str r0, [r6, #0x34]
- bl FX_GetDivResult
- ldrsh r1, [r5, #0x20]
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r6, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BEBD8
-FUN_020BEBD8: ; 0x020BEBD8
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r9, r1
- ldrh r2, [r9, #0x2c]
- ldrh r1, [r9, #0x2e]
- mov r10, r0
- mov r8, r2, lsl #0xc
- mov r11, r1, lsl #0xc
- mov r0, r11
- mov r1, r8
- bl FX_DivAsync
- ldrsh r5, [r9, #0x22]
- ldr r3, [r9, #0x18]
- ldrsh r0, [r9, #0x20]
- ldr r4, [r9, #0x1c]
- smull r2, r1, r3, r5
- mov r6, r2, lsr #0xc
- orr r6, r6, r1, lsl #0x14
- smull r2, r1, r3, r0
- mov r7, r2, lsr #0xc
- orr r7, r7, r1, lsl #0x14
- smull r3, r2, r4, r0
- smull r1, r0, r4, r5
- mov r5, r3, lsr #0xc
- orr r5, r5, r2, lsl #0x14
- mov r4, r1, lsr #0xc
- orr r4, r4, r0, lsl #0x14
- str r6, [r10, #0x0]
- str r4, [r10, #0x14]
- bl FX_GetDivResult
- mov r1, r11
- rsb r2, r5, #0x0
- mul r0, r2, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x4]
- mov r0, r8
- bl FX_DivAsync
- sub r1, r5, r4
- add r2, r7, r6
- ldr r5, [r9, #0x18]
- ldrh r0, [r9, #0x2c]
- sub r3, r5, r2
- ldr r2, [r9, #0x24]
- mul r4, r0, r3
- smull r3, r2, r5, r2
- mov r4, r4, lsl #0x3
- mov r3, r3, lsr #0x8
- orr r3, r3, r2, lsl #0x18
- mul r2, r0, r3
- sub r0, r4, r2
- str r0, [r10, #0x30]
- ldr r4, [r9, #0x1c]
- ldrh r3, [r9, #0x2e]
- sub r0, r1, r4
- add r0, r0, #0x2000
- mul r2, r3, r0
- ldr r0, [r9, #0x28]
- smull r1, r0, r4, r0
- mov r1, r1, lsr #0x8
- orr r1, r1, r0, lsl #0x18
- mul r0, r3, r1
- add r0, r0, r2, lsl #0x3
- str r0, [r10, #0x34]
- bl FX_GetDivResult
- mul r0, r7, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020BECEC
-FUN_020BECEC: ; 0x020BECEC
- stmdb sp!, {r4-r8,lr}
- mov r12, r0
- ands r0, r3, #0x4
- ldrb r3, [r2, #0x3]
- beq _020BED40
- ldr r1, [r12, #0x0]
- ands r0, r3, #0x2
- orr r0, r1, #0x1
- str r0, [r12, #0x0]
- beq _020BEDB8
- ldr r0, _020BEE2C ; =UNK_021CEF7C
- ldrb r7, [r2, #0x1]
- ldr r0, [r0, #0x0]
- mov r1, #0x1
- add r6, r0, #0xc4
- mov r5, r7, lsr #0x5
- ldr r4, [r6, r5, lsl #0x2]
- and r0, r7, #0x1f
- orr r0, r4, r1, lsl r0
- str r0, [r6, r5, lsl #0x2]
- b _020BEDB8
-_020BED40:
- ldr r4, [r1, #0x0]
- ands r0, r3, #0x2
- str r4, [r12, #0x4]
- ldr r0, [r1, #0x4]
- str r0, [r12, #0x8]
- ldr r0, [r1, #0x8]
- str r0, [r12, #0xc]
- beq _020BEDB8
- ldr lr, _020BEE2C ; =UNK_021CEF7C
- ldrb r0, [r2, #0x1]
- ldr r4, [lr, #0x0]
- mov lr, #0x18
- add r8, r4, #0xc4
- mov r7, r0, lsr #0x5
- and r4, r0, #0x1f
- mov r5, #0x1
- mvn r4, r5, lsl r4
- ldr r6, [r8, r7, lsl #0x2]
- mul r5, r0, lr
- and r0, r6, r4
- str r0, [r8, r7, lsl #0x2]
- ldr r4, [r1, #0xc]
- ldr r0, _020BEE30 ; =UNK_021CFD8C
- ldr lr, _020BEE34 ; =UNK_021CFD90
- str r4, [r0, r5]
- ldr r4, [r1, #0x10]
- ldr r0, _020BEE38 ; =UNK_021CFD94
- str r4, [lr, r5]
- ldr r1, [r1, #0x14]
- str r1, [r0, r5]
-_020BEDB8:
- ands r0, r3, #0x1
- beq _020BEE1C
- ldrb r0, [r2, #0x2]
- ldr r2, [r12, #0x0]
- ldr r1, _020BEE2C ; =UNK_021CEF7C
- orr r2, r2, #0x20
- str r2, [r12, #0x0]
- ldr r2, [r1, #0x0]
- mov r1, r0, lsr #0x5
- add r1, r2, r1, lsl #0x2
- and r2, r0, #0x1f
- mov r3, #0x1
- mov r2, r3, lsl r2
- ldr r1, [r1, #0xc4]
- ands r1, r2, r1
- ldrne r0, [r12, #0x0]
- orrne r0, r0, #0x8
- strne r0, [r12, #0x0]
- bne _020BEE1C
- ldr r2, _020BEE30 ; =UNK_021CFD8C
- mov r1, #0x18
- mla r1, r0, r1, r2
- add r3, r12, #0x10
- ldmia r1, {r0-r2}
- stmia r3, {r0-r2}
-_020BEE1C:
- ldr r0, [r12, #0x0]
- orr r0, r0, #0x10
- str r0, [r12, #0x0]
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020BEE2C: .word UNK_021CEF7C
-_020BEE30: .word UNK_021CFD8C
-_020BEE34: .word UNK_021CFD90
-_020BEE38: .word UNK_021CFD94
-
- arm_func_start FUN_020BEE3C
-FUN_020BEE3C: ; 0x020BEE3C
- stmdb sp!, {r4-r5,lr}
- sub sp, sp, #0x4
- mov r5, r0
- ldr r1, [r5, #0x0]
- mov r4, #0x0
- ands r0, r1, #0x4
- moveq r4, #0x1
- ands r0, r1, #0x20
- beq _020BEE94
- ands r0, r1, #0x8
- bne _020BEE94
- cmp r4, #0x0
- beq _020BEE84
- add r1, r5, #0x4c
- mov r0, #0x1c
- mov r2, #0x3
- bl FUN_020BB1C0
- mov r4, #0x0
-_020BEE84:
- add r1, r5, #0x10
- mov r0, #0x1b
- mov r2, #0x3
- bl FUN_020BB1C0
-_020BEE94:
- ldr r0, [r5, #0x0]
- ands r0, r0, #0x2
- bne _020BEED0
- cmp r4, #0x0
- beq _020BEEBC
- add r1, r5, #0x28
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
- b _020BEEE8
-_020BEEBC:
- add r1, r5, #0x28
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- b _020BEEE8
-_020BEED0:
- cmp r4, #0x0
- beq _020BEEE8
- add r1, r5, #0x4c
- mov r0, #0x1c
- mov r2, #0x3
- bl FUN_020BB1C0
-_020BEEE8:
- ldr r0, [r5, #0x0]
- ands r0, r0, #0x1
- addne sp, sp, #0x4
- ldmneia sp!, {r4-r5,pc}
- add r1, r5, #0x4
- mov r0, #0x1b
- mov r2, #0x3
- bl FUN_020BB1C0
- add sp, sp, #0x4
- ldmia sp!, {r4-r5,pc}
-
- arm_func_start FUN_020BEF10
-FUN_020BEF10: ; 0x020BEF10
- stmdb sp!, {lr}
- sub sp, sp, #0x3c
- ldr r1, [r0, #0x0]
- mov r3, #0x0
- ands r1, r1, #0x8
- ldrne r1, _020BF0CC ; =0x00101710
- mov r2, #0x3
- strne r1, [sp, #0x0]
- ldreq r1, _020BF0D0 ; =0x00101910
- str r3, [sp, #0x34]
- streq r1, [sp, #0x0]
- mov r1, #0x2
- str r1, [sp, #0x38]
- str r3, [sp, #0x28]
- str r3, [sp, #0x24]
- str r3, [sp, #0x20]
- str r3, [sp, #0x1c]
- str r3, [sp, #0x14]
- str r3, [sp, #0x10]
- str r3, [sp, #0xc]
- str r2, [sp, #0x4]
- ldr r2, [r0, #0x0]
- ands r1, r2, #0x4
- beq _020BEFA0
- str r3, [sp, #0x2c]
- str r3, [sp, #0x30]
- ldr r1, [r0, #0x0]
- ands r1, r1, #0x1
- movne r1, #0x1000
- strne r1, [sp, #0x8]
- strne r1, [sp, #0x18]
- ldreq r1, [r0, #0x18]
- streq r1, [sp, #0x8]
- ldreq r1, [r0, #0x1c]
- streq r1, [sp, #0x18]
- b _020BF040
-_020BEFA0:
- ands r1, r2, #0x1
- beq _020BEFE8
- ldr r2, [r0, #0x24]
- ldrh r1, [r0, #0x2c]
- mov r2, r2, lsl #0x4
- rsb r2, r2, #0x0
- mul r1, r2, r1
- str r1, [sp, #0x2c]
- ldr r2, [r0, #0x28]
- ldrh r1, [r0, #0x2e]
- mov r2, r2, lsl #0x4
- rsb r2, r2, #0x0
- mul r3, r2, r1
- mov r1, #0x1000
- str r3, [sp, #0x30]
- str r1, [sp, #0x8]
- str r1, [sp, #0x18]
- b _020BF040
-_020BEFE8:
- ldr r2, [r0, #0x18]
- ldr r1, [r0, #0x24]
- ldrh r12, [r0, #0x2c]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0x8
- orr r2, r2, r1, lsl #0x18
- rsb r1, r2, #0x0
- mul r1, r12, r1
- str r1, [sp, #0x2c]
- ldr r2, [r0, #0x1c]
- ldr r1, [r0, #0x28]
- ldrh r12, [r0, #0x2e]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0x8
- orr r2, r2, r1, lsl #0x18
- rsb r1, r2, #0x0
- mul r1, r12, r1
- str r1, [sp, #0x30]
- ldr r1, [r0, #0x18]
- str r1, [sp, #0x8]
- ldr r1, [r0, #0x1c]
- str r1, [sp, #0x18]
-_020BF040:
- ldr r12, [r0, #0x30]
- cmp r12, #0x1000
- beq _020BF078
- ldr r2, [sp, #0x8]
- ldr r1, [sp, #0x2c]
- smull r3, r2, r12, r2
- mov r3, r3, lsr #0xc
- orr r3, r3, r2, lsl #0x14
- str r3, [sp, #0x8]
- ldr r2, [r0, #0x30]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0x2c]
-_020BF078:
- ldr r12, [r0, #0x34]
- cmp r12, #0x1000
- beq _020BF0B0
- ldr r2, [sp, #0x18]
- ldr r1, [sp, #0x30]
- smull r3, r2, r12, r2
- mov r3, r3, lsr #0xc
- orr r3, r3, r2, lsl #0x14
- str r3, [sp, #0x18]
- ldr r0, [r0, #0x34]
- smull r2, r1, r0, r1
- mov r0, r2, lsr #0xc
- orr r0, r0, r1, lsl #0x14
- str r0, [sp, #0x30]
-_020BF0B0:
- add r1, sp, #0x0
- ldr r0, [sp, #0x0]
- add r1, r1, #0x4
- mov r2, #0xe
- bl FUN_020BB1C0
- add sp, sp, #0x3c
- ldmia sp!, {pc}
- .balign 4
-_020BF0CC: .word 0x00101710
-_020BF0D0: .word 0x00101910
-
- arm_func_start FUN_020BF0D4
-FUN_020BF0D4: ; 0x020BF0D4
- stmdb sp!, {r4-r8,lr}
- mov r5, r0
- ands r0, r3, #0x4
- ldrb r4, [r2, #0x1]
- ldrb r0, [r2, #0x2]
- beq _020BF174
- ldr r2, [r5, #0x0]
- ldr r1, _020BF2E0 ; =UNK_021CEF7C
- orr r2, r2, #0x1
- str r2, [r5, #0x0]
- ldr r3, [r1, #0x0]
- mov r1, r0, lsr #0x5
- add r1, r3, r1, lsl #0x2
- and r2, r0, #0x1f
- mov r6, #0x1
- mov r2, r6, lsl r2
- ldr r1, [r1, #0xc4]
- ands r1, r2, r1
- beq _020BF148
- add r3, r3, #0xc4
- mov r2, r4, lsr #0x5
- ldr r1, [r3, r2, lsl #0x2]
- and r0, r4, #0x1f
- orr r0, r1, r6, lsl r0
- str r0, [r3, r2, lsl #0x2]
- ldr r0, [r5, #0x0]
- orr r0, r0, #0x18
- str r0, [r5, #0x0]
- ldmia sp!, {r4-r8,pc}
-_020BF148:
- ldr r1, _020BF2E4 ; =UNK_021CFD80
- mov r2, #0x18
- mla r6, r0, r2, r1
- mla r1, r4, r2, r1
- mov r0, r6
- bl MIi_CpuCopy32
- mov r0, r6
- add r1, r5, #0x10
- mov r2, #0x18
- bl MIi_CpuCopy32
- ldmia sp!, {r4-r8,pc}
-_020BF174:
- ldr r3, [r1, #0x0]
- ldr r2, _020BF2E0 ; =UNK_021CEF7C
- str r3, [r5, #0x4]
- ldr r3, [r1, #0x4]
- mov r7, r0, lsr #0x5
- str r3, [r5, #0x8]
- ldr r3, [r1, #0x8]
- and r8, r0, #0x1f
- str r3, [r5, #0xc]
- ldr r6, [r2, #0x0]
- mov r3, #0x1
- add r2, r6, r7, lsl #0x2
- mov r7, r3, lsl r8
- ldr r2, [r2, #0xc4]
- ands r2, r7, r2
- beq _020BF200
- ldr r3, _020BF2E4 ; =UNK_021CFD80
- mov r2, #0x18
- mov r0, r1
- mla r1, r4, r2, r3
- bl MIi_CpuCopy32
- ldr r0, _020BF2E0 ; =UNK_021CEF7C
- mov r2, r4, lsr #0x5
- ldr r1, [r0, #0x0]
- and r0, r4, #0x1f
- add r3, r1, #0xc4
- mov r1, #0x1
- mvn r0, r1, lsl r0
- ldr r1, [r3, r2, lsl #0x2]
- and r0, r1, r0
- str r0, [r3, r2, lsl #0x2]
- ldr r0, [r5, #0x0]
- orr r0, r0, #0x18
- str r0, [r5, #0x0]
- ldmia sp!, {r4-r8,pc}
-_020BF200:
- mov r2, #0x18
- mul r12, r0, r2
- and r7, r4, #0x1f
- ldr r0, _020BF2E4 ; =UNK_021CFD80
- add r6, r6, #0xc4
- mov lr, r4, lsr #0x5
- mvn r7, r3, lsl r7
- ldr r8, [r6, lr, lsl #0x2]
- mul r3, r4, r2
- and r4, r8, r7
- str r4, [r6, lr, lsl #0x2]
- ldr r7, [r1, #0x0]
- ldr r4, [r0, r12]
- ldr r6, _020BF2E8 ; =UNK_021CFD84
- smull r8, r4, r7, r4
- mov r7, r8, lsr #0xc
- orr r7, r7, r4, lsl #0x14
- str r7, [r0, r3]
- ldr r8, [r1, #0x4]
- ldr r4, [r6, r12]
- ldr r7, _020BF2EC ; =UNK_021CFD88
- smull lr, r4, r8, r4
- mov r8, lr, lsr #0xc
- orr r8, r8, r4, lsl #0x14
- str r8, [r6, r3]
- ldr r8, [r1, #0x8]
- ldr r4, [r7, r12]
- ldr r6, _020BF2F0 ; =UNK_021CFD8C
- smull lr, r4, r8, r4
- mov r8, lr, lsr #0xc
- orr r8, r8, r4, lsl #0x14
- str r8, [r7, r3]
- ldr r7, [r1, #0xc]
- ldr r4, [r6, r12]
- ldr lr, _020BF2F4 ; =UNK_021CFD90
- smull r8, r4, r7, r4
- mov r7, r8, lsr #0xc
- orr r7, r7, r4, lsl #0x14
- str r7, [r6, r3]
- ldr r7, [r1, #0x10]
- ldr r4, [lr, r12]
- ldr r6, _020BF2F8 ; =UNK_021CFD94
- smull r8, r4, r7, r4
- add r0, r0, r12
- mov r7, r8, lsr #0xc
- orr r7, r7, r4, lsl #0x14
- str r7, [lr, r3]
- ldr lr, [r1, #0x14]
- ldr r4, [r6, r12]
- add r1, r5, #0x10
- smull r5, r4, lr, r4
- mov r5, r5, lsr #0xc
- orr r5, r5, r4, lsl #0x14
- str r5, [r6, r3]
- bl MIi_CpuCopy32
- ldmia sp!, {r4-r8,pc}
- .balign 4
-_020BF2E0: .word UNK_021CEF7C
-_020BF2E4: .word UNK_021CFD80
-_020BF2E8: .word UNK_021CFD84
-_020BF2EC: .word UNK_021CFD88
-_020BF2F0: .word UNK_021CFD8C
-_020BF2F4: .word UNK_021CFD90
-_020BF2F8: .word UNK_021CFD94
-
- arm_func_start FUN_020BF2FC
-FUN_020BF2FC: ; 0x020BF2FC
- stmdb sp!, {r4-r6,lr}
- sub sp, sp, #0x10
- mov r6, r0
- ldr r0, [r6, #0x0]
- mov r5, #0x0
- ands r4, r0, #0x18
- bne _020BF328
- add r1, r6, #0x1c
- mov r0, #0x1b
- mov r2, #0x3
- bl FUN_020BB1C0
-_020BF328:
- ldr r0, [r6, #0x0]
- ands r0, r0, #0x4
- bne _020BF398
- cmp r4, #0x0
- movne r5, #0x1
- bne _020BF398
- ldr r2, [r6, #0x4c]
- ldr r0, [r6, #0x10]
- add r1, sp, #0x0
- smull r3, r0, r2, r0
- mov r2, r3, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x0]
- ldr r3, [r6, #0x50]
- ldr r2, [r6, #0x14]
- mov r0, #0x1c
- smull r12, r2, r3, r2
- mov r3, r12, lsr #0xc
- orr r3, r3, r2, lsl #0x14
- str r3, [sp, #0x4]
- ldr r12, [r6, #0x54]
- ldr r3, [r6, #0x18]
- mov r2, #0x3
- smull lr, r3, r12, r3
- mov r12, lr, lsr #0xc
- orr r12, r12, r3, lsl #0x14
- str r12, [sp, #0x8]
- bl FUN_020BB1C0
-_020BF398:
- ldr r0, [r6, #0x0]
- ands r0, r0, #0x2
- bne _020BF3D4
- cmp r5, #0x0
- beq _020BF3C0
- add r1, r6, #0x28
- mov r0, #0x19
- mov r2, #0xc
- bl FUN_020BB1C0
- b _020BF3EC
-_020BF3C0:
- add r1, r6, #0x28
- mov r0, #0x1a
- mov r2, #0x9
- bl FUN_020BB1C0
- b _020BF3EC
-_020BF3D4:
- cmp r5, #0x0
- beq _020BF3EC
- add r1, r6, #0x4c
- mov r0, #0x1c
- mov r2, #0x3
- bl FUN_020BB1C0
-_020BF3EC:
- cmp r4, #0x0
- bne _020BF404
- add r1, r6, #0x10
- mov r0, #0x1b
- mov r2, #0x3
- bl FUN_020BB1C0
-_020BF404:
- ldr r0, [r6, #0x0]
- ands r0, r0, #0x1
- addne sp, sp, #0x10
- ldmneia sp!, {r4-r6,pc}
- add r1, r6, #0x4
- mov r0, #0x1b
- mov r2, #0x3
- bl FUN_020BB1C0
- add sp, sp, #0x10
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BF42C
-FUN_020BF42C: ; 0x020BF42C
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x50
- mov r4, r0
- ldr r0, [r4, #0x0]
- mov r1, #0x0
- ands r0, r0, #0x8
- ldrne r0, _020BF568 ; =0x00101610
- mov r3, #0x3
- strne r0, [sp, #0x0]
- ldreq r0, _020BF56C ; =0x00101810
- mov r2, #0x2
- streq r0, [sp, #0x0]
- mov r0, #0x1000
- str r0, [sp, #0x44]
- str r3, [sp, #0x4]
- str r2, [sp, #0x48]
- str r1, [sp, #0x40]
- str r1, [sp, #0x34]
- str r1, [sp, #0x30]
- str r1, [sp, #0x2c]
- str r1, [sp, #0x28]
- str r1, [sp, #0x24]
- str r1, [sp, #0x20]
- str r1, [sp, #0x14]
- str r1, [sp, #0x10]
- ldr r1, [r4, #0x0]
- ldr r0, _020BF570 ; =UNK_021067D0
- and r1, r1, #0x7
- ldr r2, [r0, r1, lsl #0x2]
- add r0, sp, #0x8
- mov r1, r4
- blx r2
- ldr r3, [r4, #0x30]
- cmp r3, #0x1000
- beq _020BF4FC
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0xc]
- smull r2, r0, r3, r0
- mov r2, r2, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x8]
- ldr r2, [r4, #0x30]
- ldr r0, [sp, #0x38]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0xc]
- ldr r1, [r4, #0x30]
- smull r2, r0, r1, r0
- mov r1, r2, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- str r1, [sp, #0x38]
-_020BF4FC:
- ldr r3, [r4, #0x34]
- cmp r3, #0x1000
- beq _020BF54C
- ldr r0, [sp, #0x18]
- ldr r1, [sp, #0x1c]
- smull r2, r0, r3, r0
- mov r2, r2, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x18]
- ldr r2, [r4, #0x34]
- ldr r0, [sp, #0x3c]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0x1c]
- ldr r1, [r4, #0x34]
- smull r2, r0, r1, r0
- mov r1, r2, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- str r1, [sp, #0x3c]
-_020BF54C:
- add r1, sp, #0x0
- ldr r0, [sp, #0x0]
- add r1, r1, #0x4
- mov r2, #0x12
- bl FUN_020BB1C0
- add sp, sp, #0x50
- ldmia sp!, {r4,pc}
- .balign 4
-_020BF568: .word 0x00101610
-_020BF56C: .word 0x00101810
-_020BF570: .word UNK_021067D0
-
- arm_func_start FUN_020BF574
-FUN_020BF574: ; 0x020BF574
- mov r2, #0x1000
- str r2, [r0, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x4]
- str r1, [r0, #0x10]
- str r2, [r0, #0x14]
- str r1, [r0, #0x30]
- str r1, [r0, #0x34]
- bx lr
-
- arm_func_start FUN_020BF598
-FUN_020BF598: ; 0x020BF598
- ldr r2, [r1, #0x18]
- mov r12, #0x0
- str r2, [r0, #0x0]
- ldr r2, [r1, #0x1c]
- str r2, [r0, #0x14]
- str r12, [r0, #0x4]
- ldr r3, [r1, #0x18]
- ldrh r2, [r1, #0x2c]
- rsb r3, r3, #0x1000
- mul r2, r3, r2
- mov r2, r2, lsl #0x3
- str r2, [r0, #0x30]
- ldr r2, [r1, #0x1c]
- ldrh r1, [r1, #0x2e]
- rsb r2, r2, #0x1000
- mul r1, r2, r1
- mov r1, r1, lsl #0x3
- str r1, [r0, #0x34]
- str r12, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020BF5E8
-FUN_020BF5E8: ; 0x020BF5E8
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- mov r6, r0
- mov r4, r2, lsl #0xc
- mov r7, r1, lsl #0xc
- mov r0, r7
- mov r1, r4
- bl FX_DivAsync
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x0]
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x14]
- bl FX_GetDivResult
- ldrsh r2, [r5, #0x20]
- mov r1, r7
- mul r0, r2, r0
- mov r2, r0, asr #0xc
- mov r0, r4
- str r2, [r6, #0x4]
- bl FX_DivAsync
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- ldrsh r4, [r5, #0x22]
- rsb r0, r2, #0x0
- rsb r1, r1, #0x0
- mov r0, r0, lsl #0xb
- ldrsh r3, [r5, #0x20]
- mov r1, r1, lsl #0xb
- smull r7, lr, r4, r0
- smull r12, r4, r3, r1
- subs r7, r7, r12
- sbc r3, lr, r4
- mov r4, r7, lsr #0x8
- orr r4, r4, r3, lsl #0x18
- add r2, r4, r2, lsl #0xf
- str r2, [r6, #0x30]
- ldrsh r2, [r5, #0x22]
- ldrsh r3, [r5, #0x20]
- ldrh r12, [r5, #0x2e]
- smull r4, r1, r2, r1
- smlal r4, r1, r3, r0
- mov r0, r4, lsr #0x8
- orr r0, r0, r1, lsl #0x18
- add r0, r0, r12, lsl #0xf
- str r0, [r6, #0x34]
- bl FX_GetDivResult
- ldrsh r1, [r5, #0x20]
- rsb r1, r1, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r6, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BF6C8
-FUN_020BF6C8: ; 0x020BF6C8
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r9, r1
- ldrh r2, [r9, #0x2c]
- ldrh r1, [r9, #0x2e]
- mov r10, r0
- mov r8, r2, lsl #0xc
- mov r11, r1, lsl #0xc
- mov r0, r11
- mov r1, r8
- bl FX_DivAsync
- ldrsh r0, [r9, #0x22]
- ldr r3, [r9, #0x18]
- ldrsh r5, [r9, #0x20]
- ldr r4, [r9, #0x1c]
- smull r2, r1, r3, r0
- mov r7, r2, lsr #0xc
- orr r7, r7, r1, lsl #0x14
- smull r2, r1, r3, r5
- mov r6, r2, lsr #0xc
- orr r6, r6, r1, lsl #0x14
- smull r3, r2, r4, r0
- smull r1, r0, r4, r5
- mov r5, r3, lsr #0xc
- orr r5, r5, r2, lsl #0x14
- mov r4, r1, lsr #0xc
- orr r4, r4, r0, lsl #0x14
- str r7, [r10, #0x0]
- str r5, [r10, #0x14]
- bl FX_GetDivResult
- mov r1, r11
- mul r0, r4, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x4]
- mov r0, r8
- bl FX_DivAsync
- ldrh r3, [r9, #0x2c]
- ldrh r1, [r9, #0x2e]
- rsb r0, r3, #0x0
- rsb r1, r1, #0x0
- mov r2, r1, lsl #0xb
- mov r11, r0, lsl #0xb
- smull r1, r0, r7, r11
- smull r8, r7, r5, r2
- smlal r8, r7, r4, r11
- mov r4, r8, lsr #0x8
- orr r4, r4, r7, lsl #0x18
- smull r5, r2, r6, r2
- subs r1, r1, r5
- sbc r0, r0, r2
- mov r1, r1, lsr #0x8
- orr r1, r1, r0, lsl #0x18
- add r0, r1, r3, lsl #0xf
- str r0, [r10, #0x30]
- ldrh r0, [r9, #0x2e]
- add r0, r4, r0, lsl #0xf
- str r0, [r10, #0x34]
- bl FX_GetDivResult
- rsb r1, r6, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020BF7C8
-FUN_020BF7C8: ; 0x020BF7C8
- mov r2, #0x1000
- str r2, [r0, #0x0]
- str r2, [r0, #0x14]
- mov r12, #0x0
- str r12, [r0, #0x4]
- ldr r3, [r1, #0x24]
- ldrh r2, [r1, #0x2c]
- rsb r3, r3, #0x0
- mul r2, r3, r2
- mov r2, r2, lsl #0x4
- str r2, [r0, #0x30]
- ldrh r2, [r1, #0x2e]
- ldr r1, [r1, #0x28]
- mul r2, r1, r2
- mov r1, r2, lsl #0x4
- str r1, [r0, #0x34]
- str r12, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020BF810
-FUN_020BF810: ; 0x020BF810
- stmdb sp!, {r4-r6,lr}
- ldr r2, [r1, #0x18]
- mov r3, #0x0
- str r2, [r0, #0x0]
- ldr r2, [r1, #0x1c]
- str r2, [r0, #0x14]
- str r3, [r0, #0x4]
- ldrh r5, [r1, #0x2c]
- ldr r12, [r1, #0x24]
- ldrh r2, [r1, #0x2e]
- mul lr, r12, r5
- rsb r12, r5, #0x0
- mov r12, r12, lsl #0xb
- ldr r4, [r1, #0x18]
- sub r12, r12, lr
- smull lr, r12, r4, r12
- ldr r6, [r1, #0x28]
- mov r4, lr, lsr #0x8
- orr r4, r4, r12, lsl #0x18
- add r4, r4, r5, lsl #0xf
- str r4, [r0, #0x30]
- mul r4, r6, r2
- rsb r5, r2, #0x0
- ldr r2, [r1, #0x1c]
- add r4, r4, r5, lsl #0xb
- smull lr, r12, r2, r4
- mov r2, lr, lsr #0x8
- ldrh r1, [r1, #0x2e]
- orr r2, r2, r12, lsl #0x18
- add r1, r2, r1, lsl #0xf
- str r1, [r0, #0x34]
- str r3, [r0, #0x10]
- ldmia sp!, {r4-r6,pc}
-
- arm_func_start FUN_020BF894
-FUN_020BF894: ; 0x020BF894
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- mov r6, r0
- mov r4, r2, lsl #0xc
- mov r7, r1, lsl #0xc
- mov r0, r7
- mov r1, r4
- bl FX_DivAsync
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x0]
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x14]
- bl FX_GetDivResult
- ldrsh r2, [r5, #0x20]
- mov r1, r7
- mul r0, r2, r0
- mov r2, r0, asr #0xc
- mov r0, r4
- str r2, [r6, #0x4]
- bl FX_DivAsync
- ldrh r2, [r5, #0x2c]
- ldrh r7, [r5, #0x2e]
- ldr r1, [r5, #0x28]
- ldr r0, [r5, #0x24]
- rsb r4, r2, #0x0
- mul r3, r1, r7
- rsb r1, r7, #0x0
- add r1, r3, r1, lsl #0xb
- ldrsh r3, [r5, #0x20]
- mov r7, r4, lsl #0xb
- mul r4, r0, r2
- sub r0, r7, r4
- ldrsh lr, [r5, #0x22]
- smull r12, r4, r3, r1
- smull r7, r3, lr, r0
- subs r7, r7, r12
- sbc r3, r3, r4
- mov r4, r7, lsr #0x8
- orr r4, r4, r3, lsl #0x18
- add r2, r4, r2, lsl #0xf
- str r2, [r6, #0x30]
- ldrsh r2, [r5, #0x22]
- ldrsh r3, [r5, #0x20]
- ldrh r12, [r5, #0x2e]
- smull r4, r1, r2, r1
- smlal r4, r1, r3, r0
- mov r0, r4, lsr #0x8
- orr r0, r0, r1, lsl #0x18
- add r0, r0, r12, lsl #0xf
- str r0, [r6, #0x34]
- bl FX_GetDivResult
- ldrsh r1, [r5, #0x20]
- rsb r1, r1, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r6, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BF988
-FUN_020BF988: ; 0x020BF988
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r9, r1
- ldrh r2, [r9, #0x2c]
- ldrh r1, [r9, #0x2e]
- mov r10, r0
- mov r8, r2, lsl #0xc
- mov r11, r1, lsl #0xc
- mov r0, r11
- mov r1, r8
- bl FX_DivAsync
- ldrsh r0, [r9, #0x22]
- ldr r3, [r9, #0x18]
- ldrsh r5, [r9, #0x20]
- ldr r4, [r9, #0x1c]
- smull r2, r1, r3, r0
- mov r7, r2, lsr #0xc
- orr r7, r7, r1, lsl #0x14
- smull r2, r1, r3, r5
- mov r6, r2, lsr #0xc
- orr r6, r6, r1, lsl #0x14
- smull r3, r2, r4, r0
- smull r1, r0, r4, r5
- mov r5, r3, lsr #0xc
- orr r5, r5, r2, lsl #0x14
- mov r4, r1, lsr #0xc
- orr r4, r4, r0, lsl #0x14
- str r7, [r10, #0x0]
- str r5, [r10, #0x14]
- bl FX_GetDivResult
- mov r1, r11
- mul r0, r4, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x4]
- mov r0, r8
- bl FX_DivAsync
- ldrh r1, [r9, #0x2c]
- ldrh r8, [r9, #0x2e]
- ldr r2, [r9, #0x28]
- rsb r0, r1, #0x0
- mul r3, r2, r8
- rsb r2, r8, #0x0
- add r8, r3, r2, lsl #0xb
- mov r0, r0, lsl #0xb
- smull r3, r2, r5, r8
- smull r8, r5, r6, r8
- ldr r11, [r9, #0x24]
- mul r12, r11, r1
- sub r0, r0, r12
- smlal r3, r2, r4, r0
- smull r4, r0, r7, r0
- subs r4, r4, r8
- sbc r0, r0, r5
- mov r4, r4, lsr #0x8
- orr r4, r4, r0, lsl #0x18
- add r0, r4, r1, lsl #0xf
- str r0, [r10, #0x30]
- ldrh r1, [r9, #0x2e]
- mov r0, r3, lsr #0x8
- orr r0, r0, r2, lsl #0x18
- add r0, r0, r1, lsl #0xf
- str r0, [r10, #0x34]
- bl FX_GetDivResult
- rsb r1, r6, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020BFA9C
-FUN_020BFA9C: ; 0x020BFA9C
- stmdb sp!, {r4,lr}
- sub sp, sp, #0x50
- mov r4, r0
- ldr r0, [r4, #0x0]
- mov r3, #0x3
- ands r0, r0, #0x8
- ldrne r0, _020BFC1C ; =0x00101610
- mov r2, #0x2
- strne r0, [sp, #0x0]
- ldreq r0, _020BFC20 ; =0x00101810
- mov r1, #0x1000
- streq r0, [sp, #0x0]
- mov r0, #0x0
- str r3, [sp, #0x4]
- str r2, [sp, #0x48]
- str r1, [sp, #0x44]
- str r0, [sp, #0x40]
- str r0, [sp, #0x34]
- str r0, [sp, #0x30]
- str r0, [sp, #0x2c]
- str r0, [sp, #0x28]
- str r0, [sp, #0x24]
- str r0, [sp, #0x20]
- str r0, [sp, #0x14]
- str r0, [sp, #0x10]
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x1
- strne r1, [r4, #0x1c]
- ldrne r0, [r4, #0x1c]
- strne r0, [r4, #0x18]
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x2
- movne r0, #0x1000
- strneh r0, [r4, #0x22]
- movne r0, #0x0
- strneh r0, [r4, #0x20]
- ldr r0, [r4, #0x0]
- ands r0, r0, #0x4
- movne r0, #0x0
- strne r0, [r4, #0x28]
- ldrne r0, [r4, #0x28]
- strne r0, [r4, #0x24]
- ldr r1, [r4, #0x0]
- ldr r0, _020BFC24 ; =UNK_021067F0
- and r1, r1, #0x7
- ldr r2, [r0, r1, lsl #0x2]
- add r0, sp, #0x8
- mov r1, r4
- blx r2
- ldr r3, [r4, #0x30]
- cmp r3, #0x1000
- beq _020BFBB0
- ldr r0, [sp, #0x8]
- ldr r1, [sp, #0xc]
- smull r2, r0, r3, r0
- mov r2, r2, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x8]
- ldr r2, [r4, #0x30]
- ldr r0, [sp, #0x38]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0xc]
- ldr r1, [r4, #0x30]
- smull r2, r0, r1, r0
- mov r1, r2, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- str r1, [sp, #0x38]
-_020BFBB0:
- ldr r3, [r4, #0x34]
- cmp r3, #0x1000
- beq _020BFC00
- ldr r0, [sp, #0x18]
- ldr r1, [sp, #0x1c]
- smull r2, r0, r3, r0
- mov r2, r2, lsr #0xc
- orr r2, r2, r0, lsl #0x14
- str r2, [sp, #0x18]
- ldr r2, [r4, #0x34]
- ldr r0, [sp, #0x3c]
- smull r3, r1, r2, r1
- mov r2, r3, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [sp, #0x1c]
- ldr r1, [r4, #0x34]
- smull r2, r0, r1, r0
- mov r1, r2, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- str r1, [sp, #0x3c]
-_020BFC00:
- add r1, sp, #0x0
- ldr r0, [sp, #0x0]
- add r1, r1, #0x4
- mov r2, #0x12
- bl FUN_020BB1C0
- add sp, sp, #0x50
- ldmia sp!, {r4,pc}
- .balign 4
-_020BFC1C: .word 0x00101610
-_020BFC20: .word 0x00101810
-_020BFC24: .word UNK_021067F0
-
- arm_func_start FUN_020BFC28
-FUN_020BFC28: ; 0x020BFC28
- mov r2, #0x1000
- str r2, [r0, #0x0]
- mov r1, #0x0
- str r1, [r0, #0x4]
- str r1, [r0, #0x10]
- str r2, [r0, #0x14]
- str r1, [r0, #0x30]
- str r1, [r0, #0x34]
- bx lr
-
- arm_func_start FUN_020BFC4C
-FUN_020BFC4C: ; 0x020BFC4C
- ldr r2, [r1, #0x18]
- mov r3, #0x0
- str r2, [r0, #0x0]
- ldr r2, [r1, #0x1c]
- str r2, [r0, #0x14]
- str r3, [r0, #0x4]
- str r3, [r0, #0x30]
- ldrh r2, [r1, #0x2e]
- ldr r1, [r1, #0x1c]
- rsb r2, r2, #0x0
- sub r1, r1, #0x1000
- mul r1, r2, r1
- mov r1, r1, lsl #0x4
- str r1, [r0, #0x34]
- str r3, [r0, #0x10]
- bx lr
-
- arm_func_start FUN_020BFC8C
-FUN_020BFC8C: ; 0x020BFC8C
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- mov r6, r0
- mov r4, r2, lsl #0xc
- mov r7, r1, lsl #0xc
- mov r0, r7
- mov r1, r4
- bl FX_DivAsync
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x0]
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x14]
- bl FX_GetDivResult
- ldrsh r2, [r5, #0x20]
- mov r1, r7
- mul r0, r2, r0
- mov r2, r0, asr #0xc
- mov r0, r4
- str r2, [r6, #0x4]
- bl FX_DivAsync
- ldrh r1, [r5, #0x2c]
- ldrsh r0, [r5, #0x20]
- mul r0, r1, r0
- mov r0, r0, lsl #0x4
- str r0, [r6, #0x30]
- ldrh r1, [r5, #0x2e]
- ldrsh r0, [r5, #0x22]
- rsb r1, r1, #0x0
- sub r0, r0, #0x1000
- mul r0, r1, r0
- mov r0, r0, lsl #0x4
- str r0, [r6, #0x34]
- bl FX_GetDivResult
- ldrsh r1, [r5, #0x20]
- rsb r1, r1, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r6, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BFD38
-FUN_020BFD38: ; 0x020BFD38
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r9, r1
- ldrh r2, [r9, #0x2c]
- ldrh r1, [r9, #0x2e]
- mov r10, r0
- mov r8, r2, lsl #0xc
- mov r11, r1, lsl #0xc
- mov r0, r11
- mov r1, r8
- bl FX_DivAsync
- ldrsh r3, [r9, #0x22]
- ldr r0, [r9, #0x18]
- ldrsh r7, [r9, #0x20]
- ldr r5, [r9, #0x1c]
- smull r2, r1, r0, r3
- mov r2, r2, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- str r2, [r10, #0x0]
- smull r2, r1, r5, r3
- mov r4, r2, lsr #0xc
- orr r4, r4, r1, lsl #0x14
- smull r2, r1, r0, r7
- mov r6, r2, lsr #0xc
- orr r6, r6, r1, lsl #0x14
- str r4, [r10, #0x14]
- bl FX_GetDivResult
- smull r2, r1, r5, r7
- mov r2, r2, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- mul r0, r2, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x4]
- mov r0, r8
- mov r1, r11
- bl FX_DivAsync
- sub r0, r4, #0x1000
- ldrh r1, [r9, #0x2c]
- mul r2, r1, r6
- mov r1, r2, lsl #0x4
- str r1, [r10, #0x30]
- ldrh r1, [r9, #0x2e]
- rsb r1, r1, #0x0
- mul r0, r1, r0
- mov r0, r0, lsl #0x4
- str r0, [r10, #0x34]
- bl FX_GetDivResult
- rsb r1, r6, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r10, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
-
- arm_func_start FUN_020BFE0C
-FUN_020BFE0C: ; 0x020BFE0C
- stmdb sp!, {lr}
- sub sp, sp, #0x4
- mov r2, #0x1000
- str r2, [r0, #0x0]
- str r2, [r0, #0x14]
- mov lr, #0x0
- str lr, [r0, #0x4]
- ldr r2, [r1, #0x24]
- ldrh r3, [r1, #0x2c]
- rsb r2, r2, #0x0
- ldr r12, [r1, #0x28]
- mul r2, r3, r2
- mov r2, r2, lsl #0x4
- str r2, [r0, #0x30]
- ldrh r1, [r1, #0x2e]
- rsb r2, r12, #0x0
- rsb r1, r1, #0x0
- mul r2, r1, r2
- mov r1, r2, lsl #0x4
- str r1, [r0, #0x34]
- str lr, [r0, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {pc}
-
- arm_func_start FUN_020BFE68
-FUN_020BFE68: ; 0x020BFE68
- stmdb sp!, {r4,lr}
- ldr r3, [r1, #0x18]
- mov r2, #0x0
- str r3, [r0, #0x0]
- ldr r3, [r1, #0x1c]
- str r3, [r0, #0x14]
- str r2, [r0, #0x4]
- ldr r12, [r1, #0x24]
- ldr r3, [r1, #0x18]
- ldr r4, [r1, #0x28]
- smull lr, r3, r12, r3
- mov r12, lr, lsr #0xc
- orr r12, r12, r3, lsl #0x14
- ldrh lr, [r1, #0x2c]
- rsb r3, r12, #0x0
- ldr r12, [r1, #0x1c]
- rsb r4, r4, #0x0
- mul r3, lr, r3
- smull lr, r12, r4, r12
- mov r3, r3, lsl #0x4
- str r3, [r0, #0x30]
- mov r4, lr, lsr #0xc
- ldrh r3, [r1, #0x2e]
- ldr r1, [r1, #0x1c]
- orr r4, r4, r12, lsl #0x14
- add r1, r1, r4
- rsb r3, r3, #0x0
- sub r1, r1, #0x1000
- mul r1, r3, r1
- mov r1, r1, lsl #0x4
- str r1, [r0, #0x34]
- str r2, [r0, #0x10]
- ldmia sp!, {r4,pc}
-
- arm_func_start FUN_020BFEEC
-FUN_020BFEEC: ; 0x020BFEEC
- stmdb sp!, {r4-r7,lr}
- sub sp, sp, #0x4
- mov r5, r1
- ldrh r2, [r5, #0x2c]
- ldrh r1, [r5, #0x2e]
- mov r6, r0
- mov r4, r2, lsl #0xc
- mov r7, r1, lsl #0xc
- mov r0, r7
- mov r1, r4
- bl FX_DivAsync
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x0]
- ldrsh r0, [r5, #0x22]
- str r0, [r6, #0x14]
- bl FX_GetDivResult
- ldrsh r2, [r5, #0x20]
- mov r1, r7
- mul r0, r2, r0
- mov r2, r0, asr #0xc
- mov r0, r4
- str r2, [r6, #0x4]
- bl FX_DivAsync
- ldrsh lr, [r5, #0x20]
- ldr r4, [r5, #0x28]
- ldrsh r0, [r5, #0x22]
- ldr r12, [r5, #0x24]
- smull r3, r2, r4, lr
- smlal r3, r2, r12, r0
- smull r1, r0, r4, r0
- mov r3, r3, lsr #0xc
- orr r3, r3, r2, lsl #0x14
- sub r4, lr, r3
- smull r3, r2, r12, lr
- subs r1, r3, r1
- sbc r0, r2, r0
- ldrh r2, [r5, #0x2c]
- mov r1, r1, lsr #0xc
- orr r1, r1, r0, lsl #0x14
- mul r0, r2, r4
- mov r0, r0, lsl #0x4
- str r0, [r6, #0x30]
- ldrsh r0, [r5, #0x22]
- ldrh r2, [r5, #0x2e]
- add r0, r0, r1
- rsb r1, r2, #0x0
- sub r0, r0, #0x1000
- mul r0, r1, r0
- mov r0, r0, lsl #0x4
- str r0, [r6, #0x34]
- bl FX_GetDivResult
- ldrsh r1, [r5, #0x20]
- rsb r1, r1, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r6, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r7,pc}
-
- arm_func_start FUN_020BFFD4
-FUN_020BFFD4: ; 0x020BFFD4
- stmdb sp!, {r4-r11,lr}
- sub sp, sp, #0x4
- mov r6, r1
- ldrh r2, [r6, #0x2c]
- ldrh r1, [r6, #0x2e]
- mov r7, r0
- mov r10, r2, lsl #0xc
- mov r11, r1, lsl #0xc
- mov r0, r11
- mov r1, r10
- bl FX_DivAsync
- ldrsh r3, [r6, #0x22]
- ldr r0, [r6, #0x18]
- ldrsh r9, [r6, #0x20]
- smull r2, r1, r0, r3
- mov r2, r2, lsr #0xc
- ldr r8, [r6, #0x1c]
- orr r2, r2, r1, lsl #0x14
- str r2, [r7, #0x0]
- smull r2, r1, r8, r3
- mov r4, r2, lsr #0xc
- orr r4, r4, r1, lsl #0x14
- smull r2, r1, r0, r9
- mov r5, r2, lsr #0xc
- orr r5, r5, r1, lsl #0x14
- str r4, [r7, #0x14]
- bl FX_GetDivResult
- smull r2, r1, r8, r9
- mov r2, r2, lsr #0xc
- orr r2, r2, r1, lsl #0x14
- mul r0, r2, r0
- mov r0, r0, asr #0xc
- str r0, [r7, #0x4]
- mov r0, r10
- mov r1, r11
- bl FX_DivAsync
- ldr lr, [r6, #0x1c]
- ldrsh r2, [r6, #0x20]
- ldr r8, [r6, #0x24]
- ldr r0, [r6, #0x28]
- smull r10, r9, r8, r2
- ldrh r1, [r6, #0x2c]
- smull r3, r2, r0, r2
- ldrsh r12, [r6, #0x22]
- str r1, [sp, #0x0]
- mov r11, lr, asr #0x1f
- smlal r3, r2, r8, r12
- smull r8, r12, r0, r12
- subs r8, r10, r8
- sbc r0, r9, r12
- mov r9, r8, lsr #0xc
- mov r12, r3, lsr #0xc
- orr r9, r9, r0, lsl #0x14
- mov r3, r2, asr #0xc
- orr r12, r12, r2, lsl #0x14
- umull r10, r2, r9, lr
- mla r2, r9, r11, r2
- mov r8, r0, asr #0xc
- mla r2, r8, lr, r2
- ldr r1, [r6, #0x18]
- mov r8, r10, lsr #0xc
- orr r8, r8, r2, lsl #0x14
- add r2, r4, r8
- mov r0, r1, asr #0x1f
- umull r8, r4, r12, r1
- mla r4, r12, r0, r4
- mla r4, r3, r1, r4
- mov r0, r8, lsr #0xc
- orr r0, r0, r4, lsl #0x14
- sub r1, r5, r0
- ldr r0, [sp, #0x0]
- sub r2, r2, #0x1000
- mul r1, r0, r1
- mov r0, r1, lsl #0x4
- str r0, [r7, #0x30]
- ldrh r0, [r6, #0x2e]
- rsb r0, r0, #0x0
- mul r1, r0, r2
- mov r0, r1, lsl #0x4
- str r0, [r7, #0x34]
- bl FX_GetDivResult
- rsb r1, r5, #0x0
- mul r0, r1, r0
- mov r0, r0, asr #0xc
- str r0, [r7, #0x10]
- add sp, sp, #0x4
- ldmia sp!, {r4-r11,pc}
diff --git a/arm9/global.inc b/arm9/global.inc
index b3f4dcbb..f389ad93 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5572,229 +5572,229 @@
.extern VCT_Main
.extern VCT_Cleanup
.extern VCT_Init
-.extern FUN_020ADA84
-.extern FUN_020ADA98
-.extern FUN_020ADAB0
-.extern FUN_020ADB18
-.extern FUN_020ADBE8
-.extern FUN_020ADC74
-.extern FUN_020ADDC0
-.extern FUN_020ADDC8
-.extern FUN_020ADDF0
-.extern FUN_020ADE2C
-.extern FUN_020AE554
-.extern FUN_020AE5B0
-.extern FUN_020AE600
-.extern FUN_020AE638
-.extern FUN_020AE684
-.extern FUN_020AE82C
-.extern FUN_020AE84C
-.extern FUN_020AE868
-.extern FUN_020AE8CC
-.extern FUN_020AE918
-.extern FUN_020AEAF4
-.extern FUN_020AEB70
-.extern FUN_020AEC60
-.extern FUN_020AEC7C
-.extern FUN_020AEC98
-.extern FUN_020AEDF4
-.extern FUN_020AEE40
-.extern FUN_020AEEB8
-.extern FUN_020AEF1C
-.extern FUN_020AF2E0
-.extern FUN_020AF2F4
-.extern FUN_020AF30C
-.extern FUN_020AF6A4
-.extern FUN_020AF894
-.extern FUN_020AF9C4
-.extern FUN_020AFA28
-.extern FUN_020AFA30
-.extern FUN_020AFA80
-.extern FUN_020AFBA8
-.extern FUN_020AFBFC
-.extern FUN_020AFC04
-.extern FUN_020AFEB8
-.extern FUN_020AFFD8
-.extern FUN_020B0030
-.extern FUN_020B0088
-.extern FUN_020B00F0
-.extern FUN_020B0138
-.extern FUN_020B0180
-.extern FUN_020B0250
-.extern FUN_020B02C8
-.extern FUN_020B0448
-.extern FUN_020B04FC
-.extern FUN_020B0830
-.extern FUN_020B0870
-.extern FUN_020B0888
-.extern FUN_020B0BB0
-.extern FUN_020B0C7C
-.extern FUN_020B0D58
-.extern FUN_020B0E34
-.extern FUN_020B0FC0
-.extern FUN_020B10E8
-.extern FUN_020B1240
-.extern FUN_020B1340
-.extern FUN_020B1528
-.extern FUN_020B1768
-.extern FUN_020B19C4
-.extern FUN_020B19DC
-.extern FUN_020B1A14
-.extern FUN_020B1A1C
-.extern FUN_020B1A24
-.extern FUN_020B1AF8
-.extern FUN_020B1EA4
-.extern FUN_020B1EC4
-.extern FUN_020B1EE4
-.extern FUN_020B1EFC
-.extern FUN_020B1F80
-.extern FUN_020B20C8
-.extern FUN_020B2194
-.extern FUN_020B224C
-.extern FUN_020B23D8
-.extern FUN_020B242C
-.extern FUN_020B2794
-.extern FUN_020B28B4
-.extern FUN_020B2A08
-.extern FUN_020B2B08
-.extern FUN_020B2B58
-.extern FUN_020B2D9C
-.extern FUN_020B317C
-.extern FUN_020B31F0
-.extern FUN_020B326C
-.extern FUN_020B3334
-.extern FUN_020B3390
-.extern FUN_020B33A0
-.extern FUN_020B4358
-.extern FUN_020B43A4
-.extern FUN_020B442C
-.extern FUN_020B4568
-.extern FUN_020B4F38
-.extern FUN_020B502C
-.extern FUN_020B5C88
-.extern FUN_020B5CE4
-.extern FUN_020B5D3C
-.extern FUN_020B5E50
-.extern FUN_020B6180
-.extern FUN_020B6240
-.extern FUN_020B62F8
-.extern FUN_020B6388
-.extern FUN_020B63CC
-.extern FUN_020B7168
-.extern FUN_020B7218
-.extern FUN_020B772C
-.extern FUN_020B7790
-.extern FUN_020B7C58
-.extern FUN_020B7C78
-.extern FUN_020B7CDC
-.extern FUN_020B7CE4
-.extern FUN_020B7CF0
-.extern FUN_020B7D28
-.extern FUN_020B7DFC
-.extern FUN_020B7E10
-.extern FUN_020B7E1C
-.extern FUN_020B7E28
-.extern FUN_020B7EFC
-.extern FUN_020B80B4
-.extern FUN_020B8110
-.extern FUN_020B8344
-.extern FUN_020B8390
-.extern FUN_020B83BC
-.extern FUN_020B83E0
-.extern FUN_020B8404
-.extern FUN_020B8418
-.extern FUN_020B844C
-.extern FUN_020B8474
-.extern FUN_020B849C
-.extern FUN_020BAC98
-.extern FUN_020BAFB8
-.extern FUN_020BB1C0
-.extern FUN_020BB394
-.extern FUN_020BB408
-.extern FUN_020BB59C
-.extern FUN_020BB7F4
-.extern FUN_020BB8D0
-.extern FUN_020BB8F4
-.extern FUN_020BB934
-.extern FUN_020BB974
-.extern FUN_020BB9B4
-.extern FUN_020BB9F4
-.extern FUN_020BBA34
-.extern FUN_020BBA74
-.extern FUN_020BBAB4
-.extern FUN_020BBAF4
-.extern FUN_020BBB34
-.extern FUN_020BBB74
-.extern FUN_020BBBB4
-.extern FUN_020BBBF4
-.extern FUN_020BBC34
-.extern FUN_020BC02C
-.extern FUN_020BC094
-.extern FUN_020BC0FC
-.extern FUN_020BC13C
-.extern FUN_020BC2A0
-.extern FUN_020BC4C8
-.extern FUN_020C0174
-.extern FUN_020C01A0
-.extern SDAT_Init
-.extern FUN_020C03B8
-.extern FUN_020C041C
-.extern FUN_020C044C
-.extern FUN_020C04DC
-.extern FUN_020C0510
-.extern FUN_020C054C
-.extern FUN_020C0670
-.extern FUN_020C0688
-.extern FUN_020C0DD4
-.extern FUN_020C0E14
-.extern FUN_020C0E7C
-.extern FUN_020C0EA4
-.extern FUN_020C0EF4
-.extern FUN_020C0F30
-.extern FUN_020C0F40
-.extern FUN_020C0F50
-.extern FUN_020C0F68
-.extern FUN_020C0F80
-.extern FUN_020C0F8C
-.extern FUN_020C0F9C
-.extern FUN_020C0FDC
-.extern FUN_020C1040
-.extern FUN_020C10A4
-.extern FUN_020C1148
-.extern FUN_020C1180
-.extern FUN_020C13C4
-.extern FUN_020C1430
-.extern FUN_020C1458
-.extern FUN_020C14AC
-.extern FUN_020C1674
-.extern FUN_020C169C
-.extern FUN_020C16FC
-.extern FUN_020C1E58
-.extern FUN_020C1E68
-.extern FUN_020C1EA4
-.extern FUN_020C1F54
-.extern FUN_020C1FA4
-.extern FUN_020C1FF0
-.extern FUN_020C20DC
-.extern FUN_020C2104
-.extern FUN_020C217C
-.extern FUN_020C226C
-.extern FUN_020C22D0
-.extern FUN_020C23FC
-.extern FUN_020C2444
-.extern SDAT_Open
-.extern FUN_020C2828
-.extern FUN_020C290C
-.extern FUN_020C2A94
-.extern FUN_020C35E0
-.extern FUN_020C360C
-.extern FUN_020C3640
-.extern FUN_020C3674
-.extern FUN_020C36A8
-.extern FUN_020C3888
-.extern FUN_020C3910
-.extern FUN_020C3980
-.extern FUN_020C39CC
+.extern NNS_FndGetPrevListObject
+.extern NNS_FndGetNextListObject
+.extern NNS_FndRemoveListObject
+.extern NNS_FndInsertListObject
+.extern NNS_FndAppendListObject
+.extern NNS_FndInitList
+.extern NNS_FndGetSizeForMBlockExpHeap
+.extern NNS_FndGetTotalFreeSizeForExpHeap
+.extern NNS_FndFreeToExpHeap
+.extern NNS_FndResizeForMBlockExpHeap
+.extern NNS_FndFreeByStateToFrmHeap
+.extern NNS_FndRecordStateForFrmHeap
+.extern NNS_FndFreeToFrmHeap
+.extern NNS_FndAllocFromFrmHeapEx
+.extern NNS_FndCreateFrmHeapEx
+.extern NNS_FndInitAllocatorForExpHeap
+.extern NNS_FndFreeToAllocator
+.extern NNS_FndAllocFromAllocator
+.extern NNS_GfdSetFrmTexVramState
+.extern NNS_GfdGetFrmTexVramState
+.extern NNS_GfdResetFrmTexVramState
+.extern NNS_GfdInitFrmTexVramManager
+.extern NNS_GfdResetFrmPlttVramState
+.extern NNS_GfdSetFrmPlttVramState
+.extern NNS_GfdGetFrmPlttVramState
+.extern NNS_GfdInitFrmPlttVramManager
+.extern NNS_GfdRegisterNewVramTransferTask
+.extern NNS_GfdDoVramTransfer
+.extern NNS_GfdInitVramTransferManager
+.extern IsVramTransferTaskQueueEmpty_
+.extern IsVramTransferTaskQueueFull_
+.extern GetNextIndex_
+.extern NNS_GfdResetLnkTexVramState
+.extern NNS_GfdFreeLnkTexVram
+.extern NNS_GfdInitLnkTexVramManager
+.extern NNS_GfdGetLnkTexVramManagerWorkSize
+.extern NNS_GfdResetLnkPlttVramState
+.extern NNS_GfdFreeLnkPlttVram
+.extern NNS_GfdInitLnkPlttVramManager
+.extern NNS_GfdGetLnkPlttVramManagerWorkSize
+.extern NNS_G2dGetAnimSequenceByIdx
+.extern NNS_G2dGetUnpackedCellBank
+.extern NNS_G2dGetUnpackedMultiCellBank
+.extern NNS_G2dGetUnpackedBGCharacterData
+.extern NNS_G2dGetUnpackedCharacterData
+.extern NNS_G2dGetUnpackedPaletteCompressInfo
+.extern NNS_G2dGetUnpackedPaletteData
+.extern NNS_G2dGetUnpackedScreenData
+.extern NNS_G2dDrawSpriteFast
+.extern NNS_G2dSetupSoftwareSpriteCamera
+.extern NNS_G2dResetAnimCtrlState
+.extern NNS_G2dGetAnimCtrlCurrentFrame
+.extern NNS_G2dGetOamManagerOamCapacity
+.extern NNS_G2dApplyAndResetOamManagerBuffer
+.extern NNS_G2dResetOamManagerBuffer
+.extern NNS_G2dEntryOamManagerAffine
+.extern NNS_G2dEntryOamManagerOamWithAffineIdx
+.extern NNS_G2dEntryOamManagerOam
+.extern NNS_G2dGetNewOamManagerInstance
+.extern NNS_G2dInitOamManagerModule
+.extern NNS_G2dLoadPaletteEx
+.extern NNS_G2dLoadPalette
+.extern NNS_G2dLoadImageVramTransfer
+.extern NNS_G2dLoadImage2DMapping
+.extern NNS_G2dLoadImage1DMapping
+.extern NNS_G2dGetImagePaletteLocation
+.extern NNS_G2dInitImagePaletteProxy
+.extern NNS_G2dGetImageLocation
+.extern NNS_G2dSetImageLocation
+.extern NNS_G2dInitImageProxy
+.extern NNS_G2dMakeCellToOams
+.extern NNS_G2dSetCellAnimationCurrentFrame
+.extern NNS_G2dTickCellAnimation
+.extern NNS_G2dSetCellAnimationSequence
+.extern NNS_G2dInitCellAnimationVramTransfered
+.extern NNS_G2dInitCellAnimation
+.extern NNS_G2dInitMCAnimation
+.extern NNS_G2dSetMCAnimationCurrentFrame
+.extern NNS_G2dTickMCAnimation
+.extern NNS_G2dGetMCBankNumNodesRequired
+.extern NNS_G2dSetAnimSequenceToMCAnimation
+.extern NNS_G2dRotZ
+.extern NNS_G2dScale
+.extern NNS_G2dTranslate
+.extern NNS_G2dPopMtx
+.extern NNS_G2dPushMtx
+.extern NNS_G2dDrawMultiCellAnimation
+.extern NNS_G2dDrawCellAnimation
+.extern NNS_G2dEndRendering
+.extern NNS_G2dBeginRendering
+.extern NNS_G2dInitRenderSurface
+.extern NNS_G2dAddRendererTargetSurface
+.extern NNS_G2dInitRenderer
+.extern NNS_G2dFreeCellTransferStateHandle
+.extern NNS_G2dGetNewCellTransferStateHandle
+.extern NNS_G2dUpdateCellTransferStateManager
+.extern NNS_G2dInitCellTransferStateManager
+.extern NNS_G2dSetRndCoreFlipMode
+.extern NNS_G2dSetRndCoreAffineOverwriteMode
+.extern NNS_G2dFontGetCharWidthsFromIndex
+.extern NNS_G2dFontFindGlyphIndex
+.extern NNS_G2dFontInitUTF16
+.extern NNS_G2dArrangeOBJ1D
+.extern NNSi_G2dCalcRequiredOBJ
+.extern NNS_G2dMapScrToCharText
+.extern NNS_G2dCharCanvasInitForOBJ1D
+.extern NNS_G2dCharCanvasInitForBG
+.extern NNS_G2dCharCanvasDrawChar
+.extern NNSi_G2dTextCanvasDrawTextRect
+.extern NNSi_G2dTextCanvasDrawText
+.extern NNS_G3dReleaseMdlSet
+.extern NNS_G3dBindMdlSet
+.extern NNS_G3dPlttReleasePlttKey
+.extern NNS_G3dPlttLoad
+.extern NNS_G3dPlttSetPlttKey
+.extern NNS_G3dPlttGetRequiredSize
+.extern NNS_G3dTexReleaseTexKey
+.extern NNS_G3dTexLoad
+.extern NNS_G3dTexSetTexKey
+.extern NNS_G3dTex4x4GetRequiredSize
+.extern NNS_G3dTexGetRequiredSize
+.extern NNS_G3dRenderObjRemoveAnmObj
+.extern NNS_G3dRenderObjAddAnmObj
+.extern NNS_G3dRenderObjInit
+.extern NNS_G3dAnmObjInit
+.extern NNS_G3dGlbGetInvV
+.extern NNS_G3dGlbPolygonAttr
+.extern NNS_G3dGlbMaterialColorSpecEmi
+.extern NNS_G3dGlbMaterialColorDiffAmb
+.extern NNS_G3dGlbLightColor
+.extern NNS_G3dGlbLightVector
+.extern NNS_G3dGlbSetBaseScale
+.extern NNS_G3dGlbSetBaseTrans
+.extern NNS_G3dGlbFlushP
+.extern NNS_G3dDraw
+.extern NNS_G3dDraw1Mat1Shp
+.extern NNS_G3dGeBufferOP_N
+.extern NNS_G3dGeFlushBuffer
+.extern NNS_G3dWorldPosToScrPos
+.extern NNS_G3dResDefaultSetup
+.extern NNS_G3dInit
+.extern NNS_G3dAllocAnmObj
+.extern NNS_G3dMdlSetMdlXLDepthUpdateAll
+.extern NNS_G3dMdlSetMdlFarClipAll
+.extern NNS_G3dMdlSetMdl1DotAll
+.extern NNS_G3dMdlSetMdlDepthTestCondAll
+.extern NNS_G3dMdlSetMdlFogEnableFlagAll
+.extern NNS_G3dMdlSetMdlAlphaAll
+.extern NNS_G3dMdlSetMdlPolygonIDAll
+.extern NNS_G3dMdlSetMdlCullModeAll
+.extern NNS_G3dMdlSetMdlPolygonModeAll
+.extern NNS_G3dMdlSetMdlLightEnableFlagAll
+.extern NNS_G3dMdlSetMdlEmiAll
+.extern NNS_G3dMdlSetMdlSpecAll
+.extern NNS_G3dMdlSetMdlAmbAll
+.extern NNS_G3dMdlSetMdlDiffAll
+.extern NNSi_G3dModifyPolygonAttrMask
+.extern NNSi_G3dModifyMatFlag
+.extern NNS_G3dGetTex
+.extern NNS_G3dGetMdlSet
+.extern NNS_G3dGetResDataByName
+.extern NNS_G3dGetAnmByIdx
+.extern NNS_SndSetMonoFlag
+.extern NNS_SndMain
+.extern NNS_SndInit
+.extern NNS_SndWaveOutIsPlaying
+.extern NNS_SndWaveOutSetPan
+.extern NNS_SndWaveOutSetSpeed
+.extern NNS_SndWaveOutSetVolume
+.extern NNS_SndWaveOutStop
+.extern NNS_SndWaveOutStart
+.extern NNS_SndWaveOutFreeChannel
+.extern NNS_SndWaveOutAllocChannel
+.extern NNS_SndPlayerGetTick
+.extern NNS_SndPlayerGetSeqNo
+.extern NNS_SndPlayerSetTrackPan
+.extern NNS_SndPlayerSetTrackPitch
+.extern NNS_SndPlayerMoveVolume
+.extern NNS_SndPlayerSetInitialVolume
+.extern NNS_SndPlayerSetVolume
+.extern NNS_SndPlayerCountPlayingSeqByPlayerNo
+.extern NNS_SndHandleReleaseSeq
+.extern NNS_SndHandleInit
+.extern NNS_SndPlayerPause
+.extern NNS_SndPlayerStopSeqAll
+.extern NNS_SndPlayerStopSeqBySeqNo
+.extern NNS_SndPlayerStopSeqByPlayerNo
+.extern NNS_SndPlayerStopSeq
+.extern NNS_SndPlayerSetAllocatableChannel
+.extern NNS_SndPlayerSetPlayerVolume
+.extern NNS_SndStrmSetVolume
+.extern NNS_SndStrmStop
+.extern NNS_SndStrmStart
+.extern NNS_SndStrmSetup
+.extern NNS_SndStrmFreeChannel
+.extern NNS_SndStrmAllocChannel
+.extern NNS_SndStrmInit
+.extern NNS_SndCaptureIsActive
+.extern NNS_SndCaptureStopEffect
+.extern NNS_SndCaptureStartEffect
+.extern NNS_SndCaptureStopReverb
+.extern NNS_SndCaptureSetReverbVolume
+.extern NNS_SndCaptureStartReverb
+.extern NNS_SndArcGetFileAddress
+.extern NNS_SndArcReadFile
+.extern NNS_SndArcGetFileSize
+.extern NNS_SndArcGetWaveArcInfo
+.extern NNS_SndArcGetBankInfo
+.extern NNS_SndArcGetSeqParam
+.extern NNS_SndArcInitOnMemory
+.extern NNS_SndArcInit
+.extern NNS_SndHeapLoadState
+.extern NNS_SndHeapSaveState
+.extern NNS_SndHeapCreate
+.extern NNS_SndArcLoadSeqEx
+.extern NNS_SndArcLoadWaveArc
+.extern NNS_SndArcLoadBank
+.extern NNS_SndArcLoadSeq
+.extern NNS_SndArcLoadGroup
+.extern NNS_SndArcPlayerStartSeqArc
+.extern NNS_SndArcPlayerStartSeqEx
+.extern NNS_SndArcPlayerStartSeq
+.extern NNS_SndArcPlayerSetup
.extern FUN_020C5D8C
.extern FUN_020C5E04
.extern FUN_020C6034
@@ -8191,8 +8191,8 @@
.extern UNK_020FB764
.extern UNK_020FD144
.extern UNK_020FD6D4
-.extern UNK_021064B8
-.extern UNK_021064C0
+.extern NNS_GfdDefaultFuncAllocTexVram
+.extern NNS_GfdDefaultFuncAllocPlttVram
.extern gMain
.extern UNK_021C8ECC
.extern UNK_021C8ED0
@@ -8236,14 +8236,10 @@
.extern Unk_02106A04
.extern UNK_020FF368
.extern UNK_020FF3D4
-.extern UNK_020FFA38
+.extern FX_SinCosTable_
.extern UNK_02105BB8
-.extern UNK_021064BC
-.extern UNK_021064C4
-.extern UNK_021CED20
-.extern UNK_021CED98
-.extern UNK_021CEDD4
-.extern UNK_021CEF70
+.extern NNS_GfdDefaultFuncFreeTexVram
+.extern NNS_GfdDefaultFuncFreePlttVram
.extern UnloadOverlayByID
.extern VEC_Add
.extern VEC_CrossProduct
@@ -8465,16 +8461,16 @@
.extern sys_exit
.extern sys_readc
.extern sys_writec
-.extern tempName_NNS_FndAllocFromExpHeapEx
-.extern tempName_NNS_FndCreateExpHeapEx
+.extern NNS_FndAllocFromExpHeapEx
+.extern NNS_FndCreateExpHeapEx
.extern DWC_ClearDirtyFlag
.extern DWC_CreateUserData
-.extern thunk_FUN_020adc8c
-.extern thunk_FUN_020adc8c_2
-.extern thunk_FUN_020ae84c
-.extern thunk_FUN_020afda0
-.extern thunk_FUN_020afda0_2
-.extern thunk_FUN_020b5040
+.extern NNS_FndDestroyExpHeap
+.extern NNS_FndDestroyFrmHeap
+.extern NNS_G3dFreeAnmObj
+.extern NNS_G2dGetUnpackedMCAnimBank
+.extern NNS_G2dGetUnpackedAnimBank
+.extern NNS_G2dSetRendererImageProxy
.extern vsnprintf
.extern vsscanf
.extern vswprintf
@@ -8499,8 +8495,8 @@
.extern DWCi_BACKUPlWriteAll
.extern DWCi_BM_SetWiFiInfo
.extern DWC_Auth_CheckWiFiIDNeedCreate
-.extern UNK_021064B8
-.extern UNK_021064C0
+.extern NNS_GfdDefaultFuncAllocTexVram
+.extern NNS_GfdDefaultFuncAllocPlttVram
.extern MOD18_0224CA58
.extern MOD18_0223DFB4
.extern MOD18_02245FA0
@@ -8520,3 +8516,152 @@
.extern FUN_020254A0
.extern FUN_020254B4
.extern FUN_02041464
+.extern NNS_G2dGetCellDataByIdx
+.extern NNS_G2dBindAnimCtrl
+.extern NNS_G2dInitAnimCtrl
+.extern NNS_G2dSetAnimCtrlCurrentFrame
+.extern NNS_G2dTickAnimCtrl
+.extern NNS_G2dGetAnimCtrlCurrentElement
+.extern NNSi_G2dSrtcInitControl
+.extern NNSi_G2dSrtcSetSRTScale
+.extern NNSi_G2dSrtcSetSRTRotZ
+.extern NNSi_G2dSrtcSetTrans
+.extern NNS_G2dSetCellTransferStateRequested
+.extern NNSi_G2dInitCellTransferState
+.extern NNSi_objSizeHTbl
+.extern NNSi_objSizeWTbl
+.extern NNSi_G2dGetVramLocation
+.extern NNSi_G2dSetVramLocation
+.extern NNSi_G2dInitializeVRamLocation
+.extern NNSi_G2dBitReaderRead
+.extern NNSi_G2dGetUnpackedFont
+.extern NNSi_G2dSplitCharUTF16
+.extern NNS_G2dGetMultiCellDataByIdx
+.extern NNSi_G2dIsAnimCtrlLoopAnim
+.extern NNSi_G2dInitializeNode
+.extern NNS_G2dFindBinaryBlock
+.extern NNSi_G2dUnpackUserExCellAttrBank
+.extern GXi_DmaId
+.extern NNS_G2dGetPaletteTableValue
+.extern NNSi_G2dMtxConcat32
+.extern NNSi_G2dGetOamSoftEmuAutoZOffsetStep
+.extern NNSi_G2dSetOamSoftEmuAutoZOffsetStep
+.extern NNSi_G2dResetOamSoftEmuAutoZOffset
+.extern NNSi_G2dSetOamSoftEmuAutoZOffsetFlag
+.extern NNS_G2dRndCoreDrawCellVramTransfer
+.extern NNS_G2dRndCoreDrawCell
+.extern NNS_G2dRndCoreEndRendering
+.extern NNS_G2dRndCoreBeginRendering
+.extern NNS_G2dIsRndCoreFlipV
+.extern NNS_G2dIsRndCoreFlipH
+.extern NNS_G2dSetRndCoreSurface
+.extern NNS_G2dSetRndCore3DSoftSpriteZvalue
+.extern NNS_G2dSetRndCoreCurrentMtx2D
+.extern NNS_G2dSetRndCoreCurrentMtx3D
+.extern NNS_G2dSetRndCoreOamRegisterFunc
+.extern NNS_G2dSetRndCoreImageProxy
+.extern NNS_G2dInitRndCore
+.extern NNS_G2dIsImagePaletteReadyToUse
+.extern NNS_G2dIsImageReadyToUse
+.extern NNSi_G2dGetCellTransferState
+.extern NNS_G2dDrawOneOam3DDirectWithPosFast
+.extern NNSi_G2dFontGetTextRect
+.extern NNSi_G2dFontGetTextHeight
+.extern NNSi_G2dFontGetStringWidth
+.extern NNS_G3dGeSendDL
+.extern NNS_G3dSendTexSRT_FuncArray
+.extern NNSi_G3dAnmCalcNsBca
+.extern NNSi_G3dAnmObjInitNsBca
+.extern NNSi_G3dAnmCalcNsBma
+.extern NNSi_G3dAnmObjInitNsBma
+.extern NNSi_G3dAnmCalcNsBta
+.extern NNSi_G3dAnmObjInitNsBta
+.extern NNSi_G3dAnmCalcNsBtp
+.extern NNSi_G3dAnmObjInitNsBtp
+.extern NNSi_G3dAnmCalcNsBva
+.extern NNSi_G3dAnmObjInitNsBva
+.extern NNSi_G3dGetJointScaleBasic
+.extern NNSi_G3dSendJointSRTBasic
+.extern NNSi_G3dSendTexSRTMaya
+.extern NNSi_G3dGetJointScaleMaya
+.extern NNSi_G3dSendJointSRTMaya
+.extern NNSi_G3dSendTexSRTSi3d
+.extern NNSi_G3dGetJointScaleSi3d
+.extern NNSi_G3dSendJointSRTSi3d
+.extern NNSi_G3dSendTexSRT3dsMax
+.extern NNSi_G3dSendTexSRTXsi
+.extern NNS_G3dAnmFmtNum
+.extern NNS_G3dFuncBlendVisDefault
+.extern NNS_G3dFuncBlendJntDefault
+.extern NNS_G3dFuncBlendMatDefault
+.extern NNS_G3dAnmObjInitFuncArray
+.extern NNS_G3dRS
+.extern NNS_G3dAnmObjCalcSizeRequired
+.extern NNS_G3dFuncAnmJntNsBcaDefault
+.extern NNS_G3dGetResDictIdxByName
+.extern NNS_G3dFuncAnmMatNsBmaDefault
+.extern NNS_G3dFuncAnmMatNsBtaDefault
+.extern NNSi_G3dGetTexPatAnmFV
+.extern NNSi_G3dGetTexPatAnmPlttNameByIdx
+.extern NNSi_G3dGetTexPatAnmTexNameByIdx
+.extern NNS_G3dFuncAnmMatNsBtpDefault
+.extern NNS_G3dFuncAnmVisNsBvaDefault
+.extern NNS_G3dGlbGetInvWV
+.extern NNS_G3dGlbGetWV
+.extern NNS_G3dGetCurrentMtx
+.extern NNS_G3dSendJointSRT_FuncArray
+.extern NNS_G3dGetJointScale_FuncArray
+.extern NNS_G3dGlb
+.extern NNS_G3dGlbGetViewPort
+.extern NNS_G3dGlbInit
+.extern NNSi_GfdFreeLnkVram
+.extern NNSi_GfdAllocLnkVramAligned
+.extern NNSi_GfdAddNewFreeBlock
+.extern NNSi_GfdInitLnkVramBlockPool
+.extern NNSi_GfdInitLnkVramMan
+.extern NNSi_GfdAllocLnkVram
+.extern NNS_SndFreeAlarm
+.extern NNS_SndAllocAlarm
+.extern NNS_SndUnlockCapture
+.extern NNS_SndLockCapture
+.extern NNS_SndUnlockChannel
+.extern NNS_SndLockChannel
+.extern NNSi_SndFaderIsFinished
+.extern NNSi_SndFaderUpdate
+.extern NNSi_SndFaderGet
+.extern NNSi_SndFaderSet
+.extern NNS_G3dRSOnGlb
+.extern NNSi_SndFaderInit
+.extern SingleWaveDisposeCallback
+.extern NNSi_SndInitResourceMgr
+.extern NNSi_SndPlayerMain
+.extern NNSi_SndPlayerInit
+.extern NNSi_SndCaptureEndSleep
+.extern NNSi_SndCaptureBeginSleep
+.extern NNSi_SndCaptureMain
+.extern NNSi_SndCaptureInit
+.extern NNSi_SndArcStrmMain
+.extern NNS_SndHeapClear
+.extern NNS_SndHeapDestroy
+.extern NNS_SndHeapAlloc
+.extern SNDi_DecibelTable
+.extern NNS_SndArcSetFileAddress
+.extern NNS_SndArcGetGroupInfo
+.extern NNS_SndArcGetSeqArcInfo
+.extern NNS_SndArcGetSeqInfo
+.extern NNS_SndArcGetCurrent
+.extern NNS_SndArcSetCurrent
+.extern LoadSingleWaves
+.extern NNSi_SndPlayerAllocHeap
+.extern NNSi_SndPlayerStartSeq
+.extern NNSi_SndPlayerAllocSeqPlayer
+.extern NNS_SndPlayerSetSeqArcNo
+.extern NNS_SndPlayerSetSeqNo
+.extern NNS_SndPlayerSetChannelPriority
+.extern NNS_SndPlayerCreateHeap
+.extern NNS_SndPlayerSetPlayableSeqCount
+.extern NNS_SndArcGetPlayerInfo
+.extern NNSi_SndArcLoadBank
+.extern NNSi_SndArcLoadSeq
+.extern NNSi_SndSeqArcGetSeqInfo
+.extern NNSi_SndPlayerFreeSeqPlayer
diff --git a/arm9/lib/include/NNS_SND_arc.h b/arm9/lib/include/NNS_SND_arc.h
new file mode 100644
index 00000000..656c8728
--- /dev/null
+++ b/arm9/lib/include/NNS_SND_arc.h
@@ -0,0 +1,38 @@
+#ifndef GUARD_NNS_SND_ARC_H
+#define GUARD_NNS_SND_ARC_H
+
+#include "SND_main.h"
+
+typedef struct NNSSndArcHeader
+{
+ struct SNDBinaryFileHeader fileHeader;
+ u32 symbolDataOffset;
+ u32 symbolDataSize;
+ u32 infoOffset;
+ u32 infoSize;
+ u32 fatOffset;
+ u32 fatSize;
+ u32 fileImageOffset;
+ u32 fileImageSize;
+} NNSSndArcHeader;
+
+typedef struct NNSSndArc
+{
+ NNSSndArcHeader header;
+ BOOL file_open;
+ FSFile file;
+ FSFileID fileId;
+ struct NNSSndArcFat* fat;
+ struct NNSSndArcSymbol* symbol;
+ struct NNSSndArcInfo* info;
+} NNSSndArc;
+
+void NNS_SndInit(void);
+void NNS_SndArcInit(NNSSndArc *, const char *, void *, u32);
+void NNS_SndArcPlayerSetup(void *);
+void NNS_SndMain(void);
+void NNS_SndHandleInit(u32 *);
+void NNS_SndPlayerStopSeqByPlayerNo(int, int);
+void NNS_SndHandleReleaseSeq(void);
+
+#endif //GUARD_NNS_SND_ARC_H
diff --git a/arm9/lib/include/NNS_SND_arc_loader.h b/arm9/lib/include/NNS_SND_arc_loader.h
new file mode 100644
index 00000000..851c08ab
--- /dev/null
+++ b/arm9/lib/include/NNS_SND_arc_loader.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_NNS_SND_ARC_LOADER_H
+#define GUARD_NNS_SND_ARC_LOADER_H
+
+#include "NNS_SND_heap.h"
+
+BOOL NNS_SndArcLoadGroup(int groupNo, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadSeq(int seqNo, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadSeqEx(int seqNo, u32 loadFlag, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadWaveArc(int waveArcNo, NNSSndHeapHandle * heap);
+BOOL NNS_SndArcLoadBank(int bankNo, NNSSndHeapHandle * heap);
+
+#endif //GUARD_NNS_SND_ARC_LOADER_H
diff --git a/arm9/lib/include/NNS_SND_heap.h b/arm9/lib/include/NNS_SND_heap.h
new file mode 100644
index 00000000..9dc06a24
--- /dev/null
+++ b/arm9/lib/include/NNS_SND_heap.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_NNS_SND_HEAP_H
+#define GUARD_NNS_SND_HEAP_H
+
+struct NNSSndHeap;
+typedef struct NNSSndHeap* NNSSndHeapHandle;
+
+NNSSndHeapHandle * NNS_SndHeapCreate(void *, u32);
+int NNS_SndHeapSaveState(NNSSndHeapHandle *);
+void NNS_SndHeapLoadState(NNSSndHeapHandle *, int);
+
+#endif //GUARD_NNS_SND_HEAP_H
diff --git a/arm9/lib/src/FX_sincos.c b/arm9/lib/src/FX_sincos.c
new file mode 100644
index 00000000..89c8fc78
--- /dev/null
+++ b/arm9/lib/src/FX_sincos.c
@@ -0,0 +1,4105 @@
+#include "global.h"
+#include "fx.h"
+
+/*
+ * [2 * idx + 0] <- sin(idx * 2pi / 4096)
+ * [2 * idx + 1] <- cos(idx * 2pi / 4096)
+ */
+const fx16 FX_SinCosTable_[4096 * 2] = {
+ FX16_CONST(0.0), FX16_CONST(1.0),
+ FX16_CONST(0.0015339801862847655), FX16_CONST(0.9999988234517019),
+ FX16_CONST(0.003067956762965976), FX16_CONST(0.9999952938095762),
+ FX16_CONST(0.0046019261204485705), FX16_CONST(0.9999894110819284),
+ FX16_CONST(0.006135884649154475), FX16_CONST(0.9999811752826011),
+ FX16_CONST(0.007669828739531097), FX16_CONST(0.9999705864309741),
+ FX16_CONST(0.00920375478205982), FX16_CONST(0.9999576445519639),
+ FX16_CONST(0.01073765916726449), FX16_CONST(0.9999423496760239),
+ FX16_CONST(0.012271538285719925), FX16_CONST(0.9999247018391445),
+ FX16_CONST(0.01380538852806039), FX16_CONST(0.9999047010828529),
+ FX16_CONST(0.0153392062849881), FX16_CONST(0.9998823474542126),
+ FX16_CONST(0.01687298794728171), FX16_CONST(0.9998576410058239),
+ FX16_CONST(0.01840672990580482), FX16_CONST(0.9998305817958234),
+ FX16_CONST(0.01994042855151444), FX16_CONST(0.9998011698878843),
+ FX16_CONST(0.021474080275469508), FX16_CONST(0.9997694053512153),
+ FX16_CONST(0.02300768146883937), FX16_CONST(0.9997352882605617),
+ FX16_CONST(0.024541228522912288), FX16_CONST(0.9996988186962042),
+ FX16_CONST(0.0260747178291039), FX16_CONST(0.9996599967439592),
+ FX16_CONST(0.02760814577896574), FX16_CONST(0.9996188224951786),
+ FX16_CONST(0.029141508764193722), FX16_CONST(0.9995752960467492),
+ FX16_CONST(0.030674803176636626), FX16_CONST(0.9995294175010931),
+ FX16_CONST(0.032208025408304586), FX16_CONST(0.999481186966167),
+ FX16_CONST(0.03374117185137758), FX16_CONST(0.9994306045554617),
+ FX16_CONST(0.03527423889821395), FX16_CONST(0.9993776703880028),
+ FX16_CONST(0.03680722294135883), FX16_CONST(0.9993223845883495),
+ FX16_CONST(0.038340120373552694), FX16_CONST(0.9992647472865944),
+ FX16_CONST(0.03987292758773981), FX16_CONST(0.9992047586183639),
+ FX16_CONST(0.04140564097707674), FX16_CONST(0.9991424187248169),
+ FX16_CONST(0.04293825693494082), FX16_CONST(0.9990777277526454),
+ FX16_CONST(0.04447077185493867), FX16_CONST(0.9990106858540734),
+ FX16_CONST(0.04600318213091462), FX16_CONST(0.9989412931868569),
+ FX16_CONST(0.0475354841569593), FX16_CONST(0.9988695499142836),
+ FX16_CONST(0.049067674327418015), FX16_CONST(0.9987954562051724),
+ FX16_CONST(0.05059974903689928), FX16_CONST(0.9987190122338729),
+ FX16_CONST(0.052131704680283324), FX16_CONST(0.9986402181802653),
+ FX16_CONST(0.05366353765273052), FX16_CONST(0.9985590742297593),
+ FX16_CONST(0.055195244349689934), FX16_CONST(0.9984755805732948),
+ FX16_CONST(0.05672682116690775), FX16_CONST(0.9983897374073402),
+ FX16_CONST(0.05825826450043575), FX16_CONST(0.9983015449338929),
+ FX16_CONST(0.05978957074663987), FX16_CONST(0.9982110033604782),
+ FX16_CONST(0.06132073630220858), FX16_CONST(0.9981181129001492),
+ FX16_CONST(0.0628517575641614), FX16_CONST(0.9980228737714862),
+ FX16_CONST(0.06438263092985747), FX16_CONST(0.997925286198596),
+ FX16_CONST(0.0659133527970038), FX16_CONST(0.9978253504111116),
+ FX16_CONST(0.06744391956366405), FX16_CONST(0.9977230666441916),
+ FX16_CONST(0.06897432762826675), FX16_CONST(0.9976184351385196),
+ FX16_CONST(0.07050457338961386), FX16_CONST(0.9975114561403035),
+ FX16_CONST(0.07203465324688933), FX16_CONST(0.9974021299012753),
+ FX16_CONST(0.07356456359966743), FX16_CONST(0.9972904566786902),
+ FX16_CONST(0.0750943008479213), FX16_CONST(0.9971764367353262),
+ FX16_CONST(0.07662386139203149), FX16_CONST(0.997060070339483),
+ FX16_CONST(0.07815324163279423), FX16_CONST(0.9969413577649822),
+ FX16_CONST(0.07968243797143013), FX16_CONST(0.9968202992911657),
+ FX16_CONST(0.08121144680959244), FX16_CONST(0.9966968952028961),
+ FX16_CONST(0.08274026454937569), FX16_CONST(0.9965711457905548),
+ FX16_CONST(0.08426888759332407), FX16_CONST(0.9964430513500426),
+ FX16_CONST(0.0857973123444399), FX16_CONST(0.996312612182778),
+ FX16_CONST(0.08732553520619206), FX16_CONST(0.996179828595697),
+ FX16_CONST(0.0888535525825246), FX16_CONST(0.996044700901252),
+ FX16_CONST(0.09038136087786498), FX16_CONST(0.9959072294174117),
+ FX16_CONST(0.09190895649713272), FX16_CONST(0.9957674144676598),
+ FX16_CONST(0.09343633584574779), FX16_CONST(0.9956252563809943),
+ FX16_CONST(0.09496349532963899), FX16_CONST(0.9954807554919269),
+ FX16_CONST(0.09649043135525259), FX16_CONST(0.9953339121404823),
+ FX16_CONST(0.0980171403295606), FX16_CONST(0.9951847266721969),
+ FX16_CONST(0.09954361866006932), FX16_CONST(0.9950331994381186),
+ FX16_CONST(0.10106986275482782), FX16_CONST(0.9948793307948056),
+ FX16_CONST(0.10259586902243628), FX16_CONST(0.9947231211043257),
+ FX16_CONST(0.10412163387205459), FX16_CONST(0.9945645707342554),
+ FX16_CONST(0.10564715371341062), FX16_CONST(0.9944036800576791),
+ FX16_CONST(0.10717242495680884), FX16_CONST(0.9942404494531879),
+ FX16_CONST(0.10869744401313872), FX16_CONST(0.9940748793048794),
+ FX16_CONST(0.11022220729388306), FX16_CONST(0.9939069700023561),
+ FX16_CONST(0.11174671121112659), FX16_CONST(0.9937367219407246),
+ FX16_CONST(0.11327095217756435), FX16_CONST(0.9935641355205953),
+ FX16_CONST(0.11479492660651008), FX16_CONST(0.9933892111480807),
+ FX16_CONST(0.11631863091190475), FX16_CONST(0.9932119492347945),
+ FX16_CONST(0.11784206150832498), FX16_CONST(0.9930323501978514),
+ FX16_CONST(0.11936521481099135), FX16_CONST(0.9928504144598651),
+ FX16_CONST(0.12088808723577708), FX16_CONST(0.992666142448948),
+ FX16_CONST(0.1224106751992162), FX16_CONST(0.99247953459871),
+ FX16_CONST(0.12393297511851216), FX16_CONST(0.9922905913482574),
+ FX16_CONST(0.12545498341154623), FX16_CONST(0.9920993131421918),
+ FX16_CONST(0.12697669649688587), FX16_CONST(0.9919057004306093),
+ FX16_CONST(0.12849811079379317), FX16_CONST(0.9917097536690995),
+ FX16_CONST(0.13001922272223335), FX16_CONST(0.9915114733187439),
+ FX16_CONST(0.13154002870288312), FX16_CONST(0.9913108598461154),
+ FX16_CONST(0.13306052515713906), FX16_CONST(0.9911079137232769),
+ FX16_CONST(0.13458070850712617), FX16_CONST(0.99090263542778),
+ FX16_CONST(0.1361005751757062), FX16_CONST(0.9906950254426646),
+ FX16_CONST(0.13762012158648604), FX16_CONST(0.9904850842564571),
+ FX16_CONST(0.1391393441638262), FX16_CONST(0.9902728123631691),
+ FX16_CONST(0.1406582393328492), FX16_CONST(0.9900582102622971),
+ FX16_CONST(0.14217680351944803), FX16_CONST(0.9898412784588205),
+ FX16_CONST(0.14369503315029447), FX16_CONST(0.9896220174632009),
+ FX16_CONST(0.14521292465284746), FX16_CONST(0.9894004277913804),
+ FX16_CONST(0.14673047445536175), FX16_CONST(0.989176509964781),
+ FX16_CONST(0.14824767898689603), FX16_CONST(0.988950264510303),
+ FX16_CONST(0.1497645346773215), FX16_CONST(0.9887216919603238),
+ FX16_CONST(0.15128103795733022), FX16_CONST(0.9884907928526966),
+ FX16_CONST(0.15279718525844344), FX16_CONST(0.9882575677307495),
+ FX16_CONST(0.1543129730130201), FX16_CONST(0.9880220171432835),
+ FX16_CONST(0.15582839765426523), FX16_CONST(0.9877841416445722),
+ FX16_CONST(0.15734345561623825), FX16_CONST(0.9875439417943592),
+ FX16_CONST(0.15885814333386145), FX16_CONST(0.9873014181578584),
+ FX16_CONST(0.16037245724292828), FX16_CONST(0.987056571305751),
+ FX16_CONST(0.16188639378011183), FX16_CONST(0.9868094018141855),
+ FX16_CONST(0.16339994938297323), FX16_CONST(0.9865599102647754),
+ FX16_CONST(0.1649131204899699), FX16_CONST(0.9863080972445987),
+ FX16_CONST(0.1664259035404641), FX16_CONST(0.9860539633461954),
+ FX16_CONST(0.16793829497473117), FX16_CONST(0.9857975091675675),
+ FX16_CONST(0.16945029123396796), FX16_CONST(0.9855387353121761),
+ FX16_CONST(0.17096188876030122), FX16_CONST(0.9852776423889412),
+ FX16_CONST(0.17247308399679595), FX16_CONST(0.9850142310122398),
+ FX16_CONST(0.17398387338746382), FX16_CONST(0.9847485018019042),
+ FX16_CONST(0.17549425337727143), FX16_CONST(0.9844804553832209),
+ FX16_CONST(0.17700422041214875), FX16_CONST(0.984210092386929),
+ FX16_CONST(0.1785137709389975), FX16_CONST(0.9839374134492189),
+ FX16_CONST(0.18002290140569951), FX16_CONST(0.9836624192117303),
+ FX16_CONST(0.18153160826112497), FX16_CONST(0.9833851103215512),
+ FX16_CONST(0.18303988795514095), FX16_CONST(0.9831054874312163),
+ FX16_CONST(0.18454773693861962), FX16_CONST(0.9828235511987052),
+ FX16_CONST(0.18605515166344663), FX16_CONST(0.9825393022874412),
+ FX16_CONST(0.1875621285825296), FX16_CONST(0.9822527413662894),
+ FX16_CONST(0.1890686641498062), FX16_CONST(0.9819638691095552),
+ FX16_CONST(0.19057475482025274), FX16_CONST(0.9816726861969831),
+ FX16_CONST(0.19208039704989244), FX16_CONST(0.9813791933137546),
+ FX16_CONST(0.1935855872958036), FX16_CONST(0.9810833911504867),
+ FX16_CONST(0.19509032201612825), FX16_CONST(0.9807852804032304),
+ FX16_CONST(0.19659459767008022), FX16_CONST(0.9804848617734694),
+ FX16_CONST(0.19809841071795356), FX16_CONST(0.9801821359681174),
+ FX16_CONST(0.19960175762113097), FX16_CONST(0.9798771036995176),
+ FX16_CONST(0.2011046348420919), FX16_CONST(0.9795697656854405),
+ FX16_CONST(0.20260703884442113), FX16_CONST(0.979260122649082),
+ FX16_CONST(0.20410896609281687), FX16_CONST(0.9789481753190622),
+ FX16_CONST(0.20561041305309924), FX16_CONST(0.9786339244294232),
+ FX16_CONST(0.20711137619221856), FX16_CONST(0.9783173707196277),
+ FX16_CONST(0.20861185197826349), FX16_CONST(0.9779985149345571),
+ FX16_CONST(0.2101118368804696), FX16_CONST(0.9776773578245099),
+ FX16_CONST(0.21161132736922755), FX16_CONST(0.9773539001452),
+ FX16_CONST(0.21311031991609136), FX16_CONST(0.9770281426577544),
+ FX16_CONST(0.21460881099378676), FX16_CONST(0.9767000861287118),
+ FX16_CONST(0.21610679707621952), FX16_CONST(0.9763697313300211),
+ FX16_CONST(0.21760427463848364), FX16_CONST(0.976037079039039),
+ FX16_CONST(0.2191012401568698), FX16_CONST(0.9757021300385286),
+ FX16_CONST(0.2205976901088735), FX16_CONST(0.975364885116657),
+ FX16_CONST(0.2220936209732035), FX16_CONST(0.9750253450669941),
+ FX16_CONST(0.22358902922979), FX16_CONST(0.9746835106885107),
+ FX16_CONST(0.22508391135979283), FX16_CONST(0.9743393827855759),
+ FX16_CONST(0.22657826384561), FX16_CONST(0.9739929621679558),
+ FX16_CONST(0.22807208317088573), FX16_CONST(0.973644249650812),
+ FX16_CONST(0.22956536582051887), FX16_CONST(0.9732932460546982),
+ FX16_CONST(0.2310581082806711), FX16_CONST(0.9729399522055602),
+ FX16_CONST(0.23255030703877524), FX16_CONST(0.9725843689347322),
+ FX16_CONST(0.23404195858354343), FX16_CONST(0.9722264970789363),
+ FX16_CONST(0.2355330594049755), FX16_CONST(0.9718663374802794),
+ FX16_CONST(0.2370236059943672), FX16_CONST(0.9715038909862518),
+ FX16_CONST(0.23851359484431842), FX16_CONST(0.9711391584497251),
+ FX16_CONST(0.2400030224487415), FX16_CONST(0.9707721407289504),
+ FX16_CONST(0.24149188530286933), FX16_CONST(0.9704028386875555),
+ FX16_CONST(0.24298017990326387), FX16_CONST(0.970031253194544),
+ FX16_CONST(0.24446790274782415), FX16_CONST(0.9696573851242924),
+ FX16_CONST(0.2459550503357946), FX16_CONST(0.9692812353565485),
+ FX16_CONST(0.24744161916777327), FX16_CONST(0.9689028047764289),
+ FX16_CONST(0.24892760574572015), FX16_CONST(0.9685220942744174),
+ FX16_CONST(0.2504130065729652), FX16_CONST(0.9681391047463624),
+ FX16_CONST(0.25189781815421697), FX16_CONST(0.9677538370934755),
+ FX16_CONST(0.25338203699557016), FX16_CONST(0.9673662922223285),
+ FX16_CONST(0.25486565960451457), FX16_CONST(0.9669764710448521),
+ FX16_CONST(0.2563486824899429), FX16_CONST(0.9665843744783331),
+ FX16_CONST(0.257831102162159), FX16_CONST(0.9661900034454125),
+ FX16_CONST(0.25931291513288623), FX16_CONST(0.9657933588740837),
+ FX16_CONST(0.2607941179152755), FX16_CONST(0.9653944416976894),
+ FX16_CONST(0.2622747070239136), FX16_CONST(0.9649932528549203),
+ FX16_CONST(0.26375467897483135), FX16_CONST(0.9645897932898128),
+ FX16_CONST(0.2652340302855118), FX16_CONST(0.9641840639517458),
+ FX16_CONST(0.26671275747489837), FX16_CONST(0.9637760657954398),
+ FX16_CONST(0.2681908570634032), FX16_CONST(0.963365799780954),
+ FX16_CONST(0.2696683255729151), FX16_CONST(0.9629532668736839),
+ FX16_CONST(0.271145159526808), FX16_CONST(0.9625384680443592),
+ FX16_CONST(0.272621355449949), FX16_CONST(0.9621214042690416),
+ FX16_CONST(0.2740969098687064), FX16_CONST(0.9617020765291225),
+ FX16_CONST(0.27557181931095814), FX16_CONST(0.9612804858113206),
+ FX16_CONST(0.2770460803060999), FX16_CONST(0.9608566331076797),
+ FX16_CONST(0.27851968938505306), FX16_CONST(0.9604305194155658),
+ FX16_CONST(0.2799926430802732), FX16_CONST(0.960002145737666),
+ FX16_CONST(0.28146493792575794), FX16_CONST(0.9595715130819845),
+ FX16_CONST(0.2829365704570554), FX16_CONST(0.9591386224618419),
+ FX16_CONST(0.2844075372112719), FX16_CONST(0.9587034748958716),
+ FX16_CONST(0.2858778347270806), FX16_CONST(0.9582660714080177),
+ FX16_CONST(0.2873474595447295), FX16_CONST(0.9578264130275329),
+ FX16_CONST(0.2888164082060495), FX16_CONST(0.9573845007889759),
+ FX16_CONST(0.29028467725446233), FX16_CONST(0.9569403357322088),
+ FX16_CONST(0.29175226323498926), FX16_CONST(0.9564939189023951),
+ FX16_CONST(0.29321916269425863), FX16_CONST(0.9560452513499964),
+ FX16_CONST(0.2946853721805143), FX16_CONST(0.9555943341307711),
+ FX16_CONST(0.2961508882436238), FX16_CONST(0.9551411683057708),
+ FX16_CONST(0.2976157074350862), FX16_CONST(0.9546857549413383),
+ FX16_CONST(0.2990798263080405), FX16_CONST(0.9542280951091057),
+ FX16_CONST(0.30054324141727345), FX16_CONST(0.9537681898859903),
+ FX16_CONST(0.3020059493192281), FX16_CONST(0.9533060403541939),
+ FX16_CONST(0.3034679465720113), FX16_CONST(0.9528416476011987),
+ FX16_CONST(0.3049292297354024), FX16_CONST(0.9523750127197659),
+ FX16_CONST(0.3063897953708609), FX16_CONST(0.9519061368079323),
+ FX16_CONST(0.30784964004153487), FX16_CONST(0.9514350209690083),
+ FX16_CONST(0.3093087603122687), FX16_CONST(0.9509616663115751),
+ FX16_CONST(0.3107671527496115), FX16_CONST(0.9504860739494817),
+ FX16_CONST(0.3122248139218249), FX16_CONST(0.950008245001843),
+ FX16_CONST(0.3136817403988915), FX16_CONST(0.9495281805930367),
+ FX16_CONST(0.31513792875252244), FX16_CONST(0.9490458818527006),
+ FX16_CONST(0.31659337555616585), FX16_CONST(0.9485613499157303),
+ FX16_CONST(0.31804807738501495), FX16_CONST(0.9480745859222762),
+ FX16_CONST(0.3195020308160157), FX16_CONST(0.9475855910177411),
+ FX16_CONST(0.3209552324278752), FX16_CONST(0.9470943663527772),
+ FX16_CONST(0.32240767880106985), FX16_CONST(0.9466009130832835),
+ FX16_CONST(0.32385936651785285), FX16_CONST(0.9461052323704034),
+ FX16_CONST(0.3253102921622629), FX16_CONST(0.9456073253805213),
+ FX16_CONST(0.32676045232013173), FX16_CONST(0.9451071932852606),
+ FX16_CONST(0.3282098435790925), FX16_CONST(0.9446048372614803),
+ FX16_CONST(0.3296584625285875), FX16_CONST(0.9441002584912727),
+ FX16_CONST(0.33110630575987643), FX16_CONST(0.9435934581619604),
+ FX16_CONST(0.3325533698660442), FX16_CONST(0.9430844374660935),
+ FX16_CONST(0.3339996514420094), FX16_CONST(0.9425731976014469),
+ FX16_CONST(0.3354451470845316), FX16_CONST(0.9420597397710173),
+ FX16_CONST(0.33688985339222005), FX16_CONST(0.9415440651830208),
+ FX16_CONST(0.3383337669655411), FX16_CONST(0.9410261750508893),
+ FX16_CONST(0.33977688440682685), FX16_CONST(0.9405060705932683),
+ FX16_CONST(0.34121920232028236), FX16_CONST(0.939983753034014),
+ FX16_CONST(0.3426607173119944), FX16_CONST(0.9394592236021899),
+ FX16_CONST(0.3441014259899388), FX16_CONST(0.9389324835320646),
+ FX16_CONST(0.3455413249639891), FX16_CONST(0.9384035340631081),
+ FX16_CONST(0.3469804108459237), FX16_CONST(0.9378723764399899),
+ FX16_CONST(0.34841868024943456), FX16_CONST(0.937339011912575),
+ FX16_CONST(0.3498561297901349), FX16_CONST(0.9368034417359216),
+ FX16_CONST(0.3512927560855671), FX16_CONST(0.9362656671702783),
+ FX16_CONST(0.3527285557552107), FX16_CONST(0.9357256894810804),
+ FX16_CONST(0.35416352542049034), FX16_CONST(0.9351835099389476),
+ FX16_CONST(0.35559766170478385), FX16_CONST(0.9346391298196808),
+ FX16_CONST(0.35703096123343), FX16_CONST(0.9340925504042589),
+ FX16_CONST(0.35846342063373654), FX16_CONST(0.9335437729788362),
+ FX16_CONST(0.3598950365349881), FX16_CONST(0.932992798834739),
+ FX16_CONST(0.3613258055684543), FX16_CONST(0.9324396292684624),
+ FX16_CONST(0.3627557243673972), FX16_CONST(0.9318842655816681),
+ FX16_CONST(0.3641847895670799), FX16_CONST(0.9313267090811804),
+ FX16_CONST(0.36561299780477385), FX16_CONST(0.9307669610789837),
+ FX16_CONST(0.3670403457197672), FX16_CONST(0.9302050228922191),
+ FX16_CONST(0.3684668299533723), FX16_CONST(0.9296408958431812),
+ FX16_CONST(0.3698924471489341), FX16_CONST(0.9290745812593159),
+ FX16_CONST(0.37131719395183754), FX16_CONST(0.9285060804732156),
+ FX16_CONST(0.37274106700951576), FX16_CONST(0.9279353948226179),
+ FX16_CONST(0.37416406297145793), FX16_CONST(0.9273625256504011),
+ FX16_CONST(0.3755861784892172), FX16_CONST(0.9267874743045817),
+ FX16_CONST(0.37700741021641826), FX16_CONST(0.9262102421383114),
+ FX16_CONST(0.37842775480876556), FX16_CONST(0.9256308305098727),
+ FX16_CONST(0.37984720892405116), FX16_CONST(0.9250492407826776),
+ FX16_CONST(0.3812657692221624), FX16_CONST(0.9244654743252626),
+ FX16_CONST(0.3826834323650898), FX16_CONST(0.9238795325112867),
+ FX16_CONST(0.38410019501693504), FX16_CONST(0.9232914167195276),
+ FX16_CONST(0.38551605384391885), FX16_CONST(0.9227011283338786),
+ FX16_CONST(0.3869310055143886), FX16_CONST(0.9221086687433452),
+ FX16_CONST(0.38834504669882625), FX16_CONST(0.9215140393420419),
+ FX16_CONST(0.3897581740698564), FX16_CONST(0.9209172415291894),
+ FX16_CONST(0.39117038430225387), FX16_CONST(0.9203182767091106),
+ FX16_CONST(0.39258167407295147), FX16_CONST(0.9197171462912274),
+ FX16_CONST(0.3939920400610481), FX16_CONST(0.9191138516900578),
+ FX16_CONST(0.39540147894781635), FX16_CONST(0.9185083943252123),
+ FX16_CONST(0.3968099874167103), FX16_CONST(0.9179007756213905),
+ FX16_CONST(0.39821756215337356), FX16_CONST(0.9172909970083779),
+ FX16_CONST(0.3996241998456468), FX16_CONST(0.9166790599210427),
+ FX16_CONST(0.4010298971835756), FX16_CONST(0.9160649657993317),
+ FX16_CONST(0.40243465085941843), FX16_CONST(0.9154487160882678),
+ FX16_CONST(0.4038384575676541), FX16_CONST(0.9148303122379462),
+ FX16_CONST(0.40524131400498986), FX16_CONST(0.9142097557035307),
+ FX16_CONST(0.40664321687036903), FX16_CONST(0.9135870479452508),
+ FX16_CONST(0.4080441628649787), FX16_CONST(0.9129621904283982),
+ FX16_CONST(0.4094441486922576), FX16_CONST(0.9123351846233227),
+ FX16_CONST(0.4108431710579039), FX16_CONST(0.9117060320054299),
+ FX16_CONST(0.4122412266698829), FX16_CONST(0.9110747340551764),
+ FX16_CONST(0.4136383122384345), FX16_CONST(0.9104412922580672),
+ FX16_CONST(0.41503442447608163), FX16_CONST(0.9098057081046522),
+ FX16_CONST(0.41642956009763715), FX16_CONST(0.9091679830905224),
+ FX16_CONST(0.41782371582021227), FX16_CONST(0.9085281187163061),
+ FX16_CONST(0.4192168883632239), FX16_CONST(0.9078861164876663),
+ FX16_CONST(0.4206090744484025), FX16_CONST(0.9072419779152958),
+ FX16_CONST(0.4220002707997997), FX16_CONST(0.9065957045149153),
+ FX16_CONST(0.42339047414379605), FX16_CONST(0.9059472978072685),
+ FX16_CONST(0.4247796812091088), FX16_CONST(0.9052967593181188),
+ FX16_CONST(0.4261678887267996), FX16_CONST(0.9046440905782462),
+ FX16_CONST(0.4275550934302821), FX16_CONST(0.9039892931234433),
+ FX16_CONST(0.4289412920553295), FX16_CONST(0.9033323684945118),
+ FX16_CONST(0.4303264813400826), FX16_CONST(0.9026733182372588),
+ FX16_CONST(0.43171065802505726), FX16_CONST(0.9020121439024932),
+ FX16_CONST(0.43309381885315196), FX16_CONST(0.901348847046022),
+ FX16_CONST(0.43447596056965565), FX16_CONST(0.9006834292286469),
+ FX16_CONST(0.4358570799222555), FX16_CONST(0.9000158920161602),
+ FX16_CONST(0.4372371736610441), FX16_CONST(0.8993462369793416),
+ FX16_CONST(0.43861623853852766), FX16_CONST(0.8986744656939538),
+ FX16_CONST(0.43999427130963326), FX16_CONST(0.8980005797407399),
+ FX16_CONST(0.44137126873171667), FX16_CONST(0.8973245807054183),
+ FX16_CONST(0.44274722756457), FX16_CONST(0.8966464701786802),
+ FX16_CONST(0.4441221445704292), FX16_CONST(0.8959662497561852),
+ FX16_CONST(0.44549601651398174), FX16_CONST(0.8952839210385576),
+ FX16_CONST(0.44686884016237416), FX16_CONST(0.8945994856313827),
+ FX16_CONST(0.4482406122852199), FX16_CONST(0.8939129451452033),
+ FX16_CONST(0.44961132965460654), FX16_CONST(0.8932243011955153),
+ FX16_CONST(0.45098098904510386), FX16_CONST(0.8925335554027646),
+ FX16_CONST(0.4523495872337709), FX16_CONST(0.8918407093923427),
+ FX16_CONST(0.45371712100016387), FX16_CONST(0.8911457647945832),
+ FX16_CONST(0.45508358712634384), FX16_CONST(0.8904487232447579),
+ FX16_CONST(0.4564489823968839), FX16_CONST(0.8897495863830728),
+ FX16_CONST(0.4578133035988772), FX16_CONST(0.8890483558546646),
+ FX16_CONST(0.4591765475219441), FX16_CONST(0.8883450333095964),
+ FX16_CONST(0.46053871095824), FX16_CONST(0.8876396204028539),
+ FX16_CONST(0.46189979070246273), FX16_CONST(0.8869321187943422),
+ FX16_CONST(0.46325978355186015), FX16_CONST(0.8862225301488806),
+ FX16_CONST(0.4646186863062378), FX16_CONST(0.8855108561362),
+ FX16_CONST(0.4659764957679662), FX16_CONST(0.8847970984309378),
+ FX16_CONST(0.4673332087419884), FX16_CONST(0.884081258712635),
+ FX16_CONST(0.4686888220358279), FX16_CONST(0.8833633386657316),
+ FX16_CONST(0.4700433324595956), FX16_CONST(0.8826433399795628),
+ FX16_CONST(0.47139673682599764), FX16_CONST(0.881921264348355),
+ FX16_CONST(0.4727490319503428), FX16_CONST(0.8811971134712221),
+ FX16_CONST(0.47410021465054997), FX16_CONST(0.8804708890521608),
+ FX16_CONST(0.47545028174715587), FX16_CONST(0.8797425928000474),
+ FX16_CONST(0.4767992300633221), FX16_CONST(0.8790122264286335),
+ FX16_CONST(0.478147056424843), FX16_CONST(0.8782797916565416),
+ FX16_CONST(0.47949375766015295), FX16_CONST(0.8775452902072614),
+ FX16_CONST(0.48083933060033396), FX16_CONST(0.8768087238091457),
+ FX16_CONST(0.4821837720791227), FX16_CONST(0.8760700941954066),
+ FX16_CONST(0.4835270789329187), FX16_CONST(0.8753294031041109),
+ FX16_CONST(0.48486924800079106), FX16_CONST(0.8745866522781761),
+ FX16_CONST(0.4862102761244864), FX16_CONST(0.8738418434653669),
+ FX16_CONST(0.487550160148436), FX16_CONST(0.8730949784182901),
+ FX16_CONST(0.48888889691976317), FX16_CONST(0.8723460588943915),
+ FX16_CONST(0.49022648328829116), FX16_CONST(0.871595086655951),
+ FX16_CONST(0.4915629161065499), FX16_CONST(0.870842063470079),
+ FX16_CONST(0.49289819222978404), FX16_CONST(0.8700869911087115),
+ FX16_CONST(0.4942323085159597), FX16_CONST(0.8693298713486068),
+ FX16_CONST(0.49556526182577254), FX16_CONST(0.8685707059713409),
+ FX16_CONST(0.49689704902265447), FX16_CONST(0.8678094967633033),
+ FX16_CONST(0.4982276669727818), FX16_CONST(0.8670462455156926),
+ FX16_CONST(0.49955711254508184), FX16_CONST(0.866280954024513),
+ FX16_CONST(0.5008853826112407), FX16_CONST(0.8655136240905691),
+ FX16_CONST(0.5022124740457108), FX16_CONST(0.8647442575194624),
+ FX16_CONST(0.5035383837257176), FX16_CONST(0.8639728561215867),
+ FX16_CONST(0.5048631085312676), FX16_CONST(0.8631994217121242),
+ FX16_CONST(0.5061866453451552), FX16_CONST(0.8624239561110405),
+ FX16_CONST(0.5075089910529709), FX16_CONST(0.8616464611430813),
+ FX16_CONST(0.508830142543107), FX16_CONST(0.8608669386377673),
+ FX16_CONST(0.5101500967067668), FX16_CONST(0.8600853904293901),
+ FX16_CONST(0.5114688504379703), FX16_CONST(0.8593018183570085),
+ FX16_CONST(0.512786400633563), FX16_CONST(0.8585162242644427),
+ FX16_CONST(0.5141027441932217), FX16_CONST(0.8577286100002721),
+ FX16_CONST(0.5154178780194629), FX16_CONST(0.8569389774178288),
+ FX16_CONST(0.5167317990176499), FX16_CONST(0.8561473283751945),
+ FX16_CONST(0.5180445040959993), FX16_CONST(0.855353664735196),
+ FX16_CONST(0.5193559901655896), FX16_CONST(0.8545579883654005),
+ FX16_CONST(0.5206662541403672), FX16_CONST(0.8537603011381114),
+ FX16_CONST(0.5219752929371544), FX16_CONST(0.8529606049303636),
+ FX16_CONST(0.5232831034756564), FX16_CONST(0.8521589016239198),
+ FX16_CONST(0.524589682678469), FX16_CONST(0.8513551931052652),
+ FX16_CONST(0.5258950274710846), FX16_CONST(0.8505494812656035),
+ FX16_CONST(0.5271991347819013), FX16_CONST(0.8497417680008525),
+ FX16_CONST(0.5285020015422285), FX16_CONST(0.8489320552116396),
+ FX16_CONST(0.5298036246862946), FX16_CONST(0.8481203448032972),
+ FX16_CONST(0.531104001151255), FX16_CONST(0.8473066386858583),
+ FX16_CONST(0.5324031278771979), FX16_CONST(0.8464909387740521),
+ FX16_CONST(0.533701001807153), FX16_CONST(0.8456732469872991),
+ FX16_CONST(0.5349976198870972), FX16_CONST(0.8448535652497071),
+ FX16_CONST(0.5362929790659632), FX16_CONST(0.8440318954900664),
+ FX16_CONST(0.5375870762956454), FX16_CONST(0.8432082396418454),
+ FX16_CONST(0.5388799085310084), FX16_CONST(0.8423825996431858),
+ FX16_CONST(0.5401714727298929), FX16_CONST(0.8415549774368984),
+ FX16_CONST(0.5414617658531234), FX16_CONST(0.8407253749704581),
+ FX16_CONST(0.5427507848645159), FX16_CONST(0.8398937941959995),
+ FX16_CONST(0.5440385267308838), FX16_CONST(0.8390602370703127),
+ FX16_CONST(0.5453249884220465), FX16_CONST(0.8382247055548381),
+ FX16_CONST(0.5466101669108349), FX16_CONST(0.8373872016156619),
+ FX16_CONST(0.5478940591731002), FX16_CONST(0.836547727223512),
+ FX16_CONST(0.5491766621877197), FX16_CONST(0.8357062843537526),
+ FX16_CONST(0.5504579729366048), FX16_CONST(0.83486287498638),
+ FX16_CONST(0.5517379884047073), FX16_CONST(0.8340175011060181),
+ FX16_CONST(0.5530167055800275), FX16_CONST(0.8331701647019132),
+ FX16_CONST(0.55429412145362), FX16_CONST(0.8323208677679297),
+ FX16_CONST(0.5555702330196022), FX16_CONST(0.8314696123025452),
+ FX16_CONST(0.5568450372751601), FX16_CONST(0.8306164003088463),
+ FX16_CONST(0.5581185312205561), FX16_CONST(0.829761233794523),
+ FX16_CONST(0.5593907118591361), FX16_CONST(0.8289041147718649),
+ FX16_CONST(0.560661576197336), FX16_CONST(0.8280450452577558),
+ FX16_CONST(0.5619311212446894), FX16_CONST(0.8271840272736691),
+ FX16_CONST(0.5631993440138341), FX16_CONST(0.8263210628456635),
+ FX16_CONST(0.5644662415205194), FX16_CONST(0.8254561540043776),
+ FX16_CONST(0.5657318107836131), FX16_CONST(0.8245893027850253),
+ FX16_CONST(0.5669960488251087), FX16_CONST(0.8237205112273914),
+ FX16_CONST(0.5682589526701315), FX16_CONST(0.8228497813758264),
+ FX16_CONST(0.5695205193469471), FX16_CONST(0.8219771152792416),
+ FX16_CONST(0.5707807458869673), FX16_CONST(0.8211025149911046),
+ FX16_CONST(0.572039629324757), FX16_CONST(0.8202259825694347),
+ FX16_CONST(0.5732971666980422), FX16_CONST(0.819347520076797),
+ FX16_CONST(0.5745533550477158), FX16_CONST(0.8184671295802987),
+ FX16_CONST(0.5758081914178453), FX16_CONST(0.8175848131515837),
+ FX16_CONST(0.5770616728556794), FX16_CONST(0.8167005728668278),
+ FX16_CONST(0.5783137964116556), FX16_CONST(0.8158144108067338),
+ FX16_CONST(0.5795645591394056), FX16_CONST(0.8149263290565266),
+ FX16_CONST(0.5808139580957645), FX16_CONST(0.8140363297059484),
+ FX16_CONST(0.5820619903407754), FX16_CONST(0.8131444148492536),
+ FX16_CONST(0.5833086529376983), FX16_CONST(0.812250586585204),
+ FX16_CONST(0.5845539429530153), FX16_CONST(0.8113548470170637),
+ FX16_CONST(0.5857978574564389), FX16_CONST(0.8104571982525948),
+ FX16_CONST(0.587040393520918), FX16_CONST(0.8095576424040513),
+ FX16_CONST(0.5882815482226452), FX16_CONST(0.808656181588175),
+ FX16_CONST(0.5895213186410639), FX16_CONST(0.8077528179261904),
+ FX16_CONST(0.5907597018588742), FX16_CONST(0.8068475535437993),
+ FX16_CONST(0.591996694962041), FX16_CONST(0.8059403905711763),
+ FX16_CONST(0.5932322950397998), FX16_CONST(0.8050313311429637),
+ FX16_CONST(0.5944664991846644), FX16_CONST(0.8041203773982657),
+ FX16_CONST(0.5956993044924334), FX16_CONST(0.8032075314806449),
+ FX16_CONST(0.5969307080621964), FX16_CONST(0.8022927955381157),
+ FX16_CONST(0.5981607069963424), FX16_CONST(0.8013761717231402),
+ FX16_CONST(0.5993892984005645), FX16_CONST(0.8004576621926228),
+ FX16_CONST(0.600616479383869), FX16_CONST(0.799537269107905),
+ FX16_CONST(0.60184224705858), FX16_CONST(0.7986149946347609),
+ FX16_CONST(0.6030665985403482), FX16_CONST(0.7976908409433912),
+ FX16_CONST(0.604289530948156), FX16_CONST(0.7967648102084188),
+ FX16_CONST(0.6055110414043255), FX16_CONST(0.7958369046088836),
+ FX16_CONST(0.6067311270345245), FX16_CONST(0.794907126328237),
+ FX16_CONST(0.6079497849677736), FX16_CONST(0.7939754775543372),
+ FX16_CONST(0.6091670123364532), FX16_CONST(0.7930419604794436),
+ FX16_CONST(0.6103828062763095), FX16_CONST(0.7921065773002124),
+ FX16_CONST(0.6115971639264619), FX16_CONST(0.7911693302176902),
+ FX16_CONST(0.6128100824294097), FX16_CONST(0.79023022143731),
+ FX16_CONST(0.6140215589310385), FX16_CONST(0.7892892531688857),
+ FX16_CONST(0.6152315905806268), FX16_CONST(0.7883464276266062),
+ FX16_CONST(0.6164401745308536), FX16_CONST(0.7874017470290314),
+ FX16_CONST(0.6176473079378039), FX16_CONST(0.7864552135990858),
+ FX16_CONST(0.6188529879609763), FX16_CONST(0.7855068295640539),
+ FX16_CONST(0.6200572117632891), FX16_CONST(0.7845565971555752),
+ FX16_CONST(0.6212599765110876), FX16_CONST(0.7836045186096382),
+ FX16_CONST(0.62246127937415), FX16_CONST(0.7826505961665757),
+ FX16_CONST(0.6236611175256945), FX16_CONST(0.7816948320710594),
+ FX16_CONST(0.6248594881423863), FX16_CONST(0.7807372285720945),
+ FX16_CONST(0.6260563884043435), FX16_CONST(0.7797777879230146),
+ FX16_CONST(0.6272518154951441), FX16_CONST(0.778816512381476),
+ FX16_CONST(0.6284457666018327), FX16_CONST(0.7778534042094531),
+ FX16_CONST(0.629638238914927), FX16_CONST(0.7768884656732324),
+ FX16_CONST(0.6308292296284245), FX16_CONST(0.7759216990434077),
+ FX16_CONST(0.6320187359398091), FX16_CONST(0.7749531065948739),
+ FX16_CONST(0.6332067550500572), FX16_CONST(0.7739826906068229),
+ FX16_CONST(0.6343932841636455), FX16_CONST(0.773010453362737),
+ FX16_CONST(0.6355783204885561), FX16_CONST(0.7720363971503845),
+ FX16_CONST(0.6367618612362842), FX16_CONST(0.7710605242618138),
+ FX16_CONST(0.637943903621844), FX16_CONST(0.7700828369933479),
+ FX16_CONST(0.6391244448637757), FX16_CONST(0.7691033376455797),
+ FX16_CONST(0.6403034821841517), FX16_CONST(0.7681220285233654),
+ FX16_CONST(0.641481012808583), FX16_CONST(0.7671389119358204),
+ FX16_CONST(0.6426570339662269), FX16_CONST(0.7661539901963129),
+ FX16_CONST(0.6438315428897914), FX16_CONST(0.765167265622459),
+ FX16_CONST(0.6450045368155439), FX16_CONST(0.7641787405361167),
+ FX16_CONST(0.6461760129833163), FX16_CONST(0.7631884172633814),
+ FX16_CONST(0.6473459686365121), FX16_CONST(0.762196298134579),
+ FX16_CONST(0.6485144010221124), FX16_CONST(0.7612023854842618),
+ FX16_CONST(0.6496813073906832), FX16_CONST(0.7602066816512024),
+ FX16_CONST(0.6508466849963809), FX16_CONST(0.759209188978388),
+ FX16_CONST(0.6520105310969595), FX16_CONST(0.7582099098130153),
+ FX16_CONST(0.6531728429537768), FX16_CONST(0.7572088465064846),
+ FX16_CONST(0.6543336178318004), FX16_CONST(0.7562060014143945),
+ FX16_CONST(0.6554928529996153), FX16_CONST(0.7552013768965365),
+ FX16_CONST(0.6566505457294289), FX16_CONST(0.7541949753168892),
+ FX16_CONST(0.6578066932970786), FX16_CONST(0.7531867990436125),
+ FX16_CONST(0.6589612929820373), FX16_CONST(0.7521768504490427),
+ FX16_CONST(0.6601143420674205), FX16_CONST(0.7511651319096864),
+ FX16_CONST(0.6612658378399923), FX16_CONST(0.7501516458062151),
+ FX16_CONST(0.6624157775901718), FX16_CONST(0.7491363945234594),
+ FX16_CONST(0.6635641586120398), FX16_CONST(0.7481193804504036),
+ FX16_CONST(0.6647109782033448), FX16_CONST(0.7471006059801801),
+ FX16_CONST(0.6658562336655097), FX16_CONST(0.7460800735100638),
+ FX16_CONST(0.6669999223036375), FX16_CONST(0.745057785441466),
+ FX16_CONST(0.6681420414265185), FX16_CONST(0.7440337441799293),
+ FX16_CONST(0.669282588346636), FX16_CONST(0.7430079521351217),
+ FX16_CONST(0.6704215603801731), FX16_CONST(0.7419804117208311),
+ FX16_CONST(0.6715589548470183), FX16_CONST(0.7409511253549592),
+ FX16_CONST(0.6726947690707729), FX16_CONST(0.7399200954595162),
+ FX16_CONST(0.673829000378756), FX16_CONST(0.7388873244606151),
+ FX16_CONST(0.6749616461020119), FX16_CONST(0.737852814788466),
+ FX16_CONST(0.6760927035753159), FX16_CONST(0.7368165688773698),
+ FX16_CONST(0.6772221701371803), FX16_CONST(0.7357785891657136),
+ FX16_CONST(0.6783500431298615), FX16_CONST(0.7347388780959635),
+ FX16_CONST(0.679476319899365), FX16_CONST(0.7336974381146603),
+ FX16_CONST(0.680600997795453), FX16_CONST(0.7326542716724128),
+ FX16_CONST(0.6817240741716497), FX16_CONST(0.7316093812238926),
+ FX16_CONST(0.6828455463852481), FX16_CONST(0.7305627692278276),
+ FX16_CONST(0.6839654117973154), FX16_CONST(0.729514438146997),
+ FX16_CONST(0.6850836677727004), FX16_CONST(0.7284643904482252),
+ FX16_CONST(0.6862003116800386), FX16_CONST(0.7274126286023758),
+ FX16_CONST(0.687315340891759), FX16_CONST(0.726359155084346),
+ FX16_CONST(0.6884287527840904), FX16_CONST(0.7253039723730608),
+ FX16_CONST(0.6895405447370668), FX16_CONST(0.724247082951467),
+ FX16_CONST(0.6906507141345346), FX16_CONST(0.7231884893065275),
+ FX16_CONST(0.6917592583641577), FX16_CONST(0.7221281939292153),
+ FX16_CONST(0.6928661748174246), FX16_CONST(0.7210661993145081),
+ FX16_CONST(0.6939714608896539), FX16_CONST(0.7200025079613817),
+ FX16_CONST(0.6950751139800009), FX16_CONST(0.7189371223728045),
+ FX16_CONST(0.696177131491463), FX16_CONST(0.7178700450557317),
+ FX16_CONST(0.6972775108308865), FX16_CONST(0.7168012785210995),
+ FX16_CONST(0.6983762494089728), FX16_CONST(0.7157308252838187),
+ FX16_CONST(0.6994733446402838), FX16_CONST(0.7146586878627691),
+ FX16_CONST(0.7005687939432483), FX16_CONST(0.7135848687807935),
+ FX16_CONST(0.7016625947401685), FX16_CONST(0.7125093705646924),
+ FX16_CONST(0.7027547444572253), FX16_CONST(0.7114321957452164),
+ FX16_CONST(0.7038452405244849), FX16_CONST(0.7103533468570624),
+ FX16_CONST(0.7049340803759049), FX16_CONST(0.7092728264388657),
+ FX16_CONST(0.7060212614493397), FX16_CONST(0.7081906370331954),
+ FX16_CONST(0.7071067811865476), FX16_CONST(0.7071067811865476),
+ FX16_CONST(0.7081906370331954), FX16_CONST(0.7060212614493397),
+ FX16_CONST(0.7092728264388657), FX16_CONST(0.704934080375905),
+ FX16_CONST(0.7103533468570624), FX16_CONST(0.7038452405244849),
+ FX16_CONST(0.7114321957452164), FX16_CONST(0.7027547444572253),
+ FX16_CONST(0.7125093705646923), FX16_CONST(0.7016625947401685),
+ FX16_CONST(0.7135848687807935), FX16_CONST(0.7005687939432484),
+ FX16_CONST(0.7146586878627691), FX16_CONST(0.6994733446402838),
+ FX16_CONST(0.7157308252838186), FX16_CONST(0.6983762494089729),
+ FX16_CONST(0.7168012785210994), FX16_CONST(0.6972775108308866),
+ FX16_CONST(0.7178700450557317), FX16_CONST(0.696177131491463),
+ FX16_CONST(0.7189371223728044), FX16_CONST(0.6950751139800009),
+ FX16_CONST(0.7200025079613817), FX16_CONST(0.693971460889654),
+ FX16_CONST(0.7210661993145081), FX16_CONST(0.6928661748174247),
+ FX16_CONST(0.7221281939292153), FX16_CONST(0.6917592583641577),
+ FX16_CONST(0.7231884893065273), FX16_CONST(0.6906507141345346),
+ FX16_CONST(0.7242470829514669), FX16_CONST(0.6895405447370669),
+ FX16_CONST(0.7253039723730608), FX16_CONST(0.6884287527840904),
+ FX16_CONST(0.726359155084346), FX16_CONST(0.687315340891759),
+ FX16_CONST(0.7274126286023758), FX16_CONST(0.6862003116800386),
+ FX16_CONST(0.7284643904482252), FX16_CONST(0.6850836677727004),
+ FX16_CONST(0.7295144381469969), FX16_CONST(0.6839654117973155),
+ FX16_CONST(0.7305627692278276), FX16_CONST(0.6828455463852481),
+ FX16_CONST(0.7316093812238926), FX16_CONST(0.6817240741716498),
+ FX16_CONST(0.7326542716724128), FX16_CONST(0.680600997795453),
+ FX16_CONST(0.7336974381146603), FX16_CONST(0.679476319899365),
+ FX16_CONST(0.7347388780959635), FX16_CONST(0.6783500431298615),
+ FX16_CONST(0.7357785891657135), FX16_CONST(0.6772221701371804),
+ FX16_CONST(0.7368165688773698), FX16_CONST(0.676092703575316),
+ FX16_CONST(0.737852814788466), FX16_CONST(0.674961646102012),
+ FX16_CONST(0.7388873244606151), FX16_CONST(0.6738290003787561),
+ FX16_CONST(0.7399200954595161), FX16_CONST(0.672694769070773),
+ FX16_CONST(0.7409511253549591), FX16_CONST(0.6715589548470183),
+ FX16_CONST(0.741980411720831), FX16_CONST(0.6704215603801731),
+ FX16_CONST(0.7430079521351217), FX16_CONST(0.669282588346636),
+ FX16_CONST(0.7440337441799293), FX16_CONST(0.6681420414265186),
+ FX16_CONST(0.745057785441466), FX16_CONST(0.6669999223036375),
+ FX16_CONST(0.7460800735100637), FX16_CONST(0.6658562336655097),
+ FX16_CONST(0.7471006059801801), FX16_CONST(0.6647109782033449),
+ FX16_CONST(0.7481193804504035), FX16_CONST(0.6635641586120399),
+ FX16_CONST(0.7491363945234593), FX16_CONST(0.6624157775901718),
+ FX16_CONST(0.750151645806215), FX16_CONST(0.6612658378399923),
+ FX16_CONST(0.7511651319096864), FX16_CONST(0.6601143420674205),
+ FX16_CONST(0.7521768504490427), FX16_CONST(0.6589612929820373),
+ FX16_CONST(0.7531867990436125), FX16_CONST(0.6578066932970787),
+ FX16_CONST(0.7541949753168892), FX16_CONST(0.656650545729429),
+ FX16_CONST(0.7552013768965365), FX16_CONST(0.6554928529996155),
+ FX16_CONST(0.7562060014143945), FX16_CONST(0.6543336178318006),
+ FX16_CONST(0.7572088465064846), FX16_CONST(0.6531728429537769),
+ FX16_CONST(0.7582099098130153), FX16_CONST(0.6520105310969595),
+ FX16_CONST(0.759209188978388), FX16_CONST(0.650846684996381),
+ FX16_CONST(0.7602066816512024), FX16_CONST(0.6496813073906832),
+ FX16_CONST(0.7612023854842618), FX16_CONST(0.6485144010221126),
+ FX16_CONST(0.7621962981345789), FX16_CONST(0.6473459686365121),
+ FX16_CONST(0.7631884172633813), FX16_CONST(0.6461760129833164),
+ FX16_CONST(0.7641787405361167), FX16_CONST(0.645004536815544),
+ FX16_CONST(0.765167265622459), FX16_CONST(0.6438315428897915),
+ FX16_CONST(0.7661539901963128), FX16_CONST(0.6426570339662269),
+ FX16_CONST(0.7671389119358204), FX16_CONST(0.6414810128085832),
+ FX16_CONST(0.7681220285233653), FX16_CONST(0.6403034821841517),
+ FX16_CONST(0.7691033376455796), FX16_CONST(0.6391244448637757),
+ FX16_CONST(0.7700828369933479), FX16_CONST(0.6379439036218442),
+ FX16_CONST(0.7710605242618138), FX16_CONST(0.6367618612362842),
+ FX16_CONST(0.7720363971503844), FX16_CONST(0.6355783204885562),
+ FX16_CONST(0.7730104533627369), FX16_CONST(0.6343932841636455),
+ FX16_CONST(0.7739826906068228), FX16_CONST(0.6332067550500572),
+ FX16_CONST(0.7749531065948738), FX16_CONST(0.6320187359398091),
+ FX16_CONST(0.7759216990434076), FX16_CONST(0.6308292296284246),
+ FX16_CONST(0.7768884656732324), FX16_CONST(0.6296382389149271),
+ FX16_CONST(0.777853404209453), FX16_CONST(0.6284457666018327),
+ FX16_CONST(0.7788165123814759), FX16_CONST(0.6272518154951442),
+ FX16_CONST(0.7797777879230144), FX16_CONST(0.6260563884043435),
+ FX16_CONST(0.7807372285720945), FX16_CONST(0.6248594881423865),
+ FX16_CONST(0.7816948320710594), FX16_CONST(0.6236611175256946),
+ FX16_CONST(0.7826505961665757), FX16_CONST(0.6224612793741501),
+ FX16_CONST(0.7836045186096382), FX16_CONST(0.6212599765110877),
+ FX16_CONST(0.7845565971555752), FX16_CONST(0.6200572117632892),
+ FX16_CONST(0.7855068295640539), FX16_CONST(0.6188529879609763),
+ FX16_CONST(0.7864552135990858), FX16_CONST(0.617647307937804),
+ FX16_CONST(0.7874017470290313), FX16_CONST(0.6164401745308536),
+ FX16_CONST(0.7883464276266062), FX16_CONST(0.6152315905806268),
+ FX16_CONST(0.7892892531688857), FX16_CONST(0.6140215589310385),
+ FX16_CONST(0.79023022143731), FX16_CONST(0.6128100824294097),
+ FX16_CONST(0.7911693302176901), FX16_CONST(0.611597163926462),
+ FX16_CONST(0.7921065773002123), FX16_CONST(0.6103828062763095),
+ FX16_CONST(0.7930419604794436), FX16_CONST(0.6091670123364532),
+ FX16_CONST(0.7939754775543372), FX16_CONST(0.6079497849677737),
+ FX16_CONST(0.794907126328237), FX16_CONST(0.6067311270345245),
+ FX16_CONST(0.7958369046088835), FX16_CONST(0.6055110414043255),
+ FX16_CONST(0.7967648102084187), FX16_CONST(0.6042895309481561),
+ FX16_CONST(0.797690840943391), FX16_CONST(0.6030665985403483),
+ FX16_CONST(0.7986149946347608), FX16_CONST(0.60184224705858),
+ FX16_CONST(0.799537269107905), FX16_CONST(0.600616479383869),
+ FX16_CONST(0.8004576621926227), FX16_CONST(0.5993892984005645),
+ FX16_CONST(0.8013761717231401), FX16_CONST(0.5981607069963424),
+ FX16_CONST(0.8022927955381157), FX16_CONST(0.5969307080621965),
+ FX16_CONST(0.8032075314806448), FX16_CONST(0.5956993044924335),
+ FX16_CONST(0.8041203773982657), FX16_CONST(0.5944664991846645),
+ FX16_CONST(0.8050313311429637), FX16_CONST(0.5932322950397998),
+ FX16_CONST(0.8059403905711763), FX16_CONST(0.591996694962041),
+ FX16_CONST(0.8068475535437992), FX16_CONST(0.5907597018588743),
+ FX16_CONST(0.8077528179261902), FX16_CONST(0.5895213186410639),
+ FX16_CONST(0.808656181588175), FX16_CONST(0.5882815482226453),
+ FX16_CONST(0.8095576424040513), FX16_CONST(0.5870403935209181),
+ FX16_CONST(0.8104571982525948), FX16_CONST(0.5857978574564389),
+ FX16_CONST(0.8113548470170637), FX16_CONST(0.5845539429530153),
+ FX16_CONST(0.8122505865852039), FX16_CONST(0.5833086529376983),
+ FX16_CONST(0.8131444148492536), FX16_CONST(0.5820619903407755),
+ FX16_CONST(0.8140363297059483), FX16_CONST(0.5808139580957645),
+ FX16_CONST(0.8149263290565266), FX16_CONST(0.5795645591394057),
+ FX16_CONST(0.8158144108067338), FX16_CONST(0.5783137964116556),
+ FX16_CONST(0.8167005728668278), FX16_CONST(0.5770616728556796),
+ FX16_CONST(0.8175848131515837), FX16_CONST(0.5758081914178453),
+ FX16_CONST(0.8184671295802987), FX16_CONST(0.5745533550477158),
+ FX16_CONST(0.8193475200767969), FX16_CONST(0.5732971666980423),
+ FX16_CONST(0.8202259825694347), FX16_CONST(0.572039629324757),
+ FX16_CONST(0.8211025149911046), FX16_CONST(0.5707807458869674),
+ FX16_CONST(0.8219771152792416), FX16_CONST(0.5695205193469473),
+ FX16_CONST(0.8228497813758263), FX16_CONST(0.5682589526701315),
+ FX16_CONST(0.8237205112273913), FX16_CONST(0.5669960488251087),
+ FX16_CONST(0.8245893027850253), FX16_CONST(0.5657318107836132),
+ FX16_CONST(0.8254561540043774), FX16_CONST(0.5644662415205195),
+ FX16_CONST(0.8263210628456635), FX16_CONST(0.5631993440138341),
+ FX16_CONST(0.8271840272736691), FX16_CONST(0.5619311212446895),
+ FX16_CONST(0.8280450452577558), FX16_CONST(0.560661576197336),
+ FX16_CONST(0.8289041147718649), FX16_CONST(0.5593907118591361),
+ FX16_CONST(0.829761233794523), FX16_CONST(0.5581185312205561),
+ FX16_CONST(0.8306164003088462), FX16_CONST(0.5568450372751601),
+ FX16_CONST(0.8314696123025452), FX16_CONST(0.5555702330196023),
+ FX16_CONST(0.8323208677679297), FX16_CONST(0.5542941214536201),
+ FX16_CONST(0.8331701647019132), FX16_CONST(0.5530167055800276),
+ FX16_CONST(0.8340175011060181), FX16_CONST(0.5517379884047074),
+ FX16_CONST(0.83486287498638), FX16_CONST(0.5504579729366048),
+ FX16_CONST(0.8357062843537526), FX16_CONST(0.5491766621877198),
+ FX16_CONST(0.8365477272235119), FX16_CONST(0.5478940591731002),
+ FX16_CONST(0.8373872016156619), FX16_CONST(0.5466101669108349),
+ FX16_CONST(0.838224705554838), FX16_CONST(0.5453249884220465),
+ FX16_CONST(0.8390602370703126), FX16_CONST(0.5440385267308839),
+ FX16_CONST(0.8398937941959994), FX16_CONST(0.542750784864516),
+ FX16_CONST(0.840725374970458), FX16_CONST(0.5414617658531236),
+ FX16_CONST(0.8415549774368983), FX16_CONST(0.540171472729893),
+ FX16_CONST(0.8423825996431858), FX16_CONST(0.5388799085310084),
+ FX16_CONST(0.8432082396418454), FX16_CONST(0.5375870762956455),
+ FX16_CONST(0.8440318954900664), FX16_CONST(0.5362929790659632),
+ FX16_CONST(0.844853565249707), FX16_CONST(0.5349976198870973),
+ FX16_CONST(0.8456732469872991), FX16_CONST(0.533701001807153),
+ FX16_CONST(0.8464909387740521), FX16_CONST(0.532403127877198),
+ FX16_CONST(0.8473066386858583), FX16_CONST(0.531104001151255),
+ FX16_CONST(0.8481203448032971), FX16_CONST(0.5298036246862948),
+ FX16_CONST(0.8489320552116396), FX16_CONST(0.5285020015422285),
+ FX16_CONST(0.8497417680008524), FX16_CONST(0.5271991347819014),
+ FX16_CONST(0.8505494812656034), FX16_CONST(0.5258950274710847),
+ FX16_CONST(0.8513551931052652), FX16_CONST(0.5245896826784688),
+ FX16_CONST(0.8521589016239198), FX16_CONST(0.5232831034756564),
+ FX16_CONST(0.8529606049303636), FX16_CONST(0.5219752929371544),
+ FX16_CONST(0.8537603011381113), FX16_CONST(0.5206662541403673),
+ FX16_CONST(0.8545579883654005), FX16_CONST(0.5193559901655895),
+ FX16_CONST(0.855353664735196), FX16_CONST(0.5180445040959993),
+ FX16_CONST(0.8561473283751945), FX16_CONST(0.51673179901765),
+ FX16_CONST(0.8569389774178287), FX16_CONST(0.5154178780194631),
+ FX16_CONST(0.8577286100002721), FX16_CONST(0.5141027441932217),
+ FX16_CONST(0.8585162242644427), FX16_CONST(0.5127864006335631),
+ FX16_CONST(0.8593018183570084), FX16_CONST(0.5114688504379705),
+ FX16_CONST(0.8600853904293903), FX16_CONST(0.5101500967067667),
+ FX16_CONST(0.8608669386377673), FX16_CONST(0.508830142543107),
+ FX16_CONST(0.8616464611430813), FX16_CONST(0.5075089910529709),
+ FX16_CONST(0.8624239561110405), FX16_CONST(0.5061866453451553),
+ FX16_CONST(0.8631994217121242), FX16_CONST(0.5048631085312675),
+ FX16_CONST(0.8639728561215867), FX16_CONST(0.5035383837257176),
+ FX16_CONST(0.8647442575194624), FX16_CONST(0.5022124740457109),
+ FX16_CONST(0.865513624090569), FX16_CONST(0.5008853826112409),
+ FX16_CONST(0.866280954024513), FX16_CONST(0.49955711254508184),
+ FX16_CONST(0.8670462455156926), FX16_CONST(0.49822766697278187),
+ FX16_CONST(0.8678094967633032), FX16_CONST(0.49689704902265464),
+ FX16_CONST(0.8685707059713409), FX16_CONST(0.4955652618257725),
+ FX16_CONST(0.8693298713486067), FX16_CONST(0.49423230851595973),
+ FX16_CONST(0.8700869911087113), FX16_CONST(0.4928981922297841),
+ FX16_CONST(0.8708420634700789), FX16_CONST(0.49156291610655006),
+ FX16_CONST(0.8715950866559511), FX16_CONST(0.4902264832882911),
+ FX16_CONST(0.8723460588943914), FX16_CONST(0.4888888969197632),
+ FX16_CONST(0.8730949784182901), FX16_CONST(0.48755016014843605),
+ FX16_CONST(0.8738418434653668), FX16_CONST(0.48621027612448653),
+ FX16_CONST(0.8745866522781761), FX16_CONST(0.4848692480007911),
+ FX16_CONST(0.8753294031041108), FX16_CONST(0.48352707893291874),
+ FX16_CONST(0.8760700941954066), FX16_CONST(0.48218377207912283),
+ FX16_CONST(0.8768087238091458), FX16_CONST(0.4808393306003339),
+ FX16_CONST(0.8775452902072612), FX16_CONST(0.479493757660153),
+ FX16_CONST(0.8782797916565415), FX16_CONST(0.4781470564248431),
+ FX16_CONST(0.8790122264286334), FX16_CONST(0.47679923006332225),
+ FX16_CONST(0.8797425928000474), FX16_CONST(0.47545028174715587),
+ FX16_CONST(0.8804708890521608), FX16_CONST(0.47410021465055),
+ FX16_CONST(0.881197113471222), FX16_CONST(0.4727490319503429),
+ FX16_CONST(0.8819212643483549), FX16_CONST(0.4713967368259978),
+ FX16_CONST(0.8826433399795628), FX16_CONST(0.4700433324595956),
+ FX16_CONST(0.8833633386657316), FX16_CONST(0.46868882203582796),
+ FX16_CONST(0.884081258712635), FX16_CONST(0.4673332087419885),
+ FX16_CONST(0.8847970984309378), FX16_CONST(0.4659764957679661),
+ FX16_CONST(0.8855108561362), FX16_CONST(0.4646186863062378),
+ FX16_CONST(0.8862225301488806), FX16_CONST(0.46325978355186026),
+ FX16_CONST(0.8869321187943421), FX16_CONST(0.46189979070246284),
+ FX16_CONST(0.8876396204028539), FX16_CONST(0.46053871095824),
+ FX16_CONST(0.8883450333095964), FX16_CONST(0.45917654752194415),
+ FX16_CONST(0.8890483558546646), FX16_CONST(0.4578133035988773),
+ FX16_CONST(0.8897495863830729), FX16_CONST(0.45644898239688386),
+ FX16_CONST(0.8904487232447579), FX16_CONST(0.45508358712634384),
+ FX16_CONST(0.8911457647945832), FX16_CONST(0.4537171210001639),
+ FX16_CONST(0.8918407093923427), FX16_CONST(0.452349587233771),
+ FX16_CONST(0.8925335554027647), FX16_CONST(0.4509809890451038),
+ FX16_CONST(0.8932243011955153), FX16_CONST(0.4496113296546066),
+ FX16_CONST(0.8939129451452033), FX16_CONST(0.44824061228522),
+ FX16_CONST(0.8945994856313826), FX16_CONST(0.4468688401623743),
+ FX16_CONST(0.8952839210385576), FX16_CONST(0.44549601651398174),
+ FX16_CONST(0.8959662497561851), FX16_CONST(0.44412214457042926),
+ FX16_CONST(0.8966464701786802), FX16_CONST(0.44274722756457013),
+ FX16_CONST(0.8973245807054183), FX16_CONST(0.4413712687317166),
+ FX16_CONST(0.8980005797407399), FX16_CONST(0.43999427130963326),
+ FX16_CONST(0.8986744656939538), FX16_CONST(0.4386162385385277),
+ FX16_CONST(0.8993462369793415), FX16_CONST(0.4372371736610442),
+ FX16_CONST(0.9000158920161603), FX16_CONST(0.4358570799222555),
+ FX16_CONST(0.9006834292286469), FX16_CONST(0.4344759605696557),
+ FX16_CONST(0.901348847046022), FX16_CONST(0.433093818853152),
+ FX16_CONST(0.9020121439024931), FX16_CONST(0.43171065802505737),
+ FX16_CONST(0.9026733182372588), FX16_CONST(0.4303264813400826),
+ FX16_CONST(0.9033323684945118), FX16_CONST(0.42894129205532955),
+ FX16_CONST(0.9039892931234433), FX16_CONST(0.4275550934302822),
+ FX16_CONST(0.9046440905782462), FX16_CONST(0.4261678887267996),
+ FX16_CONST(0.9052967593181188), FX16_CONST(0.4247796812091088),
+ FX16_CONST(0.9059472978072685), FX16_CONST(0.4233904741437961),
+ FX16_CONST(0.9065957045149153), FX16_CONST(0.4220002707997998),
+ FX16_CONST(0.9072419779152959), FX16_CONST(0.4206090744484025),
+ FX16_CONST(0.9078861164876663), FX16_CONST(0.41921688836322396),
+ FX16_CONST(0.9085281187163061), FX16_CONST(0.4178237158202124),
+ FX16_CONST(0.9091679830905223), FX16_CONST(0.4164295600976373),
+ FX16_CONST(0.9098057081046522), FX16_CONST(0.41503442447608163),
+ FX16_CONST(0.9104412922580671), FX16_CONST(0.41363831223843456),
+ FX16_CONST(0.9110747340551762), FX16_CONST(0.412241226669883),
+ FX16_CONST(0.9117060320054299), FX16_CONST(0.4108431710579039),
+ FX16_CONST(0.9123351846233227), FX16_CONST(0.40944414869225765),
+ FX16_CONST(0.9129621904283981), FX16_CONST(0.40804416286497874),
+ FX16_CONST(0.9135870479452508), FX16_CONST(0.40664321687036914),
+ FX16_CONST(0.9142097557035307), FX16_CONST(0.40524131400498986),
+ FX16_CONST(0.9148303122379461), FX16_CONST(0.40383845756765413),
+ FX16_CONST(0.9154487160882678), FX16_CONST(0.40243465085941854),
+ FX16_CONST(0.9160649657993316), FX16_CONST(0.4010298971835758),
+ FX16_CONST(0.9166790599210427), FX16_CONST(0.3996241998456468),
+ FX16_CONST(0.9172909970083779), FX16_CONST(0.3982175621533736),
+ FX16_CONST(0.9179007756213904), FX16_CONST(0.3968099874167104),
+ FX16_CONST(0.9185083943252123), FX16_CONST(0.3954014789478163),
+ FX16_CONST(0.9191138516900578), FX16_CONST(0.3939920400610481),
+ FX16_CONST(0.9197171462912274), FX16_CONST(0.3925816740729515),
+ FX16_CONST(0.9203182767091105), FX16_CONST(0.391170384302254),
+ FX16_CONST(0.9209172415291894), FX16_CONST(0.3897581740698564),
+ FX16_CONST(0.9215140393420419), FX16_CONST(0.3883450466988263),
+ FX16_CONST(0.9221086687433451), FX16_CONST(0.3869310055143887),
+ FX16_CONST(0.9227011283338785), FX16_CONST(0.385516053843919),
+ FX16_CONST(0.9232914167195276), FX16_CONST(0.38410019501693504),
+ FX16_CONST(0.9238795325112867), FX16_CONST(0.38268343236508984),
+ FX16_CONST(0.9244654743252626), FX16_CONST(0.3812657692221625),
+ FX16_CONST(0.9250492407826776), FX16_CONST(0.3798472089240511),
+ FX16_CONST(0.9256308305098727), FX16_CONST(0.3784277548087656),
+ FX16_CONST(0.9262102421383113), FX16_CONST(0.3770074102164183),
+ FX16_CONST(0.9267874743045817), FX16_CONST(0.3755861784892173),
+ FX16_CONST(0.9273625256504011), FX16_CONST(0.374164062971458),
+ FX16_CONST(0.9279353948226179), FX16_CONST(0.3727410670095158),
+ FX16_CONST(0.9285060804732156), FX16_CONST(0.3713171939518376),
+ FX16_CONST(0.9290745812593157), FX16_CONST(0.36989244714893427),
+ FX16_CONST(0.9296408958431812), FX16_CONST(0.3684668299533723),
+ FX16_CONST(0.9302050228922191), FX16_CONST(0.36704034571976724),
+ FX16_CONST(0.9307669610789837), FX16_CONST(0.36561299780477396),
+ FX16_CONST(0.9313267090811804), FX16_CONST(0.36418478956707984),
+ FX16_CONST(0.9318842655816681), FX16_CONST(0.3627557243673972),
+ FX16_CONST(0.9324396292684624), FX16_CONST(0.36132580556845434),
+ FX16_CONST(0.9329927988347388), FX16_CONST(0.3598950365349883),
+ FX16_CONST(0.9335437729788362), FX16_CONST(0.35846342063373654),
+ FX16_CONST(0.9340925504042589), FX16_CONST(0.35703096123343003),
+ FX16_CONST(0.9346391298196808), FX16_CONST(0.35559766170478396),
+ FX16_CONST(0.9351835099389475), FX16_CONST(0.3541635254204905),
+ FX16_CONST(0.9357256894810804), FX16_CONST(0.3527285557552107),
+ FX16_CONST(0.9362656671702783), FX16_CONST(0.35129275608556715),
+ FX16_CONST(0.9368034417359216), FX16_CONST(0.34985612979013503),
+ FX16_CONST(0.937339011912575), FX16_CONST(0.3484186802494345),
+ FX16_CONST(0.9378723764399899), FX16_CONST(0.3469804108459237),
+ FX16_CONST(0.9384035340631081), FX16_CONST(0.34554132496398915),
+ FX16_CONST(0.9389324835320645), FX16_CONST(0.344101425989939),
+ FX16_CONST(0.9394592236021899), FX16_CONST(0.3426607173119944),
+ FX16_CONST(0.9399837530340139), FX16_CONST(0.3412192023202824),
+ FX16_CONST(0.9405060705932683), FX16_CONST(0.33977688440682696),
+ FX16_CONST(0.9410261750508893), FX16_CONST(0.3383337669655413),
+ FX16_CONST(0.9415440651830208), FX16_CONST(0.33688985339222005),
+ FX16_CONST(0.9420597397710173), FX16_CONST(0.33544514708453166),
+ FX16_CONST(0.9425731976014469), FX16_CONST(0.3339996514420095),
+ FX16_CONST(0.9430844374660935), FX16_CONST(0.3325533698660442),
+ FX16_CONST(0.9435934581619604), FX16_CONST(0.33110630575987643),
+ FX16_CONST(0.9441002584912727), FX16_CONST(0.32965846252858755),
+ FX16_CONST(0.9446048372614803), FX16_CONST(0.32820984357909266),
+ FX16_CONST(0.9451071932852606), FX16_CONST(0.3267604523201318),
+ FX16_CONST(0.9456073253805213), FX16_CONST(0.325310292162263),
+ FX16_CONST(0.9461052323704033), FX16_CONST(0.32385936651785296),
+ FX16_CONST(0.9466009130832835), FX16_CONST(0.32240767880107),
+ FX16_CONST(0.9470943663527772), FX16_CONST(0.3209552324278752),
+ FX16_CONST(0.9475855910177411), FX16_CONST(0.31950203081601575),
+ FX16_CONST(0.9480745859222762), FX16_CONST(0.31804807738501506),
+ FX16_CONST(0.9485613499157303), FX16_CONST(0.31659337555616585),
+ FX16_CONST(0.9490458818527006), FX16_CONST(0.31513792875252244),
+ FX16_CONST(0.9495281805930367), FX16_CONST(0.3136817403988916),
+ FX16_CONST(0.950008245001843), FX16_CONST(0.31222481392182505),
+ FX16_CONST(0.9504860739494817), FX16_CONST(0.3107671527496115),
+ FX16_CONST(0.9509616663115751), FX16_CONST(0.3093087603122688),
+ FX16_CONST(0.9514350209690083), FX16_CONST(0.307849640041535),
+ FX16_CONST(0.9519061368079322), FX16_CONST(0.3063897953708611),
+ FX16_CONST(0.9523750127197659), FX16_CONST(0.30492922973540243),
+ FX16_CONST(0.9528416476011987), FX16_CONST(0.30346794657201137),
+ FX16_CONST(0.9533060403541938), FX16_CONST(0.3020059493192282),
+ FX16_CONST(0.9537681898859903), FX16_CONST(0.3005432414172734),
+ FX16_CONST(0.9542280951091057), FX16_CONST(0.2990798263080405),
+ FX16_CONST(0.9546857549413383), FX16_CONST(0.2976157074350863),
+ FX16_CONST(0.9551411683057707), FX16_CONST(0.29615088824362396),
+ FX16_CONST(0.9555943341307711), FX16_CONST(0.2946853721805143),
+ FX16_CONST(0.9560452513499964), FX16_CONST(0.2932191626942587),
+ FX16_CONST(0.956493918902395), FX16_CONST(0.2917522632349894),
+ FX16_CONST(0.9569403357322089), FX16_CONST(0.29028467725446233),
+ FX16_CONST(0.9573845007889759), FX16_CONST(0.2888164082060495),
+ FX16_CONST(0.9578264130275329), FX16_CONST(0.28734745954472957),
+ FX16_CONST(0.9582660714080177), FX16_CONST(0.2858778347270807),
+ FX16_CONST(0.9587034748958716), FX16_CONST(0.2844075372112718),
+ FX16_CONST(0.9591386224618419), FX16_CONST(0.2829365704570554),
+ FX16_CONST(0.9595715130819845), FX16_CONST(0.28146493792575805),
+ FX16_CONST(0.9600021457376658), FX16_CONST(0.2799926430802734),
+ FX16_CONST(0.9604305194155658), FX16_CONST(0.27851968938505306),
+ FX16_CONST(0.9608566331076797), FX16_CONST(0.27704608030609995),
+ FX16_CONST(0.9612804858113206), FX16_CONST(0.27557181931095825),
+ FX16_CONST(0.9617020765291225), FX16_CONST(0.27409690986870633),
+ FX16_CONST(0.9621214042690416), FX16_CONST(0.272621355449949),
+ FX16_CONST(0.9625384680443592), FX16_CONST(0.27114515952680807),
+ FX16_CONST(0.9629532668736839), FX16_CONST(0.2696683255729152),
+ FX16_CONST(0.963365799780954), FX16_CONST(0.2681908570634032),
+ FX16_CONST(0.9637760657954398), FX16_CONST(0.2667127574748984),
+ FX16_CONST(0.9641840639517457), FX16_CONST(0.2652340302855119),
+ FX16_CONST(0.9645897932898126), FX16_CONST(0.2637546789748315),
+ FX16_CONST(0.9649932528549203), FX16_CONST(0.2622747070239136),
+ FX16_CONST(0.9653944416976894), FX16_CONST(0.26079411791527557),
+ FX16_CONST(0.9657933588740836), FX16_CONST(0.25931291513288635),
+ FX16_CONST(0.9661900034454126), FX16_CONST(0.25783110216215893),
+ FX16_CONST(0.9665843744783331), FX16_CONST(0.2563486824899429),
+ FX16_CONST(0.9669764710448521), FX16_CONST(0.2548656596045146),
+ FX16_CONST(0.9673662922223285), FX16_CONST(0.25338203699557027),
+ FX16_CONST(0.9677538370934755), FX16_CONST(0.2518978181542169),
+ FX16_CONST(0.9681391047463624), FX16_CONST(0.2504130065729653),
+ FX16_CONST(0.9685220942744173), FX16_CONST(0.24892760574572026),
+ FX16_CONST(0.9689028047764289), FX16_CONST(0.24744161916777344),
+ FX16_CONST(0.9692812353565485), FX16_CONST(0.2459550503357946),
+ FX16_CONST(0.9696573851242924), FX16_CONST(0.2444679027478242),
+ FX16_CONST(0.970031253194544), FX16_CONST(0.24298017990326398),
+ FX16_CONST(0.9704028386875555), FX16_CONST(0.2414918853028693),
+ FX16_CONST(0.9707721407289504), FX16_CONST(0.2400030224487415),
+ FX16_CONST(0.9711391584497251), FX16_CONST(0.2385135948443185),
+ FX16_CONST(0.9715038909862518), FX16_CONST(0.23702360599436734),
+ FX16_CONST(0.9718663374802794), FX16_CONST(0.23553305940497546),
+ FX16_CONST(0.9722264970789363), FX16_CONST(0.23404195858354346),
+ FX16_CONST(0.9725843689347322), FX16_CONST(0.23255030703877533),
+ FX16_CONST(0.9729399522055601), FX16_CONST(0.23105810828067128),
+ FX16_CONST(0.9732932460546982), FX16_CONST(0.22956536582051887),
+ FX16_CONST(0.9736442496508119), FX16_CONST(0.2280720831708858),
+ FX16_CONST(0.9739929621679558), FX16_CONST(0.2265782638456101),
+ FX16_CONST(0.9743393827855759), FX16_CONST(0.22508391135979278),
+ FX16_CONST(0.9746835106885107), FX16_CONST(0.22358902922979002),
+ FX16_CONST(0.9750253450669941), FX16_CONST(0.2220936209732036),
+ FX16_CONST(0.9753648851166569), FX16_CONST(0.22059769010887365),
+ FX16_CONST(0.9757021300385286), FX16_CONST(0.21910124015686977),
+ FX16_CONST(0.976037079039039), FX16_CONST(0.21760427463848367),
+ FX16_CONST(0.9763697313300211), FX16_CONST(0.2161067970762196),
+ FX16_CONST(0.9767000861287118), FX16_CONST(0.21460881099378692),
+ FX16_CONST(0.9770281426577544), FX16_CONST(0.21311031991609136),
+ FX16_CONST(0.9773539001452), FX16_CONST(0.2116113273692276),
+ FX16_CONST(0.9776773578245099), FX16_CONST(0.21011183688046972),
+ FX16_CONST(0.9779985149345571), FX16_CONST(0.20861185197826346),
+ FX16_CONST(0.9783173707196277), FX16_CONST(0.20711137619221856),
+ FX16_CONST(0.9786339244294231), FX16_CONST(0.20561041305309932),
+ FX16_CONST(0.9789481753190622), FX16_CONST(0.204108966092817),
+ FX16_CONST(0.979260122649082), FX16_CONST(0.2026070388444211),
+ FX16_CONST(0.9795697656854405), FX16_CONST(0.20110463484209196),
+ FX16_CONST(0.9798771036995176), FX16_CONST(0.19960175762113105),
+ FX16_CONST(0.9801821359681173), FX16_CONST(0.19809841071795373),
+ FX16_CONST(0.9804848617734694), FX16_CONST(0.19659459767008022),
+ FX16_CONST(0.9807852804032304), FX16_CONST(0.19509032201612833),
+ FX16_CONST(0.9810833911504866), FX16_CONST(0.19358558729580375),
+ FX16_CONST(0.9813791933137546), FX16_CONST(0.19208039704989238),
+ FX16_CONST(0.9816726861969831), FX16_CONST(0.1905747548202528),
+ FX16_CONST(0.9819638691095552), FX16_CONST(0.18906866414980628),
+ FX16_CONST(0.9822527413662894), FX16_CONST(0.18756212858252974),
+ FX16_CONST(0.9825393022874412), FX16_CONST(0.18605515166344663),
+ FX16_CONST(0.9828235511987052), FX16_CONST(0.18454773693861964),
+ FX16_CONST(0.9831054874312163), FX16_CONST(0.18303988795514106),
+ FX16_CONST(0.9833851103215512), FX16_CONST(0.18153160826112513),
+ FX16_CONST(0.9836624192117303), FX16_CONST(0.18002290140569951),
+ FX16_CONST(0.9839374134492189), FX16_CONST(0.1785137709389976),
+ FX16_CONST(0.984210092386929), FX16_CONST(0.17700422041214886),
+ FX16_CONST(0.9844804553832209), FX16_CONST(0.1754942533772714),
+ FX16_CONST(0.9847485018019042), FX16_CONST(0.17398387338746385),
+ FX16_CONST(0.9850142310122398), FX16_CONST(0.17247308399679603),
+ FX16_CONST(0.9852776423889412), FX16_CONST(0.17096188876030136),
+ FX16_CONST(0.9855387353121761), FX16_CONST(0.16945029123396793),
+ FX16_CONST(0.9857975091675674), FX16_CONST(0.16793829497473123),
+ FX16_CONST(0.9860539633461954), FX16_CONST(0.16642590354046422),
+ FX16_CONST(0.9863080972445987), FX16_CONST(0.1649131204899701),
+ FX16_CONST(0.9865599102647754), FX16_CONST(0.16339994938297323),
+ FX16_CONST(0.9868094018141854), FX16_CONST(0.16188639378011188),
+ FX16_CONST(0.987056571305751), FX16_CONST(0.1603724572429284),
+ FX16_CONST(0.9873014181578584), FX16_CONST(0.1588581433338614),
+ FX16_CONST(0.9875439417943592), FX16_CONST(0.15734345561623828),
+ FX16_CONST(0.9877841416445722), FX16_CONST(0.15582839765426532),
+ FX16_CONST(0.9880220171432835), FX16_CONST(0.15431297301302024),
+ FX16_CONST(0.9882575677307495), FX16_CONST(0.1527971852584434),
+ FX16_CONST(0.9884907928526966), FX16_CONST(0.15128103795733025),
+ FX16_CONST(0.9887216919603238), FX16_CONST(0.14976453467732162),
+ FX16_CONST(0.988950264510303), FX16_CONST(0.1482476789868962),
+ FX16_CONST(0.989176509964781), FX16_CONST(0.14673047445536175),
+ FX16_CONST(0.9894004277913804), FX16_CONST(0.14521292465284752),
+ FX16_CONST(0.9896220174632008), FX16_CONST(0.14369503315029458),
+ FX16_CONST(0.9898412784588205), FX16_CONST(0.142176803519448),
+ FX16_CONST(0.9900582102622971), FX16_CONST(0.14065823933284924),
+ FX16_CONST(0.9902728123631691), FX16_CONST(0.13913934416382628),
+ FX16_CONST(0.990485084256457), FX16_CONST(0.13762012158648618),
+ FX16_CONST(0.9906950254426646), FX16_CONST(0.1361005751757062),
+ FX16_CONST(0.99090263542778), FX16_CONST(0.13458070850712622),
+ FX16_CONST(0.9911079137232768), FX16_CONST(0.13306052515713918),
+ FX16_CONST(0.9913108598461154), FX16_CONST(0.13154002870288328),
+ FX16_CONST(0.9915114733187439), FX16_CONST(0.13001922272223335),
+ FX16_CONST(0.9917097536690995), FX16_CONST(0.12849811079379322),
+ FX16_CONST(0.9919057004306093), FX16_CONST(0.12697669649688598),
+ FX16_CONST(0.9920993131421918), FX16_CONST(0.1254549834115462),
+ FX16_CONST(0.9922905913482574), FX16_CONST(0.1239329751185122),
+ FX16_CONST(0.99247953459871), FX16_CONST(0.12241067519921628),
+ FX16_CONST(0.992666142448948), FX16_CONST(0.12088808723577722),
+ FX16_CONST(0.9928504144598651), FX16_CONST(0.11936521481099135),
+ FX16_CONST(0.9930323501978514), FX16_CONST(0.11784206150832502),
+ FX16_CONST(0.9932119492347945), FX16_CONST(0.11631863091190488),
+ FX16_CONST(0.9933892111480807), FX16_CONST(0.11479492660651025),
+ FX16_CONST(0.9935641355205953), FX16_CONST(0.11327095217756436),
+ FX16_CONST(0.9937367219407246), FX16_CONST(0.11174671121112666),
+ FX16_CONST(0.9939069700023561), FX16_CONST(0.11022220729388318),
+ FX16_CONST(0.9940748793048794), FX16_CONST(0.10869744401313867),
+ FX16_CONST(0.9942404494531879), FX16_CONST(0.10717242495680887),
+ FX16_CONST(0.9944036800576791), FX16_CONST(0.1056471537134107),
+ FX16_CONST(0.9945645707342554), FX16_CONST(0.10412163387205473),
+ FX16_CONST(0.9947231211043257), FX16_CONST(0.10259586902243628),
+ FX16_CONST(0.9948793307948056), FX16_CONST(0.10106986275482788),
+ FX16_CONST(0.9950331994381186), FX16_CONST(0.09954361866006944),
+ FX16_CONST(0.9951847266721968), FX16_CONST(0.09801714032956077),
+ FX16_CONST(0.9953339121404823), FX16_CONST(0.0964904313552526),
+ FX16_CONST(0.9954807554919269), FX16_CONST(0.09496349532963906),
+ FX16_CONST(0.9956252563809943), FX16_CONST(0.09343633584574791),
+ FX16_CONST(0.9957674144676598), FX16_CONST(0.0919089564971327),
+ FX16_CONST(0.9959072294174117), FX16_CONST(0.09038136087786501),
+ FX16_CONST(0.996044700901252), FX16_CONST(0.08885355258252468),
+ FX16_CONST(0.9961798285956969), FX16_CONST(0.08732553520619223),
+ FX16_CONST(0.996312612182778), FX16_CONST(0.08579731234443988),
+ FX16_CONST(0.9964430513500426), FX16_CONST(0.08426888759332413),
+ FX16_CONST(0.9965711457905548), FX16_CONST(0.0827402645493758),
+ FX16_CONST(0.9966968952028961), FX16_CONST(0.08121144680959239),
+ FX16_CONST(0.9968202992911657), FX16_CONST(0.07968243797143013),
+ FX16_CONST(0.9969413577649822), FX16_CONST(0.07815324163279432),
+ FX16_CONST(0.997060070339483), FX16_CONST(0.07662386139203162),
+ FX16_CONST(0.9971764367353262), FX16_CONST(0.07509430084792129),
+ FX16_CONST(0.9972904566786902), FX16_CONST(0.07356456359966745),
+ FX16_CONST(0.9974021299012753), FX16_CONST(0.07203465324688942),
+ FX16_CONST(0.9975114561403035), FX16_CONST(0.07050457338961401),
+ FX16_CONST(0.9976184351385196), FX16_CONST(0.06897432762826673),
+ FX16_CONST(0.9977230666441916), FX16_CONST(0.0674439195636641),
+ FX16_CONST(0.9978253504111116), FX16_CONST(0.06591335279700393),
+ FX16_CONST(0.997925286198596), FX16_CONST(0.06438263092985741),
+ FX16_CONST(0.9980228737714862), FX16_CONST(0.06285175756416142),
+ FX16_CONST(0.9981181129001492), FX16_CONST(0.06132073630220865),
+ FX16_CONST(0.9982110033604782), FX16_CONST(0.05978957074664001),
+ FX16_CONST(0.9983015449338929), FX16_CONST(0.05825826450043573),
+ FX16_CONST(0.9983897374073402), FX16_CONST(0.05672682116690778),
+ FX16_CONST(0.9984755805732948), FX16_CONST(0.05519524434969003),
+ FX16_CONST(0.9985590742297593), FX16_CONST(0.05366353765273068),
+ FX16_CONST(0.9986402181802653), FX16_CONST(0.05213170468028332),
+ FX16_CONST(0.9987190122338729), FX16_CONST(0.05059974903689934),
+ FX16_CONST(0.9987954562051724), FX16_CONST(0.049067674327418126),
+ FX16_CONST(0.9988695499142836), FX16_CONST(0.04753548415695926),
+ FX16_CONST(0.9989412931868569), FX16_CONST(0.046003182130914644),
+ FX16_CONST(0.9990106858540734), FX16_CONST(0.044470771854938744),
+ FX16_CONST(0.9990777277526454), FX16_CONST(0.04293825693494096),
+ FX16_CONST(0.9991424187248169), FX16_CONST(0.04140564097707671),
+ FX16_CONST(0.9992047586183639), FX16_CONST(0.039872927587739845),
+ FX16_CONST(0.9992647472865944), FX16_CONST(0.03834012037355279),
+ FX16_CONST(0.9993223845883495), FX16_CONST(0.03680722294135899),
+ FX16_CONST(0.9993776703880028), FX16_CONST(0.03527423889821395),
+ FX16_CONST(0.9994306045554617), FX16_CONST(0.03374117185137764),
+ FX16_CONST(0.999481186966167), FX16_CONST(0.032208025408304704),
+ FX16_CONST(0.9995294175010931), FX16_CONST(0.03067480317663658),
+ FX16_CONST(0.9995752960467492), FX16_CONST(0.02914150876419374),
+ FX16_CONST(0.9996188224951786), FX16_CONST(0.02760814577896582),
+ FX16_CONST(0.9996599967439592), FX16_CONST(0.02607471782910404),
+ FX16_CONST(0.9996988186962042), FX16_CONST(0.024541228522912264),
+ FX16_CONST(0.9997352882605617), FX16_CONST(0.02300768146883941),
+ FX16_CONST(0.9997694053512153), FX16_CONST(0.021474080275469605),
+ FX16_CONST(0.9998011698878843), FX16_CONST(0.019940428551514598),
+ FX16_CONST(0.9998305817958234), FX16_CONST(0.01840672990580482),
+ FX16_CONST(0.9998576410058239), FX16_CONST(0.016872987947281773),
+ FX16_CONST(0.9998823474542126), FX16_CONST(0.01533920628498822),
+ FX16_CONST(0.9999047010828529), FX16_CONST(0.013805388528060349),
+ FX16_CONST(0.9999247018391445), FX16_CONST(0.012271538285719944),
+ FX16_CONST(0.9999423496760239), FX16_CONST(0.010737659167264572),
+ FX16_CONST(0.9999576445519639), FX16_CONST(0.00920375478205996),
+ FX16_CONST(0.9999705864309741), FX16_CONST(0.007669828739531077),
+ FX16_CONST(0.9999811752826011), FX16_CONST(0.006135884649154515),
+ FX16_CONST(0.9999894110819284), FX16_CONST(0.004601926120448672),
+ FX16_CONST(0.9999952938095762), FX16_CONST(0.003067956762966138),
+ FX16_CONST(0.9999988234517019), FX16_CONST(0.0015339801862847662),
+ FX16_CONST(1.0), FX16_CONST(6.123233995736766e-17),
+ FX16_CONST(0.9999988234517019), FX16_CONST(-0.0015339801862846436),
+ FX16_CONST(0.9999952938095762), FX16_CONST(-0.0030679567629660156),
+ FX16_CONST(0.9999894110819284), FX16_CONST(-0.00460192612044855),
+ FX16_CONST(0.9999811752826011), FX16_CONST(-0.006135884649154393),
+ FX16_CONST(0.9999705864309741), FX16_CONST(-0.007669828739530955),
+ FX16_CONST(0.9999576445519639), FX16_CONST(-0.009203754782059837),
+ FX16_CONST(0.9999423496760239), FX16_CONST(-0.010737659167264449),
+ FX16_CONST(0.9999247018391445), FX16_CONST(-0.012271538285719823),
+ FX16_CONST(0.9999047010828529), FX16_CONST(-0.013805388528060226),
+ FX16_CONST(0.9998823474542126), FX16_CONST(-0.015339206284988098),
+ FX16_CONST(0.9998576410058239), FX16_CONST(-0.01687298794728165),
+ FX16_CONST(0.9998305817958234), FX16_CONST(-0.018406729905804695),
+ FX16_CONST(0.9998011698878843), FX16_CONST(-0.019940428551514476),
+ FX16_CONST(0.9997694053512153), FX16_CONST(-0.021474080275469484),
+ FX16_CONST(0.9997352882605617), FX16_CONST(-0.02300768146883929),
+ FX16_CONST(0.9996988186962042), FX16_CONST(-0.024541228522912142),
+ FX16_CONST(0.9996599967439592), FX16_CONST(-0.026074717829103915),
+ FX16_CONST(0.9996188224951786), FX16_CONST(-0.027608145778965698),
+ FX16_CONST(0.9995752960467492), FX16_CONST(-0.029141508764193618),
+ FX16_CONST(0.9995294175010931), FX16_CONST(-0.03067480317663646),
+ FX16_CONST(0.999481186966167), FX16_CONST(-0.03220802540830458),
+ FX16_CONST(0.9994306045554617), FX16_CONST(-0.03374117185137752),
+ FX16_CONST(0.9993776703880028), FX16_CONST(-0.03527423889821382),
+ FX16_CONST(0.9993223845883495), FX16_CONST(-0.036807222941358866),
+ FX16_CONST(0.9992647472865944), FX16_CONST(-0.038340120373552666),
+ FX16_CONST(0.9992047586183639), FX16_CONST(-0.03987292758773973),
+ FX16_CONST(0.9991424187248169), FX16_CONST(-0.041405640977076594),
+ FX16_CONST(0.9990777277526454), FX16_CONST(-0.042938256934940834),
+ FX16_CONST(0.9990106858540734), FX16_CONST(-0.04447077185493862),
+ FX16_CONST(0.9989412931868569), FX16_CONST(-0.04600318213091452),
+ FX16_CONST(0.9988695499142836), FX16_CONST(-0.047535484156959136),
+ FX16_CONST(0.9987954562051724), FX16_CONST(-0.04906767432741801),
+ FX16_CONST(0.9987190122338729), FX16_CONST(-0.05059974903689921),
+ FX16_CONST(0.9986402181802653), FX16_CONST(-0.05213170468028319),
+ FX16_CONST(0.9985590742297593), FX16_CONST(-0.053663537652730554),
+ FX16_CONST(0.9984755805732948), FX16_CONST(-0.05519524434968991),
+ FX16_CONST(0.9983897374073402), FX16_CONST(-0.05672682116690766),
+ FX16_CONST(0.9983015449338929), FX16_CONST(-0.05825826450043561),
+ FX16_CONST(0.9982110033604782), FX16_CONST(-0.05978957074663988),
+ FX16_CONST(0.9981181129001492), FX16_CONST(-0.06132073630220853),
+ FX16_CONST(0.9980228737714862), FX16_CONST(-0.06285175756416131),
+ FX16_CONST(0.997925286198596), FX16_CONST(-0.06438263092985728),
+ FX16_CONST(0.9978253504111116), FX16_CONST(-0.0659133527970038),
+ FX16_CONST(0.9977230666441916), FX16_CONST(-0.06744391956366398),
+ FX16_CONST(0.9976184351385196), FX16_CONST(-0.06897432762826661),
+ FX16_CONST(0.9975114561403035), FX16_CONST(-0.0705045733896139),
+ FX16_CONST(0.9974021299012753), FX16_CONST(-0.07203465324688929),
+ FX16_CONST(0.9972904566786902), FX16_CONST(-0.07356456359966733),
+ FX16_CONST(0.9971764367353262), FX16_CONST(-0.07509430084792117),
+ FX16_CONST(0.997060070339483), FX16_CONST(-0.0766238613920315),
+ FX16_CONST(0.9969413577649822), FX16_CONST(-0.07815324163279419),
+ FX16_CONST(0.9968202992911658), FX16_CONST(-0.07968243797143001),
+ FX16_CONST(0.9966968952028961), FX16_CONST(-0.08121144680959226),
+ FX16_CONST(0.9965711457905548), FX16_CONST(-0.08274026454937568),
+ FX16_CONST(0.9964430513500426), FX16_CONST(-0.084268887593324),
+ FX16_CONST(0.996312612182778), FX16_CONST(-0.08579731234443976),
+ FX16_CONST(0.9961798285956969), FX16_CONST(-0.0873255352061921),
+ FX16_CONST(0.996044700901252), FX16_CONST(-0.08885355258252456),
+ FX16_CONST(0.9959072294174117), FX16_CONST(-0.09038136087786489),
+ FX16_CONST(0.9957674144676598), FX16_CONST(-0.09190895649713257),
+ FX16_CONST(0.9956252563809943), FX16_CONST(-0.09343633584574779),
+ FX16_CONST(0.9954807554919269), FX16_CONST(-0.09496349532963895),
+ FX16_CONST(0.9953339121404823), FX16_CONST(-0.09649043135525248),
+ FX16_CONST(0.9951847266721969), FX16_CONST(-0.09801714032956065),
+ FX16_CONST(0.9950331994381186), FX16_CONST(-0.09954361866006932),
+ FX16_CONST(0.9948793307948056), FX16_CONST(-0.10106986275482775),
+ FX16_CONST(0.9947231211043257), FX16_CONST(-0.10259586902243616),
+ FX16_CONST(0.9945645707342554), FX16_CONST(-0.1041216338720546),
+ FX16_CONST(0.9944036800576791), FX16_CONST(-0.10564715371341057),
+ FX16_CONST(0.9942404494531879), FX16_CONST(-0.10717242495680876),
+ FX16_CONST(0.9940748793048795), FX16_CONST(-0.10869744401313856),
+ FX16_CONST(0.9939069700023561), FX16_CONST(-0.11022220729388306),
+ FX16_CONST(0.9937367219407246), FX16_CONST(-0.11174671121112655),
+ FX16_CONST(0.9935641355205953), FX16_CONST(-0.11327095217756424),
+ FX16_CONST(0.9933892111480807), FX16_CONST(-0.11479492660651013),
+ FX16_CONST(0.9932119492347945), FX16_CONST(-0.11631863091190475),
+ FX16_CONST(0.9930323501978514), FX16_CONST(-0.1178420615083249),
+ FX16_CONST(0.9928504144598651), FX16_CONST(-0.11936521481099123),
+ FX16_CONST(0.992666142448948), FX16_CONST(-0.1208880872357771),
+ FX16_CONST(0.99247953459871), FX16_CONST(-0.12241067519921615),
+ FX16_CONST(0.9922905913482574), FX16_CONST(-0.12393297511851208),
+ FX16_CONST(0.9920993131421918), FX16_CONST(-0.12545498341154607),
+ FX16_CONST(0.9919057004306093), FX16_CONST(-0.12697669649688587),
+ FX16_CONST(0.9917097536690995), FX16_CONST(-0.1284981107937931),
+ FX16_CONST(0.991511473318744), FX16_CONST(-0.13001922272223324),
+ FX16_CONST(0.9913108598461154), FX16_CONST(-0.13154002870288314),
+ FX16_CONST(0.9911079137232769), FX16_CONST(-0.13306052515713904),
+ FX16_CONST(0.99090263542778), FX16_CONST(-0.1345807085071261),
+ FX16_CONST(0.9906950254426646), FX16_CONST(-0.13610057517570606),
+ FX16_CONST(0.990485084256457), FX16_CONST(-0.13762012158648607),
+ FX16_CONST(0.9902728123631691), FX16_CONST(-0.13913934416382617),
+ FX16_CONST(0.9900582102622971), FX16_CONST(-0.14065823933284913),
+ FX16_CONST(0.9898412784588205), FX16_CONST(-0.1421768035194479),
+ FX16_CONST(0.9896220174632009), FX16_CONST(-0.14369503315029444),
+ FX16_CONST(0.9894004277913804), FX16_CONST(-0.1452129246528474),
+ FX16_CONST(0.989176509964781), FX16_CONST(-0.14673047445536164),
+ FX16_CONST(0.988950264510303), FX16_CONST(-0.1482476789868961),
+ FX16_CONST(0.9887216919603238), FX16_CONST(-0.1497645346773215),
+ FX16_CONST(0.9884907928526967), FX16_CONST(-0.15128103795733014),
+ FX16_CONST(0.9882575677307495), FX16_CONST(-0.1527971852584433),
+ FX16_CONST(0.9880220171432835), FX16_CONST(-0.15431297301302013),
+ FX16_CONST(0.9877841416445722), FX16_CONST(-0.1558283976542652),
+ FX16_CONST(0.9875439417943593), FX16_CONST(-0.15734345561623816),
+ FX16_CONST(0.9873014181578584), FX16_CONST(-0.15885814333386128),
+ FX16_CONST(0.987056571305751), FX16_CONST(-0.16037245724292826),
+ FX16_CONST(0.9868094018141855), FX16_CONST(-0.16188639378011177),
+ FX16_CONST(0.9865599102647755), FX16_CONST(-0.16339994938297311),
+ FX16_CONST(0.9863080972445987), FX16_CONST(-0.16491312048996995),
+ FX16_CONST(0.9860539633461954), FX16_CONST(-0.1664259035404641),
+ FX16_CONST(0.9857975091675675), FX16_CONST(-0.1679382949747311),
+ FX16_CONST(0.9855387353121761), FX16_CONST(-0.16945029123396782),
+ FX16_CONST(0.9852776423889412), FX16_CONST(-0.17096188876030124),
+ FX16_CONST(0.9850142310122398), FX16_CONST(-0.17247308399679592),
+ FX16_CONST(0.9847485018019042), FX16_CONST(-0.1739838733874637),
+ FX16_CONST(0.9844804553832209), FX16_CONST(-0.17549425337727126),
+ FX16_CONST(0.984210092386929), FX16_CONST(-0.17700422041214875),
+ FX16_CONST(0.9839374134492189), FX16_CONST(-0.17851377093899745),
+ FX16_CONST(0.9836624192117303), FX16_CONST(-0.1800229014056994),
+ FX16_CONST(0.9833851103215512), FX16_CONST(-0.18153160826112502),
+ FX16_CONST(0.9831054874312163), FX16_CONST(-0.18303988795514092),
+ FX16_CONST(0.9828235511987053), FX16_CONST(-0.18454773693861953),
+ FX16_CONST(0.9825393022874412), FX16_CONST(-0.1860551516634465),
+ FX16_CONST(0.9822527413662894), FX16_CONST(-0.1875621285825296),
+ FX16_CONST(0.9819638691095552), FX16_CONST(-0.18906866414980616),
+ FX16_CONST(0.9816726861969831), FX16_CONST(-0.19057475482025266),
+ FX16_CONST(0.9813791933137546), FX16_CONST(-0.19208039704989227),
+ FX16_CONST(0.9810833911504867), FX16_CONST(-0.1935855872958036),
+ FX16_CONST(0.9807852804032304), FX16_CONST(-0.1950903220161282),
+ FX16_CONST(0.9804848617734694), FX16_CONST(-0.1965945976700801),
+ FX16_CONST(0.9801821359681174), FX16_CONST(-0.19809841071795362),
+ FX16_CONST(0.9798771036995176), FX16_CONST(-0.19960175762113094),
+ FX16_CONST(0.9795697656854405), FX16_CONST(-0.20110463484209182),
+ FX16_CONST(0.9792601226490821), FX16_CONST(-0.20260703884442097),
+ FX16_CONST(0.9789481753190622), FX16_CONST(-0.2041089660928169),
+ FX16_CONST(0.9786339244294232), FX16_CONST(-0.2056104130530992),
+ FX16_CONST(0.9783173707196277), FX16_CONST(-0.20711137619221845),
+ FX16_CONST(0.9779985149345571), FX16_CONST(-0.20861185197826332),
+ FX16_CONST(0.9776773578245099), FX16_CONST(-0.2101118368804696),
+ FX16_CONST(0.9773539001452001), FX16_CONST(-0.2116113273692275),
+ FX16_CONST(0.9770281426577544), FX16_CONST(-0.21311031991609125),
+ FX16_CONST(0.9767000861287118), FX16_CONST(-0.2146088109937868),
+ FX16_CONST(0.9763697313300211), FX16_CONST(-0.2161067970762195),
+ FX16_CONST(0.9760370790390391), FX16_CONST(-0.21760427463848356),
+ FX16_CONST(0.9757021300385286), FX16_CONST(-0.21910124015686966),
+ FX16_CONST(0.975364885116657), FX16_CONST(-0.22059769010887353),
+ FX16_CONST(0.9750253450669941), FX16_CONST(-0.22209362097320348),
+ FX16_CONST(0.9746835106885107), FX16_CONST(-0.22358902922978988),
+ FX16_CONST(0.9743393827855759), FX16_CONST(-0.22508391135979267),
+ FX16_CONST(0.9739929621679558), FX16_CONST(-0.22657826384560997),
+ FX16_CONST(0.973644249650812), FX16_CONST(-0.22807208317088568),
+ FX16_CONST(0.9732932460546982), FX16_CONST(-0.22956536582051876),
+ FX16_CONST(0.9729399522055602), FX16_CONST(-0.23105810828067114),
+ FX16_CONST(0.9725843689347322), FX16_CONST(-0.23255030703877522),
+ FX16_CONST(0.9722264970789364), FX16_CONST(-0.23404195858354332),
+ FX16_CONST(0.9718663374802794), FX16_CONST(-0.23553305940497535),
+ FX16_CONST(0.9715038909862518), FX16_CONST(-0.23702360599436723),
+ FX16_CONST(0.9711391584497251), FX16_CONST(-0.2385135948443184),
+ FX16_CONST(0.9707721407289504), FX16_CONST(-0.2400030224487414),
+ FX16_CONST(0.9704028386875555), FX16_CONST(-0.24149188530286916),
+ FX16_CONST(0.970031253194544), FX16_CONST(-0.24298017990326387),
+ FX16_CONST(0.9696573851242924), FX16_CONST(-0.2444679027478241),
+ FX16_CONST(0.9692812353565485), FX16_CONST(-0.24595505033579448),
+ FX16_CONST(0.9689028047764289), FX16_CONST(-0.24744161916777332),
+ FX16_CONST(0.9685220942744174), FX16_CONST(-0.24892760574572012),
+ FX16_CONST(0.9681391047463624), FX16_CONST(-0.25041300657296517),
+ FX16_CONST(0.9677538370934755), FX16_CONST(-0.2518978181542168),
+ FX16_CONST(0.9673662922223285), FX16_CONST(-0.25338203699557016),
+ FX16_CONST(0.9669764710448521), FX16_CONST(-0.2548656596045145),
+ FX16_CONST(0.9665843744783331), FX16_CONST(-0.25634868248994275),
+ FX16_CONST(0.9661900034454126), FX16_CONST(-0.2578311021621588),
+ FX16_CONST(0.9657933588740837), FX16_CONST(-0.25931291513288623),
+ FX16_CONST(0.9653944416976894), FX16_CONST(-0.26079411791527546),
+ FX16_CONST(0.9649932528549204), FX16_CONST(-0.2622747070239135),
+ FX16_CONST(0.9645897932898128), FX16_CONST(-0.2637546789748314),
+ FX16_CONST(0.9641840639517458), FX16_CONST(-0.2652340302855118),
+ FX16_CONST(0.9637760657954398), FX16_CONST(-0.2667127574748983),
+ FX16_CONST(0.963365799780954), FX16_CONST(-0.268190857063403),
+ FX16_CONST(0.9629532668736839), FX16_CONST(-0.2696683255729151),
+ FX16_CONST(0.9625384680443592), FX16_CONST(-0.27114515952680796),
+ FX16_CONST(0.9621214042690416), FX16_CONST(-0.27262135544994887),
+ FX16_CONST(0.9617020765291225), FX16_CONST(-0.2740969098687062),
+ FX16_CONST(0.9612804858113206), FX16_CONST(-0.27557181931095814),
+ FX16_CONST(0.9608566331076797), FX16_CONST(-0.27704608030609984),
+ FX16_CONST(0.9604305194155659), FX16_CONST(-0.27851968938505295),
+ FX16_CONST(0.9600021457376658), FX16_CONST(-0.2799926430802733),
+ FX16_CONST(0.9595715130819845), FX16_CONST(-0.28146493792575794),
+ FX16_CONST(0.959138622461842), FX16_CONST(-0.2829365704570553),
+ FX16_CONST(0.9587034748958716), FX16_CONST(-0.2844075372112717),
+ FX16_CONST(0.9582660714080177), FX16_CONST(-0.2858778347270806),
+ FX16_CONST(0.9578264130275329), FX16_CONST(-0.28734745954472946),
+ FX16_CONST(0.957384500788976), FX16_CONST(-0.28881640820604937),
+ FX16_CONST(0.9569403357322089), FX16_CONST(-0.29028467725446216),
+ FX16_CONST(0.9564939189023951), FX16_CONST(-0.29175226323498926),
+ FX16_CONST(0.9560452513499965), FX16_CONST(-0.2932191626942586),
+ FX16_CONST(0.9555943341307711), FX16_CONST(-0.2946853721805142),
+ FX16_CONST(0.9551411683057707), FX16_CONST(-0.29615088824362384),
+ FX16_CONST(0.9546857549413383), FX16_CONST(-0.2976157074350862),
+ FX16_CONST(0.9542280951091057), FX16_CONST(-0.29907982630804036),
+ FX16_CONST(0.9537681898859903), FX16_CONST(-0.3005432414172733),
+ FX16_CONST(0.9533060403541939), FX16_CONST(-0.3020059493192281),
+ FX16_CONST(0.9528416476011987), FX16_CONST(-0.30346794657201126),
+ FX16_CONST(0.9523750127197659), FX16_CONST(-0.30492922973540226),
+ FX16_CONST(0.9519061368079323), FX16_CONST(-0.306389795370861),
+ FX16_CONST(0.9514350209690083), FX16_CONST(-0.30784964004153487),
+ FX16_CONST(0.9509616663115751), FX16_CONST(-0.3093087603122686),
+ FX16_CONST(0.9504860739494818), FX16_CONST(-0.31076715274961136),
+ FX16_CONST(0.950008245001843), FX16_CONST(-0.31222481392182494),
+ FX16_CONST(0.9495281805930367), FX16_CONST(-0.3136817403988914),
+ FX16_CONST(0.9490458818527006), FX16_CONST(-0.31513792875252233),
+ FX16_CONST(0.9485613499157304), FX16_CONST(-0.31659337555616573),
+ FX16_CONST(0.9480745859222762), FX16_CONST(-0.31804807738501495),
+ FX16_CONST(0.9475855910177412), FX16_CONST(-0.31950203081601564),
+ FX16_CONST(0.9470943663527772), FX16_CONST(-0.3209552324278751),
+ FX16_CONST(0.9466009130832835), FX16_CONST(-0.32240767880106985),
+ FX16_CONST(0.9461052323704034), FX16_CONST(-0.32385936651785285),
+ FX16_CONST(0.9456073253805214), FX16_CONST(-0.32531029216226287),
+ FX16_CONST(0.9451071932852606), FX16_CONST(-0.3267604523201316),
+ FX16_CONST(0.9446048372614803), FX16_CONST(-0.32820984357909255),
+ FX16_CONST(0.9441002584912727), FX16_CONST(-0.32965846252858744),
+ FX16_CONST(0.9435934581619604), FX16_CONST(-0.3311063057598763),
+ FX16_CONST(0.9430844374660935), FX16_CONST(-0.33255336986604406),
+ FX16_CONST(0.9425731976014469), FX16_CONST(-0.3339996514420094),
+ FX16_CONST(0.9420597397710174), FX16_CONST(-0.33544514708453155),
+ FX16_CONST(0.9415440651830208), FX16_CONST(-0.33688985339221994),
+ FX16_CONST(0.9410261750508893), FX16_CONST(-0.3383337669655412),
+ FX16_CONST(0.9405060705932683), FX16_CONST(-0.33977688440682685),
+ FX16_CONST(0.939983753034014), FX16_CONST(-0.3412192023202823),
+ FX16_CONST(0.9394592236021899), FX16_CONST(-0.34266071731199427),
+ FX16_CONST(0.9389324835320645), FX16_CONST(-0.34410142598993887),
+ FX16_CONST(0.9384035340631082), FX16_CONST(-0.34554132496398904),
+ FX16_CONST(0.9378723764399899), FX16_CONST(-0.34698041084592357),
+ FX16_CONST(0.937339011912575), FX16_CONST(-0.3484186802494344),
+ FX16_CONST(0.9368034417359216), FX16_CONST(-0.3498561297901349),
+ FX16_CONST(0.9362656671702783), FX16_CONST(-0.35129275608556704),
+ FX16_CONST(0.9357256894810804), FX16_CONST(-0.3527285557552106),
+ FX16_CONST(0.9351835099389476), FX16_CONST(-0.3541635254204904),
+ FX16_CONST(0.9346391298196808), FX16_CONST(-0.35559766170478385),
+ FX16_CONST(0.934092550404259), FX16_CONST(-0.3570309612334299),
+ FX16_CONST(0.9335437729788363), FX16_CONST(-0.35846342063373643),
+ FX16_CONST(0.9329927988347388), FX16_CONST(-0.35989503653498817),
+ FX16_CONST(0.9324396292684624), FX16_CONST(-0.36132580556845423),
+ FX16_CONST(0.9318842655816681), FX16_CONST(-0.3627557243673971),
+ FX16_CONST(0.9313267090811805), FX16_CONST(-0.3641847895670797),
+ FX16_CONST(0.9307669610789837), FX16_CONST(-0.36561299780477385),
+ FX16_CONST(0.9302050228922191), FX16_CONST(-0.3670403457197671),
+ FX16_CONST(0.9296408958431813), FX16_CONST(-0.3684668299533722),
+ FX16_CONST(0.9290745812593157), FX16_CONST(-0.36989244714893416),
+ FX16_CONST(0.9285060804732156), FX16_CONST(-0.3713171939518375),
+ FX16_CONST(0.9279353948226179), FX16_CONST(-0.3727410670095157),
+ FX16_CONST(0.9273625256504011), FX16_CONST(-0.3741640629714579),
+ FX16_CONST(0.9267874743045817), FX16_CONST(-0.3755861784892172),
+ FX16_CONST(0.9262102421383114), FX16_CONST(-0.3770074102164182),
+ FX16_CONST(0.9256308305098728), FX16_CONST(-0.37842775480876545),
+ FX16_CONST(0.9250492407826777), FX16_CONST(-0.379847208924051),
+ FX16_CONST(0.9244654743252626), FX16_CONST(-0.3812657692221624),
+ FX16_CONST(0.9238795325112867), FX16_CONST(-0.3826834323650897),
+ FX16_CONST(0.9232914167195277), FX16_CONST(-0.38410019501693493),
+ FX16_CONST(0.9227011283338785), FX16_CONST(-0.3855160538439189),
+ FX16_CONST(0.9221086687433452), FX16_CONST(-0.3869310055143886),
+ FX16_CONST(0.921514039342042), FX16_CONST(-0.3883450466988262),
+ FX16_CONST(0.9209172415291895), FX16_CONST(-0.3897581740698563),
+ FX16_CONST(0.9203182767091106), FX16_CONST(-0.39117038430225387),
+ FX16_CONST(0.9197171462912274), FX16_CONST(-0.3925816740729514),
+ FX16_CONST(0.9191138516900578), FX16_CONST(-0.393992040061048),
+ FX16_CONST(0.9185083943252123), FX16_CONST(-0.3954014789478162),
+ FX16_CONST(0.9179007756213905), FX16_CONST(-0.3968099874167103),
+ FX16_CONST(0.917290997008378), FX16_CONST(-0.3982175621533735),
+ FX16_CONST(0.9166790599210427), FX16_CONST(-0.3996241998456467),
+ FX16_CONST(0.9160649657993317), FX16_CONST(-0.4010298971835757),
+ FX16_CONST(0.9154487160882678), FX16_CONST(-0.40243465085941843),
+ FX16_CONST(0.9148303122379462), FX16_CONST(-0.403838457567654),
+ FX16_CONST(0.9142097557035307), FX16_CONST(-0.40524131400498975),
+ FX16_CONST(0.9135870479452508), FX16_CONST(-0.40664321687036903),
+ FX16_CONST(0.9129621904283982), FX16_CONST(-0.40804416286497863),
+ FX16_CONST(0.9123351846233229), FX16_CONST(-0.40944414869225754),
+ FX16_CONST(0.9117060320054299), FX16_CONST(-0.4108431710579038),
+ FX16_CONST(0.9110747340551764), FX16_CONST(-0.4122412266698829),
+ FX16_CONST(0.9104412922580672), FX16_CONST(-0.4136383122384345),
+ FX16_CONST(0.9098057081046523), FX16_CONST(-0.4150344244760815),
+ FX16_CONST(0.9091679830905225), FX16_CONST(-0.416429560097637),
+ FX16_CONST(0.9085281187163061), FX16_CONST(-0.41782371582021227),
+ FX16_CONST(0.9078861164876662), FX16_CONST(-0.41921688836322407),
+ FX16_CONST(0.9072419779152959), FX16_CONST(-0.4206090744484024),
+ FX16_CONST(0.9065957045149153), FX16_CONST(-0.4220002707997997),
+ FX16_CONST(0.9059472978072686), FX16_CONST(-0.42339047414379577),
+ FX16_CONST(0.9052967593181188), FX16_CONST(-0.4247796812091087),
+ FX16_CONST(0.9046440905782461), FX16_CONST(-0.42616788872679967),
+ FX16_CONST(0.9039892931234434), FX16_CONST(-0.42755509343028186),
+ FX16_CONST(0.9033323684945118), FX16_CONST(-0.42894129205532944),
+ FX16_CONST(0.9026733182372587), FX16_CONST(-0.4303264813400827),
+ FX16_CONST(0.9020121439024933), FX16_CONST(-0.4317106580250571),
+ FX16_CONST(0.901348847046022), FX16_CONST(-0.4330938188531519),
+ FX16_CONST(0.9006834292286469), FX16_CONST(-0.4344759605696558),
+ FX16_CONST(0.9000158920161603), FX16_CONST(-0.43585707992225536),
+ FX16_CONST(0.8993462369793416), FX16_CONST(-0.4372371736610441),
+ FX16_CONST(0.8986744656939539), FX16_CONST(-0.4386162385385274),
+ FX16_CONST(0.8980005797407399), FX16_CONST(-0.43999427130963314),
+ FX16_CONST(0.8973245807054183), FX16_CONST(-0.4413712687317167),
+ FX16_CONST(0.8966464701786803), FX16_CONST(-0.4427472275645698),
+ FX16_CONST(0.8959662497561852), FX16_CONST(-0.44412214457042914),
+ FX16_CONST(0.8952839210385575), FX16_CONST(-0.4454960165139818),
+ FX16_CONST(0.8945994856313828), FX16_CONST(-0.446868840162374),
+ FX16_CONST(0.8939129451452033), FX16_CONST(-0.4482406122852199),
+ FX16_CONST(0.8932243011955152), FX16_CONST(-0.4496113296546067),
+ FX16_CONST(0.8925335554027647), FX16_CONST(-0.4509809890451037),
+ FX16_CONST(0.8918407093923427), FX16_CONST(-0.4523495872337709),
+ FX16_CONST(0.8911457647945834), FX16_CONST(-0.4537171210001636),
+ FX16_CONST(0.890448723244758), FX16_CONST(-0.4550835871263437),
+ FX16_CONST(0.8897495863830728), FX16_CONST(-0.456448982396884),
+ FX16_CONST(0.8890483558546647), FX16_CONST(-0.457813303598877),
+ FX16_CONST(0.8883450333095964), FX16_CONST(-0.45917654752194403),
+ FX16_CONST(0.8876396204028539), FX16_CONST(-0.46053871095824006),
+ FX16_CONST(0.8869321187943423), FX16_CONST(-0.46189979070246256),
+ FX16_CONST(0.8862225301488806), FX16_CONST(-0.46325978355186015),
+ FX16_CONST(0.8855108561361998), FX16_CONST(-0.4646186863062379),
+ FX16_CONST(0.8847970984309379), FX16_CONST(-0.465976495767966),
+ FX16_CONST(0.884081258712635), FX16_CONST(-0.4673332087419884),
+ FX16_CONST(0.8833633386657317), FX16_CONST(-0.4686888220358277),
+ FX16_CONST(0.8826433399795628), FX16_CONST(-0.4700433324595955),
+ FX16_CONST(0.881921264348355), FX16_CONST(-0.4713967368259977),
+ FX16_CONST(0.8811971134712222), FX16_CONST(-0.47274903195034257),
+ FX16_CONST(0.8804708890521609), FX16_CONST(-0.4741002146505499),
+ FX16_CONST(0.8797425928000474), FX16_CONST(-0.4754502817471559),
+ FX16_CONST(0.8790122264286335), FX16_CONST(-0.4767992300633219),
+ FX16_CONST(0.8782797916565416), FX16_CONST(-0.478147056424843),
+ FX16_CONST(0.8775452902072612), FX16_CONST(-0.4794937576601531),
+ FX16_CONST(0.8768087238091458), FX16_CONST(-0.4808393306003338),
+ FX16_CONST(0.8760700941954066), FX16_CONST(-0.4821837720791227),
+ FX16_CONST(0.875329403104111), FX16_CONST(-0.48352707893291846),
+ FX16_CONST(0.8745866522781762), FX16_CONST(-0.484869248000791),
+ FX16_CONST(0.8738418434653668), FX16_CONST(-0.4862102761244864),
+ FX16_CONST(0.8730949784182902), FX16_CONST(-0.4875501601484357),
+ FX16_CONST(0.8723460588943915), FX16_CONST(-0.4888888969197631),
+ FX16_CONST(0.871595086655951), FX16_CONST(-0.4902264832882912),
+ FX16_CONST(0.870842063470079), FX16_CONST(-0.49156291610654973),
+ FX16_CONST(0.8700869911087115), FX16_CONST(-0.492898192229784),
+ FX16_CONST(0.8693298713486067), FX16_CONST(-0.49423230851595984),
+ FX16_CONST(0.868570705971341), FX16_CONST(-0.4955652618257724),
+ FX16_CONST(0.8678094967633032), FX16_CONST(-0.4968970490226545),
+ FX16_CONST(0.8670462455156928), FX16_CONST(-0.4982276669727816),
+ FX16_CONST(0.8662809540245131), FX16_CONST(-0.4995571125450818),
+ FX16_CONST(0.8655136240905691), FX16_CONST(-0.5008853826112408),
+ FX16_CONST(0.8647442575194625), FX16_CONST(-0.5022124740457106),
+ FX16_CONST(0.8639728561215868), FX16_CONST(-0.5035383837257175),
+ FX16_CONST(0.8631994217121242), FX16_CONST(-0.5048631085312676),
+ FX16_CONST(0.8624239561110406), FX16_CONST(-0.5061866453451551),
+ FX16_CONST(0.8616464611430814), FX16_CONST(-0.5075089910529708),
+ FX16_CONST(0.8608669386377672), FX16_CONST(-0.5088301425431071),
+ FX16_CONST(0.8600853904293903), FX16_CONST(-0.5101500967067666),
+ FX16_CONST(0.8593018183570085), FX16_CONST(-0.5114688504379704),
+ FX16_CONST(0.858516224264443), FX16_CONST(-0.5127864006335627),
+ FX16_CONST(0.8577286100002721), FX16_CONST(-0.5141027441932216),
+ FX16_CONST(0.8569389774178287), FX16_CONST(-0.515417878019463),
+ FX16_CONST(0.8561473283751946), FX16_CONST(-0.5167317990176497),
+ FX16_CONST(0.855353664735196), FX16_CONST(-0.5180445040959992),
+ FX16_CONST(0.8545579883654005), FX16_CONST(-0.5193559901655896),
+ FX16_CONST(0.8537603011381115), FX16_CONST(-0.5206662541403669),
+ FX16_CONST(0.8529606049303637), FX16_CONST(-0.5219752929371543),
+ FX16_CONST(0.8521589016239197), FX16_CONST(-0.5232831034756565),
+ FX16_CONST(0.8513551931052652), FX16_CONST(-0.5245896826784687),
+ FX16_CONST(0.8505494812656035), FX16_CONST(-0.5258950274710846),
+ FX16_CONST(0.8497417680008527), FX16_CONST(-0.5271991347819011),
+ FX16_CONST(0.8489320552116397), FX16_CONST(-0.5285020015422284),
+ FX16_CONST(0.8481203448032972), FX16_CONST(-0.5298036246862947),
+ FX16_CONST(0.8473066386858585), FX16_CONST(-0.5311040011512548),
+ FX16_CONST(0.8464909387740521), FX16_CONST(-0.5324031278771979),
+ FX16_CONST(0.8456732469872991), FX16_CONST(-0.533701001807153),
+ FX16_CONST(0.8448535652497072), FX16_CONST(-0.534997619887097),
+ FX16_CONST(0.8440318954900664), FX16_CONST(-0.5362929790659631),
+ FX16_CONST(0.8432082396418453), FX16_CONST(-0.5375870762956456),
+ FX16_CONST(0.842382599643186), FX16_CONST(-0.5388799085310083),
+ FX16_CONST(0.8415549774368984), FX16_CONST(-0.5401714727298929),
+ FX16_CONST(0.8407253749704582), FX16_CONST(-0.5414617658531232),
+ FX16_CONST(0.8398937941959995), FX16_CONST(-0.5427507848645158),
+ FX16_CONST(0.8390602370703127), FX16_CONST(-0.5440385267308839),
+ FX16_CONST(0.8382247055548382), FX16_CONST(-0.5453249884220462),
+ FX16_CONST(0.8373872016156619), FX16_CONST(-0.5466101669108347),
+ FX16_CONST(0.836547727223512), FX16_CONST(-0.5478940591731002),
+ FX16_CONST(0.8357062843537527), FX16_CONST(-0.5491766621877195),
+ FX16_CONST(0.8348628749863801), FX16_CONST(-0.5504579729366047),
+ FX16_CONST(0.834017501106018), FX16_CONST(-0.5517379884047074),
+ FX16_CONST(0.8331701647019133), FX16_CONST(-0.5530167055800274),
+ FX16_CONST(0.8323208677679297), FX16_CONST(-0.5542941214536201),
+ FX16_CONST(0.8314696123025453), FX16_CONST(-0.555570233019602),
+ FX16_CONST(0.8306164003088463), FX16_CONST(-0.55684503727516),
+ FX16_CONST(0.829761233794523), FX16_CONST(-0.5581185312205561),
+ FX16_CONST(0.8289041147718651), FX16_CONST(-0.5593907118591358),
+ FX16_CONST(0.8280450452577558), FX16_CONST(-0.5606615761973359),
+ FX16_CONST(0.827184027273669), FX16_CONST(-0.5619311212446895),
+ FX16_CONST(0.8263210628456636), FX16_CONST(-0.5631993440138339),
+ FX16_CONST(0.8254561540043776), FX16_CONST(-0.5644662415205194),
+ FX16_CONST(0.8245893027850252), FX16_CONST(-0.5657318107836132),
+ FX16_CONST(0.8237205112273915), FX16_CONST(-0.5669960488251085),
+ FX16_CONST(0.8228497813758263), FX16_CONST(-0.5682589526701315),
+ FX16_CONST(0.8219771152792414), FX16_CONST(-0.5695205193469473),
+ FX16_CONST(0.8211025149911048), FX16_CONST(-0.5707807458869671),
+ FX16_CONST(0.8202259825694347), FX16_CONST(-0.572039629324757),
+ FX16_CONST(0.8193475200767971), FX16_CONST(-0.573297166698042),
+ FX16_CONST(0.8184671295802988), FX16_CONST(-0.5745533550477158),
+ FX16_CONST(0.8175848131515837), FX16_CONST(-0.5758081914178453),
+ FX16_CONST(0.816700572866828), FX16_CONST(-0.5770616728556793),
+ FX16_CONST(0.8158144108067338), FX16_CONST(-0.5783137964116555),
+ FX16_CONST(0.8149263290565265), FX16_CONST(-0.5795645591394059),
+ FX16_CONST(0.8140363297059485), FX16_CONST(-0.5808139580957644),
+ FX16_CONST(0.8131444148492536), FX16_CONST(-0.5820619903407755),
+ FX16_CONST(0.8122505865852039), FX16_CONST(-0.5833086529376984),
+ FX16_CONST(0.8113548470170638), FX16_CONST(-0.5845539429530152),
+ FX16_CONST(0.8104571982525948), FX16_CONST(-0.5857978574564389),
+ FX16_CONST(0.8095576424040515), FX16_CONST(-0.5870403935209177),
+ FX16_CONST(0.8086561815881751), FX16_CONST(-0.5882815482226452),
+ FX16_CONST(0.8077528179261904), FX16_CONST(-0.5895213186410639),
+ FX16_CONST(0.8068475535437994), FX16_CONST(-0.590759701858874),
+ FX16_CONST(0.8059403905711764), FX16_CONST(-0.5919966949620409),
+ FX16_CONST(0.8050313311429635), FX16_CONST(-0.5932322950397999),
+ FX16_CONST(0.8041203773982658), FX16_CONST(-0.5944664991846643),
+ FX16_CONST(0.8032075314806449), FX16_CONST(-0.5956993044924334),
+ FX16_CONST(0.8022927955381156), FX16_CONST(-0.5969307080621966),
+ FX16_CONST(0.8013761717231402), FX16_CONST(-0.5981607069963422),
+ FX16_CONST(0.8004576621926228), FX16_CONST(-0.5993892984005645),
+ FX16_CONST(0.7995372691079052), FX16_CONST(-0.6006164793838688),
+ FX16_CONST(0.7986149946347609), FX16_CONST(-0.60184224705858),
+ FX16_CONST(0.797690840943391), FX16_CONST(-0.6030665985403483),
+ FX16_CONST(0.7967648102084189), FX16_CONST(-0.6042895309481559),
+ FX16_CONST(0.7958369046088836), FX16_CONST(-0.6055110414043254),
+ FX16_CONST(0.7949071263282369), FX16_CONST(-0.6067311270345246),
+ FX16_CONST(0.7939754775543373), FX16_CONST(-0.6079497849677735),
+ FX16_CONST(0.7930419604794436), FX16_CONST(-0.6091670123364532),
+ FX16_CONST(0.7921065773002123), FX16_CONST(-0.6103828062763096),
+ FX16_CONST(0.7911693302176903), FX16_CONST(-0.6115971639264618),
+ FX16_CONST(0.79023022143731), FX16_CONST(-0.6128100824294097),
+ FX16_CONST(0.7892892531688859), FX16_CONST(-0.6140215589310382),
+ FX16_CONST(0.7883464276266063), FX16_CONST(-0.6152315905806267),
+ FX16_CONST(0.7874017470290313), FX16_CONST(-0.6164401745308536),
+ FX16_CONST(0.7864552135990859), FX16_CONST(-0.6176473079378038),
+ FX16_CONST(0.785506829564054), FX16_CONST(-0.6188529879609762),
+ FX16_CONST(0.7845565971555751), FX16_CONST(-0.6200572117632892),
+ FX16_CONST(0.7836045186096383), FX16_CONST(-0.6212599765110874),
+ FX16_CONST(0.7826505961665757), FX16_CONST(-0.62246127937415),
+ FX16_CONST(0.7816948320710593), FX16_CONST(-0.6236611175256946),
+ FX16_CONST(0.7807372285720946), FX16_CONST(-0.6248594881423862),
+ FX16_CONST(0.7797777879230144), FX16_CONST(-0.6260563884043435),
+ FX16_CONST(0.7788165123814761), FX16_CONST(-0.6272518154951439),
+ FX16_CONST(0.7778534042094531), FX16_CONST(-0.6284457666018326),
+ FX16_CONST(0.7768884656732324), FX16_CONST(-0.6296382389149271),
+ FX16_CONST(0.7759216990434078), FX16_CONST(-0.6308292296284244),
+ FX16_CONST(0.7749531065948739), FX16_CONST(-0.632018735939809),
+ FX16_CONST(0.7739826906068228), FX16_CONST(-0.6332067550500573),
+ FX16_CONST(0.7730104533627371), FX16_CONST(-0.6343932841636454),
+ FX16_CONST(0.7720363971503845), FX16_CONST(-0.6355783204885561),
+ FX16_CONST(0.7710605242618137), FX16_CONST(-0.6367618612362843),
+ FX16_CONST(0.7700828369933481), FX16_CONST(-0.6379439036218439),
+ FX16_CONST(0.7691033376455796), FX16_CONST(-0.6391244448637757),
+ FX16_CONST(0.7681220285233655), FX16_CONST(-0.6403034821841515),
+ FX16_CONST(0.7671389119358204), FX16_CONST(-0.641481012808583),
+ FX16_CONST(0.7661539901963128), FX16_CONST(-0.6426570339662269),
+ FX16_CONST(0.7651672656224591), FX16_CONST(-0.6438315428897913),
+ FX16_CONST(0.7641787405361168), FX16_CONST(-0.6450045368155439),
+ FX16_CONST(0.7631884172633812), FX16_CONST(-0.6461760129833164),
+ FX16_CONST(0.762196298134579), FX16_CONST(-0.647345968636512),
+ FX16_CONST(0.7612023854842619), FX16_CONST(-0.6485144010221124),
+ FX16_CONST(0.7602066816512023), FX16_CONST(-0.6496813073906833),
+ FX16_CONST(0.7592091889783881), FX16_CONST(-0.6508466849963808),
+ FX16_CONST(0.7582099098130153), FX16_CONST(-0.6520105310969595),
+ FX16_CONST(0.7572088465064847), FX16_CONST(-0.6531728429537765),
+ FX16_CONST(0.7562060014143945), FX16_CONST(-0.6543336178318004),
+ FX16_CONST(0.7552013768965364), FX16_CONST(-0.6554928529996155),
+ FX16_CONST(0.7541949753168893), FX16_CONST(-0.6566505457294288),
+ FX16_CONST(0.7531867990436125), FX16_CONST(-0.6578066932970785),
+ FX16_CONST(0.7521768504490427), FX16_CONST(-0.6589612929820374),
+ FX16_CONST(0.7511651319096866), FX16_CONST(-0.6601143420674204),
+ FX16_CONST(0.7501516458062151), FX16_CONST(-0.6612658378399922),
+ FX16_CONST(0.7491363945234593), FX16_CONST(-0.6624157775901719),
+ FX16_CONST(0.7481193804504037), FX16_CONST(-0.6635641586120397),
+ FX16_CONST(0.7471006059801801), FX16_CONST(-0.6647109782033449),
+ FX16_CONST(0.746080073510064), FX16_CONST(-0.6658562336655095),
+ FX16_CONST(0.7450577854414661), FX16_CONST(-0.6669999223036374),
+ FX16_CONST(0.7440337441799292), FX16_CONST(-0.6681420414265186),
+ FX16_CONST(0.7430079521351218), FX16_CONST(-0.6692825883466359),
+ FX16_CONST(0.7419804117208311), FX16_CONST(-0.6704215603801731),
+ FX16_CONST(0.740951125354959), FX16_CONST(-0.6715589548470184),
+ FX16_CONST(0.7399200954595163), FX16_CONST(-0.6726947690707727),
+ FX16_CONST(0.7388873244606152), FX16_CONST(-0.673829000378756),
+ FX16_CONST(0.7378528147884659), FX16_CONST(-0.674961646102012),
+ FX16_CONST(0.73681656887737), FX16_CONST(-0.6760927035753158),
+ FX16_CONST(0.7357785891657136), FX16_CONST(-0.6772221701371804),
+ FX16_CONST(0.7347388780959637), FX16_CONST(-0.6783500431298612),
+ FX16_CONST(0.7336974381146604), FX16_CONST(-0.679476319899365),
+ FX16_CONST(0.7326542716724128), FX16_CONST(-0.680600997795453),
+ FX16_CONST(0.7316093812238927), FX16_CONST(-0.6817240741716496),
+ FX16_CONST(0.7305627692278276), FX16_CONST(-0.682845546385248),
+ FX16_CONST(0.729514438146997), FX16_CONST(-0.6839654117973155),
+ FX16_CONST(0.7284643904482253), FX16_CONST(-0.6850836677727002),
+ FX16_CONST(0.7274126286023758), FX16_CONST(-0.6862003116800386),
+ FX16_CONST(0.7263591550843459), FX16_CONST(-0.6873153408917592),
+ FX16_CONST(0.7253039723730609), FX16_CONST(-0.6884287527840903),
+ FX16_CONST(0.7242470829514669), FX16_CONST(-0.6895405447370669),
+ FX16_CONST(0.7231884893065276), FX16_CONST(-0.6906507141345344),
+ FX16_CONST(0.7221281939292155), FX16_CONST(-0.6917592583641576),
+ FX16_CONST(0.7210661993145081), FX16_CONST(-0.6928661748174247),
+ FX16_CONST(0.7200025079613818), FX16_CONST(-0.6939714608896538),
+ FX16_CONST(0.7189371223728045), FX16_CONST(-0.6950751139800008),
+ FX16_CONST(0.7178700450557317), FX16_CONST(-0.696177131491463),
+ FX16_CONST(0.7168012785210996), FX16_CONST(-0.6972775108308864),
+ FX16_CONST(0.7157308252838187), FX16_CONST(-0.6983762494089728),
+ FX16_CONST(0.714658687862769), FX16_CONST(-0.6994733446402839),
+ FX16_CONST(0.7135848687807936), FX16_CONST(-0.7005687939432482),
+ FX16_CONST(0.7125093705646923), FX16_CONST(-0.7016625947401685),
+ FX16_CONST(0.7114321957452167), FX16_CONST(-0.7027547444572251),
+ FX16_CONST(0.7103533468570624), FX16_CONST(-0.7038452405244848),
+ FX16_CONST(0.7092728264388656), FX16_CONST(-0.7049340803759049),
+ FX16_CONST(0.7081906370331955), FX16_CONST(-0.7060212614493396),
+ FX16_CONST(0.7071067811865476), FX16_CONST(-0.7071067811865475),
+ FX16_CONST(0.7060212614493397), FX16_CONST(-0.7081906370331954),
+ FX16_CONST(0.7049340803759051), FX16_CONST(-0.7092728264388655),
+ FX16_CONST(0.703845240524485), FX16_CONST(-0.7103533468570623),
+ FX16_CONST(0.7027547444572252), FX16_CONST(-0.7114321957452165),
+ FX16_CONST(0.7016625947401687), FX16_CONST(-0.7125093705646922),
+ FX16_CONST(0.7005687939432483), FX16_CONST(-0.7135848687807935),
+ FX16_CONST(0.699473344640284), FX16_CONST(-0.7146586878627689),
+ FX16_CONST(0.6983762494089729), FX16_CONST(-0.7157308252838186),
+ FX16_CONST(0.6972775108308865), FX16_CONST(-0.7168012785210995),
+ FX16_CONST(0.6961771314914631), FX16_CONST(-0.7178700450557316),
+ FX16_CONST(0.6950751139800009), FX16_CONST(-0.7189371223728044),
+ FX16_CONST(0.6939714608896539), FX16_CONST(-0.7200025079613817),
+ FX16_CONST(0.6928661748174249), FX16_CONST(-0.7210661993145079),
+ FX16_CONST(0.6917592583641579), FX16_CONST(-0.7221281939292152),
+ FX16_CONST(0.6906507141345346), FX16_CONST(-0.7231884893065275),
+ FX16_CONST(0.689540544737067), FX16_CONST(-0.7242470829514668),
+ FX16_CONST(0.6884287527840904), FX16_CONST(-0.7253039723730608),
+ FX16_CONST(0.6873153408917593), FX16_CONST(-0.7263591550843458),
+ FX16_CONST(0.6862003116800387), FX16_CONST(-0.7274126286023757),
+ FX16_CONST(0.6850836677727004), FX16_CONST(-0.7284643904482252),
+ FX16_CONST(0.6839654117973156), FX16_CONST(-0.7295144381469968),
+ FX16_CONST(0.6828455463852481), FX16_CONST(-0.7305627692278275),
+ FX16_CONST(0.6817240741716497), FX16_CONST(-0.7316093812238926),
+ FX16_CONST(0.6806009977954532), FX16_CONST(-0.7326542716724127),
+ FX16_CONST(0.6794763198993651), FX16_CONST(-0.7336974381146603),
+ FX16_CONST(0.6783500431298614), FX16_CONST(-0.7347388780959635),
+ FX16_CONST(0.6772221701371806), FX16_CONST(-0.7357785891657134),
+ FX16_CONST(0.6760927035753159), FX16_CONST(-0.7368165688773698),
+ FX16_CONST(0.6749616461020123), FX16_CONST(-0.7378528147884658),
+ FX16_CONST(0.6738290003787561), FX16_CONST(-0.7388873244606151),
+ FX16_CONST(0.6726947690707729), FX16_CONST(-0.7399200954595162),
+ FX16_CONST(0.6715589548470186), FX16_CONST(-0.7409511253549589),
+ FX16_CONST(0.6704215603801732), FX16_CONST(-0.741980411720831),
+ FX16_CONST(0.669282588346636), FX16_CONST(-0.7430079521351217),
+ FX16_CONST(0.6681420414265187), FX16_CONST(-0.7440337441799291),
+ FX16_CONST(0.6669999223036376), FX16_CONST(-0.745057785441466),
+ FX16_CONST(0.6658562336655096), FX16_CONST(-0.7460800735100638),
+ FX16_CONST(0.664710978203345), FX16_CONST(-0.74710060598018),
+ FX16_CONST(0.6635641586120398), FX16_CONST(-0.7481193804504036),
+ FX16_CONST(0.662415777590172), FX16_CONST(-0.7491363945234591),
+ FX16_CONST(0.6612658378399923), FX16_CONST(-0.750151645806215),
+ FX16_CONST(0.6601143420674205), FX16_CONST(-0.7511651319096864),
+ FX16_CONST(0.6589612929820375), FX16_CONST(-0.7521768504490425),
+ FX16_CONST(0.6578066932970787), FX16_CONST(-0.7531867990436124),
+ FX16_CONST(0.656650545729429), FX16_CONST(-0.7541949753168892),
+ FX16_CONST(0.6554928529996156), FX16_CONST(-0.7552013768965364),
+ FX16_CONST(0.6543336178318006), FX16_CONST(-0.7562060014143945),
+ FX16_CONST(0.6531728429537766), FX16_CONST(-0.7572088465064847),
+ FX16_CONST(0.6520105310969597), FX16_CONST(-0.7582099098130152),
+ FX16_CONST(0.650846684996381), FX16_CONST(-0.759209188978388),
+ FX16_CONST(0.6496813073906834), FX16_CONST(-0.7602066816512022),
+ FX16_CONST(0.6485144010221126), FX16_CONST(-0.7612023854842617),
+ FX16_CONST(0.6473459686365121), FX16_CONST(-0.7621962981345789),
+ FX16_CONST(0.6461760129833166), FX16_CONST(-0.7631884172633812),
+ FX16_CONST(0.645004536815544), FX16_CONST(-0.7641787405361167),
+ FX16_CONST(0.6438315428897914), FX16_CONST(-0.765167265622459),
+ FX16_CONST(0.6426570339662271), FX16_CONST(-0.7661539901963128),
+ FX16_CONST(0.6414810128085832), FX16_CONST(-0.7671389119358204),
+ FX16_CONST(0.6403034821841516), FX16_CONST(-0.7681220285233654),
+ FX16_CONST(0.6391244448637758), FX16_CONST(-0.7691033376455795),
+ FX16_CONST(0.637943903621844), FX16_CONST(-0.7700828369933479),
+ FX16_CONST(0.6367618612362844), FX16_CONST(-0.7710605242618136),
+ FX16_CONST(0.6355783204885562), FX16_CONST(-0.7720363971503844),
+ FX16_CONST(0.6343932841636455), FX16_CONST(-0.773010453362737),
+ FX16_CONST(0.6332067550500574), FX16_CONST(-0.7739826906068227),
+ FX16_CONST(0.6320187359398091), FX16_CONST(-0.7749531065948738),
+ FX16_CONST(0.6308292296284245), FX16_CONST(-0.7759216990434077),
+ FX16_CONST(0.6296382389149272), FX16_CONST(-0.7768884656732323),
+ FX16_CONST(0.6284457666018327), FX16_CONST(-0.777853404209453),
+ FX16_CONST(0.6272518154951441), FX16_CONST(-0.778816512381476),
+ FX16_CONST(0.6260563884043436), FX16_CONST(-0.7797777879230143),
+ FX16_CONST(0.6248594881423863), FX16_CONST(-0.7807372285720945),
+ FX16_CONST(0.6236611175256949), FX16_CONST(-0.7816948320710593),
+ FX16_CONST(0.6224612793741501), FX16_CONST(-0.7826505961665756),
+ FX16_CONST(0.6212599765110876), FX16_CONST(-0.7836045186096382),
+ FX16_CONST(0.6200572117632894), FX16_CONST(-0.784556597155575),
+ FX16_CONST(0.6188529879609764), FX16_CONST(-0.7855068295640539),
+ FX16_CONST(0.6176473079378039), FX16_CONST(-0.7864552135990858),
+ FX16_CONST(0.6164401745308538), FX16_CONST(-0.7874017470290312),
+ FX16_CONST(0.6152315905806269), FX16_CONST(-0.7883464276266062),
+ FX16_CONST(0.6140215589310384), FX16_CONST(-0.7892892531688858),
+ FX16_CONST(0.6128100824294098), FX16_CONST(-0.7902302214373099),
+ FX16_CONST(0.6115971639264619), FX16_CONST(-0.7911693302176902),
+ FX16_CONST(0.6103828062763097), FX16_CONST(-0.7921065773002122),
+ FX16_CONST(0.6091670123364533), FX16_CONST(-0.7930419604794436),
+ FX16_CONST(0.6079497849677736), FX16_CONST(-0.7939754775543372),
+ FX16_CONST(0.6067311270345247), FX16_CONST(-0.7949071263282368),
+ FX16_CONST(0.6055110414043257), FX16_CONST(-0.7958369046088835),
+ FX16_CONST(0.604289530948156), FX16_CONST(-0.7967648102084187),
+ FX16_CONST(0.6030665985403484), FX16_CONST(-0.7976908409433909),
+ FX16_CONST(0.6018422470585801), FX16_CONST(-0.7986149946347608),
+ FX16_CONST(0.6006164793838689), FX16_CONST(-0.7995372691079051),
+ FX16_CONST(0.5993892984005647), FX16_CONST(-0.8004576621926226),
+ FX16_CONST(0.5981607069963424), FX16_CONST(-0.8013761717231402),
+ FX16_CONST(0.5969307080621967), FX16_CONST(-0.8022927955381155),
+ FX16_CONST(0.5956993044924335), FX16_CONST(-0.8032075314806448),
+ FX16_CONST(0.5944664991846644), FX16_CONST(-0.8041203773982657),
+ FX16_CONST(0.5932322950398), FX16_CONST(-0.8050313311429634),
+ FX16_CONST(0.591996694962041), FX16_CONST(-0.8059403905711763),
+ FX16_CONST(0.5907597018588742), FX16_CONST(-0.8068475535437993),
+ FX16_CONST(0.589521318641064), FX16_CONST(-0.8077528179261902),
+ FX16_CONST(0.5882815482226453), FX16_CONST(-0.808656181588175),
+ FX16_CONST(0.5870403935209179), FX16_CONST(-0.8095576424040514),
+ FX16_CONST(0.585797857456439), FX16_CONST(-0.8104571982525947),
+ FX16_CONST(0.5845539429530153), FX16_CONST(-0.8113548470170637),
+ FX16_CONST(0.5833086529376985), FX16_CONST(-0.8122505865852038),
+ FX16_CONST(0.5820619903407757), FX16_CONST(-0.8131444148492535),
+ FX16_CONST(0.5808139580957645), FX16_CONST(-0.8140363297059484),
+ FX16_CONST(0.579564559139406), FX16_CONST(-0.8149263290565264),
+ FX16_CONST(0.5783137964116557), FX16_CONST(-0.8158144108067338),
+ FX16_CONST(0.5770616728556794), FX16_CONST(-0.8167005728668278),
+ FX16_CONST(0.5758081914178454), FX16_CONST(-0.8175848131515836),
+ FX16_CONST(0.5745533550477159), FX16_CONST(-0.8184671295802987),
+ FX16_CONST(0.5732971666980421), FX16_CONST(-0.819347520076797),
+ FX16_CONST(0.5720396293247573), FX16_CONST(-0.8202259825694346),
+ FX16_CONST(0.5707807458869673), FX16_CONST(-0.8211025149911046),
+ FX16_CONST(0.5695205193469475), FX16_CONST(-0.8219771152792413),
+ FX16_CONST(0.5682589526701317), FX16_CONST(-0.8228497813758262),
+ FX16_CONST(0.5669960488251087), FX16_CONST(-0.8237205112273914),
+ FX16_CONST(0.5657318107836135), FX16_CONST(-0.8245893027850251),
+ FX16_CONST(0.5644662415205195), FX16_CONST(-0.8254561540043774),
+ FX16_CONST(0.5631993440138341), FX16_CONST(-0.8263210628456635),
+ FX16_CONST(0.5619311212446896), FX16_CONST(-0.827184027273669),
+ FX16_CONST(0.5606615761973361), FX16_CONST(-0.8280450452577557),
+ FX16_CONST(0.559390711859136), FX16_CONST(-0.828904114771865),
+ FX16_CONST(0.5581185312205563), FX16_CONST(-0.8297612337945229),
+ FX16_CONST(0.5568450372751601), FX16_CONST(-0.8306164003088462),
+ FX16_CONST(0.5555702330196022), FX16_CONST(-0.8314696123025453),
+ FX16_CONST(0.5542941214536202), FX16_CONST(-0.8323208677679296),
+ FX16_CONST(0.5530167055800275), FX16_CONST(-0.8331701647019132),
+ FX16_CONST(0.5517379884047077), FX16_CONST(-0.8340175011060179),
+ FX16_CONST(0.5504579729366049), FX16_CONST(-0.83486287498638),
+ FX16_CONST(0.5491766621877197), FX16_CONST(-0.8357062843537526),
+ FX16_CONST(0.5478940591731004), FX16_CONST(-0.8365477272235119),
+ FX16_CONST(0.546610166910835), FX16_CONST(-0.8373872016156618),
+ FX16_CONST(0.5453249884220464), FX16_CONST(-0.8382247055548381),
+ FX16_CONST(0.544038526730884), FX16_CONST(-0.8390602370703126),
+ FX16_CONST(0.5427507848645159), FX16_CONST(-0.8398937941959995),
+ FX16_CONST(0.5414617658531233), FX16_CONST(-0.8407253749704581),
+ FX16_CONST(0.540171472729893), FX16_CONST(-0.8415549774368983),
+ FX16_CONST(0.5388799085310084), FX16_CONST(-0.8423825996431858),
+ FX16_CONST(0.5375870762956457), FX16_CONST(-0.8432082396418453),
+ FX16_CONST(0.5362929790659633), FX16_CONST(-0.8440318954900664),
+ FX16_CONST(0.5349976198870972), FX16_CONST(-0.8448535652497071),
+ FX16_CONST(0.5337010018071532), FX16_CONST(-0.845673246987299),
+ FX16_CONST(0.532403127877198), FX16_CONST(-0.846490938774052),
+ FX16_CONST(0.5311040011512549), FX16_CONST(-0.8473066386858584),
+ FX16_CONST(0.5298036246862948), FX16_CONST(-0.8481203448032971),
+ FX16_CONST(0.5285020015422285), FX16_CONST(-0.8489320552116396),
+ FX16_CONST(0.5271991347819013), FX16_CONST(-0.8497417680008525),
+ FX16_CONST(0.5258950274710849), FX16_CONST(-0.8505494812656034),
+ FX16_CONST(0.524589682678469), FX16_CONST(-0.8513551931052652),
+ FX16_CONST(0.5232831034756567), FX16_CONST(-0.8521589016239196),
+ FX16_CONST(0.5219752929371544), FX16_CONST(-0.8529606049303636),
+ FX16_CONST(0.5206662541403672), FX16_CONST(-0.8537603011381114),
+ FX16_CONST(0.5193559901655898), FX16_CONST(-0.8545579883654004),
+ FX16_CONST(0.5180445040959994), FX16_CONST(-0.8553536647351959),
+ FX16_CONST(0.5167317990176498), FX16_CONST(-0.8561473283751945),
+ FX16_CONST(0.5154178780194631), FX16_CONST(-0.8569389774178287),
+ FX16_CONST(0.5141027441932218), FX16_CONST(-0.857728610000272),
+ FX16_CONST(0.512786400633563), FX16_CONST(-0.8585162242644429),
+ FX16_CONST(0.5114688504379705), FX16_CONST(-0.8593018183570084),
+ FX16_CONST(0.5101500967067668), FX16_CONST(-0.8600853904293901),
+ FX16_CONST(0.5088301425431073), FX16_CONST(-0.8608669386377672),
+ FX16_CONST(0.507508991052971), FX16_CONST(-0.8616464611430813),
+ FX16_CONST(0.5061866453451552), FX16_CONST(-0.8624239561110405),
+ FX16_CONST(0.5048631085312677), FX16_CONST(-0.863199421712124),
+ FX16_CONST(0.5035383837257176), FX16_CONST(-0.8639728561215867),
+ FX16_CONST(0.5022124740457107), FX16_CONST(-0.8647442575194624),
+ FX16_CONST(0.5008853826112409), FX16_CONST(-0.865513624090569),
+ FX16_CONST(0.4995571125450819), FX16_CONST(-0.866280954024513),
+ FX16_CONST(0.49822766697278176), FX16_CONST(-0.8670462455156926),
+ FX16_CONST(0.4968970490226547), FX16_CONST(-0.8678094967633032),
+ FX16_CONST(0.49556526182577254), FX16_CONST(-0.8685707059713409),
+ FX16_CONST(0.49423230851596), FX16_CONST(-0.8693298713486066),
+ FX16_CONST(0.49289819222978415), FX16_CONST(-0.8700869911087113),
+ FX16_CONST(0.4915629161065499), FX16_CONST(-0.8708420634700789),
+ FX16_CONST(0.4902264832882914), FX16_CONST(-0.8715950866559509),
+ FX16_CONST(0.4888888969197632), FX16_CONST(-0.8723460588943914),
+ FX16_CONST(0.4875501601484359), FX16_CONST(-0.8730949784182901),
+ FX16_CONST(0.4862102761244866), FX16_CONST(-0.8738418434653668),
+ FX16_CONST(0.4848692480007911), FX16_CONST(-0.8745866522781761),
+ FX16_CONST(0.48352707893291863), FX16_CONST(-0.8753294031041109),
+ FX16_CONST(0.4821837720791229), FX16_CONST(-0.8760700941954065),
+ FX16_CONST(0.48083933060033396), FX16_CONST(-0.8768087238091457),
+ FX16_CONST(0.4794937576601533), FX16_CONST(-0.8775452902072611),
+ FX16_CONST(0.4781470564248432), FX16_CONST(-0.8782797916565415),
+ FX16_CONST(0.4767992300633221), FX16_CONST(-0.8790122264286335),
+ FX16_CONST(0.4754502817471561), FX16_CONST(-0.8797425928000473),
+ FX16_CONST(0.4741002146505501), FX16_CONST(-0.8804708890521608),
+ FX16_CONST(0.47274903195034274), FX16_CONST(-0.8811971134712221),
+ FX16_CONST(0.4713967368259978), FX16_CONST(-0.8819212643483549),
+ FX16_CONST(0.4700433324595957), FX16_CONST(-0.8826433399795628),
+ FX16_CONST(0.46868882203582785), FX16_CONST(-0.8833633386657317),
+ FX16_CONST(0.4673332087419886), FX16_CONST(-0.8840812587126349),
+ FX16_CONST(0.4659764957679662), FX16_CONST(-0.8847970984309378),
+ FX16_CONST(0.4646186863062381), FX16_CONST(-0.8855108561361998),
+ FX16_CONST(0.4632597835518603), FX16_CONST(-0.8862225301488805),
+ FX16_CONST(0.46189979070246273), FX16_CONST(-0.8869321187943422),
+ FX16_CONST(0.4605387109582402), FX16_CONST(-0.8876396204028538),
+ FX16_CONST(0.4591765475219442), FX16_CONST(-0.8883450333095962),
+ FX16_CONST(0.4578133035988772), FX16_CONST(-0.8890483558546646),
+ FX16_CONST(0.45644898239688414), FX16_CONST(-0.8897495863830727),
+ FX16_CONST(0.4550835871263439), FX16_CONST(-0.8904487232447579),
+ FX16_CONST(0.45371712100016376), FX16_CONST(-0.8911457647945833),
+ FX16_CONST(0.45234958723377106), FX16_CONST(-0.8918407093923426),
+ FX16_CONST(0.45098098904510386), FX16_CONST(-0.8925335554027646),
+ FX16_CONST(0.4496113296546069), FX16_CONST(-0.8932243011955152),
+ FX16_CONST(0.44824061228522005), FX16_CONST(-0.8939129451452031),
+ FX16_CONST(0.44686884016237416), FX16_CONST(-0.8945994856313827),
+ FX16_CONST(0.44549601651398196), FX16_CONST(-0.8952839210385574),
+ FX16_CONST(0.4441221445704293), FX16_CONST(-0.8959662497561851),
+ FX16_CONST(0.44274722756456997), FX16_CONST(-0.8966464701786803),
+ FX16_CONST(0.4413712687317169), FX16_CONST(-0.8973245807054182),
+ FX16_CONST(0.4399942713096333), FX16_CONST(-0.8980005797407398),
+ FX16_CONST(0.43861623853852755), FX16_CONST(-0.8986744656939539),
+ FX16_CONST(0.43723717366104425), FX16_CONST(-0.8993462369793415),
+ FX16_CONST(0.43585707992225553), FX16_CONST(-0.9000158920161602),
+ FX16_CONST(0.434475960569656), FX16_CONST(-0.9006834292286467),
+ FX16_CONST(0.43309381885315207), FX16_CONST(-0.9013488470460219),
+ FX16_CONST(0.43171065802505726), FX16_CONST(-0.9020121439024932),
+ FX16_CONST(0.4303264813400829), FX16_CONST(-0.9026733182372587),
+ FX16_CONST(0.4289412920553296), FX16_CONST(-0.9033323684945118),
+ FX16_CONST(0.42755509343028203), FX16_CONST(-0.9039892931234433),
+ FX16_CONST(0.42616788872679984), FX16_CONST(-0.9046440905782461),
+ FX16_CONST(0.42477968120910886), FX16_CONST(-0.9052967593181187),
+ FX16_CONST(0.42339047414379594), FX16_CONST(-0.9059472978072685),
+ FX16_CONST(0.42200027079979985), FX16_CONST(-0.9065957045149153),
+ FX16_CONST(0.42060907444840256), FX16_CONST(-0.9072419779152958),
+ FX16_CONST(0.41921688836322424), FX16_CONST(-0.907886116487666),
+ FX16_CONST(0.41782371582021244), FX16_CONST(-0.9085281187163061),
+ FX16_CONST(0.41642956009763715), FX16_CONST(-0.9091679830905224),
+ FX16_CONST(0.41503442447608185), FX16_CONST(-0.9098057081046521),
+ FX16_CONST(0.41363831223843467), FX16_CONST(-0.9104412922580671),
+ FX16_CONST(0.41224122666988283), FX16_CONST(-0.9110747340551764),
+ FX16_CONST(0.41084317105790413), FX16_CONST(-0.9117060320054298),
+ FX16_CONST(0.4094441486922577), FX16_CONST(-0.9123351846233227),
+ FX16_CONST(0.4080441628649786), FX16_CONST(-0.9129621904283982),
+ FX16_CONST(0.4066432168703692), FX16_CONST(-0.9135870479452507),
+ FX16_CONST(0.4052413140049899), FX16_CONST(-0.9142097557035307),
+ FX16_CONST(0.4038384575676544), FX16_CONST(-0.914830312237946),
+ FX16_CONST(0.4024346508594186), FX16_CONST(-0.9154487160882677),
+ FX16_CONST(0.4010298971835756), FX16_CONST(-0.9160649657993317),
+ FX16_CONST(0.39962419984564707), FX16_CONST(-0.9166790599210426),
+ FX16_CONST(0.39821756215337367), FX16_CONST(-0.9172909970083779),
+ FX16_CONST(0.39680998741671025), FX16_CONST(-0.9179007756213905),
+ FX16_CONST(0.3954014789478165), FX16_CONST(-0.9185083943252121),
+ FX16_CONST(0.39399204006104815), FX16_CONST(-0.9191138516900578),
+ FX16_CONST(0.3925816740729514), FX16_CONST(-0.9197171462912274),
+ FX16_CONST(0.39117038430225404), FX16_CONST(-0.9203182767091105),
+ FX16_CONST(0.38975817406985647), FX16_CONST(-0.9209172415291894),
+ FX16_CONST(0.3883450466988266), FX16_CONST(-0.9215140393420418),
+ FX16_CONST(0.38693100551438875), FX16_CONST(-0.9221086687433451),
+ FX16_CONST(0.38551605384391885), FX16_CONST(-0.9227011283338786),
+ FX16_CONST(0.3841001950169353), FX16_CONST(-0.9232914167195275),
+ FX16_CONST(0.3826834323650899), FX16_CONST(-0.9238795325112867),
+ FX16_CONST(0.3812657692221623), FX16_CONST(-0.9244654743252626),
+ FX16_CONST(0.3798472089240514), FX16_CONST(-0.9250492407826775),
+ FX16_CONST(0.37842775480876567), FX16_CONST(-0.9256308305098727),
+ FX16_CONST(0.37700741021641815), FX16_CONST(-0.9262102421383114),
+ FX16_CONST(0.3755861784892174), FX16_CONST(-0.9267874743045817),
+ FX16_CONST(0.37416406297145804), FX16_CONST(-0.9273625256504011),
+ FX16_CONST(0.3727410670095161), FX16_CONST(-0.9279353948226178),
+ FX16_CONST(0.3713171939518377), FX16_CONST(-0.9285060804732155),
+ FX16_CONST(0.3698924471489341), FX16_CONST(-0.9290745812593159),
+ FX16_CONST(0.3684668299533726), FX16_CONST(-0.9296408958431812),
+ FX16_CONST(0.3670403457197673), FX16_CONST(-0.9302050228922191),
+ FX16_CONST(0.3656129978047738), FX16_CONST(-0.9307669610789837),
+ FX16_CONST(0.3641847895670801), FX16_CONST(-0.9313267090811803),
+ FX16_CONST(0.3627557243673973), FX16_CONST(-0.931884265581668),
+ FX16_CONST(0.3613258055684542), FX16_CONST(-0.9324396292684625),
+ FX16_CONST(0.35989503653498833), FX16_CONST(-0.9329927988347388),
+ FX16_CONST(0.3584634206337366), FX16_CONST(-0.9335437729788362),
+ FX16_CONST(0.3570309612334303), FX16_CONST(-0.9340925504042588),
+ FX16_CONST(0.355597661704784), FX16_CONST(-0.9346391298196807),
+ FX16_CONST(0.3541635254204904), FX16_CONST(-0.9351835099389476),
+ FX16_CONST(0.35272855575521095), FX16_CONST(-0.9357256894810803),
+ FX16_CONST(0.3512927560855672), FX16_CONST(-0.9362656671702783),
+ FX16_CONST(0.34985612979013486), FX16_CONST(-0.9368034417359217),
+ FX16_CONST(0.3484186802494348), FX16_CONST(-0.9373390119125748),
+ FX16_CONST(0.34698041084592374), FX16_CONST(-0.9378723764399898),
+ FX16_CONST(0.345541324963989), FX16_CONST(-0.9384035340631082),
+ FX16_CONST(0.34410142598993904), FX16_CONST(-0.9389324835320645),
+ FX16_CONST(0.34266071731199443), FX16_CONST(-0.9394592236021899),
+ FX16_CONST(0.3412192023202827), FX16_CONST(-0.9399837530340138),
+ FX16_CONST(0.339776884406827), FX16_CONST(-0.9405060705932683),
+ FX16_CONST(0.3383337669655412), FX16_CONST(-0.9410261750508893),
+ FX16_CONST(0.33688985339222033), FX16_CONST(-0.9415440651830207),
+ FX16_CONST(0.3354451470845317), FX16_CONST(-0.9420597397710173),
+ FX16_CONST(0.3339996514420094), FX16_CONST(-0.9425731976014469),
+ FX16_CONST(0.33255336986604445), FX16_CONST(-0.9430844374660934),
+ FX16_CONST(0.3311063057598765), FX16_CONST(-0.9435934581619604),
+ FX16_CONST(0.32965846252858744), FX16_CONST(-0.9441002584912727),
+ FX16_CONST(0.3282098435790927), FX16_CONST(-0.9446048372614801),
+ FX16_CONST(0.32676045232013184), FX16_CONST(-0.9451071932852606),
+ FX16_CONST(0.32531029216226326), FX16_CONST(-0.9456073253805212),
+ FX16_CONST(0.323859366517853), FX16_CONST(-0.9461052323704033),
+ FX16_CONST(0.32240767880106985), FX16_CONST(-0.9466009130832835),
+ FX16_CONST(0.3209552324278755), FX16_CONST(-0.9470943663527771),
+ FX16_CONST(0.3195020308160158), FX16_CONST(-0.9475855910177411),
+ FX16_CONST(0.3180480773850149), FX16_CONST(-0.9480745859222762),
+ FX16_CONST(0.31659337555616607), FX16_CONST(-0.9485613499157303),
+ FX16_CONST(0.3151379287525225), FX16_CONST(-0.9490458818527006),
+ FX16_CONST(0.3136817403988914), FX16_CONST(-0.9495281805930367),
+ FX16_CONST(0.3122248139218251), FX16_CONST(-0.950008245001843),
+ FX16_CONST(0.31076715274961153), FX16_CONST(-0.9504860739494817),
+ FX16_CONST(0.309308760312269), FX16_CONST(-0.950961666311575),
+ FX16_CONST(0.30784964004153503), FX16_CONST(-0.9514350209690083),
+ FX16_CONST(0.3063897953708609), FX16_CONST(-0.9519061368079323),
+ FX16_CONST(0.30492922973540265), FX16_CONST(-0.9523750127197658),
+ FX16_CONST(0.3034679465720114), FX16_CONST(-0.9528416476011986),
+ FX16_CONST(0.30200594931922803), FX16_CONST(-0.9533060403541939),
+ FX16_CONST(0.3005432414172737), FX16_CONST(-0.9537681898859902),
+ FX16_CONST(0.29907982630804053), FX16_CONST(-0.9542280951091056),
+ FX16_CONST(0.29761570743508614), FX16_CONST(-0.9546857549413383),
+ FX16_CONST(0.296150888243624), FX16_CONST(-0.9551411683057707),
+ FX16_CONST(0.2946853721805144), FX16_CONST(-0.9555943341307711),
+ FX16_CONST(0.29321916269425896), FX16_CONST(-0.9560452513499963),
+ FX16_CONST(0.29175226323498943), FX16_CONST(-0.956493918902395),
+ FX16_CONST(0.2902846772544624), FX16_CONST(-0.9569403357322088),
+ FX16_CONST(0.28881640820604976), FX16_CONST(-0.9573845007889759),
+ FX16_CONST(0.2873474595447296), FX16_CONST(-0.9578264130275329),
+ FX16_CONST(0.28587783472708056), FX16_CONST(-0.9582660714080177),
+ FX16_CONST(0.2844075372112721), FX16_CONST(-0.9587034748958715),
+ FX16_CONST(0.28293657045705545), FX16_CONST(-0.9591386224618419),
+ FX16_CONST(0.2814649379257579), FX16_CONST(-0.9595715130819845),
+ FX16_CONST(0.27999264308027344), FX16_CONST(-0.9600021457376658),
+ FX16_CONST(0.27851968938505317), FX16_CONST(-0.9604305194155658),
+ FX16_CONST(0.27704608030610023), FX16_CONST(-0.9608566331076795),
+ FX16_CONST(0.2755718193109583), FX16_CONST(-0.9612804858113206),
+ FX16_CONST(0.2740969098687064), FX16_CONST(-0.9617020765291225),
+ FX16_CONST(0.27262135544994925), FX16_CONST(-0.9621214042690415),
+ FX16_CONST(0.2711451595268081), FX16_CONST(-0.9625384680443592),
+ FX16_CONST(0.2696683255729151), FX16_CONST(-0.9629532668736839),
+ FX16_CONST(0.2681908570634034), FX16_CONST(-0.9633657997809539),
+ FX16_CONST(0.2667127574748985), FX16_CONST(-0.9637760657954398),
+ FX16_CONST(0.26523403028551173), FX16_CONST(-0.9641840639517458),
+ FX16_CONST(0.26375467897483157), FX16_CONST(-0.9645897932898126),
+ FX16_CONST(0.2622747070239137), FX16_CONST(-0.9649932528549203),
+ FX16_CONST(0.26079411791527585), FX16_CONST(-0.9653944416976893),
+ FX16_CONST(0.2593129151328864), FX16_CONST(-0.9657933588740836),
+ FX16_CONST(0.257831102162159), FX16_CONST(-0.9661900034454125),
+ FX16_CONST(0.2563486824899432), FX16_CONST(-0.966584374478333),
+ FX16_CONST(0.2548656596045147), FX16_CONST(-0.9669764710448521),
+ FX16_CONST(0.2533820369955701), FX16_CONST(-0.9673662922223285),
+ FX16_CONST(0.2518978181542172), FX16_CONST(-0.9677538370934754),
+ FX16_CONST(0.25041300657296534), FX16_CONST(-0.9681391047463623),
+ FX16_CONST(0.2489276057457201), FX16_CONST(-0.9685220942744174),
+ FX16_CONST(0.2474416191677735), FX16_CONST(-0.9689028047764289),
+ FX16_CONST(0.24595505033579465), FX16_CONST(-0.9692812353565484),
+ FX16_CONST(0.24446790274782448), FX16_CONST(-0.9696573851242923),
+ FX16_CONST(0.24298017990326407), FX16_CONST(-0.970031253194544),
+ FX16_CONST(0.24149188530286936), FX16_CONST(-0.9704028386875555),
+ FX16_CONST(0.24000302244874178), FX16_CONST(-0.9707721407289502),
+ FX16_CONST(0.23851359484431855), FX16_CONST(-0.9711391584497251),
+ FX16_CONST(0.23702360599436717), FX16_CONST(-0.9715038909862518),
+ FX16_CONST(0.23553305940497574), FX16_CONST(-0.9718663374802793),
+ FX16_CONST(0.2340419585835435), FX16_CONST(-0.9722264970789363),
+ FX16_CONST(0.23255030703877516), FX16_CONST(-0.9725843689347322),
+ FX16_CONST(0.23105810828067133), FX16_CONST(-0.9729399522055601),
+ FX16_CONST(0.22956536582051892), FX16_CONST(-0.9732932460546982),
+ FX16_CONST(0.22807208317088606), FX16_CONST(-0.9736442496508119),
+ FX16_CONST(0.22657826384561017), FX16_CONST(-0.9739929621679558),
+ FX16_CONST(0.22508391135979283), FX16_CONST(-0.9743393827855759),
+ FX16_CONST(0.2235890292297903), FX16_CONST(-0.9746835106885107),
+ FX16_CONST(0.22209362097320365), FX16_CONST(-0.9750253450669941),
+ FX16_CONST(0.2205976901088735), FX16_CONST(-0.975364885116657),
+ FX16_CONST(0.21910124015687005), FX16_CONST(-0.9757021300385285),
+ FX16_CONST(0.21760427463848372), FX16_CONST(-0.976037079039039),
+ FX16_CONST(0.21610679707621944), FX16_CONST(-0.9763697313300211),
+ FX16_CONST(0.21460881099378698), FX16_CONST(-0.9767000861287117),
+ FX16_CONST(0.21311031991609142), FX16_CONST(-0.9770281426577544),
+ FX16_CONST(0.2116113273692279), FX16_CONST(-0.9773539001452),
+ FX16_CONST(0.2101118368804698), FX16_CONST(-0.9776773578245099),
+ FX16_CONST(0.2086118519782635), FX16_CONST(-0.9779985149345571),
+ FX16_CONST(0.20711137619221884), FX16_CONST(-0.9783173707196275),
+ FX16_CONST(0.20561041305309938), FX16_CONST(-0.9786339244294231),
+ FX16_CONST(0.20410896609281684), FX16_CONST(-0.9789481753190622),
+ FX16_CONST(0.20260703884442138), FX16_CONST(-0.979260122649082),
+ FX16_CONST(0.201104634842092), FX16_CONST(-0.9795697656854405),
+ FX16_CONST(0.19960175762113092), FX16_CONST(-0.9798771036995176),
+ FX16_CONST(0.1980984107179538), FX16_CONST(-0.9801821359681173),
+ FX16_CONST(0.19659459767008028), FX16_CONST(-0.9804848617734694),
+ FX16_CONST(0.1950903220161286), FX16_CONST(-0.9807852804032304),
+ FX16_CONST(0.1935855872958038), FX16_CONST(-0.9810833911504866),
+ FX16_CONST(0.19208039704989247), FX16_CONST(-0.9813791933137546),
+ FX16_CONST(0.19057475482025307), FX16_CONST(-0.9816726861969831),
+ FX16_CONST(0.18906866414980636), FX16_CONST(-0.9819638691095552),
+ FX16_CONST(0.18756212858252957), FX16_CONST(-0.9822527413662894),
+ FX16_CONST(0.1860551516634469), FX16_CONST(-0.9825393022874412),
+ FX16_CONST(0.1845477369386197), FX16_CONST(-0.9828235511987052),
+ FX16_CONST(0.1830398879551409), FX16_CONST(-0.9831054874312163),
+ FX16_CONST(0.18153160826112522), FX16_CONST(-0.9833851103215512),
+ FX16_CONST(0.18002290140569957), FX16_CONST(-0.9836624192117303),
+ FX16_CONST(0.17851377093899742), FX16_CONST(-0.9839374134492189),
+ FX16_CONST(0.17700422041214894), FX16_CONST(-0.984210092386929),
+ FX16_CONST(0.17549425337727145), FX16_CONST(-0.9844804553832209),
+ FX16_CONST(0.17398387338746413), FX16_CONST(-0.9847485018019042),
+ FX16_CONST(0.17247308399679612), FX16_CONST(-0.9850142310122398),
+ FX16_CONST(0.17096188876030122), FX16_CONST(-0.9852776423889412),
+ FX16_CONST(0.1694502912339682), FX16_CONST(-0.9855387353121761),
+ FX16_CONST(0.16793829497473128), FX16_CONST(-0.9857975091675674),
+ FX16_CONST(0.16642590354046405), FX16_CONST(-0.9860539633461954),
+ FX16_CONST(0.16491312048997014), FX16_CONST(-0.9863080972445986),
+ FX16_CONST(0.16339994938297328), FX16_CONST(-0.9865599102647754),
+ FX16_CONST(0.16188639378011174), FX16_CONST(-0.9868094018141855),
+ FX16_CONST(0.16037245724292845), FX16_CONST(-0.987056571305751),
+ FX16_CONST(0.15885814333386147), FX16_CONST(-0.9873014181578584),
+ FX16_CONST(0.15734345561623855), FX16_CONST(-0.9875439417943592),
+ FX16_CONST(0.15582839765426537), FX16_CONST(-0.9877841416445722),
+ FX16_CONST(0.15431297301302008), FX16_CONST(-0.9880220171432835),
+ FX16_CONST(0.15279718525844369), FX16_CONST(-0.9882575677307495),
+ FX16_CONST(0.1512810379573303), FX16_CONST(-0.9884907928526966),
+ FX16_CONST(0.14976453467732145), FX16_CONST(-0.9887216919603238),
+ FX16_CONST(0.14824767898689625), FX16_CONST(-0.988950264510303),
+ FX16_CONST(0.1467304744553618), FX16_CONST(-0.989176509964781),
+ FX16_CONST(0.14521292465284735), FX16_CONST(-0.9894004277913804),
+ FX16_CONST(0.14369503315029464), FX16_CONST(-0.9896220174632008),
+ FX16_CONST(0.1421768035194481), FX16_CONST(-0.9898412784588205),
+ FX16_CONST(0.14065823933284954), FX16_CONST(-0.990058210262297),
+ FX16_CONST(0.13913934416382634), FX16_CONST(-0.9902728123631691),
+ FX16_CONST(0.13762012158648604), FX16_CONST(-0.9904850842564571),
+ FX16_CONST(0.13610057517570648), FX16_CONST(-0.9906950254426646),
+ FX16_CONST(0.13458070850712628), FX16_CONST(-0.99090263542778),
+ FX16_CONST(0.133060525157139), FX16_CONST(-0.9911079137232769),
+ FX16_CONST(0.13154002870288334), FX16_CONST(-0.9913108598461154),
+ FX16_CONST(0.13001922272223343), FX16_CONST(-0.9915114733187439),
+ FX16_CONST(0.12849811079379309), FX16_CONST(-0.9917097536690995),
+ FX16_CONST(0.12697669649688606), FX16_CONST(-0.9919057004306093),
+ FX16_CONST(0.12545498341154626), FX16_CONST(-0.9920993131421918),
+ FX16_CONST(0.12393297511851248), FX16_CONST(-0.9922905913482573),
+ FX16_CONST(0.12241067519921635), FX16_CONST(-0.99247953459871),
+ FX16_CONST(0.12088808723577706), FX16_CONST(-0.992666142448948),
+ FX16_CONST(0.11936521481099163), FX16_CONST(-0.9928504144598651),
+ FX16_CONST(0.11784206150832509), FX16_CONST(-0.9930323501978514),
+ FX16_CONST(0.11631863091190471), FX16_CONST(-0.9932119492347945),
+ FX16_CONST(0.1147949266065103), FX16_CONST(-0.9933892111480807),
+ FX16_CONST(0.11327095217756442), FX16_CONST(-0.9935641355205953),
+ FX16_CONST(0.1117467112111265), FX16_CONST(-0.9937367219407246),
+ FX16_CONST(0.11022220729388324), FX16_CONST(-0.9939069700023561),
+ FX16_CONST(0.10869744401313874), FX16_CONST(-0.9940748793048794),
+ FX16_CONST(0.10717242495680916), FX16_CONST(-0.9942404494531879),
+ FX16_CONST(0.10564715371341075), FX16_CONST(-0.9944036800576791),
+ FX16_CONST(0.10412163387205457), FX16_CONST(-0.9945645707342554),
+ FX16_CONST(0.10259586902243656), FX16_CONST(-0.9947231211043257),
+ FX16_CONST(0.10106986275482793), FX16_CONST(-0.9948793307948056),
+ FX16_CONST(0.09954361866006928), FX16_CONST(-0.9950331994381186),
+ FX16_CONST(0.09801714032956083), FX16_CONST(-0.9951847266721968),
+ FX16_CONST(0.09649043135525266), FX16_CONST(-0.9953339121404823),
+ FX16_CONST(0.09496349532963891), FX16_CONST(-0.9954807554919269),
+ FX16_CONST(0.09343633584574797), FX16_CONST(-0.9956252563809943),
+ FX16_CONST(0.09190895649713275), FX16_CONST(-0.9957674144676598),
+ FX16_CONST(0.09038136087786529), FX16_CONST(-0.9959072294174117),
+ FX16_CONST(0.08885355258252475), FX16_CONST(-0.996044700901252),
+ FX16_CONST(0.08732553520619206), FX16_CONST(-0.996179828595697),
+ FX16_CONST(0.08579731234444016), FX16_CONST(-0.996312612182778),
+ FX16_CONST(0.08426888759332418), FX16_CONST(-0.9964430513500426),
+ FX16_CONST(0.08274026454937564), FX16_CONST(-0.9965711457905548),
+ FX16_CONST(0.08121144680959266), FX16_CONST(-0.9966968952028961),
+ FX16_CONST(0.0796824379714302), FX16_CONST(-0.9968202992911657),
+ FX16_CONST(0.07815324163279415), FX16_CONST(-0.9969413577649822),
+ FX16_CONST(0.07662386139203169), FX16_CONST(-0.997060070339483),
+ FX16_CONST(0.07509430084792135), FX16_CONST(-0.9971764367353261),
+ FX16_CONST(0.07356456359966773), FX16_CONST(-0.9972904566786902),
+ FX16_CONST(0.07203465324688947), FX16_CONST(-0.9974021299012753),
+ FX16_CONST(0.07050457338961386), FX16_CONST(-0.9975114561403035),
+ FX16_CONST(0.06897432762826702), FX16_CONST(-0.9976184351385196),
+ FX16_CONST(0.06744391956366418), FX16_CONST(-0.9977230666441916),
+ FX16_CONST(0.06591335279700376), FX16_CONST(-0.9978253504111116),
+ FX16_CONST(0.0643826309298577), FX16_CONST(-0.997925286198596),
+ FX16_CONST(0.06285175756416149), FX16_CONST(-0.9980228737714862),
+ FX16_CONST(0.06132073630220849), FX16_CONST(-0.9981181129001492),
+ FX16_CONST(0.05978957074664007), FX16_CONST(-0.9982110033604782),
+ FX16_CONST(0.058258264500435794), FX16_CONST(-0.9983015449338929),
+ FX16_CONST(0.05672682116690807), FX16_CONST(-0.9983897374073402),
+ FX16_CONST(0.055195244349690094), FX16_CONST(-0.9984755805732948),
+ FX16_CONST(0.05366353765273052), FX16_CONST(-0.9985590742297593),
+ FX16_CONST(0.052131704680283594), FX16_CONST(-0.9986402181802652),
+ FX16_CONST(0.05059974903689939), FX16_CONST(-0.9987190122338729),
+ FX16_CONST(0.049067674327417966), FX16_CONST(-0.9987954562051724),
+ FX16_CONST(0.04753548415695954), FX16_CONST(-0.9988695499142836),
+ FX16_CONST(0.046003182130914706), FX16_CONST(-0.9989412931868569),
+ FX16_CONST(0.044470771854938584), FX16_CONST(-0.9990106858540734),
+ FX16_CONST(0.04293825693494102), FX16_CONST(-0.9990777277526454),
+ FX16_CONST(0.041405640977076774), FX16_CONST(-0.9991424187248169),
+ FX16_CONST(0.03987292758774013), FX16_CONST(-0.9992047586183639),
+ FX16_CONST(0.038340120373552854), FX16_CONST(-0.9992647472865944),
+ FX16_CONST(0.03680722294135883), FX16_CONST(-0.9993223845883495),
+ FX16_CONST(0.03527423889821423), FX16_CONST(-0.9993776703880028),
+ FX16_CONST(0.033741171851377705), FX16_CONST(-0.9994306045554617),
+ FX16_CONST(0.032208025408304544), FX16_CONST(-0.999481186966167),
+ FX16_CONST(0.030674803176636865), FX16_CONST(-0.9995294175010931),
+ FX16_CONST(0.029141508764193802), FX16_CONST(-0.9995752960467492),
+ FX16_CONST(0.02760814577896566), FX16_CONST(-0.9996188224951786),
+ FX16_CONST(0.0260747178291041), FX16_CONST(-0.9996599967439592),
+ FX16_CONST(0.024541228522912326), FX16_CONST(-0.9996988186962042),
+ FX16_CONST(0.023007681468839695), FX16_CONST(-0.9997352882605617),
+ FX16_CONST(0.021474080275469667), FX16_CONST(-0.9997694053512153),
+ FX16_CONST(0.019940428551514438), FX16_CONST(-0.9998011698878843),
+ FX16_CONST(0.0184067299058051), FX16_CONST(-0.9998305817958234),
+ FX16_CONST(0.016872987947281835), FX16_CONST(-0.9998576410058239),
+ FX16_CONST(0.01533920628498806), FX16_CONST(-0.9998823474542126),
+ FX16_CONST(0.013805388528060632), FX16_CONST(-0.9999047010828528),
+ FX16_CONST(0.012271538285720007), FX16_CONST(-0.9999247018391445),
+ FX16_CONST(0.01073765916726441), FX16_CONST(-0.9999423496760239),
+ FX16_CONST(0.00920375478206002), FX16_CONST(-0.9999576445519639),
+ FX16_CONST(0.007669828739531138), FX16_CONST(-0.9999705864309741),
+ FX16_CONST(0.006135884649154799), FX16_CONST(-0.9999811752826011),
+ FX16_CONST(0.004601926120448733), FX16_CONST(-0.9999894110819284),
+ FX16_CONST(0.003067956762965977), FX16_CONST(-0.9999952938095762),
+ FX16_CONST(0.0015339801862850493), FX16_CONST(-0.9999988234517019),
+ FX16_CONST(1.2246467991473532e-16), FX16_CONST(-1.0),
+ FX16_CONST(-0.0015339801862848043), FX16_CONST(-0.9999988234517019),
+ FX16_CONST(-0.0030679567629657324), FX16_CONST(-0.9999952938095762),
+ FX16_CONST(-0.004601926120448488), FX16_CONST(-0.9999894110819284),
+ FX16_CONST(-0.006135884649154554), FX16_CONST(-0.9999811752826011),
+ FX16_CONST(-0.007669828739530893), FX16_CONST(-0.9999705864309741),
+ FX16_CONST(-0.009203754782059776), FX16_CONST(-0.9999576445519639),
+ FX16_CONST(-0.010737659167264166), FX16_CONST(-0.9999423496760239),
+ FX16_CONST(-0.012271538285719762), FX16_CONST(-0.9999247018391445),
+ FX16_CONST(-0.013805388528060387), FX16_CONST(-0.9999047010828529),
+ FX16_CONST(-0.015339206284987816), FX16_CONST(-0.9998823474542126),
+ FX16_CONST(-0.01687298794728159), FX16_CONST(-0.9998576410058239),
+ FX16_CONST(-0.01840672990580486), FX16_CONST(-0.9998305817958234),
+ FX16_CONST(-0.01994042855151419), FX16_CONST(-0.9998011698878843),
+ FX16_CONST(-0.02147408027546942), FX16_CONST(-0.9997694053512153),
+ FX16_CONST(-0.02300768146883945), FX16_CONST(-0.9997352882605617),
+ FX16_CONST(-0.02454122852291208), FX16_CONST(-0.9996988186962042),
+ FX16_CONST(-0.026074717829103856), FX16_CONST(-0.9996599967439592),
+ FX16_CONST(-0.027608145778965414), FX16_CONST(-0.9996188224951786),
+ FX16_CONST(-0.029141508764193556), FX16_CONST(-0.9995752960467492),
+ FX16_CONST(-0.03067480317663662), FX16_CONST(-0.9995294175010931),
+ FX16_CONST(-0.032208025408304294), FX16_CONST(-0.999481186966167),
+ FX16_CONST(-0.033741171851377455), FX16_CONST(-0.9994306045554617),
+ FX16_CONST(-0.03527423889821398), FX16_CONST(-0.9993776703880028),
+ FX16_CONST(-0.03680722294135858), FX16_CONST(-0.9993223845883495),
+ FX16_CONST(-0.03834012037355261), FX16_CONST(-0.9992647472865944),
+ FX16_CONST(-0.03987292758773989), FX16_CONST(-0.9992047586183639),
+ FX16_CONST(-0.04140564097707653), FX16_CONST(-0.9991424187248169),
+ FX16_CONST(-0.04293825693494078), FX16_CONST(-0.9990777277526454),
+ FX16_CONST(-0.044470771854938335), FX16_CONST(-0.9990106858540734),
+ FX16_CONST(-0.046003182130914456), FX16_CONST(-0.9989412931868569),
+ FX16_CONST(-0.047535484156959296), FX16_CONST(-0.9988695499142836),
+ FX16_CONST(-0.049067674327417724), FX16_CONST(-0.9987954562051724),
+ FX16_CONST(-0.05059974903689915), FX16_CONST(-0.9987190122338729),
+ FX16_CONST(-0.05213170468028335), FX16_CONST(-0.9986402181802653),
+ FX16_CONST(-0.05366353765273028), FX16_CONST(-0.9985590742297593),
+ FX16_CONST(-0.05519524434968985), FX16_CONST(-0.9984755805732948),
+ FX16_CONST(-0.05672682116690782), FX16_CONST(-0.9983897374073402),
+ FX16_CONST(-0.05825826450043555), FX16_CONST(-0.9983015449338929),
+ FX16_CONST(-0.05978957074663983), FX16_CONST(-0.9982110033604782),
+ FX16_CONST(-0.061320736302208245), FX16_CONST(-0.9981181129001492),
+ FX16_CONST(-0.06285175756416124), FX16_CONST(-0.9980228737714862),
+ FX16_CONST(-0.06438263092985745), FX16_CONST(-0.997925286198596),
+ FX16_CONST(-0.06591335279700353), FX16_CONST(-0.9978253504111116),
+ FX16_CONST(-0.06744391956366393), FX16_CONST(-0.9977230666441916),
+ FX16_CONST(-0.06897432762826677), FX16_CONST(-0.9976184351385196),
+ FX16_CONST(-0.0705045733896136), FX16_CONST(-0.9975114561403035),
+ FX16_CONST(-0.07203465324688924), FX16_CONST(-0.9974021299012753),
+ FX16_CONST(-0.0735645635996675), FX16_CONST(-0.9972904566786902),
+ FX16_CONST(-0.0750943008479211), FX16_CONST(-0.9971764367353262),
+ FX16_CONST(-0.07662386139203144), FX16_CONST(-0.997060070339483),
+ FX16_CONST(-0.0781532416327939), FX16_CONST(-0.9969413577649822),
+ FX16_CONST(-0.07968243797142995), FX16_CONST(-0.9968202992911658),
+ FX16_CONST(-0.08121144680959243), FX16_CONST(-0.9966968952028961),
+ FX16_CONST(-0.0827402645493754), FX16_CONST(-0.9965711457905548),
+ FX16_CONST(-0.08426888759332393), FX16_CONST(-0.9964430513500426),
+ FX16_CONST(-0.08579731234443992), FX16_CONST(-0.996312612182778),
+ FX16_CONST(-0.08732553520619181), FX16_CONST(-0.996179828595697),
+ FX16_CONST(-0.0888535525825245), FX16_CONST(-0.996044700901252),
+ FX16_CONST(-0.09038136087786505), FX16_CONST(-0.9959072294174117),
+ FX16_CONST(-0.09190895649713252), FX16_CONST(-0.9957674144676598),
+ FX16_CONST(-0.09343633584574773), FX16_CONST(-0.9956252563809943),
+ FX16_CONST(-0.09496349532963866), FX16_CONST(-0.9954807554919269),
+ FX16_CONST(-0.09649043135525241), FX16_CONST(-0.9953339121404823),
+ FX16_CONST(-0.09801714032956059), FX16_CONST(-0.9951847266721969),
+ FX16_CONST(-0.09954361866006904), FX16_CONST(-0.9950331994381186),
+ FX16_CONST(-0.10106986275482768), FX16_CONST(-0.9948793307948056),
+ FX16_CONST(-0.10259586902243631), FX16_CONST(-0.9947231211043257),
+ FX16_CONST(-0.10412163387205432), FX16_CONST(-0.9945645707342555),
+ FX16_CONST(-0.10564715371341052), FX16_CONST(-0.9944036800576791),
+ FX16_CONST(-0.10717242495680891), FX16_CONST(-0.9942404494531879),
+ FX16_CONST(-0.1086974440131385), FX16_CONST(-0.9940748793048795),
+ FX16_CONST(-0.110222207293883), FX16_CONST(-0.9939069700023561),
+ FX16_CONST(-0.11174671121112625), FX16_CONST(-0.9937367219407247),
+ FX16_CONST(-0.11327095217756417), FX16_CONST(-0.9935641355205953),
+ FX16_CONST(-0.11479492660651007), FX16_CONST(-0.9933892111480807),
+ FX16_CONST(-0.11631863091190447), FX16_CONST(-0.9932119492347946),
+ FX16_CONST(-0.11784206150832484), FX16_CONST(-0.9930323501978514),
+ FX16_CONST(-0.11936521481099138), FX16_CONST(-0.9928504144598651),
+ FX16_CONST(-0.12088808723577682), FX16_CONST(-0.992666142448948),
+ FX16_CONST(-0.1224106751992161), FX16_CONST(-0.99247953459871),
+ FX16_CONST(-0.12393297511851223), FX16_CONST(-0.9922905913482574),
+ FX16_CONST(-0.125454983411546), FX16_CONST(-0.9920993131421918),
+ FX16_CONST(-0.1269766964968858), FX16_CONST(-0.9919057004306093),
+ FX16_CONST(-0.12849811079379284), FX16_CONST(-0.9917097536690995),
+ FX16_CONST(-0.13001922272223318), FX16_CONST(-0.991511473318744),
+ FX16_CONST(-0.1315400287028831), FX16_CONST(-0.9913108598461154),
+ FX16_CONST(-0.13306052515713876), FX16_CONST(-0.9911079137232769),
+ FX16_CONST(-0.13458070850712606), FX16_CONST(-0.99090263542778),
+ FX16_CONST(-0.13610057517570623), FX16_CONST(-0.9906950254426646),
+ FX16_CONST(-0.1376201215864858), FX16_CONST(-0.9904850842564571),
+ FX16_CONST(-0.13913934416382612), FX16_CONST(-0.9902728123631691),
+ FX16_CONST(-0.1406582393328493), FX16_CONST(-0.9900582102622971),
+ FX16_CONST(-0.14217680351944784), FX16_CONST(-0.9898412784588205),
+ FX16_CONST(-0.1436950331502944), FX16_CONST(-0.9896220174632009),
+ FX16_CONST(-0.14521292465284713), FX16_CONST(-0.9894004277913804),
+ FX16_CONST(-0.14673047445536158), FX16_CONST(-0.989176509964781),
+ FX16_CONST(-0.14824767898689603), FX16_CONST(-0.988950264510303),
+ FX16_CONST(-0.1497645346773212), FX16_CONST(-0.9887216919603238),
+ FX16_CONST(-0.15128103795733008), FX16_CONST(-0.9884907928526967),
+ FX16_CONST(-0.15279718525844344), FX16_CONST(-0.9882575677307495),
+ FX16_CONST(-0.15431297301301983), FX16_CONST(-0.9880220171432836),
+ FX16_CONST(-0.15582839765426512), FX16_CONST(-0.9877841416445722),
+ FX16_CONST(-0.1573434556162383), FX16_CONST(-0.9875439417943592),
+ FX16_CONST(-0.15885814333386122), FX16_CONST(-0.9873014181578584),
+ FX16_CONST(-0.1603724572429282), FX16_CONST(-0.987056571305751),
+ FX16_CONST(-0.1618863937801115), FX16_CONST(-0.9868094018141855),
+ FX16_CONST(-0.16339994938297306), FX16_CONST(-0.9865599102647755),
+ FX16_CONST(-0.1649131204899699), FX16_CONST(-0.9863080972445987),
+ FX16_CONST(-0.16642590354046383), FX16_CONST(-0.9860539633461954),
+ FX16_CONST(-0.16793829497473103), FX16_CONST(-0.9857975091675675),
+ FX16_CONST(-0.169450291233968), FX16_CONST(-0.9855387353121761),
+ FX16_CONST(-0.17096188876030097), FX16_CONST(-0.9852776423889413),
+ FX16_CONST(-0.17247308399679587), FX16_CONST(-0.9850142310122398),
+ FX16_CONST(-0.17398387338746388), FX16_CONST(-0.9847485018019042),
+ FX16_CONST(-0.1754942533772712), FX16_CONST(-0.9844804553832209),
+ FX16_CONST(-0.1770042204121487), FX16_CONST(-0.9842100923869291),
+ FX16_CONST(-0.17851377093899717), FX16_CONST(-0.9839374134492189),
+ FX16_CONST(-0.18002290140569935), FX16_CONST(-0.9836624192117303),
+ FX16_CONST(-0.18153160826112497), FX16_CONST(-0.9833851103215512),
+ FX16_CONST(-0.18303988795514065), FX16_CONST(-0.9831054874312164),
+ FX16_CONST(-0.18454773693861948), FX16_CONST(-0.9828235511987053),
+ FX16_CONST(-0.18605515166344666), FX16_CONST(-0.9825393022874412),
+ FX16_CONST(-0.18756212858252932), FX16_CONST(-0.9822527413662895),
+ FX16_CONST(-0.1890686641498061), FX16_CONST(-0.9819638691095552),
+ FX16_CONST(-0.19057475482025282), FX16_CONST(-0.9816726861969831),
+ FX16_CONST(-0.19208039704989222), FX16_CONST(-0.9813791933137547),
+ FX16_CONST(-0.19358558729580355), FX16_CONST(-0.9810833911504867),
+ FX16_CONST(-0.19509032201612836), FX16_CONST(-0.9807852804032304),
+ FX16_CONST(-0.19659459767008003), FX16_CONST(-0.9804848617734694),
+ FX16_CONST(-0.19809841071795356), FX16_CONST(-0.9801821359681174),
+ FX16_CONST(-0.19960175762113067), FX16_CONST(-0.9798771036995177),
+ FX16_CONST(-0.20110463484209176), FX16_CONST(-0.9795697656854405),
+ FX16_CONST(-0.20260703884442113), FX16_CONST(-0.979260122649082),
+ FX16_CONST(-0.20410896609281662), FX16_CONST(-0.9789481753190622),
+ FX16_CONST(-0.20561041305309916), FX16_CONST(-0.9786339244294232),
+ FX16_CONST(-0.2071113761922186), FX16_CONST(-0.9783173707196277),
+ FX16_CONST(-0.20861185197826326), FX16_CONST(-0.9779985149345571),
+ FX16_CONST(-0.21011183688046955), FX16_CONST(-0.97767735782451),
+ FX16_CONST(-0.21161132736922766), FX16_CONST(-0.9773539001452),
+ FX16_CONST(-0.2131103199160912), FX16_CONST(-0.9770281426577544),
+ FX16_CONST(-0.21460881099378673), FX16_CONST(-0.9767000861287118),
+ FX16_CONST(-0.21610679707621921), FX16_CONST(-0.9763697313300213),
+ FX16_CONST(-0.21760427463848347), FX16_CONST(-0.9760370790390391),
+ FX16_CONST(-0.2191012401568698), FX16_CONST(-0.9757021300385286),
+ FX16_CONST(-0.22059769010887326), FX16_CONST(-0.975364885116657),
+ FX16_CONST(-0.22209362097320343), FX16_CONST(-0.9750253450669941),
+ FX16_CONST(-0.22358902922979004), FX16_CONST(-0.9746835106885107),
+ FX16_CONST(-0.2250839113597926), FX16_CONST(-0.9743393827855759),
+ FX16_CONST(-0.22657826384560992), FX16_CONST(-0.973992962167956),
+ FX16_CONST(-0.22807208317088581), FX16_CONST(-0.9736442496508119),
+ FX16_CONST(-0.2295653658205187), FX16_CONST(-0.9732932460546982),
+ FX16_CONST(-0.23105810828067108), FX16_CONST(-0.9729399522055602),
+ FX16_CONST(-0.23255030703877494), FX16_CONST(-0.9725843689347323),
+ FX16_CONST(-0.23404195858354326), FX16_CONST(-0.9722264970789364),
+ FX16_CONST(-0.23553305940497551), FX16_CONST(-0.9718663374802794),
+ FX16_CONST(-0.23702360599436695), FX16_CONST(-0.9715038909862519),
+ FX16_CONST(-0.2385135948443183), FX16_CONST(-0.9711391584497252),
+ FX16_CONST(-0.24000302244874153), FX16_CONST(-0.9707721407289502),
+ FX16_CONST(-0.2414918853028691), FX16_CONST(-0.9704028386875555),
+ FX16_CONST(-0.24298017990326382), FX16_CONST(-0.970031253194544),
+ FX16_CONST(-0.24446790274782426), FX16_CONST(-0.9696573851242924),
+ FX16_CONST(-0.24595505033579443), FX16_CONST(-0.9692812353565485),
+ FX16_CONST(-0.24744161916777327), FX16_CONST(-0.9689028047764289),
+ FX16_CONST(-0.24892760574571987), FX16_CONST(-0.9685220942744174),
+ FX16_CONST(-0.2504130065729651), FX16_CONST(-0.9681391047463624),
+ FX16_CONST(-0.25189781815421697), FX16_CONST(-0.9677538370934755),
+ FX16_CONST(-0.2533820369955699), FX16_CONST(-0.9673662922223286),
+ FX16_CONST(-0.25486565960451446), FX16_CONST(-0.9669764710448522),
+ FX16_CONST(-0.2563486824899429), FX16_CONST(-0.9665843744783331),
+ FX16_CONST(-0.25783110216215877), FX16_CONST(-0.9661900034454126),
+ FX16_CONST(-0.2593129151328862), FX16_CONST(-0.9657933588740837),
+ FX16_CONST(-0.2607941179152756), FX16_CONST(-0.9653944416976894),
+ FX16_CONST(-0.2622747070239134), FX16_CONST(-0.9649932528549204),
+ FX16_CONST(-0.26375467897483135), FX16_CONST(-0.9645897932898128),
+ FX16_CONST(-0.2652340302855115), FX16_CONST(-0.9641840639517458),
+ FX16_CONST(-0.26671275747489825), FX16_CONST(-0.96377606579544),
+ FX16_CONST(-0.2681908570634032), FX16_CONST(-0.963365799780954),
+ FX16_CONST(-0.2696683255729148), FX16_CONST(-0.962953266873684),
+ FX16_CONST(-0.2711451595268079), FX16_CONST(-0.9625384680443592),
+ FX16_CONST(-0.27262135544994903), FX16_CONST(-0.9621214042690416),
+ FX16_CONST(-0.27409690986870616), FX16_CONST(-0.9617020765291227),
+ FX16_CONST(-0.2755718193109581), FX16_CONST(-0.9612804858113206),
+ FX16_CONST(-0.2770460803061), FX16_CONST(-0.9608566331076795),
+ FX16_CONST(-0.2785196893850529), FX16_CONST(-0.9604305194155659),
+ FX16_CONST(-0.2799926430802732), FX16_CONST(-0.960002145737666),
+ FX16_CONST(-0.28146493792575766), FX16_CONST(-0.9595715130819846),
+ FX16_CONST(-0.28293657045705517), FX16_CONST(-0.959138622461842),
+ FX16_CONST(-0.2844075372112718), FX16_CONST(-0.9587034748958716),
+ FX16_CONST(-0.28587783472708034), FX16_CONST(-0.9582660714080178),
+ FX16_CONST(-0.2873474595447294), FX16_CONST(-0.9578264130275329),
+ FX16_CONST(-0.28881640820604954), FX16_CONST(-0.9573845007889759),
+ FX16_CONST(-0.2902846772544621), FX16_CONST(-0.9569403357322089),
+ FX16_CONST(-0.2917522632349892), FX16_CONST(-0.9564939189023951),
+ FX16_CONST(-0.29321916269425874), FX16_CONST(-0.9560452513499964),
+ FX16_CONST(-0.29468537218051416), FX16_CONST(-0.9555943341307711),
+ FX16_CONST(-0.2961508882436238), FX16_CONST(-0.9551411683057708),
+ FX16_CONST(-0.2976157074350859), FX16_CONST(-0.9546857549413384),
+ FX16_CONST(-0.2990798263080403), FX16_CONST(-0.9542280951091057),
+ FX16_CONST(-0.30054324141727345), FX16_CONST(-0.9537681898859903),
+ FX16_CONST(-0.3020059493192278), FX16_CONST(-0.953306040354194),
+ FX16_CONST(-0.3034679465720112), FX16_CONST(-0.9528416476011987),
+ FX16_CONST(-0.30492922973540243), FX16_CONST(-0.9523750127197659),
+ FX16_CONST(-0.3063897953708607), FX16_CONST(-0.9519061368079323),
+ FX16_CONST(-0.3078496400415348), FX16_CONST(-0.9514350209690083),
+ FX16_CONST(-0.3093087603122688), FX16_CONST(-0.9509616663115751),
+ FX16_CONST(-0.3107671527496113), FX16_CONST(-0.9504860739494818),
+ FX16_CONST(-0.3122248139218249), FX16_CONST(-0.950008245001843),
+ FX16_CONST(-0.3136817403988912), FX16_CONST(-0.9495281805930368),
+ FX16_CONST(-0.3151379287525222), FX16_CONST(-0.9490458818527007),
+ FX16_CONST(-0.31659337555616585), FX16_CONST(-0.9485613499157303),
+ FX16_CONST(-0.31804807738501467), FX16_CONST(-0.9480745859222763),
+ FX16_CONST(-0.3195020308160156), FX16_CONST(-0.9475855910177412),
+ FX16_CONST(-0.32095523242787527), FX16_CONST(-0.9470943663527772),
+ FX16_CONST(-0.32240767880106963), FX16_CONST(-0.9466009130832836),
+ FX16_CONST(-0.3238593665178528), FX16_CONST(-0.9461052323704034),
+ FX16_CONST(-0.325310292162263), FX16_CONST(-0.9456073253805213),
+ FX16_CONST(-0.32676045232013157), FX16_CONST(-0.9451071932852606),
+ FX16_CONST(-0.3282098435790925), FX16_CONST(-0.9446048372614803),
+ FX16_CONST(-0.3296584625285872), FX16_CONST(-0.9441002584912728),
+ FX16_CONST(-0.33110630575987626), FX16_CONST(-0.9435934581619604),
+ FX16_CONST(-0.3325533698660442), FX16_CONST(-0.9430844374660935),
+ FX16_CONST(-0.3339996514420091), FX16_CONST(-0.942573197601447),
+ FX16_CONST(-0.3354451470845315), FX16_CONST(-0.9420597397710174),
+ FX16_CONST(-0.3368898533922201), FX16_CONST(-0.9415440651830208),
+ FX16_CONST(-0.3383337669655409), FX16_CONST(-0.9410261750508894),
+ FX16_CONST(-0.3397768844068268), FX16_CONST(-0.9405060705932684),
+ FX16_CONST(-0.34121920232028247), FX16_CONST(-0.9399837530340139),
+ FX16_CONST(-0.3426607173119942), FX16_CONST(-0.93945922360219),
+ FX16_CONST(-0.3441014259899388), FX16_CONST(-0.9389324835320646),
+ FX16_CONST(-0.34554132496398876), FX16_CONST(-0.9384035340631083),
+ FX16_CONST(-0.3469804108459235), FX16_CONST(-0.9378723764399899),
+ FX16_CONST(-0.34841868024943456), FX16_CONST(-0.937339011912575),
+ FX16_CONST(-0.34985612979013464), FX16_CONST(-0.9368034417359217),
+ FX16_CONST(-0.351292756085567), FX16_CONST(-0.9362656671702783),
+ FX16_CONST(-0.3527285557552107), FX16_CONST(-0.9357256894810804),
+ FX16_CONST(-0.3541635254204901), FX16_CONST(-0.9351835099389477),
+ FX16_CONST(-0.3555976617047838), FX16_CONST(-0.9346391298196808),
+ FX16_CONST(-0.3570309612334301), FX16_CONST(-0.9340925504042589),
+ FX16_CONST(-0.3584634206337364), FX16_CONST(-0.9335437729788363),
+ FX16_CONST(-0.3598950365349881), FX16_CONST(-0.932992798834739),
+ FX16_CONST(-0.36132580556845395), FX16_CONST(-0.9324396292684625),
+ FX16_CONST(-0.36275572436739706), FX16_CONST(-0.9318842655816681),
+ FX16_CONST(-0.3641847895670799), FX16_CONST(-0.9313267090811804),
+ FX16_CONST(-0.3656129978047736), FX16_CONST(-0.9307669610789838),
+ FX16_CONST(-0.36704034571976707), FX16_CONST(-0.9302050228922191),
+ FX16_CONST(-0.3684668299533724), FX16_CONST(-0.9296408958431812),
+ FX16_CONST(-0.3698924471489339), FX16_CONST(-0.9290745812593159),
+ FX16_CONST(-0.37131719395183743), FX16_CONST(-0.9285060804732156),
+ FX16_CONST(-0.37274106700951587), FX16_CONST(-0.9279353948226178),
+ FX16_CONST(-0.3741640629714578), FX16_CONST(-0.9273625256504011),
+ FX16_CONST(-0.37558617848921716), FX16_CONST(-0.9267874743045819),
+ FX16_CONST(-0.3770074102164179), FX16_CONST(-0.9262102421383115),
+ FX16_CONST(-0.3784277548087654), FX16_CONST(-0.9256308305098728),
+ FX16_CONST(-0.37984720892405116), FX16_CONST(-0.9250492407826776),
+ FX16_CONST(-0.3812657692221621), FX16_CONST(-0.9244654743252627),
+ FX16_CONST(-0.38268343236508967), FX16_CONST(-0.9238795325112868),
+ FX16_CONST(-0.3841001950169351), FX16_CONST(-0.9232914167195276),
+ FX16_CONST(-0.3855160538439186), FX16_CONST(-0.9227011283338786),
+ FX16_CONST(-0.3869310055143885), FX16_CONST(-0.9221086687433452),
+ FX16_CONST(-0.38834504669882636), FX16_CONST(-0.9215140393420419),
+ FX16_CONST(-0.38975817406985624), FX16_CONST(-0.9209172415291895),
+ FX16_CONST(-0.3911703843022538), FX16_CONST(-0.9203182767091106),
+ FX16_CONST(-0.3925816740729512), FX16_CONST(-0.9197171462912275),
+ FX16_CONST(-0.39399204006104793), FX16_CONST(-0.9191138516900578),
+ FX16_CONST(-0.3954014789478163), FX16_CONST(-0.9185083943252123),
+ FX16_CONST(-0.39680998741671003), FX16_CONST(-0.9179007756213906),
+ FX16_CONST(-0.39821756215337345), FX16_CONST(-0.917290997008378),
+ FX16_CONST(-0.39962419984564684), FX16_CONST(-0.9166790599210427),
+ FX16_CONST(-0.4010298971835754), FX16_CONST(-0.9160649657993318),
+ FX16_CONST(-0.4024346508594184), FX16_CONST(-0.9154487160882678),
+ FX16_CONST(-0.4038384575676542), FX16_CONST(-0.9148303122379461),
+ FX16_CONST(-0.4052413140049897), FX16_CONST(-0.9142097557035307),
+ FX16_CONST(-0.406643216870369), FX16_CONST(-0.9135870479452508),
+ FX16_CONST(-0.40804416286497835), FX16_CONST(-0.9129621904283983),
+ FX16_CONST(-0.4094441486922574), FX16_CONST(-0.9123351846233229),
+ FX16_CONST(-0.4108431710579039), FX16_CONST(-0.9117060320054299),
+ FX16_CONST(-0.4122412266698826), FX16_CONST(-0.9110747340551765),
+ FX16_CONST(-0.4136383122384344), FX16_CONST(-0.9104412922580672),
+ FX16_CONST(-0.41503442447608163), FX16_CONST(-0.9098057081046522),
+ FX16_CONST(-0.41642956009763693), FX16_CONST(-0.9091679830905225),
+ FX16_CONST(-0.4178237158202122), FX16_CONST(-0.9085281187163061),
+ FX16_CONST(-0.419216888363224), FX16_CONST(-0.9078861164876662),
+ FX16_CONST(-0.42060907444840234), FX16_CONST(-0.9072419779152959),
+ FX16_CONST(-0.4220002707997996), FX16_CONST(-0.9065957045149154),
+ FX16_CONST(-0.4233904741437957), FX16_CONST(-0.9059472978072686),
+ FX16_CONST(-0.42477968120910864), FX16_CONST(-0.9052967593181188),
+ FX16_CONST(-0.4261678887267996), FX16_CONST(-0.9046440905782462),
+ FX16_CONST(-0.4275550934302818), FX16_CONST(-0.9039892931234434),
+ FX16_CONST(-0.4289412920553294), FX16_CONST(-0.9033323684945119),
+ FX16_CONST(-0.43032648134008267), FX16_CONST(-0.9026733182372588),
+ FX16_CONST(-0.43171065802505704), FX16_CONST(-0.9020121439024933),
+ FX16_CONST(-0.43309381885315185), FX16_CONST(-0.901348847046022),
+ FX16_CONST(-0.43447596056965576), FX16_CONST(-0.9006834292286469),
+ FX16_CONST(-0.4358570799222553), FX16_CONST(-0.9000158920161603),
+ FX16_CONST(-0.43723717366104403), FX16_CONST(-0.8993462369793416),
+ FX16_CONST(-0.4386162385385273), FX16_CONST(-0.898674465693954),
+ FX16_CONST(-0.4399942713096331), FX16_CONST(-0.8980005797407399),
+ FX16_CONST(-0.44137126873171667), FX16_CONST(-0.8973245807054183),
+ FX16_CONST(-0.44274722756456975), FX16_CONST(-0.8966464701786804),
+ FX16_CONST(-0.4441221445704291), FX16_CONST(-0.8959662497561852),
+ FX16_CONST(-0.44549601651398174), FX16_CONST(-0.8952839210385575),
+ FX16_CONST(-0.44686884016237394), FX16_CONST(-0.8945994856313828),
+ FX16_CONST(-0.44824061228521983), FX16_CONST(-0.8939129451452033),
+ FX16_CONST(-0.44961132965460665), FX16_CONST(-0.8932243011955153),
+ FX16_CONST(-0.45098098904510364), FX16_CONST(-0.8925335554027647),
+ FX16_CONST(-0.45234958723377083), FX16_CONST(-0.8918407093923427),
+ FX16_CONST(-0.45371712100016354), FX16_CONST(-0.8911457647945834),
+ FX16_CONST(-0.45508358712634367), FX16_CONST(-0.890448723244758),
+ FX16_CONST(-0.4564489823968839), FX16_CONST(-0.8897495863830728),
+ FX16_CONST(-0.45781330359887695), FX16_CONST(-0.8890483558546647),
+ FX16_CONST(-0.459176547521944), FX16_CONST(-0.8883450333095964),
+ FX16_CONST(-0.46053871095824006), FX16_CONST(-0.8876396204028539),
+ FX16_CONST(-0.4618997907024625), FX16_CONST(-0.8869321187943423),
+ FX16_CONST(-0.4632597835518601), FX16_CONST(-0.8862225301488806),
+ FX16_CONST(-0.46461868630623787), FX16_CONST(-0.8855108561362),
+ FX16_CONST(-0.46597649576796596), FX16_CONST(-0.8847970984309379),
+ FX16_CONST(-0.46733320874198836), FX16_CONST(-0.884081258712635),
+ FX16_CONST(-0.4686888220358276), FX16_CONST(-0.8833633386657318),
+ FX16_CONST(-0.47004333245959545), FX16_CONST(-0.8826433399795629),
+ FX16_CONST(-0.47139673682599764), FX16_CONST(-0.881921264348355),
+ FX16_CONST(-0.4727490319503425), FX16_CONST(-0.8811971134712222),
+ FX16_CONST(-0.47410021465054986), FX16_CONST(-0.8804708890521609),
+ FX16_CONST(-0.47545028174715587), FX16_CONST(-0.8797425928000474),
+ FX16_CONST(-0.47679923006332187), FX16_CONST(-0.8790122264286336),
+ FX16_CONST(-0.47814705642484295), FX16_CONST(-0.8782797916565416),
+ FX16_CONST(-0.47949375766015306), FX16_CONST(-0.8775452902072612),
+ FX16_CONST(-0.48083933060033374), FX16_CONST(-0.8768087238091458),
+ FX16_CONST(-0.48218377207912266), FX16_CONST(-0.8760700941954066),
+ FX16_CONST(-0.4835270789329184), FX16_CONST(-0.875329403104111),
+ FX16_CONST(-0.48486924800079095), FX16_CONST(-0.8745866522781762),
+ FX16_CONST(-0.48621027612448636), FX16_CONST(-0.8738418434653669),
+ FX16_CONST(-0.48755016014843566), FX16_CONST(-0.8730949784182902),
+ FX16_CONST(-0.48888889691976306), FX16_CONST(-0.8723460588943915),
+ FX16_CONST(-0.49022648328829116), FX16_CONST(-0.8715950866559511),
+ FX16_CONST(-0.4915629161065497), FX16_CONST(-0.8708420634700791),
+ FX16_CONST(-0.4928981922297839), FX16_CONST(-0.8700869911087115),
+ FX16_CONST(-0.4942323085159598), FX16_CONST(-0.8693298713486067),
+ FX16_CONST(-0.4955652618257723), FX16_CONST(-0.868570705971341),
+ FX16_CONST(-0.49689704902265447), FX16_CONST(-0.8678094967633033),
+ FX16_CONST(-0.49822766697278154), FX16_CONST(-0.8670462455156929),
+ FX16_CONST(-0.4995571125450817), FX16_CONST(-0.8662809540245131),
+ FX16_CONST(-0.5008853826112407), FX16_CONST(-0.8655136240905691),
+ FX16_CONST(-0.5022124740457106), FX16_CONST(-0.8647442575194625),
+ FX16_CONST(-0.5035383837257175), FX16_CONST(-0.8639728561215868),
+ FX16_CONST(-0.5048631085312676), FX16_CONST(-0.8631994217121242),
+ FX16_CONST(-0.506186645345155), FX16_CONST(-0.8624239561110407),
+ FX16_CONST(-0.5075089910529708), FX16_CONST(-0.8616464611430814),
+ FX16_CONST(-0.5088301425431071), FX16_CONST(-0.8608669386377673),
+ FX16_CONST(-0.5101500967067666), FX16_CONST(-0.8600853904293903),
+ FX16_CONST(-0.5114688504379703), FX16_CONST(-0.8593018183570085),
+ FX16_CONST(-0.5127864006335627), FX16_CONST(-0.858516224264443),
+ FX16_CONST(-0.5141027441932216), FX16_CONST(-0.8577286100002721),
+ FX16_CONST(-0.5154178780194629), FX16_CONST(-0.8569389774178288),
+ FX16_CONST(-0.5167317990176497), FX16_CONST(-0.8561473283751947),
+ FX16_CONST(-0.5180445040959992), FX16_CONST(-0.8553536647351961),
+ FX16_CONST(-0.5193559901655895), FX16_CONST(-0.8545579883654005),
+ FX16_CONST(-0.5206662541403669), FX16_CONST(-0.8537603011381115),
+ FX16_CONST(-0.5219752929371543), FX16_CONST(-0.8529606049303637),
+ FX16_CONST(-0.5232831034756564), FX16_CONST(-0.8521589016239198),
+ FX16_CONST(-0.5245896826784687), FX16_CONST(-0.8513551931052653),
+ FX16_CONST(-0.5258950274710846), FX16_CONST(-0.8505494812656035),
+ FX16_CONST(-0.5271991347819011), FX16_CONST(-0.8497417680008527),
+ FX16_CONST(-0.5285020015422283), FX16_CONST(-0.8489320552116397),
+ FX16_CONST(-0.5298036246862946), FX16_CONST(-0.8481203448032972),
+ FX16_CONST(-0.5311040011512547), FX16_CONST(-0.8473066386858585),
+ FX16_CONST(-0.5324031278771978), FX16_CONST(-0.8464909387740521),
+ FX16_CONST(-0.533701001807153), FX16_CONST(-0.8456732469872991),
+ FX16_CONST(-0.5349976198870969), FX16_CONST(-0.8448535652497072),
+ FX16_CONST(-0.5362929790659631), FX16_CONST(-0.8440318954900665),
+ FX16_CONST(-0.5375870762956455), FX16_CONST(-0.8432082396418454),
+ FX16_CONST(-0.5388799085310082), FX16_CONST(-0.842382599643186),
+ FX16_CONST(-0.5401714727298929), FX16_CONST(-0.8415549774368984),
+ FX16_CONST(-0.5414617658531232), FX16_CONST(-0.8407253749704582),
+ FX16_CONST(-0.5427507848645158), FX16_CONST(-0.8398937941959996),
+ FX16_CONST(-0.5440385267308838), FX16_CONST(-0.8390602370703127),
+ FX16_CONST(-0.5453249884220461), FX16_CONST(-0.8382247055548382),
+ FX16_CONST(-0.5466101669108347), FX16_CONST(-0.837387201615662),
+ FX16_CONST(-0.5478940591731002), FX16_CONST(-0.836547727223512),
+ FX16_CONST(-0.5491766621877194), FX16_CONST(-0.8357062843537527),
+ FX16_CONST(-0.5504579729366047), FX16_CONST(-0.8348628749863801),
+ FX16_CONST(-0.5517379884047074), FX16_CONST(-0.8340175011060181),
+ FX16_CONST(-0.5530167055800274), FX16_CONST(-0.8331701647019133),
+ FX16_CONST(-0.55429412145362), FX16_CONST(-0.8323208677679297),
+ FX16_CONST(-0.555570233019602), FX16_CONST(-0.8314696123025455),
+ FX16_CONST(-0.5568450372751599), FX16_CONST(-0.8306164003088464),
+ FX16_CONST(-0.5581185312205561), FX16_CONST(-0.829761233794523),
+ FX16_CONST(-0.5593907118591358), FX16_CONST(-0.8289041147718651),
+ FX16_CONST(-0.5606615761973359), FX16_CONST(-0.8280450452577559),
+ FX16_CONST(-0.5619311212446894), FX16_CONST(-0.8271840272736691),
+ FX16_CONST(-0.5631993440138339), FX16_CONST(-0.8263210628456636),
+ FX16_CONST(-0.5644662415205194), FX16_CONST(-0.8254561540043776),
+ FX16_CONST(-0.5657318107836132), FX16_CONST(-0.8245893027850253),
+ FX16_CONST(-0.5669960488251085), FX16_CONST(-0.8237205112273915),
+ FX16_CONST(-0.5682589526701315), FX16_CONST(-0.8228497813758264),
+ FX16_CONST(-0.5695205193469473), FX16_CONST(-0.8219771152792416),
+ FX16_CONST(-0.5707807458869671), FX16_CONST(-0.8211025149911048),
+ FX16_CONST(-0.572039629324757), FX16_CONST(-0.8202259825694347),
+ FX16_CONST(-0.573297166698042), FX16_CONST(-0.8193475200767971),
+ FX16_CONST(-0.5745533550477157), FX16_CONST(-0.8184671295802988),
+ FX16_CONST(-0.5758081914178453), FX16_CONST(-0.8175848131515837),
+ FX16_CONST(-0.5770616728556793), FX16_CONST(-0.816700572866828),
+ FX16_CONST(-0.5783137964116555), FX16_CONST(-0.8158144108067339),
+ FX16_CONST(-0.5795645591394057), FX16_CONST(-0.8149263290565266),
+ FX16_CONST(-0.5808139580957643), FX16_CONST(-0.8140363297059485),
+ FX16_CONST(-0.5820619903407754), FX16_CONST(-0.8131444148492536),
+ FX16_CONST(-0.5833086529376983), FX16_CONST(-0.8122505865852039),
+ FX16_CONST(-0.5845539429530151), FX16_CONST(-0.8113548470170638),
+ FX16_CONST(-0.5857978574564389), FX16_CONST(-0.8104571982525949),
+ FX16_CONST(-0.5870403935209177), FX16_CONST(-0.8095576424040515),
+ FX16_CONST(-0.5882815482226451), FX16_CONST(-0.8086561815881751),
+ FX16_CONST(-0.5895213186410639), FX16_CONST(-0.8077528179261904),
+ FX16_CONST(-0.5907597018588739), FX16_CONST(-0.8068475535437994),
+ FX16_CONST(-0.5919966949620409), FX16_CONST(-0.8059403905711764),
+ FX16_CONST(-0.5932322950397998), FX16_CONST(-0.8050313311429635),
+ FX16_CONST(-0.5944664991846642), FX16_CONST(-0.8041203773982659),
+ FX16_CONST(-0.5956993044924332), FX16_CONST(-0.8032075314806449),
+ FX16_CONST(-0.5969307080621965), FX16_CONST(-0.8022927955381157),
+ FX16_CONST(-0.5981607069963422), FX16_CONST(-0.8013761717231404),
+ FX16_CONST(-0.5993892984005645), FX16_CONST(-0.8004576621926228),
+ FX16_CONST(-0.6006164793838686), FX16_CONST(-0.7995372691079052),
+ FX16_CONST(-0.6018422470585799), FX16_CONST(-0.7986149946347609),
+ FX16_CONST(-0.6030665985403482), FX16_CONST(-0.7976908409433912),
+ FX16_CONST(-0.6042895309481559), FX16_CONST(-0.7967648102084189),
+ FX16_CONST(-0.6055110414043254), FX16_CONST(-0.7958369046088836),
+ FX16_CONST(-0.6067311270345245), FX16_CONST(-0.794907126328237),
+ FX16_CONST(-0.6079497849677735), FX16_CONST(-0.7939754775543373),
+ FX16_CONST(-0.6091670123364531), FX16_CONST(-0.7930419604794438),
+ FX16_CONST(-0.6103828062763095), FX16_CONST(-0.7921065773002123),
+ FX16_CONST(-0.6115971639264618), FX16_CONST(-0.7911693302176903),
+ FX16_CONST(-0.6128100824294097), FX16_CONST(-0.79023022143731),
+ FX16_CONST(-0.6140215589310382), FX16_CONST(-0.7892892531688859),
+ FX16_CONST(-0.6152315905806267), FX16_CONST(-0.7883464276266063),
+ FX16_CONST(-0.6164401745308536), FX16_CONST(-0.7874017470290314),
+ FX16_CONST(-0.6176473079378038), FX16_CONST(-0.7864552135990859),
+ FX16_CONST(-0.6188529879609762), FX16_CONST(-0.785506829564054),
+ FX16_CONST(-0.6200572117632892), FX16_CONST(-0.7845565971555752),
+ FX16_CONST(-0.6212599765110874), FX16_CONST(-0.7836045186096384),
+ FX16_CONST(-0.6224612793741499), FX16_CONST(-0.7826505961665758),
+ FX16_CONST(-0.6236611175256946), FX16_CONST(-0.7816948320710594),
+ FX16_CONST(-0.6248594881423862), FX16_CONST(-0.7807372285720946),
+ FX16_CONST(-0.6260563884043435), FX16_CONST(-0.7797777879230146),
+ FX16_CONST(-0.6272518154951439), FX16_CONST(-0.7788165123814762),
+ FX16_CONST(-0.6284457666018326), FX16_CONST(-0.7778534042094533),
+ FX16_CONST(-0.629638238914927), FX16_CONST(-0.7768884656732324),
+ FX16_CONST(-0.6308292296284242), FX16_CONST(-0.7759216990434078),
+ FX16_CONST(-0.632018735939809), FX16_CONST(-0.7749531065948739),
+ FX16_CONST(-0.6332067550500573), FX16_CONST(-0.7739826906068228),
+ FX16_CONST(-0.6343932841636453), FX16_CONST(-0.7730104533627371),
+ FX16_CONST(-0.6355783204885561), FX16_CONST(-0.7720363971503845),
+ FX16_CONST(-0.6367618612362843), FX16_CONST(-0.7710605242618137),
+ FX16_CONST(-0.6379439036218439), FX16_CONST(-0.7700828369933481),
+ FX16_CONST(-0.6391244448637757), FX16_CONST(-0.7691033376455797),
+ FX16_CONST(-0.6403034821841515), FX16_CONST(-0.7681220285233656),
+ FX16_CONST(-0.641481012808583), FX16_CONST(-0.7671389119358205),
+ FX16_CONST(-0.6426570339662269), FX16_CONST(-0.7661539901963129),
+ FX16_CONST(-0.6438315428897913), FX16_CONST(-0.7651672656224591),
+ FX16_CONST(-0.6450045368155438), FX16_CONST(-0.7641787405361168),
+ FX16_CONST(-0.6461760129833164), FX16_CONST(-0.7631884172633813),
+ FX16_CONST(-0.6473459686365118), FX16_CONST(-0.7621962981345791),
+ FX16_CONST(-0.6485144010221123), FX16_CONST(-0.7612023854842619),
+ FX16_CONST(-0.6496813073906832), FX16_CONST(-0.7602066816512024),
+ FX16_CONST(-0.6508466849963808), FX16_CONST(-0.7592091889783882),
+ FX16_CONST(-0.6520105310969595), FX16_CONST(-0.7582099098130154),
+ FX16_CONST(-0.6531728429537765), FX16_CONST(-0.7572088465064848),
+ FX16_CONST(-0.6543336178318003), FX16_CONST(-0.7562060014143946),
+ FX16_CONST(-0.6554928529996153), FX16_CONST(-0.7552013768965365),
+ FX16_CONST(-0.6566505457294288), FX16_CONST(-0.7541949753168894),
+ FX16_CONST(-0.6578066932970785), FX16_CONST(-0.7531867990436125),
+ FX16_CONST(-0.6589612929820373), FX16_CONST(-0.7521768504490427),
+ FX16_CONST(-0.6601143420674203), FX16_CONST(-0.7511651319096866),
+ FX16_CONST(-0.6612658378399922), FX16_CONST(-0.7501516458062151),
+ FX16_CONST(-0.6624157775901718), FX16_CONST(-0.7491363945234593),
+ FX16_CONST(-0.6635641586120397), FX16_CONST(-0.7481193804504037),
+ FX16_CONST(-0.6647109782033448), FX16_CONST(-0.7471006059801802),
+ FX16_CONST(-0.6658562336655094), FX16_CONST(-0.746080073510064),
+ FX16_CONST(-0.6669999223036374), FX16_CONST(-0.7450577854414661),
+ FX16_CONST(-0.6681420414265185), FX16_CONST(-0.7440337441799293),
+ FX16_CONST(-0.6692825883466358), FX16_CONST(-0.7430079521351219),
+ FX16_CONST(-0.670421560380173), FX16_CONST(-0.7419804117208311),
+ FX16_CONST(-0.6715589548470184), FX16_CONST(-0.7409511253549591),
+ FX16_CONST(-0.6726947690707727), FX16_CONST(-0.7399200954595163),
+ FX16_CONST(-0.6738290003787559), FX16_CONST(-0.7388873244606152),
+ FX16_CONST(-0.674961646102012), FX16_CONST(-0.737852814788466),
+ FX16_CONST(-0.6760927035753158), FX16_CONST(-0.73681656887737),
+ FX16_CONST(-0.6772221701371803), FX16_CONST(-0.7357785891657136),
+ FX16_CONST(-0.6783500431298612), FX16_CONST(-0.7347388780959637),
+ FX16_CONST(-0.6794763198993649), FX16_CONST(-0.7336974381146604),
+ FX16_CONST(-0.680600997795453), FX16_CONST(-0.7326542716724128),
+ FX16_CONST(-0.6817240741716496), FX16_CONST(-0.7316093812238927),
+ FX16_CONST(-0.682845546385248), FX16_CONST(-0.7305627692278277),
+ FX16_CONST(-0.6839654117973154), FX16_CONST(-0.729514438146997),
+ FX16_CONST(-0.6850836677727001), FX16_CONST(-0.7284643904482254),
+ FX16_CONST(-0.6862003116800385), FX16_CONST(-0.7274126286023759),
+ FX16_CONST(-0.6873153408917592), FX16_CONST(-0.7263591550843459),
+ FX16_CONST(-0.6884287527840903), FX16_CONST(-0.7253039723730609),
+ FX16_CONST(-0.6895405447370668), FX16_CONST(-0.724247082951467),
+ FX16_CONST(-0.6906507141345344), FX16_CONST(-0.7231884893065277),
+ FX16_CONST(-0.6917592583641576), FX16_CONST(-0.7221281939292155),
+ FX16_CONST(-0.6928661748174246), FX16_CONST(-0.7210661993145081),
+ FX16_CONST(-0.6939714608896538), FX16_CONST(-0.7200025079613819),
+ FX16_CONST(-0.6950751139800008), FX16_CONST(-0.7189371223728045),
+ FX16_CONST(-0.696177131491463), FX16_CONST(-0.7178700450557317),
+ FX16_CONST(-0.6972775108308864), FX16_CONST(-0.7168012785210996),
+ FX16_CONST(-0.6983762494089728), FX16_CONST(-0.7157308252838187),
+ FX16_CONST(-0.6994733446402839), FX16_CONST(-0.714658687862769),
+ FX16_CONST(-0.7005687939432482), FX16_CONST(-0.7135848687807937),
+ FX16_CONST(-0.7016625947401685), FX16_CONST(-0.7125093705646924),
+ FX16_CONST(-0.7027547444572251), FX16_CONST(-0.7114321957452167),
+ FX16_CONST(-0.7038452405244848), FX16_CONST(-0.7103533468570625),
+ FX16_CONST(-0.7049340803759049), FX16_CONST(-0.7092728264388657),
+ FX16_CONST(-0.7060212614493395), FX16_CONST(-0.7081906370331955),
+ FX16_CONST(-0.7071067811865475), FX16_CONST(-0.7071067811865477),
+ FX16_CONST(-0.7081906370331953), FX16_CONST(-0.7060212614493397),
+ FX16_CONST(-0.7092728264388655), FX16_CONST(-0.7049340803759051),
+ FX16_CONST(-0.7103533468570623), FX16_CONST(-0.703845240524485),
+ FX16_CONST(-0.7114321957452164), FX16_CONST(-0.7027547444572253),
+ FX16_CONST(-0.7125093705646922), FX16_CONST(-0.7016625947401687),
+ FX16_CONST(-0.7135848687807935), FX16_CONST(-0.7005687939432484),
+ FX16_CONST(-0.7146586878627688), FX16_CONST(-0.6994733446402841),
+ FX16_CONST(-0.7157308252838185), FX16_CONST(-0.698376249408973),
+ FX16_CONST(-0.7168012785210994), FX16_CONST(-0.6972775108308866),
+ FX16_CONST(-0.7178700450557315), FX16_CONST(-0.6961771314914632),
+ FX16_CONST(-0.7189371223728044), FX16_CONST(-0.695075113980001),
+ FX16_CONST(-0.7200025079613817), FX16_CONST(-0.693971460889654),
+ FX16_CONST(-0.7210661993145079), FX16_CONST(-0.6928661748174249),
+ FX16_CONST(-0.7221281939292152), FX16_CONST(-0.6917592583641579),
+ FX16_CONST(-0.7231884893065275), FX16_CONST(-0.6906507141345346),
+ FX16_CONST(-0.7242470829514668), FX16_CONST(-0.689540544737067),
+ FX16_CONST(-0.7253039723730607), FX16_CONST(-0.6884287527840905),
+ FX16_CONST(-0.7263591550843458), FX16_CONST(-0.6873153408917594),
+ FX16_CONST(-0.7274126286023757), FX16_CONST(-0.6862003116800387),
+ FX16_CONST(-0.7284643904482252), FX16_CONST(-0.6850836677727004),
+ FX16_CONST(-0.7295144381469968), FX16_CONST(-0.6839654117973156),
+ FX16_CONST(-0.7305627692278275), FX16_CONST(-0.6828455463852482),
+ FX16_CONST(-0.7316093812238925), FX16_CONST(-0.6817240741716498),
+ FX16_CONST(-0.7326542716724127), FX16_CONST(-0.6806009977954532),
+ FX16_CONST(-0.7336974381146601), FX16_CONST(-0.6794763198993651),
+ FX16_CONST(-0.7347388780959635), FX16_CONST(-0.6783500431298615),
+ FX16_CONST(-0.7357785891657134), FX16_CONST(-0.6772221701371806),
+ FX16_CONST(-0.7368165688773698), FX16_CONST(-0.676092703575316),
+ FX16_CONST(-0.7378528147884658), FX16_CONST(-0.6749616461020123),
+ FX16_CONST(-0.738887324460615), FX16_CONST(-0.6738290003787561),
+ FX16_CONST(-0.7399200954595161), FX16_CONST(-0.672694769070773),
+ FX16_CONST(-0.7409511253549589), FX16_CONST(-0.6715589548470187),
+ FX16_CONST(-0.741980411720831), FX16_CONST(-0.6704215603801732),
+ FX16_CONST(-0.7430079521351217), FX16_CONST(-0.669282588346636),
+ FX16_CONST(-0.7440337441799291), FX16_CONST(-0.6681420414265187),
+ FX16_CONST(-0.7450577854414658), FX16_CONST(-0.6669999223036376),
+ FX16_CONST(-0.7460800735100638), FX16_CONST(-0.6658562336655096),
+ FX16_CONST(-0.7471006059801799), FX16_CONST(-0.664710978203345),
+ FX16_CONST(-0.7481193804504035), FX16_CONST(-0.6635641586120399),
+ FX16_CONST(-0.749136394523459), FX16_CONST(-0.662415777590172),
+ FX16_CONST(-0.750151645806215), FX16_CONST(-0.6612658378399924),
+ FX16_CONST(-0.7511651319096864), FX16_CONST(-0.6601143420674205),
+ FX16_CONST(-0.7521768504490425), FX16_CONST(-0.6589612929820375),
+ FX16_CONST(-0.7531867990436124), FX16_CONST(-0.6578066932970787),
+ FX16_CONST(-0.7541949753168892), FX16_CONST(-0.656650545729429),
+ FX16_CONST(-0.7552013768965363), FX16_CONST(-0.6554928529996156),
+ FX16_CONST(-0.7562060014143944), FX16_CONST(-0.6543336178318007),
+ FX16_CONST(-0.7572088465064842), FX16_CONST(-0.6531728429537771),
+ FX16_CONST(-0.7582099098130151), FX16_CONST(-0.6520105310969597),
+ FX16_CONST(-0.759209188978388), FX16_CONST(-0.650846684996381),
+ FX16_CONST(-0.7602066816512024), FX16_CONST(-0.6496813073906831),
+ FX16_CONST(-0.761202385484262), FX16_CONST(-0.6485144010221122),
+ FX16_CONST(-0.7621962981345786), FX16_CONST(-0.6473459686365125),
+ FX16_CONST(-0.763188417263381), FX16_CONST(-0.6461760129833166),
+ FX16_CONST(-0.7641787405361166), FX16_CONST(-0.6450045368155441),
+ FX16_CONST(-0.765167265622459), FX16_CONST(-0.6438315428897915),
+ FX16_CONST(-0.766153990196313), FX16_CONST(-0.6426570339662268),
+ FX16_CONST(-0.7671389119358201), FX16_CONST(-0.6414810128085836),
+ FX16_CONST(-0.7681220285233652), FX16_CONST(-0.640303482184152),
+ FX16_CONST(-0.7691033376455795), FX16_CONST(-0.639124444863776),
+ FX16_CONST(-0.7700828369933479), FX16_CONST(-0.6379439036218442),
+ FX16_CONST(-0.7710605242618138), FX16_CONST(-0.6367618612362842),
+ FX16_CONST(-0.7720363971503846), FX16_CONST(-0.635578320488556),
+ FX16_CONST(-0.7730104533627367), FX16_CONST(-0.6343932841636459),
+ FX16_CONST(-0.7739826906068226), FX16_CONST(-0.6332067550500575),
+ FX16_CONST(-0.7749531065948738), FX16_CONST(-0.6320187359398092),
+ FX16_CONST(-0.7759216990434076), FX16_CONST(-0.6308292296284246),
+ FX16_CONST(-0.7768884656732326), FX16_CONST(-0.6296382389149269),
+ FX16_CONST(-0.7778534042094527), FX16_CONST(-0.6284457666018332),
+ FX16_CONST(-0.7788165123814756), FX16_CONST(-0.6272518154951444),
+ FX16_CONST(-0.7797777879230143), FX16_CONST(-0.6260563884043437),
+ FX16_CONST(-0.7807372285720944), FX16_CONST(-0.6248594881423865),
+ FX16_CONST(-0.7816948320710595), FX16_CONST(-0.6236611175256945),
+ FX16_CONST(-0.7826505961665758), FX16_CONST(-0.6224612793741497),
+ FX16_CONST(-0.7836045186096379), FX16_CONST(-0.621259976511088),
+ FX16_CONST(-0.784556597155575), FX16_CONST(-0.6200572117632894),
+ FX16_CONST(-0.7855068295640538), FX16_CONST(-0.6188529879609764),
+ FX16_CONST(-0.7864552135990858), FX16_CONST(-0.617647307937804),
+ FX16_CONST(-0.7874017470290315), FX16_CONST(-0.6164401745308535),
+ FX16_CONST(-0.7883464276266059), FX16_CONST(-0.6152315905806273),
+ FX16_CONST(-0.7892892531688854), FX16_CONST(-0.6140215589310387),
+ FX16_CONST(-0.7902302214373099), FX16_CONST(-0.6128100824294099),
+ FX16_CONST(-0.7911693302176901), FX16_CONST(-0.611597163926462),
+ FX16_CONST(-0.7921065773002124), FX16_CONST(-0.6103828062763094),
+ FX16_CONST(-0.7930419604794439), FX16_CONST(-0.609167012336453),
+ FX16_CONST(-0.7939754775543368), FX16_CONST(-0.6079497849677741),
+ FX16_CONST(-0.7949071263282368), FX16_CONST(-0.6067311270345248),
+ FX16_CONST(-0.7958369046088835), FX16_CONST(-0.6055110414043257),
+ FX16_CONST(-0.7967648102084187), FX16_CONST(-0.6042895309481561),
+ FX16_CONST(-0.7976908409433912), FX16_CONST(-0.603066598540348),
+ FX16_CONST(-0.7986149946347605), FX16_CONST(-0.6018422470585805),
+ FX16_CONST(-0.7995372691079048), FX16_CONST(-0.6006164793838693),
+ FX16_CONST(-0.8004576621926226), FX16_CONST(-0.5993892984005648),
+ FX16_CONST(-0.8013761717231401), FX16_CONST(-0.5981607069963424),
+ FX16_CONST(-0.8022927955381157), FX16_CONST(-0.5969307080621964),
+ FX16_CONST(-0.803207531480645), FX16_CONST(-0.5956993044924331),
+ FX16_CONST(-0.8041203773982655), FX16_CONST(-0.5944664991846649),
+ FX16_CONST(-0.8050313311429634), FX16_CONST(-0.5932322950398001),
+ FX16_CONST(-0.8059403905711762), FX16_CONST(-0.5919966949620411),
+ FX16_CONST(-0.8068475535437992), FX16_CONST(-0.5907597018588743),
+ FX16_CONST(-0.8077528179261905), FX16_CONST(-0.5895213186410638),
+ FX16_CONST(-0.8086561815881746), FX16_CONST(-0.5882815482226458),
+ FX16_CONST(-0.809557642404051), FX16_CONST(-0.5870403935209183),
+ FX16_CONST(-0.8104571982525947), FX16_CONST(-0.5857978574564391),
+ FX16_CONST(-0.8113548470170637), FX16_CONST(-0.5845539429530153),
+ FX16_CONST(-0.812250586585204), FX16_CONST(-0.5833086529376983),
+ FX16_CONST(-0.8131444148492537), FX16_CONST(-0.5820619903407753),
+ FX16_CONST(-0.8140363297059481), FX16_CONST(-0.580813958095765),
+ FX16_CONST(-0.8149263290565264), FX16_CONST(-0.579564559139406),
+ FX16_CONST(-0.8158144108067337), FX16_CONST(-0.5783137964116557),
+ FX16_CONST(-0.8167005728668278), FX16_CONST(-0.5770616728556796),
+ FX16_CONST(-0.8175848131515838), FX16_CONST(-0.5758081914178452),
+ FX16_CONST(-0.8184671295802983), FX16_CONST(-0.5745533550477163),
+ FX16_CONST(-0.8193475200767967), FX16_CONST(-0.5732971666980425),
+ FX16_CONST(-0.8202259825694345), FX16_CONST(-0.5720396293247573),
+ FX16_CONST(-0.8211025149911046), FX16_CONST(-0.5707807458869674),
+ FX16_CONST(-0.8219771152792416), FX16_CONST(-0.5695205193469471),
+ FX16_CONST(-0.8228497813758264), FX16_CONST(-0.5682589526701314),
+ FX16_CONST(-0.8237205112273911), FX16_CONST(-0.566996048825109),
+ FX16_CONST(-0.8245893027850251), FX16_CONST(-0.5657318107836135),
+ FX16_CONST(-0.8254561540043774), FX16_CONST(-0.5644662415205196),
+ FX16_CONST(-0.8263210628456634), FX16_CONST(-0.5631993440138341),
+ FX16_CONST(-0.8271840272736692), FX16_CONST(-0.5619311212446892),
+ FX16_CONST(-0.8280450452577555), FX16_CONST(-0.5606615761973365),
+ FX16_CONST(-0.8289041147718647), FX16_CONST(-0.5593907118591365),
+ FX16_CONST(-0.8297612337945229), FX16_CONST(-0.5581185312205563),
+ FX16_CONST(-0.8306164003088462), FX16_CONST(-0.5568450372751601),
+ FX16_CONST(-0.8314696123025452), FX16_CONST(-0.5555702330196022),
+ FX16_CONST(-0.8323208677679298), FX16_CONST(-0.5542941214536199),
+ FX16_CONST(-0.8331701647019129), FX16_CONST(-0.5530167055800279),
+ FX16_CONST(-0.8340175011060179), FX16_CONST(-0.5517379884047077),
+ FX16_CONST(-0.8348628749863799), FX16_CONST(-0.5504579729366049),
+ FX16_CONST(-0.8357062843537526), FX16_CONST(-0.5491766621877198),
+ FX16_CONST(-0.8365477272235121), FX16_CONST(-0.5478940591731001),
+ FX16_CONST(-0.8373872016156616), FX16_CONST(-0.5466101669108354),
+ FX16_CONST(-0.8382247055548379), FX16_CONST(-0.5453249884220468),
+ FX16_CONST(-0.8390602370703125), FX16_CONST(-0.5440385267308842),
+ FX16_CONST(-0.8398937941959994), FX16_CONST(-0.542750784864516),
+ FX16_CONST(-0.8407253749704581), FX16_CONST(-0.5414617658531234),
+ FX16_CONST(-0.8415549774368986), FX16_CONST(-0.5401714727298927),
+ FX16_CONST(-0.8423825996431856), FX16_CONST(-0.5388799085310089),
+ FX16_CONST(-0.8432082396418452), FX16_CONST(-0.5375870762956457),
+ FX16_CONST(-0.8440318954900663), FX16_CONST(-0.5362929790659633),
+ FX16_CONST(-0.8448535652497071), FX16_CONST(-0.5349976198870973),
+ FX16_CONST(-0.8456732469872992), FX16_CONST(-0.5337010018071529),
+ FX16_CONST(-0.8464909387740518), FX16_CONST(-0.5324031278771985),
+ FX16_CONST(-0.8473066386858581), FX16_CONST(-0.5311040011512553),
+ FX16_CONST(-0.8481203448032971), FX16_CONST(-0.5298036246862949),
+ FX16_CONST(-0.8489320552116396), FX16_CONST(-0.5285020015422286),
+ FX16_CONST(-0.8497417680008525), FX16_CONST(-0.5271991347819013),
+ FX16_CONST(-0.8505494812656036), FX16_CONST(-0.5258950274710845),
+ FX16_CONST(-0.8513551931052649), FX16_CONST(-0.5245896826784693),
+ FX16_CONST(-0.8521589016239196), FX16_CONST(-0.5232831034756568),
+ FX16_CONST(-0.8529606049303635), FX16_CONST(-0.5219752929371545),
+ FX16_CONST(-0.8537603011381114), FX16_CONST(-0.5206662541403672),
+ FX16_CONST(-0.8545579883654005), FX16_CONST(-0.5193559901655894),
+ FX16_CONST(-0.8553536647351957), FX16_CONST(-0.5180445040959999),
+ FX16_CONST(-0.8561473283751942), FX16_CONST(-0.5167317990176502),
+ FX16_CONST(-0.8569389774178287), FX16_CONST(-0.5154178780194633),
+ FX16_CONST(-0.857728610000272), FX16_CONST(-0.5141027441932218),
+ FX16_CONST(-0.8585162242644429), FX16_CONST(-0.512786400633563),
+ FX16_CONST(-0.8593018183570085), FX16_CONST(-0.5114688504379702),
+ FX16_CONST(-0.8600853904293899), FX16_CONST(-0.5101500967067673),
+ FX16_CONST(-0.8608669386377671), FX16_CONST(-0.5088301425431073),
+ FX16_CONST(-0.8616464611430812), FX16_CONST(-0.507508991052971),
+ FX16_CONST(-0.8624239561110405), FX16_CONST(-0.5061866453451553),
+ FX16_CONST(-0.8631994217121243), FX16_CONST(-0.5048631085312674),
+ FX16_CONST(-0.8639728561215865), FX16_CONST(-0.503538383725718),
+ FX16_CONST(-0.8647442575194622), FX16_CONST(-0.5022124740457111),
+ FX16_CONST(-0.865513624090569), FX16_CONST(-0.500885382611241),
+ FX16_CONST(-0.8662809540245129), FX16_CONST(-0.49955711254508195),
+ FX16_CONST(-0.8670462455156926), FX16_CONST(-0.4982276669727818),
+ FX16_CONST(-0.8678094967633033), FX16_CONST(-0.49689704902265436),
+ FX16_CONST(-0.8685707059713407), FX16_CONST(-0.495565261825773),
+ FX16_CONST(-0.8693298713486066), FX16_CONST(-0.49423230851596),
+ FX16_CONST(-0.8700869911087113), FX16_CONST(-0.4928981922297842),
+ FX16_CONST(-0.8708420634700789), FX16_CONST(-0.49156291610654995),
+ FX16_CONST(-0.8715950866559511), FX16_CONST(-0.49022648328829105),
+ FX16_CONST(-0.8723460588943912), FX16_CONST(-0.48888889691976367),
+ FX16_CONST(-0.8730949784182899), FX16_CONST(-0.48755016014843633),
+ FX16_CONST(-0.8738418434653666), FX16_CONST(-0.48621027612448664),
+ FX16_CONST(-0.8745866522781761), FX16_CONST(-0.4848692480007912),
+ FX16_CONST(-0.8753294031041109), FX16_CONST(-0.4835270789329187),
+ FX16_CONST(-0.8760700941954067), FX16_CONST(-0.48218377207912255),
+ FX16_CONST(-0.8768087238091454), FX16_CONST(-0.4808393306003344),
+ FX16_CONST(-0.8775452902072611), FX16_CONST(-0.47949375766015334),
+ FX16_CONST(-0.8782797916565415), FX16_CONST(-0.47814705642484323),
+ FX16_CONST(-0.8790122264286334), FX16_CONST(-0.47679923006332214),
+ FX16_CONST(-0.8797425928000475), FX16_CONST(-0.47545028174715576),
+ FX16_CONST(-0.8804708890521605), FX16_CONST(-0.4741002146505505),
+ FX16_CONST(-0.8811971134712219), FX16_CONST(-0.4727490319503432),
+ FX16_CONST(-0.8819212643483549), FX16_CONST(-0.47139673682599786),
+ FX16_CONST(-0.8826433399795628), FX16_CONST(-0.47004333245959573),
+ FX16_CONST(-0.8833633386657316), FX16_CONST(-0.4686888220358279),
+ FX16_CONST(-0.8840812587126351), FX16_CONST(-0.46733320874198825),
+ FX16_CONST(-0.8847970984309376), FX16_CONST(-0.4659764957679666),
+ FX16_CONST(-0.8855108561361997), FX16_CONST(-0.46461868630623815),
+ FX16_CONST(-0.8862225301488805), FX16_CONST(-0.46325978355186037),
+ FX16_CONST(-0.8869321187943422), FX16_CONST(-0.4618997907024628),
+ FX16_CONST(-0.887639620402854), FX16_CONST(-0.4605387109582399),
+ FX16_CONST(-0.888345033309596), FX16_CONST(-0.45917654752194464),
+ FX16_CONST(-0.8890483558546644), FX16_CONST(-0.4578133035988776),
+ FX16_CONST(-0.8897495863830727), FX16_CONST(-0.4564489823968842),
+ FX16_CONST(-0.8904487232447579), FX16_CONST(-0.45508358712634395),
+ FX16_CONST(-0.8911457647945833), FX16_CONST(-0.4537171210001638),
+ FX16_CONST(-0.8918407093923428), FX16_CONST(-0.45234958723377067),
+ FX16_CONST(-0.8925335554027644), FX16_CONST(-0.4509809890451043),
+ FX16_CONST(-0.8932243011955152), FX16_CONST(-0.44961132965460693),
+ FX16_CONST(-0.8939129451452031), FX16_CONST(-0.4482406122852201),
+ FX16_CONST(-0.8945994856313827), FX16_CONST(-0.4468688401623742),
+ FX16_CONST(-0.8952839210385576), FX16_CONST(-0.44549601651398163),
+ FX16_CONST(-0.8959662497561849), FX16_CONST(-0.44412214457042976),
+ FX16_CONST(-0.89664647017868), FX16_CONST(-0.4427472275645704),
+ FX16_CONST(-0.8973245807054182), FX16_CONST(-0.44137126873171695),
+ FX16_CONST(-0.8980005797407398), FX16_CONST(-0.43999427130963337),
+ FX16_CONST(-0.8986744656939538), FX16_CONST(-0.4386162385385276),
+ FX16_CONST(-0.8993462369793417), FX16_CONST(-0.4372371736610439),
+ FX16_CONST(-0.90001589201616), FX16_CONST(-0.435857079922256),
+ FX16_CONST(-0.9006834292286467), FX16_CONST(-0.43447596056965604),
+ FX16_CONST(-0.9013488470460219), FX16_CONST(-0.4330938188531521),
+ FX16_CONST(-0.9020121439024932), FX16_CONST(-0.4317106580250573),
+ FX16_CONST(-0.9026733182372588), FX16_CONST(-0.4303264813400825),
+ FX16_CONST(-0.9033323684945116), FX16_CONST(-0.42894129205533005),
+ FX16_CONST(-0.9039892931234431), FX16_CONST(-0.4275550934302825),
+ FX16_CONST(-0.9046440905782461), FX16_CONST(-0.4261678887267999),
+ FX16_CONST(-0.9052967593181187), FX16_CONST(-0.4247796812091089),
+ FX16_CONST(-0.9059472978072685), FX16_CONST(-0.423390474143796),
+ FX16_CONST(-0.9065957045149154), FX16_CONST(-0.4220002707997995),
+ FX16_CONST(-0.9072419779152956), FX16_CONST(-0.420609074448403),
+ FX16_CONST(-0.907886116487666), FX16_CONST(-0.4192168883632243),
+ FX16_CONST(-0.908528118716306), FX16_CONST(-0.4178237158202125),
+ FX16_CONST(-0.9091679830905224), FX16_CONST(-0.4164295600976372),
+ FX16_CONST(-0.9098057081046523), FX16_CONST(-0.4150344244760815),
+ FX16_CONST(-0.9104412922580669), FX16_CONST(-0.4136383122384351),
+ FX16_CONST(-0.9110747340551761), FX16_CONST(-0.4122412266698833),
+ FX16_CONST(-0.9117060320054298), FX16_CONST(-0.4108431710579042),
+ FX16_CONST(-0.9123351846233227), FX16_CONST(-0.40944414869225776),
+ FX16_CONST(-0.9129621904283982), FX16_CONST(-0.40804416286497863),
+ FX16_CONST(-0.9135870479452509), FX16_CONST(-0.40664321687036886),
+ FX16_CONST(-0.9142097557035305), FX16_CONST(-0.40524131400499036),
+ FX16_CONST(-0.914830312237946), FX16_CONST(-0.40383845756765446),
+ FX16_CONST(-0.9154487160882677), FX16_CONST(-0.40243465085941865),
+ FX16_CONST(-0.9160649657993317), FX16_CONST(-0.4010298971835757),
+ FX16_CONST(-0.9166790599210427), FX16_CONST(-0.39962419984564673),
+ FX16_CONST(-0.9172909970083777), FX16_CONST(-0.39821756215337417),
+ FX16_CONST(-0.9179007756213903), FX16_CONST(-0.39680998741671075),
+ FX16_CONST(-0.9185083943252121), FX16_CONST(-0.3954014789478166),
+ FX16_CONST(-0.9191138516900577), FX16_CONST(-0.3939920400610482),
+ FX16_CONST(-0.9197171462912274), FX16_CONST(-0.39258167407295147),
+ FX16_CONST(-0.9203182767091106), FX16_CONST(-0.3911703843022537),
+ FX16_CONST(-0.9209172415291893), FX16_CONST(-0.38975817406985697),
+ FX16_CONST(-0.9215140393420418), FX16_CONST(-0.38834504669882663),
+ FX16_CONST(-0.9221086687433451), FX16_CONST(-0.3869310055143888),
+ FX16_CONST(-0.9227011283338785), FX16_CONST(-0.3855160538439189),
+ FX16_CONST(-0.9232914167195276), FX16_CONST(-0.38410019501693493),
+ FX16_CONST(-0.9238795325112865), FX16_CONST(-0.38268343236509034),
+ FX16_CONST(-0.9244654743252625), FX16_CONST(-0.38126576922216276),
+ FX16_CONST(-0.9250492407826775), FX16_CONST(-0.37984720892405144),
+ FX16_CONST(-0.9256308305098727), FX16_CONST(-0.3784277548087657),
+ FX16_CONST(-0.9262102421383114), FX16_CONST(-0.3770074102164182),
+ FX16_CONST(-0.9267874743045819), FX16_CONST(-0.37558617848921705),
+ FX16_CONST(-0.9273625256504009), FX16_CONST(-0.3741640629714585),
+ FX16_CONST(-0.9279353948226177), FX16_CONST(-0.37274106700951615),
+ FX16_CONST(-0.9285060804732155), FX16_CONST(-0.37131719395183777),
+ FX16_CONST(-0.9290745812593157), FX16_CONST(-0.36989244714893416),
+ FX16_CONST(-0.9296408958431813), FX16_CONST(-0.3684668299533722),
+ FX16_CONST(-0.9302050228922192), FX16_CONST(-0.36704034571976696),
+ FX16_CONST(-0.9307669610789836), FX16_CONST(-0.3656129978047743),
+ FX16_CONST(-0.9313267090811803), FX16_CONST(-0.36418478956708017),
+ FX16_CONST(-0.931884265581668), FX16_CONST(-0.36275572436739734),
+ FX16_CONST(-0.9324396292684624), FX16_CONST(-0.36132580556845423),
+ FX16_CONST(-0.932992798834739), FX16_CONST(-0.35989503653498794),
+ FX16_CONST(-0.933543772978836), FX16_CONST(-0.35846342063373704),
+ FX16_CONST(-0.9340925504042588), FX16_CONST(-0.35703096123343037),
+ FX16_CONST(-0.9346391298196807), FX16_CONST(-0.3555976617047841),
+ FX16_CONST(-0.9351835099389476), FX16_CONST(-0.35416352542049045),
+ FX16_CONST(-0.9357256894810804), FX16_CONST(-0.3527285557552106),
+ FX16_CONST(-0.9362656671702784), FX16_CONST(-0.35129275608556687),
+ FX16_CONST(-0.9368034417359214), FX16_CONST(-0.34985612979013536),
+ FX16_CONST(-0.9373390119125748), FX16_CONST(-0.34841868024943484),
+ FX16_CONST(-0.9378723764399898), FX16_CONST(-0.3469804108459238),
+ FX16_CONST(-0.9384035340631082), FX16_CONST(-0.34554132496398904),
+ FX16_CONST(-0.9389324835320646), FX16_CONST(-0.34410142598993865),
+ FX16_CONST(-0.9394592236021897), FX16_CONST(-0.3426607173119949),
+ FX16_CONST(-0.9399837530340138), FX16_CONST(-0.34121920232028274),
+ FX16_CONST(-0.9405060705932683), FX16_CONST(-0.3397768844068271),
+ FX16_CONST(-0.9410261750508893), FX16_CONST(-0.33833376696554124),
+ FX16_CONST(-0.9415440651830208), FX16_CONST(-0.33688985339221994),
+ FX16_CONST(-0.9420597397710174), FX16_CONST(-0.3354451470845314),
+ FX16_CONST(-0.9425731976014468), FX16_CONST(-0.3339996514420098),
+ FX16_CONST(-0.9430844374660934), FX16_CONST(-0.3325533698660445),
+ FX16_CONST(-0.9435934581619603), FX16_CONST(-0.33110630575987654),
+ FX16_CONST(-0.9441002584912727), FX16_CONST(-0.3296584625285875),
+ FX16_CONST(-0.9446048372614804), FX16_CONST(-0.32820984357909233),
+ FX16_CONST(-0.9451071932852604), FX16_CONST(-0.3267604523201323),
+ FX16_CONST(-0.9456073253805212), FX16_CONST(-0.3253102921622633),
+ FX16_CONST(-0.9461052323704033), FX16_CONST(-0.3238593665178531),
+ FX16_CONST(-0.9466009130832835), FX16_CONST(-0.3224076788010699),
+ FX16_CONST(-0.9470943663527772), FX16_CONST(-0.32095523242787516),
+ FX16_CONST(-0.9475855910177412), FX16_CONST(-0.3195020308160154),
+ FX16_CONST(-0.9480745859222761), FX16_CONST(-0.3180480773850154),
+ FX16_CONST(-0.9485613499157302), FX16_CONST(-0.3165933755561662),
+ FX16_CONST(-0.9490458818527006), FX16_CONST(-0.31513792875252256),
+ FX16_CONST(-0.9495281805930367), FX16_CONST(-0.31368174039889146),
+ FX16_CONST(-0.9500082450018431), FX16_CONST(-0.3122248139218248),
+ FX16_CONST(-0.9504860739494816), FX16_CONST(-0.31076715274961203),
+ FX16_CONST(-0.950961666311575), FX16_CONST(-0.30930876031226906),
+ FX16_CONST(-0.9514350209690083), FX16_CONST(-0.3078496400415351),
+ FX16_CONST(-0.9519061368079323), FX16_CONST(-0.306389795370861),
+ FX16_CONST(-0.9523750127197659), FX16_CONST(-0.3049292297354023),
+ FX16_CONST(-0.9528416476011987), FX16_CONST(-0.30346794657201104),
+ FX16_CONST(-0.9533060403541936), FX16_CONST(-0.30200594931922853),
+ FX16_CONST(-0.9537681898859902), FX16_CONST(-0.30054324141727373),
+ FX16_CONST(-0.9542280951091056), FX16_CONST(-0.2990798263080406),
+ FX16_CONST(-0.9546857549413383), FX16_CONST(-0.2976157074350862),
+ FX16_CONST(-0.9551411683057708), FX16_CONST(-0.2961508882436237),
+ FX16_CONST(-0.9555943341307709), FX16_CONST(-0.2946853721805149),
+ FX16_CONST(-0.9560452513499963), FX16_CONST(-0.293219162694259),
+ FX16_CONST(-0.956493918902395), FX16_CONST(-0.2917522632349895),
+ FX16_CONST(-0.9569403357322088), FX16_CONST(-0.29028467725446244),
+ FX16_CONST(-0.957384500788976), FX16_CONST(-0.28881640820604937),
+ FX16_CONST(-0.957826413027533), FX16_CONST(-0.2873474595447293),
+ FX16_CONST(-0.9582660714080176), FX16_CONST(-0.28587783472708106),
+ FX16_CONST(-0.9587034748958715), FX16_CONST(-0.28440753721127215),
+ FX16_CONST(-0.9591386224618419), FX16_CONST(-0.2829365704570555),
+ FX16_CONST(-0.9595715130819845), FX16_CONST(-0.28146493792575794),
+ FX16_CONST(-0.960002145737666), FX16_CONST(-0.27999264308027305),
+ FX16_CONST(-0.9604305194155657), FX16_CONST(-0.2785196893850536),
+ FX16_CONST(-0.9608566331076795), FX16_CONST(-0.2770460803061003),
+ FX16_CONST(-0.9612804858113205), FX16_CONST(-0.27557181931095837),
+ FX16_CONST(-0.9617020765291225), FX16_CONST(-0.27409690986870644),
+ FX16_CONST(-0.9621214042690416), FX16_CONST(-0.27262135544994887),
+ FX16_CONST(-0.9625384680443593), FX16_CONST(-0.2711451595268078),
+ FX16_CONST(-0.9629532668736838), FX16_CONST(-0.26966832557291553),
+ FX16_CONST(-0.9633657997809539), FX16_CONST(-0.2681908570634035),
+ FX16_CONST(-0.9637760657954398), FX16_CONST(-0.26671275747489853),
+ FX16_CONST(-0.9641840639517458), FX16_CONST(-0.2652340302855118),
+ FX16_CONST(-0.9645897932898128), FX16_CONST(-0.26375467897483124),
+ FX16_CONST(-0.9649932528549202), FX16_CONST(-0.26227470702391414),
+ FX16_CONST(-0.9653944416976893), FX16_CONST(-0.2607941179152759),
+ FX16_CONST(-0.9657933588740836), FX16_CONST(-0.25931291513288646),
+ FX16_CONST(-0.9661900034454125), FX16_CONST(-0.25783110216215904),
+ FX16_CONST(-0.9665843744783331), FX16_CONST(-0.2563486824899428),
+ FX16_CONST(-0.9669764710448522), FX16_CONST(-0.25486565960451435),
+ FX16_CONST(-0.9673662922223284), FX16_CONST(-0.2533820369955706),
+ FX16_CONST(-0.9677538370934754), FX16_CONST(-0.25189781815421725),
+ FX16_CONST(-0.9681391047463623), FX16_CONST(-0.2504130065729654),
+ FX16_CONST(-0.9685220942744173), FX16_CONST(-0.24892760574572015),
+ FX16_CONST(-0.9689028047764289), FX16_CONST(-0.24744161916777313),
+ FX16_CONST(-0.9692812353565483), FX16_CONST(-0.24595505033579515),
+ FX16_CONST(-0.9696573851242923), FX16_CONST(-0.24446790274782454),
+ FX16_CONST(-0.970031253194544), FX16_CONST(-0.24298017990326412),
+ FX16_CONST(-0.9704028386875555), FX16_CONST(-0.2414918853028694),
+ FX16_CONST(-0.9707721407289504), FX16_CONST(-0.2400030224487414),
+ FX16_CONST(-0.9711391584497252), FX16_CONST(-0.2385135948443182),
+ FX16_CONST(-0.9715038909862517), FX16_CONST(-0.23702360599436767),
+ FX16_CONST(-0.9718663374802793), FX16_CONST(-0.2355330594049758),
+ FX16_CONST(-0.9722264970789363), FX16_CONST(-0.23404195858354357),
+ FX16_CONST(-0.9725843689347322), FX16_CONST(-0.23255030703877522),
+ FX16_CONST(-0.9729399522055602), FX16_CONST(-0.23105810828067094),
+ FX16_CONST(-0.9732932460546981), FX16_CONST(-0.22956536582051942),
+ FX16_CONST(-0.9736442496508119), FX16_CONST(-0.22807208317088612),
+ FX16_CONST(-0.9739929621679558), FX16_CONST(-0.22657826384561022),
+ FX16_CONST(-0.9743393827855759), FX16_CONST(-0.22508391135979292),
+ FX16_CONST(-0.9746835106885107), FX16_CONST(-0.2235890292297899),
+ FX16_CONST(-0.9750253450669942), FX16_CONST(-0.2220936209732033),
+ FX16_CONST(-0.9753648851166569), FX16_CONST(-0.22059769010887398),
+ FX16_CONST(-0.9757021300385285), FX16_CONST(-0.2191012401568701),
+ FX16_CONST(-0.976037079039039), FX16_CONST(-0.21760427463848378),
+ FX16_CONST(-0.9763697313300211), FX16_CONST(-0.2161067970762195),
+ FX16_CONST(-0.9767000861287118), FX16_CONST(-0.2146088109937866),
+ FX16_CONST(-0.9770281426577543), FX16_CONST(-0.21311031991609192),
+ FX16_CONST(-0.9773539001452), FX16_CONST(-0.21161132736922797),
+ FX16_CONST(-0.9776773578245099), FX16_CONST(-0.21011183688046986),
+ FX16_CONST(-0.977998514934557), FX16_CONST(-0.20861185197826357),
+ FX16_CONST(-0.9783173707196277), FX16_CONST(-0.20711137619221848),
+ FX16_CONST(-0.9786339244294232), FX16_CONST(-0.20561041305309902),
+ FX16_CONST(-0.9789481753190621), FX16_CONST(-0.20410896609281734),
+ FX16_CONST(-0.979260122649082), FX16_CONST(-0.20260703884442144),
+ FX16_CONST(-0.9795697656854405), FX16_CONST(-0.20110463484209207),
+ FX16_CONST(-0.9798771036995176), FX16_CONST(-0.19960175762113097),
+ FX16_CONST(-0.9801821359681174), FX16_CONST(-0.19809841071795342),
+ FX16_CONST(-0.9804848617734693), FX16_CONST(-0.19659459767008078),
+ FX16_CONST(-0.9807852804032303), FX16_CONST(-0.19509032201612866),
+ FX16_CONST(-0.9810833911504866), FX16_CONST(-0.19358558729580386),
+ FX16_CONST(-0.9813791933137546), FX16_CONST(-0.19208039704989252),
+ FX16_CONST(-0.9816726861969831), FX16_CONST(-0.19057475482025268),
+ FX16_CONST(-0.9819638691095554), FX16_CONST(-0.18906866414980597),
+ FX16_CONST(-0.9822527413662894), FX16_CONST(-0.18756212858253007),
+ FX16_CONST(-0.9825393022874412), FX16_CONST(-0.18605515166344697),
+ FX16_CONST(-0.9828235511987052), FX16_CONST(-0.18454773693861978),
+ FX16_CONST(-0.9831054874312163), FX16_CONST(-0.18303988795514095),
+ FX16_CONST(-0.9833851103215513), FX16_CONST(-0.18153160826112483),
+ FX16_CONST(-0.9836624192117301), FX16_CONST(-0.18002290140570007),
+ FX16_CONST(-0.9839374134492188), FX16_CONST(-0.17851377093899792),
+ FX16_CONST(-0.984210092386929), FX16_CONST(-0.177004220412149),
+ FX16_CONST(-0.9844804553832209), FX16_CONST(-0.1754942533772715),
+ FX16_CONST(-0.9847485018019042), FX16_CONST(-0.17398387338746374),
+ FX16_CONST(-0.9850142310122398), FX16_CONST(-0.17247308399679573),
+ FX16_CONST(-0.9852776423889411), FX16_CONST(-0.1709618887603017),
+ FX16_CONST(-0.9855387353121761), FX16_CONST(-0.1694502912339683),
+ FX16_CONST(-0.9857975091675674), FX16_CONST(-0.16793829497473134),
+ FX16_CONST(-0.9860539633461954), FX16_CONST(-0.1664259035404641),
+ FX16_CONST(-0.9863080972445987), FX16_CONST(-0.16491312048996976),
+ FX16_CONST(-0.9865599102647754), FX16_CONST(-0.16339994938297378),
+ FX16_CONST(-0.9868094018141854), FX16_CONST(-0.16188639378011224),
+ FX16_CONST(-0.987056571305751), FX16_CONST(-0.1603724572429285),
+ FX16_CONST(-0.9873014181578583), FX16_CONST(-0.15885814333386153),
+ FX16_CONST(-0.9875439417943593), FX16_CONST(-0.1573434556162382),
+ FX16_CONST(-0.9877841416445722), FX16_CONST(-0.15582839765426498),
+ FX16_CONST(-0.9880220171432835), FX16_CONST(-0.15431297301302058),
+ FX16_CONST(-0.9882575677307495), FX16_CONST(-0.15279718525844374),
+ FX16_CONST(-0.9884907928526966), FX16_CONST(-0.15128103795733036),
+ FX16_CONST(-0.9887216919603238), FX16_CONST(-0.1497645346773215),
+ FX16_CONST(-0.988950264510303), FX16_CONST(-0.1482476789868959),
+ FX16_CONST(-0.9891765099647809), FX16_CONST(-0.1467304744553623),
+ FX16_CONST(-0.9894004277913803), FX16_CONST(-0.14521292465284785),
+ FX16_CONST(-0.9896220174632008), FX16_CONST(-0.1436950331502947),
+ FX16_CONST(-0.9898412784588205), FX16_CONST(-0.14217680351944814),
+ FX16_CONST(-0.9900582102622971), FX16_CONST(-0.14065823933284916),
+ FX16_CONST(-0.9902728123631691), FX16_CONST(-0.13913934416382598),
+ FX16_CONST(-0.990485084256457), FX16_CONST(-0.13762012158648654),
+ FX16_CONST(-0.9906950254426646), FX16_CONST(-0.13610057517570653),
+ FX16_CONST(-0.99090263542778), FX16_CONST(-0.13458070850712636),
+ FX16_CONST(-0.9911079137232769), FX16_CONST(-0.13306052515713906),
+ FX16_CONST(-0.9913108598461154), FX16_CONST(-0.13154002870288295),
+ FX16_CONST(-0.9915114733187439), FX16_CONST(-0.13001922272223393),
+ FX16_CONST(-0.9917097536690995), FX16_CONST(-0.12849811079379359),
+ FX16_CONST(-0.9919057004306093), FX16_CONST(-0.12697669649688612),
+ FX16_CONST(-0.9920993131421918), FX16_CONST(-0.12545498341154632),
+ FX16_CONST(-0.9922905913482574), FX16_CONST(-0.12393297511851209),
+ FX16_CONST(-0.9924795345987101), FX16_CONST(-0.12241067519921596),
+ FX16_CONST(-0.9926661424489479), FX16_CONST(-0.12088808723577757),
+ FX16_CONST(-0.9928504144598651), FX16_CONST(-0.11936521481099169),
+ FX16_CONST(-0.9930323501978514), FX16_CONST(-0.11784206150832514),
+ FX16_CONST(-0.9932119492347945), FX16_CONST(-0.11631863091190477),
+ FX16_CONST(-0.9933892111480807), FX16_CONST(-0.11479492660650993),
+ FX16_CONST(-0.9935641355205953), FX16_CONST(-0.11327095217756492),
+ FX16_CONST(-0.9937367219407246), FX16_CONST(-0.111746711211127),
+ FX16_CONST(-0.9939069700023561), FX16_CONST(-0.11022220729388331),
+ FX16_CONST(-0.9940748793048794), FX16_CONST(-0.1086974440131388),
+ FX16_CONST(-0.9942404494531879), FX16_CONST(-0.10717242495680877),
+ FX16_CONST(-0.9944036800576791), FX16_CONST(-0.10564715371341038),
+ FX16_CONST(-0.9945645707342554), FX16_CONST(-0.10412163387205507),
+ FX16_CONST(-0.9947231211043257), FX16_CONST(-0.10259586902243661),
+ FX16_CONST(-0.9948793307948056), FX16_CONST(-0.10106986275482799),
+ FX16_CONST(-0.9950331994381186), FX16_CONST(-0.09954361866006935),
+ FX16_CONST(-0.9951847266721969), FX16_CONST(-0.09801714032956045),
+ FX16_CONST(-0.9953339121404822), FX16_CONST(-0.09649043135525316),
+ FX16_CONST(-0.9954807554919269), FX16_CONST(-0.09496349532963941),
+ FX16_CONST(-0.9956252563809943), FX16_CONST(-0.09343633584574804),
+ FX16_CONST(-0.9957674144676598), FX16_CONST(-0.09190895649713282),
+ FX16_CONST(-0.9959072294174117), FX16_CONST(-0.09038136087786491),
+ FX16_CONST(-0.996044700901252), FX16_CONST(-0.08885355258252436),
+ FX16_CONST(-0.9961798285956969), FX16_CONST(-0.08732553520619256),
+ FX16_CONST(-0.996312612182778), FX16_CONST(-0.08579731234444023),
+ FX16_CONST(-0.9964430513500426), FX16_CONST(-0.08426888759332424),
+ FX16_CONST(-0.9965711457905548), FX16_CONST(-0.0827402645493757),
+ FX16_CONST(-0.9966968952028961), FX16_CONST(-0.08121144680959229),
+ FX16_CONST(-0.9968202992911657), FX16_CONST(-0.0796824379714307),
+ FX16_CONST(-0.996941357764982), FX16_CONST(-0.07815324163279465),
+ FX16_CONST(-0.997060070339483), FX16_CONST(-0.07662386139203174),
+ FX16_CONST(-0.9971764367353261), FX16_CONST(-0.0750943008479214),
+ FX16_CONST(-0.9972904566786902), FX16_CONST(-0.07356456359966736),
+ FX16_CONST(-0.9974021299012753), FX16_CONST(-0.0720346532468891),
+ FX16_CONST(-0.9975114561403035), FX16_CONST(-0.07050457338961436),
+ FX16_CONST(-0.9976184351385196), FX16_CONST(-0.06897432762826708),
+ FX16_CONST(-0.9977230666441916), FX16_CONST(-0.06744391956366423),
+ FX16_CONST(-0.9978253504111116), FX16_CONST(-0.06591335279700383),
+ FX16_CONST(-0.997925286198596), FX16_CONST(-0.06438263092985731),
+ FX16_CONST(-0.9980228737714861), FX16_CONST(-0.06285175756416199),
+ FX16_CONST(-0.9981181129001492), FX16_CONST(-0.061320736302208995),
+ FX16_CONST(-0.9982110033604782), FX16_CONST(-0.05978957074664013),
+ FX16_CONST(-0.9983015449338928), FX16_CONST(-0.058258264500435857),
+ FX16_CONST(-0.9983897374073402), FX16_CONST(-0.056726821166907686),
+ FX16_CONST(-0.9984755805732948), FX16_CONST(-0.05519524434968971),
+ FX16_CONST(-0.9985590742297593), FX16_CONST(-0.053663537652731026),
+ FX16_CONST(-0.9986402181802652), FX16_CONST(-0.05213170468028366),
+ FX16_CONST(-0.9987190122338729), FX16_CONST(-0.050599749036899455),
+ FX16_CONST(-0.9987954562051724), FX16_CONST(-0.04906767432741803),
+ FX16_CONST(-0.9988695499142836), FX16_CONST(-0.04753548415695916),
+ FX16_CONST(-0.9989412931868569), FX16_CONST(-0.046003182130915206),
+ FX16_CONST(-0.9990106858540733), FX16_CONST(-0.044470771854939084),
+ FX16_CONST(-0.9990777277526454), FX16_CONST(-0.042938256934941084),
+ FX16_CONST(-0.9991424187248169), FX16_CONST(-0.04140564097707684),
+ FX16_CONST(-0.9992047586183639), FX16_CONST(-0.03987292758773975),
+ FX16_CONST(-0.9992647472865944), FX16_CONST(-0.03834012037355247),
+ FX16_CONST(-0.9993223845883494), FX16_CONST(-0.03680722294135933),
+ FX16_CONST(-0.9993776703880028), FX16_CONST(-0.035274238898214294),
+ FX16_CONST(-0.9994306045554617), FX16_CONST(-0.03374117185137776),
+ FX16_CONST(-0.999481186966167), FX16_CONST(-0.0322080254083046),
+ FX16_CONST(-0.9995294175010931), FX16_CONST(-0.030674803176636484),
+ FX16_CONST(-0.9995752960467492), FX16_CONST(-0.02914150876419431),
+ FX16_CONST(-0.9996188224951786), FX16_CONST(-0.027608145778966163),
+ FX16_CONST(-0.9996599967439592), FX16_CONST(-0.02607471782910416),
+ FX16_CONST(-0.9996988186962042), FX16_CONST(-0.02454122852291239),
+ FX16_CONST(-0.9997352882605617), FX16_CONST(-0.02300768146883931),
+ FX16_CONST(-0.9997694053512153), FX16_CONST(-0.021474080275469286),
+ FX16_CONST(-0.9998011698878843), FX16_CONST(-0.019940428551514944),
+ FX16_CONST(-0.9998305817958234), FX16_CONST(-0.018406729905805164),
+ FX16_CONST(-0.9998576410058239), FX16_CONST(-0.016872987947281894),
+ FX16_CONST(-0.9998823474542126), FX16_CONST(-0.015339206284988121),
+ FX16_CONST(-0.9999047010828529), FX16_CONST(-0.01380538852806025),
+ FX16_CONST(-0.9999247018391445), FX16_CONST(-0.012271538285720512),
+ FX16_CONST(-0.9999423496760239), FX16_CONST(-0.010737659167264916),
+ FX16_CONST(-0.9999576445519639), FX16_CONST(-0.009203754782060083),
+ FX16_CONST(-0.9999705864309741), FX16_CONST(-0.007669828739531199),
+ FX16_CONST(-0.9999811752826011), FX16_CONST(-0.006135884649154416),
+ FX16_CONST(-0.9999894110819284), FX16_CONST(-0.00460192612044835),
+ FX16_CONST(-0.9999952938095762), FX16_CONST(-0.0030679567629664827),
+ FX16_CONST(-0.9999988234517019), FX16_CONST(-0.0015339801862851105),
+ FX16_CONST(-1.0), FX16_CONST(-1.8369701987210297e-16),
+ FX16_CONST(-0.9999988234517019), FX16_CONST(0.0015339801862847432),
+ FX16_CONST(-0.9999952938095762), FX16_CONST(0.003067956762966115),
+ FX16_CONST(-0.9999894110819284), FX16_CONST(0.004601926120447982),
+ FX16_CONST(-0.9999811752826011), FX16_CONST(0.0061358846491540485),
+ FX16_CONST(-0.9999705864309741), FX16_CONST(0.007669828739530832),
+ FX16_CONST(-0.9999576445519639), FX16_CONST(0.009203754782059715),
+ FX16_CONST(-0.9999423496760239), FX16_CONST(0.010737659167264548),
+ FX16_CONST(-0.9999247018391445), FX16_CONST(0.012271538285720144),
+ FX16_CONST(-0.9999047010828529), FX16_CONST(0.013805388528059882),
+ FX16_CONST(-0.9998823474542126), FX16_CONST(0.015339206284987753),
+ FX16_CONST(-0.9998576410058239), FX16_CONST(0.016872987947281527),
+ FX16_CONST(-0.9998305817958234), FX16_CONST(0.018406729905804796),
+ FX16_CONST(-0.9998011698878843), FX16_CONST(0.019940428551514577),
+ FX16_CONST(-0.9997694053512153), FX16_CONST(0.021474080275468918),
+ FX16_CONST(-0.9997352882605617), FX16_CONST(0.023007681468838945),
+ FX16_CONST(-0.9996988186962042), FX16_CONST(0.02454122852291202),
+ FX16_CONST(-0.9996599967439592), FX16_CONST(0.026074717829103793),
+ FX16_CONST(-0.9996188224951786), FX16_CONST(0.027608145778965795),
+ FX16_CONST(-0.9995752960467492), FX16_CONST(0.02914150876419394),
+ FX16_CONST(-0.9995294175010931), FX16_CONST(0.030674803176636116),
+ FX16_CONST(-0.999481186966167), FX16_CONST(0.03220802540830423),
+ FX16_CONST(-0.9994306045554617), FX16_CONST(0.0337411718513774),
+ FX16_CONST(-0.9993776703880028), FX16_CONST(0.035274238898213926),
+ FX16_CONST(-0.9993223845883495), FX16_CONST(0.036807222941358964),
+ FX16_CONST(-0.9992647472865945), FX16_CONST(0.038340120373552104),
+ FX16_CONST(-0.9992047586183639), FX16_CONST(0.03987292758773938),
+ FX16_CONST(-0.9991424187248169), FX16_CONST(0.04140564097707647),
+ FX16_CONST(-0.9990777277526454), FX16_CONST(0.042938256934940716),
+ FX16_CONST(-0.9990106858540734), FX16_CONST(0.044470771854938716),
+ FX16_CONST(-0.9989412931868569), FX16_CONST(0.046003182130914845),
+ FX16_CONST(-0.9988695499142836), FX16_CONST(0.04753548415695879),
+ FX16_CONST(-0.9987954562051724), FX16_CONST(0.04906767432741766),
+ FX16_CONST(-0.9987190122338729), FX16_CONST(0.05059974903689909),
+ FX16_CONST(-0.9986402181802653), FX16_CONST(0.05213170468028329),
+ FX16_CONST(-0.9985590742297593), FX16_CONST(0.05366353765273066),
+ FX16_CONST(-0.9984755805732948), FX16_CONST(0.055195244349689344),
+ FX16_CONST(-0.9983897374073402), FX16_CONST(0.05672682116690732),
+ FX16_CONST(-0.9983015449338929), FX16_CONST(0.05825826450043549),
+ FX16_CONST(-0.9982110033604782), FX16_CONST(0.059789570746639764),
+ FX16_CONST(-0.9981181129001492), FX16_CONST(0.06132073630220863),
+ FX16_CONST(-0.9980228737714862), FX16_CONST(0.06285175756416163),
+ FX16_CONST(-0.997925286198596), FX16_CONST(0.06438263092985695),
+ FX16_CONST(-0.9978253504111116), FX16_CONST(0.06591335279700346),
+ FX16_CONST(-0.9977230666441916), FX16_CONST(0.06744391956366387),
+ FX16_CONST(-0.9976184351385196), FX16_CONST(0.06897432762826672),
+ FX16_CONST(-0.9975114561403035), FX16_CONST(0.070504573389614),
+ FX16_CONST(-0.9974021299012753), FX16_CONST(0.07203465324688872),
+ FX16_CONST(-0.9972904566786902), FX16_CONST(0.07356456359966698),
+ FX16_CONST(-0.9971764367353262), FX16_CONST(0.07509430084792104),
+ FX16_CONST(-0.997060070339483), FX16_CONST(0.07662386139203138),
+ FX16_CONST(-0.9969413577649822), FX16_CONST(0.07815324163279429),
+ FX16_CONST(-0.9968202992911657), FX16_CONST(0.07968243797143033),
+ FX16_CONST(-0.9966968952028961), FX16_CONST(0.08121144680959191),
+ FX16_CONST(-0.9965711457905548), FX16_CONST(0.08274026454937533),
+ FX16_CONST(-0.9964430513500426), FX16_CONST(0.08426888759332388),
+ FX16_CONST(-0.996312612182778), FX16_CONST(0.08579731234443985),
+ FX16_CONST(-0.9961798285956969), FX16_CONST(0.0873255352061922),
+ FX16_CONST(-0.9960447009012521), FX16_CONST(0.088853552582524),
+ FX16_CONST(-0.9959072294174117), FX16_CONST(0.09038136087786454),
+ FX16_CONST(-0.9957674144676598), FX16_CONST(0.09190895649713245),
+ FX16_CONST(-0.9956252563809943), FX16_CONST(0.09343633584574766),
+ FX16_CONST(-0.9954807554919269), FX16_CONST(0.09496349532963905),
+ FX16_CONST(-0.9953339121404823), FX16_CONST(0.0964904313552528),
+ FX16_CONST(-0.9951847266721969), FX16_CONST(0.09801714032956009),
+ FX16_CONST(-0.9950331994381186), FX16_CONST(0.09954361866006897),
+ FX16_CONST(-0.9948793307948056), FX16_CONST(0.10106986275482763),
+ FX16_CONST(-0.9947231211043257), FX16_CONST(0.10259586902243625),
+ FX16_CONST(-0.9945645707342554), FX16_CONST(0.1041216338720547),
+ FX16_CONST(-0.9944036800576791), FX16_CONST(0.10564715371341002),
+ FX16_CONST(-0.994240449453188), FX16_CONST(0.10717242495680841),
+ FX16_CONST(-0.9940748793048795), FX16_CONST(0.10869744401313844),
+ FX16_CONST(-0.9939069700023561), FX16_CONST(0.11022220729388293),
+ FX16_CONST(-0.9937367219407246), FX16_CONST(0.11174671121112664),
+ FX16_CONST(-0.9935641355205953), FX16_CONST(0.11327095217756455),
+ FX16_CONST(-0.9933892111480808), FX16_CONST(0.11479492660650957),
+ FX16_CONST(-0.9932119492347946), FX16_CONST(0.1163186309119044),
+ FX16_CONST(-0.9930323501978514), FX16_CONST(0.11784206150832478),
+ FX16_CONST(-0.9928504144598651), FX16_CONST(0.11936521481099133),
+ FX16_CONST(-0.992666142448948), FX16_CONST(0.1208880872357772),
+ FX16_CONST(-0.9924795345987101), FX16_CONST(0.1224106751992156),
+ FX16_CONST(-0.9922905913482574), FX16_CONST(0.12393297511851173),
+ FX16_CONST(-0.9920993131421918), FX16_CONST(0.12545498341154596),
+ FX16_CONST(-0.9919057004306093), FX16_CONST(0.12697669649688575),
+ FX16_CONST(-0.9917097536690995), FX16_CONST(0.12849811079379322),
+ FX16_CONST(-0.9915114733187439), FX16_CONST(0.13001922272223354),
+ FX16_CONST(-0.9913108598461154), FX16_CONST(0.1315400287028826),
+ FX16_CONST(-0.9911079137232769), FX16_CONST(0.1330605251571387),
+ FX16_CONST(-0.99090263542778), FX16_CONST(0.13458070850712597),
+ FX16_CONST(-0.9906950254426646), FX16_CONST(0.13610057517570617),
+ FX16_CONST(-0.990485084256457), FX16_CONST(0.13762012158648618),
+ FX16_CONST(-0.9902728123631692), FX16_CONST(0.13913934416382562),
+ FX16_CONST(-0.9900582102622971), FX16_CONST(0.1406582393328488),
+ FX16_CONST(-0.9898412784588205), FX16_CONST(0.14217680351944778),
+ FX16_CONST(-0.9896220174632009), FX16_CONST(0.14369503315029433),
+ FX16_CONST(-0.9894004277913804), FX16_CONST(0.1452129246528475),
+ FX16_CONST(-0.9891765099647809), FX16_CONST(0.14673047445536194),
+ FX16_CONST(-0.9889502645103031), FX16_CONST(0.14824767898689553),
+ FX16_CONST(-0.9887216919603238), FX16_CONST(0.14976453467732115),
+ FX16_CONST(-0.9884907928526967), FX16_CONST(0.15128103795733),
+ FX16_CONST(-0.9882575677307495), FX16_CONST(0.15279718525844338),
+ FX16_CONST(-0.9880220171432835), FX16_CONST(0.15431297301302022),
+ FX16_CONST(-0.9877841416445723), FX16_CONST(0.15582839765426462),
+ FX16_CONST(-0.9875439417943593), FX16_CONST(0.1573434556162378),
+ FX16_CONST(-0.9873014181578584), FX16_CONST(0.15885814333386117),
+ FX16_CONST(-0.9870565713057511), FX16_CONST(0.16037245724292815),
+ FX16_CONST(-0.9868094018141854), FX16_CONST(0.16188639378011188),
+ FX16_CONST(-0.9865599102647754), FX16_CONST(0.16339994938297342),
+ FX16_CONST(-0.9863080972445988), FX16_CONST(0.1649131204899694),
+ FX16_CONST(-0.9860539633461955), FX16_CONST(0.16642590354046374),
+ FX16_CONST(-0.9857975091675675), FX16_CONST(0.16793829497473098),
+ FX16_CONST(-0.9855387353121761), FX16_CONST(0.16945029123396793),
+ FX16_CONST(-0.9852776423889412), FX16_CONST(0.17096188876030133),
+ FX16_CONST(-0.98501423101224), FX16_CONST(0.17247308399679537),
+ FX16_CONST(-0.9847485018019043), FX16_CONST(0.17398387338746338),
+ FX16_CONST(-0.9844804553832209), FX16_CONST(0.17549425337727115),
+ FX16_CONST(-0.9842100923869291), FX16_CONST(0.17700422041214864),
+ FX16_CONST(-0.9839374134492189), FX16_CONST(0.17851377093899756),
+ FX16_CONST(-0.9836624192117303), FX16_CONST(0.1800229014056997),
+ FX16_CONST(-0.9833851103215513), FX16_CONST(0.18153160826112447),
+ FX16_CONST(-0.9831054874312164), FX16_CONST(0.1830398879551406),
+ FX16_CONST(-0.9828235511987053), FX16_CONST(0.1845477369386194),
+ FX16_CONST(-0.9825393022874412), FX16_CONST(0.1860551516634466),
+ FX16_CONST(-0.9822527413662894), FX16_CONST(0.1875621285825297),
+ FX16_CONST(-0.9819638691095554), FX16_CONST(0.1890686641498056),
+ FX16_CONST(-0.9816726861969832), FX16_CONST(0.19057475482025232),
+ FX16_CONST(-0.9813791933137547), FX16_CONST(0.19208039704989216),
+ FX16_CONST(-0.9810833911504867), FX16_CONST(0.1935855872958035),
+ FX16_CONST(-0.9807852804032304), FX16_CONST(0.1950903220161283),
+ FX16_CONST(-0.9804848617734693), FX16_CONST(0.19659459767008042),
+ FX16_CONST(-0.9801821359681175), FX16_CONST(0.19809841071795306),
+ FX16_CONST(-0.9798771036995177), FX16_CONST(0.1996017576211306),
+ FX16_CONST(-0.9795697656854406), FX16_CONST(0.2011046348420917),
+ FX16_CONST(-0.979260122649082), FX16_CONST(0.20260703884442108),
+ FX16_CONST(-0.9789481753190622), FX16_CONST(0.20410896609281698),
+ FX16_CONST(-0.9786339244294233), FX16_CONST(0.20561041305309866),
+ FX16_CONST(-0.9783173707196278), FX16_CONST(0.20711137619221812),
+ FX16_CONST(-0.9779985149345571), FX16_CONST(0.2086118519782632),
+ FX16_CONST(-0.97767735782451), FX16_CONST(0.2101118368804695),
+ FX16_CONST(-0.9773539001452), FX16_CONST(0.2116113273692276),
+ FX16_CONST(-0.9770281426577543), FX16_CONST(0.21311031991609156),
+ FX16_CONST(-0.976700086128712), FX16_CONST(0.21460881099378626),
+ FX16_CONST(-0.9763697313300213), FX16_CONST(0.21610679707621913),
+ FX16_CONST(-0.9760370790390391), FX16_CONST(0.21760427463848342),
+ FX16_CONST(-0.9757021300385286), FX16_CONST(0.21910124015686974),
+ FX16_CONST(-0.975364885116657), FX16_CONST(0.22059769010887362),
+ FX16_CONST(-0.9750253450669942), FX16_CONST(0.22209362097320293),
+ FX16_CONST(-0.9746835106885108), FX16_CONST(0.22358902922978954),
+ FX16_CONST(-0.974339382785576), FX16_CONST(0.22508391135979255),
+ FX16_CONST(-0.973992962167956), FX16_CONST(0.22657826384560986),
+ FX16_CONST(-0.9736442496508119), FX16_CONST(0.22807208317088576),
+ FX16_CONST(-0.9732932460546981), FX16_CONST(0.22956536582051906),
+ FX16_CONST(-0.9729399522055603), FX16_CONST(0.23105810828067058),
+ FX16_CONST(-0.9725843689347323), FX16_CONST(0.23255030703877488),
+ FX16_CONST(-0.9722264970789364), FX16_CONST(0.2340419585835432),
+ FX16_CONST(-0.9718663374802794), FX16_CONST(0.23553305940497546),
+ FX16_CONST(-0.9715038909862518), FX16_CONST(0.2370236059943673),
+ FX16_CONST(-0.9711391584497253), FX16_CONST(0.23851359484431783),
+ FX16_CONST(-0.9707721407289505), FX16_CONST(0.24000302244874103),
+ FX16_CONST(-0.9704028386875555), FX16_CONST(0.24149188530286905),
+ FX16_CONST(-0.970031253194544), FX16_CONST(0.24298017990326376),
+ FX16_CONST(-0.9696573851242924), FX16_CONST(0.24446790274782418),
+ FX16_CONST(-0.9692812353565484), FX16_CONST(0.2459550503357948),
+ FX16_CONST(-0.968902804776429), FX16_CONST(0.24744161916777277),
+ FX16_CONST(-0.9685220942744174), FX16_CONST(0.2489276057457198),
+ FX16_CONST(-0.9681391047463624), FX16_CONST(0.25041300657296506),
+ FX16_CONST(-0.9677538370934755), FX16_CONST(0.2518978181542169),
+ FX16_CONST(-0.9673662922223285), FX16_CONST(0.25338203699557027),
+ FX16_CONST(-0.9669764710448523), FX16_CONST(0.25486565960451396),
+ FX16_CONST(-0.9665843744783332), FX16_CONST(0.25634868248994247),
+ FX16_CONST(-0.9661900034454126), FX16_CONST(0.2578311021621587),
+ FX16_CONST(-0.9657933588740837), FX16_CONST(0.2593129151328861),
+ FX16_CONST(-0.9653944416976894), FX16_CONST(0.2607941179152755),
+ FX16_CONST(-0.9649932528549203), FX16_CONST(0.2622747070239138),
+ FX16_CONST(-0.9645897932898129), FX16_CONST(0.26375467897483085),
+ FX16_CONST(-0.9641840639517459), FX16_CONST(0.26523403028551146),
+ FX16_CONST(-0.96377606579544), FX16_CONST(0.2667127574748982),
+ FX16_CONST(-0.963365799780954), FX16_CONST(0.2681908570634031),
+ FX16_CONST(-0.9629532668736839), FX16_CONST(0.2696683255729152),
+ FX16_CONST(-0.9625384680443594), FX16_CONST(0.2711451595268074),
+ FX16_CONST(-0.9621214042690417), FX16_CONST(0.27262135544994853),
+ FX16_CONST(-0.9617020765291227), FX16_CONST(0.2740969098687061),
+ FX16_CONST(-0.9612804858113206), FX16_CONST(0.27557181931095803),
+ FX16_CONST(-0.9608566331076797), FX16_CONST(0.27704608030609995),
+ FX16_CONST(-0.9604305194155658), FX16_CONST(0.2785196893850533),
+ FX16_CONST(-0.9600021457376661), FX16_CONST(0.2799926430802727),
+ FX16_CONST(-0.9595715130819846), FX16_CONST(0.2814649379257576),
+ FX16_CONST(-0.959138622461842), FX16_CONST(0.2829365704570551),
+ FX16_CONST(-0.9587034748958716), FX16_CONST(0.28440753721127177),
+ FX16_CONST(-0.9582660714080177), FX16_CONST(0.28587783472708067),
+ FX16_CONST(-0.957826413027533), FX16_CONST(0.2873474595447289),
+ FX16_CONST(-0.9573845007889761), FX16_CONST(0.28881640820604904),
+ FX16_CONST(-0.9569403357322089), FX16_CONST(0.29028467725446205),
+ FX16_CONST(-0.9564939189023951), FX16_CONST(0.29175226323498915),
+ FX16_CONST(-0.9560452513499964), FX16_CONST(0.2932191626942587),
+ FX16_CONST(-0.955594334130771), FX16_CONST(0.2946853721805145),
+ FX16_CONST(-0.9551411683057709), FX16_CONST(0.2961508882436233),
+ FX16_CONST(-0.9546857549413384), FX16_CONST(0.29761570743508586),
+ FX16_CONST(-0.9542280951091057), FX16_CONST(0.29907982630804025),
+ FX16_CONST(-0.9537681898859903), FX16_CONST(0.3005432414172734),
+ FX16_CONST(-0.9533060403541939), FX16_CONST(0.30200594931922814),
+ FX16_CONST(-0.9528416476011988), FX16_CONST(0.3034679465720107),
+ FX16_CONST(-0.952375012719766), FX16_CONST(0.304929229735402),
+ FX16_CONST(-0.9519061368079325), FX16_CONST(0.30638979537086064),
+ FX16_CONST(-0.9514350209690084), FX16_CONST(0.30784964004153476),
+ FX16_CONST(-0.9509616663115751), FX16_CONST(0.3093087603122687),
+ FX16_CONST(-0.9504860739494817), FX16_CONST(0.31076715274961164),
+ FX16_CONST(-0.9500082450018432), FX16_CONST(0.3122248139218244),
+ FX16_CONST(-0.9495281805930368), FX16_CONST(0.31368174039889113),
+ FX16_CONST(-0.9490458818527007), FX16_CONST(0.31513792875252217),
+ FX16_CONST(-0.9485613499157303), FX16_CONST(0.3165933755561658),
+ FX16_CONST(-0.9480745859222762), FX16_CONST(0.318048077385015),
+ FX16_CONST(-0.9475855910177413), FX16_CONST(0.3195020308160151),
+ FX16_CONST(-0.9470943663527773), FX16_CONST(0.32095523242787477),
+ FX16_CONST(-0.9466009130832836), FX16_CONST(0.3224076788010696),
+ FX16_CONST(-0.9461052323704034), FX16_CONST(0.32385936651785274),
+ FX16_CONST(-0.9456073253805213), FX16_CONST(0.3253102921622629),
+ FX16_CONST(-0.9451071932852605), FX16_CONST(0.32676045232013196),
+ FX16_CONST(-0.9446048372614805), FX16_CONST(0.328209843579092),
+ FX16_CONST(-0.9441002584912728), FX16_CONST(0.32965846252858716),
+ FX16_CONST(-0.9435934581619604), FX16_CONST(0.3311063057598762),
+ FX16_CONST(-0.9430844374660935), FX16_CONST(0.33255336986604417),
+ FX16_CONST(-0.9425731976014469), FX16_CONST(0.3339996514420095),
+ FX16_CONST(-0.9420597397710175), FX16_CONST(0.33544514708453105),
+ FX16_CONST(-0.9415440651830209), FX16_CONST(0.3368898533922196),
+ FX16_CONST(-0.9410261750508894), FX16_CONST(0.33833376696554085),
+ FX16_CONST(-0.9405060705932684), FX16_CONST(0.33977688440682674),
+ FX16_CONST(-0.9399837530340139), FX16_CONST(0.3412192023202824),
+ FX16_CONST(-0.9394592236021898), FX16_CONST(0.34266071731199454),
+ FX16_CONST(-0.9389324835320647), FX16_CONST(0.3441014259899383),
+ FX16_CONST(-0.9384035340631083), FX16_CONST(0.3455413249639887),
+ FX16_CONST(-0.9378723764399899), FX16_CONST(0.34698041084592346),
+ FX16_CONST(-0.937339011912575), FX16_CONST(0.3484186802494345),
+ FX16_CONST(-0.9368034417359216), FX16_CONST(0.34985612979013503),
+ FX16_CONST(-0.9362656671702785), FX16_CONST(0.35129275608556654),
+ FX16_CONST(-0.9357256894810805), FX16_CONST(0.3527285557552103),
+ FX16_CONST(-0.9351835099389477), FX16_CONST(0.35416352542049007),
+ FX16_CONST(-0.9346391298196808), FX16_CONST(0.35559766170478374),
+ FX16_CONST(-0.9340925504042589), FX16_CONST(0.35703096123343003),
+ FX16_CONST(-0.9335437729788362), FX16_CONST(0.3584634206337367),
+ FX16_CONST(-0.9329927988347391), FX16_CONST(0.3598950365349876),
+ FX16_CONST(-0.9324396292684626), FX16_CONST(0.3613258055684539),
+ FX16_CONST(-0.9318842655816681), FX16_CONST(0.362755724367397),
+ FX16_CONST(-0.9313267090811805), FX16_CONST(0.36418478956707984),
+ FX16_CONST(-0.9307669610789837), FX16_CONST(0.36561299780477396),
+ FX16_CONST(-0.9302050228922193), FX16_CONST(0.36704034571976657),
+ FX16_CONST(-0.9296408958431814), FX16_CONST(0.3684668299533719),
+ FX16_CONST(-0.9290745812593159), FX16_CONST(0.3698924471489338),
+ FX16_CONST(-0.9285060804732156), FX16_CONST(0.3713171939518374),
+ FX16_CONST(-0.9279353948226179), FX16_CONST(0.3727410670095158),
+ FX16_CONST(-0.927362525650401), FX16_CONST(0.37416406297145816),
+ FX16_CONST(-0.926787474304582), FX16_CONST(0.3755861784892167),
+ FX16_CONST(-0.9262102421383115), FX16_CONST(0.37700741021641787),
+ FX16_CONST(-0.9256308305098728), FX16_CONST(0.37842775480876534),
+ FX16_CONST(-0.9250492407826776), FX16_CONST(0.3798472089240511),
+ FX16_CONST(-0.9244654743252626), FX16_CONST(0.38126576922216243),
+ FX16_CONST(-0.9238795325112866), FX16_CONST(0.38268343236509),
+ FX16_CONST(-0.9232914167195279), FX16_CONST(0.3841001950169346),
+ FX16_CONST(-0.9227011283338787), FX16_CONST(0.38551605384391857),
+ FX16_CONST(-0.9221086687433452), FX16_CONST(0.38693100551438847),
+ FX16_CONST(-0.9215140393420419), FX16_CONST(0.3883450466988263),
+ FX16_CONST(-0.9209172415291894), FX16_CONST(0.38975817406985663),
+ FX16_CONST(-0.9203182767091108), FX16_CONST(0.39117038430225337),
+ FX16_CONST(-0.9197171462912275), FX16_CONST(0.39258167407295114),
+ FX16_CONST(-0.9191138516900579), FX16_CONST(0.3939920400610479),
+ FX16_CONST(-0.9185083943252123), FX16_CONST(0.39540147894781624),
+ FX16_CONST(-0.9179007756213904), FX16_CONST(0.3968099874167104),
+ FX16_CONST(-0.9172909970083778), FX16_CONST(0.39821756215337384),
+ FX16_CONST(-0.9166790599210428), FX16_CONST(0.3996241998456464),
+ FX16_CONST(-0.9160649657993318), FX16_CONST(0.40102989718357535),
+ FX16_CONST(-0.9154487160882678), FX16_CONST(0.4024346508594183),
+ FX16_CONST(-0.9148303122379462), FX16_CONST(0.40383845756765413),
+ FX16_CONST(-0.9142097557035306), FX16_CONST(0.40524131400499),
+ FX16_CONST(-0.913587047945251), FX16_CONST(0.4066432168703685),
+ FX16_CONST(-0.9129621904283983), FX16_CONST(0.4080441628649783),
+ FX16_CONST(-0.9123351846233229), FX16_CONST(0.40944414869225737),
+ FX16_CONST(-0.9117060320054299), FX16_CONST(0.41084317105790386),
+ FX16_CONST(-0.9110747340551762), FX16_CONST(0.41224122666988294),
+ FX16_CONST(-0.9104412922580671), FX16_CONST(0.4136383122384348),
+ FX16_CONST(-0.9098057081046524), FX16_CONST(0.4150344244760812),
+ FX16_CONST(-0.9091679830905225), FX16_CONST(0.4164295600976369),
+ FX16_CONST(-0.9085281187163062), FX16_CONST(0.41782371582021216),
+ FX16_CONST(-0.9078861164876663), FX16_CONST(0.41921688836322396),
+ FX16_CONST(-0.9072419779152958), FX16_CONST(0.4206090744484027),
+ FX16_CONST(-0.9065957045149156), FX16_CONST(0.4220002707997992),
+ FX16_CONST(-0.9059472978072687), FX16_CONST(0.42339047414379566),
+ FX16_CONST(-0.9052967593181189), FX16_CONST(0.4247796812091086),
+ FX16_CONST(-0.9046440905782462), FX16_CONST(0.42616788872679956),
+ FX16_CONST(-0.9039892931234433), FX16_CONST(0.42755509343028214),
+ FX16_CONST(-0.9033323684945117), FX16_CONST(0.4289412920553297),
+ FX16_CONST(-0.902673318237259), FX16_CONST(0.43032648134008217),
+ FX16_CONST(-0.9020121439024933), FX16_CONST(0.431710658025057),
+ FX16_CONST(-0.9013488470460221), FX16_CONST(0.4330938188531518),
+ FX16_CONST(-0.9006834292286469), FX16_CONST(0.4344759605696557),
+ FX16_CONST(-0.9000158920161602), FX16_CONST(0.43585707992225564),
+ FX16_CONST(-0.8993462369793418), FX16_CONST(0.4372371736610436),
+ FX16_CONST(-0.898674465693954), FX16_CONST(0.43861623853852727),
+ FX16_CONST(-0.89800057974074), FX16_CONST(0.43999427130963303),
+ FX16_CONST(-0.8973245807054183), FX16_CONST(0.4413712687317166),
+ FX16_CONST(-0.8966464701786802), FX16_CONST(0.4427472275645701),
+ FX16_CONST(-0.895966249756185), FX16_CONST(0.4441221445704294),
+ FX16_CONST(-0.8952839210385577), FX16_CONST(0.4454960165139813),
+ FX16_CONST(-0.8945994856313828), FX16_CONST(0.4468688401623739),
+ FX16_CONST(-0.8939129451452034), FX16_CONST(0.4482406122852198),
+ FX16_CONST(-0.8932243011955153), FX16_CONST(0.4496113296546066),
+ FX16_CONST(-0.8925335554027646), FX16_CONST(0.45098098904510403),
+ FX16_CONST(-0.891840709392343), FX16_CONST(0.4523495872337704),
+ FX16_CONST(-0.8911457647945834), FX16_CONST(0.4537171210001635),
+ FX16_CONST(-0.890448723244758), FX16_CONST(0.4550835871263436),
+ FX16_CONST(-0.8897495863830729), FX16_CONST(0.45644898239688386),
+ FX16_CONST(-0.8890483558546646), FX16_CONST(0.4578133035988773),
+ FX16_CONST(-0.8883450333095962), FX16_CONST(0.45917654752194437),
+ FX16_CONST(-0.8876396204028542), FX16_CONST(0.46053871095823956),
+ FX16_CONST(-0.8869321187943423), FX16_CONST(0.46189979070246245),
+ FX16_CONST(-0.8862225301488807), FX16_CONST(0.46325978355186004),
+ FX16_CONST(-0.8855108561362), FX16_CONST(0.4646186863062378),
+ FX16_CONST(-0.8847970984309377), FX16_CONST(0.4659764957679663),
+ FX16_CONST(-0.8840812587126353), FX16_CONST(0.4673332087419879),
+ FX16_CONST(-0.8833633386657318), FX16_CONST(0.46868882203582757),
+ FX16_CONST(-0.8826433399795629), FX16_CONST(0.4700433324595954),
+ FX16_CONST(-0.881921264348355), FX16_CONST(0.4713967368259976),
+ FX16_CONST(-0.881197113471222), FX16_CONST(0.47274903195034285),
+ FX16_CONST(-0.8804708890521606), FX16_CONST(0.4741002146505502),
+ FX16_CONST(-0.8797425928000476), FX16_CONST(0.4754502817471554),
+ FX16_CONST(-0.8790122264286336), FX16_CONST(0.4767992300633218),
+ FX16_CONST(-0.8782797916565416), FX16_CONST(0.4781470564248429),
+ FX16_CONST(-0.8775452902072612), FX16_CONST(0.479493757660153),
+ FX16_CONST(-0.8768087238091457), FX16_CONST(0.48083933060033407),
+ FX16_CONST(-0.8760700941954069), FX16_CONST(0.4821837720791222),
+ FX16_CONST(-0.875329403104111), FX16_CONST(0.48352707893291835),
+ FX16_CONST(-0.8745866522781762), FX16_CONST(0.4848692480007909),
+ FX16_CONST(-0.8738418434653669), FX16_CONST(0.4862102761244863),
+ FX16_CONST(-0.8730949784182901), FX16_CONST(0.487550160148436),
+ FX16_CONST(-0.8723460588943914), FX16_CONST(0.4888888969197634),
+ FX16_CONST(-0.8715950866559513), FX16_CONST(0.4902264832882907),
+ FX16_CONST(-0.8708420634700791), FX16_CONST(0.4915629161065497),
+ FX16_CONST(-0.8700869911087115), FX16_CONST(0.49289819222978387),
+ FX16_CONST(-0.8693298713486067), FX16_CONST(0.49423230851595973),
+ FX16_CONST(-0.8685707059713408), FX16_CONST(0.49556526182577265),
+ FX16_CONST(-0.8678094967633035), FX16_CONST(0.496897049022654),
+ FX16_CONST(-0.8670462455156929), FX16_CONST(0.4982276669727815),
+ FX16_CONST(-0.8662809540245131), FX16_CONST(0.49955711254508167),
+ FX16_CONST(-0.8655136240905691), FX16_CONST(0.5008853826112407),
+ FX16_CONST(-0.8647442575194624), FX16_CONST(0.5022124740457108),
+ FX16_CONST(-0.8639728561215866), FX16_CONST(0.5035383837257178),
+ FX16_CONST(-0.8631994217121244), FX16_CONST(0.5048631085312671),
+ FX16_CONST(-0.8624239561110407), FX16_CONST(0.506186645345155),
+ FX16_CONST(-0.8616464611430814), FX16_CONST(0.5075089910529706),
+ FX16_CONST(-0.8608669386377673), FX16_CONST(0.508830142543107),
+ FX16_CONST(-0.8600853904293901), FX16_CONST(0.5101500967067669),
+ FX16_CONST(-0.8593018183570087), FX16_CONST(0.5114688504379699),
+ FX16_CONST(-0.858516224264443), FX16_CONST(0.5127864006335626),
+ FX16_CONST(-0.8577286100002722), FX16_CONST(0.5141027441932216),
+ FX16_CONST(-0.8569389774178288), FX16_CONST(0.5154178780194629),
+ FX16_CONST(-0.8561473283751945), FX16_CONST(0.5167317990176499),
+ FX16_CONST(-0.8553536647351959), FX16_CONST(0.5180445040959996),
+ FX16_CONST(-0.8545579883654008), FX16_CONST(0.5193559901655892),
+ FX16_CONST(-0.8537603011381115), FX16_CONST(0.5206662541403668),
+ FX16_CONST(-0.8529606049303637), FX16_CONST(0.5219752929371542),
+ FX16_CONST(-0.8521589016239198), FX16_CONST(0.5232831034756564),
+ FX16_CONST(-0.8513551931052651), FX16_CONST(0.5245896826784691),
+ FX16_CONST(-0.8505494812656038), FX16_CONST(0.5258950274710842),
+ FX16_CONST(-0.8497417680008528), FX16_CONST(0.527199134781901),
+ FX16_CONST(-0.8489320552116397), FX16_CONST(0.5285020015422283),
+ FX16_CONST(-0.8481203448032973), FX16_CONST(0.5298036246862946),
+ FX16_CONST(-0.8473066386858583), FX16_CONST(0.531104001151255),
+ FX16_CONST(-0.8464909387740519), FX16_CONST(0.5324031278771981),
+ FX16_CONST(-0.8456732469872993), FX16_CONST(0.5337010018071525),
+ FX16_CONST(-0.8448535652497072), FX16_CONST(0.5349976198870969),
+ FX16_CONST(-0.8440318954900665), FX16_CONST(0.536292979065963),
+ FX16_CONST(-0.8432082396418454), FX16_CONST(0.5375870762956455),
+ FX16_CONST(-0.8423825996431858), FX16_CONST(0.5388799085310085),
+ FX16_CONST(-0.8415549774368988), FX16_CONST(0.5401714727298924),
+ FX16_CONST(-0.8407253749704583), FX16_CONST(0.5414617658531231),
+ FX16_CONST(-0.8398937941959996), FX16_CONST(0.5427507848645157),
+ FX16_CONST(-0.8390602370703127), FX16_CONST(0.5440385267308838),
+ FX16_CONST(-0.838224705554838), FX16_CONST(0.5453249884220465),
+ FX16_CONST(-0.8373872016156618), FX16_CONST(0.5466101669108351),
+ FX16_CONST(-0.8365477272235122), FX16_CONST(0.5478940591730997),
+ FX16_CONST(-0.8357062843537528), FX16_CONST(0.5491766621877194),
+ FX16_CONST(-0.8348628749863801), FX16_CONST(0.5504579729366046),
+ FX16_CONST(-0.8340175011060181), FX16_CONST(0.5517379884047073),
+ FX16_CONST(-0.8331701647019131), FX16_CONST(0.5530167055800277),
+ FX16_CONST(-0.83232086776793), FX16_CONST(0.5542941214536197),
+ FX16_CONST(-0.8314696123025455), FX16_CONST(0.5555702330196018),
+ FX16_CONST(-0.8306164003088464), FX16_CONST(0.5568450372751599),
+ FX16_CONST(-0.8297612337945232), FX16_CONST(0.558118531220556),
+ FX16_CONST(-0.8289041147718649), FX16_CONST(0.5593907118591361),
+ FX16_CONST(-0.8280450452577557), FX16_CONST(0.5606615761973361),
+ FX16_CONST(-0.8271840272736694), FX16_CONST(0.561931121244689),
+ FX16_CONST(-0.8263210628456636), FX16_CONST(0.5631993440138339),
+ FX16_CONST(-0.8254561540043777), FX16_CONST(0.5644662415205193),
+ FX16_CONST(-0.8245893027850253), FX16_CONST(0.5657318107836131),
+ FX16_CONST(-0.8237205112273913), FX16_CONST(0.5669960488251088),
+ FX16_CONST(-0.8228497813758266), FX16_CONST(0.568258952670131),
+ FX16_CONST(-0.8219771152792418), FX16_CONST(0.5695205193469468),
+ FX16_CONST(-0.8211025149911049), FX16_CONST(0.570780745886967),
+ FX16_CONST(-0.8202259825694347), FX16_CONST(0.5720396293247569),
+ FX16_CONST(-0.8193475200767969), FX16_CONST(0.5732971666980422),
+ FX16_CONST(-0.8184671295802985), FX16_CONST(0.574553355047716),
+ FX16_CONST(-0.8175848131515839), FX16_CONST(0.5758081914178449),
+ FX16_CONST(-0.816700572866828), FX16_CONST(0.5770616728556792),
+ FX16_CONST(-0.8158144108067339), FX16_CONST(0.5783137964116554),
+ FX16_CONST(-0.8149263290565266), FX16_CONST(0.5795645591394057),
+ FX16_CONST(-0.8140363297059483), FX16_CONST(0.5808139580957646),
+ FX16_CONST(-0.8131444148492539), FX16_CONST(0.5820619903407751),
+ FX16_CONST(-0.8122505865852042), FX16_CONST(0.583308652937698),
+ FX16_CONST(-0.811354847017064), FX16_CONST(0.5845539429530151),
+ FX16_CONST(-0.8104571982525949), FX16_CONST(0.5857978574564388),
+ FX16_CONST(-0.8095576424040513), FX16_CONST(0.5870403935209181),
+ FX16_CONST(-0.8086561815881749), FX16_CONST(0.5882815482226454),
+ FX16_CONST(-0.8077528179261906), FX16_CONST(0.5895213186410635),
+ FX16_CONST(-0.8068475535437994), FX16_CONST(0.5907597018588739),
+ FX16_CONST(-0.8059403905711764), FX16_CONST(0.5919966949620408),
+ FX16_CONST(-0.8050313311429637), FX16_CONST(0.5932322950397998),
+ FX16_CONST(-0.8041203773982657), FX16_CONST(0.5944664991846645),
+ FX16_CONST(-0.8032075314806453), FX16_CONST(0.5956993044924328),
+ FX16_CONST(-0.8022927955381159), FX16_CONST(0.5969307080621962),
+ FX16_CONST(-0.8013761717231404), FX16_CONST(0.598160706996342),
+ FX16_CONST(-0.8004576621926228), FX16_CONST(0.5993892984005644),
+ FX16_CONST(-0.799537269107905), FX16_CONST(0.600616479383869),
+ FX16_CONST(-0.7986149946347607), FX16_CONST(0.6018422470585802),
+ FX16_CONST(-0.7976908409433914), FX16_CONST(0.6030665985403478),
+ FX16_CONST(-0.7967648102084189), FX16_CONST(0.6042895309481557),
+ FX16_CONST(-0.7958369046088837), FX16_CONST(0.6055110414043253),
+ FX16_CONST(-0.794907126328237), FX16_CONST(0.6067311270345245),
+ FX16_CONST(-0.7939754775543371), FX16_CONST(0.6079497849677737),
+ FX16_CONST(-0.7930419604794441), FX16_CONST(0.6091670123364527),
+ FX16_CONST(-0.7921065773002126), FX16_CONST(0.6103828062763091),
+ FX16_CONST(-0.7911693302176903), FX16_CONST(0.6115971639264617),
+ FX16_CONST(-0.7902302214373101), FX16_CONST(0.6128100824294096),
+ FX16_CONST(-0.7892892531688857), FX16_CONST(0.6140215589310385),
+ FX16_CONST(-0.7883464276266061), FX16_CONST(0.615231590580627),
+ FX16_CONST(-0.7874017470290317), FX16_CONST(0.6164401745308532),
+ FX16_CONST(-0.786455213599086), FX16_CONST(0.6176473079378036),
+ FX16_CONST(-0.785506829564054), FX16_CONST(0.6188529879609762),
+ FX16_CONST(-0.7845565971555752), FX16_CONST(0.6200572117632892),
+ FX16_CONST(-0.7836045186096382), FX16_CONST(0.6212599765110877),
+ FX16_CONST(-0.7826505961665761), FX16_CONST(0.6224612793741495),
+ FX16_CONST(-0.7816948320710597), FX16_CONST(0.6236611175256942),
+ FX16_CONST(-0.7807372285720947), FX16_CONST(0.6248594881423861),
+ FX16_CONST(-0.7797777879230146), FX16_CONST(0.6260563884043434),
+ FX16_CONST(-0.7788165123814759), FX16_CONST(0.6272518154951442),
+ FX16_CONST(-0.7778534042094529), FX16_CONST(0.6284457666018328),
+ FX16_CONST(-0.7768884656732328), FX16_CONST(0.6296382389149267),
+ FX16_CONST(-0.7759216990434078), FX16_CONST(0.6308292296284242),
+ FX16_CONST(-0.774953106594874), FX16_CONST(0.6320187359398088),
+ FX16_CONST(-0.7739826906068228), FX16_CONST(0.6332067550500572),
+ FX16_CONST(-0.7730104533627369), FX16_CONST(0.6343932841636456),
+ FX16_CONST(-0.7720363971503849), FX16_CONST(0.6355783204885557),
+ FX16_CONST(-0.771060524261814), FX16_CONST(0.6367618612362839),
+ FX16_CONST(-0.7700828369933481), FX16_CONST(0.6379439036218438),
+ FX16_CONST(-0.7691033376455797), FX16_CONST(0.6391244448637756),
+ FX16_CONST(-0.7681220285233654), FX16_CONST(0.6403034821841517),
+ FX16_CONST(-0.7671389119358203), FX16_CONST(0.6414810128085833),
+ FX16_CONST(-0.7661539901963133), FX16_CONST(0.6426570339662265),
+ FX16_CONST(-0.7651672656224592), FX16_CONST(0.6438315428897912),
+ FX16_CONST(-0.7641787405361168), FX16_CONST(0.6450045368155438),
+ FX16_CONST(-0.7631884172633813), FX16_CONST(0.6461760129833163),
+ FX16_CONST(-0.7621962981345789), FX16_CONST(0.6473459686365122),
+ FX16_CONST(-0.7612023854842622), FX16_CONST(0.648514401022112),
+ FX16_CONST(-0.7602066816512026), FX16_CONST(0.6496813073906829),
+ FX16_CONST(-0.7592091889783882), FX16_CONST(0.6508466849963808),
+ FX16_CONST(-0.7582099098130154), FX16_CONST(0.6520105310969595),
+ FX16_CONST(-0.7572088465064846), FX16_CONST(0.6531728429537768),
+ FX16_CONST(-0.7562060014143943), FX16_CONST(0.6543336178318007),
+ FX16_CONST(-0.7552013768965369), FX16_CONST(0.655492852999615),
+ FX16_CONST(-0.7541949753168894), FX16_CONST(0.6566505457294287),
+ FX16_CONST(-0.7531867990436126), FX16_CONST(0.6578066932970785),
+ FX16_CONST(-0.7521768504490427), FX16_CONST(0.6589612929820373),
+ FX16_CONST(-0.7511651319096864), FX16_CONST(0.6601143420674206),
+ FX16_CONST(-0.7501516458062154), FX16_CONST(0.6612658378399917),
+ FX16_CONST(-0.7491363945234596), FX16_CONST(0.6624157775901715),
+ FX16_CONST(-0.7481193804504037), FX16_CONST(0.6635641586120395),
+ FX16_CONST(-0.7471006059801802), FX16_CONST(0.6647109782033448),
+ FX16_CONST(-0.7460800735100638), FX16_CONST(0.6658562336655097),
+ FX16_CONST(-0.7450577854414658), FX16_CONST(0.6669999223036377),
+ FX16_CONST(-0.7440337441799296), FX16_CONST(0.6681420414265181),
+ FX16_CONST(-0.7430079521351219), FX16_CONST(0.6692825883466358),
+ FX16_CONST(-0.7419804117208312), FX16_CONST(0.670421560380173),
+ FX16_CONST(-0.7409511253549591), FX16_CONST(0.6715589548470183),
+ FX16_CONST(-0.7399200954595161), FX16_CONST(0.672694769070773),
+ FX16_CONST(-0.7388873244606156), FX16_CONST(0.6738290003787556),
+ FX16_CONST(-0.7378528147884663), FX16_CONST(0.6749616461020117),
+ FX16_CONST(-0.7368165688773701), FX16_CONST(0.6760927035753157),
+ FX16_CONST(-0.7357785891657136), FX16_CONST(0.6772221701371803),
+ FX16_CONST(-0.7347388780959634), FX16_CONST(0.6783500431298615),
+ FX16_CONST(-0.7336974381146601), FX16_CONST(0.6794763198993652),
+ FX16_CONST(-0.7326542716724131), FX16_CONST(0.6806009977954527),
+ FX16_CONST(-0.7316093812238929), FX16_CONST(0.6817240741716495),
+ FX16_CONST(-0.7305627692278277), FX16_CONST(0.6828455463852479),
+ FX16_CONST(-0.729514438146997), FX16_CONST(0.6839654117973154),
+ FX16_CONST(-0.7284643904482251), FX16_CONST(0.6850836677727005),
+ FX16_CONST(-0.7274126286023762), FX16_CONST(0.6862003116800381),
+ FX16_CONST(-0.7263591550843463), FX16_CONST(0.6873153408917587),
+ FX16_CONST(-0.725303972373061), FX16_CONST(0.6884287527840902),
+ FX16_CONST(-0.724247082951467), FX16_CONST(0.6895405447370668),
+ FX16_CONST(-0.7231884893065273), FX16_CONST(0.6906507141345346),
+ FX16_CONST(-0.7221281939292151), FX16_CONST(0.6917592583641579),
+ FX16_CONST(-0.7210661993145084), FX16_CONST(0.6928661748174243),
+ FX16_CONST(-0.7200025079613819), FX16_CONST(0.6939714608896537),
+ FX16_CONST(-0.7189371223728046), FX16_CONST(0.6950751139800007),
+ FX16_CONST(-0.7178700450557318), FX16_CONST(0.6961771314914629),
+ FX16_CONST(-0.7168012785210994), FX16_CONST(0.6972775108308866),
+ FX16_CONST(-0.715730825283819), FX16_CONST(0.6983762494089724),
+ FX16_CONST(-0.7146586878627694), FX16_CONST(0.6994733446402834),
+ FX16_CONST(-0.7135848687807937), FX16_CONST(0.7005687939432481),
+ FX16_CONST(-0.7125093705646924), FX16_CONST(0.7016625947401685),
+ FX16_CONST(-0.7114321957452164), FX16_CONST(0.7027547444572253),
+ FX16_CONST(-0.7103533468570622), FX16_CONST(0.703845240524485),
+ FX16_CONST(-0.709272826438866), FX16_CONST(0.7049340803759045),
+ FX16_CONST(-0.7081906370331956), FX16_CONST(0.7060212614493395),
+ FX16_CONST(-0.7071067811865477), FX16_CONST(0.7071067811865474),
+ FX16_CONST(-0.7060212614493399), FX16_CONST(0.7081906370331953),
+ FX16_CONST(-0.7049340803759048), FX16_CONST(0.7092728264388657),
+ FX16_CONST(-0.7038452405244854), FX16_CONST(0.7103533468570619),
+ FX16_CONST(-0.7027547444572256), FX16_CONST(0.7114321957452161),
+ FX16_CONST(-0.7016625947401687), FX16_CONST(0.7125093705646921),
+ FX16_CONST(-0.7005687939432484), FX16_CONST(0.7135848687807935),
+ FX16_CONST(-0.6994733446402838), FX16_CONST(0.7146586878627691),
+ FX16_CONST(-0.6983762494089727), FX16_CONST(0.7157308252838188),
+ FX16_CONST(-0.697277510830887), FX16_CONST(0.7168012785210991),
+ FX16_CONST(-0.6961771314914632), FX16_CONST(0.7178700450557315),
+ FX16_CONST(-0.695075113980001), FX16_CONST(0.7189371223728043),
+ FX16_CONST(-0.693971460889654), FX16_CONST(0.7200025079613817),
+ FX16_CONST(-0.6928661748174246), FX16_CONST(0.7210661993145082),
+ FX16_CONST(-0.6917592583641582), FX16_CONST(0.7221281939292149),
+ FX16_CONST(-0.6906507141345349), FX16_CONST(0.7231884893065271),
+ FX16_CONST(-0.6895405447370672), FX16_CONST(0.7242470829514667),
+ FX16_CONST(-0.6884287527840905), FX16_CONST(0.7253039723730607),
+ FX16_CONST(-0.687315340891759), FX16_CONST(0.726359155084346),
+ FX16_CONST(-0.6862003116800385), FX16_CONST(0.7274126286023759),
+ FX16_CONST(-0.6850836677727008), FX16_CONST(0.7284643904482249),
+ FX16_CONST(-0.6839654117973157), FX16_CONST(0.7295144381469967),
+ FX16_CONST(-0.6828455463852482), FX16_CONST(0.7305627692278274),
+ FX16_CONST(-0.6817240741716498), FX16_CONST(0.7316093812238925),
+ FX16_CONST(-0.680600997795453), FX16_CONST(0.7326542716724129),
+ FX16_CONST(-0.6794763198993655), FX16_CONST(0.7336974381146598),
+ FX16_CONST(-0.6783500431298618), FX16_CONST(0.7347388780959632),
+ FX16_CONST(-0.6772221701371807), FX16_CONST(0.7357785891657133),
+ FX16_CONST(-0.676092703575316), FX16_CONST(0.7368165688773698),
+ FX16_CONST(-0.674961646102012), FX16_CONST(0.737852814788466),
+ FX16_CONST(-0.6738290003787559), FX16_CONST(0.7388873244606152),
+ FX16_CONST(-0.6726947690707733), FX16_CONST(0.7399200954595158),
+ FX16_CONST(-0.6715589548470187), FX16_CONST(0.7409511253549589),
+ FX16_CONST(-0.6704215603801733), FX16_CONST(0.7419804117208308),
+ FX16_CONST(-0.6692825883466361), FX16_CONST(0.7430079521351216),
+ FX16_CONST(-0.6681420414265185), FX16_CONST(0.7440337441799294),
+ FX16_CONST(-0.666999922303638), FX16_CONST(0.7450577854414656),
+ FX16_CONST(-0.6658562336655101), FX16_CONST(0.7460800735100634),
+ FX16_CONST(-0.6647109782033451), FX16_CONST(0.7471006059801799),
+ FX16_CONST(-0.6635641586120399), FX16_CONST(0.7481193804504035),
+ FX16_CONST(-0.6624157775901718), FX16_CONST(0.7491363945234594),
+ FX16_CONST(-0.661265837839992), FX16_CONST(0.7501516458062152),
+ FX16_CONST(-0.6601143420674209), FX16_CONST(0.751165131909686),
+ FX16_CONST(-0.6589612929820376), FX16_CONST(0.7521768504490425),
+ FX16_CONST(-0.6578066932970789), FX16_CONST(0.7531867990436123),
+ FX16_CONST(-0.656650545729429), FX16_CONST(0.7541949753168892),
+ FX16_CONST(-0.6554928529996153), FX16_CONST(0.7552013768965365),
+ FX16_CONST(-0.654333617831801), FX16_CONST(0.7562060014143941),
+ FX16_CONST(-0.6531728429537771), FX16_CONST(0.7572088465064842),
+ FX16_CONST(-0.6520105310969597), FX16_CONST(0.7582099098130151),
+ FX16_CONST(-0.650846684996381), FX16_CONST(0.759209188978388),
+ FX16_CONST(-0.6496813073906832), FX16_CONST(0.7602066816512024),
+ FX16_CONST(-0.6485144010221123), FX16_CONST(0.7612023854842619),
+ FX16_CONST(-0.6473459686365125), FX16_CONST(0.7621962981345786),
+ FX16_CONST(-0.6461760129833166), FX16_CONST(0.763188417263381),
+ FX16_CONST(-0.6450045368155441), FX16_CONST(0.7641787405361166),
+ FX16_CONST(-0.6438315428897915), FX16_CONST(0.7651672656224588),
+ FX16_CONST(-0.6426570339662268), FX16_CONST(0.7661539901963129),
+ FX16_CONST(-0.6414810128085836), FX16_CONST(0.76713891193582),
+ FX16_CONST(-0.640303482184152), FX16_CONST(0.7681220285233651),
+ FX16_CONST(-0.639124444863776), FX16_CONST(0.7691033376455795),
+ FX16_CONST(-0.6379439036218442), FX16_CONST(0.7700828369933479),
+ FX16_CONST(-0.6367618612362842), FX16_CONST(0.7710605242618138),
+ FX16_CONST(-0.635578320488556), FX16_CONST(0.7720363971503846),
+ FX16_CONST(-0.6343932841636459), FX16_CONST(0.7730104533627365),
+ FX16_CONST(-0.6332067550500575), FX16_CONST(0.7739826906068226),
+ FX16_CONST(-0.6320187359398092), FX16_CONST(0.7749531065948737),
+ FX16_CONST(-0.6308292296284246), FX16_CONST(0.7759216990434076),
+ FX16_CONST(-0.629638238914927), FX16_CONST(0.7768884656732326),
+ FX16_CONST(-0.6284457666018332), FX16_CONST(0.7778534042094527),
+ FX16_CONST(-0.6272518154951445), FX16_CONST(0.7788165123814756),
+ FX16_CONST(-0.6260563884043437), FX16_CONST(0.7797777879230143),
+ FX16_CONST(-0.6248594881423865), FX16_CONST(0.7807372285720944),
+ FX16_CONST(-0.6236611175256945), FX16_CONST(0.7816948320710594),
+ FX16_CONST(-0.6224612793741499), FX16_CONST(0.7826505961665758),
+ FX16_CONST(-0.621259976511088), FX16_CONST(0.7836045186096379),
+ FX16_CONST(-0.6200572117632894), FX16_CONST(0.784556597155575),
+ FX16_CONST(-0.6188529879609765), FX16_CONST(0.7855068295640538),
+ FX16_CONST(-0.617647307937804), FX16_CONST(0.7864552135990857),
+ FX16_CONST(-0.6164401745308535), FX16_CONST(0.7874017470290314),
+ FX16_CONST(-0.6152315905806274), FX16_CONST(0.7883464276266059),
+ FX16_CONST(-0.6140215589310388), FX16_CONST(0.7892892531688854),
+ FX16_CONST(-0.6128100824294099), FX16_CONST(0.7902302214373098),
+ FX16_CONST(-0.611597163926462), FX16_CONST(0.7911693302176901),
+ FX16_CONST(-0.6103828062763095), FX16_CONST(0.7921065773002124),
+ FX16_CONST(-0.6091670123364531), FX16_CONST(0.7930419604794438),
+ FX16_CONST(-0.6079497849677741), FX16_CONST(0.7939754775543368),
+ FX16_CONST(-0.6067311270345248), FX16_CONST(0.7949071263282368),
+ FX16_CONST(-0.6055110414043257), FX16_CONST(0.7958369046088833),
+ FX16_CONST(-0.6042895309481561), FX16_CONST(0.7967648102084187),
+ FX16_CONST(-0.6030665985403482), FX16_CONST(0.7976908409433912),
+ FX16_CONST(-0.6018422470585806), FX16_CONST(0.7986149946347605),
+ FX16_CONST(-0.6006164793838693), FX16_CONST(0.7995372691079048),
+ FX16_CONST(-0.5993892984005648), FX16_CONST(0.8004576621926226),
+ FX16_CONST(-0.5981607069963424), FX16_CONST(0.8013761717231401),
+ FX16_CONST(-0.5969307080621965), FX16_CONST(0.8022927955381157),
+ FX16_CONST(-0.5956993044924332), FX16_CONST(0.803207531480645),
+ FX16_CONST(-0.5944664991846649), FX16_CONST(0.8041203773982655),
+ FX16_CONST(-0.5932322950398001), FX16_CONST(0.8050313311429633),
+ FX16_CONST(-0.5919966949620411), FX16_CONST(0.8059403905711762),
+ FX16_CONST(-0.5907597018588743), FX16_CONST(0.8068475535437992),
+ FX16_CONST(-0.5895213186410638), FX16_CONST(0.8077528179261904),
+ FX16_CONST(-0.5882815482226458), FX16_CONST(0.8086561815881746),
+ FX16_CONST(-0.5870403935209184), FX16_CONST(0.8095576424040509),
+ FX16_CONST(-0.5857978574564391), FX16_CONST(0.8104571982525945),
+ FX16_CONST(-0.5845539429530154), FX16_CONST(0.8113548470170636),
+ FX16_CONST(-0.5833086529376983), FX16_CONST(0.8122505865852039),
+ FX16_CONST(-0.5820619903407754), FX16_CONST(0.8131444148492536),
+ FX16_CONST(-0.580813958095765), FX16_CONST(0.8140363297059481),
+ FX16_CONST(-0.5795645591394061), FX16_CONST(0.8149263290565264),
+ FX16_CONST(-0.5783137964116558), FX16_CONST(0.8158144108067337),
+ FX16_CONST(-0.5770616728556796), FX16_CONST(0.8167005728668277),
+ FX16_CONST(-0.5758081914178452), FX16_CONST(0.8175848131515837),
+ FX16_CONST(-0.5745533550477163), FX16_CONST(0.8184671295802983),
+ FX16_CONST(-0.5732971666980426), FX16_CONST(0.8193475200767967),
+ FX16_CONST(-0.5720396293247574), FX16_CONST(0.8202259825694345),
+ FX16_CONST(-0.5707807458869674), FX16_CONST(0.8211025149911046),
+ FX16_CONST(-0.5695205193469471), FX16_CONST(0.8219771152792416),
+ FX16_CONST(-0.5682589526701314), FX16_CONST(0.8228497813758264),
+ FX16_CONST(-0.5669960488251091), FX16_CONST(0.8237205112273911),
+ FX16_CONST(-0.5657318107836136), FX16_CONST(0.8245893027850251),
+ FX16_CONST(-0.5644662415205196), FX16_CONST(0.8254561540043773),
+ FX16_CONST(-0.5631993440138342), FX16_CONST(0.8263210628456634),
+ FX16_CONST(-0.5619311212446894), FX16_CONST(0.8271840272736691),
+ FX16_CONST(-0.5606615761973366), FX16_CONST(0.8280450452577554),
+ FX16_CONST(-0.5593907118591365), FX16_CONST(0.8289041147718647),
+ FX16_CONST(-0.5581185312205563), FX16_CONST(0.8297612337945228),
+ FX16_CONST(-0.5568450372751602), FX16_CONST(0.8306164003088462),
+ FX16_CONST(-0.5555702330196022), FX16_CONST(0.8314696123025452),
+ FX16_CONST(-0.55429412145362), FX16_CONST(0.8323208677679297),
+ FX16_CONST(-0.553016705580028), FX16_CONST(0.8331701647019129),
+ FX16_CONST(-0.5517379884047078), FX16_CONST(0.8340175011060179),
+ FX16_CONST(-0.550457972936605), FX16_CONST(0.8348628749863799),
+ FX16_CONST(-0.5491766621877198), FX16_CONST(0.8357062843537525),
+ FX16_CONST(-0.5478940591731001), FX16_CONST(0.836547727223512),
+ FX16_CONST(-0.5466101669108354), FX16_CONST(0.8373872016156616),
+ FX16_CONST(-0.5453249884220468), FX16_CONST(0.8382247055548377),
+ FX16_CONST(-0.5440385267308842), FX16_CONST(0.8390602370703125),
+ FX16_CONST(-0.542750784864516), FX16_CONST(0.8398937941959994),
+ FX16_CONST(-0.5414617658531234), FX16_CONST(0.8407253749704581),
+ FX16_CONST(-0.5401714727298927), FX16_CONST(0.8415549774368986),
+ FX16_CONST(-0.5388799085310089), FX16_CONST(0.8423825996431855),
+ FX16_CONST(-0.5375870762956458), FX16_CONST(0.8432082396418452),
+ FX16_CONST(-0.5362929790659634), FX16_CONST(0.8440318954900663),
+ FX16_CONST(-0.5349976198870973), FX16_CONST(0.844853565249707),
+ FX16_CONST(-0.5337010018071529), FX16_CONST(0.8456732469872991),
+ FX16_CONST(-0.5324031278771986), FX16_CONST(0.8464909387740517),
+ FX16_CONST(-0.5311040011512553), FX16_CONST(0.8473066386858581),
+ FX16_CONST(-0.5298036246862949), FX16_CONST(0.8481203448032971),
+ FX16_CONST(-0.5285020015422286), FX16_CONST(0.8489320552116395),
+ FX16_CONST(-0.5271991347819014), FX16_CONST(0.8497417680008524),
+ FX16_CONST(-0.5258950274710845), FX16_CONST(0.8505494812656035),
+ FX16_CONST(-0.5245896826784694), FX16_CONST(0.8513551931052649),
+ FX16_CONST(-0.5232831034756568), FX16_CONST(0.8521589016239196),
+ FX16_CONST(-0.5219752929371545), FX16_CONST(0.8529606049303635),
+ FX16_CONST(-0.5206662541403673), FX16_CONST(0.8537603011381113),
+ FX16_CONST(-0.5193559901655895), FX16_CONST(0.8545579883654005),
+ FX16_CONST(-0.5180445040959999), FX16_CONST(0.8553536647351957),
+ FX16_CONST(-0.5167317990176503), FX16_CONST(0.8561473283751942),
+ FX16_CONST(-0.5154178780194633), FX16_CONST(0.8569389774178285),
+ FX16_CONST(-0.5141027441932219), FX16_CONST(0.857728610000272),
+ FX16_CONST(-0.512786400633563), FX16_CONST(0.8585162242644427),
+ FX16_CONST(-0.5114688504379703), FX16_CONST(0.8593018183570085),
+ FX16_CONST(-0.5101500967067673), FX16_CONST(0.8600853904293899),
+ FX16_CONST(-0.5088301425431074), FX16_CONST(0.8608669386377671),
+ FX16_CONST(-0.5075089910529711), FX16_CONST(0.8616464611430812),
+ FX16_CONST(-0.5061866453451553), FX16_CONST(0.8624239561110405),
+ FX16_CONST(-0.5048631085312675), FX16_CONST(0.8631994217121242),
+ FX16_CONST(-0.5035383837257181), FX16_CONST(0.8639728561215864),
+ FX16_CONST(-0.5022124740457112), FX16_CONST(0.8647442575194622),
+ FX16_CONST(-0.500885382611241), FX16_CONST(0.8655136240905689),
+ FX16_CONST(-0.499557112545082), FX16_CONST(0.8662809540245129),
+ FX16_CONST(-0.49822766697278187), FX16_CONST(0.8670462455156926),
+ FX16_CONST(-0.4968970490226544), FX16_CONST(0.8678094967633033),
+ FX16_CONST(-0.49556526182577304), FX16_CONST(0.8685707059713406),
+ FX16_CONST(-0.49423230851596006), FX16_CONST(0.8693298713486066),
+ FX16_CONST(-0.49289819222978426), FX16_CONST(0.8700869911087113),
+ FX16_CONST(-0.49156291610655), FX16_CONST(0.8708420634700789),
+ FX16_CONST(-0.4902264832882911), FX16_CONST(0.8715950866559511),
+ FX16_CONST(-0.4888888969197637), FX16_CONST(0.8723460588943912),
+ FX16_CONST(-0.4875501601484364), FX16_CONST(0.8730949784182899),
+ FX16_CONST(-0.4862102761244867), FX16_CONST(0.8738418434653666),
+ FX16_CONST(-0.48486924800079123), FX16_CONST(0.874586652278176),
+ FX16_CONST(-0.48352707893291874), FX16_CONST(0.8753294031041108),
+ FX16_CONST(-0.4821837720791226), FX16_CONST(0.8760700941954067),
+ FX16_CONST(-0.48083933060033446), FX16_CONST(0.8768087238091454),
+ FX16_CONST(-0.4794937576601534), FX16_CONST(0.8775452902072611),
+ FX16_CONST(-0.4781470564248433), FX16_CONST(0.8782797916565414),
+ FX16_CONST(-0.4767992300633222), FX16_CONST(0.8790122264286334),
+ FX16_CONST(-0.4754502817471558), FX16_CONST(0.8797425928000475),
+ FX16_CONST(-0.4741002146505506), FX16_CONST(0.8804708890521604),
+ FX16_CONST(-0.47274903195034323), FX16_CONST(0.8811971134712218),
+ FX16_CONST(-0.4713967368259979), FX16_CONST(0.8819212643483548),
+ FX16_CONST(-0.4700433324595958), FX16_CONST(0.8826433399795627),
+ FX16_CONST(-0.46868882203582796), FX16_CONST(0.8833633386657316),
+ FX16_CONST(-0.4673332087419883), FX16_CONST(0.8840812587126351),
+ FX16_CONST(-0.4659764957679667), FX16_CONST(0.8847970984309375),
+ FX16_CONST(-0.4646186863062382), FX16_CONST(0.8855108561361997),
+ FX16_CONST(-0.4632597835518604), FX16_CONST(0.8862225301488805),
+ FX16_CONST(-0.46189979070246284), FX16_CONST(0.8869321187943421),
+ FX16_CONST(-0.46053871095823995), FX16_CONST(0.8876396204028539),
+ FX16_CONST(-0.4591765475219447), FX16_CONST(0.888345033309596),
+ FX16_CONST(-0.4578133035988777), FX16_CONST(0.8890483558546644),
+ FX16_CONST(-0.45644898239688425), FX16_CONST(0.8897495863830727),
+ FX16_CONST(-0.455083587126344), FX16_CONST(0.8904487232447578),
+ FX16_CONST(-0.45371712100016387), FX16_CONST(0.8911457647945832),
+ FX16_CONST(-0.4523495872337707), FX16_CONST(0.8918407093923428),
+ FX16_CONST(-0.45098098904510436), FX16_CONST(0.8925335554027644),
+ FX16_CONST(-0.449611329654607), FX16_CONST(0.8932243011955151),
+ FX16_CONST(-0.44824061228522016), FX16_CONST(0.8939129451452031),
+ FX16_CONST(-0.44686884016237427), FX16_CONST(0.8945994856313826),
+ FX16_CONST(-0.4454960165139817), FX16_CONST(0.8952839210385576),
+ FX16_CONST(-0.4441221445704298), FX16_CONST(0.8959662497561849),
+ FX16_CONST(-0.44274722756457047), FX16_CONST(0.8966464701786799),
+ FX16_CONST(-0.441371268731717), FX16_CONST(0.8973245807054181),
+ FX16_CONST(-0.4399942713096334), FX16_CONST(0.8980005797407398),
+ FX16_CONST(-0.43861623853852766), FX16_CONST(0.8986744656939538),
+ FX16_CONST(-0.437237173661044), FX16_CONST(0.8993462369793416),
+ FX16_CONST(-0.43585707992225603), FX16_CONST(0.90001589201616),
+ FX16_CONST(-0.4344759605696561), FX16_CONST(0.9006834292286467),
+ FX16_CONST(-0.4330938188531522), FX16_CONST(0.9013488470460219),
+ FX16_CONST(-0.43171065802505737), FX16_CONST(0.9020121439024932),
+ FX16_CONST(-0.43032648134008256), FX16_CONST(0.9026733182372588),
+ FX16_CONST(-0.4289412920553301), FX16_CONST(0.9033323684945116),
+ FX16_CONST(-0.42755509343028253), FX16_CONST(0.9039892931234431),
+ FX16_CONST(-0.42616788872679995), FX16_CONST(0.904644090578246),
+ FX16_CONST(-0.42477968120910903), FX16_CONST(0.9052967593181187),
+ FX16_CONST(-0.42339047414379605), FX16_CONST(0.9059472978072685),
+ FX16_CONST(-0.42200027079979957), FX16_CONST(0.9065957045149154),
+ FX16_CONST(-0.42060907444840306), FX16_CONST(0.9072419779152956),
+ FX16_CONST(-0.41921688836322435), FX16_CONST(0.907886116487666),
+ FX16_CONST(-0.41782371582021255), FX16_CONST(0.908528118716306),
+ FX16_CONST(-0.41642956009763726), FX16_CONST(0.9091679830905224),
+ FX16_CONST(-0.4150344244760816), FX16_CONST(0.9098057081046522),
+ FX16_CONST(-0.41363831223843517), FX16_CONST(0.9104412922580669),
+ FX16_CONST(-0.41224122666988333), FX16_CONST(0.9110747340551761),
+ FX16_CONST(-0.41084317105790424), FX16_CONST(0.9117060320054297),
+ FX16_CONST(-0.40944414869225776), FX16_CONST(0.9123351846233226),
+ FX16_CONST(-0.4080441628649787), FX16_CONST(0.9129621904283981),
+ FX16_CONST(-0.40664321687036886), FX16_CONST(0.9135870479452509),
+ FX16_CONST(-0.4052413140049904), FX16_CONST(0.9142097557035305),
+ FX16_CONST(-0.4038384575676545), FX16_CONST(0.914830312237946),
+ FX16_CONST(-0.4024346508594187), FX16_CONST(0.9154487160882677),
+ FX16_CONST(-0.40102989718357573), FX16_CONST(0.9160649657993316),
+ FX16_CONST(-0.3996241998456468), FX16_CONST(0.9166790599210427),
+ FX16_CONST(-0.3982175621533742), FX16_CONST(0.9172909970083777),
+ FX16_CONST(-0.3968099874167108), FX16_CONST(0.9179007756213903),
+ FX16_CONST(-0.39540147894781663), FX16_CONST(0.918508394325212),
+ FX16_CONST(-0.39399204006104827), FX16_CONST(0.9191138516900577),
+ FX16_CONST(-0.3925816740729515), FX16_CONST(0.9197171462912274),
+ FX16_CONST(-0.39117038430225376), FX16_CONST(0.9203182767091106),
+ FX16_CONST(-0.389758174069857), FX16_CONST(0.9209172415291892),
+ FX16_CONST(-0.3883450466988267), FX16_CONST(0.9215140393420418),
+ FX16_CONST(-0.38693100551438886), FX16_CONST(0.9221086687433451),
+ FX16_CONST(-0.38551605384391896), FX16_CONST(0.9227011283338785),
+ FX16_CONST(-0.384100195016935), FX16_CONST(0.9232914167195276),
+ FX16_CONST(-0.3826834323650904), FX16_CONST(0.9238795325112865),
+ FX16_CONST(-0.3812657692221628), FX16_CONST(0.9244654743252624),
+ FX16_CONST(-0.3798472089240515), FX16_CONST(0.9250492407826775),
+ FX16_CONST(-0.3784277548087658), FX16_CONST(0.9256308305098727),
+ FX16_CONST(-0.37700741021641826), FX16_CONST(0.9262102421383114),
+ FX16_CONST(-0.3755861784892171), FX16_CONST(0.9267874743045819),
+ FX16_CONST(-0.37416406297145854), FX16_CONST(0.9273625256504009),
+ FX16_CONST(-0.3727410670095162), FX16_CONST(0.9279353948226177),
+ FX16_CONST(-0.3713171939518378), FX16_CONST(0.9285060804732155),
+ FX16_CONST(-0.3698924471489342), FX16_CONST(0.9290745812593157),
+ FX16_CONST(-0.36846682995337227), FX16_CONST(0.9296408958431813),
+ FX16_CONST(-0.367040345719767), FX16_CONST(0.9302050228922192),
+ FX16_CONST(-0.36561299780477435), FX16_CONST(0.9307669610789835),
+ FX16_CONST(-0.3641847895670802), FX16_CONST(0.9313267090811803),
+ FX16_CONST(-0.3627557243673974), FX16_CONST(0.931884265581668),
+ FX16_CONST(-0.3613258055684543), FX16_CONST(0.9324396292684624),
+ FX16_CONST(-0.359895036534988), FX16_CONST(0.932992798834739),
+ FX16_CONST(-0.3584634206337371), FX16_CONST(0.933543772978836),
+ FX16_CONST(-0.3570309612334304), FX16_CONST(0.9340925504042588),
+ FX16_CONST(-0.35559766170478413), FX16_CONST(0.9346391298196807),
+ FX16_CONST(-0.3541635254204905), FX16_CONST(0.9351835099389475),
+ FX16_CONST(-0.35272855575521067), FX16_CONST(0.9357256894810804),
+ FX16_CONST(-0.3512927560855669), FX16_CONST(0.9362656671702784),
+ FX16_CONST(-0.3498561297901354), FX16_CONST(0.9368034417359214),
+ FX16_CONST(-0.3484186802494349), FX16_CONST(0.9373390119125748),
+ FX16_CONST(-0.34698041084592385), FX16_CONST(0.9378723764399898),
+ FX16_CONST(-0.3455413249639891), FX16_CONST(0.9384035340631081),
+ FX16_CONST(-0.34410142598993876), FX16_CONST(0.9389324835320646),
+ FX16_CONST(-0.34266071731199493), FX16_CONST(0.9394592236021897),
+ FX16_CONST(-0.3412192023202828), FX16_CONST(0.9399837530340138),
+ FX16_CONST(-0.33977688440682713), FX16_CONST(0.9405060705932682),
+ FX16_CONST(-0.3383337669655413), FX16_CONST(0.9410261750508893),
+ FX16_CONST(-0.33688985339222), FX16_CONST(0.9415440651830208),
+ FX16_CONST(-0.33544514708453144), FX16_CONST(0.9420597397710174),
+ FX16_CONST(-0.3339996514420099), FX16_CONST(0.9425731976014468),
+ FX16_CONST(-0.33255336986604456), FX16_CONST(0.9430844374660934),
+ FX16_CONST(-0.3311063057598766), FX16_CONST(0.9435934581619603),
+ FX16_CONST(-0.32965846252858755), FX16_CONST(0.9441002584912727),
+ FX16_CONST(-0.3282098435790924), FX16_CONST(0.9446048372614803),
+ FX16_CONST(-0.32676045232013234), FX16_CONST(0.9451071932852604),
+ FX16_CONST(-0.32531029216226337), FX16_CONST(0.9456073253805212),
+ FX16_CONST(-0.32385936651785313), FX16_CONST(0.9461052323704033),
+ FX16_CONST(-0.32240767880106996), FX16_CONST(0.9466009130832835),
+ FX16_CONST(-0.3209552324278752), FX16_CONST(0.9470943663527772),
+ FX16_CONST(-0.31950203081601547), FX16_CONST(0.9475855910177412),
+ FX16_CONST(-0.31804807738501545), FX16_CONST(0.9480745859222761),
+ FX16_CONST(-0.31659337555616623), FX16_CONST(0.9485613499157302),
+ FX16_CONST(-0.3151379287525226), FX16_CONST(0.9490458818527006),
+ FX16_CONST(-0.3136817403988915), FX16_CONST(0.9495281805930367),
+ FX16_CONST(-0.31222481392182483), FX16_CONST(0.9500082450018431),
+ FX16_CONST(-0.3107671527496121), FX16_CONST(0.9504860739494815),
+ FX16_CONST(-0.30930876031226917), FX16_CONST(0.950961666311575),
+ FX16_CONST(-0.30784964004153514), FX16_CONST(0.9514350209690082),
+ FX16_CONST(-0.3063897953708611), FX16_CONST(0.9519061368079322),
+ FX16_CONST(-0.3049292297354024), FX16_CONST(0.9523750127197659),
+ FX16_CONST(-0.3034679465720111), FX16_CONST(0.9528416476011987),
+ FX16_CONST(-0.3020059493192286), FX16_CONST(0.9533060403541936),
+ FX16_CONST(-0.3005432414172738), FX16_CONST(0.9537681898859902),
+ FX16_CONST(-0.29907982630804064), FX16_CONST(0.9542280951091056),
+ FX16_CONST(-0.29761570743508625), FX16_CONST(0.9546857549413383),
+ FX16_CONST(-0.29615088824362373), FX16_CONST(0.9551411683057708),
+ FX16_CONST(-0.29468537218051494), FX16_CONST(0.9555943341307709),
+ FX16_CONST(-0.2932191626942591), FX16_CONST(0.9560452513499963),
+ FX16_CONST(-0.29175226323498954), FX16_CONST(0.956493918902395),
+ FX16_CONST(-0.2902846772544625), FX16_CONST(0.9569403357322088),
+ FX16_CONST(-0.2888164082060494), FX16_CONST(0.957384500788976),
+ FX16_CONST(-0.28734745954472934), FX16_CONST(0.9578264130275329),
+ FX16_CONST(-0.2858778347270811), FX16_CONST(0.9582660714080176),
+ FX16_CONST(-0.2844075372112722), FX16_CONST(0.9587034748958715),
+ FX16_CONST(-0.28293657045705556), FX16_CONST(0.9591386224618419),
+ FX16_CONST(-0.28146493792575805), FX16_CONST(0.9595715130819845),
+ FX16_CONST(-0.2799926430802731), FX16_CONST(0.960002145737666),
+ FX16_CONST(-0.27851968938505367), FX16_CONST(0.9604305194155657),
+ FX16_CONST(-0.27704608030610034), FX16_CONST(0.9608566331076795),
+ FX16_CONST(-0.2755718193109584), FX16_CONST(0.9612804858113205),
+ FX16_CONST(-0.2740969098687065), FX16_CONST(0.9617020765291225),
+ FX16_CONST(-0.2726213554499489), FX16_CONST(0.9621214042690416),
+ FX16_CONST(-0.27114515952680784), FX16_CONST(0.9625384680443592),
+ FX16_CONST(-0.2696683255729156), FX16_CONST(0.9629532668736838),
+ FX16_CONST(-0.26819085706340356), FX16_CONST(0.9633657997809539),
+ FX16_CONST(-0.2667127574748986), FX16_CONST(0.9637760657954398),
+ FX16_CONST(-0.26523403028551185), FX16_CONST(0.9641840639517458),
+ FX16_CONST(-0.2637546789748313), FX16_CONST(0.9645897932898128),
+ FX16_CONST(-0.2622747070239142), FX16_CONST(0.9649932528549202),
+ FX16_CONST(-0.26079411791527596), FX16_CONST(0.9653944416976893),
+ FX16_CONST(-0.2593129151328865), FX16_CONST(0.9657933588740836),
+ FX16_CONST(-0.25783110216215915), FX16_CONST(0.9661900034454125),
+ FX16_CONST(-0.25634868248994286), FX16_CONST(0.9665843744783331),
+ FX16_CONST(-0.2548656596045144), FX16_CONST(0.9669764710448522),
+ FX16_CONST(-0.25338203699557066), FX16_CONST(0.9673662922223284),
+ FX16_CONST(-0.2518978181542173), FX16_CONST(0.9677538370934754),
+ FX16_CONST(-0.25041300657296545), FX16_CONST(0.9681391047463623),
+ FX16_CONST(-0.2489276057457202), FX16_CONST(0.9685220942744173),
+ FX16_CONST(-0.24744161916777319), FX16_CONST(0.9689028047764289),
+ FX16_CONST(-0.2459550503357952), FX16_CONST(0.9692812353565483),
+ FX16_CONST(-0.2444679027478246), FX16_CONST(0.9696573851242923),
+ FX16_CONST(-0.24298017990326418), FX16_CONST(0.970031253194544),
+ FX16_CONST(-0.24149188530286947), FX16_CONST(0.9704028386875554),
+ FX16_CONST(-0.24000302244874144), FX16_CONST(0.9707721407289504),
+ FX16_CONST(-0.23851359484431825), FX16_CONST(0.9711391584497252),
+ FX16_CONST(-0.23702360599436773), FX16_CONST(0.9715038909862517),
+ FX16_CONST(-0.23553305940497588), FX16_CONST(0.9718663374802793),
+ FX16_CONST(-0.23404195858354362), FX16_CONST(0.9722264970789363),
+ FX16_CONST(-0.2325503070387753), FX16_CONST(0.9725843689347322),
+ FX16_CONST(-0.231058108280671), FX16_CONST(0.9729399522055602),
+ FX16_CONST(-0.22956536582051948), FX16_CONST(0.9732932460546981),
+ FX16_CONST(-0.22807208317088618), FX16_CONST(0.9736442496508119),
+ FX16_CONST(-0.22657826384561028), FX16_CONST(0.9739929621679558),
+ FX16_CONST(-0.22508391135979297), FX16_CONST(0.9743393827855759),
+ FX16_CONST(-0.22358902922978996), FX16_CONST(0.9746835106885107),
+ FX16_CONST(-0.22209362097320334), FX16_CONST(0.9750253450669942),
+ FX16_CONST(-0.22059769010887406), FX16_CONST(0.9753648851166569),
+ FX16_CONST(-0.21910124015687016), FX16_CONST(0.9757021300385285),
+ FX16_CONST(-0.21760427463848384), FX16_CONST(0.976037079039039),
+ FX16_CONST(-0.21610679707621955), FX16_CONST(0.9763697313300211),
+ FX16_CONST(-0.21460881099378668), FX16_CONST(0.9767000861287118),
+ FX16_CONST(-0.21311031991609197), FX16_CONST(0.9770281426577542),
+ FX16_CONST(-0.21161132736922802), FX16_CONST(0.9773539001452),
+ FX16_CONST(-0.21011183688046992), FX16_CONST(0.9776773578245099),
+ FX16_CONST(-0.20861185197826362), FX16_CONST(0.977998514934557),
+ FX16_CONST(-0.20711137619221853), FX16_CONST(0.9783173707196277),
+ FX16_CONST(-0.20561041305309907), FX16_CONST(0.9786339244294232),
+ FX16_CONST(-0.2041089660928174), FX16_CONST(0.9789481753190621),
+ FX16_CONST(-0.2026070388444215), FX16_CONST(0.979260122649082),
+ FX16_CONST(-0.20110463484209212), FX16_CONST(0.9795697656854405),
+ FX16_CONST(-0.19960175762113103), FX16_CONST(0.9798771036995176),
+ FX16_CONST(-0.19809841071795348), FX16_CONST(0.9801821359681174),
+ FX16_CONST(-0.19659459767008083), FX16_CONST(0.9804848617734693),
+ FX16_CONST(-0.19509032201612872), FX16_CONST(0.9807852804032303),
+ FX16_CONST(-0.1935855872958039), FX16_CONST(0.9810833911504866),
+ FX16_CONST(-0.19208039704989258), FX16_CONST(0.9813791933137546),
+ FX16_CONST(-0.19057475482025274), FX16_CONST(0.9816726861969831),
+ FX16_CONST(-0.18906866414980603), FX16_CONST(0.9819638691095554),
+ FX16_CONST(-0.18756212858253013), FX16_CONST(0.9822527413662893),
+ FX16_CONST(-0.18605515166344702), FX16_CONST(0.9825393022874411),
+ FX16_CONST(-0.18454773693861984), FX16_CONST(0.9828235511987052),
+ FX16_CONST(-0.183039887955141), FX16_CONST(0.9831054874312163),
+ FX16_CONST(-0.18153160826112488), FX16_CONST(0.9833851103215512),
+ FX16_CONST(-0.18002290140570013), FX16_CONST(0.9836624192117301),
+ FX16_CONST(-0.17851377093899798), FX16_CONST(0.9839374134492188),
+ FX16_CONST(-0.17700422041214905), FX16_CONST(0.984210092386929),
+ FX16_CONST(-0.17549425337727156), FX16_CONST(0.9844804553832209),
+ FX16_CONST(-0.1739838733874638), FX16_CONST(0.9847485018019042),
+ FX16_CONST(-0.17247308399679578), FX16_CONST(0.9850142310122398),
+ FX16_CONST(-0.17096188876030177), FX16_CONST(0.9852776423889411),
+ FX16_CONST(-0.16945029123396835), FX16_CONST(0.985538735312176),
+ FX16_CONST(-0.1679382949747314), FX16_CONST(0.9857975091675674),
+ FX16_CONST(-0.1664259035404642), FX16_CONST(0.9860539633461954),
+ FX16_CONST(-0.1649131204899698), FX16_CONST(0.9863080972445987),
+ FX16_CONST(-0.16339994938297386), FX16_CONST(0.9865599102647753),
+ FX16_CONST(-0.1618863937801123), FX16_CONST(0.9868094018141854),
+ FX16_CONST(-0.16037245724292856), FX16_CONST(0.987056571305751),
+ FX16_CONST(-0.15885814333386158), FX16_CONST(0.9873014181578583),
+ FX16_CONST(-0.15734345561623825), FX16_CONST(0.9875439417943592),
+ FX16_CONST(-0.15582839765426507), FX16_CONST(0.9877841416445722),
+ FX16_CONST(-0.15431297301302063), FX16_CONST(0.9880220171432835),
+ FX16_CONST(-0.1527971852584438), FX16_CONST(0.9882575677307495),
+ FX16_CONST(-0.15128103795733044), FX16_CONST(0.9884907928526966),
+ FX16_CONST(-0.1497645346773216), FX16_CONST(0.9887216919603238),
+ FX16_CONST(-0.14824767898689595), FX16_CONST(0.988950264510303),
+ FX16_CONST(-0.1467304744553624), FX16_CONST(0.9891765099647809),
+ FX16_CONST(-0.14521292465284794), FX16_CONST(0.9894004277913803),
+ FX16_CONST(-0.14369503315029475), FX16_CONST(0.9896220174632008),
+ FX16_CONST(-0.1421768035194482), FX16_CONST(0.9898412784588205),
+ FX16_CONST(-0.1406582393328492), FX16_CONST(0.9900582102622971),
+ FX16_CONST(-0.13913934416382603), FX16_CONST(0.9902728123631691),
+ FX16_CONST(-0.1376201215864866), FX16_CONST(0.990485084256457),
+ FX16_CONST(-0.1361005751757066), FX16_CONST(0.9906950254426646),
+ FX16_CONST(-0.13458070850712642), FX16_CONST(0.99090263542778),
+ FX16_CONST(-0.13306052515713912), FX16_CONST(0.9911079137232768),
+ FX16_CONST(-0.131540028702883), FX16_CONST(0.9913108598461154),
+ FX16_CONST(-0.13001922272223398), FX16_CONST(0.9915114733187439),
+ FX16_CONST(-0.12849811079379364), FX16_CONST(0.9917097536690994),
+ FX16_CONST(-0.12697669649688617), FX16_CONST(0.9919057004306093),
+ FX16_CONST(-0.12545498341154637), FX16_CONST(0.9920993131421917),
+ FX16_CONST(-0.12393297511851216), FX16_CONST(0.9922905913482574),
+ FX16_CONST(-0.12241067519921603), FX16_CONST(0.99247953459871),
+ FX16_CONST(-0.12088808723577762), FX16_CONST(0.9926661424489479),
+ FX16_CONST(-0.11936521481099176), FX16_CONST(0.992850414459865),
+ FX16_CONST(-0.1178420615083252), FX16_CONST(0.9930323501978514),
+ FX16_CONST(-0.11631863091190484), FX16_CONST(0.9932119492347945),
+ FX16_CONST(-0.11479492660650999), FX16_CONST(0.9933892111480807),
+ FX16_CONST(-0.11327095217756497), FX16_CONST(0.9935641355205953),
+ FX16_CONST(-0.11174671121112706), FX16_CONST(0.9937367219407246),
+ FX16_CONST(-0.11022220729388336), FX16_CONST(0.9939069700023561),
+ FX16_CONST(-0.10869744401313887), FX16_CONST(0.9940748793048794),
+ FX16_CONST(-0.10717242495680884), FX16_CONST(0.9942404494531879),
+ FX16_CONST(-0.10564715371341044), FX16_CONST(0.9944036800576791),
+ FX16_CONST(-0.10412163387205513), FX16_CONST(0.9945645707342554),
+ FX16_CONST(-0.10259586902243668), FX16_CONST(0.9947231211043257),
+ FX16_CONST(-0.10106986275482806), FX16_CONST(0.9948793307948056),
+ FX16_CONST(-0.0995436186600694), FX16_CONST(0.9950331994381186),
+ FX16_CONST(-0.0980171403295605), FX16_CONST(0.9951847266721969),
+ FX16_CONST(-0.09649043135525323), FX16_CONST(0.9953339121404822),
+ FX16_CONST(-0.09496349532963948), FX16_CONST(0.9954807554919269),
+ FX16_CONST(-0.09343633584574809), FX16_CONST(0.9956252563809943),
+ FX16_CONST(-0.09190895649713288), FX16_CONST(0.9957674144676598),
+ FX16_CONST(-0.09038136087786497), FX16_CONST(0.9959072294174117),
+ FX16_CONST(-0.08885355258252442), FX16_CONST(0.996044700901252),
+ FX16_CONST(-0.08732553520619263), FX16_CONST(0.9961798285956969),
+ FX16_CONST(-0.08579731234444028), FX16_CONST(0.996312612182778),
+ FX16_CONST(-0.08426888759332431), FX16_CONST(0.9964430513500426),
+ FX16_CONST(-0.08274026454937576), FX16_CONST(0.9965711457905548),
+ FX16_CONST(-0.08121144680959234), FX16_CONST(0.9966968952028961),
+ FX16_CONST(-0.07968243797143075), FX16_CONST(0.9968202992911657),
+ FX16_CONST(-0.07815324163279472), FX16_CONST(0.996941357764982),
+ FX16_CONST(-0.07662386139203181), FX16_CONST(0.997060070339483),
+ FX16_CONST(-0.07509430084792147), FX16_CONST(0.9971764367353261),
+ FX16_CONST(-0.07356456359966741), FX16_CONST(0.9972904566786902),
+ FX16_CONST(-0.07203465324688915), FX16_CONST(0.9974021299012753),
+ FX16_CONST(-0.07050457338961442), FX16_CONST(0.9975114561403035),
+ FX16_CONST(-0.06897432762826713), FX16_CONST(0.9976184351385196),
+ FX16_CONST(-0.06744391956366429), FX16_CONST(0.9977230666441916),
+ FX16_CONST(-0.06591335279700389), FX16_CONST(0.9978253504111116),
+ FX16_CONST(-0.06438263092985737), FX16_CONST(0.997925286198596),
+ FX16_CONST(-0.06285175756416206), FX16_CONST(0.9980228737714861),
+ FX16_CONST(-0.06132073630220906), FX16_CONST(0.9981181129001492),
+ FX16_CONST(-0.05978957074664019), FX16_CONST(0.9982110033604782),
+ FX16_CONST(-0.05825826450043591), FX16_CONST(0.9983015449338928),
+ FX16_CONST(-0.05672682116690774), FX16_CONST(0.9983897374073402),
+ FX16_CONST(-0.055195244349689775), FX16_CONST(0.9984755805732948),
+ FX16_CONST(-0.05366353765273108), FX16_CONST(0.9985590742297593),
+ FX16_CONST(-0.05213170468028372), FX16_CONST(0.9986402181802652),
+ FX16_CONST(-0.05059974903689952), FX16_CONST(0.9987190122338729),
+ FX16_CONST(-0.04906767432741809), FX16_CONST(0.9987954562051724),
+ FX16_CONST(-0.04753548415695922), FX16_CONST(0.9988695499142836),
+ FX16_CONST(-0.04600318213091527), FX16_CONST(0.9989412931868569),
+ FX16_CONST(-0.044470771854939146), FX16_CONST(0.9990106858540733),
+ FX16_CONST(-0.04293825693494114), FX16_CONST(0.9990777277526454),
+ FX16_CONST(-0.0414056409770769), FX16_CONST(0.9991424187248169),
+ FX16_CONST(-0.03987292758773981), FX16_CONST(0.9992047586183639),
+ FX16_CONST(-0.038340120373552534), FX16_CONST(0.9992647472865944),
+ FX16_CONST(-0.036807222941359394), FX16_CONST(0.9993223845883494),
+ FX16_CONST(-0.03527423889821435), FX16_CONST(0.9993776703880028),
+ FX16_CONST(-0.03374117185137782), FX16_CONST(0.9994306045554617),
+ FX16_CONST(-0.03220802540830466), FX16_CONST(0.999481186966167),
+ FX16_CONST(-0.030674803176636543), FX16_CONST(0.9995294175010931),
+ FX16_CONST(-0.029141508764194368), FX16_CONST(0.9995752960467492),
+ FX16_CONST(-0.027608145778966225), FX16_CONST(0.9996188224951786),
+ FX16_CONST(-0.02607471782910422), FX16_CONST(0.9996599967439592),
+ FX16_CONST(-0.024541228522912448), FX16_CONST(0.9996988186962042),
+ FX16_CONST(-0.023007681468839372), FX16_CONST(0.9997352882605617),
+ FX16_CONST(-0.021474080275469345), FX16_CONST(0.9997694053512153),
+ FX16_CONST(-0.019940428551515003), FX16_CONST(0.9998011698878843),
+ FX16_CONST(-0.018406729905805226), FX16_CONST(0.9998305817958234),
+ FX16_CONST(-0.016872987947281957), FX16_CONST(0.9998576410058239),
+ FX16_CONST(-0.015339206284988182), FX16_CONST(0.9998823474542126),
+ FX16_CONST(-0.01380538852806031), FX16_CONST(0.9999047010828529),
+ FX16_CONST(-0.012271538285720572), FX16_CONST(0.9999247018391445),
+ FX16_CONST(-0.010737659167264976), FX16_CONST(0.9999423496760239),
+ FX16_CONST(-0.009203754782060144), FX16_CONST(0.9999576445519639),
+ FX16_CONST(-0.007669828739531261), FX16_CONST(0.9999705864309741),
+ FX16_CONST(-0.006135884649154477), FX16_CONST(0.9999811752826011),
+ FX16_CONST(-0.004601926120448411), FX16_CONST(0.9999894110819284),
+ FX16_CONST(-0.003067956762966544), FX16_CONST(0.9999952938095762),
+ FX16_CONST(-0.0015339801862851719), FX16_CONST(0.9999988234517019)
+};
diff --git a/arm9/modules/04/asm/thumb_04.s b/arm9/modules/04/asm/thumb_04.s
index 12374ec5..db78d4fc 100644
--- a/arm9/modules/04/asm/thumb_04.s
+++ b/arm9/modules/04/asm/thumb_04.s
@@ -61,7 +61,7 @@ _021D74F2:
bic r0, r1
mov r1, #0x2b
lsl r1, r1, #0xc
- bl tempName_NNS_FndCreateExpHeapEx
+ bl NNS_FndCreateExpHeapEx
ldr r1, _021D7644 ; =UNK04_0220FBC0
ldr r3, _021D7654 ; =0x00001F08
ldr r2, [r1]
@@ -195,7 +195,7 @@ MOD04_021D7660: ; 0x021D7660
beq _021D7698
ldr r0, _021D76A4 ; =0x00001F08
ldr r0, [r1, r0]
- bl thunk_FUN_020adc8c
+ bl NNS_FndDestroyExpHeap
ldr r0, _021D76A0 ; =UNK04_0220FBC0
ldr r1, _021D76A8 ; =0x00001F54
ldr r2, [r0]
@@ -1130,7 +1130,7 @@ MOD04_021D7DA8: ; 0x021D7DA8
ldr r0, _021D7DE8 ; =0x00001F08
ldr r0, [r1, r0]
add r1, r5, #0
- bl tempName_NNS_FndAllocFromExpHeapEx
+ bl NNS_FndAllocFromExpHeapEx
add r5, r0, #0
bne _021D7DD8
mov r0, #1
@@ -1160,7 +1160,7 @@ MOD04_021D7DEC: ; 0x021D7DEC
ldr r0, _021D7E14 ; =0x00001F08
ldr r0, [r1, r0]
add r1, r5, #0
- bl FUN_020ADDF0
+ bl NNS_FndFreeToExpHeap
add r0, r4, #0
bl OS_RestoreInterrupts
_021D7E0C:
@@ -2347,12 +2347,12 @@ _021D86CE:
str r1, [r2, r0]
mov r0, #1
bl FUN_020AA770
- bl SDAT_Init
+ bl NNS_SndInit
ldr r0, _021D8718 ; =UNK04_0220FBC8
ldr r1, [r0, #4]
ldr r0, _021D8728 ; =0x00003504
add r0, r1, r0
- bl FUN_020C16FC
+ bl NNS_SndStrmInit
ldr r1, _021D8718 ; =UNK04_0220FBC8
mov r0, #0
ldr r2, [r1, #4]
@@ -2887,13 +2887,13 @@ _021D8ACA:
ldr r0, [r5, #4]
add r2, sp, #0x10
add r0, r0, r3
- bl FUN_020C169C
+ bl NNS_SndStrmAllocChannel
add r0, r5, #0
ldr r1, [r0, #4]
ldr r0, _021D8BDC ; =0x00003504
add r0, r1, r0
mov r1, #0
- bl FUN_020C13C4
+ bl NNS_SndStrmSetVolume
mov r0, #0x41
str r0, [sp]
mov r0, #2
@@ -2914,7 +2914,7 @@ _021D8ACA:
add r2, r3, r2
mov r1, #1
lsl r3, r7, #1
- bl FUN_020C14AC
+ bl NNS_SndStrmSetup
ldr r2, _021D8BCC ; =UNK04_0220FBC8
ldr r1, _021D8BE4 ; =0x000034F8
ldr r0, [r2, #4]
@@ -2975,14 +2975,14 @@ _021D8BEC: .word 0x000034FC
thumb_func_start MOD04_021D8BF0
MOD04_021D8BF0: ; 0x021D8BF0
ldr r0, _021D8BFC ; =UNK04_0220FBC8
- ldr r3, _021D8C00 ; =FUN_020C1458
+ ldr r3, _021D8C00 ; =NNS_SndStrmStart
ldr r1, [r0, #4]
ldr r0, _021D8C04 ; =0x00003504
add r0, r1, r0
bx r3
.align 2, 0
_021D8BFC: .word UNK04_0220FBC8
-_021D8C00: .word FUN_020C1458
+_021D8C00: .word NNS_SndStrmStart
_021D8C04: .word 0x00003504
thumb_func_start MOD04_021D8C08
@@ -3052,12 +3052,12 @@ MOD04_021D8C6C: ; 0x021D8C6C
ldr r1, [r0, #4]
ldr r0, _021D8CC4 ; =0x00003504
add r0, r1, r0
- bl FUN_020C1430
+ bl NNS_SndStrmStop
ldr r0, _021D8CBC ; =UNK04_0220FBC8
ldr r1, [r0, #4]
ldr r0, _021D8CC4 ; =0x00003504
add r0, r1, r0
- bl FUN_020C1674
+ bl NNS_SndStrmFreeChannel
bl VCT_Cleanup
ldr r1, _021D8CBC ; =UNK04_0220FBC8
mov r0, #0x35
diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s
index e66ad6aa..ec0e0a0e 100644
--- a/arm9/modules/05/asm/mod05_021D74E0.s
+++ b/arm9/modules/05/asm/mod05_021D74E0.s
@@ -727,7 +727,7 @@ MOD05_021D7B10: ; 0x021D7B10
MOD05_021D7B38: ; 0x021D7B38
push {lr}
sub sp, #0x14
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7c
@@ -826,7 +826,7 @@ MOD05_021D7BE0: ; 0x021D7BE0
ldr r0, [r0]
ldr r1, [r4, #0x2c]
bl MOD05_021E805C
- ldr r5, _021D7C98 ; =UNK_021CED20
+ ldr r5, _021D7C98 ; =NNS_G3dGlb + 0x8
add r3, sp, #0x40
mov r2, #8
_021D7C0E:
@@ -859,29 +859,29 @@ _021D7C1C:
orr r2, r0
add r0, r1, r2
str r0, [sp, #0x38]
- ldr r1, _021D7C98 ; =UNK_021CED20
+ ldr r1, _021D7C98 ; =NNS_G3dGlb + 0x8
add r0, sp, #0
mov r2, #0x40
bl MIi_CpuCopyFast
- ldr r1, _021D7C9C ; =UNK_021CED98
+ ldr r1, _021D7C9C ; =NNS_G3dGlb + 0x80
mov r0, #0x50
ldr r2, [r1, #0x7c]
bic r2, r0
str r2, [r1, #0x7c]
- bl FUN_020B849C
+ bl NNS_G3dGlbFlushP
ldr r0, [r4, #0x3c]
bl MOD05_021E4BA0
bl FUN_0201F178
- ldr r1, _021D7C98 ; =UNK_021CED20
+ ldr r1, _021D7C98 ; =NNS_G3dGlb + 0x8
add r0, sp, #0x40
mov r2, #0x40
bl MIi_CpuCopyFast
- ldr r1, _021D7C9C ; =UNK_021CED98
+ ldr r1, _021D7C9C ; =NNS_G3dGlb + 0x80
mov r0, #0x50
ldr r2, [r1, #0x7c]
bic r2, r0
str r2, [r1, #0x7c]
- bl FUN_020B849C
+ bl NNS_G3dGlbFlushP
ldr r0, [r4, #4]
ldr r0, [r0, #4]
bl MOD05_021D7FD0
@@ -892,8 +892,8 @@ _021D7C1C:
add sp, #0x80
pop {r3, r4, r5, pc}
nop
-_021D7C98: .word UNK_021CED20
-_021D7C9C: .word UNK_021CED98
+_021D7C98: .word NNS_G3dGlb + 0x8
+_021D7C9C: .word NNS_G3dGlb + 0x80
_021D7CA0: .word UNK_02105BB8
thumb_func_start MOD05_021D7CA4
diff --git a/arm9/modules/05/asm/mod05_021D9A48.s b/arm9/modules/05/asm/mod05_021D9A48.s
index 2e5469f9..85ba30d1 100644
--- a/arm9/modules/05/asm/mod05_021D9A48.s
+++ b/arm9/modules/05/asm/mod05_021D9A48.s
@@ -82,7 +82,7 @@ _021D9ABE:
_021D9AD0:
add r0, r4, #0
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
add r6, r0, #0
bne _021D9AE0
bl ErrorHandling
@@ -90,7 +90,7 @@ _021D9AE0:
ldr r0, [sp, #0x1c]
add r1, r6, #0
add r2, r7, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r5]
cmp r5, #0
bne _021D9AF4
@@ -100,7 +100,7 @@ _021D9AF4:
ldr r3, [sp, #0x18]
add r1, r6, #0
add r2, r7, #0
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
add r0, r4, #0
pop {r3, r4, r5, r6, r7, pc}
@@ -117,7 +117,7 @@ _021D9B0E:
mov r0, #0
pop {r3, pc}
_021D9B16:
- bl FUN_020B7E28
+ bl NNS_G3dRenderObjRemoveAnmObj
mov r0, #1
pop {r3, pc}
.balign 4, 0
@@ -571,7 +571,7 @@ _021D9E58:
add r1, r6, r1
ldr r0, [sp]
ldr r1, [r1, #0x10]
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
_021D9E6A:
add sp, #0x18
mov r0, #1
@@ -671,7 +671,7 @@ _021D9F12:
add r1, r4, r1
ldr r0, [sp, #0xc]
ldr r1, [r1, #0x10]
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
mov r0, #1
str r0, [sp]
b _021D9F32
@@ -709,7 +709,7 @@ _021D9F54:
bne _021D9F6E
ldr r1, [r5, #0x10]
add r0, r6, #0
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
str r7, [r5, #0x10]
ldr r0, [r5, #0x24]
bl FreeToHeap
@@ -743,7 +743,7 @@ _021D9F90:
bne _021D9FAC
ldr r1, [r5]
add r0, r4, #0
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
mov r0, #0
str r0, [r5]
ldr r0, [r5, #0x14]
@@ -1320,7 +1320,7 @@ _021DA360:
bl MOD05_021D9B04
ldr r0, [r6, #0x14]
ldr r1, [sp]
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
_021DA378:
add r0, r4, #1
lsl r0, r0, #0x18
diff --git a/arm9/modules/05/asm/mod05_021DB44C.s b/arm9/modules/05/asm/mod05_021DB44C.s
index 039db6a9..6da3dfc5 100644
--- a/arm9/modules/05/asm/mod05_021DB44C.s
+++ b/arm9/modules/05/asm/mod05_021DB44C.s
@@ -229,21 +229,21 @@ MOD05_021DB5EC: ; 0x021DB5EC
add r4, r0, #0
mov r1, #0
mov r2, #0x40
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
add r0, r4, #0
mov r1, #0
mov r2, #0x80
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
mov r2, #2
add r0, r4, #0
mov r1, #0
lsl r2, r2, #8
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
mov r2, #1
add r0, r4, #0
mov r1, #0
lsl r2, r2, #0xa
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
pop {r4, pc}
thumb_func_start MOD05_021DB61C
diff --git a/arm9/modules/05/asm/mod05_021DBABC.s b/arm9/modules/05/asm/mod05_021DBABC.s
index 0481b9eb..2c2bb7d6 100644
--- a/arm9/modules/05/asm/mod05_021DBABC.s
+++ b/arm9/modules/05/asm/mod05_021DBABC.s
@@ -51,7 +51,7 @@ _021DBAFA:
ldrsh r2, [r5, r2]
ldrsh r3, [r5, r3]
add r0, r4, #0
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
_021DBB14:
add r1, r4, #4
mov r0, #1
@@ -60,7 +60,7 @@ _021DBB14:
beq _021DBB26
ldrh r1, [r6, #0x18]
add r0, r4, #0
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
_021DBB26:
add r4, r4, #1
add r5, r5, #6
@@ -77,7 +77,7 @@ _021DBB26:
ldrh r0, [r0, #0x20]
ldrh r1, [r1, #0x22]
ldr r2, [r2, #0x28]
- bl FUN_020B83E0
+ bl NNS_G3dGlbMaterialColorDiffAmb
_021DBB48:
mov r0, #3
lsl r0, r0, #0xa
@@ -89,7 +89,7 @@ _021DBB48:
ldrh r0, [r0, #0x24]
ldrh r1, [r1, #0x26]
ldr r2, [r2, #0x2c]
- bl FUN_020B83BC
+ bl NNS_G3dGlbMaterialColorSpecEmi
_021DBB60:
mov r0, #1
lsl r0, r0, #0xc
@@ -109,7 +109,7 @@ _021DBB60:
ldr r0, [r0, #0x30]
ldr r2, [r2, #0x38]
ldr r3, [r3, #0x3c]
- bl FUN_020B8390
+ bl NNS_G3dGlbPolygonAttr
_021DBB88:
add sp, #0xc
pop {r4, r5, r6, r7, pc}
@@ -126,7 +126,7 @@ MOD05_021DBB8C: ; 0x021DBB8C
beq _021DBBA4
ldrh r1, [r5, #0x20]
add r0, r6, #0
- bl FUN_020BBC34
+ bl NNS_G3dMdlSetMdlDiffAll
_021DBBA4:
mov r0, #2
lsl r0, r0, #8
@@ -134,7 +134,7 @@ _021DBBA4:
beq _021DBBB4
ldrh r1, [r5, #0x22]
add r0, r6, #0
- bl FUN_020BBBF4
+ bl NNS_G3dMdlSetMdlAmbAll
_021DBBB4:
mov r0, #1
lsl r0, r0, #0xa
@@ -142,7 +142,7 @@ _021DBBB4:
beq _021DBBC4
ldrh r1, [r5, #0x24]
add r0, r6, #0
- bl FUN_020BBBB4
+ bl NNS_G3dMdlSetMdlSpecAll
_021DBBC4:
mov r0, #2
lsl r0, r0, #0xa
@@ -150,7 +150,7 @@ _021DBBC4:
beq _021DBBD4
ldrh r1, [r5, #0x26]
add r0, r6, #0
- bl FUN_020BBB74
+ bl NNS_G3dMdlSetMdlEmiAll
_021DBBD4:
mov r0, #1
lsl r0, r0, #0xc
@@ -158,7 +158,7 @@ _021DBBD4:
beq _021DBBE4
ldr r1, [r5, #0x30]
add r0, r6, #0
- bl FUN_020BBB34
+ bl NNS_G3dMdlSetMdlLightEnableFlagAll
_021DBBE4:
mov r0, #2
lsl r0, r0, #0xc
@@ -166,7 +166,7 @@ _021DBBE4:
beq _021DBBF4
ldr r1, [r5, #0x34]
add r0, r6, #0
- bl FUN_020BBAF4
+ bl NNS_G3dMdlSetMdlPolygonModeAll
_021DBBF4:
mov r0, #1
lsl r0, r0, #0xe
@@ -174,7 +174,7 @@ _021DBBF4:
beq _021DBC04
ldr r1, [r5, #0x38]
add r0, r6, #0
- bl FUN_020BBAB4
+ bl NNS_G3dMdlSetMdlCullModeAll
_021DBC04:
mov r0, #2
lsl r0, r0, #0xe
@@ -182,7 +182,7 @@ _021DBC04:
beq _021DBC14
ldr r1, [r5, #0x3c]
add r0, r6, #0
- bl FUN_020BBA74
+ bl NNS_G3dMdlSetMdlPolygonIDAll
_021DBC14:
mov r0, #1
lsl r0, r0, #0x10
@@ -190,7 +190,7 @@ _021DBC14:
beq _021DBC24
ldr r1, [r5, #0x40]
add r0, r6, #0
- bl FUN_020BBA34
+ bl NNS_G3dMdlSetMdlAlphaAll
_021DBC24:
mov r1, #2
lsl r1, r1, #0x10
@@ -201,7 +201,7 @@ _021DBC24:
lsr r1, r1, #2
add r0, r6, #0
and r1, r2
- bl FUN_020BB9F4
+ bl NNS_G3dMdlSetMdlFogEnableFlagAll
_021DBC3A:
mov r1, #1
lsl r1, r1, #0x12
@@ -212,7 +212,7 @@ _021DBC3A:
lsr r1, r1, #4
add r0, r6, #0
and r1, r2
- bl FUN_020BB9B4
+ bl NNS_G3dMdlSetMdlDepthTestCondAll
_021DBC50:
mov r1, #2
lsl r1, r1, #0x12
@@ -223,7 +223,7 @@ _021DBC50:
lsr r1, r1, #6
add r0, r6, #0
and r1, r2
- bl FUN_020BB974
+ bl NNS_G3dMdlSetMdl1DotAll
_021DBC66:
mov r1, #1
lsl r1, r1, #0x14
@@ -234,7 +234,7 @@ _021DBC66:
lsr r1, r1, #8
add r0, r6, #0
and r1, r2
- bl FUN_020BB934
+ bl NNS_G3dMdlSetMdlFarClipAll
_021DBC7C:
mov r1, #2
lsl r1, r1, #0x14
@@ -245,7 +245,7 @@ _021DBC7C:
lsr r1, r1, #0xa
add r0, r6, #0
and r1, r2
- bl FUN_020BB8F4
+ bl NNS_G3dMdlSetMdlXLDepthUpdateAll
_021DBC92:
pop {r4, r5, r6, pc}
@@ -268,7 +268,7 @@ MOD05_021DBC94: ; 0x021DBC94
ldrsh r1, [r5, r4]
ldrsh r2, [r2, r4]
ldrsh r3, [r3, r4]
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
pop {r4, r5, r6, pc}
thumb_func_start MOD05_021DBCBC
@@ -280,7 +280,7 @@ MOD05_021DBCBC: ; 0x021DBCBC
strh r2, [r4, r3]
add r0, r1, #0
ldrh r1, [r4, r3]
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
pop {r4, pc}
thumb_func_start MOD05_021DBCD0
diff --git a/arm9/modules/05/asm/mod05_021DBEF4.s b/arm9/modules/05/asm/mod05_021DBEF4.s
index 1d56d13e..f65de9d8 100644
--- a/arm9/modules/05/asm/mod05_021DBEF4.s
+++ b/arm9/modules/05/asm/mod05_021DBEF4.s
@@ -133,7 +133,7 @@ _021DBFA8:
str r0, [r1, r5]
add r0, r1, #0
ldr r0, [r0, r5]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
add r1, r6, r5
str r0, [r1, #8]
add r0, r4, #0
diff --git a/arm9/modules/05/asm/mod05_021DC0B8.s b/arm9/modules/05/asm/mod05_021DC0B8.s
index 1714cbec..b637fb93 100644
--- a/arm9/modules/05/asm/mod05_021DC0B8.s
+++ b/arm9/modules/05/asm/mod05_021DC0B8.s
@@ -1220,7 +1220,7 @@ _021DC998:
str r2, [r1, r0]
ldr r1, [r4, #0xc]
add r0, r3, #4
- ldr r6, _021DCA38 ; =UNK_021CEF70
+ ldr r6, _021DCA38 ; =NNS_G3dGlb + 0x258
add r5, r1, r0
ldmia r6!, {r0, r1}
stmia r5!, {r0, r1}
@@ -1271,7 +1271,7 @@ _021DCA30:
pop {r4, r5, r6, pc}
.balign 4, 0
_021DCA34: .word 0x00000F48
-_021DCA38: .word UNK_021CEF70
+_021DCA38: .word NNS_G3dGlb + 0x258
_021DCA3C: .word 0x00000F58
_021DCA40: .word 0x0400000C
@@ -1897,7 +1897,7 @@ MOD05_021DCECC: ; 0x021DCECC
bl NARC_AllocAndReadWholeMember
add r1, sp, #0x14
str r0, [sp]
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r1, [sp, #0x14]
mov r0, #2
ldr r1, [r1, #0xc]
@@ -1934,7 +1934,7 @@ MOD05_021DCF14: ; 0x021DCF14
bl NARC_AllocAndReadWholeMember
add r1, sp, #0x14
str r0, [sp, #8]
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r3, [sp, #0x14]
mov r0, #0
str r0, [sp]
@@ -1985,7 +1985,7 @@ MOD05_021DCF68: ; 0x021DCF68
_021DCFA0:
ldr r0, [sp, #0x14]
add r1, sp, #0x18
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r3, [sp, #0x18]
mov r0, #0
str r0, [sp]
@@ -2285,7 +2285,7 @@ MOD05_021DD180: ; 0x021DD180
ldr r0, [sp, #0xc]
lsl r1, r1, #0x12
bl FX_Div
- ldr r3, _021DD2B0 ; =UNK_021CEF70
+ ldr r3, _021DD2B0 ; =NNS_G3dGlb + 0x258
str r0, [sp, #0xc]
ldmia r3!, {r0, r1}
add r2, sp, #0x14
@@ -2391,7 +2391,7 @@ _021DD2A4:
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
-_021DD2B0: .word UNK_021CEF70
+_021DD2B0: .word NNS_G3dGlb + 0x258
_021DD2B4: .word 0x00000F4C
_021DD2B8: .word 0xFFFFF000
diff --git a/arm9/modules/05/asm/mod05_021E3444.s b/arm9/modules/05/asm/mod05_021E3444.s
index ea709996..d8a13888 100644
--- a/arm9/modules/05/asm/mod05_021E3444.s
+++ b/arm9/modules/05/asm/mod05_021E3444.s
@@ -1232,7 +1232,7 @@ MOD05_021E3DA0: ; 0x021E3DA0
bl MTX_Identity22_
add r0, sp, #8
ldrh r0, [r0, #0x14]
- ldr r3, _021E3E0C ; =UNK_020FFA38
+ ldr r3, _021E3E0C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1271,7 +1271,7 @@ MOD05_021E3DA0: ; 0x021E3DA0
bl FUN_0200CA98
pop {r3, r4, r5, r6, r7, pc}
nop
-_021E3E0C: .word UNK_020FFA38
+_021E3E0C: .word FX_SinCosTable_
_021E3E10: .word MOD05_021E3D70
thumb_func_start MOD05_021E3E14
@@ -1652,7 +1652,7 @@ MOD05_021E40F0: ; 0x021E40F0
bl DC_FlushRange
add r0, r6, #0
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r1, r0, #0
add r0, r5, #0
add r2, r4, #0
@@ -1671,7 +1671,7 @@ MOD05_021E4118: ; 0x021E4118
bl DC_FlushRange
add r0, r6, #0
mov r1, #1
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
add r1, r0, #0
add r0, r5, #0
add r2, r4, #0
@@ -2286,7 +2286,7 @@ MOD05_021E45A0: ; 0x021E45A0
add r4, r1, #0
lsl r1, r0, #1
lsl r0, r1, #1
- ldr r2, _021E4680 ; =UNK_020FFA38
+ ldr r2, _021E4680 ; =FX_SinCosTable_
add r1, r1, #1
lsl r1, r1, #1
ldrsh r0, [r2, r0]
@@ -2297,7 +2297,7 @@ MOD05_021E45A0: ; 0x021E45A0
asr r0, r4, #4
lsl r1, r0, #1
lsl r0, r1, #1
- ldr r2, _021E4680 ; =UNK_020FFA38
+ ldr r2, _021E4680 ; =FX_SinCosTable_
add r1, r1, #1
lsl r1, r1, #1
ldrsh r0, [r2, r0]
@@ -2389,7 +2389,7 @@ _021E464C:
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
-_021E4680: .word UNK_020FFA38
+_021E4680: .word FX_SinCosTable_
_021E4684: .word 0x00000000
thumb_func_start MOD05_021E4688
diff --git a/arm9/modules/05/asm/mod05_021E4AE4.s b/arm9/modules/05/asm/mod05_021E4AE4.s
index b05969ea..635d46f6 100644
--- a/arm9/modules/05/asm/mod05_021E4AE4.s
+++ b/arm9/modules/05/asm/mod05_021E4AE4.s
@@ -573,7 +573,7 @@ _021E4EC0:
add r0, r4, #0
bl FUN_0201F8E0
mov r1, #1
- bl FUN_020BB9F4
+ bl NNS_G3dMdlSetMdlFogEnableFlagAll
add r0, r4, #0
bl FUN_0201F8E0
bl MOD05_021DB5EC
@@ -969,7 +969,7 @@ MOD05_021E5198: ; 0x021E5198
ldr r0, [r4]
add r6, r1, #0
add r5, r2, #0
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
cmp r0, #0
beq _021E51C8
bl FUN_0201B254
@@ -979,13 +979,13 @@ MOD05_021E5198: ; 0x021E5198
ldr r1, [r0, #8]
bl DC_FlushRange
ldr r0, [r4]
- bl FUN_020BB59C
+ bl NNS_G3dResDefaultSetup
cmp r0, #0
bne _021E51C8
bl ErrorHandling
_021E51C8:
ldr r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -997,7 +997,7 @@ _021E51C8:
_021E51E0:
ldr r1, [r5]
add r0, r6, #0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
pop {r4, r5, r6, pc}
.balign 4, 0
@@ -1038,7 +1038,7 @@ MOD05_021E5224: ; 0x021E5224
add r2, r3, #0
bl MOD05_021E4C6C
str r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
str r0, [r4, #4]
ldrh r1, [r0, #0xe]
add r1, r0, r1
@@ -1046,7 +1046,7 @@ MOD05_021E5224: ; 0x021E5224
add r0, r0, r1
str r0, [r4, #8]
ldr r0, [r4]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r4, #0xc]
cmp r0, #0
beq _021E525A
@@ -1071,17 +1071,17 @@ MOD05_021E5260: ; 0x021E5260
bl MOD05_021E4C6C
str r0, [r5]
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
str r0, [r5, #4]
ldr r1, [r5, #4]
ldr r2, [r4, #8]
add r0, r6, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r5, #8]
ldr r1, [r5, #4]
ldr r2, [r4, #8]
ldr r3, [r4, #0xc]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
pop {r4, r5, r6, pc}
.balign 4, 0
diff --git a/arm9/modules/05/asm/mod05_021E55BC.s b/arm9/modules/05/asm/mod05_021E55BC.s
index 43186ebe..9c384261 100644
--- a/arm9/modules/05/asm/mod05_021E55BC.s
+++ b/arm9/modules/05/asm/mod05_021E55BC.s
@@ -207,7 +207,7 @@ _021E5716:
lsl r0, r0, #0xc
sub r0, r1, r0
str r0, [sp, #0x5c]
- bl FUN_020B8344
+ bl NNS_G3dGlbGetInvV
mov r2, #0
add r5, r0, #0
add r0, sp, #0x24
diff --git a/arm9/modules/05/asm/mod05_021E577C.s b/arm9/modules/05/asm/mod05_021E577C.s
index bf86c095..6ae8f9ed 100644
--- a/arm9/modules/05/asm/mod05_021E577C.s
+++ b/arm9/modules/05/asm/mod05_021E577C.s
@@ -186,7 +186,7 @@ _021E58B2:
lsl r0, r0, #0xc
sub r0, r1, r0
str r0, [sp, #0x5c]
- bl FUN_020B8344
+ bl NNS_G3dGlbGetInvV
mov r2, #0
add r5, r0, #0
add r0, sp, #0x24
diff --git a/arm9/modules/05/asm/mod05_021E5918.s b/arm9/modules/05/asm/mod05_021E5918.s
index 0322f00e..8459b021 100644
--- a/arm9/modules/05/asm/mod05_021E5918.s
+++ b/arm9/modules/05/asm/mod05_021E5918.s
@@ -188,7 +188,7 @@ _021E5A4E:
lsl r0, r0, #0xc
sub r0, r1, r0
str r0, [sp, #0x5c]
- bl FUN_020B8344
+ bl NNS_G3dGlbGetInvV
mov r2, #0
add r5, r0, #0
add r0, sp, #0x24
diff --git a/arm9/modules/05/asm/mod05_021E5AB4.s b/arm9/modules/05/asm/mod05_021E5AB4.s
index ff3779f5..3b0d6a5f 100644
--- a/arm9/modules/05/asm/mod05_021E5AB4.s
+++ b/arm9/modules/05/asm/mod05_021E5AB4.s
@@ -131,13 +131,13 @@ MOD05_021E5B80: ; 0x021E5B80
add r0, r4, #4
ldr r1, [r2, #0x18]
ldr r2, [r2, #0xc]
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4]
ldr r3, [r5, #8]
ldr r1, [r3, #0x18]
ldr r2, [r3, #0xc]
ldr r3, [r3, #0x10]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #8]
add r0, r4, #0
add r0, #0x18
@@ -146,7 +146,7 @@ MOD05_021E5B80: ; 0x021E5B80
add r0, r4, #0
ldr r1, [r4]
add r0, #0x18
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r6, #0
add r1, sp, #0
bl FUN_0206477C
@@ -166,7 +166,7 @@ MOD05_021E5BF8: ; 0x021E5BF8
ldr r4, [r1]
ldr r1, [r4]
add r0, r4, #4
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
@@ -209,7 +209,7 @@ _021E5C40:
bne _021E5C40
ldr r0, [r5]
str r0, [r3]
- bl FUN_020B8344
+ bl NNS_G3dGlbGetInvV
mov r2, #0
add r5, r0, #0
add r0, sp, #0x24
diff --git a/arm9/modules/05/asm/mod05_021E5C8C.s b/arm9/modules/05/asm/mod05_021E5C8C.s
index ab321b6f..dc59dcec 100644
--- a/arm9/modules/05/asm/mod05_021E5C8C.s
+++ b/arm9/modules/05/asm/mod05_021E5C8C.s
@@ -129,13 +129,13 @@ MOD05_021E5D50: ; 0x021E5D50
add r0, r4, #4
ldr r1, [r2, #0x1c]
ldr r2, [r2, #0x10]
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4]
ldr r3, [r5, #8]
ldr r1, [r3, #0x1c]
ldr r2, [r3, #0x10]
ldr r3, [r3, #0x14]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #8]
add r0, r4, #0
add r0, #0x18
@@ -144,7 +144,7 @@ MOD05_021E5D50: ; 0x021E5D50
add r0, r4, #0
ldr r1, [r4]
add r0, #0x18
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r6, #0
add r1, sp, #0
bl FUN_0206477C
@@ -164,7 +164,7 @@ MOD05_021E5DC8: ; 0x021E5DC8
ldr r4, [r1]
ldr r1, [r4]
add r0, r4, #4
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
diff --git a/arm9/modules/05/asm/mod05_021E5E10.s b/arm9/modules/05/asm/mod05_021E5E10.s
index e2e6814e..f5f3ef70 100644
--- a/arm9/modules/05/asm/mod05_021E5E10.s
+++ b/arm9/modules/05/asm/mod05_021E5E10.s
@@ -165,13 +165,13 @@ MOD05_021E5F18: ; 0x021E5F18
add r0, r4, #4
ldr r1, [r2, #0x18]
ldr r2, [r2, #0xc]
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4]
ldr r3, [r5, #8]
ldr r1, [r3, #0x18]
ldr r2, [r3, #0xc]
ldr r3, [r3, #0x10]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #8]
add r0, r4, #0
add r0, #0x18
@@ -180,7 +180,7 @@ MOD05_021E5F18: ; 0x021E5F18
add r0, r4, #0
ldr r1, [r4]
add r0, #0x18
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r6, #0
add r1, sp, #0
bl FUN_0206477C
@@ -200,7 +200,7 @@ MOD05_021E5F90: ; 0x021E5F90
ldr r4, [r1]
ldr r1, [r4]
add r0, r4, #4
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
diff --git a/arm9/modules/05/asm/mod05_021E7C00.s b/arm9/modules/05/asm/mod05_021E7C00.s
index 2e968e4f..686fe698 100644
--- a/arm9/modules/05/asm/mod05_021E7C00.s
+++ b/arm9/modules/05/asm/mod05_021E7C00.s
@@ -448,14 +448,14 @@ MOD05_021E7F10: ; 0x021E7F10
add r4, r3, #0
bl MOD05_021F4BD0
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
add r1, r0, r1
add r0, r5, #0
str r1, [r4]
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
pop {r3, r4, r5, pc}
.balign 4, 0
@@ -466,18 +466,18 @@ MOD05_021E7F34: ; 0x021E7F34
add r0, r1, #0
add r4, r2, #0
add r5, r3, #0
- bl FUN_020B8474
- ldr r1, _021E7FB4 ; =UNK_021CEDD4
+ bl NNS_G3dGlbSetBaseTrans
+ ldr r1, _021E7FB4 ; =NNS_G3dGlb + 0xBC
add r0, r4, #0
bl MI_Copy36B
- ldr r1, _021E7FB8 ; =UNK_021CED98
+ ldr r1, _021E7FB8 ; =NNS_G3dGlb + 0x80
mov r0, #0xa4
ldr r2, [r1, #0x7c]
bic r2, r0
add r0, r5, #0
str r2, [r1, #0x7c]
- bl FUN_020B844C
- bl FUN_020B849C
+ bl NNS_G3dGlbSetBaseScale
+ bl NNS_G3dGlbFlushP
add r2, sp, #0
ldr r0, [sp, #0x1c]
ldr r1, [sp, #0x18]
@@ -511,7 +511,7 @@ _021E7F98:
ldrh r2, [r2, #2]
add r0, r7, #0
add r1, r5, #0
- bl FUN_020BAFB8
+ bl NNS_G3dDraw1Mat1Shp
add r0, r4, #1
lsl r0, r0, #0x18
lsr r4, r0, #0x18
@@ -522,8 +522,8 @@ _021E7F98:
_021E7FB0:
pop {r3, r4, r5, r6, r7, pc}
nop
-_021E7FB4: .word UNK_021CEDD4
-_021E7FB8: .word UNK_021CED98
+_021E7FB4: .word NNS_G3dGlb + 0xBC
+_021E7FB8: .word NNS_G3dGlb + 0x80
thumb_func_start MOD05_021E7FBC
MOD05_021E7FBC: ; 0x021E7FBC
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index 13563cc2..ebf46a48 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -12073,7 +12073,7 @@ _021EE78C:
bne _021EE7C4
sub r0, #0x10
ldr r0, [r2, r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
add r7, r0, #0
ldrh r0, [r7, #0xe]
add r0, r7, r0
@@ -13883,8 +13883,8 @@ MOD05_021EF514: ; 0x021EF514
push {r3, r4, r5, r6, r7, lr}
add r5, r0, #0
bl FUN_020162FC
- bl FUN_020AF6A4
- bl FUN_020AFA30
+ bl NNS_GfdResetLnkTexVramState
+ bl NNS_GfdResetLnkPlttVramState
mov r4, #0
add r6, r5, #4
mov r7, #0x30
@@ -14531,7 +14531,7 @@ _021EF9B0:
_021EF9B6:
ldr r0, [r4, #0xc]
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
add r5, r0, #0
ldrb r0, [r5, #9]
cmp r0, #1
@@ -14547,7 +14547,7 @@ _021EF9CA:
_021EF9D8:
ldr r0, [r4, #8]
add r1, r5, #0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
ldr r0, [r4, #0x18]
mov r1, #1
str r1, [r0]
@@ -14621,14 +14621,14 @@ MOD05_021EFA40: ; 0x021EFA40
bl ErrorHandling
_021EFA6A:
ldr r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrb r0, [r0, #9]
cmp r0, #1
beq _021EFA7A
bl ErrorHandling
_021EFA7A:
ldr r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -14638,7 +14638,7 @@ _021EFA7A:
_021EFA8E:
add r0, r5, #0
add r1, r4, #0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
add r0, r4, #0
pop {r3, r4, r5, pc}
.balign 4, 0
@@ -15780,7 +15780,7 @@ _021F03A8:
asr r0, r1, #4
lsl r3, r0, #1
lsl r1, r3, #1
- ldr r2, _021F0438 ; =UNK_020FFA38
+ ldr r2, _021F0438 ; =FX_SinCosTable_
add r3, r3, #1
lsl r3, r3, #1
ldrsh r1, [r2, r1]
@@ -15794,7 +15794,7 @@ _021F03A8:
asr r0, r5, #4
lsl r2, r0, #1
lsl r1, r2, #1
- ldr r3, _021F0438 ; =UNK_020FFA38
+ ldr r3, _021F0438 ; =FX_SinCosTable_
add r2, r2, #1
lsl r2, r2, #1
ldrsh r1, [r3, r1]
@@ -15839,7 +15839,7 @@ _021F03A8:
pop {r4, r5, r6, r7, pc}
nop
_021F0434: .word UNK05_021F8B6C
-_021F0438: .word UNK_020FFA38
+_021F0438: .word FX_SinCosTable_
thumb_func_start MOD05_021F043C
MOD05_021F043C: ; 0x021F043C
@@ -15866,7 +15866,7 @@ MOD05_021F0454: ; 0x021F0454
bl FUN_0201F008
strh r0, [r5]
ldrh r0, [r5]
- ldr r2, _021F04F0 ; =UNK_020FFA38
+ ldr r2, _021F04F0 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r1, r0, #1
lsl r0, r1, #1
@@ -15909,7 +15909,7 @@ MOD05_021F0454: ; 0x021F0454
str r0, [r5, #0x1c]
add r0, sp, #0
ldrh r0, [r0]
- ldr r3, _021F04F0 ; =UNK_020FFA38
+ ldr r3, _021F04F0 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -15924,7 +15924,7 @@ MOD05_021F0454: ; 0x021F0454
add sp, #0x2c
pop {r4, r5, pc}
nop
-_021F04F0: .word UNK_020FFA38
+_021F04F0: .word FX_SinCosTable_
_021F04F4: .word UNK05_021F8B78
thumb_func_start MOD05_021F04F8
@@ -21368,7 +21368,7 @@ MOD05_021F2E70: ; 0x021F2E70
add r0, r4, #0
bl FUN_0201F8E0
mov r1, #1
- bl FUN_020BB9F4
+ bl NNS_G3dMdlSetMdlFogEnableFlagAll
add r0, r4, #0
bl FUN_0201F8E0
bl MOD05_021DB5EC
@@ -22303,7 +22303,7 @@ _021F3596:
mov r2, #0
bl MOD05_021F2DB0
str r0, [r5, #0x10]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
add r4, r0, #0
add r0, r6, #0
bl MOD05_021F2E00
@@ -25006,7 +25006,7 @@ _021F49E4:
str r0, [r5, r1]
sub r0, r1, #4
ldr r0, [r5, r0]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
ldr r1, _021F4BA8 ; =0x000008A4
str r0, [r5, r1]
ldrh r0, [r7, #8]
@@ -25014,7 +25014,7 @@ _021F49E4:
beq _021F4A2C
sub r0, r1, #4
ldr r0, [r5, r0]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
ldr r1, _021F4BB0 ; =0x000008A8
str r0, [r5, r1]
b _021F4A32
@@ -25099,7 +25099,7 @@ _021F4ABE:
cmp r6, r0
bge _021F4AEC
ldr r0, [r4, #4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
add r1, r0, #0
ldrh r2, [r1, #0xe]
ldr r3, [r7, #4]
@@ -25137,7 +25137,7 @@ _021F4B10:
mov r2, #4
bl NARC_AllocAndReadWholeMember
str r0, [r5, #4]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
add r4, r0, #0
beq _021F4B46
bl FUN_0201B3C4
@@ -26120,7 +26120,7 @@ MOD05_021F5268: ; 0x021F5268
add r2, r5, #0
bl UncompressFromNarc
str r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
str r0, [r4, #4]
ldrh r1, [r0, #0xe]
add r1, r0, r1
@@ -26128,7 +26128,7 @@ MOD05_021F5268: ; 0x021F5268
add r0, r0, r1
str r0, [r4, #8]
ldr r0, [r4]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r4, #0xc]
cmp r0, #0
beq _021F52A4
@@ -26166,18 +26166,18 @@ MOD05_021F52C8: ; 0x021F52C8
beq _021F52F8
add r1, sp, #4
add r2, sp, #0
- bl FUN_020B7CF0
- ldr r1, _021F5314 ; =UNK_021064BC
+ bl NNS_G3dTexReleaseTexKey
+ ldr r1, _021F5314 ; =NNS_GfdDefaultFuncFreeTexVram
ldr r0, [sp, #4]
ldr r1, [r1]
blx r1
- ldr r1, _021F5314 ; =UNK_021064BC
+ ldr r1, _021F5314 ; =NNS_GfdDefaultFuncFreeTexVram
ldr r0, [sp]
ldr r1, [r1]
blx r1
ldr r0, [r4, #0xc]
- bl FUN_020B7C58
- ldr r1, _021F5318 ; =UNK_021064C4
+ bl NNS_G3dPlttReleasePlttKey
+ ldr r1, _021F5318 ; =NNS_GfdDefaultFuncFreePlttVram
ldr r1, [r1]
blx r1
_021F52F8:
@@ -26196,8 +26196,8 @@ _021F5306:
add sp, #8
pop {r4, pc}
nop
-_021F5314: .word UNK_021064BC
-_021F5318: .word UNK_021064C4
+_021F5314: .word NNS_GfdDefaultFuncFreeTexVram
+_021F5318: .word NNS_GfdDefaultFuncFreePlttVram
thumb_func_start MOD05_021F531C
MOD05_021F531C: ; 0x021F531C
@@ -26241,7 +26241,7 @@ MOD05_021F5358: ; 0x021F5358
beq _021F5376
add r0, r1, #0
ldr r1, [r4, #8]
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
ldr r0, [r4, #0x10]
cmp r0, #0
bne _021F5376
@@ -26343,7 +26343,7 @@ MOD05_021F5400: ; 0x021F5400
bl memset
ldr r1, [r5, #8]
add r0, r4, #0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
mov r0, #1
str r0, [r4, #0x6c]
lsl r0, r0, #0xc
@@ -26354,11 +26354,11 @@ MOD05_021F5400: ; 0x021F5400
thumb_func_start MOD05_021F5424
MOD05_021F5424: ; 0x021F5424
- ldr r3, _021F542C ; =FUN_020B7EFC
+ ldr r3, _021F542C ; =NNS_G3dRenderObjAddAnmObj
ldr r1, [r1, #8]
bx r3
nop
-_021F542C: .word FUN_020B7EFC
+_021F542C: .word NNS_G3dRenderObjAddAnmObj
thumb_func_start MOD05_021F5430
MOD05_021F5430: ; 0x021F5430
@@ -26373,7 +26373,7 @@ MOD05_021F5430: ; 0x021F5430
add r0, r4, #0
add r0, #0x70
ldrh r0, [r0]
- ldr r3, _021F54C8 ; =UNK_020FFA38
+ ldr r3, _021F54C8 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -26390,7 +26390,7 @@ MOD05_021F5430: ; 0x021F5430
add r0, r4, #0
add r0, #0x74
ldrh r0, [r0]
- ldr r3, _021F54C8 ; =UNK_020FFA38
+ ldr r3, _021F54C8 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -26407,7 +26407,7 @@ MOD05_021F5430: ; 0x021F5430
add r0, r4, #0
add r0, #0x72
ldrh r0, [r0]
- ldr r3, _021F54C8 ; =UNK_020FFA38
+ ldr r3, _021F54C8 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -26432,7 +26432,7 @@ _021F54C4:
add sp, #0x48
pop {r4, pc}
.balign 4, 0
-_021F54C8: .word UNK_020FFA38
+_021F54C8: .word FX_SinCosTable_
thumb_func_start MOD05_021F54CC
MOD05_021F54CC: ; 0x021F54CC
@@ -26471,17 +26471,17 @@ MOD05_021F54EC: ; 0x021F54EC
add r0, r2, #0
mov r1, #0
add r6, r3, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
str r0, [r5, #4]
ldr r1, [r5, #4]
ldr r2, [r4, #8]
add r0, r6, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r5, #8]
ldr r1, [r5, #4]
ldr r2, [r4, #8]
ldr r3, [r4, #0xc]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
pop {r4, r5, r6, pc}
thumb_func_start MOD05_021F5518
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index 62cd7742..9679d0e0 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -2393,7 +2393,7 @@ MOD06_0223A828: ; 0x0223A828
str r1, [r0]
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add r4, #0x40
add r0, r4, #0
bl MOD06_0223A400
@@ -2401,7 +2401,7 @@ MOD06_0223A828: ; 0x0223A828
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
_0223A860:
add sp, #4
pop {r3, r4, pc}
@@ -23537,11 +23537,11 @@ MOD06_02244F84: ; 0x02244F84
add r7, r0, #0
add r0, r5, #0
mov r1, #1
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
str r0, [sp]
add r0, r7, #0
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
mov r1, #0x32
add r5, r0, #0
add r0, r4, #0
@@ -24040,7 +24040,7 @@ _02245392:
ldr r1, [r5, #0x2c]
bl MOD05_021F4BD0
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -28490,7 +28490,7 @@ MOD06_02247544: ; 0x02247544
bl NARC_AllocAndReadWholeMember
add r1, r5, #0
add r4, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r1, [r5]
mov r0, #3
ldr r1, [r1, #0xc]
@@ -28513,7 +28513,7 @@ MOD06_0224756C: ; 0x0224756C
bl NARC_AllocAndReadWholeMember
add r1, r4, #0
add r6, r0, #0
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r3, [r4]
mov r0, #0
str r0, [sp]
@@ -28551,7 +28551,7 @@ MOD06_022475A4: ; 0x022475A4
bl NARC_AllocAndReadWholeMember
add r1, r4, #0
add r6, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r3, [r4]
add r0, r5, #0
add r2, r3, #0
@@ -28870,7 +28870,7 @@ MOD06_02247808: ; 0x02247808
bl FUN_020094F0
bl FUN_02009C5C
mov r1, #1
- bl FUN_020B1A14
+ bl NNS_G2dGetImageLocation
mov r1, #0x32
add r5, r0, #0
add r0, r4, #0
@@ -28923,7 +28923,7 @@ MOD06_02247860: ; 0x02247860
add r1, r6, #0
bl FUN_02009E54
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r5, r0, #0
add r0, r4, #0
mov r1, #0x20
@@ -32641,12 +32641,12 @@ MOD06_022494E4: ; 0x022494E4
ldr r0, [r5, r0]
mov r1, #1
lsl r2, r2, #0x10
- bl FUN_020BC02C
+ bl NNSi_G3dModifyPolygonAttrMask
mov r0, #0x49
lsl r0, r0, #2
ldr r0, [r5, r0]
add r1, r4, #0
- bl FUN_020BBA34
+ bl NNS_G3dMdlSetMdlAlphaAll
pop {r3, r4, r5, pc}
thumb_func_start MOD06_02249508
@@ -34087,10 +34087,10 @@ _0224A000:
ldr r0, [r4, #0x18]
mov r1, #1
lsl r2, r2, #0x10
- bl FUN_020BC02C
+ bl NNSi_G3dModifyPolygonAttrMask
ldr r0, [r4, #0x18]
ldr r1, [r4, #0xc]
- bl FUN_020BBA34
+ bl NNS_G3dMdlSetMdlAlphaAll
ldr r0, [r4, #0x14]
add r1, sp, #0x30
add r2, sp, #0
@@ -35048,13 +35048,13 @@ MOD06_0224A710: ; 0x0224A710
add r0, r4, #4
ldr r1, [r2, #0x18]
ldr r2, [r2, #0xc]
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4]
ldr r3, [r5, #0x14]
ldr r1, [r3, #0x18]
ldr r2, [r3, #0xc]
ldr r3, [r3, #0x10]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #0x14]
add r0, r4, #0
add r0, #0x18
@@ -35063,7 +35063,7 @@ MOD06_0224A710: ; 0x0224A710
add r0, r4, #0
ldr r1, [r4]
add r0, #0x18
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
ldr r0, [r5, #0x18]
bl FUN_02058448
str r0, [r5, #4]
@@ -35108,7 +35108,7 @@ MOD06_0224A7C8: ; 0x0224A7C8
ldr r4, [r1, #0x1c]
ldr r1, [r4]
add r0, r4, #4
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
@@ -36429,13 +36429,13 @@ MOD06_0224B188: ; 0x0224B188
add r0, r4, #4
ldr r1, [r2, #0x18]
ldr r2, [r2, #0xc]
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4]
ldr r3, [r5, #8]
ldr r1, [r3, #0x18]
ldr r2, [r3, #0xc]
ldr r3, [r3, #0x10]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #8]
add r0, r4, #0
add r0, #0x18
@@ -36444,7 +36444,7 @@ MOD06_0224B188: ; 0x0224B188
add r0, r4, #0
ldr r1, [r4]
add r0, #0x18
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r6, #0
add r1, sp, #0
bl FUN_0206477C
@@ -36464,7 +36464,7 @@ MOD06_0224B200: ; 0x0224B200
ldr r4, [r1]
ldr r1, [r4]
add r0, r4, #4
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
@@ -36635,13 +36635,13 @@ MOD06_0224B324: ; 0x0224B324
add r0, r4, #4
ldr r1, [r2, #0x18]
ldr r2, [r2, #0xc]
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4]
ldr r3, [r5, #8]
ldr r1, [r3, #0x18]
ldr r2, [r3, #0xc]
ldr r3, [r3, #0x10]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #8]
add r0, r4, #0
add r0, #0x18
@@ -36650,7 +36650,7 @@ MOD06_0224B324: ; 0x0224B324
add r0, r4, #0
ldr r1, [r4]
add r0, #0x18
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r6, #0
add r1, sp, #0
bl FUN_0206477C
@@ -36670,7 +36670,7 @@ MOD06_0224B39C: ; 0x0224B39C
ldr r4, [r1]
ldr r1, [r4]
add r0, r4, #4
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
add r0, r4, #0
bl MOD05_021E4C00
pop {r4, pc}
@@ -38617,14 +38617,14 @@ _0224C328:
bl MOD05_021F4BD0
str r0, [sp, #0x18]
ldr r0, [r6]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
add r7, r0, r1
ldr r0, [sp, #0x18]
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -38901,7 +38901,7 @@ _0224C590:
ldr r1, [r5, #0x2c]
bl MOD05_021F4BD0
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r2, sp, #0x18
mov r3, #0
@@ -43012,7 +43012,7 @@ _0224E604:
ldr r1, [r6, #0x2c]
bl MOD05_021F4BD0
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s
index 1110fa5c..e810c620 100644
--- a/arm9/modules/07/asm/module_07.s
+++ b/arm9/modules/07/asm/module_07.s
@@ -3155,7 +3155,7 @@ _0221380C: .word 0x00000B58
thumb_func_start MOD07_02213810
MOD07_02213810: ; 0x02213810
push {r4, lr}
- ldr r3, _02213830 ; =UNK_021064B8
+ ldr r3, _02213830 ; =NNS_GfdDefaultFuncAllocTexVram
mov r2, #0
ldr r3, [r3]
blx r3
@@ -3169,12 +3169,12 @@ _02213828:
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02213830: .word UNK_021064B8
+_02213830: .word NNS_GfdDefaultFuncAllocTexVram
thumb_func_start MOD07_02213834
MOD07_02213834: ; 0x02213834
push {r4, lr}
- ldr r3, _02213854 ; =UNK_021064C0
+ ldr r3, _02213854 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r2, #1
ldr r3, [r3]
blx r3
@@ -3188,7 +3188,7 @@ _0221384C:
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02213854: .word UNK_021064C0
+_02213854: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD07_02213858
MOD07_02213858: ; 0x02213858
@@ -3319,7 +3319,7 @@ MOD07_02213924: ; 0x02213924
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x10
add r4, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r2, [sp, #0x10]
mov r0, #3
ldr r1, [r2, #0xc]
diff --git a/arm9/modules/08/asm/module_08.s b/arm9/modules/08/asm/module_08.s
index b6af83a9..0ff32867 100644
--- a/arm9/modules/08/asm/module_08.s
+++ b/arm9/modules/08/asm/module_08.s
@@ -8063,7 +8063,7 @@ MOD08_02215A44: ; 0x02215A44
cmp r0, #0
ble _02215A62
bl FUN_020222AC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
_02215A62:
bl FUN_02013388
_02215A66:
@@ -8072,7 +8072,7 @@ _02215A66:
thumb_func_start MOD08_02215A68
MOD08_02215A68: ; 0x02215A68
push {r4, lr}
- ldr r3, _02215A80 ; =UNK_021064B8
+ ldr r3, _02215A80 ; =NNS_GfdDefaultFuncAllocTexVram
mov r2, #0
ldr r3, [r3]
blx r3
@@ -8082,12 +8082,12 @@ MOD08_02215A68: ; 0x02215A68
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02215A80: .word UNK_021064B8
+_02215A80: .word NNS_GfdDefaultFuncAllocTexVram
thumb_func_start MOD08_02215A84
MOD08_02215A84: ; 0x02215A84
push {r4, lr}
- ldr r3, _02215A9C ; =UNK_021064C0
+ ldr r3, _02215A9C ; =NNS_GfdDefaultFuncAllocPlttVram
mov r2, #0
ldr r3, [r3]
blx r3
@@ -8097,7 +8097,7 @@ MOD08_02215A84: ; 0x02215A84
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02215A9C: .word UNK_021064C0
+_02215A9C: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD08_02215AA0
MOD08_02215AA0: ; 0x02215AA0
@@ -12792,7 +12792,7 @@ _02217DA2:
ldr r2, [r4, #0xc]
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _02217E2C ; =UNK_020FFA38
+ ldr r0, _02217E2C ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -12813,7 +12813,7 @@ _02217DA2:
lsl r0, r0, #1
add r0, r0, #1
lsl r1, r0, #1
- ldr r0, _02217E2C ; =UNK_020FFA38
+ ldr r0, _02217E2C ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -12834,7 +12834,7 @@ _02217E26:
mov r0, #0
pop {r4, pc}
nop
-_02217E2C: .word UNK_020FFA38
+_02217E2C: .word FX_SinCosTable_
thumb_func_start MOD08_02217E30
MOD08_02217E30: ; 0x02217E30
@@ -13221,7 +13221,7 @@ _022180CE:
lsl r0, r0, #1
add r0, r0, #1
lsl r1, r0, #1
- ldr r0, _0221811C ; =UNK_020FFA38
+ ldr r0, _0221811C ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -13242,7 +13242,7 @@ _02218116:
mov r0, #0
pop {r4, pc}
nop
-_0221811C: .word UNK_020FFA38
+_0221811C: .word FX_SinCosTable_
thumb_func_start MOD08_02218120
MOD08_02218120: ; 0x02218120
@@ -38351,7 +38351,7 @@ _02224CA6:
mul r0, r1
asr r0, r0, #4
lsl r0, r0, #2
- ldr r1, _02224D70 ; =UNK_020FFA38
+ ldr r1, _02224D70 ; =FX_SinCosTable_
str r0, [sp, #0x18]
add r1, r1, r0
mov r0, #2
@@ -38371,7 +38371,7 @@ _02224CA6:
lsl r0, r1, #4
asr r6, r0, #0x10
mov r2, #3
- ldr r1, _02224D70 ; =UNK_020FFA38
+ ldr r1, _02224D70 ; =FX_SinCosTable_
ldr r0, [sp, #0x18]
lsl r2, r2, #0x10
ldrsh r0, [r1, r0]
@@ -38437,7 +38437,7 @@ _02224D50:
pop {r3, r4, r5, r6, r7, pc}
nop
_02224D6C: .word 0x00001555
-_02224D70: .word UNK_020FFA38
+_02224D70: .word FX_SinCosTable_
_02224D74: .word 0x00000000
_02224D78: .word MOD08_02224AF4
@@ -39693,7 +39693,7 @@ _022257C6:
lsr r0, r0, #0x10
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _0222586C ; =UNK_020FFA38
+ ldr r0, _0222586C ; =FX_SinCosTable_
ldr r3, [r6, #0x14]
ldrsh r0, [r0, r1]
lsl r2, r2, #0xc
@@ -39762,7 +39762,7 @@ _02225852:
add sp, #8
pop {r3, r4, r5, r6, r7, pc}
nop
-_0222586C: .word UNK_020FFA38
+_0222586C: .word FX_SinCosTable_
_02225870: .word 0x00000132
_02225874: .word 0x00000000
_02225878: .word 0x00003FFF
@@ -40033,7 +40033,7 @@ MOD08_02225A70: ; 0x02225A70
lsr r0, r0, #0x10
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _02225B30 ; =UNK_020FFA38
+ ldr r0, _02225B30 ; =FX_SinCosTable_
lsl r2, r2, #0xc
ldrsh r0, [r0, r1]
mov r3, #0
@@ -40096,7 +40096,7 @@ _02225B2A:
add sp, #0xc
pop {r4, r5, r6, r7, pc}
.align 2, 0
-_02225B30: .word UNK_020FFA38
+_02225B30: .word FX_SinCosTable_
_02225B34: .word 0x00000000
_02225B38: .word 0x45800000
@@ -40407,7 +40407,7 @@ _02225D8C:
lsr r0, r0, #0x10
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _02225E0C ; =UNK_020FFA38
+ ldr r0, _02225E0C ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -40459,7 +40459,7 @@ _02225E02:
pop {r4, r5, r6, r7, pc}
nop
_02225E08: .word 0x00000199
-_02225E0C: .word UNK_020FFA38
+_02225E0C: .word FX_SinCosTable_
_02225E10: .word 0x00000000
thumb_func_start MOD08_02225E14
diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s
index 63e3d1e0..a3085247 100644
--- a/arm9/modules/09/asm/module_09.s
+++ b/arm9/modules/09/asm/module_09.s
@@ -2185,7 +2185,7 @@ MOD09_02212F8C: ; 0x02212F8C
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x10
add r4, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r1, [sp, #0x10]
add r0, r5, #0
add r1, #0xc
@@ -2199,7 +2199,7 @@ MOD09_02212F8C: ; 0x02212F8C
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x10
add r4, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r1, [sp, #0x10]
add r0, r5, #0
add r1, #0xc
@@ -3409,7 +3409,7 @@ _02213976:
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0xc
add r7, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
mov r0, #0
str r0, [sp]
mov r0, #0x20
@@ -14010,7 +14010,7 @@ MOD09_022191C0: ; 0x022191C0
bl AllocAndReadWholeNarcMemberByIdPair
add r1, sp, #0x10
add r4, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r1, [sp, #0x10]
add r0, r5, #0
add r1, #0xc
diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s
index 1bc8e471..42f3f754 100644
--- a/arm9/modules/11/asm/module_11_thumb1.s
+++ b/arm9/modules/11/asm/module_11_thumb1.s
@@ -3061,14 +3061,14 @@ _0222EFD8: .word FUN_020223BC
thumb_func_start MOD11_0222EFDC
MOD11_0222EFDC: ; 0x0222EFDC
push {r3, r4, r5, lr}
- ldr r3, _0222F014 ; =UNK_021064B8
+ ldr r3, _0222F014 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _0222F018 ; =UNK_021064C0
+ ldr r3, _0222F018 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0
add r4, r0, #0
ldr r3, [r3]
@@ -3087,8 +3087,8 @@ _0222F00C:
bl FUN_02012CC8
pop {r3, r4, r5, pc}
nop
-_0222F014: .word UNK_021064B8
-_0222F018: .word UNK_021064C0
+_0222F014: .word NNS_GfdDefaultFuncAllocTexVram
+_0222F018: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD11_0222F01C
MOD11_0222F01C: ; 0x0222F01C
diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s
index 01de211a..7d0a23a3 100644
--- a/arm9/modules/12/asm/module_12.s
+++ b/arm9/modules/12/asm/module_12.s
@@ -744,14 +744,14 @@ MOD12_0222DC80: ; 0x0222DC80
thumb_func_start MOD12_0222DCAC
MOD12_0222DCAC: ; 0x0222DCAC
push {r3, r4, r5, lr}
- ldr r3, _0222DCE4 ; =UNK_021064B8
+ ldr r3, _0222DCE4 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _0222DCE8 ; =UNK_021064C0
+ ldr r3, _0222DCE8 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0
add r4, r0, #0
ldr r3, [r3]
@@ -770,8 +770,8 @@ _0222DCDC:
bl FUN_02012CC8
pop {r3, r4, r5, pc}
nop
-_0222DCE4: .word UNK_021064B8
-_0222DCE8: .word UNK_021064C0
+_0222DCE4: .word NNS_GfdDefaultFuncAllocTexVram
+_0222DCE8: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD12_0222DCEC
MOD12_0222DCEC: ; 0x0222DCEC
@@ -3999,14 +3999,14 @@ MOD12_0222F6B4: ; 0x0222F6B4
thumb_func_start MOD12_0222F6E0
MOD12_0222F6E0: ; 0x0222F6E0
push {r3, r4, r5, lr}
- ldr r3, _0222F718 ; =UNK_021064B8
+ ldr r3, _0222F718 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _0222F71C ; =UNK_021064C0
+ ldr r3, _0222F71C ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0
add r4, r0, #0
ldr r3, [r3]
@@ -4025,8 +4025,8 @@ _0222F710:
bl FUN_02012CC8
pop {r3, r4, r5, pc}
nop
-_0222F718: .word UNK_021064B8
-_0222F71C: .word UNK_021064C0
+_0222F718: .word NNS_GfdDefaultFuncAllocTexVram
+_0222F71C: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD12_0222F720
MOD12_0222F720: ; 0x0222F720
@@ -6350,7 +6350,7 @@ MOD12_02230A40: ; 0x02230A40
thumb_func_start MOD12_02230A60
MOD12_02230A60: ; 0x02230A60
push {r4, lr}
- ldr r3, _02230A78 ; =UNK_021064B8
+ ldr r3, _02230A78 ; =NNS_GfdDefaultFuncAllocTexVram
mov r2, #0
ldr r3, [r3]
blx r3
@@ -6360,12 +6360,12 @@ MOD12_02230A60: ; 0x02230A60
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02230A78: .word UNK_021064B8
+_02230A78: .word NNS_GfdDefaultFuncAllocTexVram
thumb_func_start MOD12_02230A7C
MOD12_02230A7C: ; 0x02230A7C
push {r4, lr}
- ldr r3, _02230A94 ; =UNK_021064C0
+ ldr r3, _02230A94 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r2, #0
ldr r3, [r3]
blx r3
@@ -6375,7 +6375,7 @@ MOD12_02230A7C: ; 0x02230A7C
lsr r0, r0, #0xd
pop {r4, pc}
nop
-_02230A94: .word UNK_021064C0
+_02230A94: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD12_02230A98
MOD12_02230A98: ; 0x02230A98
@@ -42062,14 +42062,14 @@ _02241B08: .word 0x00000133
thumb_func_start MOD12_02241B0C
MOD12_02241B0C: ; 0x02241B0C
push {r3, r4, r5, lr}
- ldr r3, _02241B44 ; =UNK_021064B8
+ ldr r3, _02241B44 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _02241B48 ; =UNK_021064C0
+ ldr r3, _02241B48 ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0
add r4, r0, #0
ldr r3, [r3]
@@ -42088,8 +42088,8 @@ _02241B3C:
bl FUN_02012CC8
pop {r3, r4, r5, pc}
nop
-_02241B44: .word UNK_021064B8
-_02241B48: .word UNK_021064C0
+_02241B44: .word NNS_GfdDefaultFuncAllocTexVram
+_02241B48: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_start MOD12_02241B4C
MOD12_02241B4C: ; 0x02241B4C
diff --git a/arm9/modules/13/asm/module_13_arm2.s b/arm9/modules/13/asm/module_13_arm2.s
index 0e89d90f..5aee0b46 100644
--- a/arm9/modules/13/asm/module_13_arm2.s
+++ b/arm9/modules/13/asm/module_13_arm2.s
@@ -25937,27 +25937,27 @@ _022341D8: .word 0x0000A001
arm_func_start MOD13_022341DC
MOD13_022341DC: ; 0x022341DC
- ldr ip, _022341E4 ; =FUN_020C01A0
+ ldr ip, _022341E4 ; =NNS_SndMain
bx ip
.align 2, 0
-_022341E4: .word FUN_020C01A0
+_022341E4: .word NNS_SndMain
arm_func_start MOD13_022341E8
MOD13_022341E8: ; 0x022341E8
ldr r0, _02234200 ; =0x02243154
- ldr ip, _02234204 ; =FUN_020C10A4
+ ldr ip, _02234204 ; =NNS_SndPlayerStopSeq
ldr r0, [r0]
mov r1, #0
add r0, r0, #0x90
bx ip
.align 2, 0
_02234200: .word MOD13_02243154
-_02234204: .word FUN_020C10A4
+_02234204: .word NNS_SndPlayerStopSeq
arm_func_start MOD13_02234208
MOD13_02234208: ; 0x02234208
ldr r2, _02234224 ; =0x02243154
- ldr ip, _02234228 ; =FUN_020C0EA4
+ ldr ip, _02234228 ; =NNS_SndPlayerSetTrackPitch
ldr r3, [r2]
mov r2, r1
mov r1, r0
@@ -25965,32 +25965,32 @@ MOD13_02234208: ; 0x02234208
bx ip
.align 2, 0
_02234224: .word MOD13_02243154
-_02234228: .word FUN_020C0EA4
+_02234228: .word NNS_SndPlayerSetTrackPitch
arm_func_start MOD13_0223422C
MOD13_0223422C: ; 0x0223422C
ldr r2, _02234244 ; =0x02243154
mov r1, r0
ldr r0, [r2]
- ldr ip, _02234248 ; =FUN_020C0F40
+ ldr ip, _02234248 ; =NNS_SndPlayerSetVolume
add r0, r0, #0x90
bx ip
.align 2, 0
_02234244: .word MOD13_02243154
-_02234248: .word FUN_020C0F40
+_02234248: .word NNS_SndPlayerSetVolume
arm_func_start MOD13_0223424C
MOD13_0223424C: ; 0x0223424C
ldr r1, _02234268 ; =0x02243154
mov r2, r0
ldr r0, [r1]
- ldr ip, _0223426C ; =FUN_020C3888
+ ldr ip, _0223426C ; =NNS_SndArcPlayerStartSeqArc
mov r1, #0
add r0, r0, #0x90
bx ip
.align 2, 0
_02234268: .word MOD13_02243154
-_0223426C: .word FUN_020C3888
+_0223426C: .word NNS_SndArcPlayerStartSeqArc
arm_func_start MOD13_02234270
MOD13_02234270: ; 0x02234270
@@ -26024,17 +26024,17 @@ MOD13_022342A0: ; 0x022342A0
ldr r1, _0223432C ; =0x02243154
ldr r1, [r1]
str r0, [r1, #0x94]
- bl SDAT_Init
+ bl NNS_SndInit
ldr r0, _0223432C ; =0x02243154
ldr r0, [r0]
ldr r1, [r0, #0x94]
- bl FUN_020C2444
+ bl NNS_SndArcInitOnMemory
mov r0, #0
- bl FUN_020C39CC
+ bl NNS_SndArcPlayerSetup
ldr r0, _0223432C ; =0x02243154
ldr r0, [r0]
add r0, r0, #0x90
- bl FUN_020C0F80
+ bl NNS_SndHandleInit
mov r0, #0
ldr r1, _02234334 ; =MOD13_022341DC
mov r2, r0
@@ -33219,7 +33219,7 @@ MOD13_0223A440: ; 0x0223A440
str r1, [sp, #0xc]
ldrb r1, [r4, #0x36]
ldrb r2, [r4, #0x37]
- bl FUN_020B5E50
+ bl NNS_G2dArrangeOBJ1D
add sp, sp, #0x10
ldmia sp!, {r4, r5, r6, r7, r8, pc}
@@ -33245,7 +33245,7 @@ MOD13_0223A4F0: ; 0x0223A4F0
str lr, [sp, #8]
add r0, r0, #0x20
str ip, [sp, #0xc]
- bl FUN_020B7168
+ bl NNSi_G2dTextCanvasDrawTextRect
add sp, sp, #0x14
ldmia sp!, {pc}
@@ -33271,14 +33271,14 @@ _0223A564:
ldr r0, [r0]
add r5, r0, r4
mov r0, r5
- bl FUN_020B5CE4
+ bl NNS_G2dFontFindGlyphIndex
mov r1, r0
ldr r0, _0223A5EC ; =0x0000FFFF
cmp r1, r0
ldreq r0, [r5]
ldreqh r1, [r0, #2]
mov r0, r5
- bl FUN_020B5C88
+ bl NNS_G2dFontGetCharWidthsFromIndex
ldrh r1, [r5, #8]
ldrh r2, [r7]
ldr r3, [sp, #8]
@@ -33319,7 +33319,7 @@ MOD13_0223A5F0: ; 0x0223A5F0
mla r1, ip, r3, lr
mov r3, r2
mov r2, r4
- bl FUN_020B63CC
+ bl NNS_G2dCharCanvasDrawChar
add sp, sp, #8
ldmia sp!, {r4, pc}
.align 2, 0
@@ -33334,7 +33334,7 @@ MOD13_0223A634: ; 0x0223A634
str lr, [sp]
add r0, r0, #0x20
str ip, [sp, #4]
- bl FUN_020B7218
+ bl NNSi_G2dTextCanvasDrawText
add sp, sp, #0xc
ldmia sp!, {pc}
@@ -33504,7 +33504,7 @@ _0223A88C:
mov r0, r6
mov r2, r4
mov r3, r5
- bl FUN_020B6388
+ bl NNS_G2dCharCanvasInitForBG
ldr r1, _0223A954 ; =0x022431A4
mov r0, #0xc
ldr r2, [r1]
@@ -33533,7 +33533,7 @@ _0223A8E0:
str r7, [sp, #8]
mov r4, #0xf
str r4, [sp, #0xc]
- bl FUN_020B6240
+ bl NNS_G2dMapScrToCharText
mov r0, r6
mov r1, #0
bl MOD13_0223A4D8
@@ -33601,7 +33601,7 @@ MOD13_0223A9A4: ; 0x0223A9A4
mov r0, r6
strh r1, [r4, #0x34]
mov r1, r5
- bl FUN_020B6180
+ bl NNSi_G2dCalcRequiredOBJ
ldr r1, [sp, #0x20]
cmp r7, #1
str r0, [r1]
@@ -33614,7 +33614,7 @@ MOD13_0223A9A4: ; 0x0223A9A4
mov r2, r6
mov r3, r5
add r1, ip, r7, lsl #7
- bl FUN_020B62F8
+ bl NNS_G2dCharCanvasInitForOBJ1D
ldr r2, [r4, #0x18]
mov r0, r4
mov r1, #0
@@ -33694,7 +33694,7 @@ _0223AB20:
add r0, r2, r8, lsl #2
ldr r1, [r0, #0x78c]
add r0, r2, r7
- bl FUN_020B5D3C
+ bl NNS_G2dFontInitUTF16
add r8, r8, #1
cmp r8, #2
add r7, r7, #0xc
@@ -34004,7 +34004,7 @@ MOD13_0223AF48: ; 0x0223AF48
ldr r0, _0223AF8C ; =0x022431A8
mov r1, r5
ldr r0, [r0]
- bl FUN_020ADDF0
+ bl NNS_FndFreeToExpHeap
mov r0, r4
bl OS_EnableIrqMask
add sp, sp, #4
@@ -34026,7 +34026,7 @@ MOD13_0223AF90: ; 0x0223AF90
ldmeqia sp!, {r4, r5, pc}
ldr r0, _0223AFDC ; =0x022431A8
ldr r0, [r0]
- bl FUN_020ADDF0
+ bl NNS_FndFreeToExpHeap
mov r0, r4
bl OS_EnableIrqMask
mov r0, #0
@@ -34060,7 +34060,7 @@ MOD13_0223B004: ; 0x0223B004
ldr r0, [r1]
mov r1, r6
mov r2, r5
- bl tempName_NNS_FndAllocFromExpHeapEx
+ bl NNS_FndAllocFromExpHeapEx
movs r5, r0
bne _0223B03C
bl OS_Terminate
@@ -34078,7 +34078,7 @@ MOD13_0223B050: ; 0x0223B050
sub sp, sp, #4
ldr r0, _0223B078 ; =0x022431A8
ldr r0, [r0]
- bl thunk_FUN_020adc8c
+ bl NNS_FndDestroyExpHeap
ldr r0, _0223B078 ; =0x022431A8
mov r1, #0
str r1, [r0]
@@ -34097,7 +34097,7 @@ MOD13_0223B07C: ; 0x0223B07C
mov r0, r4
mov r1, #0x40000
mov r2, #0
- bl tempName_NNS_FndCreateExpHeapEx
+ bl NNS_FndCreateExpHeapEx
ldr r1, _0223B0B8 ; =0x022431A8
cmp r0, #0
str r0, [r1]
diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s
index 3a321743..b95ab0d6 100644
--- a/arm9/modules/14/asm/module_14.s
+++ b/arm9/modules/14/asm/module_14.s
@@ -10519,7 +10519,7 @@ _021DC79C:
mov r1, #0x10
orr r1, r2
str r1, [r0]
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r2, #0x80
@@ -10547,7 +10547,7 @@ _021DC79C:
mov r0, #0x51
lsl r0, r0, #2
add r0, r4, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0xa
str r0, [sp]
mov r0, #0x51
@@ -10765,7 +10765,7 @@ MOD14_021DCA0C: ; 0x021DCA0C
bl MOD14_021DDEF4
bl G3X_ResetMtxStack
bl G3X_ResetMtxStack_2
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
mov r0, #0x56
lsl r0, r0, #2
ldr r0, [r4, r0]
@@ -13079,7 +13079,7 @@ _021DDC74: .word 0x0000B22C
thumb_func_start MOD14_021DDC78
MOD14_021DDC78: ; 0x021DDC78
push {r3, lr}
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
mov r0, #1
add r1, r0, #0
@@ -13815,7 +13815,7 @@ MOD14_021DE1D0: ; 0x021DE1D0
cmp r0, #0
beq _021DE268
add r1, sp, #0x14
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
beq _021DE262
mov r0, #0xa
@@ -13895,7 +13895,7 @@ MOD14_021DE278: ; 0x021DE278
cmp r0, #0
beq _021DE2DC
add r1, sp, #8
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r0, _021DE2E4 ; =0x00005984
mov r1, #3
ldr r0, [r5, r0]
@@ -15793,7 +15793,7 @@ MOD14_021DF144: ; 0x021DF144
sub sp, #0x38
add r4, r0, #0
add r0, #0x24
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
@@ -18635,7 +18635,7 @@ MOD14_021E078C: ; 0x021E078C
add r4, r1, #0
add r6, r2, #0
str r3, [sp, #8]
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
bl FUN_0206B888
add r1, r0, #0
mov r0, #0xa
@@ -18656,10 +18656,10 @@ MOD14_021E078C: ; 0x021E078C
cmp r0, #0
beq _021E0818
add r0, sp, #0x18
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
ldr r0, [sp, #0xc]
add r1, sp, #0x10
- bl FUN_020B00F0
+ bl NNS_G2dGetUnpackedPaletteCompressInfo
ldr r2, [sp, #0x14]
add r7, r0, #0
ldr r0, [r2, #0xc]
@@ -18678,14 +18678,14 @@ MOD14_021E078C: ; 0x021E078C
ldr r1, [sp, #0x10]
mov r2, #0xc0
mov r3, #1
- bl FUN_020B10E8
+ bl NNS_G2dLoadPaletteEx
b _021E0812
_021E0806:
ldr r0, [sp, #0x14]
mov r1, #0xc0
mov r2, #1
add r3, sp, #0x18
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
_021E0812:
ldr r0, [sp, #0xc]
bl FreeToHeap
@@ -18805,7 +18805,7 @@ MOD14_021E08E4: ; 0x021E08E4
_021E08F4:
add r0, r5, #4
str r6, [r5]
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, r4, #0
add r5, #0x34
sub r4, r4, #1
@@ -18913,7 +18913,7 @@ MOD14_021E0940: ; 0x021E0940
bl GetBoxMonData
strh r0, [r4, #0x2e]
add r0, r4, #4
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, r5, #0
add r0, #0x4c
str r0, [sp]
@@ -18926,7 +18926,7 @@ MOD14_021E0940: ; 0x021E0940
add r0, r5, #0
add r0, #0x4c
add r1, sp, #0x1c
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
mov r2, #1
lsl r2, r2, #0x1a
ldr r1, [r2]
@@ -18942,7 +18942,7 @@ MOD14_021E0940: ; 0x021E0940
ldr r1, [sp, #0x60]
ldr r0, [sp, #0x1c]
lsl r1, r1, #5
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
add r0, r4, #4
str r0, [sp, #0x20]
ldr r0, [sp, #0x5c]
@@ -19031,10 +19031,10 @@ MOD14_021E0A60: ; 0x021E0A60
bl GetBoxMonData
strh r0, [r4, #0x2e]
add r0, r4, #4
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
ldr r0, [sp, #0x58]
add r1, sp, #0x18
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
mov r2, #1
lsl r2, r2, #0x1a
ldr r1, [r2]
@@ -19050,7 +19050,7 @@ MOD14_021E0A60: ; 0x021E0A60
ldr r1, [sp, #0x6c]
ldr r0, [sp, #0x18]
lsl r1, r1, #5
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
add r0, r4, #4
str r0, [sp, #0x1c]
ldr r0, [sp, #0x68]
@@ -19160,7 +19160,7 @@ MOD14_021E0BBC: ; 0x021E0BBC
cmp r0, #0
beq _021E0C18
add r0, r4, #4
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, r5, #0
add r0, #0x4c
str r0, [sp]
@@ -19173,7 +19173,7 @@ MOD14_021E0BBC: ; 0x021E0BBC
add r5, #0x4c
add r0, r5, #0
add r1, sp, #4
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
mov r2, #1
lsl r2, r2, #0x1a
ldr r1, [r2]
@@ -19188,7 +19188,7 @@ MOD14_021E0BBC: ; 0x021E0BBC
str r1, [r0, #0x10]
ldr r0, [sp, #4]
lsl r1, r6, #5
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
ldr r0, [r4]
add r1, r4, #4
bl FUN_02020334
@@ -19309,7 +19309,7 @@ MOD14_021E0CCC: ; 0x021E0CCC
sub sp, #0x38
add r4, r0, #0
add r0, #0x18
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
mov r0, #0x9d
str r3, [sp]
@@ -19705,7 +19705,7 @@ MOD14_021E0FA8: ; 0x021E0FA8
add r4, r5, #0
_021E0FE0:
add r0, sp, #0x44
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r0, #0
str r0, [sp]
mov r0, #1
@@ -19758,7 +19758,7 @@ _021E103E:
cmp r0, #2
blo _021E0FE0
add r0, sp, #0x44
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
mov r0, #0xb9
str r3, [sp]
@@ -21925,7 +21925,7 @@ _021E211E:
ldr r2, [sp, #0x14]
ldr r3, [sp, #0x48]
lsl r1, r1, #5
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
add sp, #0x34
pop {r4, r5, r6, r7, pc}
_021E2132:
@@ -22053,7 +22053,7 @@ MOD14_021E21E4: ; 0x021E21E4
pop {r4, r5, r6, pc}
_021E2214:
add r0, sp, #4
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, sp, #4
str r0, [sp]
add r0, r5, #0
@@ -22100,7 +22100,7 @@ MOD14_021E223C: ; 0x021E223C
mov r5, #0x20
_021E227C:
add r0, sp, #0x1c
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, sp, #0x1c
str r0, [sp]
ldr r2, [sp, #8]
@@ -22987,7 +22987,7 @@ MOD14_021E2940: ; 0x021E2940
add r0, sp, #0x30
bl MOD14_021DDDB4
add r0, sp, #0xc
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
lsl r0, r4, #0x10
lsr r0, r0, #0x10
mov r1, #1
@@ -23012,7 +23012,7 @@ MOD14_021E2940: ; 0x021E2940
mov r1, #0xbe
ldr r0, [sp, #8]
lsl r1, r1, #8
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
lsl r0, r4, #0x10
lsr r0, r0, #0x10
mov r1, #2
@@ -24714,7 +24714,7 @@ MOD14_021E3664: ; 0x021E3664
add r4, r0, #0
bl MOD14_021E36FC
add r0, sp, #0x14
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r0, #2
@@ -24829,7 +24829,7 @@ MOD14_021E36FC: ; 0x021E36FC
str r0, [r1]
add r0, r4, #0
add r0, #0x18
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0xa
str r0, [sp]
add r4, #0x18
@@ -25553,7 +25553,7 @@ _021E3CB2:
str r0, [sp, #0x10]
_021E3CC2:
add r0, sp, #0x14
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, sp, #0x14
str r0, [sp]
add r0, r7, #0
@@ -25752,7 +25752,7 @@ MOD14_021E3E1C: ; 0x021E3E1C
bl MOD14_021DC484
str r0, [sp, #0x14]
add r0, sp, #0x18
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r0, #2
@@ -27198,12 +27198,12 @@ MOD14_021E4890: ; 0x021E4890
add r5, r6, #0
_021E48EA:
add r0, sp, #0x10
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
ldr r0, [sp, #0xc]
ldr r1, [r4]
mov r2, #1
add r3, sp, #0x10
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
mov r0, #0
str r0, [sp]
mov r0, #1
@@ -29425,7 +29425,7 @@ MOD14_021E5A08: ; 0x021E5A08
mov r3, #0
bl FUN_02006930
add r0, sp, #0x48
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r0, #2
@@ -29583,11 +29583,11 @@ _021E5BA0:
add r0, r0, r6
str r0, [r4, #0x18]
add r0, sp, #0x34
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
ldr r2, [r4, #0x18]
add r0, sp, #0x34
mov r1, #2
- bl FUN_020B1A1C
+ bl NNS_G2dSetImageLocation
ldr r0, _021E5BFC ; =0x04001000
mov r2, #0
ldr r1, [r0]
@@ -29711,7 +29711,7 @@ MOD14_021E5C68: ; 0x021E5C68
add r0, r5, #0
add r0, #0xe8
add r1, sp, #4
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #4]
mov r1, #2
ldr r0, [r0, #0x14]
diff --git a/arm9/modules/15/asm/module_15.s b/arm9/modules/15/asm/module_15.s
index cd1cb9eb..bd42feb3 100644
--- a/arm9/modules/15/asm/module_15.s
+++ b/arm9/modules/15/asm/module_15.s
@@ -2592,7 +2592,7 @@ MOD15_021D87F8: ; 0x021D87F8
bl FUN_02015F1C
str r5, [r4, #0x18]
str r6, [r4, #0x1c]
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -2925,19 +2925,19 @@ MOD15_021D8AB4: ; 0x021D8AB4
mov r0, #0x66
lsl r0, r0, #2
add r0, r4, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0x6b
lsl r0, r0, #2
add r0, r4, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0x15
lsl r0, r0, #4
add r0, r4, r0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r0, #0x5d
lsl r0, r0, #2
add r0, r4, r0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
@@ -7801,9 +7801,9 @@ MOD15_021DB154: ; 0x021DB154
sub sp, #0x4c
add r4, r0, #0
add r0, sp, #0x38
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
add r0, sp, #0x14
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r0, #0x23
str r0, [sp]
add r0, sp, #0x38
diff --git a/arm9/modules/16/asm/module_16.s b/arm9/modules/16/asm/module_16.s
index adc8e5c2..4588def6 100644
--- a/arm9/modules/16/asm/module_16.s
+++ b/arm9/modules/16/asm/module_16.s
@@ -1996,7 +1996,7 @@ MOD16_021D8424: ; 0x021D8424
push {r4, r5, lr}
sub sp, #0x24
add r4, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -2053,7 +2053,7 @@ _021D849C: .word 0x000019FC
thumb_func_start MOD16_021D84A0
MOD16_021D84A0: ; 0x021D84A0
push {r3, lr}
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _021D8500 ; =0x04000060
ldr r2, _021D8504 ; =0xFFFFCFFD
@@ -2089,11 +2089,11 @@ MOD16_021D84A0: ; 0x021D84A0
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
pop {r3, pc}
.align 2, 0
_021D8500: .word 0x04000060
@@ -2106,8 +2106,8 @@ _021D8510: .word 0xBFFF0000
thumb_func_start MOD16_021D8514
MOD16_021D8514: ; 0x021D8514
push {r3, lr}
- bl FUN_020AEAF4
- bl FUN_020AEC60
+ bl NNS_GfdResetFrmTexVramState
+ bl NNS_GfdResetFrmPlttVramState
pop {r3, pc}
thumb_func_end MOD16_021D8514
@@ -2313,7 +2313,7 @@ MOD16_021D86B4: ; 0x021D86B4
lsl r0, r0, #2
ldr r0, [r4, r0]
bl FUN_0201FDEC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
mov r0, #0x55
lsl r0, r0, #2
ldr r0, [r4, r0]
@@ -3182,7 +3182,7 @@ MOD16_021D8CB4: ; 0x021D8CB4
add r7, r0, #0
beq _021D8CF6
add r1, sp, #4
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
beq _021D8CF0
cmp r4, #0
@@ -3220,7 +3220,7 @@ MOD16_021D8CFC: ; 0x021D8CFC
add r7, r0, #0
beq _021D8D42
add r1, sp, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0
beq _021D8D3C
cmp r4, #0
@@ -3258,7 +3258,7 @@ MOD16_021D8D48: ; 0x021D8D48
add r4, r0, #0
beq _021D8D6A
add r1, r5, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
cmp r0, #0
bne _021D8D6A
add r0, r4, #0
@@ -3280,7 +3280,7 @@ MOD16_021D8D70: ; 0x021D8D70
add r4, r0, #0
beq _021D8D92
add r1, r5, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0
bne _021D8D92
add r0, r4, #0
@@ -3302,7 +3302,7 @@ MOD16_021D8D98: ; 0x021D8D98
add r4, r0, #0
beq _021D8DBA
add r1, r5, #0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
bne _021D8DBA
add r0, r4, #0
@@ -3545,14 +3545,14 @@ MOD16_021D8F9C: ; 0x021D8F9C
mov r1, #0x55
lsl r1, r1, #2
str r0, [r5, r1]
- ldr r3, _021D9030 ; =UNK_021064B8
+ ldr r3, _021D9030 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _021D9034 ; =UNK_021064C0
+ ldr r3, _021D9034 ; =NNS_GfdDefaultFuncAllocPlttVram
add r4, r0, #0
ldr r3, [r3]
mov r0, #0x80
@@ -3607,8 +3607,8 @@ _021D9004:
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
nop
-_021D9030: .word UNK_021064B8
-_021D9034: .word UNK_021064C0
+_021D9030: .word NNS_GfdDefaultFuncAllocTexVram
+_021D9034: .word NNS_GfdDefaultFuncAllocPlttVram
_021D9038: .word 0x7FFF0000
_021D903C: .word 0xFFFF0000
_021D9040: .word MOD16_021FF490
@@ -29023,7 +29023,7 @@ _021E4ACE:
lsr r0, r0, #0x10
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _021E4B10 ; =UNK_020FFA38
+ ldr r0, _021E4B10 ; =FX_SinCosTable_
mov r2, #3
ldrsh r0, [r0, r1]
lsl r2, r2, #0x10
@@ -29044,7 +29044,7 @@ _021E4ACE:
pop {r3, pc}
.align 2, 0
_021E4B0C: .word 0x00007FFF
-_021E4B10: .word UNK_020FFA38
+_021E4B10: .word FX_SinCosTable_
thumb_func_end MOD16_021E4AC0
thumb_func_start MOD16_021E4B14
@@ -49298,7 +49298,7 @@ MOD16_021EE2A4: ; 0x021EE2A4
lsl r4, r0, #1
add r0, r4, #1
lsl r1, r0, #1
- ldr r0, _021EE354 ; =UNK_020FFA38
+ ldr r0, _021EE354 ; =FX_SinCosTable_
mov r3, #0
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -49312,7 +49312,7 @@ MOD16_021EE2A4: ; 0x021EE2A4
lsr r5, r2, #0xc
orr r5, r0
mov r2, #0xe
- ldr r0, _021EE354 ; =UNK_020FFA38
+ ldr r0, _021EE354 ; =FX_SinCosTable_
lsl r1, r4, #1
ldrsh r0, [r0, r1]
lsl r2, r2, #0xe
@@ -49364,7 +49364,7 @@ MOD16_021EE2A4: ; 0x021EE2A4
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
.align 2, 0
-_021EE354: .word UNK_020FFA38
+_021EE354: .word FX_SinCosTable_
thumb_func_end MOD16_021EE2A4
thumb_func_start MOD16_021EE358
@@ -49737,7 +49737,7 @@ MOD16_021EE5D0: ; 0x021EE5D0
bl FUN_02003974
ldr r0, [sp, #4]
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r2, r5, #0
add r2, #0xbc
add r1, r0, #0
@@ -49762,7 +49762,7 @@ MOD16_021EE5D0: ; 0x021EE5D0
bl FUN_02003974
ldr r0, [sp, #8]
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r5, #0xc0
add r1, r0, #0
ldr r2, [r5]
diff --git a/arm9/modules/17/asm/module_17.s b/arm9/modules/17/asm/module_17.s
index b96d5a98..234719b2 100644
--- a/arm9/modules/17/asm/module_17.s
+++ b/arm9/modules/17/asm/module_17.s
@@ -508,7 +508,7 @@ MOD17_021D786C: ; 0x021D786C
push {r4, lr}
add r4, r0, #0
bl FUN_020222AC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r0, [r4, #0x1c]
cmp r0, #0
beq _021D7884
@@ -768,7 +768,7 @@ MOD17_021D7A2C: ; 0x021D7A2C
lsl r5, r5, #2
add r0, r6, #0
add r1, r1, r5
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [r4, #0x30]
ldr r0, [r0, r5]
pop {r4, r5, r6, pc}
@@ -1046,7 +1046,7 @@ MOD17_021D7C28: ; 0x021D7C28
add r6, r2, #0
ldr r7, [sp, #0x18]
str r1, [r0]
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r1, _021D7CB0 ; =0x04000470
lsl r0, r4, #0xc
str r0, [r1]
@@ -1055,7 +1055,7 @@ MOD17_021D7C28: ; 0x021D7C28
mov r0, #0
str r0, [r1]
ldr r0, [sp]
- ldr r1, _021D7CB4 ; =UNK_020FFA38
+ ldr r1, _021D7CB4 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r0, r2, #1
@@ -1101,7 +1101,7 @@ _021D7CA0:
nop
_021D7CAC: .word 0x04000454
_021D7CB0: .word 0x04000470
-_021D7CB4: .word UNK_020FFA38
+_021D7CB4: .word FX_SinCosTable_
_021D7CB8: .word 0x0400046C
_021D7CBC: .word 0x04000448
thumb_func_end MOD17_021D7C28
@@ -1173,7 +1173,7 @@ _021D7D24: .word MOD17_021DE32C
thumb_func_start MOD17_021D7D28
MOD17_021D7D28: ; 0x021D7D28
push {r3, lr}
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
mov r0, #1
add r1, r0, #0
@@ -1218,11 +1218,11 @@ MOD17_021D7D28: ; 0x021D7D28
str r0, [r2]
str r1, [r2, #0x40]
mov r1, #1
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
pop {r3, pc}
.align 2, 0
_021D7D9C: .word 0x04000008
@@ -1253,7 +1253,7 @@ MOD17_021D7DB0: ; 0x021D7DB0
mov r0, #0x10
orr r0, r1
str r0, [r2]
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
bl GX_DisableEngineALayers
bl GX_DisableEngineBLayers
mov r0, #0x1f
@@ -1272,8 +1272,8 @@ _021D7DFC: .word 0xFFCFFFEF
thumb_func_start MOD17_021D7E00
MOD17_021D7E00: ; 0x021D7E00
push {r3, lr}
- bl FUN_020AEAF4
- bl FUN_020AEC60
+ bl NNS_GfdResetFrmTexVramState
+ bl NNS_GfdResetFrmPlttVramState
pop {r3, pc}
thumb_func_end MOD17_021D7E00
@@ -1282,7 +1282,7 @@ MOD17_021D7E0C: ; 0x021D7E0C
push {r3, lr}
bl GX_DisableEngineALayers
bl GX_DisableEngineBLayers
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
pop {r3, pc}
thumb_func_end MOD17_021D7E0C
@@ -1658,7 +1658,7 @@ MOD17_021D80CC: ; 0x021D80CC
bl FUN_0201E00C
bl FUN_0201D168
bl FUN_0201E0BC
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7c
@@ -1787,7 +1787,7 @@ _021D81C6:
ldr r1, [r6, #8]
add r0, r4, #0
add r1, r1, #4
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r1, [r7]
ldr r0, [r6, #8]
str r1, [r0]
@@ -1851,7 +1851,7 @@ _021D822A:
ldr r0, [sp, #0xc]
add r1, r1, r6
add r1, r1, #4
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r0, [r5, #8]
add r0, r0, r6
ldr r0, [r0, #4]
@@ -1914,13 +1914,13 @@ MOD17_021D82E4: ; 0x021D82E4
add r6, r3, #0
bl FUN_02006D98
str r0, [r5, #0x20]
- ldr r3, _021D833C ; =UNK_021064B8
+ ldr r3, _021D833C ; =NNS_GfdDefaultFuncAllocTexVram
mov r1, #0
ldr r3, [r3]
add r0, r4, #0
add r2, r1, #0
blx r3
- ldr r3, _021D8340 ; =UNK_021064C0
+ ldr r3, _021D8340 ; =NNS_GfdDefaultFuncAllocPlttVram
add r4, r0, #0
ldr r3, [r3]
add r0, r6, #0
@@ -1948,8 +1948,8 @@ MOD17_021D82E4: ; 0x021D82E4
str r0, [r5, #0x24]
pop {r4, r5, r6, pc}
nop
-_021D833C: .word UNK_021064B8
-_021D8340: .word UNK_021064C0
+_021D833C: .word NNS_GfdDefaultFuncAllocTexVram
+_021D8340: .word NNS_GfdDefaultFuncAllocPlttVram
_021D8344: .word 0x7FFF0000
_021D8348: .word 0xFFFF0000
thumb_func_end MOD17_021D82E4
@@ -8916,7 +8916,7 @@ MOD17_021DB700: ; 0x021DB700
bl UncompressFromNarc
add r1, sp, #0x10
add r6, r0, #0
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #0x10]
ldr r0, [r0, #0x14]
bl FUN_02008A74
@@ -13727,7 +13727,7 @@ _021DDAC6:
add r1, r1, r5
add r0, r7, #0
add r1, r1, #4
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #4]
ldr r1, [r0]
ldr r0, [r4]
@@ -13758,7 +13758,7 @@ _021DDB1E:
ldr r1, [r4, #8]
add r0, r5, #0
add r1, r1, #4
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r0, [sp, #4]
ldr r1, [r0]
ldr r0, [r4, #8]
@@ -13875,7 +13875,7 @@ MOD17_021DDC30: ; 0x021DDC30
bl OverlayManager_GetData
add r5, r0, #0
bl FUN_020222AC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r0, [r5, #0x10]
bl MOD17_021DD518
mov r0, #0
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index dccb0b7d..d90cf62c 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -5780,7 +5780,7 @@ MOD18_0223C37C: ; 0x0223C37C
ldr r1, [r0]
ldr r0, _0223C56C ; =0x000009EB
strb r2, [r1, r0]
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7c
@@ -17178,7 +17178,7 @@ _02241A30:
lsl r2, r2, #0xa
asr r0, r0, #4
lsl r6, r0, #1
- ldr r0, _02241AAC ; =UNK_020FFA38
+ ldr r0, _02241AAC ; =FX_SinCosTable_
lsl r1, r6, #1
ldrsh r0, [r0, r1]
mov r3, #0
@@ -17194,7 +17194,7 @@ _02241A30:
orr r4, r0
add r0, r6, #1
lsl r1, r0, #1
- ldr r0, _02241AAC ; =UNK_020FFA38
+ ldr r0, _02241AAC ; =FX_SinCosTable_
mov r2, #0xa
ldrsh r0, [r0, r1]
lsl r2, r2, #0xa
@@ -17233,7 +17233,7 @@ _02241AA8:
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
.align 2, 0
-_02241AAC: .word UNK_020FFA38
+_02241AAC: .word FX_SinCosTable_
_02241AB0: .word MOD18_022513A0
thumb_func_end MOD18_02241A04
@@ -17478,7 +17478,7 @@ _02241C70:
ldr r2, [sp]
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _02241D34 ; =UNK_020FFA38
+ ldr r0, _02241D34 ; =FX_SinCosTable_
asr r3, r2, #0x1f
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
@@ -17504,7 +17504,7 @@ _02241C70:
lsl r0, r0, #1
add r0, r0, #1
lsl r1, r0, #1
- ldr r0, _02241D34 ; =UNK_020FFA38
+ ldr r0, _02241D34 ; =FX_SinCosTable_
ldrsh r0, [r0, r1]
asr r1, r0, #0x1f
bl _ll_mul
@@ -17561,7 +17561,7 @@ _02241D24: .word MOD18_02241AB4
_02241D28: .word MOD18_022513A0
_02241D2C: .word 0x00000B3B
_02241D30: .word 0x00000000
-_02241D34: .word UNK_020FFA38
+_02241D34: .word FX_SinCosTable_
thumb_func_end MOD18_02241AD0
thumb_func_start MOD18_02241D38
@@ -18343,7 +18343,7 @@ MOD18_02242320: ; 0x02242320
ldrh r0, [r2, r1]
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _022423AC ; =UNK_020FFA38
+ ldr r0, _022423AC ; =FX_SinCosTable_
ldrsh r1, [r0, r1]
mov r0, #1
lsl r0, r0, #0xc
@@ -18373,7 +18373,7 @@ _022423A4:
pop {r4, r5, pc}
.align 2, 0
_022423A8: .word MOD18_022513A0
-_022423AC: .word UNK_020FFA38
+_022423AC: .word FX_SinCosTable_
thumb_func_end MOD18_02242320
thumb_func_start MOD18_022423B0
@@ -18529,7 +18529,7 @@ _022424D4:
ldrh r0, [r4, #0x1c]
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _02242594 ; =UNK_020FFA38
+ ldr r0, _02242594 ; =FX_SinCosTable_
ldrsh r1, [r0, r1]
ldr r0, [r5, #0x48]
sub r0, r0, r1
@@ -18538,7 +18538,7 @@ _022424D4:
ldr r0, [r5, #0x44]
asr r1, r1, #4
lsl r2, r1, #2
- ldr r1, _02242594 ; =UNK_020FFA38
+ ldr r1, _02242594 ; =FX_SinCosTable_
add r2, r1, r2
mov r1, #2
ldrsh r1, [r2, r1]
@@ -18616,7 +18616,7 @@ _02242584: .word 0x00000000
_02242588: .word MOD18_022500C0
_0224258C: .word 0x00000626
_02242590: .word MOD18_022513A0
-_02242594: .word UNK_020FFA38
+_02242594: .word FX_SinCosTable_
_02242598: .word 0x0000FFFF
thumb_func_end MOD18_022423B0
@@ -21387,7 +21387,7 @@ _02243B16:
str r0, [sp, #0x24]
add r0, sp, #0x1c
add r1, sp, #0x18
- bl FUN_020BB408
+ bl NNS_G3dWorldPosToScrPos
ldr r0, [sp, #0x18]
lsl r0, r0, #0xc
str r0, [sp, #0x1c]
diff --git a/arm9/modules/20/asm/module_20.s b/arm9/modules/20/asm/module_20.s
index ee93d317..6b339173 100644
--- a/arm9/modules/20/asm/module_20.s
+++ b/arm9/modules/20/asm/module_20.s
@@ -1223,7 +1223,7 @@ MOD20_02252C5C: ; 0x02252C5C
lsl r0, r0, #4
str r7, [r4, r0]
ldr r0, [r4, r0]
- bl FUN_020B0888
+ bl NNS_G2dResetOamManagerBuffer
mov r0, #0x15
lsl r0, r0, #4
ldr r0, [r4, r0]
@@ -3062,7 +3062,7 @@ _02253A4E:
bl NARC_ReadFromMember
add r0, r7, #0
add r1, sp, #0x20
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #0x20]
add r1, r5, #0
ldr r0, [r0, #0x14]
@@ -3239,7 +3239,7 @@ MOD20_02253BA4: ; 0x02253BA4
str r7, [r4]
str r5, [r4, #0x18]
add r0, r7, #0
- bl FUN_020B0830
+ bl NNS_G2dGetOamManagerOamCapacity
strh r0, [r4, #0x10]
ldrh r1, [r4, #0x10]
add r0, r5, #0
@@ -3354,7 +3354,7 @@ _02253C96:
mov r1, #2
add r0, #8
lsl r1, r1, #0xc
- bl FUN_020B1EC4
+ bl NNS_G2dTickCellAnimation
add r0, r4, #0
add r0, #0x86
ldrb r0, [r0]
@@ -3391,7 +3391,7 @@ _02253CAE:
ldr r2, [r4, #0x34]
add r0, r5, #0
lsr r1, r1, #0x10
- bl FUN_020B1AF8
+ bl NNS_G2dMakeCellToOams
b _02253D86
_02253CEE:
ldr r0, [r4, #0x6c]
@@ -3404,7 +3404,7 @@ _02253CEE:
add r0, #0x8c
ldrh r2, [r6, #0x10]
ldrh r0, [r0]
- ldr r1, _02253E58 ; =UNK_020FFA38
+ ldr r1, _02253E58 ; =FX_SinCosTable_
add r0, r2, r0
lsl r0, r0, #0x10
lsr r0, r0, #0x10
@@ -3425,7 +3425,7 @@ _02253D20:
beq _02253D3E
asr r0, r0, #4
lsl r3, r0, #2
- ldr r1, _02253E58 ; =UNK_020FFA38
+ ldr r1, _02253E58 ; =FX_SinCosTable_
ldr r0, [r4, #0x6c]
add r2, r1, r3
ldrsh r1, [r1, r3]
@@ -3452,7 +3452,7 @@ _02253D62:
ldr r0, [sp, #0xc]
ldr r1, [r4, #0x6c]
ldr r0, [r0]
- bl FUN_020B0BB0
+ bl NNS_G2dEntryOamManagerAffine
add r1, sp, #0x18
str r1, [sp]
str r0, [sp, #4]
@@ -3464,7 +3464,7 @@ _02253D62:
ldr r3, [r4, #0x6c]
add r0, r5, #0
lsr r1, r1, #0x10
- bl FUN_020B1AF8
+ bl NNS_G2dMakeCellToOams
_02253D86:
ldr r1, [sp, #0x10]
sub r1, r1, r0
@@ -3569,12 +3569,12 @@ _02253E38:
lsl r2, r2, #0xd
ldr r0, [r0]
lsr r2, r2, #0x10
- bl FUN_020B0D58
+ bl NNS_G2dEntryOamManagerOam
_02253E52:
add sp, #0x20
pop {r3, r4, r5, r6, r7, pc}
nop
-_02253E58: .word UNK_020FFA38
+_02253E58: .word FX_SinCosTable_
_02253E5C: .word 0xDFFFFFFF
_02253E60: .word 0xFFFFF3FF
_02253E64: .word 0xFFFF0FFF
@@ -3607,12 +3607,12 @@ MOD20_02253E74: ; 0x02253E74
ldr r0, [r6, #0xc]
str r0, [r4, #4]
ldrh r1, [r5, #8]
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
add r1, r0, #0
add r0, r4, #0
ldr r2, [r4]
add r0, #8
- bl FUN_020B1F80
+ bl NNS_G2dInitCellAnimation
ldr r1, [r5]
ldr r0, [r5, #4]
str r1, [r4, #0x64]
@@ -3686,12 +3686,12 @@ MOD20_02253F28: ; 0x02253F28
lsl r1, r1, #0x10
ldr r0, [r4, #4]
lsr r1, r1, #0x10
- bl FUN_020AFC04
+ bl NNS_G2dGetAnimSequenceByIdx
add r1, r0, #0
add r0, r4, #0
ldr r2, [r4]
add r0, #8
- bl FUN_020B1F80
+ bl NNS_G2dInitCellAnimation
pop {r4, pc}
thumb_func_end MOD20_02253F28
@@ -3820,7 +3820,7 @@ MOD20_02253FBC: ; 0x02253FBC
beq _0225400E
add r1, r5, #0
add r1, #8
- bl FUN_020AFEB8
+ bl NNS_G2dGetUnpackedCellBank
cmp r0, #0
bne _02253FFC
mov r0, #0
@@ -3829,7 +3829,7 @@ _02253FFC:
ldr r0, [r5, #4]
add r5, #0xc
add r1, r5, #0
- bl thunk_FUN_020afda0
+ bl NNS_G2dGetUnpackedMCAnimBank
cmp r0, #0
bne _0225400E
mov r0, #0
diff --git a/arm9/modules/27/asm/module_27.s b/arm9/modules/27/asm/module_27.s
index 7d7fa32a..0bb87572 100644
--- a/arm9/modules/27/asm/module_27.s
+++ b/arm9/modules/27/asm/module_27.s
@@ -1015,7 +1015,7 @@ _02254FFC:
bl NARC_ReadFromMember
ldr r0, [sp, #0x18]
add r1, sp, #0x20
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #0x20]
mov r1, #2
ldr r0, [r0, #0x14]
diff --git a/arm9/modules/28/asm/module_28.s b/arm9/modules/28/asm/module_28.s
index 618309d1..07792caf 100644
--- a/arm9/modules/28/asm/module_28.s
+++ b/arm9/modules/28/asm/module_28.s
@@ -670,7 +670,7 @@ _02254D24:
bl NARC_AllocAndReadWholeMember
add r1, sp, #0x2c
str r0, [sp, #0x20]
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, [sp, #0x2c]
mov r1, #1
ldr r0, [r0, #0x14]
diff --git a/arm9/modules/53/asm/module_53.s b/arm9/modules/53/asm/module_53.s
index f49ce02c..67dd59d4 100644
--- a/arm9/modules/53/asm/module_53.s
+++ b/arm9/modules/53/asm/module_53.s
@@ -898,7 +898,7 @@ MOD53_021D7C84: ; 0x021D7C84
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r5, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
diff --git a/arm9/modules/54/asm/module_54.s b/arm9/modules/54/asm/module_54.s
index 1131a268..0469af07 100644
--- a/arm9/modules/54/asm/module_54.s
+++ b/arm9/modules/54/asm/module_54.s
@@ -819,7 +819,7 @@ MOD54_021D7BBC: ; 0x021D7BBC
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r6, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s
index c221c2d0..d9a9cad6 100644
--- a/arm9/modules/55/asm/module_55.s
+++ b/arm9/modules/55/asm/module_55.s
@@ -865,7 +865,7 @@ MOD55_021D7C20: ; 0x021D7C20
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r5, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
@@ -4013,7 +4013,7 @@ _021D9570: .word MOD55_021DA314
thumb_func_start MOD55_021D9574
MOD55_021D9574: ; 0x021D9574
push {r3, lr}
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
mov r0, #1
add r1, r0, #0
@@ -4807,7 +4807,7 @@ MOD55_021D9C50: ; 0x021D9C50
add r4, r1, #0
bl G3X_ResetMtxStack
bl G3X_ResetMtxStack_2
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
add r0, r5, #0
add r0, #0xdc
ldr r0, [r0]
@@ -4862,7 +4862,7 @@ MOD55_021D9CC4: ; 0x021D9CC4
add r4, r1, #0
bl G3X_ResetMtxStack
bl G3X_ResetMtxStack_2
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
add r0, r5, #0
add r0, #0xdc
ldr r0, [r0]
diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s
index 8626dac2..e9abf575 100644
--- a/arm9/modules/56/asm/module_56.s
+++ b/arm9/modules/56/asm/module_56.s
@@ -1085,7 +1085,7 @@ MOD56_022126E0: ; 0x022126E0
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r6, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
diff --git a/arm9/modules/57/asm/module_57.s b/arm9/modules/57/asm/module_57.s
index 463396ab..4f7db66f 100644
--- a/arm9/modules/57/asm/module_57.s
+++ b/arm9/modules/57/asm/module_57.s
@@ -1022,7 +1022,7 @@ _021D7D4C:
ldr r0, [r4, r1]
add r1, r1, #4
add r1, r4, r1
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
bne _021D7D60
bl ErrorHandling
@@ -1076,7 +1076,7 @@ _021D7DBC:
ldr r0, [r4, r1]
add r1, r1, #4
add r1, r4, r1
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
bne _021D7DD0
bl ErrorHandling
@@ -3573,7 +3573,7 @@ MOD57_021D9184: ; 0x021D9184
sub sp, #0x3c
add r7, r0, #0
bl MOD57_021D9578
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -3709,7 +3709,7 @@ _021D9290:
beq _021D92CA
ldr r1, [sp, #0x18]
add r1, r1, r6
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0
bne _021D92CE
mov r0, #0x1e
@@ -4024,7 +4024,7 @@ _021D9536:
ldr r0, [r1, r0]
bl FUN_02020354
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
str r0, [sp]
lsl r0, r4, #5
str r0, [sp, #4]
diff --git a/arm9/modules/58/asm/module_58.s b/arm9/modules/58/asm/module_58.s
index 7f3bd998..b47aeeba 100644
--- a/arm9/modules/58/asm/module_58.s
+++ b/arm9/modules/58/asm/module_58.s
@@ -715,7 +715,7 @@ MOD58_021DA044: ; 0x021DA044
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r5, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
diff --git a/arm9/modules/60/asm/module_60.s b/arm9/modules/60/asm/module_60.s
index fa7752a8..8c6d04fc 100644
--- a/arm9/modules/60/asm/module_60.s
+++ b/arm9/modules/60/asm/module_60.s
@@ -403,7 +403,7 @@ MOD60_021D77D4: ; 0x021D77D4
str r0, [r4, #0x10]
_021D7804:
bl FUN_0200BC30
- bl FUN_020AEEB8
+ bl NNS_GfdDoVramTransfer
ldr r0, [r4, #0x14]
bl FUN_0201AB60
ldr r3, _021D782C ; =0x027E0000
@@ -688,7 +688,7 @@ MOD60_021D7A40: ; 0x021D7A40
bl NARC_ReadWholeMember
add r0, r6, #0
add r1, sp, #0x20
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r3, [sp, #0x20]
mov r1, #0
str r1, [sp]
@@ -719,7 +719,7 @@ MOD60_021D7A40: ; 0x021D7A40
bl NARC_ReadWholeMember
add r0, r6, #0
add r1, sp, #0x1c
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r1, [sp, #0x1c]
mov r0, #0
ldr r1, [r1, #0xc]
@@ -748,7 +748,7 @@ MOD60_021D7A40: ; 0x021D7A40
add r1, r5, #0
ldr r0, [r5, #0x24]
add r1, #0x28
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
add r0, r4, #0
bl NARC_dtor
mov r3, #0
diff --git a/arm9/modules/61/asm/module_61.s b/arm9/modules/61/asm/module_61.s
index 54af7ce1..ed9e0e05 100644
--- a/arm9/modules/61/asm/module_61.s
+++ b/arm9/modules/61/asm/module_61.s
@@ -737,7 +737,7 @@ _021D7A7A:
beq _021D7A88
bl FUN_0200BC30
_021D7A88:
- bl FUN_020AEEB8
+ bl NNS_GfdDoVramTransfer
ldr r0, [r4, #0x18]
bl FUN_0201AB60
ldr r3, _021D7AA0 ; =0x027E0000
@@ -1087,7 +1087,7 @@ MOD61_021D7CE8: ; 0x021D7CE8
bl NARC_ReadWholeMember
add r0, r7, #0
add r1, sp, #0x28
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r3, [sp, #0x28]
mov r0, #0
str r0, [sp]
@@ -1119,7 +1119,7 @@ MOD61_021D7CE8: ; 0x021D7CE8
bl NARC_ReadWholeMember
add r0, r4, #0
add r1, sp, #0x24
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r2, [sp, #0x24]
mov r0, #4
ldr r1, [r2, #0xc]
@@ -1253,7 +1253,7 @@ _021D7E00:
add r1, r5, #0
ldr r0, [r5, #0x34]
add r1, #0x3c
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
mov r0, #0x4f
mov r1, #0x24
bl GetNarcMemberSizeByIdPair
@@ -1268,7 +1268,7 @@ _021D7E00:
add r1, r5, #0
ldr r0, [r5, #0x38]
add r1, #0x40
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
add r0, r6, #0
bl NARC_dtor
mov r3, #0
diff --git a/arm9/modules/62/asm/module_62.s b/arm9/modules/62/asm/module_62.s
index f1eb2a70..3d0ee0fd 100644
--- a/arm9/modules/62/asm/module_62.s
+++ b/arm9/modules/62/asm/module_62.s
@@ -1815,14 +1815,14 @@ _0222E35C: .word 0x04000580
thumb_func_start MOD62_0222E360
MOD62_0222E360: ; 0x0222E360
push {r3, r4, r5, lr}
- ldr r3, _0222E398 ; =UNK_021064B8
+ ldr r3, _0222E398 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _0222E39C ; =UNK_021064C0
+ ldr r3, _0222E39C ; =NNS_GfdDefaultFuncAllocPlttVram
mov r1, #0
add r4, r0, #0
ldr r3, [r3]
@@ -1841,8 +1841,8 @@ _0222E390:
bl FUN_02012CC8
pop {r3, r4, r5, pc}
nop
-_0222E398: .word UNK_021064B8
-_0222E39C: .word UNK_021064C0
+_0222E398: .word NNS_GfdDefaultFuncAllocTexVram
+_0222E39C: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_end MOD62_0222E360
thumb_func_start MOD62_0222E3A0
@@ -1853,7 +1853,7 @@ MOD62_0222E3A0: ; 0x0222E3A0
cmp r0, #0
ble _0222E3B6
bl FUN_020222AC
- bl FUN_020B02C8
+ bl NNS_G2dSetupSoftwareSpriteCamera
_0222E3B6:
bl FUN_02013388
mov r0, #1
diff --git a/arm9/modules/63/asm/mod63_021D74E0.s b/arm9/modules/63/asm/mod63_021D74E0.s
index 11daacd0..ab30c4e0 100644
--- a/arm9/modules/63/asm/mod63_021D74E0.s
+++ b/arm9/modules/63/asm/mod63_021D74E0.s
@@ -519,24 +519,24 @@ MOD63_021D78BC: ; 0x021D78BC
bl FUN_0201B234
ldr r0, [r5, #0x60]
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
add r4, r0, #0
add r0, r5, #0
ldr r2, [r5, #0x58]
add r0, #0x68
add r1, r4, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r5, #0x64]
ldr r0, [r5, #0x5c]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
add r3, r0, #0
ldr r0, [r5, #0x64]
ldr r2, [r5, #0x58]
add r1, r4, #0
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r5, #0x64]
add r0, r5, #4
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r4, r5, #0
add r6, sp, #0xc
mov r3, #0
@@ -579,7 +579,7 @@ MOD63_021D7970: ; 0x021D7970
add r4, r0, #0
ldr r1, [r4, #0x64]
add r0, #0x68
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
ldr r0, [r4, #0x60]
bl FreeToHeap
ldr r0, [r4, #0x5c]
@@ -1006,10 +1006,10 @@ _021D7C52:
ldrsh r2, [r5, r2]
ldrsh r3, [r5, r3]
mov r0, #0
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
ldr r1, _021D7D68 ; =0x00007FFF
mov r0, #0
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
ldr r3, _021D7D6C ; =0x0000010E
mov r0, #1
add r2, r3, #2
@@ -1017,10 +1017,10 @@ _021D7C52:
add r3, r3, #4
ldrsh r2, [r5, r2]
ldrsh r3, [r5, r3]
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
ldr r1, _021D7D68 ; =0x00007FFF
mov r0, #1
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
ldr r2, _021D7D60 ; =0x04000060
ldr r0, _021D7D64 ; =0xFFFFCFFF
ldrh r1, [r2]
@@ -1770,7 +1770,7 @@ _021D8272:
str r1, [r0]
ldr r1, _021D835C ; =0x00007FFF
mov r0, #1
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
add r0, r5, #0
add r1, r4, #0
add r0, #0xa8
@@ -2260,7 +2260,7 @@ _021D86B2:
lsl r1, r1, #0x10
mov r0, #1
lsr r1, r1, #0x10
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
pop {r4, pc}
.align 2, 0
_021D86DC: .word 0x00000116
diff --git a/arm9/modules/63/asm/mod63_021D8890.s b/arm9/modules/63/asm/mod63_021D8890.s
index e501157b..ccd31d01 100644
--- a/arm9/modules/63/asm/mod63_021D8890.s
+++ b/arm9/modules/63/asm/mod63_021D8890.s
@@ -417,14 +417,14 @@ MOD63_021D8BD8: ; 0x021D8BD8
add r3, r1, #0
bl FUN_02022318
str r0, [r4, #0x10]
- ldr r3, _021D8C18 ; =UNK_021064B8
+ ldr r3, _021D8C18 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #2
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _021D8C1C ; =UNK_021064C0
+ ldr r3, _021D8C1C ; =NNS_GfdDefaultFuncAllocPlttVram
mov r0, #0x80
ldr r3, [r3]
mov r1, #0
@@ -434,8 +434,8 @@ MOD63_021D8BD8: ; 0x021D8BD8
pop {r4, pc}
nop
_021D8C14: .word MOD63_021D8C20
-_021D8C18: .word UNK_021064B8
-_021D8C1C: .word UNK_021064C0
+_021D8C18: .word NNS_GfdDefaultFuncAllocTexVram
+_021D8C1C: .word NNS_GfdDefaultFuncAllocPlttVram
thumb_func_end MOD63_021D8BD8
thumb_func_start MOD63_021D8C20
@@ -1565,11 +1565,11 @@ _021D950C:
asr r1, r1, #0x10
asr r2, r2, #0x10
asr r3, r3, #0x10
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
lsl r1, r4, #1
ldrh r1, [r7, r1]
add r0, r4, #0
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
add r0, r4, #1
lsl r0, r0, #0x18
lsr r4, r0, #0x18
@@ -1578,11 +1578,11 @@ _021D950C:
ldr r0, _021D9594 ; =0x00004210
ldr r1, _021D9598 ; =0x0000318A
mov r2, #0
- bl FUN_020B83E0
+ bl NNS_G3dGlbMaterialColorDiffAmb
ldr r0, _021D959C ; =0x00004A52
ldr r1, _021D95A0 ; =0x000039CE
mov r2, #0
- bl FUN_020B83BC
+ bl NNS_G3dGlbMaterialColorSpecEmi
mov r0, #0x1f
str r0, [sp]
mov r0, #2
@@ -1592,7 +1592,7 @@ _021D950C:
mov r0, #0xd
mov r2, #2
add r3, r1, #0
- bl FUN_020B8390
+ bl NNS_G3dGlbPolygonAttr
ldr r0, _021D95A4 ; =MOD63_021D8CB0
add r1, r5, #0
bl Main_SetVBlankIntrCB
@@ -1767,7 +1767,7 @@ _021D96C6:
beq _021D96F4
ldr r1, [sp, #0x14]
add r1, r1, r7
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0
bne _021D96F8
ldr r0, [r6, #0x2c]
@@ -1912,7 +1912,7 @@ MOD63_021D9810: ; 0x021D9810
mov r2, #0x4c
bl AllocAndReadWholeNarcMemberByIdPair
str r0, [r5, #0x3c]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r5, #0x40]
bl FUN_0201B3C4
cmp r0, #0
@@ -1965,7 +1965,7 @@ _021D9890:
add r0, r5, r6
add r0, #0x9c
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrb r0, [r0, #9]
cmp r0, #1
beq _021D98A4
@@ -1974,7 +1974,7 @@ _021D98A4:
add r0, r5, r6
add r0, #0x9c
ldr r0, [r0]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
ldrh r1, [r0, #0xe]
add r1, r0, r1
ldr r1, [r1, #0xc]
@@ -1985,29 +1985,29 @@ _021D98BC:
ldr r0, [sp, #0x10]
add r1, r4, #0
add r0, r0, r6
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
add r0, r4, #0
mov r1, #0
mov r2, #0x40
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
add r0, r4, #0
mov r1, #0
mov r2, #0x80
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
mov r2, #2
add r0, r4, #0
mov r1, #0
lsl r2, r2, #8
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
mov r2, #1
add r0, r4, #0
mov r1, #0
lsl r2, r2, #0xa
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
add r0, r4, #0
mov r1, #0
mov r2, #0xf
- bl FUN_020BC02C
+ bl NNSi_G3dModifyPolygonAttrMask
add r0, r7, #1
lsl r0, r0, #0x18
lsr r7, r0, #0x18
@@ -3038,7 +3038,7 @@ MOD63_021DA158: ; 0x021DA158
beq _021DA18E
add r1, r4, #0
add r1, #0x14
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
cmp r0, #0
bne _021DA192
ldr r0, [r4, #0x14]
diff --git a/arm9/modules/63/asm/mod63_021DA640.s b/arm9/modules/63/asm/mod63_021DA640.s
index 6095d832..5bcdfbd2 100644
--- a/arm9/modules/63/asm/mod63_021DA640.s
+++ b/arm9/modules/63/asm/mod63_021DA640.s
@@ -108,7 +108,7 @@ MOD63_021DA6E8: ; 0x021DA6E8
orr r0, r1
str r0, [r2]
bl MOD63_021DA640
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -876,7 +876,7 @@ MOD63_021DAD18: ; 0x021DAD18
add r6, r2, #0
bl FUN_02020354
mov r1, #1
- bl FUN_020B19C4
+ bl NNS_G2dGetImagePaletteLocation
add r7, r0, #0
cmp r6, #0
bne _021DAD44
diff --git a/arm9/modules/63/asm/mod63_021DAE5C.s b/arm9/modules/63/asm/mod63_021DAE5C.s
index 52b453e2..77623c5c 100644
--- a/arm9/modules/63/asm/mod63_021DAE5C.s
+++ b/arm9/modules/63/asm/mod63_021DAE5C.s
@@ -239,7 +239,7 @@ MOD63_021DAFEC: ; 0x021DAFEC
orr r0, r1
str r0, [r3]
bl MOD63_021DAE5C
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c
index 6f9e7036..84461fe1 100644
--- a/arm9/modules/63/src/mod63_021DB450.c
+++ b/arm9/modules/63/src/mod63_021DB450.c
@@ -5,8 +5,8 @@
#include "mod63_021DB450.h"
//todo resolve to static code
-extern u32 (*UNK_021064B8)(u32 param0, u32 param1, u32 param2);
-extern u32 (*UNK_021064C0)(u32 param0, u32 param1, u32 param2);
+extern u32 (*NNS_GfdDefaultFuncAllocTexVram)(u32 param0, u32 param1, u32 param2);
+extern u32 (*NNS_GfdDefaultFuncAllocPlttVram)(u32 param0, u32 param1, u32 param2);
extern void FUN_0201327C(u32 param0);
extern void FUN_020132BC(u32 param0);
@@ -29,7 +29,7 @@ extern void FUN_020072E8(struct UnkStruct63_021DB450 *);
extern void FUN_020081C4(struct UnkStruct63_021DB450 *);
extern void FUN_020222AC(void);
-extern void FUN_020B02C8(void);
+extern void NNS_G2dSetupSoftwareSpriteCamera(void);
extern u32 FUN_02006ED4(struct UnkStruct63_021DB450 *);
extern void FUN_020222B4(u32, u32);
@@ -50,7 +50,7 @@ const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3];
THUMB_FUNC u32 MOD63_021DB450(u32 param0, u32 param1)
{
- u32 res0 = (UNK_021064B8)(param0, param1, 0);
+ u32 res0 = (NNS_GfdDefaultFuncAllocTexVram)(param0, param1, 0);
FUN_0201327C(res0);
GF_ASSERT(res0);
return (u32)((u16)res0 * 8);
@@ -58,7 +58,7 @@ THUMB_FUNC u32 MOD63_021DB450(u32 param0, u32 param1)
THUMB_FUNC u32 MOD63_021DB474(u32 param0, u32 param1)
{
- u32 res0 = (UNK_021064C0)(param0, param1, 1);
+ u32 res0 = (NNS_GfdDefaultFuncAllocPlttVram)(param0, param1, 1);
GF_ASSERT(res0);
FUN_020132BC(res0);
return (u32)((u16)res0 * 8);
@@ -114,7 +114,7 @@ THUMB_FUNC void MOD63_021DB5A8(UnkStruct63_021DB450 *param0)
return;
}
FUN_020222AC();
- FUN_020B02C8();
+ NNS_G2dSetupSoftwareSpriteCamera();
(void)FUN_02006ED4(param0->field_00);
MOD63_021DB934();
FUN_020222B4(1, 0);
diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s
index ce90e965..fa1d5be3 100644
--- a/arm9/modules/64/asm/module_64.s
+++ b/arm9/modules/64/asm/module_64.s
@@ -416,7 +416,7 @@ MOD64_021D785C: ; 0x021D785C
push {r4, r5, lr}
sub sp, #0x24
add r4, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -456,7 +456,7 @@ MOD64_021D78B4: ; 0x021D78B4
push {r3, r4, lr}
sub sp, #4
add r4, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _021D7940 ; =0x04000060
ldr r1, _021D7944 ; =0xFFFFCFFD
@@ -511,11 +511,11 @@ _021D7900:
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
add sp, #4
pop {r3, r4, pc}
.align 2, 0
@@ -533,8 +533,8 @@ _021D7960: .word 0xBFFF0000
thumb_func_start MOD64_021D7964
MOD64_021D7964: ; 0x021D7964
push {r3, lr}
- bl FUN_020AEAF4
- bl FUN_020AEC60
+ bl NNS_GfdResetFrmTexVramState
+ bl NNS_GfdResetFrmPlttVramState
pop {r3, pc}
thumb_func_end MOD64_021D7964
@@ -741,13 +741,13 @@ MOD64_021D7B04: ; 0x021D7B04
mov r1, #2
lsl r1, r1, #8
str r0, [r5, r1]
- ldr r3, _021D7BA4 ; =UNK_021064B8
+ ldr r3, _021D7BA4 ; =NNS_GfdDefaultFuncAllocTexVram
lsl r0, r1, #6
mov r1, #0
ldr r3, [r3]
add r2, r1, #0
blx r3
- ldr r3, _021D7BA8 ; =UNK_021064C0
+ ldr r3, _021D7BA8 ; =NNS_GfdDefaultFuncAllocPlttVram
add r4, r0, #0
ldr r3, [r3]
mov r0, #0x80
@@ -808,8 +808,8 @@ _021D7B8E:
blt _021D7B8E
pop {r3, r4, r5, r6, r7, pc}
nop
-_021D7BA4: .word UNK_021064B8
-_021D7BA8: .word UNK_021064C0
+_021D7BA4: .word NNS_GfdDefaultFuncAllocTexVram
+_021D7BA8: .word NNS_GfdDefaultFuncAllocPlttVram
_021D7BAC: .word 0x7FFF0000
_021D7BB0: .word 0xFFFF0000
thumb_func_end MOD64_021D7B04
@@ -1059,7 +1059,7 @@ MOD64_021D7D7C: ; 0x021D7D7C
mov r0, #0x52
bl UncompressFromNarc
str r0, [r4, #0x54]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
str r0, [r4, #0x58]
ldrh r1, [r0, #0xe]
add r1, r0, r1
@@ -1067,7 +1067,7 @@ MOD64_021D7D7C: ; 0x021D7D7C
add r0, r0, r1
str r0, [r4, #0x5c]
ldr r0, [r4, #0x54]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r4, #0x60]
bl FUN_0201B3C4
ldr r0, [r4, #0x54]
@@ -1075,7 +1075,7 @@ MOD64_021D7D7C: ; 0x021D7D7C
bl FUN_0201B3A8
ldr r1, [r4, #0x5c]
add r0, r4, #0
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
add sp, #4
pop {r3, r4, pc}
thumb_func_end MOD64_021D7D7C
@@ -1094,20 +1094,20 @@ MOD64_021D7DC0: ; 0x021D7DC0
bl UncompressFromNarc
str r0, [r4, #0x64]
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
str r0, [r4, #0x68]
ldr r1, [r4, #0x68]
ldr r2, [r4, #0x5c]
add r0, r5, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4, #0x6c]
ldr r1, [r4, #0x68]
ldr r2, [r4, #0x5c]
ldr r3, [r4, #0x60]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
ldr r1, [r4, #0x6c]
add r0, r4, #0
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add sp, #4
pop {r3, r4, r5, r6, pc}
.align 2, 0
@@ -1128,7 +1128,7 @@ _021D7E14:
beq _021D7E28
ldr r1, [r5, #0x6c]
add r0, r4, #0
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
ldr r0, [r5, #0x64]
bl FreeToHeap
_021D7E28:
@@ -1149,7 +1149,7 @@ MOD64_021D7E34: ; 0x021D7E34
add r0, r4, #0
add r0, #0x90
ldrh r0, [r0]
- ldr r3, _021D7ECC ; =UNK_020FFA38
+ ldr r3, _021D7ECC ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1166,7 +1166,7 @@ MOD64_021D7E34: ; 0x021D7E34
add r0, r4, #0
add r0, #0x92
ldrh r0, [r0]
- ldr r3, _021D7ECC ; =UNK_020FFA38
+ ldr r3, _021D7ECC ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1183,7 +1183,7 @@ MOD64_021D7E34: ; 0x021D7E34
add r0, r4, #0
add r0, #0x94
ldrh r0, [r0]
- ldr r3, _021D7ECC ; =UNK_020FFA38
+ ldr r3, _021D7ECC ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1211,7 +1211,7 @@ _021D7EC8:
add sp, #0x48
pop {r4, pc}
.align 2, 0
-_021D7ECC: .word UNK_020FFA38
+_021D7ECC: .word FX_SinCosTable_
thumb_func_end MOD64_021D7E34
thumb_func_start MOD64_021D7ED0
@@ -1442,18 +1442,18 @@ MOD64_021D8058: ; 0x021D8058
ldr r2, _021D809C ; =0xFFFFF000
add r1, r0, #0
add r3, r0, #0
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
ldr r1, _021D80A0 ; =0x00007FFF
mov r0, #0
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
ldr r0, _021D80A0 ; =0x00007FFF
mov r2, #0
add r1, r0, #0
- bl FUN_020B83E0
+ bl NNS_G3dGlbMaterialColorDiffAmb
ldr r0, _021D80A0 ; =0x00007FFF
mov r2, #0
add r1, r0, #0
- bl FUN_020B83BC
+ bl NNS_G3dGlbMaterialColorSpecEmi
mov r0, #0x26
lsl r0, r0, #4
mov r4, #0
@@ -1634,9 +1634,9 @@ MOD64_021D81D8: ; 0x021D81D8
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
- bl FUN_020BB394
- bl FUN_020B02C8
+ bl NNS_G3dGeBufferOP_N
+ bl NNS_G3dGeFlushBuffer
+ bl NNS_G2dSetupSoftwareSpriteCamera
mov r0, #2
lsl r0, r0, #8
ldr r0, [r4, r0]
@@ -1648,11 +1648,11 @@ MOD64_021D81D8: ; 0x021D81D8
mov r0, #0x12
add r1, sp, #4
str r2, [sp, #4]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
bl FUN_0201EBA4
add r0, r4, #0
bl MOD64_021D8058
@@ -1660,7 +1660,7 @@ MOD64_021D81D8: ; 0x021D81D8
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r0, #0
add r1, r0, #0
bl FUN_020222B4
@@ -2795,7 +2795,7 @@ MOD64_021D8A90: ; 0x021D8A90
lsr r0, r0, #0x10
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _021D8ADC ; =UNK_020FFA38
+ ldr r0, _021D8ADC ; =FX_SinCosTable_
ldr r2, [r4, #4]
ldrsh r0, [r0, r1]
asr r3, r2, #0x1f
@@ -2818,7 +2818,7 @@ MOD64_021D8A90: ; 0x021D8A90
pop {r4, pc}
nop
_021D8AD8: .word 0x0000FFFF
-_021D8ADC: .word UNK_020FFA38
+_021D8ADC: .word FX_SinCosTable_
thumb_func_end MOD64_021D8A90
thumb_func_start MOD64_021D8AE0
diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s
index b3f219dc..e9e1ed78 100644
--- a/arm9/modules/65/asm/module_65.s
+++ b/arm9/modules/65/asm/module_65.s
@@ -5301,7 +5301,7 @@ MOD65_021D9E98: ; 0x021D9E98
mov r2, #0x1c
add r5, r0, #0
bl MI_CpuFill8
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_Init
bl G3X_InitMtxStack
ldr r0, _021D9F34 ; =0x04000060
@@ -5388,8 +5388,8 @@ MOD65_021D9F50: ; 0x021D9F50
mov r0, #2
str r0, [r2]
str r3, [r1]
- bl FUN_020B849C
- bl FUN_020B02C8
+ bl NNS_G3dGlbFlushP
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r0, [r4, #4]
bl FUN_02006ED4
ldr r0, _021D9F88 ; =0x04000540
diff --git a/arm9/modules/66/asm/module_66.s b/arm9/modules/66/asm/module_66.s
index 0dda816f..2fc19d08 100644
--- a/arm9/modules/66/asm/module_66.s
+++ b/arm9/modules/66/asm/module_66.s
@@ -138,7 +138,7 @@ MOD66_021D75C8: ; 0x021D75C8
beq _021D75DE
blx r1
_021D75DE:
- bl FUN_020AEEB8
+ bl NNS_GfdDoVramTransfer
add r0, r4, #0
bl MOD66_021D9220
ldr r0, [r4, #0x28]
diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s
index d88f4eb8..b62037b8 100644
--- a/arm9/modules/69/asm/module_69.s
+++ b/arm9/modules/69/asm/module_69.s
@@ -686,7 +686,7 @@ MOD69_0222DB2C: ; 0x0222DB2C
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, _0222DB98 ; =0x00001B38
ldr r0, [r4, r0]
bl MOD69_0222F11C
@@ -694,11 +694,11 @@ MOD69_0222DB2C: ; 0x0222DB2C
mov r0, #0x12
add r1, sp, #4
str r2, [sp, #4]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, _0222DB9C ; =0x00001B3C
ldr r0, [r4, r0]
bl MOD69_0222F63C
@@ -706,7 +706,7 @@ MOD69_0222DB2C: ; 0x0222DB2C
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, _0222DBA0 ; =0x04000540
mov r1, #1
str r1, [r0]
@@ -921,7 +921,7 @@ MOD69_0222DD54: ; 0x0222DD54
push {r3, r4, lr}
sub sp, #4
add r4, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _0222DDE4 ; =0x04000060
ldr r2, _0222DDE8 ; =0xFFFFCFFD
@@ -957,11 +957,11 @@ MOD69_0222DD54: ; 0x0222DD54
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -1071,7 +1071,7 @@ MOD69_0222DE98: ; 0x0222DE98
push {r3, r4, lr}
sub sp, #0x1c
add r4, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -1193,19 +1193,19 @@ _0222DF72:
str r0, [sp, #0x34]
_0222DF98:
add r0, sp, #0x5c
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, sp, #0x48
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
ldr r0, [sp, #0x44]
add r1, r7, #0
mov r2, #1
add r3, sp, #0x5c
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
ldr r0, [sp, #0x40]
add r1, r6, #0
mov r2, #1
add r3, sp, #0x48
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
ldr r0, [sp, #0x20]
add r0, r0, #1
str r0, [sp, #0x94]
@@ -1333,20 +1333,20 @@ _0222DF98:
b _0222DF98
_0222E0D4:
add r0, sp, #0x5c
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, sp, #0x48
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r1, #0x96
ldr r0, [sp, #0x44]
lsl r1, r1, #8
mov r2, #1
add r3, sp, #0x5c
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
ldr r0, [sp, #0x40]
mov r1, #0xc0
mov r2, #1
add r3, sp, #0x48
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
ldr r0, [sp, #0x14]
ldr r0, [r0, #0xc]
ldr r0, [r0]
@@ -2169,7 +2169,7 @@ _0222E77E:
str r0, [r3]
add r0, r4, #0
add r0, #0x48
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0x19
add r0, r4, #0
lsl r3, r3, #8
@@ -2179,7 +2179,7 @@ _0222E77E:
add r0, #0x48
mov r1, #1
add r2, r2, r3
- bl FUN_020B1A1C
+ bl NNS_G2dSetImageLocation
ldr r0, _0222E7BC ; =MOD69_0222E7C0
add r1, r4, #0
mov r2, #0
@@ -3795,10 +3795,10 @@ _0222F408:
mov r1, #1
bl G3B_LightVector
ldrh r0, [r4, #0x28]
- ldr r3, _0222F62C ; =UNK_020FFA38
+ ldr r3, _0222F62C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _0222F62C ; =UNK_020FFA38
+ ldr r0, _0222F62C ; =FX_SinCosTable_
add r2, r0, r1
ldrsh r1, [r3, r1]
mov r3, #2
@@ -3810,10 +3810,10 @@ _0222F408:
add r1, r5, #0
bl MTX_Concat44
ldrh r0, [r4, #0x2a]
- ldr r3, _0222F62C ; =UNK_020FFA38
+ ldr r3, _0222F62C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _0222F62C ; =UNK_020FFA38
+ ldr r0, _0222F62C ; =FX_SinCosTable_
add r2, r0, r1
ldrsh r1, [r3, r1]
mov r3, #2
@@ -3825,10 +3825,10 @@ _0222F408:
add r1, r5, #0
bl MTX_Concat44
ldrh r0, [r4, #0x2c]
- ldr r3, _0222F62C ; =UNK_020FFA38
+ ldr r3, _0222F62C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r1, r0, #2
- ldr r0, _0222F62C ; =UNK_020FFA38
+ ldr r0, _0222F62C ; =FX_SinCosTable_
add r2, r0, r1
ldrsh r1, [r3, r1]
mov r3, #2
@@ -3950,7 +3950,7 @@ _0222F61C: .word 0x0000019A
_0222F620: .word 0x00002D6B
_0222F624: .word 0x00000FFF
_0222F628: .word 0xFFFFF001
-_0222F62C: .word UNK_020FFA38
+_0222F62C: .word FX_SinCosTable_
_0222F630: .word 0x00007FFF
_0222F634: .word 0x00008D1C
_0222F638: .word 0x0000151C
diff --git a/arm9/modules/70/asm/module_70.s b/arm9/modules/70/asm/module_70.s
index eb5ef973..f6d3dc58 100644
--- a/arm9/modules/70/asm/module_70.s
+++ b/arm9/modules/70/asm/module_70.s
@@ -407,7 +407,7 @@ MOD70_021D77CC: ; 0x021D77CC
mov r0, #0x3d
bl FUN_02016B94
str r0, [r4, #0x10]
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -1462,19 +1462,19 @@ MOD70_021D7FF8: ; 0x021D7FF8
add r7, r4, #0
_021D8050:
add r0, sp, #0x2c
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, sp, #0x18
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
ldr r0, [sp, #0x14]
add r1, r4, #0
mov r2, #1
add r3, sp, #0x2c
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
ldr r0, [sp, #0x10]
add r1, r7, #0
mov r2, #1
add r3, sp, #0x18
- bl FUN_020B1240
+ bl NNS_G2dLoadPalette
ldr r0, [r6]
lsl r0, r0, #0xc
str r0, [sp, #0x58]
diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s
index d5c1ec6f..b9d99cf4 100644
--- a/arm9/modules/71/asm/module_71.s
+++ b/arm9/modules/71/asm/module_71.s
@@ -2224,7 +2224,7 @@ MOD71_0222E884: ; 0x0222E884
add r6, r0, #0
beq _0222E8D6
add r1, sp, #4
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
cmp r0, #0
beq _0222E8D0
ldr r0, [sp, #0x1c]
@@ -2449,7 +2449,7 @@ MOD71_0222EA68: ; 0x0222EA68
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r5, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7f
diff --git a/arm9/modules/73/asm/module_73.s b/arm9/modules/73/asm/module_73.s
index 4a086c51..f00d35cf 100644
--- a/arm9/modules/73/asm/module_73.s
+++ b/arm9/modules/73/asm/module_73.s
@@ -2366,9 +2366,9 @@ MOD73_021D8858: ; 0x021D8858
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
- bl FUN_020BB394
- bl FUN_020B02C8
+ bl NNS_G3dGeBufferOP_N
+ bl NNS_G3dGeFlushBuffer
+ bl NNS_G2dSetupSoftwareSpriteCamera
mov r0, #0xaf
lsl r0, r0, #2
ldr r0, [r4, r0]
@@ -2380,7 +2380,7 @@ _021D8882:
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r0, #0
add r1, r0, #0
bl FUN_020222B4
@@ -2595,7 +2595,7 @@ MOD73_021D8A18: ; 0x021D8A18
push {r4, r5, lr}
sub sp, #0x24
add r4, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -2754,7 +2754,7 @@ _021D8B3A:
MOD73_021D8B4C: ; 0x021D8B4C
push {r3, r4, lr}
sub sp, #4
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _021D8BB8 ; =0x04000060
ldr r2, _021D8BBC ; =0xFFFFCFFD
@@ -2793,11 +2793,11 @@ MOD73_021D8B4C: ; 0x021D8B4C
str r0, [r2]
str r1, [r2, #0x40]
mov r1, #1
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #2
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
add sp, #4
pop {r3, r4, pc}
nop
@@ -2812,8 +2812,8 @@ _021D8BCC: .word 0xBFFF0000
thumb_func_start MOD73_021D8BD0
MOD73_021D8BD0: ; 0x021D8BD0
push {r3, lr}
- bl FUN_020AEAF4
- bl FUN_020AEC60
+ bl NNS_GfdResetFrmTexVramState
+ bl NNS_GfdResetFrmPlttVramState
pop {r3, pc}
thumb_func_end MOD73_021D8BD0
@@ -6738,7 +6738,7 @@ _021DA906:
str r0, [sp, #0x6c]
asr r0, r0, #0x1f
lsl r3, r2, #1
- ldr r1, _021DAAA0 ; =UNK_020FFA38
+ ldr r1, _021DAAA0 ; =FX_SinCosTable_
str r0, [sp, #0x70]
ldr r0, [sp, #0xa8]
ldrsh r6, [r1, r3]
@@ -6904,7 +6904,7 @@ _021DA906:
pop {r3, r4, r5, r6, r7, pc}
nop
_021DAA9C: .word MOD73_021DBE7C
-_021DAAA0: .word UNK_020FFA38
+_021DAAA0: .word FX_SinCosTable_
_021DAAA4: .word 0x0000019A
thumb_func_end MOD73_021DA8BC
@@ -7130,7 +7130,7 @@ _021DABFC:
lsl r4, r0, #1
add r0, r4, #1
lsl r1, r0, #1
- ldr r0, _021DAC98 ; =UNK_020FFA38
+ ldr r0, _021DAC98 ; =FX_SinCosTable_
add r2, r6, #0
ldrsh r0, [r0, r1]
add r3, r7, #0
@@ -7146,7 +7146,7 @@ _021DABFC:
lsr r0, r0, #0xc
orr r0, r1
str r0, [sp]
- ldr r0, _021DAC98 ; =UNK_020FFA38
+ ldr r0, _021DAC98 ; =FX_SinCosTable_
lsl r1, r4, #1
ldrsh r0, [r0, r1]
add r2, r6, #0
@@ -7177,7 +7177,7 @@ _021DAC94:
add sp, #0xc
pop {r4, r5, r6, r7, pc}
.align 2, 0
-_021DAC98: .word UNK_020FFA38
+_021DAC98: .word FX_SinCosTable_
thumb_func_end MOD73_021DABD0
thumb_func_start MOD73_021DAC9C
@@ -7706,7 +7706,7 @@ MOD73_021DB020: ; 0x021DB020
asr r0, r0, #4
lsl r1, r0, #1
add r0, r1, #1
- ldr r7, _021DB124 ; =UNK_020FFA38
+ ldr r7, _021DB124 ; =FX_SinCosTable_
lsl r0, r0, #1
ldrsh r3, [r7, r0]
asr r6, r3, #0x1f
@@ -7819,7 +7819,7 @@ _021DB112:
add sp, #0x1c
pop {r4, r5, r6, r7, pc}
nop
-_021DB124: .word UNK_020FFA38
+_021DB124: .word FX_SinCosTable_
_021DB128: .word 0x00000000
thumb_func_end MOD73_021DB020
diff --git a/arm9/modules/74/asm/module_74.s b/arm9/modules/74/asm/module_74.s
index 0189a34d..651527c1 100644
--- a/arm9/modules/74/asm/module_74.s
+++ b/arm9/modules/74/asm/module_74.s
@@ -341,7 +341,7 @@ MOD74_021D7784: ; 0x021D7784
push {r4, lr}
add r4, r0, #0
bl MOD74_021D82E8
- bl FUN_020AEEB8
+ bl NNS_GfdDoVramTransfer
ldr r0, [r4, #0x10]
bl FUN_0201AB60
ldr r3, _021D77A4 ; =0x027E0000
diff --git a/arm9/modules/75/asm/module_75.s b/arm9/modules/75/asm/module_75.s
index 82294cbf..f84a1de7 100644
--- a/arm9/modules/75/asm/module_75.s
+++ b/arm9/modules/75/asm/module_75.s
@@ -7834,7 +7834,7 @@ MOD75_021EA950: ; 0x021EA950
bl NARC_AllocAndReadWholeMember
add r1, r5, #0
add r4, r0, #0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
add r0, r4, #0
pop {r3, r4, r5, pc}
thumb_func_end MOD75_021EA950
@@ -8587,7 +8587,7 @@ MOD75_021EAF54: ; 0x021EAF54
bl NARC_AllocAndReadWholeMember
add r1, r5, #0
add r4, r0, #0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
add r0, r4, #0
pop {r3, r4, r5, pc}
thumb_func_end MOD75_021EAF54
diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s
index 4dce464f..bdbf644f 100644
--- a/arm9/modules/77/asm/module_77.s
+++ b/arm9/modules/77/asm/module_77.s
@@ -2554,7 +2554,7 @@ MOD77_021D89F4: ; 0x021D89F4
asr r1, r1, #0x10
asr r2, r2, #0x10
asr r3, r3, #0x10
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
pop {r4, pc}
nop
_021D8A28: .word 0x0000C2DC
@@ -2567,7 +2567,7 @@ MOD77_021D8A30: ; 0x021D8A30
sub sp, #0x24
add r4, r1, #0
ldr r1, [r4, #4]
- ldr r3, _021D8AA4 ; =UNK_020FFA38
+ ldr r3, _021D8AA4 ; =FX_SinCosTable_
lsl r1, r1, #0x10
lsr r1, r1, #0x10
asr r1, r1, #4
@@ -2580,7 +2580,7 @@ MOD77_021D8A30: ; 0x021D8A30
add r5, r0, #0
bl MTX_RotY33_
ldr r0, [r4]
- ldr r3, _021D8AA4 ; =UNK_020FFA38
+ ldr r3, _021D8AA4 ; =FX_SinCosTable_
lsl r0, r0, #0x10
lsr r0, r0, #0x10
asr r0, r0, #4
@@ -2597,7 +2597,7 @@ MOD77_021D8A30: ; 0x021D8A30
add r2, r5, #0
bl MTX_Concat33
ldr r0, [r4, #8]
- ldr r3, _021D8AA4 ; =UNK_020FFA38
+ ldr r3, _021D8AA4 ; =FX_SinCosTable_
lsl r0, r0, #0x10
lsr r0, r0, #0x10
asr r0, r0, #4
@@ -2616,7 +2616,7 @@ MOD77_021D8A30: ; 0x021D8A30
add sp, #0x24
pop {r4, r5, pc}
nop
-_021D8AA4: .word UNK_020FFA38
+_021D8AA4: .word FX_SinCosTable_
thumb_func_end MOD77_021D8A30
thumb_func_start MOD77_021D8AA8
@@ -2625,7 +2625,7 @@ MOD77_021D8AA8: ; 0x021D8AA8
sub sp, #0x24
add r4, r1, #0
ldr r1, [r4]
- ldr r3, _021D8B1C ; =UNK_020FFA38
+ ldr r3, _021D8B1C ; =FX_SinCosTable_
lsl r1, r1, #0x10
lsr r1, r1, #0x10
asr r1, r1, #4
@@ -2638,7 +2638,7 @@ MOD77_021D8AA8: ; 0x021D8AA8
add r5, r0, #0
bl MTX_RotY33_
ldr r0, [r4, #4]
- ldr r3, _021D8B1C ; =UNK_020FFA38
+ ldr r3, _021D8B1C ; =FX_SinCosTable_
neg r0, r0
lsl r0, r0, #0x10
lsr r0, r0, #0x10
@@ -2656,7 +2656,7 @@ MOD77_021D8AA8: ; 0x021D8AA8
add r2, r5, #0
bl MTX_Concat33
ldr r0, [r4, #8]
- ldr r3, _021D8B1C ; =UNK_020FFA38
+ ldr r3, _021D8B1C ; =FX_SinCosTable_
lsl r0, r0, #0x10
lsr r0, r0, #0x10
asr r0, r0, #4
@@ -2675,7 +2675,7 @@ MOD77_021D8AA8: ; 0x021D8AA8
add sp, #0x24
pop {r4, r5, pc}
.align 2, 0
-_021D8B1C: .word UNK_020FFA38
+_021D8B1C: .word FX_SinCosTable_
thumb_func_end MOD77_021D8AA8
thumb_func_start MOD77_021D8B20
diff --git a/arm9/modules/78/asm/module_78.s b/arm9/modules/78/asm/module_78.s
index 5d9f4625..7fc7439a 100644
--- a/arm9/modules/78/asm/module_78.s
+++ b/arm9/modules/78/asm/module_78.s
@@ -66,13 +66,13 @@ _021D7558:
ldrsh r2, [r3, r7]
ldrsh r3, [r3, r6]
add r0, r4, #0
- bl FUN_020B8418
+ bl NNS_G3dGlbLightVector
ldr r2, [r5, #4]
lsl r1, r4, #1
add r1, r2, r1
ldrh r1, [r1, #0x18]
add r0, r4, #0
- bl FUN_020B8404
+ bl NNS_G3dGlbLightColor
add r0, r4, #1
lsl r0, r0, #0x18
lsr r4, r0, #0x18
@@ -82,12 +82,12 @@ _021D7558:
ldrh r0, [r2, #0x20]
ldrh r1, [r2, #0x22]
ldr r2, [r2, #0x28]
- bl FUN_020B83E0
+ bl NNS_G3dGlbMaterialColorDiffAmb
ldr r2, [r5, #4]
ldrh r0, [r2, #0x24]
ldrh r1, [r2, #0x26]
ldr r2, [r2, #0x2c]
- bl FUN_020B83BC
+ bl NNS_G3dGlbMaterialColorSpecEmi
ldr r3, [r5, #4]
ldr r0, [r3, #0x40]
str r0, [sp]
@@ -97,7 +97,7 @@ _021D7558:
ldr r1, [r3, #0x34]
ldr r2, [r3, #0x38]
ldr r3, [r3, #0x3c]
- bl FUN_020B8390
+ bl NNS_G3dGlbPolygonAttr
mov r0, #0
mov r1, #0x48
bl FUN_02079A70
@@ -243,7 +243,7 @@ _021D76C8:
add r1, #0x80
ldr r1, [r1]
add r0, r7, #0
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
ldr r0, [r5, #0x60]
bl FreeToHeap
add r0, r4, #1
@@ -358,26 +358,26 @@ MOD78_021D778C: ; 0x021D778C
add r2, #0x5c
bl FUN_0201B234
ldr r0, [r5, #0x5c]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [sp, #4]
ldr r0, [r5, #0x58]
mov r1, #0
mov r2, #0x40
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
ldr r0, [r5, #0x58]
mov r1, #0
mov r2, #0x80
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
mov r2, #2
ldr r0, [r5, #0x58]
mov r1, #0
lsl r2, r2, #8
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
mov r2, #1
ldr r0, [r5, #0x58]
mov r1, #0
lsl r2, r2, #0xa
- bl FUN_020BC094
+ bl NNSi_G3dModifyMatFlag
add r0, r5, #0
str r0, [sp, #8]
add r0, #0x70
@@ -402,12 +402,12 @@ _021D780E:
bl NARC_AllocAndReadWholeMember
str r0, [r4, #0x60]
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
add r7, r0, #0
ldr r0, [sp, #8]
ldr r2, [r5, #0x58]
add r1, r7, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
add r1, r4, #0
add r1, #0x80
str r0, [r1]
@@ -417,11 +417,11 @@ _021D780E:
ldr r2, [r5, #0x58]
ldr r3, [sp, #4]
add r1, r7, #0
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
add r4, #0x80
ldr r1, [r4]
add r0, r5, #4
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r6, #1
lsl r0, r0, #0x18
lsr r6, r0, #0x18
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index ea6a3c13..9abe50f0 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -1473,7 +1473,7 @@ _0222DFE4:
mov r1, #2
lsl r1, r1, #0x10
mov r2, #0
- bl tempName_NNS_FndCreateExpHeapEx
+ bl NNS_FndCreateExpHeapEx
str r0, [r4, #0x4c]
mov r0, #1
str r0, [r5]
@@ -1830,7 +1830,7 @@ MOD80_0222E3CC: ; 0x0222E3CC
push {r4, r5, r6, r7, lr}
sub sp, #0x1c
add r5, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
@@ -2269,7 +2269,7 @@ MOD80_0222E750: ; 0x0222E750
add r1, r5, #0
ldr r0, [r0]
add r2, r4, #0
- bl tempName_NNS_FndAllocFromExpHeapEx
+ bl NNS_FndAllocFromExpHeapEx
add r4, r0, #0
add r0, r6, #0
bl OS_RestoreInterrupts
@@ -2289,7 +2289,7 @@ MOD80_0222E778: ; 0x0222E778
ldr r0, _0222E798 ; =0x02237E24
add r1, r5, #0
ldr r0, [r0]
- bl FUN_020ADDF0
+ bl NNS_FndFreeToExpHeap
add r0, r4, #0
bl OS_RestoreInterrupts
_0222E794:
@@ -10717,7 +10717,7 @@ MOD80_02232BAC: ; 0x02232BAC
add r4, r0, #0
beq _02232BCE
add r1, r5, #0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
bne _02232BCE
add r0, r4, #0
diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s
index 63312258..5074a352 100644
--- a/arm9/modules/81/asm/module_81.s
+++ b/arm9/modules/81/asm/module_81.s
@@ -106,7 +106,7 @@ _02237F0A:
lsl r1, r1, #2
str r0, [r4, r1]
_02237F22:
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #1
str r0, [sp]
mov r0, #0x7f
@@ -1479,7 +1479,7 @@ MOD81_02238940: ; 0x02238940
add r5, r0, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
bl FUN_0201EBA4
ldr r0, [r5, #0x1c]
mov r6, #0
@@ -1504,7 +1504,7 @@ _02238976:
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add sp, #4
pop {r3, r4, r5, r6, pc}
.align 2, 0
@@ -1520,7 +1520,7 @@ MOD81_02238988: ; 0x02238988
add r0, r4, #0
add r0, #0x80
ldrh r0, [r0]
- ldr r3, _02238A34 ; =UNK_020FFA38
+ ldr r3, _02238A34 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1537,7 +1537,7 @@ MOD81_02238988: ; 0x02238988
add r0, r4, #0
add r0, #0x82
ldrh r0, [r0]
- ldr r3, _02238A34 ; =UNK_020FFA38
+ ldr r3, _02238A34 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1554,7 +1554,7 @@ MOD81_02238988: ; 0x02238988
add r0, r4, #0
add r0, #0x84
ldrh r0, [r0]
- ldr r3, _02238A34 ; =UNK_020FFA38
+ ldr r3, _02238A34 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1579,7 +1579,7 @@ MOD81_02238988: ; 0x02238988
add r2, r0, #0
add r3, r0, #0
str r0, [sp, #4]
- bl FUN_020B8390
+ bl NNS_G3dGlbPolygonAttr
_02238A20:
add r1, r4, #0
add r0, r4, #4
@@ -1591,7 +1591,7 @@ _02238A20:
add sp, #0x50
pop {r4, pc}
.align 2, 0
-_02238A34: .word UNK_020FFA38
+_02238A34: .word FX_SinCosTable_
thumb_func_end MOD81_02238988
thumb_func_start MOD81_02238A38
@@ -1668,7 +1668,7 @@ MOD81_02238A84: ; 0x02238A84
ldr r0, [r4, r6]
cmp r0, #0
beq _02238B02
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
str r0, [r5, #0x58]
ldrh r1, [r0, #0xe]
add r1, r0, r1
@@ -1676,7 +1676,7 @@ MOD81_02238A84: ; 0x02238A84
add r0, r0, r1
str r0, [r5, #0x5c]
ldr r0, [r5]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r5, #0x60]
bl FUN_0201B3C4
ldr r0, [r5]
@@ -1684,7 +1684,7 @@ MOD81_02238A84: ; 0x02238A84
bl FUN_0201B3A8
ldr r1, [r5, #0x5c]
add r0, r5, #4
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
ldr r0, [sp, #0x20]
mov r1, #0x1f
str r0, [r5, #0x68]
@@ -1777,13 +1777,13 @@ MOD81_02238B5C: ; 0x02238B5C
mov r2, #0x1f
mov r1, #0
lsl r2, r2, #0x10
- bl FUN_020BC02C
+ bl NNSi_G3dModifyPolygonAttrMask
pop {r3, pc}
_02238B76:
mov r2, #0x1f
mov r1, #1
lsl r2, r2, #0x10
- bl FUN_020BC02C
+ bl NNSi_G3dModifyPolygonAttrMask
pop {r3, pc}
.align 2, 0
thumb_func_end MOD81_02238B5C
@@ -1806,7 +1806,7 @@ MOD81_02238B8C: ; 0x02238B8C
add r0, r4, #0
add r0, #0x80
ldrh r0, [r0]
- ldr r3, _02238C3C ; =UNK_020FFA38
+ ldr r3, _02238C3C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1823,7 +1823,7 @@ MOD81_02238B8C: ; 0x02238B8C
add r0, r4, #0
add r0, #0x82
ldrh r0, [r0]
- ldr r3, _02238C3C ; =UNK_020FFA38
+ ldr r3, _02238C3C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1840,7 +1840,7 @@ MOD81_02238B8C: ; 0x02238B8C
add r0, r4, #0
add r0, #0x84
ldrh r0, [r0]
- ldr r3, _02238C3C ; =UNK_020FFA38
+ ldr r3, _02238C3C ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1857,7 +1857,7 @@ MOD81_02238B8C: ; 0x02238B8C
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
bl FUN_0201EBA4
add r1, r4, #0
ldr r0, [r4, #0x5c]
@@ -1871,12 +1871,12 @@ MOD81_02238B8C: ; 0x02238B8C
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
add r0, r4, #0
add sp, #0x4c
pop {r3, r4, pc}
.align 2, 0
-_02238C3C: .word UNK_020FFA38
+_02238C3C: .word FX_SinCosTable_
thumb_func_end MOD81_02238B8C
thumb_func_start MOD81_02238C40
@@ -2123,9 +2123,9 @@ MOD81_02238DFC: ; 0x02238DFC
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
- bl FUN_020BB394
- bl FUN_020B02C8
+ bl NNS_G3dGeBufferOP_N
+ bl NNS_G3dGeFlushBuffer
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r0, [r4, #0xc]
bl FUN_020081C4
ldr r0, [r4, #0xc]
@@ -2134,7 +2134,7 @@ MOD81_02238DFC: ; 0x02238DFC
str r2, [sp]
mov r0, #0x12
add r1, sp, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, [r4, #0x5c]
bl MOD81_02238940
mov r0, #0
@@ -2694,7 +2694,7 @@ MOD81_022392D8: ; 0x022392D8
push {r3, r4, r5, r6, lr}
sub sp, #4
add r5, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _02239380 ; =0x04000060
ldr r2, _02239384 ; =0xFFFFCFFD
@@ -2730,19 +2730,19 @@ MOD81_022392D8: ; 0x022392D8
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
- ldr r3, _02239394 ; =UNK_021064B8
+ bl NNS_GfdInitFrmPlttVramManager
+ ldr r3, _02239394 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #1
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _02239398 ; =UNK_021064C0
+ ldr r3, _02239398 ; =NNS_GfdDefaultFuncAllocPlttVram
add r4, r0, #0
ldr r3, [r3]
mov r0, #0x80
@@ -2774,8 +2774,8 @@ _02239384: .word 0xFFFFCFFD
_02239388: .word 0x0000CFFB
_0223938C: .word 0x04000540
_02239390: .word 0xBFFF0000
-_02239394: .word UNK_021064B8
-_02239398: .word UNK_021064C0
+_02239394: .word NNS_GfdDefaultFuncAllocTexVram
+_02239398: .word NNS_GfdDefaultFuncAllocPlttVram
_0223939C: .word 0x7FFF0000
_022393A0: .word 0xFFFF0000
thumb_func_end MOD81_022392D8
@@ -2829,9 +2829,9 @@ MOD81_022393F4: ; 0x022393F4
mov r3, #8
bl MOD81_0223874C
add r0, sp, #0x5c
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
add r0, sp, #0x38
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
@@ -3962,7 +3962,7 @@ MOD81_02239CDC: ; 0x02239CDC
push {r4, lr}
sub sp, #0x10
add r4, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _02239DBC ; =0x04000060
ldr r1, _02239DC0 ; =0xFFFFCFFD
@@ -4006,11 +4006,11 @@ MOD81_02239CDC: ; 0x02239CDC
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -4099,9 +4099,9 @@ MOD81_02239E00: ; 0x02239E00
mov r3, #0xc
bl MOD81_0223874C
add r0, sp, #0x60
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
add r0, sp, #0x3c
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
@@ -5879,7 +5879,7 @@ MOD81_0223ABD8: ; 0x0223ABD8
push {r3, r4, lr}
sub sp, #0x24
add r4, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _0223ACAC ; =0x04000060
ldr r1, _0223ACB0 ; =0xFFFFCFFD
@@ -5923,11 +5923,11 @@ MOD81_0223ABD8: ; 0x0223ABD8
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -6006,9 +6006,9 @@ MOD81_0223ACE8: ; 0x0223ACE8
mov r3, #8
bl MOD81_0223874C
add r0, sp, #0x5c
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
add r0, sp, #0x38
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
@@ -7391,7 +7391,7 @@ MOD81_0223B7E8: ; 0x0223B7E8
push {r3, r4, lr}
sub sp, #0x24
add r4, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _0223B8C8 ; =0x04000060
ldr r1, _0223B8CC ; =0xFFFFCFFD
@@ -7435,11 +7435,11 @@ MOD81_0223B7E8: ; 0x0223B7E8
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -7525,9 +7525,9 @@ MOD81_0223B908: ; 0x0223B908
mov r3, #8
bl MOD81_0223874C
add r0, sp, #0x5c
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
add r0, sp, #0x38
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
@@ -8643,7 +8643,7 @@ MOD81_0223C1DC: ; 0x0223C1DC
push {r4, lr}
sub sp, #0x10
add r4, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _0223C2C0 ; =0x04000060
ldr r1, _0223C2C4 ; =0xFFFFCFFD
@@ -8687,11 +8687,11 @@ MOD81_0223C1DC: ; 0x0223C1DC
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -9177,9 +9177,9 @@ MOD81_0223C60C: ; 0x0223C60C
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
- bl FUN_020BB394
- bl FUN_020B02C8
+ bl NNS_G3dGeBufferOP_N
+ bl NNS_G3dGeFlushBuffer
+ bl NNS_G2dSetupSoftwareSpriteCamera
ldr r0, [r4, #0x10]
bl FUN_020081C4
ldr r0, [r4, #0x10]
@@ -9188,7 +9188,7 @@ MOD81_0223C60C: ; 0x0223C60C
str r2, [sp]
mov r0, #0x12
add r1, sp, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
ldr r0, [r4, #0x60]
cmp r0, #0
beq _0223C64A
@@ -9746,7 +9746,7 @@ MOD81_0223CAC4: ; 0x0223CAC4
push {r3, r4, r5, r6, lr}
sub sp, #4
add r5, r0, #0
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _0223CB6C ; =0x04000060
ldr r2, _0223CB70 ; =0xFFFFCFFD
@@ -9782,19 +9782,19 @@ MOD81_0223CAC4: ; 0x0223CAC4
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
- ldr r3, _0223CB80 ; =UNK_021064B8
+ bl NNS_GfdInitFrmPlttVramManager
+ ldr r3, _0223CB80 ; =NNS_GfdDefaultFuncAllocTexVram
mov r0, #1
mov r1, #0
ldr r3, [r3]
lsl r0, r0, #0xe
add r2, r1, #0
blx r3
- ldr r3, _0223CB84 ; =UNK_021064C0
+ ldr r3, _0223CB84 ; =NNS_GfdDefaultFuncAllocPlttVram
add r4, r0, #0
ldr r3, [r3]
mov r0, #0x80
@@ -9826,8 +9826,8 @@ _0223CB70: .word 0xFFFFCFFD
_0223CB74: .word 0x0000CFFB
_0223CB78: .word 0x04000540
_0223CB7C: .word 0xBFFF0000
-_0223CB80: .word UNK_021064B8
-_0223CB84: .word UNK_021064C0
+_0223CB80: .word NNS_GfdDefaultFuncAllocTexVram
+_0223CB84: .word NNS_GfdDefaultFuncAllocPlttVram
_0223CB88: .word 0x7FFF0000
_0223CB8C: .word 0xFFFF0000
thumb_func_end MOD81_0223CAC4
@@ -9881,9 +9881,9 @@ MOD81_0223CBE0: ; 0x0223CBE0
mov r3, #8
bl MOD81_0223874C
add r0, sp, #0x5c
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
add r0, sp, #0x38
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r3, #0
str r3, [sp]
mov r2, #1
diff --git a/arm9/modules/82/asm/module_82.s b/arm9/modules/82/asm/module_82.s
index 6af5c444..7b00d33a 100644
--- a/arm9/modules/82/asm/module_82.s
+++ b/arm9/modules/82/asm/module_82.s
@@ -715,7 +715,7 @@ _0222DA48:
mov r1, #2
lsl r1, r1, #0x10
mov r2, #0
- bl tempName_NNS_FndCreateExpHeapEx
+ bl NNS_FndCreateExpHeapEx
str r0, [r4, #0x28]
mov r0, #1
str r0, [r5]
@@ -984,7 +984,7 @@ MOD82_0222DD54: ; 0x0222DD54
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r6, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
@@ -1256,7 +1256,7 @@ MOD82_0222DF74: ; 0x0222DF74
add r1, r5, #0
ldr r0, [r0, #4]
add r2, r4, #0
- bl tempName_NNS_FndAllocFromExpHeapEx
+ bl NNS_FndAllocFromExpHeapEx
add r4, r0, #0
add r0, r6, #0
bl OS_RestoreInterrupts
@@ -1276,7 +1276,7 @@ MOD82_0222DF9C: ; 0x0222DF9C
ldr r0, _0222DFBC ; =0x0222FC0C
add r1, r5, #0
ldr r0, [r0, #4]
- bl FUN_020ADDF0
+ bl NNS_FndFreeToExpHeap
add r0, r4, #0
bl OS_RestoreInterrupts
_0222DFB8:
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index 233b529a..f067a6f1 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -9385,7 +9385,7 @@ MOD83_022320D8: ; 0x022320D8
bl UncompressFromNarc
add r1, sp, #4
add r7, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r0, _02232114 ; =0x0000299C
ldr r2, [sp, #4]
lsl r1, r4, #0x18
@@ -15684,7 +15684,7 @@ MOD83_022350EC: ; 0x022350EC
push {r4, r5, r6, r7, lr}
sub sp, #0x14
add r6, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
@@ -15971,7 +15971,7 @@ MOD83_022352FC: ; 0x022352FC
bl ReadWholeNarcMemberByIdPair
add r0, r4, #0
add r1, r7, #0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
cmp r0, #0
bne _02235330
add r0, r4, #0
@@ -15994,7 +15994,7 @@ MOD83_02235334: ; 0x02235334
bl NARC_ReadWholeMember
add r0, r4, #0
add r1, r5, #0
- bl FUN_020B0030
+ bl NNS_G2dGetUnpackedBGCharacterData
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_end MOD83_02235334
@@ -23333,7 +23333,7 @@ MOD83_02238B4C: ; 0x02238B4C
push {r4, r5, r6, r7, lr}
sub sp, #0x14
ldr r6, _02238BB4 ; =MOD83_0223BC30
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x7e
@@ -24223,7 +24223,7 @@ MOD83_022391EC: ; 0x022391EC
bl UncompressFromNarc
add r1, sp, #0x14
str r0, [sp, #0x10]
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
ldr r2, [sp, #0x14]
mov r3, #6
add r0, r5, #0
diff --git a/arm9/modules/84/asm/module_84_thumb1.s b/arm9/modules/84/asm/module_84_thumb1.s
index 53dfe036..2f29a2a9 100644
--- a/arm9/modules/84/asm/module_84_thumb1.s
+++ b/arm9/modules/84/asm/module_84_thumb1.s
@@ -55,7 +55,7 @@ _021D7516:
str r0, [r4, #0x18]
mov r0, #0
str r0, [r4, #0x1c]
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -727,7 +727,7 @@ MOD84_021D7AB8: ; 0x021D7AB8
thumb_func_start MOD84_021D7AC8
MOD84_021D7AC8: ; 0x021D7AC8
push {r3, lr}
- bl FUN_020BB7F4
+ bl NNS_G3dInit
bl G3X_InitMtxStack
ldr r0, _021D7B3C ; =0x04000060
ldr r2, _021D7B40 ; =0xFFFFCFFD
@@ -761,11 +761,11 @@ MOD84_021D7AC8: ; 0x021D7AC8
str r0, [r1, #0x40]
mov r0, #1
add r1, r0, #0
- bl FUN_020AEB70
+ bl NNS_GfdInitFrmTexVramManager
mov r0, #1
lsl r0, r0, #0xe
mov r1, #1
- bl FUN_020AEDF4
+ bl NNS_GfdInitFrmPlttVramManager
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -899,7 +899,7 @@ MOD84_021D7BC8: ; 0x021D7BC8
add r0, #0x98
strh r1, [r0]
ldr r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
str r0, [r4, #0x5c]
ldrh r1, [r0, #0xe]
add r1, r0, r1
@@ -907,7 +907,7 @@ MOD84_021D7BC8: ; 0x021D7BC8
add r0, r0, r1
str r0, [r4, #0x60]
ldr r0, [r4]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r4, #0x64]
bl FUN_0201B3C4
ldr r0, [r4]
@@ -916,7 +916,7 @@ MOD84_021D7BC8: ; 0x021D7BC8
add r0, r4, #0
ldr r1, [r4, #0x60]
add r0, #8
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
mov r2, #0
str r2, [sp]
add r0, sp, #8
@@ -937,22 +937,22 @@ MOD84_021D7BC8: ; 0x021D7BC8
bl FUN_02016B20
ldr r0, [r4, #4]
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
add r5, r0, #0
add r0, r4, #0
ldr r2, [r4, #0x60]
add r0, #0x6c
add r1, r5, #0
- bl FUN_020BB8D0
+ bl NNS_G3dAllocAnmObj
str r0, [r4, #0x68]
ldr r2, [r4, #0x60]
ldr r3, [r4, #0x64]
add r1, r5, #0
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
add r0, r4, #0
ldr r1, [r4, #0x68]
add r0, #8
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r4, #0
mov r1, #0
add r0, #0x9c
@@ -981,7 +981,7 @@ MOD84_021D7CD4: ; 0x021D7CD4
add r0, r4, #0
ldr r1, [r4, #0x68]
add r0, #0x6c
- bl thunk_FUN_020ae84c
+ bl NNS_G3dFreeAnmObj
ldr r0, [r4, #4]
bl FreeToHeap
_021D7CF0:
@@ -1002,7 +1002,7 @@ MOD84_021D7CFC: ; 0x021D7CFC
mov r1, #0
mov r0, #0x11
add r2, r1, #0
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
bl FUN_0201EBA4
add r4, #0x38
add r0, sp, #0x28
@@ -1010,7 +1010,7 @@ MOD84_021D7CFC: ; 0x021D7CFC
add r0, r4, #0
add r0, #0x94
ldrh r0, [r0]
- ldr r3, _021D7DF0 ; =UNK_020FFA38
+ ldr r3, _021D7DF0 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1027,7 +1027,7 @@ MOD84_021D7CFC: ; 0x021D7CFC
add r0, r4, #0
add r0, #0x96
ldrh r0, [r0]
- ldr r3, _021D7DF0 ; =UNK_020FFA38
+ ldr r3, _021D7DF0 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1044,7 +1044,7 @@ MOD84_021D7CFC: ; 0x021D7CFC
add r0, r4, #0
add r0, #0x98
ldrh r0, [r0]
- ldr r3, _021D7DF0 ; =UNK_020FFA38
+ ldr r3, _021D7DF0 ; =FX_SinCosTable_
asr r0, r0, #4
lsl r2, r0, #1
lsl r1, r2, #1
@@ -1098,14 +1098,14 @@ _021D7DBA:
mov r0, #0x12
add r1, sp, #0
str r2, [sp]
- bl FUN_020BB1C0
+ bl NNS_G3dGeBufferOP_N
mov r0, #0
mov r1, #1
bl FUN_020222B4
add sp, #0x4c
pop {r3, r4, pc}
nop
-_021D7DF0: .word UNK_020FFA38
+_021D7DF0: .word FX_SinCosTable_
thumb_func_end MOD84_021D7CFC
thumb_func_start MOD84_021D7DF4
@@ -1168,7 +1168,7 @@ _021D7E08:
add r0, #0x98
strh r1, [r0]
ldr r0, [r4]
- bl FUN_020BC13C
+ bl NNS_G3dGetMdlSet
str r0, [r4, #0x5c]
ldrh r1, [r0, #0xe]
add r1, r0, r1
@@ -1176,7 +1176,7 @@ _021D7E08:
add r0, r0, r1
str r0, [r4, #0x60]
ldr r0, [r4]
- bl FUN_020BC0FC
+ bl NNS_G3dGetTex
str r0, [r4, #0x64]
bl FUN_0201B3C4
ldr r0, [r4]
@@ -1185,22 +1185,22 @@ _021D7E08:
add r0, r4, #0
ldr r1, [r4, #0x60]
add r0, #8
- bl FUN_020B80B4
+ bl NNS_G3dRenderObjInit
_021D7E9A:
ldr r0, [r4, #4]
cmp r0, #0
beq _021D7ED0
mov r1, #0
- bl FUN_020BC4C8
+ bl NNS_G3dGetAnmByIdx
add r1, r0, #0
ldr r0, [r4, #0x68]
ldr r2, [r4, #0x60]
ldr r3, [r4, #0x64]
- bl FUN_020B8110
+ bl NNS_G3dAnmObjInit
add r0, r4, #0
ldr r1, [r4, #0x68]
add r0, #8
- bl FUN_020B7EFC
+ bl NNS_G3dRenderObjAddAnmObj
add r0, r4, #0
mov r1, #0
add r0, #0x9c
@@ -1227,27 +1227,27 @@ MOD84_021D7EDC: ; 0x021D7EDC
mov r0, #0x82
lsl r0, r0, #2
add r0, r5, r0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r0, #0x8b
lsl r0, r0, #2
add r0, r5, r0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r0, #0x25
lsl r0, r0, #4
add r0, r5, r0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r0, #0x9d
lsl r0, r0, #2
add r0, r5, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0xa2
lsl r0, r0, #2
add r0, r5, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0xa7
lsl r0, r0, #2
add r0, r5, r0
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
ldr r0, [r5, #0x18]
ldr r0, [r0]
cmp r0, #1
diff --git a/arm9/modules/84/asm/module_84_thumb2.s b/arm9/modules/84/asm/module_84_thumb2.s
index 82d292c6..6a42cff9 100644
--- a/arm9/modules/84/asm/module_84_thumb2.s
+++ b/arm9/modules/84/asm/module_84_thumb2.s
@@ -1836,10 +1836,10 @@ _021D8ECE:
_021D8EF2:
add r0, r4, #0
add r0, #0x10
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, r4, #0
add r0, #0x34
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r2, #0
str r2, [sp]
mov r0, #1
@@ -1922,12 +1922,12 @@ _021D8F86:
lsr r7, r5, #1
_021D8FA6:
add r0, r4, #0
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
ldr r0, [sp, #0x20]
add r1, r5, #0
mov r2, #1
add r3, r4, #0
- bl FUN_020B1768
+ bl NNS_G2dLoadImage1DMapping
add r6, r6, #1
add r4, #0x24
add r5, r5, r7
@@ -3164,7 +3164,7 @@ _021D995A:
str r0, [r4, #0x48]
add r0, r4, #0
add r0, #0x10
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
mov r2, #0
str r2, [sp]
mov r0, #1
@@ -3181,7 +3181,7 @@ _021D995A:
bl FUN_02006AE4
add r0, r4, #0
add r0, #0x34
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r0, #0x4b
str r0, [sp]
add r0, r4, #0
@@ -4259,10 +4259,10 @@ _021DA1E2:
str r0, [r4, #0x54]
add r0, r4, #0
add r0, #0x1c
- bl FUN_020B1A24
+ bl NNS_G2dInitImageProxy
add r0, r4, #0
add r0, #0x40
- bl FUN_020B19DC
+ bl NNS_G2dInitImagePaletteProxy
mov r2, #0
str r2, [sp]
mov r0, #1
diff --git a/arm9/modules/85/asm/module_85.s b/arm9/modules/85/asm/module_85.s
index a7798340..bad84718 100644
--- a/arm9/modules/85/asm/module_85.s
+++ b/arm9/modules/85/asm/module_85.s
@@ -570,7 +570,7 @@ MOD85_021D797C: ; 0x021D797C
ldr r1, _021D7B1C ; =0x00000448
add r5, r0, #0
add r1, r4, r1
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r1, _021D7B1C ; =0x00000448
mov r2, #0x1a
ldr r1, [r4, r1]
@@ -588,7 +588,7 @@ MOD85_021D797C: ; 0x021D797C
ldr r1, _021D7B20 ; =0x00000444
add r5, r0, #0
add r1, r4, r1
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, _021D7B20 ; =0x00000444
mov r1, #0
ldr r3, [r4, r0]
@@ -609,7 +609,7 @@ MOD85_021D797C: ; 0x021D797C
lsl r1, r1, #6
add r1, r4, r1
add r5, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
mov r0, #0x11
lsl r0, r0, #6
ldr r3, [r4, r0]
@@ -633,7 +633,7 @@ MOD85_021D797C: ; 0x021D797C
ldr r1, _021D7B20 ; =0x00000444
add r5, r0, #0
add r1, r4, r1
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, _021D7B20 ; =0x00000444
mov r1, #0
ldr r3, [r4, r0]
@@ -654,7 +654,7 @@ MOD85_021D797C: ; 0x021D797C
lsl r1, r1, #6
add r1, r4, r1
add r5, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
mov r0, #0x11
lsl r0, r0, #6
ldr r3, [r4, r0]
@@ -678,7 +678,7 @@ MOD85_021D797C: ; 0x021D797C
ldr r1, _021D7B1C ; =0x00000448
add r5, r0, #0
add r1, r4, r1
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r1, _021D7B1C ; =0x00000448
mov r2, #0x1a
ldr r1, [r4, r1]
@@ -696,7 +696,7 @@ MOD85_021D797C: ; 0x021D797C
ldr r1, _021D7B20 ; =0x00000444
add r5, r0, #0
add r1, r4, r1
- bl FUN_020B0088
+ bl NNS_G2dGetUnpackedCharacterData
ldr r0, _021D7B20 ; =0x00000444
mov r1, #0
ldr r3, [r4, r0]
@@ -717,7 +717,7 @@ MOD85_021D797C: ; 0x021D797C
lsl r1, r1, #6
add r1, r4, r1
add r5, r0, #0
- bl FUN_020B0180
+ bl NNS_G2dGetUnpackedScreenData
mov r0, #0x11
lsl r0, r0, #6
ldr r3, [r4, r0]
@@ -933,7 +933,7 @@ MOD85_021D7CB0: ; 0x021D7CB0
push {r3, r4, lr}
sub sp, #0x1c
add r4, r0, #0
- bl FUN_020B0FC0
+ bl NNS_G2dInitOamManagerModule
mov r0, #0
str r0, [sp]
mov r1, #0x80
@@ -8587,7 +8587,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r6, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
ldr r0, [sp]
mov r1, #1
add r2, r4, #4
@@ -8627,7 +8627,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r6, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
add r2, r4, #0
ldr r0, [sp]
mov r1, #0
@@ -8641,7 +8641,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r6, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
add r2, r4, #0
ldr r0, [sp]
mov r1, #0
@@ -8655,7 +8655,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r6, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
add r2, r4, #0
ldr r0, [sp]
mov r1, #0
@@ -8669,7 +8669,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r6, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
mov r2, #0x51
lsl r2, r2, #2
ldr r0, [sp]
@@ -8684,7 +8684,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r6, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
mov r2, #0x59
lsl r2, r2, #2
ldr r0, [sp]
@@ -8705,7 +8705,7 @@ MOD85_021DB494: ; 0x021DB494
bl MOD85_021D8144
add r1, sp, #0
add r5, r0, #0
- bl FUN_020B0138
+ bl NNS_G2dGetUnpackedPaletteData
mov r2, #0x69
lsl r2, r2, #2
ldr r0, [sp]
diff --git a/arm9/src/heap.c b/arm9/src/heap.c
index f28b4f88..7ae25c3b 100644
--- a/arm9/src/heap.c
+++ b/arm9/src/heap.c
@@ -3,14 +3,14 @@
#include "unk_02031734.h"
-extern void *tempName_NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2);
-extern void *tempName_NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2);
-extern void thunk_FUN_020adc8c();
-extern void FUN_020ADDF0(void *ptr1, void *ptr2);
-extern u32 FUN_020ADDC8(void *param0);
-extern void FUN_020AE82C(u32 param0, void *param1, u32 param2);
-extern u32 FUN_020ADDC0(void *param0);
-extern void FUN_020ADE2C(void *ptr1, void *ptr2, u32 param2);
+extern void *NNS_FndCreateExpHeapEx(void *param0, u32 param1, u32 param2);
+extern void *NNS_FndAllocFromExpHeapEx(void *param0, u32 param1, s32 param2);
+extern void NNS_FndDestroyExpHeap();
+extern void NNS_FndFreeToExpHeap(void *ptr1, void *ptr2);
+extern u32 NNS_FndGetTotalFreeSizeForExpHeap(void *param0);
+extern void NNS_FndInitAllocatorForExpHeap(u32 param0, void *param1, u32 param2);
+extern u32 NNS_FndGetSizeForMBlockExpHeap(void *param0);
+extern void NNS_FndResizeForMBlockExpHeap(void *ptr1, void *ptr2, u32 param2);
struct UnkStruct_020166C8 UNK_021C4D28;
@@ -68,7 +68,7 @@ THUMB_FUNC void FUN_020166C8(u32 *param0, u32 param1, u32 param2, u32 pre_size)
if (ptr != 0)
{
- UNK_021C4D28.unk00[r7] = tempName_NNS_FndCreateExpHeapEx(ptr, param0[0], 0);
+ UNK_021C4D28.unk00[r7] = NNS_FndCreateExpHeapEx(ptr, param0[0], 0);
UNK_021C4D28.unk10[r7] = (u8)r7;
}
else
@@ -143,13 +143,13 @@ THUMB_FUNC u32 FUN_02016834(u32 param0, u32 param1, u32 param2, s32 param3)
void *ptr2 = UNK_021C4D28.unk00[ptr[param0]];
if (ptr2 != 0)
{
- void *ptr3 = tempName_NNS_FndAllocFromExpHeapEx(ptr2, param2, param3);
+ void *ptr3 = NNS_FndAllocFromExpHeapEx(ptr2, param2, param3);
if (ptr3 != 0)
{
param3 = FUN_020167F4();
if (param3 >= 0)
{
- UNK_021C4D28.unk00[param3] = tempName_NNS_FndCreateExpHeapEx(ptr3, param2, 0);
+ UNK_021C4D28.unk00[param3] = NNS_FndCreateExpHeapEx(ptr3, param2, 0);
if (UNK_021C4D28.unk00[param3] != 0)
@@ -193,14 +193,14 @@ THUMB_FUNC void FUN_020168D0(u32 heap_id)
if (UNK_021C4D28.unk00[UNK_021C4D28.unk10[heap_id]] != 0)
{
- thunk_FUN_020adc8c();
+ NNS_FndDestroyExpHeap();
u8 index = UNK_021C4D28.unk10[heap_id];
void *ptr1 = UNK_021C4D28.unk04[index];
void *ptr2 = UNK_021C4D28.unk08[index];
if (ptr1 != 0 && ptr2 != 0)
{
- FUN_020ADDF0(ptr1, ptr2);
+ NNS_FndFreeToExpHeap(ptr1, ptr2);
}
else
{
@@ -221,7 +221,7 @@ THUMB_FUNC u32 *FUN_02016944(void *param0, u32 param1, s32 param2, u32 param3)
OSIntrMode intr_mode = OS_DisableInterrupts();
param1 += 16;
- u32 *ptr = (u32 *)tempName_NNS_FndAllocFromExpHeapEx(param0, param1, param2);
+ u32 *ptr = (u32 *)NNS_FndAllocFromExpHeapEx(param0, param1, param2);
OS_RestoreInterrupts(intr_mode);
if (ptr != 0)
@@ -301,7 +301,7 @@ void FreeToHeap(void *ptr)
UNK_021C4D28.unk0c[heap_id]--;
OSIntrMode intr_mode = OS_DisableInterrupts();
- FUN_020ADDF0(ptr2, ptr - 16);
+ NNS_FndFreeToExpHeap(ptr2, ptr - 16);
OS_RestoreInterrupts(intr_mode);
return;
}
@@ -322,7 +322,7 @@ void FreeToHeapExplicit(u32 param0, void *param1)
u8 heap_id = (u8)((u32 *)param1)[-1];
GF_ASSERT (heap_id == param0);
- FUN_020ADDF0(ptr, param1 - 16);
+ NNS_FndFreeToExpHeap(ptr, param1 - 16);
GF_ASSERT (UNK_021C4D28.unk0c[param0]);
UNK_021C4D28.unk0c[param0]--;
@@ -337,7 +337,7 @@ THUMB_FUNC u32 FUN_02016AF8(u32 param0)
if (param0 < UNK_021C4D28.unk14)
{
u8 index = UNK_021C4D28.unk10[param0];
- return FUN_020ADDC8(UNK_021C4D28.unk00[index]);
+ return NNS_FndGetTotalFreeSizeForExpHeap(UNK_021C4D28.unk00[index]);
}
ErrorHandling();
@@ -350,7 +350,7 @@ THUMB_FUNC void FUN_02016B20(u32 param0, u32 param1, u32 param2)
{
u8 index = UNK_021C4D28.unk10[param1];
- FUN_020AE82C(param0, UNK_021C4D28.unk00[index], param2);
+ NNS_FndInitAllocatorForExpHeap(param0, UNK_021C4D28.unk00[index], param2);
return;
}
@@ -362,13 +362,13 @@ THUMB_FUNC void FUN_02016B44(void *ptr, u32 param1)
GF_ASSERT (OS_GetProcMode() != OS_PROCMODE_IRQ);
param1 += 16;
- if (FUN_020ADDC0(ptr - 16) >= param1)
+ if (NNS_FndGetSizeForMBlockExpHeap(ptr - 16) >= param1)
{
u8 heap_id = (u8)((u32 *)ptr)[-1];
u8 index = UNK_021C4D28.unk10[heap_id];
- FUN_020ADE2C(UNK_021C4D28.unk00[index], ptr - 16, param1);
+ NNS_FndResizeForMBlockExpHeap(UNK_021C4D28.unk00[index], ptr - 16, param1);
return;
}
ErrorHandling();
diff --git a/arm9/src/math_util.c b/arm9/src/math_util.c
index 4ecee59c..ac3b77f0 100644
--- a/arm9/src/math_util.c
+++ b/arm9/src/math_util.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "math_util.h"
-extern const s16 UNK_020FFA38[]; // temporary until further notice
+extern const s16 FX_SinCosTable_[]; // temporary until further notice
/*
* Constant tables
@@ -697,8 +697,8 @@ THUMB_FUNC void MTX22_2DAffine(struct Mtx22 * mtx, u16 radians, fx32 x, fx32 y,
radians = (u16)((u32)(radians * 65535) / 360); // shut up the compiler
MTX_Rot22_(mtx,
- UNK_020FFA38[((radians >> 4) * 2)], // TODO: macros
- UNK_020FFA38[((radians >> 4) * 2) + 1]); // TODO: macros
+ FX_SinCosTable_[((radians >> 4) * 2)], // TODO: macros
+ FX_SinCosTable_[((radians >> 4) * 2) + 1]); // TODO: macros
MTX_ScaleApply22(mtx, mtx, x, y);
}
diff --git a/arm9/src/sound.c b/arm9/src/sound.c
index a1e31bbd..95d14c64 100644
--- a/arm9/src/sound.c
+++ b/arm9/src/sound.c
@@ -6,7 +6,8 @@
#pragma thumb on
static struct SoundData sSoundDataBuffer;
-static u32 UNK_02107070[2];
+static u32 UNK_02107070;
+static u32 UNK_02107074;
void FUN_02003C40(void);
BOOL FUN_02003D04(void);
@@ -28,15 +29,15 @@ extern void FUN_02005CFC(void);
void InitSoundData(void * a0, struct Options * a1)
{
struct SoundData * sdat = GetSoundDataPointer();
- SDAT_Init();
+ NNS_SndInit();
FUN_020040C8();
FUN_02004064(sdat);
- sdat->unk_00090 = FUN_020C2A94(sdat->unk_00094, sizeof(sdat->unk_00094));
- SDAT_Open(&sdat->header, "data/sound/sound_data.sdat", sdat->unk_00090, 0);
- FUN_020C39CC(sdat->unk_00090);
+ sdat->heap = NNS_SndHeapCreate(sdat->unk_00094, sizeof(sdat->unk_00094));
+ NNS_SndArcInit(&sdat->header, "data/sound/sound_data.sdat", sdat->heap, 0);
+ NNS_SndArcPlayerSetup(sdat->heap);
FUN_02004088(sdat);
FUN_020040A4(sdat);
- UNK_02107070[1] = 0;
+ UNK_02107074 = 0;
sdat->unk_BCD4C = a0;
FUN_02004D60(a1->soundMethod);
}
@@ -51,13 +52,13 @@ void DoSoundUpdateFrame(void)
FUN_02003C40();
}
FUN_02005CFC();
- FUN_020C01A0();
+ NNS_SndMain();
}
void FUN_02003C40(void)
{
struct SoundData * sdat = GetSoundDataPointer();
- switch (UNK_02107070[0])
+ switch (UNK_02107070)
{
case 1:
FUN_02003CE8(2);
@@ -92,7 +93,7 @@ void FUN_02003CE8(int a0)
{
struct SoundData * sdat = GetSoundDataPointer();
sdat->unk_BCCFC = 0;
- UNK_02107070[0] = (u32)a0;
+ UNK_02107070 = (u32)a0;
}
BOOL FUN_02003D04(void)
@@ -202,7 +203,7 @@ void * FUN_02003D38(u32 a0)
int FUN_02003F3C(int * a0)
{
struct SoundData * sdat = GetSoundDataPointer();
- int r4 = FUN_020C290C(sdat->unk_00090);
+ int r4 = NNS_SndHeapSaveState(sdat->heap);
GF_ASSERT(r4 != -1);
if (a0 != NULL)
*a0 = r4;
@@ -212,37 +213,37 @@ int FUN_02003F3C(int * a0)
void FUN_02003F64(int a0)
{
struct SoundData * sdat = GetSoundDataPointer();
- FUN_020C2828(sdat->unk_00090, a0);
+ NNS_SndHeapLoadState(sdat->heap, a0);
}
-BOOL FUN_02003F78(u32 * a0)
+BOOL FUN_02003F78(int a0)
{
struct SoundData * sdat = GetSoundDataPointer();
- return FUN_020C36A8(a0, sdat->unk_00090);
+ return NNS_SndArcLoadGroup(a0, sdat->heap);
}
-BOOL FUN_02003F90(u32 * a0)
+BOOL FUN_02003F90(int a0)
{
struct SoundData * sdat = GetSoundDataPointer();
- return FUN_020C3674(a0, sdat->unk_00090);
+ return NNS_SndArcLoadSeq(a0, sdat->heap);
}
-BOOL FUN_02003FA8(u32 * a0, u32 * a1)
+BOOL FUN_02003FA8(int a0, u32 a1)
{
struct SoundData * sdat = GetSoundDataPointer();
- return FUN_020C35E0(a0, a1, sdat->unk_00090);
+ return NNS_SndArcLoadSeqEx(a0, a1, sdat->heap);
}
-BOOL FUN_02003FC4(u32 * a0)
+BOOL FUN_02003FC4(int a0)
{
struct SoundData * sdat = GetSoundDataPointer();
- return FUN_020C360C(a0, sdat->unk_00090);
+ return NNS_SndArcLoadWaveArc(a0, sdat->heap);
}
-BOOL FUN_02003FDC(u32 * a0)
+BOOL FUN_02003FDC(int a0)
{
struct SoundData * sdat = GetSoundDataPointer();
- return FUN_020C3640(a0, sdat->unk_00090);
+ return NNS_SndArcLoadBank(a0, sdat->heap);
}
u32 * FUN_02003FF4(int a0)
@@ -295,14 +296,14 @@ void FUN_02004088(struct SoundData * sdat)
int i;
for (i = 0; i < 9; i++)
{
- FUN_020C0F80(&sdat->unk_BBC94[i]);
+ NNS_SndHandleInit(&sdat->unk_BBC94[i]);
}
}
void FUN_020040A4(struct SoundData * sdat)
{
FUN_02003F3C(&sdat->unk_BCD1C[0]);
- FUN_02003F78(NULL);
+ FUN_02003F78(0);
FUN_02003F3C(&sdat->unk_BCD1C[1]);
}
@@ -315,7 +316,7 @@ void FUN_020040C8(void)
void FUN_020040DC(void)
{
- FUN_020C1040(7, 0);
+ NNS_SndPlayerStopSeqByPlayerNo(7, 0);
FUN_02003FF4(7);
- FUN_020C0F68();
+ NNS_SndHandleReleaseSeq();
}
diff --git a/arm9/src/unk_02016B94.c b/arm9/src/unk_02016B94.c
index 4183087b..a8be5958 100644
--- a/arm9/src/unk_02016B94.c
+++ b/arm9/src/unk_02016B94.c
@@ -5,8 +5,8 @@
#include "gx.h"
#include "heap.h"
-extern void FUN_020B0030(void *param0, u32 *param1);
-extern void FUN_020B0138(void *param0, u32 *param1);
+extern void NNS_G2dGetUnpackedBGCharacterData(void *param0, u32 *param1);
+extern void NNS_G2dGetUnpackedPaletteData(void *param0, u32 *param1);
const u8 UNK_020EDB30[8] = {
0x10,
@@ -7747,7 +7747,7 @@ THUMB_FUNC u32 FUN_0201AB28(struct Window *window, u32 heap_id, const char *path
void *ptr = FUN_020161A4(heap_id, path);
window->unk00 = ptr;
u32 st0;
- FUN_020B0030(ptr, &st0);
+ NNS_G2dGetUnpackedBGCharacterData(ptr, &st0);
return st0;
}
@@ -7757,7 +7757,7 @@ THUMB_FUNC u32 FUN_0201AB44(struct Window *window, u32 heap_id, const char *path
void *ptr = FUN_020161A4(heap_id, path);
window->unk00 = ptr;
u32 st0;
- FUN_020B0138(ptr, &st0);
+ NNS_G2dGetUnpackedPaletteData(ptr, &st0);
return st0;
}
diff --git a/include/sdat.h b/include/sdat.h
deleted file mode 100644
index 3ba8583c..00000000
--- a/include/sdat.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef GUARD_LIBSDAT_H
-#define GUARD_LIBSDAT_H
-
-struct SDATHeader
-{
- // Generic header
- char magic[4];
- u16 bom;
- u16 version;
- u32 filesize;
- u16 header_size;
- u16 section_count;
- // SDAT chunks
- u32 symb_offset, symb_size;
- u32 info_offset, info_size;
- u32 fat_offset, fat_size;
- u32 file_offset, file_size;
-};
-
-struct SDATFileMgr
-{
- struct SDATHeader header;
- BOOL is_init;
- FSFile file; // 00034
- FSFileID fileID; // 7C
- void * fat_p;
- void * symb_p;
- void * info_p;
-};
-
-void SDAT_Init(void);
-void * FUN_020C2A94(void *, u32);
-void SDAT_Open(struct SDATFileMgr *, char *, void *, u32);
-void FUN_020C39CC(void *);
-void FUN_020C01A0(void);
-int FUN_020C290C(void *);
-void FUN_020C2828(void *, int);
-BOOL FUN_020C36A8(u32 *, void *);
-BOOL FUN_020C3674(u32 *, void *);
-BOOL FUN_020C35E0(u32 *, u32 *, void *);
-BOOL FUN_020C360C(u32 *, void *);
-BOOL FUN_020C3640(u32 *, void *);
-void FUN_020C0F80(u32 *);
-void FUN_020C1040(int, int);
-void FUN_020C0F68(void);
-
-#endif //GUARD_LIBSDAT_H
diff --git a/include/sound.h b/include/sound.h
index 9b50542f..9e171634 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -2,13 +2,15 @@
#define POKEDIAMOND_SOUND_H
#include "FS_file.h"
-#include "sdat.h"
+#include "NNS_SND_arc.h"
+#include "NNS_SND_heap.h"
+#include "NNS_SND_arc_loader.h"
#include "player_data.h"
struct SoundData
{
- struct SDATFileMgr header;
- void * unk_00090;
+ NNSSndArc header;
+ NNSSndHeapHandle * heap; // 0x00090
u8 unk_00094[0xBBC00];
u32 unk_BBC94[9];
u32 unk_BBCB8;
@@ -54,11 +56,11 @@ void InitSoundData(void * a0, struct Options * a1);
void * FUN_02003D38(u32 a0);
int FUN_02003F3C(int * a0);
void FUN_02003F64(int a0);
-BOOL FUN_02003F78(u32 * a0);
-BOOL FUN_02003F90(u32 * a0);
-BOOL FUN_02003FA8(u32 * a0, u32 * a1);
-BOOL FUN_02003FC4(u32 * a0);
-BOOL FUN_02003FDC(u32 * a0);
+BOOL FUN_02003F78(int a0);
+BOOL FUN_02003F90(int a0);
+BOOL FUN_02003FA8(int a0, u32 a1);
+BOOL FUN_02003FC4(int a0);
+BOOL FUN_02003FDC(int a0);
u32 * FUN_02003FF4(int a0);
u32 FUN_02004018(u32 a0);
void DoSoundUpdateFrame(void);