diff options
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/main.c | 4 | ||||
-rw-r--r-- | arm9/src/sav_system_info.c | 123 |
2 files changed, 125 insertions, 2 deletions
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); +} |