Files
pokediamond/arm9/asm/CARD_common.s
2020-05-22 16:51:57 -04:00

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