Finish link.s decomp
This commit is contained in:
-1157
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
|||||||
|
gLinkPartnersHeldKeys
|
||||||
|
gLinkDebugSeed
|
||||||
|
gLocalLinkPlayerBlock
|
||||||
|
gLinkErrorOccurred
|
||||||
|
gLinkDebugFlags
|
||||||
|
gFiller_3003EB4
|
||||||
|
gRemoteLinkPlayersNotReceived
|
||||||
|
gBlockReceivedStatus
|
||||||
|
gFiller_3003EC0
|
||||||
|
gLinkHeldKeys
|
||||||
|
gRecvCmds
|
||||||
|
gLinkStatus
|
||||||
|
gUnknown_3003F24
|
||||||
|
gUnknown_3003F28
|
||||||
|
gUnknown_3003F2C
|
||||||
|
gUnknown_3003F30
|
||||||
|
gUnknown_3003F34
|
||||||
|
gSuppressLinkErrorMessage
|
||||||
|
gWirelessCommType
|
||||||
|
gSavedLinkPlayerCount
|
||||||
|
gSendCmd
|
||||||
|
gSavedMultiplayerId
|
||||||
|
gReceivedRemoteLinkPlayers
|
||||||
|
gLinkTestBGInfo
|
||||||
|
gLinkCallback
|
||||||
|
gShouldAdvanceLinkState
|
||||||
|
gLinkTestBlockChecksums
|
||||||
|
gBlockRequestType
|
||||||
|
gFiller_3003F94
|
||||||
|
gFiller_3003F98
|
||||||
|
gFiller_3003F9C
|
||||||
|
gLastSendQueueCount
|
||||||
|
gLink
|
||||||
|
gLastRecvQueueCount
|
||||||
|
gLinkSavedIme
|
||||||
@@ -9,6 +9,9 @@
|
|||||||
#define QUEUE_CAPACITY 50
|
#define QUEUE_CAPACITY 50
|
||||||
#define BLOCK_BUFFER_SIZE 0x100
|
#define BLOCK_BUFFER_SIZE 0x100
|
||||||
|
|
||||||
|
#define LINK_SLAVE 0
|
||||||
|
#define LINK_MASTER 8
|
||||||
|
|
||||||
#define LINK_STAT_LOCAL_ID 0x00000003
|
#define LINK_STAT_LOCAL_ID 0x00000003
|
||||||
#define LINK_STAT_PLAYER_COUNT 0x0000001C
|
#define LINK_STAT_PLAYER_COUNT 0x0000001C
|
||||||
#define LINK_STAT_PLAYER_COUNT_SHIFT 2
|
#define LINK_STAT_PLAYER_COUNT_SHIFT 2
|
||||||
@@ -18,6 +21,8 @@
|
|||||||
#define LINK_STAT_CONN_ESTABLISHED_SHIFT 6
|
#define LINK_STAT_CONN_ESTABLISHED_SHIFT 6
|
||||||
#define LINK_STAT_RECEIVED_NOTHING 0x00000100
|
#define LINK_STAT_RECEIVED_NOTHING 0x00000100
|
||||||
#define LINK_STAT_RECEIVED_NOTHING_SHIFT 8
|
#define LINK_STAT_RECEIVED_NOTHING_SHIFT 8
|
||||||
|
#define LINK_STAT_UNK_FLAG_9 0x00000200
|
||||||
|
#define LINK_STAT_UNK_FLAG_9_SHIFT 9
|
||||||
#define LINK_STAT_ERRORS 0x0007F000
|
#define LINK_STAT_ERRORS 0x0007F000
|
||||||
#define LINK_STAT_ERRORS_SHIFT 12
|
#define LINK_STAT_ERRORS_SHIFT 12
|
||||||
|
|
||||||
@@ -250,5 +255,6 @@ void CreateWirelessStatusIndicatorSprite(u8, u8);
|
|||||||
void sub_8009FE8(void);
|
void sub_8009FE8(void);
|
||||||
void ClearLinkCallback_2(void);
|
void ClearLinkCallback_2(void);
|
||||||
void sub_80FA42C(void);
|
void sub_80FA42C(void);
|
||||||
|
void sub_800B284(struct LinkPlayer * linkPlayer);
|
||||||
|
|
||||||
#endif // GUARD_LINK_H
|
#endif // GUARD_LINK_H
|
||||||
|
|||||||
@@ -38,5 +38,6 @@ bool32 sub_80FAE94(void);
|
|||||||
bool32 sub_80FAEF0(void);
|
bool32 sub_80FAEF0(void);
|
||||||
bool32 IsRfuRecvQueueEmpty(void);
|
bool32 IsRfuRecvQueueEmpty(void);
|
||||||
u32 GetRfuRecvQueueLength(void);
|
u32 GetRfuRecvQueueLength(void);
|
||||||
|
void sub_80F8DC0(void);
|
||||||
|
|
||||||
#endif //GUARD_LINK_RFU_H
|
#endif //GUARD_LINK_RFU_H
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ SECTIONS {
|
|||||||
src/sprite.o(.text);
|
src/sprite.o(.text);
|
||||||
src/string_util.o(.text);
|
src/string_util.o(.text);
|
||||||
src/link.o(.text);
|
src/link.o(.text);
|
||||||
asm/link.o(.text);
|
|
||||||
src/multiboot.o(.text);
|
src/multiboot.o(.text);
|
||||||
asm/main_menu.o(.text);
|
asm/main_menu.o(.text);
|
||||||
src/battle_controllers.o(.text);
|
src/battle_controllers.o(.text);
|
||||||
|
|||||||
+559
-62
@@ -53,7 +53,6 @@ struct LinkTestBGInfo
|
|||||||
|
|
||||||
#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT)
|
#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT)
|
||||||
|
|
||||||
#define static __attribute__((section(".bss")))
|
|
||||||
static struct BlockTransfer sBlockSend;
|
static struct BlockTransfer sBlockSend;
|
||||||
ALIGNED(8) static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
|
ALIGNED(8) static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
|
||||||
static u32 sBlockSendDelayCounter;
|
static u32 sBlockSendDelayCounter;
|
||||||
@@ -63,23 +62,23 @@ static u32 sPlayerDataExchangeStatus;
|
|||||||
static u32 gUnknown_3000E58;
|
static u32 gUnknown_3000E58;
|
||||||
static u8 sLinkTestLastBlockSendPos;
|
static u8 sLinkTestLastBlockSendPos;
|
||||||
ALIGNED(8) static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
|
ALIGNED(8) static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
|
||||||
|
// File break?
|
||||||
static u8 sNumVBlanksWithoutSerialIntr;
|
static u8 sNumVBlanksWithoutSerialIntr;
|
||||||
static bool8 sSendBufferEmpty;
|
static bool8 sSendBufferEmpty;
|
||||||
static u16 sSendNonzeroCheck;
|
static u16 sSendNonzeroCheck;
|
||||||
static u16 sRecvNonzeroCheck;
|
static u16 sRecvNonzeroCheck;
|
||||||
static u8 sChecksumAvailable;
|
static u8 sChecksumAvailable;
|
||||||
static u8 sHandshakePlayerCount;
|
static u8 sHandshakePlayerCount;
|
||||||
#undef static
|
|
||||||
|
|
||||||
u16 gLinkPartnersHeldKeys[6];
|
u16 gLinkPartnersHeldKeys[6];
|
||||||
u32 gLinkDebugSeed;
|
u32 gLinkDebugSeed;
|
||||||
struct LinkPlayerBlock gLocalLinkPlayerBlock;
|
struct LinkPlayerBlock gLocalLinkPlayerBlock;
|
||||||
bool8 gLinkErrorOccurred;
|
bool8 gLinkErrorOccurred;
|
||||||
u32 gLinkDebugFlags;
|
u32 gLinkDebugFlags;
|
||||||
//u32 gFiller_03003074;
|
u32 gFiller_3003EB4;
|
||||||
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
|
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
|
||||||
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
|
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
|
||||||
//u32 gFiller_03003080;
|
u32 gFiller_3003EC0;
|
||||||
u16 gLinkHeldKeys;
|
u16 gLinkHeldKeys;
|
||||||
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
||||||
u32 gLinkStatus;
|
u32 gLinkStatus;
|
||||||
@@ -99,15 +98,13 @@ void (*gLinkCallback)(void);
|
|||||||
u8 gShouldAdvanceLinkState;
|
u8 gShouldAdvanceLinkState;
|
||||||
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
|
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
|
||||||
u8 gBlockRequestType;
|
u8 gBlockRequestType;
|
||||||
//u32 gFiller_03003154;
|
u32 gFiller_3003F94; // file
|
||||||
//u32 gFiller_03003158;
|
u32 gFiller_3003F98; // boundary
|
||||||
//u32 gFiller_0300315c;
|
u32 gFiller_3003F9C; // here?
|
||||||
u8 gLastSendQueueCount;
|
u8 gLastSendQueueCount;
|
||||||
struct Link gLink;
|
struct Link gLink;
|
||||||
u8 gLastRecvQueueCount;
|
u8 gLastRecvQueueCount;
|
||||||
u16 gLinkSavedIme;
|
u16 gLinkSavedIme;
|
||||||
//u32 gFiller_03004138;
|
|
||||||
//u32 gFiller_0300413C;
|
|
||||||
|
|
||||||
EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = FALSE;
|
EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = FALSE;
|
||||||
EWRAM_DATA bool8 gUnknown_2022111 = FALSE;
|
EWRAM_DATA bool8 gUnknown_2022111 = FALSE;
|
||||||
@@ -129,34 +126,42 @@ EWRAM_DATA struct {
|
|||||||
EWRAM_DATA u16 gUnknown_202285C = 0;
|
EWRAM_DATA u16 gUnknown_202285C = 0;
|
||||||
EWRAM_DATA void *gUnknown_2022860 = NULL;
|
EWRAM_DATA void *gUnknown_2022860 = NULL;
|
||||||
|
|
||||||
void InitLocalLinkPlayer(void);
|
static void InitLocalLinkPlayer(void);
|
||||||
void sub_800978C(void);
|
static void sub_800978C(void);
|
||||||
void CB2_LinkTest(void);
|
static void CB2_LinkTest(void);
|
||||||
void ProcessRecvCmds(u8 id);
|
static void ProcessRecvCmds(u8 id);
|
||||||
void sub_800A040(void);
|
static void sub_800A040(void);
|
||||||
void ResetBlockSend(void);
|
static void ResetBlockSend(void);
|
||||||
bool32 InitBlockSend(const void * src, size_t size);
|
static bool32 InitBlockSend(const void *src, size_t size);
|
||||||
void LinkCB_BlockSendBegin(void);
|
static void LinkCB_BlockSendBegin(void);
|
||||||
void LinkCB_BlockSend(void);
|
static void LinkCB_BlockSend(void);
|
||||||
void LinkCB_BlockSendEnd(void);
|
static void LinkCB_BlockSendEnd(void);
|
||||||
void sub_800A3CC(void);
|
static void sub_800A3CC(void);
|
||||||
void SetBlockReceivedFlag(u8 id);
|
static void SetBlockReceivedFlag(u8 id);
|
||||||
u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
||||||
void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||||
void LinkCB_RequestPlayerDataExchange(void);
|
static void LinkCB_RequestPlayerDataExchange(void);
|
||||||
void Task_PrintTestData(u8 taskId);
|
static void Task_PrintTestData(u8 taskId);
|
||||||
void sub_800AB0C(void);
|
static void sub_800AB0C(void);
|
||||||
void sub_800AB38(void);
|
static void sub_800AB38(void);
|
||||||
void sub_800ABD4(void);
|
static void sub_800ABD4(void);
|
||||||
void sub_800AC00(void);
|
static void sub_800AC00(void);
|
||||||
void CheckErrorStatus(void);
|
static void CheckErrorStatus(void);
|
||||||
void CB2_PrintErrorMessage(void);
|
static void CB2_PrintErrorMessage(void);
|
||||||
void EnableSerial(void);
|
static void sub_800B210(void);
|
||||||
void sub_800B210(void);
|
static void DisableSerial(void);
|
||||||
void sub_80F8DC0(void);
|
static void EnableSerial(void);
|
||||||
void DisableSerial(void);
|
static bool8 IsSioMultiMaster(void);
|
||||||
void sub_800B284(struct LinkPlayer * linkPlayer);
|
static void CheckMasterOrSlave(void);
|
||||||
bool8 IsSioMultiMaster(void);
|
static void InitTimer(void);
|
||||||
|
static void EnqueueSendCmd(u16 *sendCmd);
|
||||||
|
static void DequeueRecvCmds(u16 (*recvCmds)[CMD_LENGTH]);
|
||||||
|
static void StartTransfer(void);
|
||||||
|
static bool8 DoHandshake(void);
|
||||||
|
static void DoRecv(void);
|
||||||
|
static void DoSend(void);
|
||||||
|
static void StopTimer(void);
|
||||||
|
static void SendRecvDone(void);
|
||||||
|
|
||||||
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
|
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
|
||||||
const u16 gWirelessLinkDisplay4bpp[] = INCBIN_U16("graphics/interface/wireless_link_display.4bpp.lz");
|
const u16 gWirelessLinkDisplay4bpp[] = INCBIN_U16("graphics/interface/wireless_link_display.4bpp.lz");
|
||||||
@@ -314,7 +319,7 @@ void SetLocalLinkPlayerId(u8 playerId)
|
|||||||
gLocalLinkPlayer.id = playerId;
|
gLocalLinkPlayer.id = playerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitLocalLinkPlayer(void)
|
static void InitLocalLinkPlayer(void)
|
||||||
{
|
{
|
||||||
gLocalLinkPlayer.trainerId = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
gLocalLinkPlayer.trainerId = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||||
StringCopy(gLocalLinkPlayer.name, gSaveBlock2Ptr->playerName);
|
StringCopy(gLocalLinkPlayer.name, gSaveBlock2Ptr->playerName);
|
||||||
@@ -330,7 +335,7 @@ void InitLocalLinkPlayer(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800978C(void)
|
static void sub_800978C(void)
|
||||||
{
|
{
|
||||||
LoadOam();
|
LoadOam();
|
||||||
ProcessSpriteCopyRequests();
|
ProcessSpriteCopyRequests();
|
||||||
@@ -471,7 +476,7 @@ void LinkTestProcessKeyInput(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CB2_LinkTest(void)
|
static void CB2_LinkTest(void)
|
||||||
{
|
{
|
||||||
LinkTestProcessKeyInput();
|
LinkTestProcessKeyInput();
|
||||||
TestBlockTransfer(1, 1, 0);
|
TestBlockTransfer(1, 1, 0);
|
||||||
@@ -734,7 +739,7 @@ bool32 IsSendingKeysToLink(void)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800A040(void)
|
static void sub_800A040(void)
|
||||||
{
|
{
|
||||||
if (gReceivedRemoteLinkPlayers == TRUE)
|
if (gReceivedRemoteLinkPlayers == TRUE)
|
||||||
{
|
{
|
||||||
@@ -884,7 +889,7 @@ void ResetLinkPlayers(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResetBlockSend(void)
|
static void ResetBlockSend(void)
|
||||||
{
|
{
|
||||||
sBlockSend.active = FALSE;
|
sBlockSend.active = FALSE;
|
||||||
sBlockSend.pos = 0;
|
sBlockSend.pos = 0;
|
||||||
@@ -892,7 +897,7 @@ void ResetBlockSend(void)
|
|||||||
sBlockSend.src = NULL;
|
sBlockSend.src = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool32 InitBlockSend(const void *src, size_t size)
|
static bool32 InitBlockSend(const void *src, size_t size)
|
||||||
{
|
{
|
||||||
if (sBlockSend.active)
|
if (sBlockSend.active)
|
||||||
{
|
{
|
||||||
@@ -920,7 +925,7 @@ bool32 InitBlockSend(const void *src, size_t size)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinkCB_BlockSendBegin(void)
|
static void LinkCB_BlockSendBegin(void)
|
||||||
{
|
{
|
||||||
if (++sBlockSendDelayCounter > 2)
|
if (++sBlockSendDelayCounter > 2)
|
||||||
{
|
{
|
||||||
@@ -928,7 +933,7 @@ void LinkCB_BlockSendBegin(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinkCB_BlockSend(void)
|
static void LinkCB_BlockSend(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const u8 *src;
|
const u8 *src;
|
||||||
@@ -947,7 +952,7 @@ void LinkCB_BlockSend(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinkCB_BlockSendEnd(void)
|
static void LinkCB_BlockSendEnd(void)
|
||||||
{
|
{
|
||||||
gLinkCallback = NULL;
|
gLinkCallback = NULL;
|
||||||
}
|
}
|
||||||
@@ -958,7 +963,7 @@ void sub_800A3AC(void)
|
|||||||
gUnknown_2022114++;
|
gUnknown_2022114++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800A3CC(void)
|
static void sub_800A3CC(void)
|
||||||
{
|
{
|
||||||
gUnknown_2022114 = 0;
|
gUnknown_2022114 = 0;
|
||||||
gLinkCallback = sub_800A3AC;
|
gLinkCallback = sub_800A3AC;
|
||||||
@@ -1086,7 +1091,7 @@ void CheckShouldAdvanceLinkState(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size)
|
static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size)
|
||||||
{
|
{
|
||||||
u16 chksum;
|
u16 chksum;
|
||||||
u16 i;
|
u16 i;
|
||||||
@@ -1115,7 +1120,7 @@ void LinkTest_prntchar(char a0, u8 a1, u8 a2)
|
|||||||
vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + gLinkTestBGInfo.dummy_8);
|
vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + gLinkTestBGInfo.dummy_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2)
|
static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2)
|
||||||
{
|
{
|
||||||
char sp[32 / 2];
|
char sp[32 / 2];
|
||||||
int i;
|
int i;
|
||||||
@@ -1155,7 +1160,7 @@ void LinkTest_prntstr(const char *a0, u8 a1, u8 a2)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LinkCB_RequestPlayerDataExchange(void)
|
static void LinkCB_RequestPlayerDataExchange(void)
|
||||||
{
|
{
|
||||||
if (gLinkStatus & LINK_STAT_MASTER)
|
if (gLinkStatus & LINK_STAT_MASTER)
|
||||||
{
|
{
|
||||||
@@ -1164,7 +1169,7 @@ void LinkCB_RequestPlayerDataExchange(void)
|
|||||||
gLinkCallback = NULL;
|
gLinkCallback = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Task_PrintTestData(u8 taskId)
|
static void Task_PrintTestData(u8 taskId)
|
||||||
{
|
{
|
||||||
char sp[32];
|
char sp[32];
|
||||||
int i;
|
int i;
|
||||||
@@ -1345,7 +1350,7 @@ void sub_800AAC0(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800AB0C(void)
|
static void sub_800AB0C(void)
|
||||||
{
|
{
|
||||||
if (gLastRecvQueueCount == 0)
|
if (gLastRecvQueueCount == 0)
|
||||||
{
|
{
|
||||||
@@ -1354,7 +1359,7 @@ void sub_800AB0C(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800AB38(void)
|
static void sub_800AB38(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned count;
|
unsigned count;
|
||||||
@@ -1395,7 +1400,7 @@ void sub_800AB9C(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800ABD4(void)
|
static void sub_800ABD4(void)
|
||||||
{
|
{
|
||||||
if (gLastRecvQueueCount == 0)
|
if (gLastRecvQueueCount == 0)
|
||||||
{
|
{
|
||||||
@@ -1404,7 +1409,7 @@ void sub_800ABD4(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800AC00(void)
|
static void sub_800AC00(void)
|
||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
u8 linkPlayerCount;
|
u8 linkPlayerCount;
|
||||||
@@ -1427,7 +1432,7 @@ void sub_800AC00(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckErrorStatus(void)
|
static void CheckErrorStatus(void)
|
||||||
{
|
{
|
||||||
if (gLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus))
|
if (gLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus))
|
||||||
{
|
{
|
||||||
@@ -1532,7 +1537,7 @@ void sub_800AED0(void)
|
|||||||
ShowBg(0);
|
ShowBg(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CB2_PrintErrorMessage(void)
|
static void CB2_PrintErrorMessage(void)
|
||||||
{
|
{
|
||||||
switch (gMain.state)
|
switch (gMain.state)
|
||||||
{
|
{
|
||||||
@@ -1601,7 +1606,7 @@ bool8 GetSioMultiSI(void)
|
|||||||
return (REG_SIOCNT & 0x04) != 0;
|
return (REG_SIOCNT & 0x04) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool8 IsSioMultiMaster(void)
|
static bool8 IsSioMultiMaster(void)
|
||||||
{
|
{
|
||||||
return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04);
|
return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04);
|
||||||
}
|
}
|
||||||
@@ -1686,7 +1691,7 @@ void sub_800B1F4(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800B210(void)
|
static void sub_800B210(void)
|
||||||
{
|
{
|
||||||
if (gReceivedRemoteLinkPlayers == 0)
|
if (gReceivedRemoteLinkPlayers == 0)
|
||||||
{
|
{
|
||||||
@@ -1720,13 +1725,15 @@ bool32 sub_800B270(void)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_800B284(struct LinkPlayer *player)
|
void sub_800B284(struct LinkPlayer * player)
|
||||||
{
|
{
|
||||||
player->name[10] = player->name[8];
|
player->name[10] = player->name[8];
|
||||||
ConvertInternationalString(player->name, player->language);
|
ConvertInternationalString(player->name, player->language);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisableSerial(void)
|
// File break?
|
||||||
|
|
||||||
|
static void DisableSerial(void)
|
||||||
{
|
{
|
||||||
DisableInterrupts(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
|
DisableInterrupts(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
|
||||||
REG_SIOCNT = SIO_MULTI_MODE;
|
REG_SIOCNT = SIO_MULTI_MODE;
|
||||||
@@ -1737,7 +1744,7 @@ void DisableSerial(void)
|
|||||||
CpuFill32(0, &gLink, sizeof(gLink));
|
CpuFill32(0, &gLink, sizeof(gLink));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnableSerial(void)
|
static void EnableSerial(void)
|
||||||
{
|
{
|
||||||
DisableInterrupts(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
|
DisableInterrupts(INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
|
||||||
REG_RCNT = 0;
|
REG_RCNT = 0;
|
||||||
@@ -1760,3 +1767,493 @@ void ResetSerial(void)
|
|||||||
EnableSerial();
|
EnableSerial();
|
||||||
DisableSerial();
|
DisableSerial();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENGTH])
|
||||||
|
{
|
||||||
|
u32 retVal;
|
||||||
|
u32 retVal2;
|
||||||
|
|
||||||
|
switch (gLink.state)
|
||||||
|
{
|
||||||
|
case LINK_STATE_START0:
|
||||||
|
DisableSerial();
|
||||||
|
gLink.state = LINK_STATE_START1;
|
||||||
|
break;
|
||||||
|
case LINK_STATE_START1:
|
||||||
|
if (*shouldAdvanceLinkState == 1)
|
||||||
|
{
|
||||||
|
EnableSerial();
|
||||||
|
gLink.state = LINK_STATE_HANDSHAKE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LINK_STATE_HANDSHAKE:
|
||||||
|
switch (*shouldAdvanceLinkState)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
CheckMasterOrSlave();
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if (gLink.isMaster == LINK_MASTER && gLink.playerCount > 1)
|
||||||
|
{
|
||||||
|
gLink.handshakeAsMaster = TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
gLink.state = LINK_STATE_START0;
|
||||||
|
REG_SIOMLT_SEND = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LINK_STATE_INIT_TIMER:
|
||||||
|
InitTimer();
|
||||||
|
gLink.state = LINK_STATE_CONN_ESTABLISHED;
|
||||||
|
// fallthrough
|
||||||
|
case LINK_STATE_CONN_ESTABLISHED:
|
||||||
|
EnqueueSendCmd(sendCmd);
|
||||||
|
DequeueRecvCmds(recvCmds);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*shouldAdvanceLinkState = 0;
|
||||||
|
retVal = gLink.localId;
|
||||||
|
retVal |= (gLink.playerCount << LINK_STAT_PLAYER_COUNT_SHIFT);
|
||||||
|
if (gLink.isMaster == LINK_MASTER)
|
||||||
|
{
|
||||||
|
retVal |= LINK_STAT_MASTER;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
u32 receivedNothing = gLink.receivedNothing << LINK_STAT_RECEIVED_NOTHING_SHIFT;
|
||||||
|
u32 link_field_F = gLink.link_field_F << LINK_STAT_UNK_FLAG_9_SHIFT;
|
||||||
|
u32 hardwareError = gLink.hardwareError << LINK_STAT_ERROR_HARDWARE_SHIFT;
|
||||||
|
u32 badChecksum = gLink.badChecksum << LINK_STAT_ERROR_CHECKSUM_SHIFT;
|
||||||
|
u32 queueFull = gLink.queueFull << LINK_STAT_ERROR_QUEUE_FULL_SHIFT;
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
if (gLink.state == LINK_STATE_CONN_ESTABLISHED)
|
||||||
|
{
|
||||||
|
val = LINK_STAT_CONN_ESTABLISHED;
|
||||||
|
val |= receivedNothing;
|
||||||
|
val |= retVal;
|
||||||
|
val |= link_field_F;
|
||||||
|
val |= hardwareError;
|
||||||
|
val |= badChecksum;
|
||||||
|
val |= queueFull;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
val = retVal;
|
||||||
|
val |= receivedNothing;
|
||||||
|
val |= link_field_F;
|
||||||
|
val |= hardwareError;
|
||||||
|
val |= badChecksum;
|
||||||
|
val |= queueFull;
|
||||||
|
}
|
||||||
|
|
||||||
|
retVal = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gLink.lag == LAG_MASTER)
|
||||||
|
{
|
||||||
|
retVal |= LINK_STAT_ERROR_LAG_MASTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gLink.localId >= MAX_LINK_PLAYERS)
|
||||||
|
{
|
||||||
|
retVal |= LINK_STAT_ERROR_INVALID_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
retVal2 = retVal;
|
||||||
|
if (gLink.lag == LAG_SLAVE)
|
||||||
|
{
|
||||||
|
retVal2 |= LINK_STAT_ERROR_LAG_SLAVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return retVal2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CheckMasterOrSlave(void)
|
||||||
|
{
|
||||||
|
u32 terminals;
|
||||||
|
|
||||||
|
terminals = *(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SD | SIO_MULTI_SI);
|
||||||
|
if (terminals == SIO_MULTI_SD && gLink.localId == 0)
|
||||||
|
{
|
||||||
|
gLink.isMaster = LINK_MASTER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLink.isMaster = LINK_SLAVE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void InitTimer(void)
|
||||||
|
{
|
||||||
|
if (gLink.isMaster)
|
||||||
|
{
|
||||||
|
REG_TM3CNT_L = -197;
|
||||||
|
REG_TM3CNT_H = TIMER_64CLK | TIMER_INTR_ENABLE;
|
||||||
|
EnableInterrupts(INTR_FLAG_TIMER3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void EnqueueSendCmd(u16 *sendCmd)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 offset;
|
||||||
|
|
||||||
|
gLinkSavedIme = REG_IME;
|
||||||
|
REG_IME = 0;
|
||||||
|
if (gLink.sendQueue.count < QUEUE_CAPACITY)
|
||||||
|
{
|
||||||
|
offset = gLink.sendQueue.pos + gLink.sendQueue.count;
|
||||||
|
if (offset >= QUEUE_CAPACITY)
|
||||||
|
{
|
||||||
|
offset -= QUEUE_CAPACITY;
|
||||||
|
}
|
||||||
|
for (i = 0; i < CMD_LENGTH; i++)
|
||||||
|
{
|
||||||
|
sSendNonzeroCheck |= *sendCmd;
|
||||||
|
gLink.sendQueue.data[i][offset] = *sendCmd;
|
||||||
|
*sendCmd = 0;
|
||||||
|
sendCmd++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLink.queueFull = QUEUE_FULL_SEND;
|
||||||
|
}
|
||||||
|
if (sSendNonzeroCheck)
|
||||||
|
{
|
||||||
|
gLink.sendQueue.count++;
|
||||||
|
sSendNonzeroCheck = 0;
|
||||||
|
}
|
||||||
|
REG_IME = gLinkSavedIme;
|
||||||
|
gLastSendQueueCount = gLink.sendQueue.count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DequeueRecvCmds(u16 (*recvCmds)[CMD_LENGTH])
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 j;
|
||||||
|
|
||||||
|
gLinkSavedIme = REG_IME;
|
||||||
|
REG_IME = 0;
|
||||||
|
if (gLink.recvQueue.count == 0)
|
||||||
|
{
|
||||||
|
for (i = 0; i < gLink.playerCount; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < CMD_LENGTH; j++)
|
||||||
|
{
|
||||||
|
recvCmds[i][j] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gLink.receivedNothing = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < gLink.playerCount; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < CMD_LENGTH; j++)
|
||||||
|
{
|
||||||
|
recvCmds[i][j] = gLink.recvQueue.data[i][j][gLink.recvQueue.pos];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gLink.recvQueue.count--;
|
||||||
|
gLink.recvQueue.pos++;
|
||||||
|
if (gLink.recvQueue.pos >= QUEUE_CAPACITY)
|
||||||
|
{
|
||||||
|
gLink.recvQueue.pos = 0;
|
||||||
|
}
|
||||||
|
gLink.receivedNothing = FALSE;
|
||||||
|
}
|
||||||
|
REG_IME = gLinkSavedIme;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkVSync(void)
|
||||||
|
{
|
||||||
|
if (gLink.isMaster)
|
||||||
|
{
|
||||||
|
switch (gLink.state)
|
||||||
|
{
|
||||||
|
case LINK_STATE_CONN_ESTABLISHED:
|
||||||
|
if (gLink.serialIntrCounter < 9)
|
||||||
|
{
|
||||||
|
if (gLink.hardwareError != TRUE)
|
||||||
|
{
|
||||||
|
gLink.lag = LAG_MASTER;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StartTransfer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gLink.lag != LAG_MASTER)
|
||||||
|
{
|
||||||
|
gLink.serialIntrCounter = 0;
|
||||||
|
StartTransfer();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LINK_STATE_HANDSHAKE:
|
||||||
|
StartTransfer();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (gLink.state == LINK_STATE_CONN_ESTABLISHED || gLink.state == LINK_STATE_HANDSHAKE)
|
||||||
|
{
|
||||||
|
if (++sNumVBlanksWithoutSerialIntr > 10)
|
||||||
|
{
|
||||||
|
if (gLink.state == LINK_STATE_CONN_ESTABLISHED)
|
||||||
|
{
|
||||||
|
gLink.lag = LAG_SLAVE;
|
||||||
|
}
|
||||||
|
if (gLink.state == LINK_STATE_HANDSHAKE)
|
||||||
|
{
|
||||||
|
gLink.playerCount = 0;
|
||||||
|
gLink.link_field_F = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Timer3Intr(void)
|
||||||
|
{
|
||||||
|
StopTimer();
|
||||||
|
StartTransfer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SerialCB(void)
|
||||||
|
{
|
||||||
|
gLink.localId = SIO_MULTI_CNT->id;
|
||||||
|
switch (gLink.state)
|
||||||
|
{
|
||||||
|
case LINK_STATE_CONN_ESTABLISHED:
|
||||||
|
gLink.hardwareError = SIO_MULTI_CNT->error;
|
||||||
|
DoRecv();
|
||||||
|
DoSend();
|
||||||
|
SendRecvDone();
|
||||||
|
break;
|
||||||
|
case LINK_STATE_HANDSHAKE:
|
||||||
|
if (DoHandshake())
|
||||||
|
{
|
||||||
|
if (gLink.isMaster)
|
||||||
|
{
|
||||||
|
gLink.state = LINK_STATE_INIT_TIMER;
|
||||||
|
gLink.serialIntrCounter = 8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLink.state = LINK_STATE_CONN_ESTABLISHED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
gLink.serialIntrCounter++;
|
||||||
|
sNumVBlanksWithoutSerialIntr = 0;
|
||||||
|
if (gLink.serialIntrCounter == 8)
|
||||||
|
{
|
||||||
|
gLastRecvQueueCount = gLink.recvQueue.count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void StartTransfer(void)
|
||||||
|
{
|
||||||
|
REG_SIOCNT |= SIO_START;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool8 DoHandshake(void)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 playerCount;
|
||||||
|
u16 minRecv;
|
||||||
|
|
||||||
|
playerCount = 0;
|
||||||
|
minRecv = 0xFFFF;
|
||||||
|
if (gLink.handshakeAsMaster == TRUE)
|
||||||
|
{
|
||||||
|
REG_SIOMLT_SEND = MASTER_HANDSHAKE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
REG_SIOMLT_SEND = SLAVE_HANDSHAKE;
|
||||||
|
}
|
||||||
|
*(u64 *)gLink.tempRecvBuffer = REG_SIOMLT_RECV;
|
||||||
|
REG_SIOMLT_RECV = 0;
|
||||||
|
gLink.handshakeAsMaster = FALSE;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
if ((gLink.tempRecvBuffer[i] & ~0x3) == SLAVE_HANDSHAKE || gLink.tempRecvBuffer[i] == MASTER_HANDSHAKE)
|
||||||
|
{
|
||||||
|
playerCount++;
|
||||||
|
if (minRecv > gLink.tempRecvBuffer[i] && gLink.tempRecvBuffer[i] != 0)
|
||||||
|
{
|
||||||
|
minRecv = gLink.tempRecvBuffer[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gLink.tempRecvBuffer[i] != 0xFFFF)
|
||||||
|
{
|
||||||
|
playerCount = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gLink.playerCount = playerCount;
|
||||||
|
if (gLink.playerCount > 1 && gLink.playerCount == sHandshakePlayerCount && gLink.tempRecvBuffer[0] == MASTER_HANDSHAKE)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (gLink.playerCount > 1)
|
||||||
|
{
|
||||||
|
gLink.link_field_F = (minRecv & 3) + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLink.link_field_F = 0;
|
||||||
|
}
|
||||||
|
sHandshakePlayerCount = gLink.playerCount;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DoRecv(void)
|
||||||
|
{
|
||||||
|
u16 recv[4];
|
||||||
|
u8 i;
|
||||||
|
u8 index;
|
||||||
|
|
||||||
|
*(u64 *)recv = REG_SIOMLT_RECV;
|
||||||
|
if (gLink.sendCmdIndex == 0)
|
||||||
|
{
|
||||||
|
for (i = 0; i < gLink.playerCount; i++)
|
||||||
|
{
|
||||||
|
if (gLink.checksum != recv[i] && sChecksumAvailable)
|
||||||
|
{
|
||||||
|
gLink.badChecksum = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gLink.checksum = 0;
|
||||||
|
sChecksumAvailable = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = gLink.recvQueue.pos + gLink.recvQueue.count;
|
||||||
|
if (index >= QUEUE_CAPACITY)
|
||||||
|
{
|
||||||
|
index -= QUEUE_CAPACITY;
|
||||||
|
}
|
||||||
|
if (gLink.recvQueue.count < QUEUE_CAPACITY)
|
||||||
|
{
|
||||||
|
for (i = 0; i < gLink.playerCount; i++)
|
||||||
|
{
|
||||||
|
gLink.checksum += recv[i];
|
||||||
|
sRecvNonzeroCheck |= recv[i];
|
||||||
|
gLink.recvQueue.data[i][gLink.recvCmdIndex][index] = recv[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLink.queueFull = QUEUE_FULL_RECV;
|
||||||
|
}
|
||||||
|
gLink.recvCmdIndex++;
|
||||||
|
if (gLink.recvCmdIndex == CMD_LENGTH && sRecvNonzeroCheck)
|
||||||
|
{
|
||||||
|
gLink.recvQueue.count++;
|
||||||
|
sRecvNonzeroCheck = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void DoSend(void)
|
||||||
|
{
|
||||||
|
if (gLink.sendCmdIndex == CMD_LENGTH)
|
||||||
|
{
|
||||||
|
REG_SIOMLT_SEND = gLink.checksum;
|
||||||
|
if (!sSendBufferEmpty)
|
||||||
|
{
|
||||||
|
gLink.sendQueue.count--;
|
||||||
|
gLink.sendQueue.pos++;
|
||||||
|
if (gLink.sendQueue.pos >= QUEUE_CAPACITY)
|
||||||
|
{
|
||||||
|
gLink.sendQueue.pos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sSendBufferEmpty = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!sSendBufferEmpty && gLink.sendQueue.count == 0)
|
||||||
|
{
|
||||||
|
sSendBufferEmpty = TRUE;
|
||||||
|
}
|
||||||
|
if (sSendBufferEmpty)
|
||||||
|
{
|
||||||
|
REG_SIOMLT_SEND = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
REG_SIOMLT_SEND = gLink.sendQueue.data[gLink.sendCmdIndex][gLink.sendQueue.pos];
|
||||||
|
}
|
||||||
|
gLink.sendCmdIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void StopTimer(void)
|
||||||
|
{
|
||||||
|
if (gLink.isMaster)
|
||||||
|
{
|
||||||
|
REG_TM3CNT_H &= ~TIMER_ENABLE;
|
||||||
|
REG_TM3CNT_L = -197;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SendRecvDone(void)
|
||||||
|
{
|
||||||
|
if (gLink.recvCmdIndex == CMD_LENGTH)
|
||||||
|
{
|
||||||
|
gLink.sendCmdIndex = 0;
|
||||||
|
gLink.recvCmdIndex = 0;
|
||||||
|
}
|
||||||
|
else if (gLink.isMaster)
|
||||||
|
{
|
||||||
|
REG_TM3CNT_H |= TIMER_ENABLE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetSendBuffer(void)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 j;
|
||||||
|
|
||||||
|
gLink.sendQueue.count = 0;
|
||||||
|
gLink.sendQueue.pos = 0;
|
||||||
|
for (i = 0; i < CMD_LENGTH; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < QUEUE_CAPACITY; j++)
|
||||||
|
{
|
||||||
|
gLink.sendQueue.data[i][j] = 0xEFFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetRecvBuffer(void)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 j;
|
||||||
|
u8 k;
|
||||||
|
|
||||||
|
gLink.recvQueue.count = 0;
|
||||||
|
gLink.recvQueue.pos = 0;
|
||||||
|
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
for (j = 0; j < CMD_LENGTH; j++)
|
||||||
|
{
|
||||||
|
for (k = 0; k < QUEUE_CAPACITY; k++)
|
||||||
|
{
|
||||||
|
gLink.recvQueue.data[i][j][k] = 0xEFFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+1
-90
@@ -4,98 +4,9 @@
|
|||||||
.include "window.o"
|
.include "window.o"
|
||||||
.include "text.o"
|
.include "text.o"
|
||||||
.include "sprite.o"
|
.include "sprite.o"
|
||||||
|
.include "link.o"
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
gLinkPartnersHeldKeys: @ 3003E60
|
|
||||||
.space 0xC
|
|
||||||
|
|
||||||
gLinkDebugSeed: @ 3003E6C
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gLocalLinkPlayerBlock: @ 3003E70
|
|
||||||
.space 0x3C
|
|
||||||
|
|
||||||
gLinkErrorOccurred: @ 3003EAC
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gLinkDebugFlags: @ 3003EB0
|
|
||||||
.space 0x8
|
|
||||||
|
|
||||||
gRemoteLinkPlayersNotReceived: @ 3003EB8
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gBlockReceivedStatus: @ 3003EBC
|
|
||||||
.space 0x8
|
|
||||||
|
|
||||||
gLinkHeldKeys: @ 3003EC4
|
|
||||||
.space 0xC
|
|
||||||
|
|
||||||
gRecvCmds: @ 3003ED0
|
|
||||||
.space 0x50
|
|
||||||
|
|
||||||
gLinkStatus: @ 3003F20
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_3003F24: @ 3003F24
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_3003F28: @ 3003F28
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_3003F2C: @ 3003F2C
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_3003F30: @ 3003F30
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_3003F34: @ 3003F34
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gSuppressLinkErrorMessage: @ 3003F38
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gWirelessCommType: @ 3003F3C
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gSavedLinkPlayerCount: @ 3003F40
|
|
||||||
.space 0x10
|
|
||||||
|
|
||||||
gSendCmd: @ 3003F50
|
|
||||||
.space 0x10
|
|
||||||
|
|
||||||
gSavedMultiplayerId: @ 3003F60
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gReceivedRemoteLinkPlayers: @ 3003F64
|
|
||||||
.space 0xC
|
|
||||||
|
|
||||||
gLinkTestBGInfo: @ 3003F70
|
|
||||||
.space 0x10
|
|
||||||
|
|
||||||
gLinkCallback: @ 3003F80
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gShouldAdvanceLinkState: @ 3003F84
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gLinkTestBlockChecksums: @ 3003F88
|
|
||||||
.space 0x8
|
|
||||||
|
|
||||||
gBlockRequestType: @ 3003F90
|
|
||||||
.space 0x10
|
|
||||||
|
|
||||||
gLastSendQueueCount: @ 3003FA0
|
|
||||||
.space 0x10
|
|
||||||
|
|
||||||
gLink: @ 3003FB0
|
|
||||||
.space 0xFC0
|
|
||||||
|
|
||||||
gLastRecvQueueCount: @ 3004F70
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gLinkSavedIme: @ 3004F74
|
|
||||||
.space 0xC
|
|
||||||
|
|
||||||
gPreBattleCallback1: @ 3004F80
|
gPreBattleCallback1: @ 3004F80
|
||||||
.space 0x4
|
.space 0x4
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user