diff options
author | Demki <mordbz@gmail.com> | 2020-04-23 14:07:39 +0300 |
---|---|---|
committer | Demki <mordbz@gmail.com> | 2020-04-23 14:07:39 +0300 |
commit | 1750bfd8497b314cf7ac24d8221ac936a9cfa9c6 (patch) | |
tree | 79a9bac02261b1c787faf07bac0a4cdde3cfea4a | |
parent | 0a26578d1a34ebb557d8704b90beec7874d146f0 (diff) |
dism STD
-rw-r--r-- | asm/STD_arm9.s (renamed from asm/rom2dism.s) | 6114 | ||||
-rw-r--r-- | global.inc | 3 | ||||
-rw-r--r-- | pokediamond.lcf | 2 |
3 files changed, 4905 insertions, 1214 deletions
diff --git a/asm/rom2dism.s b/asm/STD_arm9.s index 7994c2ed..e25cc0c5 100644 --- a/asm/rom2dism.s +++ b/asm/STD_arm9.s @@ -1,8 +1,6 @@ .include "asm/macros.inc" .include "global.inc" - ; TODO: disassemble the rest of the .byte s - .text arm_func_start STD_CompareNString @@ -116,7 +114,7 @@ exit: ; 0x020DE170 ldr r0, [r1, #0xc] cmp r0, #0x0 bne _020DE1AC - bl __destroy_global_chain + bl __destroy_global_chain ldr r0, _020DE1B8 ; =0x021D6F78 ldr r0, [r0, #0x4] cmp r0, #0x0 @@ -137,28 +135,86 @@ __exit: ; 0x020DE1BC stmdb sp!, {r3-r5,lr} ldr r0, _020DE2CC ; =0x021D70D0 bl OS_TryLockMutex -_020DE1C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xF8, 0x00, 0x9F, 0xE5, 0xF8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xF4, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5 - .byte 0x15, 0x00, 0x00, 0xEA, 0xD4, 0x00, 0x9F, 0xE5, 0xD4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x00, 0x10, 0x91, 0xE5, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A - .byte 0xC0, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x10, 0x80, 0xE5 - .byte 0x09, 0x00, 0x00, 0xEA, 0xA0, 0x00, 0x9F, 0xE5, 0x78, 0xB7, 0xFF, 0xEB, 0x9C, 0x00, 0x9F, 0xE5 - .byte 0x9C, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0x98, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x00, 0x30, 0x81, 0xE5, 0x00, 0x20, 0x80, 0xE5, 0x88, 0x40, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xDA, 0x7C, 0x50, 0x9F, 0xE5 - .byte 0x08, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x40, 0xE2, 0x01, 0x01, 0x95, 0xE7, 0x08, 0x10, 0x84, 0xE5 - .byte 0x30, 0xFF, 0x2F, 0xE1, 0x08, 0x00, 0x94, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF7, 0xFF, 0xFF, 0xCA - .byte 0x50, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x00, 0x10, 0x80, 0xE5 - .byte 0x01, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x9F, 0xE5, 0x40, 0xB7, 0xFF, 0xEB, 0x38, 0x00, 0x9F, 0xE5 - .byte 0x00, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A, 0x30, 0xFF, 0x2F, 0xE1 - .byte 0x24, 0x00, 0x9F, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x8D, 0x02, 0x00, 0xEB, 0x0E, 0x39, 0x00, 0xEB, 0x38, 0x80, 0xBD, 0xE8 +_020DE1C8: ; 0x020DE1C8 + cmp r0, #0x0 + bne _020DE1F4 + ldr r0, _020DE2D0 ; =0x021D3498 + ldr r1, _020DE2D4 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x0] + str r2, [r0, #0x0] + b _020DE24C +_020DE1F4: + ldr r0, _020DE2D0 ; =0x021D3498 + ldr r1, _020DE2D4 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, #0x0] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DE224 + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r1, [r0, #0x0] + add r1, r1, #0x1 + str r1, [r0, #0x0] + b _020DE24C +_020DE224: + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_LockMutex + ldr r0, _020DE2D0 ; =0x021D3498 + ldr r1, _020DE2D4 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x0] + str r2, [r0, #0x0] +_020DE24C: + ldr r4, _020DE2DC ; =0x021D6F78 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + ble _020DE280 + ldr r5, _020DE2E0 ; =0x021D6F88 +_020DE260: + ldr r0, [r4, #0x8] + sub r1, r0, #0x1 + ldr r0, [r5, r1, lsl #0x2] + str r1, [r4, #0x8] + blx r0 + ldr r0, [r4, #0x8] + cmp r0, #0x0 + bgt _020DE260 +_020DE280: + ldr r0, _020DE2D8 ; =0x021D70AC + ldr r1, [r0, #0x0] + subs r1, r1, #0x1 + str r1, [r0, #0x0] + bne _020DE29C + ldr r0, _020DE2CC ; =0x021D70D0 + bl OS_UnlockMutex +_020DE29C: + ldr r0, _020DE2DC ; =0x021D6F78 + ldr r0, [r0, #0x0] + cmp r0, #0x0 + beq _020DE2BC + blx r0 + ldr r0, _020DE2DC ; =0x021D6F78 + mov r1, #0x0 + str r1, [r0, #0x0] +_020DE2BC: + mov r0, #0x0 + bl fflush + bl _ExitProcess + ldmia sp!, {r3-r5,pc} + .balign 4 _020DE2CC: .word 0x021D70D0 -_020DE2D0: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x78, 0x6F, 0x1D, 0x02 - .byte 0x88, 0x6F, 0x1D, 0x02 +_020DE2D0: .word 0x021D3498 +_020DE2D4: .word 0x021D7088 +_020DE2D8: .word 0x021D70AC +_020DE2DC: .word 0x021D6F78 +_020DE2E0: .word 0x021D6F88 arm_func_start nan nan: ; 0x020DE2E4 @@ -170,8 +226,8 @@ nan: ; 0x020DE2E4 _020DE2F4: .word 0x02106B78 _020DE2F8: .word _f2d - arm_func_start __flush_line_buffered_output_files -__flush_line_buffered_output_files: ; 0x020DE2FC +arm_func_start __flush_line_buffered_output_files +__flush_line_buffered_output_files: stmdb sp!, {r3-r9,lr} ldr r0, _020DE384 ; =0x02106A58 mov r4, #0x0 @@ -195,8 +251,9 @@ _020DE31C: cmp r1, #0x1 bne _020DE35C bl fflush -_020DE354: - .byte 0x00, 0x00, 0x50, 0xE3, 0x09, 0x40, 0xA0, 0x11 +_020DE354: ; 0x020DE354 + cmp r0, #0x0 + movne r4, r9 _020DE35C: cmp r5, #0x3 movge r0, r7 @@ -228,9 +285,9 @@ _020DE3A8: movs r1, r1, lsr #0x1d beq _020DE3C4 bl fflush -_020DE3BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x09, 0x40, 0xA0, 0x11 +_020DE3BC: ; 0x020DE3BC + cmp r0, #0x0 + movne r4, r9 _020DE3C4: cmp r5, #0x3 movge r0, r7 @@ -270,12 +327,16 @@ __msl_assertion_failed: ; 0x020DE3FC ldmia sp!, {r3-r4,pc} .balign 4 _020DE434: .word 0x02106B3C + +arm_func_start __convert_from_newlines __convert_from_newlines: bx lr - arm_func_start __convert_to_newlines -__convert_to_newlines: ; 0x020DE43C +arm_func_start __convert_to_newlines +__convert_to_newlines: bx lr + +arm_func_start __prep_buffer __prep_buffer: ldr r1, [r0, #0x1c] str r1, [r0, #0x24] @@ -290,8 +351,8 @@ __prep_buffer: str r1, [r0, #0x34] bx lr - arm_func_start __load_buffer -__load_buffer: ; 0x020DE470 +arm_func_start __load_buffer +__load_buffer: stmdb sp!, {r4-r6,lr} mov r5, r2 mov r4, r0 @@ -314,11 +375,23 @@ __load_buffer: ; 0x020DE470 strne r1, [r6, #0x0] cmp r0, #0x0 ldmneia sp!, {r4-r6,pc} -_020DE4C8: - .byte 0x18, 0x10, 0x94, 0xE5, 0x28, 0x00, 0x94, 0xE5 - .byte 0x00, 0x00, 0x81, 0xE0, 0x18, 0x00, 0x84, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x80, 0x09, 0xA0, 0xE1 - .byte 0xA0, 0x0F, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x1C, 0x00, 0x94, 0xE5, 0x28, 0x10, 0x84, 0xE2 - .byte 0xD1, 0xFF, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x70, 0x80, 0xBD, 0xE8 +_020DE4C8: ; 0x020DE4C8 + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x28] + add r0, r1, r0 + str r0, [r4, #0x18] + ldr r0, [r4, #0x4] + mov r0, r0, lsl #0x13 + movs r0, r0, lsr #0x1f + bne _020DE4F4 + ldr r0, [r4, #0x1c] + add r1, r4, #0x28 + bl __convert_to_newlines +_020DE4F4: + mov r0, #0x0 + ldmia sp!, {r4-r6,pc} + +arm_func_start __flush_buffer __flush_buffer: stmdb sp!, {r3-r5,lr} mov r5, r0 @@ -347,15 +420,17 @@ _020DE538: strne r1, [r4, #0x0] cmp r0, #0x0 ldmneia sp!, {r3-r5,pc} -_020DE564: - .byte 0x18, 0x10, 0x95, 0xE5, 0x28, 0x00, 0x95, 0xE5, 0x00, 0x00, 0x81, 0xE0 - .byte 0x18, 0x00, 0x85, 0xE5 +_020DE564: ; 0x020DE564 + ldr r1, [r5, #0x18] + ldr r0, [r5, #0x28] + add r0, r1, r0 + str r0, [r5, #0x18] _020DE574: mov r0, r5 bl __prep_buffer -_020DE57C: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xE8 +_020DE57C: ; 0x020DE57C + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} arm_func_start fread fread: ; 0x020DE584 @@ -373,24 +448,65 @@ fread: ; 0x020DE584 add r0, r5, r4 mov r8, r2 bl OS_TryLockMutex -_020DE5BC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0xB8, 0x00, 0x9F, 0xE5, 0xB8, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 - .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x94, 0x00, 0x9F, 0xE5, 0x94, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x80, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 - .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7B, 0xB6, 0xFF, 0xEB - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x5C, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x58, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x0A, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x07, 0x30, 0xA0, 0xE1 - .byte 0x0E, 0x00, 0x00, 0xEB, 0x30, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7 - .byte 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0 - .byte 0x4A, 0xB6, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF0, 0x87, 0xBD, 0xE8 +_020DE5BC: ; 0x020DE5BC + cmp r0, #0x0 + bne _020DE5E8 + ldr r0, _020DE684 ; =0x021D3498 + ldr r2, _020DE688 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DE68C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DE640 +_020DE5E8: + ldr r0, _020DE684 ; =0x021D3498 + ldr r1, _020DE688 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DE618 + ldr r1, _020DE68C ; =0x021D70AC + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DE640 +_020DE618: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DE684 ; =0x021D3498 + ldr r2, _020DE688 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DE68C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DE640: + mov r0, r10 + mov r1, r9 + mov r2, r8 + mov r3, r7 + bl __fread + ldr r1, _020DE68C ; =0x021D70AC + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DE674 + add r0, r5, r4 + bl OS_UnlockMutex +_020DE674: + mov r0, r7 + ldmia sp!, {r4-r10,pc} + .balign 4 _020DE67C: .word 0x02106A58 _020DE680: .word 0x021D70D0 -_020DE684: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 +_020DE684: .word 0x021D3498 +_020DE688: .word 0x021D7088 +_020DE68C: .word 0x021D70AC arm_func_start __fread __fread: ; 0x020DE690 @@ -403,58 +519,232 @@ __fread: ; 0x020DE690 mov r1, #0x0 mov r4, r2 bl fwide -_020DE6B4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xE0, 0xE3, 0x4A, 0x1A, 0x00, 0xEB, 0x98, 0x04, 0x14, 0xE0, 0x06, 0x00, 0x00, 0x0A - .byte 0x0D, 0x00, 0xD7, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x97, 0xE5 - .byte 0x01, 0x0B, 0xA0, 0xE1, 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x00, 0x00, 0xA0, 0xE3, 0xF8, 0x87, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1 - .byte 0x81, 0x0C, 0xA0, 0x11, 0x20, 0x0F, 0xA0, 0x11, 0x08, 0x10, 0x97, 0xE5, 0x02, 0x00, 0x50, 0x13 - .byte 0x01, 0x60, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x60, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x02, 0x00, 0x80, 0xE3 - .byte 0x08, 0x00, 0x87, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x2A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2 - .byte 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8, 0x04, 0x00, 0x97, 0xE5, 0x80, 0x0C, 0xA0, 0xE1 - .byte 0x20, 0x0F, 0xA0, 0xE1, 0x01, 0x00, 0x10, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xDA, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0xD0, 0x8D, 0xE2, 0x28, 0x00, 0x87, 0xE5, 0xF8, 0x87, 0xBD, 0xE8 - .byte 0x00, 0x00, 0x54, 0xE3, 0x00, 0x50, 0xA0, 0xE3, 0x2D, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0x28, 0x00, 0x00, 0x3A - .byte 0x05, 0xA0, 0xA0, 0xE1, 0x07, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x04, 0x1A, 0x00, 0xEB - .byte 0x01, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x97, 0xE5, 0x06, 0x00, 0x00, 0x1A, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0x20, 0x0E, 0x87, 0xE0, 0xBE, 0x00, 0xD0, 0xE1, 0x02, 0x50, 0x85, 0xE2, 0x02, 0x40, 0x44, 0xE2 - .byte 0xB2, 0x00, 0xC9, 0xE0, 0x05, 0x00, 0x00, 0xEA, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0x87, 0xE0 - .byte 0x0F, 0x00, 0xD0, 0xE5, 0x01, 0x50, 0x85, 0xE2, 0x01, 0x40, 0x44, 0xE2, 0x01, 0x00, 0xC9, 0xE4 - .byte 0x08, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x54, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x40, 0xE2, 0x07, 0x10, 0xC1, 0xE3, 0x07, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x81, 0xE1 - .byte 0x08, 0x00, 0x87, 0xE5, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x97, 0xE5, 0x80, 0x0E, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xA0, 0xE1, 0x03, 0x00, 0x50, 0xE3, 0xDD, 0xFF, 0xFF, 0x2A, 0x08, 0x00, 0x97, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3, 0x30, 0x00, 0x97, 0x05 - .byte 0x28, 0x00, 0x87, 0x05, 0x00, 0x00, 0x54, 0xE3, 0x2E, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x97, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x56, 0x03, 0x2A, 0x00, 0x00, 0x0A, 0x00, 0xA0, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x1A, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x0A, 0x20, 0xA0, 0xE1, 0xF0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x0B, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC7, 0x05 - .byte 0x03, 0x00, 0x00, 0x0A, 0x08, 0x10, 0x97, 0xE5, 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5 - .byte 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x14, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x97, 0xE5, 0x00, 0x00, 0x8D, 0xE5, 0x04, 0x00, 0x50, 0xE1 - .byte 0x00, 0x40, 0x8D, 0x85, 0x24, 0x10, 0x97, 0xE5, 0x00, 0x20, 0x9D, 0xE5, 0x09, 0x00, 0xA0, 0xE1 - .byte 0xCC, 0x02, 0x00, 0xEB, 0x00, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x97, 0xE5, 0x02, 0x40, 0x54, 0xE0 - .byte 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x87, 0xE5, 0x28, 0x10, 0x97, 0xE5, 0x00, 0x00, 0x9D, 0xE5 - .byte 0x02, 0x90, 0x89, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x02, 0x50, 0x85, 0xE0, 0x28, 0x00, 0x87, 0xE5 - .byte 0x00, 0x00, 0x56, 0x13, 0xD5, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x20, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x56, 0xE3, 0x1E, 0x00, 0x00, 0x1A, 0x1C, 0x60, 0x97, 0xE5, 0x20, 0xA0, 0x97, 0xE5 - .byte 0x00, 0x10, 0x8D, 0xE2, 0x1C, 0x90, 0x87, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x20, 0x40, 0x87, 0xE5, 0xC1, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x0D, 0x00, 0xC7, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x08, 0x10, 0x97, 0xE5 - .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x87, 0xE5, 0x0C, 0x00, 0xC7, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x87, 0xE5, 0x00, 0x10, 0x9D, 0xE5, 0x07, 0x00, 0xA0, 0xE1, 0x1C, 0x60, 0x87, 0xE5 - .byte 0x20, 0xA0, 0x87, 0xE5, 0x01, 0x50, 0x85, 0xE0, 0xA0, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x87, 0xE5, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0xA0, 0xE1, 0x2E, 0x35, 0x00, 0xEB - .byte 0x04, 0xD0, 0x8D, 0xE2, 0xF8, 0x87, 0xBD, 0xE8 +_020DE6B4: ; 0x020DE6B4 + cmp r0, #0x0 + bne _020DE6C8 + mov r0, r7 + mvn r1, #0x0 + bl fwide +_020DE6C8: + muls r4, r8, r4 + beq _020DE6EC + ldrb r0, [r7, #0xd] + cmp r0, #0x0 + bne _020DE6EC + ldr r1, [r7, #0x4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _020DE6F8 +_020DE6EC: + add sp, sp, #0x4 + mov r0, #0x0 + ldmia sp!, {r3-r10,pc} +_020DE6F8: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + ldr r1, [r7, #0x8] + cmpne r0, #0x2 + mov r6, #0x1 + mov r0, r1, lsl #0x1d + movne r6, #0x0 + movs r0, r0, lsr #0x1d + bne _020DE74C + ldr r0, [r7, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #0x1 + beq _020DE74C + bic r0, r1, #0x7 + orr r0, r0, #0x2 + str r0, [r7, #0x8] + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE74C: + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + bhs _020DE778 + mov r0, #0x1 + strb r0, [r7, #0xd] + mov r0, #0x0 + add sp, sp, #0x4 + str r0, [r7, #0x28] + ldmia sp!, {r3-r10,pc} +_020DE778: + ldr r0, [r7, #0x4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + tst r0, #0x1 + beq _020DE7B0 + bl __flush_line_buffered_output_files +_020DE790: ; 0x020DE790 + cmp r0, #0x0 + beq _020DE7B0 + mov r0, #0x1 + strb r0, [r7, #0xd] + mov r0, #0x0 + add sp, sp, #0x4 + str r0, [r7, #0x28] + ldmia sp!, {r3-r10,pc} +_020DE7B0: + cmp r4, #0x0 + mov r5, #0x0 + beq _020DE874 + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + blo _020DE874 + mov r10, r5 +_020DE7D4: + mov r0, r7 + mov r1, r10 + bl fwide + cmp r0, #0x1 + ldr r0, [r7, #0x8] + bne _020DE808 + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #0x1c + ldrh r0, [r0, #0xe] + add r5, r5, #0x2 + sub r4, r4, #0x2 + strh r0, [r9], #0x2 + b _020DE820 +_020DE808: + mov r0, r0, lsl #0x1d + add r0, r7, r0, lsr #0x1d + ldrb r0, [r0, #0xf] + add r5, r5, #0x1 + sub r4, r4, #0x1 + strb r0, [r9], #0x1 +_020DE820: + ldr r1, [r7, #0x8] + cmp r4, #0x0 + mov r0, r1, lsl #0x1d + mov r0, r0, lsr #0x1d + sub r0, r0, #0x1 + bic r1, r1, #0x7 + and r0, r0, #0x7 + orr r0, r1, r0 + str r0, [r7, #0x8] + beq _020DE85C + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x3 + bhs _020DE7D4 +_020DE85C: + ldr r0, [r7, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + ldreq r0, [r7, #0x30] + streq r0, [r7, #0x28] +_020DE874: + cmp r4, #0x0 + beq _020DE938 + ldr r0, [r7, #0x28] + cmp r0, #0x0 + cmpeq r6, #0x0 + beq _020DE938 + mov r10, #0x0 +_020DE890: + ldr r0, [r7, #0x28] + cmp r0, #0x0 + bne _020DE8E4 + mov r0, r7 + mov r1, r10 + mov r2, r10 + bl __load_buffer +_020DE8AC: ; 0x020DE8AC + cmp r0, #0x0 + beq _020DE8E4 + cmp r0, #0x1 + mov r0, #0x1 + streqb r0, [r7, #0xd] + beq _020DE8D4 + ldr r1, [r7, #0x8] + bic r1, r1, #0x7 + str r1, [r7, #0x8] + strb r0, [r7, #0xc] +_020DE8D4: + mov r0, #0x0 + str r0, [r7, #0x28] + mov r4, #0x0 + b _020DE938 +_020DE8E4: + ldr r0, [r7, #0x28] + str r0, [sp, #0x0] + cmp r0, r4 + strhi r4, [sp, #0x0] + ldr r1, [r7, #0x24] + ldr r2, [sp, #0x0] + mov r0, r9 + bl memcpy + ldr r2, [sp, #0x0] + ldr r0, [r7, #0x24] + subs r4, r4, r2 + add r0, r0, r2 + str r0, [r7, #0x24] + ldr r1, [r7, #0x28] + ldr r0, [sp, #0x0] + add r9, r9, r2 + sub r0, r1, r0 + add r5, r5, r2 + str r0, [r7, #0x28] + cmpne r6, #0x0 + bne _020DE890 +_020DE938: + cmp r4, #0x0 + beq _020DE9C4 + cmp r6, #0x0 + bne _020DE9C4 + ldr r6, [r7, #0x1c] + ldr r10, [r7, #0x20] + add r1, sp, #0x0 + str r9, [r7, #0x1c] + mov r0, r7 + mov r2, #0x1 + str r4, [r7, #0x20] + bl __load_buffer +_020DE968: ; 0x020DE968 + cmp r0, #0x0 + beq _020DE9A4 + cmp r0, #0x1 + mov r0, #0x1 + bne _020DE98C + strb r0, [r7, #0xd] + mov r0, #0x0 + str r0, [r7, #0x28] + b _020DE9A4 +_020DE98C: + ldr r1, [r7, #0x8] + bic r1, r1, #0x7 + str r1, [r7, #0x8] + strb r0, [r7, #0xc] + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE9A4: + ldr r1, [sp, #0x0] + mov r0, r7 + str r6, [r7, #0x1c] + str r10, [r7, #0x20] + add r5, r5, r1 + bl __prep_buffer +_020DE9BC: ; 0x020DE9BC + mov r0, #0x0 + str r0, [r7, #0x28] +_020DE9C4: + mov r0, r5 + mov r1, r8 + bl _u32_div_f + add sp, sp, #0x4 + ldmia sp!, {r3-r10,pc} + +arm_func_start __fwrite __fwrite: stmdb sp!, {r3-r11,lr} sub sp, sp, #0x8 @@ -465,49 +755,186 @@ __fwrite: mov r1, #0x0 mov r4, r2 bl fwide -_020DE9FC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xE0, 0xE3, 0x78, 0x19, 0x00, 0xEB - .byte 0x00, 0x00, 0x9D, 0xE5, 0x90, 0x04, 0x15, 0xE0, 0x06, 0x00, 0x00, 0x0A, 0x0D, 0x00, 0xD9, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A, 0x04, 0x10, 0x99, 0xE5, 0x01, 0x0B, 0xA0, 0xE1 - .byte 0xA0, 0x0E, 0xB0, 0xE1, 0x02, 0x00, 0x00, 0x1A, 0x08, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xF8, 0x8F, 0xBD, 0xE8, 0x81, 0x09, 0xA0, 0xE1, 0xA0, 0x0F, 0xB0, 0xE1, 0x81, 0x0C, 0xA0, 0x11 - .byte 0x20, 0x0F, 0xA0, 0x11, 0x02, 0x00, 0x50, 0x13, 0x08, 0x10, 0x99, 0xE5, 0x01, 0x00, 0x50, 0x13 - .byte 0x01, 0x80, 0xA0, 0xE3, 0x81, 0x0E, 0xA0, 0xE1, 0x00, 0x80, 0xA0, 0x13, 0xA0, 0x0E, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0D, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x10, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x07, 0x00, 0xC1, 0xE3, 0x01, 0x10, 0x80, 0xE3 - .byte 0x09, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x89, 0xE5, 0x68, 0xFE, 0xFF, 0xEB, 0x08, 0x00, 0x99, 0xE5 - .byte 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x08, 0xD0, 0x8D, 0xE2 - .byte 0x28, 0x00, 0x89, 0xE5, 0xF8, 0x8F, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x46, 0x00, 0x00, 0x0A, 0x1C, 0x00, 0x99, 0xE5, 0x24, 0x20, 0x99, 0xE5, 0x00, 0x00, 0x52, 0xE1 - .byte 0x00, 0x00, 0x58, 0x03, 0x41, 0x00, 0x00, 0x0A, 0x20, 0x10, 0x99, 0xE5, 0x00, 0x00, 0x42, 0xE0 - .byte 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5, 0x0A, 0xB0, 0xA0, 0xE3, 0x00, 0x40, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x99, 0xE5, 0x04, 0x70, 0xA0, 0xE1, 0x04, 0x00, 0x8D, 0xE5, 0x05, 0x00, 0x50, 0xE1 - .byte 0x04, 0x50, 0x8D, 0x85, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x50, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x0A, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1, 0x68, 0x02, 0x00, 0xEB - .byte 0x00, 0x70, 0xB0, 0xE1, 0x01, 0x00, 0x87, 0x12, 0x0A, 0x00, 0x40, 0x10, 0x04, 0x00, 0x8D, 0x15 - .byte 0x04, 0x20, 0x9D, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0x0C, 0x00, 0x00, 0x0A, 0x24, 0x00, 0x99, 0xE5 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x33, 0x02, 0x00, 0xEB, 0x04, 0x20, 0x9D, 0xE5, 0x24, 0x00, 0x99, 0xE5 - .byte 0x02, 0xA0, 0x8A, 0xE0, 0x02, 0x00, 0x80, 0xE0, 0x24, 0x00, 0x89, 0xE5, 0x28, 0x10, 0x99, 0xE5 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x02, 0x50, 0x45, 0xE0, 0x00, 0x00, 0x41, 0xE0, 0x28, 0x00, 0x89, 0xE5 - .byte 0x28, 0x00, 0x99, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x99, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xB0, 0xE1 - .byte 0x09, 0x00, 0x00, 0x1A, 0x09, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x4E, 0xFE, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x28, 0x50, 0x89, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x55, 0xE3, 0x00, 0x60, 0x86, 0xE0, 0x00, 0x00, 0x58, 0x13, 0xC3, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x55, 0xE3, 0x18, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x58, 0xE3, 0x16, 0x00, 0x00, 0x1A - .byte 0x1C, 0x40, 0x99, 0xE5, 0x20, 0x70, 0x99, 0xE5, 0x05, 0x20, 0x8A, 0xE0, 0x1C, 0xA0, 0x89, 0xE5 - .byte 0x20, 0x50, 0x89, 0xE5, 0x04, 0x10, 0x8D, 0xE2, 0x09, 0x00, 0xA0, 0xE1, 0x24, 0x20, 0x89, 0xE5 - .byte 0x35, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x9D, 0x05, 0x00, 0x60, 0x86, 0x00 - .byte 0x03, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC9, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x28, 0x00, 0x89, 0xE5, 0x1C, 0x40, 0x89, 0xE5, 0x09, 0x00, 0xA0, 0xE1, 0x20, 0x70, 0x89, 0xE5 - .byte 0xFA, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x89, 0xE5, 0x04, 0x00, 0x99, 0xE5 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x80, 0x0C, 0xA0, 0xE1, 0x20, 0x0F, 0xA0, 0xE1, 0x02, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x13, 0x28, 0x00, 0x89, 0x15, 0x06, 0x00, 0xA0, 0xE1, 0x82, 0x34, 0x00, 0xEB - .byte 0x08, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020DE9FC: ; 0x020DE9FC + cmp r0, #0x0 + bne _020DEA10 + mov r0, r9 + mvn r1, #0x0 + bl fwide +_020DEA10: + ldr r0, [sp, #0x0] + muls r5, r0, r4 + beq _020DEA38 + ldrb r0, [r9, #0xd] + cmp r0, #0x0 + bne _020DEA38 + ldr r1, [r9, #0x4] + mov r0, r1, lsl #0x16 + movs r0, r0, lsr #0x1d + bne _020DEA44 +_020DEA38: + add sp, sp, #0x8 + mov r0, #0x0 + ldmia sp!, {r3-r11,pc} +_020DEA44: + mov r0, r1, lsl #0x13 + movs r0, r0, lsr #0x1f + movne r0, r1, lsl #0x19 + movne r0, r0, lsr #0x1e + cmpne r0, #0x2 + ldr r1, [r9, #0x8] + cmpne r0, #0x1 + mov r8, #0x1 + mov r0, r1, lsl #0x1d + movne r8, #0x0 + movs r0, r0, lsr #0x1d + bne _020DEA9C + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x1b + mov r0, r0, lsr #0x1d + tst r0, #0x2 + beq _020DEA9C + bic r0, r1, #0x7 + orr r1, r0, #0x1 + mov r0, r9 + str r1, [r9, #0x8] + bl __prep_buffer +_020DEA9C: + ldr r0, [r9, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x1 + beq _020DEAC8 + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r0, #0x0 + add sp, sp, #0x8 + str r0, [r9, #0x28] + ldmia sp!, {r3-r11,pc} +_020DEAC8: + cmp r5, #0x0 + mov r6, #0x0 + beq _020DEBF0 + ldr r0, [r9, #0x1c] + ldr r2, [r9, #0x24] + cmp r2, r0 + cmpeq r8, #0x0 + beq _020DEBF0 + ldr r1, [r9, #0x20] + sub r0, r2, r0 + sub r0, r1, r0 + str r0, [r9, #0x28] + mov r11, #0xa + mov r4, #0x0 +_020DEB00: + ldr r0, [r9, #0x28] + mov r7, r4 + str r0, [sp, #0x4] + cmp r0, r5 + strhi r5, [sp, #0x4] + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + cmp r0, #0x1 + bne _020DEB50 + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020DEB50 + mov r0, r10 + mov r1, r11 + bl __memrchr + movs r7, r0 + addne r0, r7, #0x1 + subne r0, r0, r10 + strne r0, [sp, #0x4] +_020DEB50: + ldr r2, [sp, #0x4] + cmp r2, #0x0 + beq _020DEB90 + ldr r0, [r9, #0x24] + mov r1, r10 + bl memcpy + ldr r2, [sp, #0x4] + ldr r0, [r9, #0x24] + add r10, r10, r2 + add r0, r0, r2 + str r0, [r9, #0x24] + ldr r1, [r9, #0x28] + ldr r0, [sp, #0x4] + sub r5, r5, r2 + sub r0, r1, r0 + str r0, [r9, #0x28] +_020DEB90: + ldr r0, [r9, #0x28] + cmp r0, #0x0 + beq _020DEBB4 + cmp r7, #0x0 + bne _020DEBB4 + ldr r0, [r9, #0x4] + mov r0, r0, lsl #0x19 + movs r0, r0, lsr #0x1e + bne _020DEBDC +_020DEBB4: + mov r0, r9 + mov r1, #0x0 + bl __flush_buffer +_020DEBC0: ; 0x020DEBC0 + cmp r0, #0x0 + beq _020DEBDC + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r5, #0x0 + str r5, [r9, #0x28] + b _020DEBF0 +_020DEBDC: + ldr r0, [sp, #0x4] + cmp r5, #0x0 + add r6, r6, r0 + cmpne r8, #0x0 + bne _020DEB00 +_020DEBF0: + cmp r5, #0x0 + beq _020DEC5C + cmp r8, #0x0 + bne _020DEC5C + ldr r4, [r9, #0x1c] + ldr r7, [r9, #0x20] + add r2, r10, r5 + str r10, [r9, #0x1c] + str r5, [r9, #0x20] + add r1, sp, #0x4 + mov r0, r9 + str r2, [r9, #0x24] + bl __flush_buffer +_020DEC24: ; 0x020DEC24 + cmp r0, #0x0 + ldreq r0, [sp, #0x4] + addeq r6, r6, r0 + beq _020DEC44 + mov r0, #0x1 + strb r0, [r9, #0xd] + mov r0, #0x0 + str r0, [r9, #0x28] +_020DEC44: + str r4, [r9, #0x1c] + mov r0, r9 + str r7, [r9, #0x20] + bl __prep_buffer +_020DEC54: ; 0x020DEC54 + mov r0, #0x0 + str r0, [r9, #0x28] +_020DEC5C: + ldr r0, [r9, #0x4] + ldr r1, [sp, #0x0] + mov r0, r0, lsl #0x19 + mov r0, r0, lsr #0x1e + cmp r0, #0x2 + movne r0, #0x0 + strne r0, [r9, #0x28] + mov r0, r6 + bl _u32_div_f + add sp, sp, #0x8 + ldmia sp!, {r3-r11,pc} arm_func_start fclose fclose: ; 0x020DEC88 @@ -515,16 +942,36 @@ fclose: ; 0x020DEC88 movs r5, r0 mvneq r0, #0x0 ldmeqia sp!, {r3-r5,pc} -_020DEC98: - .byte 0x04, 0x10, 0x95, 0xE5, 0x01, 0x1B, 0xA0, 0xE1 - .byte 0xA1, 0x1E, 0xB0, 0xE1, 0x00, 0x00, 0xA0, 0x03, 0x38, 0x80, 0xBD, 0x08, 0x12, 0x00, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x95, 0xE5, 0x44, 0x10, 0x95, 0xE5, 0x31, 0xFF, 0x2F, 0xE1 - .byte 0x04, 0x10, 0x95, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x0E, 0x1D, 0xC1, 0xE3, 0x04, 0x10, 0x85, 0xE5 - .byte 0x00, 0x20, 0x85, 0xE5, 0x08, 0x10, 0x95, 0xE5, 0x01, 0x1E, 0xA0, 0xE1, 0xA1, 0x1F, 0xB0, 0xE1 - .byte 0x01, 0x00, 0x42, 0x12, 0x38, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x54, 0xE3, 0x00, 0x00, 0x50, 0x03 - .byte 0x01, 0x20, 0xA0, 0x13, 0x00, 0x00, 0x62, 0xE2, 0x38, 0x80, 0xBD, 0xE8 - - arm_func_start fflush +_020DEC98: ; 0x020DEC98 + ldr r1, [r5, #0x4] + mov r1, r1, lsl #0x16 + movs r1, r1, lsr #0x1d + moveq r0, #0x0 + ldmeqia sp!, {r3-r5,pc} +_020DECAC: ; 0x020DECAC + bl fflush + mov r4, r0 + ldr r0, [r5, #0x0] + ldr r1, [r5, #0x44] + blx r1 + ldr r1, [r5, #0x4] + mov r2, #0x0 + bic r1, r1, #0x380 + str r1, [r5, #0x4] + str r2, [r5, #0x0] + ldr r1, [r5, #0x8] + mov r1, r1, lsl #0x1c + movs r1, r1, lsr #0x1f + subne r0, r2, #0x1 + ldmneia sp!, {r3-r5,pc} +_020DECE8: ; 0x020DECE8 + cmp r4, #0x0 + cmpeq r0, #0x0 + movne r2, #0x1 + rsb r0, r2, #0x0 + ldmia sp!, {r3-r5,pc} + +arm_func_start fflush fflush: stmdb sp!, {r4,lr} movs r4, r0 @@ -548,18 +995,49 @@ _020DED34: cmp r0, #0x1 moveq r0, #0x0 ldmeqia sp!, {r4,pc} -_020DED48: - .byte 0x08, 0x00, 0x94, 0xE5, 0x80, 0x1E, 0xA0, 0xE1 - .byte 0xA1, 0x1E, 0xA0, 0xE1, 0x03, 0x00, 0x51, 0xE3, 0x07, 0x00, 0xC0, 0x23, 0x02, 0x00, 0x80, 0x23 - .byte 0x08, 0x00, 0x84, 0x25, 0x08, 0x00, 0x94, 0xE5, 0x80, 0x0E, 0xA0, 0xE1, 0xA0, 0x0E, 0xA0, 0xE1 - .byte 0x02, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x28, 0x00, 0x84, 0x05, 0x08, 0x00, 0x94, 0xE5 - .byte 0x80, 0x1E, 0xA0, 0xE1, 0xA1, 0x1E, 0xA0, 0xE1, 0x01, 0x00, 0x51, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x07, 0x00, 0xC0, 0xE3, 0x08, 0x00, 0x84, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0xD3, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x10, 0xA0, 0xE3, 0x0D, 0x10, 0xC4, 0xE5 - .byte 0x28, 0x00, 0x84, 0xE5, 0x01, 0x00, 0x40, 0xE2, 0x10, 0x80, 0xBD, 0xE8, 0x08, 0x10, 0x94, 0xE5 - .byte 0x07, 0x10, 0xC1, 0xE3, 0x08, 0x10, 0x84, 0xE5, 0x18, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x84, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 +_020DED48: ; 0x020DED48 + ldr r0, [r4, #0x8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x3 + biccs r0, r0, #0x7 + orrcs r0, r0, #0x2 + strcs r0, [r4, #0x8] + ldr r0, [r4, #0x8] + mov r0, r0, lsl #0x1d + mov r0, r0, lsr #0x1d + cmp r0, #0x2 + moveq r0, #0x0 + streq r0, [r4, #0x28] + ldr r0, [r4, #0x8] + mov r1, r0, lsl #0x1d + mov r1, r1, lsr #0x1d + cmp r1, #0x1 + beq _020DEDA0 + bic r0, r0, #0x7 + str r0, [r4, #0x8] + mov r0, #0x0 + ldmia sp!, {r4,pc} +_020DEDA0: + mov r0, r4 + mov r1, #0x0 + bl __flush_buffer +_020DEDAC: ; 0x020DEDAC + cmp r0, #0x0 + mov r0, #0x0 + beq _020DEDCC + mov r1, #0x1 + strb r1, [r4, #0xd] + str r0, [r4, #0x28] + sub r0, r0, #0x1 + ldmia sp!, {r4,pc} +_020DEDCC: + ldr r1, [r4, #0x8] + bic r1, r1, #0x7 + str r1, [r4, #0x8] + str r0, [r4, #0x18] + str r0, [r4, #0x28] + ldmia sp!, {r4,pc} arm_func_start _ftell _ftell: ; 0x020DEDE4 @@ -620,25 +1098,64 @@ _020DEE98: ldr r5, _020DEF6C ; =0x021D70D0 add r0, r5, r4 bl OS_TryLockMutex -_020DEEAC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0xB4, 0x00, 0x9F, 0xE5, 0xB4, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5 - .byte 0xB0, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7 - .byte 0x06, 0x11, 0x80, 0xE7, 0x15, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x9F, 0xE5, 0x90, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x00, 0x90, 0xE5, 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x7C, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2 - .byte 0x06, 0x01, 0x81, 0xE7, 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x3F, 0xB4, 0xFF, 0xEB - .byte 0x58, 0x00, 0x9F, 0xE5, 0x58, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x54, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x07, 0x00, 0xA0, 0xE1, 0xAA, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x70, 0xA0, 0xE1 - .byte 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7, 0x01, 0x00, 0x00, 0x1A - .byte 0x04, 0x00, 0x85, 0xE0, 0x11, 0xB4, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x80, 0xBD, 0xE8 +_020DEEAC: ; 0x020DEEAC + cmp r0, #0x0 + bne _020DEED8 + ldr r0, _020DEF70 ; =0x021D3498 + ldr r2, _020DEF74 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DEF78 ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DEF30 +_020DEED8: + ldr r0, _020DEF70 ; =0x021D3498 + ldr r1, _020DEF74 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DEF08 + ldr r1, _020DEF78 ; =0x021D70AC + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DEF30 +_020DEF08: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DEF70 ; =0x021D3498 + ldr r2, _020DEF74 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DEF78 ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DEF30: + mov r0, r7 + bl _ftell + ldr r1, _020DEF78 ; =0x021D70AC + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DEF58 + add r0, r5, r4 + bl OS_UnlockMutex +_020DEF58: + mov r0, r7 + ldmia sp!, {r3-r7,pc} + .balign 4 _020DEF60: .word 0x02106A58 _020DEF64: .word 0x02106AA4 _020DEF68: .word 0x02106AF0 _020DEF6C: .word 0x021D70D0 -_020DEF70: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 +_020DEF70: .word 0x021D3498 +_020DEF74: .word 0x021D7088 +_020DEF78: .word 0x021D70AC arm_func_start _fseek _fseek: ; 0x020DEF7C @@ -669,11 +1186,20 @@ _020DEFC8: bne _020DF018 mov r1, #0x0 bl __flush_buffer -_020DEFE4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3 - .byte 0x0D, 0x00, 0xC5, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x60, 0x01, 0x9F, 0xE5, 0x28, 0x10, 0xA0, 0xE3 - .byte 0x28, 0x20, 0x85, 0xE5, 0x00, 0x10, 0x80, 0xE5, 0x29, 0x00, 0x41, 0xE2, 0x38, 0x40, 0xBD, 0xE8 - .byte 0x10, 0xD0, 0x8D, 0xE2, 0x1E, 0xFF, 0x2F, 0xE1 +_020DEFE4: ; 0x020DEFE4 + cmp r0, #0x0 + beq _020DF018 + mov r0, #0x1 + strb r0, [r5, #0xd] + mov r2, #0x0 + ldr r0, _020DF160 ; =0x021D74A8 + mov r1, #0x28 + str r2, [r5, #0x28] + str r1, [r0, #0x0] + sub r0, r1, #0x29 + ldmia sp!, {r3-r5,lr} + add sp, sp, #0x10 + bx lr _020DF018: cmp r4, #0x1 bne _020DF038 @@ -767,7 +1293,7 @@ _020DF150: .balign 4 _020DF160: .word 0x021D74A8 - arm_func_start fseek +arm_func_start fseek fseek: stmdb sp!, {r3-r9,lr} ldr r3, _020DF274 ; =0x02106A58 @@ -791,26 +1317,66 @@ _020DF1A4: ldr r5, _020DF280 ; =0x021D70D0 add r0, r5, r4 bl OS_TryLockMutex -_020DF1B8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0xBC, 0x00, 0x9F, 0xE5, 0xBC, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0xB8, 0x00, 0x9F, 0xE5 - .byte 0x6C, 0x30, 0x91, 0xE5, 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7 - .byte 0x15, 0x00, 0x00, 0xEA, 0x98, 0x00, 0x9F, 0xE5, 0x98, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5 - .byte 0x06, 0x11, 0x91, 0xE7, 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A - .byte 0x84, 0x10, 0x9F, 0xE5, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x80, 0xE2, 0x06, 0x01, 0x81, 0xE7 - .byte 0x09, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x85, 0xE0, 0x7C, 0xB3, 0xFF, 0xEB, 0x60, 0x00, 0x9F, 0xE5 - .byte 0x60, 0x20, 0x9F, 0xE5, 0x04, 0x10, 0x90, 0xE5, 0x5C, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x91, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x06, 0x31, 0x82, 0xE7, 0x06, 0x11, 0x80, 0xE7, 0x09, 0x00, 0xA0, 0xE1 - .byte 0x08, 0x10, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x4B, 0xFF, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x70, 0xA0, 0xE1, 0x06, 0x01, 0x91, 0xE7, 0x01, 0x00, 0x50, 0xE2, 0x06, 0x01, 0x81, 0xE7 - .byte 0x01, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x85, 0xE0, 0x4C, 0xB3, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1 - .byte 0xF8, 0x83, 0xBD, 0xE8 +_020DF1B8: ; 0x020DF1B8 + cmp r0, #0x0 + bne _020DF1E4 + ldr r0, _020DF284 ; =0x021D3498 + ldr r2, _020DF288 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DF28C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] + b _020DF23C +_020DF1E4: + ldr r0, _020DF284 ; =0x021D3498 + ldr r1, _020DF288 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, r6, lsl #0x2] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020DF214 + ldr r1, _020DF28C ; =0x021D70AC + ldr r0, [r1, r6, lsl #0x2] + add r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + b _020DF23C +_020DF214: + add r0, r5, r4 + bl OS_LockMutex + ldr r0, _020DF284 ; =0x021D3498 + ldr r2, _020DF288 ; =0x021D7088 + ldr r1, [r0, #0x4] + ldr r0, _020DF28C ; =0x021D70AC + ldr r3, [r1, #0x6c] + mov r1, #0x1 + str r3, [r2, r6, lsl #0x2] + str r1, [r0, r6, lsl #0x2] +_020DF23C: + mov r0, r9 + mov r1, r8 + mov r2, r7 + bl _fseek + ldr r1, _020DF28C ; =0x021D70AC + mov r7, r0 + ldr r0, [r1, r6, lsl #0x2] + subs r0, r0, #0x1 + str r0, [r1, r6, lsl #0x2] + bne _020DF26C + add r0, r5, r4 + bl OS_UnlockMutex +_020DF26C: + mov r0, r7 + ldmia sp!, {r3-r9,pc} + .balign 4 _020DF274: .word 0x02106A58 _020DF278: .word 0x02106AA4 _020DF27C: .word 0x02106AF0 _020DF280: .word 0x021D70D0 -_020DF284: - .byte 0x98, 0x34, 0x1D, 0x02, 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02 +_020DF284: .word 0x021D3498 +_020DF288: .word 0x021D7088 +_020DF28C: .word 0x021D70AC arm_func_start rewind rewind: ; 0x020DF290 @@ -820,11 +1386,12 @@ rewind: ; 0x020DF290 mov r2, r1 strb r1, [r4, #0xd] bl fseek -_020DF2A8: - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0D, 0x00, 0xC4, 0xE5 - .byte 0x10, 0x80, 0xBD, 0xE8 +_020DF2A8: ; 0x020DF2A8 + mov r0, #0x0 + strb r0, [r4, #0xd] + ldmia sp!, {r4,pc} - arm_func_start mbtowc +arm_func_start mbtowc mbtowc: stmdb sp!, {r3,lr} ldr r3, _020DF2CC ; =0x02106C98 @@ -885,6 +1452,7 @@ mbstowcs: ; 0x020DF338 beq _020DF3B8 cmp r6, #0x0 bls _020DF3B8 +_020DF368: ldrsb r0, [r7, #0x0] cmp r0, #0x0 beq _020DF3A0 @@ -892,22 +1460,28 @@ mbstowcs: ; 0x020DF338 mov r1, r7 mov r2, r5 bl mbtowc -_020DF384: - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x80, 0x88, 0xE2, 0x00, 0x70, 0x87, 0xC0 - .byte 0x00, 0x50, 0x45, 0xC0, 0x04, 0x00, 0x00, 0xCA, 0x00, 0x00, 0xE0, 0xE3, 0xF0, 0x81, 0xBD, 0xE8 +_020DF384: ; 0x020DF384 + cmp r0, #0x0 + add r8, r8, #0x2 + addgt r7, r7, r0 + subgt r5, r5, r0 + bgt _020DF3AC + mvn r0, #0x0 + ldmia sp!, {r4-r8,pc} _020DF3A0: mov r0, #0x0 strh r0, [r8, #0x0] b _020DF3B8 _020DF3AC: - .byte 0x01, 0x40, 0x84, 0xE2 - .byte 0x06, 0x00, 0x54, 0xE1, 0xEB, 0xFF, 0xFF, 0x3A + add r4, r4, #0x1 + cmp r4, r6 + blo _020DF368 _020DF3B8: mov r0, r4 ldmia sp!, {r4-r8,pc} - arm_func_start wcstombs -wcstombs: ; 0x020DF3C0 +arm_func_start wcstombs +wcstombs: stmdb sp!, {r3-r9,lr} movs r4, r0 mov r9, r1 @@ -916,13 +1490,31 @@ wcstombs: ; 0x020DF3C0 mov r7, #0x0 moveq r0, #0x0 ldmeqia sp!, {r3-r9,pc} -_020DF3E0: - .byte 0x00, 0x60, 0x8D, 0xE2, 0xB0, 0x10, 0xD9, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x07, 0x00, 0xC4, 0x07, 0x0D, 0x00, 0x00, 0x0A, 0x06, 0x00, 0xA0, 0xE1, 0x02, 0x90, 0x89, 0xE2 - .byte 0xC5, 0xFF, 0xFF, 0xEB, 0x00, 0x50, 0xA0, 0xE1, 0x05, 0x00, 0x87, 0xE0, 0x08, 0x00, 0x50, 0xE1 - .byte 0x06, 0x00, 0x00, 0x8A, 0x06, 0x10, 0xA0, 0xE1, 0x05, 0x20, 0xA0, 0xE1, 0x07, 0x00, 0x84, 0xE0 - .byte 0xDA, 0x0E, 0x00, 0xEB, 0x05, 0x70, 0x87, 0xE0, 0x08, 0x00, 0x57, 0xE1, 0xEC, 0xFF, 0xFF, 0x9A - .byte 0x07, 0x00, 0xA0, 0xE1, 0xF8, 0x83, 0xBD, 0xE8 +_020DF3E0: ; 0x020DF3E0 + add r6, sp, #0x0 +_020DF3E4: + ldrh r1, [r9, #0x0] + cmp r1, #0x0 + moveq r0, #0x0 + streqb r0, [r4, r7] + beq _020DF430 + mov r0, r6 + add r9, r9, #0x2 + bl wctomb + mov r5, r0 + add r0, r7, r5 + cmp r0, r8 + bhi _020DF430 + mov r1, r6 + mov r2, r5 + add r0, r4, r7 + bl strncpy + add r7, r7, r5 + cmp r7, r8 + bls _020DF3E4 +_020DF430: + mov r0, r7 + ldmia sp!, {r3-r9,pc} arm_func_start memcpy memcpy: ; 0x020DF438 @@ -969,8 +1561,8 @@ Call_FillMemWithValue: ; 0x020DF4A4 mov r0, r4 ldmia sp!, {r4,pc} - arm_func_start memchr -memchr: ; 0x020DF4B8 +arm_func_start memchr +memchr: cmp r2, #0x0 and r3, r1, #0xff beq _020DF4DC @@ -1329,10 +1921,20 @@ _020DF920: subs r0, r3, #0x41 addpl pc, pc, r0, lsl #0x2 b _020DFB68 -_020DF94C: - .byte 0x42, 0x00, 0x00, 0xEA - .byte 0x84, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA - .byte 0x2F, 0x00, 0x00, 0xEA, 0x4A, 0x00, 0x00, 0xEA +_020DF94C: ; 0x020DF94C + b _020DFA5C +_020DF950: ; 0x020DF950 + b _020DFB68 +_020DF954: ; 0x020DF954 + b _020DFB68 +_020DF958: ; 0x020DF958 + b _020DFB68 +_020DF95C: ; 0x020DF95C + b _020DFAA4 +_020DF960: ; 0x020DF960 + b _020DFA24 +_020DF964: ; 0x020DF964 + b _020DFA94 _020DF968: cmp r3, #0x58 beq _020DF9E8 @@ -1348,12 +1950,47 @@ _020DF984: addls pc, pc, r0, lsl #0x2 b _020DFB68 _020DF994: - .byte 0x13, 0x00, 0x00, 0xEA, 0x41, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x00, 0xEA - .byte 0x3B, 0x00, 0x00, 0xEA, 0x6F, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA - .byte 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x45, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, 0xEA, 0x65, 0x00, 0x00, 0xEA - .byte 0x56, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x61, 0x00, 0x00, 0xEA - .byte 0x60, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA + b _020DF9E8 +_020DF998: + b _020DFAA4 +_020DF99C: + b _020DFA24 +_020DF9A0: + b _020DFA94 +_020DF9A4: + b _020DFB68 +_020DF9A8: + b _020DF9E8 +_020DF9AC: + b _020DFB68 +_020DF9B0: + b _020DFB68 +_020DF9B4: + b _020DFB68 +_020DF9B8: + b _020DFB68 +_020DF9BC: + b _020DFB54 +_020DF9C0: + b _020DF9E8 +_020DF9C4: + b _020DFAE0 +_020DF9C8: + b _020DFB68 +_020DF9CC: + b _020DFB68 +_020DF9D0: + b _020DFB30 +_020DF9D4: + b _020DFB68 +_020DF9D8: + b _020DF9E8 +_020DF9DC: + b _020DFB68 +_020DF9E0: + b _020DFB68 +_020DF9E4: + b _020DF9E8 _020DF9E8: ldrb r0, [sp, #0x4] cmp r0, #0x9 @@ -1371,10 +2008,20 @@ _020DF9E8: streqb r0, [sp, #0x0] b _020DFB70 _020DFA24: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0xFF, 0x00, 0xA0, 0x03 - .byte 0x05, 0x00, 0xCD, 0x05, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020DFB70 _020DFA5C: ldrb r0, [sp, #0x2] cmp r0, #0x0 @@ -1391,14 +2038,36 @@ _020DFA5C: streqb r0, [sp, #0x5] b _020DFB70 _020DFA94: - .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13, 0x01, 0x00, 0x50, 0x13 - .byte 0xFF, 0x00, 0xA0, 0x03, 0x05, 0x00, 0xCD, 0x05, 0x28, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x23, 0x00, 0x00, 0xEA - .byte 0x78, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x03, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE3 - .byte 0x05, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0x04, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 - .byte 0x1A, 0x00, 0x00, 0xEA + ldr r0, [sp, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] +_020DFAA4: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + moveq r0, #0xff + streqb r0, [sp, #0x5] + beq _020DFB70 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020DFB70 +_020DFAE0: + mov r3, #0x78 + mov r2, #0x1 + mov r1, #0x3 + mov r0, #0x8 + strb r3, [sp, #0x5] + strb r2, [sp, #0x3] + strb r1, [sp, #0x4] + str r0, [sp, #0xc] + b _020DFB70 _020DFB04: ldrb r1, [sp, #0x4] cmp r1, #0x3 @@ -1412,10 +2081,21 @@ _020DFB04: strneb r0, [sp, #0x5] b _020DFB70 _020DFB30: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05 - .byte 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x05, 0x00, 0xCD, 0x15 - .byte 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x03 - .byte 0x05, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x4] + cmp r0, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020DFB70 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x5] + b _020DFB70 +_020DFB54: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0xff + streqb r0, [sp, #0x5] + b _020DFB70 _020DFB68: mov r0, #0xff strb r0, [sp, #0x5] @@ -1508,11 +2188,11 @@ _020DFC8C: _020DFC94: mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f mov r9, r1 mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f cmp r9, #0xa mov r10, r0 addlt r9, r9, #0x30 @@ -2138,6 +2818,7 @@ round_decimal: ; 0x020E0598 stmdb sp!, {r4,lr} cmp r1, #0x0 bge _020E05C0 +_020E05A4: mov r1, #0x0 strh r1, [r0, #0x2] mov r1, #0x1 @@ -2149,23 +2830,77 @@ _020E05C0: ldrb lr, [r0, #0x4] cmp r1, lr ldmgeia sp!, {r4,pc} -_020E05CC: - .byte 0x05, 0xC0, 0x80, 0xE2 - .byte 0x01, 0x20, 0x8C, 0xE0, 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 - .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A - .byte 0x0E, 0xC0, 0x8C, 0xE0, 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A - .byte 0xD0, 0x30, 0xDC, 0xE1, 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1 - .byte 0xD1, 0x30, 0x52, 0x01, 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA - .byte 0x01, 0x40, 0xA0, 0xC3, 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A - .byte 0x00, 0xC0, 0xA0, 0xE3, 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2 - .byte 0x04, 0x30, 0x83, 0xE0, 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3 - .byte 0x0E, 0x40, 0xA0, 0xC1, 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA - .byte 0x30, 0x30, 0x83, 0xE2, 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3 - .byte 0xEC, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1 - .byte 0x04, 0x20, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3 - .byte 0xBB, 0xFF, 0xFF, 0x0A, 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 +_020E05CC: ; 0x020E05CC + add r12, r0, #0x5 + add r2, r12, r1 + add r2, r2, #0x1 + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x5 + bne _020E0620 + add r12, r12, lr +_020E05F4: + sub r12, r12, #0x1 + cmp r12, r2 + bls _020E060C + ldrsb r3, [r12, #0x0] + cmp r3, #0x30 + beq _020E05F4 +_020E060C: + cmp r12, r2 + ldreqsb r3, [r2, #-0x1] + andeq r4, r3, #0x1 + movne r4, #0x1 + b _020E0628 +_020E0620: + movgt r4, #0x1 + movle r4, #0x0 +_020E0628: + cmp r1, #0x0 + beq _020E0684 + mov r12, #0x0 + mov lr, #0x1 +_020E0638: + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x9 + movgt r4, lr + movle r4, r12 + cmp r4, #0x0 + bne _020E0668 + cmp r3, #0x0 + bne _020E0670 +_020E0668: + sub r1, r1, #0x1 + b _020E067C +_020E0670: + add r3, r3, #0x30 + strb r3, [r2, #0x0] + b _020E0684 +_020E067C: + cmp r1, #0x0 + bne _020E0638 +_020E0684: + cmp r4, #0x0 + beq _020E06AC + ldrsh r3, [r0, #0x2] + mov r2, #0x1 + mov r1, #0x31 + add r3, r3, #0x1 + strh r3, [r0, #0x2] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E06AC: + cmp r1, #0x0 + beq _020E05A4 + strb r1, [r0, #0x4] + ldmia sp!, {r4,pc} arm_func_start float2str float2str: ; 0x020E06BC @@ -2696,6 +3431,8 @@ _020E0E10: .word 0x02106DC8 _020E0E14: .word 0x02106DD0 _020E0E18: .word 0x02106DD4 _020E0E1C: .word 0x66666667 + +arm_func_start __pformatter __pformatter: stmdb sp!, {r0-r3} stmdb sp!, {r4-r11,lr} @@ -2759,10 +3496,20 @@ _020E0ED4: subs r0, r1, #0x41 addpl pc, pc, r0, lsl #0x2 b _020E0F28 -_020E0F0C: - .byte 0xE4, 0x00, 0x00, 0xEA - .byte 0x5D, 0x01, 0x00, 0xEA, 0x5C, 0x01, 0x00, 0xEA, 0x5B, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA +_020E0F0C: ; 0x020E0F0C + b _020E12A4 +_020E0F10: ; 0x020E0F10 + b _020E148C +_020E0F14: ; 0x020E0F14 + b _020E148C +_020E0F18: ; 0x020E0F18 + b _020E148C +_020E0F1C: ; 0x020E0F1C + b _020E123C +_020E0F20: ; 0x020E0F20 + b _020E123C +_020E0F24: ; 0x020E0F24 + b _020E123C _020E0F28: cmp r1, #0x25 beq _020E1478 @@ -2777,12 +3524,42 @@ _020E0F40: subs r0, r1, #0x64 addpl pc, pc, r0, lsl #0x2 b _020E0F9C -_020E0F54: - .byte 0x19, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA - .byte 0xB5, 0x00, 0x00, 0xEA, 0x48, 0x01, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x46, 0x01, 0x00, 0xEA - .byte 0x45, 0x01, 0x00, 0xEA, 0x44, 0x01, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x12, 0x01, 0x00, 0xEA - .byte 0x5E, 0x00, 0x00, 0xEA, 0x40, 0x01, 0x00, 0xEA, 0x3F, 0x01, 0x00, 0xEA, 0x3E, 0x01, 0x00, 0xEA - .byte 0xDD, 0x00, 0x00, 0xEA, 0x3C, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA +_020E0F54: ; 0x020E0F54 + b _020E0FC0 +_020E0F58: ; 0x020E0F58 + b _020E123C +_020E0F5C: ; 0x020E0F5C + b _020E123C +_020E0F60: ; 0x020E0F60 + b _020E123C +_020E0F64: ; 0x020E0F64 + b _020E148C +_020E0F68: ; 0x020E0F68 + b _020E0FC0 +_020E0F6C: ; 0x020E0F6C + b _020E148C +_020E0F70: ; 0x020E0F70 + b _020E148C +_020E0F74: ; 0x020E0F74 + b _020E148C +_020E0F78: ; 0x020E0F78 + b _020E148C +_020E0F7C: ; 0x020E0F7C + b _020E13CC +_020E0F80: ; 0x020E0F80 + b _020E1100 +_020E0F84: ; 0x020E0F84 + b _020E148C +_020E0F88: ; 0x020E0F88 + b _020E148C +_020E0F8C: ; 0x020E0F8C + b _020E148C +_020E0F90: ; 0x020E0F90 + b _020E130C +_020E0F94: ; 0x020E0F94 + b _020E148C +_020E0F98: ; 0x020E0F98 + b _020E1100 _020E0F9C: cmp r1, #0x63 beq _020E1458 @@ -2796,26 +3573,94 @@ _020E0FB8: cmp r1, #0xff b _020E148C _020E0FC0: - .byte 0x20, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x25, 0x00, 0x00, 0xEA - .byte 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2 - .byte 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5 - .byte 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x5C, 0x12, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x5C, 0x22, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5 - .byte 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x00, 0x1A, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5 - .byte 0x04, 0x50, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x50, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3, 0x05, 0x18, 0xA0, 0x01 - .byte 0x41, 0x58, 0xA0, 0x01, 0x01, 0x00, 0x50, 0xE3, 0x05, 0x1C, 0xA0, 0x01, 0x41, 0x5C, 0xA0, 0x01 - .byte 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13, 0x1C, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A - .byte 0x04, 0x40, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5 - .byte 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5, 0x8B, 0x2F, 0x8D, 0xE2, 0x46, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x70, 0xB0, 0xE1, 0xF0, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x00, 0xEA, 0x08, 0x40, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x8B, 0x1F, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x0C, 0x00, 0x94, 0xE8, 0xA9, 0xFA, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0xE6, 0x00, 0x00, 0x0A - .byte 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0, 0xF5, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x20] + cmp r0, #0x3 + bne _020E0FE0 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E0FE0: + cmp r0, #0x4 + bne _020E1008 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E1078 +_020E1008: + cmp r0, #0x6 + bne _020E1030 + ldr r1, [sp, #0x25c] + add r2, r1, #0x8 + str r2, [sp, #0x25c] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E1078 +_020E1030: + cmp r0, #0x7 + bne _020E104C + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E104C: + cmp r0, #0x8 + bne _020E1068 + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] + b _020E1078 +_020E1068: + ldr r1, [sp, #0x25c] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r5, [r1, #-0x4] +_020E1078: + cmp r0, #0x2 + moveq r1, r5, lsl #0x10 + moveq r5, r1, asr #0x10 + cmp r0, #0x1 + moveq r1, r5, lsl #0x18 + moveq r5, r1, asr #0x18 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x1c + bne _020E10CC + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x22c + bl longlong2str + movs r7, r0 + beq _020E148C + b _020E10F0 +_020E10CC: + sub r4, sp, #0x8 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + add r1, sp, #0x22c + mov r0, r5 + ldmia r4, {r2-r3} + bl long2str + movs r7, r0 + beq _020E148C +_020E10F0: + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 _020E1100: ldrb r0, [sp, #0x20] cmp r0, #0x3 @@ -2905,14 +3750,33 @@ _020E122C: sub r6, r0, r7 b _020E14D8 _020E123C: - .byte 0x20, 0x00, 0xDD, 0xE5 - .byte 0x09, 0x00, 0x50, 0xE3, 0x5C, 0x02, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x5C, 0x02, 0x8D, 0x15 - .byte 0x02, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5 - .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x1C, 0x00, 0x8D, 0xE2, 0x04, 0x40, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x84, 0xE8, 0x00, 0x30, 0x94, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x8B, 0x2F, 0x8D, 0xE2, 0x0B, 0xFD, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1 - .byte 0x7D, 0x00, 0x00, 0x0A, 0x02, 0x0C, 0x8D, 0xE2, 0x2B, 0x00, 0x80, 0xE2, 0x07, 0x60, 0x40, 0xE0 - .byte 0x8C, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x20] + cmp r0, #0x9 + ldrne r0, [sp, #0x25c] + addne r0, r0, #0x8 + strne r0, [sp, #0x25c] + bne _020E1260 + ldr r0, [sp, #0x25c] + add r0, r0, #0x8 + str r0, [sp, #0x25c] +_020E1260: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x1c + sub r4, sp, #0x4 + ldmia r0, {r0-r3} + stmia r4, {r0-r3} + ldr r3, [r4, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x22c + bl float2str + movs r7, r0 + beq _020E148C + add r0, sp, #0x200 + add r0, r0, #0x2b + sub r6, r0, r7 + b _020E14D8 _020E12A4: ldrb r0, [sp, #0x20] cmp r0, #0x9 @@ -2942,28 +3806,112 @@ _020E12C8: sub r6, r0, r7 b _020E14D8 _020E130C: - .byte 0x20, 0x00, 0xDD, 0xE5 - .byte 0x05, 0x00, 0x50, 0xE3, 0x0C, 0x00, 0x00, 0x1A, 0x5C, 0x02, 0x9D, 0xE5, 0x02, 0x2C, 0xA0, 0xE3 - .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x10, 0x10, 0xE5, 0x2C, 0x00, 0x8D, 0xE2 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x13, 0x9F, 0x05, 0x20, 0xF8, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x51, 0x00, 0x00, 0xBA, 0x2C, 0x70, 0x8D, 0xE2, 0x03, 0x00, 0x00, 0xEA, 0x5C, 0x02, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x80, 0xE2, 0x5C, 0x02, 0x8D, 0xE5, 0x04, 0x70, 0x10, 0xE5, 0x1F, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x57, 0xE3, 0xD4, 0x72, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x1E, 0x00, 0xDD, 0xE5, 0x01, 0x60, 0xD7, 0xE4, 0x00, 0x00, 0x50, 0xE3, 0x55, 0x00, 0x00, 0x0A - .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x51, 0x00, 0x00, 0xEA - .byte 0x1E, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x28, 0x60, 0x9D, 0xE5 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x41, 0xF8, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x07, 0x60, 0x40, 0x10, 0x46, 0x00, 0x00, 0xEA, 0x07, 0x00, 0xA0, 0xE1 - .byte 0xB9, 0x06, 0x00, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x42, 0x00, 0x00, 0xEA, 0x5C, 0x12, 0x9D, 0xE5 - .byte 0x20, 0x00, 0xDD, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x5C, 0x12, 0x8D, 0xE5, 0x04, 0x10, 0x11, 0xE5 - .byte 0x08, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x8B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x89, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA - .byte 0x85, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x80, 0x00, 0x00, 0xEA, 0xB0, 0xA0, 0xC1, 0xE1, 0x7E, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x7C, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x81, 0xE5, 0x78, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0x76, 0x00, 0x00, 0xEA - .byte 0x00, 0xA0, 0x81, 0xE5, 0x74, 0x00, 0x00, 0xEA, 0x00, 0xA0, 0x81, 0xE5, 0xCA, 0x0F, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x81, 0xE5, 0x70, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x20] + cmp r0, #0x5 + bne _020E134C + ldr r0, [sp, #0x25c] + mov r2, #0x200 + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r1, [r0, #-0x4] + add r0, sp, #0x2c + cmp r1, #0x0 + ldreq r1, _020E163C ; =0x02106DD8 + bl wcstombs +_020E133C: ; 0x020E133C + cmp r0, #0x0 + blt _020E148C + add r7, sp, #0x2c + b _020E135C +_020E134C: + ldr r0, [sp, #0x25c] + add r0, r0, #0x4 + str r0, [sp, #0x25c] + ldr r7, [r0, #-0x4] +_020E135C: + ldrb r0, [sp, #0x1f] + cmp r7, #0x0 + ldreq r7, _020E1640 ; =0x02106DDC + cmp r0, #0x0 + beq _020E1390 + ldrb r0, [sp, #0x1e] + ldrb r6, [r7], #0x1 + cmp r0, #0x0 + beq _020E14D8 + ldr r0, [sp, #0x28] + cmp r6, r0 + movgt r6, r0 + b _020E14D8 +_020E1390: + ldrb r0, [sp, #0x1e] + cmp r0, #0x0 + beq _020E13BC + ldr r6, [sp, #0x28] + mov r0, r7 + mov r2, r6 + mov r1, #0x0 + bl memchr +_020E13B0: ; 0x020E13B0 + cmp r0, #0x0 + subne r6, r0, r7 + b _020E14D8 +_020E13BC: + mov r0, r7 + bl strlen + mov r6, r0 + b _020E14D8 +_020E13CC: + ldr r1, [sp, #0x25c] + ldrb r0, [sp, #0x20] + add r1, r1, #0x4 + str r1, [sp, #0x25c] + ldr r1, [r1, #-0x4] + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020E161C +_020E13EC: + b _020E1410 +_020E13F0: + b _020E161C +_020E13F4: + b _020E1418 +_020E13F8: + b _020E1420 +_020E13FC: + b _020E1448 +_020E1400: + b _020E161C +_020E1404: + b _020E1428 +_020E1408: + b _020E1438 +_020E140C: + b _020E1440 +_020E1410: + str r10, [r1, #0x0] + b _020E161C +_020E1418: + strh r10, [r1, #0x0] + b _020E161C +_020E1420: + str r10, [r1, #0x0] + b _020E161C +_020E1428: + str r10, [r1, #0x0] + mov r0, r10, asr #0x1f + str r0, [r1, #0x4] + b _020E161C +_020E1438: + str r10, [r1, #0x0] + b _020E161C +_020E1440: + str r10, [r1, #0x0] + b _020E161C +_020E1448: + str r10, [r1, #0x0] + mov r0, r10, asr #0x1f + str r0, [r1, #0x4] + b _020E161C _020E1458: ldr r0, [sp, #0x25c] add r7, sp, #0x2c @@ -3088,6 +4036,7 @@ _020E15DC: blt _020E15DC _020E1618: add r10, r10, r4 +_020E161C: ldrsb r0, [r11, #0x0] cmp r0, #0x0 bne _020E0E50 @@ -3097,9 +4046,9 @@ _020E1628: ldmia sp!, {r4-r11,lr} add sp, sp, #0x10 bx lr -_020E163C: - .byte 0xD8, 0x6D, 0x10, 0x02 - .byte 0xDC, 0x6D, 0x10, 0x02 + .balign 4 +_020E163C: .word 0x02106DD8 +_020E1640: .word 0x02106DDC arm_func_start __FileWrite __FileWrite: ; 0x020E1644 @@ -3110,8 +4059,11 @@ __FileWrite: ; 0x020E1644 mov r1, #0x1 mov r4, r2 bl __fwrite -_020E1660: - .byte 0x00, 0x00, 0x54, 0xE1, 0x00, 0x50, 0xA0, 0x13, 0x05, 0x00, 0xA0, 0xE1, 0x38, 0x80, 0xBD, 0xE8 +_020E1660: ; 0x020E1660 + cmp r4, r0 + movne r5, #0x0 + mov r0, r5 + ldmia sp!, {r3-r5,pc} arm_func_start __StringWrite __StringWrite: ; 0x020E1670 @@ -3140,27 +4092,78 @@ printf: ; 0x020E16B4 ldr r0, _020E17B4 ; =0x02106AA4 mvn r1, #0x0 bl fwide -_020E16C8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0xE0, 0xA3 - .byte 0x10, 0x40, 0xBD, 0xA8, 0x10, 0xD0, 0x8D, 0xA2, 0x1E, 0xFF, 0x2F, 0xA1, 0xD4, 0x00, 0x9F, 0xE5 - .byte 0xFF, 0xA9, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xC8, 0x00, 0x9F, 0xE5 - .byte 0xC8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xC4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA - .byte 0xA4, 0x00, 0x9F, 0xE5, 0xA4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x0C, 0x10, 0x91, 0xE5 - .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0x90, 0x00, 0x9F, 0xE5 - .byte 0x0C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x0C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x70, 0x00, 0x9F, 0xE5, 0x31, 0xAA, 0xFF, 0xEB, 0x6C, 0x00, 0x9F, 0xE5, 0x6C, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x20, 0x90, 0xE5, 0x68, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x0C, 0x30, 0x81, 0xE5, 0x0C, 0x20, 0x80, 0xE5, 0x08, 0x00, 0x8D, 0xE2, 0x03, 0x30, 0xC0, 0xE3 - .byte 0x08, 0x20, 0x9D, 0xE5, 0x4C, 0x00, 0x9F, 0xE5, 0x34, 0x10, 0x9F, 0xE5, 0x04, 0x30, 0x83, 0xE2 - .byte 0xA6, 0xFD, 0xFF, 0xEB, 0x38, 0x10, 0x9F, 0xE5, 0x00, 0x40, 0xA0, 0xE1, 0x0C, 0x00, 0x91, 0xE5 - .byte 0x01, 0x00, 0x50, 0xE2, 0x0C, 0x00, 0x81, 0xE5, 0x01, 0x00, 0x00, 0x1A, 0x14, 0x00, 0x9F, 0xE5 - .byte 0xFE, 0xA9, 0xFF, 0xEB, 0x04, 0x00, 0xA0, 0xE1, 0x10, 0x40, 0xBD, 0xE8, 0x10, 0xD0, 0x8D, 0xE2 - .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020E16C8: ; 0x020E16C8 + cmp r0, #0x0 + mvnge r0, #0x0 + ldmgeia sp!, {r4,lr} + addge sp, sp, #0x10 + bxge lr + ldr r0, _020E17B8 ; =0x021D7118 + bl OS_TryLockMutex +_020E16E4: ; 0x020E16E4 + cmp r0, #0x0 + bne _020E1710 + ldr r0, _020E17BC ; =0x021D3498 + ldr r1, _020E17C0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E17C4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0xc] + str r2, [r0, #0xc] + b _020E1768 +_020E1710: + ldr r0, _020E17BC ; =0x021D3498 + ldr r1, _020E17C0 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, #0xc] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020E1740 + ldr r0, _020E17C4 ; =0x021D70AC + ldr r1, [r0, #0xc] + add r1, r1, #0x1 + str r1, [r0, #0xc] + b _020E1768 +_020E1740: + ldr r0, _020E17B8 ; =0x021D7118 + bl OS_LockMutex + ldr r0, _020E17BC ; =0x021D3498 + ldr r1, _020E17C0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E17C4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0xc] + str r2, [r0, #0xc] +_020E1768: + add r0, sp, #0x8 + bic r3, r0, #0x3 + ldr r2, [sp, #0x8] + ldr r0, _020E17C8 ; =__FileWrite + ldr r1, _020E17B4 ; =0x02106AA4 + add r3, r3, #0x4 + bl __pformatter + ldr r1, _020E17C4 ; =0x021D70AC + mov r4, r0 + ldr r0, [r1, #0xc] + subs r0, r0, #0x1 + str r0, [r1, #0xc] + bne _020E17A4 + ldr r0, _020E17B8 ; =0x021D7118 + bl OS_UnlockMutex +_020E17A4: + mov r0, r4 + ldmia sp!, {r4,lr} + add sp, sp, #0x10 + bx lr + .balign 4 _020E17B4: .word 0x02106AA4 -_020E17B8: - .byte 0x18, 0x71, 0x1D, 0x02, 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0x44, 0x16, 0x0E, 0x02 +_020E17B8: .word 0x021D7118 +_020E17BC: .word 0x021D3498 +_020E17C0: .word 0x021D7088 +_020E17C4: .word 0x021D70AC +_020E17C8: .word __FileWrite arm_func_start vsnprintf vsnprintf: ; 0x020E17CC @@ -3175,11 +4178,24 @@ vsnprintf: ; 0x020E17CC str r4, [sp, #0x4] str r12, [sp, #0x8] bl __pformatter -_020E17F8: - .byte 0x00, 0x00, 0x55, 0xE3, 0x0C, 0xD0, 0x8D, 0x02 - .byte 0x30, 0x80, 0xBD, 0x08, 0x04, 0x00, 0x50, 0xE1, 0x00, 0x10, 0xA0, 0x33, 0x0C, 0xD0, 0x8D, 0x32 - .byte 0x00, 0x10, 0xC5, 0x37, 0x30, 0x80, 0xBD, 0x38, 0x00, 0x00, 0x54, 0xE3, 0x04, 0x10, 0x85, 0x10 - .byte 0x00, 0x20, 0xA0, 0x13, 0x01, 0x20, 0x41, 0x15, 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E17F8: ; 0x020E17F8 + cmp r5, #0x0 + addeq sp, sp, #0xc + ldmeqia sp!, {r4-r5,pc} +_020E1804: ; 0x020E1804 + cmp r0, r4 + movcc r1, #0x0 + addcc sp, sp, #0xc + strccb r1, [r5, r0] + ldmccia sp!, {r4-r5,pc} +_020E1818: ; 0x020E1818 + cmp r4, #0x0 + addne r1, r5, r4 + movne r2, #0x0 + strneb r2, [r1, #-0x1] + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 _020E1830: .word __StringWrite arm_func_start snprintf @@ -3220,28 +4236,98 @@ qsort: ; 0x020E1888 mov r7, r3 addcc sp, sp, #0x10 ldmccia sp!, {r3-r11,pc} -_020E18AC: - .byte 0xA9, 0x00, 0xA0, 0xE1 - .byte 0x01, 0xB0, 0x80, 0xE2, 0x01, 0x00, 0x4B, 0xE2, 0x98, 0xA0, 0x20, 0xE0, 0x01, 0x20, 0x49, 0xE2 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x98, 0xA2, 0x20, 0xE0, 0x08, 0x00, 0x8D, 0xE5, 0x9B, 0x08, 0x00, 0xE0 - .byte 0x00, 0x10, 0xE0, 0xE3, 0x04, 0x00, 0x8D, 0xE5, 0x98, 0x01, 0x00, 0xE0, 0x00, 0x00, 0x8D, 0xE5 - .byte 0x01, 0x00, 0x5B, 0xE3, 0x07, 0x00, 0x00, 0x9A, 0x04, 0x00, 0x9D, 0xE5, 0x01, 0xB0, 0x4B, 0xE2 - .byte 0x08, 0x00, 0x40, 0xE0, 0x04, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x11, 0x00, 0x00, 0xEA, 0x08, 0x20, 0xA0, 0xE1, 0x08, 0x40, 0x9D, 0xE5 - .byte 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1 - .byte 0xD0, 0x10, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC3, 0xE4, 0x01, 0x10, 0xC4, 0xE4 - .byte 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x90, 0x49, 0xE2, 0x01, 0x00, 0x59, 0xE3, 0x10, 0xD0, 0x8D, 0x02 - .byte 0xF8, 0x8F, 0xBD, 0x08, 0x08, 0x00, 0x9D, 0xE5, 0x08, 0x00, 0x40, 0xE0, 0x08, 0x00, 0x8D, 0xE5 - .byte 0x04, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x9D, 0xE5, 0x0B, 0x40, 0xA0, 0xE1, 0x00, 0x00, 0x81, 0xE0 - .byte 0x8B, 0x00, 0x59, 0xE1, 0x00, 0x50, 0x8A, 0xE0, 0xDC, 0xFF, 0xFF, 0x3A, 0x84, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x00, 0x44, 0xE2, 0x05, 0x60, 0xA0, 0xE1, 0x98, 0xA0, 0x25, 0xE0, 0x04, 0x00, 0x59, 0xE1 - .byte 0x05, 0x00, 0x00, 0x9A, 0x05, 0x00, 0xA0, 0xE1, 0x08, 0x10, 0x85, 0xE0, 0x37, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x40, 0x84, 0xB2, 0x08, 0x50, 0x85, 0xB0, 0x06, 0x00, 0xA0, 0xE1 - .byte 0x05, 0x10, 0xA0, 0xE1, 0x37, 0xFF, 0x2F, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0xCB, 0xFF, 0xFF, 0xAA - .byte 0x08, 0x20, 0xA0, 0xE1, 0x05, 0x30, 0xA0, 0xE1, 0x00, 0x00, 0x58, 0xE3, 0x05, 0x00, 0x00, 0x0A - .byte 0xD0, 0x10, 0xD6, 0xE1, 0xD0, 0x00, 0xD3, 0xE1, 0x01, 0x20, 0x52, 0xE2, 0x01, 0x00, 0xC6, 0xE4 - .byte 0x01, 0x10, 0xC3, 0xE4, 0xF9, 0xFF, 0xFF, 0x1A, 0x84, 0x00, 0x59, 0xE1, 0xE2, 0xFF, 0xFF, 0x2A - .byte 0xBE, 0xFF, 0xFF, 0xEA, 0x10, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E18AC: ; 0x020E18AC + mov r0, r9, lsr #0x1 + add r11, r0, #0x1 + sub r0, r11, #0x1 + mla r0, r8, r0, r10 + sub r2, r9, #0x1 + str r0, [sp, #0xc] + mla r0, r8, r2, r10 + str r0, [sp, #0x8] + mul r0, r11, r8 + mvn r1, #0x0 + str r0, [sp, #0x4] + mul r0, r8, r1 + str r0, [sp, #0x0] +_020E18E0: + cmp r11, #0x1 + bls _020E1908 + ldr r0, [sp, #0x4] + sub r11, r11, #0x1 + sub r0, r0, r8 + str r0, [sp, #0x4] + ldr r0, [sp, #0xc] + sub r0, r0, r8 + str r0, [sp, #0xc] + b _020E1950 +_020E1908: + mov r2, r8 + ldr r4, [sp, #0x8] + ldr r3, [sp, #0xc] + cmp r8, #0x0 + beq _020E1934 +_020E191C: + ldrsb r0, [r4, #0x0] + ldrsb r1, [r3, #0x0] + subs r2, r2, #0x1 + strb r0, [r3], #0x1 + strb r1, [r4], #0x1 + bne _020E191C +_020E1934: + sub r9, r9, #0x1 + cmp r9, #0x1 + addeq sp, sp, #0x10 + ldmeqia sp!, {r3-r11,pc} +_020E1944: ; 0x020E1944 + ldr r0, [sp, #0x8] + sub r0, r0, r8 + str r0, [sp, #0x8] +_020E1950: + ldr r1, [sp, #0x4] + ldr r0, [sp, #0x0] + mov r4, r11 + add r0, r1, r0 + cmp r9, r11, lsl #0x1 + add r5, r10, r0 + blo _020E18E0 +_020E196C: + mov r4, r4, lsl #0x1 + sub r0, r4, #0x1 + mov r6, r5 + mla r5, r8, r0, r10 + cmp r9, r4 + bls _020E199C + mov r0, r5 + add r1, r5, r8 + blx r7 + cmp r0, #0x0 + addlt r4, r4, #0x1 + addlt r5, r5, r8 +_020E199C: + mov r0, r6 + mov r1, r5 + blx r7 + cmp r0, #0x0 + bge _020E18E0 + mov r2, r8 + mov r3, r5 + cmp r8, #0x0 + beq _020E19D8 +_020E19C0: + ldrsb r1, [r6, #0x0] + ldrsb r0, [r3, #0x0] + subs r2, r2, #0x1 + strb r0, [r6], #0x1 + strb r1, [r3], #0x1 + bne _020E19C0 +_020E19D8: + cmp r9, r4, lsl #0x1 + bhs _020E196C + b _020E18E0 +_020E19E4: ; 0x020E19E4 + add sp, sp, #0x10 + ldmia sp!, {r3-r11,pc} arm_func_start rand rand: ; 0x020E19EC @@ -3433,10 +4519,20 @@ _020E1C3C: subs r1, r0, #0x41 addpl pc, pc, r1, lsl #0x2 b _020E1EF0 -_020E1C68: - .byte 0x2B, 0x00, 0x00, 0xEA, 0x9F, 0x00, 0x00, 0xEA - .byte 0x9E, 0x00, 0x00, 0xEA, 0x9D, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x26, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA +_020E1C68: ; 0x020E1C68 + b _020E1D1C +_020E1C6C: ; 0x020E1C6C + b _020E1EF0 +_020E1C70: ; 0x020E1C70 + b _020E1EF0 +_020E1C74: ; 0x020E1C74 + b _020E1EF0 +_020E1C78: ; 0x020E1C78 + b _020E1D1C +_020E1C7C: ; 0x020E1C7C + b _020E1D1C +_020E1C80: ; 0x020E1C80 + b _020E1D1C _020E1C84: cmp r0, #0x58 beq _020E1D08 @@ -3452,12 +4548,49 @@ _020E1CA0: addls pc, pc, r0, lsl #0x2 b _020E1EF0 _020E1CB0: - .byte 0x2D, 0x00, 0x00, 0xEA, 0x13, 0x00, 0x00, 0xEA, 0x17, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x15, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA - .byte 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x1B, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA, 0x7F, 0x00, 0x00, 0xEA - .byte 0x26, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x02, 0x00, 0x00, 0xEA, 0x7B, 0x00, 0x00, 0xEA - .byte 0x7A, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA + b _020E1D6C +_020E1CB4: + b _020E1D08 +_020E1CB8: + b _020E1D1C +_020E1CBC: + b _020E1D1C +_020E1CC0: + b _020E1D1C +_020E1CC4: + b _020E1EF0 +_020E1CC8: + b _020E1D08 +_020E1CCC: + b _020E1EF0 +_020E1CD0: + b _020E1EF0 +_020E1CD4: + b _020E1EF0 +_020E1CD8: + b _020E1EF0 +_020E1CDC: + b _020E1EF8 +_020E1CE0: + b _020E1D08 +_020E1CE4: + b _020E1D58 +_020E1CE8: + b _020E1EF0 +_020E1CEC: + b _020E1EF0 +_020E1CF0: + b _020E1D90 +_020E1CF4: + b _020E1EF0 +_020E1CF8: + b _020E1D08 +_020E1CFC: + b _020E1EF0 +_020E1D00: + b _020E1EF0 +_020E1D04: + b _020E1D08 _020E1D08: ldrb r0, [sp, #0x2] cmp r0, #0x9 @@ -3483,15 +4616,44 @@ _020E1D48: streqb r0, [sp, #0x2] b _020E1EF8 _020E1D58: - .byte 0x03, 0x10, 0xA0, 0xE3, 0x78, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x10, 0xCD, 0xE5, 0x03, 0x00, 0xCD, 0xE5, 0x62, 0x00, 0x00, 0xEA, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05, 0x5D, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15, 0x59, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0xA0, 0x03, 0x02, 0x00, 0xCD, 0x05 - .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0xFF, 0x00, 0xA0, 0x13, 0x03, 0x00, 0xCD, 0x15 - .byte 0x08, 0x20, 0x8D, 0xE2, 0x20, 0x10, 0xA0, 0xE3, 0xFF, 0x00, 0xA0, 0xE3, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0xC2, 0xE4, 0xFB, 0xFF, 0xFF, 0xCA, 0xC1, 0x10, 0xA0, 0xE3 - .byte 0xFE, 0x00, 0xA0, 0xE3, 0x09, 0x10, 0xCD, 0xE5, 0x0C, 0x00, 0xCD, 0xE5, 0x45, 0x00, 0x00, 0xEA + mov r1, #0x3 + mov r0, #0x78 + strb r1, [sp, #0x2] + strb r0, [sp, #0x3] + b _020E1EF8 +_020E1D6C: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1EF8 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] + b _020E1EF8 +_020E1D90: + ldrb r0, [sp, #0x2] + cmp r0, #0x3 + moveq r0, #0xa + streqb r0, [sp, #0x2] + beq _020E1DB0 + cmp r0, #0x0 + movne r0, #0xff + strneb r0, [sp, #0x3] +_020E1DB0: + add r2, sp, #0x8 + mov r1, #0x20 + mov r0, #0xff +_020E1DBC: + sub r1, r1, #0x1 + cmp r1, #0x0 + strb r0, [r2], #0x1 + bgt _020E1DBC + mov r1, #0xc1 + mov r0, #0xfe + strb r1, [sp, #0x9] + strb r0, [sp, #0xc] + b _020E1EF8 _020E1DE0: ldrb r0, [sp, #0x2] cmp r0, #0x3 @@ -3753,10 +4915,20 @@ _020E2158: subs r0, r1, #0x41 addpl pc, pc, r0, lsl #0x2 b _020E2198 -_020E217C: - .byte 0x1F, 0x01, 0x00, 0xEA - .byte 0xAD, 0x02, 0x00, 0xEA, 0xAC, 0x02, 0x00, 0xEA, 0xAB, 0x02, 0x00, 0xEA, 0x1B, 0x01, 0x00, 0xEA - .byte 0x1A, 0x01, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA +_020E217C: ; 0x020E217C + b _020E2600 +_020E2180: ; 0x020E2180 + b _020E2C3C +_020E2184: ; 0x020E2184 + b _020E2C3C +_020E2188: ; 0x020E2188 + b _020E2C3C +_020E218C: ; 0x020E218C + b _020E2600 +_020E2190: ; 0x020E2190 + b _020E2600 +_020E2194: ; 0x020E2194 + b _020E2600 _020E2198: cmp r1, #0x25 beq _020E287C @@ -3771,13 +4943,50 @@ _020E21B0: subs r0, r1, #0x63 addpl pc, pc, r0, lsl #0x2 b _020E221C -_020E21C4: - .byte 0x3E, 0x01, 0x00, 0xEA, 0x18, 0x00, 0x00, 0xEA, 0x0B, 0x01, 0x00, 0xEA - .byte 0x0A, 0x01, 0x00, 0xEA, 0x09, 0x01, 0x00, 0xEA, 0x97, 0x02, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA - .byte 0x95, 0x02, 0x00, 0xEA, 0x94, 0x02, 0x00, 0xEA, 0x93, 0x02, 0x00, 0xEA, 0x92, 0x02, 0x00, 0xEA - .byte 0x74, 0x02, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA, 0x8F, 0x02, 0x00, 0xEA, 0x8E, 0x02, 0x00, 0xEA - .byte 0x8D, 0x02, 0x00, 0xEA, 0xBF, 0x01, 0x00, 0xEA, 0x8B, 0x02, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA - .byte 0x89, 0x02, 0x00, 0xEA, 0x88, 0x02, 0x00, 0xEA, 0x87, 0x00, 0x00, 0xEA +_020E21C4: ; 0x020E21C4 + b _020E26C4 +_020E21C8: ; 0x020E21C8 + b _020E2230 +_020E21CC: ; 0x020E21CC + b _020E2600 +_020E21D0: ; 0x020E21D0 + b _020E2600 +_020E21D4: ; 0x020E21D4 + b _020E2600 +_020E21D8: ; 0x020E21D8 + b _020E2C3C +_020E21DC: ; 0x020E21DC + b _020E2238 +_020E21E0: ; 0x020E21E0 + b _020E2C3C +_020E21E4: ; 0x020E21E4 + b _020E2C3C +_020E21E8: ; 0x020E21E8 + b _020E2C3C +_020E21EC: ; 0x020E21EC + b _020E2C3C +_020E21F0: ; 0x020E21F0 + b _020E2BC8 +_020E21F4: ; 0x020E21F4 + b _020E242C +_020E21F8: ; 0x020E21F8 + b _020E2C3C +_020E21FC: ; 0x020E21FC + b _020E2C3C +_020E2200: ; 0x020E2200 + b _020E2C3C +_020E2204: ; 0x020E2204 + b _020E2908 +_020E2208: ; 0x020E2208 + b _020E2C3C +_020E220C: ; 0x020E220C + b _020E2434 +_020E2210: ; 0x020E2210 + b _020E2C3C +_020E2214: ; 0x020E2214 + b _020E2C3C +_020E2218: ; 0x020E2218 + b _020E243C _020E221C: cmp r1, #0x61 beq _020E2600 @@ -3786,41 +4995,169 @@ _020E2228: cmp r1, #0xff b _020E2C3C _020E2230: - .byte 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3, 0x30, 0x10, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5 - .byte 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5, 0x41, 0x00, 0x00, 0xEA, 0x62, 0x10, 0xDD, 0xE5 - .byte 0x5C, 0x20, 0x8D, 0xE2, 0x07, 0x00, 0x51, 0xE3, 0x04, 0x00, 0x51, 0x13, 0x58, 0x10, 0x8D, 0xE2 - .byte 0x0A, 0x00, 0x00, 0x1A, 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1 - .byte 0xE7, 0x09, 0x00, 0xEB, 0x34, 0x00, 0x8D, 0xE5, 0x18, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA - .byte 0x00, 0x20, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE2, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x64, 0x10, 0x9D, 0xE5, 0x09, 0x20, 0xA0, 0xE1, 0x08, 0x30, 0xA0, 0xE1, 0xE2, 0x08, 0x00, 0xEB - .byte 0x3C, 0x00, 0x8D, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x58, 0x02, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x30, 0x00, 0x8D, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x1C, 0x00, 0x8D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 - .byte 0x1B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0x50, 0x13, 0x0E, 0x00, 0x00, 0x1A, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x00, 0x0A, 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x70, 0xE2, 0x20, 0x00, 0x8D, 0xE5 - .byte 0x18, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xE0, 0xE2, 0x24, 0x00, 0x8D, 0xE5, 0x0C, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x9D, 0xE5, 0x20, 0x00, 0x8D, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x24, 0x00, 0x8D, 0xE5 - .byte 0x07, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x3C, 0x00, 0x9D, 0x05 - .byte 0x1C, 0x00, 0x8D, 0x05, 0x02, 0x00, 0x00, 0x0A, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x60, 0xE2 - .byte 0x1C, 0x00, 0x8D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x2B, 0x00, 0x00, 0x0A, 0x62, 0x00, 0xDD, 0xE5 - .byte 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x22, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0E, 0x00, 0x00, 0xEA - .byte 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0xC5, 0xE5 - .byte 0x14, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1, 0x11, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x1C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA, 0x1C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x20, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5 - .byte 0x24, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x44, 0x00, 0x9D, 0x05, 0x01, 0x00, 0x80, 0x02, 0x44, 0x00, 0x8D, 0x05, 0x40, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xFF, 0x01, 0x00, 0xEA, 0x08, 0x00, 0xA0, 0xE3 - .byte 0x02, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x00, 0xEA + mov r0, #0xa + b _020E223C +_020E2238: + mov r0, #0x0 +_020E223C: + ldr r1, [sp, #0x30] + cmp r1, #0x0 + beq _020E225C + mov r0, #0x0 + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + b _020E2364 +_020E225C: + ldrb r1, [sp, #0x62] + add r2, sp, #0x5c + cmp r1, #0x7 + cmpne r1, #0x4 + add r1, sp, #0x58 + bne _020E22A0 + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoull + str r0, [sp, #0x34] + str r1, [sp, #0x18] + b _020E22C4 +_020E22A0: + str r2, [sp, #0x0] + str r1, [sp, #0x4] + add r1, sp, #0x54 + str r1, [sp, #0x8] + ldr r1, [sp, #0x64] + mov r2, r9 + mov r3, r8 + bl __strtoul + str r0, [sp, #0x3c] +_020E22C4: + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + bne _020E22F4 + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + str r0, [sp, #0x30] + mov r0, #0x0 + str r0, [sp, #0x1c] + str r0, [sp, #0x20] + str r0, [sp, #0x24] + b _020E2364 +_020E22F4: + add r4, r4, r0 + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + cmpne r0, #0x4 + bne _020E2344 + ldr r0, [sp, #0x58] + cmp r0, #0x0 + beq _020E2330 + ldr r0, [sp, #0x34] + rsbs r0, r0, #0x0 + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + rsc r0, r0, #0x0 + str r0, [sp, #0x24] + b _020E2364 +_020E2330: + ldr r0, [sp, #0x34] + str r0, [sp, #0x20] + ldr r0, [sp, #0x18] + str r0, [sp, #0x24] + b _020E2364 +_020E2344: + ldr r0, [sp, #0x58] + cmp r0, #0x0 + ldreq r0, [sp, #0x3c] + streq r0, [sp, #0x1c] + beq _020E2364 + ldr r0, [sp, #0x3c] + rsb r0, r0, #0x0 + str r0, [sp, #0x1c] +_020E2364: + cmp r5, #0x0 + beq _020E241C + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E2408 +_020E237C: + b _020E239C +_020E2380: + b _020E23A8 +_020E2384: + b _020E23B4 +_020E2388: + b _020E23C0 +_020E238C: + b _020E23CC +_020E2390: + b _020E23E0 +_020E2394: + b _020E23EC +_020E2398: + b _020E23F8 +_020E239C: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23A8: + ldr r0, [sp, #0x1c] + strb r0, [r5, #0x0] + b _020E2408 +_020E23B4: + ldr r0, [sp, #0x1c] + strh r0, [r5, #0x0] + b _020E2408 +_020E23C0: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23CC: + ldr r0, [sp, #0x20] + str r0, [r5, #0x0] + ldr r0, [sp, #0x24] + str r0, [r5, #0x4] + b _020E2408 +_020E23E0: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23EC: + ldr r0, [sp, #0x1c] + str r0, [r5, #0x0] + b _020E2408 +_020E23F8: + ldr r0, [sp, #0x20] + str r0, [r5, #0x0] + ldr r0, [sp, #0x24] + str r0, [r5, #0x4] +_020E2408: + ldr r0, [sp, #0x30] + cmp r0, #0x0 + ldreq r0, [sp, #0x44] + addeq r0, r0, #0x1 + streq r0, [sp, #0x44] +_020E241C: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C +_020E242C: + mov r0, #0x8 + b _020E2440 +_020E2434: + mov r0, #0xa + b _020E2440 _020E243C: mov r0, #0x10 +_020E2440: ldr r1, [sp, #0x30] cmp r1, #0x0 beq _020E2460 @@ -3895,15 +5232,56 @@ _020E2538: addls pc, pc, r0, lsl #0x2 b _020E25DC _020E2550: - .byte 0x06, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA, 0x14, 0x00, 0x00, 0xEA, 0x16, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0xC5, 0xE5, 0x14, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0xB0, 0x00, 0xC5, 0xE1 - .byte 0x11, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x0E, 0x00, 0x00, 0xEA - .byte 0x34, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 - .byte 0x09, 0x00, 0x00, 0xEA, 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x06, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x85, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x85, 0xE5, 0x18, 0x00, 0x9D, 0xE5, 0x04, 0x00, 0x85, 0xE5 + b _020E2570 +_020E2554: + b _020E257C +_020E2558: + b _020E2588 +_020E255C: + b _020E2594 +_020E2560: + b _020E25A0 +_020E2564: + b _020E25B4 +_020E2568: + b _020E25C0 +_020E256C: + b _020E25CC +_020E2570: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E257C: + ldr r0, [sp, #0x3c] + strb r0, [r5, #0x0] + b _020E25DC +_020E2588: + ldr r0, [sp, #0x3c] + strh r0, [r5, #0x0] + b _020E25DC +_020E2594: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25A0: + ldr r0, [sp, #0x34] + str r0, [r5, #0x0] + ldr r0, [sp, #0x18] + str r0, [r5, #0x4] + b _020E25DC +_020E25B4: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25C0: + ldr r0, [sp, #0x3c] + str r0, [r5, #0x0] + b _020E25DC +_020E25CC: + ldr r0, [sp, #0x34] + str r0, [r5, #0x0] + ldr r0, [sp, #0x18] + str r0, [r5, #0x4] _020E25DC: ldr r0, [sp, #0x30] cmp r0, #0x0 @@ -3941,8 +5319,8 @@ _020E261C: ldr r0, _020E2C78 ; =0x02106B78 ldr r0, [r0, #0x0] bl _f2d -_020E2660: - .byte 0x00, 0x00, 0x00, 0xEA +_020E2660: ; 0x020E2660 + b _020E2668 _020E2664: add r4, r4, r2 _020E2668: @@ -3958,8 +5336,9 @@ _020E2668: b _020E26A0 _020E2690: bl _d2f -_020E2694: - .byte 0x00, 0x00, 0x85, 0xE5, 0x00, 0x00, 0x00, 0xEA +_020E2694: ; 0x020E2694 + str r0, [r5, #0x0] + b _020E26A0 _020E269C: stmia r5, {r0-r1} _020E26A0: @@ -3974,34 +5353,130 @@ _020E26B4: str r0, [sp, #0x40] b _020E2C2C _020E26C4: - .byte 0x61, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0xA0, 0x03 - .byte 0x64, 0x00, 0x8D, 0x05, 0x00, 0x00, 0x55, 0xE3, 0x4B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x10, 0x00, 0x9D, 0xE5, 0x01, 0x70, 0xA0, 0xE3, 0x04, 0x00, 0x80, 0xE2 - .byte 0x04, 0xB0, 0x10, 0xE5, 0x10, 0x00, 0x8D, 0xE5, 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x50, 0xE3, 0x5C, 0x10, 0x8D, 0xE5, 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5B, 0xE3 - .byte 0x00, 0x10, 0xC5, 0x15, 0x44, 0x01, 0x00, 0xEA, 0x00, 0x00, 0xE0, 0xE3, 0x2C, 0x50, 0x8D, 0xE5 - .byte 0x48, 0x00, 0x8D, 0xE5, 0x0D, 0x00, 0x00, 0xEA, 0x62, 0x00, 0xDD, 0xE5, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x0A, 0x00, 0x50, 0xE3, 0xD0, 0x05, 0xDD, 0x11, 0x01, 0x00, 0xC5, 0x14, 0x04, 0x00, 0x00, 0x1A - .byte 0x05, 0x00, 0xA0, 0xE1, 0x50, 0x10, 0x8D, 0xE2, 0x01, 0x20, 0xA0, 0xE3, 0xD8, 0xF2, 0xFF, 0xEB - .byte 0x01, 0x50, 0x85, 0xE2, 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x80, 0xE2, 0x5C, 0x10, 0x8D, 0xE5 - .byte 0x64, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5 - .byte 0x0E, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x5A, 0xE3, 0x04, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x5B, 0xE1 - .byte 0x01, 0x70, 0xA0, 0x83, 0x00, 0x70, 0xA0, 0x93, 0x00, 0x00, 0x57, 0xE3, 0x07, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x48, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0xDD, 0xFF, 0xFF, 0x1A - .byte 0x50, 0x60, 0xCD, 0xE5, 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x0B, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x57, 0xE3, 0x09, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0x5A, 0xE3, 0x18, 0x01, 0x00, 0x0A, 0x01, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x5B, 0xE3 - .byte 0x30, 0x00, 0x8D, 0xE5, 0x10, 0x01, 0x00, 0x0A, 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0xC0, 0xE5, 0x0C, 0x01, 0x00, 0xEA, 0x00, 0x40, 0x84, 0xE0, 0x44, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x44, 0x00, 0x8D, 0xE5, 0x17, 0x00, 0x00, 0xEA, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x5C, 0x00, 0x8D, 0xE5, 0x00, 0x50, 0xE0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x5C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x5C, 0x00, 0x8D, 0xE5, 0x64, 0x00, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x00, 0x40, 0xE2, 0x64, 0x00, 0x8D, 0xE5, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x05, 0x00, 0x56, 0xE1, 0xEF, 0xFF, 0xFF, 0x1A, 0x50, 0x60, 0xCD, 0xE5 - .byte 0x5C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0xF3, 0x00, 0x00, 0x0A, 0x40, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x00, 0x80, 0xE2, 0x40, 0x00, 0x8D, 0xE5, 0xEB, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x61] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0x64] + cmp r5, #0x0 + beq _020E280C + cmp r10, #0x0 + beq _020E26F8 + ldr r0, [sp, #0x10] + mov r7, #0x1 + add r0, r0, #0x4 + ldr r11, [r0, #-0x4] + str r0, [sp, #0x10] +_020E26F8: + ldr r0, [sp, #0x30] + mov r1, #0x0 + cmp r0, #0x0 + str r1, [sp, #0x5c] + beq _020E2718 + cmp r11, #0x0 + strneb r1, [r5, #0x0] + b _020E2C2C +_020E2718: + mvn r0, #0x0 + str r5, [sp, #0x2c] + str r0, [sp, #0x48] + b _020E2760 +_020E2728: + ldrb r0, [sp, #0x62] + strb r6, [sp, #0x50] + cmp r0, #0xa + ldrnesb r0, [sp, #0x50] + strneb r0, [r5], #0x1 + bne _020E2754 + mov r0, r5 + add r1, sp, #0x50 + mov r2, #0x1 + bl mbtowc + add r5, r5, #0x1 +_020E2754: + ldr r0, [sp, #0x5c] + add r1, r0, #0x1 + str r1, [sp, #0x5c] +_020E2760: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E27B0 + cmp r10, #0x0 + beq _020E2790 + cmp r11, r1 + movhi r7, #0x1 + movls r7, #0x0 + cmp r7, #0x0 + beq _020E27B0 +_020E2790: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + ldr r0, [sp, #0x48] + cmp r6, r0 + bne _020E2728 +_020E27B0: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E27D0 + cmp r10, #0x0 + beq _020E27F8 + cmp r7, #0x0 + bne _020E27F8 +_020E27D0: + cmp r10, #0x0 + beq _020E2C3C + mov r0, #0x1 + cmp r11, #0x0 + str r0, [sp, #0x30] + beq _020E2C2C + ldr r0, [sp, #0x2c] + mov r1, #0x0 + strb r1, [r0, #0x0] + b _020E2C2C +_020E27F8: + add r4, r4, r0 + ldr r0, [sp, #0x44] + add r0, r0, #0x1 + str r0, [sp, #0x44] + b _020E286C +_020E280C: + mov r0, #0x0 + str r0, [sp, #0x5c] + mvn r5, #0x0 + b _020E282C +_020E281C: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + add r0, r0, #0x1 + str r0, [sp, #0x5c] +_020E282C: + ldr r0, [sp, #0x64] + cmp r0, #0x0 + sub r0, r0, #0x1 + str r0, [sp, #0x64] + beq _020E285C + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r6, r0 + cmp r6, r5 + bne _020E281C +_020E285C: + strb r6, [sp, #0x50] + ldr r0, [sp, #0x5c] + cmp r0, #0x0 + beq _020E2C3C +_020E286C: + ldr r0, [sp, #0x40] + add r0, r0, #0x1 + str r0, [sp, #0x40] + b _020E2C2C _020E287C: ldr r0, [sp, #0x30] cmp r0, #0x0 @@ -4045,15 +5520,42 @@ _020E2900: add r4, r4, #0x1 b _020E2C2C _020E2908: - .byte 0x30, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x1B, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x50, 0x00, 0xCD, 0xE5, 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x50, 0x00, 0xCD, 0xE5, 0xD0, 0x15, 0xDD, 0xE1, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA - .byte 0x0C, 0x03, 0x9F, 0xE5, 0x81, 0x20, 0xA0, 0xE1, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x39, 0xFF, 0x2F, 0xE1 + ldr r0, [sp, #0x30] + cmp r0, #0x0 + bne _020E2984 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + strb r0, [sp, #0x50] + b _020E2944 +_020E292C: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + strb r0, [sp, #0x50] +_020E2944: + ldrsb r1, [sp, #0x50] + cmp r1, #0x0 + blt _020E2958 + cmp r1, #0x80 + blt _020E2960 +_020E2958: + mov r0, #0x0 + b _020E2970 +_020E2960: + ldr r0, _020E2C74 ; =0x0210430C + mov r2, r1, lsl #0x1 + ldrh r0, [r0, r2] + and r0, r0, #0x100 +_020E2970: + cmp r0, #0x0 + bne _020E292C + mov r0, r8 + mov r2, #0x1 + blx r9 _020E2984: cmp r5, #0x0 beq _020E2B00 @@ -4217,13 +5719,44 @@ _020E2BB8: str r0, [sp, #0x40] b _020E2C2C _020E2BC8: - .byte 0x00, 0x00, 0x55, 0xE3, 0x16, 0x00, 0x00, 0x0A - .byte 0x62, 0x00, 0xDD, 0xE5, 0x07, 0x00, 0x50, 0xE3, 0x00, 0xF1, 0x8F, 0x90, 0x12, 0x00, 0x00, 0xEA - .byte 0x06, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x0D, 0x00, 0x00, 0xEA, 0x0C, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0x08, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC5, 0xE1, 0x06, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x40, 0xC5, 0xE5, 0x02, 0x00, 0x00, 0xEA - .byte 0x00, 0x40, 0x85, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x85, 0xE5 + cmp r5, #0x0 + beq _020E2C2C + ldrb r0, [sp, #0x62] + cmp r0, #0x7 + addls pc, pc, r0, lsl #0x2 + b _020E2C2C +_020E2BE0: + b _020E2C00 +_020E2BE4: + b _020E2C18 +_020E2BE8: + b _020E2C08 +_020E2BEC: + b _020E2C10 +_020E2BF0: + b _020E2C2C +_020E2BF4: + b _020E2C2C +_020E2BF8: + b _020E2C2C +_020E2BFC: + b _020E2C20 +_020E2C00: + str r4, [r5, #0x0] + b _020E2C2C +_020E2C08: + strh r4, [r5, #0x0] + b _020E2C2C +_020E2C10: + str r4, [r5, #0x0] + b _020E2C2C +_020E2C18: + strb r4, [r5, #0x0] + b _020E2C2C +_020E2C20: + str r4, [r5, #0x0] + mov r0, r4, asr #0x1f + str r0, [r5, #0x4] _020E2C2C: ldr r0, [sp, #0xc] ldrsb r5, [r0, #0x0] @@ -4343,27 +5876,81 @@ _020E2D94: _020E2D9C: ldr r0, _020E2E98 ; =0x021D7178 bl OS_TryLockMutex -_020E2DA4: - .byte 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x1A, 0xE8, 0x00, 0x9F, 0xE5 - .byte 0xE8, 0x10, 0x9F, 0xE5, 0x04, 0x20, 0x90, 0xE5, 0xE4, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5 - .byte 0x01, 0x20, 0xA0, 0xE3, 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x15, 0x00, 0x00, 0xEA - .byte 0xC4, 0x00, 0x9F, 0xE5, 0xC4, 0x10, 0x9F, 0xE5, 0x04, 0x00, 0x90, 0xE5, 0x1C, 0x10, 0x91, 0xE5 - .byte 0x6C, 0x00, 0x90, 0xE5, 0x00, 0x00, 0x51, 0xE1, 0x04, 0x00, 0x00, 0x1A, 0xB0, 0x00, 0x9F, 0xE5 - .byte 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x81, 0xE2, 0x1C, 0x10, 0x80, 0xE5, 0x09, 0x00, 0x00, 0xEA - .byte 0x90, 0x00, 0x9F, 0xE5, 0x81, 0xA4, 0xFF, 0xEB, 0x8C, 0x00, 0x9F, 0xE5, 0x8C, 0x10, 0x9F, 0xE5 - .byte 0x04, 0x20, 0x90, 0xE5, 0x88, 0x00, 0x9F, 0xE5, 0x6C, 0x30, 0x92, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x1C, 0x30, 0x81, 0xE5, 0x1C, 0x20, 0x80, 0xE5, 0x78, 0x10, 0x9F, 0xE5, 0x01, 0x20, 0x45, 0xE2 - .byte 0x02, 0x41, 0x91, 0xE7, 0x01, 0x00, 0x54, 0xE3, 0x00, 0x00, 0xA0, 0x13, 0x02, 0x01, 0x81, 0x17 - .byte 0x5C, 0x00, 0x9F, 0xE5, 0x1C, 0x10, 0x90, 0xE5, 0x01, 0x10, 0x51, 0xE2, 0x1C, 0x10, 0x80, 0xE5 - .byte 0x01, 0x00, 0x00, 0x1A, 0x3C, 0x00, 0x9F, 0xE5, 0x50, 0xA4, 0xFF, 0xEB, 0x01, 0x00, 0x54, 0xE3 - .byte 0x02, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x55, 0x03, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A - .byte 0x00, 0x00, 0xA0, 0xE3, 0xB9, 0xEC, 0xFF, 0xEB, 0x05, 0x00, 0xA0, 0xE1, 0x34, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 +_020E2DA4: ; 0x020E2DA4 + cmp r0, #0x0 + bne _020E2DD0 + ldr r0, _020E2E9C ; =0x021D3498 + ldr r1, _020E2EA0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x1c] + str r2, [r0, #0x1c] + b _020E2E28 +_020E2DD0: + ldr r0, _020E2E9C ; =0x021D3498 + ldr r1, _020E2EA0 ; =0x021D7088 + ldr r0, [r0, #0x4] + ldr r1, [r1, #0x1c] + ldr r0, [r0, #0x6c] + cmp r1, r0 + bne _020E2E00 + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r1, [r0, #0x1c] + add r1, r1, #0x1 + str r1, [r0, #0x1c] + b _020E2E28 +_020E2E00: + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_LockMutex + ldr r0, _020E2E9C ; =0x021D3498 + ldr r1, _020E2EA0 ; =0x021D7088 + ldr r2, [r0, #0x4] + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r3, [r2, #0x6c] + mov r2, #0x1 + str r3, [r1, #0x1c] + str r2, [r0, #0x1c] +_020E2E28: + ldr r1, _020E2EA8 ; =0x021D74AC + sub r2, r5, #0x1 + ldr r4, [r1, r2, lsl #0x2] + cmp r4, #0x1 + movne r0, #0x0 + strne r0, [r1, r2, lsl #0x2] + ldr r0, _020E2EA4 ; =0x021D70AC + ldr r1, [r0, #0x1c] + subs r1, r1, #0x1 + str r1, [r0, #0x1c] + bne _020E2E5C + ldr r0, _020E2E98 ; =0x021D7178 + bl OS_UnlockMutex +_020E2E5C: + cmp r4, #0x1 + beq _020E2E70 + cmp r4, #0x0 + cmpeq r5, #0x1 + bne _020E2E78 +_020E2E70: + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E2E78: + cmp r4, #0x0 + bne _020E2E88 + mov r0, #0x0 + bl exit +_020E2E88: + mov r0, r5 + blx r4 + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} + .balign 4 _020E2E98: .word 0x021D7178 -_020E2E9C: - .byte 0x98, 0x34, 0x1D, 0x02 - .byte 0x88, 0x70, 0x1D, 0x02, 0xAC, 0x70, 0x1D, 0x02, 0xAC, 0x74, 0x1D, 0x02 +_020E2E9C: .word 0x021D3498 +_020E2EA0: .word 0x021D7088 +_020E2EA4: .word 0x021D70AC +_020E2EA8: .word 0x021D74AC arm_func_start strlen strlen: ; 0x020E2EAC @@ -4390,10 +5977,20 @@ strcpy: ; 0x020E2EC8 strb r3, [r0, #0x0] cmp r3, #0x0 ldmeqia sp!, {r3-r5,pc} -_020E2EF8: - .byte 0x03, 0x40, 0x74, 0xE2, 0x05, 0x00, 0x00, 0x0A - .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5, 0x38, 0x80, 0xBD, 0x08 - .byte 0x01, 0x40, 0x54, 0xE2, 0xF9, 0xFF, 0xFF, 0x1A, 0x01, 0x20, 0x82, 0xE2, 0x01, 0x10, 0x81, 0xE2 +_020E2EF8: ; 0x020E2EF8 + rsbs r4, r4, #0x3 + beq _020E2F18 +_020E2F00: + ldrb r3, [r1, #0x1]! + cmp r3, #0x0 + strb r3, [r2, #0x1]! + ldmeqia sp!, {r3-r5,pc} +_020E2F10: ; 0x020E2F10 + subs r4, r4, #0x1 + bne _020E2F00 +_020E2F18: + add r2, r2, #0x1 + add r1, r1, #0x1 _020E2F20: ldr r5, [r1, #0x0] ldr r3, _020E2F88 ; =0xFEFEFEFF @@ -4419,8 +6016,12 @@ _020E2F64: cmp r3, #0x0 ldmeqia sp!, {r3-r5,pc} _020E2F74: - .byte 0x01, 0x30, 0xF1, 0xE5, 0x00, 0x00, 0x53, 0xE3, 0x01, 0x30, 0xE2, 0xE5 - .byte 0xFB, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 + ldrb r3, [r1, #0x1]! + cmp r3, #0x0 + strb r3, [r2, #0x1]! + bne _020E2F74 + ldmia sp!, {r3-r5,pc} + .balign 4 _020E2F88: .word 0xFEFEFEFF _020E2F8C: .word 0x80808080 @@ -4431,10 +6032,25 @@ strncpy: ; 0x020E2F90 cmp r2, #0x0 ldmeqia sp!, {r3,pc} _020E2FA0: - .byte 0xD1, 0x30, 0xD1, 0xE0, 0x0E, 0xC0, 0xA0, 0xE1, 0x01, 0x30, 0xCE, 0xE4, 0xD0, 0x30, 0xDC, 0xE1 - .byte 0x00, 0x00, 0x53, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x52, 0xE2, 0x08, 0x80, 0xBD, 0x08 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x10, 0xCE, 0xE4, 0x01, 0x20, 0x52, 0xE2, 0xFC, 0xFF, 0xFF, 0x1A - .byte 0x08, 0x80, 0xBD, 0xE8, 0x01, 0x20, 0x52, 0xE2, 0xF0, 0xFF, 0xFF, 0x1A, 0x08, 0x80, 0xBD, 0xE8 + ldrsb r3, [r1], #0x1 + mov r12, lr + strb r3, [lr], #0x1 + ldrsb r3, [r12, #0x0] + cmp r3, #0x0 + bne _020E2FD4 + subs r2, r2, #0x1 + ldmeqia sp!, {r3,pc} +_020E2FC0: ; 0x020E2FC0 + mov r1, #0x0 +_020E2FC4: + strb r1, [lr], #0x1 + subs r2, r2, #0x1 + bne _020E2FC4 + ldmia sp!, {r3,pc} +_020E2FD4: + subs r2, r2, #0x1 + bne _020E2FA0 + ldmia sp!, {r3,pc} arm_func_start strcat strcat: ; 0x020E2FE0 @@ -4487,24 +6103,83 @@ strcmp: ; 0x020E3060 subs r3, r2, r3 movne r0, r3 ldmneia sp!, {r4,pc} -_020E3078: - .byte 0x03, 0x40, 0x00, 0xE2, 0x03, 0x30, 0x01, 0xE2 - .byte 0x04, 0x00, 0x53, 0xE1, 0x2C, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x54, 0xE3, 0x10, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x03, 0x40, 0x74, 0xE2 - .byte 0x09, 0x00, 0x00, 0x0A, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5, 0x02, 0x20, 0x53, 0xE0 - .byte 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3, 0x00, 0x00, 0xA0, 0x03 - .byte 0x10, 0x80, 0xBD, 0x08, 0x01, 0x40, 0x54, 0xE2, 0xF5, 0xFF, 0xFF, 0x1A, 0x01, 0x00, 0x80, 0xE2 - .byte 0x01, 0x10, 0x81, 0xE2, 0x00, 0x20, 0x90, 0xE5, 0x8C, 0x30, 0x9F, 0xE5, 0x02, 0x40, 0xE0, 0xE1 - .byte 0x03, 0xE0, 0x82, 0xE0, 0x84, 0xC0, 0x9F, 0xE5, 0x04, 0x40, 0x0E, 0xE0, 0x0C, 0x00, 0x14, 0xE1 - .byte 0x00, 0x40, 0x91, 0xE5, 0x0B, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0x06, 0x00, 0x00, 0x1A - .byte 0x04, 0x20, 0xB0, 0xE5, 0x04, 0x40, 0xB1, 0xE5, 0x03, 0xE0, 0x82, 0xE0, 0x0C, 0x00, 0x1E, 0xE1 - .byte 0x04, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x52, 0xE1, 0xF8, 0xFF, 0xFF, 0x0A, 0x01, 0x00, 0x40, 0xE2 - .byte 0x01, 0x10, 0x41, 0xE2, 0x04, 0x00, 0x00, 0xEA, 0x00, 0x20, 0xD0, 0xE5, 0x00, 0x30, 0xD1, 0xE5 - .byte 0x03, 0x30, 0x52, 0xE0, 0x03, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x52, 0xE3 - .byte 0x00, 0x00, 0xA0, 0x03, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xF0, 0xE5, 0x01, 0x20, 0xF1, 0xE5 - .byte 0x02, 0x20, 0x53, 0xE0, 0x02, 0x00, 0xA0, 0x11, 0x10, 0x80, 0xBD, 0x18, 0x00, 0x00, 0x53, 0xE3 - .byte 0xF8, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8, 0xFF, 0xFE, 0xFE, 0xFE - .byte 0x80, 0x80, 0x80, 0x80 +_020E3078: ; 0x020E3078 + and r4, r0, #0x3 + and r3, r1, #0x3 + cmp r3, r4 + bne _020E313C + cmp r4, #0x0 + beq _020E30D4 + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E309C: ; 0x020E309C + rsbs r4, r4, #0x3 + beq _020E30CC +_020E30A4: + ldrb r3, [r0, #0x1]! + ldrb r2, [r1, #0x1]! + subs r2, r3, r2 + movne r0, r2 + ldmneia sp!, {r4,pc} +_020E30B8: ; 0x020E30B8 + cmp r3, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E30C4: ; 0x020E30C4 + subs r4, r4, #0x1 + bne _020E30A4 +_020E30CC: + add r0, r0, #0x1 + add r1, r1, #0x1 +_020E30D4: + ldr r2, [r0, #0x0] + ldr r3, _020E316C ; =0xFEFEFEFF + mvn r4, r2 + add lr, r2, r3 + ldr ip, _020E3170 ; =0x80808080 + and r4, lr, r4 + tst r4, r12 + ldr r4, [r1, #0x0] + bne _020E3128 + cmp r2, r4 + bne _020E311C +_020E3100: + ldr r2, [r0, #0x4]! + ldr r4, [r1, #0x4]! + add lr, r2, r3 + tst lr, r12 + bne _020E3128 + cmp r2, r4 + beq _020E3100 +_020E311C: + sub r0, r0, #0x1 + sub r1, r1, #0x1 + b _020E313C +_020E3128: + ldrb r2, [r0, #0x0] + ldrb r3, [r1, #0x0] + subs r3, r2, r3 + movne r0, r3 + ldmneia sp!, {r4,pc} +_020E313C: + cmp r2, #0x0 + moveq r0, #0x0 + ldmeqia sp!, {r4,pc} +_020E3148: + ldrb r3, [r0, #0x1]! + ldrb r2, [r1, #0x1]! + subs r2, r3, r2 + movne r0, r2 + ldmneia sp!, {r4,pc} +_020E315C: ; 0x020E315C + cmp r3, #0x0 + bne _020E3148 + mov r0, #0x0 + ldmia sp!, {r4,pc} + .balign 4 +_020E316C: .word 0xFEFEFEFF +_020E3170: .word 0x80808080 arm_func_start strncmp strncmp: ; 0x020E3174 @@ -4607,13 +6282,34 @@ strstr: ; 0x020E32A4 ldrneb r2, [r1, #0x0] cmpne r2, #0x0 ldmeqia sp!, {r4,pc} -_020E32B8: - .byte 0x00, 0x30, 0xD0, 0xE5, 0x01, 0x40, 0x80, 0xE2 - .byte 0x00, 0x00, 0x53, 0xE3, 0x0F, 0x00, 0x00, 0x0A, 0x02, 0x00, 0x53, 0xE1, 0x0A, 0x00, 0x00, 0x1A - .byte 0x04, 0xE0, 0xA0, 0xE1, 0x01, 0xC0, 0x81, 0xE2, 0x01, 0x30, 0xDC, 0xE4, 0x01, 0x00, 0xDE, 0xE4 - .byte 0x03, 0x00, 0x50, 0xE1, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x50, 0xE3, 0xF9, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x53, 0xE3, 0x01, 0x00, 0x44, 0x02, 0x10, 0x80, 0xBD, 0x08, 0x01, 0x30, 0xD4, 0xE4 - .byte 0x00, 0x00, 0x53, 0xE3, 0xEF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3, 0x10, 0x80, 0xBD, 0xE8 +_020E32B8: ; 0x020E32B8 + ldrb r3, [r0, #0x0] + add r4, r0, #0x1 + cmp r3, #0x0 + beq _020E3308 +_020E32C8: + cmp r3, r2 + bne _020E32FC + mov lr, r4 + add r12, r1, #0x1 +_020E32D8: + ldrb r3, [r12], #0x1 + ldrb r0, [lr], #0x1 + cmp r0, r3 + bne _020E32F0 + cmp r0, #0x0 + bne _020E32D8 +_020E32F0: + cmp r3, #0x0 + subeq r0, r4, #0x1 + ldmeqia sp!, {r4,pc} +_020E32FC: + ldrb r3, [r4], #0x1 + cmp r3, #0x0 + bne _020E32C8 +_020E3308: + mov r0, #0x0 + ldmia sp!, {r4,pc} arm_func_start __strtold __strtold: ; 0x020E3310 @@ -4697,10 +6393,24 @@ _020E3418: cmp r5, #0x0 addge pc, pc, r5, lsl #0x2 b _020E4104 -_020E3444: - .byte 0x2E, 0x03, 0x00, 0xEA, 0x21, 0x00, 0x00, 0xEA, 0x19, 0x01, 0x00, 0xEA - .byte 0x2B, 0x03, 0x00, 0xEA, 0x43, 0x01, 0x00, 0xEA, 0x29, 0x03, 0x00, 0xEA, 0x28, 0x03, 0x00, 0xEA - .byte 0x27, 0x03, 0x00, 0xEA, 0x49, 0x01, 0x00, 0xEA +_020E3444: ; 0x020E3444 + b _020E4104 +_020E3448: ; 0x020E3448 + b _020E34D4 +_020E344C: ; 0x020E344C + b _020E38B8 +_020E3450: ; 0x020E3450 + b _020E4104 +_020E3454: ; 0x020E3454 + b _020E3968 +_020E3458: ; 0x020E3458 + b _020E4104 +_020E345C: ; 0x020E345C + b _020E4104 +_020E3460: ; 0x020E3460 + b _020E4104 +_020E3464: ; 0x020E3464 + b _020E3990 _020E3468: cmp r5, #0x10 beq _020E3A34 @@ -4736,25 +6446,91 @@ _020E34C8: beq _020E3C98 b _020E4104 _020E34D4: - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x00, 0x0E, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x2C, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x2C, 0x00, 0x8D, 0xE5, 0xF6, 0x02, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x01, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x00, 0xEA - .byte 0xB4, 0x0D, 0x9F, 0xE5, 0x01, 0x00, 0xD0, 0xE7, 0x49, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0xCA - .byte 0x15, 0x00, 0x00, 0xAA, 0x2D, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0xCA, 0x2B, 0x00, 0x50, 0xE3 - .byte 0x21, 0x00, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0A, 0x2D, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x0A - .byte 0x1D, 0x00, 0x00, 0xEA, 0x4E, 0x00, 0x50, 0xE3, 0x13, 0x00, 0x00, 0x0A, 0x1A, 0x00, 0x00, 0xEA - .byte 0x01, 0x00, 0xA0, 0xE3, 0x28, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x01, 0x00, 0xA0, 0xE3, 0x18, 0x00, 0x8D, 0xE5, 0xD5, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x01, 0x59, 0xA0, 0xE3, 0xCD, 0x02, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0x02, 0x5A, 0xA0, 0xE3, 0xC5, 0x02, 0x00, 0xEA, 0x02, 0x50, 0xA0, 0xE3 - .byte 0xC3, 0x02, 0x00, 0xEA + cmp r1, #0x0 + blt _020E34E4 + cmp r1, #0x80 + blt _020E34EC +_020E34E4: + mov r0, #0x0 + b _020E34FC +_020E34EC: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x100 +_020E34FC: + cmp r0, #0x0 + beq _020E3528 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + blx r9 + mov r1, r0 + ldr r0, [sp, #0x2c] + add r0, r0, #0x1 + str r0, [sp, #0x2c] + b _020E4104 +_020E3528: + cmp r1, #0x0 + blt _020E3538 + cmp r1, #0x80 + blt _020E3540 +_020E3538: + mov r0, r1 + b _020E3548 +_020E3540: + ldr r0, _020E42FC ; =0x0210428C + ldrb r0, [r0, r1] +_020E3548: + cmp r0, #0x49 + bgt _020E3574 + bge _020E35AC + cmp r0, #0x2d + bgt _020E35EC + cmp r0, #0x2b + blt _020E35EC + beq _020E3588 + cmp r0, #0x2d + beq _020E3580 + b _020E35EC +_020E3574: + cmp r0, #0x4e + beq _020E35CC + b _020E35EC +_020E3580: + mov r0, #0x1 + str r0, [sp, #0x28] +_020E3588: + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + mov r0, #0x1 + str r0, [sp, #0x18] + b _020E4104 +_020E35AC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + mov r5, #0x4000 + b _020E4104 +_020E35CC: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + mov r5, #0x2000 + b _020E4104 +_020E35EC: + mov r5, #0x2 + b _020E4104 _020E35F4: mov r5, #0x1 add r7, sp, #0x4d @@ -4948,10 +6724,11 @@ _020E3854: mov r3, r1 mov r1, r0 bl _dsub -_020E3884: - .byte 0x00, 0x00, 0x00, 0xEA +_020E3884: ; 0x020E3884 + b _020E388C _020E3888: bl nan +_020E388C: ldr r2, [sp, #0x2c] add r2, r2, r5 add r3, r6, r2 @@ -4965,31 +6742,114 @@ _020E38B0: mov r5, #0x1000 b _020E4104 _020E38B8: - .byte 0x2E, 0x00, 0x51, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x10, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x02, 0x00, 0xEA - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0xF4, 0x09, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x5A, 0xA0, 0x03 - .byte 0xFB, 0x01, 0x00, 0x0A, 0x30, 0x00, 0x51, 0xE3, 0x10, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0xB0, 0x29, 0x9F, 0xE5, 0x00, 0x00, 0xD2, 0xE7, 0x58, 0x00, 0x50, 0xE3 - .byte 0x02, 0x59, 0xA0, 0x03, 0x01, 0xA0, 0xA0, 0x03, 0x04, 0x50, 0xA0, 0x13, 0xE8, 0x01, 0x00, 0xEA - .byte 0x08, 0x50, 0xA0, 0xE3, 0xE6, 0x01, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3, 0x08, 0x50, 0xA0, 0x13 - .byte 0xE3, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xDC, 0x01, 0x00, 0xEA - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1, 0x44, 0x09, 0x9F, 0xE5 - .byte 0xB2, 0x00, 0x90, 0xE1, 0x08, 0x00, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x1A - .byte 0x2E, 0x00, 0x51, 0xE3, 0x40, 0x50, 0xA0, 0x13, 0xCD, 0x01, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x20, 0x50, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC5, 0x01, 0x00, 0xEA, 0x84, 0x20, 0xDD, 0xE5 - .byte 0x14, 0x00, 0x52, 0xE3, 0x1C, 0x00, 0x9D, 0x25, 0x01, 0x00, 0x80, 0x22, 0x1C, 0x00, 0x8D, 0x25 - .byte 0x04, 0x00, 0x00, 0x2A, 0x01, 0x00, 0x82, 0xE2, 0x84, 0x00, 0xCD, 0xE5, 0x80, 0x00, 0x8D, 0xE2 - .byte 0x02, 0x00, 0x80, 0xE0, 0x05, 0x10, 0xC0, 0xE5, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xB3, 0x01, 0x00, 0xEA + cmp r1, #0x2e + bne _020E38E0 + mov r5, #0x10 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E38E0: + cmp r1, #0x0 + blt _020E38F0 + cmp r1, #0x80 + blt _020E38F8 +_020E38F0: + mov r0, #0x0 + b _020E3908 +_020E38F8: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E3908: + cmp r0, #0x0 + moveq r5, #0x1000 + beq _020E4104 + cmp r1, #0x30 + bne _020E3960 + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + cmp r0, #0x0 + mov r1, r0 + blt _020E394C + cmp r0, #0x80 + bge _020E394C + ldr r2, _020E42FC ; =0x0210428C + ldrb r0, [r2, r0] +_020E394C: + cmp r0, #0x58 + moveq r5, #0x8000 + moveq r10, #0x1 + movne r5, #0x4 + b _020E4104 +_020E3960: + mov r5, #0x8 + b _020E4104 +_020E3968: + cmp r1, #0x30 + movne r5, #0x8 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3990: + cmp r1, #0x0 + blt _020E39A0 + cmp r1, #0x80 + blt _020E39A8 +_020E39A0: + mov r0, #0x0 + b _020E39B8 +_020E39A8: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x8 +_020E39B8: + cmp r0, #0x0 + bne _020E39EC + cmp r1, #0x2e + movne r5, #0x40 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r5, #0x20 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E39EC: + ldrb r2, [sp, #0x84] + cmp r2, #0x14 + ldrcs r0, [sp, #0x1c] + addcs r0, r0, #0x1 + strcs r0, [sp, #0x1c] + bhs _020E3A18 + add r0, r2, #0x1 + strb r0, [sp, #0x84] + add r0, sp, #0x80 + add r0, r0, r2 + strb r1, [r0, #0x5] +_020E3A18: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 _020E3A34: cmp r1, #0x0 blt _020E3A44 @@ -5178,10 +7038,24 @@ _020E3C98: cmp r10, #0x0 addge pc, pc, r10, lsl #0x2 b _020E4104 -_020E3CB8: - .byte 0x11, 0x01, 0x00, 0xEA, 0x12, 0x00, 0x00, 0xEA - .byte 0x25, 0x00, 0x00, 0xEA, 0x0E, 0x01, 0x00, 0xEA, 0x2D, 0x00, 0x00, 0xEA, 0x0C, 0x01, 0x00, 0xEA - .byte 0x0B, 0x01, 0x00, 0xEA, 0x0A, 0x01, 0x00, 0xEA, 0x6D, 0x00, 0x00, 0xEA +_020E3CB8: ; 0x020E3CB8 + b _020E4104 +_020E3CBC: ; 0x020E3CBC + b _020E3D0C +_020E3CC0: ; 0x020E3CC0 + b _020E3D5C +_020E3CC4: ; 0x020E3CC4 + b _020E4104 +_020E3CC8: ; 0x020E3CC8 + b _020E3D84 +_020E3CCC: ; 0x020E3CCC + b _020E4104 +_020E3CD0: ; 0x020E3CD0 + b _020E4104 +_020E3CD4: ; 0x020E3CD4 + b _020E4104 +_020E3CD8: ; 0x020E3CD8 + b _020E3E94 _020E3CDC: cmp r10, #0x10 beq _020E3F70 @@ -5198,45 +7072,173 @@ _020E3D00: beq _020E408C b _020E4104 _020E3D0C: - .byte 0x00, 0x10, 0xA0, 0xE3 - .byte 0x45, 0x00, 0x8D, 0xE2, 0x14, 0x00, 0x8D, 0xE5, 0x00, 0x10, 0xC0, 0xE5, 0x01, 0x10, 0xC0, 0xE5 - .byte 0x02, 0x10, 0xC0, 0xE5, 0x03, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xC0, 0xE5, 0x05, 0x10, 0xC0, 0xE5 - .byte 0x06, 0x10, 0xC0, 0xE5, 0x07, 0x10, 0xC0, 0xE5, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x01, 0xB0, 0xA0, 0xE1, 0x02, 0xA0, 0xA0, 0xE3, 0x01, 0x40, 0x84, 0xE2 - .byte 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xE9, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x51, 0xE3 - .byte 0x04, 0xA0, 0xA0, 0x13, 0xE6, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0xDF, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x50, 0x05, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x00, 0x00, 0x1A, 0x2E, 0x00, 0x51, 0xE3, 0x10, 0xA0, 0xA0, 0x13, 0xD0, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x08, 0xA0, 0xA0, 0xE3 - .byte 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0xC8, 0x00, 0x00, 0xEA - .byte 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3, 0x00, 0x00, 0x52, 0xE1, 0x21, 0x00, 0x00, 0x2A - .byte 0x02, 0x00, 0xA0, 0xE1, 0x01, 0x00, 0x80, 0xE2, 0x08, 0x00, 0x8D, 0xE5, 0x14, 0x00, 0x9D, 0xE5 - .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA - .byte 0x80, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xAA, 0xDC, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7 - .byte 0x41, 0x00, 0x51, 0xE3, 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1 - .byte 0xFF, 0x30, 0x01, 0xE2, 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01 - .byte 0xAB, 0x2F, 0x8B, 0xE0, 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01 - .byte 0x14, 0x10, 0x9D, 0xE5, 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE1, 0xA2, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x9B, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x81, 0x20, 0xA0, 0xE1 - .byte 0x40, 0x04, 0x9F, 0xE5, 0xB2, 0x00, 0x90, 0xE1, 0x01, 0x0B, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x10, 0xA0, 0xA0, 0x03, 0x8E, 0x00, 0x00, 0x0A, 0x08, 0x20, 0x9D, 0xE5, 0x0E, 0x00, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x52, 0xE1, 0x1E, 0x00, 0x00, 0x2A, 0x14, 0x00, 0x9D, 0xE5, 0xAB, 0x2F, 0x8B, 0xE0 - .byte 0x00, 0x00, 0x51, 0xE3, 0xC2, 0x00, 0xD0, 0xE7, 0x03, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x51, 0xE3 - .byte 0x01, 0x00, 0x00, 0xAA, 0x00, 0x24, 0x9F, 0xE5, 0x01, 0x10, 0xD2, 0xE7, 0x41, 0x00, 0x51, 0xE3 - .byte 0x37, 0x10, 0x41, 0xA2, 0x30, 0x10, 0x41, 0xB2, 0xAB, 0x2F, 0xA0, 0xE1, 0xFF, 0x30, 0x01, 0xE2 - .byte 0x8B, 0x1F, 0x62, 0xE0, 0xE1, 0x1F, 0x92, 0xE0, 0x03, 0x12, 0xA0, 0x01, 0xAB, 0x2F, 0x8B, 0xE0 - .byte 0x03, 0x00, 0x80, 0x11, 0xFF, 0x10, 0x01, 0x02, 0x01, 0x00, 0x80, 0x01, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x01, 0xB0, 0x8B, 0xE2, 0xC2, 0x00, 0xC1, 0xE7, 0x00, 0x10, 0xA0, 0xE3, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x40, 0x84, 0xE2, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x6B, 0x00, 0x00, 0xEA, 0x01, 0x40, 0x84, 0xE2, 0x08, 0x00, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x39, 0xFF, 0x2F, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x64, 0x00, 0x00, 0xEA + mov r1, #0x0 + add r0, sp, #0x45 + str r0, [sp, #0x14] + strb r1, [r0, #0x0] + strb r1, [r0, #0x1] + strb r1, [r0, #0x2] + strb r1, [r0, #0x3] + strb r1, [r0, #0x4] + strb r1, [r0, #0x5] + strb r1, [r0, #0x6] + strb r1, [r0, #0x7] + mov r0, r8 + mov r2, r1 + str r1, [sp, #0x8] + mov r11, r1 + mov r10, #0x2 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3D5C: + cmp r1, #0x30 + movne r10, #0x4 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3D84: + cmp r1, #0x0 + blt _020E3D94 + cmp r1, #0x80 + blt _020E3D9C +_020E3D94: + mov r0, #0x0 + b _020E3DAC +_020E3D9C: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x400 +_020E3DAC: + cmp r0, #0x0 + bne _020E3DE0 + cmp r1, #0x2e + movne r10, #0x10 + bne _020E4104 + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + mov r10, #0x8 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3DE0: + ldr r2, [sp, #0x8] + mov r0, #0xe + cmp r2, r0 + bhs _020E3E78 + mov r0, r2 + add r0, r0, #0x1 + str r0, [sp, #0x8] + ldr r0, [sp, #0x14] + add r2, r11, r11, lsr #0x1f + cmp r1, #0x0 + ldrb r0, [r0, r2, asr #0x1] + blt _020E3E20 + cmp r1, #0x80 + bge _020E3E20 + ldr r2, _020E42FC ; =0x0210428C + ldrb r1, [r2, r1] +_020E3E20: + cmp r1, #0x41 + subge r1, r1, #0x37 + sublt r1, r1, #0x30 + mov r2, r11, lsr #0x1f + and r3, r1, #0xff + rsb r1, r2, r11, lsl #0x1f + adds r1, r2, r1, ror #0x1f + moveq r1, r3, lsl #0x4 + add r2, r11, r11, lsr #0x1f + orrne r0, r0, r3 + andeq r1, r1, #0xff + orreq r0, r0, r1 + ldr r1, [sp, #0x14] + add r11, r11, #0x1 + strb r0, [r1, r2, asr #0x1] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3E78: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3E94: + cmp r1, #0x0 + blt _020E3EA4 + cmp r1, #0x80 + blt _020E3EAC +_020E3EA4: + mov r0, #0x0 + b _020E3EBC +_020E3EAC: + mov r2, r1, lsl #0x1 + ldr r0, _020E42F8 ; =0x0210430C + ldrh r0, [r0, r2] + and r0, r0, #0x400 +_020E3EBC: + cmp r0, #0x0 + moveq r10, #0x10 + beq _020E4104 + ldr r2, [sp, #0x8] + mov r0, #0xe + cmp r2, r0 + bhs _020E3F54 + ldr r0, [sp, #0x14] + add r2, r11, r11, lsr #0x1f + cmp r1, #0x0 + ldrb r0, [r0, r2, asr #0x1] + blt _020E3EFC + cmp r1, #0x80 + bge _020E3EFC + ldr r2, _020E42FC ; =0x0210428C + ldrb r1, [r2, r1] +_020E3EFC: + cmp r1, #0x41 + subge r1, r1, #0x37 + sublt r1, r1, #0x30 + mov r2, r11, lsr #0x1f + and r3, r1, #0xff + rsb r1, r2, r11, lsl #0x1f + adds r1, r2, r1, ror #0x1f + moveq r1, r3, lsl #0x4 + add r2, r11, r11, lsr #0x1f + orrne r0, r0, r3 + andeq r1, r1, #0xff + orreq r0, r0, r1 + ldr r1, [sp, #0x14] + add r11, r11, #0x1 + strb r0, [r1, r2, asr #0x1] + mov r1, #0x0 + mov r0, r8 + mov r2, r1 + add r4, r4, #0x1 + blx r9 + mov r1, r0 + b _020E4104 +_020E3F54: + add r4, r4, #0x1 + mov r0, r8 + mov r1, #0x0 + mov r2, r1 + blx r9 + mov r1, r0 + b _020E4104 _020E3F70: cmp r1, #0x0 blt _020E3F80 @@ -5454,11 +7456,21 @@ _020E423C: addne sp, sp, #0xa8 movne r1, r0 ldmneia sp!, {r3-r11,pc} -_020E4264: - .byte 0x28, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x9C, 0x10, 0x9F, 0x05 - .byte 0xA8, 0xD0, 0x8D, 0x02, 0x03, 0x00, 0x91, 0x08, 0xF8, 0x8F, 0xBD, 0x08, 0x8C, 0x10, 0x9F, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x0C, 0x00, 0x91, 0xE8, 0x00, 0x10, 0xA0, 0xE1, 0xCE, 0x18, 0x00, 0xEB - .byte 0xA8, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E4264: ; 0x020E4264 + ldr r0, [sp, #0x28] + cmp r0, #0x0 + ldreq r1, _020E4310 ; =0x02106B7C + addeq sp, sp, #0xa8 + ldmeqia r1, {r0-r1} + ldmeqia sp!, {r3-r11,pc} +_020E427C: ; 0x020E427C + ldr r1, _020E4310 ; =0x02106B7C + mov r0, #0x0 + ldmia r1, {r2-r3} + mov r1, r0 + bl _dsub + add sp, sp, #0xa8 + ldmia sp!, {r3-r11,pc} _020E4298: ldr r1, [sp, #0x20] add r0, sp, #0x80 @@ -5721,7 +7733,7 @@ atod: ; 0x020E463C .balign 4 _020E4648: .word strtold - arm_func_start __strtoul +arm_func_start __strtoul __strtoul: stmdb sp!, {r4-r11,lr} sub sp, sp, #0xc @@ -5771,7 +7783,7 @@ _020E46F0: beq _020E4708 mov r1, r9 mvn r0, #0x0 - bl _u32_div_f + bl _u32_div_f str r0, [sp, #0x4] _020E4708: mvn r11, #0x0 @@ -5782,34 +7794,113 @@ _020E4710: cmp r4, #0x0 addge pc, pc, r4, lsl #0x2 b _020E49C8 -_020E4724: - .byte 0xA7, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA - .byte 0xA4, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0xA2, 0x00, 0x00, 0xEA, 0xA1, 0x00, 0x00, 0xEA - .byte 0xA0, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x00, 0xEA +_020E4724: ; 0x020E4724 + b _020E49C8 +_020E4728: ; 0x020E4728 + b _020E4754 +_020E472C: ; 0x020E472C + b _020E4800 +_020E4730: ; 0x020E4730 + b _020E49C8 +_020E4734: ; 0x020E4734 + b _020E483C +_020E4738: ; 0x020E4738 + b _020E49C8 +_020E473C: ; 0x020E473C + b _020E49C8 +_020E4740: ; 0x020E4740 + b _020E49C8 +_020E4744: ; 0x020E4744 + b _020E487C _020E4748: cmp r4, #0x10 beq _020E487C b _020E49C8 _020E4754: - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3 - .byte 0x01, 0x00, 0x00, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0xB8, 0x02, 0x9F, 0xE5 - .byte 0x86, 0x10, 0xA0, 0xE1, 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2 - .byte 0x08, 0x00, 0x8D, 0xE5, 0x87, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3 - .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x34, 0x00, 0x9D, 0xE5 - .byte 0x01, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x71, 0x00, 0x00, 0xEA - .byte 0x00, 0x00, 0x59, 0xE3, 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x04, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1 - .byte 0x64, 0x00, 0x00, 0xEA, 0x08, 0x40, 0xA0, 0xE3, 0x62, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3 - .byte 0x78, 0x00, 0x56, 0x13, 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x01, 0x20, 0xA0, 0xE1, 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x56, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 - .byte 0x08, 0x90, 0xA0, 0x03, 0x10, 0x40, 0xA0, 0xE3, 0x52, 0x00, 0x00, 0xEA + cmp r6, #0x0 + blt _020E4764 + cmp r6, #0x80 + blt _020E476C +_020E4764: + mov r0, #0x0 + b _020E477C +_020E476C: + ldr r0, _020E4A2C ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E477C: + cmp r0, #0x0 + beq _020E47A8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x8] + add r0, r0, #0x1 + str r0, [sp, #0x8] + b _020E49C8 +_020E47A8: + cmp r6, #0x2b + bne _020E47CC + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E47F8 +_020E47CC: + cmp r6, #0x2d + bne _020E47F8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x34] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E47F8: + mov r4, #0x2 + b _020E49C8 +_020E4800: + cmp r9, #0x0 + cmpne r9, #0x10 + bne _020E4834 + cmp r6, #0x30 + bne _020E4834 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r4, #0x4 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E49C8 +_020E4834: + mov r4, #0x8 + b _020E49C8 +_020E483C: + cmp r6, #0x58 + cmpne r6, #0x78 + bne _020E486C + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r9, #0x10 + mov r4, #0x8 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E49C8 +_020E486C: + cmp r9, #0x0 + moveq r9, #0x8 + mov r4, #0x10 + b _020E49C8 _020E487C: ldr r0, [sp, #0x4] cmp r9, #0x0 @@ -5818,7 +7909,7 @@ _020E487C: bne _020E48A0 mov r0, r11 mov r1, r9 - bl _u32_div_f + bl _u32_div_f str r0, [sp, #0x4] _020E48A0: cmp r6, #0x0 @@ -6008,34 +8099,113 @@ _020E4B0C: cmp r4, #0x0 addge pc, pc, r4, lsl #0x2 b _020E4E08 -_020E4B20: - .byte 0xB8, 0x00, 0x00, 0xEA, 0x09, 0x00, 0x00, 0xEA, 0x33, 0x00, 0x00, 0xEA, 0xB5, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x00, 0xEA, 0xB3, 0x00, 0x00, 0xEA, 0xB2, 0x00, 0x00, 0xEA, 0xB1, 0x00, 0x00, 0xEA - .byte 0x4C, 0x00, 0x00, 0xEA +_020E4B20: ; 0x020E4B20 + b _020E4E08 +_020E4B24: ; 0x020E4B24 + b _020E4B50 +_020E4B28: ; 0x020E4B28 + b _020E4BFC +_020E4B2C: ; 0x020E4B2C + b _020E4E08 +_020E4B30: ; 0x020E4B30 + b _020E4C38 +_020E4B34: ; 0x020E4B34 + b _020E4E08 +_020E4B38: ; 0x020E4B38 + b _020E4E08 +_020E4B3C: ; 0x020E4B3C + b _020E4E08 +_020E4B40: ; 0x020E4B40 + b _020E4C78 _020E4B44: cmp r4, #0x10 beq _020E4C78 b _020E4E08 _020E4B50: - .byte 0x00, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA, 0x80, 0x00, 0x56, 0xE3, 0x01, 0x00, 0x00, 0xBA - .byte 0x00, 0x00, 0xA0, 0xE3, 0x03, 0x00, 0x00, 0xEA, 0x08, 0x03, 0x9F, 0xE5, 0x86, 0x10, 0xA0, 0xE1 - .byte 0xB1, 0x00, 0x90, 0xE1, 0x01, 0x0C, 0x00, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x14, 0x00, 0x9D, 0xE5, 0x01, 0x00, 0x80, 0xE2, 0x14, 0x00, 0x8D, 0xE5 - .byte 0x98, 0x00, 0x00, 0xEA, 0x2B, 0x00, 0x56, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3 - .byte 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x0A, 0x00, 0x00, 0xEA, 0x2D, 0x00, 0x56, 0xE3, 0x08, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x50, 0x85, 0xE2 - .byte 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x44, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0xA0, 0xE3 - .byte 0x00, 0x10, 0x80, 0xE5, 0x02, 0x40, 0xA0, 0xE3, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3 - .byte 0x10, 0x00, 0x59, 0x13, 0x09, 0x00, 0x00, 0x1A, 0x30, 0x00, 0x56, 0xE3, 0x07, 0x00, 0x00, 0x1A - .byte 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1, 0x04, 0x40, 0xA0, 0xE3 - .byte 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1, 0x00, 0x60, 0xA0, 0xE1, 0x75, 0x00, 0x00, 0xEA - .byte 0x08, 0x40, 0xA0, 0xE3, 0x73, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x56, 0xE3, 0x78, 0x00, 0x56, 0x13 - .byte 0x08, 0x00, 0x00, 0x1A, 0x00, 0x10, 0xA0, 0xE3, 0x07, 0x00, 0xA0, 0xE1, 0x01, 0x20, 0xA0, 0xE1 - .byte 0x10, 0x90, 0xA0, 0xE3, 0x08, 0x40, 0xA0, 0xE3, 0x01, 0x50, 0x85, 0xE2, 0x38, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x60, 0xA0, 0xE1, 0x67, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x59, 0xE3, 0x08, 0x90, 0xA0, 0x03 - .byte 0x10, 0x40, 0xA0, 0xE3, 0x63, 0x00, 0x00, 0xEA + cmp r6, #0x0 + blt _020E4B60 + cmp r6, #0x80 + blt _020E4B68 +_020E4B60: + mov r0, #0x0 + b _020E4B78 +_020E4B68: + ldr r0, _020E4E78 ; =0x0210430C + mov r1, r6, lsl #0x1 + ldrh r0, [r0, r1] + and r0, r0, #0x100 +_020E4B78: + cmp r0, #0x0 + beq _020E4BA4 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x14] + add r0, r0, #0x1 + str r0, [sp, #0x14] + b _020E4E08 +_020E4BA4: + cmp r6, #0x2b + bne _020E4BC8 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4BF4 +_020E4BC8: + cmp r6, #0x2d + bne _020E4BF4 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + ldr r0, [sp, #0x44] + mov r1, #0x1 + str r1, [r0, #0x0] +_020E4BF4: + mov r4, #0x2 + b _020E4E08 +_020E4BFC: + cmp r9, #0x0 + cmpne r9, #0x10 + bne _020E4C30 + cmp r6, #0x30 + bne _020E4C30 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r4, #0x4 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4E08 +_020E4C30: + mov r4, #0x8 + b _020E4E08 +_020E4C38: + cmp r6, #0x58 + cmpne r6, #0x78 + bne _020E4C68 + mov r1, #0x0 + mov r0, r7 + mov r2, r1 + mov r9, #0x10 + mov r4, #0x8 + add r5, r5, #0x1 + blx r8 + mov r6, r0 + b _020E4E08 +_020E4C68: + cmp r9, #0x0 + moveq r9, #0x8 + mov r4, #0x10 + b _020E4E08 _020E4C78: ldr r1, [sp, #0x8] mov r0, #0x0 @@ -6208,15 +8378,29 @@ strtoul: ; 0x020E4E80 sub r1, lr, #0x80000001 str r12, [sp, #0x8] bl __strtoul -_020E4EC8: - .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15 - .byte 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15, 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3 - .byte 0x05, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x9F, 0xE5, 0x22, 0x10, 0xA0, 0xE3, 0x00, 0x10, 0x80, 0xE5 - .byte 0x20, 0xD0, 0x8D, 0xE2, 0x00, 0x00, 0xE0, 0xE3, 0x38, 0x80, 0xBD, 0xE8, 0x18, 0x10, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x00, 0x00, 0x60, 0x12, 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 +_020E4EC8: ; 0x020E4EC8 + cmp r4, #0x0 + ldrne r1, [sp, #0x1c] + addne r1, r5, r1 + strne r1, [r4, #0x0] + ldr r1, [sp, #0x14] + cmp r1, #0x0 + beq _020E4EFC + ldr r0, _020E4F14 ; =0x021D74A8 + mov r1, #0x22 + str r1, [r0, #0x0] + add sp, sp, #0x20 + mvn r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E4EFC: + ldr r1, [sp, #0x18] + cmp r1, #0x0 + rsbne r0, r0, #0x0 + add sp, sp, #0x20 + ldmia sp!, {r3-r5,pc} + .balign 4 _020E4F10: .word __StringRead -_020E4F14: - .byte 0xA8, 0x74, 0x1D, 0x02 +_020E4F14: .word 0x021D74A8 arm_func_start strtold2 strtold2: ; 0x020E4F18 @@ -6238,18 +8422,43 @@ strtold2: ; 0x020E4F18 sub r1, lr, #0x80000001 str r12, [sp, #0x8] bl __strtoul -_020E4F60: - .byte 0x00, 0x00, 0x54, 0xE3, 0x1C, 0x10, 0x9D, 0x15, 0x01, 0x10, 0x85, 0x10, 0x00, 0x10, 0x84, 0x15 - .byte 0x14, 0x10, 0x9D, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x09, 0x00, 0x00, 0x1A, 0x18, 0x20, 0x9D, 0xE5 - .byte 0x00, 0x00, 0x52, 0xE3, 0x02, 0x00, 0x00, 0x1A, 0x02, 0x11, 0xE0, 0xE3, 0x01, 0x00, 0x50, 0xE1 - .byte 0x03, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x52, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x02, 0x01, 0x50, 0xE3 - .byte 0x08, 0x00, 0x00, 0x9A, 0x18, 0x00, 0x9D, 0xE5, 0x2C, 0x10, 0x9F, 0xE5, 0x22, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x50, 0xE3, 0x02, 0x01, 0xA0, 0x13, 0x00, 0x20, 0x81, 0xE5, 0x20, 0xD0, 0x8D, 0xE2 - .byte 0x02, 0x01, 0xE0, 0x03, 0x38, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x52, 0xE3, 0x00, 0x00, 0x60, 0x12 - .byte 0x20, 0xD0, 0x8D, 0xE2, 0x38, 0x80, 0xBD, 0xE8 +_020E4F60: ; 0x020E4F60 + cmp r4, #0x0 + ldrne r1, [sp, #0x1c] + addne r1, r5, r1 + strne r1, [r4, #0x0] + ldr r1, [sp, #0x14] + cmp r1, #0x0 + bne _020E4FA4 + ldr r2, [sp, #0x18] + cmp r2, #0x0 + bne _020E4F94 + mvn r1, #0x80000000 + cmp r0, r1 + bhi _020E4FA4 +_020E4F94: + cmp r2, #0x0 + beq _020E4FC8 + cmp r0, #0x80000000 + bls _020E4FC8 +_020E4FA4: + ldr r0, [sp, #0x18] + ldr r1, _020E4FDC ; =0x021D74A8 + mov r2, #0x22 + cmp r0, #0x0 + movne r0, #0x80000000 + str r2, [r1, #0x0] + add sp, sp, #0x20 + mvneq r0, #0x80000000 + ldmia sp!, {r3-r5,pc} +_020E4FC8: + cmp r2, #0x0 + rsbne r0, r0, #0x0 + add sp, sp, #0x20 + ldmia sp!, {r3-r5,pc} + .balign 4 _020E4FD8: .word __StringRead -_020E4FDC: - .byte 0xA8, 0x74, 0x1D, 0x02 +_020E4FDC: .word 0x021D74A8 arm_func_start atol atol: ; 0x020E4FE0 @@ -6260,7 +8469,7 @@ atol: ; 0x020E4FE0 .balign 4 _020E4FF0: .word strtold2 - arm_func_start fwide +arm_func_start fwide fwide: cmp r0, #0x0 beq _020E500C @@ -6306,8 +8515,8 @@ wmemcpy: ; 0x020E5068 .balign 4 _020E5074: .word memcpy - arm_func_start wmemchr -wmemchr: ; 0x020E5078 +arm_func_start wmemchr +wmemchr: cmp r2, #0x0 beq _020E5098 _020E5080: @@ -6561,9 +8770,20 @@ _020E53A8: subs r0, r3, #0x41 addpl pc, pc, r0, lsl #0x2 b _020E55EC -_020E53D4: - .byte 0x41, 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA - .byte 0x81, 0x00, 0x00, 0xEA, 0x4F, 0x00, 0x00, 0xEA, 0x2E, 0x00, 0x00, 0xEA, 0x49, 0x00, 0x00, 0xEA +_020E53D4: ; 0x020E53D4 + b _020E54E0 +_020E53D8: ; 0x020E53D8 + b _020E55EC +_020E53DC: ; 0x020E53DC + b _020E55EC +_020E53E0: ; 0x020E53E0 + b _020E55EC +_020E53E4: ; 0x020E53E4 + b _020E5528 +_020E53E8: ; 0x020E53E8 + b _020E54A8 +_020E53EC: ; 0x020E53EC + b _020E5518 _020E53F0: cmp r3, #0x58 beq _020E5470 @@ -6579,12 +8799,47 @@ _020E540C: addls pc, pc, r0, lsl #0x2 b _020E55EC _020E541C: - .byte 0x13, 0x00, 0x00, 0xEA - .byte 0x40, 0x00, 0x00, 0xEA, 0x1F, 0x00, 0x00, 0xEA, 0x3A, 0x00, 0x00, 0xEA, 0x6E, 0x00, 0x00, 0xEA - .byte 0x0E, 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA, 0x6B, 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0xEA - .byte 0x69, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA - .byte 0x65, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, 0xEA, 0x62, 0x00, 0x00, 0xEA - .byte 0x02, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x5F, 0x00, 0x00, 0xEA, 0xFF, 0xFF, 0xFF, 0xEA + b _020E5470 +_020E5420: + b _020E5528 +_020E5424: + b _020E54A8 +_020E5428: + b _020E5518 +_020E542C: + b _020E55EC +_020E5430: + b _020E5470 +_020E5434: + b _020E55EC +_020E5438: + b _020E55EC +_020E543C: + b _020E55EC +_020E5440: + b _020E55EC +_020E5444: + b _020E55D8 +_020E5448: + b _020E5470 +_020E544C: + b _020E5564 +_020E5450: + b _020E55EC +_020E5454: + b _020E55EC +_020E5458: + b _020E55B4 +_020E545C: + b _020E55EC +_020E5460: + b _020E5470 +_020E5464: + b _020E55EC +_020E5468: + b _020E55EC +_020E546C: + b _020E5470 _020E5470: ldrb r0, [sp, #0x4] cmp r0, #0x9 @@ -6601,10 +8856,20 @@ _020E5470: streqb r0, [sp, #0x0] b _020E55F4 _020E54A8: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 - .byte 0x4C, 0x01, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x49, 0x00, 0x00, 0x0A, 0x02, 0x00, 0xDD, 0xE5 - .byte 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x44, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020E55F4 _020E54E0: ldrb r0, [sp, #0x2] cmp r0, #0x0 @@ -6621,14 +8886,36 @@ _020E54E0: streqh r0, [sp, #0x6] b _020E55F4 _020E5518: - .byte 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05, 0x04, 0x00, 0xDD, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x06, 0x00, 0x50, 0x13, 0x07, 0x00, 0x50, 0x13, 0x08, 0x00, 0x50, 0x13, 0x04, 0x00, 0x50, 0x13 - .byte 0x01, 0x00, 0x50, 0x13, 0xC8, 0x00, 0x9F, 0x05, 0xB6, 0x00, 0xCD, 0x01, 0x28, 0x00, 0x00, 0x0A - .byte 0x02, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0xA0, 0x03, 0x0C, 0x00, 0x8D, 0x05 - .byte 0x23, 0x00, 0x00, 0xEA, 0x03, 0x30, 0xA0, 0xE3, 0x01, 0x20, 0xA0, 0xE3, 0x78, 0x10, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE3, 0x04, 0x30, 0xCD, 0xE5, 0x03, 0x20, 0xCD, 0xE5, 0xB6, 0x10, 0xCD, 0xE1 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0x1A, 0x00, 0x00, 0xEA + ldr r0, [sp, #0xc] + cmp r0, #0x0 + moveq r0, #0x1 + streq r0, [sp, #0xc] +_020E5528: + ldrb r0, [sp, #0x4] + cmp r0, #0x2 + cmpne r0, #0x6 + cmpne r0, #0x7 + cmpne r0, #0x8 + cmpne r0, #0x4 + cmpne r0, #0x1 + ldreq r0, _020E5614 ; =0x0000FFFF + streqh r0, [sp, #0x6] + beq _020E55F4 + ldrb r0, [sp, #0x2] + cmp r0, #0x0 + moveq r0, #0x6 + streq r0, [sp, #0xc] + b _020E55F4 +_020E5564: + mov r3, #0x3 + mov r2, #0x1 + mov r1, #0x78 + mov r0, #0x8 + strb r3, [sp, #0x4] + strb r2, [sp, #0x3] + strh r1, [sp, #0x6] + str r0, [sp, #0xc] + b _020E55F4 _020E5588: ldrb r1, [sp, #0x4] cmp r1, #0x3 @@ -6642,10 +8929,21 @@ _020E5588: strneh r0, [sp, #0x6] b _020E55F4 _020E55B4: - .byte 0x04, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x05, 0x00, 0xA0, 0x03 - .byte 0x04, 0x00, 0xCD, 0x05, 0x0A, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x50, 0xE3, 0x40, 0x00, 0x9F, 0x15 - .byte 0xB6, 0x00, 0xCD, 0x11, 0x06, 0x00, 0x00, 0xEA, 0x04, 0x00, 0xDD, 0xE5, 0x09, 0x00, 0x50, 0xE3 - .byte 0x04, 0x00, 0xA0, 0x03, 0x04, 0x00, 0xCD, 0x05, 0x01, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x4] + cmp r0, #0x3 + moveq r0, #0x5 + streqb r0, [sp, #0x4] + beq _020E55F4 + cmp r0, #0x0 + ldrne r0, _020E5614 ; =0x0000FFFF + strneh r0, [sp, #0x6] + b _020E55F4 +_020E55D8: + ldrb r0, [sp, #0x4] + cmp r0, #0x9 + moveq r0, #0x4 + streqb r0, [sp, #0x4] + b _020E55F4 _020E55EC: ldr r0, _020E5614 ; =0x0000FFFF strh r0, [sp, #0x6] @@ -6739,11 +9037,11 @@ _020E5714: _020E571C: mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f mov r9, r1 mov r0, r10 mov r1, r4 - bl _u32_div_f + bl _u32_div_f cmp r9, #0xa mov r10, r0 addlt r9, r9, #0x30 @@ -7292,6 +9590,7 @@ round_decimal_wide: ; 0x020E5EE4 stmdb sp!, {r4,lr} cmp r1, #0x0 bge _020E5F0C +_020E5EF0: mov r1, #0x0 strh r1, [r0, #0x2] mov r1, #0x1 @@ -7303,23 +9602,77 @@ _020E5F0C: ldrb lr, [r0, #0x4] cmp r1, lr ldmgeia sp!, {r4,pc} -_020E5F18: - .byte 0x05, 0xC0, 0x80, 0xE2, 0x01, 0x20, 0x8C, 0xE0 - .byte 0x01, 0x20, 0x82, 0xE2, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x03, 0x3C, 0xA0, 0xE1 - .byte 0x43, 0x3C, 0xA0, 0xE1, 0x05, 0x00, 0x53, 0xE3, 0x0B, 0x00, 0x00, 0x1A, 0x0E, 0xC0, 0x8C, 0xE0 - .byte 0x01, 0xC0, 0x4C, 0xE2, 0x02, 0x00, 0x5C, 0xE1, 0x02, 0x00, 0x00, 0x9A, 0xD0, 0x30, 0xDC, 0xE1 - .byte 0x30, 0x00, 0x53, 0xE3, 0xF9, 0xFF, 0xFF, 0x0A, 0x02, 0x00, 0x5C, 0xE1, 0xD1, 0x30, 0x52, 0x01 - .byte 0x01, 0x40, 0x03, 0x02, 0x01, 0x40, 0xA0, 0x13, 0x01, 0x00, 0x00, 0xEA, 0x01, 0x40, 0xA0, 0xC3 - .byte 0x00, 0x40, 0xA0, 0xD3, 0x00, 0x00, 0x51, 0xE3, 0x14, 0x00, 0x00, 0x0A, 0x00, 0xC0, 0xA0, 0xE3 - .byte 0x01, 0xE0, 0xA0, 0xE3, 0xD1, 0x30, 0x72, 0xE1, 0x30, 0x30, 0x43, 0xE2, 0x04, 0x30, 0x83, 0xE0 - .byte 0x03, 0x3C, 0xA0, 0xE1, 0x43, 0x3C, 0xA0, 0xE1, 0x09, 0x00, 0x53, 0xE3, 0x0E, 0x40, 0xA0, 0xC1 - .byte 0x0C, 0x40, 0xA0, 0xD1, 0x00, 0x00, 0x54, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x53, 0xE3 - .byte 0x01, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x41, 0xE2, 0x02, 0x00, 0x00, 0xEA, 0x30, 0x30, 0x83, 0xE2 - .byte 0x00, 0x30, 0xC2, 0xE5, 0x01, 0x00, 0x00, 0xEA, 0x00, 0x00, 0x51, 0xE3, 0xEC, 0xFF, 0xFF, 0x1A - .byte 0x00, 0x00, 0x54, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0xF2, 0x30, 0xD0, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x31, 0x10, 0xA0, 0xE3, 0x01, 0x30, 0x83, 0xE2, 0xB2, 0x30, 0xC0, 0xE1, 0x04, 0x20, 0xC0, 0xE5 - .byte 0x05, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8, 0x00, 0x00, 0x51, 0xE3, 0xBB, 0xFF, 0xFF, 0x0A - .byte 0x04, 0x10, 0xC0, 0xE5, 0x10, 0x80, 0xBD, 0xE8 +_020E5F18: ; 0x020E5F18 + add r12, r0, #0x5 + add r2, r12, r1 + add r2, r2, #0x1 + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x5 + bne _020E5F6C + add r12, r12, lr +_020E5F40: + sub r12, r12, #0x1 + cmp r12, r2 + bls _020E5F58 + ldrsb r3, [r12, #0x0] + cmp r3, #0x30 + beq _020E5F40 +_020E5F58: + cmp r12, r2 + ldreqsb r3, [r2, #-0x1] + andeq r4, r3, #0x1 + movne r4, #0x1 + b _020E5F74 +_020E5F6C: + movgt r4, #0x1 + movle r4, #0x0 +_020E5F74: + cmp r1, #0x0 + beq _020E5FD0 + mov r12, #0x0 + mov lr, #0x1 +_020E5F84: + ldrsb r3, [r2, #-0x1]! + sub r3, r3, #0x30 + add r3, r3, r4 + mov r3, r3, lsl #0x18 + mov r3, r3, asr #0x18 + cmp r3, #0x9 + movgt r4, lr + movle r4, r12 + cmp r4, #0x0 + bne _020E5FB4 + cmp r3, #0x0 + bne _020E5FBC +_020E5FB4: + sub r1, r1, #0x1 + b _020E5FC8 +_020E5FBC: + add r3, r3, #0x30 + strb r3, [r2, #0x0] + b _020E5FD0 +_020E5FC8: + cmp r1, #0x0 + bne _020E5F84 +_020E5FD0: + cmp r4, #0x0 + beq _020E5FF8 + ldrsh r3, [r0, #0x2] + mov r2, #0x1 + mov r1, #0x31 + add r3, r3, #0x1 + strh r3, [r0, #0x2] + strb r2, [r0, #0x4] + strb r1, [r0, #0x5] + ldmia sp!, {r4,pc} +_020E5FF8: + cmp r1, #0x0 + beq _020E5EF0 + strb r1, [r0, #0x4] + ldmia sp!, {r4,pc} arm_func_start float2str_wide float2str_wide: ; 0x020E6008 @@ -7774,6 +10127,8 @@ _020E6644: .word 0x02106E24 _020E6648: .word 0x02106E30 _020E664C: .word 0x02106E38 _020E6650: .word 0x66666667 + +arm_func_start __wpformatter __wpformatter: stmdb sp!, {r0-r3} stmdb sp!, {r3-r11,lr} @@ -7840,10 +10195,20 @@ _020E6710: subs r0, r1, #0x41 addpl pc, pc, r0, lsl #0x2 b _020E6768 -_020E674C: - .byte 0xE6, 0x00, 0x00, 0xEA - .byte 0x8E, 0x01, 0x00, 0xEA, 0x8D, 0x01, 0x00, 0xEA, 0x8C, 0x01, 0x00, 0xEA, 0xC6, 0x00, 0x00, 0xEA - .byte 0xC5, 0x00, 0x00, 0xEA, 0xC4, 0x00, 0x00, 0xEA +_020E674C: ; 0x020E674C + b _020E6AEC +_020E6750: ; 0x020E6750 + b _020E6D90 +_020E6754: ; 0x020E6754 + b _020E6D90 +_020E6758: ; 0x020E6758 + b _020E6D90 +_020E675C: ; 0x020E675C + b _020E6A7C +_020E6760: ; 0x020E6760 + b _020E6A7C +_020E6764: ; 0x020E6764 + b _020E6A7C _020E6768: cmp r1, #0x25 beq _020E6D7C @@ -7858,12 +10223,42 @@ _020E6780: subs r0, r1, #0x64 addpl pc, pc, r0, lsl #0x2 b _020E67DC -_020E6794: - .byte 0x1A, 0x00, 0x00, 0xEA, 0xB7, 0x00, 0x00, 0xEA, 0xB6, 0x00, 0x00, 0xEA - .byte 0xB5, 0x00, 0x00, 0xEA, 0x79, 0x01, 0x00, 0xEA, 0x15, 0x00, 0x00, 0xEA, 0x77, 0x01, 0x00, 0xEA - .byte 0x76, 0x01, 0x00, 0xEA, 0x75, 0x01, 0x00, 0xEA, 0x74, 0x01, 0x00, 0xEA, 0x35, 0x01, 0x00, 0xEA - .byte 0x5E, 0x00, 0x00, 0xEA, 0x71, 0x01, 0x00, 0xEA, 0x70, 0x01, 0x00, 0xEA, 0x6F, 0x01, 0x00, 0xEA - .byte 0xE1, 0x00, 0x00, 0xEA, 0x6D, 0x01, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA +_020E6794: ; 0x020E6794 + b _020E6804 +_020E6798: ; 0x020E6798 + b _020E6A7C +_020E679C: ; 0x020E679C + b _020E6A7C +_020E67A0: ; 0x020E67A0 + b _020E6A7C +_020E67A4: ; 0x020E67A4 + b _020E6D90 +_020E67A8: ; 0x020E67A8 + b _020E6804 +_020E67AC: ; 0x020E67AC + b _020E6D90 +_020E67B0: ; 0x020E67B0 + b _020E6D90 +_020E67B4: ; 0x020E67B4 + b _020E6D90 +_020E67B8: ; 0x020E67B8 + b _020E6D90 +_020E67BC: ; 0x020E67BC + b _020E6C98 +_020E67C0: ; 0x020E67C0 + b _020E6940 +_020E67C4: ; 0x020E67C4 + b _020E6D90 +_020E67C8: ; 0x020E67C8 + b _020E6D90 +_020E67CC: ; 0x020E67CC + b _020E6D90 +_020E67D0: ; 0x020E67D0 + b _020E6B5C +_020E67D4: ; 0x020E67D4 + b _020E6D90 +_020E67D8: ; 0x020E67D8 + b _020E6940 _020E67DC: cmp r1, #0x63 beq _020E6D24 @@ -7878,26 +10273,93 @@ _020E67F8: cmp r1, r0 b _020E6D90 _020E6804: - .byte 0x24, 0x00, 0xDD, 0xE5, 0x03, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A - .byte 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5 - .byte 0x25, 0x00, 0x00, 0xEA, 0x04, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5, 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5, 0x1B, 0x00, 0x00, 0xEA, 0x06, 0x00, 0x50, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x08, 0x20, 0x81, 0xE2, 0x64, 0x24, 0x8D, 0xE5 - .byte 0x08, 0x10, 0x12, 0xE5, 0x10, 0x10, 0x8D, 0xE5, 0x04, 0x10, 0x12, 0xE5, 0x14, 0x10, 0x8D, 0xE5 - .byte 0x11, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x0A, 0x00, 0x00, 0xEA - .byte 0x08, 0x00, 0x50, 0xE3, 0x04, 0x00, 0x00, 0x1A, 0x64, 0x14, 0x9D, 0xE5, 0x04, 0x10, 0x81, 0xE2 - .byte 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x03, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0xA0, 0x11, 0xE5, 0x02, 0x00, 0x50, 0xE3 - .byte 0x0A, 0x18, 0xA0, 0x01, 0x41, 0xA8, 0xA0, 0x01, 0x04, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x50, 0x13 - .byte 0x20, 0x00, 0x8D, 0xE2, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8 - .byte 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x10, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x43, 0x2E, 0x8D, 0xE2, 0xDB, 0xFB, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1, 0x23, 0x01, 0x00, 0x0A - .byte 0x08, 0x00, 0x00, 0xEA, 0x08, 0x50, 0x4D, 0xE2, 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8 - .byte 0x43, 0x1E, 0x8D, 0xE2, 0x0A, 0x00, 0xA0, 0xE1, 0x0C, 0x00, 0x95, 0xE8, 0x3D, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x60, 0xB0, 0xE1, 0x19, 0x01, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2 - .byte 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0x26, 0x01, 0x00, 0xEA + ldrb r0, [sp, #0x24] + cmp r0, #0x3 + bne _020E6824 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E6824: + cmp r0, #0x4 + bne _020E684C + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E68BC +_020E684C: + cmp r0, #0x6 + bne _020E6874 + ldr r1, [sp, #0x464] + add r2, r1, #0x8 + str r2, [sp, #0x464] + ldr r1, [r2, #-0x8] + str r1, [sp, #0x10] + ldr r1, [r2, #-0x4] + str r1, [sp, #0x14] + b _020E68BC +_020E6874: + cmp r0, #0x7 + bne _020E6890 + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E6890: + cmp r0, #0x8 + bne _020E68AC + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] + b _020E68BC +_020E68AC: + ldr r1, [sp, #0x464] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r10, [r1, #-0x4] +_020E68BC: + cmp r0, #0x2 + moveq r1, r10, lsl #0x10 + moveq r10, r1, asr #0x10 + cmp r0, #0x4 + cmpne r0, #0x6 + add r0, sp, #0x20 + bne _020E6904 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + ldr r0, [sp, #0x10] + ldr r1, [sp, #0x14] + add r2, sp, #0x430 + bl longlong2str_wide + movs r6, r0 + beq _020E6D90 + b _020E6928 +_020E6904: + sub r5, sp, #0x8 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + add r1, sp, #0x430 + mov r0, r10 + ldmia r5, {r2-r3} + bl long2str_wide + movs r6, r0 + beq _020E6D90 +_020E6928: + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC _020E6940: ldrb r0, [sp, #0x24] cmp r0, #0x3 @@ -7987,14 +10449,35 @@ _020E6A64: mov r7, r0, asr #0x1 b _020E6DDC _020E6A7C: - .byte 0x24, 0x00, 0xDD, 0xE5 - .byte 0x09, 0x00, 0x50, 0xE3, 0x64, 0x04, 0x9D, 0x15, 0x08, 0x00, 0x80, 0x12, 0x64, 0x04, 0x8D, 0x15 - .byte 0x02, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x08, 0x00, 0x80, 0xE2, 0x64, 0x04, 0x8D, 0xE5 - .byte 0x08, 0x70, 0x10, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x20, 0x00, 0x8D, 0xE2, 0x04, 0x50, 0x4D, 0xE2 - .byte 0x0F, 0x00, 0x90, 0xE8, 0x0F, 0x00, 0x85, 0xE8, 0x00, 0x30, 0x95, 0xE5, 0x07, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x43, 0x2E, 0x8D, 0xE2, 0x4E, 0xFD, 0xFF, 0xEB, 0x00, 0x60, 0xB0, 0xE1 - .byte 0xAE, 0x00, 0x00, 0x0A, 0x01, 0x0B, 0x8D, 0xE2, 0x2E, 0x00, 0x80, 0xE2, 0x06, 0x00, 0x40, 0xE0 - .byte 0xA0, 0x0F, 0x80, 0xE0, 0xC0, 0x70, 0xA0, 0xE1, 0xBB, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x24] + cmp r0, #0x9 + ldrne r0, [sp, #0x464] + addne r0, r0, #0x8 + strne r0, [sp, #0x464] + bne _020E6AA0 + ldr r0, [sp, #0x464] + add r0, r0, #0x8 + str r0, [sp, #0x464] +_020E6AA0: + ldr r7, [r0, #-0x8] + ldr r6, [r0, #-0x4] + add r0, sp, #0x20 + sub r5, sp, #0x4 + ldmia r0, {r0-r3} + stmia r5, {r0-r3} + ldr r3, [r5, #0x0] + mov r0, r7 + mov r1, r6 + add r2, sp, #0x430 + bl float2str_wide + movs r6, r0 + beq _020E6D90 + add r0, sp, #0x400 + add r0, r0, #0x2e + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC _020E6AEC: ldrb r0, [sp, #0x24] cmp r0, #0x9 @@ -8026,36 +10509,145 @@ _020E6B10: mov r7, r0, asr #0x1 b _020E6DDC _020E6B5C: - .byte 0x24, 0x00, 0xDD, 0xE5 - .byte 0x05, 0x00, 0x50, 0xE3, 0x23, 0x00, 0x00, 0x1A, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x60, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x56, 0xE3 - .byte 0xB4, 0x63, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB2, 0x10, 0xD6, 0xE0 - .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x70, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x8E, 0x00, 0x00, 0x0A - .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x57, 0xE1, 0x00, 0x70, 0xA0, 0xC1, 0x8A, 0x00, 0x00, 0xEA - .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x0A, 0x00, 0x00, 0x0A, 0x2C, 0x70, 0x9D, 0xE5 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x07, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x29, 0xF9, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x80, 0x00, 0x00, 0x0A, 0x06, 0x00, 0x40, 0xE0, 0xA0, 0x0F, 0x80, 0xE0 - .byte 0xC0, 0x70, 0xA0, 0xE1, 0x7C, 0x00, 0x00, 0xEA, 0x06, 0x00, 0xA0, 0xE1, 0x0A, 0x01, 0x00, 0xEB - .byte 0x00, 0x70, 0xA0, 0xE1, 0x78, 0x00, 0x00, 0xEA, 0x64, 0x04, 0x9D, 0xE5, 0x04, 0x00, 0x80, 0xE2 - .byte 0x64, 0x04, 0x8D, 0xE5, 0x04, 0x50, 0x10, 0xE5, 0x23, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x55, 0xE3 - .byte 0x28, 0x53, 0x9F, 0x05, 0x00, 0x00, 0x50, 0xE3, 0x08, 0x00, 0x00, 0x0A, 0xB0, 0x10, 0xD6, 0xE1 - .byte 0x22, 0x00, 0xDD, 0xE5, 0xFF, 0x60, 0x01, 0xE2, 0x00, 0x00, 0x50, 0xE3, 0x11, 0x00, 0x00, 0x0A - .byte 0x2C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x56, 0xE1, 0x00, 0x60, 0xA0, 0xC1, 0x0D, 0x00, 0x00, 0xEA - .byte 0x22, 0x00, 0xDD, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x07, 0x00, 0x00, 0x0A, 0x2C, 0x60, 0x9D, 0xE5 - .byte 0x05, 0x00, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3, 0x15, 0xE2, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x05, 0x60, 0x40, 0x10, 0x02, 0x00, 0x00, 0xEA, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x8D, 0xF0, 0xFF, 0xEB, 0x00, 0x60, 0xA0, 0xE1, 0x30, 0x00, 0x8D, 0xE2, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x06, 0x20, 0xA0, 0xE1, 0xAB, 0xE1, 0xFF, 0xEB, 0x00, 0x70, 0xB0, 0xE1, 0x3F, 0x00, 0x00, 0x4A - .byte 0x30, 0x60, 0x8D, 0xE2, 0x50, 0x00, 0x00, 0xEA, 0x64, 0x14, 0x9D, 0xE5, 0x24, 0x00, 0xDD, 0xE5 - .byte 0x04, 0x10, 0x81, 0xE2, 0x64, 0x14, 0x8D, 0xE5, 0x04, 0x60, 0x11, 0xE5, 0x08, 0x00, 0x50, 0xE3 - .byte 0x00, 0xF1, 0x8F, 0x90, 0x97, 0x00, 0x00, 0xEA, 0x07, 0x00, 0x00, 0xEA, 0x95, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x08, 0x00, 0x00, 0xEA, 0x11, 0x00, 0x00, 0xEA, 0x91, 0x00, 0x00, 0xEA - .byte 0x07, 0x00, 0x00, 0xEA, 0x0A, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x8C, 0x00, 0x00, 0xEA, 0xB0, 0x40, 0xC6, 0xE1, 0x8A, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x88, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 - .byte 0x84, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0x82, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5 - .byte 0x80, 0x00, 0x00, 0xEA, 0x00, 0x40, 0x86, 0xE5, 0xC4, 0x0F, 0xA0, 0xE1, 0x04, 0x00, 0x86, 0xE5 - .byte 0x7C, 0x00, 0x00, 0xEA + ldrb r0, [sp, #0x24] + cmp r0, #0x5 + bne _020E6BF8 + ldr r0, [sp, #0x464] + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r6, [r0, #-0x4] + ldrb r0, [sp, #0x23] + cmp r6, #0x0 + ldreq r6, _020E6F3C ; =0x02106E40 + cmp r0, #0x0 + beq _020E6BB0 + ldrh r1, [r6], #0x2 + ldrb r0, [sp, #0x22] + and r7, r1, #0xff + cmp r0, #0x0 + beq _020E6DDC + ldr r0, [sp, #0x2c] + cmp r7, r0 + movgt r7, r0 + b _020E6DDC +_020E6BB0: + ldrb r0, [sp, #0x22] + cmp r0, #0x0 + beq _020E6BE8 + ldr r7, [sp, #0x2c] + mov r0, r6 + mov r2, r7 + mov r1, #0x0 + bl wmemchr +_020E6BD0: ; 0x020E6BD0 + cmp r0, #0x0 + beq _020E6DDC + sub r0, r0, r6 + add r0, r0, r0, lsr #0x1f + mov r7, r0, asr #0x1 + b _020E6DDC +_020E6BE8: + mov r0, r6 + bl wcslen + mov r7, r0 + b _020E6DDC +_020E6BF8: + ldr r0, [sp, #0x464] + add r0, r0, #0x4 + str r0, [sp, #0x464] + ldr r5, [r0, #-0x4] + ldrb r0, [sp, #0x23] + cmp r5, #0x0 + ldreq r5, _020E6F40 ; =0x02106E44 + cmp r0, #0x0 + beq _020E6C40 + ldrh r1, [r6, #0x0] + ldrb r0, [sp, #0x22] + and r6, r1, #0xff + cmp r0, #0x0 + beq _020E6C78 + ldr r0, [sp, #0x2c] + cmp r6, r0 + movgt r6, r0 + b _020E6C78 +_020E6C40: + ldrb r0, [sp, #0x22] + cmp r0, #0x0 + beq _020E6C6C + ldr r6, [sp, #0x2c] + mov r0, r5 + mov r2, r6 + mov r1, #0x0 + bl memchr +_020E6C60: ; 0x020E6C60 + cmp r0, #0x0 + subne r6, r0, r5 + b _020E6C78 +_020E6C6C: + mov r0, r5 + bl strlen + mov r6, r0 +_020E6C78: + add r0, sp, #0x30 + mov r1, r5 + mov r2, r6 + bl mbstowcs + movs r7, r0 + bmi _020E6D90 + add r6, sp, #0x30 + b _020E6DDC +_020E6C98: + ldr r1, [sp, #0x464] + ldrb r0, [sp, #0x24] + add r1, r1, #0x4 + str r1, [sp, #0x464] + ldr r6, [r1, #-0x4] + cmp r0, #0x8 + addls pc, pc, r0, lsl #0x2 + b _020E6F18 +_020E6CB8: + b _020E6CDC +_020E6CBC: + b _020E6F18 +_020E6CC0: + b _020E6CE4 +_020E6CC4: + b _020E6CEC +_020E6CC8: + b _020E6D14 +_020E6CCC: + b _020E6F18 +_020E6CD0: + b _020E6CF4 +_020E6CD4: + b _020E6D04 +_020E6CD8: + b _020E6D0C +_020E6CDC: + str r4, [r6, #0x0] + b _020E6F18 +_020E6CE4: + strh r4, [r6, #0x0] + b _020E6F18 +_020E6CEC: + str r4, [r6, #0x0] + b _020E6F18 +_020E6CF4: + str r4, [r6, #0x0] + mov r0, r4, asr #0x1f + str r0, [r6, #0x4] + b _020E6F18 +_020E6D04: + str r4, [r6, #0x0] + b _020E6F18 +_020E6D0C: + str r4, [r6, #0x0] + b _020E6F18 +_020E6D14: + str r4, [r6, #0x0] + mov r0, r4, asr #0x1f + str r0, [r6, #0x4] + b _020E6F18 _020E6D24: ldrb r0, [sp, #0x24] add r6, sp, #0x30 @@ -8193,6 +10785,7 @@ _020E6ED8: blt _020E6ED8 _020E6F14: add r4, r4, r5 +_020E6F18: ldrh r0, [r11, #0x0] cmp r0, #0x0 bne _020E6684 @@ -8204,9 +10797,8 @@ _020E6F24: bx lr .balign 4 _020E6F38: .word 0x0000FFFF -_020E6F3C: - .byte 0x40, 0x6E, 0x10, 0x02 - .byte 0x44, 0x6E, 0x10, 0x02 +_020E6F3C: .word 0x02106E40 +_020E6F40: .word 0x02106E44 arm_func_start __wStringWrite __wStringWrite: ; 0x020E6F44 @@ -8253,12 +10845,26 @@ vswprintf: ; 0x020E6FAC str r4, [sp, #0x4] str r12, [sp, #0x8] bl __wpformatter -_020E6FD8: - .byte 0x00, 0x00, 0x50, 0xE3, 0x0C, 0xD0, 0x8D, 0xB2 - .byte 0x30, 0x80, 0xBD, 0xB8, 0x04, 0x00, 0x50, 0xE1, 0x04, 0x00, 0x00, 0x2A, 0x80, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x0C, 0xD0, 0x8D, 0xE2, 0xB1, 0x20, 0x85, 0xE1, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x10, 0xA0, 0xE3, 0x84, 0x00, 0x85, 0xE0, 0xB2, 0x10, 0x40, 0xE1, 0x01, 0x00, 0x41, 0xE2 - .byte 0x0C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E6FD8: ; 0x020E6FD8 + cmp r0, #0x0 + addlt sp, sp, #0xc + ldmltia sp!, {r4-r5,pc} +_020E6FE4: ; 0x020E6FE4 + cmp r0, r4 + bhs _020E7000 + mov r1, r0, lsl #0x1 + mov r2, #0x0 + add sp, sp, #0xc + strh r2, [r5, r1] + ldmia sp!, {r4-r5,pc} +_020E7000: + mov r1, #0x0 + add r0, r5, r4, lsl #0x1 + strh r1, [r0, #-0x2] + sub r0, r1, #0x1 + add sp, sp, #0xc + ldmia sp!, {r4-r5,pc} + .balign 4 _020E7018: .word __wStringWrite arm_func_start wcslen @@ -8434,7 +11040,7 @@ _020E723C: ldr r3, [sp, #0xac] sub r1, r1, #0x40000000 mov r0, #0x0 - bl _ddiv + bl _ddiv add sp, sp, #0x80 ldmia sp!, {r3-r11,lr} add sp, sp, #0x10 @@ -8486,7 +11092,7 @@ _020E72E4: bge _020E7344 ldr r1, _020E7638 ; =0x3FF00000 mov r0, #0x0 - bl _ddiv + bl _ddiv str r0, [sp, #0x78] str r1, [sp, #0x7c] _020E7344: @@ -8512,7 +11118,7 @@ _020E7344: mov r3, r1 mov r0, r4 mov r1, r5 - bl _ddiv + bl _ddiv str r0, [sp, #0x78] str r1, [sp, #0x7c] b _020E73D0 @@ -8719,9 +11325,12 @@ _020E76A4: .word 0x3FDB6DB6 _020E76A8: .word 0x33333303 _020E76AC: .word 0x3FE33333 _020E76B0: .word 0x40080000 -_020E76B4: - .byte 0x09, 0xC7, 0xEE, 0x3F, 0xF5, 0x01, 0x5B, 0x14, 0xE0, 0x2F, 0x3E, 0xBE - .byte 0xFD, 0x03, 0x3A, 0xDC, 0x64, 0x47, 0x10, 0x02, 0x44, 0x47, 0x10, 0x02 +_020E76B4: .word 0x3FEEC709 +_020E76B8: .word 0x145B01F5 +_020E76BC: .word 0xBE3E2FE0 +_020E76C0: .word 0xDC3A03FD +_020E76C4: .word 0x02104764 +_020E76C8: .word 0x02104744 _020E76CC: .word 0x40900000 _020E76D0: .word 0x8800759C _020E76D4: .word 0x7E37E43C @@ -8796,7 +11405,7 @@ _020E7794: mov r2, r0 ldr r1, _020E7638 ; =0x3FF00000 mov r0, #0x0 - bl _ddiv + bl _ddiv str r1, [sp, #0x24] mov r11, r0 ldr r3, [sp, #0x24] @@ -8957,41 +11566,141 @@ _020E7794: mov r2, r4 mov r3, r10 bl _dadd -_020E7A6C: - .byte 0x00, 0x00, 0xA0, 0xE3 - .byte 0xC8, 0x33, 0x1F, 0xE5, 0x00, 0x20, 0xA0, 0xE1, 0x44, 0x10, 0x8D, 0xE5, 0x40, 0x00, 0x8D, 0xE5 - .byte 0xD1, 0x0A, 0x00, 0xEB, 0x0C, 0x30, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0xCE, 0x0A, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1 - .byte 0xC9, 0x0A, 0x00, 0xEB, 0x38, 0x00, 0x8D, 0xE5, 0x04, 0x10, 0x8D, 0xE5, 0x48, 0x00, 0x9D, 0xE5 - .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x09, 0x10, 0xA0, 0xE1, 0x7C, 0x09, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0x30, 0x00, 0x9D, 0xE5, 0x14, 0x10, 0x9D, 0xE5 - .byte 0x40, 0x20, 0x9D, 0xE5, 0x44, 0x30, 0x9D, 0xE5, 0x75, 0x09, 0x00, 0xEB, 0x3C, 0x00, 0x8D, 0xE5 - .byte 0x01, 0xB0, 0xA0, 0xE1, 0x38, 0x00, 0x9D, 0xE5, 0x04, 0x10, 0x9D, 0xE5, 0x28, 0x20, 0x9D, 0xE5 - .byte 0x09, 0x30, 0xA0, 0xE1, 0x6E, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x3C, 0x00, 0x9D, 0xE5, 0x0B, 0x10, 0xA0, 0xE1, 0x0D, 0x08, 0x00, 0xEB, 0x00, 0x90, 0xA0, 0xE1 - .byte 0x01, 0xB0, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE1 - .byte 0x0B, 0x30, 0xA0, 0xE1, 0x06, 0x08, 0x00, 0xEB, 0x00, 0x00, 0xA0, 0xE3, 0x04, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0x6C, 0x10, 0x8D, 0xE5, 0x68, 0x00, 0x8D, 0xE5, 0xA2, 0x0A, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x09, 0x00, 0xA0, 0xE1, 0x0B, 0x10, 0xA0, 0xE1 - .byte 0x9D, 0x0A, 0x00, 0xEB, 0x01, 0xA0, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0xB0, 0x14, 0x1F, 0xE5 - .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x0E, 0x02, 0xA0, 0xE3, 0x50, 0x09, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0xC8, 0x04, 0x1F, 0xE5, 0xC8, 0x14, 0x1F, 0xE5 - .byte 0x68, 0x20, 0x9D, 0xE5, 0x6C, 0x30, 0x9D, 0xE5, 0x49, 0x09, 0x00, 0xEB, 0x0B, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1, 0xE4, 0x04, 0x1F, 0xE5 - .byte 0xF4, 0x14, 0x1F, 0xE5, 0x42, 0x09, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x0B, 0x00, 0xA0, 0xE1, 0x0A, 0x10, 0xA0, 0xE1, 0xE1, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1 - .byte 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x05, 0x1F, 0xE5, 0x88, 0x11, 0x80, 0xE0, 0x88, 0x01, 0x90, 0xE7 - .byte 0x04, 0x10, 0x91, 0xE5, 0xDA, 0x07, 0x00, 0xEB, 0x00, 0xB0, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 - .byte 0x06, 0x00, 0xA0, 0xE1, 0x13, 0x09, 0x00, 0xEB, 0x50, 0x00, 0x8D, 0xE5, 0x54, 0x10, 0x8D, 0xE5 - .byte 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x0B, 0x20, 0xA0, 0xE1, 0x0A, 0x30, 0xA0, 0xE1 - .byte 0xCF, 0x07, 0x00, 0xEB, 0x44, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 - .byte 0x04, 0x30, 0x93, 0xE5, 0xCA, 0x07, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x50, 0x00, 0x9D, 0xE5, 0x54, 0x10, 0x9D, 0xE5, 0xC5, 0x07, 0x00, 0xEB, 0x5C, 0x10, 0x8D, 0xE5 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x58, 0x00, 0x8D, 0xE5, 0x50, 0x20, 0x9D, 0xE5, 0x54, 0x30, 0x9D, 0xE5 - .byte 0x61, 0x0A, 0x00, 0xEB, 0x84, 0x25, 0x1F, 0xE5, 0x88, 0x31, 0x82, 0xE0, 0x88, 0x21, 0x92, 0xE7 - .byte 0x04, 0x30, 0x93, 0xE5, 0x5C, 0x0A, 0x00, 0xEB, 0x04, 0x20, 0xA0, 0xE1, 0x09, 0x30, 0xA0, 0xE1 - .byte 0x59, 0x0A, 0x00, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x0B, 0x00, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x0A, 0x10, 0xA0, 0xE1, 0x54, 0x0A, 0x00, 0xEB, 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x80, 0xA0, 0xE1 +_020E7A6C: ; 0x020E7A6C + mov r0, #0x0 + ldr r3, _020E76B0 ; =0x40080000 + mov r2, r0 + str r1, [sp, #0x44] + str r0, [sp, #0x40] + bl _dsub + ldr r3, [sp, #0xc] + mov r2, r11 + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r10 + bl _dsub + str r0, [sp, #0x38] + str r1, [sp, #0x4] + ldr r0, [sp, #0x48] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + mov r1, r9 + bl _dmul + mov r4, r0 + mov r10, r1 + ldr r0, [sp, #0x30] + ldr r1, [sp, #0x14] + ldr r2, [sp, #0x40] + ldr r3, [sp, #0x44] + bl _dmul + str r0, [sp, #0x3c] + mov r11, r1 + ldr r0, [sp, #0x38] + ldr r1, [sp, #0x4] + ldr r2, [sp, #0x28] + mov r3, r9 + bl _dmul + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x3c] + mov r1, r11 + bl _dadd + mov r9, r0 + mov r11, r1 + mov r0, r4 + mov r1, r10 + mov r2, r9 + mov r3, r11 + bl _dadd +_020E7B28: ; 0x020E7B28 + mov r0, #0x0 + mov r2, r4 + mov r3, r10 + str r1, [sp, #0x6c] + str r0, [sp, #0x68] + bl _dsub + mov r2, r0 + mov r3, r1 + mov r0, r9 + mov r1, r11 + bl _dsub + mov r10, r1 + mov r11, r0 + ldr r1, _020E76B4 ; =0x3FEEC709 + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + mov r0, #0xe0000000 + bl _dmul + mov r4, r0 + mov r9, r1 + ldr r0, _020E76B8 ; =0x145B01F5 + ldr r1, _020E76BC ; =0xBE3E2FE0 + ldr r2, [sp, #0x68] + ldr r3, [sp, #0x6c] + bl _dmul + mov r2, r11 + mov r3, r10 + mov r11, r0 + mov r10, r1 + ldr r0, _020E76C0 ; =0xDC3A03FD + ldr r1, _020E76B4 ; =0x3FEEC709 + bl _dmul + mov r2, r0 + mov r3, r1 + mov r0, r11 + mov r1, r10 + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, _020E76C4 ; =0x02104764 + add r1, r0, r8, lsl #0x3 + ldr r0, [r0, r8, lsl #0x3] + ldr r1, [r1, #0x4] + bl _dadd + mov r11, r0 + mov r10, r1 + mov r0, r6 + bl _dflt + str r0, [sp, #0x50] + str r1, [sp, #0x54] + mov r0, r4 + mov r1, r9 + mov r2, r11 + mov r3, r10 + bl _dadd + ldr r2, _020E76C8 ; =0x02104744 + add r3, r2, r8, lsl #0x3 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + bl _dadd + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x50] + ldr r1, [sp, #0x54] + bl _dadd + str r1, [sp, #0x5c] + mov r0, #0x0 + str r0, [sp, #0x58] + ldr r2, [sp, #0x50] + ldr r3, [sp, #0x54] + bl _dsub + ldr r2, _020E76C8 ; =0x02104744 + add r3, r2, r8, lsl #0x3 + ldr r2, [r2, r8, lsl #0x3] + ldr r3, [r3, #0x4] + bl _dsub + mov r2, r4 + mov r3, r9 + bl _dsub + mov r2, r0 + mov r0, r11 + mov r3, r1 + mov r1, r10 + bl _dsub + mov r4, r0 + mov r8, r1 _020E7C80: sub r0, r5, #0x1 ldr r1, [sp, #0xb4] @@ -9308,7 +12017,7 @@ _020E7F3C: mov r0, r7 mov r3, r1 mov r1, r10 - bl _ddiv + bl _ddiv mov r7, r0 mov r10, r1 ldr r0, [sp, #0x78] @@ -9656,8 +12365,8 @@ _020E85EC: _020E8620: strb r1, [r12], #-0x1 b _020E85EC -_020E8628: - .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020E8628: ; 0x020E8628 + bx lr arm_func_start __rounddec __rounddec: ; 0x020E862C @@ -9666,10 +12375,20 @@ __rounddec: ; 0x020E862C mov r5, r0 cmp r4, #0x0 ldmleia sp!, {r3-r5,pc} -_020E8640: - .byte 0x04, 0x20, 0xD5, 0xE5, 0x02, 0x00, 0x54, 0xE1, 0x38, 0x80, 0xBD, 0xA8, 0xC7, 0xFF, 0xFF, 0xEB - .byte 0x04, 0x40, 0xC5, 0xE5, 0x00, 0x00, 0x50, 0xE3, 0x38, 0x80, 0xBD, 0xB8, 0x05, 0x00, 0xA0, 0xE1 - .byte 0x04, 0x10, 0xA0, 0xE1, 0xDC, 0xFF, 0xFF, 0xEB, 0x38, 0x80, 0xBD, 0xE8 +_020E8640: ; 0x020E8640 + ldrb r2, [r5, #0x4] + cmp r4, r2 + ldmgeia sp!, {r3-r5,pc} +_020E864C: ; 0x020E864C + bl __must_round + strb r4, [r5, #0x4] + cmp r0, #0x0 + ldmltia sp!, {r3-r5,pc} +_020E865C: ; 0x020E865C + mov r0, r5 + mov r1, r4 + bl __dorounddecup + ldmia sp!, {r3-r5,pc} arm_func_start __ull2dec __ull2dec: ; 0x020E866C @@ -9813,13 +12532,34 @@ _020E8850: addcs sp, sp, #0x40 strb r3, [r0, #0x4] ldmcsia sp!, {r3-r11,pc} -_020E8860: - .byte 0x00, 0x10, 0xD6, 0xE5, 0x05, 0x00, 0x51, 0xE3, 0x40, 0xD0, 0x8D, 0x32, 0xF8, 0x8F, 0xBD, 0x38 - .byte 0x0C, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x86, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x05, 0x00, 0x00, 0x2A - .byte 0x00, 0x10, 0xD2, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x06, 0x00, 0x00, 0x1A, 0x01, 0x20, 0x82, 0xE2 - .byte 0x07, 0x00, 0x52, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x01, 0x10, 0x56, 0xE5, 0x01, 0x00, 0x11, 0xE3 - .byte 0x40, 0xD0, 0x8D, 0x02, 0xF8, 0x8F, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5, 0x4A, 0xFF, 0xFF, 0xEB - .byte 0x40, 0xD0, 0x8D, 0xE2, 0xF8, 0x8F, 0xBD, 0xE8 +_020E8860: ; 0x020E8860 + ldrb r1, [r6, #0x0] + cmp r1, #0x5 + addcc sp, sp, #0x40 + ldmccia sp!, {r3-r11,pc} +_020E8870: ; 0x020E8870 + bne _020E88A8 + add r2, r6, #0x1 + cmp r2, r7 + bhs _020E8898 +_020E8880: + ldrb r1, [r2, #0x0] + cmp r1, #0x0 + bne _020E88A8 + add r2, r2, #0x1 + cmp r2, r7 + blo _020E8880 +_020E8898: + ldrb r1, [r6, #-0x1] + tst r1, #0x1 + addeq sp, sp, #0x40 + ldmeqia sp!, {r3-r11,pc} +_020E88A8: + ldrb r1, [r0, #0x4] + bl __dorounddecup + add sp, sp, #0x40 + ldmia sp!, {r3-r11,pc} + .balign 4 _020E88B8: .word 0xCCCCCCCD arm_func_start __str2dec @@ -9846,13 +12586,31 @@ _020E88F8: ldrsb r2, [r1, #0x0] cmp r2, #0x0 ldmeqia sp!, {r3,pc} -_020E8908: - .byte 0x05, 0x00, 0x52, 0xE3, 0x08, 0x80, 0xBD, 0xB8 - .byte 0x0D, 0x00, 0x00, 0xCA, 0xD1, 0x20, 0xD1, 0xE1, 0x01, 0x10, 0x81, 0xE2, 0x00, 0x00, 0x52, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x30, 0x00, 0x52, 0xE3, 0x07, 0x00, 0x00, 0x1A, 0xD1, 0x20, 0xF1, 0xE1 - .byte 0x00, 0x00, 0x52, 0xE3, 0xFA, 0xFF, 0xFF, 0x1A, 0x01, 0x10, 0x4C, 0xE2, 0x01, 0x10, 0x80, 0xE0 - .byte 0x05, 0x10, 0xD1, 0xE5, 0x01, 0x00, 0x11, 0xE3, 0x08, 0x80, 0xBD, 0x08, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x21, 0xFF, 0xFF, 0xEB, 0x08, 0x80, 0xBD, 0xE8 +_020E8908: ; 0x020E8908 + cmp r2, #0x5 + ldmltia sp!, {r3,pc} +_020E8910: ; 0x020E8910 + bgt _020E894C + ldrsb r2, [r1, #0x1] + add r1, r1, #0x1 + cmp r2, #0x0 + beq _020E8938 +_020E8924: + cmp r2, #0x30 + bne _020E894C + ldrsb r2, [r1, #0x1]! + cmp r2, #0x0 + bne _020E8924 +_020E8938: + sub r1, r12, #0x1 + add r1, r0, r1 + ldrb r1, [r1, #0x5] + tst r1, #0x1 + ldmeqia sp!, {r3,pc} +_020E894C: + ldrb r1, [r0, #0x4] + bl __dorounddecup + ldmia sp!, {r3,pc} arm_func_start __two_exp __two_exp: ; 0x020E8958 @@ -9874,17 +12632,87 @@ _020E8988: addls pc, pc, r1, lsl #0x2 b _020E8BE4 _020E8998: - .byte 0x32, 0x00, 0x00, 0xEA, 0x90, 0x00, 0x00, 0xEA - .byte 0x8F, 0x00, 0x00, 0xEA, 0x8E, 0x00, 0x00, 0xEA, 0x8D, 0x00, 0x00, 0xEA, 0x8C, 0x00, 0x00, 0xEA - .byte 0x8B, 0x00, 0x00, 0xEA, 0x8A, 0x00, 0x00, 0xEA, 0x89, 0x00, 0x00, 0xEA, 0x88, 0x00, 0x00, 0xEA - .byte 0x87, 0x00, 0x00, 0xEA, 0x86, 0x00, 0x00, 0xEA, 0x85, 0x00, 0x00, 0xEA, 0x84, 0x00, 0x00, 0xEA - .byte 0x83, 0x00, 0x00, 0xEA, 0x82, 0x00, 0x00, 0xEA, 0x27, 0x00, 0x00, 0xEA, 0x80, 0x00, 0x00, 0xEA - .byte 0x7F, 0x00, 0x00, 0xEA, 0x7E, 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0x7C, 0x00, 0x00, 0xEA - .byte 0x7B, 0x00, 0x00, 0xEA, 0x7A, 0x00, 0x00, 0xEA, 0x24, 0x00, 0x00, 0xEA, 0x28, 0x00, 0x00, 0xEA - .byte 0x2C, 0x00, 0x00, 0xEA, 0x30, 0x00, 0x00, 0xEA, 0x34, 0x00, 0x00, 0xEA, 0x38, 0x00, 0x00, 0xEA - .byte 0x3C, 0x00, 0x00, 0xEA, 0x40, 0x00, 0x00, 0xEA, 0x44, 0x00, 0x00, 0xEA, 0x48, 0x00, 0x00, 0xEA - .byte 0x4C, 0x00, 0x00, 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x54, 0x00, 0x00, 0xEA, 0x58, 0x00, 0x00, 0xEA - .byte 0x5C, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0xEA + b _020E8A68 +_020E899C: + b _020E8BE4 +_020E89A0: + b _020E8BE4 +_020E89A4: + b _020E8BE4 +_020E89A8: + b _020E8BE4 +_020E89AC: + b _020E8BE4 +_020E89B0: + b _020E8BE4 +_020E89B4: + b _020E8BE4 +_020E89B8: + b _020E8BE4 +_020E89BC: + b _020E8BE4 +_020E89C0: + b _020E8BE4 +_020E89C4: + b _020E8BE4 +_020E89C8: + b _020E8BE4 +_020E89CC: + b _020E8BE4 +_020E89D0: + b _020E8BE4 +_020E89D4: + b _020E8BE4 +_020E89D8: + b _020E8A7C +_020E89DC: + b _020E8BE4 +_020E89E0: + b _020E8BE4 +_020E89E4: + b _020E8BE4 +_020E89E8: + b _020E8BE4 +_020E89EC: + b _020E8BE4 +_020E89F0: + b _020E8BE4 +_020E89F4: + b _020E8BE4 +_020E89F8: + b _020E8A90 +_020E89FC: + b _020E8AA4 +_020E8A00: + b _020E8AB8 +_020E8A04: + b _020E8ACC +_020E8A08: + b _020E8AE0 +_020E8A0C: + b _020E8AF4 +_020E8A10: + b _020E8B08 +_020E8A14: + b _020E8B1C +_020E8A18: + b _020E8B30 +_020E8A1C: + b _020E8B44 +_020E8A20: + b _020E8B58 +_020E8A24: + b _020E8B6C +_020E8A28: + b _020E8B80 +_020E8A2C: + b _020E8B94 +_020E8A30: + b _020E8BA8 +_020E8A34: + b _020E8BBC +_020E8A38: + b _020E8BD0 _020E8A3C: ldr r1, _020E8C88 ; =0x02106E88 mov r0, r5 @@ -9899,31 +12727,119 @@ _020E8A54: add sp, sp, #0x4c ldmia sp!, {r4-r5,pc} _020E8A68: - .byte 0x20, 0x12, 0x9F, 0xE5, 0x2B, 0x20, 0x82, 0xE2 - .byte 0x91, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x12, 0x9F, 0xE5 - .byte 0x30, 0x20, 0x82, 0xE2, 0x8C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x12, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x87, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0xF0, 0x11, 0x9F, 0xE5, 0x32, 0x20, 0x82, 0xE2, 0x82, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xE0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2 - .byte 0x7D, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xD0, 0x11, 0x9F, 0xE5 - .byte 0x33, 0x20, 0x82, 0xE2, 0x78, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0xC0, 0x11, 0x9F, 0xE5, 0x33, 0x20, 0x82, 0xE2, 0x73, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0xB0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2, 0x6E, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0xA0, 0x11, 0x9F, 0xE5, 0x34, 0x20, 0x82, 0xE2 - .byte 0x69, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x90, 0x11, 0x9F, 0xE5 - .byte 0x34, 0x20, 0x82, 0xE2, 0x64, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x80, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5F, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0x70, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x5A, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x60, 0x11, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x55, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x50, 0x11, 0x9F, 0xE5 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x50, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x40, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x4B, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8, 0x30, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3, 0x46, 0xFF, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x20, 0x11, 0x9F, 0xE5, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x41, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8, 0x10, 0x11, 0x9F, 0xE5 - .byte 0x02, 0x20, 0xA0, 0xE3, 0x3C, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 - .byte 0x00, 0x11, 0x9F, 0xE5, 0x02, 0x20, 0xA0, 0xE3, 0x37, 0xFF, 0xFF, 0xEB, 0x4C, 0xD0, 0x8D, 0xE2 - .byte 0x30, 0x80, 0xBD, 0xE8 + ldr r1, _020E8C90 ; =0x02106EE0 + add r2, r2, #0x2b + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A7C: + ldr r1, _020E8C94 ; =0x02106EF8 + add r2, r2, #0x30 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8A90: + ldr r1, _020E8C98 ; =0x02106F08 + add r2, r2, #0x32 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AA4: + ldr r1, _020E8C9C ; =0x02106F10 + add r2, r2, #0x32 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AB8: + ldr r1, _020E8CA0 ; =0x02106F18 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8ACC: + ldr r1, _020E8CA4 ; =0x02106F20 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AE0: + ldr r1, _020E8CA8 ; =0x02106F28 + add r2, r2, #0x33 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8AF4: + ldr r1, _020E8CAC ; =0x02106F2C + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B08: + ldr r1, _020E8CB0 ; =0x02106F30 + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B1C: + ldr r1, _020E8CB4 ; =0x02106F34 + add r2, r2, #0x34 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B30: + ldr r1, _020E8CB8 ; =0x02106F38 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B44: + ldr r1, _020E8CBC ; =0x02106F3C + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B58: + ldr r1, _020E8CC0 ; =0x02106F40 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B6C: + ldr r1, _020E8CC4 ; =0x02106F44 + mov r2, #0x0 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B80: + ldr r1, _020E8CC8 ; =0x02106F48 + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8B94: + ldr r1, _020E8CCC ; =0x02106F4C + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BA8: + ldr r1, _020E8CD0 ; =0x02106F50 + mov r2, #0x1 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BBC: + ldr r1, _020E8CD4 ; =0x02106F54 + mov r2, #0x2 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} +_020E8BD0: + ldr r1, _020E8CD8 ; =0x02106F58 + mov r2, #0x2 + bl __str2dec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} _020E8BE4: and r0, r4, #0x80000000 add r1, r4, r0, lsr #0x1f @@ -9937,26 +12853,64 @@ _020E8BE4: tst r4, #0x1 addeq sp, sp, #0x4c ldmeqia sp!, {r4-r5,pc} -_020E8C14: - .byte 0x00, 0x30, 0x8D, 0xE2, 0x05, 0xC0, 0xA0, 0xE1, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xDC, 0xE1, 0xB2, 0x00, 0xDC, 0xE1, 0x04, 0xC0, 0x8C, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0xB0, 0x10, 0xC3, 0xE1, 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x00, 0xDC, 0xE1, 0x00, 0x00, 0x54, 0xE3, 0xB0, 0x00, 0xC3, 0xE1, 0x26, 0x00, 0x8D, 0xE2 - .byte 0x03, 0x00, 0x00, 0xDA, 0x60, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0x16, 0xFF, 0xFF, 0xEB - .byte 0x02, 0x00, 0x00, 0xEA, 0x48, 0x10, 0x9F, 0xE5, 0x00, 0x20, 0xE0, 0xE3, 0x12, 0xFF, 0xFF, 0xEB - .byte 0x00, 0x10, 0x8D, 0xE2, 0x26, 0x20, 0x8D, 0xE2, 0x05, 0x00, 0xA0, 0xE1, 0xAD, 0xFE, 0xFF, 0xEB - .byte 0x4C, 0xD0, 0x8D, 0xE2, 0x30, 0x80, 0xBD, 0xE8 +_020E8C14: ; 0x020E8C14 + add r3, sp, #0x0 + mov r12, r5 + mov r2, #0x9 +_020E8C20: + ldrh r1, [r12, #0x0] + ldrh r0, [r12, #0x2] + add r12, r12, #0x4 + subs r2, r2, #0x1 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + bne _020E8C20 + ldrh r0, [r12, #0x0] + cmp r4, #0x0 + strh r0, [r3, #0x0] + add r0, sp, #0x26 + ble _020E8C64 + ldr r1, _020E8CBC ; =0x02106F3C + mov r2, #0x0 + bl __str2dec + b _020E8C70 +_020E8C64: + ldr r1, _020E8CB4 ; =0x02106F34 + mvn r2, #0x0 + bl __str2dec +_020E8C70: + add r1, sp, #0x0 + add r2, sp, #0x26 + mov r0, r5 + bl __timesdec + add sp, sp, #0x4c + ldmia sp!, {r4-r5,pc} + .balign 4 _020E8C88: .word 0x02106E88 _020E8C8C: .word 0x02106EB8 -_020E8C90: - .byte 0xE0, 0x6E, 0x10, 0x02, 0xF8, 0x6E, 0x10, 0x02, 0x08, 0x6F, 0x10, 0x02, 0x10, 0x6F, 0x10, 0x02 - .byte 0x18, 0x6F, 0x10, 0x02, 0x20, 0x6F, 0x10, 0x02, 0x28, 0x6F, 0x10, 0x02, 0x2C, 0x6F, 0x10, 0x02 - .byte 0x30, 0x6F, 0x10, 0x02, 0x34, 0x6F, 0x10, 0x02, 0x38, 0x6F, 0x10, 0x02, 0x3C, 0x6F, 0x10, 0x02 - .byte 0x40, 0x6F, 0x10, 0x02, 0x44, 0x6F, 0x10, 0x02, 0x48, 0x6F, 0x10, 0x02, 0x4C, 0x6F, 0x10, 0x02 - .byte 0x50, 0x6F, 0x10, 0x02, 0x54, 0x6F, 0x10, 0x02, 0x58, 0x6F, 0x10, 0x02 - - arm_func_start __equals_dec -__equals_dec: ; 0x020E8CDC +_020E8C90: .word 0x02106EE0 +_020E8C94: .word 0x02106EF8 +_020E8C98: .word 0x02106F08 +_020E8C9C: .word 0x02106F10 +_020E8CA0: .word 0x02106F18 +_020E8CA4: .word 0x02106F20 +_020E8CA8: .word 0x02106F28 +_020E8CAC: .word 0x02106F2C +_020E8CB0: .word 0x02106F30 +_020E8CB4: .word 0x02106F34 +_020E8CB8: .word 0x02106F38 +_020E8CBC: .word 0x02106F3C +_020E8CC0: .word 0x02106F40 +_020E8CC4: .word 0x02106F44 +_020E8CC8: .word 0x02106F48 +_020E8CCC: .word 0x02106F4C +_020E8CD0: .word 0x02106F50 +_020E8CD4: .word 0x02106F54 +_020E8CD8: .word 0x02106F58 + +arm_func_start __equals_dec +__equals_dec: stmdb sp!, {r4,lr} ldrb r3, [r0, #0x5] cmp r3, #0x0 @@ -9987,6 +12941,7 @@ _020E8D1C: movgt lr, r2 cmp lr, #0x0 ble _020E8D74 +_020E8D4C: add r3, r0, r12 add r2, r1, r12 ldrb r3, [r3, #0x5] @@ -9994,29 +12949,35 @@ _020E8D1C: cmp r3, r2 movne r0, #0x0 ldmneia sp!, {r4,pc} -_020E8D68: - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 - .byte 0xF5, 0xFF, 0xFF, 0xBA +_020E8D68: ; 0x020E8D68 + add r12, r12, #0x1 + cmp r12, lr + blt _020E8D4C _020E8D74: cmp lr, r4 moveq r0, r1 ldrb r1, [r0, #0x4] cmp r12, r1 bge _020E8DAC +_020E8D88: add r1, r0, r12 ldrb r1, [r1, #0x5] cmp r1, #0x0 movne r0, #0x0 ldmneia sp!, {r4,pc} -_020E8D9C: - .byte 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0xC0, 0x8C, 0xE2, 0x01, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA +_020E8D9C: ; 0x020E8D9C + ldrb r1, [r0, #0x4] + add r12, r12, #0x1 + cmp r12, r1 + blt _020E8D88 _020E8DAC: mov r0, #0x1 ldmia sp!, {r4,pc} _020E8DB4: mov r0, #0x0 ldmia sp!, {r4,pc} + +arm_func_start __less_dec __less_dec: stmdb sp!, {r3-r5,lr} ldrb r2, [r0, #0x5] @@ -10032,18 +12993,58 @@ _020E8DE0: cmp r2, #0x0 moveq r0, #0x0 ldmeqia sp!, {r3-r5,pc} -_020E8DF0: - .byte 0xF2, 0x30, 0xD1, 0xE1, 0xF2, 0x20, 0xD0, 0xE1, 0x03, 0x00, 0x52, 0xE1, 0x23, 0x00, 0x00, 0x1A - .byte 0x04, 0x50, 0xD0, 0xE5, 0x04, 0x40, 0xD1, 0xE5, 0x00, 0xC0, 0xA0, 0xE3, 0x05, 0xE0, 0xA0, 0xE1 - .byte 0x04, 0x00, 0x55, 0xE1, 0x04, 0xE0, 0xA0, 0xC1, 0x00, 0x00, 0x5E, 0xE3, 0x0C, 0x00, 0x00, 0xDA - .byte 0x0C, 0x30, 0x81, 0xE0, 0x0C, 0x20, 0x80, 0xE0, 0x05, 0x30, 0xD3, 0xE5, 0x05, 0x20, 0xD2, 0xE5 - .byte 0x03, 0x00, 0x52, 0xE1, 0x01, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x02, 0x00, 0x53, 0xE1 - .byte 0x00, 0x00, 0xA0, 0x33, 0x38, 0x80, 0xBD, 0x38, 0x01, 0xC0, 0x8C, 0xE2, 0x0E, 0x00, 0x5C, 0xE1 - .byte 0xF2, 0xFF, 0xFF, 0xBA, 0x05, 0x00, 0x5E, 0xE1, 0x0A, 0x00, 0x00, 0x1A, 0x04, 0x00, 0x5C, 0xE1 - .byte 0x08, 0x00, 0x00, 0xAA, 0x0C, 0x00, 0x81, 0xE0, 0x05, 0x00, 0xD0, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x13, 0x38, 0x80, 0xBD, 0x18, 0x04, 0x00, 0xD1, 0xE5, 0x01, 0xC0, 0x8C, 0xE2 - .byte 0x00, 0x00, 0x5C, 0xE1, 0xF6, 0xFF, 0xFF, 0xBA, 0x00, 0x00, 0xA0, 0xE3, 0x38, 0x80, 0xBD, 0xE8 - .byte 0x01, 0x00, 0xA0, 0xB3, 0x00, 0x00, 0xA0, 0xA3, 0x38, 0x80, 0xBD, 0xE8 +_020E8DF0: ; 0x020E8DF0 + ldrsh r3, [r1, #0x2] + ldrsh r2, [r0, #0x2] + cmp r2, r3 + bne _020E8E90 + ldrb r5, [r0, #0x4] + ldrb r4, [r1, #0x4] + mov r12, #0x0 + mov lr, r5 + cmp r5, r4 + movgt lr, r4 + cmp lr, #0x0 + ble _020E8E54 +_020E8E20: + add r3, r1, r12 + add r2, r0, r12 + ldrb r3, [r3, #0x5] + ldrb r2, [r2, #0x5] + cmp r2, r3 + movcc r0, #0x1 + ldmccia sp!, {r3-r5,pc} +_020E8E3C: ; 0x020E8E3C + cmp r3, r2 + movcc r0, #0x0 + ldmccia sp!, {r3-r5,pc} +_020E8E48: ; 0x020E8E48 + add r12, r12, #0x1 + cmp r12, lr + blt _020E8E20 +_020E8E54: + cmp lr, r5 + bne _020E8E88 + cmp r12, r4 + bge _020E8E88 +_020E8E64: + add r0, r1, r12 + ldrb r0, [r0, #0x5] + cmp r0, #0x0 + movne r0, #0x1 + ldmneia sp!, {r3-r5,pc} +_020E8E78: ; 0x020E8E78 + ldrb r0, [r1, #0x4] + add r12, r12, #0x1 + cmp r12, r0 + blt _020E8E64 +_020E8E88: + mov r0, #0x0 + ldmia sp!, {r3-r5,pc} +_020E8E90: + movlt r0, #0x1 + movge r0, #0x0 + ldmia sp!, {r3-r5,pc} arm_func_start __minus_dec __minus_dec: ; 0x020E8E9C @@ -10064,49 +13065,186 @@ _020E8EA8: ldrb r1, [r2, #0x5] cmp r1, #0x0 ldmeqia sp!, {r3-r7,pc} -_020E8EDC: - .byte 0x04, 0x70, 0xD0, 0xE5 - .byte 0x04, 0x30, 0xD2, 0xE5, 0xF2, 0x40, 0xD0, 0xE1, 0x07, 0x10, 0xA0, 0xE1, 0x03, 0x00, 0x57, 0xE1 - .byte 0x03, 0x10, 0xA0, 0xB1, 0xF2, 0x30, 0xD2, 0xE1, 0x03, 0x60, 0x44, 0xE0, 0x06, 0x10, 0x81, 0xE0 - .byte 0x20, 0x00, 0x51, 0xE3, 0x20, 0x10, 0xA0, 0xC3, 0x01, 0x00, 0x57, 0xE1, 0x08, 0x00, 0x00, 0xAA - .byte 0x00, 0x40, 0xA0, 0xE3, 0x04, 0x50, 0xD0, 0xE5, 0x07, 0x30, 0x80, 0xE0, 0x01, 0x50, 0x85, 0xE2 - .byte 0x04, 0x50, 0xC0, 0xE5, 0x05, 0x40, 0xC3, 0xE5, 0x04, 0x70, 0xD0, 0xE5, 0x01, 0x00, 0x57, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x04, 0x40, 0xD2, 0xE5, 0x05, 0x30, 0x80, 0xE2, 0x01, 0xC0, 0x83, 0xE0 - .byte 0x06, 0x40, 0x84, 0xE0, 0x01, 0x00, 0x54, 0xE1, 0x04, 0xC0, 0x83, 0xB0, 0x03, 0x40, 0x4C, 0xE0 - .byte 0x05, 0x10, 0x82, 0xE2, 0x06, 0x40, 0x44, 0xE0, 0x04, 0xE0, 0x81, 0xE0, 0x0E, 0x40, 0xA0, 0xE1 - .byte 0x18, 0x00, 0x00, 0xEA, 0x01, 0x70, 0x7C, 0xE5, 0x01, 0x50, 0x7E, 0xE5, 0x05, 0x00, 0x57, 0xE1 - .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x70, 0x5C, 0xE5, 0x01, 0x50, 0x4C, 0xE2, 0x00, 0x00, 0x57, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x70, 0x75, 0xE5, 0x00, 0x00, 0x57, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x0C, 0x00, 0x55, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x70, 0xD5, 0xE5, 0x01, 0x70, 0x47, 0xE2 - .byte 0x00, 0x70, 0xC5, 0xE5, 0x01, 0x70, 0xF5, 0xE5, 0x0C, 0x00, 0x55, 0xE1, 0x0A, 0x70, 0x87, 0xE2 - .byte 0x00, 0x70, 0xC5, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x70, 0xDC, 0xE5, 0x00, 0x50, 0xDE, 0xE5 - .byte 0x05, 0x50, 0x47, 0xE0, 0x00, 0x50, 0xCC, 0xE5, 0x03, 0x00, 0x5C, 0xE1, 0x01, 0x00, 0x5E, 0x81 - .byte 0xE3, 0xFF, 0xFF, 0x8A, 0x04, 0x50, 0xD2, 0xE5, 0x01, 0xE0, 0x44, 0xE0, 0x05, 0x00, 0x5E, 0xE1 - .byte 0x2F, 0x00, 0x00, 0xAA, 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x70, 0xA0, 0xE3, 0x05, 0x00, 0x51, 0xE3 - .byte 0x01, 0x70, 0xA0, 0x33, 0x11, 0x00, 0x00, 0x3A, 0x10, 0x00, 0x00, 0x1A, 0x05, 0x10, 0x82, 0xE2 - .byte 0x05, 0x20, 0x81, 0xE0, 0x01, 0x40, 0x84, 0xE2, 0x02, 0x00, 0x54, 0xE1, 0x05, 0x00, 0x00, 0x2A - .byte 0x00, 0x10, 0xD4, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0x21, 0x00, 0x00, 0x1A, 0x01, 0x40, 0x84, 0xE2 - .byte 0x02, 0x00, 0x54, 0xE1, 0xF9, 0xFF, 0xFF, 0x3A, 0x0E, 0x10, 0x83, 0xE0, 0x06, 0x20, 0x81, 0xE0 - .byte 0x01, 0x10, 0x52, 0xE5, 0x01, 0xC0, 0x42, 0xE2, 0x01, 0x00, 0x11, 0xE3, 0x01, 0x70, 0xA0, 0x13 - .byte 0x00, 0x00, 0x57, 0xE3, 0x16, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x00, 0x51, 0xE3 - .byte 0x10, 0x00, 0x00, 0x2A, 0x01, 0x10, 0x5C, 0xE5, 0x01, 0x20, 0x4C, 0xE2, 0x00, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0x72, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x0C, 0x00, 0x52, 0xE1, 0x07, 0x00, 0x00, 0x0A, 0x00, 0x10, 0xD2, 0xE5, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x10, 0xC2, 0xE5, 0x01, 0x10, 0xF2, 0xE5, 0x0C, 0x00, 0x52, 0xE1, 0x0A, 0x10, 0x81, 0xE2 - .byte 0x00, 0x10, 0xC2, 0xE5, 0xF7, 0xFF, 0xFF, 0x1A, 0x00, 0x10, 0xDC, 0xE5, 0x01, 0x10, 0x41, 0xE2 - .byte 0x00, 0x10, 0xCC, 0xE5, 0x00, 0x10, 0xD3, 0xE5, 0x03, 0x50, 0xA0, 0xE1, 0x00, 0x00, 0x51, 0xE3 - .byte 0x02, 0x00, 0x00, 0x1A, 0x01, 0x10, 0xF5, 0xE5, 0x00, 0x00, 0x51, 0xE3, 0xFC, 0xFF, 0xFF, 0x0A - .byte 0x03, 0x00, 0x55, 0xE1, 0x0F, 0x00, 0x00, 0x9A, 0xF2, 0x10, 0xD0, 0xE1, 0x03, 0x20, 0x45, 0xE0 - .byte 0xFF, 0x40, 0x02, 0xE2, 0x04, 0x10, 0x41, 0xE0, 0xB2, 0x10, 0xC0, 0xE1, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x01, 0x20, 0x83, 0xE0, 0x02, 0x00, 0x55, 0xE1, 0x03, 0x00, 0x00, 0x2A, 0x01, 0x10, 0xD5, 0xE4 - .byte 0x02, 0x00, 0x55, 0xE1, 0x01, 0x10, 0xC3, 0xE4, 0xFB, 0xFF, 0xFF, 0x3A, 0x04, 0x10, 0xD0, 0xE5 - .byte 0x04, 0x10, 0x41, 0xE0, 0x04, 0x10, 0xC0, 0xE5, 0x04, 0x10, 0xD0, 0xE5, 0x05, 0x20, 0x80, 0xE2 - .byte 0x01, 0x30, 0x82, 0xE0, 0x02, 0x00, 0x53, 0xE1, 0x04, 0x00, 0x00, 0x9A, 0x01, 0x10, 0x73, 0xE5 - .byte 0x00, 0x00, 0x51, 0xE3, 0x01, 0x00, 0x00, 0x1A, 0x02, 0x00, 0x53, 0xE1, 0xFA, 0xFF, 0xFF, 0x8A - .byte 0x02, 0x10, 0x43, 0xE0, 0x01, 0x10, 0x81, 0xE2, 0x04, 0x10, 0xC0, 0xE5, 0xF8, 0x80, 0xBD, 0xE8 - - arm_func_start __num2dec_internal -__num2dec_internal: ; 0x020E9140 +_020E8EDC: ; 0x020E8EDC + ldrb r7, [r0, #0x4] + ldrb r3, [r2, #0x4] + ldrsh r4, [r0, #0x2] + mov r1, r7 + cmp r7, r3 + movlt r1, r3 + ldrsh r3, [r2, #0x2] + sub r6, r4, r3 + add r1, r1, r6 + cmp r1, #0x20 + movgt r1, #0x20 + cmp r7, r1 + bge _020E8F34 + mov r4, #0x0 +_020E8F14: + ldrb r5, [r0, #0x4] + add r3, r0, r7 + add r5, r5, #0x1 + strb r5, [r0, #0x4] + strb r4, [r3, #0x5] + ldrb r7, [r0, #0x4] + cmp r7, r1 + blt _020E8F14 +_020E8F34: + ldrb r4, [r2, #0x4] + add r3, r0, #0x5 + add r12, r3, r1 + add r4, r4, r6 + cmp r4, r1 + addlt r12, r3, r4 + sub r4, r12, r3 + add r1, r2, #0x5 + sub r4, r4, r6 + add lr, r1, r4 + mov r4, lr + b _020E8FC8 +_020E8F64: + ldrb r7, [r12, #-0x1]! + ldrb r5, [lr, #-0x1]! + cmp r7, r5 + bhs _020E8FB8 + ldrb r7, [r12, #-0x1] + sub r5, r12, #0x1 + cmp r7, #0x0 + bne _020E8F90 +_020E8F84: + ldrb r7, [r5, #-0x1]! + cmp r7, #0x0 + beq _020E8F84 +_020E8F90: + cmp r5, r12 + beq _020E8FB8 +_020E8F98: + ldrb r7, [r5, #0x0] + sub r7, r7, #0x1 + strb r7, [r5, #0x0] + ldrb r7, [r5, #0x1]! + cmp r5, r12 + add r7, r7, #0xa + strb r7, [r5, #0x0] + bne _020E8F98 +_020E8FB8: + ldrb r7, [r12, #0x0] + ldrb r5, [lr, #0x0] + sub r5, r7, r5 + strb r5, [r12, #0x0] +_020E8FC8: + cmp r12, r3 + cmphi lr, r1 + bhi _020E8F64 + ldrb r5, [r2, #0x4] + sub lr, r4, r1 + cmp lr, r5 + bge _020E90A4 + ldrb r1, [r4, #0x0] + mov r7, #0x0 + cmp r1, #0x5 + movcc r7, #0x1 + blo _020E9040 + bne _020E9040 + add r1, r2, #0x5 + add r2, r1, r5 + add r4, r4, #0x1 + cmp r4, r2 + bhs _020E9028 +_020E9010: + ldrb r1, [r4, #0x0] + cmp r1, #0x0 + bne _020E90A4 + add r4, r4, #0x1 + cmp r4, r2 + blo _020E9010 +_020E9028: + add r1, r3, lr + add r2, r1, r6 + ldrb r1, [r2, #-0x1] + sub r12, r2, #0x1 + tst r1, #0x1 + movne r7, #0x1 +_020E9040: + cmp r7, #0x0 + beq _020E90A4 + ldrb r1, [r12, #0x0] + cmp r1, #0x1 + bhs _020E9098 + ldrb r1, [r12, #-0x1] + sub r2, r12, #0x1 + cmp r1, #0x0 + bne _020E9070 +_020E9064: + ldrb r1, [r2, #-0x1]! + cmp r1, #0x0 + beq _020E9064 +_020E9070: + cmp r2, r12 + beq _020E9098 +_020E9078: + ldrb r1, [r2, #0x0] + sub r1, r1, #0x1 + strb r1, [r2, #0x0] + ldrb r1, [r2, #0x1]! + cmp r2, r12 + add r1, r1, #0xa + strb r1, [r2, #0x0] + bne _020E9078 +_020E9098: + ldrb r1, [r12, #0x0] + sub r1, r1, #0x1 + strb r1, [r12, #0x0] +_020E90A4: + ldrb r1, [r3, #0x0] + mov r5, r3 + cmp r1, #0x0 + bne _020E90C0 +_020E90B4: + ldrb r1, [r5, #0x1]! + cmp r1, #0x0 + beq _020E90B4 +_020E90C0: + cmp r5, r3 + bls _020E9108 + ldrsh r1, [r0, #0x2] + sub r2, r5, r3 + and r4, r2, #0xff + sub r1, r1, r4 + strh r1, [r0, #0x2] + ldrb r1, [r0, #0x4] + add r2, r3, r1 + cmp r5, r2 + bhs _020E90FC +_020E90EC: + ldrb r1, [r5], #0x1 + cmp r5, r2 + strb r1, [r3], #0x1 + blo _020E90EC +_020E90FC: + ldrb r1, [r0, #0x4] + sub r1, r1, r4 + strb r1, [r0, #0x4] +_020E9108: + ldrb r1, [r0, #0x4] + add r2, r0, #0x5 + add r3, r2, r1 + cmp r3, r2 + bls _020E9130 +_020E911C: + ldrb r1, [r3, #-0x1]! + cmp r1, #0x0 + bne _020E9130 + cmp r3, r2 + bhi _020E911C +_020E9130: + sub r1, r3, r2 + add r1, r1, #0x1 + strb r1, [r0, #0x4] + ldmia sp!, {r3-r7,pc} + +arm_func_start __num2dec_internal +__num2dec_internal: stmdb sp!, {r4-r8,lr} sub sp, sp, #0x58 mov r8, r1 @@ -10115,29 +13253,98 @@ __num2dec_internal: ; 0x020E9140 mov r0, r8 mov r1, r6 bl __signbitf -_020E9160: - .byte 0x00, 0x00, 0x50, 0xE3, 0x01, 0x10, 0xA0, 0x13, 0x00, 0x10, 0xA0, 0x03, 0x01, 0x4C, 0xA0, 0xE1 - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0x44, 0x5C, 0xA0, 0xE1, 0xFC, 0x06, 0x00, 0xEB, 0x07, 0x00, 0x00, 0x1A, 0x00, 0x50, 0xC7, 0xE5 - .byte 0x00, 0x10, 0xA0, 0xE3, 0xB2, 0x10, 0xC7, 0xE1, 0x01, 0x00, 0xA0, 0xE3, 0x04, 0x00, 0xC7, 0xE5 - .byte 0x58, 0xD0, 0x8D, 0xE2, 0x05, 0x10, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x08, 0x00, 0xA0, 0xE1 - .byte 0x06, 0x10, 0xA0, 0xE1, 0x1E, 0x02, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x0D, 0x00, 0x00, 0xCA - .byte 0x00, 0x50, 0xC7, 0xE5, 0x00, 0x20, 0xA0, 0xE3, 0xB2, 0x20, 0xC7, 0xE1, 0x01, 0x20, 0xA0, 0xE3 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x04, 0x20, 0xC7, 0xE5, 0x14, 0x02, 0x00, 0xEB - .byte 0x01, 0x00, 0x50, 0xE3, 0x4E, 0x00, 0xA0, 0x03, 0x49, 0x00, 0xA0, 0x13, 0x58, 0xD0, 0x8D, 0xE2 - .byte 0x05, 0x00, 0xC7, 0xE5, 0xF0, 0x81, 0xBD, 0xE8, 0x00, 0x00, 0x55, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x00, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x06, 0x30, 0xA0, 0xE1 - .byte 0xED, 0x04, 0x00, 0xEB, 0x00, 0x80, 0xA0, 0xE1, 0x01, 0x60, 0xA0, 0xE1, 0x08, 0x20, 0x8D, 0xE2 - .byte 0x08, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x0B, 0xFC, 0xFF, 0xEB, 0x00, 0x40, 0xA0, 0xE1 - .byte 0x01, 0x60, 0xA0, 0xE1, 0x00, 0xC0, 0x84, 0xE3, 0x00, 0x20, 0x7C, 0xE2, 0x01, 0x36, 0x86, 0xE3 - .byte 0x00, 0x10, 0xE3, 0xE2, 0x00, 0x00, 0xA0, 0xE3, 0x01, 0x30, 0x03, 0xE0, 0x01, 0x10, 0x40, 0xE2 - .byte 0x02, 0xC0, 0x0C, 0xE0, 0x01, 0x20, 0xA0, 0xE1, 0x01, 0x00, 0x9C, 0xE0, 0x02, 0x10, 0xA3, 0xE0 - .byte 0x00, 0x40, 0x8D, 0xE5, 0x04, 0x60, 0x8D, 0xE5, 0xC7, 0x01, 0x00, 0xEB, 0x35, 0x80, 0x60, 0xE2 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x8D, 0xE2, 0x08, 0x10, 0x41, 0xE0, 0xB5, 0xFD, 0xFF, 0xEB - .byte 0x04, 0x00, 0xA0, 0xE1, 0x06, 0x10, 0xA0, 0xE1, 0x08, 0x20, 0xA0, 0xE1, 0x21, 0xFC, 0xFF, 0xEB - .byte 0x45, 0x03, 0x00, 0xEB, 0x01, 0x20, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE1, 0x32, 0x00, 0x8D, 0xE2 - .byte 0xF1, 0xFC, 0xFF, 0xEB, 0x07, 0x00, 0xA0, 0xE1, 0x32, 0x10, 0x8D, 0xE2, 0x0C, 0x20, 0x8D, 0xE2 - .byte 0x20, 0xFD, 0xFF, 0xEB, 0x00, 0x50, 0xC7, 0xE5, 0x58, 0xD0, 0x8D, 0xE2, 0xF0, 0x81, 0xBD, 0xE8 +_020E9160: ; 0x020E9160 + cmp r0, #0x0 + movne r1, #0x1 + moveq r1, #0x0 + mov r4, r1, lsl #0x18 + mov r0, #0x0 + mov r1, r0 + mov r2, r8 + mov r3, r6 + mov r5, r4, asr #0x18 + bl _deq + bne _020E91AC + strb r5, [r7, #0x0] + mov r1, #0x0 + strh r1, [r7, #0x2] + mov r0, #0x1 + strb r0, [r7, #0x4] + add sp, sp, #0x58 + strb r1, [r7, #0x5] + ldmia sp!, {r4-r8,pc} +_020E91AC: + mov r0, r8 + mov r1, r6 + bl __fpclassifyf + cmp r0, #0x2 + bgt _020E91F8 + strb r5, [r7, #0x0] + mov r2, #0x0 + strh r2, [r7, #0x2] + mov r2, #0x1 + mov r0, r8 + mov r1, r6 + strb r2, [r7, #0x4] + bl __fpclassifyf + cmp r0, #0x1 + moveq r0, #0x4e + movne r0, #0x49 + add sp, sp, #0x58 + strb r0, [r7, #0x5] + ldmia sp!, {r4-r8,pc} +_020E91F8: + cmp r5, #0x0 + beq _020E921C + mov r0, #0x0 + mov r1, r0 + mov r2, r8 + mov r3, r6 + bl _dsub + mov r8, r0 + mov r6, r1 +_020E921C: + add r2, sp, #0x8 + mov r0, r8 + mov r1, r6 + bl frexp + mov r4, r0 + mov r6, r1 + orr r12, r4, #0x0 + rsbs r2, r12, #0x0 + orr r3, r6, #0x100000 + rsc r1, r3, #0x0 + mov r0, #0x0 + and r3, r3, r1 + sub r1, r0, #0x1 + and r12, r12, r2 + mov r2, r1 + adds r0, r12, r1 + adc r1, r3, r2 + str r4, [sp, #0x0] + str r6, [sp, #0x4] + bl __msl_generic_count_bits64 + rsb r8, r0, #0x35 + ldr r1, [sp, #0x8] + add r0, sp, #0xc + sub r1, r1, r8 + bl __two_exp + mov r0, r4 + mov r1, r6 + mov r2, r8 + bl ldexp + bl _ll_ufrom_d + mov r2, r1 + mov r1, r0 + add r0, sp, #0x32 + bl __ull2dec + mov r0, r7 + add r1, sp, #0x32 + add r2, sp, #0xc + bl __timesdec + strb r5, [r7, #0x0] + add sp, sp, #0x58 + ldmia sp!, {r4-r8,pc} arm_func_start __num2dec_internal2 __num2dec_internal2: ; 0x020E92C0 @@ -10149,16 +13356,44 @@ __num2dec_internal2: ; 0x020E92C0 ldrb r0, [r4, #0x5] cmp r0, #0x9 ldmhiia sp!, {r3-r5,pc} -_020E92E0: - .byte 0x20, 0x00, 0x55, 0xE3, 0x20, 0x50, 0xA0, 0xC3, 0x04, 0x00, 0xA0, 0xE1, 0x05, 0x10, 0xA0, 0xE1 - .byte 0xCD, 0xFC, 0xFF, 0xEB, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1, 0x08, 0x00, 0x00, 0xAA - .byte 0x00, 0x10, 0xA0, 0xE3, 0x04, 0x20, 0xD4, 0xE5, 0x00, 0x00, 0x84, 0xE0, 0x01, 0x20, 0x82, 0xE2 - .byte 0x04, 0x20, 0xC4, 0xE5, 0x05, 0x10, 0xC0, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x05, 0x00, 0x50, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0xF2, 0x10, 0xD4, 0xE1, 0x01, 0x00, 0x40, 0xE2, 0x00, 0x20, 0xA0, 0xE3 - .byte 0x00, 0x00, 0x41, 0xE0, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x50, 0xE3 - .byte 0x38, 0x80, 0xBD, 0xD8, 0x02, 0x10, 0x84, 0xE0, 0x05, 0x00, 0xD1, 0xE5, 0x01, 0x20, 0x82, 0xE2 - .byte 0x30, 0x00, 0x80, 0xE2, 0x05, 0x00, 0xC1, 0xE5, 0x04, 0x00, 0xD4, 0xE5, 0x00, 0x00, 0x52, 0xE1 - .byte 0xF7, 0xFF, 0xFF, 0xBA, 0x38, 0x80, 0xBD, 0xE8 +_020E92E0: ; 0x020E92E0 + cmp r5, #0x20 + movgt r5, #0x20 + mov r0, r4 + mov r1, r5 + bl __rounddec + ldrb r0, [r4, #0x4] + cmp r0, r5 + bge _020E9324 + mov r1, #0x0 +_020E9304: + ldrb r2, [r4, #0x4] + add r0, r4, r0 + add r2, r2, #0x1 + strb r2, [r4, #0x4] + strb r1, [r0, #0x5] + ldrb r0, [r4, #0x4] + cmp r0, r5 + blt _020E9304 +_020E9324: + ldrsh r1, [r4, #0x2] + sub r0, r0, #0x1 + mov r2, #0x0 + sub r0, r1, r0 + strh r0, [r4, #0x2] + ldrb r0, [r4, #0x4] + cmp r0, #0x0 + ldmleia sp!, {r3-r5,pc} +_020E9344: + add r1, r4, r2 + ldrb r0, [r1, #0x5] + add r2, r2, #0x1 + add r0, r0, #0x30 + strb r0, [r1, #0x5] + ldrb r0, [r4, #0x4] + cmp r2, r0 + blt _020E9344 + ldmia sp!, {r3-r5,pc} arm_func_start __dec2num __dec2num: ; 0x020E9368 @@ -10272,86 +13507,330 @@ _020E94C8: add r0, sp, #0xb0 add r1, sp, #0xd6 bl __less_dec -_020E94FC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x0C, 0x00, 0x00, 0x0A, 0xD0, 0x00, 0xD4, 0xE1, 0x00, 0x50, 0xA0, 0xE3, 0x00, 0x00, 0x50, 0xE3 - .byte 0x54, 0x44, 0x9F, 0x05, 0x58, 0x04, 0x9F, 0xE5, 0x50, 0x44, 0x9F, 0x15, 0x00, 0x00, 0x90, 0xE5 - .byte 0xC5, 0x07, 0x00, 0xEB, 0x05, 0x20, 0xA0, 0xE1, 0x04, 0x30, 0xA0, 0xE1, 0x38, 0xFB, 0xFF, 0xEB - .byte 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8, 0xDB, 0x10, 0x8D, 0xE2, 0x00, 0x00, 0xD1, 0xE5 - .byte 0x01, 0x80, 0x81, 0xE2, 0xCB, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x05, 0x00, 0x58, 0xE1, 0x2D, 0x00, 0x00, 0x2A, 0x08, 0x00, 0x45, 0xE0, 0xA0, 0x1F, 0xA0, 0xE1 - .byte 0x80, 0x0E, 0x61, 0xE0, 0xE0, 0x7E, 0x91, 0xE0, 0x08, 0x70, 0xA0, 0x03, 0x00, 0x60, 0xA0, 0xE3 - .byte 0x00, 0x20, 0xA0, 0xE3, 0x00, 0x00, 0x57, 0xE3, 0x05, 0x00, 0x00, 0xDA, 0x0A, 0x00, 0xA0, 0xE3 - .byte 0x01, 0x10, 0xD8, 0xE4, 0x01, 0x20, 0x82, 0xE2, 0x07, 0x00, 0x52, 0xE1, 0x90, 0x16, 0x26, 0xE0 - .byte 0xFA, 0xFF, 0xFF, 0xBA, 0xE4, 0x03, 0x9F, 0xE5, 0x0C, 0x10, 0x9D, 0xE5, 0x87, 0x31, 0x80, 0xE0 - .byte 0x08, 0x20, 0x13, 0xE5, 0x08, 0x00, 0x9D, 0xE5, 0x04, 0x30, 0x13, 0xE5, 0xC0, 0x02, 0x00, 0xEB - .byte 0x00, 0x40, 0xA0, 0xE1, 0x01, 0x90, 0xA0, 0xE1, 0x06, 0x00, 0xA0, 0xE1, 0xAD, 0x02, 0x00, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1 - .byte 0x5B, 0x01, 0x00, 0xEB, 0x00, 0x00, 0x56, 0xE3, 0x00, 0x60, 0xA0, 0xE1, 0x01, 0xA0, 0xA0, 0xE1 - .byte 0x05, 0x00, 0x00, 0x0A, 0x04, 0x00, 0xA0, 0xE1, 0x09, 0x10, 0xA0, 0xE1, 0x06, 0x20, 0xA0, 0xE1 - .byte 0x0A, 0x30, 0xA0, 0xE1, 0xE0, 0x05, 0x00, 0xEB, 0x04, 0x00, 0x00, 0x0A, 0x08, 0x60, 0x8D, 0xE5 - .byte 0x0C, 0xA0, 0x8D, 0xE5, 0x05, 0x00, 0x58, 0xE1, 0x07, 0xB0, 0x4B, 0xE0, 0xD1, 0xFF, 0xFF, 0x3A - .byte 0x00, 0x00, 0x5B, 0xE3, 0x0E, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x6B, 0xE2, 0x85, 0x02, 0x00, 0xEB - .byte 0x01, 0x30, 0xA0, 0xE1, 0x00, 0x20, 0xA0, 0xE1, 0x54, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3 - .byte 0xCB, 0xFB, 0xFF, 0xEB, 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0x8F, 0x0A, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5 - .byte 0x0D, 0x00, 0x00, 0xEA, 0x0B, 0x00, 0xA0, 0xE1, 0x76, 0x02, 0x00, 0xEB, 0x01, 0x30, 0xA0, 0xE1 - .byte 0x00, 0x20, 0xA0, 0xE1, 0x18, 0x13, 0x9F, 0xE5, 0x00, 0x00, 0xA0, 0xE3, 0xBC, 0xFB, 0xFF, 0xEB - .byte 0x00, 0x20, 0xA0, 0xE1, 0x01, 0x30, 0xA0, 0xE1, 0x08, 0x00, 0x9D, 0xE5, 0x0C, 0x10, 0x9D, 0xE5 - .byte 0x8B, 0x02, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0x0B, 0x20, 0xA0, 0xE1, 0x1E, 0xFB, 0xFF, 0xEB, 0x08, 0x00, 0x8D, 0xE5 - .byte 0x0C, 0x10, 0x8D, 0xE5, 0xE2, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x03, 0x00, 0x00, 0x1A - .byte 0xD0, 0x02, 0x9F, 0xE5, 0x00, 0x10, 0xE0, 0xE3, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x8A, 0x00, 0x8D, 0xE2, 0x00, 0x40, 0x8D, 0xE2 - .byte 0x00, 0x50, 0xA0, 0xE3, 0x99, 0xFE, 0xFF, 0xEB, 0x8A, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2 - .byte 0x7D, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x91, 0x00, 0x00, 0x1A, 0x8A, 0x00, 0x8D, 0xE2 - .byte 0xD6, 0x10, 0x8D, 0xE2, 0xB0, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x01, 0x50, 0xA0, 0x13 - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x00, 0x00, 0x55, 0xE3, 0x01, 0x60, 0xA0, 0x03 - .byte 0x00, 0x10, 0x8D, 0xE5, 0x04, 0x00, 0x8D, 0xE5, 0x00, 0x60, 0xA0, 0x13, 0x00, 0x00, 0x56, 0xE3 - .byte 0x07, 0x00, 0x00, 0x1A, 0x03, 0x00, 0x94, 0xE8, 0x01, 0x00, 0x90, 0xE2, 0x00, 0x10, 0xA1, 0xE2 - .byte 0x03, 0x00, 0x84, 0xE8, 0xBE, 0x00, 0x00, 0xEB, 0x02, 0x00, 0x50, 0xE3, 0x7C, 0x00, 0x00, 0x0A - .byte 0x05, 0x00, 0x00, 0xEA, 0x00, 0x10, 0x94, 0xE5, 0x04, 0x00, 0x94, 0xE5, 0x01, 0x10, 0x51, 0xE2 - .byte 0x00, 0x00, 0xC0, 0xE2, 0x00, 0x10, 0x84, 0xE5, 0x04, 0x00, 0x84, 0xE5, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x04, 0x20, 0x9D, 0xE5, 0x64, 0x00, 0x8D, 0xE2, 0x74, 0xFE, 0xFF, 0xEB, 0x00, 0x00, 0x55, 0xE3 - .byte 0x04, 0x00, 0x00, 0x0A, 0x64, 0x00, 0x8D, 0xE2, 0xD6, 0x10, 0x8D, 0xE2, 0x8E, 0xFD, 0xFF, 0xEB - .byte 0x00, 0x00, 0x50, 0xE3, 0x48, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x55, 0xE3, 0x34, 0x00, 0x00, 0x1A - .byte 0xD6, 0x00, 0x8D, 0xE2, 0x64, 0x10, 0x8D, 0xE2, 0x87, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x2F, 0x00, 0x00, 0x1A, 0x8A, 0x30, 0x8D, 0xE2, 0x3E, 0x50, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1 - .byte 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x00, 0xD3, 0xE1, 0x64, 0x30, 0x8D, 0xE2, 0x8A, 0x40, 0x8D, 0xE2, 0xB0, 0x00, 0xC5, 0xE1 - .byte 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1, 0x04, 0x30, 0x83, 0xE2 - .byte 0xB0, 0x10, 0xC4, 0xE1, 0xB2, 0x00, 0xC4, 0xE1, 0x04, 0x40, 0x84, 0xE2, 0x01, 0x20, 0x52, 0xE2 - .byte 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x00, 0xD3, 0xE1, 0x3E, 0x30, 0x8D, 0xE2, 0x64, 0x50, 0x8D, 0xE2 - .byte 0xB0, 0x00, 0xC4, 0xE1, 0x09, 0x20, 0xA0, 0xE3, 0xB0, 0x10, 0xD3, 0xE1, 0xB2, 0x00, 0xD3, 0xE1 - .byte 0x04, 0x30, 0x83, 0xE2, 0xB0, 0x10, 0xC5, 0xE1, 0xB2, 0x00, 0xC5, 0xE1, 0x04, 0x50, 0x85, 0xE2 - .byte 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A, 0xB0, 0x40, 0xD3, 0xE1, 0x08, 0x30, 0x9D, 0xE5 - .byte 0x00, 0x10, 0x9D, 0xE5, 0x0C, 0x20, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x40, 0xC5, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x00, 0x30, 0x8D, 0xE5, 0x04, 0x20, 0x8D, 0xE5 - .byte 0x11, 0x00, 0x00, 0xEA, 0x64, 0x70, 0x8D, 0xE2, 0x8A, 0x30, 0x8D, 0xE2, 0x09, 0x20, 0xA0, 0xE3 - .byte 0xB0, 0x10, 0xD7, 0xE1, 0xB2, 0x00, 0xD7, 0xE1, 0x04, 0x70, 0x87, 0xE2, 0xB0, 0x10, 0xC3, 0xE1 - .byte 0xB2, 0x00, 0xC3, 0xE1, 0x04, 0x30, 0x83, 0xE2, 0x01, 0x20, 0x52, 0xE2, 0xF7, 0xFF, 0xFF, 0x1A - .byte 0xB0, 0x20, 0xD7, 0xE1, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0xB0, 0x20, 0xC3, 0xE1 - .byte 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x9B, 0xFF, 0xFF, 0xEA, 0x3E, 0x00, 0x8D, 0xE2 - .byte 0xD6, 0x10, 0x8D, 0xE2, 0x8A, 0x20, 0x8D, 0xE2, 0x77, 0xFD, 0xFF, 0xEB, 0x18, 0x00, 0x8D, 0xE2 - .byte 0x64, 0x10, 0x8D, 0xE2, 0xD6, 0x20, 0x8D, 0xE2, 0x73, 0xFD, 0xFF, 0xEB, 0x3E, 0x00, 0x8D, 0xE2 - .byte 0x18, 0x10, 0x8D, 0xE2, 0x00, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3, 0x0B, 0x00, 0x00, 0x0A - .byte 0x08, 0x10, 0x9D, 0xE5, 0x0C, 0x00, 0x9D, 0xE5, 0x01, 0x10, 0x01, 0xE2, 0x00, 0x00, 0x00, 0xE2 - .byte 0x00, 0x00, 0x50, 0xE3, 0x00, 0x00, 0x51, 0x03, 0x0D, 0x00, 0x00, 0x0A, 0x00, 0x10, 0x9D, 0xE5 - .byte 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5, 0x0C, 0x00, 0x8D, 0xE5, 0x08, 0x00, 0x00, 0xEA - .byte 0x3E, 0x00, 0x8D, 0xE2, 0x18, 0x10, 0x8D, 0xE2, 0x27, 0xFD, 0xFF, 0xEB, 0x00, 0x00, 0x50, 0xE3 - .byte 0x03, 0x00, 0x00, 0x1A, 0x00, 0x10, 0x9D, 0xE5, 0x04, 0x00, 0x9D, 0xE5, 0x08, 0x10, 0x8D, 0xE5 - .byte 0x0C, 0x00, 0x8D, 0xE5, 0xD6, 0x0D, 0xDD, 0xE1, 0x00, 0x00, 0x50, 0xE3, 0x06, 0x00, 0x00, 0x0A - .byte 0x00, 0x00, 0xA0, 0xE3, 0x08, 0x20, 0x9D, 0xE5, 0x0C, 0x30, 0x9D, 0xE5, 0x00, 0x10, 0xA0, 0xE1 - .byte 0x1D, 0x03, 0x00, 0xEB, 0x08, 0x00, 0x8D, 0xE5, 0x0C, 0x10, 0x8D, 0xE5, 0x08, 0x00, 0x9D, 0xE5 - .byte 0x0C, 0x10, 0x9D, 0xE5, 0xFC, 0xD0, 0x8D, 0xE2, 0xF0, 0x8F, 0xBD, 0xE8 +_020E94FC: ; 0x020E94FC + cmp r0, #0x0 + beq _020E9538 + ldrsb r0, [r4, #0x0] + mov r5, #0x0 + cmp r0, #0x0 + ldreq r4, _020E996C ; =0x3FF00000 + ldr r0, _020E9974 ; =0x02106B74 + ldrne r4, _020E9970 ; =0xBFF00000 + ldr r0, [r0, #0x0] + bl _f2d + mov r2, r5 + mov r3, r4 + bl copysign + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} +_020E9538: + add r1, sp, #0xdb + ldrb r0, [r1, #0x0] + add r8, r1, #0x1 + bl _dfltu + str r0, [sp, #0x8] + str r1, [sp, #0xc] + cmp r8, r5 + bhs _020E9610 +_020E9558: + sub r0, r5, r8 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #0x1d + adds r7, r1, r0, ror #0x1d + moveq r7, #0x8 + mov r6, #0x0 + mov r2, #0x0 + cmp r7, #0x0 + ble _020E9594 + mov r0, #0xa +_020E9580: + ldrb r1, [r8], #0x1 + add r2, r2, #0x1 + cmp r2, r7 + mla r6, r0, r6, r1 + blt _020E9580 +_020E9594: + ldr r0, _020E9980 ; =0x02106E48 + ldr r1, [sp, #0xc] + add r3, r0, r7, lsl #0x3 + ldr r2, [r3, #-0x8] + ldr r0, [sp, #0x8] + ldr r3, [r3, #-0x4] + bl _dmul + mov r4, r0 + mov r9, r1 + mov r0, r6 + bl _dfltu + mov r2, r0 + mov r3, r1 + mov r0, r4 + mov r1, r9 + bl _dadd +_020E95D4: ; 0x020E95D4 + cmp r6, #0x0 + mov r6, r0 + mov r10, r1 + beq _020E95FC + mov r0, r4 + mov r1, r9 + mov r2, r6 + mov r3, r10 + bl _deq + beq _020E9610 +_020E95FC: + str r6, [sp, #0x8] + str r10, [sp, #0xc] + cmp r8, r5 + sub r11, r11, r7 + blo _020E9558 +_020E9610: + cmp r11, #0x0 + bge _020E9654 + rsb r0, r11, #0x0 + bl _dflt + mov r3, r1 + mov r2, r0 + ldr r1, _020E9984 ; =0x40140000 + mov r0, #0x0 + bl pow + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + bl _ddiv + str r0, [sp, #0x8] + str r1, [sp, #0xc] + b _020E968C +_020E9654: + mov r0, r11 + bl _dflt + mov r3, r1 + mov r2, r0 + ldr r1, _020E9984 ; =0x40140000 + mov r0, #0x0 + bl pow + mov r2, r0 + mov r3, r1 + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + bl _dmul + str r0, [sp, #0x8] + str r1, [sp, #0xc] +_020E968C: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + mov r2, r11 + bl ldexp + str r0, [sp, #0x8] + str r1, [sp, #0xc] + bl __fpclassifyf + cmp r0, #0x2 + bne _020E96C0 + ldr r0, _020E9988 ; =0x7FEFFFFF + mvn r1, #0x0 + str r1, [sp, #0x8] + str r0, [sp, #0xc] +_020E96C0: + ldr r1, [sp, #0x8] + ldr r2, [sp, #0xc] + add r0, sp, #0x8a + add r4, sp, #0x0 + mov r5, #0x0 + bl __num2dec_internal + add r0, sp, #0x8a + add r1, sp, #0xd6 + bl __equals_dec +_020E96E4: ; 0x020E96E4 + cmp r0, #0x0 + bne _020E9934 + add r0, sp, #0x8a + add r1, sp, #0xd6 + bl __less_dec +_020E96F8: ; 0x020E96F8 + cmp r0, #0x0 + movne r5, #0x1 + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + cmp r5, #0x0 + moveq r6, #0x1 + str r1, [sp, #0x0] + str r0, [sp, #0x4] + movne r6, #0x0 +_020E971C: + cmp r6, #0x0 + bne _020E9744 + ldmia r4, {r0-r1} + adds r0, r0, #0x1 + adc r1, r1, #0x0 + stmia r4, {r0-r1} + bl __fpclassifyf + cmp r0, #0x2 + beq _020E9934 + b _020E975C +_020E9744: + ldr r1, [r4, #0x0] + ldr r0, [r4, #0x4] + subs r1, r1, #0x1 + sbc r0, r0, #0x0 + str r1, [r4, #0x0] + str r0, [r4, #0x4] +_020E975C: + ldr r1, [sp, #0x0] + ldr r2, [sp, #0x4] + add r0, sp, #0x64 + bl __num2dec_internal +_020E976C: ; 0x020E976C + cmp r5, #0x0 + beq _020E9788 + add r0, sp, #0x64 + add r1, sp, #0xd6 + bl __less_dec +_020E9780: ; 0x020E9780 + cmp r0, #0x0 + beq _020E98AC +_020E9788: + cmp r5, #0x0 + bne _020E9864 + add r0, sp, #0xd6 + add r1, sp, #0x64 + bl __less_dec +_020E979C: ; 0x020E979C + cmp r0, #0x0 + bne _020E9864 + add r3, sp, #0x8a + add r5, sp, #0x3e + mov r2, #0x9 +_020E97B0: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r5, #0x0] + strh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + bne _020E97B0 + ldrh r0, [r3, #0x0] + add r3, sp, #0x64 + add r4, sp, #0x8a + strh r0, [r5, #0x0] + mov r2, #0x9 +_020E97E4: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r4, #0x0] + strh r0, [r4, #0x2] + add r4, r4, #0x4 + subs r2, r2, #0x1 + bne _020E97E4 + ldrh r0, [r3, #0x0] + add r3, sp, #0x3e + add r5, sp, #0x64 + strh r0, [r4, #0x0] + mov r2, #0x9 +_020E9818: + ldrh r1, [r3, #0x0] + ldrh r0, [r3, #0x2] + add r3, r3, #0x4 + strh r1, [r5, #0x0] + strh r0, [r5, #0x2] + add r5, r5, #0x4 + subs r2, r2, #0x1 + bne _020E9818 + ldrh r4, [r3, #0x0] + ldr r3, [sp, #0x8] + ldr r1, [sp, #0x0] + ldr r2, [sp, #0xc] + ldr r0, [sp, #0x4] + strh r4, [r5, #0x0] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + str r3, [sp, #0x0] + str r2, [sp, #0x4] + b _020E98AC +_020E9864: + add r7, sp, #0x64 + add r3, sp, #0x8a + mov r2, #0x9 +_020E9870: + ldrh r1, [r7, #0x0] + ldrh r0, [r7, #0x2] + add r7, r7, #0x4 + strh r1, [r3, #0x0] + strh r0, [r3, #0x2] + add r3, r3, #0x4 + subs r2, r2, #0x1 + bne _020E9870 + ldrh r2, [r7, #0x0] + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + strh r2, [r3, #0x0] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + b _020E971C +_020E98AC: + add r0, sp, #0x3e + add r1, sp, #0xd6 + add r2, sp, #0x8a + bl __minus_dec + add r0, sp, #0x18 + add r1, sp, #0x64 + add r2, sp, #0xd6 + bl __minus_dec + add r0, sp, #0x3e + add r1, sp, #0x18 + bl __equals_dec +_020E98D8: ; 0x020E98D8 + cmp r0, #0x0 + beq _020E9910 + ldr r1, [sp, #0x8] + ldr r0, [sp, #0xc] + and r1, r1, #0x1 + and r0, r0, #0x0 + cmp r0, #0x0 + cmpeq r1, #0x0 + beq _020E9934 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + b _020E9934 +_020E9910: + add r0, sp, #0x3e + add r1, sp, #0x18 + bl __less_dec +_020E991C: ; 0x020E991C + cmp r0, #0x0 + bne _020E9934 + ldr r1, [sp, #0x0] + ldr r0, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] +_020E9934: + ldrsb r0, [sp, #0xd6] + cmp r0, #0x0 + beq _020E995C + mov r0, #0x0 + ldr r2, [sp, #0x8] + ldr r3, [sp, #0xc] + mov r1, r0 + bl _dsub + str r0, [sp, #0x8] + str r1, [sp, #0xc] +_020E995C: + ldr r0, [sp, #0x8] + ldr r1, [sp, #0xc] + add sp, sp, #0xfc + ldmia sp!, {r4-r11,pc} + .balign 4 _020E996C: .word 0x3FF00000 _020E9970: .word 0xBFF00000 _020E9974: .word 0x02106B74 _020E9978: .word 0x7FF00000 _020E997C: .word 0x02106F5C -_020E9980: - .byte 0x48, 0x6E, 0x10, 0x02, 0x00, 0x00, 0x14, 0x40, 0xFF, 0xFF, 0xEF, 0x7F +_020E9980: .word 0x02106E48 +_020E9984: .word 0x40140000 +_020E9988: .word 0x7FEFFFFF arm_func_start __msl_generic_count_bits64 __msl_generic_count_bits64: ; 0x020E998C @@ -10393,6 +13872,8 @@ __msl_generic_count_bits64: ; 0x020E998C _020E9A14: .word 0x55555555 _020E9A18: .word 0x33333333 _020E9A1C: .word 0x0F0F0F0F + +arm_func_start __signbitf __signbitf: stmdb sp!, {r0-r3} ldr r0, [sp, #0x4] @@ -10452,6 +13933,7 @@ scalbn: ; 0x020E9AA4 stricmp: ; 0x020E9AD0 stmdb sp!, {r3,lr} ldr r3, _020E9B34 ; =0x0210420C +_020E9AD8: ldrb r2, [r0], #0x1 cmp r2, #0x0 blt _020E9AF0 @@ -10471,10 +13953,15 @@ _020E9B0C: cmp r12, r2 mvncc r0, #0x0 ldmccia sp!, {r3,pc} -_020E9B1C: - .byte 0x01, 0x00, 0xA0, 0x83 - .byte 0x08, 0x80, 0xBD, 0x88, 0x00, 0x00, 0x5C, 0xE3, 0xEA, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0xA0, 0xE3 - .byte 0x08, 0x80, 0xBD, 0xE8 +_020E9B1C: ; 0x020E9B1C + movhi r0, #0x1 + ldmhiia sp!, {r3,pc} +_020E9B24: ; 0x020E9B24 + cmp r12, #0x0 + bne _020E9AD8 + mov r0, #0x0 + ldmia sp!, {r3,pc} + .balign 4 _020E9B34: .word 0x0210420C arm_func_start strnicmp @@ -10483,6 +13970,8 @@ strnicmp: ; 0x020E9B38 bx r12 .balign 4 _020E9B40: .word stricmp + +arm_func_start _dadd _dadd: stmdb sp!, {r4,lr} eors r12, r1, r3 @@ -10688,9 +14177,11 @@ _020E9E18: bic r1, r0, #0x80000000 ldmia sp!, {r4,lr} bx lr -_020E9E28: - .byte 0x00, 0x00, 0xE0, 0xE3, 0x02, 0x11, 0xC0, 0xE3 - .byte 0x10, 0x40, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 +_020E9E28: ; 0x020E9E28 + mvn r0, #0x0 + bic r1, r0, #0x80000000 + ldmia sp!, {r4,lr} + bx lr _020E9E38: cmp r12, #0x800 movge lr, #0x80000000 @@ -10702,6 +14193,8 @@ _020E9E38: bx lr .balign 4 _020E9E58: .word 0x7FF00000 + +arm_func_start _d2f _d2f: and r2, r1, #0x80000000 mov r12, r1, lsr #0x14 @@ -11249,6 +14742,8 @@ _drsb: ; 0x020EA5B4 eor r0, r0, r2 eor r2, r0, r2 eor r0, r0, r2 + +arm_func_start _dsub _dsub: stmdb sp!, {r4,lr} eors r12, r1, r3 @@ -11669,9 +15164,9 @@ _020EAB88: _020EAB94: mvn r0, #0x80000000 bx lr -_020EAB9C: - .byte 0x02, 0x01, 0xE0, 0xE3 - .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020EAB9C: ; 0x020EAB9C + mvn r0, #0x80000000 + bx lr arm_func_start _dgr _dgr: ; 0x020EABA4 @@ -12099,7 +15594,7 @@ _020EB0B4: add r0, r0, r1, lsr #0x1f ldmia sp!, {lr} bx lr -_020EB138: +_020EB138: ; not code .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9 .byte 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA .byte 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4, 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE @@ -12265,6 +15760,8 @@ _020EB430: mov r0, lr ldmia sp!, {lr} bx lr + +arm_func_start _f2d _f2d: and r2, r0, #0x80000000 mov r12, r0, lsr #0x17 @@ -12694,10 +16191,13 @@ _020EB9CC: _020EB9E4: mov r0, #0x0 bx lr -_020EB9EC: - .byte 0x00, 0x00, 0x50, 0xE3 - .byte 0x01, 0x30, 0x53, 0xA2, 0x00, 0x00, 0x80, 0xE0, 0xA0, 0x04, 0xA0, 0xE1, 0x83, 0x0B, 0x80, 0xE1 - .byte 0x1E, 0xFF, 0x2F, 0xE1 +_020EB9EC: ; 0x020EB9EC + cmp r0, #0x0 + subges r3, r3, #0x1 + add r0, r0, r0 + mov r0, r0, lsr #0x9 + orr r0, r0, r3, lsl #0x17 + bx lr _020EBA04: mvn r0, #0x80000000 bx lr @@ -12738,7 +16238,7 @@ _020EBA58: orrs r6, r5, r6 bne _020EBA8C mov r1, r2 - bl _s32_div_f + bl _s32_div_f ands r4, r4, #0x1 movne r0, r1 mov r1, r0, asr #0x1f @@ -12827,8 +16327,9 @@ _020EBB78: orr r0, r0, r1, lsl r7 mov r1, r1, lsr r5 b _020EBBB0 -_020EBBA8: - .byte 0x31, 0x07, 0xA0, 0xE1, 0x00, 0x10, 0xA0, 0xE3 +_020EBBA8: ; 0x020EBBA8 + mov r0, r1, lsr r7 + mov r1, #0x0 _020EBBB0: cmp r4, #0x0 blt _020EBBC0 @@ -12867,10 +16368,13 @@ _020EBC0C: orrs r5, r1, r3 bne _020EBAAC mov r1, r2 - bl _u32_div_not_0_f -_020EBC1C: - .byte 0x00, 0x00, 0x54, 0xE3 - .byte 0x01, 0x00, 0xA0, 0x11, 0x00, 0x10, 0xA0, 0xE3, 0xF0, 0x58, 0xBD, 0xE8, 0x1E, 0xFF, 0x2F, 0xE1 + bl _u32_div_not_0_f +_020EBC1C: ; 0x020EBC1C + cmp r4, #0x0 + movne r0, r1 + mov r1, #0x0 + ldmia sp!, {r4-r7,r11-r12,lr} + bx lr arm_func_start _ll_mul _ll_mul: ; 0x020EBC30 @@ -12899,25 +16403,20 @@ _020EBC74: mov r0, #0x0 bx lr - arm_func_start _s32_div_f -_s32_div_f: ; 0x20EBC80 - ; Test whether the args have different signs - eor ip, r0, r1 - and ip, ip, #0x80000000 - ; Test the sign of the numerator, and make it positive + arm_func_start _s32_div_f +_s32_div_f: ; 0x020EBC80 + eor r12, r0, r1 + and r12, r12, #0x80000000 cmp r0, #0x0 rsblt r0, r0, #0x0 - addlt ip, ip, #1 - ; Make the denominator positive, also test for div0 + addlt r12, r12, #0x1 cmp r1, #0x0 rsblt r1, r1, #0x0 beq _020EBE78 - ; If the numerator is less than the denominator, return (0, numerator) cmp r0, r1 movcc r1, r0 movcc r0, #0x0 - bcc _020EBE78 - ; Do the actual division + blo _020EBE78 mov r2, #0x1c mov r3, r0, lsr #0x4 cmp r1, r3, lsr #0xc @@ -12934,30 +16433,118 @@ _s32_div_f: ; 0x20EBC80 adds r0, r0, r0 add r2, r2, r2, lsl #0x1 add pc, pc, r2, lsl #0x2 - nop - .rept 32 + mov r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 adcs r3, r1, r3, lsl #0x1 subcc r3, r3, r1 adcs r0, r0, r0 - .endr mov r1, r3 _020EBE78: - ; If the signs differed originally, negate quotient - ands r3, ip, #0x80000000 + ands r3, r12, #0x80000000 rsbne r0, r0, #0x0 - ; If the numerator was negative, negate remainder - ands r3, ip, #0x1 + ands r3, r12, #0x1 rsbne r1, r1, #0x0 bx lr -; required to make the linker happy : - - arm_func_start _u32_div_f + arm_func_start _u32_div_f _u32_div_f: ; 0x020EBE8C cmp r1, #0x0 - bxeq lr ; About as wrong as we can be + bxeq lr + arm_func_start _u32_div_not_0_f -_u32_div_not_0_f: +_u32_div_not_0_f: cmp r0, r1 movcc r1, r0 movcc r0, #0x0 @@ -12978,16 +16565,107 @@ _u32_div_not_0_f: adds r0, r0, r0 add r2, r2, r2, lsl #0x1 add pc, pc, r2, lsl #0x2 - nop - .rept 32 + mov r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 + adcs r3, r1, r3, lsl #0x1 + subcc r3, r3, r1 + adcs r0, r0, r0 adcs r3, r1, r3, lsl #0x1 subcc r3, r3, r1 adcs r0, r0, r0 - .endr mov r1, r3 bx lr - arm_func_start _drdiv + arm_func_start _drdiv _drdiv: ; 0x020EC070 eor r1, r1, r3 eor r3, r1, r3 @@ -12996,7 +16674,7 @@ _drdiv: ; 0x020EC070 eor r2, r0, r2 eor r0, r0, r2 - arm_func_start _ddiv + arm_func_start _ddiv _ddiv: ; 0x020EC088 stmdb sp!, {r4-r6,lr} ldr lr, _020EC5C8 ; =0x00000FFE @@ -13080,7 +16758,7 @@ _020EC1B0: adc r1, r1, #0x0 ldmia sp!, {r4-r6,lr} bx lr -_020EC1C0: +_020EC1C0: ; not code .byte 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1 .byte 0xF0, 0xF0, 0xEF, 0xEE, 0xED, 0xEC, 0xEB, 0xEA, 0xEA, 0xE9, 0xE8, 0xE7, 0xE6, 0xE6, 0xE5, 0xE4 .byte 0xE3, 0xE2, 0xE2, 0xE1, 0xE0, 0xDF, 0xDF, 0xDE, 0xDD, 0xDC, 0xDC, 0xDB, 0xDA, 0xD9, 0xD9, 0xD8 @@ -13316,11 +16994,11 @@ _020EC5B8: .balign 4 _020EC5C8: .word 0x00000FFE - arm_func_start _fp_init + arm_func_start _fp_init _fp_init: ; 0x020EC5CC bx lr - arm_func_start sys_writec + arm_func_start sys_writec sys_writec: ; 0x020EC5D0 str lr, [sp, #-0x4]! mov r1, r0 @@ -13328,7 +17006,7 @@ sys_writec: ; 0x020EC5D0 swi 0x123456 ldr pc, [sp], #0x4 - arm_func_start sys_readc + arm_func_start sys_readc sys_readc: ; 0x020EC5E4 str lr, [sp, #-0x4]! mov r1, #0x0 @@ -13336,14 +17014,14 @@ sys_readc: ; 0x020EC5E4 swi 0x123456 ldr pc, [sp], #0x4 - arm_func_start sys_exit + arm_func_start sys_exit sys_exit: ; 0x020EC5F8 mov r1, #0x0 mov r0, #0x18 swi 0x123456 mov pc, lr - arm_func_start __read_console + arm_func_start __read_console __read_console: ; 0x020EC608 stmdb sp!, {r3-r7,lr} mov r6, r2 @@ -13353,7 +17031,7 @@ __read_console: ; 0x020EC608 mov r4, #0x0 bls _020EC650 _020EC624: - bl sys_readc + bl sys_readc and r1, r0, #0xff cmp r1, #0xd strb r0, [r7, r4] @@ -13368,7 +17046,7 @@ _020EC650: mov r0, #0x0 ldmia sp!, {r3-r7,pc} - arm_func_start __write_console + arm_func_start __write_console __write_console: ; 0x020EC658 stmdb sp!, {r4-r6,lr} ldr r5, [r2, #0x0] @@ -13378,7 +17056,7 @@ __write_console: ; 0x020EC658 bls _020EC684 _020EC670: add r0, r6, r4 - bl sys_writec + bl sys_writec add r4, r4, #0x1 cmp r4, r5 blo _020EC670 @@ -13386,12 +17064,12 @@ _020EC684: mov r0, #0x0 ldmia sp!, {r4-r6,pc} - arm_func_start __close_console + arm_func_start __close_console __close_console: ; 0x020EC68C mov r0, #0x0 bx lr - arm_func_start __call_static_initializers + arm_func_start __call_static_initializers __call_static_initializers: ; 0x020EC694 stmdb sp!, {r4,lr} ldr r4, _020EC6BC ; =0x02104774 @@ -13408,22 +17086,32 @@ _020EC6A8: .balign 4 _020EC6BC: .word 0x02104774 - arm_func_start __destroy_global_chain + arm_func_start __destroy_global_chain __destroy_global_chain: ; 0x020EC6C0 stmdb sp!, {r3-r5,lr} ldr r4, _020EC700 ; =0x021D74C8 ldr r2, [r4, #0x0] cmp r2, #0x0 ldmeqia sp!, {r3-r5,pc} -_020EC6D4: - .byte 0x00, 0x50, 0xE0, 0xE3, 0x00, 0x00, 0x92, 0xE5, 0x05, 0x10, 0xA0, 0xE1 - .byte 0x00, 0x00, 0x84, 0xE5, 0x08, 0x00, 0x92, 0xE5, 0x04, 0x20, 0x92, 0xE5, 0x32, 0xFF, 0x2F, 0xE1 - .byte 0x00, 0x20, 0x94, 0xE5, 0x00, 0x00, 0x52, 0xE3, 0xF6, 0xFF, 0xFF, 0x1A, 0x38, 0x80, 0xBD, 0xE8 +_020EC6D4: ; 0x020EC6D4 + mvn r5, #0x0 +_020EC6D8: + ldr r0, [r2, #0x0] + mov r1, r5 + str r0, [r4, #0x0] + ldr r0, [r2, #0x8] + ldr r2, [r2, #0x4] + blx r2 + ldr r2, [r4, #0x0] + cmp r2, #0x0 + bne _020EC6D8 + ldmia sp!, {r3-r5,pc} + .balign 4 _020EC700: .word 0x021D74C8 - arm_func_start _ExitProcess + arm_func_start _ExitProcess _ExitProcess: ; 0x020EC704 - ldr ip, _020EC70C ; =sys_exit + ldr ip, _020EC70C ; =sys_exit bx r12 .balign 4 -_020EC70C: .word sys_exit +_020EC70C: .word sys_exit @@ -1052,3 +1052,6 @@ .extern MATH_SHA1GetHash
.extern MATH_MD5Update
.extern MATH_MD5GetHash
+.extern OS_LockMutex
+.extern OS_UnlockMutex
+
diff --git a/pokediamond.lcf b/pokediamond.lcf index 840d581c..1ff4b507 100644 --- a/pokediamond.lcf +++ b/pokediamond.lcf @@ -389,7 +389,7 @@ SECTIONS { WM_arm9.o (.text) CTRDG_arm9.o (.text) MATH_arm9.o (.text) - rom2dism.o (.text) + STD_arm9.o (.text) rom2.o (.data) string_util.o (.data) rom2_2.o (.text) |