link through TestBlockTransfer + bss, ewram
This commit is contained in:
@@ -51,7 +51,7 @@ int EReader_Send(size_t r6, const void * r5)
|
||||
{
|
||||
GetKeyInput();
|
||||
if (TEST_BUTTON(sJoyNew, B_BUTTON))
|
||||
gUnknown_3003F84 = 2;
|
||||
gShouldAdvanceLinkState = 2;
|
||||
|
||||
sSendRecvStatus = EReaderHandleTransfer(1, r6, r5, NULL);
|
||||
if ((sSendRecvStatus & 0x13) == 0x10)
|
||||
@@ -71,7 +71,7 @@ int EReader_Send(size_t r6, const void * r5)
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_3003F84 = 0;
|
||||
gShouldAdvanceLinkState = 0;
|
||||
VBlankIntrWait();
|
||||
}
|
||||
}
|
||||
@@ -90,7 +90,7 @@ int EReader_Recv(void * r5)
|
||||
{
|
||||
GetKeyInput();
|
||||
if (TEST_BUTTON(sJoyNew, B_BUTTON))
|
||||
gUnknown_3003F84 = 2;
|
||||
gShouldAdvanceLinkState = 2;
|
||||
|
||||
sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, r5);
|
||||
if ((sSendRecvStatus & 0x13) == 0x10)
|
||||
@@ -110,7 +110,7 @@ int EReader_Recv(void * r5)
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_3003F84 = 0;
|
||||
gShouldAdvanceLinkState = 0;
|
||||
VBlankIntrWait();
|
||||
}
|
||||
}
|
||||
@@ -150,7 +150,7 @@ static void OpenSerial32(void)
|
||||
REG_RCNT = 0;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE;
|
||||
REG_SIOCNT |= SIO_MULTI_SD;
|
||||
gUnknown_3003F84 = 0;
|
||||
gShouldAdvanceLinkState = 0;
|
||||
sCounter1 = 0;
|
||||
sCounter2 = 0;
|
||||
}
|
||||
@@ -167,7 +167,7 @@ u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu
|
||||
case 1:
|
||||
if (DetermineSendRecvState(mode))
|
||||
EnableSio();
|
||||
if (gUnknown_3003F84 == 2)
|
||||
if (gShouldAdvanceLinkState == 2)
|
||||
{
|
||||
sSendRecvMgr.field_04 = 2;
|
||||
sSendRecvMgr.state = 6;
|
||||
@@ -179,7 +179,7 @@ u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu
|
||||
sSendRecvMgr.state = 3;
|
||||
// fallthrough
|
||||
case 3:
|
||||
if (gUnknown_3003F84 == 2)
|
||||
if (gShouldAdvanceLinkState == 2)
|
||||
{
|
||||
sSendRecvMgr.field_04 = 2;
|
||||
sSendRecvMgr.state = 6;
|
||||
|
||||
+1
-1
@@ -561,7 +561,7 @@ static bool8 sub_80EC62C(void)
|
||||
}
|
||||
break;
|
||||
case 142:
|
||||
sub_800B388();
|
||||
ResetSerial();
|
||||
SetMainCallback2(sub_80EC5B8);
|
||||
break;
|
||||
}
|
||||
|
||||
+162
-2
@@ -27,18 +27,68 @@ struct LinkTestBGInfo
|
||||
u32 dummy_C;
|
||||
};
|
||||
|
||||
u32 gUnknown_3000E58;
|
||||
#define static __attribute__((section(".bss")))
|
||||
static struct BlockTransfer sBlockSend;
|
||||
ALIGNED(8) static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
|
||||
static u32 sBlockSendDelayCounter;
|
||||
static u32 gUnknown_3000E4C;
|
||||
static u8 gUnknown_3000E50;
|
||||
static u32 sPlayerDataExchangeStatus;
|
||||
static u32 gUnknown_3000E58;
|
||||
static u8 sLinkTestLastBlockSendPos;
|
||||
ALIGNED(8) static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
|
||||
static u8 sNumVBlanksWithoutSerialIntr;
|
||||
static bool8 sSendBufferEmpty;
|
||||
static u16 sSendNonzeroCheck;
|
||||
static u16 sRecvNonzeroCheck;
|
||||
static u8 sChecksumAvailable;
|
||||
static u8 sHandshakePlayerCount;
|
||||
#undef static
|
||||
|
||||
struct LinkTestBGInfo gLinkTestBGInfo;
|
||||
bool8 gLinkErrorOccurred;
|
||||
bool8 gSuppressLinkErrorMessage;
|
||||
void (*gLinkCallback)(void);
|
||||
bool8 gUnknown_3003F28;
|
||||
bool8 gUnknown_3003F24;
|
||||
u16 gUnknown_3003F34;
|
||||
u8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
|
||||
u8 gUnknown_3003F30[MAX_LINK_PLAYERS];
|
||||
u8 gUnknown_3003F2C[MAX_LINK_PLAYERS];
|
||||
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
|
||||
|
||||
EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = FALSE;
|
||||
EWRAM_DATA bool8 gUnknown_2022111 = FALSE;
|
||||
EWRAM_DATA u32 gUnknown_2022114 = 0;
|
||||
EWRAM_DATA u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2] = {};
|
||||
EWRAM_DATA u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE] = {};
|
||||
EWRAM_DATA bool8 gLinkOpen = FALSE;
|
||||
EWRAM_DATA u16 gLinkType = 0;
|
||||
EWRAM_DATA u16 gLinkTimeOutCounter = 0;
|
||||
EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {};
|
||||
EWRAM_DATA struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS] = {};
|
||||
EWRAM_DATA struct LinkPlayer gSavedLinkPlayers[MAX_RFU_PLAYERS] = {};
|
||||
EWRAM_DATA struct {
|
||||
u32 status;
|
||||
u8 lastRecvQueueCount;
|
||||
u8 lastSendQueueCount;
|
||||
u8 unk_06;
|
||||
} sLinkErrorBuffer = {};
|
||||
EWRAM_DATA u16 gUnknown_202285C = 0;
|
||||
EWRAM_DATA void *gUnknown_2022860 = NULL;
|
||||
|
||||
void sub_800B210(void);
|
||||
void InitLocalLinkPlayer(void);
|
||||
void sub_800978C(void);
|
||||
u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
||||
void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||
void LinkCB_RequestPlayerDataExchange(void);
|
||||
void ResetBlockSend(void);
|
||||
void task00_link_test(u8 taskId);
|
||||
void CB2_LinkTest(void);
|
||||
void EnableSerial(void);
|
||||
void sub_800B210(void);
|
||||
void sub_80F8DC0(void);
|
||||
void DisableSerial(void);
|
||||
|
||||
extern const u16 gLinkTestDigitsPal[0x20];
|
||||
extern const u16 gLinkTestDigitsGfx[0x1000];
|
||||
@@ -151,3 +201,113 @@ void InitLocalLinkPlayer(void)
|
||||
gLocalLinkPlayer.name[8] |= 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800978C(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void InitLink(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
gSendCmd[i] = 0xEFFF;
|
||||
}
|
||||
gLinkOpen = TRUE;
|
||||
EnableSerial();
|
||||
}
|
||||
|
||||
void Task_TriggerHandshake(u8 taskId)
|
||||
{
|
||||
if (++gTasks[taskId].data[0] == 5)
|
||||
{
|
||||
gShouldAdvanceLinkState = 1;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenLink(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!gWirelessCommType)
|
||||
{
|
||||
ResetSerial();
|
||||
InitLink();
|
||||
gLinkCallback = LinkCB_RequestPlayerDataExchange;
|
||||
gLinkVSyncDisabled = FALSE;
|
||||
gLinkErrorOccurred = FALSE;
|
||||
gSuppressLinkErrorMessage = FALSE;
|
||||
ResetBlockReceivedFlags();
|
||||
ResetBlockSend();
|
||||
gUnknown_3000E4C = 0;
|
||||
gUnknown_3003F28 = FALSE;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = 0;
|
||||
CreateTask(Task_TriggerHandshake, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80F86F4();
|
||||
}
|
||||
gReceivedRemoteLinkPlayers = 0;
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gRemoteLinkPlayersNotReceived[i] = TRUE;
|
||||
gUnknown_3003F30[i] = FALSE;
|
||||
gUnknown_3003F2C[i] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void CloseLink(void)
|
||||
{
|
||||
gReceivedRemoteLinkPlayers = FALSE;
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_80F8DC0();
|
||||
}
|
||||
gLinkOpen = FALSE;
|
||||
DisableSerial();
|
||||
}
|
||||
|
||||
void TestBlockTransfer(u8 nothing, u8 is, u8 used)
|
||||
{
|
||||
u8 i;
|
||||
u8 status;
|
||||
|
||||
if (sLinkTestLastBlockSendPos != sBlockSend.pos)
|
||||
{
|
||||
LinkTest_prnthex(sBlockSend.pos, 2, 3, 2);
|
||||
sLinkTestLastBlockSendPos = sBlockSend.pos;
|
||||
}
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos)
|
||||
{
|
||||
LinkTest_prnthex(sBlockRecv[i].pos, 2, i + 4, 2);
|
||||
sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos;
|
||||
}
|
||||
}
|
||||
status = GetBlockReceivedStatus();
|
||||
if (status == 0xF) // 0b1111
|
||||
{
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
if ((status >> i) & 1)
|
||||
{
|
||||
gLinkTestBlockChecksums[i] = LinkTestCalcBlockChecksum(gBlockRecvBuffer[i], sBlockRecv[i].size);
|
||||
ResetBlockReceivedFlag(i);
|
||||
if (gLinkTestBlockChecksums[i] != 0x0342)
|
||||
{
|
||||
gLinkTestDebugValuesEnabled = FALSE;
|
||||
gUnknown_2022111 = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ u8 sub_8143674(struct MEvent_Str_1 *mgr)
|
||||
resp = 2;
|
||||
if (mgr->status & 4)
|
||||
resp = 3;
|
||||
gUnknown_3003F84 = 0;
|
||||
gShouldAdvanceLinkState = 0;
|
||||
return resp;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user