diff options
-rw-r--r-- | arm9/arm9.lsf | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02011744.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_0202376C.s | 220 | ||||
-rw-r--r-- | arm9/asm/unk_02025954.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0202F150.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0204B0A0.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/lib/include/RTC_api.h | 34 | ||||
-rw-r--r-- | arm9/lib/include/RTC_convert.h | 7 | ||||
-rw-r--r-- | arm9/modules/11/asm/module_11_thumb1.s | 2 | ||||
-rw-r--r-- | arm9/src/main.c | 4 | ||||
-rw-r--r-- | arm9/src/sav_system_info.c | 123 | ||||
-rw-r--r-- | include/sav_system_info.h | 47 |
13 files changed, 221 insertions, 230 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/unk_02011744.s b/arm9/asm/unk_02011744.s index d8202d2d..08ae8a71 100644 --- a/arm9/asm/unk_02011744.s +++ b/arm9/asm/unk_02011744.s @@ -2131,8 +2131,8 @@ _02012656: .balign 4 _02012658: .word FUN_020125FC - thumb_func_start FUN_0201265C -FUN_0201265C: ; 0x0201265C + thumb_func_start CopyRtcBuffersTo +CopyRtcBuffersTo: ; 0x0201265C push {r3-r5, lr} add r5, r0, #0x0 ldr r0, _02012684 ; =UNK_021C4808 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..eb6eff6e 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 CopyRtcBuffersTo ldr r0, _020259D8 ; =gMain ldr r6, [sp, #0xc] ldr r1, [sp, #0x8] diff --git a/arm9/asm/unk_0202F150.s b/arm9/asm/unk_0202F150.s index 22bf52e9..903aa0a1 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 CopyRtcBuffersTo ldr r0, _02031340 ; =gMain ldr r6, [sp, #0x10] mov r5, #0x0 diff --git a/arm9/asm/unk_0204B0A0.s b/arm9/asm/unk_0204B0A0.s index 4b658c2b..5f83308d 100644 --- a/arm9/asm/unk_0204B0A0.s +++ b/arm9/asm/unk_0204B0A0.s @@ -16,7 +16,7 @@ FUN_0204B0F8: ; 0x0204B0F8 beq _0204B12A add r0, sp, #0xc add r1, sp, #0x0 - bl FUN_0201265C + bl CopyRtcBuffersTo add r0, r5, #0x0 add r1, r4, #0x0 add r2, sp, #0xc diff --git a/arm9/global.inc b/arm9/global.inc index 64c64dc1..b740ddb4 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -800,7 +800,7 @@ .extern FUN_02012560 .extern FUN_0201259C .extern FUN_020125D4 -.extern FUN_0201265C +.extern CopyRtcBuffersTo .extern FUN_02012690 .extern FUN_020126B4 .extern FUN_020126D8 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..255ebf73 --- /dev/null +++ b/arm9/lib/include/RTC_convert.h @@ -0,0 +1,7 @@ +#ifndef NITRO_RTC_CONVERT_H_ +#define NITRO_RTC_CONVERT_H_ + +s32 RTC_ConvertDateToDay(RTCDate *); +s64 RTC_ConvertDateTimeToSecond(RTCDate *, RTCTime *); + +#endif //NITRO_RTC_CONVERT_H_ diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index 891ecf6a..0d4f5c5a 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 CopyRtcBuffersTo ldr r0, _0222DF10 ; =gMain ldr r6, [sp, #0x24] ldr r5, [r0, #0x2c] diff --git a/arm9/src/main.c b/arm9/src/main.c index e1c8fb38..7baf4c6a 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -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 CopyRtcBuffersTo(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); + CopyRtcBuffersTo(&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/sav_system_info.c b/arm9/src/sav_system_info.c new file mode 100644 index 00000000..cb20bd9b --- /dev/null +++ b/arm9/src/sav_system_info.c @@ -0,0 +1,123 @@ +#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 CopyRtcBuffersTo(RTCDate *, RTCTime *); + +u32 FUN_0202376C(void) +{ + return sizeof(struct UnkSaveStruct_0202376C); +} + +void FUN_02023770(struct UnkSaveStruct_0202376C * unk) +{ + MI_CpuClearFast(unk, sizeof(struct UnkSaveStruct_0202376C)); + FUN_02023840(&unk->rtcInfo); +} + +struct UnkSaveStruct_0202376C * FUN_02023788(struct SaveBlock2 * sav2) +{ + return (struct UnkSaveStruct_0202376C *)SavArray_get(sav2, 0); +} + +struct UnkSaveStruct_0202376C_sub * FUN_02023794(struct SaveBlock2 * sav2) +{ + return &FUN_02023788(sav2)->rtcInfo; +} + +void FUN_020237A0(struct UnkSaveStruct_0202376C * 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 FUN_020237CC(struct UnkSaveStruct_0202376C * 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 FUN_020237FC(struct UnkSaveStruct_0202376C * unk) +{ + return OS_GetOwnerRtcOffset() == unk->rtcOffset; +} + +u8 FUN_02023818(struct UnkSaveStruct_0202376C * unk) +{ + return unk->birthMonth; +} + +u8 FUN_0202381C(struct UnkSaveStruct_0202376C * unk) +{ + return unk->birthDay; +} + +u8 FUN_02023820(struct UnkSaveStruct_0202376C * unk) +{ + return unk->field_48; +} + +void FUN_02023828(struct UnkSaveStruct_0202376C * unk, u8 val) +{ + unk->field_48 = val; +} + +u32 FUN_02023830(struct UnkSaveStruct_0202376C * unk) +{ + return unk->field_4C; +} + +void FUN_02023834(struct UnkSaveStruct_0202376C * unk, u32 val) +{ + if (unk->field_4C == 0) + unk->field_4C = val; +} + +void FUN_02023840(struct UnkSaveStruct_0202376C_sub * sub) +{ + sub->field_00 = 1; + CopyRtcBuffersTo(&sub->date, &sub->time); + sub->daysSinceNitroEpoch = RTC_ConvertDateToDay(&sub->date); + sub->secondsSinceNitroEpoch = RTC_ConvertDateTimeToSecond(&sub->date, &sub->time); + sub->field_2C = 0; + sub->field_30 = 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; + CopyRtcBuffersTo(&sub->date, &sub->time); + sub->daysSinceNitroEpoch = RTC_ConvertDateToDay(&sub->date); +} diff --git a/include/sav_system_info.h b/include/sav_system_info.h new file mode 100644 index 00000000..eb154f72 --- /dev/null +++ b/include/sav_system_info.h @@ -0,0 +1,47 @@ +#ifndef POKEDIAMOND_SAV_SYSTEM_INFO_H +#define POKEDIAMOND_SAV_SYSTEM_INFO_H + +struct UnkSaveStruct_0202376C_sub +{ + u32 field_00; + RTCDate date; + RTCTime time; + s32 daysSinceNitroEpoch; + s64 secondsSinceNitroEpoch; + u32 field_2C; + u32 field_30; + u32 field_34; +}; + +struct UnkSaveStruct_0202376C +{ + s64 rtcOffset; + u8 macAddr[6]; + u8 birthMonth; + u8 birthDay; + struct UnkSaveStruct_0202376C_sub rtcInfo; + u8 field_48; + u8 filler_49[3]; + u32 field_4C; + u8 padding_50[12]; +}; + +u32 FUN_0202376C(void); +void FUN_02023770(struct UnkSaveStruct_0202376C * unk); +struct UnkSaveStruct_0202376C * FUN_02023788(struct SaveBlock2 * sav2); +struct UnkSaveStruct_0202376C_sub * FUN_02023794(struct SaveBlock2 * sav2); +void FUN_020237A0(struct UnkSaveStruct_0202376C * unk); +BOOL FUN_020237CC(struct UnkSaveStruct_0202376C * unk); +BOOL FUN_020237FC(struct UnkSaveStruct_0202376C * unk); +u8 FUN_02023818(struct UnkSaveStruct_0202376C * unk); +u8 FUN_0202381C(struct UnkSaveStruct_0202376C * unk); +u8 FUN_02023820(struct UnkSaveStruct_0202376C * unk); +void FUN_02023828(struct UnkSaveStruct_0202376C * unk, u8 val); +u32 FUN_02023830(struct UnkSaveStruct_0202376C * unk); +void FUN_02023834(struct UnkSaveStruct_0202376C * unk, u32 val); +void FUN_02023840(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 |