mirror of
https://github.com/pret/pokediamond.git
synced 2026-04-26 00:11:26 -05:00
363 lines
6.7 KiB
ArmAsm
363 lines
6.7 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
|
|
.text
|
|
|
|
arm_func_start _ftell
|
|
_ftell: ; 0x020DEDE4
|
|
ldr r1, [r0, #0x4]
|
|
mov r1, r1, lsl #0x16
|
|
mov r1, r1, lsr #0x1d
|
|
and r1, r1, #0xff
|
|
add r1, r1, #0xff
|
|
and r1, r1, #0xff
|
|
cmp r1, #0x1
|
|
bhi _020DEE10
|
|
ldrb r1, [r0, #0xd]
|
|
cmp r1, #0x0
|
|
beq _020DEE24
|
|
_020DEE10:
|
|
ldr r0, _020DEE5C ; =errno
|
|
mov r1, #0x28
|
|
str r1, [r0, #0x0]
|
|
sub r0, r1, #0x29
|
|
bx lr
|
|
_020DEE24:
|
|
ldr r1, [r0, #0x8]
|
|
mov r1, r1, lsl #0x1d
|
|
movs r12, r1, lsr #0x1d
|
|
ldreq r0, [r0, #0x18]
|
|
bxeq lr
|
|
ldr r2, [r0, #0x24]
|
|
ldr r1, [r0, #0x1c]
|
|
ldr r3, [r0, #0x34]
|
|
sub r0, r2, r1
|
|
cmp r12, #0x3
|
|
add r0, r3, r0
|
|
subcs r1, r12, #0x2
|
|
subcs r0, r0, r1
|
|
bx lr
|
|
.balign 4
|
|
_020DEE5C: .word errno
|
|
arm_func_end _ftell
|
|
|
|
arm_func_start ftell
|
|
ftell: ; 0x020DEE60
|
|
stmdb sp!, {r3-r7,lr}
|
|
ldr r1, _020DEF60 ; =__files
|
|
mov r7, r0
|
|
cmp r7, r1
|
|
moveq r6, #0x2
|
|
beq _020DEE98
|
|
ldr r0, _020DEF64 ; =__files + 0x4C
|
|
cmp r7, r0
|
|
moveq r6, #0x3
|
|
beq _020DEE98
|
|
ldr r0, _020DEF68 ; =__files + 0x98
|
|
cmp r7, r0
|
|
moveq r6, #0x4
|
|
movne r6, #0x5
|
|
_020DEE98:
|
|
mov r0, #0x18
|
|
mul r4, r6, r0
|
|
ldr r5, _020DEF6C ; =__cs
|
|
add r0, r5, r4
|
|
bl OS_TryLockMutex
|
|
cmp r0, #0x0
|
|
bne _020DEED8
|
|
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
|
ldr r2, _020DEF74 ; =__cs_id
|
|
ldr r1, [r0, #0x4]
|
|
ldr r0, _020DEF78 ; =__cs_ref
|
|
ldr r3, [r1, #0x6c]
|
|
mov r1, #0x1
|
|
str r3, [r2, r6, lsl #0x2]
|
|
str r1, [r0, r6, lsl #0x2]
|
|
b _020DEF30
|
|
_020DEED8:
|
|
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
|
ldr r1, _020DEF74 ; =__cs_id
|
|
ldr r0, [r0, #0x4]
|
|
ldr r1, [r1, r6, lsl #0x2]
|
|
ldr r0, [r0, #0x6c]
|
|
cmp r1, r0
|
|
bne _020DEF08
|
|
ldr r1, _020DEF78 ; =__cs_ref
|
|
ldr r0, [r1, r6, lsl #0x2]
|
|
add r0, r0, #0x1
|
|
str r0, [r1, r6, lsl #0x2]
|
|
b _020DEF30
|
|
_020DEF08:
|
|
add r0, r5, r4
|
|
bl OS_LockMutex
|
|
ldr r0, _020DEF70 ; =OSi_ThreadInfo
|
|
ldr r2, _020DEF74 ; =__cs_id
|
|
ldr r1, [r0, #0x4]
|
|
ldr r0, _020DEF78 ; =__cs_ref
|
|
ldr r3, [r1, #0x6c]
|
|
mov r1, #0x1
|
|
str r3, [r2, r6, lsl #0x2]
|
|
str r1, [r0, r6, lsl #0x2]
|
|
_020DEF30:
|
|
mov r0, r7
|
|
bl _ftell
|
|
ldr r1, _020DEF78 ; =__cs_ref
|
|
mov r7, r0
|
|
ldr r0, [r1, r6, lsl #0x2]
|
|
subs r0, r0, #0x1
|
|
str r0, [r1, r6, lsl #0x2]
|
|
bne _020DEF58
|
|
add r0, r5, r4
|
|
bl OS_UnlockMutex
|
|
_020DEF58:
|
|
mov r0, r7
|
|
ldmia sp!, {r3-r7,pc}
|
|
.balign 4
|
|
_020DEF60: .word __files
|
|
_020DEF64: .word __files + 0x4C
|
|
_020DEF68: .word __files + 0x98
|
|
_020DEF6C: .word __cs
|
|
_020DEF70: .word OSi_ThreadInfo
|
|
_020DEF74: .word __cs_id
|
|
_020DEF78: .word __cs_ref
|
|
arm_func_end ftell
|
|
|
|
arm_func_start _fseek
|
|
_fseek: ; 0x020DEF7C
|
|
stmdb sp!, {r0-r3}
|
|
stmdb sp!, {r3-r5,lr}
|
|
mov r5, r0
|
|
ldr r1, [r5, #0x4]
|
|
mov r4, r2
|
|
mov r1, r1, lsl #0x16
|
|
mov r1, r1, lsr #0x1d
|
|
and r1, r1, #0xff
|
|
cmp r1, #0x1
|
|
ldreqb r1, [r5, #0xd]
|
|
cmpeq r1, #0x0
|
|
beq _020DEFC8
|
|
ldr r0, _020DF160 ; =errno
|
|
mov r1, #0x28
|
|
str r1, [r0, #0x0]
|
|
sub r0, r1, #0x29
|
|
ldmia sp!, {r3-r5,lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
_020DEFC8:
|
|
ldr r1, [r5, #0x8]
|
|
mov r1, r1, lsl #0x1d
|
|
mov r1, r1, lsr #0x1d
|
|
cmp r1, #0x1
|
|
bne _020DF018
|
|
mov r1, #0x0
|
|
bl __flush_buffer
|
|
cmp r0, #0x0
|
|
beq _020DF018
|
|
mov r0, #0x1
|
|
strb r0, [r5, #0xd]
|
|
mov r2, #0x0
|
|
ldr r0, _020DF160 ; =errno
|
|
mov r1, #0x28
|
|
str r2, [r5, #0x28]
|
|
str r1, [r0, #0x0]
|
|
sub r0, r1, #0x29
|
|
ldmia sp!, {r3-r5,lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
_020DF018:
|
|
cmp r4, #0x1
|
|
bne _020DF038
|
|
mov r0, r5
|
|
mov r4, #0x0
|
|
bl _ftell
|
|
ldr r1, [sp, #0x14]
|
|
add r0, r1, r0
|
|
str r0, [sp, #0x14]
|
|
_020DF038:
|
|
cmp r4, #0x2
|
|
beq _020DF0CC
|
|
ldr r0, [r5, #0x4]
|
|
mov r0, r0, lsl #0x1b
|
|
mov r0, r0, lsr #0x1d
|
|
cmp r0, #0x3
|
|
beq _020DF0CC
|
|
ldr r0, [r5, #0x8]
|
|
mov r0, r0, lsl #0x1d
|
|
mov r0, r0, lsr #0x1d
|
|
sub r0, r0, #0x2
|
|
cmp r0, #0x1
|
|
bhi _020DF0CC
|
|
ldr r2, [sp, #0x14]
|
|
ldr r0, [r5, #0x18]
|
|
cmp r2, r0
|
|
bhs _020DF088
|
|
ldr r0, [r5, #0x34]
|
|
cmp r2, r0
|
|
bhs _020DF098
|
|
_020DF088:
|
|
ldr r0, [r5, #0x8]
|
|
bic r0, r0, #0x7
|
|
str r0, [r5, #0x8]
|
|
b _020DF0D8
|
|
_020DF098:
|
|
ldr r1, [r5, #0x1c]
|
|
sub r0, r2, r0
|
|
add r0, r1, r0
|
|
str r0, [r5, #0x24]
|
|
ldr r1, [r5, #0x18]
|
|
ldr r0, [sp, #0x14]
|
|
sub r0, r1, r0
|
|
str r0, [r5, #0x28]
|
|
ldr r0, [r5, #0x8]
|
|
bic r0, r0, #0x7
|
|
orr r0, r0, #0x2
|
|
str r0, [r5, #0x8]
|
|
b _020DF0D8
|
|
_020DF0CC:
|
|
ldr r0, [r5, #0x8]
|
|
bic r0, r0, #0x7
|
|
str r0, [r5, #0x8]
|
|
_020DF0D8:
|
|
ldr r0, [r5, #0x8]
|
|
mov r0, r0, lsl #0x1d
|
|
movs r0, r0, lsr #0x1d
|
|
bne _020DF150
|
|
ldr r12, [r5, #0x38]
|
|
cmp r12, #0x0
|
|
beq _020DF13C
|
|
ldr r0, [r5, #0x0]
|
|
ldr r3, [r5, #0x48]
|
|
add r1, sp, #0x14
|
|
mov r2, r4
|
|
blx r12
|
|
cmp r0, #0x0
|
|
beq _020DF13C
|
|
mov r0, #0x1
|
|
strb r0, [r5, #0xd]
|
|
mov r2, #0x0
|
|
ldr r0, _020DF160 ; =errno
|
|
mov r1, #0x28
|
|
str r2, [r5, #0x28]
|
|
str r1, [r0, #0x0]
|
|
sub r0, r1, #0x29
|
|
ldmia sp!, {r3-r5,lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
_020DF13C:
|
|
mov r1, #0x0
|
|
strb r1, [r5, #0xc]
|
|
ldr r0, [sp, #0x14]
|
|
str r0, [r5, #0x18]
|
|
str r1, [r5, #0x28]
|
|
_020DF150:
|
|
mov r0, #0x0
|
|
ldmia sp!, {r3-r5,lr}
|
|
add sp, sp, #0x10
|
|
bx lr
|
|
.balign 4
|
|
_020DF160: .word errno
|
|
arm_func_end _fseek
|
|
|
|
arm_func_start fseek
|
|
fseek:
|
|
stmdb sp!, {r3-r9,lr}
|
|
ldr r3, _020DF274 ; =__files
|
|
mov r9, r0
|
|
cmp r9, r3
|
|
mov r8, r1
|
|
mov r7, r2
|
|
moveq r6, #0x2
|
|
beq _020DF1A4
|
|
ldr r0, _020DF278 ; =__files + 0x4C
|
|
cmp r9, r0
|
|
moveq r6, #0x3
|
|
beq _020DF1A4
|
|
ldr r0, _020DF27C ; =__files + 0x98
|
|
cmp r9, r0
|
|
moveq r6, #0x4
|
|
movne r6, #0x5
|
|
_020DF1A4:
|
|
mov r0, #0x18
|
|
mul r4, r6, r0
|
|
ldr r5, _020DF280 ; =__cs
|
|
add r0, r5, r4
|
|
bl OS_TryLockMutex
|
|
cmp r0, #0x0
|
|
bne _020DF1E4
|
|
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
|
ldr r2, _020DF288 ; =__cs_id
|
|
ldr r1, [r0, #0x4]
|
|
ldr r0, _020DF28C ; =__cs_ref
|
|
ldr r3, [r1, #0x6c]
|
|
mov r1, #0x1
|
|
str r3, [r2, r6, lsl #0x2]
|
|
str r1, [r0, r6, lsl #0x2]
|
|
b _020DF23C
|
|
_020DF1E4:
|
|
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
|
ldr r1, _020DF288 ; =__cs_id
|
|
ldr r0, [r0, #0x4]
|
|
ldr r1, [r1, r6, lsl #0x2]
|
|
ldr r0, [r0, #0x6c]
|
|
cmp r1, r0
|
|
bne _020DF214
|
|
ldr r1, _020DF28C ; =__cs_ref
|
|
ldr r0, [r1, r6, lsl #0x2]
|
|
add r0, r0, #0x1
|
|
str r0, [r1, r6, lsl #0x2]
|
|
b _020DF23C
|
|
_020DF214:
|
|
add r0, r5, r4
|
|
bl OS_LockMutex
|
|
ldr r0, _020DF284 ; =OSi_ThreadInfo
|
|
ldr r2, _020DF288 ; =__cs_id
|
|
ldr r1, [r0, #0x4]
|
|
ldr r0, _020DF28C ; =__cs_ref
|
|
ldr r3, [r1, #0x6c]
|
|
mov r1, #0x1
|
|
str r3, [r2, r6, lsl #0x2]
|
|
str r1, [r0, r6, lsl #0x2]
|
|
_020DF23C:
|
|
mov r0, r9
|
|
mov r1, r8
|
|
mov r2, r7
|
|
bl _fseek
|
|
ldr r1, _020DF28C ; =__cs_ref
|
|
mov r7, r0
|
|
ldr r0, [r1, r6, lsl #0x2]
|
|
subs r0, r0, #0x1
|
|
str r0, [r1, r6, lsl #0x2]
|
|
bne _020DF26C
|
|
add r0, r5, r4
|
|
bl OS_UnlockMutex
|
|
_020DF26C:
|
|
mov r0, r7
|
|
ldmia sp!, {r3-r9,pc}
|
|
.balign 4
|
|
_020DF274: .word __files
|
|
_020DF278: .word __files + 0x4C
|
|
_020DF27C: .word __files + 0x98
|
|
_020DF280: .word __cs
|
|
_020DF284: .word OSi_ThreadInfo
|
|
_020DF288: .word __cs_id
|
|
_020DF28C: .word __cs_ref
|
|
arm_func_end fseek
|
|
|
|
arm_func_start rewind
|
|
rewind: ; 0x020DF290
|
|
stmdb sp!, {r4,lr}
|
|
mov r1, #0x0
|
|
mov r4, r0
|
|
mov r2, r1
|
|
strb r1, [r4, #0xd]
|
|
bl fseek
|
|
mov r0, #0x0
|
|
strb r0, [r4, #0xd]
|
|
ldmia sp!, {r4,pc}
|
|
arm_func_end rewind
|
|
|
|
exception ftell, 285, 0x00300F00
|
|
exception _fseek, 489, 0x00400320
|
|
exception fseek, 301, 0x00403F00
|
|
exception rewind, 37, 0x00100100
|