.include "asm/macros.inc" .include "global.inc" .rodata _020F6338: .byte 0xA2, 0x00, 0xA3, 0x00, 0xA4, 0x00, 0xA5, 0x00 .byte 0xA6, 0x00, 0xA7, 0x00, 0xA8, 0x00, 0xA9, 0x00, 0xAA, 0x00, 0xAB, 0x00 _020F634C: .byte 0x21, 0x01, 0x22, 0x01 .byte 0x23, 0x01, 0x24, 0x01, 0x25, 0x01, 0x26, 0x01, 0x27, 0x01, 0x28, 0x01, 0x29, 0x01, 0x2A, 0x01 _020F6360: .byte 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25, 0x01, 0x26, 0x01, 0x27, 0x01, 0x28, 0x01 .byte 0x29, 0x01, 0x2A, 0x01 _020F6374: .byte 0xA2, 0x00, 0xA3, 0x00, 0xA4, 0x00, 0xA5, 0x00, 0xA6, 0x00, 0xA7, 0x00 .byte 0xA8, 0x00, 0xA9, 0x00 _020F6384: .byte 0xAA, 0x00, 0xAB, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00 .byte 0x64, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00 .byte 0x40, 0x42, 0x0F, 0x00, 0x80, 0x96, 0x98, 0x00 _020F63A8: .byte 0x00, 0xE1, 0xF5, 0x05, 0x00, 0xCA, 0x9A, 0x3B .byte 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x40, 0x42, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x96, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0xE1, 0xF5, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x9A, 0x3B, 0x00, 0x00, 0x00, 0x00 .byte 0x00, 0xE4, 0x0B, 0x54, 0x02, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x76, 0x48, 0x17, 0x00, 0x00, 0x00 .byte 0x00, 0x10, 0xA5, 0xD4, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x72, 0x4E, 0x18, 0x09, 0x00, 0x00 .byte 0x00, 0x40, 0x7A, 0x10, 0xF3, 0x5A, 0x00, 0x00, 0x00, 0x80, 0xC6, 0xA4, 0x7E, 0x8D, 0x03, 0x00 .byte 0x00, 0x00, 0xC1, 0x6F, 0xF2, 0x86, 0x23, 0x00, 0x00, 0x00, 0x8A, 0x5D, 0x78, 0x45, 0x63, 0x01 .byte 0x00, 0x00, 0x64, 0xA7, 0xB3, 0xB6, 0xE0, 0x0D, 0x00, 0x00, 0xE8, 0x89, 0x04, 0x23, 0xC7, 0x8A .text thumb_func_start String_ctor String_ctor: ; 0x02026354 push {r4, lr} add r4, r0, #0 add r0, r1, #0 lsl r1, r4, #1 add r1, #0xa bl AllocFromHeap cmp r0, #0 beq _02026374 ldr r1, _02026378 ; =0xB6F8D2EC str r1, [r0, #4] strh r4, [r0] mov r1, #0 strh r1, [r0, #2] ldr r1, _0202637C ; =0x0000FFFF strh r1, [r0, #8] _02026374: pop {r4, pc} nop _02026378: .word 0xB6F8D2EC _0202637C: .word 0x0000FFFF thumb_func_end String_ctor thumb_func_start String_dtor String_dtor: ; 0x02026380 push {r4, lr} add r4, r0, #0 bne _0202638A bl GF_AssertFail _0202638A: ldr r1, [r4, #4] ldr r0, _020263A4 ; =0xB6F8D2EC cmp r1, r0 beq _02026396 bl GF_AssertFail _02026396: ldr r0, _020263A8 ; =0xB6F8D2ED str r0, [r4, #4] add r0, r4, #0 bl FreeToHeap pop {r4, pc} nop _020263A4: .word 0xB6F8D2EC _020263A8: .word 0xB6F8D2ED thumb_func_end String_dtor thumb_func_start StringSetEmpty StringSetEmpty: ; 0x020263AC push {r4, lr} add r4, r0, #0 bne _020263B6 bl GF_AssertFail _020263B6: ldr r1, [r4, #4] ldr r0, _020263CC ; =0xB6F8D2EC cmp r1, r0 beq _020263C2 bl GF_AssertFail _020263C2: mov r0, #0 strh r0, [r4, #2] ldr r0, _020263D0 ; =0x0000FFFF strh r0, [r4, #8] pop {r4, pc} .balign 4, 0 _020263CC: .word 0xB6F8D2EC _020263D0: .word 0x0000FFFF thumb_func_end StringSetEmpty thumb_func_start StringCopy StringCopy: ; 0x020263D4 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _020263E2 bl GF_AssertFail _020263E2: ldr r1, [r5, #4] ldr r0, _02026428 ; =0xB6F8D2EC cmp r1, r0 beq _020263EE bl GF_AssertFail _020263EE: cmp r4, #0 bne _020263F6 bl GF_AssertFail _020263F6: ldr r1, [r4, #4] ldr r0, _02026428 ; =0xB6F8D2EC cmp r1, r0 beq _02026402 bl GF_AssertFail _02026402: ldrh r2, [r4, #2] ldrh r0, [r5] cmp r0, r2 bls _02026420 add r0, r5, #0 add r1, r4, #0 add r2, r2, #1 add r0, #8 add r1, #8 lsl r2, r2, #1 bl memcpy ldrh r0, [r4, #2] strh r0, [r5, #2] pop {r3, r4, r5, pc} _02026420: bl GF_AssertFail pop {r3, r4, r5, pc} nop _02026428: .word 0xB6F8D2EC thumb_func_end StringCopy thumb_func_start StringDup StringDup: ; 0x0202642C push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _0202643A bl GF_AssertFail _0202643A: ldr r1, [r5, #4] ldr r0, _02026460 ; =0xB6F8D2EC cmp r1, r0 beq _02026446 bl GF_AssertFail _02026446: ldrh r0, [r5, #2] add r1, r4, #0 add r0, r0, #1 bl String_ctor add r4, r0, #0 beq _0202645A add r1, r5, #0 bl StringCopy _0202645A: add r0, r4, #0 pop {r3, r4, r5, pc} nop _02026460: .word 0xB6F8D2EC thumb_func_end StringDup thumb_func_start String16_FormatInteger String16_FormatInteger: ; 0x02026464 push {r3, r4, r5, r6, r7, lr} sub sp, #8 add r5, r0, #0 ldr r0, [sp, #0x20] add r6, r1, #0 add r7, r3, #0 str r2, [sp] str r0, [sp, #0x20] cmp r5, #0 bne _0202647C bl GF_AssertFail _0202647C: ldr r1, [r5, #4] ldr r0, _0202657C ; =0xB6F8D2EC cmp r1, r0 beq _02026488 bl GF_AssertFail _02026488: cmp r6, #0 bge _02026490 mov r4, #1 b _02026492 _02026490: mov r4, #0 _02026492: ldr r0, [sp] ldrh r1, [r5] add r0, r0, r4 cmp r1, r0 bls _02026574 ldr r0, [sp, #0x20] cmp r0, #0 bne _020264A8 ldr r0, _02026580 ; =0x020F6374 str r0, [sp, #4] b _020264AC _020264A8: ldr r0, _02026584 ; =0x020F6360 str r0, [sp, #4] _020264AC: add r0, r5, #0 bl StringSetEmpty cmp r4, #0 beq _020264D4 mov r0, #0 mvn r0, r0 mul r6, r0 ldr r0, [sp, #0x20] cmp r0, #0 bne _020264C6 mov r0, #0xf1 b _020264C8 _020264C6: ldr r0, _02026588 ; =0x000001BE _020264C8: ldrh r2, [r5, #2] add r1, r2, #1 strh r1, [r5, #2] lsl r1, r2, #1 add r1, r5, r1 strh r0, [r1, #8] _020264D4: ldr r0, [sp] lsl r1, r0, #2 ldr r0, _0202658C ; =0x020F6384 ldr r4, [r0, r1] cmp r4, #0 beq _02026566 _020264E0: add r0, r6, #0 add r1, r4, #0 bl _u32_div_f lsl r0, r0, #0x10 lsr r1, r0, #0x10 add r0, r4, #0 mul r0, r1 sub r6, r6, r0 cmp r7, #2 bne _02026514 cmp r1, #0xa bhs _02026502 ldr r0, [sp, #4] lsl r1, r1, #1 ldrh r1, [r0, r1] b _02026504 _02026502: mov r1, #0xe2 _02026504: ldrh r0, [r5, #2] add r2, r0, #0 add r2, r2, #1 lsl r0, r0, #1 strh r2, [r5, #2] add r0, r5, r0 strh r1, [r0, #8] b _0202655A _02026514: cmp r1, #0 bne _0202651C cmp r4, #1 bne _0202653C _0202651C: mov r7, #2 cmp r1, #0xa bhs _0202652A ldr r0, [sp, #4] lsl r1, r1, #1 ldrh r1, [r0, r1] b _0202652C _0202652A: mov r1, #0xe2 _0202652C: ldrh r0, [r5, #2] add r2, r0, #0 add r2, r2, #1 lsl r0, r0, #1 strh r2, [r5, #2] add r0, r5, r0 strh r1, [r0, #8] b _0202655A _0202653C: cmp r7, #1 bne _0202655A ldr r0, [sp, #0x20] cmp r0, #0 bne _0202654A mov r1, #1 b _0202654C _0202654A: ldr r1, _02026590 ; =0x000001E2 _0202654C: ldrh r0, [r5, #2] add r2, r0, #0 add r2, r2, #1 lsl r0, r0, #1 strh r2, [r5, #2] add r0, r5, r0 strh r1, [r0, #8] _0202655A: add r0, r4, #0 mov r1, #0xa bl _u32_div_f add r4, r0, #0 bne _020264E0 _02026566: ldrh r0, [r5, #2] ldr r1, _02026594 ; =0x0000FFFF add sp, #8 lsl r0, r0, #1 add r0, r5, r0 strh r1, [r0, #8] pop {r3, r4, r5, r6, r7, pc} _02026574: bl GF_AssertFail add sp, #8 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 _0202657C: .word 0xB6F8D2EC _02026580: .word 0x020F6374 _02026584: .word 0x020F6360 _02026588: .word 0x000001BE _0202658C: .word 0x020F6384 _02026590: .word 0x000001E2 _02026594: .word 0x0000FFFF thumb_func_end String16_FormatInteger thumb_func_start String16_FormatUnsignedLongLong String16_FormatUnsignedLongLong: ; 0x02026598 push {r4, r5, r6, r7, lr} sub sp, #0x14 add r5, r0, #0 ldr r0, [sp, #0x28] add r4, r3, #0 str r0, [sp, #0x28] ldr r0, [sp, #0x2c] str r1, [sp] str r2, [sp, #4] str r0, [sp, #0x2c] cmp r5, #0 bne _020265B4 bl GF_AssertFail _020265B4: ldr r1, [r5, #4] ldr r0, _020266E4 ; =0xB6F8D2EC cmp r1, r0 beq _020265C0 bl GF_AssertFail _020265C0: ldrh r0, [r5] cmp r0, r4 bhi _020265C8 b _020266DC _020265C8: ldr r0, [sp, #0x2c] cmp r0, #0 bne _020265D4 ldr r0, _020266E8 ; =0x020F6338 str r0, [sp, #0x10] b _020265D8 _020265D4: ldr r0, _020266EC ; =0x020F634C str r0, [sp, #0x10] _020265D8: add r0, r5, #0 bl StringSetEmpty ldr r1, _020266F0 ; =0x020F63A8 lsl r2, r4, #3 add r0, r1, r2 ldr r6, [r1, r2] ldr r0, [r0, #4] mov r1, #0 str r0, [sp, #0xc] eor r1, r0 mov r2, #0 add r0, r6, #0 eor r0, r2 orr r0, r1 beq _020266CE _020265F8: ldr r0, [sp] ldr r1, [sp, #4] ldr r3, [sp, #0xc] add r2, r6, #0 bl _ll_udiv add r4, r0, #0 add r7, r1, #0 ldr r1, [sp, #0xc] add r0, r6, #0 add r2, r4, #0 add r3, r7, #0 bl _ll_mul ldr r2, [sp] sub r0, r2, r0 str r0, [sp] ldr r0, [sp, #4] sbc r0, r1 str r0, [sp, #4] ldr r0, [sp, #0x28] cmp r0, #2 bne _0202664A mov r1, #0 mov r0, #0xa sub r0, r4, r0 sbc r7, r1 bhs _02026638 ldr r0, [sp, #0x10] lsl r1, r4, #1 ldrh r0, [r0, r1] b _0202663A _02026638: mov r0, #0xe2 _0202663A: ldrh r2, [r5, #2] add r1, r2, #0 add r1, r1, #1 strh r1, [r5, #2] lsl r1, r2, #1 add r1, r5, r1 strh r0, [r1, #8] b _020266AE _0202664A: mov r1, #0 mov r0, #0 eor r1, r7 eor r0, r4 orr r0, r1 bne _02026666 ldr r0, [sp, #0xc] mov r1, #0 eor r1, r0 mov r2, #1 add r0, r6, #0 eor r0, r2 orr r0, r1 bne _0202668E _02026666: mov r0, #2 str r0, [sp, #0x28] mov r1, #0 mov r0, #0xa sub r0, r4, r0 sbc r7, r1 bhs _0202667C ldr r0, [sp, #0x10] lsl r1, r4, #1 ldrh r0, [r0, r1] b _0202667E _0202667C: mov r0, #0xe2 _0202667E: ldrh r2, [r5, #2] add r1, r2, #0 add r1, r1, #1 strh r1, [r5, #2] lsl r1, r2, #1 add r1, r5, r1 strh r0, [r1, #8] b _020266AE _0202668E: ldr r0, [sp, #0x28] cmp r0, #1 bne _020266AE ldr r0, [sp, #0x2c] cmp r0, #0 bne _0202669E mov r0, #1 b _020266A0 _0202669E: ldr r0, _020266F4 ; =0x000001DE _020266A0: ldrh r2, [r5, #2] add r1, r2, #0 add r1, r1, #1 strh r1, [r5, #2] lsl r1, r2, #1 add r1, r5, r1 strh r0, [r1, #8] _020266AE: ldr r1, [sp, #0xc] add r0, r6, #0 mov r2, #0xa mov r3, #0 bl _ll_udiv str r1, [sp, #0xc] add r6, r0, #0 ldr r0, [sp, #0xc] mov r1, #0 eor r1, r0 mov r2, #0 add r0, r6, #0 eor r0, r2 orr r0, r1 bne _020265F8 _020266CE: ldrh r0, [r5, #2] ldr r1, _020266F8 ; =0x0000FFFF add sp, #0x14 lsl r0, r0, #1 add r0, r5, r0 strh r1, [r0, #8] pop {r4, r5, r6, r7, pc} _020266DC: bl GF_AssertFail add sp, #0x14 pop {r4, r5, r6, r7, pc} .balign 4, 0 _020266E4: .word 0xB6F8D2EC _020266E8: .word 0x020F6338 _020266EC: .word 0x020F634C _020266F0: .word 0x020F63A8 _020266F4: .word 0x000001DE _020266F8: .word 0x0000FFFF thumb_func_end String16_FormatUnsignedLongLong thumb_func_start String_atoi String_atoi: ; 0x020266FC push {r3, r4, r5, r6, r7, lr} sub sp, #0x10 str r1, [sp] mov r1, #0 str r1, [sp, #8] str r1, [sp, #0xc] add r5, r1, #0 ldrh r1, [r0, #2] mov r7, #1 cmp r1, #0x12 bls _0202671A ldr r0, [sp, #8] add sp, #0x10 add r1, r0, #0 pop {r3, r4, r5, r6, r7, pc} _0202671A: sub r1, r1, #1 str r1, [sp, #4] bmi _02026790 lsl r1, r1, #1 add r4, r0, r1 _02026724: ldrh r6, [r4, #8] mov r3, #0xa mov r0, #0 add r1, r6, #0 sub r1, #0xa2 asr r2, r1, #0x1f sub r3, r1, r3 mov ip, r2 mov r3, ip sbc r3, r0 blo _0202675C ldr r0, _020267A0 ; =0x00000121 mov r3, #0xa sub r1, r6, r0 asr r2, r1, #0x1f mov r0, #0 sub r3, r1, r3 mov ip, r2 mov r3, ip sbc r3, r0 blo _0202675C ldr r0, [sp] mov r1, #0 str r1, [r0] ldr r0, [sp, #8] ldr r1, [sp, #0xc] add sp, #0x10 pop {r3, r4, r5, r6, r7, pc} _0202675C: add r0, r1, #0 add r1, r2, #0 add r2, r7, #0 add r3, r5, #0 bl _ll_mul add r2, r1, #0 ldr r1, [sp, #8] add r0, r1, r0 str r0, [sp, #8] ldr r0, [sp, #0xc] adc r0, r2 str r0, [sp, #0xc] add r0, r7, #0 add r1, r5, #0 mov r2, #0xa mov r3, #0 bl _ll_mul add r7, r0, #0 ldr r0, [sp, #4] add r5, r1, #0 sub r4, r4, #2 sub r0, r0, #1 str r0, [sp, #4] bpl _02026724 _02026790: ldr r0, [sp] mov r1, #1 str r1, [r0] ldr r0, [sp, #8] ldr r1, [sp, #0xc] add sp, #0x10 pop {r3, r4, r5, r6, r7, pc} nop _020267A0: .word 0x00000121 thumb_func_end String_atoi thumb_func_start StringCompare StringCompare: ; 0x020267A4 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _020267B2 bl GF_AssertFail _020267B2: ldr r1, [r5, #4] ldr r0, _020267F8 ; =0xB6F8D2EC cmp r1, r0 beq _020267BE bl GF_AssertFail _020267BE: cmp r4, #0 bne _020267C6 bl GF_AssertFail _020267C6: ldr r1, [r4, #4] ldr r0, _020267F8 ; =0xB6F8D2EC cmp r1, r0 beq _020267D2 bl GF_AssertFail _020267D2: ldrh r1, [r5, #8] ldrh r0, [r4, #8] cmp r1, r0 bne _020267F2 ldr r0, _020267FC ; =0x0000FFFF _020267DC: ldrh r1, [r5, #8] cmp r1, r0 bne _020267E6 mov r0, #0 pop {r3, r4, r5, pc} _020267E6: add r5, r5, #2 add r4, r4, #2 ldrh r2, [r5, #8] ldrh r1, [r4, #8] cmp r2, r1 beq _020267DC _020267F2: mov r0, #1 pop {r3, r4, r5, pc} nop _020267F8: .word 0xB6F8D2EC _020267FC: .word 0x0000FFFF thumb_func_end StringCompare thumb_func_start StringGetLength StringGetLength: ; 0x02026800 push {r4, lr} add r4, r0, #0 bne _0202680A bl GF_AssertFail _0202680A: ldr r1, [r4, #4] ldr r0, _0202681C ; =0xB6F8D2EC cmp r1, r0 beq _02026816 bl GF_AssertFail _02026816: ldrh r0, [r4, #2] pop {r4, pc} nop _0202681C: .word 0xB6F8D2EC thumb_func_end StringGetLength thumb_func_start StringCountLines StringCountLines: ; 0x02026820 push {r3, r4, r5, lr} add r4, r0, #0 bne _0202682A bl GF_AssertFail _0202682A: ldr r1, [r4, #4] ldr r0, _0202685C ; =0xB6F8D2EC cmp r1, r0 beq _02026836 bl GF_AssertFail _02026836: ldrh r1, [r4, #2] mov r3, #0 mov r0, #1 cmp r1, #0 ble _02026858 mov r1, #0xe add r5, r4, #0 lsl r1, r1, #0xc _02026846: ldrh r2, [r5, #8] cmp r2, r1 bne _0202684E add r0, r0, #1 _0202684E: ldrh r2, [r4, #2] add r3, r3, #1 add r5, r5, #2 cmp r3, r2 blt _02026846 _02026858: pop {r3, r4, r5, pc} nop _0202685C: .word 0xB6F8D2EC thumb_func_end StringCountLines thumb_func_start StringGetLineN StringGetLineN: ; 0x02026860 push {r3, r4, r5, r6, r7, lr} add r5, r1, #0 add r7, r0, #0 add r6, r2, #0 cmp r5, #0 bne _02026870 bl GF_AssertFail _02026870: ldr r1, [r5, #4] ldr r0, _020268E8 ; =0xB6F8D2EC cmp r1, r0 beq _0202687C bl GF_AssertFail _0202687C: cmp r7, #0 bne _02026884 bl GF_AssertFail _02026884: ldr r1, [r7, #4] ldr r0, _020268E8 ; =0xB6F8D2EC cmp r1, r0 beq _02026890 bl GF_AssertFail _02026890: mov r4, #0 cmp r6, #0 beq _020268BA ldrh r0, [r5, #2] cmp r0, #0 ble _020268BA mov r1, #0xe add r0, r5, #0 lsl r1, r1, #0xc _020268A2: ldrh r2, [r0, #8] cmp r2, r1 bne _020268B0 sub r6, r6, #1 bne _020268B0 add r4, r4, #1 b _020268BA _020268B0: ldrh r2, [r5, #2] add r4, r4, #1 add r0, r0, #2 cmp r4, r2 blt _020268A2 _020268BA: add r0, r7, #0 bl StringSetEmpty ldrh r0, [r5, #2] cmp r4, r0 bge _020268E4 lsl r0, r4, #1 add r6, r5, r0 _020268CA: ldrh r1, [r6, #8] mov r0, #0xe lsl r0, r0, #0xc cmp r1, r0 beq _020268E4 add r0, r7, #0 bl StrAddChar ldrh r0, [r5, #2] add r4, r4, #1 add r6, r6, #2 cmp r4, r0 blt _020268CA _020268E4: pop {r3, r4, r5, r6, r7, pc} nop _020268E8: .word 0xB6F8D2EC thumb_func_end StringGetLineN thumb_func_start String_RadioAddStatic String_RadioAddStatic: ; 0x020268EC push {r4, r5, r6, r7, lr} sub sp, #0xc add r7, r1, #0 add r6, r0, #0 ldr r1, _02026990 ; =0x000001AF mov r0, #0 bl FontI_GetGlyphWidth str r0, [sp, #8] ldr r1, _02026994 ; =0x000001EB mov r0, #0 bl FontI_GetGlyphWidth mov r1, #0x7b str r0, [sp, #4] mov r0, #0 lsl r1, r1, #2 bl FontI_GetGlyphWidth str r0, [sp] cmp r6, #0 bne _0202691C bl GF_AssertFail _0202691C: ldr r1, [r6, #4] ldr r0, _02026998 ; =0xB6F8D2EC cmp r1, r0 beq _02026928 bl GF_AssertFail _02026928: add r0, r6, #0 bl StringGetLength ldrh r0, [r6, #2] mov r4, #0 sub r0, r0, #1 cmp r0, #0 ble _0202698A add r5, r6, #0 _0202693A: ldrh r1, [r5, #8] ldr r0, _0202699C ; =0x000001DE cmp r1, r0 beq _0202697E bl MTRandom lsr r0, r0, #8 mov r1, #0x65 bl _u32_div_f cmp r1, r7 bhs _0202697E ldrh r1, [r5, #8] mov r0, #0 bl FontI_GetGlyphWidth ldr r1, [sp, #8] cmp r0, r1 blo _02026966 ldr r0, _02026990 ; =0x000001AF strh r0, [r5, #8] b _0202697E _02026966: ldr r1, [sp] cmp r0, r1 blo _02026974 mov r0, #0x7b lsl r0, r0, #2 strh r0, [r5, #8] b _0202697E _02026974: ldr r1, [sp, #4] cmp r0, r1 blo _0202697E ldr r0, _02026994 ; =0x000001EB strh r0, [r5, #8] _0202697E: ldrh r0, [r6, #2] add r4, r4, #1 add r5, r5, #2 sub r0, r0, #1 cmp r4, r0 blt _0202693A _0202698A: add sp, #0xc pop {r4, r5, r6, r7, pc} nop _02026990: .word 0x000001AF _02026994: .word 0x000001EB _02026998: .word 0xB6F8D2EC _0202699C: .word 0x000001DE thumb_func_end String_RadioAddStatic thumb_func_start CopyU16ArrayToString CopyU16ArrayToString: ; 0x020269A0 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _020269AE bl GF_AssertFail _020269AE: ldr r1, [r5, #4] ldr r0, _020269FC ; =0xB6F8D2EC cmp r1, r0 beq _020269BA bl GF_AssertFail _020269BA: mov r0, #0 strh r0, [r5, #2] ldrh r1, [r4] ldr r0, _02026A00 ; =0x0000FFFF cmp r1, r0 beq _020269EE add r1, r0, #0 _020269C8: ldrh r2, [r5] ldrh r0, [r5, #2] sub r2, r2, #1 cmp r0, r2 blt _020269D8 bl GF_AssertFail b _020269EE _020269D8: add r2, r0, #0 add r2, r2, #1 strh r2, [r5, #2] ldrh r2, [r4] lsl r0, r0, #1 add r0, r5, r0 add r4, r4, #2 strh r2, [r0, #8] ldrh r0, [r4] cmp r0, r1 bne _020269C8 _020269EE: ldrh r0, [r5, #2] ldr r1, _02026A00 ; =0x0000FFFF lsl r0, r0, #1 add r0, r5, r0 strh r1, [r0, #8] pop {r3, r4, r5, pc} nop _020269FC: .word 0xB6F8D2EC _02026A00: .word 0x0000FFFF thumb_func_end CopyU16ArrayToString thumb_func_start CopyU16ArrayToStringN CopyU16ArrayToStringN: ; 0x02026A04 push {r3, r4, r5, r6, r7, lr} add r5, r0, #0 add r7, r1, #0 add r4, r2, #0 cmp r5, #0 bne _02026A14 bl GF_AssertFail _02026A14: ldr r1, [r5, #4] ldr r0, _02026A60 ; =0xB6F8D2EC cmp r1, r0 beq _02026A20 bl GF_AssertFail _02026A20: ldrh r0, [r5] cmp r4, r0 bhi _02026A5A lsl r6, r4, #1 add r0, r5, #0 add r0, #8 add r1, r7, #0 add r2, r6, #0 bl memcpy mov r2, #0 cmp r4, #0 bls _02026A4C ldr r0, _02026A64 ; =0x0000FFFF add r3, r5, #0 _02026A3E: ldrh r1, [r3, #8] cmp r1, r0 beq _02026A4C add r2, r2, #1 add r3, r3, #2 cmp r2, r4 blo _02026A3E _02026A4C: strh r2, [r5, #2] cmp r2, r4 bne _02026A5E ldr r1, _02026A64 ; =0x0000FFFF add r0, r5, r6 strh r1, [r0, #6] pop {r3, r4, r5, r6, r7, pc} _02026A5A: bl GF_AssertFail _02026A5E: pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 _02026A60: .word 0xB6F8D2EC _02026A64: .word 0x0000FFFF thumb_func_end CopyU16ArrayToStringN thumb_func_start CopyStringToU16Array CopyStringToU16Array: ; 0x02026A68 push {r4, r5, r6, lr} add r5, r0, #0 add r6, r1, #0 add r4, r2, #0 cmp r5, #0 bne _02026A78 bl GF_AssertFail _02026A78: ldr r1, [r5, #4] ldr r0, _02026AA0 ; =0xB6F8D2EC cmp r1, r0 beq _02026A84 bl GF_AssertFail _02026A84: ldrh r0, [r5, #2] add r2, r0, #1 cmp r2, r4 bhi _02026A9A add r5, #8 add r0, r6, #0 add r1, r5, #0 lsl r2, r2, #1 bl memcpy pop {r4, r5, r6, pc} _02026A9A: bl GF_AssertFail pop {r4, r5, r6, pc} .balign 4, 0 _02026AA0: .word 0xB6F8D2EC thumb_func_end CopyStringToU16Array thumb_func_start String_c_str String_c_str: ; 0x02026AA4 push {r4, lr} add r4, r0, #0 bne _02026AAE bl GF_AssertFail _02026AAE: ldr r1, [r4, #4] ldr r0, _02026AC0 ; =0xB6F8D2EC cmp r1, r0 beq _02026ABA bl GF_AssertFail _02026ABA: add r4, #8 add r0, r4, #0 pop {r4, pc} .balign 4, 0 _02026AC0: .word 0xB6F8D2EC thumb_func_end String_c_str thumb_func_start StringCat StringCat: ; 0x02026AC4 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _02026AD2 bl GF_AssertFail _02026AD2: ldr r1, [r5, #4] ldr r0, _02026B24 ; =0xB6F8D2EC cmp r1, r0 beq _02026ADE bl GF_AssertFail _02026ADE: cmp r4, #0 bne _02026AE6 bl GF_AssertFail _02026AE6: ldr r1, [r4, #4] ldr r0, _02026B24 ; =0xB6F8D2EC cmp r1, r0 beq _02026AF2 bl GF_AssertFail _02026AF2: ldrh r2, [r4, #2] ldrh r0, [r5, #2] add r1, r0, r2 add r3, r1, #1 ldrh r1, [r5] cmp r3, r1 bgt _02026B1E add r1, r5, #0 add r1, #8 lsl r0, r0, #1 add r0, r1, r0 add r1, r4, #0 add r2, r2, #1 add r1, #8 lsl r2, r2, #1 bl memcpy ldrh r1, [r5, #2] ldrh r0, [r4, #2] add r0, r1, r0 strh r0, [r5, #2] pop {r3, r4, r5, pc} _02026B1E: bl GF_AssertFail pop {r3, r4, r5, pc} .balign 4, 0 _02026B24: .word 0xB6F8D2EC thumb_func_end StringCat thumb_func_start StrAddChar StrAddChar: ; 0x02026B28 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _02026B36 bl GF_AssertFail _02026B36: ldr r1, [r5, #4] ldr r0, _02026B68 ; =0xB6F8D2EC cmp r1, r0 beq _02026B42 bl GF_AssertFail _02026B42: ldrh r2, [r5, #2] ldrh r0, [r5] add r1, r2, #1 cmp r1, r0 bge _02026B60 lsl r0, r2, #1 strh r1, [r5, #2] add r0, r5, r0 strh r4, [r0, #8] ldrh r0, [r5, #2] ldr r1, _02026B6C ; =0x0000FFFF lsl r0, r0, #1 add r0, r5, r0 strh r1, [r0, #8] pop {r3, r4, r5, pc} _02026B60: bl GF_AssertFail pop {r3, r4, r5, pc} nop _02026B68: .word 0xB6F8D2EC _02026B6C: .word 0x0000FFFF thumb_func_end StrAddChar thumb_func_start StringIsTrainerName StringIsTrainerName: ; 0x02026B70 ldrh r1, [r0, #2] cmp r1, #0 beq _02026B84 ldrh r1, [r0, #8] mov r0, #0xf1 lsl r0, r0, #8 cmp r1, r0 bne _02026B84 mov r0, #1 bx lr _02026B84: mov r0, #0 bx lr thumb_func_end StringIsTrainerName thumb_func_start StringCat_HandleTrainerName StringCat_HandleTrainerName: ; 0x02026B88 push {r3, r4, r5, r6, r7, lr} add r4, r1, #0 str r0, [sp] add r0, r4, #0 bl StringIsTrainerName cmp r0, #0 beq _02026BF2 ldr r0, [sp] ldr r1, [sp] ldrh r0, [r0, #2] add r1, #8 ldr r7, _02026BFC ; =0x000001FF lsl r0, r0, #1 add r3, r1, r0 mov r0, #0 add r4, #0xa add r1, r0, #0 _02026BAC: ldrh r2, [r4] asr r2, r0 and r2, r7 lsl r2, r2, #0x10 add r0, #9 lsr r2, r2, #0x10 cmp r0, #0xf blt _02026BD4 add r4, r4, #2 sub r0, #0xf beq _02026BD4 ldrh r6, [r4] mov r5, #9 sub r5, r5, r0 lsl r6, r5 ldr r5, _02026BFC ; =0x000001FF and r5, r6 orr r2, r5 lsl r2, r2, #0x10 lsr r2, r2, #0x10 _02026BD4: ldr r5, _02026BFC ; =0x000001FF cmp r2, r5 beq _02026BE2 strh r2, [r3] add r3, r3, #2 add r1, r1, #1 b _02026BAC _02026BE2: ldr r0, _02026C00 ; =0x0000FFFF strh r0, [r3] ldr r0, [sp] ldrh r0, [r0, #2] add r1, r0, r1 ldr r0, [sp] strh r1, [r0, #2] pop {r3, r4, r5, r6, r7, pc} _02026BF2: ldr r0, [sp] add r1, r4, #0 bl StringCat pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 _02026BFC: .word 0x000001FF _02026C00: .word 0x0000FFFF thumb_func_end StringCat_HandleTrainerName thumb_func_start StrUpperFirstChar StrUpperFirstChar: ; 0x02026C04 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 cmp r5, #0 bne _02026C12 bl GF_AssertFail _02026C12: ldr r1, [r5, #4] ldr r0, _02026C3C ; =0xB6F8D2EC cmp r1, r0 beq _02026C1E bl GF_AssertFail _02026C1E: ldrh r0, [r5, #2] cmp r0, r4 ble _02026C3A add r5, #8 lsl r2, r4, #1 ldrh r1, [r5, r2] ldr r0, _02026C40 ; =0x00000145 cmp r1, r0 blo _02026C3A add r0, #0x19 cmp r1, r0 bhi _02026C3A sub r1, #0x1a strh r1, [r5, r2] _02026C3A: pop {r3, r4, r5, pc} .balign 4, 0 _02026C3C: .word 0xB6F8D2EC _02026C40: .word 0x00000145 thumb_func_end StrUpperFirstChar