summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRevo <projectrevotpp@hotmail.com>2020-04-27 22:37:36 -0400
committerGitHub <noreply@github.com>2020-04-27 22:37:36 -0400
commite56eab5ba606e2095e4565bcfab14b25f9ff655d (patch)
tree1ea0fb95ecd495bd136be822ca30c6bc9af91232
parent96d9f081dfad6fad2b6519b0f2b0653ac3480604 (diff)
parentbe27df15551017c0f4d0aaf81bf2fd253aa03736 (diff)
Merge pull request #35 from PikalaxALT/pikalax_work
Disassemble arm7 dtcm
-rw-r--r--arm7/arm7.lcf6
-rw-r--r--arm7/asm/arm7_rom.s77
-rw-r--r--arm7/asm/dtcm.s10954
-rw-r--r--arm7/asm/dtcm2.s7570
-rw-r--r--arm7/asm/dtcm_data.s112
-rw-r--r--arm7/asm/libsyscall.s140
-rw-r--r--arm7/global.inc234
-rw-r--r--arm7/undefined_syms.txt148
-rw-r--r--arm9/asm/libmwcc.s1
9 files changed, 19165 insertions, 77 deletions
diff --git a/arm7/arm7.lcf b/arm7/arm7.lcf
index fdffb4d0..9a1b8879 100644
--- a/arm7/arm7.lcf
+++ b/arm7/arm7.lcf
@@ -3,6 +3,7 @@ MEMORY {
.sbss (RWX) : ORIGIN=AFTER(.text), LENGTH=0
.itcm (RWX) : ORIGIN=0x027E0000, LENGTH=0
.dtcm (RWX) : ORIGIN=0x037F8000, LENGTH=0
+ .dtcm.bss (RWX) : ORIGIN=0x0380770C, LENGTH=0
.ewram (RW) : ORIGIN=0x06000000, LENGTH=0
.autoload (R) : ORIGIN=0x023A92F8, LENGTH=0
}
@@ -24,7 +25,10 @@ SECTIONS {
} > .itcm
.dtcm : AT (0x28C) {
- arm7_rom.o (.dtcm)
+ dtcm.o (.text)
+ libsyscall.o (.text)
+ dtcm2.o (.text)
+ dtcm_data.o (.data)
} > .dtcm
.ewram : AT (0xF998) {
diff --git a/arm7/asm/arm7_rom.s b/arm7/asm/arm7_rom.s
index b2070728..735d0652 100644
--- a/arm7/asm/arm7_rom.s
+++ b/arm7/asm/arm7_rom.s
@@ -3,8 +3,8 @@
.include "global.inc"
.section .itcm
- arm_func_start FUNC_027E0000
-FUNC_027E0000: ; 0x027E0000 load at 0x023801B0
+ arm_func_start FUN_027E0000
+FUN_027E0000: ; 0x027E0000 load at 0x023801B0
stmdb sp!, {r4, r5, r6, lr}
ldr r6, [pc, #180] ; 0x270
ldr r3, [pc, #180] ; 0x274
@@ -70,78 +70,5 @@ _027E00D0: .word 0x0380A3F4
_027E00D4: .word 0x0380A3FC
_027E00D8: .word 0x027FAFCC
- .section .dtcm
- .incbin "baserom.nds", 0x30D28C, 0x31F0
-
- arm_func_start FUN_037FB1F0
-FUN_037FB1F0: ; 0x037FB1F0
- .incbin "baserom.nds", 0x31047C, 0x5EE4
-
- thumb_func_start SVC_SoftReset
-SVC_SoftReset: ; 0x02389360
- swi 0
- bx lr
-
- thumb_func_start SVC_WaitByLoop
-SVC_WaitByLoop: ; 0x02389364
- swi 3
- bx lr
-
- thumb_func_start SVC_WaitIntr
-SVC_WaitIntr: ; 0x02389368
- ldr r2, =0x04000000
- mov ip, r2
- mov r2, #0x0
- swi 4
- bx lr
- .pool
-
- thumb_func_start SVC_WaitVBlankIntr
-SVC_WaitVBlankIntr:
- mov r2, #0x0
- swi 5
- bx lr
-
- non_word_aligned_thumb_func_start SVC_Halt
-SVC_Halt:
- swi 6
- bx lr
-
- non_word_aligned_thumb_func_start SVC_Stop
-SVC_Stop:
- swi 7
- bx lr
-
- non_word_aligned_thumb_func_start SVC_SoundBias
-SVC_SoundBias:
- swi 8
- bx lr
-
- non_word_aligned_thumb_func_start SVC_SoundBiasSet
-SVC_SoundBiasSet:
- add r1, r0, #0x0
- mov r0, #0x1
- swi 8
- bx lr
-
- non_word_aligned_thumb_func_start SVC_SoundBiasReset
-SVC_SoundBiasReset:
- add r1, r0, #0x0
- mov r0, #0x0
- swi 8
- bx lr
-
- non_word_aligned_thumb_func_start SVC_Div
-SVC_Div:
- swi 9
- bx lr
-
- non_word_aligned_thumb_func_start SVC_DivRem
-SVC_DivRem:
- swi 9
- add r0, r1, #0x0
- bx lr
- .incbin "baserom.nds", 0x3163a4, 0x65F4
-
.section .ewram
.incbin "baserom.nds", 0x31C998, 0x19960
diff --git a/arm7/asm/dtcm.s b/arm7/asm/dtcm.s
new file mode 100644
index 00000000..4c4c9cbc
--- /dev/null
+++ b/arm7/asm/dtcm.s
@@ -0,0 +1,10954 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+ arm_func_start FUN_037F8000
+FUN_037F8000: ;@ 0x037F8000
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037F8028 ;@ =_03809F34
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037F801C
+ bl FUN_03802BEC
+_037F801C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F8028: .word _03809F34
+
+ arm_func_start FUN_037F802C
+FUN_037F802C: ;@ 0x037F802C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r8, #0
+ bl FUN_037F81E8
+ cmp r0, #0
+ beq _037F80F8
+ bl FUN_037F81C4
+ mov r7, r0
+ mov r9, r8
+ mov r4, #1
+ mov fp, #138 ;@ 0x8a
+ mov r5, #112 ;@ 0x70
+_037F8060:
+ add r6, sl, r9, lsl #8
+ ldr r0, _037F81B4 ;@ =0x0000FFFF
+ mov r1, r6
+ mov r2, r5
+ bl FUN_037F81B8
+ mov r2, r6
+ ldrh r1, [r2, #114] ;@ 0x72
+ cmp r0, r1
+ bne _037F80E0
+ ldrh r0, [r2, #112] ;@ 0x70
+ cmp r0, #128 ;@ 0x80
+ bcs _037F80E0
+ ldr r0, _037F81B4 ;@ =0x0000FFFF
+ add r1, r6, #116 ;@ 0x74
+ mov r2, fp
+ bl FUN_037F81B8
+ mov r3, r6
+ ldrh r1, [r3, #254] ;@ 0xfe
+ cmp r0, r1
+ bne _037F80E0
+ ldrh r2, [r3, #118] ;@ 0x76
+ ldrb r0, [r3, #117] ;@ 0x75
+ mov r1, r4, lsl r0
+ ands r1, r1, r2
+ beq _037F80E0
+ ands r1, r7, r2
+ ldrneh r1, [r6, #100] ;@ 0x64
+ bicne r1, r1, #7
+ andne r0, r0, #7
+ orrne r0, r1, r0
+ strneh r0, [r6, #100] ;@ 0x64
+ orr r8, r8, r4, lsl r9
+_037F80E0:
+ add r0, r9, #1
+ mov r0, r0, lsl #16
+ mov r9, r0, lsr #16
+ cmp r9, #2
+ bcc _037F8060
+ b _037F8158
+_037F80F8:
+ bl FUN_037F81C4
+ cmp r0, #0
+ movne r0, #3
+ bne _037F81A8
+ mov r7, r8
+ mov r4, #1
+ ldr r6, _037F81B4 ;@ =0x0000FFFF
+ mov r5, #112 ;@ 0x70
+_037F8118:
+ mov r0, r6
+ add r1, sl, r7, lsl #8
+ mov r2, r5
+ bl FUN_037F81B8
+ add r2, sl, r7, lsl #8
+ ldrh r1, [r2, #114] ;@ 0x72
+ cmp r0, r1
+ bne _037F8144
+ ldrh r0, [r2, #112] ;@ 0x70
+ cmp r0, #128 ;@ 0x80
+ orrcc r8, r8, r4, lsl r7
+_037F8144:
+ add r0, r7, #1
+ mov r0, r0, lsl #16
+ mov r7, r0, lsr #16
+ cmp r7, #2
+ bcc _037F8118
+_037F8158:
+ cmp r8, #1
+ beq _037F8174
+ cmp r8, #2
+ beq _037F8174
+ cmp r8, #3
+ beq _037F817C
+ b _037F81A4
+_037F8174:
+ mov r0, r8
+ b _037F81A8
+_037F817C:
+ ldrh r0, [sl, #112] ;@ 0x70
+ add r0, r0, #1
+ and r0, r0, #127 ;@ 0x7f
+ and r1, r0, #255 ;@ 0xff
+ add r0, sl, #256 ;@ 0x100
+ ldrh r0, [r0, #112] ;@ 0x70
+ cmp r1, r0
+ moveq r0, #2
+ movne r0, #1
+ b _037F81A8
+_037F81A4:
+ mov r0, #0
+_037F81A8:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037F81B4: .word 0x0000FFFF
+
+ arm_func_start FUN_037F81B8
+FUN_037F81B8: ;@ 0x037F81B8
+ ldr ip, _037F81C0 ;@ =SVC_GetCRC16
+ bx ip
+_037F81C0: .word SVC_GetCRC16
+
+ arm_func_start FUN_037F81C4
+FUN_037F81C4: ;@ 0x037F81C4
+ mov r0, #0
+ ldr r1, _037F81E4 ;@ =0x027FFE1D
+ ldrb r1, [r1]
+ cmp r1, #128 ;@ 0x80
+ orreq r0, r0, #64 ;@ 0x40
+ moveq r0, r0, lsl #16
+ moveq r0, r0, lsr #16
+ bx lr
+_037F81E4: .word 0x027FFE1D
+
+ arm_func_start FUN_037F81E8
+FUN_037F81E8: ;@ 0x037F81E8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #29
+ mov r1, #1
+ add r2, sp, #0
+ bl FUN_03804E50
+ ldrb r0, [sp]
+ cmp r0, #255 ;@ 0xff
+ moveq r0, #0
+ beq _037F821C
+ ands r0, r0, #64 ;@ 0x40
+ movne r0, #1
+ moveq r0, #0
+_037F821C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037F8228
+FUN_037F8228: ;@ 0x037F8228
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #528 ;@ 0x210
+ mov r0, #32
+ mov r1, #2
+ add r2, sp, #4
+ bl FUN_03804E50
+ ldr r0, [sp, #4]
+ mov r0, r0, lsl #3
+ str r0, [sp, #4]
+ mov r1, #256 ;@ 0x100
+ add r2, sp, #16
+ bl FUN_03804E50
+ ldr r0, [sp, #4]
+ add r0, r0, #256 ;@ 0x100
+ mov r1, #256 ;@ 0x100
+ add r2, sp, #272 ;@ 0x110
+ bl FUN_03804E50
+ add r0, sp, #16
+ bl FUN_037F802C
+ cmp r0, #3
+ blt _037F8290
+ mvn r0, #0
+ ldr r1, _037F83A4 ;@ =0x027FFC80
+ mov r2, #116 ;@ 0x74
+ bl FUN_037FB334
+ b _037F834C
+_037F8290:
+ cmp r0, #0
+ beq _037F833C
+ mov r2, r0, lsl #8
+ ldr r1, _037F83A8 ;@ =0xFFFFFF2A
+ add r1, sp, r1
+ ldrb r1, [r1, r0, lsl #8]
+ cmp r1, #10
+ bcs _037F82DC
+ mov ip, #10
+ mov r3, #0
+ add r1, sp, #16
+ add r2, r1, r2
+ b _037F82D0
+_037F82C4:
+ add r1, r2, ip, lsl #1
+ strh r3, [r1, #-252] ;@ 0xffffff04
+ sub ip, ip, #1
+_037F82D0:
+ ldrb r1, [r2, #-230] ;@ 0xffffff1a
+ cmp ip, r1
+ bgt _037F82C4
+_037F82DC:
+ mov r2, r0, lsl #8
+ ldr r1, _037F83AC ;@ =0xFFFFFF60
+ add r1, sp, r1
+ ldrb r1, [r1, r0, lsl #8]
+ cmp r1, #26
+ bcs _037F8320
+ mov ip, #26
+ mov r3, #0
+ add r1, sp, #16
+ add r2, r1, r2
+ b _037F8314
+_037F8308:
+ add r1, r2, ip, lsl #1
+ strh r3, [r1, #-230] ;@ 0xffffff1a
+ sub ip, ip, #1
+_037F8314:
+ ldrb r1, [r2, #-176] ;@ 0xffffff50
+ cmp ip, r1
+ bgt _037F8308
+_037F8320:
+ add r1, sp, #16
+ sub r0, r0, #1
+ add r0, r1, r0, lsl #8
+ ldr r1, _037F83A4 ;@ =0x027FFC80
+ mov r2, #116 ;@ 0x74
+ bl FUN_037FB348
+ b _037F834C
+_037F833C:
+ mov r0, #0
+ ldr r1, _037F83A4 ;@ =0x027FFC80
+ mov r2, #116 ;@ 0x74
+ bl FUN_037FB334
+_037F834C:
+ mov r0, #54 ;@ 0x36
+ mov r1, #6
+ add r2, sp, #8
+ bl FUN_03804E50
+ ldr r0, _037F83A4 ;@ =0x027FFC80
+ add r4, r0, #116 ;@ 0x74
+ add r0, sp, #8
+ mov r1, r4
+ mov r2, #6
+ bl FUN_037FB478
+ mov r0, #60 ;@ 0x3c
+ mov r1, #2
+ add r2, sp, #0
+ bl FUN_03804E50
+ ldrh r0, [sp]
+ mov r0, r0, lsl #15
+ mov r0, r0, lsr #16
+ bl FUN_03807408
+ strh r0, [r4, #6]
+ add sp, sp, #528 ;@ 0x210
+ ldmia sp!, {r4, lr}
+ bx lr
+_037F83A4: .word 0x027FFC80
+_037F83A8: .word 0xFFFFFF2A
+_037F83AC: .word 0xFFFFFF60
+
+ arm_func_start FUN_037F83B0
+FUN_037F83B0: ;@ 0x037F83B0
+ stmdb sp!, {r4, lr}
+ mov r0, #8
+ bl FUN_037F9CD0
+ mov r4, r0
+ mov r0, #8
+ bl FUN_037F9CBC
+ mov r1, r0
+ mov r0, #8
+ mov r2, r4
+ mov r3, #1
+ bl FUN_037F9FE0
+ mov r4, r0
+ mov r0, #8
+ bl FUN_037F9CD0
+ mov r2, r0
+ mov r0, r4
+ mov r1, #0
+ sub r2, r2, r4
+ bl FUN_037FB3E4
+ mov r0, #8
+ mov r1, r4
+ bl FUN_037F9BBC
+ mov r0, #8
+ bl FUN_037F9CD0
+ mov r4, r0
+ mov r0, #8
+ bl FUN_037F9CBC
+ mov r1, r0
+ mov r0, #8
+ mov r2, r4
+ bl FUN_037F9F38
+ movs r4, r0
+ bpl _037F8438
+ bl FUN_037FB1F0
+_037F8438:
+ mov r0, #8
+ mov r1, r4
+ bl FUN_037FA088
+ mov r0, #8
+ mov r1, r4
+ bl FUN_037F9D88
+ cmp r0, #8448 ;@ 0x2100
+ bcs _037F845C
+ bl FUN_037FB1F0
+_037F845C:
+ mov r0, r4
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037F8468
+FUN_037F8468: ;@ 0x037F8468
+ stmdb sp!, {r4, lr}
+ bl FUN_027E0000
+ bl FUN_037F9B84
+ bl FUN_037F9354
+ bl FUN_037F8228
+ bl FUN_037FB5B0
+ bl FUN_037F83B0
+ mov r4, r0
+ mov r0, #6
+ bl FUN_037FC488
+ bl FUN_037FB96C
+ mov r0, #1
+ ldr r1, _037F8524 ;@ =FUN_037F8000
+ bl FUN_037F894C
+ mov r0, #1
+ bl FUN_037F8894
+ ldr r1, _037F8528 ;@ =0x04000004
+ ldrh r0, [r1]
+ ldrh r0, [r1]
+ orr r0, r0, #8
+ strh r0, [r1]
+ ldr r1, _037F852C ;@ =0x04000208
+ ldrh r0, [r1]
+ mov r0, #1
+ strh r0, [r1]
+ bl FUN_037FB048
+ mvn r0, #0
+ bl FUN_037FFF14
+ mov r0, #15
+ bl FUN_037FFF2C
+ mov r0, #12
+ bl FUN_03805954
+ mov r0, r4
+ bl FUN_03806AD0
+ mov r0, #2
+ bl FUN_03801544
+ mov r4, #0
+_037F84FC:
+ bl FUN_037F8530
+ bl FUN_037FB1A0
+ cmp r0, #0
+ beq _037F8518
+ mov r0, r4
+ bl FUN_03803E5C
+ bl FUN_037FB0E0
+_037F8518:
+ bl FUN_03803C80
+ bl FUN_03800E7C
+ b _037F84FC
+_037F8524: .word FUN_037F8000
+_037F8528: .word 0x04000004
+_037F852C: .word 0x04000208
+
+ arm_func_start FUN_037F8530
+FUN_037F8530: ;@ 0x037F8530
+ ldr ip, _037F8538 ;@ =SVC_Halt
+ bx ip
+_037F8538: .word SVC_Halt
+
+ arm_func_start FUN_037F853C
+FUN_037F853C: ;@ 0x037F853C
+ stmfd sp!, {lr}
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #528 ;@ 0x210
+ ldr r1, [ip, #-8]
+ cmp r1, #0
+ ldmeqfd sp!, {pc}
+ ldmia ip, {r1, r2}
+ ands r1, r1, r2
+ ldmeqfd sp!, {pc}
+ mov r3, #1
+ mov r0, #0
+_037F8568:
+ ands r2, r1, r3, lsl r0
+ addeq r0, r0, #1
+ beq _037F8568
+ str r2, [ip, #4]
+ ldr r1, _037F8588 ;@ =_038075F8
+ ldr r0, [r1, r0, lsl #2]
+ ldr lr, _037F858C ;@ =FUN_037F8590
+ bx r0
+_037F8588: .word _038075F8
+_037F858C: .word FUN_037F8590
+
+ arm_func_start FUN_037F8590
+FUN_037F8590:
+ ldr ip, _037F86AC ;@ =_0380770C
+ mov r3, #0
+ ldr ip, [ip]
+ mov r2, #1
+ cmp ip, #0
+ beq _037F85E0
+_037F85A8:
+ str r2, [ip, #72] ;@ 0x48
+ str r3, [ip, #92] ;@ 0x5c
+ str r3, [ip, #96] ;@ 0x60
+ ldr r0, [ip, #100] ;@ 0x64
+ str r3, [ip, #100] ;@ 0x64
+ mov ip, r0
+ cmp ip, #0
+ bne _037F85A8
+ ldr ip, _037F86AC ;@ =_0380770C
+ str r3, [ip]
+ str r3, [ip, #4]
+ ldr ip, _037F86B0 ;@ =_0380779C
+ mov r1, #1
+ strh r1, [ip]
+_037F85E0:
+ ldr ip, _037F86B0 ;@ =_0380779C
+ ldrh r1, [ip]
+ cmp r1, #0
+ ldreq pc, [sp], #4 ;@ (ldreq pc, [sp], #4)
+ mov r1, #0
+ strh r1, [ip]
+ mov r3, #210 ;@ 0xd2
+ msr CPSR_c, r3
+ add r2, ip, #8
+ ldr r1, [r2]
+_037F8608:
+ cmp r1, #0
+ ldrneh r0, [r1, #72] ;@ 0x48
+ cmpne r0, #1
+ ldrne r1, [r1, #76] ;@ 0x4c
+ bne _037F8608
+ cmp r1, #0
+ bne _037F8630
+_037F8624:
+ mov r3, #146 ;@ 0x92
+ msr CPSR_c, r3
+ ldr pc, [sp], #4
+_037F8630:
+ ldr r0, [ip, #4]
+ cmp r1, r0
+ beq _037F8624
+ ldr r3, [ip, #12]
+ cmp r3, #0
+ beq _037F8658
+
+ arm_func_start FUN_037F8648
+FUN_037F8648: ;@ 0x037F8648
+ stmdb sp!, {r0, r1, ip}
+ mov lr, pc
+ bx r3
+ ldmia sp!, {r0, r1, ip}
+_037F8658:
+ str r1, [ip, #4]
+ mrs r2, SPSR
+ str r2, [r0, #0]!
+ ldmib sp!, {r2, r3}
+ stmib r0!, {r2, r3}
+ ldmib sp!, {r2, r3, ip, lr}
+ stmib r0!, {r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
+ stmib r0!, {lr}
+ mov r3, #211 ;@ 0xd3
+ msr CPSR_c, r3
+ stmib r0!, {sp}
+ ldr sp, [r1, #68] ;@ 0x44
+ mov r3, #210 ;@ 0xd2
+ msr CPSR_c, r3
+ ldr r2, [r1, #0]!
+ msr SPSR_fc, r2
+ ldr lr, [r1, #64] ;@ 0x40
+ ldmib r1!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
+ nop ;@ (mov r0, r0)
+ stmda sp!, {r0, r1, r2, r3, ip, lr}
+ ldmia sp!, {pc}
+_037F86AC: .word _0380770C
+_037F86B0: .word _0380779C
+
+ arm_func_start FUN_037F86B4
+FUN_037F86B4: ;@ 0x037F86B4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037F8700 ;@ =_03807714
+ ldr r2, [r0, #96] ;@ 0x60
+ ldr r1, _037F8704 ;@ =0x027FFC3C
+ ldr r0, [r1]
+ add r0, r0, #1
+ str r0, [r1]
+ cmp r2, #0
+ beq _037F86E4
+ mov lr, pc
+ bx r2
+_037F86E4:
+ ldr r1, _037F8708 ;@ =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, #1
+ str r0, [r1]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F8700: .word _03807714
+_037F8704: .word 0x027FFC3C
+_037F8708: .word 0x0380FFF8
+
+ arm_func_start FUN_037F870C
+FUN_037F870C: ;@ 0x037F870C
+ mov r0, #7
+ ldr ip, _037F8718 ;@ =FUN_037F878C
+ bx ip
+_037F8718: .word FUN_037F878C
+
+ arm_func_start FUN_037F871C
+FUN_037F871C: ;@ 0x037F871C
+ mov r0, #6
+ ldr ip, _037F8728 ;@ =FUN_037F878C
+ bx ip
+_037F8728: .word FUN_037F878C
+
+ arm_func_start FUN_037F872C
+FUN_037F872C: ;@ 0x037F872C
+ mov r0, #5
+ ldr ip, _037F8738 ;@ =FUN_037F878C
+ bx ip
+_037F8738: .word FUN_037F878C
+
+ arm_func_start FUN_037F873C
+FUN_037F873C: ;@ 0x037F873C
+ mov r0, #4
+ ldr ip, _037F8748 ;@ =FUN_037F878C
+ bx ip
+_037F8748: .word FUN_037F878C
+
+ arm_func_start FUN_037F874C
+FUN_037F874C: ;@ 0x037F874C
+ mov r0, #3
+ ldr ip, _037F8758 ;@ =FUN_037F878C
+ bx ip
+_037F8758: .word FUN_037F878C
+
+ arm_func_start FUN_037F875C
+FUN_037F875C: ;@ 0x037F875C
+ mov r0, #2
+ ldr ip, _037F8768 ;@ =FUN_037F878C
+ bx ip
+_037F8768: .word FUN_037F878C
+
+ arm_func_start FUN_037F876C
+FUN_037F876C: ;@ 0x037F876C
+ mov r0, #1
+ ldr ip, _037F8778 ;@ =FUN_037F878C
+ bx ip
+_037F8778: .word FUN_037F878C
+
+ arm_func_start FUN_037F877C
+FUN_037F877C: ;@ 0x037F877C
+ mov r0, #0
+ ldr ip, _037F8788 ;@ =FUN_037F878C
+ bx ip
+_037F8788: .word FUN_037F878C
+
+ arm_func_start FUN_037F878C
+FUN_037F878C: ;@ 0x037F878C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r3, #1
+ mov r2, r0, lsl #1
+ ldr r1, _037F880C ;@ =_038075E4
+ ldrh r1, [r1, r2]
+ mov r5, r3, lsl r1
+ mov r1, #12
+ mul r4, r0, r1
+ ldr r2, _037F8810 ;@ =_03807714
+ ldr r1, [r2, r4]
+ mov r0, #0
+ str r0, [r2, r4]
+ cmp r1, #0
+ beq _037F87D8
+ ldr r0, _037F8814 ;@ =_0380771C
+ ldr r0, [r0, r4]
+ mov lr, pc
+ bx r1
+_037F87D8:
+ ldr r1, _037F8818 ;@ =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, r5
+ str r0, [r1]
+ ldr r0, _037F881C ;@ =_03807718
+ ldr r0, [r0, r4]
+ cmp r0, #0
+ bne _037F8800
+ mov r0, r5
+ bl FUN_037F8858
+_037F8800:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037F880C: .word _038075E4
+_037F8810: .word _03807714
+_037F8814: .word _0380771C
+_037F8818: .word 0x0380FFF8
+_037F881C: .word _03807718
+
+ arm_func_start FUN_037F8820
+FUN_037F8820: ;@ 0x037F8820
+ bx lr
+
+ arm_func_start FUN_037F8824
+FUN_037F8824: ;@ 0x037F8824
+ ldr ip, _037F8850 ;@ =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F8854 ;@ =0x04000214
+ ldr r1, [r2]
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F8850: .word 0x04000208
+_037F8854: .word 0x04000214
+
+ arm_func_start FUN_037F8858
+FUN_037F8858: ;@ 0x037F8858
+ ldr ip, _037F888C ;@ =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F8890 ;@ =0x04000210
+ ldr r1, [r2]
+ mvn r0, r0
+ and r0, r1, r0
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F888C: .word 0x04000208
+_037F8890: .word 0x04000210
+
+ arm_func_start FUN_037F8894
+FUN_037F8894: ;@ 0x037F8894
+ ldr ip, _037F88C4 ;@ =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F88C8 ;@ =0x04000210
+ ldr r1, [r2]
+ orr r0, r1, r0
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F88C4: .word 0x04000208
+_037F88C8: .word 0x04000210
+
+ arm_func_start FUN_037F88CC
+FUN_037F88CC: ;@ 0x037F88CC
+ ldr ip, _037F88F8 ;@ =0x04000208
+ ldrh r3, [ip]
+ mov r1, #0
+ strh r1, [ip]
+ ldr r2, _037F88FC ;@ =0x04000210
+ ldr r1, [r2]
+ str r0, [r2]
+ ldrh r0, [ip]
+ strh r3, [ip]
+ mov r0, r1
+ bx lr
+_037F88F8: .word 0x04000208
+_037F88FC: .word 0x04000210
+
+ arm_func_start FUN_037F8900
+FUN_037F8900: ;@ 0x037F8900
+ stmdb sp!, {r4, lr}
+ mov r3, #12
+ mul r4, r0, r3
+ ldr r3, _037F8940 ;@ =_03807744
+ str r1, [r3, r4]
+ ldr r1, _037F8944 ;@ =_0380774C
+ str r2, [r1, r4]
+ mov r1, #1
+ add r0, r0, #3
+ mov r0, r1, lsl r0
+ bl FUN_037F8894
+ mov r1, #1
+ ldr r0, _037F8948 ;@ =_03807748
+ str r1, [r0, r4]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037F8940: .word _03807744
+_037F8944: .word _0380774C
+_037F8948: .word _03807748
+
+ arm_func_start FUN_037F894C
+FUN_037F894C: ;@ 0x037F894C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r9, #0
+ mov r7, r9
+ ldr lr, _037F89E8 ;@ =_038075F8
+ ldr r4, _037F89EC ;@ =_03807774
+ ldr r6, _037F89F0 ;@ =_03807714
+ mov ip, r9
+ mov r3, #1
+ mov r2, #12
+_037F8974:
+ ands r5, r0, #1
+ beq _037F89CC
+ mov r8, r7
+ cmp r9, #8
+ blt _037F8998
+ cmp r9, #11
+ suble r5, r9, #8
+ mlale r8, r5, r2, r6
+ ble _037F89BC
+_037F8998:
+ cmp r9, #3
+ blt _037F89B0
+ cmp r9, #6
+ addle r5, r9, #1
+ mlale r8, r5, r2, r6
+ ble _037F89BC
+_037F89B0:
+ cmp r9, #0
+ moveq r8, r4
+ strne r1, [lr, r9, lsl #2]
+_037F89BC:
+ cmp r8, #0
+ strne r1, [r8]
+ strne ip, [r8, #8]
+ strne r3, [r8, #4]
+_037F89CC:
+ mov r0, r0, lsr #1
+ add r9, r9, #1
+ cmp r9, #25
+ blt _037F8974
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037F89E8: .word _038075F8
+_037F89EC: .word _03807774
+_037F89F0: .word _03807714
+
+ arm_func_start FUN_037F89F4
+FUN_037F89F4: ;@ 0x037F89F4
+ mov r1, #0
+ ldr r0, _037F8A10 ;@ =_0380770C
+ str r1, [r0, #4]
+ str r1, [r0]
+ ldr r0, _037F8A14 ;@ =0x027FFC3C
+ str r1, [r0]
+ bx lr
+_037F8A10: .word _0380770C
+_037F8A14: .word 0x027FFC3C
+
+ arm_func_start FUN_037F8A18
+FUN_037F8A18: ;@ 0x037F8A18
+ ldr r1, _037F8A20 ;@ =FUN_037F8B1C
+ bx r1
+_037F8A20: .word FUN_037F8B1C
+
+ arm_func_start FUN_037F8A24
+FUN_037F8A24: ;@ 0x037F8A24
+ ldr r3, _037F8AB4 ;@ =0x027FFFB8
+ ldr r1, [r3]
+ mov r2, #0
+ mov r0, #-2147483648 ;@ 0x80000000
+_037F8A34:
+ tst r1, r0
+ bne _037F8A50
+ add r2, r2, #1
+ cmp r2, #32
+ beq _037F8A50
+ mov r0, r0, lsr #1
+ b _037F8A34
+_037F8A50:
+ cmp r2, #32
+ movne r0, #128 ;@ 0x80
+ bne _037F8A98
+ add r3, r3, #4
+ ldr r1, [r3]
+ mov r2, #0
+ mov r0, #-2147483648 ;@ 0x80000000
+_037F8A6C:
+ tst r1, r0
+ bne _037F8A88
+ add r2, r2, #1
+ cmp r2, #32
+ beq _037F8A88
+ mov r0, r0, lsr #1
+ b _037F8A6C
+_037F8A88:
+ cmp r2, #32
+ ldr r0, _037F8AB8 ;@ =0xFFFFFFFD
+ bxeq lr
+ mov r0, #160 ;@ 0xa0
+_037F8A98:
+ add r0, r0, r2
+ mov r1, #-2147483648 ;@ 0x80000000
+ mov r1, r1, lsr r2
+ ldr r2, [r3]
+ bic r2, r2, r1
+ str r2, [r3]
+ bx lr
+_037F8AB4: .word 0x027FFFB8
+_037F8AB8: .word 0xFFFFFFFD
+
+ arm_func_start FUN_037F8ABC
+FUN_037F8ABC: ;@ 0x037F8ABC
+ ldr r3, _037F8AE8 ;@ =0x027FFFB8
+ cmp r0, #160 ;@ 0xa0
+ addpl r3, r3, #4
+ subpl r0, r0, #160 ;@ 0xa0
+ submi r0, r0, #128 ;@ 0x80
+ mov r1, #-2147483648 ;@ 0x80000000
+ mov r1, r1, lsr r0
+ ldr r2, [r3]
+ orr r2, r2, r1
+ str r2, [r3]
+ bx lr
+_037F8AE8: .word 0x027FFFB8
+
+ arm_func_start FUN_037F8AEC
+FUN_037F8AEC: ;@ 0x037F8AEC
+ ldrh r0, [r0, #4]
+ bx lr
+_037F8AF4:
+ bx lr
+_037F8AF8:
+ bx lr
+
+ arm_func_start FUN_037F8AFC
+FUN_037F8AFC: ;@ 0x037F8AFC
+ ldr r1, _037F8B10 ;@ =0x027FFFE8
+ ldr r2, _037F8B14 ;@ =_037F8AF8
+ mov r3, #1
+ ldr ip, _037F8B18 ;@ =FUN_037F8B5C
+ bx ip
+_037F8B10: .word 0x027FFFE8
+_037F8B14: .word _037F8AF8
+_037F8B18: .word FUN_037F8B5C
+
+ arm_func_start FUN_037F8B1C
+FUN_037F8B1C: ;@ 0x037F8B1C
+ ldr r1, _037F8B30 ;@ =0x027FFFE8
+ ldr r2, _037F8B34 ;@ =_037F8AF4
+ mov r3, #1
+ ldr ip, _037F8B38 ;@ =FUN_037F8BE0
+ bx ip
+_037F8B30: .word 0x027FFFE8
+_037F8B34: .word _037F8AF4
+_037F8B38: .word FUN_037F8BE0
+
+ arm_func_start FUN_037F8B3C
+FUN_037F8B3C: ;@ 0x037F8B3C
+ ldr r1, _037F8B50 ;@ =0x027FFFE8
+ ldr r2, _037F8B54 ;@ =_037F8AF8
+ mov r3, #1
+ ldr ip, _037F8B58 ;@ =FUN_037F8C6C
+ bx ip
+_037F8B50: .word 0x027FFFE8
+_037F8B54: .word _037F8AF8
+_037F8B58: .word FUN_037F8C6C
+
+ arm_func_start FUN_037F8B5C
+FUN_037F8B5C: ;@ 0x037F8B5C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ movs r6, r3
+ beq _037F8B84
+ bl FUN_037FB088
+ mov r5, r0
+ b _037F8B8C
+_037F8B84:
+ bl FUN_037FB05C
+ mov r5, r0
+_037F8B8C:
+ mov r0, r9
+ mov r1, r8
+ bl FUN_037FB5A8
+ movs r4, r0
+ bne _037F8BB4
+ cmp r7, #0
+ beq _037F8BB0
+ mov lr, pc
+ bx r7
+_037F8BB0:
+ strh r9, [r8, #4]
+_037F8BB4:
+ cmp r6, #0
+ beq _037F8BC8
+ mov r0, r5
+ bl FUN_037FB09C
+ b _037F8BD0
+_037F8BC8:
+ mov r0, r5
+ bl FUN_037FB070
+_037F8BD0:
+ mov r0, r4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+
+ arm_func_start FUN_037F8BE0
+FUN_037F8BE0: ;@ 0x037F8BE0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ ldrh r1, [r7, #4]
+ cmp r0, r1
+ mvnne r0, #1
+ bne _037F8C60
+ cmp r5, #0
+ beq _037F8C18
+ bl FUN_037FB088
+ mov r4, r0
+ b _037F8C20
+_037F8C18:
+ bl FUN_037FB05C
+ mov r4, r0
+_037F8C20:
+ mov r0, #0
+ strh r0, [r7, #4]
+ cmp r6, #0
+ beq _037F8C38
+ mov lr, pc
+ bx r6
+_037F8C38:
+ mov r0, #0
+ str r0, [r7]
+ cmp r5, #0
+ beq _037F8C54
+ mov r0, r4
+ bl FUN_037FB09C
+ b _037F8C5C
+_037F8C54:
+ mov r0, r4
+ bl FUN_037FB070
+_037F8C5C:
+ mov r0, #0
+_037F8C60:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_037F8C6C
+FUN_037F8C6C: ;@ 0x037F8C6C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ mov r4, #1024 ;@ 0x400
+ b _037F8C90
+_037F8C88:
+ mov r0, r4
+ bl FUN_037F8CB4
+_037F8C90:
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ mov r3, r5
+ bl FUN_037F8B5C
+ cmp r0, #0
+ bgt _037F8C88
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_037F8CB4
+FUN_037F8CB4: ;@ 0x037F8CB4
+ ldr ip, _037F8CBC ;@ =SVC_WaitByLoop
+ bx ip
+_037F8CBC: .word SVC_WaitByLoop
+
+ arm_func_start FUN_037F8CC0
+FUN_037F8CC0: ;@ 0x037F8CC0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _037F8D38 ;@ =_03807780
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _037F8D2C
+ mov r1, #1
+ str r1, [r0]
+ mov r0, #0
+ ldr r4, _037F8D3C ;@ =0x027FFFF0
+ strh r0, [r4, #6]
+ mov r5, #1024 ;@ 0x400
+ b _037F8CFC
+_037F8CF4:
+ mov r0, r5
+ bl FUN_037F8CB4
+_037F8CFC:
+ ldrh r0, [r4, #4]
+ cmp r0, #127 ;@ 0x7f
+ bne _037F8CF4
+ mvn r1, #0
+ ldr r0, _037F8D40 ;@ =0x027FFFB8
+ str r1, [r0]
+ mov r0, #65536 ;@ 0x10000
+ rsb r1, r0, #0
+ ldr r0, _037F8D44 ;@ =0x027FFFBC
+ str r1, [r0]
+ mov r0, #191 ;@ 0xbf
+ strh r0, [r4, #6]
+_037F8D2C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037F8D38: .word _03807780
+_037F8D3C: .word 0x027FFFF0
+_037F8D40: .word 0x027FFFB8
+_037F8D44: .word 0x027FFFBC
+
+ arm_func_start FUN_037F8D48
+FUN_037F8D48: ;@ 0x037F8D48
+ str r1, [r0, #152] ;@ 0x98
+ bx lr
+
+ arm_func_start FUN_037F8D50
+FUN_037F8D50: ;@ 0x037F8D50
+ stmdb sp!, {r4, lr}
+ bl FUN_037FB05C
+ mov r4, #0
+ ldr r1, _037F8D84 ;@ =_03807788
+ ldr r3, [r1]
+ cmp r3, #0
+ subne r2, r3, #1
+ strne r2, [r1]
+ movne r4, r3
+ bl FUN_037FB070
+ mov r0, r4
+ ldmia sp!, {r4, lr}
+ bx lr
+_037F8D84: .word _03807788
+
+ arm_func_start FUN_037F8D88
+FUN_037F8D88: ;@ 0x037F8D88
+ stmdb sp!, {r4, lr}
+ bl FUN_037FB05C
+ ldr r2, _037F8DBC ;@ =_03807788
+ ldr r3, [r2]
+ mvn r1, #0
+ cmp r3, r1
+ addcc r1, r3, #1
+ strcc r1, [r2]
+ movcc r4, r3
+ bl FUN_037FB070
+ mov r0, r4
+ ldmia sp!, {r4, lr}
+ bx lr
+_037F8DBC: .word _03807788
+
+ arm_func_start FUN_037F8DC0
+FUN_037F8DC0: ;@ 0x037F8DC0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ ldr r1, _037F8DF0 ;@ =_0380779C
+ ldr r4, [r1, #12]
+ str r5, [r1, #12]
+ bl FUN_037FB070
+ mov r0, r4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037F8DF0: .word _0380779C
+_037F8DF4:
+ ldr r2, [r0]
+ mov r1, #0
+ str r1, [r0]
+ str r1, [r2, #148] ;@ 0x94
+ mov r0, r2
+ ldr ip, _037F8E10 ;@ =FUN_037F8FB4
+ bx ip
+_037F8E10: .word FUN_037F8FB4
+
+ arm_func_start FUN_037F8E14
+FUN_037F8E14: ;@ 0x037F8E14
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #52 ;@ 0x34
+ mov r5, r0
+ add r0, sp, #8
+ bl FUN_037FA900
+ ldr r0, _037F8EAC ;@ =_03807794
+ ldr r0, [r0]
+ ldr r0, [r0]
+ str r0, [sp, #4]
+ bl FUN_037FB05C
+ mov r4, r0
+ add r0, sp, #8
+ ldr r1, [sp, #4]
+ str r0, [r1, #148] ;@ 0x94
+ add r1, sp, #4
+ str r1, [sp]
+ mov r2, #0
+ ldr r1, _037F8EB0 ;@ =0x000082EA
+ umull ip, r3, r5, r1
+ mla r3, r5, r2, r3
+ mla r3, r2, r1, r3
+ mov r2, r3, lsr #6
+ mov r1, ip, lsr #6
+ orr r1, r1, r3, lsl #26
+ ldr r3, _037F8EB4 ;@ =_037F8DF4
+ bl FUN_037FA75C
+ mov r5, #0
+ b _037F8E8C
+_037F8E84:
+ mov r0, r5
+ bl FUN_037F9064
+_037F8E8C:
+ ldr r0, [sp, #4]
+ cmp r0, #0
+ bne _037F8E84
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #52 ;@ 0x34
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037F8EAC: .word _03807794
+_037F8EB0: .word 0x000082EA
+_037F8EB4: .word _037F8DF4
+
+ arm_func_start FUN_037F8EB8
+FUN_037F8EB8: ;@ 0x037F8EB8
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r6, r0
+ mov r5, r1
+ ldr r0, _037F8F60 ;@ =_0380779C
+ ldr r8, [r0, #8]
+ mov r7, #0
+ bl FUN_037FB05C
+ mov r4, r0
+ b _037F8EE4
+_037F8EDC:
+ mov r7, r8
+ ldr r8, [r8, #76] ;@ 0x4c
+_037F8EE4:
+ cmp r8, #0
+ beq _037F8EF4
+ cmp r8, r6
+ bne _037F8EDC
+_037F8EF4:
+ cmp r8, #0
+ beq _037F8F08
+ ldr r0, _037F8F64 ;@ =_038077AC
+ cmp r8, r0
+ bne _037F8F18
+_037F8F08:
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _037F8F58
+_037F8F18:
+ ldr r0, [r8, #84] ;@ 0x54
+ cmp r0, r5
+ beq _037F8F4C
+ cmp r7, #0
+ ldreq r1, [r6, #76] ;@ 0x4c
+ ldreq r0, _037F8F60 ;@ =_0380779C
+ streq r1, [r0, #8]
+ ldrne r0, [r6, #76] ;@ 0x4c
+ strne r0, [r7, #76] ;@ 0x4c
+ str r5, [r6, #84] ;@ 0x54
+ mov r0, r6
+ bl FUN_037F9584
+ bl FUN_037F945C
+_037F8F4C:
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #1
+_037F8F58:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037F8F60: .word _0380779C
+_037F8F64: .word _038077AC
+
+ arm_func_start FUN_037F8F68
+FUN_037F8F68: ;@ 0x037F8F68
+ stmdb sp!, {r4, lr}
+ bl FUN_037FB05C
+ mov r4, r0
+ bl FUN_037F945C
+ mov r0, r4
+ bl FUN_037FB070
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037F8F88
+FUN_037F8F88: ;@ 0x037F8F88
+ ldr r0, _037F8FB0 ;@ =_0380779C
+ ldr r0, [r0, #8]
+ b _037F8F98
+_037F8F94:
+ ldr r0, [r0, #76] ;@ 0x4c
+_037F8F98:
+ cmp r0, #0
+ bxeq lr
+ ldr r1, [r0, #72] ;@ 0x48
+ cmp r1, #1
+ bne _037F8F94
+ bx lr
+_037F8FB0: .word _0380779C
+
+ arm_func_start FUN_037F8FB4
+FUN_037F8FB4: ;@ 0x037F8FB4
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #1
+ str r0, [r5, #72] ;@ 0x48
+ bl FUN_037F945C
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037F8FE8
+FUN_037F8FE8: ;@ 0x037F8FE8
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, [r5]
+ cmp r0, #0
+ beq _037F9050
+ mov r7, #1
+ mov r6, #0
+ b _037F9030
+_037F9014:
+ mov r0, r5
+ bl FUN_037F967C
+ str r7, [r0, #72] ;@ 0x48
+ str r6, [r0, #92] ;@ 0x5c
+ str r6, [r0, #100] ;@ 0x64
+ ldr r1, [r0, #100] ;@ 0x64
+ str r1, [r0, #96] ;@ 0x60
+_037F9030:
+ ldr r0, [r5]
+ cmp r0, #0
+ bne _037F9014
+ mov r0, #0
+ str r0, [r5, #4]
+ ldr r0, [r5, #4]
+ str r0, [r5]
+ bl FUN_037F945C
+_037F9050:
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_037F9064
+FUN_037F9064: ;@ 0x037F9064
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ bl FUN_037FB05C
+ mov r5, r0
+ ldr r0, _037F90B4 ;@ =_03807794
+ ldr r0, [r0]
+ ldr r4, [r0]
+ cmp r6, #0
+ beq _037F9098
+ str r6, [r4, #92] ;@ 0x5c
+ mov r0, r6
+ mov r1, r4
+ bl FUN_037F96B0
+_037F9098:
+ mov r0, #0
+ str r0, [r4, #72] ;@ 0x48
+ bl FUN_037F945C
+ mov r0, r5
+ bl FUN_037FB070
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_037F90B4: .word _03807794
+ ldr r0, [r0, #72] ;@ 0x48
+ cmp r0, #2
+ moveq r0, #1
+ movne r0, #0
+ bx lr
+
+ arm_func_start FUN_037F90CC
+FUN_037F90CC: ;@ 0x037F90CC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, [r5, #72] ;@ 0x48
+ cmp r0, #2
+ beq _037F90F4
+ add r0, r5, #128 ;@ 0x80
+ bl FUN_037F9064
+_037F90F4:
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037F9108
+FUN_037F9108: ;@ 0x037F9108
+ stmdb sp!, {r4, lr}
+ ldr r0, _037F9164 ;@ =_03807794
+ ldr r0, [r0]
+ ldr r4, [r0]
+ bl FUN_037F8D88
+ mov r0, r4
+ bl FUN_037F9A30
+ ldr r0, [r4, #92] ;@ 0x5c
+ cmp r0, #0
+ beq _037F9138
+ mov r1, r4
+ bl FUN_037F961C
+_037F9138:
+ mov r0, r4
+ bl FUN_037F953C
+ mov r0, #2
+ str r0, [r4, #72] ;@ 0x48
+ add r0, r4, #128 ;@ 0x80
+ bl FUN_037F8FE8
+ bl FUN_037F8D50
+ bl FUN_037F8F68
+ bl FUN_037FB1F0
+ ldmia sp!, {r4, lr}
+ bx lr
+_037F9164: .word _03807794
+
+ arm_func_start FUN_037F9168
+FUN_037F9168: ;@ 0x037F9168
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037F91AC ;@ =_03807794
+ ldr r1, [r1]
+ ldr r3, [r1]
+ ldr r2, [r3, #152] ;@ 0x98
+ cmp r2, #0
+ beq _037F919C
+ mov r1, #0
+ str r1, [r3, #152] ;@ 0x98
+ mov lr, pc
+ bx r2
+ bl FUN_037FB05C
+_037F919C:
+ bl FUN_037F9108
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F91AC: .word _03807794
+
+ arm_func_start FUN_037F91B0
+FUN_037F91B0: ;@ 0x037F91B0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ ldr r1, _037F9210 ;@ =_03807784
+ ldr r2, [r1]
+ cmp r2, #0
+ beq _037F91FC
+ ldr r1, _037F9214 ;@ =FUN_037F9168
+ bl FUN_037F9740
+ str r4, [r5, #4]
+ ldr r0, [r5]
+ orr r0, r0, #128 ;@ 0x80
+ str r0, [r5]
+ mov r0, #1
+ str r0, [r5, #72] ;@ 0x48
+ mov r0, r5
+ bl FUN_037F97E0
+ b _037F9204
+_037F91FC:
+ mov r0, r4
+ bl FUN_037F9168
+_037F9204:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037F9210: .word _03807784
+_037F9214: .word FUN_037F9168
+
+ arm_func_start FUN_037F9218
+FUN_037F9218: ;@ 0x037F9218
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl FUN_037FB05C
+ ldr r0, _037F9240 ;@ =_0380779C
+ ldr r0, [r0, #4]
+ mov r1, #0
+ bl FUN_037F91B0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F9240: .word _0380779C
+
+ arm_func_start FUN_037F9244
+FUN_037F9244: ;@ 0x037F9244
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ bl FUN_037FB05C
+ mov r4, r0
+ bl FUN_037F9728
+ ldr r1, [sp, #36] ;@ 0x24
+ str r1, [r9, #84] ;@ 0x54
+ str r0, [r9, #80] ;@ 0x50
+ mov r0, #0
+ str r0, [r9, #72] ;@ 0x48
+ str r0, [r9, #88] ;@ 0x58
+ mov r0, r9
+ bl FUN_037F9584
+ str r6, [r9, #120] ;@ 0x78
+ ldr r0, [sp, #32]
+ sub r5, r6, r0
+ str r5, [r9, #116] ;@ 0x74
+ mov r2, #0
+ str r2, [r9, #124] ;@ 0x7c
+ ldr r1, _037F9348 ;@ =0xD73BFDF7
+ ldr r0, [r9, #120] ;@ 0x78
+ str r1, [r0, #-4]
+ ldr r1, _037F934C ;@ =0xFBDD37BB
+ ldr r0, [r9, #116] ;@ 0x74
+ str r1, [r0]
+ str r2, [r9, #132] ;@ 0x84
+ ldr r0, [r9, #132] ;@ 0x84
+ str r0, [r9, #128] ;@ 0x80
+ mov r0, r9
+ mov r1, r8
+ sub r2, r6, #4
+ bl FUN_037F9740
+ str r7, [r9, #4]
+ ldr r0, _037F9350 ;@ =FUN_037F9218
+ str r0, [r9, #60] ;@ 0x3c
+ mov r0, #0
+ add r1, r5, #4
+ ldr r2, [sp, #32]
+ sub r2, r2, #8
+ bl FUN_037FB334
+ mov r1, #0
+ str r1, [r9, #104] ;@ 0x68
+ str r1, [r9, #108] ;@ 0x6c
+ str r1, [r9, #112] ;@ 0x70
+ mov r0, r9
+ bl FUN_037F8D48
+ mov r0, #0
+ str r0, [r9, #92] ;@ 0x5c
+ str r0, [r9, #100] ;@ 0x64
+ ldr r1, [r9, #100] ;@ 0x64
+ str r1, [r9, #96] ;@ 0x60
+ add r1, r9, #136 ;@ 0x88
+ mov r2, #12
+ bl FUN_037FB334
+ mov r0, #0
+ str r0, [r9, #148] ;@ 0x94
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037F9348: .word 0xD73BFDF7
+_037F934C: .word 0xFBDD37BB
+_037F9350: .word FUN_037F9218
+
+ arm_func_start FUN_037F9354
+FUN_037F9354: ;@ 0x037F9354
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037F942C ;@ =_03807798
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _037F9420
+ mov r2, #1
+ str r2, [r0]
+ ldr r1, _037F9430 ;@ =_038077A0
+ ldr r0, _037F9434 ;@ =_03807794
+ str r1, [r0]
+ mov r0, #16
+ ldr r1, _037F9438 ;@ =_03807850
+ str r0, [r1, #84] ;@ 0x54
+ mov r0, #0
+ str r0, [r1, #80] ;@ 0x50
+ str r2, [r1, #72] ;@ 0x48
+ str r0, [r1, #76] ;@ 0x4c
+ str r0, [r1, #88] ;@ 0x58
+ ldr r0, _037F943C ;@ =_0380779C
+ str r1, [r0, #8]
+ str r1, [r0, #4]
+ ldr r2, _037F9440 ;@ =0x00000400
+ cmp r2, #0
+ ldrle r0, _037F9444 ;@ =FUN_037F8000
+ suble r2, r0, r2
+ ldrgt r1, _037F9448 ;@ =0x00000400
+ ldrgt r0, _037F944C ;@ =0x0380FF80
+ subgt r0, r0, r1
+ subgt r2, r0, r2
+ ldr r1, _037F9448 ;@ =0x00000400
+ ldr r0, _037F944C ;@ =0x0380FF80
+ sub r3, r0, r1
+ ldr r1, _037F9438 ;@ =_03807850
+ str r3, [r1, #120] ;@ 0x78
+ str r2, [r1, #116] ;@ 0x74
+ mov r0, #0
+ str r0, [r1, #124] ;@ 0x7c
+ ldr r2, _037F9450 ;@ =0xD73BFDF7
+ str r2, [r3, #-4]
+ ldr r3, _037F9454 ;@ =0xFBDD37BB
+ ldr r2, [r1, #116] ;@ 0x74
+ str r3, [r2]
+ str r0, [r1, #132] ;@ 0x84
+ str r0, [r1, #128] ;@ 0x80
+ ldr r1, _037F943C ;@ =_0380779C
+ strh r0, [r1]
+ strh r0, [r1, #2]
+ ldr r2, _037F9458 ;@ =0x027FFFA4
+ str r1, [r2]
+ bl FUN_037F8DC0
+_037F9420:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F942C: .word _03807798
+_037F9430: .word _038077A0
+_037F9434: .word _03807794
+_037F9438: .word _03807850
+_037F943C: .word _0380779C
+_037F9440: .word 0x00000400
+_037F9444: .word FUN_037F8000
+_037F9448: .word 0x00000400
+_037F944C: .word 0x0380FF80
+_037F9450: .word 0xD73BFDF7
+_037F9454: .word 0xFBDD37BB
+_037F9458: .word 0x027FFFA4
+
+ arm_func_start FUN_037F945C
+FUN_037F945C: ;@ 0x037F945C
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr r0, _037F952C ;@ =_03807788
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _037F9524
+ ldr r4, _037F9530 ;@ =_0380779C
+ ldrh r0, [r4, #2]
+ cmp r0, #0
+ bne _037F948C
+ bl FUN_037FB0B4
+ cmp r0, #18
+ bne _037F9498
+_037F948C:
+ mov r0, #1
+ strh r0, [r4]
+ b _037F9524
+_037F9498:
+ ldr r0, _037F9534 ;@ =_03807794
+ ldr r0, [r0]
+ ldr r6, [r0]
+ bl FUN_037F8F88
+ mov r5, r0
+ cmp r6, r5
+ beq _037F9524
+ cmp r5, #0
+ beq _037F9524
+ ldr r0, [r6, #72] ;@ 0x48
+ cmp r0, #2
+ beq _037F94D8
+ mov r0, r6
+ bl FUN_037F97AC
+ cmp r0, #0
+ bne _037F9524
+_037F94D8:
+ ldr r0, _037F9538 ;@ =_03807790
+ ldr r2, [r0]
+ cmp r2, #0
+ beq _037F94F8
+ mov r0, r6
+ mov r1, r5
+ mov lr, pc
+ bx r2
+_037F94F8:
+ ldr r2, [r4, #12]
+ cmp r2, #0
+ beq _037F9514
+ mov r0, r6
+ mov r1, r5
+ mov lr, pc
+ bx r2
+_037F9514:
+ ldr r0, _037F9530 ;@ =_0380779C
+ str r5, [r0, #4]
+ mov r0, r5
+ bl FUN_037F97E0
+_037F9524:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_037F952C: .word _03807788
+_037F9530: .word _0380779C
+_037F9534: .word _03807794
+_037F9538: .word _03807790
+
+ arm_func_start FUN_037F953C
+FUN_037F953C: ;@ 0x037F953C
+ ldr r1, _037F9580 ;@ =_0380779C
+ ldr r2, [r1, #8]
+ mov r1, #0
+ b _037F9554
+_037F954C:
+ mov r1, r2
+ ldr r2, [r2, #76] ;@ 0x4c
+_037F9554:
+ cmp r2, #0
+ beq _037F9564
+ cmp r2, r0
+ bne _037F954C
+_037F9564:
+ cmp r1, #0
+ ldreq r1, [r0, #76] ;@ 0x4c
+ ldreq r0, _037F9580 ;@ =_0380779C
+ streq r1, [r0, #8]
+ ldrne r0, [r0, #76] ;@ 0x4c
+ strne r0, [r1, #76] ;@ 0x4c
+ bx lr
+_037F9580: .word _0380779C
+
+ arm_func_start FUN_037F9584
+FUN_037F9584: ;@ 0x037F9584
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037F95E8 ;@ =_0380779C
+ ldr r3, [r1, #8]
+ mov lr, r3
+ mov ip, #0
+ b _037F95A8
+_037F95A0:
+ mov ip, lr
+ ldr lr, [lr, #76] ;@ 0x4c
+_037F95A8:
+ cmp lr, #0
+ beq _037F95C0
+ ldr r2, [lr, #84] ;@ 0x54
+ ldr r1, [r0, #84] ;@ 0x54
+ cmp r2, r1
+ bcc _037F95A0
+_037F95C0:
+ cmp ip, #0
+ streq r3, [r0, #76] ;@ 0x4c
+ ldreq r1, _037F95E8 ;@ =_0380779C
+ streq r0, [r1, #8]
+ ldrne r1, [ip, #76] ;@ 0x4c
+ strne r1, [r0, #76] ;@ 0x4c
+ strne r0, [ip, #76] ;@ 0x4c
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F95E8: .word _0380779C
+
+ arm_func_start FUN_037F95EC
+FUN_037F95EC: ;@ 0x037F95EC
+ ldr r2, [r0]
+ cmp r2, #0
+ beq _037F9614
+ ldr r1, [r2, #16]
+ str r1, [r0]
+ cmp r1, #0
+ movne r0, #0
+ strne r0, [r1, #20]
+ moveq r1, #0
+ streq r1, [r0, #4]
+_037F9614:
+ mov r0, r2
+ bx lr
+
+ arm_func_start FUN_037F961C
+FUN_037F961C: ;@ 0x037F961C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, [r0]
+ mov lr, r2
+ b _037F9664
+_037F9630:
+ ldr ip, [lr, #100] ;@ 0x64
+ cmp lr, r1
+ bne _037F9660
+ ldr r3, [lr, #96] ;@ 0x60
+ cmp r2, lr
+ streq ip, [r0]
+ strne ip, [r3, #100] ;@ 0x64
+ ldr r1, [r0, #4]
+ cmp r1, lr
+ streq r3, [r0, #4]
+ strne r3, [ip, #96] ;@ 0x60
+ b _037F966C
+_037F9660:
+ mov lr, ip
+_037F9664:
+ cmp lr, #0
+ bne _037F9630
+_037F966C:
+ mov r0, lr
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037F967C
+FUN_037F967C: ;@ 0x037F967C
+ ldr r2, [r0]
+ cmp r2, #0
+ beq _037F96A8
+ ldr r1, [r2, #100] ;@ 0x64
+ str r1, [r0]
+ cmp r1, #0
+ movne r0, #0
+ strne r0, [r1, #96] ;@ 0x60
+ moveq r1, #0
+ streq r1, [r0, #4]
+ streq r1, [r2, #92] ;@ 0x5c
+_037F96A8:
+ mov r0, r2
+ bx lr
+
+ arm_func_start FUN_037F96B0
+FUN_037F96B0: ;@ 0x037F96B0
+ ldr ip, [r0]
+ b _037F96C4
+_037F96B8:
+ cmp ip, r1
+ bxeq lr
+ ldr ip, [ip, #100] ;@ 0x64
+_037F96C4:
+ cmp ip, #0
+ beq _037F96DC
+ ldr r3, [ip, #84] ;@ 0x54
+ ldr r2, [r1, #84] ;@ 0x54
+ cmp r3, r2
+ bls _037F96B8
+_037F96DC:
+ cmp ip, #0
+ bne _037F9708
+ ldr r2, [r0, #4]
+ cmp r2, #0
+ streq r1, [r0]
+ strne r1, [r2, #100] ;@ 0x64
+ str r2, [r1, #96] ;@ 0x60
+ mov r2, #0
+ str r2, [r1, #100] ;@ 0x64
+ str r1, [r0, #4]
+ bx lr
+_037F9708:
+ ldr r2, [ip, #96] ;@ 0x60
+ cmp r2, #0
+ streq r1, [r0]
+ strne r1, [r2, #100] ;@ 0x64
+ str r2, [r1, #96] ;@ 0x60
+ str ip, [r1, #100] ;@ 0x64
+ str r1, [ip, #96] ;@ 0x60
+ bx lr
+
+ arm_func_start FUN_037F9728
+FUN_037F9728: ;@ 0x037F9728
+ ldr r1, _037F973C ;@ =_0380778C
+ ldr r0, [r1]
+ add r0, r0, #1
+ str r0, [r1]
+ bx lr
+_037F973C: .word _0380778C
+
+ arm_func_start FUN_037F9740
+FUN_037F9740: ;@ 0x037F9740
+ add r1, r1, #4
+ str r1, [r0, #64] ;@ 0x40
+ str r2, [r0, #68] ;@ 0x44
+ sub r2, r2, #64 ;@ 0x40
+ tst r2, #4
+ subne r2, r2, #4
+ str r2, [r0, #56] ;@ 0x38
+ ands r1, r1, #1
+ movne r1, #63 ;@ 0x3f
+ moveq r1, #31
+ str r1, [r0]
+ mov r1, #0
+ str r1, [r0, #4]
+ str r1, [r0, #8]
+ str r1, [r0, #12]
+ str r1, [r0, #16]
+ str r1, [r0, #20]
+ str r1, [r0, #24]
+ str r1, [r0, #28]
+ str r1, [r0, #32]
+ str r1, [r0, #36] ;@ 0x24
+ str r1, [r0, #40] ;@ 0x28
+ str r1, [r0, #44] ;@ 0x2c
+ str r1, [r0, #48] ;@ 0x30
+ str r1, [r0, #52] ;@ 0x34
+ str r1, [r0, #60] ;@ 0x3c
+ bx lr
+
+ arm_func_start FUN_037F97AC
+FUN_037F97AC: ;@ 0x037F97AC
+ add r1, r0, #0
+ mrs r2, CPSR
+ str r2, [r1], #4
+ mov r0, #211 ;@ 0xd3
+ msr CPSR_c, r0
+ str sp, [r1, #64] ;@ 0x40
+ msr CPSR_c, r2
+ mov r0, #1
+ stmia r1, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}
+ adr r0, FUN_037F97E0
+ str r0, [r1, #60] ;@ 0x3c
+ mov r0, #0
+ bx lr
+
+ arm_func_start FUN_037F97E0
+FUN_037F97E0: ;@ 0x037F97E0
+ mrs r1, CPSR
+ bic r1, r1, #31
+ orr r1, r1, #211 ;@ 0xd3
+ msr CPSR_c, r1
+ ldr r1, [r0], #4
+ msr SPSR_fsxc, r1
+ ldr sp, [r0, #64] ;@ 0x40
+ ldr lr, [r0, #60] ;@ 0x3c
+ ldmia r0, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr}^
+ nop ;@ (mov r0, r0)
+ subs pc, lr, #4
+
+ arm_func_start FUN_037F980C
+FUN_037F980C: ;@ 0x037F980C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl FUN_037FB05C
+ mov r4, r0
+ and r8, r7, #1
+ add r7, r6, #8
+ b _037F9850
+_037F9830:
+ cmp r8, #0
+ bne _037F9848
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _037F987C
+_037F9848:
+ mov r0, r7
+ bl FUN_037F9064
+_037F9850:
+ ldr r0, [r6, #28]
+ cmp r0, #0
+ beq _037F9830
+ cmp r5, #0
+ ldrne r1, [r6, #16]
+ ldrne r0, [r6, #24]
+ ldrne r0, [r1, r0, lsl #2]
+ strne r0, [r5]
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #1
+_037F987C:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_037F9884
+FUN_037F9884: ;@ 0x037F9884
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl FUN_037FB05C
+ mov r4, r0
+ and r8, r7, #1
+ add r7, r6, #8
+ b _037F98C8
+_037F98A8:
+ cmp r8, #0
+ bne _037F98C0
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _037F991C
+_037F98C0:
+ mov r0, r7
+ bl FUN_037F9064
+_037F98C8:
+ ldr r0, [r6, #28]
+ cmp r0, #0
+ beq _037F98A8
+ cmp r5, #0
+ ldrne r1, [r6, #16]
+ ldrne r0, [r6, #24]
+ ldrne r0, [r1, r0, lsl #2]
+ strne r0, [r5]
+ ldr r0, [r6, #24]
+ add r0, r0, #1
+ ldr r1, [r6, #20]
+ bl _s32_div_f
+ str r1, [r6, #24]
+ ldr r0, [r6, #28]
+ sub r0, r0, #1
+ str r0, [r6, #28]
+ mov r0, r6
+ bl FUN_037F8FE8
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #1
+_037F991C:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_037F9924
+FUN_037F9924: ;@ 0x037F9924
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl FUN_037FB05C
+ mov r4, r0
+ and r7, r7, #1
+ b _037F9968
+_037F9948:
+ cmp r7, #0
+ bne _037F9960
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _037F99AC
+_037F9960:
+ mov r0, r6
+ bl FUN_037F9064
+_037F9968:
+ ldr r2, [r6, #28]
+ ldr r1, [r6, #20]
+ cmp r1, r2
+ ble _037F9948
+ ldr r0, [r6, #24]
+ add r0, r0, r2
+ bl _s32_div_f
+ ldr r0, [r6, #16]
+ str r5, [r0, r1, lsl #2]
+ ldr r0, [r6, #28]
+ add r0, r0, #1
+ str r0, [r6, #28]
+ add r0, r6, #8
+ bl FUN_037F8FE8
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #1
+_037F99AC:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_037F99B8
+FUN_037F99B8: ;@ 0x037F99B8
+ mov ip, #0
+ str ip, [r0, #4]
+ ldr r3, [r0, #4]
+ str r3, [r0]
+ str ip, [r0, #12]
+ ldr r3, [r0, #12]
+ str r3, [r0, #8]
+ str r1, [r0, #16]
+ str r2, [r0, #20]
+ str ip, [r0, #24]
+ str ip, [r0, #28]
+ bx lr
+
+ arm_func_start FUN_037F99E8
+FUN_037F99E8: ;@ 0x037F99E8
+ ldr r2, [r1, #16]
+ ldr r1, [r1, #20]
+ cmp r2, #0
+ streq r1, [r0, #112] ;@ 0x70
+ strne r1, [r2, #20]
+ cmp r1, #0
+ streq r2, [r0, #108] ;@ 0x6c
+ strne r2, [r1, #16]
+ bx lr
+
+ arm_func_start FUN_037F9A0C
+FUN_037F9A0C: ;@ 0x037F9A0C
+ ldr r2, [r0, #112] ;@ 0x70
+ cmp r2, #0
+ streq r1, [r0, #108] ;@ 0x6c
+ strne r1, [r2, #16]
+ str r2, [r1, #20]
+ mov r2, #0
+ str r2, [r1, #16]
+ str r1, [r0, #112] ;@ 0x70
+ bx lr
+
+ arm_func_start FUN_037F9A30
+FUN_037F9A30: ;@ 0x037F9A30
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ add r5, r6, #108 ;@ 0x6c
+ mov r4, #0
+ b _037F9A58
+_037F9A44:
+ mov r0, r5
+ bl FUN_037F95EC
+ str r4, [r0, #12]
+ str r4, [r0, #8]
+ bl FUN_037F8FE8
+_037F9A58:
+ ldr r0, [r6, #108] ;@ 0x6c
+ cmp r0, #0
+ bne _037F9A44
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037F9A6C
+FUN_037F9A6C: ;@ 0x037F9A6C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, _037F9AD8 ;@ =_0380779C
+ ldr r0, [r0, #4]
+ ldr r1, [r5, #8]
+ cmp r1, r0
+ bne _037F9AC4
+ ldr r1, [r5, #12]
+ sub r1, r1, #1
+ str r1, [r5, #12]
+ ldr r1, [r5, #12]
+ cmp r1, #0
+ bne _037F9AC4
+ mov r1, r5
+ bl FUN_037F99E8
+ mov r0, #0
+ str r0, [r5, #8]
+ mov r0, r5
+ bl FUN_037F8FE8
+_037F9AC4:
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037F9AD8: .word _0380779C
+
+ arm_func_start FUN_037F9ADC
+FUN_037F9ADC: ;@ 0x037F9ADC
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, _037F9B64 ;@ =_0380779C
+ ldr r7, [r0, #4]
+ mov r6, #0
+_037F9AFC:
+ ldr r0, [r5, #8]
+ cmp r0, #0
+ bne _037F9B28
+ str r7, [r5, #8]
+ ldr r0, [r5, #12]
+ add r0, r0, #1
+ str r0, [r5, #12]
+ mov r0, r7
+ mov r1, r5
+ bl FUN_037F9A0C
+ b _037F9B50
+_037F9B28:
+ cmp r0, r7
+ ldreq r0, [r5, #12]
+ addeq r0, r0, #1
+ streq r0, [r5, #12]
+ beq _037F9B50
+ str r5, [r7, #104] ;@ 0x68
+ mov r0, r5
+ bl FUN_037F9064
+ str r6, [r7, #104] ;@ 0x68
+ b _037F9AFC
+_037F9B50:
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037F9B64: .word _0380779C
+ mov r2, #0
+ str r2, [r0, #4]
+ ldr r1, [r0, #4]
+ str r1, [r0]
+ str r2, [r0, #8]
+ str r2, [r0, #12]
+ bx lr
+
+ arm_func_start FUN_037F9B84
+FUN_037F9B84: ;@ 0x037F9B84
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl FUN_037F9CE4
+ bl FUN_037FB5B0
+ bl FUN_037F8CC0
+ bl FUN_037F89F4
+ bl FUN_037FA4AC
+ bl FUN_037FA920
+ bl FUN_037F9354
+ bl FUN_037FB1B0
+ bl FUN_038041E0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037F9BBC
+FUN_037F9BBC: ;@ 0x037F9BBC
+ mov r0, r0, lsl #2
+ add r0, r0, #40894464 ;@ 0x2700000
+ add r0, r0, #1044480 ;@ 0xff000
+ str r1, [r0, #3488] ;@ 0xda0
+ bx lr
+
+ arm_func_start FUN_037F9BD0
+FUN_037F9BD0: ;@ 0x037F9BD0
+ mov r0, r0, lsl #2
+ add r0, r0, #40894464 ;@ 0x2700000
+ add r0, r0, #1044480 ;@ 0xff000
+ str r1, [r0, #3524] ;@ 0xdc4
+ bx lr
+
+ arm_func_start FUN_037F9BE4
+FUN_037F9BE4: ;@ 0x037F9BE4
+ cmp r0, #1
+ beq _037F9C00
+ cmp r0, #7
+ beq _037F9C08
+ cmp r0, #8
+ beq _037F9C18
+ b _037F9C2C
+_037F9C00:
+ ldr r0, _037F9C34 ;@ =0x027FAFCC
+ bx lr
+_037F9C08:
+ ldr r0, _037F9C38 ;@ =0x0380B92C
+ cmp r0, #58720256 ;@ 0x03800000
+ movhi r0, #58720256 ;@ 0x03800000
+ bx lr
+_037F9C18:
+ mov r0, #58720256 ;@ 0x03800000
+ ldr r1, _037F9C38 ;@ =0x0380B92C
+ cmp r1, #58720256 ;@ 0x03800000
+ movhi r0, r1
+ bx lr
+_037F9C2C:
+ mov r0, #0
+ bx lr
+_037F9C34: .word 0x027FAFCC
+_037F9C38: .word 0x0380B92C
+
+ arm_func_start FUN_037F9C3C
+FUN_037F9C3C: ;@ 0x037F9C3C
+ cmp r0, #1
+ beq _037F9C58
+ cmp r0, #7
+ beq _037F9C60
+ cmp r0, #8
+ beq _037F9C68
+ b _037F9CA0
+_037F9C58:
+ ldr r0, _037F9CA8 ;@ =0x027FF000
+ bx lr
+_037F9C60:
+ mov r0, #58720256 ;@ 0x03800000
+ bx lr
+_037F9C68:
+ ldr r1, _037F9CAC ;@ =0x00000400
+ ldr r0, _037F9CB0 ;@ =0x0380FF80
+ sub r2, r0, r1
+ mov r0, #58720256 ;@ 0x03800000
+ ldr r1, _037F9CB4 ;@ =0x0380B92C
+ cmp r1, #58720256 ;@ 0x03800000
+ movhi r0, r1
+ ldr r1, _037F9CB8 ;@ =0x00000400
+ cmp r1, #0
+ bxeq lr
+ cmp r1, #0
+ sublt r0, r0, r1
+ subge r0, r2, r1
+ bx lr
+_037F9CA0:
+ mov r0, #0
+ bx lr
+_037F9CA8: .word 0x027FF000
+_037F9CAC: .word 0x00000400
+_037F9CB0: .word 0x0380FF80
+_037F9CB4: .word 0x0380B92C
+_037F9CB8: .word 0x00000400
+
+ arm_func_start FUN_037F9CBC
+FUN_037F9CBC: ;@ 0x037F9CBC
+ mov r0, r0, lsl #2
+ add r0, r0, #40894464 ;@ 0x2700000
+ add r0, r0, #1044480 ;@ 0xff000
+ ldr r0, [r0, #3488] ;@ 0xda0
+ bx lr
+
+ arm_func_start FUN_037F9CD0
+FUN_037F9CD0: ;@ 0x037F9CD0
+ mov r0, r0, lsl #2
+ add r0, r0, #40894464 ;@ 0x2700000
+ add r0, r0, #1044480 ;@ 0xff000
+ ldr r0, [r0, #3524] ;@ 0xdc4
+ bx lr
+
+ arm_func_start FUN_037F9CE4
+FUN_037F9CE4: ;@ 0x037F9CE4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037F9D84 ;@ =_038078F4
+ ldr r0, [r1]
+ cmp r0, #0
+ bne _037F9D78
+ mov r0, #1
+ str r0, [r1]
+ bl FUN_037F9C3C
+ mov r1, r0
+ mov r0, #1
+ bl FUN_037F9BD0
+ mov r0, #1
+ bl FUN_037F9BE4
+ mov r1, r0
+ mov r0, #1
+ bl FUN_037F9BBC
+ mov r0, #7
+ bl FUN_037F9C3C
+ mov r1, r0
+ mov r0, #7
+ bl FUN_037F9BD0
+ mov r0, #7
+ bl FUN_037F9BE4
+ mov r1, r0
+ mov r0, #7
+ bl FUN_037F9BBC
+ mov r0, #8
+ bl FUN_037F9C3C
+ mov r1, r0
+ mov r0, #8
+ bl FUN_037F9BD0
+ mov r0, #8
+ bl FUN_037F9BE4
+ mov r1, r0
+ mov r0, #8
+ bl FUN_037F9BBC
+_037F9D78:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037F9D84: .word _038078F4
+
+ arm_func_start FUN_037F9D88
+FUN_037F9D88: ;@ 0x037F9D88
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, #0
+ mov r5, r6
+ mvn r4, #0
+ bl FUN_037FB05C
+ ldr r1, _037F9F34 ;@ =_038078F8
+ ldr ip, [r1, r8, lsl #2]
+ mov r1, r4
+ cmp r7, r1
+ ldreq r7, [ip]
+ ldr r2, [ip, #16]
+ cmp r2, #0
+ beq _037F9F24
+ cmp r7, #0
+ blt _037F9F24
+ ldr r1, [ip, #4]
+ cmp r7, r1
+ bge _037F9F24
+ mov r1, #12
+ mul r1, r7, r1
+ add r3, r2, r1
+ ldr r2, [r2, r1]
+ cmp r2, #0
+ blt _037F9F24
+ ldr r1, [r3, #8]
+ cmp r1, #0
+ beq _037F9E70
+ ldr r7, [r1]
+ cmp r7, #0
+ bne _037F9F24
+ b _037F9E70
+_037F9E0C:
+ ldr r7, [ip, #8]
+ cmp r7, r1
+ bhi _037F9F24
+ ldr r7, [ip, #12]
+ cmp r1, r7
+ bcs _037F9F24
+ ands r7, r1, #31
+ bne _037F9F24
+ ldr lr, [r1, #4]
+ cmp lr, #0
+ beq _037F9E44
+ ldr r7, [lr]
+ cmp r7, r1
+ bne _037F9F24
+_037F9E44:
+ ldr r7, [r1, #8]
+ cmp r7, #64 ;@ 0x40
+ bcc _037F9F24
+ ands r1, r7, #31
+ bne _037F9F24
+ add r6, r6, r7
+ cmp r6, #0
+ ble _037F9F24
+ cmp r6, r2
+ bgt _037F9F24
+ mov r1, lr
+_037F9E70:
+ cmp r1, #0
+ bne _037F9E0C
+ ldr r1, [r3, #4]
+ cmp r1, #0
+ beq _037F9F14
+ ldr r3, [r1]
+ cmp r3, #0
+ bne _037F9F24
+ b _037F9F14
+_037F9E94:
+ ldr r3, [ip, #8]
+ cmp r3, r1
+ bhi _037F9F24
+ ldr r3, [ip, #12]
+ cmp r1, r3
+ bcs _037F9F24
+ ands r3, r1, #31
+ bne _037F9F24
+ ldr lr, [r1, #4]
+ cmp lr, #0
+ beq _037F9ECC
+ ldr r3, [lr]
+ cmp r3, r1
+ bne _037F9F24
+_037F9ECC:
+ ldr r7, [r1, #8]
+ cmp r7, #64 ;@ 0x40
+ bcc _037F9F24
+ ands r3, r7, #31
+ bne _037F9F24
+ cmp lr, #0
+ beq _037F9EF4
+ add r1, r1, r7
+ cmp r1, lr
+ bcs _037F9F24
+_037F9EF4:
+ add r6, r6, r7
+ sub r1, r7, #32
+ add r5, r5, r1
+ cmp r6, #0
+ ble _037F9F24
+ cmp r6, r2
+ bgt _037F9F24
+ mov r1, lr
+_037F9F14:
+ cmp r1, #0
+ bne _037F9E94
+ cmp r6, r2
+ moveq r4, r5
+_037F9F24:
+ bl FUN_037FB070
+ mov r0, r4
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037F9F34: .word _038078F8
+
+ arm_func_start FUN_037F9F38
+FUN_037F9F38: ;@ 0x037F9F38
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_037FB05C
+ ldr r1, _037F9FDC ;@ =_038078F8
+ ldr r7, [r1, r4, lsl #2]
+ add r1, r6, #31
+ bic r6, r1, #31
+ bic r5, r5, #31
+ mov r4, #0
+ ldr lr, [r7, #4]
+ mov r1, #12
+ b _037F9FC0
+_037F9F74:
+ ldr r3, [r7, #16]
+ mul r2, r4, r1
+ add ip, r3, r2
+ ldr r2, [r3, r2]
+ cmp r2, #0
+ bge _037F9FBC
+ sub r1, r5, r6
+ str r1, [ip]
+ mov r2, #0
+ str r2, [r6]
+ str r2, [r6, #4]
+ ldr r1, [ip]
+ str r1, [r6, #8]
+ str r6, [ip, #4]
+ str r2, [ip, #8]
+ bl FUN_037FB070
+ mov r0, r4
+ b _037F9FD0
+_037F9FBC:
+ add r4, r4, #1
+_037F9FC0:
+ cmp r4, lr
+ blt _037F9F74
+ bl FUN_037FB070
+ mvn r0, #0
+_037F9FD0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037F9FDC: .word _038078F8
+
+ arm_func_start FUN_037F9FE0
+FUN_037F9FE0: ;@ 0x037F9FE0
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r5, r1
+ mov r4, r2
+ mov r6, r3
+ bl FUN_037FB05C
+ ldr r1, _037FA084 ;@ =_038078F8
+ str r5, [r1, r7, lsl #2]
+ mov r2, #12
+ mul r1, r6, r2
+ add r3, r5, #20
+ str r3, [r5, #16]
+ str r6, [r5, #4]
+ mov r8, #0
+ mvn lr, #0
+ mov ip, r8
+ b _037FA044
+_037FA024:
+ ldr r6, [r5, #16]
+ mul r3, r8, r2
+ add r7, r6, r3
+ str lr, [r6, r3]
+ str ip, [r7, #8]
+ ldr r3, [r7, #8]
+ str r3, [r7, #4]
+ add r8, r8, #1
+_037FA044:
+ ldr r3, [r5, #4]
+ cmp r8, r3
+ blt _037FA024
+ mvn r2, #0
+ str r2, [r5]
+ ldr r2, [r5, #16]
+ add r1, r2, r1
+ add r1, r1, #31
+ bic r1, r1, #31
+ str r1, [r5, #8]
+ bic r1, r4, #31
+ str r1, [r5, #12]
+ bl FUN_037FB070
+ ldr r0, [r5, #8]
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FA084: .word _038078F8
+
+ arm_func_start FUN_037FA088
+FUN_037FA088: ;@ 0x037FA088
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r5, r1
+ bl FUN_037FB05C
+ ldr r1, _037FA0C0 ;@ =_038078F8
+ ldr r1, [r1, r4, lsl #2]
+ ldr r4, [r1]
+ str r5, [r1]
+ bl FUN_037FB070
+ mov r0, r4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FA0C0: .word _038078F8
+
+ arm_func_start FUN_037FA0C4
+FUN_037FA0C4: ;@ 0x037FA0C4
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r4, r1
+ mov r6, r2
+ bl FUN_037FB05C
+ mov r5, r0
+ ldr r0, _037FA134 ;@ =_038078F8
+ ldr r0, [r0, r7, lsl #2]
+ cmp r4, #0
+ ldrlt r4, [r0]
+ sub r6, r6, #32
+ ldr r1, [r0, #16]
+ mov r0, #12
+ mla r7, r4, r0, r1
+ ldr r0, [r7, #8]
+ mov r1, r6
+ bl FUN_037FA304
+ str r0, [r7, #8]
+ ldr r0, [r7, #4]
+ mov r1, r6
+ bl FUN_037FA250
+ str r0, [r7, #4]
+ mov r0, r5
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FA134: .word _038078F8
+
+ arm_func_start FUN_037FA138
+FUN_037FA138: ;@ 0x037FA138
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r6, r0
+ mov r5, r1
+ mov r7, r2
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r1, _037FA24C ;@ =_038078F8
+ ldr r1, [r1, r6, lsl #2]
+ cmp r1, #0
+ bne _037FA170
+ bl FUN_037FB070
+ mov r0, #0
+ b _037FA240
+_037FA170:
+ cmp r5, #0
+ ldrlt r5, [r1]
+ ldr r1, [r1, #16]
+ mov r0, #12
+ mla r6, r5, r0, r1
+ add r0, r7, #32
+ add r0, r0, #31
+ bic r7, r0, #31
+ ldr r0, [r6, #4]
+ mov r5, r0
+ b _037FA1AC
+_037FA19C:
+ ldr r1, [r5, #8]
+ cmp r7, r1
+ ble _037FA1B4
+ ldr r5, [r5, #4]
+_037FA1AC:
+ cmp r5, #0
+ bne _037FA19C
+_037FA1B4:
+ cmp r5, #0
+ bne _037FA1CC
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _037FA240
+_037FA1CC:
+ ldr r1, [r5, #8]
+ sub r1, r1, r7
+ cmp r1, #64 ;@ 0x40
+ bcs _037FA1EC
+ mov r1, r5
+ bl FUN_037FA304
+ str r0, [r6, #4]
+ b _037FA224
+_037FA1EC:
+ str r7, [r5, #8]
+ add r2, r5, r7
+ str r1, [r2, #8]
+ ldr r0, [r5]
+ str r0, [r5, r7]
+ ldr r0, [r5, #4]
+ str r0, [r2, #4]
+ ldr r0, [r2, #4]
+ cmp r0, #0
+ strne r2, [r0]
+ ldr r0, [r2]
+ cmp r0, #0
+ strne r2, [r0, #4]
+ streq r2, [r6, #4]
+_037FA224:
+ ldr r0, [r6, #8]
+ mov r1, r5
+ bl FUN_037FA32C
+ str r0, [r6, #8]
+ mov r0, r4
+ bl FUN_037FB070
+ add r0, r5, #32
+_037FA240:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FA24C: .word _038078F8
+
+ arm_func_start FUN_037FA250
+FUN_037FA250: ;@ 0x037FA250
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov ip, r0
+ mov lr, #0
+ b _037FA274
+_037FA264:
+ cmp r1, ip
+ bls _037FA27C
+ mov lr, ip
+ ldr ip, [ip, #4]
+_037FA274:
+ cmp ip, #0
+ bne _037FA264
+_037FA27C:
+ str ip, [r1, #4]
+ str lr, [r1]
+ cmp ip, #0
+ beq _037FA2BC
+ str r1, [ip]
+ ldr r3, [r1, #8]
+ add r2, r1, r3
+ cmp r2, ip
+ bne _037FA2BC
+ ldr r2, [ip, #8]
+ add r2, r3, r2
+ str r2, [r1, #8]
+ ldr ip, [ip, #4]
+ str ip, [r1, #4]
+ cmp ip, #0
+ strne r1, [ip]
+_037FA2BC:
+ cmp lr, #0
+ beq _037FA2F4
+ str r1, [lr, #4]
+ ldr r2, [lr, #8]
+ add r3, lr, r2
+ cmp r3, r1
+ bne _037FA2F8
+ ldr r1, [r1, #8]
+ add r1, r2, r1
+ str r1, [lr, #8]
+ str ip, [lr, #4]
+ cmp ip, #0
+ strne lr, [ip]
+ b _037FA2F8
+_037FA2F4:
+ mov r0, r1
+_037FA2F8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037FA304
+FUN_037FA304: ;@ 0x037FA304
+ ldr r3, [r1, #4]
+ cmp r3, #0
+ ldrne r2, [r1]
+ strne r2, [r3]
+ ldr r2, [r1]
+ cmp r2, #0
+ ldreq r0, [r1, #4]
+ ldrne r1, [r1, #4]
+ strne r1, [r2, #4]
+ bx lr
+
+ arm_func_start FUN_037FA32C
+FUN_037FA32C: ;@ 0x037FA32C
+ str r0, [r1, #4]
+ mov r2, #0
+ str r2, [r1]
+ cmp r0, #0
+ strne r1, [r0]
+ mov r0, r1
+ bx lr
+
+ arm_func_start FUN_037FA348
+FUN_037FA348: ;@ 0x037FA348
+ ldr r1, _037FA360 ;@ =_0380791C
+ ldrh r3, [r1]
+ mov r2, #1
+ orr r0, r3, r2, lsl r0
+ strh r0, [r1]
+ bx lr
+_037FA360: .word _0380791C
+
+ arm_func_start FUN_037FA364
+FUN_037FA364: ;@ 0x037FA364
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ bl FUN_037FB05C
+ ldr r1, _037FA404 ;@ =0x04000100
+ ldrh r1, [r1]
+ strh r1, [sp]
+ ldr r1, _037FA408 ;@ =_03807928
+ ldr ip, [r1]
+ ldr r3, [r1, #4]
+ ldr r2, _037FA40C ;@ =0x0000FFFF
+ mvn r1, #0
+ and r2, r3, r2
+ and r1, ip, r1
+ str r1, [sp, #4]
+ str r2, [sp, #8]
+ ldr r1, _037FA410 ;@ =0x04000214
+ ldr r1, [r1]
+ ands r1, r1, #8
+ beq _037FA3D8
+ ldrh r1, [sp]
+ ands r1, r1, #32768 ;@ 0x8000
+ bne _037FA3D8
+ ldr r3, [sp, #4]
+ ldr r2, [sp, #8]
+ mov r1, #1
+ adds r3, r3, r1
+ adc r1, r2, #0
+ str r3, [sp, #4]
+ str r1, [sp, #8]
+_037FA3D8:
+ bl FUN_037FB070
+ ldr r2, [sp, #4]
+ ldr r0, [sp, #8]
+ mov r1, r0, lsl #16
+ orr r1, r1, r2, lsr #16
+ ldrh r0, [sp]
+ orr r1, r1, r0, asr #31
+ orr r0, r0, r2, lsl #16
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_037FA404: .word 0x04000100
+_037FA408: .word _03807928
+_037FA40C: .word 0x0000FFFF
+_037FA410: .word 0x04000214
+
+ arm_func_start FUN_037FA414
+FUN_037FA414: ;@ 0x037FA414
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FA488 ;@ =_03807928
+ ldr ip, [r1]
+ ldr r2, [r1, #4]
+ mov r3, #0
+ mov r0, #1
+ adds ip, ip, r0
+ adc r0, r2, #0
+ str ip, [r1]
+ str r0, [r1, #4]
+ ldr r0, _037FA48C ;@ =_03807924
+ ldr r1, [r0]
+ cmp r1, #0
+ beq _037FA46C
+ ldr r2, _037FA490 ;@ =0x04000102
+ strh r3, [r2]
+ ldr r1, _037FA494 ;@ =0x04000100
+ strh r3, [r1]
+ mov r1, #193 ;@ 0xc1
+ strh r1, [r2]
+ str r3, [r0]
+_037FA46C:
+ mov r0, #0
+ ldr r1, _037FA498 ;@ =FUN_037FA414
+ mov r2, r0
+ bl FUN_037F8900
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FA488: .word _03807928
+_037FA48C: .word _03807924
+_037FA490: .word 0x04000102
+_037FA494: .word 0x04000100
+_037FA498: .word FUN_037FA414
+
+ arm_func_start FUN_037FA49C
+FUN_037FA49C: ;@ 0x037FA49C
+ ldr r0, _037FA4A8 ;@ =_03807920
+ ldrh r0, [r0]
+ bx lr
+_037FA4A8: .word _03807920
+
+ arm_func_start FUN_037FA4AC
+FUN_037FA4AC: ;@ 0x037FA4AC
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FA528 ;@ =_03807920
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _037FA51C
+ mov r1, #1
+ strh r1, [r0]
+ mov r0, #0
+ bl FUN_037FA348
+ mov r2, #0
+ ldr r0, _037FA52C ;@ =_03807928
+ str r2, [r0]
+ str r2, [r0, #4]
+ ldr r1, _037FA530 ;@ =0x04000102
+ strh r2, [r1]
+ ldr r0, _037FA534 ;@ =0x04000100
+ strh r2, [r0]
+ mov r0, #193 ;@ 0xc1
+ strh r0, [r1]
+ mov r0, #8
+ ldr r1, _037FA538 ;@ =FUN_037FA414
+ bl FUN_037F894C
+ mov r0, #8
+ bl FUN_037F8894
+ mov r1, #0
+ ldr r0, _037FA53C ;@ =_03807924
+ str r1, [r0]
+_037FA51C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FA528: .word _03807920
+_037FA52C: .word _03807928
+_037FA530: .word 0x04000102
+_037FA534: .word 0x04000100
+_037FA538: .word FUN_037FA414
+_037FA53C: .word _03807924
+
+ arm_func_start FUN_037FA540
+FUN_037FA540: ;@ 0x037FA540
+ stmdb sp!, {r0, lr}
+ bl FUN_037FA550
+ ldmia sp!, {r0, lr}
+ bx lr
+
+ arm_func_start FUN_037FA550
+FUN_037FA550: ;@ 0x037FA550
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r1, #0
+ ldr r0, _037FA644 ;@ =0x04000106
+ strh r1, [r0]
+ mov r0, #16
+ bl FUN_037F8858
+ ldr r1, _037FA648 ;@ =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, #16
+ str r0, [r1]
+ bl FUN_037FA364
+ ldr r2, _037FA64C ;@ =_03807934
+ ldr r4, [r2]
+ cmp r4, #0
+ beq _037FA638
+ ldr ip, [r4, #12]
+ ldr r3, [r4, #16]
+ cmp r1, r3
+ cmpeq r0, ip
+ bcs _037FA5B0
+ mov r0, r4
+ bl FUN_037FA970
+ b _037FA638
+_037FA5B0:
+ ldr r1, [r4, #24]
+ str r1, [r2]
+ cmp r1, #0
+ moveq r0, #0
+ streq r0, [r2, #4]
+ movne r0, #0
+ strne r0, [r1, #20]
+ ldr r5, [r4]
+ ldr r2, [r4, #28]
+ ldr r1, [r4, #32]
+ mov r0, #0
+ cmp r1, r0
+ cmpeq r2, r0
+ streq r0, [r4]
+ cmp r5, #0
+ beq _037FA5FC
+ ldr r0, [r4, #4]
+ mov lr, pc
+ bx r5
+_037FA5FC:
+ ldr r2, [r4, #28]
+ ldr r0, [r4, #32]
+ mov r1, #0
+ cmp r0, r1
+ cmpeq r2, r1
+ beq _037FA624
+ str r5, [r4]
+ mov r0, r4
+ mov r2, r1
+ bl FUN_037FA7D0
+_037FA624:
+ ldr r0, _037FA64C ;@ =_03807934
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037FA638
+ bl FUN_037FA970
+_037FA638:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FA644: .word 0x04000106
+_037FA648: .word 0x0380FFF8
+_037FA64C: .word _03807934
+
+ arm_func_start FUN_037FA650
+FUN_037FA650: ;@ 0x037FA650
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r1, [r5]
+ cmp r1, #0
+ bne _037FA678
+ bl FUN_037FB070
+ b _037FA6D0
+_037FA678:
+ ldr r0, [r5, #24]
+ cmp r0, #0
+ ldreq r2, [r5, #20]
+ ldreq r1, _037FA6DC ;@ =_03807934
+ streq r2, [r1, #4]
+ ldrne r1, [r5, #20]
+ strne r1, [r0, #20]
+ ldr r1, [r5, #20]
+ cmp r1, #0
+ strne r0, [r1, #24]
+ bne _037FA6B8
+ ldr r1, _037FA6DC ;@ =_03807934
+ str r0, [r1]
+ cmp r0, #0
+ beq _037FA6B8
+ bl FUN_037FA970
+_037FA6B8:
+ mov r0, #0
+ str r0, [r5]
+ str r0, [r5, #28]
+ str r0, [r5, #32]
+ mov r0, r4
+ bl FUN_037FB070
+_037FA6D0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FA6DC: .word _03807934
+
+ arm_func_start FUN_037FA6E0
+FUN_037FA6E0: ;@ 0x037FA6E0
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ movs r4, r0
+ mov r9, r1
+ mov r8, r2
+ mov r7, r3
+ ldr r6, [sp, #32]
+ beq _037FA70C
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _037FA710
+_037FA70C:
+ bl FUN_037FB1F0
+_037FA710:
+ bl FUN_037FB05C
+ mov r5, r0
+ str r7, [r4, #28]
+ str r6, [r4, #32]
+ str r9, [r4, #36] ;@ 0x24
+ str r8, [r4, #40] ;@ 0x28
+ ldr r0, [sp, #36] ;@ 0x24
+ str r0, [r4]
+ ldr r0, [sp, #40] ;@ 0x28
+ str r0, [r4, #4]
+ mov r0, r4
+ mov r1, #0
+ mov r2, r1
+ bl FUN_037FA7D0
+ mov r0, r5
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+
+ arm_func_start FUN_037FA75C
+FUN_037FA75C: ;@ 0x037FA75C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ movs r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r8, r3
+ beq _037FA780
+ ldr r0, [r7]
+ cmp r0, #0
+ beq _037FA784
+_037FA780:
+ bl FUN_037FB1F0
+_037FA784:
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #0
+ str r0, [r7, #28]
+ str r0, [r7, #32]
+ str r8, [r7]
+ ldr r0, [sp, #24]
+ str r0, [r7, #4]
+ bl FUN_037FA364
+ mov r2, r0
+ mov r0, r7
+ adds r3, r6, r2
+ adc r2, r5, r1
+ mov r1, r3
+ bl FUN_037FA7D0
+ mov r0, r4
+ bl FUN_037FB070
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_037FA7D0
+FUN_037FA7D0: ;@ 0x037FA7D0
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ ldr r2, [r8, #28]
+ ldr r1, [r8, #32]
+ mov r0, #0
+ cmp r1, r0
+ cmpeq r2, r0
+ beq _037FA84C
+ bl FUN_037FA364
+ ldr r7, [r8, #36] ;@ 0x24
+ ldr r6, [r8, #40] ;@ 0x28
+ cmp r6, r1
+ cmpeq r7, r0
+ bcs _037FA84C
+ ldr r5, [r8, #28]
+ ldr r4, [r8, #32]
+ subs r0, r0, r7
+ sbc r1, r1, r6
+ mov r2, r5
+ mov r3, r4
+ bl _ll_udiv
+ mov r2, #1
+ adds r2, r0, r2
+ adc r0, r1, #0
+ umull r3, r1, r5, r2
+ mla r1, r5, r0, r1
+ mla r1, r4, r2, r1
+ adds r7, r7, r3
+ adc r6, r6, r1
+_037FA84C:
+ str r7, [r8, #12]
+ str r6, [r8, #16]
+ ldr r0, _037FA8FC ;@ =_03807934
+ ldr r4, [r0]
+ mov r1, #0
+ b _037FA8B8
+_037FA864:
+ ldr r2, [r4, #12]
+ ldr r0, [r4, #16]
+ subs r3, r7, r2
+ sbc r2, r6, r0
+ subs r0, r3, r1
+ sbcs r0, r2, r1
+ bge _037FA8B4
+ ldr r0, [r4, #20]
+ str r0, [r8, #20]
+ str r8, [r4, #20]
+ str r4, [r8, #24]
+ ldr r0, [r8, #20]
+ cmp r0, #0
+ strne r8, [r0, #24]
+ bne _037FA8F4
+ ldr r0, _037FA8FC ;@ =_03807934
+ str r8, [r0]
+ mov r0, r8
+ bl FUN_037FA970
+ b _037FA8F4
+_037FA8B4:
+ ldr r4, [r4, #24]
+_037FA8B8:
+ cmp r4, #0
+ bne _037FA864
+ mov r0, #0
+ str r0, [r8, #24]
+ ldr r0, _037FA8FC ;@ =_03807934
+ ldr r1, [r0, #4]
+ str r8, [r0, #4]
+ str r1, [r8, #20]
+ cmp r1, #0
+ strne r8, [r1, #24]
+ bne _037FA8F4
+ str r8, [r0, #4]
+ str r8, [r0]
+ mov r0, r8
+ bl FUN_037FA970
+_037FA8F4:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FA8FC: .word _03807934
+
+ arm_func_start FUN_037FA900
+FUN_037FA900: ;@ 0x037FA900
+ mov r1, #0
+ str r1, [r0]
+ str r1, [r0, #8]
+ bx lr
+
+ arm_func_start FUN_037FA910
+FUN_037FA910: ;@ 0x037FA910
+ ldr r0, _037FA91C ;@ =_03807930
+ ldrh r0, [r0]
+ bx lr
+_037FA91C: .word _03807930
+
+ arm_func_start FUN_037FA920
+FUN_037FA920: ;@ 0x037FA920
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FA968 ;@ =_03807930
+ ldrh r0, [r1]
+ cmp r0, #0
+ bne _037FA95C
+ mov r0, #1
+ strh r0, [r1]
+ bl FUN_037FA348
+ mov r1, #0
+ ldr r0, _037FA96C ;@ =_03807934
+ str r1, [r0]
+ str r1, [r0, #4]
+ mov r0, #16
+ bl FUN_037F8858
+_037FA95C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FA968: .word _03807930
+_037FA96C: .word _03807934
+
+ arm_func_start FUN_037FA970
+FUN_037FA970: ;@ 0x037FA970
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ bl FUN_037FA364
+ mov r2, #0
+ ldr r3, _037FA9FC ;@ =0x04000106
+ strh r2, [r3]
+ ldr ip, [r4, #12]
+ ldr r3, [r4, #16]
+ subs r5, ip, r0
+ sbc r4, r3, r1
+ mov r0, #1
+ ldr r1, _037FAA00 ;@ =FUN_037FA540
+ bl FUN_037F8900
+ mov r1, #0
+ subs r0, r5, r1
+ sbcs r0, r4, r1
+ ldrlt r1, _037FAA04 ;@ =0x0000FFFE
+ blt _037FA9D4
+ mov r0, #65536 ;@ 0x10000
+ subs r0, r5, r0
+ sbcs r0, r4, r1
+ mvnlt r0, r5
+ movlt r0, r0, lsl #16
+ movlt r1, r0, lsr #16
+_037FA9D4:
+ ldr r0, _037FAA08 ;@ =0x04000104
+ strh r1, [r0]
+ mov r1, #193 ;@ 0xc1
+ ldr r0, _037FA9FC ;@ =0x04000106
+ strh r1, [r0]
+ mov r0, #16
+ bl FUN_037F8894
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FA9FC: .word 0x04000106
+_037FAA00: .word FUN_037FA540
+_037FAA04: .word 0x0000FFFE
+_037FAA08: .word 0x04000104
+
+ arm_func_start FUN_037FAA0C
+FUN_037FAA0C: ;@ 0x037FAA0C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ bl FUN_037FB05C
+ ldr r1, _037FAA50 ;@ =_03807940
+ ldr r1, [r1]
+ cmp r4, r1
+ ldrlt r1, _037FAA54 ;@ =_03807944
+ ldrlt r2, [r1]
+ addlt r2, r2, #1
+ strlt r2, [r1]
+ ldr r1, _037FAA50 ;@ =_03807940
+ str r4, [r1]
+ bl FUN_037FB070
+ ldr r0, _037FAA54 ;@ =_03807944
+ ldr r0, [r0]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FAA50: .word _03807940
+_037FAA54: .word _03807944
+
+ arm_func_start FUN_037FAA58
+FUN_037FAA58: ;@ 0x037FAA58
+ ldr r3, [r0, #12]
+ subs r3, r1, r3
+ ldrsh r1, [r0, #16]
+ sub r2, r2, r1
+ bmi _037FAA7C
+ cmp r3, #0
+ bne _037FAA84
+ cmp r2, #0
+ bge _037FAA84
+_037FAA7C:
+ mov r0, #0
+ bx lr
+_037FAA84:
+ cmp r2, #0
+ ldrlt r1, _037FAAA4 ;@ =0x00000107
+ addlt r2, r2, r1
+ ldrsh r0, [r0, #18]
+ cmp r2, r0
+ movle r0, #1
+ movgt r0, #2
+ bx lr
+_037FAAA4: .word 0x00000107
+
+ arm_func_start FUN_037FAAA8
+FUN_037FAAA8: ;@ 0x037FAAA8
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov r0, #4
+ bl FUN_037F8858
+ ldr r2, _037FAC1C ;@ =0x04000004
+ ldrh r0, [r2]
+ bic r0, r0, #32
+ strh r0, [r2]
+ ldr r1, _037FAC20 ;@ =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, #4
+ str r0, [r1]
+ ldrh r2, [r2]
+ mov r0, r2, asr #8
+ and r1, r0, #255 ;@ 0xff
+ mov r0, r2, lsl #1
+ and r0, r0, #256 ;@ 0x100
+ orr r0, r1, r0
+ sub r0, r0, #1
+ bl FUN_037FAA0C
+ ldr r9, _037FAC24 ;@ =0x04000006
+ mov r6, #4
+ ldr r5, _037FAC1C ;@ =0x04000004
+ mov r4, #0
+ ldr fp, _037FAC28 ;@ =_03807944
+ b _037FAC00
+_037FAB10:
+ ldrh r8, [r9]
+ mov r0, r8
+ bl FUN_037FAA0C
+ mov r7, r0
+ mov r0, sl
+ mov r1, r7
+ mov r2, r8
+ bl FUN_037FAA58
+ cmp r0, #0
+ beq _037FAB4C
+ cmp r0, #1
+ beq _037FAB8C
+ cmp r0, #2
+ beq _037FABE4
+ b _037FAC00
+_037FAB4C:
+ mov r0, sl
+ bl FUN_037FAD2C
+ ldrh r1, [r9]
+ ldrsh r0, [sl, #16]
+ cmp r0, r1
+ bne _037FAC10
+ ldr r0, [sl, #12]
+ cmp r0, r7
+ bne _037FAC10
+ mov r0, r6
+ bl FUN_037F8858
+ ldrh r0, [r5]
+ bic r0, r0, #32
+ strh r0, [r5]
+ mov r0, r6
+ bl FUN_037F8824
+_037FAB8C:
+ ldr r7, [sl]
+ mov r0, sl
+ bl FUN_037FAECC
+ str r4, [sl]
+ cmp r7, #0
+ beq _037FABB0
+ ldr r0, [sl, #4]
+ mov lr, pc
+ bx r7
+_037FABB0:
+ ldr r0, [sl, #28]
+ cmp r0, #0
+ beq _037FAC00
+ ldr r0, [sl, #36] ;@ 0x24
+ cmp r0, #0
+ bne _037FAC00
+ str r7, [sl]
+ ldr r0, [fp]
+ add r0, r0, #1
+ str r0, [sl, #12]
+ mov r0, sl
+ bl FUN_037FAF04
+ b _037FAC00
+_037FABE4:
+ mov r0, sl
+ bl FUN_037FAECC
+ mov r0, sl
+ bl FUN_037FAF04
+ ldr r0, [fp]
+ add r0, r0, #1
+ str r0, [sl, #12]
+_037FAC00:
+ ldr r0, _037FAC2C ;@ =_03807948
+ ldr sl, [r0]
+ cmp sl, #0
+ bne _037FAB10
+_037FAC10:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FAC1C: .word 0x04000004
+_037FAC20: .word 0x0380FFF8
+_037FAC24: .word 0x04000006
+_037FAC28: .word _03807944
+_037FAC2C: .word _03807948
+
+ arm_func_start FUN_037FAC30
+FUN_037FAC30: ;@ 0x037FAC30
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ bl FUN_037FB05C
+ mov r5, r0
+ cmp r7, #0
+ bne _037FAC50
+ bl FUN_037FB1F0
+_037FAC50:
+ ldr r0, _037FACA8 ;@ =_03807948
+ ldr r0, [r0]
+ cmp r0, #0
+ ldrne r6, [r0, #24]
+ moveq r6, #0
+ mov r4, #0
+ b _037FAC8C
+_037FAC6C:
+ ldr r1, [r0, #8]
+ cmp r1, r7
+ bne _037FAC7C
+ bl FUN_037FACAC
+_037FAC7C:
+ mov r0, r6
+ cmp r6, #0
+ ldrne r6, [r6, #24]
+ moveq r6, r4
+_037FAC8C:
+ cmp r0, #0
+ bne _037FAC6C
+ mov r0, r5
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FACA8: .word _03807948
+
+ arm_func_start FUN_037FACAC
+FUN_037FACAC: ;@ 0x037FACAC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r1, #1
+ str r1, [r5, #36] ;@ 0x24
+ ldr r1, [r5]
+ cmp r1, #0
+ bne _037FACDC
+ bl FUN_037FB070
+ b _037FACF4
+_037FACDC:
+ mov r0, r5
+ bl FUN_037FAECC
+ mov r0, #0
+ str r0, [r5]
+ mov r0, r4
+ bl FUN_037FB070
+_037FACF4:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FAD00
+FUN_037FAD00: ;@ 0x037FAD00
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ movs r4, r1
+ bne _037FAD18
+ bl FUN_037FB1F0
+_037FAD18:
+ cmp r5, #0
+ strne r4, [r5, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FAD2C
+FUN_037FAD2C: ;@ 0x037FAD2C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #4
+ ldr r1, _037FAD80 ;@ =FUN_037FAAA8
+ bl FUN_037F894C
+ ldrsh ip, [r4, #16]
+ and r3, ip, #256 ;@ 0x100
+ ldr r1, _037FAD84 ;@ =0x04000004
+ ldrh r0, [r1]
+ and r2, r0, #63 ;@ 0x3f
+ and r0, ip, #255 ;@ 0xff
+ orr r0, r2, r0, lsl #8
+ orr r0, r0, r3, asr #1
+ strh r0, [r1]
+ ldrh r0, [r1]
+ orr r0, r0, #32
+ strh r0, [r1]
+ mov r0, #4
+ bl FUN_037F8894
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FAD80: .word FUN_037FAAA8
+_037FAD84: .word 0x04000004
+
+ arm_func_start FUN_037FAD88
+FUN_037FAD88: ;@ 0x037FAD88
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl FUN_037FB05C
+ mov r4, r0
+ cmp r8, #0
+ beq _037FADBC
+ ldr r0, [r8]
+ cmp r0, #0
+ beq _037FADC0
+_037FADBC:
+ bl FUN_037FB1F0
+_037FADC0:
+ ldr r0, _037FAE1C ;@ =0x04000006
+ ldrh r9, [r0]
+ mov r0, r9
+ bl FUN_037FAA0C
+ mov r1, #1
+ str r1, [r8, #28]
+ strh r7, [r8, #16]
+ cmp r7, r9
+ addle r0, r0, #1
+ str r0, [r8, #12]
+ strh r6, [r8, #18]
+ str r5, [r8]
+ ldr r0, [sp, #32]
+ str r0, [r8, #4]
+ mov r0, #0
+ str r0, [r8, #36] ;@ 0x24
+ mov r0, r8
+ bl FUN_037FAF48
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FAE1C: .word 0x04000006
+
+ arm_func_start FUN_037FAE20
+FUN_037FAE20: ;@ 0x037FAE20
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ bl FUN_037FB05C
+ mov r4, r0
+ cmp r8, #0
+ beq _037FAE54
+ ldr r0, [r8]
+ cmp r0, #0
+ beq _037FAE58
+_037FAE54:
+ bl FUN_037FB1F0
+_037FAE58:
+ ldr r0, _037FAEB4 ;@ =0x04000006
+ ldrh r9, [r0]
+ mov r0, r9
+ bl FUN_037FAA0C
+ mov r1, #0
+ str r1, [r8, #28]
+ strh r7, [r8, #16]
+ cmp r7, r9
+ addle r0, r0, #1
+ str r0, [r8, #12]
+ strh r6, [r8, #18]
+ str r5, [r8]
+ ldr r0, [sp, #32]
+ str r0, [r8, #4]
+ mov r0, #0
+ str r0, [r8, #36] ;@ 0x24
+ mov r0, r8
+ bl FUN_037FAF48
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FAEB4: .word 0x04000006
+
+ arm_func_start FUN_037FAEB8
+FUN_037FAEB8: ;@ 0x037FAEB8
+ mov r1, #0
+ str r1, [r0]
+ str r1, [r0, #8]
+ str r1, [r0, #32]
+ bx lr
+
+ arm_func_start FUN_037FAECC
+FUN_037FAECC: ;@ 0x037FAECC
+ cmp r0, #0
+ bxeq lr
+ ldr r2, [r0, #20]
+ ldr r1, [r0, #24]
+ cmp r1, #0
+ strne r2, [r1, #20]
+ ldreq r0, _037FAF00 ;@ =_03807948
+ streq r2, [r0, #4]
+ cmp r2, #0
+ strne r1, [r2, #24]
+ ldreq r0, _037FAF00 ;@ =_03807948
+ streq r1, [r0]
+ bx lr
+_037FAF00: .word _03807948
+
+ arm_func_start FUN_037FAF04
+FUN_037FAF04: ;@ 0x037FAF04
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FAF44 ;@ =_03807948
+ ldr r3, [r1, #4]
+ str r3, [r0, #20]
+ mov r2, #0
+ str r2, [r0, #24]
+ str r0, [r1, #4]
+ cmp r3, #0
+ strne r0, [r3, #24]
+ bne _037FAF38
+ str r0, [r1]
+ bl FUN_037FAD2C
+_037FAF38:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FAF44: .word _03807948
+
+ arm_func_start FUN_037FAF48
+FUN_037FAF48: ;@ 0x037FAF48
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FAFCC ;@ =_03807948
+ ldr r3, [r1]
+ b _037FAFB4
+_037FAF5C:
+ ldr r2, [r0, #12]
+ ldr r1, [r3, #12]
+ cmp r1, r2
+ bcc _037FAFB0
+ cmp r1, r2
+ bne _037FAF84
+ ldrsh r2, [r3, #16]
+ ldrsh r1, [r0, #16]
+ cmp r2, r1
+ ble _037FAFB0
+_037FAF84:
+ ldr r1, [r3, #20]
+ str r1, [r0, #20]
+ str r3, [r0, #24]
+ str r0, [r3, #20]
+ cmp r1, #0
+ strne r0, [r1, #24]
+ bne _037FAFC0
+ ldr r1, _037FAFCC ;@ =_03807948
+ str r0, [r1]
+ bl FUN_037FAD2C
+ b _037FAFC0
+_037FAFB0:
+ ldr r3, [r3, #24]
+_037FAFB4:
+ cmp r3, #0
+ bne _037FAF5C
+ bl FUN_037FAF04
+_037FAFC0:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FAFCC: .word _03807948
+
+ arm_func_start FUN_037FAFD0
+FUN_037FAFD0: ;@ 0x037FAFD0
+ ldr r0, _037FAFDC ;@ =_0380793C
+ ldrh r0, [r0]
+ bx lr
+_037FAFDC: .word _0380793C
+
+ arm_func_start FUN_037FAFE0
+FUN_037FAFE0: ;@ 0x037FAFE0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FB038 ;@ =_0380793C
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _037FB02C
+ mov r1, #1
+ strh r1, [r0]
+ mov r1, #0
+ ldr r0, _037FB03C ;@ =_03807948
+ str r1, [r0]
+ str r1, [r0, #4]
+ mov r0, #4
+ bl FUN_037F8858
+ mov r1, #0
+ ldr r0, _037FB040 ;@ =_03807944
+ str r1, [r0]
+ ldr r0, _037FB044 ;@ =_03807940
+ str r1, [r0]
+_037FB02C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FB038: .word _0380793C
+_037FB03C: .word _03807948
+_037FB040: .word _03807944
+_037FB044: .word _03807940
+
+ arm_func_start FUN_037FB048
+FUN_037FB048: ;@ 0x037FB048
+ mrs r0, CPSR
+ bic r1, r0, #128 ;@ 0x80
+ msr CPSR_c, r1
+ and r0, r0, #128 ;@ 0x80
+ bx lr
+
+ arm_func_start FUN_037FB05C
+FUN_037FB05C: ;@ 0x037FB05C
+ mrs r0, CPSR
+ orr r1, r0, #128 ;@ 0x80
+ msr CPSR_c, r1
+ and r0, r0, #128 ;@ 0x80
+ bx lr
+
+ arm_func_start FUN_037FB070
+FUN_037FB070: ;@ 0x037FB070
+ mrs r1, CPSR
+ bic r2, r1, #128 ;@ 0x80
+ orr r2, r2, r0
+ msr CPSR_c, r2
+ and r0, r1, #128 ;@ 0x80
+ bx lr
+
+ arm_func_start FUN_037FB088
+FUN_037FB088: ;@ 0x037FB088
+ mrs r0, CPSR
+ orr r1, r0, #192 ;@ 0xc0
+ msr CPSR_c, r1
+ and r0, r0, #192 ;@ 0xc0
+ bx lr
+
+ arm_func_start FUN_037FB09C
+FUN_037FB09C: ;@ 0x037FB09C
+ mrs r1, CPSR
+ bic r2, r1, #192 ;@ 0xc0
+ orr r2, r2, r0
+ msr CPSR_c, r2
+ and r0, r1, #192 ;@ 0xc0
+ bx lr
+
+ arm_func_start FUN_037FB0B4
+FUN_037FB0B4: ;@ 0x037FB0B4
+ mrs r0, CPSR
+ and r0, r0, #31
+ bx lr
+
+ arm_func_start FUN_037FB0C0
+FUN_037FB0C0: ;@ 0x037FB0C0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r1, #4
+ bl _s32_div_f
+ bl FUN_037F8CB4
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037FB0E0
+FUN_037FB0E0: ;@ 0x037FB0E0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ bl FUN_037FB20C
+ mov r0, #1
+ bl FUN_037FB20C
+ mov r0, #2
+ bl FUN_037FB20C
+ mov r0, #3
+ bl FUN_037FB20C
+ mov r0, #262144 ;@ 0x40000
+ bl FUN_037F88CC
+ mvn r0, #0
+ bl FUN_037F8824
+ bl FUN_037FBAF8
+ mov r0, #16
+ bl FUN_037FB134
+ bl FUN_038073EC
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037FB134
+FUN_037FB134: ;@ 0x037FB134
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0, lsl #8
+ mov r5, #12
+ mov r4, #0
+_037FB144:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ bne _037FB144
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FB164
+FUN_037FB164: ;@ 0x037FB164
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #32512 ;@ 0x7f00
+ mov r0, r0, lsl #8
+ mov r0, r0, lsr #16
+ cmp r0, #16
+ moveq r1, #1
+ ldreq r0, _037FB19C ;@ =_03807954
+ streqh r1, [r0]
+ beq _037FB190
+ bl FUN_037FB1F0
+_037FB190:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FB19C: .word _03807954
+
+ arm_func_start FUN_037FB1A0
+FUN_037FB1A0: ;@ 0x037FB1A0
+ ldr r0, _037FB1AC ;@ =_03807954
+ ldrh r0, [r0]
+ bx lr
+_037FB1AC: .word _03807954
+
+ arm_func_start FUN_037FB1B0
+FUN_037FB1B0: ;@ 0x037FB1B0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FB1E8 ;@ =_03807950
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _037FB1DC
+ mov r1, #1
+ strh r1, [r0]
+ mov r0, #12
+ ldr r1, _037FB1EC ;@ =FUN_037FB164
+ bl FUN_037FB7A8
+_037FB1DC:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FB1E8: .word _03807950
+_037FB1EC: .word FUN_037FB164
+
+ arm_func_start FUN_037FB1F0
+FUN_037FB1F0: ;@ 0x037FB1F0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ bl FUN_03803E5C
+_037FB200:
+ bl FUN_037FB05C
+ bl FUN_037F8530
+ b _037FB200
+
+ arm_func_start FUN_037FB20C
+FUN_037FB20C: ;@ 0x037FB20C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ bl FUN_037FB05C
+ mov r1, #6
+ mul r1, r4, r1
+ add r1, r1, #5
+ mov r1, r1, lsl #1
+ add r1, r1, #67108864 ;@ 0x4000000
+ ldrh r2, [r1, #176] ;@ 0xb0
+ bic r2, r2, #12800 ;@ 0x3200
+ strh r2, [r1, #176] ;@ 0xb0
+ ldrh r2, [r1, #176] ;@ 0xb0
+ bic r2, r2, #32768 ;@ 0x8000
+ strh r2, [r1, #176] ;@ 0xb0
+ ldrh r2, [r1, #176] ;@ 0xb0
+ ldrh r1, [r1, #176] ;@ 0xb0
+ cmp r4, #0
+ bne _037FB27C
+ mov r1, #12
+ mul r3, r4, r1
+ ldr r1, _037FB288 ;@ =0x040000B0
+ add r4, r3, r1
+ mov r2, #0
+ add r1, r3, #67108864 ;@ 0x4000000
+ str r2, [r1, #176] ;@ 0xb0
+ str r2, [r4, #4]
+ ldr r1, _037FB28C ;@ =0x81400001
+ str r1, [r4, #8]
+_037FB27C:
+ bl FUN_037FB070
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FB288: .word 0x040000B0
+_037FB28C: .word 0x81400001
+
+ arm_func_start FUN_037FB290
+FUN_037FB290: ;@ 0x037FB290
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ bl FUN_037FB05C
+ mov r1, #3
+ mul r1, r4, r1
+ add r2, r1, #2
+ ldr r1, _037FB2F8 ;@ =0x040000B0
+ add r2, r1, r2, lsl #2
+_037FB2B0:
+ ldr r1, [r2]
+ ands r1, r1, #-2147483648 ;@ 0x80000000
+ bne _037FB2B0
+ cmp r4, #0
+ bne _037FB2EC
+ mov r1, #12
+ mul r3, r4, r1
+ ldr r1, _037FB2F8 ;@ =0x040000B0
+ add r4, r3, r1
+ mov r2, #0
+ add r1, r3, #67108864 ;@ 0x4000000
+ str r2, [r1, #176] ;@ 0xb0
+ str r2, [r4, #4]
+ ldr r1, _037FB2FC ;@ =0x81400001
+ str r1, [r4, #8]
+_037FB2EC:
+ bl FUN_037FB070
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FB2F8: .word 0x040000B0
+_037FB2FC: .word 0x81400001
+ mov r3, #0
+_037FB304:
+ cmp r3, r2
+ strlth r0, [r1, r3]
+ addlt r3, r3, #2
+ blt _037FB304
+ bx lr
+ mov ip, #0
+_037FB31C:
+ cmp ip, r2
+ ldrlth r3, [r0, ip]
+ strlth r3, [r1, ip]
+ addlt ip, ip, #2
+ blt _037FB31C
+ bx lr
+
+ arm_func_start FUN_037FB334
+FUN_037FB334: ;@ 0x037FB334
+ add ip, r1, r2
+_037FB338:
+ cmp r1, ip
+ stmltia r1!, {r0}
+ blt _037FB338
+ bx lr
+
+ arm_func_start FUN_037FB348
+FUN_037FB348: ;@ 0x037FB348
+ add ip, r1, r2
+_037FB34C:
+ cmp r1, ip
+ ldmltia r0!, {r2}
+ stmltia r1!, {r2}
+ blt _037FB34C
+ bx lr
+
+ arm_func_start FUN_037FB360
+FUN_037FB360: ;@ 0x037FB360
+ stmdb sp!, {r4, r5, r6, r7, r8, r9}
+ add r9, r1, r2
+ mov ip, r2, lsr #5
+ add ip, r1, ip, lsl #5
+ mov r2, r0
+ mov r3, r2
+ mov r4, r2
+ mov r5, r2
+ mov r6, r2
+ mov r7, r2
+ mov r8, r2
+_037FB38C:
+ cmp r1, ip
+ stmltia r1!, {r0, r2, r3, r4, r5, r6, r7, r8}
+ blt _037FB38C
+_037FB398:
+ cmp r1, r9
+ stmltia r1!, {r0}
+ blt _037FB398
+ ldmia sp!, {r4, r5, r6, r7, r8, r9}
+ bx lr
+
+ arm_func_start FUN_037FB3AC
+FUN_037FB3AC: ;@ 0x037FB3AC
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl}
+ add sl, r1, r2
+ mov ip, r2, lsr #5
+ add ip, r1, ip, lsl #5
+_037FB3BC:
+ cmp r1, ip
+ ldmltia r0!, {r2, r3, r4, r5, r6, r7, r8, r9}
+ stmltia r1!, {r2, r3, r4, r5, r6, r7, r8, r9}
+ blt _037FB3BC
+_037FB3CC:
+ cmp r1, sl
+ ldmltia r0!, {r2}
+ stmltia r1!, {r2}
+ blt _037FB3CC
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl}
+ bx lr
+
+ arm_func_start FUN_037FB3E4
+FUN_037FB3E4: ;@ 0x037FB3E4
+ cmp r2, #0
+ bxeq lr
+ tst r0, #1
+ beq _037FB410
+ ldrh ip, [r0, #-1]
+ and ip, ip, #255 ;@ 0xff
+ orr r3, ip, r1, lsl #8
+ strh r3, [r0, #-1]
+ add r0, r0, #1
+ subs r2, r2, #1
+ bxeq lr
+_037FB410:
+ cmp r2, #2
+ bcc _037FB458
+ orr r1, r1, r1, lsl #8
+ tst r0, #2
+ beq _037FB430
+ strh r1, [r0], #2
+ subs r2, r2, #2
+ bxeq lr
+_037FB430:
+ orr r1, r1, r1, lsl #16
+ bics r3, r2, #3
+ beq _037FB450
+ sub r2, r2, r3
+ add ip, r3, r0
+_037FB444:
+ str r1, [r0], #4
+ cmp r0, ip
+ bcc _037FB444
+_037FB450:
+ tst r2, #2
+ strneh r1, [r0], #2
+_037FB458:
+ tst r2, #1
+ bxeq lr
+ ldrh r3, [r0]
+ and r3, r3, #65280 ;@ 0xff00
+ and r1, r1, #255 ;@ 0xff
+ orr r1, r1, r3
+ strh r1, [r0]
+ bx lr
+
+ arm_func_start FUN_037FB478
+FUN_037FB478: ;@ 0x037FB478
+ cmp r2, #0
+ bxeq lr
+ tst r1, #1
+ beq _037FB4B8
+ ldrh ip, [r1, #-1]
+ and ip, ip, #255 ;@ 0xff
+ tst r0, #1
+ ldrneh r3, [r0, #-1]
+ movne r3, r3, lsr #8
+ ldreqh r3, [r0]
+ orr r3, ip, r3, lsl #8
+ strh r3, [r1, #-1]
+ add r0, r0, #1
+ add r1, r1, #1
+ subs r2, r2, #1
+ bxeq lr
+_037FB4B8:
+ eor ip, r1, r0
+ tst ip, #1
+ beq _037FB50C
+ bic r0, r0, #1
+ ldrh ip, [r0], #2
+ mov r3, ip, lsr #8
+ subs r2, r2, #2
+ bcc _037FB4F0
+_037FB4D8:
+ ldrh ip, [r0], #2
+ orr ip, r3, ip, lsl #8
+ strh ip, [r1], #2
+ mov r3, ip, lsr #16
+ subs r2, r2, #2
+ bcs _037FB4D8
+_037FB4F0:
+ tst r2, #1
+ bxeq lr
+ ldrh ip, [r1]
+ and ip, ip, #65280 ;@ 0xff00
+ orr ip, ip, r3
+ strh ip, [r1]
+ bx lr
+_037FB50C:
+ tst ip, #2
+ beq _037FB538
+ bics r3, r2, #1
+ beq _037FB584
+ sub r2, r2, r3
+ add ip, r3, r1
+_037FB524:
+ ldrh r3, [r0], #2
+ strh r3, [r1], #2
+ cmp r1, ip
+ bcc _037FB524
+ b _037FB584
+_037FB538:
+ cmp r2, #2
+ bcc _037FB584
+ tst r1, #2
+ beq _037FB558
+ ldrh r3, [r0], #2
+ strh r3, [r1], #2
+ subs r2, r2, #2
+ bxeq lr
+_037FB558:
+ bics r3, r2, #3
+ beq _037FB578
+ sub r2, r2, r3
+ add ip, r3, r1
+_037FB568:
+ ldr r3, [r0], #4
+ str r3, [r1], #4
+ cmp r1, ip
+ bcc _037FB568
+_037FB578:
+ tst r2, #2
+ ldrneh r3, [r0], #2
+ strneh r3, [r1], #2
+_037FB584:
+ tst r2, #1
+ bxeq lr
+ ldrh r2, [r1]
+ ldrh r0, [r0]
+ and r2, r2, #65280 ;@ 0xff00
+ and r0, r0, #255 ;@ 0xff
+ orr r0, r2, r0
+ strh r0, [r1]
+ bx lr
+
+ arm_func_start FUN_037FB5A8
+FUN_037FB5A8: ;@ 0x037FB5A8
+ swp r0, r0, [r1]
+ bx lr
+
+ arm_func_start FUN_037FB5B0
+FUN_037FB5B0: ;@ 0x037FB5B0
+ ldr ip, _037FB5B8 ;@ =FUN_037FB814
+ bx ip
+_037FB5B8: .word FUN_037FB814
+
+ arm_func_start FUN_037FB5BC
+FUN_037FB5BC: ;@ 0x037FB5BC
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #8
+ ldr sl, _037FB6D0 ;@ =0x04000184
+ ldr r5, _037FB6D4 ;@ =_0380795C
+ mov r7, #68157440 ;@ 0x4100000
+ mov r6, #0
+ mvn r8, #3
+ mvn r9, #2
+ ldr r4, _037FB6D8 ;@ =0x04000188
+_037FB5E0:
+ ldrh r0, [sl]
+ ands r0, r0, #16384 ;@ 0x4000
+ ldrneh r0, [sl]
+ orrne r0, r0, #49152 ;@ 0xc000
+ strneh r0, [sl]
+ movne r1, r9
+ bne _037FB628
+ bl FUN_037FB05C
+ ldrh r1, [sl]
+ ands r1, r1, #256 ;@ 0x100
+ beq _037FB618
+ bl FUN_037FB070
+ mov r1, r8
+ b _037FB628
+_037FB618:
+ ldr r1, [r7]
+ str r1, [sp]
+ bl FUN_037FB070
+ mov r1, r6
+_037FB628:
+ cmp r1, r8
+ beq _037FB6C4
+ mvn r0, #2
+ cmp r1, r0
+ beq _037FB5E0
+ ldr r2, [sp]
+ mov r0, r2, lsl #27
+ movs r0, r0, lsr #27
+ beq _037FB5E0
+ ldr r3, [r5, r0, lsl #2]
+ cmp r3, #0
+ beq _037FB670
+ mov r1, r2, lsr #6
+ mov r2, r2, lsl #26
+ mov r2, r2, lsr #31
+ mov lr, pc
+ bx r3
+ b _037FB5E0
+_037FB670:
+ mov r0, r2, lsl #26
+ movs r0, r0, lsr #31
+ bne _037FB5E0
+ orr r0, r2, #32
+ str r0, [sp]
+ ldrh r0, [sl]
+ ands r0, r0, #16384 ;@ 0x4000
+ ldrneh r0, [sl]
+ orrne r0, r0, #49152 ;@ 0xc000
+ strneh r0, [sl]
+ bne _037FB5E0
+ bl FUN_037FB05C
+ ldrh r1, [sl]
+ ands r1, r1, #2
+ beq _037FB6B4
+ bl FUN_037FB070
+ b _037FB5E0
+_037FB6B4:
+ ldr r1, [sp]
+ str r1, [r4]
+ bl FUN_037FB070
+ b _037FB5E0
+_037FB6C4:
+ add sp, sp, #8
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_037FB6D0: .word 0x04000184
+_037FB6D4: .word _0380795C
+_037FB6D8: .word 0x04000188
+
+ arm_func_start FUN_037FB6DC
+FUN_037FB6DC: ;@ 0x037FB6DC
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r3, [sp]
+ bic r3, r3, #31
+ and r0, r0, #31
+ orr r0, r3, r0
+ str r0, [sp]
+ bic r3, r0, #32
+ and r0, r2, #1
+ orr r0, r3, r0, lsl #5
+ str r0, [sp]
+ and r2, r0, #63 ;@ 0x3f
+ bic r0, r1, #-67108864 ;@ 0xfc000000
+ orr r0, r2, r0, lsl #6
+ str r0, [sp]
+ ldr r1, _037FB778 ;@ =0x04000184
+ ldrh r0, [r1]
+ ands r0, r0, #16384 ;@ 0x4000
+ ldrneh r0, [r1]
+ orrne r0, r0, #49152 ;@ 0xc000
+ strneh r0, [r1]
+ mvnne r0, #0
+ bne _037FB76C
+ bl FUN_037FB05C
+ ldr r1, _037FB778 ;@ =0x04000184
+ ldrh r1, [r1]
+ ands r1, r1, #2
+ beq _037FB758
+ bl FUN_037FB070
+ mvn r0, #1
+ b _037FB76C
+_037FB758:
+ ldr r2, [sp]
+ ldr r1, _037FB77C ;@ =0x04000188
+ str r2, [r1]
+ bl FUN_037FB070
+ mov r0, #0
+_037FB76C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FB778: .word 0x04000184
+_037FB77C: .word 0x04000188
+
+ arm_func_start FUN_037FB780
+FUN_037FB780: ;@ 0x037FB780
+ mov r3, #1
+ mov r2, r3, lsl r0
+ ldr r0, _037FB7A4 ;@ =0x027FFC00
+ add r0, r0, r1, lsl #2
+ ldr r0, [r0, #904] ;@ 0x388
+ ands r0, r2, r0
+ moveq r3, #0
+ mov r0, r3
+ bx lr
+_037FB7A4: .word 0x027FFC00
+
+ arm_func_start FUN_037FB7A8
+FUN_037FB7A8: ;@ 0x037FB7A8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r5, r1
+ bl FUN_037FB05C
+ ldr r1, _037FB80C ;@ =_0380795C
+ str r5, [r1, r4, lsl #2]
+ cmp r5, #0
+ beq _037FB7E4
+ ldr r3, _037FB810 ;@ =0x027FFC00
+ ldr r2, [r3, #908] ;@ 0x38c
+ mov r1, #1
+ orr r1, r2, r1, lsl r4
+ str r1, [r3, #908] ;@ 0x38c
+ b _037FB7FC
+_037FB7E4:
+ ldr r3, _037FB810 ;@ =0x027FFC00
+ ldr r2, [r3, #908] ;@ 0x38c
+ mov r1, #1
+ mvn r1, r1, lsl r4
+ and r1, r2, r1
+ str r1, [r3, #908] ;@ 0x38c
+_037FB7FC:
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FB80C: .word _0380795C
+_037FB810: .word 0x027FFC00
+
+ arm_func_start FUN_037FB814
+FUN_037FB814: ;@ 0x037FB814
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ bl FUN_037FB05C
+ mov r5, r0
+ ldr r0, _037FB8D4 ;@ =_03807958
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _037FB8C4
+ mov r1, #1
+ strh r1, [r0]
+ mov r2, #0
+ ldr r0, _037FB8D8 ;@ =0x027FFC00
+ str r2, [r0, #908] ;@ 0x38c
+ mov r1, r2
+ ldr r0, _037FB8DC ;@ =_0380795C
+_037FB84C:
+ str r1, [r0, r2, lsl #2]
+ add r2, r2, #1
+ cmp r2, #32
+ blt _037FB84C
+ ldr r1, _037FB8E0 ;@ =0x0000C408
+ ldr r0, _037FB8E4 ;@ =0x04000184
+ strh r1, [r0]
+ mov r0, #262144 ;@ 0x40000
+ bl FUN_037F8824
+ mov r0, #262144 ;@ 0x40000
+ ldr r1, _037FB8E8 ;@ =FUN_037FB5BC
+ bl FUN_037F894C
+ mov r0, #262144 ;@ 0x40000
+ bl FUN_037F8894
+ mov r4, #8
+ mov r6, r4
+ ldr r8, _037FB8EC ;@ =0x04000180
+ mov r7, #1000 ;@ 0x3e8
+ b _037FB8BC
+_037FB898:
+ mov r0, r4, lsl #8
+ strh r0, [r8]
+ mov r0, r7
+ bl FUN_037FB0C0
+ ldrh r0, [r8]
+ and r0, r0, #15
+ cmp r0, r4
+ movne r4, r6
+ sub r4, r4, #1
+_037FB8BC:
+ cmp r4, #0
+ bge _037FB898
+_037FB8C4:
+ mov r0, r5
+ bl FUN_037FB070
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FB8D4: .word _03807958
+_037FB8D8: .word 0x027FFC00
+_037FB8DC: .word _0380795C
+_037FB8E0: .word 0x0000C408
+_037FB8E4: .word 0x04000184
+_037FB8E8: .word FUN_037FB5BC
+_037FB8EC: .word 0x04000180
+
+ arm_func_start FUN_037FB8F0
+FUN_037FB8F0: ;@ 0x037FB8F0
+ mov r1, r0
+ mov r0, #49152 ;@ 0xc000
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr ip, _037FB908 ;@ =FUN_037FB90C
+ bx ip
+_037FB908: .word FUN_037FB90C
+
+ arm_func_start FUN_037FB90C
+FUN_037FB90C: ;@ 0x037FB90C
+ mvn r3, r0
+ ldr r2, _037FB928 ;@ =0x04000134
+ ldrh r0, [r2]
+ and r0, r3, r0
+ orr r0, r1, r0
+ strh r0, [r2]
+ bx lr
+_037FB928: .word 0x04000134
+
+ arm_func_start FUN_037FB92C
+FUN_037FB92C: ;@ 0x037FB92C
+ stmdb sp!, {r4, lr}
+ mov r4, #0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ ldr r0, _037FB964 ;@ =0x04000136
+ ldrh r1, [r0]
+ ands r0, r1, #128 ;@ 0x80
+ movne r4, #32768 ;@ 0x8000
+ and r0, r1, #11
+ orr r1, r4, r0, lsl #10
+ ldr r0, _037FB968 ;@ =0x027FFFA8
+ strh r1, [r0]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FB964: .word 0x04000136
+_037FB968: .word 0x027FFFA8
+
+ arm_func_start FUN_037FB96C
+FUN_037FB96C: ;@ 0x037FB96C
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ bl FUN_037FA49C
+ cmp r0, #0
+ beq _037FB98C
+ bl FUN_037FA910
+ cmp r0, #0
+ bne _037FB994
+_037FB98C:
+ mov r0, #0
+ b _037FB9F0
+_037FB994:
+ ldr r0, _037FB9FC ;@ =_038079DC
+ ldr r0, [r0]
+ cmp r0, #0
+ movne r0, #0
+ bne _037FB9F0
+ ldr r0, _037FBA00 ;@ =_038079E0
+ bl FUN_037FA900
+ bl FUN_037FA364
+ mov r2, r0
+ ldr r0, _037FBA04 ;@ =FUN_037FB92C
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ ldr r3, _037FBA08 ;@ =0x0000082E
+ str r0, [sp]
+ ldr r0, _037FBA00 ;@ =_038079E0
+ adds ip, r2, r3
+ adc r2, r1, #0
+ mov r1, ip
+ bl FUN_037FA6E0
+ mov r0, #1
+ ldr r1, _037FB9FC ;@ =_038079DC
+ str r0, [r1]
+_037FB9F0:
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_037FB9FC: .word _038079DC
+_037FBA00: .word _038079E0
+_037FBA04: .word FUN_037FB92C
+_037FBA08: .word 0x0000082E
+
+ arm_func_start FUN_037FBA0C
+FUN_037FBA0C: ;@ 0x037FBA0C
+ ldr ip, _037FBA40 ;@ =0x04000501
+ ldrb ip, [ip]
+ ands ip, ip, #128 ;@ 0x80
+ movne ip, #1
+ moveq ip, #0
+ mov ip, ip, lsl #7
+ orr r3, ip, r3, lsl #5
+ orr r2, r3, r2, lsl #4
+ orr r1, r2, r1, lsl #2
+ orr r1, r0, r1
+ ldr r0, _037FBA40 ;@ =0x04000501
+ strb r1, [r0]
+ bx lr
+_037FBA40: .word 0x04000501
+
+ arm_func_start FUN_037FBA44
+FUN_037FBA44: ;@ 0x037FBA44
+ ldr r1, _037FBA50 ;@ =0x04000500
+ strb r0, [r1]
+ bx lr
+_037FBA50: .word 0x04000500
+
+ arm_func_start FUN_037FBA54
+FUN_037FBA54: ;@ 0x037FBA54
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _037FBA94 ;@ =0x04000304
+ ldrh r0, [r1]
+ orr r0, r0, #1
+ strh r0, [r1]
+ mov r0, #1
+ bl FUN_038026DC
+ mov r0, #256 ;@ 0x100
+ bl FUN_037FBA9C
+ ldr r0, _037FBA98 ;@ =0x0007AB80
+ bl FUN_037FB0C0
+ bl FUN_037FBB64
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FBA94: .word 0x04000304
+_037FBA98: .word 0x0007AB80
+
+ arm_func_start FUN_037FBA9C
+FUN_037FBA9C: ;@ 0x037FBA9C
+ ldr ip, _037FBAA4 ;@ =SVC_SoundBiasSet
+ bx ip
+_037FBAA4: .word SVC_SoundBiasSet
+
+ arm_func_start FUN_037FBAA8
+FUN_037FBAA8: ;@ 0x037FBAA8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl FUN_037FBB4C
+ mov r0, #128 ;@ 0x80
+ bl FUN_037FBAEC
+ mov r0, #262144 ;@ 0x40000
+ bl FUN_037FB0C0
+ mov r0, #1
+ bl FUN_038026B0
+ ldr r1, _037FBAE8 ;@ =0x04000304
+ ldrh r0, [r1]
+ bic r0, r0, #1
+ strh r0, [r1]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FBAE8: .word 0x04000304
+
+ arm_func_start FUN_037FBAEC
+FUN_037FBAEC: ;@ 0x037FBAEC
+ ldr ip, _037FBAF4 ;@ =SVC_SoundBiasReset
+ bx ip
+_037FBAF4: .word SVC_SoundBiasReset
+
+ arm_func_start FUN_037FBAF8
+FUN_037FBAF8: ;@ 0x037FBAF8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ bl FUN_037FBB4C
+ mov r5, #0
+ mov r4, #1
+_037FBB0C:
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FBDF4
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FBB0C
+ mov r1, #0
+ ldr r0, _037FBB44 ;@ =0x04000508
+ strb r1, [r0]
+ ldr r0, _037FBB48 ;@ =0x04000509
+ strb r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FBB44: .word 0x04000508
+_037FBB48: .word 0x04000509
+
+ arm_func_start FUN_037FBB4C
+FUN_037FBB4C: ;@ 0x037FBB4C
+ ldr r1, _037FBB60 ;@ =0x04000501
+ ldrb r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strb r0, [r1]
+ bx lr
+_037FBB60: .word 0x04000501
+
+ arm_func_start FUN_037FBB64
+FUN_037FBB64: ;@ 0x037FBB64
+ ldr r1, _037FBB78 ;@ =0x04000501
+ ldrb r0, [r1]
+ orr r0, r0, #128 ;@ 0x80
+ strb r0, [r1]
+ bx lr
+_037FBB78: .word 0x04000501
+
+ arm_func_start FUN_037FBB7C
+FUN_037FBB7C: ;@ 0x037FBB7C
+ cmp r1, #24
+ bge _037FBBAC
+ ldr r2, _037FBBE0 ;@ =_03807A0C
+ ldr r3, [r2]
+ ldr r2, _037FBBE4 ;@ =0x00007FFF
+ sub r2, r2, r3
+ add r1, r1, #40 ;@ 0x28
+ mul r1, r3, r1
+ add r1, r1, r2, lsl #6
+ mul r1, r0, r1
+ mov r0, r1, asr #21
+ bx lr
+_037FBBAC:
+ cmp r1, #104 ;@ 0x68
+ bxle lr
+ ldr r2, _037FBBE0 ;@ =_03807A0C
+ ldr ip, [r2]
+ ldr r2, _037FBBE4 ;@ =0x00007FFF
+ add r3, ip, r2
+ rsb r2, ip, #0
+ sub r1, r1, #40 ;@ 0x28
+ mul r1, r2, r1
+ add r1, r1, r3, lsl #6
+ mul r1, r0, r1
+ mov r0, r1, asr #21
+ bx lr
+_037FBBE0: .word _03807A0C
+_037FBBE4: .word 0x00007FFF
+
+ arm_func_start FUN_037FBBE8
+FUN_037FBBE8: ;@ 0x037FBBE8
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ ldr r1, _037FBC40 ;@ =_03807A0C
+ str r0, [r1]
+ mov r4, #0
+ ldr r6, _037FBC44 ;@ =_03807A20
+ mov r7, #1
+ ldr r5, _037FBC48 ;@ =0x0000FFF5
+_037FBC04:
+ mov r0, r7, lsl r4
+ ands r0, r0, r5
+ beq _037FBC2C
+ mov r8, r4, lsl #4
+ add r0, r8, #67108864 ;@ 0x4000000
+ ldrb r1, [r0, #1026] ;@ 0x402
+ ldrb r0, [r6, r4]
+ bl FUN_037FBB7C
+ add r1, r8, #67108864 ;@ 0x4000000
+ strb r0, [r1, #1024] ;@ 0x400
+_037FBC2C:
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FBC04
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FBC40: .word _03807A0C
+_037FBC44: .word _03807A20
+_037FBC48: .word 0x0000FFF5
+
+ arm_func_start FUN_037FBC4C
+FUN_037FBC4C: ;@ 0x037FBC4C
+ mov r0, r0, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ ldr r0, [r0, #1024] ;@ 0x400
+ bx lr
+
+ arm_func_start FUN_037FBC5C
+FUN_037FBC5C: ;@ 0x037FBC5C
+ ldr r1, _037FBCB8 ;@ =_0380765C
+ str r0, [r1]
+ cmp r0, #0
+ blt _037FBC90
+ mov r2, #0
+ and r1, r0, #255 ;@ 0xff
+_037FBC74:
+ mov r0, r2, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ strb r1, [r0, #1026] ;@ 0x402
+ add r2, r2, #1
+ cmp r2, #16
+ blt _037FBC74
+ bx lr
+_037FBC90:
+ mov r3, #0
+ ldr r2, _037FBCBC ;@ =_03807A10
+_037FBC98:
+ ldrb r1, [r2, r3]
+ mov r0, r3, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ strb r1, [r0, #1026] ;@ 0x402
+ add r3, r3, #1
+ cmp r3, #16
+ blt _037FBC98
+ bx lr
+_037FBCB8: .word _0380765C
+_037FBCBC: .word _03807A10
+
+ arm_func_start FUN_037FBCC0
+FUN_037FBCC0: ;@ 0x037FBCC0
+ mov r0, r0, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ ldrb r0, [r0, #1027] ;@ 0x403
+ ands r0, r0, #128 ;@ 0x80
+ movne r0, #1
+ moveq r0, #0
+ bx lr
+
+ arm_func_start FUN_037FBCDC
+FUN_037FBCDC: ;@ 0x037FBCDC
+ stmdb sp!, {r4, lr}
+ ldr r2, _037FBD44 ;@ =_03807A10
+ strb r1, [r2, r0]
+ ldr r2, _037FBD48 ;@ =_0380765C
+ ldr r2, [r2]
+ cmp r2, #0
+ movge r1, r2
+ mov r4, r0, lsl #4
+ add r2, r4, #67108864 ;@ 0x4000000
+ strb r1, [r2, #1026] ;@ 0x402
+ ldr r2, _037FBD4C ;@ =_03807A0C
+ ldr r2, [r2]
+ cmp r2, #0
+ ble _037FBD3C
+ mov r2, #1
+ mov r3, r2, lsl r0
+ ldr r2, _037FBD50 ;@ =0x0000FFF5
+ ands r2, r3, r2
+ beq _037FBD3C
+ ldr r2, _037FBD54 ;@ =_03807A20
+ ldrb r0, [r2, r0]
+ bl FUN_037FBB7C
+ add r1, r4, #67108864 ;@ 0x4000000
+ strb r0, [r1, #1024] ;@ 0x400
+_037FBD3C:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FBD44: .word _03807A10
+_037FBD48: .word _0380765C
+_037FBD4C: .word _03807A0C
+_037FBD50: .word 0x0000FFF5
+_037FBD54: .word _03807A20
+
+ arm_func_start FUN_037FBD58
+FUN_037FBD58: ;@ 0x037FBD58
+ rsb r1, r1, #65536 ;@ 0x10000
+ mov r0, r0, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ add r0, r0, #1024 ;@ 0x400
+ strh r1, [r0, #8]
+ bx lr
+
+ arm_func_start FUN_037FBD70
+FUN_037FBD70: ;@ 0x037FBD70
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r2
+ ldr r0, _037FBDE8 ;@ =_03807A20
+ strb r1, [r0, r5]
+ ldr r0, _037FBDEC ;@ =_03807A0C
+ ldr r0, [r0]
+ cmp r0, #0
+ ble _037FBDC8
+ mov r0, #1
+ mov r2, r0, lsl r5
+ ldr r0, _037FBDF0 ;@ =0x0000FFF5
+ ands r0, r2, r0
+ beq _037FBDC8
+ mov r0, r5, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ ldrb r2, [r0, #1026] ;@ 0x402
+ mov r0, r1
+ mov r1, r2
+ bl FUN_037FBB7C
+ mov r1, r0
+_037FBDC8:
+ orr r1, r1, r4, lsl #8
+ mov r0, r5, lsl #4
+ add r0, r0, #67108864 ;@ 0x4000000
+ add r0, r0, #1024 ;@ 0x400
+ strh r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FBDE8: .word _03807A20
+_037FBDEC: .word _03807A0C
+_037FBDF0: .word 0x0000FFF5
+
+ arm_func_start FUN_037FBDF4
+FUN_037FBDF4: ;@ 0x037FBDF4
+ mov r3, r0, lsl #4
+ ldr r2, _037FBE1C ;@ =0x04000400
+ add ip, r2, r0, lsl #4
+ add r0, r3, #67108864 ;@ 0x4000000
+ ldr r0, [r0, #1024] ;@ 0x400
+ bic r2, r0, #-2147483648 ;@ 0x80000000
+ ands r0, r1, #1
+ orrne r2, r2, #32768 ;@ 0x8000
+ str r2, [ip]
+ bx lr
+_037FBE1C: .word 0x04000400
+
+ arm_func_start FUN_037FBE20
+FUN_037FBE20: ;@ 0x037FBE20
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r2
+ mov r6, r3
+ ldr r5, [sp, #24]
+ mov r4, r0, lsl #4
+ ldr r2, _037FBEBC ;@ =_03807A10
+ strb r5, [r2, r0]
+ ldr r2, _037FBEC0 ;@ =_0380765C
+ ldr r2, [r2]
+ cmp r2, #0
+ movge r5, r2
+ ldr r2, _037FBEC4 ;@ =_03807A20
+ strb r1, [r2, r0]
+ ldr r2, _037FBEC8 ;@ =_03807A0C
+ ldr r2, [r2]
+ cmp r2, #0
+ ble _037FBE8C
+ mov r2, #1
+ mov r2, r2, lsl r0
+ ldr r0, _037FBECC ;@ =0x0000FFF5
+ ands r0, r2, r0
+ beq _037FBE8C
+ mov r0, r1
+ mov r1, r5
+ bl FUN_037FBB7C
+ mov r1, r0
+_037FBE8C:
+ mov r0, r5, lsl #16
+ orr r0, r0, #1610612736 ;@ 0x60000000
+ orr r0, r0, r7, lsl #8
+ orr r1, r1, r0
+ add r0, r4, #67108864 ;@ 0x4000000
+ str r1, [r0, #1024] ;@ 0x400
+ rsb r1, r6, #65536 ;@ 0x10000
+ add r0, r0, #1024 ;@ 0x400
+ strh r1, [r0, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FBEBC: .word _03807A10
+_037FBEC0: .word _0380765C
+_037FBEC4: .word _03807A20
+_037FBEC8: .word _03807A0C
+_037FBECC: .word 0x0000FFF5
+
+ arm_func_start FUN_037FBED0
+FUN_037FBED0: ;@ 0x037FBED0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r1
+ mov r6, r3
+ ldr r5, [sp, #28]
+ mov r4, r0, lsl #4
+ ldr r1, _037FBF74 ;@ =_03807A10
+ strb r5, [r1, r0]
+ ldr r1, _037FBF78 ;@ =_0380765C
+ ldr r1, [r1]
+ cmp r1, #0
+ movge r5, r1
+ ldr r1, _037FBF7C ;@ =_03807A20
+ strb r2, [r1, r0]
+ ldr r1, _037FBF80 ;@ =_03807A0C
+ ldr r1, [r1]
+ cmp r1, #0
+ ble _037FBF3C
+ mov r1, #1
+ mov r1, r1, lsl r0
+ ldr r0, _037FBF84 ;@ =0x0000FFF5
+ ands r0, r1, r0
+ beq _037FBF3C
+ mov r0, r2
+ mov r1, r5
+ bl FUN_037FBB7C
+ mov r2, r0
+_037FBF3C:
+ mov r0, r7, lsl #24
+ orr r0, r0, #1610612736 ;@ 0x60000000
+ orr r0, r0, r5, lsl #16
+ orr r0, r0, r6, lsl #8
+ orr r1, r2, r0
+ add r0, r4, #67108864 ;@ 0x4000000
+ str r1, [r0, #1024] ;@ 0x400
+ ldr r1, [sp, #24]
+ rsb r1, r1, #65536 ;@ 0x10000
+ add r0, r0, #1024 ;@ 0x400
+ strh r1, [r0, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FBF74: .word _03807A10
+_037FBF78: .word _0380765C
+_037FBF7C: .word _03807A20
+_037FBF80: .word _03807A0C
+_037FBF84: .word 0x0000FFF5
+
+ arm_func_start FUN_037FBF88
+FUN_037FBF88: ;@ 0x037FBF88
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ ldr r1, [sp, #32]
+ ldr r5, [sp, #44] ;@ 0x2c
+ mov r4, r0, lsl #4
+ ldr r2, _037FC044 ;@ =_03807A10
+ strb r5, [r2, r0]
+ ldr r2, _037FC048 ;@ =_0380765C
+ ldr r2, [r2]
+ cmp r2, #0
+ movge r5, r2
+ ldr r2, _037FC04C ;@ =_03807A20
+ strb r1, [r2, r0]
+ ldr r2, _037FC050 ;@ =_03807A0C
+ ldr r2, [r2]
+ cmp r2, #0
+ ble _037FBFF8
+ mov r2, #1
+ mov r2, r2, lsl r0
+ ldr r0, _037FC054 ;@ =0x0000FFF5
+ ands r0, r2, r0
+ beq _037FBFF8
+ mov r0, r1
+ mov r1, r5
+ bl FUN_037FBB7C
+ mov r1, r0
+_037FBFF8:
+ ldr r2, [sp, #36] ;@ 0x24
+ mov r0, r7, lsl #29
+ orr r0, r0, r6, lsl #27
+ orr r0, r0, r5, lsl #16
+ orr r0, r0, r2, lsl #8
+ orr r0, r1, r0
+ add r1, r4, #67108864 ;@ 0x4000000
+ str r0, [r1, #1024] ;@ 0x400
+ ldr r0, [sp, #40] ;@ 0x28
+ rsb r2, r0, #65536 ;@ 0x10000
+ add r0, r1, #1024 ;@ 0x400
+ strh r2, [r0, #8]
+ ldr r2, [sp, #24]
+ strh r2, [r0, #10]
+ ldr r0, [sp, #28]
+ str r0, [r1, #1036] ;@ 0x40c
+ str r8, [r1, #1028] ;@ 0x404
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FC044: .word _03807A10
+_037FC048: .word _0380765C
+_037FC04C: .word _03807A20
+_037FC050: .word _03807A0C
+_037FC054: .word 0x0000FFF5
+
+ arm_func_start FUN_037FC058
+FUN_037FC058: ;@ 0x037FC058
+ ldr r2, _037FC080 ;@ =_03807660
+ ldr r3, [r2]
+ ldr r0, _037FC084 ;@ =0x0019660D
+ ldr r1, _037FC088 ;@ =0x3C6EF35F
+ mla r0, r3, r0, r1
+ str r0, [r2]
+ mov r0, r0, lsr #16
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ bx lr
+_037FC080: .word _03807660
+_037FC084: .word 0x0019660D
+_037FC088: .word 0x3C6EF35F
+
+ arm_func_start FUN_037FC08C
+FUN_037FC08C: ;@ 0x037FC08C
+ cmp r0, #32
+ ldrlt r1, _037FC0F4 ;@ =_03807170
+ ldrltsb r0, [r1, r0]
+ bxlt lr
+ cmp r0, #64 ;@ 0x40
+ rsblt r1, r0, #64 ;@ 0x40
+ ldrlt r0, _037FC0F4 ;@ =_03807170
+ ldrltsb r0, [r0, r1]
+ bxlt lr
+ cmp r0, #96 ;@ 0x60
+ bge _037FC0D4
+ sub r1, r0, #64 ;@ 0x40
+ ldr r0, _037FC0F4 ;@ =_03807170
+ ldrsb r0, [r0, r1]
+ rsb r0, r0, #0
+ mov r0, r0, lsl #24
+ mov r0, r0, asr #24
+ bx lr
+_037FC0D4:
+ sub r0, r0, #96 ;@ 0x60
+ rsb r1, r0, #32
+ ldr r0, _037FC0F4 ;@ =_03807170
+ ldrsb r0, [r0, r1]
+ rsb r0, r0, #0
+ mov r0, r0, lsl #24
+ mov r0, r0, asr #24
+ bx lr
+_037FC0F4: .word _03807170
+
+ arm_func_start FUN_037FC0F8
+FUN_037FC0F8: ;@ 0x037FC0F8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, _037FC168 ;@ =0xFFFFFD2D
+ cmp r4, r0
+ movlt r4, r0
+ blt _037FC118
+ cmp r4, #0
+ movgt r4, #0
+_037FC118:
+ ldr r0, _037FC16C ;@ =0x000002D3
+ add r0, r4, r0
+ bl FUN_037FC170
+ mvn r1, #239 ;@ 0xef
+ cmp r4, r1
+ movlt r1, #3
+ blt _037FC154
+ mvn r1, #119 ;@ 0x77
+ cmp r4, r1
+ movlt r1, #2
+ blt _037FC154
+ mvn r1, #59 ;@ 0x3b
+ cmp r4, r1
+ movlt r1, #1
+ movge r1, #0
+_037FC154:
+ orr r0, r0, r1, lsl #8
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FC168: .word 0xFFFFFD2D
+_037FC16C: .word 0x000002D3
+
+ arm_func_start FUN_037FC170
+FUN_037FC170: ;@ 0x037FC170
+ ldr ip, _037FC178 ;@ =SVC_GetVolumeTable
+ bx ip
+_037FC178: .word SVC_GetVolumeTable
+
+ arm_func_start FUN_037FC17C
+FUN_037FC17C: ;@ 0x037FC17C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, #0
+ rsb r0, r1, #0
+ b _037FC19C
+_037FC194:
+ sub r4, r4, #1
+ add r0, r0, #768 ;@ 0x300
+_037FC19C:
+ cmp r0, #0
+ blt _037FC194
+ b _037FC1B0
+_037FC1A8:
+ add r4, r4, #1
+ sub r0, r0, #768 ;@ 0x300
+_037FC1B0:
+ cmp r0, #768 ;@ 0x300
+ bge _037FC1A8
+ bl FUN_037FC2A4
+ mov r2, #0
+ mov r1, #65536 ;@ 0x10000
+ adds lr, r0, r1
+ adc ip, r2, #0
+ mov r3, r5, asr #31
+ umull r1, r0, lr, r5
+ mla r0, lr, r3, r0
+ mla r0, ip, r5, r0
+ sub lr, r4, #16
+ cmp lr, #0
+ bgt _037FC208
+ rsb r2, lr, #0
+ mov r3, r0, lsr r2
+ mov r5, r1, lsr r2
+ rsb r1, r2, #32
+ orr r5, r5, r0, lsl r1
+ sub r1, r2, #32
+ orr r5, r5, r0, lsr r1
+ b _037FC264
+_037FC208:
+ cmp lr, #32
+ bge _037FC25C
+ mvn r5, #0
+ rsb r4, lr, #32
+ mov ip, r5, lsl r4
+ rsb r3, r4, #32
+ orr ip, ip, r5, lsr r3
+ sub r3, r4, #32
+ orr ip, ip, r5, lsl r3
+ and r3, r0, ip
+ and r5, r1, r5, lsl r4
+ cmp r3, r2
+ cmpeq r5, r2
+ ldrne r0, _037FC2A0 ;@ =0x0000FFFF
+ bne _037FC294
+ mov r5, r1, lsl lr
+ mov r3, r0, lsl lr
+ orr r3, r3, r1, lsr r4
+ sub r0, lr, #32
+ orr r3, r3, r1, lsl r0
+ b _037FC264
+_037FC25C:
+ ldr r0, _037FC2A0 ;@ =0x0000FFFF
+ b _037FC294
+_037FC264:
+ mov r1, #0
+ mov r0, #16
+ cmp r3, r1
+ cmpeq r5, r0
+ movcc r5, r0
+ bcc _037FC28C
+ ldr r0, _037FC2A0 ;@ =0x0000FFFF
+ cmp r3, r1
+ cmpeq r5, r0
+ movhi r5, r0
+_037FC28C:
+ mov r0, r5, lsl #16
+ mov r0, r0, lsr #16
+_037FC294:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FC2A0: .word 0x0000FFFF
+
+ arm_func_start FUN_037FC2A4
+FUN_037FC2A4: ;@ 0x037FC2A4
+ ldr ip, _037FC2AC ;@ =SVC_GetPitchTable
+ bx ip
+_037FC2AC: .word SVC_GetPitchTable
+
+ arm_func_start FUN_037FC2B0
+FUN_037FC2B0: ;@ 0x037FC2B0
+ stmdb sp!, {r4, r5, r6, lr}
+ bl FUN_037FC408
+ bl FUN_037FD3E0
+ bl FUN_037FF0A8
+ bl FUN_037FF6B8
+ bl FUN_037FBB64
+ mov r0, #0
+ mov r1, r0
+ mov r2, r0
+ mov r3, r0
+ bl FUN_037FBA0C
+ mov r0, #127 ;@ 0x7f
+ bl FUN_037FBA44
+ bl FUN_037FC3B0
+ mov r4, #1
+ mov r5, #0
+_037FC2F0:
+ mov r6, r5
+ bl FUN_037FC370
+ cmp r0, #1
+ beq _037FC308
+ cmp r0, #2
+ b _037FC30C
+_037FC308:
+ mov r6, r4
+_037FC30C:
+ bl FUN_037FD1F4
+ bl FUN_037FFA5C
+ mov r0, r6
+ bl FUN_037FF008
+ mov r0, r6
+ bl FUN_037FCEDC
+ bl FUN_037FF448
+ bl FUN_037FC058
+ b _037FC2F0
+_037FC330:
+ ldr r0, _037FC344 ;@ =_03807A54
+ mov r1, #1
+ mov r2, #0
+ ldr ip, _037FC348 ;@ =FUN_037F9924
+ bx ip
+_037FC344: .word _03807A54
+_037FC348: .word FUN_037F9924
+
+ arm_func_start FUN_037FC34C
+FUN_037FC34C: ;@ 0x037FC34C
+ bx lr
+
+ arm_func_start FUN_037FC350
+FUN_037FC350: ;@ 0x037FC350
+ bx lr
+
+ arm_func_start FUN_037FC354
+FUN_037FC354: ;@ 0x037FC354
+ ldr r0, _037FC368 ;@ =_03807A54
+ mov r1, #2
+ mov r2, #0
+ ldr ip, _037FC36C ;@ =FUN_037F9924
+ bx ip
+_037FC368: .word _03807A54
+_037FC36C: .word FUN_037F9924
+
+ arm_func_start FUN_037FC370
+FUN_037FC370: ;@ 0x037FC370
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FC398 ;@ =_03807A54
+ add r1, sp, #0
+ mov r2, #1
+ bl FUN_037F9884
+ ldr r0, [sp]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FC398: .word _03807A54
+
+ arm_func_start FUN_037FC39C
+FUN_037FC39C: ;@ 0x037FC39C
+ ldr r0, _037FC3A8 ;@ =_03807A74
+ ldr ip, _037FC3AC ;@ =FUN_037FA650
+ bx ip
+_037FC3A8: .word _03807A74
+_037FC3AC: .word FUN_037FA650
+
+ arm_func_start FUN_037FC3B0
+FUN_037FC3B0: ;@ 0x037FC3B0
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ bl FUN_037FA364
+ mov ip, r0
+ ldr r0, _037FC3FC ;@ =_037FC330
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ ldr r3, _037FC400 ;@ =0x00000AA8
+ str r0, [sp]
+ ldr r0, _037FC404 ;@ =_03807A74
+ mov r2, #65536 ;@ 0x10000
+ adds ip, ip, r2
+ adc r2, r1, #0
+ mov r1, ip
+ bl FUN_037FA6E0
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_037FC3FC: .word _037FC330
+_037FC400: .word 0x00000AA8
+_037FC404: .word _03807A74
+
+ arm_func_start FUN_037FC408
+FUN_037FC408: ;@ 0x037FC408
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FC434 ;@ =_03807A54
+ ldr r1, _037FC438 ;@ =_03807A34
+ mov r2, #8
+ bl FUN_037F99B8
+ ldr r0, _037FC43C ;@ =_03807A74
+ bl FUN_037FA900
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FC434: .word _03807A54
+_037FC438: .word _03807A34
+_037FC43C: .word _03807A74
+
+ arm_func_start FUN_037FC440
+FUN_037FC440: ;@ 0x037FC440
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ mov r1, #1024 ;@ 0x400
+ str r1, [sp]
+ str r0, [sp, #4]
+ ldr r0, _037FC47C ;@ =_03807AA0
+ ldr r1, _037FC480 ;@ =FUN_037FC2B0
+ mov r2, #0
+ ldr r3, _037FC484 ;@ =_03807F44
+ bl FUN_037F9244
+ ldr r0, _037FC47C ;@ =_03807AA0
+ bl FUN_037F8FB4
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_037FC47C: .word _03807AA0
+_037FC480: .word FUN_037FC2B0
+_037FC484: .word _03807F44
+
+ arm_func_start FUN_037FC488
+FUN_037FC488: ;@ 0x037FC488
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, _037FC4BC ;@ =_03807A30
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _037FC4B4
+ mov r1, #1
+ str r1, [r0]
+ bl FUN_037FFED4
+ mov r0, r4
+ bl FUN_037FC440
+_037FC4B4:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FC4BC: .word _03807A30
+
+ arm_func_start FUN_037FC4C0
+FUN_037FC4C0: ;@ 0x037FC4C0
+ add r0, r0, #67108864 ;@ 0x4000000
+ ldrb r0, [r0, #1288] ;@ 0x508
+ ands r0, r0, #128 ;@ 0x80
+ movne r0, #1
+ moveq r0, #0
+ bx lr
+
+ arm_func_start FUN_037FC4D8
+FUN_037FC4D8: ;@ 0x037FC4D8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0, lsl #3
+ ldr ip, [sp, #16]
+ cmp ip, #0
+ movne r5, #0
+ moveq r5, #1
+ ldr lr, [sp, #24]
+ ldr ip, [sp, #20]
+ mov r1, r1, lsl #3
+ orr r1, r1, r5, lsl #2
+ orr r1, r1, ip, lsl #1
+ orr r1, lr, r1
+ add r0, r0, #67108864 ;@ 0x4000000
+ strb r1, [r0, #1288] ;@ 0x508
+ add r0, r4, #67108864 ;@ 0x4000000
+ str r2, [r0, #1296] ;@ 0x510
+ add r0, r0, #1280 ;@ 0x500
+ strh r3, [r0, #20]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FC530
+FUN_037FC530: ;@ 0x037FC530
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ add r0, r6, #40 ;@ 0x28
+ bl FUN_037FC7F4
+ mov r4, r0
+ mov ip, r0, asr #31
+ mov r3, #0
+ cmp ip, r3
+ cmpeq r0, r3
+ beq _037FC5B0
+ ldrb r1, [r6, #40] ;@ 0x28
+ cmp r1, #0
+ beq _037FC59C
+ cmp r1, #1
+ beq _037FC584
+ cmp r1, #2
+ moveq ip, ip, lsl #6
+ orreq ip, ip, r0, lsr #26
+ moveq r4, r0, lsl #6
+ b _037FC5A8
+_037FC584:
+ mov r2, #60 ;@ 0x3c
+ umull r4, r1, r0, r2
+ mla r1, r0, r3, r1
+ mla r1, ip, r2, r1
+ mov ip, r1
+ b _037FC5A8
+_037FC59C:
+ mov ip, ip, lsl #6
+ orr ip, ip, r0, lsr #26
+ mov r4, r0, lsl #6
+_037FC5A8:
+ mov r4, r4, lsr #14
+ orr r4, r4, ip, lsl #18
+_037FC5B0:
+ cmp r5, #0
+ beq _037FC5C0
+ add r0, r6, #40 ;@ 0x28
+ bl FUN_037FC844
+_037FC5C0:
+ mov r0, r4
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FC5CC
+FUN_037FC5CC: ;@ 0x037FC5CC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r5, r1
+ ldrsh r3, [r4, #50] ;@ 0x32
+ cmp r3, #0
+ moveq r0, #0
+ beq _037FC630
+ ldr r0, [r4, #20]
+ ldr r2, [r4, #24]
+ cmp r0, r2
+ movge r0, #0
+ bge _037FC630
+ sub r0, r2, r0
+ smull r0, r1, r3, r0
+ mov r3, r2, asr #31
+ bl _ll_sdiv
+ cmp r5, #0
+ beq _037FC630
+ ldrb r1, [r4, #3]
+ mov r1, r1, lsl #29
+ movs r1, r1, lsr #31
+ ldrne r1, [r4, #20]
+ addne r1, r1, #1
+ strne r1, [r4, #20]
+_037FC630:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FC63C
+FUN_037FC63C: ;@ 0x037FC63C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldrh lr, [r0, #36] ;@ 0x24
+ and r2, lr, #255 ;@ 0xff
+ ldrh ip, [r1, #36] ;@ 0x24
+ and r0, ip, #255 ;@ 0xff
+ mov r2, r2, lsl #4
+ mov r3, r0, lsl #4
+ ldr r1, _037FC698 ;@ =_03807294
+ ldrb r0, [r1, lr, asr #8]
+ mov r2, r2, asr r0
+ ldrb r0, [r1, ip, asr #8]
+ mov r0, r3, asr r0
+ cmp r2, r0
+ beq _037FC688
+ cmp r2, r0
+ movlt r0, #1
+ mvnge r0, #0
+ b _037FC68C
+_037FC688:
+ mov r0, #0
+_037FC68C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FC698: .word _03807294
+
+ arm_func_start FUN_037FC69C
+FUN_037FC69C: ;@ 0x037FC69C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, _037FC6E4 ;@ =0xFFFE9680
+ str r0, [r4, #16]
+ mov r0, #0
+ strb r0, [r4, #2]
+ str r1, [r4, #52] ;@ 0x34
+ add r0, r4, #40 ;@ 0x28
+ bl FUN_037FC8A8
+ ldrb r0, [r4, #3]
+ orr r0, r0, #2
+ strb r0, [r4, #3]
+ ldrb r0, [r4, #3]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strb r0, [r4, #3]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FC6E4: .word 0xFFFE9680
+
+ arm_func_start FUN_037FC6E8
+FUN_037FC6E8: ;@ 0x037FC6E8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov ip, #0
+ str ip, [r4, #80] ;@ 0x50
+ str r1, [r4, #72] ;@ 0x48
+ str r2, [r4, #76] ;@ 0x4c
+ str ip, [r4, #52] ;@ 0x34
+ strb r3, [r4, #34] ;@ 0x22
+ mov r1, #127 ;@ 0x7f
+ strh r1, [r4, #36] ;@ 0x24
+ ldrb r2, [r4, #3]
+ bic r2, r2, #2
+ strb r2, [r4, #3]
+ ldrb r2, [r4, #3]
+ orr r2, r2, #4
+ strb r2, [r4, #3]
+ mov r2, #60 ;@ 0x3c
+ strb r2, [r4, #8]
+ strb r2, [r4, #5]
+ strb r1, [r4, #9]
+ strb ip, [r4, #10]
+ strh ip, [r4, #12]
+ strh ip, [r4, #6]
+ strh ip, [r4, #14]
+ strb ip, [r4, #11]
+ strb r1, [r4, #4]
+ strh ip, [r4, #50] ;@ 0x32
+ str ip, [r4, #24]
+ str ip, [r4, #20]
+ bl FUN_037FCD28
+ mov r0, r4
+ mov r1, #127 ;@ 0x7f
+ bl FUN_037FCD0C
+ mov r0, r4
+ mov r1, #127 ;@ 0x7f
+ bl FUN_037FCD04
+ mov r0, r4
+ mov r1, #127 ;@ 0x7f
+ bl FUN_037FCCE8
+ add r0, r4, #40 ;@ 0x28
+ bl FUN_037FC8B8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FC794
+FUN_037FC794: ;@ 0x037FC794
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r1, r0
+ cmp r1, #127 ;@ 0x7f
+ ldreq r0, _037FC7F0 ;@ =0x0000FFFF
+ beq _037FC7E4
+ cmp r1, #126 ;@ 0x7e
+ moveq r0, #15360 ;@ 0x3c00
+ beq _037FC7E4
+ cmp r1, #50 ;@ 0x32
+ movlt r0, r1, lsl #1
+ addlt r0, r0, #1
+ movlt r0, r0, lsl #16
+ movlt r0, r0, lsr #16
+ blt _037FC7E4
+ mov r0, #7680 ;@ 0x1e00
+ rsb r1, r1, #126 ;@ 0x7e
+ bl _s32_div_f
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+_037FC7E4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FC7F0: .word 0x0000FFFF
+
+ arm_func_start FUN_037FC7F4
+FUN_037FC7F4: ;@ 0x037FC7F4
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldrb r0, [r4, #2]
+ cmp r0, #0
+ moveq r0, #0
+ beq _037FC83C
+ ldrh r1, [r4, #6]
+ ldrh r0, [r4, #4]
+ cmp r1, r0
+ movcc r0, #0
+ bcc _037FC83C
+ ldrh r0, [r4, #8]
+ mov r0, r0, lsr #8
+ bl FUN_037FC08C
+ ldrb r2, [r4, #3]
+ ldrb r1, [r4, #2]
+ mul r0, r1, r0
+ mul r0, r2, r0
+_037FC83C:
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FC844
+FUN_037FC844: ;@ 0x037FC844
+ ldrh r2, [r0, #6]
+ ldrh r1, [r0, #4]
+ cmp r2, r1
+ addcc r1, r2, #1
+ strcch r1, [r0, #6]
+ bxcc lr
+ ldrh r2, [r0, #8]
+ ldrb r1, [r0, #1]
+ mov r3, r1, lsl #6
+ add r1, r2, r1, lsl #6
+ mov r2, r1, lsr #8
+ b _037FC878
+_037FC874:
+ sub r2, r2, #128 ;@ 0x80
+_037FC878:
+ cmp r2, #128 ;@ 0x80
+ bcs _037FC874
+ ldrh r1, [r0, #8]
+ add r1, r1, r3
+ strh r1, [r0, #8]
+ ldrh r1, [r0, #8]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0, #8]
+ ldrh r1, [r0, #8]
+ orr r1, r1, r2, lsl #8
+ strh r1, [r0, #8]
+ bx lr
+
+ arm_func_start FUN_037FC8A8
+FUN_037FC8A8: ;@ 0x037FC8A8
+ mov r1, #0
+ strh r1, [r0, #8]
+ strh r1, [r0, #6]
+ bx lr
+
+ arm_func_start FUN_037FC8B8
+FUN_037FC8B8: ;@ 0x037FC8B8
+ mov r2, #0
+ strb r2, [r0]
+ strb r2, [r0, #2]
+ mov r1, #1
+ strb r1, [r0, #3]
+ mov r1, #16
+ strb r1, [r0, #1]
+ strh r2, [r0, #4]
+ bx lr
+
+ arm_func_start FUN_037FC8DC
+FUN_037FC8DC: ;@ 0x037FC8DC
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, #0
+ mov r9, r5
+ ldr r4, _037FC960 ;@ =_03807F6C
+ mov r8, #84 ;@ 0x54
+_037FC8FC:
+ mla r2, r5, r8, r4
+ ldrb r1, [r2, #3]
+ mov r0, r1, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FC944
+ ldrb r0, [r2, #1]
+ cmp r0, #0
+ bne _037FC944
+ ldr r0, [r2, #68] ;@ 0x44
+ cmp r7, r0
+ bhi _037FC944
+ cmp r0, r6
+ bhi _037FC944
+ bic r0, r1, #2
+ strb r0, [r2, #3]
+ mov r0, r5
+ mov r1, r9
+ bl FUN_037FBDF4
+_037FC944:
+ add r0, r5, #1
+ and r5, r0, #255 ;@ 0xff
+ cmp r5, #16
+ bcc _037FC8FC
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FC960: .word _03807F6C
+
+ arm_func_start FUN_037FC964
+FUN_037FC964: ;@ 0x037FC964
+ ands r0, r0, #1
+ ldrne r0, _037FC97C ;@ =_03807F44
+ ldrne r0, [r0]
+ ldreq r0, _037FC980 ;@ =_03807F48
+ ldreq r0, [r0]
+ bx lr
+_037FC97C: .word _03807F44
+_037FC980: .word _03807F48
+
+ arm_func_start FUN_037FC984
+FUN_037FC984: ;@ 0x037FC984
+ ands r1, r1, #1
+ ldreq r1, _037FC9B8 ;@ =_03807F48
+ ldreq r2, [r1]
+ mvneq r0, r0
+ andeq r0, r2, r0
+ streq r0, [r1]
+ bxeq lr
+ ldr r1, _037FC9BC ;@ =_03807F44
+ ldr r2, [r1]
+ mvn r0, r0
+ and r0, r2, r0
+ str r0, [r1]
+ bx lr
+_037FC9B8: .word _03807F48
+_037FC9BC: .word _03807F44
+
+ arm_func_start FUN_037FC9C0
+FUN_037FC9C0: ;@ 0x037FC9C0
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r7, sl
+ mov r6, #0
+ mov fp, r6
+ str r6, [sp]
+ mov r4, r6
+ mov r5, #1
+ b _037FCA6C
+_037FC9EC:
+ ands r0, r7, #1
+ beq _037FCA64
+ mov r1, #84 ;@ 0x54
+ ldr r0, _037FCAAC ;@ =_03807F6C
+ mla r8, r6, r1, r0
+ ldr r0, _037FCAB0 ;@ =_03807F48
+ ldr r1, [r0]
+ mov r0, r5, lsl r6
+ ands r0, r1, r0
+ bne _037FCA64
+ ldr r3, [r8, #72] ;@ 0x48
+ cmp r3, #0
+ beq _037FCA34
+ mov r0, r8
+ mov r1, fp
+ ldr r2, [r8, #76] ;@ 0x4c
+ mov lr, pc
+ bx r3
+_037FCA34:
+ mov r0, r6
+ ldr r1, [sp]
+ bl FUN_037FBDF4
+ strb r4, [r8, #34] ;@ 0x22
+ mov r0, r8
+ bl FUN_037FCB80
+ ldrb r0, [r8, #3]
+ bic r0, r0, #248 ;@ 0xf8
+ strb r0, [r8, #3]
+ ldrb r0, [r8, #3]
+ bic r0, r0, #1
+ strb r0, [r8, #3]
+_037FCA64:
+ add r6, r6, #1
+ mov r7, r7, lsr #1
+_037FCA6C:
+ cmp r6, #16
+ bge _037FCA7C
+ cmp r7, #0
+ bne _037FC9EC
+_037FCA7C:
+ ands r0, r9, #1
+ ldrne r0, _037FCAB4 ;@ =_03807F44
+ ldrne r1, [r0]
+ orrne r1, r1, sl
+ strne r1, [r0]
+ ldreq r0, _037FCAB0 ;@ =_03807F48
+ ldreq r1, [r0]
+ orreq r1, r1, sl
+ streq r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FCAAC: .word _03807F6C
+_037FCAB0: .word _03807F48
+_037FCAB4: .word _03807F44
+
+ arm_func_start FUN_037FCAB8
+FUN_037FCAB8: ;@ 0x037FCAB8
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r8, #0
+ mov r6, r8
+ mov r5, r8
+ mov r4, r8
+ ldr fp, _037FCB78 ;@ =_03807F6C
+ mov r7, #1
+ b _037FCB5C
+_037FCAE0:
+ ands r0, sl, #1
+ beq _037FCB54
+ mov r0, #84 ;@ 0x54
+ mla r9, r8, r0, fp
+ ldr r0, _037FCB7C ;@ =_03807F48
+ ldr r1, [r0]
+ mov r0, r7, lsl r8
+ ands r0, r1, r0
+ bne _037FCB54
+ ldr r3, [r9, #72] ;@ 0x48
+ cmp r3, #0
+ beq _037FCB24
+ mov r0, r9
+ mov r1, r6
+ ldr r2, [r9, #76] ;@ 0x4c
+ mov lr, pc
+ bx r3
+_037FCB24:
+ mov r0, r8
+ mov r1, r5
+ bl FUN_037FBDF4
+ strb r4, [r9, #34] ;@ 0x22
+ mov r0, r9
+ bl FUN_037FCB80
+ ldrb r0, [r9, #3]
+ bic r0, r0, #248 ;@ 0xf8
+ strb r0, [r9, #3]
+ ldrb r0, [r9, #3]
+ bic r0, r0, #1
+ strb r0, [r9, #3]
+_037FCB54:
+ add r8, r8, #1
+ mov sl, sl, lsr #1
+_037FCB5C:
+ cmp r8, #16
+ bge _037FCB6C
+ cmp sl, #0
+ bne _037FCAE0
+_037FCB6C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FCB78: .word _03807F6C
+_037FCB7C: .word _03807F48
+
+ arm_func_start FUN_037FCB80
+FUN_037FCB80: ;@ 0x037FCB80
+ cmp r0, #0
+ movne r1, #0
+ strne r1, [r0, #72] ;@ 0x48
+ strne r1, [r0, #76] ;@ 0x4c
+ bx lr
+
+ arm_func_start FUN_037FCB94
+FUN_037FCB94: ;@ 0x037FCB94
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov fp, r3
+ ldr r0, _037FCCBC ;@ =_03807F48
+ ldr r0, [r0]
+ mvn r0, r0
+ and sl, sl, r0
+ cmp r2, #0
+ ldreq r0, _037FCCC0 ;@ =_03807F44
+ ldreq r0, [r0]
+ mvneq r0, r0
+ andeq sl, sl, r0
+ mov r8, #0
+ mov r7, r8
+ mov r5, #1
+ mov r4, #84 ;@ 0x54
+_037FCBDC:
+ ldr r0, _037FCCC4 ;@ =_03807298
+ ldrb r1, [r0, r7]
+ mov r0, r5, lsl r1
+ ands r0, sl, r0
+ beq _037FCC34
+ ldr r0, _037FCCC8 ;@ =_03807F6C
+ mla r6, r1, r4, r0
+ cmp r8, #0
+ moveq r8, r6
+ beq _037FCC34
+ ldrb r1, [r8, #34] ;@ 0x22
+ ldrb r0, [r6, #34] ;@ 0x22
+ cmp r0, r1
+ bhi _037FCC34
+ cmp r0, r1
+ bne _037FCC30
+ mov r0, r8
+ mov r1, r6
+ bl FUN_037FC63C
+ cmp r0, #0
+ bge _037FCC34
+_037FCC30:
+ mov r8, r6
+_037FCC34:
+ add r7, r7, #1
+ cmp r7, #16
+ blt _037FCBDC
+ cmp r8, #0
+ moveq r0, #0
+ beq _037FCCB0
+ ldrb r0, [r8, #34] ;@ 0x22
+ cmp r9, r0
+ movlt r0, #0
+ blt _037FCCB0
+ ldr r3, [r8, #72] ;@ 0x48
+ cmp r3, #0
+ beq _037FCC7C
+ mov r0, r8
+ mov r1, #0
+ ldr r2, [r8, #76] ;@ 0x4c
+ mov lr, pc
+ bx r3
+_037FCC7C:
+ ldrb r0, [r8, #3]
+ bic r0, r0, #248 ;@ 0xf8
+ orr r0, r0, #16
+ strb r0, [r8, #3]
+ ldrb r0, [r8, #3]
+ bic r0, r0, #1
+ strb r0, [r8, #3]
+ mov r0, r8
+ mov r1, fp
+ ldr r2, [sp, #40] ;@ 0x28
+ mov r3, r9
+ bl FUN_037FC6E8
+ mov r0, r8
+_037FCCB0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FCCBC: .word _03807F48
+_037FCCC0: .word _03807F44
+_037FCCC4: .word _03807298
+_037FCCC8: .word _03807F6C
+
+ arm_func_start FUN_037FCCCC
+FUN_037FCCCC: ;@ 0x037FCCCC
+ ldrb r0, [r0, #3]
+ mov r0, r0, lsl #31
+ mov r0, r0, lsr #31
+ bx lr
+
+ arm_func_start FUN_037FCCDC
+FUN_037FCCDC: ;@ 0x037FCCDC
+ mov r1, #3
+ strb r1, [r0, #2]
+ bx lr
+
+ arm_func_start FUN_037FCCE8
+FUN_037FCCE8: ;@ 0x037FCCE8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, r1
+ bl FUN_037FC794
+ strh r0, [r4, #32]
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FCD04
+FUN_037FCD04: ;@ 0x037FCD04
+ strb r1, [r0, #29]
+ bx lr
+
+ arm_func_start FUN_037FCD0C
+FUN_037FCD0C: ;@ 0x037FCD0C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, r1
+ bl FUN_037FC794
+ strh r0, [r4, #30]
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FCD28
+FUN_037FCD28: ;@ 0x037FCD28
+ cmp r1, #109 ;@ 0x6d
+ rsblt r1, r1, #255 ;@ 0xff
+ strltb r1, [r0, #28]
+ rsbge r2, r1, #127 ;@ 0x7f
+ ldrge r1, _037FCD48 ;@ =_038072A8
+ ldrgeb r1, [r1, r2]
+ strgeb r1, [r0, #28]
+ bx lr
+_037FCD48: .word _038072A8
+
+ arm_func_start FUN_037FCD4C
+FUN_037FCD4C: ;@ 0x037FCD4C
+ cmp r1, #0
+ beq _037FCDF0
+ ldrb r1, [r0, #2]
+ cmp r1, #3
+ addls pc, pc, r1, lsl #2
+ b _037FCDF0
+ b _037FCD74
+ b _037FCDA4
+ b _037FCDF0
+ b _037FCDE0
+_037FCD74:
+ ldr r1, [r0, #16]
+ rsb r2, r1, #0
+ ldrb r1, [r0, #28]
+ mul r1, r2, r1
+ mov r1, r1, asr #8
+ rsb r1, r1, #0
+ str r1, [r0, #16]
+ ldr r1, [r0, #16]
+ cmp r1, #0
+ moveq r1, #1
+ streqb r1, [r0, #2]
+ b _037FCDF0
+_037FCDA4:
+ ldrb r1, [r0, #29]
+ mov r2, r1, lsl #1
+ ldr r1, _037FCDFC ;@ =_03807194
+ ldrsh r1, [r1, r2]
+ mov r3, r1, lsl #7
+ ldr r2, [r0, #16]
+ ldrh r1, [r0, #30]
+ sub r1, r2, r1
+ str r1, [r0, #16]
+ ldr r1, [r0, #16]
+ cmp r1, r3
+ strle r3, [r0, #16]
+ movle r1, #2
+ strleb r1, [r0, #2]
+ b _037FCDF0
+_037FCDE0:
+ ldr r2, [r0, #16]
+ ldrh r1, [r0, #32]
+ sub r1, r2, r1
+ str r1, [r0, #16]
+_037FCDF0:
+ ldr r0, [r0, #16]
+ mov r0, r0, asr #7
+ bx lr
+_037FCDFC: .word _03807194
+
+ arm_func_start FUN_037FCE00
+FUN_037FCE00: ;@ 0x037FCE00
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldrb r2, [r0]
+ cmp r2, #14
+ movcc r0, #0
+ bcc _037FCE3C
+ cmp r2, #15
+ movhi r0, #0
+ bhi _037FCE3C
+ mov r2, #2
+ strb r2, [r0, #1]
+ ldr r2, _037FCE48 ;@ =0x00001F46
+ strh r2, [r0, #60] ;@ 0x3c
+ bl FUN_037FC69C
+ mov r0, #1
+_037FCE3C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FCE48: .word 0x00001F46
+
+ arm_func_start FUN_037FCE4C
+FUN_037FCE4C: ;@ 0x037FCE4C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldrb r3, [r0]
+ cmp r3, #8
+ movcc r0, #0
+ bcc _037FCE90
+ cmp r3, #13
+ movhi r0, #0
+ bhi _037FCE90
+ mov r3, #1
+ strb r3, [r0, #1]
+ str r1, [r0, #68] ;@ 0x44
+ ldr r1, _037FCE9C ;@ =0x00001F46
+ strh r1, [r0, #60] ;@ 0x3c
+ mov r1, r2
+ bl FUN_037FC69C
+ mov r0, #1
+_037FCE90:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FCE9C: .word 0x00001F46
+
+ arm_func_start FUN_037FCEA0
+FUN_037FCEA0: ;@ 0x037FCEA0
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov lr, r2
+ mov r0, #0
+ strb r0, [r4, #1]
+ add ip, r4, #56 ;@ 0x38
+ ldmia r1, {r0, r1, r2}
+ stmia ip, {r0, r1, r2}
+ str lr, [r4, #68] ;@ 0x44
+ mov r0, r4
+ mov r1, r3
+ bl FUN_037FC69C
+ mov r0, #1
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FCEDC
+FUN_037FCEDC: ;@ 0x037FCEDC
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #28
+ mov r6, r0
+ mov r4, #0
+ mov fp, r4
+ mov r7, #1
+ str r4, [sp, #8]
+ mov r0, #127 ;@ 0x7f
+ str r0, [sp, #20]
+ str r4, [sp, #16]
+ str r4, [sp, #12]
+ str r4, [sp, #4]
+ str r4, [sp]
+_037FCF10:
+ ldr r8, [sp]
+ mov sl, r8
+ mov r9, r8
+ mov r1, #84 ;@ 0x54
+ ldr r0, _037FD1E4 ;@ =_03807F6C
+ mla r5, r4, r1, r0
+ ldrb r1, [r5, #3]
+ mov r0, r1, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FD1CC
+ mov r0, r1, lsl #30
+ movs r0, r0, lsr #31
+ beq _037FCF74
+ bic r0, r1, #248 ;@ 0xf8
+ mov r1, r1, lsl #24
+ mov r1, r1, lsr #27
+ orr r1, r1, #1
+ and r1, r1, #255 ;@ 0xff
+ and r1, r1, #31
+ orr r0, r0, r1, lsl #3
+ strb r0, [r5, #3]
+ ldrb r0, [r5, #3]
+ bic r0, r0, #2
+ strb r0, [r5, #3]
+ b _037FCFC0
+_037FCF74:
+ mov r0, r4
+ bl FUN_037FBCC0
+ cmp r0, #0
+ bne _037FCFC0
+ ldr r3, [r5, #72] ;@ 0x48
+ cmp r3, #0
+ streqb fp, [r5, #34] ;@ 0x22
+ beq _037FCFA8
+ mov r0, r5
+ mov r1, r7
+ ldr r2, [r5, #76] ;@ 0x4c
+ mov lr, pc
+ bx r3
+_037FCFA8:
+ ldr r0, [sp, #4]
+ strh r0, [r5, #36] ;@ 0x24
+ ldrb r0, [r5, #3]
+ bic r0, r0, #1
+ strb r0, [r5, #3]
+ b _037FD1CC
+_037FCFC0:
+ ldrb r0, [r5, #9]
+ mov r1, r0, lsl #1
+ ldr r0, _037FD1E8 ;@ =_03807194
+ ldrsh r0, [r0, r1]
+ add r8, r8, r0
+ ldrb r1, [r5, #8]
+ ldrb r0, [r5, #5]
+ sub r0, r1, r0
+ add sl, sl, r0, lsl #6
+ mov r0, r5
+ mov r1, r6
+ bl FUN_037FCD4C
+ add r8, r8, r0
+ mov r0, r5
+ mov r1, r6
+ bl FUN_037FC5CC
+ add r2, sl, r0
+ ldrsh r0, [r5, #12]
+ add r1, r8, r0
+ ldrsh r0, [r5, #6]
+ add r8, r1, r0
+ ldrsh r0, [r5, #14]
+ add sl, r2, r0
+ mov r0, r5
+ mov r1, r6
+ bl FUN_037FC530
+ ldrb r1, [r5, #40] ;@ 0x28
+ cmp r1, #0
+ beq _037FD05C
+ cmp r1, #1
+ beq _037FD048
+ cmp r1, #2
+ addeq r9, r9, r0
+ b _037FD060
+_037FD048:
+ mov r1, #32768 ;@ 0x8000
+ rsb r1, r1, #0
+ cmp r8, r1
+ addgt r8, r8, r0
+ b _037FD060
+_037FD05C:
+ add sl, sl, r0
+_037FD060:
+ ldrsb r0, [r5, #10]
+ add r9, r9, r0
+ ldrb r0, [r5, #4]
+ cmp r0, #127 ;@ 0x7f
+ mulne r0, r9, r0
+ addne r0, r0, #64 ;@ 0x40
+ movne r9, r0, asr #7
+ ldrsb r0, [r5, #11]
+ add r9, r9, r0
+ ldrb r0, [r5, #2]
+ cmp r0, #3
+ bne _037FD0EC
+ ldr r0, _037FD1EC ;@ =0xFFFFFD2D
+ cmp r8, r0
+ bgt _037FD0EC
+ ldrb r0, [r5, #3]
+ bic r0, r0, #248 ;@ 0xf8
+ orr r0, r0, #16
+ strb r0, [r5, #3]
+ ldr r3, [r5, #72] ;@ 0x48
+ cmp r3, #0
+ ldreq r0, [sp, #8]
+ streqb r0, [r5, #34] ;@ 0x22
+ beq _037FD0D4
+ mov r0, r5
+ mov r1, r7
+ ldr r2, [r5, #76] ;@ 0x4c
+ mov lr, pc
+ bx r3
+_037FD0D4:
+ ldr r0, [sp, #12]
+ strh r0, [r5, #36] ;@ 0x24
+ ldrb r0, [r5, #3]
+ bic r0, r0, #1
+ strb r0, [r5, #3]
+ b _037FD1CC
+_037FD0EC:
+ mov r0, r8
+ bl FUN_037FC0F8
+ mov r8, r0
+ ldrh r0, [r5, #60] ;@ 0x3c
+ mov r1, sl
+ bl FUN_037FC17C
+ ldrb r1, [r5, #1]
+ cmp r1, #1
+ ldreq r1, _037FD1F0 ;@ =0x0000FFFC
+ andeq r0, r0, r1
+ moveq r0, r0, lsl #16
+ moveq r0, r0, lsr #16
+ adds r9, r9, #64 ;@ 0x40
+ ldrmi r9, [sp, #16]
+ bmi _037FD130
+ cmp r9, #127 ;@ 0x7f
+ ldrgt r9, [sp, #20]
+_037FD130:
+ ldrh r1, [r5, #36] ;@ 0x24
+ cmp r8, r1
+ beq _037FD164
+ strh r8, [r5, #36] ;@ 0x24
+ ldrb r2, [r5, #3]
+ bic r1, r2, #248 ;@ 0xf8
+ mov r2, r2, lsl #24
+ mov r2, r2, lsr #27
+ orr r2, r2, #8
+ and r2, r2, #255 ;@ 0xff
+ and r2, r2, #31
+ orr r1, r1, r2, lsl #3
+ strb r1, [r5, #3]
+_037FD164:
+ ldrh r1, [r5, #38] ;@ 0x26
+ cmp r0, r1
+ beq _037FD198
+ strh r0, [r5, #38] ;@ 0x26
+ ldrb r0, [r5, #3]
+ bic r1, r0, #248 ;@ 0xf8
+ mov r0, r0, lsl #24
+ mov r0, r0, lsr #27
+ orr r0, r0, #4
+ and r0, r0, #255 ;@ 0xff
+ and r0, r0, #31
+ orr r0, r1, r0, lsl #3
+ strb r0, [r5, #3]
+_037FD198:
+ ldrb r0, [r5, #35] ;@ 0x23
+ cmp r9, r0
+ beq _037FD1CC
+ strb r9, [r5, #35] ;@ 0x23
+ ldrb r0, [r5, #3]
+ bic r1, r0, #248 ;@ 0xf8
+ mov r0, r0, lsl #24
+ mov r0, r0, lsr #27
+ orr r0, r0, #16
+ and r0, r0, #255 ;@ 0xff
+ and r0, r0, #31
+ orr r0, r1, r0, lsl #3
+ strb r0, [r5, #3]
+_037FD1CC:
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FCF10
+ add sp, sp, #28
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FD1E4: .word _03807F6C
+_037FD1E8: .word _03807194
+_037FD1EC: .word 0xFFFFFD2D
+_037FD1F0: .word 0x0000FFFC
+
+ arm_func_start FUN_037FD1F4
+FUN_037FD1F4: ;@ 0x037FD1F4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #24
+ mov r8, #0
+ mov r4, #2
+ mov r5, #1
+ mov r6, r8
+ ldr r7, _037FD3DC ;@ =_03807F6C
+ mov sl, #84 ;@ 0x54
+_037FD214:
+ mla r9, r8, sl, r7
+ ldrb r0, [r9, #3]
+ mov r0, r0, lsl #24
+ movs r0, r0, lsr #27
+ beq _037FD374
+ ands r0, r0, #2
+ beq _037FD23C
+ mov r0, r8
+ mov r1, r6
+ bl FUN_037FBDF4
+_037FD23C:
+ ldrb r0, [r9, #3]
+ mov r0, r0, lsl #24
+ mov r1, r0, lsr #27
+ ands r0, r1, #1
+ beq _037FD318
+ ldrb r0, [r9, #1]
+ cmp r0, #0
+ beq _037FD270
+ cmp r0, #1
+ beq _037FD2C8
+ cmp r0, #2
+ beq _037FD2F4
+ b _037FD374
+_037FD270:
+ ldrb r0, [r9, #57] ;@ 0x39
+ cmp r0, #0
+ movne r3, r5
+ moveq r3, r4
+ ldrh r1, [r9, #36] ;@ 0x24
+ ldrh r0, [r9, #62] ;@ 0x3e
+ str r0, [sp]
+ ldr r0, [r9, #64] ;@ 0x40
+ str r0, [sp, #4]
+ and r0, r1, #255 ;@ 0xff
+ str r0, [sp, #8]
+ mov r0, r1, asr #8
+ str r0, [sp, #12]
+ ldrh r0, [r9, #38] ;@ 0x26
+ str r0, [sp, #16]
+ ldrb r0, [r9, #35] ;@ 0x23
+ str r0, [sp, #20]
+ mov r0, r8
+ ldr r1, [r9, #68] ;@ 0x44
+ ldrb r2, [r9, #56] ;@ 0x38
+ bl FUN_037FBF88
+ b _037FD374
+_037FD2C8:
+ ldrh r3, [r9, #36] ;@ 0x24
+ ldrh r0, [r9, #38] ;@ 0x26
+ str r0, [sp]
+ ldrb r0, [r9, #35] ;@ 0x23
+ str r0, [sp, #4]
+ mov r0, r8
+ ldr r1, [r9, #68] ;@ 0x44
+ and r2, r3, #255 ;@ 0xff
+ mov r3, r3, asr #8
+ bl FUN_037FBED0
+ b _037FD374
+_037FD2F4:
+ ldrh r2, [r9, #36] ;@ 0x24
+ ldrb r0, [r9, #35] ;@ 0x23
+ str r0, [sp]
+ mov r0, r8
+ and r1, r2, #255 ;@ 0xff
+ mov r2, r2, asr #8
+ ldrh r3, [r9, #38] ;@ 0x26
+ bl FUN_037FBE20
+ b _037FD374
+_037FD318:
+ ands r0, r1, #4
+ beq _037FD32C
+ mov r0, r8
+ ldrh r1, [r9, #38] ;@ 0x26
+ bl FUN_037FBD58
+_037FD32C:
+ ldrb r0, [r9, #3]
+ mov r0, r0, lsl #24
+ mov r0, r0, lsr #27
+ ands r0, r0, #8
+ beq _037FD354
+ ldrh r2, [r9, #36] ;@ 0x24
+ mov r0, r8
+ and r1, r2, #255 ;@ 0xff
+ mov r2, r2, asr #8
+ bl FUN_037FBD70
+_037FD354:
+ ldrb r0, [r9, #3]
+ mov r0, r0, lsl #24
+ mov r0, r0, lsr #27
+ ands r0, r0, #16
+ beq _037FD374
+ mov r0, r8
+ ldrb r1, [r9, #35] ;@ 0x23
+ bl FUN_037FBCDC
+_037FD374:
+ add r8, r8, #1
+ cmp r8, #16
+ blt _037FD214
+ mov r5, #0
+ ldr r3, _037FD3DC ;@ =_03807F6C
+ mov r1, #84 ;@ 0x54
+_037FD38C:
+ mla r4, r5, r1, r3
+ ldrb r0, [r4, #3]
+ mov r0, r0, lsl #24
+ movs r0, r0, lsr #27
+ beq _037FD3C4
+ ands r0, r0, #1
+ movne r0, r5, lsl #4
+ addne r0, r0, #67108864 ;@ 0x4000000
+ ldrneb r2, [r0, #1027] ;@ 0x403
+ orrne r2, r2, #128 ;@ 0x80
+ strneb r2, [r0, #1027] ;@ 0x403
+ ldrb r0, [r4, #3]
+ bic r0, r0, #248 ;@ 0xf8
+ strb r0, [r4, #3]
+_037FD3C4:
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FD38C
+ add sp, sp, #24
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_037FD3DC: .word _03807F6C
+
+ arm_func_start FUN_037FD3E0
+FUN_037FD3E0: ;@ 0x037FD3E0
+ mov ip, #0
+ ldr r2, _037FD434 ;@ =_03807F6C
+ mov r0, #84 ;@ 0x54
+_037FD3EC:
+ mul r1, ip, r0
+ add r3, r2, r1
+ strb ip, [r2, r1]
+ ldrb r1, [r3, #3]
+ bic r1, r1, #248 ;@ 0xf8
+ strb r1, [r3, #3]
+ ldrb r1, [r3, #3]
+ bic r1, r1, #1
+ strb r1, [r3, #3]
+ add ip, ip, #1
+ cmp ip, #16
+ blt _037FD3EC
+ mov r1, #0
+ ldr r0, _037FD438 ;@ =_03807F48
+ str r1, [r0]
+ ldr r0, _037FD43C ;@ =_03807F44
+ str r1, [r0]
+ bx lr
+_037FD434: .word _03807F6C
+_037FD438: .word _03807F48
+_037FD43C: .word _03807F44
+
+ arm_func_start FUN_037FD440
+FUN_037FD440: ;@ 0x037FD440
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ cmp r2, #3
+ addls pc, pc, r2, lsl #2
+ b _037FD4B8
+ b _037FD464
+ b _037FD474
+ b _037FD484
+ b _037FD49C
+_037FD464:
+ ldrb r0, [r4]
+ bic r0, r0, #4
+ strb r0, [r4]
+ b _037FD4B8
+_037FD474:
+ ldrb r0, [r4]
+ orr r0, r0, #4
+ strb r0, [r4]
+ b _037FD4B8
+_037FD484:
+ ldrb r2, [r4]
+ orr r2, r2, #4
+ strb r2, [r4]
+ mvn r2, #0
+ bl FUN_037FE588
+ b _037FD4B8
+_037FD49C:
+ ldrb r2, [r4]
+ orr r2, r2, #4
+ strb r2, [r4]
+ mov r2, #127 ;@ 0x7f
+ bl FUN_037FE588
+ mov r0, r4
+ bl FUN_037FE54C
+_037FD4B8:
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FD4C0
+FUN_037FD4C0: ;@ 0x037FD4C0
+ mov r0, #0
+ ldr r3, _037FD500 ;@ =_038086EC
+ b _037FD4F0
+_037FD4CC:
+ add ip, r3, r0, lsl #6
+ ldrb r1, [r3, r0, lsl #6]
+ mov r2, r1, lsl #31
+ movs r2, r2, lsr #31
+ biceq r1, r1, #1
+ orreq r1, r1, #1
+ streqb r1, [ip]
+ bxeq lr
+ add r0, r0, #1
+_037FD4F0:
+ cmp r0, #32
+ blt _037FD4CC
+ mvn r0, #0
+ bx lr
+_037FD500: .word _038086EC
+
+ arm_func_start FUN_037FD504
+FUN_037FD504: ;@ 0x037FD504
+ ldr r2, _037FD544 ;@ =_03807F68
+ ldr r2, [r2]
+ cmp r2, #0
+ moveq r0, #0
+ bxeq lr
+ cmp r1, #16
+ addge r2, r2, #608 ;@ 0x260
+ subge r0, r1, #16
+ addge r0, r2, r0, lsl #1
+ bxge lr
+ add r3, r2, #32
+ ldrb r2, [r0, #1]
+ mov r0, #36 ;@ 0x24
+ mla r0, r2, r0, r3
+ add r0, r0, r1, lsl #1
+ bx lr
+_037FD544: .word _03807F68
+
+ arm_func_start FUN_037FD548
+FUN_037FD548: ;@ 0x037FD548
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, #0
+ mov r5, r6
+ mov r4, #1
+_037FD560:
+ mov r0, r8
+ mov r1, r5
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FD5A8
+ ldr r1, [r0, #40] ;@ 0x28
+ cmp r1, #0
+ beq _037FD5A8
+ mov r1, r8
+ mov r2, r5
+ mov r3, r7
+ bl FUN_037FD5C8
+ cmp r0, #0
+ moveq r6, r4
+ beq _037FD5A8
+ mov r0, r8
+ mov r1, r5
+ bl FUN_037FE3EC
+_037FD5A8:
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FD560
+ cmp r6, #0
+ moveq r0, #1
+ movne r0, #0
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_037FD5C8
+FUN_037FD5C8: ;@ 0x037FD5C8
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #52 ;@ 0x34
+ mov r9, r0
+ mov r8, r1
+ str r3, [sp, #4]
+ ldr r2, [r9, #60] ;@ 0x3c
+ b _037FD61C
+_037FD5E4:
+ ldr r0, [r2, #52] ;@ 0x34
+ cmp r0, #0
+ subgt r0, r0, #1
+ strgt r0, [r2, #52] ;@ 0x34
+ ldrb r0, [r2, #3]
+ mov r0, r0, lsl #29
+ movs r0, r0, lsr #31
+ bne _037FD618
+ ldr r1, [r2, #20]
+ ldr r0, [r2, #24]
+ cmp r1, r0
+ addlt r0, r1, #1
+ strlt r0, [r2, #20]
+_037FD618:
+ ldr r2, [r2, #80] ;@ 0x50
+_037FD61C:
+ cmp r2, #0
+ bne _037FD5E4
+ ldrb r1, [r9]
+ mov r0, r1, lsl #27
+ movs r0, r0, lsr #31
+ beq _037FD64C
+ ldr r0, [r9, #60] ;@ 0x3c
+ cmp r0, #0
+ movne r0, #0
+ bne _037FDF84
+ bic r0, r1, #16
+ strb r0, [r9]
+_037FD64C:
+ ldr r0, [r9, #32]
+ cmp r0, #0
+ ble _037FD670
+ sub r0, r0, #1
+ str r0, [r9, #32]
+ ldr r0, [r9, #32]
+ cmp r0, #0
+ movgt r0, #0
+ bgt _037FDF84
+_037FD670:
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE9B8
+ add r0, r9, #40 ;@ 0x28
+ str r0, [sp, #28]
+ mov r0, #2
+ str r0, [sp, #32]
+ mov r0, #127 ;@ 0x7f
+ str r0, [sp, #36] ;@ 0x24
+ mov fp, #0
+ mvn r0, #0
+ str r0, [sp, #40] ;@ 0x28
+ mov sl, #1
+ mov r0, #3
+ str r0, [sp, #20]
+ mov r0, #4
+ str r0, [sp, #24]
+ b _037FDF64
+_037FD6B4:
+ mov r4, fp
+ mov r6, sl
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r7, r0
+ ldr r0, [r9, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r9, #40] ;@ 0x28
+ cmp r7, #162 ;@ 0xa2
+ bne _037FD700
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r7, r0
+ ldr r0, [r9, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r9, #40] ;@ 0x28
+ ldrb r0, [r9]
+ mov r0, r0, lsl #25
+ mov r6, r0, lsr #31
+_037FD700:
+ cmp r7, #160 ;@ 0xa0
+ bne _037FD72C
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r7, r0
+ ldr r0, [r9, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r9, #40] ;@ 0x28
+ ldr r0, [sp, #20]
+ str r0, [sp, #8]
+ mov r4, sl
+_037FD72C:
+ cmp r7, #161 ;@ 0xa1
+ bne _037FD758
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r7, r0
+ ldr r0, [r9, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r9, #40] ;@ 0x28
+ ldr r0, [sp, #24]
+ str r0, [sp, #8]
+ mov r4, sl
+_037FD758:
+ ands r0, r7, #128 ;@ 0x80
+ bne _037FD82C
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ str r0, [sp, #12]
+ ldr r0, [sp, #28]
+ ldr r0, [r0]
+ add r1, r0, #1
+ ldr r0, [sp, #28]
+ str r1, [r0]
+ cmp r4, #0
+ ldrne r2, [sp, #8]
+ ldreq r2, [sp, #32]
+ mov r0, r9
+ mov r1, r8
+ bl FUN_037FE7B0
+ mov r5, r0
+ ldrsb r0, [r9, #19]
+ add r4, r7, r0
+ cmp r6, #0
+ beq _037FDF64
+ cmp r4, #0
+ movlt r4, fp
+ blt _037FD7C0
+ cmp r4, #127 ;@ 0x7f
+ ldrgt r4, [sp, #36] ;@ 0x24
+_037FD7C0:
+ ldrb r0, [r9]
+ mov r0, r0, lsl #29
+ movs r0, r0, lsr #31
+ bne _037FD800
+ ldr r0, [sp, #4]
+ cmp r0, #0
+ beq _037FD800
+ cmp r5, #0
+ movgt r0, r5
+ ldrle r0, [sp, #40] ;@ 0x28
+ str r0, [sp]
+ mov r0, r9
+ mov r1, r8
+ mov r2, r4
+ ldr r3, [sp, #12]
+ bl FUN_037FDF94
+_037FD800:
+ strb r4, [r9, #20]
+ ldrb r0, [r9]
+ mov r0, r0, lsl #30
+ movs r0, r0, lsr #31
+ beq _037FDF64
+ str r5, [r9, #32]
+ cmp r5, #0
+ ldreqb r0, [r9]
+ orreq r0, r0, #16
+ streqb r0, [r9]
+ b _037FDF64
+_037FD82C:
+ and r0, r7, #240 ;@ 0xf0
+ cmp r0, #192 ;@ 0xc0
+ bgt _037FD868
+ cmp r0, #192 ;@ 0xc0
+ bge _037FD9B8
+ cmp r0, #144 ;@ 0x90
+ bgt _037FD85C
+ cmp r0, #144 ;@ 0x90
+ bge _037FD8D8
+ cmp r0, #128 ;@ 0x80
+ beq _037FD890
+ b _037FDF64
+_037FD85C:
+ cmp r0, #176 ;@ 0xb0
+ beq _037FDC68
+ b _037FDF64
+_037FD868:
+ cmp r0, #224 ;@ 0xe0
+ bgt _037FD884
+ cmp r0, #224 ;@ 0xe0
+ bge _037FDC14
+ cmp r0, #208 ;@ 0xd0
+ beq _037FD9B8
+ b _037FDF64
+_037FD884:
+ cmp r0, #240 ;@ 0xf0
+ beq _037FDEC0
+ b _037FDF64
+_037FD890:
+ cmp r4, #0
+ ldrne r2, [sp, #8]
+ ldreq r2, [sp, #32]
+ mov r0, r9
+ mov r1, r8
+ bl FUN_037FE7B0
+ cmp r6, #0
+ beq _037FDF64
+ cmp r7, #128 ;@ 0x80
+ beq _037FD8C4
+ cmp r7, #129 ;@ 0x81
+ beq _037FD8CC
+ b _037FDF64
+_037FD8C4:
+ str r0, [r9, #32]
+ b _037FDF64
+_037FD8CC:
+ cmp r0, #65536 ;@ 0x10000
+ strlth r0, [r9, #2]
+ b _037FDF64
+_037FD8D8:
+ cmp r7, #147 ;@ 0x93
+ beq _037FD8F4
+ cmp r7, #148 ;@ 0x94
+ beq _037FD958
+ cmp r7, #149 ;@ 0x95
+ beq _037FD974
+ b _037FDF64
+_037FD8F4:
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r4, r0
+ ldr r0, [r9, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r9, #40] ;@ 0x28
+ mov r0, r9
+ bl FUN_037FE8B8
+ mov r5, r0
+ cmp r6, #0
+ beq _037FDF64
+ mov r0, r8
+ mov r1, r4
+ bl FUN_037FE460
+ movs r4, r0
+ beq _037FDF64
+ cmp r4, r9
+ beq _037FDF64
+ mov r1, r8
+ bl FUN_037FE440
+ mov r0, r4
+ ldr r1, [r9, #36] ;@ 0x24
+ mov r2, r5
+ bl FUN_037FE6A8
+ b _037FDF64
+_037FD958:
+ mov r0, r9
+ bl FUN_037FE8B8
+ cmp r6, #0
+ ldrne r1, [r9, #36] ;@ 0x24
+ addne r0, r1, r0
+ strne r0, [r9, #40] ;@ 0x28
+ b _037FDF64
+_037FD974:
+ mov r0, r9
+ bl FUN_037FE8B8
+ cmp r6, #0
+ beq _037FDF64
+ ldrb r1, [r9, #59] ;@ 0x3b
+ cmp r1, #3
+ bcs _037FDF64
+ ldr r2, [r9, #40] ;@ 0x28
+ add r1, r9, r1, lsl #2
+ str r2, [r1, #44] ;@ 0x2c
+ ldrb r1, [r9, #59] ;@ 0x3b
+ add r1, r1, #1
+ strb r1, [r9, #59] ;@ 0x3b
+ ldr r1, [r9, #36] ;@ 0x24
+ add r0, r1, r0
+ str r0, [r9, #40] ;@ 0x28
+ b _037FDF64
+_037FD9B8:
+ cmp r4, #0
+ ldrne r2, [sp, #8]
+ moveq r2, fp
+ mov r0, r9
+ mov r1, r8
+ bl FUN_037FE7B0
+ strb r0, [sp, #44] ;@ 0x2c
+ cmp r6, #0
+ beq _037FDF64
+ sub r0, r7, #192 ;@ 0xc0
+ cmp r0, #23
+ addls pc, pc, r0, lsl #2
+ b _037FDF64
+ b _037FDBE4
+ b _037FDA4C
+ b _037FDA64
+ b _037FDBCC
+ b _037FDBD8
+ b _037FDA70
+ b _037FDA7C
+ b _037FDA88
+ b _037FDB48
+ b _037FDB90
+ b _037FDAB0
+ b _037FDABC
+ b _037FDAC8
+ b _037FDAD4
+ b _037FDBB0
+ b _037FDAA4
+ b _037FDAE0
+ b _037FDAEC
+ b _037FDAF8
+ b _037FDB04
+ b _037FDB10
+ b _037FDA58
+ b _037FDBF4
+ b _037FDB7C
+_037FDA4C:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #4]
+ b _037FDF64
+_037FDA58:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #5]
+ b _037FDF64
+_037FDA64:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r8, #5]
+ b _037FDF64
+_037FDA70:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #7]
+ b _037FDF64
+_037FDA7C:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #18]
+ b _037FDF64
+_037FDA88:
+ ldrb r0, [r9]
+ bic r1, r0, #2
+ ldrb r0, [sp, #44] ;@ 0x2c
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #1
+ strb r0, [r9]
+ b _037FDF64
+_037FDAA4:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #21]
+ b _037FDF64
+_037FDAB0:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #26]
+ b _037FDF64
+_037FDABC:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #25]
+ b _037FDF64
+_037FDAC8:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #24]
+ b _037FDF64
+_037FDAD4:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #27]
+ b _037FDF64
+_037FDAE0:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #14]
+ b _037FDF64
+_037FDAEC:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #15]
+ b _037FDF64
+_037FDAF8:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #16]
+ b _037FDF64
+_037FDB04:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #17]
+ b _037FDF64
+_037FDB10:
+ ldrb r0, [r9, #59] ;@ 0x3b
+ cmp r0, #3
+ bcs _037FDF64
+ ldr r1, [r9, #40] ;@ 0x28
+ add r0, r9, r0, lsl #2
+ str r1, [r0, #44] ;@ 0x2c
+ ldrb r1, [sp, #44] ;@ 0x2c
+ ldrb r0, [r9, #59] ;@ 0x3b
+ add r0, r9, r0
+ strb r1, [r0, #56] ;@ 0x38
+ ldrb r0, [r9, #59] ;@ 0x3b
+ add r0, r0, #1
+ strb r0, [r9, #59] ;@ 0x3b
+ b _037FDF64
+_037FDB48:
+ ldrb r0, [r9]
+ bic r1, r0, #8
+ ldrb r0, [sp, #44] ;@ 0x2c
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #3
+ strb r0, [r9]
+ mov r0, r9
+ mov r1, r8
+ ldr r2, [sp, #40] ;@ 0x28
+ bl FUN_037FE588
+ mov r0, r9
+ bl FUN_037FE54C
+ b _037FDF64
+_037FDB7C:
+ mov r0, r9
+ mov r1, r8
+ ldrb r2, [sp, #44] ;@ 0x2c
+ bl FUN_037FD440
+ b _037FDF64
+_037FDB90:
+ ldrb r1, [sp, #44] ;@ 0x2c
+ ldrsb r0, [r9, #19]
+ add r0, r1, r0
+ strb r0, [r9, #20]
+ ldrb r0, [r9]
+ orr r0, r0, #32
+ strb r0, [r9]
+ b _037FDF64
+_037FDBB0:
+ ldrb r0, [r9]
+ bic r1, r0, #32
+ ldrb r0, [sp, #44] ;@ 0x2c
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #5
+ strb r0, [r9]
+ b _037FDF64
+_037FDBCC:
+ ldrsb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #19]
+ b _037FDF64
+_037FDBD8:
+ ldrsb r0, [sp, #44] ;@ 0x2c
+ strb r0, [r9, #6]
+ b _037FDF64
+_037FDBE4:
+ ldrb r0, [sp, #44] ;@ 0x2c
+ sub r0, r0, #64 ;@ 0x40
+ strb r0, [r9, #8]
+ b _037FDF64
+_037FDBF4:
+ ldr r0, _037FDF90 ;@ =_03807F4C
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037FDF64
+ mov r0, r8
+ ldrb r1, [sp, #44] ;@ 0x2c
+ bl FUN_037FD504
+ b _037FDF64
+_037FDC14:
+ cmp r4, #0
+ ldrne r2, [sp, #8]
+ moveq r2, sl
+ mov r0, r9
+ mov r1, r8
+ bl FUN_037FE7B0
+ mov r0, r0, lsl #16
+ mov r0, r0, asr #16
+ cmp r6, #0
+ beq _037FDF64
+ cmp r7, #224 ;@ 0xe0
+ beq _037FDC60
+ cmp r7, #225 ;@ 0xe1
+ beq _037FDC58
+ cmp r7, #227 ;@ 0xe3
+ streqh r0, [r9, #22]
+ b _037FDF64
+_037FDC58:
+ strh r0, [r8, #24]
+ b _037FDF64
+_037FDC60:
+ strh r0, [r9, #28]
+ b _037FDF64
+_037FDC68:
+ ldr r0, [r9, #40] ;@ 0x28
+ bl FUN_037FE968
+ str r0, [sp, #16]
+ ldr r0, [r9, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r9, #40] ;@ 0x28
+ cmp r4, #0
+ ldrne r2, [sp, #8]
+ moveq r2, sl
+ mov r0, r9
+ mov r1, r8
+ bl FUN_037FE7B0
+ mov r0, r0, lsl #16
+ mov r5, r0, asr #16
+ mov r0, r8
+ ldr r1, [sp, #16]
+ bl FUN_037FD504
+ mov r4, r0
+ cmp r6, #0
+ beq _037FDF64
+ cmp r4, #0
+ beq _037FDF64
+ sub r0, r7, #176 ;@ 0xb0
+ cmp r0, #13
+ addls pc, pc, r0, lsl #2
+ b _037FDF64
+ b _037FDD08
+ b _037FDD10
+ b _037FDD20
+ b _037FDD30
+ b _037FDD40
+ b _037FDD5C
+ b _037FDD80
+ b _037FDF64
+ b _037FDDB8
+ b _037FDDE4
+ b _037FDE10
+ b _037FDE3C
+ b _037FDE68
+ b _037FDE94
+_037FDD08:
+ strh r5, [r4]
+ b _037FDF64
+_037FDD10:
+ ldrsh r0, [r4]
+ add r0, r0, r5
+ strh r0, [r4]
+ b _037FDF64
+_037FDD20:
+ ldrsh r0, [r4]
+ sub r0, r0, r5
+ strh r0, [r4]
+ b _037FDF64
+_037FDD30:
+ ldrsh r0, [r4]
+ mul r1, r0, r5
+ strh r1, [r4]
+ b _037FDF64
+_037FDD40:
+ cmp r5, #0
+ beq _037FDF64
+ ldrsh r0, [r4]
+ mov r1, r5
+ bl _s32_div_f
+ strh r0, [r4]
+ b _037FDF64
+_037FDD5C:
+ cmp r5, #0
+ ldrgesh r0, [r4]
+ movge r0, r0, lsl r5
+ strgeh r0, [r4]
+ ldrltsh r1, [r4]
+ rsblt r0, r5, #0
+ movlt r0, r1, asr r0
+ strlth r0, [r4]
+ b _037FDF64
+_037FDD80:
+ mov r6, fp
+ cmp r5, #0
+ movlt r6, sl
+ rsblt r0, r5, #0
+ movlt r0, r0, lsl #16
+ movlt r5, r0, asr #16
+ bl FUN_037FC058
+ add r1, r5, #1
+ mul r1, r0, r1
+ mov r0, r1, asr #16
+ cmp r6, #0
+ rsbne r0, r0, #0
+ strh r0, [r4]
+ b _037FDF64
+_037FDDB8:
+ ldrsh r0, [r4]
+ cmp r0, r5
+ moveq r2, sl
+ movne r2, fp
+ ldrb r0, [r9]
+ bic r1, r0, #64 ;@ 0x40
+ and r0, r2, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #6
+ strb r0, [r9]
+ b _037FDF64
+_037FDDE4:
+ ldrsh r0, [r4]
+ cmp r0, r5
+ movge r2, sl
+ movlt r2, fp
+ ldrb r0, [r9]
+ bic r1, r0, #64 ;@ 0x40
+ and r0, r2, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #6
+ strb r0, [r9]
+ b _037FDF64
+_037FDE10:
+ ldrsh r0, [r4]
+ cmp r0, r5
+ movgt r2, sl
+ movle r2, fp
+ ldrb r0, [r9]
+ bic r1, r0, #64 ;@ 0x40
+ and r0, r2, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #6
+ strb r0, [r9]
+ b _037FDF64
+_037FDE3C:
+ ldrsh r0, [r4]
+ cmp r0, r5
+ movle r2, sl
+ movgt r2, fp
+ ldrb r0, [r9]
+ bic r1, r0, #64 ;@ 0x40
+ and r0, r2, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #6
+ strb r0, [r9]
+ b _037FDF64
+_037FDE68:
+ ldrsh r0, [r4]
+ cmp r0, r5
+ movlt r2, sl
+ movge r2, fp
+ ldrb r0, [r9]
+ bic r1, r0, #64 ;@ 0x40
+ and r0, r2, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #6
+ strb r0, [r9]
+ b _037FDF64
+_037FDE94:
+ ldrsh r0, [r4]
+ cmp r0, r5
+ movne r2, sl
+ moveq r2, fp
+ ldrb r0, [r9]
+ bic r1, r0, #64 ;@ 0x40
+ and r0, r2, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #6
+ strb r0, [r9]
+ b _037FDF64
+_037FDEC0:
+ cmp r6, #0
+ beq _037FDF64
+ sub r0, r7, #252 ;@ 0xfc
+ cmp r0, #3
+ addls pc, pc, r0, lsl #2
+ b _037FDF64
+ b _037FDF10
+ b _037FDEE8
+ b _037FDF64
+ b _037FDF5C
+_037FDEE8:
+ ldrb r0, [r9, #59] ;@ 0x3b
+ cmp r0, #0
+ beq _037FDF64
+ sub r0, r0, #1
+ strb r0, [r9, #59] ;@ 0x3b
+ ldrb r0, [r9, #59] ;@ 0x3b
+ add r0, r9, r0, lsl #2
+ ldr r0, [r0, #44] ;@ 0x2c
+ str r0, [r9, #40] ;@ 0x28
+ b _037FDF64
+_037FDF10:
+ ldrb r0, [r9, #59] ;@ 0x3b
+ cmp r0, #0
+ beq _037FDF64
+ sub r1, r0, #1
+ add r2, r9, r1
+ ldrb r0, [r2, #56] ;@ 0x38
+ cmp r0, #0
+ beq _037FDF40
+ sub r0, r0, #1
+ ands r0, r0, #255 ;@ 0xff
+ streqb r1, [r9, #59] ;@ 0x3b
+ beq _037FDF64
+_037FDF40:
+ strb r0, [r2, #56] ;@ 0x38
+ ldrb r0, [r9, #59] ;@ 0x3b
+ sub r0, r0, #1
+ add r0, r9, r0, lsl #2
+ ldr r0, [r0, #44] ;@ 0x2c
+ str r0, [r9, #40] ;@ 0x28
+ b _037FDF64
+_037FDF5C:
+ mvn r0, #0
+ b _037FDF84
+_037FDF64:
+ ldr r0, [r9, #32]
+ cmp r0, #0
+ bne _037FDF80
+ ldrb r0, [r9]
+ mov r0, r0, lsl #27
+ movs r0, r0, lsr #31
+ beq _037FD6B4
+_037FDF80:
+ mov r0, #0
+_037FDF84:
+ add sp, sp, #52 ;@ 0x34
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FDF90: .word _03807F4C
+
+ arm_func_start FUN_037FDF94
+FUN_037FDF94: ;@ 0x037FDF94
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ sub sp, sp, #24
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ mov r5, r3
+ mov r4, #0
+ ldrb r0, [r8]
+ mov r0, r0, lsl #28
+ movs r0, r0, lsr #31
+ beq _037FDFD0
+ ldr r4, [r8, #60] ;@ 0x3c
+ cmp r4, #0
+ strneb r6, [r4, #8]
+ strneb r5, [r4, #9]
+_037FDFD0:
+ cmp r4, #0
+ bne _037FE0C4
+ ldr r0, [r7, #32]
+ ldrh r1, [r8, #2]
+ mov r2, r6
+ add r3, sp, #8
+ bl FUN_037FF2C4
+ cmp r0, #0
+ beq _037FE18C
+ ldrb r0, [sp, #8]
+ cmp r0, #4
+ addls pc, pc, r0, lsl #2
+ b _037FE030
+ b _037FE030
+ b _037FE018
+ b _037FE020
+ b _037FE028
+ b _037FE018
+_037FE018:
+ ldr r1, _037FE198 ;@ =0x0000FFFF
+ b _037FE034
+_037FE020:
+ mov r1, #16128 ;@ 0x3f00
+ b _037FE034
+_037FE028:
+ mov r1, #49152 ;@ 0xc000
+ b _037FE034
+_037FE030:
+ b _037FE18C
+_037FE034:
+ ldrh r0, [r8, #30]
+ and r0, r1, r0
+ str r8, [sp]
+ ldrb r2, [r7, #4]
+ ldrb r1, [r8, #18]
+ add r1, r2, r1
+ ldrb r2, [r8]
+ mov r2, r2, lsl #24
+ mov r2, r2, lsr #31
+ ldr r3, _037FE19C ;@ =FUN_037FE344
+ bl FUN_037FCB94
+ movs r4, r0
+ beq _037FE18C
+ ldrb r0, [r8]
+ mov r0, r0, lsl #28
+ movs r0, r0, lsr #31
+ mvnne r3, #0
+ ldreq r3, [sp, #48] ;@ 0x30
+ ldr r0, [r7, #32]
+ str r0, [sp]
+ add r0, sp, #8
+ str r0, [sp, #4]
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ bl FUN_037FF154
+ cmp r0, #0
+ bne _037FE0B8
+ mov r0, #0
+ strb r0, [r4, #34] ;@ 0x22
+ mov r0, r4
+ bl FUN_037FCB80
+ b _037FE18C
+_037FE0B8:
+ ldr r0, [r8, #60] ;@ 0x3c
+ str r0, [r4, #80] ;@ 0x50
+ str r4, [r8, #60] ;@ 0x3c
+_037FE0C4:
+ ldrb r1, [r8, #14]
+ cmp r1, #255 ;@ 0xff
+ beq _037FE0D8
+ mov r0, r4
+ bl FUN_037FCD28
+_037FE0D8:
+ ldrb r1, [r8, #15]
+ cmp r1, #255 ;@ 0xff
+ beq _037FE0EC
+ mov r0, r4
+ bl FUN_037FCD0C
+_037FE0EC:
+ ldrb r1, [r8, #16]
+ cmp r1, #255 ;@ 0xff
+ beq _037FE100
+ mov r0, r4
+ bl FUN_037FCD04
+_037FE100:
+ ldrb r1, [r8, #17]
+ cmp r1, #255 ;@ 0xff
+ beq _037FE114
+ mov r0, r4
+ bl FUN_037FCCE8
+_037FE114:
+ ldrsh r0, [r8, #22]
+ strh r0, [r4, #50] ;@ 0x32
+ ldrb r0, [r8]
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ beq _037FE144
+ ldrsh r1, [r4, #50] ;@ 0x32
+ ldrb r0, [r8, #20]
+ sub r0, r0, r6
+ mov r0, r0, lsl #22
+ add r0, r1, r0, asr #16
+ strh r0, [r4, #50] ;@ 0x32
+_037FE144:
+ ldrb r0, [r8, #21]
+ cmp r0, #0
+ bne _037FE168
+ ldr r0, [sp, #48] ;@ 0x30
+ str r0, [r4, #24]
+ ldrb r0, [r4, #3]
+ bic r0, r0, #4
+ strb r0, [r4, #3]
+ b _037FE184
+_037FE168:
+ mul r1, r0, r0
+ ldrsh r0, [r4, #50] ;@ 0x32
+ cmp r0, #0
+ rsblt r0, r0, #0
+ mul r0, r1, r0
+ mov r0, r0, asr #11
+ str r0, [r4, #24]
+_037FE184:
+ mov r0, #0
+ str r0, [r4, #20]
+_037FE18C:
+ add sp, sp, #24
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FE198: .word 0x0000FFFF
+_037FE19C: .word FUN_037FE344
+
+ arm_func_start FUN_037FE1A0
+FUN_037FE1A0: ;@ 0x037FE1A0
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #0
+ mov r4, #1
+_037FE1B0:
+ mov r0, r6
+ mov r1, r5
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FE1D0
+ mov r1, r6
+ mov r2, r4
+ bl FUN_037FE1E4
+_037FE1D0:
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FE1B0
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FE1E4
+FUN_037FE1E4: ;@ 0x037FE1E4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov fp, r2
+ ldrb r0, [r1, #5]
+ mov r0, r0, lsl #1
+ ldr r4, _037FE340 ;@ =_03807194
+ ldrsh r3, [r4, r0]
+ ldrb r0, [sl, #4]
+ mov r0, r0, lsl #1
+ ldrsh r2, [r4, r0]
+ ldrb r0, [sl, #5]
+ mov r0, r0, lsl #1
+ ldrsh r0, [r4, r0]
+ add r0, r2, r0
+ add r3, r3, r0
+ ldrsh r2, [sl, #10]
+ ldrsh r0, [r1, #6]
+ add r2, r2, r0
+ ldrsb r4, [sl, #6]
+ ldrb r0, [sl, #7]
+ mov r0, r0, lsl #6
+ mul r1, r4, r0
+ ldrsh r0, [sl, #12]
+ add r0, r0, r1, asr #7
+ ldrsb r1, [sl, #8]
+ ldrb r4, [sl, #1]
+ cmp r4, #127 ;@ 0x7f
+ mulne r4, r1, r4
+ addne r1, r4, #64 ;@ 0x40
+ movne r1, r1, asr #7
+ ldrsb r4, [sl, #9]
+ add r1, r1, r4
+ mov r4, #32768 ;@ 0x8000
+ rsb r4, r4, #0
+ cmp r3, r4
+ movlt r3, r4
+ mov r4, #32768 ;@ 0x8000
+ rsb r4, r4, #0
+ cmp r2, r4
+ movlt r2, r4
+ mvn r4, #127 ;@ 0x7f
+ cmp r1, r4
+ movlt r1, r4
+ blt _037FE2A0
+ cmp r1, #127 ;@ 0x7f
+ movgt r1, #127 ;@ 0x7f
+_037FE2A0:
+ ldr r9, [sl, #60] ;@ 0x3c
+ mov r4, #1
+ mov r3, r3, lsl #16
+ mov r7, r3, asr #16
+ mov r0, r0, lsl #16
+ mov r6, r0, asr #16
+ mov r0, r1, lsl #24
+ mov r5, r0, asr #24
+ mov r0, r2, lsl #16
+ mov r8, r0, asr #16
+ b _037FE32C
+_037FE2CC:
+ strh r8, [r9, #6]
+ ldrb r0, [r9, #2]
+ cmp r0, #3
+ beq _037FE328
+ strh r7, [r9, #12]
+ strh r6, [r9, #14]
+ strb r5, [r9, #11]
+ ldrb r0, [sl, #1]
+ strb r0, [r9, #4]
+ ldrh r0, [sl, #24]
+ strh r0, [r9, #40] ;@ 0x28
+ ldrh r0, [sl, #26]
+ strh r0, [r9, #42] ;@ 0x2a
+ ldrh r0, [sl, #28]
+ strh r0, [r9, #44] ;@ 0x2c
+ ldr r0, [r9, #52] ;@ 0x34
+ cmp r0, #0
+ bne _037FE328
+ cmp fp, #0
+ beq _037FE328
+ strb r4, [r9, #34] ;@ 0x22
+ mov r0, r9
+ bl FUN_037FCCDC
+_037FE328:
+ ldr r9, [r9, #80] ;@ 0x50
+_037FE32C:
+ cmp r9, #0
+ bne _037FE2CC
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FE340: .word _03807194
+
+ arm_func_start FUN_037FE344
+FUN_037FE344: ;@ 0x037FE344
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r2
+ cmp r1, #1
+ bne _037FE368
+ mov r1, #0
+ strb r1, [r5, #34] ;@ 0x22
+ bl FUN_037FCB80
+_037FE368:
+ ldr r1, [r4, #60] ;@ 0x3c
+ cmp r1, r5
+ ldreq r0, [r5, #80] ;@ 0x50
+ streq r0, [r4, #60] ;@ 0x3c
+ beq _037FE3A0
+ b _037FE394
+_037FE380:
+ cmp r0, r5
+ ldreq r0, [r5, #80] ;@ 0x50
+ streq r0, [r1, #80] ;@ 0x50
+ beq _037FE3A0
+ mov r1, r0
+_037FE394:
+ ldr r0, [r1, #80] ;@ 0x50
+ cmp r0, #0
+ bne _037FE380
+_037FE3A0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FE3AC
+FUN_037FE3AC: ;@ 0x037FE3AC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, #0
+_037FE3BC:
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FE3EC
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FE3BC
+ ldrb r0, [r5]
+ bic r0, r0, #1
+ strb r0, [r5]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FE3EC
+FUN_037FE3EC: ;@ 0x037FE3EC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FE430
+ mov r1, r5
+ bl FUN_037FE440
+ add r3, r5, #8
+ ldr r2, _037FE43C ;@ =_038086EC
+ ldrb r1, [r3, r4]
+ ldrb r0, [r2, r1, lsl #6]
+ bic r0, r0, #1
+ strb r0, [r2, r1, lsl #6]
+ mov r0, #255 ;@ 0xff
+ strb r0, [r3, r4]
+_037FE430:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FE43C: .word _038086EC
+
+ arm_func_start FUN_037FE440
+FUN_037FE440: ;@ 0x037FE440
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mvn r2, #0
+ bl FUN_037FE588
+ mov r0, r4
+ bl FUN_037FE54C
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FE460
+FUN_037FE460: ;@ 0x037FE460
+ cmp r1, #15
+ movgt r0, #0
+ bxgt lr
+ add r0, r0, r1
+ ldrb r1, [r0, #8]
+ cmp r1, #255 ;@ 0xff
+ moveq r0, #0
+ ldrne r0, _037FE488 ;@ =_038086EC
+ addne r0, r0, r1, lsl #6
+ bx lr
+_037FE488: .word _038086EC
+
+ arm_func_start FUN_037FE48C
+FUN_037FE48C: ;@ 0x037FE48C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r6, r0
+ mov r5, #0
+ add r1, r6, #28
+ b _037FE4B4
+_037FE4A4:
+ ldrh r0, [r1]
+ sub r0, r0, #240 ;@ 0xf0
+ strh r0, [r1]
+ add r5, r5, #1
+_037FE4B4:
+ ldrh r0, [r6, #28]
+ cmp r0, #240 ;@ 0xf0
+ bcs _037FE4A4
+ mov r4, #0
+ mov r7, #1
+ b _037FE4F0
+_037FE4CC:
+ mov r0, r6
+ mov r1, r7
+ bl FUN_037FD548
+ cmp r0, #0
+ beq _037FE4EC
+ mov r0, r6
+ bl FUN_037FE3AC
+ b _037FE4F8
+_037FE4EC:
+ add r4, r4, #1
+_037FE4F0:
+ cmp r4, r5
+ blt _037FE4CC
+_037FE4F8:
+ ldr r0, _037FE548 ;@ =_03807F68
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037FE524
+ add r3, r0, #64 ;@ 0x40
+ ldrb r1, [r6, #1]
+ mov r0, #36 ;@ 0x24
+ mul r2, r1, r0
+ ldr r0, [r3, r2]
+ add r0, r0, r4
+ str r0, [r3, r2]
+_037FE524:
+ ldrh r2, [r6, #24]
+ ldrh r0, [r6, #26]
+ mul r1, r2, r0
+ ldrh r0, [r6, #28]
+ add r0, r0, r1, asr #8
+ strh r0, [r6, #28]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FE548: .word _03807F68
+
+ arm_func_start FUN_037FE54C
+FUN_037FE54C: ;@ 0x037FE54C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r4, [r5, #60] ;@ 0x3c
+ b _037FE56C
+_037FE560:
+ mov r0, r4
+ bl FUN_037FCB80
+ ldr r4, [r4, #80] ;@ 0x50
+_037FE56C:
+ cmp r4, #0
+ bne _037FE560
+ mov r0, #0
+ str r0, [r5, #60] ;@ 0x3c
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FE588
+FUN_037FE588: ;@ 0x037FE588
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r7, r2
+ mov r2, #0
+ bl FUN_037FE1E4
+ ldr r6, [r4, #60] ;@ 0x3c
+ and r5, r7, #255 ;@ 0xff
+ mov r4, #1
+ b _037FE5E4
+_037FE5B0:
+ mov r0, r6
+ bl FUN_037FCCCC
+ cmp r0, #0
+ beq _037FE5E0
+ cmp r7, #0
+ blt _037FE5D4
+ mov r0, r6
+ mov r1, r5
+ bl FUN_037FCCE8
+_037FE5D4:
+ strb r4, [r6, #34] ;@ 0x22
+ mov r0, r6
+ bl FUN_037FCCDC
+_037FE5E0:
+ ldr r6, [r6, #80] ;@ 0x50
+_037FE5E4:
+ cmp r6, #0
+ bne _037FE5B0
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_037FE5F8
+FUN_037FE5F8: ;@ 0x037FE5F8
+ stmdb sp!, {r4, lr}
+ ldrb r2, [r0]
+ bic r2, r2, #4
+ strb r2, [r0]
+ str r1, [r0, #32]
+ mov r1, #120 ;@ 0x78
+ strh r1, [r0, #24]
+ mov r1, #256 ;@ 0x100
+ strh r1, [r0, #26]
+ mov r1, #240 ;@ 0xf0
+ strh r1, [r0, #28]
+ mov r1, #127 ;@ 0x7f
+ strb r1, [r0, #5]
+ mov r3, #0
+ strh r3, [r0, #6]
+ mov r1, #64 ;@ 0x40
+ strb r1, [r0, #4]
+ mov r2, #255 ;@ 0xff
+_037FE640:
+ add r1, r0, r3
+ strb r2, [r1, #8]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _037FE640
+ ldr r2, _037FE6A4 ;@ =_03807F68
+ ldr r3, [r2]
+ cmp r3, #0
+ beq _037FE69C
+ mov r4, #0
+ ldrb ip, [r0, #1]
+ mov r1, #36 ;@ 0x24
+ mla r3, ip, r1, r3
+ str r4, [r3, #64] ;@ 0x40
+ mvn lr, #0
+_037FE67C:
+ ldr r3, [r2]
+ ldrb ip, [r0, #1]
+ mla r3, ip, r1, r3
+ add r3, r3, r4, lsl #1
+ strh lr, [r3, #32]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FE67C
+_037FE69C:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FE6A4: .word _03807F68
+
+ arm_func_start FUN_037FE6A8
+FUN_037FE6A8: ;@ 0x037FE6A8
+ str r1, [r0, #36] ;@ 0x24
+ ldr r1, [r0, #36] ;@ 0x24
+ add r1, r1, r2
+ str r1, [r0, #40] ;@ 0x28
+ bx lr
+
+ arm_func_start FUN_037FE6BC
+FUN_037FE6BC: ;@ 0x037FE6BC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #0
+ str r0, [r4, #36] ;@ 0x24
+ str r0, [r4, #40] ;@ 0x28
+ ldrb r1, [r4]
+ orr r1, r1, #2
+ strb r1, [r4]
+ ldrb r1, [r4]
+ bic r1, r1, #4
+ strb r1, [r4]
+ ldrb r1, [r4]
+ bic r1, r1, #8
+ strb r1, [r4]
+ ldrb r1, [r4]
+ bic r1, r1, #16
+ strb r1, [r4]
+ ldrb r1, [r4]
+ bic r1, r1, #32
+ strb r1, [r4]
+ ldrb r1, [r4]
+ orr r1, r1, #64 ;@ 0x40
+ strb r1, [r4]
+ ldrb r1, [r4]
+ bic r1, r1, #128 ;@ 0x80
+ strb r1, [r4]
+ strb r0, [r4, #59] ;@ 0x3b
+ strh r0, [r4, #2]
+ mov r1, #64 ;@ 0x40
+ strb r1, [r4, #18]
+ mov r2, #127 ;@ 0x7f
+ strb r2, [r4, #4]
+ strb r2, [r4, #5]
+ strh r0, [r4, #10]
+ strb r0, [r4, #8]
+ strb r0, [r4, #9]
+ strb r0, [r4, #6]
+ strh r0, [r4, #12]
+ mov r1, #255 ;@ 0xff
+ strb r1, [r4, #14]
+ strb r1, [r4, #15]
+ strb r1, [r4, #16]
+ strb r1, [r4, #17]
+ strb r2, [r4, #1]
+ mov r1, #2
+ strb r1, [r4, #7]
+ mov r1, #60 ;@ 0x3c
+ strb r1, [r4, #20]
+ strb r0, [r4, #21]
+ strh r0, [r4, #22]
+ strb r0, [r4, #19]
+ ldr r0, _037FE7AC ;@ =0x0000FFFF
+ strh r0, [r4, #30]
+ add r0, r4, #24
+ bl FUN_037FC8B8
+ mov r0, #0
+ str r0, [r4, #32]
+ str r0, [r4, #60] ;@ 0x3c
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FE7AC: .word 0x0000FFFF
+
+ arm_func_start FUN_037FE7B0
+FUN_037FE7B0: ;@ 0x037FE7B0
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r4, r0
+ mov r6, r1
+ cmp r2, #4
+ addls pc, pc, r2, lsl #2
+ b _037FE86C
+ b _037FE7DC
+ b _037FE7F8
+ b _037FE804
+ b _037FE83C
+ b _037FE810
+_037FE7DC:
+ ldr r0, [r4, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r5, r0
+ ldr r0, [r4, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r4, #40] ;@ 0x28
+ b _037FE86C
+_037FE7F8:
+ bl FUN_037FE918
+ mov r5, r0
+ b _037FE86C
+_037FE804:
+ bl FUN_037FE878
+ mov r5, r0
+ b _037FE86C
+_037FE810:
+ ldr r0, [r4, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r1, r0
+ ldr r0, [r4, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r4, #40] ;@ 0x28
+ mov r0, r6
+ bl FUN_037FD504
+ cmp r0, #0
+ ldrnesh r5, [r0]
+ b _037FE86C
+_037FE83C:
+ bl FUN_037FE918
+ mov r5, r0, lsl #16
+ mov r0, r4
+ bl FUN_037FE918
+ mov r0, r0, lsl #16
+ mov r4, r0, asr #16
+ bl FUN_037FC058
+ sub r1, r4, r5, asr #16
+ add r1, r1, #1
+ mul r1, r0, r1
+ mov r0, r1, asr #16
+ add r5, r0, r5, asr #16
+_037FE86C:
+ mov r0, r5
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FE878
+FUN_037FE878: ;@ 0x037FE878
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #0
+ add r4, r6, #40 ;@ 0x28
+_037FE888:
+ ldr r0, [r6, #40] ;@ 0x28
+ bl FUN_037FE968
+ ldr r1, [r4]
+ add r1, r1, #1
+ str r1, [r4]
+ and r1, r0, #127 ;@ 0x7f
+ orr r5, r1, r5, lsl #7
+ ands r0, r0, #128 ;@ 0x80
+ bne _037FE888
+ mov r0, r5
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FE8B8
+FUN_037FE8B8: ;@ 0x037FE8B8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ ldr r0, [r4, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r5, r0
+ ldr r0, [r4, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r4, #40] ;@ 0x28
+ ldr r0, [r4, #40] ;@ 0x28
+ bl FUN_037FE968
+ ldr r1, [r4, #40] ;@ 0x28
+ add r1, r1, #1
+ str r1, [r4, #40] ;@ 0x28
+ orr r5, r5, r0, lsl #8
+ ldr r0, [r4, #40] ;@ 0x28
+ bl FUN_037FE968
+ ldr r1, [r4, #40] ;@ 0x28
+ add r1, r1, #1
+ str r1, [r4, #40] ;@ 0x28
+ orr r0, r5, r0, lsl #16
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FE918
+FUN_037FE918: ;@ 0x037FE918
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r0, [r5, #40] ;@ 0x28
+ bl FUN_037FE968
+ mov r4, r0
+ ldr r0, [r5, #40] ;@ 0x28
+ add r0, r0, #1
+ str r0, [r5, #40] ;@ 0x28
+ ldr r0, [r5, #40] ;@ 0x28
+ bl FUN_037FE968
+ ldr r1, [r5, #40] ;@ 0x28
+ add r1, r1, #1
+ str r1, [r5, #40] ;@ 0x28
+ orr r0, r4, r0, lsl #8
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FE968
+FUN_037FE968: ;@ 0x037FE968
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r0, _037FE9B0 ;@ =_03807F50
+ ldr r1, [r0]
+ cmp r4, r1
+ bcc _037FE98C
+ ldr r0, [r0, #4]
+ cmp r4, r0
+ bcc _037FE994
+_037FE98C:
+ mov r0, r4
+ bl FUN_037FE9B8
+_037FE994:
+ ldr r0, _037FE9B0 ;@ =_03807F50
+ ldr r0, [r0]
+ sub r1, r4, r0
+ ldr r0, _037FE9B4 ;@ =_03807F58
+ ldrb r0, [r0, r1]
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FE9B0: .word _03807F50
+_037FE9B4: .word _03807F58
+
+ arm_func_start FUN_037FE9B8
+FUN_037FE9B8: ;@ 0x037FE9B8
+ bic r2, r0, #3
+ ldr r0, _037FE9F0 ;@ =_03807F50
+ str r2, [r0]
+ add r1, r2, #16
+ str r1, [r0, #4]
+ ldr r1, [r2]
+ str r1, [r0, #8]
+ ldr r1, [r2, #4]
+ str r1, [r0, #12]
+ ldr r1, [r2, #8]
+ str r1, [r0, #16]
+ ldr r1, [r2, #12]
+ str r1, [r0, #20]
+ bx lr
+_037FE9F0: .word _03807F50
+
+ arm_func_start FUN_037FE9F4
+FUN_037FE9F4: ;@ 0x037FE9F4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r1
+ mov r9, r2
+ mov r8, r3
+ ldr r7, [sp, #40] ;@ 0x28
+ ldr r2, _037FEA94 ;@ =_038084AC
+ mov r1, #36 ;@ 0x24
+ mla fp, r0, r1, r2
+ mov r6, #0
+ mov r0, r8, lsl #16
+ mov r4, r0, lsr #16
+ and r5, r8, #255 ;@ 0xff
+ b _037FEA78
+_037FEA2C:
+ ands r0, sl, #1
+ beq _037FEA70
+ mov r0, fp
+ mov r1, r6
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FEA70
+ cmp r7, #1
+ beq _037FEA64
+ cmp r7, #2
+ beq _037FEA6C
+ cmp r7, #4
+ streq r8, [r0, r9]
+ b _037FEA70
+_037FEA64:
+ strb r5, [r0, r9]
+ b _037FEA70
+_037FEA6C:
+ strh r4, [r0, r9]
+_037FEA70:
+ add r6, r6, #1
+ mov sl, sl, lsr #1
+_037FEA78:
+ cmp r6, #16
+ bge _037FEA88
+ cmp sl, #0
+ bne _037FEA2C
+_037FEA88:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FEA94: .word _038084AC
+
+ arm_func_start FUN_037FEA98
+FUN_037FEA98: ;@ 0x037FEA98
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr lr, _037FEAE0 ;@ =_038084AC
+ mov ip, #36 ;@ 0x24
+ mla ip, r0, ip, lr
+ cmp r3, #1
+ beq _037FEAC8
+ cmp r3, #2
+ beq _037FEAD0
+ cmp r3, #4
+ streq r2, [ip, r1]
+ b _037FEAD4
+_037FEAC8:
+ strb r2, [ip, r1]
+ b _037FEAD4
+_037FEAD0:
+ strh r2, [ip, r1]
+_037FEAD4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FEAE0: .word _038084AC
+
+ arm_func_start FUN_037FEAE4
+FUN_037FEAE4: ;@ 0x037FEAE4
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r6, r1
+ mov r5, #0
+ ldr r4, _037FEB40 ;@ =_038084AC
+ mov r8, #36 ;@ 0x24
+_037FEAFC:
+ mul r1, r5, r8
+ add r0, r4, r1
+ ldrb r1, [r4, r1]
+ mov r1, r1, lsl #31
+ movs r1, r1, lsr #31
+ beq _037FEB2C
+ ldr r1, [r0, #32]
+ cmp r7, r1
+ bhi _037FEB2C
+ cmp r1, r6
+ bhi _037FEB2C
+ bl FUN_037FE3AC
+_037FEB2C:
+ add r5, r5, #1
+ cmp r5, #16
+ blt _037FEAFC
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FEB40: .word _038084AC
+
+ arm_func_start FUN_037FEB44
+FUN_037FEB44: ;@ 0x037FEB44
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r7, #0
+ mov r5, r7
+ ldr fp, _037FEBDC ;@ =_038084AC
+ mov r4, #36 ;@ 0x24
+_037FEB64:
+ mul r0, r7, r4
+ add r8, fp, r0
+ ldrb r0, [fp, r0]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FEBC4
+ mov r6, r5
+ b _037FEBBC
+_037FEB84:
+ mov r0, r8
+ mov r1, r6
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FEBB8
+ ldr r0, [r0, #40] ;@ 0x28
+ cmp sl, r0
+ bhi _037FEBB8
+ cmp r0, r9
+ bhi _037FEBB8
+ mov r0, r8
+ bl FUN_037FE3AC
+ b _037FEBC4
+_037FEBB8:
+ add r6, r6, #1
+_037FEBBC:
+ cmp r6, #16
+ blt _037FEB84
+_037FEBC4:
+ add r7, r7, #1
+ cmp r7, #16
+ blt _037FEB64
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_037FEBDC: .word _038084AC
+
+ arm_func_start FUN_037FEBE0
+FUN_037FEBE0: ;@ 0x037FEBE0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r6, r1
+ ldr r3, _037FEC54 ;@ =_038084AC
+ mov r1, #36 ;@ 0x24
+ mla r5, r0, r1, r3
+ mov r4, #0
+ mov r0, r2, lsl #16
+ mov r7, r0, lsr #16
+ b _037FEC38
+_037FEC08:
+ ands r0, r6, #1
+ beq _037FEC30
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FE460
+ cmp r0, #0
+ strneh r7, [r0, #30]
+ ldrneb r1, [r0]
+ orrne r1, r1, #128 ;@ 0x80
+ strneb r1, [r0]
+_037FEC30:
+ add r4, r4, #1
+ mov r6, r6, lsr #1
+_037FEC38:
+ cmp r4, #16
+ bge _037FEC48
+ cmp r6, #0
+ bne _037FEC08
+_037FEC48:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FEC54: .word _038084AC
+
+ arm_func_start FUN_037FEC58
+FUN_037FEC58: ;@ 0x037FEC58
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r1
+ mov r6, r2
+ ldr r2, _037FECC8 ;@ =_038084AC
+ mov r1, #36 ;@ 0x24
+ mla r5, r0, r1, r2
+ mov r4, #0
+ b _037FECAC
+_037FEC7C:
+ ands r0, r7, #1
+ beq _037FECA4
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FE460
+ cmp r0, #0
+ beq _037FECA4
+ mov r1, r5
+ mov r2, r6
+ bl FUN_037FD440
+_037FECA4:
+ add r4, r4, #1
+ mov r7, r7, lsr #1
+_037FECAC:
+ cmp r4, #16
+ bge _037FECBC
+ cmp r7, #0
+ bne _037FEC7C
+_037FECBC:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FECC8: .word _038084AC
+
+ arm_func_start FUN_037FECCC
+FUN_037FECCC: ;@ 0x037FECCC
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r6, r1
+ ldr r2, _037FED90 ;@ =_038084AC
+ mov r1, #36 ;@ 0x24
+ mla r5, r0, r1, r2
+ mov r8, #0
+ mov r4, #127 ;@ 0x7f
+_037FECE8:
+ mov r0, r5
+ mov r1, r8
+ bl FUN_037FE460
+ movs r7, r0
+ beq _037FED10
+ mov r1, r5
+ mov r2, r4
+ bl FUN_037FE588
+ mov r0, r7
+ bl FUN_037FE54C
+_037FED10:
+ add r8, r8, #1
+ cmp r8, #16
+ blt _037FECE8
+ bl FUN_037FC39C
+ mov r4, #0
+ mov r7, r4
+ b _037FED50
+_037FED2C:
+ mov r0, r5
+ mov r1, r7
+ bl FUN_037FD548
+ cmp r0, #0
+ beq _037FED4C
+ mov r0, r5
+ bl FUN_037FE3AC
+ b _037FED58
+_037FED4C:
+ add r4, r4, #1
+_037FED50:
+ cmp r4, r6
+ bcc _037FED2C
+_037FED58:
+ bl FUN_037FC3B0
+ ldr r0, _037FED94 ;@ =_03807F68
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037FED88
+ add r3, r0, #64 ;@ 0x40
+ ldrb r1, [r5, #1]
+ mov r0, #36 ;@ 0x24
+ mul r2, r1, r0
+ ldr r0, [r3, r2]
+ add r0, r0, r4
+ str r0, [r3, r2]
+_037FED88:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FED90: .word _038084AC
+_037FED94: .word _03807F68
+
+ arm_func_start FUN_037FED98
+FUN_037FED98: ;@ 0x037FED98
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r5, _037FEE18 ;@ =_038084AC
+ mov r2, #36 ;@ 0x24
+ mul r3, r0, r2
+ add r4, r5, r3
+ ldrb r0, [r5, r3]
+ bic r2, r0, #4
+ and r0, r1, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r2, r0, lsl #2
+ strb r0, [r5, r3]
+ cmp r1, #0
+ beq _037FEE0C
+ mov r7, #0
+ mov r5, #127 ;@ 0x7f
+_037FEDD8:
+ mov r0, r4
+ mov r1, r7
+ bl FUN_037FE460
+ movs r6, r0
+ beq _037FEE00
+ mov r1, r4
+ mov r2, r5
+ bl FUN_037FE588
+ mov r0, r6
+ bl FUN_037FE54C
+_037FEE00:
+ add r7, r7, #1
+ cmp r7, #16
+ blt _037FEDD8
+_037FEE0C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FEE18: .word _038084AC
+
+ arm_func_start FUN_037FEE1C
+FUN_037FEE1C: ;@ 0x037FEE1C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r2, _037FEE70 ;@ =_038084AC
+ mov r0, #36 ;@ 0x24
+ mul r1, r4, r0
+ add r0, r2, r1
+ ldrb r1, [r2, r1]
+ mov r1, r1, lsl #31
+ movs r1, r1, lsr #31
+ beq _037FEE68
+ bl FUN_037FE3AC
+ ldr r0, _037FEE74 ;@ =_03807F68
+ ldr r2, [r0]
+ cmp r2, #0
+ ldrne r1, [r2, #4]
+ movne r0, #1
+ mvnne r0, r0, lsl r4
+ andne r0, r1, r0
+ strne r0, [r2, #4]
+_037FEE68:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FEE70: .word _038084AC
+_037FEE74: .word _03807F68
+
+ arm_func_start FUN_037FEE78
+FUN_037FEE78: ;@ 0x037FEE78
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ bl FUN_037FEEB4
+ mov r0, r4
+ bl FUN_037FEE94
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_037FEE94
+FUN_037FEE94: ;@ 0x037FEE94
+ ldr r2, _037FEEB0 ;@ =_038084AC
+ mov r1, #36 ;@ 0x24
+ mul r1, r0, r1
+ ldrb r0, [r2, r1]
+ orr r0, r0, #2
+ strb r0, [r2, r1]
+ bx lr
+_037FEEB0: .word _038084AC
+
+ arm_func_start FUN_037FEEB4
+FUN_037FEEB4: ;@ 0x037FEEB4
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ mov r8, r1
+ mov r6, r2
+ mov r5, r3
+ ldr r1, _037FEFFC ;@ =_038084AC
+ mov r0, #36 ;@ 0x24
+ mul r0, r4, r0
+ add r7, r1, r0
+ ldrb r0, [r1, r0]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FEEF4
+ mov r0, r7
+ bl FUN_037FE3AC
+_037FEEF4:
+ mov r0, r7
+ mov r1, r5
+ bl FUN_037FE5F8
+ bl FUN_037FD4C0
+ movs r9, r0
+ bmi _037FEFF0
+ ldr r0, _037FF000 ;@ =_038086EC
+ add r5, r0, r9, lsl #6
+ mov r0, r5
+ bl FUN_037FE6BC
+ mov r0, r5
+ mov r1, r8
+ mov r2, r6
+ bl FUN_037FE6A8
+ strb r9, [r7, #8]
+ ldr r0, [r5, #40] ;@ 0x28
+ bl FUN_037FE9B8
+ ldr r0, [r5, #40] ;@ 0x28
+ bl FUN_037FE968
+ add r2, r5, #40 ;@ 0x28
+ ldr r1, [r5, #40] ;@ 0x28
+ add r1, r1, #1
+ str r1, [r5, #40] ;@ 0x28
+ cmp r0, #254 ;@ 0xfe
+ ldrne r0, [r2]
+ subne r0, r0, #1
+ strne r0, [r2]
+ bne _037FEFB8
+ mov r0, r5
+ bl FUN_037FE918
+ mov r0, r0, lsl #15
+ mov r5, r0, lsr #16
+ mov r6, #1
+ ldr r8, _037FF000 ;@ =_038086EC
+ b _037FEFB0
+_037FEF80:
+ ands r0, r5, #1
+ beq _037FEFA4
+ bl FUN_037FD4C0
+ movs r9, r0
+ bmi _037FEFB8
+ add r0, r8, r9, lsl #6
+ bl FUN_037FE6BC
+ add r0, r7, r6
+ strb r9, [r0, #8]
+_037FEFA4:
+ add r6, r6, #1
+ mov r0, r5, lsl #15
+ mov r5, r0, lsr #16
+_037FEFB0:
+ cmp r5, #0
+ bne _037FEF80
+_037FEFB8:
+ ldrb r0, [r7]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strb r0, [r7]
+ ldrb r0, [r7]
+ bic r0, r0, #2
+ strb r0, [r7]
+ ldr r0, _037FF004 ;@ =_03807F68
+ ldr r2, [r0]
+ cmp r2, #0
+ ldrne r1, [r2, #4]
+ movne r0, #1
+ orrne r0, r1, r0, lsl r4
+ strne r0, [r2, #4]
+_037FEFF0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FEFFC: .word _038084AC
+_037FF000: .word _038086EC
+_037FF004: .word _03807F68
+
+ arm_func_start FUN_037FF008
+FUN_037FF008: ;@ 0x037FF008
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ mov r8, r0
+ mov r5, #0
+ mov r6, r5
+ mov sl, #1
+ ldr r4, _037FF0A0 ;@ =_038084AC
+ mov r9, #36 ;@ 0x24
+_037FF024:
+ mul r0, r6, r9
+ add r7, r4, r0
+ ldrb r1, [r4, r0]
+ mov r0, r1, lsl #31
+ movs r0, r0, lsr #31
+ beq _037FF07C
+ mov r0, r1, lsl #30
+ movs r0, r0, lsr #31
+ beq _037FF06C
+ cmp r8, #0
+ beq _037FF064
+ mov r0, r1, lsl #29
+ movs r0, r0, lsr #31
+ bne _037FF064
+ mov r0, r7
+ bl FUN_037FE48C
+_037FF064:
+ mov r0, r7
+ bl FUN_037FE1A0
+_037FF06C:
+ ldrb r0, [r7]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ orrne r5, r5, sl, lsl r6
+_037FF07C:
+ add r6, r6, #1
+ cmp r6, #16
+ blt _037FF024
+ ldr r0, _037FF0A4 ;@ =_03807F68
+ ldr r0, [r0]
+ cmp r0, #0
+ strne r5, [r0, #4]
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_037FF0A0: .word _038084AC
+_037FF0A4: .word _03807F68
+
+ arm_func_start FUN_037FF0A8
+FUN_037FF0A8: ;@ 0x037FF0A8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov lr, #0
+ ldr r3, _037FF10C ;@ =_038084AC
+ mov r0, #36 ;@ 0x24
+_037FF0BC:
+ mul r2, lr, r0
+ add ip, r3, r2
+ ldrb r1, [r3, r2]
+ bic r1, r1, #1
+ strb r1, [r3, r2]
+ strb lr, [ip, #1]
+ add lr, lr, #1
+ cmp lr, #16
+ blt _037FF0BC
+ mov r2, #0
+ ldr r1, _037FF110 ;@ =_038086EC
+_037FF0E8:
+ ldrb r0, [r1, r2, lsl #6]
+ bic r0, r0, #1
+ strb r0, [r1, r2, lsl #6]
+ add r2, r2, #1
+ cmp r2, #32
+ blt _037FF0E8
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FF10C: .word _038084AC
+_037FF110: .word _038086EC
+
+ arm_func_start FUN_037FF114
+FUN_037FF114: ;@ 0x037FF114
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, r0, r1, lsl #3
+ ldr r0, [r0, #24]
+ cmp r0, #0
+ moveq r0, #0
+ beq _037FF148
+ ldr r1, [r0, #56] ;@ 0x38
+ cmp r2, r1
+ movcs r0, #0
+ bcs _037FF148
+ mov r1, r2
+ bl FUN_037FF27C
+_037FF148:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_037FF154
+FUN_037FF154: ;@ 0x037FF154
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r9, r0
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ ldr r5, [sp, #36] ;@ 0x24
+ ldrb r4, [r5, #10]
+ cmp r4, #255 ;@ 0xff
+ mvneq r6, #0
+ moveq r4, #0
+ ldrb r0, [r5]
+ cmp r0, #4
+ addls pc, pc, r0, lsl #2
+ b _037FF210
+ b _037FF210
+ b _037FF1A4
+ b _037FF1EC
+ b _037FF200
+ b _037FF1A4
+_037FF1A4:
+ cmp r0, #1
+ ldrneh r1, [r5, #4]
+ ldrneh r0, [r5, #2]
+ orrne r1, r0, r1, lsl #16
+ bne _037FF1CC
+ ldr r0, [sp, #32]
+ ldrh r1, [r5, #4]
+ ldrh r2, [r5, #2]
+ bl FUN_037FF114
+ mov r1, r0
+_037FF1CC:
+ cmp r1, #0
+ moveq r0, #0
+ beq _037FF214
+ mov r0, r9
+ add r2, r1, #12
+ mov r3, r6
+ bl FUN_037FCEA0
+ b _037FF214
+_037FF1EC:
+ mov r0, r9
+ ldrh r1, [r5, #2]
+ mov r2, r6
+ bl FUN_037FCE4C
+ b _037FF214
+_037FF200:
+ mov r0, r9
+ mov r1, r6
+ bl FUN_037FCE00
+ b _037FF214
+_037FF210:
+ mov r0, #0
+_037FF214:
+ cmp r0, #0
+ moveq r0, #0
+ beq _037FF270
+ strb r8, [r9, #8]
+ ldrb r0, [r5, #6]
+ strb r0, [r9, #5]
+ strb r7, [r9, #9]
+ mov r0, r9
+ ldrb r1, [r5, #7]
+ bl FUN_037FCD28
+ mov r0, r9
+ ldrb r1, [r5, #8]
+ bl FUN_037FCD0C
+ mov r0, r9
+ ldrb r1, [r5, #9]
+ bl FUN_037FCD04
+ mov r0, r9
+ mov r1, r4
+ bl FUN_037FCCE8
+ ldrb r0, [r5, #11]
+ sub r0, r0, #64 ;@ 0x40
+ strb r0, [r9, #10]
+ mov r0, #1
+_037FF270:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+
+ arm_func_start FUN_037FF27C
+FUN_037FF27C: ;@ 0x037FF27C
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_037FC350
+ add r0, r5, r4, lsl #2
+ ldr r4, [r0, #60] ;@ 0x3c
+ cmp r4, #0
+ beq _037FF2AC
+ cmp r4, #33554432 ;@ 0x2000000
+ addcc r4, r5, r4
+ b _037FF2B0
+_037FF2AC:
+ mov r4, #0
+_037FF2B0:
+ bl FUN_037FC34C
+ mov r0, r4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_037FF2C4
+FUN_037FF2C4: ;@ 0x037FF2C4
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r6, r0
+ movs r7, r1
+ mov r5, r2
+ mov r4, r3
+ movmi r0, #0
+ bmi _037FF43C
+ bl FUN_037FC350
+ ldr r0, [r6, #56] ;@ 0x38
+ cmp r7, r0
+ bcc _037FF300
+ bl FUN_037FC34C
+ mov r0, #0
+ b _037FF43C
+_037FF300:
+ add r0, r6, r7, lsl #2
+ ldr r3, [r0, #60] ;@ 0x3c
+ strb r3, [r4]
+ ldrb r0, [r4]
+ cmp r0, #17
+ addls pc, pc, r0, lsl #2
+ b _037FF428
+ b _037FF428
+ b _037FF364
+ b _037FF364
+ b _037FF364
+ b _037FF364
+ b _037FF364
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF428
+ b _037FF384
+ b _037FF3D4
+_037FF364:
+ add r3, r6, r3, lsr #8
+ add r2, r4, #2
+ mov r1, #5
+_037FF370:
+ ldrh r0, [r3], #2
+ strh r0, [r2], #2
+ subs r1, r1, #1
+ bne _037FF370
+ b _037FF434
+_037FF384:
+ add r2, r6, r3, lsr #8
+ ldrb r1, [r2, #1]
+ ldrb r0, [r6, r3, lsr #8]
+ cmp r5, r0
+ blt _037FF3A0
+ cmp r5, r1
+ ble _037FF3AC
+_037FF3A0:
+ bl FUN_037FC34C
+ mov r0, #0
+ b _037FF43C
+_037FF3AC:
+ sub r1, r5, r0
+ mov r0, #12
+ mla r0, r1, r0, r2
+ add r2, r0, #2
+ mov r1, #6
+_037FF3C0:
+ ldrh r0, [r2], #2
+ strh r0, [r4], #2
+ subs r1, r1, #1
+ bne _037FF3C0
+ b _037FF434
+_037FF3D4:
+ mov r2, #0
+ add r1, r6, r3, lsr #8
+ b _037FF3F8
+_037FF3E0:
+ add r2, r2, #1
+ cmp r2, #8
+ blt _037FF3F8
+ bl FUN_037FC34C
+ mov r0, #0
+ b _037FF43C
+_037FF3F8:
+ ldrb r0, [r1, r2]
+ cmp r5, r0
+ bgt _037FF3E0
+ mov r0, #12
+ mla r0, r2, r0, r1
+ add r2, r0, #8
+ mov r1, #6
+_037FF414:
+ ldrh r0, [r2], #2
+ strh r0, [r4], #2
+ subs r1, r1, #1
+ bne _037FF414
+ b _037FF434
+_037FF428:
+ bl FUN_037FC34C
+ mov r0, #0
+ b _037FF43C
+_037FF434:
+ bl FUN_037FC34C
+ mov r0, #1
+_037FF43C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_037FF448
+FUN_037FF448: ;@ 0x037FF448
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r5, #0
+ mov r4, r5
+ ldr r0, _037FF4E4 ;@ =_03807F68
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _037FF4D8
+ mov r7, r5
+ mov r6, #1
+_037FF470:
+ mov r0, r7
+ bl FUN_037FBCC0
+ cmp r0, #0
+ orrne r0, r5, r6, lsl r7
+ movne r0, r0, lsl #16
+ movne r5, r0, lsr #16
+ add r7, r7, #1
+ cmp r7, #16
+ blt _037FF470
+ mov r0, #0
+ bl FUN_037FC4C0
+ cmp r0, #0
+ orrne r0, r4, #1
+ movne r0, r0, lsl #16
+ movne r4, r0, lsr #16
+ mov r0, #1
+ bl FUN_037FC4C0
+ cmp r0, #0
+ orrne r0, r4, #2
+ movne r0, r0, lsl #16
+ movne r4, r0, lsr #16
+ ldr r0, _037FF4E4 ;@ =_03807F68
+ ldr r1, [r0]
+ strh r5, [r1, #8]
+ ldr r0, [r0]
+ strh r4, [r0, #10]
+_037FF4D8:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FF4E4: .word _03807F68
+
+ arm_func_start FUN_037FF4E8
+FUN_037FF4E8: ;@ 0x037FF4E8
+ ldr r2, _037FF500 ;@ =_03807F68
+ ldr r2, [r2]
+ add r0, r2, r0, lsl #1
+ add r0, r0, #512 ;@ 0x200
+ strh r1, [r0, #96] ;@ 0x60
+ bx lr
+_037FF500: .word _03807F68
+
+ arm_func_start FUN_037FF504
+FUN_037FF504: ;@ 0x037FF504
+ ldr r3, _037FF520 ;@ =_03807F68
+ ldr ip, [r3]
+ mov r3, #36 ;@ 0x24
+ mla r3, r0, r3, ip
+ add r0, r3, r1, lsl #1
+ strh r2, [r0, #32]
+ bx lr
+_037FF520: .word _03807F68
+
+ arm_func_start FUN_037FF524
+FUN_037FF524: ;@ 0x037FF524
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #7
+ mov r4, #0
+_037FF534:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _037FF534
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FF554
+FUN_037FF554: ;@ 0x037FF554
+ stmdb sp!, {r4, lr}
+ ldr r1, _037FF590 ;@ =_03808EEC
+ add r4, r1, r0, lsl #6
+ ldrb r0, [r1, r0, lsl #6]
+ cmp r0, #0
+ beq _037FF588
+ add r0, r4, #20
+ bl FUN_037FA650
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ mov r0, #0
+ strb r0, [r4]
+_037FF588:
+ ldmia sp!, {r4, lr}
+ bx lr
+_037FF590: .word _03808EEC
+
+ arm_func_start FUN_037FF594
+FUN_037FF594: ;@ 0x037FF594
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #12
+ mov r4, r0
+ ldr r0, _037FF654 ;@ =_03808EEC
+ add r5, r0, r4, lsl #6
+ ldrb r0, [r0, r4, lsl #6]
+ cmp r0, #0
+ beq _037FF5C4
+ add r0, r5, #20
+ bl FUN_037FA650
+ mov r0, #0
+ strb r0, [r5]
+_037FF5C4:
+ ldr r9, [r5, #4]
+ ldr r8, [r5, #8]
+ ldr r7, [r5, #12]
+ ldr r6, [r5, #16]
+ ldrb r0, [r5, #1]
+ orr r4, r4, r0, lsl #8
+ add r0, r5, #20
+ bl FUN_037FA900
+ mov r0, #0
+ cmp r6, r0
+ cmpeq r7, r0
+ bne _037FF610
+ str r4, [sp]
+ add r0, r5, #20
+ mov r1, r9
+ mov r2, r8
+ ldr r3, _037FF658 ;@ =FUN_037FF524
+ bl FUN_037FA75C
+ b _037FF640
+_037FF610:
+ bl FUN_037FA364
+ mov r2, r0
+ ldr r0, _037FF658 ;@ =FUN_037FF524
+ str r0, [sp, #4]
+ str r4, [sp, #8]
+ mov r3, r7
+ str r6, [sp]
+ add r0, r5, #20
+ adds r4, r9, r2
+ adc r2, r8, r1
+ mov r1, r4
+ bl FUN_037FA6E0
+_037FF640:
+ mov r0, #1
+ strb r0, [r5]
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FF654: .word _03808EEC
+_037FF658: .word FUN_037FF524
+
+ arm_func_start FUN_037FF65C
+FUN_037FF65C: ;@ 0x037FF65C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r1
+ mov r7, r2
+ mov r6, r3
+ ldr r5, [sp, #24]
+ ldr r1, _037FF6B4 ;@ =_03808EEC
+ add r4, r1, r0, lsl #6
+ ldrb r0, [r1, r0, lsl #6]
+ cmp r0, #0
+ beq _037FF694
+ add r0, r4, #20
+ bl FUN_037FA650
+ mov r0, #0
+ strb r0, [r4]
+_037FF694:
+ str r8, [r4, #4]
+ str r7, [r4, #8]
+ str r6, [r4, #12]
+ str r5, [r4, #16]
+ ldr r0, [sp, #28]
+ strb r0, [r4, #1]
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_037FF6B4: .word _03808EEC
+
+ arm_func_start FUN_037FF6B8
+FUN_037FF6B8: ;@ 0x037FF6B8
+ mov r3, #0
+ mov r2, r3
+ ldr r1, _037FF6E0 ;@ =_03807F6C
+_037FF6C4:
+ add r0, r1, r3, lsl #6
+ strb r2, [r0, #3968] ;@ 0xf80
+ strb r2, [r0, #3969] ;@ 0xf81
+ add r3, r3, #1
+ cmp r3, #8
+ blt _037FF6C4
+ bx lr
+_037FF6E0: .word _03807F6C
+
+ arm_func_start FUN_037FF6E4
+FUN_037FF6E4: ;@ 0x037FF6E4
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r0, _037FF74C ;@ =_03807F6C
+ mov r1, r5
+ mov r2, #4480 ;@ 0x1180
+ bl FUN_037FB348
+ ldr r1, _037FF74C ;@ =_03807F6C
+ add r0, r5, #4096 ;@ 0x1000
+ str r1, [r0, #448] ;@ 0x1c0
+ mov r4, #0
+_037FF710:
+ mov r0, r4
+ bl FUN_037FBC4C
+ add r1, r5, r4, lsl #2
+ add r1, r1, #4096 ;@ 0x1000
+ str r0, [r1, #384] ;@ 0x180
+ add r4, r4, #1
+ cmp r4, #16
+ blt _037FF710
+ mov r0, #0
+ bl FUN_037FC964
+ add r1, r5, #4096 ;@ 0x1000
+ str r0, [r1, #452] ;@ 0x1c4
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FF74C: .word _03807F6C
+
+ arm_func_start FUN_037FF750
+FUN_037FF750: ;@ 0x037FF750
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r9, r2
+ mov r5, r3
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r8, #0
+ b _037FF790
+_037FF778:
+ ands r0, r9, #1
+ beq _037FF788
+ mov r0, r8
+ bl FUN_037FF554
+_037FF788:
+ add r8, r8, #1
+ mov r9, r9, lsr #1
+_037FF790:
+ cmp r8, #8
+ bge _037FF7A0
+ cmp r9, #0
+ bne _037FF778
+_037FF7A0:
+ mov r8, #0
+ b _037FF7C4
+_037FF7A8:
+ ands r0, r7, #1
+ beq _037FF7BC
+ mov r0, r8
+ mov r1, r5
+ bl FUN_037FBDF4
+_037FF7BC:
+ add r8, r8, #1
+ mov r7, r7, lsr #1
+_037FF7C4:
+ cmp r8, #16
+ bge _037FF7D4
+ cmp r7, #0
+ bne _037FF7A8
+_037FF7D4:
+ ands r0, r6, #1
+ movne r1, #0
+ ldrne r0, _037FF80C ;@ =0x04000508
+ strneb r1, [r0]
+ ands r0, r6, #2
+ movne r1, #0
+ ldrne r0, _037FF810 ;@ =0x04000509
+ strneb r1, [r0]
+ mov r0, r4
+ bl FUN_037FB070
+ bl FUN_037FF448
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FF80C: .word 0x04000508
+_037FF810: .word 0x04000509
+
+ arm_func_start FUN_037FF814
+FUN_037FF814: ;@ 0x037FF814
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r2, #0
+ b _037FF858
+_037FF838:
+ ands r0, r7, #1
+ movne r0, r2, lsl #4
+ addne r0, r0, #67108864 ;@ 0x4000000
+ ldrneb r1, [r0, #1027] ;@ 0x403
+ orrne r1, r1, #128 ;@ 0x80
+ strneb r1, [r0, #1027] ;@ 0x403
+ add r2, r2, #1
+ mov r7, r7, lsr #1
+_037FF858:
+ cmp r2, #16
+ bge _037FF868
+ cmp r7, #0
+ bne _037FF838
+_037FF868:
+ ands r0, r6, #1
+ beq _037FF8A0
+ ands r0, r6, #2
+ ldreq r1, _037FF8FC ;@ =0x04000508
+ ldreqb r0, [r1]
+ orreq r0, r0, #128 ;@ 0x80
+ streqb r0, [r1]
+ beq _037FF8B4
+ ldr r2, _037FF8FC ;@ =0x04000508
+ ldrh r1, [r2]
+ ldr r0, _037FF900 ;@ =0x00008080
+ orr r0, r1, r0
+ strh r0, [r2]
+ b _037FF8B4
+_037FF8A0:
+ ands r0, r6, #2
+ ldrne r1, _037FF904 ;@ =0x04000509
+ ldrneb r0, [r1]
+ orrne r0, r0, #128 ;@ 0x80
+ strneb r0, [r1]
+_037FF8B4:
+ mov r6, #0
+ b _037FF8D4
+_037FF8BC:
+ ands r0, r5, #1
+ beq _037FF8CC
+ mov r0, r6
+ bl FUN_037FF594
+_037FF8CC:
+ add r6, r6, #1
+ mov r5, r5, lsr #1
+_037FF8D4:
+ cmp r6, #8
+ bge _037FF8E4
+ cmp r5, #0
+ bne _037FF8BC
+_037FF8E4:
+ mov r0, r4
+ bl FUN_037FB070
+ bl FUN_037FF448
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FF8FC: .word 0x04000508
+_037FF900: .word 0x00008080
+_037FF904: .word 0x04000509
+
+ arm_func_start FUN_037FF908
+FUN_037FF908: ;@ 0x037FF908
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, #0
+ b _037FF938
+_037FF91C:
+ ands r0, r6, #1
+ beq _037FF930
+ mov r0, r4
+ mov r1, r5
+ bl FUN_037FBCDC
+_037FF930:
+ add r4, r4, #1
+ mov r6, r6, lsr #1
+_037FF938:
+ cmp r4, #16
+ bge _037FF948
+ cmp r6, #0
+ bne _037FF91C
+_037FF948:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FF950
+FUN_037FF950: ;@ 0x037FF950
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, #0
+ b _037FF98C
+_037FF96C:
+ ands r0, r7, #1
+ beq _037FF984
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ bl FUN_037FBD70
+_037FF984:
+ add r4, r4, #1
+ mov r7, r7, lsr #1
+_037FF98C:
+ cmp r4, #16
+ bge _037FF99C
+ cmp r7, #0
+ bne _037FF96C
+_037FF99C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_037FF9A8
+FUN_037FF9A8: ;@ 0x037FF9A8
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, #0
+ b _037FF9D8
+_037FF9BC:
+ ands r0, r6, #1
+ beq _037FF9D0
+ mov r0, r4
+ mov r1, r5
+ bl FUN_037FBD58
+_037FF9D0:
+ add r4, r4, #1
+ mov r6, r6, lsr #1
+_037FF9D8:
+ cmp r4, #16
+ bge _037FF9E8
+ cmp r6, #0
+ bne _037FF9BC
+_037FF9E8:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_037FF9F0
+FUN_037FF9F0: ;@ 0x037FF9F0
+ mov r0, #7
+ ldr r1, _037FFA00 ;@ =FUN_037FFA08
+ ldr ip, _037FFA04 ;@ =FUN_037FB7A8
+ bx ip
+_037FFA00: .word FUN_037FFA08
+_037FFA04: .word FUN_037FB7A8
+
+ arm_func_start FUN_037FFA08
+FUN_037FFA08: ;@ 0x037FFA08
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r1
+ bl FUN_037FB05C
+ mov r4, r0
+ cmp r5, #33554432 ;@ 0x2000000
+ bcc _037FFA38
+ ldr r0, _037FFA58 ;@ =_038090EC
+ mov r1, r5
+ mov r2, #0
+ bl FUN_037F9924
+ b _037FFA44
+_037FFA38:
+ cmp r5, #0
+ bne _037FFA44
+ bl FUN_037FC354
+_037FFA44:
+ mov r0, r4
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_037FFA58: .word _038090EC
+
+ arm_func_start FUN_037FFA5C
+FUN_037FFA5C: ;@ 0x037FFA5C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #52 ;@ 0x34
+ ldr r7, _037FFEC4 ;@ =_03807F68
+ ldr r9, _037FFEC8 ;@ =_038090EC
+ add r8, sp, #24
+ mov r4, #0
+ ldr r6, _037FFECC ;@ =0x0000FFFF
+ ldr r5, _037FFED0 ;@ =0x003FFFFF
+ b _037FFEA0
+_037FFA80:
+ ldr lr, [sp, #24]
+ b _037FFE88
+_037FFA88:
+ add ip, sp, #28
+ ldmia lr!, {r0, r1, r2, r3}
+ stmia ip!, {r0, r1, r2, r3}
+ ldmia lr, {r0, r1}
+ stmia ip, {r0, r1}
+ ldr r0, [sp, #32]
+ cmp r0, #33 ;@ 0x21
+ addls pc, pc, r0, lsl #2
+ b _037FFE84
+ b _037FFB34
+ b _037FFB4C
+ b _037FFB58
+ b _037FFB70
+ b _037FFB7C
+ b _037FFB8C
+ b _037FFB9C
+ b _037FFBB4
+ b _037FFBDC
+ b _037FFBF0
+ b _037FFC04
+ b _037FFC20
+ b _037FFC38
+ b _037FFC50
+ b _037FFD08
+ b _037FFD74
+ b _037FFDA8
+ b _037FFC68
+ b _037FFCB0
+ b _037FFCD4
+ b _037FFCE4
+ b _037FFCF8
+ b _037FFDD4
+ b _037FFDE0
+ b _037FFDEC
+ b _037FFDF8
+ b _037FFE10
+ b _037FFE20
+ b _037FFE30
+ b _037FFE70
+ b _037FFE40
+ b _037FFE50
+ b _037FFE60
+ b _037FFE7C
+_037FFB34:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FEE78
+ b _037FFE84
+_037FFB4C:
+ ldr r0, [sp, #36] ;@ 0x24
+ bl FUN_037FEE1C
+ b _037FFE84
+_037FFB58:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FEEB4
+ b _037FFE84
+_037FFB70:
+ ldr r0, [sp, #36] ;@ 0x24
+ bl FUN_037FEE94
+ b _037FFE84
+_037FFB7C:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FED98
+ b _037FFE84
+_037FFB8C:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FECCC
+ b _037FFE84
+_037FFB9C:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FEA98
+ b _037FFE84
+_037FFBB4:
+ ldr r1, [sp, #36] ;@ 0x24
+ mov r0, r1, lsr #24
+ and r0, r0, #255 ;@ 0xff
+ str r0, [sp]
+ bic r0, r1, #-16777216 ;@ 0xff000000
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FE9F4
+ b _037FFE84
+_037FFBDC:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ bl FUN_037FEC58
+ b _037FFE84
+_037FFBF0:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ bl FUN_037FEBE0
+ b _037FFE84
+_037FFC04:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ mov r2, r2, lsl #16
+ mov r2, r2, asr #16
+ bl FUN_037FF504
+ b _037FFE84
+_037FFC20:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ mov r1, r1, lsl #16
+ mov r1, r1, asr #16
+ bl FUN_037FF4E8
+ b _037FFE84
+_037FFC38:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FF814
+ b _037FFE84
+_037FFC50:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FF750
+ b _037FFE84
+_037FFC68:
+ ldr r1, [sp, #44] ;@ 0x2c
+ mov r0, r1, lsr #29
+ and r0, r0, #1
+ str r0, [sp]
+ mov r0, r1, lsr #28
+ and r0, r0, #1
+ str r0, [sp, #4]
+ mov r0, r1, lsr #27
+ and r0, r0, #1
+ str r0, [sp, #8]
+ mov r0, r1, lsr #31
+ and r0, r0, #1
+ mov r1, r1, lsr #30
+ and r1, r1, #1
+ ldr r2, [sp, #36] ;@ 0x24
+ ldr r3, [sp, #40] ;@ 0x28
+ bl FUN_037FC4D8
+ b _037FFE84
+_037FFCB0:
+ ldr r0, [sp, #48] ;@ 0x30
+ str r0, [sp, #4]
+ ldr r3, [sp, #44] ;@ 0x2c
+ str r4, [sp]
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ mov r2, #0
+ bl FUN_037FF65C
+ b _037FFE84
+_037FFCD4:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FF9A8
+ b _037FFE84
+_037FFCE4:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ bl FUN_037FF950
+ b _037FFE84
+_037FFCF8:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FF908
+ b _037FFE84
+_037FFD08:
+ ldr r3, [sp, #48] ;@ 0x30
+ ldr r1, [sp, #36] ;@ 0x24
+ ldr r0, [sp, #44] ;@ 0x2c
+ and r2, r3, r6
+ str r2, [sp]
+ and r2, r0, r5
+ str r2, [sp, #4]
+ mov r2, r0, lsr #24
+ and r2, r2, #127 ;@ 0x7f
+ str r2, [sp, #8]
+ mov r0, r0, lsr #22
+ and r0, r0, #3
+ str r0, [sp, #12]
+ and r0, r6, r1, lsr #16
+ str r0, [sp, #16]
+ mov r0, r3, lsr #16
+ and r0, r0, #127 ;@ 0x7f
+ str r0, [sp, #20]
+ and r0, r1, r6
+ ldr r1, [sp, #40] ;@ 0x28
+ bic r1, r1, #-134217728 ;@ 0xf8000000
+ mov r2, r3, lsr #24
+ and r2, r2, #3
+ mov r3, r3, lsr #26
+ and r3, r3, #3
+ bl FUN_037FBF88
+ b _037FFE84
+_037FFD74:
+ ldr r1, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #40] ;@ 0x28
+ and r0, r6, r1, lsr #8
+ str r0, [sp]
+ and r0, r1, #127 ;@ 0x7f
+ str r0, [sp, #4]
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #48] ;@ 0x30
+ and r2, r3, #127 ;@ 0x7f
+ mov r3, r3, lsr #8
+ and r3, r3, #3
+ bl FUN_037FBED0
+ b _037FFE84
+_037FFDA8:
+ ldr r3, [sp, #44] ;@ 0x2c
+ ldr r2, [sp, #40] ;@ 0x28
+ and r0, r3, #127 ;@ 0x7f
+ str r0, [sp]
+ ldr r0, [sp, #36] ;@ 0x24
+ and r1, r2, #127 ;@ 0x7f
+ mov r2, r2, lsr #8
+ and r2, r2, #3
+ and r3, r6, r3, lsr #8
+ bl FUN_037FBE20
+ b _037FFE84
+_037FFDD4:
+ ldr r0, [sp, #36] ;@ 0x24
+ bl FUN_037FBBE8
+ b _037FFE84
+_037FFDE0:
+ ldr r0, [sp, #36] ;@ 0x24
+ bl FUN_037FBA44
+ b _037FFE84
+_037FFDEC:
+ ldr r0, [sp, #36] ;@ 0x24
+ bl FUN_037FBC5C
+ b _037FFE84
+_037FFDF8:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ ldr r2, [sp, #44] ;@ 0x2c
+ ldr r3, [sp, #48] ;@ 0x30
+ bl FUN_037FBA0C
+ b _037FFE84
+_037FFE10:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FC9C0
+ b _037FFE84
+_037FFE20:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FC984
+ b _037FFE84
+_037FFE30:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FCAB8
+ b _037FFE84
+_037FFE40:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FEB44
+ b _037FFE84
+_037FFE50:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FEAE4
+ b _037FFE84
+_037FFE60:
+ ldr r0, [sp, #36] ;@ 0x24
+ ldr r1, [sp, #40] ;@ 0x28
+ bl FUN_037FC8DC
+ b _037FFE84
+_037FFE70:
+ ldr r0, [sp, #36] ;@ 0x24
+ str r0, [r7]
+ b _037FFE84
+_037FFE7C:
+ ldr r0, [sp, #36] ;@ 0x24
+ bl FUN_037FF6E4
+_037FFE84:
+ ldr lr, [sp, #28]
+_037FFE88:
+ cmp lr, #0
+ bne _037FFA88
+ ldr r1, [r7]
+ ldr r0, [r1]
+ add r0, r0, #1
+ str r0, [r1]
+_037FFEA0:
+ mov r0, r9
+ mov r1, r8
+ mov r2, r4
+ bl FUN_037F9884
+ cmp r0, #0
+ bne _037FFA80
+ add sp, sp, #52 ;@ 0x34
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_037FFEC4: .word _03807F68
+_037FFEC8: .word _038090EC
+_037FFECC: .word 0x0000FFFF
+_037FFED0: .word 0x003FFFFF
+
+ arm_func_start FUN_037FFED4
+FUN_037FFED4: ;@ 0x037FFED4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _037FFF08 ;@ =_038090EC
+ ldr r1, _037FFF0C ;@ =_0380910C
+ mov r2, #8
+ bl FUN_037F99B8
+ bl FUN_037FF9F0
+ mov r1, #0
+ ldr r0, _037FFF10 ;@ =_03807F68
+ str r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_037FFF08: .word _038090EC
+_037FFF0C: .word _0380910C
+_037FFF10: .word _03807F68
+
+ arm_func_start FUN_037FFF14
+FUN_037FFF14: ;@ 0x037FFF14
+ ldr ip, _037FFF1C ;@ =FUN_038008D0
+ bx ip
+_037FFF1C: .word FUN_038008D0
+
+ arm_func_start FUN_037FFF20
+FUN_037FFF20: ;@ 0x037FFF20
+ ldr r0, _037FFF28 ;@ =0x027FFA80
+ bx lr
+_037FFF28: .word 0x027FFA80
+
+ arm_func_start FUN_037FFF2C
+FUN_037FFF2C: ;@ 0x037FFF2C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ ldr r6, _037FFF70 ;@ =_03809140
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r5, [r6, #240] ;@ 0xf0
+ str r7, [r6, #240] ;@ 0xf0
+ add r0, r6, #72 ;@ 0x48
+ ldr r1, [r6, #240] ;@ 0xf0
+ bl FUN_037F8EB8
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, r5
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_037FFF70: .word _03809140
+
+ arm_func_start FUN_037FFF74
+FUN_037FFF74: ;@ 0x037FFF74
+ ldr r1, _037FFF80 ;@ =_0380912C
+ str r0, [r1]
+ bx lr
+_037FFF80: .word _0380912C
+
+ arm_func_start FUN_037FFF84
+FUN_037FFF84: ;@ 0x037FFF84
+ stmfd sp!, {lr}
+ sub sp, sp, #12
+ mvn r1, #2
+ ldr r0, _0380001C ;@ =_03809140
+ str r1, [r0, #12]
+ mov r2, #0
+ str r2, [r0, #16]
+ str r2, [r0, #28]
+ str r2, [r0]
+ str r2, [r0, #8]
+ str r2, [r0, #24]
+ str r2, [r0, #20]
+ str r2, [r0, #248] ;@ 0xf8
+ str r2, [r0, #244] ;@ 0xf4
+ mov r1, #4
+ str r1, [r0, #240] ;@ 0xf0
+ mov r1, #1024 ;@ 0x400
+ str r1, [sp]
+ ldr r0, [r0, #240] ;@ 0xf0
+ str r0, [sp, #4]
+ ldr r0, _03800020 ;@ =_03809188
+ ldr r1, _03800024 ;@ =FUN_03800B20
+ ldr r3, _03800028 ;@ =_03809760
+ bl FUN_037F9244
+ ldr r0, _03800020 ;@ =_03809188
+ bl FUN_037F8FB4
+ mov r0, #11
+ ldr r1, _0380002C ;@ =FUN_03800D2C
+ bl FUN_037FB7A8
+ ldr r0, _03800030 ;@ =0x027FFC40
+ ldrh r0, [r0]
+_03800000:
+ cmp r0, #2
+ beq _03800010
+ mov r0, #1
+ bl FUN_037FFF74
+_03800010:
+ add sp, sp, #12
+ ldmia sp!, {lr}
+ bx lr
+_0380001C: .word _03809140
+_03800020: .word _03809188
+_03800024: .word FUN_03800B20
+_03800028: .word _03809760
+_0380002C: .word FUN_03800D2C
+_03800030: .word 0x027FFC40
+
+ arm_func_start FUN_03800034
+FUN_03800034: ;@ 0x03800034
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ bl FUN_03800780
+ cmp r0, #0
+ beq _038000BC
+ ldr r0, _038000C8 ;@ =_03809140
+ ldr sl, [r0]
+ mov r9, #10
+ mov r0, #1
+ strb r0, [sp]
+ strb r4, [sp, #1]
+ mov r8, #2
+ add r7, sp, #0
+ mov r6, #0
+ ldr r5, _038000CC ;@ =_03800660
+ mov r4, #5
+_03800078:
+ bl FUN_038005B4
+ mov r0, r8
+ bl FUN_038008B4
+ mov r0, r7
+ mov r1, r6
+ mov r2, r8
+ mov r3, r5
+ bl FUN_038006F0
+ mov r0, r4
+ mov r1, r6
+ bl FUN_03800830
+ ldr r0, [sl]
+ cmp r0, #4
+ bne _038000BC
+ sub r9, r9, #1
+ cmp r9, #0
+ bgt _03800078
+_038000BC:
+ add sp, sp, #8
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_038000C8: .word _03809140
+_038000CC: .word _03800660
+
+ arm_func_start FUN_038000D0
+FUN_038000D0: ;@ 0x038000D0
+ stmdb sp!, {r4, lr}
+ bl FUN_03800780
+ cmp r0, #0
+ beq _03800114
+ ldr r0, _0380011C ;@ =_03809140
+ ldr r4, [r0]
+ bl FUN_038005B4
+ mov r0, #1
+ bl FUN_038008B4
+ ldr r0, _03800120 ;@ =_038072BC
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _03800124 ;@ =_03800660
+ bl FUN_038006F0
+ ldr r0, [r4, #52] ;@ 0x34
+ ldr r1, [r4, #56] ;@ 0x38
+ bl FUN_03800830
+_03800114:
+ ldmia sp!, {r4, lr}
+ bx lr
+_0380011C: .word _03809140
+_03800120: .word _038072BC
+_03800124: .word _03800660
+
+ arm_func_start FUN_03800128
+FUN_03800128: ;@ 0x03800128
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r6, r1
+ ldr r0, _038001B8 ;@ =_03809140
+ ldr r5, [r0]
+ ldr r4, [r5, #28]
+ sub r1, r4, #1
+ orr r0, r7, r6
+ ands r0, r1, r0
+ movne r0, #2
+ strne r0, [r5]
+ bne _038001B0
+ bl FUN_03800780
+ cmp r0, #0
+ beq _038001B0
+ mov r8, #216 ;@ 0xd8
+ b _038001A8
+_0380016C:
+ bl FUN_038005B4
+ ldr r0, [r5, #36] ;@ 0x24
+ add r0, r0, #1
+ bl FUN_038008B4
+ mov r0, r7
+ mov r1, r8
+ bl FUN_03800508
+ ldr r0, [r5, #60] ;@ 0x3c
+ ldr r1, [r5, #64] ;@ 0x40
+ bl FUN_03800830
+ ldr r0, [r5]
+ cmp r0, #0
+ bne _038001B0
+ add r7, r7, r4
+ sub r6, r6, r4
+_038001A8:
+ cmp r6, #0
+ bne _0380016C
+_038001B0:
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_038001B8: .word _03809140
+
+ arm_func_start FUN_038001BC
+FUN_038001BC: ;@ 0x038001BC
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ bl FUN_03800780
+ cmp r0, #0
+ beq _0380024C
+ ldr r0, _03800258 ;@ =_03809140
+ ldr r4, [r0]
+ mov r1, #1
+ ldr r0, _0380025C ;@ =_03809764
+ str r1, [r0, #12]
+ ldr r0, [r4, #36] ;@ 0x24
+ add r0, r0, #1
+ add r0, r0, r5
+ bl FUN_038008B4
+ mov r0, r7
+ mov r1, #3
+ bl FUN_03800508
+ mov r0, r6
+ mov r1, #0
+ mov r2, r5
+ ldr r3, _03800260 ;@ =_038005F8
+ bl FUN_038006F0
+ mov r0, #0
+ mov r1, r0
+ bl FUN_03800830
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _0380024C
+ ldr r0, _0380025C ;@ =_03809764
+ ldr r0, [r0, #12]
+ cmp r0, #0
+ moveq r0, #1
+ streq r0, [r4]
+_0380024C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03800258: .word _03809140
+_0380025C: .word _03809764
+_03800260: .word _038005F8
+
+ arm_func_start FUN_03800264
+FUN_03800264: ;@ 0x03800264
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r8, r2
+ bl FUN_03800780
+ cmp r0, #0
+ beq _03800314
+ ldr r0, _03800320 ;@ =_03809140
+ ldr r7, [r0]
+ ldr r6, [r7, #32]
+ sub r4, r6, #1
+ mov fp, #10
+ mov r0, #0
+ str r0, [sp]
+ b _0380030C
+_038002A4:
+ and r0, sl, r4
+ sub r5, r6, r0
+ cmp r5, r8
+ movhi r5, r8
+ bl FUN_038005B4
+ ldr r0, [r7, #36] ;@ 0x24
+ add r0, r0, #1
+ add r0, r0, r5
+ bl FUN_038008B4
+ mov r0, sl
+ mov r1, fp
+ bl FUN_03800508
+ mov r0, r9
+ ldr r1, [sp]
+ mov r2, r5
+ ldr r3, _03800324 ;@ =_03800660
+ bl FUN_038006F0
+ ldr r0, [r7, #44] ;@ 0x2c
+ ldr r1, [r7, #48] ;@ 0x30
+ bl FUN_03800830
+ ldr r0, [r7]
+ cmp r0, #0
+ bne _03800314
+ add r9, r9, r5
+ add sl, sl, r5
+ sub r8, r8, r5
+_0380030C:
+ cmp r8, #0
+ bne _038002A4
+_03800314:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_03800320: .word _03809140
+_03800324: .word _03800660
+
+ arm_func_start FUN_03800328
+FUN_03800328: ;@ 0x03800328
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ mov sl, r0
+ mov r9, r1
+ mov r8, r2
+ bl FUN_03800780
+ cmp r0, #0
+ beq _038003D8
+ ldr r0, _038003E4 ;@ =_03809140
+ ldr r7, [r0]
+ ldr r6, [r7, #32]
+ sub r4, r6, #1
+ mov r0, #2
+ str r0, [sp]
+ mov fp, #0
+ b _038003D0
+_03800368:
+ and r0, sl, r4
+ sub r5, r6, r0
+ cmp r5, r8
+ movhi r5, r8
+ bl FUN_038005B4
+ ldr r0, [r7, #36] ;@ 0x24
+ add r0, r0, #1
+ add r0, r0, r5
+ bl FUN_038008B4
+ mov r0, sl
+ ldr r1, [sp]
+ bl FUN_03800508
+ mov r0, r9
+ mov r1, fp
+ mov r2, r5
+ ldr r3, _038003E8 ;@ =_03800660
+ bl FUN_038006F0
+ ldr r0, [r7, #40] ;@ 0x28
+ mov r1, fp
+ bl FUN_03800830
+ ldr r0, [r7]
+ cmp r0, #0
+ bne _038003D8
+ add r9, r9, r5
+ add sl, sl, r5
+ sub r8, r8, r5
+_038003D0:
+ cmp r8, #0
+ bne _03800368
+_038003D8:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_038003E4: .word _03809140
+_038003E8: .word _03800660
+
+ arm_func_start FUN_038003EC
+FUN_038003EC: ;@ 0x038003EC
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, r1
+ mov r4, r2
+ bl FUN_03800780
+ cmp r0, #0
+ beq _0380044C
+ ldr r0, _03800454 ;@ =_03809140
+ ldr r0, [r0]
+ ldr r0, [r0, #36] ;@ 0x24
+ add r0, r0, #1
+ add r0, r0, r4
+ bl FUN_038008B4
+ mov r0, r6
+ mov r1, #3
+ bl FUN_03800508
+ mov r0, #0
+ mov r1, r5
+ mov r2, r4
+ ldr r3, _03800458 ;@ =_038006AC
+ bl FUN_038006F0
+ mov r0, #0
+ mov r1, r0
+ bl FUN_03800830
+_0380044C:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_03800454: .word _03809140
+_03800458: .word _038006AC
+
+ arm_func_start FUN_0380045C
+FUN_0380045C: ;@ 0x0380045C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ldr r0, _038004F8 ;@ =_03809140
+ ldr r0, [r0]
+ ldrb r4, [r0, #72] ;@ 0x48
+ cmp r4, #255 ;@ 0xff
+ beq _038004EC
+ ldr r0, _038004FC ;@ =_03809760
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _038004EC
+ mov r0, #5
+ strb r0, [sp]
+ mov r0, #2
+ bl FUN_038008B4
+ add r0, sp, #0
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _03800500 ;@ =_03800660
+ bl FUN_038006F0
+ mov r0, #0
+ add r1, sp, #1
+ mov r2, #1
+ ldr r3, _03800504 ;@ =_038006AC
+ bl FUN_038006F0
+ mov r0, #0
+ mov r1, r0
+ bl FUN_03800830
+ ldrb r0, [sp, #1]
+ cmp r0, r4
+ beq _038004E0
+ mov r0, r4
+ bl FUN_03800034
+_038004E0:
+ mov r1, #1
+ ldr r0, _038004FC ;@ =_03809760
+ str r1, [r0]
+_038004EC:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_038004F8: .word _03809140
+_038004FC: .word _03809760
+_03800500: .word _03800660
+_03800504: .word _038006AC
+
+ arm_func_start FUN_03800508
+FUN_03800508: ;@ 0x03800508
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _038005AC ;@ =_03809140
+ ldr r2, [r2]
+ ldr r2, [r2, #36] ;@ 0x24
+ cmp r2, #1
+ beq _03800538
+ cmp r2, #2
+ beq _03800554
+ cmp r2, #3
+ beq _0380056C
+ b _0380058C
+_03800538:
+ and r3, r0, #255 ;@ 0xff
+ mov r0, r0, lsr #5
+ and r0, r0, #8
+ orr r0, r1, r0
+ orr r0, r0, r3, lsl #8
+ str r0, [sp]
+ b _0380058C
+_03800554:
+ and r3, r0, #255 ;@ 0xff
+ and r0, r0, #65280 ;@ 0xff00
+ orr r0, r1, r0
+ orr r0, r0, r3, lsl #16
+ str r0, [sp]
+ b _0380058C
+_0380056C:
+ and ip, r0, #255 ;@ 0xff
+ and r3, r0, #65280 ;@ 0xff00
+ mov r0, r0, lsr #8
+ and r0, r0, #65280 ;@ 0xff00
+ orr r0, r1, r0
+ orr r0, r0, r3, lsl #8
+ orr r0, r0, ip, lsl #24
+ str r0, [sp]
+_0380058C:
+ add r0, sp, #0
+ mov r1, #0
+ add r2, r2, #1
+ ldr r3, _038005B0 ;@ =_03800660
+ bl FUN_038006F0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038005AC: .word _03809140
+_038005B0: .word _03800660
+
+ arm_func_start FUN_038005B4
+FUN_038005B4: ;@ 0x038005B4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #1
+ bl FUN_038008B4
+ ldr r0, _038005F0 ;@ =_038072C0
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _038005F4 ;@ =_03800660
+ bl FUN_038006F0
+ mov r0, #0
+ mov r1, r0
+ bl FUN_03800830
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038005F0: .word _038072C0
+_038005F4: .word _03800660
+_038005F8:
+ mov r2, #0
+ ldr r1, _03800658 ;@ =0x040001A2
+ strh r2, [r1]
+ ldr r2, _0380065C ;@ =0x040001A0
+_03800608:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03800608
+ ldr r1, _03800658 ;@ =0x040001A2
+ ldrh r1, [r1]
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, [r0, #4]
+ ldrb r1, [r1]
+ cmp r2, r1
+ beq _03800648
+ mov r1, #0
+ str r1, [r0, #12]
+ ldr r1, [r0]
+ cmp r1, #1
+ movhi r1, #1
+ strhi r1, [r0]
+_03800648:
+ ldr r1, [r0, #4]
+ add r1, r1, #1
+ str r1, [r0, #4]
+ bx lr
+_03800658: .word 0x040001A2
+_0380065C: .word 0x040001A0
+_03800660:
+ sub sp, sp, #8
+ ldr r1, [r0, #4]
+ ldrb r2, [r1]
+ ldr r1, _038006A4 ;@ =0x040001A2
+ strh r2, [r1]
+ ldr r1, [r0, #4]
+ add r1, r1, #1
+ str r1, [r0, #4]
+ ldr r1, _038006A8 ;@ =0x040001A0
+_03800684:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03800684
+ ldr r0, _038006A4 ;@ =0x040001A2
+ ldrh r0, [r0]
+ strh r0, [sp]
+ add sp, sp, #8
+ bx lr
+_038006A4: .word 0x040001A2
+_038006A8: .word 0x040001A0
+_038006AC:
+ mov r2, #0
+ ldr r1, _038006E8 ;@ =0x040001A2
+ strh r2, [r1]
+ ldr r2, _038006EC ;@ =0x040001A0
+_038006BC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038006BC
+ ldr r1, _038006E8 ;@ =0x040001A2
+ ldrh r2, [r1]
+ ldr r1, [r0, #8]
+ strb r2, [r1]
+ ldr r1, [r0, #8]
+ add r1, r1, #1
+ str r1, [r0, #8]
+ bx lr
+_038006E8: .word 0x040001A2
+_038006EC: .word 0x040001A0
+
+ arm_func_start FUN_038006F0
+FUN_038006F0: ;@ 0x038006F0
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r2
+ mov r6, r3
+ ldr r5, _03800774 ;@ =_03809764
+ str r0, [r5, #4]
+ str r1, [r5, #8]
+ ldr r0, _03800778 ;@ =0x0000A040
+ ldr r4, _0380077C ;@ =0x040001A0
+ strh r0, [r4]
+ mov r8, #40960 ;@ 0xa000
+ b _03800750
+_0380071C:
+ ldr r0, [r5]
+ sub r0, r0, #1
+ str r0, [r5]
+ ldr r0, [r5]
+ cmp r0, #0
+ streqh r8, [r4]
+_03800734:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03800734
+ mov r0, r5
+ mov lr, pc
+ bx r6
+ sub r7, r7, #1
+_03800750:
+ cmp r7, #0
+ bne _0380071C
+ ldr r0, [r5]
+ cmp r0, #0
+ moveq r1, #0
+ ldreq r0, _0380077C ;@ =0x040001A0
+ streqh r1, [r0]
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03800774: .word _03809764
+_03800778: .word 0x0000A040
+_0380077C: .word 0x040001A0
+
+ arm_func_start FUN_03800780
+FUN_03800780: ;@ 0x03800780
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ mov r1, #50 ;@ 0x32
+ bl FUN_03800830
+ ldr r0, _038007C0 ;@ =_03809140
+ ldr r1, [r0]
+ ldr r0, [r1]
+ cmp r0, #4
+ moveq r0, #6
+ streq r0, [r1]
+ moveq r0, #0
+ movne r0, #1
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038007C0: .word _03809140
+
+ arm_func_start FUN_038007C4
+FUN_038007C4: ;@ 0x038007C4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #2
+ bl FUN_038008B4
+ ldr r0, _03800824 ;@ =_038072C4
+ mov r1, #0
+ mov r2, #1
+ ldr r3, _03800828 ;@ =_03800660
+ bl FUN_038006F0
+ mov r0, #0
+ add r1, sp, #0
+ mov r2, #1
+ ldr r3, _0380082C ;@ =_038006AC
+ bl FUN_038006F0
+ mov r0, #0
+ mov r1, r0
+ bl FUN_03800830
+ ldrb r0, [sp]
+ ands r0, r0, #1
+ moveq r0, #1
+ movne r0, #0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800824: .word _038072C4
+_03800828: .word _03800660
+_0380082C: .word _038006AC
+
+ arm_func_start FUN_03800830
+FUN_03800830: ;@ 0x03800830
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r5, r0
+ mov r4, r1
+ adds r1, r5, r4
+ beq _038008A8
+ cmp r5, #0
+ beq _03800850
+ bl FUN_037F8E14
+_03800850:
+ cmp r4, #0
+ beq _03800890
+ sub r6, r4, r5
+ mov r4, #5
+ b _0380087C
+_03800864:
+ cmp r6, #5
+ movlt r5, r6
+ movge r5, r4
+ mov r0, r5
+ bl FUN_037F8E14
+ sub r6, r6, r5
+_0380087C:
+ bl FUN_038007C4
+ cmp r0, #0
+ bne _03800890
+ cmp r6, #0
+ bgt _03800864
+_03800890:
+ bl FUN_038007C4
+ cmp r0, #0
+ moveq r1, #4
+ ldreq r0, _038008B0 ;@ =_03809140
+ ldreq r0, [r0]
+ streq r1, [r0]
+_038008A8:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_038008B0: .word _03809140
+
+ arm_func_start FUN_038008B4
+FUN_038008B4: ;@ 0x038008B4
+ ldr r1, _038008C0 ;@ =_03809764
+ str r0, [r1]
+ bx lr
+_038008C0: .word _03809764
+
+ arm_func_start FUN_038008C4
+FUN_038008C4: ;@ 0x038008C4
+ ldr r0, _038008CC ;@ =_03800A7C
+ bx lr
+_038008CC: .word _03800A7C
+
+ arm_func_start FUN_038008D0
+FUN_038008D0: ;@ 0x038008D0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _03800940 ;@ =_03809140
+ ldr r0, [r2, #252] ;@ 0xfc
+ cmp r0, #0
+ bne _03800934
+ mov r0, #1
+ str r0, [r2, #252] ;@ 0xfc
+ mov r1, #0
+ str r1, [r2, #40] ;@ 0x28
+ ldr r0, [r2, #40] ;@ 0x28
+ str r0, [r2, #36] ;@ 0x24
+ ldr r0, [r2, #36] ;@ 0x24
+ str r0, [r2, #32]
+ mvn r0, #0
+ str r0, [r2, #44] ;@ 0x2c
+ str r1, [r2, #60] ;@ 0x3c
+ str r1, [r2, #64] ;@ 0x40
+ ldr r0, _03800944 ;@ =_03809774
+ str r1, [r0]
+ bl FUN_037FFF84
+ bl FUN_038008C4
+ ldr r1, _03800948 ;@ =_03809780
+ str r0, [r1]
+ bl FUN_03801074
+_03800934:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800940: .word _03809140
+_03800944: .word _03809774
+_03800948: .word _03809780
+
+ arm_func_start FUN_0380094C
+FUN_0380094C: ;@ 0x0380094C
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ ldr r5, _03800A10 ;@ =_03809140
+ bl FUN_037FB05C
+ mov r4, r0
+ add r6, r5, #244 ;@ 0xf4
+ b _0380096C
+_03800964:
+ mov r0, r6
+ bl FUN_037F9064
+_0380096C:
+ ldr r0, [r5, #252] ;@ 0xfc
+ ands r0, r0, #4
+ bne _03800964
+ ldr r0, [r5, #252] ;@ 0xfc
+ orr r0, r0, #4
+ str r0, [r5, #252] ;@ 0xfc
+ mov r0, #0
+ str r0, [r5, #60] ;@ 0x3c
+ str r0, [r5, #64] ;@ 0x40
+ mov r0, r4
+ bl FUN_037FB070
+ bl FUN_03800A14
+ mov r8, r0
+ ldr r7, _03800A10 ;@ =_03809140
+ mov r1, #0
+ ldr r0, [r7]
+ str r1, [r0]
+ ldr r6, [r7, #60] ;@ 0x3c
+ ldr r5, [r7, #64] ;@ 0x40
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, [r7, #252] ;@ 0xfc
+ bic r0, r0, #76 ;@ 0x4c
+ str r0, [r7, #252] ;@ 0xfc
+ add r0, r7, #244 ;@ 0xf4
+ bl FUN_037F8FE8
+ ldr r0, [r7, #252] ;@ 0xfc
+ ands r0, r0, #16
+ beq _038009E8
+ add r0, r7, #72 ;@ 0x48
+ bl FUN_037F8FB4
+_038009E8:
+ mov r0, r4
+ bl FUN_037FB070
+ cmp r6, #0
+ beq _03800A04
+ mov r0, r5
+ mov lr, pc
+ bx r6
+_03800A04:
+ mov r0, r8
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03800A10: .word _03809140
+
+ arm_func_start FUN_03800A14
+FUN_03800A14: ;@ 0x03800A14
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #-1207959552 ;@ 0xb8000000
+ mov r1, #0
+ bl FUN_03800A80
+ ldr r0, _03800A70 ;@ =_03807664
+ ldr r0, [r0]
+ ldr r0, [r0, #96] ;@ 0x60
+ bic r0, r0, #117440512 ;@ 0x7000000
+ orr r1, r0, #-1493172224 ;@ 0xa7000000
+ mov r0, #8192 ;@ 0x2000
+ rsb r0, r0, #0
+ and r0, r1, r0
+ ldr r1, _03800A74 ;@ =0x040001A4
+ str r0, [r1]
+_03800A50:
+ ldr r0, [r1]
+ ands r0, r0, #8388608 ;@ 0x800000
+ beq _03800A50
+ ldr r0, _03800A78 ;@ =0x04100010
+ ldr r0, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800A70: .word _03807664
+_03800A74: .word 0x040001A4
+_03800A78: .word 0x04100010
+_03800A7C:
+ bx lr
+
+ arm_func_start FUN_03800A80
+FUN_03800A80: ;@ 0x03800A80
+ ldr r3, _03800AF8 ;@ =0x040001A4
+_03800A84:
+ ldr r2, [r3]
+ ands r2, r2, #-2147483648 ;@ 0x80000000
+ bne _03800A84
+ mov r3, #192 ;@ 0xc0
+ ldr r2, _03800AFC ;@ =0x040001A1
+ strb r3, [r2]
+ mov r3, r0, lsr #24
+ ldr r2, _03800B00 ;@ =0x040001A8
+ strb r3, [r2]
+ mov r3, r0, lsr #16
+ ldr r2, _03800B04 ;@ =0x040001A9
+ strb r3, [r2]
+ mov r3, r0, lsr #8
+ ldr r2, _03800B08 ;@ =0x040001AA
+ strb r3, [r2]
+ ldr r2, _03800B0C ;@ =0x040001AB
+ strb r0, [r2]
+ mov r2, r1, lsr #24
+ ldr r0, _03800B10 ;@ =0x040001AC
+ strb r2, [r0]
+ mov r2, r1, lsr #16
+ ldr r0, _03800B14 ;@ =0x040001AD
+ strb r2, [r0]
+ mov r2, r1, lsr #8
+ ldr r0, _03800B18 ;@ =0x040001AE
+ strb r2, [r0]
+ ldr r0, _03800B1C ;@ =0x040001AF
+ strb r1, [r0]
+ bx lr
+_03800AF8: .word 0x040001A4
+_03800AFC: .word 0x040001A1
+_03800B00: .word 0x040001A8
+_03800B04: .word 0x040001A9
+_03800B08: .word 0x040001AA
+_03800B0C: .word 0x040001AB
+_03800B10: .word 0x040001AC
+_03800B14: .word 0x040001AD
+_03800B18: .word 0x040001AE
+_03800B1C: .word 0x040001AF
+
+ arm_func_start FUN_03800B20
+FUN_03800B20: ;@ 0x03800B20
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r9, _03800D28 ;@ =_03809140
+ add r5, r9, #72 ;@ 0x48
+ mov r8, #0
+ add r7, r9, #252 ;@ 0xfc
+ mov r6, #1
+ mov r4, #3
+ mov fp, #11
+_03800B44:
+ mov sl, r8
+ bl FUN_037FB05C
+ str r0, [sp]
+_03800B50:
+ ldr r0, [r9, #252] ;@ 0xfc
+ ands r0, r0, #4
+ bne _03800B88
+ ldr r0, [r9, #252] ;@ 0xfc
+ ands r0, r0, #16
+ beq _03800B94
+ ldr r0, [r7]
+ orr r0, r0, #4
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #16
+ str r0, [r7]
+ mov sl, r6
+ b _03800BA4
+_03800B88:
+ ldr r0, [r9, #252] ;@ 0xfc
+ ands r0, r0, #8
+ bne _03800BA4
+_03800B94:
+ str r5, [r9, #236] ;@ 0xec
+ mov r0, r8
+ bl FUN_037F9064
+ b _03800B50
+_03800BA4:
+ ldr r0, [sp]
+ bl FUN_037FB070
+ cmp sl, #0
+ beq _03800D14
+ ldr r0, [r9]
+ str r8, [r0]
+ ldr r2, [r9]
+ ldr r1, [r2, #76] ;@ 0x4c
+ ldr r0, [r9, #4]
+ mov r0, r6, lsl r0
+ ands r0, r1, r0
+ streq r4, [r2]
+ ldr r0, [r9, #4]
+ cmp r0, #12
+ addls pc, pc, r0, lsl #2
+ b _03800CB8
+ b _03800CC0
+ b _03800CC0
+ b _03800C18
+ b _03800C20
+ b _03800C30
+ b _03800CB8
+ b _03800C3C
+ b _03800C54
+ b _03800C6C
+ b _03800C84
+ b _03800CB8
+ b _03800C9C
+ b _03800CB0
+_03800C18:
+ bl FUN_0380045C
+ b _03800CC0
+_03800C20:
+ bl FUN_03800A14
+ ldr r1, [r9]
+ str r0, [r1, #8]
+ b _03800CC0
+_03800C30:
+ ldr r0, [r9]
+ str r4, [r0]
+ b _03800CC0
+_03800C3C:
+ ldr r2, [r9]
+ ldr r0, [r2, #12]
+ ldr r1, [r2, #16]
+ ldr r2, [r2, #20]
+ bl FUN_038003EC
+ b _03800CC0
+_03800C54:
+ ldr r2, [r9]
+ ldr r0, [r2, #16]
+ ldr r1, [r2, #12]
+ ldr r2, [r2, #20]
+ bl FUN_03800264
+ b _03800CC0
+_03800C6C:
+ ldr r2, [r9]
+ ldr r0, [r2, #16]
+ ldr r1, [r2, #12]
+ ldr r2, [r2, #20]
+ bl FUN_03800328
+ b _03800CC0
+_03800C84:
+ ldr r2, [r9]
+ ldr r0, [r2, #16]
+ ldr r1, [r2, #12]
+ ldr r2, [r2, #20]
+ bl FUN_038001BC
+ b _03800CC0
+_03800C9C:
+ ldr r1, [r9]
+ ldr r0, [r1, #16]
+ ldr r1, [r1, #20]
+ bl FUN_03800128
+ b _03800CC0
+_03800CB0:
+ bl FUN_038000D0
+ b _03800CC0
+_03800CB8:
+ ldr r0, [r9]
+ str r4, [r0]
+_03800CC0:
+ mov r0, fp
+ mov r1, r6
+ mov r2, r6
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _03800CC0
+ bl FUN_037FB05C
+ mov sl, r0
+ ldr r0, [r9, #252] ;@ 0xfc
+ bic r0, r0, #76 ;@ 0x4c
+ str r0, [r9, #252] ;@ 0xfc
+ add r0, r9, #244 ;@ 0xf4
+ bl FUN_037F8FE8
+ ldr r0, [r9, #252] ;@ 0xfc
+ ands r0, r0, #16
+ beq _03800D08
+ mov r0, r5
+ bl FUN_037F8FB4
+_03800D08:
+ mov r0, sl
+ bl FUN_037FB070
+ b _03800B44
+_03800D14:
+ mov r0, r9
+ ldr r1, [r9, #68] ;@ 0x44
+ mov lr, pc
+ bx r1
+ b _03800B44
+_03800D28: .word _03809140
+
+ arm_func_start FUN_03800D2C
+FUN_03800D2C: ;@ 0x03800D2C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r0, #11
+ bne _03800DFC
+ cmp r2, #0
+ beq _03800DFC
+ ldr r0, _03800E08 ;@ =_03809140
+ ldr r2, [r0, #8]
+ cmp r2, #0
+ streq r1, [r0, #4]
+ ldr r2, [r0, #4]
+ cmp r2, #12
+ addls pc, pc, r2, lsl #2
+ b _03800DC8
+ b _03800D98
+ b _03800DC8
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+ b _03800DBC
+_03800D98:
+ ldr r2, [r0, #8]
+ cmp r2, #0
+ beq _03800DC8
+ cmp r2, #1
+ streq r1, [r0]
+ ldreq r1, [r0, #252] ;@ 0xfc
+ orreq r1, r1, #16
+ streq r1, [r0, #252] ;@ 0xfc
+ b _03800DC8
+_03800DBC:
+ ldr r1, [r0, #252] ;@ 0xfc
+ orr r1, r1, #16
+ str r1, [r0, #252] ;@ 0xfc
+_03800DC8:
+ ldr r1, [r0, #252] ;@ 0xfc
+ ands r1, r1, #16
+ ldreq r1, [r0, #8]
+ addeq r1, r1, #1
+ streq r1, [r0, #8]
+ beq _03800DFC
+ mov r1, #0
+ str r1, [r0, #8]
+ ldr r1, [r0, #252] ;@ 0xfc
+ ands r1, r1, #4
+ ldrne r0, [r0, #236] ;@ 0xec
+ addeq r0, r0, #72 ;@ 0x48
+ bl FUN_037F8FB4
+_03800DFC:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800E08: .word _03809140
+
+ arm_func_start FUN_03800E0C
+FUN_03800E0C: ;@ 0x03800E0C
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, #14
+ mov r4, #0
+ b _03800E30
+_03800E28:
+ mov r0, r6
+ bl FUN_037F8CB4
+_03800E30:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ bne _03800E28
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_03800E54
+FUN_03800E54: ;@ 0x03800E54
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ bl FUN_03803E5C
+ bl FUN_037FBAA8
+ bl FUN_03806A98
+ bl FUN_037FB1F0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_03800E7C
+FUN_03800E7C: ;@ 0x03800E7C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03800F50 ;@ =_038099A0
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03800F44
+ ldr r0, _03800F54 ;@ =0x027FFC40
+ ldrh r0, [r0]
+ cmp r0, #2
+ beq _03800F44
+ ldr r1, _03800F58 ;@ =_03807668
+ ldr r3, [r1]
+ mvn r0, #0
+ cmp r3, r0
+ ldreq r0, _03800F5C ;@ =0x027FFC3C
+ ldreq r0, [r0]
+ addeq r0, r0, #10
+ streq r0, [r1]
+ beq _03800F44
+ ldr r2, _03800F5C ;@ =0x027FFC3C
+ ldr r0, [r2]
+ cmp r0, r3
+ bcc _03800F44
+ ldr r0, [r2]
+ add r0, r0, #10
+ str r0, [r1]
+ bl FUN_03800FF8
+ cmp r0, #0
+ beq _03800F1C
+ mov r1, #1
+ ldr r0, _03800F50 ;@ =_038099A0
+ str r1, [r0]
+ bl FUN_037FFF20
+ ldr r0, [r0, #12]
+ cmp r0, #0
+ bne _03800F1C
+ ldr r0, _03800F60 ;@ =_0380766C
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03800F44
+_03800F1C:
+ mov r1, #0
+ ldr r0, _03800F60 ;@ =_0380766C
+ str r1, [r0]
+ ldr r0, _03800F50 ;@ =_038099A0
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _03800F44
+ mov r0, #17
+ mov r1, #100 ;@ 0x64
+ bl FUN_03800E0C
+_03800F44:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800F50: .word _038099A0
+_03800F54: .word 0x027FFC40
+_03800F58: .word _03807668
+_03800F5C: .word 0x027FFC3C
+_03800F60: .word _0380766C
+
+ arm_func_start FUN_03800F64
+FUN_03800F64: ;@ 0x03800F64
+ mov r2, #1
+ mov r0, r2
+ ldr r1, _03800F88 ;@ =0x04000214
+ ldr r1, [r1]
+ ands r1, r1, #1048576 ;@ 0x100000
+ movne r0, #0
+ ldrne r1, _03800F8C ;@ =_038099A8
+ strne r2, [r1]
+ bx lr
+_03800F88: .word 0x04000214
+_03800F8C: .word _038099A8
+
+ arm_func_start FUN_03800F90
+FUN_03800F90: ;@ 0x03800F90
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03800FE8 ;@ =0x027FFC10
+ ldrh r0, [r0]
+ cmp r0, #0
+ ldreq r0, _03800FEC ;@ =0x027FF800
+ ldrne r0, _03800FF0 ;@ =0x027FFC00
+ ldr r0, [r0]
+ str r0, [sp]
+ bl FUN_0380094C
+ ldr r1, [sp]
+ cmp r0, r1
+ moveq r0, #1
+ movne r0, #0
+ cmp r0, #0
+ moveq r2, #1
+ movne r2, #0
+ ldr r1, _03800FF4 ;@ =_038099A8
+ str r2, [r1]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03800FE8: .word 0x027FFC10
+_03800FEC: .word 0x027FF800
+_03800FF0: .word 0x027FFC00
+_03800FF4: .word _038099A8
+
+ arm_func_start FUN_03800FF8
+FUN_03800FF8: ;@ 0x03800FF8
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03801040 ;@ =_038099A8
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _0380102C
+ ldr r0, _03801044 ;@ =0x027FFC1F
+ ldrb r0, [r0]
+ ands r0, r0, #1
+ beq _03801028
+ bl FUN_03800F90
+ b _0380102C
+_03801028:
+ bl FUN_03800F64
+_0380102C:
+ ldr r0, _03801040 ;@ =_038099A8
+ ldr r0, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801040: .word _038099A8
+_03801044: .word 0x027FFC1F
+
+ arm_func_start FUN_03801048
+FUN_03801048: ;@ 0x03801048
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #1
+ bne _03801064
+ bl FUN_03800E54
+ b _03801068
+_03801064:
+ bl FUN_037FB1F0
+_03801068:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_03801074
+FUN_03801074: ;@ 0x03801074
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _038010CC ;@ =_038099A4
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _038010C0
+ mov r1, #1
+ str r1, [r0]
+ bl FUN_037FB5B0
+ mov r5, #14
+ mov r4, #0
+_038010A0:
+ mov r0, r5
+ mov r1, r4
+ bl FUN_037FB780
+ cmp r0, #0
+ beq _038010A0
+ mov r0, #14
+ ldr r1, _038010D0 ;@ =FUN_03801048
+ bl FUN_037FB7A8
+_038010C0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_038010CC: .word _038099A4
+_038010D0: .word FUN_03801048
+ .balign 2, 0 ; Don't pad with nop
diff --git a/arm7/asm/dtcm2.s b/arm7/asm/dtcm2.s
new file mode 100644
index 00000000..f4f86b88
--- /dev/null
+++ b/arm7/asm/dtcm2.s
@@ -0,0 +1,7570 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ arm_func_start FUN_03801150
+FUN_03801150: ;@ 0x03801150
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r2, #0
+ bne _038011B4
+ sub r0, r0, #4
+ cmp r0, #5
+ addls pc, pc, r0, lsl #2
+ b _038011B4
+ b _038011AC
+ b _038011B4
+ b _03801188
+ b _038011B4
+ b _038011A0
+ b _03801194
+_03801188:
+ mov r0, r1
+ bl FUN_03801A48
+ b _038011B4
+_03801194:
+ mov r0, r1
+ bl FUN_038031B8
+ b _038011B4
+_038011A0:
+ mov r0, r1
+ bl FUN_03802444
+ b _038011B4
+_038011AC:
+ mov r0, r1
+ bl FUN_038045CC
+_038011B4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038011C0
+FUN_038011C0: ;@ 0x038011C0
+ stmdb sp!, {r4, r5, r6, lr}
+ sub sp, sp, #8
+ ldr r6, _03801228 ;@ =_03809C5C
+ add r5, sp, #0
+ mov r4, #1
+_038011D4:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_037F9884
+ ldr r0, [sp]
+ ldr r1, [r0]
+ cmp r1, #3
+ addls pc, pc, r1, lsl #2
+ b _038011D4
+ b _03801208
+ b _03801220
+ b _03801210
+ b _03801218
+_03801208:
+ bl FUN_03801720
+ b _038011D4
+_03801210:
+ bl FUN_03802EB8
+ b _038011D4
+_03801218:
+ bl FUN_038022BC
+ b _038011D4
+_03801220:
+ bl FUN_038042F0
+ b _038011D4
+_03801228: .word _03809C5C
+
+ arm_func_start FUN_0380122C
+FUN_0380122C: ;@ 0x0380122C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03801250 ;@ =_03809C5C
+ add r1, sp, #0
+ mov r2, #0
+ bl FUN_037F980C
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801250: .word _03809C5C
+
+ arm_func_start FUN_03801254
+FUN_03801254: ;@ 0x03801254
+ stmdb sp!, {r0, r1, r2, r3}
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r5, r0
+ mov r4, r1
+ ldrh r0, [sp, #24]
+ cmp r0, #4
+ movhi r0, #0
+ bhi _0380130C
+ bl FUN_037FB05C
+ ldr r2, _03801318 ;@ =_038099B0
+ ldr r3, [r2, #1164] ;@ 0x48c
+ mov r1, #24
+ mul ip, r3, r1
+ ldr r3, _0380131C ;@ =_03809CBC
+ str r5, [r3, ip]
+ ldr r3, [r2, #1164] ;@ 0x48c
+ mul r5, r3, r1
+ ldr r3, _03801320 ;@ =_03809CC0
+ str r4, [r3, r5]
+ add r3, sp, #24
+ bic r3, r3, #3
+ add r6, r3, #4
+ mov lr, #0
+ ldrh ip, [sp, #24]
+ b _038012D4
+_038012B8:
+ add r6, r6, #4
+ ldr r5, [r6, #-4]
+ ldr r4, [r2, #1164] ;@ 0x48c
+ mla r3, r4, r1, r2
+ add r3, r3, lr, lsl #2
+ str r5, [r3, #788] ;@ 0x314
+ add lr, lr, #1
+_038012D4:
+ cmp lr, ip
+ blt _038012B8
+ ldr r1, _03801318 ;@ =_038099B0
+ ldr r4, [r1, #1164] ;@ 0x48c
+ add r2, r4, #1
+ and r2, r2, #15
+ str r2, [r1, #1164] ;@ 0x48c
+ bl FUN_037FB070
+ ldr r0, _03801324 ;@ =_03809C5C
+ ldr r2, _0380131C ;@ =_03809CBC
+ mov r1, #24
+ mla r1, r4, r1, r2
+ mov r2, #0
+ bl FUN_037F9924
+_0380130C:
+ ldmia sp!, {r4, r5, r6, lr}
+ add sp, sp, #16
+ bx lr
+_03801318: .word _038099B0
+_0380131C: .word _03809CBC
+_03801320: .word _03809CC0
+_03801324: .word _03809C5C
+
+ arm_func_start FUN_03801328
+FUN_03801328: ;@ 0x03801328
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _03801364 ;@ =_038099B0
+ ldr r2, [r1, #4]
+ cmp r2, r0
+ bne _03801358
+ mov r0, #5
+ str r0, [r1, #4]
+ mov r0, #0
+ str r0, [r1]
+ ldr r0, _03801368 ;@ =_03809E40
+ bl FUN_037F8FE8
+_03801358:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801364: .word _038099B0
+_03801368: .word _03809E40
+
+ arm_func_start FUN_0380136C
+FUN_0380136C: ;@ 0x0380136C
+ mov r2, #1
+ ldr r1, _03801380 ;@ =_038099B0
+ str r2, [r1]
+ str r0, [r1, #4]
+ bx lr
+_03801380: .word _038099B0
+
+ arm_func_start FUN_03801384
+FUN_03801384: ;@ 0x03801384
+ ldr r0, _0380139C ;@ =_038099B0
+ ldr r0, [r0]
+ cmp r0, #0
+ moveq r0, #1
+ movne r0, #0
+ bx lr
+_0380139C: .word _038099B0
+
+ arm_func_start FUN_038013A0
+FUN_038013A0: ;@ 0x038013A0
+ stmdb sp!, {r4, r5, r6, lr}
+ and r2, r0, #112 ;@ 0x70
+ cmp r2, #48 ;@ 0x30
+ bgt _038013E0
+ cmp r2, #48 ;@ 0x30
+ bge _03801434
+ cmp r2, #16
+ bgt _038013D4
+ cmp r2, #16
+ bge _0380141C
+ cmp r2, #0
+ beq _0380141C
+ b _03801438
+_038013D4:
+ cmp r2, #32
+ beq _03801434
+ b _03801438
+_038013E0:
+ cmp r2, #80 ;@ 0x50
+ bgt _038013FC
+ cmp r2, #80 ;@ 0x50
+ bge _03801424
+ cmp r2, #64 ;@ 0x40
+ beq _03801424
+ b _03801438
+_038013FC:
+ cmp r2, #96 ;@ 0x60
+ bgt _03801410
+ cmp r2, #96 ;@ 0x60
+ beq _0380142C
+ b _03801438
+_03801410:
+ cmp r2, #112 ;@ 0x70
+ beq _0380142C
+ b _03801438
+_0380141C:
+ mov r4, #6
+ b _03801438
+_03801424:
+ mov r4, #9
+ b _03801438
+_0380142C:
+ mov r4, #8
+ b _03801438
+_03801434:
+ mov r4, #4
+_03801438:
+ and r0, r0, #255 ;@ 0xff
+ orr r0, r0, #128 ;@ 0x80
+ mov r0, r0, lsl #8
+ orr r2, r0, #50331648 ;@ 0x3000000
+ and r0, r1, #255 ;@ 0xff
+ orr r6, r2, r0
+ mov r5, #0
+_03801454:
+ mov r0, r4
+ mov r1, r6
+ mov r2, r5
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _03801454
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_03801474
+FUN_03801474: ;@ 0x03801474
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _038014D8 ;@ =_038099B0
+ ldr r2, [r1]
+ cmp r2, #0
+ beq _038014CC
+ ldr r2, [r1, #4]
+ cmp r2, #4
+ bne _038014CC
+ ldr r1, [r1, #1176] ;@ 0x498
+ cmp r1, r0
+ bne _038014CC
+ bl FUN_037FB05C
+ mov r2, #5
+ ldr r1, _038014D8 ;@ =_038099B0
+ str r2, [r1, #4]
+ mov r2, #0
+ str r2, [r1]
+ str r2, [r1, #1176] ;@ 0x498
+ bl FUN_037FB070
+ ldr r0, _038014DC ;@ =_03809E40
+ bl FUN_037F8FE8
+_038014CC:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038014D8: .word _038099B0
+_038014DC: .word _03809E40
+
+ arm_func_start FUN_038014E0
+FUN_038014E0: ;@ 0x038014E0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ ldr r5, _0380153C ;@ =_03809E40
+ ldr r4, _03801540 ;@ =_038099B0
+_038014F4:
+ bl FUN_037FB05C
+ mov r6, r0
+ ldr r1, [r4]
+ cmp r1, #0
+ beq _03801518
+ bl FUN_037FB070
+ mov r0, r5
+ bl FUN_037F9064
+ b _038014F4
+_03801518:
+ mov r0, #4
+ bl FUN_0380136C
+ ldr r0, _03801540 ;@ =_038099B0
+ str r7, [r0, #1176] ;@ 0x498
+ mov r0, r6
+ bl FUN_037FB070
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_0380153C: .word _03809E40
+_03801540: .word _038099B0
+
+ arm_func_start FUN_03801544
+FUN_03801544: ;@ 0x03801544
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ ldr r0, _03801640 ;@ =_038099AC
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _03801634
+ mov r1, #1
+ strh r1, [r0]
+ mov r1, #0
+ ldr r0, _03801644 ;@ =_038099B0
+ str r1, [r0]
+ mov r1, #5
+ str r1, [r0, #4]
+ bl FUN_03801C08
+ bl FUN_03804770
+ bl FUN_0380348C
+ bl FUN_03802618
+ bl FUN_037FB5B0
+ mov r0, #6
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl FUN_037FB7A8
+ mov r0, #9
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl FUN_037FB7A8
+ mov r0, #8
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl FUN_037FB7A8
+ mov r0, #4
+ ldr r1, _03801648 ;@ =FUN_03801150
+ bl FUN_037FB7A8
+ ldr r0, _0380164C ;@ =_03809C5C
+ ldr r1, _03801650 ;@ =_03809C7C
+ mov r2, #16
+ bl FUN_037F99B8
+ mov r8, #0
+ ldr r7, _03801654 ;@ =_03809CBC
+ mov r6, r8
+ mov r5, #24
+_038015E0:
+ mla r0, r8, r5, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_037FB3E4
+ add r8, r8, #1
+ cmp r8, #16
+ blt _038015E0
+ mov r2, #0
+ ldr r0, _03801644 ;@ =_038099B0
+ str r2, [r0, #1164] ;@ 0x48c
+ str r2, [r0, #1172] ;@ 0x494
+ str r2, [r0, #1168] ;@ 0x490
+ mov r0, #512 ;@ 0x200
+ str r0, [sp]
+ str r4, [sp, #4]
+ ldr r0, _03801658 ;@ =_038099B8
+ ldr r1, _0380165C ;@ =FUN_038011C0
+ ldr r3, _0380164C ;@ =_03809C5C
+ bl FUN_037F9244
+ ldr r0, _03801658 ;@ =_038099B8
+ bl FUN_037F8FB4
+_03801634:
+ add sp, sp, #8
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03801640: .word _038099AC
+_03801644: .word _038099B0
+_03801648: .word FUN_03801150
+_0380164C: .word _03809C5C
+_03801650: .word _03809C7C
+_03801654: .word _03809CBC
+_03801658: .word _038099B8
+_0380165C: .word FUN_038011C0
+
+ arm_func_start FUN_03801660
+FUN_03801660: ;@ 0x03801660
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r0, #0
+ bne _03801680
+ mov r0, #3
+ mov r1, #2
+ bl FUN_038013A0
+ b _03801698
+_03801680:
+ ldr r1, _038016A4 ;@ =_03809E54
+ str r0, [r1, #36] ;@ 0x24
+ str r0, [r1, #40] ;@ 0x28
+ mov r0, #3
+ mov r1, #0
+ bl FUN_038013A0
+_03801698:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038016A4: .word _03809E54
+
+ arm_func_start FUN_038016A8
+FUN_038016A8: ;@ 0x038016A8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ mov r0, #0
+ mov r1, #16
+ mov r2, #1
+ mov r3, r4
+ bl FUN_03801254
+ cmp r0, #0
+ bne _0380170C
+ ldr r0, [sp]
+ bic r0, r0, #100663296 ;@ 0x6000000
+ orr r0, r0, #100663296 ;@ 0x6000000
+ str r0, [sp]
+ ldrh r1, [sp]
+ ldr r0, _03801718 ;@ =0x027FFFAA
+ strh r1, [r0]
+ ldrh r1, [sp, #2]
+ ldr r0, _0380171C ;@ =0x027FFFAC
+ strh r1, [r0]
+ mov r0, #16
+ and r1, r4, #255 ;@ 0xff
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ bl FUN_038013A0
+_0380170C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03801718: .word 0x027FFFAA
+_0380171C: .word 0x027FFFAC
+
+ arm_func_start FUN_03801720
+FUN_03801720: ;@ 0x03801720
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #16
+ mov sl, r0
+ ldr r1, [sl, #4]
+ cmp r1, #2
+ bhi _03801754
+ cmp r1, #0
+ beq _0380176C
+ cmp r1, #1
+ beq _03801834
+ cmp r1, #2
+ beq _038018E0
+ b _0380192C
+_03801754:
+ cmp r1, #16
+ bne _0380192C
+ ldr r0, _03801938 ;@ =_03809E54
+ ldr r0, [r0, #32]
+ cmp r0, #2
+ bne _0380192C
+_0380176C:
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #0
+ bl FUN_03801384
+ cmp r0, #0
+ bne _038017A4
+ mov r0, r4
+ bl FUN_037FB070
+ ldr r0, [sl, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl FUN_038013A0
+ b _0380192C
+_038017A4:
+ mov r0, #0
+ bl FUN_0380136C
+ mov r0, r4
+ bl FUN_037FB070
+ add r0, sp, #8
+ ldr r1, _03801938 ;@ =_03809E54
+ ldr r1, [r1, #36] ;@ 0x24
+ add r2, sp, #4
+ bl FUN_03801D18
+ add r0, sp, #8
+ ldrh r1, [sp, #4]
+ bl FUN_03801954
+ ldrh r1, [sp, #8]
+ ldr r0, _0380193C ;@ =0x027FFFAA
+ strh r1, [r0]
+ ldrh r1, [sp, #10]
+ ldr r0, _03801940 ;@ =0x027FFFAC
+ strh r1, [r0]
+ ldr r0, [sl, #4]
+ cmp r0, #0
+ bne _0380180C
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl FUN_038013A0
+ b _03801828
+_0380180C:
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr r1, [sl, #8]
+ and r1, r1, #255 ;@ 0xff
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ bl FUN_038013A0
+_03801828:
+ mov r0, #0
+ bl FUN_03801328
+ b _0380192C
+_03801834:
+ ldr r7, _03801938 ;@ =_03809E54
+ ldr r0, [r7, #32]
+ cmp r0, #1
+ bne _038018CC
+ mov r9, #0
+ ldr r8, _03801944 ;@ =0x00000107
+ ldr r6, _03801948 ;@ =_03809E80
+ mov r5, #10
+ ldr r4, _0380194C ;@ =FUN_038016A8
+ b _0380189C
+_0380185C:
+ mul r0, r9, r8
+ bl _u32_div_f
+ ldr r1, [sl, #12]
+ add r0, r1, r0
+ mov r1, r8
+ bl _u32_div_f
+ add r2, r7, r9, lsl #1
+ strh r1, [r2, #204] ;@ 0xcc
+ str r9, [sp]
+ mov r0, #40 ;@ 0x28
+ mla r0, r9, r0, r6
+ ldrsh r1, [r2, #204] ;@ 0xcc
+ mov r2, r5
+ mov r3, r4
+ bl FUN_037FAD88
+ add r9, r9, #1
+_0380189C:
+ ldr r1, [sl, #8]
+ cmp r9, r1
+ bcc _0380185C
+ ldr r0, [sl, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl FUN_038013A0
+ mov r1, #2
+ ldr r0, _03801938 ;@ =_03809E54
+ str r1, [r0, #32]
+ b _0380192C
+_038018CC:
+ mov r0, r1, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ b _0380192C
+_038018E0:
+ ldr r0, _03801938 ;@ =_03809E54
+ ldr r0, [r0, #32]
+ cmp r0, #3
+ bne _0380191C
+ ldr r0, _03801950 ;@ =0x54505641
+ bl FUN_037FAC30
+ ldr r0, [sl, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl FUN_038013A0
+ mov r1, #0
+ ldr r0, _03801938 ;@ =_03809E54
+ str r1, [r0, #32]
+ b _0380192C
+_0380191C:
+ mov r0, r1, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+_0380192C:
+ add sp, sp, #16
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_03801938: .word _03809E54
+_0380193C: .word 0x027FFFAA
+_03801940: .word 0x027FFFAC
+_03801944: .word 0x00000107
+_03801948: .word _03809E80
+_0380194C: .word FUN_038016A8
+_03801950: .word 0x54505641
+
+ arm_func_start FUN_03801954
+FUN_03801954: ;@ 0x03801954
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, [r0]
+ mov r2, r0, lsl #7
+ movs r2, r2, lsr #31
+ bne _03801984
+ mov r1, #0
+ ldr r0, _03801A3C ;@ =_03809E50
+ strb r1, [r0]
+ ldr r0, _03801A40 ;@ =_03809E4C
+ strb r1, [r0]
+ b _03801A30
+_03801984:
+ mov r0, r0, lsl #5
+ movs r0, r0, lsr #30
+ beq _038019D4
+ mov r2, #0
+ ldr r0, _03801A40 ;@ =_03809E4C
+ strb r2, [r0]
+ ldr r0, _03801A3C ;@ =_03809E50
+ ldrb r1, [r0]
+ add r1, r1, #1
+ strb r1, [r0]
+ ldrb r1, [r0]
+ cmp r1, #4
+ bcc _03801A30
+ strb r2, [r0]
+ ldr r0, _03801A44 ;@ =_03809E54
+ ldr r1, [r0, #36] ;@ 0x24
+ cmp r1, #35 ;@ 0x23
+ addlt r1, r1, #1
+ strlt r1, [r0, #36] ;@ 0x24
+ b _03801A30
+_038019D4:
+ mov lr, #0
+ ldr r3, _03801A3C ;@ =_03809E50
+ strb lr, [r3]
+ ldr r2, _03801A44 ;@ =_03809E54
+ ldr ip, [r2, #36] ;@ 0x24
+ cmp r1, ip, asr #1
+ ldrge r0, _03801A40 ;@ =_03809E4C
+ strgeb lr, [r0]
+ bge _03801A30
+ ldr r0, _03801A40 ;@ =_03809E4C
+ ldrb r1, [r0]
+ add r1, r1, #1
+ strb r1, [r0]
+ ldrb r1, [r0]
+ cmp r1, #4
+ bcc _03801A30
+ strb lr, [r0]
+ ldr r0, [r2, #40] ;@ 0x28
+ cmp ip, r0
+ subgt r0, ip, #1
+ strgt r0, [r2, #36] ;@ 0x24
+ movgt r0, #3
+ strgtb r0, [r3]
+_03801A30:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03801A3C: .word _03809E50
+_03801A40: .word _03809E4C
+_03801A44: .word _03809E54
+
+ arm_func_start FUN_03801A48
+FUN_03801A48: ;@ 0x03801A48
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _03801A78
+ mov r4, #0
+ mov r3, r4
+ ldr r1, _03801C00 ;@ =_03809E54
+_03801A64:
+ mov r2, r4, lsl #1
+ strh r3, [r1, r2]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _03801A64
+_03801A78:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #1
+ ldr r2, _03801C00 ;@ =_03809E54
+ strh r0, [r2, r1]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03801BF4
+ ldrh r1, [r2]
+ and r0, r1, #65280 ;@ 0xff00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ cmp r4, #3
+ addls pc, pc, r4, lsl #2
+ b _03801BE8
+ b _03801AD4
+ b _03801AFC
+ b _03801B98
+ b _03801AC0
+_03801AC0:
+ and r0, r1, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ bl FUN_03801660
+ b _03801BF4
+_03801AD4:
+ mov r0, #0
+ mov r1, r4
+ mov r2, r0
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03801BF4
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03801BF4
+_03801AFC:
+ ldr r0, [r2, #32]
+ cmp r0, #0
+ beq _03801B18
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038013A0
+ b _03801BF4
+_03801B18:
+ and r0, r1, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ movs r3, r0, lsr #16
+ beq _03801B30
+ cmp r3, #4
+ bls _03801B40
+_03801B30:
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03801BF4
+_03801B40:
+ ldrh r1, [r2, #2]
+ ldr r0, _03801C04 ;@ =0x00000107
+ cmp r1, r0
+ bcc _03801B60
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03801BF4
+_03801B60:
+ str r1, [sp]
+ mov r0, #0
+ mov r1, r4
+ mov r2, #2
+ bl FUN_03801254
+ cmp r0, #0
+ movne r1, #1
+ ldrne r0, _03801C00 ;@ =_03809E54
+ strne r1, [r0, #32]
+ bne _03801BF4
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03801BF4
+_03801B98:
+ ldr r0, [r2, #32]
+ cmp r0, #2
+ beq _03801BB4
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038013A0
+ b _03801BF4
+_03801BB4:
+ mov r0, #0
+ mov r1, r4
+ mov r2, r0
+ bl FUN_03801254
+ cmp r0, #0
+ movne r1, #3
+ ldrne r0, _03801C00 ;@ =_03809E54
+ strne r1, [r0, #32]
+ bne _03801BF4
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03801BF4
+_03801BE8:
+ mov r0, r4
+ mov r1, #1
+ bl FUN_038013A0
+_03801BF4:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03801C00: .word _03809E54
+_03801C04: .word 0x00000107
+
+ arm_func_start FUN_03801C08
+FUN_03801C08: ;@ 0x03801C08
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r3, #0
+ ldr r0, _03801CFC ;@ =_03809E54
+ str r3, [r0, #32]
+ mov r1, #20
+ str r1, [r0, #36] ;@ 0x24
+ str r1, [r0, #40] ;@ 0x28
+ mov r2, r3
+_03801C28:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _03801C28
+ bl FUN_037FAFD0
+ cmp r0, #0
+ bne _03801C4C
+ bl FUN_037FAFE0
+_03801C4C:
+ mov r7, #0
+ ldr r6, _03801D00 ;@ =_03809E80
+ ldr r5, _03801D04 ;@ =0x54505641
+ mov r4, #40 ;@ 0x28
+_03801C5C:
+ mla r8, r7, r4, r6
+ mov r0, r8
+ bl FUN_037FAEB8
+ mov r0, r8
+ mov r1, r5
+ bl FUN_037FAD00
+ add r7, r7, #1
+ cmp r7, #4
+ blt _03801C5C
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801C84:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801C84
+ ldr r0, _03801D0C ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #132 ;@ 0x84
+ ldr r0, _03801D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801CA8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801CA8
+ mov r1, #0
+ ldr r0, _03801D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801CC4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801CC4
+ ldr r0, _03801D14 ;@ =0x00008201
+ strh r0, [r1]
+ mov r1, #0
+ ldr r0, _03801D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801D08 ;@ =0x040001C0
+_03801CE8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801CE8
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03801CFC: .word _03809E54
+_03801D00: .word _03809E80
+_03801D04: .word 0x54505641
+_03801D08: .word 0x040001C0
+_03801D0C: .word 0x00008A01
+_03801D10: .word 0x040001C2
+_03801D14: .word 0x00008201
+
+ arm_func_start FUN_03801D18
+FUN_03801D18: ;@ 0x03801D18
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #12
+ mov r7, r0
+ movs r6, r1
+ mov r5, r2
+ mov r0, #0
+ strh r0, [r5]
+ rsbmi r6, r6, #0
+ bl FUN_03802160
+ movs r4, r0
+ bne _03801D94
+ ldr r1, [r7]
+ mov r0, #4096 ;@ 0x1000
+ rsb r0, r0, #0
+ and r0, r1, r0
+ str r0, [r7]
+ ldr r1, [r7]
+ ldr r0, _03801F4C ;@ =0xFF000FFF
+ and r0, r1, r0
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #100663296 ;@ 0x6000000
+ orr r0, r0, #100663296 ;@ 0x6000000
+ str r0, [r7]
+ mov r1, #0
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ b _03801F40
+_03801D94:
+ add r0, sp, #0
+ mov r1, r6
+ mov r2, #0
+ add r3, sp, #2
+ bl FUN_03801F68
+ ldr r1, [r7]
+ bic r1, r1, #100663296 ;@ 0x6000000
+ and r0, r0, #3
+ orr r0, r1, r0, lsl #25
+ str r0, [r7]
+ ldr r1, [r7]
+ mov r0, #4096 ;@ 0x1000
+ rsb r0, r0, #0
+ and r2, r1, r0
+ ldrh r1, [sp]
+ ldr r0, _03801F54 ;@ =0x00000FFF
+ and r0, r1, r0
+ orr r0, r2, r0
+ str r0, [r7]
+ add r0, sp, #0
+ mov r1, r6
+ mov r2, #1
+ add r3, sp, #4
+ bl FUN_03801F68
+ cmp r0, #2
+ bne _03801E1C
+ ldr r0, [r7]
+ bic r1, r0, #100663296 ;@ 0x6000000
+ mov r0, r0, lsl #5
+ mov r0, r0, lsr #30
+ orr r0, r0, #2
+ and r0, r0, #3
+ orr r0, r1, r0, lsl #25
+ str r0, [r7]
+_03801E1C:
+ ldr r1, [r7]
+ ldr r0, _03801F4C ;@ =0xFF000FFF
+ and r2, r1, r0
+ ldrh r1, [sp]
+ ldr r0, _03801F54 ;@ =0x00000FFF
+ and r0, r1, r0
+ orr r0, r2, r0, lsl #12
+ str r0, [r7]
+ ldr r0, _03801F58 ;@ =0x00008A01
+ ldr r3, _03801F5C ;@ =0x040001C0
+ strh r0, [r3]
+ mov r6, #0
+ mov r2, r6
+ ldr r1, _03801F60 ;@ =0x040001C2
+_03801E54:
+ strh r2, [r1]
+_03801E58:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801E58
+ add r6, r6, #1
+ cmp r6, #12
+ blt _03801E54
+ ldr r0, _03801F64 ;@ =0x00008201
+ strh r0, [r3]
+ mov r1, #0
+ ldr r0, _03801F60 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03801F5C ;@ =0x040001C0
+_03801E88:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03801E88
+ cmp r4, #2
+ ldreq r0, [r7]
+ biceq r0, r0, #100663296 ;@ 0x6000000
+ orreq r0, r0, #100663296 ;@ 0x6000000
+ streq r0, [r7]
+ bl FUN_03802160
+ cmp r0, #0
+ beq _03801F20
+ cmp r0, #1
+ beq _03801EF0
+ cmp r0, #2
+ bne _03801F3C
+ ldr r0, [r7]
+ orr r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ ldr r0, [r7]
+ bic r0, r0, #100663296 ;@ 0x6000000
+ orr r0, r0, #100663296 ;@ 0x6000000
+ str r0, [r7]
+ mov r1, #0
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ b _03801F40
+_03801EF0:
+ ldr r0, [r7]
+ orr r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ mov r1, #1
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ ldrh r0, [sp, #4]
+ ldrh r1, [sp, #2]
+ cmp r1, r0
+ movcc r1, r0
+ strh r1, [r5]
+ b _03801F40
+_03801F20:
+ ldr r0, [r7]
+ bic r0, r0, #16777216 ;@ 0x1000000
+ str r0, [r7]
+ mov r1, #0
+ ldr r0, _03801F50 ;@ =_03809F28
+ strh r1, [r0]
+ b _03801F40
+_03801F3C:
+ bl FUN_037FB1F0
+_03801F40:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03801F4C: .word 0xFF000FFF
+_03801F50: .word _03809F28
+_03801F54: .word 0x00000FFF
+_03801F58: .word 0x00008A01
+_03801F5C: .word 0x040001C0
+_03801F60: .word 0x040001C2
+_03801F64: .word 0x00008201
+
+ arm_func_start FUN_03801F68
+FUN_03801F68: ;@ 0x03801F68
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ sub sp, sp, #24
+ cmp r2, #0
+ moveq r5, #209 ;@ 0xd1
+ moveq r6, #1
+ movne r5, #145 ;@ 0x91
+ movne r6, #2
+_03801F84:
+ ldr r4, _0380214C ;@ =0x040001C0
+ ldrh r2, [r4]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03801F84
+ ldr r2, _03802150 ;@ =0x00008A01
+ strh r2, [r4]
+ and r5, r5, #255 ;@ 0xff
+ ldr r2, _03802154 ;@ =0x040001C2
+ strh r5, [r2]
+_03801FA8:
+ ldrh r2, [r4]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03801FA8
+ mov r7, #0
+ ldr ip, _0380214C ;@ =0x040001C0
+ ldr lr, _03802154 ;@ =0x040001C2
+ add r2, sp, #0
+ mov r4, r7
+ ldr r9, _03802158 ;@ =0x00007FF8
+_03801FCC:
+ strh r4, [lr]
+_03801FD0:
+ ldrh r8, [ip]
+ ands r8, r8, #128 ;@ 0x80
+ bne _03801FD0
+ ldrh r8, [lr]
+ and r8, r8, #255 ;@ 0xff
+ mov r8, r8, lsl #16
+ mov r8, r8, lsr #8
+ str r8, [r2, r7, lsl #2]
+ strh r5, [lr]
+_03801FF4:
+ ldrh r8, [ip]
+ ands r8, r8, #128 ;@ 0x80
+ bne _03801FF4
+ ldrh r8, [lr]
+ and r8, r8, #255 ;@ 0xff
+ mov r8, r8, lsl #16
+ ldr sl, [r2, r7, lsl #2]
+ orr r8, sl, r8, lsr #16
+ str r8, [r2, r7, lsl #2]
+ ldr r8, [r2, r7, lsl #2]
+ and r8, r8, r9
+ mov r8, r8, asr #3
+ str r8, [r2, r7, lsl #2]
+ add r7, r7, #1
+ cmp r7, #5
+ blt _03801FCC
+ ldr r2, _0380215C ;@ =0x00008201
+ strh r2, [ip]
+ mov r2, #0
+ strh r2, [lr]
+ ldr r4, _0380214C ;@ =0x040001C0
+_03802048:
+ ldrh r2, [r4]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03802048
+ mov r8, #0
+ mov r7, r8
+ add r5, sp, #0
+_03802060:
+ add r9, r7, #1
+ ldr r4, [r5, r7, lsl #2]
+ b _03802084
+_0380206C:
+ ldr r2, [r5, r9, lsl #2]
+ subs r2, r4, r2
+ rsbmi r2, r2, #0
+ cmp r2, r8
+ movgt r8, r2
+ add r9, r9, #1
+_03802084:
+ cmp r9, #5
+ blt _0380206C
+ add r7, r7, #1
+ cmp r7, #4
+ blt _03802060
+ strh r8, [r3]
+ mov r4, #0
+ add r2, sp, #0
+ b _0380211C
+_038020A8:
+ add r3, r4, #1
+ ldr r7, [r2, r4, lsl #2]
+ b _03802110
+_038020B4:
+ ldr r8, [r2, r3, lsl #2]
+ subs r5, r7, r8
+ rsbmi r5, r5, #0
+ cmp r5, r1
+ bgt _0380210C
+ add r9, r3, #1
+ b _03802104
+_038020D0:
+ ldr r5, [r2, r9, lsl #2]
+ subs sl, r7, r5
+ rsbmi sl, sl, #0
+ cmp sl, r1
+ bgt _03802100
+ add r1, r8, r7, lsl #1
+ add r1, r5, r1
+ mov r1, r1, asr #2
+ bic r1, r1, #7
+ strh r1, [r0]
+ mov r0, #0
+ b _03802140
+_03802100:
+ add r9, r9, #1
+_03802104:
+ cmp r9, #5
+ blt _038020D0
+_0380210C:
+ add r3, r3, #1
+_03802110:
+ cmp r3, #4
+ blt _038020B4
+ add r4, r4, #1
+_0380211C:
+ cmp r4, #3
+ blt _038020A8
+ ldr r2, [sp]
+ ldr r1, [sp, #16]
+ add r1, r2, r1
+ mov r1, r1, asr #1
+ bic r1, r1, #7
+ strh r1, [r0]
+ mov r0, r6
+_03802140:
+ add sp, sp, #24
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ bx lr
+_0380214C: .word 0x040001C0
+_03802150: .word 0x00008A01
+_03802154: .word 0x040001C2
+_03802158: .word 0x00007FF8
+_0380215C: .word 0x00008201
+
+ arm_func_start FUN_03802160
+FUN_03802160: ;@ 0x03802160
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802174:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802174
+ ldr r0, _038022A8 ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #132 ;@ 0x84
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802198:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802198
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_038021B4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038021B4
+ ldr r0, _038022B0 ;@ =0x00008201
+ strh r0, [r1]
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_038021D8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038021D8
+ ldr r0, _038022B4 ;@ =_03809F28
+ ldrh r0, [r0]
+ cmp r0, #0
+ bne _0380220C
+ ldr r0, _038022B8 ;@ =0x04000136
+ ldrh r0, [r0]
+ ands r0, r0, #64 ;@ 0x40
+ moveq r0, #1
+ movne r0, #0
+ b _03802298
+_0380220C:
+ ldr r0, _038022B8 ;@ =0x04000136
+ ldrh r0, [r0]
+ ands r0, r0, #64 ;@ 0x40
+ moveq r0, #1
+ beq _03802298
+ ldr r0, _038022A8 ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #132 ;@ 0x84
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802238:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802238
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802254:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802254
+ ldr r0, _038022B0 ;@ =0x00008201
+ strh r0, [r1]
+ mov r1, #0
+ ldr r0, _038022AC ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038022A4 ;@ =0x040001C0
+_03802278:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802278
+ ldr r0, _038022B8 ;@ =0x04000136
+ ldrh r0, [r0]
+ ands r0, r0, #64 ;@ 0x40
+ movne r0, #0
+ moveq r0, #2
+_03802298:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038022A4: .word 0x040001C0
+_038022A8: .word 0x00008A01
+_038022AC: .word 0x040001C2
+_038022B0: .word 0x00008201
+_038022B4: .word _03809F28
+_038022B8: .word 0x04000136
+
+ arm_func_start FUN_038022BC
+FUN_038022BC: ;@ 0x038022BC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ bl FUN_037FB05C
+ mov r5, r0
+ mov r0, #3
+ bl FUN_03801384
+ cmp r0, #0
+ bne _03802300
+ mov r0, r5
+ bl FUN_037FB070
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl FUN_038013A0
+ b _0380242C
+_03802300:
+ mov r0, #3
+ bl FUN_0380136C
+ mov r0, r5
+ bl FUN_037FB070
+ ldr r1, [r4, #4]
+ sub r0, r1, #97 ;@ 0x61
+ cmp r0, #5
+ addls pc, pc, r0, lsl #2
+ b _03802414
+ b _0380233C
+ b _03802414
+ b _038023E0
+ b _03802368
+ b _038023A4
+ b _03802408
+_0380233C:
+ mov r1, #1
+ ldr r0, _03802438 ;@ =_03809F38
+ str r1, [r0, #32]
+ ldr r1, [r4, #8]
+ ldr r0, _0380243C ;@ =_03809F30
+ strh r1, [r0]
+ ldr r1, [r4, #12]
+ ldr r0, _03802440 ;@ =_03809F2C
+ strh r1, [r0]
+ bl FUN_038029D0
+ b _03802424
+_03802368:
+ mov r1, #4
+ ldr r0, _03802438 ;@ =_03809F38
+ str r1, [r0, #32]
+ ldr r2, [r4, #8]
+ str r2, [r0, #40] ;@ 0x28
+ ldr r1, [r4, #12]
+ str r1, [r0, #36] ;@ 0x24
+ mov r0, r2, lsl #16
+ mov r0, r0, lsr #16
+ and r1, r1, #255 ;@ 0xff
+ bl FUN_03802794
+ mov r0, #100 ;@ 0x64
+ mov r1, #0
+ bl FUN_038013A0
+ b _03802424
+_038023A4:
+ mov r1, #3
+ ldr r0, _03802438 ;@ =_03809F38
+ str r1, [r0, #32]
+ ldr r1, [r4, #8]
+ str r1, [r0, #40] ;@ 0x28
+ mov r0, r1, lsl #16
+ mov r4, r0, lsr #16
+ mov r0, r4
+ bl FUN_03802700
+ mov r1, r0
+ add r0, r4, #112 ;@ 0x70
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ bl FUN_038013A0
+ b _03802424
+_038023E0:
+ mov r0, #2
+ ldr r1, _03802438 ;@ =_03809F38
+ str r0, [r1, #32]
+ ldr r0, [r4, #8]
+ str r0, [r1, #36] ;@ 0x24
+ bl FUN_038028A4
+ mov r0, #99 ;@ 0x63
+ mov r1, #0
+ bl FUN_038013A0
+ b _03802424
+_03802408:
+ ldr r0, [r4, #8]
+ bl FUN_0380283C
+ b _03802424
+_03802414:
+ mov r0, r1, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #1
+ bl FUN_038013A0
+_03802424:
+ mov r0, #3
+ bl FUN_03801328
+_0380242C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03802438: .word _03809F38
+_0380243C: .word _03809F30
+_03802440: .word _03809F2C
+
+ arm_func_start FUN_03802444
+FUN_03802444: ;@ 0x03802444
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _03802474
+ mov r4, #0
+ mov r3, r4
+ ldr r1, _03802610 ;@ =_03809F38
+_03802460:
+ mov r2, r4, lsl #1
+ strh r3, [r1, r2]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _03802460
+_03802474:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #1
+ ldr ip, _03802610 ;@ =_03809F38
+ strh r0, [ip, r1]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03802604
+ ldrh r3, [ip]
+ and r0, r3, #65280 ;@ 0xff00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ sub r0, r4, #96 ;@ 0x60
+ cmp r0, #7
+ addls pc, pc, r0, lsl #2
+ b _038025F8
+ b _038024D0
+ b _038024E0
+ b _038025F8
+ b _03802588
+ b _0380251C
+ b _03802558
+ b _038025C4
+ b _038025DC
+_038024D0:
+ mov r0, #96 ;@ 0x60
+ mov r1, #0
+ bl FUN_038013A0
+ b _03802604
+_038024E0:
+ ldrh r1, [ip, #2]
+ ldr r0, _03802614 ;@ =0x0000FFFF
+ and r0, r1, r0
+ str r0, [sp]
+ mov r0, #3
+ mov r1, r4
+ mov r2, #2
+ and r3, r3, #255 ;@ 0xff
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03802604
+_0380251C:
+ ldrh r1, [ip, #2]
+ ldr r0, _03802614 ;@ =0x0000FFFF
+ and r0, r1, r0
+ str r0, [sp]
+ mov r0, #3
+ mov r1, r4
+ mov r2, #2
+ and r3, r3, #255 ;@ 0xff
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03802604
+_03802558:
+ mov r0, #3
+ mov r1, r4
+ mov r2, #1
+ ldr ip, _03802614 ;@ =0x0000FFFF
+ and r3, r3, ip
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03802604
+_03802588:
+ mov r0, #3
+ mov r1, r4
+ mov r2, #1
+ and lr, r3, #255 ;@ 0xff
+ ldrh ip, [ip, #2]
+ ldr r3, _03802614 ;@ =0x0000FFFF
+ and r3, ip, r3
+ orr r3, r3, lr, lsl #16
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03802604
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03802604
+_038025C4:
+ and r0, r3, #255 ;@ 0xff
+ bl FUN_03802BC8
+ mov r0, #102 ;@ 0x66
+ mov r1, #0
+ bl FUN_038013A0
+ b _03802604
+_038025DC:
+ bl FUN_03802BB8
+ mov r1, r0
+ mov r0, #103 ;@ 0x67
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ bl FUN_038013A0
+ b _03802604
+_038025F8:
+ mov r0, r4
+ mov r1, #1
+ bl FUN_038013A0
+_03802604:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03802610: .word _03809F38
+_03802614: .word 0x0000FFFF
+
+ arm_func_start FUN_03802618
+FUN_03802618: ;@ 0x03802618
+ mov r1, #1
+ ldr r0, _0380264C ;@ =_03809F34
+ str r1, [r0]
+ mov r3, #0
+ ldr r0, _03802650 ;@ =_03809F38
+ str r3, [r0, #32]
+ mov r2, r3
+_03802634:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _03802634
+ bx lr
+_0380264C: .word _03809F34
+_03802650: .word _03809F38
+
+ arm_func_start FUN_03802654
+FUN_03802654: ;@ 0x03802654
+ ldr r3, _03802678 ;@ =0x0000FFFF
+ and r3, r2, r3
+ and r0, r0, #62914560 ;@ 0x3c00000
+ mov r2, r0, lsl #22
+ and r0, r1, #4128768 ;@ 0x3f0000
+ orr r0, r2, r0, lsl #16
+ orr r0, r3, r0
+ ldr ip, _0380267C ;@ =FUN_03802680
+ bx ip
+_03802678: .word 0x0000FFFF
+_0380267C: .word FUN_03802680
+
+ arm_func_start FUN_03802680
+FUN_03802680: ;@ 0x03802680
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r6, r0
+ mov r5, #8
+ mov r4, #0
+_03802690:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ bne _03802690
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_038026B0
+FUN_038026B0: ;@ 0x038026B0
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #0
+ bl FUN_03802700
+ mvn r1, r4
+ and r0, r0, r1
+ and r1, r0, #255 ;@ 0xff
+ mov r0, #0
+ bl FUN_03802794
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_038026DC
+FUN_038026DC: ;@ 0x038026DC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #0
+ bl FUN_03802700
+ orr r1, r0, r4
+ mov r0, #0
+ bl FUN_03802794
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03802700
+FUN_03802700: ;@ 0x03802700
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ ldr r1, _0380278C ;@ =0x040001C0
+_0380270C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380270C
+ bl FUN_03802808
+ mov r0, #1
+ bl FUN_03802820
+ orr r0, r4, #128 ;@ 0x80
+ and r0, r0, #255 ;@ 0xff
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03802790 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380278C ;@ =0x040001C0
+_0380273C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380273C
+ mov r0, #0
+ bl FUN_03802820
+ mov r1, #0
+ ldr r0, _03802790 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380278C ;@ =0x040001C0
+_03802760:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03802760
+ ldr r0, _03802790 ;@ =0x040001C2
+ ldrh r0, [r0]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ ldmia sp!, {r4, lr}
+ bx lr
+_0380278C: .word 0x040001C0
+_03802790: .word 0x040001C2
+
+ arm_func_start FUN_03802794
+FUN_03802794: ;@ 0x03802794
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ ldr r1, _03802800 ;@ =0x040001C0
+_038027A8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038027A8
+ bl FUN_03802808
+ mov r0, #1
+ bl FUN_03802820
+ and r0, r5, #255 ;@ 0xff
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03802804 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03802800 ;@ =0x040001C0
+_038027D4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038027D4
+ mov r0, #0
+ bl FUN_03802820
+ and r1, r4, #255 ;@ 0xff
+ ldr r0, _03802804 ;@ =0x040001C2
+ strh r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03802800: .word 0x040001C0
+_03802804: .word 0x040001C2
+
+ arm_func_start FUN_03802808
+FUN_03802808: ;@ 0x03802808
+ ldr r1, _03802818 ;@ =0x00008202
+ ldr r0, _0380281C ;@ =0x040001C0
+ strh r1, [r0]
+ bx lr
+_03802818: .word 0x00008202
+_0380281C: .word 0x040001C0
+
+ arm_func_start FUN_03802820
+FUN_03802820: ;@ 0x03802820
+ ldr r1, _03802834 ;@ =0x00008002
+ orr r1, r1, r0, lsl #11
+ ldr r0, _03802838 ;@ =0x040001C0
+ strh r1, [r0]
+ bx lr
+_03802834: .word 0x00008002
+_03802838: .word 0x040001C0
+
+ arm_func_start FUN_0380283C
+FUN_0380283C: ;@ 0x0380283C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ cmp r4, #1
+ beq _03802860
+ cmp r4, #2
+ beq _03802878
+ cmp r4, #3
+ beq _0380286C
+ b _0380288C
+_03802860:
+ mov r0, #16
+ bl FUN_038026B0
+ b _03802890
+_0380286C:
+ mov r0, #48 ;@ 0x30
+ bl FUN_038026DC
+ b _03802890
+_03802878:
+ mov r0, #32
+ bl FUN_038026B0
+ mov r0, #16
+ bl FUN_038026DC
+ b _03802890
+_0380288C:
+ bl FUN_037FB1F0
+_03802890:
+ ldr r0, _038028A0 ;@ =_03807670
+ str r4, [r0]
+ ldmia sp!, {r4, lr}
+ bx lr
+_038028A0: .word _03807670
+
+ arm_func_start FUN_038028A4
+FUN_038028A4: ;@ 0x038028A4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ cmp r0, #15
+ addls pc, pc, r0, lsl #2
+ b _038029C4
+ b _038029C4
+ b _038028F8
+ b _0380290C
+ b _03802920
+ b _03802934
+ b _03802940
+ b _0380294C
+ b _03802958
+ b _03802964
+ b _03802970
+ b _0380297C
+ b _03802988
+ b _03802994
+ b _038029A0
+ b _038029B8
+ b _038029AC
+_038028F8:
+ mov r0, #1
+ bl FUN_03802BC8
+ mov r0, #1
+ bl FUN_0380283C
+ b _038029C4
+_0380290C:
+ mov r0, #3
+ bl FUN_03802BC8
+ mov r0, #3
+ bl FUN_0380283C
+ b _038029C4
+_03802920:
+ mov r0, #2
+ bl FUN_03802BC8
+ mov r0, #2
+ bl FUN_0380283C
+ b _038029C4
+_03802934:
+ mov r0, #4
+ bl FUN_038026DC
+ b _038029C4
+_03802940:
+ mov r0, #4
+ bl FUN_038026B0
+ b _038029C4
+_0380294C:
+ mov r0, #8
+ bl FUN_038026DC
+ b _038029C4
+_03802958:
+ mov r0, #8
+ bl FUN_038026B0
+ b _038029C4
+_03802964:
+ mov r0, #12
+ bl FUN_038026DC
+ b _038029C4
+_03802970:
+ mov r0, #12
+ bl FUN_038026B0
+ b _038029C4
+_0380297C:
+ mov r0, #1
+ bl FUN_038026DC
+ b _038029C4
+_03802988:
+ mov r0, #1
+ bl FUN_038026B0
+ b _038029C4
+_03802994:
+ mov r0, #2
+ bl FUN_038026B0
+ b _038029C4
+_038029A0:
+ mov r0, #2
+ bl FUN_038026DC
+ b _038029C4
+_038029AC:
+ mov r0, #64 ;@ 0x40
+ bl FUN_038026B0
+ b _038029C4
+_038029B8:
+ bl FUN_037FBAA8
+ mov r0, #64 ;@ 0x40
+ bl FUN_038026DC
+_038029C4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038029D0
+FUN_038029D0: ;@ 0x038029D0
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, lr}
+ sub sp, sp, #4
+ mov r5, #0
+ ldr r0, _03802B94 ;@ =0x04000208
+ ldrh r4, [r0]
+ strh r5, [r0]
+ bl FUN_037FB05C
+ mov r9, r0
+ mvn r0, #-33554432 ;@ 0xfe000000
+ bl FUN_037F8858
+ mov r8, r0
+ mov r0, r5
+ bl FUN_03802700
+ mov r7, r0
+ mov r0, #2
+ bl FUN_03802BC8
+ mov r0, #2
+ bl FUN_0380283C
+ mov r0, #2
+ bl FUN_0380283C
+ bl FUN_037FBAA8
+ mov r0, #1
+ bl FUN_038026B0
+ ldr r0, _03802B98 ;@ =_03809F30
+ ldrh r0, [r0]
+ ands r0, r0, #1
+ beq _03802A58
+ ldr r0, _03802B9C ;@ =_03809F2C
+ ldrh r0, [r0]
+ orr r1, r0, #16384 ;@ 0x4000
+ ldr r0, _03802BA0 ;@ =0x04000132
+ strh r1, [r0]
+ mov r0, #4096 ;@ 0x1000
+ bl FUN_037F8894
+_03802A58:
+ ldr r0, _03802B98 ;@ =_03809F30
+ ldrh r0, [r0]
+ ands r0, r0, #4
+ beq _03802A70
+ mov r0, #4194304 ;@ 0x400000
+ bl FUN_037F8894
+_03802A70:
+ ldr r0, _03802B98 ;@ =_03809F30
+ ldrh r0, [r0]
+ ands r0, r0, #2
+ beq _03802AB4
+ ldr r0, _03802BA4 ;@ =0x04000134
+ ldrh r6, [r0]
+ mov r5, #1
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #64 ;@ 0x40
+ mov r1, #0
+ bl FUN_037FB90C
+ mov r0, #256 ;@ 0x100
+ mov r1, r0
+ bl FUN_037FB90C
+ mov r0, #128 ;@ 0x80
+ bl FUN_037F8894
+_03802AB4:
+ ldr r0, _03802B98 ;@ =_03809F30
+ ldrh r0, [r0]
+ ands r0, r0, #8
+ beq _03802ACC
+ mov r0, #1048576 ;@ 0x100000
+ bl FUN_037F8894
+_03802ACC:
+ ldr r0, _03802B98 ;@ =_03809F30
+ ldrh r0, [r0]
+ ands r0, r0, #16
+ beq _03802AE4
+ mov r0, #8192 ;@ 0x2000
+ bl FUN_037F8894
+_03802AE4:
+ mov r0, r9
+ bl FUN_037FB070
+ ldr r1, _03802B94 ;@ =0x04000208
+ ldrh r0, [r1]
+ mov r0, #1
+ strh r0, [r1]
+ bl FUN_03802BAC
+ mov r0, #0
+ mov r1, r7
+ bl FUN_03802794
+ ldr r0, _03802B98 ;@ =_03809F30
+ ldrh r1, [r0]
+ ands r0, r1, #32
+ movne r0, #6
+ moveq r0, #7
+ ands r1, r1, #64 ;@ 0x40
+ movne r7, #4
+ moveq r7, #5
+ bl FUN_038028A4
+ mov r0, r7
+ bl FUN_038028A4
+ cmp r5, #0
+ ldrne r0, _03802BA4 ;@ =0x04000134
+ strneh r6, [r0]
+ mov r0, #1
+ bl FUN_038026DC
+ bl FUN_037FBA54
+ mov r1, #0
+ ldr r0, _03802BA8 ;@ =_03809F38
+ str r1, [r0, #32]
+ mov r0, #98 ;@ 0x62
+ mov r2, r1
+ bl FUN_03802654
+ bl FUN_037FB05C
+ mov r0, r8
+ bl FUN_037F88CC
+ mov r0, r9
+ bl FUN_037FB070
+ ldr r1, _03802B94 ;@ =0x04000208
+ ldrh r0, [r1]
+ strh r4, [r1]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, lr}
+ bx lr
+_03802B94: .word 0x04000208
+_03802B98: .word _03809F30
+_03802B9C: .word _03809F2C
+_03802BA0: .word 0x04000132
+_03802BA4: .word 0x04000134
+_03802BA8: .word _03809F38
+
+ arm_func_start FUN_03802BAC
+FUN_03802BAC: ;@ 0x03802BAC
+ ldr ip, _03802BB4 ;@ =SVC_Stop
+ bx ip
+_03802BB4: .word SVC_Stop
+
+ arm_func_start FUN_03802BB8
+FUN_03802BB8: ;@ 0x03802BB8
+ ldr r0, _03802BC4 ;@ =_03809F68
+ ldr r0, [r0]
+ bx lr
+_03802BC4: .word _03809F68
+
+ arm_func_start FUN_03802BC8
+FUN_03802BC8: ;@ 0x03802BC8
+ cmp r0, #15
+ ldrle r1, _03802BE4 ;@ =_03809F68
+ strle r0, [r1]
+ movle r1, #0
+ ldrle r0, _03802BE8 ;@ =_03809F64
+ strle r1, [r0]
+ bx lr
+_03802BE4: .word _03809F68
+_03802BE8: .word _03809F64
+
+ arm_func_start FUN_03802BEC
+FUN_03802BEC: ;@ 0x03802BEC
+ stmdb sp!, {r4, r5, r6, lr}
+ ldr r0, _03802D04 ;@ =_03809F68
+ ldr r3, [r0]
+ cmp r3, #0
+ bne _03802C28
+ mov r0, #3
+ mov r1, #102 ;@ 0x66
+ mov r2, #1
+ mov r3, r2
+ bl FUN_03801254
+ cmp r0, #0
+ beq _03802CFC
+ mov r0, #1
+ bl FUN_03802BC8
+ b _03802CFC
+_03802C28:
+ cmp r3, #4
+ bge _03802C54
+ ldr r0, _03802D08 ;@ =_03807670
+ ldr r0, [r0]
+ cmp r3, r0
+ beq _03802CFC
+ mov r0, #3
+ mov r1, #102 ;@ 0x66
+ mov r2, #1
+ bl FUN_03801254
+ b _03802CFC
+_03802C54:
+ ldr r6, _03802D0C ;@ =_03807674
+ sub r1, r3, #4
+ mov r0, #12
+ mul r5, r1, r0
+ add r4, r6, r5
+ ldr r0, _03802D10 ;@ =_03809F64
+ ldr r0, [r0]
+ ldrh r1, [r4, #10]
+ bl _u32_div_f
+ ldr r5, [r6, r5]
+ ldr lr, [r4, #4]
+ mov r3, #0
+ mov r2, #-2147483648 ;@ 0x80000000
+ mov ip, r3, lsr r0
+ rsb r1, r0, #32
+ orr ip, ip, r2, lsl r1
+ sub r1, r0, #32
+ orr ip, ip, r2, lsr r1
+ and r0, lr, r2, lsr r0
+ and r1, r5, ip
+ cmp r0, r3
+ cmpeq r1, r3
+ movne r3, #1
+ moveq r3, #2
+ ldr r0, _03802D10 ;@ =_03809F64
+ ldr r1, [r0]
+ add ip, r1, #1
+ str ip, [r0]
+ ldrh r2, [r4, #8]
+ ldrh r1, [r4, #10]
+ mul r1, r2, r1
+ cmp ip, r1
+ movcs r1, #0
+ strcs r1, [r0]
+ ldr r0, _03802D08 ;@ =_03807670
+ ldr r0, [r0]
+ cmp r3, r0
+ beq _03802CFC
+ mov r0, #3
+ mov r1, #102 ;@ 0x66
+ mov r2, #1
+ bl FUN_03801254
+_03802CFC:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_03802D04: .word _03809F68
+_03802D08: .word _03807670
+_03802D0C: .word _03807674
+_03802D10: .word _03809F64
+
+ arm_func_start FUN_03802D14
+FUN_03802D14: ;@ 0x03802D14
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ ldr r4, _03802E6C ;@ =_03809F6C
+ ldrh r5, [r4, #38] ;@ 0x26
+ and r0, r5, #4
+ cmp r0, #4
+ ldrh r6, [r4, #56] ;@ 0x38
+ ldrneh r7, [r4, #58] ;@ 0x3a
+ ldreq r7, _03802E70 ;@ =0x0000FFFF
+ bl FUN_0380122C
+ cmp r0, #0
+ bne _03802D80
+ mov r0, #2
+ bl FUN_03801384
+ cmp r0, #0
+ beq _03802D80
+ and r0, r5, #1
+ cmp r0, #1
+ bne _03802D70
+ bl FUN_038034CC
+ tst r5, #2
+ moveq r7, r0
+ eorne r7, r0, #32768 ;@ 0x8000
+ b _03802D80
+_03802D70:
+ bl FUN_03803594
+ tst r5, #2
+ moveq r7, r0
+ eorne r7, r0, #128 ;@ 0x80
+_03802D80:
+ and r0, r5, #1
+ ldr r3, _03802E74 ;@ =0x027FFC00
+ ldr r1, [r4, #44] ;@ 0x2c
+ cmp r0, #1
+ bne _03802DB0
+ ldr r2, [r4, #40] ;@ 0x28
+ strh r7, [r2, r1]!
+ str r2, [r3, #912] ;@ 0x390
+ add r3, r3, #916 ;@ 0x394
+ strh r7, [r3]
+ add r1, r1, #2
+ b _03802DE8
+_03802DB0:
+ and r7, r7, #255 ;@ 0xff
+ tst r1, #1
+ bne _03802DC8
+ mov r6, r7
+ add r1, r1, #1
+ b _03802DE8
+_03802DC8:
+ orr r0, r6, r7, lsl #8
+ ldr r2, [r4, #40] ;@ 0x28
+ sub r1, r1, #1
+ strh r0, [r2, r1]!
+ str r2, [r3, #912] ;@ 0x390
+ add r3, r3, #916 ;@ 0x394
+ strh r0, [r3]
+ add r1, r1, #2
+_03802DE8:
+ strh r6, [r4, #56] ;@ 0x38
+ strh r7, [r4, #58] ;@ 0x3a
+ ldr r0, [r4, #48] ;@ 0x30
+ cmp r1, r0
+ movcs r1, #0
+ str r1, [r4, #44] ;@ 0x2c
+ bcc _03802E64
+ ldrh r0, [r4, #36] ;@ 0x24
+ and r0, r0, #16
+ cmp r0, #16
+ bne _03802E24
+ mov r0, #81 ;@ 0x51
+ mov r1, #0
+ bl FUN_038013A0
+ b _03802E64
+_03802E24:
+ mov r0, #2
+ mov r1, #66 ;@ 0x42
+ mov r2, #0
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03802E4C
+ mov r0, #81 ;@ 0x51
+ mov r1, #4
+ bl FUN_038013A0
+ b _03802E64
+_03802E4C:
+ mov r0, #4
+ str r0, [r4, #32]
+ ldr r1, _03802E78 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+_03802E64:
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03802E6C: .word _03809F6C
+_03802E70: .word 0x0000FFFF
+_03802E74: .word 0x027FFC00
+_03802E78: .word 0x0400010E
+
+ arm_func_start FUN_03802E7C
+FUN_03802E7C: ;@ 0x03802E7C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl FUN_03802D14
+ ldr r1, _03802EB0 ;@ =0x0380FFF8
+ ldr r0, [r1]
+ orr r0, r0, #64 ;@ 0x40
+ str r0, [r1]
+ mov r1, #64 ;@ 0x40
+ ldr r0, _03802EB4 ;@ =0x04000214
+ str r1, [r0]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03802EB0: .word 0x0380FFF8
+_03802EB4: .word 0x04000214
+
+ arm_func_start FUN_03802EB8
+FUN_03802EB8: ;@ 0x03802EB8
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ ldr r2, [r5, #4]
+ cmp r2, #64 ;@ 0x40
+ beq _03802EE4
+ cmp r2, #65 ;@ 0x41
+ beq _03802FB0
+ cmp r2, #66 ;@ 0x42
+ beq _0380304C
+ b _038030F0
+_03802EE4:
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #2
+ bl FUN_03801384
+ cmp r0, #0
+ bne _03802F1C
+ mov r0, r4
+ bl FUN_037FB070
+ ldr r0, [r5, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl FUN_038013A0
+ b _038030F0
+_03802F1C:
+ mov r0, #2
+ bl FUN_0380136C
+ mov r0, r4
+ bl FUN_037FB070
+ ldr r0, [r5, #8]
+ and r0, r0, #1
+ cmp r0, #1
+ bne _03802F68
+ bl FUN_038034CC
+ ldr r1, [r5, #8]
+ ands r1, r1, #2
+ eorne r0, r0, #32768 ;@ 0x8000
+ movne r0, r0, lsl #16
+ movne r0, r0, lsr #16
+ ldr r1, _038030FC ;@ =0x027FFF94
+ strh r0, [r1]
+ ldr r0, _03803100 ;@ =0x027FFF90
+ str r1, [r0]
+ b _03802F90
+_03802F68:
+ bl FUN_03803594
+ ldr r1, [r5, #8]
+ ands r1, r1, #2
+ eorne r0, r0, #128 ;@ 0x80
+ movne r0, r0, lsl #16
+ movne r0, r0, lsr #16
+ ldr r1, _038030FC ;@ =0x027FFF94
+ strh r0, [r1]
+ ldr r0, _03803100 ;@ =0x027FFF90
+ str r1, [r0]
+_03802F90:
+ ldr r0, [r5, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl FUN_038013A0
+ mov r0, #2
+ bl FUN_03801328
+ b _038030F0
+_03802FB0:
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldr r1, [r0, #32]
+ cmp r1, #1
+ bne _03803038
+ mov r1, #0
+ strh r1, [r0, #58] ;@ 0x3a
+ strh r1, [r0, #56] ;@ 0x38
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #64 ;@ 0x40
+ bl FUN_037F8894
+ mov r0, #64 ;@ 0x40
+ ldr r1, _03803108 ;@ =FUN_03802E7C
+ bl FUN_03803898
+ bl FUN_0380382C
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldrh r2, [r0, #52] ;@ 0x34
+ ldr r1, _0380310C ;@ =0x0400010C
+ strh r2, [r1]
+ ldrh r0, [r0, #54] ;@ 0x36
+ orr r1, r0, #192 ;@ 0xc0
+ ldr r0, _03803110 ;@ =0x0400010E
+ strh r1, [r0]
+ mov r0, r4
+ bl FUN_037FB070
+ ldr r0, [r5, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl FUN_038013A0
+ mov r1, #2
+ ldr r0, _03803104 ;@ =_03809F6C
+ str r1, [r0, #32]
+ b _038030F0
+_03803038:
+ mov r0, r2, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ b _038030F0
+_0380304C:
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldr r1, [r0, #32]
+ sub r0, r1, #3
+ cmp r0, #1
+ bhi _038030CC
+ ldr r1, _03803110 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #64 ;@ 0x40
+ mov r1, #0
+ bl FUN_03803898
+ bl FUN_038037E0
+ mov r0, r4
+ bl FUN_037FB070
+ ldr r0, _03803104 ;@ =_03809F6C
+ ldr r0, [r0, #32]
+ cmp r0, #3
+ bne _038030B0
+ mov r0, #66 ;@ 0x42
+ mov r1, #0
+ bl FUN_038013A0
+ b _038030BC
+_038030B0:
+ mov r0, #81 ;@ 0x51
+ mov r1, #0
+ bl FUN_038013A0
+_038030BC:
+ mov r1, #0
+ ldr r0, _03803104 ;@ =_03809F6C
+ str r1, [r0, #32]
+ b _038030F0
+_038030CC:
+ cmp r1, #3
+ bne _038030E4
+ mov r0, #66 ;@ 0x42
+ mov r1, #3
+ bl FUN_038013A0
+ b _038030F0
+_038030E4:
+ mov r0, #81 ;@ 0x51
+ mov r1, #3
+ bl FUN_038013A0
+_038030F0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_038030FC: .word 0x027FFF94
+_03803100: .word 0x027FFF90
+_03803104: .word _03809F6C
+_03803108: .word FUN_03802E7C
+_0380310C: .word 0x0400010C
+_03803110: .word 0x0400010E
+
+ arm_func_start FUN_03803114
+FUN_03803114: ;@ 0x03803114
+ cmp r0, #65536 ;@ 0x10000
+ bcs _03803138
+ mov r2, #0
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, #1
+ bx lr
+_03803138:
+ cmp r0, #4194304 ;@ 0x400000
+ bcs _03803160
+ mov r2, #1
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ mov r0, r0, lsr #6
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, r2
+ bx lr
+_03803160:
+ cmp r0, #16777216 ;@ 0x1000000
+ bcs _03803188
+ mov r2, #2
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ mov r0, r0, lsr #8
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, #1
+ bx lr
+_03803188:
+ cmp r0, #67108864 ;@ 0x4000000
+ movcs r0, #0
+ bxcs lr
+ mov r2, #3
+ ldr r1, _038031B4 ;@ =_03809F6C
+ strh r2, [r1, #54] ;@ 0x36
+ mov r0, r0, lsr #10
+ rsb r0, r0, #65536 ;@ 0x10000
+ strh r0, [r1, #52] ;@ 0x34
+ mov r0, #1
+ bx lr
+_038031B4: .word _03809F6C
+
+ arm_func_start FUN_038031B8
+FUN_038031B8: ;@ 0x038031B8
+ stmdb sp!, {r4, lr}
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _038031E4
+ mov r4, #0
+ mov r3, r4
+ ldr r1, _03803478 ;@ =_03809F6C
+_038031D0:
+ mov r2, r4, lsl #1
+ strh r3, [r1, r2]
+ add r4, r4, #1
+ cmp r4, #16
+ blt _038031D0
+_038031E4:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r2, r1, lsl #1
+ ldr r1, _03803478 ;@ =_03809F6C
+ strh r0, [r1, r2]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03803470
+ ldrh r3, [r1]
+ and r0, r3, #65280 ;@ 0xff00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ sub r0, r4, #64 ;@ 0x40
+ cmp r0, #3
+ addls pc, pc, r0, lsl #2
+ b _03803464
+ b _03803230
+ b _03803270
+ b _03803378
+ b _038033DC
+_03803230:
+ mov r0, #2
+ mov r1, r4
+ mov r2, #1
+ and r3, r3, #255 ;@ 0xff
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03803258
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+_03803258:
+ mov r1, #0
+ ldr r0, _0380347C ;@ =0x027FFF94
+ strh r1, [r0]
+ ldr r0, _03803480 ;@ =0x027FFF90
+ str r1, [r0]
+ b _03803470
+_03803270:
+ ldr r0, [r1, #32]
+ cmp r0, #0
+ beq _0380328C
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038013A0
+ b _03803470
+_0380328C:
+ and r0, r3, #255 ;@ 0xff
+ strh r0, [r1, #36] ;@ 0x24
+ ldrh r2, [r1, #2]
+ ldrh r0, [r1, #4]
+ orr r3, r0, r2, lsl #16
+ cmp r3, #33554432 ;@ 0x2000000
+ bcc _038032B0
+ cmp r3, #37748736 ;@ 0x2400000
+ bcc _038032C0
+_038032B0:
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03803470
+_038032C0:
+ str r3, [r1, #40] ;@ 0x28
+ ldrh r2, [r1, #6]
+ ldrh r0, [r1, #8]
+ orr r2, r0, r2, lsl #16
+ add r0, r3, r2
+ cmp r0, #37748736 ;@ 0x2400000
+ bls _038032EC
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03803470
+_038032EC:
+ str r2, [r1, #48] ;@ 0x30
+ ldrh r2, [r1, #10]
+ ldrh r0, [r1, #12]
+ orr r0, r0, r2, lsl #16
+ bl FUN_03803114
+ cmp r0, #0
+ bne _03803318
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03803470
+_03803318:
+ mov r2, #0
+ ldr r0, _03803478 ;@ =_03809F6C
+ str r2, [r0, #44] ;@ 0x2c
+ ldrh r1, [r0, #36] ;@ 0x24
+ and r1, r1, #7
+ strh r1, [r0, #38] ;@ 0x26
+ mov r0, #2
+ mov r1, r4
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03803354
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03803470
+_03803354:
+ mov r1, #0
+ ldr r0, _0380347C ;@ =0x027FFF94
+ strh r1, [r0]
+ ldr r0, _03803480 ;@ =0x027FFF90
+ str r1, [r0]
+ mov r1, #1
+ ldr r0, _03803478 ;@ =_03809F6C
+ str r1, [r0, #32]
+ b _03803470
+_03803378:
+ ldr r0, [r1, #32]
+ cmp r0, #2
+ beq _03803394
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038013A0
+ b _03803470
+_03803394:
+ mov r0, #2
+ mov r1, r4
+ mov r2, #0
+ bl FUN_03801254
+ cmp r0, #0
+ bne _038033BC
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+ b _03803470
+_038033BC:
+ mov r1, #3
+ ldr r0, _03803478 ;@ =_03809F6C
+ str r1, [r0, #32]
+ ldr r1, _03803484 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+ b _03803470
+_038033DC:
+ ldr r0, [r1, #32]
+ cmp r0, #2
+ beq _038033F8
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038013A0
+ b _03803470
+_038033F8:
+ ldrh r2, [r1, #2]
+ ldrh r0, [r1, #4]
+ orr r0, r0, r2, lsl #16
+ bl FUN_03803114
+ cmp r0, #0
+ bne _03803420
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03803470
+_03803420:
+ bl FUN_037FB05C
+ ldr ip, _03803484 ;@ =0x0400010E
+ ldrh r1, [ip]
+ bic r1, r1, #128 ;@ 0x80
+ strh r1, [ip]
+ ldr r1, _03803478 ;@ =_03809F6C
+ ldrh r3, [r1, #52] ;@ 0x34
+ ldr r2, _03803488 ;@ =0x0400010C
+ strh r3, [r2]
+ ldrh r1, [r1, #54] ;@ 0x36
+ orr r1, r1, #192 ;@ 0xc0
+ strh r1, [ip]
+ bl FUN_037FB070
+ mov r0, r4
+ mov r1, #0
+ bl FUN_038013A0
+ b _03803470
+_03803464:
+ mov r0, r4
+ mov r1, #1
+ bl FUN_038013A0
+_03803470:
+ ldmia sp!, {r4, lr}
+ bx lr
+_03803478: .word _03809F6C
+_0380347C: .word 0x027FFF94
+_03803480: .word 0x027FFF90
+_03803484: .word 0x0400010E
+_03803488: .word 0x0400010C
+
+ arm_func_start FUN_0380348C
+FUN_0380348C: ;@ 0x0380348C
+ mov r3, #0
+ ldr r0, _038034C4 ;@ =_03809F6C
+ str r3, [r0, #32]
+ mov r2, r3
+_0380349C:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _0380349C
+ ldr r1, _038034C8 ;@ =0x0400010E
+ ldrh r0, [r1]
+ bic r0, r0, #128 ;@ 0x80
+ strh r0, [r1]
+ bx lr
+_038034C4: .word _03809F6C
+_038034C8: .word 0x0400010E
+
+ arm_func_start FUN_038034CC
+FUN_038034CC: ;@ 0x038034CC
+ ldr r1, _03803580 ;@ =0x040001C0
+_038034D0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038034D0
+ ldr r0, _03803584 ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #228 ;@ 0xe4
+ ldr r0, _03803588 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03803580 ;@ =0x040001C0
+_038034F4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038034F4
+ mov r1, #0
+ ldr r0, _03803588 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r2, _03803580 ;@ =0x040001C0
+_03803510:
+ ldrh r0, [r2]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03803510
+ ldr r1, _03803588 ;@ =0x040001C2
+ ldrh r0, [r1]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r0, r0, lsl #24
+ mov r3, r0, lsr #16
+ ldr r0, _0380358C ;@ =0x00008201
+ strh r0, [r2]
+ mov r0, #0
+ strh r0, [r1]
+ ldr r1, _03803580 ;@ =0x040001C0
+_0380354C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380354C
+ ldr r0, _03803588 ;@ =0x040001C2
+ ldrh r0, [r0]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ orr r1, r3, r0, lsr #16
+ ldr r0, _03803590 ;@ =0x00007FF8
+ and r0, r1, r0
+ mov r0, r0, lsl #17
+ mov r0, r0, lsr #16
+ bx lr
+_03803580: .word 0x040001C0
+_03803584: .word 0x00008A01
+_03803588: .word 0x040001C2
+_0380358C: .word 0x00008201
+_03803590: .word 0x00007FF8
+
+ arm_func_start FUN_03803594
+FUN_03803594: ;@ 0x03803594
+ ldr r1, _03803648 ;@ =0x040001C0
+_03803598:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03803598
+ ldr r0, _0380364C ;@ =0x00008A01
+ strh r0, [r1]
+ mov r1, #236 ;@ 0xec
+ ldr r0, _03803650 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03803648 ;@ =0x040001C0
+_038035BC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038035BC
+ mov r1, #0
+ ldr r0, _03803650 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r2, _03803648 ;@ =0x040001C0
+_038035D8:
+ ldrh r0, [r2]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038035D8
+ ldr r1, _03803650 ;@ =0x040001C2
+ ldrh r0, [r1]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r0, r0, lsl #24
+ mov r3, r0, lsr #16
+ ldr r0, _03803654 ;@ =0x00008201
+ strh r0, [r2]
+ mov r0, #0
+ strh r0, [r1]
+ ldr r1, _03803648 ;@ =0x040001C0
+_03803614:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03803614
+ ldr r0, _03803650 ;@ =0x040001C2
+ ldrh r0, [r0]
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ orr r1, r3, r0, lsr #16
+ ldr r0, _03803658 ;@ =0x00007F80
+ and r0, r1, r0
+ mov r0, r0, lsl #9
+ mov r0, r0, lsr #16
+ bx lr
+_03803648: .word 0x040001C0
+_0380364C: .word 0x00008A01
+_03803650: .word 0x040001C2
+_03803654: .word 0x00008201
+_03803658: .word 0x00007F80
+_0380365C:
+ mov ip, #67108864 ;@ 0x4000000
+ add r1, ip, #520 ;@ 0x208
+ ldrh r0, [r1]
+ tst r0, r0
+ bxeq lr
+ ldr r3, [ip, #528] ;@ 0x210
+ ldr r1, [ip, #532] ;@ 0x214
+ ands r2, r1, r3
+ bxeq lr
+ ldr r0, _038037C8 ;@ =0x01DF3FFF
+ tst r2, r0
+ streq r2, [ip, #532] ;@ 0x214
+ bxeq lr
+ stmfd sp!, {lr}
+ mrs r0, SPSR
+ stmfd sp!, {r0}
+ stmdb sp, {sp, lr}^
+ sub sp, sp, #8
+ mov r0, #159 ;@ 0x9f
+ msr CPSR_c, r0
+ ldr r1, _038037CC ;@ =_0380779C
+ ldrh r0, [r1, #2]
+ add r0, r0, #1
+ strh r0, [r1, #2]
+ ldr r1, _038037D0 ;@ =_03809FA8
+ cmp r0, #1
+ moveq r0, sp
+ ldreq sp, [r1, #4]
+ streq r0, [r1, #4]
+ stmfd sp!, {r3}
+ ldr r1, _038037D4 ;@ =_038072C8
+ ldr r0, [r1]
+ tst r0, r2
+ strne r0, [ip, #532] ;@ 0x214
+ ldrne r0, [r1, #4]
+ ldrne r3, _038037D8 ;@ =_038075F8
+ ldrne r0, [r3, r0, lsl #2]
+ bne _03803738
+ mov r3, #1
+_038036F8:
+ ldr r0, [r1, r3, lsl #3]
+ tst r0, r2
+ addeq r3, r3, #1
+ beq _038036F8
+ str r0, [ip, #532] ;@ 0x214
+ add r0, r1, r3, lsl #3
+ ldr r2, [r0, #4]
+ ldr r3, _038037D8 ;@ =_038075F8
+ ldr r0, [r3, r2, lsl #2]
+ ldr r2, _038037CC ;@ =_0380779C
+ ldrh r3, [r2, #2]
+ cmp r3, #1
+ ldreq r2, [r1]
+ streq r2, [ip, #528] ;@ 0x210
+ moveq r2, #31
+ msreq CPSR_c, r2
+_03803738:
+ ldr r1, [ip, #528] ;@ 0x210
+ stmfd sp!, {r1}
+ adr lr, _03803748
+ bx r0
+_03803748:
+ mov r0, #159 ;@ 0x9f
+ msr CPSR_c, r0
+ mov ip, #67108864 ;@ 0x4000000
+ ldmia sp!, {r0}
+ ldr r1, [ip, #528] ;@ 0x210
+ eor r2, r0, r1
+ and r1, r2, r1
+ and r0, r2, r0
+ ldmia sp!, {r3}
+ orr r3, r3, r1
+ bic r3, r3, r0
+ str r3, [ip, #528] ;@ 0x210
+ ldr r2, _038037CC ;@ =_0380779C
+ ldr r3, _038037D0 ;@ =_03809FA8
+ ldrh r0, [r2, #2]
+ subs r1, r0, #1
+ strh r1, [r2, #2]
+ moveq r0, sp
+ ldreq sp, [r3, #4]
+ streq r0, [r3, #4]
+ mov r0, #146 ;@ 0x92
+ msr CPSR_c, r0
+ ldmia sp, {sp, lr}^
+ nop ;@ (mov r0, r0)
+ add sp, sp, #8
+ ldmia sp!, {r0}
+ msr SPSR_fc, r0
+ tst r1, r1
+ ldreq r0, _038037DC ;@ =FUN_037F8590
+ addeq lr, pc, #0
+ bxeq r0
+ ldmia sp!, {pc}
+_038037C8: .word 0x01DF3FFF
+_038037CC: .word _0380779C
+_038037D0: .word _03809FA8
+_038037D4: .word _038072C8
+_038037D8: .word _038075F8
+_038037DC: .word FUN_037F8590
+
+ arm_func_start FUN_038037E0
+FUN_038037E0: ;@ 0x038037E0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03803820 ;@ =0x0380FFFC
+ ldr r1, [r0]
+ ldr r0, _03803824 ;@ =_0380365C
+ cmp r1, r0
+ bne _03803814
+ bl FUN_037FB05C
+ ldr r1, _03803828 ;@ =_03809FA8
+ ldr r2, [r1, #12]
+ ldr r1, _03803820 ;@ =0x0380FFFC
+ str r2, [r1]
+ bl FUN_037FB070
+_03803814:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803820: .word 0x0380FFFC
+_03803824: .word _0380365C
+_03803828: .word _03809FA8
+
+ arm_func_start FUN_0380382C
+FUN_0380382C: ;@ 0x0380382C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _03803888 ;@ =0x0380FFFC
+ ldr r2, [r0]
+ ldr r0, _0380388C ;@ =_0380365C
+ cmp r2, r0
+ beq _0380387C
+ mov r1, #0
+ ldr r0, _03803890 ;@ =_03809FA8
+ str r1, [r0]
+ ldr r1, _03803894 ;@ =0x0380FE80
+ str r1, [r0, #4]
+ mov r1, #64 ;@ 0x40
+ str r1, [r0, #8]
+ str r2, [r0, #12]
+ bl FUN_037FB05C
+ ldr r2, _0380388C ;@ =_0380365C
+ ldr r1, _03803888 ;@ =0x0380FFFC
+ str r2, [r1]
+ bl FUN_037FB070
+_0380387C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803888: .word 0x0380FFFC
+_0380388C: .word _0380365C
+_03803890: .word _03809FA8
+_03803894: .word 0x0380FE80
+
+ arm_func_start FUN_03803898
+FUN_03803898: ;@ 0x03803898
+ mov ip, #0
+ ldr r2, _038038BC ;@ =_038075F8
+_038038A0:
+ ands r3, r0, #1
+ strne r1, [r2, ip, lsl #2]
+ mov r0, r0, lsr #1
+ add ip, ip, #1
+ cmp ip, #25
+ blt _038038A0
+ bx lr
+_038038BC: .word _038075F8
+
+ arm_func_start FUN_038038C0
+FUN_038038C0: ;@ 0x038038C0
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, #1
+ mov r5, #13
+ mov r4, #0
+ b _038038E4
+_038038DC:
+ mov r0, r6
+ bl FUN_037F8CB4
+_038038E4:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ bne _038038DC
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_03803908
+FUN_03803908: ;@ 0x03803908
+ stmdb sp!, {r4, lr}
+ mov r4, r1
+ ldr r1, [r4]
+ cmp r1, #0
+ bne _03803920
+ bl FUN_037F8A18
+_03803920:
+ ldr r0, [r4, #4]
+ bl FUN_037FB070
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03803930
+FUN_03803930: ;@ 0x03803930
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r5, r0
+ mov r4, r1
+ bl FUN_037FB05C
+ str r0, [r4, #4]
+ ldr r0, _0380398C ;@ =0x027FFFE8
+ bl FUN_037F8AEC
+ and r0, r0, #128 ;@ 0x80
+ str r0, [r4]
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _03803974
+ mov r0, r5
+ bl FUN_037F8AFC
+ cmp r0, #0
+ bne _0380397C
+_03803974:
+ mov r0, #1
+ b _03803980
+_0380397C:
+ mov r0, #0
+_03803980:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_0380398C: .word 0x027FFFE8
+
+ arm_func_start FUN_03803990
+FUN_03803990: ;@ 0x03803990
+ ldr r3, [r0]
+ ldr r2, _038039C0 ;@ =0x04000204
+ ldrh r1, [r2]
+ bic r1, r1, #12
+ orr r1, r1, r3, lsl #2
+ strh r1, [r2]
+ ldr r1, [r0, #4]
+ ldrh r0, [r2]
+ bic r0, r0, #16
+ orr r0, r0, r1, lsl #4
+ strh r0, [r2]
+ bx lr
+_038039C0: .word 0x04000204
+
+ arm_func_start FUN_038039C4
+FUN_038039C4: ;@ 0x038039C4
+ ldr r2, _03803A08 ;@ =0x04000204
+ ldrh r1, [r2]
+ and r1, r1, #12
+ mov r1, r1, asr #2
+ str r1, [r0]
+ ldrh r1, [r2]
+ and r1, r1, #16
+ mov r1, r1, asr #4
+ str r1, [r0, #4]
+ ldrh r0, [r2]
+ bic r0, r0, #12
+ orr r0, r0, #12
+ strh r0, [r2]
+ ldrh r0, [r2]
+ bic r0, r0, #16
+ strh r0, [r2]
+ bx lr
+_03803A08: .word 0x04000204
+
+ arm_func_start FUN_03803A0C
+FUN_03803A0C: ;@ 0x03803A0C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #16
+ mov r4, #1
+ ldr r2, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r2]
+ ldr r0, _03803B24 ;@ =0x0000FFFF
+ cmp r1, r0
+ moveq r0, #0
+ beq _03803B14
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+ cmp r0, #1
+ moveq r0, #0
+ beq _03803B14
+ ldr r0, _03803B28 ;@ =_03809FB8
+ ldrh r0, [r0, #2]
+ add r1, sp, #0
+ bl FUN_03803930
+ cmp r0, #0
+ bne _03803A70
+ ldr r0, [sp, #4]
+ bl FUN_037FB070
+ mov r0, r4
+ b _03803B14
+_03803A70:
+ add r0, sp, #8
+ bl FUN_038039C4
+ mov r2, #134217728 ;@ 0x8000000
+ ldrb r3, [r2, #178] ;@ 0xb2
+ cmp r3, #150 ;@ 0x96
+ bne _03803A9C
+ ldr r0, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r0]
+ ldrh r0, [r2, #190] ;@ 0xbe
+ cmp r1, r0
+ bne _03803AE4
+_03803A9C:
+ cmp r3, #150 ;@ 0x96
+ beq _03803ABC
+ ldr r0, _03803B20 ;@ =0x027FFC30
+ ldrh r1, [r0]
+ ldr r0, _03803B2C ;@ =0x0801FFFE
+ ldrh r0, [r0]
+ cmp r1, r0
+ bne _03803AE4
+_03803ABC:
+ ldr r2, _03803B20 ;@ =0x027FFC30
+ ldr r1, [r2, #8]
+ mov r0, #134217728 ;@ 0x8000000
+ ldr r0, [r0, #172] ;@ 0xac
+ cmp r1, r0
+ beq _03803AF8
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #31
+ movs r0, r0, lsr #31
+ beq _03803AF8
+_03803AE4:
+ ldr r1, _03803B20 ;@ =0x027FFC30
+ ldrb r0, [r1, #5]
+ orr r0, r0, #2
+ strb r0, [r1, #5]
+ mov r4, #0
+_03803AF8:
+ add r0, sp, #8
+ bl FUN_03803990
+ ldr r0, _03803B28 ;@ =_03809FB8
+ ldrh r0, [r0, #2]
+ add r1, sp, #0
+ bl FUN_03803908
+ mov r0, r4
+_03803B14:
+ add sp, sp, #16
+ ldmia sp!, {r4, lr}
+ bx lr
+_03803B20: .word 0x027FFC30
+_03803B24: .word 0x0000FFFF
+_03803B28: .word _03809FB8
+_03803B2C: .word 0x0801FFFE
+
+ arm_func_start FUN_03803B30
+FUN_03803B30: ;@ 0x03803B30
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r2, _03803B80 ;@ =0x027FFC30
+ ldrh r1, [r2]
+ ldr r0, _03803B84 ;@ =0x0000FFFF
+ cmp r1, r0
+ moveq r0, #0
+ beq _03803B74
+ ldrb r0, [r2, #5]
+ mov r0, r0, lsl #30
+ movs r0, r0, lsr #31
+ bne _03803B64
+ bl FUN_03803A0C
+_03803B64:
+ ldr r0, _03803B80 ;@ =0x027FFC30
+ ldrb r0, [r0, #5]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+_03803B74:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803B80: .word 0x027FFC30
+_03803B84: .word 0x0000FFFF
+
+ arm_func_start FUN_03803B88
+FUN_03803B88: ;@ 0x03803B88
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ str r0, [sp]
+ add r0, sp, #0
+ ldr r1, _03803BC0 ;@ =_03809FB8
+ ldr r2, _03803BC4 ;@ =0x05000001
+ bl FUN_03803BC8
+ bl FUN_037F8A24
+ ldr r1, _03803BC0 ;@ =_03809FB8
+ strh r0, [r1, #2]
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03803BC0: .word _03809FB8
+_03803BC4: .word 0x05000001
+
+ arm_func_start FUN_03803BC8
+FUN_03803BC8: ;@ 0x03803BC8
+ ldr ip, _03803BD0 ;@ =SVC_CpuSet
+ bx ip
+_03803BD0: .word SVC_CpuSet
+
+ arm_func_start FUN_03803BD4
+FUN_03803BD4: ;@ 0x03803BD4
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #3
+ bne _03803C40
+ ldr r0, _03803C50 ;@ =0x01FFFFC0
+ and r0, r1, r0
+ mov r2, r0, lsr #6
+ ldr r1, _03803C54 ;@ =0x04000204
+ ldrh r0, [r1]
+ bic r0, r0, #96 ;@ 0x60
+ orr r0, r0, r2, lsl #5
+ strh r0, [r1]
+ mov r7, #1
+ mov r6, #17
+ mov r5, #18
+ mov r4, #0
+ b _03803C24
+_03803C1C:
+ mov r0, r7
+ bl FUN_037F8CB4
+_03803C24:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ bne _03803C1C
+ b _03803C44
+_03803C40:
+ bl FUN_037FB1F0
+_03803C44:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03803C50: .word 0x01FFFFC0
+_03803C54: .word 0x04000204
+
+ arm_func_start FUN_03803C58
+FUN_03803C58: ;@ 0x03803C58
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #0
+ bl FUN_03803E5C
+ bl FUN_037FBAA8
+ bl FUN_03806A98
+ bl FUN_037FB1F0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_03803C80
+FUN_03803C80: ;@ 0x03803C80
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r1, _03803D80 ;@ =_03807708
+ ldr r3, [r1]
+ mvn r0, #0
+ cmp r3, r0
+ ldreq r0, _03803D84 ;@ =0x027FFC3C
+ ldreq r0, [r0]
+ addeq r0, r0, #10
+ streq r0, [r1]
+ beq _03803D74
+ ldr r0, _03803D88 ;@ =_03809FCC
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03803D74
+ ldr r0, _03803D8C ;@ =_03809FC8
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _03803D74
+ ldr r2, _03803D84 ;@ =0x027FFC3C
+ ldr r0, [r2]
+ cmp r0, r3
+ bcc _03803D74
+ ldr r0, [r2]
+ add r0, r0, #10
+ str r0, [r1]
+ bl FUN_03803B30
+ ldr r1, _03803D8C ;@ =_03809FC8
+ str r0, [r1]
+ bl FUN_03803A0C
+ cmp r0, #0
+ bne _03803D28
+ ldr r0, _03803D90 ;@ =_03807704
+ ldr r0, [r0]
+ cmp r0, #0
+ movne r1, #1
+ ldrne r0, _03803D88 ;@ =_03809FCC
+ strne r1, [r0]
+ bne _03803D74
+ mov r1, #1
+ ldr r0, _03803D8C ;@ =_03809FC8
+ str r1, [r0]
+_03803D28:
+ mov r7, #0
+ ldr r0, _03803D90 ;@ =_03807704
+ str r7, [r0]
+ ldr r0, _03803D8C ;@ =_03809FC8
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _03803D74
+ mov r6, #100 ;@ 0x64
+ mov r5, #13
+ mov r4, #17
+ b _03803D5C
+_03803D54:
+ mov r0, r6
+ bl FUN_037F8E14
+_03803D5C:
+ mov r0, r5
+ mov r1, r4
+ mov r2, r7
+ bl FUN_037FB6DC
+ cmp r0, #0
+ bne _03803D54
+_03803D74:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_03803D80: .word _03807708
+_03803D84: .word 0x027FFC3C
+_03803D88: .word _03809FCC
+_03803D8C: .word _03809FC8
+_03803D90: .word _03807704
+
+ arm_func_start FUN_03803D94
+FUN_03803D94: ;@ 0x03803D94
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r7, r0
+ mov r0, #134217728 ;@ 0x8000000
+ add r6, r0, #4
+ mov r4, #1
+ bl FUN_037F8A24
+ mov r0, r0, lsl #16
+ mov r5, r0, lsr #16
+ mov r0, r5
+ bl FUN_037F8B3C
+ mov r1, #0
+ ldr r0, _03803E3C ;@ =0x0000FFFF
+ eor r2, r0, #3
+ mov r2, r2, lsl #16
+ mov lr, r2, lsr #16
+ eor r2, r0, #132 ;@ 0x84
+ mov r2, r2, lsl #16
+ mov r8, r2, lsr #16
+ b _03803E18
+_03803DE0:
+ mov ip, r0
+ cmp r1, #76 ;@ 0x4c
+ moveq ip, r8
+ beq _03803DF8
+ cmp r1, #77 ;@ 0x4d
+ moveq ip, lr
+_03803DF8:
+ mov r3, r1, lsl #1
+ ldrh r2, [r7, r3]
+ and ip, ip, r2
+ ldrh r2, [r6, r3]
+ cmp ip, r2
+ movne r4, #0
+ bne _03803E20
+ add r1, r1, #1
+_03803E18:
+ cmp r1, #78 ;@ 0x4e
+ blt _03803DE0
+_03803E20:
+ mov r0, r5
+ bl FUN_037F8A18
+ mov r0, r5
+ bl FUN_037F8ABC
+ mov r0, r4
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+_03803E3C: .word 0x0000FFFF
+
+ arm_func_start FUN_03803E40
+FUN_03803E40: ;@ 0x03803E40
+ ldr r1, _03803E54 ;@ =_03809FC0
+ str r0, [r1]
+ ldr r1, _03803E58 ;@ =0x08001000
+ strh r0, [r1]
+ bx lr
+_03803E54: .word _03809FC0
+_03803E58: .word 0x08001000
+
+ arm_func_start FUN_03803E5C
+FUN_03803E5C: ;@ 0x03803E5C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ movs r5, r0
+ beq _03803E9C
+ ldr r0, [r5]
+ cmp r0, #0
+ bne _03803E9C
+ ldr r0, [r5, #68] ;@ 0x44
+ add r0, r0, #1
+ str r0, [r5, #68] ;@ 0x44
+ ldr r1, [r5, #64] ;@ 0x40
+ cmp r1, #0
+ beq _03803E9C
+ ldr r0, [r5, #68] ;@ 0x44
+ cmp r0, r1
+ movhi r5, #0
+_03803E9C:
+ cmp r5, #0
+ beq _03803EB0
+ ldr r0, [r5, #60] ;@ 0x3c
+ cmp r0, #0
+ bne _03803F48
+_03803EB0:
+ bl FUN_037FB05C
+ mov r9, r0
+ ldr r0, _03804068 ;@ =_03809FC0
+ ldr r0, [r0]
+ cmp r0, #2
+ bne _03803F34
+ mov r8, #0
+ ldr r7, _0380406C ;@ =0x027FFFE8
+ ldr r4, _03804070 ;@ =_03809FBC
+ ldr fp, _03804074 ;@ =0x000080E8
+ mov r6, r8
+ mov r5, #1
+ b _03803F2C
+_03803EE4:
+ mov r0, r7
+ bl FUN_037F8AEC
+ ands sl, r0, #128 ;@ 0x80
+ bne _03803F04
+ ldrh r0, [r4]
+ bl FUN_037F8AFC
+ cmp r0, #0
+ bne _03803F24
+_03803F04:
+ mov r0, r6
+ bl FUN_03803E40
+ mov r8, r5
+ cmp sl, #0
+ bne _03803F2C
+ ldrh r0, [r4]
+ bl FUN_037F8B1C
+ b _03803F2C
+_03803F24:
+ mov r0, fp
+ bl FUN_037FB0C0
+_03803F2C:
+ cmp r8, #0
+ beq _03803EE4
+_03803F34:
+ ldr r0, _03804078 ;@ =_03809FEC
+ bl FUN_037FA650
+ mov r0, r9
+ bl FUN_037FB070
+ b _0380405C
+_03803F48:
+ cmp r5, #0
+ beq _0380405C
+ ldr r0, _0380406C ;@ =0x027FFFE8
+ bl FUN_037F8AEC
+ ands r4, r0, #128 ;@ 0x80
+ bne _03803F74
+ ldr r0, _03804070 ;@ =_03809FBC
+ ldrh r0, [r0]
+ bl FUN_037F8AFC
+ cmp r0, #0
+ bne _03804044
+_03803F74:
+ ldr r1, [r5]
+ ldr r0, [r5, #4]
+ cmp r1, r0
+ bne _03803FB0
+ mov r0, #0
+ bl FUN_03803E40
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, [r5, #8]
+ mov r2, #0
+ ldr r3, _0380407C ;@ =FUN_03803E5C
+ bl FUN_037FA75C
+ mov r0, #0
+ str r0, [r5]
+ b _0380402C
+_03803FB0:
+ ands r0, r1, #1
+ beq _03803FF4
+ mov r0, #0
+ bl FUN_03803E40
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, [r5]
+ mov r1, r1, lsr #1
+ add r1, r5, r1, lsl #2
+ ldr r1, [r1, #36] ;@ 0x24
+ mov r2, #0
+ ldr r3, _0380407C ;@ =FUN_03803E5C
+ bl FUN_037FA75C
+ ldr r0, [r5]
+ add r0, r0, #1
+ str r0, [r5]
+ b _0380402C
+_03803FF4:
+ mov r0, #2
+ bl FUN_03803E40
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, [r5]
+ mov r1, r1, lsr #1
+ add r1, r5, r1, lsl #2
+ ldr r1, [r1, #12]
+ mov r2, #0
+ ldr r3, _0380407C ;@ =FUN_03803E5C
+ bl FUN_037FA75C
+ ldr r0, [r5]
+ add r0, r0, #1
+ str r0, [r5]
+_0380402C:
+ cmp r4, #0
+ bne _0380405C
+ ldr r0, _03804070 ;@ =_03809FBC
+ ldrh r0, [r0]
+ bl FUN_037F8B1C
+ b _0380405C
+_03804044:
+ str r5, [sp]
+ ldr r0, _03804078 ;@ =_03809FEC
+ ldr r1, _03804080 ;@ =0x0000020B
+ mov r2, #0
+ ldr r3, _0380407C ;@ =FUN_03803E5C
+ bl FUN_037FA75C
+_0380405C:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_03804068: .word _03809FC0
+_0380406C: .word 0x027FFFE8
+_03804070: .word _03809FBC
+_03804074: .word 0x000080E8
+_03804078: .word _03809FEC
+_0380407C: .word FUN_03803E5C
+_03804080: .word 0x0000020B
+_03804084:
+ mov r0, r1
+ ldr ip, _03804090 ;@ =FUN_03803E5C
+ bx ip
+_03804090: .word FUN_03803E5C
+
+ arm_func_start FUN_03804094
+FUN_03804094: ;@ 0x03804094
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #2
+ bne _038040B0
+ bl FUN_03803C58
+ b _038040B4
+_038040B0:
+ bl FUN_037FB1F0
+_038040B4:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038040C0
+FUN_038040C0: ;@ 0x038040C0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ and r0, r1, #63 ;@ 0x3f
+ cmp r0, #1
+ ldreq r0, _038040F4 ;@ =_03809FD4
+ streq r1, [r0]
+ moveq r1, #1
+ streq r1, [r0, #16]
+ beq _038040E8
+ bl FUN_037FB1F0
+_038040E8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038040F4: .word _03809FD4
+
+ arm_func_start FUN_038040F8
+FUN_038040F8: ;@ 0x038040F8
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r0, _038041C8 ;@ =_03809FC4
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _038041BC
+ mov r1, #1
+ str r1, [r0]
+ ldr r0, _038041CC ;@ =0x04000300
+ ldrh r0, [r0]
+ ands r0, r0, #1
+ beq _038041BC
+ mov r0, #262144 ;@ 0x40000
+ bl FUN_037F88CC
+ mov r5, r0
+ ldr r1, _038041D0 ;@ =0x04000208
+ ldrh r4, [r1]
+ mov r0, #1
+ strh r0, [r1]
+ mov r7, #256 ;@ 0x100
+ ldr r6, _038041D4 ;@ =_03809FD4
+ b _03804158
+_03804150:
+ mov r0, r7
+ bl FUN_037F8CB4
+_03804158:
+ ldr r0, [r6, #16]
+ cmp r0, #1
+ bne _03804150
+ ldr r1, [r6]
+ ldr r0, _038041D8 ;@ =0x01FFFFC0
+ and r0, r1, r0
+ mov r0, r0, lsr #6
+ mov r0, r0, lsl #5
+ add r0, r0, #33554432 ;@ 0x2000000
+ add r0, r0, #4
+ bl FUN_03803D94
+ ldr r2, _038041DC ;@ =0x027FFC30
+ ldrb r1, [r2, #5]
+ bic r1, r1, #1
+ and r0, r0, #255 ;@ 0xff
+ and r0, r0, #1
+ orr r0, r1, r0
+ strb r0, [r2, #5]
+ mov r0, #1
+ bl FUN_038038C0
+ ldr r1, _038041D0 ;@ =0x04000208
+ ldrh r0, [r1]
+ strh r4, [r1]
+ mov r0, r5
+ bl FUN_037F88CC
+_038041BC:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_038041C8: .word _03809FC4
+_038041CC: .word 0x04000300
+_038041D0: .word 0x04000208
+_038041D4: .word _03809FD4
+_038041D8: .word 0x01FFFFC0
+_038041DC: .word 0x027FFC30
+
+ arm_func_start FUN_038041E0
+FUN_038041E0: ;@ 0x038041E0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ bl FUN_037FA4AC
+ bl FUN_037FA920
+ ldr r0, _03804270 ;@ =_03809FEC
+ bl FUN_037FA900
+ ldr r0, _03804274 ;@ =_03809FD0
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _03804264
+ mov r1, #1
+ str r1, [r0]
+ bl FUN_03803B88
+ bl FUN_037F8A24
+ mvn r1, #2
+ cmp r0, r1
+ beq _03804264
+ ldr r1, _03804278 ;@ =_03809FBC
+ strh r0, [r1]
+ bl FUN_037FB5B0
+ mov r0, #13
+ ldr r1, _0380427C ;@ =FUN_038040C0
+ bl FUN_037FB7A8
+ bl FUN_038040F8
+ mov r0, #13
+ ldr r1, _03804280 ;@ =FUN_03804094
+ bl FUN_037FB7A8
+ mov r0, #16
+ ldr r1, _03804284 ;@ =_03804084
+ bl FUN_037FB7A8
+ mov r0, #17
+ ldr r1, _03804288 ;@ =FUN_03803BD4
+ bl FUN_037FB7A8
+_03804264:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03804270: .word _03809FEC
+_03804274: .word _03809FD0
+_03804278: .word _03809FBC
+_0380427C: .word FUN_038040C0
+_03804280: .word FUN_03804094
+_03804284: .word _03804084
+_03804288: .word FUN_03803BD4
+
+ arm_func_start FUN_0380428C
+FUN_0380428C: ;@ 0x0380428C
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl FUN_03804F70
+ ldrh r1, [sp]
+ ands r0, r1, #1
+ movne r0, #0
+ bne _038042B8
+ ands r0, r1, #2
+ movne r0, #1
+ moveq r0, #0
+_038042B8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038042C4
+FUN_038042C4: ;@ 0x038042C4
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl FUN_03804F70
+ ldrh r0, [sp]
+ ands r0, r0, #1
+ moveq r0, #1
+ movne r0, #0
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038042F0
+FUN_038042F0: ;@ 0x038042F0
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ mov r4, r0
+ bl FUN_037FB05C
+ mov r5, r0
+ mov r0, #1
+ bl FUN_03801384
+ cmp r0, #0
+ bne _03804334
+ mov r0, r5
+ bl FUN_037FB070
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #4
+ bl FUN_038013A0
+ b _038045C0
+_03804334:
+ mov r0, #1
+ bl FUN_0380136C
+ mov r0, r5
+ bl FUN_037FB070
+ ldr r0, [r4, #4]
+ sub r0, r0, #32
+ cmp r0, #13
+ addls pc, pc, r0, lsl #2
+ b _03804584
+ b _03804390
+ b _03804398
+ b _038043A0
+ b _038043AC
+ b _038043EC
+ b _0380442C
+ b _03804474
+ b _038044BC
+ b _038044F4
+ b _0380452C
+ b _03804534
+ b _0380453C
+ b _03804570
+ b _0380457C
+_03804390:
+ bl FUN_03805024
+ b _038045A4
+_03804398:
+ bl FUN_03804FE4
+ b _038045A4
+_038043A0:
+ ldr r0, [r4, #16]
+ bl FUN_03804F70
+ b _038045A4
+_038043AC:
+ bl FUN_038042C4
+ cmp r0, #0
+ bne _038043D8
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_038043D8:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ ldr r2, [r4, #16]
+ bl FUN_03804E50
+ b _038045A4
+_038043EC:
+ bl FUN_038042C4
+ cmp r0, #0
+ bne _03804418
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_03804418:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ ldr r2, [r4, #16]
+ bl FUN_03804D14
+ b _038045A4
+_0380442C:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804458
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_03804458:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr r2, [r4, #16]
+ bl FUN_03804BE8
+ b _038045A4
+_03804474:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _038044A0
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_038044A0:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #12]
+ mov r1, r1, lsl #16
+ mov r1, r1, lsr #16
+ ldr r2, [r4, #16]
+ bl FUN_03804ABC
+ b _038045A4
+_038044BC:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _038044E8
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_038044E8:
+ ldr r0, [r4, #8]
+ bl FUN_038049F8
+ b _038045A4
+_038044F4:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804520
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_03804520:
+ ldr r0, [r4, #8]
+ bl FUN_03804934
+ b _038045A4
+_0380452C:
+ bl FUN_038048F4
+ b _038045A4
+_03804534:
+ bl FUN_038048B4
+ b _038045A4
+_0380453C:
+ bl FUN_0380428C
+ cmp r0, #0
+ bne _03804568
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #3
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+ b _038045C0
+_03804568:
+ bl FUN_03804874
+ b _038045A4
+_03804570:
+ ldr r0, [r4, #16]
+ bl FUN_038047D8
+ b _038045A4
+_0380457C:
+ bl FUN_03804798
+ b _038045A4
+_03804584:
+ mov r0, #1
+ bl FUN_03801328
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #1
+ bl FUN_038013A0
+ b _038045C0
+_038045A4:
+ ldr r0, [r4, #4]
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ mov r1, #0
+ bl FUN_038013A0
+ mov r0, #1
+ bl FUN_03801328
+_038045C0:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_038045CC
+FUN_038045CC: ;@ 0x038045CC
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #12
+ ands r1, r0, #33554432 ;@ 0x2000000
+ beq _038045FC
+ mov r5, #0
+ mov lr, r5
+ ldr r1, _0380476C ;@ =_0380A018
+_038045E8:
+ mov r4, r5, lsl #1
+ strh lr, [r1, r4]
+ add r5, r5, #1
+ cmp r5, #16
+ blt _038045E8
+_038045FC:
+ and r1, r0, #983040 ;@ 0xf0000
+ mov r1, r1, lsr #16
+ mov r4, r1, lsl #1
+ ldr r1, _0380476C ;@ =_0380A018
+ strh r0, [r1, r4]
+ ands r0, r0, #16777216 ;@ 0x1000000
+ beq _03804760
+ ldrh r0, [r1]
+ and r4, r0, #65280 ;@ 0xff00
+ mov r4, r4, lsl #8
+ mov r4, r4, lsr #16
+ sub lr, r4, #34 ;@ 0x22
+ cmp lr, #10
+ addls pc, pc, lr, lsl #2
+ b _03804734
+ b _03804664
+ b _038046A0
+ b _038046A0
+ b _038046E8
+ b _038046E8
+ b _03804728
+ b _03804728
+ b _03804734
+ b _03804734
+ b _03804734
+ b _03804664
+_03804664:
+ ldrh ip, [r1, #4]
+ and lr, ip, #65280 ;@ 0xff00
+ and r0, r0, #255 ;@ 0xff
+ mov ip, r0, lsl #24
+ ldrh r0, [r1, #2]
+ orr r0, ip, r0, lsl #8
+ orr ip, r0, lr, lsr #8
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _03804690
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _03804734
+_03804690:
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03804760
+_038046A0:
+ ldrh r3, [r1, #8]
+ ldrh r2, [r1, #10]
+ orr ip, r2, r3, lsl #16
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _038046BC
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _038046CC
+_038046BC:
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03804760
+_038046CC:
+ and r2, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r2, lsl #16
+ ldrh r2, [r1, #4]
+ ldrh r0, [r1, #6]
+ orr r2, r0, r2, lsl #16
+ b _03804734
+_038046E8:
+ ldrh r3, [r1, #6]
+ ldrh r2, [r1, #8]
+ orr ip, r2, r3, lsl #16
+ cmp ip, #33554432 ;@ 0x2000000
+ bcc _03804704
+ cmp ip, #41943040 ;@ 0x2800000
+ bcc _03804714
+_03804704:
+ mov r0, r4
+ mov r1, #2
+ bl FUN_038013A0
+ b _03804760
+_03804714:
+ and r2, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r2, lsl #16
+ ldrh r2, [r1, #4]
+ b _03804734
+_03804728:
+ and r3, r0, #255 ;@ 0xff
+ ldrh r0, [r1, #2]
+ orr r3, r0, r3, lsl #16
+_03804734:
+ str r2, [sp]
+ str ip, [sp, #4]
+ mov r0, #1
+ mov r1, r4
+ mov r2, #3
+ bl FUN_03801254
+ cmp r0, #0
+ bne _03804760
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038013A0
+_03804760:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_0380476C: .word _0380A018
+
+ arm_func_start FUN_03804770
+FUN_03804770: ;@ 0x03804770
+ mov r3, #0
+ mov r2, r3
+ ldr r0, _03804794 ;@ =_0380A018
+_0380477C:
+ mov r1, r3, lsl #1
+ strh r2, [r0, r1]
+ add r3, r3, #1
+ cmp r3, #16
+ blt _0380477C
+ bx lr
+_03804794: .word _0380A018
+
+ arm_func_start FUN_03804798
+FUN_03804798: ;@ 0x03804798
+ ldr r1, _038047D0 ;@ =0x040001C0
+_0380479C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380479C
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #255 ;@ 0xff
+ ldr r0, _038047D4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038047D0 ;@ =0x040001C0
+_038047C0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038047C0
+ bx lr
+_038047D0: .word 0x040001C0
+_038047D4: .word 0x040001C2
+
+ arm_func_start FUN_038047D8
+FUN_038047D8: ;@ 0x038047D8
+ ldr r2, _0380486C ;@ =0x040001C0
+_038047DC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038047DC
+ mov r1, #35072 ;@ 0x8900
+ strh r1, [r2]
+ mov r2, #159 ;@ 0x9f
+ ldr r1, _03804870 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _0380486C ;@ =0x040001C0
+_03804800:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804800
+ mov r2, #0
+ ldr r1, _03804870 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r3, _0380486C ;@ =0x040001C0
+_0380481C:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _0380481C
+ ldr r2, _03804870 ;@ =0x040001C2
+ ldrh r1, [r2]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0]
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r3]
+ mov r1, #0
+ strh r1, [r2]
+ ldr r2, _0380486C ;@ =0x040001C0
+_0380484C:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _0380484C
+ ldr r1, _03804870 ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0, #1]
+ bx lr
+_0380486C: .word 0x040001C0
+_03804870: .word 0x040001C2
+
+ arm_func_start FUN_03804874
+FUN_03804874: ;@ 0x03804874
+ ldr r1, _038048AC ;@ =0x040001C0
+_03804878:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804878
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #199 ;@ 0xc7
+ ldr r0, _038048B0 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038048AC ;@ =0x040001C0
+_0380489C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380489C
+ bx lr
+_038048AC: .word 0x040001C0
+_038048B0: .word 0x040001C2
+
+ arm_func_start FUN_038048B4
+FUN_038048B4: ;@ 0x038048B4
+ ldr r1, _038048EC ;@ =0x040001C0
+_038048B8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048B8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #171 ;@ 0xab
+ ldr r0, _038048F0 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038048EC ;@ =0x040001C0
+_038048DC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048DC
+ bx lr
+_038048EC: .word 0x040001C0
+_038048F0: .word 0x040001C2
+
+ arm_func_start FUN_038048F4
+FUN_038048F4: ;@ 0x038048F4
+ ldr r1, _0380492C ;@ =0x040001C0
+_038048F8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038048F8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #185 ;@ 0xb9
+ ldr r0, _03804930 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380492C ;@ =0x040001C0
+_0380491C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380491C
+ bx lr
+_0380492C: .word 0x040001C0
+_03804930: .word 0x040001C2
+
+ arm_func_start FUN_03804934
+FUN_03804934: ;@ 0x03804934
+ and r1, r0, #16711680 ;@ 0xff0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #16
+ mov r2, r1, lsr #16
+ and r1, r0, #65280 ;@ 0xff00
+ mov r1, r1, lsl #8
+ mov r1, r1, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr ip, _038049F0 ;@ =0x040001C0
+_03804960:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804960
+ mov r3, #35072 ;@ 0x8900
+ strh r3, [ip]
+ mov ip, #216 ;@ 0xd8
+ ldr r3, _038049F4 ;@ =0x040001C2
+ strh ip, [r3]
+ ldr ip, _038049F0 ;@ =0x040001C0
+_03804984:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804984
+ and r3, r2, #255 ;@ 0xff
+ ldr r2, _038049F4 ;@ =0x040001C2
+ strh r3, [r2]
+ ldr r3, _038049F0 ;@ =0x040001C0
+_038049A0:
+ ldrh r2, [r3]
+ ands r2, r2, #128 ;@ 0x80
+ bne _038049A0
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, _038049F4 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _038049F0 ;@ =0x040001C0
+_038049BC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _038049BC
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _038049F4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _038049F0 ;@ =0x040001C0
+_038049E0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _038049E0
+ bx lr
+_038049F0: .word 0x040001C0
+_038049F4: .word 0x040001C2
+
+ arm_func_start FUN_038049F8
+FUN_038049F8: ;@ 0x038049F8
+ and r1, r0, #16711680 ;@ 0xff0000
+ mov r1, r1, lsr #16
+ mov r1, r1, lsl #16
+ mov r2, r1, lsr #16
+ and r1, r0, #65280 ;@ 0xff00
+ mov r1, r1, lsl #8
+ mov r1, r1, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ ldr ip, _03804AB4 ;@ =0x040001C0
+_03804A24:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804A24
+ mov r3, #35072 ;@ 0x8900
+ strh r3, [ip]
+ mov ip, #219 ;@ 0xdb
+ ldr r3, _03804AB8 ;@ =0x040001C2
+ strh ip, [r3]
+ ldr ip, _03804AB4 ;@ =0x040001C0
+_03804A48:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804A48
+ and r3, r2, #255 ;@ 0xff
+ ldr r2, _03804AB8 ;@ =0x040001C2
+ strh r3, [r2]
+ ldr r3, _03804AB4 ;@ =0x040001C0
+_03804A64:
+ ldrh r2, [r3]
+ ands r2, r2, #128 ;@ 0x80
+ bne _03804A64
+ and r2, r1, #255 ;@ 0xff
+ ldr r1, _03804AB8 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804AB4 ;@ =0x040001C0
+_03804A80:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804A80
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804AB8 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804AB4 ;@ =0x040001C0
+_03804AA4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804AA4
+ bx lr
+_03804AB4: .word 0x040001C0
+_03804AB8: .word 0x040001C2
+
+ arm_func_start FUN_03804ABC
+FUN_03804ABC: ;@ 0x03804ABC
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804BD4
+ add r3, r0, r1
+ sub r3, r3, #1
+ mov r3, r3, lsr #8
+ cmp r3, r0, lsr #8
+ andhi r1, r0, #255 ;@ 0xff
+ rsbhi r1, r1, #256 ;@ 0x100
+ movhi r1, r1, lsl #16
+ movhi r1, r1, lsr #16
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804BE0 ;@ =0x040001C0
+_03804B10:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804B10
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #2
+ ldr lr, _03804BE4 ;@ =0x040001C2
+ strh r0, [lr]
+ mov r4, #0
+ add r3, sp, #0
+ ldr ip, _03804BE0 ;@ =0x040001C0
+_03804B3C:
+ ldrh r0, [ip]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804B3C
+ mov r0, r4, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [lr]
+ add r4, r4, #1
+ cmp r4, #3
+ blt _03804B3C
+ mov ip, #0
+ sub lr, r1, #1
+ ldr r3, _03804BE0 ;@ =0x040001C0
+ ldr r0, _03804BE4 ;@ =0x040001C2
+ b _03804B94
+_03804B78:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804B78
+ ldrb r1, [r2, ip]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0]
+ add ip, ip, #1
+_03804B94:
+ cmp ip, lr
+ blt _03804B78
+ ldr r1, _03804BE0 ;@ =0x040001C0
+_03804BA0:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804BA0
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ ldrb r0, [r2, ip]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804BE4 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804BE0 ;@ =0x040001C0
+_03804BC8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804BC8
+_03804BD4:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804BE0: .word 0x040001C0
+_03804BE4: .word 0x040001C2
+
+ arm_func_start FUN_03804BE8
+FUN_03804BE8: ;@ 0x03804BE8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804D00
+ add r3, r0, r1
+ sub r3, r3, #1
+ mov r3, r3, lsr #8
+ cmp r3, r0, lsr #8
+ andhi r1, r0, #255 ;@ 0xff
+ rsbhi r1, r1, #256 ;@ 0x100
+ movhi r1, r1, lsl #16
+ movhi r1, r1, lsr #16
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804D0C ;@ =0x040001C0
+_03804C3C:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804C3C
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #10
+ ldr lr, _03804D10 ;@ =0x040001C2
+ strh r0, [lr]
+ mov r4, #0
+ add r3, sp, #0
+ ldr ip, _03804D0C ;@ =0x040001C0
+_03804C68:
+ ldrh r0, [ip]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804C68
+ mov r0, r4, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [lr]
+ add r4, r4, #1
+ cmp r4, #3
+ blt _03804C68
+ mov ip, #0
+ sub lr, r1, #1
+ ldr r3, _03804D0C ;@ =0x040001C0
+ ldr r0, _03804D10 ;@ =0x040001C2
+ b _03804CC0
+_03804CA4:
+ ldrh r1, [r3]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804CA4
+ ldrb r1, [r2, ip]
+ and r1, r1, #255 ;@ 0xff
+ strh r1, [r0]
+ add ip, ip, #1
+_03804CC0:
+ cmp ip, lr
+ blt _03804CA4
+ ldr r1, _03804D0C ;@ =0x040001C0
+_03804CCC:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804CCC
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ ldrb r0, [r2, ip]
+ and r1, r0, #255 ;@ 0xff
+ ldr r0, _03804D10 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _03804D0C ;@ =0x040001C0
+_03804CF4:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804CF4
+_03804D00:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804D0C: .word 0x040001C0
+_03804D10: .word 0x040001C2
+
+ arm_func_start FUN_03804D14
+FUN_03804D14: ;@ 0x03804D14
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804E3C
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804D48:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804D48
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #11
+ ldr ip, _03804E4C ;@ =0x040001C2
+ strh r0, [ip]
+ mov lr, #0
+ add r3, sp, #0
+ ldr r4, _03804E48 ;@ =0x040001C0
+_03804D74:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804D74
+ mov r0, lr, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [ip]
+ add lr, lr, #1
+ cmp lr, #3
+ blt _03804D74
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804DA0:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804DA0
+ mov r3, #0
+ ldr r0, _03804E4C ;@ =0x040001C2
+ strh r3, [r0]
+ ldr r3, _03804E48 ;@ =0x040001C0
+_03804DBC:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804DBC
+ mov r0, #0
+ ldr ip, _03804E48 ;@ =0x040001C0
+ mov r4, r0
+ ldr lr, _03804E4C ;@ =0x040001C2
+ sub r1, r1, #1
+ b _03804E00
+_03804DE0:
+ strh r4, [lr]
+_03804DE4:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804DE4
+ ldrh r3, [lr]
+ and r3, r3, #255 ;@ 0xff
+ strb r3, [r2, r0]
+ add r0, r0, #1
+_03804E00:
+ cmp r0, r1
+ bcc _03804DE0
+ mov r1, #33024 ;@ 0x8100
+ ldr ip, _03804E48 ;@ =0x040001C0
+ strh r1, [ip]
+ mov r3, #0
+ ldr r1, _03804E4C ;@ =0x040001C2
+ strh r3, [r1]
+_03804E20:
+ ldrh r1, [ip]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804E20
+ ldr r1, _03804E4C ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r2, r0]
+_03804E3C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804E48: .word 0x040001C0
+_03804E4C: .word 0x040001C2
+
+ arm_func_start FUN_03804E50
+FUN_03804E50: ;@ 0x03804E50
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ cmp r1, #1
+ bcc _03804F5C
+ and r3, r0, #16711680 ;@ 0xff0000
+ mov r3, r3, lsr #16
+ strh r3, [sp]
+ and r3, r0, #65280 ;@ 0xff00
+ mov r3, r3, lsr #8
+ strh r3, [sp, #2]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [sp, #4]
+ ldr r3, _03804F68 ;@ =0x040001C0
+_03804E84:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804E84
+ mov r0, #35072 ;@ 0x8900
+ strh r0, [r3]
+ mov r0, #3
+ ldr ip, _03804F6C ;@ =0x040001C2
+ strh r0, [ip]
+ mov lr, #0
+ add r3, sp, #0
+ ldr r4, _03804F68 ;@ =0x040001C0
+_03804EB0:
+ ldrh r0, [r4]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804EB0
+ mov r0, lr, lsl #1
+ ldrh r0, [r3, r0]
+ and r0, r0, #255 ;@ 0xff
+ strh r0, [ip]
+ add lr, lr, #1
+ cmp lr, #3
+ blt _03804EB0
+ ldr r3, _03804F68 ;@ =0x040001C0
+_03804EDC:
+ ldrh r0, [r3]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804EDC
+ mov r0, #0
+ ldr ip, _03804F68 ;@ =0x040001C0
+ mov r4, r0
+ ldr lr, _03804F6C ;@ =0x040001C2
+ sub r1, r1, #1
+ b _03804F20
+_03804F00:
+ strh r4, [lr]
+_03804F04:
+ ldrh r3, [ip]
+ ands r3, r3, #128 ;@ 0x80
+ bne _03804F04
+ ldrh r3, [lr]
+ and r3, r3, #255 ;@ 0xff
+ strb r3, [r2, r0]
+ add r0, r0, #1
+_03804F20:
+ cmp r0, r1
+ bcc _03804F00
+ mov r1, #33024 ;@ 0x8100
+ ldr ip, _03804F68 ;@ =0x040001C0
+ strh r1, [ip]
+ mov r3, #0
+ ldr r1, _03804F6C ;@ =0x040001C2
+ strh r3, [r1]
+_03804F40:
+ ldrh r1, [ip]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F40
+ ldr r1, _03804F6C ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r2, r0]
+_03804F5C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03804F68: .word 0x040001C0
+_03804F6C: .word 0x040001C2
+
+ arm_func_start FUN_03804F70
+FUN_03804F70: ;@ 0x03804F70
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804F74:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F74
+ mov r1, #35072 ;@ 0x8900
+ strh r1, [r2]
+ mov r2, #5
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804F98:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804F98
+ mov r1, #33024 ;@ 0x8100
+ strh r1, [r2]
+ mov r2, #0
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ strh r2, [r1]
+ ldr r2, _03804FDC ;@ =0x040001C0
+_03804FBC:
+ ldrh r1, [r2]
+ ands r1, r1, #128 ;@ 0x80
+ bne _03804FBC
+ ldr r1, _03804FE0 ;@ =0x040001C2
+ ldrh r1, [r1]
+ and r1, r1, #255 ;@ 0xff
+ strb r1, [r0]
+ bx lr
+_03804FDC: .word 0x040001C0
+_03804FE0: .word 0x040001C2
+
+ arm_func_start FUN_03804FE4
+FUN_03804FE4: ;@ 0x03804FE4
+ ldr r1, _0380501C ;@ =0x040001C0
+_03804FE8:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03804FE8
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #4
+ ldr r0, _03805020 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380501C ;@ =0x040001C0
+_0380500C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380500C
+ bx lr
+_0380501C: .word 0x040001C0
+_03805020: .word 0x040001C2
+
+ arm_func_start FUN_03805024
+FUN_03805024: ;@ 0x03805024
+ ldr r1, _0380505C ;@ =0x040001C0
+_03805028:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _03805028
+ mov r0, #33024 ;@ 0x8100
+ strh r0, [r1]
+ mov r1, #6
+ ldr r0, _03805060 ;@ =0x040001C2
+ strh r1, [r0]
+ ldr r1, _0380505C ;@ =0x040001C0
+_0380504C:
+ ldrh r0, [r1]
+ ands r0, r0, #128 ;@ 0x80
+ bne _0380504C
+ bx lr
+_0380505C: .word 0x040001C0
+_03805060: .word 0x040001C2
+
+ arm_func_start FUN_03805064
+FUN_03805064: ;@ 0x03805064
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov lr, #0
+ mov r2, lr
+ b _03805094
+_03805078:
+ mov r1, r2, lsl #2
+ mov r1, r0, lsr r1
+ and r1, r1, #15
+ cmp r1, #10
+ movcs r0, #0
+ bcs _038050D0
+ add r2, r2, #1
+_03805094:
+ cmp r2, #8
+ blt _03805078
+ mov r3, #0
+ mov ip, #1
+ mov r2, #10
+_038050A8:
+ mov r1, r3, lsl #2
+ mov r1, r0, lsr r1
+ and r1, r1, #15
+ mla lr, ip, r1, lr
+ add r3, r3, #1
+ mul r1, ip, r2
+ mov ip, r1
+ cmp r3, #8
+ blt _038050A8
+ mov r0, lr
+_038050D0:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_038050DC
+FUN_038050DC: ;@ 0x038050DC
+ stmdb sp!, {r4, r5, r6, r7, r8, lr}
+ mov r8, r0
+ mov r7, r1
+ mov r6, r2
+ sub r0, r7, #1
+ cmp r0, #1
+ subls r8, r8, #1
+ addls r7, r7, #12
+ mov r0, r8
+ mov r1, #400 ;@ 0x190
+ bl _u32_div_f
+ mov r5, r0
+ mov r0, r8
+ mov r1, #100 ;@ 0x64
+ bl _u32_div_f
+ mov r4, r0
+ mov r0, #13
+ mul r0, r7, r0
+ add r0, r0, #8
+ mov r1, #5
+ bl _u32_div_f
+ add r1, r8, r8, lsr #2
+ sub r1, r1, r4
+ add r1, r5, r1
+ add r0, r1, r0
+ add r0, r6, r0
+ mov r1, #7
+ bl _u32_div_f
+ mov r0, r1
+ ldmia sp!, {r4, r5, r6, r7, r8, lr}
+ bx lr
+
+ arm_func_start FUN_03805158
+FUN_03805158: ;@ 0x03805158
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ add r0, sp, #0
+ bl FUN_03805E20
+ add r0, sp, #2
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r1, r0, lsl #24
+ movs r1, r1, lsr #31
+ bne _0380519C
+ mov r0, r0, lsl #25
+ movs r0, r0, lsr #31
+ bne _0380519C
+ ldrh r0, [sp, #2]
+ mov r0, r0, lsl #24
+ movs r0, r0, lsr #31
+ beq _038051B4
+_0380519C:
+ ldrh r0, [sp]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strh r0, [sp]
+ add r0, sp, #0
+ bl FUN_03805DF4
+_038051B4:
+ ldrh r0, [sp]
+ mov r1, r0, lsl #27
+ movs r1, r1, lsr #31
+ bne _038051D0
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ beq _038051F0
+_038051D0:
+ ldrh r0, [sp, #2]
+ bic r0, r0, #15
+ strh r0, [sp, #2]
+ ldrh r0, [sp, #2]
+ bic r0, r0, #64 ;@ 0x40
+ strh r0, [sp, #2]
+ add r0, sp, #2
+ bl FUN_03805D9C
+_038051F0:
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ bl FUN_038060DC
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ ldrb r0, [r0]
+ bl FUN_03805064
+ mov r4, r0
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ ldr r0, [r0]
+ mov r0, r0, lsl #19
+ mov r0, r0, lsr #27
+ bl FUN_03805064
+ mov r5, r0
+ ldr r0, _03805288 ;@ =0x027FFDE8
+ ldr r0, [r0]
+ mov r0, r0, lsl #10
+ mov r0, r0, lsr #26
+ bl FUN_03805064
+ mov r2, r0
+ add r0, r4, #2000 ;@ 0x7d0
+ mov r1, r5
+ bl FUN_038050DC
+ ldr r2, _03805288 ;@ =0x027FFDE8
+ ldr r1, [r2]
+ mov r3, r1, lsl #5
+ mov r3, r3, lsr #29
+ cmp r3, r0
+ beq _03805274
+ bic r1, r1, #117440512 ;@ 0x7000000
+ and r0, r0, #7
+ orr r0, r1, r0, lsl #24
+ str r0, [r2]
+ mov r0, r2
+ bl FUN_038060B0
+_03805274:
+ mov r0, #1
+ bl FUN_03806108
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03805288: .word 0x027FFDE8
+
+ arm_func_start FUN_0380528C
+FUN_0380528C: ;@ 0x0380528C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ add r0, sp, #0
+ bl FUN_03805E20
+ ldrh r0, [sp]
+ mov r1, r0, lsl #27
+ movs r1, r1, lsr #31
+ bne _038052B8
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ beq _03805310
+_038052B8:
+ add r0, sp, #2
+ bl FUN_03805DC8
+ mov r4, #0
+ ldrh r0, [sp]
+ mov r0, r0, lsl #27
+ movs r0, r0, lsr #31
+ orrne r4, r4, #1
+ ldrneh r0, [sp, #2]
+ bicne r0, r0, #15
+ strneh r0, [sp, #2]
+ ldrh r0, [sp]
+ mov r0, r0, lsl #26
+ movs r0, r0, lsr #31
+ orrne r4, r4, #2
+ ldrneh r0, [sp, #2]
+ bicne r0, r0, #64 ;@ 0x40
+ strneh r0, [sp, #2]
+ add r0, sp, #2
+ bl FUN_03805D9C
+ mov r0, #48 ;@ 0x30
+ mov r1, r4
+ bl FUN_038057D8
+_03805310:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_0380531C
+FUN_0380531C: ;@ 0x0380531C
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #76 ;@ 0x4c
+ ldr r6, _038057CC ;@ =0x027FFDE8
+ add r5, r6, #4
+ mov r7, #0
+ ldr r9, _038057D0 ;@ =_0380A03C
+ mov r8, #1
+ mov r0, #16
+ str r0, [sp]
+ mov r0, #17
+ str r0, [sp, #4]
+ mov r0, #18
+ str r0, [sp, #8]
+ mov sl, #19
+ mov r4, #2
+ mov fp, #20
+ mov r0, #21
+ str r0, [sp, #12]
+ mov r0, #22
+ str r0, [sp, #16]
+ mov r0, #23
+ str r0, [sp, #20]
+ mov r0, #24
+ str r0, [sp, #24]
+ mov r0, #25
+ str r0, [sp, #28]
+ mov r0, #32
+ str r0, [sp, #32]
+ mov r0, #33 ;@ 0x21
+ str r0, [sp, #36] ;@ 0x24
+ mov r0, #34 ;@ 0x22
+ str r0, [sp, #40] ;@ 0x28
+ mov r0, #35 ;@ 0x23
+ str r0, [sp, #44] ;@ 0x2c
+ mov r0, #36 ;@ 0x24
+ str r0, [sp, #48] ;@ 0x30
+ mov r0, #37 ;@ 0x25
+ str r0, [sp, #52] ;@ 0x34
+ mov r0, #38 ;@ 0x26
+ str r0, [sp, #56] ;@ 0x38
+ mov r0, #39 ;@ 0x27
+ str r0, [sp, #60] ;@ 0x3c
+ mov r0, #40 ;@ 0x28
+ str r0, [sp, #64] ;@ 0x40
+ mov r0, #41 ;@ 0x29
+ str r0, [sp, #68] ;@ 0x44
+_038053D4:
+ mov r0, r9
+ add r1, sp, #72 ;@ 0x48
+ mov r2, r8
+ bl FUN_037F9884
+ ldr r0, _038057D4 ;@ =_0380A13C
+ ldrh r0, [r0, #216] ;@ 0xd8
+ cmp r0, #41 ;@ 0x29
+ addls pc, pc, r0, lsl #2
+ b _038057BC
+ b _038054A0
+ b _038054B8
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038054DC
+ b _038054F8
+ b _03805514
+ b _03805530
+ b _03805568
+ b _038055A0
+ b _038055D8
+ b _038055F4
+ b _03805610
+ b _0380562C
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _038057BC
+ b _03805648
+ b _03805664
+ b _03805688
+ b _038056A4
+ b _038056DC
+ b _03805714
+ b _0380574C
+ b _03805768
+ b _03805784
+ b _038057A0
+_038054A0:
+ bl FUN_03806208
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, r7
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038054B8:
+ ldrh r0, [r6]
+ mov r0, r0, lsl #30
+ mov r0, r0, lsr #31
+ bl FUN_03806108
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, r8
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038054DC:
+ mov r0, r6
+ bl FUN_038060DC
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038054F8:
+ mov r0, r6
+ bl FUN_03806084
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #4]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805514:
+ add r0, r6, #4
+ bl FUN_03806058
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #8]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805530:
+ mov r0, r5
+ bl FUN_03805FD8
+ cmp r0, #0
+ bne _03805554
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, sl
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_03805554:
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, sl
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805568:
+ mov r0, r5
+ bl FUN_03805F34
+ cmp r0, #0
+ bne _0380558C
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, fp
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_0380558C:
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r0, fp
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038055A0:
+ mov r0, r5
+ bl FUN_03805E98
+ cmp r0, #0
+ bne _038055C4
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #12]
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_038055C4:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #12]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038055D8:
+ mov r0, r6
+ bl FUN_03805E20
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #16]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038055F4:
+ add r0, r6, #2
+ bl FUN_03805DC8
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #20]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805610:
+ add r0, r6, #4
+ bl FUN_03805D70
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #24]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_0380562C:
+ add r0, r6, #4
+ bl FUN_03805D18
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #28]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805648:
+ mov r0, r6
+ bl FUN_038060B0
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #32]
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805664:
+ add r0, r6, #4
+ bl FUN_03806058
+ mov r0, r6
+ bl FUN_038060B0
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #36] ;@ 0x24
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805688:
+ add r0, r6, #4
+ bl FUN_0380602C
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #40] ;@ 0x28
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038056A4:
+ mov r0, r5
+ bl FUN_03805F84
+ cmp r0, #0
+ bne _038056C8
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #44] ;@ 0x2c
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_038056C8:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #44] ;@ 0x2c
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038056DC:
+ mov r0, r5
+ bl FUN_03805EE4
+ cmp r0, #0
+ bne _03805700
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #48] ;@ 0x30
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_03805700:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #48] ;@ 0x30
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805714:
+ mov r0, r5
+ bl FUN_03805E4C
+ cmp r0, #0
+ bne _03805738
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #52] ;@ 0x34
+ mov r1, r4
+ bl FUN_038057D8
+ b _038053D4
+_03805738:
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #52] ;@ 0x34
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_0380574C:
+ mov r0, r6
+ bl FUN_03805DF4
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #56] ;@ 0x38
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805768:
+ add r0, r6, #2
+ bl FUN_03805D9C
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #60] ;@ 0x3c
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_03805784:
+ add r0, r6, #4
+ bl FUN_03805D44
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #64] ;@ 0x40
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038057A0:
+ add r0, r6, #4
+ bl FUN_03805CEC
+ str r7, [r9, #468] ;@ 0x1d4
+ ldr r0, [sp, #68] ;@ 0x44
+ mov r1, r7
+ bl FUN_038057D8
+ b _038053D4
+_038057BC:
+ str r7, [r9, #468] ;@ 0x1d4
+ mov r1, r8
+ bl FUN_038057D8
+ b _038053D4
+_038057CC: .word 0x027FFDE8
+_038057D0: .word _0380A03C
+_038057D4: .word _0380A13C
+
+ arm_func_start FUN_038057D8
+FUN_038057D8: ;@ 0x038057D8
+ stmdb sp!, {r4, r5, r6, lr}
+ mov r0, r0, lsl #8
+ and r0, r0, #32512 ;@ 0x7f00
+ orr r2, r0, #32768 ;@ 0x8000
+ and r0, r1, #255 ;@ 0xff
+ orr r6, r2, r0
+ mov r5, #5
+ mov r4, #0
+_038057F8:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _038057F8
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_03805818
+FUN_03805818: ;@ 0x03805818
+ stmdb sp!, {r4, lr}
+ cmp r2, #0
+ bne _03805944
+ and r0, r1, #32512 ;@ 0x7f00
+ mov r0, r0, lsl #8
+ mov r4, r0, lsr #16
+ cmp r4, #41 ;@ 0x29
+ addls pc, pc, r4, lsl #2
+ b _03805938
+ b _038058E4
+ b _038058E4
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _03805938
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+ b _038058E4
+_038058E4:
+ ldr r0, _0380594C ;@ =_0380A03C
+ ldr r1, [r0, #468] ;@ 0x1d4
+ cmp r1, #0
+ beq _03805904
+ mov r0, r4
+ mov r1, #3
+ bl FUN_038057D8
+ b _03805944
+_03805904:
+ mov r1, #1
+ str r1, [r0, #468] ;@ 0x1d4
+ ldr r1, _03805950 ;@ =_0380A13C
+ strh r4, [r1, #216] ;@ 0xd8
+ mov r1, #0
+ mov r2, r1
+ bl FUN_037F9924
+ cmp r0, #0
+ bne _03805944
+ mov r0, r4
+ mov r1, #4
+ bl FUN_038057D8
+ b _03805944
+_03805938:
+ mov r0, r4
+ mov r1, #1
+ bl FUN_038057D8
+_03805944:
+ ldmia sp!, {r4, lr}
+ bx lr
+_0380594C: .word _0380A03C
+_03805950: .word _0380A13C
+
+ arm_func_start FUN_03805954
+FUN_03805954: ;@ 0x03805954
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ ldr r0, _03805A28 ;@ =_0380A038
+ ldrh r1, [r0]
+ cmp r1, #0
+ bne _03805A1C
+ mov r1, #1
+ strh r1, [r0]
+ ldr r0, _03805A2C ;@ =_0380A03C
+ str r1, [r0, #468] ;@ 0x1d4
+ bl FUN_03805158
+ mov r1, #0
+ ldr r0, _03805A2C ;@ =_0380A03C
+ str r1, [r0, #468] ;@ 0x1d4
+ bl FUN_037FB5B0
+ mov r0, #5
+ ldr r1, _03805A30 ;@ =FUN_03805818
+ bl FUN_037FB7A8
+ ldr r0, _03805A2C ;@ =_0380A03C
+ ldr r1, _03805A34 ;@ =_0380A05C
+ mov r2, #4
+ bl FUN_037F99B8
+ mov r0, #256 ;@ 0x100
+ str r0, [sp]
+ str r4, [sp, #4]
+ ldr r0, _03805A38 ;@ =_0380A06C
+ ldr r1, _03805A3C ;@ =FUN_0380531C
+ mov r2, #0
+ ldr r3, _03805A40 ;@ =_0380A210
+ bl FUN_037F9244
+ ldr r0, _03805A38 ;@ =_0380A06C
+ bl FUN_037F8FB4
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #64 ;@ 0x40
+ mov r1, #0
+ bl FUN_037FB90C
+ mov r0, #256 ;@ 0x100
+ mov r1, r0
+ bl FUN_037FB90C
+ bl FUN_037FB05C
+ mov r4, r0
+ mov r0, #128 ;@ 0x80
+ ldr r1, _03805A44 ;@ =FUN_0380528C
+ bl FUN_037F894C
+ mov r0, #128 ;@ 0x80
+ bl FUN_037F8894
+ mov r0, r4
+ bl FUN_037FB070
+_03805A1C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03805A28: .word _0380A038
+_03805A2C: .word _0380A03C
+_03805A30: .word FUN_03805818
+_03805A34: .word _0380A05C
+_03805A38: .word _0380A06C
+_03805A3C: .word FUN_0380531C
+_03805A40: .word _0380A210
+_03805A44: .word FUN_0380528C
+
+ arm_func_start FUN_03805A48
+FUN_03805A48: ;@ 0x03805A48
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, r1
+ mov r5, r2
+ mov r4, r3
+ bl FUN_03806248
+ mov r0, r7
+ mov r1, r6
+ bl FUN_038062BC
+ cmp r7, #6
+ beq _03805A90
+ cmp r7, #134 ;@ 0x86
+ bne _03805A9C
+ mov r0, r5
+ mov r1, r4
+ bl FUN_038063BC
+ b _03805A9C
+_03805A90:
+ mov r0, r5
+ mov r1, r4
+ bl FUN_0380632C
+_03805A9C:
+ bl FUN_03806288
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+
+ arm_func_start FUN_03805AAC
+FUN_03805AAC: ;@ 0x03805AAC
+ ldr r2, [r0]
+ mov r1, r2, lsl #18
+ mov r3, r1, lsr #26
+ cmp r3, #35 ;@ 0x23
+ addls pc, pc, r3, lsl #2
+ b _03805BA8
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B54
+ b _03805B78
+ b _03805B78
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805B54
+ b _03805B54
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805BA8
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+ b _03805B9C
+_03805B54:
+ mov r1, r2, lsl #17
+ movs r1, r1, lsr #31
+ bxeq lr
+ bic r2, r2, #16128 ;@ 0x3f00
+ add r1, r3, #18
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805B78:
+ mov r1, r2, lsl #17
+ movs r1, r1, lsr #31
+ bxeq lr
+ bic r2, r2, #16128 ;@ 0x3f00
+ add r1, r3, #24
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805B9C:
+ orr r1, r2, #16384 ;@ 0x4000
+ str r1, [r0]
+ bx lr
+_03805BA8:
+ ldr r1, [r0]
+ bic r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r1, r1, #16128 ;@ 0x3f00
+ str r1, [r0]
+ bx lr
+
+ arm_func_start FUN_03805BC4
+FUN_03805BC4: ;@ 0x03805BC4
+ ldr r1, [r0]
+ mov r2, r1, lsl #18
+ mov r2, r2, lsr #26
+ cmp r2, #35 ;@ 0x23
+ addls pc, pc, r2, lsl #2
+ b _03805CD0
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805C6C
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805C6C
+ b _03805C6C
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805C78
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CD0
+ b _03805CA4
+ b _03805CA4
+ b _03805C78
+ b _03805C78
+_03805C6C:
+ bic r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ bx lr
+_03805C78:
+ orr r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r2, r1, #16128 ;@ 0x3f00
+ mov r1, r1, lsl #18
+ mov r1, r1, lsr #26
+ sub r1, r1, #18
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805CA4:
+ orr r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r2, r1, #16128 ;@ 0x3f00
+ mov r1, r1, lsl #18
+ mov r1, r1, lsr #26
+ sub r1, r1, #24
+ and r1, r1, #63 ;@ 0x3f
+ orr r1, r2, r1, lsl #8
+ str r1, [r0]
+ bx lr
+_03805CD0:
+ ldr r1, [r0]
+ bic r1, r1, #16384 ;@ 0x4000
+ str r1, [r0]
+ ldr r1, [r0]
+ bic r1, r1, #16128 ;@ 0x3f00
+ str r1, [r0]
+ bx lr
+
+ arm_func_start FUN_03805CEC
+FUN_03805CEC: ;@ 0x03805CEC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #6
+ mov r1, #112 ;@ 0x70
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805D18
+FUN_03805D18: ;@ 0x03805D18
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #112 ;@ 0x70
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805D44
+FUN_03805D44: ;@ 0x03805D44
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #6
+ mov r1, #48 ;@ 0x30
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805D70
+FUN_03805D70: ;@ 0x03805D70
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #48 ;@ 0x30
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805D9C
+FUN_03805D9C: ;@ 0x03805D9C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #6
+ mov r1, #64 ;@ 0x40
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805DC8
+FUN_03805DC8: ;@ 0x03805DC8
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #64 ;@ 0x40
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805DF4
+FUN_03805DF4: ;@ 0x03805DF4
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #6
+ mov r1, #0
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805E20
+FUN_03805E20: ;@ 0x03805E20
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #0
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805E4C
+FUN_03805E4C: ;@ 0x03805E4C
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r0, r0, lsl #25
+ movs r0, r0, lsr #31
+ moveq r0, #0
+ beq _03805E8C
+ mov r0, #6
+ mov r1, #80 ;@ 0x50
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805E8C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805E98
+FUN_03805E98: ;@ 0x03805E98
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r0, r0, lsl #25
+ movs r0, r0, lsr #31
+ moveq r0, #0
+ beq _03805ED8
+ mov r0, #134 ;@ 0x86
+ mov r1, #80 ;@ 0x50
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805ED8:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805EE4
+FUN_03805EE4: ;@ 0x03805EE4
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ cmp r0, #4
+ movne r0, #0
+ bne _03805F28
+ mov r0, #6
+ mov r1, #16
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805F28:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805F34
+FUN_03805F34: ;@ 0x03805F34
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ cmp r0, #4
+ movne r0, #0
+ bne _03805F78
+ mov r0, #134 ;@ 0x86
+ mov r1, #16
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #1
+_03805F78:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805F84
+FUN_03805F84: ;@ 0x03805F84
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ and r0, r0, #11
+ cmp r0, #1
+ movne r0, #0
+ bne _03805FCC
+ mov r0, #6
+ mov r1, #16
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ mov r0, #1
+_03805FCC:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03805FD8
+FUN_03805FD8: ;@ 0x03805FD8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ mov r4, r0
+ add r0, sp, #0
+ bl FUN_03805DC8
+ ldrh r0, [sp]
+ mov r0, r0, lsl #28
+ mov r0, r0, lsr #28
+ and r0, r0, #11
+ cmp r0, #1
+ movne r0, #0
+ bne _03806020
+ mov r0, #134 ;@ 0x86
+ mov r1, #16
+ mov r2, r4
+ mov r3, #1
+ bl FUN_03805A48
+ mov r0, #1
+_03806020:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_0380602C
+FUN_0380602C: ;@ 0x0380602C
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #6
+ mov r1, #96 ;@ 0x60
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03806058
+FUN_03806058: ;@ 0x03806058
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #96 ;@ 0x60
+ mov r2, r4
+ mov r3, #3
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03806084
+FUN_03806084: ;@ 0x03806084
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #32
+ mov r2, r4
+ mov r3, #4
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_038060B0
+FUN_038060B0: ;@ 0x038060B0
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #6
+ mov r1, #32
+ mov r2, r4
+ mov r3, #7
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_038060DC
+FUN_038060DC: ;@ 0x038060DC
+ stmdb sp!, {r4, lr}
+ mov r4, r0
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ mov r0, #134 ;@ 0x86
+ mov r1, #32
+ mov r2, r4
+ mov r3, #7
+ bl FUN_03805A48
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_03806108
+FUN_03806108: ;@ 0x03806108
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #12
+ mov r4, r0
+ and r5, r4, #1
+ mov r0, r5, lsl #16
+ mov r0, r0, lsr #16
+ cmp r0, #1
+ bne _038061FC
+ add r0, sp, #0
+ bl FUN_03805E20
+ ldrh r1, [sp]
+ mov r0, r1, lsl #30
+ mov r2, r0, lsr #31
+ mov r0, r5, lsl #16
+ cmp r2, r0, lsr #16
+ beq _038061FC
+ and r4, r4, #1
+ bic r1, r1, #2
+ mov r0, r4, lsl #16
+ mov r0, r0, lsr #16
+ and r0, r0, #1
+ orr r0, r1, r0, lsl #1
+ strh r0, [sp]
+ add r0, sp, #0
+ bl FUN_03805DF4
+ mov r0, #134 ;@ 0x86
+ mov r1, #16
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, r4, lsl #16
+ movs r0, r0, lsr #16
+ bne _03806198
+ add r0, sp, #4
+ bl FUN_03805BC4
+ b _038061A0
+_03806198:
+ add r0, sp, #4
+ bl FUN_03805AAC
+_038061A0:
+ mov r0, #6
+ mov r1, #16
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, #134 ;@ 0x86
+ mov r1, #80 ;@ 0x50
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+ mov r0, r5, lsl #16
+ movs r0, r0, lsr #16
+ bne _038061E0
+ add r0, sp, #4
+ bl FUN_03805BC4
+ b _038061E8
+_038061E0:
+ add r0, sp, #4
+ bl FUN_03805AAC
+_038061E8:
+ mov r0, #6
+ mov r1, #80 ;@ 0x50
+ add r2, sp, #4
+ mov r3, #3
+ bl FUN_03805A48
+_038061FC:
+ add sp, sp, #12
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+
+ arm_func_start FUN_03806208
+FUN_03806208: ;@ 0x03806208
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ mov r0, #32768 ;@ 0x8000
+ bl FUN_037FB8F0
+ ldrh r0, [sp]
+ bic r0, r0, #1
+ orr r0, r0, #1
+ strh r0, [sp]
+ mov r0, #6
+ mov r1, #0
+ add r2, sp, #0
+ mov r3, #1
+ bl FUN_03805A48
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+
+ arm_func_start FUN_03806248
+FUN_03806248: ;@ 0x03806248
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #114 ;@ 0x72
+ strh r0, [ip]
+ mov r3, #2
+_03806264:
+ subs r3, r3, #1
+ bne _03806264
+ bic r0, r0, #4
+ orr r0, r0, #4
+ strh r0, [ip]
+ mov r3, #2
+_0380627C:
+ subs r3, r3, #1
+ bne _0380627C
+ bx lr
+
+ arm_func_start FUN_03806288
+FUN_03806288: ;@ 0x03806288
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+ mov r3, #2
+_03806294:
+ subs r3, r3, #1
+ bne _03806294
+ ldrh r0, [ip]
+ bic r0, r0, #4
+ orr r0, r0, #0
+ strh r0, [ip]
+ mov r3, #2
+_038062B0:
+ subs r3, r3, #1
+ bne _038062B0
+ bx lr
+
+ arm_func_start FUN_038062BC
+FUN_038062BC: ;@ 0x038062BC
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+ orr r1, r0, r1
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #116 ;@ 0x74
+ mov r2, #0
+_038062D8:
+ bic r0, r0, #3
+ orr r0, r0, #0
+ mov r3, #1
+ tst r3, r1, lsr r2
+ movne r3, #1
+ moveq r3, #0
+ orr r0, r0, r3
+ strh r0, [ip]
+ mov r3, #9
+_038062FC:
+ subs r3, r3, #1
+ bne _038062FC
+ bic r0, r0, #2
+ orr r0, r0, #2
+ strh r0, [ip]
+ mov r3, #9
+_03806314:
+ subs r3, r3, #1
+ bne _03806314
+ add r2, r2, #1
+ cmp r2, #8
+ bne _038062D8
+ bx lr
+
+ arm_func_start FUN_0380632C
+FUN_0380632C: ;@ 0x0380632C
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+_03806334:
+ stmdb sp!, {r0, r1}
+ tst r0, #1
+ ldreqh r1, [r0]
+ ldrneh r1, [r0, #-1]
+ movne r1, r1, lsr #8
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #116 ;@ 0x74
+ mov r2, #0
+_03806358:
+ bic r0, r0, #3
+ orr r0, r0, #0
+ mov r3, #1
+ tst r3, r1, lsr r2
+ movne r3, #1
+ moveq r3, #0
+ orr r0, r0, r3
+ strh r0, [ip]
+ mov r3, #9
+_0380637C:
+ subs r3, r3, #1
+ bne _0380637C
+ bic r0, r0, #2
+ orr r0, r0, #2
+ strh r0, [ip]
+ mov r3, #9
+_03806394:
+ subs r3, r3, #1
+ bne _03806394
+ add r2, r2, #1
+ cmp r2, #8
+ bne _03806358
+ ldmia sp!, {r0, r1}
+ add r0, r0, #1
+ subs r1, r1, #1
+ bne _03806334
+ bx lr
+
+ arm_func_start FUN_038063BC
+FUN_038063BC: ;@ 0x038063BC
+ mov ip, #67108864 ;@ 0x4000000
+ add ip, ip, #312 ;@ 0x138
+_038063C4:
+ stmdb sp!, {r0, r1}
+ ldrh r0, [ip]
+ bic r0, r0, #119 ;@ 0x77
+ orr r0, r0, #100 ;@ 0x64
+ mov r2, #0
+ mov r1, #0
+_038063DC:
+ bic r0, r0, #3
+ orr r0, r0, #0
+ strh r0, [ip]
+ mov r3, #9
+_038063EC:
+ subs r3, r3, #1
+ bne _038063EC
+ ldrh r0, [ip]
+ and r3, r0, #1
+ cmp r3, #1
+ moveq r3, #128 ;@ 0x80
+ movne r3, #0
+ orr r2, r3, r2, lsr #1
+ bic r0, r0, #2
+ orr r0, r0, #2
+ strh r0, [ip]
+ mov r3, #9
+_0380641C:
+ subs r3, r3, #1
+ bne _0380641C
+ add r1, r1, #1
+ cmp r1, #8
+ bne _038063DC
+ ldmia sp!, {r0, r1}
+ tst r0, #1
+ beq _03806454
+ ldrh r3, [r0, #-1]
+ bic r3, r3, #65280 ;@ 0xff00
+ mov r2, r2, lsl #8
+ orr r3, r2, r3
+ strh r3, [r0, #-1]
+ b _03806464
+_03806454:
+ ldrh r3, [r0]
+ bic r3, r3, #255 ;@ 0xff
+ orr r3, r3, r2
+ strh r3, [r0]
+_03806464:
+ add r0, r0, #1
+ subs r1, r1, #1
+ bne _038063C4
+ bx lr
+
+ arm_func_start FUN_03806474
+FUN_03806474: ;@ 0x03806474
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ ldr r4, _0380665C ;@ =_06019960
+ ldr r0, _03806660 ;@ =_0601A960
+ ldr r0, [r0, #1356] ;@ 0x54c
+ cmp r0, #0
+ beq _038064B0
+ add r0, r4, #4096 ;@ 0x1000
+ ldr r0, [r0, #1356] ;@ 0x54c
+ ldr r0, [r0]
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _038064B0
+ bl FUN_03806668
+ bl FUN_03806670
+_038064B0:
+ add r0, r4, #136 ;@ 0x88
+ add r1, sp, #0
+ mov r2, #0
+ bl FUN_037F9884
+ cmp r0, #0
+ beq _03806520
+ add r0, r4, #4096 ;@ 0x1000
+ ldr r0, [r0, #1356] ;@ 0x54c
+ cmp r0, #0
+ beq _038064B0
+ bl FUN_03807534
+ mov r5, r0
+ mov r0, #0
+ mov r1, r5
+ mov r2, #256 ;@ 0x100
+ bl FUN_037FB334
+ ldr r0, [sp]
+ ldrh r0, [r0]
+ strh r0, [r5]
+ mov r0, #4
+ strh r0, [r5, #2]
+ mov r0, r5
+ bl FUN_03807590
+ ldr r1, [sp]
+ ldrh r0, [r1]
+ orr r0, r0, #32768 ;@ 0x8000
+ strh r0, [r1]
+ b _038064B0
+_03806520:
+ bl FUN_03806678
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _03806548
+ add r0, r4, #136 ;@ 0x88
+ mov r1, #0
+ mov r2, #1
+ bl FUN_037F9924
+ bl FUN_03806678
+ bl FUN_037F90CC
+_03806548:
+ add r0, r4, #136 ;@ 0x88
+ add r1, sp, #0
+ mov r2, #0
+ bl FUN_037F9884
+ mov r6, r0
+ add r0, r4, #88 ;@ 0x58
+ add r1, sp, #0
+ mov r2, #0
+ bl FUN_037F9884
+ mov r5, r0
+ mov r0, r4
+ add r1, sp, #0
+ mov r2, #0
+ bl FUN_037F9884
+ orr r1, r6, r5
+ orrs r0, r0, r1
+ beq _03806590
+ bl FUN_037FB1F0
+_03806590:
+ bl FUN_03806680
+ add r7, r4, #40 ;@ 0x28
+ add r6, sp, #0
+ mov r5, #0
+_038065A0:
+ mov r0, r7
+ mov r1, r6
+ mov r2, r5
+ bl FUN_037F9884
+ cmp r0, #0
+ bne _038065A0
+ bl FUN_03806688
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _038065E0
+ add r0, r4, #40 ;@ 0x28
+ mov r1, #0
+ mov r2, #1
+ bl FUN_037F9924
+ bl FUN_03806688
+ bl FUN_037F90CC
+_038065E0:
+ mov r0, #1
+ bl FUN_03802BC8
+ mov r0, #1
+ bl FUN_0380283C
+ add r0, r4, #4096 ;@ 0x1000
+ ldr r0, [r0, #1356] ;@ 0x54c
+ cmp r0, #0
+ beq _03806614
+ ldr r1, [r0]
+ ldrh r0, [r1]
+ cmp r0, #0
+ movne r0, #0
+ strneh r0, [r1]
+_03806614:
+ bl FUN_03806970
+ mov r6, #15
+ mov r5, #131072 ;@ 0x20000
+ mov r4, #0
+_03806624:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _03806624
+ bl FUN_037FB05C
+ mov r1, #1
+ ldr r0, _03806664 ;@ =_0380A3F0
+ strb r1, [r0]
+ bl FUN_037F9218
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_0380665C: .word _06019960
+_03806660: .word _0601A960
+_03806664: .word _0380A3F0
+
+ arm_func_start FUN_03806668
+FUN_03806668: ;@ 0x03806668
+ ldr pc, _0380666C ;@ =_06006978
+_0380666C: .word _06006978
+
+ arm_func_start FUN_03806670
+FUN_03806670: ;@ 0x03806670
+ ldr pc, _03806674 ;@ =_060009A4
+_03806674: .word _060009A4
+
+ arm_func_start FUN_03806678
+FUN_03806678: ;@ 0x03806678
+ ldr pc, _0380667C ;@ =_06000204
+_0380667C: .word _06000204
+
+ arm_func_start FUN_03806680
+FUN_03806680: ;@ 0x03806680
+ ldr pc, _03806684 ;@ =_06008CC4
+_03806684: .word _06008CC4
+
+ arm_func_start FUN_03806688
+FUN_03806688: ;@ 0x03806688
+ ldr pc, _0380668C ;@ =_060001F8
+_0380668C: .word _060001F8
+
+ arm_func_start FUN_03806690
+FUN_03806690: ;@ 0x03806690
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, _03806738 ;@ =_0380A400
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _038066C0
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _0380672C
+_038066C0:
+ ldr r0, _0380673C ;@ =_0380A3F0
+ ldrb r1, [r0]
+ cmp r1, #3
+ beq _038066E0
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _0380672C
+_038066E0:
+ mov r1, #4
+ strb r1, [r0]
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #10
+ ldr r1, _03806740 ;@ =FUN_03806920
+ bl FUN_037FB7A8
+ mov r0, #1024 ;@ 0x400
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ ldr r0, _03806738 ;@ =_0380A400
+ ldr r1, _03806744 ;@ =FUN_03806474
+ mov r2, #0
+ ldr r3, _03806748 ;@ =_0380AA64
+ bl FUN_037F9244
+ ldr r0, _03806738 ;@ =_0380A400
+ bl FUN_037F8FB4
+ mov r0, #1
+_0380672C:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03806738: .word _0380A400
+_0380673C: .word _0380A3F0
+_03806740: .word FUN_03806920
+_03806744: .word FUN_03806474
+_03806748: .word _0380AA64
+
+ arm_func_start FUN_0380674C
+FUN_0380674C: ;@ 0x0380674C
+ stmdb sp!, {r4, r5, r6, lr}
+ bl FUN_038069B0
+ ldr r0, _038067A0 ;@ =_0380A3F8
+ ldr r0, [r0]
+ bl FUN_038069EC
+ mov r6, #15
+ mov r5, #65536 ;@ 0x10000
+ mov r4, #0
+_0380676C:
+ mov r0, r6
+ mov r1, r5
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _0380676C
+ bl FUN_037FB05C
+ mov r1, #3
+ ldr r0, _038067A4 ;@ =_0380A3F0
+ strb r1, [r0]
+ bl FUN_037F9218
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+_038067A0: .word _0380A3F8
+_038067A4: .word _0380A3F0
+
+ arm_func_start FUN_038067A8
+FUN_038067A8: ;@ 0x038067A8
+ stmdb sp!, {r4, lr}
+ sub sp, sp, #8
+ bl FUN_037FB05C
+ mov r4, r0
+ ldr r0, _03806844 ;@ =_0380A400
+ bl FUN_038068BC
+ cmp r0, #0
+ beq _038067D8
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _03806838
+_038067D8:
+ ldr r0, _03806848 ;@ =_0380A3F0
+ ldrb r1, [r0]
+ cmp r1, #1
+ beq _038067F8
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #0
+ b _03806838
+_038067F8:
+ mov r1, #2
+ strb r1, [r0]
+ mov r0, r4
+ bl FUN_037FB070
+ mov r0, #1024 ;@ 0x400
+ str r0, [sp]
+ mov r0, #10
+ str r0, [sp, #4]
+ ldr r0, _03806844 ;@ =_0380A400
+ ldr r1, _0380684C ;@ =FUN_0380674C
+ mov r2, #0
+ ldr r3, _03806850 ;@ =_0380AA64
+ bl FUN_037F9244
+ ldr r0, _03806844 ;@ =_0380A400
+ bl FUN_037F8FB4
+ mov r0, #1
+_03806838:
+ add sp, sp, #8
+ ldmia sp!, {r4, lr}
+ bx lr
+_03806844: .word _0380A400
+_03806848: .word _0380A3F0
+_0380684C: .word FUN_0380674C
+_03806850: .word _0380AA64
+
+ arm_func_start FUN_03806854
+FUN_03806854: ;@ 0x03806854
+ stmdb sp!, {r4, lr}
+ mov r4, r1
+ cmp r4, #65536 ;@ 0x10000
+ beq _03806870
+ cmp r4, #131072 ;@ 0x20000
+ beq _03806884
+ b _03806898
+_03806870:
+ bl FUN_038067A8
+ cmp r0, #0
+ bne _038068B4
+ orr r4, r4, #5
+ b _0380689C
+_03806884:
+ bl FUN_03806690
+ cmp r0, #0
+ bne _038068B4
+ orr r4, r4, #5
+ b _0380689C
+_03806898:
+ orr r4, r4, #7
+_0380689C:
+ mov r0, #15
+ mov r1, r4
+ mov r2, #0
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _0380689C
+_038068B4:
+ ldmia sp!, {r4, lr}
+ bx lr
+
+ arm_func_start FUN_038068BC
+FUN_038068BC: ;@ 0x038068BC
+ cmp r0, #0
+ moveq r0, #0
+ bxeq lr
+ ldr r1, _0380691C ;@ =_0380779C
+ ldr r1, [r1, #8]
+ b _0380690C
+_038068D4:
+ cmp r1, r0
+ bne _03806908
+ ldr r0, [r0, #72] ;@ 0x48
+ cmp r0, #0
+ beq _038068F8
+ cmp r0, #1
+ beq _038068F8
+ cmp r0, #2
+ b _03806900
+_038068F8:
+ mov r0, #1
+ bx lr
+_03806900:
+ mov r0, #0
+ bx lr
+_03806908:
+ ldr r1, [r1, #76] ;@ 0x4c
+_0380690C:
+ cmp r1, #0
+ bne _038068D4
+ mov r0, #0
+ bx lr
+_0380691C: .word _0380779C
+
+ arm_func_start FUN_03806920
+FUN_03806920: ;@ 0x03806920
+ stmdb sp!, {r4, r5, r6, lr}
+ movs r6, r1
+ ldrh r4, [r6]
+ beq _03806968
+ mov r0, #0
+ mov r2, #256 ;@ 0x100
+ bl FUN_037FB334
+ strh r4, [r6]
+ mov r0, #4
+ strh r0, [r6, #2]
+ mov r5, #10
+ mov r4, #0
+_03806950:
+ mov r0, r5
+ mov r1, r6
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _03806950
+_03806968:
+ ldmia sp!, {r4, r5, r6, lr}
+ bx lr
+
+ arm_func_start FUN_03806970
+FUN_03806970: ;@ 0x03806970
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _038069A8 ;@ =_0380A3F4
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _0380699C
+ mov r0, #0
+ mov r1, #100663296 ;@ 0x6000000
+ ldr r2, _038069AC ;@ =_0380A3FC
+ ldr r2, [r2]
+ bl FUN_037FB360
+_0380699C:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038069A8: .word _0380A3F4
+_038069AC: .word _0380A3FC
+
+ arm_func_start FUN_038069B0
+FUN_038069B0: ;@ 0x038069B0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r0, _038069E4 ;@ =_0380A3F4
+ ldr r0, [r0]
+ cmp r0, #0
+ beq _038069D8
+ mov r1, #100663296 ;@ 0x6000000
+ ldr r2, _038069E8 ;@ =_0380A3FC
+ ldr r2, [r2]
+ bl FUN_037FB3AC
+_038069D8:
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_038069E4: .word _0380A3F4
+_038069E8: .word _0380A3FC
+
+ arm_func_start FUN_038069EC
+FUN_038069EC: ;@ 0x038069EC
+ stmfd sp!, {lr}
+ sub sp, sp, #84 ;@ 0x54
+ ldr r1, _03806A84 ;@ =_0380B064
+ str r1, [sp]
+ ldr r1, _03806A88 ;@ =_0380B064
+ str r1, [sp, #4]
+ mov r1, #1536 ;@ 0x600
+ str r1, [sp, #8]
+ mov r3, #4
+ str r3, [sp, #12]
+ mov r1, #0
+ str r1, [sp, #32]
+ mov r2, #8
+ str r2, [sp, #36] ;@ 0x24
+ str r0, [sp, #40] ;@ 0x28
+ ldr r0, _03806A8C ;@ =_0380A4A4
+ str r0, [sp, #44] ;@ 0x2c
+ mov r0, #448 ;@ 0x1c0
+ str r0, [sp, #48] ;@ 0x30
+ mov r1, #3
+ str r1, [sp, #52] ;@ 0x34
+ mov r0, #64 ;@ 0x40
+ str r0, [sp, #28]
+ str r1, [sp, #60] ;@ 0x3c
+ str r3, [sp, #76] ;@ 0x4c
+ mov r0, #5
+ str r0, [sp, #68] ;@ 0x44
+ mov r0, #7
+ str r0, [sp, #56] ;@ 0x38
+ str r2, [sp, #72] ;@ 0x48
+ mov r0, #9
+ str r0, [sp, #64] ;@ 0x40
+ add r0, sp, #0
+ add r1, sp, #52 ;@ 0x34
+ bl FUN_03806A90
+ add sp, sp, #84 ;@ 0x54
+ ldmia sp!, {lr}
+ bx lr
+_03806A84: .word _0380B064
+_03806A88: .word _0380B064
+_03806A8C: .word _0380A4A4
+
+ arm_func_start FUN_03806A90
+FUN_03806A90: ;@ 0x03806A90
+ ldr pc, _03806A94 ;@ =_06000798
+_03806A94: .word _06000798
+
+ arm_func_start FUN_03806A98
+FUN_03806A98: ;@ 0x03806A98
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _03806ACC ;@ =0x04000304
+ ldrh r0, [r1]
+ bic r0, r0, #2
+ strh r0, [r1]
+ mov r0, #1
+ bl FUN_03802BC8
+ mov r0, #1
+ bl FUN_0380283C
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03806ACC: .word 0x04000304
+
+ arm_func_start FUN_03806AD0
+FUN_03806AD0: ;@ 0x03806AD0
+ stmfd sp!, {lr}
+ sub sp, sp, #4
+ ldr r1, _03806B20 ;@ =_0380A3F8
+ str r0, [r1]
+ mov r1, #1
+ ldr r0, _03806B24 ;@ =_0380A3F0
+ strb r1, [r0]
+ ldr r0, _03806B28 ;@ =_0380A400
+ mov r1, #0
+ mov r2, #164 ;@ 0xa4
+ bl FUN_037FB3E4
+ mov r0, #15
+ ldr r1, _03806B2C ;@ =FUN_03806854
+ bl FUN_037FB7A8
+ mov r0, #10
+ ldr r1, _03806B30 ;@ =FUN_03806920
+ bl FUN_037FB7A8
+ add sp, sp, #4
+ ldmia sp!, {lr}
+ bx lr
+_03806B20: .word _0380A3F8
+_03806B24: .word _0380A3F0
+_03806B28: .word _0380A400
+_03806B2C: .word FUN_03806854
+_03806B30: .word FUN_03806920
+ ldr r1, _03806B6C ;@ =0x55555555
+ and r1, r1, r0, lsr #1
+ sub r2, r0, r1
+ ldr r0, _03806B70 ;@ =0x33333333
+ and r1, r2, r0
+ and r0, r0, r2, lsr #2
+ add r0, r1, r0
+ add r1, r0, r0, lsr #4
+ ldr r0, _03806B74 ;@ =0x0F0F0F0F
+ and r0, r1, r0
+ add r0, r0, r0, lsr #8
+ add r0, r0, r0, lsr #16
+ and r0, r0, #255 ;@ 0xff
+ bx lr
+_03806B6C: .word 0x55555555
+_03806B70: .word 0x33333333
+_03806B74: .word 0x0F0F0F0F
+
+ arm_func_start _ll_udiv
+_ll_udiv: ;@ 0x03806B78
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ mov r4, #0
+ b _03806B8C
+
+ arm_func_start _ull_mod
+_ull_mod: ;@ 0x03806B84
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ mov r4, #1
+_03806B8C:
+ orrs r5, r3, r2
+ bne _03806B9C
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806B9C:
+ orrs r5, r1, r3
+ bne _03806C44
+ mov r1, r2
+ bl _u32_div_not_0_f
+ cmp r4, #0
+ movne r0, r1
+ mov r1, #0
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+
+ arm_func_start _ll_mod
+_ll_mod: ;@ 0x03806BC0
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ mov r4, r1
+ orr r4, r4, #1
+ b _03806BE0
+
+ arm_func_start _ll_sdiv
+_ll_sdiv: ;@ 0x03806BD0
+ stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
+ eor r4, r1, r3
+ mov r4, r4, asr #1
+ mov r4, r4, lsl #1
+_03806BE0:
+ orrs r5, r3, r2
+ bne _03806BF0
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806BF0:
+ mov r5, r0, lsr #31
+ add r5, r5, r1
+ mov r6, r2, lsr #31
+ add r6, r6, r3
+ orrs r6, r5, r6
+ bne _03806C24
+ mov r1, r2
+ bl _s32_div_f
+ ands r4, r4, #1
+ movne r0, r1
+ mov r1, r0, asr #31
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806C24:
+ cmp r1, #0
+ bge _03806C34
+ rsbs r0, r0, #0
+ rsc r1, r1, #0
+_03806C34:
+ cmp r3, #0
+ bge _03806C44
+ rsbs r2, r2, #0
+ rsc r3, r3, #0
+_03806C44:
+ orrs r5, r1, r0
+ beq _03806D68
+ mov r5, #0
+ mov r6, #1
+ cmp r3, #0
+ bmi _03806C70
+_03806C5C:
+ add r5, r5, #1
+ adds r2, r2, r2
+ adcs r3, r3, r3
+ bpl _03806C5C
+ add r6, r6, r5
+_03806C70:
+ cmp r1, #0
+ blt _03806C90
+_03806C78:
+ cmp r6, #1
+ beq _03806C90
+ sub r6, r6, #1
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ bpl _03806C78
+_03806C90:
+ mov r7, #0
+ mov ip, #0
+ mov fp, #0
+ b _03806CB8
+_03806CA0:
+ orr ip, ip, #1
+ subs r6, r6, #1
+ beq _03806D10
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ adcs r7, r7, r7
+_03806CB8:
+ subs r0, r0, r2
+ sbcs r1, r1, r3
+ sbcs r7, r7, #0
+ adds ip, ip, ip
+ adc fp, fp, fp
+ cmp r7, #0
+ bge _03806CA0
+_03806CD4:
+ subs r6, r6, #1
+ beq _03806D08
+ adds r0, r0, r0
+ adcs r1, r1, r1
+ adc r7, r7, r7
+ adds r0, r0, r2
+ adcs r1, r1, r3
+ adc r7, r7, #0
+ adds ip, ip, ip
+ adc fp, fp, fp
+ cmp r7, #0
+ bge _03806CA0
+ b _03806CD4
+_03806D08:
+ adds r0, r0, r2
+ adc r1, r1, r3
+_03806D10:
+ ands r7, r4, #1
+ moveq r0, ip
+ moveq r1, fp
+ beq _03806D48
+ subs r7, r5, #32
+ movge r0, r1, lsr r7
+ bge _03806D6C
+ rsb r7, r5, #32
+ mov r0, r0, lsr r5
+ orr r0, r0, r1, lsl r7
+ mov r1, r1, lsr r5
+ b _03806D48
+ mov r0, r1, lsr r7
+ mov r1, #0
+_03806D48:
+ cmp r4, #0
+ blt _03806D58
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806D58:
+ rsbs r0, r0, #0
+ rsc r1, r1, #0
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+_03806D68:
+ mov r0, #0
+_03806D6C:
+ mov r1, #0
+ cmp r4, #0
+ blt _03806D58
+ ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
+ bx lr
+
+ arm_func_start _s32_div_f
+_s32_div_f: ;@ 0x03806D80
+ eor ip, r0, r1
+ and ip, ip, #-2147483648 ;@ 0x80000000
+ cmp r0, #0
+ rsblt r0, r0, #0
+ addlt ip, ip, #1
+ cmp r1, #0
+ rsblt r1, r1, #0
+ beq _03806F78
+ cmp r0, r1
+ movcc r1, r0
+ movcc r0, #0
+ bcc _03806F78
+ mov r2, #28
+ mov r3, r0, lsr #4
+ cmp r1, r3, lsr #12
+ suble r2, r2, #16
+ movle r3, r3, lsr #16
+ cmp r1, r3, lsr #4
+ suble r2, r2, #8
+ movle r3, r3, lsr #8
+ cmp r1, r3
+ suble r2, r2, #4
+ movle r3, r3, lsr #4
+ mov r0, r0, lsl r2
+ rsb r1, r1, #0
+ adds r0, r0, r0
+ add r2, r2, r2, lsl #1
+ add pc, pc, r2, lsl #2
+ nop ;@ (mov r0, r0)
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ mov r1, r3
+_03806F78:
+ ands r3, ip, #-2147483648 ;@ 0x80000000
+ rsbne r0, r0, #0
+ ands r3, ip, #1
+ rsbne r1, r1, #0
+ bx lr
+
+ arm_func_start _u32_div_f
+_u32_div_f: ;@ 0x03806F8C
+ cmp r1, #0
+ bxeq lr
+
+ arm_func_start _u32_div_not_0_f
+_u32_div_not_0_f: ;@ 0x03806F94
+ cmp r0, r1
+ movcc r1, r0
+ movcc r0, #0
+ bxcc lr
+ mov r2, #28
+ mov r3, r0, lsr #4
+ cmp r1, r3, lsr #12
+ suble r2, r2, #16
+ movle r3, r3, lsr #16
+ cmp r1, r3, lsr #4
+ suble r2, r2, #8
+ movle r3, r3, lsr #8
+ cmp r1, r3
+ suble r2, r2, #4
+ movle r3, r3, lsr #4
+ mov r0, r0, lsl r2
+ rsb r1, r1, #0
+ adds r0, r0, r0
+ add r2, r2, r2, lsl #1
+ add pc, pc, r2, lsl #2
+ nop ;@ (mov r0, r0)
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ adcs r3, r1, r3, lsl #1
+ subcc r3, r3, r1
+ adcs r0, r0, r0
+ mov r1, r3
+ bx lr
+
+ .global _03807170
+_03807170:
+ .byte 0
+ .byte 6
+ .byte 12
+ .byte 19
+ .byte 25
+ .byte 31
+ .byte 37
+ .byte 43
+ .byte 49
+ .byte 54
+ .byte 60
+ .byte 65
+ .byte 71
+ .byte 76
+ .byte 81
+ .byte 85
+ .byte 90
+ .byte 94
+ .byte 98
+ .byte 102
+ .byte 106
+ .byte 109
+ .byte 112
+ .byte 115
+ .byte 117
+ .byte 120
+ .byte 122
+ .byte 123
+ .byte 125
+ .byte 126
+ .byte 126
+ .byte 127
+ .byte 127
+ .byte 0
+ .byte 0
+ .byte 0
+
+ .global _03807194
+_03807194:
+ .short -32768
+ .short -722
+ .short -721
+ .short -651
+ .short -601
+ .short -562
+ .short -530
+ .short -503
+ .short -480
+ .short -460
+ .short -442
+ .short -425
+ .short -410
+ .short -396
+ .short -383
+ .short -371
+ .short -360
+ .short -349
+ .short -339
+ .short -330
+ .short -321
+ .short -313
+ .short -305
+ .short -297
+ .short -289
+ .short -282
+ .short -276
+ .short -269
+ .short -263
+ .short -257
+ .short -251
+ .short -245
+ .short -239
+ .short -234
+ .short -229
+ .short -224
+ .short -219
+ .short -214
+ .short -210
+ .short -205
+ .short -201
+ .short -196
+ .short -192
+ .short -188
+ .short -184
+ .short -180
+ .short -176
+ .short -173
+ .short -169
+ .short -165
+ .short -162
+ .short -158
+ .short -155
+ .short -152
+ .short -149
+ .short -145
+ .short -142
+ .short -139
+ .short -136
+ .short -133
+ .short -130
+ .short -127
+ .short -125
+ .short -122
+ .short -119
+ .short -116
+ .short -114
+ .short -111
+ .short -109
+ .short -106
+ .short -103
+ .short -101
+ .short -99
+ .short -96
+ .short -94
+ .short -91
+ .short -89
+ .short -87
+ .short -85
+ .short -82
+ .short -80
+ .short -78
+ .short -76
+ .short -74
+ .short -72
+ .short -70
+ .short -68
+ .short -66
+ .short -64
+ .short -62
+ .short -60
+ .short -58
+ .short -56
+ .short -54
+ .short -52
+ .short -50
+ .short -49
+ .short -47
+ .short -45
+ .short -43
+ .short -42
+ .short -40
+ .short -38
+ .short -36
+ .short -35
+ .short -33
+ .short -31
+ .short -30
+ .short -28
+ .short -27
+ .short -25
+ .short -23
+ .short -22
+ .short -20
+ .short -19
+ .short -17
+ .short -16
+ .short -14
+ .short -13
+ .short -11
+ .short -10
+ .short -8
+ .short -7
+ .short -6
+ .short -4
+ .short -3
+ .short -1
+ .short 0
+
+ .global _03807294
+_03807294:
+ .byte 0
+ .byte 1
+ .byte 2
+ .byte 4
+
+ .global _03807298
+_03807298:
+ .byte 4
+ .byte 5
+ .byte 6
+ .byte 7
+ .byte 2
+ .byte 0
+ .byte 3
+ .byte 1
+ .byte 8
+ .byte 9
+ .byte 10
+ .byte 11
+ .byte 14
+ .byte 12
+ .byte 15
+ .byte 13
+
+ .global _038072A8
+_038072A8:
+ .byte 0
+ .byte 1
+ .byte 5
+ .byte 14
+ .byte 26
+ .byte 38
+ .byte 51
+ .byte 63
+ .byte 73
+ .byte 84
+ .byte 92
+ .byte 100
+ .byte 109
+ .byte 116
+ .byte 123
+ .byte 127
+ .byte 132
+ .byte 137
+ .byte 143
+ .byte 0
+
+ .global _038072BC
+_038072BC:
+ .word 0x000000C7
+
+ .global _038072C0
+_038072C0:
+ .word 0x00000006
+
+ .global _038072C4
+_038072C4:
+ .word 0x00000005
+
+ .global _038072C8
+_038072C8:
+ .word 0x00000040
+ .word 0x00000006
+ .word 0x01000000
+ .word 0x00000018
+ .word 0x00080000
+ .word 0x00000013
+ .word 0x00100000
+ .word 0x00000014
+ .word 0x00040000
+ .word 0x00000012
+ .word 0x00000008
+ .word 0x00000003
+ .word 0x00000010
+ .word 0x00000004
+ .word 0x00000020
+ .word 0x00000005
+ .word 0x00000100
+ .word 0x00000008
+ .word 0x00000200
+ .word 0x00000009
+ .word 0x00000400
+ .word 0x0000000A
+ .word 0x00000800
+ .word 0x0000000B
+ .word 0x00001000
+ .word 0x0000000C
+ .word 0x00002000
+ .word 0x0000000D
+ .word 0x00000002
+ .word 0x00000001
+ .word 0x00000004
+ .word 0x00000002
+ .word 0x00000001
+ .word 0x00000000
+ .word 0x00010000
+ .word 0x00000010
+ .word 0x00400000
+ .word 0x00000016
+ .word 0x00000080
+ .word 0x00000007
+ .word 0x00020000
+ .word 0x00000011
+ .word 0x00800000
+ .word 0x00000017
+
+ arm_func_start FUN_03807378
+FUN_03807378: ;@ 0x03807378
+ mov ip, #67108864 ;@ 0x4000000
+ str ip, [ip, #520] ;@ 0x208
+ ldr r1, _038073E0 ;@ =0x0380FFFC
+ mov r0, #0
+ str r0, [r1]
+ ldr r1, _038073E4 ;@ =0x04000180
+ mov r0, #256 ;@ 0x100
+ strh r0, [r1]
+_03807398:
+ ldrh r0, [r1]
+ and r0, r0, #15
+ cmp r0, #1
+ bne _03807398
+ ldr r1, _038073E4 ;@ =0x04000180
+ mov r0, #0
+ strh r0, [r1]
+_038073B4:
+ ldrh r0, [r1]
+ cmp r0, #1
+ beq _038073B4
+ ldr r3, _038073E8 ;@ =0x027FFE00
+ ldr ip, [r3, #52] ;@ 0x34
+ mov lr, ip
+ mov r0, #0
+ mov r1, #0
+ mov r2, #0
+ mov r3, #0
+ bx ip
+_038073E0: .word 0x0380FFFC
+_038073E4: .word 0x04000180
+_038073E8: .word 0x027FFE00
+
+ arm_func_start FUN_038073EC
+FUN_038073EC: ;@ 0x038073EC
+ mov r1, #0
+ ldr r0, _03807400 ;@ =0x04000208
+ strh r1, [r0]
+ ldr ip, _03807404 ;@ =FUN_03807378
+ bx ip
+_03807400: .word 0x04000208
+_03807404: .word FUN_03807378
+
+ arm_func_start FUN_03807408
+FUN_03807408: ;@ 0x03807408
+ stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ sub sp, sp, #4
+ ldr r1, _03807530 ;@ =0x00001FFF
+ and r0, r0, r1
+ mov r0, r0, lsl #16
+ movs r6, r0, lsr #16
+ moveq r0, #0
+ beq _03807524
+ mov r9, #0
+ mov r0, #1
+ b _03807444
+_03807434:
+ mov r1, r0, lsl r9
+ ands r1, r6, r1
+ bne _0380744C
+ add r9, r9, #1
+_03807444:
+ cmp r9, #16
+ blt _03807434
+_0380744C:
+ mov sl, #15
+ mov r0, #1
+ b _03807468
+_03807458:
+ mov r1, r0, lsl sl
+ ands r1, r6, r1
+ bne _03807470
+ sub sl, sl, #1
+_03807468:
+ cmp sl, #0
+ bne _03807458
+_03807470:
+ sub r5, sl, r9
+ cmp r5, #5
+ movlt r0, #1
+ movlt r0, r0, lsl r9
+ movlt r0, r0, lsl #16
+ movlt r0, r0, lsr #16
+ blt _03807524
+ add r0, sl, r9
+ mov r1, #2
+ bl _s32_div_f
+ mov r8, r0
+ mov r7, #0
+ mov fp, #2
+ mov r4, #1
+ b _038074D4
+_038074AC:
+ mov r0, r7
+ mov r1, fp
+ bl _s32_div_f
+ mov r0, r1, lsl #1
+ sub r0, r0, #1
+ mla r8, r7, r0, r8
+ mov r0, r4, lsl r8
+ ands r0, r6, r0
+ bne _038074DC
+ add r7, r7, #1
+_038074D4:
+ cmp r7, r5
+ blt _038074AC
+_038074DC:
+ sub r0, sl, r8
+ cmp r0, #5
+ blt _038074F4
+ sub r0, r8, r9
+ cmp r0, #5
+ bge _0380750C
+_038074F4:
+ mov r0, #1
+ mov r1, r0, lsl r9
+ orr r0, r1, r0, lsl sl
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+ b _03807524
+_0380750C:
+ mov r1, #1
+ mov r0, r1, lsl sl
+ orr r0, r0, r1, lsl r8
+ orr r0, r0, r1, lsl r9
+ mov r0, r0, lsl #16
+ mov r0, r0, lsr #16
+_03807524:
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr}
+ bx lr
+_03807530: .word 0x00001FFF
+
+ arm_func_start FUN_03807534
+FUN_03807534: ;@ 0x03807534
+ stmdb sp!, {r4, r5, lr}
+ sub sp, sp, #4
+ ldr r0, _03807584 ;@ =_0601AE88
+ bl FUN_037F9ADC
+ mov r5, #256 ;@ 0x100
+ ldr r4, _03807588 ;@ =0x027FFF96
+ b _03807558
+_03807550:
+ mov r0, r5
+ bl FUN_037F8CB4
+_03807558:
+ ldrh r0, [r4]
+ ands r1, r0, #1
+ bne _03807550
+ orr r0, r0, #1
+ strh r0, [r4]
+ ldr r0, _0380758C ;@ =_0601A960
+ ldr r0, [r0, #1356] ;@ 0x54c
+ ldr r0, [r0, #8]
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, lr}
+ bx lr
+_03807584: .word _0601AE88
+_03807588: .word 0x027FFF96
+_0380758C: .word _0601A960
+
+ arm_func_start FUN_03807590
+FUN_03807590: ;@ 0x03807590
+ stmdb sp!, {r4, r5, r6, r7, lr}
+ sub sp, sp, #4
+ mov r7, r0
+ mov r6, #256 ;@ 0x100
+ mov r5, #10
+ mov r4, #0
+ b _038075B4
+_038075AC:
+ mov r0, r6
+ bl FUN_037F8CB4
+_038075B4:
+ mov r0, r5
+ mov r1, r7
+ mov r2, r4
+ bl FUN_037FB6DC
+ cmp r0, #0
+ blt _038075AC
+ ldr r0, _038075E0 ;@ =_0601AE88
+ bl FUN_037F9A6C
+ add sp, sp, #4
+ ldmia sp!, {r4, r5, r6, r7, lr}
+ bx lr
+_038075E0: .word _0601AE88
+ .balign 2, 0 ; Don't pad with nop
diff --git a/arm7/asm/dtcm_data.s b/arm7/asm/dtcm_data.s
new file mode 100644
index 00000000..a6cc0cae
--- /dev/null
+++ b/arm7/asm/dtcm_data.s
@@ -0,0 +1,112 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .data
+
+ .global _038075E4
+_038075E4:
+ .word 0x00090008
+ .word 0x000B000A
+ .word 0x00040003
+ .word 0x00060005
+ .word 0x00000000
+
+ .global _038075F8
+_038075F8:
+ .word FUN_037F86B4
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F873C
+ .word FUN_037F872C
+ .word FUN_037F871C
+ .word FUN_037F870C
+ .word FUN_037F8820
+ .word FUN_037F877C
+ .word FUN_037F876C
+ .word FUN_037F875C
+ .word FUN_037F874C
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+ .word FUN_037F8820
+
+ .global _0380765C
+_0380765C:
+ .word 0xFFFFFFFF
+
+ .global _03807660
+_03807660:
+ .word 0x12345678
+
+ .global _03807664
+_03807664:
+ .word 0x027FFE00
+
+ .global _03807668
+_03807668:
+ .word 0xFFFFFFFF
+
+ .global _0380766C
+_0380766C:
+ .word 0x00000001
+
+ .global _03807670
+_03807670:
+ .word 0x00000001
+
+ .global _03807674
+_03807674:
+ .word 0x00000000
+ .word 0xAA000000
+ .word 0x00010008
+ .word 0x00000000
+ .word 0xCC000000
+ .word 0x00010008
+ .word 0x00000000
+ .word 0xE3800000
+ .word 0x0001000C
+ .word 0x00000000
+ .word 0xF0F00000
+ .word 0x00010010
+ .word 0x00000000
+ .word 0xF83E0000
+ .word 0x00010014
+ .word 0x00000000
+ .word 0xFC000000
+ .word 0x0001000C
+ .word 0x00000000
+ .word 0xFF000000
+ .word 0x00010010
+ .word 0x00000000
+ .word 0xFFC00000
+ .word 0x00010014
+ .word 0x00000000
+ .word 0xFF000000
+ .word 0x00010020
+ .word 0x00000000
+ .word 0xFF00FF00
+ .word 0x00010020
+ .word 0x00000000
+ .word 0xFFFFFF00
+ .word 0x00010020
+ .word 0x00000000
+ .word 0xC3000000
+ .word 0x00020028
+
+ .global _03807704
+_03807704:
+ .word 0x00000001
+
+ .global _03807708
+_03807708:
+ .word 0xFFFFFFFF
+ .balign 2, 0 ; Don't pad with nop
diff --git a/arm7/asm/libsyscall.s b/arm7/asm/libsyscall.s
new file mode 100644
index 00000000..7b31d6f3
--- /dev/null
+++ b/arm7/asm/libsyscall.s
@@ -0,0 +1,140 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+
+ .section .text
+
+ non_word_aligned_thumb_func_start SVC_SoftReset
+SVC_SoftReset: ; 0x038010D4
+ swi 0
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_WaitByLoop
+SVC_WaitByLoop: ; 0x038010D8
+ swi 3
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_WaitIntr
+SVC_WaitIntr: ; 0x038010DC
+ ldr r2, _038010E8 ; =0x04000000
+ mov ip, r2
+ mov r2, #0
+ swi 4
+ bx lr
+_038010E8: .word 0x04000000
+
+ non_word_aligned_thumb_func_start SVC_WaitVBlankIntr
+SVC_WaitVBlankIntr: ; 0x038010EC
+ mov r2, #0
+ swi 5
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_Halt
+SVC_Halt: ; 0x038010F2
+ swi 6
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_Stop
+SVC_Stop: ; 0x038010F6
+ swi 7
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_SoundBias
+SVC_SoundBias: ; 0x038010FA
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_SoundBiasSet
+SVC_SoundBiasSet: ; 0x038010FE
+ add r1, r0, #0
+ mov r0, #1
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_SoundBiasReset
+SVC_SoundBiasReset: ; 0x03801106
+ add r1, r0, #0
+ mov r0, #0
+ swi 8
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_Div
+SVC_Div: ; 0x0380110E
+ swi 9
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_DivRem
+SVC_DivRem: ; 0x03801112
+ swi 9
+ add r0, r1, #0
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_CpuSet
+SVC_CpuSet: ; 0x03801118
+ swi 11
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_CpuFastSet
+SVC_CpuFastSet: ; 0x0380111C
+ swi 12
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_Sqrt
+SVC_Sqrt: ; 0x03801120
+ swi 13
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_GetCRC16
+SVC_GetCRC16: ; 0x03801124
+ swi 14
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_IsDebugger
+SVC_IsDebugger: ; 0x03801128
+ swi 15
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_BitUnPack
+SVC_BitUnPack: ; 0x0380112C
+ swi 16
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_LZ77UnCompWram
+SVC_LZ77UnCompWram: ; 0x03801130
+ swi 17
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_LZ77UnCompVramWithReadCB
+SVC_LZ77UnCompVramWithReadCB: ; 0x03801134
+ swi 18
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_HuffUnCompWithReadCB
+SVC_HuffUnCompWithReadCB: ; 0x03801138
+ swi 19
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_RLUnCompWram
+SVC_RLUnCompWram: ; 0x0380113C
+ swi 20
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_RLUnCompVramWithReadCB
+SVC_RLUnCompVramWithReadCB: ; 0x03801140
+ swi 21
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_GetSineTable
+SVC_GetSineTable: ; 0x03801144
+ swi 26
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_GetPitchTable
+SVC_GetPitchTable: ; 0x03801148
+ swi 27
+ bx lr
+
+ non_word_aligned_thumb_func_start SVC_GetVolumeTable
+SVC_GetVolumeTable: ; 0x0380114C
+ swi 28
+ bx lr
+ .balign 2, 0 ; Don't pad with nop
diff --git a/arm7/global.inc b/arm7/global.inc
index b9215e63..b7c4beb2 100644
--- a/arm7/global.inc
+++ b/arm7/global.inc
@@ -9,3 +9,237 @@
.extern SDK_SECTION_ARENA_ITCM_START
.extern SDK_STATIC_BSS_END
.extern SDK_STATIC_BSS_START
+
+; .itcm
+.extern FUN_027E0000
+
+; .dtcm
+.extern FUN_037F8590
+.extern FUN_037F86B4
+.extern FUN_037F870C
+.extern FUN_037F871C
+.extern FUN_037F872C
+.extern FUN_037F873C
+.extern FUN_037F874C
+.extern FUN_037F875C
+.extern FUN_037F876C
+.extern FUN_037F877C
+.extern FUN_037F8820
+.extern FUN_037F8858
+.extern FUN_037F8894
+.extern FUN_037F88CC
+.extern FUN_037F894C
+.extern FUN_037F8A18
+.extern FUN_037F8A24
+.extern FUN_037F8ABC
+.extern FUN_037F8AEC
+.extern FUN_037F8AFC
+.extern FUN_037F8B1C
+.extern FUN_037F8B3C
+.extern FUN_037F8CB4
+.extern FUN_037F8E14
+.extern FUN_037F8FB4
+.extern FUN_037F8FE8
+.extern FUN_037F9064
+.extern FUN_037F90CC
+.extern FUN_037F9218
+.extern FUN_037F9244
+.extern FUN_037F980C
+.extern FUN_037F9884
+.extern FUN_037F9924
+.extern FUN_037F99B8
+.extern FUN_037F9A6C
+.extern FUN_037F9ADC
+.extern FUN_037FA4AC
+.extern FUN_037FA650
+.extern FUN_037FA75C
+.extern FUN_037FA900
+.extern FUN_037FA920
+.extern FUN_037FAC30
+.extern FUN_037FAD00
+.extern FUN_037FAD88
+.extern FUN_037FAEB8
+.extern FUN_037FAFD0
+.extern FUN_037FAFE0
+.extern FUN_037FB05C
+.extern FUN_037FB070
+.extern FUN_037FB0C0
+.extern FUN_037FB1F0
+.extern FUN_037FB334
+.extern FUN_037FB360
+.extern FUN_037FB3AC
+.extern FUN_037FB3E4
+.extern FUN_037FB5B0
+.extern FUN_037FB6DC
+.extern FUN_037FB7A8
+.extern FUN_037FB8F0
+.extern FUN_037FB90C
+.extern FUN_037FBA54
+.extern FUN_037FBAA8
+.extern FUN_03801544
+.extern FUN_038026B0
+.extern FUN_038026DC
+.extern FUN_03802BEC
+.extern FUN_03803C80
+.extern FUN_03803E5C
+.extern FUN_038041E0
+.extern FUN_03804E50
+.extern FUN_03805954
+.extern FUN_03806A98
+.extern FUN_03806AD0
+.extern FUN_038073EC
+.extern FUN_03807408
+.extern _ll_sdiv
+.extern _ll_udiv
+.extern _s32_div_f
+.extern _03807170
+.extern _03807194
+.extern _03807294
+.extern _03807298
+.extern _038072A8
+.extern _038072BC
+.extern _038072C0
+.extern _038072C4
+.extern SVC_CpuSet
+.extern SVC_GetCRC16
+.extern SVC_GetPitchTable
+.extern SVC_GetVolumeTable
+.extern SVC_Halt
+.extern SVC_SoundBiasReset
+.extern SVC_SoundBiasSet
+.extern SVC_Stop
+.extern SVC_WaitByLoop
+.extern _038075E4
+.extern _038075F8
+.extern _0380765C
+.extern _03807660
+.extern _03807664
+.extern _03807668
+.extern _0380766C
+.extern _03807670
+.extern _03807674
+.extern _03807704
+.extern _03807708
+.extern _0380770C
+.extern _03807714
+.extern _03807718
+.extern _0380771C
+.extern _03807744
+.extern _03807748
+.extern _0380774C
+.extern _03807774
+.extern _03807780
+.extern _03807784
+.extern _03807788
+.extern _0380778C
+.extern _03807790
+.extern _03807794
+.extern _03807798
+.extern _0380779C
+.extern _038077A0
+.extern _038077AC
+.extern _03807850
+.extern _038078F4
+.extern _038078F8
+.extern _0380791C
+.extern _03807920
+.extern _03807924
+.extern _03807928
+.extern _03807930
+.extern _03807934
+.extern _0380793C
+.extern _03807940
+.extern _03807944
+.extern _03807948
+.extern _03807950
+.extern _03807954
+.extern _03807958
+.extern _0380795C
+.extern _038079DC
+.extern _038079E0
+.extern _03807A0C
+.extern _03807A10
+.extern _03807A20
+.extern _03807A30
+.extern _03807A34
+.extern _03807A54
+.extern _03807A74
+.extern _03807AA0
+.extern _03807F44
+.extern _03807F48
+.extern _03807F4C
+.extern _03807F50
+.extern _03807F58
+.extern _03807F68
+.extern _03807F6C
+.extern _038084AC
+.extern _038086EC
+.extern _03808EEC
+.extern _038090EC
+.extern _0380910C
+.extern _0380912C
+.extern _03809140
+.extern _03809188
+.extern _03809760
+.extern _03809764
+.extern _03809774
+.extern _03809780
+.extern _038099A0
+.extern _038099A4
+.extern _038099A8
+.extern _038099AC
+.extern _038099B0
+.extern _038099B8
+.extern _03809C5C
+.extern _03809C7C
+.extern _03809CBC
+.extern _03809CC0
+.extern _03809E40
+.extern _03809E4C
+.extern _03809E50
+.extern _03809E54
+.extern _03809E80
+.extern _03809F28
+.extern _03809F2C
+.extern _03809F30
+.extern _03809F34
+.extern _03809F38
+.extern _03809F64
+.extern _03809F68
+.extern _03809F6C
+.extern _03809FA8
+.extern _03809FB8
+.extern _03809FBC
+.extern _03809FC0
+.extern _03809FC4
+.extern _03809FC8
+.extern _03809FCC
+.extern _03809FD0
+.extern _03809FD4
+.extern _03809FEC
+.extern _0380A018
+.extern _0380A038
+.extern _0380A03C
+.extern _0380A05C
+.extern _0380A06C
+.extern _0380A13C
+.extern _0380A210
+.extern _0380A3F0
+.extern _0380A3F4
+.extern _0380A3F8
+.extern _0380A3FC
+.extern _0380A400
+.extern _0380A4A4
+.extern _0380AA64
+.extern _0380B064
+
+; .ext
+.extern _060001F8
+.extern _06000204
+.extern _06000798
+.extern _060009A4
+.extern _06006978
+.extern _06008CC4
+.extern _06019960
+.extern _0601A960
+.extern _0601AE88
diff --git a/arm7/undefined_syms.txt b/arm7/undefined_syms.txt
index adf613c0..c7d4e0df 100644
--- a/arm7/undefined_syms.txt
+++ b/arm7/undefined_syms.txt
@@ -21,5 +21,153 @@ SDK_MAIN_ARENA_LO = 0x0225FFA0;
// EWRAM
SDK_SECTION_ARENA_EX_START = 0x023E0000;
+_060001F8 = 0x060001F8;
+_06000204 = 0x06000204;
+_06000798 = 0x06000798;
+_060009A4 = 0x060009A4;
+_06006978 = 0x06006978;
+_06008CC4 = 0x06008CC4;
+_06019960 = 0x06019960;
+_0601A960 = 0x0601A960;
+_0601AE88 = 0x0601AE88;
+
// DTCM
gUnk027FFC20 = 0x027FFC20;
+
+SVC_SoftReset = 0x038010D4;
+SVC_WaitByLoop = 0x038010D8;
+SVC_WaitIntr = 0x038010DC;
+FUN_038010E6 = 0x038010E6;
+SVC_Halt = 0x038010F2;
+SVC_Stop = 0x038010F6;
+SVC_SoundBias = 0x038010FA;
+SVC_SoundBiasSet = 0x038010FE;
+SVC_SoundBiasReset = 0x03801106;
+SVC_Div = 0x0380110E;
+SVC_DivRem = 0x03801112;
+SVC_CpuSet = 0x03801118;
+SVC_CpuFastSet = 0x0380111C;
+SVC_Sqrt = 0x03801120;
+SVC_GetCRC16 = 0x03801124;
+SVC_IsDebugger = 0x03801128;
+SVC_BitUnPack = 0x0380112C;
+SVC_LZ77UnCompWram = 0x03801130;
+SVC_LZ77UnCompVramWithReadCB = 0x03801134;
+SVC_HuffUnCompWithReadCB = 0x03801138;
+SVC_RLUnCompWram = 0x0380113C;
+SVC_RLUnCompVramWithReadCB = 0x03801140;
+SVC_GetSineTable = 0x03801144;
+SVC_GetPitchTable = 0x03801148;
+SVC_GetVolumeTable = 0x0380114C;
+_0380770C = 0x0380770C;
+_03807714 = 0x03807714;
+_03807718 = 0x03807718;
+_0380771C = 0x0380771C;
+_03807744 = 0x03807744;
+_03807748 = 0x03807748;
+_0380774C = 0x0380774C;
+_03807774 = 0x03807774;
+_03807780 = 0x03807780;
+_03807784 = 0x03807784;
+_03807788 = 0x03807788;
+_0380778C = 0x0380778C;
+_03807790 = 0x03807790;
+_03807794 = 0x03807794;
+_03807798 = 0x03807798;
+_0380779C = 0x0380779C;
+_038077A0 = 0x038077A0;
+_038077AC = 0x038077AC;
+_03807850 = 0x03807850;
+_038078F4 = 0x038078F4;
+_038078F8 = 0x038078F8;
+_0380791C = 0x0380791C;
+_03807920 = 0x03807920;
+_03807924 = 0x03807924;
+_03807928 = 0x03807928;
+_03807930 = 0x03807930;
+_03807934 = 0x03807934;
+_0380793C = 0x0380793C;
+_03807940 = 0x03807940;
+_03807944 = 0x03807944;
+_03807948 = 0x03807948;
+_03807950 = 0x03807950;
+_03807954 = 0x03807954;
+_03807958 = 0x03807958;
+_0380795C = 0x0380795C;
+_038079DC = 0x038079DC;
+_038079E0 = 0x038079E0;
+_03807A0C = 0x03807A0C;
+_03807A10 = 0x03807A10;
+_03807A20 = 0x03807A20;
+_03807A30 = 0x03807A30;
+_03807A34 = 0x03807A34;
+_03807A54 = 0x03807A54;
+_03807A74 = 0x03807A74;
+_03807AA0 = 0x03807AA0;
+_03807F44 = 0x03807F44;
+_03807F48 = 0x03807F48;
+_03807F4C = 0x03807F4C;
+_03807F50 = 0x03807F50;
+_03807F58 = 0x03807F58;
+_03807F68 = 0x03807F68;
+_03807F6C = 0x03807F6C;
+_038084AC = 0x038084AC;
+_038086EC = 0x038086EC;
+_03808EEC = 0x03808EEC;
+_038090EC = 0x038090EC;
+_0380910C = 0x0380910C;
+_0380912C = 0x0380912C;
+_03809140 = 0x03809140;
+_03809188 = 0x03809188;
+_03809760 = 0x03809760;
+_03809764 = 0x03809764;
+_03809774 = 0x03809774;
+_03809780 = 0x03809780;
+_038099A0 = 0x038099A0;
+_038099A4 = 0x038099A4;
+_038099A8 = 0x038099A8;
+_038099AC = 0x038099AC;
+_038099B0 = 0x038099B0;
+_038099B8 = 0x038099B8;
+_03809C5C = 0x03809C5C;
+_03809C7C = 0x03809C7C;
+_03809CBC = 0x03809CBC;
+_03809CC0 = 0x03809CC0;
+_03809E40 = 0x03809E40;
+_03809E4C = 0x03809E4C;
+_03809E50 = 0x03809E50;
+_03809E54 = 0x03809E54;
+_03809E80 = 0x03809E80;
+_03809F28 = 0x03809F28;
+_03809F2C = 0x03809F2C;
+_03809F30 = 0x03809F30;
+_03809F34 = 0x03809F34;
+_03809F38 = 0x03809F38;
+_03809F64 = 0x03809F64;
+_03809F68 = 0x03809F68;
+_03809F6C = 0x03809F6C;
+_03809FA8 = 0x03809FA8;
+_03809FB8 = 0x03809FB8;
+_03809FBC = 0x03809FBC;
+_03809FC0 = 0x03809FC0;
+_03809FC4 = 0x03809FC4;
+_03809FC8 = 0x03809FC8;
+_03809FCC = 0x03809FCC;
+_03809FD0 = 0x03809FD0;
+_03809FD4 = 0x03809FD4;
+_03809FEC = 0x03809FEC;
+_0380A018 = 0x0380A018;
+_0380A038 = 0x0380A038;
+_0380A03C = 0x0380A03C;
+_0380A05C = 0x0380A05C;
+_0380A06C = 0x0380A06C;
+_0380A13C = 0x0380A13C;
+_0380A210 = 0x0380A210;
+_0380A3F0 = 0x0380A3F0;
+_0380A3F4 = 0x0380A3F4;
+_0380A3F8 = 0x0380A3F8;
+_0380A3FC = 0x0380A3FC;
+_0380A400 = 0x0380A400;
+_0380A4A4 = 0x0380A4A4;
+_0380AA64 = 0x0380AA64;
+_0380B064 = 0x0380B064;
diff --git a/arm9/asm/libmwcc.s b/arm9/asm/libmwcc.s
index 707c32e3..fcabec42 100644
--- a/arm9/asm/libmwcc.s
+++ b/arm9/asm/libmwcc.s
@@ -2401,7 +2401,6 @@ _020EBC0C:
bne _020EBAAC
mov r1, r2
bl _u32_div_not_0_f
-_020EBC1C: ; 0x020EBC1C
cmp r4, #0x0
movne r0, r1
mov r1, #0x0