mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-07 11:14:05 -05:00
update mwasmarm patcher and decompile string_util.c (thanks Demki)
This commit is contained in:
parent
4c5e350243
commit
d866013b4e
2
Makefile
2
Makefile
|
|
@ -79,7 +79,7 @@ OBJCOPY := $(CROSS)objcopy
|
|||
|
||||
# ./tools/mwccarm/2.0/base/mwasmarm.exe -proc arm5te asm/arm9_thumb.s -o arm9.o
|
||||
ASFLAGS = -proc arm5te
|
||||
CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c -Cpp_exceptions off -i nitro
|
||||
CFLAGS = -O4,p -proc v5te -thumb -fp soft -lang c99 -Cpp_exceptions off -i nitro
|
||||
LDFLAGS = -map -nodead -w off -proc v5te -interworking -map -symtab -m Entry
|
||||
|
||||
####################### Other Tools #########################
|
||||
|
|
|
|||
131
asm/rom2.s
131
asm/rom2.s
|
|
@ -1,9 +1,138 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
/* rom2.s TODO: Disassemble */
|
||||
|
||||
.section .text
|
||||
|
||||
.incbin "baserom.nds", 0xD9150, 0x1747C
|
||||
.incbin "baserom.nds", 0xD9150, 0x16D3C
|
||||
|
||||
; required to make the linker happy :
|
||||
|
||||
arm_func_start _u32_div_f
|
||||
_u32_div_f: ; 0x020EBE8C
|
||||
cmp r1, #0x0
|
||||
bxeq lr
|
||||
cmp r0, r1
|
||||
movcc r1, r0
|
||||
movcc r0, #0x0
|
||||
bxcc lr
|
||||
mov r2, #0x1c
|
||||
mov r3, r0, lsr #0x4
|
||||
cmp r1, r3, lsr #0xc
|
||||
suble r2, r2, #0x10
|
||||
movle r3, r3, lsr #0x10
|
||||
cmp r1, r3, lsr #0x4
|
||||
suble r2, r2, #0x8
|
||||
movle r3, r3, lsr #0x8
|
||||
cmp r1, r3
|
||||
suble r2, r2, #0x4
|
||||
movle r3, r3, lsr #0x4
|
||||
mov r0, r0, lsl r2
|
||||
rsb r1, r1, #0x0
|
||||
adds r0, r0, r0
|
||||
add r2, r2, r2, lsl #0x1
|
||||
add pc, pc, r2, lsl #0x2
|
||||
mov r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
adcs r3, r1, r3, lsl #0x1
|
||||
subcc r3, r3, r1
|
||||
adcs r0, r0, r0
|
||||
mov r1, r3
|
||||
bx lr
|
||||
|
||||
.incbin "baserom.nds", 0xF0070, 0x55C
|
||||
|
||||
.global FUN_020EC5CC
|
||||
FUN_020EC5CC:
|
||||
|
|
|
|||
|
|
@ -1,234 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "global.inc"
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start FUN_02002248
|
||||
FUN_02002248: ; 0x02002248
|
||||
ldrh r3, [r1, #0x0]
|
||||
ldr r2, _02002264 ; =0x0000FFFF
|
||||
cmp r3, r2
|
||||
beq _0200225C
|
||||
_02002250:
|
||||
add r1, r1, #0x2
|
||||
strh r3, [r0, #0x0]
|
||||
ldrh r3, [r1, #0x0]
|
||||
add r0, r0, #0x2
|
||||
cmp r3, r2
|
||||
bne _02002250
|
||||
_0200225C:
|
||||
ldr r1, _02002264 ; =0x0000FFFF
|
||||
strh r1, [r0, #0x0]
|
||||
bx lr
|
||||
nop
|
||||
_02002264: .word 0x0000FFFF
|
||||
|
||||
thumb_func_start FUN_02002268
|
||||
FUN_02002268: ; 0x02002268
|
||||
push {r4-r5}
|
||||
mov r4, #0x0
|
||||
cmp r2, #0x0
|
||||
bls _02002280
|
||||
add r5, r0, #0x0
|
||||
_02002272:
|
||||
ldrh r3, [r1, #0x0]
|
||||
add r4, r4, #0x1
|
||||
add r1, r1, #0x2
|
||||
strh r3, [r5, #0x0]
|
||||
add r5, r5, #0x2
|
||||
cmp r4, r2
|
||||
blo _02002272
|
||||
_02002280:
|
||||
lsl r1, r2, #0x1
|
||||
add r0, r0, r1
|
||||
pop {r4-r5}
|
||||
bx lr
|
||||
|
||||
thumb_func_start FUN_02002288
|
||||
FUN_02002288: ; 0x02002288
|
||||
ldrh r2, [r0, #0x0]
|
||||
ldr r1, _020022A0 ; =0x0000FFFF
|
||||
mov r3, #0x0
|
||||
cmp r2, r1
|
||||
beq _0200229C
|
||||
_02002292:
|
||||
add r0, r0, #0x2
|
||||
ldrh r2, [r0, #0x0]
|
||||
add r3, r3, #0x1
|
||||
cmp r2, r1
|
||||
bne _02002292
|
||||
_0200229C:
|
||||
add r0, r3, #0x0
|
||||
bx lr
|
||||
.balign 4
|
||||
_020022A0: .word 0x0000FFFF
|
||||
|
||||
thumb_func_start FUN_020022A4
|
||||
FUN_020022A4: ; 0x020022A4
|
||||
push {r3-r4}
|
||||
ldrh r4, [r0, #0x0]
|
||||
ldrh r2, [r1, #0x0]
|
||||
cmp r4, r2
|
||||
bne _020022C6
|
||||
ldr r2, _020022CC ; =0x0000FFFF
|
||||
_020022B0:
|
||||
cmp r4, r2
|
||||
bne _020022BA
|
||||
mov r0, #0x0
|
||||
pop {r3-r4}
|
||||
bx lr
|
||||
_020022BA:
|
||||
add r0, r0, #0x2
|
||||
add r1, r1, #0x2
|
||||
ldrh r4, [r0, #0x0]
|
||||
ldrh r3, [r1, #0x0]
|
||||
cmp r4, r3
|
||||
beq _020022B0
|
||||
_020022C6:
|
||||
mov r0, #0x1
|
||||
pop {r3-r4}
|
||||
bx lr
|
||||
.balign 4
|
||||
_020022CC: .word 0x0000FFFF
|
||||
|
||||
thumb_func_start FUN_020022D0
|
||||
FUN_020022D0: ; 0x020022D0
|
||||
push {r3-r6}
|
||||
ldrh r6, [r1, #0x0]
|
||||
ldrh r5, [r0, #0x0]
|
||||
cmp r5, r6
|
||||
bne _02002304
|
||||
ldr r3, _0200230C ; =0x0000FFFF
|
||||
add r4, r3, #0x0
|
||||
_020022DE:
|
||||
cmp r2, #0x0
|
||||
bne _020022E8
|
||||
mov r0, #0x0
|
||||
pop {r3-r6}
|
||||
bx lr
|
||||
_020022E8:
|
||||
cmp r5, r4
|
||||
bne _020022F6
|
||||
cmp r6, r3
|
||||
bne _020022F6
|
||||
mov r0, #0x0
|
||||
pop {r3-r6}
|
||||
bx lr
|
||||
_020022F6:
|
||||
add r0, r0, #0x2
|
||||
add r1, r1, #0x2
|
||||
ldrh r6, [r1, #0x0]
|
||||
ldrh r5, [r0, #0x0]
|
||||
sub r2, r2, #0x1
|
||||
cmp r5, r6
|
||||
beq _020022DE
|
||||
_02002304:
|
||||
mov r0, #0x1
|
||||
pop {r3-r6}
|
||||
bx lr
|
||||
nop
|
||||
_0200230C: .word 0x0000FFFF
|
||||
|
||||
thumb_func_start FUN_02002310
|
||||
FUN_02002310: ; 0x02002310
|
||||
push {r3-r4}
|
||||
mov r3, #0x0
|
||||
cmp r2, #0x0
|
||||
bls _02002324
|
||||
add r4, r0, #0x0
|
||||
_0200231A:
|
||||
add r3, r3, #0x1
|
||||
strh r1, [r4, #0x0]
|
||||
add r4, r4, #0x2
|
||||
cmp r3, r2
|
||||
blo _0200231A
|
||||
_02002324:
|
||||
lsl r1, r3, #0x1
|
||||
add r0, r0, r1
|
||||
pop {r3-r4}
|
||||
bx lr
|
||||
|
||||
thumb_func_start FUN_0200232C
|
||||
FUN_0200232C: ; 0x0200232C
|
||||
ldr r3, _02002334 ; =FUN_02002310
|
||||
add r2, r1, #0x0
|
||||
ldr r1, _02002338 ; =0x0000FFFF
|
||||
bx r3
|
||||
.balign 4
|
||||
_02002334: .word FUN_02002310
|
||||
_02002338: .word 0x0000FFFF
|
||||
|
||||
thumb_func_start FUN_0200233C
|
||||
FUN_0200233C: ; 0x0200233C
|
||||
push {r3-r7, lr}
|
||||
add r5, r0, #0x0
|
||||
add r7, r1, #0x0
|
||||
ldr r0, _020023B4 ; =0x020ECB24
|
||||
lsl r1, r3, #0x2
|
||||
ldr r4, [r0, r1]
|
||||
add r6, r2, #0x0
|
||||
cmp r4, #0x0
|
||||
beq _020023AC
|
||||
_0200234E:
|
||||
add r0, r7, #0x0
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
lsl r0, r0, #0x10
|
||||
lsr r1, r0, #0x10
|
||||
add r0, r4, #0x0
|
||||
mul r0, r1
|
||||
sub r7, r7, r0
|
||||
cmp r6, #0x2
|
||||
bne _02002378
|
||||
cmp r1, #0xa
|
||||
blo _0200236C
|
||||
mov r0, #0xe2
|
||||
b _02002372
|
||||
_0200236C:
|
||||
ldr r0, _020023B8 ; =0x020ECB08
|
||||
lsl r1, r1, #0x1
|
||||
ldrh r0, [r0, r1]
|
||||
_02002372:
|
||||
strh r0, [r5, #0x0]
|
||||
add r5, r5, #0x2
|
||||
b _020023A0
|
||||
_02002378:
|
||||
cmp r1, #0x0
|
||||
bne _02002380
|
||||
cmp r4, #0x1
|
||||
bne _02002396
|
||||
_02002380:
|
||||
mov r6, #0x2
|
||||
cmp r1, #0xa
|
||||
blo _0200238A
|
||||
mov r0, #0xe2
|
||||
b _02002390
|
||||
_0200238A:
|
||||
ldr r0, _020023B8 ; =0x020ECB08
|
||||
lsl r1, r1, #0x1
|
||||
ldrh r0, [r0, r1]
|
||||
_02002390:
|
||||
strh r0, [r5, #0x0]
|
||||
add r5, r5, #0x2
|
||||
b _020023A0
|
||||
_02002396:
|
||||
cmp r6, #0x1
|
||||
bne _020023A0
|
||||
mov r0, #0x1
|
||||
strh r0, [r5, #0x0]
|
||||
add r5, r5, #0x2
|
||||
_020023A0:
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0xa
|
||||
blx FUN_020EBE8C
|
||||
add r4, r0, #0x0
|
||||
bne _0200234E
|
||||
_020023AC:
|
||||
ldr r0, _020023BC ; =0x0000FFFF
|
||||
strh r0, [r5, #0x0]
|
||||
add r0, r5, #0x0
|
||||
pop {r3-r7, pc}
|
||||
.balign 4
|
||||
_020023B4: .word 0x020ECB24
|
||||
_020023B8: .word 0x020ECB08
|
||||
_020023BC: .word 0x0000FFFF
|
||||
|
|
@ -12747,7 +12747,7 @@ _020083C4:
|
|||
ldr r1, [sp, #0xc]
|
||||
ldr r0, [sp, #0x14]
|
||||
lsl r1, r1, #0x1
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
beq _020083F4
|
||||
mov r0, #0xab
|
||||
|
|
@ -12766,7 +12766,7 @@ _020083C4:
|
|||
_020083F4:
|
||||
ldr r1, [sp, #0xc]
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
beq _02008416
|
||||
mov r0, #0xab
|
||||
|
|
@ -12870,7 +12870,7 @@ _020084B4:
|
|||
ldr r1, [sp, #0x8]
|
||||
ldr r0, [sp, #0x14]
|
||||
lsl r1, r1, #0x1
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
beq _020084E4
|
||||
mov r0, #0xab
|
||||
|
|
@ -12889,7 +12889,7 @@ _020084B4:
|
|||
_020084E4:
|
||||
ldr r1, [sp, #0x8]
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
beq _02008504
|
||||
mov r0, #0xab
|
||||
|
|
@ -13066,7 +13066,7 @@ _0200862C:
|
|||
ldr r1, [sp, #0x4]
|
||||
ldr r0, [sp, #0x0]
|
||||
lsl r1, r1, #0x1
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
beq _02008654
|
||||
mov r0, #0xab
|
||||
|
|
@ -13081,7 +13081,7 @@ _0200862C:
|
|||
_02008654:
|
||||
ldr r1, [sp, #0x4]
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
beq _02008672
|
||||
mov r0, #0xab
|
||||
|
|
@ -19941,7 +19941,7 @@ FUN_0200B9EC: ; 0x0200B9EC
|
|||
add r3, r4, #0x0
|
||||
ldr r5, [sp, #0x34]
|
||||
ldr r7, [sp, #0x38]
|
||||
bl FUN_0200233C
|
||||
bl ConvertUIntToDecimalString
|
||||
ldrh r1, [r6, #0x8]
|
||||
ldr r0, _0200BA74 ; =0x0000FFFF
|
||||
cmp r1, r0
|
||||
|
|
@ -20043,7 +20043,7 @@ FUN_0200BAAC: ; 0x0200BAAC
|
|||
add r2, r3, #0x0
|
||||
add r0, #0x8
|
||||
add r3, r4, #0x0
|
||||
bl FUN_0200233C
|
||||
bl ConvertUIntToDecimalString
|
||||
ldrh r1, [r7, #0x8]
|
||||
ldr r0, _0200BB10 ; =0x0000FFFF
|
||||
cmp r1, r0
|
||||
|
|
@ -37274,7 +37274,7 @@ _02013B8A:
|
|||
beq _02013BC4
|
||||
bl FUN_0201B9EC
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
ldr r4, [r5, #0x4]
|
||||
mov r0, #0x0
|
||||
mov r2, #0x1
|
||||
|
|
@ -54825,7 +54825,7 @@ _0201BB8E:
|
|||
mul r0, r1
|
||||
mov r1, #0x5a
|
||||
lsl r1, r1, #0x2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsl r0, r0, #0x10
|
||||
lsr r1, r0, #0x10
|
||||
_0201BBA2:
|
||||
|
|
@ -56250,7 +56250,7 @@ _0201C5DE:
|
|||
lsl r2, r2, #0x4
|
||||
lsl r0, r0, #0x4
|
||||
mul r0, r2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
pop {r3, pc}
|
||||
.balign 4
|
||||
|
||||
|
|
@ -57516,7 +57516,7 @@ _0201CF0C:
|
|||
ldr r2, [sp, #0x0]
|
||||
cmp r2, #0x1
|
||||
bne _0201CF36
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
str r1, [r5, #0x54]
|
||||
b _0201CF3E
|
||||
_0201CF36:
|
||||
|
|
@ -57583,7 +57583,7 @@ _0201CF7C:
|
|||
blo _0201CFB8
|
||||
cmp r7, #0x4
|
||||
bne _0201CFB2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
str r1, [r5, #0x54]
|
||||
b _0201CFB8
|
||||
_0201CFB2:
|
||||
|
|
@ -60201,7 +60201,7 @@ _0201E2A6:
|
|||
beq _0201E2B6
|
||||
blx FUN_020B19C4
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
pop {r4, pc}
|
||||
_0201E2B6:
|
||||
mov r0, #0x0
|
||||
|
|
@ -65148,7 +65148,7 @@ _02020602:
|
|||
beq _02020612
|
||||
blx FUN_020B19C4
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
pop {r4, pc}
|
||||
_02020612:
|
||||
mov r0, #0x0
|
||||
|
|
@ -68130,7 +68130,7 @@ _02021B74:
|
|||
_02021B80:
|
||||
add r0, r6, #0x0
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsl r0, r0, #0x10
|
||||
lsr r1, r0, #0x10
|
||||
add r0, r4, #0x0
|
||||
|
|
@ -68200,7 +68200,7 @@ _02021BEC:
|
|||
_02021BFA:
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0xa
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r4, r0, #0x0
|
||||
bne _02021B80
|
||||
_02021C06:
|
||||
|
|
@ -72216,14 +72216,14 @@ FUN_0202395C: ; 0x0202395C
|
|||
add r4, r1, #0x0
|
||||
add r5, r0, #0x0
|
||||
add r0, r4, #0x0
|
||||
bl FUN_02002288
|
||||
bl StringLength
|
||||
cmp r0, #0x8
|
||||
blt _02023970
|
||||
bl ErrorHandling
|
||||
_02023970:
|
||||
add r0, r5, #0x0
|
||||
add r1, r4, #0x0
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
pop {r3-r5, pc}
|
||||
.balign 4
|
||||
|
||||
|
|
@ -72464,7 +72464,7 @@ FUN_02023AA4: ; 0x02023AA4
|
|||
mov r2, #0x7
|
||||
add r5, r0, #0x0
|
||||
add r4, r1, #0x0
|
||||
bl FUN_020022D0
|
||||
bl StringNotEqualN
|
||||
cmp r0, #0x0
|
||||
bne _02023AC0
|
||||
ldr r1, [r5, #0x10]
|
||||
|
|
@ -76257,7 +76257,7 @@ FUN_02025500: ; 0x02025500
|
|||
push {r3-r5, lr}
|
||||
add r5, r0, #0x0
|
||||
add r4, r1, #0x0
|
||||
bl FUN_020022A4
|
||||
bl StringNotEqual
|
||||
cmp r0, #0x0
|
||||
bne _0202551A
|
||||
ldr r1, [r5, #0x10]
|
||||
|
|
@ -76462,7 +76462,7 @@ FUN_02025658: ; 0x02025658
|
|||
strb r0, [r4, #0x7]
|
||||
add r0, r4, #0x0
|
||||
add r0, #0x8
|
||||
bl FUN_0200232C
|
||||
bl StringFillEOS
|
||||
ldr r0, _020256A8 ; =0x0000FFFF
|
||||
mov r1, #0x0
|
||||
add r2, r4, #0x0
|
||||
|
|
@ -76538,7 +76538,7 @@ FUN_020256DC: ; 0x020256DC
|
|||
add r1, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r0, #0x8
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
add r0, r6, #0x0
|
||||
bl FUN_020239CC
|
||||
strb r0, [r5, #0x4]
|
||||
|
|
@ -83774,7 +83774,7 @@ _0202886A:
|
|||
add r0, r6, #0x0
|
||||
add r1, r5, #0x0
|
||||
add r2, r7, #0x0
|
||||
bl FUN_020022D0
|
||||
bl StringNotEqualN
|
||||
cmp r0, #0x0
|
||||
bne _0202887C
|
||||
mov r0, #0x1
|
||||
|
|
@ -83817,7 +83817,7 @@ FUN_020288AC: ; 0x020288AC
|
|||
add r0, #0x10
|
||||
add r1, #0x10
|
||||
mov r2, #0x8
|
||||
bl FUN_020022D0
|
||||
bl StringNotEqualN
|
||||
cmp r0, #0x0
|
||||
beq _020288C4
|
||||
mov r0, #0x0
|
||||
|
|
@ -83826,7 +83826,7 @@ _020288C4:
|
|||
add r0, r5, #0x0
|
||||
add r1, r4, #0x0
|
||||
mov r2, #0x8
|
||||
bl FUN_020022D0
|
||||
bl StringNotEqualN
|
||||
cmp r0, #0x0
|
||||
beq _020288D6
|
||||
mov r0, #0x0
|
||||
|
|
@ -86993,21 +86993,21 @@ _02029E6C:
|
|||
bls _02029EAE
|
||||
add r0, r7, #0x0
|
||||
mov r1, #0x3c
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r4, r4, r0
|
||||
add r0, r7, #0x0
|
||||
mov r1, #0x3c
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r7, r1, #0x0
|
||||
cmp r4, #0x3b
|
||||
bls _02029EAE
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0x3c
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r6, r6, r0
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0x3c
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
ldr r0, _02029EB8 ; =0x000003E7
|
||||
add r4, r1, #0x0
|
||||
cmp r6, r0
|
||||
|
|
@ -90885,18 +90885,18 @@ FUN_0202B888: ; 0x0202B888
|
|||
mov r1, #0x0
|
||||
str r1, [r0, #0x0]
|
||||
str r1, [r0, #0x4]
|
||||
ldr r3, _0202B898 ; =FUN_0200232C
|
||||
ldr r3, _0202B898 ; =StringFillEOS
|
||||
add r0, #0x8
|
||||
mov r1, #0x8
|
||||
bx r3
|
||||
nop
|
||||
_0202B898: .word FUN_0200232C
|
||||
_0202B898: .word StringFillEOS
|
||||
|
||||
thumb_func_start FUN_0202B89C
|
||||
FUN_0202B89C: ; 0x0202B89C
|
||||
push {r3, lr}
|
||||
add r0, #0x8
|
||||
bl FUN_02002288
|
||||
bl StringLength
|
||||
cmp r0, #0x0
|
||||
beq _0202B8AC
|
||||
mov r0, #0x1
|
||||
|
|
@ -91024,7 +91024,7 @@ _0202B968:
|
|||
mov r1, #0x1d
|
||||
bl FUN_0202A150
|
||||
add r1, r7, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r7, r0, #0x0
|
||||
_0202B984:
|
||||
str r7, [r5, #0x0]
|
||||
|
|
@ -91054,7 +91054,7 @@ _0202B9A0:
|
|||
ldr r2, [r0, #0x28]
|
||||
mov r0, #0x64
|
||||
mul r0, r2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r1, r0, #0x0
|
||||
_0202B9C4:
|
||||
str r1, [r5, #0x0]
|
||||
|
|
@ -91162,7 +91162,7 @@ FUN_0202BA80: ; 0x0202BA80
|
|||
_0202BA8E:
|
||||
add r0, #0x8
|
||||
add r1, #0x8
|
||||
bl FUN_020022A4
|
||||
bl StringNotEqual
|
||||
cmp r0, #0x0
|
||||
bne _0202BA9E
|
||||
mov r0, #0x1
|
||||
|
|
@ -110996,14 +110996,14 @@ _02035010:
|
|||
bne _0203502A
|
||||
add r0, r6, #0x0
|
||||
mov r1, #0x64
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
bne _02035038
|
||||
_0203502A:
|
||||
mov r1, #0x19
|
||||
add r0, r6, #0x0
|
||||
lsl r1, r1, #0x4
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x0
|
||||
bne _0203503C
|
||||
_02035038:
|
||||
|
|
@ -112485,7 +112485,7 @@ FUN_02035C18: ; 0x02035C18
|
|||
add r6, r2, #0x0
|
||||
bl FUN_020201DC
|
||||
mov r1, #0x3
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r2, r0, #0x0
|
||||
lsl r1, r2, #0x1
|
||||
add r1, r2, r1
|
||||
|
|
@ -112531,7 +112531,7 @@ FUN_02035C78: ; 0x02035C78
|
|||
add r4, r0, #0x0
|
||||
bl FUN_020201DC
|
||||
mov r1, #0x3
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x1
|
||||
bne _02035C9E
|
||||
add r0, r4, #0x0
|
||||
|
|
@ -148719,7 +148719,7 @@ _02047E2C:
|
|||
add r1, r0, #0x0
|
||||
add r0, r5, #0x0
|
||||
add r0, #0x3c
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
add r3, r5, #0x0
|
||||
add r3, #0x28
|
||||
add r5, #0x90
|
||||
|
|
@ -148996,7 +148996,7 @@ FUN_020480E4: ; 0x020480E4
|
|||
add r1, r0, #0x0
|
||||
add r0, r4, #0x0
|
||||
add r0, #0x3c
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
add r3, r4, #0x0
|
||||
add r3, #0x28
|
||||
add r4, #0x90
|
||||
|
|
@ -175571,7 +175571,7 @@ FUN_02054C14: ; 0x02054C14
|
|||
push {r4, lr}
|
||||
mov r1, #0xa
|
||||
add r4, r0, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C26
|
||||
mov r0, #0x1
|
||||
|
|
@ -175579,7 +175579,7 @@ FUN_02054C14: ; 0x02054C14
|
|||
_02054C26:
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0x64
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C36
|
||||
mov r0, #0x2
|
||||
|
|
@ -175588,7 +175588,7 @@ _02054C36:
|
|||
mov r1, #0xfa
|
||||
add r0, r4, #0x0
|
||||
lsl r1, r1, #0x2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C48
|
||||
mov r0, #0x3
|
||||
|
|
@ -175596,7 +175596,7 @@ _02054C36:
|
|||
_02054C48:
|
||||
ldr r1, _02054C9C ; =0x00002710
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C58
|
||||
mov r0, #0x4
|
||||
|
|
@ -175604,7 +175604,7 @@ _02054C48:
|
|||
_02054C58:
|
||||
ldr r1, _02054CA0 ; =0x000186A0
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C68
|
||||
mov r0, #0x5
|
||||
|
|
@ -175612,7 +175612,7 @@ _02054C58:
|
|||
_02054C68:
|
||||
ldr r1, _02054CA4 ; =0x000F4240
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C78
|
||||
mov r0, #0x6
|
||||
|
|
@ -175620,7 +175620,7 @@ _02054C68:
|
|||
_02054C78:
|
||||
ldr r1, _02054CA8 ; =0x00989680
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C88
|
||||
mov r0, #0x7
|
||||
|
|
@ -175628,7 +175628,7 @@ _02054C78:
|
|||
_02054C88:
|
||||
ldr r1, _02054CAC ; =0x05F5E100
|
||||
add r0, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r0, #0x0
|
||||
bne _02054C98
|
||||
mov r0, #0x8
|
||||
|
|
@ -202299,7 +202299,7 @@ FUN_020612AC: ; 0x020612AC
|
|||
add r1, r0, #0x0
|
||||
add r0, sp, #0x0
|
||||
mov r2, #0xb
|
||||
bl FUN_02002268
|
||||
bl StringCopyN
|
||||
add r0, r5, #0x0
|
||||
mov r1, #0x2
|
||||
add r2, r4, #0x0
|
||||
|
|
@ -202916,7 +202916,7 @@ FUN_02061798: ; 0x02061798
|
|||
strb r2, [r0, #0x6]
|
||||
bl FUN_0201BA60
|
||||
mov r1, #0x3
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r0, sp, #0x4
|
||||
strb r1, [r0, #0x5]
|
||||
add r0, sp, #0x8
|
||||
|
|
@ -203236,13 +203236,13 @@ FUN_020619F0: ; 0x020619F0
|
|||
lsl r0, r0, #0x2
|
||||
mul r0, r1
|
||||
mov r1, #0xfe
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r0, r0, #0x5
|
||||
mov r1, #0xa
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
mov r1, #0xa
|
||||
add r4, r0, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r2, r0, #0x0
|
||||
mov r0, #0x0
|
||||
str r0, [sp, #0x0]
|
||||
|
|
@ -203254,7 +203254,7 @@ FUN_020619F0: ; 0x020619F0
|
|||
bl FUN_0200AD38
|
||||
add r0, r4, #0x0
|
||||
mov r1, #0xa
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
mov r0, #0x0
|
||||
add r2, r1, #0x0
|
||||
str r0, [sp, #0x0]
|
||||
|
|
@ -204085,7 +204085,7 @@ _020620BE:
|
|||
ble _020620D0
|
||||
bl FUN_0201BA60
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r5, r1, #0x0
|
||||
b _020620D2
|
||||
_020620D0:
|
||||
|
|
@ -204692,7 +204692,7 @@ FUN_0206252C: ; 0x0206252C
|
|||
ble _02062552
|
||||
bl FUN_0201BA60
|
||||
add r1, r4, #0x0
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
add r5, r1, #0x0
|
||||
b _02062554
|
||||
_02062552:
|
||||
|
|
@ -210366,7 +210366,7 @@ FUN_02065178: ; 0x02065178
|
|||
add r0, #0x8
|
||||
mov r2, #0x8
|
||||
add r5, r3, #0x0
|
||||
bl FUN_02002268
|
||||
bl StringCopyN
|
||||
ldr r0, [sp, #0x10]
|
||||
str r5, [r4, #0x1c]
|
||||
str r0, [r4, #0x20]
|
||||
|
|
@ -213948,7 +213948,7 @@ _02066DF4:
|
|||
orr r0, r1
|
||||
orr r0, r2
|
||||
mov r1, #0x1c
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsl r0, r1, #0x10
|
||||
lsr r5, r0, #0x10
|
||||
add r0, r4, #0x0
|
||||
|
|
@ -216090,7 +216090,7 @@ _02067E0E:
|
|||
bl FUN_0200A99C
|
||||
add r0, sp, #0x34
|
||||
add r1, r4, #0x0
|
||||
bl FUN_020022A4
|
||||
bl StringNotEqual
|
||||
ldr r2, [r5, #0x10]
|
||||
ldr r1, _02068014 ; =0x7FFFFFFF
|
||||
lsl r0, r0, #0x1f
|
||||
|
|
@ -216122,7 +216122,7 @@ _02067E40:
|
|||
add r0, sp, #0x1c
|
||||
add r0, #0x2
|
||||
add r1, sp, #0x8
|
||||
bl FUN_020022A4
|
||||
bl StringNotEqual
|
||||
ldr r2, [r5, #0x10]
|
||||
ldr r1, _02068014 ; =0x7FFFFFFF
|
||||
lsl r0, r0, #0x1f
|
||||
|
|
@ -217301,7 +217301,7 @@ FUN_02068698: ; 0x02068698
|
|||
mov r0, #0x64
|
||||
mul r0, r1
|
||||
sub r1, r6, r4
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsl r0, r0, #0x18
|
||||
lsr r0, r0, #0x18
|
||||
pop {r3-r7, pc}
|
||||
|
|
@ -217517,7 +217517,7 @@ FUN_0206885C: ; 0x0206885C
|
|||
FUN_02068884: ; 0x02068884
|
||||
push {r3, lr}
|
||||
mov r1, #0x19
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsl r0, r1, #0x18
|
||||
lsr r0, r0, #0x18
|
||||
pop {r3, pc}
|
||||
|
|
@ -222469,7 +222469,7 @@ _0206AC08:
|
|||
bne _0206AC26
|
||||
ldr r1, [sp, #0xc]
|
||||
add r0, r5, #0x0
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
b _0206AC3E
|
||||
_0206AC26:
|
||||
ldr r0, [sp, #0x10]
|
||||
|
|
@ -226143,7 +226143,7 @@ FUN_0206C66C: ; 0x0206C66C
|
|||
bl FUN_0202398C
|
||||
add r1, r0, #0x0
|
||||
add r0, r4, #0x0
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
add r0, r6, #0x0
|
||||
bl FUN_020239BC
|
||||
str r0, [r4, #0x10]
|
||||
|
|
@ -248270,7 +248270,7 @@ _020778DE:
|
|||
sub r1, #0x40
|
||||
add r0, #0xd8
|
||||
add r1, r4, r1
|
||||
bl FUN_020022A4
|
||||
bl StringNotEqual
|
||||
cmp r0, #0x0
|
||||
beq _02077904
|
||||
add r0, r4, #0x0
|
||||
|
|
@ -248289,12 +248289,12 @@ _0207790E:
|
|||
add r1, r4, #0x0
|
||||
add r0, r4, r0
|
||||
add r1, #0xd8
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
add r0, r5, #0x0
|
||||
add r1, r4, #0x0
|
||||
add r0, #0x1c
|
||||
add r1, #0xd8
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
add r1, r4, #0x0
|
||||
ldr r0, [r5, #0x18]
|
||||
add r1, #0xd8
|
||||
|
|
@ -248880,7 +248880,7 @@ _02077DD8:
|
|||
str r0, [r4, r1]
|
||||
sub r1, #0x6c
|
||||
add r0, r4, r1
|
||||
bl FUN_02002288
|
||||
bl StringLength
|
||||
mov r1, #0x56
|
||||
lsl r1, r1, #0x2
|
||||
strh r0, [r4, r1]
|
||||
|
|
@ -250441,7 +250441,7 @@ _02078A90:
|
|||
add r0, r5, #0x0
|
||||
add r0, #0xd8
|
||||
add r1, r5, r1
|
||||
bl FUN_02002248
|
||||
bl StringCopy
|
||||
mov r0, #0xc
|
||||
str r0, [sp, #0x0]
|
||||
mov r2, #0x0
|
||||
|
|
@ -252408,7 +252408,7 @@ FUN_02079A0C: ; 0x02079A0C
|
|||
push {r4, lr}
|
||||
add r4, r0, #0x0
|
||||
mul r0, r2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsl r0, r0, #0x18
|
||||
lsr r0, r0, #0x18
|
||||
bne _02079A22
|
||||
|
|
@ -252431,7 +252431,7 @@ FUN_02079A24: ; 0x02079A24
|
|||
pop {r4, pc}
|
||||
_02079A36:
|
||||
mov r1, #0x5
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r4, r0
|
||||
bls _02079A44
|
||||
mov r0, #0x2
|
||||
|
|
@ -259240,7 +259240,7 @@ FUN_0207D0C8: ; 0x0207D0C8
|
|||
lsl r0, r1, #0x10
|
||||
mov r1, #0x4b
|
||||
lsl r1, r1, #0x2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsr r0, r0, #0x10
|
||||
lsl r0, r0, #0x10
|
||||
asr r0, r0, #0x10
|
||||
|
|
@ -259255,7 +259255,7 @@ _0207D0EE:
|
|||
lsl r0, r1, #0x10
|
||||
mov r1, #0x4b
|
||||
lsl r1, r1, #0x2
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
lsr r0, r0, #0x10
|
||||
lsl r0, r0, #0x10
|
||||
asr r0, r0, #0x10
|
||||
|
|
@ -265473,7 +265473,7 @@ FUN_0208048C: ; 0x0208048C
|
|||
add r2, r1, #0x0
|
||||
bl FUN_020671BC
|
||||
mov r1, #0x6
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
cmp r1, #0x5
|
||||
bhi _02080510
|
||||
add r0, r1, r1
|
||||
|
|
@ -270258,7 +270258,7 @@ _0208292A:
|
|||
mov r1, #0x0
|
||||
bl FUN_020065A4
|
||||
mov r1, #0x30
|
||||
blx FUN_020EBE8C
|
||||
blx _u32_div_f
|
||||
str r0, [sp, #0x24]
|
||||
ldr r1, [sp, #0x24]
|
||||
add r0, r5, #0x0
|
||||
|
|
|
|||
18
global.inc
18
global.inc
|
|
@ -1,6 +1,6 @@
|
|||
.extern FUN_0200019E
|
||||
.extern FUN_02000DF4
|
||||
.extern FUN_02000E0C
|
||||
.extern StringCopy
|
||||
.extern FUN_02000E7C
|
||||
.extern FUN_02000EE8
|
||||
.extern FUN_02000F18
|
||||
|
|
@ -466,7 +466,7 @@
|
|||
.extern FUN_020EBC30
|
||||
.extern FUN_020EBC50
|
||||
.extern _s32_div_f
|
||||
.extern FUN_020EBE8C
|
||||
.extern _u32_div_f
|
||||
.extern FUN_020EC5CC
|
||||
.extern FUN_020EC694
|
||||
.extern FUN_021D74E0
|
||||
|
|
@ -943,13 +943,13 @@
|
|||
.extern FUN_020020EC
|
||||
.extern FUN_02002198
|
||||
.extern FUN_020021AC
|
||||
.extern FUN_02002248
|
||||
.extern FUN_02002268
|
||||
.extern FUN_02002288
|
||||
.extern FUN_020022A4
|
||||
.extern FUN_020022D0
|
||||
.extern FUN_0200232C
|
||||
.extern FUN_0200233C
|
||||
.extern StringCopy
|
||||
.extern StringCopyN
|
||||
.extern StringLength
|
||||
.extern StringNotEqual
|
||||
.extern StringNotEqualN
|
||||
.extern StringFillEOS
|
||||
.extern ConvertUIntToDecimalString
|
||||
|
||||
.extern FUN_02002E14
|
||||
.extern FUN_02002E4C
|
||||
|
|
|
|||
143
src/string_util.c
Normal file
143
src/string_util.c
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
#include "nitro.h"
|
||||
|
||||
extern u32 gPowersOfTen[]; // at 0x20ECB24
|
||||
extern u16 gDigitTable[]; // at 0x20ECB08
|
||||
|
||||
static const u16 EOS = 0xFFFF;
|
||||
|
||||
void StringCopy(u16 *dest, const u16 *src)
|
||||
{
|
||||
u16 c = *src;
|
||||
while (c != EOS)
|
||||
{
|
||||
src++;
|
||||
*dest = c;
|
||||
c = *src;
|
||||
dest++;
|
||||
}
|
||||
*dest = EOS;
|
||||
}
|
||||
|
||||
u16 *StringCopyN(u16 *dest, const u16 *src, u32 num)
|
||||
{
|
||||
u32 copied = 0;
|
||||
if (num > copied)
|
||||
{
|
||||
u16 *p = dest;
|
||||
do
|
||||
{
|
||||
u16 c = *src;
|
||||
copied++;
|
||||
src++;
|
||||
*p = c;
|
||||
p++;
|
||||
} while (num > copied);
|
||||
}
|
||||
return dest + num;
|
||||
}
|
||||
|
||||
u32 StringLength(const u16 *s)
|
||||
{
|
||||
u16 c = *s;
|
||||
u32 len = 0;
|
||||
while (c != EOS)
|
||||
{
|
||||
s++;
|
||||
c = *s;
|
||||
len++;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
BOOL StringNotEqual(const u16 *s1, const u16 *s2)
|
||||
{
|
||||
for (; *s1 == *s2; s1++, s2++)
|
||||
{
|
||||
if (*s1 == EOS)
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL StringNotEqualN(const u16 *s1, const u16 *s2, u32 num)
|
||||
{
|
||||
u16 c1, c2;
|
||||
c2 = *s2;
|
||||
c1 = *s1;
|
||||
while (c1 == c2)
|
||||
{
|
||||
if (num == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (*s1 == EOS && *s2 == EOS)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
s1++;
|
||||
s2++;
|
||||
c2 = *s2;
|
||||
c1 = *s1;
|
||||
num--;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u16 *StringFill(u16 *dest, u16 value, u32 num)
|
||||
{
|
||||
u32 copied = 0;
|
||||
if (num > copied)
|
||||
{
|
||||
u16 *p = dest;
|
||||
do
|
||||
{
|
||||
copied++;
|
||||
*p = value;
|
||||
p++;
|
||||
} while (copied < num);
|
||||
}
|
||||
return dest + copied;
|
||||
}
|
||||
|
||||
u16 *StringFillEOS(u16 *dest, u32 num)
|
||||
{
|
||||
return StringFill(dest, EOS, num);
|
||||
}
|
||||
|
||||
enum PrintingMode
|
||||
{
|
||||
NORMAL,
|
||||
PAD_SPACE,
|
||||
PAD_ZEROES
|
||||
};
|
||||
|
||||
const u16 NON_DIGIT = 0xE2;
|
||||
|
||||
u16 *ConvertUIntToDecimalString(u16 *dest, u32 value, enum PrintingMode mode, u32 n)
|
||||
{
|
||||
for (u32 x = gPowersOfTen[n];
|
||||
x != 0;
|
||||
x = x / 10)
|
||||
{
|
||||
u16 res = value / x;
|
||||
value = value - x * res;
|
||||
if (mode == PAD_ZEROES)
|
||||
{
|
||||
*dest = res >= 10 ? NON_DIGIT : gDigitTable[res];
|
||||
dest++;
|
||||
}
|
||||
else if (res != 0 || x == 1)
|
||||
{
|
||||
mode = PAD_ZEROES;
|
||||
*dest = res >= 10 ? NON_DIGIT : gDigitTable[res];
|
||||
dest++;
|
||||
}
|
||||
else if (mode == PAD_SPACE)
|
||||
{
|
||||
*dest = 1;
|
||||
dest++;
|
||||
}
|
||||
}
|
||||
*dest = EOS;
|
||||
return dest;
|
||||
}
|
||||
|
|
@ -4,53 +4,78 @@
|
|||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
// mwasmarm patcher v1.1
|
||||
// Patches the Metrowerk C compiler assembler to stop the line ending bug.
|
||||
// mwasmarm patcher v1.2
|
||||
// Patches the Metrowerk C compiler assembler to stop the line ending bug and the 0x400 incbin bug.
|
||||
|
||||
// Changelog:
|
||||
// v1.1: Added patch definitions and looped over them to find the matching
|
||||
// definition as well as the version.
|
||||
// v1.2: Switched to array system for applying multiple patches for compiler
|
||||
// versions and added 0x400 incbin fix for each version.
|
||||
|
||||
struct PatchPair {
|
||||
int offsetPatch;
|
||||
int newByte;
|
||||
};
|
||||
|
||||
struct PatchDef {
|
||||
char *version;
|
||||
char *sha1before;
|
||||
char *sha1after;
|
||||
int offsetPatch;
|
||||
int newByte;
|
||||
struct PatchPair *patches;
|
||||
};
|
||||
|
||||
// Patch definitions for each of the respective assembler versions.
|
||||
struct PatchPair g12BasePatches[] = {
|
||||
{ 0x57614, 0x5 },
|
||||
{ 0xD47, 0x8D },
|
||||
{0}
|
||||
};
|
||||
|
||||
struct PatchPair g20BasePatches[] = {
|
||||
{ 0x57644, 0x5 },
|
||||
{ 0xD47, 0x8D },
|
||||
{0}
|
||||
};
|
||||
|
||||
struct PatchPair g20sp2p4Patches[] = {
|
||||
{ 0x57834, 0x5 },
|
||||
{ 0xD47, 0x8D },
|
||||
{0}
|
||||
};
|
||||
|
||||
// Table of definitions for each assembler version
|
||||
struct PatchDef gPatchDefs[] = {
|
||||
// mwasmarm 1.2/base definition
|
||||
{
|
||||
"mwasmarm 1.2/base",
|
||||
"87f942cc0a0e90e73550d8d6f3fffcdeb5f69fa5",
|
||||
"2f1ccff22eaa443bb79235ca6477d3b86bdfd7e4",
|
||||
0x57614,
|
||||
0x5
|
||||
"3395ac5decf49135d892e93a3e6dd38676025983",
|
||||
g12BasePatches
|
||||
},
|
||||
// mwasmarm 2.0/base definition
|
||||
{
|
||||
"mwasmarm 2.0/base",
|
||||
"9d63877c776245129b4727b41d3e9e63cfc9cd28",
|
||||
"f5dea73bf90791e104cb59458bebae8b08a55484",
|
||||
0x57644,
|
||||
0x5
|
||||
"ef75c3fb9f8d90cb4881386c41d8dc3ab4de7153",
|
||||
g20BasePatches
|
||||
},
|
||||
// mwasmarm 2.0/sp2p4 definition
|
||||
{
|
||||
"mwasmarm 2.0/sp2p4",
|
||||
"448cb0c7f1ace4393e9a9562f819f7a9f049be83",
|
||||
"c82161527277b991a1b77e14617a93bcd19cf95c",
|
||||
0x57834,
|
||||
0x5
|
||||
"caa84dd90b1987ab7b42749bd5c9dcfdcfef59f3",
|
||||
g20sp2p4Patches
|
||||
},
|
||||
{
|
||||
}
|
||||
{0}
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// Credit to ax6 for implementation of sha1 hash functions
|
||||
// ---------------------------------------------------------
|
||||
|
||||
void sha1_process_block (const unsigned char * block, uint32_t * state);
|
||||
|
||||
// Credit to ax6 for implementation
|
||||
unsigned char * calculate_sha1 (const void * data, unsigned length) {
|
||||
uint32_t state[5] = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0};
|
||||
const char * current;
|
||||
|
|
@ -118,6 +143,10 @@ void sha1_process_block (const unsigned char * block, uint32_t * state) {
|
|||
state[4] += e;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// ax6 code end
|
||||
// ---------------------------------------------------------
|
||||
|
||||
void fatal_printf(char *str, ...) {
|
||||
va_list args;
|
||||
va_start(args, str);
|
||||
|
|
@ -146,21 +175,21 @@ int main(int argc, char *argv[]) {
|
|||
print_help();
|
||||
return 1;
|
||||
} else {
|
||||
// Open the file and sha1 read it.
|
||||
// Open the file and read it's sha1 hash.
|
||||
FILE *f = fopen(argv[1], "rb+");
|
||||
if(f == NULL) {
|
||||
if (f == NULL) {
|
||||
fatal_printf("ERROR: No file detected\n");
|
||||
}
|
||||
int fsize = get_file_size(f);
|
||||
unsigned char *string = malloc(fsize + 1);
|
||||
if(string == NULL) {
|
||||
if (string == NULL) {
|
||||
fatal_printf("ERROR: Failed to allocate string variable\n");
|
||||
}
|
||||
int readvar = fread(string, 1, fsize, f); // var to surpress warning
|
||||
|
||||
// Check if sha1 matches either known assembler hashes.
|
||||
unsigned char *sha1 = calculate_sha1(string, fsize);
|
||||
if(sha1 == NULL) {
|
||||
if (sha1 == NULL) {
|
||||
fatal_printf("ERROR: Failed to retrieve sha1 hash\n");
|
||||
}
|
||||
free(string);
|
||||
|
|
@ -169,19 +198,26 @@ int main(int argc, char *argv[]) {
|
|||
for (int i=0; i < SHA_DIGEST_LENGTH; i++) {
|
||||
sprintf((unsigned char*)&(buf[i*2]), "%02x", sha1[i]);
|
||||
}
|
||||
free(sha1);
|
||||
|
||||
for(int i = 0; gPatchDefs[i].sha1before != NULL; i++) {
|
||||
// loop over each patch definition to attempt to locate a supported version and, if
|
||||
// needed, apply the patch definitions.
|
||||
for (int i = 0; gPatchDefs[i].sha1before != NULL; i++) {
|
||||
// check if already patched for the current loop.
|
||||
if(!strcmp(buf, gPatchDefs[i].sha1after)) {
|
||||
if (!strcmp(buf, gPatchDefs[i].sha1after)) {
|
||||
printf("Supported patched version detected (%s): no action needed\n", gPatchDefs[i].version);
|
||||
return 0;
|
||||
} else if(!strcmp(buf, gPatchDefs[i].sha1before)) {
|
||||
fseek(f, gPatchDefs[i].offsetPatch, SEEK_SET);
|
||||
fputc(gPatchDefs[i].newByte, f);
|
||||
// we found an unpatched version: apply the patches.
|
||||
for (int j = 0; gPatchDefs[i].patches[j].offsetPatch != 0; j++) {
|
||||
fseek(f, gPatchDefs[i].patches[j].offsetPatch, SEEK_SET);
|
||||
fputc(gPatchDefs[i].patches[j].newByte, f);
|
||||
}
|
||||
printf("Supported unpatched version detected (%s): assembler patched\n", gPatchDefs[i].version);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
// Unable to locate supported version, quitting
|
||||
fatal_printf("ERROR: Unsupported mwasmarm.exe version\n");
|
||||
}
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -385,7 +385,6 @@ _ll_udiv = 0x020EBBE8;
|
|||
FUN_020EBC30 = 0x020EBC30;
|
||||
FUN_020EBC50 = 0x020EBC50;
|
||||
_s32_div_f = 0x020EBC80;
|
||||
FUN_020EBE8C = 0x020EBE8C;
|
||||
FUN_021D74E0 = 0x021D74E0;
|
||||
FUN_021D76AC = 0x021D76AC;
|
||||
FUN_021D77C4 = 0x021D77C4;
|
||||
|
|
@ -851,4 +850,6 @@ gUnknown21C48B8 = 0x21C48B8;
|
|||
gUnk021C4918 = 0x21C4918;
|
||||
gUnk021D76C8 = 0x21D76C8;
|
||||
gUnk021DBE18 = 0x21DBE18;
|
||||
gUnk027FFC20 = 0x27FFC20;
|
||||
gUnk027FFC20 = 0x27FFC20;
|
||||
gPowersOfTen = 0x20ECB24;
|
||||
gDigitTable = 0x20ECB08;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user