summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/unk_02011744.s4
-rw-r--r--arm9/asm/unk_0202376C.s220
-rw-r--r--arm9/asm/unk_02025954.s2
-rw-r--r--arm9/asm/unk_0202F150.s2
-rw-r--r--arm9/asm/unk_0204B0A0.s2
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/lib/include/RTC_api.h34
-rw-r--r--arm9/lib/include/RTC_convert.h7
-rw-r--r--arm9/modules/11/asm/module_11_thumb1.s2
-rw-r--r--arm9/src/main.c4
-rw-r--r--arm9/src/sav_system_info.c123
-rw-r--r--include/sav_system_info.h47
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