mirror of
https://github.com/pret/pokediamond.git
synced 2026-09-12 19:16:50 -05:00
330 lines
6.1 KiB
ArmAsm
330 lines
6.1 KiB
ArmAsm
.include "asm/macros.inc"
|
|
.include "global.inc"
|
|
|
|
.section .bss
|
|
|
|
.global UNK_021D555C
|
|
UNK_021D555C: ; 0x021D555C
|
|
.space 0x4
|
|
|
|
.global UNK_021D5560
|
|
UNK_021D5560: ; 0x021D5560
|
|
.space 0x60
|
|
|
|
.global cardi_common
|
|
cardi_common: ; 0x021D55C0
|
|
.space 0x620
|
|
|
|
.global UNK_021D5BE0
|
|
UNK_021D5BE0: ; 0x021D5BE0
|
|
.space 0x20
|
|
|
|
.text
|
|
|
|
arm_func_start CARD_UnlockBackup
|
|
CARD_UnlockBackup: ; 0x020D66A0
|
|
ldr ip, _020D66AC ; =CARDi_UnlockResource
|
|
mov r1, #0x2
|
|
bx r12
|
|
.balign 4
|
|
_020D66AC: .word CARDi_UnlockResource
|
|
|
|
arm_func_start CARD_LockBackup
|
|
CARD_LockBackup: ; 0x020D66B0
|
|
ldr ip, _020D66BC ; =CARDi_LockResource
|
|
mov r1, #0x2
|
|
bx r12
|
|
.balign 4
|
|
_020D66BC: .word CARDi_LockResource
|
|
|
|
arm_func_start CARD_UnlockRom
|
|
CARD_UnlockRom: ; 0x020D66C0
|
|
stmdb sp!, {r4,lr}
|
|
mov r4, r0
|
|
bl OS_UnlockCard
|
|
mov r0, r4
|
|
mov r1, #0x1
|
|
bl CARDi_UnlockResource
|
|
ldmia sp!, {r4,lr}
|
|
bx lr
|
|
|
|
arm_func_start CARD_LockRom
|
|
CARD_LockRom: ; 0x020D66E0
|
|
stmdb sp!, {r4,lr}
|
|
mov r4, r0
|
|
mov r1, #0x1
|
|
bl CARDi_LockResource
|
|
mov r0, r4
|
|
bl OS_TryLockCard
|
|
ldmia sp!, {r4,lr}
|
|
bx lr
|
|
|
|
arm_func_start CARD_GetResultCode
|
|
CARD_GetResultCode: ; 0x020D6700
|
|
ldr r0, _020D6710 ; =cardi_common
|
|
ldr r0, [r0, #0x0]
|
|
ldr r0, [r0, #0x0]
|
|
bx lr
|
|
.balign 4
|
|
_020D6710: .word cardi_common
|
|
|
|
;CARDi_TryWaitAsync?
|
|
arm_func_start FUN_020D6714
|
|
FUN_020D6714: ; 0x020D6714
|
|
ldr r0, _020D672C ; =cardi_common
|
|
ldr r0, [r0, #0x114]
|
|
ands r0, r0, #0x4
|
|
moveq r0, #0x1
|
|
movne r0, #0x0
|
|
bx lr
|
|
.balign 4
|
|
_020D672C: .word cardi_common
|
|
|
|
arm_func_start CARDi_WaitAsync
|
|
CARDi_WaitAsync: ; 0x020D6730
|
|
stmdb sp!, {r4-r6,lr}
|
|
ldr r6, _020D6788 ; =cardi_common
|
|
bl OS_DisableInterrupts
|
|
ldr r1, [r6, #0x114]
|
|
mov r5, r0
|
|
ands r0, r1, #0x4
|
|
beq _020D6764
|
|
add r4, r6, #0x10c
|
|
_020D6750:
|
|
mov r0, r4
|
|
bl OS_SleepThread
|
|
ldr r0, [r6, #0x114]
|
|
ands r0, r0, #0x4
|
|
bne _020D6750
|
|
_020D6764:
|
|
mov r0, r5
|
|
bl OS_RestoreInterrupts
|
|
_020D676C: ; 0x020D676C
|
|
ldr r0, [r6, #0x0]
|
|
ldr r0, [r0, #0x0]
|
|
cmp r0, #0x0
|
|
moveq r0, #0x1
|
|
movne r0, #0x0
|
|
ldmia sp!, {r4-r6,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020D6788: .word cardi_common
|
|
|
|
arm_func_start CARD_Enable
|
|
CARD_Enable: ; 0x020D678C
|
|
ldr r1, _020D6798 ; =UNK_021D555C
|
|
str r0, [r1, #0x0]
|
|
bx lr
|
|
.balign 4
|
|
_020D6798: .word UNK_021D555C
|
|
|
|
arm_func_start CARD_CheckEnabled
|
|
CARD_CheckEnabled: ; 0x020D679C
|
|
stmdb sp!, {lr}
|
|
sub sp, sp, #0x4
|
|
bl CARD_IsEnabled
|
|
_020D67A8: ; 0x020D67A8
|
|
cmp r0, #0x0
|
|
addne sp, sp, #0x4
|
|
ldmneia sp!, {lr}
|
|
bxne lr
|
|
bl OS_Terminate
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {lr}
|
|
bx lr
|
|
|
|
arm_func_start CARD_IsEnabled
|
|
CARD_IsEnabled:
|
|
ldr r0, _020D67D4 ; =UNK_021D555C
|
|
ldr r0, [r0, #0x0]
|
|
bx lr
|
|
.balign 4
|
|
_020D67D4: .word UNK_021D555C
|
|
|
|
arm_func_start CARDi_InitCommon
|
|
CARDi_InitCommon: ; 0x020D67D8
|
|
stmdb sp!, {r4,lr}
|
|
sub sp, sp, #0x8
|
|
ldr r4, _020D68B8 ; =cardi_common
|
|
ldr r1, _020D68BC ; =UNK_021D5560
|
|
mvn r2, #0x2
|
|
mov r0, #0x0
|
|
str r2, [r4, #0x8]
|
|
mov r2, #0x60
|
|
str r0, [r4, #0xc]
|
|
str r0, [r4, #0x18]
|
|
str r1, [r4, #0x0]
|
|
bl MIi_CpuClearFast
|
|
ldr r0, _020D68BC ; =UNK_021D5560
|
|
mov r1, #0x60
|
|
bl DC_FlushRange
|
|
ldr r0, _020D68C0 ; =0x027FFC40
|
|
ldrh r0, [r0, #0x0]
|
|
cmp r0, #0x2
|
|
beq _020D6834
|
|
ldr r0, _020D68C4 ; =0x027FFE00
|
|
ldr r1, _020D68C8 ; =0x027FFA80
|
|
mov r2, #0x160
|
|
bl MI_CpuCopy8
|
|
_020D6834:
|
|
mov r2, #0x0
|
|
str r2, [r4, #0x14]
|
|
ldr r0, [r4, #0x14]
|
|
mov r1, #0x4
|
|
str r0, [r4, #0x10]
|
|
str r2, [r4, #0x110]
|
|
ldr r3, [r4, #0x110]
|
|
mov r0, #0x400
|
|
str r3, [r4, #0x10c]
|
|
str r1, [r4, #0x108]
|
|
str r0, [sp, #0x0]
|
|
ldr r12, [r4, #0x108]
|
|
ldr r1, _020D68CC ; =CARDi_TaskThread
|
|
ldr r3, _020D68D0 ; =UNK_021D5BE0
|
|
add r0, r4, #0x44
|
|
str r12, [sp, #0x4]
|
|
bl OS_CreateThread
|
|
add r0, r4, #0x44
|
|
bl OS_WakeupThreadDirect
|
|
ldr r1, _020D68D4 ; =CARDi_OnFifoRecv
|
|
mov r0, #0xb
|
|
bl PXI_SetFifoRecvCallback
|
|
ldr r0, _020D68C0 ; =0x027FFC40
|
|
ldrh r0, [r0, #0x0]
|
|
cmp r0, #0x2
|
|
addeq sp, sp, #0x8
|
|
ldmeqia sp!, {r4,lr}
|
|
bxeq lr
|
|
mov r0, #0x1
|
|
bl CARD_Enable
|
|
add sp, sp, #0x8
|
|
ldmia sp!, {r4,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020D68B8: .word cardi_common
|
|
_020D68BC: .word UNK_021D5560
|
|
_020D68C0: .word 0x027FFC40
|
|
_020D68C4: .word 0x027FFE00
|
|
_020D68C8: .word 0x027FFA80
|
|
_020D68CC: .word CARDi_TaskThread
|
|
_020D68D0: .word UNK_021D5BE0
|
|
_020D68D4: .word CARDi_OnFifoRecv
|
|
|
|
arm_func_start CARDi_UnlockResource
|
|
CARDi_UnlockResource: ; 0x020D68D8
|
|
stmdb sp!, {r4-r7,lr}
|
|
sub sp, sp, #0x4
|
|
ldr r5, _020D6978 ; =cardi_common
|
|
mov r7, r0
|
|
mov r6, r1
|
|
bl OS_DisableInterrupts
|
|
mov r1, r5
|
|
mov r4, r0
|
|
ldr r0, [r1, #0x8]
|
|
cmp r0, r7
|
|
bne _020D6910
|
|
ldr r0, [r5, #0xc]
|
|
cmp r0, #0x0
|
|
bne _020D6918
|
|
_020D6910:
|
|
bl OS_Terminate
|
|
b _020D6958
|
|
_020D6918:
|
|
ldr r0, [r5, #0x18]
|
|
cmp r0, r6
|
|
beq _020D6928
|
|
bl OS_Terminate
|
|
_020D6928:
|
|
ldr r0, [r5, #0xc]
|
|
sub r0, r0, #0x1
|
|
str r0, [r5, #0xc]
|
|
ldr r0, [r5, #0xc]
|
|
cmp r0, #0x0
|
|
bne _020D6958
|
|
mvn r0, #0x2
|
|
str r0, [r5, #0x8]
|
|
mov r1, #0x0
|
|
add r0, r5, #0x10
|
|
str r1, [r5, #0x18]
|
|
bl OS_WakeupThread
|
|
_020D6958:
|
|
ldr r1, [r5, #0x0]
|
|
mov r2, #0x0
|
|
mov r0, r4
|
|
str r2, [r1, #0x0]
|
|
bl OS_RestoreInterrupts
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r7,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020D6978: .word cardi_common
|
|
|
|
arm_func_start CARDi_LockResource
|
|
CARDi_LockResource: ; 0x020D697C
|
|
stmdb sp!, {r4-r9,lr}
|
|
sub sp, sp, #0x4
|
|
ldr r5, _020D6A14 ; =cardi_common
|
|
mov r7, r0
|
|
mov r6, r1
|
|
bl OS_DisableInterrupts
|
|
ldr r1, [r5, #0x8]
|
|
mov r4, r0
|
|
cmp r1, r7
|
|
bne _020D69B8
|
|
ldr r0, [r5, #0x18]
|
|
cmp r0, r6
|
|
beq _020D69E8
|
|
bl OS_Terminate
|
|
b _020D69E8
|
|
_020D69B8:
|
|
ldr r0, [r5, #0x8]
|
|
mvn r8, #0x2
|
|
cmp r0, r8
|
|
beq _020D69E0
|
|
add r9, r5, #0x10
|
|
_020D69CC:
|
|
mov r0, r9
|
|
bl OS_SleepThread
|
|
ldr r0, [r5, #0x8]
|
|
cmp r0, r8
|
|
bne _020D69CC
|
|
_020D69E0:
|
|
str r7, [r5, #0x8]
|
|
str r6, [r5, #0x18]
|
|
_020D69E8:
|
|
ldr r1, [r5, #0xc]
|
|
mov r0, r4
|
|
add r1, r1, #0x1
|
|
str r1, [r5, #0xc]
|
|
ldr r1, [r5, #0x0]
|
|
mov r2, #0x0
|
|
str r2, [r1, #0x0]
|
|
bl OS_RestoreInterrupts
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r9,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020D6A14: .word cardi_common
|
|
|
|
arm_func_start CARDi_SetTask
|
|
CARDi_SetTask: ; 0x020D6A18
|
|
stmdb sp!, {r4-r5,lr}
|
|
sub sp, sp, #0x4
|
|
ldr r4, _020D6A5C ; =cardi_common
|
|
mov r5, r0
|
|
ldr r1, [r4, #0x108]
|
|
add r0, r4, #0x44
|
|
bl OS_SetThreadPriority
|
|
add r0, r4, #0x44
|
|
str r0, [r4, #0x104]
|
|
str r5, [r4, #0x40]
|
|
ldr r1, [r4, #0x114]
|
|
orr r1, r1, #0x8
|
|
str r1, [r4, #0x114]
|
|
bl OS_WakeupThreadDirect
|
|
add sp, sp, #0x4
|
|
ldmia sp!, {r4-r5,lr}
|
|
bx lr
|
|
.balign 4
|
|
_020D6A5C: .word cardi_common
|