Files
pokediamond/arm9/asm/RTC_convert.s
2020-05-24 15:09:27 -04:00

345 lines
6.4 KiB
ArmAsm

.include "asm/macros.inc"
.include "global.inc"
.extern UNK_02106A1C
.extern UNK_02106A20
.section .data
.global UNK_02106A1C
UNK_02106A1C: ; 0x02106A1C
.word 0
.global UNK_02106A20
UNK_02106A20: ; 0x02106A20
.word 0 ; Jan
.word 31 ; Feb
.word 59 ; Mar
.word 90 ; Apr
.word 120 ; May
.word 151 ; Jun
.word 181 ; Jul
.word 212 ; Aug
.word 243 ; Sep
.word 273 ; Oct
.word 304 ; Nov
.word 334 ; Dec
.text
arm_func_start RTC_GetDayOfWeek
RTC_GetDayOfWeek: ; 0x020D6248
stmdb sp!, {r4-r6,lr}
ldr r1, [r0, #0x4]
ldr r2, [r0, #0x0]
sub r3, r1, #0x2
cmp r3, #0x1
add lr, r2, #0x7d0
ldr r4, _020D630C ; =0x51EB851F
sublt lr, lr, #0x1
ldr r12, [r0, #0x8]
smull r0, r2, r4, lr
addlt r3, r3, #0xc
mov r1, #0x1a
mul r0, r3, r1
smull r1, r3, r4, lr
ldr r5, _020D6310 ; =0x66666667
sub r0, r0, #0x2
smull r4, r1, r5, r0
mov r4, lr, lsr #0x1f
mov r2, r2, asr #0x5
mov r3, r3, asr #0x5
add r3, r4, r3
ldr r5, _020D6314 ; =0x00000064
add r2, r4, r2
smull r2, r4, r5, r2
sub r2, lr, r2
mov r1, r1, asr #0x2
mov r0, r0, lsr #0x1f
add r1, r0, r1
mov r4, r2, asr #0x1
add r0, r12, r1
add r1, r2, r4, lsr #0x1e
add r2, r2, r0
mov r6, r3, asr #0x1
add r0, r3, r6, lsr #0x1e
add r1, r2, r1, asr #0x2
add r1, r1, r0, asr #0x2
mov r0, #0x5
mla r4, r3, r0, r1
ldr r3, _020D6318 ; =0x92492493
mov r1, r4, lsr #0x1f
smull r2, r0, r3, r4
add r0, r4, r0
mov r0, r0, asr #0x2
ldr r2, _020D631C ; =0x00000007
add r0, r1, r0
smull r0, r1, r2, r0
sub r0, r4, r0
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020D630C: .word 0x51EB851F
_020D6310: .word 0x66666667
_020D6314: .word 0x00000064
_020D6318: .word 0x92492493
_020D631C: .word 0x00000007
arm_func_start RTC_ConvertSecondToDateTime
RTC_ConvertSecondToDateTime: ; 0x020D6320
stmdb sp!, {r4-r7,lr}
sub sp, sp, #0x4
mov r5, r2
mov r12, #0x0
mov r4, r3
subs r2, r5, r12
sbcs r2, r4, r12
mov r7, r0
mov r6, r1
movlt r5, r12
movlt r4, r12
blt _020D6364
ldr r1, _020D63B0 ; =0xBC19137F
subs r0, r1, r5
sbcs r0, r12, r4
movlt r5, r1
movlt r4, r12
_020D6364:
ldr r2, _020D63B4 ; =0x00015180
mov r0, r5
mov r1, r4
mov r3, #0x0
bl _ll_mod
mov r1, r0
mov r0, r6
bl RTCi_ConvertSecondToTime
ldr r2, _020D63B4 ; =0x00015180
mov r0, r5
mov r1, r4
mov r3, #0x0
bl _ll_sdiv
mov r1, r0
mov r0, r7
bl RTC_ConvertDayToDate
add sp, sp, #0x4
ldmia sp!, {r4-r7,lr}
bx lr
.balign 4
_020D63B0: .word 0xBC19137F
_020D63B4: .word 0x00015180
arm_func_start RTCi_ConvertSecondToTime
RTCi_ConvertSecondToTime: ; 0x020D63B8
stmdb sp!, {r4-r6,lr}
ldr r2, _020D6448 ; =0x0001517F
cmp r1, #0x0
movlt r1, #0x0
cmp r1, r2
ldr ip, _020D644C ; =0x88888889
movgt r1, r2
smull r2, r3, r12, r1
smull r2, lr, r12, r1
ldr r5, _020D6450 ; =0x91A2B3C5
add r3, r1, r3
smull r4, r2, r5, r1
mov r5, r1, lsr #0x1f
mov r3, r3, asr #0x5
add r3, r5, r3
smull r4, r6, r12, r3
add lr, r1, lr
mov lr, lr, asr #0x5
add r6, r3, r6
add r2, r1, r2
ldr r4, _020D6454 ; =0x0000003C
add lr, r5, lr
smull r12, lr, r4, lr
sub lr, r1, r12
mov r2, r2, asr #0xb
mov r6, r6, asr #0x5
mov r1, r3, lsr #0x1f
add r6, r1, r6
smull r1, r12, r4, r6
str lr, [r0, #0x8]
sub r6, r3, r1
str r6, [r0, #0x4]
add r2, r5, r2
str r2, [r0, #0x0]
ldmia sp!, {r4-r6,lr}
bx lr
.balign 4
_020D6448: .word 0x0001517F
_020D644C: .word 0x88888889
_020D6450: .word 0x91A2B3C5
_020D6454: .word 0x0000003C
arm_func_start RTC_ConvertDayToDate
RTC_ConvertDayToDate: ; 0x020D6458
stmdb sp!, {r4,lr}
ldr r2, _020D6560 ; =0x00008EAC
cmp r1, #0x0
movlt r1, #0x0
cmp r1, r2
movgt r1, r2
ldr r3, _020D6564 ; =0x92492493
add lr, r1, #0x6
smull r2, r4, r3, lr
add r4, lr, r4
mov r4, r4, asr #0x2
mov r2, lr, lsr #0x1f
ldr ip, _020D6568 ; =0x00000007
add r4, r2, r4
smull r2, r3, r12, r4
sub r4, lr, r2
ldr r2, _020D656C ; =0x0000016D
ldr r3, _020D6570 ; =0x0000016E
str r4, [r0, #0xc]
mov lr, #0x0
_020D64A8:
ands r12, lr, #0x3
moveq r12, r3
movne r12, r2
mov r4, r1
subs r1, r1, r12
movmi r1, r4
bmi _020D64D0
add lr, lr, #0x1
cmp lr, #0x63
blo _020D64A8
_020D64D0:
ldr r2, _020D656C ; =0x0000016D
str lr, [r0, #0x0]
cmp r1, r2
movgt r1, r2
ands r2, lr, #0x3
bne _020D6518
cmp r1, #0x3c
bge _020D6514
cmp r1, #0x1f
movlt r2, #0x1
subge r1, r1, #0x1f
movge r2, #0x2
str r2, [r0, #0x4]
add r1, r1, #0x1
str r1, [r0, #0x8]
ldmia sp!, {r4,lr}
bx lr
_020D6514:
sub r1, r1, #0x1
_020D6518:
ldr r3, _020D6574 ; =UNK_02106A20
mov r4, #0xb
_020D6520:
ldr r2, [r3, r4, lsl #0x2]
mov r12, r4, lsl #0x2
cmp r1, r2
blt _020D6550
add r2, r4, #0x1
str r2, [r0, #0x4]
ldr r2, [r3, r12]
sub r1, r1, r2
add r1, r1, #0x1
str r1, [r0, #0x8]
ldmia sp!, {r4,lr}
bx lr
_020D6550:
subs r4, r4, #0x1
bpl _020D6520
ldmia sp!, {r4,lr}
bx lr
.balign 4
_020D6560: .word 0x00008EAC
_020D6564: .word 0x92492493
_020D6568: .word 0x00000007
_020D656C: .word 0x0000016D
_020D6570: .word 0x0000016E
_020D6574: .word UNK_02106A20
arm_func_start RTC_ConvertDateTimeToSecond
RTC_ConvertDateTimeToSecond: ; 0x020D6578
stmdb sp!, {r4-r5,lr}
sub sp, sp, #0x4
mov r5, r1
bl RTC_ConvertDateToDay
mov r4, r0
mvn r0, #0x0
cmp r4, r0
addeq sp, sp, #0x4
moveq r1, r0
ldmeqia sp!, {r4-r5,lr}
bxeq lr
mov r0, r5
bl RTCi_ConvertTimeToSecond
mvn r2, #0x0
cmp r0, r2
moveq r1, r2
beq _020D65DC
ldr r1, _020D65EC ; =0x00015180
mov r2, #0x0
umull r12, r3, r4, r1
mla r3, r4, r2, r3
mov r2, r4, asr #0x1f
mla r3, r2, r1, r3
adds r2, r0, r12
adc r1, r3, r0, asr #0x1f
_020D65DC:
mov r0, r2
add sp, sp, #0x4
ldmia sp!, {r4-r5,lr}
bx lr
.balign 4
_020D65EC: .word 0x00015180
arm_func_start RTCi_ConvertTimeToSecond
RTCi_ConvertTimeToSecond: ; 0x020D65F0
ldr r3, [r0, #0x4]
ldr r2, [r0, #0x0]
mov r1, #0x3c
mla r3, r2, r1, r3
ldr r0, [r0, #0x8]
mla r0, r3, r1, r0
bx lr
arm_func_start RTC_ConvertDateToDay
RTC_ConvertDateToDay: ; 0x020D660C
ldr r3, [r0, #0x0]
cmp r3, #0x64
bhs _020D665C
ldr r2, [r0, #0x4]
cmp r2, #0x1
blo _020D665C
cmp r2, #0xc
bhi _020D665C
ldr r1, [r0, #0x8]
cmp r1, #0x1
blo _020D665C
cmp r1, #0x1f
bhi _020D665C
ldr r0, [r0, #0xc]
cmp r0, #0x7
bge _020D665C
cmp r2, #0x1
blo _020D665C
cmp r2, #0xc
bls _020D6664
_020D665C:
mvn r0, #0x0
bx lr
_020D6664:
ldr r0, _020D6698 ; =UNK_02106A1C
sub r1, r1, #0x1
ldr r0, [r0, r2, lsl #0x2]
cmp r2, #0x3
add r2, r1, r0
blo _020D6684
ands r0, r3, #0x3
addeq r2, r2, #0x1
_020D6684:
ldr r0, _020D669C ; =0x0000016D
add r1, r3, #0x3
mla r0, r3, r0, r2
add r0, r0, r1, lsr #0x2
bx lr
.balign 4
_020D6698: .word UNK_02106A1C
_020D669C: .word 0x0000016D