diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/code_variables.h | 3 | ||||
| -rw-r--r-- | include/lb_rtc.h | 12 | ||||
| -rw-r--r-- | include/lbrtc.h | 103 | ||||
| -rw-r--r-- | include/m_all_grow.h | 6 |
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); |
