summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-12-27 05:17:41 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2020-01-09 12:38:57 +0800
commit8f1a8972c19f5cd2522c9e7982bd330ac05305e9 (patch)
tree8d06f9dcc3b9167e07a03f82ab70305bfe2c050a /include
parenta436d79177fc54927d14cc2114802dee74176a6b (diff)
librfu_stwi
Co-authored-by: Max Thomas <mtinc2@gmail.com>
Diffstat (limited to 'include')
-rw-r--r--include/gba/io_reg.h6
-rw-r--r--include/gba/macro.h12
-rw-r--r--include/librfu.h67
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