mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-07 03:04:19 -05:00
455 lines
10 KiB
ArmAsm
455 lines
10 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
|
|
.section .data
|
|
|
|
.global itab
|
|
itab: ; 0x021062AC
|
|
.byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
|
|
.byte 0x01, 0x06, 0x0B, 0x00, 0x05, 0x0A, 0x0F, 0x04, 0x09, 0x0E, 0x03, 0x08, 0x0D, 0x02, 0x07, 0x0C
|
|
.byte 0x05, 0x08, 0x0B, 0x0E, 0x01, 0x04, 0x07, 0x0A, 0x0D, 0x00, 0x03, 0x06, 0x09, 0x0C, 0x0F, 0x02
|
|
.byte 0x00, 0x07, 0x0E, 0x05, 0x0C, 0x03, 0x0A, 0x01, 0x08, 0x0F, 0x06, 0x0D, 0x04, 0x0B, 0x02, 0x09
|
|
|
|
.global padding
|
|
padding: ; 0x021062EC
|
|
.byte 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
|
|
.global ktab
|
|
ktab: ; 0x0210632C
|
|
.byte 0x78, 0xA4, 0x6A, 0xD7, 0x56, 0xB7, 0xC7, 0xE8, 0xDB, 0x70, 0x20, 0x24, 0xEE, 0xCE, 0xBD, 0xC1
|
|
.byte 0xAF, 0x0F, 0x7C, 0xF5, 0x2A, 0xC6, 0x87, 0x47, 0x13, 0x46, 0x30, 0xA8, 0x01, 0x95, 0x46, 0xFD
|
|
.byte 0xD8, 0x98, 0x80, 0x69, 0xAF, 0xF7, 0x44, 0x8B, 0xB1, 0x5B, 0xFF, 0xFF, 0xBE, 0xD7, 0x5C, 0x89
|
|
.byte 0x22, 0x11, 0x90, 0x6B, 0x93, 0x71, 0x98, 0xFD, 0x8E, 0x43, 0x79, 0xA6, 0x21, 0x08, 0xB4, 0x49
|
|
.byte 0x62, 0x25, 0x1E, 0xF6, 0x40, 0xB3, 0x40, 0xC0, 0x51, 0x5A, 0x5E, 0x26, 0xAA, 0xC7, 0xB6, 0xE9
|
|
.byte 0x5D, 0x10, 0x2F, 0xD6, 0x53, 0x14, 0x44, 0x02, 0x81, 0xE6, 0xA1, 0xD8, 0xC8, 0xFB, 0xD3, 0xE7
|
|
.byte 0xE6, 0xCD, 0xE1, 0x21, 0xD6, 0x07, 0x37, 0xC3, 0x87, 0x0D, 0xD5, 0xF4, 0xED, 0x14, 0x5A, 0x45
|
|
.byte 0x05, 0xE9, 0xE3, 0xA9, 0xF8, 0xA3, 0xEF, 0xFC, 0xD9, 0x02, 0x6F, 0x67, 0x8A, 0x4C, 0x2A, 0x8D
|
|
.byte 0x42, 0x39, 0xFA, 0xFF, 0x81, 0xF6, 0x71, 0x87, 0x22, 0x61, 0x9D, 0x6D, 0x0C, 0x38, 0xE5, 0xFD
|
|
.byte 0x44, 0xEA, 0xBE, 0xA4, 0xA9, 0xCF, 0xDE, 0x4B, 0x60, 0x4B, 0xBB, 0xF6, 0x70, 0xBC, 0xBF, 0xBE
|
|
.byte 0xC6, 0x7E, 0x9B, 0x28, 0xFA, 0x27, 0xA1, 0xEA, 0x85, 0x30, 0xEF, 0xD4, 0x05, 0x1D, 0x88, 0x04
|
|
.byte 0x39, 0xD0, 0xD4, 0xD9, 0xE5, 0x99, 0xDB, 0xE6, 0xF8, 0x7C, 0xA2, 0x1F, 0x65, 0x56, 0xAC, 0xC4
|
|
.byte 0x44, 0x22, 0x29, 0xF4, 0x97, 0xFF, 0x2A, 0x43, 0xA7, 0x23, 0x94, 0xAB, 0x39, 0xA0, 0x93, 0xFC
|
|
.byte 0xC3, 0x59, 0x5B, 0x65, 0x92, 0xCC, 0x0C, 0x8F, 0x7D, 0xF4, 0xEF, 0xFF, 0xD1, 0x5D, 0x84, 0x85
|
|
.byte 0x4F, 0x7E, 0xA8, 0x6F, 0xE0, 0xE6, 0x2C, 0xFE, 0x14, 0x43, 0x01, 0xA3, 0xA1, 0x11, 0x08, 0x4E
|
|
.byte 0x82, 0x7E, 0x53, 0xF7, 0x35, 0xF2, 0x3A, 0xBD, 0xBB, 0xD2, 0xD7, 0x2A, 0x91, 0xD3, 0x86, 0xEB
|
|
|
|
.section .text
|
|
|
|
arm_func_start CPSi_md5_result
|
|
CPSi_md5_result: ; 0x020A3A58
|
|
stmdb sp!, {r4-r5,lr}
|
|
sub sp, sp, #0x4
|
|
mov r5, r0
|
|
mov r4, r1
|
|
mov r0, r4
|
|
add r1, r5, #0x10
|
|
mov r2, #0x8
|
|
bl char_from_long
|
|
ldr r0, [r5, #0x10]
|
|
ldr r1, _020A3AC8 ; =padding
|
|
mov r0, r0, lsr #0x3
|
|
and r0, r0, #0x3f
|
|
cmp r0, #0x38
|
|
rsblt r2, r0, #0x38
|
|
rsbge r2, r0, #0x78
|
|
mov r0, r5
|
|
bl CPSi_md5_calc
|
|
mov r0, r5
|
|
mov r1, r4
|
|
mov r2, #0x8
|
|
bl CPSi_md5_calc
|
|
mov r0, r4
|
|
mov r1, r5
|
|
mov r2, #0x10
|
|
bl char_from_long
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r5,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020A3AC8: .word padding
|
|
|
|
arm_func_start CPSi_md5_calc
|
|
CPSi_md5_calc:
|
|
stmdb sp!, {r4-r8,lr}
|
|
mov r8, r0
|
|
ldr r3, [r8, #0x10]
|
|
mov r6, r2
|
|
add r0, r3, r6, lsl #0x3
|
|
str r0, [r8, #0x10]
|
|
ldr r0, [r8, #0x10]
|
|
mov r2, r3, lsr #0x3
|
|
cmp r0, r6, lsl #0x3
|
|
ldrcc r0, [r8, #0x14]
|
|
and r4, r2, #0x3f
|
|
addcc r0, r0, #0x1
|
|
strcc r0, [r8, #0x14]
|
|
ldr r0, [r8, #0x14]
|
|
rsb r5, r4, #0x40
|
|
add r0, r0, r6, lsr #0x1d
|
|
mov r7, r1
|
|
str r0, [r8, #0x14]
|
|
cmp r6, r5
|
|
blo _020A3B6C
|
|
add r1, r8, #0x18
|
|
mov r0, r7
|
|
mov r2, r5
|
|
add r1, r1, r4
|
|
bl MI_CpuCopy8
|
|
mov r0, r8
|
|
add r1, r8, #0x18
|
|
mov r4, #0x0
|
|
bl CPSi_md5_block
|
|
add r0, r5, #0x3f
|
|
cmp r0, r6
|
|
bhs _020A3B70
|
|
_020A3B4C:
|
|
mov r0, r8
|
|
add r1, r7, r5
|
|
bl CPSi_md5_block
|
|
add r5, r5, #0x40
|
|
add r0, r5, #0x3f
|
|
cmp r0, r6
|
|
blo _020A3B4C
|
|
b _020A3B70
|
|
_020A3B6C:
|
|
mov r5, #0x0
|
|
_020A3B70:
|
|
add r1, r8, #0x18
|
|
add r0, r7, r5
|
|
add r1, r1, r4
|
|
sub r2, r6, r5
|
|
bl MI_CpuCopy8
|
|
ldmia sp!, {r4-r8,lr}
|
|
bx lr
|
|
|
|
arm_func_start CPSi_md5_init
|
|
CPSi_md5_init: ; 0x020A3B8C
|
|
stmdb sp!, {r4,lr}
|
|
mov r1, #0x0
|
|
mov r2, #0x58
|
|
mov r4, r0
|
|
bl MI_CpuFill8
|
|
ldr r1, _020A3BC8 ; =0x67452301
|
|
ldr r0, _020A3BCC ; =0xEFCDAB89
|
|
str r1, [r4, #0x0]
|
|
ldr r1, _020A3BD0 ; =0x98BADCFE
|
|
str r0, [r4, #0x4]
|
|
ldr r0, _020A3BD4 ; =0x10325476
|
|
str r1, [r4, #0x8]
|
|
str r0, [r4, #0xc]
|
|
ldmia sp!, {r4,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020A3BC8: .word 0x67452301
|
|
_020A3BCC: .word 0xEFCDAB89
|
|
_020A3BD0: .word 0x98BADCFE
|
|
_020A3BD4: .word 0x10325476
|
|
|
|
arm_func_start CPSi_md5_block
|
|
CPSi_md5_block: ; 0x020A3BD8
|
|
stmdb sp!, {r4-r11,lr}
|
|
sub sp, sp, #0x44
|
|
str r0, [sp, #0x0]
|
|
ldr r3, [sp, #0x0]
|
|
add r0, sp, #0x4
|
|
mov r2, #0x40
|
|
ldr r7, [r3, #0x0]
|
|
ldr r6, [r3, #0x4]
|
|
ldr r5, [r3, #0x8]
|
|
ldr r4, [r3, #0xc]
|
|
bl long_from_char
|
|
ldr r2, _020A4024 ; =itab
|
|
mov r3, #0x0
|
|
ldr r1, _020A4028 ; =ktab
|
|
mov r11, r3
|
|
add r0, sp, #0x4
|
|
mov r10, r2
|
|
_020A3C1C:
|
|
ldrb r9, [r2, #0x0]
|
|
add r8, r3, #0x1
|
|
eor r12, r5, r4
|
|
and r12, r6, r12
|
|
eor r12, r4, r12
|
|
ldr r9, [r0, r9, lsl #0x2]
|
|
ldr lr, [r1, r3, lsl #0x2]
|
|
add r9, r12, r9
|
|
add r9, lr, r9
|
|
add r9, r7, r9
|
|
mov r7, r9, lsl #0x7
|
|
orr r7, r7, r9, lsr #0x19
|
|
ldrb r9, [r10, r8]
|
|
add r7, r6, r7
|
|
ldr r8, [r1, r8, lsl #0x2]
|
|
ldr r9, [r0, r9, lsl #0x2]
|
|
eor r12, r6, r5
|
|
and r12, r7, r12
|
|
eor r12, r5, r12
|
|
add r9, r12, r9
|
|
add r9, r8, r9
|
|
add r8, r3, #0x2
|
|
add r9, r4, r9
|
|
mov r4, r9, lsl #0xc
|
|
orr r4, r4, r9, lsr #0x14
|
|
add r4, r7, r4
|
|
ldr r9, [r1, r8, lsl #0x2]
|
|
ldrb r12, [r10, r8]
|
|
eor r8, r7, r6
|
|
and r8, r4, r8
|
|
eor r8, r6, r8
|
|
ldr lr, [r0, r12, lsl #0x2]
|
|
add r12, r3, #0x3
|
|
add r8, r8, lr
|
|
add r8, r9, r8
|
|
add r8, r5, r8
|
|
mov r5, r8, lsl #0x11
|
|
orr r5, r5, r8, lsr #0xf
|
|
add r5, r4, r5
|
|
ldr r9, [r1, r12, lsl #0x2]
|
|
ldrb r12, [r10, r12]
|
|
eor r8, r4, r7
|
|
and r8, r5, r8
|
|
eor r8, r7, r8
|
|
ldr r12, [r0, r12, lsl #0x2]
|
|
add r2, r2, #0x4
|
|
add r8, r8, r12
|
|
add r8, r9, r8
|
|
add r8, r6, r8
|
|
mov r6, r8, lsl #0x16
|
|
orr r6, r6, r8, lsr #0xa
|
|
add r6, r5, r6
|
|
add r3, r3, #0x4
|
|
add r11, r11, #0x1
|
|
cmp r11, #0x4
|
|
blt _020A3C1C
|
|
add r8, r10, r3
|
|
mov r2, #0x0
|
|
ldr r1, _020A4028 ; =ktab
|
|
add r0, sp, #0x4
|
|
ldr lr, _020A4024 ; =itab
|
|
_020A3D10:
|
|
ldrb r10, [r8, #0x0]
|
|
add r9, r3, #0x1
|
|
eor r11, r6, r5
|
|
and r11, r4, r11
|
|
eor r11, r5, r11
|
|
ldr r10, [r0, r10, lsl #0x2]
|
|
ldr r12, [r1, r3, lsl #0x2]
|
|
add r10, r11, r10
|
|
add r10, r12, r10
|
|
add r10, r7, r10
|
|
mov r7, r10, lsl #0x5
|
|
orr r7, r7, r10, lsr #0x1b
|
|
ldrb r10, [lr, r9]
|
|
add r7, r6, r7
|
|
ldr r9, [r1, r9, lsl #0x2]
|
|
ldr r10, [r0, r10, lsl #0x2]
|
|
eor r11, r7, r6
|
|
and r11, r5, r11
|
|
eor r11, r6, r11
|
|
add r10, r11, r10
|
|
add r10, r9, r10
|
|
add r9, r3, #0x2
|
|
add r10, r4, r10
|
|
mov r4, r10, lsl #0x9
|
|
orr r4, r4, r10, lsr #0x17
|
|
add r4, r7, r4
|
|
ldr r12, [r1, r9, lsl #0x2]
|
|
ldrb r9, [lr, r9]
|
|
eor r10, r4, r7
|
|
and r10, r6, r10
|
|
eor r11, r7, r10
|
|
ldr r10, [r0, r9, lsl #0x2]
|
|
add r9, r3, #0x3
|
|
add r10, r11, r10
|
|
add r10, r12, r10
|
|
add r10, r5, r10
|
|
mov r5, r10, lsl #0xe
|
|
orr r5, r5, r10, lsr #0x12
|
|
add r5, r4, r5
|
|
ldr r10, [r1, r9, lsl #0x2]
|
|
ldrb r11, [lr, r9]
|
|
eor r9, r5, r4
|
|
and r9, r7, r9
|
|
eor r9, r4, r9
|
|
ldr r11, [r0, r11, lsl #0x2]
|
|
add r8, r8, #0x4
|
|
add r9, r9, r11
|
|
add r9, r10, r9
|
|
add r9, r6, r9
|
|
mov r6, r9, lsl #0x14
|
|
orr r6, r6, r9, lsr #0xc
|
|
add r6, r5, r6
|
|
add r3, r3, #0x4
|
|
add r2, r2, #0x1
|
|
cmp r2, #0x4
|
|
blt _020A3D10
|
|
add r8, lr, r3
|
|
mov lr, #0x0
|
|
ldr r2, _020A4028 ; =ktab
|
|
add r0, sp, #0x4
|
|
_020A3E00:
|
|
ldrb r1, [r8, #0x0]
|
|
eor r12, r6, r5
|
|
add lr, lr, #0x1
|
|
ldr r11, [r0, r1, lsl #0x2]
|
|
eor r12, r4, r12
|
|
ldr r1, [r2, r3, lsl #0x2]
|
|
add r11, r12, r11
|
|
add r1, r1, r11
|
|
add r7, r7, r1
|
|
mov r1, r7, lsl #0x4
|
|
orr r1, r1, r7, lsr #0x1c
|
|
add r7, r6, r1
|
|
add r10, r3, #0x1
|
|
ldr r1, _020A4024 ; =itab
|
|
ldr r12, [r2, r10, lsl #0x2]
|
|
ldrb r1, [r1, r10]
|
|
eor r10, r7, r6
|
|
eor r11, r5, r10
|
|
ldr r10, [r0, r1, lsl #0x2]
|
|
add r9, r3, #0x2
|
|
add r10, r11, r10
|
|
add r10, r12, r10
|
|
add r4, r4, r10
|
|
ldr sl, _020A4024 ; =itab
|
|
ldr r1, [r2, r9, lsl #0x2]
|
|
ldrb r9, [r10, r9]
|
|
mov r10, r4, lsl #0xb
|
|
orr r4, r10, r4, lsr #0x15
|
|
add r4, r7, r4
|
|
eor r10, r4, r7
|
|
ldr r9, [r0, r9, lsl #0x2]
|
|
eor r10, r6, r10
|
|
add r9, r10, r9
|
|
add r1, r1, r9
|
|
add r5, r5, r1
|
|
add r10, r3, #0x3
|
|
ldr sb, _020A4024 ; =itab
|
|
mov r1, r5, lsl #0x10
|
|
ldrb r9, [r9, r10]
|
|
orr r1, r1, r5, lsr #0x10
|
|
add r5, r4, r1
|
|
ldr r1, [r2, r10, lsl #0x2]
|
|
eor r10, r5, r4
|
|
ldr r9, [r0, r9, lsl #0x2]
|
|
eor r10, r7, r10
|
|
add r9, r10, r9
|
|
add r1, r1, r9
|
|
add r6, r6, r1
|
|
mov r1, r6, lsl #0x17
|
|
orr r1, r1, r6, lsr #0x9
|
|
add r8, r8, #0x4
|
|
add r6, r5, r1
|
|
add r3, r3, #0x4
|
|
cmp lr, #0x4
|
|
blt _020A3E00
|
|
ldr r0, _020A4024 ; =itab
|
|
ldr r1, _020A4028 ; =ktab
|
|
add r8, r0, r3
|
|
ldr lr, _020A4024 ; =itab
|
|
mov r2, #0x0
|
|
add r0, sp, #0x4
|
|
_020A3EF4:
|
|
ldrb r10, [r8, #0x0]
|
|
add r9, r3, #0x1
|
|
mvn r11, r4
|
|
orr r11, r6, r11
|
|
eor r11, r5, r11
|
|
ldr r10, [r0, r10, lsl #0x2]
|
|
ldr r12, [r1, r3, lsl #0x2]
|
|
add r10, r11, r10
|
|
add r10, r12, r10
|
|
add r10, r7, r10
|
|
mov r7, r10, lsl #0x6
|
|
orr r7, r7, r10, lsr #0x1a
|
|
ldrb r10, [lr, r9]
|
|
add r7, r6, r7
|
|
ldr r9, [r1, r9, lsl #0x2]
|
|
ldr r10, [r0, r10, lsl #0x2]
|
|
mvn r11, r5
|
|
orr r11, r7, r11
|
|
eor r11, r6, r11
|
|
add r10, r11, r10
|
|
add r10, r9, r10
|
|
add r9, r3, #0x2
|
|
add r10, r4, r10
|
|
mov r4, r10, lsl #0xa
|
|
orr r4, r4, r10, lsr #0x16
|
|
add r4, r7, r4
|
|
ldr r12, [r1, r9, lsl #0x2]
|
|
ldrb r9, [lr, r9]
|
|
mvn r10, r6
|
|
orr r10, r4, r10
|
|
eor r11, r7, r10
|
|
ldr r10, [r0, r9, lsl #0x2]
|
|
add r9, r3, #0x3
|
|
add r10, r11, r10
|
|
add r10, r12, r10
|
|
add r10, r5, r10
|
|
mov r5, r10, lsl #0xf
|
|
orr r5, r5, r10, lsr #0x11
|
|
add r5, r4, r5
|
|
ldr r10, [r1, r9, lsl #0x2]
|
|
ldrb r11, [lr, r9]
|
|
mvn r9, r7
|
|
orr r9, r5, r9
|
|
eor r9, r4, r9
|
|
ldr r11, [r0, r11, lsl #0x2]
|
|
add r8, r8, #0x4
|
|
add r9, r9, r11
|
|
add r9, r10, r9
|
|
add r9, r6, r9
|
|
mov r6, r9, lsl #0x15
|
|
orr r6, r6, r9, lsr #0xb
|
|
add r6, r5, r6
|
|
add r3, r3, #0x4
|
|
add r2, r2, #0x1
|
|
cmp r2, #0x4
|
|
blt _020A3EF4
|
|
ldr r0, [sp, #0x0]
|
|
ldr r0, [r0, #0x0]
|
|
add r1, r0, r7
|
|
ldr r0, [sp, #0x0]
|
|
str r1, [r0, #0x0]
|
|
ldr r0, [r0, #0x4]
|
|
add r1, r0, r6
|
|
ldr r0, [sp, #0x0]
|
|
str r1, [r0, #0x4]
|
|
ldr r0, [r0, #0x8]
|
|
add r1, r0, r5
|
|
ldr r0, [sp, #0x0]
|
|
str r1, [r0, #0x8]
|
|
ldr r0, [r0, #0xc]
|
|
add r1, r0, r4
|
|
ldr r0, [sp, #0x0]
|
|
str r1, [r0, #0xc]
|
|
add sp, sp, #0x44
|
|
ldmia sp!, {r4-r11,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020A4024: .word itab
|
|
_020A4028: .word ktab
|
|
|
|
arm_func_start long_from_char
|
|
long_from_char: ; 0x020A402C
|
|
ldr ip, _020A4040 ; =MI_CpuCopy8
|
|
mov r3, r0
|
|
mov r0, r1
|
|
mov r1, r3
|
|
bx r12
|
|
.balign 4
|
|
_020A4040: .word MI_CpuCopy8
|
|
|
|
arm_func_start char_from_long
|
|
char_from_long: ; 0x020A4044
|
|
ldr ip, _020A4058 ; =MI_CpuCopy8
|
|
mov r3, r0
|
|
mov r0, r1
|
|
mov r1, r3
|
|
bx r12
|
|
.balign 4
|
|
_020A4058: .word MI_CpuCopy8
|