summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/main.c4
-rw-r--r--arm9/src/sav_system_info.c123
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);
+}