pmd-sky/sub/asm/wram.s
UsernameFodder 32998ca899 Sync math operator/utility functions from pokeheartgold
Compared/synced by hand from the pokeheartgold asm.

Some of the functions had labels corresponding to libgcc counterparts;
rename them all for consistency.

Note that some of the functions have multiple names in pokeheartgold
(of which at most one is actually used). Instead of polluting the xMAP
files with multiple symbols (some with zero length), which makes it
really hard for scripts to parse, just add these alternate names as
comments. This makes them searchable without having an effect on build
artifacts.
2023-12-27 02:12:38 -06:00

19368 lines
345 KiB
ArmAsm

.include "asm/macros.inc"
.include "asm/include/wram.inc"
.text
arm_func_start NitroSpMain
NitroSpMain: ; 0x037F8000
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x210
bl sub_037FC9EC
bl sub_037FBF64
add r2, sp, #4
mov r0, #0x20
mov r1, #2
bl sub_027F55B8
ldr r0, [sp, #4]
add r2, sp, #0x10
mov r0, r0, lsl #3
str r0, [sp, #4]
mov r1, #0x100
bl sub_027F55B8
ldr r0, [sp, #4]
add r2, sp, #0x110
add r0, r0, #0x100
mov r1, #0x100
bl sub_027F55B8
mov r0, #0x1d
mov r1, #1
add r2, sp, #0
mov r6, #0
bl sub_027F55B8
ldrb r0, [sp]
cmp r0, #0xff
moveq r0, r6
beq _037F807C
tst r0, #0x50
movne r0, #1
moveq r0, r6
_037F807C:
cmp r0, #0
beq _037F8150
bl sub_037F8484
mov r8, r0
mov fp, #1
and r7, r8, #0x40
mov sl, #0
add r5, sp, #0x10
mov r4, fp
b _037F8144
_037F80A4:
ldr r0, _037F8454 ; =0x0000FFFF
add sb, r5, sl, lsl #8
mov r1, sb
mov r2, #0x70
bl sub_037F846C
mov r2, sb
ldrh r1, [r2, #0x72]
cmp r0, r1
bne _037F8138
ldrh r0, [r2, #0x70]
cmp r0, #0x80
bhs _037F8138
ldr r0, _037F8454 ; =0x0000FFFF
mov r2, #0x8a
add r1, sb, #0x74
bl sub_037F846C
mov r2, sb
ldrh r1, [r2, #0xfe]
cmp r0, r1
bne _037F8138
ldrh r1, [r2, #0x76]
ldrb r0, [r2, #0x75]
tst r1, r4, lsl r0
beq _037F8138
tst r8, r1
ldrneh r1, [sb, #0x64]
andne r0, r0, #7
bicne r1, r1, #7
orrne r0, r1, r0
strneh r0, [sb, #0x64]
add r0, r5, sl, lsl #8
ldrh r0, [r0, #0x76]
mvn r0, r0
tst r7, r0
movne r6, #3
bne _037F81F0
orr r6, r6, fp, lsl sl
_037F8138:
add r0, sl, #1
mov r0, r0, lsl #0x10
mov sl, r0, lsr #0x10
_037F8144:
cmp sl, #2
blo _037F80A4
b _037F81B4
_037F8150:
bl sub_037F8484
tst r0, #0x40
movne r6, #3
bne _037F81F0
ldr r8, _037F8454 ; =0x0000FFFF
mov sb, #0
add r7, sp, #0x10
mov r4, #1
mov r5, #0x70
_037F8174:
mov r0, r8
mov r2, r5
add r1, r7, sb, lsl #8
bl sub_037F846C
add r2, r7, sb, lsl #8
ldrh r1, [r2, #0x72]
cmp r0, r1
bne _037F81A0
ldrh r0, [r2, #0x70]
cmp r0, #0x80
orrlo r6, r6, r4, lsl sb
_037F81A0:
add r0, sb, #1
mov r0, r0, lsl #0x10
mov sb, r0, lsr #0x10
cmp sb, #2
blo _037F8174
_037F81B4:
cmp r6, #1
cmpne r6, #2
beq _037F81F0
cmp r6, #3
bne _037F81EC
ldrh r1, [sp, #0x80]
add r0, sp, #0x100
add r1, r1, #1
ldrh r0, [r0, #0x80]
and r1, r1, #0x7f
cmp r1, r0
moveq r6, #2
movne r6, #1
b _037F81F0
_037F81EC:
mov r6, #0
_037F81F0:
cmp r6, #3
blt _037F820C
ldr r1, _037F8458 ; =0x027FFC80
mvn r0, #0
mov r2, #0x74
bl sub_037FDFD0
b _037F82C8
_037F820C:
cmp r6, #0
beq _037F82B8
ldr r0, _037F845C ; =0xFFFFFF2A
mov r1, r6, lsl #8
add r0, sp, r0
ldrb r0, [r0, r6, lsl #8]
cmp r0, #0xa
bhs _037F8258
add r0, sp, #0x10
mov r3, #0xa
mov r2, #0
add r1, r0, r1
b _037F824C
_037F8240:
add r0, r1, r3, lsl #1
strh r2, [r0, #-0xfc]
sub r3, r3, #1
_037F824C:
ldrb r0, [r1, #-0xe6]
cmp r3, r0
bgt _037F8240
_037F8258:
ldr r0, _037F8460 ; =0xFFFFFF60
mov r1, r6, lsl #8
add r0, sp, r0
ldrb r0, [r0, r6, lsl #8]
cmp r0, #0x1a
bhs _037F829C
add r0, sp, #0x10
mov r3, #0x1a
mov r2, #0
add r1, r0, r1
b _037F8290
_037F8284:
add r0, r1, r3, lsl #1
strh r2, [r0, #-0xe6]
sub r3, r3, #1
_037F8290:
ldrb r0, [r1, #-0xb0]
cmp r3, r0
bgt _037F8284
_037F829C:
ldr r1, _037F8458 ; =0x027FFC80
add r2, sp, #0x10
sub r0, r6, #1
add r0, r2, r0, lsl #8
mov r2, #0x74
bl sub_037FDFEC
b _037F82C8
_037F82B8:
ldr r1, _037F8458 ; =0x027FFC80
mov r0, #0
mov r2, #0x74
bl sub_037FDFD0
_037F82C8:
add r2, sp, #8
mov r0, #0x36
mov r1, #6
bl sub_027F55B8
ldr r4, _037F8458 ; =0x027FFC80
add r0, sp, #8
add r1, r4, #0x74
mov r2, #6
bl sub_037FE12C
add r2, sp, #2
mov r0, #0x3c
mov r1, #2
bl sub_027F55B8
ldrh r0, [sp, #2]
mov r0, r0, lsl #0xf
mov r0, r0, lsr #0x10
bl sub_038073D4
strh r0, [r4, #0x7a]
bl sub_037FE2B4
mov r0, #8
bl sub_037FCA94
mov r4, r0
mov r0, #8
bl sub_037FCAA8
mov r1, r0
mov r2, r4
mov r0, #8
mov r3, #1
bl sub_037FCE24
mov r4, r0
mov r0, #8
bl sub_037FCA94
sub r2, r0, r4
mov r0, r4
mov r1, #0
bl sub_037FE070
mov r1, r4
mov r0, #8
bl sub_037FCB90
mov r0, #8
bl sub_037FCA94
mov r4, r0
mov r0, #8
bl sub_037FCAA8
mov r1, r0
mov r2, r4
mov r0, #8
bl sub_037FCECC
movs r4, r0
bpl _037F8394
bl sub_037FDE70
_037F8394:
mov r1, r4
mov r0, #8
bl sub_037FCDF0
mov r1, r4
mov r0, #8
bl sub_037FCF6C
cmp r0, #0x2100
bhs _037F83B8
bl sub_037FDE70
_037F83B8:
mov r0, #6
bl sub_037FEEF8
bl sub_037FE5C0
ldr r1, _037F8464 ; =sub_037F84BC
mov r0, #1
bl sub_037FB7BC
mov r0, #1
bl sub_037FB8F0
ldr r3, _037F8468 ; =0x04000004
mov r0, #1
ldrh r1, [r3]
ldrh r1, [r3]
add r2, r3, #0x204
orr r1, r1, #8
strh r1, [r3]
ldrh r1, [r2]
strh r0, [r2]
bl ClearIrqFlag
mvn r0, #0
bl sub_03802618
mov r0, #0xf
bl sub_038026E0
mov r0, #0xc
bl sub_027F5CC4
mov r0, r4
bl sub_03805248
mov r0, #2
bl sub_03803874
mov r4, #0
_037F842C:
bl sub_037F8478
bl sub_037FDDB4
cmp r0, #0
beq _037F8448
mov r0, r4
bl sub_03806610
bl sub_037FDDF8
_037F8448:
bl sub_03806848
bl sub_038036BC
b _037F842C
.align 2, 0
_037F8454: .word 0x0000FFFF
_037F8458: .word 0x027FFC80
_037F845C: .word 0xFFFFFF2A
_037F8460: .word 0xFFFFFF60
_037F8464: .word sub_037F84BC
_037F8468: .word 0x04000004
arm_func_end NitroSpMain
arm_func_start sub_037F846C
sub_037F846C: ; 0x037F846C
ldr ip, _037F8474 ; =sub_03803804
bx ip
.align 2, 0
_037F8474: .word sub_03803804 + 1
arm_func_end sub_037F846C
arm_func_start sub_037F8478
sub_037F8478: ; 0x037F8478
ldr ip, _037F8480 ; =sub_038037D2
bx ip
.align 2, 0
_037F8480: .word sub_038037D2 + 1
arm_func_end sub_037F8478
arm_func_start sub_037F8484
sub_037F8484: ; 0x037F8484
ldr r1, _037F84B8 ; =0x027FFE1D
mov r0, #0
ldrb r1, [r1]
cmp r1, #0x80
orreq r0, r0, #0x40
moveq r0, r0, lsl #0x10
moveq r0, r0, lsr #0x10
bxeq lr
cmp r1, #0x40
orreq r0, r0, #0x80
moveq r0, r0, lsl #0x10
moveq r0, r0, lsr #0x10
bx lr
.align 2, 0
_037F84B8: .word 0x027FFE1D
arm_func_end sub_037F8484
arm_func_start sub_037F84BC
sub_037F84BC: ; 0x037F84BC
stmdb sp!, {r3, lr}
ldr r0, _037F84DC ; =_03809E50
ldr r0, [r0]
cmp r0, #0
beq _037F84D4
bl sub_038050FC
_037F84D4:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037F84DC: .word _03809E50
arm_func_end sub_037F84BC
arm_func_start sub_037F84E0
sub_037F84E0: ; 0x037F84E0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r7, _037F858C ; =0x0380FFF4
mov r0, #0
ldr r8, [r7]
ldr r4, _037F8590 ; =0x01000010
strh r0, [r8, #0x10]
ldr sb, _037F8594 ; =0x0000FFFF
strh r0, [r8, #0x14]
add r6, sp, #0
mov r5, r0
_037F8508:
ldr r0, [r7]
mov r1, r6
ldr r0, [r0, #0x308]
mov r2, r5
bl sub_037FC760
cmp r0, #0
beq _037F852C
mov r0, r6
bl sub_037F8704
_037F852C:
mov r0, r4
bl ClearIeFlag
ldrh r1, [r8, #0x10]
strh r1, [r8, #0x12]
mov r1, r1, lsl #1
ldrh r1, [r8, r1]
cmp r1, sb
bne _037F8560
ldrh r1, [r8, #0x10]
add r1, r1, #1
strh r1, [r8, #0x10]
bl sub_037FB8F0
b _037F8508
_037F8560:
bl sub_037FB8F0
ldrh r0, [r8, #0x12]
bl sub_037F8650
strh r0, [r8, #0x14]
ldrh r0, [r8, #0x14]
add r0, r8, r0, lsl #3
ldr r0, [r0, #0xc0]
mov lr, pc
bx r0
_037F8584: ; 0x037F8584
strh sb, [r8, #0x14]
b _037F8508
.align 2, 0
_037F858C: .word 0x0380FFF4
_037F8590: .word 0x01000010
_037F8594: .word 0x0000FFFF
arm_func_end sub_037F84E0
arm_func_start sub_037F8598
sub_037F8598: ; 0x037F8598
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r2, _037F8648 ; =0x0380FFF4
mov r7, r0
ldr r4, [r2]
ldr r0, _037F864C ; =0x01000010
mov r6, r1
add r5, r4, #0xbc
bl ClearIeFlag
add r2, r5, r6, lsl #3
ldrh r1, [r2, #2]
mov ip, r6, lsl #3
cmp r1, #0
bne _037F8610
mov r3, #1
strh r3, [r2, #2]
rsb r1, r3, #0x10000
strh r1, [r5, ip]
add r1, r4, r7, lsl #1
ldrh r2, [r1, #8]
rsb r1, r3, #0x10000
cmp r2, r1
mov r1, r7, lsl #1
streqh r6, [r4, r1]
addne r1, r4, r2, lsl #3
strneh r6, [r1, #0xbc]
add r1, r4, r7, lsl #1
strh r6, [r1, #8]
ldrh r1, [r4, #0x10]
cmp r7, r1
strlth r7, [r4, #0x10]
_037F8610:
bl sub_037FB8F0
cmp r7, #3
beq _037F8640
ldrh r0, [r4, #0x12]
cmp r0, #3
bne _037F8640
ldr r0, _037F8648 ; =0x0380FFF4
mov r1, #0
ldr r0, [r0]
mov r2, r1
ldr r0, [r0, #0x308]
bl sub_037FC6D4
_037F8640:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037F8648: .word 0x0380FFF4
_037F864C: .word 0x01000010
arm_func_end sub_037F8598
arm_func_start sub_037F8650
sub_037F8650: ; 0x037F8650
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _037F86BC ; =0x0380FFF4
mov r5, r0
ldr r0, _037F86C0 ; =0x01000010
ldr r4, [r1]
bl ClearIeFlag
mov lr, r5, lsl #1
ldrh r5, [r4, lr]
ldr r2, _037F86C4 ; =0x0000FFFF
cmp r5, r2
beq _037F86AC
add ip, r4, #0xbc
add r1, ip, r5, lsl #3
mov r3, #0
strh r3, [r1, #2]
mov r3, r5, lsl #3
ldrh r1, [ip, r3]
cmp r1, r2
streqh r2, [r4, lr]
addeq r1, r4, lr
streqh r2, [r1, #8]
strneh r1, [r4, lr]
strneh r2, [ip, r3]
_037F86AC:
bl sub_037FB8F0
mov r0, r5
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F86BC: .word 0x0380FFF4
_037F86C0: .word 0x01000010
_037F86C4: .word 0x0000FFFF
arm_func_end sub_037F8650
arm_func_start sub_037F86C8
sub_037F86C8: ; 0x037F86C8
stmdb sp!, {r3, lr}
ldr r0, _037F8700 ; =0x0380FFF4
add r1, sp, #0
ldr r0, [r0]
mov r2, #1
ldr r0, [r0, #0x308]
bl sub_037FC760
add r0, sp, #0
bl sub_037F8704
mov r0, #3
mov r1, #0xc
bl sub_037F8598
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037F8700: .word 0x0380FFF4
arm_func_end sub_037F86C8
arm_func_start sub_037F8704
sub_037F8704: ; 0x037F8704
stmdb sp!, {r3, lr}
ldr r1, [r0]
cmp r1, #0
beq _037F8730
ldr r0, _037F8738 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x200
bl sub_037F873C
mov r0, #2
mov r1, #0xb
bl sub_037F8598
_037F8730:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037F8738: .word 0x0380FFF4
arm_func_end sub_037F8704
arm_func_start sub_037F873C
sub_037F873C: ; 0x037F873C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r0, #0x1000000
mov r4, r1
bl ClearIeFlag
ldrh r1, [r5, #8]
cmp r1, #0
mvneq r1, #0
streq r1, [r4]
streq r4, [r5]
ldrne r1, [r5, #4]
strne r1, [r4]
strne r4, [r1, #4]
mvn r1, #0
str r1, [r4, #4]
ldrh r2, [r5, #0xa]
ldr r1, _037F87A8 ; =0x0000BF1D
strh r2, [r4, #8]
strh r1, [r4, #0xa]
str r4, [r5, #4]
ldrh r1, [r5, #8]
add r1, r1, #1
strh r1, [r5, #8]
bl sub_037FB8F0
mov r0, #0
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F87A8: .word 0x0000BF1D
arm_func_end sub_037F873C
arm_func_start sub_037F87AC
sub_037F87AC: ; 0x037F87AC
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
ldrh r2, [r4, #0xa]
ldr r1, _037F8868 ; =0x0000BF1D
mov r5, r0
cmp r2, r1
movne r0, #1
bne _037F8860
ldrh r1, [r4, #8]
ldrh r0, [r5, #0xa]
cmp r1, r0
movne r0, #2
bne _037F8860
mov r0, #0x1000000
bl ClearIeFlag
ldrh r1, [r5, #8]
sub r1, r1, #1
strh r1, [r5, #8]
ldrh r1, [r5, #8]
cmp r1, #0
mvneq r1, #0
streq r1, [r5]
streq r1, [r5, #4]
beq _037F8850
ldr r1, [r5]
cmp r4, r1
ldreq r2, [r4, #4]
mvneq r1, #0
streq r2, [r5]
streq r1, [r2]
beq _037F8850
ldr r1, [r5, #4]
ldr r2, [r4]
cmp r4, r1
streq r2, [r5, #4]
mvneq r1, #0
streq r1, [r2, #4]
ldrne r1, [r4, #4]
strne r2, [r1]
ldmneia r4, {r1, r2}
strne r2, [r1, #4]
_037F8850:
mov r1, #0
strh r1, [r4, #8]
bl sub_037FB8F0
mov r0, #0
_037F8860:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F8868: .word 0x0000BF1D
arm_func_end sub_037F87AC
arm_func_start sub_037F886C
sub_037F886C: ; 0x037F886C
stmdb sp!, {r3, r4, r5, lr}
ldr r2, _037F8900 ; =0x0380FFF4
movs r3, r1
ldr r1, [r2]
mov r5, r0
moveq r0, #0
beq _037F88F8
ldr r0, [r1, #0x17c]
cmp r0, #0
beq _037F88A0
cmp r0, #1
beq _037F88B8
b _037F88CC
_037F88A0:
ldr r0, [r1, #0x180]
ldr r1, [r1, #0x184]
add r2, r3, #0xc
bl sub_037FCC74
mov r4, r0
b _037F88CC
_037F88B8:
ldr r1, [r1, #0x180]
add r0, r3, #0xc
mov lr, pc
bx r1
_037F88C8:
mov r4, r0
_037F88CC:
cmp r4, #0
moveq r0, #0
beq _037F88F8
ldr r1, _037F8904 ; =0x0000BF1D
mov r0, r5
strh r1, [r4, #0xa]
mov r2, #0
mov r1, r4
strh r2, [r4, #8]
bl sub_037F89F4
mov r0, r4
_037F88F8:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F8900: .word 0x0380FFF4
_037F8904: .word 0x0000BF1D
arm_func_end sub_037F886C
arm_func_start sub_037F8908
sub_037F8908: ; 0x037F8908
stmdb sp!, {r4, r5, r6, lr}
mov r4, r1
ldr r5, _037F8980 ; =0x0380FFF4
ldrh r3, [r4, #0xa]
ldr r2, _037F8984 ; =0x0000BF1D
ldr r5, [r5]
cmp r3, r2
movne r0, #1
bne _037F8978
bl sub_037F87AC
movs r6, r0
bne _037F8974
ldr r0, [r5, #0x17c]
cmp r0, #0
beq _037F8950
cmp r0, #1
beq _037F8964
b _037F8974
_037F8950:
ldr r0, [r5, #0x180]
ldr r1, [r5, #0x184]
mov r2, r4
bl sub_037FCD84
b _037F8974
_037F8964:
ldr r1, [r5, #0x184]
mov r0, r4
mov lr, pc
bx r1
_037F8974:
mov r0, r6
_037F8978:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037F8980: .word 0x0380FFF4
_037F8984: .word 0x0000BF1D
arm_func_end sub_037F8908
arm_func_start sub_037F8988
sub_037F8988: ; 0x037F8988
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r6, r2
ldrh r3, [r6, #0xa]
ldr r2, _037F89F0 ; =0x0000BF1D
mov r4, r0
cmp r3, r2
mov r7, r1
movne r0, #1
bne _037F89E8
mov r0, #0x1000000
bl ClearIeFlag
mov r5, r0
mov r0, r4
mov r1, r6
bl sub_037F87AC
movs r4, r0
bne _037F89DC
mov r0, r7
mov r1, r6
bl sub_037F89F4
mov r4, r0
_037F89DC:
mov r0, r5
bl sub_037FB8F0
mov r0, r4
_037F89E8:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037F89F0: .word 0x0000BF1D
arm_func_end sub_037F8988
arm_func_start sub_037F89F4
sub_037F89F4: ; 0x037F89F4
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
ldrh r2, [r4, #0xa]
ldr r1, _037F8A7C ; =0x0000BF1D
mov r5, r0
cmp r2, r1
movne r0, #1
bne _037F8A74
ldrh r0, [r4, #8]
cmp r0, #0
movne r0, #2
bne _037F8A74
mov r0, #0x1000000
bl ClearIeFlag
ldrh r1, [r5, #8]
cmp r1, #0
mvneq r1, #0
streq r1, [r4]
streq r4, [r5]
ldrne r1, [r5, #4]
strne r1, [r4]
strne r4, [r1, #4]
mvn r1, #0
str r1, [r4, #4]
ldrh r1, [r5, #0xa]
strh r1, [r4, #8]
str r4, [r5, #4]
ldrh r1, [r5, #8]
add r1, r1, #1
strh r1, [r5, #8]
bl sub_037FB8F0
mov r0, #0
_037F8A74:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F8A7C: .word 0x0000BF1D
arm_func_end sub_037F89F4
arm_func_start sub_037F8A80
sub_037F8A80: ; 0x037F8A80
ldr r0, [r0, #4]
bx lr
arm_func_end sub_037F8A80
arm_func_start sub_037F8A88
sub_037F8A88: ; 0x037F8A88
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r4, _037F8D38 ; =0x0380FFF4
mov r3, #0
ldr r2, [r4]
mov r6, r3
add r0, r2, #0x24
add r5, r0, #0x400
ldrh r0, [r5, #4]
cmp r0, #0
bne _037F8D30
ldr r0, [r2, #0x200]
sub r2, r3, #1
str r0, [r5]
cmp r0, r2
beq _037F8D30
ldr r2, [r4]
ldrh r4, [r0, #0xe]
add ip, r2, #0x300
ldrh r2, [ip, #0x3e]
add r4, r0, r4, lsl #1
cmp r2, #0
movne r0, #1
strneh r0, [r4, #0x12]
movne r0, #6
strneh r0, [r4, #0x14]
bne _037F8CE8
ldrh r7, [r0, #0xc]
ldrh r2, [r4, #0x10]
cmp r7, r2
movne r0, #0xd
strneh r0, [r4, #0x14]
bne _037F8CE8
and r2, r7, #0xff00
cmp r2, #0x100
bgt _037F8B24
bge _037F8B70
cmp r2, #0
beq _037F8B40
b _037F8C50
_037F8B24:
cmp r2, #0x200
bgt _037F8B34
beq _037F8B90
b _037F8C50
_037F8B34:
cmp r2, #0x300
beq _037F8C3C
b _037F8C50
_037F8B40:
ldrh r6, [r5, #4]
ldr r1, _037F8D3C ; =_027F7648
tst r6, #1
and r2, r7, #0xff
mov r6, #1
mov lr, #0xb
movne r3, #2
bne _037F8C58
ldrh r7, [ip, #0x4c]
cmp r7, #0x20
movlo r3, r6
b _037F8C58
_037F8B70:
ldrh r6, [ip, #0x4c]
ldr r1, _037F8D40 ; =_027F75C0
cmp r6, #0x40
and r2, r7, #0xff
mov r6, #2
mov lr, #5
movne r3, #1
b _037F8C58
_037F8B90:
and r2, r7, #0xff
cmp r2, #0x40
bhs _037F8BB8
ldrh r1, [ip, #0x4c]
mov r6, #4
cmp r1, #0x10
ldr r1, _037F8D44 ; =_027F77B0
movlo r3, #1
mov lr, #0x17
b _037F8C58
_037F8BB8:
cmp r2, #0x80
bhs _037F8BE8
ldrh r1, [ip, #0x4c]
mov r6, #8
cmp r1, #0x40
sub r1, r2, #0x40
mov r2, r1, lsl #0x10
ldr r1, _037F8D48 ; =_027F7618
movne r3, #1
mov r2, r2, lsr #0x10
mov lr, #6
b _037F8C58
_037F8BE8:
ldrh r1, [ip, #0x4c]
cmp r2, #0xc0
bhs _037F8C18
cmp r1, #0x10
sub r1, r2, #0x80
mov r2, r1, lsl #0x10
ldr r1, _037F8D4C ; =_027F76F8
movlo r3, #1
mov r2, r2, lsr #0x10
mov r6, #0x10
mov lr, #0x17
b _037F8C58
_037F8C18:
cmp r1, #0x10
sub r1, r2, #0xc0
mov r2, r1, lsl #0x10
ldr r1, _037F8D50 ; =_027F75E8
movlo r3, #1
mov r2, r2, lsr #0x10
mov r6, #0x20
mov lr, #6
b _037F8C58
_037F8C3C:
ldr r1, _037F8D54 ; =_027F76A0
and r2, r7, #0xff
mov r6, #0x40
mov lr, #0xb
b _037F8C58
_037F8C50:
mov r2, #1
mov lr, #0
_037F8C58:
cmp r2, lr
movhi r3, #3
bhi _037F8C88
mov lr, r2, lsl #3
ldrh r7, [r0, #0xe]
ldrh ip, [r1, lr]
cmp r7, ip
addhs ip, r1, lr
ldrhsh lr, [r4, #0x12]
ldrhsh ip, [ip, #2]
cmphs lr, ip
movlo r3, #4
_037F8C88:
cmp r3, #0
movne r0, #1
strneh r0, [r4, #0x12]
strneh r3, [r4, #0x14]
bne _037F8CE8
ldrh r3, [r5, #4]
add r1, r1, r2, lsl #3
orr r2, r3, r6
strh r2, [r5, #4]
ldr r2, [r1, #4]
add r1, r4, #0x10
mov lr, pc
bx r2
_037F8CBC:
strh r0, [r4, #0x14]
ldrh r0, [r4, #0x14]
cmp r0, #0x80
beq _037F8D30
cmp r0, #0x81
bne _037F8CE8
ldrh r1, [r5, #4]
mvn r0, r6
and r0, r1, r0
strh r0, [r5, #4]
b _037F8D0C
_037F8CE8:
ldrh r1, [r5, #4]
mvn r0, r6
and r0, r1, r0
strh r0, [r5, #4]
ldr r0, _037F8D38 ; =0x0380FFF4
ldr r1, [r5]
ldr r0, [r0]
add r0, r0, #0x200
bl sub_037F8D58
_037F8D0C:
ldr r0, _037F8D38 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x200
ldrh r0, [r0, #8]
cmp r0, #0
beq _037F8D30
mov r0, #2
mov r1, #0xb
bl sub_037F8598
_037F8D30:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037F8D38: .word 0x0380FFF4
_037F8D3C: .word _027F7648
_037F8D40: .word _027F75C0
_037F8D44: .word _027F77B0
_037F8D48: .word _027F7618
_037F8D4C: .word _027F76F8
_037F8D50: .word _027F75E8
_037F8D54: .word _027F76A0
arm_func_end sub_037F8A88
arm_func_start sub_037F8D58
sub_037F8D58: ; 0x037F8D58
stmdb sp!, {r3, r4, r5, lr}
ldr r2, _037F8DDC ; =0x0380FFF4
mov r5, r0
ldr r3, [r2]
mov r4, r1
add r2, r3, #0x100
ldrh r2, [r2, #0xfc]
cmp r2, #0
beq _037F8D98
mov r2, r4
add r1, r3, #0x1f4
bl sub_037F8988
mov r0, #2
mov r1, #0x13
bl sub_037F8598
b _037F8DD4
_037F8D98:
ldr r0, [r3, #0x304]
mov r2, #0
bl sub_037FC6D4
cmp r0, #0
beq _037F8DBC
mov r0, r5
mov r1, r4
bl sub_037F87AC
b _037F8DD4
_037F8DBC:
ldr r1, _037F8DDC ; =0x0380FFF4
mov r0, r5
ldr r1, [r1]
mov r2, r4
add r1, r1, #0x1f4
bl sub_037F8988
_037F8DD4:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F8DDC: .word 0x0380FFF4
arm_func_end sub_037F8D58
arm_func_start sub_037F8DE0
sub_037F8DE0: ; 0x037F8DE0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
ldr r0, _037F914C ; =0x0380FFF4
ldr r0, [r0]
add r6, r0, #0x344
add r4, r0, #0x31c
bl sub_037F9198
ldr r1, _037F9150 ; =0x04808044
ldrh r2, [r1]
ldrh r0, [r1]
ldrh r1, [r1]
add r0, r2, r0, lsl #8
bl sub_027EAD6C
mov r0, #1
strh r0, [r6, #0x7c]
ldrh r0, [r4, #0x1e]
ldr r2, _037F9154 ; =0x04808032
mov r0, r0, lsl #0x1d
mov r0, r0, lsr #0x1f
cmp r0, #1
ldreqh r0, [r6, #0x7c]
ldr r1, _037F9158 ; =0x04808134
orreq r0, r0, #0x20
streqh r0, [r6, #0x7c]
ldrh r0, [r4, #0x18]
mov r4, #0
cmp r0, #0
ldrneh r0, [r6, #0x7c]
mov r3, #0x8000
orrne r0, r0, #0x10
strneh r0, [r6, #0x7c]
strh r4, [r6, #0x12]
ldr r0, _037F915C ; =0x0000FFFF
strh r3, [r2]
strh r0, [r1]
strh r4, [r2, #-8]
sub r0, r1, #0x10c
strh r4, [r0]
mov r0, #0xf
strh r0, [r1, #-0xfc]
bl sub_027EC510
bl sub_027F4CC0
bl sub_037FAEC0
bl sub_037FB1E0
ldr r2, _037F9160 ; =0x04808030
mov r1, #0x8000
strh r1, [r2]
ldr r0, _037F915C ; =0x0000FFFF
ldr r1, _037F9164 ; =0x048081AE
strh r0, [r2, #-0x20]
sub r2, r0, #0xe000
ldr r0, _037F914C ; =0x0380FFF4
strh r2, [r1]
ldr r0, [r0]
add r0, r0, #0x600
ldrh r0, [r0, #0x90]
tst r0, #8
movne r0, #0x400
strneh r0, [r1, #-4]
moveq r0, r4
streqh r0, [r1, #-4]
ldr r2, _037F9168 ; =0x04808008
mov r3, #0
strh r3, [r2]
strh r3, [r2, #2]
ldrh r0, [r6, #0xc]
cmp r0, #4
addls pc, pc, r0, lsl #2
b _037F9110
_037F8EF4: ; jump table
b _037F8F08 ; case 0
b _037F8F38 ; case 1
b _037F901C ; case 2
b _037F909C ; case 3
b _037F90F4 ; case 4
_037F8F08:
ldr r0, _037F915C ; =0x0000FFFF
mov r1, #0x3f
strh r1, [r2, #0xa]
strh r0, [r2, #0xc8]
mov r0, #8
strh r0, [r2, #0xd8]
strh r3, [r2]
strh r3, [r2, #2]
strh r3, [r2, #0xe0]
mov r0, #1
strh r0, [r2, #-4]
b _037F9110
_037F8F38:
ldr r3, _037F916C ; =0x0000703F
ldr r0, _037F9170 ; =0x00001FFF
ldr r1, _037F9164 ; =0x048081AE
strh r3, [r2, #0xa]
strh r0, [r1]
rsb r0, r0, #0x2300
strh r0, [r1, #-0xde]
mov r0, #0xd
strh r0, [r1, #-0xce]
mov r0, #0xe000
strh r0, [r2]
mov r0, #1
strh r0, [r2, #-4]
ldrh r0, [r1, #-0xb6]
add r7, sp, #0
strh r0, [r7]
ldrh r0, [r1, #-0xb4]
mov r4, #0
strh r0, [r7, #2]
ldrh r2, [r1, #-0xb2]
ldr r0, [sp]
strh r2, [r7, #4]
ldrh r1, [r1, #-0xb0]
mov r3, r4
strh r1, [r7, #6]
ldrh r2, [r6, #0x6e]
ldr r1, [sp, #4]
mov r5, r2, lsl #0xa
mov r2, r5
bl sub_03806B80
adds r3, r0, #1
umull r2, r0, r3, r5
mla r0, r3, r4, r0
adc r1, r1, #0
mla r0, r1, r5, r0
str r0, [sp, #4]
ldrh r0, [r7, #6]
ldr r3, _037F9174 ; =0x048080F6
str r2, [sp]
strh r0, [r3]
ldrh r0, [r7, #4]
mov r1, #1
strh r0, [r3, #-2]
ldrh r2, [r7, #2]
mov r0, #0x40
strh r2, [r3, #-4]
ldrh r2, [r7]
orr r2, r2, #1
strh r2, [r3, #-6]
strh r1, [r3, #-0xe]
strh r1, [r3, #-0xc]
bl sub_037F9238
bl sub_027F119C
ldr r0, _037F9178 ; =0x048080AE
mov r1, #2
strh r1, [r0]
b _037F9110
_037F901C:
ldr r1, _037F917C ; =0x0000E0BF
ldr r0, _037F914C ; =0x0380FFF4
strh r1, [r2, #0xa]
ldr r0, [r0]
add r0, r0, #0x600
ldrh r0, [r0, #0x90]
tst r0, #0x20
beq _037F9058
ldrh r0, [r2, #0xa]
ldr r1, _037F9180 ; =0x048081AA
orr r0, r0, #0x40
strh r0, [r2, #0xa]
ldrh r0, [r1]
orr r0, r0, #0x68
strh r0, [r1]
_037F9058:
ldrh r0, [r6, #0x64]
tst r0, #1
ldr r0, _037F9184 ; =0x048080D0
ldrne r1, _037F9188 ; =0x00000581
strneh r1, [r0]
ldreq r1, _037F918C ; =0x00000181
streqh r1, [r0]
ldr r2, _037F9190 ; =0x048080E0
mov r0, #0xb
strh r0, [r2]
mov r1, #1
strh r1, [r2, #-0xdc]
strh r1, [r2, #8]
mov r0, #0x20
strh r1, [r2, #0xa]
bl sub_037F9238
b _037F9110
_037F909C:
ldr r1, _037F915C ; =0x0000FFFF
strh r1, [r2, #8]
sub r0, r1, #0x3fc0
strh r0, [r2, #0xa]
ldrh r0, [r6, #0x64]
tst r0, #1
rsbne r0, r1, #0x10400
strneh r0, [r2, #0xc8]
moveq r0, #1
streqh r0, [r2, #0xc8]
ldr r2, _037F9190 ; =0x048080E0
mov r0, #0xb
strh r0, [r2]
mov r0, #1
strh r0, [r2, #-0xdc]
strh r0, [r2, #8]
strh r0, [r2, #0xa]
mov r1, #0
mov r0, #0x20
strh r1, [r2, #-0x98]
bl sub_037F9238
b _037F9110
_037F90F4:
ldr r0, _037F9164 ; =0x048081AE
strh r3, [r2, #0xa]
strh r3, [r0]
mov r1, #1
mov r0, #0x20
strh r1, [r2, #-4]
bl sub_037F9238
_037F9110:
ldr r0, _037F9194 ; =0x04808048
mov r1, #0
strh r1, [r0]
bl sub_027E9E94
ldr r1, _037F9178 ; =0x048080AE
mov r0, #2
strh r0, [r1]
ldrh r1, [r6, #0xe]
cmp r1, #1
bne _037F913C
bl sub_027E9CB4
_037F913C:
bl sub_037FB300
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037F914C: .word 0x0380FFF4
_037F9150: .word 0x04808044
_037F9154: .word 0x04808032
_037F9158: .word 0x04808134
_037F915C: .word 0x0000FFFF
_037F9160: .word 0x04808030
_037F9164: .word 0x048081AE
_037F9168: .word 0x04808008
_037F916C: .word 0x0000703F
_037F9170: .word 0x00001FFF
_037F9174: .word 0x048080F6
_037F9178: .word 0x048080AE
_037F917C: .word 0x0000E0BF
_037F9180: .word 0x048081AA
_037F9184: .word 0x048080D0
_037F9188: .word 0x00000581
_037F918C: .word 0x00000181
_037F9190: .word 0x048080E0
_037F9194: .word 0x04808048
arm_func_end sub_037F8DE0
arm_func_start sub_037F9198
sub_037F9198: ; 0x037F9198
stmdb sp!, {r4, lr}
ldr r0, _037F9228 ; =0x0380FFF4
ldr r1, [r0]
add r0, r1, #0x208
add r0, r0, #0x400
add r4, r1, #0x344
bl sub_037FD5C0
ldr r0, _037F9228 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x234
add r0, r0, #0x400
bl sub_037FD5C0
mov r0, #0x20
bl sub_037F9238
mov r1, #0
strh r1, [r4, #0xa4]
ldr r0, _037F922C ; =0x04808012
strh r1, [r4, #0x12]
strh r1, [r0]
strh r1, [r0, #-0xe]
strh r1, [r0, #0xd8]
strh r1, [r0, #0xd6]
strh r1, [r0, #-0xa]
strh r1, [r0, #-8]
ldrh r0, [r4, #0xc]
cmp r0, #1
bne _037F9208
bl sub_027F11DC
_037F9208:
ldr r1, _037F9230 ; =0x0000FFFF
ldr r0, _037F9234 ; =0x048080AC
strh r1, [r0]
strh r1, [r0, #8]
bl sub_027F0F08
bl sub_027E8D44
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037F9228: .word 0x0380FFF4
_037F922C: .word 0x04808012
_037F9230: .word 0x0000FFFF
_037F9234: .word 0x048080AC
arm_func_end sub_037F9198
arm_func_start sub_037F9238
sub_037F9238: ; 0x037F9238
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _037F92D0 ; =0x0380FFF4
mov r5, r0
ldr r1, [r1]
add r4, r1, #0x344
ldrh r0, [r4, #8]
cmp r0, r5
beq _037F92C8
cmp r0, #0x40
bne _037F926C
add r0, r1, #0x234
add r0, r0, #0x400
bl sub_037FD5C0
_037F926C:
cmp r5, #0
beq _037F9288
cmp r5, #0x10
beq _037F9290
cmp r5, #0x40
beq _037F92A8
b _037F92C4
_037F9288:
bl sub_027E9CF4
b _037F92C4
_037F9290:
ldr r0, _037F92D4 ; =0x04808040
mov r1, #0
strh r1, [r0]
bl sub_037F9198
bl sub_027E9D7C
b _037F92C4
_037F92A8:
ldrh r0, [r4, #0xc]
cmp r0, #2
bne _037F92B8
bl sub_027E9EE0
_037F92B8:
ldr r1, _037F92D8 ; =sub_027EAA6C
mov r0, #0x64
bl sub_027EA9BC
_037F92C4:
strh r5, [r4, #8]
_037F92C8:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F92D0: .word 0x0380FFF4
_037F92D4: .word 0x04808040
_037F92D8: .word sub_027EAA6C
arm_func_end sub_037F9238
arm_func_start sub_037F92DC
sub_037F92DC: ; 0x037F92DC
stmdb sp!, {r4, r5, r6, lr}
ldr r5, _037F93A8 ; =0x04808010
mov r4, #1
_037F92E8:
ldrh r1, [r5]
ldrh r0, [r5, #2]
ands r6, r1, r0
beq _037F9390
tst r6, #0x80
beq _037F9304
bl sub_037FA21C
_037F9304:
tst r6, #0x40
beq _037F9310
bl sub_037FA328
_037F9310:
tst r6, #0x8000
beq _037F931C
bl sub_037F93B0
_037F931C:
tst r6, #0x4000
beq _037F9328
bl sub_037F943C
_037F9328:
tst r6, #0x2000
beq _037F9334
bl sub_037F96E0
_037F9334:
tst r6, #0x800
beq _037F9340
bl sub_027EB830
_037F9340:
tst r6, #8
beq _037F934C
bl sub_037F977C
_037F934C:
tst r6, #4
beq _037F9358
bl sub_037F988C
_037F9358:
tst r6, #1
beq _037F9364
bl sub_037F9C70
_037F9364:
tst r6, #0x30
beq _037F9370
bl sub_037F974C
_037F9370:
tst r6, #2
beq _037F937C
bl sub_037F9A08
_037F937C:
tst r6, #0x1000
beq _037F92E8
mov r0, r4
bl sub_037FA12C
b _037F92E8
_037F9390:
ldr r1, _037F93AC ; =0x0380FFF8
ldr r0, [r1]
orr r0, r0, #0x1000000
str r0, [r1]
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037F93A8: .word 0x04808010
_037F93AC: .word 0x0380FFF8
arm_func_end sub_037F92DC
arm_func_start sub_037F93B0
sub_037F93B0: ; 0x037F93B0
stmdb sp!, {r4, lr}
ldr r1, _037F9434 ; =0x0380FFF4
ldr r0, _037F9438 ; =0x04808010
ldr r2, [r1]
mov r1, #0x8000
strh r1, [r0]
add r4, r2, #0x344
ldrh r0, [r4, #8]
cmp r0, #0x40
bne _037F9424
ldrh r0, [r4, #0x7e]
cmp r0, #0
beq _037F9424
ldrh r1, [r4, #0x72]
ldrh r0, [r4, #0x70]
cmp r1, r0
bne _037F9424
ldrh r0, [r4, #0x80]
add r0, r0, #1
strh r0, [r4, #0x80]
ldrh r1, [r4, #0x80]
ldrh r0, [r4, #0x7e]
cmp r1, r0
bls _037F9424
mov r2, #0
mov r0, #1
mov r1, #0xd
strh r2, [r4, #0x80]
bl sub_037F8598
_037F9424:
mov r0, #1
strh r0, [r4, #0x10]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037F9434: .word 0x0380FFF4
_037F9438: .word 0x04808010
arm_func_end sub_037F93B0
arm_func_start sub_037F943C
sub_037F943C: ; 0x037F943C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
ldr r6, _037F96C0 ; =0x0380FFF4
ldr r2, _037F96C4 ; =0x04808010
ldr r3, [r6]
mov r0, #0x4000
strh r0, [r2]
add r4, r3, #0x344
ldrh r1, [r4, #0xc]
add r0, r3, #0x2c
cmp r1, #1
add r5, r3, #0x31c
add r7, r0, #0x400
beq _037F9484
cmp r1, #2
beq _037F9538
cmp r1, #3
beq _037F957C
b _037F96B8
_037F9484:
ldr r1, [r7, #0x80]
ldrh r6, [r6, #-4]
ldrh r0, [r4, #0x96]
add r1, r1, #0x24
add r8, r1, r0
add r0, r8, #8
and r1, r6, #0xff
bl sub_027EAD24
mov r1, r6, lsr #8
add r0, r8, #9
and r1, r1, #0xff
bl sub_027EAD24
ldrh r0, [r4, #0xe]
cmp r0, #1
bne _037F94D8
ldr r1, _037F96C8 ; =0x04808134
ldrh r2, [r5, #0x20]
ldrh r0, [r1]
add r0, r2, r0
add r0, r0, #1
strh r0, [r1]
_037F94D8:
ldr r0, _037F96C0 ; =0x0380FFF4
ldr r1, _037F96CC ; =0x048080B6
ldr r0, [r0]
add r0, r0, #0x500
ldrh r3, [r0, #0x2e]
ldrh r2, [r0, #0x32]
mvn r3, r3
orr r2, r3, r2
strh r2, [r0, #0x30]
ldrh r0, [r1]
tst r0, #0x18
bne _037F9514
and r0, r0, #6
cmp r0, #2
bne _037F9528
_037F9514:
ldr r0, [r7, #0x8c]
bic r0, r0, #2
str r0, [r7, #0x8c]
bl sub_037FA598
b _037F96B8
_037F9528:
ldr r0, [r7, #0x8c]
orr r0, r0, #2
str r0, [r7, #0x8c]
b _037F96B8
_037F9538:
ldrh r0, [r4, #0x12]
cmp r0, #0
ldreq r1, _037F96D0 ; =0x0000FFFF
addeq r0, r2, #0x124
streqh r1, [r0]
beq _037F9568
add r1, r2, #0x124
ldrh r2, [r5, #0x20]
ldrh r0, [r1]
add r0, r2, r0
add r0, r0, #1
strh r0, [r1]
_037F9568:
ldrh r0, [r4, #0x1a]
cmp r0, #2
bne _037F957C
mov r0, #2
bl sub_027E9CB4
_037F957C:
ldrh r0, [r4, #8]
cmp r0, #0x40
movne r1, #1
bne _037F95C8
ldrh r0, [r4, #0x72]
mov r1, #0
cmp r0, #1
ldrh r0, [r4, #0x14]
moveq r1, #1
cmp r0, #0
beq _037F95C8
ldrh r0, [r4, #0x76]
cmp r0, #1
beq _037F95C4
cmp r0, #0
ldreqh r0, [r4, #0x74]
cmpeq r0, #1
bne _037F95C8
_037F95C4:
mov r1, #1
_037F95C8:
cmp r1, #0
ldr r1, _037F96D4 ; =0x04808038
ldrneh r0, [r1]
orrne r0, r0, #1
strneh r0, [r1]
ldreqh r0, [r1]
biceq r0, r0, #1
streqh r0, [r1]
ldr r1, _037F96D8 ; =0x04808118
mov r8, #0
ldrh r0, [r1]
mov r6, #2
cmp r0, #0xa
movhi r0, #0
strhih r0, [r1, #-0xd0]
ldrh r0, [r4, #0x72]
mov r5, r8
sub r0, r0, #1
strh r0, [r4, #0x72]
ldrh r0, [r4, #0x72]
mov sl, #0x14
cmp r0, #0
ldreqh r0, [r4, #0x70]
streqh r0, [r4, #0x72]
ldrh r1, [r4, #0x76]
sub r0, r1, #1
strh r0, [r4, #0x76]
cmp r1, #0
ldreqh r0, [r4, #0x74]
subeq r0, r0, #1
streqh r0, [r4, #0x76]
mov r4, #0xe
_037F9648:
mul r1, r8, sl
ldrh r0, [r7, r1]
add sb, r7, r1
cmp r0, #0
beq _037F96A0
ldr r0, [sb, #0xc]
ldrh r1, [r0, #8]
cmp r1, #0
bne _037F96A0
bl sub_027F027C
cmp r0, #0
beq _037F96A0
mov r0, r8
bl sub_027F0CD4
ldr r1, [sb, #8]
mov r0, r5
strh r6, [r1]
mov r1, r4
bl sub_037F8598
ldrh r0, [r7, #0xae]
add r0, r0, #1
strh r0, [r7, #0xae]
_037F96A0:
add r8, r8, #1
cmp r8, #2
blo _037F9648
ldr r0, _037F96DC ; =0x048080AE
mov r1, #0xd
strh r1, [r0]
_037F96B8:
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_037F96C0: .word 0x0380FFF4
_037F96C4: .word 0x04808010
_037F96C8: .word 0x04808134
_037F96CC: .word 0x048080B6
_037F96D0: .word 0x0000FFFF
_037F96D4: .word 0x04808038
_037F96D8: .word 0x04808118
_037F96DC: .word 0x048080AE
arm_func_end sub_037F943C
arm_func_start sub_037F96E0
sub_037F96E0: ; 0x037F96E0
ldr r0, _037F9744 ; =0x0380FFF4
ldr r1, _037F9748 ; =0x04808010
ldr r2, [r0]
mov r0, #0x2000
strh r0, [r1]
mov r0, #0xd
add r2, r2, #0x344
strh r0, [r1, #0x9c]
ldrh r0, [r2, #0x1a]
cmp r0, #1
moveq r0, #2
streqh r0, [r2, #0x1a]
bxeq lr
cmp r0, #2
moveq r0, #0
streqh r0, [r2, #0x1a]
bxeq lr
ldrh r0, [r2, #0xc]
cmp r0, #2
bxne lr
ldrh r0, [r2, #8]
cmp r0, #0x40
movne r0, #0
strneh r0, [r1, #0x38]
bx lr
.align 2, 0
_037F9744: .word 0x0380FFF4
_037F9748: .word 0x04808010
arm_func_end sub_037F96E0
arm_func_start sub_037F974C
sub_037F974C: ; 0x037F974C
stmdb sp!, {r3, lr}
bl sub_027EA1AC
ldr r1, _037F9774 ; =0x048081AC
ldr r2, _037F9778 ; =0x0000FFFF
sub r0, r1, #0x19c
strh r2, [r1]
mov r1, #0x30
strh r1, [r0]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037F9774: .word 0x048081AC
_037F9778: .word 0x0000FFFF
arm_func_end sub_037F974C
arm_func_start sub_037F977C
sub_037F977C: ; 0x037F977C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r1, _037F9880 ; =0x04808010
mov r2, #8
ldr r0, _037F9884 ; =0x0380FFF4
strh r2, [r1]
ldr r0, [r0]
add r0, r0, #0x300
ldrh r0, [r0, #0x3a]
mov r0, r0, lsl #0x1b
movs r0, r0, lsr #0x1f
beq _037F97C4
add r0, r1, #0x18c
ldrh r0, [r0]
tst r0, #1
addeq r1, r1, #0x280
ldreqh r0, [r1]
eoreq r0, r0, #1
streqh r0, [r1]
_037F97C4:
ldr r0, _037F9884 ; =0x0380FFF4
ldr r1, [r0]
add r0, r1, #0x600
ldrh r0, [r0, #0x90]
tst r0, #8
beq _037F9878
ldr r4, _037F9888 ; =0x04808032
add r0, r1, #0x2c
mov r2, #0
add r1, r1, #0x344
add r3, r0, #0x400
mov r5, r2
mov lr, #0x8000
mov ip, #0x14
_037F97FC:
mul r6, r2, ip
ldrh r0, [r3, r6]
add r6, r3, r6
cmp r0, #0
beq _037F986C
ldr r0, [r6, #8]
ldrh r6, [r0, #0xc]
tst r6, #0x4000
beq _037F986C
ldrh r6, [r0, #4]
tst r6, #0xff
beq _037F986C
ldrh r6, [r0, #0xa]
add r7, r0, #0xc
add r6, r7, r6
sub r6, r6, #7
bic r7, r6, #1
ldrh r6, [r7]
cmp r6, #0
ldreqh r6, [r7, #2]
cmpeq r6, #0
bne _037F986C
strh r5, [r0, #4]
strh r5, [r4]
strh lr, [r4]
ldrh r0, [r1, #0xba]
add r0, r0, #1
strh r0, [r1, #0xba]
_037F986C:
add r2, r2, #1
cmp r2, #3
blo _037F97FC
_037F9878:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037F9880: .word 0x04808010
_037F9884: .word 0x0380FFF4
_037F9888: .word 0x04808032
arm_func_end sub_037F977C
arm_func_start sub_037F988C
sub_037F988C: ; 0x037F988C
stmdb sp!, {r3, lr}
ldr r1, _037F99EC ; =0x0380FFF4
ldr ip, _037F99F0 ; =0x04808010
ldr r2, [r1]
mov r0, #4
strh r0, [ip]
ldr r0, [r1]
add r1, ip, #0x198
add r0, r0, #0x600
ldrh r3, [r0, #0x90]
add r0, r2, #0xdc
add r2, r2, #0x2c
ldrh r1, [r1]
tst r3, #8
add r0, r0, #0x400
add r3, r2, #0x400
beq _037F997C
tst r1, #0x400
beq _037F997C
ldrh ip, [ip, #0xa0]
tst ip, #1
ldrneh r2, [r3]
cmpne r2, #0
bne _037F9938
tst ip, #4
ldrneh r2, [r3, #0x14]
cmpne r2, #0
bne _037F9938
tst ip, #8
ldrneh r2, [r3, #0x28]
cmpne r2, #0
bne _037F9938
ldr r2, _037F99F4 ; =0x0480819C
ldrh r2, [r2]
tst r2, #1
bne _037F9938
ldr r3, _037F99F8 ; =0x04808032
mov ip, #0
strh ip, [r3]
mov r2, #0x8000
strh r2, [r3]
strh ip, [r0, #2]
b _037F997C
_037F9938:
ldrh r3, [r0, #2]
add r2, r3, #1
strh r2, [r0, #2]
cmp r3, #0xc
bls _037F997C
ldr r3, _037F99F8 ; =0x04808032
mov r2, #0
strh r2, [r0, #2]
strh r2, [r3]
mov r2, #0x8000
ldr r0, _037F99EC ; =0x0380FFF4
strh r2, [r3]
ldr r0, [r0]
add r0, r0, #0x300
ldrh r2, [r0, #0xfe]
add r2, r2, #1
strh r2, [r0, #0xfe]
_037F997C:
ldr r0, _037F99EC ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x600
ldrh r0, [r0, #0x90]
tst r0, #1
beq _037F99E4
tst r1, #0x60
beq _037F99E4
ldr r2, _037F99FC ; =0x04808054
ldrh r1, [r2]
ldrh r0, [r2, #-2]
sub r0, r0, #0x4000
add r0, r0, r0, lsr #31
cmp r1, r0, asr #1
bge _037F99CC
ldrh r0, [r2, #-4]
sub r0, r0, #0x4000
add r0, r0, r0, lsr #31
cmp r1, r0, asr #1
bge _037F99E0
_037F99CC:
ldr r2, _037F9A00 ; =0x0480805A
ldr r0, _037F9A04 ; =0x00008001
ldrh r1, [r2]
strh r1, [r2, #-4]
strh r0, [r2, #-0x2a]
_037F99E0:
bl sub_027EAF70
_037F99E4:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037F99EC: .word 0x0380FFF4
_037F99F0: .word 0x04808010
_037F99F4: .word 0x0480819C
_037F99F8: .word 0x04808032
_037F99FC: .word 0x04808054
_037F9A00: .word 0x0480805A
_037F9A04: .word 0x00008001
arm_func_end sub_037F988C
arm_func_start sub_037F9A08
sub_037F9A08: ; 0x037F9A08
stmdb sp!, {r3, r4, r5, lr}
ldr r3, _037F9C50 ; =0x0380FFF4
ldr r0, _037F9C54 ; =0x04808010
ldr r2, [r3]
mov r1, #2
strh r1, [r0]
ldr r3, [r3]
add r2, r2, #0x2c
add r3, r3, #0x300
ldrh r3, [r3, #0x4c]
add r4, r2, #0x400
cmp r3, #0x12
bne _037F9A44
bl sub_027EF4C0
b _037F9C48
_037F9A44:
ldrh r2, [r0, #0xa8]
and r5, r2, #0xf00
cmp r5, #0x300
beq _037F9A68
cmp r5, #0x800
beq _037F9A9C
cmp r5, #0xb00
beq _037F9AD8
b _037F9BD4
_037F9A68:
ldr r0, [r4, #0x8c]
tst r0, #2
beq _037F9A78
bl sub_037FA598
_037F9A78:
ldr r1, _037F9C50 ; =0x0380FFF4
mov r0, #0
ldr r3, [r1]
mov r1, #8
ldr r2, [r3, #0x558]
add r2, r2, #1
str r2, [r3, #0x558]
bl sub_037F8598
b _037F9BD4
_037F9A9C:
ldr r2, [r4, #0x44]
ldrh r3, [r4, #0x9e]
ldrh r2, [r2, #4]
and r2, r2, #0xff
mov r2, r2, lsl #0x10
cmp r3, r2, lsr #16
strlsh r1, [r0, #0x9c]
ldrlsh r0, [r4, #0xa8]
addls r0, r0, #1
strlsh r0, [r4, #0xa8]
ldr r1, [r4, #0x90]
ldrh r0, [r1, #0x18]
add r0, r0, #1
strh r0, [r1, #0x18]
b _037F9BD4
_037F9AD8:
ldr r3, _037F9C58 ; =0x0000FFFF
ldr r2, _037F9C5C ; =0x04805F70
ldr r1, _037F9C60 ; =0x0480824E
strh r3, [r2]
strh r3, [r2, #2]
add r0, r0, #0x23c
strh r3, [r0]
strh r3, [r1]
ldrh r0, [r4, #0x3c]
cmp r0, #0
beq _037F9B30
ldr r1, [r4, #0x44]
ldrh r0, [r1, #0x22]
cmp r0, r3
bne _037F9B30
ldrh r0, [r1, #4]
cmp r0, #0
movne r0, #0
strneh r0, [r1, #4]
ldrneh r1, [r4, #0x98]
ldrne r0, [r4, #0x44]
strneh r1, [r0, #2]
_037F9B30:
ldr r0, [r4, #0x44]
ldr r2, [r4, #0x90]
ldrh r1, [r0, #2]
ldrh r0, [r4, #0x98]
cmp r1, #1
add r2, r2, #0x1a
bls _037F9B80
ldr r3, _037F9C50 ; =0x0380FFF4
ldr r3, [r3]
add r3, r3, #0x300
ldrh r3, [r3, #0x3a]
mov r3, r3, lsl #0x1b
movs r3, r3, lsr #0x1f
beq _037F9B80
ldr ip, _037F9C64 ; =0x0480819C
ldrh r3, [ip]
tst r3, #1
ldreqh r3, [ip, #0xf4]
eoreq r3, r3, #1
streqh r3, [ip, #0xf4]
_037F9B80:
ldr r3, _037F9C50 ; =0x0380FFF4
ldr r3, [r3]
add r3, r3, #0x600
ldrh r3, [r3, #0x90]
tst r3, #0x40
beq _037F9BD4
b _037F9BCC
_037F9B9C:
mov r1, r1, lsl #0xf
mov r1, r1, lsr #0x10
tst r1, #1
ldrneh r3, [r2, #6]
mov r0, r0, lsl #0xf
addne r3, r3, #1
mov r0, r0, lsr #0x10
strneh r3, [r2, #6]
tst r0, #1
ldrne r3, [r4, #0x90]
ldrneh r3, [r3, #0x16]
addne r2, r2, r3
_037F9BCC:
cmp r1, #1
bhi _037F9B9C
_037F9BD4:
cmp r5, #0x800
beq _037F9C3C
ldr r2, _037F9C68 ; =0x048080B0
ldrh r0, [r2]
tst r0, #2
bne _037F9C3C
ldrh r0, [r4, #0x3c]
cmp r0, #0
beq _037F9C30
mov r0, #2
strh r0, [r2, #4]
mov r1, #0
strh r1, [r2, #-0x68]
ldrh r1, [r2, #-0xa0]
tst r1, #0x1000
ldrneh r0, [r4, #0xac]
addne r0, r0, #1
strneh r0, [r4, #0xac]
bne _037F9C24
bl sub_037FA12C
_037F9C24:
ldrh r0, [r4, #0xaa]
add r0, r0, #1
strh r0, [r4, #0xaa]
_037F9C30:
ldr r0, _037F9C6C ; =0x048080AE
mov r1, #2
strh r1, [r0]
_037F9C3C:
mov r0, #0
mov r1, #0xe
bl sub_037F8598
_037F9C48:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037F9C50: .word 0x0380FFF4
_037F9C54: .word 0x04808010
_037F9C58: .word 0x0000FFFF
_037F9C5C: .word 0x04805F70
_037F9C60: .word 0x0480824E
_037F9C64: .word 0x0480819C
_037F9C68: .word 0x048080B0
_037F9C6C: .word 0x048080AE
arm_func_end sub_037F9A08
arm_func_start sub_037F9C70
sub_037F9C70: ; 0x037F9C70
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x38
ldr r0, _037FA100 ; =0x0380FFF4
ldr r2, _037FA104 ; =0x04808010
ldr r3, [r0]
mov r1, #1
add r0, r3, #0x600
ldrh r4, [r0, #0x90]
add r6, r3, #0x344
strh r1, [r2]
ldrh r1, [r6, #0xc]
add r0, r3, #0xdc
cmp r1, #0
add r7, r0, #0x400
ldreqh r0, [r2, #0x44]
and r4, r4, #1
streqh r0, [r2, #0x4a]
ldr r0, _037FA108 ; =0x04808098
sub fp, r0, #0x70
add r0, r0, #0x1b4
str r0, [sp, #0x24]
ldr r0, _037FA10C ; =0x0480824E
sub r0, r0, #0x154
str r0, [sp, #0x14]
ldr r0, _037FA108 ; =0x04808098
sub r0, r0, #0x44
str r0, [sp, #0x10]
ldr r0, _037FA110 ; =0x000008EF
sub r0, r0, #0x29
str r0, [sp, #0x28]
ldr r0, _037FA110 ; =0x000008EF
add r0, r0, #0x3d
str r0, [sp, #0x2c]
ldr r0, _037FA114 ; =0x04805F7E
sub r0, r0, #0x24
str r0, [sp, #0x30]
ldr r0, _037FA110 ; =0x000008EF
add r0, r0, #0x710
str r0, [sp, #0x34]
_037F9D0C:
ldr r0, [sp, #0x10]
ldrh sb, [r7, #4]
ldrh sl, [r0]
cmp sb, sl
beq _037FA080
ldr r0, _037FA108 ; =0x04808098
ldr r1, [sp, #0x14]
ldrh r0, [r0, #0x60]
ldrh r3, [r1]
ldr r1, _037FA108 ; =0x04808098
ldrh r2, [r1, #0x60]
ldr r1, [sp, #0x14]
cmp r0, r2
ldrh r1, [r1]
movhi r0, r1, lsl #0xc
orrhi r0, r0, r2, lsr #4
strhi r0, [sp, #4]
movls r1, r3, lsl #0xc
orrls r0, r1, r0, lsr #4
strls r0, [sp, #4]
ldr r0, [sp, #0x28]
cmp sb, r0
blo _037F9D78
ldr r0, _037FA110 ; =0x000008EF
cmp sb, r0
bhi _037F9D78
bl sub_027EA1AC
_037F9D78:
mov r0, sb, lsl #1
str r0, [sp, #0x18]
add r0, r0, #0x4000
add r8, r0, #0x4800000
add r0, r8, #2
bl sub_037FA6C8
mov r5, r0
add r0, r5, #2
bl sub_037FA6C8
str r0, [sp, #0x1c]
add r0, r0, #4
bl sub_037FA6C8
str r0, [sp, #0x20]
add r0, r8, #0xe
bl sub_037FA6C8
str r0, [sp, #0xc]
ldr r0, [sp, #0x18]
ldrh r1, [r5]
add r0, r0, #0x4800000
add r0, r0, #0x4000
mov r1, r1, lsl #1
ldrh r2, [r0]
and r1, r1, #0x400
orr r1, r2, r1
strh r1, [r0]
ldr r1, [sp, #4]
ldr r0, [sp, #0x1c]
strh r1, [r0]
ldr r0, [sp, #0x20]
ldrh r1, [r0]
add r0, r1, sb, lsl #1
add r0, r0, #0xf
mov r0, r0, lsr #2
mov sb, r0, lsl #1
cmp sb, #0xfb0
ldrhsh r0, [r6, #0x9a]
subhs sb, sb, r0, lsr #1
ldr r0, [sp, #0x2c]
cmp r1, r0
bls _037F9E34
ldr r0, _037FA118 ; =0x0000FFFF
mov sb, sl
strh r0, [r8]
ldrh r0, [r6, #0xb4]
add r0, r0, #1
strh r0, [r6, #0xb4]
b _037F9EBC
_037F9E34:
cmp r4, #0
cmpne sb, sl
beq _037F9EBC
ldr r3, [sp, #0x30]
mov r2, sb, lsl #1
add r0, r2, #0x4000
add r0, r0, #0x4800000
cmp r0, r3
ldrloh r0, [r0, #6]
add r2, r2, #0x4800000
add r2, r2, #0x4000
ldrhsh r3, [r6, #0x9a]
andlo r0, r0, #0xff
subhs r0, r0, r3
ldrh r2, [r2]
ldrhsh r0, [r0, #6]
tst r2, #0x7c00
bne _037F9E94
cmp r0, #0xa
cmpne r0, #0x14
bne _037F9E94
ldr r0, [sp, #0x34]
cmp r1, r0
bls _037F9EBC
_037F9E94:
ldrh r0, [r6, #0xb4]
ldr r1, _037FA118 ; =0x0000FFFF
add r0, r0, #1
strh r0, [r6, #0xb4]
mov r0, sl, lsl #0x10
strh r1, [r8]
mov r0, r0, lsr #0x10
strh r0, [r7, #4]
strh r0, [r5]
b _037FA080
_037F9EBC:
ldrh r0, [r8]
and r0, r0, #0xf
cmp r0, #0xc
bne _037FA01C
add r0, r8, #0xc
bl sub_037FA6C8
ldrh r0, [r0]
str r0, [sp, #8]
add r0, r8, #0x22
bl sub_037FA6C8
ldrh sl, [r0]
ldrh r0, [r7]
cmp r0, sl
bne _037F9F20
ldr r0, [sp, #8]
tst r0, #0x800
beq _037F9F20
ldr r0, _037FA100 ; =0x0380FFF4
ldr r1, [r0]
ldr r0, [r1, #0x57c]
add r0, r0, #1
str r0, [r1, #0x57c]
ldr r0, _037FA118 ; =0x0000FFFF
strh r0, [r8]
b _037F9FF4
_037F9F20:
ldr r0, _037FA100 ; =0x0380FFF4
ldr r0, [r0]
add r1, r0, #0x300
ldrh r2, [r1, #0x3a]
mov r2, r2, lsl #0x18
movs r2, r2, lsr #0x1f
ldreqh r1, [r1, #0x4c]
cmpeq r1, #0x40
bne _037F9FF4
ldrh r1, [fp]
cmp r1, #0
beq _037F9FCC
ldr r1, _037FA108 ; =0x04808098
ldrh r1, [r1]
tst r1, #0x8000
beq _037F9FCC
add r0, r0, #0x660
bl sub_037FD5C0
ldr r0, [sp, #0xc]
mov r3, #0
ldrh r1, [r0]
ldr r0, _037FA11C ; =0x000082EA
mov r2, #0x3e8
umull ip, r8, r1, r0
mov r0, r3
mla r8, r1, r0, r8
mov r0, ip, lsr #6
ldr r1, _037FA11C ; =0x000082EA
mov ip, r3
mla r8, ip, r1, r8
mov r1, r8, lsr #6
orr r0, r0, r8, lsl #26
bl sub_03806B80
mov r2, #0
str r2, [sp]
mov r2, r1
mov r1, r0
ldr r0, _037FA100 ; =0x0380FFF4
ldr r3, _037FA120 ; =sub_027EA0BC
ldr r0, [r0]
add r0, r0, #0x660
bl sub_037FD4DC
b _037F9FF4
_037F9FCC:
ldr r1, _037FA118 ; =0x0000FFFF
ldr r0, _037FA114 ; =0x04805F7E
mov sl, r1
strh r1, [r0]
ldr r0, [sp, #0x24]
strh r1, [r0]
ldr r0, _037FA10C ; =0x0480824E
strh r1, [r0]
mov r0, r1
strh r0, [r8]
_037F9FF4:
strh sl, [r7]
bl sub_037FA6F0
tst r0, #1
beq _037FA06C
ldr r0, _037FA100 ; =0x0380FFF4
ldr r1, [r0]
ldr r0, [r1, #0x5a8]
add r0, r0, #1
str r0, [r1, #0x5a8]
b _037FA06C
_037FA01C:
cmp r0, #0xd
bne _037FA06C
ldr r0, _037FA100 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x300
ldrh r1, [r0, #0x3a]
mov r1, r1, lsl #0x18
movs r1, r1, lsr #0x1f
ldreqh r0, [r0, #0x4c]
cmpeq r0, #0x40
bne _037FA06C
ldrh r0, [fp]
cmp r0, #0
beq _037FA064
ldr r0, _037FA108 ; =0x04808098
ldrh r0, [r0]
tst r0, #0x8000
bne _037FA06C
_037FA064:
ldr r0, _037FA118 ; =0x0000FFFF
strh r0, [r8]
_037FA06C:
mov r0, sb, lsl #0x10
mov r0, r0, lsr #0x10
strh r0, [r7, #4]
strh r0, [r5]
b _037F9D0C
_037FA080:
cmp r4, #0
beq _037FA0D4
ldr r0, _037FA124 ; =0x04808054
ldrh r4, [r0]
bl sub_037FA6F0
mov r0, r0, lsl #0x10
movs r1, r0, lsr #0x10
beq _037FA0D4
ldr r0, _037FA124 ; =0x04808054
ldrh r0, [r0]
cmp r4, r0
bne _037FA0D4
tst r1, #2
beq _037FA0C4
mov r0, #0x80
bl sub_027EB06C
b _037FA0D4
_037FA0C4:
tst r1, #1
beq _037FA0D4
mov r0, #0x100
bl sub_027EB06C
_037FA0D4:
ldr r0, _037FA128 ; =0x0480805A
ldrh r1, [r0]
ldrh r0, [r0, #-6]
cmp r1, r0
beq _037FA0F4
mov r0, #0
mov r1, #0xf
bl sub_037F8598
_037FA0F4:
add sp, sp, #0x38
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FA100: .word 0x0380FFF4
_037FA104: .word 0x04808010
_037FA108: .word 0x04808098
_037FA10C: .word 0x0480824E
_037FA110: .word 0x000008EF
_037FA114: .word 0x04805F7E
_037FA118: .word 0x0000FFFF
_037FA11C: .word 0x000082EA
_037FA120: .word sub_027EA0BC
_037FA124: .word 0x04808054
_037FA128: .word 0x0480805A
arm_func_end sub_037F9C70
arm_func_start sub_037FA12C
sub_037FA12C: ; 0x037FA12C
stmdb sp!, {r3, lr}
ldr ip, _037FA210 ; =0x0380FFF4
ldr r2, _037FA214 ; =0x04808010
ldr r1, [ip]
mov r3, #0x1000
add r1, r1, #0x2c
strh r3, [r2]
add r3, r1, #0x400
ldrh r1, [r3, #0x3c]
cmp r1, #0
beq _037FA208
ldr r1, [ip]
add r1, r1, #0x600
ldrh r1, [r1, #0x90]
tst r1, #0x10
cmpne r0, #0
beq _037FA1FC
add r0, r2, #0x204
ldrh r1, [r2, #0xa6]
ldrh r0, [r0]
cmp r0, #3
cmpne r0, #5
bne _037FA1FC
cmp r1, #0
bne _037FA1FC
ldr r3, [r3, #0x44]
mov r2, #0
ldrh r0, [r3, #2]
b _037FA1B0
_037FA1A0:
and r1, r0, #1
mov r0, r0, lsl #0xf
add r2, r2, r1
mov r0, r0, lsr #0x10
_037FA1B0:
cmp r0, #0
bne _037FA1A0
ldrh r0, [r3, #0x24]
ldrh r1, [r3, #0xa]
add r0, r0, #0xa
mul r0, r2, r0
add r0, r0, #0xc0
add r0, r0, r1, lsl #2
mov r0, r0, lsl #0x10
ldr r1, _037FA218 ; =sub_037FA660
mov r0, r0, lsr #0x10
bl sub_027EAB5C
ldr r0, _037FA210 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x400
ldrh r1, [r0]
add r1, r1, #1
strh r1, [r0]
b _037FA208
_037FA1FC:
mov r0, #0
mov r1, #0x10
bl sub_037F8598
_037FA208:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FA210: .word 0x0380FFF4
_037FA214: .word 0x04808010
_037FA218: .word sub_037FA660
arm_func_end sub_037FA12C
arm_func_start sub_037FA21C
sub_037FA21C: ; 0x037FA21C
stmdb sp!, {r3, lr}
ldr r3, _037FA318 ; =0x0380FFF4
ldr r0, _037FA31C ; =0x04808010
ldr r2, [r3]
mov r1, #0x80
strh r1, [r0]
ldr r1, [r3]
add r2, r2, #0x2c
add r1, r1, #0x600
ldrh r1, [r1, #0x90]
tst r1, #0x20
beq _037FA2B0
add r1, r0, #0x204
ldrh r3, [r1]
add r1, r0, #0x258
and r3, r3, #0xff
ldrh ip, [r1]
cmp r3, #3
blo _037FA2B0
cmp r3, #5
bhi _037FA2B0
ldr r3, [r2, #0x458]
ldr r1, _037FA320 ; =0x00000FFF
and r3, r1, r3, lsr #1
cmp ip, r3
blo _037FA2B0
ldr r2, [r2, #0x430]
and r1, r1, r2, lsr #1
cmp ip, r1
bhi _037FA2B0
add r1, r0, #0x234
ldrh r0, [r1]
orr r0, r0, #0x80
strh r0, [r1]
ldrh r0, [r1]
bic r0, r0, #0x80
strh r0, [r1]
_037FA2B0:
ldr r1, _037FA324 ; =0x04808000
ldrh r0, [r1]
cmp r0, #0x1440
beq _037FA310
add r0, r1, #0x19c
ldrh r0, [r0]
and r0, r0, #0x42
cmp r0, #0x42
bne _037FA310
add r1, r1, #0x2b8
ldrh r2, [r1]
cmp r2, #0
beq _037FA310
mov r3, #0
b _037FA304
_037FA2EC:
cmp r3, #0x3e8
add r3, r3, #1
bls _037FA304
mov r0, #0x40
bl sub_027EB06C
b _037FA310
_037FA304:
ldrh r0, [r1]
cmp r2, r0
beq _037FA2EC
_037FA310:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FA318: .word 0x0380FFF4
_037FA31C: .word 0x04808010
_037FA320: .word 0x00000FFF
_037FA324: .word 0x04808000
arm_func_end sub_037FA21C
arm_func_start sub_037FA328
sub_037FA328: ; 0x037FA328
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r2, _037FA57C ; =0x0380FFF4
ldr r0, _037FA580 ; =0x04808010
ldr r3, [r2]
mov r1, #0x40
strh r1, [r0]
ldr r2, [r2]
add r1, r3, #0x2c
add r2, r2, #0x600
ldrh r2, [r2, #0x90]
add r4, r3, #0x344
tst r2, #0x20
add r5, r1, #0x400
beq _037FA574
ldrh r2, [r5, #0xa4]
ldr r1, _037FA584 ; =0x0000FFFF
cmp r2, r1
addeq r2, r0, #0x18c
ldreqh r2, [r2]
andeq r2, r2, #3
cmpeq r2, #3
bne _037FA574
add r2, r0, #0x258
ldrh r3, [r2]
ldrh r2, [r0, #0x40]
sub r1, r1, #0xf000
and r1, r1, r2, lsr #1
cmp r3, r1
blt _037FA574
ldrh r7, [r0, #0x44]
mov r0, r7, lsl #1
add r0, r0, #0x4000
add r0, r0, #0x4800000
add r0, r0, #8
bl sub_037FA6C8
add r0, r0, #4
bl sub_037FA6C8
ldrh r2, [r0]
ldr r1, _037FA588 ; =0x0000E7FF
and r1, r2, r1
cmp r1, #0x228
bne _037FA574
add r0, r0, #2
bl sub_037FA6C8
ldr r2, _037FA58C ; =0x048080F8
ldrh r1, [r2]
sub r6, r1, #0x10000
add r1, r2, #0x170
_037FA3E8:
ldrh r3, [r1]
sub r3, r3, r7
mov r3, r3, lsl #0x10
mov r8, r3, lsr #0x10
tst r8, #0x8000
ldrneh r3, [r4, #0x9a]
addne r3, r8, r3, lsr #1
movne r3, r3, lsl #0x10
movne r8, r3, lsr #0x10
cmp r8, #0xe
bhi _037FA430
ldrh r3, [r2]
sub r3, r3, r6
mov r3, r3, lsl #0x10
mov r3, r3, lsr #0x10
cmp r3, #0x40
bhi _037FA574
b _037FA3E8
_037FA430:
add r0, r0, #8
mov r8, #0
b _037FA458
_037FA43C:
bl sub_037FA6C8
add r1, r4, r8, lsl #1
ldrh r2, [r0], #2
ldrh r1, [r1, #0x64]
cmp r2, r1
bne _037FA574
add r8, r8, #1
_037FA458:
cmp r8, #3
blo _037FA43C
add r0, r0, #0xa
bl sub_037FA6C8
ldr r3, _037FA58C ; =0x048080F8
add r1, r3, #0x170
_037FA470:
ldrh r2, [r1]
sub r2, r2, r7
mov r2, r2, lsl #0x10
mov r8, r2, lsr #0x10
tst r8, #0x8000
ldrneh r2, [r4, #0x9a]
addne r2, r8, r2, lsr #1
movne r2, r2, lsl #0x10
movne r8, r2, lsr #0x10
cmp r8, #0x14
bhi _037FA4B8
ldrh r2, [r3]
sub r2, r2, r6
mov r2, r2, lsl #0x10
mov r2, r2, lsr #0x10
cmp r2, #0x70
bhi _037FA574
b _037FA470
_037FA4B8:
ldr r2, _037FA590 ; =0x04808028
ldrh r3, [r0]
ldrh r0, [r2]
mov r1, #1
tst r3, r1, lsl r0
bne _037FA574
ldrh r1, [r2, #0x70]
mov r0, #0x40
strh r1, [r5, #0xa4]
strh r0, [r2, #0x8c]
ldrh r0, [r4, #0xbe]
add r1, r2, #0x174
add r0, r0, #1
strh r0, [r4, #0xbe]
_037FA4F0:
ldrh r0, [r1]
and r0, r0, #3
cmp r0, #3
beq _037FA4F0
ldr r0, _037FA594 ; =0x04808244
mov r2, #8
ldrh r1, [r0]
sub r3, r0, #0x1c
orr r1, r1, #0x40
strh r1, [r0]
ldrh r4, [r0]
ldr r1, _037FA57C ; =0x0380FFF4
bic r4, r4, #0x40
strh r4, [r0]
strh r2, [r3]
mov r2, #0
strh r2, [r3]
ldr r1, [r1]
ldr r2, _037FA584 ; =0x0000FFFF
add r1, r1, #0x2c
add r6, r1, #0x400
ldrh r5, [r6, #0xa4]
cmp r5, r2
beq _037FA574
sub r4, r0, #0x1b0
ldrh r3, [r4]
sub r1, r0, #0x214
strh r5, [r4]
ldrh r0, [r1]
orr r0, r0, #0x80
strh r0, [r1]
strh r3, [r4]
strh r2, [r6, #0xa4]
_037FA574:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FA57C: .word 0x0380FFF4
_037FA580: .word 0x04808010
_037FA584: .word 0x0000FFFF
_037FA588: .word 0x0000E7FF
_037FA58C: .word 0x048080F8
_037FA590: .word 0x04808028
_037FA594: .word 0x04808244
arm_func_end sub_037FA328
arm_func_start sub_037FA598
sub_037FA598: ; 0x037FA598
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _037FA65C ; =0x0380FFF4
mov r0, #2
ldr r1, [r1]
mov r5, #0
add r1, r1, #0x2c
add r4, r1, #0x400
bl sub_027F0CD4
mov r0, #1
bl sub_027F0CD4
mov r0, r5
bl sub_027F0CD4
ldrh r0, [r4, #0x28]
cmp r0, #0
beq _037FA5EC
ldr r0, [r4, #0x30]
ldrh r0, [r0]
cmp r0, #0
movne r5, #1
moveq r0, r5
streqh r0, [r4, #0x28]
_037FA5EC:
ldrh r0, [r4, #0x14]
cmp r0, #0
beq _037FA610
ldr r0, [r4, #0x1c]
ldrh r0, [r0]
cmp r0, #0
moveq r0, #0
streqh r0, [r4, #0x14]
movne r5, #1
_037FA610:
ldrh r0, [r4]
cmp r0, #0
beq _037FA634
ldr r0, [r4, #8]
ldrh r0, [r0]
cmp r0, #0
moveq r0, #0
streqh r0, [r4]
movne r5, #1
_037FA634:
cmp r5, #0
beq _037FA648
mov r0, #0
mov r1, #0xe
bl sub_037F8598
_037FA648:
mov r0, #0
mov r1, #0x14
bl sub_037F8598
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FA65C: .word 0x0380FFF4
arm_func_end sub_037FA598
arm_func_start sub_037FA660
sub_037FA660: ; 0x037FA660
stmdb sp!, {r4, lr}
mov r0, #0x1000000
bl ClearIeFlag
ldr r2, _037FA6C0 ; =0x04808210
mov r1, #0x1000
ldrh r3, [r2]
mov r4, r0
strh r1, [r2, #0x34]
mov r1, #0x64
b _037FA698
_037FA688:
ldrh r0, [r2]
cmp r3, r0
bne _037FA6A0
sub r1, r1, #1
_037FA698:
cmp r1, #0
bne _037FA688
_037FA6A0:
ldr r1, _037FA6C4 ; =0x04808244
mov r0, #0
strh r0, [r1]
bl sub_037FA12C
mov r0, r4
bl sub_037FB8F0
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FA6C0: .word 0x04808210
_037FA6C4: .word 0x04808244
arm_func_end sub_037FA660
arm_func_start sub_037FA6C8
sub_037FA6C8: ; 0x037FA6C8
ldr r1, _037FA6E8 ; =0x04805F60
cmp r0, r1
ldrhs r1, _037FA6EC ; =0x0380FFF4
ldrhs r1, [r1]
addhs r1, r1, #0x300
ldrhsh r1, [r1, #0xde]
subhs r0, r0, r1
bx lr
.align 2, 0
_037FA6E8: .word 0x04805F60
_037FA6EC: .word 0x0380FFF4
arm_func_end sub_037FA6C8
arm_func_start sub_037FA6F0
sub_037FA6F0: ; 0x037FA6F0
stmdb sp!, {r3, r4, r5, lr}
ldr r0, _037FA724 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x2c
add r5, r0, #0x400
add r0, r5, #0x50
bl sub_027EB844
mov r4, r0
add r0, r5, #0x64
bl sub_027EB844
orr r0, r4, r0
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FA724: .word 0x0380FFF4
arm_func_end sub_037FA6F0
arm_func_start sub_037FA728
sub_037FA728: ; 0x037FA728
stmdb sp!, {r3, lr}
ldr r0, _037FA770 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x300
ldrh r0, [r0, #0xe8]
cmp r0, #0
beq _037FA748
bl sub_027F1578
_037FA748:
ldr r0, _037FA770 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x300
ldrh r0, [r0, #0x3a]
mov r0, r0, lsl #0x19
movs r0, r0, lsr #0x1f
beq _037FA768
bl sub_027EDF34
_037FA768:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FA770: .word 0x0380FFF4
arm_func_end sub_037FA728
arm_func_start sub_037FA774
sub_037FA774: ; 0x037FA774
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr r7, _037FA940 ; =0x0380FFF4
mov sl, #2
ldr r1, [r7]
mov fp, #0
add r0, r1, #0x2c
add r8, r0, #0x400
ldr r0, _037FA944 ; =0x04808032
add r6, r1, #0x344
add r4, r0, #0x6e
_037FA79C:
mov r0, #0x14
mov r5, sl, lsl #2
mla sb, sl, r0, r8
add r0, r5, #0x4800000
add r0, r0, #0x8000
ldrh r0, [r0, #0xa0]
tst r0, #0x8000
bne _037FA930
ldrh r0, [sb]
cmp r0, #0
beq _037FA930
ldr r1, [sb, #0xc]
cmp r1, #0
beq _037FA910
ldr r0, [sb, #8]
ldrh r0, [r0]
strh r0, [r1, #8]
ldr r1, [sb, #8]
ldr r0, [sb, #0xc]
ldrh r1, [r1, #0xc]
strh r1, [r0, #0x14]
ldr r0, [sb, #8]
ldrh r1, [r0, #0xc]
tst r1, #0x4000
beq _037FA8DC
ldr r1, [r7]
add r1, r1, #0x600
ldrh r1, [r1, #0x90]
tst r1, #8
beq _037FA8C0
ldrh r1, [r0, #0xa]
add r2, r0, #0xc
add r1, r2, r1
sub r1, r1, #7
bic r2, r1, #1
ldrh r1, [r2]
cmp r1, #0
ldreqh r1, [r2, #2]
cmpeq r1, #0
bne _037FA8C0
ldr r0, _037FA944 ; =0x04808032
mov r1, #0x8000
strh fp, [r0]
strh r1, [r0]
ldrh r0, [r6, #0xba]
add r0, r0, #1
strh r0, [r6, #0xba]
ldr r0, [sb, #0xc]
bl sub_027F027C
cmp r0, #0
beq _037FA8A4
ldr r2, [sb, #0xc]
mov r0, #2
strh r0, [r2, #8]
ldrh r0, [sb, #4]
mov r1, #1
add r0, r0, #1
strh r0, [sb, #4]
ldrh r0, [r8, #0xae]
add r0, r0, #1
strh r0, [r8, #0xae]
ldr r0, [sb, #0xc]
ldr r2, [sb, #0x10]
mov lr, pc
bx r2
_037FA8A0:
b _037FA930
_037FA8A4:
ldr r1, [sb, #0xc]
mov r0, #0
strh r0, [r1, #0xc]
ldrh r0, [r5, r4]
orr r0, r0, #0x8000
strh r0, [r5, r4]
b _037FA930
_037FA8C0:
ldrh r0, [r0, #4]
ldr r2, [sb, #0xc]
and r0, r0, #0xff
ldrh r1, [r2, #0xc]
add r0, r1, r0
strh r0, [r2, #0xc]
b _037FA8EC
_037FA8DC:
ldrh r1, [r0, #4]
ldr r0, [sb, #0xc]
and r1, r1, #0xff
strh r1, [r0, #0xc]
_037FA8EC:
ldrh r0, [sb, #4]
mov r1, #2
add r0, r0, #1
strh r0, [sb, #4]
ldr r0, [sb, #0xc]
ldr r2, [sb, #0x10]
mov lr, pc
bx r2
_037FA90C:
b _037FA930
_037FA910:
ldrh r0, [sb, #4]
mov r1, #3
add r0, r0, #1
strh r0, [sb, #4]
ldr r0, [sb, #8]
ldr r2, [sb, #0x10]
mov lr, pc
bx r2
_037FA930:
subs sl, sl, #1
bpl _037FA79C
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FA940: .word 0x0380FFF4
_037FA944: .word 0x04808032
arm_func_end sub_037FA774
arm_func_start sub_037FA948
sub_037FA948: ; 0x037FA948
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r0, _037FAC98 ; =0x0380FFF4
ldr r4, [r0]
add r0, r4, #0xdc
add r5, r0, #0x400
_037FA95C:
ldr r1, _037FAC9C ; =0x0480805A
ldrh r0, [r5, #4]
ldrh r6, [r1]
cmp r6, r0
beq _037FAC90
ldr r0, _037FACA0 ; =0x000008C6
cmp r6, r0
blo _037FA980
bl sub_027EA1AC
_037FA980:
mov r6, r6, lsl #1
add r0, r6, #0x4000
add r7, r0, #0x4800000
add r0, r7, #2
bl sub_037FA6C8
add r1, r6, #0x4800000
add r1, r1, #0x4000
ldrh r2, [r1]
ldr r1, _037FACA4 ; =0x0000FFFF
ldrh r6, [r0]
cmp r2, r1
ldreq r0, _037FAC9C ; =0x0480805A
streqh r6, [r0]
beq _037FA95C
add r0, r7, #8
bl sub_037FA6C8
ldrh r1, [r0]
mov r0, r7
bl sub_037FAE50
ldr r1, _037FAC9C ; =0x0480805A
movs r8, r0
strh r6, [r1]
bne _037FAA04
ldrh r0, [r7]
and r0, r0, #0xf
cmp r0, #0xc
bne _037FA9F8
mov r0, #0x10
bl sub_027EB06C
b _037FA95C
_037FA9F8:
mov r0, #8
bl sub_027EB06C
b _037FA95C
_037FAA04:
ldr r0, _037FAC98 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x600
ldrh r0, [r0, #0x90]
tst r0, #8
beq _037FAA2C
ldrh r0, [r8, #0x14]
tst r0, #0x4000
movne r0, #0
strneh r0, [r5, #2]
_037FAA2C:
ldrh r0, [r8, #8]
mov r6, #1
tst r0, #0x200
beq _037FAA84
ldrh r0, [r8, #0x14]
mov r0, r0, lsl #0x15
mov r0, r0, lsr #0x1f
cmp r0, #1
beq _037FAA60
ldrh r0, [r8, #0x2a]
mov r0, r0, lsl #0x1c
movs r0, r0, lsr #0x1c
beq _037FAC30
_037FAA60:
add r0, r4, #0x188
add r1, r4, #0x1e8
sub r2, r8, #0x10
mov r6, #0
bl sub_037F8988
mov r0, #2
mov r1, #9
bl sub_037F8598
b _037FAC30
_037FAA84:
and r0, r0, #0xf
cmp r0, #0xf
addls pc, pc, r0, lsl #2
b _037FAC30
_037FAA94: ; jump table
b _037FAB20 ; case 0
b _037FAB08 ; case 1
b _037FAC30 ; case 2
b _037FAC30 ; case 3
b _037FAC30 ; case 4
b _037FAB50 ; case 5
b _037FAC30 ; case 6
b _037FAC30 ; case 7
b _037FAAD4 ; case 8
b _037FAC30 ; case 9
b _037FAC30 ; case 10
b _037FAC30 ; case 11
b _037FABA8 ; case 12
b _037FABFC ; case 13
b _037FAB88 ; case 14
b _037FAB88 ; case 15
_037FAAD4:
ldrh r0, [r8, #0x14]
and r0, r0, #0xf
cmp r0, #8
bne _037FAC30
add r0, r4, #0x188
add r1, r4, #0x1c4
sub r2, r8, #0x10
mov r6, #0
bl sub_037F8988
mov r0, #2
mov r1, #6
bl sub_037F8598
b _037FAC30
_037FAB08:
ldrh r0, [r8, #0x14]
cmp r0, #0x80
bne _037FAC30
mov r0, r8
bl sub_027F2840
b _037FAC30
_037FAB20:
ldrh r0, [r8, #0x14]
tst r0, #0xf
bne _037FAC30
add r0, r4, #0x188
add r1, r4, #0x1dc
sub r2, r8, #0x10
mov r6, #0
bl sub_037F8988
mov r0, #1
mov r1, #7
bl sub_037F8598
b _037FAC30
_037FAB50:
ldrh r1, [r8, #0x14]
rsb r0, r6, #0xe800
and r0, r1, r0
cmp r0, #0xa4
bne _037FAC30
add r0, r4, #0x188
add r1, r4, #0x1dc
sub r2, r8, #0x10
mov r6, #0
bl sub_037F8988
mov r0, #1
mov r1, #7
bl sub_037F8598
b _037FAC30
_037FAB88:
ldrh r1, [r8, #0x14]
ldr r0, _037FACA8 ; =0x0000E7BF
and r0, r1, r0
cmp r0, #0x118
bne _037FAC30
mov r0, r8
bl sub_027F25C0
b _037FAC30
_037FABA8:
ldrh r1, [r8, #0x14]
rsb r0, r6, #0xe800
and r0, r1, r0
cmp r0, #0x228
bne _037FAC30
ldr r0, _037FAC98 ; =0x0380FFF4
ldr r1, _037FAC98 ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x300
ldrh r0, [r0, #0x54]
cmp r0, #0
ldreq r0, _037FACAC ; =0x0480803C
streqh r6, [r0]
ldr r2, [r1]
mov r0, r8
ldr r1, [r2, #0x5ac]
add r1, r1, #1
str r1, [r2, #0x5ac]
bl sub_027F2444
mov r6, r0
b _037FAC30
_037FABFC:
ldrh r1, [r8, #0x14]
rsb r0, r6, #0xe800
and r0, r1, r0
cmp r0, #0x218
bne _037FAC30
ldr r1, _037FAC98 ; =0x0380FFF4
mov r0, r8
ldr r2, [r1]
ldr r1, [r2, #0x5b0]
add r1, r1, #1
str r1, [r2, #0x5b0]
bl sub_027F276C
mov r6, r0
_037FAC30:
cmp r6, #0
beq _037FAC44
add r0, r4, #0x188
sub r1, r8, #0x10
bl sub_037F8908
_037FAC44:
ldr r3, _037FAC98 ; =0x0380FFF4
ldr r0, [r3]
add r0, r0, #0x600
ldrh r0, [r0, #0x90]
tst r0, #1
beq _037FA95C
ldr r2, _037FACA4 ; =0x0000FFFF
ldr r1, _037FACB0 ; =0x04805F60
mov r6, #0
_037FAC68:
cmp r7, r1
ldrhs r0, [r3]
add r6, r6, #1
addhs r0, r0, #0x300
ldrhsh r0, [r0, #0xde]
subhs r7, r7, r0
cmp r6, #7
strh r2, [r7], #2
blo _037FAC68
b _037FA95C
_037FAC90:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FAC98: .word 0x0380FFF4
_037FAC9C: .word 0x0480805A
_037FACA0: .word 0x000008C6
_037FACA4: .word 0x0000FFFF
_037FACA8: .word 0x0000E7BF
_037FACAC: .word 0x0480803C
_037FACB0: .word 0x04805F60
arm_func_end sub_037FA948
arm_func_start sub_037FACB4
sub_037FACB4: ; 0x037FACB4
stmdb sp!, {r4, lr}
ldr r0, _037FAD8C ; =0x0380FFF4
ldr r0, [r0]
add r0, r0, #0x2c
add r4, r0, #0x400
ldrh r0, [r4, #0x3c]
cmp r0, #0
beq _037FAD84
ldr r1, [r4, #0x90]
ldr r0, [r4, #0x44]
ldrh r1, [r1, #0x10]
ldrh r0, [r0, #2]
cmp r1, r0
beq _037FACF0
bl sub_037FA948
_037FACF0:
ldr r0, [r4, #0x44]
ldrh r0, [r0, #4]
ands r2, r0, #0xff
ldr r0, _037FAD8C ; =0x0380FFF4
ldrne r1, [r0]
ldrne r0, [r1, #0x5a0]
addne r0, r0, r2
ldreq r1, [r0]
ldreq r0, [r1, #0x5a0]
addeq r0, r0, #1
str r0, [r1, #0x5a0]
ldrh r1, [r4, #0x40]
ldr r0, _037FAD8C ; =0x0380FFF4
add r1, r1, #1
strh r1, [r4, #0x40]
ldr ip, [r4, #0x90]
ldr r1, [r4, #0x44]
ldrh r3, [ip, #0x10]
ldrh r2, [r1, #2]
mov r1, #0
eor r2, r3, r2
strh r2, [ip, #0x12]
ldr r2, [r4, #0x90]
ldrh r2, [r2, #0x10]
strh r2, [r4, #0xa0]
strh r1, [r4, #0x3c]
ldr r0, [r0]
add r0, r0, #0x300
ldrh r0, [r0, #0xea]
cmp r0, #0
beq _037FAD70
bl sub_027E9E94
_037FAD70:
ldr r0, _037FAD8C ; =0x0380FFF4
ldr r1, [r4, #0x90]
ldr r0, [r0]
add r0, r0, #0x188
bl sub_037F8D58
_037FAD84:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FAD8C: .word 0x0380FFF4
arm_func_end sub_037FACB4
arm_func_start sub_037FAD90
sub_037FAD90: ; 0x037FAD90
stmdb sp!, {r4, lr}
ldr r0, _037FAE44 ; =0x0380FFF4
ldr r2, _037FAE48 ; =0x04808088
ldr r1, [r0]
ldrh r0, [r2]
add r4, r1, #0x17c
cmp r0, #0
bne _037FADD0
ldrh r0, [r4, #0x38]
cmp r0, #0
beq _037FADD0
mov r1, #8
mov r0, #2
strh r1, [r2, #0x26]
bl sub_027EFEF4
b _037FAE3C
_037FADD0:
add r0, r1, #0x500
ldrh r1, [r0, #0x32]
ldrh r2, [r0, #0x2e]
mvn r0, r1
tst r2, r0
bne _037FAE08
ldr r0, _037FAE4C ; =0x048080AE
mov r1, #8
strh r1, [r0]
ldrh r0, [r4, #0x38]
cmp r0, #0
beq _037FAE08
mov r0, #2
bl sub_027EFEF4
_037FAE08:
ldr r0, _037FAE4C ; =0x048080AE
mov r1, #5
strh r1, [r0]
ldrh r0, [r4, #0x2c]
cmp r0, #0
beq _037FAE28
mov r0, #1
bl sub_027EFEF4
_037FAE28:
ldrh r0, [r4, #0x20]
cmp r0, #0
beq _037FAE3C
mov r0, #0
bl sub_027EFEF4
_037FAE3C:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FAE44: .word 0x0380FFF4
_037FAE48: .word 0x04808088
_037FAE4C: .word 0x048080AE
arm_func_end sub_037FAD90
arm_func_start sub_037FAE50
sub_037FAE50: ; 0x037FAE50
stmdb sp!, {r4, r5, r6, lr}
ldr r2, _037FAEBC ; =0x0380FFF4
mov r5, r1
ldr r1, [r2]
mov r6, r0
add r0, r1, #0x188
add r1, r5, #0x22
bl sub_037F886C
movs r4, r0
moveq r0, #0
beq _037FAEB4
mov r1, r6
add r0, r4, #0x18
add r2, r5, #0xc
bl sub_027EAC00
sub r0, r5, #0x18
strh r0, [r4, #0x16]
ldrh r0, [r4, #0x22]
ldrh r1, [r4, #0x1e]
and r0, r0, #0xff
and r1, r1, #0xff
mov r0, r0, lsl #0x10
orr r0, r1, r0, lsr #8
strh r0, [r4, #0x1e]
add r0, r4, #0x10
_037FAEB4:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037FAEBC: .word 0x0380FFF4
arm_func_end sub_037FAE50
arm_func_start sub_037FAEC0
sub_037FAEC0: ; 0x037FAEC0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r1, _037FB190 ; =0x0380FFF4
mov r0, #0
ldr r7, [r1]
mov r2, #0xb0
add r1, r7, #0x2c
add r4, r1, #0x400
mov r1, r4
add r5, r7, #0x344
add r6, r7, #0x31c
bl sub_037FDFD0
add r0, r7, #0x400
mov r1, #0
strh r1, [r0, #0x2c]
str r1, [r4, #0xc]
strh r1, [r4, #0x14]
str r1, [r4, #0x20]
strh r1, [r4, #0x28]
ldr r0, _037FB194 ; =0x0000FFFF
str r1, [r4, #0x34]
strh r0, [r4, #0xa2]
strh r0, [r4, #0xa4]
ldrh r0, [r5, #0xc]
cmp r0, #3
addls pc, pc, r0, lsl #2
b _037FB174
_037FAF28: ; jump table
b _037FAF38 ; case 0
b _037FAFB4 ; case 1
b _037FB050 ; case 2
b _037FB0FC ; case 3
_037FAF38:
ldr r7, _037FB198 ; =0x04804170
ldr r0, _037FB19C ; =0x04804026
str r7, [r4, #8]
sub r1, r7, #0x148
str r1, [r4, #0x1c]
sub r2, r7, #0x170
ldr r1, _037FB1A0 ; =sub_027F02FC
str r2, [r4, #0x30]
ldr r2, _037FB1A4 ; =sub_027F0478
str r1, [r4, #0x10]
ldr r1, _037FB1A8 ; =sub_027F0944
str r2, [r4, #0x24]
ldr r3, _037FB1AC ; =0x0000B6B8
str r1, [r4, #0x38]
sub r1, r7, #0x14c
ldr r2, _037FB1B0 ; =0x00001D46
strh r3, [r1]
strh r2, [r0]
strh r3, [r7, #-4]
add r0, r0, #0x148
strh r2, [r0]
add r1, r7, #0x620
ldr r0, _037FB1B4 ; =0x04804792
strh r3, [r1]
strh r2, [r0]
mov r1, #8
ldr r0, _037FB1B8 ; =0x048080AE
strh r1, [r5, #0x8a]
mov r1, #1
strh r1, [r0]
b _037FB174
_037FAFB4:
ldr r3, _037FB1BC ; =0x04804AA0
ldr r2, _037FB1C0 ; =0x04804334
str r3, [r4, #8]
sub r0, r3, #0x148
str r0, [r4, #0x1c]
ldr r0, _037FB1A0 ; =sub_027F02FC
str r2, [r4, #0x30]
ldr r1, _037FB1A4 ; =sub_027F0478
str r0, [r4, #0x10]
ldr r0, _037FB1C4 ; =sub_027F09AC
str r1, [r4, #0x24]
ldr ip, _037FB1C8 ; =0x04804956
str r0, [r4, #0x38]
sub r1, r2, #0xfc
str r1, [r4, #0x80]
sub r7, r2, #0x334
ldr r0, _037FB1AC ; =0x0000B6B8
str r7, [r4, #0x44]
sub r7, r2, #0x100
ldr lr, _037FB1B0 ; =0x00001D46
strh r0, [r7]
strh lr, [r2, #-0xfe]
strh r0, [r2, #-4]
strh lr, [r2, #-2]
add r2, r2, #0x620
strh r0, [r2]
strh lr, [ip]
strh r0, [r3, #-4]
add r2, ip, #0x148
strh lr, [r2]
add r3, r3, #0x620
ldr r2, _037FB1CC ; =0x048050C2
strh r0, [r3]
strh lr, [r2]
mov r0, #0x208
strh r0, [r5, #0x8a]
str r1, [r4, #0x80]
bl sub_027F1204
b _037FB174
_037FB050:
ldr r1, _037FB1D0 ; =0x048045D8
ldr r3, _037FB1D4 ; =0x04804232
str r1, [r4, #8]
sub r0, r1, #0x148
str r0, [r4, #0x1c]
sub r2, r1, #0x170
ldr ip, _037FB1D8 ; =0x04804000
ldr r0, _037FB1A0 ; =sub_027F02FC
str r2, [r4, #0x30]
ldr r2, _037FB1A4 ; =sub_027F0478
str r0, [r4, #0x10]
ldr r0, _037FB1A8 ; =sub_027F0944
str r2, [r4, #0x24]
str r0, [r4, #0x38]
str ip, [r4, #0x58]
add r2, ip, #0x234
ldr r0, _037FB1AC ; =0x0000B6B8
str r2, [r4, #0x6c]
add r2, ip, #0x230
ldr r4, _037FB1B0 ; =0x00001D46
strh r0, [r2]
strh r4, [r3]
sub r2, r1, #0x174
strh r0, [r2]
add r2, r3, #0x234
strh r4, [r2]
sub r2, r1, #0x14c
strh r0, [r2]
add r2, r3, #0x25c
strh r4, [r2]
strh r0, [r1, #-4]
add r2, r3, #0x3a4
strh r4, [r2]
add r2, r1, #0x620
ldr r1, _037FB1DC ; =0x04804BFA
strh r0, [r2]
strh r4, [r1]
mov r1, #0x108
ldr r0, _037FB1B8 ; =0x048080AE
strh r1, [r5, #0x8a]
mov r1, #0xd
strh r1, [r0]
b _037FB174
_037FB0FC:
ldr ip, _037FB198 ; =0x04804170
ldr r0, _037FB19C ; =0x04804026
str ip, [r4, #8]
sub r1, ip, #0x148
str r1, [r4, #0x1c]
sub r2, ip, #0x170
ldr r1, _037FB1A0 ; =sub_027F02FC
str r2, [r4, #0x30]
ldr r2, _037FB1A4 ; =sub_027F0478
str r1, [r4, #0x10]
ldr r1, _037FB1A8 ; =sub_027F0944
str r2, [r4, #0x24]
ldr r3, _037FB1AC ; =0x0000B6B8
str r1, [r4, #0x38]
sub r1, ip, #0x14c
ldr r2, _037FB1B0 ; =0x00001D46
strh r3, [r1]
strh r2, [r0]
strh r3, [ip, #-4]
add r0, r0, #0x148
strh r2, [r0]
add r1, ip, #0x620
ldr r0, _037FB1B4 ; =0x04804792
strh r3, [r1]
strh r2, [r0]
mov r1, #0x108
ldr r0, _037FB1B8 ; =0x048080AE
strh r1, [r5, #0x8a]
mov r1, #0xd
strh r1, [r0]
_037FB174:
ldrh r0, [r6, #0x18]
cmp r0, #0
ldrneh r0, [r5, #0x8a]
orrne r0, r0, #0x4000
strneh r0, [r5, #0x8a]
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FB190: .word 0x0380FFF4
_037FB194: .word 0x0000FFFF
_037FB198: .word 0x04804170
_037FB19C: .word 0x04804026
_037FB1A0: .word sub_027F02FC
_037FB1A4: .word sub_027F0478
_037FB1A8: .word sub_027F0944
_037FB1AC: .word 0x0000B6B8
_037FB1B0: .word 0x00001D46
_037FB1B4: .word 0x04804792
_037FB1B8: .word 0x048080AE
_037FB1BC: .word 0x04804AA0
_037FB1C0: .word 0x04804334
_037FB1C4: .word sub_027F09AC
_037FB1C8: .word 0x04804956
_037FB1CC: .word 0x048050C2
_037FB1D0: .word 0x048045D8
_037FB1D4: .word 0x04804232
_037FB1D8: .word 0x04804000
_037FB1DC: .word 0x04804BFA
arm_func_end sub_037FAEC0
arm_func_start sub_037FB1E0
sub_037FB1E0: ; 0x037FB1E0
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _037FB2D8 ; =0x0380FFF4
mov r0, #0
ldr r3, [r1]
mov r2, #0x50
add r1, r3, #0xdc
add r5, r1, #0x400
mov r1, r5
add r4, r3, #0x344
bl sub_037FDFD0
ldr r1, _037FB2DC ; =0x04808030
mov r2, #0x8000
ldr r0, _037FB2D8 ; =0x0380FFF4
strh r2, [r1]
ldr r0, [r0]
add r0, r0, #0x300
ldrh r0, [r0, #0x50]
cmp r0, #3
addls pc, pc, r0, lsl #2
b _037FB25C
_037FB230: ; jump table
b _037FB240 ; case 0
b _037FB248 ; case 1
b _037FB250 ; case 2
b _037FB258 ; case 3
_037FB240:
ldr r6, _037FB2E0 ; =0x00000794
b _037FB25C
_037FB248:
ldr r6, _037FB2E4 ; =0x000010C4
b _037FB25C
_037FB250:
ldr r6, _037FB2E8 ; =0x00000BFC
b _037FB25C
_037FB258:
ldr r6, _037FB2E0 ; =0x00000794
_037FB25C:
ldr r3, _037FB2EC ; =0x04808050
add r0, r6, #0x4000
ldr r1, _037FB2F0 ; =0x00005F60
add r2, r0, #0x4800000
mov r0, r6, lsl #0xf
strh r2, [r3]
mov r0, r0, lsr #0x10
strh r0, [r3, #6]
strh r1, [r3, #2]
strh r0, [r3, #0xa]
ldr r2, _037FB2F4 ; =0x0000FFFF
strh r0, [r5, #4]
sub r0, r1, #0x4000
strh r2, [r5]
sub r0, r0, r6
strh r0, [r4, #0x9a]
sub r0, r1, #2
strh r0, [r3, #0x12]
rsb r0, r2, #0x18000
strh r0, [r3, #-0x20]
add r0, r3, #0x1fc
ldr r1, _037FB2F8 ; =0x0480824E
strh r2, [r0]
ldr r0, _037FB2FC ; =0x04805F70
strh r2, [r1]
strh r2, [r0]
strh r2, [r0, #2]
strh r2, [r0, #0xe]
strh r2, [r0, #6]
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037FB2D8: .word 0x0380FFF4
_037FB2DC: .word 0x04808030
_037FB2E0: .word 0x00000794
_037FB2E4: .word 0x000010C4
_037FB2E8: .word 0x00000BFC
_037FB2EC: .word 0x04808050
_037FB2F0: .word 0x00005F60
_037FB2F4: .word 0x0000FFFF
_037FB2F8: .word 0x0480824E
_037FB2FC: .word 0x04805F70
arm_func_end sub_037FB1E0
arm_func_start sub_037FB300
sub_037FB300: ; 0x037FB300
ldr r1, _037FB328 ; =0x0480819C
mov r2, #0xfa0
b _037FB31C
_037FB30C:
ldrh r0, [r1]
tst r0, #0x80
bxne lr
sub r2, r2, #1
_037FB31C:
cmp r2, #0
bne _037FB30C
bx lr
.align 2, 0
_037FB328: .word 0x0480819C
arm_func_end sub_037FB300
arm_func_start sub_037FB32C
sub_037FB32C: ; 0x037FB32C
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #8
ldr r2, _037FB3AC ; =0x000082EA
mov r3, #0
umull lr, ip, r0, r2
mla ip, r0, r3, ip
mov r0, r3
mla ip, r0, r2, ip
mov r0, lr, lsr #6
mov r4, #1
mov r5, r1
mov r1, ip, lsr #6
orr r0, r0, ip, lsl #26
mov r2, #0x3e8
str r4, [sp, #4]
bl sub_03806B80
add r3, sp, #4
str r3, [sp]
ldr r2, _037FB3B0 ; =0x0380FFF4
mov r3, r5
ldr r2, [r2]
add ip, r2, #0x234
mov r2, r1
mov r1, r0
add r0, ip, #0x400
bl sub_037FD4DC
_037FB394:
ldr r0, [sp, #4]
cmp r0, #0
bne _037FB394
add sp, sp, #8
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FB3AC: .word 0x000082EA
_037FB3B0: .word 0x0380FFF4
arm_func_end sub_037FB32C
arm_func_start sub_037FB3B4
sub_037FB3B4: ; 0x037FB3B4
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _037FB418 ; =0x04808028
ldr lr, _037FB41C ; =0x04000208
mov r5, #1
add r2, r1, #0x1ec
add r3, r1, #0x174
mov ip, #0
b _037FB408
_037FB3D4:
ldrh r4, [lr]
strh ip, [lr]
ldrh r0, [r3]
and r0, r0, #3
cmp r0, #3
ldrneh r0, [r2]
cmpne r0, #5
cmpne r0, #7
cmpne r0, #8
strneh ip, [r1]
ldrh r0, [lr]
movne r5, ip
strh r4, [lr]
_037FB408:
cmp r5, #0
bne _037FB3D4
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FB418: .word 0x04808028
_037FB41C: .word 0x04000208
arm_func_end sub_037FB3B4
arm_func_start sub_037FB420
sub_037FB420: ; 0x037FB420
ldr r1, _037FB450 ; =0x0480815E
mov r2, #0
b _037FB440
_037FB42C:
ldrh r0, [r1]
tst r0, #1
moveq r0, #0
bxeq lr
add r2, r2, #1
_037FB440:
cmp r2, #0x2800
blo _037FB42C
mov r0, #1
bx lr
.align 2, 0
_037FB450: .word 0x0480815E
arm_func_end sub_037FB420
arm_func_start sub_037FB454
sub_037FB454: ; 0x037FB454
ldr r1, _037FB484 ; =0x04808180
mov r2, #0
b _037FB474
_037FB460:
ldrh r0, [r1]
tst r0, #1
moveq r0, #0
bxeq lr
add r2, r2, #1
_037FB474:
cmp r2, #0x2800
blo _037FB460
mov r0, #1
bx lr
.align 2, 0
_037FB484: .word 0x04808180
arm_func_end sub_037FB454
arm_func_start HardwareInterrupt
HardwareInterrupt: ; 0x037FB488
stmdb sp!, {lr}
mov ip, #0x4000000
add ip, ip, #0x210
ldr r1, [ip, #-8]
cmp r1, #0
beq _037FB4A4
b _037FB4A8
_037FB4A4:
ldmia sp!, {pc}
_037FB4A8:
ldmia ip, {r1, r2}
ands r1, r1, r2
beq _037FB4B8
b _037FB4BC
_037FB4B8:
ldmia sp!, {pc}
_037FB4BC:
mov r3, #1
mov r0, #0
_037FB4C4:
ands r2, r1, r3, lsl r0
beq _037FB4D0
b _037FB4D4
_037FB4D0:
add r0, r0, #1
_037FB4D4:
beq _037FB4C4
str r2, [ip, #4]
ldr r1, _037FB4EC ; =_038074F4
ldr r0, [r1, r0, lsl #2]
ldr lr, _037FB4F0 ; =ReturnFromInterrupt
bx r0
.align 2, 0
_037FB4EC: .word _038074F4
_037FB4F0: .word ReturnFromInterrupt
arm_func_end HardwareInterrupt
arm_func_start ReturnFromInterrupt
ReturnFromInterrupt: ; 0x037FB4F4
ldr ip, _037FB630 ; =_03807608
mov r3, #0
ldr ip, [ip]
mov r2, #1
cmp ip, #0
beq _037FB544
_037FB50C:
str r2, [ip, #0x48]
str r3, [ip, #0x5c]
str r3, [ip, #0x60]
ldr r0, [ip, #0x64]
str r3, [ip, #0x64]
mov ip, r0
cmp ip, #0
bne _037FB50C
ldr ip, _037FB630 ; =_03807608
str r3, [ip]
str r3, [ip, #4]
ldr ip, _037FB634 ; =_038076A4
mov r1, #1
strh r1, [ip]
_037FB544:
ldr ip, _037FB634 ; =_038076A4
ldrh r1, [ip]
cmp r1, #0
beq _037FB558
b _037FB55C
_037FB558:
ldr pc, [sp], #0x4
_037FB55C:
mov r1, #0
strh r1, [ip]
mov r3, #0xd2
msr cpsr_c, r3
add r2, ip, #8
ldr r1, [r2]
_037FB574:
cmp r1, #0
bne _037FB580
b _037FB584
_037FB580:
ldrh r0, [r1, #0x48]
_037FB584:
bne _037FB58C
b _037FB590
_037FB58C:
cmp r0, #1
_037FB590:
bne _037FB598
b _037FB59C
_037FB598:
ldr r1, [r1, #0x4c]
_037FB59C:
bne _037FB574
cmp r1, #0
bne _037FB5B4
_037FB5A8:
mov r3, #0x92
msr cpsr_c, r3
ldr pc, [sp], #0x4
_037FB5B4:
ldr r0, [ip, #4]
cmp r1, r0
beq _037FB5A8
ldr r3, [ip, #0xc]
cmp r3, #0
beq _037FB5DC
stmdb sp!, {r0, r1, ip}
mov lr, pc
bx r3
_037FB5D8:
ldmia sp!, {r0, r1, ip}
_037FB5DC:
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, sb, sl, fp, ip, sp, lr} ^
stmib r0!, {lr}
mov r3, #0xd3
msr cpsr_c, r3
stmib r0!, {sp}
ldr sp, [r1, #0x44]
mov r3, #0xd2
msr cpsr_c, r3
ldr r2, [r1, #0]!
msr spsr_fc, r2
ldr lr, [r1, #0x40]
ldmib r1, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr} ^
mov r0, r0
stmda sp!, {r0, r1, r2, r3, ip, lr}
ldmia sp!, {pc}
.align 2, 0
_037FB630: .word _03807608
_037FB634: .word _038076A4
arm_func_end ReturnFromInterrupt
arm_func_start sub_037FB638
sub_037FB638: ; 0x037FB638
bx lr
arm_func_end sub_037FB638
arm_func_start AudioInterrupt
AudioInterrupt: ; 0x037FB63C
stmdb sp!, {r3, r4, r5, lr}
mov r1, #0xc
mul r5, r0, r1
ldr r2, _037FB6B4 ; =_03807610
ldr r3, _037FB6B8 ; =_038074E0
mov r4, r0, lsl #1
ldr r1, [r2, r5]
mov r0, #0
ldrh r3, [r3, r4]
mov r4, #1
str r0, [r2, r5]
cmp r1, #0
mov r4, r4, lsl r3
beq _037FB684
ldr r0, _037FB6BC ; =_03807618
ldr r0, [r0, r5]
mov lr, pc
bx r1
_037FB684:
ldr r2, _037FB6C0 ; =0x0380FFF8
ldr r0, _037FB6C4 ; =_03807614
ldr r1, [r2]
orr r1, r1, r4
str r1, [r2]
ldr r0, [r0, r5]
cmp r0, #0
bne _037FB6AC
mov r0, r4
bl ClearIeFlag
_037FB6AC:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FB6B4: .word _03807610
_037FB6B8: .word _038074E0
_037FB6BC: .word _03807618
_037FB6C0: .word 0x0380FFF8
_037FB6C4: .word _03807614
arm_func_end AudioInterrupt
arm_func_start sub_037FB6C8
sub_037FB6C8: ; 0x037FB6C8
ldr ip, _037FB6D4 ; =AudioInterrupt
mov r0, #0
bx ip
.align 2, 0
_037FB6D4: .word AudioInterrupt
arm_func_end sub_037FB6C8
arm_func_start sub_037FB6D8
sub_037FB6D8: ; 0x037FB6D8
ldr ip, _037FB6E4 ; =AudioInterrupt
mov r0, #1
bx ip
.align 2, 0
_037FB6E4: .word AudioInterrupt
arm_func_end sub_037FB6D8
arm_func_start sub_037FB6E8
sub_037FB6E8: ; 0x037FB6E8
ldr ip, _037FB6F4 ; =AudioInterrupt
mov r0, #2
bx ip
.align 2, 0
_037FB6F4: .word AudioInterrupt
arm_func_end sub_037FB6E8
arm_func_start sub_037FB6F8
sub_037FB6F8: ; 0x037FB6F8
ldr ip, _037FB704 ; =AudioInterrupt
mov r0, #3
bx ip
.align 2, 0
_037FB704: .word AudioInterrupt
arm_func_end sub_037FB6F8
arm_func_start sub_037FB708
sub_037FB708: ; 0x037FB708
ldr ip, _037FB714 ; =AudioInterrupt
mov r0, #4
bx ip
.align 2, 0
_037FB714: .word AudioInterrupt
arm_func_end sub_037FB708
arm_func_start sub_037FB718
sub_037FB718: ; 0x037FB718
ldr ip, _037FB724 ; =AudioInterrupt
mov r0, #5
bx ip
.align 2, 0
_037FB724: .word AudioInterrupt
arm_func_end sub_037FB718
arm_func_start sub_037FB728
sub_037FB728: ; 0x037FB728
ldr ip, _037FB734 ; =AudioInterrupt
mov r0, #6
bx ip
.align 2, 0
_037FB734: .word AudioInterrupt
arm_func_end sub_037FB728
arm_func_start sub_037FB738
sub_037FB738: ; 0x037FB738
ldr ip, _037FB744 ; =AudioInterrupt
mov r0, #7
bx ip
.align 2, 0
_037FB744: .word AudioInterrupt
arm_func_end sub_037FB738
arm_func_start sub_037FB748
sub_037FB748: ; 0x037FB748
stmdb sp!, {r3, lr}
ldr r2, _037FB78C ; =0x027FFC3C
ldr r0, _037FB790 ; =_03807610
ldr r1, [r2]
ldr r3, [r0, #0x60]
add r0, r1, #1
str r0, [r2]
cmp r3, #0
beq _037FB774
mov lr, pc
bx r3
_037FB774:
ldr r1, _037FB794 ; =0x0380FFF8
ldr r0, [r1]
orr r0, r0, #1
str r0, [r1]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FB78C: .word 0x027FFC3C
_037FB790: .word _03807610
_037FB794: .word 0x0380FFF8
arm_func_end sub_037FB748
arm_func_start sub_037FB798
sub_037FB798: ; 0x037FB798
ldr r0, _037FB7B4 ; =_03807608
mov r2, #0
str r2, [r0, #4]
ldr r1, _037FB7B8 ; =0x027FFC3C
str r2, [r0]
str r2, [r1]
bx lr
.align 2, 0
_037FB7B4: .word _03807608
_037FB7B8: .word 0x027FFC3C
arm_func_end sub_037FB798
arm_func_start sub_037FB7BC
sub_037FB7BC: ; 0x037FB7BC
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
ldr r4, _037FB84C ; =_038074F4
mov sb, #0
mov r2, #0xc
ldr r5, _037FB850 ; =_03807670
ldr r7, _037FB854 ; =_03807610
mov r8, sb
mov lr, sb
mov ip, #1
mov r3, r2
_037FB7E4:
tst r0, #1
beq _037FB834
mov sl, r8
cmp sb, #8
blt _037FB808
cmp sb, #0xb
suble r6, sb, #8
mlale sl, r6, r3, r7
ble _037FB82C
_037FB808:
cmp sb, #3
blt _037FB820
cmp sb, #6
addle r6, sb, #1
mlale sl, r6, r2, r7
ble _037FB82C
_037FB820:
cmp sb, #0
strne r1, [r4, sb, lsl #2]
moveq sl, r5
_037FB82C:
cmp sl, #0
stmneia sl, {r1, ip, lr}
_037FB834:
add sb, sb, #1
cmp sb, #0x19
mov r0, r0, lsr #1
blt _037FB7E4
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_037FB84C: .word _038074F4
_037FB850: .word _03807670
_037FB854: .word _03807610
arm_func_end sub_037FB7BC
arm_func_start sub_037FB858
sub_037FB858: ; 0x037FB858
stmdb sp!, {r4, lr}
mov r3, #0xc
mul r4, r0, r3
ldr ip, _037FB898 ; =_03807640
ldr r3, _037FB89C ; =_03807648
str r1, [ip, r4]
add r0, r0, #3
mov r1, #1
mov r0, r1, lsl r0
str r2, [r3, r4]
bl sub_037FB8F0
ldr r0, _037FB8A0 ; =_03807644
mov r1, #1
str r1, [r0, r4]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FB898: .word _03807640
_037FB89C: .word _03807648
_037FB8A0: .word _03807644
arm_func_end sub_037FB858
arm_func_start sub_037FB8A4
sub_037FB8A4: ; 0x037FB8A4
stmdb sp!, {r4, lr}
mov r4, r0
bl ClearImeFlag
ldr r1, _037FB8D4 ; =0x04000210
ldr r3, [r1]
sub r2, r1, #8
str r4, [r1]
ldrh r1, [r2]
strh r0, [r2]
mov r0, r3
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FB8D4: .word 0x04000210
arm_func_end sub_037FB8A4
arm_func_start ClearImeFlag
ClearImeFlag: ; 0x037FB8D8
ldr r2, _037FB8EC ; =0x04000208
mov r1, #0
ldrh r0, [r2]
strh r1, [r2]
bx lr
.align 2, 0
_037FB8EC: .word 0x04000208
arm_func_end ClearImeFlag
arm_func_start sub_037FB8F0
sub_037FB8F0: ; 0x037FB8F0
stmdb sp!, {r4, lr}
mov r4, r0
bl ClearImeFlag
ldr ip, _037FB924 ; =0x04000210
ldr r3, [ip]
sub r2, ip, #8
orr r1, r3, r4
str r1, [ip]
ldrh r1, [r2]
strh r0, [r2]
mov r0, r3
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FB924: .word 0x04000210
arm_func_end sub_037FB8F0
arm_func_start ClearIeFlag
ClearIeFlag: ; 0x037FB928
stmdb sp!, {r4, lr}
mov r4, r0
bl ClearImeFlag
ldr ip, _037FB960 ; =0x04000210
mvn r1, r4
ldr r3, [ip]
sub r2, ip, #8
and r1, r3, r1
str r1, [ip]
ldrh r1, [r2]
strh r0, [r2]
mov r0, r3
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FB960: .word 0x04000210
arm_func_end ClearIeFlag
arm_func_start sub_037FB964
sub_037FB964: ; 0x037FB964
stmdb sp!, {r4, lr}
mov r4, r0
bl ClearImeFlag
ldr r1, _037FB994 ; =0x04000214
ldr r3, [r1]
sub r2, r1, #0xc
str r4, [r1]
ldrh r1, [r2]
strh r0, [r2]
mov r0, r3
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FB994: .word 0x04000214
arm_func_end sub_037FB964
arm_func_start sub_037FB998
sub_037FB998: ; 0x037FB998
stmdb sp!, {r3, r4, r5, lr}
ldr r0, _037FBA00 ; =_0380767C
ldr r1, [r0]
cmp r1, #0
bne _037FB9F8
ldr r4, _037FBA04 ; =0x027FFFF0
mov r2, #1
mov r1, #0
str r2, [r0]
strh r1, [r4, #6]
mov r5, #0x400
b _037FB9D0
_037FB9C8:
mov r0, r5
bl sub_037FBA0C
_037FB9D0:
ldrh r0, [r4, #4]
cmp r0, #0x7f
bne _037FB9C8
ldr r1, _037FBA08 ; =0x027FFFB8
mvn r0, #0
str r0, [r1]
mov r0, r0, lsl #0x10
str r0, [r1, #4]
mov r0, #0xbf
strh r0, [r4, #6]
_037FB9F8:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FBA00: .word _0380767C
_037FBA04: .word 0x027FFFF0
_037FBA08: .word 0x027FFFB8
arm_func_end sub_037FB998
arm_func_start sub_037FBA0C
sub_037FBA0C: ; 0x037FBA0C
ldr ip, _037FBA14 ; =sub_038037B8
bx ip
.align 2, 0
_037FBA14: .word sub_038037B8 + 1
arm_func_end sub_037FBA0C
arm_func_start sub_037FBA18
sub_037FBA18: ; 0x037FBA18
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r1
ldrh r1, [r7, #4]
mov r6, r2
cmp r0, r1
mov r5, r3
mvnne r0, #1
bne _037FBA8C
cmp r5, #0
beq _037FBA48
bl EnableIrqFiqFlags
b _037FBA4C
_037FBA48:
bl EnableIrqFlag
_037FBA4C:
mov r4, r0
mov r0, #0
strh r0, [r7, #4]
cmp r6, #0
beq _037FBA68
mov lr, pc
bx r6
_037FBA68:
mov r0, #0
str r0, [r7]
cmp r5, #0
mov r0, r4
beq _037FBA84
bl SetIrqFiqFlags
b _037FBA88
_037FBA84:
bl SetIrqFlag
_037FBA88:
mov r0, #0
_037FBA8C:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_037FBA18
arm_func_start sub_037FBA94
sub_037FBA94: ; 0x037FBA94
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
movs r6, r3
mov sb, r0
mov r8, r1
mov r7, r2
beq _037FBAB4
bl EnableIrqFiqFlags
b _037FBAB8
_037FBAB4:
bl EnableIrqFlag
_037FBAB8:
mov r5, r0
mov r0, sb
mov r1, r8
bl sub_037FE2AC
movs r4, r0
bne _037FBAE4
cmp r7, #0
beq _037FBAE0
mov lr, pc
bx r7
_037FBAE0:
strh sb, [r8, #4]
_037FBAE4:
cmp r6, #0
mov r0, r5
beq _037FBAF8
bl SetIrqFiqFlags
b _037FBAFC
_037FBAF8:
bl SetIrqFlag
_037FBAFC:
mov r0, r4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
arm_func_end sub_037FBA94
arm_func_start sub_037FBB08
sub_037FBB08: ; 0x037FBB08
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r6, _037FBB50 ; =0x027FFFE8
ldr r5, _037FBB54 ; =sub_037FBBA4
mov r8, r0
mov r7, #0x400
mov r4, #1
b _037FBB2C
_037FBB24:
mov r0, r7
bl sub_037FBA0C
_037FBB2C:
mov r0, r8
mov r1, r6
mov r2, r5
mov r3, r4
bl sub_037FBA94
cmp r0, #0
bgt _037FBB24
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FBB50: .word 0x027FFFE8
_037FBB54: .word sub_037FBBA4
arm_func_end sub_037FBB08
arm_func_start sub_037FBB58
sub_037FBB58: ; 0x037FBB58
ldr ip, _037FBB6C ; =sub_037FBA18
ldr r1, _037FBB70 ; =0x027FFFE8
ldr r2, _037FBB74 ; =sub_037FBBA8
mov r3, #1
bx ip
.align 2, 0
_037FBB6C: .word sub_037FBA18
_037FBB70: .word 0x027FFFE8
_037FBB74: .word sub_037FBBA8
arm_func_end sub_037FBB58
arm_func_start sub_037FBB78
sub_037FBB78: ; 0x037FBB78
ldr r1, _037FBB80 ; =sub_037FBB58
bx r1
.align 2, 0
_037FBB80: .word sub_037FBB58
arm_func_end sub_037FBB78
arm_func_start sub_037FBB84
sub_037FBB84: ; 0x037FBB84
ldr ip, _037FBB98 ; =sub_037FBA94
ldr r1, _037FBB9C ; =0x027FFFE8
ldr r2, _037FBBA0 ; =sub_037FBBA4
mov r3, #1
bx ip
.align 2, 0
_037FBB98: .word sub_037FBA94
_037FBB9C: .word 0x027FFFE8
_037FBBA0: .word sub_037FBBA4
arm_func_end sub_037FBB84
arm_func_start sub_037FBBA4
sub_037FBBA4: ; 0x037FBBA4
bx lr
arm_func_end sub_037FBBA4
arm_func_start sub_037FBBA8
sub_037FBBA8: ; 0x037FBBA8
bx lr
arm_func_end sub_037FBBA8
arm_func_start sub_037FBBAC
sub_037FBBAC: ; 0x037FBBAC
ldr ip, _037FBBC0 ; =sub_037FBA18
ldr r1, _037FBBC4 ; =0x027FFFE0
ldr r2, _037FBBC8 ; =sub_037FBBF0
mov r3, #0
bx ip
.align 2, 0
_037FBBC0: .word sub_037FBA18
_037FBBC4: .word 0x027FFFE0
_037FBBC8: .word sub_037FBBF0
arm_func_end sub_037FBBAC
arm_func_start sub_037FBBCC
sub_037FBBCC: ; 0x037FBBCC
ldr ip, _037FBBE0 ; =sub_037FBA94
ldr r1, _037FBBE4 ; =0x027FFFE0
ldr r2, _037FBBE8 ; =sub_037FBBEC
mov r3, #0
bx ip
.align 2, 0
_037FBBE0: .word sub_037FBA94
_037FBBE4: .word 0x027FFFE0
_037FBBE8: .word sub_037FBBEC
arm_func_end sub_037FBBCC
arm_func_start sub_037FBBEC
sub_037FBBEC: ; 0x037FBBEC
bx lr
arm_func_end sub_037FBBEC
arm_func_start sub_037FBBF0
sub_037FBBF0: ; 0x037FBBF0
bx lr
arm_func_end sub_037FBBF0
arm_func_start sub_037FBBF4
sub_037FBBF4: ; 0x037FBBF4
ldrh r0, [r0, #4]
bx lr
arm_func_end sub_037FBBF4
arm_func_start sub_037FBBFC
sub_037FBBFC: ; 0x037FBBFC
ldr r3, _037FBC9C ; =0x027FFFB8
ldr r1, [r3]
mov r2, #0
mov r0, #0x80000000
_037FBC0C:
tst r1, r0
bne _037FBC28
add r2, r2, #1
cmp r2, #0x20
beq _037FBC28
mov r0, r0, lsr #1
b _037FBC0C
_037FBC28:
cmp r2, #0x20
bne _037FBC34
b _037FBC38
_037FBC34:
mov r0, #0x80
_037FBC38:
bne _037FBC80
add r3, r3, #4
ldr r1, [r3]
mov r2, #0
mov r0, #0x80000000
_037FBC4C:
tst r1, r0
bne _037FBC68
add r2, r2, #1
cmp r2, #0x20
beq _037FBC68
mov r0, r0, lsr #1
b _037FBC4C
_037FBC68:
cmp r2, #0x20
ldr r0, _037FBCA0 ; =0xFFFFFFFD
beq _037FBC78
b _037FBC7C
_037FBC78:
bx lr
_037FBC7C:
mov r0, #0xa0
_037FBC80:
add r0, r0, r2
mov r1, #0x80000000
mov r1, r1, lsr r2
ldr r2, [r3]
bic r2, r2, r1
str r2, [r3]
bx lr
.align 2, 0
_037FBC9C: .word 0x027FFFB8
_037FBCA0: .word 0xFFFFFFFD
arm_func_end sub_037FBBFC
arm_func_start sub_037FBCA4
sub_037FBCA4: ; 0x037FBCA4
ldr r3, _037FBCE8 ; =0x027FFFB8
cmp r0, #0xa0
bpl _037FBCB4
b _037FBCB8
_037FBCB4:
add r3, r3, #4
_037FBCB8:
bpl _037FBCC0
b _037FBCC4
_037FBCC0:
sub r0, r0, #0xa0
_037FBCC4:
bmi _037FBCCC
b _037FBCD0
_037FBCCC:
sub r0, r0, #0x80
_037FBCD0:
mov r1, #0x80000000
mov r1, r1, lsr r0
ldr r2, [r3]
orr r2, r2, r1
str r2, [r3]
bx lr
.align 2, 0
_037FBCE8: .word 0x027FFFB8
arm_func_end sub_037FBCA4
arm_func_start sub_037FBCEC
sub_037FBCEC: ; 0x037FBCEC
ldr ip, [r0]
b _037FBD00
_037FBCF4:
cmp ip, r1
bxeq lr
ldr ip, [ip, #0x64]
_037FBD00:
cmp ip, #0
beq _037FBD18
ldr r3, [ip, #0x54]
ldr r2, [r1, #0x54]
cmp r3, r2
bls _037FBCF4
_037FBD18:
cmp ip, #0
bne _037FBD44
ldr r2, [r0, #4]
cmp r2, #0
streq r1, [r0]
strne r1, [r2, #0x64]
str r2, [r1, #0x60]
mov r2, #0
str r2, [r1, #0x64]
str r1, [r0, #4]
bx lr
_037FBD44:
ldr r2, [ip, #0x60]
cmp r2, #0
streq r1, [r0]
strne r1, [r2, #0x64]
str r2, [r1, #0x60]
str ip, [r1, #0x64]
str r1, [ip, #0x60]
bx lr
arm_func_end sub_037FBCEC
arm_func_start sub_037FBD64
sub_037FBD64: ; 0x037FBD64
stmdb sp!, {r3, lr}
ldr lr, [r0]
mov r2, lr
b _037FBDA8
_037FBD74:
ldr r3, [r2, #0x64]
cmp r2, r1
bne _037FBDA4
ldr ip, [r2, #0x60]
cmp lr, r2
streq r3, [r0]
strne r3, [ip, #0x64]
ldr r1, [r0, #4]
cmp r1, r2
streq ip, [r0, #4]
strne ip, [r3, #0x60]
b _037FBDB0
_037FBDA4:
mov r2, r3
_037FBDA8:
cmp r2, #0
bne _037FBD74
_037FBDB0:
mov r0, r2
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_037FBD64
arm_func_start sub_037FBDBC
sub_037FBDBC: ; 0x037FBDBC
ldr r2, [r0]
cmp r2, #0
beq _037FBDE4
ldr r1, [r2, #0x10]
str r1, [r0]
cmp r1, #0
movne r0, #0
strne r0, [r1, #0x14]
moveq r1, #0
streq r1, [r0, #4]
_037FBDE4:
mov r0, r2
bx lr
arm_func_end sub_037FBDBC
arm_func_start sub_037FBDEC
sub_037FBDEC: ; 0x037FBDEC
stmdb sp!, {r3, lr}
ldr r1, _037FBE48 ; =_03807680
mov ip, #0
ldr lr, [r1, #0x2c]
mov r3, lr
b _037FBE0C
_037FBE04:
mov ip, r3
ldr r3, [r3, #0x4c]
_037FBE0C:
cmp r3, #0
beq _037FBE24
ldr r2, [r3, #0x54]
ldr r1, [r0, #0x54]
cmp r2, r1
blo _037FBE04
_037FBE24:
cmp ip, #0
ldreq r1, _037FBE48 ; =_03807680
streq lr, [r0, #0x4c]
streq r0, [r1, #0x2c]
ldrne r1, [ip, #0x4c]
strne r1, [r0, #0x4c]
strne r0, [ip, #0x4c]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FBE48: .word _03807680
arm_func_end sub_037FBDEC
arm_func_start sub_037FBE4C
sub_037FBE4C: ; 0x037FBE4C
ldr r1, _037FBE8C ; =_03807680
mov r2, #0
ldr r1, [r1, #0x2c]
b _037FBE64
_037FBE5C:
mov r2, r1
ldr r1, [r1, #0x4c]
_037FBE64:
cmp r1, #0
cmpne r1, r0
bne _037FBE5C
cmp r2, #0
ldreq r1, [r0, #0x4c]
ldreq r0, _037FBE8C ; =_03807680
streq r1, [r0, #0x2c]
ldrne r0, [r0, #0x4c]
strne r0, [r2, #0x4c]
bx lr
.align 2, 0
_037FBE8C: .word _03807680
arm_func_end sub_037FBE4C
arm_func_start sub_037FBE90
sub_037FBE90: ; 0x037FBE90
stmdb sp!, {r4, r5, r6, lr}
ldr r0, _037FBF5C ; =_03807680
ldr r1, [r0, #4]
cmp r1, #0
bne _037FBF54
ldrh r0, [r0, #0x26]
ldr r4, _037FBF60 ; =_038076A4
cmp r0, #0
bne _037FBEC0
bl GetProcessorMode
cmp r0, #0x12
bne _037FBECC
_037FBEC0:
mov r0, #1
strh r0, [r4]
b _037FBF54
_037FBECC:
ldr r0, _037FBF5C ; =_03807680
ldr r0, [r0, #8]
ldr r6, [r0]
bl sub_037FC398
mov r5, r0
cmp r6, r5
cmpne r5, #0
beq _037FBF54
ldr r0, [r6, #0x48]
cmp r0, #2
beq _037FBF08
mov r0, r6
bl sub_037FC64C
cmp r0, #0
bne _037FBF54
_037FBF08:
ldr r0, _037FBF5C ; =_03807680
ldr r2, [r0]
cmp r2, #0
beq _037FBF28
mov r0, r6
mov r1, r5
mov lr, pc
bx r2
_037FBF28:
ldr r2, [r4, #0xc]
cmp r2, #0
beq _037FBF44
mov r0, r6
mov r1, r5
mov lr, pc
bx r2
_037FBF44:
ldr r1, _037FBF5C ; =_03807680
mov r0, r5
str r5, [r1, #0x28]
bl sub_037FC680
_037FBF54:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037FBF5C: .word _03807680
_037FBF60: .word _038076A4
arm_func_end sub_037FBE90
arm_func_start sub_037FBF64
sub_037FBF64: ; 0x037FBF64
stmdb sp!, {r3, lr}
ldr r0, _037FC028 ; =_03807680
ldr r1, [r0, #0xc]
cmp r1, #0
bne _037FC020
ldr r1, _037FC02C ; =_038076A8
mov r2, #1
str r2, [r0, #0xc]
str r1, [r0, #8]
mov r1, #0x10
str r1, [r0, #0x12c]
mov r3, #0
str r3, [r0, #0x128]
str r2, [r0, #0x120]
str r3, [r0, #0x124]
ldr r2, _037FC030 ; =0x00000400
ldr r1, _037FC034 ; =_03807758
str r3, [r0, #0x130]
str r1, [r0, #0x2c]
str r1, [r0, #0x28]
cmp r2, #0
ldrle r0, _037FC038 ; =NitroSpMain
ldrgt r1, _037FC03C ; =0x00000400
ldrgt r0, _037FC040 ; =0x0380FF80
subgt r0, r0, r1
sub ip, r0, r2
ldr r2, _037FC03C ; =0x00000400
ldr r0, _037FC040 ; =0x0380FF80
ldr r1, _037FC028 ; =_03807680
sub r3, r0, r2
str r3, [r1, #0x150]
str ip, [r1, #0x14c]
mov r0, #0
ldr r2, _037FC044 ; =0xD73BFDF7
str r0, [r1, #0x154]
str r2, [r3, #-4]
ldr r2, [r1, #0x14c]
ldr ip, _037FC048 ; =0xFBDD37BB
ldr r3, _037FC04C ; =_038076A4
str ip, [r2]
str r0, [r1, #0x15c]
str r0, [r1, #0x158]
strh r0, [r1, #0x24]
ldr r2, _037FC050 ; =0x027FFFA4
strh r0, [r1, #0x26]
str r3, [r2]
bl sub_037FC52C
_037FC020:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FC028: .word _03807680
_037FC02C: .word _038076A8
_037FC030: .word 0x00000400
_037FC034: .word _03807758
_037FC038: .word NitroSpMain
_037FC03C: .word 0x00000400
_037FC040: .word 0x0380FF80
_037FC044: .word 0xD73BFDF7
_037FC048: .word 0xFBDD37BB
_037FC04C: .word _038076A4
_037FC050: .word 0x027FFFA4
arm_func_end sub_037FBF64
arm_func_start sub_037FC054
sub_037FC054: ; 0x037FC054
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r0
mov r5, r1
mov r7, r2
mov r6, r3
bl EnableIrqFlag
ldr r1, _037FC14C ; =_03807680
ldr r2, [sp, #0x1c]
ldr r3, [r1, #0x20]
mov r4, r0
add r0, r3, #1
str r0, [r1, #0x20]
str r2, [r8, #0x54]
str r0, [r8, #0x50]
mov r1, #0
str r1, [r8, #0x48]
mov r0, r8
str r1, [r8, #0x58]
bl sub_037FBDEC
ldr r0, [sp, #0x18]
mov r1, r5
str r6, [r8, #0x78]
sub r5, r6, r0
sub r2, r6, #4
str r5, [r8, #0x74]
mov ip, #0
str ip, [r8, #0x7c]
ldr r6, _037FC150 ; =0xD73BFDF7
ldr r0, [r8, #0x78]
ldr r3, _037FC154 ; =0xFBDD37BB
str r6, [r0, #-4]
ldr r0, [r8, #0x74]
str r3, [r0]
str ip, [r8, #0x84]
mov r0, r8
str ip, [r8, #0x80]
bl sub_037FC5C8
ldr r2, _037FC158 ; =sub_037FC15C
str r7, [r8, #4]
str r2, [r8, #0x3c]
ldr r2, [sp, #0x18]
add r1, r5, #4
mov r0, #0
sub r2, r2, #8
bl sub_037FDFD0
mov r0, #0
str r0, [r8, #0x68]
str r0, [r8, #0x6c]
str r0, [r8, #0x70]
str r0, [r8, #0x98]
str r0, [r8, #0x5c]
str r0, [r8, #0x64]
str r0, [r8, #0x60]
add r1, r8, #0x88
mov r2, #0xc
bl sub_037FDFD0
mov r1, #0
mov r0, r4
str r1, [r8, #0x94]
bl SetIrqFlag
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FC14C: .word _03807680
_037FC150: .word 0xD73BFDF7
_037FC154: .word 0xFBDD37BB
_037FC158: .word sub_037FC15C
arm_func_end sub_037FC054
arm_func_start sub_037FC15C
sub_037FC15C: ; 0x037FC15C
stmdb sp!, {r3, lr}
bl EnableIrqFlag
ldr r0, _037FC17C ; =_03807680
mov r1, #0
ldr r0, [r0, #0x28]
bl sub_037FC180
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FC17C: .word _03807680
arm_func_end sub_037FC15C
arm_func_start sub_037FC180
sub_037FC180: ; 0x037FC180
stmdb sp!, {r3, r4, r5, lr}
ldr r2, _037FC1D8 ; =_03807680
mov r5, r0
ldr r2, [r2, #0x1c]
mov r4, r1
cmp r2, #0
beq _037FC1C8
ldr r1, _037FC1DC ; =sub_037FC1E0
bl sub_037FC5C8
str r4, [r5, #4]
ldr r1, [r5]
mov r0, r5
orr r1, r1, #0x80
str r1, [r5]
mov r1, #1
str r1, [r5, #0x48]
bl sub_037FC680
b _037FC1D0
_037FC1C8:
mov r0, r4
bl sub_037FC1E0
_037FC1D0:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FC1D8: .word _03807680
_037FC1DC: .word sub_037FC1E0
arm_func_end sub_037FC180
arm_func_start sub_037FC1E0
sub_037FC1E0: ; 0x037FC1E0
stmdb sp!, {r3, lr}
ldr r1, _037FC21C ; =_03807680
ldr r1, [r1, #8]
ldr r3, [r1]
ldr r2, [r3, #0x98]
cmp r2, #0
beq _037FC210
mov r1, #0
str r1, [r3, #0x98]
mov lr, pc
bx r2
_037FC20C:
bl EnableIrqFlag
_037FC210:
bl sub_037FC220
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FC21C: .word _03807680
arm_func_end sub_037FC1E0
arm_func_start sub_037FC220
sub_037FC220: ; 0x037FC220
stmdb sp!, {r4, lr}
ldr r0, _037FC28C ; =_03807680
ldr r0, [r0, #8]
ldr r4, [r0]
bl sub_037FC558
mov r0, r4
bl sub_037FC96C
ldr r0, [r4, #0x5c]
cmp r0, #0
beq _037FC250
mov r1, r4
bl sub_037FBD64
_037FC250:
mov r0, r4
bl sub_037FBE4C
mov r1, #2
add r0, r4, #0x80
str r1, [r4, #0x48]
bl sub_037FC2E4
bl sub_037FC590
bl EnableIrqFlag
mov r4, r0
bl sub_037FBE90
mov r0, r4
bl SetIrqFlag
bl sub_037FDE70
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FC28C: .word _03807680
arm_func_end sub_037FC220
arm_func_start sub_037FC290
sub_037FC290: ; 0x037FC290
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
bl EnableIrqFlag
ldr r1, _037FC2E0 ; =_03807680
mov r4, r0
ldr r0, [r1, #8]
cmp r6, #0
ldr r5, [r0]
beq _037FC2C4
mov r0, r6
mov r1, r5
str r6, [r5, #0x5c]
bl sub_037FBCEC
_037FC2C4:
mov r0, #0
str r0, [r5, #0x48]
bl sub_037FBE90
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037FC2E0: .word _03807680
arm_func_end sub_037FC290
arm_func_start sub_037FC2E4
sub_037FC2E4: ; 0x037FC2E4
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl EnableIrqFlag
ldr r1, [r5]
mov r4, r0
cmp r1, #0
beq _037FC35C
mov r2, #0
mov r3, r2
mov r1, #1
mov r0, r2
b _037FC340
_037FC314:
beq _037FC330
ldr ip, [lr, #0x64]
str ip, [r5]
cmp ip, #0
strne r3, [ip, #0x60]
streq r2, [r5, #4]
streq r2, [lr, #0x5c]
_037FC330:
str r1, [lr, #0x48]
str r0, [lr, #0x5c]
str r0, [lr, #0x64]
str r0, [lr, #0x60]
_037FC340:
ldr lr, [r5]
cmp lr, #0
bne _037FC314
mov r0, #0
str r0, [r5, #4]
str r0, [r5]
bl sub_037FBE90
_037FC35C:
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_037FC2E4
arm_func_start sub_037FC36C
sub_037FC36C: ; 0x037FC36C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl EnableIrqFlag
mov r1, #1
mov r4, r0
str r1, [r5, #0x48]
bl sub_037FBE90
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_037FC36C
arm_func_start sub_037FC398
sub_037FC398: ; 0x037FC398
ldr r0, _037FC3BC ; =_03807680
ldr r0, [r0, #0x2c]
b _037FC3A8
_037FC3A4:
ldr r0, [r0, #0x4c]
_037FC3A8:
cmp r0, #0
ldrne r1, [r0, #0x48]
cmpne r1, #1
bne _037FC3A4
bx lr
.align 2, 0
_037FC3BC: .word _03807680
arm_func_end sub_037FC398
arm_func_start sub_037FC3C0
sub_037FC3C0: ; 0x037FC3C0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r2, _037FC460 ; =_03807680
mov r7, r0
ldr r8, [r2, #0x2c]
mov r6, r1
mov r4, #0
bl EnableIrqFlag
mov r5, r0
b _037FC3EC
_037FC3E4:
mov r4, r8
ldr r8, [r8, #0x4c]
_037FC3EC:
cmp r8, #0
cmpne r8, r7
bne _037FC3E4
cmp r8, #0
ldrne r0, _037FC464 ; =_038076B4
cmpne r8, r0
bne _037FC418
mov r0, r5
bl SetIrqFlag
mov r0, #0
b _037FC458
_037FC418:
ldr r0, [r8, #0x54]
cmp r0, r6
beq _037FC44C
cmp r4, #0
ldreq r1, [r7, #0x4c]
ldreq r0, _037FC460 ; =_03807680
streq r1, [r0, #0x2c]
ldrne r0, [r7, #0x4c]
strne r0, [r4, #0x4c]
mov r0, r7
str r6, [r7, #0x54]
bl sub_037FBDEC
bl sub_037FBE90
_037FC44C:
mov r0, r5
bl SetIrqFlag
mov r0, #1
_037FC458:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FC460: .word _03807680
_037FC464: .word _038076B4
arm_func_end sub_037FC3C0
arm_func_start sub_037FC468
sub_037FC468: ; 0x037FC468
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0x34
mov r4, r0
add r0, sp, #8
bl sub_037FD3A0
ldr r0, _037FC500 ; =_03807680
ldr r0, [r0, #8]
ldr r0, [r0]
str r0, [sp, #4]
bl EnableIrqFlag
ldr r1, _037FC504 ; =0x000082EA
mov r2, #0
umull ip, r3, r4, r1
mla r3, r4, r2, r3
mla r3, r2, r1, r3
mov r5, r0
mov r1, ip, lsr #6
ldr r4, [sp, #4]
add r0, sp, #8
str r0, [r4, #0x94]
add r2, sp, #4
str r2, [sp]
mov r2, r3, lsr #6
orr r1, r1, r3, lsl #26
ldr r3, _037FC508 ; =sub_037FC50C
bl sub_037FD4DC
mov r4, #0
b _037FC4E0
_037FC4D8:
mov r0, r4
bl sub_037FC290
_037FC4E0:
ldr r0, [sp, #4]
cmp r0, #0
bne _037FC4D8
mov r0, r5
bl SetIrqFlag
add sp, sp, #0x34
ldmia sp!, {r4, r5, lr}
bx lr
.align 2, 0
_037FC500: .word _03807680
_037FC504: .word 0x000082EA
_037FC508: .word sub_037FC50C
arm_func_end sub_037FC468
arm_func_start sub_037FC50C
sub_037FC50C: ; 0x037FC50C
ldr r2, [r0]
mov r1, #0
str r1, [r0]
ldr ip, _037FC528 ; =sub_037FC36C
mov r0, r2
str r1, [r2, #0x94]
bx ip
.align 2, 0
_037FC528: .word sub_037FC36C
arm_func_end sub_037FC50C
arm_func_start sub_037FC52C
sub_037FC52C: ; 0x037FC52C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl EnableIrqFlag
ldr r1, _037FC554 ; =_03807680
ldr r4, [r1, #0x30]
str r5, [r1, #0x30]
bl SetIrqFlag
mov r0, r4
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FC554: .word _03807680
arm_func_end sub_037FC52C
arm_func_start sub_037FC558
sub_037FC558: ; 0x037FC558
stmdb sp!, {r4, lr}
bl EnableIrqFlag
ldr r2, _037FC58C ; =_03807680
mvn r1, #0
ldr r3, [r2, #4]
cmp r3, r1
addlo r1, r3, #1
strlo r1, [r2, #4]
movlo r4, r3
bl SetIrqFlag
mov r0, r4
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FC58C: .word _03807680
arm_func_end sub_037FC558
arm_func_start sub_037FC590
sub_037FC590: ; 0x037FC590
stmdb sp!, {r4, lr}
bl EnableIrqFlag
ldr r1, _037FC5C4 ; =_03807680
mov r4, #0
ldr r3, [r1, #4]
cmp r3, #0
subne r2, r3, #1
strne r2, [r1, #4]
movne r4, r3
bl SetIrqFlag
mov r0, r4
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FC5C4: .word _03807680
arm_func_end sub_037FC590
arm_func_start sub_037FC5C8
sub_037FC5C8: ; 0x037FC5C8
add r1, r1, #4
str r1, [r0, #0x40]
str r2, [r0, #0x44]
sub r2, r2, #0x40
tst r2, #4
bne _037FC5E4
b _037FC5E8
_037FC5E4:
sub r2, r2, #4
_037FC5E8:
str r2, [r0, #0x38]
ands r1, r1, #1
bne _037FC5F8
b _037FC5FC
_037FC5F8:
mov r1, #0x3f
_037FC5FC:
beq _037FC604
b _037FC608
_037FC604:
mov r1, #0x1f
_037FC608:
str r1, [r0]
mov r1, #0
str r1, [r0, #4]
str r1, [r0, #8]
str r1, [r0, #0xc]
str r1, [r0, #0x10]
str r1, [r0, #0x14]
str r1, [r0, #0x18]
str r1, [r0, #0x1c]
str r1, [r0, #0x20]
str r1, [r0, #0x24]
str r1, [r0, #0x28]
str r1, [r0, #0x2c]
str r1, [r0, #0x30]
str r1, [r0, #0x34]
str r1, [r0, #0x3c]
bx lr
arm_func_end sub_037FC5C8
arm_func_start sub_037FC64C
sub_037FC64C: ; 0x037FC64C
add r1, r0, #0
mrs r2, cpsr
str r2, [r1], #4
mov r0, #0xd3
msr cpsr_c, r0
str sp, [r1, #0x40]
msr cpsr_c, r2
mov r0, #1
stmia r1, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr}
add r0, pc, #0x8 ; =sub_037FC680
str r0, [r1, #0x3c]
mov r0, #0
bx lr
arm_func_end sub_037FC64C
arm_func_start sub_037FC680
sub_037FC680: ; 0x037FC680
mrs r1, cpsr
bic r1, r1, #0x1f
orr r1, r1, #0xd3
msr cpsr_c, r1
ldr r1, [r0], #4
msr spsr_fsxc, r1
ldr sp, [r0, #0x40]
ldr lr, [r0, #0x3c]
ldmia r0, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, fp, ip, sp, lr} ^
mov r0, r0
subs pc, lr, #4
arm_func_end sub_037FC680
arm_func_start sub_037FC6AC
sub_037FC6AC: ; 0x037FC6AC
mov r3, #0
str r3, [r0, #4]
str r3, [r0]
str r3, [r0, #0xc]
str r3, [r0, #8]
str r1, [r0, #0x10]
str r2, [r0, #0x14]
str r3, [r0, #0x18]
str r3, [r0, #0x1c]
bx lr
arm_func_end sub_037FC6AC
arm_func_start sub_037FC6D4
sub_037FC6D4: ; 0x037FC6D4
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r2
mov r6, r0
mov r5, r1
bl EnableIrqFlag
mov r4, r0
and r7, r7, #1
b _037FC714
_037FC6F4:
cmp r7, #0
bne _037FC70C
mov r0, r4
bl SetIrqFlag
mov r0, #0
b _037FC758
_037FC70C:
mov r0, r6
bl sub_037FC290
_037FC714:
ldr r2, [r6, #0x1c]
ldr r1, [r6, #0x14]
cmp r1, r2
ble _037FC6F4
ldr r0, [r6, #0x18]
add r0, r0, r2
bl _s32_div_f
ldr r2, [r6, #0x10]
add r0, r6, #8
str r5, [r2, r1, lsl #2]
ldr r1, [r6, #0x1c]
add r1, r1, #1
str r1, [r6, #0x1c]
bl sub_037FC2E4
mov r0, r4
bl SetIrqFlag
mov r0, #1
_037FC758:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_037FC6D4
arm_func_start sub_037FC760
sub_037FC760: ; 0x037FC760
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r2
mov r6, r0
mov r5, r1
bl EnableIrqFlag
mov r4, r0
and r7, r7, #1
b _037FC7A0
_037FC780:
cmp r7, #0
bne _037FC798
mov r0, r4
bl SetIrqFlag
mov r0, #0
b _037FC7F4
_037FC798:
add r0, r6, #8
bl sub_037FC290
_037FC7A0:
ldr r0, [r6, #0x1c]
cmp r0, #0
beq _037FC780
cmp r5, #0
ldrne r1, [r6, #0x10]
ldrne r0, [r6, #0x18]
ldrne r0, [r1, r0, lsl #2]
strne r0, [r5]
ldr r0, [r6, #0x18]
ldr r1, [r6, #0x14]
add r0, r0, #1
bl _s32_div_f
str r1, [r6, #0x18]
ldr r1, [r6, #0x1c]
mov r0, r6
sub r1, r1, #1
str r1, [r6, #0x1c]
bl sub_037FC2E4
mov r0, r4
bl SetIrqFlag
mov r0, #1
_037FC7F4:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_037FC760
arm_func_start sub_037FC7FC
sub_037FC7FC: ; 0x037FC7FC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r6, r2
mov r7, r0
mov r4, r1
bl EnableIrqFlag
mov r5, r0
and r6, r6, #1
b _037FC83C
_037FC81C:
cmp r6, #0
bne _037FC834
mov r0, r5
bl SetIrqFlag
mov r0, #0
b _037FC868
_037FC834:
add r0, r7, #8
bl sub_037FC290
_037FC83C:
ldr r0, [r7, #0x1c]
cmp r0, #0
beq _037FC81C
cmp r4, #0
ldrne r1, [r7, #0x10]
ldrne r0, [r7, #0x18]
ldrne r0, [r1, r0, lsl #2]
strne r0, [r4]
mov r0, r5
bl SetIrqFlag
mov r0, #1
_037FC868:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_037FC7FC
arm_func_start sub_037FC870
sub_037FC870: ; 0x037FC870
mov r1, #0
str r1, [r0, #4]
str r1, [r0]
str r1, [r0, #8]
str r1, [r0, #0xc]
bx lr
arm_func_end sub_037FC870
arm_func_start sub_037FC888
sub_037FC888: ; 0x037FC888
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r5, r0
bl EnableIrqFlag
ldr r1, _037FC908 ; =_038076A4
mov r4, r0
ldr r7, [r1, #4]
mov r6, #0
_037FC8A4:
ldr r0, [r5, #8]
cmp r0, #0
bne _037FC8D0
str r7, [r5, #8]
ldr r1, [r5, #0xc]
mov r0, r7
add r2, r1, #1
mov r1, r5
str r2, [r5, #0xc]
bl sub_037FC9A4
b _037FC8F8
_037FC8D0:
cmp r0, r7
ldreq r0, [r5, #0xc]
addeq r0, r0, #1
streq r0, [r5, #0xc]
beq _037FC8F8
str r5, [r7, #0x68]
mov r0, r5
bl sub_037FC290
str r6, [r7, #0x68]
b _037FC8A4
_037FC8F8:
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FC908: .word _038076A4
arm_func_end sub_037FC888
arm_func_start sub_037FC90C
sub_037FC90C: ; 0x037FC90C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl EnableIrqFlag
ldr r1, _037FC968 ; =_038076A4
mov r4, r0
ldr r0, [r1, #4]
ldr r1, [r5, #8]
cmp r1, r0
bne _037FC958
ldr r1, [r5, #0xc]
subs r1, r1, #1
str r1, [r5, #0xc]
bne _037FC958
mov r1, r5
bl sub_037FC9C8
mov r1, #0
mov r0, r5
str r1, [r5, #8]
bl sub_037FC2E4
_037FC958:
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FC968: .word _038076A4
arm_func_end sub_037FC90C
arm_func_start sub_037FC96C
sub_037FC96C: ; 0x037FC96C
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, #0
b _037FC990
_037FC97C:
add r0, r5, #0x6c
bl sub_037FBDBC
str r4, [r0, #0xc]
str r4, [r0, #8]
bl sub_037FC2E4
_037FC990:
ldr r0, [r5, #0x6c]
cmp r0, #0
bne _037FC97C
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_037FC96C
arm_func_start sub_037FC9A4
sub_037FC9A4: ; 0x037FC9A4
ldr r2, [r0, #0x70]
cmp r2, #0
streq r1, [r0, #0x6c]
strne r1, [r2, #0x10]
str r2, [r1, #0x14]
mov r2, #0
str r2, [r1, #0x10]
str r1, [r0, #0x70]
bx lr
arm_func_end sub_037FC9A4
arm_func_start sub_037FC9C8
sub_037FC9C8: ; 0x037FC9C8
ldr r2, [r1, #0x10]
ldr r1, [r1, #0x14]
cmp r2, #0
streq r1, [r0, #0x70]
strne r1, [r2, #0x14]
cmp r1, #0
streq r2, [r0, #0x6c]
strne r2, [r1, #0x10]
bx lr
arm_func_end sub_037FC9C8
arm_func_start sub_037FC9EC
sub_037FC9EC: ; 0x037FC9EC
stmdb sp!, {r3, lr}
bl sub_037FCA1C
bl sub_037FE2B4
bl sub_037FB998
bl sub_037FB798
bl sub_037FD128
bl sub_037FD34C
bl sub_037FBF64
bl sub_037FDD7C
bl sub_03806388
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_037FC9EC
arm_func_start sub_037FCA1C
sub_037FCA1C: ; 0x037FCA1C
stmdb sp!, {r3, lr}
ldr r1, _037FCA54 ; =_038077FC
ldr r0, [r1]
cmp r0, #0
bne _037FCA4C
mov r0, #1
str r0, [r1]
bl sub_037FCA58
mov r0, #7
bl sub_037FCA58
mov r0, #8
bl sub_037FCA58
_037FCA4C:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FCA54: .word _038077FC
arm_func_end sub_037FCA1C
arm_func_start sub_037FCA58
sub_037FCA58: ; 0x037FCA58
stmdb sp!, {r4, lr}
mov r4, r0
bl sub_037FCABC
mov r1, r4, lsl #2
add r1, r1, #0x2700000
add r1, r1, #0xff000
str r0, [r1, #0xdc4]
mov r0, r4
bl sub_037FCB38
mov r1, r4, lsl #2
add r1, r1, #0x2700000
add r1, r1, #0xff000
str r0, [r1, #0xda0]
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_037FCA58
arm_func_start sub_037FCA94
sub_037FCA94: ; 0x037FCA94
mov r0, r0, lsl #2
add r0, r0, #0x2700000
add r0, r0, #0xff000
ldr r0, [r0, #0xdc4]
bx lr
arm_func_end sub_037FCA94
arm_func_start sub_037FCAA8
sub_037FCAA8: ; 0x037FCAA8
mov r0, r0, lsl #2
add r0, r0, #0x2700000
add r0, r0, #0xff000
ldr r0, [r0, #0xda0]
bx lr
arm_func_end sub_037FCAA8
arm_func_start sub_037FCABC
sub_037FCABC: ; 0x037FCABC
cmp r0, #1
beq _037FCAD8
cmp r0, #7
beq _037FCAE0
cmp r0, #8
beq _037FCAE8
b _037FCB1C
_037FCAD8:
ldr r0, _037FCB24 ; =0x027FF000
bx lr
_037FCAE0:
mov r0, #0x3800000
bx lr
_037FCAE8:
ldr r2, _037FCB28 ; =0x00000400
ldr r0, _037FCB2C ; =0x0380FF80
ldr r1, _037FCB30 ; =SDK_WRAM_ARENA_LO
sub r2, r0, r2
mov r0, #0x3800000
cmp r1, #0x3800000
movhi r0, r1
ldr r1, _037FCB34 ; =0x00000400
cmp r1, #0
bxeq lr
sublt r0, r0, r1
subge r0, r2, r1
bx lr
_037FCB1C:
mov r0, #0
bx lr
.align 2, 0
_037FCB24: .word 0x027FF000
_037FCB28: .word 0x00000400
_037FCB2C: .word 0x0380FF80
_037FCB30: .word SDK_WRAM_ARENA_LO
_037FCB34: .word 0x00000400
arm_func_end sub_037FCABC
arm_func_start sub_037FCB38
sub_037FCB38: ; 0x037FCB38
cmp r0, #1
beq _037FCB54
cmp r0, #7
beq _037FCB5C
cmp r0, #8
beq _037FCB6C
b _037FCB80
_037FCB54:
ldr r0, _037FCB88 ; =SDK_SUBPRIV_ARENA_LO
bx lr
_037FCB5C:
ldr r0, _037FCB8C ; =SDK_WRAM_ARENA_LO
cmp r0, #0x3800000
movhi r0, #0x3800000
bx lr
_037FCB6C:
ldr r1, _037FCB8C ; =SDK_WRAM_ARENA_LO
mov r0, #0x3800000
cmp r1, #0x3800000
movhi r0, r1
bx lr
_037FCB80:
mov r0, #0
bx lr
.align 2, 0
_037FCB88: .word SDK_SUBPRIV_ARENA_LO
_037FCB8C: .word SDK_WRAM_ARENA_LO
arm_func_end sub_037FCB38
arm_func_start sub_037FCB90
sub_037FCB90: ; 0x037FCB90
mov r0, r0, lsl #2
add r0, r0, #0x2700000
add r0, r0, #0xff000
str r1, [r0, #0xda0]
bx lr
arm_func_end sub_037FCB90
arm_func_start sub_037FCBA4
sub_037FCBA4: ; 0x037FCBA4
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_end sub_037FCBA4
arm_func_start sub_037FCBCC
sub_037FCBCC: ; 0x037FCBCC
stmdb sp!, {r3, lr}
mov lr, r0
mov ip, #0
b _037FCBEC
_037FCBDC:
cmp r1, lr
bls _037FCBF4
mov ip, lr
ldr lr, [lr, #4]
_037FCBEC:
cmp lr, #0
bne _037FCBDC
_037FCBF4:
stmia r1, {ip, lr}
cmp lr, #0
beq _037FCC30
str r1, [lr]
ldr r3, [r1, #8]
add r2, r1, r3
cmp r2, lr
bne _037FCC30
ldr r2, [lr, #8]
add r2, r3, r2
str r2, [r1, #8]
ldr lr, [lr, #4]
str lr, [r1, #4]
cmp lr, #0
strne r1, [lr]
_037FCC30:
cmp ip, #0
beq _037FCC68
str r1, [ip, #4]
ldr r2, [ip, #8]
add r3, ip, r2
cmp r3, r1
bne _037FCC6C
ldr r1, [r1, #8]
cmp lr, #0
add r1, r2, r1
str r1, [ip, #8]
str lr, [ip, #4]
strne ip, [lr]
b _037FCC6C
_037FCC68:
mov r0, r1
_037FCC6C:
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_037FCBCC
arm_func_start sub_037FCC74
sub_037FCC74: ; 0x037FCC74
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, r0
mov r5, r1
mov r7, r2
bl EnableIrqFlag
ldr r1, _037FCD80 ; =_03807800
mov r6, r0
ldr r1, [r1, r4, lsl #2]
cmp r1, #0
bne _037FCCA8
bl SetIrqFlag
mov r0, #0
b _037FCD78
_037FCCA8:
cmp r5, #0
ldrlt r5, [r1]
ldr r1, [r1, #0x10]
mov r0, #0xc
mla r4, r5, r0, r1
ldr r0, [r4, #4]
add r1, r7, #0x3f
mov r5, r0
bic r7, r1, #0x1f
b _037FCCE0
_037FCCD0:
ldr r1, [r5, #8]
cmp r7, r1
ble _037FCCE8
ldr r5, [r5, #4]
_037FCCE0:
cmp r5, #0
bne _037FCCD0
_037FCCE8:
cmp r5, #0
bne _037FCD00
mov r0, r6
bl SetIrqFlag
mov r0, #0
b _037FCD78
_037FCD00:
ldr r1, [r5, #8]
sub r1, r1, r7
cmp r1, #0x40
bhs _037FCD20
mov r1, r5
bl sub_037FCBA4
str r0, [r4, #4]
b _037FCD54
_037FCD20:
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]
cmp r0, #0
strne r2, [r0]
ldr r0, [r2]
cmp r0, #0
strne r2, [r0, #4]
streq r2, [r4, #4]
_037FCD54:
ldr r1, [r4, #8]
mov r0, #0
stmia r5, {r0, r1}
cmp r1, #0
strne r5, [r1]
mov r0, r6
str r5, [r4, #8]
bl SetIrqFlag
add r0, r5, #0x20
_037FCD78:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FCD80: .word _03807800
arm_func_end sub_037FCC74
arm_func_start sub_037FCD84
sub_037FCD84: ; 0x037FCD84
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
bl EnableIrqFlag
ldr r1, _037FCDEC ; =_03807800
mov r4, r0
ldr r0, [r1, r7, lsl #2]
cmp r6, #0
ldrlt r6, [r0]
ldr r1, [r0, #0x10]
mov r0, #0xc
mla r7, r6, r0, r1
sub r5, r5, #0x20
ldr r0, [r7, #8]
mov r1, r5
bl sub_037FCBA4
str r0, [r7, #8]
ldr r0, [r7, #4]
mov r1, r5
bl sub_037FCBCC
str r0, [r7, #4]
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FCDEC: .word _03807800
arm_func_end sub_037FCD84
arm_func_start sub_037FCDF0
sub_037FCDF0: ; 0x037FCDF0
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
mov r5, r1
bl EnableIrqFlag
ldr r1, _037FCE20 ; =_03807800
ldr r1, [r1, r4, lsl #2]
ldr r4, [r1]
str r5, [r1]
bl SetIrqFlag
mov r0, r4
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FCE20: .word _03807800
arm_func_end sub_037FCDF0
arm_func_start sub_037FCE24
sub_037FCE24: ; 0x037FCE24
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r5, r1
mov r4, r2
mov r6, r3
bl EnableIrqFlag
ldr r2, _037FCEC8 ; =_03807800
mov r1, #0xc
str r5, [r2, r7, lsl #2]
add r2, r5, #0x14
str r2, [r5, #0x10]
mov r7, #0
mul r1, r6, r1
str r6, [r5, #4]
mvn lr, #0
mov ip, r7
mov r2, #0xc
b _037FCE88
_037FCE6C:
mul r3, r7, r2
ldr r6, [r5, #0x10]
add r7, r7, #1
str lr, [r6, r3]
add r3, r6, r3
str ip, [r3, #8]
str ip, [r3, #4]
_037FCE88:
ldr r3, [r5, #4]
cmp r7, r3
blt _037FCE6C
mvn r2, #0
str r2, [r5]
ldr r3, [r5, #0x10]
bic r2, r4, #0x1f
add r1, r3, r1
add r1, r1, #0x1f
bic r1, r1, #0x1f
str r1, [r5, #8]
str r2, [r5, #0xc]
bl SetIrqFlag
ldr r0, [r5, #8]
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FCEC8: .word _03807800
arm_func_end sub_037FCE24
arm_func_start sub_037FCECC
sub_037FCECC: ; 0x037FCECC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r4, r0
mov r6, r1
mov r5, r2
bl EnableIrqFlag
ldr r2, _037FCF68 ; =_03807800
add r1, r6, #0x1f
ldr lr, [r2, r4, lsl #2]
bic r6, r1, #0x1f
ldr r7, [lr, #4]
bic r5, r5, #0x1f
mov r4, #0
mov r1, #0xc
b _037FCF50
_037FCF04:
mul r3, r4, r1
ldr ip, [lr, #0x10]
ldr r2, [ip, r3]
add r3, ip, r3
cmp r2, #0
bge _037FCF4C
sub r1, r5, r6
str r1, [r3]
mov r2, #0
str r2, [r6]
str r2, [r6, #4]
ldr r1, [r3]
str r1, [r6, #8]
str r6, [r3, #4]
str r2, [r3, #8]
bl SetIrqFlag
mov r0, r4
b _037FCF60
_037FCF4C:
add r4, r4, #1
_037FCF50:
cmp r4, r7
blt _037FCF04
bl SetIrqFlag
mvn r0, #0
_037FCF60:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FCF68: .word _03807800
arm_func_end sub_037FCECC
arm_func_start sub_037FCF6C
sub_037FCF6C: ; 0x037FCF6C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r4, #0
mov r8, r0
mov r7, r1
mov r5, r4
sub r6, r4, #1
bl EnableIrqFlag
ldr r1, _037FD108 ; =_03807800
mvn r2, #0
ldr r1, [r1, r8, lsl #2]
cmp r7, r2
ldr ip, [r1, #0x10]
ldreq r7, [r1]
cmp ip, #0
beq _037FD0F8
cmp r7, #0
blt _037FD0F8
ldr r2, [r1, #4]
cmp r7, r2
bge _037FD0F8
mov r2, #0xc
mul r3, r7, r2
ldr r2, [ip, r3]
add r7, ip, r3
cmp r2, #0
blt _037FD0F8
ldr ip, [r7, #8]
cmp ip, #0
ldrne r3, [ip]
cmpne r3, #0
bne _037FD0F8
b _037FD04C
_037FCFEC:
ldr r3, [r1, #8]
cmp r3, ip
bhi _037FD0F8
ldr r3, [r1, #0xc]
cmp ip, r3
bhs _037FD0F8
tst ip, #0x1f
bne _037FD0F8
ldr lr, [ip, #4]
cmp lr, #0
ldrne r3, [lr]
cmpne r3, ip
bne _037FD0F8
ldr r3, [ip, #8]
cmp r3, #0x40
blo _037FD0F8
tst r3, #0x1f
bne _037FD0F8
add r4, r4, r3
cmp r4, #0
ble _037FD0F8
cmp r4, r2
bgt _037FD0F8
mov ip, lr
_037FD04C:
cmp ip, #0
bne _037FCFEC
ldr lr, [r7, #4]
cmp lr, #0
ldrne r3, [lr]
cmpne r3, #0
bne _037FD0F8
b _037FD0E8
_037FD06C:
ldr r3, [r1, #8]
cmp r3, lr
bhi _037FD0F8
ldr r3, [r1, #0xc]
cmp lr, r3
bhs _037FD0F8
tst lr, #0x1f
bne _037FD0F8
ldr r7, [lr, #4]
cmp r7, #0
ldrne r3, [r7]
cmpne r3, lr
bne _037FD0F8
ldr ip, [lr, #8]
cmp ip, #0x40
blo _037FD0F8
tst ip, #0x1f
bne _037FD0F8
cmp r7, #0
beq _037FD0C8
add r3, lr, ip
cmp r3, r7
bhs _037FD0F8
_037FD0C8:
add r4, r4, ip
sub r3, ip, #0x20
cmp r4, #0
add r5, r5, r3
ble _037FD0F8
cmp r4, r2
bgt _037FD0F8
mov lr, r7
_037FD0E8:
cmp lr, #0
bne _037FD06C
cmp r4, r2
moveq r6, r5
_037FD0F8:
bl SetIrqFlag
mov r0, r6
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FD108: .word _03807800
arm_func_end sub_037FCF6C
arm_func_start sub_037FD10C
sub_037FD10C: ; 0x037FD10C
ldr r1, _037FD124 ; =_03807824
mov r2, #1
ldrh r3, [r1]
orr r0, r3, r2, lsl r0
strh r0, [r1]
bx lr
.align 2, 0
_037FD124: .word _03807824
arm_func_end sub_037FD10C
arm_func_start sub_037FD128
sub_037FD128: ; 0x037FD128
stmdb sp!, {r3, lr}
ldr r1, _037FD198 ; =_03807828
ldrh r0, [r1]
cmp r0, #0
bne _037FD190
mov r2, #1
mov r0, #0
strh r2, [r1]
bl sub_037FD10C
ldr r0, _037FD198 ; =_03807828
mov r2, #0
str r2, [r0, #8]
ldr r3, _037FD19C ; =0x04000102
str r2, [r0, #0xc]
strh r2, [r3]
ldr r1, _037FD1A0 ; =sub_037FD1B4
strh r2, [r3, #-2]
mov r2, #0xc1
mov r0, #8
strh r2, [r3]
bl sub_037FB7BC
mov r0, #8
bl sub_037FB8F0
ldr r0, _037FD198 ; =_03807828
mov r1, #0
str r1, [r0, #4]
_037FD190:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FD198: .word _03807828
_037FD19C: .word 0x04000102
_037FD1A0: .word sub_037FD1B4
arm_func_end sub_037FD128
arm_func_start sub_037FD1A4
sub_037FD1A4: ; 0x037FD1A4
ldr r0, _037FD1B0 ; =_03807828
ldrh r0, [r0]
bx lr
.align 2, 0
_037FD1B0: .word _03807828
arm_func_end sub_037FD1A4
arm_func_start sub_037FD1B4
sub_037FD1B4: ; 0x037FD1B4
ldr r0, _037FD20C ; =_03807828
mov r3, #0
ldr r2, [r0, #8]
ldr r1, [r0, #0xc]
adds r2, r2, #1
str r2, [r0, #8]
adc r1, r1, #0
str r1, [r0, #0xc]
ldr r1, [r0, #4]
cmp r1, #0
beq _037FD1F8
ldr r2, _037FD210 ; =0x04000102
mov r1, #0xc1
strh r3, [r2]
strh r3, [r2, #-2]
strh r1, [r2]
str r3, [r0, #4]
_037FD1F8:
ldr ip, _037FD214 ; =sub_037FB858
mov r0, #0
ldr r1, _037FD218 ; =sub_037FD1B4
mov r2, r0
bx ip
.align 2, 0
_037FD20C: .word _03807828
_037FD210: .word 0x04000102
_037FD214: .word sub_037FB858
_037FD218: .word sub_037FD1B4
arm_func_end sub_037FD1B4
arm_func_start GetCurrentPlaybackTime
GetCurrentPlaybackTime: ; 0x037FD21C
stmdb sp!, {lr}
sub sp, sp, #0xc
bl EnableIrqFlag
ldr lr, _037FD2B4 ; =0x04000100
ldr r1, _037FD2B8 ; =_03807828
ldrh r3, [lr]
ldr r2, _037FD2BC ; =0x0000FFFF
strh r3, [sp]
ldr ip, [r1, #8]
ldr r3, [r1, #0xc]
sub r1, r2, #0x10000
and ip, ip, r1
and r1, r3, r2
str ip, [sp, #4]
str r1, [sp, #8]
ldr r1, [lr, #0x114]
tst r1, #8
beq _037FD288
ldrh r1, [sp]
tst r1, #0x8000
bne _037FD288
ldr r2, [sp, #4]
ldr r1, [sp, #8]
adds r2, r2, #1
adc r1, r1, #0
str r2, [sp, #4]
str r1, [sp, #8]
_037FD288:
bl SetIrqFlag
ldr r2, [sp, #4]
ldr r1, [sp, #8]
ldrh r0, [sp]
mov r1, r1, lsl #0x10
orr r1, r1, r2, lsr #16
orr r1, r1, r0, asr #31
orr r0, r0, r2, lsl #16
add sp, sp, #0xc
ldmia sp!, {lr}
bx lr
.align 2, 0
_037FD2B4: .word 0x04000100
_037FD2B8: .word _03807828
_037FD2BC: .word 0x0000FFFF
arm_func_end GetCurrentPlaybackTime
arm_func_start sub_037FD2C0
sub_037FD2C0: ; 0x037FD2C0
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl GetCurrentPlaybackTime
ldr r3, _037FD33C ; =0x04000106
mov r2, #0
strh r2, [r3]
ldr ip, [r4, #0xc]
ldr r3, [r4, #0x10]
subs r5, ip, r0
sbc r4, r3, r1
ldr r1, _037FD340 ; =sub_037FD648
mov r0, #1
bl sub_037FB858
subs r0, r5, #0
mov r3, #0
sbcs r0, r4, #0
ldrlt r3, _037FD344 ; =0x0000FFFE
blt _037FD31C
subs r0, r5, #0x10000
sbcs r0, r4, r3
mvnlt r0, r5
movlt r0, r0, lsl #0x10
movlt r3, r0, lsr #0x10
_037FD31C:
ldr r2, _037FD348 ; =0x04000104
mov r1, #0xc1
strh r3, [r2]
mov r0, #0x10
strh r1, [r2, #2]
bl sub_037FB8F0
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FD33C: .word 0x04000106
_037FD340: .word sub_037FD648
_037FD344: .word 0x0000FFFE
_037FD348: .word 0x04000104
arm_func_end sub_037FD2C0
arm_func_start sub_037FD34C
sub_037FD34C: ; 0x037FD34C
stmdb sp!, {r3, lr}
ldr r1, _037FD38C ; =_03807838
ldrh r0, [r1]
cmp r0, #0
bne _037FD384
mov r0, #1
strh r0, [r1]
bl sub_037FD10C
ldr r1, _037FD38C ; =_03807838
mov r2, #0
str r2, [r1, #4]
mov r0, #0x10
str r2, [r1, #8]
bl ClearIeFlag
_037FD384:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FD38C: .word _03807838
arm_func_end sub_037FD34C
arm_func_start sub_037FD390
sub_037FD390: ; 0x037FD390
ldr r0, _037FD39C ; =_03807838
ldrh r0, [r0]
bx lr
.align 2, 0
_037FD39C: .word _03807838
arm_func_end sub_037FD390
arm_func_start sub_037FD3A0
sub_037FD3A0: ; 0x037FD3A0
mov r1, #0
str r1, [r0]
str r1, [r0, #8]
bx lr
arm_func_end sub_037FD3A0
arm_func_start sub_037FD3B0
sub_037FD3B0: ; 0x037FD3B0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r0
ldr r0, [r8, #0x20]
ldr r3, [r8, #0x1c]
cmp r0, #0
mov r7, r1
mov r6, r2
cmpeq r3, #0
beq _037FD424
bl GetCurrentPlaybackTime
ldr r6, [r8, #0x28]
ldr r7, [r8, #0x24]
cmp r6, r1
cmpeq r7, r0
bhs _037FD424
ldr r5, [r8, #0x1c]
ldr r4, [r8, #0x20]
subs r0, r0, r7
mov r2, r5
mov r3, r4
sbc r1, r1, r6
bl sub_03806B80
adds r2, r0, #1
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
_037FD424:
str r7, [r8, #0xc]
ldr r0, _037FD4D8 ; =_03807838
str r6, [r8, #0x10]
mov r2, #0
ldr r5, [r0, #4]
mov r1, r2
b _037FD494
_037FD440:
ldr r3, [r5, #0xc]
ldr r0, [r5, #0x10]
subs r4, r7, r3
sbc r3, r6, r0
subs r0, r4, r1
sbcs r0, r3, r2
bge _037FD490
ldr r0, [r5, #0x14]
str r0, [r8, #0x14]
str r8, [r5, #0x14]
str r5, [r8, #0x18]
ldr r0, [r8, #0x14]
cmp r0, #0
strne r8, [r0, #0x18]
bne _037FD4D0
ldr r1, _037FD4D8 ; =_03807838
mov r0, r8
str r8, [r1, #4]
bl sub_037FD2C0
b _037FD4D0
_037FD490:
ldr r5, [r5, #0x18]
_037FD494:
cmp r5, #0
bne _037FD440
ldr r1, _037FD4D8 ; =_03807838
mov r0, #0
str r0, [r8, #0x18]
ldr r0, [r1, #8]
str r8, [r1, #8]
str r0, [r8, #0x14]
cmp r0, #0
strne r8, [r0, #0x18]
bne _037FD4D0
str r8, [r1, #8]
mov r0, r8
str r8, [r1, #4]
bl sub_037FD2C0
_037FD4D0:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FD4D8: .word _03807838
arm_func_end sub_037FD3B0
arm_func_start sub_037FD4DC
sub_037FD4DC: ; 0x037FD4DC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
movs r6, r0
mov r5, r1
mov r4, r2
mov r7, r3
beq _037FD500
ldr r0, [r6]
cmp r0, #0
beq _037FD504
_037FD500:
bl sub_037FDE70
_037FD504:
bl EnableIrqFlag
mov r1, #0
str r1, [r6, #0x1c]
str r1, [r6, #0x20]
str r7, [r6]
ldr r1, [sp, #0x18]
mov r7, r0
str r1, [r6, #4]
bl GetCurrentPlaybackTime
adds r3, r5, r0
adc r2, r4, r1
mov r0, r6
mov r1, r3
bl sub_037FD3B0
mov r0, r7
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_037FD4DC
arm_func_start sub_037FD54C
sub_037FD54C: ; 0x037FD54C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r5, [sp, #0x18]
movs r4, r0
mov r8, r1
mov r7, r2
mov r6, r3
beq _037FD574
ldr r0, [r4]
cmp r0, #0
beq _037FD578
_037FD574:
bl sub_037FDE70
_037FD578:
bl EnableIrqFlag
str r6, [r4, #0x1c]
str r5, [r4, #0x20]
str r8, [r4, #0x24]
mov r1, #0
mov r5, r0
ldr r0, [sp, #0x1c]
str r7, [r4, #0x28]
ldr r3, [sp, #0x20]
str r0, [r4]
mov r0, r4
mov r2, r1
str r3, [r4, #4]
bl sub_037FD3B0
mov r0, r5
bl SetIrqFlag
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_end sub_037FD54C
arm_func_start sub_037FD5C0
sub_037FD5C0: ; 0x037FD5C0
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl EnableIrqFlag
ldr r1, [r5]
mov r4, r0
cmp r1, #0
bne _037FD5E4
bl SetIrqFlag
b _037FD63C
_037FD5E4:
ldr r0, [r5, #0x18]
cmp r0, #0
ldreq r2, [r5, #0x14]
ldreq r1, _037FD644 ; =_03807838
streq r2, [r1, #8]
ldrne r1, [r5, #0x14]
strne r1, [r0, #0x14]
ldr r1, [r5, #0x14]
cmp r1, #0
strne r0, [r1, #0x18]
bne _037FD624
ldr r1, _037FD644 ; =_03807838
cmp r0, #0
str r0, [r1, #4]
beq _037FD624
bl sub_037FD2C0
_037FD624:
mov r1, #0
str r1, [r5]
str r1, [r5, #0x1c]
mov r0, r4
str r1, [r5, #0x20]
bl SetIrqFlag
_037FD63C:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FD644: .word _03807838
arm_func_end sub_037FD5C0
arm_func_start sub_037FD648
sub_037FD648: ; 0x037FD648
stmdb sp!, {r0, lr}
bl sub_037FD658
ldmia sp!, {r0, lr}
bx lr
arm_func_end sub_037FD648
arm_func_start sub_037FD658
sub_037FD658: ; 0x037FD658
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _037FD740 ; =0x04000106
mov r2, #0
mov r0, #0x10
strh r2, [r1]
bl ClearIeFlag
ldr r1, _037FD744 ; =0x0380FFF8
ldr r0, [r1]
orr r0, r0, #0x10
str r0, [r1]
bl GetCurrentPlaybackTime
ldr r2, _037FD748 ; =_03807838
ldr r4, [r2, #4]
cmp r4, #0
beq _037FD738
ldr r3, [r4, #0x10]
ldr ip, [r4, #0xc]
cmp r1, r3
cmpeq r0, ip
bhs _037FD6B4
mov r0, r4
bl sub_037FD2C0
b _037FD738
_037FD6B4:
ldr r1, [r4, #0x18]
mov r0, #0
str r1, [r2, #4]
cmp r1, #0
streq r0, [r2, #8]
strne r0, [r1, #0x14]
ldr r0, [r4, #0x20]
ldr r1, [r4, #0x1c]
cmp r0, #0
ldr r5, [r4]
mov r0, #0
cmpeq r1, #0
streq r0, [r4]
cmp r5, #0
beq _037FD6FC
ldr r0, [r4, #4]
mov lr, pc
bx r5
_037FD6FC:
ldr r0, [r4, #0x20]
ldr r1, [r4, #0x1c]
cmp r0, #0
cmpeq r1, #0
mov r1, #0
beq _037FD724
mov r0, r4
mov r2, r1
str r5, [r4]
bl sub_037FD3B0
_037FD724:
ldr r0, _037FD748 ; =_03807838
ldr r0, [r0, #4]
cmp r0, #0
beq _037FD738
bl sub_037FD2C0
_037FD738:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FD740: .word 0x04000106
_037FD744: .word 0x0380FFF8
_037FD748: .word _03807838
arm_func_end sub_037FD658
arm_func_start sub_037FD74C
sub_037FD74C: ; 0x037FD74C
stmdb sp!, {r3, lr}
ldr r1, _037FD794 ; =_03807844
ldrh r0, [r1]
cmp r0, #0
bne _037FD78C
mov r0, #1
strh r0, [r1]
mov r2, #0
str r2, [r1, #0xc]
mov r0, #4
str r2, [r1, #0x10]
bl ClearIeFlag
ldr r0, _037FD794 ; =_03807844
mov r1, #0
str r1, [r0, #8]
str r1, [r0, #4]
_037FD78C:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FD794: .word _03807844
arm_func_end sub_037FD74C
arm_func_start sub_037FD798
sub_037FD798: ; 0x037FD798
ldr r0, _037FD7A4 ; =_03807844
ldrh r0, [r0]
bx lr
.align 2, 0
_037FD7A4: .word _03807844
arm_func_end sub_037FD798
arm_func_start sub_037FD7A8
sub_037FD7A8: ; 0x037FD7A8
stmdb sp!, {r3, lr}
ldr r1, _037FD848 ; =_03807844
ldr r3, [r1, #0xc]
b _037FD80C
_037FD7B8:
ldr r2, [r0, #0xc]
ldr r1, [r3, #0xc]
cmp r1, r2
blo _037FD808
bne _037FD7DC
ldrsh r2, [r3, #0x10]
ldrsh r1, [r0, #0x10]
cmp r2, r1
ble _037FD808
_037FD7DC:
ldr r1, [r3, #0x14]
str r1, [r0, #0x14]
str r3, [r0, #0x18]
str r0, [r3, #0x14]
cmp r1, #0
strne r0, [r1, #0x18]
bne _037FD840
ldr r1, _037FD848 ; =_03807844
str r0, [r1, #0xc]
bl sub_037FD9B8
b _037FD840
_037FD808:
ldr r3, [r3, #0x18]
_037FD80C:
cmp r3, #0
bne _037FD7B8
ldr r1, _037FD848 ; =_03807844
mov r2, #0
ldr r3, [r1, #0x10]
str r3, [r0, #0x14]
str r2, [r0, #0x18]
str r0, [r1, #0x10]
cmp r3, #0
strne r0, [r3, #0x18]
bne _037FD840
str r0, [r1, #0xc]
bl sub_037FD9B8
_037FD840:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FD848: .word _03807844
arm_func_end sub_037FD7A8
arm_func_start sub_037FD84C
sub_037FD84C: ; 0x037FD84C
cmp r0, #0
bxeq lr
ldr r2, [r0, #0x18]
ldr r1, [r0, #0x14]
cmp r2, #0
ldreq r0, _037FD880 ; =_03807844
strne r1, [r2, #0x14]
streq r1, [r0, #0x10]
cmp r1, #0
ldreq r0, _037FD880 ; =_03807844
strne r2, [r1, #0x18]
streq r2, [r0, #0xc]
bx lr
.align 2, 0
_037FD880: .word _03807844
arm_func_end sub_037FD84C
arm_func_start sub_037FD884
sub_037FD884: ; 0x037FD884
mov r1, #0
str r1, [r0]
str r1, [r0, #8]
str r1, [r0, #0x20]
bx lr
arm_func_end sub_037FD884
arm_func_start sub_037FD898
sub_037FD898: ; 0x037FD898
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r0
mov r7, r1
mov r6, r2
mov r5, r3
bl EnableIrqFlag
mov r4, r0
cmp r8, #0
beq _037FD8C8
ldr r0, [r8]
cmp r0, #0
beq _037FD8CC
_037FD8C8:
bl sub_037FDE70
_037FD8CC:
ldr r0, _037FD924 ; =0x04000006
ldrh sb, [r0]
mov r0, sb
bl sub_037FDCA8
mov r1, #0
str r1, [r8, #0x1c]
cmp r7, sb
strh r7, [r8, #0x10]
addle r0, r0, #1
str r0, [r8, #0xc]
strh r6, [r8, #0x12]
ldr r0, [sp, #0x20]
str r5, [r8]
str r0, [r8, #4]
mov r1, #0
mov r0, r8
str r1, [r8, #0x24]
bl sub_037FD7A8
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_037FD924: .word 0x04000006
arm_func_end sub_037FD898
arm_func_start sub_037FD928
sub_037FD928: ; 0x037FD928
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov r8, r0
mov r7, r1
mov r6, r2
mov r5, r3
bl EnableIrqFlag
mov r4, r0
cmp r8, #0
beq _037FD958
ldr r0, [r8]
cmp r0, #0
beq _037FD95C
_037FD958:
bl sub_037FDE70
_037FD95C:
ldr r0, _037FD9B4 ; =0x04000006
ldrh sb, [r0]
mov r0, sb
bl sub_037FDCA8
mov r1, #1
str r1, [r8, #0x1c]
cmp r7, sb
strh r7, [r8, #0x10]
addle r0, r0, #1
str r0, [r8, #0xc]
strh r6, [r8, #0x12]
ldr r0, [sp, #0x20]
str r5, [r8]
str r0, [r8, #4]
mov r1, #0
mov r0, r8
str r1, [r8, #0x24]
bl sub_037FD7A8
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_037FD9B4: .word 0x04000006
arm_func_end sub_037FD928
arm_func_start sub_037FD9B8
sub_037FD9B8: ; 0x037FD9B8
stmdb sp!, {r4, lr}
ldr r1, _037FDA0C ; =sub_037FDAF8
mov r4, r0
mov r0, #4
bl sub_037FB7BC
ldrsh r3, [r4, #0x10]
ldr r2, _037FDA10 ; =0x04000004
mov r0, r3, lsl #0x18
ldrh r1, [r2]
and r3, r3, #0x100
and r1, r1, #0x3f
orr r0, r1, r0, lsr #16
orr r0, r0, r3, asr #1
strh r0, [r2]
ldrh r1, [r2]
mov r0, #4
orr r1, r1, #0x20
strh r1, [r2]
bl sub_037FB8F0
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FDA0C: .word sub_037FDAF8
_037FDA10: .word 0x04000004
arm_func_end sub_037FD9B8
arm_func_start sub_037FDA14
sub_037FDA14: ; 0x037FDA14
stmdb sp!, {r3, r4, r5, lr}
movs r4, r1
mov r5, r0
bne _037FDA28
bl sub_037FDE70
_037FDA28:
cmp r5, #0
strne r4, [r5, #8]
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_037FDA14
arm_func_start sub_037FDA38
sub_037FDA38: ; 0x037FDA38
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl EnableIrqFlag
mov r1, #1
str r1, [r5, #0x24]
ldr r1, [r5]
mov r4, r0
cmp r1, #0
bne _037FDA64
bl SetIrqFlag
b _037FDA7C
_037FDA64:
mov r0, r5
bl sub_037FD84C
mov r1, #0
mov r0, r4
str r1, [r5]
bl SetIrqFlag
_037FDA7C:
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_037FDA38
arm_func_start sub_037FDA84
sub_037FDA84: ; 0x037FDA84
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
bl EnableIrqFlag
mov r5, r0
cmp r7, #0
bne _037FDAA0
bl sub_037FDE70
_037FDAA0:
ldr r0, _037FDAF4 ; =_03807844
mov r4, #0
ldr r0, [r0, #0xc]
cmp r0, #0
ldrne r6, [r0, #0x18]
moveq r6, #0
b _037FDADC
_037FDABC:
ldr r1, [r0, #8]
cmp r1, r7
bne _037FDACC
bl sub_037FDA38
_037FDACC:
mov r0, r6
cmp r6, #0
ldrne r6, [r6, #0x18]
moveq r6, r4
_037FDADC:
cmp r0, #0
bne _037FDABC
mov r0, r5
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FDAF4: .word _03807844
arm_func_end sub_037FDA84
arm_func_start sub_037FDAF8
sub_037FDAF8: ; 0x037FDAF8
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r0, #4
bl ClearIeFlag
ldr r2, _037FDC98 ; =0x04000004
ldr r1, _037FDC9C ; =0x0380FFF8
ldrh r0, [r2]
bic r0, r0, #0x20
strh r0, [r2]
ldr r0, [r1]
orr r0, r0, #4
str r0, [r1]
ldrh r0, [r2]
mov r1, r0, asr #8
mov r0, r0, lsl #1
and r1, r1, #0xff
and r0, r0, #0x100
orr r0, r1, r0
sub r0, r0, #1
bl sub_037FDCA8
ldr sl, _037FDCA0 ; =0x04000006
mov r6, #0
ldr r5, _037FDCA4 ; =_03807844
sub r7, sl, #2
mov fp, #1
mov r8, r6
b _037FDC84
_037FDB60:
ldrh sb, [sl]
mov r0, sb
bl sub_037FDCA8
ldrsh r1, [r4, #0x10]
ldr r2, [r4, #0xc]
sub r1, sb, r1
mov sb, r0
subs r0, sb, r2
bmi _037FDB94
cmp r0, #0
bne _037FDB9C
cmp r1, #0
bge _037FDB9C
_037FDB94:
mov r0, r8
b _037FDBB8
_037FDB9C:
cmp r1, #0
addlt r0, r1, #7
addlt r1, r0, #0x100
ldrsh r0, [r4, #0x12]
cmp r1, r0
movle r0, fp
movgt r0, #2
_037FDBB8:
cmp r0, #0
beq _037FDBD4
cmp r0, #1
beq _037FDC10
cmp r0, #2
beq _037FDC68
b _037FDC84
_037FDBD4:
mov r0, r4
bl sub_037FD9B8
ldrh r1, [sl]
ldrsh r0, [r4, #0x10]
cmp r0, r1
ldreq r0, [r4, #0xc]
cmpeq r0, sb
bne _037FDC90
mov r0, #4
bl ClearIeFlag
ldrh r1, [r7]
mov r0, #4
bic r1, r1, #0x20
strh r1, [r7]
bl sub_037FB964
_037FDC10:
ldr sb, [r4]
mov r0, r4
bl sub_037FD84C
str r6, [r4]
cmp sb, #0
beq _037FDC34
ldr r0, [r4, #4]
mov lr, pc
bx sb
_037FDC34:
ldr r0, [r4, #0x1c]
cmp r0, #0
beq _037FDC84
ldr r0, [r4, #0x24]
cmp r0, #0
bne _037FDC84
str sb, [r4]
ldr r1, [r5, #8]
mov r0, r4
add r1, r1, #1
str r1, [r4, #0xc]
bl sub_037FD7A8
b _037FDC84
_037FDC68:
mov r0, r4
bl sub_037FD84C
ldr r1, [r5, #8]
mov r0, r4
add r1, r1, #1
str r1, [r4, #0xc]
bl sub_037FD7A8
_037FDC84:
ldr r4, [r5, #0xc]
cmp r4, #0
bne _037FDB60
_037FDC90:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FDC98: .word 0x04000004
_037FDC9C: .word 0x0380FFF8
_037FDCA0: .word 0x04000006
_037FDCA4: .word _03807844
arm_func_end sub_037FDAF8
arm_func_start sub_037FDCA8
sub_037FDCA8: ; 0x037FDCA8
stmdb sp!, {r4, lr}
mov r4, r0
bl EnableIrqFlag
ldr r1, _037FDCE8 ; =_03807844
ldr r2, [r1, #4]
cmp r4, r2
ldrlt r2, [r1, #8]
addlt r2, r2, #1
strlt r2, [r1, #8]
ldr r1, _037FDCE8 ; =_03807844
str r4, [r1, #4]
bl SetIrqFlag
ldr r0, _037FDCE8 ; =_03807844
ldr r0, [r0, #8]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FDCE8: .word _03807844
arm_func_end sub_037FDCA8
arm_func_start ClearIrqFlag
ClearIrqFlag: ; 0x037FDCEC
mrs r0, cpsr
bic r1, r0, #0x80
msr cpsr_c, r1
and r0, r0, #0x80
bx lr
arm_func_end ClearIrqFlag
arm_func_start EnableIrqFlag
EnableIrqFlag: ; 0x037FDD00
mrs r0, cpsr
orr r1, r0, #0x80
msr cpsr_c, r1
and r0, r0, #0x80
bx lr
arm_func_end EnableIrqFlag
arm_func_start SetIrqFlag
SetIrqFlag: ; 0x037FDD14
mrs r1, cpsr
bic r2, r1, #0x80
orr r2, r2, r0
msr cpsr_c, r2
and r0, r1, #0x80
bx lr
arm_func_end SetIrqFlag
arm_func_start EnableIrqFiqFlags
EnableIrqFiqFlags: ; 0x037FDD2C
mrs r0, cpsr
orr r1, r0, #0xc0
msr cpsr_c, r1
and r0, r0, #0xc0
bx lr
arm_func_end EnableIrqFiqFlags
arm_func_start SetIrqFiqFlags
SetIrqFiqFlags: ; 0x037FDD40
mrs r1, cpsr
bic r2, r1, #0xc0
orr r2, r2, r0
msr cpsr_c, r2
and r0, r1, #0xc0
bx lr
arm_func_end SetIrqFiqFlags
arm_func_start GetProcessorMode
GetProcessorMode: ; 0x037FDD58
mrs r0, cpsr
and r0, r0, #0x1f
bx lr
arm_func_end GetProcessorMode
arm_func_start sub_037FDD64
sub_037FDD64: ; 0x037FDD64
ldr ip, _037FDD78 ; =sub_038037B8
mov r1, r0, asr #1
add r0, r0, r1, lsr #30
mov r0, r0, asr #2
bx ip
.align 2, 0
_037FDD78: .word sub_038037B8 + 1
arm_func_end sub_037FDD64
arm_func_start sub_037FDD7C
sub_037FDD7C: ; 0x037FDD7C
stmdb sp!, {r3, lr}
ldr r2, _037FDDAC ; =_03807858
ldrh r0, [r2]
cmp r0, #0
bne _037FDDA4
ldr r1, _037FDDB0 ; =sub_037FDDC4
mov r3, #1
mov r0, #0xc
strh r3, [r2]
bl sub_037FE39C
_037FDDA4:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FDDAC: .word _03807858
_037FDDB0: .word sub_037FDDC4
arm_func_end sub_037FDD7C
arm_func_start sub_037FDDB4
sub_037FDDB4: ; 0x037FDDB4
ldr r0, _037FDDC0 ; =_03807858
ldrh r0, [r0, #2]
bx lr
.align 2, 0
_037FDDC0: .word _03807858
arm_func_end sub_037FDDB4
arm_func_start sub_037FDDC4
sub_037FDDC4: ; 0x037FDDC4
stmdb sp!, {r3, lr}
and r0, r1, #0x7f00
mov r0, r0, lsl #8
mov r0, r0, lsr #0x10
cmp r0, #0x10
ldreq r0, _037FDDF4 ; =_03807858
moveq r1, #1
streqh r1, [r0, #2]
beq _037FDDEC
bl sub_037FDE70
_037FDDEC:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FDDF4: .word _03807858
arm_func_end sub_037FDDC4
arm_func_start sub_037FDDF8
sub_037FDDF8: ; 0x037FDDF8
stmdb sp!, {r4, r5, r6, lr}
mov r0, #0
bl sub_037FDEF4
mov r0, #1
bl sub_037FDEF4
mov r0, #2
bl sub_037FDEF4
mov r0, #3
bl sub_037FDEF4
mov r0, #0x40000
bl sub_037FB8A4
mvn r0, #0
bl sub_037FB964
bl sub_037FE6B4
mov r6, #0xc
mov r5, #0x1000
mov r4, #0
_037FDE3C:
mov r0, r6
mov r1, r5
mov r2, r4
bl sub_037FE410
cmp r0, #0
bne _037FDE3C
ldr r0, _037FDE6C ; =0x04000208
mov r1, #0
strh r1, [r0]
bl sub_038072C0
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037FDE6C: .word 0x04000208
arm_func_end sub_037FDDF8
arm_func_start sub_037FDE70
sub_037FDE70: ; 0x037FDE70
stmdb sp!, {r3, lr}
mov r0, #0
bl sub_03806610
_037FDE7C:
bl EnableIrqFlag
bl sub_037F8478
b _037FDE7C
arm_func_end sub_037FDE70
arm_func_start sub_037FDE88
sub_037FDE88: ; 0x037FDE88
stmdb sp!, {r4, lr}
mov r4, r0
bl EnableIrqFlag
add r1, r4, r4, lsl #1
add r1, r1, #2
mov r1, r1, lsl #2
add r1, r1, #0xb0
add r2, r1, #0x4000000
_037FDEA8:
ldr r1, [r2]
tst r1, #0x80000000
bne _037FDEA8
cmp r4, #0
bne _037FDEE4
mov r1, #0xc
mul r1, r4, r1
add r2, r1, #0x4000000
mov r3, #0
add r1, r1, #0xb0
str r3, [r2, #0xb0]
add r2, r1, #0x4000000
ldr r1, _037FDEF0 ; =0x81400001
str r3, [r2, #4]
str r1, [r2, #8]
_037FDEE4:
bl SetIrqFlag
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FDEF0: .word 0x81400001
arm_func_end sub_037FDE88
arm_func_start sub_037FDEF4
sub_037FDEF4: ; 0x037FDEF4
stmdb sp!, {r4, lr}
mov r4, r0
bl EnableIrqFlag
mov r1, #6
mul r1, r4, r1
add r1, r1, #5
mov r1, r1, lsl #1
add r1, r1, #0x4000000
ldrh r2, [r1, #0xb0]
cmp r4, #0
bic r2, r2, #0x3200
strh r2, [r1, #0xb0]
ldrh r2, [r1, #0xb0]
bic r2, r2, #0x8000
strh r2, [r1, #0xb0]
ldrh r2, [r1, #0xb0]
ldrh r1, [r1, #0xb0]
bne _037FDF64
mov r1, #0xc
mul r1, r4, r1
add r2, r1, #0x4000000
mov r3, #0
add r1, r1, #0xb0
str r3, [r2, #0xb0]
add r2, r1, #0x4000000
ldr r1, _037FDF70 ; =0x81400001
str r3, [r2, #4]
str r1, [r2, #8]
_037FDF64:
bl SetIrqFlag
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FDF70: .word 0x81400001
arm_func_end sub_037FDEF4
arm_func_start sub_037FDF74
sub_037FDF74: ; 0x037FDF74
mov r3, #0
_037FDF78:
cmp r3, r2
blt _037FDF84
b _037FDF88
_037FDF84:
strh r0, [r1, r3]
_037FDF88:
blt _037FDF90
b _037FDF94
_037FDF90:
add r3, r3, #2
_037FDF94:
blt _037FDF78
bx lr
arm_func_end sub_037FDF74
arm_func_start sub_037FDF9C
sub_037FDF9C: ; 0x037FDF9C
mov ip, #0
_037FDFA0:
cmp ip, r2
blt _037FDFAC
b _037FDFB0
_037FDFAC:
ldrh r3, [r0, ip]
_037FDFB0:
blt _037FDFB8
b _037FDFBC
_037FDFB8:
strh r3, [r1, ip]
_037FDFBC:
blt _037FDFC4
b _037FDFC8
_037FDFC4:
add ip, ip, #2
_037FDFC8:
blt _037FDFA0
bx lr
arm_func_end sub_037FDF9C
arm_func_start sub_037FDFD0
sub_037FDFD0: ; 0x037FDFD0
add ip, r1, r2
_037FDFD4:
cmp r1, ip
blt _037FDFE0
b _037FDFE4
_037FDFE0:
stmia r1!, {r0}
_037FDFE4:
blt _037FDFD4
bx lr
arm_func_end sub_037FDFD0
arm_func_start sub_037FDFEC
sub_037FDFEC: ; 0x037FDFEC
add ip, r1, r2
_037FDFF0:
cmp r1, ip
blt _037FDFFC
b _037FE000
_037FDFFC:
ldmia r0!, {r2}
_037FE000:
blt _037FE008
b _037FE00C
_037FE008:
stmia r1!, {r2}
_037FE00C:
blt _037FDFF0
bx lr
arm_func_end sub_037FDFEC
arm_func_start sub_037FE014
sub_037FE014: ; 0x037FE014
stmdb sp!, {r4, r5, r6, r7, r8, sb}
add sb, 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
_037FE040:
cmp r1, ip
blt _037FE04C
b _037FE050
_037FE04C:
stmia r1!, {r0, r2, r3, r4, r5, r6, r7, r8}
_037FE050:
blt _037FE040
_037FE054:
cmp r1, sb
blt _037FE060
b _037FE064
_037FE060:
stmia r1!, {r0}
_037FE064:
blt _037FE054
ldmia sp!, {r4, r5, r6, r7, r8, sb}
bx lr
arm_func_end sub_037FE014
arm_func_start sub_037FE070
sub_037FE070: ; 0x037FE070
cmp r2, #0
beq _037FE07C
b _037FE080
_037FE07C:
bx lr
_037FE080:
tst r0, #1
beq _037FE0AC
ldrh ip, [r0, #-1]
and ip, ip, #0xff
orr r3, ip, r1, lsl #8
strh r3, [r0, #-1]
add r0, r0, #1
subs r2, r2, #1
beq _037FE0A8
b _037FE0AC
_037FE0A8:
bx lr
_037FE0AC:
cmp r2, #2
blo _037FE104
orr r1, r1, r1, lsl #8
tst r0, #2
beq _037FE0D4
strh r1, [r0], #2
subs r2, r2, #2
beq _037FE0D0
b _037FE0D4
_037FE0D0:
bx lr
_037FE0D4:
orr r1, r1, r1, lsl #16
bics r3, r2, #3
beq _037FE0F4
sub r2, r2, r3
add ip, r3, r0
_037FE0E8:
str r1, [r0], #4
cmp r0, ip
blo _037FE0E8
_037FE0F4:
tst r2, #2
bne _037FE100
b _037FE104
_037FE100:
strh r1, [r0], #2
_037FE104:
tst r2, #1
beq _037FE110
b _037FE114
_037FE110:
bx lr
_037FE114:
ldrh r3, [r0]
and r3, r3, #0xff00
and r1, r1, #0xff
orr r1, r1, r3
strh r1, [r0]
bx lr
arm_func_end sub_037FE070
arm_func_start sub_037FE12C
sub_037FE12C: ; 0x037FE12C
cmp r2, #0
beq _037FE138
b _037FE13C
_037FE138:
bx lr
_037FE13C:
tst r1, #1
beq _037FE194
ldrh ip, [r1, #-1]
and ip, ip, #0xff
tst r0, #1
bne _037FE158
b _037FE15C
_037FE158:
ldrh r3, [r0, #-1]
_037FE15C:
bne _037FE164
b _037FE168
_037FE164:
mov r3, r3, lsr #8
_037FE168:
beq _037FE170
b _037FE174
_037FE170:
ldrh r3, [r0]
_037FE174:
orr r3, ip, r3, lsl #8
strh r3, [r1, #-1]
add r0, r0, #1
add r1, r1, #1
subs r2, r2, #1
beq _037FE190
b _037FE194
_037FE190:
bx lr
_037FE194:
eor ip, r1, r0
tst ip, #1
beq _037FE1F0
bic r0, r0, #1
ldrh ip, [r0], #2
mov r3, ip, lsr #8
subs r2, r2, #2
blo _037FE1CC
_037FE1B4:
ldrh ip, [r0], #2
orr ip, r3, ip, lsl #8
strh ip, [r1], #2
mov r3, ip, lsr #0x10
subs r2, r2, #2
bhs _037FE1B4
_037FE1CC:
tst r2, #1
beq _037FE1D8
b _037FE1DC
_037FE1D8:
bx lr
_037FE1DC:
ldrh ip, [r1]
and ip, ip, #0xff00
orr ip, ip, r3
strh ip, [r1]
bx lr
_037FE1F0:
tst ip, #2
beq _037FE21C
bics r3, r2, #1
beq _037FE280
sub r2, r2, r3
add ip, r3, r1
_037FE208:
ldrh r3, [r0], #2
strh r3, [r1], #2
cmp r1, ip
blo _037FE208
b _037FE280
_037FE21C:
cmp r2, #2
blo _037FE280
tst r1, #2
beq _037FE244
ldrh r3, [r0], #2
strh r3, [r1], #2
subs r2, r2, #2
beq _037FE240
b _037FE244
_037FE240:
bx lr
_037FE244:
bics r3, r2, #3
beq _037FE264
sub r2, r2, r3
add ip, r3, r1
_037FE254:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, ip
blo _037FE254
_037FE264:
tst r2, #2
bne _037FE270
b _037FE274
_037FE270:
ldrh r3, [r0], #2
_037FE274:
bne _037FE27C
b _037FE280
_037FE27C:
strh r3, [r1], #2
_037FE280:
tst r2, #1
beq _037FE28C
b _037FE290
_037FE28C:
bx lr
_037FE290:
ldrh r2, [r1]
ldrh r0, [r0]
and r2, r2, #0xff00
and r0, r0, #0xff
orr r0, r2, r0
strh r0, [r1]
bx lr
arm_func_end sub_037FE12C
arm_func_start sub_037FE2AC
sub_037FE2AC: ; 0x037FE2AC
.word 0xE1010090
bx lr
arm_func_end sub_037FE2AC
arm_func_start sub_037FE2B4
sub_037FE2B4: ; 0x037FE2B4
ldr ip, _037FE2BC ; =sub_037FE2C0
bx ip
.align 2, 0
_037FE2BC: .word sub_037FE2C0
arm_func_end sub_037FE2B4
arm_func_start sub_037FE2C0
sub_037FE2C0: ; 0x037FE2C0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
bl EnableIrqFlag
ldr r1, _037FE380 ; =_0380785C
mov r4, r0
ldrh r0, [r1]
cmp r0, #0
bne _037FE370
ldr r0, _037FE384 ; =0x027FFC00
mov r2, #1
strh r2, [r1]
mov r2, #0
str r2, [r0, #0x38c]
ldr r0, _037FE388 ; =_03807860
mov r1, r2
_037FE2F8:
str r1, [r0, r2, lsl #2]
add r2, r2, #1
cmp r2, #0x20
blt _037FE2F8
ldr r2, _037FE38C ; =0x0000C408
ldr r1, _037FE390 ; =0x04000184
mov r0, #0x40000
strh r2, [r1]
bl sub_037FB964
ldr r1, _037FE394 ; =sub_037FE4A8
mov r0, #0x40000
bl sub_037FB7BC
mov r0, #0x40000
bl sub_037FB8F0
mov r5, #8
ldr r8, _037FE398 ; =0x04000180
mov r6, r5
mov r7, #0x3e8
b _037FE368
_037FE344:
mov r0, r5, lsl #8
strh r0, [r8]
mov r0, r7
bl sub_037FDD64
ldrh r0, [r8]
and r0, r0, #0xf
cmp r0, r5
movne r5, r6
sub r5, r5, #1
_037FE368:
cmp r5, #0
bge _037FE344
_037FE370:
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FE380: .word _0380785C
_037FE384: .word 0x027FFC00
_037FE388: .word _03807860
_037FE38C: .word 0x0000C408
_037FE390: .word 0x04000184
_037FE394: .word sub_037FE4A8
_037FE398: .word 0x04000180
arm_func_end sub_037FE2C0
arm_func_start sub_037FE39C
sub_037FE39C: ; 0x037FE39C
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
mov r5, r1
bl EnableIrqFlag
ldr r1, _037FE3E4 ; =_03807860
ldr r3, _037FE3E8 ; =0x027FFC00
str r5, [r1, r4, lsl #2]
cmp r5, #0
ldrne r2, [r3, #0x38c]
mov r1, #1
orrne r1, r2, r1, lsl r4
ldreq r2, [r3, #0x38c]
mvneq r1, r1, lsl r4
andeq r1, r2, r1
str r1, [r3, #0x38c]
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FE3E4: .word _03807860
_037FE3E8: .word 0x027FFC00
arm_func_end sub_037FE39C
arm_func_start sub_037FE3EC
sub_037FE3EC: ; 0x037FE3EC
ldr r2, _037FE40C ; =0x027FFC00
mov r3, #1
add r1, r2, r1, lsl #2
ldr r1, [r1, #0x388]
tst r1, r3, lsl r0
moveq r3, #0
mov r0, r3
bx lr
.align 2, 0
_037FE40C: .word 0x027FFC00
arm_func_end sub_037FE3EC
arm_func_start sub_037FE410
sub_037FE410: ; 0x037FE410
stmdb sp!, {r3, lr}
ldr r3, [sp]
and r0, r0, #0x1f
bic r3, r3, #0x1f
orr r0, r3, r0
bic r3, r0, #0x20
mov r0, r2, lsl #0x1f
orr r0, r3, r0, lsr #26
and r0, r0, #0x3f
orr r0, r0, r1, lsl #6
str r0, [sp]
bl sub_037FE448
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_037FE410
arm_func_start sub_037FE448
sub_037FE448: ; 0x037FE448
stmdb sp!, {r4, lr}
ldr r2, _037FE4A4 ; =0x04000184
mov r4, r0
ldrh r0, [r2]
tst r0, #0x4000
ldrneh r1, [r2]
mvnne r0, #0
orrne r1, r1, #0xc000
strneh r1, [r2]
bne _037FE49C
bl EnableIrqFlag
ldr r2, _037FE4A4 ; =0x04000184
ldrh r1, [r2]
tst r1, #2
beq _037FE490
bl SetIrqFlag
mvn r0, #1
b _037FE49C
_037FE490:
str r4, [r2, #4]
bl SetIrqFlag
mov r0, #0
_037FE49C:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FE4A4: .word 0x04000184
arm_func_end sub_037FE448
arm_func_start sub_037FE4A8
sub_037FE4A8: ; 0x037FE4A8
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #4
ldr r6, [sp]
mvn r8, #3
ldr r4, _037FE580 ; =_03807860
ldr sb, _037FE584 ; =0x04000184
add sl, r8, #1
mov r7, #0x4100000
mov r5, #0
_037FE4CC:
ldrh r0, [sb]
tst r0, #0x4000
ldrneh r0, [sb]
addne r1, r8, #1
orrne r0, r0, #0xc000
strneh r0, [sb]
bne _037FE514
bl EnableIrqFlag
ldrh r1, [sb]
tst r1, #0x100
beq _037FE504
bl SetIrqFlag
mov r1, r8
b _037FE514
_037FE504:
ldr r6, [r7]
str r6, [sp]
bl SetIrqFlag
mov r1, r5
_037FE514:
cmp r1, r8
beq _037FE574
cmp r1, sl
beq _037FE4CC
mov r0, r6, lsl #0x1b
movs r0, r0, lsr #0x1b
beq _037FE4CC
ldr r3, [r4, r0, lsl #2]
cmp r3, #0
beq _037FE554
mov r2, r6, lsl #0x1a
mov r1, r6, lsr #6
mov r2, r2, lsr #0x1f
mov lr, pc
bx r3
_037FE550:
b _037FE4CC
_037FE554:
mov r0, r6, lsl #0x1a
movs r0, r0, lsr #0x1f
bne _037FE4CC
orr r6, r6, #0x20
mov r0, r6
str r6, [sp]
bl sub_037FE448
b _037FE4CC
_037FE574:
add sp, sp, #4
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_037FE580: .word _03807860
_037FE584: .word 0x04000184
arm_func_end sub_037FE4A8
arm_func_start sub_037FE588
sub_037FE588: ; 0x037FE588
ldr r2, _037FE5A4 ; =0x04000134
mvn r3, r0
ldrh r0, [r2]
and r0, r3, r0
orr r0, r1, r0
strh r0, [r2]
bx lr
.align 2, 0
_037FE5A4: .word 0x04000134
arm_func_end sub_037FE588
arm_func_start sub_037FE5A8
sub_037FE5A8: ; 0x037FE5A8
ldr ip, _037FE5BC ; =sub_037FE588
mov r0, r0, lsl #0x10
mov r1, r0, lsr #0x10
mov r0, #0xc000
bx ip
.align 2, 0
_037FE5BC: .word sub_037FE588
arm_func_end sub_037FE5A8
arm_func_start sub_037FE5C0
sub_037FE5C0: ; 0x037FE5C0
stmdb sp!, {lr}
sub sp, sp, #0xc
bl sub_037FD1A4
cmp r0, #0
beq _037FE5E0
bl sub_037FD390
cmp r0, #0
bne _037FE5E8
_037FE5E0:
mov r0, #0
b _037FE640
_037FE5E8:
ldr r0, _037FE64C ; =_038078E0
ldr r0, [r0]
cmp r0, #0
movne r0, #0
bne _037FE640
ldr r0, _037FE650 ; =_038078E4
bl sub_037FD3A0
bl GetCurrentPlaybackTime
ldr r2, _037FE654 ; =sub_037FE65C
ldr r3, _037FE658 ; =0x0000082E
str r2, [sp, #4]
adds ip, r0, r3
mov lr, #0
str lr, [sp, #8]
adc r2, r1, #0
ldr r0, _037FE650 ; =_038078E4
mov r1, ip
str lr, [sp]
bl sub_037FD54C
ldr r1, _037FE64C ; =_038078E0
mov r0, #1
str r0, [r1]
_037FE640:
add sp, sp, #0xc
ldmia sp!, {lr}
bx lr
.align 2, 0
_037FE64C: .word _038078E0
_037FE650: .word _038078E4
_037FE654: .word sub_037FE65C
_037FE658: .word 0x0000082E
arm_func_end sub_037FE5C0
arm_func_start sub_037FE65C
sub_037FE65C: ; 0x037FE65C
stmdb sp!, {r4, lr}
mov r0, #0x8000
mov r4, #0
bl sub_037FE5A8
ldr r0, _037FE694 ; =0x04000136
ldrh r1, [r0]
ldr r0, _037FE698 ; =0x027FFFA8
tst r1, #0x80
movne r4, #0x8000
and r1, r1, #0xb
orr r1, r4, r1, lsl #10
strh r1, [r0]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FE694: .word 0x04000136
_037FE698: .word 0x027FFFA8
arm_func_end sub_037FE65C
arm_func_start sub_037FE69C
sub_037FE69C: ; 0x037FE69C
ldr r1, _037FE6B0 ; =0x04000501
ldrb r0, [r1]
orr r0, r0, #0x80
strb r0, [r1]
bx lr
.align 2, 0
_037FE6B0: .word 0x04000501
arm_func_end sub_037FE69C
arm_func_start sub_037FE6B4
sub_037FE6B4: ; 0x037FE6B4
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _037FE700 ; =0x04000501
mov r5, #0
ldrb r0, [r1]
bic r0, r0, #0x80
strb r0, [r1]
mov r4, #1
_037FE6D0:
mov r0, r5
mov r1, r4
bl sub_037FEA20
add r5, r5, #1
cmp r5, #0x10
blt _037FE6D0
ldr r0, _037FE704 ; =0x04000508
mov r1, #0
strb r1, [r0]
strb r1, [r0, #1]
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FE700: .word 0x04000501
_037FE704: .word 0x04000508
arm_func_end sub_037FE6B4
arm_func_start sub_037FE708
sub_037FE708: ; 0x037FE708
stmdb sp!, {r3, lr}
ldr r2, _037FE74C ; =0x04000501
mov r0, #0x80
ldrb r1, [r2]
bic r1, r1, #0x80
strb r1, [r2]
bl sub_037FE754
mov r0, #0x40000
bl sub_037FDD64
mov r0, #1
bl sub_03804D64
ldr r1, _037FE750 ; =0x04000304
ldrh r0, [r1]
bic r0, r0, #1
strh r0, [r1]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FE74C: .word 0x04000501
_037FE750: .word 0x04000304
arm_func_end sub_037FE708
arm_func_start sub_037FE754
sub_037FE754: ; 0x037FE754
ldr ip, _037FE75C ; =sub_038037E6
bx ip
.align 2, 0
_037FE75C: .word sub_038037E6 + 1
arm_func_end sub_037FE754
arm_func_start sub_037FE760
sub_037FE760: ; 0x037FE760
stmdb sp!, {r3, lr}
ldr r2, _037FE7A4 ; =0x04000304
mov r0, #1
ldrh r1, [r2]
orr r1, r1, #1
strh r1, [r2]
bl sub_03804D40
mov r0, #0x100
bl sub_037FE7B0
ldr r0, _037FE7A8 ; =0x0007AB80
bl sub_037FDD64
ldr r1, _037FE7AC ; =0x04000501
ldrb r0, [r1]
orr r0, r0, #0x80
strb r0, [r1]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FE7A4: .word 0x04000304
_037FE7A8: .word 0x0007AB80
_037FE7AC: .word 0x04000501
arm_func_end sub_037FE760
arm_func_start sub_037FE7B0
sub_037FE7B0: ; 0x037FE7B0
ldr ip, _037FE7B8 ; =sub_038037DE
bx ip
.align 2, 0
_037FE7B8: .word sub_038037DE + 1
arm_func_end sub_037FE7B0
arm_func_start sub_037FE7BC
sub_037FE7BC: ; 0x037FE7BC
ldr r1, _037FE7C8 ; =0x04000500
strb r0, [r1]
bx lr
.align 2, 0
_037FE7C8: .word 0x04000500
arm_func_end sub_037FE7BC
arm_func_start sub_037FE7CC
sub_037FE7CC: ; 0x037FE7CC
ldr ip, _037FE800 ; =0x04000501
mov r3, r3, lsl #5
ldrb ip, [ip]
tst ip, #0x80
movne ip, #1
moveq ip, #0
orr r3, r3, ip, lsl #7
orr r2, r3, r2, lsl #4
orr r2, r2, r1, lsl #2
ldr r1, _037FE800 ; =0x04000501
orr r0, r0, r2
strb r0, [r1]
bx lr
.align 2, 0
_037FE800: .word 0x04000501
arm_func_end sub_037FE7CC
arm_func_start sub_037FE804
sub_037FE804: ; 0x037FE804
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r4, _037FE8BC ; =_03807558
mov r8, r1
ldr lr, [r4]
ldr r1, _037FE8C0 ; =_03807910
mov r7, r2
ldr r5, [sp, #0x2c]
ldr r4, _037FE8C4 ; =_03807914
ldr ip, [sp, #0x20]
ldr r2, _037FE8C8 ; =_03807924
strb r5, [r4, r0]
cmp lr, #0
ldr r1, [r1]
movge r5, lr
mov r6, r3
mov r4, r0, lsl #4
strb ip, [r2, r0]
cmp r1, #0
ble _037FE870
ldr r1, _037FE8CC ; =0x0000FFF5
mov r2, #1
tst r1, r2, lsl r0
beq _037FE870
mov r0, ip
mov r1, r5
bl sub_037FEC40
mov ip, r0
_037FE870:
ldr r2, [sp, #0x24]
mov r0, r6, lsl #0x1b
orr r0, r0, r7, lsl #29
orr r1, r0, r5, lsl #16
ldr r0, [sp, #0x28]
orr r2, r1, r2, lsl #8
add r1, r4, #0x4000000
orr r2, ip, r2
str r2, [r1, #0x400]
ldr r3, [sp, #0x18]
rsb r2, r0, #0x10000
add r0, r1, #0x400
strh r2, [r0, #8]
ldr r2, [sp, #0x1c]
strh r3, [r0, #0xa]
str r2, [r1, #0x40c]
str r8, [r1, #0x404]
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FE8BC: .word _03807558
_037FE8C0: .word _03807910
_037FE8C4: .word _03807914
_037FE8C8: .word _03807924
_037FE8CC: .word 0x0000FFF5
arm_func_end sub_037FE804
arm_func_start sub_037FE8D0
sub_037FE8D0: ; 0x037FE8D0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r4, _037FE968 ; =_03807558
mov r7, r1
ldr ip, [r4]
ldr r1, _037FE96C ; =_03807910
mov r6, r3
ldr r3, _037FE970 ; =_03807924
ldr r5, [sp, #0x1c]
ldr r4, _037FE974 ; =_03807914
ldr r1, [r1]
strb r5, [r4, r0]
cmp ip, #0
movge r5, ip
mov r4, r0, lsl #4
strb r2, [r3, r0]
cmp r1, #0
ble _037FE934
ldr r1, _037FE978 ; =0x0000FFF5
mov r3, #1
tst r1, r3, lsl r0
beq _037FE934
mov r0, r2
mov r1, r5
bl sub_037FEC40
mov r2, r0
_037FE934:
mov r0, r7, lsl #0x18
orr r0, r0, #0x60000000
orr r0, r0, r5, lsl #16
ldr r1, [sp, #0x18]
orr r3, r0, r6, lsl #8
add r0, r4, #0x4000000
orr r2, r2, r3
str r2, [r0, #0x400]
rsb r1, r1, #0x10000
add r0, r0, #0x400
strh r1, [r0, #8]
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FE968: .word _03807558
_037FE96C: .word _03807910
_037FE970: .word _03807924
_037FE974: .word _03807914
_037FE978: .word 0x0000FFF5
arm_func_end sub_037FE8D0
arm_func_start sub_037FE97C
sub_037FE97C: ; 0x037FE97C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r4, _037FEA0C ; =_03807558
mov r7, r2
ldr ip, [r4]
ldr r2, _037FEA10 ; =_03807910
mov r6, r3
ldr r3, _037FEA14 ; =_03807924
ldr r5, [sp, #0x18]
ldr r4, _037FEA18 ; =_03807914
ldr r2, [r2]
strb r5, [r4, r0]
cmp ip, #0
movge r5, ip
mov r4, r0, lsl #4
strb r1, [r3, r0]
cmp r2, #0
ble _037FE9E0
ldr r2, _037FEA1C ; =0x0000FFF5
mov r3, #1
tst r2, r3, lsl r0
beq _037FE9E0
mov r0, r1
mov r1, r5
bl sub_037FEC40
mov r1, r0
_037FE9E0:
mov r0, r5, lsl #0x10
orr r0, r0, #0x60000000
orr r2, r0, r7, lsl #8
add r0, r4, #0x4000000
orr r1, r1, r2
str r1, [r0, #0x400]
rsb r1, r6, #0x10000
add r0, r0, #0x400
strh r1, [r0, #8]
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_037FEA0C: .word _03807558
_037FEA10: .word _03807910
_037FEA14: .word _03807924
_037FEA18: .word _03807914
_037FEA1C: .word 0x0000FFF5
arm_func_end sub_037FE97C
arm_func_start sub_037FEA20
sub_037FEA20: ; 0x037FEA20
mov r3, r0, lsl #4
add r0, r3, #0x4000000
ldr r2, [r0, #0x400]
add r0, r3, #0x400
tst r1, #1
bic r1, r2, #0x80000000
add r0, r0, #0x4000000
orrne r1, r1, #0x8000
str r1, [r0]
bx lr
arm_func_end sub_037FEA20
arm_func_start sub_037FEA48
sub_037FEA48: ; 0x037FEA48
stmdb sp!, {r3, r4, r5, lr}
ldr r3, _037FEAB4 ; =_03807910
ldr ip, _037FEAB8 ; =_03807924
ldr r3, [r3]
mov r5, r0
mov r4, r2
strb r1, [ip, r5]
cmp r3, #0
ble _037FEA98
ldr r0, _037FEABC ; =0x0000FFF5
mov r2, #1
tst r0, r2, lsl r5
beq _037FEA98
mov r0, r5, lsl #4
add r0, r0, #0x4000000
ldrb r2, [r0, #0x402]
mov r0, r1
mov r1, r2
bl sub_037FEC40
mov r1, r0
_037FEA98:
mov r0, r5, lsl #4
add r0, r0, #0x4000000
orr r1, r1, r4, lsl #8
add r0, r0, #0x400
strh r1, [r0]
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_037FEAB4: .word _03807910
_037FEAB8: .word _03807924
_037FEABC: .word 0x0000FFF5
arm_func_end sub_037FEA48
arm_func_start sub_037FEAC0
sub_037FEAC0: ; 0x037FEAC0
mov r0, r0, lsl #4
add r0, r0, #0x4000000
rsb r1, r1, #0x10000
add r0, r0, #0x400
strh r1, [r0, #8]
bx lr
arm_func_end sub_037FEAC0
arm_func_start sub_037FEAD8
sub_037FEAD8: ; 0x037FEAD8
stmdb sp!, {r4, lr}
ldr r2, _037FEB3C ; =_03807558
ldr r3, _037FEB40 ; =_03807914
ldr r2, [r2]
strb r1, [r3, r0]
cmp r2, #0
ldr r3, _037FEB44 ; =_03807910
mov r4, r0, lsl #4
movge r1, r2
add r2, r4, #0x4000000
strb r1, [r2, #0x402]
ldr r2, [r3]
cmp r2, #0
ble _037FEB34
ldr r2, _037FEB48 ; =0x0000FFF5
mov r3, #1
tst r2, r3, lsl r0
beq _037FEB34
ldr r2, _037FEB4C ; =_03807924
ldrb r0, [r2, r0]
bl sub_037FEC40
add r1, r4, #0x4000000
strb r0, [r1, #0x400]
_037FEB34:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FEB3C: .word _03807558
_037FEB40: .word _03807914
_037FEB44: .word _03807910
_037FEB48: .word 0x0000FFF5
_037FEB4C: .word _03807924
arm_func_end sub_037FEAD8
arm_func_start sub_037FEB50
sub_037FEB50: ; 0x037FEB50
mov r0, r0, lsl #4
add r0, r0, #0x4000000
ldrb r0, [r0, #0x403]
tst r0, #0x80
movne r0, #1
moveq r0, #0
bx lr
arm_func_end sub_037FEB50
arm_func_start sub_037FEB6C
sub_037FEB6C: ; 0x037FEB6C
ldr r1, _037FEBC8 ; =_03807558
cmp r0, #0
str r0, [r1]
blt _037FEBA0
mov r2, #0
and r1, r0, #0xff
_037FEB84:
mov r0, r2, lsl #4
add r0, r0, #0x4000000
add r2, r2, #1
strb r1, [r0, #0x402]
cmp r2, #0x10
blt _037FEB84
bx lr
_037FEBA0:
ldr r2, _037FEBCC ; =_03807914
mov r3, #0
_037FEBA8:
ldrb r1, [r2, r3]
mov r0, r3, lsl #4
add r0, r0, #0x4000000
add r3, r3, #1
strb r1, [r0, #0x402]
cmp r3, #0x10
blt _037FEBA8
bx lr
.align 2, 0
_037FEBC8: .word _03807558
_037FEBCC: .word _03807914
arm_func_end sub_037FEB6C
arm_func_start sub_037FEBD0
sub_037FEBD0: ; 0x037FEBD0
mov r0, r0, lsl #4
add r0, r0, #0x4000000
ldr r0, [r0, #0x400]
bx lr
arm_func_end sub_037FEBD0
arm_func_start sub_037FEBE0
sub_037FEBE0: ; 0x037FEBE0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r1, _037FEC34 ; =_03807910
ldr r5, _037FEC38 ; =_03807924
ldr r4, _037FEC3C ; =0x0000FFF5
str r0, [r1]
mov r7, #0
mov r6, #1
_037FEBFC:
tst r4, r6, lsl r7
beq _037FEC20
mov r8, r7, lsl #4
add r0, r8, #0x4000000
ldrb r1, [r0, #0x402]
ldrb r0, [r5, r7]
bl sub_037FEC40
add r1, r8, #0x4000000
strb r0, [r1, #0x400]
_037FEC20:
add r7, r7, #1
cmp r7, #0x10
blt _037FEBFC
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_037FEC34: .word _03807910
_037FEC38: .word _03807924
_037FEC3C: .word 0x0000FFF5
arm_func_end sub_037FEBE0
arm_func_start sub_037FEC40
sub_037FEC40: ; 0x037FEC40
cmp r1, #0x18
bge _037FEC70
ldr r2, _037FECA4 ; =_03807910
add r3, r1, #0x28
ldr ip, [r2]
ldr r1, _037FECA8 ; =0x00007FFF
mul r2, ip, r3
sub r1, r1, ip
add r1, r2, r1, lsl #6
mul r1, r0, r1
mov r0, r1, asr #0x15
bx lr
_037FEC70:
cmp r1, #0x68
bxle lr
ldr r2, _037FECA4 ; =_03807910
sub r1, r1, #0x28
ldr ip, [r2]
rsb r2, ip, #0
mul r3, r2, r1
add r1, ip, #0xff
add r1, r1, #0x7f00
add r1, r3, r1, lsl #6
mul r1, r0, r1
mov r0, r1, asr #0x15
bx lr
.align 2, 0
_037FECA4: .word _03807910
_037FECA8: .word 0x00007FFF
arm_func_end sub_037FEC40
arm_func_start sub_037FECAC
sub_037FECAC: ; 0x037FECAC
stmdb sp!, {r4, r5, r6, lr}
mov r5, r0
rsb r0, r1, #0
mov r4, #0
b _037FECC8
_037FECC0:
sub r4, r4, #1
add r0, r0, #0x300
_037FECC8:
cmp r0, #0
blt _037FECC0
b _037FECDC
_037FECD4:
add r4, r4, #1
sub r0, r0, #0x300
_037FECDC:
cmp r0, #0x300
bge _037FECD4
bl sub_037FEDCC
adds r3, r0, #0x10000
mov r0, r5, asr #0x1f
umull r2, r1, r3, r5
mov ip, #0
mla r1, r3, r0, r1
adc r3, ip, #0
sub r0, r4, #0x10
mla r1, r3, r5, r1
cmp r0, #0
mov r4, #0x10000
bgt _037FED34
rsb r3, r0, #0
mov r4, r2, lsr r3
rsb r0, r3, #0x20
orr r4, r4, r1, lsl r0
sub r0, r3, #0x20
mov r3, r1, lsr r3
orr r4, r4, r1, lsr r0
b _037FED90
_037FED34:
cmp r0, #0x20
bge _037FED88
rsb r5, r0, #0x20
sub lr, ip, #1
mov r6, lr, lsl r5
rsb r3, r5, #0x20
orr r6, r6, lr, lsr r3
sub r3, r5, #0x20
orr r6, r6, lr, lsl r3
and r3, r1, r6
and r6, r2, lr, lsl r5
cmp r3, ip
cmpeq r6, ip
subne r0, r4, #1
bne _037FEDC0
mov r3, r1, lsl r0
orr r3, r3, r2, lsr r5
sub r1, r0, #0x20
mov r4, r2, lsl r0
orr r3, r3, r2, lsl r1
b _037FED90
_037FED88:
sub r0, r4, #1
b _037FEDC0
_037FED90:
mov r0, #0x10
cmp r3, #0
cmpeq r4, #0x10
mov r1, #0
movlo r4, r0
blo _037FEDB8
ldr r0, _037FEDC8 ; =0x0000FFFF
cmp r3, r1
cmpeq r4, r0
movhi r4, r0
_037FEDB8:
mov r0, r4, lsl #0x10
mov r0, r0, lsr #0x10
_037FEDC0:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_037FEDC8: .word 0x0000FFFF
arm_func_end sub_037FECAC
arm_func_start sub_037FEDCC
sub_037FEDCC: ; 0x037FEDCC
ldr ip, _037FEDD4 ; =sub_03803828
bx ip
.align 2, 0
_037FEDD4: .word sub_03803828 + 1
arm_func_end sub_037FEDCC
arm_func_start sub_037FEDD8
sub_037FEDD8: ; 0x037FEDD8
stmdb sp!, {r4, lr}
ldr r1, _037FEE48 ; =0xFFFFFD2D
mov r4, r0
cmp r4, r1
movlt r4, r1
blt _037FEDF8
cmp r4, #0
movgt r4, #0
_037FEDF8:
add r0, r4, #0xd3
add r0, r0, #0x200
bl sub_037FEE4C
mvn r2, #0xef
cmp r4, r2
movlt r1, #3
blt _037FEE34
add r1, r2, #0x78
cmp r4, r1
movlt r1, #2
blt _037FEE34
add r1, r2, #0xb4
cmp r4, r1
movlt r1, #1
movge r1, #0
_037FEE34:
orr r0, r0, r1, lsl #8
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FEE48: .word 0xFFFFFD2D
arm_func_end sub_037FEDD8
arm_func_start sub_037FEE4C
sub_037FEE4C: ; 0x037FEE4C
ldr ip, _037FEE54 ; =sub_0380382C
bx ip
.align 2, 0
_037FEE54: .word sub_0380382C + 1
arm_func_end sub_037FEE4C
arm_func_start sub_037FEE58
sub_037FEE58: ; 0x037FEE58
cmp r0, #0x20
ldrlt r1, _037FEEC0 ; =_03806FB8
ldrltsb r0, [r1, r0]
bxlt lr
cmp r0, #0x40
ldrlt r1, _037FEEC0 ; =_03806FB8
rsblt r0, r0, #0x40
ldrltsb r0, [r1, r0]
bxlt lr
cmp r0, #0x60
bge _037FEEA0
ldr r1, _037FEEC0 ; =_03806FB8
sub r0, r0, #0x40
ldrsb r0, [r1, r0]
rsb r0, r0, #0
mov r0, r0, lsl #0x18
mov r0, r0, asr #0x18
bx lr
_037FEEA0:
ldr r1, _037FEEC0 ; =_03806FB8
sub r0, r0, #0x60
rsb r0, r0, #0x20
ldrsb r0, [r1, r0]
rsb r0, r0, #0
mov r0, r0, lsl #0x18
mov r0, r0, asr #0x18
bx lr
.align 2, 0
_037FEEC0: .word _03806FB8
arm_func_end sub_037FEE58
arm_func_start sub_037FEEC4
sub_037FEEC4: ; 0x037FEEC4
ldr r2, _037FEEEC ; =_0380755C
ldr r0, _037FEEF0 ; =0x0019660D
ldr r3, [r2]
ldr r1, _037FEEF4 ; =0x3C6EF35F
mla r1, r3, r0, r1
mov r0, r1, lsr #0x10
mov r0, r0, lsl #0x10
str r1, [r2]
mov r0, r0, lsr #0x10
bx lr
.align 2, 0
_037FEEEC: .word _0380755C
_037FEEF0: .word 0x0019660D
_037FEEF4: .word 0x3C6EF35F
arm_func_end sub_037FEEC4
arm_func_start sub_037FEEF8
sub_037FEEF8: ; 0x037FEEF8
stmdb sp!, {r4, lr}
sub sp, sp, #8
ldr r1, _037FEF54 ; =_03807934
mov r4, r0
ldr r0, [r1]
cmp r0, #0
bne _037FEF48
mov r0, #1
str r0, [r1]
bl sub_03801ED8
mov r0, #0x400
str r0, [sp]
ldr r0, _037FEF58 ; =_038079A4
ldr r1, _037FEF5C ; =sub_037FF008
ldr r3, _037FEF60 ; =_03807E48
mov r2, #0
str r4, [sp, #4]
bl sub_037FC054
ldr r0, _037FEF58 ; =_038079A4
bl sub_037FC36C
_037FEF48:
add sp, sp, #8
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_037FEF54: .word _03807934
_037FEF58: .word _038079A4
_037FEF5C: .word sub_037FF008
_037FEF60: .word _03807E48
arm_func_end sub_037FEEF8
arm_func_start sub_037FEF64
sub_037FEF64: ; 0x037FEF64
stmdb sp!, {lr}
sub sp, sp, #0xc
bl GetCurrentPlaybackTime
ldr r3, _037FEFA8 ; =sub_037FEFEC
adds ip, r0, #0x10000
str r3, [sp, #4]
mov lr, #0
str lr, [sp, #8]
adc r2, r1, #0
ldr r3, _037FEFAC ; =0x00000AA8
ldr r0, _037FEFB0 ; =_03807978
mov r1, ip
str lr, [sp]
bl sub_037FD54C
add sp, sp, #0xc
ldmia sp!, {lr}
bx lr
.align 2, 0
_037FEFA8: .word sub_037FEFEC
_037FEFAC: .word 0x00000AA8
_037FEFB0: .word _03807978
arm_func_end sub_037FEF64
arm_func_start sub_037FEFB4
sub_037FEFB4: ; 0x037FEFB4
ldr ip, _037FEFC0 ; =sub_037FD5C0
ldr r0, _037FEFC4 ; =_03807978
bx ip
.align 2, 0
_037FEFC0: .word sub_037FD5C0
_037FEFC4: .word _03807978
arm_func_end sub_037FEFB4
arm_func_start sub_037FEFC8
sub_037FEFC8: ; 0x037FEFC8
ldr ip, _037FEFDC ; =sub_037FC6D4
ldr r0, _037FEFE0 ; =_03807958
mov r1, #2
mov r2, #0
bx ip
.align 2, 0
_037FEFDC: .word sub_037FC6D4
_037FEFE0: .word _03807958
arm_func_end sub_037FEFC8
arm_func_start sub_037FEFE4
sub_037FEFE4: ; 0x037FEFE4
bx lr
arm_func_end sub_037FEFE4
arm_func_start sub_037FEFE8
sub_037FEFE8: ; 0x037FEFE8
bx lr
arm_func_end sub_037FEFE8
arm_func_start sub_037FEFEC
sub_037FEFEC: ; 0x037FEFEC
ldr ip, _037FF000 ; =sub_037FC6D4
ldr r0, _037FF004 ; =_03807958
mov r1, #1
mov r2, #0
bx ip
.align 2, 0
_037FF000: .word sub_037FC6D4
_037FF004: .word _03807958
arm_func_end sub_037FEFEC
arm_func_start sub_037FF008
sub_037FF008: ; 0x037FF008
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0x10
ldr r0, _037FF0E8 ; =_03807958
ldr r1, _037FF0EC ; =_03807938
mov r2, #8
bl sub_037FC6AC
ldr r0, _037FF0F0 ; =_03807978
bl sub_037FD3A0
bl sub_037FF164
bl sub_037FFEF0
bl sub_03801D24
bl sub_037FE69C
mov r0, #0
mov r1, r0
mov r2, r0
mov r3, r0
bl sub_037FE7CC
mov r0, #0x7f
bl sub_037FE7BC
bl GetCurrentPlaybackTime
ldr r2, _037FF0F4 ; =sub_037FEFEC
adds r4, r0, #0x10000
str r2, [sp, #4]
mov r0, #0
str r0, [sp, #8]
str r0, [sp]
adc r2, r1, #0
ldr r3, _037FF0F8 ; =0x00000AA8
ldr r0, _037FF0F0 ; =_03807978
mov r1, r4
bl sub_037FD54C
ldr r7, _037FF0E8 ; =_03807958
mov r4, #1
add r6, sp, #0xc
mov r8, #0
mov r5, r4
_037FF098:
mov r0, r7
mov r1, r6
mov r2, r5
mov sb, r8
bl sub_037FC760
ldr r0, [sp, #0xc]
cmp r0, #1
beq _037FF0C0
cmp r0, #2
b _037FF0C4
_037FF0C0:
mov sb, r4
_037FF0C4:
bl sub_037FF1C0
bl sub_03801F1C
mov r0, sb
bl sub_037FFF54
mov r0, sb
bl sub_037FF3AC
bl sub_03801C8C
bl sub_037FEEC4
b _037FF098
.align 2, 0
_037FF0E8: .word _03807958
_037FF0EC: .word _03807938
_037FF0F0: .word _03807978
_037FF0F4: .word sub_037FEFEC
_037FF0F8: .word 0x00000AA8
arm_func_end sub_037FF008
arm_func_start sub_037FF0FC
sub_037FF0FC: ; 0x037FF0FC
stmdb sp!, {r3, r4, r5, lr}
ldr r4, [sp, #0x10]
mov r5, r0, lsl #3
cmp r4, #0
movne r4, #0
moveq r4, #1
mov ip, r4, lsl #2
ldr lr, [sp, #0x14]
orr r1, ip, r1, lsl #3
orr ip, r1, lr, lsl #1
ldr r4, [sp, #0x18]
add r0, r0, #0x4000000
orr r4, r4, ip
strb r4, [r0, #0x508]
add r1, r5, #0x4000000
str r2, [r1, #0x510]
add r0, r1, #0x500
strh r3, [r0, #0x14]
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_037FF0FC
arm_func_start sub_037FF14C
sub_037FF14C: ; 0x037FF14C
add r0, r0, #0x4000000
ldrb r0, [r0, #0x508]
tst r0, #0x80
movne r0, #1
moveq r0, #0
bx lr
arm_func_end sub_037FF14C
arm_func_start sub_037FF164
sub_037FF164: ; 0x037FF164
stmdb sp!, {r3, lr}
ldr r3, _037FF1B8 ; =_03807E70
mov lr, #0
mov r0, #0x54
_037FF174:
mul r1, lr, r0
add ip, r3, r1
strb lr, [r3, r1]
ldrb r1, [ip, #3]
add lr, lr, #1
bic r2, r1, #0xf8
and r1, r2, #0xff
bic r1, r1, #1
strb r1, [ip, #3]
cmp lr, #0x10
blt _037FF174
ldr r0, _037FF1BC ; =_03807E48
mov r1, #0
str r1, [r0, #4]
str r1, [r0]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FF1B8: .word _03807E70
_037FF1BC: .word _03807E48
arm_func_end sub_037FF164
arm_func_start sub_037FF1C0
sub_037FF1C0: ; 0x037FF1C0
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x18
ldr r7, _037FF3A8 ; =_03807E70
mov sb, #0
mov r4, #2
mov r5, #1
mov r6, sb
mov sl, #0x54
_037FF1E0:
mla r8, sb, sl, r7
ldrb r0, [r8, #3]
mov r0, r0, lsl #0x18
movs r0, r0, lsr #0x1b
beq _037FF340
tst r0, #2
beq _037FF208
mov r0, sb
mov r1, r6
bl sub_037FEA20
_037FF208:
ldrb r0, [r8, #3]
mov r0, r0, lsl #0x18
mov r0, r0, lsr #0x1b
tst r0, #1
beq _037FF2E4
ldrb r0, [r8, #1]
cmp r0, #0
beq _037FF23C
cmp r0, #1
beq _037FF294
cmp r0, #2
beq _037FF2C0
b _037FF340
_037FF23C:
ldrb r0, [r8, #0x39]
ldrh ip, [r8, #0x24]
cmp r0, #0
ldrh r0, [r8, #0x3e]
movne r3, r5
str r0, [sp]
ldr r2, [r8, #0x40]
and r1, ip, #0xff
str r2, [sp, #4]
str r1, [sp, #8]
mov r0, ip, asr #8
str r0, [sp, #0xc]
ldrh r1, [r8, #0x26]
moveq r3, r4
str r1, [sp, #0x10]
ldrb r1, [r8, #0x23]
mov r0, sb
str r1, [sp, #0x14]
ldr r1, [r8, #0x44]
ldrb r2, [r8, #0x38]
bl sub_037FE804
b _037FF340
_037FF294:
ldrh r3, [r8, #0x24]
ldrh r1, [r8, #0x26]
mov r0, sb
str r1, [sp]
ldrb r1, [r8, #0x23]
and r2, r3, #0xff
str r1, [sp, #4]
ldr r1, [r8, #0x44]
mov r3, r3, asr #8
bl sub_037FE8D0
b _037FF340
_037FF2C0:
ldrh r2, [r8, #0x24]
ldrb r1, [r8, #0x23]
mov r0, sb
str r1, [sp]
ldrh r3, [r8, #0x26]
and r1, r2, #0xff
mov r2, r2, asr #8
bl sub_037FE97C
b _037FF340
_037FF2E4:
tst r0, #4
beq _037FF2F8
ldrh r1, [r8, #0x26]
mov r0, sb
bl sub_037FEAC0
_037FF2F8:
ldrb r0, [r8, #3]
mov r0, r0, lsl #0x18
mov r0, r0, lsr #0x1b
tst r0, #8
beq _037FF320
ldrh r2, [r8, #0x24]
mov r0, sb
and r1, r2, #0xff
mov r2, r2, asr #8
bl sub_037FEA48
_037FF320:
ldrb r0, [r8, #3]
mov r0, r0, lsl #0x18
mov r0, r0, lsr #0x1b
tst r0, #0x10
beq _037FF340
ldrb r1, [r8, #0x23]
mov r0, sb
bl sub_037FEAD8
_037FF340:
add sb, sb, #1
cmp sb, #0x10
blt _037FF1E0
ldr r3, _037FF3A8 ; =_03807E70
mov r4, #0
mov r1, #0x54
_037FF358:
mla r5, r4, r1, r3
ldrb r0, [r5, #3]
mov r0, r0, lsl #0x18
movs r0, r0, lsr #0x1b
beq _037FF390
tst r0, #1
movne r0, r4, lsl #4
addne r0, r0, #0x4000000
ldrneb r2, [r0, #0x403]
orrne r2, r2, #0x80
strneb r2, [r0, #0x403]
ldrb r0, [r5, #3]
bic r0, r0, #0xf8
strb r0, [r5, #3]
_037FF390:
add r4, r4, #1
cmp r4, #0x10
blt _037FF358
add sp, sp, #0x18
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_037FF3A8: .word _03807E70
arm_func_end sub_037FF1C0
arm_func_start sub_037FF3AC
sub_037FF3AC: ; 0x037FF3AC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov fp, #0x8000
mov sl, r0
mov r5, #0
rsb fp, fp, #0
_037FF3C0:
ldr r0, _037FF750 ; =_03807E70
mov r1, #0x54
mla r4, r5, r1, r0
ldrb r2, [r4, #3]
mov r6, #0
mov r0, r2, lsl #0x1f
mov r7, r6
mov r8, r6
movs r0, r0, lsr #0x1f
beq _037FF73C
mov r0, r2, lsl #0x1e
movs r0, r0, lsr #0x1f
beq _037FF424
bic r1, r2, #0xf8
mov r0, r2, lsl #0x18
mov r0, r0, lsr #0x1b
orr r0, r0, #1
and r0, r0, #0xff
mov r0, r0, lsl #0x1b
orr r0, r1, r0, lsr #24
strb r0, [r4, #3]
and r0, r0, #0xff
bic r0, r0, #2
strb r0, [r4, #3]
b _037FF474
_037FF424:
mov r0, r5
bl sub_037FEB50
cmp r0, #0
bne _037FF474
ldr r3, [r4, #0x48]
cmp r3, #0
moveq r0, r6
streqb r0, [r4, #0x22]
beq _037FF45C
ldr r2, [r4, #0x4c]
mov r0, r4
mov r1, #1
mov lr, pc
bx r3
_037FF45C:
mov r0, #0
strh r0, [r4, #0x24]
ldrb r0, [r4, #3]
bic r0, r0, #1
strb r0, [r4, #3]
b _037FF73C
_037FF474:
ldrb r0, [r4, #9]
ldrb r1, [r4, #8]
mov r2, r0, lsl #1
ldr r0, _037FF754 ; =_03806FDC
ldrsh r2, [r0, r2]
ldrb r0, [r4, #5]
add r6, r6, r2
sub r0, r1, r0
add r7, r7, r0, lsl #6
mov r0, r4
mov r1, sl
bl sub_037FF82C
ldrsh r3, [r4, #0x32]
add r6, r6, r0
cmp r3, #0
moveq r0, #0
beq _037FF4FC
ldr r0, [r4, #0x14]
ldr r2, [r4, #0x18]
cmp r0, r2
movge r0, #0
bge _037FF4FC
sub r0, r2, r0
smull r0, r1, r3, r0
mov r3, r2, asr #0x1f
bl sub_038069D0
cmp sl, #0
beq _037FF4FC
ldrb r1, [r4, #3]
mov r1, r1, lsl #0x1d
movs r1, r1, lsr #0x1f
ldrne r1, [r4, #0x14]
addne r1, r1, #1
strne r1, [r4, #0x14]
_037FF4FC:
ldrsh r1, [r4, #0xc]
add r2, r7, r0
ldrsh r0, [r4, #6]
add r1, r6, r1
add r6, r1, r0
ldrsh r1, [r4, #0xe]
add r0, r4, #0x28
add r7, r2, r1
bl sub_037FFE14
mov r1, r0, asr #0x1f
cmp r1, #0
mov sb, r0
cmpeq r0, #0
beq _037FF590
ldrb r2, [r4, #0x28]
cmp r2, #0
beq _037FF57C
cmp r2, #1
beq _037FF55C
cmp r2, #2
moveq r1, r1, lsl #6
orreq r1, r1, r0, lsr #26
moveq sb, r0, lsl #6
b _037FF588
_037FF55C:
mov r2, #0x3c
umull sb, r3, r0, r2
mov r2, #0
mla r3, r0, r2, r3
mov r0, #0x3c
mla r3, r1, r0, r3
mov r1, r3
b _037FF588
_037FF57C:
mov r1, r1, lsl #6
orr r1, r1, r0, lsr #26
mov sb, r0, lsl #6
_037FF588:
mov sb, sb, lsr #0xe
orr sb, sb, r1, lsl #18
_037FF590:
cmp sl, #0
beq _037FF5A0
add r0, r4, #0x28
bl sub_037FFDB4
_037FF5A0:
ldrb r0, [r4, #0x28]
cmp r0, #0
beq _037FF5CC
cmp r0, #1
beq _037FF5C0
cmp r0, #2
addeq r8, r8, sb
b _037FF5D0
_037FF5C0:
cmp r6, fp
addgt r6, r6, sb
b _037FF5D0
_037FF5CC:
add r7, r7, sb
_037FF5D0:
ldrsb r1, [r4, #0xa]
ldrb r0, [r4, #4]
add r8, r8, r1
cmp r0, #0x7f
mulne r0, r8, r0
addne r0, r0, #0x40
movne r8, r0, asr #7
ldrsb r1, [r4, #0xb]
ldrb r0, [r4, #2]
add r8, r8, r1
cmp r0, #3
bne _037FF65C
ldr r0, _037FF758 ; =0xFFFFFD2D
cmp r6, r0
bgt _037FF65C
ldrb r0, [r4, #3]
bic r0, r0, #0xf8
orr r0, r0, #0x10
strb r0, [r4, #3]
ldr r3, [r4, #0x48]
cmp r3, #0
moveq r0, #0
streqb r0, [r4, #0x22]
beq _037FF644
ldr r2, [r4, #0x4c]
mov r0, r4
mov r1, #1
mov lr, pc
bx r3
_037FF644:
mov r0, #0
strh r0, [r4, #0x24]
ldrb r0, [r4, #3]
bic r0, r0, #1
strb r0, [r4, #3]
b _037FF73C
_037FF65C:
mov r0, r6
bl sub_037FEDD8
mov r6, r0
ldrh r0, [r4, #0x3c]
mov r1, r7
bl sub_037FECAC
ldrb r1, [r4, #1]
cmp r1, #1
ldreq r1, _037FF75C ; =0x0000FFFC
andeq r0, r0, r1
moveq r0, r0, lsl #0x10
moveq r0, r0, lsr #0x10
adds r8, r8, #0x40
movmi r8, #0
bmi _037FF6A0
cmp r8, #0x7f
movgt r8, #0x7f
_037FF6A0:
ldrh r1, [r4, #0x24]
cmp r6, r1
beq _037FF6D4
strh r6, [r4, #0x24]
ldrb r1, [r4, #3]
bic r2, r1, #0xf8
mov r1, r1, lsl #0x18
mov r1, r1, lsr #0x1b
orr r1, r1, #8
and r1, r1, #0xff
mov r1, r1, lsl #0x1b
orr r1, r2, r1, lsr #24
strb r1, [r4, #3]
_037FF6D4:
ldrh r1, [r4, #0x26]
cmp r0, r1
beq _037FF708
strh r0, [r4, #0x26]
ldrb r0, [r4, #3]
bic r1, r0, #0xf8
mov r0, r0, lsl #0x18
mov r0, r0, lsr #0x1b
orr r0, r0, #4
and r0, r0, #0xff
mov r0, r0, lsl #0x1b
orr r0, r1, r0, lsr #24
strb r0, [r4, #3]
_037FF708:
ldrb r0, [r4, #0x23]
cmp r8, r0
beq _037FF73C
strb r8, [r4, #0x23]
ldrb r0, [r4, #3]
bic r1, r0, #0xf8
mov r0, r0, lsl #0x18
mov r0, r0, lsr #0x1b
orr r0, r0, #0x10
and r0, r0, #0xff
mov r0, r0, lsl #0x1b
orr r0, r1, r0, lsr #24
strb r0, [r4, #3]
_037FF73C:
add r5, r5, #1
cmp r5, #0x10
blt _037FF3C0
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FF750: .word _03807E70
_037FF754: .word _03806FDC
_037FF758: .word 0xFFFFFD2D
_037FF75C: .word 0x0000FFFC
arm_func_end sub_037FF3AC
arm_func_start sub_037FF760
sub_037FF760: ; 0x037FF760
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0
strb r0, [r4, #1]
mov lr, r2
add ip, r4, #0x38
ldmia r1, {r0, r1, r2}
stmia ip, {r0, r1, r2}
mov r0, r4
mov r1, r3
str lr, [r4, #0x44]
bl sub_037FFEB8
mov r0, #1
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_037FF760
arm_func_start sub_037FF79C
sub_037FF79C: ; 0x037FF79C
stmdb sp!, {r3, lr}
ldrb r3, [r0]
cmp r3, #8
movlo r0, #0
blo _037FF7DC
cmp r3, #0xd
movhi r0, #0
bhi _037FF7DC
mov r3, #1
strb r3, [r0, #1]
str r1, [r0, #0x44]
ldr r3, _037FF7E4 ; =0x00001F46
mov r1, r2
strh r3, [r0, #0x3c]
bl sub_037FFEB8
mov r0, #1
_037FF7DC:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FF7E4: .word 0x00001F46
arm_func_end sub_037FF79C
arm_func_start sub_037FF7E8
sub_037FF7E8: ; 0x037FF7E8
stmdb sp!, {r3, lr}
ldrb r2, [r0]
cmp r2, #0xe
movlo r0, #0
blo _037FF820
cmp r2, #0xf
movhi r0, #0
bhi _037FF820
ldr r2, _037FF828 ; =0x00001F46
mov r3, #2
strb r3, [r0, #1]
strh r2, [r0, #0x3c]
bl sub_037FFEB8
mov r0, #1
_037FF820:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FF828: .word 0x00001F46
arm_func_end sub_037FF7E8
arm_func_start sub_037FF82C
sub_037FF82C: ; 0x037FF82C
cmp r1, #0
beq _037FF8C4
ldrb r1, [r0, #2]
cmp r1, #3
addls pc, pc, r1, lsl #2
b _037FF8C4
_037FF844: ; jump table
b _037FF854 ; case 0
b _037FF87C ; case 1
b _037FF8C4 ; case 2
b _037FF8B4 ; case 3
_037FF854:
ldr r2, [r0, #0x10]
ldrb r1, [r0, #0x1c]
rsb r2, r2, #0
mul r1, r2, r1
mov r1, r1, asr #8
rsbs r1, r1, #0
str r1, [r0, #0x10]
moveq r1, #1
streqb r1, [r0, #2]
b _037FF8C4
_037FF87C:
ldrb r2, [r0, #0x1d]
ldr r1, _037FF8D0 ; =_03806FDC
mov r2, r2, lsl #1
ldrsh r3, [r1, r2]
ldr r2, [r0, #0x10]
ldrh r1, [r0, #0x1e]
mov ip, r3, lsl #7
sub r1, r2, r1
str r1, [r0, #0x10]
cmp r1, r3, lsl #7
strle ip, [r0, #0x10]
movle r1, #2
strleb r1, [r0, #2]
b _037FF8C4
_037FF8B4:
ldr r2, [r0, #0x10]
ldrh r1, [r0, #0x20]
sub r1, r2, r1
str r1, [r0, #0x10]
_037FF8C4:
ldr r0, [r0, #0x10]
mov r0, r0, asr #7
bx lr
.align 2, 0
_037FF8D0: .word _03806FDC
arm_func_end sub_037FF82C
arm_func_start sub_037FF8D4
sub_037FF8D4: ; 0x037FF8D4
cmp r1, #0x6d
ldrge r2, _037FF8F0 ; =_038071F0
rsblt r1, r1, #0xff
rsbge r1, r1, #0x7f
ldrgeb r1, [r2, r1]
strb r1, [r0, #0x1c]
bx lr
.align 2, 0
_037FF8F0: .word _038071F0
arm_func_end sub_037FF8D4
arm_func_start sub_037FF8F4
sub_037FF8F4: ; 0x037FF8F4
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, r1
bl sub_037FFE64
strh r0, [r4, #0x1e]
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_037FF8F4
arm_func_start sub_037FF910
sub_037FF910: ; 0x037FF910
strb r1, [r0, #0x1d]
bx lr
arm_func_end sub_037FF910
arm_func_start sub_037FF918
sub_037FF918: ; 0x037FF918
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, r1
bl sub_037FFE64
strh r0, [r4, #0x20]
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_037FF918
arm_func_start sub_037FF934
sub_037FF934: ; 0x037FF934
mov r1, #3
strb r1, [r0, #2]
bx lr
arm_func_end sub_037FF934
arm_func_start sub_037FF940
sub_037FF940: ; 0x037FF940
ldrb r0, [r0, #3]
mov r0, r0, lsl #0x1f
mov r0, r0, lsr #0x1f
bx lr
arm_func_end sub_037FF940
arm_func_start sub_037FF950
sub_037FF950: ; 0x037FF950
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr r4, _037FFB08 ; =_03807E48
mov r6, r1
ldr r1, [r4, #4]
mov r5, r3
mvn r1, r1
cmp r2, #0
and r0, r0, r1
ldreq r1, [r4]
mov r4, #0
mvneq r1, r1
andeq r0, r0, r1
ldr r3, _037FFB0C ; =_038071DC
ldr r8, _037FFB10 ; =_038071E0
mov sb, r4
mvn r1, #0
mov fp, #1
_037FF994:
ldrb ip, [r8, sb]
tst r0, fp, lsl ip
beq _037FFA14
ldr r2, _037FFB14 ; =_03807E70
mov r7, #0x54
mla sl, ip, r7, r2
cmp r4, #0
moveq r4, sl
beq _037FFA14
ldrb r7, [r4, #0x22]
ldrb r2, [sl, #0x22]
cmp r2, r7
bhi _037FFA14
bne _037FFA10
ldrh r2, [r4, #0x24]
ldrh r7, [sl, #0x24]
mov ip, r2, lsl #0x18
mov ip, ip, lsr #0x14
ldrb r2, [r3, r2, asr #8]
mov lr, r7, lsl #0x18
mov r2, ip, asr r2
mov ip, lr, lsr #0x14
ldrb r7, [r3, r7, asr #8]
cmp r2, ip, asr r7
beq _037FFA04
movlt r2, fp
movge r2, r1
b _037FFA08
_037FFA04:
mov r2, #0
_037FFA08:
cmp r2, #0
bge _037FFA14
_037FFA10:
mov r4, sl
_037FFA14:
add sb, sb, #1
cmp sb, #0x10
blt _037FF994
cmp r4, #0
moveq r0, #0
beq _037FFB00
ldrb r0, [r4, #0x22]
cmp r6, r0
movlt r0, #0
blt _037FFB00
ldr r3, [r4, #0x48]
cmp r3, #0
beq _037FFA5C
ldr r2, [r4, #0x4c]
mov r0, r4
mov r1, #0
mov lr, pc
bx r3
_037FFA5C:
ldrb r0, [r4, #3]
mov r7, #0
bic r0, r0, #0xf8
orr r1, r0, #0x10
and r0, r1, #0xff
bic r0, r0, #1
strb r0, [r4, #3]
str r7, [r4, #0x50]
ldr r0, [sp, #0x28]
str r5, [r4, #0x48]
str r0, [r4, #0x4c]
str r7, [r4, #0x34]
strb r6, [r4, #0x22]
mov r3, #0x7f
strh r3, [r4, #0x24]
ldrb r1, [r4, #3]
mov r0, #0x3c
bic r2, r1, #2
and r1, r2, #0xff
orr r1, r1, #4
strb r1, [r4, #3]
strb r0, [r4, #8]
strb r0, [r4, #5]
strb r3, [r4, #9]
strb r7, [r4, #0xa]
strh r7, [r4, #0xc]
strh r7, [r4, #6]
strh r7, [r4, #0xe]
strb r7, [r4, #0xb]
strb r3, [r4, #4]
strh r7, [r4, #0x32]
str r7, [r4, #0x18]
str r7, [r4, #0x14]
ldr r1, _037FFB18 ; =0x0000FFFF
strb r7, [r4, #0x1c]
strh r1, [r4, #0x1e]
strb r3, [r4, #0x1d]
add r0, r4, #0x28
strh r1, [r4, #0x20]
bl sub_037FFD90
mov r0, r4
_037FFB00:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FFB08: .word _03807E48
_037FFB0C: .word _038071DC
_037FFB10: .word _038071E0
_037FFB14: .word _03807E70
_037FFB18: .word 0x0000FFFF
arm_func_end sub_037FF950
arm_func_start sub_037FFB1C
sub_037FFB1C: ; 0x037FFB1C
cmp r0, #0
movne r1, #0
strne r1, [r0, #0x48]
strne r1, [r0, #0x4c]
bx lr
arm_func_end sub_037FFB1C
arm_func_start sub_037FFB30
sub_037FFB30: ; 0x037FFB30
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sb, #0
ldr r7, _037FFBD8 ; =_03807E70
ldr r4, _037FFBDC ; =_03807E48
mov sl, r0
mov r5, sb
mov r6, #1
mov fp, #0x54
b _037FFBC0
_037FFB54:
tst sl, #1
beq _037FFBB8
ldr r0, [r4, #4]
mla r8, sb, fp, r7
tst r0, r6, lsl sb
bne _037FFBB8
ldr r3, [r8, #0x48]
cmp r3, #0
beq _037FFB8C
ldr r2, [r8, #0x4c]
mov r0, r8
mov r1, #0
mov lr, pc
bx r3
_037FFB8C:
mov r0, sb
mov r1, #0
bl sub_037FEA20
strb r5, [r8, #0x22]
mov r0, r8
bl sub_037FFB1C
ldrb r0, [r8, #3]
bic r1, r0, #0xf8
and r0, r1, #0xff
bic r0, r0, #1
strb r0, [r8, #3]
_037FFBB8:
add sb, sb, #1
mov sl, sl, lsr #1
_037FFBC0:
cmp sb, #0x10
bge _037FFBD0
cmp sl, #0
bne _037FFB54
_037FFBD0:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FFBD8: .word _03807E70
_037FFBDC: .word _03807E48
arm_func_end sub_037FFB30
arm_func_start sub_037FFBE0
sub_037FFBE0: ; 0x037FFBE0
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
mov r8, #0
ldr r5, _037FFCB8 ; =_03807E70
mov sb, r1
mov r7, sl
mov fp, r8
mov r4, #1
b _037FFC7C
_037FFC04:
tst r7, #1
beq _037FFC74
ldr r0, _037FFCBC ; =_03807E48
ldr r1, [r0, #4]
mov r0, #0x54
mla r6, r8, r0, r5
tst r1, r4, lsl r8
bne _037FFC74
ldr r3, [r6, #0x48]
cmp r3, #0
beq _037FFC44
ldr r2, [r6, #0x4c]
mov r0, r6
mov r1, #0
mov lr, pc
bx r3
_037FFC44:
mov r0, r8
mov r1, #0
bl sub_037FEA20
strb fp, [r6, #0x22]
mov r0, r6
bl sub_037FFB1C
ldrb r0, [r6, #3]
bic r0, r0, #0xf8
strb r0, [r6, #3]
and r0, r0, #0xff
bic r0, r0, #1
strb r0, [r6, #3]
_037FFC74:
add r8, r8, #1
mov r7, r7, lsr #1
_037FFC7C:
cmp r8, #0x10
bge _037FFC8C
cmp r7, #0
bne _037FFC04
_037FFC8C:
tst sb, #1
ldrne r0, _037FFCBC ; =_03807E48
ldrne r1, [r0]
orrne r1, r1, sl
strne r1, [r0]
ldreq r0, _037FFCBC ; =_03807E48
ldreq r1, [r0, #4]
orreq r1, r1, sl
streq r1, [r0, #4]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_037FFCB8: .word _03807E70
_037FFCBC: .word _03807E48
arm_func_end sub_037FFBE0
arm_func_start sub_037FFCC0
sub_037FFCC0: ; 0x037FFCC0
tst r1, #1
ldreq r1, _037FFCF4 ; =_03807E48
mvneq r0, r0
ldreq r2, [r1, #4]
andeq r0, r2, r0
streq r0, [r1, #4]
bxeq lr
ldr r1, _037FFCF4 ; =_03807E48
mvn r0, r0
ldr r2, [r1]
and r0, r2, r0
str r0, [r1]
bx lr
.align 2, 0
_037FFCF4: .word _03807E48
arm_func_end sub_037FFCC0
arm_func_start sub_037FFCF8
sub_037FFCF8: ; 0x037FFCF8
tst r0, #1
ldrne r0, _037FFD10 ; =_03807E48
ldrne r0, [r0]
ldreq r0, _037FFD10 ; =_03807E48
ldreq r0, [r0, #4]
bx lr
.align 2, 0
_037FFD10: .word _03807E48
arm_func_end sub_037FFCF8
arm_func_start sub_037FFD14
sub_037FFD14: ; 0x037FFD14
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r5, _037FFD8C ; =_03807E70
mov r6, #0
mov r8, r0
mov r7, r1
mov r4, r6
mov sb, #0x54
_037FFD30:
mla r2, r6, sb, r5
ldrb r1, [r2, #3]
mov r0, r1, lsl #0x1f
movs r0, r0, lsr #0x1f
beq _037FFD74
ldrb r0, [r2, #1]
cmp r0, #0
bne _037FFD74
ldr r0, [r2, #0x44]
cmp r8, r0
cmpls r0, r7
bhi _037FFD74
bic r3, r1, #2
mov r0, r6
mov r1, r4
strb r3, [r2, #3]
bl sub_037FEA20
_037FFD74:
add r0, r6, #1
and r6, r0, #0xff
cmp r6, #0x10
blo _037FFD30
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_037FFD8C: .word _03807E70
arm_func_end sub_037FFD14
arm_func_start sub_037FFD90
sub_037FFD90: ; 0x037FFD90
mov r2, #0
strb r2, [r0]
strb r2, [r0, #2]
mov r1, #1
strb r1, [r0, #3]
mov r1, #0x10
strb r1, [r0, #1]
strh r2, [r0, #4]
bx lr
arm_func_end sub_037FFD90
arm_func_start sub_037FFDB4
sub_037FFDB4: ; 0x037FFDB4
ldrh r2, [r0, #6]
ldrh r1, [r0, #4]
cmp r2, r1
addlo r1, r2, #1
strloh r1, [r0, #6]
bxlo lr
ldrh r1, [r0, #8]
ldrb r2, [r0, #1]
add r1, r1, r2, lsl #6
mov r3, r1, lsr #8
b _037FFDE4
_037FFDE0:
sub r3, r3, #0x80
_037FFDE4:
cmp r3, #0x80
bhs _037FFDE0
ldrh r1, [r0, #8]
add r1, r1, r2, lsl #6
strh r1, [r0, #8]
ldrh r1, [r0, #8]
and r1, r1, #0xff
strh r1, [r0, #8]
ldrh r1, [r0, #8]
orr r1, r1, r3, lsl #8
strh r1, [r0, #8]
bx lr
arm_func_end sub_037FFDB4
arm_func_start sub_037FFE14
sub_037FFE14: ; 0x037FFE14
stmdb sp!, {r4, lr}
mov r4, r0
ldrb r0, [r4, #2]
cmp r0, #0
moveq r0, #0
beq _037FFE5C
ldrh r1, [r4, #6]
ldrh r0, [r4, #4]
cmp r1, r0
movlo r0, #0
blo _037FFE5C
ldrh r0, [r4, #8]
mov r0, r0, lsr #8
bl sub_037FEE58
ldrb r1, [r4, #2]
ldrb r2, [r4, #3]
mul r0, r1, r0
mul r0, r2, r0
_037FFE5C:
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_037FFE14
arm_func_start sub_037FFE64
sub_037FFE64: ; 0x037FFE64
stmdb sp!, {r3, lr}
cmp r0, #0x7f
ldreq r0, _037FFEB4 ; =0x0000FFFF
beq _037FFEAC
cmp r0, #0x7e
moveq r0, #0x3c00
beq _037FFEAC
cmp r0, #0x32
movlt r0, r0, lsl #1
addlt r0, r0, #1
movlt r0, r0, lsl #0x10
movlt r0, r0, lsr #0x10
blt _037FFEAC
rsb r1, r0, #0x7e
mov r0, #0x1e00
bl _s32_div_f
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
_037FFEAC:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FFEB4: .word 0x0000FFFF
arm_func_end sub_037FFE64
arm_func_start sub_037FFEB8
sub_037FFEB8: ; 0x037FFEB8
ldr r3, _037FFEEC ; =0xFFFE9680
mov r2, #0
str r3, [r0, #0x10]
strb r2, [r0, #2]
str r1, [r0, #0x34]
strh r2, [r0, #0x30]
strh r2, [r0, #0x2e]
ldrb r1, [r0, #3]
orr r2, r1, #2
bic r1, r2, #1
orr r1, r1, #1
strb r1, [r0, #3]
bx lr
.align 2, 0
_037FFEEC: .word 0xFFFE9680
arm_func_end sub_037FFEB8
arm_func_start sub_037FFEF0
sub_037FFEF0: ; 0x037FFEF0
stmdb sp!, {r3, lr}
ldr r3, _037FFF4C ; =_038083B0
mov lr, #0
mov r0, #0x24
_037FFF00:
mul r2, lr, r0
ldrb r1, [r3, r2]
add ip, r3, r2
bic r1, r1, #1
strb r1, [r3, r2]
strb lr, [ip, #1]
add lr, lr, #1
cmp lr, #0x10
blt _037FFF00
ldr r1, _037FFF50 ; =_038085F0
mov r2, #0
_037FFF2C:
ldrb r0, [r1, r2, lsl #6]
bic r0, r0, #1
strb r0, [r1, r2, lsl #6]
add r2, r2, #1
cmp r2, #0x20
blt _037FFF2C
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_037FFF4C: .word _038083B0
_037FFF50: .word _038085F0
arm_func_end sub_037FFEF0
arm_func_start sub_037FFF54
sub_037FFF54: ; 0x037FFF54
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
mov r6, #0
mov sb, r0
mov r5, r6
_037FFF64:
mov r0, #0x24
mul r0, r5, r0
ldr r2, _038000AC ; =_038083B0
ldrb r1, [r2, r0]
add r4, r2, r0
mov r0, r1, lsl #0x1f
movs r0, r0, lsr #0x1f
beq _03800088
mov r0, r1, lsl #0x1e
movs r0, r0, lsr #0x1f
beq _03800074
cmp sb, #0
beq _03800040
mov r0, r1, lsl #0x1d
movs r0, r0, lsr #0x1f
bne _03800040
mov r8, #0
b _037FFFBC
_037FFFAC:
ldrh r0, [r4, #0x1c]
add r8, r8, #1
sub r0, r0, #0xf0
strh r0, [r4, #0x1c]
_037FFFBC:
ldrh r0, [r4, #0x1c]
cmp r0, #0xf0
bhs _037FFFAC
mov r7, #0
mov sl, #1
b _037FFFF8
_037FFFD4:
mov r0, r4
mov r1, sl
bl sub_03800CF0
cmp r0, #0
beq _037FFFF4
mov r0, r4
bl sub_03800B00
b _03800000
_037FFFF4:
add r7, r7, #1
_037FFFF8:
cmp r7, r8
blt _037FFFD4
_03800000:
ldr r0, _038000B0 ; =_03807E6C
ldr r2, [r0]
cmp r2, #0
beq _03800028
ldrb r1, [r4, #1]
mov r0, #0x24
mla r2, r1, r0, r2
ldr r0, [r2, #0x40]
add r0, r0, r7
str r0, [r2, #0x40]
_03800028:
ldrh r2, [r4, #0x18]
ldrh r1, [r4, #0x1a]
ldrh r0, [r4, #0x1c]
mul r1, r2, r1
add r0, r0, r1, asr #8
strh r0, [r4, #0x1c]
_03800040:
mov r8, #0
mov r7, #1
_03800048:
mov r0, r4
mov r1, r8
bl sub_03800A7C
cmp r0, #0
beq _03800068
mov r1, r4
mov r2, r7
bl sub_03800B98
_03800068:
add r8, r8, #1
cmp r8, #0x10
blt _03800048
_03800074:
ldrb r0, [r4]
mov r0, r0, lsl #0x1f
movs r0, r0, lsr #0x1f
movne r0, #1
orrne r6, r6, r0, lsl r5
_03800088:
add r5, r5, #1
cmp r5, #0x10
blt _037FFF64
ldr r0, _038000B0 ; =_03807E6C
ldr r0, [r0]
cmp r0, #0
strne r6, [r0, #4]
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_038000AC: .word _038083B0
_038000B0: .word _03807E6C
arm_func_end sub_037FFF54
arm_func_start sub_038000B4
sub_038000B4: ; 0x038000B4
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
mov sb, r0
mov r0, #0x24
mul r5, sb, r0
ldr r6, _03800284 ; =_038083B0
mov r8, r1
ldrb r0, [r6, r5]
mov r7, r2
mov r0, r0, lsl #0x1f
mov r4, r3
add r5, r6, r5
movs r0, r0, lsr #0x1f
beq _038000F0
mov r0, r5
bl sub_03800B00
_038000F0:
ldrb r1, [r5]
mov r0, #0x78
bic r1, r1, #4
strb r1, [r5]
str r4, [r5, #0x20]
strh r0, [r5, #0x18]
mov r0, #0x100
strh r0, [r5, #0x1a]
mov r0, #0xf0
strh r0, [r5, #0x1c]
mov r0, #0x7f
strb r0, [r5, #5]
mov r2, #0
strh r2, [r5, #6]
mov r0, #0x40
strb r0, [r5, #4]
mov r1, #0xff
_03800134:
add r0, r5, r2
add r2, r2, #1
strb r1, [r0, #8]
cmp r2, #0x10
blt _03800134
ldr r1, _03800288 ; =_03807E6C
ldr r3, [r1]
cmp r3, #0
beq _03800194
ldrb r2, [r5, #1]
mov r0, #0x24
mla r0, r2, r0, r3
mov r6, #0
str r6, [r0, #0x40]
mvn r4, #0
mov r0, #0x24
_03800174:
ldr r2, [r1]
ldrb r3, [r5, #1]
mla r2, r3, r0, r2
add r2, r2, r6, lsl #1
add r6, r6, #1
strh r4, [r2, #0x20]
cmp r6, #0x10
blt _03800174
_03800194:
bl sub_03801884
movs r4, r0
bmi _0380027C
ldr r0, _0380028C ; =_038085F0
add r6, r0, r4, lsl #6
mov r0, r6
bl sub_038008F0
str r8, [r6, #0x24]
add r0, r8, r7
str r0, [r6, #0x28]
strb r4, [r5, #8]
ldr r0, [r6, #0x28]
bl sub_03800784
mov r0, r6
bl sub_03800290
cmp r0, #0xfe
ldrne r0, [r6, #0x28]
subne r0, r0, #1
strne r0, [r6, #0x28]
bne _03800248
mov r0, r6
bl sub_03800290
mov r4, r0
mov r0, r6
bl sub_03800290
orr r0, r4, r0, lsl #8
mov r0, r0, lsl #0x10
ldr r4, _0380028C ; =_038085F0
mov r8, r0, lsr #0x11
mov r7, #1
b _03800240
_03800210:
tst r8, #1
beq _03800234
bl sub_03801884
movs r6, r0
bmi _03800248
add r0, r4, r6, lsl #6
bl sub_038008F0
add r0, r5, r7
strb r6, [r0, #8]
_03800234:
mov r0, r8, lsl #0xf
add r7, r7, #1
mov r8, r0, lsr #0x10
_03800240:
cmp r8, #0
bne _03800210
_03800248:
ldrb r1, [r5]
ldr r0, _03800288 ; =_03807E6C
bic r1, r1, #1
ldr r2, [r0]
orr r1, r1, #1
and r0, r1, #0xff
bic r0, r0, #2
strb r0, [r5]
cmp r2, #0
ldrne r1, [r2, #4]
movne r0, #1
orrne r0, r1, r0, lsl sb
strne r0, [r2, #4]
_0380027C:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_03800284: .word _038083B0
_03800288: .word _03807E6C
_0380028C: .word _038085F0
arm_func_end sub_038000B4
arm_func_start sub_03800290
sub_03800290: ; 0x03800290
stmdb sp!, {r3, r4, r5, lr}
ldr r1, _038002E8 ; =_03807E50
mov r5, r0
ldr r4, [r5, #0x28]
ldr r0, [r1, #4]
cmp r4, r0
blo _038002B8
ldr r0, [r1, #8]
cmp r4, r0
blo _038002C0
_038002B8:
mov r0, r4
bl sub_03800784
_038002C0:
ldr r0, _038002E8 ; =_03807E50
ldr r1, [r5, #0x28]
ldr r2, [r0, #4]
ldr r0, _038002EC ; =_03807E5C
sub r2, r4, r2
ldrb r0, [r0, r2]
add r1, r1, #1
str r1, [r5, #0x28]
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_038002E8: .word _03807E50
_038002EC: .word _03807E5C
arm_func_end sub_03800290
arm_func_start sub_038002F0
sub_038002F0: ; 0x038002F0
mov r1, #0x24
mul r1, r0, r1
ldr r2, _0380030C ; =_038083B0
ldrb r0, [r2, r1]
orr r0, r0, #2
strb r0, [r2, r1]
bx lr
.align 2, 0
_0380030C: .word _038083B0
arm_func_end sub_038002F0
arm_func_start sub_03800310
sub_03800310: ; 0x03800310
stmdb sp!, {r4, lr}
mov r4, r0
bl sub_038000B4
mov r0, #0x24
mul r1, r4, r0
ldr r2, _0380033C ; =_038083B0
ldrb r0, [r2, r1]
orr r0, r0, #2
strb r0, [r2, r1]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_0380033C: .word _038083B0
arm_func_end sub_03800310
arm_func_start sub_03800340
sub_03800340: ; 0x03800340
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0x24
mul r1, r4, r0
ldr r2, _03800394 ; =_038083B0
ldrb r0, [r2, r1]
mov r0, r0, lsl #0x1f
movs r0, r0, lsr #0x1f
beq _0380038C
add r0, r2, r1
bl sub_03800B00
ldr r0, _03800398 ; =_03807E6C
ldr r2, [r0]
cmp r2, #0
movne r0, #1
ldrne r1, [r2, #4]
mvnne r0, r0, lsl r4
andne r0, r1, r0
strne r0, [r2, #4]
_0380038C:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03800394: .word _038083B0
_03800398: .word _03807E6C
arm_func_end sub_03800340
arm_func_start sub_0380039C
sub_0380039C: ; 0x0380039C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r2, #0x24
mul r4, r0, r2
ldr r5, _03800410 ; =_038083B0
and r0, r1, #0xff
ldrb r2, [r5, r4]
mov r0, r0, lsl #0x1f
bic r2, r2, #4
orr r0, r2, r0, lsr #29
strb r0, [r5, r4]
cmp r1, #0
beq _03800408
mov r8, #0
mov r6, #0x7f
_038003D4:
mov r1, r8
add r0, r5, r4
bl sub_03800A7C
movs r7, r0
beq _038003FC
mov r2, r6
add r1, r5, r4
bl sub_038009E0
mov r0, r7
bl sub_03800A48
_038003FC:
add r8, r8, #1
cmp r8, #0x10
blt _038003D4
_03800408:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_03800410: .word _038083B0
arm_func_end sub_0380039C
arm_func_start sub_03800414
sub_03800414: ; 0x03800414
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r3, _038004D8 ; =_038083B0
mov r2, #0x24
mla r6, r0, r2, r3
mov r8, r1
mov r7, #0
mov r4, #0x7f
_03800430:
mov r0, r6
mov r1, r7
bl sub_03800A7C
movs r5, r0
beq _03800458
mov r1, r6
mov r2, r4
bl sub_038009E0
mov r0, r5
bl sub_03800A48
_03800458:
add r7, r7, #1
cmp r7, #0x10
blt _03800430
bl sub_037FEFB4
mov r4, #0
mov r5, r4
b _03800498
_03800474:
mov r0, r6
mov r1, r5
bl sub_03800CF0
cmp r0, #0
beq _03800494
mov r0, r6
bl sub_03800B00
b _038004A0
_03800494:
add r4, r4, #1
_03800498:
cmp r4, r8
blo _03800474
_038004A0:
bl sub_037FEF64
ldr r0, _038004DC ; =_03807E6C
ldr r3, [r0]
cmp r3, #0
beq _038004D0
ldrb r1, [r6, #1]
mov r0, #0x24
mul r2, r1, r0
add r1, r3, #0x40
ldr r0, [r1, r2]
add r0, r0, r4
str r0, [r1, r2]
_038004D0:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_038004D8: .word _038083B0
_038004DC: .word _03807E6C
arm_func_end sub_03800414
arm_func_start sub_038004E0
sub_038004E0: ; 0x038004E0
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r3, #0x24
mul r4, r0, r3
ldr r5, _03800548 ; =_038083B0
mov r8, r1
mov r7, r2
mov r6, #0
b _03800530
_03800500:
tst r8, #1
beq _03800528
mov r1, r6
add r0, r5, r4
bl sub_03800A7C
cmp r0, #0
beq _03800528
mov r2, r7
add r1, r5, r4
bl sub_038018C8
_03800528:
add r6, r6, #1
mov r8, r8, lsr #1
_03800530:
cmp r6, #0x10
bge _03800540
cmp r8, #0
bne _03800500
_03800540:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_03800548: .word _038083B0
arm_func_end sub_038004E0
arm_func_start sub_0380054C
sub_0380054C: ; 0x0380054C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r3, #0x24
mul r4, r0, r3
mov r0, r2, lsl #0x10
ldr r5, _038005B8 ; =_038083B0
mov r7, r1
mov r6, #0
mov r8, r0, lsr #0x10
b _038005A0
_03800570:
tst r7, #1
beq _03800598
mov r1, r6
add r0, r5, r4
bl sub_03800A7C
cmp r0, #0
strneh r8, [r0, #0x1e]
ldrneb r1, [r0]
orrne r1, r1, #0x80
strneb r1, [r0]
_03800598:
add r6, r6, #1
mov r7, r7, lsr #1
_038005A0:
cmp r6, #0x10
bge _038005B0
cmp r7, #0
bne _03800570
_038005B0:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_038005B8: .word _038083B0
arm_func_end sub_0380054C
arm_func_start sub_038005BC
sub_038005BC: ; 0x038005BC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr r6, _03800644 ; =_038083B0
mov r7, #0
mov sl, r0
mov sb, r1
mov fp, r7
mov r4, #0x24
_038005D8:
mul r5, r7, r4
ldrb r0, [r6, r5]
mov r0, r0, lsl #0x1f
movs r0, r0, lsr #0x1f
beq _03800630
mov r8, fp
b _03800628
_038005F4:
mov r1, r8
add r0, r6, r5
bl sub_03800A7C
cmp r0, #0
beq _03800624
ldr r0, [r0, #0x28]
cmp sl, r0
cmpls r0, sb
bhi _03800624
add r0, r6, r5
bl sub_03800B00
b _03800630
_03800624:
add r8, r8, #1
_03800628:
cmp r8, #0x10
blt _038005F4
_03800630:
add r7, r7, #1
cmp r7, #0x10
blt _038005D8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03800644: .word _038083B0
arm_func_end sub_038005BC
arm_func_start sub_03800648
sub_03800648: ; 0x03800648
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r4, _038006A0 ; =_038083B0
mov r7, r0
mov r6, r1
mov r5, #0
mov r8, #0x24
_03800660:
mul r0, r5, r8
ldrb r1, [r4, r0]
add r0, r4, r0
mov r1, r1, lsl #0x1f
movs r1, r1, lsr #0x1f
beq _0380068C
ldr r1, [r0, #0x20]
cmp r7, r1
cmpls r1, r6
bhi _0380068C
bl sub_03800B00
_0380068C:
add r5, r5, #1
cmp r5, #0x10
blt _03800660
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_038006A0: .word _038083B0
arm_func_end sub_03800648
arm_func_start sub_038006A4
sub_038006A4: ; 0x038006A4
stmdb sp!, {r3, lr}
ldr lr, _038006E4 ; =_038083B0
mov ip, #0x24
mla ip, r0, ip, lr
cmp r3, #1
beq _038006D0
cmp r3, #2
beq _038006D8
cmp r3, #4
streq r2, [ip, r1]
b _038006DC
_038006D0:
strb r2, [ip, r1]
b _038006DC
_038006D8:
strh r2, [ip, r1]
_038006DC:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038006E4: .word _038083B0
arm_func_end sub_038006A4
arm_func_start sub_038006E8
sub_038006E8: ; 0x038006E8
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r4, #0x24
mul r5, r0, r4
mov r8, r3
mov r0, r8, lsl #0x10
ldr r7, [sp, #0x28]
mov sl, r1
mov sb, r2
mov r6, #0
mov fp, r0, lsr #0x10
and r4, r8, #0xff
b _03800768
_03800718:
tst sl, #1
beq _03800760
ldr r0, _03800780 ; =_038083B0
mov r1, r6
add r0, r0, r5
bl sub_03800A7C
cmp r0, #0
beq _03800760
cmp r7, #1
beq _03800754
cmp r7, #2
beq _0380075C
cmp r7, #4
streq r8, [r0, sb]
b _03800760
_03800754:
strb r4, [r0, sb]
b _03800760
_0380075C:
strh fp, [r0, sb]
_03800760:
add r6, r6, #1
mov sl, sl, lsr #1
_03800768:
cmp r6, #0x10
bge _03800778
cmp sl, #0
bne _03800718
_03800778:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03800780: .word _038083B0
arm_func_end sub_038006E8
arm_func_start sub_03800784
sub_03800784: ; 0x03800784
ldr r1, _038007BC ; =_03807E50
bic r2, r0, #3
str r2, [r1, #4]
add r0, r2, #0x10
str r0, [r1, #8]
ldr r0, [r2]
str r0, [r1, #0xc]
ldr r0, [r2, #4]
str r0, [r1, #0x10]
ldr r0, [r2, #8]
str r0, [r1, #0x14]
ldr r0, [r2, #0xc]
str r0, [r1, #0x18]
bx lr
.align 2, 0
_038007BC: .word _03807E50
arm_func_end sub_03800784
arm_func_start sub_038007C0
sub_038007C0: ; 0x038007C0
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
bl sub_03800290
mov r4, r0
mov r0, r5
bl sub_03800290
orr r4, r4, r0, lsl #8
mov r0, r5
bl sub_03800290
orr r0, r4, r0, lsl #16
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_038007C0
arm_func_start sub_038007F0
sub_038007F0: ; 0x038007F0
stmdb sp!, {r4, r5, r6, lr}
mov r4, r0
mov r6, r1
cmp r2, #4
addls pc, pc, r2, lsl #2
b _038008E4
_03800808: ; jump table
b _0380081C ; case 0
b _03800828 ; case 1
b _03800848 ; case 2
b _03800884 ; case 3
b _03800868 ; case 4
_0380081C:
bl sub_03800290
mov r5, r0
b _038008E4
_03800828:
bl sub_03800290
mov r5, r0
mov r0, r4
bl sub_03800290
orr r0, r5, r0, lsl #8
mov r0, r0, lsl #0x10
mov r5, r0, lsr #0x10
b _038008E4
_03800848:
mov r5, #0
_0380084C:
mov r0, r4
bl sub_03800290
and r1, r0, #0x7f
tst r0, #0x80
orr r5, r1, r5, lsl #7
bne _0380084C
b _038008E4
_03800868:
bl sub_03800290
mov r1, r0
mov r0, r6
bl sub_03801840
cmp r0, #0
ldrnesh r5, [r0]
b _038008E4
_03800884:
bl sub_03800290
mov r5, r0
mov r0, r4
bl sub_03800290
orr r0, r5, r0, lsl #8
mov r0, r0, lsl #0x10
mov r1, r0, lsr #0x10
mov r0, r4
mov r5, r1, lsl #0x10
bl sub_03800290
mov r6, r0
mov r0, r4
bl sub_03800290
orr r0, r6, r0, lsl #8
mov r0, r0, lsl #0x10
mov r4, r0, lsr #0x10
bl sub_037FEEC4
mov r1, r4, lsl #0x10
mov r1, r1, asr #0x10
sub r1, r1, r5, asr #16
add r1, r1, #1
mul r1, r0, r1
mov r0, r1, asr #0x10
add r5, r0, r5, asr #16
_038008E4:
mov r0, r5
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end sub_038007F0
arm_func_start sub_038008F0
sub_038008F0: ; 0x038008F0
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0
str r0, [r4, #0x24]
str r0, [r4, #0x28]
ldrb r1, [r4]
mov r2, #0xff
orr r1, r1, #2
bic ip, r1, #4
strb r1, [r4]
and r1, ip, #0xff
bic r3, r1, #8
strb ip, [r4]
and r1, r3, #0xff
bic ip, r1, #0x10
strb r3, [r4]
and r1, ip, #0xff
bic r3, r1, #0x20
and r1, r3, #0xff
orr r1, r1, #0x40
strb ip, [r4]
bic r1, r1, #0x80
strb r1, [r4]
strb r0, [r4, #0x3b]
strh r0, [r4, #2]
mov r1, #0x40
strb r1, [r4, #0x12]
mov r1, #0x7f
strb r1, [r4, #4]
strb r1, [r4, #5]
strh r0, [r4, #0xa]
strb r0, [r4, #8]
strb r0, [r4, #9]
strb r0, [r4, #6]
strh r0, [r4, #0xc]
strb r2, [r4, #0xe]
strb r2, [r4, #0xf]
strb r2, [r4, #0x10]
strb r2, [r4, #0x11]
strb r1, [r4, #1]
mov r1, #2
strb r1, [r4, #7]
mov r1, #0x3c
strb r1, [r4, #0x14]
strb r0, [r4, #0x15]
strh r0, [r4, #0x16]
strb r0, [r4, #0x13]
add r0, r2, #0xff00
strh r0, [r4, #0x1e]
add r0, r4, #0x18
bl sub_037FFD90
mov r0, #0
str r0, [r4, #0x20]
str r0, [r4, #0x3c]
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_038008F0
arm_func_start sub_038009D0
sub_038009D0: ; 0x038009D0
str r1, [r0, #0x24]
add r1, r1, r2
str r1, [r0, #0x28]
bx lr
arm_func_end sub_038009D0
arm_func_start sub_038009E0
sub_038009E0: ; 0x038009E0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r2
mov r4, r0
mov r2, #0
bl sub_03800B98
ldr r5, [r4, #0x3c]
and r6, r7, #0xff
mov r4, #1
b _03800A38
_03800A04:
mov r0, r5
bl sub_037FF940
cmp r0, #0
beq _03800A34
cmp r7, #0
blt _03800A28
mov r0, r5
mov r1, r6
bl sub_037FF918
_03800A28:
mov r0, r5
strb r4, [r5, #0x22]
bl sub_037FF934
_03800A34:
ldr r5, [r5, #0x50]
_03800A38:
cmp r5, #0
bne _03800A04
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_038009E0
arm_func_start sub_03800A48
sub_03800A48: ; 0x03800A48
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
ldr r4, [r5, #0x3c]
b _03800A64
_03800A58:
mov r0, r4
bl sub_037FFB1C
ldr r4, [r4, #0x50]
_03800A64:
cmp r4, #0
bne _03800A58
mov r0, #0
str r0, [r5, #0x3c]
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_03800A48
arm_func_start sub_03800A7C
sub_03800A7C: ; 0x03800A7C
cmp r1, #0xf
movgt r0, #0
bxgt lr
add r0, r0, r1
ldrb r1, [r0, #8]
cmp r1, #0xff
moveq r0, #0
ldrne r0, _03800AA4 ; =_038085F0
addne r0, r0, r1, lsl #6
bx lr
.align 2, 0
_03800AA4: .word _038085F0
arm_func_end sub_03800A7C
arm_func_start sub_03800AA8
sub_03800AA8: ; 0x03800AA8
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r4, r1
bl sub_03800A7C
movs r5, r0
beq _03800AF4
mov r1, r6
mvn r2, #0
bl sub_038009E0
mov r0, r5
bl sub_03800A48
add ip, r6, #8
ldrb r2, [ip, r4]
ldr r3, _03800AFC ; =_038085F0
mov r0, #0xff
ldrb r1, [r3, r2, lsl #6]
bic r1, r1, #1
strb r1, [r3, r2, lsl #6]
strb r0, [ip, r4]
_03800AF4:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_03800AFC: .word _038085F0
arm_func_end sub_03800AA8
arm_func_start sub_03800B00
sub_03800B00: ; 0x03800B00
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, #0
_03800B0C:
mov r0, r5
mov r1, r4
bl sub_03800AA8
add r4, r4, #1
cmp r4, #0x10
blt _03800B0C
ldrb r0, [r5]
bic r0, r0, #1
strb r0, [r5]
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_03800B00
arm_func_start sub_03800B38
sub_03800B38: ; 0x03800B38
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r2
cmp r1, #1
bne _03800B58
mov r1, #0
strb r1, [r5, #0x22]
bl sub_037FFB1C
_03800B58:
ldr r1, [r4, #0x3c]
cmp r1, r5
ldreq r0, [r5, #0x50]
streq r0, [r4, #0x3c]
beq _03800B90
b _03800B84
_03800B70:
cmp r0, r5
ldreq r0, [r5, #0x50]
streq r0, [r1, #0x50]
beq _03800B90
mov r1, r0
_03800B84:
ldr r0, [r1, #0x50]
cmp r0, #0
bne _03800B70
_03800B90:
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_03800B38
arm_func_start sub_03800B98
sub_03800B98: ; 0x03800B98
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
ldrb r0, [sl, #7]
ldrb r6, [sl, #4]
ldrb r3, [sl, #5]
ldrb fp, [r1, #5]
mov r5, r0, lsl #6
mov r8, r3, lsl #1
ldrb r4, [sl, #1]
ldrsb r7, [sl, #6]
mov sb, r6, lsl #1
ldr r0, _03800CEC ; =_03806FDC
mul r6, r7, r5
mov r3, fp, lsl #1
ldrsh sb, [r0, sb]
ldrsh r7, [r0, r8]
ldrsh r0, [r0, r3]
add r8, sb, r7
ldrsb r3, [sl, #8]
cmp r4, #0x7f
mulne r4, r3, r4
addne r3, r4, #0x40
mov r4, #0x8000
ldrsh r5, [sl, #0xc]
mov sb, r2
add r2, r5, r6, asr #7
ldrsh r7, [sl, #0xa]
ldrsh r1, [r1, #6]
ldrsb r5, [sl, #9]
movne r3, r3, asr #7
add r0, r0, r8
rsb r4, r4, #0
cmp r0, r4
movlt r0, r4
mov r4, #0x8000
add r1, r7, r1
rsb r4, r4, #0
cmp r1, r4
movlt r1, r4
add r3, r3, r5
mvn r4, #0x7f
cmp r3, r4
movlt r3, r4
blt _03800C50
cmp r3, #0x7f
movgt r3, #0x7f
_03800C50:
mov r0, r0, lsl #0x10
mov r2, r2, lsl #0x10
mov r3, r3, lsl #0x18
mov r1, r1, lsl #0x10
ldr r8, [sl, #0x3c]
mov r6, r0, asr #0x10
mov r5, r2, asr #0x10
mov r4, r3, asr #0x18
mov r7, r1, asr #0x10
mov fp, #1
b _03800CDC
_03800C7C:
strh r7, [r8, #6]
ldrb r0, [r8, #2]
cmp r0, #3
beq _03800CD8
strh r6, [r8, #0xc]
strh r5, [r8, #0xe]
strb r4, [r8, #0xb]
ldrb r0, [sl, #1]
strb r0, [r8, #4]
ldrh r0, [sl, #0x18]
strh r0, [r8, #0x28]
ldrh r0, [sl, #0x1a]
strh r0, [r8, #0x2a]
ldrh r0, [sl, #0x1c]
strh r0, [r8, #0x2c]
ldr r0, [r8, #0x34]
cmp r0, #0
bne _03800CD8
cmp sb, #0
beq _03800CD8
mov r0, r8
strb fp, [r8, #0x22]
bl sub_037FF934
_03800CD8:
ldr r8, [r8, #0x50]
_03800CDC:
cmp r8, #0
bne _03800C7C
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03800CEC: .word _03806FDC
arm_func_end sub_03800B98
arm_func_start sub_03800CF0
sub_03800CF0: ; 0x03800CF0
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x24
mov r2, #0
str r2, [sp, #0x10]
str r1, [sp, #8]
mov r7, r0
mov sl, r2
_03800D0C:
mov r0, r7
mov r1, sl
bl sub_03800A7C
movs r8, r0
ldrne r0, [r8, #0x28]
cmpne r0, #0
beq _0380180C
ldr r0, [r8, #0x3c]
b _03800D68
_03800D30:
ldr r1, [r0, #0x34]
cmp r1, #0
subgt r1, r1, #1
strgt r1, [r0, #0x34]
ldrb r1, [r0, #3]
mov r1, r1, lsl #0x1d
movs r1, r1, lsr #0x1f
bne _03800D64
ldr r2, [r0, #0x14]
ldr r1, [r0, #0x18]
cmp r2, r1
addlt r1, r2, #1
strlt r1, [r0, #0x14]
_03800D64:
ldr r0, [r0, #0x50]
_03800D68:
cmp r0, #0
bne _03800D30
ldrb r1, [r8]
mov r0, r1, lsl #0x1b
movs r0, r0, lsr #0x1f
beq _03800D98
ldr r0, [r8, #0x3c]
cmp r0, #0
movne r0, #0
bne _038017F0
bic r0, r1, #0x10
strb r0, [r8]
_03800D98:
ldr r0, [r8, #0x20]
cmp r0, #0
subgt r0, r0, #1
strgt r0, [r8, #0x20]
cmpgt r0, #0
movgt r0, #0
bgt _038017F0
ldr r0, [r8, #0x28]
bl sub_03800784
ldr r0, _03801834 ; =0x0000FFFF
sub fp, r0, #0x10000
b _038017D0
_03800DC8:
mov r0, r8
mov sb, #0
mov r4, #1
bl sub_03800290
mov r6, r0
cmp r6, #0xa2
bne _03800DFC
mov r0, r8
bl sub_03800290
mov r6, r0
ldrb r0, [r8]
mov r0, r0, lsl #0x19
mov r4, r0, lsr #0x1f
_03800DFC:
cmp r6, #0xa0
bne _03800E18
mov r0, r8
bl sub_03800290
mov r6, r0
mov r5, #3
mov sb, #1
_03800E18:
cmp r6, #0xa1
bne _03800E34
mov r0, r8
bl sub_03800290
mov r6, r0
mov r5, #4
mov sb, #1
_03800E34:
tst r6, #0x80
bne _038010B8
mov r0, r8
bl sub_03800290
cmp sb, #0
str r0, [sp, #0xc]
movne r2, r5
moveq r2, #2
mov r0, r8
mov r1, r7
bl sub_038007F0
cmp r4, #0
mov r4, r0
ldrsb r0, [r8, #0x13]
add sb, r6, r0
beq _038017D0
cmp sb, #0
movlt sb, #0
blt _03800E88
cmp sb, #0x7f
movgt sb, #0x7f
_03800E88:
ldrb r1, [r8]
mov r0, r1, lsl #0x1d
movs r0, r0, lsr #0x1f
bne _0380108C
ldr r0, [sp, #8]
cmp r0, #0
beq _0380108C
mov r0, r1, lsl #0x1c
mov r6, #0
movs r0, r0, lsr #0x1f
ldrne r6, [r8, #0x3c]
cmpne r6, #0
strneb sb, [r6, #8]
ldrne r0, [sp, #0xc]
strneb r0, [r6, #9]
cmp r6, #0
bne _03800FBC
ldr r0, [r7, #0x20]
ldrh r1, [r8, #2]
mov r2, sb
add r3, sp, #0x16
bl sub_03801948
cmp r0, #0
beq _0380108C
ldrb r0, [sp, #0x16]
cmp r0, #4
addls pc, pc, r0, lsl #2
b _0380108C
_03800EF8: ; jump table
b _0380108C ; case 0
b _03800F0C ; case 1
b _03800F14 ; case 2
b _03800F1C ; case 3
b _03800F0C ; case 4
_03800F0C:
ldr r1, _03801834 ; =0x0000FFFF
b _03800F20
_03800F14:
mov r1, #0x3f00
b _03800F20
_03800F1C:
mov r1, #0xc000
_03800F20:
ldrh r0, [r8, #0x1e]
ldr r3, _03801838 ; =sub_03800B38
str r8, [sp]
ldrb r2, [r8]
and r0, r1, r0
mov r2, r2, lsl #0x18
ldrb r6, [r7, #4]
ldrb r1, [r8, #0x12]
mov r2, r2, lsr #0x1f
add r1, r6, r1
bl sub_037FF950
movs r6, r0
beq _0380108C
ldrb r0, [r8]
mov r0, r0, lsl #0x1c
movs r0, r0, lsr #0x1f
movne r3, fp
bne _03800F74
cmp r4, #0
movgt r3, r4
movle r3, fp
_03800F74:
ldr r2, [sp, #0xc]
ldr r1, [r7, #0x20]
mov r0, r6
str r1, [sp]
add r1, sp, #0x16
str r1, [sp, #4]
mov r1, sb
bl sub_03801B08
cmp r0, #0
bne _03800FB0
mov r0, #0
strb r0, [r6, #0x22]
mov r0, r6
bl sub_037FFB1C
b _0380108C
_03800FB0:
ldr r0, [r8, #0x3c]
str r0, [r6, #0x50]
str r6, [r8, #0x3c]
_03800FBC:
ldrb r1, [r8, #0xe]
cmp r1, #0xff
beq _03800FD0
mov r0, r6
bl sub_037FF8D4
_03800FD0:
ldrb r1, [r8, #0xf]
cmp r1, #0xff
beq _03800FE4
mov r0, r6
bl sub_037FF8F4
_03800FE4:
ldrb r1, [r8, #0x10]
cmp r1, #0xff
beq _03800FF8
mov r0, r6
bl sub_037FF910
_03800FF8:
ldrb r1, [r8, #0x11]
cmp r1, #0xff
beq _0380100C
mov r0, r6
bl sub_037FF918
_0380100C:
ldrsh r0, [r8, #0x16]
strh r0, [r6, #0x32]
ldrb r0, [r8]
mov r0, r0, lsl #0x1a
movs r0, r0, lsr #0x1f
beq _0380103C
ldrsh r1, [r6, #0x32]
ldrb r0, [r8, #0x14]
sub r0, r0, sb
mov r0, r0, lsl #0x16
add r0, r1, r0, asr #16
strh r0, [r6, #0x32]
_0380103C:
ldrb r0, [r8, #0x15]
cmp r0, #0
bne _03801068
cmp r4, #0
movgt r0, r4
movle r0, fp
str r0, [r6, #0x18]
ldrb r0, [r6, #3]
bic r0, r0, #4
strb r0, [r6, #3]
b _03801084
_03801068:
mul r1, r0, r0
ldrsh r0, [r6, #0x32]
cmp r0, #0
rsblt r0, r0, #0
mul r0, r1, r0
mov r0, r0, asr #0xb
str r0, [r6, #0x18]
_03801084:
mov r0, #0
str r0, [r6, #0x14]
_0380108C:
strb sb, [r8, #0x14]
ldrb r0, [r8]
mov r0, r0, lsl #0x1e
movs r0, r0, lsr #0x1f
beq _038017D0
str r4, [r8, #0x20]
cmp r4, #0
ldreqb r0, [r8]
orreq r0, r0, #0x10
streqb r0, [r8]
b _038017D0
_038010B8:
and r0, r6, #0xf0
cmp r0, #0xc0
bgt _038010EC
bge _03801234
cmp r0, #0x90
bgt _038010E0
bge _03801158
cmp r0, #0x80
beq _03801110
b _038017D0
_038010E0:
cmp r0, #0xb0
beq _038014E4
b _038017D0
_038010EC:
cmp r0, #0xe0
bgt _03801104
bge _03801490
cmp r0, #0xd0
beq _03801234
b _038017D0
_03801104:
cmp r0, #0xf0
beq _0380172C
b _038017D0
_03801110:
cmp sb, #0
movne r2, r5
moveq r2, #2
mov r0, r8
mov r1, r7
bl sub_038007F0
cmp r4, #0
beq _038017D0
cmp r6, #0x80
beq _03801144
cmp r6, #0x81
beq _0380114C
b _038017D0
_03801144:
str r0, [r8, #0x20]
b _038017D0
_0380114C:
cmp r0, #0x10000
strlth r0, [r8, #2]
b _038017D0
_03801158:
cmp r6, #0x93
beq _03801174
cmp r6, #0x94
beq _038011D4
cmp r6, #0x95
beq _038011F0
b _038017D0
_03801174:
mov r0, r8
bl sub_03800290
mov r6, r0
mov r0, r8
bl sub_038007C0
cmp r4, #0
mov sb, r0
beq _038017D0
mov r1, r6
mov r0, r7
bl sub_03800A7C
movs r4, r0
cmpne r4, r8
beq _038017D0
mov r1, r7
mov r2, fp
bl sub_038009E0
mov r0, r4
bl sub_03800A48
mov r0, r4
mov r2, sb
ldr r1, [r8, #0x24]
bl sub_038009D0
b _038017D0
_038011D4:
mov r0, r8
bl sub_038007C0
cmp r4, #0
ldrne r1, [r8, #0x24]
addne r0, r1, r0
strne r0, [r8, #0x28]
b _038017D0
_038011F0:
mov r0, r8
bl sub_038007C0
cmp r4, #0
beq _038017D0
ldrb r1, [r8, #0x3b]
cmp r1, #3
bhs _038017D0
add r1, r8, r1, lsl #2
ldr r2, [r8, #0x28]
str r2, [r1, #0x2c]
ldrb r1, [r8, #0x3b]
add r1, r1, #1
strb r1, [r8, #0x3b]
ldr r1, [r8, #0x24]
add r0, r1, r0
str r0, [r8, #0x28]
b _038017D0
_03801234:
cmp sb, #0
movne r2, r5
moveq r2, #0
mov r0, r8
mov r1, r7
bl sub_038007F0
cmp r4, #0
strb r0, [sp, #0x14]
beq _038017D0
sub r1, r6, #0xc0
cmp r1, #0x17
addls pc, pc, r1, lsl #2
b _038017D0
_03801268: ; jump table
b _03801460 ; case 0
b _038012C8 ; case 1
b _038012E0 ; case 2
b _03801448 ; case 3
b _03801454 ; case 4
b _038012EC ; case 5
b _038012F8 ; case 6
b _03801304 ; case 7
b _038013C4 ; case 8
b _0380140C ; case 9
b _0380132C ; case 10
b _03801338 ; case 11
b _03801344 ; case 12
b _03801350 ; case 13
b _0380142C ; case 14
b _03801320 ; case 15
b _0380135C ; case 16
b _03801368 ; case 17
b _03801374 ; case 18
b _03801380 ; case 19
b _0380138C ; case 20
b _038012D4 ; case 21
b _03801470 ; case 22
b _038013F8 ; case 23
_038012C8:
and r0, r0, #0xff
strb r0, [r8, #4]
b _038017D0
_038012D4:
and r0, r0, #0xff
strb r0, [r8, #5]
b _038017D0
_038012E0:
and r0, r0, #0xff
strb r0, [r7, #5]
b _038017D0
_038012EC:
and r0, r0, #0xff
strb r0, [r8, #7]
b _038017D0
_038012F8:
and r0, r0, #0xff
strb r0, [r8, #0x12]
b _038017D0
_03801304:
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
ldrb r1, [r8]
bic r1, r1, #2
orr r0, r1, r0, lsr #30
strb r0, [r8]
b _038017D0
_03801320:
and r0, r0, #0xff
strb r0, [r8, #0x15]
b _038017D0
_0380132C:
and r0, r0, #0xff
strb r0, [r8, #0x1a]
b _038017D0
_03801338:
and r0, r0, #0xff
strb r0, [r8, #0x19]
b _038017D0
_03801344:
and r0, r0, #0xff
strb r0, [r8, #0x18]
b _038017D0
_03801350:
and r0, r0, #0xff
strb r0, [r8, #0x1b]
b _038017D0
_0380135C:
and r0, r0, #0xff
strb r0, [r8, #0xe]
b _038017D0
_03801368:
and r0, r0, #0xff
strb r0, [r8, #0xf]
b _038017D0
_03801374:
and r0, r0, #0xff
strb r0, [r8, #0x10]
b _038017D0
_03801380:
and r0, r0, #0xff
strb r0, [r8, #0x11]
b _038017D0
_0380138C:
ldrb r1, [r8, #0x3b]
cmp r1, #3
bhs _038017D0
add r2, r8, r1, lsl #2
and r1, r0, #0xff
ldr r0, [r8, #0x28]
str r0, [r2, #0x2c]
ldrb r0, [r8, #0x3b]
add r0, r8, r0
strb r1, [r0, #0x38]
ldrb r0, [r8, #0x3b]
add r0, r0, #1
strb r0, [r8, #0x3b]
b _038017D0
_038013C4:
and r0, r0, #0xff
mov r1, r0, lsl #0x1f
ldrb r2, [r8]
mov r0, r8
bic r2, r2, #8
orr r1, r2, r1, lsr #28
strb r1, [r8]
mov r1, r7
mov r2, fp
bl sub_038009E0
mov r0, r8
bl sub_03800A48
b _038017D0
_038013F8:
and r2, r0, #0xff
mov r0, r8
mov r1, r7
bl sub_038018C8
b _038017D0
_0380140C:
and r1, r0, #0xff
ldrsb r0, [r8, #0x13]
add r0, r1, r0
strb r0, [r8, #0x14]
ldrb r0, [r8]
orr r0, r0, #0x20
strb r0, [r8]
b _038017D0
_0380142C:
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
ldrb r1, [r8]
bic r1, r1, #0x20
orr r0, r1, r0, lsr #26
strb r0, [r8]
b _038017D0
_03801448:
ldrsb r0, [sp, #0x14]
strb r0, [r8, #0x13]
b _038017D0
_03801454:
ldrsb r0, [sp, #0x14]
strb r0, [r8, #6]
b _038017D0
_03801460:
and r0, r0, #0xff
sub r0, r0, #0x40
strb r0, [r8, #8]
b _038017D0
_03801470:
ldr r1, _0380183C ; =_03807E50
ldr r1, [r1]
cmp r1, #0
beq _038017D0
and r1, r0, #0xff
mov r0, r7
bl sub_03801840
b _038017D0
_03801490:
cmp sb, #0
movne r2, r5
moveq r2, #1
mov r0, r8
mov r1, r7
bl sub_038007F0
mov r0, r0, lsl #0x10
cmp r4, #0
mov r0, r0, asr #0x10
beq _038017D0
cmp r6, #0xe0
beq _038014DC
cmp r6, #0xe1
beq _038014D4
cmp r6, #0xe3
streqh r0, [r8, #0x16]
b _038017D0
_038014D4:
strh r0, [r7, #0x18]
b _038017D0
_038014DC:
strh r0, [r8, #0x1c]
b _038017D0
_038014E4:
mov r0, r8
bl sub_03800290
cmp sb, #0
movne r2, r5
mov sb, r0
moveq r2, #1
mov r0, r8
mov r1, r7
bl sub_038007F0
mov r0, r0, lsl #0x10
mov r1, sb
mov sb, r0, asr #0x10
mov r0, r7
bl sub_03801840
cmp r4, #0
mov r4, r0
cmpne r4, #0
beq _038017D0
sub r0, r6, #0xb0
cmp r0, #0xd
addls pc, pc, r0, lsl #2
b _038017D0
_0380153C: ; jump table
b _03801574 ; case 0
b _0380157C ; case 1
b _0380158C ; case 2
b _0380159C ; case 3
b _038015AC ; case 4
b _038015C8 ; case 5
b _038015EC ; case 6
b _038017D0 ; case 7
b _03801624 ; case 8
b _03801650 ; case 9
b _0380167C ; case 10
b _038016A8 ; case 11
b _038016D4 ; case 12
b _03801700 ; case 13
_03801574:
strh sb, [r4]
b _038017D0
_0380157C:
ldrsh r0, [r4]
add r0, r0, sb
strh r0, [r4]
b _038017D0
_0380158C:
ldrsh r0, [r4]
sub r0, r0, sb
strh r0, [r4]
b _038017D0
_0380159C:
ldrsh r0, [r4]
mul r1, r0, sb
strh r1, [r4]
b _038017D0
_038015AC:
cmp sb, #0
beq _038017D0
mov r1, sb
ldrsh r0, [r4]
bl _s32_div_f
strh r0, [r4]
b _038017D0
_038015C8:
cmp sb, #0
ldrgesh r0, [r4]
movge r0, r0, lsl sb
strgeh r0, [r4]
ldrltsh r1, [r4]
rsblt r0, sb, #0
movlt r0, r1, asr r0
strlth r0, [r4]
b _038017D0
_038015EC:
cmp sb, #0
rsblt r0, sb, #0
movlt r0, r0, lsl #0x10
mov r6, #0
movlt sb, r0, asr #0x10
movlt r6, #1
bl sub_037FEEC4
add r1, sb, #1
mul r1, r0, r1
mov r0, r1, asr #0x10
cmp r6, #0
rsbne r0, r0, #0
strh r0, [r4]
b _038017D0
_03801624:
ldrsh r0, [r4]
ldrb r1, [r8]
cmp r0, sb
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
bic r1, r1, #0x40
orr r0, r1, r0, lsr #25
strb r0, [r8]
b _038017D0
_03801650:
ldrsh r0, [r4]
ldrb r1, [r8]
cmp r0, sb
movge r0, #1
movlt r0, #0
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
bic r1, r1, #0x40
orr r0, r1, r0, lsr #25
strb r0, [r8]
b _038017D0
_0380167C:
ldrsh r0, [r4]
ldrb r1, [r8]
cmp r0, sb
movgt r0, #1
movle r0, #0
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
bic r1, r1, #0x40
orr r0, r1, r0, lsr #25
strb r0, [r8]
b _038017D0
_038016A8:
ldrsh r0, [r4]
ldrb r1, [r8]
cmp r0, sb
movle r0, #1
movgt r0, #0
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
bic r1, r1, #0x40
orr r0, r1, r0, lsr #25
strb r0, [r8]
b _038017D0
_038016D4:
ldrsh r0, [r4]
ldrb r1, [r8]
cmp r0, sb
movlt r0, #1
movge r0, #0
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
bic r1, r1, #0x40
orr r0, r1, r0, lsr #25
strb r0, [r8]
b _038017D0
_03801700:
ldrsh r0, [r4]
ldrb r1, [r8]
cmp r0, sb
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
mov r0, r0, lsl #0x1f
bic r1, r1, #0x40
orr r0, r1, r0, lsr #25
strb r0, [r8]
b _038017D0
_0380172C:
cmp r4, #0
beq _038017D0
sub r0, r6, #0xfc
cmp r0, #3
addls pc, pc, r0, lsl #2
b _038017D0
_03801744: ; jump table
b _0380177C ; case 0
b _03801754 ; case 1
b _038017D0 ; case 2
b _038017C8 ; case 3
_03801754:
ldrb r0, [r8, #0x3b]
cmp r0, #0
beq _038017D0
sub r0, r0, #1
strb r0, [r8, #0x3b]
and r0, r0, #0xff
add r0, r8, r0, lsl #2
ldr r0, [r0, #0x2c]
str r0, [r8, #0x28]
b _038017D0
_0380177C:
ldrb r0, [r8, #0x3b]
cmp r0, #0
beq _038017D0
add r1, r8, r0
ldrb r0, [r1, #0x37]
cmp r0, #0
beq _038017B0
sub r0, r0, #1
ands r0, r0, #0xff
ldreqb r0, [r8, #0x3b]
subeq r0, r0, #1
streqb r0, [r8, #0x3b]
beq _038017D0
_038017B0:
strb r0, [r1, #0x37]
ldrb r0, [r8, #0x3b]
add r0, r8, r0, lsl #2
ldr r0, [r0, #0x28]
str r0, [r8, #0x28]
b _038017D0
_038017C8:
mvn r0, #0
b _038017F0
_038017D0:
ldr r0, [r8, #0x20]
cmp r0, #0
bne _038017EC
ldrb r0, [r8]
mov r0, r0, lsl #0x1b
movs r0, r0, lsr #0x1f
beq _03800DC8
_038017EC:
mov r0, #0
_038017F0:
cmp r0, #0
moveq r0, #1
streq r0, [sp, #0x10]
beq _0380180C
mov r0, r7
mov r1, sl
bl sub_03800AA8
_0380180C:
add sl, sl, #1
cmp sl, #0x10
blt _03800D0C
ldr r0, [sp, #0x10]
cmp r0, #0
moveq r0, #1
movne r0, #0
add sp, sp, #0x24
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03801834: .word 0x0000FFFF
_03801838: .word sub_03800B38
_0380183C: .word _03807E50
arm_func_end sub_03800CF0
arm_func_start sub_03801840
sub_03801840: ; 0x03801840
ldr r2, _03801880 ; =_03807E6C
ldr r3, [r2]
cmp r3, #0
moveq r0, #0
bxeq lr
cmp r1, #0x10
addge r2, r3, #0x260
subge r0, r1, #0x10
addge r0, r2, r0, lsl #1
bxge lr
ldrb r2, [r0, #1]
add r3, r3, #0x20
mov r0, #0x24
mla r0, r2, r0, r3
add r0, r0, r1, lsl #1
bx lr
.align 2, 0
_03801880: .word _03807E6C
arm_func_end sub_03801840
arm_func_start sub_03801884
sub_03801884: ; 0x03801884
ldr ip, _038018C4 ; =_038085F0
mov r0, #0
b _038018B4
_03801890:
ldrb r1, [ip, r0, lsl #6]
mov r3, r0, lsl #6
mov r2, r1, lsl #0x1f
movs r2, r2, lsr #0x1f
biceq r1, r1, #1
orreq r1, r1, #1
streqb r1, [ip, r3]
bxeq lr
add r0, r0, #1
_038018B4:
cmp r0, #0x20
blt _03801890
mvn r0, #0
bx lr
.align 2, 0
_038018C4: .word _038085F0
arm_func_end sub_03801884
arm_func_start sub_038018C8
sub_038018C8: ; 0x038018C8
stmdb sp!, {r4, lr}
mov r4, r0
cmp r2, #3
addls pc, pc, r2, lsl #2
b _03801940
_038018DC: ; jump table
b _038018EC ; case 0
b _038018FC ; case 1
b _0380190C ; case 2
b _03801924 ; case 3
_038018EC:
ldrb r0, [r4]
bic r0, r0, #4
strb r0, [r4]
b _03801940
_038018FC:
ldrb r0, [r4]
orr r0, r0, #4
strb r0, [r4]
b _03801940
_0380190C:
ldrb r3, [r4]
mvn r2, #0
orr r3, r3, #4
strb r3, [r4]
bl sub_038009E0
b _03801940
_03801924:
ldrb r3, [r4]
mov r2, #0x7f
orr r3, r3, #4
strb r3, [r4]
bl sub_038009E0
mov r0, r4
bl sub_03800A48
_03801940:
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_038018C8
arm_func_start sub_03801948
sub_03801948: ; 0x03801948
stmdb sp!, {r3, r4, r5, r6, r7, lr}
movs r7, r1
mov r6, r0
mov r5, r2
mov r4, r3
movmi r0, #0
bmi _03801AC0
bl sub_037FEFE4
ldr r0, [r6, #0x38]
cmp r7, r0
blo _03801980
bl sub_037FEFE8
mov r0, #0
b _03801AC0
_03801980:
add r0, r6, r7, lsl #2
ldr r1, [r0, #0x3c]
and r0, r1, #0xff
strb r1, [r4]
cmp r0, #0x11
mov r1, r1, lsr #8
addls pc, pc, r0, lsl #2
b _03801AAC
_038019A0: ; jump table
b _03801AAC ; case 0
b _038019E8 ; case 1
b _038019E8 ; case 2
b _038019E8 ; case 3
b _038019E8 ; case 4
b _038019E8 ; case 5
b _03801AAC ; case 6
b _03801AAC ; case 7
b _03801AAC ; case 8
b _03801AAC ; case 9
b _03801AAC ; case 10
b _03801AAC ; case 11
b _03801AAC ; case 12
b _03801AAC ; case 13
b _03801AAC ; case 14
b _03801AAC ; case 15
b _03801A08 ; case 16
b _03801A58 ; case 17
_038019E8:
add r3, r6, r1
add r2, r4, #2
mov r1, #5
_038019F4:
ldrh r0, [r3], #2
subs r1, r1, #1
strh r0, [r2], #2
bne _038019F4
b _03801AB8
_03801A08:
ldrb r0, [r6, r1]
add r2, r6, r1
ldrb r1, [r2, #1]
cmp r5, r0
blt _03801A24
cmp r5, r1
ble _03801A30
_03801A24:
bl sub_037FEFE8
mov r0, #0
b _03801AC0
_03801A30:
sub r1, r5, r0
mov r0, #0xc
mla r0, r1, r0, r2
add r2, r0, #2
mov r1, #6
_03801A44:
ldrh r0, [r2], #2
subs r1, r1, #1
strh r0, [r4], #2
bne _03801A44
b _03801AB8
_03801A58:
add r2, r6, r1
mov r1, #0
b _03801A7C
_03801A64:
add r1, r1, #1
cmp r1, #8
blt _03801A7C
bl sub_037FEFE8
mov r0, #0
b _03801AC0
_03801A7C:
ldrb r0, [r2, r1]
cmp r5, r0
bgt _03801A64
mov r0, #0xc
mla r0, r1, r0, r2
add r2, r0, #8
mov r1, #6
_03801A98:
ldrh r0, [r2], #2
subs r1, r1, #1
strh r0, [r4], #2
bne _03801A98
b _03801AB8
_03801AAC:
bl sub_037FEFE8
mov r0, #0
b _03801AC0
_03801AB8:
bl sub_037FEFE8
mov r0, #1
_03801AC0:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_03801948
arm_func_start sub_03801AC8
sub_03801AC8: ; 0x03801AC8
stmdb sp!, {r3, r4, r5, lr}
mov r5, r0
mov r4, r1
bl sub_037FEFE4
add r0, r5, r4, lsl #2
ldr r4, [r0, #0x3c]
cmp r4, #0
beq _03801AF4
cmp r4, #0x2000000
addlo r4, r5, r4
b _03801AF8
_03801AF4:
mov r4, #0
_03801AF8:
bl sub_037FEFE8
mov r0, r4
ldmia sp!, {r3, r4, r5, lr}
bx lr
arm_func_end sub_03801AC8
arm_func_start sub_03801B08
sub_03801B08: ; 0x03801B08
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r5, [sp, #0x24]
mov sb, r0
ldrb r4, [r5, #0xa]
ldrb r0, [r5]
cmp r4, #0xff
mov r6, r3
mov r8, r1
mov r7, r2
mvneq r6, #0
moveq r4, #0
cmp r0, #4
addls pc, pc, r0, lsl #2
b _03801BE8
_03801B40: ; jump table
b _03801BE8 ; case 0
b _03801B54 ; case 1
b _03801BC4 ; case 2
b _03801BD8 ; case 3
b _03801B54 ; case 4
_03801B54:
cmp r0, #1
bne _03801B98
ldr r2, [sp, #0x20]
ldrh r0, [r5, #4]
ldrh r1, [r5, #2]
add r0, r2, r0, lsl #3
ldr r0, [r0, #0x18]
cmp r0, #0
moveq r1, #0
beq _03801BA4
ldr r2, [r0, #0x38]
cmp r1, r2
movhs r1, #0
bhs _03801BA4
bl sub_03801AC8
mov r1, r0
b _03801BA4
_03801B98:
ldrh r1, [r5, #4]
ldrh r0, [r5, #2]
orr r1, r0, r1, lsl #16
_03801BA4:
cmp r1, #0
moveq r0, #0
beq _03801BEC
mov r0, sb
mov r3, r6
add r2, r1, #0xc
bl sub_037FF760
b _03801BEC
_03801BC4:
ldrh r1, [r5, #2]
mov r0, sb
mov r2, r6
bl sub_037FF79C
b _03801BEC
_03801BD8:
mov r0, sb
mov r1, r6
bl sub_037FF7E8
b _03801BEC
_03801BE8:
mov r0, #0
_03801BEC:
cmp r0, #0
moveq r0, #0
beq _03801C48
strb r8, [sb, #8]
ldrb r1, [r5, #6]
mov r0, sb
strb r1, [sb, #5]
strb r7, [sb, #9]
ldrb r1, [r5, #7]
bl sub_037FF8D4
ldrb r1, [r5, #8]
mov r0, sb
bl sub_037FF8F4
ldrb r1, [r5, #9]
mov r0, sb
bl sub_037FF910
mov r0, sb
mov r1, r4
bl sub_037FF918
ldrb r1, [r5, #0xb]
mov r0, #1
sub r1, r1, #0x40
strb r1, [sb, #0xa]
_03801C48:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
arm_func_end sub_03801B08
arm_func_start sub_03801C50
sub_03801C50: ; 0x03801C50
ldr ip, _03801C6C ; =_03807E6C
mov r3, #0x24
ldr ip, [ip]
mla r3, r0, r3, ip
add r0, r3, r1, lsl #1
strh r2, [r0, #0x20]
bx lr
.align 2, 0
_03801C6C: .word _03807E6C
arm_func_end sub_03801C50
arm_func_start sub_03801C70
sub_03801C70: ; 0x03801C70
ldr r2, _03801C88 ; =_03807E6C
ldr r2, [r2]
add r0, r2, r0, lsl #1
add r0, r0, #0x200
strh r1, [r0, #0x60]
bx lr
.align 2, 0
_03801C88: .word _03807E6C
arm_func_end sub_03801C70
arm_func_start sub_03801C8C
sub_03801C8C: ; 0x03801C8C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r0, _03801D20 ; =_03807E6C
mov r4, #0
ldr r0, [r0]
mov r5, r4
cmp r0, #0
beq _03801D18
mov r7, r4
mov r6, #1
_03801CB0:
mov r0, r7
bl sub_037FEB50
cmp r0, #0
orrne r0, r4, r6, lsl r7
movne r0, r0, lsl #0x10
add r7, r7, #1
movne r4, r0, lsr #0x10
cmp r7, #0x10
blt _03801CB0
mov r0, #0
bl sub_037FF14C
cmp r0, #0
orrne r0, r5, #1
movne r0, r0, lsl #0x10
movne r5, r0, lsr #0x10
mov r0, #1
bl sub_037FF14C
cmp r0, #0
orrne r0, r5, #2
movne r0, r0, lsl #0x10
movne r5, r0, lsr #0x10
ldr r0, _03801D20 ; =_03807E6C
ldr r1, [r0]
strh r4, [r1, #8]
ldr r0, [r0]
strh r5, [r0, #0xa]
_03801D18:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_03801D20: .word _03807E6C
arm_func_end sub_03801C8C
arm_func_start sub_03801D24
sub_03801D24: ; 0x03801D24
ldr r1, _03801D4C ; =_03807E70
mov r3, #0
mov r2, r3
_03801D30:
add r0, r1, r3, lsl #6
strb r2, [r0, #0xf80]
add r3, r3, #1
strb r2, [r0, #0xf81]
cmp r3, #8
blt _03801D30
bx lr
.align 2, 0
_03801D4C: .word _03807E70
arm_func_end sub_03801D24
arm_func_start sub_03801D50
sub_03801D50: ; 0x03801D50
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr lr, _03801DA8 ; =_03808DF0
ldr r4, [sp, #0x18]
ldrb ip, [lr, r0, lsl #6]
mov r7, r1
mov r6, r2
mov r5, r3
cmp ip, #0
add r8, lr, r0, lsl #6
beq _03801D88
add r0, r8, #0x14
bl sub_037FD5C0
mov r0, #0
strb r0, [r8]
_03801D88:
str r7, [r8, #4]
str r6, [r8, #8]
str r5, [r8, #0xc]
ldr r0, [sp, #0x1c]
str r4, [r8, #0x10]
strb r0, [r8, #1]
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_03801DA8: .word _03808DF0
arm_func_end sub_03801D50
arm_func_start sub_03801DAC
sub_03801DAC: ; 0x03801DAC
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0xc
ldr r1, _03801E60 ; =_03808DF0
mov sb, r0
ldrb r0, [r1, sb, lsl #6]
add r8, r1, sb, lsl #6
cmp r0, #0
beq _03801DDC
add r0, r8, #0x14
bl sub_037FD5C0
mov r0, #0
strb r0, [r8]
_03801DDC:
ldrb r1, [r8, #1]
ldr r7, [r8, #0xc]
ldr r6, [r8, #0x10]
add r0, r8, #0x14
ldr r5, [r8, #4]
ldr r4, [r8, #8]
orr sb, sb, r1, lsl #8
bl sub_037FD3A0
cmp r6, #0
cmpeq r7, #0
bne _03801E24
ldr r3, _03801E64 ; =sub_03801EA8
mov r1, r5
mov r2, r4
add r0, r8, #0x14
str sb, [sp]
bl sub_037FD4DC
b _03801E4C
_03801E24:
bl GetCurrentPlaybackTime
ldr r2, _03801E64 ; =sub_03801EA8
adds r0, r5, r0
stmib sp, {r2, sb}
adc r2, r4, r1
mov r1, r0
mov r3, r7
add r0, r8, #0x14
str r6, [sp]
bl sub_037FD54C
_03801E4C:
mov r0, #1
strb r0, [r8]
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_03801E60: .word _03808DF0
_03801E64: .word sub_03801EA8
arm_func_end sub_03801DAC
arm_func_start sub_03801E68
sub_03801E68: ; 0x03801E68
stmdb sp!, {r4, lr}
ldr r2, _03801EA4 ; =_03808DF0
ldrb r1, [r2, r0, lsl #6]
add r4, r2, r0, lsl #6
cmp r1, #0
beq _03801E9C
add r0, r4, #0x14
bl sub_037FD5C0
ldrb r1, [r4, #1]
mov r0, #0
add r1, r1, #1
strb r1, [r4, #1]
strb r0, [r4]
_03801E9C:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03801EA4: .word _03808DF0
arm_func_end sub_03801E68
arm_func_start sub_03801EA8
sub_03801EA8: ; 0x03801EA8
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, #7
mov r4, #0
_03801EB8:
mov r0, r5
mov r1, r6
mov r2, r4
bl sub_037FE410
cmp r0, #0
blt _03801EB8
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end sub_03801EA8
arm_func_start sub_03801ED8
sub_03801ED8: ; 0x03801ED8
stmdb sp!, {r3, lr}
ldr r0, _03801F0C ; =_03808FF0
ldr r1, _03801F10 ; =_03809010
mov r2, #8
bl sub_037FC6AC
ldr r1, _03801F14 ; =sub_038025CC
mov r0, #7
bl sub_037FE39C
ldr r0, _03801F18 ; =_03807E6C
mov r1, #0
str r1, [r0]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03801F0C: .word _03808FF0
_03801F10: .word _03809010
_03801F14: .word sub_038025CC
_03801F18: .word _03807E6C
arm_func_end sub_03801ED8
arm_func_start sub_03801F1C
sub_03801F1C: ; 0x03801F1C
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0x34
b _03802594
_03801F28:
ldr sl, _038025B8 ; =0x04000509
ldr r6, [sp, #0x18]
sub r4, sl, #1
b _03802578
_03801F38:
add r5, sp, #0x1c
ldmia r6!, {r0, r1, r2, r3}
stmia r5!, {r0, r1, r2, r3}
ldmia r6, {r0, r1}
stmia r5, {r0, r1}
ldr r0, [sp, #0x20]
cmp r0, #0x21
addls pc, pc, r0, lsl #2
b _03802574
_03801F5C: ; jump table
b _03801FE4 ; case 0
b _03801FFC ; case 1
b _03802008 ; case 2
b _03802020 ; case 3
b _0380202C ; case 4
b _0380203C ; case 5
b _0380204C ; case 6
b _03802064 ; case 7
b _0380208C ; case 8
b _038020A0 ; case 9
b _038020B4 ; case 10
b _038020D0 ; case 11
b _038020E8 ; case 12
b _038021B0 ; case 13
b _0380238C ; case 14
b _0380240C ; case 15
b _03802444 ; case 16
b _03802254 ; case 17
b _0380229C ; case 18
b _038022C4 ; case 19
b _03802304 ; case 20
b _0380234C ; case 21
b _03802474 ; case 22
b _03802480 ; case 23
b _0380248C ; case 24
b _03802498 ; case 25
b _038024B0 ; case 26
b _038024C0 ; case 27
b _038024D0 ; case 28
b _03802510 ; case 29
b _038024E0 ; case 30
b _038024F0 ; case 31
b _03802500 ; case 32
b _03802520 ; case 33
_03801FE4:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
ldr r3, [sp, #0x30]
bl sub_03800310
b _03802574
_03801FFC:
ldr r0, [sp, #0x24]
bl sub_03800340
b _03802574
_03802008:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
ldr r3, [sp, #0x30]
bl sub_038000B4
b _03802574
_03802020:
ldr r0, [sp, #0x24]
bl sub_038002F0
b _03802574
_0380202C:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_0380039C
b _03802574
_0380203C:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_03800414
b _03802574
_0380204C:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
ldr r3, [sp, #0x30]
bl sub_038006A4
b _03802574
_03802064:
ldr r1, [sp, #0x24]
mov r0, r1, lsr #0x18
and r0, r0, #0xff
str r0, [sp]
bic r0, r1, #0xff000000
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
ldr r3, [sp, #0x30]
bl sub_038006E8
b _03802574
_0380208C:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
bl sub_038004E0
b _03802574
_038020A0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
bl sub_0380054C
b _03802574
_038020B4:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
mov r2, r2, lsl #0x10
mov r2, r2, asr #0x10
bl sub_03801C50
b _03802574
_038020D0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
mov r1, r1, lsl #0x10
mov r1, r1, asr #0x10
bl sub_03801C70
b _03802574
_038020E8:
ldr r7, [sp, #0x2c]
ldr r6, [sp, #0x28]
ldr r5, [sp, #0x24]
bl EnableIrqFlag
mov r8, r0
mov r2, #0
b _03802124
_03802104:
tst r5, #1
movne r0, r2, lsl #4
addne r0, r0, #0x4000000
ldrneb r1, [r0, #0x403]
add r2, r2, #1
orrne r1, r1, #0x80
strneb r1, [r0, #0x403]
mov r5, r5, lsr #1
_03802124:
cmp r2, #0x10
bge _03802134
cmp r5, #0
bne _03802104
_03802134:
tst r6, #1
beq _03802160
tst r6, #2
ldrneh r1, [r4]
orrne r0, r1, #0x80
orrne r0, r0, #0x8000
strneh r0, [r4]
ldreqb r0, [r4]
orreq r0, r0, #0x80
streqb r0, [r4]
b _03802170
_03802160:
tst r6, #2
ldrneb r0, [sl]
orrne r0, r0, #0x80
strneb r0, [sl]
_03802170:
mov r5, #0
b _03802190
_03802178:
tst r7, #1
beq _03802188
mov r0, r5
bl sub_03801DAC
_03802188:
add r5, r5, #1
mov r7, r7, lsr #1
_03802190:
cmp r5, #8
bge _038021A0
cmp r7, #0
bne _03802178
_038021A0:
mov r0, r8
bl SetIrqFlag
bl sub_03801C8C
b _03802574
_038021B0:
ldr sb, [sp, #0x30]
ldr r7, [sp, #0x2c]
ldr r6, [sp, #0x28]
ldr r5, [sp, #0x24]
bl EnableIrqFlag
mov fp, r0
mov r8, #0
b _038021E8
_038021D0:
tst r7, #1
beq _038021E0
mov r0, r8
bl sub_03801E68
_038021E0:
add r8, r8, #1
mov r7, r7, lsr #1
_038021E8:
cmp r8, #8
bge _038021F8
cmp r7, #0
bne _038021D0
_038021F8:
mov r7, #0
b _0380221C
_03802200:
tst r5, #1
beq _03802214
mov r0, r7
mov r1, sb
bl sub_037FEA20
_03802214:
add r7, r7, #1
mov r5, r5, lsr #1
_0380221C:
cmp r7, #0x10
bge _0380222C
cmp r5, #0
bne _03802200
_0380222C:
tst r6, #1
movne r0, #0
strneb r0, [r4]
tst r6, #2
movne r0, #0
strneb r0, [sl]
mov r0, fp
bl SetIrqFlag
bl sub_03801C8C
b _03802574
_03802254:
ldr r1, [sp, #0x2c]
mov r0, r1, lsr #0x1d
and r0, r0, #1
str r0, [sp]
mov r0, r1, lsr #0x1c
and r0, r0, #1
str r0, [sp, #4]
mov r0, r1, lsr #0x1b
and r0, r0, #1
str r0, [sp, #8]
mov r0, r1, lsr #0x1f
and r0, r0, #1
mov r1, r1, lsr #0x1e
and r1, r1, #1
ldr r2, [sp, #0x24]
ldr r3, [sp, #0x28]
bl sub_037FF0FC
b _03802574
_0380229C:
ldr r0, [sp, #0x30]
mov r2, #0
str r0, [sp, #4]
ldr r3, [sp, #0x2c]
mov r0, #0
str r0, [sp]
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_03801D50
b _03802574
_038022C4:
ldr r6, [sp, #0x28]
ldr r5, [sp, #0x24]
mov r7, #0
b _038022F0
_038022D4:
tst r5, #1
beq _038022E8
mov r0, r7
mov r1, r6
bl sub_037FEAC0
_038022E8:
add r7, r7, #1
mov r5, r5, lsr #1
_038022F0:
cmp r7, #0x10
bge _03802574
cmp r5, #0
bne _038022D4
b _03802574
_03802304:
ldr r7, [sp, #0x2c]
ldr r6, [sp, #0x28]
ldr r5, [sp, #0x24]
mov r8, #0
b _03802338
_03802318:
tst r5, #1
beq _03802330
mov r0, r8
mov r1, r6
mov r2, r7
bl sub_037FEA48
_03802330:
add r8, r8, #1
mov r5, r5, lsr #1
_03802338:
cmp r8, #0x10
bge _03802574
cmp r5, #0
bne _03802318
b _03802574
_0380234C:
ldr r6, [sp, #0x28]
ldr r5, [sp, #0x24]
mov r7, #0
b _03802378
_0380235C:
tst r5, #1
beq _03802370
mov r0, r7
mov r1, r6
bl sub_037FEAD8
_03802370:
add r7, r7, #1
mov r5, r5, lsr #1
_03802378:
cmp r7, #0x10
bge _03802574
cmp r5, #0
bne _0380235C
b _03802574
_0380238C:
ldr r3, [sp, #0x30]
ldr r0, [sp, #0x24]
mov r1, r3, lsl #0x10
ldr r2, [sp, #0x2c]
mov r1, r1, lsr #0x10
str r1, [sp]
ldr r1, _038025BC ; =0x003FFFFF
and r1, r2, r1
str r1, [sp, #4]
mov r1, r2, lsr #0x18
and r1, r1, #0x7f
str r1, [sp, #8]
mov r1, r2, lsr #0x16
and r1, r1, #3
str r1, [sp, #0xc]
mov r1, r0, lsr #0x10
mov r1, r1, lsl #0x10
mov r1, r1, lsr #0x10
str r1, [sp, #0x10]
mov r1, r3, lsr #0x10
mov r2, r3, lsr #0x18
and r1, r1, #0x7f
str r1, [sp, #0x14]
ldr r1, [sp, #0x28]
mov r0, r0, lsl #0x10
mov r3, r3, lsr #0x1a
mov r0, r0, lsr #0x10
bic r1, r1, #0xf8000000
and r2, r2, #3
and r3, r3, #3
bl sub_037FE804
b _03802574
_0380240C:
ldr r1, [sp, #0x2c]
ldr r3, [sp, #0x28]
mov r0, r1, lsl #8
mov r0, r0, lsr #0x10
str r0, [sp]
and r0, r1, #0x7f
str r0, [sp, #4]
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x30]
and r2, r3, #0x7f
mov r3, r3, lsr #8
and r3, r3, #3
bl sub_037FE8D0
b _03802574
_03802444:
ldr r1, [sp, #0x2c]
ldr r2, [sp, #0x28]
and r0, r1, #0x7f
str r0, [sp]
mov r0, r1, lsl #8
mov r3, r0, lsr #0x10
ldr r0, [sp, #0x24]
and r1, r2, #0x7f
mov r2, r2, lsr #8
and r2, r2, #3
bl sub_037FE97C
b _03802574
_03802474:
ldr r0, [sp, #0x24]
bl sub_037FEBE0
b _03802574
_03802480:
ldr r0, [sp, #0x24]
bl sub_037FE7BC
b _03802574
_0380248C:
ldr r0, [sp, #0x24]
bl sub_037FEB6C
b _03802574
_03802498:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
ldr r2, [sp, #0x2c]
ldr r3, [sp, #0x30]
bl sub_037FE7CC
b _03802574
_038024B0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_037FFBE0
b _03802574
_038024C0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_037FFCC0
b _03802574
_038024D0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_037FFB30
b _03802574
_038024E0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_038005BC
b _03802574
_038024F0:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_03800648
b _03802574
_03802500:
ldr r0, [sp, #0x24]
ldr r1, [sp, #0x28]
bl sub_037FFD14
b _03802574
_03802510:
ldr r1, [sp, #0x24]
ldr r0, _038025C0 ; =_03807E6C
str r1, [r0]
b _03802574
_03802520:
ldr r5, [sp, #0x24]
ldr r0, _038025C4 ; =_03807E70
mov r1, r5
mov r2, #0x1180
bl sub_037FDFEC
ldr r0, _038025C4 ; =_03807E70
add r1, r5, #0x1000
str r0, [r1, #0x1c0]
mov r6, #0
_03802544:
mov r0, r6
bl sub_037FEBD0
add r1, r5, r6, lsl #2
add r1, r1, #0x1000
str r0, [r1, #0x180]
add r6, r6, #1
cmp r6, #0x10
blt _03802544
mov r0, #0
bl sub_037FFCF8
add r1, r5, #0x1000
str r0, [r1, #0x1c4]
_03802574:
ldr r6, [sp, #0x1c]
_03802578:
cmp r6, #0
bne _03801F38
ldr r0, _038025C0 ; =_03807E6C
ldr r1, [r0]
ldr r0, [r1]
add r0, r0, #1
str r0, [r1]
_03802594:
ldr r0, _038025C8 ; =_03808FF0
add r1, sp, #0x18
mov r2, #0
bl sub_037FC760
cmp r0, #0
bne _03801F28
add sp, sp, #0x34
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_038025B8: .word 0x04000509
_038025BC: .word 0x003FFFFF
_038025C0: .word _03807E6C
_038025C4: .word _03807E70
_038025C8: .word _03808FF0
arm_func_end sub_03801F1C
arm_func_start sub_038025CC
sub_038025CC: ; 0x038025CC
stmdb sp!, {r3, r4, r5, lr}
mov r5, r1
bl EnableIrqFlag
mov r4, r0
cmp r5, #0x2000000
blo _038025F8
ldr r0, _03802614 ; =_03808FF0
mov r1, r5
mov r2, #0
bl sub_037FC6D4
b _03802604
_038025F8:
cmp r5, #0
bne _03802604
bl sub_037FEFC8
_03802604:
mov r0, r4
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_03802614: .word _03808FF0
arm_func_end sub_038025CC
arm_func_start sub_03802618
sub_03802618: ; 0x03802618
ldr ip, _03802620 ; =sub_03803168
bx ip
.align 2, 0
_03802620: .word sub_03803168
arm_func_end sub_03802618
arm_func_start sub_03802624
sub_03802624: ; 0x03802624
stmdb sp!, {r4, lr}
sub sp, sp, #8
ldr r4, _038026C8 ; =_03809060
mov r2, #0
mvn r1, #2
str r1, [r4, #0xc]
mov r0, #4
str r0, [r4, #0xf0]
str r2, [r4, #0x10]
str r2, [r4, #0x1c]
str r2, [r4]
str r2, [r4, #8]
str r2, [r4, #0x18]
str r2, [r4, #0x14]
str r2, [r4, #0xf8]
str r2, [r4, #0xf4]
mov r0, #0x400
str r0, [sp]
ldr ip, [r4, #0xf0]
ldr r1, _038026CC ; =sub_038032B8
ldr r3, _038026D0 ; =_03809660
add r0, r4, #0x48
str ip, [sp, #4]
bl sub_037FC054
add r0, r4, #0x48
bl sub_037FC36C
ldr r1, _038026D4 ; =sub_038031D4
mov r0, #0xb
bl sub_037FE39C
ldr r0, _038026D8 ; =0x027FFC40
ldrh r0, [r0]
cmp r0, #2
moveq r0, #1
movne r0, #0
cmp r0, #0
ldreq r0, _038026DC ; =_03809040
moveq r1, #1
streq r1, [r0]
add sp, sp, #8
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_038026C8: .word _03809060
_038026CC: .word sub_038032B8
_038026D0: .word _03809660
_038026D4: .word sub_038031D4
_038026D8: .word 0x027FFC40
_038026DC: .word _03809040
arm_func_end sub_03802624
arm_func_start sub_038026E0
sub_038026E0: ; 0x038026E0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r5, _0380271C ; =_03809060
mov r7, r0
bl EnableIrqFlag
ldr r6, [r5, #0xf0]
mov r4, r0
mov r1, r7
add r0, r5, #0x48
str r7, [r5, #0xf0]
bl sub_037FC3C0
mov r0, r4
bl SetIrqFlag
mov r0, r6
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_0380271C: .word _03809060
arm_func_end sub_038026E0
arm_func_start sub_03802720
sub_03802720: ; 0x03802720
ldr r0, _03802728 ; =0x027FFA80
bx lr
.align 2, 0
_03802728: .word 0x027FFA80
arm_func_end sub_03802720
arm_func_start sub_0380272C
sub_0380272C: ; 0x0380272C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r5, r0
mov r4, r1
adds r1, r5, r4
beq _038027C4
cmp r5, #0
beq _0380274C
bl sub_037FC468
_0380274C:
cmp r4, #0
beq _038027A0
sub r7, r4, r5
mov r4, #0
mov r5, #1
mov r6, #5
b _03802780
_03802768:
cmp r7, #5
movlt r8, r7
movge r8, r6
mov r0, r8
bl sub_037FC468
sub r7, r7, r8
_03802780:
bl sub_038027D0
tst r0, #1
moveq r0, r5
movne r0, r4
cmp r0, #0
bne _038027A0
cmp r7, #0
bgt _03802768
_038027A0:
bl sub_038027D0
tst r0, #1
moveq r0, #1
movne r0, #0
cmp r0, #0
ldreq r0, _038027CC ; =_03809060
moveq r1, #4
ldreq r0, [r0]
streq r1, [r0]
_038027C4:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_038027CC: .word _03809060
arm_func_end sub_0380272C
arm_func_start sub_038027D0
sub_038027D0: ; 0x038027D0
stmdb sp!, {r3, lr}
ldr ip, _03802814 ; =_03809660
mov lr, #2
ldr r0, _03802818 ; =_0380720C
ldr r3, _0380281C ; =sub_03802924
mov r1, #0
mov r2, #1
str lr, [ip, #4]
bl sub_03802860
ldr r3, _03802820 ; =sub_038028E4
add r1, sp, #0
mov r0, #0
mov r2, #1
bl sub_03802860
ldrb r0, [sp]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03802814: .word _03809660
_03802818: .word _0380720C
_0380281C: .word sub_03802924
_03802820: .word sub_038028E4
arm_func_end sub_038027D0
arm_func_start sub_03802824
sub_03802824: ; 0x03802824
stmdb sp!, {r3, lr}
mov r0, #0
mov r1, #0x32
bl sub_0380272C
ldr r0, _0380285C ; =_03809060
ldr r1, [r0]
ldr r0, [r1]
cmp r0, #4
moveq r0, #6
streq r0, [r1]
moveq r0, #0
movne r0, #1
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_0380285C: .word _03809060
arm_func_end sub_03802824
arm_func_start sub_03802860
sub_03802860: ; 0x03802860
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r5, _038028D8 ; =_03809664
ldr r8, _038028DC ; =0x0000A040
ldr r4, _038028E0 ; =0x040001A0
stmib r5, {r0, r1}
strh r8, [r4]
mov r7, r2
mov r6, r3
mov r8, #0xa000
b _038028B4
_03802888:
ldr r0, [r5]
subs r0, r0, #1
str r0, [r5]
streqh r8, [r4]
_03802898:
ldrh r0, [r4]
tst r0, #0x80
bne _03802898
mov r0, r5
mov lr, pc
bx r6
_038028B0:
sub r7, r7, #1
_038028B4:
cmp r7, #0
bne _03802888
ldr r0, [r5]
cmp r0, #0
ldreq r0, _038028E0 ; =0x040001A0
moveq r1, #0
streqh r1, [r0]
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_038028D8: .word _03809664
_038028DC: .word 0x0000A040
_038028E0: .word 0x040001A0
arm_func_end sub_03802860
arm_func_start sub_038028E4
sub_038028E4: ; 0x038028E4
ldr r1, _03802920 ; =0x040001A2
mov r2, #0
strh r2, [r1]
sub r2, r1, #2
_038028F4:
ldrh r1, [r2]
tst r1, #0x80
bne _038028F4
ldr r2, _03802920 ; =0x040001A2
ldr r1, [r0, #8]
ldrh r2, [r2]
strb r2, [r1]
ldr r1, [r0, #8]
add r1, r1, #1
str r1, [r0, #8]
bx lr
.align 2, 0
_03802920: .word 0x040001A2
arm_func_end sub_038028E4
arm_func_start sub_03802924
sub_03802924: ; 0x03802924
stmdb sp!, {r3}
sub sp, sp, #4
ldr r1, [r0, #4]
ldr r2, _03802970 ; =0x040001A2
ldrb r1, [r1]
strh r1, [r2]
ldr r1, [r0, #4]
add r1, r1, #1
str r1, [r0, #4]
sub r1, r2, #2
_0380294C:
ldrh r0, [r1]
tst r0, #0x80
bne _0380294C
ldr r0, _03802970 ; =0x040001A2
ldrh r0, [r0]
strh r0, [sp]
add sp, sp, #4
ldmia sp!, {r3}
bx lr
.align 2, 0
_03802970: .word 0x040001A2
arm_func_end sub_03802924
arm_func_start sub_03802974
sub_03802974: ; 0x03802974
ldr r1, _038029D4 ; =0x040001A2
mov r2, #0
strh r2, [r1]
sub r2, r1, #2
_03802984:
ldrh r1, [r2]
tst r1, #0x80
bne _03802984
ldr r2, _038029D4 ; =0x040001A2
ldr r1, [r0, #4]
ldrh r2, [r2]
ldrb r1, [r1]
and r2, r2, #0xff
cmp r2, r1
beq _038029C4
mov r1, #0
str r1, [r0, #0xc]
ldr r1, [r0]
cmp r1, #1
movhi r1, #1
strhi r1, [r0]
_038029C4:
ldr r1, [r0, #4]
add r1, r1, #1
str r1, [r0, #4]
bx lr
.align 2, 0
_038029D4: .word 0x040001A2
arm_func_end sub_03802974
arm_func_start sub_038029D8
sub_038029D8: ; 0x038029D8
stmdb sp!, {r3, lr}
ldr ip, _03802A00 ; =_03809660
mov r2, #1
ldr r0, _03802A04 ; =_03807204
ldr r3, _03802A08 ; =sub_03802924
mov r1, #0
str r2, [ip, #4]
bl sub_03802860
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03802A00: .word _03809660
_03802A04: .word _03807204
_03802A08: .word sub_03802924
arm_func_end sub_038029D8
arm_func_start sub_03802A0C
sub_03802A0C: ; 0x03802A0C
stmdb sp!, {r3, lr}
ldr r2, _03802AA4 ; =_03809060
ldr r2, [r2]
ldr r2, [r2, #0x28]
cmp r2, #1
beq _03802A38
cmp r2, #2
beq _03802A54
cmp r2, #3
beq _03802A6C
b _03802A88
_03802A38:
mov r3, r0, lsr #5
and r3, r3, #8
mov ip, r0, lsl #0x18
orr r0, r1, r3
orr r0, r0, ip, lsr #16
str r0, [sp]
b _03802A88
_03802A54:
and r3, r0, #0xff00
mov ip, r0, lsl #0x18
orr r0, r1, r3
orr r0, r0, ip, lsr #8
str r0, [sp]
b _03802A88
_03802A6C:
mov r3, r0, lsr #8
and r3, r3, #0xff00
and ip, r0, #0xff00
orr r1, r1, r3
orr r1, r1, ip, lsl #8
orr r0, r1, r0, lsl #24
str r0, [sp]
_03802A88:
ldr r3, _03802AA8 ; =sub_03802924
add r0, sp, #0
add r2, r2, #1
mov r1, #0
bl sub_03802860
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03802AA4: .word _03809060
_03802AA8: .word sub_03802924
arm_func_end sub_03802A0C
arm_func_start sub_03802AAC
sub_03802AAC: ; 0x03802AAC
stmdb sp!, {r4, lr}
ldr r0, _03802AFC ; =_03809060
ldr r0, [r0]
ldrb r4, [r0, #0x54]
cmp r4, #0xff
beq _03802AF4
ldr r0, _03802B00 ; =_03809660
ldr r0, [r0]
cmp r0, #0
bne _03802AF4
bl sub_038027D0
cmp r4, r0
beq _03802AE8
mov r0, r4
bl sub_03802F04
_03802AE8:
ldr r0, _03802B00 ; =_03809660
mov r1, #1
str r1, [r0]
_03802AF4:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03802AFC: .word _03809060
_03802B00: .word _03809660
arm_func_end sub_03802AAC
arm_func_start sub_03802B04
sub_03802B04: ; 0x03802B04
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl sub_03802824
cmp r0, #0
beq _03802B5C
ldr r0, _03802B64 ; =_03809060
ldr r2, _03802B68 ; =_03809660
ldr r1, [r0]
mov r0, r6
ldr r3, [r1, #0x28]
mov r1, #3
add r3, r3, #1
add r3, r3, r4
str r3, [r2, #4]
bl sub_03802A0C
ldr r3, _03802B6C ; =sub_038028E4
mov r1, r5
mov r2, r4
mov r0, #0
bl sub_03802860
_03802B5C:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_03802B64: .word _03809060
_03802B68: .word _03809660
_03802B6C: .word sub_038028E4
arm_func_end sub_03802B04
arm_func_start sub_03802B70
sub_03802B70: ; 0x03802B70
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
mov sb, r1
mov r8, r2
bl sub_03802824
cmp r0, #0
beq _03802C14
ldr r0, _03802C1C ; =_03809060
ldr fp, _03802C20 ; =_03809660
ldr r5, [r0]
ldr r6, [r5, #0x24]
sub r4, r6, #1
b _03802C0C
_03802BA4:
and r0, sl, r4
sub r7, r6, r0
cmp r7, r8
movhi r7, r8
bl sub_038029D8
ldr r1, [r5, #0x28]
mov r0, sl
add r1, r1, #1
add r1, r1, r7
str r1, [fp, #4]
mov r1, #2
bl sub_03802A0C
ldr r3, _03802C24 ; =sub_03802924
mov r0, sb
mov r1, #0
mov r2, r7
bl sub_03802860
ldr r0, [r5, #0x2c]
mov r1, #0
bl sub_0380272C
ldr r0, [r5]
cmp r0, #0
bne _03802C14
add sb, sb, r7
add sl, sl, r7
sub r8, r8, r7
_03802C0C:
cmp r8, #0
bne _03802BA4
_03802C14:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03802C1C: .word _03809060
_03802C20: .word _03809660
_03802C24: .word sub_03802924
arm_func_end sub_03802B70
arm_func_start sub_03802C28
sub_03802C28: ; 0x03802C28
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, r0
mov sb, r1
mov r8, r2
bl sub_03802824
cmp r0, #0
beq _03802CCC
ldr r0, _03802CD4 ; =_03809060
ldr fp, _03802CD8 ; =_03809660
ldr r5, [r0]
ldr r6, [r5, #0x24]
sub r4, r6, #1
b _03802CC4
_03802C5C:
and r0, sl, r4
sub r7, r6, r0
cmp r7, r8
movhi r7, r8
bl sub_038029D8
ldr r1, [r5, #0x28]
mov r0, sl
add r1, r1, #1
add r1, r1, r7
str r1, [fp, #4]
mov r1, #0xa
bl sub_03802A0C
ldr r3, _03802CDC ; =sub_03802924
mov r0, sb
mov r1, #0
mov r2, r7
bl sub_03802860
ldr r0, [r5, #0x30]
ldr r1, [r5, #0x34]
bl sub_0380272C
ldr r0, [r5]
cmp r0, #0
bne _03802CCC
add sb, sb, r7
add sl, sl, r7
sub r8, r8, r7
_03802CC4:
cmp r8, #0
bne _03802C5C
_03802CCC:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03802CD4: .word _03809060
_03802CD8: .word _03809660
_03802CDC: .word sub_03802924
arm_func_end sub_03802C28
arm_func_start sub_03802CE0
sub_03802CE0: ; 0x03802CE0
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
bl sub_03802824
cmp r0, #0
beq _03802D5C
ldr r0, _03802D64 ; =_03809060
ldr r2, _03802D68 ; =_03809660
ldr r4, [r0]
mov r0, #1
str r0, [r2, #0x10]
ldr r1, [r4, #0x28]
mov r0, r7
add r1, r1, #1
add r3, r1, r5
mov r1, #3
str r3, [r2, #4]
bl sub_03802A0C
ldr r3, _03802D6C ; =sub_03802974
mov r0, r6
mov r2, r5
mov r1, #0
bl sub_03802860
ldr r0, [r4]
cmp r0, #0
ldreq r0, _03802D68 ; =_03809660
ldreq r0, [r0, #0x10]
cmpeq r0, #0
moveq r0, #1
streq r0, [r4]
_03802D5C:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_03802D64: .word _03809060
_03802D68: .word _03809660
_03802D6C: .word sub_03802974
arm_func_end sub_03802CE0
arm_func_start sub_03802D70
sub_03802D70: ; 0x03802D70
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r2, _03802E04 ; =_03809060
mov r7, r0
ldr r4, [r2]
mov r6, r1
ldr r5, [r4, #0x1c]
orr r0, r7, r6
sub r1, r5, #1
tst r1, r0
movne r0, #2
strne r0, [r4]
bne _03802DFC
bl sub_03802824
cmp r0, #0
beq _03802DFC
ldr r8, _03802E08 ; =_03809660
mov sb, #0xd8
b _03802DF4
_03802DB8:
bl sub_038029D8
ldr r1, [r4, #0x28]
mov r0, r7
add r1, r1, #1
str r1, [r8, #4]
mov r1, sb
bl sub_03802A0C
ldr r0, [r4, #0x40]
ldr r1, [r4, #0x44]
bl sub_0380272C
ldr r0, [r4]
cmp r0, #0
bne _03802DFC
add r7, r7, r5
sub r6, r6, r5
_03802DF4:
cmp r6, #0
bne _03802DB8
_03802DFC:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_03802E04: .word _03809060
_03802E08: .word _03809660
arm_func_end sub_03802D70
arm_func_start sub_03802E0C
sub_03802E0C: ; 0x03802E0C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r2, _03802EA0 ; =_03809060
mov r7, r0
ldr r4, [r2]
mov r6, r1
ldr r5, [r4, #0x20]
orr r0, r7, r6
sub r1, r5, #1
tst r1, r0
movne r0, #2
strne r0, [r4]
bne _03802E98
bl sub_03802824
cmp r0, #0
beq _03802E98
ldr r8, _03802EA4 ; =_03809660
mov sb, #0x20
b _03802E90
_03802E54:
bl sub_038029D8
ldr r1, [r4, #0x28]
mov r0, r7
add r1, r1, #1
str r1, [r8, #4]
mov r1, sb
bl sub_03802A0C
ldr r0, [r4, #0x48]
ldr r1, [r4, #0x4c]
bl sub_0380272C
ldr r0, [r4]
cmp r0, #0
bne _03802E98
add r7, r7, r5
sub r6, r6, r5
_03802E90:
cmp r6, #0
bne _03802E54
_03802E98:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_03802EA0: .word _03809060
_03802EA4: .word _03809660
arm_func_end sub_03802E0C
arm_func_start sub_03802EA8
sub_03802EA8: ; 0x03802EA8
stmdb sp!, {r4, lr}
bl sub_03802824
cmp r0, #0
beq _03802EEC
ldr r0, _03802EF4 ; =_03809060
ldr r4, [r0]
bl sub_038029D8
ldr r1, _03802EF8 ; =_03809660
mov r2, #1
ldr r0, _03802EFC ; =_03807208
ldr r3, _03802F00 ; =sub_03802924
str r2, [r1, #4]
mov r1, #0
bl sub_03802860
ldr r0, [r4, #0x38]
ldr r1, [r4, #0x3c]
bl sub_0380272C
_03802EEC:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03802EF4: .word _03809060
_03802EF8: .word _03809660
_03802EFC: .word _03807208
_03802F00: .word sub_03802924
arm_func_end sub_03802EA8
arm_func_start sub_03802F04
sub_03802F04: ; 0x03802F04
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov r4, r0
bl sub_03802824
cmp r0, #0
beq _03802F88
ldr r0, _03802F90 ; =_03809060
strb r4, [sp, #1]
mov r1, #1
ldr sb, [r0]
ldr r5, _03802F94 ; =sub_03802924
ldr r4, _03802F98 ; =_03809660
strb r1, [sp]
mov sl, #0xa
add r7, sp, #0
mov r8, #2
mov r6, #0
mov fp, #5
_03802F48:
bl sub_038029D8
mov r0, r7
str r8, [r4, #4]
mov r1, r6
mov r2, r8
mov r3, r5
bl sub_03802860
mov r0, fp
mov r1, #0
bl sub_0380272C
ldr r0, [sb]
cmp r0, #4
bne _03802F88
sub sl, sl, #1
cmp sl, #0
bgt _03802F48
_03802F88:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03802F90: .word _03809060
_03802F94: .word sub_03802924
_03802F98: .word _03809660
arm_func_end sub_03802F04
arm_func_start sub_03802F9C
sub_03802F9C: ; 0x03802F9C
ldr r3, _03802FF4 ; =0x040001A4
_03802FA0:
ldr r2, [r3]
tst r2, #0x80000000
bne _03802FA0
ldr r3, _03802FF8 ; =0x040001A1
mov r2, #0xc0
strb r2, [r3]
mov r2, r0, lsr #0x18
strb r2, [r3, #7]
mov r2, r0, lsr #0x10
strb r2, [r3, #8]
mov r2, r0, lsr #8
strb r2, [r3, #9]
strb r0, [r3, #0xa]
mov r0, r1, lsr #0x18
strb r0, [r3, #0xb]
mov r0, r1, lsr #0x10
strb r0, [r3, #0xc]
mov r0, r1, lsr #8
strb r0, [r3, #0xd]
strb r1, [r3, #0xe]
bx lr
.align 2, 0
_03802FF4: .word 0x040001A4
_03802FF8: .word 0x040001A1
arm_func_end sub_03802F9C
arm_func_start sub_03802FFC
sub_03802FFC: ; 0x03802FFC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r4, _0380306C ; =_03809060
mov r1, #0
ldr r0, [r4]
str r1, [r0]
ldr r7, [r4, #0x3c]
ldr r6, [r4, #0x40]
bl EnableIrqFlag
ldr r1, [r4, #0xfc]
mov r5, r0
bic r0, r1, #0x4c
str r0, [r4, #0xfc]
add r0, r4, #0xf4
bl sub_037FC2E4
ldr r0, [r4, #0xfc]
tst r0, #0x10
beq _03803048
add r0, r4, #0x48
bl sub_037FC36C
_03803048:
mov r0, r5
bl SetIrqFlag
cmp r7, #0
beq _03803064
mov r0, r6
mov lr, pc
bx r7
_03803064:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_0380306C: .word _03809060
arm_func_end sub_03802FFC
arm_func_start sub_03803070
sub_03803070: ; 0x03803070
ldr r1, _0380308C ; =_03807560
ldr r1, [r1]
ldr r1, [r1, #0x60]
bic r1, r1, #0x7000000
orr r0, r1, r0
orr r0, r0, #0xa0000000
bx lr
.align 2, 0
_0380308C: .word _03807560
arm_func_end sub_03803070
arm_func_start sub_03803090
sub_03803090: ; 0x03803090
bx lr
arm_func_end sub_03803090
arm_func_start sub_03803094
sub_03803094: ; 0x03803094
stmdb sp!, {r3, lr}
mov r0, #0xb8000000
mov r1, #0
bl sub_03802F9C
mov r0, #0x7000000
bl sub_03803070
mov r1, #0x2000
rsb r1, r1, #0
ldr r2, _038030DC ; =0x040001A4
and r0, r0, r1
str r0, [r2]
_038030C0:
ldr r0, [r2]
tst r0, #0x800000
beq _038030C0
ldr r0, _038030E0 ; =0x04100010
ldr r0, [r0]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038030DC: .word 0x040001A4
_038030E0: .word 0x04100010
arm_func_end sub_03803094
arm_func_start sub_038030E4
sub_038030E4: ; 0x038030E4
stmdb sp!, {r4, lr}
ldr r0, _03803110 ; =_03809060
mov r1, #0
mov r2, r1
bl sub_03803114
bl sub_03803094
mov r4, r0
bl sub_03802FFC
mov r0, r4
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03803110: .word _03809060
arm_func_end sub_038030E4
arm_func_start sub_03803114
sub_03803114: ; 0x03803114
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r5, r2
bl EnableIrqFlag
mov r4, r0
b _03803138
_03803130:
add r0, r7, #0xf4
bl sub_037FC290
_03803138:
ldr r0, [r7, #0xfc]
tst r0, #4
bne _03803130
ldr r1, [r7, #0xfc]
mov r0, r4
orr r1, r1, #4
str r1, [r7, #0xfc]
str r6, [r7, #0x3c]
str r5, [r7, #0x40]
bl SetIrqFlag
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_03803114
arm_func_start sub_03803168
sub_03803168: ; 0x03803168
stmdb sp!, {r3, lr}
ldr ip, _038031C8 ; =_03809060
ldr r0, [ip, #0xfc]
cmp r0, #0
bne _038031C0
ldr r0, _038031CC ; =_03809680
mov r2, #0
sub r1, r2, #1
mov r3, #1
str r3, [ip, #0xfc]
str r2, [ip, #0x28]
str r2, [ip, #0x24]
str r2, [ip, #0x20]
str r1, [ip, #0x2c]
str r2, [ip, #0x3c]
str r2, [ip, #0x40]
str r2, [r0]
bl sub_03802624
ldr r1, _038031D0 ; =sub_03803090
ldr r0, _038031CC ; =_03809680
str r1, [r0, #0x20]
bl sub_038034EC
_038031C0:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038031C8: .word _03809060
_038031CC: .word _03809680
_038031D0: .word sub_03803090
arm_func_end sub_03803168
arm_func_start sub_038031D4
sub_038031D4: ; 0x038031D4
stmdb sp!, {r3, lr}
cmp r0, #0xb
bne _038032AC
cmp r2, #0
beq _038032AC
ldr r0, _038032B4 ; =_03809060
ldr r2, [r0, #8]
cmp r2, #0
streq r1, [r0, #4]
ldr r2, [r0, #4]
cmp r2, #0xf
addls pc, pc, r2, lsl #2
b _03803278
_03803208: ; jump table
b _03803248 ; case 0
b _03803278 ; case 1
b _0380326C ; case 2
b _0380326C ; case 3
b _0380326C ; case 4
b _0380326C ; case 5
b _0380326C ; case 6
b _0380326C ; case 7
b _0380326C ; case 8
b _0380326C ; case 9
b _0380326C ; case 10
b _0380326C ; case 11
b _0380326C ; case 12
b _0380326C ; case 13
b _0380326C ; case 14
b _0380326C ; case 15
_03803248:
ldr r2, [r0, #8]
cmp r2, #0
beq _03803278
cmp r2, #1
ldreq r2, [r0, #0xfc]
streq r1, [r0]
orreq r1, r2, #0x10
streq r1, [r0, #0xfc]
b _03803278
_0380326C:
ldr r1, [r0, #0xfc]
orr r1, r1, #0x10
str r1, [r0, #0xfc]
_03803278:
ldr r1, [r0, #0xfc]
tst r1, #0x10
ldreq r1, [r0, #8]
addeq r1, r1, #1
streq r1, [r0, #8]
beq _038032AC
ldr r1, [r0, #0xfc]
mov r2, #0
str r2, [r0, #8]
tst r1, #4
ldrne r0, [r0, #0xec]
addeq r0, r0, #0x48
bl sub_037FC36C
_038032AC:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038032B4: .word _03809060
arm_func_end sub_038031D4
arm_func_start sub_038032B8
sub_038032B8: ; 0x038032B8
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r4, _038034E8 ; =_03809060
_038032C0:
mov r5, #0
bl EnableIrqFlag
mov r6, r0
add r8, r4, #0x48
mov r7, r5
_038032D4:
ldr r0, [r4, #0xfc]
tst r0, #4
bne _0380330C
ldr r0, [r4, #0xfc]
tst r0, #0x10
beq _03803318
ldr r0, [r4, #0xfc]
mov r5, #1
orr r0, r0, #4
str r0, [r4, #0xfc]
ldr r0, [r4, #0xfc]
bic r0, r0, #0x10
str r0, [r4, #0xfc]
b _03803328
_0380330C:
ldr r0, [r4, #0xfc]
tst r0, #8
bne _03803328
_03803318:
mov r0, r7
str r8, [r4, #0xec]
bl sub_037FC290
b _038032D4
_03803328:
mov r0, r6
bl SetIrqFlag
cmp r5, #0
beq _038034D4
ldr r0, [r4]
mov r1, #0
str r1, [r0]
ldr r3, [r4]
ldr r2, [r4, #4]
ldr r1, [r3, #0x58]
mov r0, #1
tst r1, r0, lsl r2
moveq r0, #3
streq r0, [r3]
beq _03803478
cmp r2, #0xf
addls pc, pc, r2, lsl #2
b _03803470
_03803370: ; jump table
b _03803478 ; case 0
b _03803478 ; case 1
b _038033B0 ; case 2
b _038033B8 ; case 3
b _038033C8 ; case 4
b _03803470 ; case 5
b _038033D4 ; case 6
b _038033E8 ; case 7
b _038033FC ; case 8
b _03803410 ; case 9
b _03803470 ; case 10
b _03803424 ; case 11
b _03803444 ; case 12
b _0380344C ; case 13
b _03803460 ; case 14
b _03803434 ; case 15
_038033B0:
bl sub_03802AAC
b _03803478
_038033B8:
bl sub_03803094
ldr r1, [r4]
str r0, [r1, #8]
b _03803478
_038033C8:
mov r0, #3
str r0, [r3]
b _03803478
_038033D4:
ldr r0, [r3, #0xc]
ldr r1, [r3, #0x10]
ldr r2, [r3, #0x14]
bl sub_03802B04
b _03803478
_038033E8:
ldr r0, [r3, #0x10]
ldr r1, [r3, #0xc]
ldr r2, [r3, #0x14]
bl sub_03802C28
b _03803478
_038033FC:
ldr r0, [r3, #0x10]
ldr r1, [r3, #0xc]
ldr r2, [r3, #0x14]
bl sub_03802B70
b _03803478
_03803410:
ldr r0, [r3, #0x10]
ldr r1, [r3, #0xc]
ldr r2, [r3, #0x14]
bl sub_03802CE0
b _03803478
_03803424:
ldr r0, [r3, #0x10]
ldr r1, [r3, #0x14]
bl sub_03802D70
b _03803478
_03803434:
ldr r0, [r3, #0x10]
ldr r1, [r3, #0x14]
bl sub_03802E0C
b _03803478
_03803444:
bl sub_03802EA8
b _03803478
_0380344C:
bl sub_038027D0
ldr r1, [r4]
ldr r1, [r1, #0x10]
strb r0, [r1]
b _03803478
_03803460:
ldr r0, [r3, #0xc]
ldrb r0, [r0]
bl sub_03802F04
b _03803478
_03803470:
mov r0, #3
str r0, [r3]
_03803478:
mov r6, #0xb
mov r5, #1
_03803480:
mov r0, r6
mov r1, r5
mov r2, r5
bl sub_037FE410
cmp r0, #0
blt _03803480
bl EnableIrqFlag
ldr r1, [r4, #0xfc]
mov r5, r0
bic r0, r1, #0x4c
str r0, [r4, #0xfc]
add r0, r4, #0xf4
bl sub_037FC2E4
ldr r0, [r4, #0xfc]
tst r0, #0x10
beq _038034C8
add r0, r4, #0x48
bl sub_037FC36C
_038034C8:
mov r0, r5
bl SetIrqFlag
b _038032C0
_038034D4:
ldr r1, [r4, #0x44]
mov r0, r4
mov lr, pc
bx r1
_038034E4:
b _038032C0
.align 2, 0
_038034E8: .word _03809060
arm_func_end sub_038032B8
arm_func_start sub_038034EC
sub_038034EC: ; 0x038034EC
stmdb sp!, {r3, r4, r5, lr}
ldr r0, _0380353C ; =_038098C0
ldr r1, [r0, #8]
cmp r1, #0
bne _03803534
mov r1, #1
str r1, [r0, #8]
bl sub_037FE2B4
mov r5, #0xe
mov r4, #0
_03803514:
mov r0, r5
mov r1, r4
bl sub_037FE3EC
cmp r0, #0
beq _03803514
ldr r1, _03803540 ; =sub_03803544
mov r0, #0xe
bl sub_037FE39C
_03803534:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_0380353C: .word _038098C0
_03803540: .word sub_03803544
arm_func_end sub_038034EC
arm_func_start sub_03803544
sub_03803544: ; 0x03803544
stmdb sp!, {r4, lr}
and r0, r1, #0x3f
cmp r0, #1
bne _0380359C
mov r0, #0
bl sub_037FDEF4
mov r0, #1
bl sub_037FDEF4
mov r0, #2
bl sub_037FDEF4
mov r0, #3
bl sub_037FDEF4
mov r0, #0
bl sub_03806610
bl EnableIrqFlag
mov r4, r0
bl sub_037FE708
bl sub_0380528C
mov r0, r4
bl SetIrqFlag
bl sub_037FDE70
b _038035A0
_0380359C:
bl sub_037FDE70
_038035A0:
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_03803544
arm_func_start sub_038035A8
sub_038035A8: ; 0x038035A8
stmdb sp!, {r3, lr}
ldr r0, _038035E8 ; =_038098C0
ldr r0, [r0, #0xc]
cmp r0, #0
bne _038035D8
ldr r0, _038035EC ; =0x027FFE1F
ldrb r0, [r0]
tst r0, #0x80
beq _038035D4
bl sub_038035F0
b _038035D8
_038035D4:
bl sub_03803690
_038035D8:
ldr r0, _038035E8 ; =_038098C0
ldr r0, [r0, #0xc]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038035E8: .word _038098C0
_038035EC: .word 0x027FFE1F
arm_func_end sub_038035A8
arm_func_start sub_038035F0
sub_038035F0: ; 0x038035F0
stmdb sp!, {r3, r4, r5, lr}
mov r5, #1
bl sub_037FBBFC
mov r4, r0
mvn r0, #2
cmp r4, r0
beq _03803668
mov r0, r4, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_037FBBCC
cmp r0, #0
bne _0380365C
ldr r1, _03803688 ; =0x027FFC10
ldrh r0, [r1]
cmp r0, #0
subeq r0, r1, #0x410
subne r0, r1, #0x10
ldr r0, [r0]
str r0, [sp]
bl sub_038030E4
ldr r1, [sp]
cmp r0, r1
mov r0, r4, lsl #0x10
moveq r5, #1
mov r0, r0, lsr #0x10
movne r5, #0
bl sub_037FBBAC
_0380365C:
mov r0, r4, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_037FBCA4
_03803668:
ldr r1, _0380368C ; =_038098C0
cmp r5, #0
moveq r2, #1
movne r2, #0
str r2, [r1, #0xc]
mov r0, r5
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_03803688: .word 0x027FFC10
_0380368C: .word _038098C0
arm_func_end sub_038035F0
arm_func_start sub_03803690
sub_03803690: ; 0x03803690
ldr r0, _038036B4 ; =0x04000214
mov r2, #1
ldr r1, [r0]
mov r0, r2
tst r1, #0x100000
ldrne r1, _038036B8 ; =_038098C0
movne r0, #0
strne r2, [r1, #0xc]
bx lr
.align 2, 0
_038036B4: .word 0x04000214
_038036B8: .word _038098C0
arm_func_end sub_03803690
arm_func_start sub_038036BC
sub_038036BC: ; 0x038036BC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r0, _038037A8 ; =_038098C0
ldr r0, [r0, #4]
cmp r0, #0
bne _038037A0
ldr r2, _038037AC ; =0x027FFC40
ldrh r0, [r2]
cmp r0, #2
beq _038037A0
ldr r1, _038037B0 ; =_03807564
mvn r0, #0
ldr r3, [r1]
cmp r3, r0
ldreq r0, [r2, #-4]
addeq r0, r0, #0xa
streq r0, [r1]
beq _038037A0
ldr r0, [r2, #-4]!
cmp r0, r3
blo _038037A0
ldr r0, [r2]
add r0, r0, #0xa
str r0, [r1]
bl sub_038035A8
cmp r0, #0
beq _03803750
ldr r0, _038037A8 ; =_038098C0
mov r1, #1
str r1, [r0, #4]
bl sub_03802720
ldr r0, [r0, #0xc]
cmp r0, #0
bne _03803750
ldr r0, _038037B0 ; =_03807564
ldr r0, [r0, #4]
cmp r0, #0
bne _038037A0
_03803750:
ldr r0, _038037A8 ; =_038098C0
ldr r1, _038037B0 ; =_03807564
ldr r0, [r0, #4]
mov r2, #0
str r2, [r1, #4]
cmp r0, #0
beq _038037A0
mov r7, #0x64
mov r6, #0xe
mov r5, #0x11
mov r4, r2
b _03803788
_03803780:
mov r0, r7
bl sub_037FBA0C
_03803788:
mov r0, r6
mov r1, r5
mov r2, r4
bl sub_037FE410
cmp r0, #0
bne _03803780
_038037A0:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_038037A8: .word _038098C0
_038037AC: .word 0x027FFC40
_038037B0: .word _03807564
arm_func_end sub_038036BC
thumb_func_start sub_038037B4
sub_038037B4: ; 0x038037B4
swi 0
bx lr
thumb_func_end sub_038037B4
thumb_func_start sub_038037B8
sub_038037B8: ; 0x038037B8
swi 3
bx lr
thumb_func_end sub_038037B8
thumb_func_start sub_038037BC
sub_038037BC: ; 0x038037BC
ldr r2, _038037C8 ; =0x04000000
mov ip, r2
mov r2, #0
swi 4
bx lr
.align 2, 0
_038037C8: .word 0x04000000
thumb_func_end sub_038037BC
thumb_func_start sub_038037CC
sub_038037CC: ; 0x038037CC
mov r2, #0
swi 5
bx lr
thumb_func_end sub_038037CC
non_word_aligned_thumb_func_start sub_038037D2
sub_038037D2: ; 0x038037D2
swi 6
bx lr
thumb_func_end sub_038037D2
non_word_aligned_thumb_func_start sub_038037D6
sub_038037D6: ; 0x038037D6
swi 7
bx lr
thumb_func_end sub_038037D6
non_word_aligned_thumb_func_start sub_038037DA
sub_038037DA: ; 0x038037DA
swi 8
bx lr
thumb_func_end sub_038037DA
non_word_aligned_thumb_func_start sub_038037DE
sub_038037DE: ; 0x038037DE
add r1, r0, #0
mov r0, #1
swi 8
bx lr
thumb_func_end sub_038037DE
non_word_aligned_thumb_func_start sub_038037E6
sub_038037E6: ; 0x038037E6
add r1, r0, #0
mov r0, #0
swi 8
bx lr
thumb_func_end sub_038037E6
non_word_aligned_thumb_func_start sub_038037EE
sub_038037EE: ; 0x038037EE
swi 9
bx lr
thumb_func_end sub_038037EE
non_word_aligned_thumb_func_start sub_038037F2
sub_038037F2: ; 0x038037F2
swi 9
add r0, r1, #0
bx lr
thumb_func_end sub_038037F2
thumb_func_start sub_038037F8
sub_038037F8: ; 0x038037F8
swi 0xb
bx lr
thumb_func_end sub_038037F8
thumb_func_start sub_038037FC
sub_038037FC: ; 0x038037FC
swi 0xc
bx lr
thumb_func_end sub_038037FC
thumb_func_start sub_03803800
sub_03803800: ; 0x03803800
swi 0xd
bx lr
thumb_func_end sub_03803800
thumb_func_start sub_03803804
sub_03803804: ; 0x03803804
swi 0xe
bx lr
thumb_func_end sub_03803804
thumb_func_start sub_03803808
sub_03803808: ; 0x03803808
swi 0xf
bx lr
thumb_func_end sub_03803808
thumb_func_start sub_0380380C
sub_0380380C: ; 0x0380380C
swi 0x10
bx lr
thumb_func_end sub_0380380C
thumb_func_start sub_03803810
sub_03803810: ; 0x03803810
swi 0x11
bx lr
thumb_func_end sub_03803810
thumb_func_start sub_03803814
sub_03803814: ; 0x03803814
swi 0x12
bx lr
thumb_func_end sub_03803814
thumb_func_start sub_03803818
sub_03803818: ; 0x03803818
swi 0x13
bx lr
thumb_func_end sub_03803818
thumb_func_start sub_0380381C
sub_0380381C: ; 0x0380381C
swi 0x14
bx lr
thumb_func_end sub_0380381C
thumb_func_start sub_03803820
sub_03803820: ; 0x03803820
swi 0x15
bx lr
thumb_func_end sub_03803820
thumb_func_start sub_03803824
sub_03803824: ; 0x03803824
swi 0x1a
bx lr
thumb_func_end sub_03803824
thumb_func_start sub_03803828
sub_03803828: ; 0x03803828
swi 0x1b
bx lr
thumb_func_end sub_03803828
thumb_func_start sub_0380382C
sub_0380382C: ; 0x0380382C
swi 0x1c
bx lr
thumb_func_end sub_0380382C
arm_func_start sub_03803830
sub_03803830: ; 0x03803830
ldr r1, _03803868 ; =0x55555555
ldr r2, _0380386C ; =0x33333333
and r1, r1, r0, lsr #1
sub r1, r0, r1
ldr r0, _03803870 ; =0x0F0F0F0F
and r3, r1, r2
and r1, r2, r1, lsr #2
add r1, r3, r1
add r1, r1, r1, lsr #4
and r0, r1, r0
add r0, r0, r0, lsr #8
add r0, r0, r0, lsr #16
and r0, r0, #0xff
bx lr
.align 2, 0
_03803868: .word 0x55555555
_0380386C: .word 0x33333333
_03803870: .word 0x0F0F0F0F
arm_func_end sub_03803830
arm_func_start sub_03803874
sub_03803874: ; 0x03803874
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #8
ldr r1, _03803970 ; =_038098D0
mov r4, r0
ldrh r0, [r1]
cmp r0, #0
bne _03803964
mov r0, #1
strh r0, [r1]
mov r0, #0
str r0, [r1, #4]
mov r0, #5
str r0, [r1, #8]
bl sub_03803D50
bl sub_027F4FAC
bl sub_03805360
bl sub_038048A4
bl sub_037FE2B4
ldr r1, _03803974 ; =sub_03803CE8
mov r0, #6
bl sub_037FE39C
ldr r1, _03803974 ; =sub_03803CE8
mov r0, #9
bl sub_037FE39C
ldr r1, _03803974 ; =sub_03803CE8
mov r0, #8
bl sub_037FE39C
ldr r1, _03803974 ; =sub_03803CE8
mov r0, #4
bl sub_037FE39C
ldr r0, _03803978 ; =_03809B80
ldr r1, _0380397C ; =_03809BA0
mov r2, #0x10
bl sub_037FC6AC
mov sb, #0
mov r6, #0x18
ldr r8, _03803980 ; =_03809BE0
mov r7, sb
mov r5, r6
_03803910:
mla r0, sb, r5, r8
mov r1, r7
mov r2, r6
bl sub_037FE070
add sb, sb, #1
cmp sb, #0x10
blt _03803910
ldr r0, _03803970 ; =_038098D0
mov r2, #0
str r2, [r0, #0x490]
str r2, [r0, #0x498]
str r2, [r0, #0x494]
mov r0, #0x200
str r0, [sp]
ldr r0, _03803984 ; =_038098DC
ldr r1, _03803988 ; =sub_03803C7C
ldr r3, _03803978 ; =_03809B80
str r4, [sp, #4]
bl sub_037FC054
ldr r0, _03803984 ; =_038098DC
bl sub_037FC36C
_03803964:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_03803970: .word _038098D0
_03803974: .word sub_03803CE8
_03803978: .word _03809B80
_0380397C: .word _03809BA0
_03803980: .word _03809BE0
_03803984: .word _038098DC
_03803988: .word sub_03803C7C
arm_func_end sub_03803874
arm_func_start sub_0380398C
sub_0380398C: ; 0x0380398C
stmdb sp!, {r4, r5, r6, lr}
ldr r5, _038039E0 ; =_03809D64
ldr r4, _038039E4 ; =_038098D0
mov r6, r0
_0380399C:
bl EnableIrqFlag
ldr r1, [r4, #4]
cmp r1, #0
beq _038039BC
bl SetIrqFlag
mov r0, r5
bl sub_037FC290
b _0380399C
_038039BC:
ldr r1, _038039E4 ; =_038098D0
mov r2, #1
str r2, [r1, #4]
mov r2, #4
str r2, [r1, #8]
str r6, [r1, #0x49c]
bl SetIrqFlag
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_038039E0: .word _03809D64
_038039E4: .word _038098D0
arm_func_end sub_0380398C
arm_func_start sub_038039E8
sub_038039E8: ; 0x038039E8
stmdb sp!, {r3, lr}
ldr r1, _03803A40 ; =_038098D0
ldr r2, [r1, #4]
cmp r2, #0
beq _03803A38
ldr r2, [r1, #8]
cmp r2, #4
ldreq r1, [r1, #0x49c]
cmpeq r1, r0
bne _03803A38
bl EnableIrqFlag
ldr r1, _03803A40 ; =_038098D0
mov r2, #5
str r2, [r1, #8]
mov r2, #0
str r2, [r1, #4]
str r2, [r1, #0x49c]
bl SetIrqFlag
ldr r0, _03803A44 ; =_03809D64
bl sub_037FC2E4
_03803A38:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03803A40: .word _038098D0
_03803A44: .word _03809D64
arm_func_end sub_038039E8
arm_func_start sub_03803A48
sub_03803A48: ; 0x03803A48
stmdb sp!, {r4, r5, r6, lr}
and r2, r0, #0x70
cmp r2, #0x30
bgt _03803A80
bge _03803ACC
cmp r2, #0x10
bgt _03803A74
bge _03803AB4
cmp r2, #0
beq _03803AB4
b _03803AD0
_03803A74:
cmp r2, #0x20
beq _03803ACC
b _03803AD0
_03803A80:
cmp r2, #0x50
bgt _03803A98
bge _03803ABC
cmp r2, #0x40
beq _03803ABC
b _03803AD0
_03803A98:
cmp r2, #0x60
bgt _03803AA8
beq _03803AC4
b _03803AD0
_03803AA8:
cmp r2, #0x70
beq _03803AC4
b _03803AD0
_03803AB4:
mov r4, #6
b _03803AD0
_03803ABC:
mov r4, #9
b _03803AD0
_03803AC4:
mov r4, #8
b _03803AD0
_03803ACC:
mov r4, #4
_03803AD0:
and r0, r0, #0xff
orr r0, r0, #0x80
mov r0, r0, lsl #8
orr r2, r0, #0x3000000
and r0, r1, #0xff
orr r6, r2, r0
mov r5, #0
_03803AEC:
mov r0, r4
mov r1, r6
mov r2, r5
bl sub_037FE410
cmp r0, #0
blt _03803AEC
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end sub_03803A48
arm_func_start sub_03803B0C
sub_03803B0C: ; 0x03803B0C
ldr r0, _03803B24 ; =_038098D0
ldr r0, [r0, #4]
cmp r0, #0
moveq r0, #1
movne r0, #0
bx lr
.align 2, 0
_03803B24: .word _038098D0
arm_func_end sub_03803B0C
arm_func_start sub_03803B28
sub_03803B28: ; 0x03803B28
ldr r1, _03803B3C ; =_038098D0
mov r2, #1
str r2, [r1, #4]
str r0, [r1, #8]
bx lr
.align 2, 0
_03803B3C: .word _038098D0
arm_func_end sub_03803B28
arm_func_start sub_03803B40
sub_03803B40: ; 0x03803B40
stmdb sp!, {r3, lr}
ldr r1, _03803B74 ; =_038098D0
ldr r2, [r1, #8]
cmp r2, r0
bne _03803B6C
ldr r0, _03803B78 ; =_03809D64
mov r2, #5
str r2, [r1, #8]
mov r2, #0
str r2, [r1, #4]
bl sub_037FC2E4
_03803B6C:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03803B74: .word _038098D0
_03803B78: .word _03809D64
arm_func_end sub_03803B40
arm_func_start sub_03803B7C
sub_03803B7C: ; 0x03803B7C
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r4, r5, r6, lr}
ldrh r2, [sp, #0x18]
mov r5, r0
cmp r2, #4
mov r4, r1
movhi r0, #0
bhi _03803C3C
bl EnableIrqFlag
ldr r3, _03803C48 ; =_038098D0
add r2, sp, #0x18
ldr ip, [r3, #0x490]
mov r1, #0x18
mul r6, ip, r1
ldr lr, _03803C4C ; =_03809BE0
ldr ip, _03803C50 ; =_03809BE4
str r5, [lr, r6]
ldr r5, [r3, #0x490]
bic r2, r2, #3
mul lr, r5, r1
str r4, [ip, lr]
add r6, r2, #4
ldrh r1, [sp, #0x18]
ldr r5, _03803C54 ; =_038098D4
mov lr, #0
mov r2, #0x18
b _03803C04
_03803BE8:
ldr ip, [r3, #0x490]
add r6, r6, #4
mla r4, ip, r2, r5
add r4, r4, lr, lsl #2
ldr ip, [r6, #-4]
add lr, lr, #1
str ip, [r4, #0x314]
_03803C04:
cmp lr, r1
blt _03803BE8
ldr r1, _03803C48 ; =_038098D0
ldr r4, [r1, #0x490]
add r2, r4, #1
and r2, r2, #0xf
str r2, [r1, #0x490]
bl SetIrqFlag
ldr r1, _03803C4C ; =_03809BE0
mov r0, #0x18
mla r1, r4, r0, r1
ldr r0, _03803C58 ; =_03809B80
mov r2, #0
bl sub_037FC6D4
_03803C3C:
ldmia sp!, {r4, r5, r6, lr}
add sp, sp, #0x10
bx lr
.align 2, 0
_03803C48: .word _038098D0
_03803C4C: .word _03809BE0
_03803C50: .word _03809BE4
_03803C54: .word _038098D4
_03803C58: .word _03809B80
arm_func_end sub_03803B7C
arm_func_start sub_03803C5C
sub_03803C5C: ; 0x03803C5C
stmdb sp!, {r3, lr}
ldr r0, _03803C78 ; =_03809B80
add r1, sp, #0
mov r2, #0
bl sub_037FC7FC
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03803C78: .word _03809B80
arm_func_end sub_03803C5C
arm_func_start sub_03803C7C
sub_03803C7C: ; 0x03803C7C
stmdb sp!, {r3, r4, r5, r6, lr}
sub sp, sp, #4
ldr r6, _03803CE4 ; =_03809B80
add r5, sp, #0
mov r4, #1
_03803C90:
mov r0, r6
mov r1, r5
mov r2, r4
bl sub_037FC760
ldr r0, [sp]
ldr r1, [r0]
cmp r1, #3
addls pc, pc, r1, lsl #2
b _03803C90
_03803CB4: ; jump table
b _03803CC4 ; case 0
b _03803CDC ; case 1
b _03803CCC ; case 2
b _03803CD4 ; case 3
_03803CC4:
bl sub_03804048
b _03803C90
_03803CCC:
bl sub_03805714
b _03803C90
_03803CD4:
bl sub_03804A9C
b _03803C90
_03803CDC:
bl sub_027F517C
b _03803C90
.align 2, 0
_03803CE4: .word _03809B80
arm_func_end sub_03803C7C
arm_func_start sub_03803CE8
sub_03803CE8: ; 0x03803CE8
stmdb sp!, {r3, lr}
cmp r2, #0
bne _03803D48
sub r0, r0, #4
cmp r0, #5
addls pc, pc, r0, lsl #2
b _03803D48
_03803D04: ; jump table
b _03803D40 ; case 0
b _03803D48 ; case 1
b _03803D1C ; case 2
b _03803D48 ; case 3
b _03803D34 ; case 4
b _03803D28 ; case 5
_03803D1C:
mov r0, r1
bl sub_03803E60
b _03803D48
_03803D28:
mov r0, r1
bl sub_038053A8
b _03803D48
_03803D34:
mov r0, r1
bl sub_038048E0
b _03803D48
_03803D40:
mov r0, r1
bl sub_027F4FD4
_03803D48:
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_03803CE8
arm_func_start sub_03803D50
sub_03803D50: ; 0x03803D50
stmdb sp!, {r4, r5, r6, r7, r8, lr}
ldr r0, _03803E1C ; =_03809D70
mov r3, #0
str r3, [r0, #0x24]
mov r1, #0x14
str r1, [r0, #0x28]
str r1, [r0, #0x2c]
ldr r0, _03803E20 ; =_03809D74
mov r2, r3
_03803D74:
mov r1, r3, lsl #1
add r3, r3, #1
strh r2, [r0, r1]
cmp r3, #0x10
blt _03803D74
bl sub_037FD798
cmp r0, #0
bne _03803D98
bl sub_037FD74C
_03803D98:
ldr r7, _03803E24 ; =_03809DA0
ldr r5, _03803E28 ; =0x54505641
mov r8, #0
mov r4, #0x28
_03803DA8:
mul r6, r8, r4
add r0, r7, r6
bl sub_037FD884
mov r1, r5
add r0, r7, r6
bl sub_037FDA14
add r8, r8, #1
cmp r8, #4
blt _03803DA8
ldr r2, _03803E2C ; =0x040001C0
_03803DD0:
ldrh r0, [r2]
tst r0, #0x80
bne _03803DD0
ldr r1, _03803E30 ; =0x00008A01
ldr r0, _03803E34 ; =0x040001C2
strh r1, [r2]
mov r1, #0x84
strh r1, [r0]
sub r1, r0, #2
_03803DF4:
ldrh r0, [r1]
tst r0, #0x80
bne _03803DF4
bl sub_03803E3C
ldr r1, _03803E38 ; =0x00008201
ldr r0, _03803E2C ; =0x040001C0
strh r1, [r0]
bl sub_03803E3C
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
.align 2, 0
_03803E1C: .word _03809D70
_03803E20: .word _03809D74
_03803E24: .word _03809DA0
_03803E28: .word 0x54505641
_03803E2C: .word 0x040001C0
_03803E30: .word 0x00008A01
_03803E34: .word 0x040001C2
_03803E38: .word 0x00008201
arm_func_end sub_03803D50
arm_func_start sub_03803E3C
sub_03803E3C: ; 0x03803E3C
ldr r0, _03803E5C ; =0x040001C2
mov r1, #0
strh r1, [r0]
sub r1, r0, #2
_03803E4C:
ldrh r0, [r1]
tst r0, #0x80
bne _03803E4C
bx lr
.align 2, 0
_03803E5C: .word 0x040001C2
arm_func_end sub_03803E3C
arm_func_start sub_03803E60
sub_03803E60: ; 0x03803E60
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
tst r0, #0x2000000
beq _03803E90
ldr r1, _0380403C ; =_03809D74
mov r4, #0
mov r3, r4
_03803E7C:
mov r2, r4, lsl #1
add r4, r4, #1
strh r3, [r1, r2]
cmp r4, #0x10
blt _03803E7C
_03803E90:
ldr r1, _0380403C ; =_03809D74
and r2, r0, #0xf0000
mov r2, r2, lsr #0x10
mov r2, r2, lsl #1
strh r0, [r1, r2]
tst r0, #0x1000000
beq _03804030
ldr r2, _03804040 ; =_03809D70
ldrh r1, [r2, #4]
and r0, r1, #0xff00
mov r0, r0, lsl #8
mov r4, r0, lsr #0x10
cmp r4, #3
addls pc, pc, r4, lsl #2
b _03804024
_03803ECC: ; jump table
b _03803F10 ; case 0
b _03803F38 ; case 1
b _03803FD4 ; case 2
b _03803EDC ; case 3
_03803EDC:
and r0, r1, #0xff
mov r0, r0, lsl #0x10
movs r3, r0, lsr #0x10
mov r0, #3
bne _03803EFC
mov r1, #2
bl sub_03803A48
b _03804030
_03803EFC:
str r3, [r2, #0x28]
mov r1, #0
str r3, [r2, #0x2c]
bl sub_03803A48
b _03804030
_03803F10:
mov r0, #0
mov r1, r4
mov r2, r0
bl sub_03803B7C
cmp r0, #0
bne _03804030
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804030
_03803F38:
ldr r0, [r2, #0x24]
cmp r0, #0
beq _03803F54
mov r0, r4
mov r1, #3
bl sub_03803A48
b _03804030
_03803F54:
and r0, r1, #0xff
mov r0, r0, lsl #0x10
movs r3, r0, lsr #0x10
beq _03803F6C
cmp r3, #4
bls _03803F7C
_03803F6C:
mov r0, r4
mov r1, #2
bl sub_03803A48
b _03804030
_03803F7C:
ldrh ip, [r2, #6]
ldr r0, _03804044 ; =0x00000107
cmp ip, r0
blo _03803F9C
mov r0, r4
mov r1, #2
bl sub_03803A48
b _03804030
_03803F9C:
mov r1, r4
mov r0, #0
mov r2, #2
str ip, [sp]
bl sub_03803B7C
cmp r0, #0
ldrne r0, _03804040 ; =_03809D70
movne r1, #1
strne r1, [r0, #0x24]
bne _03804030
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804030
_03803FD4:
ldr r0, [r2, #0x24]
cmp r0, #2
beq _03803FF0
mov r0, r4
mov r1, #3
bl sub_03803A48
b _03804030
_03803FF0:
mov r0, #0
mov r1, r4
mov r2, r0
bl sub_03803B7C
cmp r0, #0
ldrne r0, _03804040 ; =_03809D70
movne r1, #3
strne r1, [r0, #0x24]
bne _03804030
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804030
_03804024:
mov r0, r4
mov r1, #1
bl sub_03803A48
_03804030:
add sp, sp, #4
ldmia sp!, {r3, r4, lr}
bx lr
.align 2, 0
_0380403C: .word _03809D74
_03804040: .word _03809D70
_03804044: .word 0x00000107
arm_func_end sub_03803E60
arm_func_start sub_03804048
sub_03804048: ; 0x03804048
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
sub sp, sp, #0xc
mov sl, r0
ldr r1, [sl, #4]
cmp r1, #2
bhi _0380407C
cmp r1, #0
beq _03804094
cmp r1, #1
beq _03804200
cmp r1, #2
beq _038042C8
b _03804314
_0380407C:
cmp r1, #0x10
bne _03804314
ldr r0, _03804320 ; =_03809D70
ldr r0, [r0, #0x24]
cmp r0, #2
bne _03804314
_03804094:
bl EnableIrqFlag
mov r4, r0
mov r0, #0
bl sub_03803B0C
cmp r0, #0
bne _038040CC
mov r0, r4
bl SetIrqFlag
ldr r0, [sl, #4]
mov r1, #4
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
b _03804314
_038040CC:
mov r0, #0
bl sub_03803B28
mov r0, r4
bl SetIrqFlag
ldr r1, _03804320 ; =_03809D70
add r0, sp, #8
ldr r1, [r1, #0x28]
add r2, sp, #4
bl sub_038046AC
ldr r0, [sp, #8]
ldrh r2, [sp, #4]
mov r1, r0, lsl #7
movs r1, r1, lsr #0x1f
ldreq r0, _03804320 ; =_03809D70
moveq r1, #0
streqb r1, [r0, #1]
streqb r1, [r0]
beq _038041AC
mov r0, r0, lsl #5
movs r0, r0, lsr #0x1e
beq _0380415C
ldr r0, _03804320 ; =_03809D70
mov r3, #0
strb r3, [r0]
ldrb r1, [r0, #1]
add r2, r1, #1
and r1, r2, #0xff
strb r2, [r0, #1]
cmp r1, #4
blo _038041AC
strb r3, [r0, #1]
ldr r1, [r0, #0x28]
cmp r1, #0x23
addlt r1, r1, #1
strlt r1, [r0, #0x28]
b _038041AC
_0380415C:
ldr r0, _03804320 ; =_03809D70
mov r4, #0
strb r4, [r0, #1]
ldr r3, [r0, #0x28]
cmp r2, r3, asr #1
strgeb r4, [r0]
bge _038041AC
ldrb r1, [r0]
add r2, r1, #1
and r1, r2, #0xff
strb r2, [r0]
cmp r1, #4
blo _038041AC
strb r4, [r0]
ldr r1, [r0, #0x2c]
cmp r3, r1
subgt r1, r3, #1
strgt r1, [r0, #0x28]
movgt r1, #3
strgtb r1, [r0, #1]
_038041AC:
ldrh r0, [sp, #8]
ldr r1, _03804324 ; =0x027FFFAA
strh r0, [r1]
ldrh r0, [sp, #0xa]
strh r0, [r1, #2]
ldr r0, [sl, #4]
cmp r0, #0
bne _038041E0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
mov r1, #0
bl sub_03803A48
b _038041F4
_038041E0:
ldr r1, [sl, #8]
mov r0, r0, lsl #0x10
and r1, r1, #0xff
mov r0, r0, lsr #0x10
bl sub_03803A48
_038041F4:
mov r0, #0
bl sub_03803B40
b _03804314
_03804200:
ldr r0, _03804320 ; =_03809D70
ldr r0, [r0, #0x24]
cmp r0, #1
bne _038042B4
ldr r8, _03804328 ; =0x00000107
ldr r6, _0380432C ; =_03809D74
ldr r5, _03804330 ; =_03809DA0
mov sb, #0
mov r7, #0xd7
mov fp, #0xa
mov r4, #0x28
b _03804284
_03804230:
mul r0, sb, r8
bl _u32_div_f
ldr r2, [sl, #0xc]
mov r1, r8
add r0, r2, r0
bl _u32_div_f
mov r0, r1, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #0xc8
blo _03804260
cmp r0, #0xd7
movlo r0, r7
_03804260:
add r1, r6, sb, lsl #1
strh r0, [r1, #0xcc]
str sb, [sp]
mla r0, sb, r4, r5
ldrsh r1, [r1, #0xcc]
ldr r3, _03804334 ; =sub_0380433C
mov r2, fp
bl sub_037FD928
add sb, sb, #1
_03804284:
ldr r1, [sl, #8]
cmp sb, r1
blo _03804230
ldr r0, [sl, #4]
mov r1, #0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
ldr r0, _03804320 ; =_03809D70
mov r1, #2
str r1, [r0, #0x24]
b _03804314
_038042B4:
mov r0, r1, lsl #0x10
mov r0, r0, lsr #0x10
mov r1, #3
bl sub_03803A48
b _03804314
_038042C8:
ldr r0, _03804320 ; =_03809D70
ldr r0, [r0, #0x24]
cmp r0, #3
bne _03804304
ldr r0, _03804338 ; =0x54505641
bl sub_037FDA84
ldr r0, [sl, #4]
mov r1, #0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
ldr r0, _03804320 ; =_03809D70
mov r1, #0
str r1, [r0, #0x24]
b _03804314
_03804304:
mov r0, r1, lsl #0x10
mov r0, r0, lsr #0x10
mov r1, #3
bl sub_03803A48
_03804314:
add sp, sp, #0xc
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_03804320: .word _03809D70
_03804324: .word 0x027FFFAA
_03804328: .word 0x00000107
_0380432C: .word _03809D74
_03804330: .word _03809DA0
_03804334: .word sub_0380433C
_03804338: .word 0x54505641
arm_func_end sub_03804048
arm_func_start sub_0380433C
sub_0380433C: ; 0x0380433C
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
mov r4, r0
mov r3, r4
mov r0, #0
mov r1, #0x10
mov r2, #1
bl sub_03803B7C
cmp r0, #0
bne _03804394
ldr r0, [sp]
ldr r3, _038043A0 ; =0x027FFFAA
bic r0, r0, #0x6000000
orr r0, r0, #0x6000000
str r0, [sp]
ldrh r0, [sp]
ldrh r2, [sp, #2]
strh r0, [r3]
and r1, r4, #0xff
mov r0, #0x10
strh r2, [r3, #2]
bl sub_03803A48
_03804394:
add sp, sp, #4
ldmia sp!, {r3, r4, lr}
bx lr
.align 2, 0
_038043A0: .word 0x027FFFAA
arm_func_end sub_0380433C
arm_func_start sub_038043A4
sub_038043A4: ; 0x038043A4
stmdb sp!, {r3, lr}
mov r0, #0x8000
bl sub_037FE5A8
ldr r2, _03804480 ; =0x040001C0
_038043B4:
ldrh r0, [r2]
tst r0, #0x80
bne _038043B4
ldr r1, _03804484 ; =0x00008A01
ldr r0, _03804488 ; =0x040001C2
strh r1, [r2]
mov r1, #0x84
strh r1, [r0]
sub r1, r0, #2
_038043D8:
ldrh r0, [r1]
tst r0, #0x80
bne _038043D8
bl sub_03804498
ldr r1, _0380448C ; =0x00008201
ldr r0, _03804480 ; =0x040001C0
strh r1, [r0]
bl sub_03804498
ldr r0, _03804490 ; =_03809E48
ldrh r0, [r0]
cmp r0, #0
bne _03804420
ldr r0, _03804494 ; =0x04000136
ldrh r0, [r0]
tst r0, #0x40
moveq r0, #1
movne r0, #0
b _03804478
_03804420:
ldr r2, _03804494 ; =0x04000136
ldrh r0, [r2]
tst r0, #0x40
moveq r0, #1
beq _03804478
ldr r1, _03804484 ; =0x00008A01
mov r0, #0x84
strh r1, [r2, #0x8a]
strh r0, [r2, #0x8c]
_03804444:
ldrh r0, [r2, #0x8a]
tst r0, #0x80
bne _03804444
bl sub_03804498
ldr r1, _0380448C ; =0x00008201
ldr r0, _03804480 ; =0x040001C0
strh r1, [r0]
bl sub_03804498
ldr r0, _03804494 ; =0x04000136
ldrh r0, [r0]
tst r0, #0x40
movne r0, #0
moveq r0, #2
_03804478:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03804480: .word 0x040001C0
_03804484: .word 0x00008A01
_03804488: .word 0x040001C2
_0380448C: .word 0x00008201
_03804490: .word _03809E48
_03804494: .word 0x04000136
arm_func_end sub_038043A4
arm_func_start sub_03804498
sub_03804498: ; 0x03804498
ldr r0, _038044B8 ; =0x040001C2
mov r1, #0
strh r1, [r0]
sub r1, r0, #2
_038044A8:
ldrh r0, [r1]
tst r0, #0x80
bne _038044A8
bx lr
.align 2, 0
_038044B8: .word 0x040001C2
arm_func_end sub_03804498
arm_func_start sub_038044BC
sub_038044BC: ; 0x038044BC
stmdb sp!, {r4, r5, r6, r7, r8, sb, lr}
sub sp, sp, #0x14
cmp r2, #0
ldr r2, _03804698 ; =0x040001C0
mov r5, r3
moveq r3, #0xd1
moveq r4, #1
mov r7, r0
mov r6, r1
movne r3, #0x91
movne r4, #2
_038044E8:
ldrh r0, [r2]
tst r0, #0x80
bne _038044E8
ldr r1, _0380469C ; =0x00008A01
ldr r0, _038046A0 ; =0x040001C2
strh r1, [r2]
and r2, r3, #0xff
strh r2, [r0]
sub r1, r0, #2
_0380450C:
ldrh r0, [r1]
tst r0, #0x80
bne _0380450C
mov r0, r2, lsl #0x10
ldr r2, _03804698 ; =0x040001C0
mov ip, #0
ldr r8, _038046A4 ; =0x00007FF8
add r1, sp, #0
mov r0, r0, lsr #0x10
mov r3, ip
_03804534:
strh r3, [r2, #2]
_03804538:
ldrh sb, [r2]
tst sb, #0x80
bne _03804538
ldrh sb, [r2, #2]
and sb, sb, #0xff
mov lr, sb, lsl #0x10
mov sb, lr, lsr #8
str sb, [r1, ip, lsl #2]
strh r0, [r2, #2]
_0380455C:
ldrh sb, [r2]
tst sb, #0x80
bne _0380455C
ldrh lr, [r2, #2]
ldr sb, [r1, ip, lsl #2]
and lr, lr, #0xff
mov lr, lr, lsl #0x10
orr sb, sb, lr, lsr #16
and lr, sb, r8
mov lr, lr, asr #3
str lr, [r1, ip, lsl #2]
add ip, ip, #1
cmp ip, #5
blt _03804534
ldr r0, _038046A8 ; =0x00008201
strh r0, [r2]
bl sub_03804498
mov r8, #0
mov sb, r8
add r2, sp, #0
_038045AC:
ldr r1, [r2, sb, lsl #2]
add r3, sb, #1
b _038045D0
_038045B8:
ldr r0, [r2, r3, lsl #2]
add r3, r3, #1
subs r0, r1, r0
rsbmi r0, r0, #0
cmp r0, r8
movgt r8, r0
_038045D0:
cmp r3, #5
blt _038045B8
add sb, sb, #1
cmp sb, #4
blt _038045AC
strh r8, [r5]
mov r8, #0
add r0, sp, #0
b _03804668
_038045F4:
ldr r3, [r0, r8, lsl #2]
add sb, r8, #1
b _0380465C
_03804600:
ldr r2, [r0, sb, lsl #2]
subs r1, r3, r2
rsbmi r1, r1, #0
cmp r1, r6
bgt _03804658
add r1, sb, #1
b _03804650
_0380461C:
ldr r5, [r0, r1, lsl #2]
subs ip, r3, r5
rsbmi ip, ip, #0
cmp ip, r6
bgt _0380464C
add r0, r2, r3, lsl #1
add r0, r5, r0
mov r0, r0, asr #2
bic r0, r0, #7
strh r0, [r7]
mov r0, #0
b _0380468C
_0380464C:
add r1, r1, #1
_03804650:
cmp r1, #5
blt _0380461C
_03804658:
add sb, sb, #1
_0380465C:
cmp sb, #4
blt _03804600
add r8, r8, #1
_03804668:
cmp r8, #3
blt _038045F4
ldr r2, [sp]
ldr r1, [sp, #0x10]
mov r0, r4
add r1, r2, r1
mov r1, r1, asr #1
bic r1, r1, #7
strh r1, [r7]
_0380468C:
add sp, sp, #0x14
ldmia sp!, {r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_03804698: .word 0x040001C0
_0380469C: .word 0x00008A01
_038046A0: .word 0x040001C2
_038046A4: .word 0x00007FF8
_038046A8: .word 0x00008201
arm_func_end sub_038044BC
arm_func_start sub_038046AC
sub_038046AC: ; 0x038046AC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
movs r6, r1
mov r5, r2
mov r1, #0
mov r7, r0
strh r1, [r5]
rsbmi r6, r6, #0
bl sub_038043A4
movs r4, r0
bne _03804714
ldr r1, [r7]
mov r0, #0x1000
rsb r0, r0, #0
and r1, r1, r0
ldr r0, _03804890 ; =0xFF000FFF
and r0, r1, r0
bic r1, r0, #0x1000000
bic r0, r1, #0x6000000
str r1, [r7]
orr r1, r0, #0x6000000
str r1, [r7]
ldr r0, _03804894 ; =_03809E48
mov r1, #0
strh r1, [r0]
b _03804884
_03804714:
add r0, sp, #4
add r3, sp, #2
mov r1, r6
mov r2, #0
bl sub_038044BC
ldr r1, [r7]
mov r0, r0, lsl #0x1e
bic r1, r1, #0x6000000
orr ip, r1, r0, lsr #5
str ip, [r7]
mov r1, #0x1000
rsb r1, r1, #0
ldrh r2, [sp, #4]
and ip, ip, r1
and r1, r2, r1, lsr #20
orr ip, ip, r1
add r0, sp, #4
add r3, sp, #0
mov r1, r6
mov r2, #1
str ip, [r7]
bl sub_038044BC
cmp r0, #2
bne _03804794
ldr r1, [r7]
mov r0, r1, lsl #5
mov r0, r0, lsr #0x1e
orr r0, r0, #2
bic r1, r1, #0x6000000
mov r0, r0, lsl #0x1e
orr r0, r1, r0, lsr #5
str r0, [r7]
_03804794:
ldrh r1, [sp, #4]
ldr r2, [r7]
ldr r0, _03804890 ; =0xFF000FFF
mov r1, r1, lsl #0x14
and r0, r2, r0
orr r2, r0, r1, lsr #8
ldr r1, _03804898 ; =0x00008A01
ldr r0, _0380489C ; =0x040001C0
str r2, [r7]
strh r1, [r0]
mov r6, #0
_038047C0:
bl sub_03804498
add r6, r6, #1
cmp r6, #0xc
blt _038047C0
ldr r1, _038048A0 ; =0x00008201
ldr r0, _0380489C ; =0x040001C0
strh r1, [r0]
bl sub_03804498
cmp r4, #2
ldreq r0, [r7]
biceq r0, r0, #0x6000000
orreq r0, r0, #0x6000000
streq r0, [r7]
bl sub_038043A4
cmp r0, #0
beq _03804864
cmp r0, #1
beq _03804834
cmp r0, #2
bne _03804880
ldr r1, [r7]
ldr r0, _03804894 ; =_03809E48
orr r2, r1, #0x1000000
bic r1, r2, #0x6000000
orr r1, r1, #0x6000000
str r1, [r7]
mov r1, #0
strh r1, [r0]
b _03804884
_03804834:
ldr r1, [r7]
ldr r0, _03804894 ; =_03809E48
orr r1, r1, #0x1000000
str r1, [r7]
mov r2, #1
ldrh r1, [sp]
ldrh r3, [sp, #2]
strh r2, [r0]
cmp r3, r1
movlo r3, r1
strh r3, [r5]
b _03804884
_03804864:
ldr r1, [r7]
ldr r0, _03804894 ; =_03809E48
bic r1, r1, #0x1000000
str r1, [r7]
mov r1, #0
strh r1, [r0]
b _03804884
_03804880:
bl sub_037FDE70
_03804884:
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_03804890: .word 0xFF000FFF
_03804894: .word _03809E48
_03804898: .word 0x00008A01
_0380489C: .word 0x040001C0
_038048A0: .word 0x00008201
arm_func_end sub_038046AC
arm_func_start sub_038048A4
sub_038048A4: ; 0x038048A4
ldr r0, _038048D8 ; =_03809E4C
mov r1, #1
str r1, [r0, #4]
mov r3, #0
str r3, [r0, #0x28]
ldr r0, _038048DC ; =_03809E54
mov r2, r3
_038048C0:
mov r1, r3, lsl #1
add r3, r3, #1
strh r2, [r0, r1]
cmp r3, #0x10
blt _038048C0
bx lr
.align 2, 0
_038048D8: .word _03809E4C
_038048DC: .word _03809E54
arm_func_end sub_038048A4
arm_func_start sub_038048E0
sub_038048E0: ; 0x038048E0
stmdb sp!, {r3, r4, lr}
sub sp, sp, #4
tst r0, #0x2000000
beq _03804910
ldr r1, _03804A94 ; =_03809E54
mov r4, #0
mov r3, r4
_038048FC:
mov r2, r4, lsl #1
add r4, r4, #1
strh r3, [r1, r2]
cmp r4, #0x10
blt _038048FC
_03804910:
ldr r1, _03804A94 ; =_03809E54
and r2, r0, #0xf0000
mov r2, r2, lsr #0x10
mov r2, r2, lsl #1
strh r0, [r1, r2]
tst r0, #0x1000000
beq _03804A88
ldr r1, _03804A98 ; =_03809E4C
ldrh r2, [r1, #8]
and r0, r2, #0xff00
mov r0, r0, lsl #8
mov r4, r0, lsr #0x10
sub r0, r4, #0x60
cmp r0, #7
addls pc, pc, r0, lsl #2
b _03804A7C
_03804950: ; jump table
b _03804970 ; case 0
b _03804980 ; case 1
b _03804A7C ; case 2
b _03804A18 ; case 3
b _038049B4 ; case 4
b _038049E8 ; case 5
b _03804A4C ; case 6
b _03804A64 ; case 7
_03804970:
mov r0, #0x60
mov r1, #0
bl sub_03803A48
b _03804A88
_03804980:
ldrh ip, [r1, #0xa]
mov r1, r4
and r3, r2, #0xff
mov r0, #3
mov r2, #2
str ip, [sp]
bl sub_03803B7C
cmp r0, #0
bne _03804A88
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804A88
_038049B4:
ldrh ip, [r1, #0xa]
mov r1, r4
and r3, r2, #0xff
mov r0, #3
mov r2, #2
str ip, [sp]
bl sub_03803B7C
cmp r0, #0
bne _03804A88
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804A88
_038049E8:
mov r0, r2, lsl #0x10
mov r1, r4
mov r3, r0, lsr #0x10
mov r0, #3
mov r2, #1
bl sub_03803B7C
cmp r0, #0
bne _03804A88
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804A88
_03804A18:
ldrh r0, [r1, #0xa]
mov r2, r2, lsl #0x18
mov r1, r4
orr r3, r0, r2, lsr #8
mov r0, #3
mov r2, #1
bl sub_03803B7C
cmp r0, #0
bne _03804A88
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03804A88
_03804A4C:
and r0, r2, #0xff
bl sub_0380521C
mov r0, #0x66
mov r1, #0
bl sub_03803A48
b _03804A88
_03804A64:
bl sub_03805238
mov r0, r0, lsl #0x10
mov r1, r0, lsr #0x10
mov r0, #0x67
bl sub_03803A48
b _03804A88
_03804A7C:
mov r0, r4
mov r1, #1
bl sub_03803A48
_03804A88:
add sp, sp, #4
ldmia sp!, {r3, r4, lr}
bx lr
.align 2, 0
_03804A94: .word _03809E54
_03804A98: .word _03809E4C
arm_func_end sub_038048E0
arm_func_start sub_03804A9C
sub_03804A9C: ; 0x03804A9C
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
bl EnableIrqFlag
mov r5, r0
mov r0, #3
bl sub_03803B0C
cmp r0, #0
bne _03804ADC
mov r0, r5
bl SetIrqFlag
ldr r0, [r4, #4]
mov r1, #4
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
b _03804C00
_03804ADC:
mov r0, #3
bl sub_03803B28
mov r0, r5
bl SetIrqFlag
ldr r1, [r4, #4]
sub r0, r1, #0x61
cmp r0, #5
addls pc, pc, r0, lsl #2
b _03804BE8
_03804B00: ; jump table
b _03804B18 ; case 0
b _03804BE8 ; case 1
b _03804BB4 ; case 2
b _03804B3C ; case 3
b _03804B78 ; case 4
b _03804BDC ; case 5
_03804B18:
ldr r0, _03804C08 ; =_03809E4C
mov r1, #1
str r1, [r0, #0x28]
ldr r1, [r4, #8]
strh r1, [r0, #2]
ldr r1, [r4, #0xc]
strh r1, [r0]
bl sub_03804F1C
b _03804BF8
_03804B3C:
ldr r2, _03804C08 ; =_03809E4C
mov r0, #4
str r0, [r2, #0x28]
ldr r0, [r4, #8]
str r0, [r2, #0x30]
ldr r3, [r4, #0xc]
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
and r1, r3, #0xff
str r3, [r2, #0x2c]
bl sub_03804C50
mov r0, #0x64
mov r1, #0
bl sub_03803A48
b _03804BF8
_03804B78:
ldr r1, _03804C08 ; =_03809E4C
mov r0, #3
str r0, [r1, #0x28]
ldr r2, [r4, #8]
mov r0, r2, lsl #0x10
mov r4, r0, lsr #0x10
mov r0, r4
str r2, [r1, #0x30]
bl sub_03804CCC
add r1, r4, #0x70
mov r2, r1, lsl #0x10
mov r1, r0
mov r0, r2, lsr #0x10
bl sub_03803A48
b _03804BF8
_03804BB4:
ldr r1, _03804C08 ; =_03809E4C
mov r0, #2
str r0, [r1, #0x28]
ldr r0, [r4, #8]
str r0, [r1, #0x2c]
bl sub_03804D90
mov r0, #0x63
mov r1, #0
bl sub_03803A48
b _03804BF8
_03804BDC:
ldr r0, [r4, #8]
bl sub_03804EB4
b _03804BF8
_03804BE8:
mov r0, r1, lsl #0x10
mov r0, r0, lsr #0x10
mov r1, #1
bl sub_03803A48
_03804BF8:
mov r0, #3
bl sub_03803B40
_03804C00:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_03804C08: .word _03809E4C
arm_func_end sub_03804A9C
arm_func_start sub_03804C0C
sub_03804C0C: ; 0x03804C0C
stmdb sp!, {r4, r5, r6, lr}
and r1, r1, #0x3f0000
and r3, r0, #0x3c00000
mov r1, r1, lsl #0x10
mov r0, r2, lsl #0x10
orr r1, r1, r3, lsl #22
orr r6, r1, r0, lsr #16
mov r5, #8
mov r4, #0
_03804C30:
mov r0, r5
mov r1, r6
mov r2, r4
bl sub_037FE410
cmp r0, #0
bne _03804C30
ldmia sp!, {r4, r5, r6, lr}
bx lr
arm_func_end sub_03804C0C
arm_func_start sub_03804C50
sub_03804C50: ; 0x03804C50
stmdb sp!, {r4, lr}
ldr r2, _03804C9C ; =0x040001C0
mov r4, r1
_03804C5C:
ldrh r1, [r2]
tst r1, #0x80
bne _03804C5C
ldr r1, _03804CA0 ; =0x00008202
and r0, r0, #0xff
strh r1, [r2]
add r1, r1, #0x600
strh r1, [r2]
bl sub_03804CA8
ldr r2, _03804CA4 ; =0x00008002
ldr r1, _03804C9C ; =0x040001C0
and r0, r4, #0xff
strh r2, [r1]
strh r0, [r1, #2]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03804C9C: .word 0x040001C0
_03804CA0: .word 0x00008202
_03804CA4: .word 0x00008002
arm_func_end sub_03804C50
arm_func_start sub_03804CA8
sub_03804CA8: ; 0x03804CA8
ldr r1, _03804CC8 ; =0x040001C2
and r0, r0, #0xff
strh r0, [r1]
sub r1, r1, #2
_03804CB8:
ldrh r0, [r1]
tst r0, #0x80
bne _03804CB8
bx lr
.align 2, 0
_03804CC8: .word 0x040001C2
arm_func_end sub_03804CA8
arm_func_start sub_03804CCC
sub_03804CCC: ; 0x03804CCC
stmdb sp!, {r3, lr}
ldr r2, _03804D30 ; =0x040001C0
_03804CD4:
ldrh r1, [r2]
tst r1, #0x80
bne _03804CD4
ldr r1, _03804D34 ; =0x00008202
orr r0, r0, #0x80
strh r1, [r2]
add r1, r1, #0x600
and r0, r0, #0xff
strh r1, [r2]
bl sub_03804CA8
ldr r2, _03804D38 ; =0x00008002
ldr r1, _03804D30 ; =0x040001C0
mov r0, #0
strh r2, [r1]
strh r0, [r1, #2]
_03804D10:
ldrh r0, [r1]
tst r0, #0x80
bne _03804D10
ldr r0, _03804D3C ; =0x040001C2
ldrh r0, [r0]
and r0, r0, #0xff
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03804D30: .word 0x040001C0
_03804D34: .word 0x00008202
_03804D38: .word 0x00008002
_03804D3C: .word 0x040001C2
arm_func_end sub_03804CCC
arm_func_start sub_03804D40
sub_03804D40: ; 0x03804D40
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0
bl sub_03804CCC
orr r1, r0, r4
mov r0, #0
bl sub_03804C50
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_03804D40
arm_func_start sub_03804D64
sub_03804D64: ; 0x03804D64
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, #0
bl sub_03804CCC
mvn r1, r4
and r0, r0, r1
and r1, r0, #0xff
mov r0, #0
bl sub_03804C50
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_03804D64
arm_func_start sub_03804D90
sub_03804D90: ; 0x03804D90
stmdb sp!, {r3, lr}
cmp r0, #0xf
addls pc, pc, r0, lsl #2
b _03804EAC
_03804DA0: ; jump table
b _03804EAC ; case 0
b _03804DE0 ; case 1
b _03804DF4 ; case 2
b _03804E08 ; case 3
b _03804E1C ; case 4
b _03804E28 ; case 5
b _03804E34 ; case 6
b _03804E40 ; case 7
b _03804E4C ; case 8
b _03804E58 ; case 9
b _03804E64 ; case 10
b _03804E70 ; case 11
b _03804E7C ; case 12
b _03804E88 ; case 13
b _03804EA0 ; case 14
b _03804E94 ; case 15
_03804DE0:
mov r0, #1
bl sub_0380521C
mov r0, #1
bl sub_03804EB4
b _03804EAC
_03804DF4:
mov r0, #3
bl sub_0380521C
mov r0, #3
bl sub_03804EB4
b _03804EAC
_03804E08:
mov r0, #2
bl sub_0380521C
mov r0, #2
bl sub_03804EB4
b _03804EAC
_03804E1C:
mov r0, #4
bl sub_03804D40
b _03804EAC
_03804E28:
mov r0, #4
bl sub_03804D64
b _03804EAC
_03804E34:
mov r0, #8
bl sub_03804D40
b _03804EAC
_03804E40:
mov r0, #8
bl sub_03804D64
b _03804EAC
_03804E4C:
mov r0, #0xc
bl sub_03804D40
b _03804EAC
_03804E58:
mov r0, #0xc
bl sub_03804D64
b _03804EAC
_03804E64:
mov r0, #1
bl sub_03804D40
b _03804EAC
_03804E70:
mov r0, #1
bl sub_03804D64
b _03804EAC
_03804E7C:
mov r0, #2
bl sub_03804D64
b _03804EAC
_03804E88:
mov r0, #2
bl sub_03804D40
b _03804EAC
_03804E94:
mov r0, #0x40
bl sub_03804D64
b _03804EAC
_03804EA0:
bl sub_037FE708
mov r0, #0x40
bl sub_03804D40
_03804EAC:
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_03804D90
arm_func_start sub_03804EB4
sub_03804EB4: ; 0x03804EB4
stmdb sp!, {r4, lr}
mov r4, r0
cmp r4, #1
beq _03804ED8
cmp r4, #2
beq _03804EF0
cmp r4, #3
beq _03804EE4
b _03804F04
_03804ED8:
mov r0, #0x10
bl sub_03804D64
b _03804F08
_03804EE4:
mov r0, #0x30
bl sub_03804D40
b _03804F08
_03804EF0:
mov r0, #0x20
bl sub_03804D64
mov r0, #0x10
bl sub_03804D40
b _03804F08
_03804F04:
bl sub_037FDE70
_03804F08:
ldr r0, _03804F18 ; =_0380756C
str r4, [r0]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03804F18: .word _0380756C
arm_func_end sub_03804EB4
arm_func_start sub_03804F1C
sub_03804F1C: ; 0x03804F1C
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
ldr r0, _038050D8 ; =0x04000208
mov r8, #0
ldrh sb, [r0]
strh r8, [r0]
bl EnableIrqFlag
mov r4, r0
mvn r0, #0xfe000000
bl ClearIeFlag
mov r5, r0
mov r0, r8
bl sub_03804CCC
mov r6, r0
mov r0, #2
bl sub_0380521C
mov r0, #2
bl sub_03804EB4
mov r0, #2
bl sub_03804EB4
bl sub_037FE708
mov r0, #1
bl sub_03804D64
ldr r0, _038050DC ; =_03809E4E
ldrh r0, [r0]
tst r0, #1
beq _03804FA0
ldr r0, _038050E0 ; =_03809E4C
ldr r1, _038050E4 ; =0x04000132
ldrh r2, [r0]
mov r0, #0x1000
orr r2, r2, #0x4000
strh r2, [r1]
bl sub_037FB8F0
_03804FA0:
ldr r0, _038050DC ; =_03809E4E
ldrh r0, [r0]
tst r0, #4
beq _03804FB8
mov r0, #0x400000
bl sub_037FB8F0
_03804FB8:
ldr r0, _038050DC ; =_03809E4E
ldrh r0, [r0]
tst r0, #2
beq _03804FFC
ldr r1, _038050E8 ; =0x04000134
mov r0, #0x8000
ldrh r7, [r1]
mov r8, #1
bl sub_037FE5A8
mov r0, #0x40
mov r1, #0
bl sub_037FE588
mov r0, #0x100
mov r1, r0
bl sub_037FE588
mov r0, #0x80
bl sub_037FB8F0
_03804FFC:
ldr r0, _038050DC ; =_03809E4E
ldrh r0, [r0]
tst r0, #8
beq _03805014
mov r0, #0x100000
bl sub_037FB8F0
_03805014:
ldr r0, _038050DC ; =_03809E4E
ldrh r0, [r0]
tst r0, #0x10
beq _0380502C
mov r0, #0x2000
bl sub_037FB8F0
_0380502C:
mov r0, r4
bl SetIrqFlag
ldr r2, _038050D8 ; =0x04000208
mov r0, #1
ldrh r1, [r2]
strh r0, [r2]
bl sub_038050F0
mov r1, r6
mov r0, #0
bl sub_03804C50
ldr r0, _038050DC ; =_03809E4E
ldrh r1, [r0]
tst r1, #0x20
movne r0, #6
moveq r0, #7
tst r1, #0x40
movne r6, #4
moveq r6, #5
bl sub_03804D90
mov r0, r6
bl sub_03804D90
cmp r8, #0
ldrne r0, _038050E8 ; =0x04000134
strneh r7, [r0]
mov r0, #1
bl sub_03804D40
bl sub_037FE760
mov r1, #0
ldr r3, _038050EC ; =_03809E54
mov r2, r1
mov r0, #0x62
str r1, [r3, #0x20]
bl sub_03804C0C
bl EnableIrqFlag
mov r0, r5
bl sub_037FB8A4
mov r0, r4
bl SetIrqFlag
ldr r1, _038050D8 ; =0x04000208
ldrh r0, [r1]
strh sb, [r1]
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
bx lr
.align 2, 0
_038050D8: .word 0x04000208
_038050DC: .word _03809E4E
_038050E0: .word _03809E4C
_038050E4: .word 0x04000132
_038050E8: .word 0x04000134
_038050EC: .word _03809E54
arm_func_end sub_03804F1C
arm_func_start sub_038050F0
sub_038050F0: ; 0x038050F0
ldr ip, _038050F8 ; =sub_038037D6
bx ip
.align 2, 0
_038050F8: .word sub_038037D6 + 1
arm_func_end sub_038050F0
arm_func_start sub_038050FC
sub_038050FC: ; 0x038050FC
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _03805210 ; =_03809E80
ldr r3, [r1, #4]
cmp r3, #0
bne _03805138
mov r2, #1
mov r3, r2
mov r0, #3
mov r1, #0x66
bl sub_03803B7C
cmp r0, #0
beq _03805208
mov r0, #1
bl sub_0380521C
b _03805208
_03805138:
cmp r3, #4
bge _03805164
ldr r0, _03805214 ; =_0380756C
ldr r0, [r0]
cmp r3, r0
beq _03805208
mov r0, #3
mov r1, #0x66
mov r2, #1
bl sub_03803B7C
b _03805208
_03805164:
sub r2, r3, #4
mov r0, #0xc
mul r4, r2, r0
ldr r5, _03805218 ; =_03807570
ldr r0, [r1]
add r6, r5, r4
ldrh r1, [r6, #0xa]
bl _u32_div_f
mov r1, #0
mov r3, r1, lsr r0
ldr ip, [r6, #4]
mov r2, #0x80000000
rsb r1, r0, #0x20
orr r3, r3, r2, lsl r1
sub r1, r0, #0x20
and ip, ip, r2, lsr r0
orr r3, r3, r2, lsr r1
ldr r0, [r5, r4]
cmp ip, #0
and r0, r0, r3
cmpeq r0, #0
movne r3, #1
ldrh r2, [r6, #8]
ldrh r1, [r6, #0xa]
ldr r0, _03805210 ; =_03809E80
mul r1, r2, r1
ldr r2, [r0]
moveq r3, #2
add r2, r2, #1
cmp r2, r1
str r2, [r0]
movhs r1, #0
strhs r1, [r0]
ldr r0, _03805214 ; =_0380756C
ldr r0, [r0]
cmp r3, r0
beq _03805208
mov r0, #3
mov r1, #0x66
mov r2, #1
bl sub_03803B7C
_03805208:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_03805210: .word _03809E80
_03805214: .word _0380756C
_03805218: .word _03807570
arm_func_end sub_038050FC
arm_func_start sub_0380521C
sub_0380521C: ; 0x0380521C
cmp r0, #0xf
ldrle r1, _03805234 ; =_03809E80
movle r2, #0
strle r0, [r1, #4]
strle r2, [r1]
bx lr
.align 2, 0
_03805234: .word _03809E80
arm_func_end sub_0380521C
arm_func_start sub_03805238
sub_03805238: ; 0x03805238
ldr r0, _03805244 ; =_03809E80
ldr r0, [r0, #4]
bx lr
.align 2, 0
_03805244: .word _03809E80
arm_func_end sub_03805238
arm_func_start sub_03805248
sub_03805248: ; 0x03805248
stmdb sp!, {r4, lr}
mov r4, r0
ldr r3, _03805284 ; =_03809E88
mov r1, #0
ldr r0, _03805288 ; =_03809E98
mov r2, #0xa4
stmib r3, {r1, r4}
bl sub_037FE070
mov r0, r4
bl sub_038052BC
ldr r0, _03805284 ; =_03809E88
mov r1, #3
strb r1, [r0]
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03805284: .word _03809E88
_03805288: .word _03809E98
arm_func_end sub_03805248
arm_func_start sub_0380528C
sub_0380528C: ; 0x0380528C
stmdb sp!, {r3, lr}
ldr r2, _038052B8 ; =0x04000304
mov r0, #1
ldrh r1, [r2]
bic r1, r1, #2
strh r1, [r2]
bl sub_0380521C
mov r0, #1
bl sub_03804EB4
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038052B8: .word 0x04000304
arm_func_end sub_0380528C
arm_func_start sub_038052BC
sub_038052BC: ; 0x038052BC
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
sub sp, sp, #0x50
str r0, [sp, #0x44]
ldr r0, _03805354 ; =_0380AAFC
mov sb, #4
mov r7, #8
mov r4, #3
ldr r1, _03805358 ; =_0380AAFC
ldr r6, _0380535C ; =_03809F3C
mov sl, #0x600
mov r8, #0
mov r5, #0x1c0
mov lr, #0x40
mov ip, #5
mov r3, #7
mov r2, #9
str r0, [sp, #0x1c]
str r1, [sp, #0x20]
add r0, sp, #0x1c
add r1, sp, #0
str sl, [sp, #0x24]
str sb, [sp, #0x28]
str r8, [sp, #0x3c]
str r7, [sp, #0x40]
str r6, [sp, #0x48]
str r5, [sp, #0x4c]
str r4, [sp]
str lr, [sp, #0x38]
str r4, [sp, #8]
str sb, [sp, #0x18]
str ip, [sp, #0x10]
str r3, [sp, #4]
str r7, [sp, #0x14]
str r2, [sp, #0xc]
bl sub_027E0000
add sp, sp, #0x50
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_03805354: .word _0380AAFC
_03805358: .word _0380AAFC
_0380535C: .word _03809F3C
arm_func_end sub_038052BC
arm_func_start sub_03805360
sub_03805360: ; 0x03805360
ldr r0, _0380539C ; =_0380B1FC
mov r3, #0
str r3, [r0, #0x20]
ldr r0, _038053A0 ; =_0380B1FC
mov r2, r3
_03805374:
mov r1, r3, lsl #1
add r3, r3, #1
strh r2, [r0, r1]
cmp r3, #0x10
blt _03805374
ldr r1, _038053A4 ; =0x0400010E
ldrh r0, [r1]
bic r0, r0, #0x80
strh r0, [r1]
bx lr
.align 2, 0
_0380539C: .word _0380B1FC
_038053A0: .word _0380B1FC
_038053A4: .word 0x0400010E
arm_func_end sub_03805360
arm_func_start sub_038053A8
sub_038053A8: ; 0x038053A8
stmdb sp!, {r4, lr}
tst r0, #0x2000000
beq _038053D4
ldr r1, _03805660 ; =_0380B1FC
mov r4, #0
mov r3, r4
_038053C0:
mov r2, r4, lsl #1
add r4, r4, #1
strh r3, [r1, r2]
cmp r4, #0x10
blt _038053C0
_038053D4:
ldr r1, _03805660 ; =_0380B1FC
and r2, r0, #0xf0000
mov r2, r2, lsr #0x10
mov r2, r2, lsl #1
strh r0, [r1, r2]
tst r0, #0x1000000
beq _03805658
ldr r1, _03805664 ; =_0380B1FC
ldrh r2, [r1]
and r0, r2, #0xff00
mov r0, r0, lsl #8
mov r4, r0, lsr #0x10
sub r0, r4, #0x40
cmp r0, #3
addls pc, pc, r0, lsl #2
b _0380564C
_03805414: ; jump table
b _03805424 ; case 0
b _03805460 ; case 1
b _03805564 ; case 2
b _038055C8 ; case 3
_03805424:
mov r1, r4
and r3, r2, #0xff
mov r0, #2
mov r2, #1
bl sub_03803B7C
cmp r0, #0
bne _0380544C
mov r0, r4
mov r1, #4
bl sub_03803A48
_0380544C:
ldr r0, _03805668 ; =0x027FFF94
mov r1, #0
strh r1, [r0]
str r1, [r0, #-4]
b _03805658
_03805460:
ldr r0, [r1, #0x20]
cmp r0, #0
beq _0380547C
mov r0, r4
mov r1, #3
bl sub_03803A48
b _03805658
_0380547C:
and r0, r2, #0xff
strh r0, [r1, #0x24]
ldrh r2, [r1, #2]
ldrh r0, [r1, #4]
orr r3, r0, r2, lsl #16
cmp r3, #0x2000000
blo _038054A0
cmp r3, #0x2400000
blo _038054B0
_038054A0:
mov r0, r4
mov r1, #2
bl sub_03803A48
b _03805658
_038054B0:
str r3, [r1, #0x28]
ldrh r2, [r1, #6]
ldrh r0, [r1, #8]
orr r2, r0, r2, lsl #16
add r0, r3, r2
cmp r0, #0x2400000
bls _038054DC
mov r0, r4
mov r1, #2
bl sub_03803A48
b _03805658
_038054DC:
str r2, [r1, #0x30]
ldrh r2, [r1, #0xa]
ldrh r0, [r1, #0xc]
orr r0, r0, r2, lsl #16
bl sub_03805670
cmp r0, #0
bne _03805508
mov r0, r4
mov r1, #2
bl sub_03803A48
b _03805658
_03805508:
ldr r3, _03805664 ; =_0380B1FC
mov r2, #0
str r2, [r3, #0x2c]
ldrh r0, [r3, #0x24]
mov r1, r4
and ip, r0, #7
mov r0, #2
strh ip, [r3, #0x26]
bl sub_03803B7C
cmp r0, #0
bne _03805544
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03805658
_03805544:
ldr r1, _03805668 ; =0x027FFF94
mov r2, #0
strh r2, [r1]
ldr r0, _03805664 ; =_0380B1FC
str r2, [r1, #-4]
mov r1, #1
str r1, [r0, #0x20]
b _03805658
_03805564:
ldr r0, [r1, #0x20]
cmp r0, #2
beq _03805580
mov r0, r4
mov r1, #3
bl sub_03803A48
b _03805658
_03805580:
mov r1, r4
mov r0, #2
mov r2, #0
bl sub_03803B7C
cmp r0, #0
bne _038055A8
mov r0, r4
mov r1, #4
bl sub_03803A48
b _03805658
_038055A8:
ldr r0, _03805664 ; =_0380B1FC
mov r2, #3
ldr r1, _0380566C ; =0x0400010E
str r2, [r0, #0x20]
ldrh r0, [r1]
bic r0, r0, #0x80
strh r0, [r1]
b _03805658
_038055C8:
ldr r0, [r1, #0x20]
cmp r0, #2
beq _038055E4
mov r0, r4
mov r1, #3
bl sub_03803A48
b _03805658
_038055E4:
ldrh r2, [r1, #2]
ldrh r0, [r1, #4]
orr r0, r0, r2, lsl #16
bl sub_03805670
cmp r0, #0
bne _0380560C
mov r0, r4
mov r1, #2
bl sub_03803A48
b _03805658
_0380560C:
bl EnableIrqFlag
ldr r3, _0380566C ; =0x0400010E
ldr r1, _03805664 ; =_0380B1FC
ldrh r2, [r3]
bic r2, r2, #0x80
strh r2, [r3]
ldrh r2, [r1, #0x34]
strh r2, [r3, #-2]
ldrh r1, [r1, #0x36]
orr r1, r1, #0xc0
strh r1, [r3]
bl SetIrqFlag
mov r0, r4
mov r1, #0
bl sub_03803A48
b _03805658
_0380564C:
mov r0, r4
mov r1, #1
bl sub_03803A48
_03805658:
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03805660: .word _0380B1FC
_03805664: .word _0380B1FC
_03805668: .word 0x027FFF94
_0380566C: .word 0x0400010E
arm_func_end sub_038053A8
arm_func_start sub_03805670
sub_03805670: ; 0x03805670
cmp r0, #0x10000
bhs _03805694
ldr r1, _03805710 ; =_0380B1FC
mov r2, #0
strh r2, [r1, #0x36]
rsb r0, r0, #0x10000
strh r0, [r1, #0x34]
mov r0, #1
bx lr
_03805694:
cmp r0, #0x400000
bhs _038056BC
ldr r1, _03805710 ; =_0380B1FC
mov r3, #1
mov r0, r0, lsr #6
rsb r2, r0, #0x10000
strh r3, [r1, #0x36]
mov r0, r3
strh r2, [r1, #0x34]
bx lr
_038056BC:
cmp r0, #0x1000000
bhs _038056E4
ldr r1, _03805710 ; =_0380B1FC
mov r2, #2
mov r0, r0, lsr #8
strh r2, [r1, #0x36]
rsb r0, r0, #0x10000
strh r0, [r1, #0x34]
mov r0, #1
bx lr
_038056E4:
cmp r0, #0x4000000
movhs r0, #0
bxhs lr
ldr r1, _03805710 ; =_0380B1FC
mov r2, #3
mov r0, r0, lsr #0xa
strh r2, [r1, #0x36]
rsb r0, r0, #0x10000
strh r0, [r1, #0x34]
mov r0, #1
bx lr
.align 2, 0
_03805710: .word _0380B1FC
arm_func_end sub_03805670
arm_func_start sub_03805714
sub_03805714: ; 0x03805714
stmdb sp!, {r3, r4, r5, lr}
mov r4, r0
ldr r2, [r4, #4]
cmp r2, #0x40
beq _0380573C
cmp r2, #0x41
beq _038057EC
cmp r2, #0x42
beq _03805884
b _03805920
_0380573C:
bl EnableIrqFlag
mov r5, r0
mov r0, #2
bl sub_03803B0C
cmp r0, #0
bne _03805774
mov r0, r5
bl SetIrqFlag
ldr r0, [r4, #4]
mov r1, #4
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
b _03805920
_03805774:
mov r0, #2
bl sub_03803B28
mov r0, r5
bl SetIrqFlag
ldr r0, [r4, #8]
and r0, r0, #1
cmp r0, #1
bne _038057A8
bl sub_03805C64
ldr r1, [r4, #8]
tst r1, #2
eorne r0, r0, #0x8000
b _038057B8
_038057A8:
bl sub_03805B10
ldr r1, [r4, #8]
tst r1, #2
eorne r0, r0, #0x80
_038057B8:
ldr r1, _03805928 ; =0x027FFF94
movne r0, r0, lsl #0x10
movne r0, r0, lsr #0x10
strh r0, [r1]
str r1, [r1, #-4]
ldr r0, [r4, #4]
mov r1, #0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
mov r0, #2
bl sub_03803B40
b _03805920
_038057EC:
ldr r0, _0380592C ; =_0380B1FC
ldr r1, [r0, #0x20]
cmp r1, #1
bne _03805870
mov r1, #0
strh r1, [r0, #0x3a]
strh r1, [r0, #0x38]
bl EnableIrqFlag
mov r5, r0
mov r0, #0x40
bl sub_037FB8F0
ldr r1, _03805930 ; =sub_0380593C
mov r0, #0x40
bl sub_03805D98
bl sub_03805DC0
ldr r1, _0380592C ; =_0380B1FC
ldr r2, _03805934 ; =0x0400010C
ldrh r3, [r1, #0x34]
mov r0, r5
strh r3, [r2]
ldrh r1, [r1, #0x36]
orr r1, r1, #0xc0
strh r1, [r2, #2]
bl SetIrqFlag
ldr r0, [r4, #4]
mov r1, #0
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl sub_03803A48
ldr r0, _0380592C ; =_0380B1FC
mov r1, #2
str r1, [r0, #0x20]
b _03805920
_03805870:
mov r0, r2, lsl #0x10
mov r0, r0, lsr #0x10
mov r1, #3
bl sub_03803A48
b _03805920
_03805884:
ldr r0, _0380592C ; =_0380B1FC
ldr r1, [r0, #0x20]
sub r0, r1, #3
cmp r0, #1
bhi _03805900
ldr r1, _03805938 ; =0x0400010E
ldrh r0, [r1]
bic r0, r0, #0x80
strh r0, [r1]
bl EnableIrqFlag
mov r4, r0
mov r0, #0x40
mov r1, #0
bl sub_03805D98
bl sub_03805E20
mov r0, r4
bl SetIrqFlag
ldr r0, _0380592C ; =_0380B1FC
mov r1, #0
ldr r0, [r0, #0x20]
cmp r0, #3
bne _038058E8
mov r0, #0x42
bl sub_03803A48
b _038058F0
_038058E8:
mov r0, #0x51
bl sub_03803A48
_038058F0:
ldr r0, _0380592C ; =_0380B1FC
mov r1, #0
str r1, [r0, #0x20]
b _03805920
_03805900:
cmp r1, #3
mov r1, #3
bne _03805918
mov r0, #0x42
bl sub_03803A48
b _03805920
_03805918:
mov r0, #0x51
bl sub_03803A48
_03805920:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_03805928: .word 0x027FFF94
_0380592C: .word _0380B1FC
_03805930: .word sub_0380593C
_03805934: .word 0x0400010C
_03805938: .word 0x0400010E
arm_func_end sub_03805714
arm_func_start sub_0380593C
sub_0380593C: ; 0x0380593C
stmdb sp!, {r3, lr}
bl sub_03805970
ldr r3, _03805968 ; =0x0380FFF8
ldr r0, _0380596C ; =0x04000214
ldr r2, [r3]
mov r1, #0x40
orr r2, r2, #0x40
str r2, [r3]
str r1, [r0]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03805968: .word 0x0380FFF8
_0380596C: .word 0x04000214
arm_func_end sub_0380593C
arm_func_start sub_03805970
sub_03805970: ; 0x03805970
stmdb sp!, {r4, r5, r6, r7, lr}
ldr r4, _03805B00 ; =_0380B1FC
ldrh r5, [r4, #0x26]
and r0, r5, #4
cmp r0, #4
ldrh r6, [r4, #0x38]
bne _03805990
b _03805994
_03805990:
ldrh r7, [r4, #0x3a]
_03805994:
beq _0380599C
b _038059A0
_0380599C:
ldr r7, _03805B04 ; =0x0000FFFF
_038059A0:
bl sub_03803C5C
cmp r0, #0
bne _03805A0C
mov r0, #2
bl sub_03803B0C
cmp r0, #0
beq _03805A0C
and r0, r5, #1
cmp r0, #1
bne _038059EC
bl sub_03805C64
tst r5, #2
beq _038059D8
b _038059DC
_038059D8:
mov r7, r0
_038059DC:
bne _038059E4
b _038059E8
_038059E4:
eor r7, r0, #0x8000
_038059E8:
b _03805A0C
_038059EC:
bl sub_03805B10
tst r5, #2
beq _038059FC
b _03805A00
_038059FC:
mov r7, r0
_03805A00:
bne _03805A08
b _03805A0C
_03805A08:
eor r7, r0, #0x80
_03805A0C:
and r0, r5, #1
ldr r3, _03805B08 ; =0x027FFC00
ldr r1, [r4, #0x2c]
cmp r0, #1
bne _03805A3C
ldr r2, [r4, #0x28]
strh r7, [r2, r1]!
str r2, [r3, #0x390]
add r3, r3, #0x394
strh r7, [r3]
add r1, r1, #2
b _03805A74
_03805A3C:
and r7, r7, #0xff
tst r1, #1
bne _03805A54
mov r6, r7
add r1, r1, #1
b _03805A74
_03805A54:
orr r0, r6, r7, lsl #8
ldr r2, [r4, #0x28]
sub r1, r1, #1
strh r0, [r2, r1]!
str r2, [r3, #0x390]
add r3, r3, #0x394
strh r0, [r3]
add r1, r1, #2
_03805A74:
strh r6, [r4, #0x38]
strh r7, [r4, #0x3a]
ldr r0, [r4, #0x30]
cmp r1, r0
bhs _03805A8C
b _03805A90
_03805A8C:
mov r1, #0
_03805A90:
str r1, [r4, #0x2c]
blo _03805AF8
ldrh r0, [r4, #0x24]
and r0, r0, #0x10
cmp r0, #0x10
bne _03805AB8
mov r0, #0x51
mov r1, #0
bl sub_03803A48
b _03805AF8
_03805AB8:
mov r0, #2
mov r1, #0x42
mov r2, #0
bl sub_03803B7C
cmp r0, #0
bne _03805AE0
mov r0, #0x51
mov r1, #4
bl sub_03803A48
b _03805AF8
_03805AE0:
mov r0, #4
str r0, [r4, #0x20]
ldr r1, _03805B0C ; =0x0400010E
ldrh r0, [r1]
bic r0, r0, #0x80
strh r0, [r1]
_03805AF8:
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_03805B00: .word _0380B1FC
_03805B04: .word 0x0000FFFF
_03805B08: .word 0x027FFC00
_03805B0C: .word 0x0400010E
arm_func_end sub_03805970
arm_func_start sub_03805B10
sub_03805B10: ; 0x03805B10
stmdb sp!, {r4, lr}
ldr r2, _03805C1C ; =0x040001C0
_03805B18:
ldrh r0, [r2]
tst r0, #0x80
bne _03805B18
ldr r1, _03805C20 ; =0x00008A01
ldr r0, _03805C24 ; =0x040001C2
strh r1, [r2]
mov r1, #0xec
strh r1, [r0]
sub r1, r0, #2
_03805B3C:
ldrh r0, [r1]
tst r0, #0x80
bne _03805B3C
bl sub_03805C34
ldr r2, _03805C28 ; =0x00008201
ldr r1, _03805C1C ; =0x040001C0
mov r4, r0, lsl #0x18
strh r2, [r1]
bl sub_03805C34
ldr r2, _03805C2C ; =_0380B238
ldr r1, _03805C30 ; =0x00007F80
orr r0, r0, r4, lsr #16
and r1, r0, r1
ldr r0, [r2, #0x10]
mov r1, r1, lsl #9
add r3, r0, r1, lsr #16
str r3, [r2, #0x10]
ldr r0, [r2, #0xc]
add r0, r0, #1
str r0, [r2, #0xc]
cmp r0, #0x1000
blo _03805BEC
ldrsb r4, [r2]
mov r0, r3, lsr #0xc
sub r0, r0, #0x80
mov r0, r0, lsl #0x18
cmp r4, r0, asr #24
mov r0, r0, asr #0x18
cmplt r4, #0xc
addlt r0, r4, #1
strltb r0, [r2]
blt _03805BDC
cmp r0, r4
bge _03805BDC
mvn r0, #0xb
cmp r4, r0
ldrgt r0, _03805C2C ; =_0380B238
ldrgtsb r2, [r0]
subgt r2, r2, #1
strgtb r2, [r0]
_03805BDC:
ldr r0, _03805C2C ; =_0380B238
mov r2, #0
str r2, [r0, #0xc]
str r2, [r0, #0x10]
_03805BEC:
ldr r0, _03805C2C ; =_0380B238
ldrsb r0, [r0]
rsb r0, r0, r1, lsr #16
cmp r0, #0xff
movgt r0, #0xff
bgt _03805C0C
cmp r0, #0
movlt r0, #0
_03805C0C:
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03805C1C: .word 0x040001C0
_03805C20: .word 0x00008A01
_03805C24: .word 0x040001C2
_03805C28: .word 0x00008201
_03805C2C: .word _0380B238
_03805C30: .word 0x00007F80
arm_func_end sub_03805B10
arm_func_start sub_03805C34
sub_03805C34: ; 0x03805C34
ldr r0, _03805C60 ; =0x040001C2
mov r1, #0
strh r1, [r0]
sub r1, r0, #2
_03805C44:
ldrh r0, [r1]
tst r0, #0x80
bne _03805C44
ldr r0, _03805C60 ; =0x040001C2
ldrh r0, [r0]
and r0, r0, #0xff
bx lr
.align 2, 0
_03805C60: .word 0x040001C2
arm_func_end sub_03805C34
arm_func_start sub_03805C64
sub_03805C64: ; 0x03805C64
stmdb sp!, {r4, lr}
ldr r2, _03805D7C ; =0x040001C0
_03805C6C:
ldrh r0, [r2]
tst r0, #0x80
bne _03805C6C
ldr r1, _03805D80 ; =0x00008A01
ldr r0, _03805D84 ; =0x040001C2
strh r1, [r2]
mov r1, #0xe4
strh r1, [r0]
sub r1, r0, #2
_03805C90:
ldrh r0, [r1]
tst r0, #0x80
bne _03805C90
bl sub_03805C34
ldr r2, _03805D88 ; =0x00008201
ldr r1, _03805D7C ; =0x040001C0
mov r4, r0, lsl #0x18
strh r2, [r1]
bl sub_03805C34
ldr r3, _03805D8C ; =_0380B238
ldr r1, _03805D90 ; =0x00007FF8
orr r0, r0, r4, lsr #16
and r2, r0, r1
ldr r0, [r3, #4]
mov r2, r2, lsl #0x11
add r4, r0, r2, lsr #16
str r4, [r3, #4]
ldr r0, [r3, #8]
add r0, r0, #1
str r0, [r3, #8]
cmp r0, #0x100
blo _03805D48
mov r0, r1, lsl #1
and r0, r0, r4, lsr #8
ldrsh r4, [r3, #2]
sub r0, r0, #0x8000
mov r0, r0, lsl #0x10
cmp r4, r0, asr #16
mov r1, r0, asr #0x10
cmplt r4, #0xc00
addlt r0, r4, #0x10
strlth r0, [r3, #2]
blt _03805D38
cmp r1, r4
bge _03805D38
mov r0, #0xc00
rsb r0, r0, #0
cmp r4, r0
ldrgt r0, _03805D8C ; =_0380B238
ldrgtsh r1, [r0, #2]
subgt r1, r1, #0x10
strgth r1, [r0, #2]
_03805D38:
ldr r0, _03805D8C ; =_0380B238
mov r1, #0
str r1, [r0, #8]
str r1, [r0, #4]
_03805D48:
ldr r1, _03805D8C ; =_0380B238
ldr r0, _03805D94 ; =0x0000FFF0
ldrsh r1, [r1, #2]
rsb r1, r1, r2, lsr #16
cmp r1, r0
movgt r1, r0
bgt _03805D6C
cmp r1, #0
movlt r1, #0
_03805D6C:
mov r0, r1, lsl #0x10
mov r0, r0, lsr #0x10
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03805D7C: .word 0x040001C0
_03805D80: .word 0x00008A01
_03805D84: .word 0x040001C2
_03805D88: .word 0x00008201
_03805D8C: .word _0380B238
_03805D90: .word 0x00007FF8
_03805D94: .word 0x0000FFF0
arm_func_end sub_03805C64
arm_func_start sub_03805D98
sub_03805D98: ; 0x03805D98
ldr r2, _03805DBC ; =_038074F4
mov r3, #0
_03805DA0:
tst r0, #1
strne r1, [r2, r3, lsl #2]
add r3, r3, #1
cmp r3, #0x19
mov r0, r0, lsr #1
blt _03805DA0
bx lr
.align 2, 0
_03805DBC: .word _038074F4
arm_func_end sub_03805D98
arm_func_start sub_03805DC0
sub_03805DC0: ; 0x03805DC0
stmdb sp!, {r3, lr}
ldr r3, _03805E14 ; =0x0380FFFC
ldr r0, _03805E18 ; =sub_03805E64
ldr r2, [r3]
cmp r2, r0
beq _03805E0C
ldr r0, _03805E1C ; =_0380B24C
mov r1, #0
str r1, [r0]
sub r1, r3, #0x17c
str r1, [r0, #4]
mov r1, #0x40
str r1, [r0, #8]
str r2, [r0, #0xc]
bl EnableIrqFlag
ldr r2, _03805E18 ; =sub_03805E64
ldr r1, _03805E14 ; =0x0380FFFC
str r2, [r1]
bl SetIrqFlag
_03805E0C:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03805E14: .word 0x0380FFFC
_03805E18: .word sub_03805E64
_03805E1C: .word _0380B24C
arm_func_end sub_03805DC0
arm_func_start sub_03805E20
sub_03805E20: ; 0x03805E20
stmdb sp!, {r3, lr}
ldr r1, _03805E58 ; =0x0380FFFC
ldr r0, _03805E5C ; =sub_03805E64
ldr r1, [r1]
cmp r1, r0
bne _03805E50
bl EnableIrqFlag
ldr r1, _03805E60 ; =_0380B24C
ldr r2, _03805E58 ; =0x0380FFFC
ldr r1, [r1, #0xc]
str r1, [r2]
bl SetIrqFlag
_03805E50:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03805E58: .word 0x0380FFFC
_03805E5C: .word sub_03805E64
_03805E60: .word _0380B24C
arm_func_end sub_03805E20
arm_func_start sub_03805E64
sub_03805E64: ; 0x03805E64
mov ip, #0x4000000
add r1, ip, #0x208
ldrh r0, [r1]
tst r0, r0
beq _03805E7C
b _03805E80
_03805E7C:
bx lr
_03805E80:
ldr r3, [ip, #0x210]
ldr r1, [ip, #0x214]
ands r2, r1, r3
beq _03805E94
b _03805E98
_03805E94:
bx lr
_03805E98:
ldr r0, _03806080 ; =0x01DF3FFF
tst r2, r0
beq _03805EA8
b _03805EAC
_03805EA8:
str r2, [ip, #0x214]
_03805EAC:
beq _03805EB4
b _03805EB8
_03805EB4:
bx lr
_03805EB8:
stmdb sp!, {lr}
mrs r0, spsr
stmdb sp!, {r0}
stmdb sp, {sp, lr} ^
sub sp, sp, #8
mov r0, #0x9f
msr cpsr_c, r0
ldr r1, _03806084 ; =_038076A4
ldrh r0, [r1, #2]
add r0, r0, #1
strh r0, [r1, #2]
ldr r1, _03806088 ; =_0380B24C
cmp r0, #1
beq _03805EF4
b _03805EF8
_03805EF4:
mov r0, sp
_03805EF8:
beq _03805F00
b _03805F04
_03805F00:
ldr sp, [r1, #4]
_03805F04:
beq _03805F0C
b _03805F10
_03805F0C:
str r0, [r1, #4]
_03805F10:
stmdb sp!, {r3}
ldr r1, _0380608C ; =_03807210
ldr r0, [r1]
tst r0, r2
bne _03805F28
b _03805F2C
_03805F28:
str r0, [ip, #0x214]
_03805F2C:
bne _03805F34
b _03805F38
_03805F34:
ldr r0, [r1, #4]
_03805F38:
bne _03805F40
b _03805F44
_03805F40:
ldr r3, _03806090 ; =_038074F4
_03805F44:
bne _03805F4C
b _03805F50
_03805F4C:
ldr r0, [r3, r0, lsl #2]
_03805F50:
bne _03805FC0
mov r3, #1
_03805F58:
ldr r0, [r1, r3, lsl #3]
tst r0, r2
beq _03805F68
b _03805F6C
_03805F68:
add r3, r3, #1
_03805F6C:
beq _03805F58
str r0, [ip, #0x214]
add r0, r1, r3, lsl #3
ldr r2, [r0, #4]
ldr r3, _03806090 ; =_038074F4
ldr r0, [r3, r2, lsl #2]
ldr r2, _03806084 ; =_038076A4
ldrh r3, [r2, #2]
cmp r3, #1
beq _03805F98
b _03805F9C
_03805F98:
ldr r2, [r1]
_03805F9C:
beq _03805FA4
b _03805FA8
_03805FA4:
str r2, [ip, #0x210]
_03805FA8:
beq _03805FB0
b _03805FB4
_03805FB0:
mov r2, #0x1f
_03805FB4:
beq _03805FBC
b _03805FC0
_03805FBC:
msr cpsr_c, r2
_03805FC0:
ldr r1, [ip, #0x210]
stmdb sp!, {r1}
add lr, pc, #0x0 ; =sub_03805FD0
bx r0
arm_func_end sub_03805E64
arm_func_start sub_03805FD0
sub_03805FD0: ; 0x03805FD0
mov r0, #0x9f
msr cpsr_c, r0
mov ip, #0x4000000
ldmia sp!, {r0}
ldr r1, [ip, #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, #0x210]
ldr r2, _03806084 ; =_038076A4
ldr r3, _03806088 ; =_0380B24C
ldrh r0, [r2, #2]
subs r1, r0, #1
strh r1, [r2, #2]
beq _0380601C
b _03806020
_0380601C:
mov r0, sp
_03806020:
beq _03806028
b _0380602C
_03806028:
ldr sp, [r3, #4]
_0380602C:
beq _03806034
b _03806038
_03806034:
str r0, [r3, #4]
_03806038:
mov r0, #0x92
msr cpsr_c, r0
ldmia sp, {sp, lr} ^
mov r0, r0
add sp, sp, #8
ldmia sp!, {r0}
msr spsr_fc, r0
tst r1, r1
beq _03806060
b _03806064
_03806060:
ldr r0, _03806094 ; =ReturnFromInterrupt
_03806064:
beq _0380606C
b _03806070
_0380606C:
add lr, pc, #0x0 ; =0x0200E25C
_03806070:
beq _03806078
b _0380607C
_03806078:
bx r0
_0380607C:
ldmia sp!, {pc}
.align 2, 0
_03806080: .word 0x01DF3FFF
_03806084: .word _038076A4
_03806088: .word _0380B24C
_0380608C: .word _03807210
_03806090: .word _038074F4
arm_func_end sub_03805FD0
_03806094: .word ReturnFromInterrupt
arm_func_start sub_03806098
sub_03806098: ; 0x03806098
stmdb sp!, {r3, lr}
ldr r1, _038060C8 ; =_0380B260
mov r3, #0
ldr r2, _038060CC ; =0x05000001
add r0, sp, #0
str r3, [sp]
bl sub_038060D4
bl sub_037FBBFC
ldr r1, _038060D0 ; =_0380B25C
strh r0, [r1, #6]
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038060C8: .word _0380B260
_038060CC: .word 0x05000001
_038060D0: .word _0380B25C
arm_func_end sub_03806098
arm_func_start sub_038060D4
sub_038060D4: ; 0x038060D4
ldr ip, _038060DC ; =sub_038037F8
bx ip
.align 2, 0
_038060DC: .word sub_038037F8 + 1
arm_func_end sub_038060D4
arm_func_start sub_038060E0
sub_038060E0: ; 0x038060E0
stmdb sp!, {r3, lr}
ldr r2, _03806128 ; =0x027FFC30
ldr r0, _0380612C ; =0x0000FFFF
ldrh r1, [r2]
cmp r1, r0
moveq r0, #0
beq _03806120
ldrb r0, [r2, #5]
mov r0, r0, lsl #0x1e
movs r0, r0, lsr #0x1f
bne _03806110
bl sub_03806130
_03806110:
ldr r0, _03806128 ; =0x027FFC30
ldrb r0, [r0, #5]
mov r0, r0, lsl #0x1e
mov r0, r0, lsr #0x1f
_03806120:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03806128: .word 0x027FFC30
_0380612C: .word 0x0000FFFF
arm_func_end sub_038060E0
arm_func_start sub_03806130
sub_03806130: ; 0x03806130
stmdb sp!, {r4, lr}
sub sp, sp, #0x10
ldr r2, _03806248 ; =0x027FFC30
mov r4, #1
ldrh r1, [r2]
rsb r0, r4, #0x10000
cmp r1, r0
moveq r0, #0
beq _0380623C
ldrb r0, [r2, #5]
mov r0, r0, lsl #0x1e
mov r0, r0, lsr #0x1f
cmp r0, #1
moveq r0, #0
beq _0380623C
ldr r0, _0380624C ; =_0380B25C
add r1, sp, #8
ldrh r0, [r0, #6]
bl sub_038062D0
cmp r0, #0
bne _03806194
ldr r0, [sp, #0xc]
bl SetIrqFlag
mov r0, r4
b _0380623C
_03806194:
add r0, sp, #0
bl sub_03806254
mov r0, #0x8000000
ldrb r2, [r0, #0xb2]
cmp r2, #0x96
bne _038061C0
ldr r1, _03806248 ; =0x027FFC30
ldrh r0, [r0, #0xbe]
ldrh r1, [r1]
cmp r1, r0
bne _03806204
_038061C0:
cmp r2, #0x96
ldrne r1, _03806248 ; =0x027FFC30
ldrne r0, _03806250 ; =0x0801FFFE
ldrneh r1, [r1]
ldrneh r0, [r0]
cmpne r1, r0
bne _03806204
ldr r2, _03806248 ; =0x027FFC30
mov r0, #0x8000000
ldr r1, [r2, #8]
ldr r0, [r0, #0xac]
cmp r1, r0
beq _03806218
ldrb r0, [r2, #5]
mov r0, r0, lsl #0x1f
movs r0, r0, lsr #0x1f
beq _03806218
_03806204:
ldr r1, _03806248 ; =0x027FFC30
mov r4, #0
ldrb r0, [r1, #5]
orr r0, r0, #2
strb r0, [r1, #5]
_03806218:
ldr r0, [sp]
bl sub_03806298
ldr r0, [sp, #4]
bl sub_038062B4
ldr r0, _0380624C ; =_0380B25C
add r1, sp, #8
ldrh r0, [r0, #6]
bl sub_03806320
mov r0, r4
_0380623C:
add sp, sp, #0x10
ldmia sp!, {r4, lr}
bx lr
.align 2, 0
_03806248: .word 0x027FFC30
_0380624C: .word _0380B25C
_03806250: .word 0x0801FFFE
arm_func_end sub_03806130
arm_func_start sub_03806254
sub_03806254: ; 0x03806254
stmdb sp!, {r3, lr}
ldr r2, _03806294 ; =0x04000204
ldrh r1, [r2]
and r1, r1, #0xc
mov r1, r1, asr #2
str r1, [r0]
ldrh r1, [r2]
and r1, r1, #0x10
mov r1, r1, asr #4
str r1, [r0, #4]
mov r0, #3
bl sub_03806298
mov r0, #0
bl sub_038062B4
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03806294: .word 0x04000204
arm_func_end sub_03806254
arm_func_start sub_03806298
sub_03806298: ; 0x03806298
ldr r2, _038062B0 ; =0x04000204
ldrh r1, [r2]
bic r1, r1, #0xc
orr r0, r1, r0, lsl #2
strh r0, [r2]
bx lr
.align 2, 0
_038062B0: .word 0x04000204
arm_func_end sub_03806298
arm_func_start sub_038062B4
sub_038062B4: ; 0x038062B4
ldr r2, _038062CC ; =0x04000204
ldrh r1, [r2]
bic r1, r1, #0x10
orr r0, r1, r0, lsl #4
strh r0, [r2]
bx lr
.align 2, 0
_038062CC: .word 0x04000204
arm_func_end sub_038062B4
arm_func_start sub_038062D0
sub_038062D0: ; 0x038062D0
stmdb sp!, {r3, r4, r5, lr}
mov r4, r1
mov r5, r0
bl EnableIrqFlag
str r0, [r4, #4]
ldr r0, _0380631C ; =0x027FFFE8
bl sub_037FBBF4
ands r0, r0, #0x80
str r0, [r4]
bne _03806308
mov r0, r5
bl sub_037FBB84
cmp r0, #0
bne _03806310
_03806308:
mov r0, #1
b _03806314
_03806310:
mov r0, #0
_03806314:
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_0380631C: .word 0x027FFFE8
arm_func_end sub_038062D0
arm_func_start sub_03806320
sub_03806320: ; 0x03806320
stmdb sp!, {r4, lr}
mov r4, r1
ldr r1, [r4]
cmp r1, #0
bne _03806338
bl sub_037FBB78
_03806338:
ldr r0, [r4, #4]
bl SetIrqFlag
ldmia sp!, {r4, lr}
bx lr
arm_func_end sub_03806320
arm_func_start sub_03806348
sub_03806348: ; 0x03806348
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, #1
mov r5, #0xd
mov r4, #0
b _03806368
_03806360:
mov r0, r6
bl sub_037FBA0C
_03806368:
mov r0, r5
mov r1, r7
mov r2, r4
bl sub_037FE410
cmp r0, #0
bne _03806360
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
arm_func_end sub_03806348
arm_func_start sub_03806388
sub_03806388: ; 0x03806388
stmdb sp!, {r3, lr}
bl sub_037FD128
bl sub_037FD34C
ldr r0, _03806410 ; =_0380B294
bl sub_037FD3A0
ldr r0, _03806414 ; =_0380B264
ldr r1, [r0, #0x14]
cmp r1, #0
bne _03806408
mov r1, #1
str r1, [r0, #0x14]
bl sub_03806098
bl sub_037FBBFC
mvn r1, #2
cmp r0, r1
beq _03806408
ldr r1, _03806414 ; =_0380B264
strh r0, [r1]
bl sub_037FE2B4
ldr r1, _03806418 ; =sub_0380659C
mov r0, #0xd
bl sub_037FE39C
bl sub_03806428
ldr r1, _0380641C ; =sub_038065CC
mov r0, #0xd
bl sub_037FE39C
ldr r1, _03806420 ; =sub_03806600
mov r0, #0x10
bl sub_037FE39C
ldr r1, _03806424 ; =sub_03806944
mov r0, #0x11
bl sub_037FE39C
_03806408:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_03806410: .word _0380B294
_03806414: .word _0380B264
_03806418: .word sub_0380659C
_0380641C: .word sub_038065CC
_03806420: .word sub_03806600
_03806424: .word sub_03806944
arm_func_end sub_03806388
arm_func_start sub_03806428
sub_03806428: ; 0x03806428
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
ldr r0, _03806584 ; =_0380B264
ldr r1, [r0, #8]
cmp r1, #0
bne _0380657C
ldr r1, _03806588 ; =0x04000300
mov r2, #1
ldrh r1, [r1]
str r2, [r0, #8]
tst r1, #1
beq _0380657C
mov r0, #0x40000
bl sub_037FB8A4
ldr r2, _0380658C ; =0x04000208
mov r1, #1
ldrh sb, [r2]
ldr r5, _03806584 ; =_0380B264
mov r4, r0
strh r1, [r2]
mov r6, #0x100
b _03806484
_0380647C:
mov r0, r6
bl sub_037FBA0C
_03806484:
ldr r0, [r5, #0x28]
cmp r0, #1
bne _0380647C
ldr r0, _03806584 ; =_0380B264
mov r1, #0x8000000
ldr r2, [r0, #0x18]
ldr r0, _03806590 ; =0x01FFFFC0
add r8, r1, #4
and r0, r2, r0
mov r0, r0, lsr #6
mov r0, r0, lsl #5
add r5, r0, #0x2000000
mov r6, #1
bl sub_037FBBFC
mov r0, r0, lsl #0x10
mov r7, r0, lsr #0x10
mov r0, r7
bl sub_037FBB08
ldr ip, _03806594 ; =0x0000FFFF
mov sl, #0
eor r0, ip, #3
eor r1, ip, #0x84
mov r0, r0, lsl #0x10
mov r1, r1, lsl #0x10
mov r2, r0, lsr #0x10
mov r3, r1, lsr #0x10
b _0380652C
_038064F0:
mov lr, ip
cmp sl, #0x4c
moveq lr, r3
beq _03806508
cmp sl, #0x4d
moveq lr, r2
_03806508:
add r0, r5, sl, lsl #1
mov r1, sl, lsl #1
ldrh r0, [r0, #4]
ldrh r1, [r8, r1]
and r0, lr, r0
cmp r0, r1
movne r6, #0
bne _03806534
add sl, sl, #1
_0380652C:
cmp sl, #0x4e
blt _038064F0
_03806534:
mov r0, r7
bl sub_037FBB78
mov r0, r7
bl sub_037FBCA4
ldr r2, _03806598 ; =0x027FFC30
and r0, r6, #0xff
ldrb r1, [r2, #5]
and r0, r0, #1
bic r1, r1, #1
orr r1, r1, r0
mov r0, #1
strb r1, [r2, #5]
bl sub_03806348
ldr r2, _0380658C ; =0x04000208
mov r0, r4
ldrh r1, [r2]
strh sb, [r2]
bl sub_037FB8A4
_0380657C:
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr}
bx lr
.align 2, 0
_03806584: .word _0380B264
_03806588: .word 0x04000300
_0380658C: .word 0x04000208
_03806590: .word 0x01FFFFC0
_03806594: .word 0x0000FFFF
_03806598: .word 0x027FFC30
arm_func_end sub_03806428
arm_func_start sub_0380659C
sub_0380659C: ; 0x0380659C
stmdb sp!, {r3, lr}
and r0, r1, #0x3f
cmp r0, #1
ldreq r0, _038065C8 ; =_0380B264
moveq r2, #1
streq r1, [r0, #0x18]
streq r2, [r0, #0x28]
beq _038065C0
bl sub_037FDE70
_038065C0:
ldmia sp!, {r3, lr}
bx lr
.align 2, 0
_038065C8: .word _0380B264
arm_func_end sub_0380659C
arm_func_start sub_038065CC
sub_038065CC: ; 0x038065CC
stmdb sp!, {r3, lr}
and r0, r1, #0x3f
cmp r0, #2
bne _038065F4
mov r0, #0
bl sub_03806610
bl sub_037FE708
bl sub_0380528C
bl sub_037FDE70
b _038065F8
_038065F4:
bl sub_037FDE70
_038065F8:
ldmia sp!, {r3, lr}
bx lr
arm_func_end sub_038065CC
arm_func_start sub_03806600
sub_03806600: ; 0x03806600
ldr ip, _0380660C ; =sub_03806610
mov r0, r1
bx ip
.align 2, 0
_0380660C: .word sub_03806610
arm_func_end sub_03806600
arm_func_start sub_03806610
sub_03806610: ; 0x03806610
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
movs r5, r0
beq _0380664C
ldr r0, [r5]
cmp r0, #0
bne _0380664C
ldr r0, [r5, #0x44]
add r0, r0, #1
str r0, [r5, #0x44]
ldr r1, [r5, #0x40]
cmp r1, #0
beq _0380664C
ldr r0, [r5, #0x44]
cmp r0, r1
movhi r5, #0
_0380664C:
cmp r5, #0
ldrne r0, [r5, #0x3c]
cmpne r0, #0
bne _038066F0
bl EnableIrqFlag
ldr r4, _0380682C ; =_0380B264
mov sb, r0
ldr r0, [r4, #4]
cmp r0, #2
bne _038066DC
mov sl, #0
ldr r7, _03806830 ; =0x027FFFE8
ldr r5, _03806834 ; =0x08001000
mov r6, sl
mov fp, #1
b _038066D4
_0380668C:
mov r0, r7
bl sub_037FBBF4
ands r8, r0, #0x80
bne _038066AC
ldrh r0, [r4]
bl sub_037FBB84
cmp r0, #0
bne _038066CC
_038066AC:
str r6, [r4, #4]
mov sl, fp
strh r6, [r5]
cmp r8, #0
bne _038066D4
ldrh r0, [r4]
bl sub_037FBB58
b _038066D4
_038066CC:
ldr r0, _03806838 ; =0x000080E8
bl sub_037FDD64
_038066D4:
cmp sl, #0
beq _0380668C
_038066DC:
ldr r0, _0380683C ; =_0380B294
bl sub_037FD5C0
mov r0, sb
bl SetIrqFlag
b _03806824
_038066F0:
cmp r5, #0
beq _03806824
ldr r0, _03806830 ; =0x027FFFE8
bl sub_037FBBF4
ands r4, r0, #0x80
bne _0380671C
ldr r0, _0380682C ; =_0380B264
ldrh r0, [r0]
bl sub_037FBB84
cmp r0, #0
bne _0380680C
_0380671C:
ldr r1, [r5]
ldr r0, [r5, #4]
cmp r1, r0
bne _03806764
ldr r0, _0380682C ; =_0380B264
mov r2, #0
ldr r1, _03806834 ; =0x08001000
str r2, [r0, #4]
strh r2, [r1]
str r5, [sp]
ldr r1, [r5, #8]
ldr r0, _0380683C ; =_0380B294
ldr r3, _03806840 ; =sub_03806610
mov r2, #0
bl sub_037FD4DC
mov r0, #0
str r0, [r5]
b _038067F4
_03806764:
tst r1, #1
ldr r1, _03806834 ; =0x08001000
beq _038067B4
ldr r0, _0380682C ; =_0380B264
mov r2, #0
str r2, [r0, #4]
strh r2, [r1]
str r5, [sp]
ldr r1, [r5]
ldr r0, _0380683C ; =_0380B294
mov r1, r1, lsr #1
add r1, r5, r1, lsl #2
ldr r1, [r1, #0x24]
ldr r3, _03806840 ; =sub_03806610
mov r2, #0
bl sub_037FD4DC
ldr r0, [r5]
add r0, r0, #1
str r0, [r5]
b _038067F4
_038067B4:
ldr r0, _0380682C ; =_0380B264
mov r2, #2
str r2, [r0, #4]
strh r2, [r1]
str r5, [sp]
ldr r1, [r5]
ldr r0, _0380683C ; =_0380B294
mov r1, r1, lsr #1
add r1, r5, r1, lsl #2
ldr r1, [r1, #0xc]
ldr r3, _03806840 ; =sub_03806610
mov r2, #0
bl sub_037FD4DC
ldr r0, [r5]
add r0, r0, #1
str r0, [r5]
_038067F4:
cmp r4, #0
bne _03806824
ldr r0, _0380682C ; =_0380B264
ldrh r0, [r0]
bl sub_037FBB58
b _03806824
_0380680C:
ldr r0, _0380683C ; =_0380B294
ldr r1, _03806844 ; =0x0000020B
ldr r3, _03806840 ; =sub_03806610
mov r2, #0
str r5, [sp]
bl sub_037FD4DC
_03806824:
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
bx lr
.align 2, 0
_0380682C: .word _0380B264
_03806830: .word 0x027FFFE8
_03806834: .word 0x08001000
_03806838: .word 0x000080E8
_0380683C: .word _0380B294
_03806840: .word sub_03806610
_03806844: .word 0x0000020B
arm_func_end sub_03806610
arm_func_start sub_03806848
sub_03806848: ; 0x03806848
stmdb sp!, {r3, r4, r5, r6, r7, lr}
ldr r1, _03806938 ; =_03807600
mvn r0, #0
ldr r3, [r1, #4]
cmp r3, r0
ldreq r0, _0380693C ; =0x027FFC3C
ldreq r0, [r0]
addeq r0, r0, #0xa
streq r0, [r1, #4]
beq _03806930
ldr r0, _03806940 ; =_0380B264
ldr r2, [r0, #0x10]
cmp r2, #0
ldreq r0, [r0, #0xc]
cmpeq r0, #0
bne _03806930
ldr r2, _0380693C ; =0x027FFC3C
ldr r0, [r2]
cmp r0, r3
blo _03806930
ldr r0, [r2]
add r0, r0, #0xa
str r0, [r1, #4]
bl sub_038060E0
ldr r1, _03806940 ; =_0380B264
str r0, [r1, #0xc]
bl sub_03806130
cmp r0, #0
bne _038068E0
ldr r0, _03806938 ; =_03807600
mov r1, #1
ldr r0, [r0]
cmp r0, #0
ldrne r0, _03806940 ; =_0380B264
strne r1, [r0, #0x10]
bne _03806930
ldr r0, _03806940 ; =_0380B264
str r1, [r0, #0xc]
_038068E0:
ldr r0, _03806940 ; =_0380B264
ldr r1, _03806938 ; =_03807600
ldr r0, [r0, #0xc]
mov r2, #0
str r2, [r1]
cmp r0, #0
beq _03806930
mov r7, #0x64
mov r6, #0xd
mov r5, #0x11
mov r4, r2
b _03806918
_03806910:
mov r0, r7
bl sub_037FC468
_03806918:
mov r0, r6
mov r1, r5
mov r2, r4
bl sub_037FE410
cmp r0, #0
bne _03806910
_03806930:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_03806938: .word _03807600
_0380693C: .word 0x027FFC3C
_03806940: .word _0380B264
arm_func_end sub_03806848
arm_func_start sub_03806944
sub_03806944: ; 0x03806944
stmdb sp!, {r3, r4, r5, r6, r7, lr}
and r0, r1, #0x3f
cmp r0, #3
bne _038069AC
ldr r3, _038069B8 ; =0x04000204
ldr r0, _038069BC ; =0x01FFFFC0
ldrh r2, [r3]
and r0, r1, r0
mov r1, r0, lsr #6
bic r0, r2, #0x60
orr r0, r0, r1, lsl #5
strh r0, [r3]
mov r7, #1
mov r6, #0x11
mov r5, #0x12
mov r4, #0
b _03806990
_03806988:
mov r0, r7
bl sub_037FBA0C
_03806990:
mov r0, r6
mov r1, r5
mov r2, r4
bl sub_037FE410
cmp r0, #0
bne _03806988
b _038069B0
_038069AC:
bl sub_037FDE70
_038069B0:
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_038069B8: .word 0x04000204
_038069BC: .word 0x01FFFFC0
arm_func_end sub_03806944
arm_func_start sub_038069C0
sub_038069C0: ; 0x038069C0
stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
mov r4, r1
orr r4, r4, #1
b _038069E0
arm_func_end sub_038069C0
arm_func_start sub_038069D0
sub_038069D0: ; 0x038069D0
stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
eor r4, r1, r3
mov r4, r4, asr #1
mov r4, r4, lsl #1
_038069E0:
orrs r5, r3, r2
bne _038069F0
ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
bx lr
_038069F0:
mov r5, r0, lsr #0x1f
add r5, r5, r1
mov r6, r2, lsr #0x1f
add r6, r6, r3
orrs r6, r5, r6
bne _03806A24
mov r1, r2
bl _s32_div_f
ands r4, r4, #1
movne r0, r1
mov r1, r0, asr #0x1f
ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
bx lr
_03806A24:
cmp r1, #0
bge _03806A34
rsbs r0, r0, #0
rsc r1, r1, #0
_03806A34:
cmp r3, #0
bge _03806A44
rsbs r2, r2, #0
rsc r3, r3, #0
_03806A44:
orrs r5, r1, r0
beq _03806B68
mov r5, #0
mov r6, #1
cmp r3, #0
bmi _03806A70
_03806A5C:
add r5, r5, #1
adds r2, r2, r2
adcs r3, r3, r3
bpl _03806A5C
add r6, r6, r5
_03806A70:
cmp r1, #0
blt _03806A90
_03806A78:
cmp r6, #1
beq _03806A90
sub r6, r6, #1
adds r0, r0, r0
adcs r1, r1, r1
bpl _03806A78
_03806A90:
mov r7, #0
mov ip, #0
mov fp, #0
b _03806AB8
_03806AA0:
orr ip, ip, #1
subs r6, r6, #1
beq _03806B10
adds r0, r0, r0
adcs r1, r1, r1
adcs r7, r7, r7
_03806AB8:
subs r0, r0, r2
sbcs r1, r1, r3
sbcs r7, r7, #0
adds ip, ip, ip
adc fp, fp, fp
cmp r7, #0
bge _03806AA0
_03806AD4:
subs r6, r6, #1
beq _03806B08
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 _03806AA0
b _03806AD4
_03806B08:
adds r0, r0, r2
adc r1, r1, r3
_03806B10:
ands r7, r4, #1
moveq r0, ip
moveq r1, fp
beq _03806B48
subs r7, r5, #0x20
movge r0, r1, lsr r7
bge _03806B6C
rsb r7, r5, #0x20
mov r0, r0, lsr r5
orr r0, r0, r1, lsl r7
mov r1, r1, lsr r5
b _03806B48
_03806B40:
mov r0, r1, lsr r7
mov r1, #0
_03806B48:
cmp r4, #0
blt _03806B58
ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
bx lr
_03806B58:
rsbs r0, r0, #0
rsc r1, r1, #0
ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
bx lr
_03806B68:
mov r0, #0
_03806B6C:
mov r1, #0
cmp r4, #0
blt _03806B58
ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
bx lr
arm_func_end sub_038069D0
arm_func_start sub_03806B80
sub_03806B80: ; 0x03806B80
stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
mov r4, #0
b _03806B94
_03806B8C:
stmdb sp!, {r4, r5, r6, r7, fp, ip, lr}
mov r4, #1
_03806B94:
orrs r5, r3, r2
bne _03806BA4
ldmia sp!, {r4, r5, r6, r7, fp, ip, lr}
bx lr
_03806BA4:
orrs r5, r1, r3
bne _03806A44
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_end sub_03806B80
arm_func_start _s32_div_f
_s32_div_f: ; 0x03806BC8
eor ip, r0, r1
and ip, ip, #0x80000000
cmp r0, #0
rsblt r0, r0, #0
addlt ip, ip, #1
cmp r1, #0
rsblt r1, r1, #0
beq _03806DC0
cmp r0, r1
movlo r1, r0
movlo r0, #0
blo _03806DC0
mov r2, #0x1c
mov r3, r0, lsr #4
cmp r1, r3, lsr #12
suble r2, r2, #0x10
movle r3, r3, lsr #0x10
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
mov r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
mov r1, r3
_03806DC0:
ands r3, ip, #0x80000000
rsbne r0, r0, #0
ands r3, ip, #1
rsbne r1, r1, #0
bx lr
arm_func_end _s32_div_f
arm_func_start _u32_div_f
_u32_div_f: ; 0x03806DD4
cmp r1, #0
bxeq lr
arm_func_end _u32_div_f
arm_func_start _u32_div_not_0_f
_u32_div_not_0_f: ; 0x03806DDC
cmp r0, r1
movlo r1, r0
movlo r0, #0
bxlo lr
mov r2, #0x1c
mov r3, r0, lsr #4
cmp r1, r3, lsr #12
suble r2, r2, #0x10
movle r3, r3, lsr #0x10
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
mov r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
adcs r3, r1, r3, lsl #1
sublo r3, r3, r1
adcs r0, r0, r0
mov r1, r3
bx lr
arm_func_end _u32_div_not_0_f
_03806FB8:
.byte 0x00, 0x06, 0x0C, 0x13, 0x19, 0x1F, 0x25, 0x2B, 0x31, 0x36, 0x3C, 0x41, 0x47, 0x4C, 0x51, 0x55
.byte 0x5A, 0x5E, 0x62, 0x66, 0x6A, 0x6D, 0x70, 0x73, 0x75, 0x78, 0x7A, 0x7B, 0x7D, 0x7E, 0x7E, 0x7F
.byte 0x7F, 0x00, 0x00, 0x00
.global _03806FDC
_03806FDC:
.byte 0x00, 0x80, 0x2E, 0xFD, 0x2F, 0xFD, 0x75, 0xFD, 0xA7, 0xFD, 0xCE, 0xFD
.byte 0xEE, 0xFD, 0x09, 0xFE, 0x20, 0xFE, 0x34, 0xFE, 0x46, 0xFE, 0x57, 0xFE, 0x66, 0xFE, 0x74, 0xFE
.byte 0x81, 0xFE, 0x8D, 0xFE, 0x98, 0xFE, 0xA3, 0xFE, 0xAD, 0xFE, 0xB6, 0xFE, 0xBF, 0xFE, 0xC7, 0xFE
.byte 0xCF, 0xFE, 0xD7, 0xFE, 0xDF, 0xFE, 0xE6, 0xFE, 0xEC, 0xFE, 0xF3, 0xFE, 0xF9, 0xFE, 0xFF, 0xFE
.byte 0x05, 0xFF, 0x0B, 0xFF, 0x11, 0xFF, 0x16, 0xFF, 0x1B, 0xFF, 0x20, 0xFF, 0x25, 0xFF, 0x2A, 0xFF
.byte 0x2E, 0xFF, 0x33, 0xFF, 0x37, 0xFF, 0x3C, 0xFF, 0x40, 0xFF, 0x44, 0xFF, 0x48, 0xFF, 0x4C, 0xFF
.byte 0x50, 0xFF, 0x53, 0xFF, 0x57, 0xFF, 0x5B, 0xFF, 0x5E, 0xFF, 0x62, 0xFF, 0x65, 0xFF, 0x68, 0xFF
.byte 0x6B, 0xFF, 0x6F, 0xFF, 0x72, 0xFF, 0x75, 0xFF, 0x78, 0xFF, 0x7B, 0xFF, 0x7E, 0xFF, 0x81, 0xFF
.byte 0x83, 0xFF, 0x86, 0xFF, 0x89, 0xFF, 0x8C, 0xFF, 0x8E, 0xFF, 0x91, 0xFF, 0x93, 0xFF, 0x96, 0xFF
.byte 0x99, 0xFF, 0x9B, 0xFF, 0x9D, 0xFF, 0xA0, 0xFF, 0xA2, 0xFF, 0xA5, 0xFF, 0xA7, 0xFF, 0xA9, 0xFF
.byte 0xAB, 0xFF, 0xAE, 0xFF, 0xB0, 0xFF, 0xB2, 0xFF, 0xB4, 0xFF, 0xB6, 0xFF, 0xB8, 0xFF, 0xBA, 0xFF
.byte 0xBC, 0xFF, 0xBE, 0xFF, 0xC0, 0xFF, 0xC2, 0xFF, 0xC4, 0xFF, 0xC6, 0xFF, 0xC8, 0xFF, 0xCA, 0xFF
.byte 0xCC, 0xFF, 0xCE, 0xFF, 0xCF, 0xFF, 0xD1, 0xFF, 0xD3, 0xFF, 0xD5, 0xFF, 0xD6, 0xFF, 0xD8, 0xFF
.byte 0xDA, 0xFF, 0xDC, 0xFF, 0xDD, 0xFF, 0xDF, 0xFF, 0xE1, 0xFF, 0xE2, 0xFF, 0xE4, 0xFF, 0xE5, 0xFF
.byte 0xE7, 0xFF, 0xE9, 0xFF, 0xEA, 0xFF, 0xEC, 0xFF, 0xED, 0xFF, 0xEF, 0xFF, 0xF0, 0xFF, 0xF2, 0xFF
.byte 0xF3, 0xFF, 0xF5, 0xFF, 0xF6, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFC, 0xFF, 0xFD, 0xFF
.byte 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0x5B, 0xFE, 0x97, 0xFE, 0xBB, 0xFE, 0xD4, 0xFE, 0xE7, 0xFE
.byte 0xF7, 0xFE, 0x04, 0xFF, 0x10, 0xFF, 0x1A, 0xFF, 0x23, 0xFF, 0x2C, 0xFF, 0x33, 0xFF, 0x3A, 0xFF
.byte 0x40, 0xFF, 0x46, 0xFF, 0x4C, 0xFF, 0x51, 0xFF, 0x56, 0xFF, 0x5B, 0xFF, 0x5F, 0xFF, 0x64, 0xFF
.byte 0x68, 0xFF, 0x6C, 0xFF, 0x6F, 0xFF, 0x73, 0xFF, 0x76, 0xFF, 0x7A, 0xFF, 0x7D, 0xFF, 0x80, 0xFF
.byte 0x83, 0xFF, 0x86, 0xFF, 0x88, 0xFF, 0x8B, 0xFF, 0x8E, 0xFF, 0x90, 0xFF, 0x92, 0xFF, 0x95, 0xFF
.byte 0x97, 0xFF, 0x99, 0xFF, 0x9C, 0xFF, 0x9E, 0xFF, 0xA0, 0xFF, 0xA2, 0xFF, 0xA4, 0xFF, 0xA6, 0xFF
.byte 0xA8, 0xFF, 0xAA, 0xFF, 0xAB, 0xFF, 0xAD, 0xFF, 0xAF, 0xFF, 0xB1, 0xFF, 0xB2, 0xFF, 0xB4, 0xFF
.byte 0xB6, 0xFF, 0xB7, 0xFF, 0xB9, 0xFF, 0xBA, 0xFF, 0xBC, 0xFF, 0xBD, 0xFF, 0xBF, 0xFF, 0xC0, 0xFF
.byte 0xC2, 0xFF, 0xC3, 0xFF, 0xC4, 0xFF, 0xC6, 0xFF, 0xC7, 0xFF, 0xC8, 0xFF, 0xCA, 0xFF, 0xCB, 0xFF
.byte 0xCC, 0xFF, 0xCD, 0xFF, 0xCF, 0xFF, 0xD0, 0xFF, 0xD1, 0xFF, 0xD2, 0xFF, 0xD3, 0xFF, 0xD5, 0xFF
.byte 0xD6, 0xFF, 0xD7, 0xFF, 0xD8, 0xFF, 0xD9, 0xFF, 0xDA, 0xFF, 0xDB, 0xFF, 0xDC, 0xFF, 0xDD, 0xFF
.byte 0xDE, 0xFF, 0xDF, 0xFF, 0xE0, 0xFF, 0xE1, 0xFF, 0xE2, 0xFF, 0xE3, 0xFF, 0xE4, 0xFF, 0xE5, 0xFF
.byte 0xE6, 0xFF, 0xE7, 0xFF, 0xE8, 0xFF, 0xE9, 0xFF, 0xE9, 0xFF, 0xEA, 0xFF, 0xEB, 0xFF, 0xEC, 0xFF
.byte 0xED, 0xFF, 0xEE, 0xFF, 0xEF, 0xFF, 0xEF, 0xFF, 0xF0, 0xFF, 0xF1, 0xFF, 0xF2, 0xFF, 0xF3, 0xFF
.byte 0xF4, 0xFF, 0xF4, 0xFF, 0xF5, 0xFF, 0xF6, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF
.byte 0xFA, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD, 0xFF, 0xFD, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFF, 0x00, 0x00
.global _038071DC
_038071DC:
.byte 0x00, 0x01, 0x02, 0x04
.global _038071E0
_038071E0:
.byte 0x04, 0x05, 0x06, 0x07, 0x02, 0x00, 0x03, 0x01
.byte 0x08, 0x09, 0x0A, 0x0B, 0x0E, 0x0C, 0x0F, 0x0D
.global _038071F0
_038071F0:
.byte 0x00, 0x01, 0x05, 0x0E, 0x1A, 0x26, 0x33, 0x3F
.byte 0x49, 0x54, 0x5C, 0x64, 0x6D, 0x74, 0x7B, 0x7F, 0x84, 0x89, 0x8F, 0x00
.global _03807204
_03807204:
.byte 0x06, 0x00, 0x00, 0x00
.global _03807208
_03807208:
.byte 0xC7, 0x00, 0x00, 0x00
.global _0380720C
_0380720C:
.byte 0x05, 0x00, 0x00, 0x00
.global _03807210
_03807210:
.byte 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x13, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x12, 0x00, 0x00, 0x00
.byte 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00
.byte 0x20, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00
.byte 0x00, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00
.byte 0x00, 0x08, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00
.byte 0x00, 0x20, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
.byte 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x16, 0x00, 0x00, 0x00
.byte 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x80, 0x00, 0x17, 0x00, 0x00, 0x00
arm_func_start sub_038072C0
sub_038072C0: ; 0x038072C0
mov ip, #0x4000000
str ip, [ip, #0x208]
ldr r1, _03807328 ; =0x0380FFFC
mov r0, #0
str r0, [r1]
ldr r1, _0380732C ; =0x04000180
mov r0, #0x100
strh r0, [r1]
_038072E0:
ldrh r0, [r1]
and r0, r0, #0xf
cmp r0, #1
bne _038072E0
ldr r1, _0380732C ; =0x04000180
mov r0, #0
strh r0, [r1]
_038072FC:
ldrh r0, [r1]
cmp r0, #1
beq _038072FC
ldr r3, _03807330 ; =0x027FFE00
ldr ip, [r3, #0x34]
mov lr, ip
mov r0, #0
mov r1, #0
mov r2, #0
mov r3, #0
bx ip
.align 2, 0
_03807328: .word 0x0380FFFC
_0380732C: .word 0x04000180
_03807330: .word 0x027FFE00
arm_func_end sub_038072C0
arm_func_start sub_03807334
sub_03807334: ; 0x03807334
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, #0x100
mov r5, #0xa
mov r4, #0
b _03807354
_0380734C:
mov r0, r6
bl sub_037FBA0C
_03807354:
mov r0, r5
mov r1, r7
mov r2, r4
bl sub_037FE410
cmp r0, #0
blt _0380734C
ldr r0, _0380737C ; =_027F8DA0
bl sub_037FC90C
ldmia sp!, {r3, r4, r5, r6, r7, lr}
bx lr
.align 2, 0
_0380737C: .word _027F8DA0
arm_func_end sub_03807334
arm_func_start sub_03807380
sub_03807380: ; 0x03807380
stmdb sp!, {r3, r4, r5, lr}
ldr r0, _038073C8 ; =_027F8DA0
bl sub_037FC888
ldr r4, _038073CC ; =0x027FFF96
mov r5, #0x100
b _038073A0
_03807398:
mov r0, r5
bl sub_037FBA0C
_038073A0:
ldrh r1, [r4]
tst r1, #1
bne _03807398
ldr r0, _038073D0 ; =_027F8878
orr r1, r1, #1
strh r1, [r4]
ldr r0, [r0, #0x54c]
ldr r0, [r0, #8]
ldmia sp!, {r3, r4, r5, lr}
bx lr
.align 2, 0
_038073C8: .word _027F8DA0
_038073CC: .word 0x027FFF96
_038073D0: .word _027F8878
arm_func_end sub_03807380
arm_func_start sub_038073D4
sub_038073D4: ; 0x038073D4
stmdb sp!, {r4, r5, r6, lr}
ldr r1, _038074DC ; =0x00001FFF
and r0, r0, r1
mov r0, r0, lsl #0x10
movs r2, r0, lsr #0x10
moveq r0, #0
beq _038074D4
mov r1, #0
mov r0, #1
b _03807408
_038073FC:
tst r2, r0, lsl r1
bne _03807410
add r1, r1, #1
_03807408:
cmp r1, #0x10
blt _038073FC
_03807410:
mov r0, #0xf
mov r3, #1
b _03807428
_0380741C:
tst r2, r3, lsl r0
bne _03807430
sub r0, r0, #1
_03807428:
cmp r0, #0
bne _0380741C
_03807430:
sub r6, r0, r1
cmp r6, #5
movlt r0, #1
movlt r0, r0, lsl r1
movlt r0, r0, lsl #0x10
movlt r0, r0, lsr #0x10
blt _038074D4
add r3, r0, r1
add r3, r3, r3, lsr #31
mov r4, r3, asr #1
mov r5, #0
mov lr, #1
b _03807488
_03807464:
mov ip, r5, lsr #0x1f
rsb r3, ip, r5, lsl #31
add r3, ip, r3, ror #31
mov r3, r3, lsl #1
sub r3, r3, #1
mla r4, r5, r3, r4
tst r2, lr, lsl r4
bne _03807490
add r5, r5, #1
_03807488:
cmp r5, r6
blt _03807464
_03807490:
sub r2, r0, r4
cmp r2, #5
subge r2, r4, r1
cmpge r2, #5
bge _038074BC
mov r2, #1
mov r0, r2, lsl r0
orr r0, r0, r2, lsl r1
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
b _038074D4
_038074BC:
mov r3, #1
mov r2, r3, lsl r4
orr r0, r2, r3, lsl r0
orr r0, r0, r3, lsl r1
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
_038074D4:
ldmia sp!, {r4, r5, r6, lr}
bx lr
.align 2, 0
_038074DC: .word 0x00001FFF
arm_func_end sub_038073D4
_038074E0:
.byte 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00
.byte 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00
.global _038074F4
_038074F4:
.word sub_037FB748
.word sub_037FB638
.word sub_037FB638
.word sub_037FB708
.word sub_037FB718
.word sub_037FB728
.word sub_037FB738
.word sub_037FB638
.word sub_037FB6C8
.word sub_037FB6D8
.word sub_037FB6E8
.word sub_037FB6F8
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.word sub_037FB638
.global _03807558
_03807558:
.byte 0xFF, 0xFF, 0xFF, 0xFF
.global _0380755C
_0380755C:
.byte 0x78, 0x56, 0x34, 0x12
.global _03807560
_03807560:
.byte 0x00, 0xFE, 0x7F, 0x02
.global _03807564
_03807564:
.byte 0xFF, 0xFF, 0xFF, 0xFF
.byte 0x01, 0x00, 0x00, 0x00
.global _0380756C
_0380756C:
.byte 0x01, 0x00, 0x00, 0x00
.global _03807570
_03807570:
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA
.byte 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x08, 0x00, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE3, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0xF0, 0xF0, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0xF8
.byte 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0C, 0x00, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0xC0, 0xFF, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.byte 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x20, 0x00, 0x01, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0xC3, 0x28, 0x00, 0x02, 0x00
.global _03807600
_03807600:
.byte 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
.bss
.global _03807608
_03807608:
.space 0x8
.global _03807610
_03807610:
.space 0x4
.global _03807614
_03807614:
.space 0x4
.global _03807618
_03807618:
.space 0x28
.global _03807640
_03807640:
.space 0x4
.global _03807644
_03807644:
.space 0x4
.global _03807648
_03807648:
.space 0x28
.global _03807670
_03807670:
.space 0xC
.global _0380767C
_0380767C:
.space 0x4
.global _03807680
_03807680:
.space 0x24
.global _038076A4
_038076A4:
.space 0x4
.global _038076A8
_038076A8:
.space 0xC
.global _038076B4
_038076B4:
.space 0xA4
.global _03807758
_03807758:
.space 0xA4
.global _038077FC
_038077FC:
.space 0x4
.global _03807800
_03807800:
.space 0x24
.global _03807824
_03807824:
.space 0x4
.global _03807828
_03807828:
.space 0x10
.global _03807838
_03807838:
.space 0xC
.global _03807844
_03807844:
.space 0x14
.global _03807858
_03807858:
.space 0x4
.global _0380785C
_0380785C:
.space 0x4
.global _03807860
_03807860:
.space 0x80
.global _038078E0
_038078E0:
.space 0x4
.global _038078E4
_038078E4:
.space 0x2C
.global _03807910
_03807910:
.space 0x4
.global _03807914
_03807914:
.space 0x10
.global _03807924
_03807924:
.space 0x10
.global _03807934
_03807934:
.space 0x4
.global _03807938
_03807938:
.space 0x20
.global _03807958
_03807958:
.space 0x20
.global _03807978
_03807978:
.space 0x2C
.global _038079A4
_038079A4:
.space 0x4A4
.global _03807E48
_03807E48:
.space 0x8
.global _03807E50
_03807E50:
.space 0xC
.global _03807E5C
_03807E5C:
.space 0x10
.global _03807E6C
_03807E6C:
.space 0x4
.global _03807E70
_03807E70:
.space 0x540
.global _038083B0
_038083B0:
.space 0x240
.global _038085F0
_038085F0:
.space 0x800
.global _03808DF0
_03808DF0:
.space 0x200
.global _03808FF0
_03808FF0:
.space 0x20
.global _03809010
_03809010:
.space 0x30
.global _03809040
_03809040:
.space 0x20
.global _03809060
_03809060:
.space 0x600
.global _03809660
_03809660:
.space 0x4
.global _03809664
_03809664:
.space 0x1C
.global _03809680
_03809680:
.space 0x240
.global _038098C0
_038098C0:
.space 0x10
.global _038098D0
_038098D0:
.space 0x4
.global _038098D4
_038098D4:
.space 0x8
.global _038098DC
_038098DC:
.space 0x2A4
.global _03809B80
_03809B80:
.space 0x20
.global _03809BA0
_03809BA0:
.space 0x40
.global _03809BE0
_03809BE0:
.space 0x4
.global _03809BE4
_03809BE4:
.space 0x180
.global _03809D64
_03809D64:
.space 0xC
.global _03809D70
_03809D70:
.space 0x4
.global _03809D74
_03809D74:
.space 0x2C
.global _03809DA0
_03809DA0:
.space 0xA8
.global _03809E48
_03809E48:
.space 0x4
.global _03809E4C
_03809E4C:
.space 0x2
.global _03809E4E
_03809E4E:
.space 0x2
.global _03809E50
_03809E50:
.space 0x4
.global _03809E54
_03809E54:
.space 0x2C
.global _03809E80
_03809E80:
.space 0x8
.global _03809E88
_03809E88:
.space 0x10
.global _03809E98
_03809E98:
.space 0xA4
.global _03809F3C
_03809F3C:
.space 0xBC0
.global _0380AAFC
_0380AAFC:
.space 0x700
.global _0380B1FC
_0380B1FC:
.space 0x3C
.global _0380B238
_0380B238:
.space 0x14
.global _0380B24C
_0380B24C:
.space 0x10
.global _0380B25C
_0380B25C:
.space 0x4
.global _0380B260
_0380B260:
.space 0x4
.global _0380B264
_0380B264:
.space 0x30
.global _0380B294
_0380B294:
.space 0x2C
.global _0380B2C0
_0380B2C0:
.space 0xA4
.global _0380B364
_0380B364:
.space 0xA4
.global _0380B408
_0380B408:
.space 0x2C
.global _0380B434
_0380B434:
.space 0x2C
.global _0380B460
_0380B460:
.space 0x28