summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/code_variables.h3
-rw-r--r--include/lb_rtc.h12
-rw-r--r--include/lbrtc.h103
-rw-r--r--include/m_all_grow.h6
4 files changed, 108 insertions, 16 deletions
diff --git a/include/code_variables.h b/include/code_variables.h
index ef7a780..b484b81 100644
--- a/include/code_variables.h
+++ b/include/code_variables.h
@@ -2223,8 +2223,5 @@ extern UNK_TYPE B_80145FFC_jp;
// extern UNK_TYPE B_80152460_jp;
// extern UNK_TYPE B_80152464_jp;
// extern UNK_TYPE B_80152468_jp;
-// extern UNK_TYPE B_80152480_jp;
-// extern UNK_TYPE B_801524A0_jp;
-// extern UNK_TYPE B_801524B8_jp;
#endif
diff --git a/include/lb_rtc.h b/include/lb_rtc.h
index 09d9960..223147c 100644
--- a/include/lb_rtc.h
+++ b/include/lb_rtc.h
@@ -2,6 +2,7 @@
#define LB_RTC_H
#include "ultra64.h"
+#include "lbrtc.h"
/* TODO: do these have a better header? */
#define GAME_YEAR_MIN 2000 /* Minimum year supported by the game */
@@ -18,16 +19,7 @@ typedef u8 lbRTC_weekday_t;
typedef u8 lbRTC_month_t;
typedef u16 lbRTC_year_t;
-/* Name leaked in lbRTC_time_c_save_data_check */
-typedef struct lbRTC_time_c {
- /* 0x00 */ lbRTC_sec_t sec;
- /* 0x01 */ lbRTC_min_t min;
- /* 0x02 */ lbRTC_hour_t hour;
- /* 0x03 */ lbRTC_day_t day;
- /* 0x04 */ lbRTC_weekday_t weekday;
- /* 0x05 */ lbRTC_month_t month;
- /* 0x06 */ lbRTC_year_t year;
-} lbRTC_time_c; // size = 0x8
+typedef OSRTCTime lbRTC_time_c;
/* Name leaked in mTM_ymd_2_time */
typedef struct lbRTC_ymd_t {
diff --git a/include/lbrtc.h b/include/lbrtc.h
new file mode 100644
index 0000000..cf42577
--- /dev/null
+++ b/include/lbrtc.h
@@ -0,0 +1,103 @@
+#ifndef LBRTC_H
+#define LBRTC_H
+
+#include "ultra64.h"
+
+typedef struct OSRTCTime { // assumed from m_flashrom
+ /* 0x00 */ u8 sec;
+ /* 0x01 */ u8 min;
+ /* 0x02 */ u8 hour;
+ /* 0x03 */ u8 day;
+ /* 0x04 */ u8 weekday;
+ /* 0x05 */ u8 month;
+ /* 0x06 */ u16 year;
+} OSRTCTime; // size = 0x8
+
+// Internal
+
+// docs from: https://n64brew.dev/wiki/Joybus_Protocol
+
+#define RTC_CR_BLOCK_TYPE 0
+#define RTC_SRAM_BLOCK_TYPE 1
+#define RTC_TIME_BLOCK_TYPE 2
+#define RTC_BLOCK_TYPE_3 3
+
+#define CONT_CMD_RTC_INFO 6
+#define CONT_CMD_READ_RTC 7
+#define CONT_CMD_WRITE_RTC 8
+
+#define CONT_CMD_RTC_INFO_TX 1
+#define CONT_CMD_RTC_INFO_RX 3
+
+#define CONT_CMD_READ_RTC_TX 2
+#define CONT_CMD_READ_RTC_RX 9
+
+#define CONT_CMD_WRITE_RTC_TX 10
+#define CONT_CMD_WRITE_RTC_RX 1
+
+#define RTC_STATUS_STOPPED 0x80
+#define RTC_STATUS_CRYSTAL_FAILURE 0x2
+#define RTC_STATUS_BATTERY_FAILURE 0x1
+
+#define RTC_ERR_BATTERY 0x11
+#define RTC_ERR_CRYSTAL 0x12
+
+#define RTC_STOPPED 0x10
+
+typedef struct __OSContRTCData {
+ /* 0x00 */ u8 sec;
+ /* 0x01 */ u8 min;
+ /* 0x02 */ u8 hour;
+ /* 0x03 */ u8 day;
+ /* 0x04 */ u8 weekday;
+ /* 0x05 */ u8 month;
+ /* 0x06 */ u8 yearLo;
+ /* 0x07 */ u8 centuriesSince1900;
+} __OSContRTCData; // size = 0x8
+
+typedef struct __OSContRTCRWFormat {
+ /* 0x0 */ u8 txsize;
+ /* 0x1 */ u8 rxsize;
+ /* 0x2 */ u8 cmd;
+ /* 0x3 */ u8 blockType;
+ /* 0x4 */ __OSContRTCData data;
+ /* 0xC */ u8 status;
+} __OSContRTCRWFormat; // size = 0xD
+
+typedef struct __OSContRTCInfoFormat {
+ /* 0x0 */ u8 txsize;
+ /* 0x1 */ u8 rxsize;
+ /* 0x2 */ u8 cmd;
+ /* 0x3 */ u8 unk3;
+ /* 0x4 */ u8 unk4;
+ /* 0x5 */ u8 status;
+} __OSContRTCInfoFormat; // size = 0x6
+
+#define RTC_WRITE_PROTECT_NVRAM_BIT 1
+#define RTC_WRITE_PROTECT_RTC_BIT 2
+#define RTC_WRITE_STOP_COUNT_BIT 4
+#define RTC_WRITE_STOP_COUNT2_BIT 6
+
+typedef struct __OSContRTCControlRegs {
+ /* 0x0 */ u8 writeProtectBitfield;
+ /* 0x1 */ u8 flagsBitfield;
+} __OSContRTCControlRegs; // size = 0x2
+
+extern OSMesgQueue __contRTCMesgQ;
+extern OSMesg __contRTCMesg;
+
+//
+
+s32 lbrtc_getTime(OSMesgQueue* mq, OSRTCTime* time);
+s32 func_800FE420_jp(OSMesgQueue* mq, OSRTCTime* time);
+s32 func_800FE480_jp(OSMesgQueue* mq, u8* status);
+s32 lbrtc_setTime(OSMesgQueue* mq, OSRTCTime* time);
+s32 func_800FE8D0_jp(OSMesgQueue* mq, u8 blockType, u8* data);
+s32 func_800FEABC_jp(u8 blockType, u8* data);
+s32 func_800FEBE0_jp(OSMesgQueue* mq, OSRTCTime* time);
+s32 lbrtc_init(OSMesgQueue* mq);
+s32 func_800FEE10_jp(OSMesgQueue* mq, u8 blockType, u8* buf);
+void func_800FEF9C_jp(u8 blockType);
+s32 lbrtc_GetIntervalMinutes(OSRTCTime* t0, OSRTCTime* t1);
+
+#endif
diff --git a/include/m_all_grow.h b/include/m_all_grow.h
index 7e53e16..69796de 100644
--- a/include/m_all_grow.h
+++ b/include/m_all_grow.h
@@ -5,7 +5,7 @@
struct Foreground;
struct gfxprint;
-struct lbRTC_time_c;
+struct OSRTCTime;
#define AGrw_DUMP_WIDTH 4
#define AGrw_DUMP_HEIGHT 4
@@ -51,12 +51,12 @@ void mAGrw_OrderSetHaniwa(void);
u8 func_80055E34_jp(u16* items);
void mAGrw_ChangeItemBlock(u16* blockItems, u16 newItem, u16 targetItem, u8 possibleNum);
void mAGrw_ChangeItemBlock2(u16* blockItems, u16 newItem, u8 possibleNum);
-s32 mAGrw_CheckPutXmasTree(struct lbRTC_time_c* time);
+s32 mAGrw_CheckPutXmasTree(struct OSRTCTime* time);
void mAGrw_SetXmasTreeBlock(u16* blockItems);
void mAGrw_ClearXmasTreeBlock(u16* blockItems);
void mAGrw_XmasTreeField(s32 type);
void mAGrw_SetXmasTree(void);
-void mAGrw_RenewalFgItem(struct lbRTC_time_c* time);
+void mAGrw_RenewalFgItem(struct OSRTCTime* time);
void mAGrw_ChangeTree2OtherBlock(u16* items, u16 other);
void mAGrw_ChangeTree2FruitTreeLine(struct Foreground* fg, u16 fruitTree);
void mAGrw_ChangeTree2FruitTree(void);