From ee153c6b30a348e226c5de6e7e74371a88dba85b Mon Sep 17 00:00:00 2001 From: AnonymousRandomPerson Date: Sun, 6 Aug 2023 17:47:05 -0400 Subject: [PATCH] Compiled arm7 --- asm/main.s | 312 - lib/asm/crt0.s | 318 + lib/asm/include/crt0.inc | 3 + rom.rsf | 6 +- sub/Makefile | 1 + sub/arm7.lsf | 11 + sub/arm7.sha1 | 1 + sub/asm/arm7.s | 10756 ++++++++++++++++++++----- sub/asm/{macros => include}/arm7.inc | 43 + sub/asm/macros.inc | 1 + 10 files changed, 9240 insertions(+), 2212 deletions(-) create mode 100644 sub/arm7.lsf create mode 100644 sub/arm7.sha1 rename sub/asm/{macros => include}/arm7.inc (74%) create mode 100644 sub/asm/macros.inc diff --git a/asm/main.s b/asm/main.s index a8e14b24..dd57d4fc 100644 --- a/asm/main.s +++ b/asm/main.s @@ -3,318 +3,6 @@ .text - arm_func_start _start -_start: ; 0x02000800 - mov ip, #0x4000000 - str ip, [ip, #0x208] -_02000808: - ldrh r0, [ip, #6] - cmp r0, #0 - bne _02000808 - bl sub_02000AB0 - mov r0, #0x13 - msr cpsr_c, r0 - ldr r0, _02000930 ; =0x027E0000 - add r0, r0, #0x3fc0 - mov sp, r0 - mov r0, #0x12 - msr cpsr_c, r0 - ldr r0, _02000930 ; =0x027E0000 - add r0, r0, #0x3fc0 - sub r0, r0, #0x40 - sub sp, r0, #4 - tst sp, #4 - beq _02000850 - b _02000854 -_02000850: - sub sp, sp, #4 -_02000854: - ldr r1, _02000934 ; =0x00000800 - sub r1, r0, r1 - mov r0, #0x1f - msr cpsr_fsxc, r0 - sub sp, r1, #4 - mov r0, #0 - ldr r1, _02000930 ; =0x027E0000 - mov r2, #0x4000 - bl sub_02000954 - mov r0, #0 - ldr r1, _02000938 ; =0x05000000 - mov r2, #0x400 - bl sub_02000954 - mov r0, #0x200 - ldr r1, _0200093C ; =0x07000000 - mov r2, #0x400 - bl sub_02000954 - ldr r1, _02000940 ; =_start_ModuleParams - ldr r0, [r1, #0x14] - bl MIi_UncompressBackward - bl do_autoload - ldr r0, _02000940 ; =_start_ModuleParams - ldr r1, [r0, #0xc] - ldr r2, [r0, #0x10] - mov r3, r1 - mov r0, #0 -_020008BC: - cmp r1, r2 - blo _020008C8 - b _020008CC -_020008C8: - str r0, [r1], #4 -_020008CC: - blo _020008BC - bic r1, r3, #0x1f -_020008D4: - mcr p15, 0, r0, c7, c10, 4 - mcr p15, 0, r1, c7, c5, 1 - mcr p15, 0, r1, c7, c14, 1 - add r1, r1, #0x20 - cmp r1, r2 - blt _020008D4 - ldr r1, _02000944 ; =0x027FFF9C - str r0, [r1] - ldr r1, _02000930 ; =0x027E0000 - add r1, r1, #0x3fc0 - add r1, r1, #0x3c - ldr r0, _02000948 ; =0x01FF95E8 - str r0, [r1] - bl sub_020907F0 - bl sub_02000B98 - bl sub_020908A8 - ldr r1, _0200094C ; =0x02000C6C - ldr lr, _02000950 ; =0xFFFF0000 - tst sp, #4 - bne _02000928 - b _0200092C -_02000928: - sub sp, sp, #4 -_0200092C: - bx r1 - .align 2, 0 -_02000930: .word 0x027E0000 -_02000934: .word 0x00000800 -_02000938: .word 0x05000000 -_0200093C: .word 0x07000000 -_02000940: .word _start_ModuleParams -_02000944: .word 0x027FFF9C -_02000948: .word 0x01FF95E8 -_0200094C: .word 0x02000C6C -_02000950: .word 0xFFFF0000 - arm_func_end _start - - arm_func_start sub_02000954 -sub_02000954: ; 0x02000954 - add ip, r1, r2 -_02000958: - cmp r1, ip - blt _02000964 - b _02000968 -_02000964: - stmia r1!, {r0} -_02000968: - blt _02000958 - bx lr - arm_func_end sub_02000954 - - arm_func_start MIi_UncompressBackward -MIi_UncompressBackward: ; 0x02000970 - cmp r0, #0 - beq _02000A18 - stmdb sp!, {r4, r5, r6, r7} - ldmdb r0, {r1, r2} - add r2, r0, r2 - sub r3, r0, r1, lsr #24 - bic r1, r1, #0xff000000 - sub r1, r0, r1 - mov r4, r2 -_02000994: - cmp r3, r1 - ble _020009F4 - ldrb r5, [r3, #-1]! - mov r6, #8 -_020009A4: - subs r6, r6, #1 - blt _02000994 - tst r5, #0x80 - bne _020009C0 - ldrb r0, [r3, #-1]! - strb r0, [r2, #-1]! - b _020009E8 -_020009C0: - ldrb ip, [r3, #-1]! - ldrb r7, [r3, #-1]! - orr r7, r7, ip, lsl #8 - bic r7, r7, #0xf000 - add r7, r7, #2 - add ip, ip, #0x20 -_020009D8: - ldrb r0, [r2, r7] - strb r0, [r2, #-1]! - subs ip, ip, #0x10 - bge _020009D8 -_020009E8: - cmp r3, r1 - mov r5, r5, lsl #1 - bgt _020009A4 -_020009F4: - mov r0, #0 - bic r3, r1, #0x1f -_020009FC: - mcr p15, 0, r0, c7, c10, 4 - mcr p15, 0, r3, c7, c5, 1 - mcr p15, 0, r3, c7, c14, 1 - add r3, r3, #0x20 - cmp r3, r4 - blt _020009FC - ldmia sp!, {r4, r5, r6, r7} -_02000A18: - bx lr - arm_func_end MIi_UncompressBackward - - arm_func_start do_autoload -do_autoload: ; 0x02000A1C - ldr r0, _02000AA8 ; =_start_ModuleParams - ldr r1, [r0] - ldr r2, [r0, #4] - ldr r3, [r0, #8] -_02000A2C: - cmp r1, r2 - beq _02000AA4 - ldr r5, [r1], #4 - ldr r7, [r1], #4 - add r6, r5, r7 - mov r4, r5 -_02000A44: - cmp r4, r6 - bmi _02000A50 - b _02000A54 -_02000A50: - ldr r7, [r3], #4 -_02000A54: - bmi _02000A5C - b _02000A60 -_02000A5C: - str r7, [r4], #4 -_02000A60: - bmi _02000A44 - ldr r7, [r1], #4 - add r6, r4, r7 - mov r7, #0 -_02000A70: - cmp r4, r6 - blo _02000A7C - b _02000A80 -_02000A7C: - str r7, [r4], #4 -_02000A80: - blo _02000A70 - bic r4, r5, #0x1f -_02000A88: - mcr p15, 0, r7, c7, c10, 4 - mcr p15, 0, r4, c7, c5, 1 - mcr p15, 0, r4, c7, c14, 1 - add r4, r4, #0x20 - cmp r4, r6 - blt _02000A88 - b _02000A2C -_02000AA4: - b _start_AutoloadDoneCallback - .align 2, 0 -_02000AA8: .word _start_ModuleParams - arm_func_end do_autoload - - arm_func_start _start_AutoloadDoneCallback -_start_AutoloadDoneCallback: - bx lr - arm_func_end _start_AutoloadDoneCallback - - arm_func_start sub_02000AB0 -sub_02000AB0: ; 0x02000AB0 - mrc p15, 0, r0, c1, c0, 0 - ldr r1, _02000B68 ; =0x000F9005 - bic r0, r0, r1 - mcr p15, 0, r0, c1, c0, 0 - mov r0, #0 - mcr p15, 0, r0, c7, c5, 0 - mcr p15, 0, r0, c7, c6, 0 - mcr p15, 0, r0, c7, c10, 4 - ldr r0, _02000B6C ; =0x04000033 - mcr p15, 0, r0, c6, c0, 0 - ldr r0, _02000B70 ; =0x0200002D - mcr p15, 0, r0, c6, c1, 0 - ldr r0, _02000B74 ; =0x027E0021 - mcr p15, 0, r0, c6, c2, 0 - ldr r0, _02000B78 ; =0x08000035 - mcr p15, 0, r0, c6, c3, 0 - ldr r0, _02000B7C ; =0x027E0000 - orr r0, r0, #0x1a - orr r0, r0, #1 - mcr p15, 0, r0, c6, c4, 0 - ldr r0, _02000B80 ; =0x0100002F - mcr p15, 0, r0, c6, c5, 0 - ldr r0, _02000B84 ; =0xFFFF001D - mcr p15, 0, r0, c6, c6, 0 - ldr r0, _02000B88 ; =0x027FF017 - mcr p15, 0, r0, c6, c7, 0 - mov r0, #0x20 - mcr p15, 0, r0, c9, c1, 1 - ldr r0, _02000B7C ; =0x027E0000 - orr r0, r0, #0xa - mcr p15, 0, r0, c9, c1, 0 - mov r0, #0x42 - mcr p15, 0, r0, c2, c0, 1 - mov r0, #0x42 - mcr p15, 0, r0, c2, c0, 0 - mov r0, #2 - mcr p15, 0, r0, c3, c0, 0 - ldr r0, _02000B8C ; =0x05100011 - mcr p15, 0, r0, c5, c0, 3 - ldr r0, _02000B90 ; =0x15111011 - mcr p15, 0, r0, c5, c0, 2 - mrc p15, 0, r0, c1, c0, 0 - ldr r1, _02000B94 ; =0x0005707D - orr r0, r0, r1 - mcr p15, 0, r0, c1, c0, 0 - bx lr - .align 2, 0 -_02000B68: .word 0x000F9005 -_02000B6C: .word 0x04000033 -_02000B70: .word 0x0200002D -_02000B74: .word 0x027E0021 -_02000B78: .word 0x08000035 -_02000B7C: .word 0x027E0000 -_02000B80: .word 0x0100002F -_02000B84: .word 0xFFFF001D -_02000B88: .word 0x027FF017 -_02000B8C: .word 0x05100011 -_02000B90: .word 0x15111011 -_02000B94: .word 0x0005707D - arm_func_end sub_02000AB0 - - arm_func_start sub_02000B98 -sub_02000B98: ; 0x02000B98 - bx lr - arm_func_end sub_02000B98 - - arm_func_start OSi_ReferSymbol -OSi_ReferSymbol: ; 0x02000B9C - bx lr - arm_func_end OSi_ReferSymbol -_start_ModuleParams: - .byte 0xE0, 0x73, 0x0B, 0x02, 0xF8, 0x73, 0x0B, 0x02, 0x80, 0x33, 0x0B, 0x02, 0x80, 0x33, 0x0B, 0x02 - .byte 0x80, 0xCA, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x34, 0x75, 0x02, 0x04, 0x21, 0x06, 0xC0, 0xDE - .byte 0xDE, 0xC0, 0x06, 0x21, 0x5B, 0x53, 0x44, 0x4B, 0x2B, 0x4E, 0x49, 0x4E, 0x54, 0x45, 0x4E, 0x44 - .byte 0x4F, 0x3A, 0x42, 0x41, 0x43, 0x4B, 0x55, 0x50, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x53, 0x44, 0x4B - .byte 0x2B, 0x55, 0x42, 0x49, 0x51, 0x55, 0x49, 0x54, 0x4F, 0x55, 0x53, 0x3A, 0x43, 0x50, 0x53, 0x5D - .byte 0x00, 0x00, 0x00, 0x00, 0x5B, 0x53, 0x44, 0x4B, 0x2B, 0x4E, 0x49, 0x4E, 0x54, 0x45, 0x4E, 0x44 - .byte 0x4F, 0x3A, 0x57, 0x69, 0x46, 0x69, 0x32, 0x2E, 0x31, 0x2E, 0x33, 0x30, 0x30, 0x30, 0x33, 0x2E - .byte 0x30, 0x37, 0x30, 0x39, 0x32, 0x30, 0x30, 0x32, 0x32, 0x39, 0x5D, 0x00, 0x5B, 0x53, 0x44, 0x4B - .byte 0x2B, 0x55, 0x42, 0x49, 0x51, 0x55, 0x49, 0x54, 0x4F, 0x55, 0x53, 0x3A, 0x53, 0x53, 0x4C, 0x5D - .byte 0x00, 0x00, 0x00, 0x00, 0x5B, 0x53, 0x44, 0x4B, 0x2B, 0x4E, 0x49, 0x4E, 0x54, 0x45, 0x4E, 0x44 - .byte 0x4F, 0x3A, 0x44, 0x57, 0x43, 0x33, 0x2E, 0x31, 0x2E, 0x33, 0x30, 0x30, 0x30, 0x34, 0x2E, 0x32 - .byte 0x30, 0x30, 0x38, 0x31, 0x31, 0x30, 0x34, 0x2E, 0x31, 0x37, 0x30, 0x30, 0x5F, 0x44, 0x57, 0x43 - .byte 0x5F, 0x33, 0x5F, 0x31, 0x5F, 0x50, 0x4C, 0x55, 0x53, 0x34, 0x5D, 0x00 - arm_func_start NitroMain NitroMain: ; 0x02000C6C stmdb sp!, {r4, lr} diff --git a/lib/asm/crt0.s b/lib/asm/crt0.s index e69de29b..f7b30d92 100644 --- a/lib/asm/crt0.s +++ b/lib/asm/crt0.s @@ -0,0 +1,318 @@ + .include "asm/macros.inc" + .include "crt0.inc" + + .text + + arm_func_start _start +_start: ; 0x02000800 + mov ip, #0x4000000 + str ip, [ip, #0x208] +_02000808: + ldrh r0, [ip, #6] + cmp r0, #0 + bne _02000808 + bl sub_02000AB0 + mov r0, #0x13 + msr cpsr_c, r0 + ldr r0, _02000930 ; =0x027E0000 + add r0, r0, #0x3fc0 + mov sp, r0 + mov r0, #0x12 + msr cpsr_c, r0 + ldr r0, _02000930 ; =0x027E0000 + add r0, r0, #0x3fc0 + sub r0, r0, #0x40 + sub sp, r0, #4 + tst sp, #4 + beq _02000850 + b _02000854 +_02000850: + sub sp, sp, #4 +_02000854: + ldr r1, _02000934 ; =0x00000800 + sub r1, r0, r1 + mov r0, #0x1f + msr cpsr_fsxc, r0 + sub sp, r1, #4 + mov r0, #0 + ldr r1, _02000930 ; =0x027E0000 + mov r2, #0x4000 + bl sub_02000954 + mov r0, #0 + ldr r1, _02000938 ; =0x05000000 + mov r2, #0x400 + bl sub_02000954 + mov r0, #0x200 + ldr r1, _0200093C ; =0x07000000 + mov r2, #0x400 + bl sub_02000954 + ldr r1, _02000940 ; =_start_ModuleParams + ldr r0, [r1, #0x14] + bl MIi_UncompressBackward + bl do_autoload + ldr r0, _02000940 ; =_start_ModuleParams + ldr r1, [r0, #0xc] + ldr r2, [r0, #0x10] + mov r3, r1 + mov r0, #0 +_020008BC: + cmp r1, r2 + blo _020008C8 + b _020008CC +_020008C8: + str r0, [r1], #4 +_020008CC: + blo _020008BC + bic r1, r3, #0x1f +_020008D4: + mcr p15, 0, r0, c7, c10, 4 + mcr p15, 0, r1, c7, c5, 1 + mcr p15, 0, r1, c7, c14, 1 + add r1, r1, #0x20 + cmp r1, r2 + blt _020008D4 + ldr r1, _02000944 ; =0x027FFF9C + str r0, [r1] + ldr r1, _02000930 ; =0x027E0000 + add r1, r1, #0x3fc0 + add r1, r1, #0x3c + ldr r0, _02000948 ; =0x01FF95E8 + str r0, [r1] + bl sub_020907F0 + bl sub_02000B98 + bl sub_020908A8 + ldr r1, _0200094C ; =0x02000C6C + ldr lr, _02000950 ; =0xFFFF0000 + tst sp, #4 + bne _02000928 + b _0200092C +_02000928: + sub sp, sp, #4 +_0200092C: + bx r1 + .align 2, 0 +_02000930: .word 0x027E0000 +_02000934: .word 0x00000800 +_02000938: .word 0x05000000 +_0200093C: .word 0x07000000 +_02000940: .word _start_ModuleParams +_02000944: .word 0x027FFF9C +_02000948: .word 0x01FF95E8 +_0200094C: .word 0x02000C6C +_02000950: .word 0xFFFF0000 + arm_func_end _start + + arm_func_start sub_02000954 +sub_02000954: ; 0x02000954 + add ip, r1, r2 +_02000958: + cmp r1, ip + blt _02000964 + b _02000968 +_02000964: + stmia r1!, {r0} +_02000968: + blt _02000958 + bx lr + arm_func_end sub_02000954 + + arm_func_start MIi_UncompressBackward +MIi_UncompressBackward: ; 0x02000970 + cmp r0, #0 + beq _02000A18 + stmdb sp!, {r4, r5, r6, r7} + ldmdb r0, {r1, r2} + add r2, r0, r2 + sub r3, r0, r1, lsr #24 + bic r1, r1, #0xff000000 + sub r1, r0, r1 + mov r4, r2 +_02000994: + cmp r3, r1 + ble _020009F4 + ldrb r5, [r3, #-1]! + mov r6, #8 +_020009A4: + subs r6, r6, #1 + blt _02000994 + tst r5, #0x80 + bne _020009C0 + ldrb r0, [r3, #-1]! + strb r0, [r2, #-1]! + b _020009E8 +_020009C0: + ldrb ip, [r3, #-1]! + ldrb r7, [r3, #-1]! + orr r7, r7, ip, lsl #8 + bic r7, r7, #0xf000 + add r7, r7, #2 + add ip, ip, #0x20 +_020009D8: + ldrb r0, [r2, r7] + strb r0, [r2, #-1]! + subs ip, ip, #0x10 + bge _020009D8 +_020009E8: + cmp r3, r1 + mov r5, r5, lsl #1 + bgt _020009A4 +_020009F4: + mov r0, #0 + bic r3, r1, #0x1f +_020009FC: + mcr p15, 0, r0, c7, c10, 4 + mcr p15, 0, r3, c7, c5, 1 + mcr p15, 0, r3, c7, c14, 1 + add r3, r3, #0x20 + cmp r3, r4 + blt _020009FC + ldmia sp!, {r4, r5, r6, r7} +_02000A18: + bx lr + arm_func_end MIi_UncompressBackward + + arm_func_start do_autoload +do_autoload: ; 0x02000A1C + ldr r0, _02000AA8 ; =_start_ModuleParams + ldr r1, [r0] + ldr r2, [r0, #4] + ldr r3, [r0, #8] +_02000A2C: + cmp r1, r2 + beq _02000AA4 + ldr r5, [r1], #4 + ldr r7, [r1], #4 + add r6, r5, r7 + mov r4, r5 +_02000A44: + cmp r4, r6 + bmi _02000A50 + b _02000A54 +_02000A50: + ldr r7, [r3], #4 +_02000A54: + bmi _02000A5C + b _02000A60 +_02000A5C: + str r7, [r4], #4 +_02000A60: + bmi _02000A44 + ldr r7, [r1], #4 + add r6, r4, r7 + mov r7, #0 +_02000A70: + cmp r4, r6 + blo _02000A7C + b _02000A80 +_02000A7C: + str r7, [r4], #4 +_02000A80: + blo _02000A70 + bic r4, r5, #0x1f +_02000A88: + mcr p15, 0, r7, c7, c10, 4 + mcr p15, 0, r4, c7, c5, 1 + mcr p15, 0, r4, c7, c14, 1 + add r4, r4, #0x20 + cmp r4, r6 + blt _02000A88 + b _02000A2C +_02000AA4: + b _start_AutoloadDoneCallback + .align 2, 0 +_02000AA8: .word _start_ModuleParams + arm_func_end do_autoload + + arm_func_start _start_AutoloadDoneCallback +_start_AutoloadDoneCallback: + bx lr + arm_func_end _start_AutoloadDoneCallback + + arm_func_start sub_02000AB0 +sub_02000AB0: ; 0x02000AB0 + mrc p15, 0, r0, c1, c0, 0 + ldr r1, _02000B68 ; =0x000F9005 + bic r0, r0, r1 + mcr p15, 0, r0, c1, c0, 0 + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 + mcr p15, 0, r0, c7, c6, 0 + mcr p15, 0, r0, c7, c10, 4 + ldr r0, _02000B6C ; =0x04000033 + mcr p15, 0, r0, c6, c0, 0 + ldr r0, _02000B70 ; =0x0200002D + mcr p15, 0, r0, c6, c1, 0 + ldr r0, _02000B74 ; =0x027E0021 + mcr p15, 0, r0, c6, c2, 0 + ldr r0, _02000B78 ; =0x08000035 + mcr p15, 0, r0, c6, c3, 0 + ldr r0, _02000B7C ; =0x027E0000 + orr r0, r0, #0x1a + orr r0, r0, #1 + mcr p15, 0, r0, c6, c4, 0 + ldr r0, _02000B80 ; =0x0100002F + mcr p15, 0, r0, c6, c5, 0 + ldr r0, _02000B84 ; =0xFFFF001D + mcr p15, 0, r0, c6, c6, 0 + ldr r0, _02000B88 ; =0x027FF017 + mcr p15, 0, r0, c6, c7, 0 + mov r0, #0x20 + mcr p15, 0, r0, c9, c1, 1 + ldr r0, _02000B7C ; =0x027E0000 + orr r0, r0, #0xa + mcr p15, 0, r0, c9, c1, 0 + mov r0, #0x42 + mcr p15, 0, r0, c2, c0, 1 + mov r0, #0x42 + mcr p15, 0, r0, c2, c0, 0 + mov r0, #2 + mcr p15, 0, r0, c3, c0, 0 + ldr r0, _02000B8C ; =0x05100011 + mcr p15, 0, r0, c5, c0, 3 + ldr r0, _02000B90 ; =0x15111011 + mcr p15, 0, r0, c5, c0, 2 + mrc p15, 0, r0, c1, c0, 0 + ldr r1, _02000B94 ; =0x0005707D + orr r0, r0, r1 + mcr p15, 0, r0, c1, c0, 0 + bx lr + .align 2, 0 +_02000B68: .word 0x000F9005 +_02000B6C: .word 0x04000033 +_02000B70: .word 0x0200002D +_02000B74: .word 0x027E0021 +_02000B78: .word 0x08000035 +_02000B7C: .word 0x027E0000 +_02000B80: .word 0x0100002F +_02000B84: .word 0xFFFF001D +_02000B88: .word 0x027FF017 +_02000B8C: .word 0x05100011 +_02000B90: .word 0x15111011 +_02000B94: .word 0x0005707D + arm_func_end sub_02000AB0 + + arm_func_start sub_02000B98 +sub_02000B98: ; 0x02000B98 + bx lr + arm_func_end sub_02000B98 + + arm_func_start OSi_ReferSymbol +OSi_ReferSymbol: ; 0x02000B9C + bx lr + arm_func_end OSi_ReferSymbol + + .public _start_ModuleParams +_start_ModuleParams: + .byte 0xE0, 0x73, 0x0B, 0x02, 0xF8, 0x73, 0x0B, 0x02, 0x80, 0x33, 0x0B, 0x02, 0x80, 0x33, 0x0B, 0x02 + .byte 0x80, 0xCA, 0x2B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x34, 0x75, 0x02, 0x04, 0x21, 0x06, 0xC0, 0xDE + .byte 0xDE, 0xC0, 0x06, 0x21, 0x5B, 0x53, 0x44, 0x4B, 0x2B, 0x4E, 0x49, 0x4E, 0x54, 0x45, 0x4E, 0x44 + .byte 0x4F, 0x3A, 0x42, 0x41, 0x43, 0x4B, 0x55, 0x50, 0x5D, 0x00, 0x00, 0x00, 0x5B, 0x53, 0x44, 0x4B + .byte 0x2B, 0x55, 0x42, 0x49, 0x51, 0x55, 0x49, 0x54, 0x4F, 0x55, 0x53, 0x3A, 0x43, 0x50, 0x53, 0x5D + .byte 0x00, 0x00, 0x00, 0x00, 0x5B, 0x53, 0x44, 0x4B, 0x2B, 0x4E, 0x49, 0x4E, 0x54, 0x45, 0x4E, 0x44 + .byte 0x4F, 0x3A, 0x57, 0x69, 0x46, 0x69, 0x32, 0x2E, 0x31, 0x2E, 0x33, 0x30, 0x30, 0x30, 0x33, 0x2E + .byte 0x30, 0x37, 0x30, 0x39, 0x32, 0x30, 0x30, 0x32, 0x32, 0x39, 0x5D, 0x00, 0x5B, 0x53, 0x44, 0x4B + .byte 0x2B, 0x55, 0x42, 0x49, 0x51, 0x55, 0x49, 0x54, 0x4F, 0x55, 0x53, 0x3A, 0x53, 0x53, 0x4C, 0x5D + .byte 0x00, 0x00, 0x00, 0x00, 0x5B, 0x53, 0x44, 0x4B, 0x2B, 0x4E, 0x49, 0x4E, 0x54, 0x45, 0x4E, 0x44 + .byte 0x4F, 0x3A, 0x44, 0x57, 0x43, 0x33, 0x2E, 0x31, 0x2E, 0x33, 0x30, 0x30, 0x30, 0x34, 0x2E, 0x32 + .byte 0x30, 0x30, 0x38, 0x31, 0x31, 0x30, 0x34, 0x2E, 0x31, 0x37, 0x30, 0x30, 0x5F, 0x44, 0x57, 0x43 + .byte 0x5F, 0x33, 0x5F, 0x31, 0x5F, 0x50, 0x4C, 0x55, 0x53, 0x34, 0x5D, 0x00 diff --git a/lib/asm/include/crt0.inc b/lib/asm/include/crt0.inc index e69de29b..b7ab45aa 100644 --- a/lib/asm/include/crt0.inc +++ b/lib/asm/include/crt0.inc @@ -0,0 +1,3 @@ +#pragma once +.public sub_020907F0 +.public sub_020908A8 \ No newline at end of file diff --git a/rom.rsf b/rom.rsf index 3ede81b3..59a4f782 100644 --- a/rom.rsf +++ b/rom.rsf @@ -8,9 +8,9 @@ Arm9 Arm7 { - Static $(BUILD_DIR)/arm7.sbin - OverlayDefs $(BUILD_DIR)/arm7.sbin - Nef $(BUILD_DIR)/arm7.nef + Static sub/build/arm7.sbin + OverlayDefs sub/build/arm7.sbin + Nef sub/build/arm7.nef } Property diff --git a/sub/Makefile b/sub/Makefile index e73a8349..4ea2c045 100644 --- a/sub/Makefile +++ b/sub/Makefile @@ -3,6 +3,7 @@ BUILD_DIR := build # all paths referring up from BUILD_DIR must be relative. BACK_REL := .. TOOLSDIR := ../tools +NEFNAME := arm7 MWCCVER := 2.0/sp2p3 PROC := arm7tdmi PROC_S := arm4t diff --git a/sub/arm7.lsf b/sub/arm7.lsf new file mode 100644 index 00000000..511741eb --- /dev/null +++ b/sub/arm7.lsf @@ -0,0 +1,11 @@ +Static arm7 +{ + Address 0x02000000 + StackSize 1024 1024 +} + +Autoload MAIN +{ + Address 0x027E0000 + Object asm/arm7.o +} \ No newline at end of file diff --git a/sub/arm7.sha1 b/sub/arm7.sha1 new file mode 100644 index 00000000..c0672a6d --- /dev/null +++ b/sub/arm7.sha1 @@ -0,0 +1 @@ +4ec4674a344b4186c2a0aa64a5c20d3c63062554 *build/arm7.sbin diff --git a/sub/asm/arm7.s b/sub/asm/arm7.s index bf2d1575..de9f90e1 100644 --- a/sub/asm/arm7.s +++ b/sub/asm/arm7.s @@ -1,13 +1,13 @@ - .include "asm/function.inc" - .include "arm7.inc" + .include "asm/macros.inc" + .include "asm/include/arm7.inc" .text arm_func_start sub_02000000 -sub_02000000: @ 0x02000000 +sub_02000000: ; 0x02000000 mov ip, #0x4000000 str ip, [ip, #0x208] - ldr r1, _020000E4 @ =0x023801E8 + ldr r1, _020000E4 ; =0x023801E8 mov r0, #0x3800000 cmp r0, r1 bpl _0200001C @@ -15,37 +15,37 @@ sub_02000000: @ 0x02000000 _0200001C: mov r1, r0 _02000020: - ldr r2, _020000E8 @ =0x0380FF00 + ldr r2, _020000E8 ; =0x0380FF00 mov r0, #0 _02000028: cmp r1, r2 blt _02000034 b _02000038 _02000034: - stm r1!, {r0} + stmia r1!, {r0} _02000038: blt _02000028 mov r0, #0x13 msr cpsr_c, r0 - ldr sp, _020000EC @ =0x0380FFC0 + ldr sp, _020000EC ; =0x0380FFC0 mov r0, #0x12 msr cpsr_c, r0 - ldr r0, _020000F0 @ =0x0380FF80 + ldr r0, _020000F0 ; =0x0380FF80 mov sp, r0 - ldr r1, _020000F4 @ =0x00000400 + ldr r1, _020000F4 ; =0x00000400 sub r1, r0, r1 mov r0, #0x1f msr cpsr_fsxc, r0 sub sp, r1, #4 - ldr r0, _020000F8 @ =0x023FE940 - ldr r1, _020000FC @ =0x027FFA80 + ldr r0, _020000F8 ; =0x023FE940 + ldr r1, _020000FC ; =0x027FFA80 add r2, r1, #0x160 _02000078: ldr r3, [r0], #4 str r3, [r1], #4 cmp r1, r2 bmi _02000078 - ldr r0, _02000100 @ =0x023FE904 + ldr r0, _02000100 ; =0x023FE904 add r2, r1, #0x20 _02000090: ldr r3, [r0], #4 @@ -53,7 +53,7 @@ _02000090: cmp r1, r2 bmi _02000090 bl sub_02000118 - ldr r0, _02000104 @ =0x023801D0 + ldr r0, _02000104 ; =0x023801D0 ldr r1, [r0, #0xc] ldr r2, [r0, #0x10] mov r0, #0 @@ -66,26 +66,26 @@ _020000C0: _020000C4: blo _020000B4 bl sub_0200018C - ldr r1, _02000108 @ =0x0380FFFC - ldr r0, _0200010C @ =0x037FB488 + ldr r1, _02000108 ; =0x0380FFFC + ldr r0, _0200010C ; =0x037FB488 str r0, [r1] - ldr r1, _02000110 @ =FUN_037F8000 - ldr lr, _02000114 @ =0xFFFF0000 + ldr r1, _02000110 ; =sub_037F8000 + ldr lr, _02000114 ; =0xFFFF0000 bx r1 .align 2, 0 -_020000E4: .4byte 0x023801E8 -_020000E8: .4byte 0x0380FF00 -_020000EC: .4byte 0x0380FFC0 -_020000F0: .4byte 0x0380FF80 -_020000F4: .4byte 0x00000400 -_020000F8: .4byte 0x023FE940 -_020000FC: .4byte 0x027FFA80 -_02000100: .4byte 0x023FE904 -_02000104: .4byte 0x023801D0 -_02000108: .4byte 0x0380FFFC -_0200010C: .4byte 0x037FB488 -_02000110: .4byte FUN_037F8000 -_02000114: .4byte 0xFFFF0000 +_020000E4: .word 0x023801E8 +_020000E8: .word 0x0380FF00 +_020000EC: .word 0x0380FFC0 +_020000F0: .word 0x0380FF80 +_020000F4: .word 0x00000400 +_020000F8: .word 0x023FE940 +_020000FC: .word 0x027FFA80 +_02000100: .word 0x023FE904 +_02000104: .word 0x023801D0 +_02000108: .word 0x0380FFFC +_0200010C: .word 0x037FB488 +_02000110: .word sub_037F8000 +_02000114: .word 0xFFFF0000 arm_func_end sub_02000000 arm_func_start sub_02000118 @@ -160,78 +160,326 @@ _020001CC: .word 0x027FFFFA arm_func_end sub_0200018C _020001D0: .byte 0x68, 0x70, 0x3A, 0x02, 0x80, 0x70, 0x3A, 0x02, 0xE8, 0x01, 0x38, 0x02, 0xE8, 0x01, 0x38, 0x02 - .byte 0xE8, 0x01, 0x38, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x4F, 0x2D, 0xE9, 0x21, 0xDE, 0x4D, 0xE2 - .byte 0x77, 0x12, 0x00, 0xEB, 0xD4, 0x0F, 0x00, 0xEB, 0x04, 0x20, 0x8D, 0xE2, 0x20, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x65, 0xF5, 0xBF, 0xEB, 0x04, 0x00, 0x9D, 0xE5, 0x10, 0x20, 0x8D, 0xE2 - .byte 0x80, 0x01, 0xA0, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x01, 0x1C, 0xA0, 0xE3, 0x5F, 0xF5, 0xBF, 0xEB - .byte 0x04, 0x00, 0x9D, 0xE5, 0x11, 0x2E, 0x8D, 0xE2, 0x01, 0x0C, 0x80, 0xE2, 0x01, 0x1C, 0xA0, 0xE3 - .byte 0x5A, 0xF5, 0xBF, 0xEB, 0x1D, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x20, 0x8D, 0xE2 - .byte 0x00, 0x60, 0xA0, 0xE3, 0x55, 0xF5, 0xBF, 0xEB, 0x00, 0x00, 0xDD, 0xE5, 0xFF, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0xA0, 0x01, 0x02, 0x00, 0x00, 0x0A, 0x50, 0x00, 0x10, 0xE3, 0x01, 0x00, 0xA0, 0x13 - .byte 0x06, 0x00, 0xA0, 0x01, 0x00, 0x00, 0x50, 0xE3, 0x32, 0x00, 0x00, 0x0A, 0xFE, 0x00, 0x00, 0xEB - .byte 0x00, 0x80, 0xA0, 0xE1, 0x01, 0xB0, 0xA0, 0xE3, 0x40, 0x70, 0x08, 0xE2, 0x00, 0xA0, 0xA0, 0xE3 - .byte 0x10, 0x50, 0x8D, 0xE2, 0x0B, 0x40, 0xA0, 0xE1, 0x27, 0x00, 0x00, 0xEA, 0xA8, 0x03, 0x9F, 0xE5 - .byte 0x0A, 0x94, 0x85, 0xE0, 0x09, 0x10, 0xA0, 0xE1, 0x70, 0x20, 0xA0, 0xE3, 0xEC, 0x00, 0x00, 0xEB - .byte 0x09, 0x20, 0xA0, 0xE1, 0xB2, 0x17, 0xD2, 0xE1, 0x01, 0x00, 0x50, 0xE1, 0x1B, 0x00, 0x00, 0x1A - .byte 0xB0, 0x07, 0xD2, 0xE1, 0x80, 0x00, 0x50, 0xE3, 0x18, 0x00, 0x00, 0x2A, 0x78, 0x03, 0x9F, 0xE5 - .byte 0x8A, 0x20, 0xA0, 0xE3, 0x74, 0x10, 0x89, 0xE2, 0xE1, 0x00, 0x00, 0xEB, 0x09, 0x20, 0xA0, 0xE1 - .byte 0xBE, 0x1F, 0xD2, 0xE1, 0x01, 0x00, 0x50, 0xE1, 0x10, 0x00, 0x00, 0x1A, 0xB6, 0x17, 0xD2, 0xE1 - .byte 0x75, 0x00, 0xD2, 0xE5, 0x14, 0x00, 0x11, 0xE1, 0x0C, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x18, 0xE1 - .byte 0xB4, 0x16, 0xD9, 0x11, 0x07, 0x00, 0x00, 0x12, 0x07, 0x10, 0xC1, 0x13, 0x00, 0x00, 0x81, 0x11 - .byte 0xB4, 0x06, 0xC9, 0x11, 0x0A, 0x04, 0x85, 0xE0, 0xB6, 0x07, 0xD0, 0xE1, 0x00, 0x00, 0xE0, 0xE1 - .byte 0x00, 0x00, 0x17, 0xE1, 0x03, 0x60, 0xA0, 0x13, 0x2E, 0x00, 0x00, 0x1A, 0x1B, 0x6A, 0x86, 0xE1 - .byte 0x01, 0x00, 0x8A, 0xE2, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0xA8, 0xA0, 0xE1, 0x02, 0x00, 0x5A, 0xE3 - .byte 0xD5, 0xFF, 0xFF, 0x3A, 0x18, 0x00, 0x00, 0xEA, 0xCB, 0x00, 0x00, 0xEB, 0x40, 0x00, 0x10, 0xE3 - .byte 0x03, 0x60, 0xA0, 0x13, 0x23, 0x00, 0x00, 0x1A, 0xEC, 0x82, 0x9F, 0xE5, 0x00, 0x90, 0xA0, 0xE3 - .byte 0x10, 0x70, 0x8D, 0xE2, 0x01, 0x40, 0xA0, 0xE3, 0x70, 0x50, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x20, 0xA0, 0xE1, 0x09, 0x14, 0x87, 0xE0, 0xB9, 0x00, 0x00, 0xEB, 0x09, 0x24, 0x87, 0xE0 - .byte 0xB2, 0x17, 0xD2, 0xE1, 0x01, 0x00, 0x50, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0xB0, 0x07, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x50, 0xE3, 0x14, 0x69, 0x86, 0x31, 0x01, 0x00, 0x89, 0xE2, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x98, 0xA0, 0xE1, 0x02, 0x00, 0x59, 0xE3, 0xEF, 0xFF, 0xFF, 0x3A, 0x01, 0x00, 0x56, 0xE3 - .byte 0x02, 0x00, 0x56, 0x13, 0x0B, 0x00, 0x00, 0x0A, 0x03, 0x00, 0x56, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xB0, 0x18, 0xDD, 0xE1, 0x01, 0x0C, 0x8D, 0xE2, 0x01, 0x10, 0x81, 0xE2, 0xB0, 0x08, 0xD0, 0xE1 - .byte 0x7F, 0x10, 0x01, 0xE2, 0x00, 0x00, 0x51, 0xE1, 0x02, 0x60, 0xA0, 0x03, 0x01, 0x60, 0xA0, 0x13 - .byte 0x00, 0x00, 0x00, 0xEA, 0x00, 0x60, 0xA0, 0xE3, 0x03, 0x00, 0x56, 0xE3, 0x04, 0x00, 0x00, 0xBA - .byte 0x58, 0x12, 0x9F, 0xE5, 0x00, 0x00, 0xE0, 0xE3, 0x74, 0x20, 0xA0, 0xE3, 0x71, 0x17, 0x00, 0xEB - .byte 0x2E, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x56, 0xE3, 0x28, 0x00, 0x00, 0x0A, 0x40, 0x02, 0x9F, 0xE5 - .byte 0x06, 0x14, 0xA0, 0xE1, 0x00, 0x00, 0x8D, 0xE0, 0x06, 0x04, 0xD0, 0xE7, 0x0A, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x00, 0x00, 0x2A, 0x10, 0x00, 0x8D, 0xE2, 0x0A, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x01, 0x10, 0x80, 0xE0, 0x02, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x81, 0xE0, 0xBC, 0x2F, 0x40, 0xE1 - .byte 0x01, 0x30, 0x43, 0xE2, 0xE6, 0x00, 0x51, 0xE5, 0x00, 0x00, 0x53, 0xE1, 0xF9, 0xFF, 0xFF, 0xCA - .byte 0x00, 0x02, 0x9F, 0xE5, 0x06, 0x14, 0xA0, 0xE1, 0x00, 0x00, 0x8D, 0xE0, 0x06, 0x04, 0xD0, 0xE7 - .byte 0x1A, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x2A, 0x10, 0x00, 0x8D, 0xE2, 0x1A, 0x30, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x01, 0x10, 0x80, 0xE0, 0x02, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x81, 0xE0 - .byte 0xB6, 0x2E, 0x40, 0xE1, 0x01, 0x30, 0x43, 0xE2, 0xB0, 0x00, 0x51, 0xE5, 0x00, 0x00, 0x53, 0xE1 - .byte 0xF9, 0xFF, 0xFF, 0xCA, 0xB4, 0x11, 0x9F, 0xE5, 0x10, 0x20, 0x8D, 0xE2, 0x01, 0x00, 0x46, 0xE2 - .byte 0x00, 0x04, 0x82, 0xE0, 0x74, 0x20, 0xA0, 0xE3, 0x4D, 0x17, 0x00, 0xEB, 0x03, 0x00, 0x00, 0xEA - .byte 0x98, 0x11, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x74, 0x20, 0xA0, 0xE3, 0x41, 0x17, 0x00, 0xEB - .byte 0x08, 0x20, 0x8D, 0xE2, 0x36, 0x00, 0xA0, 0xE3, 0x06, 0x10, 0xA0, 0xE3, 0xB7, 0xF4, 0xBF, 0xEB - .byte 0x78, 0x41, 0x9F, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x74, 0x10, 0x84, 0xE2, 0x06, 0x20, 0xA0, 0xE3 - .byte 0x8F, 0x17, 0x00, 0xEB, 0x02, 0x20, 0x8D, 0xE2, 0x3C, 0x00, 0xA0, 0xE3, 0x02, 0x10, 0xA0, 0xE3 - .byte 0xAE, 0xF4, 0xBF, 0xEB, 0xB2, 0x00, 0xDD, 0xE1, 0x80, 0x07, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x31, 0x3C, 0x00, 0xEB, 0xBA, 0x07, 0xC4, 0xE1, 0xE7, 0x17, 0x00, 0xEB, 0x08, 0x00, 0xA0, 0xE3 - .byte 0xDD, 0x11, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xDF, 0x11, 0x00, 0xEB - .byte 0x00, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0xA0, 0xE3 - .byte 0xB9, 0x12, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xD2, 0x11, 0x00, 0xEB - .byte 0x04, 0x20, 0x40, 0xE0, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x45, 0x17, 0x00, 0xEB - .byte 0x04, 0x10, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0x0A, 0x12, 0x00, 0xEB, 0x08, 0x00, 0xA0, 0xE3 - .byte 0xC9, 0x11, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xCB, 0x11, 0x00, 0xEB - .byte 0x00, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3, 0xD0, 0x12, 0x00, 0xEB - .byte 0x00, 0x40, 0xB0, 0xE1, 0x00, 0x00, 0x00, 0x5A, 0xB6, 0x16, 0x00, 0xEB, 0x04, 0x10, 0xA0, 0xE1 - .byte 0x08, 0x00, 0xA0, 0xE3, 0x93, 0x12, 0x00, 0xEB, 0x04, 0x10, 0xA0, 0xE1, 0x08, 0x00, 0xA0, 0xE3 - .byte 0xEF, 0x12, 0x00, 0xEB, 0x21, 0x0C, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x2A, 0xAD, 0x16, 0x00, 0xEB - .byte 0x06, 0x00, 0xA0, 0xE3, 0xCD, 0x1A, 0x00, 0xEB, 0x7E, 0x18, 0x00, 0xEB, 0x98, 0x10, 0x9F, 0xE5 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xFA, 0x0C, 0x00, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x45, 0x0D, 0x00, 0xEB - .byte 0x88, 0x30, 0x9F, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB0, 0x10, 0xD3, 0xE1 - .byte 0x81, 0x2F, 0x83, 0xE2, 0x08, 0x10, 0x81, 0xE3, 0xB0, 0x10, 0xC3, 0xE1, 0xB0, 0x10, 0xD2, 0xE1 - .byte 0xB0, 0x00, 0xC2, 0xE1, 0x3A, 0x16, 0x00, 0xEB, 0x00, 0x00, 0xE0, 0xE3, 0x83, 0x28, 0x00, 0xEB - .byte 0x0F, 0x00, 0xA0, 0xE3, 0xB3, 0x28, 0x00, 0xEB, 0x0C, 0x00, 0xA0, 0xE3, 0x2A, 0xF6, 0xBF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0x89, 0x33, 0x00, 0xEB, 0x02, 0x00, 0xA0, 0xE3, 0x12, 0x2D, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE3, 0x11, 0x00, 0x00, 0xEB, 0x5F, 0x16, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x72, 0x38, 0x00, 0xEB, 0x6B, 0x16, 0x00, 0xEB - .byte 0xFE, 0x38, 0x00, 0xEB, 0x9A, 0x2C, 0x00, 0xEB, 0xF5, 0xFF, 0xFF, 0xEA, 0xFF, 0xFF, 0x00, 0x00 - .byte 0x80, 0xFC, 0x7F, 0x02, 0x2A, 0xFF, 0xFF, 0xFF, 0x60, 0xFF, 0xFF, 0xFF, 0xBC, 0x84, 0x7F, 0x03 - .byte 0x04, 0x00, 0x00, 0x04, 0x00, 0xC0, 0x9F, 0xE5, 0x1C, 0xFF, 0x2F, 0xE1, 0x05, 0x38, 0x80, 0x03 + .byte 0xE8, 0x01, 0x38, 0x02, 0x00, 0x00, 0x00, 0x00 + + arm_func_start sub_020001E8 +sub_020001E8: ; 0x020001E8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x210 + bl sub_02004BD4 + bl sub_0200414C + add r2, sp, #4 + mov r0, #0x20 + mov r1, #2 + bl sub_00FFD7A0 + ldr r0, [sp, #4] + add r2, sp, #0x10 + mov r0, r0, lsl #3 + str r0, [sp, #4] + mov r1, #0x100 + bl sub_00FFD7A0 + ldr r0, [sp, #4] + add r2, sp, #0x110 + add r0, r0, #0x100 + mov r1, #0x100 + bl sub_00FFD7A0 + mov r0, #0x1d + mov r1, #1 + add r2, sp, #0 + mov r6, #0 + bl sub_00FFD7A0 + ldrb r0, [sp] + cmp r0, #0xff + moveq r0, r6 + beq _02000264 + tst r0, #0x50 + movne r0, #1 + moveq r0, r6 +_02000264: + cmp r0, #0 + beq _02000338 + bl sub_0200066C + mov r8, r0 + mov fp, #1 + and r7, r8, #0x40 + mov sl, #0 + add r5, sp, #0x10 + mov r4, fp + b _0200032C +_0200028C: + ldr r0, _0200063C ; =0x0000FFFF + add sb, r5, sl, lsl #8 + mov r1, sb + mov r2, #0x70 + bl sub_02000654 + mov r2, sb + ldrh r1, [r2, #0x72] + cmp r0, r1 + bne _02000320 + ldrh r0, [r2, #0x70] + cmp r0, #0x80 + bhs _02000320 + ldr r0, _0200063C ; =0x0000FFFF + mov r2, #0x8a + add r1, sb, #0x74 + bl sub_02000654 + mov r2, sb + ldrh r1, [r2, #0xfe] + cmp r0, r1 + bne _02000320 + ldrh r1, [r2, #0x76] + ldrb r0, [r2, #0x75] + tst r1, r4, lsl r0 + beq _02000320 + 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 _020003D8 + orr r6, r6, fp, lsl sl +_02000320: + add r0, sl, #1 + mov r0, r0, lsl #0x10 + mov sl, r0, lsr #0x10 +_0200032C: + cmp sl, #2 + blo _0200028C + b _0200039C +_02000338: + bl sub_0200066C + tst r0, #0x40 + movne r6, #3 + bne _020003D8 + ldr r8, _0200063C ; =0x0000FFFF + mov sb, #0 + add r7, sp, #0x10 + mov r4, #1 + mov r5, #0x70 +_0200035C: + mov r0, r8 + mov r2, r5 + add r1, r7, sb, lsl #8 + bl sub_02000654 + add r2, r7, sb, lsl #8 + ldrh r1, [r2, #0x72] + cmp r0, r1 + bne _02000388 + ldrh r0, [r2, #0x70] + cmp r0, #0x80 + orrlo r6, r6, r4, lsl sb +_02000388: + add r0, sb, #1 + mov r0, r0, lsl #0x10 + mov sb, r0, lsr #0x10 + cmp sb, #2 + blo _0200035C +_0200039C: + cmp r6, #1 + cmpne r6, #2 + beq _020003D8 + cmp r6, #3 + bne _020003D4 + 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 _020003D8 +_020003D4: + mov r6, #0 +_020003D8: + cmp r6, #3 + blt _020003F4 + ldr r1, _02000640 ; =0x027FFC80 + mvn r0, #0 + mov r2, #0x74 + bl sub_020061B8 + b _020004B0 +_020003F4: + cmp r6, #0 + beq _020004A0 + ldr r0, _02000644 ; =0xFFFFFF2A + mov r1, r6, lsl #8 + add r0, sp, r0 + ldrb r0, [r0, r6, lsl #8] + cmp r0, #0xa + bhs _02000440 + add r0, sp, #0x10 + mov r3, #0xa + mov r2, #0 + add r1, r0, r1 + b _02000434 +_02000428: + add r0, r1, r3, lsl #1 + strh r2, [r0, #-0xfc] + sub r3, r3, #1 +_02000434: + ldrb r0, [r1, #-0xe6] + cmp r3, r0 + bgt _02000428 +_02000440: + ldr r0, _02000648 ; =0xFFFFFF60 + mov r1, r6, lsl #8 + add r0, sp, r0 + ldrb r0, [r0, r6, lsl #8] + cmp r0, #0x1a + bhs _02000484 + add r0, sp, #0x10 + mov r3, #0x1a + mov r2, #0 + add r1, r0, r1 + b _02000478 +_0200046C: + add r0, r1, r3, lsl #1 + strh r2, [r0, #-0xe6] + sub r3, r3, #1 +_02000478: + ldrb r0, [r1, #-0xb0] + cmp r3, r0 + bgt _0200046C +_02000484: + ldr r1, _02000640 ; =0x027FFC80 + add r2, sp, #0x10 + sub r0, r6, #1 + add r0, r2, r0, lsl #8 + mov r2, #0x74 + bl sub_020061D4 + b _020004B0 +_020004A0: + ldr r1, _02000640 ; =0x027FFC80 + mov r0, #0 + mov r2, #0x74 + bl sub_020061B8 +_020004B0: + add r2, sp, #8 + mov r0, #0x36 + mov r1, #6 + bl sub_00FFD7A0 + ldr r4, _02000640 ; =0x027FFC80 + add r0, sp, #8 + add r1, r4, #0x74 + mov r2, #6 + bl sub_02006314 + add r2, sp, #2 + mov r0, #0x3c + mov r1, #2 + bl sub_00FFD7A0 + ldrh r0, [sp, #2] + mov r0, r0, lsl #0xf + mov r0, r0, lsr #0x10 + bl sub_0200F5BC + strh r0, [r4, #0x7a] + bl sub_0200649C + mov r0, #8 + bl sub_02004C7C + mov r4, r0 + mov r0, #8 + bl sub_02004C90 + mov r1, r0 + mov r2, r4 + mov r0, #8 + mov r3, #1 + bl sub_0200500C + mov r4, r0 + mov r0, #8 + bl sub_02004C7C + sub r2, r0, r4 + mov r0, r4 + mov r1, #0 + bl sub_02006258 + mov r1, r4 + mov r0, #8 + bl sub_02004D78 + mov r0, #8 + bl sub_02004C7C + mov r4, r0 + mov r0, #8 + bl sub_02004C90 + mov r1, r0 + mov r2, r4 + mov r0, #8 + bl sub_020050B4 + movs r4, r0 + bpl _0200057C + bl sub_02006058 +_0200057C: + mov r1, r4 + mov r0, #8 + bl sub_02004FD8 + mov r1, r4 + mov r0, #8 + bl sub_02005154 + cmp r0, #0x2100 + bhs _020005A0 + bl sub_02006058 +_020005A0: + mov r0, #6 + bl sub_020070E0 + bl sub_020067A8 + ldr r1, _0200064C ; =0x037F84BC + mov r0, #1 + bl sub_020039A4 + mov r0, #1 + bl sub_02003AD8 + ldr r3, _02000650 ; =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 sub_02005ED4 + mvn r0, #0 + bl sub_0200A800 + mov r0, #0xf + bl sub_0200A8C8 + mov r0, #0xc + bl sub_00FFDEAC + mov r0, r4 + bl sub_0200D430 + mov r0, #2 + bl sub_0200BA5C + mov r4, #0 +_02000614: + bl sub_02000660 + bl sub_02005F9C + cmp r0, #0 + beq _02000630 + mov r0, r4 + bl sub_0200E7F8 + bl sub_02005FE0 +_02000630: + bl sub_0200EA30 + bl sub_0200B8A4 + b _02000614 + .align 2, 0 +_0200063C: .word 0x0000FFFF +_02000640: .word 0x027FFC80 +_02000644: .word 0xFFFFFF2A +_02000648: .word 0xFFFFFF60 +_0200064C: .word 0x037F84BC +_02000650: .word 0x04000004 + arm_func_end sub_020001E8 + + arm_func_start sub_02000654 +sub_02000654: ; 0x02000654 + ldr ip, _0200065C ; =sub_03803804 + bx ip + .align 2, 0 +_0200065C: .word sub_03803804 + arm_func_end sub_02000654 arm_func_start sub_02000660 sub_02000660: ; 0x02000660 @@ -240,25 +488,95 @@ sub_02000660: ; 0x02000660 .align 2, 0 _02000668: .word sub_038037D2 arm_func_end sub_02000660 -_0200066C: - .byte 0x2C, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xD1, 0xE5, 0x80, 0x00, 0x51, 0xE3, 0x40, 0x00, 0x80, 0x03 - .byte 0x00, 0x08, 0xA0, 0x01, 0x20, 0x08, 0xA0, 0x01, 0x1E, 0xFF, 0x2F, 0x01, 0x40, 0x00, 0x51, 0xE3 - .byte 0x80, 0x00, 0x80, 0x03, 0x00, 0x08, 0xA0, 0x01, 0x20, 0x08, 0xA0, 0x01, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x1D, 0xFE, 0x7F, 0x02, 0x08, 0x40, 0x2D, 0xE9, 0x14, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x33, 0x00, 0xEB, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x50, 0x9E, 0x80, 0x03, 0xF8, 0x43, 0x2D, 0xE9, 0xA0, 0x70, 0x9F, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x80, 0x97, 0xE5, 0x98, 0x40, 0x9F, 0xE5, 0xB0, 0x01, 0xC8, 0xE1 - .byte 0x94, 0x90, 0x9F, 0xE5, 0xB4, 0x01, 0xC8, 0xE1, 0x00, 0x60, 0x8D, 0xE2, 0x00, 0x50, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x97, 0xE5, 0x06, 0x10, 0xA0, 0xE1, 0x08, 0x03, 0x90, 0xE5, 0x05, 0x20, 0xA0, 0xE1 - .byte 0x90, 0x10, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x75, 0x00, 0x00, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0x0C, 0x00, 0xEB, 0xB0, 0x11, 0xD8, 0xE1 - .byte 0xB2, 0x11, 0xC8, 0xE1, 0x81, 0x10, 0xA0, 0xE1, 0xB1, 0x10, 0x98, 0xE1, 0x09, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0xB0, 0x11, 0xD8, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0xB0, 0x11, 0xC8, 0xE1 - .byte 0xE4, 0x0C, 0x00, 0xEB, 0xE9, 0xFF, 0xFF, 0xEA, 0xE2, 0x0C, 0x00, 0xEB, 0xB2, 0x01, 0xD8, 0xE1 - .byte 0x38, 0x00, 0x00, 0xEB, 0xB4, 0x01, 0xC8, 0xE1, 0xB4, 0x01, 0xD8, 0xE1, 0x80, 0x01, 0x88, 0xE0 - .byte 0xC0, 0x00, 0x90, 0xE5, 0x0F, 0xE0, 0xA0, 0xE1, 0x10, 0xFF, 0x2F, 0xE1, 0xB4, 0x91, 0xC8, 0xE1 - .byte 0xDE, 0xFF, 0xFF, 0xEA, 0xF4, 0xFF, 0x80, 0x03, 0x10, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00 + + arm_func_start sub_0200066C +sub_0200066C: ; 0x0200066C + ldr r1, _020006A0 ; =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 +_020006A0: .word 0x027FFE1D + arm_func_end sub_0200066C + + arm_func_start sub_020006A4 +sub_020006A4: ; 0x020006A4 + stmdb sp!, {r3, lr} + ldr r0, _020006C4 ; =0x03809E50 + ldr r0, [r0] + cmp r0, #0 + beq _020006BC + bl sub_0200D2E4 +_020006BC: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_020006C4: .word 0x03809E50 + arm_func_end sub_020006A4 + + arm_func_start sub_020006C8 +sub_020006C8: ; 0x020006C8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r7, _02000774 ; =0x0380FFF4 + mov r0, #0 + ldr r8, [r7] + ldr r4, _02000778 ; =0x01000010 + strh r0, [r8, #0x10] + ldr sb, _0200077C ; =0x0000FFFF + strh r0, [r8, #0x14] + add r6, sp, #0 + mov r5, r0 +_020006F0: + ldr r0, [r7] + mov r1, r6 + ldr r0, [r0, #0x308] + mov r2, r5 + bl sub_02004948 + cmp r0, #0 + beq _02000714 + mov r0, r6 + bl sub_020008EC +_02000714: + mov r0, r4 + bl sub_02003B10 + ldrh r1, [r8, #0x10] + strh r1, [r8, #0x12] + mov r1, r1, lsl #1 + ldrh r1, [r8, r1] + cmp r1, sb + bne _02000748 + ldrh r1, [r8, #0x10] + add r1, r1, #1 + strh r1, [r8, #0x10] + bl sub_02003AD8 + b _020006F0 +_02000748: + bl sub_02003AD8 + ldrh r0, [r8, #0x12] + bl sub_02000838 + strh r0, [r8, #0x14] + ldrh r0, [r8, #0x14] + add r0, r8, r0, lsl #3 + ldr r0, [r0, #0xc0] + mov lr, pc + bx r0 +_0200076C: ; 0x0200076C + strh sb, [r8, #0x14] + b _020006F0 + .align 2, 0 +_02000774: .word 0x0380FFF4 +_02000778: .word 0x01000010 +_0200077C: .word 0x0000FFFF + arm_func_end sub_020006C8 arm_func_start sub_02000780 sub_02000780: ; 0x02000780 @@ -505,7 +823,7 @@ _02000AA0: mov lr, pc bx r1 _02000AB0: - .byte 0x00, 0x40, 0xA0, 0xE1 + mov r4, r0 _02000AB4: cmp r4, #0 moveq r0, #0 @@ -641,8 +959,12 @@ _02000C5C: .align 2, 0 _02000C64: .word 0x0000BF1D arm_func_end sub_02000BDC -_02000C68: - .byte 0x04, 0x00, 0x90, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02000C68 +sub_02000C68: ; 0x02000C68 + ldr r0, [r0, #4] + bx lr + arm_func_end sub_02000C68 arm_func_start sub_02000C70 sub_02000C70: ; 0x02000C70 @@ -800,9 +1122,17 @@ _02000E70: mov lr, pc bx r2 _02000EA4: - .byte 0xB4, 0x01, 0xC4, 0xE1, 0xB4, 0x01, 0xD4, 0xE1, 0x80, 0x00, 0x50, 0xE3 - .byte 0x18, 0x00, 0x00, 0x0A, 0x81, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0xB4, 0x10, 0xD5, 0xE1 - .byte 0x06, 0x00, 0xE0, 0xE1, 0x00, 0x00, 0x01, 0xE0, 0xB4, 0x00, 0xC5, 0xE1, 0x08, 0x00, 0x00, 0xEA + strh r0, [r4, #0x14] + ldrh r0, [r4, #0x14] + cmp r0, #0x80 + beq _02000F18 + cmp r0, #0x81 + bne _02000ED0 + ldrh r1, [r5, #4] + mvn r0, r6 + and r0, r1, r0 + strh r0, [r5, #4] + b _02000EF4 _02000ED0: ldrh r1, [r5, #4] mvn r0, r6 @@ -813,6 +1143,7 @@ _02000ED0: ldr r0, [r0] add r0, r0, #0x200 bl sub_02000F40 +_02000EF4: ldr r0, _02000F20 ; =0x0380FFF4 ldr r0, [r0] add r0, r0, #0x200 @@ -2800,7 +3131,7 @@ _02002984: mov lr, pc bx r2 _02002A88: - .byte 0x22, 0x00, 0x00, 0xEA + b _02002B18 _02002A8C: ldr r1, [sb, #0xc] mov r0, #0 @@ -2832,7 +3163,7 @@ _02002AD4: mov lr, pc bx r2 _02002AF4: - .byte 0x07, 0x00, 0x00, 0xEA + b _02002B18 _02002AF8: ldrh r0, [sb, #4] mov r1, #3 @@ -3600,49 +3931,225 @@ _0200357C: _02003594: .word 0x000082EA _02003598: .word 0x0380FFF4 arm_func_end sub_02003514 -_0200359C: - .byte 0x38, 0x40, 0x2D, 0xE9 - .byte 0x58, 0x10, 0x9F, 0xE5, 0x58, 0xE0, 0x9F, 0xE5, 0x01, 0x50, 0xA0, 0xE3, 0x7B, 0x2F, 0x81, 0xE2 - .byte 0x5D, 0x3F, 0x81, 0xE2, 0x00, 0xC0, 0xA0, 0xE3, 0x0C, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xDE, 0xE1 - .byte 0xB0, 0xC0, 0xCE, 0xE1, 0xB0, 0x00, 0xD3, 0xE1, 0x03, 0x00, 0x00, 0xE2, 0x03, 0x00, 0x50, 0xE3 - .byte 0xB0, 0x00, 0xD2, 0x11, 0x05, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13 - .byte 0xB0, 0xC0, 0xC1, 0x11, 0xB0, 0x00, 0xDE, 0xE1, 0x0C, 0x50, 0xA0, 0x11, 0xB0, 0x40, 0xCE, 0xE1 - .byte 0x00, 0x00, 0x55, 0xE3, 0xF0, 0xFF, 0xFF, 0x1A, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x28, 0x80, 0x80, 0x04, 0x08, 0x02, 0x00, 0x04, 0x28, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x00, 0xEA, 0xB0, 0x00, 0xD1, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x20, 0x82, 0xE2, 0x0A, 0x0B, 0x52, 0xE3, 0xF8, 0xFF, 0xFF, 0x3A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x5E, 0x81, 0x80, 0x04, 0x28, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0xEA, 0xB0, 0x00, 0xD1, 0xE1, 0x01, 0x00, 0x10, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x03, 0x1E, 0xFF, 0x2F, 0x01, 0x01, 0x20, 0x82, 0xE2, 0x0A, 0x0B, 0x52, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0x3A, 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x81, 0x80, 0x04 - .byte 0x00, 0x40, 0x2D, 0xE9, 0x01, 0xC3, 0xA0, 0xE3, 0x21, 0xCE, 0x8C, 0xE2, 0x08, 0x10, 0x1C, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x80, 0xBD, 0xE8 - .byte 0x06, 0x00, 0x9C, 0xE8, 0x02, 0x10, 0x11, 0xE0, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x00, 0x80, 0xBD, 0xE8, 0x01, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0xA0, 0xE3, 0x13, 0x20, 0x11, 0xE0 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x80, 0xE2, 0xFA, 0xFF, 0xFF, 0x0A - .byte 0x04, 0x20, 0x8C, 0xE5, 0x08, 0x10, 0x9F, 0xE5, 0x00, 0x01, 0x91, 0xE7, 0x04, 0xE0, 0x9F, 0xE5 - .byte 0x10, 0xFF, 0x2F, 0xE1, 0xF4, 0x74, 0x80, 0x03, 0xF4, 0xB4, 0x7F, 0x03, 0x34, 0xC1, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x00, 0xC0, 0x9C, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x5C, 0xE3 - .byte 0x0D, 0x00, 0x00, 0x0A, 0x48, 0x20, 0x8C, 0xE5, 0x5C, 0x30, 0x8C, 0xE5, 0x60, 0x30, 0x8C, 0xE5 - .byte 0x64, 0x00, 0x9C, 0xE5, 0x64, 0x30, 0x8C, 0xE5, 0x00, 0xC0, 0xA0, 0xE1, 0x00, 0x00, 0x5C, 0xE3 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0xFC, 0xC0, 0x9F, 0xE5, 0x00, 0x30, 0x8C, 0xE5, 0x04, 0x30, 0x8C, 0xE5 - .byte 0xF4, 0xC0, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xCC, 0xE1, 0xE8, 0xC0, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xDC, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x04, 0xF0, 0x9D, 0xE4, 0x00, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xCC, 0xE1, 0xD2, 0x30, 0xA0, 0xE3 - .byte 0x03, 0xF0, 0x21, 0xE1, 0x08, 0x20, 0x8C, 0xE2, 0x00, 0x10, 0x92, 0xE5, 0x00, 0x00, 0x51, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA, 0xB8, 0x04, 0xD1, 0xE1, 0x00, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA - .byte 0x4C, 0x10, 0x91, 0xE5, 0xF4, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x51, 0xE3, 0x02, 0x00, 0x00, 0x1A - .byte 0x92, 0x30, 0xA0, 0xE3, 0x03, 0xF0, 0x21, 0xE1, 0x04, 0xF0, 0x9D, 0xE4, 0x04, 0x00, 0x9C, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE1, 0xF9, 0xFF, 0xFF, 0x0A, 0x0C, 0x30, 0x9C, 0xE5, 0x00, 0x00, 0x53, 0xE3 - .byte 0x03, 0x00, 0x00, 0x0A, 0x03, 0x10, 0x2D, 0xE9, 0x0F, 0xE0, 0xA0, 0xE1, 0x13, 0xFF, 0x2F, 0xE1 - .byte 0x03, 0x10, 0xBD, 0xE8, 0x04, 0x10, 0x8C, 0xE5, 0x00, 0x20, 0x4F, 0xE1, 0x00, 0x20, 0xA0, 0xE5 - .byte 0x0C, 0x00, 0xBD, 0xE9, 0x0C, 0x00, 0xA0, 0xE9, 0x0C, 0x50, 0xBD, 0xE9, 0xFC, 0x7F, 0xE0, 0xE9 - .byte 0x00, 0x40, 0xA0, 0xE9, 0xD3, 0x30, 0xA0, 0xE3, 0x03, 0xF0, 0x21, 0xE1, 0x00, 0x20, 0xA0, 0xE9 - .byte 0x44, 0xD0, 0x91, 0xE5, 0xD2, 0x30, 0xA0, 0xE3, 0x03, 0xF0, 0x21, 0xE1, 0x00, 0x20, 0xB1, 0xE5 - .byte 0x02, 0xF0, 0x69, 0xE1, 0x40, 0xE0, 0x91, 0xE5, 0xFF, 0x7F, 0xD1, 0xE9, 0x00, 0x00, 0xA0, 0xE1 - .byte 0x0F, 0x50, 0x2D, 0xE8, 0x00, 0x80, 0xBD, 0xE8, 0x08, 0x76, 0x80, 0x03, 0xA4, 0x76, 0x80, 0x03 - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0200359C +sub_0200359C: ; 0x0200359C + stmdb sp!, {r3, r4, r5, lr} + ldr r1, _02003600 ; =0x04808028 + ldr lr, _02003604 ; =0x04000208 + mov r5, #1 + add r2, r1, #0x1ec + add r3, r1, #0x174 + mov ip, #0 + b _020035F0 +_020035BC: + 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] +_020035F0: + cmp r5, #0 + bne _020035BC + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_02003600: .word 0x04808028 +_02003604: .word 0x04000208 + arm_func_end sub_0200359C + + arm_func_start sub_02003608 +sub_02003608: ; 0x02003608 + ldr r1, _02003638 ; =0x0480815E + mov r2, #0 + b _02003628 +_02003614: + ldrh r0, [r1] + tst r0, #1 + moveq r0, #0 + bxeq lr + add r2, r2, #1 +_02003628: + cmp r2, #0x2800 + blo _02003614 + mov r0, #1 + bx lr + .align 2, 0 +_02003638: .word 0x0480815E + arm_func_end sub_02003608 + + arm_func_start sub_0200363C +sub_0200363C: ; 0x0200363C + ldr r1, _0200366C ; =0x04808180 + mov r2, #0 + b _0200365C +_02003648: + ldrh r0, [r1] + tst r0, #1 + moveq r0, #0 + bxeq lr + add r2, r2, #1 +_0200365C: + cmp r2, #0x2800 + blo _02003648 + mov r0, #1 + bx lr + .align 2, 0 +_0200366C: .word 0x04808180 + arm_func_end sub_0200363C + + arm_func_start sub_02003670 +sub_02003670: ; 0x02003670 + stmdb sp!, {lr} + mov ip, #0x4000000 + add ip, ip, #0x210 + ldr r1, [ip, #-8] + cmp r1, #0 + beq _0200368C + b _02003690 +_0200368C: + ldmia sp!, {pc} +_02003690: + ldmia ip, {r1, r2} + ands r1, r1, r2 + beq _020036A0 + b _020036A4 +_020036A0: + ldmia sp!, {pc} +_020036A4: + mov r3, #1 + mov r0, #0 +_020036AC: + ands r2, r1, r3, lsl r0 + beq _020036B8 + b _020036BC +_020036B8: + add r0, r0, #1 +_020036BC: + beq _020036AC + str r2, [ip, #4] + ldr r1, _020036D4 ; =0x038074F4 + ldr r0, [r1, r0, lsl #2] + ldr lr, _020036D8 ; =0x037FB4F4 + bx r0 + .align 2, 0 +_020036D4: .word 0x038074F4 +_020036D8: .word 0x037FB4F4 + arm_func_end sub_02003670 + + arm_func_start sub_020036DC +sub_020036DC: ; 0x020036DC + ldr ip, _02003818 ; =0x03807608 + mov r3, #0 + ldr ip, [ip] + mov r2, #1 + cmp ip, #0 + beq _0200372C +_020036F4: + 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 _020036F4 + ldr ip, _02003818 ; =0x03807608 + str r3, [ip] + str r3, [ip, #4] + ldr ip, _0200381C ; =0x038076A4 + mov r1, #1 + strh r1, [ip] +_0200372C: + ldr ip, _0200381C ; =0x038076A4 + ldrh r1, [ip] + cmp r1, #0 + beq _02003740 + b _02003744 +_02003740: + ldmia sp!, {pc} +_02003744: + mov r1, #0 + strh r1, [ip] + mov r3, #0xd2 + msr cpsr_c, r3 + add r2, ip, #8 + ldr r1, [r2] +_0200375C: + cmp r1, #0 + bne _02003768 + b _0200376C +_02003768: + ldrh r0, [r1, #0x48] +_0200376C: + bne _02003774 + b _02003778 +_02003774: + cmp r0, #1 +_02003778: + bne _02003780 + b _02003784 +_02003780: + ldr r1, [r1, #0x4c] +_02003784: + bne _0200375C + cmp r1, #0 + bne _0200379C +_02003790: + mov r3, #0x92 + msr cpsr_c, r3 + ldmia sp!, {pc} +_0200379C: + ldr r0, [ip, #4] + cmp r1, r0 + beq _02003790 + ldr r3, [ip, #0xc] + cmp r3, #0 + beq _020037C4 + stmdb sp!, {r0, r1, ip} + mov lr, pc + bx r3 +_020037C0: + ldmia sp!, {r0, r1, ip} +_020037C4: + 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 +_02003818: .word 0x03807608 +_0200381C: .word 0x038076A4 + arm_func_end sub_020036DC + + arm_func_start sub_02003820 +sub_02003820: ; 0x02003820 + bx lr + arm_func_end sub_02003820 arm_func_start sub_02003824 sub_02003824: ; 0x02003824 @@ -3685,20 +4192,104 @@ _020038A4: .word 0x03807618 _020038A8: .word 0x0380FFF8 _020038AC: .word 0x03807614 arm_func_end sub_02003824 -_020038B0: - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x04, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x07, 0x00, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0x3C, 0xB6, 0x7F, 0x03 - .byte 0x08, 0x40, 0x2D, 0xE9, 0x38, 0x20, 0x9F, 0xE5, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x92, 0xE5 - .byte 0x60, 0x30, 0x90, 0xE5, 0x01, 0x00, 0x81, 0xE2, 0x00, 0x00, 0x82, 0xE5, 0x00, 0x00, 0x53, 0xE3 - .byte 0x01, 0x00, 0x00, 0x0A, 0x0F, 0xE0, 0xA0, 0xE1, 0x13, 0xFF, 0x2F, 0xE1, 0x18, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x80, 0xE3, 0x00, 0x00, 0x81, 0xE5, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x3C, 0xFC, 0x7F, 0x02, 0x10, 0x76, 0x80, 0x03, 0xF8, 0xFF, 0x80, 0x03 + + arm_func_start sub_020038B0 +sub_020038B0: ; 0x020038B0 + ldr ip, _020038BC ; =sub_037FB63C + mov r0, #0 + bx ip + .align 2, 0 +_020038BC: .word sub_037FB63C + arm_func_end sub_020038B0 + + arm_func_start sub_020038C0 +sub_020038C0: ; 0x020038C0 + ldr ip, _020038CC ; =sub_037FB63C + mov r0, #1 + bx ip + .align 2, 0 +_020038CC: .word sub_037FB63C + arm_func_end sub_020038C0 + + arm_func_start sub_020038D0 +sub_020038D0: ; 0x020038D0 + ldr ip, _020038DC ; =sub_037FB63C + mov r0, #2 + bx ip + .align 2, 0 +_020038DC: .word sub_037FB63C + arm_func_end sub_020038D0 + + arm_func_start sub_020038E0 +sub_020038E0: ; 0x020038E0 + ldr ip, _020038EC ; =sub_037FB63C + mov r0, #3 + bx ip + .align 2, 0 +_020038EC: .word sub_037FB63C + arm_func_end sub_020038E0 + + arm_func_start sub_020038F0 +sub_020038F0: ; 0x020038F0 + ldr ip, _020038FC ; =sub_037FB63C + mov r0, #4 + bx ip + .align 2, 0 +_020038FC: .word sub_037FB63C + arm_func_end sub_020038F0 + + arm_func_start sub_02003900 +sub_02003900: ; 0x02003900 + ldr ip, _0200390C ; =sub_037FB63C + mov r0, #5 + bx ip + .align 2, 0 +_0200390C: .word sub_037FB63C + arm_func_end sub_02003900 + + arm_func_start sub_02003910 +sub_02003910: ; 0x02003910 + ldr ip, _0200391C ; =sub_037FB63C + mov r0, #6 + bx ip + .align 2, 0 +_0200391C: .word sub_037FB63C + arm_func_end sub_02003910 + + arm_func_start sub_02003920 +sub_02003920: ; 0x02003920 + ldr ip, _0200392C ; =sub_037FB63C + mov r0, #7 + bx ip + .align 2, 0 +_0200392C: .word sub_037FB63C + arm_func_end sub_02003920 + + arm_func_start sub_02003930 +sub_02003930: ; 0x02003930 + stmdb sp!, {r3, lr} + ldr r2, _02003974 ; =0x027FFC3C + ldr r0, _02003978 ; =0x03807610 + ldr r1, [r2] + ldr r3, [r0, #0x60] + add r0, r1, #1 + str r0, [r2] + cmp r3, #0 + beq _0200395C + mov lr, pc + bx r3 +_0200395C: + ldr r1, _0200397C ; =0x0380FFF8 + ldr r0, [r1] + orr r0, r0, #1 + str r0, [r1] + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_02003974: .word 0x027FFC3C +_02003978: .word 0x03807610 +_0200397C: .word 0x0380FFF8 + arm_func_end sub_02003930 arm_func_start sub_02003980 sub_02003980: ; 0x02003980 @@ -4058,9 +4649,16 @@ _02003D80: .word sub_037FBA94 _02003D84: .word 0x027FFFE8 _02003D88: .word 0x037FBBA4 arm_func_end sub_02003D6C -_02003D8C: - .byte 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02003D8C +sub_02003D8C: ; 0x02003D8C + bx lr + arm_func_end sub_02003D8C + + arm_func_start sub_02003D90 +sub_02003D90: ; 0x02003D90 + bx lr + arm_func_end sub_02003D90 arm_func_start sub_02003D94 sub_02003D94: ; 0x02003D94 @@ -4087,8 +4685,16 @@ _02003DC8: .word sub_037FBA94 _02003DCC: .word 0x027FFFE0 _02003DD0: .word 0x037FBBEC arm_func_end sub_02003DB4 -_02003DD4: - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02003DD4 +sub_02003DD4: ; 0x02003DD4 + bx lr + arm_func_end sub_02003DD4 + + arm_func_start sub_02003DD8 +sub_02003DD8: ; 0x02003DD8 + bx lr + arm_func_end sub_02003DD8 arm_func_start sub_02003DDC sub_02003DDC: ; 0x02003DDC @@ -4248,11 +4854,23 @@ _02003F98: ldmia sp!, {r3, lr} bx lr arm_func_end sub_02003F4C -_02003FA4: - .byte 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x10, 0x10, 0x92, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0xA0, 0x13 - .byte 0x14, 0x00, 0x81, 0x15, 0x00, 0x10, 0xA0, 0x03, 0x04, 0x10, 0x80, 0x05, 0x02, 0x00, 0xA0, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02003FA4 +sub_02003FA4: ; 0x02003FA4 + ldr r2, [r0] + cmp r2, #0 + beq _02003FCC + ldr r1, [r2, #0x10] + str r1, [r0] + cmp r1, #0 + movne r0, #0 + strne r0, [r1, #0x14] + moveq r1, #0 + streq r1, [r0, #4] +_02003FCC: + mov r0, r2 + bx lr + arm_func_end sub_02003FA4 arm_func_start sub_02003FD4 sub_02003FD4: ; 0x02003FD4 @@ -4285,12 +4903,30 @@ _0200400C: .align 2, 0 _02004030: .word 0x03807680 arm_func_end sub_02003FD4 -_02004034: - .byte 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x2C, 0x10, 0x91, 0xE5 - .byte 0x01, 0x00, 0x00, 0xEA, 0x01, 0x20, 0xA0, 0xE1, 0x4C, 0x10, 0x91, 0xE5, 0x00, 0x00, 0x51, 0xE3 - .byte 0x00, 0x00, 0x51, 0x11, 0xFA, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x52, 0xE3, 0x4C, 0x10, 0x90, 0x05 - .byte 0x0C, 0x00, 0x9F, 0x05, 0x2C, 0x10, 0x80, 0x05, 0x4C, 0x00, 0x90, 0x15, 0x4C, 0x00, 0x82, 0x15 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x76, 0x80, 0x03 + + arm_func_start sub_02004034 +sub_02004034: ; 0x02004034 + ldr r1, _02004074 ; =0x03807680 + mov r2, #0 + ldr r1, [r1, #0x2c] + b _0200404C +_02004044: + mov r2, r1 + ldr r1, [r1, #0x4c] +_0200404C: + cmp r1, #0 + cmpne r1, r0 + bne _02004044 + cmp r2, #0 + ldreq r1, [r0, #0x4c] + ldreq r0, _02004074 ; =0x03807680 + streq r1, [r0, #0x2c] + ldrne r0, [r0, #0x4c] + strne r0, [r2, #0x4c] + bx lr + .align 2, 0 +_02004074: .word 0x03807680 + arm_func_end sub_02004034 arm_func_start sub_02004078 sub_02004078: ; 0x02004078 @@ -4492,27 +5128,108 @@ _02004338: .word 0xD73BFDF7 _0200433C: .word 0xFBDD37BB _02004340: .word 0x037FC15C arm_func_end sub_0200423C -_02004344: - .byte 0x08, 0x40, 0x2D, 0xE9, 0xE6, 0x06, 0x00, 0xEB, 0x10, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x28, 0x00, 0x90, 0xE5, 0x02, 0x00, 0x00, 0xEB, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x76, 0x80, 0x03, 0x38, 0x40, 0x2D, 0xE9, 0x4C, 0x20, 0x9F, 0xE5 - .byte 0x00, 0x50, 0xA0, 0xE1, 0x1C, 0x20, 0x92, 0xE5, 0x01, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x52, 0xE3 - .byte 0x0A, 0x00, 0x00, 0x0A, 0x38, 0x10, 0x9F, 0xE5, 0x08, 0x01, 0x00, 0xEB, 0x04, 0x40, 0x85, 0xE5 - .byte 0x00, 0x10, 0x95, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x80, 0x10, 0x81, 0xE3, 0x00, 0x10, 0x85, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x48, 0x10, 0x85, 0xE5, 0x2E, 0x01, 0x00, 0xEB, 0x01, 0x00, 0x00, 0xEA - .byte 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x00, 0x00, 0xEB, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x80, 0x76, 0x80, 0x03, 0xE0, 0xC1, 0x7F, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x30, 0x10, 0x9F, 0xE5 - .byte 0x08, 0x10, 0x91, 0xE5, 0x00, 0x30, 0x91, 0xE5, 0x98, 0x20, 0x93, 0xE5, 0x00, 0x00, 0x52, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x98, 0x10, 0x83, 0xE5, 0x0F, 0xE0, 0xA0, 0xE1 - .byte 0x12, 0xFF, 0x2F, 0xE1, 0xBB, 0x06, 0x00, 0xEB, 0x02, 0x00, 0x00, 0xEB, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x76, 0x80, 0x03, 0x10, 0x40, 0x2D, 0xE9, 0x60, 0x00, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x90, 0xE5, 0x00, 0x40, 0x90, 0xE5, 0xC8, 0x00, 0x00, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xCB, 0x01, 0x00, 0xEB, 0x5C, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x04, 0x10, 0xA0, 0xE1, 0xC4, 0xFE, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0xFC, 0xFE, 0xFF, 0xEB - .byte 0x02, 0x10, 0xA0, 0xE3, 0x80, 0x00, 0x84, 0xE2, 0x48, 0x10, 0x84, 0xE5, 0x1E, 0x00, 0x00, 0xEB - .byte 0xC8, 0x00, 0x00, 0xEB, 0xA3, 0x06, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x05, 0xFF, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0xA4, 0x06, 0x00, 0xEB, 0xFA, 0x06, 0x00, 0xEB, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x76, 0x80, 0x03 + + arm_func_start sub_02004344 +sub_02004344: ; 0x02004344 + stmdb sp!, {r3, lr} + bl sub_02005EE8 + ldr r0, _02004364 ; =0x03807680 + mov r1, #0 + ldr r0, [r0, #0x28] + bl sub_02004368 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_02004364: .word 0x03807680 + arm_func_end sub_02004344 + + arm_func_start sub_02004368 +sub_02004368: ; 0x02004368 + stmdb sp!, {r3, r4, r5, lr} + ldr r2, _020043C0 ; =0x03807680 + mov r5, r0 + ldr r2, [r2, #0x1c] + mov r4, r1 + cmp r2, #0 + beq _020043B0 + ldr r1, _020043C4 ; =0x037FC1E0 + bl sub_020047B0 + 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_02004868 + b _020043B8 +_020043B0: + mov r0, r4 + bl sub_020043C8 +_020043B8: + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_020043C0: .word 0x03807680 +_020043C4: .word 0x037FC1E0 + arm_func_end sub_02004368 + + arm_func_start sub_020043C8 +sub_020043C8: ; 0x020043C8 + stmdb sp!, {r3, lr} + ldr r1, _02004404 ; =0x03807680 + ldr r1, [r1, #8] + ldr r3, [r1] + ldr r2, [r3, #0x98] + cmp r2, #0 + beq _020043F8 + mov r1, #0 + str r1, [r3, #0x98] + mov lr, pc + bx r2 +_020043F4: + bl sub_02005EE8 +_020043F8: + bl sub_02004408 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_02004404: .word 0x03807680 + arm_func_end sub_020043C8 + + arm_func_start sub_02004408 +sub_02004408: ; 0x02004408 + stmdb sp!, {r4, lr} + ldr r0, _02004474 ; =0x03807680 + ldr r0, [r0, #8] + ldr r4, [r0] + bl sub_02004740 + mov r0, r4 + bl sub_02004B54 + ldr r0, [r4, #0x5c] + cmp r0, #0 + beq _02004438 + mov r1, r4 + bl sub_02003F4C +_02004438: + mov r0, r4 + bl sub_02004034 + mov r1, #2 + add r0, r4, #0x80 + str r1, [r4, #0x48] + bl sub_020044CC + bl sub_02004778 + bl sub_02005EE8 + mov r4, r0 + bl sub_02004078 + mov r0, r4 + bl sub_02005EFC + bl sub_02006058 + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_02004474: .word 0x03807680 + arm_func_end sub_02004408 arm_func_start sub_02004478 sub_02004478: ; 0x02004478 @@ -4714,10 +5431,19 @@ _020046E8: .word 0x03807680 _020046EC: .word 0x000082EA _020046F0: .word 0x037FC50C arm_func_end sub_02004650 -_020046F4: - .byte 0x00, 0x20, 0x90, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5 - .byte 0x08, 0xC0, 0x9F, 0xE5, 0x02, 0x00, 0xA0, 0xE1, 0x94, 0x10, 0x82, 0xE5, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0x6C, 0xC3, 0x7F, 0x03 + + arm_func_start sub_020046F4 +sub_020046F4: ; 0x020046F4 + ldr r2, [r0] + mov r1, #0 + str r1, [r0] + ldr ip, _02004710 ; =sub_037FC36C + mov r0, r2 + str r1, [r2, #0x94] + bx ip + .align 2, 0 +_02004710: .word sub_037FC36C + arm_func_end sub_020046F4 arm_func_start sub_02004714 sub_02004714: ; 0x02004714 @@ -4988,9 +5714,16 @@ _02004A50: ldmia sp!, {r3, r4, r5, r6, r7, lr} bx lr arm_func_end sub_020049E4 -_02004A58: - .byte 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x10, 0x80, 0xE5 - .byte 0x00, 0x10, 0x80, 0xE5, 0x08, 0x10, 0x80, 0xE5, 0x0C, 0x10, 0x80, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02004A58 +sub_02004A58: ; 0x02004A58 + mov r1, #0 + str r1, [r0, #4] + str r1, [r0] + str r1, [r0, #8] + str r1, [r0, #0xc] + bx lr + arm_func_end sub_02004A58 arm_func_start sub_02004A70 sub_02004A70: ; 0x02004A70 @@ -5062,11 +5795,26 @@ _02004B40: .align 2, 0 _02004B50: .word 0x038076A4 arm_func_end sub_02004AF4 -_02004B54: - .byte 0x38, 0x40, 0x2D, 0xE9, 0x00, 0x50, 0xA0, 0xE1, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x85, 0xE2, 0x0D, 0xFD, 0xFF, 0xEB, 0x0C, 0x40, 0x80, 0xE5 - .byte 0x08, 0x40, 0x80, 0xE5, 0x54, 0xFE, 0xFF, 0xEB, 0x6C, 0x00, 0x95, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02004B54 +sub_02004B54: ; 0x02004B54 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, #0 + b _02004B78 +_02004B64: + add r0, r5, #0x6c + bl sub_02003FA4 + str r4, [r0, #0xc] + str r4, [r0, #8] + bl sub_020044CC +_02004B78: + ldr r0, [r5, #0x6c] + cmp r0, #0 + bne _02004B64 + ldmia sp!, {r3, r4, r5, lr} + bx lr + arm_func_end sub_02004B54 arm_func_start sub_02004B8C sub_02004B8C: ; 0x02004B8C @@ -5149,11 +5897,24 @@ sub_02004C40: ; 0x02004C40 ldmia sp!, {r4, lr} bx lr arm_func_end sub_02004C40 -_02004C7C: - .byte 0x00, 0x01, 0xA0, 0xE1 - .byte 0x27, 0x06, 0x80, 0xE2, 0xFF, 0x0A, 0x80, 0xE2, 0xC4, 0x0D, 0x90, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x01, 0xA0, 0xE1, 0x27, 0x06, 0x80, 0xE2, 0xFF, 0x0A, 0x80, 0xE2, 0xA0, 0x0D, 0x90, 0xE5 - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02004C7C +sub_02004C7C: ; 0x02004C7C + mov r0, r0, lsl #2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + ldr r0, [r0, #0xdc4] + bx lr + arm_func_end sub_02004C7C + + arm_func_start sub_02004C90 +sub_02004C90: ; 0x02004C90 + mov r0, r0, lsl #2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + ldr r0, [r0, #0xda0] + bx lr + arm_func_end sub_02004C90 arm_func_start sub_02004CA4 sub_02004CA4: ; 0x02004CA4 @@ -5225,9 +5986,15 @@ _02004D68: _02004D70: .word 0x027F91E0 _02004D74: .word 0x0380B488 arm_func_end sub_02004D20 -_02004D78: - .byte 0x00, 0x01, 0xA0, 0xE1, 0x27, 0x06, 0x80, 0xE2 - .byte 0xFF, 0x0A, 0x80, 0xE2, 0xA0, 0x1D, 0x80, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02004D78 +sub_02004D78: ; 0x02004D78 + mov r0, r0, lsl #2 + add r0, r0, #0x2700000 + add r0, r0, #0xff000 + str r1, [r0, #0xda0] + bx lr + arm_func_end sub_02004D78 arm_func_start sub_02004D8C sub_02004D8C: ; 0x02004D8C @@ -5696,15 +6463,38 @@ sub_0200538C: ; 0x0200538C .align 2, 0 _02005398: .word 0x03807828 arm_func_end sub_0200538C -_0200539C: - .byte 0x50, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x08, 0x20, 0x90, 0xE5, 0x0C, 0x10, 0x90, 0xE5, 0x01, 0x20, 0x92, 0xE2 - .byte 0x08, 0x20, 0x80, 0xE5, 0x00, 0x10, 0xA1, 0xE2, 0x0C, 0x10, 0x80, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x28, 0x20, 0x9F, 0xE5, 0xC1, 0x10, 0xA0, 0xE3 - .byte 0xB0, 0x30, 0xC2, 0xE1, 0xB2, 0x30, 0x42, 0xE1, 0xB0, 0x10, 0xC2, 0xE1, 0x04, 0x30, 0x80, 0xE5 - .byte 0x14, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE1 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0x28, 0x78, 0x80, 0x03, 0x02, 0x01, 0x00, 0x04, 0x58, 0xB8, 0x7F, 0x03 - .byte 0xB4, 0xD1, 0x7F, 0x03 + + arm_func_start sub_0200539C +sub_0200539C: ; 0x0200539C + ldr r0, _020053F4 ; =0x03807828 + 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 _020053E0 + ldr r2, _020053F8 ; =0x04000102 + mov r1, #0xc1 + strh r3, [r2] + strh r3, [r2, #-2] + strh r1, [r2] + str r3, [r0, #4] +_020053E0: + ldr ip, _020053FC ; =sub_037FB858 + mov r0, #0 + ldr r1, _02005400 ; =0x037FD1B4 + mov r2, r0 + bx ip + .align 2, 0 +_020053F4: .word 0x03807828 +_020053F8: .word 0x04000102 +_020053FC: .word sub_037FB858 +_02005400: .word 0x037FD1B4 + arm_func_end sub_0200539C arm_func_start sub_02005404 sub_02005404: ; 0x02005404 @@ -6029,8 +6819,14 @@ _02005824: .align 2, 0 _0200582C: .word 0x03807838 arm_func_end sub_020057A8 -_02005830: - .byte 0x01, 0x40, 0x2D, 0xE9, 0x01, 0x00, 0x00, 0xEB, 0x01, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02005830 +sub_02005830: ; 0x02005830 + stmdb sp!, {r0, lr} + bl sub_02005840 + ldmia sp!, {r0, lr} + bx lr + arm_func_end sub_02005830 arm_func_start sub_02005840 sub_02005840: ; 0x02005840 @@ -6550,9 +7346,15 @@ sub_02005E90: ; 0x02005E90 .align 2, 0 _02005ED0: .word 0x03807844 arm_func_end sub_02005E90 -_02005ED4: - .byte 0x00, 0x00, 0x0F, 0xE1, 0x80, 0x10, 0xC0, 0xE3, 0x01, 0xF0, 0x21, 0xE1 - .byte 0x80, 0x00, 0x00, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02005ED4 +sub_02005ED4: ; 0x02005ED4 + mrs r0, cpsr + bic r1, r0, #0x80 + msr cpsr_c, r1 + and r0, r0, #0x80 + bx lr + arm_func_end sub_02005ED4 arm_func_start sub_02005EE8 sub_02005EE8: ; 0x02005EE8 @@ -6629,20 +7431,70 @@ _02005F8C: _02005F94: .word 0x03807858 _02005F98: .word 0x037FDDC4 arm_func_end sub_02005F64 -_02005F9C: - .byte 0x04, 0x00, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0xD0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x58, 0x78, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x7F, 0x0C, 0x01, 0xE2, 0x00, 0x04, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x10, 0x00, 0x50, 0xE3 - .byte 0x14, 0x00, 0x9F, 0x05, 0x01, 0x10, 0xA0, 0x03, 0xB2, 0x10, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x0A - .byte 0x20, 0x00, 0x00, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x58, 0x78, 0x80, 0x03 - .byte 0x70, 0x40, 0x2D, 0xE9, 0x00, 0x00, 0xA0, 0xE3, 0x3B, 0x00, 0x00, 0xEB, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x39, 0x00, 0x00, 0xEB, 0x02, 0x00, 0xA0, 0xE3, 0x37, 0x00, 0x00, 0xEB, 0x03, 0x00, 0xA0, 0xE3 - .byte 0x35, 0x00, 0x00, 0xEB, 0x01, 0x07, 0xA0, 0xE3, 0x9F, 0xF6, 0xFF, 0xEB, 0x00, 0x00, 0xE0, 0xE3 - .byte 0xCD, 0xF6, 0xFF, 0xEB, 0x20, 0x02, 0x00, 0xEB, 0x0C, 0x60, 0xA0, 0xE3, 0x01, 0x5A, 0xA0, 0xE3 - .byte 0x00, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1 - .byte 0x70, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A, 0x10, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x16, 0x25, 0x00, 0xEB, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x08, 0x02, 0x00, 0x04 + + arm_func_start sub_02005F9C +sub_02005F9C: ; 0x02005F9C + ldr r0, _02005FA8 ; =0x03807858 + ldrh r0, [r0, #2] + bx lr + .align 2, 0 +_02005FA8: .word 0x03807858 + arm_func_end sub_02005F9C + + arm_func_start sub_02005FAC +sub_02005FAC: ; 0x02005FAC + stmdb sp!, {r3, lr} + and r0, r1, #0x7f00 + mov r0, r0, lsl #8 + mov r0, r0, lsr #0x10 + cmp r0, #0x10 + ldreq r0, _02005FDC ; =0x03807858 + moveq r1, #1 + streqh r1, [r0, #2] + beq _02005FD4 + bl sub_02006058 +_02005FD4: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_02005FDC: .word 0x03807858 + arm_func_end sub_02005FAC + + arm_func_start sub_02005FE0 +sub_02005FE0: ; 0x02005FE0 + stmdb sp!, {r4, r5, r6, lr} + mov r0, #0 + bl sub_020060DC + mov r0, #1 + bl sub_020060DC + mov r0, #2 + bl sub_020060DC + mov r0, #3 + bl sub_020060DC + mov r0, #0x40000 + bl sub_02003A8C + mvn r0, #0 + bl sub_02003B4C + bl sub_0200689C + mov r6, #0xc + mov r5, #0x1000 + mov r4, #0 +_02006024: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl sub_020065F8 + cmp r0, #0 + bne _02006024 + ldr r0, _02006054 ; =0x04000208 + mov r1, #0 + strh r1, [r0] + bl sub_0200F4A8 + ldmia sp!, {r4, r5, r6, lr} + bx lr + .align 2, 0 +_02006054: .word 0x04000208 + arm_func_end sub_02005FE0 arm_func_start sub_02006058 sub_02006058: ; 0x02006058 @@ -6726,14 +7578,49 @@ _0200614C: .align 2, 0 _02006158: .word 0x81400001 arm_func_end sub_020060DC -_0200615C: - .byte 0x00, 0x30, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x53, 0xE1, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xEA, 0xB3, 0x00, 0x81, 0xE1 - .byte 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xEA, 0x02, 0x30, 0x83, 0xE2, 0xF7, 0xFF, 0xFF, 0xBA - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0xC0, 0xA0, 0xE3, 0x02, 0x00, 0x5C, 0xE1, 0x00, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0x00, 0xEA, 0xBC, 0x30, 0x90, 0xE1, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xEA - .byte 0xBC, 0x30, 0x81, 0xE1, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xEA, 0x02, 0xC0, 0x8C, 0xE2 - .byte 0xF4, 0xFF, 0xFF, 0xBA, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0200615C +sub_0200615C: ; 0x0200615C + mov r3, #0 +_02006160: + cmp r3, r2 + blt _0200616C + b _02006170 +_0200616C: + strh r0, [r1, r3] +_02006170: + blt _02006178 + b _0200617C +_02006178: + add r3, r3, #2 +_0200617C: + blt _02006160 + bx lr + arm_func_end sub_0200615C + + arm_func_start sub_02006184 +sub_02006184: ; 0x02006184 + mov ip, #0 +_02006188: + cmp ip, r2 + blt _02006194 + b _02006198 +_02006194: + ldrh r3, [r0, ip] +_02006198: + blt _020061A0 + b _020061A4 +_020061A0: + strh r3, [r1, ip] +_020061A4: + blt _020061AC + b _020061B0 +_020061AC: + add ip, ip, #2 +_020061B0: + blt _02006188 + bx lr + arm_func_end sub_02006184 arm_func_start sub_020061B8 sub_020061B8: ; 0x020061B8 @@ -6748,52 +7635,248 @@ _020061CC: blt _020061BC bx lr arm_func_end sub_020061B8 -_020061D4: - .byte 0x02, 0xC0, 0x81, 0xE0, 0x0C, 0x00, 0x51, 0xE1, 0x00, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xB0, 0xE8, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xEA - .byte 0x04, 0x00, 0xA1, 0xE8, 0xF7, 0xFF, 0xFF, 0xBA, 0x1E, 0xFF, 0x2F, 0xE1, 0xF0, 0x03, 0x2D, 0xE9 - .byte 0x02, 0x90, 0x81, 0xE0, 0xA2, 0xC2, 0xA0, 0xE1, 0x8C, 0xC2, 0x81, 0xE0, 0x00, 0x20, 0xA0, 0xE1 - .byte 0x02, 0x30, 0xA0, 0xE1, 0x02, 0x40, 0xA0, 0xE1, 0x02, 0x50, 0xA0, 0xE1, 0x02, 0x60, 0xA0, 0xE1 - .byte 0x02, 0x70, 0xA0, 0xE1, 0x02, 0x80, 0xA0, 0xE1, 0x0C, 0x00, 0x51, 0xE1, 0x00, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0x00, 0xEA, 0xFD, 0x01, 0xA1, 0xE8, 0xFA, 0xFF, 0xFF, 0xBA, 0x09, 0x00, 0x51, 0xE1 - .byte 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA1, 0xE8, 0xFA, 0xFF, 0xFF, 0xBA - .byte 0xF0, 0x03, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x08, 0x00, 0x00, 0x0A - .byte 0xB1, 0xC0, 0x50, 0xE1, 0xFF, 0xC0, 0x0C, 0xE2, 0x01, 0x34, 0x8C, 0xE1, 0xB1, 0x30, 0x40, 0xE1 - .byte 0x01, 0x00, 0x80, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x02, 0x00, 0x52, 0xE3, 0x13, 0x00, 0x00, 0x3A, 0x01, 0x14, 0x81, 0xE1 - .byte 0x02, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0xB2, 0x10, 0xC0, 0xE0, 0x02, 0x20, 0x52, 0xE2 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x18, 0x81, 0xE1 - .byte 0x03, 0x30, 0xD2, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x03, 0x20, 0x42, 0xE0, 0x00, 0xC0, 0x83, 0xE0 - .byte 0x04, 0x10, 0x80, 0xE4, 0x0C, 0x00, 0x50, 0xE1, 0xFC, 0xFF, 0xFF, 0x3A, 0x02, 0x00, 0x12, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA, 0xB2, 0x10, 0xC0, 0xE0, 0x01, 0x00, 0x12, 0xE3 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x30, 0xD0, 0xE1 - .byte 0xFF, 0x3C, 0x03, 0xE2, 0xFF, 0x10, 0x01, 0xE2, 0x03, 0x10, 0x81, 0xE1, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x00, 0x11, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0xB1, 0xC0, 0x51, 0xE1 - .byte 0xFF, 0xC0, 0x0C, 0xE2, 0x01, 0x00, 0x10, 0xE3, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA - .byte 0xB1, 0x30, 0x50, 0xE1, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA, 0x23, 0x34, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0xB0, 0x30, 0xD0, 0xE1, 0x03, 0x34, 0x8C, 0xE1 - .byte 0xB1, 0x30, 0x41, 0xE1, 0x01, 0x00, 0x80, 0xE2, 0x01, 0x10, 0x81, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0x00, 0xC0, 0x21, 0xE0 - .byte 0x01, 0x00, 0x1C, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xC0, 0xE3, 0xB2, 0xC0, 0xD0, 0xE0 - .byte 0x2C, 0x34, 0xA0, 0xE1, 0x02, 0x20, 0x52, 0xE2, 0x05, 0x00, 0x00, 0x3A, 0xB2, 0xC0, 0xD0, 0xE0 - .byte 0x0C, 0xC4, 0x83, 0xE1, 0xB2, 0xC0, 0xC1, 0xE0, 0x2C, 0x38, 0xA0, 0xE1, 0x02, 0x20, 0x52, 0xE2 - .byte 0xF9, 0xFF, 0xFF, 0x2A, 0x01, 0x00, 0x12, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0xC0, 0xD1, 0xE1, 0xFF, 0xCC, 0x0C, 0xE2, 0x03, 0xC0, 0x8C, 0xE1 - .byte 0xB0, 0xC0, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x02, 0x00, 0x1C, 0xE3, 0x08, 0x00, 0x00, 0x0A - .byte 0x01, 0x30, 0xD2, 0xE3, 0x1F, 0x00, 0x00, 0x0A, 0x03, 0x20, 0x42, 0xE0, 0x01, 0xC0, 0x83, 0xE0 - .byte 0xB2, 0x30, 0xD0, 0xE0, 0xB2, 0x30, 0xC1, 0xE0, 0x0C, 0x00, 0x51, 0xE1, 0xFB, 0xFF, 0xFF, 0x3A - .byte 0x18, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x52, 0xE3, 0x16, 0x00, 0x00, 0x3A, 0x02, 0x00, 0x11, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0xB2, 0x30, 0xD0, 0xE0, 0xB2, 0x30, 0xC1, 0xE0, 0x02, 0x20, 0x52, 0xE2 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0x03, 0x30, 0xD2, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0x03, 0x20, 0x42, 0xE0, 0x01, 0xC0, 0x83, 0xE0, 0x04, 0x30, 0x90, 0xE4 - .byte 0x04, 0x30, 0x81, 0xE4, 0x0C, 0x00, 0x51, 0xE1, 0xFB, 0xFF, 0xFF, 0x3A, 0x02, 0x00, 0x12, 0xE3 - .byte 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA, 0xB2, 0x30, 0xD0, 0xE0, 0x00, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x00, 0xEA, 0xB2, 0x30, 0xC1, 0xE0, 0x01, 0x00, 0x12, 0xE3, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x20, 0xD1, 0xE1, 0xB0, 0x00, 0xD0, 0xE1 - .byte 0xFF, 0x2C, 0x02, 0xE2, 0xFF, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x82, 0xE1, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_020061D4 +sub_020061D4: ; 0x020061D4 + add ip, r1, r2 +_020061D8: + cmp r1, ip + blt _020061E4 + b _020061E8 +_020061E4: + ldmia r0!, {r2} +_020061E8: + blt _020061F0 + b _020061F4 +_020061F0: + stmia r1!, {r2} +_020061F4: + blt _020061D8 + bx lr + arm_func_end sub_020061D4 + + arm_func_start sub_020061FC +sub_020061FC: ; 0x020061FC + 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 +_02006228: + cmp r1, ip + blt _02006234 + b _02006238 +_02006234: + stmia r1!, {r0, r2, r3, r4, r5, r6, r7, r8} +_02006238: + blt _02006228 +_0200623C: + cmp r1, sb + blt _02006248 + b _0200624C +_02006248: + stmia r1!, {r0} +_0200624C: + blt _0200623C + ldmia sp!, {r4, r5, r6, r7, r8, sb} + bx lr + arm_func_end sub_020061FC + + arm_func_start sub_02006258 +sub_02006258: ; 0x02006258 + cmp r2, #0 + beq _02006264 + b _02006268 +_02006264: + bx lr +_02006268: + tst r0, #1 + beq _02006294 + 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 _02006290 + b _02006294 +_02006290: + bx lr +_02006294: + cmp r2, #2 + blo _020062EC + orr r1, r1, r1, lsl #8 + tst r0, #2 + beq _020062BC + strh r1, [r0], #2 + subs r2, r2, #2 + beq _020062B8 + b _020062BC +_020062B8: + bx lr +_020062BC: + orr r1, r1, r1, lsl #16 + bics r3, r2, #3 + beq _020062DC + sub r2, r2, r3 + add ip, r3, r0 +_020062D0: + str r1, [r0], #4 + cmp r0, ip + blo _020062D0 +_020062DC: + tst r2, #2 + bne _020062E8 + b _020062EC +_020062E8: + strh r1, [r0], #2 +_020062EC: + tst r2, #1 + beq _020062F8 + b _020062FC +_020062F8: + bx lr +_020062FC: + ldrh r3, [r0] + and r3, r3, #0xff00 + and r1, r1, #0xff + orr r1, r1, r3 + strh r1, [r0] + bx lr + arm_func_end sub_02006258 + + arm_func_start sub_02006314 +sub_02006314: ; 0x02006314 + cmp r2, #0 + beq _02006320 + b _02006324 +_02006320: + bx lr +_02006324: + tst r1, #1 + beq _0200637C + ldrh ip, [r1, #-1] + and ip, ip, #0xff + tst r0, #1 + bne _02006340 + b _02006344 +_02006340: + ldrh r3, [r0, #-1] +_02006344: + bne _0200634C + b _02006350 +_0200634C: + mov r3, r3, lsr #8 +_02006350: + beq _02006358 + b _0200635C +_02006358: + ldrh r3, [r0] +_0200635C: + orr r3, ip, r3, lsl #8 + strh r3, [r1, #-1] + add r0, r0, #1 + add r1, r1, #1 + subs r2, r2, #1 + beq _02006378 + b _0200637C +_02006378: + bx lr +_0200637C: + eor ip, r1, r0 + tst ip, #1 + beq _020063D8 + bic r0, r0, #1 + ldrh ip, [r0], #2 + mov r3, ip, lsr #8 + subs r2, r2, #2 + blo _020063B4 +_0200639C: + ldrh ip, [r0], #2 + orr ip, r3, ip, lsl #8 + strh ip, [r1], #2 + mov r3, ip, lsr #0x10 + subs r2, r2, #2 + bhs _0200639C +_020063B4: + tst r2, #1 + beq _020063C0 + b _020063C4 +_020063C0: + bx lr +_020063C4: + ldrh ip, [r1] + and ip, ip, #0xff00 + orr ip, ip, r3 + strh ip, [r1] + bx lr +_020063D8: + tst ip, #2 + beq _02006404 + bics r3, r2, #1 + beq _02006468 + sub r2, r2, r3 + add ip, r3, r1 +_020063F0: + ldrh r3, [r0], #2 + strh r3, [r1], #2 + cmp r1, ip + blo _020063F0 + b _02006468 +_02006404: + cmp r2, #2 + blo _02006468 + tst r1, #2 + beq _0200642C + ldrh r3, [r0], #2 + strh r3, [r1], #2 + subs r2, r2, #2 + beq _02006428 + b _0200642C +_02006428: + bx lr +_0200642C: + bics r3, r2, #3 + beq _0200644C + sub r2, r2, r3 + add ip, r3, r1 +_0200643C: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r1, ip + blo _0200643C +_0200644C: + tst r2, #2 + bne _02006458 + b _0200645C +_02006458: + ldrh r3, [r0], #2 +_0200645C: + bne _02006464 + b _02006468 +_02006464: + strh r3, [r1], #2 +_02006468: + tst r2, #1 + beq _02006474 + b _02006478 +_02006474: + bx lr +_02006478: + 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_02006314 arm_func_start sub_02006494 sub_02006494: ; 0x02006494 @@ -7009,7 +8092,7 @@ _020066FC: mov lr, pc bx r3 _02006738: - .byte 0xDD, 0xFF, 0xFF, 0xEA + b _020066B4 _0200673C: mov r0, r6, lsl #0x1a movs r0, r0, lsr #0x1f @@ -7119,14 +8202,44 @@ sub_02006844: ; 0x02006844 _0200687C: .word 0x04000136 _02006880: .word 0x027FFFA8 arm_func_end sub_02006844 -_02006884: - .byte 0x0C, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xD1, 0xE5, 0x80, 0x00, 0x80, 0xE3 - .byte 0x00, 0x00, 0xC1, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x05, 0x00, 0x04, 0x38, 0x40, 0x2D, 0xE9 - .byte 0x40, 0x10, 0x9F, 0xE5, 0x00, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0xD1, 0xE5, 0x80, 0x00, 0xC0, 0xE3 - .byte 0x00, 0x00, 0xC1, 0xE5, 0x01, 0x40, 0xA0, 0xE3, 0x05, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1 - .byte 0xD0, 0x00, 0x00, 0xEB, 0x01, 0x50, 0x85, 0xE2, 0x10, 0x00, 0x55, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA - .byte 0x14, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0xC0, 0xE5, 0x01, 0x10, 0xC0, 0xE5 - .byte 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x05, 0x00, 0x04, 0x08, 0x05, 0x00, 0x04 + + arm_func_start sub_02006884 +sub_02006884: ; 0x02006884 + ldr r1, _02006898 ; =0x04000501 + ldrb r0, [r1] + orr r0, r0, #0x80 + strb r0, [r1] + bx lr + .align 2, 0 +_02006898: .word 0x04000501 + arm_func_end sub_02006884 + + arm_func_start sub_0200689C +sub_0200689C: ; 0x0200689C + stmdb sp!, {r3, r4, r5, lr} + ldr r1, _020068E8 ; =0x04000501 + mov r5, #0 + ldrb r0, [r1] + bic r0, r0, #0x80 + strb r0, [r1] + mov r4, #1 +_020068B8: + mov r0, r5 + mov r1, r4 + bl sub_02006C08 + add r5, r5, #1 + cmp r5, #0x10 + blt _020068B8 + ldr r0, _020068EC ; =0x04000508 + mov r1, #0 + strb r1, [r0] + strb r1, [r0, #1] + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_020068E8: .word 0x04000501 +_020068EC: .word 0x04000508 + arm_func_end sub_0200689C arm_func_start sub_020068F0 sub_020068F0: ; 0x020068F0 @@ -7192,12 +8305,34 @@ sub_02006998: ; 0x02006998 .align 2, 0 _020069A0: .word sub_038037DE arm_func_end sub_02006998 -_020069A4: - .byte 0x04, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xC1, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x05, 0x00, 0x04, 0x2C, 0xC0, 0x9F, 0xE5, 0x83, 0x32, 0xA0, 0xE1, 0x00, 0xC0, 0xDC, 0xE5 - .byte 0x80, 0x00, 0x1C, 0xE3, 0x01, 0xC0, 0xA0, 0x13, 0x00, 0xC0, 0xA0, 0x03, 0x8C, 0x33, 0x83, 0xE1 - .byte 0x02, 0x22, 0x83, 0xE1, 0x01, 0x21, 0x82, 0xE1, 0x08, 0x10, 0x9F, 0xE5, 0x02, 0x00, 0x80, 0xE1 - .byte 0x00, 0x00, 0xC1, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x05, 0x00, 0x04 + + arm_func_start sub_020069A4 +sub_020069A4: ; 0x020069A4 + ldr r1, _020069B0 ; =0x04000500 + strb r0, [r1] + bx lr + .align 2, 0 +_020069B0: .word 0x04000500 + arm_func_end sub_020069A4 + + arm_func_start sub_020069B4 +sub_020069B4: ; 0x020069B4 + ldr ip, _020069E8 ; =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, _020069E8 ; =0x04000501 + orr r0, r0, r2 + strb r0, [r1] + bx lr + .align 2, 0 +_020069E8: .word 0x04000501 + arm_func_end sub_020069B4 arm_func_start sub_020069EC sub_020069EC: ; 0x020069EC @@ -7458,15 +8593,47 @@ sub_02006D38: ; 0x02006D38 moveq r0, #0 bx lr arm_func_end sub_02006D38 -_02006D54: - .byte 0x54, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x81, 0xE5 - .byte 0x08, 0x00, 0x00, 0xBA, 0x00, 0x20, 0xA0, 0xE3, 0xFF, 0x10, 0x00, 0xE2, 0x02, 0x02, 0xA0, 0xE1 - .byte 0x01, 0x03, 0x80, 0xE2, 0x01, 0x20, 0x82, 0xE2, 0x02, 0x14, 0xC0, 0xE5, 0x10, 0x00, 0x52, 0xE3 - .byte 0xF9, 0xFF, 0xFF, 0xBA, 0x1E, 0xFF, 0x2F, 0xE1, 0x24, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0xA0, 0xE3 - .byte 0x03, 0x10, 0xD2, 0xE7, 0x03, 0x02, 0xA0, 0xE1, 0x01, 0x03, 0x80, 0xE2, 0x01, 0x30, 0x83, 0xE2 - .byte 0x02, 0x14, 0xC0, 0xE5, 0x10, 0x00, 0x53, 0xE3, 0xF8, 0xFF, 0xFF, 0xBA, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x58, 0x75, 0x80, 0x03, 0x14, 0x79, 0x80, 0x03, 0x00, 0x02, 0xA0, 0xE1, 0x01, 0x03, 0x80, 0xE2 - .byte 0x00, 0x04, 0x90, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02006D54 +sub_02006D54: ; 0x02006D54 + ldr r1, _02006DB0 ; =0x03807558 + cmp r0, #0 + str r0, [r1] + blt _02006D88 + mov r2, #0 + and r1, r0, #0xff +_02006D6C: + mov r0, r2, lsl #4 + add r0, r0, #0x4000000 + add r2, r2, #1 + strb r1, [r0, #0x402] + cmp r2, #0x10 + blt _02006D6C + bx lr +_02006D88: + ldr r2, _02006DB4 ; =0x03807914 + mov r3, #0 +_02006D90: + 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 _02006D90 + bx lr + .align 2, 0 +_02006DB0: .word 0x03807558 +_02006DB4: .word 0x03807914 + arm_func_end sub_02006D54 + + arm_func_start sub_02006DB8 +sub_02006DB8: ; 0x02006DB8 + mov r0, r0, lsl #4 + add r0, r0, #0x4000000 + ldr r0, [r0, #0x400] + bx lr + arm_func_end sub_02006DB8 arm_func_start sub_02006DC8 sub_02006DC8: ; 0x02006DC8 @@ -7778,11 +8945,28 @@ _02007190: .word 0x037FEFEC _02007194: .word 0x00000AA8 _02007198: .word 0x03807978 arm_func_end sub_0200714C -_0200719C: - .byte 0x04, 0xC0, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x9F, 0xE5, 0x1C, 0xFF, 0x2F, 0xE1, 0xC0, 0xD5, 0x7F, 0x03, 0x78, 0x79, 0x80, 0x03 - .byte 0x0C, 0xC0, 0x9F, 0xE5, 0x0C, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0xD4, 0xC6, 0x7F, 0x03, 0x58, 0x79, 0x80, 0x03 + + arm_func_start sub_0200719C +sub_0200719C: ; 0x0200719C + ldr ip, _020071A8 ; =sub_037FD5C0 + ldr r0, _020071AC ; =0x03807978 + bx ip + .align 2, 0 +_020071A8: .word sub_037FD5C0 +_020071AC: .word 0x03807978 + arm_func_end sub_0200719C + + arm_func_start sub_020071B0 +sub_020071B0: ; 0x020071B0 + ldr ip, _020071C4 ; =sub_037FC6D4 + ldr r0, _020071C8 ; =0x03807958 + mov r1, #2 + mov r2, #0 + bx ip + .align 2, 0 +_020071C4: .word sub_037FC6D4 +_020071C8: .word 0x03807958 + arm_func_end sub_020071B0 arm_func_start sub_020071CC sub_020071CC: ; 0x020071CC @@ -7793,31 +8977,121 @@ sub_020071CC: ; 0x020071CC sub_020071D0: ; 0x020071D0 bx lr arm_func_end sub_020071D0 -_020071D4: - .byte 0x0C, 0xC0, 0x9F, 0xE5, 0x0C, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0xD4, 0xC6, 0x7F, 0x03, 0x58, 0x79, 0x80, 0x03 - .byte 0xF8, 0x43, 0x2D, 0xE9, 0x10, 0xD0, 0x4D, 0xE2, 0xD0, 0x00, 0x9F, 0xE5, 0xD0, 0x10, 0x9F, 0xE5 - .byte 0x08, 0x20, 0xA0, 0xE3, 0xA2, 0xF5, 0xFF, 0xEB, 0xC8, 0x00, 0x9F, 0xE5, 0xDD, 0xF8, 0xFF, 0xEB - .byte 0x4D, 0x00, 0x00, 0xEB, 0xAF, 0x03, 0x00, 0xEB, 0x3B, 0x0B, 0x00, 0xEB, 0x98, 0xFD, 0xFF, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x00, 0x30, 0xA0, 0xE1 - .byte 0xDF, 0xFD, 0xFF, 0xEB, 0x7F, 0x00, 0xA0, 0xE3, 0xD9, 0xFD, 0xFF, 0xEB, 0x70, 0xF8, 0xFF, 0xEB - .byte 0x94, 0x20, 0x9F, 0xE5, 0x01, 0x48, 0x90, 0xE2, 0x04, 0x20, 0x8D, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x08, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x20, 0xA1, 0xE2, 0x7C, 0x30, 0x9F, 0xE5 - .byte 0x70, 0x00, 0x9F, 0xE5, 0x04, 0x10, 0xA0, 0xE1, 0x31, 0xF9, 0xFF, 0xEB, 0x5C, 0x70, 0x9F, 0xE5 - .byte 0x01, 0x40, 0xA0, 0xE3, 0x0C, 0x60, 0x8D, 0xE2, 0x00, 0x80, 0xA0, 0xE3, 0x04, 0x50, 0xA0, 0xE1 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x08, 0x90, 0xA0, 0xE1 - .byte 0xAC, 0xF5, 0xFF, 0xEB, 0x0C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x04, 0x90, 0xA0, 0xE1, 0x3D, 0x00, 0x00, 0xEB - .byte 0x93, 0x0B, 0x00, 0xEB, 0x09, 0x00, 0xA0, 0xE1, 0x9F, 0x03, 0x00, 0xEB, 0x09, 0x00, 0xA0, 0xE1 - .byte 0xB3, 0x00, 0x00, 0xEB, 0xEA, 0x0A, 0x00, 0xEB, 0x77, 0xFF, 0xFF, 0xEB, 0xEB, 0xFF, 0xFF, 0xEA - .byte 0x58, 0x79, 0x80, 0x03, 0x38, 0x79, 0x80, 0x03, 0x78, 0x79, 0x80, 0x03, 0xEC, 0xEF, 0x7F, 0x03 - .byte 0xA8, 0x0A, 0x00, 0x00, 0x38, 0x40, 0x2D, 0xE9, 0x10, 0x40, 0x9D, 0xE5, 0x80, 0x51, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x54, 0xE3, 0x00, 0x40, 0xA0, 0x13, 0x01, 0x40, 0xA0, 0x03, 0x04, 0xC1, 0xA0, 0xE1 - .byte 0x14, 0xE0, 0x9D, 0xE5, 0x81, 0x11, 0x8C, 0xE1, 0x8E, 0xC0, 0x81, 0xE1, 0x18, 0x40, 0x9D, 0xE5 - .byte 0x01, 0x03, 0x80, 0xE2, 0x0C, 0x40, 0x84, 0xE1, 0x08, 0x45, 0xC0, 0xE5, 0x01, 0x13, 0x85, 0xE2 - .byte 0x10, 0x25, 0x81, 0xE5, 0x05, 0x0C, 0x81, 0xE2, 0xB4, 0x31, 0xC0, 0xE1, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x03, 0x80, 0xE2, 0x08, 0x05, 0xD0, 0xE5, 0x80, 0x00, 0x10, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xA0, 0x03, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_020071D4 +sub_020071D4: ; 0x020071D4 + ldr ip, _020071E8 ; =sub_037FC6D4 + ldr r0, _020071EC ; =0x03807958 + mov r1, #1 + mov r2, #0 + bx ip + .align 2, 0 +_020071E8: .word sub_037FC6D4 +_020071EC: .word 0x03807958 + arm_func_end sub_020071D4 + + arm_func_start sub_020071F0 +sub_020071F0: ; 0x020071F0 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0x10 + ldr r0, _020072D0 ; =0x03807958 + ldr r1, _020072D4 ; =0x03807938 + mov r2, #8 + bl sub_02004894 + ldr r0, _020072D8 ; =0x03807978 + bl sub_02005588 + bl sub_0200734C + bl sub_020080D8 + bl sub_02009F0C + bl sub_02006884 + mov r0, #0 + mov r1, r0 + mov r2, r0 + mov r3, r0 + bl sub_020069B4 + mov r0, #0x7f + bl sub_020069A4 + bl sub_02005404 + ldr r2, _020072DC ; =0x037FEFEC + adds r4, r0, #0x10000 + str r2, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + str r0, [sp] + adc r2, r1, #0 + ldr r3, _020072E0 ; =0x00000AA8 + ldr r0, _020072D8 ; =0x03807978 + mov r1, r4 + bl sub_02005734 + ldr r7, _020072D0 ; =0x03807958 + mov r4, #1 + add r6, sp, #0xc + mov r8, #0 + mov r5, r4 +_02007280: + mov r0, r7 + mov r1, r6 + mov r2, r5 + mov sb, r8 + bl sub_02004948 + ldr r0, [sp, #0xc] + cmp r0, #1 + beq _020072A8 + cmp r0, #2 + b _020072AC +_020072A8: + mov sb, r4 +_020072AC: + bl sub_020073A8 + bl sub_0200A104 + mov r0, sb + bl sub_0200813C + mov r0, sb + bl sub_02007594 + bl sub_02009E74 + bl sub_020070AC + b _02007280 + .align 2, 0 +_020072D0: .word 0x03807958 +_020072D4: .word 0x03807938 +_020072D8: .word 0x03807978 +_020072DC: .word 0x037FEFEC +_020072E0: .word 0x00000AA8 + arm_func_end sub_020071F0 + + arm_func_start sub_020072E4 +sub_020072E4: ; 0x020072E4 + 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_020072E4 + + arm_func_start sub_02007334 +sub_02007334: ; 0x02007334 + add r0, r0, #0x4000000 + ldrb r0, [r0, #0x508] + tst r0, #0x80 + movne r0, #1 + moveq r0, #0 + bx lr + arm_func_end sub_02007334 arm_func_start sub_0200734C sub_0200734C: ; 0x0200734C @@ -8612,35 +9886,141 @@ _02007DB8: _02007DC0: .word 0x03807E70 _02007DC4: .word 0x03807E48 arm_func_end sub_02007D18 -_02007DC8: - .byte 0xF8, 0x4F, 0x2D, 0xE9, 0x00, 0xA0, 0xA0, 0xE1 - .byte 0x00, 0x80, 0xA0, 0xE3, 0xC4, 0x50, 0x9F, 0xE5, 0x01, 0x90, 0xA0, 0xE1, 0x0A, 0x70, 0xA0, 0xE1 - .byte 0x08, 0xB0, 0xA0, 0xE1, 0x01, 0x40, 0xA0, 0xE3, 0x1D, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x17, 0xE3 - .byte 0x19, 0x00, 0x00, 0x0A, 0xA8, 0x00, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x54, 0x00, 0xA0, 0xE3 - .byte 0x98, 0x50, 0x26, 0xE0, 0x14, 0x08, 0x11, 0xE1, 0x13, 0x00, 0x00, 0x1A, 0x48, 0x30, 0x96, 0xE5 - .byte 0x00, 0x00, 0x53, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x4C, 0x20, 0x96, 0xE5, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x0F, 0xE0, 0xA0, 0xE1, 0x13, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x73, 0xFB, 0xFF, 0xEB, 0x22, 0xB0, 0xC6, 0xE5, 0x06, 0x00, 0xA0, 0xE1 - .byte 0xAF, 0xFF, 0xFF, 0xEB, 0x03, 0x00, 0xD6, 0xE5, 0xF8, 0x00, 0xC0, 0xE3, 0x03, 0x00, 0xC6, 0xE5 - .byte 0xFF, 0x00, 0x00, 0xE2, 0x01, 0x00, 0xC0, 0xE3, 0x03, 0x00, 0xC6, 0xE5, 0x01, 0x80, 0x88, 0xE2 - .byte 0xA7, 0x70, 0xA0, 0xE1, 0x10, 0x00, 0x58, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x57, 0xE3 - .byte 0xDD, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x19, 0xE3, 0x24, 0x00, 0x9F, 0x15, 0x00, 0x10, 0x90, 0x15 - .byte 0x0A, 0x10, 0x81, 0x11, 0x00, 0x10, 0x80, 0x15, 0x14, 0x00, 0x9F, 0x05, 0x04, 0x10, 0x90, 0x05 - .byte 0x0A, 0x10, 0x81, 0x01, 0x04, 0x10, 0x80, 0x05, 0xF8, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x70, 0x7E, 0x80, 0x03, 0x48, 0x7E, 0x80, 0x03, 0x01, 0x00, 0x11, 0xE3, 0x28, 0x10, 0x9F, 0x05 - .byte 0x00, 0x00, 0xE0, 0x01, 0x04, 0x20, 0x91, 0x05, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x81, 0x05 - .byte 0x1E, 0xFF, 0x2F, 0x01, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xE0, 0xE1, 0x00, 0x20, 0x91, 0xE5 - .byte 0x00, 0x00, 0x02, 0xE0, 0x00, 0x00, 0x81, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x48, 0x7E, 0x80, 0x03 - .byte 0x01, 0x00, 0x10, 0xE3, 0x0C, 0x00, 0x9F, 0x15, 0x00, 0x00, 0x90, 0x15, 0x04, 0x00, 0x9F, 0x05 - .byte 0x04, 0x00, 0x90, 0x05, 0x1E, 0xFF, 0x2F, 0xE1, 0x48, 0x7E, 0x80, 0x03, 0xF8, 0x43, 0x2D, 0xE9 - .byte 0x6C, 0x50, 0x9F, 0xE5, 0x00, 0x60, 0xA0, 0xE3, 0x00, 0x80, 0xA0, 0xE1, 0x01, 0x70, 0xA0, 0xE1 - .byte 0x06, 0x40, 0xA0, 0xE1, 0x54, 0x90, 0xA0, 0xE3, 0x96, 0x59, 0x22, 0xE0, 0x03, 0x10, 0xD2, 0xE5 - .byte 0x81, 0x0F, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xD2, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0x44, 0x00, 0x92, 0xE5, 0x00, 0x00, 0x58, 0xE1 - .byte 0x07, 0x00, 0x50, 0x91, 0x04, 0x00, 0x00, 0x8A, 0x02, 0x30, 0xC1, 0xE3, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0x03, 0x30, 0xC2, 0xE5, 0x2A, 0xFB, 0xFF, 0xEB, 0x01, 0x00, 0x86, 0xE2 - .byte 0xFF, 0x60, 0x00, 0xE2, 0x10, 0x00, 0x56, 0xE3, 0xEA, 0xFF, 0xFF, 0x3A, 0xF8, 0x43, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x70, 0x7E, 0x80, 0x03 + + arm_func_start sub_02007DC8 +sub_02007DC8: ; 0x02007DC8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sl, r0 + mov r8, #0 + ldr r5, _02007EA0 ; =0x03807E70 + mov sb, r1 + mov r7, sl + mov fp, r8 + mov r4, #1 + b _02007E64 +_02007DEC: + tst r7, #1 + beq _02007E5C + ldr r0, _02007EA4 ; =0x03807E48 + ldr r1, [r0, #4] + mov r0, #0x54 + mla r6, r8, r0, r5 + tst r1, r4, lsl r8 + bne _02007E5C + ldr r3, [r6, #0x48] + cmp r3, #0 + beq _02007E2C + ldr r2, [r6, #0x4c] + mov r0, r6 + mov r1, #0 + mov lr, pc + bx r3 +_02007E2C: + mov r0, r8 + mov r1, #0 + bl sub_02006C08 + strb fp, [r6, #0x22] + mov r0, r6 + bl sub_02007D04 + ldrb r0, [r6, #3] + bic r0, r0, #0xf8 + strb r0, [r6, #3] + and r0, r0, #0xff + bic r0, r0, #1 + strb r0, [r6, #3] +_02007E5C: + add r8, r8, #1 + mov r7, r7, lsr #1 +_02007E64: + cmp r8, #0x10 + bge _02007E74 + cmp r7, #0 + bne _02007DEC +_02007E74: + tst sb, #1 + ldrne r0, _02007EA4 ; =0x03807E48 + ldrne r1, [r0] + orrne r1, r1, sl + strne r1, [r0] + ldreq r0, _02007EA4 ; =0x03807E48 + 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 +_02007EA0: .word 0x03807E70 +_02007EA4: .word 0x03807E48 + arm_func_end sub_02007DC8 + + arm_func_start sub_02007EA8 +sub_02007EA8: ; 0x02007EA8 + tst r1, #1 + ldreq r1, _02007EDC ; =0x03807E48 + mvneq r0, r0 + ldreq r2, [r1, #4] + andeq r0, r2, r0 + streq r0, [r1, #4] + bxeq lr + ldr r1, _02007EDC ; =0x03807E48 + mvn r0, r0 + ldr r2, [r1] + and r0, r2, r0 + str r0, [r1] + bx lr + .align 2, 0 +_02007EDC: .word 0x03807E48 + arm_func_end sub_02007EA8 + + arm_func_start sub_02007EE0 +sub_02007EE0: ; 0x02007EE0 + tst r0, #1 + ldrne r0, _02007EF8 ; =0x03807E48 + ldrne r0, [r0] + ldreq r0, _02007EF8 ; =0x03807E48 + ldreq r0, [r0, #4] + bx lr + .align 2, 0 +_02007EF8: .word 0x03807E48 + arm_func_end sub_02007EE0 + + arm_func_start sub_02007EFC +sub_02007EFC: ; 0x02007EFC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r5, _02007F74 ; =0x03807E70 + mov r6, #0 + mov r8, r0 + mov r7, r1 + mov r4, r6 + mov sb, #0x54 +_02007F18: + mla r2, r6, sb, r5 + ldrb r1, [r2, #3] + mov r0, r1, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _02007F5C + ldrb r0, [r2, #1] + cmp r0, #0 + bne _02007F5C + ldr r0, [r2, #0x44] + cmp r8, r0 + cmpls r0, r7 + bhi _02007F5C + bic r3, r1, #2 + mov r0, r6 + mov r1, r4 + strb r3, [r2, #3] + bl sub_02006C08 +_02007F5C: + add r0, r6, #1 + and r6, r0, #0xff + cmp r6, #0x10 + blo _02007F18 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + bx lr + .align 2, 0 +_02007F74: .word 0x03807E70 + arm_func_end sub_02007EFC arm_func_start sub_02007F78 sub_02007F78: ; 0x02007F78 @@ -9057,81 +10437,389 @@ _020084A8: _020084D0: .word 0x03807E50 _020084D4: .word 0x03807E5C arm_func_end sub_02008478 -_020084D8: - .byte 0x24, 0x10, 0xA0, 0xE3, 0x90, 0x01, 0x01, 0xE0 - .byte 0x0C, 0x20, 0x9F, 0xE5, 0x01, 0x00, 0xD2, 0xE7, 0x02, 0x00, 0x80, 0xE3, 0x01, 0x00, 0xC2, 0xE7 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03, 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x65, 0xFF, 0xFF, 0xEB, 0x24, 0x00, 0xA0, 0xE3, 0x94, 0x00, 0x01, 0xE0, 0x10, 0x20, 0x9F, 0xE5 - .byte 0x01, 0x00, 0xD2, 0xE7, 0x02, 0x00, 0x80, 0xE3, 0x01, 0x00, 0xC2, 0xE7, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03, 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x24, 0x00, 0xA0, 0xE3, 0x94, 0x00, 0x01, 0xE0, 0x3C, 0x20, 0x9F, 0xE5, 0x01, 0x00, 0xD2, 0xE7 - .byte 0x80, 0x0F, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x09, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x82, 0xE0 - .byte 0xE4, 0x01, 0x00, 0xEB, 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0x52, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x13, 0x04, 0x10, 0x92, 0x15, 0x10, 0x04, 0xE0, 0x11, 0x00, 0x00, 0x01, 0x10 - .byte 0x04, 0x00, 0x82, 0x15, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03 - .byte 0x6C, 0x7E, 0x80, 0x03, 0xF0, 0x41, 0x2D, 0xE9, 0x24, 0x20, 0xA0, 0xE3, 0x90, 0x02, 0x04, 0xE0 - .byte 0x60, 0x50, 0x9F, 0xE5, 0xFF, 0x00, 0x01, 0xE2, 0x04, 0x20, 0xD5, 0xE7, 0x80, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x20, 0xC2, 0xE3, 0xA0, 0x0E, 0x82, 0xE1, 0x04, 0x00, 0xC5, 0xE7, 0x00, 0x00, 0x51, 0xE3 - .byte 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x80, 0xA0, 0xE3, 0x7F, 0x60, 0xA0, 0xE3, 0x08, 0x10, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x85, 0xE0, 0xA6, 0x01, 0x00, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0x04, 0x00, 0x00, 0x0A - .byte 0x06, 0x20, 0xA0, 0xE1, 0x04, 0x10, 0x85, 0xE0, 0x7A, 0x01, 0x00, 0xEB, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x92, 0x01, 0x00, 0xEB, 0x01, 0x80, 0x88, 0xE2, 0x10, 0x00, 0x58, 0xE3, 0xF2, 0xFF, 0xFF, 0xBA - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03, 0xF0, 0x41, 0x2D, 0xE9 - .byte 0xB8, 0x30, 0x9F, 0xE5, 0x24, 0x20, 0xA0, 0xE3, 0x90, 0x32, 0x26, 0xE0, 0x01, 0x80, 0xA0, 0xE1 - .byte 0x00, 0x70, 0xA0, 0xE3, 0x7F, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x8F, 0x01, 0x00, 0xEB, 0x00, 0x50, 0xB0, 0xE1, 0x04, 0x00, 0x00, 0x0A, 0x06, 0x10, 0xA0, 0xE1 - .byte 0x04, 0x20, 0xA0, 0xE1, 0x63, 0x01, 0x00, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x7B, 0x01, 0x00, 0xEB - .byte 0x01, 0x70, 0x87, 0xE2, 0x10, 0x00, 0x57, 0xE3, 0xF2, 0xFF, 0xFF, 0xBA, 0xD2, 0xFA, 0xFF, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x50, 0xA0, 0xE1, 0x08, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x1B, 0x02, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A - .byte 0x06, 0x00, 0xA0, 0xE1, 0x9B, 0x01, 0x00, 0xEB, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0x54, 0xE1, 0xF4, 0xFF, 0xFF, 0x3A, 0xAF, 0xFA, 0xFF, 0xEB, 0x30, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x30, 0x90, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x06, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xD6, 0xE5 - .byte 0x24, 0x00, 0xA0, 0xE3, 0x91, 0x00, 0x02, 0xE0, 0x40, 0x10, 0x83, 0xE2, 0x02, 0x00, 0x91, 0xE7 - .byte 0x04, 0x00, 0x80, 0xE0, 0x02, 0x00, 0x81, 0xE7, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xB0, 0x83, 0x80, 0x03, 0x6C, 0x7E, 0x80, 0x03, 0xF0, 0x41, 0x2D, 0xE9, 0x24, 0x30, 0xA0, 0xE3 - .byte 0x90, 0x03, 0x04, 0xE0, 0x54, 0x50, 0x9F, 0xE5, 0x01, 0x80, 0xA0, 0xE1, 0x02, 0x70, 0xA0, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE3, 0x0B, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x18, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE0, 0x59, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x07, 0x20, 0xA0, 0xE1, 0x04, 0x10, 0x85, 0xE0, 0xE7, 0x04, 0x00, 0xEB - .byte 0x01, 0x60, 0x86, 0xE2, 0xA8, 0x80, 0xA0, 0xE1, 0x10, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xAA - .byte 0x00, 0x00, 0x58, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xB0, 0x83, 0x80, 0x03, 0xF0, 0x41, 0x2D, 0xE9, 0x24, 0x30, 0xA0, 0xE3, 0x90, 0x03, 0x04, 0xE0 - .byte 0x02, 0x08, 0xA0, 0xE1, 0x54, 0x50, 0x9F, 0xE5, 0x01, 0x70, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x20, 0x88, 0xA0, 0xE1, 0x0B, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x17, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE0, 0x3D, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0xBE, 0x81, 0xC0, 0x11, 0x00, 0x10, 0xD0, 0x15, 0x80, 0x10, 0x81, 0x13, 0x00, 0x10, 0xC0, 0x15 - .byte 0x01, 0x60, 0x86, 0xE2, 0xA7, 0x70, 0xA0, 0xE1, 0x10, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xAA - .byte 0x00, 0x00, 0x57, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xB0, 0x83, 0x80, 0x03, 0xF8, 0x4F, 0x2D, 0xE9, 0x7C, 0x60, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE3 - .byte 0x00, 0xA0, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0x07, 0xB0, 0xA0, 0xE1, 0x24, 0x40, 0xA0, 0xE3 - .byte 0x97, 0x04, 0x05, 0xE0, 0x05, 0x00, 0xD6, 0xE7, 0x80, 0x0F, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x10, 0x00, 0x00, 0x0A, 0x0B, 0x80, 0xA0, 0xE1, 0x0C, 0x00, 0x00, 0xEA, 0x08, 0x10, 0xA0, 0xE1 - .byte 0x05, 0x00, 0x86, 0xE0, 0x1E, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x28, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x5A, 0xE1, 0x09, 0x00, 0x50, 0x91, 0x02, 0x00, 0x00, 0x8A - .byte 0x05, 0x00, 0x86, 0xE0, 0x37, 0x01, 0x00, 0xEB, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x80, 0x88, 0xE2 - .byte 0x10, 0x00, 0x58, 0xE3, 0xF0, 0xFF, 0xFF, 0xBA, 0x01, 0x70, 0x87, 0xE2, 0x10, 0x00, 0x57, 0xE3 - .byte 0xE6, 0xFF, 0xFF, 0xBA, 0xF8, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03 - .byte 0xF0, 0x41, 0x2D, 0xE9, 0x4C, 0x40, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE1 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x24, 0x80, 0xA0, 0xE3, 0x95, 0x08, 0x00, 0xE0, 0x00, 0x10, 0xD4, 0xE7 - .byte 0x00, 0x00, 0x84, 0xE0, 0x81, 0x1F, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1, 0x04, 0x00, 0x00, 0x0A - .byte 0x20, 0x10, 0x90, 0xE5, 0x01, 0x00, 0x57, 0xE1, 0x06, 0x00, 0x51, 0x91, 0x00, 0x00, 0x00, 0x8A - .byte 0x1C, 0x01, 0x00, 0xEB, 0x01, 0x50, 0x85, 0xE2, 0x10, 0x00, 0x55, 0xE3, 0xF1, 0xFF, 0xFF, 0xBA - .byte 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x34, 0xE0, 0x9F, 0xE5, 0x24, 0xC0, 0xA0, 0xE3, 0x90, 0xEC, 0x2C, 0xE0, 0x01, 0x00, 0x53, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x53, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x04, 0x00, 0x53, 0xE3 - .byte 0x01, 0x20, 0x8C, 0x07, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x20, 0xCC, 0xE7, 0x00, 0x00, 0x00, 0xEA - .byte 0xB1, 0x20, 0x8C, 0xE1, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03 - .byte 0xF8, 0x4F, 0x2D, 0xE9, 0x24, 0x40, 0xA0, 0xE3, 0x90, 0x04, 0x05, 0xE0, 0x03, 0x80, 0xA0, 0xE1 - .byte 0x08, 0x08, 0xA0, 0xE1, 0x28, 0x70, 0x9D, 0xE5, 0x01, 0xA0, 0xA0, 0xE1, 0x02, 0x90, 0xA0, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE3, 0x20, 0xB8, 0xA0, 0xE1, 0xFF, 0x40, 0x08, 0xE2, 0x13, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0x1A, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x58, 0x00, 0x9F, 0xE5, 0x06, 0x10, 0xA0, 0xE1 - .byte 0x05, 0x00, 0x80, 0xE0, 0xD2, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0x57, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x57, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x04, 0x00, 0x57, 0xE3, 0x09, 0x80, 0x80, 0x07, 0x02, 0x00, 0x00, 0xEA, 0x09, 0x40, 0xC0, 0xE7 - .byte 0x00, 0x00, 0x00, 0xEA, 0xB9, 0xB0, 0x80, 0xE1, 0x01, 0x60, 0x86, 0xE2, 0xAA, 0xA0, 0xA0, 0xE1 - .byte 0x10, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x5A, 0xE3, 0xE7, 0xFF, 0xFF, 0x1A - .byte 0xF8, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xB0, 0x83, 0x80, 0x03 + + arm_func_start sub_020084D8 +sub_020084D8: ; 0x020084D8 + mov r1, #0x24 + mul r1, r0, r1 + ldr r2, _020084F4 ; =0x038083B0 + ldrb r0, [r2, r1] + orr r0, r0, #2 + strb r0, [r2, r1] + bx lr + .align 2, 0 +_020084F4: .word 0x038083B0 + arm_func_end sub_020084D8 + + arm_func_start sub_020084F8 +sub_020084F8: ; 0x020084F8 + stmdb sp!, {r4, lr} + mov r4, r0 + bl sub_0200829C + mov r0, #0x24 + mul r1, r4, r0 + ldr r2, _02008524 ; =0x038083B0 + ldrb r0, [r2, r1] + orr r0, r0, #2 + strb r0, [r2, r1] + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_02008524: .word 0x038083B0 + arm_func_end sub_020084F8 + + arm_func_start sub_02008528 +sub_02008528: ; 0x02008528 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0x24 + mul r1, r4, r0 + ldr r2, _0200857C ; =0x038083B0 + ldrb r0, [r2, r1] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _02008574 + add r0, r2, r1 + bl sub_02008CE8 + ldr r0, _02008580 ; =0x03807E6C + 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] +_02008574: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0200857C: .word 0x038083B0 +_02008580: .word 0x03807E6C + arm_func_end sub_02008528 + + arm_func_start sub_02008584 +sub_02008584: ; 0x02008584 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r2, #0x24 + mul r4, r0, r2 + ldr r5, _020085F8 ; =0x038083B0 + 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 _020085F0 + mov r8, #0 + mov r6, #0x7f +_020085BC: + mov r1, r8 + add r0, r5, r4 + bl sub_02008C64 + movs r7, r0 + beq _020085E4 + mov r2, r6 + add r1, r5, r4 + bl sub_02008BC8 + mov r0, r7 + bl sub_02008C30 +_020085E4: + add r8, r8, #1 + cmp r8, #0x10 + blt _020085BC +_020085F0: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + .align 2, 0 +_020085F8: .word 0x038083B0 + arm_func_end sub_02008584 + + arm_func_start sub_020085FC +sub_020085FC: ; 0x020085FC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r3, _020086C0 ; =0x038083B0 + mov r2, #0x24 + mla r6, r0, r2, r3 + mov r8, r1 + mov r7, #0 + mov r4, #0x7f +_02008618: + mov r0, r6 + mov r1, r7 + bl sub_02008C64 + movs r5, r0 + beq _02008640 + mov r1, r6 + mov r2, r4 + bl sub_02008BC8 + mov r0, r5 + bl sub_02008C30 +_02008640: + add r7, r7, #1 + cmp r7, #0x10 + blt _02008618 + bl sub_0200719C + mov r4, #0 + mov r5, r4 + b _02008680 +_0200865C: + mov r0, r6 + mov r1, r5 + bl sub_02008ED8 + cmp r0, #0 + beq _0200867C + mov r0, r6 + bl sub_02008CE8 + b _02008688 +_0200867C: + add r4, r4, #1 +_02008680: + cmp r4, r8 + blo _0200865C +_02008688: + bl sub_0200714C + ldr r0, _020086C4 ; =0x03807E6C + ldr r3, [r0] + cmp r3, #0 + beq _020086B8 + 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] +_020086B8: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + .align 2, 0 +_020086C0: .word 0x038083B0 +_020086C4: .word 0x03807E6C + arm_func_end sub_020085FC + + arm_func_start sub_020086C8 +sub_020086C8: ; 0x020086C8 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r3, #0x24 + mul r4, r0, r3 + ldr r5, _02008730 ; =0x038083B0 + mov r8, r1 + mov r7, r2 + mov r6, #0 + b _02008718 +_020086E8: + tst r8, #1 + beq _02008710 + mov r1, r6 + add r0, r5, r4 + bl sub_02008C64 + cmp r0, #0 + beq _02008710 + mov r2, r7 + add r1, r5, r4 + bl sub_02009AB0 +_02008710: + add r6, r6, #1 + mov r8, r8, lsr #1 +_02008718: + cmp r6, #0x10 + bge _02008728 + cmp r8, #0 + bne _020086E8 +_02008728: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + .align 2, 0 +_02008730: .word 0x038083B0 + arm_func_end sub_020086C8 + + arm_func_start sub_02008734 +sub_02008734: ; 0x02008734 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r3, #0x24 + mul r4, r0, r3 + mov r0, r2, lsl #0x10 + ldr r5, _020087A0 ; =0x038083B0 + mov r7, r1 + mov r6, #0 + mov r8, r0, lsr #0x10 + b _02008788 +_02008758: + tst r7, #1 + beq _02008780 + mov r1, r6 + add r0, r5, r4 + bl sub_02008C64 + cmp r0, #0 + strneh r8, [r0, #0x1e] + ldrneb r1, [r0] + orrne r1, r1, #0x80 + strneb r1, [r0] +_02008780: + add r6, r6, #1 + mov r7, r7, lsr #1 +_02008788: + cmp r6, #0x10 + bge _02008798 + cmp r7, #0 + bne _02008758 +_02008798: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + .align 2, 0 +_020087A0: .word 0x038083B0 + arm_func_end sub_02008734 + + arm_func_start sub_020087A4 +sub_020087A4: ; 0x020087A4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r6, _0200882C ; =0x038083B0 + mov r7, #0 + mov sl, r0 + mov sb, r1 + mov fp, r7 + mov r4, #0x24 +_020087C0: + mul r5, r7, r4 + ldrb r0, [r6, r5] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + beq _02008818 + mov r8, fp + b _02008810 +_020087DC: + mov r1, r8 + add r0, r6, r5 + bl sub_02008C64 + cmp r0, #0 + beq _0200880C + ldr r0, [r0, #0x28] + cmp sl, r0 + cmpls r0, sb + bhi _0200880C + add r0, r6, r5 + bl sub_02008CE8 + b _02008818 +_0200880C: + add r8, r8, #1 +_02008810: + cmp r8, #0x10 + blt _020087DC +_02008818: + add r7, r7, #1 + cmp r7, #0x10 + blt _020087C0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + .align 2, 0 +_0200882C: .word 0x038083B0 + arm_func_end sub_020087A4 + + arm_func_start sub_02008830 +sub_02008830: ; 0x02008830 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r4, _02008888 ; =0x038083B0 + mov r7, r0 + mov r6, r1 + mov r5, #0 + mov r8, #0x24 +_02008848: + mul r0, r5, r8 + ldrb r1, [r4, r0] + add r0, r4, r0 + mov r1, r1, lsl #0x1f + movs r1, r1, lsr #0x1f + beq _02008874 + ldr r1, [r0, #0x20] + cmp r7, r1 + cmpls r1, r6 + bhi _02008874 + bl sub_02008CE8 +_02008874: + add r5, r5, #1 + cmp r5, #0x10 + blt _02008848 + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + .align 2, 0 +_02008888: .word 0x038083B0 + arm_func_end sub_02008830 + + arm_func_start sub_0200888C +sub_0200888C: ; 0x0200888C + stmdb sp!, {r3, lr} + ldr lr, _020088CC ; =0x038083B0 + mov ip, #0x24 + mla ip, r0, ip, lr + cmp r3, #1 + beq _020088B8 + cmp r3, #2 + beq _020088C0 + cmp r3, #4 + streq r2, [ip, r1] + b _020088C4 +_020088B8: + strb r2, [ip, r1] + b _020088C4 +_020088C0: + strh r2, [ip, r1] +_020088C4: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_020088CC: .word 0x038083B0 + arm_func_end sub_0200888C + + arm_func_start sub_020088D0 +sub_020088D0: ; 0x020088D0 + 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 _02008950 +_02008900: + tst sl, #1 + beq _02008948 + ldr r0, _02008968 ; =0x038083B0 + mov r1, r6 + add r0, r0, r5 + bl sub_02008C64 + cmp r0, #0 + beq _02008948 + cmp r7, #1 + beq _0200893C + cmp r7, #2 + beq _02008944 + cmp r7, #4 + streq r8, [r0, sb] + b _02008948 +_0200893C: + strb r4, [r0, sb] + b _02008948 +_02008944: + strh fp, [r0, sb] +_02008948: + add r6, r6, #1 + mov sl, sl, lsr #1 +_02008950: + cmp r6, #0x10 + bge _02008960 + cmp sl, #0 + bne _02008900 +_02008960: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + .align 2, 0 +_02008968: .word 0x038083B0 + arm_func_end sub_020088D0 arm_func_start sub_0200896C sub_0200896C: ; 0x0200896C @@ -10695,48 +12383,216 @@ _02009E30: ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} bx lr arm_func_end sub_02009CF0 -_02009E38: - .byte 0x14, 0xC0, 0x9F, 0xE5, 0x24, 0x30, 0xA0, 0xE3 - .byte 0x00, 0xC0, 0x9C, 0xE5, 0x90, 0xC3, 0x23, 0xE0, 0x81, 0x00, 0x83, 0xE0, 0xB0, 0x22, 0xC0, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x6C, 0x7E, 0x80, 0x03, 0x10, 0x20, 0x9F, 0xE5, 0x00, 0x20, 0x92, 0xE5 - .byte 0x80, 0x00, 0x82, 0xE0, 0x02, 0x0C, 0x80, 0xE2, 0xB0, 0x16, 0xC0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x6C, 0x7E, 0x80, 0x03, 0xF8, 0x40, 0x2D, 0xE9, 0x88, 0x00, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x90, 0xE5, 0x04, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x1B, 0x00, 0x00, 0x0A - .byte 0x04, 0x70, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0xA5, 0xF3, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x16, 0x07, 0x84, 0x11, 0x00, 0x08, 0xA0, 0x11, 0x01, 0x70, 0x87, 0xE2 - .byte 0x20, 0x48, 0xA0, 0x11, 0x10, 0x00, 0x57, 0xE3, 0xF6, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x1B, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x85, 0x13, 0x00, 0x08, 0xA0, 0x11 - .byte 0x20, 0x58, 0xA0, 0x11, 0x01, 0x00, 0xA0, 0xE3, 0x15, 0xF5, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x85, 0x13, 0x00, 0x08, 0xA0, 0x11, 0x20, 0x58, 0xA0, 0x11, 0x14, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x10, 0x90, 0xE5, 0xB8, 0x40, 0xC1, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0xBA, 0x50, 0xC0, 0xE1 - .byte 0xF8, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x6C, 0x7E, 0x80, 0x03, 0x20, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x03, 0x20, 0xA0, 0xE1, 0x03, 0x03, 0x81, 0xE0, 0x80, 0x2F, 0xC0, 0xE5 - .byte 0x01, 0x30, 0x83, 0xE2, 0x81, 0x2F, 0xC0, 0xE5, 0x08, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x70, 0x7E, 0x80, 0x03, 0xF0, 0x41, 0x2D, 0xE9, 0x4C, 0xE0, 0x9F, 0xE5 - .byte 0x18, 0x40, 0x9D, 0xE5, 0x00, 0xC3, 0xDE, 0xE7, 0x01, 0x70, 0xA0, 0xE1, 0x02, 0x60, 0xA0, 0xE1 - .byte 0x03, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x5C, 0xE3, 0x00, 0x83, 0x8E, 0xE0, 0x03, 0x00, 0x00, 0x0A - .byte 0x14, 0x00, 0x88, 0xE2, 0x0F, 0xEE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0xC8, 0xE5 - .byte 0x04, 0x70, 0x88, 0xE5, 0x08, 0x60, 0x88, 0xE5, 0x0C, 0x50, 0x88, 0xE5, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x10, 0x40, 0x88, 0xE5, 0x01, 0x00, 0xC8, 0xE5, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF0, 0x8D, 0x80, 0x03, 0xF0, 0x43, 0x2D, 0xE9, 0x0C, 0xD0, 0x4D, 0xE2, 0xA4, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x90, 0xA0, 0xE1, 0x09, 0x03, 0xD1, 0xE7, 0x09, 0x83, 0x81, 0xE0, 0x00, 0x00, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x0A, 0x14, 0x00, 0x88, 0xE2, 0xFA, 0xED, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x00, 0xC8, 0xE5, 0x01, 0x10, 0xD8, 0xE5, 0x0C, 0x70, 0x98, 0xE5, 0x10, 0x60, 0x98, 0xE5 - .byte 0x14, 0x00, 0x88, 0xE2, 0x04, 0x50, 0x98, 0xE5, 0x08, 0x40, 0x98, 0xE5, 0x01, 0x94, 0x89, 0xE1 - .byte 0x68, 0xED, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x00, 0x00, 0x57, 0x03, 0x06, 0x00, 0x00, 0x1A - .byte 0x54, 0x30, 0x9F, 0xE5, 0x05, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x14, 0x00, 0x88, 0xE2 - .byte 0x00, 0x90, 0x8D, 0xE5, 0xAE, 0xED, 0xFF, 0xEB, 0x09, 0x00, 0x00, 0xEA, 0xFC, 0xEC, 0xFF, 0xEB - .byte 0x34, 0x20, 0x9F, 0xE5, 0x00, 0x00, 0x95, 0xE0, 0x04, 0x02, 0x8D, 0xE9, 0x01, 0x20, 0xA4, 0xE0 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1, 0x14, 0x00, 0x88, 0xE2, 0x00, 0x60, 0x8D, 0xE5 - .byte 0xBF, 0xED, 0xFF, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0xC8, 0xE5, 0x0C, 0xD0, 0x8D, 0xE2 - .byte 0xF0, 0x43, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF0, 0x8D, 0x80, 0x03, 0xA8, 0x1E, 0x80, 0x03 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x30, 0x20, 0x9F, 0xE5, 0x00, 0x13, 0xD2, 0xE7, 0x00, 0x43, 0x82, 0xE0 - .byte 0x00, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x0A, 0x14, 0x00, 0x84, 0xE2, 0xCD, 0xED, 0xFF, 0xEB - .byte 0x01, 0x10, 0xD4, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x81, 0xE2, 0x01, 0x10, 0xC4, 0xE5 - .byte 0x00, 0x00, 0xC4, 0xE5, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF0, 0x8D, 0x80, 0x03 - .byte 0x70, 0x40, 0x2D, 0xE9, 0x00, 0x60, 0xA0, 0xE1, 0x07, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x51, 0xF1, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0xBA, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02009E38 +sub_02009E38: ; 0x02009E38 + ldr ip, _02009E54 ; =0x03807E6C + 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 +_02009E54: .word 0x03807E6C + arm_func_end sub_02009E38 + + arm_func_start sub_02009E58 +sub_02009E58: ; 0x02009E58 + ldr r2, _02009E70 ; =0x03807E6C + ldr r2, [r2] + add r0, r2, r0, lsl #1 + add r0, r0, #0x200 + strh r1, [r0, #0x60] + bx lr + .align 2, 0 +_02009E70: .word 0x03807E6C + arm_func_end sub_02009E58 + + arm_func_start sub_02009E74 +sub_02009E74: ; 0x02009E74 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _02009F08 ; =0x03807E6C + mov r4, #0 + ldr r0, [r0] + mov r5, r4 + cmp r0, #0 + beq _02009F00 + mov r7, r4 + mov r6, #1 +_02009E98: + mov r0, r7 + bl sub_02006D38 + 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 _02009E98 + mov r0, #0 + bl sub_02007334 + cmp r0, #0 + orrne r0, r5, #1 + movne r0, r0, lsl #0x10 + movne r5, r0, lsr #0x10 + mov r0, #1 + bl sub_02007334 + cmp r0, #0 + orrne r0, r5, #2 + movne r0, r0, lsl #0x10 + movne r5, r0, lsr #0x10 + ldr r0, _02009F08 ; =0x03807E6C + ldr r1, [r0] + strh r4, [r1, #8] + ldr r0, [r0] + strh r5, [r0, #0xa] +_02009F00: + ldmia sp!, {r3, r4, r5, r6, r7, lr} + bx lr + .align 2, 0 +_02009F08: .word 0x03807E6C + arm_func_end sub_02009E74 + + arm_func_start sub_02009F0C +sub_02009F0C: ; 0x02009F0C + ldr r1, _02009F34 ; =0x03807E70 + mov r3, #0 + mov r2, r3 +_02009F18: + add r0, r1, r3, lsl #6 + strb r2, [r0, #0xf80] + add r3, r3, #1 + strb r2, [r0, #0xf81] + cmp r3, #8 + blt _02009F18 + bx lr + .align 2, 0 +_02009F34: .word 0x03807E70 + arm_func_end sub_02009F0C + + arm_func_start sub_02009F38 +sub_02009F38: ; 0x02009F38 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr lr, _02009F90 ; =sub_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 _02009F70 + add r0, r8, #0x14 + bl sub_020057A8 + mov r0, #0 + strb r0, [r8] +_02009F70: + 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 +_02009F90: .word sub_03808DF0 + arm_func_end sub_02009F38 + + arm_func_start sub_02009F94 +sub_02009F94: ; 0x02009F94 + stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #0xc + ldr r1, _0200A048 ; =sub_03808DF0 + mov sb, r0 + ldrb r0, [r1, sb, lsl #6] + add r8, r1, sb, lsl #6 + cmp r0, #0 + beq _02009FC4 + add r0, r8, #0x14 + bl sub_020057A8 + mov r0, #0 + strb r0, [r8] +_02009FC4: + 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_02005588 + cmp r6, #0 + cmpeq r7, #0 + bne _0200A00C + ldr r3, _0200A04C ; =0x03801EA8 + mov r1, r5 + mov r2, r4 + add r0, r8, #0x14 + str sb, [sp] + bl sub_020056C4 + b _0200A034 +_0200A00C: + bl sub_02005404 + ldr r2, _0200A04C ; =0x03801EA8 + 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_02005734 +_0200A034: + mov r0, #1 + strb r0, [r8] + add sp, sp, #0xc + ldmia sp!, {r4, r5, r6, r7, r8, sb, lr} + bx lr + .align 2, 0 +_0200A048: .word sub_03808DF0 +_0200A04C: .word 0x03801EA8 + arm_func_end sub_02009F94 + + arm_func_start sub_0200A050 +sub_0200A050: ; 0x0200A050 + stmdb sp!, {r4, lr} + ldr r2, _0200A08C ; =sub_03808DF0 + ldrb r1, [r2, r0, lsl #6] + add r4, r2, r0, lsl #6 + cmp r1, #0 + beq _0200A084 + add r0, r4, #0x14 + bl sub_020057A8 + ldrb r1, [r4, #1] + mov r0, #0 + add r1, r1, #1 + strb r1, [r4, #1] + strb r0, [r4] +_0200A084: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0200A08C: .word sub_03808DF0 + arm_func_end sub_0200A050 + + arm_func_start sub_0200A090 +sub_0200A090: ; 0x0200A090 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, #7 + mov r4, #0 +_0200A0A0: + mov r0, r5 + mov r1, r6 + mov r2, r4 + bl sub_020065F8 + cmp r0, #0 + blt _0200A0A0 + ldmia sp!, {r4, r5, r6, lr} + bx lr + arm_func_end sub_0200A090 arm_func_start sub_0200A0C0 sub_0200A0C0: ; 0x0200A0C0 @@ -10759,120 +12615,540 @@ _0200A0F8: .word 0x03809010 _0200A0FC: .word 0x038025CC _0200A100: .word 0x03807E6C arm_func_end sub_0200A0C0 -_0200A104: - .byte 0xF0, 0x4F, 0x2D, 0xE9, 0x34, 0xD0, 0x4D, 0xE2, 0x9A, 0x01, 0x00, 0xEA - .byte 0x88, 0xA6, 0x9F, 0xE5, 0x18, 0x60, 0x9D, 0xE5, 0x01, 0x40, 0x4A, 0xE2, 0x8F, 0x01, 0x00, 0xEA - .byte 0x1C, 0x50, 0x8D, 0xE2, 0x0F, 0x00, 0xB6, 0xE8, 0x0F, 0x00, 0xA5, 0xE8, 0x03, 0x00, 0x96, 0xE8 - .byte 0x03, 0x00, 0x85, 0xE8, 0x20, 0x00, 0x9D, 0xE5, 0x21, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90 - .byte 0x85, 0x01, 0x00, 0xEA, 0x20, 0x00, 0x00, 0xEA, 0x25, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA - .byte 0x2C, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x31, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA - .byte 0x39, 0x00, 0x00, 0xEA, 0x42, 0x00, 0x00, 0xEA, 0x46, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEA - .byte 0x50, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, 0xEA, 0x86, 0x00, 0x00, 0xEA, 0xFC, 0x00, 0x00, 0xEA - .byte 0x1B, 0x01, 0x00, 0xEA, 0x28, 0x01, 0x00, 0xEA, 0xAB, 0x00, 0x00, 0xEA, 0xBC, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xD4, 0x00, 0x00, 0xEA, 0xE5, 0x00, 0x00, 0xEA, 0x2E, 0x01, 0x00, 0xEA - .byte 0x30, 0x01, 0x00, 0xEA, 0x32, 0x01, 0x00, 0xEA, 0x34, 0x01, 0x00, 0xEA, 0x39, 0x01, 0x00, 0xEA - .byte 0x3C, 0x01, 0x00, 0xEA, 0x3F, 0x01, 0x00, 0xEA, 0x4E, 0x01, 0x00, 0xEA, 0x41, 0x01, 0x00, 0xEA - .byte 0x44, 0x01, 0x00, 0xEA, 0x47, 0x01, 0x00, 0xEA, 0x4E, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5 - .byte 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5, 0x30, 0x30, 0x9D, 0xE5, 0xC5, 0xF8, 0xFF, 0xEB - .byte 0x5D, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0xCE, 0xF8, 0xFF, 0xEB, 0x5A, 0x01, 0x00, 0xEA - .byte 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5, 0x30, 0x30, 0x9D, 0xE5 - .byte 0x25, 0xF8, 0xFF, 0xEB, 0x54, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0xB1, 0xF8, 0xFF, 0xEB - .byte 0x51, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5, 0xD8, 0xF8, 0xFF, 0xEB - .byte 0x4D, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5, 0xF2, 0xF8, 0xFF, 0xEB - .byte 0x49, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5 - .byte 0x30, 0x30, 0x9D, 0xE5, 0x90, 0xF9, 0xFF, 0xEB, 0x43, 0x01, 0x00, 0xEA, 0x24, 0x10, 0x9D, 0xE5 - .byte 0x21, 0x0C, 0xA0, 0xE1, 0xFF, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x8D, 0xE5, 0xFF, 0x04, 0xC1, 0xE3 - .byte 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5, 0x30, 0x30, 0x9D, 0xE5, 0x97, 0xF9, 0xFF, 0xEB - .byte 0x39, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5 - .byte 0x10, 0xF9, 0xFF, 0xEB, 0x34, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0x2C, 0x20, 0x9D, 0xE5, 0x26, 0xF9, 0xFF, 0xEB, 0x2F, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5 - .byte 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5, 0x02, 0x28, 0xA0, 0xE1, 0x42, 0x28, 0xA0, 0xE1 - .byte 0xE0, 0xFE, 0xFF, 0xEB, 0x28, 0x01, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0x01, 0x18, 0xA0, 0xE1, 0x41, 0x18, 0xA0, 0xE1, 0xE2, 0xFE, 0xFF, 0xEB, 0x22, 0x01, 0x00, 0xEA - .byte 0x2C, 0x70, 0x9D, 0xE5, 0x28, 0x60, 0x9D, 0xE5, 0x24, 0x50, 0x9D, 0xE5, 0x01, 0xEF, 0xFF, 0xEB - .byte 0x00, 0x80, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE3, 0x07, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x15, 0xE3 - .byte 0x02, 0x02, 0xA0, 0x11, 0x01, 0x03, 0x80, 0x12, 0x03, 0x14, 0xD0, 0x15, 0x01, 0x20, 0x82, 0xE2 - .byte 0x80, 0x10, 0x81, 0x13, 0x03, 0x14, 0xC0, 0x15, 0xA5, 0x50, 0xA0, 0xE1, 0x10, 0x00, 0x52, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x55, 0xE3, 0xF3, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x16, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x16, 0xE3, 0xB0, 0x10, 0xD4, 0x11, 0x80, 0x00, 0x81, 0x13 - .byte 0x02, 0x09, 0x80, 0x13, 0xB0, 0x00, 0xC4, 0x11, 0x00, 0x00, 0xD4, 0x05, 0x80, 0x00, 0x80, 0x03 - .byte 0x00, 0x00, 0xC4, 0x05, 0x03, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x16, 0xE3, 0x00, 0x00, 0xDA, 0x15 - .byte 0x80, 0x00, 0x80, 0x13, 0x00, 0x00, 0xCA, 0x15, 0x00, 0x50, 0xA0, 0xE3, 0x05, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0x17, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0xFF, 0xFF, 0xEB - .byte 0x01, 0x50, 0x85, 0xE2, 0xA7, 0x70, 0xA0, 0xE1, 0x08, 0x00, 0x55, 0xE3, 0x01, 0x00, 0x00, 0xAA - .byte 0x00, 0x00, 0x57, 0xE3, 0xF5, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0xA0, 0xE1, 0xDA, 0xEE, 0xFF, 0xEB - .byte 0xB7, 0xFE, 0xFF, 0xEB, 0xF0, 0x00, 0x00, 0xEA, 0x30, 0x90, 0x9D, 0xE5, 0x2C, 0x70, 0x9D, 0xE5 - .byte 0x28, 0x60, 0x9D, 0xE5, 0x24, 0x50, 0x9D, 0xE5, 0xCE, 0xEE, 0xFF, 0xEB, 0x00, 0xB0, 0xA0, 0xE1 - .byte 0x00, 0x80, 0xA0, 0xE3, 0x05, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x17, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x08, 0x00, 0xA0, 0xE1, 0x21, 0xFF, 0xFF, 0xEB, 0x01, 0x80, 0x88, 0xE2, 0xA7, 0x70, 0xA0, 0xE1 - .byte 0x08, 0x00, 0x58, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x57, 0xE3, 0xF5, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x70, 0xA0, 0xE3, 0x06, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x15, 0xE3, 0x02, 0x00, 0x00, 0x0A - .byte 0x07, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x02, 0xF2, 0xFF, 0xEB, 0x01, 0x70, 0x87, 0xE2 - .byte 0xA5, 0x50, 0xA0, 0xE1, 0x10, 0x00, 0x57, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x55, 0xE3 - .byte 0xF4, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x16, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xC4, 0x15 - .byte 0x02, 0x00, 0x16, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x00, 0x00, 0xCA, 0x15, 0x0B, 0x00, 0xA0, 0xE1 - .byte 0xB1, 0xEE, 0xFF, 0xEB, 0x8E, 0xFE, 0xFF, 0xEB, 0xC7, 0x00, 0x00, 0xEA, 0x2C, 0x10, 0x9D, 0xE5 - .byte 0xA1, 0x0E, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x8D, 0xE5, 0x21, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x00, 0xE2, 0x04, 0x00, 0x8D, 0xE5, 0xA1, 0x0D, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xE2 - .byte 0x08, 0x00, 0x8D, 0xE5, 0xA1, 0x0F, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xE2, 0x21, 0x1F, 0xA0, 0xE1 - .byte 0x01, 0x10, 0x01, 0xE2, 0x24, 0x20, 0x9D, 0xE5, 0x28, 0x30, 0x9D, 0xE5, 0x98, 0xF3, 0xFF, 0xEB - .byte 0xB5, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x04, 0x00, 0x8D, 0xE5 - .byte 0x2C, 0x30, 0x9D, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x9D, 0xE5 - .byte 0x28, 0x10, 0x9D, 0xE5, 0xA3, 0xFE, 0xFF, 0xEB, 0xAB, 0x00, 0x00, 0xEA, 0x28, 0x60, 0x9D, 0xE5 - .byte 0x24, 0x50, 0x9D, 0xE5, 0x00, 0x70, 0xA0, 0xE3, 0x06, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x15, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0xF5, 0xF1, 0xFF, 0xEB - .byte 0x01, 0x70, 0x87, 0xE2, 0xA5, 0x50, 0xA0, 0xE1, 0x10, 0x00, 0x57, 0xE3, 0x9E, 0x00, 0x00, 0xAA - .byte 0x00, 0x00, 0x55, 0xE3, 0xF4, 0xFF, 0xFF, 0x1A, 0x9B, 0x00, 0x00, 0xEA, 0x2C, 0x70, 0x9D, 0xE5 - .byte 0x28, 0x60, 0x9D, 0xE5, 0x24, 0x50, 0x9D, 0xE5, 0x00, 0x80, 0xA0, 0xE3, 0x07, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0x15, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1 - .byte 0x07, 0x20, 0xA0, 0xE1, 0xC5, 0xF1, 0xFF, 0xEB, 0x01, 0x80, 0x88, 0xE2, 0xA5, 0x50, 0xA0, 0xE1 - .byte 0x10, 0x00, 0x58, 0xE3, 0x8C, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x55, 0xE3, 0xF3, 0xFF, 0xFF, 0x1A - .byte 0x89, 0x00, 0x00, 0xEA, 0x28, 0x60, 0x9D, 0xE5, 0x24, 0x50, 0x9D, 0xE5, 0x00, 0x70, 0xA0, 0xE3 - .byte 0x06, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x15, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0xD9, 0xF1, 0xFF, 0xEB, 0x01, 0x70, 0x87, 0xE2, 0xA5, 0x50, 0xA0, 0xE1 - .byte 0x10, 0x00, 0x57, 0xE3, 0x7C, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x55, 0xE3, 0xF4, 0xFF, 0xFF, 0x1A - .byte 0x79, 0x00, 0x00, 0xEA, 0x30, 0x30, 0x9D, 0xE5, 0x24, 0x00, 0x9D, 0xE5, 0x03, 0x18, 0xA0, 0xE1 - .byte 0x2C, 0x20, 0x9D, 0xE5, 0x21, 0x18, 0xA0, 0xE1, 0x00, 0x10, 0x8D, 0xE5, 0x10, 0x12, 0x9F, 0xE5 - .byte 0x01, 0x10, 0x02, 0xE0, 0x04, 0x10, 0x8D, 0xE5, 0x22, 0x1C, 0xA0, 0xE1, 0x7F, 0x10, 0x01, 0xE2 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x22, 0x1B, 0xA0, 0xE1, 0x03, 0x10, 0x01, 0xE2, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x20, 0x18, 0xA0, 0xE1, 0x01, 0x18, 0xA0, 0xE1, 0x21, 0x18, 0xA0, 0xE1, 0x10, 0x10, 0x8D, 0xE5 - .byte 0x23, 0x18, 0xA0, 0xE1, 0x23, 0x2C, 0xA0, 0xE1, 0x7F, 0x10, 0x01, 0xE2, 0x14, 0x10, 0x8D, 0xE5 - .byte 0x28, 0x10, 0x9D, 0xE5, 0x00, 0x08, 0xA0, 0xE1, 0x23, 0x3D, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x3E, 0x13, 0xC1, 0xE3, 0x03, 0x20, 0x02, 0xE2, 0x03, 0x30, 0x03, 0xE2, 0xFE, 0xF0, 0xFF, 0xEB - .byte 0x59, 0x00, 0x00, 0xEA, 0x2C, 0x10, 0x9D, 0xE5, 0x28, 0x30, 0x9D, 0xE5, 0x01, 0x04, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x00, 0x00, 0x8D, 0xE5, 0x7F, 0x00, 0x01, 0xE2, 0x04, 0x00, 0x8D, 0xE5 - .byte 0x24, 0x00, 0x9D, 0xE5, 0x30, 0x10, 0x9D, 0xE5, 0x7F, 0x20, 0x03, 0xE2, 0x23, 0x34, 0xA0, 0xE1 - .byte 0x03, 0x30, 0x03, 0xE2, 0x23, 0xF1, 0xFF, 0xEB, 0x4B, 0x00, 0x00, 0xEA, 0x2C, 0x10, 0x9D, 0xE5 - .byte 0x28, 0x20, 0x9D, 0xE5, 0x7F, 0x00, 0x01, 0xE2, 0x00, 0x00, 0x8D, 0xE5, 0x01, 0x04, 0xA0, 0xE1 - .byte 0x20, 0x38, 0xA0, 0xE1, 0x24, 0x00, 0x9D, 0xE5, 0x7F, 0x10, 0x02, 0xE2, 0x22, 0x24, 0xA0, 0xE1 - .byte 0x03, 0x20, 0x02, 0xE2, 0x42, 0xF1, 0xFF, 0xEB, 0x3F, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5 - .byte 0xD8, 0xF1, 0xFF, 0xEB, 0x3C, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0xCC, 0xF0, 0xFF, 0xEB - .byte 0x39, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0xB5, 0xF1, 0xFF, 0xEB, 0x36, 0x00, 0x00, 0xEA - .byte 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5, 0x2C, 0x20, 0x9D, 0xE5, 0x30, 0x30, 0x9D, 0xE5 - .byte 0xC7, 0xF0, 0xFF, 0xEB, 0x30, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0xC8, 0xF5, 0xFF, 0xEB, 0x2C, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0xFC, 0xF5, 0xFF, 0xEB, 0x28, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0x94, 0xF5, 0xFF, 0xEB, 0x24, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0x33, 0xF8, 0xFF, 0xEB, 0x20, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0x52, 0xF8, 0xFF, 0xEB, 0x1C, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x9D, 0xE5, 0x28, 0x10, 0x9D, 0xE5 - .byte 0x01, 0xF6, 0xFF, 0xEB, 0x18, 0x00, 0x00, 0xEA, 0x24, 0x10, 0x9D, 0xE5, 0xA4, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x10, 0x80, 0xE5, 0x14, 0x00, 0x00, 0xEA, 0x24, 0x50, 0x9D, 0xE5, 0x98, 0x00, 0x9F, 0xE5 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x46, 0x2D, 0xA0, 0xE3, 0xAD, 0xEE, 0xFF, 0xEB, 0x88, 0x00, 0x9F, 0xE5 - .byte 0x01, 0x1A, 0x85, 0xE2, 0xC0, 0x01, 0x81, 0xE5, 0x00, 0x60, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1 - .byte 0xA0, 0xF1, 0xFF, 0xEB, 0x06, 0x11, 0x85, 0xE0, 0x01, 0x1A, 0x81, 0xE2, 0x80, 0x01, 0x81, 0xE5 - .byte 0x01, 0x60, 0x86, 0xE2, 0x10, 0x00, 0x56, 0xE3, 0xF7, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xE2, 0xF5, 0xFF, 0xEB, 0x01, 0x1A, 0x85, 0xE2, 0xC4, 0x01, 0x81, 0xE5, 0x1C, 0x60, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x56, 0xE3, 0x6D, 0xFE, 0xFF, 0x1A, 0x38, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5 - .byte 0x00, 0x00, 0x91, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x00, 0x00, 0x81, 0xE5, 0x2C, 0x00, 0x9F, 0xE5 - .byte 0x18, 0x10, 0x8D, 0xE2, 0x00, 0x20, 0xA0, 0xE3, 0x6E, 0xE8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x5E, 0xFE, 0xFF, 0x1A, 0x34, 0xD0, 0x8D, 0xE2, 0xF0, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x09, 0x05, 0x00, 0x04, 0xFF, 0xFF, 0x3F, 0x00, 0x6C, 0x7E, 0x80, 0x03, 0x70, 0x7E, 0x80, 0x03 - .byte 0xF0, 0x8F, 0x80, 0x03, 0x38, 0x40, 0x2D, 0xE9, 0x01, 0x50, 0xA0, 0xE1, 0xC9, 0xED, 0xFF, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x02, 0x04, 0x55, 0xE3, 0x04, 0x00, 0x00, 0x3A, 0x28, 0x00, 0x9F, 0xE5 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE3, 0x37, 0xE8, 0xFF, 0xEB, 0x02, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x00, 0x00, 0x1A, 0x70, 0xF2, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xC1, 0xED, 0xFF, 0xEB, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF0, 0x8F, 0x80, 0x03 - .byte 0x00, 0xC0, 0x9F, 0xE5, 0x1C, 0xFF, 0x2F, 0xE1, 0x68, 0x31, 0x80, 0x03 + + arm_func_start sub_0200A104 +sub_0200A104: ; 0x0200A104 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x34 + b _0200A77C +_0200A110: + ldr sl, _0200A7A0 ; =0x04000509 + ldr r6, [sp, #0x18] + sub r4, sl, #1 + b _0200A760 +_0200A120: + 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 _0200A75C +_0200A144: ; jump table + b _0200A1CC ; case 0 + b _0200A1E4 ; case 1 + b _0200A1F0 ; case 2 + b _0200A208 ; case 3 + b _0200A214 ; case 4 + b _0200A224 ; case 5 + b _0200A234 ; case 6 + b _0200A24C ; case 7 + b _0200A274 ; case 8 + b _0200A288 ; case 9 + b _0200A29C ; case 10 + b _0200A2B8 ; case 11 + b _0200A2D0 ; case 12 + b _0200A398 ; case 13 + b _0200A574 ; case 14 + b _0200A5F4 ; case 15 + b _0200A62C ; case 16 + b _0200A43C ; case 17 + b _0200A484 ; case 18 + b _0200A4AC ; case 19 + b _0200A4EC ; case 20 + b _0200A534 ; case 21 + b _0200A65C ; case 22 + b _0200A668 ; case 23 + b _0200A674 ; case 24 + b _0200A680 ; case 25 + b _0200A698 ; case 26 + b _0200A6A8 ; case 27 + b _0200A6B8 ; case 28 + b _0200A6F8 ; case 29 + b _0200A6C8 ; case 30 + b _0200A6D8 ; case 31 + b _0200A6E8 ; case 32 + b _0200A708 ; case 33 +_0200A1CC: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + bl sub_020084F8 + b _0200A75C +_0200A1E4: + ldr r0, [sp, #0x24] + bl sub_02008528 + b _0200A75C +_0200A1F0: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + bl sub_0200829C + b _0200A75C +_0200A208: + ldr r0, [sp, #0x24] + bl sub_020084D8 + b _0200A75C +_0200A214: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_02008584 + b _0200A75C +_0200A224: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_020085FC + b _0200A75C +_0200A234: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + bl sub_0200888C + b _0200A75C +_0200A24C: + 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_020088D0 + b _0200A75C +_0200A274: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + bl sub_020086C8 + b _0200A75C +_0200A288: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + bl sub_02008734 + b _0200A75C +_0200A29C: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + mov r2, r2, lsl #0x10 + mov r2, r2, asr #0x10 + bl sub_02009E38 + b _0200A75C +_0200A2B8: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + bl sub_02009E58 + b _0200A75C +_0200A2D0: + ldr r7, [sp, #0x2c] + ldr r6, [sp, #0x28] + ldr r5, [sp, #0x24] + bl sub_02005EE8 + mov r8, r0 + mov r2, #0 + b _0200A30C +_0200A2EC: + 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 +_0200A30C: + cmp r2, #0x10 + bge _0200A31C + cmp r5, #0 + bne _0200A2EC +_0200A31C: + tst r6, #1 + beq _0200A348 + 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 _0200A358 +_0200A348: + tst r6, #2 + ldrneb r0, [sl] + orrne r0, r0, #0x80 + strneb r0, [sl] +_0200A358: + mov r5, #0 + b _0200A378 +_0200A360: + tst r7, #1 + beq _0200A370 + mov r0, r5 + bl sub_02009F94 +_0200A370: + add r5, r5, #1 + mov r7, r7, lsr #1 +_0200A378: + cmp r5, #8 + bge _0200A388 + cmp r7, #0 + bne _0200A360 +_0200A388: + mov r0, r8 + bl sub_02005EFC + bl sub_02009E74 + b _0200A75C +_0200A398: + ldr sb, [sp, #0x30] + ldr r7, [sp, #0x2c] + ldr r6, [sp, #0x28] + ldr r5, [sp, #0x24] + bl sub_02005EE8 + mov fp, r0 + mov r8, #0 + b _0200A3D0 +_0200A3B8: + tst r7, #1 + beq _0200A3C8 + mov r0, r8 + bl sub_0200A050 +_0200A3C8: + add r8, r8, #1 + mov r7, r7, lsr #1 +_0200A3D0: + cmp r8, #8 + bge _0200A3E0 + cmp r7, #0 + bne _0200A3B8 +_0200A3E0: + mov r7, #0 + b _0200A404 +_0200A3E8: + tst r5, #1 + beq _0200A3FC + mov r0, r7 + mov r1, sb + bl sub_02006C08 +_0200A3FC: + add r7, r7, #1 + mov r5, r5, lsr #1 +_0200A404: + cmp r7, #0x10 + bge _0200A414 + cmp r5, #0 + bne _0200A3E8 +_0200A414: + tst r6, #1 + movne r0, #0 + strneb r0, [r4] + tst r6, #2 + movne r0, #0 + strneb r0, [sl] + mov r0, fp + bl sub_02005EFC + bl sub_02009E74 + b _0200A75C +_0200A43C: + 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_020072E4 + b _0200A75C +_0200A484: + 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_02009F38 + b _0200A75C +_0200A4AC: + ldr r6, [sp, #0x28] + ldr r5, [sp, #0x24] + mov r7, #0 + b _0200A4D8 +_0200A4BC: + tst r5, #1 + beq _0200A4D0 + mov r0, r7 + mov r1, r6 + bl sub_02006CA8 +_0200A4D0: + add r7, r7, #1 + mov r5, r5, lsr #1 +_0200A4D8: + cmp r7, #0x10 + bge _0200A75C + cmp r5, #0 + bne _0200A4BC + b _0200A75C +_0200A4EC: + ldr r7, [sp, #0x2c] + ldr r6, [sp, #0x28] + ldr r5, [sp, #0x24] + mov r8, #0 + b _0200A520 +_0200A500: + tst r5, #1 + beq _0200A518 + mov r0, r8 + mov r1, r6 + mov r2, r7 + bl sub_02006C30 +_0200A518: + add r8, r8, #1 + mov r5, r5, lsr #1 +_0200A520: + cmp r8, #0x10 + bge _0200A75C + cmp r5, #0 + bne _0200A500 + b _0200A75C +_0200A534: + ldr r6, [sp, #0x28] + ldr r5, [sp, #0x24] + mov r7, #0 + b _0200A560 +_0200A544: + tst r5, #1 + beq _0200A558 + mov r0, r7 + mov r1, r6 + bl sub_02006CC0 +_0200A558: + add r7, r7, #1 + mov r5, r5, lsr #1 +_0200A560: + cmp r7, #0x10 + bge _0200A75C + cmp r5, #0 + bne _0200A544 + b _0200A75C +_0200A574: + 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, _0200A7A4 ; =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_020069EC + b _0200A75C +_0200A5F4: + 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_02006AB8 + b _0200A75C +_0200A62C: + 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_02006B64 + b _0200A75C +_0200A65C: + ldr r0, [sp, #0x24] + bl sub_02006DC8 + b _0200A75C +_0200A668: + ldr r0, [sp, #0x24] + bl sub_020069A4 + b _0200A75C +_0200A674: + ldr r0, [sp, #0x24] + bl sub_02006D54 + b _0200A75C +_0200A680: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + ldr r2, [sp, #0x2c] + ldr r3, [sp, #0x30] + bl sub_020069B4 + b _0200A75C +_0200A698: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_02007DC8 + b _0200A75C +_0200A6A8: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_02007EA8 + b _0200A75C +_0200A6B8: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_02007D18 + b _0200A75C +_0200A6C8: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_020087A4 + b _0200A75C +_0200A6D8: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_02008830 + b _0200A75C +_0200A6E8: + ldr r0, [sp, #0x24] + ldr r1, [sp, #0x28] + bl sub_02007EFC + b _0200A75C +_0200A6F8: + ldr r1, [sp, #0x24] + ldr r0, _0200A7A8 ; =0x03807E6C + str r1, [r0] + b _0200A75C +_0200A708: + ldr r5, [sp, #0x24] + ldr r0, _0200A7AC ; =0x03807E70 + mov r1, r5 + mov r2, #0x1180 + bl sub_020061D4 + ldr r0, _0200A7AC ; =0x03807E70 + add r1, r5, #0x1000 + str r0, [r1, #0x1c0] + mov r6, #0 +_0200A72C: + mov r0, r6 + bl sub_02006DB8 + add r1, r5, r6, lsl #2 + add r1, r1, #0x1000 + str r0, [r1, #0x180] + add r6, r6, #1 + cmp r6, #0x10 + blt _0200A72C + mov r0, #0 + bl sub_02007EE0 + add r1, r5, #0x1000 + str r0, [r1, #0x1c4] +_0200A75C: + ldr r6, [sp, #0x1c] +_0200A760: + cmp r6, #0 + bne _0200A120 + ldr r0, _0200A7A8 ; =0x03807E6C + ldr r1, [r0] + ldr r0, [r1] + add r0, r0, #1 + str r0, [r1] +_0200A77C: + ldr r0, _0200A7B0 ; =0x03808FF0 + add r1, sp, #0x18 + mov r2, #0 + bl sub_02004948 + cmp r0, #0 + bne _0200A110 + add sp, sp, #0x34 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + .align 2, 0 +_0200A7A0: .word 0x04000509 +_0200A7A4: .word 0x003FFFFF +_0200A7A8: .word 0x03807E6C +_0200A7AC: .word 0x03807E70 +_0200A7B0: .word 0x03808FF0 + arm_func_end sub_0200A104 + + arm_func_start sub_0200A7B4 +sub_0200A7B4: ; 0x0200A7B4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + bl sub_02005EE8 + mov r4, r0 + cmp r5, #0x2000000 + blo _0200A7E0 + ldr r0, _0200A7FC ; =0x03808FF0 + mov r1, r5 + mov r2, #0 + bl sub_020048BC + b _0200A7EC +_0200A7E0: + cmp r5, #0 + bne _0200A7EC + bl sub_020071B0 +_0200A7EC: + mov r0, r4 + bl sub_02005EFC + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_0200A7FC: .word 0x03808FF0 + arm_func_end sub_0200A7B4 + + arm_func_start sub_0200A800 +sub_0200A800: ; 0x0200A800 + ldr ip, _0200A808 ; =sub_03803168 + bx ip + .align 2, 0 +_0200A808: .word sub_03803168 + arm_func_end sub_0200A800 arm_func_start sub_0200A80C sub_0200A80C: ; 0x0200A80C @@ -11077,7 +13353,7 @@ _0200AA80: mov lr, pc bx r6 _0200AA98: - .byte 0x01, 0x70, 0x47, 0xE2 + sub r7, r7, #1 _0200AA9C: cmp r7, #0 bne _0200AA70 @@ -11093,23 +13369,86 @@ _0200AAC0: .word 0x03809664 _0200AAC4: .word 0x0000A040 _0200AAC8: .word 0x040001A0 arm_func_end sub_0200AA48 -_0200AACC: - .byte 0x34, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x20, 0xC1, 0xE1, 0x02, 0x20, 0x41, 0xE2, 0xB0, 0x10, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x11, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x18, 0x20, 0x9F, 0xE5, 0x08, 0x10, 0x90, 0xE5 - .byte 0xB0, 0x20, 0xD2, 0xE1, 0x00, 0x20, 0xC1, 0xE5, 0x08, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2 - .byte 0x08, 0x10, 0x80, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0xA2, 0x01, 0x00, 0x04, 0x08, 0x00, 0x2D, 0xE9 - .byte 0x04, 0xD0, 0x4D, 0xE2, 0x04, 0x10, 0x90, 0xE5, 0x38, 0x20, 0x9F, 0xE5, 0x00, 0x10, 0xD1, 0xE5 - .byte 0xB0, 0x10, 0xC2, 0xE1, 0x04, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0x80, 0xE5 - .byte 0x02, 0x10, 0x42, 0xE2, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x10, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1, 0xB0, 0x00, 0xCD, 0xE1, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x08, 0x00, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xA2, 0x01, 0x00, 0x04, 0x58, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x20, 0xC1, 0xE1, 0x02, 0x20, 0x41, 0xE2, 0xB0, 0x10, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x11, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x3C, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB0, 0x20, 0xD2, 0xE1, 0x00, 0x10, 0xD1, 0xE5, 0xFF, 0x20, 0x02, 0xE2, 0x01, 0x00, 0x52, 0xE1 - .byte 0x05, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x0C, 0x10, 0x80, 0xE5, 0x00, 0x10, 0x90, 0xE5 - .byte 0x01, 0x00, 0x51, 0xE3, 0x01, 0x10, 0xA0, 0x83, 0x00, 0x10, 0x80, 0x85, 0x04, 0x10, 0x90, 0xE5 - .byte 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0x80, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0xA2, 0x01, 0x00, 0x04 + + arm_func_start sub_0200AACC +sub_0200AACC: ; 0x0200AACC + ldr r1, _0200AB08 ; =0x040001A2 + mov r2, #0 + strh r2, [r1] + sub r2, r1, #2 +_0200AADC: + ldrh r1, [r2] + tst r1, #0x80 + bne _0200AADC + ldr r2, _0200AB08 ; =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 +_0200AB08: .word 0x040001A2 + arm_func_end sub_0200AACC + + arm_func_start sub_0200AB0C +sub_0200AB0C: ; 0x0200AB0C + stmdb sp!, {r3} + sub sp, sp, #4 + ldr r1, [r0, #4] + ldr r2, _0200AB58 ; =0x040001A2 + ldrb r1, [r1] + strh r1, [r2] + ldr r1, [r0, #4] + add r1, r1, #1 + str r1, [r0, #4] + sub r1, r2, #2 +_0200AB34: + ldrh r0, [r1] + tst r0, #0x80 + bne _0200AB34 + ldr r0, _0200AB58 ; =0x040001A2 + ldrh r0, [r0] + strh r0, [sp] + add sp, sp, #4 + ldmia sp!, {r3} + bx lr + .align 2, 0 +_0200AB58: .word 0x040001A2 + arm_func_end sub_0200AB0C + + arm_func_start sub_0200AB5C +sub_0200AB5C: ; 0x0200AB5C + ldr r1, _0200ABBC ; =0x040001A2 + mov r2, #0 + strh r2, [r1] + sub r2, r1, #2 +_0200AB6C: + ldrh r1, [r2] + tst r1, #0x80 + bne _0200AB6C + ldr r2, _0200ABBC ; =0x040001A2 + ldr r1, [r0, #4] + ldrh r2, [r2] + ldrb r1, [r1] + and r2, r2, #0xff + cmp r2, r1 + beq _0200ABAC + mov r1, #0 + str r1, [r0, #0xc] + ldr r1, [r0] + cmp r1, #1 + movhi r1, #1 + strhi r1, [r0] +_0200ABAC: + ldr r1, [r0, #4] + add r1, r1, #1 + str r1, [r0, #4] + bx lr + .align 2, 0 +_0200ABBC: .word 0x040001A2 + arm_func_end sub_0200AB5C arm_func_start sub_0200ABC0 sub_0200ABC0: ; 0x0200ABC0 @@ -11636,8 +13975,11 @@ sub_0200B258: ; 0x0200B258 .align 2, 0 _0200B274: .word 0x03807560 arm_func_end sub_0200B258 -_0200B278: - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0200B278 +sub_0200B278: ; 0x0200B278 + bx lr + arm_func_end sub_0200B278 arm_func_start sub_0200B27C sub_0200B27C: ; 0x0200B27C @@ -11974,7 +14316,8 @@ _0200B6BC: mov lr, pc bx r1 _0200B6CC: - .byte 0x75, 0xFF, 0xFF, 0xEA + b _0200B4A8 + .align 2, 0 _0200B6D0: .word 0x03809060 arm_func_end sub_0200B4A0 @@ -12196,49 +14539,326 @@ _0200B990: .word 0x038098C0 _0200B994: .word 0x027FFC40 _0200B998: .word 0x03807564 arm_func_end sub_0200B8A4 -_0200B99C: - .byte 0x00, 0xDF, 0x70, 0x47 - .byte 0x03, 0xDF, 0x70, 0x47, 0x02, 0x4A, 0x94, 0x46, 0x00, 0x22, 0x04, 0xDF, 0x70, 0x47, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x04, 0x00, 0x22, 0x05, 0xDF, 0x70, 0x47, 0x06, 0xDF, 0x70, 0x47, 0x07, 0xDF - .byte 0x70, 0x47, 0x08, 0xDF, 0x70, 0x47, 0x01, 0x1C, 0x01, 0x20, 0x08, 0xDF, 0x70, 0x47, 0x01, 0x1C - .byte 0x00, 0x20, 0x08, 0xDF, 0x70, 0x47, 0x09, 0xDF, 0x70, 0x47, 0x09, 0xDF, 0x08, 0x1C, 0x70, 0x47 - .byte 0x0B, 0xDF, 0x70, 0x47, 0x0C, 0xDF, 0x70, 0x47, 0x0D, 0xDF, 0x70, 0x47, 0x0E, 0xDF, 0x70, 0x47 - .byte 0x0F, 0xDF, 0x70, 0x47, 0x10, 0xDF, 0x70, 0x47, 0x11, 0xDF, 0x70, 0x47, 0x12, 0xDF, 0x70, 0x47 - .byte 0x13, 0xDF, 0x70, 0x47, 0x14, 0xDF, 0x70, 0x47, 0x15, 0xDF, 0x70, 0x47, 0x1A, 0xDF, 0x70, 0x47 - .byte 0x1B, 0xDF, 0x70, 0x47, 0x1C, 0xDF, 0x70, 0x47, 0x30, 0x10, 0x9F, 0xE5, 0x30, 0x20, 0x9F, 0xE5 - .byte 0xA0, 0x10, 0x01, 0xE0, 0x01, 0x10, 0x40, 0xE0, 0x28, 0x00, 0x9F, 0xE5, 0x02, 0x30, 0x01, 0xE0 - .byte 0x21, 0x11, 0x02, 0xE0, 0x01, 0x10, 0x83, 0xE0, 0x21, 0x12, 0x81, 0xE0, 0x00, 0x00, 0x01, 0xE0 - .byte 0x20, 0x04, 0x80, 0xE0, 0x20, 0x08, 0x80, 0xE0, 0xFF, 0x00, 0x00, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x55, 0x55, 0x55, 0x55, 0x33, 0x33, 0x33, 0x33, 0x0F, 0x0F, 0x0F, 0x0F, 0xF8, 0x43, 0x2D, 0xE9 - .byte 0x08, 0xD0, 0x4D, 0xE2, 0xEC, 0x10, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0xB0, 0x00, 0xD1, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x34, 0x00, 0x00, 0x1A, 0x01, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0x81, 0xE5, 0x05, 0x00, 0xA0, 0xE3, 0x08, 0x00, 0x81, 0xE5 - .byte 0x28, 0x01, 0x00, 0xEB, 0xBE, 0xC5, 0xBF, 0xEB, 0xAA, 0x06, 0x00, 0xEB, 0xFA, 0x03, 0x00, 0xEB - .byte 0x7D, 0xEA, 0xFF, 0xEB, 0xB0, 0x10, 0x9F, 0xE5, 0x06, 0x00, 0xA0, 0xE3, 0xB4, 0xEA, 0xFF, 0xEB - .byte 0xA4, 0x10, 0x9F, 0xE5, 0x09, 0x00, 0xA0, 0xE3, 0xB1, 0xEA, 0xFF, 0xEB, 0x98, 0x10, 0x9F, 0xE5 - .byte 0x08, 0x00, 0xA0, 0xE3, 0xAE, 0xEA, 0xFF, 0xEB, 0x8C, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0xA0, 0xE3 - .byte 0xAB, 0xEA, 0xFF, 0xEB, 0x84, 0x00, 0x9F, 0xE5, 0x84, 0x10, 0x9F, 0xE5, 0x10, 0x20, 0xA0, 0xE3 - .byte 0x6B, 0xE3, 0xFF, 0xEB, 0x00, 0x90, 0xA0, 0xE3, 0x18, 0x60, 0xA0, 0xE3, 0x74, 0x80, 0x9F, 0xE5 - .byte 0x09, 0x70, 0xA0, 0xE1, 0x06, 0x50, 0xA0, 0xE1, 0x99, 0x85, 0x20, 0xE0, 0x07, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x20, 0xA0, 0xE1, 0xD3, 0xE9, 0xFF, 0xEB, 0x01, 0x90, 0x89, 0xE2, 0x10, 0x00, 0x59, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0xBA, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x90, 0x24, 0x80, 0xE5 - .byte 0x98, 0x24, 0x80, 0xE5, 0x94, 0x24, 0x80, 0xE5, 0x02, 0x0C, 0xA0, 0xE3, 0x00, 0x00, 0x8D, 0xE5 - .byte 0x34, 0x00, 0x9F, 0xE5, 0x34, 0x10, 0x9F, 0xE5, 0x20, 0x30, 0x9F, 0xE5, 0x04, 0x40, 0x8D, 0xE5 - .byte 0xBD, 0xE1, 0xFF, 0xEB, 0x20, 0x00, 0x9F, 0xE5, 0x81, 0xE2, 0xFF, 0xEB, 0x08, 0xD0, 0x8D, 0xE2 - .byte 0xF8, 0x43, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xD0, 0x98, 0x80, 0x03, 0xE8, 0x3C, 0x80, 0x03 - .byte 0x80, 0x9B, 0x80, 0x03, 0xA0, 0x9B, 0x80, 0x03, 0xE0, 0x9B, 0x80, 0x03, 0xDC, 0x98, 0x80, 0x03 - .byte 0x7C, 0x3C, 0x80, 0x03, 0x70, 0x40, 0x2D, 0xE9, 0x48, 0x50, 0x9F, 0xE5, 0x48, 0x40, 0x9F, 0xE5 - .byte 0x00, 0x60, 0xA0, 0xE1, 0xD7, 0xE8, 0xFF, 0xEB, 0x04, 0x10, 0x94, 0xE5, 0x00, 0x00, 0x51, 0xE3 - .byte 0x03, 0x00, 0x00, 0x0A, 0xD8, 0xE8, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x35, 0xE2, 0xFF, 0xEB - .byte 0xF7, 0xFF, 0xFF, 0xEA, 0x20, 0x10, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x81, 0xE5 - .byte 0x04, 0x20, 0xA0, 0xE3, 0x08, 0x20, 0x81, 0xE5, 0x9C, 0x64, 0x81, 0xE5, 0xCE, 0xE8, 0xFF, 0xEB - .byte 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x64, 0x9D, 0x80, 0x03, 0xD0, 0x98, 0x80, 0x03 - .byte 0x08, 0x40, 0x2D, 0xE9, 0x4C, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x91, 0xE5, 0x00, 0x00, 0x52, 0xE3 - .byte 0x0E, 0x00, 0x00, 0x0A, 0x08, 0x20, 0x91, 0xE5, 0x04, 0x00, 0x52, 0xE3, 0x9C, 0x14, 0x91, 0x05 - .byte 0x00, 0x00, 0x51, 0x01, 0x09, 0x00, 0x00, 0x1A, 0xBA, 0xE8, 0xFF, 0xEB, 0x24, 0x10, 0x9F, 0xE5 - .byte 0x05, 0x20, 0xA0, 0xE3, 0x08, 0x20, 0x81, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x04, 0x20, 0x81, 0xE5 - .byte 0x9C, 0x24, 0x81, 0xE5, 0xB8, 0xE8, 0xFF, 0xEB, 0x0C, 0x00, 0x9F, 0xE5, 0x2A, 0xE2, 0xFF, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xD0, 0x98, 0x80, 0x03, 0x64, 0x9D, 0x80, 0x03 + + thumb_func_start sub_0200B99C +sub_0200B99C: ; 0x0200B99C + swi 0 + bx lr + thumb_func_end sub_0200B99C + + thumb_func_start sub_0200B9A0 +sub_0200B9A0: ; 0x0200B9A0 + swi 3 + bx lr + thumb_func_end sub_0200B9A0 + + thumb_func_start sub_0200B9A4 +sub_0200B9A4: ; 0x0200B9A4 + ldr r2, _0200B9B0 ; =0x04000000 + mov ip, r2 + mov r2, #0 + swi 4 + bx lr + .align 2, 0 +_0200B9B0: .word 0x04000000 + thumb_func_end sub_0200B9A4 + + thumb_func_start sub_0200B9B4 +sub_0200B9B4: ; 0x0200B9B4 + mov r2, #0 + swi 5 + bx lr + thumb_func_end sub_0200B9B4 + + non_word_aligned_thumb_func_start sub_0200B9BA +sub_0200B9BA: ; 0x0200B9BA + swi 6 + bx lr + thumb_func_end sub_0200B9BA + + non_word_aligned_thumb_func_start sub_0200B9BE +sub_0200B9BE: ; 0x0200B9BE + swi 7 + bx lr + thumb_func_end sub_0200B9BE + + non_word_aligned_thumb_func_start sub_0200B9C2 +sub_0200B9C2: ; 0x0200B9C2 + swi 8 + bx lr + thumb_func_end sub_0200B9C2 + + non_word_aligned_thumb_func_start sub_0200B9C6 +sub_0200B9C6: ; 0x0200B9C6 + add r1, r0, #0 + mov r0, #1 + swi 8 + bx lr + thumb_func_end sub_0200B9C6 + + non_word_aligned_thumb_func_start sub_0200B9CE +sub_0200B9CE: ; 0x0200B9CE + add r1, r0, #0 + mov r0, #0 + swi 8 + bx lr + thumb_func_end sub_0200B9CE + + non_word_aligned_thumb_func_start sub_0200B9D6 +sub_0200B9D6: ; 0x0200B9D6 + swi 9 + bx lr + thumb_func_end sub_0200B9D6 + + non_word_aligned_thumb_func_start sub_0200B9DA +sub_0200B9DA: ; 0x0200B9DA + swi 9 + add r0, r1, #0 + bx lr + thumb_func_end sub_0200B9DA + + thumb_func_start sub_0200B9E0 +sub_0200B9E0: ; 0x0200B9E0 + swi 0xb + bx lr + thumb_func_end sub_0200B9E0 + + thumb_func_start sub_0200B9E4 +sub_0200B9E4: ; 0x0200B9E4 + swi 0xc + bx lr + thumb_func_end sub_0200B9E4 + + thumb_func_start sub_0200B9E8 +sub_0200B9E8: ; 0x0200B9E8 + swi 0xd + bx lr + thumb_func_end sub_0200B9E8 + + thumb_func_start sub_0200B9EC +sub_0200B9EC: ; 0x0200B9EC + swi 0xe + bx lr + thumb_func_end sub_0200B9EC + + thumb_func_start sub_0200B9F0 +sub_0200B9F0: ; 0x0200B9F0 + swi 0xf + bx lr + thumb_func_end sub_0200B9F0 + + thumb_func_start sub_0200B9F4 +sub_0200B9F4: ; 0x0200B9F4 + swi 0x10 + bx lr + thumb_func_end sub_0200B9F4 + + thumb_func_start sub_0200B9F8 +sub_0200B9F8: ; 0x0200B9F8 + swi 0x11 + bx lr + thumb_func_end sub_0200B9F8 + + thumb_func_start sub_0200B9FC +sub_0200B9FC: ; 0x0200B9FC + swi 0x12 + bx lr + thumb_func_end sub_0200B9FC + + thumb_func_start sub_0200BA00 +sub_0200BA00: ; 0x0200BA00 + swi 0x13 + bx lr + thumb_func_end sub_0200BA00 + + thumb_func_start sub_0200BA04 +sub_0200BA04: ; 0x0200BA04 + swi 0x14 + bx lr + thumb_func_end sub_0200BA04 + + thumb_func_start sub_0200BA08 +sub_0200BA08: ; 0x0200BA08 + swi 0x15 + bx lr + thumb_func_end sub_0200BA08 + + thumb_func_start sub_0200BA0C +sub_0200BA0C: ; 0x0200BA0C + swi 0x1a + bx lr + thumb_func_end sub_0200BA0C + + thumb_func_start sub_0200BA10 +sub_0200BA10: ; 0x0200BA10 + swi 0x1b + bx lr + thumb_func_end sub_0200BA10 + + thumb_func_start sub_0200BA14 +sub_0200BA14: ; 0x0200BA14 + swi 0x1c + bx lr + thumb_func_end sub_0200BA14 + + arm_func_start sub_0200BA18 +sub_0200BA18: ; 0x0200BA18 + ldr r1, _0200BA50 ; =0x55555555 + ldr r2, _0200BA54 ; =0x33333333 + and r1, r1, r0, lsr #1 + sub r1, r0, r1 + ldr r0, _0200BA58 ; =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 +_0200BA50: .word 0x55555555 +_0200BA54: .word 0x33333333 +_0200BA58: .word 0x0F0F0F0F + arm_func_end sub_0200BA18 + + arm_func_start sub_0200BA5C +sub_0200BA5C: ; 0x0200BA5C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #8 + ldr r1, _0200BB58 ; =0x038098D0 + mov r4, r0 + ldrh r0, [r1] + cmp r0, #0 + bne _0200BB4C + mov r0, #1 + strh r0, [r1] + mov r0, #0 + str r0, [r1, #4] + mov r0, #5 + str r0, [r1, #8] + bl sub_0200BF38 + bl sub_00FFD194 + bl sub_0200D548 + bl sub_0200CA8C + bl sub_0200649C + ldr r1, _0200BB5C ; =0x03803CE8 + mov r0, #6 + bl sub_02006584 + ldr r1, _0200BB5C ; =0x03803CE8 + mov r0, #9 + bl sub_02006584 + ldr r1, _0200BB5C ; =0x03803CE8 + mov r0, #8 + bl sub_02006584 + ldr r1, _0200BB5C ; =0x03803CE8 + mov r0, #4 + bl sub_02006584 + ldr r0, _0200BB60 ; =0x03809B80 + ldr r1, _0200BB64 ; =0x03809BA0 + mov r2, #0x10 + bl sub_02004894 + mov sb, #0 + mov r6, #0x18 + ldr r8, _0200BB68 ; =0x03809BE0 + mov r7, sb + mov r5, r6 +_0200BAF8: + mla r0, sb, r5, r8 + mov r1, r7 + mov r2, r6 + bl sub_02006258 + add sb, sb, #1 + cmp sb, #0x10 + blt _0200BAF8 + ldr r0, _0200BB58 ; =0x038098D0 + mov r2, #0 + str r2, [r0, #0x490] + str r2, [r0, #0x498] + str r2, [r0, #0x494] + mov r0, #0x200 + str r0, [sp] + ldr r0, _0200BB6C ; =0x038098DC + ldr r1, _0200BB70 ; =0x03803C7C + ldr r3, _0200BB60 ; =0x03809B80 + str r4, [sp, #4] + bl sub_0200423C + ldr r0, _0200BB6C ; =0x038098DC + bl sub_02004554 +_0200BB4C: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + bx lr + .align 2, 0 +_0200BB58: .word 0x038098D0 +_0200BB5C: .word 0x03803CE8 +_0200BB60: .word 0x03809B80 +_0200BB64: .word 0x03809BA0 +_0200BB68: .word 0x03809BE0 +_0200BB6C: .word 0x038098DC +_0200BB70: .word 0x03803C7C + arm_func_end sub_0200BA5C + + arm_func_start sub_0200BB74 +sub_0200BB74: ; 0x0200BB74 + stmdb sp!, {r4, r5, r6, lr} + ldr r5, _0200BBC8 ; =0x03809D64 + ldr r4, _0200BBCC ; =0x038098D0 + mov r6, r0 +_0200BB84: + bl sub_02005EE8 + ldr r1, [r4, #4] + cmp r1, #0 + beq _0200BBA4 + bl sub_02005EFC + mov r0, r5 + bl sub_02004478 + b _0200BB84 +_0200BBA4: + ldr r1, _0200BBCC ; =0x038098D0 + mov r2, #1 + str r2, [r1, #4] + mov r2, #4 + str r2, [r1, #8] + str r6, [r1, #0x49c] + bl sub_02005EFC + ldmia sp!, {r4, r5, r6, lr} + bx lr + .align 2, 0 +_0200BBC8: .word 0x03809D64 +_0200BBCC: .word 0x038098D0 + arm_func_end sub_0200BB74 + + arm_func_start sub_0200BBD0 +sub_0200BBD0: ; 0x0200BBD0 + stmdb sp!, {r3, lr} + ldr r1, _0200BC28 ; =0x038098D0 + ldr r2, [r1, #4] + cmp r2, #0 + beq _0200BC20 + ldr r2, [r1, #8] + cmp r2, #4 + ldreq r1, [r1, #0x49c] + cmpeq r1, r0 + bne _0200BC20 + bl sub_02005EE8 + ldr r1, _0200BC28 ; =0x038098D0 + mov r2, #5 + str r2, [r1, #8] + mov r2, #0 + str r2, [r1, #4] + str r2, [r1, #0x49c] + bl sub_02005EFC + ldr r0, _0200BC2C ; =0x03809D64 + bl sub_020044CC +_0200BC20: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0200BC28: .word 0x038098D0 +_0200BC2C: .word 0x03809D64 + arm_func_end sub_0200BBD0 arm_func_start sub_0200BC30 sub_0200BC30: ; 0x0200BC30 @@ -12410,23 +15030,93 @@ _0200BE38: .word 0x03809BE4 _0200BE3C: .word 0x038098D4 _0200BE40: .word 0x03809B80 arm_func_end sub_0200BD64 -_0200BE44: - .byte 0x08, 0x40, 0x2D, 0xE9, 0x10, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x8D, 0xE2 - .byte 0x00, 0x20, 0xA0, 0xE3, 0xE2, 0xE2, 0xFF, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x80, 0x9B, 0x80, 0x03, 0x78, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x58, 0x60, 0x9F, 0xE5 - .byte 0x00, 0x50, 0x8D, 0xE2, 0x01, 0x40, 0xA0, 0xE3, 0x06, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x04, 0x20, 0xA0, 0xE1, 0xAF, 0xE2, 0xFF, 0xEB, 0x00, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0x90, 0xE5 - .byte 0x03, 0x00, 0x51, 0xE3, 0x01, 0xF1, 0x8F, 0x90, 0xF6, 0xFF, 0xFF, 0xEA, 0x02, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x03, 0x00, 0x00, 0xEA, 0xDF, 0x00, 0x00, 0xEB - .byte 0xF0, 0xFF, 0xFF, 0xEA, 0x90, 0x06, 0x00, 0xEB, 0xEE, 0xFF, 0xFF, 0xEA, 0x70, 0x03, 0x00, 0xEB - .byte 0xEC, 0xFF, 0xFF, 0xEA, 0x26, 0xC5, 0xBF, 0xEB, 0xEA, 0xFF, 0xFF, 0xEA, 0x80, 0x9B, 0x80, 0x03 - .byte 0x08, 0x40, 0x2D, 0xE9, 0x00, 0x00, 0x52, 0xE3, 0x14, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x40, 0xE2 - .byte 0x05, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x10, 0x00, 0x00, 0xEA, 0x0D, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE1, 0x4E, 0x00, 0x00, 0xEB, 0x07, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0xA0, 0xE1, 0x9D, 0x05, 0x00, 0xEB, 0x04, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE1 - .byte 0xE8, 0x02, 0x00, 0xEB, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE1, 0xA2, 0xC4, 0xBF, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0200BE44 +sub_0200BE44: ; 0x0200BE44 + stmdb sp!, {r3, lr} + ldr r0, _0200BE60 ; =0x03809B80 + add r1, sp, #0 + mov r2, #0 + bl sub_020049E4 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0200BE60: .word 0x03809B80 + arm_func_end sub_0200BE44 + + arm_func_start sub_0200BE64 +sub_0200BE64: ; 0x0200BE64 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr r6, _0200BECC ; =0x03809B80 + add r5, sp, #0 + mov r4, #1 +_0200BE78: + mov r0, r6 + mov r1, r5 + mov r2, r4 + bl sub_02004948 + ldr r0, [sp] + ldr r1, [r0] + cmp r1, #3 + addls pc, pc, r1, lsl #2 + b _0200BE78 +_0200BE9C: ; jump table + b _0200BEAC ; case 0 + b _0200BEC4 ; case 1 + b _0200BEB4 ; case 2 + b _0200BEBC ; case 3 +_0200BEAC: + bl sub_0200C230 + b _0200BE78 +_0200BEB4: + bl sub_0200D8FC + b _0200BE78 +_0200BEBC: + bl sub_0200CC84 + b _0200BE78 +_0200BEC4: + bl sub_00FFD364 + b _0200BE78 + .align 2, 0 +_0200BECC: .word 0x03809B80 + arm_func_end sub_0200BE64 + + arm_func_start sub_0200BED0 +sub_0200BED0: ; 0x0200BED0 + stmdb sp!, {r3, lr} + cmp r2, #0 + bne _0200BF30 + sub r0, r0, #4 + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0200BF30 +_0200BEEC: ; jump table + b _0200BF28 ; case 0 + b _0200BF30 ; case 1 + b _0200BF04 ; case 2 + b _0200BF30 ; case 3 + b _0200BF1C ; case 4 + b _0200BF10 ; case 5 +_0200BF04: + mov r0, r1 + bl sub_0200C048 + b _0200BF30 +_0200BF10: + mov r0, r1 + bl sub_0200D590 + b _0200BF30 +_0200BF1C: + mov r0, r1 + bl sub_0200CAC8 + b _0200BF30 +_0200BF28: + mov r0, r1 + bl sub_00FFD1BC +_0200BF30: + ldmia sp!, {r3, lr} + bx lr + arm_func_end sub_0200BED0 arm_func_start sub_0200BF38 sub_0200BF38: ; 0x0200BF38 @@ -13264,63 +15954,262 @@ _0200CA80: .word 0x00008A01 _0200CA84: .word 0x040001C0 _0200CA88: .word 0x00008201 arm_func_end sub_0200C894 -_0200CA8C: - .byte 0x2C, 0x00, 0x9F, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x04, 0x10, 0x80, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x28, 0x30, 0x80, 0xE5 - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x03, 0x20, 0xA0, 0xE1, 0x83, 0x10, 0xA0, 0xE1, 0x01, 0x30, 0x83, 0xE2 - .byte 0xB1, 0x20, 0x80, 0xE1, 0x10, 0x00, 0x53, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x4C, 0x9E, 0x80, 0x03, 0x54, 0x9E, 0x80, 0x03, 0x18, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2 - .byte 0x02, 0x04, 0x10, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x9C, 0x11, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x04, 0x30, 0xA0, 0xE1, 0x84, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0xB2, 0x30, 0x81, 0xE1 - .byte 0x10, 0x00, 0x54, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x7C, 0x11, 0x9F, 0xE5, 0x0F, 0x28, 0x00, 0xE2 - .byte 0x22, 0x28, 0xA0, 0xE1, 0x82, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x81, 0xE1, 0x01, 0x04, 0x10, 0xE3 - .byte 0x56, 0x00, 0x00, 0x0A, 0x64, 0x11, 0x9F, 0xE5, 0xB8, 0x20, 0xD1, 0xE1, 0xFF, 0x0C, 0x02, 0xE2 - .byte 0x00, 0x04, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1, 0x60, 0x00, 0x44, 0xE2, 0x07, 0x00, 0x50, 0xE3 - .byte 0x00, 0xF1, 0x8F, 0x90, 0x4A, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA - .byte 0x47, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA - .byte 0x37, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x00, 0xEA, 0x60, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x32, 0xFC, 0xFF, 0xEB, 0x41, 0x00, 0x00, 0xEA, 0xBA, 0xC0, 0xD1, 0xE1, 0x04, 0x10, 0xA0, 0xE1 - .byte 0xFF, 0x30, 0x02, 0xE2, 0x03, 0x00, 0xA0, 0xE3, 0x02, 0x20, 0xA0, 0xE3, 0x00, 0xC0, 0x8D, 0xE5 - .byte 0x77, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x38, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x25, 0xFC, 0xFF, 0xEB, 0x34, 0x00, 0x00, 0xEA, 0xBA, 0xC0, 0xD1, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0xFF, 0x30, 0x02, 0xE2, 0x03, 0x00, 0xA0, 0xE3, 0x02, 0x20, 0xA0, 0xE3 - .byte 0x00, 0xC0, 0x8D, 0xE5, 0x6A, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x2B, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE3, 0x18, 0xFC, 0xFF, 0xEB, 0x27, 0x00, 0x00, 0xEA - .byte 0x02, 0x08, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1, 0x20, 0x38, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x5E, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x1F, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE3, 0x0C, 0xFC, 0xFF, 0xEB, 0x1B, 0x00, 0x00, 0xEA - .byte 0xBA, 0x00, 0xD1, 0xE1, 0x02, 0x2C, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE1, 0x22, 0x34, 0x80, 0xE1 - .byte 0x03, 0x00, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x51, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x12, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE3, 0xFF, 0xFB, 0xFF, 0xEB - .byte 0x0E, 0x00, 0x00, 0xEA, 0xFF, 0x00, 0x02, 0xE2, 0xF1, 0x01, 0x00, 0xEB, 0x66, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xF9, 0xFB, 0xFF, 0xEB, 0x08, 0x00, 0x00, 0xEA, 0xF3, 0x01, 0x00, 0xEB - .byte 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x18, 0xA0, 0xE1, 0x67, 0x00, 0xA0, 0xE3, 0xF3, 0xFB, 0xFF, 0xEB - .byte 0x02, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE1, 0x01, 0x10, 0xA0, 0xE3, 0xEF, 0xFB, 0xFF, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x18, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x54, 0x9E, 0x80, 0x03 - .byte 0x4C, 0x9E, 0x80, 0x03, 0x38, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x95, 0xE4, 0xFF, 0xEB - .byte 0x00, 0x50, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE3, 0x15, 0xFC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x05, 0x00, 0xA0, 0xE1, 0x93, 0xE4, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0xDB, 0xFB, 0xFF, 0xEB - .byte 0x48, 0x00, 0x00, 0xEA, 0x03, 0x00, 0xA0, 0xE3, 0x10, 0xFC, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x89, 0xE4, 0xFF, 0xEB, 0x04, 0x10, 0x94, 0xE5, 0x61, 0x00, 0x41, 0xE2, 0x05, 0x00, 0x50, 0xE3 - .byte 0x00, 0xF1, 0x8F, 0x90, 0x39, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x00, 0xEA, 0x37, 0x00, 0x00, 0xEA - .byte 0x29, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x00, 0xEA - .byte 0xE8, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x28, 0x10, 0x80, 0xE5, 0x08, 0x10, 0x94, 0xE5 - .byte 0xB2, 0x10, 0xC0, 0xE1, 0x0C, 0x10, 0x94, 0xE5, 0xB0, 0x10, 0xC0, 0xE1, 0xF8, 0x00, 0x00, 0xEB - .byte 0x2E, 0x00, 0x00, 0xEA, 0xC4, 0x20, 0x9F, 0xE5, 0x04, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x82, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x30, 0x00, 0x82, 0xE5, 0x0C, 0x30, 0x94, 0xE5, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0xFF, 0x10, 0x03, 0xE2, 0x2C, 0x30, 0x82, 0xE5, 0x39, 0x00, 0x00, 0xEB - .byte 0x64, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xB4, 0xFB, 0xFF, 0xEB, 0x1F, 0x00, 0x00, 0xEA - .byte 0x88, 0x10, 0x9F, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x81, 0xE5, 0x08, 0x20, 0x94, 0xE5 - .byte 0x02, 0x08, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x30, 0x20, 0x81, 0xE5 - .byte 0x4B, 0x00, 0x00, 0xEB, 0x70, 0x10, 0x84, 0xE2, 0x01, 0x28, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x22, 0x08, 0xA0, 0xE1, 0xA5, 0xFB, 0xFF, 0xEB, 0x10, 0x00, 0x00, 0xEA, 0x4C, 0x10, 0x9F, 0xE5 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x81, 0xE5, 0x08, 0x00, 0x94, 0xE5, 0x2C, 0x00, 0x81, 0xE5 - .byte 0x70, 0x00, 0x00, 0xEB, 0x63, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x9B, 0xFB, 0xFF, 0xEB - .byte 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x94, 0xE5, 0xB3, 0x00, 0x00, 0xEB, 0x03, 0x00, 0x00, 0xEA - .byte 0x01, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x01, 0x10, 0xA0, 0xE3, 0x93, 0xFB, 0xFF, 0xEB - .byte 0x03, 0x00, 0xA0, 0xE3, 0xCF, 0xFB, 0xFF, 0xEB, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x4C, 0x9E, 0x80, 0x03 + + arm_func_start sub_0200CA8C +sub_0200CA8C: ; 0x0200CA8C + ldr r0, _0200CAC0 ; =0x03809E4C + mov r1, #1 + str r1, [r0, #4] + mov r3, #0 + str r3, [r0, #0x28] + ldr r0, _0200CAC4 ; =0x03809E54 + mov r2, r3 +_0200CAA8: + mov r1, r3, lsl #1 + add r3, r3, #1 + strh r2, [r0, r1] + cmp r3, #0x10 + blt _0200CAA8 + bx lr + .align 2, 0 +_0200CAC0: .word 0x03809E4C +_0200CAC4: .word 0x03809E54 + arm_func_end sub_0200CA8C + + arm_func_start sub_0200CAC8 +sub_0200CAC8: ; 0x0200CAC8 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + tst r0, #0x2000000 + beq _0200CAF8 + ldr r1, _0200CC7C ; =0x03809E54 + mov r4, #0 + mov r3, r4 +_0200CAE4: + mov r2, r4, lsl #1 + add r4, r4, #1 + strh r3, [r1, r2] + cmp r4, #0x10 + blt _0200CAE4 +_0200CAF8: + ldr r1, _0200CC7C ; =0x03809E54 + and r2, r0, #0xf0000 + mov r2, r2, lsr #0x10 + mov r2, r2, lsl #1 + strh r0, [r1, r2] + tst r0, #0x1000000 + beq _0200CC70 + ldr r1, _0200CC80 ; =0x03809E4C + 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 _0200CC64 +_0200CB38: ; jump table + b _0200CB58 ; case 0 + b _0200CB68 ; case 1 + b _0200CC64 ; case 2 + b _0200CC00 ; case 3 + b _0200CB9C ; case 4 + b _0200CBD0 ; case 5 + b _0200CC34 ; case 6 + b _0200CC4C ; case 7 +_0200CB58: + mov r0, #0x60 + mov r1, #0 + bl sub_0200BC30 + b _0200CC70 +_0200CB68: + ldrh ip, [r1, #0xa] + mov r1, r4 + and r3, r2, #0xff + mov r0, #3 + mov r2, #2 + str ip, [sp] + bl sub_0200BD64 + cmp r0, #0 + bne _0200CC70 + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 + b _0200CC70 +_0200CB9C: + ldrh ip, [r1, #0xa] + mov r1, r4 + and r3, r2, #0xff + mov r0, #3 + mov r2, #2 + str ip, [sp] + bl sub_0200BD64 + cmp r0, #0 + bne _0200CC70 + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 + b _0200CC70 +_0200CBD0: + mov r0, r2, lsl #0x10 + mov r1, r4 + mov r3, r0, lsr #0x10 + mov r0, #3 + mov r2, #1 + bl sub_0200BD64 + cmp r0, #0 + bne _0200CC70 + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 + b _0200CC70 +_0200CC00: + 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_0200BD64 + cmp r0, #0 + bne _0200CC70 + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 + b _0200CC70 +_0200CC34: + and r0, r2, #0xff + bl sub_0200D404 + mov r0, #0x66 + mov r1, #0 + bl sub_0200BC30 + b _0200CC70 +_0200CC4C: + bl sub_0200D420 + mov r0, r0, lsl #0x10 + mov r1, r0, lsr #0x10 + mov r0, #0x67 + bl sub_0200BC30 + b _0200CC70 +_0200CC64: + mov r0, r4 + mov r1, #1 + bl sub_0200BC30 +_0200CC70: + add sp, sp, #4 + ldmia sp!, {r3, r4, lr} + bx lr + .align 2, 0 +_0200CC7C: .word 0x03809E54 +_0200CC80: .word 0x03809E4C + arm_func_end sub_0200CAC8 + + arm_func_start sub_0200CC84 +sub_0200CC84: ; 0x0200CC84 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + bl sub_02005EE8 + mov r5, r0 + mov r0, #3 + bl sub_0200BCF4 + cmp r0, #0 + bne _0200CCC4 + mov r0, r5 + bl sub_02005EFC + ldr r0, [r4, #4] + mov r1, #4 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0200BC30 + b _0200CDE8 +_0200CCC4: + mov r0, #3 + bl sub_0200BD10 + mov r0, r5 + bl sub_02005EFC + ldr r1, [r4, #4] + sub r0, r1, #0x61 + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0200CDD0 +_0200CCE8: ; jump table + b _0200CD00 ; case 0 + b _0200CDD0 ; case 1 + b _0200CD9C ; case 2 + b _0200CD24 ; case 3 + b _0200CD60 ; case 4 + b _0200CDC4 ; case 5 +_0200CD00: + ldr r0, _0200CDF0 ; =0x03809E4C + mov r1, #1 + str r1, [r0, #0x28] + ldr r1, [r4, #8] + strh r1, [r0, #2] + ldr r1, [r4, #0xc] + strh r1, [r0] + bl sub_0200D104 + b _0200CDE0 +_0200CD24: + ldr r2, _0200CDF0 ; =0x03809E4C + 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_0200CE38 + mov r0, #0x64 + mov r1, #0 + bl sub_0200BC30 + b _0200CDE0 +_0200CD60: + ldr r1, _0200CDF0 ; =0x03809E4C + 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_0200CEB4 + add r1, r4, #0x70 + mov r2, r1, lsl #0x10 + mov r1, r0 + mov r0, r2, lsr #0x10 + bl sub_0200BC30 + b _0200CDE0 +_0200CD9C: + ldr r1, _0200CDF0 ; =0x03809E4C + mov r0, #2 + str r0, [r1, #0x28] + ldr r0, [r4, #8] + str r0, [r1, #0x2c] + bl sub_0200CF78 + mov r0, #0x63 + mov r1, #0 + bl sub_0200BC30 + b _0200CDE0 +_0200CDC4: + ldr r0, [r4, #8] + bl sub_0200D09C + b _0200CDE0 +_0200CDD0: + mov r0, r1, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, #1 + bl sub_0200BC30 +_0200CDE0: + mov r0, #3 + bl sub_0200BD28 +_0200CDE8: + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_0200CDF0: .word 0x03809E4C + arm_func_end sub_0200CC84 arm_func_start sub_0200CDF4 sub_0200CDF4: ; 0x0200CDF4 @@ -13807,13 +16696,37 @@ sub_0200D404: ; 0x0200D404 .align 2, 0 _0200D41C: .word 0x03809E80 arm_func_end sub_0200D404 -_0200D420: - .byte 0x04, 0x00, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x80, 0x9E, 0x80, 0x03 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0x2C, 0x30, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x9F, 0xE5, 0xA4, 0x20, 0xA0, 0xE3, 0x12, 0x00, 0x83, 0xE9, 0x81, 0xE3, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0x12, 0x00, 0x00, 0xEB, 0x0C, 0x00, 0x9F, 0xE5, 0x03, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xC0, 0xE5, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x88, 0x9E, 0x80, 0x03 - .byte 0x98, 0x9E, 0x80, 0x03 + + arm_func_start sub_0200D420 +sub_0200D420: ; 0x0200D420 + ldr r0, _0200D42C ; =0x03809E80 + ldr r0, [r0, #4] + bx lr + .align 2, 0 +_0200D42C: .word 0x03809E80 + arm_func_end sub_0200D420 + + arm_func_start sub_0200D430 +sub_0200D430: ; 0x0200D430 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r3, _0200D46C ; =0x03809E88 + mov r1, #0 + ldr r0, _0200D470 ; =0x03809E98 + mov r2, #0xa4 + stmib r3, {r1, r4} + bl sub_02006258 + mov r0, r4 + bl sub_0200D4A4 + ldr r0, _0200D46C ; =0x03809E88 + mov r1, #3 + strb r1, [r0] + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0200D46C: .word 0x03809E88 +_0200D470: .word 0x03809E98 + arm_func_end sub_0200D430 arm_func_start sub_0200D474 sub_0200D474: ; 0x0200D474 @@ -13877,192 +16790,874 @@ _0200D53C: .word 0x0380AAFC _0200D540: .word 0x0380AAFC _0200D544: .word 0x03809F3C arm_func_end sub_0200D4A4 -_0200D548: - .byte 0x34, 0x00, 0x9F, 0xE5, 0x00, 0x30, 0xA0, 0xE3 - .byte 0x20, 0x30, 0x80, 0xE5, 0x2C, 0x00, 0x9F, 0xE5, 0x03, 0x20, 0xA0, 0xE1, 0x83, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x30, 0x83, 0xE2, 0xB1, 0x20, 0x80, 0xE1, 0x10, 0x00, 0x53, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA - .byte 0x14, 0x10, 0x9F, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xFC, 0xB1, 0x80, 0x03, 0xFC, 0xB1, 0x80, 0x03, 0x0E, 0x01, 0x00, 0x04 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x02, 0x04, 0x10, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xA4, 0x12, 0x9F, 0xE5 - .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x30, 0xA0, 0xE1, 0x84, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2 - .byte 0xB2, 0x30, 0x81, 0xE1, 0x10, 0x00, 0x54, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x84, 0x12, 0x9F, 0xE5 - .byte 0x0F, 0x28, 0x00, 0xE2, 0x22, 0x28, 0xA0, 0xE1, 0x82, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x81, 0xE1 - .byte 0x01, 0x04, 0x10, 0xE3, 0x99, 0x00, 0x00, 0x0A, 0x6C, 0x12, 0x9F, 0xE5, 0xB0, 0x20, 0xD1, 0xE1 - .byte 0xFF, 0x0C, 0x02, 0xE2, 0x00, 0x04, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1, 0x40, 0x00, 0x44, 0xE2 - .byte 0x03, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8D, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA - .byte 0x10, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x68, 0x00, 0x00, 0xEA, 0x04, 0x10, 0xA0, 0xE1 - .byte 0xFF, 0x30, 0x02, 0xE2, 0x02, 0x00, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0xD0, 0xF9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x7E, 0xF9, 0xFF, 0xEB, 0x14, 0x02, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x04, 0x10, 0x00, 0xE5, 0x7D, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x91, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x10, 0xA0, 0xE3, 0x73, 0xF9, 0xFF, 0xEB - .byte 0x76, 0x00, 0x00, 0xEA, 0xFF, 0x00, 0x02, 0xE2, 0xB4, 0x02, 0xC1, 0xE1, 0xB2, 0x20, 0xD1, 0xE1 - .byte 0xB4, 0x00, 0xD1, 0xE1, 0x02, 0x38, 0x80, 0xE1, 0x02, 0x04, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x3A - .byte 0x09, 0x05, 0x53, 0xE3, 0x03, 0x00, 0x00, 0x3A, 0x04, 0x00, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x66, 0xF9, 0xFF, 0xEB, 0x69, 0x00, 0x00, 0xEA, 0x28, 0x30, 0x81, 0xE5, 0xB6, 0x20, 0xD1, 0xE1 - .byte 0xB8, 0x00, 0xD1, 0xE1, 0x02, 0x28, 0x80, 0xE1, 0x02, 0x00, 0x83, 0xE0, 0x09, 0x05, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x9A, 0x04, 0x00, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE3, 0x5B, 0xF9, 0xFF, 0xEB - .byte 0x5E, 0x00, 0x00, 0xEA, 0x30, 0x20, 0x81, 0xE5, 0xBA, 0x20, 0xD1, 0xE1, 0xBC, 0x00, 0xD1, 0xE1 - .byte 0x02, 0x08, 0x80, 0xE1, 0x5F, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE3, 0x50, 0xF9, 0xFF, 0xEB, 0x53, 0x00, 0x00, 0xEA - .byte 0x54, 0x31, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x2C, 0x20, 0x83, 0xE5, 0xB4, 0x02, 0xD3, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0x07, 0xC0, 0x00, 0xE2, 0x02, 0x00, 0xA0, 0xE3, 0xB6, 0xC2, 0xC3, 0xE1 - .byte 0x93, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x41, 0xF9, 0xFF, 0xEB, 0x44, 0x00, 0x00, 0xEA, 0x1C, 0x11, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x20, 0xC1, 0xE1, 0x0C, 0x01, 0x9F, 0xE5, 0x04, 0x20, 0x01, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x20, 0x10, 0x80, 0xE5, 0x3C, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x91, 0xE5 - .byte 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x10, 0xA0, 0xE3 - .byte 0x32, 0xF9, 0xFF, 0xEB, 0x35, 0x00, 0x00, 0xEA, 0x04, 0x10, 0xA0, 0xE1, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x7A, 0xF9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE3, 0x28, 0xF9, 0xFF, 0xEB, 0x2B, 0x00, 0x00, 0xEA - .byte 0xB4, 0x00, 0x9F, 0xE5, 0x03, 0x20, 0xA0, 0xE3, 0xB4, 0x10, 0x9F, 0xE5, 0x20, 0x20, 0x80, 0xE5 - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1, 0x23, 0x00, 0x00, 0xEA - .byte 0x20, 0x00, 0x91, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x03, 0x10, 0xA0, 0xE3, 0x19, 0xF9, 0xFF, 0xEB, 0x1C, 0x00, 0x00, 0xEA, 0xB2, 0x20, 0xD1, 0xE1 - .byte 0xB4, 0x00, 0xD1, 0xE1, 0x02, 0x08, 0x80, 0xE1, 0x1E, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE3, 0x0F, 0xF9, 0xFF, 0xEB - .byte 0x12, 0x00, 0x00, 0xEA, 0xBB, 0xE1, 0xFF, 0xEB, 0x54, 0x30, 0x9F, 0xE5, 0x48, 0x10, 0x9F, 0xE5 - .byte 0xB0, 0x20, 0xD3, 0xE1, 0x80, 0x20, 0xC2, 0xE3, 0xB0, 0x20, 0xC3, 0xE1, 0xB4, 0x23, 0xD1, 0xE1 - .byte 0xB2, 0x20, 0x43, 0xE1, 0xB6, 0x13, 0xD1, 0xE1, 0xC0, 0x10, 0x81, 0xE3, 0xB0, 0x10, 0xC3, 0xE1 - .byte 0xB5, 0xE1, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xFF, 0xF8, 0xFF, 0xEB - .byte 0x02, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE1, 0x01, 0x10, 0xA0, 0xE3, 0xFB, 0xF8, 0xFF, 0xEB - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xFC, 0xB1, 0x80, 0x03, 0xFC, 0xB1, 0x80, 0x03 - .byte 0x94, 0xFF, 0x7F, 0x02, 0x0E, 0x01, 0x00, 0x04, 0x01, 0x08, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x2A - .byte 0x90, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB6, 0x23, 0xC1, 0xE1, 0x01, 0x08, 0x60, 0xE2 - .byte 0xB4, 0x03, 0xC1, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x05, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x2A, 0x6C, 0x10, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0x20, 0x03, 0xA0, 0xE1 - .byte 0x01, 0x28, 0x60, 0xE2, 0xB6, 0x33, 0xC1, 0xE1, 0x03, 0x00, 0xA0, 0xE1, 0xB4, 0x23, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x04, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x2A, 0x44, 0x10, 0x9F, 0xE5 - .byte 0x02, 0x20, 0xA0, 0xE3, 0x20, 0x04, 0xA0, 0xE1, 0xB6, 0x23, 0xC1, 0xE1, 0x01, 0x08, 0x60, 0xE2 - .byte 0xB4, 0x03, 0xC1, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0x01, 0x03, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x23, 0x1E, 0xFF, 0x2F, 0x21, 0x18, 0x10, 0x9F, 0xE5, 0x03, 0x20, 0xA0, 0xE3 - .byte 0x20, 0x05, 0xA0, 0xE1, 0xB6, 0x23, 0xC1, 0xE1, 0x01, 0x08, 0x60, 0xE2, 0xB4, 0x03, 0xC1, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0xFC, 0xB1, 0x80, 0x03, 0x38, 0x40, 0x2D, 0xE9 - .byte 0x00, 0x40, 0xA0, 0xE1, 0x04, 0x20, 0x94, 0xE5, 0x40, 0x00, 0x52, 0xE3, 0x04, 0x00, 0x00, 0x0A - .byte 0x41, 0x00, 0x52, 0xE3, 0x2E, 0x00, 0x00, 0x0A, 0x42, 0x00, 0x52, 0xE3, 0x52, 0x00, 0x00, 0x0A - .byte 0x78, 0x00, 0x00, 0xEA, 0x6F, 0xE1, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x02, 0x00, 0xA0, 0xE3 - .byte 0xEF, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x6D, 0xE1, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0xB5, 0xF8, 0xFF, 0xEB, 0x6A, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xA0, 0xE3 - .byte 0xEA, 0xF8, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x63, 0xE1, 0xFF, 0xEB, 0x08, 0x00, 0x94, 0xE5 - .byte 0x01, 0x00, 0x00, 0xE2, 0x01, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x32, 0x01, 0x00, 0xEB - .byte 0x08, 0x10, 0x94, 0xE5, 0x02, 0x00, 0x11, 0xE3, 0x02, 0x09, 0x20, 0x12, 0x03, 0x00, 0x00, 0xEA - .byte 0xD8, 0x00, 0x00, 0xEB, 0x08, 0x10, 0x94, 0xE5, 0x02, 0x00, 0x11, 0xE3, 0x80, 0x00, 0x20, 0x12 - .byte 0x68, 0x11, 0x9F, 0xE5, 0x00, 0x08, 0xA0, 0x11, 0x20, 0x08, 0xA0, 0x11, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0x04, 0x10, 0x01, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x99, 0xF8, 0xFF, 0xEB, 0x02, 0x00, 0xA0, 0xE3, 0xD5, 0xF8, 0xFF, 0xEB - .byte 0x4C, 0x00, 0x00, 0xEA, 0x38, 0x01, 0x9F, 0xE5, 0x20, 0x10, 0x90, 0xE5, 0x01, 0x00, 0x51, 0xE3 - .byte 0x1C, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0xBA, 0x13, 0xC0, 0xE1, 0xB8, 0x13, 0xC0, 0xE1 - .byte 0x3C, 0xE1, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x40, 0x00, 0xA0, 0xE3, 0x35, 0xD8, 0xFF, 0xEB - .byte 0x10, 0x11, 0x9F, 0xE5, 0x40, 0x00, 0xA0, 0xE3, 0x5C, 0x01, 0x00, 0xEB, 0x65, 0x01, 0x00, 0xEB - .byte 0xFC, 0x10, 0x9F, 0xE5, 0x00, 0x21, 0x9F, 0xE5, 0xB4, 0x33, 0xD1, 0xE1, 0x05, 0x00, 0xA0, 0xE1 - .byte 0xB0, 0x30, 0xC2, 0xE1, 0xB6, 0x13, 0xD1, 0xE1, 0xC0, 0x10, 0x81, 0xE3, 0xB2, 0x10, 0xC2, 0xE1 - .byte 0x31, 0xE1, 0xFF, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x79, 0xF8, 0xFF, 0xEB, 0xC4, 0x00, 0x9F, 0xE5, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x20, 0x10, 0x80, 0xE5, 0x2B, 0x00, 0x00, 0xEA, 0x02, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x03, 0x10, 0xA0, 0xE3, 0x71, 0xF8, 0xFF, 0xEB, 0x26, 0x00, 0x00, 0xEA, 0xA0, 0x00, 0x9F, 0xE5 - .byte 0x20, 0x10, 0x90, 0xE5, 0x03, 0x00, 0x41, 0xE2, 0x01, 0x00, 0x50, 0xE3, 0x19, 0x00, 0x00, 0x8A - .byte 0x98, 0x10, 0x9F, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0x14, 0xE1, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x40, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x36, 0x01, 0x00, 0xEB, 0x57, 0x01, 0x00, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x12, 0xE1, 0xFF, 0xEB - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x20, 0x00, 0x90, 0xE5, 0x03, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x42, 0x00, 0xA0, 0xE3, 0x58, 0xF8, 0xFF, 0xEB, 0x01, 0x00, 0x00, 0xEA - .byte 0x51, 0x00, 0xA0, 0xE3, 0x55, 0xF8, 0xFF, 0xEB, 0x34, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x20, 0x10, 0x80, 0xE5, 0x07, 0x00, 0x00, 0xEA, 0x03, 0x00, 0x51, 0xE3, 0x03, 0x10, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x42, 0x00, 0xA0, 0xE3, 0x4C, 0xF8, 0xFF, 0xEB, 0x01, 0x00, 0x00, 0xEA - .byte 0x51, 0x00, 0xA0, 0xE3, 0x49, 0xF8, 0xFF, 0xEB, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x94, 0xFF, 0x7F, 0x02, 0xFC, 0xB1, 0x80, 0x03, 0x3C, 0x59, 0x80, 0x03, 0x0C, 0x01, 0x00, 0x04 - .byte 0x0E, 0x01, 0x00, 0x04, 0x08, 0x40, 0x2D, 0xE9, 0x0A, 0x00, 0x00, 0xEB, 0x1C, 0x30, 0x9F, 0xE5 - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x93, 0xE5, 0x40, 0x10, 0xA0, 0xE3, 0x40, 0x20, 0x82, 0xE3 - .byte 0x00, 0x20, 0x83, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF8, 0xFF, 0x80, 0x03, 0x14, 0x02, 0x00, 0x04, 0xF0, 0x40, 0x2D, 0xE9, 0x84, 0x41, 0x9F, 0xE5 - .byte 0xB6, 0x52, 0xD4, 0xE1, 0x04, 0x00, 0x05, 0xE2, 0x04, 0x00, 0x50, 0xE3, 0xB8, 0x63, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA, 0xBA, 0x73, 0xD4, 0xE1, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x60, 0x71, 0x9F, 0xE5, 0xAD, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x17, 0x00, 0x00, 0x1A, 0x02, 0x00, 0xA0, 0xE3, 0x55, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x13, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x05, 0xE2, 0x01, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xA5, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x15, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x00, 0x70, 0xA0, 0xE1, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA, 0x02, 0x79, 0x20, 0xE2 - .byte 0x07, 0x00, 0x00, 0xEA, 0x47, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x15, 0xE3, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x00, 0x70, 0xA0, 0xE1, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0xEA - .byte 0x80, 0x70, 0x20, 0xE2, 0x01, 0x00, 0x05, 0xE2, 0xF0, 0x30, 0x9F, 0xE5, 0x2C, 0x10, 0x94, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x28, 0x20, 0x94, 0xE5, 0xB1, 0x70, 0xA2, 0xE1 - .byte 0x90, 0x23, 0x83, 0xE5, 0xE5, 0x3F, 0x83, 0xE2, 0xB0, 0x70, 0xC3, 0xE1, 0x02, 0x10, 0x81, 0xE2 - .byte 0x0D, 0x00, 0x00, 0xEA, 0xFF, 0x70, 0x07, 0xE2, 0x01, 0x00, 0x11, 0xE3, 0x02, 0x00, 0x00, 0x1A - .byte 0x07, 0x60, 0xA0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x07, 0x00, 0x00, 0xEA, 0x07, 0x04, 0x86, 0xE1 - .byte 0x28, 0x20, 0x94, 0xE5, 0x01, 0x10, 0x41, 0xE2, 0xB1, 0x00, 0xA2, 0xE1, 0x90, 0x23, 0x83, 0xE5 - .byte 0xE5, 0x3F, 0x83, 0xE2, 0xB0, 0x00, 0xC3, 0xE1, 0x02, 0x10, 0x81, 0xE2, 0xB8, 0x63, 0xC4, 0xE1 - .byte 0xBA, 0x73, 0xC4, 0xE1, 0x30, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x00, 0x00, 0x00, 0x2A - .byte 0x00, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3, 0x2C, 0x10, 0x84, 0xE5, 0x17, 0x00, 0x00, 0x3A - .byte 0xB4, 0x02, 0xD4, 0xE1, 0x10, 0x00, 0x00, 0xE2, 0x10, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A - .byte 0x51, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0xE4, 0xF7, 0xFF, 0xEB, 0x0F, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0xA0, 0xE3, 0x42, 0x10, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0x2C, 0xF8, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x51, 0x00, 0xA0, 0xE3, 0x04, 0x10, 0xA0, 0xE3 - .byte 0xDA, 0xF7, 0xFF, 0xEB, 0x05, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE3, 0x20, 0x00, 0x84, 0xE5 - .byte 0x1C, 0x10, 0x9F, 0xE5, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0xC0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0xF0, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xFC, 0xB1, 0x80, 0x03, 0xFF, 0xFF, 0x00, 0x00 - .byte 0x00, 0xFC, 0x7F, 0x02, 0x0E, 0x01, 0x00, 0x04, 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x21, 0x9F, 0xE5 - .byte 0xB0, 0x00, 0xD2, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0xF4, 0x10, 0x9F, 0xE5 - .byte 0xF4, 0x00, 0x9F, 0xE5, 0xB0, 0x10, 0xC2, 0xE1, 0xEC, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x02, 0x10, 0x40, 0xE2, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x39, 0x00, 0x00, 0xEB, 0xD4, 0x20, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5, 0x00, 0x4C, 0xA0, 0xE1 - .byte 0xB0, 0x20, 0xC1, 0xE1, 0x34, 0x00, 0x00, 0xEB, 0xC4, 0x20, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5 - .byte 0x24, 0x08, 0x80, 0xE1, 0x01, 0x10, 0x00, 0xE0, 0x10, 0x00, 0x92, 0xE5, 0x81, 0x14, 0xA0, 0xE1 - .byte 0x21, 0x38, 0x80, 0xE0, 0x10, 0x30, 0x82, 0xE5, 0x0C, 0x00, 0x92, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x0C, 0x00, 0x82, 0xE5, 0x01, 0x0A, 0x50, 0xE3, 0x15, 0x00, 0x00, 0x3A, 0xD0, 0x40, 0xD2, 0xE1 - .byte 0x23, 0x06, 0xA0, 0xE1, 0x80, 0x00, 0x40, 0xE2, 0x00, 0x0C, 0xA0, 0xE1, 0x40, 0x0C, 0x54, 0xE1 - .byte 0x40, 0x0C, 0xA0, 0xE1, 0x0C, 0x00, 0x54, 0xB3, 0x01, 0x00, 0x84, 0xB2, 0x00, 0x00, 0xC2, 0xB5 - .byte 0x07, 0x00, 0x00, 0xBA, 0x04, 0x00, 0x50, 0xE1, 0x05, 0x00, 0x00, 0xAA, 0x0B, 0x00, 0xE0, 0xE3 - .byte 0x00, 0x00, 0x54, 0xE1, 0x58, 0x00, 0x9F, 0xC5, 0xD0, 0x20, 0xD0, 0xC1, 0x01, 0x20, 0x42, 0xC2 - .byte 0x00, 0x20, 0xC0, 0xC5, 0x48, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0x20, 0x80, 0xE5 - .byte 0x10, 0x20, 0x80, 0xE5, 0x38, 0x00, 0x9F, 0xE5, 0xD0, 0x00, 0xD0, 0xE1, 0x21, 0x08, 0x60, 0xE0 - .byte 0xFF, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0xC3, 0x01, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0xB3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x01, 0x00, 0x04, 0x01, 0x8A, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x04 - .byte 0x01, 0x82, 0x00, 0x00, 0x38, 0xB2, 0x80, 0x03, 0x80, 0x7F, 0x00, 0x00, 0x24, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2, 0xB0, 0x00, 0xD1, 0xE1 - .byte 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0x9F, 0xE5, 0xB0, 0x00, 0xD0, 0xE1 - .byte 0xFF, 0x00, 0x00, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1, 0xC2, 0x01, 0x00, 0x04, 0x10, 0x40, 0x2D, 0xE9 - .byte 0x0C, 0x21, 0x9F, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x11, 0x9F, 0xE5, 0x00, 0x01, 0x9F, 0xE5, 0xB0, 0x10, 0xC2, 0xE1, 0xE4, 0x10, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2, 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3 - .byte 0xFC, 0xFF, 0xFF, 0x1A, 0xE4, 0xFF, 0xFF, 0xEB, 0xE0, 0x20, 0x9F, 0xE5, 0xD0, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x4C, 0xA0, 0xE1, 0xB0, 0x20, 0xC1, 0xE1, 0xDF, 0xFF, 0xFF, 0xEB, 0xD0, 0x30, 0x9F, 0xE5 - .byte 0xD0, 0x10, 0x9F, 0xE5, 0x24, 0x08, 0x80, 0xE1, 0x01, 0x20, 0x00, 0xE0, 0x04, 0x00, 0x93, 0xE5 - .byte 0x82, 0x28, 0xA0, 0xE1, 0x22, 0x48, 0x80, 0xE0, 0x04, 0x40, 0x83, 0xE5, 0x08, 0x00, 0x93, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x08, 0x00, 0x83, 0xE5, 0x01, 0x0C, 0x50, 0xE3, 0x17, 0x00, 0x00, 0x3A - .byte 0x81, 0x00, 0xA0, 0xE1, 0x24, 0x04, 0x00, 0xE0, 0xF2, 0x40, 0xD3, 0xE1, 0x02, 0x09, 0x40, 0xE2 - .byte 0x00, 0x08, 0xA0, 0xE1, 0x40, 0x08, 0x54, 0xE1, 0x40, 0x18, 0xA0, 0xE1, 0x03, 0x0B, 0x54, 0xB3 - .byte 0x10, 0x00, 0x84, 0xB2, 0xB2, 0x00, 0xC3, 0xB1, 0x08, 0x00, 0x00, 0xBA, 0x04, 0x00, 0x51, 0xE1 - .byte 0x06, 0x00, 0x00, 0xAA, 0x03, 0x0B, 0xA0, 0xE3, 0x00, 0x00, 0x60, 0xE2, 0x00, 0x00, 0x54, 0xE1 - .byte 0x5C, 0x00, 0x9F, 0xC5, 0xF2, 0x10, 0xD0, 0xC1, 0x10, 0x10, 0x41, 0xC2, 0xB2, 0x10, 0xC0, 0xC1 - .byte 0x4C, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x10, 0x80, 0xE5, 0x04, 0x10, 0x80, 0xE5 - .byte 0x3C, 0x10, 0x9F, 0xE5, 0x40, 0x00, 0x9F, 0xE5, 0xF2, 0x10, 0xD1, 0xE1, 0x22, 0x18, 0x61, 0xE0 - .byte 0x00, 0x00, 0x51, 0xE1, 0x00, 0x10, 0xA0, 0xC1, 0x01, 0x00, 0x00, 0xCA, 0x00, 0x00, 0x51, 0xE3 - .byte 0x00, 0x10, 0xA0, 0xB3, 0x01, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x01, 0x00, 0x04, 0x01, 0x8A, 0x00, 0x00, 0xC2, 0x01, 0x00, 0x04 - .byte 0x01, 0x82, 0x00, 0x00, 0x38, 0xB2, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0xF0, 0xFF, 0x00, 0x00 - .byte 0x1C, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x01, 0x00, 0x10, 0xE3, 0x03, 0x11, 0x82, 0x17 - .byte 0x01, 0x30, 0x83, 0xE2, 0x19, 0x00, 0x53, 0xE3, 0xA0, 0x00, 0xA0, 0xE1, 0xF9, 0xFF, 0xFF, 0xBA - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0x74, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x48, 0x30, 0x9F, 0xE5 - .byte 0x48, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x93, 0xE5, 0x00, 0x00, 0x52, 0xE1, 0x0C, 0x00, 0x00, 0x0A - .byte 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x5F, 0x1F, 0x43, 0xE2 - .byte 0x04, 0x10, 0x80, 0xE5, 0x40, 0x10, 0xA0, 0xE3, 0x08, 0x10, 0x80, 0xE5, 0x0C, 0x20, 0x80, 0xE5 - .byte 0xC0, 0xDF, 0xFF, 0xEB, 0x14, 0x20, 0x9F, 0xE5, 0x0C, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0x81, 0xE5 - .byte 0xC1, 0xDF, 0xFF, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xFC, 0xFF, 0x80, 0x03 - .byte 0x64, 0x5E, 0x80, 0x03, 0x4C, 0xB2, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x2C, 0x10, 0x9F, 0xE5 - .byte 0x2C, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x05, 0x00, 0x00, 0x1A - .byte 0xB0, 0xDF, 0xFF, 0xEB, 0x1C, 0x10, 0x9F, 0xE5, 0x10, 0x20, 0x9F, 0xE5, 0x0C, 0x10, 0x91, 0xE5 - .byte 0x00, 0x10, 0x82, 0xE5, 0xB0, 0xDF, 0xFF, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xFC, 0xFF, 0x80, 0x03, 0x64, 0x5E, 0x80, 0x03, 0x4C, 0xB2, 0x80, 0x03, 0x01, 0xC3, 0xA0, 0xE3 - .byte 0x82, 0x1F, 0x8C, 0xE2, 0xB0, 0x00, 0xD1, 0xE1, 0x00, 0x00, 0x10, 0xE1, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1, 0x10, 0x32, 0x9C, 0xE5, 0x14, 0x12, 0x9C, 0xE5 - .byte 0x03, 0x20, 0x11, 0xE0, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xE0, 0x01, 0x9F, 0xE5, 0x00, 0x00, 0x12, 0xE1, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x14, 0x22, 0x8C, 0xE5, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x1E, 0xFF, 0x2F, 0xE1 - arm_func_start sub_0200E0A0 -sub_0200E0A0: ; 0x0200E0A0 + arm_func_start sub_0200D548 +sub_0200D548: ; 0x0200D548 + ldr r0, _0200D584 ; =0x0380B1FC + mov r3, #0 + str r3, [r0, #0x20] + ldr r0, _0200D588 ; =0x0380B1FC + mov r2, r3 +_0200D55C: + mov r1, r3, lsl #1 + add r3, r3, #1 + strh r2, [r0, r1] + cmp r3, #0x10 + blt _0200D55C + ldr r1, _0200D58C ; =0x0400010E + ldrh r0, [r1] + bic r0, r0, #0x80 + strh r0, [r1] + bx lr + .align 2, 0 +_0200D584: .word 0x0380B1FC +_0200D588: .word 0x0380B1FC +_0200D58C: .word 0x0400010E + arm_func_end sub_0200D548 + + arm_func_start sub_0200D590 +sub_0200D590: ; 0x0200D590 + stmdb sp!, {r4, lr} + tst r0, #0x2000000 + beq _0200D5BC + ldr r1, _0200D848 ; =0x0380B1FC + mov r4, #0 + mov r3, r4 +_0200D5A8: + mov r2, r4, lsl #1 + add r4, r4, #1 + strh r3, [r1, r2] + cmp r4, #0x10 + blt _0200D5A8 +_0200D5BC: + ldr r1, _0200D848 ; =0x0380B1FC + and r2, r0, #0xf0000 + mov r2, r2, lsr #0x10 + mov r2, r2, lsl #1 + strh r0, [r1, r2] + tst r0, #0x1000000 + beq _0200D840 + ldr r1, _0200D84C ; =0x0380B1FC + 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 _0200D834 +_0200D5FC: ; jump table + b _0200D60C ; case 0 + b _0200D648 ; case 1 + b _0200D74C ; case 2 + b _0200D7B0 ; case 3 +_0200D60C: + mov r1, r4 + and r3, r2, #0xff + mov r0, #2 + mov r2, #1 + bl sub_0200BD64 + cmp r0, #0 + bne _0200D634 + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 +_0200D634: + ldr r0, _0200D850 ; =0x027FFF94 + mov r1, #0 + strh r1, [r0] + str r1, [r0, #-4] + b _0200D840 +_0200D648: + ldr r0, [r1, #0x20] + cmp r0, #0 + beq _0200D664 + mov r0, r4 + mov r1, #3 + bl sub_0200BC30 + b _0200D840 +_0200D664: + 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 _0200D688 + cmp r3, #0x2400000 + blo _0200D698 +_0200D688: + mov r0, r4 + mov r1, #2 + bl sub_0200BC30 + b _0200D840 +_0200D698: + 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 _0200D6C4 + mov r0, r4 + mov r1, #2 + bl sub_0200BC30 + b _0200D840 +_0200D6C4: + str r2, [r1, #0x30] + ldrh r2, [r1, #0xa] + ldrh r0, [r1, #0xc] + orr r0, r0, r2, lsl #16 + bl sub_0200D858 + cmp r0, #0 + bne _0200D6F0 + mov r0, r4 + mov r1, #2 + bl sub_0200BC30 + b _0200D840 +_0200D6F0: + ldr r3, _0200D84C ; =0x0380B1FC + 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_0200BD64 + cmp r0, #0 + bne _0200D72C + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 + b _0200D840 +_0200D72C: + ldr r1, _0200D850 ; =0x027FFF94 + mov r2, #0 + strh r2, [r1] + ldr r0, _0200D84C ; =0x0380B1FC + str r2, [r1, #-4] + mov r1, #1 + str r1, [r0, #0x20] + b _0200D840 +_0200D74C: + ldr r0, [r1, #0x20] + cmp r0, #2 + beq _0200D768 + mov r0, r4 + mov r1, #3 + bl sub_0200BC30 + b _0200D840 +_0200D768: + mov r1, r4 + mov r0, #2 + mov r2, #0 + bl sub_0200BD64 + cmp r0, #0 + bne _0200D790 + mov r0, r4 + mov r1, #4 + bl sub_0200BC30 + b _0200D840 +_0200D790: + ldr r0, _0200D84C ; =0x0380B1FC + mov r2, #3 + ldr r1, _0200D854 ; =0x0400010E + str r2, [r0, #0x20] + ldrh r0, [r1] + bic r0, r0, #0x80 + strh r0, [r1] + b _0200D840 +_0200D7B0: + ldr r0, [r1, #0x20] + cmp r0, #2 + beq _0200D7CC + mov r0, r4 + mov r1, #3 + bl sub_0200BC30 + b _0200D840 +_0200D7CC: + ldrh r2, [r1, #2] + ldrh r0, [r1, #4] + orr r0, r0, r2, lsl #16 + bl sub_0200D858 + cmp r0, #0 + bne _0200D7F4 + mov r0, r4 + mov r1, #2 + bl sub_0200BC30 + b _0200D840 +_0200D7F4: + bl sub_02005EE8 + ldr r3, _0200D854 ; =0x0400010E + ldr r1, _0200D84C ; =0x0380B1FC + 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 sub_02005EFC + mov r0, r4 + mov r1, #0 + bl sub_0200BC30 + b _0200D840 +_0200D834: + mov r0, r4 + mov r1, #1 + bl sub_0200BC30 +_0200D840: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0200D848: .word 0x0380B1FC +_0200D84C: .word 0x0380B1FC +_0200D850: .word 0x027FFF94 +_0200D854: .word 0x0400010E + arm_func_end sub_0200D590 + + arm_func_start sub_0200D858 +sub_0200D858: ; 0x0200D858 + cmp r0, #0x10000 + bhs _0200D87C + ldr r1, _0200D8F8 ; =0x0380B1FC + mov r2, #0 + strh r2, [r1, #0x36] + rsb r0, r0, #0x10000 + strh r0, [r1, #0x34] + mov r0, #1 + bx lr +_0200D87C: + cmp r0, #0x400000 + bhs _0200D8A4 + ldr r1, _0200D8F8 ; =0x0380B1FC + 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 +_0200D8A4: + cmp r0, #0x1000000 + bhs _0200D8CC + ldr r1, _0200D8F8 ; =0x0380B1FC + 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 +_0200D8CC: + cmp r0, #0x4000000 + movhs r0, #0 + bxhs lr + ldr r1, _0200D8F8 ; =0x0380B1FC + 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 +_0200D8F8: .word 0x0380B1FC + arm_func_end sub_0200D858 + + arm_func_start sub_0200D8FC +sub_0200D8FC: ; 0x0200D8FC + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + ldr r2, [r4, #4] + cmp r2, #0x40 + beq _0200D924 + cmp r2, #0x41 + beq _0200D9D4 + cmp r2, #0x42 + beq _0200DA6C + b _0200DB08 +_0200D924: + bl sub_02005EE8 + mov r5, r0 + mov r0, #2 + bl sub_0200BCF4 + cmp r0, #0 + bne _0200D95C + mov r0, r5 + bl sub_02005EFC + ldr r0, [r4, #4] + mov r1, #4 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0200BC30 + b _0200DB08 +_0200D95C: + mov r0, #2 + bl sub_0200BD10 + mov r0, r5 + bl sub_02005EFC + ldr r0, [r4, #8] + and r0, r0, #1 + cmp r0, #1 + bne _0200D990 + bl sub_0200DE4C + ldr r1, [r4, #8] + tst r1, #2 + eorne r0, r0, #0x8000 + b _0200D9A0 +_0200D990: + bl sub_0200DCF8 + ldr r1, [r4, #8] + tst r1, #2 + eorne r0, r0, #0x80 +_0200D9A0: + ldr r1, _0200DB10 ; =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_0200BC30 + mov r0, #2 + bl sub_0200BD28 + b _0200DB08 +_0200D9D4: + ldr r0, _0200DB14 ; =0x0380B1FC + ldr r1, [r0, #0x20] + cmp r1, #1 + bne _0200DA58 + mov r1, #0 + strh r1, [r0, #0x3a] + strh r1, [r0, #0x38] + bl sub_02005EE8 + mov r5, r0 + mov r0, #0x40 + bl sub_02003AD8 + ldr r1, _0200DB18 ; =0x0380593C + mov r0, #0x40 + bl sub_0200DF80 + bl sub_0200DFA8 + ldr r1, _0200DB14 ; =0x0380B1FC + ldr r2, _0200DB1C ; =0x0400010C + ldrh r3, [r1, #0x34] + mov r0, r5 + strh r3, [r2] + ldrh r1, [r1, #0x36] + orr r1, r1, #0xc0 + strh r1, [r2, #2] + bl sub_02005EFC + ldr r0, [r4, #4] + mov r1, #0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_0200BC30 + ldr r0, _0200DB14 ; =0x0380B1FC + mov r1, #2 + str r1, [r0, #0x20] + b _0200DB08 +_0200DA58: + mov r0, r2, lsl #0x10 + mov r0, r0, lsr #0x10 + mov r1, #3 + bl sub_0200BC30 + b _0200DB08 +_0200DA6C: + ldr r0, _0200DB14 ; =0x0380B1FC + ldr r1, [r0, #0x20] + sub r0, r1, #3 + cmp r0, #1 + bhi _0200DAE8 + ldr r1, _0200DB20 ; =0x0400010E + ldrh r0, [r1] + bic r0, r0, #0x80 + strh r0, [r1] + bl sub_02005EE8 + mov r4, r0 + mov r0, #0x40 + mov r1, #0 + bl sub_0200DF80 + bl sub_0200E008 + mov r0, r4 + bl sub_02005EFC + ldr r0, _0200DB14 ; =0x0380B1FC + mov r1, #0 + ldr r0, [r0, #0x20] + cmp r0, #3 + bne _0200DAD0 + mov r0, #0x42 + bl sub_0200BC30 + b _0200DAD8 +_0200DAD0: + mov r0, #0x51 + bl sub_0200BC30 +_0200DAD8: + ldr r0, _0200DB14 ; =0x0380B1FC + mov r1, #0 + str r1, [r0, #0x20] + b _0200DB08 +_0200DAE8: + cmp r1, #3 + mov r1, #3 + bne _0200DB00 + mov r0, #0x42 + bl sub_0200BC30 + b _0200DB08 +_0200DB00: + mov r0, #0x51 + bl sub_0200BC30 +_0200DB08: + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_0200DB10: .word 0x027FFF94 +_0200DB14: .word 0x0380B1FC +_0200DB18: .word 0x0380593C +_0200DB1C: .word 0x0400010C +_0200DB20: .word 0x0400010E + arm_func_end sub_0200D8FC + + arm_func_start sub_0200DB24 +sub_0200DB24: ; 0x0200DB24 + stmdb sp!, {r3, lr} + bl sub_0200DB58 + ldr r3, _0200DB50 ; =0x0380FFF8 + ldr r0, _0200DB54 ; =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 +_0200DB50: .word 0x0380FFF8 +_0200DB54: .word 0x04000214 + arm_func_end sub_0200DB24 + + arm_func_start sub_0200DB58 +sub_0200DB58: ; 0x0200DB58 + stmdb sp!, {r4, r5, r6, r7, lr} + ldr r4, _0200DCE8 ; =0x0380B1FC + ldrh r5, [r4, #0x26] + and r0, r5, #4 + cmp r0, #4 + ldrh r6, [r4, #0x38] + bne _0200DB78 + b _0200DB7C +_0200DB78: + ldrh r7, [r4, #0x3a] +_0200DB7C: + beq _0200DB84 + b _0200DB88 +_0200DB84: + ldr r7, _0200DCEC ; =0x0000FFFF +_0200DB88: + bl sub_0200BE44 + cmp r0, #0 + bne _0200DBF4 + mov r0, #2 + bl sub_0200BCF4 + cmp r0, #0 + beq _0200DBF4 + and r0, r5, #1 + cmp r0, #1 + bne _0200DBD4 + bl sub_0200DE4C + tst r5, #2 + beq _0200DBC0 + b _0200DBC4 +_0200DBC0: + mov r7, r0 +_0200DBC4: + bne _0200DBCC + b _0200DBD0 +_0200DBCC: + eor r7, r0, #0x8000 +_0200DBD0: + b _0200DBF4 +_0200DBD4: + bl sub_0200DCF8 + tst r5, #2 + beq _0200DBE4 + b _0200DBE8 +_0200DBE4: + mov r7, r0 +_0200DBE8: + bne _0200DBF0 + b _0200DBF4 +_0200DBF0: + eor r7, r0, #0x80 +_0200DBF4: + and r0, r5, #1 + ldr r3, _0200DCF0 ; =0x027FFC00 + ldr r1, [r4, #0x2c] + cmp r0, #1 + bne _0200DC24 + ldr r2, [r4, #0x28] + strh r7, [r2, r1]! + str r2, [r3, #0x390] + add r3, r3, #0x394 + strh r7, [r3] + add r1, r1, #2 + b _0200DC5C +_0200DC24: + and r7, r7, #0xff + tst r1, #1 + bne _0200DC3C + mov r6, r7 + add r1, r1, #1 + b _0200DC5C +_0200DC3C: + 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 +_0200DC5C: + strh r6, [r4, #0x38] + strh r7, [r4, #0x3a] + ldr r0, [r4, #0x30] + cmp r1, r0 + bhs _0200DC74 + b _0200DC78 +_0200DC74: + mov r1, #0 +_0200DC78: + str r1, [r4, #0x2c] + blo _0200DCE0 + ldrh r0, [r4, #0x24] + and r0, r0, #0x10 + cmp r0, #0x10 + bne _0200DCA0 + mov r0, #0x51 + mov r1, #0 + bl sub_0200BC30 + b _0200DCE0 +_0200DCA0: + mov r0, #2 + mov r1, #0x42 + mov r2, #0 + bl sub_0200BD64 + cmp r0, #0 + bne _0200DCC8 + mov r0, #0x51 + mov r1, #4 + bl sub_0200BC30 + b _0200DCE0 +_0200DCC8: + mov r0, #4 + str r0, [r4, #0x20] + ldr r1, _0200DCF4 ; =0x0400010E + ldrh r0, [r1] + bic r0, r0, #0x80 + strh r0, [r1] +_0200DCE0: + ldmia sp!, {r4, r5, r6, r7, lr} + bx lr + .align 2, 0 +_0200DCE8: .word 0x0380B1FC +_0200DCEC: .word 0x0000FFFF +_0200DCF0: .word 0x027FFC00 +_0200DCF4: .word 0x0400010E + arm_func_end sub_0200DB58 + + arm_func_start sub_0200DCF8 +sub_0200DCF8: ; 0x0200DCF8 + stmdb sp!, {r4, lr} + ldr r2, _0200DE04 ; =0x040001C0 +_0200DD00: + ldrh r0, [r2] + tst r0, #0x80 + bne _0200DD00 + ldr r1, _0200DE08 ; =0x00008A01 + ldr r0, _0200DE0C ; =0x040001C2 + strh r1, [r2] + mov r1, #0xec + strh r1, [r0] + sub r1, r0, #2 +_0200DD24: + ldrh r0, [r1] + tst r0, #0x80 + bne _0200DD24 + bl sub_0200DE1C + ldr r2, _0200DE10 ; =0x00008201 + ldr r1, _0200DE04 ; =0x040001C0 + mov r4, r0, lsl #0x18 + strh r2, [r1] + bl sub_0200DE1C + ldr r2, _0200DE14 ; =0x0380B238 + ldr r1, _0200DE18 ; =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 _0200DDD4 + 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 _0200DDC4 + cmp r0, r4 + bge _0200DDC4 + mvn r0, #0xb + cmp r4, r0 + ldrgt r0, _0200DE14 ; =0x0380B238 + ldrgtsb r2, [r0] + subgt r2, r2, #1 + strgtb r2, [r0] +_0200DDC4: + ldr r0, _0200DE14 ; =0x0380B238 + mov r2, #0 + str r2, [r0, #0xc] + str r2, [r0, #0x10] +_0200DDD4: + ldr r0, _0200DE14 ; =0x0380B238 + ldrsb r0, [r0] + rsb r0, r0, r1, lsr #16 + cmp r0, #0xff + movgt r0, #0xff + bgt _0200DDF4 + cmp r0, #0 + movlt r0, #0 +_0200DDF4: + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0200DE04: .word 0x040001C0 +_0200DE08: .word 0x00008A01 +_0200DE0C: .word 0x040001C2 +_0200DE10: .word 0x00008201 +_0200DE14: .word 0x0380B238 +_0200DE18: .word 0x00007F80 + arm_func_end sub_0200DCF8 + + arm_func_start sub_0200DE1C +sub_0200DE1C: ; 0x0200DE1C + ldr r0, _0200DE48 ; =0x040001C2 + mov r1, #0 + strh r1, [r0] + sub r1, r0, #2 +_0200DE2C: + ldrh r0, [r1] + tst r0, #0x80 + bne _0200DE2C + ldr r0, _0200DE48 ; =0x040001C2 + ldrh r0, [r0] + and r0, r0, #0xff + bx lr + .align 2, 0 +_0200DE48: .word 0x040001C2 + arm_func_end sub_0200DE1C + + arm_func_start sub_0200DE4C +sub_0200DE4C: ; 0x0200DE4C + stmdb sp!, {r4, lr} + ldr r2, _0200DF64 ; =0x040001C0 +_0200DE54: + ldrh r0, [r2] + tst r0, #0x80 + bne _0200DE54 + ldr r1, _0200DF68 ; =0x00008A01 + ldr r0, _0200DF6C ; =0x040001C2 + strh r1, [r2] + mov r1, #0xe4 + strh r1, [r0] + sub r1, r0, #2 +_0200DE78: + ldrh r0, [r1] + tst r0, #0x80 + bne _0200DE78 + bl sub_0200DE1C + ldr r2, _0200DF70 ; =0x00008201 + ldr r1, _0200DF64 ; =0x040001C0 + mov r4, r0, lsl #0x18 + strh r2, [r1] + bl sub_0200DE1C + ldr r3, _0200DF74 ; =0x0380B238 + ldr r1, _0200DF78 ; =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 _0200DF30 + 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 _0200DF20 + cmp r1, r4 + bge _0200DF20 + mov r0, #0xc00 + rsb r0, r0, #0 + cmp r4, r0 + ldrgt r0, _0200DF74 ; =0x0380B238 + ldrgtsh r1, [r0, #2] + subgt r1, r1, #0x10 + strgth r1, [r0, #2] +_0200DF20: + ldr r0, _0200DF74 ; =0x0380B238 + mov r1, #0 + str r1, [r0, #8] + str r1, [r0, #4] +_0200DF30: + ldr r1, _0200DF74 ; =0x0380B238 + ldr r0, _0200DF7C ; =0x0000FFF0 + ldrsh r1, [r1, #2] + rsb r1, r1, r2, lsr #16 + cmp r1, r0 + movgt r1, r0 + bgt _0200DF54 + cmp r1, #0 + movlt r1, #0 +_0200DF54: + mov r0, r1, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0200DF64: .word 0x040001C0 +_0200DF68: .word 0x00008A01 +_0200DF6C: .word 0x040001C2 +_0200DF70: .word 0x00008201 +_0200DF74: .word 0x0380B238 +_0200DF78: .word 0x00007FF8 +_0200DF7C: .word 0x0000FFF0 + arm_func_end sub_0200DE4C + + arm_func_start sub_0200DF80 +sub_0200DF80: ; 0x0200DF80 + ldr r2, _0200DFA4 ; =0x038074F4 + mov r3, #0 +_0200DF88: + tst r0, #1 + strne r1, [r2, r3, lsl #2] + add r3, r3, #1 + cmp r3, #0x19 + mov r0, r0, lsr #1 + blt _0200DF88 + bx lr + .align 2, 0 +_0200DFA4: .word 0x038074F4 + arm_func_end sub_0200DF80 + + arm_func_start sub_0200DFA8 +sub_0200DFA8: ; 0x0200DFA8 + stmdb sp!, {r3, lr} + ldr r3, _0200DFFC ; =0x0380FFFC + ldr r0, _0200E000 ; =0x03805E64 + ldr r2, [r3] + cmp r2, r0 + beq _0200DFF4 + ldr r0, _0200E004 ; =0x0380B24C + 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 sub_02005EE8 + ldr r2, _0200E000 ; =0x03805E64 + ldr r1, _0200DFFC ; =0x0380FFFC + str r2, [r1] + bl sub_02005EFC +_0200DFF4: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0200DFFC: .word 0x0380FFFC +_0200E000: .word 0x03805E64 +_0200E004: .word 0x0380B24C + arm_func_end sub_0200DFA8 + + arm_func_start sub_0200E008 +sub_0200E008: ; 0x0200E008 + stmdb sp!, {r3, lr} + ldr r1, _0200E040 ; =0x0380FFFC + ldr r0, _0200E044 ; =0x03805E64 + ldr r1, [r1] + cmp r1, r0 + bne _0200E038 + bl sub_02005EE8 + ldr r1, _0200E048 ; =0x0380B24C + ldr r2, _0200E040 ; =0x0380FFFC + ldr r1, [r1, #0xc] + str r1, [r2] + bl sub_02005EFC +_0200E038: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0200E040: .word 0x0380FFFC +_0200E044: .word 0x03805E64 +_0200E048: .word 0x0380B24C + arm_func_end sub_0200E008 + + arm_func_start sub_0200E04C +sub_0200E04C: ; 0x0200E04C + mov ip, #0x4000000 + add r1, ip, #0x208 + ldrh r0, [r1] + tst r0, r0 + beq _0200E064 + b _0200E068 +_0200E064: + bx lr +_0200E068: + ldr r3, [ip, #0x210] + ldr r1, [ip, #0x214] + ands r2, r1, r3 + beq _0200E07C + b _0200E080 +_0200E07C: + bx lr +_0200E080: + ldr r0, _0200E268 ; =0x01DF3FFF + tst r2, r0 + beq _0200E090 + b _0200E094 +_0200E090: + str r2, [ip, #0x214] +_0200E094: + beq _0200E09C + b _0200E0A0 +_0200E09C: + bx lr +_0200E0A0: stmdb sp!, {lr} mrs r0, spsr stmdb sp!, {r0} @@ -14156,28 +17751,76 @@ _0200E1A4: _0200E1A8: ldr r1, [ip, #0x210] stmdb sp!, {r1} - add lr, pc, #0x0 ; =0x0200E1B8 + add lr, pc, #0x0 ; =sub_0200E1B8 bx r0 -_0200E1B8: - .byte 0x9F, 0x00, 0xA0, 0xE3, 0x00, 0xF0, 0x21, 0xE1 - .byte 0x01, 0xC3, 0xA0, 0xE3, 0x01, 0x00, 0xBD, 0xE8, 0x10, 0x12, 0x9C, 0xE5, 0x01, 0x20, 0x20, 0xE0 - .byte 0x01, 0x10, 0x02, 0xE0, 0x00, 0x00, 0x02, 0xE0, 0x08, 0x00, 0xBD, 0xE8, 0x01, 0x30, 0x83, 0xE1 - .byte 0x00, 0x30, 0xC3, 0xE1, 0x10, 0x32, 0x8C, 0xE5, 0x7C, 0x20, 0x9F, 0xE5, 0x7C, 0x30, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0xD2, 0xE1, 0x01, 0x10, 0x50, 0xE2, 0xB2, 0x10, 0xC2, 0xE1, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x0D, 0x00, 0xA0, 0xE1, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x04, 0xD0, 0x93, 0xE5, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x83, 0xE5 - .byte 0x92, 0x00, 0xA0, 0xE3, 0x00, 0xF0, 0x21, 0xE1, 0x00, 0x60, 0xDD, 0xE8, 0x00, 0x00, 0xA0, 0xE1 - .byte 0x08, 0xD0, 0x8D, 0xE2, 0x01, 0x00, 0xBD, 0xE8, 0x00, 0xF0, 0x69, 0xE1, 0x01, 0x00, 0x11, 0xE1 - .byte 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA, 0x2C, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x00, 0xEA, 0x00, 0xE0, 0x8F, 0xE2, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0xEA - .byte 0x10, 0xFF, 0x2F, 0xE1, 0x00, 0x80, 0xBD, 0xE8, 0xFF, 0x3F, 0xDF, 0x01 + arm_func_end sub_0200E04C + + arm_func_start sub_0200E1B8 +sub_0200E1B8: ; 0x0200E1B8 + 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, _0200E26C ; =0x038076A4 + ldr r3, _0200E270 ; =0x0380B24C + ldrh r0, [r2, #2] + subs r1, r0, #1 + strh r1, [r2, #2] + beq _0200E204 + b _0200E208 +_0200E204: + mov r0, sp +_0200E208: + beq _0200E210 + b _0200E214 +_0200E210: + ldr sp, [r3, #4] +_0200E214: + beq _0200E21C + b _0200E220 +_0200E21C: + str r0, [r3, #4] +_0200E220: + 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 _0200E248 + b _0200E24C +_0200E248: + ldr r0, _0200E27C ; =0x037FB4F4 +_0200E24C: + beq _0200E254 + b _0200E258 +_0200E254: + add lr, pc, #0x0 ; =0x0200E25C +_0200E258: + beq _0200E260 + b _0200E264 +_0200E260: + bx r0 +_0200E264: + ldmia sp!, {pc} + .align 2, 0 +_0200E268: .word 0x01DF3FFF _0200E26C: .word 0x038076A4 _0200E270: .word 0x0380B24C _0200E274: .word 0x03807210 _0200E278: .word 0x038074F4 - arm_func_end sub_0200E0A0 -_0200E27C: - .byte 0xF4, 0xB4, 0x7F, 0x03 + arm_func_end sub_0200E1B8 +_0200E27C: .word 0x037FB4F4 arm_func_start sub_0200E280 sub_0200E280: ; 0x0200E280 @@ -14615,9 +18258,15 @@ _0200E7E0: ldmia sp!, {r3, lr} bx lr arm_func_end sub_0200E7B4 -_0200E7E8: - .byte 0x04, 0xC0, 0x9F, 0xE5, 0x01, 0x00, 0xA0, 0xE1 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0x10, 0x66, 0x80, 0x03 + + arm_func_start sub_0200E7E8 +sub_0200E7E8: ; 0x0200E7E8 + ldr ip, _0200E7F4 ; =sub_03806610 + mov r0, r1 + bx ip + .align 2, 0 +_0200E7F4: .word sub_03806610 + arm_func_end sub_0200E7E8 arm_func_start sub_0200E7F8 sub_0200E7F8: ; 0x0200E7F8 @@ -14890,9 +18539,14 @@ _0200EB98: _0200EBA0: .word 0x04000204 _0200EBA4: .word 0x01FFFFC0 arm_func_end sub_0200EB2C -_0200EBA8: - .byte 0xF0, 0x58, 0x2D, 0xE9, 0x01, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x40, 0x84, 0xE3, 0x03, 0x00, 0x00, 0xEA + + arm_func_start sub_0200EBA8 +sub_0200EBA8: ; 0x0200EBA8 + stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} + mov r4, r1 + orr r4, r4, #1 + b _0200EBC8 + arm_func_end sub_0200EBA8 arm_func_start sub_0200EBB8 sub_0200EBB8: ; 0x0200EBB8 @@ -14900,6 +18554,7 @@ sub_0200EBB8: ; 0x0200EBB8 eor r4, r1, r3 mov r4, r4, asr #1 mov r4, r4, lsl #1 +_0200EBC8: orrs r5, r3, r2 bne _0200EBD8 ldmia sp!, {r4, r5, r6, r7, fp, ip, lr} @@ -15002,7 +18657,8 @@ _0200ECF8: mov r1, r1, lsr r5 b _0200ED30 _0200ED28: - .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 + mov r0, r1, lsr r7 + mov r1, #0 _0200ED30: cmp r4, #0 blt _0200ED40 @@ -15029,7 +18685,8 @@ sub_0200ED68: ; 0x0200ED68 mov r4, #0 b _0200ED7C _0200ED74: - .byte 0xF0, 0x58, 0x2D, 0xE9, 0x01, 0x40, 0xA0, 0xE3 + stmdb sp!, {r4, r5, r6, r7, fp, ip, lr} + mov r4, #1 _0200ED7C: orrs r5, r3, r2 bne _0200ED8C @@ -15360,14 +19017,45 @@ _0200F1A0: .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, 0x01, 0xC3, 0xA0, 0xE3, 0x08, 0xC2, 0x8C, 0xE5 - .byte 0x58, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x81, 0xE5, 0x50, 0x10, 0x9F, 0xE5 - .byte 0x01, 0x0C, 0xA0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1, 0xB0, 0x00, 0xD1, 0xE1, 0x0F, 0x00, 0x00, 0xE2 - .byte 0x01, 0x00, 0x50, 0xE3, 0xFB, 0xFF, 0xFF, 0x1A, 0x34, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xB0, 0x00, 0xC1, 0xE1, 0xB0, 0x00, 0xD1, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x20, 0x30, 0x9F, 0xE5, 0x34, 0xC0, 0x93, 0xE5, 0x0C, 0xE0, 0xA0, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0xFC, 0xFF, 0x80, 0x03, 0x80, 0x01, 0x00, 0x04, 0x00, 0xFE, 0x7F, 0x02, 0xF8, 0x40, 0x2D, 0xE9 + .byte 0x00, 0x00, 0x80, 0x00, 0x17, 0x00, 0x00, 0x00 + + arm_func_start sub_0200F4A8 +sub_0200F4A8: ; 0x0200F4A8 + mov ip, #0x4000000 + str ip, [ip, #0x208] + ldr r1, _0200F510 ; =0x0380FFFC + mov r0, #0 + str r0, [r1] + ldr r1, _0200F514 ; =0x04000180 + mov r0, #0x100 + strh r0, [r1] +_0200F4C8: + ldrh r0, [r1] + and r0, r0, #0xf + cmp r0, #1 + bne _0200F4C8 + ldr r1, _0200F514 ; =0x04000180 + mov r0, #0 + strh r0, [r1] +_0200F4E4: + ldrh r0, [r1] + cmp r0, #1 + beq _0200F4E4 + ldr r3, _0200F518 ; =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 +_0200F510: .word 0x0380FFFC +_0200F514: .word 0x04000180 +_0200F518: .word 0x027FFE00 + arm_func_end sub_0200F4A8 +_0200F51C: + .byte 0xF8, 0x40, 0x2D, 0xE9 .byte 0x00, 0x70, 0xA0, 0xE1, 0x01, 0x6C, 0xA0, 0xE3, 0x0A, 0x50, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 .byte 0x01, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1, 0xAD, 0xD1, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1 .byte 0x07, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xA0, 0xE1, 0x2A, 0xDC, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 @@ -15377,24 +19065,92 @@ _0200F1A0: .byte 0x05, 0x00, 0xA0, 0xE1, 0x9A, 0xD1, 0xFF, 0xEB, 0xB0, 0x10, 0xD4, 0xE1, 0x01, 0x00, 0x11, 0xE3 .byte 0xFA, 0xFF, 0xFF, 0x1A, 0x1C, 0x00, 0x9F, 0xE5, 0x01, 0x10, 0x81, 0xE3, 0xB0, 0x10, 0xC4, 0xE1 .byte 0x4C, 0x05, 0x90, 0xE5, 0x08, 0x00, 0x90, 0xE5, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xA0, 0x8D, 0x7F, 0x02, 0x96, 0xFF, 0x7F, 0x02, 0x78, 0x88, 0x7F, 0x02, 0x70, 0x40, 0x2D, 0xE9 - .byte 0xFC, 0x10, 0x9F, 0xE5, 0x01, 0x00, 0x00, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x28, 0xB0, 0xE1 - .byte 0x00, 0x00, 0xA0, 0x03, 0x38, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x10, 0x01, 0x12, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x81, 0xE2 - .byte 0x10, 0x00, 0x51, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x0F, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x12, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x00, 0x40, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0xFA, 0xFF, 0xFF, 0x1A, 0x01, 0x60, 0x40, 0xE0, 0x05, 0x00, 0x56, 0xE3 - .byte 0x01, 0x00, 0xA0, 0xB3, 0x10, 0x01, 0xA0, 0xB1, 0x00, 0x08, 0xA0, 0xB1, 0x20, 0x08, 0xA0, 0xB1 - .byte 0x21, 0x00, 0x00, 0xBA, 0x01, 0x30, 0x80, 0xE0, 0xA3, 0x3F, 0x83, 0xE0, 0xC3, 0x40, 0xA0, 0xE1 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x01, 0xE0, 0xA0, 0xE3, 0x08, 0x00, 0x00, 0xEA, 0xA5, 0xCF, 0xA0, 0xE1 - .byte 0x85, 0x3F, 0x6C, 0xE0, 0xE3, 0x3F, 0x8C, 0xE0, 0x83, 0x30, 0xA0, 0xE1, 0x01, 0x30, 0x43, 0xE2 - .byte 0x95, 0x43, 0x24, 0xE0, 0x1E, 0x04, 0x12, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x01, 0x50, 0x85, 0xE2 - .byte 0x06, 0x00, 0x55, 0xE1, 0xF4, 0xFF, 0xFF, 0xBA, 0x04, 0x20, 0x40, 0xE0, 0x05, 0x00, 0x52, 0xE3 - .byte 0x01, 0x20, 0x44, 0xA0, 0x05, 0x00, 0x52, 0xA3, 0x05, 0x00, 0x00, 0xAA, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x12, 0x00, 0xA0, 0xE1, 0x12, 0x01, 0x80, 0xE1, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x05, 0x00, 0x00, 0xEA, 0x01, 0x30, 0xA0, 0xE3, 0x13, 0x24, 0xA0, 0xE1, 0x13, 0x00, 0x82, 0xE1 - .byte 0x13, 0x01, 0x80, 0xE1, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x70, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xFF, 0x1F, 0x00, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00 + .byte 0xA0, 0x8D, 0x7F, 0x02, 0x96, 0xFF, 0x7F, 0x02, 0x78, 0x88, 0x7F, 0x02 + + arm_func_start sub_0200F5BC +sub_0200F5BC: ; 0x0200F5BC + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _0200F6C4 ; =0x00001FFF + and r0, r0, r1 + mov r0, r0, lsl #0x10 + movs r2, r0, lsr #0x10 + moveq r0, #0 + beq _0200F6BC + mov r1, #0 + mov r0, #1 + b _0200F5F0 +_0200F5E4: + tst r2, r0, lsl r1 + bne _0200F5F8 + add r1, r1, #1 +_0200F5F0: + cmp r1, #0x10 + blt _0200F5E4 +_0200F5F8: + mov r0, #0xf + mov r3, #1 + b _0200F610 +_0200F604: + tst r2, r3, lsl r0 + bne _0200F618 + sub r0, r0, #1 +_0200F610: + cmp r0, #0 + bne _0200F604 +_0200F618: + 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 _0200F6BC + add r3, r0, r1 + add r3, r3, r3, lsr #31 + mov r4, r3, asr #1 + mov r5, #0 + mov lr, #1 + b _0200F670 +_0200F64C: + 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 _0200F678 + add r5, r5, #1 +_0200F670: + cmp r5, r6 + blt _0200F64C +_0200F678: + sub r2, r0, r4 + cmp r2, #5 + subge r2, r4, r1 + cmpge r2, #5 + bge _0200F6A4 + 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 _0200F6BC +_0200F6A4: + 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 +_0200F6BC: + ldmia sp!, {r4, r5, r6, lr} + bx lr + .align 2, 0 +_0200F6C4: .word 0x00001FFF + arm_func_end sub_0200F5BC +_0200F6C8: + .byte 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00 .byte 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xB7, 0x7F, 0x03 .byte 0x38, 0xB6, 0x7F, 0x03, 0x38, 0xB6, 0x7F, 0x03, 0x08, 0xB7, 0x7F, 0x03, 0x18, 0xB7, 0x7F, 0x03 .byte 0x28, 0xB7, 0x7F, 0x03, 0x38, 0xB7, 0x7F, 0x03, 0x38, 0xB6, 0x7F, 0x03, 0xC8, 0xB6, 0x7F, 0x03 @@ -17232,9 +20988,16 @@ _020112B4: _020112BC: .word 0x027F8878 _020112C0: .word 0x027F7900 arm_func_end sub_02011244 -_020112C4: - .byte 0x08, 0xC0, 0x9F, 0xE5, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0xE8, 0x1A, 0x7E, 0x02 + + arm_func_start sub_020112C4 +sub_020112C4: ; 0x020112C4 + ldr ip, _020112D4 ; =sub_027E1AE8 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx ip + .align 2, 0 +_020112D4: .word sub_027E1AE8 + arm_func_end sub_020112C4 arm_func_start sub_020112D8 sub_020112D8: ; 0x020112D8 @@ -17318,8 +21081,14 @@ _020113E4: .word 0x027F7878 _020113E8: .word 0x00000185 _020113EC: .word 0x027F78A0 arm_func_end sub_02011358 -_020113F0: - .byte 0x00, 0xC0, 0x9F, 0xE5, 0x1C, 0xFF, 0x2F, 0xE1, 0x0C, 0x1C, 0x7E, 0x02 + + arm_func_start sub_020113F0 +sub_020113F0: ; 0x020113F0 + ldr ip, _020113F8 ; =sub_027E1C0C + bx ip + .align 2, 0 +_020113F8: .word sub_027E1C0C + arm_func_end sub_020113F0 arm_func_start sub_020113FC sub_020113FC: ; 0x020113FC @@ -17414,7 +21183,7 @@ _020114F8: mov lr, pc bx r1 _0201152C: - .byte 0x04, 0x40, 0x89, 0xE5 + str r4, [sb, #4] _02011530: ldr r0, [sp] orr r1, sl, #0x8000 @@ -17428,8 +21197,11 @@ _02011548: .word 0x027F8878 _0201154C: .word 0x027F7878 _02011550: .word 0x027F7184 arm_func_end sub_020114B0 -_02011554: - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02011554 +sub_02011554: ; 0x02011554 + bx lr + arm_func_end sub_02011554 arm_func_start sub_02011558 sub_02011558: ; 0x02011558 @@ -22557,13 +26329,41 @@ _02015AF8: .align 2, 0 _02015B00: .word 0x027F8878 arm_func_end sub_02015AD0 -_02015B04: - .byte 0x08, 0x40, 0x2D, 0xE9, 0x18, 0x00, 0x9F, 0xE5, 0x50, 0x05, 0x90, 0xE5 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0x0A, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x1A, 0x3D, 0x00, 0x00, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x88, 0x7F, 0x02, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x24, 0x10, 0x9F, 0xE5, 0x50, 0x15, 0x91, 0xE5, 0xB0, 0x10, 0xD1, 0xE1, 0x09, 0x00, 0x51, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x90, 0xE5, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xD8, 0x03, 0x00, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x88, 0x7F, 0x02 + + arm_func_start sub_02015B04 +sub_02015B04: ; 0x02015B04 + stmdb sp!, {r3, lr} + ldr r0, _02015B28 ; =0x027F8878 + ldr r0, [r0, #0x550] + ldrh r0, [r0] + cmp r0, #0xa + bne _02015B20 + bl sub_02015C18 +_02015B20: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_02015B28: .word 0x027F8878 + arm_func_end sub_02015B04 + + arm_func_start sub_02015B2C +sub_02015B2C: ; 0x02015B2C + stmdb sp!, {r3, lr} + ldr r1, _02015B5C ; =0x027F8878 + ldr r1, [r1, #0x550] + ldrh r1, [r1] + cmp r1, #9 + bne _02015B54 + ldr r0, [r0, #4] + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_02016AB8 +_02015B54: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_02015B5C: .word 0x027F8878 + arm_func_end sub_02015B2C arm_func_start sub_02015B60 sub_02015B60: ; 0x02015B60 @@ -25101,35 +28901,134 @@ _02017F98: .align 2, 0 _02017FA4: .word 0x00000242 arm_func_end sub_02017F30 -_02017FA8: - .byte 0x08, 0xC0, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1, 0xFC, 0x44, 0x7E, 0x02, 0xF8, 0x40, 0x2D, 0xE9 - .byte 0x23, 0xDE, 0x4D, 0xE2, 0x6C, 0x11, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x50, 0x65, 0x91, 0xE5 - .byte 0x30, 0x50, 0x8D, 0xE2, 0xE5, 0x7A, 0x40, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x28, 0x10, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC4, 0xE1, 0xB0, 0x10, 0xD6, 0xE1, 0x0B, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x03, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC4, 0xE1, 0xC9, 0x7A, 0x40, 0xEB, 0x4A, 0x00, 0x00, 0xEA - .byte 0x04, 0x00, 0x97, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x00, 0x00, 0xA0, 0x13, 0x00, 0x18, 0xA0, 0xE1, 0x05, 0x00, 0xA0, 0xE1, 0x21, 0x18, 0xA0, 0xE1 - .byte 0x01, 0x30, 0xA0, 0xE3, 0x60, 0xE5, 0xFF, 0xEB, 0xB4, 0x10, 0xD0, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x07, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC4, 0xE1, 0xB4, 0x10, 0xC4, 0xE1 - .byte 0xB4, 0x10, 0xD0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0xB6, 0x10, 0xC4, 0xE1, 0xB4, 0x7A, 0x40, 0xEB - .byte 0x35, 0x00, 0x00, 0xEA, 0xDC, 0x00, 0x9F, 0xE5, 0x06, 0x20, 0xA0, 0xE3, 0x50, 0x55, 0x90, 0xE5 - .byte 0x8A, 0x00, 0x85, 0xE2, 0x01, 0x0C, 0x80, 0xE2, 0xA2, 0x10, 0x85, 0xE2, 0x2A, 0x56, 0x40, 0xEB - .byte 0x30, 0x10, 0x8D, 0xE2, 0xA8, 0x10, 0x85, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0x0A, 0xC5, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x18, 0x20, 0x85, 0xE5, 0x00, 0x10, 0x8D, 0xE2, 0x30, 0x20, 0xA0, 0xE3 - .byte 0xB3, 0x55, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xCD, 0xE1, 0xB6, 0x00, 0xCD, 0xE1 - .byte 0x01, 0x0C, 0x85, 0xE2, 0xBC, 0x0E, 0xD0, 0xE1, 0x18, 0x10, 0x8D, 0xE2, 0x02, 0x00, 0x50, 0xE3 - .byte 0x14, 0x30, 0xA0, 0x03, 0x8A, 0x00, 0x85, 0xE2, 0x0A, 0x30, 0xA0, 0x13, 0x01, 0x0C, 0x80, 0xE2 - .byte 0x06, 0x20, 0xA0, 0xE3, 0x0E, 0x30, 0xCD, 0xE5, 0x13, 0x56, 0x40, 0xEB, 0x1E, 0x10, 0x8D, 0xE2 - .byte 0xE0, 0x00, 0x85, 0xE2, 0x06, 0x20, 0xA0, 0xE3, 0x0F, 0x56, 0x40, 0xEB, 0x30, 0x00, 0x8D, 0xE2 - .byte 0x2C, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0x8D, 0xE2, 0x40, 0xE6, 0xFF, 0xEB, 0xB4, 0x10, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC4, 0xE1 - .byte 0x01, 0x1C, 0xA0, 0xE3, 0xB4, 0x10, 0xC4, 0xE1, 0xB4, 0x10, 0xD0, 0xE1, 0x04, 0x00, 0xA0, 0xE1 - .byte 0xB6, 0x10, 0xC4, 0xE1, 0x82, 0x7A, 0x40, 0xEB, 0x03, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x04, 0x00, 0xA0, 0xE1, 0xB2, 0x10, 0xC4, 0xE1, 0x7D, 0x7A, 0x40, 0xEB, 0x23, 0xDE, 0x8D, 0xE2 - .byte 0xF8, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x78, 0x88, 0x7F, 0x02, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x8A, 0x7A, 0x40, 0xEB, 0x29, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x04, 0x10, 0xA0, 0xE3 - .byte 0xB2, 0x10, 0xC0, 0xE1, 0x72, 0x7A, 0x40, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_02017FA8 +sub_02017FA8: ; 0x02017FA8 + ldr ip, _02017FB8 ; =sub_027E44FC + mov r1, #1 + mov r2, #0 + bx ip + .align 2, 0 +_02017FB8: .word sub_027E44FC + arm_func_end sub_02017FA8 + + arm_func_start sub_02017FBC +sub_02017FBC: ; 0x02017FBC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #0x230 + ldr r1, _02018138 ; =0x027F8878 + mov r7, r0 + ldr r6, [r1, #0x550] + add r5, sp, #0x30 + bl sub_03036B70 + mov r4, r0 + mov r1, #0x28 + strh r1, [r4] + ldrh r1, [r6] + cmp r1, #0xb + beq _02018000 + mov r1, #3 + strh r1, [r4, #2] + bl sub_03036B24 + b _0201812C +_02018000: + ldr r0, [r7, #4] + mov r2, #0 + cmp r0, #1 + moveq r0, #1 + movne r0, #0 + mov r1, r0, lsl #0x10 + mov r0, r5 + mov r1, r1, lsr #0x10 + mov r3, #1 + bl sub_020115AC + ldrh r1, [r0, #4] + cmp r1, #0 + beq _02018054 + mov r1, #1 + strh r1, [r4, #2] + strh r1, [r4, #4] + ldrh r1, [r0, #4] + mov r0, r4 + strh r1, [r4, #6] + bl sub_03036B24 + b _0201812C +_02018054: + ldr r0, _02018138 ; =0x027F8878 + mov r2, #6 + ldr r5, [r0, #0x550] + add r0, r5, #0x8a + add r0, r0, #0x100 + add r1, r5, #0xa2 + bl sub_0302D91C + add r1, sp, #0x30 + str r1, [r5, #0xa8] + mov r0, #0 + strh r0, [r5, #0xac] + mov r2, #1 + str r2, [r5, #0x18] + add r1, sp, #0 + mov r2, #0x30 + bl sub_0302D764 + mov r0, #0 + strh r0, [sp] + strh r0, [sp, #6] + add r0, r5, #0x100 + ldrh r0, [r0, #0xec] + add r1, sp, #0x18 + cmp r0, #2 + moveq r3, #0x14 + add r0, r5, #0x8a + movne r3, #0xa + add r0, r0, #0x100 + mov r2, #6 + strb r3, [sp, #0xe] + bl sub_0302D91C + add r1, sp, #0x1e + add r0, r5, #0xe0 + mov r2, #6 + bl sub_0302D91C + add r0, sp, #0x30 + str r0, [sp, #0x2c] + add r1, sp, #0 + bl sub_020119F0 + ldrh r1, [r0, #4] + cmp r1, #0 + beq _0201811C + mov r1, #1 + strh r1, [r4, #2] + mov r1, #0x100 + strh r1, [r4, #4] + ldrh r1, [r0, #4] + mov r0, r4 + strh r1, [r4, #6] + bl sub_03036B24 + b _0201812C +_0201811C: + mov r1, #0 + mov r0, r4 + strh r1, [r4, #2] + bl sub_03036B24 +_0201812C: + add sp, sp, #0x230 + ldmia sp!, {r3, r4, r5, r6, r7, lr} + bx lr + .align 2, 0 +_02018138: .word 0x027F8878 + arm_func_end sub_02017FBC + + arm_func_start sub_0201813C +sub_0201813C: ; 0x0201813C + stmdb sp!, {r3, lr} + bl sub_03036B70 + mov r1, #0x29 + strh r1, [r0] + mov r1, #4 + strh r1, [r0, #2] + bl sub_03036B24 + ldmia sp!, {r3, lr} + bx lr + arm_func_end sub_0201813C arm_func_start sub_02018160 sub_02018160: ; 0x02018160 @@ -26228,11 +30127,26 @@ _02018F40: _02018F64: .word 0x0380FFF4 _02018F68: .word 0x0480808E arm_func_end sub_02018F28 -_02018F6C: - .byte 0x01, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0x3A, 0xFF, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x10, 0x10, 0x9F, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x03, 0x1C, 0x81, 0xE2 - .byte 0xB4, 0x0B, 0xC1, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 + + arm_func_start sub_02018F6C +sub_02018F6C: ; 0x02018F6C + cmp r0, #1 + blo _02018F7C + cmp r0, #0xff + bls _02018F84 +_02018F7C: + mov r0, #5 + bx lr +_02018F84: + ldr r1, _02018F9C ; =0x0380FFF4 + ldr r1, [r1] + add r1, r1, #0x300 + strh r0, [r1, #0xb4] + mov r0, #0 + bx lr + .align 2, 0 +_02018F9C: .word 0x0380FFF4 + arm_func_end sub_02018F6C arm_func_start sub_02018FA0 sub_02018FA0: ; 0x02018FA0 @@ -26379,18 +30293,52 @@ _02019194: mov lr, pc bx sb _020191BC: - .byte 0x04, 0x00, 0x9D, 0xE5 - .byte 0x12, 0x03, 0x00, 0xEB, 0x04, 0x20, 0x8D, 0xE2, 0xF5, 0x00, 0x85, 0xE2, 0x03, 0x10, 0xA0, 0xE3 - .byte 0x0F, 0xE0, 0xA0, 0xE1, 0x19, 0xFF, 0x2F, 0xE1, 0x04, 0x00, 0x9D, 0xE5, 0x0B, 0x03, 0x00, 0xEB - .byte 0x00, 0x10, 0xA0, 0xE3, 0x80, 0x01, 0x9F, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x04, 0x06, 0x90, 0xE5, 0x01, 0x08, 0x10, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x02, 0x09, 0x10, 0xE3 - .byte 0x51, 0x00, 0x00, 0x1A, 0x04, 0x20, 0x8D, 0xE2, 0x55, 0x0F, 0x84, 0xE2, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x0F, 0xE0, 0xA0, 0xE1, 0x19, 0xFF, 0x2F, 0xE1, 0x4C, 0x11, 0x9F, 0xE5, 0x04, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x10, 0x91, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0x04, 0x16, 0x91, 0xE5, 0xA0, 0x08, 0x81, 0xE1 - .byte 0x04, 0x00, 0x8D, 0xE5, 0xF5, 0x02, 0x00, 0xEB, 0x43, 0x00, 0x00, 0xEA, 0x46, 0x00, 0x84, 0xE2 - .byte 0x04, 0x20, 0x8D, 0xE2, 0x01, 0x0C, 0x80, 0xE2, 0x01, 0x10, 0xA0, 0xE3, 0x0F, 0xE0, 0xA0, 0xE1 - .byte 0x19, 0xFF, 0x2F, 0xE1, 0x04, 0x10, 0x9D, 0xE5, 0x1E, 0x00, 0xA0, 0xE3, 0xDF, 0x02, 0x00, 0xEB - .byte 0x39, 0x00, 0x00, 0xEA + ldr r0, [sp, #4] + bl sub_02019E10 + add r2, sp, #4 + add r0, r5, #0xf5 + mov r1, #3 + mov lr, pc + bx sb +_020191D8: + ldr r0, [sp, #4] + bl sub_02019E10 + mov r1, #0 + ldr r0, _0201936C ; =0x0380FFF4 + str r1, [sp, #4] + ldr r0, [r0] + ldr r0, [r0, #0x604] + tst r0, #0x10000 + beq _0201923C + tst r0, #0x8000 + bne _0201934C + add r2, sp, #4 + add r0, r4, #0x154 + mov r1, #1 + mov lr, pc + bx sb +sub_02019218: ; 0x02019218 + ldr r1, _0201936C ; =0x0380FFF4 + ldr r0, [sp, #4] + ldr r1, [r1] + mov r0, r0, lsl #0x1b + ldr r1, [r1, #0x604] + orr r0, r1, r0, lsr #17 + str r0, [sp, #4] + bl sub_02019E10 + b _0201934C +_0201923C: + add r0, r4, #0x46 + add r2, sp, #4 + add r0, r0, #0x100 + mov r1, #1 + mov lr, pc + bx sb +_02019254: + ldr r1, [sp, #4] + mov r0, #0x1e + bl sub_02019DE0 + b _0201934C _02019264: ldrh r0, [r0, #0xfc] mov r8, #0 @@ -26407,9 +30355,17 @@ _0201927C: mov lr, pc bx sb _02019298: - .byte 0x0A, 0x00, 0x87, 0xE0, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x04, 0x20, 0x8D, 0xE2, 0x0F, 0xE0, 0xA0, 0xE1, 0x19, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x9D, 0xE5, 0xC9, 0x02, 0x00, 0xEB, 0x0F, 0x70, 0x87, 0xE2, 0x01, 0x80, 0x88, 0xE2 + add r0, r7, sl + mov r1, #1 + add r2, sp, #4 + mov lr, pc + bx sb +_020192AC: + ldr r0, [sp] + ldr r1, [sp, #4] + bl sub_02019DE0 + add r7, r7, #0xf + add r8, r8, #1 _020192C0: ldr r0, [r5] add r0, r0, #0x600 @@ -26429,10 +30385,21 @@ _020192E8: mov lr, pc bx sb _02019300: - .byte 0x04, 0x10, 0x9D, 0xE5, 0x0A, 0x00, 0x87, 0xE0, 0x01, 0x14, 0xA0, 0xE1, 0x04, 0x10, 0x8D, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x04, 0x20, 0x8D, 0xE2, 0x0F, 0xE0, 0xA0, 0xE1, 0x19, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x05, 0x08, 0x80, 0xE3, 0x04, 0x00, 0x8D, 0xE5, 0xB7, 0x02, 0x00, 0xEB - .byte 0x0F, 0x70, 0x87, 0xE2, 0x01, 0x80, 0x88, 0xE2 + ldr r1, [sp, #4] + add r0, r7, sl + mov r1, r1, lsl #8 + str r1, [sp, #4] + mov r1, #1 + add r2, sp, #4 + mov lr, pc + bx sb +_02019320: + ldr r0, [sp, #4] + orr r0, r0, #0x50000 + str r0, [sp, #4] + bl sub_02019E10 + add r7, r7, #0xf + add r8, r8, #1 _02019338: ldr r0, [r4] add r0, r0, #0x500 @@ -26863,10 +30830,20 @@ _02019878: _02019880: .word 0x0380FFF4 _02019884: .word 0x0480802A arm_func_end sub_0201982C -_02019888: - .byte 0x14, 0x00, 0x9F, 0xE5, 0x14, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBE, 0x0A, 0xD0, 0xE1, 0xB0, 0x00, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x28, 0x80, 0x80, 0x04 + + arm_func_start sub_02019888 +sub_02019888: ; 0x02019888 + ldr r0, _020198A4 ; =0x0380FFF4 + ldr r1, _020198A8 ; =0x04808028 + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r0, [r0, #0xae] + strh r0, [r1] + bx lr + .align 2, 0 +_020198A4: .word 0x0380FFF4 +_020198A8: .word 0x04808028 + arm_func_end sub_02019888 arm_func_start sub_020198AC sub_020198AC: ; 0x020198AC @@ -27554,29 +31531,116 @@ _0201A180: .align 2, 0 _0201A188: .word 0x0380FFF4 arm_func_end sub_0201A138 -_0201A18C: - .byte 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x1E, 0xFF, 0x2F, 0xE1, 0x04, 0xC0, 0x9F, 0xE5, 0x04, 0x10, 0x9F, 0xE5 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0x2C, 0xB3, 0x7F, 0x03, 0x9C, 0xA9, 0x7E, 0x02, 0x78, 0x40, 0x2D, 0xE9 - .byte 0x0C, 0xD0, 0x4D, 0xE2, 0x78, 0x20, 0x9F, 0xE5, 0x00, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x92, 0xE5 - .byte 0x01, 0x40, 0xA0, 0xE1, 0x82, 0x0F, 0x80, 0xE2, 0x01, 0x0B, 0x80, 0xE2, 0xF7, 0x4A, 0x40, 0xEB - .byte 0x60, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x95, 0x30, 0x82, 0xE0, 0x95, 0x21, 0x22, 0xE0 - .byte 0x01, 0x50, 0xA0, 0xE1, 0x95, 0x20, 0x22, 0xE0, 0x23, 0x63, 0xA0, 0xE1, 0x02, 0x6D, 0x86, 0xE1 - .byte 0x05, 0x4A, 0x40, 0xEB, 0x00, 0x00, 0x96, 0xE0, 0x00, 0x20, 0xA1, 0xE2, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x04, 0x40, 0x8D, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x50, 0x8D, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x06, 0x30, 0xA0, 0xE1, 0x82, 0x0F, 0x80, 0xE2 - .byte 0x01, 0x0B, 0x80, 0xE2, 0xC4, 0x4A, 0x40, 0xEB, 0x0C, 0xD0, 0x8D, 0xE2, 0x78, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0xEA, 0x82, 0x00, 0x00, 0x10, 0x00, 0x9F, 0xE5 - .byte 0x10, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x82, 0x0F, 0x80, 0xE2, 0x01, 0x0B, 0x80, 0xE2 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0xC0, 0xD5, 0x7F, 0x03, 0x10, 0x40, 0x2D, 0xE9 - .byte 0x70, 0x10, 0x9F, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x40, 0x91, 0xE5, 0x0A, 0x10, 0xA0, 0xE3 - .byte 0xEC, 0x23, 0x94, 0xE5, 0x01, 0x20, 0x82, 0xE2, 0xEC, 0x23, 0x84, 0xE5, 0xC1, 0x36, 0x40, 0xEB - .byte 0x02, 0x00, 0xA0, 0xE3, 0x12, 0x10, 0xA0, 0xE3, 0xBE, 0x36, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x11, 0x10, 0xA0, 0xE3, 0xBB, 0x36, 0x40, 0xEB, 0x01, 0x0C, 0x84, 0xE2, 0xBC, 0x0F, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xA0, 0xE3, 0x13, 0x10, 0xA0, 0xE3 - .byte 0xB4, 0x36, 0x40, 0xEB, 0x03, 0x0C, 0x84, 0xE2, 0xB4, 0x0F, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xA0, 0xE3, 0x15, 0x10, 0xA0, 0xE3, 0xAD, 0x36, 0x40, 0xEB - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 + + arm_func_start sub_0201A18C +sub_0201A18C: ; 0x0201A18C + mov r1, #0 + str r1, [r0] + bx lr + arm_func_end sub_0201A18C + + arm_func_start sub_0201A198 +sub_0201A198: ; 0x0201A198 + ldr ip, _0201A1A4 ; =sub_037FB32C + ldr r1, _0201A1A8 ; =0x027EA99C + bx ip + .align 2, 0 +_0201A1A4: .word sub_037FB32C +_0201A1A8: .word 0x027EA99C + arm_func_end sub_0201A198 + + arm_func_start sub_0201A1AC +sub_0201A1AC: ; 0x0201A1AC + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0xc + ldr r2, _0201A234 ; =0x0380FFF4 + mov r5, r0 + ldr r0, [r2] + mov r4, r1 + add r0, r0, #0x208 + add r0, r0, #0x400 + bl sub_0302CDB0 + ldr r0, _0201A238 ; =0x000082EA + mov r1, #0 + umull r3, r2, r5, r0 + mla r2, r5, r1, r2 + mov r5, r1 + mla r2, r5, r0, r2 + mov r6, r3, lsr #6 + orr r6, r6, r2, lsl #26 + bl sub_0302CA0C + adds r0, r6, r0 + adc r2, r1, #0 + mov r1, r0 + str r4, [sp, #4] + mov r0, r5 + str r0, [sp, #8] + ldr r0, _0201A234 ; =0x0380FFF4 + str r5, [sp] + ldr r0, [r0] + mov r3, r6 + add r0, r0, #0x208 + add r0, r0, #0x400 + bl sub_0302CD3C + add sp, sp, #0xc + ldmia sp!, {r3, r4, r5, r6, lr} + bx lr + .align 2, 0 +_0201A234: .word 0x0380FFF4 +_0201A238: .word 0x000082EA + arm_func_end sub_0201A1AC + + arm_func_start sub_0201A23C +sub_0201A23C: ; 0x0201A23C + ldr r0, _0201A254 ; =0x0380FFF4 + ldr ip, _0201A258 ; =sub_037FD5C0 + ldr r0, [r0] + add r0, r0, #0x208 + add r0, r0, #0x400 + bx ip + .align 2, 0 +_0201A254: .word 0x0380FFF4 +_0201A258: .word sub_037FD5C0 + arm_func_end sub_0201A23C + + arm_func_start sub_0201A25C +sub_0201A25C: ; 0x0201A25C + stmdb sp!, {r4, lr} + ldr r1, _0201A2D8 ; =0x0380FFF4 + mov r0, #1 + ldr r4, [r1] + mov r1, #0xa + ldr r2, [r4, #0x3ec] + add r2, r2, #1 + str r2, [r4, #0x3ec] + bl sub_03027D88 + mov r0, #2 + mov r1, #0x12 + bl sub_03027D88 + mov r0, #1 + mov r1, #0x11 + bl sub_03027D88 + add r0, r4, #0x100 + ldrh r0, [r0, #0xfc] + cmp r0, #0 + beq _0201A2B4 + mov r0, #2 + mov r1, #0x13 + bl sub_03027D88 +_0201A2B4: + add r0, r4, #0x300 + ldrh r0, [r0, #0xf4] + cmp r0, #0 + beq _0201A2D0 + mov r0, #2 + mov r1, #0x15 + bl sub_03027D88 +_0201A2D0: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201A2D8: .word 0x0380FFF4 + arm_func_end sub_0201A25C arm_func_start sub_0201A2DC sub_0201A2DC: ; 0x0201A2DC @@ -27902,32 +31966,128 @@ _0201A6CC: .word 0x0000B6B8 _0201A6D0: .word 0x00001D46 _0201A6D4: .word 0x0380FFF4 arm_func_end sub_0201A658 -_0201A6D8: - .byte 0x30, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC0, 0xE1, 0x10, 0x20, 0xA0, 0xE3, 0x21, 0x1E, 0x80, 0xE2, 0x04, 0x00, 0x00, 0xEA - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x50, 0x13, 0x1E, 0xFF, 0x2F, 0x01 - .byte 0x01, 0x20, 0x42, 0xE2, 0x00, 0x00, 0x52, 0xE3, 0xF8, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0x80, 0x80, 0x04, 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x40, 0xA0, 0xE1, 0xB0, 0x00, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0xEA, 0xFF, 0xFF, 0xEB, 0x0C, 0x10, 0x94, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x10, 0x10, 0x41, 0xE2, 0x71, 0x14, 0x00, 0xEB, 0x18, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x1F, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2 - .byte 0xBC, 0x1F, 0xC0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x38, 0x40, 0x2D, 0xE9, 0xE8, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x03, 0x0C, 0x82, 0xE2 - .byte 0xB0, 0x15, 0xD0, 0xE1, 0x2C, 0x00, 0x82, 0xE2, 0x01, 0x00, 0x51, 0xE3, 0xD1, 0x4F, 0x82, 0xE2 - .byte 0x01, 0x5B, 0x80, 0xE2, 0x03, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x51, 0xE3, 0x0E, 0x00, 0x00, 0x0A - .byte 0x03, 0x00, 0x51, 0xE3, 0x1B, 0x00, 0x00, 0xEA, 0x78, 0x00, 0x85, 0xE2, 0xAD, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0xCA, 0xFF, 0xFF, 0xEB, 0x90, 0x18, 0x00, 0xEB - .byte 0x28, 0x00, 0x85, 0xE2, 0xA7, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A - .byte 0x28, 0x00, 0x85, 0xE2, 0xD2, 0xFF, 0xFF, 0xEB, 0x0E, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x85, 0xE2 - .byte 0xA0, 0xFF, 0xFF, 0xEB, 0x28, 0x00, 0x85, 0xE2, 0x9E, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0xB8, 0x02, 0xD5, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A - .byte 0xB8, 0xFF, 0xFF, 0xEB, 0xBA, 0x06, 0xD4, 0xE1, 0xD0, 0x1B, 0x00, 0xEB, 0xB8, 0x0B, 0xD4, 0xE1 - .byte 0x01, 0x00, 0x80, 0xE2, 0xB8, 0x0B, 0xC4, 0xE1, 0x14, 0x00, 0x85, 0xE2, 0x91, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x14, 0x00, 0x85, 0xE2, 0xBC, 0xFF, 0xFF, 0xEB - .byte 0x05, 0x00, 0xA0, 0xE1, 0x8B, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x05, 0x00, 0xA0, 0xE1, 0xB6, 0xFF, 0xFF, 0xEB, 0x18, 0x10, 0x9F, 0xE5, 0xB0, 0x00, 0xD1, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03, 0xB0, 0x00, 0xC1, 0x01, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x04, 0x80, 0x80, 0x04 + + arm_func_start sub_0201A6D8 +sub_0201A6D8: ; 0x0201A6D8 + ldr r0, _0201A710 ; =0x04808004 + mov r1, #0 + strh r1, [r0] + mov r2, #0x10 + add r1, r0, #0x210 + b _0201A704 +_0201A6F0: + ldrh r0, [r1] + cmp r0, #0 + cmpne r0, #9 + bxeq lr + sub r2, r2, #1 +_0201A704: + cmp r2, #0 + bne _0201A6F0 + bx lr + .align 2, 0 +_0201A710: .word 0x04808004 + arm_func_end sub_0201A6D8 + + arm_func_start sub_0201A714 +sub_0201A714: ; 0x0201A714 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrh r0, [r4] + cmp r0, #0 + beq _0201A754 + bl sub_0201A6D8 + ldr r1, [r4, #0xc] + ldr r0, [r4, #8] + sub r1, r1, #0x10 + bl sub_0201F904 + ldr r0, _0201A75C ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r1, [r0, #0xfc] + add r1, r1, #1 + strh r1, [r0, #0xfc] +_0201A754: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201A75C: .word 0x0380FFF4 + arm_func_end sub_0201A714 + + arm_func_start sub_0201A760 +sub_0201A760: ; 0x0201A760 + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _0201A854 ; =0x0380FFF4 + ldr r2, [r0] + add r0, r2, #0x300 + ldrh r1, [r0, #0x50] + add r0, r2, #0x2c + cmp r1, #1 + add r4, r2, #0x344 + add r5, r0, #0x400 + beq _0201A798 + cmp r1, #2 + beq _0201A7CC + cmp r1, #3 + b _0201A808 +_0201A798: + add r0, r5, #0x78 + bl sub_0201A658 + cmp r0, #0 + beq _0201A7B0 + bl sub_0201A6D8 + bl sub_020209F4 +_0201A7B0: + add r0, r5, #0x28 + bl sub_0201A658 + cmp r0, #0 + beq _0201A808 + add r0, r5, #0x28 + bl sub_0201A714 + b _0201A808 +_0201A7CC: + add r0, r5, #0x64 + bl sub_0201A658 + add r0, r5, #0x28 + bl sub_0201A658 + cmp r0, #0 + beq _0201A808 + ldrh r0, [r5, #0x28] + cmp r0, #0 + beq _0201A7F4 + bl sub_0201A6D8 +_0201A7F4: + ldrh r0, [r4, #0x6a] + bl sub_02021740 + ldrh r0, [r4, #0xb8] + add r0, r0, #1 + strh r0, [r4, #0xb8] +_0201A808: + add r0, r5, #0x14 + bl sub_0201A658 + cmp r0, #0 + beq _0201A820 + add r0, r5, #0x14 + bl sub_0201A714 +_0201A820: + mov r0, r5 + bl sub_0201A658 + cmp r0, #0 + beq _0201A838 + mov r0, r5 + bl sub_0201A714 +_0201A838: + ldr r1, _0201A858 ; =0x04808004 + ldrh r0, [r1] + cmp r0, #0 + moveq r0, #1 + streqh r0, [r1] + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_0201A854: .word 0x0380FFF4 +_0201A858: .word 0x04808004 + arm_func_end sub_0201A760 arm_func_start sub_0201A85C sub_0201A85C: ; 0x0201A85C @@ -28517,16 +32677,53 @@ _0201B014: .word 0x0380FFF4 _0201B018: .word 0x027F74EA _0201B01C: .word 0x027F751C arm_func_end sub_0201AD40 -_0201B020: - .byte 0x08, 0x00, 0x9F, 0xE5, 0x02, 0x1B, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x10, 0x80, 0x80, 0x04, 0x10, 0x40, 0x2D, 0xE9, 0xB0, 0x10, 0xD0, 0xE1, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x51, 0xE3, 0x0A, 0x00, 0x00, 0x1A, 0x54, 0x20, 0x9F, 0xE5, 0x08, 0x30, 0x90, 0xE5 - .byte 0x50, 0x10, 0x9F, 0xE5, 0xB0, 0x20, 0xD2, 0xE1, 0x01, 0x10, 0x03, 0xE0, 0xA1, 0x10, 0xA0, 0xE1 - .byte 0x02, 0x19, 0x81, 0xE3, 0x02, 0x00, 0x51, 0xE1, 0x01, 0x10, 0xA0, 0x13, 0xB0, 0x10, 0xC0, 0x11 - .byte 0x01, 0x40, 0x84, 0x13, 0xB0, 0x10, 0xD0, 0xE1, 0x01, 0x00, 0x51, 0xE3, 0x05, 0x00, 0x00, 0x1A - .byte 0x08, 0x10, 0x90, 0xE5, 0xB0, 0x10, 0xD1, 0xE1, 0x01, 0x00, 0x11, 0xE3, 0x01, 0x00, 0x00, 0x0A - .byte 0x84, 0x14, 0x00, 0xEB, 0x02, 0x40, 0x84, 0xE3, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x94, 0x80, 0x80, 0x04, 0xFF, 0x3F, 0x00, 0x00 + + arm_func_start sub_0201B020 +sub_0201B020: ; 0x0201B020 + ldr r0, _0201B030 ; =0x04808010 + mov r1, #0x800 + strh r1, [r0] + bx lr + .align 2, 0 +_0201B030: .word 0x04808010 + arm_func_end sub_0201B020 + + arm_func_start sub_0201B034 +sub_0201B034: ; 0x0201B034 + stmdb sp!, {r4, lr} + ldrh r1, [r0] + mov r4, #0 + cmp r1, #2 + bne _0201B074 + ldr r2, _0201B0A4 ; =0x04808094 + ldr r3, [r0, #8] + ldr r1, _0201B0A8 ; =0x00003FFF + ldrh r2, [r2] + and r1, r3, r1 + mov r1, r1, lsr #1 + orr r1, r1, #0x8000 + cmp r1, r2 + movne r1, #1 + strneh r1, [r0] + orrne r4, r4, #1 +_0201B074: + ldrh r1, [r0] + cmp r1, #1 + bne _0201B098 + ldr r1, [r0, #8] + ldrh r1, [r1] + tst r1, #1 + beq _0201B098 + bl sub_020202A8 + orr r4, r4, #2 +_0201B098: + mov r0, r4 + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201B0A4: .word 0x04808094 +_0201B0A8: .word 0x00003FFF + arm_func_end sub_0201B034 arm_func_start sub_0201B0AC sub_0201B0AC: ; 0x0201B0AC @@ -29184,10 +33381,22 @@ sub_0201B870: ; 0x0201B870 .align 2, 0 _0201B88C: .word 0x0380FFF4 arm_func_end sub_0201B870 -_0201B890: - .byte 0x20, 0x20, 0x9F, 0xE5, 0x1C, 0x10, 0xA0, 0xE3, 0x00, 0x20, 0x92, 0xE5, 0x1C, 0x23, 0x92, 0xE5 - .byte 0x90, 0x21, 0x21, 0xE0, 0xB0, 0x01, 0xD1, 0xE1, 0x02, 0x00, 0x10, 0xE3, 0x14, 0x00, 0xA0, 0x13 - .byte 0x0A, 0x00, 0xA0, 0x03, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 + + arm_func_start sub_0201B890 +sub_0201B890: ; 0x0201B890 + ldr r2, _0201B8B8 ; =0x0380FFF4 + mov r1, #0x1c + ldr r2, [r2] + ldr r2, [r2, #0x31c] + mla r1, r0, r1, r2 + ldrh r0, [r1, #0x10] + tst r0, #2 + movne r0, #0x14 + moveq r0, #0xa + bx lr + .align 2, 0 +_0201B8B8: .word 0x0380FFF4 + arm_func_end sub_0201B890 arm_func_start sub_0201B8BC sub_0201B8BC: ; 0x0201B8BC @@ -29617,9 +33826,12 @@ sub_0201BD88: ; 0x0201BD88 _0201BE64: .word 0x0380FFF4 _0201BE68: .word 0x0000FFFF arm_func_end sub_0201BD88 -_0201BE6C: - .byte 0x03, 0x00, 0xA0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0201BE6C +sub_0201BE6C: ; 0x0201BE6C + mov r0, #3 + bx lr + arm_func_end sub_0201BE6C arm_func_start sub_0201BE74 sub_0201BE74: ; 0x0201BE74 @@ -30602,28 +34814,106 @@ _0201CBE4: _0201CBEC: .word 0x0380FFF4 _0201CBF0: .word 0x027ED404 arm_func_end sub_0201CA04 -_0201CBF4: - .byte 0x54, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x01, 0x2B, 0x80, 0xE2, 0xBA, 0x10, 0xD2, 0xE1, 0xBC, 0x00, 0xD2, 0xE1, 0x00, 0x00, 0x81, 0xE0 - .byte 0xBA, 0x00, 0xC2, 0xE1, 0x18, 0x00, 0x92, 0xE5, 0xBA, 0x10, 0xD2, 0xE1, 0xBA, 0x04, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE1, 0x05, 0x00, 0x00, 0x3A, 0xB6, 0x00, 0xD2, 0xE1, 0x10, 0x00, 0x50, 0xE3 - .byte 0x11, 0x00, 0xA0, 0x33, 0xB0, 0x00, 0xC2, 0x31, 0x15, 0x00, 0xA0, 0x23, 0xB0, 0x00, 0xC2, 0x21 - .byte 0x0C, 0xC0, 0x9F, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x98, 0x85, 0x7F, 0x03, 0x10, 0x40, 0x2D, 0xE9, 0x8C, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x20, 0x90, 0xE5, 0x01, 0x0B, 0x82, 0xE2, 0xB4, 0x10, 0xD0, 0xE1, 0x04, 0x00, 0x82, 0xE2 - .byte 0x20, 0x00, 0x51, 0xE3, 0x01, 0x4B, 0x80, 0xE2, 0x02, 0x00, 0x00, 0x0A, 0x25, 0x00, 0x51, 0xE3 - .byte 0x0B, 0x00, 0x00, 0x0A, 0x17, 0x00, 0x00, 0xEA, 0x50, 0x2E, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xB4, 0x00, 0xC4, 0xE1, 0xB6, 0x00, 0xC4, 0xE1, 0x21, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xC4, 0xE1 - .byte 0x18, 0x00, 0x94, 0xE5, 0x48, 0x10, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1, 0x8A, 0xF5, 0xFF, 0xEB - .byte 0x0C, 0x00, 0x00, 0xEA, 0xB4, 0x10, 0xD4, 0xE1, 0x1C, 0x00, 0x94, 0xE5, 0xB4, 0x10, 0xC0, 0xE1 - .byte 0xB6, 0x10, 0xD4, 0xE1, 0x1C, 0x00, 0x94, 0xE5, 0xB6, 0x10, 0xC0, 0xE1, 0xB4, 0x00, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x2A, 0x2F, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xB0, 0x00, 0xC4, 0xE1, 0x86, 0x01, 0x00, 0xEB, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x08, 0xD5, 0x7E, 0x02, 0x2C, 0x00, 0x9F, 0xE5, 0x2C, 0xC0, 0x9F, 0xE5 - .byte 0x00, 0x20, 0x90, 0xE5, 0x07, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x82, 0xE2, 0x01, 0x0B, 0x80, 0xE2 - .byte 0xB4, 0x10, 0xC0, 0xE1, 0x25, 0x30, 0xA0, 0xE3, 0x01, 0x2B, 0x82, 0xE2, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xA0, 0xE3, 0xB4, 0x30, 0xC2, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x98, 0x85, 0x7F, 0x03 + + arm_func_start sub_0201CBF4 +sub_0201CBF4: ; 0x0201CBF4 + ldr r0, _0201CC50 ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #4 + add r2, r0, #0x400 + ldrh r1, [r2, #0xa] + ldrh r0, [r2, #0xc] + add r0, r1, r0 + strh r0, [r2, #0xa] + ldr r0, [r2, #0x18] + ldrh r1, [r2, #0xa] + ldrh r0, [r0, #0x4a] + cmp r1, r0 + blo _0201CC40 + ldrh r0, [r2, #6] + cmp r0, #0x10 + movlo r0, #0x11 + strloh r0, [r2] + movhs r0, #0x15 + strhsh r0, [r2] +_0201CC40: + ldr ip, _0201CC54 ; =sub_037F8598 + mov r0, #2 + mov r1, #0 + bx ip + .align 2, 0 +_0201CC50: .word 0x0380FFF4 +_0201CC54: .word sub_037F8598 + arm_func_end sub_0201CBF4 + + arm_func_start sub_0201CC58 +sub_0201CC58: ; 0x0201CC58 + stmdb sp!, {r4, lr} + ldr r0, _0201CCF0 ; =0x0380FFF4 + ldr r2, [r0] + add r0, r2, #0x400 + ldrh r1, [r0, #4] + add r0, r2, #4 + cmp r1, #0x20 + add r4, r0, #0x400 + beq _0201CC88 + cmp r1, #0x25 + beq _0201CCB4 + b _0201CCE8 +_0201CC88: + bl sub_030285D0 + mov r0, #0 + strh r0, [r4, #4] + strh r0, [r4, #6] + mov r0, #0x21 + strh r0, [r4] + ldr r0, [r4, #0x18] + ldr r1, _0201CCF4 ; =0x027ED508 + ldrh r0, [r0, #0x10] + bl sub_0201A2DC + b _0201CCE8 +_0201CCB4: + ldrh r1, [r4, #4] + ldr r0, [r4, #0x1c] + strh r1, [r0, #4] + ldrh r1, [r4, #6] + ldr r0, [r4, #0x1c] + strh r1, [r0, #6] + ldrh r0, [r4, #4] + cmp r0, #0 + beq _0201CCDC + bl sub_03028988 +_0201CCDC: + mov r0, #0 + strh r0, [r4] + bl sub_0201D304 +_0201CCE8: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201CCF0: .word 0x0380FFF4 +_0201CCF4: .word 0x027ED508 + arm_func_end sub_0201CC58 + + arm_func_start sub_0201CCF8 +sub_0201CCF8: ; 0x0201CCF8 + ldr r0, _0201CD2C ; =0x0380FFF4 + ldr ip, _0201CD30 ; =sub_037F8598 + ldr r2, [r0] + mov r1, #7 + add r0, r2, #4 + add r0, r0, #0x400 + strh r1, [r0, #4] + mov r3, #0x25 + add r2, r2, #0x400 + mov r0, #2 + mov r1, #1 + strh r3, [r2, #4] + bx ip + .align 2, 0 +_0201CD2C: .word 0x0380FFF4 +_0201CD30: .word sub_037F8598 + arm_func_end sub_0201CCF8 arm_func_start sub_0201CD34 sub_0201CD34: ; 0x0201CD34 @@ -30768,12 +35058,26 @@ _0201CF08: _0201CF10: .word 0x0380FFF4 _0201CF14: .word 0x027ED728 arm_func_end sub_0201CE58 -_0201CF18: - .byte 0x2C, 0x00, 0x9F, 0xE5, 0x2C, 0xC0, 0x9F, 0xE5 - .byte 0x00, 0x20, 0x90, 0xE5, 0x07, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x82, 0xE2, 0x1C, 0x04, 0x90, 0xE5 - .byte 0x53, 0x30, 0xA0, 0xE3, 0xB4, 0x10, 0xC0, 0xE1, 0x01, 0x2B, 0x82, 0xE2, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x03, 0x10, 0xA0, 0xE3, 0xB4, 0x30, 0xC2, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x98, 0x85, 0x7F, 0x03 + + arm_func_start sub_0201CF18 +sub_0201CF18: ; 0x0201CF18 + ldr r0, _0201CF4C ; =0x0380FFF4 + ldr ip, _0201CF50 ; =sub_037F8598 + ldr r2, [r0] + mov r1, #7 + add r0, r2, #4 + ldr r0, [r0, #0x41c] + mov r3, #0x53 + strh r1, [r0, #4] + add r2, r2, #0x400 + mov r0, #2 + mov r1, #3 + strh r3, [r2, #4] + bx ip + .align 2, 0 +_0201CF4C: .word 0x0380FFF4 +_0201CF50: .word sub_037F8598 + arm_func_end sub_0201CF18 arm_func_start sub_0201CF54 sub_0201CF54: ; 0x0201CF54 @@ -30829,12 +35133,26 @@ _0201CFFC: _0201D004: .word 0x0380FFF4 _0201D008: .word 0x027ED81C arm_func_end sub_0201CF54 -_0201D00C: - .byte 0x2C, 0x00, 0x9F, 0xE5 - .byte 0x2C, 0xC0, 0x9F, 0xE5, 0x00, 0x20, 0x90, 0xE5, 0x07, 0x10, 0xA0, 0xE3, 0x04, 0x00, 0x82, 0xE2 - .byte 0x1C, 0x04, 0x90, 0xE5, 0x63, 0x30, 0xA0, 0xE3, 0xB4, 0x10, 0xC0, 0xE1, 0x01, 0x2B, 0x82, 0xE2 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x04, 0x10, 0xA0, 0xE3, 0xB4, 0x30, 0xC2, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x98, 0x85, 0x7F, 0x03 + + arm_func_start sub_0201D00C +sub_0201D00C: ; 0x0201D00C + ldr r0, _0201D040 ; =0x0380FFF4 + ldr ip, _0201D044 ; =sub_037F8598 + ldr r2, [r0] + mov r1, #7 + add r0, r2, #4 + ldr r0, [r0, #0x41c] + mov r3, #0x63 + strh r1, [r0, #4] + add r2, r2, #0x400 + mov r0, #2 + mov r1, #4 + strh r3, [r2, #4] + bx ip + .align 2, 0 +_0201D040: .word 0x0380FFF4 +_0201D044: .word sub_037F8598 + arm_func_end sub_0201D00C arm_func_start sub_0201D048 sub_0201D048: ; 0x0201D048 @@ -31011,13 +35329,35 @@ _0201D2AC: .word 0x04808040 _0201D2B0: .word 0x027EDAC8 _0201D2B4: .word 0x0480819C arm_func_end sub_0201D048 -_0201D2B8: - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x1C, 0xC0, 0x9F, 0xE5 - .byte 0x00, 0x10, 0x90, 0xE5, 0x83, 0x30, 0xA0, 0xE3, 0x01, 0x2B, 0x81, 0xE2, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x05, 0x10, 0xA0, 0xE3, 0xB4, 0x30, 0xC2, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x98, 0x85, 0x7F, 0x03, 0x10, 0x00, 0x9F, 0xE5, 0x10, 0xC0, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0xC6, 0x00, 0x80, 0xE2, 0x03, 0x0C, 0x80, 0xE2, 0x1C, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0xC0, 0xDE, 0x7E, 0x02 + + arm_func_start sub_0201D2B8 +sub_0201D2B8: ; 0x0201D2B8 + ldr r0, _0201D2DC ; =0x0380FFF4 + ldr ip, _0201D2E0 ; =sub_037F8598 + ldr r1, [r0] + mov r3, #0x83 + add r2, r1, #0x400 + mov r0, #2 + mov r1, #5 + strh r3, [r2, #4] + bx ip + .align 2, 0 +_0201D2DC: .word 0x0380FFF4 +_0201D2E0: .word sub_037F8598 + arm_func_end sub_0201D2B8 + + arm_func_start sub_0201D2E4 +sub_0201D2E4: ; 0x0201D2E4 + ldr r0, _0201D2FC ; =0x0380FFF4 + ldr ip, _0201D300 ; =sub_027EDEC0 + ldr r0, [r0] + add r0, r0, #0xc6 + add r0, r0, #0x300 + bx ip + .align 2, 0 +_0201D2FC: .word 0x0380FFF4 +_0201D300: .word sub_027EDEC0 + arm_func_end sub_0201D2E4 arm_func_start sub_0201D304 sub_0201D304: ; 0x0201D304 @@ -31555,42 +35895,224 @@ _0201D9E4: .align 2, 0 _0201D9F0: .word 0x0380FFF4 arm_func_end sub_0201D9B4 -_0201D9F4: - .byte 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5 - .byte 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0xBC, 0x8E, 0x7E, 0x02, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x10, 0x00, 0x51, 0xE3, 0x02, 0x00, 0x00, 0x1A - .byte 0xB0, 0x01, 0xD0, 0xE1, 0x29, 0xEB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x40, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x24, 0xD1, 0xE1, 0x20, 0x00, 0x52, 0xE3, 0x03, 0x00, 0xA0, 0x81 - .byte 0x06, 0x00, 0x00, 0x8A, 0x03, 0x00, 0x00, 0x1A, 0xB6, 0x15, 0xD1, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x03, 0x00, 0xA0, 0x11, 0x01, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD0, 0xE1, 0x23, 0xEB, 0xFF, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0xB0, 0x8F, 0x7E, 0x02, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5 - .byte 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0xE4, 0x8F, 0x7E, 0x02, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0x84, 0x90, 0x7E, 0x02, 0x0C, 0xC0, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0xA8, 0x90, 0x7E, 0x02, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x20, 0x00, 0x51, 0xE3, 0x02, 0x00, 0x00, 0x8A - .byte 0xB0, 0x01, 0xD0, 0xE1, 0x73, 0xEB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0x40, 0x91, 0x7E, 0x02, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5 - .byte 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0x78, 0x91, 0x7E, 0x02, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x08, 0xC0, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0xB0, 0x91, 0x7E, 0x02, 0x0C, 0xC0, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x10, 0x00, 0x80, 0xE2, 0xB2, 0x20, 0xC1, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0x60, 0x92, 0x7E, 0x02 - .byte 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1 - .byte 0x1C, 0xFF, 0x2F, 0xE1, 0x90, 0x92, 0x7E, 0x02, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1 - .byte 0x04, 0xC0, 0x9F, 0xE5, 0xB0, 0x01, 0xD0, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1, 0x38, 0x93, 0x7E, 0x02 - .byte 0x38, 0x40, 0x2D, 0xE9, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x50, 0xA0, 0xE1 - .byte 0xB4, 0x01, 0xD5, 0xE1, 0x3F, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x83, 0x08, 0x00, 0x00, 0x8A - .byte 0xB0, 0x01, 0xD5, 0xE1, 0xB2, 0x11, 0xD5, 0xE1, 0xD3, 0xEB, 0xFF, 0xEB, 0x00, 0x40, 0xB0, 0xE1 - .byte 0x02, 0x00, 0x00, 0x1A, 0xB4, 0x11, 0xD5, 0xE1, 0x2E, 0x00, 0xA0, 0xE3, 0x73, 0xF0, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0201D9F4 +sub_0201D9F4: ; 0x0201D9F4 + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DA08 ; =sub_027E8EBC + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DA08: .word sub_027E8EBC + arm_func_end sub_0201D9F4 + + arm_func_start sub_0201DA0C +sub_0201DA0C: ; 0x0201DA0C + stmdb sp!, {r3, lr} + ldr r2, _0201DA48 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x10 + bne _0201DA3C + ldrh r0, [r0, #0x10] + bl sub_020186E0 + mov r3, r0 +_0201DA3C: + mov r0, r3 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DA48: .word 0x0380FFF4 + arm_func_end sub_0201DA0C + + arm_func_start sub_0201DA4C +sub_0201DA4C: ; 0x0201DA4C + stmdb sp!, {r3, lr} + ldr r2, _0201DA98 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r2, [r1, #0x4c] + cmp r2, #0x20 + movhi r0, r3 + bhi _0201DA90 + bne _0201DA88 + ldrh r1, [r1, #0x56] + cmp r1, #0 + movne r0, r3 + bne _0201DA90 +_0201DA88: + ldrh r0, [r0, #0x10] + bl sub_02018720 +_0201DA90: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DA98: .word 0x0380FFF4 + arm_func_end sub_0201DA4C + + arm_func_start sub_0201DA9C +sub_0201DA9C: ; 0x0201DA9C + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DAB0 ; =sub_027E8FB0 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DAB0: .word sub_027E8FB0 + arm_func_end sub_0201DA9C + + arm_func_start sub_0201DAB4 +sub_0201DAB4: ; 0x0201DAB4 + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DAC8 ; =sub_027E8FE4 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DAC8: .word sub_027E8FE4 + arm_func_end sub_0201DAB4 + + arm_func_start sub_0201DACC +sub_0201DACC: ; 0x0201DACC + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DAE0 ; =sub_027E9084 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DAE0: .word sub_027E9084 + arm_func_end sub_0201DACC + + arm_func_start sub_0201DAE4 +sub_0201DAE4: ; 0x0201DAE4 + ldr ip, _0201DAF8 ; =sub_027E90A8 + mov r2, #1 + add r0, r0, #0x10 + strh r2, [r1, #2] + bx ip + .align 2, 0 +_0201DAF8: .word sub_027E90A8 + arm_func_end sub_0201DAE4 + + arm_func_start sub_0201DAFC +sub_0201DAFC: ; 0x0201DAFC + stmdb sp!, {r3, lr} + ldr r2, _0201DB38 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x20 + bhi _0201DB2C + ldrh r0, [r0, #0x10] + bl sub_020188F8 + mov r3, r0 +_0201DB2C: + mov r0, r3 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DB38: .word 0x0380FFF4 + arm_func_end sub_0201DAFC + + arm_func_start sub_0201DB3C +sub_0201DB3C: ; 0x0201DB3C + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DB50 ; =sub_027E9140 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DB50: .word sub_027E9140 + arm_func_end sub_0201DB3C + + arm_func_start sub_0201DB54 +sub_0201DB54: ; 0x0201DB54 + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DB68 ; =sub_027E9178 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DB68: .word sub_027E9178 + arm_func_end sub_0201DB54 + + arm_func_start sub_0201DB6C +sub_0201DB6C: ; 0x0201DB6C + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DB84 ; =sub_027E91B0 + ldrh r0, [r0, #0x10] + mov r1, #0 + bx ip + .align 2, 0 +_0201DB84: .word sub_027E91B0 + arm_func_end sub_0201DB6C + + arm_func_start sub_0201DB88 +sub_0201DB88: ; 0x0201DB88 + ldr ip, _0201DB9C ; =sub_027E9260 + mov r2, #1 + add r0, r0, #0x10 + strh r2, [r1, #2] + bx ip + .align 2, 0 +_0201DB9C: .word sub_027E9260 + arm_func_end sub_0201DB88 + + arm_func_start sub_0201DBA0 +sub_0201DBA0: ; 0x0201DBA0 + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DBB4 ; =sub_027E9290 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DBB4: .word sub_027E9290 + arm_func_end sub_0201DBA0 + + arm_func_start sub_0201DBB8 +sub_0201DBB8: ; 0x0201DBB8 + mov r2, #1 + strh r2, [r1, #2] + ldr ip, _0201DBCC ; =sub_027E9338 + ldrh r0, [r0, #0x10] + bx ip + .align 2, 0 +_0201DBCC: .word sub_027E9338 + arm_func_end sub_0201DBB8 + + arm_func_start sub_0201DBD0 +sub_0201DBD0: ; 0x0201DBD0 + stmdb sp!, {r3, r4, r5, lr} + mov r2, #1 + strh r2, [r1, #2] + mov r5, r0 + ldrh r0, [r5, #0x14] + cmp r0, #0x3f + movhi r0, #5 + bhi _0201DC14 + ldrh r0, [r5, #0x10] + ldrh r1, [r5, #0x12] + bl sub_02018B4C + movs r4, r0 + bne _0201DC10 + ldrh r1, [r5, #0x14] + mov r0, #0x2e + bl sub_02019DE0 +_0201DC10: + mov r0, r4 +_0201DC14: + ldmia sp!, {r3, r4, r5, lr} + bx lr + arm_func_end sub_0201DBD0 arm_func_start sub_0201DC1C sub_0201DC1C: ; 0x0201DC1C @@ -31670,416 +36192,1984 @@ _0201DD14: _0201DD1C: .word 0x0380FFF4 _0201DD20: .word 0x0000FFFF arm_func_end sub_0201DC1C -_0201DD24: - .byte 0x4C, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1 - .byte 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x20, 0x00, 0x51, 0xE3 - .byte 0x03, 0x00, 0xA0, 0x81, 0x1E, 0xFF, 0x2F, 0x81, 0xB0, 0x11, 0xD0, 0xE1, 0x01, 0x10, 0x81, 0xE2 - .byte 0xB0, 0x11, 0xC0, 0xE1, 0x00, 0x10, 0x92, 0xE5, 0xB0, 0x21, 0xD0, 0xE1, 0x03, 0x0C, 0x81, 0xE2 - .byte 0xB0, 0x12, 0xD0, 0xE1, 0x01, 0x00, 0x52, 0xE1, 0x05, 0x00, 0xA0, 0x83, 0xB2, 0x22, 0xC0, 0x91 - .byte 0x00, 0x00, 0xA0, 0x93, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x10, 0x00, 0x51, 0xE3, 0x02, 0x00, 0x00, 0x3A - .byte 0xB0, 0x01, 0xD0, 0xE1, 0x79, 0xEB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1 - .byte 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x10, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x3A, 0xB0, 0x01, 0xD3, 0xE1, 0xB2, 0x11, 0xD3, 0xE1, 0x81, 0xEB, 0xFF, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x10, 0x00, 0x51, 0xE3, 0x02, 0x00, 0x00, 0x3A - .byte 0xB0, 0x01, 0xD0, 0xE1, 0xA8, 0xEB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBC, 0x14, 0xD1, 0xE1, 0x10, 0x00, 0x51, 0xE3, 0x02, 0x00, 0x00, 0x3A - .byte 0xB0, 0x01, 0xD0, 0xE1, 0xA8, 0xEB, 0xFF, 0xEB, 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x0C, 0xC0, 0x9F, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x10, 0x00, 0x80, 0xE2, 0xB2, 0x20, 0xC1, 0xE1, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0x6C, 0x95, 0x7E, 0x02, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xB0, 0x01, 0xD1, 0xE1, 0x04, 0xC0, 0x9F, 0xE5, 0x12, 0x10, 0x81, 0xE2, 0x1C, 0xFF, 0x2F, 0xE1 - .byte 0xD0, 0x95, 0x7E, 0x02, 0x08, 0x40, 0x2D, 0xE9, 0x2C, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3 - .byte 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2, 0xBE, 0x12, 0xD1, 0xE1 - .byte 0x01, 0x00, 0x51, 0xE3, 0x0B, 0x00, 0xA0, 0x13, 0x01, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD0, 0xE1 - .byte 0xFA, 0xEB, 0xFF, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x08, 0x40, 0x2D, 0xE9, 0x2C, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1 - .byte 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2, 0xBE, 0x12, 0xD1, 0xE1, 0x01, 0x00, 0x51, 0xE3 - .byte 0x0B, 0x00, 0xA0, 0x13, 0x01, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD0, 0xE1, 0x01, 0xEC, 0xFF, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x30, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xBE, 0x12, 0xD1, 0xE1, 0x02, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x51, 0x13 - .byte 0x0B, 0x00, 0xA0, 0x13, 0x01, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD0, 0xE1, 0x02, 0xEC, 0xFF, 0xEB - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x54, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0xB2, 0x30, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE1, 0x03, 0x0C, 0x81, 0xE2, 0xBE, 0x02, 0xD0, 0xE1, 0x01, 0x00, 0x50, 0xE3 - .byte 0x0B, 0x00, 0xA0, 0x13, 0x0A, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD3, 0xE1, 0xBE, 0x20, 0xD3, 0xE1 - .byte 0x01, 0x10, 0x80, 0xE2, 0xA1, 0x1F, 0x81, 0xE0, 0xC1, 0x10, 0xA0, 0xE1, 0x01, 0x10, 0x81, 0xE2 - .byte 0x01, 0x00, 0x52, 0xE1, 0x04, 0x00, 0xA0, 0xB3, 0x01, 0x00, 0x00, 0xBA, 0x12, 0x10, 0x83, 0xE2 - .byte 0xDF, 0xED, 0xFF, 0xEB, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x28, 0x01, 0x9F, 0xE5, 0x01, 0x40, 0xA0, 0xE1, 0x21, 0x10, 0xA0, 0xE3 - .byte 0xB2, 0x10, 0xC4, 0xE1, 0x00, 0x10, 0x90, 0xE5, 0x06, 0x00, 0x84, 0xE2, 0xC9, 0x1F, 0x81, 0xE2 - .byte 0x36, 0xEE, 0xFF, 0xEB, 0x08, 0x01, 0x9F, 0xE5, 0x22, 0x10, 0x84, 0xE2, 0x00, 0x30, 0x90, 0xE5 - .byte 0x20, 0x20, 0xA0, 0xE3, 0x03, 0x3C, 0x83, 0xE2, 0xBA, 0x32, 0xD3, 0xE1, 0xBC, 0x30, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xBC, 0x32, 0xD3, 0xE1, 0xBE, 0x30, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xBE, 0x3B, 0xD3, 0xE1, 0xB0, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xBE, 0x32, 0xD3, 0xE1, 0xB2, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xB0, 0x33, 0xD3, 0xE1, 0xB4, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xB4, 0x33, 0xD3, 0xE1, 0xB6, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xB6, 0x33, 0xD3, 0xE1, 0xB8, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xBA, 0x33, 0xD3, 0xE1, 0x83, 0x3F, 0xA0, 0xE1 - .byte 0xA3, 0x3F, 0xA0, 0xE1, 0xBA, 0x31, 0xC4, 0xE1, 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2 - .byte 0xBA, 0x33, 0xD3, 0xE1, 0x03, 0x3F, 0xA0, 0xE1, 0xA3, 0x3F, 0xA0, 0xE1, 0xBC, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xB2, 0x3C, 0xD3, 0xE1, 0xBE, 0x31, 0xC4, 0xE1 - .byte 0x00, 0x30, 0x90, 0xE5, 0x03, 0x3C, 0x83, 0xE2, 0xBC, 0x33, 0xD3, 0xE1, 0xB0, 0x32, 0xC4, 0xE1 - .byte 0x00, 0x00, 0x90, 0xE5, 0xE1, 0x0F, 0x80, 0xE2, 0xAF, 0x3D, 0x40, 0xEB, 0x30, 0x20, 0x9F, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2, 0xBA, 0x13, 0xD1, 0xE1 - .byte 0x81, 0x1E, 0xA0, 0xE1, 0xA1, 0x1F, 0xA0, 0xE1, 0xB2, 0x14, 0xC4, 0xE1, 0x00, 0x10, 0x92, 0xE5 - .byte 0x03, 0x1C, 0x81, 0xE2, 0xB2, 0x13, 0xD1, 0xE1, 0xB4, 0x14, 0xC4, 0xE1, 0x10, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x20, 0x00, 0x9F, 0xE5 - .byte 0x04, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x06, 0x00, 0x81, 0xE2 - .byte 0xC9, 0x1F, 0x82, 0xE2, 0xE9, 0xED, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xBA, 0x22, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x2C, 0x30, 0x9F, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1, 0x00, 0x20, 0x93, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xBC, 0x22, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x00, 0x20, 0x93, 0xE5, 0x03, 0x2C, 0x82, 0xE2, 0xBE, 0x2B, 0xD2, 0xE1, 0xB8, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xBE, 0x22, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xB0, 0x23, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xB4, 0x23, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xB6, 0x23, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x24, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xBA, 0x23, 0xD2, 0xE1, 0x82, 0x2F, 0xA0, 0xE1, 0xA2, 0x2F, 0xA0, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x24, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xBA, 0x23, 0xD2, 0xE1, 0x02, 0x2F, 0xA0, 0xE1, 0xA2, 0x2F, 0xA0, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xB2, 0x2C, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xBC, 0x23, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x30, 0x00, 0x9F, 0xE5, 0x11, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x06, 0x30, 0x81, 0xE2, 0xE1, 0x2F, 0x80, 0xE2 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xB2, 0x00, 0xD2, 0xE0, 0x01, 0x10, 0x81, 0xE2, 0x10, 0x00, 0x51, 0xE3 - .byte 0xB2, 0x00, 0xC3, 0xE0, 0xFA, 0xFF, 0xFF, 0x3A, 0x00, 0x00, 0xA0, 0xE3, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x24, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1 - .byte 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xBA, 0x23, 0xD2, 0xE1 - .byte 0x82, 0x2E, 0xA0, 0xE1, 0xA2, 0x2F, 0xA0, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1 - .byte 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xB2, 0x23, 0xD2, 0xE1 - .byte 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x10, 0x40, 0x2D, 0xE9 - .byte 0x01, 0x40, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC4, 0xE1, 0x13, 0x00, 0xA0, 0xE3 - .byte 0x87, 0xEE, 0xFF, 0xEB, 0xB6, 0x00, 0xC4, 0xE1, 0x35, 0x00, 0xA0, 0xE3, 0x84, 0xEE, 0xFF, 0xEB - .byte 0xB8, 0x00, 0xC4, 0xE1, 0x2E, 0x00, 0xA0, 0xE3, 0x81, 0xEE, 0xFF, 0xEB, 0xBA, 0x00, 0xC4, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x20, 0x00, 0x9F, 0xE5 - .byte 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x03, 0x2C, 0x82, 0xE2, 0xB2, 0x22, 0xD2, 0xE1, 0x01, 0x20, 0x42, 0xE2, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x30, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x24, 0xD0, 0xE1 - .byte 0x10, 0x00, 0x52, 0xE3, 0x01, 0x00, 0xA0, 0x33, 0xBA, 0x23, 0xD0, 0x21, 0x00, 0x00, 0xA0, 0x23 - .byte 0x02, 0x2E, 0xA0, 0x21, 0xA2, 0x2F, 0xA0, 0x21, 0xB6, 0x20, 0xC1, 0x21, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x54, 0x30, 0x9F, 0xE5, 0x03, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1 - .byte 0x00, 0x00, 0x93, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x24, 0xD0, 0xE1, 0x10, 0x00, 0x52, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x33, 0x1E, 0xFF, 0x2F, 0x31, 0xBA, 0x23, 0xD0, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x82, 0x2D, 0xA0, 0xE1, 0xA2, 0x2F, 0xA0, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x93, 0xE5 - .byte 0x03, 0x2C, 0x82, 0xE2, 0xBA, 0x33, 0xD2, 0xE1, 0x03, 0x2E, 0xA0, 0xE1, 0x03, 0x3D, 0xA0, 0xE1 - .byte 0xA2, 0x2F, 0xA0, 0xE1, 0xA3, 0x2F, 0x22, 0xE0, 0xB8, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x30, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1 - .byte 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x24, 0xD0, 0xE1, 0x10, 0x00, 0x52, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x33, 0xBA, 0x23, 0xD0, 0x21, 0x00, 0x00, 0xA0, 0x23, 0x82, 0x2C, 0xA0, 0x21 - .byte 0xA2, 0x2F, 0xA0, 0x21, 0xB6, 0x20, 0xC1, 0x21, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x30, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x00, 0x90, 0xE5 - .byte 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x24, 0xD0, 0xE1, 0x10, 0x00, 0x52, 0xE3, 0x01, 0x00, 0xA0, 0x33 - .byte 0xBA, 0x23, 0xD0, 0x21, 0x00, 0x00, 0xA0, 0x23, 0x02, 0x2C, 0xA0, 0x21, 0xA2, 0x2F, 0xA0, 0x21 - .byte 0xB6, 0x20, 0xC1, 0x21, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9 - .byte 0x20, 0x00, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5 - .byte 0x06, 0x00, 0x81, 0xE2, 0xEA, 0x1F, 0x82, 0xE2, 0xEC, 0xEC, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x40, 0x20, 0x9F, 0xE5 - .byte 0x12, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1, 0x00, 0x00, 0x92, 0xE5, 0x08, 0xC0, 0x81, 0xE2 - .byte 0x03, 0x0C, 0x80, 0xE2, 0xB2, 0x06, 0xD0, 0xE1, 0x00, 0x30, 0xA0, 0xE3, 0xB6, 0x00, 0xC1, 0xE1 - .byte 0x00, 0x00, 0x92, 0xE5, 0xD9, 0x1F, 0x80, 0xE2, 0xB2, 0x00, 0xD1, 0xE0, 0x02, 0x30, 0x83, 0xE2 - .byte 0x20, 0x00, 0x53, 0xE3, 0xB2, 0x00, 0xCC, 0xE0, 0xFA, 0xFF, 0xFF, 0x3A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xB2, 0x2B, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2, 0xB8, 0x2B, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x2C, 0x82, 0xE2 - .byte 0xB4, 0x2B, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0xF8, 0x40, 0x2D, 0xE9, 0x01, 0x40, 0xA0, 0xE1, 0xB2, 0x00, 0xD4, 0xE1, 0xC0, 0x10, 0x9F, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE3, 0xB8, 0x00, 0x9F, 0x85, 0x00, 0x00, 0x90, 0x85, 0x03, 0x0C, 0x80, 0x82 - .byte 0xB4, 0x0E, 0xD0, 0x81, 0xB6, 0x00, 0xC4, 0x81, 0xB2, 0x00, 0xD4, 0xE1, 0x00, 0x30, 0x91, 0xE5 - .byte 0x02, 0x10, 0x40, 0xE2, 0x03, 0x0C, 0x83, 0xE2, 0xB4, 0x2E, 0xD0, 0xE1, 0x81, 0x00, 0x52, 0xE1 - .byte 0x04, 0x00, 0xA0, 0xC3, 0x20, 0x00, 0x00, 0xCA, 0xB6, 0x20, 0xD4, 0xE1, 0x00, 0x00, 0x52, 0xE3 - .byte 0x16, 0x00, 0x00, 0x0A, 0xB6, 0x0E, 0xD0, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0xE0, 0x03, 0x93, 0xE5 - .byte 0x0F, 0x00, 0x00, 0x0A, 0x08, 0x60, 0x84, 0xE2, 0x01, 0x50, 0x80, 0xE2, 0x00, 0x70, 0xA0, 0xE3 - .byte 0x07, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1, 0xB4, 0xEF, 0xFF, 0xEB, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE1, 0xA6, 0xEF, 0xFF, 0xEB, 0x01, 0x60, 0x86, 0xE2, 0x01, 0x50, 0x85, 0xE2 - .byte 0x01, 0x70, 0x87, 0xE2, 0xB6, 0x00, 0xD4, 0xE1, 0x00, 0x00, 0x57, 0xE1, 0xF4, 0xFF, 0xFF, 0x3A - .byte 0x02, 0x00, 0x00, 0xEA, 0x08, 0x10, 0x84, 0xE2, 0x01, 0x20, 0x82, 0xE2, 0x3A, 0x3C, 0x40, 0xEB - .byte 0xB6, 0x10, 0xD4, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x81, 0xE2, 0xA1, 0x1F, 0x81, 0xE0 - .byte 0xC1, 0x10, 0xA0, 0xE1, 0x02, 0x10, 0x81, 0xE2, 0xB2, 0x10, 0xC4, 0xE1, 0xF8, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x30, 0x20, 0x9F, 0xE5 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2 - .byte 0xBC, 0x14, 0xD1, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x51, 0x13, 0x02, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0xCB, 0x28, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x4C, 0x20, 0x9F, 0xE5 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1, 0x00, 0x10, 0x92, 0xE5, 0x03, 0x1C, 0x81, 0xE2 - .byte 0xBC, 0x24, 0xD1, 0xE1, 0x20, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x8A, 0xB6, 0x15, 0xD1, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x76, 0x17, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x0E, 0x00, 0xA0, 0x13, 0x02, 0x00, 0x00, 0x1A, 0x10, 0x00, 0xA0, 0xE3 - .byte 0xB4, 0x28, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x44, 0x00, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x14, 0xD0, 0xE1 - .byte 0x10, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x20, 0x00, 0x51, 0xE3, 0xB6, 0x05, 0xD0, 0x01 - .byte 0x00, 0x00, 0x50, 0x03, 0x03, 0x00, 0x00, 0x1A, 0x20, 0x00, 0xA0, 0xE3, 0xA1, 0x28, 0x40, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE3, 0x08, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x2C, 0x00, 0x9F, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2 - .byte 0xBC, 0x04, 0xD0, 0xE1, 0x20, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x00, 0x3A, 0x69, 0x28, 0x40, 0xEB - .byte 0x67, 0xE6, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x08, 0x40, 0x2D, 0xE9, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5 - .byte 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x04, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0xB2, 0x00, 0xC1, 0xE1, 0x53, 0xEC, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x10, 0x40, 0x2D, 0xE9 - .byte 0x88, 0x00, 0x9F, 0xE5, 0x01, 0x40, 0xA0, 0xE1, 0x09, 0x30, 0xA0, 0xE3, 0x06, 0x10, 0x84, 0xE2 - .byte 0x08, 0x20, 0xA0, 0xE3, 0xB2, 0x30, 0xC4, 0xE1, 0xCF, 0x3B, 0x40, 0xEB, 0x70, 0x10, 0x9F, 0xE5 - .byte 0x70, 0x00, 0x9F, 0xE5, 0xB0, 0x10, 0xD1, 0xE1, 0xBE, 0x10, 0xC4, 0xE1, 0x00, 0x00, 0x90, 0xE5 - .byte 0x06, 0x0C, 0x80, 0xE2, 0xB0, 0x09, 0xD0, 0xE1, 0x02, 0x09, 0x10, 0xE3, 0x6D, 0x10, 0xA0, 0x03 - .byte 0x54, 0x00, 0x9F, 0x05, 0xB0, 0x11, 0xC4, 0x01, 0x03, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x4B, 0xED, 0xFF, 0xEB, 0xB0, 0x01, 0xC4, 0xE1, 0x68, 0xED, 0xFF, 0xEB, 0xB2, 0x01, 0xC4, 0xE1 - .byte 0x30, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x06, 0x0C, 0x81, 0xE2, 0xB0, 0x09, 0xD0, 0xE1 - .byte 0x01, 0x09, 0x10, 0xE3, 0x05, 0x0C, 0x81, 0x12, 0xB8, 0x0F, 0xD0, 0x11, 0x02, 0x00, 0xA0, 0x03 - .byte 0xB4, 0x01, 0xC4, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x68, 0x78, 0x7F, 0x02, 0x00, 0x80, 0x80, 0x04, 0xF4, 0xFF, 0x80, 0x03, 0x3D, 0x93, 0x00, 0x00 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x4C, 0x00, 0x9F, 0xE5, 0x01, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x90, 0xE5 - .byte 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x04, 0xD0, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x0A, 0x00, 0x00, 0x0A, 0x5C, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC4, 0xE1, 0x26, 0xEC, 0xFF, 0xEB - .byte 0x20, 0x00, 0x9F, 0xE5, 0x08, 0x10, 0x84, 0xE2, 0x00, 0x00, 0x90, 0xE5, 0xB4, 0x20, 0xA0, 0xE3 - .byte 0x4F, 0x0F, 0x80, 0xE2, 0x01, 0x0B, 0x80, 0xE2, 0xAF, 0x3B, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x1C, 0x00, 0x9F, 0xE5 - .byte 0x02, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x20, 0x90, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x03, 0x2C, 0x82, 0xE2, 0xBC, 0x24, 0xD2, 0xE1, 0xB6, 0x20, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0x78, 0x40, 0x2D, 0xE9, 0x04, 0xD0, 0x4D, 0xE2, 0x18, 0x23, 0x9F, 0xE5 - .byte 0x00, 0x50, 0xA0, 0xE1, 0x00, 0x20, 0x92, 0xE5, 0x01, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1 - .byte 0xD1, 0x4F, 0x82, 0xE2, 0xB8, 0x10, 0xD4, 0xE1, 0xF0, 0x10, 0x01, 0xE2, 0x10, 0x00, 0x51, 0xE3 - .byte 0xBA, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD5, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x83 - .byte 0xB6, 0x00, 0x00, 0x8A, 0xB4, 0x01, 0xD5, 0xE1, 0x0A, 0x00, 0x50, 0xE3, 0x14, 0x00, 0x50, 0x13 - .byte 0x05, 0x00, 0xA0, 0x13, 0xB1, 0x00, 0x00, 0x1A, 0xB2, 0x01, 0xD5, 0xE1, 0x04, 0x00, 0x50, 0xE3 - .byte 0x05, 0x00, 0xA0, 0x83, 0xAD, 0x00, 0x00, 0x8A, 0x00, 0x00, 0xA0, 0xE3, 0xD6, 0x16, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x0E, 0x00, 0xA0, 0x13, 0xA8, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xD5, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x82, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x50, 0xE3, 0xA2, 0x00, 0x00, 0x1A - .byte 0xB8, 0x00, 0xD4, 0xE1, 0x10, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x13, 0x9F, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x20, 0x8D, 0xE2, 0x65, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x15, 0x17, 0x00, 0xEB, 0x00, 0x60, 0x9D, 0xE5, 0x01, 0x00, 0xA0, 0xE3 - .byte 0xE7, 0xEC, 0xFF, 0xEB, 0x00, 0x00, 0x56, 0xE1, 0x04, 0x00, 0x00, 0x0A, 0x06, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xED, 0xEC, 0xFF, 0xEB, 0x50, 0x02, 0x9F, 0xE5, 0xD9, 0xED, 0xFF, 0xEB - .byte 0xB2, 0x01, 0xD5, 0xE1, 0x04, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8A, 0x00, 0x00, 0xEA - .byte 0x03, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA, 0x11, 0x00, 0xA0, 0xE3, 0xB8, 0x00, 0xC4, 0xE1, 0xB6, 0x01, 0xD5, 0xE1 - .byte 0x01, 0x10, 0xA0, 0xE3, 0xA1, 0xE9, 0xFF, 0xEB, 0x14, 0x12, 0x9F, 0xE5, 0x02, 0x29, 0xA0, 0xE3 - .byte 0x10, 0x02, 0x9F, 0xE5, 0xB0, 0x20, 0xC1, 0xE1, 0xC6, 0xED, 0xFF, 0xEB, 0xB4, 0x11, 0xD5, 0xE1 - .byte 0x02, 0x00, 0xA0, 0xE3, 0xB6, 0x11, 0xC4, 0xE1, 0xC9, 0xEC, 0xFF, 0xEB, 0x00, 0x00, 0x8D, 0xE5 - .byte 0xB2, 0x11, 0xD5, 0xE1, 0xF0, 0x21, 0x9F, 0xE5, 0x01, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x80, 0x93 - .byte 0x00, 0x00, 0x8D, 0x95, 0xB4, 0x01, 0xD5, 0xE1, 0xB0, 0x00, 0xC2, 0xE1, 0xB2, 0x01, 0xD5, 0xE1 - .byte 0x01, 0x00, 0x50, 0xE3, 0xB2, 0x00, 0x42, 0x11, 0x04, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x03, 0x00, 0xA0, 0xE3, 0x20, 0x10, 0x81, 0xE3, 0x00, 0x10, 0x8D, 0xE5, 0xB2, 0x00, 0x42, 0xE1 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0xC0, 0xEC, 0xFF, 0xEB, 0xAC, 0x11, 0x9F, 0xE5 - .byte 0xAC, 0x01, 0x9F, 0xE5, 0xB0, 0x10, 0xC0, 0xE1, 0x5F, 0x00, 0x00, 0xEA, 0x88, 0x01, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0xD1, 0x4F, 0x80, 0xE2, 0xB4, 0x26, 0x40, 0xEB, 0xA1, 0x27, 0x40, 0xEB - .byte 0x06, 0x00, 0xA0, 0xE3, 0xAA, 0xEC, 0xFF, 0xEB, 0xBC, 0x0A, 0xC4, 0xE1, 0xB2, 0x01, 0xD5, 0xE1 - .byte 0x04, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x06, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xAE, 0xEC, 0xFF, 0xEB, 0x6C, 0x11, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0x20, 0xA0, 0xE3 - .byte 0x0B, 0x3B, 0x40, 0xEB, 0x5C, 0x11, 0x9F, 0xE5, 0x14, 0x00, 0xA0, 0xE3, 0xB8, 0x00, 0xC1, 0xE1 - .byte 0x7D, 0x0E, 0xA0, 0xE3, 0xBA, 0x00, 0xC1, 0xE1, 0x0C, 0x30, 0x81, 0xE2, 0x48, 0x11, 0x9F, 0xE5 - .byte 0x48, 0x01, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x02, 0x20, 0x82, 0xE2, 0x00, 0x00, 0x52, 0xE1 - .byte 0xB2, 0x10, 0xC3, 0xE0, 0xFB, 0xFF, 0xFF, 0x3A, 0x28, 0x11, 0x9F, 0xE5, 0x08, 0x20, 0xA0, 0xE3 - .byte 0x2C, 0x01, 0x9F, 0xE5, 0xBC, 0x20, 0xC1, 0xE1, 0x06, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x12, 0x00, 0xA0, 0xE3, 0xB8, 0x00, 0xC4, 0xE1, 0x01, 0x10, 0xA0, 0xE3, 0xB8, 0x11, 0xC4, 0xE1 - .byte 0xB6, 0x01, 0xD5, 0xE1, 0x55, 0xE9, 0xFF, 0xEB, 0xE4, 0x10, 0x9F, 0xE5, 0x02, 0x29, 0xA0, 0xE3 - .byte 0xE0, 0x00, 0x9F, 0xE5, 0xB0, 0x20, 0xC1, 0xE1, 0x7A, 0xED, 0xFF, 0xEB, 0x01, 0x20, 0xA0, 0xE3 - .byte 0xF0, 0x30, 0x9F, 0xE5, 0x02, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xC3, 0xE1, 0xBE, 0x20, 0x43, 0xE1 - .byte 0xD0, 0x10, 0x9F, 0xE5, 0x01, 0x09, 0x62, 0xE2, 0x00, 0x00, 0x01, 0xE0, 0x80, 0x07, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0xBC, 0x29, 0xC3, 0xE1, 0x02, 0x09, 0x80, 0xE3, 0xBE, 0x08, 0xC3, 0xE1 - .byte 0x21, 0x00, 0x00, 0xEA, 0xB8, 0x00, 0xD4, 0xE1, 0x11, 0x00, 0x50, 0xE3, 0x0E, 0x00, 0x00, 0x1A - .byte 0x91, 0xED, 0xFF, 0xEB, 0x98, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x20, 0xC1, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1, 0x16, 0x0E, 0x41, 0xE2, 0xB0, 0x20, 0xC0, 0xE1 - .byte 0x02, 0x00, 0xA0, 0xE3, 0x66, 0xEC, 0xFF, 0xEB, 0x30, 0x10, 0xC0, 0xE3, 0x02, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x8D, 0xE5, 0x6D, 0xEC, 0xFF, 0xEB, 0x0D, 0x00, 0x00, 0xEA, 0x12, 0x00, 0x50, 0xE3 - .byte 0x09, 0x00, 0x00, 0x1A, 0x70, 0x10, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xB8, 0x01, 0xC4, 0xE1 - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0xBC, 0x1A, 0xD4, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE3, 0x61, 0xEC, 0xFF, 0xEB, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x10, 0x00, 0xA0, 0xE3, 0xB8, 0x00, 0xC4, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x04, 0xD0, 0x8D, 0xE2, 0x78, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x88, 0x13, 0x00, 0x00, 0x40, 0x80, 0x80, 0x04, 0xDC, 0x05, 0x00, 0x00, 0xA4, 0x81, 0x80, 0x04 - .byte 0x23, 0x08, 0x00, 0x00, 0xA0, 0x81, 0x80, 0x04, 0x00, 0x40, 0x80, 0x04, 0x55, 0x55, 0x00, 0x00 - .byte 0xEC, 0x07, 0x00, 0x00, 0x94, 0x81, 0x80, 0x04, 0x12, 0x80, 0x80, 0x04, 0x04, 0x80, 0x80, 0x04 - .byte 0x64, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x03, 0x0C, 0x80, 0xE2, 0xBC, 0x05, 0xD0, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0x50, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x20, 0xC0, 0xE1, 0x48, 0x10, 0x9F, 0xE5, 0xB4, 0x20, 0xC0, 0xE1, 0xB0, 0x00, 0xD1, 0xE1 - .byte 0x02, 0x09, 0x80, 0xE3, 0xB0, 0x00, 0xC1, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0x34, 0x20, 0x9F, 0xE5 - .byte 0x01, 0x30, 0xA0, 0xE3, 0xB0, 0x30, 0xC2, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xB8, 0x1A, 0x42, 0xE1 - .byte 0x02, 0x00, 0xA0, 0xE3, 0xBA, 0x09, 0x42, 0xE1, 0x01, 0x08, 0x63, 0xE2, 0xBC, 0x09, 0x42, 0xE1 - .byte 0xB8, 0x1E, 0xC2, 0xE1, 0xBC, 0x16, 0x42, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x00, 0x40, 0x80, 0x04, 0xA0, 0x80, 0x80, 0x04, 0xAC, 0x80, 0x80, 0x04, 0x10, 0x40, 0x2D, 0xE9 - .byte 0xA0, 0x20, 0x9F, 0xE5, 0x01, 0x30, 0xA0, 0xE3, 0x00, 0x20, 0x92, 0xE5, 0xB2, 0x30, 0xC1, 0xE1 - .byte 0xD1, 0x4F, 0x82, 0xE2, 0xB8, 0x20, 0xD4, 0xE1, 0xF0, 0x10, 0x02, 0xE2, 0x10, 0x00, 0x51, 0xE3 - .byte 0x03, 0x00, 0xA0, 0x11, 0x1D, 0x00, 0x00, 0x1A, 0xB0, 0x11, 0xD0, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x0F, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x51, 0xE3, 0x17, 0x00, 0x00, 0x1A, 0x10, 0x00, 0x52, 0xE3 - .byte 0x03, 0x00, 0xA0, 0x11, 0x15, 0x00, 0x00, 0x1A, 0xB2, 0x01, 0xD0, 0xE1, 0x03, 0x10, 0xA0, 0xE1 - .byte 0xDA, 0xE8, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0x00, 0xC4, 0xE1, 0x0F, 0x26, 0x40, 0xEB - .byte 0x02, 0x09, 0xA0, 0xE3, 0xCD, 0xE9, 0xFF, 0xEB, 0x11, 0x00, 0xA0, 0xE3, 0xB8, 0x00, 0xC4, 0xE1 - .byte 0x09, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x52, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xC6, 0xE9, 0xFF, 0xEB, 0xF3, 0x26, 0x40, 0xEB, 0x01, 0x00, 0x00, 0xEA, 0x03, 0x00, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x00, 0xEA, 0x10, 0x00, 0xA0, 0xE3, 0xB8, 0x00, 0xC4, 0xE1, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0xF0, 0x41, 0x2D, 0xE9 - .byte 0xB8, 0x11, 0x9F, 0xE5, 0x00, 0x80, 0xA0, 0xE1, 0x00, 0x40, 0x91, 0xE5, 0xB6, 0x11, 0xD8, 0xE1 - .byte 0xAC, 0x01, 0x9F, 0xE5, 0xD1, 0x5F, 0x84, 0xE2, 0x00, 0x00, 0x51, 0xE1, 0xC7, 0x6F, 0x84, 0xE2 - .byte 0x05, 0x00, 0xA0, 0x83, 0x63, 0x00, 0x00, 0x8A, 0xB2, 0x01, 0xD6, 0xE1, 0x01, 0x00, 0x50, 0xE3 - .byte 0x09, 0x00, 0x00, 0x1A, 0x28, 0x00, 0x88, 0xE2, 0xB4, 0xF0, 0xFF, 0xEB, 0x00, 0x70, 0xA0, 0xE1 - .byte 0xFF, 0x00, 0x57, 0xE3, 0x02, 0x00, 0x00, 0x0A, 0x68, 0xF2, 0xFF, 0xEB, 0x40, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE3, 0x56, 0x00, 0x00, 0xEA, 0xB8, 0x78, 0xD5, 0xE1 - .byte 0x58, 0x01, 0x9F, 0xE5, 0xB2, 0x71, 0xC8, 0xE1, 0x00, 0x00, 0x90, 0xE5, 0xEC, 0x03, 0x90, 0xE5 - .byte 0xB4, 0x01, 0xC8, 0xE1, 0xBE, 0x01, 0xD8, 0xE1, 0xFF, 0x00, 0x10, 0xE3, 0xB0, 0x02, 0xC8, 0x11 - .byte 0x00, 0x00, 0xA0, 0x13, 0xBE, 0x01, 0xC8, 0x11, 0x02, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x86, 0xF2, 0xFF, 0xEB, 0xB0, 0x02, 0xC8, 0xE1, 0xB6, 0x01, 0xD8, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x1A, 0xBA, 0x18, 0xD5, 0xE1, 0x1C, 0x00, 0xA0, 0xE3, 0x40, 0x10, 0x81, 0xE3 - .byte 0x01, 0x19, 0xC1, 0xE3, 0xB4, 0x12, 0xC8, 0xE1, 0xB2, 0x02, 0xC8, 0xE1, 0x08, 0x00, 0x00, 0xEA - .byte 0xBA, 0x08, 0xD5, 0xE1, 0xB4, 0x02, 0xC8, 0xE1, 0xB8, 0x01, 0xD6, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0xB6, 0x01, 0xD8, 0xE1, 0x1C, 0x00, 0x80, 0x02, 0xB2, 0x02, 0xC8, 0x01, 0x24, 0x00, 0x80, 0x12 - .byte 0xB2, 0x02, 0xC8, 0x11, 0xB2, 0x01, 0xD6, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x50, 0x13, 0x1F, 0x00, 0x00, 0x0A, 0x2C, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x88, 0xE2, 0x2E, 0x10, 0x88, 0xE2, 0x78, 0xEA, 0xFF, 0xEB, 0x2E, 0x00, 0x88, 0xE2 - .byte 0x64, 0x10, 0x85, 0xE2, 0x75, 0xEA, 0xFF, 0xEB, 0x00, 0x00, 0x57, 0xE3, 0x0D, 0x00, 0x00, 0x1A - .byte 0x08, 0x10, 0xA0, 0xE1, 0x02, 0x0C, 0x84, 0xE2, 0xF2, 0xF0, 0xFF, 0xEB, 0x8C, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x05, 0x0C, 0x80, 0xE2, 0xB2, 0x13, 0xD0, 0xE1, 0xBE, 0x22, 0xD0, 0xE1 - .byte 0x01, 0x00, 0xE0, 0xE1, 0x00, 0x00, 0x12, 0xE1, 0x19, 0x00, 0x00, 0x1A, 0x02, 0x00, 0xA0, 0xE3 - .byte 0xEB, 0x01, 0x00, 0xEB, 0x16, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x88, 0xE2, 0xFC, 0xF0, 0xFF, 0xEB - .byte 0x08, 0x20, 0xA0, 0xE1, 0x02, 0x0C, 0x84, 0xE2, 0x65, 0x1F, 0x84, 0xE2, 0x89, 0x24, 0x40, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0xE2, 0x01, 0x00, 0xEB, 0x0D, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x88, 0xE2 - .byte 0x28, 0x10, 0x88, 0xE2, 0x59, 0xEA, 0xFF, 0xEB, 0x28, 0x00, 0x88, 0xE2, 0x64, 0x10, 0x85, 0xE2 - .byte 0x56, 0xEA, 0xFF, 0xEB, 0x10, 0x00, 0x88, 0xE2, 0xED, 0xF0, 0xFF, 0xEB, 0x08, 0x20, 0xA0, 0xE1 - .byte 0x02, 0x0C, 0x84, 0xE2, 0x65, 0x1F, 0x84, 0xE2, 0x7A, 0x24, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xD3, 0x01, 0x00, 0xEB, 0x81, 0x00, 0xA0, 0xE3, 0xF0, 0x41, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0xE4, 0x05, 0x00, 0x00, 0xF8, 0x4F, 0x2D, 0xE9, 0x80, 0x21, 0x9F, 0xE5 - .byte 0x00, 0xA0, 0xA0, 0xE1, 0x00, 0x20, 0x92, 0xE5, 0x01, 0x90, 0xA0, 0xE3, 0x06, 0x0C, 0x82, 0xE2 - .byte 0xB0, 0x69, 0xD0, 0xE1, 0xC7, 0x4F, 0x82, 0xE2, 0xB2, 0x90, 0xC1, 0xE1, 0xB2, 0x11, 0xD4, 0xE1 - .byte 0x2C, 0x00, 0x82, 0xE2, 0x01, 0x5B, 0x80, 0xE2, 0x02, 0x00, 0x51, 0xE3, 0x0B, 0x00, 0xA0, 0x13 - .byte 0x51, 0x00, 0x00, 0x1A, 0xB0, 0x01, 0xDA, 0xE1, 0x81, 0x0F, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x83 - .byte 0x4D, 0x00, 0x00, 0x8A, 0xB0, 0x05, 0xD5, 0xE1, 0x50, 0xB0, 0x85, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x90, 0xA0, 0x03, 0x14, 0x00, 0xA0, 0xE3, 0x99, 0x00, 0x08, 0xE0, 0xB8, 0x10, 0x9B, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0x08, 0x00, 0xA0, 0x13, 0x43, 0x00, 0x00, 0x1A, 0x14, 0x11, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xD1, 0xE1, 0x02, 0x09, 0x11, 0xE3, 0x08, 0x00, 0xA0, 0x13, 0x3E, 0x00, 0x00, 0x1A - .byte 0x08, 0x10, 0x85, 0xE0, 0x58, 0x70, 0x91, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC7, 0xE1 - .byte 0xB4, 0x10, 0xC7, 0xE1, 0xB8, 0x00, 0xC7, 0xE1, 0xB0, 0x01, 0xDA, 0xE1, 0xE8, 0x30, 0x9F, 0xE5 - .byte 0x1E, 0x00, 0x80, 0xE2, 0xBA, 0x00, 0xC7, 0xE1, 0x46, 0x0F, 0xA0, 0xE3, 0xBC, 0x00, 0xC7, 0xE1 - .byte 0x10, 0x00, 0x87, 0xE2, 0xEA, 0x1F, 0x82, 0xE2, 0x08, 0x20, 0x84, 0xE2, 0x2B, 0xEA, 0xFF, 0xEB - .byte 0xB2, 0x01, 0xDA, 0xE1, 0xB4, 0x02, 0xC7, 0xE1, 0xB0, 0x01, 0xDA, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x59, 0xE3, 0x00, 0x00, 0x00, 0x1A, 0x42, 0xEA, 0xFF, 0xEB - .byte 0x14, 0x10, 0x9A, 0xE5, 0xB0, 0x21, 0xDA, 0xE1, 0x26, 0x00, 0x87, 0xE2, 0xF2, 0xEC, 0xFF, 0xEB - .byte 0x04, 0x00, 0x16, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0xB0, 0x01, 0xDA, 0xE1, 0x24, 0x10, 0x87, 0xE2 - .byte 0x02, 0x00, 0x80, 0xE2, 0x00, 0x00, 0x81, 0xE0, 0x03, 0x00, 0x80, 0xE2, 0x7C, 0x10, 0x9F, 0xE5 - .byte 0x03, 0x20, 0xC0, 0xE3, 0x78, 0x00, 0x9F, 0xE5, 0xB0, 0x10, 0xC2, 0xE1, 0xB2, 0x00, 0xC2, 0xE1 - .byte 0x01, 0x04, 0xA0, 0xE3, 0x0F, 0x30, 0x40, 0xEB, 0x02, 0x20, 0xA0, 0xE3, 0x64, 0x10, 0x9F, 0xE5 - .byte 0xB8, 0x20, 0x8B, 0xE1, 0x52, 0x50, 0x85, 0xE2, 0xB8, 0x20, 0x95, 0xE1, 0x01, 0x10, 0x07, 0xE0 - .byte 0x01, 0x30, 0x82, 0xE2, 0xA1, 0x20, 0xA0, 0xE1, 0x38, 0x10, 0x9F, 0xE5, 0xB8, 0x30, 0x85, 0xE1 - .byte 0x02, 0x29, 0x82, 0xE3, 0xB0, 0x20, 0xC1, 0xE1, 0xBE, 0x11, 0xD4, 0xE1, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x0C, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x00, 0x00, 0x00, 0x1A, 0xD9, 0xE9, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0xED, 0x2F, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0xF8, 0x4F, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x94, 0x80, 0x80, 0x04, 0xAC, 0x74, 0x7F, 0x02 - .byte 0xB8, 0xB6, 0x00, 0x00, 0x46, 0x1D, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xF8, 0x4F, 0x2D, 0xE9 - .byte 0x08, 0xD0, 0x4D, 0xE2, 0x7C, 0x24, 0x9F, 0xE5, 0x00, 0xA0, 0xA0, 0xE1, 0x00, 0x40, 0x92, 0xE5 - .byte 0x01, 0x90, 0xA0, 0xE3, 0x06, 0x0C, 0x84, 0xE2, 0xB0, 0x09, 0xD0, 0xE1, 0xC7, 0x7F, 0x84, 0xE2 - .byte 0xB2, 0x90, 0xC1, 0xE1, 0xB2, 0x11, 0xD7, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x2C, 0x00, 0x84, 0xE2 - .byte 0x01, 0x6B, 0x80, 0xE2, 0x01, 0x00, 0x51, 0xE3, 0x0B, 0x00, 0xA0, 0x13, 0x0E, 0x01, 0x00, 0x1A - .byte 0xBC, 0x03, 0xD6, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0xA0, 0x13, 0x0A, 0x01, 0x00, 0x1A - .byte 0xB0, 0x01, 0xDA, 0xE1, 0x44, 0x50, 0x96, 0xE5, 0x02, 0x09, 0x10, 0xE3, 0x0F, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0x10, 0xE3, 0xB4, 0x09, 0xD6, 0x01, 0xB4, 0x01, 0xCA, 0x01, 0xB0, 0x01, 0xDA, 0xE1 - .byte 0x04, 0x00, 0x10, 0xE3, 0xB0, 0x0A, 0xD6, 0x01, 0xB6, 0x01, 0xCA, 0x01, 0xB0, 0x01, 0xDA, 0xE1 - .byte 0x08, 0x00, 0x10, 0xE3, 0xB6, 0x09, 0xD6, 0x01, 0xB8, 0x01, 0xCA, 0x01, 0xB0, 0x01, 0xDA, 0xE1 - .byte 0x10, 0x00, 0x10, 0xE3, 0xBC, 0x09, 0xD6, 0x01, 0x00, 0x90, 0xA0, 0x03, 0xBC, 0x01, 0xCA, 0x01 - .byte 0xBC, 0x01, 0xDA, 0xE1, 0x81, 0x0F, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x83, 0xF2, 0x00, 0x00, 0x8A - .byte 0x02, 0x10, 0xA0, 0xE3, 0x00, 0x80, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0xEA, 0xB6, 0x01, 0xDA, 0xE1 - .byte 0x01, 0x00, 0x10, 0xE1, 0x81, 0x08, 0xA0, 0xE1, 0x01, 0x80, 0x88, 0x12, 0x20, 0x18, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0xF8, 0xFF, 0xFF, 0x1A, 0xB4, 0x01, 0xDA, 0xE1, 0xB4, 0x09, 0xC6, 0xE1 - .byte 0xB4, 0x01, 0xDA, 0xE1, 0x02, 0x09, 0x10, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x98, 0x13, 0x9F, 0xE5 - .byte 0xEA, 0x20, 0xA0, 0xE3, 0x01, 0x00, 0x00, 0xE0, 0xB4, 0x01, 0xCA, 0xE1, 0xB4, 0x01, 0xDA, 0xE1 - .byte 0xD0, 0x00, 0x40, 0xE2, 0x20, 0x01, 0xA0, 0xE1, 0xBE, 0x20, 0xC5, 0xE1, 0x01, 0x08, 0x50, 0xE3 - .byte 0x15, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE3, 0xD7, 0x00, 0x00, 0xEA, 0x04, 0x10, 0x9D, 0xE5 - .byte 0x02, 0x00, 0x11, 0xE3, 0x01, 0xB0, 0xA0, 0x13, 0x00, 0xB0, 0xA0, 0x03, 0x06, 0x30, 0x8B, 0xE2 - .byte 0x02, 0x10, 0xA0, 0x13, 0x06, 0x20, 0xA0, 0x13, 0x0B, 0x00, 0x80, 0xE0, 0x02, 0x3C, 0x83, 0xE2 - .byte 0x0B, 0x10, 0xA0, 0x01, 0x0B, 0x20, 0xA0, 0x01, 0x03, 0x00, 0x50, 0xE1, 0x05, 0x00, 0xA0, 0x83 - .byte 0xC9, 0x00, 0x00, 0x8A, 0x00, 0x31, 0xA0, 0xE1, 0xD0, 0x30, 0x83, 0xE2, 0x03, 0x10, 0x81, 0xE0 - .byte 0xB4, 0x11, 0xCA, 0xE1, 0xEA, 0x10, 0x82, 0xE2, 0xBE, 0x10, 0xC5, 0xE1, 0x09, 0x00, 0x80, 0xE2 - .byte 0x01, 0xB0, 0xC0, 0xE3, 0x9B, 0x08, 0x00, 0xE0, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x62, 0x0F, 0x84, 0xE2, 0x1A, 0x10, 0x81, 0xE2, 0x5F, 0x23, 0x40, 0xEB, 0x90, 0x00, 0x86, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0xA0, 0x03, 0xB7, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3 - .byte 0xBC, 0x03, 0xC6, 0xE1, 0xBE, 0x03, 0xD6, 0xE1, 0x00, 0x20, 0xA0, 0xE3, 0x01, 0x00, 0x80, 0xE2 - .byte 0xBE, 0x03, 0xC6, 0xE1, 0xB8, 0x01, 0xDA, 0xE1, 0x08, 0x30, 0x87, 0xE2, 0xB6, 0x09, 0xC6, 0xE1 - .byte 0xB6, 0x01, 0xDA, 0xE1, 0x14, 0xC0, 0xA0, 0xE3, 0xB8, 0x09, 0xC6, 0xE1, 0xBA, 0x29, 0xC6, 0xE1 - .byte 0xBC, 0x01, 0xDA, 0xE1, 0x8A, 0xEF, 0xA0, 0xE3, 0xBC, 0x09, 0xC6, 0xE1, 0xB2, 0x11, 0xDA, 0xE1 - .byte 0x10, 0x00, 0x85, 0xE2, 0xBE, 0x19, 0xC6, 0xE1, 0xB0, 0x20, 0xC5, 0xE1, 0xB6, 0x71, 0xDA, 0xE1 - .byte 0x98, 0x12, 0x9F, 0xE5, 0xB2, 0x70, 0xC5, 0xE1, 0xB4, 0x20, 0xC5, 0xE1, 0xB8, 0xC0, 0xC5, 0xE1 - .byte 0xBC, 0x71, 0xDA, 0xE1, 0xEA, 0x2F, 0x84, 0xE2, 0x22, 0x70, 0x87, 0xE2, 0xBA, 0x70, 0xC5, 0xE1 - .byte 0xBC, 0xE0, 0xC5, 0xE1, 0xB4, 0xC1, 0xDA, 0xE1, 0xBE, 0x70, 0xD5, 0xE1, 0x0A, 0xC0, 0x8C, 0xE2 - .byte 0x9C, 0x78, 0x27, 0xE0, 0xBE, 0x70, 0xC5, 0xE1, 0x68, 0xE9, 0xFF, 0xEB, 0xB0, 0x01, 0xDA, 0xE1 - .byte 0x02, 0x09, 0x10, 0xE3, 0xB2, 0x12, 0xD5, 0x11, 0x54, 0x02, 0x9F, 0x15, 0x00, 0x00, 0x51, 0x11 - .byte 0x4C, 0x02, 0x9F, 0x05, 0x01, 0x79, 0xA0, 0x13, 0xB2, 0x02, 0xC5, 0x01, 0xB4, 0x01, 0xDA, 0xE1 - .byte 0x00, 0x70, 0xA0, 0x03, 0xB4, 0x02, 0xC5, 0xE1, 0xB6, 0x01, 0xDA, 0xE1, 0x00, 0x00, 0x59, 0xE3 - .byte 0xB6, 0x02, 0xC5, 0xE1, 0xBE, 0x01, 0xDA, 0xE1, 0xB8, 0x02, 0xC5, 0xE1, 0xBC, 0x01, 0xDA, 0x11 - .byte 0x00, 0x00, 0x50, 0x13, 0x04, 0x00, 0x00, 0x0A, 0x73, 0xE9, 0xFF, 0xEB, 0x20, 0x10, 0x9A, 0xE5 - .byte 0xBC, 0x21, 0xDA, 0xE1, 0x2A, 0x00, 0x85, 0xE2, 0x23, 0xEC, 0xFF, 0xEB, 0x04, 0x00, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x10, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0xBC, 0x01, 0xDA, 0xE1, 0x28, 0x10, 0x85, 0xE2 - .byte 0x02, 0x00, 0x80, 0xE2, 0x00, 0x00, 0x81, 0xE0, 0x03, 0x00, 0x80, 0xE2, 0xE4, 0x11, 0x9F, 0xE5 - .byte 0x03, 0x20, 0xC0, 0xE3, 0xE0, 0x01, 0x9F, 0xE5, 0xB0, 0x10, 0xC2, 0xE1, 0xB2, 0x00, 0xC2, 0xE1 - .byte 0x90, 0x00, 0x96, 0xE5, 0x61, 0x1F, 0xA0, 0xE3, 0xBC, 0x10, 0xC0, 0xE1, 0x00, 0x00, 0x9D, 0xE5 - .byte 0x90, 0x10, 0x96, 0xE5, 0x0B, 0x00, 0x80, 0xE2, 0xA0, 0x00, 0xA0, 0xE1, 0xBE, 0x00, 0xC1, 0xE1 - .byte 0xB6, 0x11, 0xDA, 0xE1, 0x90, 0x00, 0x96, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0xB0, 0x11, 0xC0, 0xE1 - .byte 0x90, 0x00, 0x96, 0xE5, 0x98, 0x91, 0x9F, 0xE5, 0xB4, 0x81, 0xC0, 0xE1, 0x90, 0x00, 0x96, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0xB6, 0xB1, 0xC0, 0xE1, 0x90, 0x00, 0x96, 0xE5, 0x02, 0x20, 0xA0, 0xE3 - .byte 0xB8, 0x31, 0xC0, 0xE1, 0x90, 0x00, 0x96, 0xE5, 0x1A, 0x00, 0x80, 0xE2, 0x09, 0x00, 0x00, 0xEA - .byte 0xB6, 0xC1, 0xDA, 0xE1, 0x02, 0x00, 0x1C, 0xE1, 0xB0, 0x90, 0xC0, 0x11, 0xB2, 0x30, 0xC0, 0x11 - .byte 0xB6, 0x30, 0xC0, 0x11, 0xB4, 0x10, 0xC0, 0x11, 0x82, 0x28, 0xA0, 0xE1, 0x0B, 0x00, 0x80, 0x10 - .byte 0x22, 0x28, 0xA0, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3, 0xF3, 0xFF, 0xFF, 0x1A - .byte 0xB4, 0x01, 0xDA, 0xE1, 0x44, 0x21, 0x9F, 0xE5, 0xB0, 0x00, 0xC2, 0xE1, 0xBE, 0x00, 0xD5, 0xE1 - .byte 0xB4, 0x00, 0x42, 0xE1, 0xBA, 0x11, 0xDA, 0xE1, 0xB8, 0x01, 0xDA, 0xE1, 0x01, 0x98, 0x61, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0x19, 0x00, 0x00, 0x1A, 0xB4, 0x0C, 0x52, 0xE1, 0xBC, 0x11, 0xDA, 0xE1 - .byte 0x51, 0x0D, 0x50, 0xE3, 0xB4, 0x01, 0xDA, 0xE1, 0x22, 0x10, 0x81, 0xE2, 0x90, 0x08, 0x02, 0xE0 - .byte 0x01, 0x11, 0xA0, 0xE1, 0x60, 0x30, 0x81, 0xE2, 0xFA, 0x3F, 0x83, 0x12, 0xE2, 0x0F, 0x82, 0xE2 - .byte 0x00, 0x00, 0x83, 0xE0, 0x0A, 0x10, 0xA0, 0xE3, 0x32, 0x00, 0x80, 0xE2, 0x30, 0x5C, 0x40, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0xF9, 0x37, 0x40, 0xEB, 0xE4, 0x10, 0x9F, 0xE5, 0xE4, 0x20, 0x9F, 0xE5 - .byte 0x01, 0x10, 0x05, 0xE0, 0xA1, 0x10, 0xA0, 0xE1, 0x02, 0x19, 0x81, 0xE3, 0xB0, 0x40, 0xC2, 0xE1 - .byte 0x07, 0x10, 0x81, 0xE1, 0xB8, 0x18, 0x42, 0xE1, 0xF5, 0x37, 0x40, 0xEB, 0x25, 0x00, 0x00, 0xEA - .byte 0xEE, 0x37, 0x40, 0xEB, 0xC0, 0x10, 0x9F, 0xE5, 0x00, 0x80, 0xA0, 0xE1, 0xB0, 0x00, 0xD1, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x89, 0xE0, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x1B, 0x5C, 0x40, 0xEB, 0xB8, 0x31, 0xDA, 0xE1, 0x03, 0x10, 0x80, 0xE2, 0x03, 0x00, 0x51, 0xE1 - .byte 0x0C, 0x00, 0x00, 0x2A, 0x88, 0x10, 0x9F, 0xE5, 0x88, 0x20, 0x9F, 0xE5, 0x00, 0x30, 0x43, 0xE0 - .byte 0x01, 0x00, 0x05, 0xE0, 0x01, 0x10, 0x43, 0xE2, 0xA0, 0x00, 0xA0, 0xE1, 0x02, 0x09, 0x80, 0xE3 - .byte 0xB0, 0x10, 0xC2, 0xE1, 0x07, 0x10, 0x80, 0xE1, 0x08, 0x00, 0xA0, 0xE1, 0xB8, 0x18, 0x42, 0xE1 - .byte 0xDB, 0x37, 0x40, 0xEB, 0x0B, 0x00, 0x00, 0xEA, 0x08, 0x00, 0xA0, 0xE1, 0xD8, 0x37, 0x40, 0xEB - .byte 0x90, 0x10, 0x96, 0xE5, 0x62, 0x0F, 0x84, 0xE2, 0xD2, 0x22, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xBC, 0x03, 0xC6, 0xE1, 0xBE, 0x13, 0xD6, 0xE1, 0x05, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x41, 0xE2 - .byte 0xBE, 0x13, 0xC6, 0xE1, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2 - .byte 0xF8, 0x4F, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0xFF, 0x7F, 0x00, 0x00 - .byte 0xBC, 0x74, 0x7F, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0xB8, 0xB6, 0x00, 0x00, 0x46, 0x1D, 0x00, 0x00 - .byte 0xC4, 0x80, 0x80, 0x04, 0xFF, 0x3F, 0x00, 0x00, 0x18, 0x81, 0x80, 0x04, 0xF8, 0x80, 0x80, 0x04 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x08, 0x62, 0xE2, 0xBC, 0x00, 0xC4, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0xB2, 0x01, 0xC4, 0xE1 - .byte 0xB6, 0x11, 0xD4, 0xE1, 0x10, 0x00, 0x84, 0xE2, 0xB2, 0x12, 0xC4, 0xE1, 0x40, 0xEF, 0xFF, 0xEB - .byte 0x24, 0x00, 0x9F, 0xE5, 0x04, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0x90, 0xE5, 0x02, 0x0C, 0x81, 0xE2 - .byte 0x65, 0x1F, 0x81, 0xE2, 0xCB, 0x22, 0x40, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x24, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x10, 0x40, 0x2D, 0xE9, 0x01, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC1, 0xE1, 0x00, 0x40, 0xA0, 0xE1 - .byte 0xB0, 0x01, 0xD4, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x1B, 0x03, 0x00, 0xEB - .byte 0xB0, 0x01, 0xD4, 0xE1, 0x02, 0x00, 0x10, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x34, 0x03, 0x00, 0xEB - .byte 0xB0, 0x01, 0xD4, 0xE1, 0x04, 0x00, 0x10, 0xE3, 0x00, 0x00, 0x00, 0x0A, 0x45, 0x03, 0x00, 0xEB - .byte 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0201DD24 +sub_0201DD24: ; 0x0201DD24 + ldr r2, _0201DD78 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x20 + movhi r0, r3 + bxhi lr + ldrh r1, [r0, #0x10] + add r1, r1, #1 + strh r1, [r0, #0x10] + ldr r1, [r2] + ldrh r2, [r0, #0x10] + add r0, r1, #0x300 + ldrh r1, [r0, #0x20] + cmp r2, r1 + movhi r0, #5 + strlsh r2, [r0, #0x22] + movls r0, #0 + bx lr + .align 2, 0 +_0201DD78: .word 0x0380FFF4 + arm_func_end sub_0201DD24 + + arm_func_start sub_0201DD7C +sub_0201DD7C: ; 0x0201DD7C + stmdb sp!, {r3, lr} + ldr r2, _0201DDB8 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x10 + blo _0201DDAC + ldrh r0, [r0, #0x10] + bl sub_02018B90 + mov r3, r0 +_0201DDAC: + mov r0, r3 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DDB8: .word 0x0380FFF4 + arm_func_end sub_0201DD7C + + arm_func_start sub_0201DDBC +sub_0201DDBC: ; 0x0201DDBC + stmdb sp!, {r3, lr} + ldr r2, _0201DDF8 ; =0x0380FFF4 + mov r3, r0 + mov r0, #1 + strh r0, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x10 + blo _0201DDF0 + ldrh r0, [r3, #0x10] + ldrh r1, [r3, #0x12] + bl sub_02018BF8 +_0201DDF0: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DDF8: .word 0x0380FFF4 + arm_func_end sub_0201DDBC + + arm_func_start sub_0201DDFC +sub_0201DDFC: ; 0x0201DDFC + stmdb sp!, {r3, lr} + ldr r2, _0201DE38 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x10 + blo _0201DE2C + ldrh r0, [r0, #0x10] + bl sub_02018CCC + mov r3, r0 +_0201DE2C: + mov r0, r3 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DE38: .word 0x0380FFF4 + arm_func_end sub_0201DDFC + + arm_func_start sub_0201DE3C +sub_0201DE3C: ; 0x0201DE3C + stmdb sp!, {r3, lr} + ldr r2, _0201DE78 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0x10 + blo _0201DE6C + ldrh r0, [r0, #0x10] + bl sub_02018D0C + mov r3, r0 +_0201DE6C: + mov r0, r3 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DE78: .word 0x0380FFF4 + arm_func_end sub_0201DE3C + + arm_func_start sub_0201DE7C +sub_0201DE7C: ; 0x0201DE7C + ldr ip, _0201DE90 ; =sub_027E956C + mov r2, #1 + add r0, r0, #0x10 + strh r2, [r1, #2] + bx ip + .align 2, 0 +_0201DE90: .word sub_027E956C + arm_func_end sub_0201DE7C + + arm_func_start sub_0201DE94 +sub_0201DE94: ; 0x0201DE94 + mov r2, #1 + strh r2, [r1, #2] + mov r1, r0 + ldrh r0, [r1, #0x10] + ldr ip, _0201DEB0 ; =sub_027E95D0 + add r1, r1, #0x12 + bx ip + .align 2, 0 +_0201DEB0: .word sub_027E95D0 + arm_func_end sub_0201DE94 + + arm_func_start sub_0201DEB4 +sub_0201DEB4: ; 0x0201DEB4 + stmdb sp!, {r3, lr} + ldr r2, _0201DEEC ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x2e] + cmp r1, #1 + movne r0, #0xb + bne _0201DEE4 + ldrh r0, [r0, #0x10] + bl sub_02018ED0 +_0201DEE4: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DEEC: .word 0x0380FFF4 + arm_func_end sub_0201DEB4 + + arm_func_start sub_0201DEF0 +sub_0201DEF0: ; 0x0201DEF0 + stmdb sp!, {r3, lr} + ldr r2, _0201DF28 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x2e] + cmp r1, #1 + movne r0, #0xb + bne _0201DF20 + ldrh r0, [r0, #0x10] + bl sub_02018F28 +_0201DF20: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DF28: .word 0x0380FFF4 + arm_func_end sub_0201DEF0 + + arm_func_start sub_0201DF2C +sub_0201DF2C: ; 0x0201DF2C + stmdb sp!, {r3, lr} + ldr r2, _0201DF68 ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x2e] + cmp r1, #2 + cmpne r1, #3 + movne r0, #0xb + bne _0201DF60 + ldrh r0, [r0, #0x10] + bl sub_02018F6C +_0201DF60: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DF68: .word 0x0380FFF4 + arm_func_end sub_0201DF2C + + arm_func_start sub_0201DF6C +sub_0201DF6C: ; 0x0201DF6C + stmdb sp!, {r3, lr} + ldr r2, _0201DFCC ; =0x0380FFF4 + mov r3, #1 + strh r3, [r1, #2] + ldr r1, [r2] + mov r3, r0 + add r0, r1, #0x300 + ldrh r0, [r0, #0x2e] + cmp r0, #1 + movne r0, #0xb + bne _0201DFC4 + ldrh r0, [r3, #0x10] + ldrh r2, [r3, #0xe] + add r1, r0, #1 + add r1, r1, r1, lsr #31 + mov r1, r1, asr #1 + add r1, r1, #1 + cmp r2, r1 + movlt r0, #4 + blt _0201DFC4 + add r1, r3, #0x12 + bl sub_02019744 +_0201DFC4: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201DFCC: .word 0x0380FFF4 + arm_func_end sub_0201DF6C + + arm_func_start sub_0201DFD0 +sub_0201DFD0: ; 0x0201DFD0 + stmdb sp!, {r4, lr} + ldr r0, _0201E104 ; =0x0380FFF4 + mov r4, r1 + mov r1, #0x21 + strh r1, [r4, #2] + ldr r1, [r0] + add r0, r4, #6 + add r1, r1, #0x324 + bl sub_020198D0 + ldr r0, _0201E104 ; =0x0380FFF4 + add r1, r4, #0x22 + ldr r3, [r0] + mov r2, #0x20 + add r3, r3, #0x300 + ldrh r3, [r3, #0x2a] + strh r3, [r4, #0xc] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x2c] + strh r3, [r4, #0xe] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0xbe] + strh r3, [r4, #0x10] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x2e] + strh r3, [r4, #0x12] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x30] + strh r3, [r4, #0x14] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x34] + strh r3, [r4, #0x16] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x36] + strh r3, [r4, #0x18] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x3a] + mov r3, r3, lsl #0x1f + mov r3, r3, lsr #0x1f + strh r3, [r4, #0x1a] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x3a] + mov r3, r3, lsl #0x1e + mov r3, r3, lsr #0x1f + strh r3, [r4, #0x1c] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0xc2] + strh r3, [r4, #0x1e] + ldr r3, [r0] + add r3, r3, #0x300 + ldrh r3, [r3, #0x3c] + strh r3, [r4, #0x20] + ldr r0, [r0] + add r0, r0, #0x384 + bl sub_0302D78C + ldr r2, _0201E104 ; =0x0380FFF4 + mov r0, #0 + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x3a] + mov r1, r1, lsl #0x1d + mov r1, r1, lsr #0x1f + strh r1, [r4, #0x42] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x32] + strh r1, [r4, #0x44] + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201E104: .word 0x0380FFF4 + arm_func_end sub_0201DFD0 + + arm_func_start sub_0201E108 +sub_0201E108: ; 0x0201E108 + stmdb sp!, {r3, lr} + ldr r0, _0201E134 ; =0x0380FFF4 + mov r2, #4 + strh r2, [r1, #2] + ldr r2, [r0] + add r0, r1, #6 + add r1, r2, #0x324 + bl sub_020198D0 + mov r0, #0 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E134: .word 0x0380FFF4 + arm_func_end sub_0201E108 + + arm_func_start sub_0201E138 +sub_0201E138: ; 0x0201E138 + ldr r0, _0201E15C ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x2a] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E15C: .word 0x0380FFF4 + arm_func_end sub_0201E138 + + arm_func_start sub_0201E160 +sub_0201E160: ; 0x0201E160 + ldr r3, _0201E194 ; =0x0380FFF4 + mov r0, #3 + strh r0, [r1, #2] + ldr r2, [r3] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x2c] + strh r2, [r1, #6] + ldr r2, [r3] + add r2, r2, #0x300 + ldrh r2, [r2, #0xbe] + strh r2, [r1, #8] + bx lr + .align 2, 0 +_0201E194: .word 0x0380FFF4 + arm_func_end sub_0201E160 + + arm_func_start sub_0201E198 +sub_0201E198: ; 0x0201E198 + ldr r0, _0201E1BC ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x2e] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E1BC: .word 0x0380FFF4 + arm_func_end sub_0201E198 + + arm_func_start sub_0201E1C0 +sub_0201E1C0: ; 0x0201E1C0 + ldr r0, _0201E1E4 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x30] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E1E4: .word 0x0380FFF4 + arm_func_end sub_0201E1C0 + + arm_func_start sub_0201E1E8 +sub_0201E1E8: ; 0x0201E1E8 + ldr r0, _0201E20C ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x34] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E20C: .word 0x0380FFF4 + arm_func_end sub_0201E1E8 + + arm_func_start sub_0201E210 +sub_0201E210: ; 0x0201E210 + ldr r0, _0201E234 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x36] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E234: .word 0x0380FFF4 + arm_func_end sub_0201E210 + + arm_func_start sub_0201E238 +sub_0201E238: ; 0x0201E238 + ldr r0, _0201E264 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x3a] + mov r2, r2, lsl #0x1f + mov r2, r2, lsr #0x1f + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E264: .word 0x0380FFF4 + arm_func_end sub_0201E238 + + arm_func_start sub_0201E268 +sub_0201E268: ; 0x0201E268 + ldr r0, _0201E294 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x3a] + mov r2, r2, lsl #0x1e + mov r2, r2, lsr #0x1f + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E294: .word 0x0380FFF4 + arm_func_end sub_0201E268 + + arm_func_start sub_0201E298 +sub_0201E298: ; 0x0201E298 + ldr r0, _0201E2BC ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0xc2] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E2BC: .word 0x0380FFF4 + arm_func_end sub_0201E298 + + arm_func_start sub_0201E2C0 +sub_0201E2C0: ; 0x0201E2C0 + ldr r0, _0201E2E4 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x3c] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E2E4: .word 0x0380FFF4 + arm_func_end sub_0201E2C0 + + arm_func_start sub_0201E2E8 +sub_0201E2E8: ; 0x0201E2E8 + ldr r0, _0201E320 ; =0x0380FFF4 + mov r2, #0x11 + strh r2, [r1, #2] + ldr r0, [r0] + add r3, r1, #6 + add r2, r0, #0x384 + mov r1, #0 +_0201E304: + ldrh r0, [r2], #2 + add r1, r1, #1 + cmp r1, #0x10 + strh r0, [r3], #2 + blo _0201E304 + mov r0, #0 + bx lr + .align 2, 0 +_0201E320: .word 0x0380FFF4 + arm_func_end sub_0201E2E8 + + arm_func_start sub_0201E324 +sub_0201E324: ; 0x0201E324 + ldr r0, _0201E350 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x3a] + mov r2, r2, lsl #0x1d + mov r2, r2, lsr #0x1f + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E350: .word 0x0380FFF4 + arm_func_end sub_0201E324 + + arm_func_start sub_0201E354 +sub_0201E354: ; 0x0201E354 + ldr r0, _0201E378 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x32] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E378: .word 0x0380FFF4 + arm_func_end sub_0201E354 + + arm_func_start sub_0201E37C +sub_0201E37C: ; 0x0201E37C + stmdb sp!, {r4, lr} + mov r4, r1 + mov r0, #4 + strh r0, [r4, #2] + mov r0, #0x13 + bl sub_02019DB4 + strh r0, [r4, #6] + mov r0, #0x35 + bl sub_02019DB4 + strh r0, [r4, #8] + mov r0, #0x2e + bl sub_02019DB4 + strh r0, [r4, #0xa] + mov r0, #0 + ldmia sp!, {r4, lr} + bx lr + arm_func_end sub_0201E37C + + arm_func_start sub_0201E3BC +sub_0201E3BC: ; 0x0201E3BC + ldr r0, _0201E3E4 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x22] + sub r2, r2, #1 + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E3E4: .word 0x0380FFF4 + arm_func_end sub_0201E3BC + + arm_func_start sub_0201E3E8 +sub_0201E3E8: ; 0x0201E3E8 + ldr r0, _0201E420 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r2, [r0, #0x4c] + cmp r2, #0x10 + movlo r0, #1 + ldrhsh r2, [r0, #0x3a] + movhs r0, #0 + movhs r2, r2, lsl #0x1c + movhs r2, r2, lsr #0x1f + strhsh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E420: .word 0x0380FFF4 + arm_func_end sub_0201E3E8 + + arm_func_start sub_0201E424 +sub_0201E424: ; 0x0201E424 + ldr r3, _0201E480 ; =0x0380FFF4 + mov r0, #3 + strh r0, [r1, #2] + ldr r0, [r3] + add r0, r0, #0x300 + ldrh r2, [r0, #0x4c] + cmp r2, #0x10 + movlo r0, #1 + bxlo lr + ldrh r2, [r0, #0x3a] + mov r0, #0 + mov r2, r2, lsl #0x1b + mov r2, r2, lsr #0x1f + strh r2, [r1, #6] + ldr r2, [r3] + add r2, r2, #0x300 + ldrh r3, [r2, #0x3a] + mov r2, r3, lsl #0x1c + mov r3, r3, lsl #0x1a + mov r2, r2, lsr #0x1f + eor r2, r2, r3, lsr #31 + strh r2, [r1, #8] + bx lr + .align 2, 0 +_0201E480: .word 0x0380FFF4 + arm_func_end sub_0201E424 + + arm_func_start sub_0201E484 +sub_0201E484: ; 0x0201E484 + ldr r0, _0201E4BC ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r2, [r0, #0x4c] + cmp r2, #0x10 + movlo r0, #1 + ldrhsh r2, [r0, #0x3a] + movhs r0, #0 + movhs r2, r2, lsl #0x19 + movhs r2, r2, lsr #0x1f + strhsh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E4BC: .word 0x0380FFF4 + arm_func_end sub_0201E484 + + arm_func_start sub_0201E4C0 +sub_0201E4C0: ; 0x0201E4C0 + ldr r0, _0201E4F8 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r2, [r0, #0x4c] + cmp r2, #0x10 + movlo r0, #1 + ldrhsh r2, [r0, #0x3a] + movhs r0, #0 + movhs r2, r2, lsl #0x18 + movhs r2, r2, lsr #0x1f + strhsh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E4F8: .word 0x0380FFF4 + arm_func_end sub_0201E4C0 + + arm_func_start sub_0201E4FC +sub_0201E4FC: ; 0x0201E4FC + stmdb sp!, {r3, lr} + ldr r0, _0201E528 ; =0x0380FFF4 + mov r2, #4 + strh r2, [r1, #2] + ldr r2, [r0] + add r0, r1, #6 + add r1, r2, #0x3a8 + bl sub_020198D0 + mov r0, #0 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E528: .word 0x0380FFF4 + arm_func_end sub_0201E4FC + + arm_func_start sub_0201E52C +sub_0201E52C: ; 0x0201E52C + ldr r2, _0201E574 ; =0x0380FFF4 + mov r0, #0x12 + strh r0, [r1, #2] + ldr r0, [r2] + add ip, r1, #8 + add r0, r0, #0x300 + ldrh r0, [r0, #0x62] + mov r3, #0 + strh r0, [r1, #6] + ldr r0, [r2] + add r1, r0, #0x364 +_0201E558: + ldrh r0, [r1], #2 + add r3, r3, #2 + cmp r3, #0x20 + strh r0, [ip], #2 + blo _0201E558 + mov r0, #0 + bx lr + .align 2, 0 +_0201E574: .word 0x0380FFF4 + arm_func_end sub_0201E52C + + arm_func_start sub_0201E578 +sub_0201E578: ; 0x0201E578 + ldr r0, _0201E59C ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0xb2] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E59C: .word 0x0380FFF4 + arm_func_end sub_0201E578 + + arm_func_start sub_0201E5A0 +sub_0201E5A0: ; 0x0201E5A0 + ldr r0, _0201E5C4 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0xb8] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E5C4: .word 0x0380FFF4 + arm_func_end sub_0201E5A0 + + arm_func_start sub_0201E5C8 +sub_0201E5C8: ; 0x0201E5C8 + ldr r0, _0201E5EC ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0xb4] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E5EC: .word 0x0380FFF4 + arm_func_end sub_0201E5C8 + + arm_func_start sub_0201E5F0 +sub_0201E5F0: ; 0x0201E5F0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, r1 + ldrh r0, [r4, #2] + ldr r1, _0201E6C4 ; =0x0380FFF4 + cmp r0, #1 + ldrhi r0, _0201E6C4 ; =0x0380FFF4 + ldrhi r0, [r0] + addhi r0, r0, #0x300 + ldrhih r0, [r0, #0xe4] + strhih r0, [r4, #6] + ldrh r0, [r4, #2] + ldr r3, [r1] + sub r1, r0, #2 + add r0, r3, #0x300 + ldrh r2, [r0, #0xe4] + cmp r2, r1, lsl #1 + movgt r0, #4 + bgt _0201E6BC + ldrh r2, [r4, #6] + cmp r2, #0 + beq _0201E6A0 + ldrh r0, [r0, #0xe6] + tst r0, #1 + ldr r0, [r3, #0x3e0] + beq _0201E694 + add r6, r4, #8 + add r5, r0, #1 + mov r7, #0 + b _0201E684 +_0201E664: + mov r0, r5 + bl sub_0201A540 + mov r1, r0 + mov r0, r6 + bl sub_0201A514 + add r6, r6, #1 + add r5, r5, #1 + add r7, r7, #1 +_0201E684: + ldrh r0, [r4, #6] + cmp r7, r0 + blo _0201E664 + b _0201E6A0 +_0201E694: + add r1, r4, #8 + add r2, r2, #1 + bl sub_0302D78C +_0201E6A0: + ldrh r1, [r4, #6] + mov r0, #0 + add r1, r1, #1 + add r1, r1, r1, lsr #31 + mov r1, r1, asr #1 + add r1, r1, #2 + strh r1, [r4, #2] +_0201E6BC: + ldmia sp!, {r3, r4, r5, r6, r7, lr} + bx lr + .align 2, 0 +_0201E6C4: .word 0x0380FFF4 + arm_func_end sub_0201E5F0 + + arm_func_start sub_0201E6C8 +sub_0201E6C8: ; 0x0201E6C8 + stmdb sp!, {r3, lr} + ldr r2, _0201E704 ; =0x0380FFF4 + mov r0, #1 + strh r0, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r1, [r1, #0x4c] + cmp r1, #0 + cmpne r1, #0x10 + bne _0201E6FC + mov r0, #0 + bl sub_03028A28 + mov r0, #0 +_0201E6FC: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E704: .word 0x0380FFF4 + arm_func_end sub_0201E6C8 + + arm_func_start sub_0201E708 +sub_0201E708: ; 0x0201E708 + stmdb sp!, {r3, lr} + ldr r2, _0201E760 ; =0x0380FFF4 + mov r0, #1 + strh r0, [r1, #2] + ldr r1, [r2] + add r1, r1, #0x300 + ldrh r2, [r1, #0x4c] + cmp r2, #0x20 + bhi _0201E758 + ldrh r1, [r1, #0x56] + cmp r1, #0 + bne _0201E758 + mov r0, #0 + bl sub_0202451C + cmp r0, #0 + movne r0, #0xe + bne _0201E758 + mov r0, #0x10 + bl sub_03028A28 + mov r0, #0 +_0201E758: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E760: .word 0x0380FFF4 + arm_func_end sub_0201E708 + + arm_func_start sub_0201E764 +sub_0201E764: ; 0x0201E764 + stmdb sp!, {r3, lr} + ldr r0, _0201E7B4 ; =0x0380FFF4 + mov r2, #1 + strh r2, [r1, #2] + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r1, [r0, #0x4c] + cmp r1, #0x10 + beq _0201E798 + cmp r1, #0x20 + ldreqh r0, [r0, #0x56] + cmpeq r0, #0 + bne _0201E7A8 +_0201E798: + mov r0, #0x20 + bl sub_03028A28 + mov r0, #0 + b _0201E7AC +_0201E7A8: + mov r0, #1 +_0201E7AC: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E7B4: .word 0x0380FFF4 + arm_func_end sub_0201E764 + + arm_func_start sub_0201E7B8 +sub_0201E7B8: ; 0x0201E7B8 + stmdb sp!, {r3, lr} + ldr r0, _0201E7F0 ; =0x0380FFF4 + mov r2, #1 + strh r2, [r1, #2] + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r0, [r0, #0x4c] + cmp r0, #0x20 + blo _0201E7E0 + bl sub_03028988 +_0201E7E0: + bl sub_02018184 + mov r0, #0 + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E7F0: .word 0x0380FFF4 + arm_func_end sub_0201E7B8 + + arm_func_start sub_0201E7F4 +sub_0201E7F4: ; 0x0201E7F4 + stmdb sp!, {r3, lr} + ldr r0, _0201E828 ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r0, [r0, #0x4c] + cmp r0, #0 + mov r0, #1 + beq _0201E820 + strh r0, [r1, #2] + bl sub_0201996C + mov r0, #0 +_0201E820: + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0201E828: .word 0x0380FFF4 + arm_func_end sub_0201E7F4 + + arm_func_start sub_0201E82C +sub_0201E82C: ; 0x0201E82C + stmdb sp!, {r4, lr} + ldr r0, _0201E8C0 ; =0x027F7868 + mov r4, r1 + mov r3, #9 + add r1, r4, #6 + mov r2, #8 + strh r3, [r4, #2] + bl sub_0302D78C + ldr r1, _0201E8C4 ; =0x04808000 + ldr r0, _0201E8C8 ; =0x0380FFF4 + ldrh r1, [r1] + strh r1, [r4, #0xe] + ldr r0, [r0] + add r0, r0, #0x600 + ldrh r0, [r0, #0x90] + tst r0, #0x8000 + moveq r1, #0x6d + ldreq r0, _0201E8CC ; =0x0000933D + streqh r1, [r4, #0x10] + beq _0201E88C + mov r0, #0 + bl sub_02019DB4 + strh r0, [r4, #0x10] + bl sub_02019E30 +_0201E88C: + strh r0, [r4, #0x12] + ldr r0, _0201E8C8 ; =0x0380FFF4 + ldr r1, [r0] + add r0, r1, #0x600 + ldrh r0, [r0, #0x90] + tst r0, #0x4000 + addne r0, r1, #0x500 + ldrneh r0, [r0, #0xf8] + moveq r0, #2 + strh r0, [r4, #0x14] + mov r0, #0 + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201E8C0: .word 0x027F7868 +_0201E8C4: .word 0x04808000 +_0201E8C8: .word 0x0380FFF4 +_0201E8CC: .word 0x0000933D + arm_func_end sub_0201E82C + + arm_func_start sub_0201E8D0 +sub_0201E8D0: ; 0x0201E8D0 + stmdb sp!, {r4, lr} + ldr r0, _0201E928 ; =0x0380FFF4 + mov r4, r1 + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r0, [r0, #0x4c] + cmp r0, #0 + moveq r0, #1 + beq _0201E920 + mov r0, #0x5c + strh r0, [r4, #2] + bl sub_0201999C + ldr r0, _0201E928 ; =0x0380FFF4 + add r1, r4, #8 + ldr r0, [r0] + mov r2, #0xb4 + add r0, r0, #0x13c + add r0, r0, #0x400 + bl sub_0302D7DC + mov r0, #0 +_0201E920: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201E928: .word 0x0380FFF4 + arm_func_end sub_0201E8D0 + + arm_func_start sub_0201E92C +sub_0201E92C: ; 0x0201E92C + ldr r0, _0201E950 ; =0x0380FFF4 + mov r2, #2 + strh r2, [r1, #2] + ldr r2, [r0] + mov r0, #0 + add r2, r2, #0x300 + ldrh r2, [r2, #0x4c] + strh r2, [r1, #6] + bx lr + .align 2, 0 +_0201E950: .word 0x0380FFF4 + arm_func_end sub_0201E92C + + arm_func_start sub_0201E954 +sub_0201E954: ; 0x0201E954 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr r2, _0201EC7C ; =0x0380FFF4 + mov r5, r0 + ldr r2, [r2] + mov r0, #1 + strh r0, [r1, #2] + add r4, r2, #0x344 + ldrh r1, [r4, #8] + and r1, r1, #0xf0 + cmp r1, #0x10 + bne _0201EC70 + ldrh r0, [r5, #0x10] + cmp r0, #1 + movhi r0, #5 + bhi _0201EC70 + ldrh r0, [r5, #0x14] + cmp r0, #0xa + cmpne r0, #0x14 + movne r0, #5 + bne _0201EC70 + ldrh r0, [r5, #0x12] + cmp r0, #4 + movhi r0, #5 + bhi _0201EC70 + mov r0, #0 + bl sub_0202451C + cmp r0, #0 + movne r0, #0xe + bne _0201EC70 + ldrh r0, [r5, #0x10] + cmp r0, #0 + beq _0201EBE4 + cmp r0, #1 + bne _0201EC6C + ldrh r0, [r4, #8] + cmp r0, #0x10 + movne r0, #1 + bne _0201EC70 + mov r0, #0 + str r0, [sp] + add r2, sp, #0 + mov r0, #0x65 + mov r1, #1 + bl sub_02024660 + ldr r6, [sp] + mov r0, #1 + bl sub_02019DB4 + cmp r6, r0 + beq _0201EA30 + mov r1, r6 + mov r0, #1 + bl sub_02019DE0 + ldr r0, _0201EC80 ; =0x00001388 + bl sub_0201A198 +_0201EA30: + ldrh r0, [r5, #0x12] + cmp r0, #4 + addls pc, pc, r0, lsl #2 + b _0201EC6C +_0201EA40: ; jump table + b _0201EA54 ; case 0 + b _0201EA54 ; case 1 + b _0201EA54 ; case 2 + b _0201EAEC ; case 3 + b _0201EAEC ; case 4 +_0201EA54: + mov r0, #0x11 + strh r0, [r4, #8] + ldrh r0, [r5, #0x16] + mov r1, #1 + bl sub_020190F0 + ldr r1, _0201EC84 ; =0x04808040 + mov r2, #0x8000 + ldr r0, _0201EC88 ; =0x000005DC + strh r2, [r1] + bl sub_0201A198 + ldrh r1, [r5, #0x14] + mov r0, #2 + strh r1, [r4, #0x16] + bl sub_02019DB4 + str r0, [sp] + ldrh r1, [r5, #0x12] + ldr r2, _0201EC8C ; =0x048081A4 + cmp r1, #1 + orrls r0, r0, #0x10 + strls r0, [sp] + ldrh r0, [r5, #0x14] + strh r0, [r2] + ldrh r0, [r5, #0x12] + cmp r0, #1 + strneh r0, [r2, #-2] + bne _0201EAD0 + ldr r1, [sp] + mov r0, #3 + orr r1, r1, #0x20 + str r1, [sp] + strh r0, [r2, #-2] +_0201EAD0: + ldr r1, [sp] + mov r0, #2 + bl sub_02019DE0 + ldr r1, _0201EC90 ; =0x00000823 + ldr r0, _0201EC94 ; =0x048081A0 + strh r1, [r0] + b _0201EC6C +_0201EAEC: + ldr r0, _0201EC7C ; =0x0380FFF4 + ldr r0, [r0] + add r4, r0, #0x344 + bl sub_030285D0 + bl sub_03028988 + mov r0, #6 + bl sub_02019DB4 + strh r0, [r4, #0xac] + ldrh r0, [r5, #0x12] + cmp r0, #4 + bne _0201EB24 + mov r0, #6 + mov r1, #0 + bl sub_02019DE0 +_0201EB24: + ldr r1, _0201EC98 ; =0x04804000 + mov r0, #0 + mov r2, #0xc + bl sub_0302D764 + ldr r1, _0201EC98 ; =0x04804000 + mov r0, #0x14 + strh r0, [r1, #8] + mov r0, #0x7d0 + strh r0, [r1, #0xa] + add r3, r1, #0xc + ldr r1, _0201EC9C ; =0x00005555 + ldr r0, _0201ECA0 ; =0x000007EC + mov r2, #0 +_0201EB58: + add r2, r2, #2 + cmp r2, r0 + strh r1, [r3], #2 + blo _0201EB58 + ldr r1, _0201EC98 ; =0x04804000 + mov r2, #8 + ldr r0, _0201ECA4 ; =0x04808194 + strh r2, [r1, #0xc] + mov r1, #6 + strh r1, [r0] + mov r0, #0x12 + strh r0, [r4, #8] + mov r1, #1 + strh r1, [r4, #0x18] + ldrh r0, [r5, #0x16] + bl sub_020190F0 + ldr r1, _0201EC84 ; =0x04808040 + mov r2, #0x8000 + ldr r0, _0201EC88 ; =0x000005DC + strh r2, [r1] + bl sub_0201A198 + mov r2, #1 + ldr r3, _0201ECA8 ; =0x04808012 + mov r0, #2 + strh r0, [r3] + strh r2, [r3, #-0xe] + ldr r1, _0201EC98 ; =0x04804000 + rsb r0, r2, #0x4000 + and r0, r1, r0 + mov r0, r0, lsl #0xf + mov r0, r0, lsr #0x10 + strh r2, [r3, #0x9c] + orr r0, r0, #0x8000 + strh r0, [r3, #0x8e] + b _0201EC6C +_0201EBE4: + ldrh r0, [r4, #8] + cmp r0, #0x11 + bne _0201EC2C + bl sub_0201A23C + ldr r1, _0201EC94 ; =0x048081A0 + mov r2, #0 + strh r2, [r1] + mov r0, #1 + strh r0, [r1, #2] + sub r0, r1, #0x160 + strh r2, [r0] + mov r0, #2 + bl sub_02019DB4 + bic r1, r0, #0x30 + mov r0, #2 + str r1, [sp] + bl sub_02019DE0 + b _0201EC64 +_0201EC2C: + cmp r0, #0x12 + bne _0201EC5C + ldr r1, _0201ECAC ; =0x04808004 + mov r0, #0 + strh r0, [r4, #0x18] +_0201EC40: + ldrh r0, [r1] + cmp r0, #0 + bne _0201EC40 + ldrh r1, [r4, #0xac] + mov r0, #6 + bl sub_02019DE0 + b _0201EC64 +_0201EC5C: + mov r0, #1 + b _0201EC70 +_0201EC64: + mov r0, #0x10 + strh r0, [r4, #8] +_0201EC6C: + mov r0, #0 +_0201EC70: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, lr} + bx lr + .align 2, 0 +_0201EC7C: .word 0x0380FFF4 +_0201EC80: .word 0x00001388 +_0201EC84: .word 0x04808040 +_0201EC88: .word 0x000005DC +_0201EC8C: .word 0x048081A4 +_0201EC90: .word 0x00000823 +_0201EC94: .word 0x048081A0 +_0201EC98: .word 0x04804000 +_0201EC9C: .word 0x00005555 +_0201ECA0: .word 0x000007EC +_0201ECA4: .word 0x04808194 +_0201ECA8: .word 0x04808012 +_0201ECAC: .word 0x04808004 + arm_func_end sub_0201E954 + + arm_func_start sub_0201ECB0 +sub_0201ECB0: ; 0x0201ECB0 + ldr r0, _0201ED1C ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #0x300 + ldrh r0, [r0, #0x5c] + cmp r0, #0 + beq _0201ECEC + ldr r0, _0201ED20 ; =0x04804000 + mov r2, #0 + strh r2, [r0] + ldr r1, _0201ED24 ; =0x048080A0 + strh r2, [r0, #4] + ldrh r0, [r1] + orr r0, r0, #0x8000 + strh r0, [r1] + bx lr +_0201ECEC: + ldr r2, _0201ED28 ; =0x048080AC + mov r3, #1 + strh r3, [r2] + mov r1, #0 + strh r1, [r2, #-0xa8] + mov r0, #2 + strh r0, [r2, #-0x9a] + rsb r0, r3, #0x10000 + strh r0, [r2, #-0x9c] + strh r1, [r2, #0xe8] + strh r1, [r2, #-0x6c] + bx lr + .align 2, 0 +_0201ED1C: .word 0x0380FFF4 +_0201ED20: .word 0x04804000 +_0201ED24: .word 0x048080A0 +_0201ED28: .word 0x048080AC + arm_func_end sub_0201ECB0 + + arm_func_start sub_0201ED2C +sub_0201ED2C: ; 0x0201ED2C + stmdb sp!, {r4, lr} + ldr r2, _0201EDD8 ; =0x0380FFF4 + mov r3, #1 + ldr r2, [r2] + strh r3, [r1, #2] + add r4, r2, #0x344 + ldrh r2, [r4, #8] + and r1, r2, #0xf0 + cmp r1, #0x10 + movne r0, r3 + bne _0201EDD0 + ldrh r1, [r0, #0x10] + cmp r1, #0 + beq _0201EDA4 + cmp r1, #1 + bne _0201EDCC + cmp r2, #0x10 + movne r0, r3 + bne _0201EDD0 + ldrh r0, [r0, #0x12] + mov r1, r3 + bl sub_020190F0 + mov r0, #0 + strh r0, [r4, #0xc] + bl sub_030285D0 + mov r0, #0x8000 + bl sub_020194D0 + mov r0, #0x11 + strh r0, [r4, #8] + b _0201EDCC +_0201EDA4: + cmp r2, #0x11 + bne _0201EDBC + mov r0, #0 + bl sub_020194D0 + bl sub_03028988 + b _0201EDC4 +_0201EDBC: + mov r0, r3 + b _0201EDD0 +_0201EDC4: + mov r0, #0x10 + strh r0, [r4, #8] +_0201EDCC: + mov r0, #0 +_0201EDD0: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201EDD8: .word 0x0380FFF4 + arm_func_end sub_0201ED2C + + arm_func_start sub_0201EDDC +sub_0201EDDC: ; 0x0201EDDC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r1, _0201EFA0 ; =0x0380FFF4 + mov r8, r0 + ldr r4, [r1] + ldrh r1, [r8, #0x16] + ldr r0, _0201EFA4 ; =0x000005E4 + add r5, r4, #0x344 + cmp r1, r0 + add r6, r4, #0x31c + movhi r0, #5 + bhi _0201EF98 + ldrh r0, [r6, #0x12] + cmp r0, #1 + bne _0201EE3C + add r0, r8, #0x28 + bl sub_0201B0F0 + mov r7, r0 + cmp r7, #0xff + beq _0201EE34 + bl sub_0201B7D0 + cmp r0, #0x40 + beq _0201EE40 +_0201EE34: + mov r0, #0xa + b _0201EF98 +_0201EE3C: + ldrh r7, [r5, #0x88] +_0201EE40: + ldr r0, _0201EFA0 ; =0x0380FFF4 + strh r7, [r8, #0x12] + ldr r0, [r0] + ldr r0, [r0, #0x3ec] + strh r0, [r8, #0x14] + ldrh r0, [r8, #0x1e] + tst r0, #0xff + strneh r0, [r8, #0x20] + movne r0, #0 + strneh r0, [r8, #0x1e] + bne _0201EE78 + mov r0, r7 + bl sub_0201B890 + strh r0, [r8, #0x20] +_0201EE78: + ldrh r0, [r8, #0x16] + cmp r0, #0 + bne _0201EEA0 + ldrh r1, [r5, #0x8a] + mov r0, #0x1c + orr r1, r1, #0x40 + bic r1, r1, #0x4000 + strh r1, [r8, #0x24] + strh r0, [r8, #0x22] + b _0201EEC4 +_0201EEA0: + ldrh r0, [r5, #0x8a] + strh r0, [r8, #0x24] + ldrh r0, [r6, #0x18] + cmp r0, #0 + ldrh r0, [r8, #0x16] + addeq r0, r0, #0x1c + streqh r0, [r8, #0x22] + addne r0, r0, #0x24 + strneh r0, [r8, #0x22] +_0201EEC4: + ldrh r0, [r6, #0x12] + cmp r0, #1 + beq _0201EEE0 + cmp r0, #2 + cmpne r0, #3 + beq _0201EF5C + b _0201EF94 +_0201EEE0: + add r0, r8, #0x34 + add r1, r8, #0x2e + bl sub_020198D0 + add r0, r8, #0x2e + add r1, r5, #0x64 + bl sub_020198D0 + cmp r7, #0 + bne _0201EF38 + mov r1, r8 + add r0, r4, #0x200 + bl sub_0201B2D8 + ldr r0, _0201EFA0 ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #0x500 + ldrh r1, [r0, #0x32] + ldrh r2, [r0, #0x2e] + mvn r0, r1 + tst r2, r0 + bne _0201EF94 + mov r0, #2 + bl sub_0201F6E4 + b _0201EF94 +_0201EF38: + add r0, r8, #0x10 + bl sub_0201B334 + mov r2, r8 + add r0, r4, #0x200 + add r1, r4, #0x194 + bl sub_03028178 + mov r0, #0 + bl sub_0201F6E4 + b _0201EF94 +_0201EF5C: + add r0, r8, #0x34 + add r1, r8, #0x28 + bl sub_020198D0 + add r0, r8, #0x28 + add r1, r5, #0x64 + bl sub_020198D0 + add r0, r8, #0x10 + bl sub_0201B334 + mov r2, r8 + add r0, r4, #0x200 + add r1, r4, #0x194 + bl sub_03028178 + mov r0, #0 + bl sub_0201F6E4 +_0201EF94: + mov r0, #0x81 +_0201EF98: + ldmia sp!, {r4, r5, r6, r7, r8, lr} + bx lr + .align 2, 0 +_0201EFA0: .word 0x0380FFF4 +_0201EFA4: .word 0x000005E4 + arm_func_end sub_0201EDDC + + arm_func_start sub_0201EFA8 +sub_0201EFA8: ; 0x0201EFA8 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr r2, _0201F134 ; =0x0380FFF4 + mov sl, r0 + ldr r2, [r2] + mov sb, #1 + add r0, r2, #0x600 + ldrh r6, [r0, #0x90] + add r4, r2, #0x31c + strh sb, [r1, #2] + ldrh r1, [r4, #0x12] + add r0, r2, #0x2c + add r5, r0, #0x400 + cmp r1, #2 + movne r0, #0xb + bne _0201F12C + ldrh r0, [sl, #0x10] + cmp r0, #0x204 + movhi r0, #5 + bhi _0201F12C + ldrh r0, [r5, #0x50] + add fp, r5, #0x50 + cmp r0, #0 + moveq sb, #0 + mov r0, #0x14 + mul r8, sb, r0 + ldrh r1, [fp, r8] + cmp r1, #0 + movne r0, #8 + bne _0201F12C + ldr r1, _0201F138 ; =0x04808094 + ldrh r1, [r1] + tst r1, #0x8000 + movne r0, #8 + bne _0201F12C + add r1, r5, r8 + ldr r7, [r1, #0x58] + mov r1, #0 + strh r1, [r7] + strh r1, [r7, #4] + strh r0, [r7, #8] + ldrh r0, [sl, #0x10] + ldr r3, _0201F13C ; =0x027F74AC + add r0, r0, #0x1e + strh r0, [r7, #0xa] + mov r0, #0x118 + strh r0, [r7, #0xc] + add r0, r7, #0x10 + add r1, r2, #0x3a8 + add r2, r4, #8 + bl sub_02019920 + ldrh r0, [sl, #0x12] + strh r0, [r7, #0x24] + ldrh r0, [sl, #0x10] + cmp r0, #0 + beq _0201F0A0 + cmp sb, #0 + bne _0201F090 + bl sub_0201999C +_0201F090: + ldr r1, [sl, #0x14] + ldrh r2, [sl, #0x10] + add r0, r7, #0x26 + bl sub_0201A46C +_0201F0A0: + tst r6, #4 + beq _0201F0D0 + ldrh r0, [sl, #0x10] + add r1, r7, #0x24 + add r0, r0, #2 + add r0, r1, r0 + add r0, r0, #3 + ldr r1, _0201F140 ; =0x0000B6B8 + bic r2, r0, #3 + ldr r0, _0201F144 ; =0x00001D46 + strh r1, [r2] + strh r0, [r2, #2] +_0201F0D0: + mov r0, #0x1000000 + bl sub_0302B118 + mov r2, #2 + ldr r1, _0201F148 ; =0x00003FFF + strh r2, [fp, r8] + add r5, r5, #0x52 + ldrh r2, [r5, r8] + and r1, r7, r1 + add r3, r2, #1 + mov r2, r1, lsr #1 + ldr r1, _0201F138 ; =0x04808094 + strh r3, [r5, r8] + orr r2, r2, #0x8000 + strh r2, [r1] + ldrh r1, [r4, #0x1e] + mov r4, r0 + mov r0, r1, lsl #0x18 + movs r0, r0, lsr #0x1f + bne _0201F120 + bl sub_02019888 +_0201F120: + mov r0, r4 + bl sub_0302B0E0 + mov r0, #0 +_0201F12C: + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + .align 2, 0 +_0201F134: .word 0x0380FFF4 +_0201F138: .word 0x04808094 +_0201F13C: .word 0x027F74AC +_0201F140: .word 0x0000B6B8 +_0201F144: .word 0x00001D46 +_0201F148: .word 0x00003FFF + arm_func_end sub_0201EFA8 + + arm_func_start sub_0201F14C +sub_0201F14C: ; 0x0201F14C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + ldr r2, _0201F5D8 ; =0x0380FFF4 + mov sl, r0 + ldr r4, [r2] + mov sb, #1 + add r0, r4, #0x600 + ldrh r0, [r0, #0x90] + add r7, r4, #0x31c + strh sb, [r1, #2] + ldrh r1, [r7, #0x12] + str r0, [sp, #4] + add r0, r4, #0x2c + add r6, r0, #0x400 + cmp r1, #1 + movne r0, #0xb + bne _0201F5CC + ldrh r0, [r6, #0x3c] + cmp r0, #0 + movne r0, #8 + bne _0201F5CC + ldrh r0, [sl, #0x10] + ldr r5, [r6, #0x44] + tst r0, #0x8000 + beq _0201F1F0 + tst r0, #2 + ldreqh r0, [r6, #0x94] + streqh r0, [sl, #0x14] + ldrh r0, [sl, #0x10] + tst r0, #4 + ldreqh r0, [r6, #0xa0] + streqh r0, [sl, #0x16] + ldrh r0, [sl, #0x10] + tst r0, #8 + ldreqh r0, [r6, #0x96] + streqh r0, [sl, #0x18] + ldrh r0, [sl, #0x10] + tst r0, #0x10 + ldreqh r0, [r6, #0x9c] + moveq sb, #0 + streqh r0, [sl, #0x1c] +_0201F1F0: + ldrh r0, [sl, #0x1c] + cmp r0, #0x204 + movhi r0, #5 + bhi _0201F5CC + mov r1, #2 + mov r8, #0 + b _0201F220 +_0201F20C: + ldrh r0, [sl, #0x16] + tst r0, r1 + mov r0, r1, lsl #0x11 + addne r8, r8, #1 + mov r1, r0, lsr #0x10 +_0201F220: + cmp r1, #0 + bne _0201F20C + ldrh r0, [sl, #0x14] + strh r0, [r6, #0x94] + ldrh r0, [sl, #0x14] + tst r0, #0x8000 + beq _0201F26C + ldr r1, _0201F5DC ; =0x00007FFF + mov r2, #0xea + and r0, r0, r1 + strh r0, [sl, #0x14] + ldrh r0, [sl, #0x14] + sub r0, r0, #0xd0 + mov r0, r0, lsr #2 + strh r2, [r5, #0xe] + cmp r0, #0x10000 + bls _0201F2BC + mov r0, #5 + b _0201F5CC +_0201F26C: + ldr r1, [sp, #4] + tst r1, #2 + movne fp, #1 + moveq fp, #0 + add r3, fp, #6 + movne r1, #2 + movne r2, #6 + add r0, r0, fp + add r3, r3, #0x200 + moveq r1, fp + moveq r2, fp + cmp r0, r3 + movhi r0, #5 + bhi _0201F5CC + mov r3, r0, lsl #2 + add r3, r3, #0xd0 + add r1, r1, r3 + strh r1, [sl, #0x14] + add r1, r2, #0xea + strh r1, [r5, #0xe] +_0201F2BC: + add r0, r0, #9 + bic fp, r0, #1 + mul r0, fp, r8 + str r0, [sp] + ldr r1, [sp] + add r0, r4, #0x188 + add r1, r1, #0x1a + bl sub_0302805C + str r0, [r6, #0x90] + cmp r0, #0 + moveq r0, #8 + beq _0201F5CC + mov r0, #1 + strh r0, [r6, #0x3c] + ldrh r0, [r6, #0x3e] + mov r2, #0 + add r0, r0, #1 + strh r0, [r6, #0x3e] + ldrh r0, [sl, #0x18] + add r3, r7, #8 + strh r0, [r6, #0x96] + ldrh r0, [sl, #0x16] + mov ip, #0x14 + strh r0, [r6, #0x98] + strh r2, [r6, #0x9a] + ldrh r0, [sl, #0x1c] + mov lr, #0x228 + strh r0, [r6, #0x9c] + ldrh r1, [sl, #0x12] + add r0, r5, #0x10 + strh r1, [r6, #0x9e] + strh r2, [r5] + ldrh r7, [sl, #0x16] + ldr r1, _0201F5E0 ; =0x027F74BC + strh r7, [r5, #2] + strh r2, [r5, #4] + strh ip, [r5, #8] + ldrh r7, [sl, #0x1c] + add r2, r4, #0x3a8 + add r7, r7, #0x22 + strh r7, [r5, #0xa] + strh lr, [r5, #0xc] + ldrh ip, [sl, #0x14] + ldrh r7, [r5, #0xe] + add ip, ip, #0xa + mla r7, ip, r8, r7 + strh r7, [r5, #0xe] + bl sub_02019920 + ldrh r0, [sl, #0x10] + tst r0, #0x8000 + ldrneh r1, [r5, #0x22] + ldrne r0, _0201F5E4 ; =0x0000FFFF + cmpne r1, r0 + ldreq r0, _0201F5E4 ; =0x0000FFFF + movne r7, #0x4000 + streqh r0, [r5, #0x22] + ldrh r0, [sl, #0x14] + moveq r7, #0 + strh r0, [r5, #0x24] + ldrh r0, [sl, #0x16] + cmp sb, #0 + strh r0, [r5, #0x26] + ldrh r0, [sl, #0x1e] + strh r0, [r5, #0x28] + ldrneh r0, [sl, #0x1c] + cmpne r0, #0 + beq _0201F3DC + bl sub_0201999C + ldr r1, [sl, #0x20] + ldrh r2, [sl, #0x1c] + add r0, r5, #0x2a + bl sub_0201A46C +_0201F3DC: + ldr r0, [sp, #4] + tst r0, #4 + beq _0201F410 + ldrh r0, [sl, #0x1c] + add r1, r5, #0x28 + add r0, r0, #2 + add r0, r1, r0 + add r0, r0, #3 + ldr r1, _0201F5E8 ; =0x0000B6B8 + bic r2, r0, #3 + ldr r0, _0201F5EC ; =0x00001D46 + strh r1, [r2] + strh r0, [r2, #2] +_0201F410: + ldr r0, [r6, #0x90] + mov r1, #0x184 + strh r1, [r0, #0xc] + ldr r0, [sp] + ldr r1, [r6, #0x90] + add r0, r0, #0xb + mov r0, r0, lsr #1 + strh r0, [r1, #0xe] + ldrh r1, [sl, #0x16] + ldr r0, [r6, #0x90] + mov r3, #0 + strh r1, [r0, #0x10] + ldr r0, [r6, #0x90] + ldr sb, _0201F5E4 ; =0x0000FFFF + strh r8, [r0, #0x14] + ldr r0, [r6, #0x90] + mov r1, #1 + strh fp, [r0, #0x16] + ldr r0, [r6, #0x90] + mov r2, #2 + strh r3, [r0, #0x18] + ldr r0, [r6, #0x90] + add r0, r0, #0x1a + b _0201F498 +_0201F470: + ldrh ip, [sl, #0x16] + tst ip, r2 + strneh sb, [r0] + strneh r3, [r0, #2] + strneh r3, [r0, #6] + strneh r1, [r0, #4] + mov r2, r2, lsl #0x11 + addne r0, r0, fp + mov r2, r2, lsr #0x10 + add r1, r1, #1 +_0201F498: + cmp r2, #0 + bne _0201F470 + ldrh r0, [sl, #0x14] + ldr r2, _0201F5F0 ; =0x048080C4 + strh r0, [r2] + ldrh r0, [r5, #0xe] + strh r0, [r2, #-4] + ldrh r1, [sl, #0x1a] + ldrh r0, [sl, #0x18] + rsb sb, r1, #0x10000 + cmp r0, #0 + bne _0201F530 + ldrh r0, [r2, #-0xc4] + ldrh r1, [sl, #0x1c] + cmp r0, #0x1440 + ldrh r0, [sl, #0x14] + add r1, r1, #0x22 + mul r2, r0, r8 + mov r1, r1, lsl #2 + add r3, r1, #0x60 + addne r3, r3, #0x3e8 + add r0, r2, #0x388 + add r0, r3, r0 + mov r1, #0xa + add r0, r0, #0x32 + bl sub_030365C4 + mov r4, r0 + bl sub_0302D4F0 + ldr r1, _0201F5F4 ; =0x00003FFF + ldr r2, _0201F5F8 ; =0x04808118 + and r1, r5, r1 + mov r1, r1, lsr #1 + orr r1, r1, #0x8000 + strh r4, [r2] + orr r1, r1, r7 + strh r1, [r2, #-0x88] + bl sub_0302D504 + b _0201F5C8 +_0201F530: + bl sub_0302D4F0 + ldr r1, _0201F5FC ; =0x048080F8 + mov r8, r0 + ldrh r0, [r1] + mov r1, #0xa + add r0, sb, r0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_030365C4 + ldrh r3, [sl, #0x18] + add r1, r0, #3 + cmp r1, r3 + bhs _0201F598 + ldr r1, _0201F5F4 ; =0x00003FFF + ldr r2, _0201F5F8 ; =0x04808118 + sub r3, r3, r0 + and r0, r5, r1 + sub r1, r3, #1 + mov r0, r0, lsr #1 + orr r0, r0, #0x8000 + strh r1, [r2] + orr r1, r0, r7 + mov r0, r8 + strh r1, [r2, #-0x88] + bl sub_0302D504 + b _0201F5C8 +_0201F598: + mov r0, r8 + bl sub_0302D504 + ldr r1, [r6, #0x90] + add r0, r4, #0x188 + bl sub_030280F8 + mov r0, #0 + strh r0, [r6, #0x3c] + ldrh r1, [r6, #0x3e] + mov r0, #5 + sub r1, r1, #1 + strh r1, [r6, #0x3e] + b _0201F5CC +_0201F5C8: + mov r0, #0 +_0201F5CC: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + .align 2, 0 +_0201F5D8: .word 0x0380FFF4 +_0201F5DC: .word 0x00007FFF +_0201F5E0: .word 0x027F74BC +_0201F5E4: .word 0x0000FFFF +_0201F5E8: .word 0x0000B6B8 +_0201F5EC: .word 0x00001D46 +_0201F5F0: .word 0x048080C4 +_0201F5F4: .word 0x00003FFF +_0201F5F8: .word 0x04808118 +_0201F5FC: .word 0x048080F8 + arm_func_end sub_0201F14C + + arm_func_start sub_0201F600 +sub_0201F600: ; 0x0201F600 + stmdb sp!, {r4, lr} + mov r2, #1 + strh r2, [r1, #2] + mov r4, r0 + rsb r0, r2, #0x10000 + strh r0, [r4, #0xc] + mov r0, #0 + strh r0, [r4, #0x12] + ldrh r1, [r4, #0x16] + add r0, r4, #0x10 + strh r1, [r4, #0x22] + bl sub_0201B334 + ldr r0, _0201F65C ; =0x0380FFF4 + mov r2, r4 + ldr r1, [r0] + add r0, r1, #0x200 + add r1, r1, #0x194 + bl sub_03028178 + mov r0, #0 + bl sub_0201F6E4 + mov r0, #0 + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0201F65C: .word 0x0380FFF4 + arm_func_end sub_0201F600 + + arm_func_start sub_0201F660 +sub_0201F660: ; 0x0201F660 + stmdb sp!, {r4, lr} + mov r2, #1 + strh r2, [r1, #2] + mov r4, r0 + ldrh r0, [r4, #0x10] + tst r0, #1 + beq _0201F680 + bl sub_020202F0 +_0201F680: + ldrh r0, [r4, #0x10] + tst r0, #2 + beq _0201F690 + bl sub_02020364 +_0201F690: + ldrh r0, [r4, #0x10] + tst r0, #4 + beq _0201F6A0 + bl sub_020203B8 +_0201F6A0: + mov r0, #0 + ldmia sp!, {r4, lr} + bx lr + arm_func_end sub_0201F660 arm_func_start sub_0201F6AC sub_0201F6AC: ; 0x0201F6AC @@ -32162,7 +38252,7 @@ _0201F768: mov lr, pc bx r2 _0201F7C8: - .byte 0xE0, 0xFF, 0xFF, 0xEA + b _0201F750 _0201F7CC: cmp sl, #0 beq _0201F7EC @@ -32839,35 +38929,139 @@ _02020128: .align 2, 0 _02020130: .word 0x0380FFF4 arm_func_end sub_0201FC68 -_02020134: - .byte 0x5C, 0x20, 0x9F, 0xE5, 0xB4, 0x10, 0xD0, 0xE1, 0x00, 0x30, 0x92, 0xE5 - .byte 0xFF, 0x10, 0x01, 0xE2, 0x44, 0x25, 0x93, 0xE5, 0x01, 0x10, 0x82, 0xE0, 0x44, 0x15, 0x83, 0xE5 - .byte 0xB0, 0x00, 0xD0, 0xE1, 0x02, 0x00, 0x10, 0xE3, 0x40, 0x05, 0x93, 0x15, 0x01, 0x00, 0x80, 0x12 - .byte 0x40, 0x05, 0x83, 0x15, 0x05, 0x00, 0x00, 0x1A, 0x3C, 0x05, 0x93, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x3C, 0x05, 0x83, 0xE5, 0x4C, 0x05, 0x93, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x4C, 0x05, 0x83, 0xE5 - .byte 0x10, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5, 0x01, 0x0B, 0x80, 0xE2 - .byte 0xB4, 0x15, 0xC0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x70, 0x40, 0x2D, 0xE9 - .byte 0xF8, 0x20, 0x9F, 0xE5, 0x00, 0x60, 0xA0, 0xE1, 0x00, 0x20, 0x92, 0xE5, 0x01, 0x50, 0xA0, 0xE1 - .byte 0x50, 0x15, 0x92, 0xE5, 0x5F, 0x4F, 0x82, 0xE2, 0x01, 0x10, 0x81, 0xE2, 0x50, 0x15, 0x82, 0xE5 - .byte 0xB4, 0x11, 0xD6, 0xE1, 0x01, 0x1E, 0xA0, 0xE1, 0x21, 0x1F, 0xB0, 0xE1, 0x08, 0x00, 0x00, 0x1A - .byte 0x57, 0xEC, 0xFF, 0xEB, 0x30, 0x00, 0x84, 0xE2, 0x24, 0x10, 0x84, 0xE2, 0x10, 0x20, 0x46, 0xE2 - .byte 0xE4, 0x1F, 0x40, 0xEB, 0x06, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x9D, 0xFE, 0xFF, 0xEB - .byte 0x02, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x84, 0xE2, 0x10, 0x10, 0x46, 0xE2, 0x2A, 0xFD, 0xFF, 0xEB - .byte 0x98, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x91, 0xE5, 0x01, 0x0B, 0x80, 0xE2 - .byte 0xB4, 0x25, 0xC0, 0xE1, 0x00, 0x00, 0x91, 0xE5, 0x5C, 0x04, 0x90, 0xE5, 0xBC, 0x00, 0xD0, 0xE1 - .byte 0x00, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x10, 0x00, 0x00, 0x1A, 0x70, 0x10, 0x9F, 0xE5 - .byte 0x08, 0x00, 0xA0, 0xE3, 0xB0, 0x00, 0xC1, 0xE1, 0x05, 0x00, 0xA0, 0xE3, 0xB2, 0x00, 0xC1, 0xE1 - .byte 0x00, 0x00, 0x55, 0xE3, 0x09, 0x00, 0x00, 0x0A, 0xBC, 0x02, 0xD4, 0xE1, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x21, 0xFD, 0xFF, 0xEB, 0xB0, 0x02, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0xFD, 0xFF, 0xEB - .byte 0xB8, 0x03, 0xD4, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xA0, 0xE3, 0x15, 0xFD, 0xFF, 0xEB, 0x01, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0xA0, 0xE3, 0xC7, 0xED, 0xFF, 0xEB, 0x70, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0xAC, 0x80, 0x80, 0x04, 0x08, 0x20, 0x90, 0xE5, 0x38, 0x10, 0x9F, 0xE5 - .byte 0xB4, 0x30, 0xD2, 0xE1, 0x00, 0x20, 0x91, 0xE5, 0xFF, 0x30, 0x13, 0xE2, 0xA8, 0x15, 0x92, 0x05 - .byte 0x01, 0x10, 0x81, 0x02, 0xA8, 0x15, 0x82, 0x05, 0xA4, 0x15, 0x92, 0x15, 0x03, 0x10, 0x81, 0x10 - .byte 0xA4, 0x15, 0x82, 0x15, 0xB4, 0x20, 0xD0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0x82, 0xE2 - .byte 0xB4, 0x20, 0xC0, 0xE1, 0xB0, 0x10, 0xC0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 + + arm_func_start sub_02020134 +sub_02020134: ; 0x02020134 + ldr r2, _02020198 ; =0x0380FFF4 + ldrh r1, [r0, #4] + ldr r3, [r2] + and r1, r1, #0xff + ldr r2, [r3, #0x544] + add r1, r2, r1 + str r1, [r3, #0x544] + ldrh r0, [r0] + tst r0, #2 + ldrne r0, [r3, #0x540] + addne r0, r0, #1 + strne r0, [r3, #0x540] + bne _02020180 + ldr r0, [r3, #0x53c] + add r0, r0, #1 + str r0, [r3, #0x53c] + ldr r0, [r3, #0x54c] + add r0, r0, #1 + str r0, [r3, #0x54c] +_02020180: + ldr r0, _02020198 ; =0x0380FFF4 + mov r1, #0 + ldr r0, [r0] + add r0, r0, #0x400 + strh r1, [r0, #0x54] + bx lr + .align 2, 0 +_02020198: .word 0x0380FFF4 + arm_func_end sub_02020134 + + arm_func_start sub_0202019C +sub_0202019C: ; 0x0202019C + stmdb sp!, {r4, r5, r6, lr} + ldr r2, _020202A0 ; =0x0380FFF4 + mov r6, r0 + ldr r2, [r2] + mov r5, r1 + ldr r1, [r2, #0x550] + add r4, r2, #0x17c + add r1, r1, #1 + str r1, [r2, #0x550] + ldrh r1, [r6, #0x14] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1e + bne _020201F4 + bl sub_0201B334 + add r0, r4, #0x30 + add r1, r4, #0x24 + sub r2, r6, #0x10 + bl sub_03028178 + mov r0, r6 + mov r1, #0 + bl sub_0201FC68 + b _02020200 +_020201F4: + add r0, r4, #0x30 + sub r1, r6, #0x10 + bl sub_0201F6AC +_02020200: + ldr r1, _020202A0 ; =0x0380FFF4 + mov r2, #0 + ldr r0, [r1] + add r0, r0, #0x400 + strh r2, [r0, #0x54] + ldr r0, [r1] + ldr r0, [r0, #0x45c] + ldrh r0, [r0, #0xc] + mov r0, r0, lsl #0x12 + movs r0, r0, lsr #0x1f + bne _02020270 + ldr r1, _020202A4 ; =0x048080AC + mov r0, #8 + strh r0, [r1] + mov r0, #5 + strh r0, [r1, #2] + cmp r5, #0 + beq _02020270 + ldrh r0, [r4, #0x2c] + cmp r0, #0 + beq _0202025C + mov r0, #1 + bl sub_0201F6E4 +_0202025C: + ldrh r0, [r4, #0x20] + cmp r0, #0 + beq _02020270 + mov r0, #0 + bl sub_0201F6E4 +_02020270: + ldrh r0, [r4, #0x38] + cmp r0, #0 + beq _02020290 + cmp r5, #0 + beq _02020298 + mov r0, #2 + bl sub_0201F6E4 + b _02020298 +_02020290: + mov r0, #0 + bl sub_0201B9B8 +_02020298: + ldmia sp!, {r4, r5, r6, lr} + bx lr + .align 2, 0 +_020202A0: .word 0x0380FFF4 +_020202A4: .word 0x048080AC + arm_func_end sub_0202019C + + arm_func_start sub_020202A8 +sub_020202A8: ; 0x020202A8 + ldr r2, [r0, #8] + ldr r1, _020202EC ; =0x0380FFF4 + ldrh r3, [r2, #4] + ldr r2, [r1] + ands r3, r3, #0xff + ldreq r1, [r2, #0x5a8] + addeq r1, r1, #1 + streq r1, [r2, #0x5a8] + ldrne r1, [r2, #0x5a4] + addne r1, r1, r3 + strne r1, [r2, #0x5a4] + ldrh r2, [r0, #4] + mov r1, #0 + add r2, r2, #1 + strh r2, [r0, #4] + strh r1, [r0] + bx lr + .align 2, 0 +_020202EC: .word 0x0380FFF4 + arm_func_end sub_020202A8 arm_func_start sub_020202F0 sub_020202F0: ; 0x020202F0 @@ -33378,86 +39572,351 @@ _02020980: .word 0x0380FFF4 _02020984: .word 0x00003FFF _02020988: .word 0x048080A8 arm_func_end sub_020208F8 -_0202098C: - .byte 0x30, 0x00, 0x9F, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x90, 0xE5, 0x01, 0x19, 0x62, 0xE2, 0x01, 0x0B, 0x83, 0xE2 - .byte 0xB4, 0x2A, 0xC0, 0xE1, 0xA4, 0x00, 0x83, 0xE2, 0x08, 0x24, 0x90, 0xE5, 0x14, 0x00, 0x9F, 0xE5 - .byte 0x01, 0x10, 0x02, 0xE0, 0xA1, 0x10, 0xA0, 0xE1, 0x02, 0x19, 0x81, 0xE3, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0x80, 0x80, 0x80, 0x04, 0x18, 0x10, 0x9F, 0xE5 - .byte 0x18, 0x00, 0x9F, 0xE5, 0x00, 0x20, 0x91, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1 - .byte 0x01, 0x0B, 0x82, 0xE2, 0xB4, 0x1A, 0xC0, 0xE1, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x80, 0x80, 0x80, 0x04, 0xF0, 0x47, 0x2D, 0xE9, 0x50, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x91, 0xE5, 0xAC, 0x84, 0x91, 0xE5, 0xC7, 0x5F, 0x81, 0xE2, 0xB0, 0x00, 0xC8, 0xE1 - .byte 0xB2, 0x00, 0xC8, 0xE1, 0xB4, 0x00, 0xC8, 0xE1, 0xB6, 0x00, 0xC8, 0xE1, 0xD1, 0x6F, 0x81, 0xE2 - .byte 0xD0, 0xE4, 0xFF, 0xEB, 0xB8, 0x00, 0xC8, 0xE1, 0x80, 0x00, 0xA0, 0xE3, 0xBC, 0x00, 0xC8, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x20, 0x85, 0xE2, 0xBE, 0x00, 0xC8, 0xE1, 0x10, 0x13, 0x9F, 0xE5 - .byte 0x10, 0x00, 0x88, 0xE2, 0x02, 0x30, 0xA0, 0xE1, 0xB4, 0xE3, 0xFF, 0xEB, 0x00, 0x10, 0xA0, 0xE3 - .byte 0xB2, 0x12, 0xC8, 0xE1, 0x24, 0xA0, 0x88, 0xE2, 0x24, 0x10, 0x88, 0xE5, 0x04, 0x10, 0x8A, 0xE5 - .byte 0xBE, 0x06, 0xD6, 0xE1, 0x0C, 0x90, 0x8A, 0xE2, 0xB8, 0x00, 0xCA, 0xE1, 0xBC, 0x07, 0xD6, 0xE1 - .byte 0xBA, 0x00, 0xCA, 0xE1, 0xBE, 0x01, 0xD5, 0xE1, 0x80, 0x0F, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x1B, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0x49, 0xE0, 0xB2, 0x09, 0xC6, 0xE1, 0x09, 0x00, 0xA0, 0xE1 - .byte 0x9F, 0xE6, 0xFF, 0xEB, 0xBE, 0x11, 0xD6, 0xE1, 0x01, 0x00, 0x89, 0xE2, 0xFF, 0x10, 0x01, 0xE2 - .byte 0x02, 0x90, 0x89, 0xE2, 0x9A, 0xE6, 0xFF, 0xEB, 0x00, 0x70, 0xA0, 0xE3, 0x20, 0x40, 0x86, 0xE2 - .byte 0x06, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x84, 0xE0, 0xA0, 0xE6, 0xFF, 0xEB, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x92, 0xE6, 0xFF, 0xEB, 0x01, 0x90, 0x89, 0xE2, 0x01, 0x70, 0x87, 0xE2 - .byte 0xBE, 0x01, 0xD6, 0xE1, 0x00, 0x00, 0x57, 0xE1, 0xF5, 0xFF, 0xFF, 0x3A, 0x00, 0x00, 0xE0, 0xE3 - .byte 0x07, 0x00, 0x40, 0xE0, 0x00, 0x00, 0x89, 0xE0, 0xFF, 0x10, 0x07, 0xE2, 0x88, 0xE6, 0xFF, 0xEB - .byte 0x00, 0x00, 0x00, 0xEA, 0xB2, 0x19, 0xC6, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x6F, 0x03, 0x00, 0xEB - .byte 0x00, 0x90, 0x89, 0xE0, 0x09, 0x00, 0xA0, 0xE1, 0x03, 0x10, 0xA0, 0xE3, 0x80, 0xE6, 0xFF, 0xEB - .byte 0x01, 0x00, 0x89, 0xE2, 0x01, 0x10, 0xA0, 0xE3, 0x7D, 0xE6, 0xFF, 0xEB, 0xBA, 0x17, 0xD6, 0xE1 - .byte 0x02, 0x00, 0x89, 0xE2, 0xFF, 0x10, 0x01, 0xE2, 0x79, 0xE6, 0xFF, 0xEB, 0x03, 0x00, 0x89, 0xE2 - .byte 0x0A, 0x10, 0x40, 0xE0, 0xB4, 0x19, 0xC6, 0xE1, 0xB4, 0x29, 0xD6, 0xE1, 0x14, 0x12, 0x9F, 0xE5 - .byte 0x02, 0x20, 0x82, 0xE2, 0xB0, 0x20, 0xC1, 0xE1, 0x05, 0x10, 0xA0, 0xE3, 0x70, 0xE6, 0xFF, 0xEB - .byte 0x04, 0x00, 0x89, 0xE2, 0x05, 0x10, 0xA0, 0xE3, 0x6D, 0xE6, 0xFF, 0xEB, 0x05, 0x00, 0x89, 0xE2 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x6A, 0xE6, 0xFF, 0xEB, 0x06, 0x00, 0x89, 0xE2, 0xB4, 0x17, 0xD6, 0xE1 - .byte 0xFF, 0x10, 0x01, 0xE2, 0x66, 0xE6, 0xFF, 0xEB, 0x07, 0x00, 0x89, 0xE2, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x63, 0xE6, 0xFF, 0xEB, 0x08, 0x00, 0x89, 0xE2, 0x00, 0x10, 0xA0, 0xE3, 0x60, 0xE6, 0xFF, 0xEB - .byte 0x09, 0x00, 0x89, 0xE2, 0x00, 0x10, 0xA0, 0xE3, 0x5D, 0xE6, 0xFF, 0xEB, 0x0A, 0x00, 0x89, 0xE2 - .byte 0x0A, 0x10, 0x40, 0xE0, 0xB6, 0x19, 0xC6, 0xE1, 0xB6, 0x29, 0xD6, 0xE1, 0xDD, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0x02, 0xE2, 0xB2, 0x2A, 0xC6, 0xE1, 0x55, 0xE6, 0xFF, 0xEB, 0x0B, 0x00, 0x89, 0xE2 - .byte 0xB0, 0x1A, 0xD6, 0xE1, 0x08, 0x10, 0x81, 0xE2, 0xFF, 0x10, 0x01, 0xE2, 0x50, 0xE6, 0xFF, 0xEB - .byte 0x0C, 0x00, 0x89, 0xE2, 0x00, 0x10, 0xA0, 0xE3, 0x4D, 0xE6, 0xFF, 0xEB, 0x0D, 0x00, 0x89, 0xE2 - .byte 0x09, 0x10, 0xA0, 0xE3, 0x4A, 0xE6, 0xFF, 0xEB, 0x0E, 0x00, 0x89, 0xE2, 0xBF, 0x10, 0xA0, 0xE3 - .byte 0x47, 0xE6, 0xFF, 0xEB, 0x0F, 0x00, 0x89, 0xE2, 0x00, 0x10, 0xA0, 0xE3, 0x44, 0xE6, 0xFF, 0xEB - .byte 0xBE, 0x00, 0xD6, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x1A, 0xB0, 0x12, 0xD5, 0xE1 - .byte 0x10, 0x00, 0x89, 0xE2, 0xFF, 0x10, 0x01, 0xE2, 0x3D, 0xE6, 0xFF, 0xEB, 0xB0, 0x12, 0xD5, 0xE1 - .byte 0x11, 0x00, 0x89, 0xE2, 0x41, 0x14, 0xA0, 0xE1, 0xFF, 0x10, 0x01, 0xE2, 0x12, 0x90, 0x89, 0xE2 - .byte 0x37, 0xE6, 0xFF, 0xEB, 0x06, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x89, 0xE2, 0xFF, 0x10, 0xA0, 0xE3 - .byte 0x33, 0xE6, 0xFF, 0xEB, 0x11, 0x00, 0x89, 0xE2, 0xFF, 0x10, 0xA0, 0xE3, 0x12, 0x90, 0x89, 0xE2 - .byte 0x2F, 0xE6, 0xFF, 0xEB, 0x00, 0x11, 0x9F, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0xB0, 0x40, 0xD1, 0xE1 - .byte 0xFF, 0x10, 0x04, 0xE2, 0x2A, 0xE6, 0xFF, 0xEB, 0x24, 0x14, 0xA0, 0xE1, 0x01, 0x00, 0x89, 0xE2 - .byte 0xFF, 0x10, 0x01, 0xE2, 0x02, 0x90, 0x89, 0xE2, 0x25, 0xE6, 0xFF, 0xEB, 0x9C, 0x40, 0x96, 0xE5 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x07, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE1, 0x2B, 0xE6, 0xFF, 0xEB - .byte 0x00, 0x10, 0xA0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x1D, 0xE6, 0xFF, 0xEB, 0x01, 0x90, 0x89, 0xE2 - .byte 0x01, 0x40, 0x84, 0xE2, 0x01, 0x50, 0x85, 0xE2, 0xB0, 0x1A, 0xD6, 0xE1, 0x01, 0x00, 0x55, 0xE1 - .byte 0xF4, 0xFF, 0xFF, 0x3A, 0xB2, 0x0A, 0xD6, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x10, 0x00, 0x00, 0x0A - .byte 0x9C, 0x00, 0x96, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x80, 0xE0, 0x01, 0x50, 0x40, 0xE2 - .byte 0x00, 0x40, 0xA0, 0xE3, 0x0A, 0x00, 0x00, 0x9A, 0x06, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x16, 0xE6, 0xFF, 0xEB, 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x00, 0x85, 0xE2, 0x08, 0xE6, 0xFF, 0xEB - .byte 0x01, 0x40, 0x84, 0xE2, 0x01, 0x50, 0x45, 0xE2, 0xB0, 0x0A, 0xD6, 0xE1, 0x00, 0x00, 0x54, 0xE1 - .byte 0xF5, 0xFF, 0xFF, 0x3A, 0x44, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x06, 0x0C, 0x80, 0xE2 - .byte 0xB0, 0x09, 0xD0, 0xE1, 0x04, 0x00, 0x10, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x3C, 0x10, 0x9F, 0xE5 - .byte 0x03, 0x00, 0x89, 0xE2, 0x03, 0x20, 0xC0, 0xE3, 0x34, 0x00, 0x9F, 0xE5, 0xB0, 0x10, 0xC2, 0xE1 - .byte 0xB2, 0x00, 0xC2, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x1C, 0x00, 0x89, 0xE2, 0xB4, 0x1A, 0xC6, 0xE1 - .byte 0x0A, 0x00, 0x40, 0xE0, 0xBA, 0x00, 0xC8, 0xE1, 0xF0, 0x47, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xF4, 0xFF, 0x80, 0x03, 0xA4, 0x74, 0x7F, 0x02, 0x84, 0x80, 0x80, 0x04, 0xF0, 0xFF, 0x80, 0x03 - .byte 0xB8, 0xB6, 0x00, 0x00, 0x46, 0x1D, 0x00, 0x00, 0x38, 0x40, 0x2D, 0xE9, 0xE0, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0xD1, 0x4F, 0x80, 0xE2, 0xAC, 0x14, 0x90, 0xE5, 0xB0, 0x2A, 0xD4, 0xE1 - .byte 0xB6, 0x09, 0xD4, 0xE1, 0x24, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x50, 0x81, 0xE0 - .byte 0x10, 0x00, 0x00, 0x0A, 0xB2, 0x0A, 0xD4, 0xE1, 0x9C, 0x10, 0x94, 0xE5, 0x01, 0x00, 0x10, 0xE3 - .byte 0x0A, 0x00, 0x85, 0xE2, 0x09, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x40, 0xE2, 0x02, 0x20, 0x82, 0xE2 - .byte 0xAD, 0xE5, 0xFF, 0xEB, 0x9C, 0x10, 0x9F, 0xE5, 0x09, 0x00, 0x85, 0xE2, 0xB0, 0x10, 0xD1, 0xE1 - .byte 0x41, 0x14, 0xA0, 0xE1, 0xFF, 0x10, 0x01, 0xE2, 0xD1, 0xE5, 0xFF, 0xEB, 0x01, 0x00, 0x00, 0xEA - .byte 0x01, 0x20, 0x82, 0xE2, 0xA4, 0xE5, 0xFF, 0xEB, 0x74, 0x00, 0x9F, 0xE5, 0xB6, 0x29, 0xD4, 0xE1 - .byte 0x00, 0x00, 0x90, 0xE5, 0xB0, 0x1A, 0xD4, 0xE1, 0x26, 0x20, 0x82, 0xE2, 0xAC, 0x04, 0x90, 0xE5 - .byte 0x01, 0x10, 0x82, 0xE0, 0xBA, 0x10, 0xC0, 0xE1, 0xB0, 0x1A, 0xD4, 0xE1, 0x01, 0x00, 0x85, 0xE2 - .byte 0x08, 0x10, 0x81, 0xE2, 0xFF, 0x10, 0x01, 0xE2, 0xC1, 0xE5, 0xFF, 0xEB, 0x40, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x06, 0x0C, 0x80, 0xE2, 0xB0, 0x09, 0xD0, 0xE1, 0x04, 0x00, 0x10, 0xE3 - .byte 0x07, 0x00, 0x00, 0x0A, 0xB0, 0x0A, 0xD4, 0xE1, 0x0D, 0x10, 0x85, 0xE2, 0x00, 0x00, 0x81, 0xE0 - .byte 0x24, 0x10, 0x9F, 0xE5, 0x03, 0x20, 0xC0, 0xE3, 0x20, 0x00, 0x9F, 0xE5, 0xB0, 0x10, 0xC2, 0xE1 - .byte 0xB2, 0x00, 0xC2, 0xE1, 0x00, 0x00, 0xA0, 0xE3, 0xB4, 0x0A, 0xC4, 0xE1, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03, 0xF0, 0xFF, 0x80, 0x03, 0xB8, 0xB6, 0x00, 0x00 - .byte 0x46, 0x1D, 0x00, 0x00 + + arm_func_start sub_0202098C +sub_0202098C: ; 0x0202098C + ldr r0, _020209C4 ; =0x0380FFF4 + mov r2, #1 + ldr r3, [r0] + rsb r1, r2, #0x4000 + add r0, r3, #0x400 + strh r2, [r0, #0xa4] + add r0, r3, #0xa4 + ldr r2, [r0, #0x408] + ldr r0, _020209C8 ; =0x04808080 + and r1, r2, r1 + mov r1, r1, lsr #1 + orr r1, r1, #0x8000 + strh r1, [r0] + bx lr + .align 2, 0 +_020209C4: .word 0x0380FFF4 +_020209C8: .word 0x04808080 + arm_func_end sub_0202098C + + arm_func_start sub_020209CC +sub_020209CC: ; 0x020209CC + ldr r1, _020209EC ; =0x0380FFF4 + ldr r0, _020209F0 ; =0x04808080 + ldr r2, [r1] + mov r1, #0 + strh r1, [r0] + add r0, r2, #0x400 + strh r1, [r0, #0xa4] + bx lr + .align 2, 0 +_020209EC: .word 0x0380FFF4 +_020209F0: .word 0x04808080 + arm_func_end sub_020209CC + + arm_func_start sub_020209F4 +sub_020209F4: ; 0x020209F4 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + ldr r1, _02020D50 ; =0x0380FFF4 + mov r0, #0 + ldr r1, [r1] + ldr r8, [r1, #0x4ac] + add r5, r1, #0x31c + strh r0, [r8] + strh r0, [r8, #2] + strh r0, [r8, #4] + strh r0, [r8, #6] + add r6, r1, #0x344 + bl sub_02019D68 + strh r0, [r8, #8] + mov r0, #0x80 + strh r0, [r8, #0xc] + mov r0, #0 + add r2, r5, #8 + strh r0, [r8, #0xe] + ldr r1, _02020D54 ; =0x027F74A4 + add r0, r8, #0x10 + mov r3, r2 + bl sub_02019920 + mov r1, #0 + strh r1, [r8, #0x22] + add sl, r8, #0x24 + str r1, [r8, #0x24] + str r1, [sl, #4] + ldrh r0, [r6, #0x6e] + add sb, sl, #0xc + strh r0, [sl, #8] + ldrh r0, [r6, #0x7c] + strh r0, [sl, #0xa] + ldrh r0, [r5, #0x1e] + mov r0, r0, lsl #0x1f + movs r0, r0, lsr #0x1f + bne _02020AF4 + sub r0, sb, sl + strh r0, [r6, #0x92] + mov r0, sb + bl sub_0201A514 + ldrh r1, [r6, #0x1e] + add r0, sb, #1 + and r1, r1, #0xff + add sb, sb, #2 + bl sub_0201A514 + mov r7, #0 + add r4, r6, #0x20 + b _02020AD0 +_02020AB4: + add r0, r4, r7 + bl sub_0201A540 + mov r1, r0 + mov r0, sb + bl sub_0201A514 + add sb, sb, #1 + add r7, r7, #1 +_02020AD0: + ldrh r0, [r6, #0x1e] + cmp r7, r0 + blo _02020AB4 + mvn r0, #0 + sub r0, r0, r7 + add r0, sb, r0 + and r1, r7, #0xff + bl sub_0201A514 + b _02020AF8 +_02020AF4: + strh r1, [r6, #0x92] +_02020AF8: + mov r0, sb + bl sub_020218C0 + add sb, sb, r0 + mov r0, sb + mov r1, #3 + bl sub_0201A514 + add r0, sb, #1 + mov r1, #1 + bl sub_0201A514 + ldrh r1, [r6, #0x7a] + add r0, sb, #2 + and r1, r1, #0xff + bl sub_0201A514 + add r0, sb, #3 + sub r1, r0, sl + strh r1, [r6, #0x94] + ldrh r2, [r6, #0x94] + ldr r1, _02020D58 ; =0x04808084 + add r2, r2, #2 + strh r2, [r1] + mov r1, #5 + bl sub_0201A514 + add r0, sb, #4 + mov r1, #5 + bl sub_0201A514 + add r0, sb, #5 + mov r1, #0 + bl sub_0201A514 + add r0, sb, #6 + ldrh r1, [r6, #0x74] + and r1, r1, #0xff + bl sub_0201A514 + add r0, sb, #7 + mov r1, #0 + bl sub_0201A514 + add r0, sb, #8 + mov r1, #0 + bl sub_0201A514 + add r0, sb, #9 + mov r1, #0 + bl sub_0201A514 + add r0, sb, #0xa + sub r1, r0, sl + strh r1, [r6, #0x96] + ldrh r2, [r6, #0x96] + mov r1, #0xdd + and r2, r2, #1 + strh r2, [r6, #0xa2] + bl sub_0201A514 + add r0, sb, #0xb + ldrh r1, [r6, #0xa0] + add r1, r1, #8 + and r1, r1, #0xff + bl sub_0201A514 + add r0, sb, #0xc + mov r1, #0 + bl sub_0201A514 + add r0, sb, #0xd + mov r1, #9 + bl sub_0201A514 + add r0, sb, #0xe + mov r1, #0xbf + bl sub_0201A514 + add r0, sb, #0xf + mov r1, #0 + bl sub_0201A514 + ldrh r0, [r6, #0xe] + cmp r0, #1 + bne _02020C38 + ldrh r1, [r5, #0x20] + add r0, sb, #0x10 + and r1, r1, #0xff + bl sub_0201A514 + ldrh r1, [r5, #0x20] + add r0, sb, #0x11 + mov r1, r1, asr #8 + and r1, r1, #0xff + add sb, sb, #0x12 + bl sub_0201A514 + b _02020C54 +_02020C38: + add r0, sb, #0x10 + mov r1, #0xff + bl sub_0201A514 + add r0, sb, #0x11 + mov r1, #0xff + add sb, sb, #0x12 + bl sub_0201A514 +_02020C54: + ldr r1, _02020D5C ; =0x0380FFF0 + mov r0, sb + ldrh r4, [r1] + and r1, r4, #0xff + bl sub_0201A514 + mov r1, r4, lsr #8 + add r0, sb, #1 + and r1, r1, #0xff + add sb, sb, #2 + bl sub_0201A514 + ldr r4, [r6, #0x9c] + mov r5, #0 + b _02020CA8 +_02020C88: + mov r0, r4 + bl sub_0201A540 + mov r1, r0 + mov r0, sb + bl sub_0201A514 + add sb, sb, #1 + add r4, r4, #1 + add r5, r5, #1 +_02020CA8: + ldrh r1, [r6, #0xa0] + cmp r5, r1 + blo _02020C88 + ldrh r0, [r6, #0xa2] + cmp r0, #0 + beq _02020D04 + ldr r0, [r6, #0x9c] + cmp r1, #0 + add r0, r0, r1 + sub r5, r0, #1 + mov r4, #0 + bls _02020D04 + b _02020CF8 +_02020CDC: + mov r0, r5 + bl sub_0201A540 + mov r1, r0 + add r0, r5, #1 + bl sub_0201A514 + add r4, r4, #1 + sub r5, r5, #1 +_02020CF8: + ldrh r0, [r6, #0xa0] + cmp r4, r0 + blo _02020CDC +_02020D04: + ldr r0, _02020D50 ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #0x600 + ldrh r0, [r0, #0x90] + tst r0, #4 + beq _02020D34 + ldr r1, _02020D60 ; =0x0000B6B8 + add r0, sb, #3 + bic r2, r0, #3 + ldr r0, _02020D64 ; =0x00001D46 + strh r1, [r2] + strh r0, [r2, #2] +_02020D34: + mov r1, #0 + add r0, sb, #0x1c + strh r1, [r6, #0xa4] + sub r0, r0, sl + strh r0, [r8, #0xa] + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + bx lr + .align 2, 0 +_02020D50: .word 0x0380FFF4 +_02020D54: .word 0x027F74A4 +_02020D58: .word 0x04808084 +_02020D5C: .word 0x0380FFF0 +_02020D60: .word 0x0000B6B8 +_02020D64: .word 0x00001D46 + arm_func_end sub_020209F4 + + arm_func_start sub_02020D68 +sub_02020D68: ; 0x02020D68 + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _02020E54 ; =0x0380FFF4 + ldr r0, [r0] + add r4, r0, #0x344 + ldr r1, [r0, #0x4ac] + ldrh r2, [r4, #0xa0] + ldrh r0, [r4, #0x96] + add r1, r1, #0x24 + cmp r2, #0 + add r5, r1, r0 + beq _02020DD8 + ldrh r0, [r4, #0xa2] + ldr r1, [r4, #0x9c] + tst r0, #1 + add r0, r5, #0xa + beq _02020DD0 + sub r0, r0, #1 + add r2, r2, #2 + bl sub_0201A46C + ldr r1, _02020E58 ; =0x0380FFF0 + add r0, r5, #9 + ldrh r1, [r1] + mov r1, r1, asr #8 + and r1, r1, #0xff + bl sub_0201A514 + b _02020DD8 +_02020DD0: + add r2, r2, #1 + bl sub_0201A46C +_02020DD8: + ldr r0, _02020E54 ; =0x0380FFF4 + ldrh r2, [r4, #0x96] + ldr r0, [r0] + ldrh r1, [r4, #0xa0] + add r2, r2, #0x26 + ldr r0, [r0, #0x4ac] + add r1, r2, r1 + strh r1, [r0, #0xa] + ldrh r1, [r4, #0xa0] + add r0, r5, #1 + add r1, r1, #8 + and r1, r1, #0xff + bl sub_0201A514 + ldr r0, _02020E54 ; =0x0380FFF4 + ldr r0, [r0] + add r0, r0, #0x600 + ldrh r0, [r0, #0x90] + tst r0, #4 + beq _02020E44 + ldrh r0, [r4, #0xa0] + add r1, r5, #0xd + add r0, r1, r0 + ldr r1, _02020E5C ; =0x0000B6B8 + bic r2, r0, #3 + ldr r0, _02020E60 ; =0x00001D46 + strh r1, [r2] + strh r0, [r2, #2] +_02020E44: + mov r0, #0 + strh r0, [r4, #0xa4] + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_02020E54: .word 0x0380FFF4 +_02020E58: .word 0x0380FFF0 +_02020E5C: .word 0x0000B6B8 +_02020E60: .word 0x00001D46 + arm_func_end sub_02020D68 arm_func_start sub_02020E64 sub_02020E64: ; 0x02020E64 @@ -37333,14 +43792,45 @@ _020244A4: .align 2, 0 _020244AC: .word 0x0380FFF4 arm_func_end sub_0202436C -_020244B0: - .byte 0x14, 0x10, 0x9F, 0xE5, 0x14, 0xC0, 0x9F, 0xE5, 0x00, 0x10, 0x91, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xC8, 0x20, 0xA0, 0xE3, 0x8F, 0x1F, 0x81, 0xE2, 0x1C, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 - .byte 0x74, 0xDF, 0x7F, 0x03, 0x3C, 0x00, 0x9F, 0xE5, 0x00, 0x30, 0xA0, 0xE3, 0x00, 0x00, 0x90, 0xE5 - .byte 0x8F, 0x2F, 0x80, 0xE2, 0x03, 0x00, 0xA0, 0xE1, 0xB0, 0x13, 0xD2, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x01, 0x10, 0x41, 0xE2, 0xB0, 0x13, 0xC2, 0xE1, 0xB0, 0x13, 0xD2, 0xE1 - .byte 0x00, 0x00, 0x51, 0xE3, 0xB0, 0x00, 0xC2, 0x01, 0x01, 0x30, 0x83, 0xE2, 0x04, 0x00, 0x53, 0xE3 - .byte 0xF4, 0xFF, 0xFF, 0x3A, 0x1E, 0xFF, 0x2F, 0xE1, 0xF4, 0xFF, 0x80, 0x03 + + arm_func_start sub_020244B0 +sub_020244B0: ; 0x020244B0 + ldr r1, _020244CC ; =0x0380FFF4 + ldr ip, _020244D0 ; =sub_037FDF74 + ldr r1, [r1] + mov r0, #0 + mov r2, #0xc8 + add r1, r1, #0x23c + bx ip + .align 2, 0 +_020244CC: .word 0x0380FFF4 +_020244D0: .word sub_037FDF74 + arm_func_end sub_020244B0 + + arm_func_start sub_020244D4 +sub_020244D4: ; 0x020244D4 + ldr r0, _02024518 ; =0x0380FFF4 + mov r3, #0 + ldr r0, [r0] + add r2, r0, #0x23c + mov r0, r3 +_020244E8: + ldrh r1, [r2, #0x30] + cmp r1, #0 + beq _02024508 + sub r1, r1, #1 + strh r1, [r2, #0x30] + ldrh r1, [r2, #0x30] + cmp r1, #0 + streqh r0, [r2] +_02024508: + add r3, r3, #1 + cmp r3, #4 + blo _020244E8 + bx lr + .align 2, 0 +_02024518: .word 0x0380FFF4 + arm_func_end sub_020244D4 arm_func_start sub_0202451C sub_0202451C: ; 0x0202451C @@ -37538,82 +44028,358 @@ _0202478C: _02024794: .word 0x0380FFF4 _02024798: .word 0x000001D6 arm_func_end sub_020246B0 -_0202479C: - .byte 0x1C, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x30, 0xA0, 0xE3, 0x03, 0x20, 0xA0, 0xE1, 0x83, 0x10, 0xA0, 0xE1, 0x01, 0x30, 0x83, 0xE2 - .byte 0xB1, 0x20, 0x80, 0xE1, 0x10, 0x00, 0x53, 0xE3, 0xFA, 0xFF, 0xFF, 0xBA, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0x08, 0x8E, 0x7F, 0x02, 0x38, 0x40, 0x2D, 0xE9, 0x08, 0xD0, 0x4D, 0xE2, 0x02, 0x04, 0x10, 0xE3 - .byte 0x07, 0x00, 0x00, 0x0A, 0x88, 0x21, 0x9F, 0xE5, 0x00, 0x50, 0xA0, 0xE3, 0x05, 0xE0, 0xA0, 0xE1 - .byte 0x85, 0x40, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0xB4, 0xE0, 0x82, 0xE1, 0x10, 0x00, 0x55, 0xE3 - .byte 0xFA, 0xFF, 0xFF, 0xBA, 0x68, 0x21, 0x9F, 0xE5, 0x0F, 0x48, 0x00, 0xE2, 0x24, 0x48, 0xA0, 0xE1 - .byte 0x84, 0x40, 0xA0, 0xE1, 0xB4, 0x00, 0x82, 0xE1, 0x01, 0x04, 0x10, 0xE3, 0x51, 0x00, 0x00, 0x0A - .byte 0x50, 0xE1, 0x9F, 0xE5, 0xB0, 0x00, 0xDE, 0xE1, 0xFF, 0x2C, 0x00, 0xE2, 0x02, 0x24, 0xA0, 0xE1 - .byte 0x22, 0x48, 0xA0, 0xE1, 0x22, 0x20, 0x44, 0xE2, 0x0A, 0x00, 0x52, 0xE3, 0x02, 0xF1, 0x8F, 0x90 - .byte 0x3D, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA - .byte 0x26, 0x00, 0x00, 0xEA, 0x25, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA - .byte 0x35, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA - .byte 0xB4, 0xC0, 0xDE, 0xE1, 0xB2, 0x20, 0xDE, 0xE1, 0x00, 0x0C, 0xA0, 0xE1, 0xFF, 0xCC, 0x0C, 0xE2 - .byte 0x02, 0x04, 0x80, 0xE1, 0x2C, 0xC4, 0x80, 0xE1, 0x02, 0x04, 0x5C, 0xE3, 0x01, 0x00, 0x00, 0x3A - .byte 0x0A, 0x05, 0x5C, 0xE3, 0x28, 0x00, 0x00, 0x3A, 0x04, 0x00, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE3 - .byte 0x68, 0x3A, 0x40, 0xEB, 0x2F, 0x00, 0x00, 0xEA, 0xB8, 0x20, 0xDE, 0xE1, 0xBA, 0x10, 0xDE, 0xE1 - .byte 0x02, 0xC8, 0x81, 0xE1, 0x02, 0x04, 0x5C, 0xE3, 0x01, 0x00, 0x00, 0x3A, 0x0A, 0x05, 0x5C, 0xE3 - .byte 0x03, 0x00, 0x00, 0x3A, 0x04, 0x00, 0xA0, 0xE1, 0x02, 0x10, 0xA0, 0xE3, 0x5D, 0x3A, 0x40, 0xEB - .byte 0x24, 0x00, 0x00, 0xEA, 0xB2, 0x20, 0xDE, 0xE1, 0x00, 0x3C, 0xA0, 0xE1, 0xB4, 0x10, 0xDE, 0xE1 - .byte 0xB6, 0x00, 0xDE, 0xE1, 0x23, 0x34, 0x82, 0xE1, 0x01, 0x18, 0x80, 0xE1, 0x12, 0x00, 0x00, 0xEA - .byte 0xB6, 0x20, 0xDE, 0xE1, 0xB8, 0x10, 0xDE, 0xE1, 0x02, 0xC8, 0x81, 0xE1, 0x02, 0x04, 0x5C, 0xE3 - .byte 0x01, 0x00, 0x00, 0x3A, 0x0A, 0x05, 0x5C, 0xE3, 0x03, 0x00, 0x00, 0x3A, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x02, 0x10, 0xA0, 0xE3, 0x4B, 0x3A, 0x40, 0xEB, 0x12, 0x00, 0x00, 0xEA, 0xB2, 0x20, 0xDE, 0xE1 - .byte 0x00, 0x0C, 0xA0, 0xE1, 0xB4, 0x10, 0xDE, 0xE1, 0x20, 0x34, 0x82, 0xE1, 0x02, 0x00, 0x00, 0xEA - .byte 0xB2, 0x20, 0xDE, 0xE1, 0x00, 0x0C, 0xA0, 0xE1, 0x20, 0x34, 0x82, 0xE1, 0x00, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x10, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x03, 0x20, 0xA0, 0xE3, 0x04, 0xC0, 0x8D, 0xE5 - .byte 0x89, 0x3A, 0x40, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE3, 0x37, 0x3A, 0x40, 0xEB, 0x08, 0xD0, 0x8D, 0xE2, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x1E, 0xFF, 0x2F, 0xE1, 0x08, 0x8E, 0x7F, 0x02, 0x08, 0x8E, 0x7F, 0x02, 0x38, 0x40, 0x2D, 0xE9 - .byte 0x00, 0x40, 0xA0, 0xE1, 0xDD, 0x22, 0x40, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x5D, 0x3A, 0x40, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x05, 0x00, 0xA0, 0xE1 - .byte 0xDB, 0x22, 0x40, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x04, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x23, 0x3A, 0x40, 0xEB, 0xA2, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x58, 0x3A, 0x40, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0xD1, 0x22, 0x40, 0xEB, 0x04, 0x00, 0x94, 0xE5 - .byte 0x20, 0x00, 0x40, 0xE2, 0x0D, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8A, 0x00, 0x00, 0xEA - .byte 0x0C, 0x00, 0x00, 0xEA, 0x0D, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x00, 0xEA - .byte 0x1F, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x3F, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA - .byte 0x5D, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA - .byte 0x78, 0x00, 0x00, 0xEA, 0x7A, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0xEB, 0x82, 0x00, 0x00, 0xEA - .byte 0xB8, 0x00, 0x00, 0xEB, 0x80, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x94, 0xE5, 0xC5, 0x00, 0x00, 0xEB - .byte 0x7D, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xFC, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x38, 0x3A, 0x40, 0xEB, 0x79, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x94, 0xE5, 0x0C, 0x10, 0x94, 0xE5, 0x10, 0x20, 0x94, 0xE5, 0xD1, 0x00, 0x00, 0xEB - .byte 0x6D, 0x00, 0x00, 0xEA, 0x75, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xEC, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x28, 0x3A, 0x40, 0xEB, 0x69, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x94, 0xE5, 0x0C, 0x10, 0x94, 0xE5, 0x10, 0x20, 0x94, 0xE5, 0x0B, 0x01, 0x00, 0xEB - .byte 0x5D, 0x00, 0x00, 0xEA, 0x6E, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xDC, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x3A, 0x40, 0xEB, 0x59, 0x00, 0x00, 0xEA - .byte 0x0C, 0x10, 0x94, 0xE5, 0x08, 0x00, 0x94, 0xE5, 0x01, 0x18, 0xA0, 0xE1, 0x10, 0x20, 0x94, 0xE5 - .byte 0x21, 0x18, 0xA0, 0xE1, 0x41, 0x01, 0x00, 0xEB, 0x4B, 0x00, 0x00, 0xEA, 0x5C, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0xCA, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x06, 0x3A, 0x40, 0xEB, 0x47, 0x00, 0x00, 0xEA, 0x0C, 0x10, 0x94, 0xE5, 0x08, 0x00, 0x94, 0xE5 - .byte 0x01, 0x18, 0xA0, 0xE1, 0x10, 0x20, 0x94, 0xE5, 0x21, 0x18, 0xA0, 0xE1, 0x72, 0x01, 0x00, 0xEB - .byte 0x39, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0xB8, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0xF4, 0x39, 0x40, 0xEB, 0x35, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x94, 0xE5, 0xA7, 0x01, 0x00, 0xEB, 0x2B, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x00, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0xAA, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3 - .byte 0xE6, 0x39, 0x40, 0xEB, 0x27, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x94, 0xE5, 0xBB, 0x01, 0x00, 0xEB - .byte 0x1D, 0x00, 0x00, 0xEA, 0xDB, 0x01, 0x00, 0xEB, 0x1B, 0x00, 0x00, 0xEA, 0xE9, 0x01, 0x00, 0xEB - .byte 0x19, 0x00, 0x00, 0xEA, 0x2A, 0x00, 0x00, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x94, 0xE5, 0x03, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1 - .byte 0x98, 0x39, 0x40, 0xEB, 0x01, 0x00, 0xA0, 0xE3, 0xD4, 0x39, 0x40, 0xEB, 0x15, 0x00, 0x00, 0xEA - .byte 0xEC, 0x01, 0x00, 0xEB, 0x0C, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x94, 0xE5, 0xF9, 0x01, 0x00, 0xEB - .byte 0x09, 0x00, 0x00, 0xEA, 0x1E, 0x02, 0x00, 0xEB, 0x07, 0x00, 0x00, 0xEA, 0x01, 0x00, 0xA0, 0xE3 - .byte 0xCA, 0x39, 0x40, 0xEB, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1 - .byte 0x20, 0x08, 0xA0, 0xE1, 0x87, 0x39, 0x40, 0xEB, 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x94, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x08, 0xA0, 0xE1, 0x20, 0x08, 0xA0, 0xE1, 0x81, 0x39, 0x40, 0xEB - .byte 0x01, 0x00, 0xA0, 0xE3, 0xBD, 0x39, 0x40, 0xEB, 0x38, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + + arm_func_start sub_0202479C +sub_0202479C: ; 0x0202479C + ldr r0, _020247C0 ; =0x027F8E08 + mov r3, #0 + mov r2, r3 +_020247A8: + mov r1, r3, lsl #1 + add r3, r3, #1 + strh r2, [r0, r1] + cmp r3, #0x10 + blt _020247A8 + bx lr + .align 2, 0 +_020247C0: .word 0x027F8E08 + arm_func_end sub_0202479C + + arm_func_start sub_020247C4 +sub_020247C4: ; 0x020247C4 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + tst r0, #0x2000000 + beq _020247F4 + ldr r2, _02024964 ; =0x027F8E08 + mov r5, #0 + mov lr, r5 +_020247E0: + mov r4, r5, lsl #1 + add r5, r5, #1 + strh lr, [r2, r4] + cmp r5, #0x10 + blt _020247E0 +_020247F4: + ldr r2, _02024964 ; =0x027F8E08 + and r4, r0, #0xf0000 + mov r4, r4, lsr #0x10 + mov r4, r4, lsl #1 + strh r0, [r2, r4] + tst r0, #0x1000000 + beq _02024958 + ldr lr, _02024968 ; =0x027F8E08 + ldrh r0, [lr] + and r2, r0, #0xff00 + mov r2, r2, lsl #8 + mov r4, r2, lsr #0x10 + sub r2, r4, #0x22 + cmp r2, #0xa + addls pc, pc, r2, lsl #2 + b _0202492C +_02024834: ; jump table + b _02024860 ; case 0 + b _02024898 ; case 1 + b _02024898 ; case 2 + b _020248E0 ; case 3 + b _020248E0 ; case 4 + b _02024920 ; case 5 + b _02024920 ; case 6 + b _0202492C ; case 7 + b _0202492C ; case 8 + b _0202492C ; case 9 + b _02024860 ; case 10 +_02024860: + ldrh ip, [lr, #4] + ldrh r2, [lr, #2] + mov r0, r0, lsl #0x18 + and ip, ip, #0xff00 + orr r0, r0, r2, lsl #8 + orr ip, r0, ip, lsr #8 + cmp ip, #0x2000000 + blo _02024888 + cmp ip, #0x2800000 + blo _0202492C +_02024888: + mov r0, r4 + mov r1, #2 + bl sub_03033238 + b _02024958 +_02024898: + ldrh r2, [lr, #8] + ldrh r1, [lr, #0xa] + orr ip, r1, r2, lsl #16 + cmp ip, #0x2000000 + blo _020248B4 + cmp ip, #0x2800000 + blo _020248C4 +_020248B4: + mov r0, r4 + mov r1, #2 + bl sub_03033238 + b _02024958 +_020248C4: + ldrh r2, [lr, #2] + mov r3, r0, lsl #0x18 + ldrh r1, [lr, #4] + ldrh r0, [lr, #6] + orr r3, r2, r3, lsr #8 + orr r1, r0, r1, lsl #16 + b _0202492C +_020248E0: + ldrh r2, [lr, #6] + ldrh r1, [lr, #8] + orr ip, r1, r2, lsl #16 + cmp ip, #0x2000000 + blo _020248FC + cmp ip, #0x2800000 + blo _0202490C +_020248FC: + mov r0, r4 + mov r1, #2 + bl sub_03033238 + b _02024958 +_0202490C: + ldrh r2, [lr, #2] + mov r0, r0, lsl #0x18 + ldrh r1, [lr, #4] + orr r3, r2, r0, lsr #8 + b _0202492C +_02024920: + ldrh r2, [lr, #2] + mov r0, r0, lsl #0x18 + orr r3, r2, r0, lsr #8 +_0202492C: + str r1, [sp] + mov r1, r4 + mov r0, #1 + mov r2, #3 + str ip, [sp, #4] + bl sub_0303336C + cmp r0, #0 + bne _02024958 + mov r0, r4 + mov r1, #4 + bl sub_03033238 +_02024958: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, lr} + bx lr + .align 2, 0 +_02024964: .word 0x027F8E08 +_02024968: .word 0x027F8E08 + arm_func_end sub_020247C4 + + arm_func_start sub_0202496C +sub_0202496C: ; 0x0202496C + stmdb sp!, {r3, r4, r5, lr} + mov r4, r0 + bl sub_0302D4F0 + mov r5, r0 + mov r0, #1 + bl sub_030332FC + cmp r0, #0 + bne _020249AC + mov r0, r5 + bl sub_0302D504 + ldr r0, [r4, #4] + mov r1, #4 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + b _02024C38 +_020249AC: + mov r0, #1 + bl sub_03033318 + mov r0, r5 + bl sub_0302D504 + ldr r0, [r4, #4] + sub r0, r0, #0x20 + cmp r0, #0xd + addls pc, pc, r0, lsl #2 + b _02024BFC +_020249D0: ; jump table + b _02024A08 ; case 0 + b _02024A10 ; case 1 + b _02024A18 ; case 2 + b _02024A24 ; case 3 + b _02024A64 ; case 4 + b _02024AA4 ; case 5 + b _02024AEC ; case 6 + b _02024B34 ; case 7 + b _02024B6C ; case 8 + b _02024BA4 ; case 9 + b _02024BAC ; case 10 + b _02024BB4 ; case 11 + b _02024BE8 ; case 12 + b _02024BF4 ; case 13 +_02024A08: + bl sub_02024C94 + b _02024C1C +_02024A10: + bl sub_02024CF8 + b _02024C1C +_02024A18: + ldr r0, [r4, #0x10] + bl sub_02024D38 + b _02024C1C +_02024A24: + bl sub_02024C40 + cmp r0, #0 + bne _02024A50 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024A50: + ldr r0, [r4, #8] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x10] + bl sub_02024DA8 + b _02024C1C +_02024A64: + bl sub_02024C40 + cmp r0, #0 + bne _02024A90 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024A90: + ldr r0, [r4, #8] + ldr r1, [r4, #0xc] + ldr r2, [r4, #0x10] + bl sub_02024ED0 + b _02024C1C +_02024AA4: + bl sub_02024C64 + cmp r0, #0 + bne _02024AD0 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024AD0: + ldr r1, [r4, #0xc] + ldr r0, [r4, #8] + mov r1, r1, lsl #0x10 + ldr r2, [r4, #0x10] + mov r1, r1, lsr #0x10 + bl sub_02024FF0 + b _02024C1C +_02024AEC: + bl sub_02024C64 + cmp r0, #0 + bne _02024B18 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024B18: + ldr r1, [r4, #0xc] + ldr r0, [r4, #8] + mov r1, r1, lsl #0x10 + ldr r2, [r4, #0x10] + mov r1, r1, lsr #0x10 + bl sub_020250FC + b _02024C1C +_02024B34: + bl sub_02024C64 + cmp r0, #0 + bne _02024B60 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024B60: + ldr r0, [r4, #8] + bl sub_02025208 + b _02024C1C +_02024B6C: + bl sub_02024C64 + cmp r0, #0 + bne _02024B98 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024B98: + ldr r0, [r4, #8] + bl sub_02025290 + b _02024C1C +_02024BA4: + bl sub_02025318 + b _02024C1C +_02024BAC: + bl sub_02025358 + b _02024C1C +_02024BB4: + bl sub_02024C64 + cmp r0, #0 + bne _02024BE0 + ldr r0, [r4, #4] + mov r1, #3 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 + b _02024C38 +_02024BE0: + bl sub_02025398 + b _02024C1C +_02024BE8: + ldr r0, [r4, #0x10] + bl sub_020253D8 + b _02024C1C +_02024BF4: + bl sub_02025474 + b _02024C1C +_02024BFC: + mov r0, #1 + bl sub_03033330 + ldr r0, [r4, #4] + mov r1, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + b _02024C38 +_02024C1C: + ldr r0, [r4, #4] + mov r1, #0 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl sub_03033238 + mov r0, #1 + bl sub_03033330 +_02024C38: + ldmia sp!, {r3, r4, r5, lr} + bx lr + arm_func_end sub_0202496C arm_func_start sub_02024C40 sub_02024C40: ; 0x02024C40 @@ -37644,12 +44410,29 @@ _02024C8C: ldmia sp!, {r3, lr} bx lr arm_func_end sub_02024C64 -_02024C94: - .byte 0x30, 0x20, 0x9F, 0xE5, 0xB0, 0x00, 0xD2, 0xE1, 0x80, 0x00, 0x10, 0xE3 - .byte 0xFC, 0xFF, 0xFF, 0x1A, 0x24, 0x00, 0x9F, 0xE5, 0x81, 0x1C, 0xA0, 0xE3, 0xB0, 0x10, 0xC2, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2, 0xB0, 0x00, 0xD1, 0xE1 - .byte 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x01, 0x00, 0x04 - .byte 0xC2, 0x01, 0x00, 0x04 + + arm_func_start sub_02024C94 +sub_02024C94: ; 0x02024C94 + ldr r2, _02024CCC ; =0x040001C0 +_02024C98: + ldrh r0, [r2] + tst r0, #0x80 + bne _02024C98 + ldr r0, _02024CD0 ; =0x040001C2 + mov r1, #0x8100 + strh r1, [r2] + mov r1, #6 + strh r1, [r0] + sub r1, r0, #2 +_02024CBC: + ldrh r0, [r1] + tst r0, #0x80 + bne _02024CBC + bx lr + .align 2, 0 +_02024CCC: .word 0x040001C0 +_02024CD0: .word 0x040001C2 + arm_func_end sub_02024C94 arm_func_start sub_02024CD4 sub_02024CD4: ; 0x02024CD4 @@ -37665,12 +44448,29 @@ _02024CE4: .align 2, 0 _02024CF4: .word 0x040001C2 arm_func_end sub_02024CD4 -_02024CF8: - .byte 0x30, 0x20, 0x9F, 0xE5, 0xB0, 0x00, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x24, 0x00, 0x9F, 0xE5, 0x81, 0x1C, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC2, 0xE1, 0x04, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2 - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xC0, 0x01, 0x00, 0x04, 0xC2, 0x01, 0x00, 0x04 + + arm_func_start sub_02024CF8 +sub_02024CF8: ; 0x02024CF8 + ldr r2, _02024D30 ; =0x040001C0 +_02024CFC: + ldrh r0, [r2] + tst r0, #0x80 + bne _02024CFC + ldr r0, _02024D34 ; =0x040001C2 + mov r1, #0x8100 + strh r1, [r2] + mov r1, #4 + strh r1, [r0] + sub r1, r0, #2 +_02024D20: + ldrh r0, [r1] + tst r0, #0x80 + bne _02024D20 + bx lr + .align 2, 0 +_02024D30: .word 0x040001C0 +_02024D34: .word 0x040001C2 + arm_func_end sub_02024CF8 arm_func_start sub_02024D38 sub_02024D38: ; 0x02024D38 @@ -38122,30 +44922,123 @@ _020252DC: _02025310: .word 0x040001C0 _02025314: .word 0x040001C2 arm_func_end sub_02025290 -_02025318: - .byte 0x30, 0x20, 0x9F, 0xE5, 0xB0, 0x00, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x24, 0x00, 0x9F, 0xE5, 0x81, 0x1C, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC2, 0xE1, 0xB9, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2 - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xC0, 0x01, 0x00, 0x04, 0xC2, 0x01, 0x00, 0x04, 0x30, 0x20, 0x9F, 0xE5, 0xB0, 0x00, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x24, 0x00, 0x9F, 0xE5, 0x81, 0x1C, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC2, 0xE1, 0xAB, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2 - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xC0, 0x01, 0x00, 0x04, 0xC2, 0x01, 0x00, 0x04, 0x30, 0x20, 0x9F, 0xE5, 0xB0, 0x00, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x24, 0x00, 0x9F, 0xE5, 0x81, 0x1C, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xC2, 0xE1, 0xC7, 0x10, 0xA0, 0xE3, 0xB0, 0x10, 0xC0, 0xE1, 0x02, 0x10, 0x40, 0xE2 - .byte 0xB0, 0x00, 0xD1, 0xE1, 0x80, 0x00, 0x10, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x1E, 0xFF, 0x2F, 0xE1 - .byte 0xC0, 0x01, 0x00, 0x04, 0xC2, 0x01, 0x00, 0x04, 0x08, 0x40, 0x2D, 0xE9, 0x88, 0x30, 0x9F, 0xE5 - .byte 0xB0, 0x10, 0xD3, 0xE1, 0x80, 0x00, 0x11, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x7C, 0x10, 0x9F, 0xE5 - .byte 0x89, 0x2C, 0xA0, 0xE3, 0xB0, 0x20, 0xC3, 0xE1, 0x9F, 0x20, 0xA0, 0xE3, 0xB0, 0x20, 0xC1, 0xE1 - .byte 0x02, 0x20, 0x41, 0xE2, 0xB0, 0x10, 0xD2, 0xE1, 0x80, 0x00, 0x11, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x58, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB0, 0x20, 0xC1, 0xE1, 0x02, 0xE0, 0x41, 0xE2 - .byte 0xB0, 0x10, 0xDE, 0xE1, 0x80, 0x00, 0x11, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x3C, 0xC0, 0x9F, 0xE5 - .byte 0x81, 0x2C, 0xA0, 0xE3, 0xB0, 0x30, 0xDC, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x30, 0xC0, 0xE5 - .byte 0xB0, 0x20, 0xCE, 0xE1, 0xB0, 0x10, 0xCC, 0xE1, 0x02, 0x20, 0x4C, 0xE2, 0xB0, 0x10, 0xD2, 0xE1 - .byte 0x80, 0x00, 0x11, 0xE3, 0xFC, 0xFF, 0xFF, 0x1A, 0x10, 0x10, 0x9F, 0xE5, 0xB0, 0x10, 0xD1, 0xE1 - .byte 0x01, 0x10, 0xC0, 0xE5, 0x08, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0xC0, 0x01, 0x00, 0x04 - .byte 0xC2, 0x01, 0x00, 0x04 + + arm_func_start sub_02025318 +sub_02025318: ; 0x02025318 + ldr r2, _02025350 ; =0x040001C0 +_0202531C: + ldrh r0, [r2] + tst r0, #0x80 + bne _0202531C + ldr r0, _02025354 ; =0x040001C2 + mov r1, #0x8100 + strh r1, [r2] + mov r1, #0xb9 + strh r1, [r0] + sub r1, r0, #2 +_02025340: + ldrh r0, [r1] + tst r0, #0x80 + bne _02025340 + bx lr + .align 2, 0 +_02025350: .word 0x040001C0 +_02025354: .word 0x040001C2 + arm_func_end sub_02025318 + + arm_func_start sub_02025358 +sub_02025358: ; 0x02025358 + ldr r2, _02025390 ; =0x040001C0 +_0202535C: + ldrh r0, [r2] + tst r0, #0x80 + bne _0202535C + ldr r0, _02025394 ; =0x040001C2 + mov r1, #0x8100 + strh r1, [r2] + mov r1, #0xab + strh r1, [r0] + sub r1, r0, #2 +_02025380: + ldrh r0, [r1] + tst r0, #0x80 + bne _02025380 + bx lr + .align 2, 0 +_02025390: .word 0x040001C0 +_02025394: .word 0x040001C2 + arm_func_end sub_02025358 + + arm_func_start sub_02025398 +sub_02025398: ; 0x02025398 + ldr r2, _020253D0 ; =0x040001C0 +_0202539C: + ldrh r0, [r2] + tst r0, #0x80 + bne _0202539C + ldr r0, _020253D4 ; =0x040001C2 + mov r1, #0x8100 + strh r1, [r2] + mov r1, #0xc7 + strh r1, [r0] + sub r1, r0, #2 +_020253C0: + ldrh r0, [r1] + tst r0, #0x80 + bne _020253C0 + bx lr + .align 2, 0 +_020253D0: .word 0x040001C0 +_020253D4: .word 0x040001C2 + arm_func_end sub_02025398 + + arm_func_start sub_020253D8 +sub_020253D8: ; 0x020253D8 + stmdb sp!, {r3, lr} + ldr r3, _0202546C ; =0x040001C0 +_020253E0: + ldrh r1, [r3] + tst r1, #0x80 + bne _020253E0 + ldr r1, _02025470 ; =0x040001C2 + mov r2, #0x8900 + strh r2, [r3] + mov r2, #0x9f + strh r2, [r1] + sub r2, r1, #2 +_02025404: + ldrh r1, [r2] + tst r1, #0x80 + bne _02025404 + ldr r1, _02025470 ; =0x040001C2 + mov r2, #0 + strh r2, [r1] + sub lr, r1, #2 +_02025420: + ldrh r1, [lr] + tst r1, #0x80 + bne _02025420 + ldr ip, _02025470 ; =0x040001C2 + mov r2, #0x8100 + ldrh r3, [ip] + mov r1, #0 + strb r3, [r0] + strh r2, [lr] + strh r1, [ip] + sub r2, ip, #2 +_0202544C: + ldrh r1, [r2] + tst r1, #0x80 + bne _0202544C + ldr r1, _02025470 ; =0x040001C2 + ldrh r1, [r1] + strb r1, [r0, #1] + ldmia sp!, {r3, lr} + bx lr + .align 2, 0 +_0202546C: .word 0x040001C0 +_02025470: .word 0x040001C2 + arm_func_end sub_020253D8 arm_func_start sub_02025474 sub_02025474: ; 0x02025474 @@ -38332,28 +45225,97 @@ _02025708: .word 0x027F60A8 _0202570C: .word 0x027F9000 _02025710: .word 0x027F652C arm_func_end sub_020254B4 -_02025714: - .byte 0x10, 0x40, 0x2D, 0xE9, 0x00, 0x00, 0x52, 0xE3, 0x48, 0x00, 0x00, 0x1A - .byte 0x7F, 0x0C, 0x01, 0xE2, 0x00, 0x04, 0xA0, 0xE1, 0x20, 0x48, 0xA0, 0xE1, 0x29, 0x00, 0x54, 0xE3 - .byte 0x04, 0xF1, 0x8F, 0x90, 0x3F, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x00, 0xEA, 0x3B, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0xEA, 0x39, 0x00, 0x00, 0xEA - .byte 0x38, 0x00, 0x00, 0xEA, 0x37, 0x00, 0x00, 0xEA, 0x36, 0x00, 0x00, 0xEA, 0x35, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0x32, 0x00, 0x00, 0xEA, 0x31, 0x00, 0x00, 0xEA - .byte 0x30, 0x00, 0x00, 0xEA, 0x2F, 0x00, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA - .byte 0x16, 0x00, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA - .byte 0x12, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA, 0x10, 0x00, 0x00, 0xEA, 0x0F, 0x00, 0x00, 0xEA - .byte 0x24, 0x00, 0x00, 0xEA, 0x23, 0x00, 0x00, 0xEA, 0x22, 0x00, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA - .byte 0x20, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x1E, 0x00, 0x00, 0xEA, 0x1D, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x00, 0xEA, 0x05, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x00, 0xEA, 0x03, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0x00, 0xEA, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA - .byte 0x64, 0x00, 0x9F, 0xE5, 0xD8, 0x11, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x04, 0x00, 0xA0, 0xE1, 0x03, 0x10, 0xA0, 0xE3, 0x16, 0x00, 0x00, 0xEB, 0x10, 0x00, 0x00, 0xEA - .byte 0x48, 0x30, 0x9F, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0xD8, 0x11, 0x80, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x3C, 0x00, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE1, 0xBC, 0x4D, 0xC3, 0xE1, 0xA8, 0x19, 0x40, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x04, 0x00, 0xA0, 0xE1, 0x04, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xA0, 0xE1, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x00, 0xEB, 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1, 0x28, 0x8E, 0x7F, 0x02 - .byte 0x28, 0x8F, 0x7F, 0x02, 0x2C, 0x8E, 0x7F, 0x02 + + arm_func_start sub_02025714 +sub_02025714: ; 0x02025714 + stmdb sp!, {r4, lr} + cmp r2, #0 + bne _02025844 + and r0, r1, #0x7f00 + mov r0, r0, lsl #8 + mov r4, r0, lsr #0x10 + cmp r4, #0x29 + addls pc, pc, r4, lsl #2 + b _02025838 +_02025738: ; jump table + b _020257E0 ; case 0 + b _020257E0 ; case 1 + b _02025838 ; case 2 + b _02025838 ; case 3 + b _02025838 ; case 4 + b _02025838 ; case 5 + b _02025838 ; case 6 + b _02025838 ; case 7 + b _02025838 ; case 8 + b _02025838 ; case 9 + b _02025838 ; case 10 + b _02025838 ; case 11 + b _02025838 ; case 12 + b _02025838 ; case 13 + b _02025838 ; case 14 + b _02025838 ; case 15 + b _020257E0 ; case 16 + b _020257E0 ; case 17 + b _020257E0 ; case 18 + b _020257E0 ; case 19 + b _020257E0 ; case 20 + b _020257E0 ; case 21 + b _020257E0 ; case 22 + b _020257E0 ; case 23 + b _020257E0 ; case 24 + b _020257E0 ; case 25 + b _02025838 ; case 26 + b _02025838 ; case 27 + b _02025838 ; case 28 + b _02025838 ; case 29 + b _02025838 ; case 30 + b _02025838 ; case 31 + b _02025838 ; case 32 + b _02025838 ; case 33 + b _02025838 ; case 34 + b _020257E0 ; case 35 + b _020257E0 ; case 36 + b _020257E0 ; case 37 + b _020257E0 ; case 38 + b _020257E0 ; case 39 + b _020257E0 ; case 40 + b _020257E0 ; case 41 +_020257E0: + ldr r0, _0202584C ; =0x027F8E28 + ldr r1, [r0, #0x1d8] + cmp r1, #0 + beq _02025800 + mov r0, r4 + mov r1, #3 + bl sub_02025858 + b _02025844 +_02025800: + ldr r3, _02025850 ; =0x027F8F28 + mov r1, #1 + str r1, [r0, #0x1d8] + mov r1, #0 + ldr r0, _02025854 ; =0x027F8E2C + mov r2, r1 + strh r4, [r3, #0xdc] + bl sub_0302BEC4 + cmp r0, #0 + bne _02025844 + mov r0, r4 + mov r1, #4 + bl sub_02025858 + b _02025844 +_02025838: + mov r0, r4 + mov r1, #1 + bl sub_02025858 +_02025844: + ldmia sp!, {r4, lr} + bx lr + .align 2, 0 +_0202584C: .word 0x027F8E28 +_02025850: .word 0x027F8F28 +_02025854: .word 0x027F8E2C + arm_func_end sub_02025714 arm_func_start sub_02025858 sub_02025858: ; 0x02025858 diff --git a/sub/asm/macros/arm7.inc b/sub/asm/include/arm7.inc similarity index 74% rename from sub/asm/macros/arm7.inc rename to sub/asm/include/arm7.inc index 70c8adb7..b9124209 100644 --- a/sub/asm/macros/arm7.inc +++ b/sub/asm/include/arm7.inc @@ -122,3 +122,46 @@ .public sub_0302BD80 .public sub_00FF611C .public sub_027E05D8 +.public sub_03803804 +.public sub_027E91B0 +.public sub_00FFD7A0 +.public sub_00FFD194 +.public sub_037F8598 +.public sub_027E956C +.public sub_03803168 +.public sub_027E8FE4 +.public sub_00FFD1BC +.public sub_037FB63C +.public sub_027E95D0 +.public sub_027E9290 +.public sub_03806610 +.public sub_027E8EBC +.public sub_027E9338 +.public sub_0200E3FC +.public sub_027E9084 +.public sub_037F8000 +.public sub_027E90A8 +.public sub_037FC6D4 +.public sub_030332FC +.public sub_027E9140 +.public sub_03033330 +.public sub_0200E792 +.public sub_0302D7DC +.public sub_00FFDEAC +.public sub_03033318 +.public sub_027EDEC0 +.public sub_03808DF0 +.public sub_027E1C0C +.public sub_037FB32C +.public sub_00FFD364 +.public sub_027E9260 +.public sub_0303336C +.public sub_027E9178 +.public sub_037FB858 +.public sub_0200E56E +.public sub_0302CD3C +.public sub_027E44FC +.public sub_027E8FB0 +.public sub_037FC36C +.public sub_027E1AE8 +.public sub_03033238 diff --git a/sub/asm/macros.inc b/sub/asm/macros.inc new file mode 100644 index 00000000..156b2b09 --- /dev/null +++ b/sub/asm/macros.inc @@ -0,0 +1 @@ + .include "asm/macros/function.inc"