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

674 lines
12 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.section .bss
.global UNK_021D5534
UNK_021D5534: ; 0x021D5534
.space 0x4
.global UNK_021D5538
UNK_021D5538: ; 0x021D5538
.space 0x24
.text
arm_func_start RtcWaitBusy
RtcWaitBusy: ; 0x020D5914
ldr ip, _020D5928 ; =UNK_021D5538
_020D5918:
ldr r0, [r12, #0x0]
cmp r0, #0x1
beq _020D5918
bx lr
.balign 4
_020D5928: .word UNK_021D5538
arm_func_start RtcGetResultCallback
RtcGetResultCallback: ; 0x020D592C
ldr r1, _020D5938 ; =UNK_021D5538
str r0, [r1, #0x20]
bx lr
.balign 4
_020D5938: .word UNK_021D5538
arm_func_start RtcBCD2HEX
RtcBCD2HEX: ; 0x020D593C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, #0x0
mov r3, r5
mov r2, r5
_020D5950:
mov r1, r0, lsr r2
and r1, r1, #0xf
cmp r1, #0xa
addcs sp, sp, #0x4
movcs r0, #0x0
ldmcsia sp!, {r4-r5,lr}
bxcs lr
add r3, r3, #0x1
cmp r3, #0x8
add r2, r2, #0x4
blt _020D5950
mov r12, #0x0
mov lr, r12
mov r4, #0x1
mov r2, #0xa
_020D598C:
mov r1, r0, lsr lr
and r3, r1, #0xf
mul r1, r4, r2
mla r5, r4, r3, r5
add r12, r12, #0x1
mov r4, r1
cmp r12, #0x8
add lr, lr, #0x4
blt _020D598C
mov r0, r5
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
arm_func_start RtcCommonCallback
RtcCommonCallback: ; 0x020D59C0
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
cmp r2, #0x0
beq _020D5A30
ldr r0, _020D5F30 ; =UNK_021D5538
ldr r2, _020D5F30 ; =UNK_021D5538
ldr r1, [r0, #0x18]
ldr r4, [r2, #0x4]
cmp r1, #0x0
movne r1, #0x0
strne r1, [r0, #0x18]
ldr r0, _020D5F30 ; =UNK_021D5538
ldr r1, [r0, #0x0]
cmp r1, #0x0
movne r1, #0x0
strne r1, [r0, #0x0]
cmp r4, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,lr}
bxeq lr
ldr r1, [r2, #0x10]
mov r3, #0x0
mov r0, #0x6
str r3, [r2, #0x4]
blx r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
_020D5A30:
and r0, r1, #0x7f00
mov r0, r0, lsr #0x8
and r0, r0, #0xff
cmp r0, #0x30
and r2, r1, #0xff
bne _020D5A70
ldr r0, _020D5F30 ; =UNK_021D5538
ldr r0, [r0, #0x1c]
cmp r0, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,lr}
bxeq lr
blx r0
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
_020D5A70:
cmp r2, #0x0
bne _020D5E88
ldr r0, _020D5F30 ; =UNK_021D5538
mov r5, #0x0
ldr r1, [r0, #0x14]
cmp r1, #0xf
addls pc, pc, r1, lsl #0x2
b _020D5E74
_020D5A90:
b _020D5AD0
_020D5A94:
b _020D5B24
_020D5A98:
b _020D5B74
_020D5A9C:
b _020D5ED0
_020D5AA0:
b _020D5ED0
_020D5AA4:
b _020D5ED0
_020D5AA8:
b _020D5C1C
_020D5AAC:
b _020D5C4C
_020D5AB0:
b _020D5C70
_020D5AB4:
b _020D5D14
_020D5AB8:
b _020D5DC8
_020D5ABC:
b _020D5ED0
_020D5AC0:
b _020D5ED0
_020D5AC4:
b _020D5ED0
_020D5AC8:
b _020D5ED0
_020D5ACC:
b _020D5ED0
_020D5AD0:
ldr r1, _020D5F34 ; =0x027FFDE8
ldr r4, [r0, #0x8]
ldrb r0, [r1, #0x0]
bl RtcBCD2HEX
ldr r1, _020D5F34 ; =0x027FFDE8
str r0, [r4, #0x0]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x13
mov r0, r0, lsr #0x1b
bl RtcBCD2HEX
ldr r1, _020D5F34 ; =0x027FFDE8
str r0, [r4, #0x4]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0xa
mov r0, r0, lsr #0x1a
bl RtcBCD2HEX
str r0, [r4, #0x8]
mov r0, r4
bl RTC_GetDayOfWeek
str r0, [r4, #0xc]
b _020D5ED0
_020D5B24:
ldr r1, _020D5F38 ; =0x027FFDEC
ldr r4, [r0, #0x8]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x1a
mov r0, r0, lsr #0x1a
bl RtcBCD2HEX
ldr r1, _020D5F38 ; =0x027FFDEC
str r0, [r4, #0x0]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x11
mov r0, r0, lsr #0x19
bl RtcBCD2HEX
ldr r1, _020D5F38 ; =0x027FFDEC
str r0, [r4, #0x4]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x9
mov r0, r0, lsr #0x19
bl RtcBCD2HEX
str r0, [r4, #0x8]
b _020D5ED0
_020D5B74:
ldr r1, _020D5F34 ; =0x027FFDE8
ldr r4, [r0, #0x8]
ldr r0, [r1, #0x0]
and r0, r0, #0xff
bl RtcBCD2HEX
ldr r1, _020D5F34 ; =0x027FFDE8
str r0, [r4, #0x0]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x13
mov r0, r0, lsr #0x1b
bl RtcBCD2HEX
ldr r1, _020D5F34 ; =0x027FFDE8
str r0, [r4, #0x4]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0xa
mov r0, r0, lsr #0x1a
bl RtcBCD2HEX
str r0, [r4, #0x8]
mov r0, r4
bl RTC_GetDayOfWeek
ldr r1, _020D5F38 ; =0x027FFDEC
str r0, [r4, #0xc]
ldr r0, [r1, #0x0]
ldr r1, _020D5F30 ; =UNK_021D5538
mov r0, r0, lsl #0x1a
mov r0, r0, lsr #0x1a
ldr r4, [r1, #0xc]
bl RtcBCD2HEX
ldr r1, _020D5F38 ; =0x027FFDEC
str r0, [r4, #0x0]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x11
mov r0, r0, lsr #0x19
bl RtcBCD2HEX
ldr r1, _020D5F38 ; =0x027FFDEC
str r0, [r4, #0x4]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x9
mov r0, r0, lsr #0x19
bl RtcBCD2HEX
str r0, [r4, #0x8]
b _020D5ED0
_020D5C1C:
ldr r1, _020D5F3C ; =0x027FFDEA
ldr r2, [r0, #0x8]
ldrh r0, [r1, #0x0]
mov r0, r0, lsl #0x1c
mov r0, r0, lsr #0x1c
cmp r0, #0x4
bne _020D5C44
mov r0, #0x1
str r0, [r2, #0x0]
b _020D5ED0
_020D5C44:
str r5, [r2, #0x0]
b _020D5ED0
_020D5C4C:
ldr r1, _020D5F3C ; =0x027FFDEA
ldr r2, [r0, #0x8]
ldrh r0, [r1, #0x0]
mov r0, r0, lsl #0x19
movs r0, r0, lsr #0x1f
movne r0, #0x1
strne r0, [r2, #0x0]
streq r5, [r2, #0x0]
b _020D5ED0
_020D5C70:
ldr r1, _020D5F38 ; =0x027FFDEC
ldr r4, [r0, #0x8]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x1d
mov r0, r0, lsr #0x1d
str r0, [r4, #0x0]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x12
mov r0, r0, lsr #0x1a
bl RtcBCD2HEX
ldr r1, _020D5F38 ; =0x027FFDEC
str r0, [r4, #0x4]
ldr r0, [r1, #0x0]
mov r0, r0, lsl #0x9
mov r0, r0, lsr #0x19
bl RtcBCD2HEX
str r0, [r4, #0x8]
mov r1, r5
ldr r0, _020D5F38 ; =0x027FFDEC
str r1, [r4, #0xc]
ldr r0, [r0, #0x0]
mov r0, r0, lsl #0x18
movs r0, r0, lsr #0x1f
ldrne r0, [r4, #0xc]
addne r0, r0, #0x1
strne r0, [r4, #0xc]
ldr r0, _020D5F38 ; =0x027FFDEC
ldr r0, [r0, #0x0]
mov r0, r0, lsl #0x10
movs r0, r0, lsr #0x1f
ldrne r0, [r4, #0xc]
addne r0, r0, #0x2
strne r0, [r4, #0xc]
ldr r0, _020D5F38 ; =0x027FFDEC
ldr r0, [r0, #0x0]
mov r0, r0, lsl #0x8
movs r0, r0, lsr #0x1f
ldrne r0, [r4, #0xc]
addne r0, r0, #0x4
strne r0, [r4, #0xc]
b _020D5ED0
_020D5D14:
ldr r3, [r0, #0x18]
cmp r3, #0x0
bne _020D5DC0
ldr r1, [r0, #0x8]
ldr r1, [r1, #0x0]
cmp r1, #0x1
bne _020D5D7C
ldr r2, _020D5F3C ; =0x027FFDEA
ldrh r1, [r2, #0x0]
mov r1, r1, lsl #0x1c
mov r1, r1, lsr #0x1c
cmp r1, #0x4
beq _020D5ED0
add r1, r3, #0x1
str r1, [r0, #0x18]
ldrh r0, [r2, #0x0]
bic r0, r0, #0xf
orr r0, r0, #0x4
strh r0, [r2, #0x0]
bl RTCi_WriteRawStatus2Async
_020D5D64: ; 0x020D5D64
cmp r0, #0x0
moveq r1, r5
ldreq r0, _020D5F30 ; =UNK_021D5538
moveq r5, #0x3
streq r1, [r0, #0x18]
b _020D5ED0
_020D5D7C:
ldr r2, _020D5F3C ; =0x027FFDEA
ldrh r1, [r2, #0x0]
mov r1, r1, lsl #0x1c
movs r1, r1, lsr #0x1c
beq _020D5ED0
add r1, r3, #0x1
str r1, [r0, #0x18]
ldrh r0, [r2, #0x0]
bic r0, r0, #0xf
strh r0, [r2, #0x0]
bl RTCi_WriteRawStatus2Async
_020D5DA8: ; 0x020D5DA8
cmp r0, #0x0
moveq r1, r5
ldreq r0, _020D5F30 ; =UNK_021D5538
moveq r5, #0x3
streq r1, [r0, #0x18]
b _020D5ED0
_020D5DC0:
str r5, [r0, #0x18]
b _020D5ED0
_020D5DC8:
ldr r3, [r0, #0x18]
cmp r3, #0x0
bne _020D5E6C
ldr r1, [r0, #0x8]
ldr r1, [r1, #0x0]
cmp r1, #0x1
bne _020D5E28
ldr r2, _020D5F3C ; =0x027FFDEA
ldrh r1, [r2, #0x0]
mov r1, r1, lsl #0x19
movs r1, r1, lsr #0x1f
bne _020D5ED0
add r1, r3, #0x1
str r1, [r0, #0x18]
ldrh r0, [r2, #0x0]
orr r0, r0, #0x40
strh r0, [r2, #0x0]
bl RTCi_WriteRawStatus2Async
_020D5E10: ; 0x020D5E10
cmp r0, #0x0
moveq r1, r5
ldreq r0, _020D5F30 ; =UNK_021D5538
moveq r5, #0x3
streq r1, [r0, #0x18]
b _020D5ED0
_020D5E28:
ldr r2, _020D5F3C ; =0x027FFDEA
ldrh r1, [r2, #0x0]
mov r1, r1, lsl #0x19
movs r1, r1, lsr #0x1f
beq _020D5ED0
add r1, r3, #0x1
str r1, [r0, #0x18]
ldrh r0, [r2, #0x0]
bic r0, r0, #0x40
strh r0, [r2, #0x0]
bl RTCi_WriteRawStatus2Async
_020D5E54: ; 0x020D5E54
cmp r0, #0x0
moveq r1, r5
ldreq r0, _020D5F30 ; =UNK_021D5538
moveq r5, #0x3
streq r1, [r0, #0x18]
b _020D5ED0
_020D5E6C:
str r5, [r0, #0x18]
b _020D5ED0
_020D5E74:
ldr r0, _020D5F30 ; =UNK_021D5538
mov r1, #0x0
str r1, [r0, #0x18]
mov r5, #0x4
b _020D5ED0
_020D5E88:
ldr r0, _020D5F30 ; =UNK_021D5538
mov r1, #0x0
str r1, [r0, #0x18]
cmp r2, #0x4
addls pc, pc, r2, lsl #0x2
b _020D5ECC
_020D5EA0:
b _020D5ECC
_020D5EA4:
b _020D5EB4
_020D5EA8:
b _020D5EBC
_020D5EAC:
b _020D5EC4
_020D5EB0:
b _020D5ECC
_020D5EB4:
mov r5, #0x4
b _020D5ED0
_020D5EBC:
mov r5, #0x5
b _020D5ED0
_020D5EC4:
mov r5, #0x1
b _020D5ED0
_020D5ECC:
mov r5, #0x6
_020D5ED0:
ldr r0, _020D5F30 ; =UNK_021D5538
ldr r1, [r0, #0x18]
cmp r1, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
ldr r2, _020D5F30 ; =UNK_021D5538
ldr r1, [r0, #0x0]
ldr r4, [r2, #0x4]
cmp r1, #0x0
movne r1, #0x0
strne r1, [r0, #0x0]
cmp r4, #0x0
addeq sp, sp, #0x4
ldmeqia sp!, {r4-r5,lr}
bxeq lr
ldr r1, [r2, #0x10]
mov r3, #0x0
mov r0, r5
str r3, [r2, #0x4]
blx r4
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020D5F30: .word UNK_021D5538
_020D5F34: .word 0x027FFDE8
_020D5F38: .word 0x027FFDEC
_020D5F3C: .word 0x027FFDEA
arm_func_start RTC_GetDateTimeAsync
RTC_GetDateTimeAsync: ; 0x020D5F40
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r7, r0
mov r6, r1
mov r5, r2
mov r4, r3
bl OS_DisableInterrupts
ldr r1, _020D5FCC ; =UNK_021D5538
ldr r2, [r1, #0x0]
cmp r2, #0x0
beq _020D5F80
bl OS_RestoreInterrupts
add sp, sp, #0x4
mov r0, #0x1
ldmia sp!, {r4-r7,lr}
bx lr
_020D5F80:
mov r2, #0x1
str r2, [r1, #0x0]
bl OS_RestoreInterrupts
ldr r0, _020D5FCC ; =UNK_021D5538
mov r2, #0x2
mov r1, #0x0
str r2, [r0, #0x14]
str r1, [r0, #0x18]
str r7, [r0, #0x8]
str r6, [r0, #0xc]
str r5, [r0, #0x4]
str r4, [r0, #0x10]
bl RTCi_ReadRawDateTimeAsync
_020D5FB4: ; 0x020D5FB4
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020D5FCC: .word UNK_021D5538
arm_func_start RTC_GetTime
RTC_GetTime: ; 0x020D5FD0
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D600C ; =RtcGetResultCallback
mov r2, #0x0
bl RTC_GetTimeAsync
ldr r1, _020D6010 ; =UNK_021D5538
cmp r0, #0x0
str r0, [r1, #0x20]
bne _020D5FF8
bl RtcWaitBusy
_020D5FF8:
ldr r0, _020D6010 ; =UNK_021D5538
ldr r0, [r0, #0x20]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D600C: .word RtcGetResultCallback
_020D6010: .word UNK_021D5538
arm_func_start RTC_GetTimeAsync
RTC_GetTimeAsync: ; 0x020D6014
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl OS_DisableInterrupts
ldr r1, _020D608C ; =UNK_021D5538
ldr r2, [r1, #0x0]
cmp r2, #0x0
beq _020D6048
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020D6048:
mov r2, #0x1
str r2, [r1, #0x0]
bl OS_RestoreInterrupts
ldr r0, _020D608C ; =UNK_021D5538
mov r2, #0x1
mov r1, #0x0
str r2, [r0, #0x14]
str r1, [r0, #0x18]
str r6, [r0, #0x8]
str r5, [r0, #0x4]
str r4, [r0, #0x10]
bl RTCi_ReadRawTimeAsync
_020D6078: ; 0x020D6078
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020D608C: .word UNK_021D5538
arm_func_start RTC_GetDate
RTC_GetDate: ; 0x020D6090
stmdb sp!, {lr}
sub sp, sp, #0x4
ldr r1, _020D60CC ; =RtcGetResultCallback
mov r2, #0x0
bl RTC_GetDateAsync
ldr r1, _020D60D0 ; =UNK_021D5538
cmp r0, #0x0
str r0, [r1, #0x20]
bne _020D60B8
bl RtcWaitBusy
_020D60B8:
ldr r0, _020D60D0 ; =UNK_021D5538
ldr r0, [r0, #0x20]
add sp, sp, #0x4
ldmia sp!, {lr}
bx lr
.balign 4
_020D60CC: .word RtcGetResultCallback
_020D60D0: .word UNK_021D5538
arm_func_start RTC_GetDateAsync
RTC_GetDateAsync: ; 0x020D60D4
stmdb sp!, {r4-r6,lr}
mov r6, r0
mov r5, r1
mov r4, r2
bl OS_DisableInterrupts
ldr r1, _020D6148 ; =UNK_021D5538
ldr r2, [r1, #0x0]
cmp r2, #0x0
beq _020D6108
bl OS_RestoreInterrupts
mov r0, #0x1
ldmia sp!, {r4-r6,lr}
bx lr
_020D6108:
mov r2, #0x1
str r2, [r1, #0x0]
bl OS_RestoreInterrupts
ldr r0, _020D6148 ; =UNK_021D5538
mov r1, #0x0
str r1, [r0, #0x14]
str r1, [r0, #0x18]
str r6, [r0, #0x8]
str r5, [r0, #0x4]
str r4, [r0, #0x10]
bl RTCi_ReadRawDateAsync
_020D6134: ; 0x020D6134
cmp r0, #0x0
movne r0, #0x0
moveq r0, #0x3
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020D6148: .word UNK_021D5538
arm_func_start RTC_Init
RTC_Init: ; 0x020D614C
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
ldr r1, _020D61C8 ; =UNK_021D5534
ldrh r0, [r1, #0x0]
cmp r0, #0x0
addne sp, sp, #0x4
ldmneia sp!, {r4-r5,lr}
bxne lr
ldr r0, _020D61CC ; =UNK_021D5538
mov r2, #0x0
mov r3, #0x1
strh r3, [r1, #0x0]
str r2, [r0, #0x0]
str r2, [r0, #0x4]
str r2, [r0, #0x1c]
str r2, [r0, #0x8]
str r2, [r0, #0xc]
bl PXI_Init
mov r5, #0x5
mov r4, #0x1
_020D619C:
mov r0, r5
mov r1, r4
bl PXI_IsCallbackReady
_020D61A8: ; 0x020D61A8
cmp r0, #0x0
beq _020D619C
ldr r1, _020D61D0 ; =RtcCommonCallback
mov r0, #0x5
bl PXI_SetFifoRecvCallback
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020D61C8: .word UNK_021D5534
_020D61CC: .word UNK_021D5538
_020D61D0: .word RtcCommonCallback