diff options
author | Revo <projectrevotpp@hotmail.com> | 2020-04-27 22:37:36 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-27 22:37:36 -0400 |
commit | e56eab5ba606e2095e4565bcfab14b25f9ff655d (patch) | |
tree | 1ea0fb95ecd495bd136be822ca30c6bc9af91232 | |
parent | 96d9f081dfad6fad2b6519b0f2b0653ac3480604 (diff) | |
parent | be27df15551017c0f4d0aaf81bf2fd253aa03736 (diff) |
Merge pull request #35 from PikalaxALT/pikalax_work
Disassemble arm7 dtcm
-rw-r--r-- | arm7/arm7.lcf | 6 | ||||
-rw-r--r-- | arm7/asm/arm7_rom.s | 77 | ||||
-rw-r--r-- | arm7/asm/dtcm.s | 10954 | ||||
-rw-r--r-- | arm7/asm/dtcm2.s | 7570 | ||||
-rw-r--r-- | arm7/asm/dtcm_data.s | 112 | ||||
-rw-r--r-- | arm7/asm/libsyscall.s | 140 | ||||
-rw-r--r-- | arm7/global.inc | 234 | ||||
-rw-r--r-- | arm7/undefined_syms.txt | 148 | ||||
-rw-r--r-- | arm9/asm/libmwcc.s | 1 |
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 |