diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-12-27 05:17:41 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2020-01-09 12:38:57 +0800 |
commit | 8f1a8972c19f5cd2522c9e7982bd330ac05305e9 (patch) | |
tree | 8d06f9dcc3b9167e07a03f82ab70305bfe2c050a /include | |
parent | a436d79177fc54927d14cc2114802dee74176a6b (diff) |
librfu_stwi
Co-authored-by: Max Thomas <mtinc2@gmail.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/gba/io_reg.h | 6 | ||||
-rw-r--r-- | include/gba/macro.h | 12 | ||||
-rw-r--r-- | include/librfu.h | 67 |
3 files changed, 69 insertions, 16 deletions
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 6d54bc5fb..8eacc8aa7 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -137,6 +137,8 @@ #define REG_OFFSET_DMA3CNT_H 0xde #define REG_OFFSET_TMCNT 0x100 +#define REG_OFFSET_TMCNT_L 0x100 +#define REG_OFFSET_TMCNT_H 0x102 #define REG_OFFSET_TM0CNT 0x100 #define REG_OFFSET_TM0CNT_L 0x100 #define REG_OFFSET_TM0CNT_H 0x102 @@ -298,6 +300,8 @@ #define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H) #define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT) +#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L) +#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H) #define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT) #define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L) #define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H) @@ -458,6 +462,8 @@ #define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) #define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) +#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4))) +#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4))) #define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) #define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L) #define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H) diff --git a/include/gba/macro.h b/include/gba/macro.h index e416c3577..a3e870210 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -105,7 +105,7 @@ } \ } -#define DmaClearLarge(dmaNum, dest, size, block, bit) \ +#define DmaClearLarge(dmaNum, dest, size, block, bit) \ { \ u32 _size = size; \ while (1) \ @@ -170,4 +170,14 @@ #define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16) #define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32) +#define IntrEnable(flags) \ +{ \ + u16 imeTemp; \ + \ + imeTemp = REG_IME; \ + REG_IME = 0; \ + REG_IE |= flags; \ + REG_IME = imeTemp; \ +} + #endif // GUARD_GBA_MACRO_H diff --git a/include/librfu.h b/include/librfu.h index 5eb9fd7a0..709074f9c 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -108,7 +108,7 @@ struct RfuStruct u8 ackActiveCommand; u8 timerSelect; u8 unk_b; - s32 timerState; + u32 timerState; // this field is s32 in emerald vu8 timerActive; u8 unk_11; vu16 error; @@ -126,10 +126,10 @@ struct RfuStruct struct RfuIntrStruct { - u8 rxPacketAlloc[0x74]; - u8 txPacketAlloc[0x74]; - u8 block1[0x960]; - u8 block2[0x30]; + union RfuPacket rxPacketAlloc; + union RfuPacket txPacketAlloc; + u8 block1[0x960]; // size of librfu_intr.s binary + struct RfuStruct block2; }; struct RfuSlotStatusUNI @@ -248,14 +248,6 @@ struct Unk_3007470 u16 unkA; }; -struct STWIStruct -{ - // TODO: resolve the struct - u8 unk_0[232]; - u8 function[2400]; - struct RfuStruct STWIStatus; -}; - struct Unk_3001190 { struct RfuLinkStatus linkStatus; @@ -263,7 +255,7 @@ struct Unk_3001190 struct RfuFixed fixed; struct RfuSlotStatusNI NI[4]; struct RfuSlotStatusUNI UNI[4]; - struct STWIStruct STWI; + struct RfuIntrStruct intr; }; extern struct RfuStruct *gRfuState; @@ -275,7 +267,6 @@ extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[4]; extern struct Unk_3007470 gUnknown_3007470; void rfu_STC_clearAPIVariables(void); -void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); void rfu_REQ_stopMode(void); void rfu_waitREQComplete(void); u32 rfu_REQBN_softReset_and_checkID(void); @@ -323,4 +314,50 @@ void rfu_UNI_clearRecvNewDataFlag(u8 a0); void rfu_REQ_PARENT_resumeRetransmitAndChange(void); void rfu_NI_setSendData(u8, u8, const void *, u32); +// librfu_intr +void IntrSIO32(void); + +// librfu_stwi +void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); +void STWI_set_MS_mode(u8 mode); +void STWI_init_Callback_M(void); +void STWI_init_Callback_S(void); +void STWI_set_Callback_M(void (*callbackM)()); +void STWI_set_Callback_S(void (*callbackS)()); +void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect); +void AgbRFU_SoftReset(void); +void STWI_set_Callback_ID(u32 id); +u16 STWI_read_status(u8 index); +u16 STWI_poll_CommandEnd(void); +void STWI_send_DataRxREQ(void); +void STWI_send_MS_ChangeREQ(void); +void STWI_send_StopModeREQ(void); +void STWI_send_SystemStatusREQ(void); +void STWI_send_GameConfigREQ(u8 *unk1, u8 *data); +void STWI_send_ResetREQ(void); +void STWI_send_LinkStatusREQ(void); +void STWI_send_VersionStatusREQ(void); +void STWI_send_SlotStatusREQ(void); +void STWI_send_ConfigStatusREQ(void); +void STWI_send_ResumeRetransmitAndChangeREQ(void); +void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3); +void STWI_send_SC_StartREQ(void); +void STWI_send_SC_PollingREQ(void); +void STWI_send_SC_EndREQ(void); +void STWI_send_SP_StartREQ(void); +void STWI_send_SP_PollingREQ(void); +void STWI_send_SP_EndREQ(void); +void STWI_send_CP_StartREQ(u16 unk1); +void STWI_send_CP_PollingREQ(void); +void STWI_send_CP_EndREQ(void); +void STWI_send_DataTxREQ(const void *in, u8 size); +void STWI_send_DataTxAndChangeREQ(const void *in, u8 size); +void STWI_send_DataReadyAndChangeREQ(u8 unk); +void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1); +void STWI_send_DisconnectREQ(u8 unk); +void STWI_send_TestModeREQ(u8 unk0, u8 unk1); +void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2); +void STWI_send_CPR_PollingREQ(void); +void STWI_send_CPR_EndREQ(void); + #endif // GUARD_LIBRFU_H |