.include "asm/macros.inc" .include "global.inc" .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 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 exception long2str, 589, 0x0090FF20 exception longlong2str, 737, 0x00A0FF20 exception double2hex, 1245, 0x00F07F20 exception float2str, 1893, 0x00C0FF20 exception __pformatter, 2084, UNK_020EC710 exception __FileWrite, 45, 0x00200300 exception __StringWrite, 69, 0x00200300 exception printf, 281, 0x00300120 exception vsnprintf, 105, 0x00300300 exception snprintf, 41, 0x00300020 exception sprintf, 45, 0x00300020 .section .exception,8 UNK_020EC710: ; 0x020EC710 .byte 0x20, 0xFF, 0x09, 0x60 .balign 8