diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/gba/io_reg.h | 6 | ||||
| -rw-r--r-- | include/gba/macro.h | 10 | ||||
| -rw-r--r-- | include/librfu.h | 108 | 
3 files changed, 124 insertions, 0 deletions
| diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index f8c89fdbd..83a2a123b 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 0217898e8..7b6b98c06 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -86,4 +86,14 @@      dmaRegs[5];                                                 \  } +#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 new file mode 100644 index 000000000..dbc8a41a6 --- /dev/null +++ b/include/librfu.h @@ -0,0 +1,108 @@ +#include "main.h" + +enum +{ +    RFU_RESET = 0x10, +    RFU_LINK_STATUS, +    RFU_VERSION_STATUS, +    RFU_SYSTEM_STATUS, +    RFU_SLOT_STATUS, +    RFU_CONFIG_STATUS, +    RFU_GAME_CONFIG, +    RFU_SYSTEM_CONFIG, +    RFU_UNK18, +    RFU_SC_START, +    RFU_SC_POLLING, +    RFU_SC_END, +    RFU_SP_START, +    RFU_SP_POLLING, +    RFU_SP_END, +    RFU_CP_START, +    RFU_CP_POLLING, +    RFU_CP_END, +    RFU_UNK22, +    RFU_UNK23, +    RFU_DATA_TX, +    RFU_DATA_TX_AND_CHANGE, +    RFU_DATA_RX, +    RFU_MS_CHANGE, +    RFU_DATA_READY_AND_CHANGE, +    RFU_DISCONNECTED_AND_CHANGE, +    RFU_UNK2A, +    RFU_UNK2B, +    RFU_UNK2C, +    RFU_UNK2D, +    RFU_UNK2E, +    RFU_UNK2F, +    RFU_DISCONNECT, +    RFU_TEST_MODE, +    RFU_CPR_START, +    RFU_CPR_POLLING, +    RFU_CPR_END, +    RFU_UNK35, +    RFU_UNK36, +    RFU_RESUME_RETRANSMIT_AND_CHANGE, +    RFU_UNK38, +    RFU_UNK39, +    RFU_UNK3A, +    RFU_UNK3B, +    RFU_UNK3C, +    RFU_STOP_MODE, //3D +}; + +struct RfuPacket8 +{ +    u8 data[0x74]; +}; + +struct RfuPacket32 +{ +    u32 command; +    u32 data[0x1C]; +}; + +union RfuPacket +{ +    struct RfuPacket32 rfuPacket32; +    struct RfuPacket8 rfuPacket8; +}; + +struct RfuStruct +{ +    vs32 unk_0; +    u8 txParams; +    u8 unk_5; +    u8 activeCommand; +    u8 unk_7; +    u8 unk_8; +    u8 unk_9; +    u8 timerSelect; +    u8 unk_b; +    int timerState; +    vu8 timerActive; +    u8 unk_11; +    vu16 unk_12; +    vu8 msMode; +    u8 unk_15; +    u8 unk_16; +    u8 unk_17; +    void (*callbackM)(); +    void (*callbackS)(); +    u32 callbackID; +    union RfuPacket *txPacket; +    union RfuPacket *rxPacket; +    vu8 unk_2c; +    u8 padding[3]; +}; + +struct RfuIntrStruct +{ +    u8 rxPacketAlloc[0x74]; +    u8 txPacketAlloc[0x74]; +    u8 block1[0x960]; +    u8 block2[0x30]; +}; + +extern struct RfuStruct *gRfuState; + +void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); | 
