link through BuildSendCmd

This commit is contained in:
PikalaxALT
2019-10-06 18:03:46 -04:00
parent 221dd4721d
commit 5620b0ed1a
14 changed files with 608 additions and 1075 deletions
+2 -2
View File
@@ -2460,7 +2460,7 @@ sub_8081A90: @ 8081A90
cmp r1, r0
ble _08081AC2
bl CloseLink
ldr r0, _08081ADC @ =c2_800ACD4
ldr r0, _08081ADC @ =CB2_LinkError
bl SetMainCallback2
adds r0, r4, 0
bl DestroyTask
@@ -2477,7 +2477,7 @@ _08081AD0:
bx r0
.align 2, 0
_08081AD8: .4byte gTasks
_08081ADC: .4byte c2_800ACD4
_08081ADC: .4byte CB2_LinkError
_08081AE0: .4byte gReceivedRemoteLinkPlayers
thumb_func_end sub_8081A90
+169 -952
View File
File diff suppressed because it is too large Load Diff
+34 -34
View File
@@ -2244,7 +2244,7 @@ rfu_func_080F97B8: @ 80F97B8
ldrb r0, [r0]
cmp r0, 0
beq _080F97EA
ldr r3, _080F97F4 @ =gUnknown_3005028
ldr r3, _080F97F4 @ =gHeldKeyCodeToSend
ldrh r2, [r3]
cmp r2, 0
beq _080F97EA
@@ -2268,7 +2268,7 @@ _080F97EA:
bx r0
.align 2, 0
_080F97F0: .4byte gReceivedRemoteLinkPlayers
_080F97F4: .4byte gUnknown_3005028
_080F97F4: .4byte gHeldKeyCodeToSend
_080F97F8: .4byte gLinkTransferringData
_080F97FC: .4byte gUnknown_3001188
thumb_func_end rfu_func_080F97B8
@@ -2444,12 +2444,12 @@ _080F9914:
beq _080F9924
b _080F9BF8
_080F9924:
ldr r1, _080F9948 @ =gUnknown_3003ED2
ldr r1, _080F9948 @ =gRecvCmds + 2
adds r0, r2, r1
ldrh r0, [r0]
ldr r3, _080F993C @ =gUnknown_3005450
strb r0, [r3, 0xD]
ldr r4, _080F994C @ =gUnknown_3003ED4
ldr r4, _080F994C @ =gRecvCmds + 4
adds r0, r2, r4
bl sub_80F9770
ldr r1, _080F9950 @ =gUnknown_3005DD6
@@ -2459,8 +2459,8 @@ _080F9924:
_080F993C: .4byte gUnknown_3005450
_080F9940: .4byte gReceivedRemoteLinkPlayers
_080F9944: .4byte gUnknown_3007460
_080F9948: .4byte gUnknown_3003ED2
_080F994C: .4byte gUnknown_3003ED4
_080F9948: .4byte gRecvCmds + 2
_080F994C: .4byte gRecvCmds + 4
_080F9950: .4byte gUnknown_3005DD6
_080F9954:
ldr r2, _080F99AC @ =gUnknown_3005450
@@ -2484,13 +2484,13 @@ _080F9974:
adds r0, 0x80
movs r2, 0
strh r4, [r0]
ldr r1, _080F99B0 @ =gUnknown_3003ED2
ldr r1, _080F99B0 @ =gRecvCmds + 2
adds r0, r5, r1
ldrh r0, [r0]
adds r1, r3, 0
adds r1, 0x82
strh r0, [r1]
ldr r1, _080F99B4 @ =gUnknown_3003ED4
ldr r1, _080F99B4 @ =gRecvCmds + 4
adds r0, r5, r1
ldrh r1, [r0]
adds r0, r3, 0
@@ -2510,8 +2510,8 @@ _080F9974:
b _080F9BF8
.align 2, 0
_080F99AC: .4byte gUnknown_3005450
_080F99B0: .4byte gUnknown_3003ED2
_080F99B4: .4byte gUnknown_3003ED4
_080F99B0: .4byte gRecvCmds + 2
_080F99B4: .4byte gRecvCmds + 4
_080F99B8:
ldr r4, _080F9A88 @ =gUnknown_3005450
mov r9, r4
@@ -2628,7 +2628,7 @@ _080F9A94: .4byte gUnknown_843EBD4
_080F9A98: .4byte gReceivedRemoteLinkPlayers
_080F9A9C:
ldr r2, _080F9AB8 @ =gUnknown_843EC64
ldr r3, _080F9ABC @ =gUnknown_3003ED2
ldr r3, _080F9ABC @ =gRecvCmds + 2
adds r0, r5, r3
ldrh r1, [r0]
lsls r1, 3
@@ -2641,7 +2641,7 @@ _080F9A9C:
b _080F9BF4
.align 2, 0
_080F9AB8: .4byte gUnknown_843EC64
_080F9ABC: .4byte gUnknown_3003ED2
_080F9ABC: .4byte gRecvCmds + 2
_080F9AC0:
ldr r1, _080F9ACC @ =gUnknown_3005534
add r1, r8
@@ -2655,7 +2655,7 @@ _080F9AD0:
movs r4, 0x80
lsls r4, 1
adds r0, r2, r4
ldr r3, _080F9AFC @ =gUnknown_3003ED2
ldr r3, _080F9AFC @ =gRecvCmds + 2
adds r1, r5, r3
ldrh r0, [r0]
mov r6, r8
@@ -2673,7 +2673,7 @@ _080F9AEA:
b _080F9BF8
.align 2, 0
_080F9AF8: .4byte gUnknown_3005450
_080F9AFC: .4byte gUnknown_3003ED2
_080F9AFC: .4byte gRecvCmds + 2
_080F9B00:
ldr r7, _080F9B4C @ =gUnknown_3005450
ldrb r2, [r7, 0xC]
@@ -2685,7 +2685,7 @@ _080F9B00:
adds r6, 0x1
cmp r0, 0
beq _080F9BF8
ldr r0, _080F9B54 @ =gUnknown_3003ED2
ldr r0, _080F9B54 @ =gRecvCmds + 2
adds r4, r5, r0
ldrh r1, [r4]
ldr r0, _080F9B58 @ =gUnknown_3007460
@@ -2696,7 +2696,7 @@ _080F9B00:
beq _080F9B38
strb r2, [r3]
bl sub_80FEB14
ldr r1, _080F9B5C @ =gUnknown_3003ED4
ldr r1, _080F9B5C @ =gRecvCmds + 4
adds r0, r5, r1
ldrh r1, [r0]
ldr r2, _080F9B60 @ =0x0000099c
@@ -2714,9 +2714,9 @@ _080F9B38:
.align 2, 0
_080F9B4C: .4byte gUnknown_3005450
_080F9B50: .4byte gReceivedRemoteLinkPlayers
_080F9B54: .4byte gUnknown_3003ED2
_080F9B54: .4byte gRecvCmds + 2
_080F9B58: .4byte gUnknown_3007460
_080F9B5C: .4byte gUnknown_3003ED4
_080F9B5C: .4byte gRecvCmds + 4
_080F9B60: .4byte 0x0000099c
_080F9B64: .4byte gRecvCmds
_080F9B68:
@@ -2724,11 +2724,11 @@ _080F9B68:
lsls r0, 8
bl sub_80F9D04
ldr r1, _080F9B90 @ =gSendCmd
ldr r3, _080F9B94 @ =gUnknown_3003ED2
ldr r3, _080F9B94 @ =gRecvCmds + 2
adds r0, r5, r3
ldrh r0, [r0]
strh r0, [r1, 0x2]
ldr r4, _080F9B98 @ =gUnknown_3003ED4
ldr r4, _080F9B98 @ =gRecvCmds + 4
adds r0, r5, r4
ldrh r0, [r0]
strh r0, [r1, 0x4]
@@ -2740,8 +2740,8 @@ _080F9B68:
b _080F9BF4
.align 2, 0
_080F9B90: .4byte gSendCmd
_080F9B94: .4byte gUnknown_3003ED2
_080F9B98: .4byte gUnknown_3003ED4
_080F9B94: .4byte gRecvCmds + 2
_080F9B98: .4byte gRecvCmds + 4
_080F9B9C: .4byte gRecvCmds
_080F9BA0:
ldr r4, _080F9BD0 @ =gUnknown_3005450
@@ -2752,13 +2752,13 @@ _080F9BA0:
bne _080F9C34
ldr r0, _080F9BD4 @ =0x0000099b
adds r2, r4, r0
ldr r1, _080F9BD8 @ =gUnknown_3003ED2
ldr r1, _080F9BD8 @ =gRecvCmds + 2
adds r3, r5, r1
ldrb r1, [r3]
ldrb r0, [r2]
orrs r0, r1
strb r0, [r2]
ldr r2, _080F9BDC @ =gUnknown_3003ED4
ldr r2, _080F9BDC @ =gRecvCmds + 4
adds r0, r5, r2
ldrh r1, [r0]
ldr r2, _080F9BE0 @ =0x0000099c
@@ -2770,15 +2770,15 @@ _080F9BA0:
.align 2, 0
_080F9BD0: .4byte gUnknown_3005450
_080F9BD4: .4byte 0x0000099b
_080F9BD8: .4byte gUnknown_3003ED2
_080F9BDC: .4byte gUnknown_3003ED4
_080F9BD8: .4byte gRecvCmds + 2
_080F9BDC: .4byte gRecvCmds + 4
_080F9BE0: .4byte 0x0000099c
_080F9BE4:
ldr r0, _080F9C24 @ =gUnknown_3003E60
ldr r0, _080F9C24 @ =gLinkPartnersHeldKeys
mov r3, r8
lsls r1, r3, 1
adds r1, r0
ldr r4, _080F9C28 @ =gUnknown_3003ED2
ldr r4, _080F9C28 @ =gRecvCmds + 2
adds r0, r5, r4
ldrh r0, [r0]
strh r0, [r1]
@@ -2808,8 +2808,8 @@ _080F9BF8:
strb r1, [r2]
b _080F9C34
.align 2, 0
_080F9C24: .4byte gUnknown_3003E60
_080F9C28: .4byte gUnknown_3003ED2
_080F9C24: .4byte gLinkPartnersHeldKeys
_080F9C28: .4byte gRecvCmds + 2
_080F9C2C: .4byte gUnknown_3005450
_080F9C30:
adds r0, 0x1
@@ -3087,7 +3087,7 @@ _080F9E00:
.align 2, 0
_080F9E18: .4byte gUnknown_3005542
_080F9E1C:
ldr r0, _080F9E28 @ =gUnknown_3005028
ldr r0, _080F9E28 @ =gHeldKeyCodeToSend
ldrh r0, [r0]
_080F9E20:
strh r0, [r5, 0x2]
@@ -3096,7 +3096,7 @@ _080F9E22:
pop {r0}
bx r0
.align 2, 0
_080F9E28: .4byte gUnknown_3005028
_080F9E28: .4byte gHeldKeyCodeToSend
thumb_func_end sub_80F9D04
thumb_func_start sub_80F9E2C
@@ -5159,7 +5159,7 @@ sub_80FAD98: @ 80FAD98
movs r0, 0x2
strb r0, [r1]
_080FADC0:
ldr r4, _080FAE24 @ =c2_800ACD4
ldr r4, _080FAE24 @ =CB2_LinkError
adds r0, r4, 0
bl SetMainCallback2
str r4, [r6, 0x8]
@@ -5201,7 +5201,7 @@ _080FAE14: .4byte gUnknown_3005E10
_080FAE18: .4byte gMain
_080FAE1C: .4byte c2_mystery_gift_e_reader_run
_080FAE20: .4byte gWirelessCommType
_080FAE24: .4byte c2_800ACD4
_080FAE24: .4byte CB2_LinkError
_080FAE28: .4byte 0x0000069e
_080FAE2C: .4byte 0x000008d2
_080FAE30:
+11 -11
View File
@@ -5649,7 +5649,7 @@ c1_link_related: @ 8057884
_0805789E:
ldr r0, _080578CC @ =gUnknown_300502C
ldrb r4, [r0]
ldr r0, _080578D0 @ =gUnknown_3003E60
ldr r0, _080578D0 @ =gLinkPartnersHeldKeys
adds r1, r4, 0
bl sub_8057BE4
ldr r0, _080578D4 @ =gUnknown_3000E84
@@ -5667,7 +5667,7 @@ _080578C0:
.align 2, 0
_080578C8: .4byte gWirelessCommType
_080578CC: .4byte gUnknown_300502C
_080578D0: .4byte gUnknown_3003E60
_080578D0: .4byte gLinkPartnersHeldKeys
_080578D4: .4byte gUnknown_3000E84
thumb_func_end c1_link_related
@@ -5686,12 +5686,12 @@ _080578E8: .4byte sub_8057D5C
thumb_func_start sub_80578EC
sub_80578EC: @ 80578EC
push {lr}
ldr r0, _080578F8 @ =gUnknown_3003E60
ldr r0, _080578F8 @ =gLinkPartnersHeldKeys
bl sub_8057D48
pop {r0}
bx r0
.align 2, 0
_080578F8: .4byte gUnknown_3003E60
_080578F8: .4byte gLinkPartnersHeldKeys
thumb_func_end sub_80578EC
thumb_func_start c1_link_related_func_set
@@ -6126,14 +6126,14 @@ sub_8057C4C: @ 8057C4C
lsrs r0, 16
cmp r0, 0xC
bhi _08057C6C
ldr r0, _08057C68 @ =gUnknown_3005028
ldr r0, _08057C68 @ =gHeldKeyCodeToSend
strh r4, [r0]
b _08057C72
.align 2, 0
_08057C64: .4byte 0xffef0000
_08057C68: .4byte gUnknown_3005028
_08057C68: .4byte gHeldKeyCodeToSend
_08057C6C:
ldr r1, _08057CB0 @ =gUnknown_3005028
ldr r1, _08057CB0 @ =gHeldKeyCodeToSend
movs r0, 0x11
strh r0, [r1]
_08057C72:
@@ -6159,7 +6159,7 @@ _08057C72:
cmp r4, 0x18
blt _08057CA8
_08057CA2:
ldr r1, _08057CB0 @ =gUnknown_3005028
ldr r1, _08057CB0 @ =gHeldKeyCodeToSend
movs r0, 0
strh r0, [r1]
_08057CA8:
@@ -6167,7 +6167,7 @@ _08057CA8:
pop {r0}
bx r0
.align 2, 0
_08057CB0: .4byte gUnknown_3005028
_08057CB0: .4byte gHeldKeyCodeToSend
_08057CB4: .4byte gWirelessCommType
thumb_func_end sub_8057C4C
@@ -7114,14 +7114,14 @@ sub_805833C: @ 805833C
ldrb r0, [r0]
cmp r0, 0
bne _0805835C
ldr r0, _08058354 @ =gUnknown_3003FB0
ldr r0, _08058354 @ =gLink
ldr r1, _08058358 @ =0x00000339
adds r0, r1
ldrb r0, [r0]
b _08058364
.align 2, 0
_08058350: .4byte gWirelessCommType
_08058354: .4byte gUnknown_3003FB0
_08058354: .4byte gLink
_08058358: .4byte 0x00000339
_0805835C:
ldr r0, _08058368 @ =gUnknown_3005450
+2 -2
View File
@@ -7179,7 +7179,7 @@ _0804FF7A:
cmp r1, r0
bls _0804FFAC
bl CloseLink
ldr r0, _0804FFC0 @ =c2_800ACD4
ldr r0, _0804FFC0 @ =CB2_LinkError
bl SetMainCallback2
ldr r1, [r4]
adds r3, r1, 0
@@ -7203,7 +7203,7 @@ _0804FFAC:
pop {r0}
bx r0
.align 2, 0
_0804FFC0: .4byte c2_800ACD4
_0804FFC0: .4byte CB2_LinkError
thumb_func_end sub_804FF4C
thumb_func_start sub_804FFC4
BIN
View File
Binary file not shown.
+1 -28
View File
@@ -6,34 +6,7 @@
.section .rodata
.align 2
gUnknown_8231EC4:: @ 8231EC4
.incbin "baserom.gba", 0x231EC4, 0x20
.align 2
gWirelessLinkDisplay4bpp:: @ 8231EE4
.incbin "graphics/interface/wireless_link_display.4bpp.lz"
.align 2
gWirelessLinkDisplayBin:: @ 823238C
.incbin "graphics/interface/wireless_link_display.bin.lz"
.align 2
gLinkTestDigitsPal:: @ 8232578
.incbin "baserom.gba", 0x232578, 0x20
gLinkTestDigitsGfx:: @ 8232598
.incbin "baserom.gba", 0x232598, 0x2000
gUnknown_8234598:: @ 8234598
.incbin "baserom.gba", 0x234598, 0x28
gUnknown_82345C0:: @ 82345C0
.incbin "baserom.gba", 0x2345C0, 0x10
gUnknown_82345D0:: @ 82345D0
.incbin "baserom.gba", 0x2345D0, 0x18
.align 2, 0
gUnknown_82345E8:: @ 82345E8
.incbin "baserom.gba", 0x2345E8, 0x8
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_BG_REGS_H
#define GUARD_BG_REGS_H
extern const u8 gBGControlRegOffsets[];
#endif //GUARD_BG_REGS_H
+16 -2
View File
@@ -29,6 +29,21 @@
#define EXTRACT_RECEIVED_NOTHING(status) \
(((status) >> LINK_STAT_RECEIVED_NOTHING_SHIFT) & 1)
#define LINKCMD_SEND_LINK_TYPE 0x2222
#define LINKCMD_0x2FFE 0x2FFE
#define LINKCMD_SEND_HELD_KEYS 0x4444
#define LINKCMD_0x5555 0x5555
#define LINKCMD_0x5566 0x5566
#define LINKCMD_0x5FFF 0x5FFF
#define LINKCMD_0x6666 0x6666
#define LINKCMD_0x7777 0x7777
#define LINKCMD_CONT_BLOCK 0x8888
#define LINKCMD_0xAAAA 0xAAAA
#define LINKCMD_0xAAAB 0xAAAB
#define LINKCMD_INIT_BLOCK 0xBBBB
#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE
#define LINKCMD_0xCCCC 0xCCCC
#define MASTER_HANDSHAKE 0x8FFF
#define SLAVE_HANDSHAKE 0xB9A0
@@ -148,12 +163,11 @@ extern bool8 gLinkVSyncDisabled;
extern u8 gWirelessCommType;
extern u8 gShouldAdvanceLinkState;
extern u64 gSioMlt_Recv;
void Task_DestroySelf(u8);
void OpenLink(void);
void CloseLink(void);
u16 LinkMain2(u16 *);
u16 LinkMain2(const u16 *);
void sub_8007B14(void);
bool32 sub_8007B24(void);
void ClearLinkCallback(void);
+2
View File
@@ -71,4 +71,6 @@ void SeedRngAndSetTrainerId(void);
extern const char RomHeaderGameCode[4];
extern const char RomHeaderSoftwareVersion;
extern u8 gLinkTransferringData;
#endif // GUARD_MAIN_H
+1
View File
@@ -380,6 +380,7 @@ SECTIONS {
src/sprite.o(.rodata);
src/bg_regs.o(.rodata);
src/string_util.o(.rodata);
src/link.o(.rodata);
data/data.o(.rodata);
src/battle_util.o(.rodata);
src/battle_script_commands.o(.rodata);
+345 -16
View File
@@ -1,7 +1,10 @@
#include "global.h"
#include "palette.h"
#include "bg_regs.h"
#include "gpu_regs.h"
#include "link.h"
#include "decompress.h"
#include "malloc.h"
#include "save.h"
#include "quest_log.h"
#include "link_rfu.h"
#include "librfu.h"
@@ -9,6 +12,10 @@
#include "task.h"
#include "event_data.h"
#include "string_util.h"
#include "item_menu.h"
#include "link.h"
extern u16 gHeldKeyCodeToSend;
struct BlockTransfer
{
@@ -27,6 +34,8 @@ struct LinkTestBGInfo
u32 dummy_C;
};
#define SIO_MULTI_CNT ((struct SioMultiCnt *)REG_ADDR_SIOCNT)
#define static __attribute__((section(".bss")))
static struct BlockTransfer sBlockSend;
ALIGNED(8) static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
@@ -45,17 +54,43 @@ static u8 sChecksumAvailable;
static u8 sHandshakePlayerCount;
#undef static
struct LinkTestBGInfo gLinkTestBGInfo;
u16 gLinkPartnersHeldKeys[6];
u32 gLinkDebugSeed;
struct LinkPlayerBlock gLocalLinkPlayerBlock;
bool8 gLinkErrorOccurred;
bool8 gSuppressLinkErrorMessage;
void (*gLinkCallback)(void);
bool8 gUnknown_3003F28;
u32 gLinkDebugFlags;
//u32 gFiller_03003074;
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
//u32 gFiller_03003080;
u16 gLinkHeldKeys;
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus;
bool8 gUnknown_3003F24;
bool8 gUnknown_3003F28;
bool8 gUnknown_3003F2C[MAX_LINK_PLAYERS];
bool8 gUnknown_3003F30[MAX_LINK_PLAYERS];
u16 gUnknown_3003F34;
u8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
u8 gUnknown_3003F30[MAX_LINK_PLAYERS];
u8 gUnknown_3003F2C[MAX_LINK_PLAYERS];
u8 gSuppressLinkErrorMessage;
bool8 gWirelessCommType;
bool8 gSavedLinkPlayerCount;
u16 gSendCmd[CMD_LENGTH];
u8 gSavedMultiplayerId;
bool8 gReceivedRemoteLinkPlayers;
struct LinkTestBGInfo gLinkTestBGInfo;
void (*gLinkCallback)(void);
u8 gShouldAdvanceLinkState;
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
u8 gBlockRequestType;
//u32 gFiller_03003154;
//u32 gFiller_03003158;
//u32 gFiller_0300315c;
u8 gLastSendQueueCount;
struct Link gLink;
u8 gLastRecvQueueCount;
u16 gLinkSavedIme;
//u32 gFiller_03004138;
//u32 gFiller_0300413C;
EWRAM_DATA bool8 gLinkTestDebugValuesEnabled = FALSE;
EWRAM_DATA bool8 gUnknown_2022111 = FALSE;
@@ -79,20 +114,42 @@ EWRAM_DATA void *gUnknown_2022860 = NULL;
void InitLocalLinkPlayer(void);
void sub_800978C(void);
void CB2_LinkTest(void);
void ProcessRecvCmds(u8 id);
void InitBlockSend(const void * src, size_t size);
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);
void CheckErrorStatus(void);
void sub_800B284(struct LinkPlayer * linkPlayer);
void SetBlockReceivedFlag(u8 id);
void sub_800A3CC(void);
extern const u16 gLinkTestDigitsPal[0x20];
extern const u16 gLinkTestDigitsGfx[0x1000];
extern const u8 gBGControlRegOffsets[];
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 gWirelessLinkDisplayBin[] = INCBIN_U16("graphics/interface/wireless_link_display.bin.lz");
const u16 gLinkTestFontPal[] = INCBIN_U16("graphics/interface/link_test_font.gbapal");
const u16 gLinkTestFontGfx[] = INCBIN_U16("graphics/interface/link_test_font.4bpp");
const struct BlockRequest gUnknown_8234598[] = {
{gBlockSendBuffer, 200},
{gBlockSendBuffer, 200},
{gBlockSendBuffer, 100},
{gBlockSendBuffer, 220},
{gBlockSendBuffer, 40}
};
const char gASCIIGameFreakInc[] = "GameFreak inc.";
const char gASCIITestPrint[] = "TEST PRINT\n"
"P0\n"
"P1\n"
"P2\n"
"P3";
bool8 IsWirelessAdapterConnected(void)
{
@@ -121,8 +178,8 @@ void Task_DestroySelf(u8 taskId)
void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
{
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx);
LoadPalette(gLinkTestFontPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestFontGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestFontGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = a4;
@@ -144,8 +201,8 @@ void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBloc
void sub_80095BC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock)
{
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx);
LoadPalette(gLinkTestFontPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestFontGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestFontGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = 0;
@@ -311,3 +368,275 @@ void TestBlockTransfer(u8 nothing, u8 is, u8 used)
}
}
void LinkTestProcessKeyInput(void)
{
if (JOY_NEW(A_BUTTON))
{
gShouldAdvanceLinkState = 1;
}
if (JOY_HELD(B_BUTTON))
{
InitBlockSend(gHeap + 0x4000, 0x2004);
}
if (JOY_NEW(L_BUTTON))
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(2, 0, 0));
}
if (JOY_NEW(START_BUTTON))
{
SetSuppressLinkErrorMessage(TRUE);
}
if (JOY_NEW(R_BUTTON))
{
TrySavingData(1);
}
if (JOY_NEW(SELECT_BUTTON))
{
sub_800AAC0();
}
if (gLinkTestDebugValuesEnabled)
{
SetLinkDebugValues(gMain.vblankCounter2, gLinkCallback ? gLinkVSyncDisabled : gLinkVSyncDisabled | 0x10);
}
}
void CB2_LinkTest(void)
{
LinkTestProcessKeyInput();
TestBlockTransfer(1, 1, 0);
RunTasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
u16 LinkMain2(const u16 *heldKeys)
{
u8 i;
if (!gLinkOpen)
{
return 0;
}
for (i = 0; i < 8; i++)
{
gSendCmd[i] = 0;
}
gLinkHeldKeys = *heldKeys;
if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED)
{
ProcessRecvCmds(SIO_MULTI_CNT->id);
if (gLinkCallback != NULL)
{
gLinkCallback();
}
CheckErrorStatus();
}
return gLinkStatus;
}
void HandleReceiveRemoteLinkPlayer(u8 who)
{
int i;
int count;
count = 0;
gRemoteLinkPlayersNotReceived[who] = FALSE;
for (i = 0; i < GetLinkPlayerCount_2(); i++)
{
count += gRemoteLinkPlayersNotReceived[i];
}
if (count == 0 && gReceivedRemoteLinkPlayers == 0)
{
gReceivedRemoteLinkPlayers = 1;
}
}
void ProcessRecvCmds(u8 unused)
{
u16 i;
for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
gLinkPartnersHeldKeys[i] = 0;
if (gRecvCmds[i][0] == 0)
{
continue;
}
switch (gRecvCmds[i][0])
{
case LINKCMD_SEND_LINK_TYPE:
{
struct LinkPlayerBlock *block;
InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer;
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
InitBlockSend(block, sizeof(*block));
break;
}
case LINKCMD_SEND_HELD_KEYS:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
case LINKCMD_0x5555:
gUnknown_3003F28 = TRUE;
break;
case LINKCMD_0x5566:
gUnknown_3003F28 = TRUE;
break;
case LINKCMD_INIT_BLOCK:
{
struct BlockTransfer *blockRecv;
blockRecv = &sBlockRecv[i];
blockRecv->pos = 0;
blockRecv->size = gRecvCmds[i][1];
blockRecv->multiplayerId = gRecvCmds[i][2];
break;
}
case LINKCMD_CONT_BLOCK:
{
if (sBlockRecv[i].size > BLOCK_BUFFER_SIZE)
{
u16 *buffer;
u16 j;
buffer = (u16 *)gDecompressionBuffer;
for (j = 0; j < CMD_LENGTH - 1; j++)
{
buffer[(sBlockRecv[i].pos / 2) + j] = gRecvCmds[i][j + 1];
}
}
else
{
u16 j;
for (j = 0; j < CMD_LENGTH - 1; j++)
{
gBlockRecvBuffer[i][(sBlockRecv[i].pos / 2) + j] = gRecvCmds[i][j + 1];
}
}
sBlockRecv[i].pos += (CMD_LENGTH - 1) * 2;
if (sBlockRecv[i].pos >= sBlockRecv[i].size)
{
if (gRemoteLinkPlayersNotReceived[i] == TRUE)
{
struct LinkPlayerBlock *block;
struct LinkPlayer *linkPlayer;
block = (struct LinkPlayerBlock *)&gBlockRecvBuffer[i];
linkPlayer = &gLinkPlayers[i];
*linkPlayer = block->linkPlayer;
if ((linkPlayer->version & 0xFF) == VERSION_RUBY || (linkPlayer->version & 0xFF) == VERSION_SAPPHIRE)
{
linkPlayer->name[10] = 0;
linkPlayer->name[9] = 0;
linkPlayer->name[8] = 0;
}
sub_800B284(linkPlayer);
if (strcmp(block->magic1, gASCIIGameFreakInc) != 0
|| strcmp(block->magic2, gASCIIGameFreakInc) != 0)
{
SetMainCallback2(CB2_LinkError);
}
else
{
HandleReceiveRemoteLinkPlayer(i);
}
}
else
{
SetBlockReceivedFlag(i);
}
}
}
break;
case LINKCMD_0x5FFF:
gUnknown_3003F30[i] = TRUE;
break;
case LINKCMD_0x2FFE:
gUnknown_3003F2C[i] = TRUE;
break;
case LINKCMD_0xAAAA:
sub_800A3CC();
break;
case LINKCMD_0xCCCC:
SendBlock(0, gUnknown_8234598[gRecvCmds[i][1]].address, gUnknown_8234598[gRecvCmds[i][1]].size);
break;
case LINKCMD_SEND_HELD_KEYS_2:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break;
}
}
}
void BuildSendCmd(u16 command)
{
switch (command)
{
case LINKCMD_SEND_LINK_TYPE:
gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
gSendCmd[1] = gLinkType;
break;
case LINKCMD_0x2FFE:
gSendCmd[0] = LINKCMD_0x2FFE;
break;
case LINKCMD_SEND_HELD_KEYS:
gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
gSendCmd[1] = gMain.heldKeys;
break;
case LINKCMD_0x5555:
gSendCmd[0] = LINKCMD_0x5555;
break;
case LINKCMD_0x6666:
gSendCmd[0] = LINKCMD_0x6666;
gSendCmd[1] = 0;
break;
case LINKCMD_0x7777:
{
u8 i;
gSendCmd[0] = LINKCMD_0x7777;
for (i = 0; i < 5; i++)
{
gSendCmd[i + 1] = 0xEE;
}
break;
}
case LINKCMD_INIT_BLOCK:
gSendCmd[0] = LINKCMD_INIT_BLOCK;
gSendCmd[1] = sBlockSend.size;
gSendCmd[2] = sBlockSend.multiplayerId + 0x80;
break;
case LINKCMD_0xAAAA:
gSendCmd[0] = LINKCMD_0xAAAA;
break;
case LINKCMD_0xAAAB:
gSendCmd[0] = LINKCMD_0xAAAB;
gSendCmd[1] = gSpecialVar_ItemId;
break;
case LINKCMD_0xCCCC:
gSendCmd[0] = LINKCMD_0xCCCC;
gSendCmd[1] = gBlockRequestType;
break;
case LINKCMD_0x5FFF:
gSendCmd[0] = LINKCMD_0x5FFF;
gSendCmd[1] = gUnknown_3003F34;
break;
case LINKCMD_0x5566:
gSendCmd[0] = LINKCMD_0x5566;
break;
case LINKCMD_SEND_HELD_KEYS_2:
if (gHeldKeyCodeToSend == 0 || gLinkTransferringData)
{
break;
}
gSendCmd[0] = LINKCMD_SEND_HELD_KEYS_2;
gSendCmd[1] = gHeldKeyCodeToSend;
break;
}
}
+1 -1
View File
@@ -143,7 +143,7 @@ bool32 sub_81436EC(void)
vu16 imeBak = REG_IME;
u16 data[4];
REG_IME = 0;
*(u64 *)data = gSioMlt_Recv;
*(u64 *)data = *(u64 *)gLink.tempRecvBuffer;
REG_IME = imeBak;
if ( data[0] == 0xB9A0
&& data[1] == 0xCCD0
+18 -27
View File
@@ -6,40 +6,34 @@
.include "sprite.o"
.align 4
gUnknown_3003E60: @ 3003E60
gLinkPartnersHeldKeys: @ 3003E60
.space 0xC
gUnknown_3003E6C: @ 3003E6C
gLinkDebugSeed: @ 3003E6C
.space 0x4
gUnknown_3003E70: @ 3003E70
gLocalLinkPlayerBlock: @ 3003E70
.space 0x3C
gLinkErrorOccurred: @ 3003EAC
.space 0x4
gUnknown_3003EB0: @ 3003EB0
gLinkDebugFlags: @ 3003EB0
.space 0x8
gRemoteLinkPlayersNotReceived: @ 3003EB8
.space 0x4
gUnknown_3003EBC: @ 3003EBC
gBlockReceivedStatus: @ 3003EBC
.space 0x8
gUnknown_3003EC4: @ 3003EC4
gLinkHeldKeys: @ 3003EC4
.space 0xC
gRecvCmds: @ 3003ED0
.space 0x2
.space 0x50
gUnknown_3003ED2: @ 3003ED2
.space 0x2
gUnknown_3003ED4: @ 3003ED4
.space 0x4C
gUnknown_3003F20: @ 3003F20
gLinkStatus: @ 3003F20
.space 0x4
gUnknown_3003F24: @ 3003F24
@@ -63,13 +57,13 @@ gSuppressLinkErrorMessage: @ 3003F38
gWirelessCommType: @ 3003F3C
.space 0x4
gUnknown_3003F40: @ 3003F40
gSavedLinkPlayerCount: @ 3003F40
.space 0x10
gSendCmd: @ 3003F50
.space 0x10
gUnknown_3003F60: @ 3003F60
gSavedMultiplayerId: @ 3003F60
.space 0x4
gReceivedRemoteLinkPlayers: @ 3003F64
@@ -87,22 +81,19 @@ gShouldAdvanceLinkState: @ 3003F84
gLinkTestBlockChecksums: @ 3003F88
.space 0x8
gUnknown_3003F90: @ 3003F90
gBlockRequestType: @ 3003F90
.space 0x10
gUnknown_3003FA0: @ 3003FA0
gLastSendQueueCount: @ 3003FA0
.space 0x10
gUnknown_3003FB0: @ 3003FB0
gLink: @ 3003FB0
.space 0xFC0
gLastRecvQueueCount: @ 3004F70
.space 0x4
gSioMlt_Recv: @ 3003FB4
.space 0xFBC
gUnknown_3004F70: @ 3004F70
.space 0x4
gUnknown_3004F74: @ 3004F74
gLinkSavedIme: @ 3004F74
.space 0xC
gPreBattleCallback1: @ 3004F80
@@ -151,7 +142,7 @@ gFieldCallback: @ 3005020
gFieldCallback2: @ 3005024
.space 0x4
gUnknown_3005028: @ 3005028
gHeldKeyCodeToSend: @ 3005028
.space 0x4
gUnknown_300502C: @ 300502C