Code:
@[[Convert to Thumb]]
add r2,pc,#1
bx r2
.thumb
execute:
ldr r1, text
mov r12,lr
mov r0,#0x18
bl textstuff
mov r4, r5
mov r0, #0x1C
bl textstuff
mov lr,r12
sub r1, #0x11
ldrb r3, [r1]
cmp r3, #0x32
bgt loadvalues
cmp r3,#0x31
strb r5, [r4]
bgt exit
strh r5,[r4]
beq exit
str r5,[r4]
b exit
loadvalues:cmp r3,#0x35
bgt add_subtract_routine
mov r5,#0x30
mov r0,#0x7
clearloop:
strb r5,[r1, r0]
sub r0,#0x1
bpl clearloop
cmp r3,#0x34
bgt loadbyte
blt loadword
mov r0,#0x1
textconvert:mov r2,#0xF
ldrb r3,[r4]
add r4,#0x1
mov r5,r3
lsr r3,#0x4
and r5,r2
cmp r3,#0x9
ble notletters1
add r3,#0x7
notletters1:add r3,#0x30
cmp r5,#0x9
ble notletters2
add r5,#0x7
notletters2:add r5,#0x30
strb r3,[r1,#6]
strb r5,[r1,#7]
sub r1,#0x2
sub r0,#0x1
bpl textconvert
b exit
loadbyte:mov r0,#0x0
b textconvert
add_subtract_routine:
cmp r3,#0x39
beq addrsearch
bgt exit
ldr r1,=0x4000130
ldrb r1,[r1]
mov r0,#0x20
ldr r2,[r4]
tst r1,r0
bne mainpart
mov r0,#0x0
mainpart:cmp r0,#0
bgt addstuff
sub r2,r5
b storestuff
addstuff:
add r2,r5
storestuff:
cmp r3,#0x37
strb r2,[r4]
bgt exit
strh r2,[r4]
beq exit
str r2,[r4]
b exit
addrsearch:
mov r1,r4
ldr r4,pointerloc
ldr r0,searchstart
ldr r2,searchend
cmp r1,#1
bgt part1
blt part2
add r1,#2
part1:
sub r1,#5
part2:
add r1,#4
search:cmp r1,#2
ldrb r3,[r0]
blt contsearch
ldrh r3,[r0]
beq contsearch
ldr r3,[r0]
contsearch:
cmp r3,r5
bne notaddr
str r0,[r4]
b finishsearch
notaddr:
add r0,r1
cmp r0,r2
ble search
finishsearch:
ldr r1,text
mov r12,lr
bl loadword
mov lr,r12
ldr r4,pointerloc
mov r0,#0
str r0,[r4]
textstuff:add r1, #0x1
mov r5,#0x0
mov r2,#0xF
@[[Final text address in r5]]
loop:ldrb r3,[r1]
add r1,#1
cmp r3,#0x3A
blt number
add r3,#9
number:and r3,r2
lsl r3,r0
add r5,r3
sub r0,#0x4
bpl loop
exit:bx lr
loadword:mov r0,#0x3
b textconvert
.arm
text:
.long 0x22AF136
pointerloc:
.long 0x22BF110
searchstart:
.long 0x2100000
searchend:
.long 0x23FFFF0