summaryrefslogtreecommitdiff
path: root/include/lbrtc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lbrtc.h')
-rw-r--r--include/lbrtc.h103
1 files changed, 103 insertions, 0 deletions
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