diff options
44 files changed, 658 insertions, 821 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 60a43ce5..39d2ed1e 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -84,7 +84,7 @@ Static arm9 Object unk_02022504.o Object save.o Object save_arrays.o - Object unk_0202376C.o + Object sav_system_info.o Object player_data.o Object unk_02023AC4.o Object unk_02023C40.o diff --git a/arm9/asm/DGT_hash2.s b/arm9/asm/DGT_hash2.s index 1c89ebf9..f309204e 100644 --- a/arm9/asm/DGT_hash2.s +++ b/arm9/asm/DGT_hash2.s @@ -10,7 +10,7 @@ Unk_02106A00: ; 0x02106A00 .global Unk_02106A04 Unk_02106A04: ; 0x02106A04 .byte 0x14, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 .text diff --git a/arm9/asm/RTC_convert.s b/arm9/asm/RTC_convert.s deleted file mode 100644 index 37e8cd0e..00000000 --- a/arm9/asm/RTC_convert.s +++ /dev/null @@ -1,344 +0,0 @@ - .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 diff --git a/arm9/asm/scrcmd.s b/arm9/asm/scrcmd.s index 62f32eeb..9e33ba2c 100644 --- a/arm9/asm/scrcmd.s +++ b/arm9/asm/scrcmd.s @@ -8801,7 +8801,7 @@ FUN_0203DF84: ; 0x0203DF84 add r4, #0x80 add r5, r0, #0x0 ldr r0, [r4, #0x0] - bl FUN_0204B2A4 + bl Script_GetTimeOfDay strh r0, [r5, #0x0] mov r0, #0x0 pop {r3-r5, pc} @@ -10138,7 +10138,7 @@ FUN_0203EA68: ; 0x0203EA68 bl GetVarPointer add r4, r0, #0x0 add r0, sp, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate ldr r0, [sp, #0xc] strh r0, [r4, #0x0] mov r0, #0x0 @@ -10890,7 +10890,7 @@ FUN_0203F058: ; 0x0203F058 add r4, #0x80 add r5, r0, #0x0 ldr r0, [r4, #0x0] - bl FUN_0204B2D8 + bl Script_GetHour strh r0, [r5, #0x0] mov r0, #0x0 pop {r3-r5, pc} @@ -11409,19 +11409,19 @@ FUN_0203F484: ; 0x0203F484 ldr r5, [r5, #0x0] add r4, r0, #0x0 ldr r0, [r5, #0xc] - bl FUN_02023788 + bl Sav2_SysInfo_get add r7, r0, #0x0 - bl FUN_02023818 + bl Sav2_SysInfo_GetBirthMonth add r6, r0, #0x0 add r0, r5, #0x0 - bl FUN_0204B2B4 + bl Script_GetMonth cmp r6, r0 bne _0203F4CE add r0, r7, #0x0 - bl FUN_0202381C + bl Sav2_SysInfo_GetBirthDay add r6, r0, #0x0 add r0, r5, #0x0 - bl FUN_0204B2C0 + bl Script_GetDay cmp r6, r0 bne _0203F4CE mov r0, #0x1 @@ -12239,7 +12239,7 @@ FUN_0203FB4C: ; 0x0203FB4C add r0, #0x80 ldr r0, [r0, #0x0] ldr r0, [r0, #0xc] - bl FUN_02023788 + bl Sav2_SysInfo_get mov r1, #0x1 bl FUN_02023828 mov r0, #0x0 diff --git a/arm9/asm/unk_02011744.s b/arm9/asm/unk_02011744.s index d8202d2d..0f9f871b 100644 --- a/arm9/asm/unk_02011744.s +++ b/arm9/asm/unk_02011744.s @@ -7,16 +7,23 @@ .global UNK_020ED398 UNK_020ED398: ; 0x020ED398 - .byte 0x08 - - .global UNK_020ED399 -UNK_020ED399: ; 0x020ED399 - .byte 0x08, 0x08, 0x04, 0x04, 0x08, 0x04, 0x04, 0x04, 0x02, 0x04, 0x01, 0x02, 0x04, 0x02, 0x02, 0x02 - .byte 0x01, 0x01, 0x04, 0x01, 0x02, 0x01, 0x01 + .byte 0x08, 0x08 + .byte 0x08, 0x04 + .byte 0x04, 0x08 + .byte 0x04, 0x04 + .byte 0x04, 0x02 + .byte 0x04, 0x01 + .byte 0x02, 0x04 + .byte 0x02, 0x02 + .byte 0x02, 0x01 + .byte 0x01, 0x04 + .byte 0x01, 0x02 + .byte 0x01, 0x01 .global UNK_020ED3B0 UNK_020ED3B0: ; 0x020ED3B0 - .byte 0x47, 0x01, 0x00, 0x00, 0xEF, 0x01, 0x00, 0x00 + .word 0x00000147 + .word 0x000001EF .global UNK_020ED3B8 UNK_020ED3B8: ; 0x020ED3B8 @@ -44,37 +51,49 @@ UNK_020ED438: ; 0x020ED438 .byte 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 .byte 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00 - .global UNK_020ED498 -UNK_020ED498: ; 0x020ED498 - .byte 0x17, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00 - - .global UNK_020ED4A4 -UNK_020ED4A4: ; 0x020ED4A4 - .byte 0x63, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00 - - .global UNK_020ED4B2 -UNK_020ED4B2: ; 0x020ED4B2 - .byte 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x3B, 0x00, 0x5A, 0x00, 0x78, 0x00, 0x97, 0x00, 0xB5, 0x00 - .byte 0xD4, 0x00, 0xF3, 0x00, 0x11, 0x01, 0x30, 0x01, 0x4E, 0x01 - - .global UNK_020ED4CC -UNK_020ED4CC: ; 0x020ED4CC - .byte 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 - .byte 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03 + .global sMaxTime +sMaxTime: ; 0x020ED498 + ; 23:59:59 + .word 23, 59, 59 + + .global sMaxDate +sMaxDate: ; 0x020ED4A4 + ; 31 December, 2099 + .word 99, 12, 31, 0 + + .global sGF_DaysPerMonth +sGF_DaysPerMonth: ; 0x020ED4B2 + .short 0 + .short 31 + .short 59 + .short 90 + .short 120 + .short 151 + .short 181 + .short 212 + .short 243 + .short 273 + .short 304 + .short 334 + + .global sTimeOfDayByHour +sTimeOfDayByHour: ; 0x020ED4CC + ; 00:00 - 03:59 + .byte 0x04, 0x04, 0x04, 0x04 + ; 04:00 - 09:59 + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ; 10:00 - 16:59 + .byte 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 + ; 17:00 - 19:59 + .byte 0x02, 0x02, 0x02 + ; 20:00 - 23:59 + .byte 0x03, 0x03, 0x03, 0x03 .section .bss - .global UNK_021C4808 -UNK_021C4808: ; 0x021C4808 - .space 0x10 - - .global UNK_021C4818 -UNK_021C4818: ; 0x021C4818 - .space 0x10 - - .global UNK_021C4828 -UNK_021C4828: ; 0x021C4828 - .space 0x28 + .global sGFRTCWork +sGFRTCWork: ; 0x021C4808 + .space 0x48 .text @@ -748,7 +767,7 @@ FUN_02011BF4: ; 0x02011BF4 ldr r1, _02011C9C ; =UNK_020ED398 str r0, [r4, #0x0] ldr r0, [r5, #0x0] - ldr r6, _02011CA0 ; =UNK_020ED399 + ldr r6, _02011CA0 ; =UNK_020ED398 + 1 str r0, [r4, #0x4] ldr r0, [r4, #0x8] ldr r2, [r5, #0x8] @@ -787,7 +806,7 @@ _02011C5C: ldr r0, [r4, #0x8] ldr r2, [r5, #0x0] lsl r1, r0, #0x1 - ldr r0, _02011CA0 ; =UNK_020ED399 + ldr r0, _02011CA0 ; =UNK_020ED398 + 1 ldrb r0, [r0, r1] add r0, r2, r0 str r0, [r5, #0x0] @@ -818,7 +837,7 @@ _02011C96: pop {r4-r6, pc} nop _02011C9C: .word UNK_020ED398 -_02011CA0: .word UNK_020ED399 +_02011CA0: .word UNK_020ED398 + 1 thumb_func_start FUN_02011CA4 FUN_02011CA4: ; 0x02011CA4 @@ -963,7 +982,7 @@ FUN_02011DA0: ; 0x02011DA0 ldr r0, _02011E44 ; =UNK_020ED398 ldrb r0, [r0, r1] str r0, [sp, #0x10] - ldr r0, _02011E48 ; =UNK_020ED399 + ldr r0, _02011E48 ; =UNK_020ED398 + 1 ldrb r0, [r0, r1] ldr r1, [sp, #0x10] add r4, r1, #0x0 @@ -1034,7 +1053,7 @@ _02011E1A: pop {r4-r7, pc} .balign 4 _02011E44: .word UNK_020ED398 -_02011E48: .word UNK_020ED399 +_02011E48: .word UNK_020ED398 + 1 _02011E4C: .word 0x04001000 _02011E50: .word 0x00300010 _02011E54: .word 0x0000FFFF @@ -2028,11 +2047,11 @@ FUN_02012560: ; 0x02012560 .balign 4 _02012598: .word UNK_020ED3C8 - thumb_func_start FUN_0201259C -FUN_0201259C: ; 0x0201259C + thumb_func_start GF_InitRTCWork +GF_InitRTCWork: ; 0x0201259C push {r3, lr} bl RTC_Init - ldr r3, _020125CC ; =UNK_021C4808 + ldr r3, _020125CC ; =sGFRTCWork mov r0, #0x0 add r2, r3, #0x0 add r1, r0, #0x0 @@ -2045,21 +2064,21 @@ FUN_0201259C: ; 0x0201259C stmia r2!, {r0-r1} stmia r2!, {r0-r1} stmia r2!, {r0-r1} - ldr r1, _020125D0 ; =UNK_021C4808 + ldr r1, _020125D0 ; =sGFRTCWork str r0, [r1, #0x0] str r0, [r1, #0x4] str r0, [r1, #0x8] add r0, r3, #0x0 - bl FUN_02012634 + bl GF_RTC_GetDateTime pop {r3, pc} .balign 4 -_020125CC: .word UNK_021C4808 -_020125D0: .word UNK_021C4808 +_020125CC: .word sGFRTCWork +_020125D0: .word sGFRTCWork - thumb_func_start FUN_020125D4 -FUN_020125D4: ; 0x020125D4 + thumb_func_start GF_RTC_UpdateOnFrame +GF_RTC_UpdateOnFrame: ; 0x020125D4 push {r3, lr} - ldr r0, _020125F4 ; =UNK_021C4808 + ldr r0, _020125F4 ; =sGFRTCWork ldr r1, [r0, #0x4] cmp r1, #0x0 bne _020125F2 @@ -2070,16 +2089,16 @@ FUN_020125D4: ; 0x020125D4 ble _020125F2 mov r1, #0x0 str r1, [r0, #0x8] - ldr r0, _020125F8 ; =UNK_021C4808 - bl FUN_02012634 + ldr r0, _020125F8 ; =sGFRTCWork + bl GF_RTC_GetDateTime _020125F2: pop {r3, pc} .balign 4 -_020125F4: .word UNK_021C4808 -_020125F8: .word UNK_021C4808 +_020125F4: .word sGFRTCWork +_020125F8: .word sGFRTCWork - thumb_func_start FUN_020125FC -FUN_020125FC: ; 0x020125FC + thumb_func_start GF_RTC_GetDateTime_Callback +GF_RTC_GetDateTime_Callback: ; 0x020125FC push {r4, lr} add r4, r1, #0x0 str r0, [r4, #0xc] @@ -2109,15 +2128,15 @@ _0201260A: str r0, [r4, #0x4] pop {r4, pc} - thumb_func_start FUN_02012634 -FUN_02012634: ; 0x02012634 + thumb_func_start GF_RTC_GetDateTime +GF_RTC_GetDateTime: ; 0x02012634 push {r4, lr} add r4, r0, #0x0 mov r0, #0x1 str r0, [r4, #0x4] add r0, r4, #0x0 add r1, r4, #0x0 - ldr r2, _02012658 ; =FUN_020125FC + ldr r2, _02012658 ; =GF_RTC_GetDateTime_Callback add r0, #0x2c add r1, #0x3c add r3, r4, #0x0 @@ -2129,24 +2148,24 @@ FUN_02012634: ; 0x02012634 _02012656: pop {r4, pc} .balign 4 -_02012658: .word FUN_020125FC +_02012658: .word GF_RTC_GetDateTime_Callback - thumb_func_start FUN_0201265C -FUN_0201265C: ; 0x0201265C + thumb_func_start GF_RTC_CopyDateTime +GF_RTC_CopyDateTime: ; 0x0201265C push {r3-r5, lr} add r5, r0, #0x0 - ldr r0, _02012684 ; =UNK_021C4808 + ldr r0, _02012684 ; =sGFRTCWork add r4, r1, #0x0 ldr r0, [r0, #0x0] cmp r0, #0x1 beq _0201266E bl ErrorHandling _0201266E: - ldr r2, _02012688 ; =UNK_021C4818 + ldr r2, _02012688 ; =sGFRTCWork + 16 ldmia r2!, {r0-r1} stmia r5!, {r0-r1} ldmia r2!, {r0-r1} - ldr r2, _0201268C ; =UNK_021C4828 + ldr r2, _0201268C ; =sGFRTCWork + 32 stmia r5!, {r0-r1} ldmia r2!, {r0-r1} stmia r4!, {r0-r1} @@ -2154,54 +2173,54 @@ _0201266E: str r0, [r4, #0x0] pop {r3-r5, pc} .balign 4 -_02012684: .word UNK_021C4808 -_02012688: .word UNK_021C4818 -_0201268C: .word UNK_021C4828 +_02012684: .word sGFRTCWork +_02012688: .word sGFRTCWork + 16 +_0201268C: .word sGFRTCWork + 32 - thumb_func_start FUN_02012690 -FUN_02012690: ; 0x02012690 + thumb_func_start GF_RTC_CopyTime +GF_RTC_CopyTime: ; 0x02012690 push {r4, lr} add r4, r0, #0x0 - ldr r0, _020126AC ; =UNK_021C4808 + ldr r0, _020126AC ; =sGFRTCWork ldr r0, [r0, #0x0] cmp r0, #0x1 beq _020126A0 bl ErrorHandling _020126A0: - ldr r2, _020126B0 ; =UNK_021C4828 + ldr r2, _020126B0 ; =sGFRTCWork + 32 ldmia r2!, {r0-r1} stmia r4!, {r0-r1} ldr r0, [r2, #0x0] str r0, [r4, #0x0] pop {r4, pc} .balign 4 -_020126AC: .word UNK_021C4808 -_020126B0: .word UNK_021C4828 +_020126AC: .word sGFRTCWork +_020126B0: .word sGFRTCWork + 32 - thumb_func_start FUN_020126B4 -FUN_020126B4: ; 0x020126B4 + thumb_func_start GF_RTC_CopyDate +GF_RTC_CopyDate: ; 0x020126B4 push {r4, lr} add r4, r0, #0x0 - ldr r0, _020126D0 ; =UNK_021C4808 + ldr r0, _020126D0 ; =sGFRTCWork ldr r0, [r0, #0x0] cmp r0, #0x1 beq _020126C4 bl ErrorHandling _020126C4: - ldr r2, _020126D4 ; =UNK_021C4818 + ldr r2, _020126D4 ; =sGFRTCWork + 16 ldmia r2!, {r0-r1} stmia r4!, {r0-r1} ldmia r2!, {r0-r1} stmia r4!, {r0-r1} pop {r4, pc} .balign 4 -_020126D0: .word UNK_021C4808 -_020126D4: .word UNK_021C4818 +_020126D0: .word sGFRTCWork +_020126D4: .word sGFRTCWork + 16 - thumb_func_start FUN_020126D8 -FUN_020126D8: ; 0x020126D8 + thumb_func_start GF_RTC_TimeToSec +GF_RTC_TimeToSec: ; 0x020126D8 push {r3-r4} - ldr r4, _020126F8 ; =UNK_021C4828 + ldr r4, _020126F8 ; =sGFRTCWork + 32 mov r0, #0x3c ldr r1, [r4, #0x4] ldr r3, [r4, #0x8] @@ -2216,18 +2235,18 @@ FUN_020126D8: ; 0x020126D8 pop {r3-r4} bx lr nop -_020126F8: .word UNK_021C4828 +_020126F8: .word sGFRTCWork + 32 - thumb_func_start FUN_020126FC -FUN_020126FC: ; 0x020126FC + thumb_func_start GF_RTC_DateTimeToSec +GF_RTC_DateTimeToSec: ; 0x020126FC ldr r3, _02012704 ; =RTC_ConvertDateTimeToSecond - ldr r0, _02012708 ; =UNK_021C4818 - ldr r1, _0201270C ; =UNK_021C4828 + ldr r0, _02012708 ; =sGFRTCWork + 16 + ldr r1, _0201270C ; =sGFRTCWork + 32 bx r3 .balign 4 _02012704: .word RTC_ConvertDateTimeToSecond -_02012708: .word UNK_021C4818 -_0201270C: .word UNK_021C4828 +_02012708: .word sGFRTCWork + 16 +_0201270C: .word sGFRTCWork + 32 thumb_func_start FUN_02012710 FUN_02012710: ; 0x02012710 @@ -2235,7 +2254,7 @@ FUN_02012710: ; 0x02012710 sub sp, #0x10 add r5, r0, #0x0 ldr r2, [r5, #0x4] - ldr r0, _02012778 ; =UNK_020ED4B2 + ldr r0, _02012778 ; =sGF_DaysPerMonth - 2 lsl r1, r2, #0x1 ldrh r0, [r0, r1] ldr r3, [r5, #0x8] @@ -2283,12 +2302,12 @@ _02012752: add sp, #0x10 pop {r4-r6, pc} .balign 4 -_02012778: .word UNK_020ED4B2 +_02012778: .word sGF_DaysPerMonth - 2 thumb_func_start IsNighttime IsNighttime: ; 0x0201277C push {r3, lr} - bl FUN_02012794 + bl GF_RTC_GetTimeOfDay cmp r0, #0x3 beq _0201278A cmp r0, #0x4 @@ -2301,19 +2320,19 @@ _0201278E: pop {r3, pc} .balign 4 - thumb_func_start FUN_02012794 -FUN_02012794: ; 0x02012794 + thumb_func_start GF_RTC_GetTimeOfDay +GF_RTC_GetTimeOfDay: ; 0x02012794 push {lr} sub sp, #0xc add r0, sp, #0x0 - bl FUN_02012690 + bl GF_RTC_CopyTime ldr r0, [sp, #0x0] - bl FUN_020127A8 + bl GF_RTC_GetTimeOfDayByHour add sp, #0xc pop {pc} - thumb_func_start FUN_020127A8 -FUN_020127A8: ; 0x020127A8 + thumb_func_start GF_RTC_GetTimeOfDayByHour +GF_RTC_GetTimeOfDayByHour: ; 0x020127A8 push {r4, lr} add r4, r0, #0x0 bmi _020127B2 @@ -2322,18 +2341,18 @@ FUN_020127A8: ; 0x020127A8 _020127B2: bl ErrorHandling _020127B6: - ldr r0, _020127BC ; =UNK_020ED4CC + ldr r0, _020127BC ; =sTimeOfDayByHour ldrb r0, [r0, r4] pop {r4, pc} .balign 4 -_020127BC: .word UNK_020ED4CC +_020127BC: .word sTimeOfDayByHour thumb_func_start FUN_020127C0 FUN_020127C0: ; 0x020127C0 push {r4-r7, lr} sub sp, #0x24 add r6, r3, #0x0 - ldr r3, _0201282C ; =UNK_020ED4A4 + ldr r3, _0201282C ; =sMaxDate add r4, r0, #0x0 add r7, r1, #0x0 add r5, r2, #0x0 @@ -2343,7 +2362,7 @@ FUN_020127C0: ; 0x020127C0 stmia r2!, {r0-r1} ldmia r3!, {r0-r1} stmia r2!, {r0-r1} - ldr r3, _02012830 ; =UNK_020ED498 + ldr r3, _02012830 ; =sMaxTime add r2, sp, #0x8 ldmia r3!, {r0-r1} str r2, [sp, #0x4] @@ -2384,8 +2403,8 @@ _02012818: add sp, #0x24 pop {r4-r7, pc} nop -_0201282C: .word UNK_020ED4A4 -_02012830: .word UNK_020ED498 +_0201282C: .word sMaxDate +_02012830: .word sMaxTime _02012834: .word 0xBC19137F thumb_func_start ListMenu_ctor diff --git a/arm9/asm/unk_0202376C.s b/arm9/asm/unk_0202376C.s deleted file mode 100644 index ef333080..00000000 --- a/arm9/asm/unk_0202376C.s +++ /dev/null @@ -1,220 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0202376C -FUN_0202376C: ; 0x0202376C - mov r0, #0x5c - bx lr - - thumb_func_start FUN_02023770 -FUN_02023770: ; 0x02023770 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r4, #0x0 - mov r2, #0x5c - bl MIi_CpuClearFast - add r4, #0x10 - add r0, r4, #0x0 - bl FUN_02023840 - pop {r4, pc} - - thumb_func_start FUN_02023788 -FUN_02023788: ; 0x02023788 - ldr r3, _02023790 ; =SavArray_get - mov r1, #0x0 - bx r3 - nop -_02023790: .word SavArray_get - - thumb_func_start FUN_02023794 -FUN_02023794: ; 0x02023794 - push {r3, lr} - bl FUN_02023788 - add r0, #0x10 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_020237A0 -FUN_020237A0: ; 0x020237A0 - push {r4, lr} - sub sp, #0x50 - add r4, r0, #0x0 - bl OS_GetOwnerRtcOffset - str r0, [r4, #0x0] - add r0, r4, #0x0 - add r0, #0x8 - str r1, [r4, #0x4] - bl OS_GetMacAddress - add r0, sp, #0x0 - bl OS_GetOwnerInfo - add r0, sp, #0x0 - ldrb r1, [r0, #0x2] - strb r1, [r4, #0xe] - ldrb r0, [r0, #0x3] - strb r0, [r4, #0xf] - add sp, #0x50 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020237CC -FUN_020237CC: ; 0x020237CC - push {r4, lr} - sub sp, #0x8 - add r4, r0, #0x0 - add r0, sp, #0x0 - bl OS_GetMacAddress - mov r2, #0x0 - add r3, sp, #0x0 -_020237DC: - add r0, r4, r2 - ldrb r1, [r3, #0x0] - ldrb r0, [r0, #0x8] - cmp r1, r0 - beq _020237EC - add sp, #0x8 - mov r0, #0x0 - pop {r4, pc} -_020237EC: - add r2, r2, #0x1 - add r3, r3, #0x1 - cmp r2, #0x6 - blt _020237DC - mov r0, #0x1 - add sp, #0x8 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_020237FC -FUN_020237FC: ; 0x020237FC - push {r4, lr} - add r4, r0, #0x0 - bl OS_GetOwnerRtcOffset - ldr r3, [r4, #0x0] - ldr r2, [r4, #0x4] - eor r0, r3 - eor r1, r2 - orr r0, r1 - bne _02023814 - mov r0, #0x1 - pop {r4, pc} -_02023814: - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start FUN_02023818 -FUN_02023818: ; 0x02023818 - ldrb r0, [r0, #0xe] - bx lr - - thumb_func_start FUN_0202381C -FUN_0202381C: ; 0x0202381C - ldrb r0, [r0, #0xf] - bx lr - - thumb_func_start FUN_02023820 -FUN_02023820: ; 0x02023820 - add r0, #0x48 - ldrb r0, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02023828 -FUN_02023828: ; 0x02023828 - add r0, #0x48 - strb r1, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02023830 -FUN_02023830: ; 0x02023830 - ldr r0, [r0, #0x4c] - bx lr - - thumb_func_start FUN_02023834 -FUN_02023834: ; 0x02023834 - ldr r2, [r0, #0x4c] - cmp r2, #0x0 - bne _0202383C - str r1, [r0, #0x4c] -_0202383C: - bx lr - .balign 4 - - thumb_func_start FUN_02023840 -FUN_02023840: ; 0x02023840 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x1 - add r1, r4, #0x0 - str r0, [r4, #0x0] - add r0, r4, #0x4 - add r1, #0x14 - bl FUN_0201265C - add r0, r4, #0x4 - bl RTC_ConvertDateToDay - add r1, r4, #0x0 - str r0, [r4, #0x20] - add r0, r4, #0x4 - add r1, #0x14 - bl RTC_ConvertDateTimeToSecond - str r0, [r4, #0x24] - str r1, [r4, #0x28] - mov r0, #0x0 - str r0, [r4, #0x2c] - str r0, [r4, #0x30] - str r0, [r4, #0x34] - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02023874 -FUN_02023874: ; 0x02023874 - ldr r0, [r0, #0x34] - cmp r0, #0x0 - beq _0202387E - mov r0, #0x1 - bx lr -_0202387E: - mov r0, #0x0 - bx lr - .balign 4 - - thumb_func_start FUN_02023884 -FUN_02023884: ; 0x02023884 - mov r2, #0x5a - ldr r3, [r0, #0x34] - lsl r2, r2, #0x4 - cmp r3, r2 - bls _02023890 - str r2, [r0, #0x34] -_02023890: - ldr r2, [r0, #0x34] - cmp r2, r1 - bhs _0202389C - mov r1, #0x0 - str r1, [r0, #0x34] - bx lr -_0202389C: - sub r1, r2, r1 - str r1, [r0, #0x34] - bx lr - .balign 4 - - thumb_func_start FUN_020238A4 -FUN_020238A4: ; 0x020238A4 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x5a - lsl r0, r0, #0x4 - add r1, r4, #0x0 - str r0, [r4, #0x34] - add r0, r4, #0x4 - add r1, #0x14 - bl FUN_0201265C - add r0, r4, #0x4 - bl RTC_ConvertDateToDay - str r0, [r4, #0x20] - pop {r4, pc} - .balign 4 diff --git a/arm9/asm/unk_02025954.s b/arm9/asm/unk_02025954.s index 8495ddab..bb8ebe4f 100644 --- a/arm9/asm/unk_02025954.s +++ b/arm9/asm/unk_02025954.s @@ -60,7 +60,7 @@ FUN_0202597C: ; 0x0202597C add r4, r0, #0x0 add r0, sp, #0xc add r1, sp, #0x0 - bl FUN_0201265C + bl GF_RTC_CopyDateTime ldr r0, _020259D8 ; =gMain ldr r6, [sp, #0xc] ldr r1, [sp, #0x8] diff --git a/arm9/asm/unk_020281E0.s b/arm9/asm/unk_020281E0.s index b0f0a5f2..e1a5729d 100644 --- a/arm9/asm/unk_020281E0.s +++ b/arm9/asm/unk_020281E0.s @@ -560,7 +560,7 @@ FUN_020285D0: ; 0x020285D0 add r5, r0, #0x0 add r4, r1, #0x0 add r0, sp, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate mov r0, #0x30 add r2, r4, #0x0 mul r2, r0 diff --git a/arm9/asm/unk_02028980.s b/arm9/asm/unk_02028980.s index 6c44488d..ad0b1145 100644 --- a/arm9/asm/unk_02028980.s +++ b/arm9/asm/unk_02028980.s @@ -83,7 +83,7 @@ FUN_020289B0: ; 0x020289B0 pop {r3-r7, pc} _020289C0: add r0, sp, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate ldr r0, [r7, #0x0] lsl r1, r0, #0x15 lsr r3, r1, #0x1c @@ -145,7 +145,7 @@ FUN_02028A20: ; 0x02028A20 pop {r4, pc} _02028A30: add r0, sp, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate ldr r0, [r4, #0x0] lsl r0, r0, #0x19 lsr r0, r0, #0x19 @@ -942,7 +942,7 @@ FUN_02028FA4: ; 0x02028FA4 bl AllocFromHeap add r4, r0, #0x0 add r0, sp, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate ldr r2, [r4, #0x0] mov r0, #0x7f bic r2, r0 diff --git a/arm9/asm/unk_02029FB0.s b/arm9/asm/unk_02029FB0.s index c6053422..da0a42d2 100644 --- a/arm9/asm/unk_02029FB0.s +++ b/arm9/asm/unk_02029FB0.s @@ -5,11 +5,11 @@ .global UNK_020EEA7C UNK_020EEA7C: ; 0x020EEA7C - .byte 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00 - .byte 0x02, 0x00, 0x02, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00 - .byte 0x0A, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x0B, 0x00, 0x14, 0x00, 0x1E, 0x00 - .byte 0x23, 0x00, 0x28, 0x00, 0xF4, 0x01, 0x10, 0x27, 0x1E, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x05, 0x00 - .byte 0x01, 0x00, 0x01, 0x00, 0x05, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00 + .short 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0002 + .short 0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0007, 0x0007, 0x0007 + .short 0x000A, 0x000A, 0x000B, 0x000B, 0x000B, 0x000B, 0x0014, 0x001E + .short 0x0023, 0x0028, 0x01F4, 0x2710, 0x001E, 0x001E, 0x0002, 0x0005 + .short 0x0001, 0x0001, 0x0005, 0x0003, 0x0001, 0x0001 .section .data diff --git a/arm9/asm/unk_0202B374.s b/arm9/asm/unk_0202B374.s index 3a911598..67c01b0a 100644 --- a/arm9/asm/unk_0202B374.s +++ b/arm9/asm/unk_0202B374.s @@ -170,7 +170,7 @@ FUN_0202B470: ; 0x0202B470 add r0, sp, #0x0 add r4, r1, #0x0 add r6, r2, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate ldr r0, [sp, #0x8] ldr r3, [sp, #0x4] lsl r0, r0, #0x18 diff --git a/arm9/asm/unk_0202BE98.s b/arm9/asm/unk_0202BE98.s index 8e7a28c2..2b1b2f16 100644 --- a/arm9/asm/unk_0202BE98.s +++ b/arm9/asm/unk_0202BE98.s @@ -149,7 +149,7 @@ FUN_0202BF90: ; 0x0202BF90 add r1, r5, r0 ldr r0, _0202BFCC ; =0x00000588 str r4, [r1, r0] - bl FUN_020126FC + bl GF_RTC_DateTimeToSec lsl r2, r6, #0x3 add r3, r5, r2 ldr r2, _0202BFD0 ; =0x000005D8 @@ -223,7 +223,7 @@ FUN_0202C028: ; 0x0202C028 push {r4-r6, lr} add r5, r0, #0x0 add r4, r1, #0x0 - bl FUN_020126FC + bl GF_RTC_DateTimeToSec ldr r1, _0202C058 ; =0x00000588 mov r3, #0x0 add r6, r5, #0x0 diff --git a/arm9/asm/unk_0202F150.s b/arm9/asm/unk_0202F150.s index 22bf52e9..a4efe28d 100644 --- a/arm9/asm/unk_0202F150.s +++ b/arm9/asm/unk_0202F150.s @@ -4278,7 +4278,7 @@ FUN_020312BC: ; 0x020312BC add r4, r0, #0x0 add r0, sp, #0x10 add r1, sp, #0x4 - bl FUN_0201265C + bl GF_RTC_CopyDateTime ldr r0, _02031340 ; =gMain ldr r6, [sp, #0x10] mov r5, #0x0 diff --git a/arm9/asm/unk_02034FE4.s b/arm9/asm/unk_02034FE4.s index 56a67b6f..2d66b396 100644 --- a/arm9/asm/unk_02034FE4.s +++ b/arm9/asm/unk_02034FE4.s @@ -133,7 +133,7 @@ FUN_02034FE4: ; 0x02034FE4 cmp r4, #0x18 blt _0203505C ldr r0, [r7, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get add r6, r0, #0x0 add r0, r6, #0x4 bl FUN_02012710 diff --git a/arm9/asm/unk_02035068.s b/arm9/asm/unk_02035068.s index da71c049..9e1896cf 100644 --- a/arm9/asm/unk_02035068.s +++ b/arm9/asm/unk_02035068.s @@ -1677,7 +1677,7 @@ FUN_02035D34: ; 0x02035D34 ldr r0, [sp, #0x4] str r0, [r4, #0x4] add r0, r5, #0x0 - bl FUN_0204B2A4 + bl Script_GetTimeOfDay str r0, [r4, #0x8] add r0, r7, #0x0 mov r1, #0x0 diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s index 26f6442d..730ffea9 100644 --- a/arm9/asm/unk_020377F0.s +++ b/arm9/asm/unk_020377F0.s @@ -1572,7 +1572,7 @@ _02038288: mov r0, #0x1 str r0, [r4, #0x58] add r0, r5, #0x0 - bl FUN_0204B2A4 + bl Script_GetTimeOfDay cmp r0, #0x4 bhi _020382C8 add r0, r0, r0 @@ -2120,7 +2120,7 @@ FUN_020386E0: ; 0x020386E0 bl FUN_0202ABBC str r0, [r4, #0x0] ldr r0, [r5, #0xc] - bl FUN_02023788 + bl Sav2_SysInfo_get str r0, [r4, #0x4] ldr r0, [r5, #0xc] mov r1, #0x2 @@ -2199,7 +2199,7 @@ FUN_02038790: ; 0x02038790 bl FUN_0202A8E4 str r0, [r4, #0x4] ldr r0, [r5, #0xc] - bl FUN_02023788 + bl Sav2_SysInfo_get str r0, [r4, #0x8] ldr r0, [r5, #0xc] bl Sav2_PlayerData_GetOptionsAddr @@ -2407,7 +2407,7 @@ _02038956: ldr r0, [r4, #0xc] bl Sav2_PlayerData_GetCoinsAddr str r0, [sp, #0x0] - bl FUN_020126FC + bl GF_RTC_DateTimeToSec str r0, [sp, #0x4] ldr r0, [sp, #0x0] add r6, r1, #0x0 @@ -2469,7 +2469,7 @@ FUN_020389CC: ; 0x020389CC bl Sav2_PlayerData_GetCoinsAddr bl CheckCoins str r0, [r4, #0x0] - bl FUN_020126FC + bl GF_RTC_DateTimeToSec str r0, [r4, #0x4] str r1, [r4, #0x8] ldr r0, [r5, #0xc] diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s index 2d2d2b2d..dc4d1c28 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -239,7 +239,7 @@ FUN_02047814: ; 0x02047814 ldr r1, [r4, r1] bl FUN_02024F44 add r0, r5, #0x0 - bl FUN_0204B2A4 + bl Script_GetTimeOfDay mov r1, #0x16 lsl r1, r1, #0x4 str r0, [r4, r1] @@ -530,7 +530,7 @@ FUN_02047A78: ; 0x02047A78 lsl r1, r1, #0x2 str r0, [r5, r1] add r0, r4, #0x0 - bl FUN_0204B2A4 + bl Script_GetTimeOfDay mov r1, #0x16 lsl r1, r1, #0x4 str r0, [r5, r1] @@ -724,7 +724,7 @@ _02047C98: lsl r1, r1, #0x2 str r0, [r6, r1] ldr r0, [sp, #0x0] - bl FUN_0204B2A4 + bl Script_GetTimeOfDay mov r1, #0x16 lsl r1, r1, #0x4 str r0, [r6, r1] @@ -908,7 +908,7 @@ _02047E2C: lsl r1, r1, #0x2 str r0, [r5, r1] ldr r0, [sp, #0x0] - bl FUN_0204B2A4 + bl Script_GetTimeOfDay mov r1, #0x16 lsl r1, r1, #0x4 str r0, [r5, r1] diff --git a/arm9/asm/unk_020484A8.s b/arm9/asm/unk_020484A8.s index db9ea9af..a50964b1 100644 --- a/arm9/asm/unk_020484A8.s +++ b/arm9/asm/unk_020484A8.s @@ -44,7 +44,7 @@ _020484CC: bl SavArray_PlayerParty_get add r6, r0, #0x0 add r0, sp, #0x4 - bl FUN_020126B4 + bl GF_RTC_CopyDate add r0, r4, #0x0 add r1, r6, #0x0 add r2, sp, #0x4 @@ -305,7 +305,7 @@ FUN_02048694: ; 0x02048694 cmp r0, #0x0 bne _0204871E add r0, r4, #0x0 - bl FUN_0204B328 + bl Script_SavRTC_DateTimeTox2C _0204871E: ldr r0, [r4, #0xc] bl SavArray_PlayerParty_get diff --git a/arm9/asm/unk_0204B0A0.s b/arm9/asm/unk_0204B0A0.s index 4b658c2b..f2e46ab6 100644 --- a/arm9/asm/unk_0204B0A0.s +++ b/arm9/asm/unk_0204B0A0.s @@ -9,14 +9,14 @@ FUN_0204B0F8: ; 0x0204B0F8 sub sp, #0x1c add r5, r0, #0x0 ldr r0, [r5, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get add r4, r0, #0x0 ldr r0, [r4, #0x0] cmp r0, #0x0 beq _0204B12A add r0, sp, #0xc add r1, sp, #0x0 - bl FUN_0201265C + bl GF_RTC_CopyDateTime add r0, r5, #0x0 add r1, r4, #0x0 add r2, sp, #0xc @@ -202,62 +202,62 @@ FUN_0204B270: ; 0x0204B270 bl FUN_0202B3C4 pop {r4-r6, pc} - thumb_func_start FUN_0204B2A4 -FUN_0204B2A4: ; 0x0204B2A4 + thumb_func_start Script_GetTimeOfDay +Script_GetTimeOfDay: ; 0x0204B2A4 push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get ldr r0, [r0, #0x14] - bl FUN_020127A8 + bl GF_RTC_GetTimeOfDayByHour pop {r3, pc} - thumb_func_start FUN_0204B2B4 -FUN_0204B2B4: ; 0x0204B2B4 + thumb_func_start Script_GetMonth +Script_GetMonth: ; 0x0204B2B4 push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get ldr r0, [r0, #0x8] pop {r3, pc} - thumb_func_start FUN_0204B2C0 -FUN_0204B2C0: ; 0x0204B2C0 + thumb_func_start Script_GetDay +Script_GetDay: ; 0x0204B2C0 push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get ldr r0, [r0, #0xc] pop {r3, pc} - thumb_func_start FUN_0204B2CC -FUN_0204B2CC: ; 0x0204B2CC + thumb_func_start Script_GetWeekday +Script_GetWeekday: ; 0x0204B2CC push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get ldr r0, [r0, #0x10] pop {r3, pc} - thumb_func_start FUN_0204B2D8 -FUN_0204B2D8: ; 0x0204B2D8 + thumb_func_start Script_GetHour +Script_GetHour: ; 0x0204B2D8 push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get ldr r0, [r0, #0x14] pop {r3, pc} - thumb_func_start FUN_0204B2E4 -FUN_0204B2E4: ; 0x0204B2E4 + thumb_func_start Script_GetMinute +Script_GetMinute: ; 0x0204B2E4 push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get ldr r0, [r0, #0x18] pop {r3, pc} - thumb_func_start FUN_0204B2F0 -FUN_0204B2F0: ; 0x0204B2F0 + thumb_func_start Script_SavRTC_x24toDateTime +Script_SavRTC_x24toDateTime: ; 0x0204B2F0 push {r3-r5, lr} ldr r0, [r0, #0xc] add r5, r1, #0x0 add r4, r2, #0x0 - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get add r3, r0, #0x0 ldr r2, [r3, #0x24] ldr r3, [r3, #0x28] @@ -266,13 +266,13 @@ FUN_0204B2F0: ; 0x0204B2F0 bl RTC_ConvertSecondToDateTime pop {r3-r5, pc} - thumb_func_start FUN_0204B30C -FUN_0204B30C: ; 0x0204B30C + thumb_func_start Script_SavRTC_x2CtoDateTime +Script_SavRTC_x2CtoDateTime: ; 0x0204B30C push {r3-r5, lr} ldr r0, [r0, #0xc] add r5, r1, #0x0 add r4, r2, #0x0 - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get add r3, r0, #0x0 ldr r2, [r3, #0x2c] ldr r3, [r3, #0x30] @@ -281,13 +281,13 @@ FUN_0204B30C: ; 0x0204B30C bl RTC_ConvertSecondToDateTime pop {r3-r5, pc} - thumb_func_start FUN_0204B328 -FUN_0204B328: ; 0x0204B328 + thumb_func_start Script_SavRTC_DateTimeTox2C +Script_SavRTC_DateTimeTox2C: ; 0x0204B328 push {r4, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get add r4, r0, #0x0 - bl FUN_020126FC + bl GF_RTC_DateTimeToSec str r0, [r4, #0x2c] str r1, [r4, #0x30] pop {r4, pc} @@ -296,7 +296,7 @@ FUN_0204B328: ; 0x0204B328 FUN_0204B33C: ; 0x0204B33C push {r3, lr} ldr r0, [r0, #0xc] - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get bl FUN_02023874 pop {r3, pc} .balign 4 diff --git a/arm9/asm/unk_0204B9EC.s b/arm9/asm/unk_0204B9EC.s index e781dc81..04b6134b 100644 --- a/arm9/asm/unk_0204B9EC.s +++ b/arm9/asm/unk_0204B9EC.s @@ -22,7 +22,7 @@ FUN_0204B9EC: ; 0x0204B9EC bl FUN_0204BB20 ldr r0, _0204BA14 ; =UNK_021C5A1C bl FUN_0204BBC4 - bl FUN_020126FC + bl GF_RTC_DateTimeToSec ldr r2, _0204BA18 ; =UNK_021C5A1C str r0, [r2, #0x40] str r1, [r2, #0x44] @@ -38,7 +38,7 @@ FUN_0204BA1C: ; 0x0204BA1C ldr r4, _0204BA60 ; =UNK_021C5A1C bl FUN_02029FC8 add r5, r0, #0x0 - bl FUN_020126FC + bl GF_RTC_DateTimeToSec add r3, r1, #0x0 ldr r1, _0204BA64 ; =UNK_021C5A1C add r2, r0, #0x0 diff --git a/arm9/asm/unk_02064E90.s b/arm9/asm/unk_02064E90.s index 319e816e..27f1c143 100644 --- a/arm9/asm/unk_02064E90.s +++ b/arm9/asm/unk_02064E90.s @@ -76,11 +76,11 @@ FUN_02064E90: ; 0x02064E90 add r0, r6, #0x0 add r1, sp, #0x90 add r2, sp, #0x74 - bl FUN_0204B2F0 + bl Script_SavRTC_x24toDateTime add r0, r6, #0x0 add r1, sp, #0x80 add r2, sp, #0x74 - bl FUN_0204B30C + bl Script_SavRTC_x2CtoDateTime ldr r0, [r6, #0xc] bl SavArray_Flags_get bl FUN_0205ED0C diff --git a/arm9/asm/unk_0207FD00.s b/arm9/asm/unk_0207FD00.s index 38a42358..294b8bfc 100644 --- a/arm9/asm/unk_0207FD00.s +++ b/arm9/asm/unk_0207FD00.s @@ -1745,7 +1745,7 @@ FUN_02080B30: ; 0x02080B30 add r5, r0, #0x0 add r0, sp, #0x0 add r4, r2, #0x0 - bl FUN_020126B4 + bl GF_RTC_CopyDate cmp r4, #0x0 add r2, sp, #0x24 bne _02080B76 diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s index b41f5319..ed311aef 100644 --- a/arm9/asm/unk_02080C38.s +++ b/arm9/asm/unk_02080C38.s @@ -3764,7 +3764,7 @@ _02082858: .word 0x00000127 thumb_func_start FUN_0208285C FUN_0208285C: ; 0x0208285C push {r4, lr} - bl FUN_020126D8 + bl GF_RTC_TimeToSec add r4, r0, #0x0 bl GetLCRNGSeed add r0, #0xa diff --git a/arm9/global.inc b/arm9/global.inc index 64c64dc1..29501049 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -798,17 +798,17 @@ .extern FUN_020124B4 .extern FUN_02012530 .extern FUN_02012560 -.extern FUN_0201259C -.extern FUN_020125D4 -.extern FUN_0201265C -.extern FUN_02012690 -.extern FUN_020126B4 -.extern FUN_020126D8 -.extern FUN_020126FC +.extern GF_InitRTCWork +.extern GF_RTC_UpdateOnFrame +.extern GF_RTC_CopyDateTime +.extern GF_RTC_CopyTime +.extern GF_RTC_CopyDate +.extern GF_RTC_TimeToSec +.extern GF_RTC_DateTimeToSec .extern FUN_02012710 .extern IsNighttime -.extern FUN_02012794 -.extern FUN_020127A8 +.extern GF_RTC_GetTimeOfDay +.extern GF_RTC_GetTimeOfDayByHour .extern FUN_020127C0 .extern ListMenu_ctor .extern ListMenu_dtor @@ -1453,20 +1453,20 @@ .extern FUN_0202287C .extern WriteSaveFileToFlash .extern ReadSaveFileFromFlash -.extern FUN_0202376C -.extern FUN_02023770 -.extern FUN_02023788 -.extern FUN_02023794 -.extern FUN_020237A0 -.extern FUN_020237CC -.extern FUN_020237FC -.extern FUN_02023818 -.extern FUN_0202381C +.extern Sav2_SysInfo_sizeof +.extern Sav2_SysInfo_init +.extern Sav2_SysInfo_get +.extern Sav2_SysInfo_RTC_get +.extern Sav2_SysInfo_InitFromSystem +.extern Sav2_SysInfo_MacAddressIsMine +.extern Sav2_SysInfo_RTCOffsetIsMine +.extern Sav2_SysInfo_GetBirthMonth +.extern Sav2_SysInfo_GetBirthDay .extern FUN_02023820 .extern FUN_02023828 .extern FUN_02023830 .extern FUN_02023834 -.extern FUN_02023840 +.extern Sav2_SysInfo_RTC_init .extern FUN_02023874 .extern FUN_02023884 .extern FUN_020238A4 @@ -3547,15 +3547,15 @@ .extern FUN_0204B090 .extern FUN_0204B0E8 .extern FUN_0204B0F8 -.extern FUN_0204B2A4 -.extern FUN_0204B2B4 -.extern FUN_0204B2C0 -.extern FUN_0204B2CC -.extern FUN_0204B2D8 -.extern FUN_0204B2E4 -.extern FUN_0204B2F0 -.extern FUN_0204B30C -.extern FUN_0204B328 +.extern Script_GetTimeOfDay +.extern Script_GetMonth +.extern Script_GetDay +.extern Script_GetWeekday +.extern Script_GetHour +.extern Script_GetMinute +.extern Script_SavRTC_x24toDateTime +.extern Script_SavRTC_x2CtoDateTime +.extern Script_SavRTC_DateTimeTox2C .extern FUN_0204B33C .extern FUN_0204B388 .extern FUN_0204B3B8 diff --git a/arm9/lib/include/RTC_api.h b/arm9/lib/include/RTC_api.h new file mode 100644 index 00000000..d2577cdf --- /dev/null +++ b/arm9/lib/include/RTC_api.h @@ -0,0 +1,34 @@ +#ifndef NITRO_RTC_API_H_ +#define NITRO_RTC_API_H_ + +typedef enum RTCWeek +{ + RTC_WEEK_SUNDAY = 0, + RTC_WEEK_MONDAY, + RTC_WEEK_TUESDAY, + RTC_WEEK_WEDNESDAY, + RTC_WEEK_THURSDAY, + RTC_WEEK_FRIDAY, + RTC_WEEK_SATURDAY, + RTC_WEEK_MAX +} + RTCWeek; + +typedef struct RTCDate +{ + u32 year; + u32 month; + u32 day; + RTCWeek week; +} + RTCDate; + +typedef struct RTCTime +{ + u32 hour; + u32 minute; + u32 second; +} + RTCTime; + +#endif //NITRO_RTC_API_H_ diff --git a/arm9/lib/include/RTC_convert.h b/arm9/lib/include/RTC_convert.h new file mode 100644 index 00000000..a75928b9 --- /dev/null +++ b/arm9/lib/include/RTC_convert.h @@ -0,0 +1,12 @@ +#ifndef NITRO_RTC_CONVERT_H_ +#define NITRO_RTC_CONVERT_H_ + +s32 RTC_ConvertDateToDay(const RTCDate * date); +s32 RTCi_ConvertTimeToSecond(const RTCTime * time); +s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time); +void RTC_ConvertDayToDate(RTCDate * date, s32 day); +void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec); +void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec); +RTCWeek RTC_GetDayOfWeek(RTCDate * date); + +#endif //NITRO_RTC_CONVERT_H_ diff --git a/arm9/lib/src/RTC_convert.c b/arm9/lib/src/RTC_convert.c new file mode 100644 index 00000000..af5574dc --- /dev/null +++ b/arm9/lib/src/RTC_convert.c @@ -0,0 +1,164 @@ +#include "global.h" +#include "RTC_api.h" +#include "RTC_convert.h" + +static s32 sDayOfYear[12] = { + 0, // Jan + 31, // Feb + 59, // Mar + 90, // Apr + 120, // May + 151, // Jun + 181, // Jul + 212, // Aug + 243, // Sep + 273, // Oct + 304, // Nov + 334, // Dec +}; + +static inline BOOL RTCi_IsLeapYear(u32 year) +{ + return !((year & 0x03)); +} + +s32 RTC_ConvertDateToDay(const RTCDate * date) +{ + if (date->year >= 100 + || date->month < 1 + || date->month > 12 + || date->day < 1 + || date->day > 31 + || date->week >= RTC_WEEK_MAX + || date->month < 1 // can't be + || date->month > 12 // too sure + ) + return -1; + s32 dayNum = (s32)(date->day - 1); + dayNum += sDayOfYear[date->month - 1]; + if (date->month >= 3 && RTCi_IsLeapYear(date->year)) + dayNum++; + dayNum += date->year * 365; + dayNum += (date->year + 3) / 4; + return dayNum; +} + +s32 RTCi_ConvertTimeToSecond(const RTCTime * time) +{ + return (time->hour * 60 + time->minute) * 60 + time->second; +} + +s64 RTC_ConvertDateTimeToSecond(const RTCDate * date, const RTCTime * time) +{ + s32 day = RTC_ConvertDateToDay(date); + if (day == -1) + return -1; + s32 second = RTCi_ConvertTimeToSecond(time); + if (second == -1) + return -1; + return ((s64)day) * (60 * 60 * 24) + second; +} + +void RTC_ConvertDayToDate(RTCDate * date, s32 day) +{ + u32 year; + s32 month; + + if (day < 0) + { + day = 0; + } + if (day > 36524) // max number of days that can be recorded + { + day = 36524; + } + date->week = (RTCWeek)((day + 6) % 7); + for (year = 0; year < 99; year++) + { + s32 prev = day; + day -= (RTCi_IsLeapYear(year)) ? 366 : 365; + if (day < 0) + { + day = prev; + break; + } + } + if (day > 365) + { + day = 365; + } + date->year = year; + if (RTCi_IsLeapYear(year)) + { + if (day < 31 + 29) + { + if (day < 31) + { + month = 1; + } + else + { + month = 2; + day -= 31; + } + date->month = (u32)month; + date->day = (u32)(day + 1); + return; + } + else + { + day--; + } + } + for (month = 11; month >= 0; month--) + { + if (day >= sDayOfYear[month]) + { + date->month = (u32)(month + 1); + date->day = (u32)(day - sDayOfYear[month] + 1); + return; + } + } + // Internal Error. +} + +void RTCi_ConvertSecondToTime(RTCTime * time, s32 sec) +{ + if (sec < 0) + sec = 0; + if (sec > 86399) + sec = 86399; + time->second = (u32)(sec % 60); + sec /= 60; + time->minute = (u32)(sec % 60); + sec /= 60; + time->hour = (u32)sec; +} + +void RTC_ConvertSecondToDateTime(RTCDate * date, RTCTime * time, s64 sec) +{ + if (sec < 0) + sec = 0; + else if (sec > 3155759999) + sec = 3155759999; + RTCi_ConvertSecondToTime(time, (s32)(sec % 86400)); + RTC_ConvertDayToDate(date, (s32)(sec / 86400)); +} + +RTCWeek RTC_GetDayOfWeek(RTCDate * date) +{ + int cent; + int year = (int)(2000 + date->year); + int month = (int)date->month; + int day = (int)date->day; + + month -= 2; + if (month < 1) + { + month += 12; + --year; + } + cent = year / 100; + year %= 100; + return (RTCWeek)(((26 * month - 2) / 10 + day + year + year / 4 + cent / 4 + 5 * cent) % 7); +} diff --git a/arm9/modules/05/asm/mod05_021DB44C.s b/arm9/modules/05/asm/mod05_021DB44C.s index 75d5fd9c..b606312e 100644 --- a/arm9/modules/05/asm/mod05_021DB44C.s +++ b/arm9/modules/05/asm/mod05_021DB44C.s @@ -25,7 +25,7 @@ _021DB45A: str r0, [r4] mov r0, #0 str r0, [r4, #8] - bl FUN_020126D8 + bl GF_RTC_TimeToSec lsr r1, r0, #0x1f add r1, r0, r1 asr r3, r1, #1 @@ -79,7 +79,7 @@ MOD05_021DB4D0: ; 0x021DB4D0 bne _021DB4DA bl ErrorHandling _021DB4DA: - bl FUN_020126D8 + bl GF_RTC_TimeToSec lsr r1, r0, #0x1f add r1, r0, r1 asr r0, r1, #1 diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index a993374a..daf46f68 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -16198,10 +16198,10 @@ MOD05_021ED320: ; 0x021ED320 MOD05_021ED334: ; 0x021ED334 push {r3, r4, r5, lr} add r4, r0, #0 - bl FUN_0204B2C0 + bl Script_GetDay add r5, r0, #0 add r0, r4, #0 - bl FUN_0204B2B4 + bl Script_GetMonth mov r1, #0x64 mul r1, r0 add r0, r4, #0 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index 5d47188a..fd961cc0 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -4718,7 +4718,7 @@ MOD06_0223B944: ; 0x0223B944 add r5, r0, #0 add r4, r1, #0 add r6, r2, #0 - bl FUN_02012794 + bl GF_RTC_GetTimeOfDay sub r1, r0, #1 cmp r1, #1 bhi _0223B960 @@ -31114,7 +31114,7 @@ MOD06_0224891C: ; 0x0224891C bl Sav2_PlayerData_GetOptionsAddr str r0, [r4, #0x14] add r0, r6, #0 - bl FUN_0204B2A4 + bl Script_GetTimeOfDay cmp r0, #1 bhi _02248996 mov r0, #0 @@ -31562,16 +31562,16 @@ MOD06_02248D00: ; 0x02248D00 push {r3, r4, r5, r6, lr} sub sp, #0xc add r4, r0, #0 - bl FUN_0204B2CC + bl Script_GetWeekday add r0, r0, #6 mov r1, #7 bl _s32_div_f add r0, r4, #0 add r5, r1, #0 - bl FUN_0204B2D8 + bl Script_GetHour add r6, r0, #0 add r0, r4, #0 - bl FUN_0204B2E4 + bl Script_GetMinute mov r1, #0xf bl _s32_div_f add r6, #0x13 @@ -32021,7 +32021,7 @@ _0224905E: ; jump table _02249066: bl ErrorHandling _0224906A: - bl FUN_02012794 + bl GF_RTC_GetTimeOfDay cmp r0, #0 beq _02249078 cmp r0, #1 @@ -32282,7 +32282,7 @@ MOD06_02249230: ; 0x02249230 pop {r3, r4, r5, r6, r7, pc} _02249244: add r0, sp, #0 - bl FUN_020126B4 + bl GF_RTC_CopyDate ldr r0, [sp, #4] cmp r0, #0 bne _02249254 @@ -32465,7 +32465,7 @@ MOD06_02249388: ; 0x02249388 push {r3, r4, r5, r6, r7, lr} sub sp, #0x10 add r5, r1, #0 - bl FUN_02012794 + bl GF_RTC_GetTimeOfDay ldr r1, [r5] add r4, r0, #0 cmp r1, #0 diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index 891ecf6a..b5cc45b0 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -676,7 +676,7 @@ MOD11_0222DB50: ; 0x0222DB50 str r0, [r4, r1] add r0, sp, #0x20 add r1, sp, #0x14 - bl FUN_0201265C + bl GF_RTC_CopyDateTime ldr r0, _0222DF10 ; =gMain ldr r6, [sp, #0x24] ldr r5, [r0, #0x2c] diff --git a/arm9/modules/21/asm/module_21.s b/arm9/modules/21/asm/module_21.s index 787a729f..ad12a682 100644 --- a/arm9/modules/21/asm/module_21.s +++ b/arm9/modules/21/asm/module_21.s @@ -61,7 +61,7 @@ MOD21_0225489C: ; 0x0225489C add r0, r5, #0 str r1, [r5, #0x20] add r0, #0x14 - bl FUN_02012690 + bl GF_RTC_CopyTime ldr r0, [r5, #0x14] cmp r0, #0x18 blo _022548D6 @@ -256,7 +256,7 @@ _02254A0A: strb r0, [r4, #5] add r0, r4, #0 add r0, #0x14 - bl FUN_02012690 + bl GF_RTC_CopyTime ldrb r1, [r4, #5] ldr r0, [r4, #0x18] cmp r1, r0 diff --git a/arm9/modules/25/asm/module_25.s b/arm9/modules/25/asm/module_25.s index 84129725..481c98c2 100644 --- a/arm9/modules/25/asm/module_25.s +++ b/arm9/modules/25/asm/module_25.s @@ -61,7 +61,7 @@ MOD25_0225489C: ; 0x0225489C add r0, r5, #0 str r1, [r5, #0x20] add r0, #0x14 - bl FUN_02012690 + bl GF_RTC_CopyTime ldr r0, [r5, #0x14] cmp r0, #0x18 blo _022548D6 @@ -256,7 +256,7 @@ _02254A0A: strb r0, [r4, #5] add r0, r4, #0 add r0, #0x14 - bl FUN_02012690 + bl GF_RTC_CopyTime ldrb r1, [r4, #5] ldr r0, [r4, #0x18] cmp r1, r0 diff --git a/arm9/modules/40/asm/module_40.s b/arm9/modules/40/asm/module_40.s index 409892d9..90fc4ebd 100644 --- a/arm9/modules/40/asm/module_40.s +++ b/arm9/modules/40/asm/module_40.s @@ -121,7 +121,7 @@ MOD40_02254940: ; 0x02254940 sub sp, #0xc add r4, r0, #0 add r0, sp, #0 - bl FUN_02012690 + bl GF_RTC_CopyTime ldr r0, [sp] cmp r0, #0x18 blo _0225495A @@ -625,7 +625,7 @@ MOD40_02254CE8: ; 0x02254CE8 bne _02254CFE add r0, r4, #0 add r0, #0x20 - bl FUN_02012690 + bl GF_RTC_CopyTime mov r0, #1 str r0, [r4, #0x30] _02254CFE: diff --git a/arm9/modules/45/asm/module_45.s b/arm9/modules/45/asm/module_45.s index 182774aa..e3115193 100644 --- a/arm9/modules/45/asm/module_45.s +++ b/arm9/modules/45/asm/module_45.s @@ -48,7 +48,7 @@ MOD45_0225489C: ; 0x0225489C add r4, r1, #0 add r0, sp, #4 add r6, r2, #0 - bl FUN_020126B4 + bl GF_RTC_CopyDate add r0, r4, #0 bl MOD20_02252C3C add r1, r5, #0 diff --git a/arm9/modules/52/asm/module_52.s b/arm9/modules/52/asm/module_52.s index 55bb6ed3..829ee276 100644 --- a/arm9/modules/52/asm/module_52.s +++ b/arm9/modules/52/asm/module_52.s @@ -109,7 +109,7 @@ MOD52_021D7594: ; 0x021D7594 bl OverlayManager_GetField18 ldr r4, [r0, #8] add r0, r4, #0 - bl FUN_02023788 + bl Sav2_SysInfo_get add r5, r0, #0 mov r0, #0x4d add r1, r4, #0 @@ -118,19 +118,19 @@ MOD52_021D7594: ; 0x021D7594 mov r1, #0 bl FUN_02024F9C add r0, r5, #0 - bl FUN_020237CC + bl Sav2_SysInfo_MacAddressIsMine cmp r0, #0 beq _021D75C8 add r0, r5, #0 - bl FUN_020237FC + bl Sav2_SysInfo_RTCOffsetIsMine cmp r0, #0 bne _021D75D8 _021D75C8: add r0, r4, #0 - bl FUN_02023794 + bl Sav2_SysInfo_RTC_get bl FUN_020238A4 add r0, r5, #0 - bl FUN_020237A0 + bl Sav2_SysInfo_InitFromSystem _021D75D8: add r0, r4, #0 bl Sav2_PlayerData_GetIGTAddr @@ -162,11 +162,11 @@ MOD52_021D7604: ; 0x021D7604 str r0, [sp] add r0, r5, #0 add r6, r2, #0 - bl FUN_02023788 - bl FUN_020237A0 + bl Sav2_SysInfo_get + bl Sav2_SysInfo_InitFromSystem add r0, r5, #0 - bl FUN_02023794 - bl FUN_02023840 + bl Sav2_SysInfo_RTC_get + bl Sav2_SysInfo_RTC_init add r0, r5, #0 bl FUN_0202881C add r4, r0, #0 diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index d16c0493..c21879dd 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -1240,7 +1240,7 @@ MOD83_0222DF40: ; 0x0222DF40 str r0, [r5, #0x34] _0222DF60: ldr r0, [r5, #4] - bl FUN_02023788 + bl Sav2_SysInfo_get bl FUN_02023820 cmp r0, #1 bne _0222DF72 @@ -3436,7 +3436,7 @@ MOD83_0222F074: ; 0x0222F074 add r0, #8 strb r1, [r4, r0] add r0, sp, #8 - bl FUN_020126B4 + bl GF_RTC_CopyDate add r0, sp, #8 bl RTC_ConvertDateToDay mov r1, #0xd5 @@ -4970,7 +4970,7 @@ _0222FD12: strb r0, [r5, r1] _0222FD2C: add r0, sp, #8 - bl FUN_020126B4 + bl GF_RTC_CopyDate add r0, sp, #8 bl RTC_ConvertDateToDay mov r1, #0xd5 diff --git a/arm9/src/main.c b/arm9/src/main.c index e1c8fb38..4f3b583c 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -27,7 +27,7 @@ extern BOOL FUN_0202FB80(void); extern void InitSystemForTheGame(void); extern void InitGraphicMemory(void); extern void FUN_02022294(void); -extern void FUN_0201259C(void); +extern void GF_InitRTCWork(void); extern void FUN_02002C14(void); extern void FUN_02002C50(int, int); extern struct SaveBlock2 * SaveBlock2_new(void); @@ -40,7 +40,7 @@ extern void FUN_02089D90(int); extern void FUN_0200A2AC(void); extern void FUN_02015E30(void); extern void FUN_0201B5CC(void *); -extern void FUN_020125D4(void); +extern void GF_RTC_UpdateOnFrame(void); extern void FUN_02015E60(void); extern void FUN_020222C4(void); extern void FUN_0200A318(void); @@ -64,7 +64,7 @@ THUMB_FUNC void NitroMain(void) PM_GetBackLight((PMBackLightSwitch *)SDK_STATIC_BSS_START, NULL); FUN_02022294(); - FUN_0201259C(); + GF_InitRTCWork(); FUN_02000DF4(); FUN_02002C14(); FUN_02002C50(0, 3); @@ -125,7 +125,7 @@ THUMB_FUNC void NitroMain(void) gMain.unk2C++; } } - FUN_020125D4(); + GF_RTC_UpdateOnFrame(); FUN_02015E60(); FUN_020222C4(); FUN_0201B5CC(gMain.unk24); @@ -262,7 +262,7 @@ THUMB_FUNC void FUN_02000F4C(u32 arg0, u32 arg1) DoSoftReset(arg0); } -extern void FUN_0201265C(struct Unk21C4818 *, struct Unk21C4828 *); +extern void GF_RTC_CopyDateTime(struct Unk21C4818 *, struct Unk21C4828 *); extern void SetMTRNGSeed(u32); extern void SetLCRNGSeed(u32); @@ -270,7 +270,7 @@ THUMB_FUNC void InitializeMainRNG(void) { struct Unk21C4818 spC; struct Unk21C4828 sp0; - FUN_0201265C(&spC, &sp0); + GF_RTC_CopyDateTime(&spC, &sp0); { u32 r4 = gMain.unk2C; u32 r5 = ((sp0.unk4 + sp0.unk8) << 24) + (spC.unk0 + ((256 * spC.unk4 * spC.unk8) << 16) + (sp0.unk0 << 16)); diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c index 3db6796a..97be796b 100644 --- a/arm9/src/pokemon.c +++ b/arm9/src/pokemon.c @@ -2,6 +2,7 @@ #define IN_POKEMON_C #include "proto.h" #include "party.h" +#include "player_data.h" #include "pokemon.h" #include "filesystem.h" #include "heap.h" @@ -41,7 +42,7 @@ BOOL FUN_02069E7C(struct BoxPokemon * boxmon); BOOL FUN_02069E9C(struct BoxPokemon * boxmon); void FUN_02069ECC(struct BoxPokemon * boxmon); void LoadWotbl_HandleAlternateForme(int species, int forme, u16 * wotbl); -void FUN_0206A054(struct BoxPokemon * boxmon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5); +void FUN_0206A054(struct BoxPokemon * boxmon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id); BOOL MonHasMove(struct Pokemon * pokemon, u16 move); BOOL FUN_0206A144(struct BoxPokemon * boxmon, u32 a1); BOOL FUN_0206A16C(u16 species, int forme, u32 a2); @@ -3321,10 +3322,10 @@ void FUN_02069FB0(u32 r7, u32 r5, u32 r4, u32 r6, u32 sp18, u32 sp1C, u32 sp20) } } -void FUN_0206A014(struct Pokemon * pokemon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5) +void FUN_0206A014(struct Pokemon * pokemon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id) { u32 hp; - FUN_0206A054(&pokemon->box, a1, pokeball, a3, encounterType, a5); + FUN_0206A054(&pokemon->box, a1, pokeball, a3, encounterType, heap_id); if (pokeball == ITEM_HEAL_BALL) { hp = GetMonData(pokemon, MON_DATA_MAXHP, NULL); @@ -3334,9 +3335,9 @@ void FUN_0206A014(struct Pokemon * pokemon, u32 a1, u32 pokeball, u32 a3, u32 en } } -void FUN_0206A054(struct BoxPokemon * boxmon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5) +void FUN_0206A054(struct BoxPokemon * boxmon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id) { - FUN_020808AC(boxmon, (int)a1, 0, (int)a3, (int)a5); + FUN_020808AC(boxmon, a1, 0, a3, heap_id); SetBoxMonData(boxmon, MON_DATA_GAME_VERSION, (void *)&gGameVersion); SetBoxMonData(boxmon, MON_DATA_POKEBALL, &pokeball); SetBoxMonData(boxmon, MON_DATA_ENCOUNTER_TYPE, &encounterType); diff --git a/arm9/src/sav_system_info.c b/arm9/src/sav_system_info.c new file mode 100644 index 00000000..6b532b8d --- /dev/null +++ b/arm9/src/sav_system_info.c @@ -0,0 +1,122 @@ +#include "global.h" +#include "save_block_2.h" +#include "MI_memory.h" +#include "OS_ownerInfo.h" +#include "RTC_api.h" +#include "RTC_convert.h" +#include "sav_system_info.h" + +#pragma thumb on + +extern void GF_RTC_CopyDateTime(RTCDate *, RTCTime *); + +u32 Sav2_SysInfo_sizeof(void) +{ + return sizeof(struct SavSysInfo); +} + +void Sav2_SysInfo_init(struct SavSysInfo * unk) +{ + MI_CpuClearFast(unk, sizeof(struct SavSysInfo)); + Sav2_SysInfo_RTC_init(&unk->rtcInfo); +} + +struct SavSysInfo * Sav2_SysInfo_get(struct SaveBlock2 * sav2) +{ + return (struct SavSysInfo *)SavArray_get(sav2, 0); +} + +struct UnkSaveStruct_0202376C_sub * Sav2_SysInfo_RTC_get(struct SaveBlock2 * sav2) +{ + return &Sav2_SysInfo_get(sav2)->rtcInfo; +} + +void Sav2_SysInfo_InitFromSystem(struct SavSysInfo * unk) +{ + OSOwnerInfo info; + unk->rtcOffset = OS_GetOwnerRtcOffset(); + OS_GetMacAddress(unk->macAddr); + OS_GetOwnerInfo(&info); + unk->birthMonth = info.birthday.month; + unk->birthDay = info.birthday.day; +} + +BOOL Sav2_SysInfo_MacAddressIsMine(struct SavSysInfo * unk) +{ + u8 macAddr[6]; + OS_GetMacAddress(macAddr); + for (int i = 0; i < 6; i++) + { + if (macAddr[i] != unk->macAddr[i]) + return FALSE; + } + return TRUE; +} + +BOOL Sav2_SysInfo_RTCOffsetIsMine(struct SavSysInfo * unk) +{ + return OS_GetOwnerRtcOffset() == unk->rtcOffset; +} + +u8 Sav2_SysInfo_GetBirthMonth(struct SavSysInfo * unk) +{ + return unk->birthMonth; +} + +u8 Sav2_SysInfo_GetBirthDay(struct SavSysInfo * unk) +{ + return unk->birthDay; +} + +u8 FUN_02023820(struct SavSysInfo * unk) +{ + return unk->field_48; +} + +void FUN_02023828(struct SavSysInfo * unk, u8 val) +{ + unk->field_48 = val; +} + +u32 FUN_02023830(struct SavSysInfo * unk) +{ + return unk->field_4C; +} + +void FUN_02023834(struct SavSysInfo * unk, u32 val) +{ + if (unk->field_4C == 0) + unk->field_4C = val; +} + +void Sav2_SysInfo_RTC_init(struct UnkSaveStruct_0202376C_sub * sub) +{ + sub->field_00 = 1; + GF_RTC_CopyDateTime(&sub->date, &sub->time); + sub->daysSinceNitroEpoch = RTC_ConvertDateToDay(&sub->date); + sub->secondsSinceNitroEpoch = RTC_ConvertDateTimeToSecond(&sub->date, &sub->time); + sub->field_2C = 0; + sub->field_34 = 0; +} + +BOOL FUN_02023874(struct UnkSaveStruct_0202376C_sub * sub) +{ + return sub->field_34 != 0; +} + +void FUN_02023884(struct UnkSaveStruct_0202376C_sub * sub, u32 a1) +{ + if (sub->field_34 > 1440) + sub->field_34 = 1440; + if (sub->field_34 < a1) + sub->field_34 = 0; + else + sub->field_34 -= a1; +} + +void FUN_020238A4(struct UnkSaveStruct_0202376C_sub * sub) +{ + sub->field_34 = 1440; + GF_RTC_CopyDateTime(&sub->date, &sub->time); + sub->daysSinceNitroEpoch = RTC_ConvertDateToDay(&sub->date); +} diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index abd09b1c..58e1ff4c 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -7,7 +7,7 @@ extern u32 FUN_0202B034(void); extern u32 FUN_0202AC20(void); -extern u32 FUN_0202376C(void); +extern u32 Sav2_SysInfo_sizeof(void); extern u32 FUN_0204BE14(void); extern u32 FUN_02034D7C(void); extern u32 FUN_02023D64(void); @@ -40,7 +40,7 @@ extern u32 FUN_02013B28(void); extern u32 PCStorage_sizeof(void); extern void FUN_0202B03C(void *); extern void FUN_0202AC28(void *); -extern void FUN_02023770(void *); +extern void Sav2_SysInfo_init(void *); extern void FUN_0204BE18(void *); extern void FUN_02034D98(void *); extern void FUN_02024378(void *); @@ -78,7 +78,7 @@ const struct SaveChunkHeader UNK_020EE6E0[] = { }; const struct SaveChunkHeader UNK_020EE700[] = { - { 0, 0, (SAVSIZEFN)FUN_0202376C, (SAVINITFN)FUN_02023770 }, + { 0, 0, (SAVSIZEFN)Sav2_SysInfo_sizeof, (SAVINITFN)Sav2_SysInfo_init }, { 1, 0, (SAVSIZEFN)Sav2_PlayerData_sizeof, (SAVINITFN)Sav2_PlayerData_init }, { 2, 0, (SAVSIZEFN)SavArray_Party_sizeof, (SAVINITFN)SavArray_Party_init }, { 3, 0, (SAVSIZEFN)Sav2_Bag_sizeof, (SAVINITFN)Sav2_Bag_init }, diff --git a/include/pokemon.h b/include/pokemon.h index ed62c18e..b76bf145 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -294,7 +294,7 @@ BOOL FUN_02069E74(struct Pokemon * pokemon); BOOL FUN_02069E94(struct Pokemon * pokemon); void FUN_02069EC4(struct Pokemon * pokemon); void FUN_02069FB0(u32 r7, u32 r5, u32 r4, u32 r6, u32 sp18, u32 sp1C, u32 sp20); -void FUN_0206A014(struct Pokemon * pokemon, u32 a1, u32 pokeball, u32 a3, u32 encounterType, u32 a5); +void FUN_0206A014(struct Pokemon * pokemon, struct PlayerData * a1, u32 pokeball, u32 a3, u32 encounterType, u32 heap_id); void FUN_0206A094(struct Pokemon * pokemon, u32 a1, u32 a2); BOOL FUN_0206A13C(struct Pokemon * pokemon, u32 a1); void FUN_0206A1C4(struct Pokemon * pokemon); diff --git a/include/proto.h b/include/proto.h index fb2f8a78..67a295ac 100644 --- a/include/proto.h +++ b/include/proto.h @@ -5,6 +5,7 @@ #include "pokemon.h" // for struct definitions #include "string16.h" // for struct definitions +#include "player_data.h" // for struct definitions int FUN_0206AE00(int x); u32 GetItemAttr(u16 item, u32 a1, u32 a2); @@ -15,7 +16,7 @@ int FUN_02005F14(int); void FUN_02005E80(int); void FUN_02005E90(int, int, int, int); void FUN_020056AC(int, int, int, int, int); -void FUN_020808AC(struct BoxPokemon *, int, int, int, int); +void FUN_020808AC(struct BoxPokemon *, struct PlayerData *, int, u32, u32); void StringExpandPlaceholders(u32 *, struct String *, struct String *); #endif //POKEDIAMOND_PROTO_H diff --git a/include/sav_system_info.h b/include/sav_system_info.h new file mode 100644 index 00000000..696cfe07 --- /dev/null +++ b/include/sav_system_info.h @@ -0,0 +1,48 @@ +#ifndef POKEDIAMOND_SAV_SYSTEM_INFO_H +#define POKEDIAMOND_SAV_SYSTEM_INFO_H + +#include "RTC_api.h" + +struct UnkSaveStruct_0202376C_sub +{ + /* 0x00 */ u32 field_00; + /* 0x04 */ RTCDate date; + /* 0x14 */ RTCTime time; + /* 0x20 */ s32 daysSinceNitroEpoch; + /* 0x24 */ s64 secondsSinceNitroEpoch; + /* 0x2C */ s64 field_2C; + /* 0x34 */ u32 field_34; +}; + +struct SavSysInfo +{ + /* 0x00 */ s64 rtcOffset; + /* 0x08 */ u8 macAddr[6]; + /* 0x0E */ u8 birthMonth; + /* 0x0F */ u8 birthDay; + /* 0x10 */ struct UnkSaveStruct_0202376C_sub rtcInfo; + /* 0x48 */ u8 field_48; + u8 filler_49[3]; + /* 0x4C */ u32 field_4C; + u8 padding_50[12]; +}; + +u32 Sav2_SysInfo_sizeof(void); +void Sav2_SysInfo_init(struct SavSysInfo * unk); +struct SavSysInfo * Sav2_SysInfo_get(struct SaveBlock2 * sav2); +struct UnkSaveStruct_0202376C_sub * Sav2_SysInfo_RTC_get(struct SaveBlock2 * sav2); +void Sav2_SysInfo_InitFromSystem(struct SavSysInfo * unk); +BOOL Sav2_SysInfo_MacAddressIsMine(struct SavSysInfo * unk); +BOOL Sav2_SysInfo_RTCOffsetIsMine(struct SavSysInfo * unk); +u8 Sav2_SysInfo_GetBirthMonth(struct SavSysInfo * unk); +u8 Sav2_SysInfo_GetBirthDay(struct SavSysInfo * unk); +u8 FUN_02023820(struct SavSysInfo * unk); +void FUN_02023828(struct SavSysInfo * unk, u8 val); +u32 FUN_02023830(struct SavSysInfo * unk); +void FUN_02023834(struct SavSysInfo * unk, u32 val); +void Sav2_SysInfo_RTC_init(struct UnkSaveStruct_0202376C_sub * sub); +BOOL FUN_02023874(struct UnkSaveStruct_0202376C_sub * sub); +void FUN_02023884(struct UnkSaveStruct_0202376C_sub * sub, u32 a1); +void FUN_020238A4(struct UnkSaveStruct_0202376C_sub * sub); + +#endif //POKEDIAMOND_SAV_SYSTEM_INFO_H |