mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-07-21 18:00:56 -05:00
1509 lines
27 KiB
ArmAsm
1509 lines
27 KiB
ArmAsm
.include "macros/function.inc"
|
|
.include "include/exceptionhandler.inc"
|
|
|
|
|
|
|
|
.text
|
|
|
|
|
|
arm_func_start sub_020E2A98
|
|
sub_020E2A98: ; 0x020E2A98
|
|
stmfd sp!, {r4, r5, r6, lr}
|
|
subs r6, r1, #1
|
|
mov r5, #0
|
|
bmi _020E2AF4
|
|
mov r1, #0xc
|
|
_020E2AAC:
|
|
add r3, r5, r6
|
|
mov r4, r3, asr #1
|
|
mul r3, r4, r1
|
|
ldr ip, [r0, r3]
|
|
add lr, r0, r3
|
|
cmp r2, ip
|
|
sublo r6, r4, #1
|
|
blo _020E2AEC
|
|
ldr r3, [lr, #4]
|
|
bic r3, r3, #1
|
|
add r3, ip, r3
|
|
cmp r2, r3
|
|
addhi r5, r4, #1
|
|
bhi _020E2AEC
|
|
mov r0, lr
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
_020E2AEC:
|
|
cmp r5, r6
|
|
ble _020E2AAC
|
|
_020E2AF4:
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, r6, pc}
|
|
arm_func_end sub_020E2A98
|
|
|
|
arm_func_start sub_020E2AFC
|
|
sub_020E2AFC: ; 0x020E2AFC
|
|
stmfd sp!, {r4, r5, r6, r7, r8, sb, lr}
|
|
sub sp, sp, #0xc
|
|
mov r4, r0
|
|
mov sb, r1
|
|
mov r2, #0
|
|
str r2, [sb, #4]
|
|
mov r0, sb
|
|
mov r1, r4
|
|
str r2, [sb, #8]
|
|
bl sub_020E4438
|
|
cmp r0, #0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r0, [sb, #0xc]
|
|
ldr r1, [sb, #0x10]
|
|
ldr r3, _020E2C00 ; =0x2AAAAAAB
|
|
sub r5, r1, r0
|
|
smull r2, r1, r3, r5
|
|
mov r3, r5, lsr #0x1f
|
|
mov r2, r4
|
|
add r1, r3, r1, asr #1
|
|
bl sub_020E2A98
|
|
cmp r0, #0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r1, [r0, #4]
|
|
tst r1, #1
|
|
addne r1, r0, #8
|
|
ldreq r1, [r0, #8]
|
|
str r1, [sb, #4]
|
|
ldr r1, [r0, #0]
|
|
str r1, [sb]
|
|
ldr r1, [r0, #0]
|
|
ldr r0, [sb, #4]
|
|
sub r7, r4, r1
|
|
bl sub_020E4458
|
|
mov r8, #0
|
|
add r5, sp, #4
|
|
add r4, sp, #0
|
|
add r6, sp, #8
|
|
_020E2B9C:
|
|
mov r1, r6
|
|
bl sub_020E2A0C
|
|
ldr r1, [sp, #8]
|
|
cmp r1, #0
|
|
addeq sp, sp, #0xc
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
mov r1, r5
|
|
bl sub_020E2A0C
|
|
mov r1, r4
|
|
bl sub_020E2A0C
|
|
ldr r1, [sp, #8]
|
|
add r2, r8, r1
|
|
cmp r7, r2
|
|
addlo sp, sp, #0xc
|
|
ldmloia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
ldr r1, [sp, #4]
|
|
add r8, r2, r1
|
|
cmp r7, r8
|
|
bhi _020E2B9C
|
|
ldr r1, [sb, #4]
|
|
ldr r0, [sp]
|
|
add r0, r1, r0
|
|
str r0, [sb, #8]
|
|
add sp, sp, #0xc
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, pc}
|
|
; .align 2, 0
|
|
_020E2C00: .word 0x2AAAAAAB
|
|
arm_func_end sub_020E2AFC
|
|
|
|
arm_func_start sub_020E2C04
|
|
sub_020E2C04: ; 0x020E2C04
|
|
ldr r0, [r0, #8]
|
|
cmp r0, #0
|
|
ldrneb r0, [r0]
|
|
andne r0, r0, #0x1f
|
|
moveq r0, #0
|
|
and r0, r0, #0xff
|
|
bx lr
|
|
arm_func_end sub_020E2C04
|
|
|
|
arm_func_start sub_020E2C20
|
|
sub_020E2C20: ; 0x020E2C20
|
|
stmfd sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #0xa0
|
|
mov r4, r0
|
|
_020E2C2C:
|
|
ldr r2, [r4, #8]
|
|
cmp r2, #0
|
|
beq _020E2C44
|
|
ldrb r0, [r2]
|
|
tst r0, #0x80
|
|
beq _020E2C88
|
|
_020E2C44:
|
|
mov r1, r4
|
|
add r0, r4, #0x18
|
|
bl sub_020E433C
|
|
mov r1, r4
|
|
bl sub_020E2AFC
|
|
ldr r0, [r4, #4]
|
|
cmp r0, #0
|
|
addeq sp, sp, #0xa0
|
|
moveq r0, #0xff
|
|
ldmeqia sp!, {r3, r4, r5, pc}
|
|
mov r1, r4
|
|
add r0, r4, #0x18
|
|
bl sub_020E4398
|
|
ldr r0, [r4, #8]
|
|
cmp r0, #0
|
|
beq _020E2C2C
|
|
b _020E2F58
|
|
_020E2C88:
|
|
and r0, r0, #0x1f
|
|
cmp r0, #0x13
|
|
addls pc, pc, r0, lsl #2
|
|
b _020E2F4C
|
|
_020E2C98: ; jump table
|
|
b _020E2F4C ; case 0
|
|
b _020E2F4C ; case 1
|
|
b _020E2CE8 ; case 2
|
|
b _020E2D00 ; case 3
|
|
b _020E2D20 ; case 4
|
|
b _020E2D38 ; case 5
|
|
b _020E2D60 ; case 6
|
|
b _020E2D80 ; case 7
|
|
b _020E2DA0 ; case 8
|
|
b _020E2DC8 ; case 9
|
|
b _020E2DF8 ; case 10
|
|
b _020E2E10 ; case 11
|
|
b _020E2E30 ; case 12
|
|
b _020E2E4C ; case 13
|
|
b _020E2F4C ; case 14
|
|
b _020E2E60 ; case 15
|
|
b _020E2E8C ; case 16
|
|
b _020E2ED8 ; case 17
|
|
b _020E2F0C ; case 18
|
|
b _020E2F38 ; case 19
|
|
_020E2CE8:
|
|
add r1, sp, #0x9c
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2D00:
|
|
add r1, sp, #0x94
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x98
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2D20:
|
|
add r1, sp, #0x90
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2D38:
|
|
add r1, sp, #0x84
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x88
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x8c
|
|
bl sub_020E2A0C
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2D60:
|
|
add r1, sp, #0x7c
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x80
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2D80:
|
|
add r1, sp, #0x74
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x78
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2DA0:
|
|
add r1, sp, #0x68
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x6c
|
|
bl sub_020E2980
|
|
add r1, sp, #0x70
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2DC8:
|
|
add r1, sp, #0x58
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x5c
|
|
bl sub_020E2980
|
|
add r1, sp, #0x60
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x64
|
|
bl sub_020E2A0C
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2DF8:
|
|
add r1, sp, #0x54
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2E10:
|
|
add r1, sp, #0x4c
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x50
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2E30:
|
|
add r1, sp, #0x44
|
|
add r0, r2, #5
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x48
|
|
bl sub_020E2980
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2E4C:
|
|
add r1, sp, #0x40
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2E60:
|
|
add r1, sp, #0x34
|
|
add r0, r2, #1
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x38
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x3c
|
|
bl sub_020E2980
|
|
ldr r1, [sp, #0x34]
|
|
add r0, r0, r1, lsl #2
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2E8C:
|
|
add r1, sp, #0x24
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x28
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
orr r2, r1, r5, lsl #24
|
|
add r1, sp, #0x2c
|
|
add r0, r0, #4
|
|
str r2, [sp, #0x30]
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2ED8:
|
|
add r1, sp, #0x14
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x1c
|
|
bl sub_020E2980
|
|
add r1, sp, #0x18
|
|
add r0, r0, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x20
|
|
bl sub_020E2980
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2F0C:
|
|
add r1, sp, #8
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0xc
|
|
add r0, r0, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x10
|
|
bl sub_020E2A0C
|
|
add r0, r0, #4
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2F38:
|
|
add r1, sp, #4
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
str r0, [r4, #8]
|
|
b _020E2F58
|
|
_020E2F4C:
|
|
add sp, sp, #0xa0
|
|
mov r0, #0xff
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
_020E2F58:
|
|
ldr r2, [r4, #8]
|
|
ldrb r0, [r2]
|
|
and r0, r0, #0x1f
|
|
cmp r0, #1
|
|
addne sp, sp, #0xa0
|
|
ldmneia sp!, {r3, r4, r5, pc}
|
|
add r5, sp, #0
|
|
_020E2F74:
|
|
mov r1, r5
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
ldr r1, [r4, #8]
|
|
ldr r0, [sp]
|
|
add r2, r1, r0
|
|
str r2, [r4, #8]
|
|
ldrb r0, [r2]
|
|
and r0, r0, #0x1f
|
|
cmp r0, #1
|
|
beq _020E2F74
|
|
add sp, sp, #0xa0
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_020E2C20
|
|
|
|
arm_func_start sub_020E2FA8
|
|
sub_020E2FA8: ; 0x020E2FA8
|
|
stmfd sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xa4
|
|
mov sb, r0
|
|
mov r8, r1
|
|
str r2, [sp]
|
|
_020E2FBC:
|
|
ldr r2, [r8, #8]
|
|
cmp r2, #0
|
|
bne _020E3004
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl sub_020E433C
|
|
mov r1, r8
|
|
bl sub_020E2AFC
|
|
ldr r0, [r8, #4]
|
|
cmp r0, #0
|
|
bne _020E2FEC
|
|
bl sub_020E415C
|
|
_020E2FEC:
|
|
mov r0, sb
|
|
mov r1, r8
|
|
bl sub_020E4398
|
|
ldr r2, [r8, #8]
|
|
cmp r2, #0
|
|
beq _020E2FBC
|
|
_020E3004:
|
|
ldrb r7, [r2]
|
|
and r0, r7, #0x1f
|
|
cmp r0, #0x13
|
|
addls pc, pc, r0, lsl #2
|
|
b _020E383C
|
|
_020E3018: ; jump table
|
|
b _020E383C ; case 0
|
|
b _020E3068 ; case 1
|
|
b _020E3088 ; case 2
|
|
b _020E30D4 ; case 3
|
|
b _020E3154 ; case 4
|
|
b _020E31B4 ; case 5
|
|
b _020E3238 ; case 6
|
|
b _020E32A8 ; case 7
|
|
b _020E3318 ; case 8
|
|
b _020E33C0 ; case 9
|
|
b _020E3474 ; case 10
|
|
b _020E34D0 ; case 11
|
|
b _020E3560 ; case 12
|
|
b _020E358C ; case 13
|
|
b _020E383C ; case 14
|
|
b _020E35D8 ; case 15
|
|
b _020E3614 ; case 16
|
|
b _020E36B8 ; case 17
|
|
b _020E3764 ; case 18
|
|
b _020E3828 ; case 19
|
|
_020E3068:
|
|
add r1, sp, #0xa0
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
ldr r1, [r8, #8]
|
|
ldr r0, [sp, #0xa0]
|
|
add r0, r1, r0
|
|
str r0, [r8, #8]
|
|
b _020E3840
|
|
_020E3088:
|
|
add r1, sp, #0x9c
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
mov r4, r0
|
|
ldrb r1, [r4]
|
|
ldrb r0, [r4, #1]
|
|
ldrb r2, [r4, #2]
|
|
ldrb r3, [r4, #3]
|
|
orr r0, r1, r0, lsl #8
|
|
orr r0, r0, r2, lsl #16
|
|
ldr r5, [sb, #0x18]
|
|
ldr r1, [sp, #0x9c]
|
|
orr r2, r0, r3, lsl #24
|
|
add r0, r5, r1
|
|
mvn r1, #0
|
|
blx r2
|
|
add r0, r4, #4
|
|
str r0, [r8, #8]
|
|
b _020E3840
|
|
_020E30D4:
|
|
add r1, sp, #0x94
|
|
add r0, r2, #1
|
|
and r4, r7, #0x40
|
|
bl sub_020E2980
|
|
add r1, sp, #0x98
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r2, r1, r5, lsl #24
|
|
add r4, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x94]
|
|
ldreqb r0, [r1, r0]
|
|
beq _020E3130
|
|
ldr r0, [sp, #0x94]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
and r0, r0, #0xff
|
|
_020E3130:
|
|
cmp r0, #0
|
|
beq _020E314C
|
|
ldr r3, [sb, #0x18]
|
|
ldr r0, [sp, #0x98]
|
|
mvn r1, #0
|
|
add r0, r3, r0
|
|
blx r2
|
|
_020E314C:
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E3154:
|
|
add r1, sp, #0x90
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r2, r1, r5, lsl #24
|
|
add r4, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x90]
|
|
ldreq r0, [r1, r0]
|
|
beq _020E31A4
|
|
ldr r0, [sp, #0x90]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
_020E31A4:
|
|
mvn r1, #0
|
|
blx r2
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E31B4:
|
|
add r1, sp, #0x84
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
add r1, sp, #0x88
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x8c
|
|
bl sub_020E2A0C
|
|
ldr r3, [sb, #0x18]
|
|
ldr r2, [sp, #0x84]
|
|
ldr r6, [sp, #0x88]
|
|
ldrb r5, [r0]
|
|
ldrb r4, [r0, #1]
|
|
ldr r1, [sp, #0x8c]
|
|
add r2, r3, r2
|
|
ldrb sl, [r0, #2]
|
|
orr r3, r5, r4, lsl #8
|
|
mla r4, r6, r1, r2
|
|
ldrb r2, [r0, #3]
|
|
orr r1, r3, sl, lsl #16
|
|
cmp r6, #0
|
|
orr r5, r1, r2, lsl #24
|
|
add fp, r0, #4
|
|
beq _020E3230
|
|
mvn sl, #0
|
|
_020E3214:
|
|
ldr r0, [sp, #0x8c]
|
|
mov r1, sl
|
|
sub r4, r4, r0
|
|
mov r0, r4
|
|
blx r5
|
|
subs r6, r6, #1
|
|
bne _020E3214
|
|
_020E3230:
|
|
str fp, [r8, #8]
|
|
b _020E3840
|
|
_020E3238:
|
|
add r1, sp, #0x7c
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x80
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r2, r1, r5, lsl #24
|
|
add r4, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x7c]
|
|
ldreq r3, [r1, r0]
|
|
beq _020E3290
|
|
ldr r0, [sp, #0x7c]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r3, [r0, #0x1c]
|
|
_020E3290:
|
|
ldr r0, [sp, #0x80]
|
|
mov r1, #0
|
|
add r0, r3, r0
|
|
blx r2
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E32A8:
|
|
add r1, sp, #0x74
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x78
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r2, r1, r5, lsl #24
|
|
add r4, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x74]
|
|
ldreq r3, [r1, r0]
|
|
beq _020E3300
|
|
ldr r0, [sp, #0x74]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r3, [r0, #0x1c]
|
|
_020E3300:
|
|
ldr r0, [sp, #0x78]
|
|
mvn r1, #0
|
|
add r0, r3, r0
|
|
blx r2
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E3318:
|
|
add r1, sp, #0x68
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x6c
|
|
bl sub_020E2980
|
|
add r1, sp, #0x70
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
orr r2, r1, r5, lsl #24
|
|
tst r7, #0x40
|
|
add r5, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x68]
|
|
ldreqsh r0, [r1, r0]
|
|
beq _020E3380
|
|
ldr r0, [sp, #0x68]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
mov r0, r0, lsl #0x10
|
|
mov r0, r0, asr #0x10
|
|
_020E3380:
|
|
cmp r0, #0
|
|
beq _020E33B8
|
|
cmp r4, #0
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x6c]
|
|
ldreq r3, [r1, r0]
|
|
beq _020E33A8
|
|
ldr r0, [sp, #0x6c]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r3, [r0, #0x1c]
|
|
_020E33A8:
|
|
ldr r0, [sp, #0x70]
|
|
mvn r1, #0
|
|
add r0, r3, r0
|
|
blx r2
|
|
_020E33B8:
|
|
str r5, [r8, #8]
|
|
b _020E3840
|
|
_020E33C0:
|
|
add r1, sp, #0x58
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x5c
|
|
bl sub_020E2980
|
|
add r1, sp, #0x60
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x64
|
|
bl sub_020E2A0C
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r5, r1, r5, lsl #24
|
|
add fp, r0, #4
|
|
beq _020E3424
|
|
ldr r1, [sp, #0x58]
|
|
ldr r0, [sp, #0x5c]
|
|
add r1, sb, r1, lsl #2
|
|
ldr r1, [r1, #0x1c]
|
|
b _020E3434
|
|
_020E3424:
|
|
ldr r2, [sb, #0x18]
|
|
ldr r1, [sp, #0x58]
|
|
ldr r0, [sp, #0x5c]
|
|
ldr r1, [r2, r1]
|
|
_020E3434:
|
|
add r4, r1, r0
|
|
ldr r6, [sp, #0x60]
|
|
ldr r0, [sp, #0x64]
|
|
cmp r6, #0
|
|
mla r4, r6, r0, r4
|
|
beq _020E346C
|
|
mvn sl, #0
|
|
_020E3450:
|
|
ldr r0, [sp, #0x64]
|
|
mov r1, sl
|
|
sub r4, r4, r0
|
|
mov r0, r4
|
|
blx r5
|
|
subs r6, r6, #1
|
|
bne _020E3450
|
|
_020E346C:
|
|
str fp, [r8, #8]
|
|
b _020E3840
|
|
_020E3474:
|
|
add r1, sp, #0x54
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r2, r1, r5, lsl #24
|
|
add r4, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x54]
|
|
ldreq r0, [r1, r0]
|
|
beq _020E34C4
|
|
ldr r0, [sp, #0x54]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
_020E34C4:
|
|
blx r2
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E34D0:
|
|
add r1, sp, #0x4c
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x50
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
tst r7, #0x40
|
|
orr r1, r1, r5, lsl #24
|
|
add r5, r0, #4
|
|
ldreq r2, [sb, #0x18]
|
|
ldreq r0, [sp, #0x4c]
|
|
ldreqb r0, [r2, r0]
|
|
beq _020E352C
|
|
ldr r0, [sp, #0x4c]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
and r0, r0, #0xff
|
|
_020E352C:
|
|
cmp r0, #0
|
|
beq _020E3558
|
|
cmp r4, #0
|
|
ldreq r2, [sb, #0x18]
|
|
ldreq r0, [sp, #0x50]
|
|
ldreq r0, [r2, r0]
|
|
beq _020E3554
|
|
ldr r0, [sp, #0x50]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
_020E3554:
|
|
blx r1
|
|
_020E3558:
|
|
str r5, [r8, #8]
|
|
b _020E3840
|
|
_020E3560:
|
|
ldr r0, [sp]
|
|
cmp r0, r2
|
|
addeq sp, sp, #0xa4
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
add r1, sp, #0x44
|
|
add r0, r2, #5
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x48
|
|
bl sub_020E2980
|
|
str r0, [r8, #8]
|
|
b _020E3840
|
|
_020E358C:
|
|
add r1, sp, #0x40
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
ldr r2, [sb, #0x18]
|
|
ldr r1, [sp, #0x40]
|
|
mov r4, r0
|
|
add r0, r2, r1
|
|
ldr r2, [r0, #8]
|
|
cmp r2, #0
|
|
beq _020E35D0
|
|
ldr r0, [r0, #0]
|
|
ldr r1, [sb, #4]
|
|
cmp r1, r0
|
|
streq r2, [sb, #8]
|
|
beq _020E35D0
|
|
mvn r1, #0
|
|
blx r2
|
|
_020E35D0:
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E35D8:
|
|
ldr r0, [sp]
|
|
cmp r0, r2
|
|
addeq sp, sp, #0xa4
|
|
ldmeqia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
add r1, sp, #0x34
|
|
add r0, r2, #1
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x38
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0x3c
|
|
bl sub_020E2980
|
|
ldr r1, [sp, #0x34]
|
|
add r0, r0, r1, lsl #2
|
|
str r0, [r8, #8]
|
|
b _020E3840
|
|
_020E3614:
|
|
add r1, sp, #0x24
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x28
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
orr r2, r1, r5, lsl #24
|
|
add r1, sp, #0x2c
|
|
add r0, r0, #4
|
|
str r2, [sp, #0x30]
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r2, r1, r5, lsl #24
|
|
add r4, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x24]
|
|
ldreq r5, [r1, r0]
|
|
beq _020E3698
|
|
ldr r0, [sp, #0x24]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r5, [r0, #0x1c]
|
|
_020E3698:
|
|
ldr r0, [sp, #0x28]
|
|
ldr r3, [sp, #0x30]
|
|
ldr r1, [sp, #0x2c]
|
|
add r0, r5, r0
|
|
add r1, r3, r1
|
|
blx r2
|
|
str r4, [r8, #8]
|
|
b _020E3840
|
|
_020E36B8:
|
|
add r1, sp, #0x14
|
|
add r0, r2, #1
|
|
and r5, r7, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x1c
|
|
bl sub_020E2980
|
|
ldrb r2, [r0], #1
|
|
add r1, sp, #0x18
|
|
and r4, r2, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x20
|
|
bl sub_020E2980
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r6, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r5, #0
|
|
orr r2, r1, r6, lsl #24
|
|
add r5, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0x14]
|
|
ldreq r0, [r1, r0]
|
|
beq _020E3728
|
|
ldr r0, [sp, #0x14]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
_020E3728:
|
|
cmp r4, #0
|
|
ldreq r3, [sb, #0x18]
|
|
ldreq r1, [sp, #0x18]
|
|
ldreq r4, [r3, r1]
|
|
beq _020E3748
|
|
ldr r1, [sp, #0x18]
|
|
add r1, sb, r1, lsl #2
|
|
ldr r4, [r1, #0x1c]
|
|
_020E3748:
|
|
ldr r3, [sp, #0x1c]
|
|
ldr r1, [sp, #0x20]
|
|
add r0, r0, r3
|
|
add r1, r4, r1
|
|
blx r2
|
|
str r5, [r8, #8]
|
|
b _020E3840
|
|
_020E3764:
|
|
add r1, sp, #8
|
|
add r0, r2, #1
|
|
and r4, r7, #0x20
|
|
bl sub_020E2980
|
|
ldrb r2, [r0], #1
|
|
add r1, sp, #0xc
|
|
and r6, r2, #0x20
|
|
bl sub_020E2980
|
|
add r1, sp, #0x10
|
|
bl sub_020E2A0C
|
|
ldrb r2, [r0]
|
|
ldrb r1, [r0, #1]
|
|
ldrb r3, [r0, #2]
|
|
ldrb r5, [r0, #3]
|
|
orr r1, r2, r1, lsl #8
|
|
orr r1, r1, r3, lsl #16
|
|
cmp r4, #0
|
|
orr r5, r1, r5, lsl #24
|
|
add fp, r0, #4
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #8]
|
|
ldreq r4, [r1, r0]
|
|
beq _020E37CC
|
|
ldr r0, [sp, #8]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r4, [r0, #0x1c]
|
|
_020E37CC:
|
|
cmp r6, #0
|
|
ldreq r1, [sb, #0x18]
|
|
ldreq r0, [sp, #0xc]
|
|
ldreq r0, [r1, r0]
|
|
beq _020E37EC
|
|
ldr r0, [sp, #0xc]
|
|
add r0, sb, r0, lsl #2
|
|
ldr r0, [r0, #0x1c]
|
|
_020E37EC:
|
|
ldr r1, [sp, #0x10]
|
|
add r4, r4, r0
|
|
bl _u32_div_f
|
|
movs r6, r0
|
|
beq _020E3820
|
|
mvn sl, #0
|
|
_020E3804:
|
|
ldr r0, [sp, #0x10]
|
|
mov r1, sl
|
|
sub r4, r4, r0
|
|
mov r0, r4
|
|
blx r5
|
|
subs r6, r6, #1
|
|
bne _020E3804
|
|
_020E3820:
|
|
str fp, [r8, #8]
|
|
b _020E3840
|
|
_020E3828:
|
|
add r1, sp, #4
|
|
add r0, r2, #1
|
|
bl sub_020E2980
|
|
str r0, [r8, #8]
|
|
b _020E3840
|
|
_020E383C:
|
|
bl sub_020E415C
|
|
_020E3840:
|
|
tst r7, #0x80
|
|
movne r0, #0
|
|
strne r0, [r8, #8]
|
|
b _020E2FBC
|
|
_020E3850:
|
|
.byte 0xA4, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8
|
|
arm_func_end sub_020E2FA8
|
|
|
|
arm_func_start sub_020E3858
|
|
sub_020E3858: ; 0x020E3858
|
|
stmfd sp!, {r4, r5, lr}
|
|
sub sp, sp, #0x8c
|
|
ldr r2, [r1, #0]
|
|
mov r4, r0
|
|
str r2, [sp, #4]
|
|
ldr r0, [r1, #4]
|
|
add ip, sp, #0x38
|
|
str r0, [sp, #8]
|
|
ldr r0, [r1, #8]
|
|
add lr, r4, #0x1c
|
|
str r0, [sp, #0xc]
|
|
ldr r0, [r1, #0xc]
|
|
mov r5, #5
|
|
str r0, [sp, #0x10]
|
|
ldr r0, [r1, #0x10]
|
|
str r0, [sp, #0x14]
|
|
ldr r0, [r1, #0x14]
|
|
str r0, [sp, #0x18]
|
|
ldr r0, [r4, #0]
|
|
str r0, [sp, #0x1c]
|
|
ldr r0, [r4, #4]
|
|
str r0, [sp, #0x20]
|
|
ldr r0, [r4, #8]
|
|
str r0, [sp, #0x24]
|
|
ldr r0, [r4, #0xc]
|
|
str r0, [sp, #0x28]
|
|
ldr r0, [r4, #0x10]
|
|
str r0, [sp, #0x2c]
|
|
ldr r0, [r4, #0x14]
|
|
str r0, [sp, #0x30]
|
|
ldr r0, [r4, #0x18]
|
|
str r0, [sp, #0x34]
|
|
_020E38D8:
|
|
ldmia lr!, {r0, r1, r2, r3}
|
|
stmia ip!, {r0, r1, r2, r3}
|
|
subs r5, r5, #1
|
|
bne _020E38D8
|
|
ldr r1, [lr]
|
|
add r0, sp, #4
|
|
str r1, [ip]
|
|
bl sub_020E2C04
|
|
add r5, sp, #4
|
|
_020E38FC:
|
|
cmp r0, #0x12
|
|
addls pc, pc, r0, lsl #2
|
|
b _020E3954
|
|
_020E3908: ; jump table
|
|
b _020E3960 ; case 0
|
|
b _020E3954 ; case 1
|
|
b _020E3960 ; case 2
|
|
b _020E3960 ; case 3
|
|
b _020E3960 ; case 4
|
|
b _020E3960 ; case 5
|
|
b _020E3960 ; case 6
|
|
b _020E3960 ; case 7
|
|
b _020E3960 ; case 8
|
|
b _020E3960 ; case 9
|
|
b _020E3960 ; case 10
|
|
b _020E3960 ; case 11
|
|
b _020E3960 ; case 12
|
|
b _020E396C ; case 13
|
|
b _020E3954 ; case 14
|
|
b _020E3960 ; case 15
|
|
b _020E3960 ; case 16
|
|
b _020E3960 ; case 17
|
|
b _020E3960 ; case 18
|
|
_020E3954:
|
|
add sp, sp, #0x8c
|
|
mov r0, #0
|
|
ldmia sp!, {r4, r5, pc}
|
|
_020E3960:
|
|
mov r0, r5
|
|
bl sub_020E2C20
|
|
b _020E38FC
|
|
_020E396C:
|
|
ldr r0, [sp, #0xc]
|
|
add r1, sp, #0
|
|
add r0, r0, #1
|
|
bl sub_020E2980
|
|
ldr ip, [sp, #0x34]
|
|
ldr r3, [sp]
|
|
mov r1, #0
|
|
add r0, ip, r3
|
|
ldr r2, [r0, #4]
|
|
str r2, [r4, #0]
|
|
ldr r2, [ip, r3]
|
|
str r2, [r4, #4]
|
|
str r1, [r4, #8]
|
|
str r0, [r4, #0xc]
|
|
add sp, sp, #0x8c
|
|
ldmia sp!, {r4, r5, pc}
|
|
arm_func_end sub_020E3858
|
|
|
|
arm_func_start sub_020E39AC
|
|
sub_020E39AC: ; 0x020E39AC
|
|
stmfd sp!, {r4, r5, r6, r7, r8, lr}
|
|
sub sp, sp, #8
|
|
mov r6, r1
|
|
ldr r1, [r6, #0]
|
|
mov r7, r0
|
|
cmp r1, #0
|
|
ldr r4, [r6, #0xc]
|
|
mov r5, #0
|
|
bls _020E3A24
|
|
add r8, sp, #0
|
|
_020E39D4:
|
|
ldrb r1, [r4]
|
|
ldrb r0, [r4, #1]
|
|
ldrb r2, [r4, #2]
|
|
ldrb r3, [r4, #3]
|
|
orr r0, r1, r0, lsl #8
|
|
orr r0, r0, r2, lsl #16
|
|
orr r1, r0, r3, lsl #24
|
|
mov r0, r7
|
|
mov r2, r8
|
|
str r1, [sp, #4]
|
|
bl __throw_catch_compare
|
|
cmp r0, #0
|
|
addne sp, sp, #8
|
|
movne r0, #1
|
|
ldmneia sp!, {r4, r5, r6, r7, r8, pc}
|
|
ldr r0, [r6, #0]
|
|
add r5, r5, #1
|
|
cmp r5, r0
|
|
add r4, r4, #4
|
|
blo _020E39D4
|
|
_020E3A24:
|
|
mov r0, #0
|
|
add sp, sp, #8
|
|
ldmia sp!, {r4, r5, r6, r7, r8, pc}
|
|
arm_func_end sub_020E39AC
|
|
|
|
arm_func_start __unexpected
|
|
__unexpected: ; 0x020E3A30
|
|
stmfd sp!, {r4, fp, lr}
|
|
sub sp, sp, #0x2c
|
|
mov fp, sp
|
|
str sp, [fp, #0x18]
|
|
ldr r4, [r0, #0x14]
|
|
bl sub_020E4174
|
|
b _020E3ABC
|
|
_020E3A4C:
|
|
.byte 0x1C, 0x10, 0x8B, 0xE2
|
|
.byte 0x01, 0x00, 0x84, 0xE2, 0xEC, 0xFB, 0xFF, 0xEB, 0x20, 0x10, 0x8B, 0xE2, 0xEA, 0xFB, 0xFF, 0xEB
|
|
.byte 0x24, 0x10, 0x8B, 0xE2, 0xC5, 0xFB, 0xFF, 0xEB, 0x28, 0x00, 0x8B, 0xE5, 0x08, 0x00, 0x9B, 0xE5
|
|
.byte 0x1C, 0x10, 0x8B, 0xE2, 0xCC, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A
|
|
.byte 0x9E, 0x02, 0x00, 0xEB, 0x3C, 0x00, 0x9F, 0xE5, 0x1C, 0x10, 0x8B, 0xE2, 0xC6, 0xFF, 0xFF, 0xEB
|
|
.byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x2C, 0x30, 0x9F, 0xE5, 0x2C, 0x00, 0x9F, 0xE5
|
|
.byte 0x2C, 0x20, 0x9F, 0xE5, 0x00, 0x10, 0x8B, 0xE2, 0x00, 0x30, 0x8B, 0xE5, 0x81, 0x02, 0x00, 0xEB
|
|
.byte 0x04, 0x00, 0x8B, 0xE2, 0xE9, 0x00, 0x00, 0xEB, 0x18, 0xD0, 0x9B, 0xE5
|
|
_020E3ABC:
|
|
bl sub_020E415C
|
|
add sp, fp, #0x2c
|
|
ldmia sp!, {r4, fp, pc}
|
|
_020E3AC8:
|
|
.byte 0xB8, 0x1B, 0x10, 0x02, 0xAC, 0x1B, 0x10, 0x02
|
|
.byte 0xD0, 0x1B, 0x10, 0x02, 0xD8, 0x3A, 0x0E, 0x02
|
|
arm_func_end __unexpected
|
|
|
|
arm_func_start sub_020E3AD8
|
|
sub_020E3AD8: ; 0x020E3AD8
|
|
bx lr
|
|
arm_func_end sub_020E3AD8
|
|
|
|
arm_func_start sub_020E3ADC
|
|
sub_020E3ADC: ; 0x020E3ADC
|
|
stmfd sp!, {r3, r4, r5, r6, r7, lr}
|
|
mov r4, r3
|
|
mov r5, r2
|
|
mov r2, r4
|
|
mov r7, r0
|
|
mov r6, r1
|
|
bl sub_020E2FA8
|
|
ldr r2, [r7, #0x18]
|
|
ldr r1, [r5, #8]
|
|
ldr r0, [r7, #4]
|
|
add r3, r2, r1
|
|
str r0, [r2, r1]
|
|
ldr r1, [r7, #0]
|
|
mov r0, r7
|
|
str r1, [r3, #4]
|
|
ldr r2, [r7, #8]
|
|
mov r1, r6
|
|
str r2, [r3, #8]
|
|
str r4, [r3, #0x14]
|
|
ldr r3, [r6, #0]
|
|
ldr r2, [r5, #4]
|
|
add r2, r3, r2
|
|
bl sub_020E4488
|
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
|
arm_func_end sub_020E3ADC
|
|
|
|
arm_func_start sub_020E3B3C
|
|
sub_020E3B3C: ; 0x020E3B3C
|
|
stmfd sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
|
sub sp, sp, #0xa4
|
|
mov r5, r1
|
|
ldr r1, [r5, #0]
|
|
mov r6, r0
|
|
str r1, [sp, #0x1c]
|
|
ldr r0, [r5, #4]
|
|
add r8, sp, #0x50
|
|
str r0, [sp, #0x20]
|
|
ldr r0, [r5, #8]
|
|
mov r4, r2
|
|
str r0, [sp, #0x24]
|
|
ldr r0, [r5, #0xc]
|
|
add sb, r6, #0x1c
|
|
str r0, [sp, #0x28]
|
|
ldr r0, [r5, #0x10]
|
|
mov r7, #5
|
|
str r0, [sp, #0x2c]
|
|
ldr r0, [r5, #0x14]
|
|
str r0, [sp, #0x30]
|
|
ldr r0, [r6, #0]
|
|
str r0, [sp, #0x34]
|
|
ldr r0, [r6, #4]
|
|
str r0, [sp, #0x38]
|
|
ldr r0, [r6, #8]
|
|
str r0, [sp, #0x3c]
|
|
ldr r0, [r6, #0xc]
|
|
str r0, [sp, #0x40]
|
|
ldr r0, [r6, #0x10]
|
|
str r0, [sp, #0x44]
|
|
ldr r0, [r6, #0x14]
|
|
str r0, [sp, #0x48]
|
|
ldr r0, [r6, #0x18]
|
|
str r0, [sp, #0x4c]
|
|
_020E3BC4:
|
|
ldmia sb!, {r0, r1, r2, r3}
|
|
stmia r8!, {r0, r1, r2, r3}
|
|
subs r7, r7, #1
|
|
bne _020E3BC4
|
|
ldr r1, [sb]
|
|
add r0, sp, #0x1c
|
|
str r1, [r8]
|
|
bl sub_020E2C04
|
|
add r7, sp, #0
|
|
add sl, sp, #4
|
|
add fp, sp, #8
|
|
add sb, sp, #0x14
|
|
add r8, sp, #0x18
|
|
_020E3BF8:
|
|
cmp r0, #0x13
|
|
addls pc, pc, r0, lsl #2
|
|
b _020E3CF8
|
|
_020E3C04: ; jump table
|
|
b _020E3D00 ; case 0
|
|
b _020E3CF8 ; case 1
|
|
b _020E3D00 ; case 2
|
|
b _020E3D00 ; case 3
|
|
b _020E3D00 ; case 4
|
|
b _020E3D00 ; case 5
|
|
b _020E3D00 ; case 6
|
|
b _020E3D00 ; case 7
|
|
b _020E3D00 ; case 8
|
|
b _020E3D00 ; case 9
|
|
b _020E3D00 ; case 10
|
|
b _020E3D00 ; case 11
|
|
b _020E3C54 ; case 12
|
|
b _020E3D00 ; case 13
|
|
b _020E3CF8 ; case 14
|
|
b _020E3CA8 ; case 15
|
|
b _020E3D00 ; case 16
|
|
b _020E3D00 ; case 17
|
|
b _020E3D00 ; case 18
|
|
b _020E3D00 ; case 19
|
|
_020E3C54:
|
|
ldr lr, [sp, #0x24]
|
|
mov r1, sb
|
|
ldrb r2, [lr, #1]
|
|
ldrb r0, [lr, #2]
|
|
ldrb r3, [lr, #3]
|
|
ldrb ip, [lr, #4]
|
|
orr r0, r2, r0, lsl #8
|
|
orr r0, r0, r3, lsl #16
|
|
orr r2, r0, ip, lsl #24
|
|
add r0, lr, #5
|
|
str r2, [sp, #0x10]
|
|
bl sub_020E2A0C
|
|
mov r1, r8
|
|
bl sub_020E2980
|
|
ldr r0, [r6, #0]
|
|
ldr r1, [sp, #0x10]
|
|
mov r2, r4
|
|
bl __throw_catch_compare
|
|
cmp r0, #0
|
|
beq _020E3D00
|
|
b _020E3D0C
|
|
_020E3CA8:
|
|
ldr r0, [sp, #0x24]
|
|
mov r1, r7
|
|
add r0, r0, #1
|
|
bl sub_020E2A0C
|
|
mov r1, sl
|
|
bl sub_020E2A0C
|
|
mov r1, fp
|
|
bl sub_020E2980
|
|
str r0, [sp, #0xc]
|
|
ldr r0, [r6, #0]
|
|
mov r1, r7
|
|
bl sub_020E39AC
|
|
cmp r0, #0
|
|
bne _020E3D00
|
|
ldr r3, [sp, #0x24]
|
|
mov r0, r6
|
|
mov r1, r5
|
|
mov r2, r7
|
|
bl sub_020E3ADC
|
|
b _020E3D00
|
|
_020E3CF8:
|
|
bl sub_020E415C
|
|
b _020E3D0C
|
|
_020E3D00:
|
|
add r0, sp, #0x1c
|
|
bl sub_020E2C20
|
|
b _020E3BF8
|
|
_020E3D0C:
|
|
ldr r0, [sp, #0x24]
|
|
add sp, sp, #0xa4
|
|
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
|
arm_func_end sub_020E3B3C
|
|
|
|
arm_func_start sub_020E3D18
|
|
sub_020E3D18: ; 0x020E3D18
|
|
stmfd sp!, {r3, lr}
|
|
ldr lr, [r0, #0x18]
|
|
ldr ip, [r0, #4]
|
|
add r3, lr, r1
|
|
str ip, [lr, r1]
|
|
ldr r1, [r0, #0]
|
|
str r1, [r3, #4]
|
|
ldr r1, [r0, #8]
|
|
str r1, [r3, #8]
|
|
ldr r1, [r0, #0]
|
|
ldrb r1, [r1]
|
|
cmp r1, #0x2a
|
|
ldrne r0, [r0, #4]
|
|
addne r0, r0, r2
|
|
strne r0, [r3, #0xc]
|
|
ldmneia sp!, {r3, pc}
|
|
add r1, r3, #0x10
|
|
str r1, [r3, #0xc]
|
|
ldr r0, [r0, #4]
|
|
ldr r0, [r0, #0]
|
|
add r0, r0, r2
|
|
str r0, [r3, #0x10]
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end sub_020E3D18
|
|
|
|
arm_func_start sub_020E3D74
|
|
sub_020E3D74: ; 0x020E3D74
|
|
stmfd sp!, {r3, r4, r5, lr}
|
|
sub sp, sp, #0x28
|
|
mov r5, r0
|
|
ldr r0, [r5, #0x10]
|
|
add r1, sp, #0x10
|
|
bl sub_020E2AFC
|
|
ldr r0, [sp, #0x14]
|
|
cmp r0, #0
|
|
bne _020E3D9C
|
|
bl sub_020E415C
|
|
_020E3D9C:
|
|
add r1, sp, #0x10
|
|
mov r0, r5
|
|
bl sub_020E4398
|
|
ldr r0, [r5, #0]
|
|
cmp r0, #0
|
|
movne r0, #0
|
|
strne r0, [r5, #0xc]
|
|
bne _020E3DD8
|
|
add r1, sp, #0x10
|
|
mov r0, r5
|
|
bl sub_020E3858
|
|
str r0, [r5, #0xc]
|
|
cmp r0, #0
|
|
bne _020E3DD8
|
|
bl sub_020E415C
|
|
_020E3DD8:
|
|
add r1, sp, #0x10
|
|
add r2, sp, #0
|
|
mov r0, r5
|
|
bl sub_020E3B3C
|
|
mov r4, r0
|
|
ldrb r1, [r4, #1]
|
|
ldrb r0, [r4, #2]
|
|
ldrb r2, [r4, #3]
|
|
ldrb r3, [r4, #4]
|
|
orr r0, r1, r0, lsl #8
|
|
orr r0, r0, r2, lsl #16
|
|
orr r2, r0, r3, lsl #24
|
|
add r1, sp, #8
|
|
add r0, r4, #5
|
|
str r2, [sp, #4]
|
|
bl sub_020E2A0C
|
|
add r1, sp, #0xc
|
|
bl sub_020E2980
|
|
add r1, sp, #0x10
|
|
mov r0, r5
|
|
mov r2, r4
|
|
bl sub_020E2FA8
|
|
ldr r1, [sp, #0xc]
|
|
ldr r2, [sp]
|
|
mov r0, r5
|
|
bl sub_020E3D18
|
|
ldr r3, [sp, #0x10]
|
|
ldr r2, [sp, #8]
|
|
mov r0, r5
|
|
add r1, sp, #0x10
|
|
add r2, r3, r2
|
|
bl sub_020E4488
|
|
add sp, sp, #0x28
|
|
ldmia sp!, {r3, r4, r5, pc}
|
|
arm_func_end sub_020E3D74
|
|
|
|
arm_func_start __end__catch
|
|
__end__catch: ; 0x020E3E60
|
|
stmfd sp!, {r3, lr}
|
|
ldr r1, [r0, #0]
|
|
cmp r1, #0
|
|
ldrne r2, [r0, #8]
|
|
cmpne r2, #0
|
|
ldmeqia sp!, {r3, pc}
|
|
mov r0, r1
|
|
mvn r1, #0
|
|
blx r2
|
|
ldmia sp!, {r3, pc}
|
|
arm_func_end __end__catch
|
|
|
|
arm_func_start sub_020E3E88
|
|
sub_020E3E88: ; 0x020E3E88
|
|
stmfd sp!, {r4, lr}
|
|
mov r4, r0
|
|
bl sub_020E3F94
|
|
mov r0, r4
|
|
ldmia sp!, {r4, pc}
|
|
arm_func_end sub_020E3E88
|
|
|
|
arm_func_start sub_020E3E9C
|
|
sub_020E3E9C: ; 0x020E3E9C
|
|
ldr r0, _020E3EA4 ; =0x02101B80
|
|
bx lr
|
|
; .align 2, 0
|
|
_020E3EA4: .word Unk_02101B80
|
|
arm_func_end sub_020E3E9C
|
|
|
|
|
|
.section .exception, 4
|
|
|
|
|
|
.global Unk_020E45CC
|
|
Unk_020E45CC: ; 0x020E45CC
|
|
.byte 0x0, 0x3, 0x1, 0xB0
|
|
.space 0x4
|
|
|
|
.global Unk_020E45D4
|
|
Unk_020E45D4: ; 0x020E45D4
|
|
.byte 0x0, 0xFF, 0x1, 0xC8
|
|
.byte 0x58, 0x1D, 0xB8, 0x1A, 0x1, 0x8C, 0x50, 0x1A, 0x0, 0x8E
|
|
.space 0x2
|
|
|
|
.global Unk_020E45E4
|
|
Unk_020E45E4: ; 0x020E45E4
|
|
.byte 0x0, 0x3, 0x1, 0x98
|
|
.space 0x4
|
|
|
|
.global Unk_020E45EC
|
|
Unk_020E45EC: ; 0x020E45EC
|
|
.byte 0x40, 0x81, 0x70, 0x0, 0x30, 0x0, 0x16, 0x20, 0xB0, 0x24, 0x0, 0x8C
|
|
.space 0x4
|
|
.byte 0x38, 0x8, 0x8D, 0x8
|
|
|
|
.global Unk_020E4600
|
|
Unk_020E4600: ; 0x020E4600
|
|
.byte 0x0, 0xF, 0x30, 0x38, 0x80, 0xE, 0x0, 0x8E
|
|
|
|
.global Unk_020E4608
|
|
Unk_020E4608: ; 0x020E4608
|
|
.byte 0x0, 0xFF, 0x1, 0xC8
|
|
.space 0x4
|
|
|
|
|
|
.data
|
|
|
|
|
|
.global Unk_02101B74
|
|
Unk_02101B74: ; 0x02101B74
|
|
.word 0x02101CA8
|
|
.word Unk_02101B90
|
|
.word Unk_021019C8
|
|
|
|
.global Unk_02101B80
|
|
Unk_02101B80: ; 0x02101B80
|
|
.asciz "bad_exception"
|
|
.space 0x2
|
|
|
|
.global Unk_02101B90
|
|
Unk_02101B90: ; 0x02101B90
|
|
.asciz "St13bad_exception"
|
|
.space 0x2
|
|
|
|
.global Unk_02101BA4
|
|
Unk_02101BA4: ; 0x02101BA4
|
|
.space 0x4
|
|
.word Unk_02101B74
|
|
.word sub_020E3AD8
|
|
.word sub_020E3E88
|
|
.word sub_020E3E9C
|
|
|
|
.global Unk_02101BB8
|
|
Unk_02101BB8: ; 0x02101BB8
|
|
.asciz "!std::bad_exception!!"
|
|
.space 0x2
|
|
|
|
.global Unk_02101BD0
|
|
Unk_02101BD0: ; 0x02101BD0
|
|
.asciz "!std::exception!!std::bad_exception!!"
|
|
.space 0x2
|
|
|