diff options
Diffstat (limited to 'arm9/asm')
61 files changed, 8966 insertions, 8800 deletions
diff --git a/arm9/asm/CTRDG_task.s b/arm9/asm/CTRDG_task.s index c0feb88e..95c9ddb4 100644 --- a/arm9/asm/CTRDG_task.s +++ b/arm9/asm/CTRDG_task.s @@ -1,7 +1,7 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021D6F78 + .extern __console_exit .section .bss @@ -177,7 +177,7 @@ _020DDC04: ; 0x020DDC04 str r0, [r5, #0xc0] mov r2, #0x400 ldr r1, _020DDC54 ; =CTRDGi_TaskThread - ldr r3, _020DDC58 ; =UNK_021D6F78 + ldr r3, _020DDC58 ; =__console_exit mov r0, r5 str r2, [sp, #0x0] mov r2, #0x14 @@ -196,4 +196,4 @@ _020DDC38: _020DDC4C: .word UNK_021D6B50 _020DDC50: .word UNK_021D6B54 _020DDC54: .word CTRDGi_TaskThread -_020DDC58: .word UNK_021D6F78 +_020DDC58: .word __console_exit diff --git a/arm9/asm/MSL_abort_exit.s b/arm9/asm/MSL_abort_exit.s new file mode 100644 index 00000000..92729b72 --- /dev/null +++ b/arm9/asm/MSL_abort_exit.s @@ -0,0 +1,160 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern OSi_ThreadInfo
+ .extern __cs
+ .extern __cs_id
+ .extern __cs_ref
+
+ .bss
+
+ .global __console_exit
+__console_exit: ; 0x021D6F78
+ .space 0x4
+ .size __console_exit,.-__console_exit
+
+ .global __stdio_exit
+__stdio_exit: ; 0x021D6F7C
+ .space 0x4
+ .size __stdio_exit,.-__stdio_exit
+
+ .global __atexit_curr_func
+__atexit_curr_func: ; 0x021D6F80
+ .space 0x4
+ .size __atexit_curr_func,.-__atexit_curr_func
+
+ .global __aborting
+__aborting: ; 0x021D6F84
+ .space 0x4
+ .size __aborting,.-__aborting
+
+ .global __atexit_funcs
+__atexit_funcs: ; 0x021D6F88
+ .space 0x100
+ .size __atexit_funcs,.-__atexit_funcs
+
+ .text
+
+ arm_func_start abort
+abort: ; 0x020DE14C
+ stmdb sp!, {r3,lr}
+ mov r0, #0x1
+ bl raise
+ ldr r1, _020DE16C ; =__aborting - 0xC
+ mov r0, #0x1
+ str r0, [r1, #0xc]
+ bl exit
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020DE16C: .word __aborting - 0xC
+ arm_func_end abort
+
+ arm_func_start exit
+exit: ; 0x020DE170
+ stmdb sp!, {r4,lr}
+ ldr r1, _020DE1B8 ; =__aborting - 0xC
+ mov r4, r0
+ ldr r0, [r1, #0xc]
+ cmp r0, #0x0
+ bne _020DE1AC
+ bl __destroy_global_chain
+ ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
+ ldr r0, [r0, #0x4]
+ cmp r0, #0x0
+ beq _020DE1AC
+ blx r0
+ ldr r0, _020DE1B8 ; =__stdio_exit - 0x4
+ mov r1, #0x0
+ str r1, [r0, #0x4]
+_020DE1AC:
+ mov r0, r4
+ bl __exit
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020DE1B8: .word __console_exit
+ arm_func_end exit
+
+ arm_func_start __exit
+__exit: ; 0x020DE1BC
+ stmdb sp!, {r3-r5,lr}
+ ldr r0, _020DE2CC ; =__cs
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _020DE1F4
+ ldr r0, _020DE2D0 ; =OSi_ThreadInfo
+ ldr r1, _020DE2D4 ; =__cs_id
+ ldr r2, [r0, #0x4]
+ ldr r0, _020DE2D8 ; =__cs_ref
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+ b _020DE24C
+_020DE1F4:
+ ldr r0, _020DE2D0 ; =OSi_ThreadInfo
+ ldr r1, _020DE2D4 ; =__cs_id
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, #0x0]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DE224
+ ldr r0, _020DE2D8 ; =__cs_ref
+ ldr r1, [r0, #0x0]
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ b _020DE24C
+_020DE224:
+ ldr r0, _020DE2CC ; =__cs
+ bl OS_LockMutex
+ ldr r0, _020DE2D0 ; =OSi_ThreadInfo
+ ldr r1, _020DE2D4 ; =__cs_id
+ ldr r2, [r0, #0x4]
+ ldr r0, _020DE2D8 ; =__cs_ref
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x0]
+ str r2, [r0, #0x0]
+_020DE24C:
+ ldr r4, _020DE2DC ; =__console_exit
+ ldr r0, [r4, #0x8]
+ cmp r0, #0x0
+ ble _020DE280
+ ldr r5, _020DE2E0 ; =__atexit_funcs
+_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 ; =__cs_ref
+ ldr r1, [r0, #0x0]
+ subs r1, r1, #0x1
+ str r1, [r0, #0x0]
+ bne _020DE29C
+ ldr r0, _020DE2CC ; =__cs
+ bl OS_UnlockMutex
+_020DE29C:
+ ldr r0, _020DE2DC ; =__console_exit
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020DE2BC
+ blx r0
+ ldr r0, _020DE2DC ; =__console_exit
+ mov r1, #0x0
+ str r1, [r0, #0x0]
+_020DE2BC:
+ mov r0, #0x0
+ bl fflush
+ bl _ExitProcess
+ ldmia sp!, {r3-r5,pc}
+ .balign 4
+_020DE2CC: .word __cs
+_020DE2D0: .word OSi_ThreadInfo
+_020DE2D4: .word __cs_id
+_020DE2D8: .word __cs_ref
+_020DE2DC: .word __console_exit
+_020DE2E0: .word __atexit_funcs
+ arm_func_end __exit
diff --git a/arm9/asm/MSL_ansi_files.s b/arm9/asm/MSL_ansi_files.s new file mode 100644 index 00000000..236868e3 --- /dev/null +++ b/arm9/asm/MSL_ansi_files.s @@ -0,0 +1,142 @@ + .include "global.inc"
+ .include "asm/macros.inc"
+
+ .data
+
+ .global __files
+__files: ; 0x02106A58
+ ; stdin
+ .byte 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .word stdin_buff
+ .byte 0x00, 0x01, 0x00, 0x00
+ .word stdin_buff
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .word __read_console
+ .word __write_console
+ .word __close_console
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ ; stdout
+ .byte 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .word stdout_buff
+ .byte 0x00, 0x01, 0x00, 0x00
+ .word stdout_buff
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .word __read_console
+ .word __write_console
+ .word __close_console
+ .byte 0x00, 0x00, 0x00, 0x00
+
+ ; stderr
+ .byte 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .word stderr_buff
+ .byte 0x00, 0x01, 0x00, 0x00
+ .word stderr_buff
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ .word __read_console
+ .word __write_console
+ .word __close_console
+ .byte 0x00, 0x00, 0x00, 0x00
+ .size __files,.-__files
+
+ .bss
+
+ .global stderr_buff
+stderr_buff: ; 0x021D71A8
+ .space 0x100
+ .size stderr_buff,.-stderr_buff
+
+ .global stdout_buff
+stdout_buff: ; 0x021D72A8
+ .space 0x100
+ .size stdout_buff,.-stdout_buff
+
+ .global stdin_buff
+stdin_buff: ; 0x021D73A8
+ .space 0x100
+ .size stdin_buff,.-stdin_buff
+
+ .text
+
+ arm_func_start __flush_line_buffered_output_files
+__flush_line_buffered_output_files:
+ stmdb sp!, {r3-r9,lr}
+ ldr r0, _020DE384 ; =__files
+ mov r4, #0x0
+ mov r5, #0x1
+ mov r8, r0
+ mvn r9, #0x0
+ mov r7, r4
+ mov r6, #0x4c
+_020DE31C:
+ ldr r1, [r0, #0x4]
+ mov r2, r1, lsl #0x16
+ movs r2, r2, lsr #0x1d
+ beq _020DE35C
+ mov r1, r1, lsl #0x19
+ mov r1, r1, lsr #0x1e
+ tst r1, #0x1
+ beq _020DE35C
+ ldr r1, [r0, #0x8]
+ mov r1, r1, lsl #0x1d
+ mov r1, r1, lsr #0x1d
+ cmp r1, #0x1
+ bne _020DE35C
+ bl fflush
+ cmp r0, #0x0
+ movne r4, r9
+_020DE35C:
+ cmp r5, #0x3
+ movge r0, r7
+ bge _020DE374
+ mul r0, r5, r6
+ add r5, r5, #0x1
+ add r0, r8, r0
+_020DE374:
+ cmp r0, #0x0
+ bne _020DE31C
+ mov r0, r4
+ ldmia sp!, {r3-r9,pc}
+ .balign 4
+_020DE384: .word __files
+ arm_func_end __flush_line_buffered_output_files
+
+ arm_func_start __flush_all
+__flush_all: ; 0x020DE388
+ stmdb sp!, {r3-r9,lr}
+ ldr r0, _020DE3EC ; =__files
+ mov r4, #0x0
+ mov r5, #0x1
+ mov r8, r0
+ mvn r9, #0x0
+ mov r7, r4
+ mov r6, #0x4c
+_020DE3A8:
+ ldr r1, [r0, #0x4]
+ mov r1, r1, lsl #0x16
+ movs r1, r1, lsr #0x1d
+ beq _020DE3C4
+ bl fflush
+ cmp r0, #0x0
+ movne r4, r9
+_020DE3C4:
+ cmp r5, #0x3
+ movge r0, r7
+ bge _020DE3DC
+ mul r0, r5, r6
+ add r5, r5, #0x1
+ add r0, r8, r0
+_020DE3DC:
+ cmp r0, #0x0
+ bne _020DE3A8
+ mov r0, r4
+ ldmia sp!, {r3-r9,pc}
+ .balign 4
+_020DE3EC: .word __files
+ arm_func_end __flush_all
diff --git a/arm9/asm/MSL_arith.s b/arm9/asm/MSL_arith.s new file mode 100644 index 00000000..ff25ce37 --- /dev/null +++ b/arm9/asm/MSL_arith.s @@ -0,0 +1,11 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start abs
+abs: ; 0x020DE3F0
+ cmp r0, #0x0
+ rsblt r0, r0, #0x0
+ bx lr
+ arm_func_end abs
diff --git a/arm9/asm/MSL_assert.s b/arm9/asm/MSL_assert.s new file mode 100644 index 00000000..140a07f1 --- /dev/null +++ b/arm9/asm/MSL_assert.s @@ -0,0 +1,31 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .data
+
+__local_str__msl_assertion_failed: ; 0x02106B3C
+ .asciz "Assertion (%s) failed in \"%s\", function \"%s\", line %d\n"
+ .size __local_str__msl_assertion_failed,.-__local_str__msl_assertion_failed
+ .balign 4, 0
+
+ .text
+
+ arm_func_start __msl_assertion_failed
+__msl_assertion_failed: ; 0x020DE3FC
+ stmdb sp!, {r3-r4,lr}
+ sub sp, sp, #0x4
+ mov r4, r0
+ mov lr, r1
+ mov r12, r2
+ str r3, [sp, #0x0]
+ ldr r0, _020DE434 ; =__local_str__msl_assertion_failed
+ mov r1, r4
+ mov r2, lr
+ mov r3, r12
+ bl printf
+ bl abort
+ add sp, sp, #0x4
+ ldmia sp!, {r3-r4,pc}
+ .balign 4
+_020DE434: .word __local_str__msl_assertion_failed
+ arm_func_end __msl_assertion_failed
diff --git a/arm9/asm/MSL_buffer_io.s b/arm9/asm/MSL_buffer_io.s new file mode 100644 index 00000000..5fd10b64 --- /dev/null +++ b/arm9/asm/MSL_buffer_io.s @@ -0,0 +1,110 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start __convert_from_newlines
+__convert_from_newlines:
+ bx lr
+ arm_func_end __convert_from_newlines
+
+ arm_func_start __convert_to_newlines
+__convert_to_newlines:
+ bx lr
+ arm_func_end __convert_to_newlines
+
+ arm_func_start __prep_buffer
+__prep_buffer:
+ ldr r1, [r0, #0x1c]
+ str r1, [r0, #0x24]
+ ldr r3, [r0, #0x20]
+ str r3, [r0, #0x28]
+ ldr r2, [r0, #0x18]
+ ldr r1, [r0, #0x2c]
+ and r1, r2, r1
+ sub r1, r3, r1
+ str r1, [r0, #0x28]
+ ldr r1, [r0, #0x18]
+ str r1, [r0, #0x34]
+ bx lr
+ arm_func_end __prep_buffer
+
+ arm_func_start __load_buffer
+__load_buffer:
+ stmdb sp!, {r4-r6,lr}
+ mov r5, r2
+ mov r4, r0
+ mov r6, r1
+ bl __prep_buffer
+ cmp r5, #0x1
+ ldreq r0, [r4, #0x20]
+ add r2, r4, #0x28
+ streq r0, [r4, #0x28]
+ ldr r0, [r4, #0x0]
+ ldr r1, [r4, #0x1c]
+ ldr r3, [r4, #0x48]
+ ldr r12, [r4, #0x3c]
+ blx r12
+ cmp r0, #0x2
+ moveq r1, #0x0
+ streq r1, [r4, #0x28]
+ cmp r6, #0x0
+ ldrne r1, [r4, #0x28]
+ strne r1, [r6, #0x0]
+ cmp r0, #0x0
+ ldmneia sp!, {r4-r6,pc}
+ 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_end __load_buffer
+
+ arm_func_start __flush_buffer
+__flush_buffer:
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ ldr r2, [r5, #0x24]
+ ldr r0, [r5, #0x1c]
+ mov r4, r1
+ subs r0, r2, r0
+ beq _020DE574
+ str r0, [r5, #0x28]
+ ldr r0, [r5, #0x4]
+ mov r0, r0, lsl #0x13
+ movs r0, r0, lsr #0x1f
+ bne _020DE538
+ ldr r0, [r5, #0x1c]
+ add r1, r5, #0x28
+ bl __convert_from_newlines
+_020DE538:
+ ldr r0, [r5, #0x0]
+ ldr r1, [r5, #0x1c]
+ ldr r3, [r5, #0x48]
+ ldr r12, [r5, #0x40]
+ add r2, r5, #0x28
+ blx r12
+ cmp r4, #0x0
+ ldrne r1, [r5, #0x28]
+ strne r1, [r4, #0x0]
+ cmp r0, #0x0
+ ldmneia sp!, {r3-r5,pc}
+ ldr r1, [r5, #0x18]
+ ldr r0, [r5, #0x28]
+ add r0, r1, r0
+ str r0, [r5, #0x18]
+_020DE574:
+ mov r0, r5
+ bl __prep_buffer
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+ arm_func_end __flush_buffer
diff --git a/arm9/asm/MSL_critical_regions_NITRO.s b/arm9/asm/MSL_critical_regions_NITRO.s new file mode 100644 index 00000000..046e9636 --- /dev/null +++ b/arm9/asm/MSL_critical_regions_NITRO.s @@ -0,0 +1,19 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .bss
+
+ .global __cs_id
+__cs_id: ; 0x021D7088
+ .space 0x24
+ .size __cs_id,.-__cs_id
+
+ .global __cs_ref
+__cs_ref: ; 0x021D70AC
+ .space 0x24
+ .size __cs_ref,.-__cs_ref
+
+ .global __cs
+__cs: ; 0x021D70D0
+ .space 0xD8
+ .size __cs,.-__cs
diff --git a/arm9/asm/MSL_ctype.s b/arm9/asm/MSL_ctype.s new file mode 100644 index 00000000..a881dd0e --- /dev/null +++ b/arm9/asm/MSL_ctype.s @@ -0,0 +1,48 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .rodata
+
+ .global __lower_mapC
+__lower_mapC: ; 0x0210420C
+ .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+ .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
+ .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
+ .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
+ .byte 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
+ .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
+ .byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
+ .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
+ .size __lower_mapC,.-__lower_mapC
+
+ .global __upper_mapC
+__upper_mapC: ; 0x0210428C
+ .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+ .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F
+ .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
+ .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
+ .byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
+ .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
+ .byte 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
+ .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
+ .size __upper_mapC,.-__upper_mapC
+
+ .global __msl_digit
+__msl_digit: ; 0x0210430C
+ .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+ .short 0x0004, 0x0106, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004
+ .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+ .short 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+ .short 0x0142, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
+ .short 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
+ .short 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458, 0x0458
+ .short 0x0458, 0x0458, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
+ .short 0x00D0, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0651, 0x0251
+ .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
+ .short 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251, 0x0251
+ .short 0x0251, 0x0251, 0x0251, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x00D0
+ .short 0x00D0, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0471, 0x0071
+ .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
+ .short 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071, 0x0071
+ .short 0x0071, 0x0071, 0x0071, 0x00D0, 0x00D0, 0x00D0, 0x00D0, 0x0004
+ .size __msl_digit,.-__msl_digit
diff --git a/arm9/asm/MSL_direct_io.s b/arm9/asm/MSL_direct_io.s new file mode 100644 index 00000000..dde2da02 --- /dev/null +++ b/arm9/asm/MSL_direct_io.s @@ -0,0 +1,506 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern __files
+ .extern OSi_ThreadInfo
+ .extern __cs
+ .extern __cs_id
+ .extern __cs_ref
+ .extern __prep_buffer
+ .extern __memrchr
+ .extern fwide
+
+ .text
+
+ arm_func_start fread
+fread: ; 0x020DE584
+ stmdb sp!, {r4-r10,lr}
+ ldr r4, _020DE67C ; =__files
+ mov r7, r3
+ cmp r7, r4
+ moveq r6, #0x2
+ mov r10, r0
+ movne r6, #0x5
+ mov r0, #0x18
+ mul r4, r6, r0
+ ldr r5, _020DE680 ; =__cs
+ mov r9, r1
+ add r0, r5, r4
+ mov r8, r2
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _020DE5E8
+ ldr r0, _020DE684 ; =OSi_ThreadInfo
+ ldr r2, _020DE688 ; =__cs_id
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DE68C ; =__cs_ref
+ 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 ; =OSi_ThreadInfo
+ ldr r1, _020DE688 ; =__cs_id
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, r6, lsl #0x2]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DE618
+ ldr r1, _020DE68C ; =__cs_ref
+ 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 ; =OSi_ThreadInfo
+ ldr r2, _020DE688 ; =__cs_id
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DE68C ; =__cs_ref
+ 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 ; =__cs_ref
+ 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 __files
+_020DE680: .word __cs
+_020DE684: .word OSi_ThreadInfo
+_020DE688: .word __cs_id
+_020DE68C: .word __cs_ref
+
+ arm_func_start __fread
+__fread: ; 0x020DE690
+ stmdb sp!, {r3-r10,lr}
+ sub sp, sp, #0x4
+ mov r7, r3
+ mov r9, r0
+ mov r8, r1
+ mov r0, r7
+ mov r1, #0x0
+ mov r4, r2
+ bl fwide
+ 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
+ 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
+ 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
+ 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
+ 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
+ mov r9, r3
+ mov r10, r0
+ str r1, [sp, #0x0]
+ mov r0, r9
+ mov r1, #0x0
+ mov r4, r2
+ bl fwide
+ 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
+ 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
+ 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
+ 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}
diff --git a/arm9/asm/MSL_errno.s b/arm9/asm/MSL_errno.s new file mode 100644 index 00000000..28264872 --- /dev/null +++ b/arm9/asm/MSL_errno.s @@ -0,0 +1,9 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .bss
+
+ .global errno
+errno: ; 0x021D74A8
+ .space 0x4
+ .size errno,.-errno
\ No newline at end of file diff --git a/arm9/asm/MSL_file_io.s b/arm9/asm/MSL_file_io.s new file mode 100644 index 00000000..d722367f --- /dev/null +++ b/arm9/asm/MSL_file_io.s @@ -0,0 +1,106 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern __flush_all
+ .extern __flush_buffer
+
+ .text
+
+ arm_func_start fclose
+fclose: ; 0x020DEC88
+ stmdb sp!, {r3-r5,lr}
+ movs r5, r0
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+ ldr r1, [r5, #0x4]
+ mov r1, r1, lsl #0x16
+ movs r1, r1, lsr #0x1d
+ moveq r0, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+ 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}
+ cmp r4, #0x0
+ cmpeq r0, #0x0
+ movne r2, #0x1
+ rsb r0, r2, #0x0
+ ldmia sp!, {r3-r5,pc}
+ arm_func_end fclose
+
+ arm_func_start fflush
+fflush:
+ stmdb sp!, {r4,lr}
+ movs r4, r0
+ bne _020DED10
+ bl __flush_all
+ ldmia sp!, {r4,pc}
+_020DED10:
+ ldrb r0, [r4, #0xd]
+ cmp r0, #0x0
+ bne _020DED2C
+ ldr r0, [r4, #0x4]
+ mov r1, r0, lsl #0x16
+ movs r1, r1, lsr #0x1d
+ bne _020DED34
+_020DED2C:
+ mvn r0, #0x0
+ ldmia sp!, {r4,pc}
+_020DED34:
+ mov r0, r0, lsl #0x1b
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x1
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ 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
+ 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_end fflush
diff --git a/arm9/asm/MSL_file_pos.s b/arm9/asm/MSL_file_pos.s new file mode 100644 index 00000000..a0c82aea --- /dev/null +++ b/arm9/asm/MSL_file_pos.s @@ -0,0 +1,363 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern __files
+ .extern __cs
+ .extern __cs_id
+ .extern __cs_ref
+ .extern OSi_ThreadInfo
+ .extern errno
+
+ .text
+
+ arm_func_start _ftell
+_ftell: ; 0x020DEDE4
+ ldr r1, [r0, #0x4]
+ mov r1, r1, lsl #0x16
+ mov r1, r1, lsr #0x1d
+ and r1, r1, #0xff
+ add r1, r1, #0xff
+ and r1, r1, #0xff
+ cmp r1, #0x1
+ bhi _020DEE10
+ ldrb r1, [r0, #0xd]
+ cmp r1, #0x0
+ beq _020DEE24
+_020DEE10:
+ ldr r0, _020DEE5C ; =errno
+ mov r1, #0x28
+ str r1, [r0, #0x0]
+ sub r0, r1, #0x29
+ bx lr
+_020DEE24:
+ ldr r1, [r0, #0x8]
+ mov r1, r1, lsl #0x1d
+ movs r12, r1, lsr #0x1d
+ ldreq r0, [r0, #0x18]
+ bxeq lr
+ ldr r2, [r0, #0x24]
+ ldr r1, [r0, #0x1c]
+ ldr r3, [r0, #0x34]
+ sub r0, r2, r1
+ cmp r12, #0x3
+ add r0, r3, r0
+ subcs r1, r12, #0x2
+ subcs r0, r0, r1
+ bx lr
+ .balign 4
+_020DEE5C: .word errno
+ arm_func_end _ftell
+
+ arm_func_start ftell
+ftell: ; 0x020DEE60
+ stmdb sp!, {r3-r7,lr}
+ ldr r1, _020DEF60 ; =__files
+ mov r7, r0
+ cmp r7, r1
+ moveq r6, #0x2
+ beq _020DEE98
+ ldr r0, _020DEF64 ; =__files + 0x4C
+ cmp r7, r0
+ moveq r6, #0x3
+ beq _020DEE98
+ ldr r0, _020DEF68 ; =__files + 0x98
+ cmp r7, r0
+ moveq r6, #0x4
+ movne r6, #0x5
+_020DEE98:
+ mov r0, #0x18
+ mul r4, r6, r0
+ ldr r5, _020DEF6C ; =__cs
+ add r0, r5, r4
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _020DEED8
+ ldr r0, _020DEF70 ; =OSi_ThreadInfo
+ ldr r2, _020DEF74 ; =__cs_id
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DEF78 ; =__cs_ref
+ 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 ; =OSi_ThreadInfo
+ ldr r1, _020DEF74 ; =__cs_id
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, r6, lsl #0x2]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DEF08
+ ldr r1, _020DEF78 ; =__cs_ref
+ 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 ; =OSi_ThreadInfo
+ ldr r2, _020DEF74 ; =__cs_id
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DEF78 ; =__cs_ref
+ 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 ; =__cs_ref
+ 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 __files
+_020DEF64: .word __files + 0x4C
+_020DEF68: .word __files + 0x98
+_020DEF6C: .word __cs
+_020DEF70: .word OSi_ThreadInfo
+_020DEF74: .word __cs_id
+_020DEF78: .word __cs_ref
+ arm_func_end ftell
+
+ arm_func_start _fseek
+_fseek: ; 0x020DEF7C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ ldr r1, [r5, #0x4]
+ mov r4, r2
+ mov r1, r1, lsl #0x16
+ mov r1, r1, lsr #0x1d
+ and r1, r1, #0xff
+ cmp r1, #0x1
+ ldreqb r1, [r5, #0xd]
+ cmpeq r1, #0x0
+ beq _020DEFC8
+ ldr r0, _020DF160 ; =errno
+ mov r1, #0x28
+ str r1, [r0, #0x0]
+ sub r0, r1, #0x29
+ ldmia sp!, {r3-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DEFC8:
+ ldr r1, [r5, #0x8]
+ mov r1, r1, lsl #0x1d
+ mov r1, r1, lsr #0x1d
+ cmp r1, #0x1
+ bne _020DF018
+ mov r1, #0x0
+ bl __flush_buffer
+ cmp r0, #0x0
+ beq _020DF018
+ mov r0, #0x1
+ strb r0, [r5, #0xd]
+ mov r2, #0x0
+ ldr r0, _020DF160 ; =errno
+ 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
+ mov r0, r5
+ mov r4, #0x0
+ bl _ftell
+ ldr r1, [sp, #0x14]
+ add r0, r1, r0
+ str r0, [sp, #0x14]
+_020DF038:
+ cmp r4, #0x2
+ beq _020DF0CC
+ ldr r0, [r5, #0x4]
+ mov r0, r0, lsl #0x1b
+ mov r0, r0, lsr #0x1d
+ cmp r0, #0x3
+ beq _020DF0CC
+ ldr r0, [r5, #0x8]
+ mov r0, r0, lsl #0x1d
+ mov r0, r0, lsr #0x1d
+ sub r0, r0, #0x2
+ cmp r0, #0x1
+ bhi _020DF0CC
+ ldr r2, [sp, #0x14]
+ ldr r0, [r5, #0x18]
+ cmp r2, r0
+ bhs _020DF088
+ ldr r0, [r5, #0x34]
+ cmp r2, r0
+ bhs _020DF098
+_020DF088:
+ ldr r0, [r5, #0x8]
+ bic r0, r0, #0x7
+ str r0, [r5, #0x8]
+ b _020DF0D8
+_020DF098:
+ ldr r1, [r5, #0x1c]
+ sub r0, r2, r0
+ add r0, r1, r0
+ str r0, [r5, #0x24]
+ ldr r1, [r5, #0x18]
+ ldr r0, [sp, #0x14]
+ sub r0, r1, r0
+ str r0, [r5, #0x28]
+ ldr r0, [r5, #0x8]
+ bic r0, r0, #0x7
+ orr r0, r0, #0x2
+ str r0, [r5, #0x8]
+ b _020DF0D8
+_020DF0CC:
+ ldr r0, [r5, #0x8]
+ bic r0, r0, #0x7
+ str r0, [r5, #0x8]
+_020DF0D8:
+ ldr r0, [r5, #0x8]
+ mov r0, r0, lsl #0x1d
+ movs r0, r0, lsr #0x1d
+ bne _020DF150
+ ldr r12, [r5, #0x38]
+ cmp r12, #0x0
+ beq _020DF13C
+ ldr r0, [r5, #0x0]
+ ldr r3, [r5, #0x48]
+ add r1, sp, #0x14
+ mov r2, r4
+ blx r12
+ cmp r0, #0x0
+ beq _020DF13C
+ mov r0, #0x1
+ strb r0, [r5, #0xd]
+ mov r2, #0x0
+ ldr r0, _020DF160 ; =errno
+ 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
+_020DF13C:
+ mov r1, #0x0
+ strb r1, [r5, #0xc]
+ ldr r0, [sp, #0x14]
+ str r0, [r5, #0x18]
+ str r1, [r5, #0x28]
+_020DF150:
+ mov r0, #0x0
+ ldmia sp!, {r3-r5,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020DF160: .word errno
+ arm_func_end _fseek
+
+ arm_func_start fseek
+fseek:
+ stmdb sp!, {r3-r9,lr}
+ ldr r3, _020DF274 ; =__files
+ mov r9, r0
+ cmp r9, r3
+ mov r8, r1
+ mov r7, r2
+ moveq r6, #0x2
+ beq _020DF1A4
+ ldr r0, _020DF278 ; =__files + 0x4C
+ cmp r9, r0
+ moveq r6, #0x3
+ beq _020DF1A4
+ ldr r0, _020DF27C ; =__files + 0x98
+ cmp r9, r0
+ moveq r6, #0x4
+ movne r6, #0x5
+_020DF1A4:
+ mov r0, #0x18
+ mul r4, r6, r0
+ ldr r5, _020DF280 ; =__cs
+ add r0, r5, r4
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _020DF1E4
+ ldr r0, _020DF284 ; =OSi_ThreadInfo
+ ldr r2, _020DF288 ; =__cs_id
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DF28C ; =__cs_ref
+ 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 ; =OSi_ThreadInfo
+ ldr r1, _020DF288 ; =__cs_id
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, r6, lsl #0x2]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020DF214
+ ldr r1, _020DF28C ; =__cs_ref
+ 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 ; =OSi_ThreadInfo
+ ldr r2, _020DF288 ; =__cs_id
+ ldr r1, [r0, #0x4]
+ ldr r0, _020DF28C ; =__cs_ref
+ 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 ; =__cs_ref
+ 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 __files
+_020DF278: .word __files + 0x4C
+_020DF27C: .word __files + 0x98
+_020DF280: .word __cs
+_020DF284: .word OSi_ThreadInfo
+_020DF288: .word __cs_id
+_020DF28C: .word __cs_ref
+ arm_func_end fseek
+
+ arm_func_start rewind
+rewind: ; 0x020DF290
+ stmdb sp!, {r4,lr}
+ mov r1, #0x0
+ mov r4, r0
+ mov r2, r1
+ strb r1, [r4, #0xd]
+ bl fseek
+ mov r0, #0x0
+ strb r0, [r4, #0xd]
+ ldmia sp!, {r4,pc}
+ arm_func_end rewind
diff --git a/arm9/asm/MSL_float.s b/arm9/asm/MSL_float.s new file mode 100644 index 00000000..d412ffb6 --- /dev/null +++ b/arm9/asm/MSL_float.s @@ -0,0 +1,18 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .data
+ .global __float_huge
+__float_huge: ; 0x02106B74
+ .word 0x7F800000 ; inf
+ .size __float_huge,.-__float_huge
+
+ .global __float_nan
+__float_nan: ; 0x02106B78
+ .word 0x7FFFFFFF ; nan
+ .size __float_nan,.-__float_nan
+
+ .global __double_huge
+__double_huge: ; 0x02106B7C
+ .word 0x00000000, 0x7FF00000 ; inf
+ .size __double_huge,.-__double_huge
diff --git a/arm9/asm/MSL_math.s b/arm9/asm/MSL_math.s new file mode 100644 index 00000000..aaa97c48 --- /dev/null +++ b/arm9/asm/MSL_math.s @@ -0,0 +1,16 @@ + .include "global.inc"
+ .include "asm/macros.inc"
+ .extern __float_nan
+
+ .text
+
+ arm_func_start nan
+nan: ; 0x020DE2E4
+ ldr r0, _020DE2F4 ; =__float_nan
+ ldr ip, _020DE2F8 ; =_f2d
+ ldr r0, [r0, #0x0]
+ bx r12
+ .balign 4
+_020DE2F4: .word __float_nan
+_020DE2F8: .word _f2d
+ arm_func_end nan
diff --git a/arm9/asm/MSL_mbstring.s b/arm9/asm/MSL_mbstring.s new file mode 100644 index 00000000..92c017d5 --- /dev/null +++ b/arm9/asm/MSL_mbstring.s @@ -0,0 +1,232 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .data
+
+ .balign 4
+ .global _loc_tim_C$timezone
+_loc_tim_C$timezone: ; 0x02106B84
+ .asciz ""
+ .size _loc_tim_C$timezone,.-_loc_tim_C$timezone
+
+ .balign 4
+ .global _loc_tim_C$timefmt2
+_loc_tim_C$timefmt2: ; 0x02106B88
+ .asciz "%T"
+ .size _loc_tim_C$timefmt2,.-_loc_tim_C$timefmt2
+
+ .balign 4
+ .global _loc_tim_C$AMPM
+_loc_tim_C$AMPM: ; 0x02106B8C
+ .asciz "AM|PM"
+ .size _loc_tim_C$AMPM,.-_loc_tim_C$AMPM
+
+ .balign 4, 0
+ .global _loc_ctyp_C
+_loc_ctyp_C: ; 0x02106B94
+ .word __mbtowc_noconv
+ .word __wctomb_noconv
+ .size _loc_ctyp_C,.-_loc_ctyp_C
+
+ .global _loc_coll_C
+_loc_coll_C: ; 0x02106B9C
+ .word 0x20
+ .word 0x6E
+ .word 0x00
+ .word char_coll_tableC
+ .size _loc_coll_C,.-_loc_coll_C
+
+ .global _loc_tim_C
+_loc_tim_C: ; 0x02106BAC
+ .word _loc_tim_C$AMPM
+ .word _loc_tim_C$datetimefmt
+ .word _loc_tim_C$timefmt
+ .word _loc_tim_C$datefmt
+ .word _loc_tim_C$timefmt2
+ .word _loc_tim_C$daynames
+ .word _loc_tim_C$monthnames
+ .word _loc_tim_C$timezone
+ .size _loc_tim_C,.-_loc_tim_C
+
+ .global char_coll_tableC
+char_coll_tableC: ; 0x02106BCC
+ .short 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008
+ .short 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010
+ .short 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028
+ .short 0x0029, 0x002A, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016
+ .short 0x0017, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0035, 0x0037
+ .short 0x0039, 0x003B, 0x003D, 0x003F, 0x0041, 0x0043, 0x0045, 0x0047
+ .short 0x0049, 0x004B, 0x004D, 0x004F, 0x0051, 0x0053, 0x0055, 0x0057
+ .short 0x0059, 0x005B, 0x005D, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C
+ .short 0x0000, 0x002C, 0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038
+ .short 0x003A, 0x003C, 0x003E, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048
+ .short 0x004A, 0x004C, 0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058
+ .short 0x005A, 0x005C, 0x005E, 0x001D, 0x001E, 0x001F, 0x0020, 0x0000
+ .size char_coll_tableC,.-char_coll_tableC
+
+ .global _loc_tim_C$datefmt
+_loc_tim_C$datefmt: ; 0x02106C8C
+ .asciz "%m/%d/%y"
+ .size _loc_tim_C$datefmt,.-_loc_tim_C$datefmt
+
+ .balign 4, 0
+ .global _current_locale
+_current_locale: ; 0x02106C98
+ .word _loc_tim_C
+ .word _loc_coll_C
+ .word _loc_ctyp_C
+ .size _current_locale,.-_current_locale
+
+ .global _loc_tim_C$timefmt
+_loc_tim_C$timefmt: ; 0x02106CA4
+ .asciz "%I:%M:%S %p"
+ .size _loc_tim_C$timefmt,.-_loc_tim_C$timefmt
+
+ .balign 4, 0
+ .global _loc_tim_C$datetimefmt
+_loc_tim_C$datetimefmt: ; 0x02106CB0
+ .asciz "%a %b %e %T %Y"
+ .size _loc_tim_C$datetimefmt,.-_loc_tim_C$datetimefmt
+
+ .balign 4, 0
+ .global _loc_tim_C$daynames
+_loc_tim_C$daynames: ; 0x02106CC0
+ .asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday"
+ .size _loc_tim_C$daynames,.-_loc_tim_C$daynames
+
+ .balign 4, 0
+ .global _loc_tim_C$monthnames
+_loc_tim_C$monthnames: ; 0x02106D18
+ .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December"
+ .size _loc_tim_C$monthnames,.-_loc_tim_C$monthnames
+
+ .text
+
+ arm_func_start mbtowc
+mbtowc:
+ stmdb sp!, {r3,lr}
+ ldr r3, _020DF2CC ; =_current_locale
+ ldr r3, [r3, #0x8]
+ ldr r3, [r3, #0x0]
+ blx r3
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020DF2CC: .word _current_locale
+ arm_func_end mbtowc
+
+ arm_func_start __mbtowc_noconv
+__mbtowc_noconv: ; 0x020DF2D0
+ cmp r1, #0x0
+ moveq r0, #0x0
+ bxeq lr
+ cmp r2, #0x0
+ mvneq r0, #0x0
+ bxeq lr
+ cmp r0, #0x0
+ ldrneb r2, [r1, #0x0]
+ strneh r2, [r0, #0x0]
+ ldrsb r0, [r1, #0x0]
+ cmp r0, #0x0
+ moveq r0, #0x0
+ movne r0, #0x1
+ bx lr
+ arm_func_end __mbtowc_noconv
+
+ arm_func_start __wctomb_noconv
+__wctomb_noconv: ; 0x020DF308
+ cmp r0, #0x0
+ moveq r0, #0x0
+ strneb r1, [r0, #0x0]
+ movne r0, #0x1
+ bx lr
+ arm_func_end __wctomb_noconv
+
+ arm_func_start wctomb
+wctomb: ; 0x020DF31C
+ stmdb sp!, {r3,lr}
+ ldr r2, _020DF334 ; =_current_locale
+ ldr r2, [r2, #0x8]
+ ldr r2, [r2, #0x4]
+ blx r2
+ ldmia sp!, {r3,pc}
+ .balign 4
+_020DF334: .word _current_locale
+ arm_func_end wctomb
+
+ arm_func_start mbstowcs
+mbstowcs: ; 0x020DF338
+ stmdb sp!, {r4-r8,lr}
+ mov r7, r1
+ mov r8, r0
+ mov r0, r7
+ mov r6, r2
+ bl strlen
+ mov r5, r0
+ cmp r8, #0x0
+ mov r4, #0x0
+ beq _020DF3B8
+ cmp r6, #0x0
+ bls _020DF3B8
+_020DF368:
+ ldrsb r0, [r7, #0x0]
+ cmp r0, #0x0
+ beq _020DF3A0
+ mov r0, r8
+ mov r1, r7
+ mov r2, r5
+ bl mbtowc
+ 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:
+ add r4, r4, #0x1
+ cmp r4, r6
+ blo _020DF368
+_020DF3B8:
+ mov r0, r4
+ ldmia sp!, {r4-r8,pc}
+ arm_func_end mbstowcs
+
+ arm_func_start wcstombs
+wcstombs:
+ stmdb sp!, {r3-r9,lr}
+ movs r4, r0
+ mov r9, r1
+ cmpne r9, #0x0
+ mov r8, r2
+ mov r7, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r3-r9,pc}
+ 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_end wcstombs
diff --git a/arm9/asm/MSL_mem.s b/arm9/asm/MSL_mem.s new file mode 100644 index 00000000..39bdc299 --- /dev/null +++ b/arm9/asm/MSL_mem.s @@ -0,0 +1,110 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern __fill_mem
+
+ .text
+
+ arm_func_start memcpy
+memcpy: ; 0x020DF438
+ mov r12, r0
+ cmp r2, #0x0
+ bxeq lr
+_020DF444:
+ ldrsb r3, [r1], #0x1
+ subs r2, r2, #0x1
+ strb r3, [r12], #0x1
+ bne _020DF444
+ bx lr
+ arm_func_end memcpy
+
+ arm_func_start memmove
+memmove: ; 0x020DF458
+ cmp r1, r0
+ blo _020DF480
+ mov r12, r0
+ cmp r2, #0x0
+ bxeq lr
+_020DF46C:
+ ldrsb r3, [r1], #0x1
+ subs r2, r2, #0x1
+ strb r3, [r12], #0x1
+ bne _020DF46C
+ bx lr
+_020DF480:
+ cmp r2, #0x0
+ add r3, r1, r2
+ add r12, r0, r2
+ bxeq lr
+_020DF490:
+ ldrsb r1, [r3, #-0x1]!
+ subs r2, r2, #0x1
+ strb r1, [r12, #-0x1]!
+ bne _020DF490
+ bx lr
+ arm_func_end memmove
+
+ arm_func_start memset
+memset: ; 0x020DF4A4
+ stmdb sp!, {r4,lr}
+ mov r4, r0
+ bl __fill_mem
+ mov r0, r4
+ ldmia sp!, {r4,pc}
+ arm_func_end memset
+
+ arm_func_start memchr
+memchr:
+ cmp r2, #0x0
+ and r3, r1, #0xff
+ beq _020DF4DC
+_020DF4C4:
+ ldrb r1, [r0], #0x1
+ cmp r1, r3
+ subeq r0, r0, #0x1
+ bxeq lr
+ subs r2, r2, #0x1
+ bne _020DF4C4
+_020DF4DC:
+ mov r0, #0x0
+ bx lr
+ arm_func_end memchr
+
+ arm_func_start __memrchr
+__memrchr: ; 0x020DF4E4
+ cmp r2, #0x0
+ and r3, r1, #0xff
+ add r0, r0, r2
+ beq _020DF508
+_020DF4F4:
+ ldrb r1, [r0, #-0x1]!
+ cmp r1, r3
+ bxeq lr
+ subs r2, r2, #0x1
+ bne _020DF4F4
+_020DF508:
+ mov r0, #0x0
+ bx lr
+ arm_func_end __memrchr
+
+ arm_func_start memcmp
+memcmp: ; 0x020DF510
+ cmp r2, #0x0
+ beq _020DF548
+_020DF518:
+ ldrb r12, [r0], #0x1
+ ldrb r3, [r1], #0x1
+ cmp r12, r3
+ beq _020DF540
+ ldrb r2, [r0, #-0x1]
+ ldrb r0, [r1, #-0x1]
+ cmp r2, r0
+ mvncc r0, #0x0
+ movcs r0, #0x1
+ bx lr
+_020DF540:
+ subs r2, r2, #0x1
+ bne _020DF518
+_020DF548:
+ mov r0, #0x0
+ bx lr
+ arm_func_end memcmp
diff --git a/arm9/asm/MSL_mem_funcs.s b/arm9/asm/MSL_mem_funcs.s new file mode 100644 index 00000000..82dad866 --- /dev/null +++ b/arm9/asm/MSL_mem_funcs.s @@ -0,0 +1,61 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start __fill_mem
+__fill_mem: ; 0x020DF550
+ cmp r2, #0x20
+ and r3, r1, #0xff
+ blo _020DF5E4
+ rsb r1, r0, #0x0
+ ands r12, r1, #0x3
+ beq _020DF57C
+ sub r2, r2, r12
+ and r1, r3, #0xff
+_020DF570:
+ strb r1, [r0], #0x1
+ subs r12, r12, #0x1
+ bne _020DF570
+_020DF57C:
+ cmp r3, #0x0
+ beq _020DF594
+ mov r1, r3, lsl #0x10
+ orr r1, r1, r3, lsl #0x18
+ orr r1, r1, r3, lsl #0x8
+ orr r3, r3, r1
+_020DF594:
+ movs r1, r2, lsr #0x5
+ beq _020DF5C8
+_020DF59C:
+ str r3, [r0, #0x0]
+ str r3, [r0, #0x4]
+ str r3, [r0, #0x8]
+ str r3, [r0, #0xc]
+ str r3, [r0, #0x10]
+ str r3, [r0, #0x14]
+ str r3, [r0, #0x18]
+ str r3, [r0, #0x1c]
+ add r0, r0, #0x20
+ subs r1, r1, #0x1
+ bne _020DF59C
+_020DF5C8:
+ and r1, r2, #0x1f
+ movs r1, r1, lsr #0x2
+ beq _020DF5E0
+_020DF5D4:
+ str r3, [r0], #0x4
+ subs r1, r1, #0x1
+ bne _020DF5D4
+_020DF5E0:
+ and r2, r2, #0x3
+_020DF5E4:
+ cmp r2, #0x0
+ bxeq lr
+ and r1, r3, #0xff
+_020DF5F0:
+ strb r1, [r0], #0x1
+ subs r2, r2, #0x1
+ bne _020DF5F0
+ bx lr
+ arm_func_end __fill_mem
diff --git a/arm9/asm/MSL_printf.s b/arm9/asm/MSL_printf.s new file mode 100644 index 00000000..b33b3841 --- /dev/null +++ b/arm9/asm/MSL_printf.s @@ -0,0 +1,2573 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern OSi_ThreadInfo
+ .extern __cs_id
+ .extern __cs_ref
+ .extern __cs
+ .extern __files
+ .extern memchr
+ .extern fwide
+ .extern fabs
+ .extern __msl_digit
+
+ .data
+ .global UNK_02106DA0
+UNK_02106DA0: ; 0x02106DA0
+ .byte 0x30, 0x78, 0x30, 0x70, 0x30, 0x00, 0x00, 0x00
+ .size UNK_02106DA0,.-UNK_02106DA0
+
+ .global UNK_02106DA8
+UNK_02106DA8: ; 0x02106DA8
+ .asciz "-INF"
+ .size UNK_02106DA8,.-UNK_02106DA8
+
+ .balign 4, 0
+ .global UNK_02106DB0
+UNK_02106DB0: ; 0x02106DB0
+ .asciz "-inf"
+ .size UNK_02106DB0,.-UNK_02106DB0
+
+ .balign 4, 0
+ .global UNK_02106DB8
+UNK_02106DB8: ; 0x02106DB8
+ .asciz "INF"
+ .size UNK_02106DB8,.-UNK_02106DB8
+
+ .balign 4, 0
+ .global UNK_02106DBC
+UNK_02106DBC: ; 0x02106DBC
+ .asciz "inf"
+ .size UNK_02106DBC,.-UNK_02106DBC
+
+ .balign 4, 0
+ .global UNK_02106DC0
+UNK_02106DC0: ; 0x02106DC0
+ .asciz "-NAN"
+ .size UNK_02106DC0,.-UNK_02106DC0
+
+ .balign 4, 0
+ .global UNK_02106DC8
+UNK_02106DC8: ; 0x02106DC8
+ .asciz "-nan"
+ .size UNK_02106DC8,.-UNK_02106DC8
+
+ .balign 4, 0
+ .global UNK_02106DD0
+UNK_02106DD0: ; 0x02106DD0
+ .asciz "NAN"
+ .size UNK_02106DD0,.-UNK_02106DD0
+
+ .balign 4, 0
+ .global UNK_02106DD4
+UNK_02106DD4: ; 0x02106DD4
+ .asciz "nan"
+ .size UNK_02106DD4,.-UNK_02106DD4
+
+ .balign 4, 0
+ .global UNK_02106DD8
+UNK_02106DD8: ; 0x02106DD8
+ .byte 0x00, 0x00, 0x00, 0x00
+ .size UNK_02106DD8,.-UNK_02106DD8
+
+ .global UNK_02106DDC
+UNK_02106DDC: ; 0x02106DDC
+ .byte 0x00, 0x00, 0x00, 0x00
+ .size UNK_02106DDC,.-UNK_02106DDC
+
+ .text
+
+ local_arm_func_start parse_format
+parse_format: ; 0x020DF600
+ stmdb sp!, {r4-r8,lr}
+ sub sp, sp, #0x10
+ ldrsb r3, [r0, #0x1]
+ mov r4, #0x0
+ mov r5, #0x1
+ mov lr, r2
+ strb r5, [sp, #0x0]
+ strb r4, [sp, #0x1]
+ strb r4, [sp, #0x2]
+ strb r4, [sp, #0x3]
+ strb r4, [sp, #0x4]
+ str r4, [sp, #0x8]
+ str r4, [sp, #0xc]
+ cmp r3, #0x25
+ add r12, r0, #0x1
+ bne _020DF65C
+ add r0, sp, #0x0
+ strb r3, [sp, #0x5]
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add sp, sp, #0x10
+ add r0, r12, #0x1
+ ldmia sp!, {r4-r8,pc}
+_020DF65C:
+ mov r2, #0x2
+ mov r0, r4
+ mov r5, r2
+ mov r6, r4
+ mov r7, #0x1
+_020DF670:
+ mov r8, r7
+ cmp r3, #0x2b
+ bgt _020DF6A0
+ bge _020DF6C8
+ cmp r3, #0x23
+ bgt _020DF6F8
+ cmp r3, #0x20
+ blt _020DF6F8
+ beq _020DF6D0
+ cmp r3, #0x23
+ beq _020DF6E0
+ b _020DF6F8
+_020DF6A0:
+ cmp r3, #0x30
+ bgt _020DF6F8
+ cmp r3, #0x2d
+ blt _020DF6F8
+ beq _020DF6C0
+ cmp r3, #0x30
+ beq _020DF6E8
+ b _020DF6F8
+_020DF6C0:
+ strb r6, [sp, #0x0]
+ b _020DF6FC
+_020DF6C8:
+ strb r7, [sp, #0x1]
+ b _020DF6FC
+_020DF6D0:
+ ldrb r4, [sp, #0x1]
+ cmp r4, #0x1
+ strneb r5, [sp, #0x1]
+ b _020DF6FC
+_020DF6E0:
+ strb r7, [sp, #0x3]
+ b _020DF6FC
+_020DF6E8:
+ ldrb r4, [sp, #0x0]
+ cmp r4, #0x0
+ strneb r2, [sp, #0x0]
+ b _020DF6FC
+_020DF6F8:
+ mov r8, r0
+_020DF6FC:
+ cmp r8, #0x0
+ ldrnesb r3, [r12, #0x1]!
+ bne _020DF670
+ cmp r3, #0x2a
+ bne _020DF744
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x4
+ str r0, [r1, #0x0]
+ ldr r0, [r0, #-0x4]
+ str r0, [sp, #0x8]
+ cmp r0, #0x0
+ bge _020DF73C
+ rsb r0, r0, #0x0
+ mov r2, #0x0
+ strb r2, [sp, #0x0]
+ str r0, [sp, #0x8]
+_020DF73C:
+ ldrsb r3, [r12, #0x1]!
+ b _020DF794
+_020DF744:
+ ldr r4, _020DFB88 ; =__msl_digit
+ mov r5, #0x0
+ mov r0, #0xa
+ b _020DF768
+_020DF754:
+ ldr r2, [sp, #0x8]
+ sub r3, r3, #0x30
+ mla r6, r2, r0, r3
+ ldrsb r3, [r12, #0x1]!
+ str r6, [sp, #0x8]
+_020DF768:
+ cmp r3, #0x0
+ blt _020DF778
+ cmp r3, #0x80
+ blt _020DF780
+_020DF778:
+ mov r2, r5
+ b _020DF78C
+_020DF780:
+ mov r2, r3, lsl #0x1
+ ldrh r2, [r4, r2]
+ and r2, r2, #0x8
+_020DF78C:
+ cmp r2, #0x0
+ bne _020DF754
+_020DF794:
+ ldr r2, [sp, #0x8]
+ ldr r0, _020DFB8C ; =0x000001FD
+ cmp r2, r0
+ ble _020DF7C4
+ mov r1, #0xff
+ add r0, sp, #0x0
+ strb r1, [sp, #0x5]
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add sp, sp, #0x10
+ add r0, r12, #0x1
+ ldmia sp!, {r4-r8,pc}
+_020DF7C4:
+ cmp r3, #0x2e
+ bne _020DF858
+ ldrsb r3, [r12, #0x1]!
+ mov r0, #0x1
+ strb r0, [sp, #0x2]
+ cmp r3, #0x2a
+ bne _020DF808
+ ldr r0, [r1, #0x0]
+ add r0, r0, #0x4
+ str r0, [r1, #0x0]
+ ldr r0, [r0, #-0x4]
+ ldrsb r3, [r12, #0x1]!
+ str r0, [sp, #0xc]
+ cmp r0, #0x0
+ movlt r0, #0x0
+ strltb r0, [sp, #0x2]
+ b _020DF858
+_020DF808:
+ ldr r2, _020DFB88 ; =__msl_digit
+ mov r4, #0x0
+ mov r0, #0xa
+ b _020DF82C
+_020DF818:
+ ldr r1, [sp, #0xc]
+ sub r3, r3, #0x30
+ mla r5, r1, r0, r3
+ ldrsb r3, [r12, #0x1]!
+ str r5, [sp, #0xc]
+_020DF82C:
+ cmp r3, #0x0
+ blt _020DF83C
+ cmp r3, #0x80
+ blt _020DF844
+_020DF83C:
+ mov r1, r4
+ b _020DF850
+_020DF844:
+ mov r1, r3, lsl #0x1
+ ldrh r1, [r2, r1]
+ and r1, r1, #0x8
+_020DF850:
+ cmp r1, #0x0
+ bne _020DF818
+_020DF858:
+ cmp r3, #0x6c
+ mov r0, #0x1
+ bgt _020DF890
+ cmp r3, #0x68
+ blt _020DF884
+ beq _020DF8AC
+ cmp r3, #0x6a
+ beq _020DF8F8
+ cmp r3, #0x6c
+ beq _020DF8C8
+ b _020DF91C
+_020DF884:
+ cmp r3, #0x4c
+ beq _020DF8EC
+ b _020DF91C
+_020DF890:
+ cmp r3, #0x74
+ bgt _020DF8A0
+ beq _020DF904
+ b _020DF91C
+_020DF8A0:
+ cmp r3, #0x7a
+ beq _020DF910
+ b _020DF91C
+_020DF8AC:
+ ldrsb r1, [r12, #0x1]
+ mov r2, #0x2
+ strb r2, [sp, #0x4]
+ cmp r1, #0x68
+ streqb r0, [sp, #0x4]
+ ldreqsb r3, [r12, #0x1]!
+ b _020DF920
+_020DF8C8:
+ ldrsb r1, [r12, #0x1]
+ mov r2, #0x3
+ strb r2, [sp, #0x4]
+ cmp r1, #0x6c
+ bne _020DF920
+ mov r1, #0x4
+ strb r1, [sp, #0x4]
+ ldrsb r3, [r12, #0x1]!
+ b _020DF920
+_020DF8EC:
+ mov r1, #0x9
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF8F8:
+ mov r1, #0x6
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF904:
+ mov r1, #0x8
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF910:
+ mov r1, #0x7
+ strb r1, [sp, #0x4]
+ b _020DF920
+_020DF91C:
+ mov r0, #0x0
+_020DF920:
+ cmp r0, #0x0
+ ldrnesb r3, [r12, #0x1]!
+ strb r3, [sp, #0x5]
+ cmp r3, #0x61
+ bgt _020DF974
+ bge _020DFA5C
+ cmp r3, #0x47
+ bgt _020DF968
+ subs r0, r3, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020DFB68
+ b _020DFA5C ; case 65
+ b _020DFB68 ; case 66
+ b _020DFB68 ; case 67
+ b _020DFB68 ; case 68
+ b _020DFAA4 ; case 69
+ b _020DFA24 ; case 70
+ b _020DFA94 ; case 71
+_020DF968:
+ cmp r3, #0x58
+ beq _020DF9E8
+ b _020DFB68
+_020DF974:
+ cmp r3, #0x63
+ bgt _020DF984
+ beq _020DFB04
+ b _020DFB68
+_020DF984:
+ sub r0, r3, #0x64
+ cmp r0, #0x14
+ addls pc, pc, r0, lsl #0x2
+ b _020DFB68
+ b _020DF9E8 ; case 100
+ b _020DFAA4 ; case 101
+ b _020DFA24 ; case 102
+ b _020DFA94 ; case 103
+ b _020DFB68 ; case 104
+ b _020DF9E8 ; case 105
+ b _020DFB68 ; case 106
+ b _020DFB68 ; case 107
+ b _020DFB68 ; case 108
+ b _020DFB68 ; case 109
+ b _020DFB54 ; case 110
+ b _020DF9E8 ; case 111
+ b _020DFAE0 ; case 112
+ b _020DFB68 ; case 113
+ b _020DFB68 ; case 114
+ b _020DFB30 ; case 115
+ b _020DFB68 ; case 116
+ b _020DF9E8 ; case 117
+ b _020DFB68 ; case 118
+ b _020DFB68 ; case 119
+ b _020DF9E8 ; case 120
+_020DF9E8:
+ ldrb r0, [sp, #0x4]
+ cmp r0, #0x9
+ moveq r0, #0xff
+ streqb r0, [sp, #0x5]
+ beq _020DFB70
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+ beq _020DFB70
+ ldrb r0, [sp, #0x0]
+ cmp r0, #0x2
+ moveq r0, #0x1
+ streqb r0, [sp, #0x0]
+ b _020DFB70
+_020DFA24:
+ 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
+ moveq r0, #0xd
+ streq r0, [sp, #0xc]
+ 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]
+ b _020DFB70
+_020DFA94:
+ 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
+ moveq r0, #0x5
+ streqb r0, [sp, #0x4]
+ beq _020DFB70
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x0
+ cmpeq r1, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x5]
+ b _020DFB70
+_020DFB30:
+ 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]
+_020DFB70:
+ add r0, sp, #0x0
+ ldmia r0, {r0-r3}
+ stmia lr, {r0-r3}
+ add r0, r12, #0x1
+ add sp, sp, #0x10
+ ldmia sp!, {r4-r8,pc}
+ .balign 4
+_020DFB88: .word __msl_digit
+_020DFB8C: .word 0x000001FD
+ arm_func_end parse_format
+
+ arm_func_start long2str
+long2str: ; 0x020DFB90
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x10
+ movs r10, r0
+ mov r0, #0x0
+ mov r5, r1
+ str r0, [sp, #0xc]
+ ldr r7, [sp, #0x4c]
+ mov r6, r0
+ strb r0, [r5, #-0x1]!
+ ldrb r0, [sp, #0x43]
+ str r1, [sp, #0x0]
+ ldrb r8, [sp, #0x45]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x48]
+ ldrb r11, [sp, #0x41]
+ str r0, [sp, #0x8]
+ cmpeq r7, #0x0
+ bne _020DFC04
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020DFBF0
+ cmp r8, #0x6f
+ beq _020DFC04
+_020DFBF0:
+ add sp, sp, #0x10
+ mov r0, r5
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DFC04:
+ cmp r8, #0x69
+ bgt _020DFC2C
+ bge _020DFC60
+ cmp r8, #0x58
+ bgt _020DFC20
+ beq _020DFC8C
+ b _020DFC94
+_020DFC20:
+ cmp r8, #0x64
+ beq _020DFC60
+ b _020DFC94
+_020DFC2C:
+ cmp r8, #0x6f
+ bgt _020DFC40
+ moveq r4, #0x8
+ moveq r11, #0x0
+ b _020DFC94
+_020DFC40:
+ cmp r8, #0x78
+ bgt _020DFC94
+ cmp r8, #0x75
+ blt _020DFC94
+ beq _020DFC80
+ cmp r8, #0x78
+ beq _020DFC8C
+ b _020DFC94
+_020DFC60:
+ cmp r10, #0x0
+ mov r4, #0xa
+ bge _020DFC94
+ mov r0, #0x1
+ cmp r10, #0x80000000
+ rsbne r10, r10, #0x0
+ str r0, [sp, #0xc]
+ b _020DFC94
+_020DFC80:
+ mov r4, #0xa
+ mov r11, #0x0
+ b _020DFC94
+_020DFC8C:
+ mov r4, #0x10
+ mov r11, #0x0
+_020DFC94:
+ mov r0, r10
+ mov r1, r4
+ bl _u32_div_f
+ mov r9, r1
+ mov r0, r10
+ mov r1, r4
+ bl _u32_div_f
+ cmp r9, #0xa
+ mov r10, r0
+ addlt r9, r9, #0x30
+ blt _020DFCCC
+ cmp r8, #0x78
+ addeq r9, r9, #0x57
+ addne r9, r9, #0x37
+_020DFCCC:
+ cmp r10, #0x0
+ strb r9, [r5, #-0x1]!
+ add r6, r6, #0x1
+ bne _020DFC94
+ cmp r4, #0x8
+ bne _020DFD00
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrnesb r0, [r5, #0x0]
+ cmpne r0, #0x30
+ movne r0, #0x30
+ strneb r0, [r5, #-0x1]!
+ addne r6, r6, #0x1
+_020DFD00:
+ ldrb r0, [sp, #0x40]
+ cmp r0, #0x2
+ bne _020DFD34
+ ldr r0, [sp, #0xc]
+ ldr r7, [sp, #0x8]
+ cmp r0, #0x0
+ cmpeq r11, #0x0
+ subne r7, r7, #0x1
+ cmp r4, #0x10
+ bne _020DFD34
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ subne r7, r7, #0x2
+_020DFD34:
+ ldr r0, [sp, #0x0]
+ sub r1, r0, r5
+ ldr r0, _020DFDD8 ; =0x000001FD
+ add r1, r7, r1
+ cmp r1, r0
+ addgt sp, sp, #0x10
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ cmp r6, r7
+ bge _020DFD78
+ mov r0, #0x30
+_020DFD68:
+ add r6, r6, #0x1
+ cmp r6, r7
+ strb r0, [r5, #-0x1]!
+ blt _020DFD68
+_020DFD78:
+ cmp r4, #0x10
+ bne _020DFD94
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x30
+ strneb r8, [r5, #-0x1]
+ strneb r0, [r5, #-0x2]!
+_020DFD94:
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r5, #-0x1]!
+ bne _020DFDC4
+ cmp r11, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r5, #-0x1]!
+ beq _020DFDC4
+ cmp r11, #0x2
+ moveq r0, #0x20
+ streqb r0, [r5, #-0x1]!
+_020DFDC4:
+ mov r0, r5
+ add sp, sp, #0x10
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020DFDD8: .word 0x000001FD
+ arm_func_end long2str
+
+ arm_func_start longlong2str
+longlong2str: ; 0x020DFDDC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x18
+ mov r9, r1
+ mov r1, #0x0
+ mov r10, r0
+ mov r6, r2
+ mov r0, r1
+ strb r0, [r6, #-0x1]!
+ ldr r0, [sp, #0x58]
+ cmp r9, #0x0
+ str r0, [sp, #0x10]
+ ldrb r0, [sp, #0x4f]
+ cmpeq r10, #0x0
+ str r2, [sp, #0x0]
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x54]
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x8]
+ ldrb r0, [sp, #0x4d]
+ mov r7, r1
+ ldrb r8, [sp, #0x51]
+ str r0, [sp, #0xc]
+ ldreq r0, [sp, #0x10]
+ cmpeq r0, #0x0
+ bne _020DFE6C
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020DFE58
+ cmp r8, #0x6f
+ beq _020DFE6C
+_020DFE58:
+ add sp, sp, #0x18
+ mov r0, r6
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020DFE6C:
+ cmp r8, #0x69
+ bgt _020DFE94
+ bge _020DFEC4
+ cmp r8, #0x58
+ bgt _020DFE88
+ beq _020DFF18
+ b _020DFF24
+_020DFE88:
+ cmp r8, #0x64
+ beq _020DFEC4
+ b _020DFF24
+_020DFE94:
+ cmp r8, #0x6f
+ bgt _020DFEA4
+ beq _020DFEF8
+ b _020DFF24
+_020DFEA4:
+ cmp r8, #0x78
+ bgt _020DFF24
+ cmp r8, #0x75
+ blt _020DFF24
+ beq _020DFF08
+ cmp r8, #0x78
+ beq _020DFF18
+ b _020DFF24
+_020DFEC4:
+ subs r0, r10, #0x0
+ sbcs r0, r9, #0x0
+ mov r11, #0xa
+ mov r5, #0x0
+ bge _020DFF24
+ cmp r9, #0x80000000
+ cmpeq r10, r5
+ beq _020DFEEC
+ rsbs r10, r10, #0x0
+ rsc r9, r9, #0x0
+_020DFEEC:
+ mov r0, #0x1
+ str r0, [sp, #0x14]
+ b _020DFF24
+_020DFEF8:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0x8
+ b _020DFF24
+_020DFF08:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0xa
+ b _020DFF24
+_020DFF18:
+ mov r5, #0x0
+ str r5, [sp, #0xc]
+ mov r11, #0x10
+_020DFF24:
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ mov r3, r5
+ bl _ull_mod
+ mov r4, r0
+ mov r0, r10
+ mov r1, r9
+ mov r2, r11
+ mov r3, r5
+ bl _ll_udiv
+ mov r10, r0
+ cmp r4, #0xa
+ mov r9, r1
+ addlt r0, r4, #0x30
+ blt _020DFF70
+ cmp r8, #0x78
+ addeq r0, r4, #0x57
+ addne r0, r4, #0x37
+_020DFF70:
+ strb r0, [r6, #-0x1]!
+ mov r0, #0x0
+ cmp r9, r0
+ cmpeq r10, r0
+ add r7, r7, #0x1
+ bne _020DFF24
+ cmp r5, #0x0
+ cmpeq r11, #0x8
+ bne _020DFFB0
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrnesb r0, [r6, #0x0]
+ cmpne r0, #0x30
+ movne r0, #0x30
+ strneb r0, [r6, #-0x1]!
+ addne r7, r7, #0x1
+_020DFFB0:
+ ldrb r0, [sp, #0x4c]
+ cmp r0, #0x2
+ bne _020E0000
+ ldr r0, [sp, #0x8]
+ str r0, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0xc]
+ cmpeq r0, #0x0
+ ldrne r0, [sp, #0x10]
+ subne r0, r0, #0x1
+ strne r0, [sp, #0x10]
+ cmp r5, #0x0
+ cmpeq r11, #0x10
+ bne _020E0000
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x10]
+ subne r0, r0, #0x2
+ strne r0, [sp, #0x10]
+_020E0000:
+ ldr r0, [sp, #0x0]
+ ldr r1, _020E00B8 ; =0x000001FD
+ sub r2, r0, r6
+ ldr r0, [sp, #0x10]
+ add r0, r0, r2
+ cmp r0, r1
+ addgt sp, sp, #0x18
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ ldr r0, [sp, #0x10]
+ cmp r7, r0
+ bge _020E0050
+ mov r1, #0x30
+_020E003C:
+ ldr r0, [sp, #0x10]
+ add r7, r7, #0x1
+ cmp r7, r0
+ strb r1, [r6, #-0x1]!
+ blt _020E003C
+_020E0050:
+ cmp r5, #0x0
+ cmpeq r11, #0x10
+ bne _020E0070
+ ldr r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x30
+ strneb r8, [r6, #-0x1]
+ strneb r0, [r6, #-0x2]!
+_020E0070:
+ ldr r0, [sp, #0x14]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r6, #-0x1]!
+ bne _020E00A4
+ ldr r0, [sp, #0xc]
+ cmp r0, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r6, #-0x1]!
+ beq _020E00A4
+ cmp r0, #0x2
+ moveq r0, #0x20
+ streqb r0, [r6, #-0x1]!
+_020E00A4:
+ mov r0, r6
+ add sp, sp, #0x18
+ ldmia sp!, {r3-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E00B8: .word 0x000001FD
+ arm_func_end longlong2str
+
+ arm_func_start double2hex
+double2hex: ; 0x020E00BC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3-r10,lr}
+ sub sp, sp, #0x44
+ ldr r7, [sp, #0x80]
+ ldr r0, _020E056C ; =0x000001FD
+ mov r8, r2
+ cmp r7, r0
+ ldrb r6, [sp, #0x79]
+ ldrb r5, [sp, #0x77]
+ ldrb r4, [sp, #0x75]
+ ldr r1, [sp, #0x68]
+ ldr r2, [sp, #0x6c]
+ addgt sp, sp, #0x44
+ movgt r0, #0x0
+ ldmgtia sp!, {r3-r10,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ mov r10, #0x0
+ mov r9, #0x20
+ add r0, sp, #0x8
+ add r3, sp, #0xc
+ strb r10, [sp, #0x8]
+ strh r9, [sp, #0xa]
+ bl __num2dec_internal2
+ ldr r0, [sp, #0x68]
+ ldr r1, [sp, #0x6c]
+ bl fabs
+ mov r2, r0
+ mov r0, r10
+ mov r3, r1
+ mov r1, r0
+ bl _deq
+ bne _020E0188
+ ldr r3, _020E0570 ; =UNK_02106DA0
+ sub r0, r8, #0x6
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ add sp, sp, #0x44
+ strb r2, [r8, #-0x6]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r2, [r3, #0x4]
+ ldrb r1, [r3, #0x5]
+ strb r2, [r0, #0x4]
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0188:
+ ldrb r0, [sp, #0x11]
+ cmp r0, #0x49
+ bne _020E0298
+ ldrsb r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020E0224
+ cmp r6, #0x41
+ sub r0, r8, #0x5
+ bne _020E01E8
+ ldr r3, _020E0574 ; =UNK_02106DA8
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E01E8:
+ ldr r3, _020E0578 ; =UNK_02106DB0
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0224:
+ cmp r6, #0x41
+ sub r0, r8, #0x4
+ bne _020E0264
+ ldr r3, _020E057C ; =UNK_02106DB8
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0264:
+ ldr r3, _020E0580 ; =UNK_02106DBC
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0298:
+ cmp r0, #0x4e
+ bne _020E03A4
+ ldrsb r0, [sp, #0xc]
+ cmp r0, #0x0
+ beq _020E0330
+ cmp r6, #0x41
+ sub r0, r8, #0x5
+ bne _020E02F4
+ ldr r3, _020E0584 ; =UNK_02106DC0
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E02F4:
+ ldr r3, _020E0588 ; =UNK_02106DC8
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0330:
+ cmp r6, #0x41
+ sub r0, r8, #0x4
+ bne _020E0370
+ ldr r3, _020E058C ; =UNK_02106DD0
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0370:
+ ldr r3, _020E0590 ; =UNK_02106DD4
+ add sp, sp, #0x44
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E03A4:
+ mov r3, r10
+ mov r1, #0x1
+ mov r0, #0x64
+ add r9, sp, #0x68
+ strb r1, [sp, #0x34]
+ strb r1, [sp, #0x35]
+ strb r3, [sp, #0x36]
+ strb r3, [sp, #0x37]
+ strb r3, [sp, #0x38]
+ str r3, [sp, #0x3c]
+ str r1, [sp, #0x40]
+ strb r0, [sp, #0x39]
+_020E03D4:
+ rsb r1, r3, #0x7
+ ldrsb r2, [r9, r3]
+ ldrsb r0, [r9, r1]
+ strb r0, [r9, r3]
+ add r3, r3, #0x1
+ strb r2, [r9, r1]
+ cmp r3, #0x4
+ blt _020E03D4
+ ldrb r0, [sp, #0x69]
+ ldrb r1, [sp, #0x68]
+ ldr sb, _020E0594 ; =0x000007FF
+ mov r0, r0, lsl #0x11
+ orr r1, r0, r1, lsl #0x19
+ add r0, sp, #0x34
+ and lr, r9, r1, lsr #0x15
+ sub r12, sp, #0x8
+ ldmia r0, {r0-r3}
+ stmia r12, {r0-r3}
+ rsb r0, r9, #0x400
+ mov r1, r8
+ add r0, lr, r0
+ ldmia r12, {r2-r3}
+ bl long2str
+ cmp r6, #0x61
+ moveq r1, #0x70
+ movne r1, #0x50
+ strb r1, [r0, #-0x1]!
+ mov r1, r7, lsl #0x2
+ mov lr, r7
+ cmp r7, #0x1
+ add r8, r1, #0xb
+ add r12, sp, #0x68
+ blt _020E04E4
+ mov r9, #0x30
+_020E045C:
+ cmp r8, #0x40
+ bge _020E04CC
+ ldrb r1, [r12, r8, asr #0x3]
+ and r2, r8, #0x7
+ rsb r3, r2, #0x7
+ mov r2, r1, asr r3
+ sub r10, r8, #0x4
+ bic r1, r8, #0x7
+ bic r10, r10, #0x7
+ cmp r1, r10
+ add r10, r12, r8, asr #0x3
+ and r1, r2, #0xff
+ beq _020E04A0
+ ldrb r2, [r10, #-0x1]
+ mov r2, r2, lsl #0x8
+ orr r1, r1, r2, asr r3
+ and r1, r1, #0xff
+_020E04A0:
+ and r1, r1, #0xf
+ cmp r1, #0xa
+ addcc r1, r1, #0x30
+ andcc r1, r1, #0xff
+ blo _020E04D0
+ cmp r6, #0x61
+ addeq r1, r1, #0x57
+ andeq r1, r1, #0xff
+ addne r1, r1, #0x37
+ andne r1, r1, #0xff
+ b _020E04D0
+_020E04CC:
+ mov r1, r9
+_020E04D0:
+ sub lr, lr, #0x1
+ cmp lr, #0x1
+ strb r1, [r0, #-0x1]!
+ sub r8, r8, #0x4
+ bge _020E045C
+_020E04E4:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r1, #0x2e
+ strneb r1, [r0, #-0x1]!
+ mov r1, #0x31
+ strb r1, [r0, #-0x1]
+ cmp r6, #0x61
+ moveq r1, #0x78
+ movne r1, #0x58
+ strb r1, [r0, #-0x2]!
+ mov r1, #0x30
+ strb r1, [r0, #-0x1]!
+ ldrsb r1, [sp, #0xc]
+ cmp r1, #0x0
+ movne r1, #0x2d
+ strneb r1, [r0, #-0x1]!
+ addne sp, sp, #0x44
+ ldmneia sp!, {r3-r10,lr}
+ addne sp, sp, #0x10
+ bxne lr
+ cmp r4, #0x1
+ moveq r1, #0x2b
+ streqb r1, [r0, #-0x1]!
+ addeq sp, sp, #0x44
+ ldmeqia sp!, {r3-r10,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ cmp r4, #0x2
+ moveq r1, #0x20
+ streqb r1, [r0, #-0x1]!
+ add sp, sp, #0x44
+ ldmia sp!, {r3-r10,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E056C: .word 0x000001FD
+_020E0570: .word UNK_02106DA0
+_020E0574: .word UNK_02106DA8
+_020E0578: .word UNK_02106DB0
+_020E057C: .word UNK_02106DB8
+_020E0580: .word UNK_02106DBC
+_020E0584: .word UNK_02106DC0
+_020E0588: .word UNK_02106DC8
+_020E058C: .word UNK_02106DD0
+_020E0590: .word UNK_02106DD4
+_020E0594: .word 0x000007FF
+ arm_func_end double2hex
+
+ arm_func_start round_decimal
+round_decimal: ; 0x020E0598
+ stmdb sp!, {r4,lr}
+ cmp r1, #0x0
+ bge _020E05C0
+_020E05A4:
+ mov r1, #0x0
+ strh r1, [r0, #0x2]
+ mov r1, #0x1
+ strb r1, [r0, #0x4]
+ mov r1, #0x30
+ strb r1, [r0, #0x5]
+ ldmia sp!, {r4,pc}
+_020E05C0:
+ ldrb lr, [r0, #0x4]
+ cmp r1, lr
+ ldmgeia sp!, {r4,pc}
+ 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_end round_decimal
+
+ arm_func_start float2str
+float2str: ; 0x020E06BC
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x2c
+ ldr r7, [sp, #0x68]
+ ldr r3, _020E0DF4 ; =0x000001FD
+ ldrb r6, [sp, #0x61]
+ ldrb r5, [sp, #0x5f]
+ ldrb r4, [sp, #0x5d]
+ cmp r7, r3
+ mov r10, r0
+ mov r8, r1
+ mov r9, r2
+ addgt sp, sp, #0x2c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ mov r12, #0x0
+ mov r11, #0x20
+ add r0, sp, #0x0
+ add r3, sp, #0x4
+ mov r1, r10
+ mov r2, r8
+ strb r12, [sp, #0x0]
+ strh r11, [sp, #0x2]
+ bl __num2dec_internal2
+ ldrb r0, [sp, #0x8]
+ add r1, sp, #0x9
+ add r0, r1, r0
+ b _020E074C
+_020E0734:
+ ldrb r2, [sp, #0x8]
+ ldrsh r1, [sp, #0x6]
+ sub r2, r2, #0x1
+ add r1, r1, #0x1
+ strb r2, [sp, #0x8]
+ strh r1, [sp, #0x6]
+_020E074C:
+ ldrb r1, [sp, #0x8]
+ cmp r1, #0x1
+ bls _020E0764
+ ldrsb r1, [r0, #-0x1]!
+ cmp r1, #0x30
+ beq _020E0734
+_020E0764:
+ ldrb r0, [sp, #0x9]
+ cmp r0, #0x30
+ beq _020E0784
+ cmp r0, #0x49
+ beq _020E0790
+ cmp r0, #0x4e
+ beq _020E08F0
+ b _020E0A44
+_020E0784:
+ mov r0, #0x0
+ strh r0, [sp, #0x6]
+ b _020E0A44
+_020E0790:
+ mov r2, #0x0
+ mov r0, r10
+ mov r1, r8
+ mov r3, r2
+ bl _dls
+ bhs _020E0854
+ cmp r6, #0x0
+ sub r0, r9, #0x5
+ blt _020E07BC
+ cmp r6, #0x80
+ blt _020E07C4
+_020E07BC:
+ mov r1, #0x0
+ b _020E07D4
+_020E07C4:
+ ldr r1, _020E0DF8 ; =__msl_digit
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E07D4:
+ cmp r1, #0x0
+ beq _020E0818
+ ldr r3, _020E0DFC ; =UNK_02106DA8
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0818:
+ ldr r3, _020E0E00 ; =UNK_02106DB0
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0854:
+ cmp r6, #0x0
+ sub r0, r9, #0x4
+ blt _020E0868
+ cmp r6, #0x80
+ blt _020E0870
+_020E0868:
+ mov r1, #0x0
+ b _020E0880
+_020E0870:
+ ldr r1, _020E0DF8 ; =__msl_digit
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E0880:
+ cmp r1, #0x0
+ beq _020E08BC
+ ldr r3, _020E0E04 ; =UNK_02106DB8
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E08BC:
+ ldr r3, _020E0E08 ; =UNK_02106DBC
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E08F0:
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ beq _020E09A8
+ cmp r6, #0x0
+ sub r0, r9, #0x5
+ blt _020E0910
+ cmp r6, #0x80
+ blt _020E0918
+_020E0910:
+ mov r1, #0x0
+ b _020E0928
+_020E0918:
+ ldr r1, _020E0DF8 ; =__msl_digit
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E0928:
+ cmp r1, #0x0
+ beq _020E096C
+ ldr r3, _020E0E0C ; =UNK_02106DC0
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E096C:
+ ldr r3, _020E0E10 ; =UNK_02106DC8
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldrb r1, [r3, #0x4]
+ strb r1, [r0, #0x4]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E09A8:
+ cmp r6, #0x0
+ sub r0, r9, #0x4
+ blt _020E09BC
+ cmp r6, #0x80
+ blt _020E09C4
+_020E09BC:
+ mov r1, #0x0
+ b _020E09D4
+_020E09C4:
+ ldr r1, _020E0DF8 ; =__msl_digit
+ mov r2, r6, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x200
+_020E09D4:
+ cmp r1, #0x0
+ beq _020E0A10
+ ldr r3, _020E0E14 ; =UNK_02106DD0
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0A10:
+ ldr r3, _020E0E18 ; =UNK_02106DD4
+ add sp, sp, #0x2c
+ ldrb r2, [r3, #0x0]
+ ldrb r1, [r3, #0x1]
+ strb r2, [r0, #0x0]
+ strb r1, [r0, #0x1]
+ ldrb r2, [r3, #0x2]
+ ldrb r1, [r3, #0x3]
+ strb r2, [r0, #0x2]
+ strb r1, [r0, #0x3]
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0A44:
+ ldrb r0, [sp, #0x8]
+ ldrsh r1, [sp, #0x6]
+ sub r8, r9, #0x1
+ sub r0, r0, #0x1
+ add r0, r1, r0
+ strh r0, [sp, #0x6]
+ mov r0, #0x0
+ strb r0, [r8, #0x0]
+ cmp r6, #0x65
+ bgt _020E0A98
+ bge _020E0B24
+ cmp r6, #0x47
+ bgt _020E0DE0
+ cmp r6, #0x45
+ blt _020E0DE0
+ beq _020E0B24
+ cmp r6, #0x46
+ beq _020E0C6C
+ cmp r6, #0x47
+ beq _020E0AB0
+ b _020E0DE0
+_020E0A98:
+ cmp r6, #0x66
+ bgt _020E0AA8
+ beq _020E0C6C
+ b _020E0DE0
+_020E0AA8:
+ cmp r6, #0x67
+ bne _020E0DE0
+_020E0AB0:
+ ldrb r0, [sp, #0x8]
+ cmp r0, r7
+ ble _020E0AC8
+ add r0, sp, #0x4
+ mov r1, r7
+ bl round_decimal
+_020E0AC8:
+ ldrsh r2, [sp, #0x6]
+ mvn r0, #0x3
+ cmp r2, r0
+ blt _020E0AE0
+ cmp r2, r7
+ blt _020E0B00
+_020E0AE0:
+ cmp r5, #0x0
+ ldreqb r0, [sp, #0x8]
+ subne r7, r7, #0x1
+ subeq r7, r0, #0x1
+ cmp r6, #0x67
+ moveq r6, #0x65
+ movne r6, #0x45
+ b _020E0B24
+_020E0B00:
+ cmp r5, #0x0
+ addne r0, r2, #0x1
+ subne r7, r7, r0
+ bne _020E0C6C
+ ldrb r1, [sp, #0x8]
+ add r0, r2, #0x1
+ subs r7, r1, r0
+ movmi r7, #0x0
+ b _020E0C6C
+_020E0B24:
+ ldrb r0, [sp, #0x8]
+ add r1, r7, #0x1
+ cmp r0, r1
+ ble _020E0B3C
+ add r0, sp, #0x4
+ bl round_decimal
+_020E0B3C:
+ ldrsh lr, [sp, #0x6]
+ mov r11, #0x2b
+ mov r10, #0x0
+ cmp lr, #0x0
+ rsblt lr, lr, #0x0
+ movlt r11, #0x2d
+ ldr r3, _020E0E1C ; =0x66666667
+ mov r0, #0xa
+ b _020E0B90
+_020E0B60:
+ mov r1, lr, lsr #0x1f
+ smull r2, r12, r3, lr
+ add r12, r1, r12, asr #0x2
+ smull r1, r2, r0, r12
+ sub r12, lr, r1
+ add r1, r12, #0x30
+ strb r1, [r8, #-0x1]!
+ mov r2, lr
+ smull r1, lr, r3, r2
+ mov r1, r2, lsr #0x1f
+ add lr, r1, lr, asr #0x2
+ add r10, r10, #0x1
+_020E0B90:
+ cmp lr, #0x0
+ bne _020E0B60
+ cmp r10, #0x2
+ blt _020E0B60
+ strb r11, [r8, #-0x1]
+ strb r6, [r8, #-0x2]!
+ sub r1, r9, r8
+ ldr r0, _020E0DF4 ; =0x000001FD
+ add r1, r7, r1
+ cmp r1, r0
+ addgt sp, sp, #0x2c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ ldrb r1, [sp, #0x8]
+ add r0, r7, #0x1
+ cmp r1, r0
+ bge _020E0BFC
+ add r0, r7, #0x2
+ sub r0, r0, r1
+ subs r1, r0, #0x1
+ beq _020E0BFC
+ mov r0, #0x30
+_020E0BF0:
+ strb r0, [r8, #-0x1]!
+ subs r1, r1, #0x1
+ bne _020E0BF0
+_020E0BFC:
+ ldrb r1, [sp, #0x8]
+ add r0, sp, #0x9
+ add r2, r0, r1
+ subs r1, r1, #0x1
+ beq _020E0C20
+_020E0C10:
+ ldrsb r0, [r2, #-0x1]!
+ subs r1, r1, #0x1
+ strb r0, [r8, #-0x1]!
+ bne _020E0C10
+_020E0C20:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r0, #0x2e
+ strneb r0, [r8, #-0x1]!
+ ldrb r0, [sp, #0x9]
+ strb r0, [r8, #-0x1]!
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r8, #-0x1]!
+ bne _020E0DE0
+ cmp r4, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r8, #-0x1]!
+ beq _020E0DE0
+ cmp r4, #0x2
+ moveq r0, #0x20
+ streqb r0, [r8, #-0x1]!
+ b _020E0DE0
+_020E0C6C:
+ ldrsh r3, [sp, #0x6]
+ ldrb r2, [sp, #0x8]
+ sub r0, r2, r3
+ subs r1, r0, #0x1
+ movmi r1, #0x0
+ cmp r1, r7
+ ble _020E0CAC
+ sub r1, r1, r7
+ add r0, sp, #0x4
+ sub r1, r2, r1
+ bl round_decimal
+ ldrsh r3, [sp, #0x6]
+ ldrb r2, [sp, #0x8]
+ sub r0, r2, r3
+ subs r1, r0, #0x1
+ movmi r1, #0x0
+_020E0CAC:
+ adds r0, r3, #0x1
+ movmi r0, #0x0
+ ldr r3, _020E0DF4 ; =0x000001FD
+ add r6, r0, r1
+ cmp r6, r3
+ addgt sp, sp, #0x2c
+ movgt r0, #0x0
+ ldmgtia sp!, {r4-r11,lr}
+ addgt sp, sp, #0x10
+ bxgt lr
+ add r3, sp, #0x9
+ sub r6, r7, r1
+ cmp r6, #0x0
+ add r2, r3, r2
+ mov r9, #0x0
+ ble _020E0D00
+ mov r3, #0x30
+_020E0CF0:
+ add r9, r9, #0x1
+ cmp r9, r6
+ strb r3, [r8, #-0x1]!
+ blt _020E0CF0
+_020E0D00:
+ mov r6, #0x0
+ b _020E0D14
+_020E0D08:
+ ldrsb r3, [r2, #-0x1]!
+ add r6, r6, #0x1
+ strb r3, [r8, #-0x1]!
+_020E0D14:
+ cmp r6, r1
+ ldrltb r3, [sp, #0x8]
+ cmplt r6, r3
+ blt _020E0D08
+ cmp r6, r1
+ bge _020E0D40
+ mov r3, #0x30
+_020E0D30:
+ add r6, r6, #0x1
+ cmp r6, r1
+ strb r3, [r8, #-0x1]!
+ blt _020E0D30
+_020E0D40:
+ cmp r7, #0x0
+ cmpeq r5, #0x0
+ movne r1, #0x2e
+ strneb r1, [r8, #-0x1]!
+ cmp r0, #0x0
+ beq _020E0DA8
+ ldrb r1, [sp, #0x8]
+ mov r5, #0x0
+ sub r1, r0, r1
+ cmp r1, #0x0
+ ble _020E0D88
+ mov r3, #0x30
+_020E0D70:
+ strb r3, [r8, #-0x1]!
+ ldrb r1, [sp, #0x8]
+ add r5, r5, #0x1
+ sub r1, r0, r1
+ cmp r5, r1
+ blt _020E0D70
+_020E0D88:
+ cmp r5, r0
+ bge _020E0DB0
+_020E0D90:
+ ldrsb r1, [r2, #-0x1]!
+ add r5, r5, #0x1
+ cmp r5, r0
+ strb r1, [r8, #-0x1]!
+ blt _020E0D90
+ b _020E0DB0
+_020E0DA8:
+ mov r0, #0x30
+ strb r0, [r8, #-0x1]!
+_020E0DB0:
+ ldrsb r0, [sp, #0x4]
+ cmp r0, #0x0
+ movne r0, #0x2d
+ strneb r0, [r8, #-0x1]!
+ bne _020E0DE0
+ cmp r4, #0x1
+ moveq r0, #0x2b
+ streqb r0, [r8, #-0x1]!
+ beq _020E0DE0
+ cmp r4, #0x2
+ moveq r0, #0x20
+ streqb r0, [r8, #-0x1]!
+_020E0DE0:
+ mov r0, r8
+ add sp, sp, #0x2c
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E0DF4: .word 0x000001FD
+_020E0DF8: .word __msl_digit
+_020E0DFC: .word UNK_02106DA8
+_020E0E00: .word UNK_02106DB0
+_020E0E04: .word UNK_02106DB8
+_020E0E08: .word UNK_02106DBC
+_020E0E0C: .word UNK_02106DC0
+_020E0E10: .word UNK_02106DC8
+_020E0E14: .word UNK_02106DD0
+_020E0E18: .word UNK_02106DD4
+_020E0E1C: .word 0x66666667
+ arm_func_end float2str
+
+ arm_func_start __pformatter
+__pformatter:
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x22c
+ mov r3, #0x20
+ mov r11, r2
+ strb r3, [sp, #0x19]
+ ldrsb r2, [r11, #0x0]
+ mov r9, r0
+ mov r8, r1
+ cmp r2, #0x0
+ mov r10, #0x0
+ beq _020E1628
+_020E0E50:
+ mov r0, r11
+ mov r1, #0x25
+ bl strchr
+ str r0, [sp, #0xc]
+ cmp r0, #0x0
+ bne _020E0EA4
+ mov r0, r11
+ bl strlen
+ movs r2, r0
+ add r10, r10, r2
+ beq _020E1628
+ mov r0, r8
+ mov r1, r11
+ blx r9
+ cmp r0, #0x0
+ bne _020E1628
+ add sp, sp, #0x22c
+ mvn r0, #0x0
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E0EA4:
+ subs r2, r0, r11
+ add r10, r10, r2
+ beq _020E0ED4
+ mov r0, r8
+ mov r1, r11
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E0ED4:
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x25c
+ add r2, sp, #0x1c
+ bl parse_format
+ ldrb r1, [sp, #0x21]
+ mov r11, r0
+ cmp r1, #0x61
+ bgt _020E0F40
+ bge _020E12A4
+ cmp r1, #0x47
+ bgt _020E0F34
+ subs r0, r1, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020E0F28
+ b _020E12A4 ; case 65
+ b _020E148C ; case 66
+ b _020E148C ; case 67
+ b _020E148C ; case 68
+ b _020E123C ; case 69
+ b _020E123C ; case 70
+ b _020E123C ; case 71
+_020E0F28:
+ cmp r1, #0x25
+ beq _020E1478
+ b _020E148C
+_020E0F34:
+ cmp r1, #0x58
+ beq _020E1100
+ b _020E148C
+_020E0F40:
+ cmp r1, #0x75
+ bgt _020E0FA8
+ subs r0, r1, #0x64
+ addpl pc, pc, r0, lsl #0x2
+ b _020E0F9C
+ b _020E0FC0 ; case 100
+ b _020E123C ; case 101
+ b _020E123C ; case 102
+ b _020E123C ; case 103
+ b _020E148C ; case 104
+ b _020E0FC0 ; case 105
+ b _020E148C ; case 106
+ b _020E148C ; case 107
+ b _020E148C ; case 108
+ b _020E148C ; case 109
+ b _020E13CC ; case 110
+ b _020E1100 ; case 111
+ b _020E148C ; case 112
+ b _020E148C ; case 113
+ b _020E148C ; case 114
+ b _020E130C ; case 115
+ b _020E148C ; case 116
+ b _020E1100 ; case 117
+_020E0F9C:
+ cmp r1, #0x63
+ beq _020E1458
+ b _020E148C
+_020E0FA8:
+ cmp r1, #0x78
+ bgt _020E0FB8
+ beq _020E1100
+ b _020E148C
+_020E0FB8:
+ cmp r1, #0xff
+ b _020E148C
+_020E0FC0:
+ 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
+ bne _020E1120
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E11B8
+_020E1120:
+ cmp r0, #0x4
+ bne _020E1148
+ 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 _020E11B8
+_020E1148:
+ cmp r0, #0x6
+ bne _020E1170
+ 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 _020E11B8
+_020E1170:
+ cmp r0, #0x7
+ bne _020E118C
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E11B8
+_020E118C:
+ cmp r0, #0x8
+ bne _020E11A8
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+ b _020E11B8
+_020E11A8:
+ ldr r1, [sp, #0x25c]
+ add r1, r1, #0x4
+ str r1, [sp, #0x25c]
+ ldr r5, [r1, #-0x4]
+_020E11B8:
+ cmp r0, #0x2
+ moveq r1, r5, lsl #0x10
+ moveq r5, r1, lsr #0x10
+ cmp r0, #0x1
+ andeq r5, r5, #0xff
+ cmp r0, #0x4
+ cmpne r0, #0x6
+ add r0, sp, #0x1c
+ bne _020E1208
+ 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 _020E122C
+_020E1208:
+ 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
+_020E122C:
+ add r0, sp, #0x200
+ add r0, r0, #0x2b
+ sub r6, r0, r7
+ b _020E14D8
+_020E123C:
+ 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
+ ldrne r0, [sp, #0x25c]
+ addne r0, r0, #0x8
+ strne r0, [sp, #0x25c]
+ bne _020E12C8
+ ldr r0, [sp, #0x25c]
+ add r0, r0, #0x8
+ str r0, [sp, #0x25c]
+_020E12C8:
+ 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 double2hex
+ movs r7, r0
+ beq _020E148C
+ add r0, sp, #0x200
+ add r0, r0, #0x2b
+ sub r6, r0, r7
+ b _020E14D8
+_020E130C:
+ 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 ; =UNK_02106DD8
+ bl wcstombs
+ 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 ; =UNK_02106DDC
+ 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
+ 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
+ b _020E1410 ; case 0
+ b _020E161C ; case 1
+ b _020E1418 ; case 2
+ b _020E1420 ; case 3
+ b _020E1448 ; case 4
+ b _020E161C ; case 5
+ b _020E1428 ; case 6
+ b _020E1438 ; case 7
+ b _020E1440 ; case 8
+_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
+ add r0, r0, #0x4
+ str r0, [sp, #0x25c]
+ ldr r0, [r0, #-0x4]
+ mov r6, #0x1
+ strb r0, [sp, #0x2c]
+ b _020E14D8
+_020E1478:
+ mov r0, #0x25
+ strb r0, [sp, #0x2c]
+ add r7, sp, #0x2c
+ mov r6, #0x1
+ b _020E14D8
+_020E148C:
+ ldr r0, [sp, #0xc]
+ bl strlen
+ movs r4, r0
+ beq _020E14C4
+ ldr r1, [sp, #0xc]
+ mov r0, r8
+ mov r2, r4
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E14C4:
+ add sp, sp, #0x22c
+ add r0, r10, r4
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+_020E14D8:
+ ldrb r0, [sp, #0x1c]
+ mov r4, r6
+ cmp r0, #0x0
+ beq _020E158C
+ cmp r0, #0x2
+ moveq r0, #0x30
+ movne r0, #0x20
+ strb r0, [sp, #0x19]
+ ldrsb r0, [r7, #0x0]
+ cmp r0, #0x2b
+ cmpne r0, #0x2d
+ cmpne r0, #0x20
+ bne _020E1548
+ ldrsb r0, [sp, #0x19]
+ cmp r0, #0x30
+ bne _020E1548
+ mov r0, r8
+ mov r1, r7
+ mov r2, #0x1
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ add r7, r7, #0x1
+ sub r6, r6, #0x1
+_020E1548:
+ ldr r0, [sp, #0x24]
+ cmp r4, r0
+ bge _020E158C
+_020E1554:
+ mov r0, r8
+ add r1, sp, #0x19
+ mov r2, #0x1
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x24]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _020E1554
+_020E158C:
+ cmp r6, #0x0
+ beq _020E15BC
+ mov r0, r8
+ mov r1, r7
+ mov r2, r6
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+_020E15BC:
+ ldrb r0, [sp, #0x1c]
+ cmp r0, #0x0
+ bne _020E1618
+ ldr r0, [sp, #0x24]
+ cmp r4, r0
+ bge _020E1618
+ mov r6, #0x20
+ add r7, sp, #0x18
+_020E15DC:
+ mov r0, r8
+ mov r1, r7
+ mov r2, #0x1
+ strb r6, [sp, #0x18]
+ blx r9
+ cmp r0, #0x0
+ addeq sp, sp, #0x22c
+ mvneq r0, #0x0
+ ldmeqia sp!, {r4-r11,lr}
+ addeq sp, sp, #0x10
+ bxeq lr
+ ldr r0, [sp, #0x24]
+ add r4, r4, #0x1
+ cmp r4, r0
+ blt _020E15DC
+_020E1618:
+ add r10, r10, r4
+_020E161C:
+ ldrsb r0, [r11, #0x0]
+ cmp r0, #0x0
+ bne _020E0E50
+_020E1628:
+ mov r0, r10
+ add sp, sp, #0x22c
+ ldmia sp!, {r4-r11,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E163C: .word UNK_02106DD8
+_020E1640: .word UNK_02106DDC
+ arm_func_end __pformatter
+
+ arm_func_start __FileWrite
+__FileWrite: ; 0x020E1644
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ mov r0, r1
+ mov r3, r5
+ mov r1, #0x1
+ mov r4, r2
+ bl __fwrite
+ cmp r4, r0
+ movne r5, #0x0
+ mov r0, r5
+ ldmia sp!, {r3-r5,pc}
+ arm_func_end __FileWrite
+
+ arm_func_start __StringWrite
+__StringWrite: ; 0x020E1670
+ stmdb sp!, {r3-r5,lr}
+ mov r4, r0
+ ldr r3, [r4, #0x8]
+ mov r5, r2
+ ldr r2, [r4, #0x4]
+ add r0, r3, r5
+ cmp r0, r2
+ ldr r0, [r4, #0x0]
+ subhi r5, r2, r3
+ mov r2, r5
+ add r0, r0, r3
+ bl memcpy
+ ldr r1, [r4, #0x8]
+ mov r0, #0x1
+ add r1, r1, r5
+ str r1, [r4, #0x8]
+ ldmia sp!, {r3-r5,pc}
+ arm_func_end __StringWrite
+
+ arm_func_start printf
+printf: ; 0x020E16B4
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r4,lr}
+ ldr r0, _020E17B4 ; =__files + 0x4C
+ mvn r1, #0x0
+ bl fwide
+ cmp r0, #0x0
+ mvnge r0, #0x0
+ ldmgeia sp!, {r4,lr}
+ addge sp, sp, #0x10
+ bxge lr
+ ldr r0, _020E17B8 ; =__cs + 0x48
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _020E1710
+ ldr r0, _020E17BC ; =OSi_ThreadInfo
+ ldr r1, _020E17C0 ; =__cs_id
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E17C4 ; =__cs_ref
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0xc]
+ str r2, [r0, #0xc]
+ b _020E1768
+_020E1710:
+ ldr r0, _020E17BC ; =OSi_ThreadInfo
+ ldr r1, _020E17C0 ; =__cs_id
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, #0xc]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020E1740
+ ldr r0, _020E17C4 ; =__cs_ref
+ ldr r1, [r0, #0xc]
+ add r1, r1, #0x1
+ str r1, [r0, #0xc]
+ b _020E1768
+_020E1740:
+ ldr r0, _020E17B8 ; =__cs + 0x48
+ bl OS_LockMutex
+ ldr r0, _020E17BC ; =OSi_ThreadInfo
+ ldr r1, _020E17C0 ; =__cs_id
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E17C4 ; =__cs_ref
+ 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 ; =__files + 0x4C
+ add r3, r3, #0x4
+ bl __pformatter
+ ldr r1, _020E17C4 ; =__cs_ref
+ mov r4, r0
+ ldr r0, [r1, #0xc]
+ subs r0, r0, #0x1
+ str r0, [r1, #0xc]
+ bne _020E17A4
+ ldr r0, _020E17B8 ; =__cs + 0x48
+ bl OS_UnlockMutex
+_020E17A4:
+ mov r0, r4
+ ldmia sp!, {r4,lr}
+ add sp, sp, #0x10
+ bx lr
+ .balign 4
+_020E17B4: .word __files + 0x4C
+_020E17B8: .word __cs + 0x48
+_020E17BC: .word OSi_ThreadInfo
+_020E17C0: .word __cs_id
+_020E17C4: .word __cs_ref
+_020E17C8: .word __FileWrite
+ arm_func_end printf
+
+ arm_func_start vsnprintf
+vsnprintf: ; 0x020E17CC
+ stmdb sp!, {r4-r5,lr}
+ sub sp, sp, #0xc
+ mov r5, r0
+ mov r4, r1
+ mov r12, #0x0
+ ldr r0, _020E1830 ; =__StringWrite
+ add r1, sp, #0x0
+ str r5, [sp, #0x0]
+ str r4, [sp, #0x4]
+ str r12, [sp, #0x8]
+ bl __pformatter
+ cmp r5, #0x0
+ addeq sp, sp, #0xc
+ ldmeqia sp!, {r4-r5,pc}
+ cmp r0, r4
+ movcc r1, #0x0
+ addcc sp, sp, #0xc
+ strccb r1, [r5, r0]
+ ldmccia sp!, {r4-r5,pc}
+ 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_end vsnprintf
+
+ arm_func_start snprintf
+snprintf: ; 0x020E1834
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r3, sp, #0x10
+ bic r3, r3, #0x3
+ ldr r2, [sp, #0x10]
+ add r3, r3, #0x4
+ bl vsnprintf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+ arm_func_end snprintf
+
+ arm_func_start sprintf
+sprintf: ; 0x020E185C
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r1, sp, #0xc
+ bic r1, r1, #0x3
+ add r3, r1, #0x4
+ ldr r2, [sp, #0xc]
+ mvn r1, #0x0
+ bl vsnprintf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+ arm_func_end sprintf
diff --git a/arm9/asm/MSL_qsort.s b/arm9/asm/MSL_qsort.s new file mode 100644 index 00000000..8494337d --- /dev/null +++ b/arm9/asm/MSL_qsort.s @@ -0,0 +1,106 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start qsort
+qsort: ; 0x020E1888
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x10
+ mov r9, r1
+ cmp r9, #0x2
+ mov r10, r0
+ mov r8, r2
+ mov r7, r3
+ addcc sp, sp, #0x10
+ ldmccia sp!, {r3-r11,pc}
+ 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}
+ 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
+ add sp, sp, #0x10
+ ldmia sp!, {r3-r11,pc}
+ arm_func_end qsort
diff --git a/arm9/asm/MSL_rand.s b/arm9/asm/MSL_rand.s new file mode 100644 index 00000000..3ef4ab8b --- /dev/null +++ b/arm9/asm/MSL_rand.s @@ -0,0 +1,38 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .data
+
+ .global random_next
+random_next: ; 0x02106DE0
+ .word 0x00000001
+ .size random_next,.-random_next
+
+ .text
+
+ arm_func_start rand
+rand: ; 0x020E19EC
+ ldr r2, _020E1A14 ; =random_next
+ ldr r0, _020E1A18 ; =0x41C64E6D
+ ldr r3, [r2, #0x0]
+ ldr r1, _020E1A1C ; =0x00007FFF
+ mul r0, r3, r0
+ add r0, r0, #0x39
+ add r0, r0, #0x3000
+ str r0, [r2, #0x0]
+ and r0, r1, r0, lsr #0x10
+ bx lr
+ .balign 4
+_020E1A14: .word random_next
+_020E1A18: .word 0x41C64E6D
+_020E1A1C: .word 0x00007FFF
+ arm_func_end rand
+
+ arm_func_start srand
+srand: ; 0x020E1A20
+ ldr r1, _020E1A2C ; =random_next
+ str r0, [r1, #0x0]
+ bx lr
+ .balign 4
+_020E1A2C: .word random_next
+ arm_func_end srand
diff --git a/arm9/asm/MSL_scanf.s b/arm9/asm/MSL_scanf.s new file mode 100644 index 00000000..f0cfa854 --- /dev/null +++ b/arm9/asm/MSL_scanf.s @@ -0,0 +1,1450 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern __msl_digit
+ .extern __float_nan
+
+ .rodata
+
+parse_format$f: ; 0x0210440C
+ .byte 0x00, 0x00, 0x00, 0x00
+ .word 0x7FFFFFFF
+ .word 0x00000000
+ .word 0x00000000
+ .word 0x00000000
+ .word 0x00000000
+ .word 0x00000000
+ .word 0x00000000
+ .word 0x00000000
+ .word 0x00000000
+ .size parse_format$f,.-parse_format$f
+
+ .text
+
+ local_arm_func_start parse_format
+parse_format: ; 0x020E1A30
+ stmdb sp!, {r3-r7,lr}
+ sub sp, sp, #0x28
+ ldr r6, _020E1F20 ; =parse_format$f
+ add r5, sp, #0x0
+ mov r7, r0
+ mov lr, r1
+ mov r4, r5
+ ldmia r6!, {r0-r3}
+ stmia r5!, {r0-r3}
+ ldmia r6!, {r0-r3}
+ stmia r5!, {r0-r3}
+ ldmia r6, {r0-r1}
+ stmia r5, {r0-r1}
+ ldrsb r0, [r7, #0x1]
+ add r12, r7, #0x1
+ cmp r0, #0x25
+ bne _020E1A9C
+ strb r0, [sp, #0x3]
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4, {r0-r1}
+ stmia lr, {r0-r1}
+ add sp, sp, #0x28
+ add r0, r12, #0x1
+ ldmia sp!, {r3-r7,pc}
+_020E1A9C:
+ cmp r0, #0x2a
+ moveq r0, #0x1
+ streqb r0, [sp, #0x0]
+ ldreqsb r0, [r12, #0x1]!
+ cmp r0, #0x0
+ blt _020E1ABC
+ cmp r0, #0x80
+ blt _020E1AC4
+_020E1ABC:
+ mov r1, #0x0
+ b _020E1AD4
+_020E1AC4:
+ ldr r1, _020E1F24 ; =__msl_digit
+ mov r2, r0, lsl #0x1
+ ldrh r1, [r1, r2]
+ and r1, r1, #0x8
+_020E1AD4:
+ cmp r1, #0x0
+ beq _020E1B74
+ mov r1, #0x0
+ ldr r3, _020E1F24 ; =__msl_digit
+ str r1, [sp, #0x4]
+ mov r4, r1
+ mov r1, #0xa
+_020E1AF0:
+ ldr r2, [sp, #0x4]
+ sub r0, r0, #0x30
+ mla r0, r2, r1, r0
+ str r0, [sp, #0x4]
+ ldrsb r0, [r12, #0x1]!
+ cmp r0, #0x0
+ blt _020E1B14
+ cmp r0, #0x80
+ blt _020E1B1C
+_020E1B14:
+ mov r2, r4
+ b _020E1B28
+_020E1B1C:
+ mov r2, r0, lsl #0x1
+ ldrh r2, [r3, r2]
+ and r2, r2, #0x8
+_020E1B28:
+ cmp r2, #0x0
+ bne _020E1AF0
+ ldr r1, [sp, #0x4]
+ cmp r1, #0x0
+ bne _020E1B6C
+ mov r0, #0xff
+ add r4, sp, #0x0
+ strb r0, [sp, #0x3]
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4, {r0-r1}
+ stmia lr, {r0-r1}
+ add sp, sp, #0x28
+ add r0, r12, #0x1
+ ldmia sp!, {r3-r7,pc}
+_020E1B6C:
+ mov r1, #0x1
+ strb r1, [sp, #0x1]
+_020E1B74:
+ cmp r0, #0x6c
+ mov r1, #0x1
+ bgt _020E1BAC
+ cmp r0, #0x68
+ blt _020E1BA0
+ beq _020E1BC8
+ cmp r0, #0x6a
+ beq _020E1C14
+ cmp r0, #0x6c
+ beq _020E1BE4
+ b _020E1C38
+_020E1BA0:
+ cmp r0, #0x4c
+ beq _020E1C08
+ b _020E1C38
+_020E1BAC:
+ cmp r0, #0x74
+ bgt _020E1BBC
+ beq _020E1C2C
+ b _020E1C38
+_020E1BBC:
+ cmp r0, #0x7a
+ beq _020E1C20
+ b _020E1C38
+_020E1BC8:
+ mov r2, #0x2
+ strb r2, [sp, #0x2]
+ ldrsb r2, [r12, #0x1]
+ cmp r2, #0x68
+ streqb r1, [sp, #0x2]
+ ldreqsb r0, [r12, #0x1]!
+ b _020E1C3C
+_020E1BE4:
+ mov r2, #0x3
+ strb r2, [sp, #0x2]
+ ldrsb r2, [r12, #0x1]
+ cmp r2, #0x6c
+ bne _020E1C3C
+ mov r0, #0x7
+ strb r0, [sp, #0x2]
+ ldrsb r0, [r12, #0x1]!
+ b _020E1C3C
+_020E1C08:
+ mov r2, #0x9
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C14:
+ mov r2, #0x4
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C20:
+ mov r2, #0x5
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C2C:
+ mov r2, #0x6
+ strb r2, [sp, #0x2]
+ b _020E1C3C
+_020E1C38:
+ mov r1, #0x0
+_020E1C3C:
+ cmp r1, #0x0
+ ldrnesb r0, [r12, #0x1]!
+ strb r0, [sp, #0x3]
+ cmp r0, #0x5b
+ bgt _020E1C90
+ bge _020E1DE0
+ cmp r0, #0x47
+ bgt _020E1C84
+ subs r1, r0, #0x41
+ addpl pc, pc, r1, lsl #0x2
+ b _020E1EF0
+ b _020E1D1C ; case 65
+ b _020E1EF0 ; case 66
+ b _020E1EF0 ; case 67
+ b _020E1EF0 ; case 68
+ b _020E1D1C ; case 69
+ b _020E1D1C ; case 70
+ b _020E1D1C ; case 71
+_020E1C84:
+ cmp r0, #0x58
+ beq _020E1D08
+ b _020E1EF0
+_020E1C90:
+ cmp r0, #0x61
+ bgt _020E1CA0
+ beq _020E1D1C
+ b _020E1EF0
+_020E1CA0:
+ sub r0, r0, #0x63
+ cmp r0, #0x15
+ addls pc, pc, r0, lsl #0x2
+ b _020E1EF0
+ b _020E1D6C ; case 99
+ b _020E1D08 ; case 100
+ b _020E1D1C ; case 101
+ b _020E1D1C ; case 102
+ b _020E1D1C ; case 103
+ b _020E1EF0 ; case 104
+ b _020E1D08 ; case 105
+ b _020E1EF0 ; case 106
+ b _020E1EF0 ; case 107
+ b _020E1EF0 ; case 108
+ b _020E1EF0 ; case 109
+ b _020E1EF8 ; case 110
+ b _020E1D08 ; case 111
+ b _020E1D58 ; case 112
+ b _020E1EF0 ; case 113
+ b _020E1EF0 ; case 114
+ b _020E1D90 ; case 115
+ b _020E1EF0 ; case 116
+ b _020E1D08 ; case 117
+ b _020E1EF0 ; case 118
+ b _020E1EF0 ; case 119
+ b _020E1D08 ; case 120
+_020E1D08:
+ ldrb r0, [sp, #0x2]
+ cmp r0, #0x9
+ moveq r0, #0xff
+ streqb r0, [sp, #0x3]
+ b _020E1EF8
+_020E1D1C:
+ ldrb r1, [sp, #0x2]
+ cmp r1, #0x1
+ cmpne r1, #0x2
+ beq _020E1D3C
+ add r0, r1, #0xfc
+ and r0, r0, #0xff
+ cmp r0, #0x3
+ bhi _020E1D48
+_020E1D3C:
+ mov r0, #0xff
+ strb r0, [sp, #0x3]
+ b _020E1EF8
+_020E1D48:
+ cmp r1, #0x3
+ moveq r0, #0x8
+ streqb r0, [sp, #0x2]
+ b _020E1EF8
+_020E1D58:
+ 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
+ moveq r0, #0xa
+ streqb r0, [sp, #0x2]
+ beq _020E1E00
+ cmp r0, #0x0
+ movne r0, #0xff
+ strneb r0, [sp, #0x3]
+_020E1E00:
+ ldrsb r2, [r12, #0x1]!
+ mov r1, #0x0
+ cmp r2, #0x5e
+ ldreqsb r2, [r12, #0x1]!
+ moveq r1, #0x1
+ cmp r2, #0x5d
+ bne _020E1EA8
+ ldrb r0, [sp, #0x13]
+ orr r0, r0, #0x20
+ strb r0, [sp, #0x13]
+ ldrsb r2, [r12, #0x1]!
+ b _020E1EA8
+_020E1E30:
+ add r0, sp, #0x0
+ and r3, r2, #0xff
+ add r6, r0, r3, asr #0x3
+ ldrb r5, [r6, #0x8]
+ and r3, r2, #0x7
+ mov r4, #0x1
+ orr r3, r5, r4, lsl r3
+ strb r3, [r6, #0x8]
+ ldrsb r3, [r12, #0x1]
+ cmp r3, #0x2d
+ bne _020E1EA4
+ ldrsb r7, [r12, #0x2]
+ cmp r7, #0x0
+ cmpne r7, #0x5d
+ beq _020E1EA4
+ add r2, r2, #0x1
+ cmp r2, r7
+ bgt _020E1E9C
+_020E1E78:
+ and r3, r2, #0xff
+ add r6, r0, r3, asr #0x3
+ ldrb r5, [r6, #0x8]
+ and r3, r2, #0x7
+ add r2, r2, #0x1
+ orr r3, r5, r4, lsl r3
+ strb r3, [r6, #0x8]
+ cmp r2, r7
+ ble _020E1E78
+_020E1E9C:
+ ldrsb r2, [r12, #0x3]!
+ b _020E1EA8
+_020E1EA4:
+ ldrsb r2, [r12, #0x1]!
+_020E1EA8:
+ cmp r2, #0x0
+ cmpne r2, #0x5d
+ bne _020E1E30
+ cmp r2, #0x0
+ moveq r0, #0xff
+ streqb r0, [sp, #0x3]
+ beq _020E1EF8
+ cmp r1, #0x0
+ beq _020E1EF8
+ add r2, sp, #0x8
+ mov r1, #0x20
+_020E1ED4:
+ ldrb r0, [r2, #0x0]
+ sub r1, r1, #0x1
+ cmp r1, #0x0
+ mvn r0, r0
+ strb r0, [r2], #0x1
+ bgt _020E1ED4
+ b _020E1EF8
+_020E1EF0:
+ mov r0, #0xff
+ strb r0, [sp, #0x3]
+_020E1EF8:
+ add r4, sp, #0x0
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4!, {r0-r3}
+ stmia lr!, {r0-r3}
+ ldmia r4, {r0-r1}
+ stmia lr, {r0-r1}
+ add r0, r12, #0x1
+ add sp, sp, #0x28
+ ldmia sp!, {r3-r7,pc}
+ .balign 4
+_020E1F20: .word parse_format$f
+_020E1F24: .word __msl_digit
+ arm_func_end parse_format
+
+ arm_func_start __sformatter
+__sformatter: ; 0x020E1F28
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0x88
+ ldrsb r5, [r2, #0x0]
+ str r2, [sp, #0xc]
+ mov r2, #0x0
+ mov r9, r0
+ mov r0, r2
+ str r2, [sp, #0x20]
+ mov r8, r1
+ str r3, [sp, #0x10]
+ str r0, [sp, #0x24]
+ cmp r5, #0x0
+ ldr r10, [sp, #0xb0]
+ str r0, [sp, #0x30]
+ mov r4, r2
+ str r0, [sp, #0x44]
+ str r0, [sp, #0x40]
+ beq _020E2C3C
+_020E1F70:
+ cmp r5, #0x0
+ mov r0, #0x1
+ blt _020E1F84
+ cmp r5, #0x80
+ movlt r0, #0x0
+_020E1F84:
+ cmp r0, #0x0
+ movne r0, #0x0
+ bne _020E1FA0
+ mov r1, r5, lsl #0x1
+ ldr r0, _020E2C74 ; =__msl_digit
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x100
+_020E1FA0:
+ cmp r0, #0x0
+ beq _020E2060
+ mov r2, #0x0
+ ldr r1, _020E2C74 ; =__msl_digit
+ mov r12, r2
+ mov r3, #0x1
+_020E1FB8:
+ ldr r0, [sp, #0xc]
+ ldrsb r5, [r0, #0x1]!
+ str r0, [sp, #0xc]
+ mov r0, r3
+ cmp r5, #0x0
+ blt _020E1FD8
+ cmp r5, #0x80
+ movlt r0, r2
+_020E1FD8:
+ cmp r0, #0x0
+ movne r0, r12
+ moveq r0, r5, lsl #0x1
+ ldreqh r0, [r1, r0]
+ andeq r0, r0, #0x100
+ cmp r0, #0x0
+ bne _020E1FB8
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E2C2C
+ ldr r5, _020E2C74 ; =__msl_digit
+ b _020E200C
+_020E2008:
+ add r4, r4, #0x1
+_020E200C:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ cmp r1, #0x0
+ blt _020E2034
+ cmp r1, #0x80
+ blt _020E203C
+_020E2034:
+ mov r0, #0x0
+ b _020E2048
+_020E203C:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r5, r0]
+ and r0, r0, #0x100
+_020E2048:
+ cmp r0, #0x0
+ bne _020E2008
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ b _020E2C2C
+_020E2060:
+ cmp r5, #0x25
+ beq _020E20D8
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E20D8
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ and r0, r5, #0xff
+ ldrsb r1, [sp, #0x50]
+ cmp r0, r1
+ beq _020E20C4
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ ldr r0, [sp, #0xc]
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ b _020E2C2C
+_020E20C4:
+ ldr r0, [sp, #0xc]
+ add r4, r4, #0x1
+ add r0, r0, #0x1
+ str r0, [sp, #0xc]
+ b _020E2C2C
+_020E20D8:
+ ldr r0, [sp, #0xc]
+ add r1, sp, #0x60
+ bl parse_format
+ str r0, [sp, #0xc]
+ ldrb r0, [sp, #0x60]
+ cmp r0, #0x0
+ bne _020E2114
+ ldrb r0, [sp, #0x63]
+ cmp r0, #0x25
+ beq _020E2114
+ ldr r0, [sp, #0x10]
+ add r0, r0, #0x4
+ str r0, [sp, #0x10]
+ ldr r5, [r0, #-0x4]
+ b _020E2118
+_020E2114:
+ mov r5, #0x0
+_020E2118:
+ ldrb r0, [sp, #0x63]
+ cmp r0, #0x6e
+ beq _020E2158
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ bne _020E2158
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, #0x2
+ blx r9
+ cmp r0, #0x0
+ beq _020E2158
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+_020E2158:
+ ldrb r1, [sp, #0x63]
+ cmp r1, #0x5b
+ bgt _020E21B0
+ bge _020E2984
+ cmp r1, #0x47
+ bgt _020E21A4
+ subs r0, r1, #0x41
+ addpl pc, pc, r0, lsl #0x2
+ b _020E2198
+ b _020E2600 ; case 65
+ b _020E2C3C ; case 66
+ b _020E2C3C ; case 67
+ b _020E2C3C ; case 68
+ b _020E2600 ; case 69
+ b _020E2600 ; case 70
+ b _020E2600 ; case 71
+_020E2198:
+ cmp r1, #0x25
+ beq _020E287C
+ b _020E2C3C
+_020E21A4:
+ cmp r1, #0x58
+ beq _020E243C
+ b _020E2C3C
+_020E21B0:
+ cmp r1, #0x78
+ bgt _020E2228
+ subs r0, r1, #0x63
+ addpl pc, pc, r0, lsl #0x2
+ b _020E221C
+ b _020E26C4 ; case 99
+ b _020E2230 ; case 100
+ b _020E2600 ; case 101
+ b _020E2600 ; case 102
+ b _020E2600 ; case 103
+ b _020E2C3C ; case 104
+ b _020E2238 ; case 105
+ b _020E2C3C ; case 106
+ b _020E2C3C ; case 107
+ b _020E2C3C ; case 108
+ b _020E2C3C ; case 109
+ b _020E2BC8 ; case 110
+ b _020E242C ; case 111
+ b _020E2C3C ; case 112
+ b _020E2C3C ; case 113
+ b _020E2C3C ; case 114
+ b _020E2908 ; case 115
+ b _020E2C3C ; case 116
+ b _020E2434 ; case 117
+ b _020E2C3C ; case 118
+ b _020E2C3C ; case 119
+ b _020E243C ; case 120
+_020E221C:
+ cmp r1, #0x61
+ beq _020E2600
+ b _020E2C3C
+_020E2228:
+ cmp r1, #0xff
+ b _020E2C3C
+_020E2230:
+ 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
+ b _020E239C ; case 0
+ b _020E23A8 ; case 1
+ b _020E23B4 ; case 2
+ b _020E23C0 ; case 3
+ b _020E23CC ; case 4
+ b _020E23E0 ; case 5
+ b _020E23EC ; case 6
+ b _020E23F8 ; case 7
+_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
+ mov r0, #0x0
+ str r0, [sp, #0x3c]
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x18]
+ b _020E2538
+_020E2460:
+ ldrb r1, [sp, #0x62]
+ add r2, sp, #0x5c
+ cmp r1, #0x7
+ cmpne r1, #0x4
+ add r1, sp, #0x58
+ bne _020E24A4
+ 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 _020E24C8
+_020E24A4:
+ 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]
+_020E24C8:
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ bne _020E24F8
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ mov r0, #0x0
+ str r0, [sp, #0x3c]
+ str r0, [sp, #0x34]
+ str r0, [sp, #0x18]
+ b _020E2538
+_020E24F8:
+ add r4, r4, r0
+ ldr r0, [sp, #0x58]
+ cmp r0, #0x0
+ beq _020E2538
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ ldrne r0, [sp, #0x3c]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x3c]
+ bne _020E2538
+ ldr r0, [sp, #0x34]
+ rsbs r0, r0, #0x0
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x18]
+ rsc r0, r0, #0x0
+ str r0, [sp, #0x18]
+_020E2538:
+ cmp r5, #0x0
+ beq _020E25F0
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ addls pc, pc, r0, lsl #0x2
+ b _020E25DC
+ b _020E2570 ; case 0
+ b _020E257C ; case 1
+ b _020E2588 ; case 2
+ b _020E2594 ; case 3
+ b _020E25A0 ; case 4
+ b _020E25B4 ; case 5
+ b _020E25C0 ; case 6
+ b _020E25CC ; case 7
+_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
+ ldreq r0, [sp, #0x44]
+ addeq r0, r0, #0x1
+ streq r0, [sp, #0x44]
+_020E25F0:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E2600:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ beq _020E261C
+ ldr r0, _020E2C78 ; =__float_nan
+ ldr r0, [r0, #0x0]
+ bl _f2d
+ b _020E2668
+_020E261C:
+ add r0, sp, #0x54
+ str r0, [sp, #0x0]
+ ldr r0, [sp, #0x64]
+ mov r1, r9
+ mov r2, r8
+ add r3, sp, #0x5c
+ bl __strtold
+ ldr r2, [sp, #0x5c]
+ cmp r2, #0x0
+ bne _020E2664
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ ldr r0, _020E2C78 ; =__float_nan
+ ldr r0, [r0, #0x0]
+ bl _f2d
+ b _020E2668
+_020E2664:
+ add r4, r4, r2
+_020E2668:
+ cmp r5, #0x0
+ beq _020E26B4
+ ldrb r2, [sp, #0x62]
+ cmp r2, #0x0
+ beq _020E2690
+ cmp r2, #0x8
+ beq _020E269C
+ cmp r2, #0x9
+ stmeqia r5, {r0-r1}
+ b _020E26A0
+_020E2690:
+ bl _d2f
+ str r0, [r5, #0x0]
+ b _020E26A0
+_020E269C:
+ stmia r5, {r0-r1}
+_020E26A0:
+ ldr r0, [sp, #0x30]
+ cmp r0, #0x0
+ ldreq r0, [sp, #0x44]
+ addeq r0, r0, #0x1
+ streq r0, [sp, #0x44]
+_020E26B4:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E26C4:
+ 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
+ bne _020E2C2C
+ ldr r5, _020E2C74 ; =__msl_digit
+ b _020E2894
+_020E2890:
+ add r4, r4, #0x1
+_020E2894:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ strb r0, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ cmp r1, #0x0
+ blt _020E28BC
+ cmp r1, #0x80
+ blt _020E28C4
+_020E28BC:
+ mov r0, #0x0
+ b _020E28D0
+_020E28C4:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r5, r0]
+ and r0, r0, #0x100
+_020E28D0:
+ cmp r0, #0x0
+ bne _020E2890
+ cmp r1, #0x25
+ beq _020E2900
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ str r0, [sp, #0x30]
+ b _020E2C2C
+_020E2900:
+ add r4, r4, #0x1
+ b _020E2C2C
+_020E2908:
+ 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 ; =__msl_digit
+ 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
+ cmp r10, #0x0
+ beq _020E29AC
+ ldr r0, [sp, #0x10]
+ mov r7, #0x1
+ add r0, r0, #0x4
+ str r0, [sp, #0x10]
+ ldr r0, [r0, #-0x4]
+ sub r11, r0, #0x1
+_020E29AC:
+ ldr r0, [sp, #0x30]
+ mov r1, #0x0
+ cmp r0, #0x0
+ str r1, [sp, #0x5c]
+ beq _020E29CC
+ cmp r11, #0x0
+ strneb r1, [r5, #0x0]
+ b _020E2C2C
+_020E29CC:
+ mvn r0, #0x0
+ str r5, [sp, #0x28]
+ str r0, [sp, #0x4c]
+ b _020E2A30
+_020E29DC:
+ strb r6, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ add r2, sp, #0x60
+ and r3, r1, #0xff
+ add r2, r2, r3, asr #0x3
+ ldrb r3, [r2, #0x8]
+ and r0, r1, #0x7
+ mov r2, #0x1
+ tst r3, r2, lsl r0
+ beq _020E2A80
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0xa
+ strneb r1, [r5], #0x1
+ bne _020E2A24
+ mov r0, r5
+ add r1, sp, #0x50
+ bl mbtowc
+ add r5, r5, #0x2
+_020E2A24:
+ ldr r0, [sp, #0x5c]
+ add r1, r0, #0x1
+ str r1, [sp, #0x5c]
+_020E2A30:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ sub r0, r0, #0x1
+ str r0, [sp, #0x64]
+ beq _020E2A80
+ cmp r10, #0x0
+ beq _020E2A60
+ cmp r11, r1
+ movcs r7, #0x1
+ movcc r7, #0x0
+ cmp r7, #0x0
+ beq _020E2A80
+_020E2A60:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r6, r0
+ ldr r0, [sp, #0x4c]
+ cmp r6, r0
+ bne _020E29DC
+_020E2A80:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ beq _020E2AA0
+ cmp r10, #0x0
+ beq _020E2AD8
+ cmp r7, #0x0
+ bne _020E2AD8
+_020E2AA0:
+ mov r0, r8
+ ldrsb r1, [sp, #0x50]
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ beq _020E2C3C
+ mov r0, #0x1
+ cmp r11, #0x0
+ str r0, [sp, #0x30]
+ beq _020E2C2C
+ ldr r0, [sp, #0x28]
+ mov r1, #0x0
+ strb r1, [r0, #0x0]
+ b _020E2C2C
+_020E2AD8:
+ add r4, r4, r0
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0xa
+ mov r0, #0x0
+ streqh r0, [r5, #0x0]
+ strneb r0, [r5, #0x0]
+ ldr r0, [sp, #0x44]
+ add r0, r0, #0x1
+ str r0, [sp, #0x44]
+ b _020E2B9C
+_020E2B00:
+ mov r0, #0x0
+ str r0, [sp, #0x5c]
+ mvn r5, #0x0
+ b _020E2B44
+_020E2B10:
+ strb r6, [sp, #0x50]
+ ldrsb r1, [sp, #0x50]
+ and r0, r1, #0x7
+ and r2, r1, #0xff
+ add r1, sp, #0x60
+ add r1, r1, r2, asr #0x3
+ ldrb r2, [r1, #0x8]
+ mov r1, #0x1
+ tst r2, r1, lsl r0
+ beq _020E2B74
+ ldr r0, [sp, #0x5c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x5c]
+_020E2B44:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ sub r0, r0, #0x1
+ str r0, [sp, #0x64]
+ beq _020E2B74
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r6, r0
+ cmp r6, r5
+ bne _020E2B10
+_020E2B74:
+ strb r6, [sp, #0x50]
+ ldr r0, [sp, #0x5c]
+ cmp r0, #0x0
+ bne _020E2B98
+ mov r0, r8
+ ldrsb r1, [sp, #0x50]
+ mov r2, #0x1
+ blx r9
+ b _020E2C2C
+_020E2B98:
+ add r4, r4, r0
+_020E2B9C:
+ ldr r0, [sp, #0x64]
+ cmp r0, #0x0
+ blt _020E2BB8
+ mov r0, r8
+ ldrsb r1, [sp, #0x50]
+ mov r2, #0x1
+ blx r9
+_020E2BB8:
+ ldr r0, [sp, #0x40]
+ add r0, r0, #0x1
+ str r0, [sp, #0x40]
+ b _020E2C2C
+_020E2BC8:
+ cmp r5, #0x0
+ beq _020E2C2C
+ ldrb r0, [sp, #0x62]
+ cmp r0, #0x7
+ addls pc, pc, r0, lsl #0x2
+ b _020E2C2C
+ b _020E2C00 ; case 0
+ b _020E2C18 ; case 1
+ b _020E2C08 ; case 2
+ b _020E2C10 ; case 3
+ b _020E2C2C ; case 4
+ b _020E2C2C ; case 5
+ b _020E2C2C ; case 6
+ b _020E2C20 ; case 7
+_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]
+ cmp r5, #0x0
+ bne _020E1F70
+_020E2C3C:
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, #0x2
+ blx r9
+ cmp r0, #0x0
+ beq _020E2C68
+ ldr r0, [sp, #0x40]
+ cmp r0, #0x0
+ addeq sp, sp, #0x88
+ mvneq r0, #0x0
+ ldmeqia sp!, {r3-r11,pc}
+_020E2C68:
+ ldr r0, [sp, #0x44]
+ add sp, sp, #0x88
+ ldmia sp!, {r3-r11,pc}
+ .balign 4
+_020E2C74: .word __msl_digit
+_020E2C78: .word __float_nan
+ arm_func_end __sformatter
+
+ arm_func_start __StringRead
+__StringRead: ; 0x020E2C7C
+ cmp r2, #0x0
+ beq _020E2C98
+ cmp r2, #0x1
+ beq _020E2CC8
+ cmp r2, #0x2
+ beq _020E2CF0
+ b _020E2CF8
+_020E2C98:
+ ldr r1, [r0, #0x0]
+ ldrsb r2, [r1, #0x0]
+ cmp r2, #0x0
+ bne _020E2CB8
+ mov r1, #0x1
+ str r1, [r0, #0x4]
+ sub r0, r1, #0x2
+ bx lr
+_020E2CB8:
+ add r1, r1, #0x1
+ str r1, [r0, #0x0]
+ and r0, r2, #0xff
+ bx lr
+_020E2CC8:
+ ldr r2, [r0, #0x4]
+ cmp r2, #0x0
+ movne r2, #0x0
+ strne r2, [r0, #0x4]
+ bne _020E2CE8
+ ldr r2, [r0, #0x0]
+ sub r2, r2, #0x1
+ str r2, [r0, #0x0]
+_020E2CE8:
+ mov r0, r1
+ bx lr
+_020E2CF0:
+ ldr r0, [r0, #0x4]
+ bx lr
+_020E2CF8:
+ mov r0, #0x0
+ bx lr
+ arm_func_end __StringRead
+
+ arm_func_start vsscanf
+vsscanf: ; 0x020E2D00
+ stmdb sp!, {lr}
+ sub sp, sp, #0xc
+ str r0, [sp, #0x4]
+ cmp r0, #0x0
+ ldrnesb r0, [r0, #0x0]
+ mov lr, r1
+ mov r3, r2
+ cmpne r0, #0x0
+ addeq sp, sp, #0xc
+ mvneq r0, #0x0
+ ldmeqia sp!, {pc}
+ mov r12, #0x0
+ str r12, [sp, #0x8]
+ ldr r0, _020E2D50 ; =__StringRead
+ add r1, sp, #0x4
+ mov r2, lr
+ str r12, [sp, #0x0]
+ bl __sformatter
+ add sp, sp, #0xc
+ ldmia sp!, {pc}
+ .balign 4
+_020E2D50: .word __StringRead
+ arm_func_end vsscanf
+
+ arm_func_start sscanf
+sscanf: ; 0x020E2D54
+ stmdb sp!, {r0-r3}
+ stmdb sp!, {r3,lr}
+ add r2, sp, #0xc
+ bic r2, r2, #0x3
+ ldr r1, [sp, #0xc]
+ add r2, r2, #0x4
+ bl vsscanf
+ ldmia sp!, {r3,lr}
+ add sp, sp, #0x10
+ bx lr
+ arm_func_end sscanf
diff --git a/arm9/asm/MSL_signal.s b/arm9/asm/MSL_signal.s new file mode 100644 index 00000000..14370643 --- /dev/null +++ b/arm9/asm/MSL_signal.s @@ -0,0 +1,105 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern OSi_ThreadInfo
+ .extern __cs_id
+ .extern __cs_ref
+ .extern __cs
+
+ .bss
+
+ .global signal_funcs
+signal_funcs: ; 0x021D74AC
+ .space 0x1c
+ .size signal_funcs,.-signal_funcs
+
+ .text
+
+ arm_func_start raise
+raise: ; 0x020E2D7C
+ stmdb sp!, {r3-r5,lr}
+ mov r5, r0
+ cmp r5, #0x1
+ blt _020E2D94
+ cmp r5, #0x7
+ ble _020E2D9C
+_020E2D94:
+ mvn r0, #0x0
+ ldmia sp!, {r3-r5,pc}
+_020E2D9C:
+ ldr r0, _020E2E98 ; =__cs + 0xA8
+ bl OS_TryLockMutex
+ cmp r0, #0x0
+ bne _020E2DD0
+ ldr r0, _020E2E9C ; =OSi_ThreadInfo
+ ldr r1, _020E2EA0 ; =__cs_id
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E2EA4 ; =__cs_ref
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x1c]
+ str r2, [r0, #0x1c]
+ b _020E2E28
+_020E2DD0:
+ ldr r0, _020E2E9C ; =OSi_ThreadInfo
+ ldr r1, _020E2EA0 ; =__cs_id
+ ldr r0, [r0, #0x4]
+ ldr r1, [r1, #0x1c]
+ ldr r0, [r0, #0x6c]
+ cmp r1, r0
+ bne _020E2E00
+ ldr r0, _020E2EA4 ; =__cs_ref
+ ldr r1, [r0, #0x1c]
+ add r1, r1, #0x1
+ str r1, [r0, #0x1c]
+ b _020E2E28
+_020E2E00:
+ ldr r0, _020E2E98 ; =__cs + 0xA8
+ bl OS_LockMutex
+ ldr r0, _020E2E9C ; =OSi_ThreadInfo
+ ldr r1, _020E2EA0 ; =__cs_id
+ ldr r2, [r0, #0x4]
+ ldr r0, _020E2EA4 ; =__cs_ref
+ ldr r3, [r2, #0x6c]
+ mov r2, #0x1
+ str r3, [r1, #0x1c]
+ str r2, [r0, #0x1c]
+_020E2E28:
+ ldr r1, _020E2EA8 ; =signal_funcs
+ 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 ; =__cs_ref
+ ldr r1, [r0, #0x1c]
+ subs r1, r1, #0x1
+ str r1, [r0, #0x1c]
+ bne _020E2E5C
+ ldr r0, _020E2E98 ; =__cs + 0xA8
+ 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 __cs + 0xA8
+_020E2E9C: .word OSi_ThreadInfo
+_020E2EA0: .word __cs_id
+_020E2EA4: .word __cs_ref
+_020E2EA8: .word signal_funcs
+ arm_func_end raise
diff --git a/arm9/asm/MSL_string.s b/arm9/asm/MSL_string.s new file mode 100644 index 00000000..cdaf65d9 --- /dev/null +++ b/arm9/asm/MSL_string.s @@ -0,0 +1,364 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start strlen
+strlen: ; 0x020E2EAC
+ mvn r2, #0x0
+_020E2EB0:
+ ldrsb r1, [r0], #0x1
+ add r2, r2, #0x1
+ cmp r1, #0x0
+ bne _020E2EB0
+ mov r0, r2
+ bx lr
+ arm_func_end strlen
+
+ arm_func_start strcpy
+strcpy: ; 0x020E2EC8
+ stmdb sp!, {r3-r5,lr}
+ and r4, r1, #0x3
+ and r3, r0, #0x3
+ mov r2, r0
+ cmp r3, r4
+ bne _020E2F64
+ cmp r4, #0x0
+ beq _020E2F20
+ ldrb r3, [r1, #0x0]
+ strb r3, [r0, #0x0]
+ cmp r3, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+ rsbs r4, r4, #0x3
+ beq _020E2F18
+_020E2F00:
+ ldrb r3, [r1, #0x1]!
+ cmp r3, #0x0
+ strb r3, [r2, #0x1]!
+ ldmeqia sp!, {r3-r5,pc}
+ subs r4, r4, #0x1
+ bne _020E2F00
+_020E2F18:
+ add r2, r2, #0x1
+ add r1, r1, #0x1
+_020E2F20:
+ ldr r5, [r1, #0x0]
+ ldr r3, _020E2F88 ; =0xFEFEFEFF
+ mvn r4, r5
+ add lr, r5, r3
+ ldr ip, _020E2F8C ; =0x80808080
+ and r4, lr, r4
+ tst r4, r12
+ bne _020E2F64
+ sub r2, r2, #0x4
+_020E2F44:
+ str r5, [r2, #0x4]!
+ ldr r5, [r1, #0x4]!
+ add r4, r5, r3
+ mvn lr, r5
+ and lr, r4, lr
+ tst lr, r12
+ beq _020E2F44
+ add r2, r2, #0x4
+_020E2F64:
+ ldrb r3, [r1, #0x0]
+ strb r3, [r2, #0x0]
+ cmp r3, #0x0
+ ldmeqia sp!, {r3-r5,pc}
+_020E2F74:
+ 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
+ arm_func_end strcpy
+
+ arm_func_start strncpy
+strncpy: ; 0x020E2F90
+ stmdb sp!, {r3,lr}
+ mov lr, r0
+ cmp r2, #0x0
+ ldmeqia sp!, {r3,pc}
+_020E2FA0:
+ 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}
+ 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_end strncpy
+
+ arm_func_start strcat
+strcat: ; 0x020E2FE0
+ mov r3, r0
+_020E2FE4:
+ ldrsb r2, [r3], #0x1
+ cmp r2, #0x0
+ bne _020E2FE4
+ sub r3, r3, #0x1
+_020E2FF4:
+ ldrsb r2, [r1], #0x1
+ mov r12, r3
+ strb r2, [r3], #0x1
+ ldrsb r2, [r12, #0x0]
+ cmp r2, #0x0
+ bne _020E2FF4
+ bx lr
+ arm_func_end strcat
+
+ arm_func_start strncat
+strncat: ; 0x020E3010
+ stmdb sp!, {r3,lr}
+ mov r12, r0
+_020E3018:
+ ldrsb r3, [r12], #0x1
+ cmp r3, #0x0
+ bne _020E3018
+ cmp r2, #0x0
+ sub r12, r12, #0x1
+ beq _020E3054
+_020E3030:
+ ldrsb r3, [r1], #0x1
+ mov lr, r12
+ strb r3, [r12], #0x1
+ ldrsb r3, [lr, #0x0]
+ cmp r3, #0x0
+ subeq r12, r12, #0x1
+ beq _020E3054
+ subs r2, r2, #0x1
+ bne _020E3030
+_020E3054:
+ mov r1, #0x0
+ strb r1, [r12, #0x0]
+ ldmia sp!, {r3,pc}
+ arm_func_end strncat
+
+ arm_func_start strcmp
+strcmp: ; 0x020E3060
+ stmdb sp!, {r4,lr}
+ ldrb r2, [r0, #0x0]
+ ldrb r3, [r1, #0x0]
+ subs r3, r2, r3
+ movne r0, r3
+ ldmneia sp!, {r4,pc}
+ 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}
+ 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}
+ cmp r3, #0x0
+ moveq r0, #0x0
+ ldmeqia sp!, {r4,pc}
+ 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}
+ cmp r3, #0x0
+ bne _020E3148
+ mov r0, #0x0
+ ldmia sp!, {r4,pc}
+ .balign 4
+_020E316C: .word 0xFEFEFEFF
+_020E3170: .word 0x80808080
+ arm_func_end strcmp
+
+ arm_func_start strncmp
+strncmp: ; 0x020E3174
+ cmp r2, #0x0
+ beq _020E31A0
+_020E317C:
+ ldrb r12, [r1], #0x1
+ ldrb r3, [r0], #0x1
+ cmp r3, r12
+ subne r0, r3, r12
+ bxne lr
+ cmp r3, #0x0
+ beq _020E31A0
+ subs r2, r2, #0x1
+ bne _020E317C
+_020E31A0:
+ mov r0, #0x0
+ bx lr
+ arm_func_end strncmp
+
+ arm_func_start strchr
+strchr: ; 0x020E31A8
+ ldrsb r2, [r0], #0x1
+ mov r1, r1, lsl #0x18
+ mov r1, r1, asr #0x18
+ cmp r2, #0x0
+ beq _020E31D4
+_020E31BC:
+ cmp r2, r1
+ subeq r0, r0, #0x1
+ bxeq lr
+ ldrsb r2, [r0], #0x1
+ cmp r2, #0x0
+ bne _020E31BC
+_020E31D4:
+ cmp r1, #0x0
+ movne r0, #0x0
+ subeq r0, r0, #0x1
+ bx lr
+ arm_func_end strchr
+
+ arm_func_start strspn
+strspn: ; 0x020E31E4
+ stmdb sp!, {r4,lr}
+ sub sp, sp, #0x20
+ add r12, sp, #0x0
+ mov r3, #0x8
+ mov r2, #0x0
+_020E31F8:
+ strb r2, [r12, #0x0]
+ strb r2, [r12, #0x1]
+ strb r2, [r12, #0x2]
+ strb r2, [r12, #0x3]
+ add r12, r12, #0x4
+ subs r3, r3, #0x1
+ bne _020E31F8
+ ldrb r3, [r1, #0x0]
+ add r4, r1, #0x1
+ cmp r3, #0x0
+ beq _020E3254
+ add lr, sp, #0x0
+ mov r2, #0x1
+_020E322C:
+ and r12, r3, #0xff
+ and r1, r3, #0x7
+ mov r1, r2, lsl r1
+ ldrb r3, [lr, r12, asr #0x3]
+ and r1, r1, #0xff
+ orr r1, r3, r1
+ strb r1, [lr, r12, asr #0x3]
+ ldrb r3, [r4], #0x1
+ cmp r3, #0x0
+ bne _020E322C
+_020E3254:
+ ldrb r1, [r0, #0x0]
+ add r4, r0, #0x1
+ cmp r1, #0x0
+ beq _020E3294
+ add r12, sp, #0x0
+ mov r2, #0x1
+_020E326C:
+ and r3, r1, #0xff
+ and r1, r1, #0x7
+ mov r1, r2, lsl r1
+ ldrb r3, [r12, r3, asr #0x3]
+ and r1, r1, #0xff
+ tst r3, r1
+ bne _020E3294
+ ldrb r1, [r4], #0x1
+ cmp r1, #0x0
+ bne _020E326C
+_020E3294:
+ sub r0, r4, r0
+ sub r0, r0, #0x1
+ add sp, sp, #0x20
+ ldmia sp!, {r4,pc}
+ arm_func_end strspn
+
+ arm_func_start strstr
+strstr: ; 0x020E32A4
+ stmdb sp!, {r4,lr}
+ cmp r1, #0x0
+ ldrneb r2, [r1, #0x0]
+ cmpne r2, #0x0
+ ldmeqia sp!, {r4,pc}
+ 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_end strstr
diff --git a/arm9/asm/MSL_strtold.s b/arm9/asm/MSL_strtold.s new file mode 100644 index 00000000..b9dce779 --- /dev/null +++ b/arm9/asm/MSL_strtold.s @@ -0,0 +1,1422 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern fabs
+ .extern __StringRead
+ .extern __double_huge
+ .extern __float_huge
+
+ .rodata
+
+model$4434: ; 0x02104434
+ .asciz "NAN("
+ .size model$4434,.-model$4434
+
+model$4439: ; 0x02104439
+ .asciz "INFINITY"
+ .size model$4439,.-model$4439
+
+ .text
+
+ arm_func_start __strtold
+__strtold: ; 0x020E3310
+ stmdb sp!, {r3-r11,lr}
+ sub sp, sp, #0xa8
+ ldr r4, [sp, #0xd0]
+ mov r10, #0x0
+ str r4, [sp, #0xd0]
+ str r0, [sp, #0x0]
+ add r6, sp, #0x80
+ mov r9, r1
+ mov r8, r2
+ str r3, [sp, #0x4]
+ mov r4, r10
+ str r10, [sp, #0x2c]
+ mov r5, #0x1
+ mov r0, #0x4
+_020E3348:
+ strh r10, [r6, #0x0]
+ strh r10, [r6, #0x2]
+ strh r10, [r6, #0x4]
+ strh r10, [r6, #0x6]
+ add r6, r6, #0x8
+ subs r0, r0, #0x1
+ bne _020E3348
+ mov r0, #0x0
+ str r0, [sp, #0x28]
+ strh r10, [r6, #0x0]
+ strh r10, [r6, #0x2]
+ ldr r2, [sp, #0x28]
+ ldr r1, [sp, #0xd0]
+ strh r10, [r6, #0x4]
+ str r2, [r1, #0x0]
+ mov r1, r2
+ mov r0, r8
+ str r1, [sp, #0x24]
+ str r1, [sp, #0x20]
+ str r1, [sp, #0x1c]
+ str r1, [sp, #0x18]
+ str r1, [sp, #0x10]
+ str r1, [sp, #0xc]
+ str r1, [sp, #0x8]
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ ldr r7, _020E42F0 ; =model$4439
+ add r0, sp, #0x4d
+ mov r6, #0x4
+_020E33C0:
+ ldrb r3, [r7, #0x0]
+ ldrb r2, [r7, #0x1]
+ add r7, r7, #0x2
+ strb r3, [r0, #0x0]
+ strb r2, [r0, #0x1]
+ add r0, r0, #0x2
+ subs r6, r6, #0x1
+ bne _020E33C0
+ ldrb r3, [r7, #0x0]
+ ldr r2, _020E42F4 ; =model$4434
+ strb r3, [r0, #0x0]
+ ldrb r3, [r2, #0x1]
+ ldrb r0, [r2, #0x2]
+ ldrb r6, [r2, #0x0]
+ strb r3, [sp, #0x31]
+ strb r0, [sp, #0x32]
+ ldrb r3, [r2, #0x3]
+ ldrb r0, [r2, #0x4]
+ strb r6, [sp, #0x30]
+ strb r3, [sp, #0x33]
+ strb r0, [sp, #0x34]
+ b _020E4104
+_020E3418:
+ cmp r5, #0x100
+ bgt _020E3490
+ bge _020E3B98
+ cmp r5, #0x20
+ bgt _020E3474
+ bge _020E3A6C
+ cmp r5, #0x8
+ bgt _020E3468
+ cmp r5, #0x0
+ addge pc, pc, r5, lsl #0x2
+ b _020E4104
+ b _020E4104 ; case 0
+ b _020E34D4 ; case 1
+ b _020E38B8 ; case 2
+ b _020E4104 ; case 3
+ b _020E3968 ; case 4
+ b _020E4104 ; case 5
+ b _020E4104 ; case 6
+ b _020E4104 ; case 7
+ b _020E3990 ; case 8
+_020E3468:
+ cmp r5, #0x10
+ beq _020E3A34
+ b _020E4104
+_020E3474:
+ cmp r5, #0x40
+ bgt _020E3484
+ beq _020E3AF8
+ b _020E4104
+_020E3484:
+ cmp r5, #0x80
+ beq _020E3B44
+ b _020E4104
+_020E3490:
+ cmp r5, #0x2000
+ bgt _020E34B8
+ bge _020E36EC
+ cmp r5, #0x200
+ bgt _020E34AC
+ beq _020E3BF8
+ b _020E4104
+_020E34AC:
+ cmp r5, #0x400
+ beq _020E3C20
+ b _020E4104
+_020E34B8:
+ cmp r5, #0x4000
+ bgt _020E34C8
+ beq _020E35F4
+ b _020E4104
+_020E34C8:
+ cmp r5, #0x8000
+ beq _020E3C98
+ b _020E4104
+_020E34D4:
+ 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 ; =__msl_digit
+ 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 ; =__upper_mapC
+ 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
+ add r0, sp, #0x76
+ mov r6, #0x4
+_020E3604:
+ ldrb r3, [r7, #0x0]
+ ldrb r2, [r7, #0x1]
+ add r7, r7, #0x2
+ strb r3, [r0, #0x0]
+ strb r2, [r0, #0x1]
+ add r0, r0, #0x2
+ subs r6, r6, #0x1
+ bne _020E3604
+ ldrb r2, [r7, #0x0]
+ add r6, sp, #0x77
+ ldr r7, _020E42FC ; =__upper_mapC
+ strb r2, [r0, #0x0]
+ b _020E3658
+_020E3638:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r6, r6, #0x1
+ add r5, r5, #0x1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+_020E3658:
+ cmp r5, #0x8
+ bge _020E3688
+ cmp r1, #0x0
+ blt _020E3670
+ cmp r1, #0x80
+ blt _020E3678
+_020E3670:
+ mov r2, r1
+ b _020E367C
+_020E3678:
+ ldrb r2, [r7, r1]
+_020E367C:
+ ldrsb r0, [r6, #0x0]
+ cmp r0, r2
+ beq _020E3638
+_020E3688:
+ cmp r5, #0x3
+ cmpne r5, #0x8
+ bne _020E36E4
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x0
+ beq _020E36B8
+ ldr r1, _020E4300 ; =__float_huge
+ mov r0, #0x0
+ ldr r1, [r1, #0x0]
+ bl _fsub
+ bl _f2d
+ b _020E36C4
+_020E36B8:
+ ldr r0, _020E4300 ; =__float_huge
+ ldr r0, [r0, #0x0]
+ bl _f2d
+_020E36C4:
+ ldr r2, [sp, #0x2c]
+ add r3, r2, r5
+ ldr r2, [sp, #0x18]
+ add r3, r2, r3
+ ldr r2, [sp, #0x4]
+ add sp, sp, #0xa8
+ str r3, [r2, #0x0]
+ ldmia sp!, {r3-r11,pc}
+_020E36E4:
+ mov r5, #0x1000
+ b _020E4104
+_020E36EC:
+ ldrb r3, [sp, #0x30]
+ ldrb r0, [sp, #0x32]
+ ldrb r2, [sp, #0x31]
+ strb r3, [sp, #0x40]
+ strb r0, [sp, #0x42]
+ ldrb r3, [sp, #0x33]
+ ldrb r0, [sp, #0x34]
+ strb r2, [sp, #0x41]
+ mov r5, #0x1
+ strb r0, [sp, #0x44]
+ mov r6, #0x0
+ add r2, sp, #0x56
+ strb r3, [sp, #0x43]
+ mov r0, #0x8
+_020E3724:
+ strb r6, [r2, #0x0]
+ strb r6, [r2, #0x1]
+ strb r6, [r2, #0x2]
+ strb r6, [r2, #0x3]
+ add r2, r2, #0x4
+ subs r0, r0, #0x1
+ bne _020E3724
+ add r7, sp, #0x41
+ b _020E3768
+_020E3748:
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r7, r7, #0x1
+ add r5, r5, #0x1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+_020E3768:
+ cmp r5, #0x4
+ bge _020E379C
+ cmp r1, #0x0
+ blt _020E3780
+ cmp r1, #0x80
+ blt _020E3788
+_020E3780:
+ mov r2, r1
+ b _020E3790
+_020E3788:
+ ldr r0, _020E42FC ; =__upper_mapC
+ ldrb r2, [r0, r1]
+_020E3790:
+ ldrsb r0, [r7, #0x0]
+ cmp r0, r2
+ beq _020E3748
+_020E379C:
+ sub r0, r5, #0x3
+ cmp r0, #0x1
+ bhi _020E38B0
+ cmp r5, #0x4
+ bne _020E3854
+ ldr r7, _020E42F8 ; =__msl_digit
+ b _020E37DC
+_020E37B8:
+ add r0, sp, #0x56
+ strb r1, [r0, r6]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r6, r6, #0x1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+_020E37DC:
+ cmp r6, #0x20
+ bge _020E3844
+ cmp r1, #0x0
+ blt _020E37F4
+ cmp r1, #0x80
+ blt _020E37FC
+_020E37F4:
+ mov r0, #0x0
+ b _020E3808
+_020E37FC:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r7, r0]
+ and r0, r0, #0x8
+_020E3808:
+ cmp r0, #0x0
+ bne _020E37B8
+ cmp r1, #0x0
+ blt _020E3820
+ cmp r1, #0x80
+ blt _020E3828
+_020E3820:
+ mov r0, #0x0
+ b _020E3834
+_020E3828:
+ mov r0, r1, lsl #0x1
+ ldrh r0, [r7, r0]
+ and r0, r0, #0x1
+_020E3834:
+ cmp r0, #0x0
+ bne _020E37B8
+ cmp r1, #0x2e
+ beq _020E37B8
+_020E3844:
+ cmp r1, #0x29
+ movne r5, #0x1000
+ bne _020E4104
+ add r6, r6, #0x1
+_020E3854:
+ add r0, sp, #0x56
+ mov r1, #0x0
+ strb r1, [r0, r6]
+ ldr r1, [sp, #0x28]
+ cmp r1, #0x0
+ beq _020E3888
+ bl nan
+ mov r2, r0
+ mov r0, #0x0
+ mov r3, r1
+ mov r1, r0
+ bl _dsub
+ b _020E388C
+_020E3888:
+ bl nan
+_020E388C:
+ ldr r2, [sp, #0x2c]
+ add r2, r2, r5
+ add r3, r6, r2
+ ldr r2, [sp, #0x18]
+ add r3, r2, r3
+ ldr r2, [sp, #0x4]
+ add sp, sp, #0xa8
+ str r3, [r2, #0x0]
+ ldmia sp!, {r3-r11,pc}
+_020E38B0:
+ mov r5, #0x1000
+ b _020E4104
+_020E38B8:
+ 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 ; =__msl_digit
+ 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 ; =__upper_mapC
+ 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 ; =__msl_digit
+ 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
+ cmp r1, #0x80
+ blt _020E3A4C
+_020E3A44:
+ mov r0, #0x0
+ b _020E3A5C
+_020E3A4C:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =__msl_digit
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3A5C:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ movne r5, #0x20
+ b _020E4104
+_020E3A6C:
+ cmp r1, #0x0
+ blt _020E3A7C
+ cmp r1, #0x80
+ blt _020E3A84
+_020E3A7C:
+ mov r0, #0x0
+ b _020E3A94
+_020E3A84:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =__msl_digit
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3A94:
+ cmp r0, #0x0
+ moveq r5, #0x40
+ beq _020E4104
+ ldrb r3, [sp, #0x84]
+ cmp r3, #0x14
+ bhs _020E3ADC
+ cmp r1, #0x30
+ cmpeq r3, #0x0
+ beq _020E3AD0
+ ldrb r2, [sp, #0x84]
+ add r0, sp, #0x80
+ add r0, r0, r3
+ add r2, r2, #0x1
+ strb r2, [sp, #0x84]
+ strb r1, [r0, #0x5]
+_020E3AD0:
+ ldr r0, [sp, #0x1c]
+ sub r0, r0, #0x1
+ str r0, [sp, #0x1c]
+_020E3ADC:
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3AF8:
+ cmp r1, #0x0
+ blt _020E3B08
+ cmp r1, #0x80
+ blt _020E3B10
+_020E3B08:
+ mov r0, r1
+ b _020E3B18
+_020E3B10:
+ ldr r0, _020E42FC ; =__upper_mapC
+ ldrb r0, [r0, r1]
+_020E3B18:
+ cmp r0, #0x45
+ movne r5, #0x800
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r5, #0x80
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3B44:
+ cmp r1, #0x2b
+ bne _020E3B68
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E3B90
+_020E3B68:
+ cmp r1, #0x2d
+ bne _020E3B90
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ mov r0, #0x1
+ str r0, [sp, #0x24]
+_020E3B90:
+ mov r5, #0x100
+ b _020E4104
+_020E3B98:
+ cmp r1, #0x0
+ blt _020E3BA8
+ cmp r1, #0x80
+ blt _020E3BB0
+_020E3BA8:
+ mov r0, #0x0
+ b _020E3BC0
+_020E3BB0:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =__msl_digit
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3BC0:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ beq _020E4104
+ cmp r1, #0x30
+ movne r5, #0x400
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r5, #0x200
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3BF8:
+ cmp r1, #0x30
+ movne r5, #0x400
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3C20:
+ cmp r1, #0x0
+ blt _020E3C30
+ cmp r1, #0x80
+ blt _020E3C38
+_020E3C30:
+ mov r0, #0x0
+ b _020E3C48
+_020E3C38:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =__msl_digit
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E3C48:
+ cmp r0, #0x0
+ moveq r5, #0x800
+ beq _020E4104
+ ldr r0, [sp, #0x20]
+ sub r2, r1, #0x30
+ mov r1, #0xa
+ mla r0, r1, r0, r2
+ ldr r1, _020E4304 ; =0x00007FFF
+ str r0, [sp, #0x20]
+ cmp r0, r1
+ ldrgt r0, [sp, #0xd0]
+ movgt r1, #0x1
+ strgt r1, [r0, #0x0]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3C98:
+ cmp r10, #0x20
+ bgt _020E3CE8
+ bge _020E3FBC
+ cmp r10, #0x8
+ bgt _020E3CDC
+ cmp r10, #0x0
+ addge pc, pc, r10, lsl #0x2
+ b _020E4104
+ b _020E4104 ; case 0
+ b _020E3D0C ; case 1
+ b _020E3D5C ; case 2
+ b _020E4104 ; case 3
+ b _020E3D84 ; case 4
+ b _020E4104 ; case 5
+ b _020E4104 ; case 6
+ b _020E4104 ; case 7
+ b _020E3E94 ; case 8
+_020E3CDC:
+ cmp r10, #0x10
+ beq _020E3F70
+ b _020E4104
+_020E3CE8:
+ cmp r10, #0x80
+ bgt _020E3D00
+ bge _020E4064
+ cmp r10, #0x40
+ beq _020E4004
+ b _020E4104
+_020E3D00:
+ cmp r10, #0x100
+ beq _020E408C
+ b _020E4104
+_020E3D0C:
+ 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 ; =__msl_digit
+ 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 ; =__upper_mapC
+ 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 ; =__msl_digit
+ 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 ; =__upper_mapC
+ 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
+ cmp r1, #0x80
+ blt _020E3F88
+_020E3F80:
+ mov r0, r1
+ b _020E3F90
+_020E3F88:
+ ldr r0, _020E42FC ; =__upper_mapC
+ ldrb r0, [r0, r1]
+_020E3F90:
+ cmp r0, #0x50
+ movne r5, #0x800
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r10, #0x20
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E3FBC:
+ cmp r1, #0x2d
+ moveq r0, #0x1
+ streq r0, [sp, #0xc]
+ beq _020E3FE4
+ cmp r1, #0x2b
+ beq _020E3FE4
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ sub r4, r4, #0x1
+_020E3FE4:
+ mov r10, #0x40
+ add r4, r4, #0x1
+ mov r0, r8
+ mov r1, #0x0
+ mov r2, r1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E4004:
+ cmp r1, #0x0
+ blt _020E4014
+ cmp r1, #0x80
+ blt _020E401C
+_020E4014:
+ mov r0, #0x0
+ b _020E402C
+_020E401C:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =__msl_digit
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E402C:
+ cmp r0, #0x0
+ moveq r5, #0x1000
+ beq _020E4104
+ cmp r1, #0x30
+ movne r10, #0x100
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ mov r10, #0x80
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E4064:
+ cmp r1, #0x30
+ movne r10, #0x100
+ bne _020E4104
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ add r4, r4, #0x1
+ blx r9
+ mov r1, r0
+ b _020E4104
+_020E408C:
+ cmp r1, #0x0
+ blt _020E409C
+ cmp r1, #0x80
+ blt _020E40A4
+_020E409C:
+ mov r0, #0x0
+ b _020E40B4
+_020E40A4:
+ mov r2, r1, lsl #0x1
+ ldr r0, _020E42F8 ; =__msl_digit
+ ldrh r0, [r0, r2]
+ and r0, r0, #0x8
+_020E40B4:
+ cmp r0, #0x0
+ moveq r5, #0x800
+ beq _020E4104
+ ldr r0, [sp, #0x10]
+ sub r2, r1, #0x30
+ mov r1, #0xa
+ mla r0, r1, r0, r2
+ str r0, [sp, #0x10]
+ ldr r1, _020E4304 ; =0x00007FFF
+ ldr r0, [sp, #0x20]
+ add r4, r4, #0x1
+ cmp r0, r1
+ ldrgt r0, [sp, #0xd0]
+ movgt r1, #0x1
+ strgt r1, [r0, #0x0]
+ mov r1, #0x0
+ mov r0, r8
+ mov r2, r1
+ blx r9
+ mov r1, r0
+_020E4104:
+ ldr r0, [sp, #0x0]
+ cmp r4, r0
+ bgt _020E4124
+ mvn r0, #0x0
+ cmp r1, r0
+ beq _020E4124
+ tst r5, #0x1800
+ beq _020E3418
+_020E4124:
+ cmp r5, #0x8000
+ beq _020E4140
+ ldr r0, _020E4308 ; =0x00000E2C
+ tst r5, r0
+ moveq r0, #0x1
+ movne r0, #0x0
+ b _020E4164
+_020E4140:
+ sub r0, r4, #0x1
+ cmp r0, #0x2
+ ble _020E4158
+ ldr r0, _020E430C ; =0x0000018E
+ tst r10, r0
+ bne _020E4160
+_020E4158:
+ mov r0, #0x1
+ b _020E4164
+_020E4160:
+ mov r0, #0x0
+_020E4164:
+ cmp r0, #0x0
+ movne r2, #0x0
+ ldrne r0, [sp, #0x4]
+ bne _020E4184
+ ldr r0, [sp, #0x2c]
+ sub r2, r4, #0x1
+ add r2, r2, r0
+ ldr r0, [sp, #0x4]
+_020E4184:
+ str r2, [r0, #0x0]
+ mov r0, r8
+ mov r2, #0x1
+ blx r9
+ cmp r10, #0x0
+ bne _020E4388
+ ldr r0, [sp, #0x24]
+ ldrb r2, [sp, #0x84]
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x20]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x20]
+ add r0, sp, #0x85
+ add r1, r0, r2
+ b _020E41CC
+_020E41C0:
+ ldr r0, [sp, #0x1c]
+ add r0, r0, #0x1
+ str r0, [sp, #0x1c]
+_020E41CC:
+ cmp r2, #0x0
+ sub r2, r2, #0x1
+ beq _020E41E4
+ ldrb r0, [r1, #-0x1]!
+ cmp r0, #0x30
+ beq _020E41C0
+_020E41E4:
+ add r0, r2, #0x1
+ strb r0, [sp, #0x84]
+ ands r2, r0, #0xff
+ bne _020E4208
+ add r1, r2, #0x1
+ strb r1, [sp, #0x84]
+ add r0, sp, #0x85
+ mov r1, #0x30
+ strb r1, [r0, r2]
+_020E4208:
+ ldr r1, [sp, #0x20]
+ ldr r0, [sp, #0x1c]
+ mov r2, #0x8000
+ add r0, r1, r0
+ rsb r2, r2, #0x0
+ str r0, [sp, #0x20]
+ cmp r0, r2
+ blt _020E4230
+ cmp r0, r2, lsr #0x11
+ ble _020E423C
+_020E4230:
+ ldr r0, [sp, #0xd0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+_020E423C:
+ ldr r0, [sp, #0xd0]
+ ldr r0, [r0, #0x0]
+ cmp r0, #0x0
+ beq _020E4298
+ ldr r0, [sp, #0x24]
+ cmp r0, #0x0
+ movne r0, #0x0
+ addne sp, sp, #0xa8
+ movne r1, r0
+ ldmneia sp!, {r3-r11,pc}
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x0
+ ldreq r1, _020E4310 ; =__double_huge
+ addeq sp, sp, #0xa8
+ ldmeqia r1, {r0-r1}
+ ldmeqia sp!, {r3-r11,pc}
+ ldr r1, _020E4310 ; =__double_huge
+ 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
+ strh r1, [sp, #0x82]
+ bl __dec2num
+ mov r4, r0
+ mov r6, r1
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r4
+ mov r3, r6
+ bl _dneq
+ beq _020E4318
+ mov r0, r4
+ mov r1, r6
+ mov r2, #0x0
+ mov r3, #0x100000
+ bl _dls
+ bhs _020E4318
+ ldr r0, [sp, #0xd0]
+ mov r1, #0x1
+ str r1, [r0, #0x0]
+ b _020E4344
+ .balign 4
+_020E42F0: .word model$4439
+_020E42F4: .word model$4434
+_020E42F8: .word __msl_digit
+_020E42FC: .word __upper_mapC
+_020E4300: .word __float_huge
+_020E4304: .word 0x00007FFF
+_020E4308: .word 0x00000E2C
+_020E430C: .word 0x0000018E
+_020E4310: .word __double_huge
+_020E4314: .word 0x7FEFFFFF
+_020E4318:
+ ldr r3, _020E4314 ; =0x7FEFFFFF
+ mov r0, r4
+ mov r1, r6
+ mvn r2, #0x0
+ bl _dgr
+ bls _020E4344
+ ldr r0, [sp, #0xd0]
+ mov r2, #0x1
+ ldr r1, _020E4310 ; =__double_huge
+ str r2, [r0, #0x0]
+ ldmia r1, {r4,r6}
+_020E4344:
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x0
+ beq _020E4378
+ ldr r0, _020E4308 ; =0x00000E2C
+ tst r5, r0
+ beq _020E4378
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r4
+ mov r3, r6
+ bl _dsub
+ mov r4, r0
+ mov r6, r1
+_020E4378:
+ add sp, sp, #0xa8
+ mov r0, r4
+ mov r1, r6
+ ldmia sp!, {r3-r11,pc}
+_020E4388:
+ ldr r0, [sp, #0xc]
+ add r4, sp, #0x38
+ cmp r0, #0x0
+ ldrne r0, [sp, #0x10]
+ ldrb r3, [sp, #0x45]
+ rsbne r0, r0, #0x0
+ strne r0, [sp, #0x10]
+ ldr r1, [sp, #0x10]
+ ldr r0, [sp, #0x8]
+ mov r2, #0x0
+ add r0, r1, r0, lsl #0x2
+ str r0, [sp, #0x10]
+ mov r1, #0x80
+ b _020E43D0
+_020E43C0:
+ ldr r0, [sp, #0x10]
+ add r2, r2, #0x1
+ sub r0, r0, #0x1
+ str r0, [sp, #0x10]
+_020E43D0:
+ cmp r2, #0x4
+ bhs _020E43E0
+ tst r3, r1, asr r2
+ beq _020E43C0
+_020E43E0:
+ adds r5, r2, #0x1
+ beq _020E442C
+ add r0, sp, #0x4c
+ add r3, sp, #0x45
+ str r0, [sp, #0x14]
+ mov r1, #0x0
+ cmp r0, r3
+ blo _020E442C
+ rsb r6, r5, #0x8
+_020E4404:
+ ldr r0, [sp, #0x14]
+ ldrb r0, [r0, #0x0]
+ orr r2, r1, r0, lsl r5
+ mov r1, r0, asr r6
+ ldr r0, [sp, #0x14]
+ and r1, r1, #0xff
+ strb r2, [r0], #-0x1
+ str r0, [sp, #0x14]
+ cmp r0, r3
+ bhs _020E4404
+_020E442C:
+ mov r2, #0x0
+ mov r6, r2
+ strb r2, [r4, #0x0]
+ strb r2, [r4, #0x1]
+ strb r2, [r4, #0x2]
+ strb r2, [r4, #0x3]
+ strb r2, [r4, #0x4]
+ strb r2, [r4, #0x5]
+ strb r2, [r4, #0x6]
+ strb r2, [r4, #0x7]
+ mov r3, #0xc
+ mov r7, #0x1
+ mov r0, #0xff
+ add r1, sp, #0x45
+_020E4464:
+ add r5, r2, #0x8
+ cmp r5, #0x34
+ ldrb r5, [r1, r6]
+ rsbhi r8, r2, #0x34
+ and r11, r3, #0x7
+ andhi r5, r5, r0, lsl r8
+ andhi r5, r5, #0xff
+ mov r8, r5, asr r11
+ and r9, r8, #0xff
+ ldrb r10, [r4, r7]
+ rsb r8, r11, #0x8
+ mov r5, r5, lsl r8
+ orr r9, r10, r9
+ strb r9, [r4, r7]
+ add r7, r7, #0x1
+ add r2, r2, #0x8
+ ldrb r8, [r4, r7]
+ and r5, r5, #0xff
+ cmp r2, #0x34
+ orr r5, r8, r5
+ strb r5, [r4, r7]
+ add r3, r3, #0x8
+ add r6, r6, #0x1
+ blo _020E4464
+ ldr r0, [sp, #0x10]
+ mov r1, #0x800
+ add r0, r0, #0xfe
+ add r2, r0, #0x300
+ rsb r1, r1, #0x0
+ tst r2, r1
+ beq _020E44FC
+ ldr r2, [sp, #0xd0]
+ mov r3, #0x1
+ mov r0, #0x0
+ add sp, sp, #0xa8
+ mov r1, r0
+ str r3, [r2, #0x0]
+ ldmia sp!, {r3-r11,pc}
+_020E44FC:
+ ldrb r0, [r4, #0x1]
+ mov r2, r2, lsl #0x15
+ ldrb r1, [r4, #0x0]
+ orr r0, r0, r2, lsr #0x11
+ strb r0, [r4, #0x1]
+ ldr r0, [sp, #0x28]
+ orr r1, r1, r2, lsr #0x19
+ cmp r0, #0x0
+ andne r0, r1, #0xff
+ strb r1, [r4, #0x0]
+ orrne r0, r0, #0x80
+ strneb r0, [r4, #0x0]
+ mov r3, #0x0
+_020E4530:
+ rsb r1, r3, #0x7
+ ldrb r2, [r4, r3]
+ ldrb r0, [r4, r1]
+ strb r0, [r4, r3]
+ add r3, r3, #0x1
+ strb r2, [r4, r1]
+ cmp r3, #0x4
+ blt _020E4530
+ ldmia r4, {r0-r1}
+ add sp, sp, #0xa8
+ ldmia sp!, {r3-r11,pc}
+ arm_func_end __strtold
+
+ arm_func_start strtold
+strtold: ; 0x020E455C
+ stmdb sp!, {r4-r7,lr}
+ sub sp, sp, #0x14
+ mov r7, r0
+ mov r0, #0x0
+ mov r6, r1
+ str r0, [sp, #0x8]
+ add r4, sp, #0xc
+ str r7, [sp, #0x4]
+ ldr r1, _020E4630 ; =__StringRead
+ add r2, sp, #0x4
+ add r3, sp, #0x10
+ sub r0, r0, #0x80000001
+ str r4, [sp, #0x0]
+ bl __strtold
+ mov r5, r1
+ mov r4, r0
+ cmp r6, #0x0
+ ldrne r0, [sp, #0x10]
+ mov r1, r5
+ addne r0, r7, r0
+ strne r0, [r6, #0x0]
+ mov r0, r4
+ bl fabs
+ ldr r2, [sp, #0xc]
+ mov r6, r0
+ mov r7, r1
+ cmp r2, #0x0
+ bne _020E4614
+ mov r0, #0x0
+ mov r1, r0
+ mov r2, r4
+ mov r3, r5
+ bl _dneq
+ beq _020E4620
+ mov r0, r6
+ mov r1, r7
+ mov r2, #0x0
+ mov r3, #0x100000
+ bl _dls
+ blo _020E4614
+ ldr r3, _020E4634 ; =0x7FEFFFFF
+ mov r0, r6
+ mov r1, r7
+ mvn r2, #0x0
+ bl _dgr
+ bls _020E4620
+_020E4614:
+ ldr r0, _020E4638 ; =errno
+ mov r1, #0x22
+ str r1, [r0, #0x0]
+_020E4620:
+ mov r0, r4
+ mov r1, r5
+ add sp, sp, #0x14
+ ldmia sp!, {r4-r7,pc}
+ .balign 4
+_020E4630: .word __StringRead
+_020E4634: .word 0x7FEFFFFF
+_020E4638: .word errno
+ arm_func_end strtold
+
+ arm_func_start atod
+atod: ; 0x020E463C
+ ldr ip, _020E4648 ; =strtold
+ mov r1, #0x0
+ bx r12
+ .balign 4
+_020E4648: .word strtold
+ arm_func_end atod
diff --git a/arm9/asm/MSL_strtoul.s b/arm9/asm/MSL_strtoul.s new file mode 100644 index 00000000..e74a4b4f --- /dev/null +++ b/arm9/asm/MSL_strtoul.s @@ -0,0 +1,726 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+ .extern __StringRead
+
+ .text
+
+ arm_func_start __strtoul
+__strtoul:
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0xc
+ ldr r4, [sp, #0x38]
+ movs r9, r0
+ ldr r0, [sp, #0x34]
+ str r4, [sp, #0x38]
+ mov r4, #0x0
+ str r0, [sp, #0x34]
+ ldr r0, [sp, #0x38]
+ str r1, [sp, #0x0]
+ str r4, [r0, #0x0]
+ mov r0, r4
+ str r0, [sp, #0x4]
+ ldr r0, [sp, #0x34]
+ mov r1, r4
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x30]
+ str r4, [sp, #0x8]
+ mov r8, r2
+ mov r7, r3
+ mov r5, r4
+ mov r10, r4
+ str r0, [sp, #0x30]
+ mov r4, #0x1
+ bmi _020E46CC
+ cmp r9, #0x1
+ beq _020E46CC
+ cmp r9, #0x24
+ bgt _020E46CC
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x1
+ bge _020E46D4
+_020E46CC:
+ mov r4, #0x40
+ b _020E46F0
+_020E46D4:
+ ldr r1, [sp, #0x8]
+ mov r0, r7
+ mov r3, r1
+ mov r2, r1
+ add r5, r3, #0x1
+ blx r8
+ mov r6, r0
+_020E46F0:
+ cmp r9, #0x0
+ beq _020E4708
+ mov r1, r9
+ mvn r0, #0x0
+ bl _u32_div_f
+ str r0, [sp, #0x4]
+_020E4708:
+ mvn r11, #0x0
+ b _020E49C8
+_020E4710:
+ cmp r4, #0x8
+ bgt _020E4748
+ cmp r4, #0x0
+ addge pc, pc, r4, lsl #0x2
+ b _020E49C8
+ b _020E49C8
+ b _020E4754
+ b _020E4800
+ b _020E49C8
+ b _020E483C
+ b _020E49C8
+ b _020E49C8
+ b _020E49C8
+ b _020E487C
+_020E4748:
+ cmp r4, #0x10
+ beq _020E487C
+ b _020E49C8
+_020E4754:
+ cmp r6, #0x0
+ blt _020E4764
+ cmp r6, #0x80
+ blt _020E476C
+_020E4764:
+ mov r0, #0x0
+ b _020E477C
+_020E476C:
+ ldr r0, _020E4A2C ; =__msl_digit
+ 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
+ moveq r9, #0xa
+ cmp r0, #0x0
+ bne _020E48A0
+ mov r0, r11
+ mov r1, r9
+ bl _u32_div_f
+ str r0, [sp, #0x4]
+_020E48A0:
+ cmp r6, #0x0
+ blt _020E48B0
+ cmp r6, #0x80
+ blt _020E48B8
+_020E48B0:
+ mov r0, #0x0
+ b _020E48C8
+_020E48B8:
+ ldr r0, _020E4A2C ; =__msl_digit
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x8
+_020E48C8:
+ cmp r0, #0x0
+ beq _020E48F0
+ sub r6, r6, #0x30
+ cmp r6, r9
+ blt _020E4978
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ add r6, r6, #0x30
+ b _020E49C8
+_020E48F0:
+ cmp r6, #0x0
+ blt _020E4900
+ cmp r6, #0x80
+ blt _020E4908
+_020E4900:
+ mov r0, #0x0
+ b _020E4918
+_020E4908:
+ ldr r0, _020E4A2C ; =__msl_digit
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x1
+_020E4918:
+ cmp r0, #0x0
+ beq _020E494C
+ cmp r6, #0x0
+ blt _020E4930
+ cmp r6, #0x80
+ blt _020E4938
+_020E4930:
+ mov r0, r6
+ b _020E4940
+_020E4938:
+ ldr r0, _020E4A30 ; =__upper_mapC
+ ldrb r0, [r0, r6]
+_020E4940:
+ sub r0, r0, #0x37
+ cmp r0, r9
+ blt _020E495C
+_020E494C:
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ b _020E49C8
+_020E495C:
+ cmp r6, #0x0
+ blt _020E4974
+ cmp r6, #0x80
+ bge _020E4974
+ ldr r0, _020E4A30 ; =__upper_mapC
+ ldrb r6, [r0, r6]
+_020E4974:
+ sub r6, r6, #0x37
+_020E4978:
+ ldr r0, [sp, #0x4]
+ mov r4, #0x10
+ cmp r10, r0
+ ldrhi r0, [sp, #0x38]
+ movhi r1, #0x1
+ strhi r1, [r0, #0x0]
+ mul r0, r10, r9
+ mov r10, r0
+ sub r0, r11, r0
+ cmp r6, r0
+ ldrhi r0, [sp, #0x38]
+ movhi r1, #0x1
+ strhi r1, [r0, #0x0]
+ mov r1, #0x0
+ mov r0, r7
+ mov r2, r1
+ add r10, r10, r6
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+_020E49C8:
+ ldr r0, [sp, #0x0]
+ cmp r5, r0
+ bgt _020E49E4
+ cmp r6, r11
+ beq _020E49E4
+ tst r4, #0x60
+ beq _020E4710
+_020E49E4:
+ tst r4, #0x34
+ bne _020E49FC
+ ldr r0, [sp, #0x30]
+ mov r10, #0x0
+ str r10, [r0, #0x0]
+ b _020E4A10
+_020E49FC:
+ ldr r0, [sp, #0x8]
+ sub r1, r5, #0x1
+ add r1, r1, r0
+ ldr r0, [sp, #0x30]
+ str r1, [r0, #0x0]
+_020E4A10:
+ mov r0, r7
+ mov r1, r6
+ mov r2, #0x1
+ blx r8
+ mov r0, r10
+ add sp, sp, #0xc
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020E4A2C: .word __msl_digit
+_020E4A30: .word __upper_mapC
+ arm_func_end __strtoul
+
+ arm_func_start __strtoull
+__strtoull: ; 0x020E4A34
+ stmdb sp!, {r4-r11,lr}
+ sub sp, sp, #0x1c
+ ldr r4, [sp, #0x48]
+ movs r9, r0
+ ldr r0, [sp, #0x44]
+ str r4, [sp, #0x48]
+ mov r4, #0x0
+ str r0, [sp, #0x44]
+ ldr r0, [sp, #0x48]
+ str r1, [sp, #0x0]
+ str r4, [r0, #0x0]
+ mov r0, r4
+ str r0, [sp, #0xc]
+ str r0, [sp, #0x8]
+ ldr r0, [sp, #0x44]
+ mov r1, r4
+ str r1, [r0, #0x0]
+ ldr r0, [sp, #0x40]
+ str r4, [sp, #0x14]
+ mov r8, r2
+ mov r7, r3
+ mov r5, r4
+ mov r10, r4
+ mov r11, r4
+ str r0, [sp, #0x40]
+ mov r4, #0x1
+ bmi _020E4ABC
+ cmp r9, #0x1
+ beq _020E4ABC
+ cmp r9, #0x24
+ bgt _020E4ABC
+ ldr r0, [sp, #0x0]
+ cmp r0, #0x1
+ bge _020E4AC4
+_020E4ABC:
+ mov r4, #0x40
+ b _020E4ADC
+_020E4AC4:
+ ldr r1, [sp, #0x14]
+ mov r0, r7
+ mov r2, r1
+ add r5, r1, #0x1
+ blx r8
+ mov r6, r0
+_020E4ADC:
+ cmp r9, #0x0
+ beq _020E4B00
+ mvn r0, #0x0
+ mov r1, r0
+ mov r3, r9, asr #0x1f
+ mov r2, r9
+ bl _ll_udiv
+ str r0, [sp, #0xc]
+ str r1, [sp, #0x8]
+_020E4B00:
+ mvn r0, #0x0
+ str r0, [sp, #0x18]
+ b _020E4E08
+_020E4B0C:
+ cmp r4, #0x8
+ bgt _020E4B44
+ cmp r4, #0x0
+ addge pc, pc, r4, lsl #0x2
+ b _020E4E08
+ b _020E4E08
+ b _020E4B50
+ b _020E4BFC
+ b _020E4E08
+ b _020E4C38
+ b _020E4E08
+ b _020E4E08
+ b _020E4E08
+ b _020E4C78
+_020E4B44:
+ cmp r4, #0x10
+ beq _020E4C78
+ b _020E4E08
+_020E4B50:
+ cmp r6, #0x0
+ blt _020E4B60
+ cmp r6, #0x80
+ blt _020E4B68
+_020E4B60:
+ mov r0, #0x0
+ b _020E4B78
+_020E4B68:
+ ldr r0, _020E4E78 ; =__msl_digit
+ 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
+ cmp r9, #0x0
+ moveq r9, #0xa
+ cmp r1, r0
+ ldr r1, [sp, #0xc]
+ cmpeq r1, r0
+ bne _020E4CB4
+ ldr r0, [sp, #0x18]
+ mov r3, r9, asr #0x1f
+ mov r1, r0
+ mov r2, r9
+ bl _ll_udiv
+ str r0, [sp, #0xc]
+ str r1, [sp, #0x8]
+_020E4CB4:
+ cmp r6, #0x0
+ blt _020E4CC4
+ cmp r6, #0x80
+ blt _020E4CCC
+_020E4CC4:
+ mov r0, #0x0
+ b _020E4CDC
+_020E4CCC:
+ ldr r0, _020E4E78 ; =__msl_digit
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x8
+_020E4CDC:
+ cmp r0, #0x0
+ beq _020E4D04
+ sub r6, r6, #0x30
+ cmp r6, r9
+ blt _020E4D8C
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ add r6, r6, #0x30
+ b _020E4E08
+_020E4D04:
+ cmp r6, #0x0
+ blt _020E4D14
+ cmp r6, #0x80
+ blt _020E4D1C
+_020E4D14:
+ mov r0, #0x0
+ b _020E4D2C
+_020E4D1C:
+ ldr r0, _020E4E78 ; =__msl_digit
+ mov r1, r6, lsl #0x1
+ ldrh r0, [r0, r1]
+ and r0, r0, #0x1
+_020E4D2C:
+ cmp r0, #0x0
+ beq _020E4D60
+ cmp r6, #0x0
+ blt _020E4D44
+ cmp r6, #0x80
+ blt _020E4D4C
+_020E4D44:
+ mov r0, r6
+ b _020E4D54
+_020E4D4C:
+ ldr r0, _020E4E7C ; =__upper_mapC
+ ldrb r0, [r0, r6]
+_020E4D54:
+ sub r0, r0, #0x37
+ cmp r0, r9
+ blt _020E4D70
+_020E4D60:
+ cmp r4, #0x10
+ moveq r4, #0x20
+ movne r4, #0x40
+ b _020E4E08
+_020E4D70:
+ cmp r6, #0x0
+ blt _020E4D88
+ cmp r6, #0x80
+ bge _020E4D88
+ ldr r0, _020E4E7C ; =__upper_mapC
+ ldrb r6, [r0, r6]
+_020E4D88:
+ sub r6, r6, #0x37
+_020E4D8C:
+ ldr r0, [sp, #0x8]
+ umull r2, r3, r10, r9
+ cmp r11, r0
+ ldr r0, [sp, #0xc]
+ mov r4, #0x10
+ cmpeq r10, r0
+ ldrhi r0, [sp, #0x48]
+ movhi r1, #0x1
+ strhi r1, [r0, #0x0]
+ mov r1, r9, asr #0x1f
+ mla r3, r10, r1, r3
+ mla r3, r11, r9, r3
+ ldr r1, [sp, #0x18]
+ mov r10, r2
+ subs r2, r1, r2
+ mov r0, r6, asr #0x1f
+ sbc r1, r1, r3
+ cmp r0, r1
+ cmpeq r6, r2
+ ldrhi r1, [sp, #0x48]
+ movhi r2, #0x1
+ strhi r2, [r1, #0x0]
+ mov r1, #0x0
+ mov r11, r3
+ adds r10, r10, r6
+ adc r11, r11, r0
+ mov r0, r7
+ mov r2, r1
+ add r5, r5, #0x1
+ blx r8
+ mov r6, r0
+_020E4E08:
+ ldr r0, [sp, #0x0]
+ cmp r5, r0
+ bgt _020E4E28
+ ldr r0, [sp, #0x18]
+ cmp r6, r0
+ beq _020E4E28
+ tst r4, #0x60
+ beq _020E4B0C
+_020E4E28:
+ tst r4, #0x34
+ bne _020E4E44
+ ldr r0, [sp, #0x40]
+ mov r10, #0x0
+ mov r11, r10
+ str r10, [r0, #0x0]
+ b _020E4E58
+_020E4E44:
+ ldr r0, [sp, #0x14]
+ sub r1, r5, #0x1
+ add r1, r1, r0
+ ldr r0, [sp, #0x40]
+ str r1, [r0, #0x0]
+_020E4E58:
+ mov r0, r7
+ mov r1, r6
+ mov r2, #0x1
+ blx r8
+ mov r0, r10
+ mov r1, r11
+ add sp, sp, #0x1c
+ ldmia sp!, {r4-r11,pc}
+ .balign 4
+_020E4E78: .word __msl_digit
+_020E4E7C: .word __upper_mapC
+ arm_func_end __strtoull
+
+ arm_func_start strtoul
+strtoul: ; 0x020E4E80
+ stmdb sp!, {r3-r5,lr}
+ sub sp, sp, #0x20
+ mov r5, r0
+ mov lr, #0x0
+ mov r0, r2
+ mov r4, r1
+ add r2, sp, #0x1c
+ str r5, [sp, #0xc]
+ str lr, [sp, #0x10]
+ str r2, [sp, #0x0]
+ add r1, sp, #0x18
+ str r1, [sp, #0x4]
+ add r12, sp, #0x14
+ ldr r2, _020E4F10 ; =__StringRead
+ add r3, sp, #0xc
+ sub r1, lr, #0x80000001
+ str r12, [sp, #0x8]
+ bl __strtoul
+ 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 ; =errno
+ 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: .word errno
+ arm_func_end strtoul
+
+ arm_func_start strtol
+strtol: ; 0x020E4F18
+ stmdb sp!, {r3-r5,lr}
+ sub sp, sp, #0x20
+ mov r5, r0
+ mov lr, #0x0
+ mov r0, r2
+ mov r4, r1
+ add r2, sp, #0x1c
+ str r5, [sp, #0xc]
+ str lr, [sp, #0x10]
+ str r2, [sp, #0x0]
+ add r1, sp, #0x18
+ str r1, [sp, #0x4]
+ add r12, sp, #0x14
+ ldr r2, _020E4FD8 ; =__StringRead
+ add r3, sp, #0xc
+ sub r1, lr, #0x80000001
+ str r12, [sp, #0x8]
+ bl __strtoul
+ 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 ; =errno
+ 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: .word errno
+ arm_func_end strtol
+
+ arm_func_start atol
+atol: ; 0x020E4FE0
+ ldr ip, _020E4FF0 ; =strtol
+ mov r1, #0x0
+ mov r2, #0xa
+ bx r12
+ .balign 4
+_020E4FF0: .word strtol
+ arm_func_end atol
diff --git a/arm9/asm/MSL_wchar_io.s b/arm9/asm/MSL_wchar_io.s new file mode 100644 index 00000000..bc161879 --- /dev/null +++ b/arm9/asm/MSL_wchar_io.s @@ -0,0 +1,43 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start fwide
+fwide:
+ cmp r0, #0x0
+ beq _020E500C
+ ldr r3, [r0, #0x4]
+ mov r2, r3, lsl #0x16
+ movs r2, r2, lsr #0x1d
+ bne _020E5014
+_020E500C:
+ mov r0, #0x0
+ bx lr
+_020E5014:
+ mov r2, r3, lsl #0x14
+ movs r2, r2, lsr #0x1e
+ beq _020E5034
+ cmp r2, #0x1
+ beq _020E505C
+ cmp r2, #0x2
+ moveq r1, #0x1
+ b _020E5060
+_020E5034:
+ cmp r1, #0x0
+ ble _020E504C
+ bic r2, r3, #0xc00
+ orr r2, r2, #0x800
+ str r2, [r0, #0x4]
+ b _020E5060
+_020E504C:
+ biclt r2, r3, #0xc00
+ orrlt r2, r2, #0x400
+ strlt r2, [r0, #0x4]
+ b _020E5060
+_020E505C:
+ mvn r1, #0x0
+_020E5060:
+ mov r0, r1
+ bx lr
+ arm_func_end fwide
diff --git a/arm9/asm/MSL_wmem.s b/arm9/asm/MSL_wmem.s new file mode 100644 index 00000000..68bc3f0e --- /dev/null +++ b/arm9/asm/MSL_wmem.s @@ -0,0 +1,29 @@ + .include "asm/macros.inc"
+ .include "global.inc"
+
+ .text
+
+ arm_func_start wmemcpy
+wmemcpy: ; 0x020E5068
+ ldr ip, _020E5074 ; =memcpy
+ mov r2, r2, lsl #0x1
+ bx r12
+ .balign 4
+_020E5074: .word memcpy
+ arm_func_end wmemcpy
+
+ arm_func_start wmemchr
+wmemchr:
+ cmp r2, #0x0
+ beq _020E5098
+_020E5080:
+ ldrh r3, [r0, #0x0]
+ cmp r3, r1
+ bxeq lr
+ add r0, r0, #0x2
+ subs r2, r2, #0x1
+ bne _020E5080
+_020E5098:
+ mov r0, #0x0
+ bx lr
+ arm_func_end wmemchr
diff --git a/arm9/asm/libc.s b/arm9/asm/libc.s index 39c2decb..78769683 100644 --- a/arm9/asm/libc.s +++ b/arm9/asm/libc.s @@ -1,64 +1,23 @@ .include "asm/macros.inc" .include "global.inc" .extern OSi_ThreadInfo + .extern __console_exit + .extern __stdio_exit + .extern __cs_id + .extern __cs_ref + .extern __cs + .extern __files + .extern __prep_buffer + .extern __float_nan + .extern __float_huge + .extern __double_huge + .extern memchr + .extern __StringRead + .extern wmemchr .section .rodata - .global UNK_0210420C -UNK_0210420C: ; 0x0210420C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F - .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F - .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F - .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F - .byte 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F - .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F - .byte 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F - .byte 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F - - .global UNK_0210428C -UNK_0210428C: ; 0x0210428C - .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F - .byte 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F - .byte 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F - .byte 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F - .byte 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F - .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F - .byte 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F - .byte 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F - - .global UNK_0210430C -UNK_0210430C: ; 0x0210430C - .byte 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00 - .byte 0x04, 0x00, 0x06, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x00, 0x04, 0x00 - .byte 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00 - .byte 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00 - .byte 0x42, 0x01, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00 - .byte 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00 - .byte 0x58, 0x04, 0x58, 0x04, 0x58, 0x04, 0x58, 0x04, 0x58, 0x04, 0x58, 0x04, 0x58, 0x04, 0x58, 0x04 - .byte 0x58, 0x04, 0x58, 0x04, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00 - .byte 0xD0, 0x00, 0x51, 0x06, 0x51, 0x06, 0x51, 0x06, 0x51, 0x06, 0x51, 0x06, 0x51, 0x06, 0x51, 0x02 - .byte 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02 - .byte 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0x51, 0x02 - .byte 0x51, 0x02, 0x51, 0x02, 0x51, 0x02, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00 - .byte 0xD0, 0x00, 0x71, 0x04, 0x71, 0x04, 0x71, 0x04, 0x71, 0x04, 0x71, 0x04, 0x71, 0x04, 0x71, 0x00 - .byte 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00 - .byte 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0x71, 0x00 - .byte 0x71, 0x00, 0x71, 0x00, 0x71, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0xD0, 0x00, 0x04, 0x00 - - .global UNK_0210440C -UNK_0210440C: ; 0x0210440C - .byte 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_02104434 -UNK_02104434: ; 0x02104434 - .asciz "NAN(" - - .global UNK_02104439 -UNK_02104439: ; 0x02104439 - .asciz "INFINITY" - .balign 4 +UNK_021044A4: ; 0x021044A4 .short 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007 .short 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F .short 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017 @@ -125,200 +84,7 @@ UNK_02104764: ; 0x02104764 .section .data - .global UNK_02106A58 -UNK_02106A58: ; 0x02106A58 - .byte 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word UNK_021D73A8 - .byte 0x00, 0x01, 0x00, 0x00 - .word UNK_021D73A8 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word __read_console - .word __write_console - .word __close_console - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106AA4 -UNK_02106AA4: ; 0x02106AA4 - .byte 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word UNK_021D72A8 - .byte 0x00, 0x01, 0x00, 0x00 - .word UNK_021D72A8 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word __read_console - .word __write_console - .word __close_console - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106AF0 -UNK_02106AF0: ; 0x02106AF0 - .byte 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word UNK_021D71A8 - .byte 0x00, 0x01, 0x00, 0x00 - .word UNK_021D71A8 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word __read_console - .word __write_console - .word __close_console - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106B3C -UNK_02106B3C: ; 0x02106B3C - .asciz "Assertion (%s) failed in \"%s\", function \"%s\", line %d\n" - - .balign 4, 0 - .global UNK_02106B74 -UNK_02106B74: ; 0x02106B74 - .word 0x7F800000 ; inf - - .global UNK_02106B78 -UNK_02106B78: ; 0x02106B78 - .word 0x7FFFFFFF ; nan - - .global UNK_02106B7C -UNK_02106B7C: ; 0x02106B7C - .word 0x00000000, 0x7FF00000 ; 1.06047983e-314 - - .global UNK_02106B84 -UNK_02106B84: ; 0x02106B84 - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106B88 -UNK_02106B88: ; 0x02106B88 - .byte 0x25, 0x54, 0x00, 0x00 - - .global UNK_02106B8C -UNK_02106B8C: ; 0x02106B8C - .asciz "AM|PM" - - .balign 4, 0 - .global UNK_02106B94 -UNK_02106B94: ; 0x02106B94 - .word __mbtowc_noconv - .word __wctomb_noconv - - .global UNK_02106B9C -UNK_02106B9C: ; 0x02106B9C - .byte 0x20, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .word UNK_02106BCC - - .global UNK_02106BAC -UNK_02106BAC: ; 0x02106BAC - .word UNK_02106B8C - .word UNK_02106CB0 - .word UNK_02106CA4 - .word UNK_02106C8C - .word UNK_02106B88 - .word UNK_02106CC0 - .word UNK_02106D18 - .word UNK_02106B84 - - .global UNK_02106BCC -UNK_02106BCC: ; 0x02106BCC - .byte 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00 - .byte 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x10, 0x00 - .byte 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 0x28, 0x00 - .byte 0x29, 0x00, 0x2A, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0x00, 0x14, 0x00, 0x15, 0x00, 0x16, 0x00 - .byte 0x17, 0x00, 0x2B, 0x00, 0x2D, 0x00, 0x2F, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x37, 0x00 - .byte 0x39, 0x00, 0x3B, 0x00, 0x3D, 0x00, 0x3F, 0x00, 0x41, 0x00, 0x43, 0x00, 0x45, 0x00, 0x47, 0x00 - .byte 0x49, 0x00, 0x4B, 0x00, 0x4D, 0x00, 0x4F, 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x00, 0x57, 0x00 - .byte 0x59, 0x00, 0x5B, 0x00, 0x5D, 0x00, 0x18, 0x00, 0x19, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0x1C, 0x00 - .byte 0x00, 0x00, 0x2C, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x36, 0x00, 0x38, 0x00 - .byte 0x3A, 0x00, 0x3C, 0x00, 0x3E, 0x00, 0x40, 0x00, 0x42, 0x00, 0x44, 0x00, 0x46, 0x00, 0x48, 0x00 - .byte 0x4A, 0x00, 0x4C, 0x00, 0x4E, 0x00, 0x50, 0x00, 0x52, 0x00, 0x54, 0x00, 0x56, 0x00, 0x58, 0x00 - .byte 0x5A, 0x00, 0x5C, 0x00, 0x5E, 0x00, 0x1D, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x20, 0x00, 0x00, 0x00 - - .global UNK_02106C8C -UNK_02106C8C: ; 0x02106C8C - .asciz "%m/%d/%y" - - .balign 4, 0 - .global UNK_02106C98 -UNK_02106C98: ; 0x02106C98 - .word UNK_02106BAC - .word UNK_02106B9C - .word UNK_02106B94 - - .global UNK_02106CA4 -UNK_02106CA4: ; 0x02106CA4 - .asciz "%I:%M:%S %p" - - .balign 4, 0 - .global UNK_02106CB0 -UNK_02106CB0: ; 0x02106CB0 - .asciz "%a %b %e %T %Y" - - .balign 4, 0 - .global UNK_02106CC0 -UNK_02106CC0: ; 0x02106CC0 - .asciz "Sun|Sunday|Mon|Monday|Tue|Tuesday|Wed|Wednesday|Thu|Thursday|Fri|Friday|Sat|Saturday" - - .balign 4, 0 - .global UNK_02106D18 -UNK_02106D18: ; 0x02106D18 - .asciz "Jan|January|Feb|February|Mar|March|Apr|April|May|May|Jun|June|Jul|July|Aug|August|Sep|September|Oct|October|Nov|November|Dec|December" - - .balign 4, 0 - .global UNK_02106DA0 -UNK_02106DA0: ; 0x02106DA0 - .byte 0x30, 0x78, 0x30, 0x70, 0x30, 0x00, 0x00, 0x00 - - .global UNK_02106DA8 -UNK_02106DA8: ; 0x02106DA8 - .asciz "-INF" - .balign 4, 0 - .global UNK_02106DB0 -UNK_02106DB0: ; 0x02106DB0 - .asciz "-inf" - - .balign 4, 0 - .global UNK_02106DB8 -UNK_02106DB8: ; 0x02106DB8 - .asciz "INF" - - .balign 4, 0 - .global UNK_02106DBC -UNK_02106DBC: ; 0x02106DBC - .asciz "inf" - - .balign 4, 0 - .global UNK_02106DC0 -UNK_02106DC0: ; 0x02106DC0 - .asciz "-NAN" - - .balign 4, 0 - .global UNK_02106DC8 -UNK_02106DC8: ; 0x02106DC8 - .asciz "-nan" - - .balign 4, 0 - .global UNK_02106DD0 -UNK_02106DD0: ; 0x02106DD0 - .asciz "NAN" - - .balign 4, 0 - .global UNK_02106DD4 -UNK_02106DD4: ; 0x02106DD4 - .asciz "nan" - - .balign 4, 0 - .global UNK_02106DD8 -UNK_02106DD8: ; 0x02106DD8 - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106DDC -UNK_02106DDC: ; 0x02106DDC - .byte 0x00, 0x00, 0x00, 0x00 - - .global UNK_02106DE0 -UNK_02106DE0: ; 0x02106DE0 - .byte 0x01, 0x00, 0x00, 0x00 .global UNK_02106DE4 UNK_02106DE4: ; 0x02106DE4 @@ -480,8336 +246,9 @@ UNK_02106F58: ; 0x02106F58 UNK_02106F5C: ; 0x02106F5C .asciz "179769313486231580793728714053034151" - .section .bss - - .global UNK_021D6F78 -UNK_021D6F78: ; 0x021D6F78 - .space 0x10 - - .global UNK_021D6F88 -UNK_021D6F88: ; 0x021D6F88 - .space 0x100 - - .global UNK_021D7088 -UNK_021D7088: ; 0x021D7088 - .space 0x24 - - .global UNK_021D70AC -UNK_021D70AC: ; 0x021D70AC - .space 0x24 - - .global UNK_021D70D0 -UNK_021D70D0: ; 0x021D70D0 - .space 0x48 - - .global UNK_021D7118 -UNK_021D7118: ; 0x021D7118 - .space 0x60 - - .global UNK_021D7178 -UNK_021D7178: ; 0x021D7178 - .space 0x30 - - .global UNK_021D71A8 -UNK_021D71A8: ; 0x021D71A8 - .space 0x100 - - .global UNK_021D72A8 -UNK_021D72A8: ; 0x021D72A8 - .space 0x100 - - .global UNK_021D73A8 -UNK_021D73A8: ; 0x021D73A8 - .space 0x100 - - .global UNK_021D74A8 -UNK_021D74A8: ; 0x021D74A8 - .space 0x4 - - .global UNK_021D74AC -UNK_021D74AC: ; 0x021D74AC - .space 0x1c - .section .text .balign 4, 0 - arm_func_start abort -abort: ; 0x020DE14C - stmdb sp!, {r3,lr} - mov r0, #0x1 - bl raise - ldr r1, _020DE16C ; =UNK_021D6F78 - mov r0, #0x1 - str r0, [r1, #0xc] - bl exit - ldmia sp!, {r3,pc} - .balign 4 -_020DE16C: .word UNK_021D6F78 - - arm_func_start exit -exit: ; 0x020DE170 - stmdb sp!, {r4,lr} - ldr r1, _020DE1B8 ; =UNK_021D6F78 - mov r4, r0 - ldr r0, [r1, #0xc] - cmp r0, #0x0 - bne _020DE1AC - bl __destroy_global_chain - ldr r0, _020DE1B8 ; =UNK_021D6F78 - ldr r0, [r0, #0x4] - cmp r0, #0x0 - beq _020DE1AC - blx r0 - ldr r0, _020DE1B8 ; =UNK_021D6F78 - mov r1, #0x0 - str r1, [r0, #0x4] -_020DE1AC: - mov r0, r4 - bl __exit - ldmia sp!, {r4,pc} - .balign 4 -_020DE1B8: .word UNK_021D6F78 - - arm_func_start __exit -__exit: ; 0x020DE1BC - stmdb sp!, {r3-r5,lr} - ldr r0, _020DE2CC ; =UNK_021D70D0 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DE1F4 - ldr r0, _020DE2D0 ; =OSi_ThreadInfo - ldr r1, _020DE2D4 ; =UNK_021D7088 - ldr r2, [r0, #0x4] - ldr r0, _020DE2D8 ; =UNK_021D70AC - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x0] - str r2, [r0, #0x0] - b _020DE24C -_020DE1F4: - ldr r0, _020DE2D0 ; =OSi_ThreadInfo - ldr r1, _020DE2D4 ; =UNK_021D7088 - ldr r0, [r0, #0x4] - ldr r1, [r1, #0x0] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DE224 - ldr r0, _020DE2D8 ; =UNK_021D70AC - ldr r1, [r0, #0x0] - add r1, r1, #0x1 - str r1, [r0, #0x0] - b _020DE24C -_020DE224: - ldr r0, _020DE2CC ; =UNK_021D70D0 - bl OS_LockMutex - ldr r0, _020DE2D0 ; =OSi_ThreadInfo - ldr r1, _020DE2D4 ; =UNK_021D7088 - ldr r2, [r0, #0x4] - ldr r0, _020DE2D8 ; =UNK_021D70AC - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x0] - str r2, [r0, #0x0] -_020DE24C: - ldr r4, _020DE2DC ; =UNK_021D6F78 - ldr r0, [r4, #0x8] - cmp r0, #0x0 - ble _020DE280 - ldr r5, _020DE2E0 ; =UNK_021D6F88 -_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 ; =UNK_021D70AC - ldr r1, [r0, #0x0] - subs r1, r1, #0x1 - str r1, [r0, #0x0] - bne _020DE29C - ldr r0, _020DE2CC ; =UNK_021D70D0 - bl OS_UnlockMutex -_020DE29C: - ldr r0, _020DE2DC ; =UNK_021D6F78 - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020DE2BC - blx r0 - ldr r0, _020DE2DC ; =UNK_021D6F78 - mov r1, #0x0 - str r1, [r0, #0x0] -_020DE2BC: - mov r0, #0x0 - bl fflush - bl _ExitProcess - ldmia sp!, {r3-r5,pc} - .balign 4 -_020DE2CC: .word UNK_021D70D0 -_020DE2D0: .word OSi_ThreadInfo -_020DE2D4: .word UNK_021D7088 -_020DE2D8: .word UNK_021D70AC -_020DE2DC: .word UNK_021D6F78 -_020DE2E0: .word UNK_021D6F88 - - arm_func_start nan -nan: ; 0x020DE2E4 - ldr r0, _020DE2F4 ; =UNK_02106B78 - ldr ip, _020DE2F8 ; =_f2d - ldr r0, [r0, #0x0] - bx r12 - .balign 4 -_020DE2F4: .word UNK_02106B78 -_020DE2F8: .word _f2d - - arm_func_start __flush_line_buffered_output_files -__flush_line_buffered_output_files: - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE384 ; =UNK_02106A58 - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE31C: - ldr r1, [r0, #0x4] - mov r2, r1, lsl #0x16 - movs r2, r2, lsr #0x1d - beq _020DE35C - mov r1, r1, lsl #0x19 - mov r1, r1, lsr #0x1e - tst r1, #0x1 - beq _020DE35C - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DE35C - bl fflush - cmp r0, #0x0 - movne r4, r9 -_020DE35C: - cmp r5, #0x3 - movge r0, r7 - bge _020DE374 - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE374: - cmp r0, #0x0 - bne _020DE31C - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE384: .word UNK_02106A58 - - arm_func_start __flush_all -__flush_all: ; 0x020DE388 - stmdb sp!, {r3-r9,lr} - ldr r0, _020DE3EC ; =UNK_02106A58 - mov r4, #0x0 - mov r5, #0x1 - mov r8, r0 - mvn r9, #0x0 - mov r7, r4 - mov r6, #0x4c -_020DE3A8: - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - beq _020DE3C4 - bl fflush - cmp r0, #0x0 - movne r4, r9 -_020DE3C4: - cmp r5, #0x3 - movge r0, r7 - bge _020DE3DC - mul r0, r5, r6 - add r5, r5, #0x1 - add r0, r8, r0 -_020DE3DC: - cmp r0, #0x0 - bne _020DE3A8 - mov r0, r4 - ldmia sp!, {r3-r9,pc} - .balign 4 -_020DE3EC: .word UNK_02106A58 - - arm_func_start abs -abs: ; 0x020DE3F0 - cmp r0, #0x0 - rsblt r0, r0, #0x0 - bx lr - - arm_func_start __msl_assertion_failed -__msl_assertion_failed: ; 0x020DE3FC - stmdb sp!, {r3-r4,lr} - sub sp, sp, #0x4 - mov r4, r0 - mov lr, r1 - mov r12, r2 - str r3, [sp, #0x0] - ldr r0, _020DE434 ; =UNK_02106B3C - mov r1, r4 - mov r2, lr - mov r3, r12 - bl printf - bl abort - add sp, sp, #0x4 - ldmia sp!, {r3-r4,pc} - .balign 4 -_020DE434: .word UNK_02106B3C - - arm_func_start __convert_from_newlines -__convert_from_newlines: - bx lr - - 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] - ldr r3, [r0, #0x20] - str r3, [r0, #0x28] - ldr r2, [r0, #0x18] - ldr r1, [r0, #0x2c] - and r1, r2, r1 - sub r1, r3, r1 - str r1, [r0, #0x28] - ldr r1, [r0, #0x18] - str r1, [r0, #0x34] - bx lr - - arm_func_start __load_buffer -__load_buffer: - stmdb sp!, {r4-r6,lr} - mov r5, r2 - mov r4, r0 - mov r6, r1 - bl __prep_buffer - cmp r5, #0x1 - ldreq r0, [r4, #0x20] - add r2, r4, #0x28 - streq r0, [r4, #0x28] - ldr r0, [r4, #0x0] - ldr r1, [r4, #0x1c] - ldr r3, [r4, #0x48] - ldr r12, [r4, #0x3c] - blx r12 - cmp r0, #0x2 - moveq r1, #0x0 - streq r1, [r4, #0x28] - cmp r6, #0x0 - ldrne r1, [r4, #0x28] - strne r1, [r6, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r4-r6,pc} - 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 - ldr r2, [r5, #0x24] - ldr r0, [r5, #0x1c] - mov r4, r1 - subs r0, r2, r0 - beq _020DE574 - str r0, [r5, #0x28] - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x13 - movs r0, r0, lsr #0x1f - bne _020DE538 - ldr r0, [r5, #0x1c] - add r1, r5, #0x28 - bl __convert_from_newlines -_020DE538: - ldr r0, [r5, #0x0] - ldr r1, [r5, #0x1c] - ldr r3, [r5, #0x48] - ldr r12, [r5, #0x40] - add r2, r5, #0x28 - blx r12 - cmp r4, #0x0 - ldrne r1, [r5, #0x28] - strne r1, [r4, #0x0] - cmp r0, #0x0 - ldmneia sp!, {r3-r5,pc} - ldr r1, [r5, #0x18] - ldr r0, [r5, #0x28] - add r0, r1, r0 - str r0, [r5, #0x18] -_020DE574: - mov r0, r5 - bl __prep_buffer - mov r0, #0x0 - ldmia sp!, {r3-r5,pc} - - arm_func_start fread -fread: ; 0x020DE584 - stmdb sp!, {r4-r10,lr} - ldr r4, _020DE67C ; =UNK_02106A58 - mov r7, r3 - cmp r7, r4 - moveq r6, #0x2 - mov r10, r0 - movne r6, #0x5 - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DE680 ; =UNK_021D70D0 - mov r9, r1 - add r0, r5, r4 - mov r8, r2 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DE5E8 - ldr r0, _020DE684 ; =OSi_ThreadInfo - ldr r2, _020DE688 ; =UNK_021D7088 - ldr r1, [r0, #0x4] - ldr r0, _020DE68C ; =UNK_021D70AC - 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 ; =OSi_ThreadInfo - ldr r1, _020DE688 ; =UNK_021D7088 - ldr r0, [r0, #0x4] - ldr r1, [r1, r6, lsl #0x2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DE618 - ldr r1, _020DE68C ; =UNK_021D70AC - 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 ; =OSi_ThreadInfo - ldr r2, _020DE688 ; =UNK_021D7088 - ldr r1, [r0, #0x4] - ldr r0, _020DE68C ; =UNK_021D70AC - 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 ; =UNK_021D70AC - 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 UNK_02106A58 -_020DE680: .word UNK_021D70D0 -_020DE684: .word OSi_ThreadInfo -_020DE688: .word UNK_021D7088 -_020DE68C: .word UNK_021D70AC - - arm_func_start __fread -__fread: ; 0x020DE690 - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x4 - mov r7, r3 - mov r9, r0 - mov r8, r1 - mov r0, r7 - mov r1, #0x0 - mov r4, r2 - bl fwide - 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 - 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 - 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 - 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 - 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 - mov r9, r3 - mov r10, r0 - str r1, [sp, #0x0] - mov r0, r9 - mov r1, #0x0 - mov r4, r2 - bl fwide - 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 - 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 - 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 - 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 - stmdb sp!, {r3-r5,lr} - movs r5, r0 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} - ldr r1, [r5, #0x4] - mov r1, r1, lsl #0x16 - movs r1, r1, lsr #0x1d - moveq r0, #0x0 - ldmeqia sp!, {r3-r5,pc} - 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} - 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 - bne _020DED10 - bl __flush_all - ldmia sp!, {r4,pc} -_020DED10: - ldrb r0, [r4, #0xd] - cmp r0, #0x0 - bne _020DED2C - ldr r0, [r4, #0x4] - mov r1, r0, lsl #0x16 - movs r1, r1, lsr #0x1d - bne _020DED34 -_020DED2C: - mvn r0, #0x0 - ldmia sp!, {r4,pc} -_020DED34: - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x1 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - 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 - 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 - ldr r1, [r0, #0x4] - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - add r1, r1, #0xff - and r1, r1, #0xff - cmp r1, #0x1 - bhi _020DEE10 - ldrb r1, [r0, #0xd] - cmp r1, #0x0 - beq _020DEE24 -_020DEE10: - ldr r0, _020DEE5C ; =UNK_021D74A8 - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - bx lr -_020DEE24: - ldr r1, [r0, #0x8] - mov r1, r1, lsl #0x1d - movs r12, r1, lsr #0x1d - ldreq r0, [r0, #0x18] - bxeq lr - ldr r2, [r0, #0x24] - ldr r1, [r0, #0x1c] - ldr r3, [r0, #0x34] - sub r0, r2, r1 - cmp r12, #0x3 - add r0, r3, r0 - subcs r1, r12, #0x2 - subcs r0, r0, r1 - bx lr - .balign 4 -_020DEE5C: .word UNK_021D74A8 - - arm_func_start ftell -ftell: ; 0x020DEE60 - stmdb sp!, {r3-r7,lr} - ldr r1, _020DEF60 ; =UNK_02106A58 - mov r7, r0 - cmp r7, r1 - moveq r6, #0x2 - beq _020DEE98 - ldr r0, _020DEF64 ; =UNK_02106AA4 - cmp r7, r0 - moveq r6, #0x3 - beq _020DEE98 - ldr r0, _020DEF68 ; =UNK_02106AF0 - cmp r7, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DEE98: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DEF6C ; =UNK_021D70D0 - add r0, r5, r4 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DEED8 - ldr r0, _020DEF70 ; =OSi_ThreadInfo - ldr r2, _020DEF74 ; =UNK_021D7088 - ldr r1, [r0, #0x4] - ldr r0, _020DEF78 ; =UNK_021D70AC - 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 ; =OSi_ThreadInfo - ldr r1, _020DEF74 ; =UNK_021D7088 - ldr r0, [r0, #0x4] - ldr r1, [r1, r6, lsl #0x2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DEF08 - ldr r1, _020DEF78 ; =UNK_021D70AC - 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 ; =OSi_ThreadInfo - ldr r2, _020DEF74 ; =UNK_021D7088 - ldr r1, [r0, #0x4] - ldr r0, _020DEF78 ; =UNK_021D70AC - 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 ; =UNK_021D70AC - 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 UNK_02106A58 -_020DEF64: .word UNK_02106AA4 -_020DEF68: .word UNK_02106AF0 -_020DEF6C: .word UNK_021D70D0 -_020DEF70: .word OSi_ThreadInfo -_020DEF74: .word UNK_021D7088 -_020DEF78: .word UNK_021D70AC - - arm_func_start _fseek -_fseek: ; 0x020DEF7C - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r5,lr} - mov r5, r0 - ldr r1, [r5, #0x4] - mov r4, r2 - mov r1, r1, lsl #0x16 - mov r1, r1, lsr #0x1d - and r1, r1, #0xff - cmp r1, #0x1 - ldreqb r1, [r5, #0xd] - cmpeq r1, #0x0 - beq _020DEFC8 - ldr r0, _020DF160 ; =UNK_021D74A8 - mov r1, #0x28 - str r1, [r0, #0x0] - sub r0, r1, #0x29 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr -_020DEFC8: - ldr r1, [r5, #0x8] - mov r1, r1, lsl #0x1d - mov r1, r1, lsr #0x1d - cmp r1, #0x1 - bne _020DF018 - mov r1, #0x0 - bl __flush_buffer - cmp r0, #0x0 - beq _020DF018 - mov r0, #0x1 - strb r0, [r5, #0xd] - mov r2, #0x0 - ldr r0, _020DF160 ; =UNK_021D74A8 - 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 - mov r0, r5 - mov r4, #0x0 - bl _ftell - ldr r1, [sp, #0x14] - add r0, r1, r0 - str r0, [sp, #0x14] -_020DF038: - cmp r4, #0x2 - beq _020DF0CC - ldr r0, [r5, #0x4] - mov r0, r0, lsl #0x1b - mov r0, r0, lsr #0x1d - cmp r0, #0x3 - beq _020DF0CC - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - mov r0, r0, lsr #0x1d - sub r0, r0, #0x2 - cmp r0, #0x1 - bhi _020DF0CC - ldr r2, [sp, #0x14] - ldr r0, [r5, #0x18] - cmp r2, r0 - bhs _020DF088 - ldr r0, [r5, #0x34] - cmp r2, r0 - bhs _020DF098 -_020DF088: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF098: - ldr r1, [r5, #0x1c] - sub r0, r2, r0 - add r0, r1, r0 - str r0, [r5, #0x24] - ldr r1, [r5, #0x18] - ldr r0, [sp, #0x14] - sub r0, r1, r0 - str r0, [r5, #0x28] - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - orr r0, r0, #0x2 - str r0, [r5, #0x8] - b _020DF0D8 -_020DF0CC: - ldr r0, [r5, #0x8] - bic r0, r0, #0x7 - str r0, [r5, #0x8] -_020DF0D8: - ldr r0, [r5, #0x8] - mov r0, r0, lsl #0x1d - movs r0, r0, lsr #0x1d - bne _020DF150 - ldr r12, [r5, #0x38] - cmp r12, #0x0 - beq _020DF13C - ldr r0, [r5, #0x0] - ldr r3, [r5, #0x48] - add r1, sp, #0x14 - mov r2, r4 - blx r12 - cmp r0, #0x0 - beq _020DF13C - mov r0, #0x1 - strb r0, [r5, #0xd] - mov r2, #0x0 - ldr r0, _020DF160 ; =UNK_021D74A8 - 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 -_020DF13C: - mov r1, #0x0 - strb r1, [r5, #0xc] - ldr r0, [sp, #0x14] - str r0, [r5, #0x18] - str r1, [r5, #0x28] -_020DF150: - mov r0, #0x0 - ldmia sp!, {r3-r5,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DF160: .word UNK_021D74A8 - - arm_func_start fseek -fseek: - stmdb sp!, {r3-r9,lr} - ldr r3, _020DF274 ; =UNK_02106A58 - mov r9, r0 - cmp r9, r3 - mov r8, r1 - mov r7, r2 - moveq r6, #0x2 - beq _020DF1A4 - ldr r0, _020DF278 ; =UNK_02106AA4 - cmp r9, r0 - moveq r6, #0x3 - beq _020DF1A4 - ldr r0, _020DF27C ; =UNK_02106AF0 - cmp r9, r0 - moveq r6, #0x4 - movne r6, #0x5 -_020DF1A4: - mov r0, #0x18 - mul r4, r6, r0 - ldr r5, _020DF280 ; =UNK_021D70D0 - add r0, r5, r4 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020DF1E4 - ldr r0, _020DF284 ; =OSi_ThreadInfo - ldr r2, _020DF288 ; =UNK_021D7088 - ldr r1, [r0, #0x4] - ldr r0, _020DF28C ; =UNK_021D70AC - 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 ; =OSi_ThreadInfo - ldr r1, _020DF288 ; =UNK_021D7088 - ldr r0, [r0, #0x4] - ldr r1, [r1, r6, lsl #0x2] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020DF214 - ldr r1, _020DF28C ; =UNK_021D70AC - 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 ; =OSi_ThreadInfo - ldr r2, _020DF288 ; =UNK_021D7088 - ldr r1, [r0, #0x4] - ldr r0, _020DF28C ; =UNK_021D70AC - 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 ; =UNK_021D70AC - 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 UNK_02106A58 -_020DF278: .word UNK_02106AA4 -_020DF27C: .word UNK_02106AF0 -_020DF280: .word UNK_021D70D0 -_020DF284: .word OSi_ThreadInfo -_020DF288: .word UNK_021D7088 -_020DF28C: .word UNK_021D70AC - - arm_func_start rewind -rewind: ; 0x020DF290 - stmdb sp!, {r4,lr} - mov r1, #0x0 - mov r4, r0 - mov r2, r1 - strb r1, [r4, #0xd] - bl fseek - mov r0, #0x0 - strb r0, [r4, #0xd] - ldmia sp!, {r4,pc} - - arm_func_start mbtowc -mbtowc: - stmdb sp!, {r3,lr} - ldr r3, _020DF2CC ; =UNK_02106C98 - ldr r3, [r3, #0x8] - ldr r3, [r3, #0x0] - blx r3 - ldmia sp!, {r3,pc} - .balign 4 -_020DF2CC: .word UNK_02106C98 - - arm_func_start __mbtowc_noconv -__mbtowc_noconv: ; 0x020DF2D0 - cmp r1, #0x0 - moveq r0, #0x0 - bxeq lr - cmp r2, #0x0 - mvneq r0, #0x0 - bxeq lr - cmp r0, #0x0 - ldrneb r2, [r1, #0x0] - strneh r2, [r0, #0x0] - ldrsb r0, [r1, #0x0] - cmp r0, #0x0 - moveq r0, #0x0 - movne r0, #0x1 - bx lr - - arm_func_start __wctomb_noconv -__wctomb_noconv: ; 0x020DF308 - cmp r0, #0x0 - moveq r0, #0x0 - strneb r1, [r0, #0x0] - movne r0, #0x1 - bx lr - - arm_func_start wctomb -wctomb: ; 0x020DF31C - stmdb sp!, {r3,lr} - ldr r2, _020DF334 ; =UNK_02106C98 - ldr r2, [r2, #0x8] - ldr r2, [r2, #0x4] - blx r2 - ldmia sp!, {r3,pc} - .balign 4 -_020DF334: .word UNK_02106C98 - - arm_func_start mbstowcs -mbstowcs: ; 0x020DF338 - stmdb sp!, {r4-r8,lr} - mov r7, r1 - mov r8, r0 - mov r0, r7 - mov r6, r2 - bl strlen - mov r5, r0 - cmp r8, #0x0 - mov r4, #0x0 - beq _020DF3B8 - cmp r6, #0x0 - bls _020DF3B8 -_020DF368: - ldrsb r0, [r7, #0x0] - cmp r0, #0x0 - beq _020DF3A0 - mov r0, r8 - mov r1, r7 - mov r2, r5 - bl mbtowc - 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: - add r4, r4, #0x1 - cmp r4, r6 - blo _020DF368 -_020DF3B8: - mov r0, r4 - ldmia sp!, {r4-r8,pc} - - arm_func_start wcstombs -wcstombs: - stmdb sp!, {r3-r9,lr} - movs r4, r0 - mov r9, r1 - cmpne r9, #0x0 - mov r8, r2 - mov r7, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r3-r9,pc} - 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 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF444: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF444 - bx lr - - arm_func_start memmove -memmove: ; 0x020DF458 - cmp r1, r0 - blo _020DF480 - mov r12, r0 - cmp r2, #0x0 - bxeq lr -_020DF46C: - ldrsb r3, [r1], #0x1 - subs r2, r2, #0x1 - strb r3, [r12], #0x1 - bne _020DF46C - bx lr -_020DF480: - cmp r2, #0x0 - add r3, r1, r2 - add r12, r0, r2 - bxeq lr -_020DF490: - ldrsb r1, [r3, #-0x1]! - subs r2, r2, #0x1 - strb r1, [r12, #-0x1]! - bne _020DF490 - bx lr - - arm_func_start memset -memset: ; 0x020DF4A4 - stmdb sp!, {r4,lr} - mov r4, r0 - bl __fill_mem - mov r0, r4 - ldmia sp!, {r4,pc} - - arm_func_start memchr -memchr: - cmp r2, #0x0 - and r3, r1, #0xff - beq _020DF4DC -_020DF4C4: - ldrb r1, [r0], #0x1 - cmp r1, r3 - subeq r0, r0, #0x1 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4C4 -_020DF4DC: - mov r0, #0x0 - bx lr - - arm_func_start __memrchr -__memrchr: ; 0x020DF4E4 - cmp r2, #0x0 - and r3, r1, #0xff - add r0, r0, r2 - beq _020DF508 -_020DF4F4: - ldrb r1, [r0, #-0x1]! - cmp r1, r3 - bxeq lr - subs r2, r2, #0x1 - bne _020DF4F4 -_020DF508: - mov r0, #0x0 - bx lr - - arm_func_start memcmp -memcmp: ; 0x020DF510 - cmp r2, #0x0 - beq _020DF548 -_020DF518: - ldrb r12, [r0], #0x1 - ldrb r3, [r1], #0x1 - cmp r12, r3 - beq _020DF540 - ldrb r2, [r0, #-0x1] - ldrb r0, [r1, #-0x1] - cmp r2, r0 - mvncc r0, #0x0 - movcs r0, #0x1 - bx lr -_020DF540: - subs r2, r2, #0x1 - bne _020DF518 -_020DF548: - mov r0, #0x0 - bx lr - - arm_func_start __fill_mem -__fill_mem: ; 0x020DF550 - cmp r2, #0x20 - and r3, r1, #0xff - blo _020DF5E4 - rsb r1, r0, #0x0 - ands r12, r1, #0x3 - beq _020DF57C - sub r2, r2, r12 - and r1, r3, #0xff -_020DF570: - strb r1, [r0], #0x1 - subs r12, r12, #0x1 - bne _020DF570 -_020DF57C: - cmp r3, #0x0 - beq _020DF594 - mov r1, r3, lsl #0x10 - orr r1, r1, r3, lsl #0x18 - orr r1, r1, r3, lsl #0x8 - orr r3, r3, r1 -_020DF594: - movs r1, r2, lsr #0x5 - beq _020DF5C8 -_020DF59C: - str r3, [r0, #0x0] - str r3, [r0, #0x4] - str r3, [r0, #0x8] - str r3, [r0, #0xc] - str r3, [r0, #0x10] - str r3, [r0, #0x14] - str r3, [r0, #0x18] - str r3, [r0, #0x1c] - add r0, r0, #0x20 - subs r1, r1, #0x1 - bne _020DF59C -_020DF5C8: - and r1, r2, #0x1f - movs r1, r1, lsr #0x2 - beq _020DF5E0 -_020DF5D4: - str r3, [r0], #0x4 - subs r1, r1, #0x1 - bne _020DF5D4 -_020DF5E0: - and r2, r2, #0x3 -_020DF5E4: - cmp r2, #0x0 - bxeq lr - and r1, r3, #0xff -_020DF5F0: - strb r1, [r0], #0x1 - subs r2, r2, #0x1 - bne _020DF5F0 - bx lr - - arm_func_start parse_format_printf -parse_format_printf: ; 0x020DF600 - stmdb sp!, {r4-r8,lr} - sub sp, sp, #0x10 - ldrsb r3, [r0, #0x1] - mov r4, #0x0 - mov r5, #0x1 - mov lr, r2 - strb r5, [sp, #0x0] - strb r4, [sp, #0x1] - strb r4, [sp, #0x2] - strb r4, [sp, #0x3] - strb r4, [sp, #0x4] - str r4, [sp, #0x8] - str r4, [sp, #0xc] - cmp r3, #0x25 - add r12, r0, #0x1 - bne _020DF65C - add r0, sp, #0x0 - strb r3, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF65C: - mov r2, #0x2 - mov r0, r4 - mov r5, r2 - mov r6, r4 - mov r7, #0x1 -_020DF670: - mov r8, r7 - cmp r3, #0x2b - bgt _020DF6A0 - bge _020DF6C8 - cmp r3, #0x23 - bgt _020DF6F8 - cmp r3, #0x20 - blt _020DF6F8 - beq _020DF6D0 - cmp r3, #0x23 - beq _020DF6E0 - b _020DF6F8 -_020DF6A0: - cmp r3, #0x30 - bgt _020DF6F8 - cmp r3, #0x2d - blt _020DF6F8 - beq _020DF6C0 - cmp r3, #0x30 - beq _020DF6E8 - b _020DF6F8 -_020DF6C0: - strb r6, [sp, #0x0] - b _020DF6FC -_020DF6C8: - strb r7, [sp, #0x1] - b _020DF6FC -_020DF6D0: - ldrb r4, [sp, #0x1] - cmp r4, #0x1 - strneb r5, [sp, #0x1] - b _020DF6FC -_020DF6E0: - strb r7, [sp, #0x3] - b _020DF6FC -_020DF6E8: - ldrb r4, [sp, #0x0] - cmp r4, #0x0 - strneb r2, [sp, #0x0] - b _020DF6FC -_020DF6F8: - mov r8, r0 -_020DF6FC: - cmp r8, #0x0 - ldrnesb r3, [r12, #0x1]! - bne _020DF670 - cmp r3, #0x2a - bne _020DF744 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - str r0, [sp, #0x8] - cmp r0, #0x0 - bge _020DF73C - rsb r0, r0, #0x0 - mov r2, #0x0 - strb r2, [sp, #0x0] - str r0, [sp, #0x8] -_020DF73C: - ldrsb r3, [r12, #0x1]! - b _020DF794 -_020DF744: - ldr r4, _020DFB88 ; =UNK_0210430C - mov r5, #0x0 - mov r0, #0xa - b _020DF768 -_020DF754: - ldr r2, [sp, #0x8] - sub r3, r3, #0x30 - mla r6, r2, r0, r3 - ldrsb r3, [r12, #0x1]! - str r6, [sp, #0x8] -_020DF768: - cmp r3, #0x0 - blt _020DF778 - cmp r3, #0x80 - blt _020DF780 -_020DF778: - mov r2, r5 - b _020DF78C -_020DF780: - mov r2, r3, lsl #0x1 - ldrh r2, [r4, r2] - and r2, r2, #0x8 -_020DF78C: - cmp r2, #0x0 - bne _020DF754 -_020DF794: - ldr r2, [sp, #0x8] - ldr r0, _020DFB8C ; =0x000001FD - cmp r2, r0 - ble _020DF7C4 - mov r1, #0xff - add r0, sp, #0x0 - strb r1, [sp, #0x5] - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add sp, sp, #0x10 - add r0, r12, #0x1 - ldmia sp!, {r4-r8,pc} -_020DF7C4: - cmp r3, #0x2e - bne _020DF858 - ldrsb r3, [r12, #0x1]! - mov r0, #0x1 - strb r0, [sp, #0x2] - cmp r3, #0x2a - bne _020DF808 - ldr r0, [r1, #0x0] - add r0, r0, #0x4 - str r0, [r1, #0x0] - ldr r0, [r0, #-0x4] - ldrsb r3, [r12, #0x1]! - str r0, [sp, #0xc] - cmp r0, #0x0 - movlt r0, #0x0 - strltb r0, [sp, #0x2] - b _020DF858 -_020DF808: - ldr r2, _020DFB88 ; =UNK_0210430C - mov r4, #0x0 - mov r0, #0xa - b _020DF82C -_020DF818: - ldr r1, [sp, #0xc] - sub r3, r3, #0x30 - mla r5, r1, r0, r3 - ldrsb r3, [r12, #0x1]! - str r5, [sp, #0xc] -_020DF82C: - cmp r3, #0x0 - blt _020DF83C - cmp r3, #0x80 - blt _020DF844 -_020DF83C: - mov r1, r4 - b _020DF850 -_020DF844: - mov r1, r3, lsl #0x1 - ldrh r1, [r2, r1] - and r1, r1, #0x8 -_020DF850: - cmp r1, #0x0 - bne _020DF818 -_020DF858: - cmp r3, #0x6c - mov r0, #0x1 - bgt _020DF890 - cmp r3, #0x68 - blt _020DF884 - beq _020DF8AC - cmp r3, #0x6a - beq _020DF8F8 - cmp r3, #0x6c - beq _020DF8C8 - b _020DF91C -_020DF884: - cmp r3, #0x4c - beq _020DF8EC - b _020DF91C -_020DF890: - cmp r3, #0x74 - bgt _020DF8A0 - beq _020DF904 - b _020DF91C -_020DF8A0: - cmp r3, #0x7a - beq _020DF910 - b _020DF91C -_020DF8AC: - ldrsb r1, [r12, #0x1] - mov r2, #0x2 - strb r2, [sp, #0x4] - cmp r1, #0x68 - streqb r0, [sp, #0x4] - ldreqsb r3, [r12, #0x1]! - b _020DF920 -_020DF8C8: - ldrsb r1, [r12, #0x1] - mov r2, #0x3 - strb r2, [sp, #0x4] - cmp r1, #0x6c - bne _020DF920 - mov r1, #0x4 - strb r1, [sp, #0x4] - ldrsb r3, [r12, #0x1]! - b _020DF920 -_020DF8EC: - mov r1, #0x9 - strb r1, [sp, #0x4] - b _020DF920 -_020DF8F8: - mov r1, #0x6 - strb r1, [sp, #0x4] - b _020DF920 -_020DF904: - mov r1, #0x8 - strb r1, [sp, #0x4] - b _020DF920 -_020DF910: - mov r1, #0x7 - strb r1, [sp, #0x4] - b _020DF920 -_020DF91C: - mov r0, #0x0 -_020DF920: - cmp r0, #0x0 - ldrnesb r3, [r12, #0x1]! - strb r3, [sp, #0x5] - cmp r3, #0x61 - bgt _020DF974 - bge _020DFA5C - cmp r3, #0x47 - bgt _020DF968 - subs r0, r3, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020DFB68 - b _020DFA5C - b _020DFB68 - b _020DFB68 - b _020DFB68 - b _020DFAA4 - b _020DFA24 - b _020DFA94 -_020DF968: - cmp r3, #0x58 - beq _020DF9E8 - b _020DFB68 -_020DF974: - cmp r3, #0x63 - bgt _020DF984 - beq _020DFB04 - b _020DFB68 -_020DF984: - sub r0, r3, #0x64 - cmp r0, #0x14 - addls pc, pc, r0, lsl #0x2 - b _020DFB68 -_020DF994: - 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 - moveq r0, #0xff - streqb r0, [sp, #0x5] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020DFB70 - ldrb r0, [sp, #0x0] - cmp r0, #0x2 - moveq r0, #0x1 - streqb r0, [sp, #0x0] - b _020DFB70 -_020DFA24: - 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 - moveq r0, #0xd - streq r0, [sp, #0xc] - 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] - b _020DFB70 -_020DFA94: - 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 - moveq r0, #0x5 - streqb r0, [sp, #0x4] - beq _020DFB70 - ldrb r0, [sp, #0x2] - cmp r0, #0x0 - cmpeq r1, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x5] - b _020DFB70 -_020DFB30: - 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] -_020DFB70: - add r0, sp, #0x0 - ldmia r0, {r0-r3} - stmia lr, {r0-r3} - add r0, r12, #0x1 - add sp, sp, #0x10 - ldmia sp!, {r4-r8,pc} - .balign 4 -_020DFB88: .word UNK_0210430C -_020DFB8C: .word 0x000001FD - - arm_func_start long2str -long2str: ; 0x020DFB90 - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - movs r10, r0 - mov r0, #0x0 - mov r5, r1 - str r0, [sp, #0xc] - ldr r7, [sp, #0x4c] - mov r6, r0 - strb r0, [r5, #-0x1]! - ldrb r0, [sp, #0x43] - str r1, [sp, #0x0] - ldrb r8, [sp, #0x45] - str r0, [sp, #0x4] - ldr r0, [sp, #0x48] - ldrb r11, [sp, #0x41] - str r0, [sp, #0x8] - cmpeq r7, #0x0 - bne _020DFC04 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFBF0 - cmp r8, #0x6f - beq _020DFC04 -_020DFBF0: - add sp, sp, #0x10 - mov r0, r5 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFC04: - cmp r8, #0x69 - bgt _020DFC2C - bge _020DFC60 - cmp r8, #0x58 - bgt _020DFC20 - beq _020DFC8C - b _020DFC94 -_020DFC20: - cmp r8, #0x64 - beq _020DFC60 - b _020DFC94 -_020DFC2C: - cmp r8, #0x6f - bgt _020DFC40 - moveq r4, #0x8 - moveq r11, #0x0 - b _020DFC94 -_020DFC40: - cmp r8, #0x78 - bgt _020DFC94 - cmp r8, #0x75 - blt _020DFC94 - beq _020DFC80 - cmp r8, #0x78 - beq _020DFC8C - b _020DFC94 -_020DFC60: - cmp r10, #0x0 - mov r4, #0xa - bge _020DFC94 - mov r0, #0x1 - cmp r10, #0x80000000 - rsbne r10, r10, #0x0 - str r0, [sp, #0xc] - b _020DFC94 -_020DFC80: - mov r4, #0xa - mov r11, #0x0 - b _020DFC94 -_020DFC8C: - mov r4, #0x10 - mov r11, #0x0 -_020DFC94: - mov r0, r10 - mov r1, r4 - bl _u32_div_f - mov r9, r1 - mov r0, r10 - mov r1, r4 - bl _u32_div_f - cmp r9, #0xa - mov r10, r0 - addlt r9, r9, #0x30 - blt _020DFCCC - cmp r8, #0x78 - addeq r9, r9, #0x57 - addne r9, r9, #0x37 -_020DFCCC: - cmp r10, #0x0 - strb r9, [r5, #-0x1]! - add r6, r6, #0x1 - bne _020DFC94 - cmp r4, #0x8 - bne _020DFD00 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r5, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r5, #-0x1]! - addne r6, r6, #0x1 -_020DFD00: - ldrb r0, [sp, #0x40] - cmp r0, #0x2 - bne _020DFD34 - ldr r0, [sp, #0xc] - ldr r7, [sp, #0x8] - cmp r0, #0x0 - cmpeq r11, #0x0 - subne r7, r7, #0x1 - cmp r4, #0x10 - bne _020DFD34 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - subne r7, r7, #0x2 -_020DFD34: - ldr r0, [sp, #0x0] - sub r1, r0, r5 - ldr r0, _020DFDD8 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x10 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - cmp r6, r7 - bge _020DFD78 - mov r0, #0x30 -_020DFD68: - add r6, r6, #0x1 - cmp r6, r7 - strb r0, [r5, #-0x1]! - blt _020DFD68 -_020DFD78: - cmp r4, #0x10 - bne _020DFD94 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r5, #-0x1] - strneb r0, [r5, #-0x2]! -_020DFD94: - ldr r0, [sp, #0xc] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r5, #-0x1]! - bne _020DFDC4 - cmp r11, #0x1 - moveq r0, #0x2b - streqb r0, [r5, #-0x1]! - beq _020DFDC4 - cmp r11, #0x2 - moveq r0, #0x20 - streqb r0, [r5, #-0x1]! -_020DFDC4: - mov r0, r5 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020DFDD8: .word 0x000001FD - - arm_func_start longlong2str -longlong2str: ; 0x020DFDDC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x18 - mov r9, r1 - mov r1, #0x0 - mov r10, r0 - mov r6, r2 - mov r0, r1 - strb r0, [r6, #-0x1]! - ldr r0, [sp, #0x58] - cmp r9, #0x0 - str r0, [sp, #0x10] - ldrb r0, [sp, #0x4f] - cmpeq r10, #0x0 - str r2, [sp, #0x0] - str r0, [sp, #0x4] - ldr r0, [sp, #0x54] - str r1, [sp, #0x14] - str r0, [sp, #0x8] - ldrb r0, [sp, #0x4d] - mov r7, r1 - ldrb r8, [sp, #0x51] - str r0, [sp, #0xc] - ldreq r0, [sp, #0x10] - cmpeq r0, #0x0 - bne _020DFE6C - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _020DFE58 - cmp r8, #0x6f - beq _020DFE6C -_020DFE58: - add sp, sp, #0x18 - mov r0, r6 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr -_020DFE6C: - cmp r8, #0x69 - bgt _020DFE94 - bge _020DFEC4 - cmp r8, #0x58 - bgt _020DFE88 - beq _020DFF18 - b _020DFF24 -_020DFE88: - cmp r8, #0x64 - beq _020DFEC4 - b _020DFF24 -_020DFE94: - cmp r8, #0x6f - bgt _020DFEA4 - beq _020DFEF8 - b _020DFF24 -_020DFEA4: - cmp r8, #0x78 - bgt _020DFF24 - cmp r8, #0x75 - blt _020DFF24 - beq _020DFF08 - cmp r8, #0x78 - beq _020DFF18 - b _020DFF24 -_020DFEC4: - subs r0, r10, #0x0 - sbcs r0, r9, #0x0 - mov r11, #0xa - mov r5, #0x0 - bge _020DFF24 - cmp r9, #0x80000000 - cmpeq r10, r5 - beq _020DFEEC - rsbs r10, r10, #0x0 - rsc r9, r9, #0x0 -_020DFEEC: - mov r0, #0x1 - str r0, [sp, #0x14] - b _020DFF24 -_020DFEF8: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x8 - b _020DFF24 -_020DFF08: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0xa - b _020DFF24 -_020DFF18: - mov r5, #0x0 - str r5, [sp, #0xc] - mov r11, #0x10 -_020DFF24: - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ull_mod - mov r4, r0 - mov r0, r10 - mov r1, r9 - mov r2, r11 - mov r3, r5 - bl _ll_udiv - mov r10, r0 - cmp r4, #0xa - mov r9, r1 - addlt r0, r4, #0x30 - blt _020DFF70 - cmp r8, #0x78 - addeq r0, r4, #0x57 - addne r0, r4, #0x37 -_020DFF70: - strb r0, [r6, #-0x1]! - mov r0, #0x0 - cmp r9, r0 - cmpeq r10, r0 - add r7, r7, #0x1 - bne _020DFF24 - cmp r5, #0x0 - cmpeq r11, #0x8 - bne _020DFFB0 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r6, #0x0] - cmpne r0, #0x30 - movne r0, #0x30 - strneb r0, [r6, #-0x1]! - addne r7, r7, #0x1 -_020DFFB0: - ldrb r0, [sp, #0x4c] - cmp r0, #0x2 - bne _020E0000 - ldr r0, [sp, #0x8] - str r0, [sp, #0x10] - ldr r0, [sp, #0x14] - cmp r0, #0x0 - ldreq r0, [sp, #0xc] - cmpeq r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x1 - strne r0, [sp, #0x10] - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0000 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - subne r0, r0, #0x2 - strne r0, [sp, #0x10] -_020E0000: - ldr r0, [sp, #0x0] - ldr r1, _020E00B8 ; =0x000001FD - sub r2, r0, r6 - ldr r0, [sp, #0x10] - add r0, r0, r2 - cmp r0, r1 - addgt sp, sp, #0x18 - movgt r0, #0x0 - ldmgtia sp!, {r3-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldr r0, [sp, #0x10] - cmp r7, r0 - bge _020E0050 - mov r1, #0x30 -_020E003C: - ldr r0, [sp, #0x10] - add r7, r7, #0x1 - cmp r7, r0 - strb r1, [r6, #-0x1]! - blt _020E003C -_020E0050: - cmp r5, #0x0 - cmpeq r11, #0x10 - bne _020E0070 - ldr r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x30 - strneb r8, [r6, #-0x1] - strneb r0, [r6, #-0x2]! -_020E0070: - ldr r0, [sp, #0x14] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r6, #-0x1]! - bne _020E00A4 - ldr r0, [sp, #0xc] - cmp r0, #0x1 - moveq r0, #0x2b - streqb r0, [r6, #-0x1]! - beq _020E00A4 - cmp r0, #0x2 - moveq r0, #0x20 - streqb r0, [r6, #-0x1]! -_020E00A4: - mov r0, r6 - add sp, sp, #0x18 - ldmia sp!, {r3-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E00B8: .word 0x000001FD - - arm_func_start double2hex -double2hex: ; 0x020E00BC - stmdb sp!, {r0-r3} - stmdb sp!, {r3-r10,lr} - sub sp, sp, #0x44 - ldr r7, [sp, #0x80] - ldr r0, _020E056C ; =0x000001FD - mov r8, r2 - cmp r7, r0 - ldrb r6, [sp, #0x79] - ldrb r5, [sp, #0x77] - ldrb r4, [sp, #0x75] - ldr r1, [sp, #0x68] - ldr r2, [sp, #0x6c] - addgt sp, sp, #0x44 - movgt r0, #0x0 - ldmgtia sp!, {r3-r10,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r10, #0x0 - mov r9, #0x20 - add r0, sp, #0x8 - add r3, sp, #0xc - strb r10, [sp, #0x8] - strh r9, [sp, #0xa] - bl __num2dec_internal2 - ldr r0, [sp, #0x68] - ldr r1, [sp, #0x6c] - bl fabs - mov r2, r0 - mov r0, r10 - mov r3, r1 - mov r1, r0 - bl _deq - bne _020E0188 - ldr r3, _020E0570 ; =UNK_02106DA0 - sub r0, r8, #0x6 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - add sp, sp, #0x44 - strb r2, [r8, #-0x6] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r2, [r3, #0x4] - ldrb r1, [r3, #0x5] - strb r2, [r0, #0x4] - strb r1, [r0, #0x5] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0188: - ldrb r0, [sp, #0x11] - cmp r0, #0x49 - bne _020E0298 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0224 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E01E8 - ldr r3, _020E0574 ; =UNK_02106DA8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E01E8: - ldr r3, _020E0578 ; =UNK_02106DB0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0224: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0264 - ldr r3, _020E057C ; =UNK_02106DB8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0264: - ldr r3, _020E0580 ; =UNK_02106DBC - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0298: - cmp r0, #0x4e - bne _020E03A4 - ldrsb r0, [sp, #0xc] - cmp r0, #0x0 - beq _020E0330 - cmp r6, #0x41 - sub r0, r8, #0x5 - bne _020E02F4 - ldr r3, _020E0584 ; =UNK_02106DC0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E02F4: - ldr r3, _020E0588 ; =UNK_02106DC8 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0330: - cmp r6, #0x41 - sub r0, r8, #0x4 - bne _020E0370 - ldr r3, _020E058C ; =UNK_02106DD0 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E0370: - ldr r3, _020E0590 ; =UNK_02106DD4 - add sp, sp, #0x44 - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr -_020E03A4: - mov r3, r10 - mov r1, #0x1 - mov r0, #0x64 - add r9, sp, #0x68 - strb r1, [sp, #0x34] - strb r1, [sp, #0x35] - strb r3, [sp, #0x36] - strb r3, [sp, #0x37] - strb r3, [sp, #0x38] - str r3, [sp, #0x3c] - str r1, [sp, #0x40] - strb r0, [sp, #0x39] -_020E03D4: - rsb r1, r3, #0x7 - ldrsb r2, [r9, r3] - ldrsb r0, [r9, r1] - strb r0, [r9, r3] - add r3, r3, #0x1 - strb r2, [r9, r1] - cmp r3, #0x4 - blt _020E03D4 - ldrb r0, [sp, #0x69] - ldrb r1, [sp, #0x68] - ldr sb, _020E0594 ; =0x000007FF - mov r0, r0, lsl #0x11 - orr r1, r0, r1, lsl #0x19 - add r0, sp, #0x34 - and lr, r9, r1, lsr #0x15 - sub r12, sp, #0x8 - ldmia r0, {r0-r3} - stmia r12, {r0-r3} - rsb r0, r9, #0x400 - mov r1, r8 - add r0, lr, r0 - ldmia r12, {r2-r3} - bl long2str - cmp r6, #0x61 - moveq r1, #0x70 - movne r1, #0x50 - strb r1, [r0, #-0x1]! - mov r1, r7, lsl #0x2 - mov lr, r7 - cmp r7, #0x1 - add r8, r1, #0xb - add r12, sp, #0x68 - blt _020E04E4 - mov r9, #0x30 -_020E045C: - cmp r8, #0x40 - bge _020E04CC - ldrb r1, [r12, r8, asr #0x3] - and r2, r8, #0x7 - rsb r3, r2, #0x7 - mov r2, r1, asr r3 - sub r10, r8, #0x4 - bic r1, r8, #0x7 - bic r10, r10, #0x7 - cmp r1, r10 - add r10, r12, r8, asr #0x3 - and r1, r2, #0xff - beq _020E04A0 - ldrb r2, [r10, #-0x1] - mov r2, r2, lsl #0x8 - orr r1, r1, r2, asr r3 - and r1, r1, #0xff -_020E04A0: - and r1, r1, #0xf - cmp r1, #0xa - addcc r1, r1, #0x30 - andcc r1, r1, #0xff - blo _020E04D0 - cmp r6, #0x61 - addeq r1, r1, #0x57 - andeq r1, r1, #0xff - addne r1, r1, #0x37 - andne r1, r1, #0xff - b _020E04D0 -_020E04CC: - mov r1, r9 -_020E04D0: - sub lr, lr, #0x1 - cmp lr, #0x1 - strb r1, [r0, #-0x1]! - sub r8, r8, #0x4 - bge _020E045C -_020E04E4: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r0, #-0x1]! - mov r1, #0x31 - strb r1, [r0, #-0x1] - cmp r6, #0x61 - moveq r1, #0x78 - movne r1, #0x58 - strb r1, [r0, #-0x2]! - mov r1, #0x30 - strb r1, [r0, #-0x1]! - ldrsb r1, [sp, #0xc] - cmp r1, #0x0 - movne r1, #0x2d - strneb r1, [r0, #-0x1]! - addne sp, sp, #0x44 - ldmneia sp!, {r3-r10,lr} - addne sp, sp, #0x10 - bxne lr - cmp r4, #0x1 - moveq r1, #0x2b - streqb r1, [r0, #-0x1]! - addeq sp, sp, #0x44 - ldmeqia sp!, {r3-r10,lr} - addeq sp, sp, #0x10 - bxeq lr - cmp r4, #0x2 - moveq r1, #0x20 - streqb r1, [r0, #-0x1]! - add sp, sp, #0x44 - ldmia sp!, {r3-r10,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E056C: .word 0x000001FD -_020E0570: .word UNK_02106DA0 -_020E0574: .word UNK_02106DA8 -_020E0578: .word UNK_02106DB0 -_020E057C: .word UNK_02106DB8 -_020E0580: .word UNK_02106DBC -_020E0584: .word UNK_02106DC0 -_020E0588: .word UNK_02106DC8 -_020E058C: .word UNK_02106DD0 -_020E0590: .word UNK_02106DD4 -_020E0594: .word 0x000007FF - - arm_func_start round_decimal -round_decimal: ; 0x020E0598 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - bge _020E05C0 -_020E05A4: - mov r1, #0x0 - strh r1, [r0, #0x2] - mov r1, #0x1 - strb r1, [r0, #0x4] - mov r1, #0x30 - strb r1, [r0, #0x5] - ldmia sp!, {r4,pc} -_020E05C0: - ldrb lr, [r0, #0x4] - cmp r1, lr - ldmgeia sp!, {r4,pc} - 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 - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x2c - ldr r7, [sp, #0x68] - ldr r3, _020E0DF4 ; =0x000001FD - ldrb r6, [sp, #0x61] - ldrb r5, [sp, #0x5f] - ldrb r4, [sp, #0x5d] - cmp r7, r3 - mov r10, r0 - mov r8, r1 - mov r9, r2 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - mov r12, #0x0 - mov r11, #0x20 - add r0, sp, #0x0 - add r3, sp, #0x4 - mov r1, r10 - mov r2, r8 - strb r12, [sp, #0x0] - strh r11, [sp, #0x2] - bl __num2dec_internal2 - ldrb r0, [sp, #0x8] - add r1, sp, #0x9 - add r0, r1, r0 - b _020E074C -_020E0734: - ldrb r2, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r2, r2, #0x1 - add r1, r1, #0x1 - strb r2, [sp, #0x8] - strh r1, [sp, #0x6] -_020E074C: - ldrb r1, [sp, #0x8] - cmp r1, #0x1 - bls _020E0764 - ldrsb r1, [r0, #-0x1]! - cmp r1, #0x30 - beq _020E0734 -_020E0764: - ldrb r0, [sp, #0x9] - cmp r0, #0x30 - beq _020E0784 - cmp r0, #0x49 - beq _020E0790 - cmp r0, #0x4e - beq _020E08F0 - b _020E0A44 -_020E0784: - mov r0, #0x0 - strh r0, [sp, #0x6] - b _020E0A44 -_020E0790: - mov r2, #0x0 - mov r0, r10 - mov r1, r8 - mov r3, r2 - bl _dls - bhs _020E0854 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E07BC - cmp r6, #0x80 - blt _020E07C4 -_020E07BC: - mov r1, #0x0 - b _020E07D4 -_020E07C4: - ldr r1, _020E0DF8 ; =UNK_0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E07D4: - cmp r1, #0x0 - beq _020E0818 - ldr r3, _020E0DFC ; =UNK_02106DA8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0818: - ldr r3, _020E0E00 ; =UNK_02106DB0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0854: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E0868 - cmp r6, #0x80 - blt _020E0870 -_020E0868: - mov r1, #0x0 - b _020E0880 -_020E0870: - ldr r1, _020E0DF8 ; =UNK_0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0880: - cmp r1, #0x0 - beq _020E08BC - ldr r3, _020E0E04 ; =UNK_02106DB8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08BC: - ldr r3, _020E0E08 ; =UNK_02106DBC - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E08F0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - beq _020E09A8 - cmp r6, #0x0 - sub r0, r9, #0x5 - blt _020E0910 - cmp r6, #0x80 - blt _020E0918 -_020E0910: - mov r1, #0x0 - b _020E0928 -_020E0918: - ldr r1, _020E0DF8 ; =UNK_0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E0928: - cmp r1, #0x0 - beq _020E096C - ldr r3, _020E0E0C ; =UNK_02106DC0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E096C: - ldr r3, _020E0E10 ; =UNK_02106DC8 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldrb r1, [r3, #0x4] - strb r1, [r0, #0x4] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E09A8: - cmp r6, #0x0 - sub r0, r9, #0x4 - blt _020E09BC - cmp r6, #0x80 - blt _020E09C4 -_020E09BC: - mov r1, #0x0 - b _020E09D4 -_020E09C4: - ldr r1, _020E0DF8 ; =UNK_0210430C - mov r2, r6, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x200 -_020E09D4: - cmp r1, #0x0 - beq _020E0A10 - ldr r3, _020E0E14 ; =UNK_02106DD0 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A10: - ldr r3, _020E0E18 ; =UNK_02106DD4 - add sp, sp, #0x2c - ldrb r2, [r3, #0x0] - ldrb r1, [r3, #0x1] - strb r2, [r0, #0x0] - strb r1, [r0, #0x1] - ldrb r2, [r3, #0x2] - ldrb r1, [r3, #0x3] - strb r2, [r0, #0x2] - strb r1, [r0, #0x3] - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0A44: - ldrb r0, [sp, #0x8] - ldrsh r1, [sp, #0x6] - sub r8, r9, #0x1 - sub r0, r0, #0x1 - add r0, r1, r0 - strh r0, [sp, #0x6] - mov r0, #0x0 - strb r0, [r8, #0x0] - cmp r6, #0x65 - bgt _020E0A98 - bge _020E0B24 - cmp r6, #0x47 - bgt _020E0DE0 - cmp r6, #0x45 - blt _020E0DE0 - beq _020E0B24 - cmp r6, #0x46 - beq _020E0C6C - cmp r6, #0x47 - beq _020E0AB0 - b _020E0DE0 -_020E0A98: - cmp r6, #0x66 - bgt _020E0AA8 - beq _020E0C6C - b _020E0DE0 -_020E0AA8: - cmp r6, #0x67 - bne _020E0DE0 -_020E0AB0: - ldrb r0, [sp, #0x8] - cmp r0, r7 - ble _020E0AC8 - add r0, sp, #0x4 - mov r1, r7 - bl round_decimal -_020E0AC8: - ldrsh r2, [sp, #0x6] - mvn r0, #0x3 - cmp r2, r0 - blt _020E0AE0 - cmp r2, r7 - blt _020E0B00 -_020E0AE0: - cmp r5, #0x0 - ldreqb r0, [sp, #0x8] - subne r7, r7, #0x1 - subeq r7, r0, #0x1 - cmp r6, #0x67 - moveq r6, #0x65 - movne r6, #0x45 - b _020E0B24 -_020E0B00: - cmp r5, #0x0 - addne r0, r2, #0x1 - subne r7, r7, r0 - bne _020E0C6C - ldrb r1, [sp, #0x8] - add r0, r2, #0x1 - subs r7, r1, r0 - movmi r7, #0x0 - b _020E0C6C -_020E0B24: - ldrb r0, [sp, #0x8] - add r1, r7, #0x1 - cmp r0, r1 - ble _020E0B3C - add r0, sp, #0x4 - bl round_decimal -_020E0B3C: - ldrsh lr, [sp, #0x6] - mov r11, #0x2b - mov r10, #0x0 - cmp lr, #0x0 - rsblt lr, lr, #0x0 - movlt r11, #0x2d - ldr r3, _020E0E1C ; =0x66666667 - mov r0, #0xa - b _020E0B90 -_020E0B60: - mov r1, lr, lsr #0x1f - smull r2, r12, r3, lr - add r12, r1, r12, asr #0x2 - smull r1, r2, r0, r12 - sub r12, lr, r1 - add r1, r12, #0x30 - strb r1, [r8, #-0x1]! - mov r2, lr - smull r1, lr, r3, r2 - mov r1, r2, lsr #0x1f - add lr, r1, lr, asr #0x2 - add r10, r10, #0x1 -_020E0B90: - cmp lr, #0x0 - bne _020E0B60 - cmp r10, #0x2 - blt _020E0B60 - strb r11, [r8, #-0x1] - strb r6, [r8, #-0x2]! - sub r1, r9, r8 - ldr r0, _020E0DF4 ; =0x000001FD - add r1, r7, r1 - cmp r1, r0 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - ldrb r1, [sp, #0x8] - add r0, r7, #0x1 - cmp r1, r0 - bge _020E0BFC - add r0, r7, #0x2 - sub r0, r0, r1 - subs r1, r0, #0x1 - beq _020E0BFC - mov r0, #0x30 -_020E0BF0: - strb r0, [r8, #-0x1]! - subs r1, r1, #0x1 - bne _020E0BF0 -_020E0BFC: - ldrb r1, [sp, #0x8] - add r0, sp, #0x9 - add r2, r0, r1 - subs r1, r1, #0x1 - beq _020E0C20 -_020E0C10: - ldrsb r0, [r2, #-0x1]! - subs r1, r1, #0x1 - strb r0, [r8, #-0x1]! - bne _020E0C10 -_020E0C20: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r0, #0x2e - strneb r0, [r8, #-0x1]! - ldrb r0, [sp, #0x9] - strb r0, [r8, #-0x1]! - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! - b _020E0DE0 -_020E0C6C: - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 - cmp r1, r7 - ble _020E0CAC - sub r1, r1, r7 - add r0, sp, #0x4 - sub r1, r2, r1 - bl round_decimal - ldrsh r3, [sp, #0x6] - ldrb r2, [sp, #0x8] - sub r0, r2, r3 - subs r1, r0, #0x1 - movmi r1, #0x0 -_020E0CAC: - adds r0, r3, #0x1 - movmi r0, #0x0 - ldr r3, _020E0DF4 ; =0x000001FD - add r6, r0, r1 - cmp r6, r3 - addgt sp, sp, #0x2c - movgt r0, #0x0 - ldmgtia sp!, {r4-r11,lr} - addgt sp, sp, #0x10 - bxgt lr - add r3, sp, #0x9 - sub r6, r7, r1 - cmp r6, #0x0 - add r2, r3, r2 - mov r9, #0x0 - ble _020E0D00 - mov r3, #0x30 -_020E0CF0: - add r9, r9, #0x1 - cmp r9, r6 - strb r3, [r8, #-0x1]! - blt _020E0CF0 -_020E0D00: - mov r6, #0x0 - b _020E0D14 -_020E0D08: - ldrsb r3, [r2, #-0x1]! - add r6, r6, #0x1 - strb r3, [r8, #-0x1]! -_020E0D14: - cmp r6, r1 - ldrltb r3, [sp, #0x8] - cmplt r6, r3 - blt _020E0D08 - cmp r6, r1 - bge _020E0D40 - mov r3, #0x30 -_020E0D30: - add r6, r6, #0x1 - cmp r6, r1 - strb r3, [r8, #-0x1]! - blt _020E0D30 -_020E0D40: - cmp r7, #0x0 - cmpeq r5, #0x0 - movne r1, #0x2e - strneb r1, [r8, #-0x1]! - cmp r0, #0x0 - beq _020E0DA8 - ldrb r1, [sp, #0x8] - mov r5, #0x0 - sub r1, r0, r1 - cmp r1, #0x0 - ble _020E0D88 - mov r3, #0x30 -_020E0D70: - strb r3, [r8, #-0x1]! - ldrb r1, [sp, #0x8] - add r5, r5, #0x1 - sub r1, r0, r1 - cmp r5, r1 - blt _020E0D70 -_020E0D88: - cmp r5, r0 - bge _020E0DB0 -_020E0D90: - ldrsb r1, [r2, #-0x1]! - add r5, r5, #0x1 - cmp r5, r0 - strb r1, [r8, #-0x1]! - blt _020E0D90 - b _020E0DB0 -_020E0DA8: - mov r0, #0x30 - strb r0, [r8, #-0x1]! -_020E0DB0: - ldrsb r0, [sp, #0x4] - cmp r0, #0x0 - movne r0, #0x2d - strneb r0, [r8, #-0x1]! - bne _020E0DE0 - cmp r4, #0x1 - moveq r0, #0x2b - streqb r0, [r8, #-0x1]! - beq _020E0DE0 - cmp r4, #0x2 - moveq r0, #0x20 - streqb r0, [r8, #-0x1]! -_020E0DE0: - mov r0, r8 - add sp, sp, #0x2c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E0DF4: .word 0x000001FD -_020E0DF8: .word UNK_0210430C -_020E0DFC: .word UNK_02106DA8 -_020E0E00: .word UNK_02106DB0 -_020E0E04: .word UNK_02106DB8 -_020E0E08: .word UNK_02106DBC -_020E0E0C: .word UNK_02106DC0 -_020E0E10: .word UNK_02106DC8 -_020E0E14: .word UNK_02106DD0 -_020E0E18: .word UNK_02106DD4 -_020E0E1C: .word 0x66666667 - - arm_func_start __pformatter -__pformatter: - stmdb sp!, {r0-r3} - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x22c - mov r3, #0x20 - mov r11, r2 - strb r3, [sp, #0x19] - ldrsb r2, [r11, #0x0] - mov r9, r0 - mov r8, r1 - cmp r2, #0x0 - mov r10, #0x0 - beq _020E1628 -_020E0E50: - mov r0, r11 - mov r1, #0x25 - bl strchr - str r0, [sp, #0xc] - cmp r0, #0x0 - bne _020E0EA4 - mov r0, r11 - bl strlen - movs r2, r0 - add r10, r10, r2 - beq _020E1628 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - bne _020E1628 - add sp, sp, #0x22c - mvn r0, #0x0 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E0EA4: - subs r2, r0, r11 - add r10, r10, r2 - beq _020E0ED4 - mov r0, r8 - mov r1, r11 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E0ED4: - ldr r0, [sp, #0xc] - add r1, sp, #0x25c - add r2, sp, #0x1c - bl parse_format_printf - ldrb r1, [sp, #0x21] - mov r11, r0 - cmp r1, #0x61 - bgt _020E0F40 - bge _020E12A4 - cmp r1, #0x47 - bgt _020E0F34 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E0F28 - b _020E12A4 - b _020E148C - b _020E148C - b _020E148C - b _020E123C - b _020E123C - b _020E123C -_020E0F28: - cmp r1, #0x25 - beq _020E1478 - b _020E148C -_020E0F34: - cmp r1, #0x58 - beq _020E1100 - b _020E148C -_020E0F40: - cmp r1, #0x75 - bgt _020E0FA8 - subs r0, r1, #0x64 - addpl pc, pc, r0, lsl #0x2 - b _020E0F9C - b _020E0FC0 - b _020E123C - b _020E123C - b _020E123C - b _020E148C - b _020E0FC0 - b _020E148C - b _020E148C - b _020E148C - b _020E148C - b _020E13CC - b _020E1100 - b _020E148C - b _020E148C - b _020E148C - b _020E130C - b _020E148C - b _020E1100 -_020E0F9C: - cmp r1, #0x63 - beq _020E1458 - b _020E148C -_020E0FA8: - cmp r1, #0x78 - bgt _020E0FB8 - beq _020E1100 - b _020E148C -_020E0FB8: - cmp r1, #0xff - b _020E148C -_020E0FC0: - 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 - bne _020E1120 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E1120: - cmp r0, #0x4 - bne _020E1148 - 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 _020E11B8 -_020E1148: - cmp r0, #0x6 - bne _020E1170 - 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 _020E11B8 -_020E1170: - cmp r0, #0x7 - bne _020E118C - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E118C: - cmp r0, #0x8 - bne _020E11A8 - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] - b _020E11B8 -_020E11A8: - ldr r1, [sp, #0x25c] - add r1, r1, #0x4 - str r1, [sp, #0x25c] - ldr r5, [r1, #-0x4] -_020E11B8: - cmp r0, #0x2 - moveq r1, r5, lsl #0x10 - moveq r5, r1, lsr #0x10 - cmp r0, #0x1 - andeq r5, r5, #0xff - cmp r0, #0x4 - cmpne r0, #0x6 - add r0, sp, #0x1c - bne _020E1208 - 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 _020E122C -_020E1208: - 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 -_020E122C: - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E123C: - 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 - ldrne r0, [sp, #0x25c] - addne r0, r0, #0x8 - strne r0, [sp, #0x25c] - bne _020E12C8 - ldr r0, [sp, #0x25c] - add r0, r0, #0x8 - str r0, [sp, #0x25c] -_020E12C8: - 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 double2hex - movs r7, r0 - beq _020E148C - add r0, sp, #0x200 - add r0, r0, #0x2b - sub r6, r0, r7 - b _020E14D8 -_020E130C: - 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 ; =UNK_02106DD8 - bl wcstombs - 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 ; =UNK_02106DDC - 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 - 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 - add r0, r0, #0x4 - str r0, [sp, #0x25c] - ldr r0, [r0, #-0x4] - mov r6, #0x1 - strb r0, [sp, #0x2c] - b _020E14D8 -_020E1478: - mov r0, #0x25 - strb r0, [sp, #0x2c] - add r7, sp, #0x2c - mov r6, #0x1 - b _020E14D8 -_020E148C: - ldr r0, [sp, #0xc] - bl strlen - movs r4, r0 - beq _020E14C4 - ldr r1, [sp, #0xc] - mov r0, r8 - mov r2, r4 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E14C4: - add sp, sp, #0x22c - add r0, r10, r4 - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr -_020E14D8: - ldrb r0, [sp, #0x1c] - mov r4, r6 - cmp r0, #0x0 - beq _020E158C - cmp r0, #0x2 - moveq r0, #0x30 - movne r0, #0x20 - strb r0, [sp, #0x19] - ldrsb r0, [r7, #0x0] - cmp r0, #0x2b - cmpne r0, #0x2d - cmpne r0, #0x20 - bne _020E1548 - ldrsb r0, [sp, #0x19] - cmp r0, #0x30 - bne _020E1548 - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - add r7, r7, #0x1 - sub r6, r6, #0x1 -_020E1548: - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E158C -_020E1554: - mov r0, r8 - add r1, sp, #0x19 - mov r2, #0x1 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E1554 -_020E158C: - cmp r6, #0x0 - beq _020E15BC - mov r0, r8 - mov r1, r7 - mov r2, r6 - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr -_020E15BC: - ldrb r0, [sp, #0x1c] - cmp r0, #0x0 - bne _020E1618 - ldr r0, [sp, #0x24] - cmp r4, r0 - bge _020E1618 - mov r6, #0x20 - add r7, sp, #0x18 -_020E15DC: - mov r0, r8 - mov r1, r7 - mov r2, #0x1 - strb r6, [sp, #0x18] - blx r9 - cmp r0, #0x0 - addeq sp, sp, #0x22c - mvneq r0, #0x0 - ldmeqia sp!, {r4-r11,lr} - addeq sp, sp, #0x10 - bxeq lr - ldr r0, [sp, #0x24] - add r4, r4, #0x1 - cmp r4, r0 - blt _020E15DC -_020E1618: - add r10, r10, r4 -_020E161C: - ldrsb r0, [r11, #0x0] - cmp r0, #0x0 - bne _020E0E50 -_020E1628: - mov r0, r10 - add sp, sp, #0x22c - ldmia sp!, {r4-r11,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E163C: .word UNK_02106DD8 -_020E1640: .word UNK_02106DDC - - arm_func_start __FileWrite -__FileWrite: ; 0x020E1644 - stmdb sp!, {r3-r5,lr} - mov r5, r0 - mov r0, r1 - mov r3, r5 - mov r1, #0x1 - mov r4, r2 - bl __fwrite - cmp r4, r0 - movne r5, #0x0 - mov r0, r5 - ldmia sp!, {r3-r5,pc} - - arm_func_start __StringWrite -__StringWrite: ; 0x020E1670 - stmdb sp!, {r3-r5,lr} - mov r4, r0 - ldr r3, [r4, #0x8] - mov r5, r2 - ldr r2, [r4, #0x4] - add r0, r3, r5 - cmp r0, r2 - ldr r0, [r4, #0x0] - subhi r5, r2, r3 - mov r2, r5 - add r0, r0, r3 - bl memcpy - ldr r1, [r4, #0x8] - mov r0, #0x1 - add r1, r1, r5 - str r1, [r4, #0x8] - ldmia sp!, {r3-r5,pc} - - arm_func_start printf -printf: ; 0x020E16B4 - stmdb sp!, {r0-r3} - stmdb sp!, {r4,lr} - ldr r0, _020E17B4 ; =UNK_02106AA4 - mvn r1, #0x0 - bl fwide - cmp r0, #0x0 - mvnge r0, #0x0 - ldmgeia sp!, {r4,lr} - addge sp, sp, #0x10 - bxge lr - ldr r0, _020E17B8 ; =UNK_021D7118 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020E1710 - ldr r0, _020E17BC ; =OSi_ThreadInfo - ldr r1, _020E17C0 ; =UNK_021D7088 - ldr r2, [r0, #0x4] - ldr r0, _020E17C4 ; =UNK_021D70AC - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0xc] - str r2, [r0, #0xc] - b _020E1768 -_020E1710: - ldr r0, _020E17BC ; =OSi_ThreadInfo - ldr r1, _020E17C0 ; =UNK_021D7088 - ldr r0, [r0, #0x4] - ldr r1, [r1, #0xc] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020E1740 - ldr r0, _020E17C4 ; =UNK_021D70AC - ldr r1, [r0, #0xc] - add r1, r1, #0x1 - str r1, [r0, #0xc] - b _020E1768 -_020E1740: - ldr r0, _020E17B8 ; =UNK_021D7118 - bl OS_LockMutex - ldr r0, _020E17BC ; =OSi_ThreadInfo - ldr r1, _020E17C0 ; =UNK_021D7088 - ldr r2, [r0, #0x4] - ldr r0, _020E17C4 ; =UNK_021D70AC - 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 ; =UNK_02106AA4 - add r3, r3, #0x4 - bl __pformatter - ldr r1, _020E17C4 ; =UNK_021D70AC - mov r4, r0 - ldr r0, [r1, #0xc] - subs r0, r0, #0x1 - str r0, [r1, #0xc] - bne _020E17A4 - ldr r0, _020E17B8 ; =UNK_021D7118 - bl OS_UnlockMutex -_020E17A4: - mov r0, r4 - ldmia sp!, {r4,lr} - add sp, sp, #0x10 - bx lr - .balign 4 -_020E17B4: .word UNK_02106AA4 -_020E17B8: .word UNK_021D7118 -_020E17BC: .word OSi_ThreadInfo -_020E17C0: .word UNK_021D7088 -_020E17C4: .word UNK_021D70AC -_020E17C8: .word __FileWrite - - arm_func_start vsnprintf -vsnprintf: ; 0x020E17CC - stmdb sp!, {r4-r5,lr} - sub sp, sp, #0xc - mov r5, r0 - mov r4, r1 - mov r12, #0x0 - ldr r0, _020E1830 ; =__StringWrite - add r1, sp, #0x0 - str r5, [sp, #0x0] - str r4, [sp, #0x4] - str r12, [sp, #0x8] - bl __pformatter - cmp r5, #0x0 - addeq sp, sp, #0xc - ldmeqia sp!, {r4-r5,pc} - cmp r0, r4 - movcc r1, #0x0 - addcc sp, sp, #0xc - strccb r1, [r5, r0] - ldmccia sp!, {r4-r5,pc} - 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 -snprintf: ; 0x020E1834 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r3, sp, #0x10 - bic r3, r3, #0x3 - ldr r2, [sp, #0x10] - add r3, r3, #0x4 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start sprintf -sprintf: ; 0x020E185C - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r1, sp, #0xc - bic r1, r1, #0x3 - add r3, r1, #0x4 - ldr r2, [sp, #0xc] - mvn r1, #0x0 - bl vsnprintf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start qsort -qsort: ; 0x020E1888 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x10 - mov r9, r1 - cmp r9, #0x2 - mov r10, r0 - mov r8, r2 - mov r7, r3 - addcc sp, sp, #0x10 - ldmccia sp!, {r3-r11,pc} - 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} - 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 - add sp, sp, #0x10 - ldmia sp!, {r3-r11,pc} - - arm_func_start rand -rand: ; 0x020E19EC - ldr r2, _020E1A14 ; =UNK_02106DE0 - ldr r0, _020E1A18 ; =0x41C64E6D - ldr r3, [r2, #0x0] - ldr r1, _020E1A1C ; =0x00007FFF - mul r0, r3, r0 - add r0, r0, #0x39 - add r0, r0, #0x3000 - str r0, [r2, #0x0] - and r0, r1, r0, lsr #0x10 - bx lr - .balign 4 -_020E1A14: .word UNK_02106DE0 -_020E1A18: .word 0x41C64E6D -_020E1A1C: .word 0x00007FFF - - arm_func_start srand -srand: ; 0x020E1A20 - ldr r1, _020E1A2C ; =UNK_02106DE0 - str r0, [r1, #0x0] - bx lr - .balign 4 -_020E1A2C: .word UNK_02106DE0 - - arm_func_start parse_format_scanf -parse_format_scanf: ; 0x020E1A30 - stmdb sp!, {r3-r7,lr} - sub sp, sp, #0x28 - ldr r6, _020E1F20 ; =UNK_0210440C - add r5, sp, #0x0 - mov r7, r0 - mov lr, r1 - mov r4, r5 - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6!, {r0-r3} - stmia r5!, {r0-r3} - ldmia r6, {r0-r1} - stmia r5, {r0-r1} - ldrsb r0, [r7, #0x1] - add r12, r7, #0x1 - cmp r0, #0x25 - bne _020E1A9C - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1A9C: - cmp r0, #0x2a - moveq r0, #0x1 - streqb r0, [sp, #0x0] - ldreqsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1ABC - cmp r0, #0x80 - blt _020E1AC4 -_020E1ABC: - mov r1, #0x0 - b _020E1AD4 -_020E1AC4: - ldr r1, _020E1F24 ; =UNK_0210430C - mov r2, r0, lsl #0x1 - ldrh r1, [r1, r2] - and r1, r1, #0x8 -_020E1AD4: - cmp r1, #0x0 - beq _020E1B74 - mov r1, #0x0 - ldr r3, _020E1F24 ; =UNK_0210430C - str r1, [sp, #0x4] - mov r4, r1 - mov r1, #0xa -_020E1AF0: - ldr r2, [sp, #0x4] - sub r0, r0, #0x30 - mla r0, r2, r1, r0 - str r0, [sp, #0x4] - ldrsb r0, [r12, #0x1]! - cmp r0, #0x0 - blt _020E1B14 - cmp r0, #0x80 - blt _020E1B1C -_020E1B14: - mov r2, r4 - b _020E1B28 -_020E1B1C: - mov r2, r0, lsl #0x1 - ldrh r2, [r3, r2] - and r2, r2, #0x8 -_020E1B28: - cmp r2, #0x0 - bne _020E1AF0 - ldr r1, [sp, #0x4] - cmp r1, #0x0 - bne _020E1B6C - mov r0, #0xff - add r4, sp, #0x0 - strb r0, [sp, #0x3] - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add sp, sp, #0x28 - add r0, r12, #0x1 - ldmia sp!, {r3-r7,pc} -_020E1B6C: - mov r1, #0x1 - strb r1, [sp, #0x1] -_020E1B74: - cmp r0, #0x6c - mov r1, #0x1 - bgt _020E1BAC - cmp r0, #0x68 - blt _020E1BA0 - beq _020E1BC8 - cmp r0, #0x6a - beq _020E1C14 - cmp r0, #0x6c - beq _020E1BE4 - b _020E1C38 -_020E1BA0: - cmp r0, #0x4c - beq _020E1C08 - b _020E1C38 -_020E1BAC: - cmp r0, #0x74 - bgt _020E1BBC - beq _020E1C2C - b _020E1C38 -_020E1BBC: - cmp r0, #0x7a - beq _020E1C20 - b _020E1C38 -_020E1BC8: - mov r2, #0x2 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x68 - streqb r1, [sp, #0x2] - ldreqsb r0, [r12, #0x1]! - b _020E1C3C -_020E1BE4: - mov r2, #0x3 - strb r2, [sp, #0x2] - ldrsb r2, [r12, #0x1] - cmp r2, #0x6c - bne _020E1C3C - mov r0, #0x7 - strb r0, [sp, #0x2] - ldrsb r0, [r12, #0x1]! - b _020E1C3C -_020E1C08: - mov r2, #0x9 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C14: - mov r2, #0x4 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C20: - mov r2, #0x5 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C2C: - mov r2, #0x6 - strb r2, [sp, #0x2] - b _020E1C3C -_020E1C38: - mov r1, #0x0 -_020E1C3C: - cmp r1, #0x0 - ldrnesb r0, [r12, #0x1]! - strb r0, [sp, #0x3] - cmp r0, #0x5b - bgt _020E1C90 - bge _020E1DE0 - cmp r0, #0x47 - bgt _020E1C84 - subs r1, r0, #0x41 - addpl pc, pc, r1, lsl #0x2 - b _020E1EF0 - b _020E1D1C - b _020E1EF0 - b _020E1EF0 - b _020E1EF0 - b _020E1D1C - b _020E1D1C - b _020E1D1C -_020E1C84: - cmp r0, #0x58 - beq _020E1D08 - b _020E1EF0 -_020E1C90: - cmp r0, #0x61 - bgt _020E1CA0 - beq _020E1D1C - b _020E1EF0 -_020E1CA0: - sub r0, r0, #0x63 - cmp r0, #0x15 - addls pc, pc, r0, lsl #0x2 - b _020E1EF0 -_020E1CB0: - 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 - moveq r0, #0xff - streqb r0, [sp, #0x3] - b _020E1EF8 -_020E1D1C: - ldrb r1, [sp, #0x2] - cmp r1, #0x1 - cmpne r1, #0x2 - beq _020E1D3C - add r0, r1, #0xfc - and r0, r0, #0xff - cmp r0, #0x3 - bhi _020E1D48 -_020E1D3C: - mov r0, #0xff - strb r0, [sp, #0x3] - b _020E1EF8 -_020E1D48: - cmp r1, #0x3 - moveq r0, #0x8 - streqb r0, [sp, #0x2] - b _020E1EF8 -_020E1D58: - 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 - moveq r0, #0xa - streqb r0, [sp, #0x2] - beq _020E1E00 - cmp r0, #0x0 - movne r0, #0xff - strneb r0, [sp, #0x3] -_020E1E00: - ldrsb r2, [r12, #0x1]! - mov r1, #0x0 - cmp r2, #0x5e - ldreqsb r2, [r12, #0x1]! - moveq r1, #0x1 - cmp r2, #0x5d - bne _020E1EA8 - ldrb r0, [sp, #0x13] - orr r0, r0, #0x20 - strb r0, [sp, #0x13] - ldrsb r2, [r12, #0x1]! - b _020E1EA8 -_020E1E30: - add r0, sp, #0x0 - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - mov r4, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - ldrsb r3, [r12, #0x1] - cmp r3, #0x2d - bne _020E1EA4 - ldrsb r7, [r12, #0x2] - cmp r7, #0x0 - cmpne r7, #0x5d - beq _020E1EA4 - add r2, r2, #0x1 - cmp r2, r7 - bgt _020E1E9C -_020E1E78: - and r3, r2, #0xff - add r6, r0, r3, asr #0x3 - ldrb r5, [r6, #0x8] - and r3, r2, #0x7 - add r2, r2, #0x1 - orr r3, r5, r4, lsl r3 - strb r3, [r6, #0x8] - cmp r2, r7 - ble _020E1E78 -_020E1E9C: - ldrsb r2, [r12, #0x3]! - b _020E1EA8 -_020E1EA4: - ldrsb r2, [r12, #0x1]! -_020E1EA8: - cmp r2, #0x0 - cmpne r2, #0x5d - bne _020E1E30 - cmp r2, #0x0 - moveq r0, #0xff - streqb r0, [sp, #0x3] - beq _020E1EF8 - cmp r1, #0x0 - beq _020E1EF8 - add r2, sp, #0x8 - mov r1, #0x20 -_020E1ED4: - ldrb r0, [r2, #0x0] - sub r1, r1, #0x1 - cmp r1, #0x0 - mvn r0, r0 - strb r0, [r2], #0x1 - bgt _020E1ED4 - b _020E1EF8 -_020E1EF0: - mov r0, #0xff - strb r0, [sp, #0x3] -_020E1EF8: - add r4, sp, #0x0 - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4!, {r0-r3} - stmia lr!, {r0-r3} - ldmia r4, {r0-r1} - stmia lr, {r0-r1} - add r0, r12, #0x1 - add sp, sp, #0x28 - ldmia sp!, {r3-r7,pc} - .balign 4 -_020E1F20: .word UNK_0210440C -_020E1F24: .word UNK_0210430C - - arm_func_start __sformatter -__sformatter: ; 0x020E1F28 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0x88 - ldrsb r5, [r2, #0x0] - str r2, [sp, #0xc] - mov r2, #0x0 - mov r9, r0 - mov r0, r2 - str r2, [sp, #0x20] - mov r8, r1 - str r3, [sp, #0x10] - str r0, [sp, #0x24] - cmp r5, #0x0 - ldr r10, [sp, #0xb0] - str r0, [sp, #0x30] - mov r4, r2 - str r0, [sp, #0x44] - str r0, [sp, #0x40] - beq _020E2C3C -_020E1F70: - cmp r5, #0x0 - mov r0, #0x1 - blt _020E1F84 - cmp r5, #0x80 - movlt r0, #0x0 -_020E1F84: - cmp r0, #0x0 - movne r0, #0x0 - bne _020E1FA0 - mov r1, r5, lsl #0x1 - ldr r0, _020E2C74 ; =UNK_0210430C - ldrh r0, [r0, r1] - and r0, r0, #0x100 -_020E1FA0: - cmp r0, #0x0 - beq _020E2060 - mov r2, #0x0 - ldr r1, _020E2C74 ; =UNK_0210430C - mov r12, r2 - mov r3, #0x1 -_020E1FB8: - ldr r0, [sp, #0xc] - ldrsb r5, [r0, #0x1]! - str r0, [sp, #0xc] - mov r0, r3 - cmp r5, #0x0 - blt _020E1FD8 - cmp r5, #0x80 - movlt r0, r2 -_020E1FD8: - cmp r0, #0x0 - movne r0, r12 - moveq r0, r5, lsl #0x1 - ldreqh r0, [r1, r0] - andeq r0, r0, #0x100 - cmp r0, #0x0 - bne _020E1FB8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2C2C - ldr r5, _020E2C74 ; =UNK_0210430C - b _020E200C -_020E2008: - add r4, r4, #0x1 -_020E200C: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E2034 - cmp r1, #0x80 - blt _020E203C -_020E2034: - mov r0, #0x0 - b _020E2048 -_020E203C: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E2048: - cmp r0, #0x0 - bne _020E2008 - mov r0, r8 - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2060: - cmp r5, #0x25 - beq _020E20D8 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E20D8 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - and r0, r5, #0xff - ldrsb r1, [sp, #0x50] - cmp r0, r1 - beq _020E20C4 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, [sp, #0xc] - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20C4: - ldr r0, [sp, #0xc] - add r4, r4, #0x1 - add r0, r0, #0x1 - str r0, [sp, #0xc] - b _020E2C2C -_020E20D8: - ldr r0, [sp, #0xc] - add r1, sp, #0x60 - bl parse_format_scanf - str r0, [sp, #0xc] - ldrb r0, [sp, #0x60] - cmp r0, #0x0 - bne _020E2114 - ldrb r0, [sp, #0x63] - cmp r0, #0x25 - beq _020E2114 - ldr r0, [sp, #0x10] - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r5, [r0, #-0x4] - b _020E2118 -_020E2114: - mov r5, #0x0 -_020E2118: - ldrb r0, [sp, #0x63] - cmp r0, #0x6e - beq _020E2158 - ldr r0, [sp, #0x30] - cmp r0, #0x0 - bne _020E2158 - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2158 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] -_020E2158: - ldrb r1, [sp, #0x63] - cmp r1, #0x5b - bgt _020E21B0 - bge _020E2984 - cmp r1, #0x47 - bgt _020E21A4 - subs r0, r1, #0x41 - addpl pc, pc, r0, lsl #0x2 - b _020E2198 - b _020E2600 - b _020E2C3C - b _020E2C3C - b _020E2C3C - b _020E2600 - b _020E2600 - b _020E2600 -_020E2198: - cmp r1, #0x25 - beq _020E287C - b _020E2C3C -_020E21A4: - cmp r1, #0x58 - beq _020E243C - b _020E2C3C -_020E21B0: - cmp r1, #0x78 - bgt _020E2228 - subs r0, r1, #0x63 - addpl pc, pc, r0, lsl #0x2 - b _020E221C - b _020E26C4 - b _020E2230 - b _020E2600 - b _020E2600 - b _020E2600 - b _020E2C3C - b _020E2238 - b _020E2C3C - b _020E2C3C - b _020E2C3C - b _020E2C3C - b _020E2BC8 - b _020E242C - b _020E2C3C - b _020E2C3C - b _020E2C3C - b _020E2908 - b _020E2C3C - b _020E2434 - b _020E2C3C - b _020E2C3C - b _020E243C -_020E221C: - cmp r1, #0x61 - beq _020E2600 - b _020E2C3C -_020E2228: - cmp r1, #0xff - b _020E2C3C -_020E2230: - 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 - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E2460: - ldrb r1, [sp, #0x62] - add r2, sp, #0x5c - cmp r1, #0x7 - cmpne r1, #0x4 - add r1, sp, #0x58 - bne _020E24A4 - 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 _020E24C8 -_020E24A4: - 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] -_020E24C8: - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E24F8 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - mov r0, #0x0 - str r0, [sp, #0x3c] - str r0, [sp, #0x34] - str r0, [sp, #0x18] - b _020E2538 -_020E24F8: - add r4, r4, r0 - ldr r0, [sp, #0x58] - cmp r0, #0x0 - beq _020E2538 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - ldrne r0, [sp, #0x3c] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x3c] - bne _020E2538 - ldr r0, [sp, #0x34] - rsbs r0, r0, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x18] - rsc r0, r0, #0x0 - str r0, [sp, #0x18] -_020E2538: - cmp r5, #0x0 - beq _020E25F0 - ldrb r0, [sp, #0x62] - cmp r0, #0x7 - addls pc, pc, r0, lsl #0x2 - b _020E25DC -_020E2550: - 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 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E25F0: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2600: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - beq _020E261C - ldr r0, _020E2C78 ; =UNK_02106B78 - ldr r0, [r0, #0x0] - bl _f2d - b _020E2668 -_020E261C: - add r0, sp, #0x54 - str r0, [sp, #0x0] - ldr r0, [sp, #0x64] - mov r1, r9 - mov r2, r8 - add r3, sp, #0x5c - bl __strtold - ldr r2, [sp, #0x5c] - cmp r2, #0x0 - bne _020E2664 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - ldr r0, _020E2C78 ; =UNK_02106B78 - ldr r0, [r0, #0x0] - bl _f2d - b _020E2668 -_020E2664: - add r4, r4, r2 -_020E2668: - cmp r5, #0x0 - beq _020E26B4 - ldrb r2, [sp, #0x62] - cmp r2, #0x0 - beq _020E2690 - cmp r2, #0x8 - beq _020E269C - cmp r2, #0x9 - stmeqia r5, {r0-r1} - b _020E26A0 -_020E2690: - bl _d2f - str r0, [r5, #0x0] - b _020E26A0 -_020E269C: - stmia r5, {r0-r1} -_020E26A0: - ldr r0, [sp, #0x30] - cmp r0, #0x0 - ldreq r0, [sp, #0x44] - addeq r0, r0, #0x1 - streq r0, [sp, #0x44] -_020E26B4: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E26C4: - 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 - bne _020E2C2C - ldr r5, _020E2C74 ; =UNK_0210430C - b _020E2894 -_020E2890: - add r4, r4, #0x1 -_020E2894: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - strb r0, [sp, #0x50] - ldrsb r1, [sp, #0x50] - cmp r1, #0x0 - blt _020E28BC - cmp r1, #0x80 - blt _020E28C4 -_020E28BC: - mov r0, #0x0 - b _020E28D0 -_020E28C4: - mov r0, r1, lsl #0x1 - ldrh r0, [r5, r0] - and r0, r0, #0x100 -_020E28D0: - cmp r0, #0x0 - bne _020E2890 - cmp r1, #0x25 - beq _020E2900 - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - str r0, [sp, #0x30] - b _020E2C2C -_020E2900: - add r4, r4, #0x1 - b _020E2C2C -_020E2908: - 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 ; =UNK_0210430C - 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 - cmp r10, #0x0 - beq _020E29AC - ldr r0, [sp, #0x10] - mov r7, #0x1 - add r0, r0, #0x4 - str r0, [sp, #0x10] - ldr r0, [r0, #-0x4] - sub r11, r0, #0x1 -_020E29AC: - ldr r0, [sp, #0x30] - mov r1, #0x0 - cmp r0, #0x0 - str r1, [sp, #0x5c] - beq _020E29CC - cmp r11, #0x0 - strneb r1, [r5, #0x0] - b _020E2C2C -_020E29CC: - mvn r0, #0x0 - str r5, [sp, #0x28] - str r0, [sp, #0x4c] - b _020E2A30 -_020E29DC: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - add r2, sp, #0x60 - and r3, r1, #0xff - add r2, r2, r3, asr #0x3 - ldrb r3, [r2, #0x8] - and r0, r1, #0x7 - mov r2, #0x1 - tst r3, r2, lsl r0 - beq _020E2A80 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - strneb r1, [r5], #0x1 - bne _020E2A24 - mov r0, r5 - add r1, sp, #0x50 - bl mbtowc - add r5, r5, #0x2 -_020E2A24: - ldr r0, [sp, #0x5c] - add r1, r0, #0x1 - str r1, [sp, #0x5c] -_020E2A30: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2A80 - cmp r10, #0x0 - beq _020E2A60 - cmp r11, r1 - movcs r7, #0x1 - movcc r7, #0x0 - cmp r7, #0x0 - beq _020E2A80 -_020E2A60: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - ldr r0, [sp, #0x4c] - cmp r6, r0 - bne _020E29DC -_020E2A80: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - beq _020E2AA0 - cmp r10, #0x0 - beq _020E2AD8 - cmp r7, #0x0 - bne _020E2AD8 -_020E2AA0: - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - beq _020E2C3C - mov r0, #0x1 - cmp r11, #0x0 - str r0, [sp, #0x30] - beq _020E2C2C - ldr r0, [sp, #0x28] - mov r1, #0x0 - strb r1, [r0, #0x0] - b _020E2C2C -_020E2AD8: - add r4, r4, r0 - ldrb r0, [sp, #0x62] - cmp r0, #0xa - mov r0, #0x0 - streqh r0, [r5, #0x0] - strneb r0, [r5, #0x0] - ldr r0, [sp, #0x44] - add r0, r0, #0x1 - str r0, [sp, #0x44] - b _020E2B9C -_020E2B00: - mov r0, #0x0 - str r0, [sp, #0x5c] - mvn r5, #0x0 - b _020E2B44 -_020E2B10: - strb r6, [sp, #0x50] - ldrsb r1, [sp, #0x50] - and r0, r1, #0x7 - and r2, r1, #0xff - add r1, sp, #0x60 - add r1, r1, r2, asr #0x3 - ldrb r2, [r1, #0x8] - mov r1, #0x1 - tst r2, r1, lsl r0 - beq _020E2B74 - ldr r0, [sp, #0x5c] - add r0, r0, #0x1 - str r0, [sp, #0x5c] -_020E2B44: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - sub r0, r0, #0x1 - str r0, [sp, #0x64] - beq _020E2B74 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r6, r0 - cmp r6, r5 - bne _020E2B10 -_020E2B74: - strb r6, [sp, #0x50] - ldr r0, [sp, #0x5c] - cmp r0, #0x0 - bne _020E2B98 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 - b _020E2C2C -_020E2B98: - add r4, r4, r0 -_020E2B9C: - ldr r0, [sp, #0x64] - cmp r0, #0x0 - blt _020E2BB8 - mov r0, r8 - ldrsb r1, [sp, #0x50] - mov r2, #0x1 - blx r9 -_020E2BB8: - ldr r0, [sp, #0x40] - add r0, r0, #0x1 - str r0, [sp, #0x40] - b _020E2C2C -_020E2BC8: - 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] - cmp r5, #0x0 - bne _020E1F70 -_020E2C3C: - mov r0, r8 - mov r1, #0x0 - mov r2, #0x2 - blx r9 - cmp r0, #0x0 - beq _020E2C68 - ldr r0, [sp, #0x40] - cmp r0, #0x0 - addeq sp, sp, #0x88 - mvneq r0, #0x0 - ldmeqia sp!, {r3-r11,pc} -_020E2C68: - ldr r0, [sp, #0x44] - add sp, sp, #0x88 - ldmia sp!, {r3-r11,pc} - .balign 4 -_020E2C74: .word UNK_0210430C -_020E2C78: .word UNK_02106B78 - - arm_func_start __StringRead -__StringRead: ; 0x020E2C7C - cmp r2, #0x0 - beq _020E2C98 - cmp r2, #0x1 - beq _020E2CC8 - cmp r2, #0x2 - beq _020E2CF0 - b _020E2CF8 -_020E2C98: - ldr r1, [r0, #0x0] - ldrsb r2, [r1, #0x0] - cmp r2, #0x0 - bne _020E2CB8 - mov r1, #0x1 - str r1, [r0, #0x4] - sub r0, r1, #0x2 - bx lr -_020E2CB8: - add r1, r1, #0x1 - str r1, [r0, #0x0] - and r0, r2, #0xff - bx lr -_020E2CC8: - ldr r2, [r0, #0x4] - cmp r2, #0x0 - movne r2, #0x0 - strne r2, [r0, #0x4] - bne _020E2CE8 - ldr r2, [r0, #0x0] - sub r2, r2, #0x1 - str r2, [r0, #0x0] -_020E2CE8: - mov r0, r1 - bx lr -_020E2CF0: - ldr r0, [r0, #0x4] - bx lr -_020E2CF8: - mov r0, #0x0 - bx lr - - arm_func_start vsscanf -vsscanf: ; 0x020E2D00 - stmdb sp!, {lr} - sub sp, sp, #0xc - str r0, [sp, #0x4] - cmp r0, #0x0 - ldrnesb r0, [r0, #0x0] - mov lr, r1 - mov r3, r2 - cmpne r0, #0x0 - addeq sp, sp, #0xc - mvneq r0, #0x0 - ldmeqia sp!, {pc} - mov r12, #0x0 - str r12, [sp, #0x8] - ldr r0, _020E2D50 ; =__StringRead - add r1, sp, #0x4 - mov r2, lr - str r12, [sp, #0x0] - bl __sformatter - add sp, sp, #0xc - ldmia sp!, {pc} - .balign 4 -_020E2D50: .word __StringRead - - arm_func_start sscanf -sscanf: ; 0x020E2D54 - stmdb sp!, {r0-r3} - stmdb sp!, {r3,lr} - add r2, sp, #0xc - bic r2, r2, #0x3 - ldr r1, [sp, #0xc] - add r2, r2, #0x4 - bl vsscanf - ldmia sp!, {r3,lr} - add sp, sp, #0x10 - bx lr - - arm_func_start raise -raise: ; 0x020E2D7C - stmdb sp!, {r3-r5,lr} - mov r5, r0 - cmp r5, #0x1 - blt _020E2D94 - cmp r5, #0x7 - ble _020E2D9C -_020E2D94: - mvn r0, #0x0 - ldmia sp!, {r3-r5,pc} -_020E2D9C: - ldr r0, _020E2E98 ; =UNK_021D7178 - bl OS_TryLockMutex - cmp r0, #0x0 - bne _020E2DD0 - ldr r0, _020E2E9C ; =OSi_ThreadInfo - ldr r1, _020E2EA0 ; =UNK_021D7088 - ldr r2, [r0, #0x4] - ldr r0, _020E2EA4 ; =UNK_021D70AC - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x1c] - str r2, [r0, #0x1c] - b _020E2E28 -_020E2DD0: - ldr r0, _020E2E9C ; =OSi_ThreadInfo - ldr r1, _020E2EA0 ; =UNK_021D7088 - ldr r0, [r0, #0x4] - ldr r1, [r1, #0x1c] - ldr r0, [r0, #0x6c] - cmp r1, r0 - bne _020E2E00 - ldr r0, _020E2EA4 ; =UNK_021D70AC - ldr r1, [r0, #0x1c] - add r1, r1, #0x1 - str r1, [r0, #0x1c] - b _020E2E28 -_020E2E00: - ldr r0, _020E2E98 ; =UNK_021D7178 - bl OS_LockMutex - ldr r0, _020E2E9C ; =OSi_ThreadInfo - ldr r1, _020E2EA0 ; =UNK_021D7088 - ldr r2, [r0, #0x4] - ldr r0, _020E2EA4 ; =UNK_021D70AC - ldr r3, [r2, #0x6c] - mov r2, #0x1 - str r3, [r1, #0x1c] - str r2, [r0, #0x1c] -_020E2E28: - ldr r1, _020E2EA8 ; =UNK_021D74AC - 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 ; =UNK_021D70AC - ldr r1, [r0, #0x1c] - subs r1, r1, #0x1 - str r1, [r0, #0x1c] - bne _020E2E5C - ldr r0, _020E2E98 ; =UNK_021D7178 - 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 UNK_021D7178 -_020E2E9C: .word OSi_ThreadInfo -_020E2EA0: .word UNK_021D7088 -_020E2EA4: .word UNK_021D70AC -_020E2EA8: .word UNK_021D74AC - - arm_func_start strlen -strlen: ; 0x020E2EAC - mvn r2, #0x0 -_020E2EB0: - ldrsb r1, [r0], #0x1 - add r2, r2, #0x1 - cmp r1, #0x0 - bne _020E2EB0 - mov r0, r2 - bx lr - - arm_func_start strcpy -strcpy: ; 0x020E2EC8 - stmdb sp!, {r3-r5,lr} - and r4, r1, #0x3 - and r3, r0, #0x3 - mov r2, r0 - cmp r3, r4 - bne _020E2F64 - cmp r4, #0x0 - beq _020E2F20 - ldrb r3, [r1, #0x0] - strb r3, [r0, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} - rsbs r4, r4, #0x3 - beq _020E2F18 -_020E2F00: - ldrb r3, [r1, #0x1]! - cmp r3, #0x0 - strb r3, [r2, #0x1]! - ldmeqia sp!, {r3-r5,pc} - subs r4, r4, #0x1 - bne _020E2F00 -_020E2F18: - add r2, r2, #0x1 - add r1, r1, #0x1 -_020E2F20: - ldr r5, [r1, #0x0] - ldr r3, _020E2F88 ; =0xFEFEFEFF - mvn r4, r5 - add lr, r5, r3 - ldr ip, _020E2F8C ; =0x80808080 - and r4, lr, r4 - tst r4, r12 - bne _020E2F64 - sub r2, r2, #0x4 -_020E2F44: - str r5, [r2, #0x4]! - ldr r5, [r1, #0x4]! - add r4, r5, r3 - mvn lr, r5 - and lr, r4, lr - tst lr, r12 - beq _020E2F44 - add r2, r2, #0x4 -_020E2F64: - ldrb r3, [r1, #0x0] - strb r3, [r2, #0x0] - cmp r3, #0x0 - ldmeqia sp!, {r3-r5,pc} -_020E2F74: - 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 - - arm_func_start strncpy -strncpy: ; 0x020E2F90 - stmdb sp!, {r3,lr} - mov lr, r0 - cmp r2, #0x0 - ldmeqia sp!, {r3,pc} -_020E2FA0: - 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} - 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 - mov r3, r0 -_020E2FE4: - ldrsb r2, [r3], #0x1 - cmp r2, #0x0 - bne _020E2FE4 - sub r3, r3, #0x1 -_020E2FF4: - ldrsb r2, [r1], #0x1 - mov r12, r3 - strb r2, [r3], #0x1 - ldrsb r2, [r12, #0x0] - cmp r2, #0x0 - bne _020E2FF4 - bx lr - - arm_func_start strncat -strncat: ; 0x020E3010 - stmdb sp!, {r3,lr} - mov r12, r0 -_020E3018: - ldrsb r3, [r12], #0x1 - cmp r3, #0x0 - bne _020E3018 - cmp r2, #0x0 - sub r12, r12, #0x1 - beq _020E3054 -_020E3030: - ldrsb r3, [r1], #0x1 - mov lr, r12 - strb r3, [r12], #0x1 - ldrsb r3, [lr, #0x0] - cmp r3, #0x0 - subeq r12, r12, #0x1 - beq _020E3054 - subs r2, r2, #0x1 - bne _020E3030 -_020E3054: - mov r1, #0x0 - strb r1, [r12, #0x0] - ldmia sp!, {r3,pc} - - arm_func_start strcmp -strcmp: ; 0x020E3060 - stmdb sp!, {r4,lr} - ldrb r2, [r0, #0x0] - ldrb r3, [r1, #0x0] - subs r3, r2, r3 - movne r0, r3 - ldmneia sp!, {r4,pc} - 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} - 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} - cmp r3, #0x0 - moveq r0, #0x0 - ldmeqia sp!, {r4,pc} - 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} - 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 - cmp r2, #0x0 - beq _020E31A0 -_020E317C: - ldrb r12, [r1], #0x1 - ldrb r3, [r0], #0x1 - cmp r3, r12 - subne r0, r3, r12 - bxne lr - cmp r3, #0x0 - beq _020E31A0 - subs r2, r2, #0x1 - bne _020E317C -_020E31A0: - mov r0, #0x0 - bx lr - - arm_func_start strchr -strchr: ; 0x020E31A8 - ldrsb r2, [r0], #0x1 - mov r1, r1, lsl #0x18 - mov r1, r1, asr #0x18 - cmp r2, #0x0 - beq _020E31D4 -_020E31BC: - cmp r2, r1 - subeq r0, r0, #0x1 - bxeq lr - ldrsb r2, [r0], #0x1 - cmp r2, #0x0 - bne _020E31BC -_020E31D4: - cmp r1, #0x0 - movne r0, #0x0 - subeq r0, r0, #0x1 - bx lr - - arm_func_start strspn -strspn: ; 0x020E31E4 - stmdb sp!, {r4,lr} - sub sp, sp, #0x20 - add r12, sp, #0x0 - mov r3, #0x8 - mov r2, #0x0 -_020E31F8: - strb r2, [r12, #0x0] - strb r2, [r12, #0x1] - strb r2, [r12, #0x2] - strb r2, [r12, #0x3] - add r12, r12, #0x4 - subs r3, r3, #0x1 - bne _020E31F8 - ldrb r3, [r1, #0x0] - add r4, r1, #0x1 - cmp r3, #0x0 - beq _020E3254 - add lr, sp, #0x0 - mov r2, #0x1 -_020E322C: - and r12, r3, #0xff - and r1, r3, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [lr, r12, asr #0x3] - and r1, r1, #0xff - orr r1, r3, r1 - strb r1, [lr, r12, asr #0x3] - ldrb r3, [r4], #0x1 - cmp r3, #0x0 - bne _020E322C -_020E3254: - ldrb r1, [r0, #0x0] - add r4, r0, #0x1 - cmp r1, #0x0 - beq _020E3294 - add r12, sp, #0x0 - mov r2, #0x1 -_020E326C: - and r3, r1, #0xff - and r1, r1, #0x7 - mov r1, r2, lsl r1 - ldrb r3, [r12, r3, asr #0x3] - and r1, r1, #0xff - tst r3, r1 - bne _020E3294 - ldrb r1, [r4], #0x1 - cmp r1, #0x0 - bne _020E326C -_020E3294: - sub r0, r4, r0 - sub r0, r0, #0x1 - add sp, sp, #0x20 - ldmia sp!, {r4,pc} - - arm_func_start strstr -strstr: ; 0x020E32A4 - stmdb sp!, {r4,lr} - cmp r1, #0x0 - ldrneb r2, [r1, #0x0] - cmpne r2, #0x0 - ldmeqia sp!, {r4,pc} - 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 - stmdb sp!, {r3-r11,lr} - sub sp, sp, #0xa8 - ldr r4, [sp, #0xd0] - mov r10, #0x0 - str r4, [sp, #0xd0] - str r0, [sp, #0x0] - add r6, sp, #0x80 - mov r9, r1 - mov r8, r2 - str r3, [sp, #0x4] - mov r4, r10 - str r10, [sp, #0x2c] - mov r5, #0x1 - mov r0, #0x4 -_020E3348: - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - strh r10, [r6, #0x4] - strh r10, [r6, #0x6] - add r6, r6, #0x8 - subs r0, r0, #0x1 - bne _020E3348 - mov r0, #0x0 - str r0, [sp, #0x28] - strh r10, [r6, #0x0] - strh r10, [r6, #0x2] - ldr r2, [sp, #0x28] - ldr r1, [sp, #0xd0] - strh r10, [r6, #0x4] - str r2, [r1, #0x0] - mov r1, r2 - mov r0, r8 - str r1, [sp, #0x24] - str r1, [sp, #0x20] - str r1, [sp, #0x1c] - str r1, [sp, #0x18] - str r1, [sp, #0x10] - str r1, [sp, #0xc] - str r1, [sp, #0x8] - add r4, r4, #0x1 - blx r9 - mov r1, r0 - ldr r7, _020E42F0 ; =UNK_02104439 - add r0, sp, #0x4d - mov r6, #0x4 -_020E33C0: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E33C0 - ldrb r3, [r7, #0x0] - ldr r2, _020E42F4 ; =UNK_02104434 - strb r3, [r0, #0x0] - ldrb r3, [r2, #0x1] - ldrb r0, [r2, #0x2] - ldrb r6, [r2, #0x0] - strb r3, [sp, #0x31] - strb r0, [sp, #0x32] - ldrb r3, [r2, #0x3] - ldrb r0, [r2, #0x4] - strb r6, [sp, #0x30] - strb r3, [sp, #0x33] - strb r0, [sp, #0x34] - b _020E4104 -_020E3418: - cmp r5, #0x100 - bgt _020E3490 - bge _020E3B98 - cmp r5, #0x20 - bgt _020E3474 - bge _020E3A6C - cmp r5, #0x8 - bgt _020E3468 - cmp r5, #0x0 - addge pc, pc, r5, lsl #0x2 - b _020E4104 - b _020E4104 - b _020E34D4 - b _020E38B8 - b _020E4104 - b _020E3968 - b _020E4104 - b _020E4104 - b _020E4104 - b _020E3990 -_020E3468: - cmp r5, #0x10 - beq _020E3A34 - b _020E4104 -_020E3474: - cmp r5, #0x40 - bgt _020E3484 - beq _020E3AF8 - b _020E4104 -_020E3484: - cmp r5, #0x80 - beq _020E3B44 - b _020E4104 -_020E3490: - cmp r5, #0x2000 - bgt _020E34B8 - bge _020E36EC - cmp r5, #0x200 - bgt _020E34AC - beq _020E3BF8 - b _020E4104 -_020E34AC: - cmp r5, #0x400 - beq _020E3C20 - b _020E4104 -_020E34B8: - cmp r5, #0x4000 - bgt _020E34C8 - beq _020E35F4 - b _020E4104 -_020E34C8: - cmp r5, #0x8000 - beq _020E3C98 - b _020E4104 -_020E34D4: - 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 ; =UNK_0210430C - 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 ; =UNK_0210428C - 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 - add r0, sp, #0x76 - mov r6, #0x4 -_020E3604: - ldrb r3, [r7, #0x0] - ldrb r2, [r7, #0x1] - add r7, r7, #0x2 - strb r3, [r0, #0x0] - strb r2, [r0, #0x1] - add r0, r0, #0x2 - subs r6, r6, #0x1 - bne _020E3604 - ldrb r2, [r7, #0x0] - add r6, sp, #0x77 - ldr r7, _020E42FC ; =UNK_0210428C - strb r2, [r0, #0x0] - b _020E3658 -_020E3638: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3658: - cmp r5, #0x8 - bge _020E3688 - cmp r1, #0x0 - blt _020E3670 - cmp r1, #0x80 - blt _020E3678 -_020E3670: - mov r2, r1 - b _020E367C -_020E3678: - ldrb r2, [r7, r1] -_020E367C: - ldrsb r0, [r6, #0x0] - cmp r0, r2 - beq _020E3638 -_020E3688: - cmp r5, #0x3 - cmpne r5, #0x8 - bne _020E36E4 - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E36B8 - ldr r1, _020E4300 ; =UNK_02106B74 - mov r0, #0x0 - ldr r1, [r1, #0x0] - bl _fsub - bl _f2d - b _020E36C4 -_020E36B8: - ldr r0, _020E4300 ; =UNK_02106B74 - ldr r0, [r0, #0x0] - bl _f2d -_020E36C4: - ldr r2, [sp, #0x2c] - add r3, r2, r5 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E36E4: - mov r5, #0x1000 - b _020E4104 -_020E36EC: - ldrb r3, [sp, #0x30] - ldrb r0, [sp, #0x32] - ldrb r2, [sp, #0x31] - strb r3, [sp, #0x40] - strb r0, [sp, #0x42] - ldrb r3, [sp, #0x33] - ldrb r0, [sp, #0x34] - strb r2, [sp, #0x41] - mov r5, #0x1 - strb r0, [sp, #0x44] - mov r6, #0x0 - add r2, sp, #0x56 - strb r3, [sp, #0x43] - mov r0, #0x8 -_020E3724: - strb r6, [r2, #0x0] - strb r6, [r2, #0x1] - strb r6, [r2, #0x2] - strb r6, [r2, #0x3] - add r2, r2, #0x4 - subs r0, r0, #0x1 - bne _020E3724 - add r7, sp, #0x41 - b _020E3768 -_020E3748: - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r7, r7, #0x1 - add r5, r5, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E3768: - cmp r5, #0x4 - bge _020E379C - cmp r1, #0x0 - blt _020E3780 - cmp r1, #0x80 - blt _020E3788 -_020E3780: - mov r2, r1 - b _020E3790 -_020E3788: - ldr r0, _020E42FC ; =UNK_0210428C - ldrb r2, [r0, r1] -_020E3790: - ldrsb r0, [r7, #0x0] - cmp r0, r2 - beq _020E3748 -_020E379C: - sub r0, r5, #0x3 - cmp r0, #0x1 - bhi _020E38B0 - cmp r5, #0x4 - bne _020E3854 - ldr r7, _020E42F8 ; =UNK_0210430C - b _020E37DC -_020E37B8: - add r0, sp, #0x56 - strb r1, [r0, r6] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r6, r6, #0x1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 -_020E37DC: - cmp r6, #0x20 - bge _020E3844 - cmp r1, #0x0 - blt _020E37F4 - cmp r1, #0x80 - blt _020E37FC -_020E37F4: - mov r0, #0x0 - b _020E3808 -_020E37FC: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x8 -_020E3808: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x0 - blt _020E3820 - cmp r1, #0x80 - blt _020E3828 -_020E3820: - mov r0, #0x0 - b _020E3834 -_020E3828: - mov r0, r1, lsl #0x1 - ldrh r0, [r7, r0] - and r0, r0, #0x1 -_020E3834: - cmp r0, #0x0 - bne _020E37B8 - cmp r1, #0x2e - beq _020E37B8 -_020E3844: - cmp r1, #0x29 - movne r5, #0x1000 - bne _020E4104 - add r6, r6, #0x1 -_020E3854: - add r0, sp, #0x56 - mov r1, #0x0 - strb r1, [r0, r6] - ldr r1, [sp, #0x28] - cmp r1, #0x0 - beq _020E3888 - bl nan - mov r2, r0 - mov r0, #0x0 - mov r3, r1 - mov r1, r0 - bl _dsub - b _020E388C -_020E3888: - bl nan -_020E388C: - ldr r2, [sp, #0x2c] - add r2, r2, r5 - add r3, r6, r2 - ldr r2, [sp, #0x18] - add r3, r2, r3 - ldr r2, [sp, #0x4] - add sp, sp, #0xa8 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E38B0: - mov r5, #0x1000 - b _020E4104 -_020E38B8: - 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 ; =UNK_0210430C - 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 ; =UNK_0210428C - 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 ; =UNK_0210430C - 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 - cmp r1, #0x80 - blt _020E3A4C -_020E3A44: - mov r0, #0x0 - b _020E3A5C -_020E3A4C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =UNK_0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A5C: - cmp r0, #0x0 - moveq r5, #0x1000 - movne r5, #0x20 - b _020E4104 -_020E3A6C: - cmp r1, #0x0 - blt _020E3A7C - cmp r1, #0x80 - blt _020E3A84 -_020E3A7C: - mov r0, #0x0 - b _020E3A94 -_020E3A84: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =UNK_0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3A94: - cmp r0, #0x0 - moveq r5, #0x40 - beq _020E4104 - ldrb r3, [sp, #0x84] - cmp r3, #0x14 - bhs _020E3ADC - cmp r1, #0x30 - cmpeq r3, #0x0 - beq _020E3AD0 - ldrb r2, [sp, #0x84] - add r0, sp, #0x80 - add r0, r0, r3 - add r2, r2, #0x1 - strb r2, [sp, #0x84] - strb r1, [r0, #0x5] -_020E3AD0: - ldr r0, [sp, #0x1c] - sub r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E3ADC: - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3AF8: - cmp r1, #0x0 - blt _020E3B08 - cmp r1, #0x80 - blt _020E3B10 -_020E3B08: - mov r0, r1 - b _020E3B18 -_020E3B10: - ldr r0, _020E42FC ; =UNK_0210428C - ldrb r0, [r0, r1] -_020E3B18: - cmp r0, #0x45 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3B44: - cmp r1, #0x2b - bne _020E3B68 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E3B90 -_020E3B68: - cmp r1, #0x2d - bne _020E3B90 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - mov r0, #0x1 - str r0, [sp, #0x24] -_020E3B90: - mov r5, #0x100 - b _020E4104 -_020E3B98: - cmp r1, #0x0 - blt _020E3BA8 - cmp r1, #0x80 - blt _020E3BB0 -_020E3BA8: - mov r0, #0x0 - b _020E3BC0 -_020E3BB0: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =UNK_0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3BC0: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r5, #0x200 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3BF8: - cmp r1, #0x30 - movne r5, #0x400 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C20: - cmp r1, #0x0 - blt _020E3C30 - cmp r1, #0x80 - blt _020E3C38 -_020E3C30: - mov r0, #0x0 - b _020E3C48 -_020E3C38: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =UNK_0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E3C48: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x20] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - ldr r1, _020E4304 ; =0x00007FFF - str r0, [sp, #0x20] - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3C98: - cmp r10, #0x20 - bgt _020E3CE8 - bge _020E3FBC - cmp r10, #0x8 - bgt _020E3CDC - cmp r10, #0x0 - addge pc, pc, r10, lsl #0x2 - b _020E4104 - b _020E4104 - b _020E3D0C - b _020E3D5C - b _020E4104 - b _020E3D84 - b _020E4104 - b _020E4104 - b _020E4104 - b _020E3E94 -_020E3CDC: - cmp r10, #0x10 - beq _020E3F70 - b _020E4104 -_020E3CE8: - cmp r10, #0x80 - bgt _020E3D00 - bge _020E4064 - cmp r10, #0x40 - beq _020E4004 - b _020E4104 -_020E3D00: - cmp r10, #0x100 - beq _020E408C - b _020E4104 -_020E3D0C: - 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 ; =UNK_0210430C - 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 ; =UNK_0210428C - 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 ; =UNK_0210430C - 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 ; =UNK_0210428C - 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 - cmp r1, #0x80 - blt _020E3F88 -_020E3F80: - mov r0, r1 - b _020E3F90 -_020E3F88: - ldr r0, _020E42FC ; =UNK_0210428C - ldrb r0, [r0, r1] -_020E3F90: - cmp r0, #0x50 - movne r5, #0x800 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x20 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E3FBC: - cmp r1, #0x2d - moveq r0, #0x1 - streq r0, [sp, #0xc] - beq _020E3FE4 - cmp r1, #0x2b - beq _020E3FE4 - mov r0, r8 - mov r2, #0x1 - blx r9 - sub r4, r4, #0x1 -_020E3FE4: - mov r10, #0x40 - add r4, r4, #0x1 - mov r0, r8 - mov r1, #0x0 - mov r2, r1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4004: - cmp r1, #0x0 - blt _020E4014 - cmp r1, #0x80 - blt _020E401C -_020E4014: - mov r0, #0x0 - b _020E402C -_020E401C: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =UNK_0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E402C: - cmp r0, #0x0 - moveq r5, #0x1000 - beq _020E4104 - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - mov r10, #0x80 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E4064: - cmp r1, #0x30 - movne r10, #0x100 - bne _020E4104 - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - add r4, r4, #0x1 - blx r9 - mov r1, r0 - b _020E4104 -_020E408C: - cmp r1, #0x0 - blt _020E409C - cmp r1, #0x80 - blt _020E40A4 -_020E409C: - mov r0, #0x0 - b _020E40B4 -_020E40A4: - mov r2, r1, lsl #0x1 - ldr r0, _020E42F8 ; =UNK_0210430C - ldrh r0, [r0, r2] - and r0, r0, #0x8 -_020E40B4: - cmp r0, #0x0 - moveq r5, #0x800 - beq _020E4104 - ldr r0, [sp, #0x10] - sub r2, r1, #0x30 - mov r1, #0xa - mla r0, r1, r0, r2 - str r0, [sp, #0x10] - ldr r1, _020E4304 ; =0x00007FFF - ldr r0, [sp, #0x20] - add r4, r4, #0x1 - cmp r0, r1 - ldrgt r0, [sp, #0xd0] - movgt r1, #0x1 - strgt r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r8 - mov r2, r1 - blx r9 - mov r1, r0 -_020E4104: - ldr r0, [sp, #0x0] - cmp r4, r0 - bgt _020E4124 - mvn r0, #0x0 - cmp r1, r0 - beq _020E4124 - tst r5, #0x1800 - beq _020E3418 -_020E4124: - cmp r5, #0x8000 - beq _020E4140 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - moveq r0, #0x1 - movne r0, #0x0 - b _020E4164 -_020E4140: - sub r0, r4, #0x1 - cmp r0, #0x2 - ble _020E4158 - ldr r0, _020E430C ; =0x0000018E - tst r10, r0 - bne _020E4160 -_020E4158: - mov r0, #0x1 - b _020E4164 -_020E4160: - mov r0, #0x0 -_020E4164: - cmp r0, #0x0 - movne r2, #0x0 - ldrne r0, [sp, #0x4] - bne _020E4184 - ldr r0, [sp, #0x2c] - sub r2, r4, #0x1 - add r2, r2, r0 - ldr r0, [sp, #0x4] -_020E4184: - str r2, [r0, #0x0] - mov r0, r8 - mov r2, #0x1 - blx r9 - cmp r10, #0x0 - bne _020E4388 - ldr r0, [sp, #0x24] - ldrb r2, [sp, #0x84] - cmp r0, #0x0 - ldrne r0, [sp, #0x20] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x20] - add r0, sp, #0x85 - add r1, r0, r2 - b _020E41CC -_020E41C0: - ldr r0, [sp, #0x1c] - add r0, r0, #0x1 - str r0, [sp, #0x1c] -_020E41CC: - cmp r2, #0x0 - sub r2, r2, #0x1 - beq _020E41E4 - ldrb r0, [r1, #-0x1]! - cmp r0, #0x30 - beq _020E41C0 -_020E41E4: - add r0, r2, #0x1 - strb r0, [sp, #0x84] - ands r2, r0, #0xff - bne _020E4208 - add r1, r2, #0x1 - strb r1, [sp, #0x84] - add r0, sp, #0x85 - mov r1, #0x30 - strb r1, [r0, r2] -_020E4208: - ldr r1, [sp, #0x20] - ldr r0, [sp, #0x1c] - mov r2, #0x8000 - add r0, r1, r0 - rsb r2, r2, #0x0 - str r0, [sp, #0x20] - cmp r0, r2 - blt _020E4230 - cmp r0, r2, lsr #0x11 - ble _020E423C -_020E4230: - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] -_020E423C: - ldr r0, [sp, #0xd0] - ldr r0, [r0, #0x0] - cmp r0, #0x0 - beq _020E4298 - ldr r0, [sp, #0x24] - cmp r0, #0x0 - movne r0, #0x0 - addne sp, sp, #0xa8 - movne r1, r0 - ldmneia sp!, {r3-r11,pc} - ldr r0, [sp, #0x28] - cmp r0, #0x0 - ldreq r1, _020E4310 ; =UNK_02106B7C - addeq sp, sp, #0xa8 - ldmeqia r1, {r0-r1} - ldmeqia sp!, {r3-r11,pc} - ldr r1, _020E4310 ; =UNK_02106B7C - 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 - strh r1, [sp, #0x82] - bl __dec2num - mov r4, r0 - mov r6, r1 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dneq - beq _020E4318 - mov r0, r4 - mov r1, r6 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - bhs _020E4318 - ldr r0, [sp, #0xd0] - mov r1, #0x1 - str r1, [r0, #0x0] - b _020E4344 - .balign 4 -_020E42F0: .word UNK_02104439 -_020E42F4: .word UNK_02104434 -_020E42F8: .word UNK_0210430C -_020E42FC: .word UNK_0210428C -_020E4300: .word UNK_02106B74 -_020E4304: .word 0x00007FFF -_020E4308: .word 0x00000E2C -_020E430C: .word 0x0000018E -_020E4310: .word UNK_02106B7C -_020E4314: .word 0x7FEFFFFF -_020E4318: - ldr r3, _020E4314 ; =0x7FEFFFFF - mov r0, r4 - mov r1, r6 - mvn r2, #0x0 - bl _dgr - bls _020E4344 - ldr r0, [sp, #0xd0] - mov r2, #0x1 - ldr r1, _020E4310 ; =UNK_02106B7C - str r2, [r0, #0x0] - ldmia r1, {r4,r6} -_020E4344: - ldr r0, [sp, #0x28] - cmp r0, #0x0 - beq _020E4378 - ldr r0, _020E4308 ; =0x00000E2C - tst r5, r0 - beq _020E4378 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r6 - bl _dsub - mov r4, r0 - mov r6, r1 -_020E4378: - add sp, sp, #0xa8 - mov r0, r4 - mov r1, r6 - ldmia sp!, {r3-r11,pc} -_020E4388: - ldr r0, [sp, #0xc] - add r4, sp, #0x38 - cmp r0, #0x0 - ldrne r0, [sp, #0x10] - ldrb r3, [sp, #0x45] - rsbne r0, r0, #0x0 - strne r0, [sp, #0x10] - ldr r1, [sp, #0x10] - ldr r0, [sp, #0x8] - mov r2, #0x0 - add r0, r1, r0, lsl #0x2 - str r0, [sp, #0x10] - mov r1, #0x80 - b _020E43D0 -_020E43C0: - ldr r0, [sp, #0x10] - add r2, r2, #0x1 - sub r0, r0, #0x1 - str r0, [sp, #0x10] -_020E43D0: - cmp r2, #0x4 - bhs _020E43E0 - tst r3, r1, asr r2 - beq _020E43C0 -_020E43E0: - adds r5, r2, #0x1 - beq _020E442C - add r0, sp, #0x4c - add r3, sp, #0x45 - str r0, [sp, #0x14] - mov r1, #0x0 - cmp r0, r3 - blo _020E442C - rsb r6, r5, #0x8 -_020E4404: - ldr r0, [sp, #0x14] - ldrb r0, [r0, #0x0] - orr r2, r1, r0, lsl r5 - mov r1, r0, asr r6 - ldr r0, [sp, #0x14] - and r1, r1, #0xff - strb r2, [r0], #-0x1 - str r0, [sp, #0x14] - cmp r0, r3 - bhs _020E4404 -_020E442C: - mov r2, #0x0 - mov r6, r2 - strb r2, [r4, #0x0] - strb r2, [r4, #0x1] - strb r2, [r4, #0x2] - strb r2, [r4, #0x3] - strb r2, [r4, #0x4] - strb r2, [r4, #0x5] - strb r2, [r4, #0x6] - strb r2, [r4, #0x7] - mov r3, #0xc - mov r7, #0x1 - mov r0, #0xff - add r1, sp, #0x45 -_020E4464: - add r5, r2, #0x8 - cmp r5, #0x34 - ldrb r5, [r1, r6] - rsbhi r8, r2, #0x34 - and r11, r3, #0x7 - andhi r5, r5, r0, lsl r8 - andhi r5, r5, #0xff - mov r8, r5, asr r11 - and r9, r8, #0xff - ldrb r10, [r4, r7] - rsb r8, r11, #0x8 - mov r5, r5, lsl r8 - orr r9, r10, r9 - strb r9, [r4, r7] - add r7, r7, #0x1 - add r2, r2, #0x8 - ldrb r8, [r4, r7] - and r5, r5, #0xff - cmp r2, #0x34 - orr r5, r8, r5 - strb r5, [r4, r7] - add r3, r3, #0x8 - add r6, r6, #0x1 - blo _020E4464 - ldr r0, [sp, #0x10] - mov r1, #0x800 - add r0, r0, #0xfe - add r2, r0, #0x300 - rsb r1, r1, #0x0 - tst r2, r1 - beq _020E44FC - ldr r2, [sp, #0xd0] - mov r3, #0x1 - mov r0, #0x0 - add sp, sp, #0xa8 - mov r1, r0 - str r3, [r2, #0x0] - ldmia sp!, {r3-r11,pc} -_020E44FC: - ldrb r0, [r4, #0x1] - mov r2, r2, lsl #0x15 - ldrb r1, [r4, #0x0] - orr r0, r0, r2, lsr #0x11 - strb r0, [r4, #0x1] - ldr r0, [sp, #0x28] - orr r1, r1, r2, lsr #0x19 - cmp r0, #0x0 - andne r0, r1, #0xff - strb r1, [r4, #0x0] - orrne r0, r0, #0x80 - strneb r0, [r4, #0x0] - mov r3, #0x0 -_020E4530: - rsb r1, r3, #0x7 - ldrb r2, [r4, r3] - ldrb r0, [r4, r1] - strb r0, [r4, r3] - add r3, r3, #0x1 - strb r2, [r4, r1] - cmp r3, #0x4 - blt _020E4530 - ldmia r4, {r0-r1} - add sp, sp, #0xa8 - ldmia sp!, {r3-r11,pc} - - arm_func_start strtold -strtold: ; 0x020E455C - stmdb sp!, {r4-r7,lr} - sub sp, sp, #0x14 - mov r7, r0 - mov r0, #0x0 - mov r6, r1 - str r0, [sp, #0x8] - add r4, sp, #0xc - str r7, [sp, #0x4] - ldr r1, _020E4630 ; =__StringRead - add r2, sp, #0x4 - add r3, sp, #0x10 - sub r0, r0, #0x80000001 - str r4, [sp, #0x0] - bl __strtold - mov r5, r1 - mov r4, r0 - cmp r6, #0x0 - ldrne r0, [sp, #0x10] - mov r1, r5 - addne r0, r7, r0 - strne r0, [r6, #0x0] - mov r0, r4 - bl fabs - ldr r2, [sp, #0xc] - mov r6, r0 - mov r7, r1 - cmp r2, #0x0 - bne _020E4614 - mov r0, #0x0 - mov r1, r0 - mov r2, r4 - mov r3, r5 - bl _dneq - beq _020E4620 - mov r0, r6 - mov r1, r7 - mov r2, #0x0 - mov r3, #0x100000 - bl _dls - blo _020E4614 - ldr r3, _020E4634 ; =0x7FEFFFFF - mov r0, r6 - mov r1, r7 - mvn r2, #0x0 - bl _dgr - bls _020E4620 -_020E4614: - ldr r0, _020E4638 ; =UNK_021D74A8 - mov r1, #0x22 - str r1, [r0, #0x0] -_020E4620: - mov r0, r4 - mov r1, r5 - add sp, sp, #0x14 - ldmia sp!, {r4-r7,pc} - .balign 4 -_020E4630: .word __StringRead -_020E4634: .word 0x7FEFFFFF -_020E4638: .word UNK_021D74A8 - - arm_func_start atod -atod: ; 0x020E463C - ldr ip, _020E4648 ; =strtold - mov r1, #0x0 - bx r12 - .balign 4 -_020E4648: .word strtold - - arm_func_start __strtoul -__strtoul: - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0xc - ldr r4, [sp, #0x38] - movs r9, r0 - ldr r0, [sp, #0x34] - str r4, [sp, #0x38] - mov r4, #0x0 - str r0, [sp, #0x34] - ldr r0, [sp, #0x38] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0x4] - ldr r0, [sp, #0x34] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x30] - str r4, [sp, #0x8] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - str r0, [sp, #0x30] - mov r4, #0x1 - bmi _020E46CC - cmp r9, #0x1 - beq _020E46CC - cmp r9, #0x24 - bgt _020E46CC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E46D4 -_020E46CC: - mov r4, #0x40 - b _020E46F0 -_020E46D4: - ldr r1, [sp, #0x8] - mov r0, r7 - mov r3, r1 - mov r2, r1 - add r5, r3, #0x1 - blx r8 - mov r6, r0 -_020E46F0: - cmp r9, #0x0 - beq _020E4708 - mov r1, r9 - mvn r0, #0x0 - bl _u32_div_f - str r0, [sp, #0x4] -_020E4708: - mvn r11, #0x0 - b _020E49C8 -_020E4710: - cmp r4, #0x8 - bgt _020E4748 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E49C8 - b _020E49C8 - b _020E4754 - b _020E4800 - b _020E49C8 - b _020E483C - b _020E49C8 - b _020E49C8 - b _020E49C8 - b _020E487C -_020E4748: - cmp r4, #0x10 - beq _020E487C - b _020E49C8 -_020E4754: - cmp r6, #0x0 - blt _020E4764 - cmp r6, #0x80 - blt _020E476C -_020E4764: - mov r0, #0x0 - b _020E477C -_020E476C: - ldr r0, _020E4A2C ; =UNK_0210430C - 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 - moveq r9, #0xa - cmp r0, #0x0 - bne _020E48A0 - mov r0, r11 - mov r1, r9 - bl _u32_div_f - str r0, [sp, #0x4] -_020E48A0: - cmp r6, #0x0 - blt _020E48B0 - cmp r6, #0x80 - blt _020E48B8 -_020E48B0: - mov r0, #0x0 - b _020E48C8 -_020E48B8: - ldr r0, _020E4A2C ; =UNK_0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E48C8: - cmp r0, #0x0 - beq _020E48F0 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4978 - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E49C8 -_020E48F0: - cmp r6, #0x0 - blt _020E4900 - cmp r6, #0x80 - blt _020E4908 -_020E4900: - mov r0, #0x0 - b _020E4918 -_020E4908: - ldr r0, _020E4A2C ; =UNK_0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4918: - cmp r0, #0x0 - beq _020E494C - cmp r6, #0x0 - blt _020E4930 - cmp r6, #0x80 - blt _020E4938 -_020E4930: - mov r0, r6 - b _020E4940 -_020E4938: - ldr r0, _020E4A30 ; =UNK_0210428C - ldrb r0, [r0, r6] -_020E4940: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E495C -_020E494C: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E49C8 -_020E495C: - cmp r6, #0x0 - blt _020E4974 - cmp r6, #0x80 - bge _020E4974 - ldr r0, _020E4A30 ; =UNK_0210428C - ldrb r6, [r0, r6] -_020E4974: - sub r6, r6, #0x37 -_020E4978: - ldr r0, [sp, #0x4] - mov r4, #0x10 - cmp r10, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mul r0, r10, r9 - mov r10, r0 - sub r0, r11, r0 - cmp r6, r0 - ldrhi r0, [sp, #0x38] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, #0x0 - mov r0, r7 - mov r2, r1 - add r10, r10, r6 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E49C8: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E49E4 - cmp r6, r11 - beq _020E49E4 - tst r4, #0x60 - beq _020E4710 -_020E49E4: - tst r4, #0x34 - bne _020E49FC - ldr r0, [sp, #0x30] - mov r10, #0x0 - str r10, [r0, #0x0] - b _020E4A10 -_020E49FC: - ldr r0, [sp, #0x8] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x30] - str r1, [r0, #0x0] -_020E4A10: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - add sp, sp, #0xc - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4A2C: .word UNK_0210430C -_020E4A30: .word UNK_0210428C - - arm_func_start __strtoull -__strtoull: ; 0x020E4A34 - stmdb sp!, {r4-r11,lr} - sub sp, sp, #0x1c - ldr r4, [sp, #0x48] - movs r9, r0 - ldr r0, [sp, #0x44] - str r4, [sp, #0x48] - mov r4, #0x0 - str r0, [sp, #0x44] - ldr r0, [sp, #0x48] - str r1, [sp, #0x0] - str r4, [r0, #0x0] - mov r0, r4 - str r0, [sp, #0xc] - str r0, [sp, #0x8] - ldr r0, [sp, #0x44] - mov r1, r4 - str r1, [r0, #0x0] - ldr r0, [sp, #0x40] - str r4, [sp, #0x14] - mov r8, r2 - mov r7, r3 - mov r5, r4 - mov r10, r4 - mov r11, r4 - str r0, [sp, #0x40] - mov r4, #0x1 - bmi _020E4ABC - cmp r9, #0x1 - beq _020E4ABC - cmp r9, #0x24 - bgt _020E4ABC - ldr r0, [sp, #0x0] - cmp r0, #0x1 - bge _020E4AC4 -_020E4ABC: - mov r4, #0x40 - b _020E4ADC -_020E4AC4: - ldr r1, [sp, #0x14] - mov r0, r7 - mov r2, r1 - add r5, r1, #0x1 - blx r8 - mov r6, r0 -_020E4ADC: - cmp r9, #0x0 - beq _020E4B00 - mvn r0, #0x0 - mov r1, r0 - mov r3, r9, asr #0x1f - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4B00: - mvn r0, #0x0 - str r0, [sp, #0x18] - b _020E4E08 -_020E4B0C: - cmp r4, #0x8 - bgt _020E4B44 - cmp r4, #0x0 - addge pc, pc, r4, lsl #0x2 - b _020E4E08 - b _020E4E08 - b _020E4B50 - b _020E4BFC - b _020E4E08 - b _020E4C38 - b _020E4E08 - b _020E4E08 - b _020E4E08 - b _020E4C78 -_020E4B44: - cmp r4, #0x10 - beq _020E4C78 - b _020E4E08 -_020E4B50: - cmp r6, #0x0 - blt _020E4B60 - cmp r6, #0x80 - blt _020E4B68 -_020E4B60: - mov r0, #0x0 - b _020E4B78 -_020E4B68: - ldr r0, _020E4E78 ; =UNK_0210430C - 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 - cmp r9, #0x0 - moveq r9, #0xa - cmp r1, r0 - ldr r1, [sp, #0xc] - cmpeq r1, r0 - bne _020E4CB4 - ldr r0, [sp, #0x18] - mov r3, r9, asr #0x1f - mov r1, r0 - mov r2, r9 - bl _ll_udiv - str r0, [sp, #0xc] - str r1, [sp, #0x8] -_020E4CB4: - cmp r6, #0x0 - blt _020E4CC4 - cmp r6, #0x80 - blt _020E4CCC -_020E4CC4: - mov r0, #0x0 - b _020E4CDC -_020E4CCC: - ldr r0, _020E4E78 ; =UNK_0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x8 -_020E4CDC: - cmp r0, #0x0 - beq _020E4D04 - sub r6, r6, #0x30 - cmp r6, r9 - blt _020E4D8C - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - add r6, r6, #0x30 - b _020E4E08 -_020E4D04: - cmp r6, #0x0 - blt _020E4D14 - cmp r6, #0x80 - blt _020E4D1C -_020E4D14: - mov r0, #0x0 - b _020E4D2C -_020E4D1C: - ldr r0, _020E4E78 ; =UNK_0210430C - mov r1, r6, lsl #0x1 - ldrh r0, [r0, r1] - and r0, r0, #0x1 -_020E4D2C: - cmp r0, #0x0 - beq _020E4D60 - cmp r6, #0x0 - blt _020E4D44 - cmp r6, #0x80 - blt _020E4D4C -_020E4D44: - mov r0, r6 - b _020E4D54 -_020E4D4C: - ldr r0, _020E4E7C ; =UNK_0210428C - ldrb r0, [r0, r6] -_020E4D54: - sub r0, r0, #0x37 - cmp r0, r9 - blt _020E4D70 -_020E4D60: - cmp r4, #0x10 - moveq r4, #0x20 - movne r4, #0x40 - b _020E4E08 -_020E4D70: - cmp r6, #0x0 - blt _020E4D88 - cmp r6, #0x80 - bge _020E4D88 - ldr r0, _020E4E7C ; =UNK_0210428C - ldrb r6, [r0, r6] -_020E4D88: - sub r6, r6, #0x37 -_020E4D8C: - ldr r0, [sp, #0x8] - umull r2, r3, r10, r9 - cmp r11, r0 - ldr r0, [sp, #0xc] - mov r4, #0x10 - cmpeq r10, r0 - ldrhi r0, [sp, #0x48] - movhi r1, #0x1 - strhi r1, [r0, #0x0] - mov r1, r9, asr #0x1f - mla r3, r10, r1, r3 - mla r3, r11, r9, r3 - ldr r1, [sp, #0x18] - mov r10, r2 - subs r2, r1, r2 - mov r0, r6, asr #0x1f - sbc r1, r1, r3 - cmp r0, r1 - cmpeq r6, r2 - ldrhi r1, [sp, #0x48] - movhi r2, #0x1 - strhi r2, [r1, #0x0] - mov r1, #0x0 - mov r11, r3 - adds r10, r10, r6 - adc r11, r11, r0 - mov r0, r7 - mov r2, r1 - add r5, r5, #0x1 - blx r8 - mov r6, r0 -_020E4E08: - ldr r0, [sp, #0x0] - cmp r5, r0 - bgt _020E4E28 - ldr r0, [sp, #0x18] - cmp r6, r0 - beq _020E4E28 - tst r4, #0x60 - beq _020E4B0C -_020E4E28: - tst r4, #0x34 - bne _020E4E44 - ldr r0, [sp, #0x40] - mov r10, #0x0 - mov r11, r10 - str r10, [r0, #0x0] - b _020E4E58 -_020E4E44: - ldr r0, [sp, #0x14] - sub r1, r5, #0x1 - add r1, r1, r0 - ldr r0, [sp, #0x40] - str r1, [r0, #0x0] -_020E4E58: - mov r0, r7 - mov r1, r6 - mov r2, #0x1 - blx r8 - mov r0, r10 - mov r1, r11 - add sp, sp, #0x1c - ldmia sp!, {r4-r11,pc} - .balign 4 -_020E4E78: .word UNK_0210430C -_020E4E7C: .word UNK_0210428C - - arm_func_start strtoul -strtoul: ; 0x020E4E80 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4F10 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul - 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 ; =UNK_021D74A8 - 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: .word UNK_021D74A8 - - arm_func_start strtold2 -strtold2: ; 0x020E4F18 - stmdb sp!, {r3-r5,lr} - sub sp, sp, #0x20 - mov r5, r0 - mov lr, #0x0 - mov r0, r2 - mov r4, r1 - add r2, sp, #0x1c - str r5, [sp, #0xc] - str lr, [sp, #0x10] - str r2, [sp, #0x0] - add r1, sp, #0x18 - str r1, [sp, #0x4] - add r12, sp, #0x14 - ldr r2, _020E4FD8 ; =__StringRead - add r3, sp, #0xc - sub r1, lr, #0x80000001 - str r12, [sp, #0x8] - bl __strtoul - 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 ; =UNK_021D74A8 - 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: .word UNK_021D74A8 - - arm_func_start atol -atol: ; 0x020E4FE0 - ldr ip, _020E4FF0 ; =strtold - mov r1, #0x0 - mov r2, #0xa - bx r12 - .balign 4 -_020E4FF0: .word strtold2 - - arm_func_start fwide -fwide: - cmp r0, #0x0 - beq _020E500C - ldr r3, [r0, #0x4] - mov r2, r3, lsl #0x16 - movs r2, r2, lsr #0x1d - bne _020E5014 -_020E500C: - mov r0, #0x0 - bx lr -_020E5014: - mov r2, r3, lsl #0x14 - movs r2, r2, lsr #0x1e - beq _020E5034 - cmp r2, #0x1 - beq _020E505C - cmp r2, #0x2 - moveq r1, #0x1 - b _020E5060 -_020E5034: - cmp r1, #0x0 - ble _020E504C - bic r2, r3, #0xc00 - orr r2, r2, #0x800 - str r2, [r0, #0x4] - b _020E5060 -_020E504C: - biclt r2, r3, #0xc00 - orrlt r2, r2, #0x400 - strlt r2, [r0, #0x4] - b _020E5060 -_020E505C: - mvn r1, #0x0 -_020E5060: - mov r0, r1 - bx lr - - arm_func_start wmemcpy -wmemcpy: ; 0x020E5068 - ldr ip, _020E5074 ; =memcpy - mov r2, r2, lsl #0x1 - bx r12 - .balign 4 -_020E5074: .word memcpy - - arm_func_start wmemchr -wmemchr: - cmp r2, #0x0 - beq _020E5098 -_020E5080: - ldrh r3, [r0, #0x0] - cmp r3, r1 - bxeq lr - add r0, r0, #0x2 - subs r2, r2, #0x1 - bne _020E5080 -_020E5098: - mov r0, #0x0 - bx lr - arm_func_start parse_format_wprintf parse_format_wprintf: ; 0x020E50A0 stmdb sp!, {r4-r8,lr} @@ -9071,48 +510,27 @@ _020E540C: cmp r0, #0x14 addls pc, pc, r0, lsl #0x2 b _020E55EC -_020E541C: - 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 + b _020E5470 ; case + b _020E5528 ; case + b _020E54A8 ; case + b _020E5518 ; case + b _020E55EC ; case + b _020E5470 ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55D8 ; case + b _020E5470 ; case + b _020E5564 ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E55B4 ; case + b _020E55EC ; case + b _020E5470 ; case + b _020E55EC ; case + b _020E55EC ; case + b _020E5470 ; case _020E5470: ldrb r0, [sp, #0x4] cmp r0, #0x9 @@ -10850,24 +2268,15 @@ _020E6C98: 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 + b _020E6CDC ; case + b _020E6F18 ; case + b _020E6CE4 ; case + b _020E6CEC ; case + b _020E6D14 ; case + b _020E6F18 ; case + b _020E6CF4 ; case + b _020E6D04 ; case + b _020E6D0C ; case _020E6CDC: str r4, [r6, #0x0] b _020E6F18 @@ -11387,8 +2796,8 @@ _020E73E8: add r7, r0, #0x1 orrs r0, r7, r5 bne _020E7420 - ldr r0, _020E764C ; =UNK_02106B78 - ldr r1, _020E7650 ; =UNK_021D74A8 + ldr r0, _020E764C ; =__float_nan + ldr r1, _020E7650 ; =errno ldr r0, [r0, #0x0] mov r2, #0x21 str r2, [r1, #0x0] @@ -11542,8 +2951,8 @@ _020E763C: .word 0x7FF00000 _020E7640: .word 0x43400000 _020E7644: .word 0xFFFFFC01 _020E7648: .word 0x3FE00000 -_020E764C: .word UNK_02106B78 -_020E7650: .word UNK_021D74A8 +_020E764C: .word __float_nan +_020E7650: .word errno _020E7654: .word 0x41E00000 _020E7658: .word 0x3FEFFFFF _020E765C: .word 0x3FD00000 @@ -12864,88 +4273,47 @@ _020E8988: cmp r1, #0x28 addls pc, pc, r1, lsl #0x2 b _020E8BE4 -_020E8998: - 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 + b _020E8A68 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8A7C ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8BE4 ; case + b _020E8A90 ; case + b _020E8AA4 ; case + b _020E8AB8 ; case + b _020E8ACC ; case + b _020E8AE0 ; case + b _020E8AF4 ; case + b _020E8B08 ; case + b _020E8B1C ; case + b _020E8B30 ; case + b _020E8B44 ; case + b _020E8B58 ; case + b _020E8B6C ; case + b _020E8B80 ; case + b _020E8B94 ; case + b _020E8BA8 ; case + b _020E8BBC ; case + b _020E8BD0 ; case _020E8A3C: ldr r1, _020E8C88 ; =UNK_02106E88 mov r0, r5 @@ -13661,7 +5029,7 @@ _020E93F0: mov r5, #0x0 cmp r0, #0x0 ldreq r4, _020E996C ; =0x3FF00000 - ldr r0, _020E9974 ; =UNK_02106B74 + ldr r0, _020E9974 ; =__float_huge ldrne r4, _020E9970 ; =0xBFF00000 ldr r0, [r0, #0x0] bl _f2d @@ -13736,7 +5104,7 @@ _020E94C8: mov r5, #0x0 cmp r0, #0x0 ldreq r4, _020E996C ; =0x3FF00000 - ldr r0, _020E9974 ; =UNK_02106B74 + ldr r0, _020E9974 ; =__float_huge ldrne r4, _020E9970 ; =0xBFF00000 ldr r0, [r0, #0x0] bl _f2d @@ -14039,7 +5407,7 @@ _020E995C: .balign 4 _020E996C: .word 0x3FF00000 _020E9970: .word 0xBFF00000 -_020E9974: .word UNK_02106B74 +_020E9974: .word __float_huge _020E9978: .word 0x7FF00000 _020E997C: .word UNK_02106F5C _020E9980: .word UNK_02106E48 @@ -14146,7 +5514,7 @@ scalbn: ; 0x020E9AA4 arm_func_start stricmp stricmp: ; 0x020E9AD0 stmdb sp!, {r3,lr} - ldr r3, _020E9B34 ; =UNK_0210420C + ldr r3, _020E9B34 ; =__lower_mapC _020E9AD8: ldrb r2, [r0], #0x1 cmp r2, #0x0 @@ -14174,7 +5542,7 @@ _020E9B0C: mov r0, #0x0 ldmia sp!, {r3,pc} .balign 4 -_020E9B34: .word UNK_0210420C +_020E9B34: .word __lower_mapC arm_func_start strnicmp strnicmp: ; 0x020E9B38 @@ -14357,7 +5725,7 @@ UNK_020EC748: ; 0x020EC748 .word strtoul .short 153 .word 0x00600300 - .word strtold2 + .word strtol .short 201 .word 0x00600300 .word atol diff --git a/arm9/asm/stdlibmwcc.s b/arm9/asm/stdlibmwcc.s index b7966e40..0af0108d 100644 --- a/arm9/asm/stdlibmwcc.s +++ b/arm9/asm/stdlibmwcc.s @@ -1,6 +1,6 @@ .include "asm/macros.inc" .include "global.inc" - .extern UNK_021D74A8 + .extern errno .section .bss @@ -764,7 +764,7 @@ _020EA580: _020EA58C: ldr r2, _020EA5AC ; =0x7FF80000 orr r1, r1, r2 - ldr r3, _020EA5B0 ; =UNK_021D74A8 + ldr r3, _020EA5B0 ; =errno mov r4, #0x21 str r4, [r3, #0x0] ldmia sp!, {r4-r6,lr} @@ -772,7 +772,7 @@ _020EA58C: .balign 4 _020EA5A8: .word 0x7FF00000 _020EA5AC: .word 0x7FF80000 -_020EA5B0: .word UNK_021D74A8 +_020EA5B0: .word errno arm_func_start _drsb _drsb: ; 0x020EA5B4 diff --git a/arm9/asm/unk_0201B1A8.s b/arm9/asm/unk_0201B1A8.s index 359f9bfe..115edca0 100644 --- a/arm9/asm/unk_0201B1A8.s +++ b/arm9/asm/unk_0201B1A8.s @@ -21,7 +21,7 @@ FUN_0201B1A8: ; 0x0201B1A8 push {r3-r5, lr} add r5, r3, #0x0 add r4, r2, #0x0 - bl FUN_020161A4 + bl AllocAndReadFile str r0, [r5, #0x0] bl NNS_G3dGetTex cmp r0, #0x0 diff --git a/arm9/asm/unk_0201F06C.s b/arm9/asm/unk_0201F06C.s index 03e1404e..e465b1ec 100644 --- a/arm9/asm/unk_0201F06C.s +++ b/arm9/asm/unk_0201F06C.s @@ -265,7 +265,7 @@ _0201F1C8: ldr r0, [r0, #0x0] ldr r1, [r5, #0x4] mov r2, #0x4 - bl FUN_02016B20 + bl GF_ExpHeap_FndInitAllocator ldr r0, [r5, #0x0] ldr r1, [r5, #0x4] bl FUN_0201C360 @@ -1821,7 +1821,7 @@ _0201FD0C: str r0, [r4, r1] ldr r0, [r5, #0x8] ldr r1, _0201FD54 ; =UNK_02105BBC - bl FUN_020161A4 + bl AllocAndReadFile mov r1, #0x46 lsl r1, r1, #0x2 str r0, [r4, r1] diff --git a/arm9/asm/unk_02020C44.s b/arm9/asm/unk_02020C44.s index 235543ee..4550b5cb 100644 --- a/arm9/asm/unk_02020C44.s +++ b/arm9/asm/unk_02020C44.s @@ -146,7 +146,7 @@ _02020D38: _02020D48: ldr r0, [sp, #0x0] add r1, r6, #0x0 - bl FUN_020161A4 + bl AllocAndReadFile str r0, [r4, #0x4] cmp r0, #0x0 bne _02020D5A diff --git a/arm9/asm/unk_02033B68.s b/arm9/asm/unk_02033B68.s index 9e204377..57ae58f9 100644 --- a/arm9/asm/unk_02033B68.s +++ b/arm9/asm/unk_02033B68.s @@ -326,7 +326,7 @@ FUN_02033D3C: ; 0x02033D3C beq _02033D92 ldr r0, _02033D98 ; =UNK_02105D88 add r1, sp, #0x4 - bl FUN_020161F8 + bl OpenAndReadWholeFile mov r1, #0x96 ldr r0, [sp, #0x4] lsl r1, r1, #0x2 @@ -374,11 +374,11 @@ FUN_02033D9C: ; 0x02033D9C add r1, sp, #0x4 beq _02033DC2 ldr r0, _02033E5C ; =UNK_02105D98 - bl FUN_020161F8 + bl OpenAndReadWholeFile b _02033DC8 _02033DC2: ldr r0, _02033E60 ; =UNK_02105DA8 - bl FUN_020161F8 + bl OpenAndReadWholeFile _02033DC8: mov r1, #0x96 ldr r0, [sp, #0x4] diff --git a/arm9/asm/unk_02033F50.s b/arm9/asm/unk_02033F50.s index ed33e084..eb65ebfd 100644 --- a/arm9/asm/unk_02033F50.s +++ b/arm9/asm/unk_02033F50.s @@ -110,7 +110,7 @@ _02033FA4: str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers ldr r0, _02034160 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] diff --git a/arm9/asm/unk_02034188.s b/arm9/asm/unk_02034188.s index 08265835..a91f1c2c 100644 --- a/arm9/asm/unk_02034188.s +++ b/arm9/asm/unk_02034188.s @@ -58,7 +58,7 @@ FUN_02034188: ; 0x02034188 str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers ldr r0, _02034370 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s index c9df4ca4..0a9414a9 100644 --- a/arm9/asm/unk_02035068.s +++ b/arm9/asm/unk_02035068.s @@ -3649,7 +3649,7 @@ FUN_02036E08: ; 0x02036E08 mov r0, #0x3 mov r1, #0x49 lsl r2, r0, #0x10 - bl FUN_0201681C + bl CreateHeap ldr r0, [r4, #0xc] bl SavArray_PlayerParty_get ldrb r1, [r5, #0x0] @@ -3773,7 +3773,7 @@ FUN_02036F1C: ; 0x02036F1C ldr r0, [r4, r0] bl FUN_0206C92C mov r0, #0x49 - bl FUN_020168D0 + bl DestroyHeap ldr r0, _02036F9C ; =0x00000475 mov r1, #0x0 bl FUN_02005350 diff --git a/arm9/asm/unk_020372D4.s b/arm9/asm/unk_020372D4.s index 26a50555..efd22ed4 100644 --- a/arm9/asm/unk_020372D4.s +++ b/arm9/asm/unk_020372D4.s @@ -187,16 +187,16 @@ FUN_02037400: ; 0x02037400 mov r0, #0x3 mov r1, #0xb lsl r2, r2, #0xe - bl FUN_0201681C + bl CreateHeap mov r1, #0x20 mov r0, #0x3 lsl r2, r1, #0x9 - bl FUN_0201681C + bl CreateHeap mov r2, #0x3 mov r0, #0x0 mov r1, #0x5b lsl r2, r2, #0x8 - bl FUN_0201681C + bl CreateHeap add r0, r5, #0x0 mov r1, #0xb8 mov r2, #0xb @@ -282,11 +282,11 @@ FUN_020374B0: ; 0x020374B0 add r0, r5, #0x0 bl OverlayManager_FreeData mov r0, #0x5b - bl FUN_020168D0 + bl DestroyHeap mov r0, #0xb - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x20 - bl FUN_020168D0 + bl DestroyHeap pop {r3-r5, pc} thumb_func_start FUN_02037504 diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s index 9c2132bf..f564a2ab 100644 --- a/arm9/asm/unk_020377F0.s +++ b/arm9/asm/unk_020377F0.s @@ -1633,7 +1633,7 @@ _020382F6: mov r0, #0x3 mov r1, #0x1a lsl r2, r0, #0x10 - bl FUN_0201681C + bl CreateHeap ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr str r0, [sp, #0x24] @@ -1691,7 +1691,7 @@ _02038386: ldr r0, [r4, #0x60] bl FUN_0206C92C mov r0, #0x1a - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x7 str r0, [r4, #0x0] b _020383C8 diff --git a/arm9/asm/unk_020484A8.s b/arm9/asm/unk_020484A8.s index 929f1efa..ac3011bd 100644 --- a/arm9/asm/unk_020484A8.s +++ b/arm9/asm/unk_020484A8.s @@ -110,7 +110,7 @@ _02048556: mov r1, #0x4 mov r0, #0x3 lsl r2, r1, #0xf - bl FUN_0201681C + bl CreateHeap add r0, r6, #0x0 add r1, r5, #0x0 bl FUN_02048764 @@ -240,7 +240,7 @@ _02048666: add r0, r5, #0x0 bl FreeToHeap mov r0, #0x4 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x0 bl OS_ResetSystem add sp, #0xc diff --git a/arm9/asm/unk_0204FBA8.s b/arm9/asm/unk_0204FBA8.s index f1101a82..e53fd195 100644 --- a/arm9/asm/unk_0204FBA8.s +++ b/arm9/asm/unk_0204FBA8.s @@ -154,7 +154,7 @@ FUN_0204FC5C: ; 0x0204FC5C mov r0, #0x3 mov r1, #0x21 lsl r2, r2, #0xa - bl FUN_0201681C + bl CreateHeap ldr r0, _0204FC9C ; =UNK_021C5A6C ldr r0, [r0, #0x0] ldr r0, [r0, #0x18] @@ -2279,7 +2279,7 @@ _02050D66: bl MOD18_0223E1A4 bl FUN_02031860 mov r0, #0x21 - bl FUN_020168D0 + bl DestroyHeap ldr r0, _02050D84 ; =UNK_021C5A6C mov r1, #0x0 ldr r0, [r0, #0x0] diff --git a/arm9/asm/unk_020520AC.s b/arm9/asm/unk_020520AC.s index 8ff9a9a1..c53ca1c7 100644 --- a/arm9/asm/unk_020520AC.s +++ b/arm9/asm/unk_020520AC.s @@ -137,7 +137,7 @@ _020520C0: mov r0, #0x3 mov r1, #0x1f lsl r2, r2, #0x6 - bl FUN_02016828 + bl CreateHeapAtEnd add r0, r4, #0x0 bl FUN_02052110 add r5, r0, #0x0 @@ -625,7 +625,7 @@ FUN_020524A0: ; 0x020524A0 add r0, r4, #0x0 bl FreeToHeap mov r0, #0x1f - bl FUN_020168D0 + bl DestroyHeap _020524B8: pop {r4, pc} .balign 4 diff --git a/arm9/asm/unk_02052EE8.s b/arm9/asm/unk_02052EE8.s index 0c163fd8..7014adcd 100644 --- a/arm9/asm/unk_02052EE8.s +++ b/arm9/asm/unk_02052EE8.s @@ -50,7 +50,7 @@ FUN_02052EE8: ; 0x02052EE8 ldr r0, [r0, #0x38] str r0, [r4, #0x8] mov r0, #0xb - bl FUN_02016828 + bl CreateHeapAtEnd mov r0, #0x59 bl FUN_02053618 ldr r1, _02052F6C ; =0x000004DC @@ -113,7 +113,7 @@ FUN_02052FA4: ; 0x02052FA4 ldr r0, [r4, r0] bl FUN_0205362C mov r0, #0x59 - bl FUN_020168D0 + bl DestroyHeap add r0, r4, #0x0 bl FreeToHeap pop {r4, pc} diff --git a/arm9/asm/unk_02053750.s b/arm9/asm/unk_02053750.s index 38f594ef..cf28dafb 100644 --- a/arm9/asm/unk_02053750.s +++ b/arm9/asm/unk_02053750.s @@ -974,7 +974,7 @@ _02053E24: bl FUN_02009DAC ldr r1, _02053E88 ; =UNK_02105F80 mov r0, #0x4 - bl FUN_020161A4 + bl AllocAndReadFile ldr r1, [r5, #0x10] add r4, r0, #0x0 str r1, [sp, #0x0] @@ -1012,7 +1012,7 @@ FUN_02053E8C: ; 0x02053E8C add r4, r0, #0x0 mov r0, #0x4 add r1, r6, #0x0 - bl FUN_020161A4 + bl AllocAndReadFile add r6, r0, #0x0 add r1, r4, #0x0 mov r2, #0x4 diff --git a/arm9/asm/unk_020625EC.s b/arm9/asm/unk_020625EC.s index fc235004..09de8a47 100644 --- a/arm9/asm/unk_020625EC.s +++ b/arm9/asm/unk_020625EC.s @@ -61,7 +61,7 @@ FUN_020625EC: ; 0x020625EC mov r1, #0x50 lsl r2, r0, #0xd ldr r6, [r5, #0xc] - bl FUN_0201681C + bl CreateHeap mov r1, #0x2d mov r0, #0x50 lsl r1, r1, #0x4 @@ -194,7 +194,7 @@ _020626FE: lsl r2, r2, #0x4 bl MI_CpuFill8 add r0, r5, #0x0 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0xc add sp, #0x8 pop {r3-r7, pc} diff --git a/arm9/asm/unk_020653EC.s b/arm9/asm/unk_020653EC.s index df203337..c7b09260 100644 --- a/arm9/asm/unk_020653EC.s +++ b/arm9/asm/unk_020653EC.s @@ -43,7 +43,7 @@ FUN_020653EC: ; 0x020653EC mov r0, #0x3 mov r1, #0x2b lsl r2, r2, #0xc - bl FUN_0201681C + bl CreateHeap mov r1, #0x6e mov r0, #0x2b lsl r1, r1, #0x2 @@ -111,7 +111,7 @@ FUN_02065474: ; 0x02065474 add r0, r4, #0x0 bl FreeToHeap ldr r0, [r4, #0x0] - bl FUN_020168D0 + bl DestroyHeap pop {r4, pc} .balign 4 diff --git a/arm9/asm/unk_0206C700.s b/arm9/asm/unk_0206C700.s index 4ba1b745..6b5cf9d8 100644 --- a/arm9/asm/unk_0206C700.s +++ b/arm9/asm/unk_0206C700.s @@ -738,7 +738,7 @@ _0206CCCE: mov r3, #0x4 bl FUN_02007E68 ldr r0, [r4, #0x5c] - bl FUN_02016AF8 + bl GF_ExpHeap_FndGetTotalFreeSize mov r1, #0x2 lsl r1, r1, #0xe cmp r0, r1 diff --git a/arm9/asm/unk_0206F1F0.s b/arm9/asm/unk_0206F1F0.s index cdb5db18..8493d5db 100644 --- a/arm9/asm/unk_0206F1F0.s +++ b/arm9/asm/unk_0206F1F0.s @@ -203,7 +203,7 @@ _0206F34A: ldr r2, _0206F388 ; =0x00040100 mov r0, #0x3 mov r1, #0x36 - bl FUN_0201681C + bl CreateHeap bl FUN_02088878 mov r0, #0x36 bl MOD07_02211E60 diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s index 17adb2d2..5e04c49a 100644 --- a/arm9/asm/unk_0206F3FC.s +++ b/arm9/asm/unk_0206F3FC.s @@ -143,12 +143,12 @@ FUN_0206F3FC: ; 0x0206F3FC strh r1, [r3, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers mov r2, #0x2 mov r0, #0x3 mov r1, #0xc lsl r2, r2, #0x10 - bl FUN_0201681C + bl CreateHeap add r0, r4, #0x0 bl FUN_0206FE74 add r4, r0, #0x0 @@ -1022,7 +1022,7 @@ _0206FB30: ldr r0, [sp, #0x0] bl OverlayManager_FreeData mov r0, #0xc - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x1 pop {r3-r7, pc} .balign 4 diff --git a/arm9/asm/unk_020772F0.s b/arm9/asm/unk_020772F0.s index 87e9cab0..15173c11 100644 --- a/arm9/asm/unk_020772F0.s +++ b/arm9/asm/unk_020772F0.s @@ -730,7 +730,7 @@ _020772FE: mov r0, #0x3 mov r1, #0x12 lsl r2, r2, #0xe - bl FUN_0201681C + bl CreateHeap mov r1, #0x5d add r0, r6, #0x0 lsl r1, r1, #0x4 @@ -777,7 +777,7 @@ _020772FE: str r0, [r4, r1] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers bl FUN_02077B24 mov r0, #0x16 lsl r0, r0, #0x4 @@ -1583,7 +1583,7 @@ _02077A0C: add r1, r0, #0x0 bl Main_SetVBlankIntrCB mov r0, #0x12 - bl FUN_020168D0 + bl DestroyHeap ldr r0, _02077A80 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s index 3134a96c..4dee97dd 100644 --- a/arm9/asm/unk_02079C70.s +++ b/arm9/asm/unk_02079C70.s @@ -87,12 +87,12 @@ FUN_02079C7C: ; 0x02079C7C strh r2, [r0, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers mov r2, #0x1 mov r0, #0x3 mov r1, #0x13 lsl r2, r2, #0x12 - bl FUN_0201681C + bl CreateHeap ldr r1, _02079DAC ; =0x0000069C add r0, r4, #0x0 mov r2, #0x13 @@ -339,7 +339,7 @@ FUN_02079ECC: ; 0x02079ECC add r0, r4, #0x0 bl OverlayManager_FreeData mov r0, #0x13 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x1 pop {r3-r5, pc} .balign 4 diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s index 3e0d058c..d1dff0e3 100644 --- a/arm9/asm/unk_02080C38.s +++ b/arm9/asm/unk_02080C38.s @@ -807,7 +807,7 @@ FUN_02081214: ; 0x02081214 mov r0, #0xb mov r1, #0x14 lsl r2, r2, #0xe - bl FUN_0201681C + bl CreateHeap bl FUN_020811D8 add r4, r0, #0x0 bl GetLCRNGSeed @@ -1191,7 +1191,7 @@ _020814FE: add r0, r7, #0x0 bl FUN_0208120C mov r0, #0x14 - bl FUN_020168D0 + bl DestroyHeap pop {r3-r7, pc} .balign 4 diff --git a/arm9/asm/unk_020854E0.s b/arm9/asm/unk_020854E0.s index c19e1a5d..d4e2215b 100644 --- a/arm9/asm/unk_020854E0.s +++ b/arm9/asm/unk_020854E0.s @@ -418,7 +418,7 @@ FUN_020857F8: ; 0x020857F8 mov r0, #0x3 mov r1, #0x28 lsl r2, r2, #0xc - bl FUN_0201681C + bl CreateHeap add r0, r4, #0x0 mov r1, #0x1c mov r2, #0x28 @@ -629,6 +629,6 @@ FUN_020859A0: ; 0x020859A0 add r0, r5, #0x0 bl OverlayManager_FreeData ldr r0, [r4, #0x0] - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x1 pop {r3-r5, pc} diff --git a/arm9/asm/unk_020859C0.s b/arm9/asm/unk_020859C0.s index a2f90e0a..aa13c4f2 100644 --- a/arm9/asm/unk_020859C0.s +++ b/arm9/asm/unk_020859C0.s @@ -184,7 +184,7 @@ FUN_020859C0: ; 0x020859C0 mov r0, #0x3 mov r1, #0x35 lsl r2, r2, #0x12 - bl FUN_0201681C + bl CreateHeap mov r0, #0x35 bl MOD62_02230F3C bl MOD62_0222F7E0 @@ -570,7 +570,7 @@ FUN_02085C08: ; 0x02085C08 bl OverlayManager_FreeData bl FUN_0201CD04 mov r0, #0x35 - bl FUN_020168D0 + bl DestroyHeap ldr r0, _02085D68 ; =SDK_OVERLAY_MODULE_08_ID bl UnloadOverlayByID mov r0, #0x1 diff --git a/arm9/asm/unk_02086084.s b/arm9/asm/unk_02086084.s index 3a4017d7..b2d21149 100644 --- a/arm9/asm/unk_02086084.s +++ b/arm9/asm/unk_02086084.s @@ -23,7 +23,7 @@ FUN_02086084: ; 0x02086084 mov r0, #0x3 mov r1, #0x47 lsl r2, r2, #0x12 - bl FUN_0201681C + bl CreateHeap add r0, r5, #0x0 mov r1, #0x80 mov r2, #0x47 @@ -219,7 +219,7 @@ FUN_020861DC: ; 0x020861DC add r0, r5, #0x0 bl OverlayManager_FreeData mov r0, #0x47 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x1 pop {r3-r5, pc} .balign 4 diff --git a/arm9/asm/unk_02087D00.s b/arm9/asm/unk_02087D00.s index 65d4db3d..dfdb08c6 100644 --- a/arm9/asm/unk_02087D00.s +++ b/arm9/asm/unk_02087D00.s @@ -206,7 +206,7 @@ FUN_02087E40: ; 0x02087E40 mov r0, #0x3 mov r1, #0x2c lsl r2, r2, #0xc - bl FUN_0201681C + bl CreateHeap add r0, r4, #0x0 mov r1, #0x18 mov r2, #0x2c @@ -294,7 +294,7 @@ FUN_02087EE8: ; 0x02087EE8 add r0, r5, #0x0 bl OverlayManager_FreeData ldr r0, [r4, #0x0] - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x1 pop {r3-r5, pc} .balign 4 diff --git a/arm9/asm/unk_02088858.s b/arm9/asm/unk_02088858.s index 5f71517a..f7539bca 100644 --- a/arm9/asm/unk_02088858.s +++ b/arm9/asm/unk_02088858.s @@ -89,14 +89,14 @@ FUN_020888DC: ; 0x020888DC mov r0, #0x3 mov r1, #0x31 lsl r2, r2, #0xc - bl FUN_0201681C + bl CreateHeap add r0, r4, #0x0 bl OverlayManager_GetField18 ldr r0, [r0, #0x8] mov r1, #0x31 bl FUN_02088898 mov r0, #0x31 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x0 bl OS_ResetSystem mov r0, #0x1 diff --git a/arm9/asm/unk_0208898C.s b/arm9/asm/unk_0208898C.s index 6fef7584..68885a65 100644 --- a/arm9/asm/unk_0208898C.s +++ b/arm9/asm/unk_0208898C.s @@ -33,7 +33,7 @@ FUN_020889B0: ; 0x020889B0 mov r0, #0x3 mov r1, #0x37 lsl r2, r2, #0xe - bl FUN_0201681C + bl CreateHeap add r0, r4, #0x0 mov r1, #0x24 mov r2, #0x37 @@ -145,7 +145,7 @@ FUN_02088A78: ; 0x02088A78 add r0, r5, #0x0 bl OverlayManager_FreeData add r0, r6, #0x0 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x1 pop {r4-r6, pc} .balign 4 diff --git a/arm9/asm/unk_02089498.s b/arm9/asm/unk_02089498.s index 3facd182..56b9ee9e 100644 --- a/arm9/asm/unk_02089498.s +++ b/arm9/asm/unk_02089498.s @@ -42,7 +42,7 @@ FUN_02089498: ; 0x02089498 mov r0, #0x3 mov r1, #0x58 lsl r2, r2, #0x10 - bl FUN_0201681C + bl CreateHeap add r0, r5, #0x0 mov r1, #0x38 mov r2, #0x58 @@ -119,7 +119,7 @@ _020894FC: str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers add r0, r4, #0x0 bl FUN_0208961C add r0, r4, #0x0 @@ -197,7 +197,7 @@ FUN_020895F0: ; 0x020895F0 add r0, r5, #0x0 bl OverlayManager_FreeData add r0, r4, #0x0 - bl FUN_020168D0 + bl DestroyHeap mov r0, #0x0 bl OS_ResetSystem mov r0, #0x1 diff --git a/arm9/asm/unk_02089960.s b/arm9/asm/unk_02089960.s index 9c06a4ab..a1b0c04b 100644 --- a/arm9/asm/unk_02089960.s +++ b/arm9/asm/unk_02089960.s @@ -38,7 +38,7 @@ FUN_02089960: ; 0x02089960 mov r0, #0x3 mov r1, #0x58 lsl r2, r2, #0x10 - bl FUN_0201681C + bl CreateHeap add r0, r5, #0x0 mov r1, #0x3c mov r2, #0x58 @@ -101,7 +101,7 @@ _020899B8: str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers add r0, r6, #0x0 bl FUN_02089A6C add r0, r6, #0x0 @@ -141,7 +141,7 @@ FUN_02089A40: ; 0x02089A40 add r0, r5, #0x0 bl OverlayManager_FreeData add r0, r4, #0x0 - bl FUN_020168D0 + bl DestroyHeap ldr r0, _02089A64 ; =SDK_OVERLAY_MODULE_83_ID ldr r1, _02089A68 ; =MOD83_0223A360 bl RegisterMainOverlay diff --git a/arm9/asm/unk_02089D90.s b/arm9/asm/unk_02089D90.s index e7b88272..1fd86f68 100644 --- a/arm9/asm/unk_02089D90.s +++ b/arm9/asm/unk_02089D90.s @@ -57,7 +57,7 @@ FUN_02089D90: ; 0x02089D90 str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers ldr r0, _02089EFC ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] diff --git a/arm9/asm/unk_02089F24.s b/arm9/asm/unk_02089F24.s index b5c93a8a..14ed66e2 100644 --- a/arm9/asm/unk_02089F24.s +++ b/arm9/asm/unk_02089F24.s @@ -61,7 +61,7 @@ FUN_02089F24: ; 0x02089F24 str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers ldr r0, _0208A090 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] @@ -230,7 +230,7 @@ _0208A0C8: str r0, [r2, #0x0] mov r0, #0x4 mov r1, #0x8 - bl FUN_0201669C + bl SetKeyRepeatTimers ldr r0, _0208A230 ; =gMain + 0x60 mov r1, #0x0 strb r1, [r0, #0x5] |