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