summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf28
-rw-r--r--arm9/global.inc5
-rw-r--r--arm9/modules/64/asm/module_64.s3582
3 files changed, 3611 insertions, 4 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index 47df3931..c0bda60d 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -2545,12 +2545,23 @@ SECTIONS {
SDK_OVERLAY.MODULE_63.BSS_SIZE = SDK_OVERLAY.MODULE_63.BSS_END - SDK_OVERLAY.MODULE_63.BSS_START;
} >> MODULE_63
- .MODULE_64: {
+ .MODULE_64 :
+ {
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY_MODULE_64_ID = 64;
SDK_OVERLAY.MODULE_64.ID = 64;
SDK_OVERLAY.MODULE_64.START = .;
- FILE_2B7600.o (.text) /* 0x2B3600 */
+ module_64.o (.text)
+ module_64.o (.rodata)
+ module_64.o (.init)
+ SDK_OVERLAY.MODULE_64.SINIT_START = .;
+ module_64.o (.ctor)
+ module_64.o (.sinit)
+ WRITEW 0;
+ SDK_OVERLAY.MODULE_64.SINIT_END = .;
+ . = ALIGN(32);
+ module_64.o (.sdata)
+ module_64.o (.data)
. = ALIGN(32);
SDK_OVERLAY.MODULE_64.END = .;
SDK_OVERLAY.MODULE_64.SIZE = SDK_OVERLAY.MODULE_64.END - SDK_OVERLAY.MODULE_64.START;
@@ -2560,7 +2571,8 @@ SECTIONS {
{
ALIGNALL(4); . = ALIGN(32);
SDK_OVERLAY.MODULE_64.BSS_START = .;
- FILE_2B7600.o (.bss)
+ module_64.o (.bss)
+ module_64.o (.sbss)
. = ALIGN(32);
SDK_OVERLAY.MODULE_64.BSS_END = .;
SDK_OVERLAY.MODULE_64.BSS_SIZE = SDK_OVERLAY.MODULE_64.BSS_END - SDK_OVERLAY.MODULE_64.BSS_START;
@@ -3729,7 +3741,15 @@ SECTIONS {
WRITEW 63;
WRITEW 0;
- OVERLAY_TABLE(MODULE_64, 64)
+ WRITEW 64;
+ WRITEW ADDR(.MODULE_64);
+ WRITEW SDK_OVERLAY.MODULE_64.SIZE;
+ WRITEW SDK_OVERLAY.MODULE_64.BSS_SIZE;
+ WRITEW SDK_OVERLAY.MODULE_64.SINIT_START;
+ WRITEW SDK_OVERLAY.MODULE_64.SINIT_END;
+ WRITEW 64;
+ WRITEW 0;
+
OVERLAY_TABLE(MODULE_65, 65)
OVERLAY_TABLE(MODULE_66, 66)
OVERLAY_TABLE(MODULE_67, 67)
diff --git a/arm9/global.inc b/arm9/global.inc
index 60facaee..5d4f69d7 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -2637,6 +2637,11 @@
.extern FUN_020C1F54
.extern FUN_020C1FA4
.extern FUN_020C1FF0
+.extern FUN_02013EA8
+.extern FUN_02013EC4
+.extern FUN_02013ED8
+.extern FUN_02013EE0
+.extern FUN_0201EC58
.extern FUN_020C20DC
.extern FUN_020C2104
.extern FUN_020C217C
diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s
new file mode 100644
index 00000000..e7d103d1
--- /dev/null
+++ b/arm9/modules/64/asm/module_64.s
@@ -0,0 +1,3582 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD64_021D74E0
+MOD64_021D74E0: ; 0x021D74E0
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ mov r2, #1
+ add r4, r0, #0
+ mov r0, #3
+ mov r1, #0x2f
+ lsl r2, r2, #0x12
+ bl FUN_0201681C
+ ldr r1, _021D7630 ; =0x000006B4
+ add r0, r4, #0
+ mov r2, #0x2f
+ bl FUN_02006268
+ add r5, r0, #0
+ bne _021D7504
+ bl ErrorHandling
+_021D7504:
+ ldr r2, _021D7630 ; =0x000006B4
+ add r0, r5, #0
+ mov r1, #0
+ bl Call_FillMemWithValue
+ mov r0, #0x25
+ lsl r0, r0, #4
+ add r0, r5, r0
+ mov r1, #0x2f
+ mov r2, #0x20
+ bl FUN_02016B20
+ add r0, r4, #0
+ bl FUN_0200628C
+ add r4, r0, #0
+ ldr r0, [r4, #4]
+ bl FUN_02025084
+ ldr r1, _021D7634 ; =0x000006A8
+ str r0, [r5, r1]
+ ldr r0, [r4, #4]
+ bl FUN_02024FF4
+ ldr r1, _021D7638 ; =0x000006AC
+ str r0, [r5, r1]
+ mov r0, #8
+ mov r1, #0x2f
+ bl FUN_0201C24C
+ ldr r0, _021D763C ; =MOD64_021D77A4
+ add r1, r5, #0
+ bl FUN_02015F10
+ bl FUN_02015F1C
+ bl FUN_0201CC08
+ mov r0, #4
+ bl FUN_0201CC24
+ cmp r0, #1
+ beq _021D755E
+ bl ErrorHandling
+_021D755E:
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D7810
+ mov r0, #0x2f
+ bl FUN_02016B94
+ add r1, r5, #0
+ add r1, #0x94
+ str r0, [r1]
+ mov r1, #1
+ mov r0, #0
+ str r0, [sp, #4]
+ add r0, sp, #0
+ str r1, [sp]
+ str r1, [sp, #8]
+ str r1, [sp, #0xc]
+ bl FUN_02016BBC
+ add r0, r5, #0
+ add r0, #0x94
+ ldr r0, [r0]
+ mov r1, #0x2f
+ bl MOD64_021D7970
+ mov r0, #1
+ add r1, r0, #0
+ bl FUN_0201E6E4
+ mov r0, #2
+ mov r1, #0
+ bl FUN_0201E6E4
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D7A54
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D87CC
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D8EF4
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D7B04
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D7C34
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D7C74
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D7F60
+ add r0, r5, #0
+ mov r1, #0x2f
+ bl MOD64_021D824C
+ add r0, r5, #0
+ bl MOD64_021D82CC
+ add r0, r5, #0
+ bl MOD64_021D8354
+ mov r1, #6
+ lsl r1, r1, #8
+ add r0, r5, #0
+ add r1, r5, r1
+ mov r2, #0x2f
+ bl MOD64_021D892C
+ mov r1, #6
+ lsl r1, r1, #8
+ add r0, r5, #0
+ add r1, r5, r1
+ mov r2, #0x2f
+ bl MOD64_021D89FC
+ mov r0, #6
+ lsl r0, r0, #8
+ add r0, r5, r0
+ bl MOD64_021D8AE0
+ mov r0, #0x65
+ lsl r0, r0, #4
+ add r0, r5, r0
+ add r1, r5, #0
+ mov r2, #0x2f
+ bl MOD64_021D8B70
+ mov r1, #0
+ mov r0, #0x3c
+ add r2, r1, #0
+ bl FUN_0200433C
+ mov r0, #1
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D7630: .word 0x000006B4
+_021D7634: .word 0x000006A8
+_021D7638: .word 0x000006AC
+_021D763C: .word MOD64_021D77A4
+ thumb_func_end MOD64_021D74E0
+
+ thumb_func_start MOD64_021D7640
+MOD64_021D7640: ; 0x021D7640
+ push {r3, r4, r5, r6, lr}
+ sub sp, #4
+ add r4, r1, #0
+ bl FUN_02006278
+ ldr r2, _021D76F0 ; =0x000008C3
+ add r1, sp, #0
+ strh r2, [r1]
+ ldr r1, [r4]
+ add r6, r0, #0
+ cmp r1, #4
+ bhi _021D76E2
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_021D7664: ; jump table
+ .short _021D766E - _021D7664 - 2 ; case 0
+ .short _021D7684 - _021D7664 - 2 ; case 1
+ .short _021D76A0 - _021D7664 - 2 ; case 2
+ .short _021D76BC - _021D7664 - 2 ; case 3
+ .short _021D76C8 - _021D7664 - 2 ; case 4
+_021D766E:
+ bl MOD64_021D77C8
+ add r0, sp, #0
+ mov r1, #0
+ mov r2, #2
+ bl GX_LoadBGPltt
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021D76E2
+_021D7684:
+ bl MOD64_021D7808
+ cmp r0, #0
+ beq _021D76E2
+ mov r0, #0
+ bl FUN_0200E388
+ mov r0, #1
+ bl FUN_0200E388
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021D76E2
+_021D76A0:
+ mov r1, #0x2f
+ bl MOD64_021D80A4
+ add r5, r0, #0
+ add r0, r6, #0
+ mov r1, #0x2f
+ bl MOD64_021D8100
+ cmp r5, #1
+ bne _021D76E2
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021D76E2
+_021D76BC:
+ bl MOD64_021D77E8
+ ldr r0, [r4]
+ add r0, r0, #1
+ str r0, [r4]
+ b _021D76E2
+_021D76C8:
+ bl MOD64_021D7808
+ cmp r0, #0
+ beq _021D76E2
+ mov r0, #0
+ bl FUN_0200E388
+ mov r0, #1
+ bl FUN_0200E388
+ add sp, #4
+ mov r0, #1
+ pop {r3, r4, r5, r6, pc}
+_021D76E2:
+ add r0, r6, #0
+ bl MOD64_021D81D8
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, r5, r6, pc}
+ nop
+_021D76F0: .word 0x000008C3
+ thumb_func_end MOD64_021D7640
+
+ thumb_func_start MOD64_021D76F4
+MOD64_021D76F4: ; 0x021D76F4
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ bl FUN_02006278
+ add r4, r0, #0
+ add r0, r5, #0
+ bl FUN_0200628C
+ add r6, r0, #0
+ mov r0, #0
+ add r1, r0, #0
+ bl FUN_02015F10
+ ldr r0, [r4, #0x54]
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ bl MOD64_021D9044
+ str r0, [r6]
+ bl FUN_0201CD04
+ cmp r0, #1
+ beq _021D7726
+ bl ErrorHandling
+_021D7726:
+ mov r0, #0x65
+ lsl r0, r0, #4
+ add r0, r4, r0
+ bl MOD64_021D8C0C
+ mov r0, #6
+ lsl r0, r0, #8
+ add r0, r4, r0
+ bl MOD64_021D8A78
+ mov r1, #6
+ lsl r1, r1, #8
+ add r0, r4, #0
+ add r1, r4, r1
+ bl MOD64_021D89B8
+ mov r0, #6
+ lsl r0, r0, #8
+ add r0, r4, r0
+ bl MOD64_021D8B44
+ add r0, r4, #0
+ bl MOD64_021D82BC
+ add r0, r4, #0
+ bl MOD64_021D8034
+ add r0, r4, #0
+ bl MOD64_021D7CE0
+ add r0, r4, #0
+ bl MOD64_021D7C08
+ add r0, r4, #0
+ bl MOD64_021D7C64
+ add r0, r4, #0
+ bl MOD64_021D7AEC
+ add r0, r4, #0
+ bl MOD64_021D8FAC
+ add r0, r4, #0
+ add r0, #0x94
+ ldr r0, [r0]
+ bl MOD64_021D7A38
+ add r4, #0x94
+ ldr r0, [r4]
+ bl FUN_02016A18
+ bl MOD64_021D7828
+ bl FUN_0201C29C
+ add r0, r5, #0
+ bl FUN_0200627C
+ mov r0, #0x2f
+ bl FUN_020168D0
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD64_021D76F4
+
+ thumb_func_start MOD64_021D77A4
+MOD64_021D77A4: ; 0x021D77A4
+ push {r4, lr}
+ add r4, r0, #0
+ bl FUN_02009F80
+ add r0, r4, #0
+ add r0, #0x94
+ ldr r0, [r0]
+ bl FUN_0201AB60
+ mov r0, #2
+ lsl r0, r0, #8
+ ldr r0, [r4, r0]
+ bl FUN_020081C4
+ bl FUN_0201C30C
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D77A4
+
+ thumb_func_start MOD64_021D77C8
+MOD64_021D77C8: ; 0x021D77C8
+ push {lr}
+ sub sp, #0xc
+ mov r0, #6
+ str r0, [sp]
+ mov r1, #1
+ str r1, [sp, #4]
+ mov r0, #0x2f
+ str r0, [sp, #8]
+ mov r0, #0
+ add r2, r1, #0
+ add r3, r0, #0
+ bl FUN_0200E1D0
+ add sp, #0xc
+ pop {pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D77C8
+
+ thumb_func_start MOD64_021D77E8
+MOD64_021D77E8: ; 0x021D77E8
+ push {lr}
+ sub sp, #0xc
+ mov r0, #6
+ str r0, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ mov r0, #0x2f
+ str r0, [sp, #8]
+ mov r0, #0
+ add r1, r0, #0
+ add r2, r0, #0
+ add r3, r0, #0
+ bl FUN_0200E1D0
+ add sp, #0xc
+ pop {pc}
+ thumb_func_end MOD64_021D77E8
+
+ thumb_func_start MOD64_021D7808
+MOD64_021D7808: ; 0x021D7808
+ ldr r3, _021D780C ; =0x0200E309
+ bx r3
+ .align 2, 0
+_021D780C: .word 0x0200E309
+ thumb_func_end MOD64_021D7808
+
+ thumb_func_start MOD64_021D7810
+MOD64_021D7810: ; 0x021D7810
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ bl MOD64_021D783C
+ add r0, r4, #0
+ bl MOD64_021D785C
+ add r0, r5, #0
+ bl MOD64_021D78B4
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD64_021D7810
+
+ thumb_func_start MOD64_021D7828
+MOD64_021D7828: ; 0x021D7828
+ push {r3, lr}
+ bl FUN_02009FA0
+ bl FUN_0201D12C
+ bl FUN_0201E08C
+ bl MOD64_021D7964
+ pop {r3, pc}
+ thumb_func_end MOD64_021D7828
+
+ thumb_func_start MOD64_021D783C
+MOD64_021D783C: ; 0x021D783C
+ push {r4, lr}
+ sub sp, #0x28
+ ldr r4, _021D7858 ; =0x021D90E8
+ add r3, sp, #0
+ mov r2, #5
+_021D7846:
+ ldmia r4!, {r0, r1}
+ stmia r3!, {r0, r1}
+ sub r2, r2, #1
+ bne _021D7846
+ add r0, sp, #0
+ bl FUN_0201E66C
+ add sp, #0x28
+ pop {r4, pc}
+ .align 2, 0
+_021D7858: .word 0x021D90E8
+ thumb_func_end MOD64_021D783C
+
+ thumb_func_start MOD64_021D785C
+MOD64_021D785C: ; 0x021D785C
+ push {r4, r5, lr}
+ sub sp, #0x24
+ add r4, r0, #0
+ bl FUN_020B0FC0
+ mov r0, #0
+ str r0, [sp]
+ mov r1, #0x80
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r3, #0x20
+ str r3, [sp, #0xc]
+ add r2, r0, #0
+ str r4, [sp, #0x10]
+ bl FUN_02009EAC
+ ldr r5, _021D78AC ; =0x021D9074
+ add r3, sp, #0x14
+ add r2, r3, #0
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ add r0, r2, #0
+ ldr r1, _021D78B0 ; =0x00200010
+ mov r2, #0x10
+ str r4, [sp, #0x20]
+ bl FUN_0201D060
+ mov r0, #0x20
+ add r1, r4, #0
+ bl FUN_0201E00C
+ bl FUN_0201D168
+ bl FUN_0201E0BC
+ add sp, #0x24
+ pop {r4, r5, pc}
+ nop
+_021D78AC: .word 0x021D9074
+_021D78B0: .word 0x00200010
+ thumb_func_end MOD64_021D785C
+
+ thumb_func_start MOD64_021D78B4
+MOD64_021D78B4: ; 0x021D78B4
+ push {r3, r4, lr}
+ sub sp, #4
+ add r4, r0, #0
+ bl FUN_020BB7F4
+ bl G3X_InitMtxStack
+ ldr r0, _021D7940 ; =0x04000060
+ ldr r1, _021D7944 ; =0xFFFFCFFD
+ ldrh r2, [r0]
+ and r2, r1
+ strh r2, [r0]
+ ldrh r3, [r0]
+ add r2, r1, #2
+ and r3, r2
+ mov r2, #0x10
+ orr r2, r3
+ strh r2, [r0]
+ ldrh r3, [r0]
+ ldr r2, _021D7948 ; =0x0000CFFB
+ and r2, r3
+ strh r2, [r0]
+ add r2, r1, #2
+ ldrh r3, [r0]
+ add r1, r1, #2
+ and r3, r2
+ mov r2, #8
+ orr r2, r3
+ strh r2, [r0]
+ ldrh r2, [r0]
+ add r3, r4, #0
+ and r2, r1
+ mov r1, #0x20
+ orr r1, r2
+ strh r1, [r0]
+ ldr r1, _021D794C ; =0x00001084
+ ldr r0, _021D7950 ; =0x0000063C
+ mov r2, #0
+_021D7900:
+ add r2, r2, #1
+ strh r1, [r3, r0]
+ add r3, r3, #2
+ cmp r2, #8
+ blt _021D7900
+ ldr r0, _021D7950 ; =0x0000063C
+ add r0, r4, r0
+ bl G3X_SetEdgeColorTable
+ mov r1, #0
+ ldr r0, _021D7954 ; =0x000043FF
+ ldr r2, _021D7958 ; =0x00007FFF
+ mov r3, #0x3f
+ str r1, [sp]
+ bl G3X_SetClearColor
+ ldr r1, _021D795C ; =0x04000540
+ mov r0, #2
+ str r0, [r1]
+ ldr r0, _021D7960 ; =0xBFFF0000
+ str r0, [r1, #0x40]
+ mov r0, #1
+ add r1, r0, #0
+ bl FUN_020AEB70
+ mov r0, #1
+ lsl r0, r0, #0xe
+ mov r1, #1
+ bl FUN_020AEDF4
+ add sp, #4
+ pop {r3, r4, pc}
+ .align 2, 0
+_021D7940: .word 0x04000060
+_021D7944: .word 0xFFFFCFFD
+_021D7948: .word 0x0000CFFB
+_021D794C: .word 0x00001084
+_021D7950: .word 0x0000063C
+_021D7954: .word 0x000043FF
+_021D7958: .word 0x00007FFF
+_021D795C: .word 0x04000540
+_021D7960: .word 0xBFFF0000
+ thumb_func_end MOD64_021D78B4
+
+ thumb_func_start MOD64_021D7964
+MOD64_021D7964: ; 0x021D7964
+ push {r3, lr}
+ bl FUN_020AEAF4
+ bl FUN_020AEC60
+ pop {r3, pc}
+ thumb_func_end MOD64_021D7964
+
+ thumb_func_start MOD64_021D7970
+MOD64_021D7970: ; 0x021D7970
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x54
+ add r4, r1, #0
+ ldr r1, _021D7A28 ; =0x04000008
+ add r5, r0, #0
+ ldrh r2, [r1]
+ mov r0, #3
+ mov r7, #1
+ bic r2, r0
+ add r0, r2, #0
+ orr r0, r7
+ add r3, sp, #0x38
+ ldr r6, _021D7A2C ; =0x021D90B0
+ strh r0, [r1]
+ ldmia r6!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r6!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r6!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r6]
+ add r1, r7, #0
+ str r0, [r3]
+ add r0, r5, #0
+ mov r3, #0
+ bl FUN_02016C18
+ add r0, r7, #0
+ mov r1, #0x20
+ mov r2, #0
+ add r3, r4, #0
+ bl FUN_02017F18
+ add r0, r5, #0
+ add r1, r7, #0
+ bl FUN_02018744
+ ldr r6, _021D7A30 ; =0x021D9094
+ add r3, sp, #0x1c
+ ldmia r6!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r6!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r6!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r6]
+ mov r1, #2
+ str r0, [r3]
+ add r0, r5, #0
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #2
+ mov r1, #0x20
+ mov r2, #0
+ add r3, r4, #0
+ bl FUN_02017F18
+ add r0, r5, #0
+ mov r1, #2
+ bl FUN_02018744
+ ldr r6, _021D7A34 ; =0x021D90CC
+ add r3, sp, #0
+ ldmia r6!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldmia r6!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r6!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r6]
+ mov r1, #3
+ str r0, [r3]
+ add r0, r5, #0
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #3
+ mov r1, #0x20
+ mov r2, #0
+ add r3, r4, #0
+ bl FUN_02017F18
+ add r0, r5, #0
+ mov r1, #3
+ bl FUN_02018744
+ add sp, #0x54
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_021D7A28: .word 0x04000008
+_021D7A2C: .word 0x021D90B0
+_021D7A30: .word 0x021D9094
+_021D7A34: .word 0x021D90CC
+ thumb_func_end MOD64_021D7970
+
+ thumb_func_start MOD64_021D7A38
+MOD64_021D7A38: ; 0x021D7A38
+ push {r4, lr}
+ add r4, r0, #0
+ mov r1, #1
+ bl FUN_020178A0
+ add r0, r4, #0
+ mov r1, #2
+ bl FUN_020178A0
+ add r0, r4, #0
+ mov r1, #3
+ bl FUN_020178A0
+ pop {r4, pc}
+ thumb_func_end MOD64_021D7A38
+
+ thumb_func_start MOD64_021D7A54
+MOD64_021D7A54: ; 0x021D7A54
+ push {r4, r5, lr}
+ sub sp, #0x14
+ add r4, r1, #0
+ add r5, r0, #0
+ add r0, r4, #0
+ mov r1, #1
+ bl FUN_02018FF4
+ add r1, r5, #0
+ add r1, #0x98
+ str r0, [r1]
+ add r0, r5, #0
+ add r0, #0x98
+ ldr r0, [r0]
+ bl FUN_0201901C
+ mov r0, #0x13
+ str r0, [sp]
+ mov r0, #0x17
+ str r0, [sp, #4]
+ mov r3, #4
+ add r1, r5, #0
+ str r3, [sp, #8]
+ mov r0, #2
+ str r0, [sp, #0xc]
+ mov r0, #0x1f
+ str r0, [sp, #0x10]
+ add r0, r5, #0
+ add r0, #0x94
+ add r1, #0x98
+ ldr r0, [r0]
+ ldr r1, [r1]
+ mov r2, #1
+ bl FUN_02019064
+ add r0, r5, #0
+ add r0, #0x98
+ ldr r0, [r0]
+ mov r1, #0xf
+ bl FUN_02019620
+ ldr r0, _021D7AE8 ; =0x000006A8
+ mov r1, #1
+ ldr r0, [r5, r0]
+ lsl r2, r1, #9
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ add r0, r5, #0
+ str r4, [sp, #4]
+ add r0, #0x94
+ ldr r0, [r0]
+ mov r3, #0
+ bl FUN_0200CD68
+ mov r0, #0x20
+ str r0, [sp]
+ mov r0, #0x52
+ mov r1, #0x10
+ mov r2, #0
+ mov r3, #0x40
+ str r4, [sp, #4]
+ bl FUN_02006930
+ add r5, #0x98
+ mov r1, #0
+ mov r2, #2
+ ldr r0, [r5]
+ lsl r2, r2, #8
+ add r3, r1, #0
+ bl FUN_0200D0BC
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+_021D7AE8: .word 0x000006A8
+ thumb_func_end MOD64_021D7A54
+
+ thumb_func_start MOD64_021D7AEC
+MOD64_021D7AEC: ; 0x021D7AEC
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0x98
+ ldr r0, [r0]
+ bl FUN_02019178
+ add r4, #0x98
+ ldr r0, [r4]
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D7AEC
+
+ thumb_func_start MOD64_021D7B04
+MOD64_021D7B04: ; 0x021D7B04
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r0, r1, #0
+ bl FUN_02006D98
+ mov r1, #2
+ lsl r1, r1, #8
+ str r0, [r5, r1]
+ ldr r3, _021D7BA4 ; =0x021064B8
+ lsl r0, r1, #6
+ mov r1, #0
+ ldr r3, [r3]
+ add r2, r1, #0
+ blx r3
+ ldr r3, _021D7BA8 ; =0x021064C0
+ add r4, r0, #0
+ ldr r3, [r3]
+ mov r0, #0x80
+ mov r1, #0
+ mov r2, #1
+ blx r3
+ ldr r2, _021D7BAC ; =0x7FFF0000
+ add r6, r0, #0
+ mov r0, #2
+ lsl r0, r0, #8
+ and r2, r4
+ lsl r1, r4, #0x10
+ lsr r2, r2, #0x10
+ ldr r0, [r5, r0]
+ lsr r1, r1, #0xd
+ lsl r2, r2, #4
+ bl FUN_020081A8
+ ldr r2, _021D7BB0 ; =0xFFFF0000
+ mov r0, #2
+ lsl r0, r0, #8
+ and r2, r6
+ lsl r1, r6, #0x10
+ lsr r2, r2, #0x10
+ ldr r0, [r5, r0]
+ lsr r1, r1, #0xd
+ lsl r2, r2, #3
+ bl FUN_020081B4
+ mov r2, #0x81
+ lsl r2, r2, #2
+ add r0, r5, r2
+ add r1, r5, #0
+ sub r2, #0x81
+ bl MOD64_021D7BB4
+ mov r2, #0x82
+ lsl r2, r2, #2
+ add r0, r5, r2
+ add r1, r5, #0
+ sub r2, #0x82
+ bl MOD64_021D7BB4
+ mov r2, #0x83
+ lsl r2, r2, #2
+ add r0, r5, r2
+ add r1, r5, #0
+ sub r2, #0x83
+ bl MOD64_021D7BB4
+ mov r6, #0x81
+ mov r4, #0
+ mov r7, #6
+ lsl r6, r6, #2
+_021D7B8E:
+ ldr r0, [r5, r6]
+ add r1, r7, #0
+ mov r2, #1
+ bl FUN_02007558
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #3
+ blt _021D7B8E
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021D7BA4: .word 0x021064B8
+_021D7BA8: .word 0x021064C0
+_021D7BAC: .word 0x7FFF0000
+_021D7BB0: .word 0xFFFF0000
+ thumb_func_end MOD64_021D7B04
+
+ thumb_func_start MOD64_021D7BB4
+MOD64_021D7BB4: ; 0x021D7BB4
+ push {r4, r5, r6, lr}
+ sub sp, #0x20
+ add r6, r2, #0
+ add r5, r0, #0
+ lsl r0, r6, #0x10
+ add r4, r1, #0
+ lsr r0, r0, #0x10
+ mov r1, #0
+ bl FUN_02068A20
+ add r2, r0, #0
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ lsl r1, r6, #0x10
+ lsl r2, r2, #0x18
+ str r0, [sp, #8]
+ add r0, sp, #0x10
+ lsr r1, r1, #0x10
+ lsr r2, r2, #0x18
+ mov r3, #2
+ bl FUN_02068C00
+ ldr r0, _021D7C04 ; =0x000003FF
+ add r1, sp, #0x10
+ str r0, [sp]
+ mov r0, #0
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ str r0, [sp, #0xc]
+ mov r0, #2
+ lsl r0, r0, #8
+ ldr r0, [r4, r0]
+ mov r2, #0x80
+ mov r3, #0x60
+ bl FUN_020073A0
+ str r0, [r5]
+ add sp, #0x20
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021D7C04: .word 0x000003FF
+ thumb_func_end MOD64_021D7BB4
+
+ thumb_func_start MOD64_021D7C08
+MOD64_021D7C08: ; 0x021D7C08
+ push {r3, r4, r5, r6, r7, lr}
+ add r7, r0, #0
+ mov r6, #0x81
+ mov r4, #0
+ add r5, r7, #0
+ lsl r6, r6, #2
+_021D7C14:
+ ldr r0, [r5, r6]
+ cmp r0, #0
+ beq _021D7C1E
+ bl FUN_02007534
+_021D7C1E:
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #3
+ blt _021D7C14
+ mov r0, #2
+ lsl r0, r0, #8
+ ldr r0, [r7, r0]
+ bl FUN_020072E8
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D7C08
+
+ thumb_func_start MOD64_021D7C34
+MOD64_021D7C34: ; 0x021D7C34
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ ldr r5, _021D7C5C ; =0x021D9084
+ add r3, sp, #0
+ add r4, r0, #0
+ add r6, r1, #0
+ add r2, r3, #0
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldmia r5!, {r0, r1}
+ stmia r3!, {r0, r1}
+ add r0, r2, #0
+ str r6, [sp, #0xc]
+ bl FUN_02013CD4
+ ldr r1, _021D7C60 ; =0x0000064C
+ str r0, [r4, r1]
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ nop
+_021D7C5C: .word 0x021D9084
+_021D7C60: .word 0x0000064C
+ thumb_func_end MOD64_021D7C34
+
+ thumb_func_start MOD64_021D7C64
+MOD64_021D7C64: ; 0x021D7C64
+ ldr r1, _021D7C6C ; =0x0000064C
+ ldr r3, _021D7C70 ; =0x02013D19
+ ldr r0, [r0, r1]
+ bx r3
+ .align 2, 0
+_021D7C6C: .word 0x0000064C
+_021D7C70: .word 0x02013D19
+ thumb_func_end MOD64_021D7C64
+
+ thumb_func_start MOD64_021D7C74
+MOD64_021D7C74: ; 0x021D7C74
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r1, r5, #0
+ mov r0, #2
+ add r1, #0xbc
+ add r2, r4, #0
+ bl FUN_02008C9C
+ mov r1, #0x79
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ mov r0, #2
+ mov r1, #0
+ add r2, r4, #0
+ bl FUN_02008DEC
+ mov r1, #0x7a
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ mov r0, #2
+ mov r1, #1
+ add r2, r4, #0
+ bl FUN_02008DEC
+ mov r1, #0x7b
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ mov r0, #2
+ add r1, r0, #0
+ add r2, r4, #0
+ bl FUN_02008DEC
+ mov r1, #0x1f
+ lsl r1, r1, #4
+ str r0, [r5, r1]
+ mov r0, #2
+ mov r1, #3
+ add r2, r4, #0
+ bl FUN_02008DEC
+ mov r1, #0x7d
+ lsl r1, r1, #2
+ str r0, [r5, r1]
+ mov r0, #0x10
+ mov r1, #1
+ bl FUN_0201E6E4
+ mov r0, #0x10
+ mov r1, #1
+ bl FUN_0201E74C
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D7C74
+
+ thumb_func_start MOD64_021D7CE0
+MOD64_021D7CE0: ; 0x021D7CE0
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl FUN_0201FD58
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl FUN_02008E2C
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl FUN_02008E2C
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ bl FUN_02008E2C
+ mov r0, #0x7d
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl FUN_02008E2C
+ pop {r4, pc}
+ thumb_func_end MOD64_021D7CE0
+
+ thumb_func_start MOD64_021D7D18
+MOD64_021D7D18: ; 0x021D7D18
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ add r7, r2, #0
+ add r5, r0, #0
+ add r4, r3, #0
+ mov r1, #0
+ mov r2, #0x98
+ bl Call_FillMemWithValue
+ add r0, r5, #0
+ add r1, r6, #0
+ add r2, r4, #0
+ bl MOD64_021D7D7C
+ ldr r3, [sp, #0x18]
+ add r0, r5, #0
+ add r1, r7, #0
+ add r2, r4, #0
+ bl MOD64_021D7DC0
+ mov r1, #1
+ lsl r1, r1, #0xc
+ add r0, r5, #0
+ add r2, r1, #0
+ add r3, r1, #0
+ bl MOD64_021D7EE0
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD64_021D7D18
+
+ thumb_func_start MOD64_021D7D50
+MOD64_021D7D50: ; 0x021D7D50
+ push {r4, r5, r6, lr}
+ add r4, r1, #0
+ add r6, r2, #0
+ add r5, r0, #0
+ mov r1, #0
+ mov r2, #0x98
+ bl Call_FillMemWithValue
+ add r0, r5, #0
+ add r1, r4, #0
+ add r2, r6, #0
+ bl MOD64_021D7D7C
+ mov r1, #1
+ lsl r1, r1, #0xc
+ add r0, r5, #0
+ add r2, r1, #0
+ add r3, r1, #0
+ bl MOD64_021D7EE0
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D7D50
+
+ thumb_func_start MOD64_021D7D7C
+MOD64_021D7D7C: ; 0x021D7D7C
+ push {r3, r4, lr}
+ sub sp, #4
+ add r3, r2, #0
+ mov r2, #0
+ add r4, r0, #0
+ str r2, [sp]
+ mov r0, #0x52
+ bl FUN_02006C98
+ str r0, [r4, #0x54]
+ bl FUN_020BC13C
+ str r0, [r4, #0x58]
+ ldrh r1, [r0, #0xe]
+ add r1, r0, r1
+ ldr r1, [r1, #0xc]
+ add r0, r0, r1
+ str r0, [r4, #0x5c]
+ ldr r0, [r4, #0x54]
+ bl FUN_020BC0FC
+ str r0, [r4, #0x60]
+ bl FUN_0201B3C4
+ ldr r0, [r4, #0x54]
+ ldr r1, [r4, #0x60]
+ bl FUN_0201B3A8
+ ldr r1, [r4, #0x5c]
+ add r0, r4, #0
+ bl FUN_020B80B4
+ add sp, #4
+ pop {r3, r4, pc}
+ thumb_func_end MOD64_021D7D7C
+
+ thumb_func_start MOD64_021D7DC0
+MOD64_021D7DC0: ; 0x021D7DC0
+ push {r3, r4, r5, r6, lr}
+ sub sp, #4
+ add r6, r2, #0
+ mov r2, #0
+ add r4, r0, #0
+ add r5, r3, #0
+ str r2, [sp]
+ mov r0, #0x52
+ add r3, r6, #0
+ bl FUN_02006C98
+ str r0, [r4, #0x64]
+ mov r1, #0
+ bl FUN_020BC4C8
+ str r0, [r4, #0x68]
+ ldr r1, [r4, #0x68]
+ ldr r2, [r4, #0x5c]
+ add r0, r5, #0
+ bl FUN_020BB8D0
+ str r0, [r4, #0x6c]
+ ldr r1, [r4, #0x68]
+ ldr r2, [r4, #0x5c]
+ ldr r3, [r4, #0x60]
+ bl FUN_020B8110
+ ldr r1, [r4, #0x6c]
+ add r0, r4, #0
+ bl FUN_020B7EFC
+ add sp, #4
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D7DC0
+
+ thumb_func_start MOD64_021D7E04
+MOD64_021D7E04: ; 0x021D7E04
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x54]
+ add r4, r1, #0
+ cmp r0, #0
+ beq _021D7E14
+ bl FUN_02016A18
+_021D7E14:
+ ldr r0, [r5, #0x64]
+ cmp r0, #0
+ beq _021D7E28
+ ldr r1, [r5, #0x6c]
+ add r0, r4, #0
+ bl thunk_FUN_020ae84c
+ ldr r0, [r5, #0x64]
+ bl FUN_02016A18
+_021D7E28:
+ add r0, r5, #0
+ mov r1, #0
+ mov r2, #0x98
+ bl Call_FillMemWithValue
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD64_021D7E04
+
+ thumb_func_start MOD64_021D7E34
+MOD64_021D7E34: ; 0x021D7E34
+ push {r4, lr}
+ sub sp, #0x48
+ add r4, r0, #0
+ add r0, sp, #0x24
+ bl MTX_Identity33_
+ add r0, r4, #0
+ add r0, #0x90
+ ldrh r0, [r0]
+ ldr r3, _021D7ECC ; =0x020FFA38
+ asr r0, r0, #4
+ lsl r2, r0, #1
+ lsl r1, r2, #1
+ add r2, r2, #1
+ lsl r2, r2, #1
+ ldrsh r1, [r3, r1]
+ ldrsh r2, [r3, r2]
+ add r0, sp, #0
+ bl MTX_RotX33_
+ add r1, sp, #0x24
+ add r0, sp, #0
+ add r2, r1, #0
+ bl MTX_Concat33
+ add r0, r4, #0
+ add r0, #0x92
+ ldrh r0, [r0]
+ ldr r3, _021D7ECC ; =0x020FFA38
+ asr r0, r0, #4
+ lsl r2, r0, #1
+ lsl r1, r2, #1
+ add r2, r2, #1
+ lsl r2, r2, #1
+ ldrsh r1, [r3, r1]
+ ldrsh r2, [r3, r2]
+ add r0, sp, #0
+ bl MTX_RotY33_
+ add r1, sp, #0x24
+ add r0, sp, #0
+ add r2, r1, #0
+ bl MTX_Concat33
+ add r0, r4, #0
+ add r0, #0x94
+ ldrh r0, [r0]
+ ldr r3, _021D7ECC ; =0x020FFA38
+ asr r0, r0, #4
+ lsl r2, r0, #1
+ lsl r1, r2, #1
+ add r2, r2, #1
+ lsl r2, r2, #1
+ ldrsh r1, [r3, r1]
+ ldrsh r2, [r3, r2]
+ add r0, sp, #0
+ bl MTX_RotZ33_
+ add r1, sp, #0x24
+ add r0, sp, #0
+ add r2, r1, #0
+ bl MTX_Concat33
+ ldr r0, [r4, #0x74]
+ cmp r0, #0
+ beq _021D7EC8
+ add r1, r4, #0
+ add r0, r4, #0
+ add r4, #0x84
+ add r1, #0x78
+ add r2, sp, #0x24
+ add r3, r4, #0
+ bl FUN_0201B26C
+_021D7EC8:
+ add sp, #0x48
+ pop {r4, pc}
+ .align 2, 0
+_021D7ECC: .word 0x020FFA38
+ thumb_func_end MOD64_021D7E34
+
+ thumb_func_start MOD64_021D7ED0
+MOD64_021D7ED0: ; 0x021D7ED0
+ str r1, [r0, #0x74]
+ bx lr
+ thumb_func_end MOD64_021D7ED0
+
+ thumb_func_start MOD64_021D7ED4
+MOD64_021D7ED4: ; 0x021D7ED4
+ str r1, [r0, #0x78]
+ str r2, [r0, #0x7c]
+ add r0, #0x80
+ str r3, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD64_021D7ED4
+
+ thumb_func_start MOD64_021D7EE0
+MOD64_021D7EE0: ; 0x021D7EE0
+ push {r3, r4}
+ add r4, r0, #0
+ add r4, #0x84
+ str r1, [r4]
+ add r1, r0, #0
+ add r1, #0x88
+ str r2, [r1]
+ add r0, #0x8c
+ str r3, [r0]
+ pop {r3, r4}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD64_021D7EE0
+
+ thumb_func_start MOD64_021D7EF8
+MOD64_021D7EF8: ; 0x021D7EF8
+ push {r3, r4}
+ add r4, r0, #0
+ add r4, #0x90
+ strh r1, [r4]
+ add r1, r0, #0
+ add r1, #0x92
+ strh r2, [r1]
+ add r0, #0x94
+ strh r3, [r0]
+ pop {r3, r4}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD64_021D7EF8
+
+ thumb_func_start MOD64_021D7F10
+MOD64_021D7F10: ; 0x021D7F10
+ ldr r1, [r0, #0x6c]
+ ldr r2, [r0, #0x70]
+ ldr r1, [r1, #8]
+ ldrh r1, [r1, #4]
+ lsl r3, r1, #0xc
+ mov r1, #1
+ lsl r1, r1, #0xc
+ add r1, r2, r1
+ cmp r1, r3
+ bge _021D7F2A
+ str r1, [r0, #0x70]
+ mov r2, #0
+ b _021D7F2E
+_021D7F2A:
+ str r3, [r0, #0x70]
+ mov r2, #1
+_021D7F2E:
+ ldr r1, [r0, #0x70]
+ ldr r0, [r0, #0x6c]
+ str r1, [r0]
+ add r0, r2, #0
+ bx lr
+ thumb_func_end MOD64_021D7F10
+
+ thumb_func_start MOD64_021D7F38
+MOD64_021D7F38: ; 0x021D7F38
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #1
+ ldr r1, [r4, #0x70]
+ lsl r0, r0, #0xc
+ add r0, r1, r0
+ ldr r1, [r4, #0x6c]
+ ldr r1, [r1, #8]
+ ldrh r1, [r1, #4]
+ lsl r1, r1, #0xc
+ bl _s32_div_f
+ str r1, [r4, #0x70]
+ ldr r0, [r4, #0x6c]
+ str r1, [r0]
+ pop {r4, pc}
+ thumb_func_end MOD64_021D7F38
+
+ thumb_func_start MOD64_021D7F58
+MOD64_021D7F58: ; 0x021D7F58
+ str r1, [r0, #0x70]
+ ldr r0, [r0, #0x6c]
+ str r1, [r0]
+ bx lr
+ thumb_func_end MOD64_021D7F58
+
+ thumb_func_start MOD64_021D7F60
+MOD64_021D7F60: ; 0x021D7F60
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r6, r0, #0
+ mov r0, #0x25
+ add r7, r1, #0
+ lsl r0, r0, #4
+ add r1, r6, r0
+ add r0, #0x10
+ str r1, [sp]
+ add r0, r6, r0
+ mov r1, #1
+ mov r2, #0
+ add r3, r7, #0
+ bl MOD64_021D7D18
+ mov r0, #0x26
+ lsl r0, r0, #4
+ add r0, r6, r0
+ mov r1, #1
+ bl MOD64_021D7ED0
+ mov r0, #0xbe
+ lsl r0, r0, #2
+ add r0, r6, r0
+ mov r1, #8
+ add r2, r7, #0
+ bl MOD64_021D7D50
+ mov r0, #0xbe
+ lsl r0, r0, #2
+ add r0, r6, r0
+ mov r1, #0
+ bl MOD64_021D7ED0
+ mov r0, #0x26
+ lsl r0, r0, #4
+ add r1, r6, r0
+ lsr r0, r0, #1
+ add r5, r1, r0
+ mov r0, #0x25
+ lsl r0, r0, #4
+ add r0, r6, r0
+ mov r4, #2
+ str r0, [sp, #4]
+_021D7FB8:
+ sub r0, r4, #2
+ lsl r2, r0, #1
+ ldr r0, [sp, #4]
+ add r1, r2, #3
+ str r0, [sp]
+ add r0, r5, #0
+ add r2, r2, #2
+ add r3, r7, #0
+ bl MOD64_021D7D18
+ add r0, r5, #0
+ mov r1, #0
+ bl MOD64_021D7ED0
+ add r4, r4, #1
+ add r5, #0x98
+ cmp r4, #4
+ ble _021D7FB8
+ ldr r0, _021D8028 ; =0x00000558
+ mov r1, #9
+ add r0, r6, r0
+ add r2, r7, #0
+ bl MOD64_021D7D50
+ ldr r0, _021D8028 ; =0x00000558
+ mov r1, #1
+ add r0, r6, r0
+ bl MOD64_021D7ED0
+ ldr r0, _021D8028 ; =0x00000558
+ mov r3, #0xa
+ ldr r2, _021D802C ; =0xFFFE4000
+ add r0, r6, r0
+ mov r1, #0
+ lsl r3, r3, #0xe
+ bl MOD64_021D7ED4
+ ldr r0, _021D8028 ; =0x00000558
+ mov r1, #0xe
+ lsl r1, r1, #0xa
+ mov r2, #1
+ add r0, r6, r0
+ lsl r2, r2, #0xc
+ add r3, r1, #0
+ bl MOD64_021D7EE0
+ ldr r0, _021D8028 ; =0x00000558
+ mov r1, #0
+ ldr r2, _021D8030 ; =0x00007FFF
+ add r0, r6, r0
+ add r3, r1, #0
+ bl MOD64_021D7EF8
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021D8028: .word 0x00000558
+_021D802C: .word 0xFFFE4000
+_021D8030: .word 0x00007FFF
+ thumb_func_end MOD64_021D7F60
+
+ thumb_func_start MOD64_021D8034
+MOD64_021D8034: ; 0x021D8034
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ mov r0, #0x26
+ lsl r0, r0, #4
+ add r7, r0, #0
+ mov r4, #0
+ add r5, r6, r0
+ sub r7, #0x10
+_021D8044:
+ add r0, r5, #0
+ add r1, r6, r7
+ bl MOD64_021D7E04
+ add r4, r4, #1
+ add r5, #0x98
+ cmp r4, #6
+ blt _021D8044
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D8034
+
+ thumb_func_start MOD64_021D8058
+MOD64_021D8058: ; 0x021D8058
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r0, #0
+ ldr r2, _021D809C ; =0xFFFFF000
+ add r1, r0, #0
+ add r3, r0, #0
+ bl FUN_020B8418
+ ldr r1, _021D80A0 ; =0x00007FFF
+ mov r0, #0
+ bl FUN_020B8404
+ ldr r0, _021D80A0 ; =0x00007FFF
+ mov r2, #0
+ add r1, r0, #0
+ bl FUN_020B83E0
+ ldr r0, _021D80A0 ; =0x00007FFF
+ mov r2, #0
+ add r1, r0, #0
+ bl FUN_020B83BC
+ mov r0, #0x26
+ lsl r0, r0, #4
+ mov r4, #0
+ add r5, r5, r0
+_021D808C:
+ add r0, r5, #0
+ bl MOD64_021D7E34
+ add r4, r4, #1
+ add r5, #0x98
+ cmp r4, #6
+ blt _021D808C
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D809C: .word 0xFFFFF000
+_021D80A0: .word 0x00007FFF
+ thumb_func_end MOD64_021D8058
+
+ thumb_func_start MOD64_021D80A4
+MOD64_021D80A4: ; 0x021D80A4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r1, [r4, #8]
+ cmp r1, #1
+ bne _021D80B2
+ mov r0, #0
+ pop {r4, pc}
+_021D80B2:
+ bl MOD64_021D83D0
+ cmp r0, #5
+ bhi _021D80F4
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D80C6: ; jump table
+ .short _021D80F4 - _021D80C6 - 2 ; case 0
+ .short _021D80F4 - _021D80C6 - 2 ; case 1
+ .short _021D80F4 - _021D80C6 - 2 ; case 2
+ .short _021D80D2 - _021D80C6 - 2 ; case 3
+ .short _021D80F4 - _021D80C6 - 2 ; case 4
+ .short _021D80F0 - _021D80C6 - 2 ; case 5
+_021D80D2:
+ add r0, r4, #0
+ bl MOD64_021D8384
+ ldr r0, _021D80F8 ; =0x021C48B8
+ mov r1, #1
+ ldr r0, [r0, #0x48]
+ tst r0, r1
+ beq _021D80F4
+ add r0, r4, #0
+ bl MOD64_021D83C4
+ ldr r0, _021D80FC ; =0x000005DC
+ bl FUN_020054C8
+ b _021D80F4
+_021D80F0:
+ mov r0, #1
+ pop {r4, pc}
+_021D80F4:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+_021D80F8: .word 0x021C48B8
+_021D80FC: .word 0x000005DC
+ thumb_func_end MOD64_021D80A4
+
+ thumb_func_start MOD64_021D8100
+MOD64_021D8100: ; 0x021D8100
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ add r5, r1, #0
+ bl MOD64_021D83D0
+ cmp r0, #5
+ bhi _021D81CA
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_021D811A: ; jump table
+ .short _021D8126 - _021D811A - 2 ; case 0
+ .short _021D8146 - _021D811A - 2 ; case 1
+ .short _021D815E - _021D811A - 2 ; case 2
+ .short _021D81B0 - _021D811A - 2 ; case 3
+ .short _021D81BA - _021D811A - 2 ; case 4
+ .short _021D81C4 - _021D811A - 2 ; case 5
+_021D8126:
+ mov r1, #1
+ str r1, [r4, #8]
+ mov r0, #0x24
+ str r0, [r4, #0xc]
+ add r0, r4, #0
+ bl MOD64_021D83C4
+ mov r0, #6
+ str r0, [sp]
+ ldr r0, _021D81CC ; =0x04000050
+ mov r1, #8
+ mov r2, #0x15
+ mov r3, #0xa
+ bl G2x_SetBlendAlpha_
+ pop {r3, r4, r5, pc}
+_021D8146:
+ ldr r0, [r4, #0xc]
+ sub r0, r0, #1
+ str r0, [r4, #0xc]
+ bpl _021D81CA
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD64_021D83C4
+ ldr r0, _021D81D0 ; =0x000006CA
+ bl FUN_020054C8
+ pop {r3, r4, r5, pc}
+_021D815E:
+ mov r0, #0x26
+ lsl r0, r0, #4
+ add r0, r4, r0
+ bl MOD64_021D7F10
+ cmp r0, #0
+ beq _021D81CA
+ mov r0, #0x26
+ lsl r0, r0, #4
+ add r0, r4, r0
+ mov r1, #0
+ bl MOD64_021D7ED0
+ mov r0, #0xbe
+ lsl r0, r0, #2
+ add r0, r4, r0
+ mov r1, #1
+ bl MOD64_021D7ED0
+ mov r0, #0x39
+ lsl r0, r0, #4
+ add r0, r4, r0
+ mov r1, #1
+ bl MOD64_021D7ED0
+ ldr r0, _021D81D4 ; =0x00000428
+ mov r1, #1
+ add r0, r4, r0
+ bl MOD64_021D7ED0
+ mov r0, #0x13
+ lsl r0, r0, #6
+ add r0, r4, r0
+ mov r1, #1
+ bl MOD64_021D7ED0
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD64_021D83C4
+ pop {r3, r4, r5, pc}
+_021D81B0:
+ add r0, r4, #0
+ add r1, r5, #0
+ bl MOD64_021D83D4
+ pop {r3, r4, r5, pc}
+_021D81BA:
+ add r0, r4, #0
+ add r1, r5, #0
+ bl MOD64_021D8570
+ pop {r3, r4, r5, pc}
+_021D81C4:
+ ldr r0, _021D81CC ; =0x04000050
+ mov r1, #0
+ strh r1, [r0]
+_021D81CA:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D81CC: .word 0x04000050
+_021D81D0: .word 0x000006CA
+_021D81D4: .word 0x00000428
+ thumb_func_end MOD64_021D8100
+
+ thumb_func_start MOD64_021D81D8
+MOD64_021D81D8: ; 0x021D81D8
+ push {r4, lr}
+ sub sp, #8
+ add r4, r0, #0
+ bl FUN_020222AC
+ mov r1, #0
+ mov r0, #0x11
+ add r2, r1, #0
+ bl FUN_020BB1C0
+ bl FUN_020BB394
+ bl FUN_020B02C8
+ mov r0, #2
+ lsl r0, r0, #8
+ ldr r0, [r4, r0]
+ bl FUN_02006ED4
+ ldr r0, _021D8248 ; =0x0000064C
+ ldr r0, [r4, r0]
+ bl FUN_02013D5C
+ mov r2, #1
+ mov r0, #0x12
+ add r1, sp, #4
+ str r2, [sp, #4]
+ bl FUN_020BB1C0
+ mov r1, #0
+ mov r0, #0x11
+ add r2, r1, #0
+ bl FUN_020BB1C0
+ bl FUN_0201EBA4
+ add r0, r4, #0
+ bl MOD64_021D8058
+ mov r2, #1
+ mov r0, #0x12
+ add r1, sp, #0
+ str r2, [sp]
+ bl FUN_020BB1C0
+ mov r0, #0
+ add r1, r0, #0
+ bl FUN_020222B4
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl FUN_0201FDEC
+ add sp, #8
+ pop {r4, pc}
+ .align 2, 0
+_021D8248: .word 0x0000064C
+ thumb_func_end MOD64_021D81D8
+
+ thumb_func_start MOD64_021D824C
+MOD64_021D824C: ; 0x021D824C
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, r1, #0
+ bl FUN_0201EB64
+ mov r1, #0x5f
+ lsl r1, r1, #4
+ str r0, [r4, r1]
+ ldr r0, [r4, r1]
+ add r1, r1, #4
+ add r1, r4, r1
+ bl MOD64_021D8268
+ pop {r4, pc}
+ thumb_func_end MOD64_021D824C
+
+ thumb_func_start MOD64_021D8268
+MOD64_021D8268: ; 0x021D8268
+ push {r4, lr}
+ sub sp, #0x20
+ mov r3, #0
+ str r3, [r1]
+ str r3, [r1, #4]
+ add r4, r0, #0
+ ldr r2, _021D82B4 ; =0x0000EAAB
+ str r3, [r1, #8]
+ add r0, sp, #0xc
+ strh r2, [r0]
+ strh r3, [r0, #2]
+ strh r3, [r0, #4]
+ str r3, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ add r0, r1, #0
+ mov r1, #0x4b
+ ldr r3, _021D82B8 ; =0x00000FA4
+ lsl r1, r1, #0xe
+ add r2, sp, #0xc
+ str r4, [sp, #8]
+ bl FUN_0201ECA8
+ mov r1, #0
+ mov r0, #1
+ lsl r0, r0, #0xc
+ str r0, [sp, #0x18]
+ str r1, [sp, #0x14]
+ str r1, [sp, #0x1c]
+ add r0, sp, #0x14
+ add r1, r4, #0
+ bl FUN_0201EC58
+ add r0, r4, #0
+ bl FUN_0201EB8C
+ add sp, #0x20
+ pop {r4, pc}
+ .align 2, 0
+_021D82B4: .word 0x0000EAAB
+_021D82B8: .word 0x00000FA4
+ thumb_func_end MOD64_021D8268
+
+ thumb_func_start MOD64_021D82BC
+MOD64_021D82BC: ; 0x021D82BC
+ mov r1, #0x5f
+ lsl r1, r1, #4
+ ldr r3, _021D82C8 ; =0x0201EB71
+ ldr r0, [r0, r1]
+ bx r3
+ nop
+_021D82C8: .word 0x0201EB71
+ thumb_func_end MOD64_021D82BC
+
+ thumb_func_start MOD64_021D82CC
+MOD64_021D82CC: ; 0x021D82CC
+ push {r4, r5, r6, r7}
+ mov r5, #0
+ add r4, r5, #0
+ add r6, r0, #0
+ sub r3, r5, #4
+ add r1, r5, #0
+ sub r4, #0x2c
+ mov r2, #0x20
+_021D82DC:
+ cmp r5, #0
+ beq _021D82EA
+ cmp r5, #1
+ beq _021D82F2
+ cmp r5, #2
+ beq _021D82FC
+ b _021D8306
+_021D82EA:
+ str r4, [r6, #0x58]
+ str r3, [r6, #0x5c]
+ str r2, [r6, #0x60]
+ b _021D8306
+_021D82F2:
+ str r1, [r6, #0x58]
+ str r3, [r6, #0x5c]
+ mov r7, #0x3e
+ str r7, [r6, #0x60]
+ b _021D8306
+_021D82FC:
+ mov r7, #0x26
+ str r7, [r6, #0x58]
+ str r3, [r6, #0x5c]
+ mov r7, #0x1a
+ str r7, [r6, #0x60]
+_021D8306:
+ add r5, r5, #1
+ add r6, #0xc
+ cmp r5, #3
+ blt _021D82DC
+ mov r5, #0
+ mov r2, #0x82
+ mov r1, #0x52
+ mov r4, #0x4e
+ mov r3, #0x37
+_021D8318:
+ cmp r5, #0
+ beq _021D8326
+ cmp r5, #1
+ beq _021D8330
+ cmp r5, #2
+ beq _021D833A
+ b _021D8346
+_021D8326:
+ add r6, r0, #0
+ str r4, [r0, #0x7c]
+ add r6, #0x80
+ str r3, [r6]
+ b _021D8346
+_021D8330:
+ add r6, r0, #0
+ str r2, [r0, #0x7c]
+ add r6, #0x80
+ str r1, [r6]
+ b _021D8346
+_021D833A:
+ mov r6, #0xac
+ add r7, r0, #0
+ str r6, [r0, #0x7c]
+ add r7, #0x80
+ mov r6, #0x32
+ str r6, [r7]
+_021D8346:
+ add r5, r5, #1
+ add r0, #8
+ cmp r5, #3
+ blt _021D8318
+ pop {r4, r5, r6, r7}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD64_021D82CC
+
+ thumb_func_start MOD64_021D8354
+MOD64_021D8354: ; 0x021D8354
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ mov r0, #0x26
+ lsl r0, r0, #4
+ mov r4, #0
+ add r6, r5, r0
+ mov r7, #0x98
+_021D8362:
+ add r0, r4, #2
+ add r1, r0, #0
+ mul r1, r7
+ add r0, r6, r1
+ ldr r1, [r5, #0x58]
+ ldr r2, [r5, #0x5c]
+ ldr r3, [r5, #0x60]
+ lsl r1, r1, #0xc
+ lsl r2, r2, #0xc
+ lsl r3, r3, #0xc
+ bl MOD64_021D7ED4
+ add r4, r4, #1
+ add r5, #0xc
+ cmp r4, #3
+ blt _021D8362
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD64_021D8354
+
+ thumb_func_start MOD64_021D8384
+MOD64_021D8384: ; 0x021D8384
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, _021D83BC ; =0x021C48B8
+ ldr r1, [r0, #0x48]
+ mov r0, #0x20
+ tst r0, r1
+ beq _021D83A0
+ ldr r0, [r4, #0x54]
+ sub r0, r0, #1
+ bmi _021D83A0
+ str r0, [r4, #0x54]
+ ldr r0, _021D83C0 ; =0x000005DC
+ bl FUN_020054C8
+_021D83A0:
+ ldr r0, _021D83BC ; =0x021C48B8
+ ldr r1, [r0, #0x48]
+ mov r0, #0x10
+ tst r0, r1
+ beq _021D83BA
+ ldr r0, [r4, #0x54]
+ add r0, r0, #1
+ cmp r0, #3
+ bge _021D83BA
+ str r0, [r4, #0x54]
+ ldr r0, _021D83C0 ; =0x000005DC
+ bl FUN_020054C8
+_021D83BA:
+ pop {r4, pc}
+ .align 2, 0
+_021D83BC: .word 0x021C48B8
+_021D83C0: .word 0x000005DC
+ thumb_func_end MOD64_021D8384
+
+ thumb_func_start MOD64_021D83C4
+MOD64_021D83C4: ; 0x021D83C4
+ ldr r2, [r0]
+ add r1, r2, r1
+ str r1, [r0]
+ mov r1, #0
+ str r1, [r0, #4]
+ bx lr
+ thumb_func_end MOD64_021D83C4
+
+ thumb_func_start MOD64_021D83D0
+MOD64_021D83D0: ; 0x021D83D0
+ ldr r0, [r0]
+ bx lr
+ thumb_func_end MOD64_021D83D0
+
+ thumb_func_start MOD64_021D83D4
+MOD64_021D83D4: ; 0x021D83D4
+ push {r3, r4, lr}
+ sub sp, #0xc
+ add r4, r0, #0
+ ldr r2, [r4, #4]
+ cmp r2, #8
+ bls _021D83E2
+ b _021D8510
+_021D83E2:
+ add r2, r2, r2
+ add r2, pc
+ ldrh r2, [r2, #6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_021D83EE: ; jump table
+ .short _021D8400 - _021D83EE - 2 ; case 0
+ .short _021D8422 - _021D83EE - 2 ; case 1
+ .short _021D843A - _021D83EE - 2 ; case 2
+ .short _021D8450 - _021D83EE - 2 ; case 3
+ .short _021D8480 - _021D83EE - 2 ; case 4
+ .short _021D849E - _021D83EE - 2 ; case 5
+ .short _021D84CE - _021D83EE - 2 ; case 6
+ .short _021D84EC - _021D83EE - 2 ; case 7
+ .short _021D8506 - _021D83EE - 2 ; case 8
+_021D8400:
+ mov r2, #0x5f
+ lsl r2, r2, #4
+ ldr r1, [r4, r2]
+ add r2, r2, #4
+ add r0, #0x10
+ add r2, r4, r2
+ bl MOD64_021D8864
+ mov r0, #2
+ mov r1, #1
+ bl FUN_0201E6E4
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D8422:
+ add r0, #0x10
+ bl MOD64_021D8928
+ cmp r0, #0
+ beq _021D8510
+ mov r0, #6
+ str r0, [r4, #0xc]
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D843A:
+ ldr r1, [r4, #0xc]
+ sub r1, r1, #1
+ str r1, [r4, #0xc]
+ bpl _021D8510
+ bl MOD64_021D8554
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D8450:
+ ldr r0, _021D8514 ; =0x0001020F
+ mov r2, #5
+ str r0, [sp]
+ ldr r0, _021D8518 ; =0x000006AC
+ lsl r2, r2, #6
+ ldr r0, [r4, r0]
+ mov r3, #0
+ str r0, [sp, #4]
+ add r0, r4, #0
+ add r0, #0xac
+ str r0, [sp, #8]
+ add r0, r4, #0
+ add r0, #0x98
+ ldr r0, [r0]
+ bl MOD64_021D8744
+ mov r1, #0x6b
+ lsl r1, r1, #4
+ strb r0, [r4, r1]
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D8480:
+ mov r0, #0x6b
+ lsl r0, r0, #4
+ ldrb r0, [r4, r0]
+ bl FUN_0201BD70
+ cmp r0, #0
+ bne _021D8510
+ add r0, r4, #0
+ bl MOD64_021D87B8
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D849E:
+ ldr r0, _021D8514 ; =0x0001020F
+ mov r2, #5
+ str r0, [sp]
+ ldr r0, _021D8518 ; =0x000006AC
+ lsl r2, r2, #6
+ ldr r0, [r4, r0]
+ mov r3, #7
+ str r0, [sp, #4]
+ add r0, r4, #0
+ add r0, #0xac
+ str r0, [sp, #8]
+ add r0, r4, #0
+ add r0, #0x98
+ ldr r0, [r0]
+ bl MOD64_021D8744
+ mov r1, #0x6b
+ lsl r1, r1, #4
+ strb r0, [r4, r1]
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D84CE:
+ mov r0, #0x6b
+ lsl r0, r0, #4
+ ldrb r0, [r4, r0]
+ bl FUN_0201BD70
+ cmp r0, #0
+ bne _021D8510
+ add r0, r4, #0
+ bl MOD64_021D87B8
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D84EC:
+ mov r0, #6
+ lsl r0, r0, #8
+ add r0, r4, r0
+ mov r1, #1
+ bl MOD64_021D8B58
+ mov r0, #0
+ str r0, [r4, #8]
+ ldr r0, [r4, #4]
+ add sp, #0xc
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, pc}
+_021D8506:
+ bl MOD64_021D851C
+ add r0, r4, #0
+ bl MOD64_021D8554
+_021D8510:
+ add sp, #0xc
+ pop {r3, r4, pc}
+ .align 2, 0
+_021D8514: .word 0x0001020F
+_021D8518: .word 0x000006AC
+ thumb_func_end MOD64_021D83D4
+
+ thumb_func_start MOD64_021D851C
+MOD64_021D851C: ; 0x021D851C
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ mov r0, #0x26
+ lsl r0, r0, #4
+ mov r5, #0
+ add r4, r6, r0
+ mov r7, #0x98
+_021D852A:
+ ldr r0, [r6, #0x54]
+ cmp r0, r5
+ bne _021D853E
+ add r0, r5, #2
+ add r1, r0, #0
+ mul r1, r7
+ add r0, r4, r1
+ bl MOD64_021D7F38
+ b _021D854C
+_021D853E:
+ add r1, r5, #2
+ mov r0, #0x98
+ mul r0, r1
+ add r0, r4, r0
+ mov r1, #0
+ bl MOD64_021D7F58
+_021D854C:
+ add r5, r5, #1
+ cmp r5, #3
+ blt _021D852A
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD64_021D851C
+
+ thumb_func_start MOD64_021D8554
+MOD64_021D8554: ; 0x021D8554
+ add r2, r0, #0
+ ldr r0, [r2, #0x54]
+ ldr r3, _021D856C ; =MOD64_021D8B64
+ lsl r1, r0, #3
+ mov r0, #6
+ lsl r0, r0, #8
+ add r0, r2, r0
+ add r2, r2, r1
+ ldr r1, [r2, #0x7c]
+ add r2, #0x80
+ ldr r2, [r2]
+ bx r3
+ .align 2, 0
+_021D856C: .word MOD64_021D8B64
+ thumb_func_end MOD64_021D8554
+
+ thumb_func_start MOD64_021D8570
+MOD64_021D8570: ; 0x021D8570
+ push {r3, r4, r5, lr}
+ sub sp, #8
+ add r4, r0, #0
+ ldr r2, [r4, #4]
+ add r5, r1, #0
+ cmp r2, #4
+ bls _021D8580
+ b _021D86D0
+_021D8580:
+ add r2, r2, r2
+ add r2, pc
+ ldrh r2, [r2, #6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_021D858C: ; jump table
+ .short _021D8596 - _021D858C - 2 ; case 0
+ .short _021D85C2 - _021D858C - 2 ; case 1
+ .short _021D8604 - _021D858C - 2 ; case 2
+ .short _021D8644 - _021D858C - 2 ; case 3
+ .short _021D867C - _021D858C - 2 ; case 4
+_021D8596:
+ mov r0, #6
+ lsl r0, r0, #8
+ add r0, r4, r0
+ mov r1, #0
+ bl MOD64_021D8B58
+ add r0, r4, #0
+ bl MOD64_021D8554
+ add r0, r4, #0
+ bl MOD64_021D902C
+ add r0, r4, #0
+ bl MOD64_021D8D40
+ ldr r0, [r4, #4]
+ add sp, #8
+ add r0, r0, #1
+ str r0, [r4, #4]
+ mov r0, #1
+ str r0, [r4, #8]
+ pop {r3, r4, r5, pc}
+_021D85C2:
+ mov r0, #0x65
+ lsl r0, r0, #4
+ add r0, r4, r0
+ mov r1, #1
+ bl MOD64_021D8C30
+ ldr r0, [r4, #0x54]
+ mov r2, #0
+ lsl r0, r0, #2
+ add r1, r4, r0
+ mov r0, #0x81
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ mov r1, #6
+ bl FUN_02007558
+ add r0, r4, #0
+ bl MOD64_021D8DCC
+ cmp r0, #0
+ beq _021D86D0
+ ldr r0, [r4, #0x54]
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ bl MOD64_021D9044
+ bl FUN_02005578
+ ldr r0, [r4, #4]
+ add sp, #8
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, r5, pc}
+_021D8604:
+ ldr r0, _021D86D4 ; =0x0001020F
+ mov r2, #0xff
+ str r0, [sp]
+ str r2, [sp, #4]
+ add r0, r4, #0
+ add r0, #0x98
+ ldr r3, [r4, #0x54]
+ ldr r0, [r0]
+ add r2, #0x41
+ add r3, r3, #1
+ bl MOD64_021D86DC
+ add r0, r4, #0
+ add r1, r4, #0
+ str r5, [sp]
+ add r0, #0x94
+ ldr r0, [r0]
+ ldr r2, _021D86D8 ; =0x0000029E
+ add r1, #0xb0
+ mov r3, #1
+ bl FUN_02002198
+ add r1, r4, #0
+ add r1, #0xb8
+ str r0, [r1]
+ mov r0, #0
+ str r0, [r4, #8]
+ ldr r0, [r4, #4]
+ add sp, #8
+ add r0, r0, #1
+ str r0, [r4, #4]
+ pop {r3, r4, r5, pc}
+_021D8644:
+ add r0, #0xb8
+ ldr r0, [r0]
+ bl FUN_020021AC
+ cmp r0, #0
+ beq _021D8660
+ mov r1, #1
+ mvn r1, r1
+ cmp r0, r1
+ beq _021D866C
+ add r1, r1, #1
+ add sp, #8
+ cmp r0, r1
+ pop {r3, r4, r5, pc}
+_021D8660:
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD64_021D83C4
+ add sp, #8
+ pop {r3, r4, r5, pc}
+_021D866C:
+ ldr r0, [r4, #4]
+ add r0, r0, #1
+ str r0, [r4, #4]
+ add r0, r4, #0
+ bl MOD64_021D8DB0
+ add sp, #8
+ pop {r3, r4, r5, pc}
+_021D867C:
+ bl MOD64_021D8DCC
+ cmp r0, #0
+ beq _021D86D0
+ mov r1, #0
+ add r0, r4, #0
+ mvn r1, r1
+ bl MOD64_021D83C4
+ mov r0, #7
+ str r0, [r4, #4]
+ mov r0, #0x65
+ lsl r0, r0, #4
+ add r0, r4, r0
+ mov r1, #0
+ bl MOD64_021D8C30
+ ldr r0, [r4, #0x54]
+ mov r2, #1
+ lsl r0, r0, #2
+ add r1, r4, r0
+ mov r0, #0x81
+ lsl r0, r0, #2
+ ldr r0, [r1, r0]
+ mov r1, #6
+ bl FUN_02007558
+ ldr r0, _021D86D4 ; =0x0001020F
+ mov r2, #0xff
+ str r0, [sp]
+ add r0, r4, #0
+ str r2, [sp, #4]
+ add r0, #0x98
+ ldr r0, [r0]
+ add r1, r5, #0
+ add r2, #0x41
+ mov r3, #7
+ bl MOD64_021D86DC
+ mov r1, #0x6b
+ lsl r1, r1, #4
+ strb r0, [r4, r1]
+_021D86D0:
+ add sp, #8
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_021D86D4: .word 0x0001020F
+_021D86D8: .word 0x0000029E
+ thumb_func_end MOD64_021D8570
+
+ thumb_func_start MOD64_021D86DC
+MOD64_021D86DC: ; 0x021D86DC
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ add r4, r1, #0
+ add r5, r0, #0
+ add r6, r3, #0
+ mov r0, #0
+ mov r1, #0x1a
+ add r3, r4, #0
+ bl FUN_0200A86C
+ add r4, r0, #0
+ bne _021D86F8
+ bl ErrorHandling
+_021D86F8:
+ add r0, r4, #0
+ add r1, r6, #0
+ bl FUN_0200A914
+ add r6, r0, #0
+ add r0, r5, #0
+ mov r1, #0xf
+ bl FUN_02019620
+ mov r3, #0
+ ldr r0, [sp, #0x2c]
+ str r3, [sp]
+ str r0, [sp, #4]
+ ldr r0, [sp, #0x28]
+ mov r1, #1
+ str r0, [sp, #8]
+ add r0, r5, #0
+ add r2, r6, #0
+ str r3, [sp, #0xc]
+ bl FUN_0201BDE0
+ mov r1, #0
+ mov r2, #2
+ add r7, r0, #0
+ add r0, r5, #0
+ lsl r2, r2, #8
+ add r3, r1, #0
+ bl FUN_0200D0BC
+ add r0, r6, #0
+ bl FUN_02021A20
+ add r0, r4, #0
+ bl FUN_0200A8B8
+ add r0, r7, #0
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD64_021D86DC
+
+ thumb_func_start MOD64_021D8744
+MOD64_021D8744: ; 0x021D8744
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ ldr r4, [sp, #0x30]
+ add r5, r0, #0
+ ldr r0, [r4]
+ add r6, r1, #0
+ add r7, r2, #0
+ str r3, [sp, #0x10]
+ cmp r0, #0
+ beq _021D875C
+ bl ErrorHandling
+_021D875C:
+ mov r0, #0
+ mov r1, #0x1a
+ add r2, r7, #0
+ add r3, r6, #0
+ bl FUN_0200A86C
+ add r6, r0, #0
+ bne _021D8770
+ bl ErrorHandling
+_021D8770:
+ ldr r1, [sp, #0x10]
+ add r0, r6, #0
+ bl FUN_0200A914
+ str r0, [r4]
+ add r0, r5, #0
+ mov r1, #0xf
+ bl FUN_02019620
+ mov r3, #0
+ ldr r0, [sp, #0x2c]
+ str r3, [sp]
+ str r0, [sp, #4]
+ ldr r0, [sp, #0x28]
+ mov r1, #1
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ ldr r2, [r4]
+ add r0, r5, #0
+ bl FUN_0201BDE0
+ mov r1, #0
+ mov r2, #2
+ add r4, r0, #0
+ add r0, r5, #0
+ lsl r2, r2, #8
+ add r3, r1, #0
+ bl FUN_0200D0BC
+ add r0, r6, #0
+ bl FUN_0200A8B8
+ add r0, r4, #0
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D8744
+
+ thumb_func_start MOD64_021D87B8
+MOD64_021D87B8: ; 0x021D87B8
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0xac
+ ldr r0, [r0]
+ bl FUN_02021A20
+ mov r0, #0
+ add r4, #0xac
+ str r0, [r4]
+ pop {r4, pc}
+ thumb_func_end MOD64_021D87B8
+
+ thumb_func_start MOD64_021D87CC
+MOD64_021D87CC: ; 0x021D87CC
+ push {r4, lr}
+ sub sp, #8
+ add r2, r0, #0
+ add r4, r1, #0
+ mov r1, #1
+ add r2, #0xb0
+ strb r1, [r2]
+ add r2, r0, #0
+ mov r3, #0x17
+ add r2, #0xb1
+ strb r3, [r2]
+ add r2, r0, #0
+ mov r3, #0xc
+ add r2, #0xb2
+ strb r3, [r2]
+ add r2, r0, #0
+ mov r3, #5
+ add r2, #0xb3
+ strb r3, [r2]
+ add r2, r0, #0
+ mov r3, #4
+ add r2, #0xb4
+ strb r3, [r2]
+ add r2, r0, #0
+ mov r3, #3
+ add r2, #0xb5
+ strb r3, [r2]
+ add r2, r0, #0
+ mov r3, #0xa7
+ add r2, #0xb6
+ strh r3, [r2]
+ mov r2, #0
+ str r2, [sp]
+ str r4, [sp, #4]
+ add r0, #0x94
+ ldr r0, [r0]
+ ldr r2, _021D882C ; =0x0000029E
+ add r3, r1, #0
+ bl FUN_0200CB00
+ mov r0, #0
+ mov r1, #0x60
+ add r2, r4, #0
+ bl FUN_02002ED0
+ add sp, #8
+ pop {r4, pc}
+ nop
+_021D882C: .word 0x0000029E
+ thumb_func_end MOD64_021D87CC
+
+ thumb_func_start MOD64_021D8830
+MOD64_021D8830: ; 0x021D8830
+ str r1, [r0]
+ str r1, [r0, #4]
+ sub r1, r2, r1
+ str r1, [r0, #8]
+ str r3, [r0, #0xc]
+ bx lr
+ thumb_func_end MOD64_021D8830
+
+ thumb_func_start MOD64_021D883C
+MOD64_021D883C: ; 0x021D883C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldr r3, [r5, #0xc]
+ cmp r1, r3
+ blt _021D884A
+ mov r4, #1
+ b _021D884C
+_021D884A:
+ mov r4, #0
+_021D884C:
+ ldr r2, [r5, #8]
+ add r0, r2, #0
+ mul r0, r1
+ add r1, r3, #0
+ bl _s32_div_f
+ ldr r1, [r5, #4]
+ add r0, r0, r1
+ str r0, [r5]
+ add r0, r4, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D883C
+
+ thumb_func_start MOD64_021D8864
+MOD64_021D8864: ; 0x021D8864
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x40]
+ add r4, r1, #0
+ add r6, r2, #0
+ cmp r0, #0
+ beq _021D8876
+ bl ErrorHandling
+_021D8876:
+ ldr r1, _021D88B8 ; =0xFFFFEAAB
+ ldr r2, _021D88BC ; =0xFFFFDC72
+ add r0, r5, #0
+ mov r3, #6
+ bl MOD64_021D8830
+ add r0, r5, #0
+ mov r1, #0x4b
+ mov r2, #0x32
+ add r0, #0x10
+ lsl r1, r1, #0xe
+ lsl r2, r2, #0xe
+ mov r3, #6
+ bl MOD64_021D8830
+ add r0, r5, #0
+ mov r2, #9
+ add r0, #0x20
+ mov r1, #0
+ lsl r2, r2, #0xe
+ mov r3, #6
+ bl MOD64_021D8830
+ mov r2, #0
+ str r2, [r5, #0x3c]
+ str r4, [r5, #0x30]
+ str r6, [r5, #0x34]
+ ldr r0, _021D88C0 ; =MOD64_021D88C4
+ add r1, r5, #0
+ str r2, [r5, #0x38]
+ bl FUN_0200CA44
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_021D88B8: .word 0xFFFFEAAB
+_021D88BC: .word 0xFFFFDC72
+_021D88C0: .word MOD64_021D88C4
+ thumb_func_end MOD64_021D8864
+
+ thumb_func_start MOD64_021D88C4
+MOD64_021D88C4: ; 0x021D88C4
+ push {r4, r5, r6, lr}
+ sub sp, #8
+ add r5, r1, #0
+ ldr r1, [r5, #0x38]
+ add r6, r0, #0
+ add r0, r5, #0
+ bl MOD64_021D883C
+ add r4, r0, #0
+ add r0, r5, #0
+ ldr r1, [r5, #0x38]
+ add r0, #0x10
+ bl MOD64_021D883C
+ add r0, r5, #0
+ ldr r1, [r5, #0x38]
+ add r0, #0x20
+ bl MOD64_021D883C
+ ldr r1, [r5]
+ add r0, sp, #0
+ strh r1, [r0]
+ mov r1, #0
+ strh r1, [r0, #2]
+ strh r1, [r0, #4]
+ ldr r1, [r5, #0x30]
+ add r0, sp, #0
+ bl FUN_0201EF90
+ ldr r0, [r5, #0x10]
+ ldr r1, [r5, #0x30]
+ bl FUN_0201EFE0
+ ldr r1, [r5, #0x20]
+ ldr r0, [r5, #0x34]
+ str r1, [r0, #8]
+ ldr r0, [r5, #0x38]
+ add r0, r0, #1
+ str r0, [r5, #0x38]
+ cmp r4, #1
+ bne _021D8924
+ add r0, r6, #0
+ bl FUN_0200CAB4
+ mov r0, #0
+ str r0, [r5, #0x40]
+ mov r0, #1
+ str r0, [r5, #0x3c]
+_021D8924:
+ add sp, #8
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD64_021D88C4
+
+ thumb_func_start MOD64_021D8928
+MOD64_021D8928: ; 0x021D8928
+ ldr r0, [r0, #0x3c]
+ bx lr
+ thumb_func_end MOD64_021D8928
+
+ thumb_func_start MOD64_021D892C
+MOD64_021D892C: ; 0x021D892C
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ add r6, r2, #0
+ mov r2, #0xa
+ add r5, r0, #0
+ str r2, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ mov r0, #0x7a
+ add r4, r1, #0
+ str r6, [sp, #8]
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ mov r1, #0x52
+ mov r3, #0
+ bl FUN_02008F34
+ str r0, [r4, #4]
+ bl FUN_02009B04
+ ldr r0, [r4, #4]
+ bl FUN_02009474
+ mov r2, #0xb
+ str r2, [sp]
+ mov r0, #1
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #0x7b
+ str r6, [sp, #0xc]
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ mov r1, #0x52
+ mov r3, #0
+ bl FUN_02008FEC
+ str r0, [r4, #8]
+ bl FUN_02009D68
+ ldr r0, [r4, #8]
+ bl FUN_02009474
+ mov r2, #0xc
+ str r2, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #0x1f
+ str r6, [sp, #8]
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ mov r1, #0x52
+ mov r3, #0
+ bl FUN_020090AC
+ str r0, [r4, #0xc]
+ mov r2, #0xd
+ str r2, [sp]
+ mov r0, #3
+ str r0, [sp, #4]
+ mov r0, #0x7d
+ str r6, [sp, #8]
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ mov r1, #0x52
+ mov r3, #0
+ bl FUN_020090AC
+ str r0, [r4, #0x10]
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD64_021D892C
+
+ thumb_func_start MOD64_021D89B8
+MOD64_021D89B8: ; 0x021D89B8
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4, #4]
+ bl FUN_02009C0C
+ ldr r0, [r4, #8]
+ bl FUN_02009E04
+ mov r0, #0x7a
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ ldr r1, [r4, #4]
+ bl FUN_02009490
+ mov r0, #0x7b
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ ldr r1, [r4, #8]
+ bl FUN_02009490
+ mov r0, #0x1f
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ ldr r1, [r4, #0xc]
+ bl FUN_02009490
+ mov r0, #0x7d
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ ldr r1, [r4, #0x10]
+ bl FUN_02009490
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD64_021D89B8
+
+ thumb_func_start MOD64_021D89FC
+MOD64_021D89FC: ; 0x021D89FC
+ push {r4, r5, r6, lr}
+ sub sp, #0x70
+ add r5, r0, #0
+ mov r0, #0xd
+ str r0, [sp]
+ sub r0, #0xe
+ str r0, [sp, #4]
+ add r6, r2, #0
+ str r0, [sp, #8]
+ mov r0, #0
+ mov r2, #0x7a
+ add r4, r1, #0
+ str r0, [sp, #0xc]
+ mov r1, #1
+ lsl r2, r2, #2
+ str r1, [sp, #0x10]
+ ldr r1, [r5, r2]
+ mov r3, #0xc
+ str r1, [sp, #0x14]
+ add r1, r2, #4
+ ldr r1, [r5, r1]
+ str r1, [sp, #0x18]
+ add r1, r2, #0
+ add r1, #8
+ ldr r1, [r5, r1]
+ add r2, #0xc
+ str r1, [sp, #0x1c]
+ ldr r1, [r5, r2]
+ mov r2, #0xb
+ str r1, [sp, #0x20]
+ str r0, [sp, #0x24]
+ str r0, [sp, #0x28]
+ add r0, sp, #0x4c
+ mov r1, #0xa
+ bl FUN_02008AA4
+ mov r0, #0x79
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ str r0, [sp, #0x2c]
+ add r0, sp, #0x4c
+ str r0, [sp, #0x30]
+ mov r0, #0x20
+ str r0, [sp, #0x40]
+ mov r0, #1
+ str r0, [sp, #0x44]
+ mov r0, #0
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x38]
+ add r0, sp, #0x2c
+ str r6, [sp, #0x48]
+ bl FUN_0201FF84
+ mov r1, #0
+ str r0, [r4]
+ bl FUN_020200A0
+ mov r0, #0
+ str r0, [r4, #0x1c]
+ str r0, [r4, #0x20]
+ add sp, #0x70
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD64_021D89FC
+
+ thumb_func_start MOD64_021D8A78
+MOD64_021D8A78: ; 0x021D8A78
+ ldr r3, _021D8A80 ; =0x0201FFC9
+ ldr r0, [r0]
+ bx r3
+ nop
+_021D8A80: .word 0x0201FFC9
+ thumb_func_end MOD64_021D8A78
+
+ thumb_func_start MOD64_021D8A84
+MOD64_021D8A84: ; 0x021D8A84
+ mov r3, #0
+ str r3, [r0]
+ str r1, [r0, #4]
+ str r2, [r0, #8]
+ str r3, [r0, #0xc]
+ bx lr
+ thumb_func_end MOD64_021D8A84
+
+ thumb_func_start MOD64_021D8A90
+MOD64_021D8A90: ; 0x021D8A90
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r1, [r4, #0xc]
+ ldr r0, _021D8AD8 ; =0x0000FFFF
+ mul r0, r1
+ ldr r1, [r4, #8]
+ bl _s32_div_f
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ asr r0, r0, #4
+ lsl r1, r0, #2
+ ldr r0, _021D8ADC ; =0x020FFA38
+ ldr r2, [r4, #4]
+ ldrsh r0, [r0, r1]
+ asr r3, r2, #0x1f
+ asr r1, r0, #0x1f
+ bl _ll_mul
+ mov r2, #2
+ mov r3, #0
+ lsl r2, r2, #0xa
+ add r2, r0, r2
+ adc r1, r3
+ lsl r0, r1, #0x14
+ lsr r1, r2, #0xc
+ orr r1, r0
+ str r1, [r4]
+ ldr r0, [r4, #0xc]
+ ldr r1, [r4, #8]
+ add r0, r0, #1
+ bl _s32_div_f
+ str r1, [r4, #0xc]
+ pop {r4, pc}
+ nop
+_021D8AD8: .word 0x0000FFFF
+_021D8ADC: .word 0x020FFA38
+ thumb_func_end MOD64_021D8A90
+
+ thumb_func_start MOD64_021D8AE0
+MOD64_021D8AE0: ; 0x021D8AE0
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x28]
+ cmp r0, #0
+ beq _021D8AEE
+ bl ErrorHandling
+_021D8AEE:
+ add r0, r4, #0
+ mov r1, #2
+ add r0, #0x2c
+ lsl r1, r1, #0xe
+ mov r2, #0x20
+ bl MOD64_021D8A84
+ ldr r0, _021D8B0C ; =MOD64_021D8B10
+ add r1, r4, #0
+ mov r2, #0
+ bl FUN_0200CA44
+ str r0, [r4, #0x28]
+ pop {r4, pc}
+ nop
+_021D8B0C: .word MOD64_021D8B10
+ thumb_func_end MOD64_021D8AE0
+
+ thumb_func_start MOD64_021D8B10
+MOD64_021D8B10: ; 0x021D8B10
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r4, r1, #0
+ add r0, r4, #0
+ add r0, #0x2c
+ bl MOD64_021D8A90
+ add r5, r4, #0
+ add r5, #0x1c
+ add r3, sp, #0
+ ldmia r5!, {r0, r1}
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldr r0, [r5]
+ str r0, [r3]
+ ldr r1, [sp, #4]
+ ldr r0, [r4, #0x2c]
+ add r0, r1, r0
+ str r0, [sp, #4]
+ ldr r0, [r4]
+ add r1, r2, #0
+ bl FUN_02020044
+ add sp, #0xc
+ pop {r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D8B10
+
+ thumb_func_start MOD64_021D8B44
+MOD64_021D8B44: ; 0x021D8B44
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x28]
+ cmp r0, #0
+ beq _021D8B56
+ bl FUN_0200CAB4
+ mov r0, #0
+ str r0, [r4, #0x28]
+_021D8B56:
+ pop {r4, pc}
+ thumb_func_end MOD64_021D8B44
+
+ thumb_func_start MOD64_021D8B58
+MOD64_021D8B58: ; 0x021D8B58
+ ldr r3, _021D8B60 ; =0x020200A1
+ ldr r0, [r0]
+ bx r3
+ nop
+_021D8B60: .word 0x020200A1
+ thumb_func_end MOD64_021D8B58
+
+ thumb_func_start MOD64_021D8B64
+MOD64_021D8B64: ; 0x021D8B64
+ lsl r1, r1, #0xc
+ str r1, [r0, #0x1c]
+ lsl r1, r2, #0xc
+ str r1, [r0, #0x20]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD64_021D8B64
+
+ thumb_func_start MOD64_021D8B70
+MOD64_021D8B70: ; 0x021D8B70
+ push {r4, r5, r6, lr}
+ sub sp, #0x38
+ add r5, r0, #0
+ add r3, r5, #0
+ add r6, r2, #0
+ add r4, r1, #0
+ mov r0, #0x52
+ mov r1, #0xe
+ mov r2, #0
+ add r3, #0x14
+ str r6, [sp]
+ bl FUN_02006BB0
+ add r2, r5, #0
+ str r0, [r5, #0xc]
+ mov r0, #0x52
+ mov r1, #0xf
+ add r2, #0x18
+ add r3, r6, #0
+ bl FUN_02006C08
+ str r0, [r5, #0x10]
+ ldr r0, _021D8C04 ; =0x0000064C
+ ldr r0, [r4, r0]
+ str r0, [sp, #4]
+ ldr r0, [r5, #0x14]
+ str r0, [sp, #8]
+ add r0, sp, #4
+ bl FUN_02013D98
+ str r0, [r5]
+ ldr r0, _021D8C04 ; =0x0000064C
+ ldr r0, [r4, r0]
+ str r0, [sp, #0x2c]
+ ldr r0, [r5, #0x18]
+ str r0, [sp, #0x30]
+ mov r0, #1
+ str r0, [sp, #0x34]
+ add r0, sp, #0x2c
+ bl FUN_02013E14
+ str r0, [r5, #4]
+ ldr r0, _021D8C04 ; =0x0000064C
+ mov r2, #0
+ ldr r0, [r4, r0]
+ mov r1, #0x1f
+ str r0, [sp, #0xc]
+ ldr r0, [r5]
+ str r0, [sp, #0x10]
+ ldr r0, [r5, #4]
+ str r0, [sp, #0x14]
+ add r0, sp, #4
+ strh r2, [r0, #0x14]
+ strh r2, [r0, #0x16]
+ strh r2, [r0, #0x18]
+ str r1, [sp, #0x20]
+ ldr r1, _021D8C08 ; =0x000003FE
+ str r1, [sp, #0x24]
+ strh r2, [r0, #0x24]
+ add r0, sp, #0xc
+ bl FUN_02013E84
+ str r0, [r5, #8]
+ mov r1, #0
+ bl FUN_02013EB0
+ mov r1, #0x40
+ ldr r0, [r5, #8]
+ add r2, r1, #0
+ bl FUN_02013ED8
+ add sp, #0x38
+ pop {r4, r5, r6, pc}
+ nop
+_021D8C04: .word 0x0000064C
+_021D8C08: .word 0x000003FE
+ thumb_func_end MOD64_021D8B70
+
+ thumb_func_start MOD64_021D8C0C
+MOD64_021D8C0C: ; 0x021D8C0C
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #8]
+ bl FUN_02013EA8
+ ldr r0, [r4]
+ bl FUN_02013DD4
+ ldr r0, [r4, #4]
+ bl FUN_02013E44
+ ldr r0, [r4, #0xc]
+ bl FUN_02016A18
+ ldr r0, [r4, #0x10]
+ bl FUN_02016A18
+ pop {r4, pc}
+ thumb_func_end MOD64_021D8C0C
+
+ thumb_func_start MOD64_021D8C30
+MOD64_021D8C30: ; 0x021D8C30
+ ldr r3, _021D8C38 ; =0x02013EB1
+ ldr r0, [r0, #8]
+ bx r3
+ nop
+_021D8C38: .word 0x02013EB1
+ thumb_func_end MOD64_021D8C30
+
+ thumb_func_start MOD64_021D8C3C
+MOD64_021D8C3C: ; 0x021D8C3C
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x54]
+ add r6, r1, #0
+ add r7, r2, #0
+ str r3, [sp]
+ cmp r0, #0
+ beq _021D8C50
+ bl ErrorHandling
+_021D8C50:
+ ldr r4, [sp, #0x24]
+ add r0, r5, #0
+ add r0, #0x1c
+ add r1, r6, #0
+ add r2, r7, #0
+ add r3, r4, #0
+ bl MOD64_021D8830
+ add r0, r5, #0
+ ldr r1, [sp]
+ ldr r2, [sp, #0x18]
+ add r0, #0x2c
+ add r3, r4, #0
+ bl MOD64_021D8830
+ add r0, r5, #0
+ ldr r1, [sp, #0x1c]
+ ldr r2, [sp, #0x20]
+ add r0, #0x3c
+ add r3, r4, #0
+ bl MOD64_021D8830
+ mov r2, #0
+ str r2, [r5, #0x4c]
+ mov r0, #1
+ str r0, [r5, #0x50]
+ ldr r0, _021D8C90 ; =MOD64_021D8CC8
+ add r1, r5, #0
+ bl FUN_0200CA44
+ str r0, [r5, #0x54]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021D8C90: .word MOD64_021D8CC8
+ thumb_func_end MOD64_021D8C3C
+
+ thumb_func_start MOD64_021D8C94
+MOD64_021D8C94: ; 0x021D8C94
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x54]
+ cmp r0, #0
+ beq _021D8CA2
+ bl ErrorHandling
+_021D8CA2:
+ mov r0, #1
+ mvn r0, r0
+ str r0, [r4, #0x50]
+ ldr r1, [r4, #0x28]
+ ldr r0, [r4, #0x4c]
+ cmp r0, r1
+ blt _021D8CB6
+ ldr r0, [r4, #0x50]
+ add r0, r1, r0
+ str r0, [r4, #0x4c]
+_021D8CB6:
+ ldr r0, _021D8CC4 ; =MOD64_021D8CC8
+ add r1, r4, #0
+ mov r2, #0
+ bl FUN_0200CA44
+ str r0, [r4, #0x54]
+ pop {r4, pc}
+ .align 2, 0
+_021D8CC4: .word MOD64_021D8CC8
+ thumb_func_end MOD64_021D8C94
+
+ thumb_func_start MOD64_021D8CC8
+MOD64_021D8CC8: ; 0x021D8CC8
+ push {r4, r5, r6, lr}
+ add r5, r1, #0
+ add r6, r0, #0
+ add r0, r5, #0
+ ldr r1, [r5, #0x4c]
+ add r0, #0x1c
+ bl MOD64_021D883C
+ add r4, r0, #0
+ add r0, r5, #0
+ ldr r1, [r5, #0x4c]
+ add r0, #0x2c
+ bl MOD64_021D883C
+ add r0, r5, #0
+ ldr r1, [r5, #0x4c]
+ add r0, #0x3c
+ bl MOD64_021D883C
+ mov r2, #1
+ ldr r1, [r5, #0x1c]
+ lsl r2, r2, #0x12
+ sub r1, r1, r2
+ ldr r3, [r5, #0x2c]
+ lsl r1, r1, #4
+ sub r2, r3, r2
+ lsl r2, r2, #4
+ ldr r0, [r5, #8]
+ asr r1, r1, #0x10
+ asr r2, r2, #0x10
+ bl FUN_02013EC4
+ ldr r1, [r5, #0x3c]
+ ldr r0, [r5, #8]
+ add r2, r1, #0
+ bl FUN_02013EE0
+ cmp r4, #1
+ beq _021D8D1C
+ ldr r0, [r5, #0x4c]
+ cmp r0, #0
+ bge _021D8D26
+_021D8D1C:
+ add r0, r6, #0
+ bl FUN_0200CAB4
+ mov r0, #0
+ str r0, [r5, #0x54]
+_021D8D26:
+ ldr r1, [r5, #0x4c]
+ ldr r0, [r5, #0x50]
+ add r0, r1, r0
+ str r0, [r5, #0x4c]
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD64_021D8CC8
+
+ thumb_func_start MOD64_021D8D30
+MOD64_021D8D30: ; 0x021D8D30
+ ldr r0, [r0, #0x54]
+ cmp r0, #0
+ bne _021D8D3A
+ mov r0, #1
+ bx lr
+_021D8D3A:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD64_021D8D30
+
+ thumb_func_start MOD64_021D8D40
+MOD64_021D8D40: ; 0x021D8D40
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x14
+ add r5, r0, #0
+ ldr r0, [r5, #0x54]
+ mov r2, #1
+ lsl r0, r0, #3
+ add r1, r5, r0
+ ldr r0, [r1, #0x7c]
+ add r1, #0x80
+ lsl r6, r0, #0xc
+ ldr r0, [r1]
+ ldr r1, _021D8DAC ; =0x00000666
+ add r0, #0x30
+ lsl r4, r0, #0xc
+ mov r0, #6
+ lsl r0, r0, #0x10
+ str r0, [sp]
+ str r1, [sp, #4]
+ lsl r2, r2, #0xc
+ str r2, [sp, #8]
+ mov r0, #6
+ sub r1, #0x16
+ str r0, [sp, #0xc]
+ add r0, r5, r1
+ add r1, r6, #0
+ lsl r2, r2, #7
+ add r3, r4, #0
+ bl MOD64_021D8C3C
+ mov r0, #6
+ mov r3, #1
+ mov r1, #0x21
+ str r4, [sp]
+ lsl r0, r0, #0x10
+ str r0, [sp, #4]
+ ldr r0, _021D8DAC ; =0x00000666
+ lsl r3, r3, #0xc
+ str r0, [sp, #8]
+ str r3, [sp, #0xc]
+ mov r0, #6
+ str r0, [sp, #0x10]
+ ldr r2, [r5, #0x54]
+ lsl r1, r1, #4
+ lsl r2, r2, #2
+ add r0, r5, r1
+ add r2, r5, r2
+ sub r1, #0xc
+ ldr r1, [r2, r1]
+ add r2, r6, #0
+ lsl r3, r3, #7
+ bl MOD64_021D8DDC
+ add sp, #0x14
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+_021D8DAC: .word 0x00000666
+ thumb_func_end MOD64_021D8D40
+
+ thumb_func_start MOD64_021D8DB0
+MOD64_021D8DB0: ; 0x021D8DB0
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #0x65
+ lsl r0, r0, #4
+ add r0, r4, r0
+ bl MOD64_021D8C94
+ mov r0, #0x21
+ lsl r0, r0, #4
+ add r0, r4, r0
+ bl MOD64_021D8E34
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D8DB0
+
+ thumb_func_start MOD64_021D8DCC
+MOD64_021D8DCC: ; 0x021D8DCC
+ mov r1, #0x65
+ lsl r1, r1, #4
+ ldr r3, _021D8DD8 ; =MOD64_021D8D30
+ add r0, r0, r1
+ bx r3
+ nop
+_021D8DD8: .word MOD64_021D8D30
+ thumb_func_end MOD64_021D8DCC
+
+ thumb_func_start MOD64_021D8DDC
+MOD64_021D8DDC: ; 0x021D8DDC
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ ldr r0, [r5, #0x3c]
+ add r6, r1, #0
+ add r7, r2, #0
+ str r3, [sp]
+ cmp r0, #0
+ beq _021D8DF0
+ bl ErrorHandling
+_021D8DF0:
+ ldr r4, [sp, #0x28]
+ ldr r2, [sp]
+ add r0, r5, #4
+ add r1, r7, #0
+ add r3, r4, #0
+ bl MOD64_021D8830
+ add r0, r5, #0
+ ldr r1, [sp, #0x18]
+ ldr r2, [sp, #0x1c]
+ add r0, #0x14
+ add r3, r4, #0
+ bl MOD64_021D8830
+ add r0, r5, #0
+ ldr r1, [sp, #0x20]
+ ldr r2, [sp, #0x24]
+ add r0, #0x24
+ add r3, r4, #0
+ bl MOD64_021D8830
+ str r6, [r5]
+ mov r2, #0
+ str r2, [r5, #0x34]
+ mov r0, #1
+ str r0, [r5, #0x38]
+ ldr r0, _021D8E30 ; =MOD64_021D8E68
+ add r1, r5, #0
+ bl FUN_0200CA44
+ str r0, [r5, #0x3c]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_021D8E30: .word MOD64_021D8E68
+ thumb_func_end MOD64_021D8DDC
+
+ thumb_func_start MOD64_021D8E34
+MOD64_021D8E34: ; 0x021D8E34
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x3c]
+ cmp r0, #0
+ beq _021D8E42
+ bl ErrorHandling
+_021D8E42:
+ mov r0, #1
+ mvn r0, r0
+ str r0, [r4, #0x38]
+ ldr r1, [r4, #0x10]
+ ldr r0, [r4, #0x34]
+ cmp r0, r1
+ blt _021D8E56
+ ldr r0, [r4, #0x38]
+ add r0, r1, r0
+ str r0, [r4, #0x34]
+_021D8E56:
+ ldr r0, _021D8E64 ; =MOD64_021D8E68
+ add r1, r4, #0
+ mov r2, #0
+ bl FUN_0200CA44
+ str r0, [r4, #0x3c]
+ pop {r4, pc}
+ .align 2, 0
+_021D8E64: .word MOD64_021D8E68
+ thumb_func_end MOD64_021D8E34
+
+ thumb_func_start MOD64_021D8E68
+MOD64_021D8E68: ; 0x021D8E68
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r1, #0
+ ldr r1, [r5, #0x34]
+ add r7, r0, #0
+ add r0, r5, #4
+ bl MOD64_021D883C
+ add r6, r0, #0
+ add r0, r5, #0
+ ldr r1, [r5, #0x34]
+ add r0, #0x14
+ bl MOD64_021D883C
+ add r0, r5, #0
+ ldr r1, [r5, #0x34]
+ add r0, #0x24
+ bl MOD64_021D883C
+ ldr r2, [r5, #0x24]
+ asr r0, r2, #0x1f
+ lsr r1, r2, #0xc
+ lsl r0, r0, #0x14
+ lsl r3, r2, #0x14
+ mov r2, #2
+ orr r0, r1
+ mov r1, #0
+ lsl r2, r2, #0xa
+ add r2, r3, r2
+ adc r0, r1
+ lsl r0, r0, #0x14
+ lsr r2, r2, #0xc
+ orr r2, r0
+ asr r4, r2, #0xc
+ ldr r2, [r5, #4]
+ ldr r0, [r5]
+ asr r2, r2, #0xc
+ bl FUN_02007558
+ ldr r2, [r5, #0x14]
+ ldr r0, [r5]
+ mov r1, #1
+ asr r2, r2, #0xc
+ bl FUN_02007558
+ ldr r0, [r5]
+ mov r1, #0xc
+ add r2, r4, #0
+ bl FUN_02007558
+ ldr r0, [r5]
+ mov r1, #0xd
+ add r2, r4, #0
+ bl FUN_02007558
+ cmp r6, #1
+ beq _021D8EDE
+ ldr r0, [r5, #0x34]
+ cmp r0, #0
+ bge _021D8EE8
+_021D8EDE:
+ add r0, r7, #0
+ bl FUN_0200CAB4
+ mov r0, #0
+ str r0, [r5, #0x3c]
+_021D8EE8:
+ ldr r1, [r5, #0x34]
+ ldr r0, [r5, #0x38]
+ add r0, r1, r0
+ str r0, [r5, #0x34]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D8E68
+
+ thumb_func_start MOD64_021D8EF4
+MOD64_021D8EF4: ; 0x021D8EF4
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x20
+ str r0, [sp, #0x14]
+ mov r0, #0x20
+ str r0, [sp]
+ add r0, r1, #0
+ str r1, [sp, #0x18]
+ str r0, [sp, #4]
+ mov r0, #0x52
+ mov r1, #0x11
+ mov r2, #0
+ mov r3, #0xa0
+ bl FUN_02006930
+ ldr r5, [sp, #0x14]
+ mov r4, #0
+ mov r6, #1
+_021D8F16:
+ ldr r0, [sp, #0x18]
+ mov r1, #1
+ bl FUN_02018FF4
+ add r1, r5, #0
+ add r1, #0x9c
+ str r0, [r1]
+ add r0, r5, #0
+ add r0, #0x9c
+ ldr r0, [r0]
+ bl FUN_0201901C
+ cmp r4, #0
+ beq _021D8F3C
+ cmp r4, #1
+ beq _021D8F44
+ cmp r4, #2
+ beq _021D8F4C
+ b _021D8F52
+_021D8F3C:
+ mov r0, #0xc
+ str r0, [sp, #0x1c]
+ mov r7, #4
+ b _021D8F52
+_021D8F44:
+ mov r0, #4
+ str r0, [sp, #0x1c]
+ mov r7, #0xe
+ b _021D8F52
+_021D8F4C:
+ mov r0, #0x14
+ str r0, [sp, #0x1c]
+ mov r7, #0xd
+_021D8F52:
+ lsl r0, r7, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #0xb
+ str r0, [sp, #4]
+ mov r0, #4
+ str r0, [sp, #8]
+ mov r0, #5
+ str r0, [sp, #0xc]
+ lsl r0, r6, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ add r1, r5, #0
+ ldr r3, [sp, #0x1c]
+ add r0, #0x94
+ add r1, #0x9c
+ lsl r3, r3, #0x18
+ ldr r0, [r0]
+ ldr r1, [r1]
+ mov r2, #3
+ lsr r3, r3, #0x18
+ bl FUN_02019064
+ ldr r0, _021D8FA8 ; =0x0001020A
+ mov r2, #5
+ str r0, [sp]
+ add r0, r5, #0
+ add r0, #0x9c
+ ldr r0, [r0]
+ ldr r1, [sp, #0x18]
+ lsl r2, r2, #6
+ add r3, r4, #4
+ bl MOD64_021D8FD0
+ add r4, r4, #1
+ add r5, r5, #4
+ add r6, #0x40
+ cmp r4, #3
+ blt _021D8F16
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_021D8FA8: .word 0x0001020A
+ thumb_func_end MOD64_021D8EF4
+
+ thumb_func_start MOD64_021D8FAC
+MOD64_021D8FAC: ; 0x021D8FAC
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r4, #0
+_021D8FB2:
+ add r0, r5, #0
+ add r0, #0x9c
+ ldr r0, [r0]
+ bl FUN_02019178
+ add r0, r5, #0
+ add r0, #0x9c
+ ldr r0, [r0]
+ bl FUN_02016A18
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #3
+ blt _021D8FB2
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD64_021D8FAC
+
+ thumb_func_start MOD64_021D8FD0
+MOD64_021D8FD0: ; 0x021D8FD0
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ add r4, r1, #0
+ add r5, r0, #0
+ add r6, r3, #0
+ mov r0, #0
+ mov r1, #0x1a
+ add r3, r4, #0
+ bl FUN_0200A86C
+ add r4, r0, #0
+ bne _021D8FEC
+ bl ErrorHandling
+_021D8FEC:
+ add r0, r4, #0
+ add r1, r6, #0
+ bl FUN_0200A914
+ ldr r1, [sp, #0x20]
+ add r6, r0, #0
+ lsl r1, r1, #0x18
+ add r0, r5, #0
+ lsr r1, r1, #0x18
+ bl FUN_02019620
+ mov r1, #0
+ str r1, [sp]
+ mov r0, #0xff
+ str r0, [sp, #4]
+ ldr r0, [sp, #0x20]
+ add r2, r6, #0
+ str r0, [sp, #8]
+ add r0, r5, #0
+ mov r3, #1
+ str r1, [sp, #0xc]
+ bl FUN_0201BDE0
+ add r0, r6, #0
+ bl FUN_02021A20
+ add r0, r4, #0
+ bl FUN_0200A8B8
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD64_021D8FD0
+
+ thumb_func_start MOD64_021D902C
+MOD64_021D902C: ; 0x021D902C
+ add r1, r0, #0
+ add r1, #0xa8
+ ldr r1, [r1]
+ ldr r3, _021D9040 ; =0x02019571
+ lsl r1, r1, #2
+ add r0, r0, r1
+ add r0, #0x9c
+ ldr r0, [r0]
+ bx r3
+ nop
+_021D9040: .word 0x02019571
+ thumb_func_end MOD64_021D902C
+
+ thumb_func_start MOD64_021D9044
+MOD64_021D9044: ; 0x021D9044
+ push {r3, lr}
+ cmp r0, #0
+ beq _021D9054
+ cmp r0, #1
+ beq _021D9058
+ cmp r0, #2
+ beq _021D905C
+ b _021D9060
+_021D9054:
+ ldr r0, _021D9068 ; =0x00000183
+ pop {r3, pc}
+_021D9058:
+ ldr r0, _021D906C ; =0x00000186
+ pop {r3, pc}
+_021D905C:
+ ldr r0, _021D9070 ; =0x00000189
+ pop {r3, pc}
+_021D9060:
+ bl ErrorHandling
+ mov r0, #0
+ pop {r3, pc}
+ .align 2, 0
+_021D9068: .word 0x00000183
+_021D906C: .word 0x00000186
+_021D9070: .word 0x00000189
+ thumb_func_end MOD64_021D9044
+
+ .section .rodata
+ ; 0x021D9074
+ .incbin "baserom.nds", 0x2B9194, 0x9C
+ ; 0x021D9110