summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorshinyquagsire23 <mtinc2@gmail.com>2017-10-21 13:42:31 -0600
committershinyquagsire23 <mtinc2@gmail.com>2017-10-21 13:46:41 -0600
commit482b42a295a80952cea75a8176183692b8e8d120 (patch)
treef239e5ae03b612741dd979e5dd4b6c7831094dc0 /src
parentdd316b28e017d24567a86e972d780a43d42cd140 (diff)
Split librfu into separate C files in its own directory, rfu_initializeAPI matching except for register differences
Diffstat (limited to 'src')
-rw-r--r--src/librfu_intr.c4
-rw-r--r--src/librfu_rfu.c109
-rw-r--r--src/librfu_stwi.c (renamed from src/librfu.c)111
3 files changed, 118 insertions, 106 deletions
diff --git a/src/librfu_intr.c b/src/librfu_intr.c
new file mode 100644
index 000000000..bdf8b072a
--- /dev/null
+++ b/src/librfu_intr.c
@@ -0,0 +1,4 @@
+#include "global.h"
+#include "main.h"
+
+//TODO: decompile asm/librfu_intr.s to here
diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c
new file mode 100644
index 000000000..cf3fe12ad
--- /dev/null
+++ b/src/librfu_rfu.c
@@ -0,0 +1,109 @@
+#include "global.h"
+#include "main.h"
+
+#include "librfu.h"
+
+struct RfuUnk1
+{
+ u8 unk_0[0x14];
+ u32 unk_14;
+ u32 unk_18;
+ struct RfuIntrStruct unk_1c;
+};
+
+struct RfuUnk2
+{
+ u8 unk_0[0x68];
+ u32 unk_68;
+ u32 unk_6c;
+ u8 unk_70[0x70];
+};
+
+struct RfuUnk3
+{
+ u32 unk_0;
+ u32 unk_4;
+ u8 unk_8[0xD4];
+ u32 unk_dc;
+};
+
+extern u32 *gUnknown_03007890;
+extern u32 *gUnknown_03007894;
+extern struct RfuUnk3* gUnknown_03007898;
+extern struct RfuUnk2* gUnknown_03007880[4];
+extern struct RfuUnk1* gUnknown_03007870[4];
+extern void* sub_82E53F4;
+extern void rfu_STC_clearAPIVariables(void);
+
+// Nonmatching, only register differences
+/*u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam)
+{
+ u16 i;
+ u16 *v13;
+ u16 *v12;
+ u16 num;
+
+ if (((u32)unk0 & 0xF000000) == 0x2000000 && copyInterruptToRam)
+ {
+ return 2;
+ }
+
+ if ((u32)unk0 & 3)
+ return 2;
+
+ // Nintendo pls, just use a ternary for once
+ if (copyInterruptToRam)
+ {
+ // An assert/debug print may have existed before, ie
+ // printf("%s %u < %u", "somefile.c:12345", unk1, num)
+ // to push this into r3?
+ num = 0xe64;
+ if (unk1 < num)
+ return 1;
+ }
+
+ if (copyInterruptToRam == FALSE)
+ {
+ num = 0x504; // same as above, this should be r3 not r0
+ if (unk1 < num)
+ return 1;
+ }
+ gUnknown_03007890 = unk0;
+ gUnknown_03007894 = unk0 + (0xB4 / sizeof(u32));
+ gUnknown_03007898 = (struct RfuUnk3*)(unk0 + (0xDC / sizeof(u32)));
+ gUnknown_03007880[0] = (struct RfuUnk2*)(unk0 + (0x1BC / sizeof(u32)));
+ gUnknown_03007870[0] = (struct RfuUnk1*)(unk0 + (0x37C / sizeof(u32)));
+
+ for (i = 1; i < 4; i++, num)
+ {
+ gUnknown_03007880[i] = (struct RfuUnk2*)&gUnknown_03007880[i-1]->unk_70;
+ gUnknown_03007870[i] = (struct RfuUnk1*)&gUnknown_03007870[i-1]->unk_1c;
+ }
+
+ gUnknown_03007898->unk_dc = (u32)&gUnknown_03007870[3]->unk_1c;
+ STWI_init_all(&gUnknown_03007870[3]->unk_1c, interrupt, copyInterruptToRam);
+ rfu_STC_clearAPIVariables();
+
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_03007880[i]->unk_68 = 0;
+ gUnknown_03007880[i]->unk_6c = 0;
+ gUnknown_03007870[i]->unk_14 = 0;
+ gUnknown_03007870[i]->unk_18 = 0;
+ }
+
+ // Not matching, register differences
+ v12 = (u16*)((u32)&sub_82E53F4 & ~1);
+ v13 = (u16*)gUnknown_03007898->unk_8;
+
+ for (i = 47; i != 0xFFFF; i--)
+ {
+ *v13 = *v12;
+ ++v12;
+ ++v13;
+ }
+
+ gUnknown_03007898->unk_4 = (u32)(&gUnknown_03007898->unk_8[1]);
+
+ return 0;
+}*/
diff --git a/src/librfu.c b/src/librfu_stwi.c
index e647b9178..21d38bb38 100644
--- a/src/librfu.c
+++ b/src/librfu_stwi.c
@@ -1,111 +1,10 @@
#include "global.h"
-#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];
-};
+#include "librfu.h"
extern IntrFunc IntrSIO32(void);
-extern struct RfuStruct *gRfuState;
+
+extern void STWI_stop_timer(void);
+
void STWI_init_Callback_M(void);
void STWI_init_Callback_S(void);
void STWI_set_Callback_M(void * callback);
@@ -114,7 +13,7 @@ u16 STWI_init(u8 request);
int STWI_start_Command(void);
void STWI_intr_timer(void);
void STWI_set_timer(u8 unk);
-extern void STWI_stop_timer(void);
+
int STWI_restart_Command(void);
int STWI_reset_ClockCounter(void);