diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-10-06 18:03:46 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-10-06 18:03:46 -0400 |
commit | 5620b0ed1a330e38c0d4cdbbfea2c5ce75053925 (patch) | |
tree | b8ed6dff9b986ef0f24ee57e4b10429516f593ae | |
parent | 221dd4721d40abaebdbcf0823c924062c77311f5 (diff) |
link through BuildSendCmd
-rw-r--r-- | asm/cable_club.s | 4 | ||||
-rw-r--r-- | asm/link.s | 1121 | ||||
-rw-r--r-- | asm/link_rfu_2.s | 68 | ||||
-rw-r--r-- | asm/overworld.s | 22 | ||||
-rw-r--r-- | asm/trade.s | 4 | ||||
-rw-r--r-- | baserom.ips | bin | 2000346 -> 1992005 bytes | |||
-rw-r--r-- | data/data.s | 29 | ||||
-rw-r--r-- | include/bg_regs.h | 6 | ||||
-rw-r--r-- | include/link.h | 18 | ||||
-rw-r--r-- | include/main.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/link.c | 361 | ||||
-rw-r--r-- | src/mevent.c | 2 | ||||
-rw-r--r-- | sym_common.txt | 43 |
14 files changed, 607 insertions, 1074 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s index 4b93df7e4..03105bc3d 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -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 diff --git a/asm/link.s b/asm/link.s index db9b022bd..14131af9e 100644 --- a/asm/link.s +++ b/asm/link.s @@ -5,789 +5,6 @@ .text - thumb_func_start LinkTestProcessKeyInput -LinkTestProcessKeyInput: @ 80099D0 - push {r4,r5,lr} - sub sp, 0x4 - ldr r4, _08009A70 @ =gMain - ldrh r1, [r4, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080099E6 - ldr r1, _08009A74 @ =gShouldAdvanceLinkState - movs r0, 0x1 - strb r0, [r1] -_080099E6: - ldrh r1, [r4, 0x2C] - movs r5, 0x2 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080099FA - ldr r0, _08009A78 @ =gHeap + 0x4000 - ldr r1, _08009A7C @ =0x00002004 - bl InitBlockSend -_080099FA: - ldrh r1, [r4, 0x2E] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _08009A16 - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_08009A16: - ldrh r1, [r4, 0x2E] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08009A26 - movs r0, 0x1 - bl SetSuppressLinkErrorMessage -_08009A26: - ldrh r1, [r4, 0x2E] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _08009A38 - movs r0, 0x1 - bl TrySavingData -_08009A38: - ldrh r1, [r4, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _08009A46 - bl sub_800AAC0 -_08009A46: - ldr r0, _08009A80 @ =gLinkTestDebugValuesEnabled - ldrb r0, [r0] - cmp r0, 0 - beq _08009A66 - ldr r2, [r4, 0x24] - ldr r0, _08009A84 @ =gLinkVSyncDisabled - ldrb r1, [r0] - ldr r0, _08009A88 @ =gLinkCallback - ldr r0, [r0] - cmp r0, 0 - bne _08009A60 - movs r0, 0x10 - orrs r1, r0 -_08009A60: - adds r0, r2, 0 - bl SetLinkDebugValues -_08009A66: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08009A70: .4byte gMain -_08009A74: .4byte gShouldAdvanceLinkState -_08009A78: .4byte gHeap + 0x4000 -_08009A7C: .4byte 0x00002004 -_08009A80: .4byte gLinkTestDebugValuesEnabled -_08009A84: .4byte gLinkVSyncDisabled -_08009A88: .4byte gLinkCallback - thumb_func_end LinkTestProcessKeyInput - - thumb_func_start CB2_LinkTest -CB2_LinkTest: @ 8009A8C - push {lr} - bl LinkTestProcessKeyInput - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl TestBlockTransfer - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end CB2_LinkTest - - thumb_func_start LinkMain2 -LinkMain2: @ 8009AB0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _08009AC0 @ =gLinkOpen - ldrb r0, [r0] - cmp r0, 0 - bne _08009AC4 - movs r0, 0 - b _08009B0C - .align 2, 0 -_08009AC0: .4byte gLinkOpen -_08009AC4: - movs r1, 0 - ldr r5, _08009B14 @ =gUnknown_3003EC4 - ldr r3, _08009B18 @ =gSendCmd - movs r2, 0 -_08009ACC: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x7 - bls _08009ACC - ldrh r0, [r4] - strh r0, [r5] - ldr r0, _08009B1C @ =gUnknown_3003F20 - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08009B08 - ldr r0, _08009B20 @ =0x04000128 - ldr r0, [r0] - lsls r0, 26 - lsrs r0, 30 - bl sub_8009B70 - ldr r0, _08009B24 @ =gLinkCallback - ldr r0, [r0] - cmp r0, 0 - beq _08009B04 - bl _call_via_r0 -_08009B04: - bl sub_800AC58 -_08009B08: - ldr r0, _08009B1C @ =gUnknown_3003F20 - ldrh r0, [r0] -_08009B0C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08009B14: .4byte gUnknown_3003EC4 -_08009B18: .4byte gSendCmd -_08009B1C: .4byte gUnknown_3003F20 -_08009B20: .4byte 0x04000128 -_08009B24: .4byte gLinkCallback - thumb_func_end LinkMain2 - - thumb_func_start HandleReceiveRemoteLinkPlayer -HandleReceiveRemoteLinkPlayer: @ 8009B28 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - ldr r1, _08009B3C @ =gRemoteLinkPlayersNotReceived - adds r0, r1 - strb r5, [r0] - movs r4, 0 - adds r6, r1, 0 - b _08009B48 - .align 2, 0 -_08009B3C: .4byte gRemoteLinkPlayersNotReceived -_08009B40: - adds r0, r4, r6 - ldrb r0, [r0] - adds r5, r0 - adds r4, 0x1 -_08009B48: - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - blt _08009B40 - cmp r5, 0 - bne _08009B64 - ldr r1, _08009B6C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r1] - cmp r0, 0 - bne _08009B64 - movs r0, 0x1 - strb r0, [r1] -_08009B64: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08009B6C: .4byte gReceivedRemoteLinkPlayers - thumb_func_end HandleReceiveRemoteLinkPlayer - - thumb_func_start sub_8009B70 -sub_8009B70: @ 8009B70 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - movs r6, 0 -_08009B7E: - ldr r0, _08009BC8 @ =gUnknown_3003E60 - lsls r1, r6, 1 - adds r3, r1, r0 - movs r0, 0 - strh r0, [r3] - lsls r4, r6, 4 - ldr r5, _08009BCC @ =gRecvCmds - adds r2, r4, r5 - ldrh r0, [r2] - mov r12, r1 - adds r7, r6, 0x1 - str r7, [sp] - cmp r0, 0 - bne _08009B9C - b _08009E3E -_08009B9C: - ldrh r1, [r2] - ldr r0, _08009BD0 @ =0x00005fff - cmp r1, r0 - bne _08009BA6 - b _08009DF0 -_08009BA6: - cmp r1, r0 - bgt _08009BF4 - ldr r0, _08009BD4 @ =0x00004444 - cmp r1, r0 - bne _08009BB2 - b _08009E34 -_08009BB2: - cmp r1, r0 - bgt _08009BE0 - ldr r0, _08009BD8 @ =0x00002222 - cmp r1, r0 - beq _08009C38 - ldr r0, _08009BDC @ =0x00002ffe - cmp r1, r0 - bne _08009BC4 - b _08009DF8 -_08009BC4: - b _08009E3E - .align 2, 0 -_08009BC8: .4byte gUnknown_3003E60 -_08009BCC: .4byte gRecvCmds -_08009BD0: .4byte 0x00005fff -_08009BD4: .4byte 0x00004444 -_08009BD8: .4byte 0x00002222 -_08009BDC: .4byte 0x00002ffe -_08009BE0: - ldr r0, _08009BF0 @ =0x00005555 - cmp r1, r0 - beq _08009C88 - adds r0, 0x11 - cmp r1, r0 - beq _08009C88 - b _08009E3E - .align 2, 0 -_08009BF0: .4byte 0x00005555 -_08009BF4: - ldr r0, _08009C10 @ =0x0000bbbb - cmp r1, r0 - beq _08009C94 - cmp r1, r0 - bgt _08009C1C - ldr r0, _08009C14 @ =0x00008888 - cmp r1, r0 - beq _08009CC0 - ldr r0, _08009C18 @ =0x0000aaaa - cmp r1, r0 - bne _08009C0C - b _08009E08 -_08009C0C: - b _08009E3E - .align 2, 0 -_08009C10: .4byte 0x0000bbbb -_08009C14: .4byte 0x00008888 -_08009C18: .4byte 0x0000aaaa -_08009C1C: - ldr r0, _08009C30 @ =0x0000cafe - cmp r1, r0 - bne _08009C24 - b _08009E34 -_08009C24: - ldr r0, _08009C34 @ =0x0000cccc - cmp r1, r0 - bne _08009C2C - b _08009E0E -_08009C2C: - b _08009E3E - .align 2, 0 -_08009C30: .4byte 0x0000cafe -_08009C34: .4byte 0x0000cccc -_08009C38: - bl InitLocalLinkPlayer - ldr r0, _08009C7C @ =gUnknown_3003E70 - adds r2, r0, 0 - adds r2, 0x10 - ldr r1, _08009C80 @ =gLocalLinkPlayer - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - ldm r1!, {r3,r6,r7} - stm r2!, {r3,r6,r7} - ldr r1, [r1] - str r1, [r2] - ldr r4, _08009C84 @ =gUnknown_82345C0 - adds r2, r0, 0 - adds r1, r4, 0 - ldm r1!, {r5-r7} - stm r2!, {r5-r7} - ldrh r3, [r1] - strh r3, [r2] - ldrb r1, [r1, 0x2] - strb r1, [r2, 0x2] - adds r1, r0, 0 - adds r1, 0x2C - ldm r4!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldrh r2, [r4] - strh r2, [r1] - ldrb r2, [r4, 0x2] - strb r2, [r1, 0x2] - movs r1, 0x3C - bl InitBlockSend - b _08009E3E - .align 2, 0 -_08009C7C: .4byte gUnknown_3003E70 -_08009C80: .4byte gLocalLinkPlayer -_08009C84: .4byte gUnknown_82345C0 -_08009C88: - ldr r1, _08009C90 @ =gUnknown_3003F28 - movs r0, 0x1 - strb r0, [r1] - b _08009E3E - .align 2, 0 -_08009C90: .4byte gUnknown_3003F28 -_08009C94: - mov r7, r12 - adds r1, r7, r6 - lsls r1, 2 - ldr r0, _08009CB8 @ =sBlockRecv - adds r1, r0 - movs r2, 0 - strh r2, [r1] - ldr r0, _08009CBC @ =gRecvCmds - adds r0, 0x2 - adds r0, r4, r0 - ldrh r0, [r0] - strh r0, [r1, 0x2] - ldr r0, _08009CBC @ =gRecvCmds - adds r0, 0x4 - adds r0, r4, r0 - ldrh r0, [r0] - strb r0, [r1, 0x9] - b _08009E3E - .align 2, 0 -_08009CB8: .4byte sBlockRecv -_08009CBC: .4byte gRecvCmds -_08009CC0: - mov r3, r12 - adds r0, r3, r6 - lsls r0, 2 - ldr r5, _08009D04 @ =sBlockRecv - adds r3, r0, r5 - ldrh r1, [r3, 0x2] - movs r0, 0x80 - lsls r0, 1 - adds r7, r5, 0 - mov r10, r7 - cmp r1, r0 - bls _08009D10 - ldr r0, _08009D08 @ =gDecompressionBuffer - mov r8, r0 - movs r2, 0 - adds r5, r3, 0 - ldr r7, _08009D0C @ =gRecvCmds - adds r3, r4, 0 -_08009CE4: - ldrh r1, [r5] - lsrs r1, 1 - adds r1, r2 - lsls r1, 1 - add r1, r8 - adds r2, 0x1 - lsls r0, r2, 1 - adds r0, r3 - adds r0, r7 - ldrh r0, [r0] - strh r0, [r1] - lsls r2, 16 - lsrs r2, 16 - cmp r2, 0x6 - bls _08009CE4 - b _08009D40 - .align 2, 0 -_08009D04: .4byte sBlockRecv -_08009D08: .4byte gDecompressionBuffer -_08009D0C: .4byte gRecvCmds -_08009D10: - movs r2, 0 - ldr r1, _08009DC4 @ =gBlockRecvBuffer - mov r9, r1 - adds r7, r3, 0 - ldr r3, _08009DC8 @ =gRecvCmds - mov r8, r3 - lsls r5, r6, 8 - adds r3, r4, 0 -_08009D20: - ldrh r1, [r7] - lsrs r1, 1 - adds r1, r2 - lsls r1, 1 - adds r1, r5 - add r1, r9 - adds r2, 0x1 - lsls r0, r2, 1 - adds r0, r3 - add r0, r8 - ldrh r0, [r0] - strh r0, [r1] - lsls r2, 16 - lsrs r2, 16 - cmp r2, 0x6 - bls _08009D20 -_08009D40: - mov r4, r12 - adds r1, r4, r6 - lsls r1, 2 - add r1, r10 - ldrh r0, [r1] - adds r0, 0xE - movs r3, 0 - strh r0, [r1] - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1, 0x2] - cmp r0, r1 - bcc _08009E3E - ldr r0, _08009DCC @ =gRemoteLinkPlayersNotReceived - adds r0, r6, r0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08009DE6 - lsls r1, r6, 8 - ldr r0, _08009DC4 @ =gBlockRecvBuffer - adds r1, r0 - mov r8, r1 - lsls r0, r6, 3 - subs r0, r6 - lsls r0, 2 - ldr r1, _08009DD0 @ =gLinkPlayers - adds r2, r0, r1 - adds r1, r2, 0 - mov r0, r8 - adds r0, 0x10 - ldm r0!, {r4,r5,r7} - stm r1!, {r4,r5,r7} - ldm r0!, {r4,r5,r7} - stm r1!, {r4,r5,r7} - ldr r0, [r0] - str r0, [r1] - ldrb r0, [r2] - subs r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _08009D9A - strb r3, [r2, 0x12] - strb r3, [r2, 0x11] - strb r3, [r2, 0x10] -_08009D9A: - adds r0, r2, 0 - bl sub_800B284 - ldr r5, _08009DD4 @ =gUnknown_82345C0 - mov r0, r8 - adds r1, r5, 0 - bl strcmp - cmp r0, 0 - bne _08009DBC - mov r0, r8 - adds r0, 0x2C - adds r1, r5, 0 - bl strcmp - cmp r0, 0 - beq _08009DDC -_08009DBC: - ldr r0, _08009DD8 @ =c2_800ACD4 - bl SetMainCallback2 - b _08009E3E - .align 2, 0 -_08009DC4: .4byte gBlockRecvBuffer -_08009DC8: .4byte gRecvCmds -_08009DCC: .4byte gRemoteLinkPlayersNotReceived -_08009DD0: .4byte gLinkPlayers -_08009DD4: .4byte gUnknown_82345C0 -_08009DD8: .4byte c2_800ACD4 -_08009DDC: - lsls r0, r6, 24 - lsrs r0, 24 - bl HandleReceiveRemoteLinkPlayer - b _08009E3E -_08009DE6: - lsls r0, r6, 24 - lsrs r0, 24 - bl sub_800A524 - b _08009E3E -_08009DF0: - ldr r0, _08009DF4 @ =gUnknown_3003F30 - b _08009DFA - .align 2, 0 -_08009DF4: .4byte gUnknown_3003F30 -_08009DF8: - ldr r0, _08009E04 @ =gUnknown_3003F2C -_08009DFA: - adds r0, r6, r0 - movs r1, 0x1 - strb r1, [r0] - b _08009E3E - .align 2, 0 -_08009E04: .4byte gUnknown_3003F2C -_08009E08: - bl sub_800A3CC - b _08009E3E -_08009E0E: - ldr r3, _08009E2C @ =gUnknown_8234598 - ldr r0, _08009E30 @ =gRecvCmds - adds r0, 0x2 - adds r0, r4, r0 - ldrh r2, [r0] - lsls r2, 3 - adds r0, r2, r3 - ldr r1, [r0] - adds r3, 0x4 - adds r2, r3 - ldrh r2, [r2] - movs r0, 0 - bl SendBlock - b _08009E3E - .align 2, 0 -_08009E2C: .4byte gUnknown_8234598 -_08009E30: .4byte gRecvCmds -_08009E34: - ldr r0, _08009E5C @ =gRecvCmds - adds r0, 0x2 - adds r0, r4, r0 - ldrh r0, [r0] - strh r0, [r3] -_08009E3E: - ldr r5, [sp] - lsls r0, r5, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bhi _08009E4A - b _08009B7E -_08009E4A: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08009E5C: .4byte gRecvCmds - thumb_func_end sub_8009B70 - - thumb_func_start sub_8009E60 -sub_8009E60: @ 8009E60 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _08009E8C @ =0x00006666 - cmp r2, r0 - beq _08009F30 - cmp r2, r0 - bgt _08009EC0 - ldr r0, _08009E90 @ =0x00004444 - cmp r2, r0 - beq _08009F1C - cmp r2, r0 - bgt _08009E9C - ldr r0, _08009E94 @ =0x00002222 - cmp r2, r0 - beq _08009F08 - ldr r0, _08009E98 @ =0x00002ffe -_08009E82: - cmp r2, r0 - bne _08009E88 - b _08009FB4 -_08009E88: - b _08009FD6 - .align 2, 0 -_08009E8C: .4byte 0x00006666 -_08009E90: .4byte 0x00004444 -_08009E94: .4byte 0x00002222 -_08009E98: .4byte 0x00002ffe -_08009E9C: - ldr r0, _08009EAC @ =0x00005566 - cmp r2, r0 - bne _08009EA4 - b _08009FB4 -_08009EA4: - cmp r2, r0 - bgt _08009EB0 - subs r0, 0x11 - b _08009E82 - .align 2, 0 -_08009EAC: .4byte 0x00005566 -_08009EB0: - ldr r0, _08009EBC @ =0x00005fff - cmp r2, r0 - bne _08009EB8 - b _08009FA0 -_08009EB8: - b _08009FD6 - .align 2, 0 -_08009EBC: .4byte 0x00005fff -_08009EC0: - ldr r0, _08009ED4 @ =0x0000aaab - cmp r2, r0 - beq _08009F78 - cmp r2, r0 - bgt _08009EE0 - ldr r0, _08009ED8 @ =0x00007777 - cmp r2, r0 - beq _08009F3C - ldr r0, _08009EDC @ =0x0000aaaa - b _08009E82 - .align 2, 0 -_08009ED4: .4byte 0x0000aaab -_08009ED8: .4byte 0x00007777 -_08009EDC: .4byte 0x0000aaaa -_08009EE0: - ldr r0, _08009EF4 @ =0x0000cafe - cmp r2, r0 - beq _08009FC0 - cmp r2, r0 - bgt _08009EFC - ldr r0, _08009EF8 @ =0x0000bbbb - cmp r2, r0 - beq _08009F5C - b _08009FD6 - .align 2, 0 -_08009EF4: .4byte 0x0000cafe -_08009EF8: .4byte 0x0000bbbb -_08009EFC: - ldr r0, _08009F04 @ =0x0000cccc - cmp r2, r0 - beq _08009F8C - b _08009FD6 - .align 2, 0 -_08009F04: .4byte 0x0000cccc -_08009F08: - ldr r0, _08009F14 @ =gSendCmd - strh r2, [r0] - ldr r1, _08009F18 @ =gLinkType - ldrh r1, [r1] - b _08009FD4 - .align 2, 0 -_08009F14: .4byte gSendCmd -_08009F18: .4byte gLinkType -_08009F1C: - ldr r0, _08009F28 @ =gSendCmd - strh r2, [r0] - ldr r1, _08009F2C @ =gMain - ldrh r1, [r1, 0x2C] - b _08009FD4 - .align 2, 0 -_08009F28: .4byte gSendCmd -_08009F2C: .4byte gMain -_08009F30: - ldr r0, _08009F38 @ =gSendCmd - movs r1, 0 - b _08009FD2 - .align 2, 0 -_08009F38: .4byte gSendCmd -_08009F3C: - ldr r0, _08009F58 @ =gSendCmd - strh r2, [r0] - movs r1, 0 - adds r3, r0, 0 - movs r2, 0xEE -_08009F46: - adds r1, 0x1 - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x4 - bls _08009F46 - b _08009FD6 - .align 2, 0 -_08009F58: .4byte gSendCmd -_08009F5C: - ldr r1, _08009F70 @ =gSendCmd - strh r2, [r1] - ldr r2, _08009F74 @ =sBlockSend - ldrh r0, [r2, 0x2] - strh r0, [r1, 0x2] - ldrb r0, [r2, 0x9] - adds r0, 0x80 - strh r0, [r1, 0x4] - b _08009FD6 - .align 2, 0 -_08009F70: .4byte gSendCmd -_08009F74: .4byte sBlockSend -_08009F78: - ldr r0, _08009F84 @ =gSendCmd - strh r2, [r0] - ldr r1, _08009F88 @ =gSpecialVar_ItemId - ldrh r1, [r1] - b _08009FD4 - .align 2, 0 -_08009F84: .4byte gSendCmd -_08009F88: .4byte gSpecialVar_ItemId -_08009F8C: - ldr r0, _08009F98 @ =gSendCmd - strh r2, [r0] - ldr r1, _08009F9C @ =gUnknown_3003F90 - ldrb r1, [r1] - b _08009FD4 - .align 2, 0 -_08009F98: .4byte gSendCmd -_08009F9C: .4byte gUnknown_3003F90 -_08009FA0: - ldr r0, _08009FAC @ =gSendCmd - strh r2, [r0] - ldr r1, _08009FB0 @ =gUnknown_3003F34 - ldrh r1, [r1] - b _08009FD4 - .align 2, 0 -_08009FAC: .4byte gSendCmd -_08009FB0: .4byte gUnknown_3003F34 -_08009FB4: - ldr r0, _08009FBC @ =gSendCmd - strh r2, [r0] - b _08009FD6 - .align 2, 0 -_08009FBC: .4byte gSendCmd -_08009FC0: - ldr r0, _08009FDC @ =gUnknown_3005028 - ldrh r1, [r0] - cmp r1, 0 - beq _08009FD6 - ldr r0, _08009FE0 @ =gLinkTransferringData - ldrb r0, [r0] - cmp r0, 0 - bne _08009FD6 - ldr r0, _08009FE4 @ =gSendCmd -_08009FD2: - strh r2, [r0] -_08009FD4: - strh r1, [r0, 0x2] -_08009FD6: - pop {r0} - bx r0 - .align 2, 0 -_08009FDC: .4byte gUnknown_3005028 -_08009FE0: .4byte gLinkTransferringData -_08009FE4: .4byte gSendCmd - thumb_func_end sub_8009E60 - thumb_func_start sub_8009FE8 sub_8009FE8: @ 8009FE8 push {lr} @@ -845,7 +62,7 @@ sub_800A040: @ 800A040 cmp r0, 0x1 bne _0800A050 ldr r0, _0800A058 @ =0x0000cafe - bl sub_8009E60 + bl BuildSendCmd _0800A050: pop {r0} bx r0 @@ -892,7 +109,7 @@ GetLinkPlayerCount: @ 800A088 ldrb r0, [r0] cmp r0, 0 bne _0800A0A8 - ldr r0, _0800A0A4 @ =gUnknown_3003F20 + ldr r0, _0800A0A4 @ =gLinkStatus ldr r0, [r0] movs r1, 0x1C ands r0, r1 @@ -900,7 +117,7 @@ GetLinkPlayerCount: @ 800A088 b _0800A0B0 .align 2, 0 _0800A0A0: .4byte gWirelessCommType -_0800A0A4: .4byte gUnknown_3003F20 +_0800A0A4: .4byte gLinkStatus _0800A0A8: bl sub_80FA4EC lsls r0, 24 @@ -1217,7 +434,7 @@ _0800A2E8: str r5, [r4, 0x4] _0800A2EA: ldr r0, _0800A308 @ =0x0000bbbb - bl sub_8009E60 + bl BuildSendCmd ldr r1, _0800A30C @ =gLinkCallback ldr r0, _0800A310 @ =LinkCB_BlockSendBegin str r0, [r1] @@ -1324,7 +541,7 @@ sub_800A3AC: @ 800A3AC push {lr} bl GetMultiplayerId ldr r0, _0800A3C4 @ =0x00004444 - bl sub_8009E60 + bl BuildSendCmd ldr r1, _0800A3C8 @ =gUnknown_2022114 ldr r0, [r1] adds r0, 0x1 @@ -1364,7 +581,7 @@ _0800A3F0: .4byte gUnknown_2022114 sub_800A3F4: @ 800A3F4 push {lr} ldr r0, _0800A400 @ =0x0000aaaa - bl sub_8009E60 + bl BuildSendCmd pop {r0} bx r0 .align 2, 0 @@ -1464,16 +681,16 @@ _0800A494: .align 2, 0 _0800A4A0: .4byte gLinkCallback _0800A4A4: - ldr r0, _0800A4B4 @ =gUnknown_3003F90 + ldr r0, _0800A4B4 @ =gBlockRequestType strb r2, [r0] ldr r0, _0800A4B8 @ =0x0000cccc - bl sub_8009E60 + bl BuildSendCmd movs r0, 0x1 _0800A4B0: pop {r1} bx r1 .align 2, 0 -_0800A4B4: .4byte gUnknown_3003F90 +_0800A4B4: .4byte gBlockRequestType _0800A4B8: .4byte 0x0000cccc thumb_func_end sub_800A474 @@ -1513,7 +730,7 @@ GetBlockReceivedStatus: @ 800A4EC ldrb r0, [r0] cmp r0, 0x1 beq _0800A518 - ldr r2, _0800A514 @ =gUnknown_3003EBC + ldr r2, _0800A514 @ =gBlockReceivedStatus ldrb r0, [r2, 0x3] lsls r0, 3 ldrb r1, [r2, 0x2] @@ -1527,7 +744,7 @@ GetBlockReceivedStatus: @ 800A4EC b _0800A51C .align 2, 0 _0800A510: .4byte gWirelessCommType -_0800A514: .4byte gUnknown_3003EBC +_0800A514: .4byte gBlockReceivedStatus _0800A518: bl sub_80F9CC8 _0800A51C: @@ -1537,8 +754,8 @@ _0800A51C: bx r1 thumb_func_end GetBlockReceivedStatus - thumb_func_start sub_800A524 -sub_800A524: @ 800A524 + thumb_func_start SetBlockReceivedFlag +SetBlockReceivedFlag: @ 800A524 push {lr} lsls r0, 24 lsrs r1, r0, 24 @@ -1552,7 +769,7 @@ sub_800A524: @ 800A524 .align 2, 0 _0800A53C: .4byte gWirelessCommType _0800A540: - ldr r0, _0800A54C @ =gUnknown_3003EBC + ldr r0, _0800A54C @ =gBlockReceivedStatus adds r0, r1, r0 movs r1, 0x1 strb r1, [r0] @@ -1560,8 +777,8 @@ _0800A548: pop {r0} bx r0 .align 2, 0 -_0800A54C: .4byte gUnknown_3003EBC - thumb_func_end sub_800A524 +_0800A54C: .4byte gBlockReceivedStatus + thumb_func_end SetBlockReceivedFlag thumb_func_start ResetBlockReceivedFlags ResetBlockReceivedFlags: @ 800A550 @@ -1582,7 +799,7 @@ _0800A55C: .align 2, 0 _0800A56C: .4byte gWirelessCommType _0800A570: - ldr r1, _0800A584 @ =gUnknown_3003EBC + ldr r1, _0800A584 @ =gBlockReceivedStatus movs r2, 0 adds r0, r1, 0x3 _0800A576: @@ -1595,7 +812,7 @@ _0800A57E: pop {r0} bx r0 .align 2, 0 -_0800A584: .4byte gUnknown_3003EBC +_0800A584: .4byte gBlockReceivedStatus thumb_func_end ResetBlockReceivedFlags thumb_func_start ResetBlockReceivedFlag @@ -1613,7 +830,7 @@ ResetBlockReceivedFlag: @ 800A588 .align 2, 0 _0800A5A0: .4byte gWirelessCommType _0800A5A4: - ldr r0, _0800A5B8 @ =gUnknown_3003EBC + ldr r0, _0800A5B8 @ =gBlockReceivedStatus adds r1, r0 ldrb r0, [r1] cmp r0, 0 @@ -1624,13 +841,13 @@ _0800A5B2: pop {r0} bx r0 .align 2, 0 -_0800A5B8: .4byte gUnknown_3003EBC +_0800A5B8: .4byte gBlockReceivedStatus thumb_func_end ResetBlockReceivedFlag thumb_func_start CheckShouldAdvanceLinkState CheckShouldAdvanceLinkState: @ 800A5BC push {lr} - ldr r0, _0800A5DC @ =gUnknown_3003F20 + ldr r0, _0800A5DC @ =gLinkStatus ldr r1, [r0] movs r0, 0x20 ands r0, r1 @@ -1647,7 +864,7 @@ _0800A5D8: pop {r0} bx r0 .align 2, 0 -_0800A5DC: .4byte gUnknown_3003F20 +_0800A5DC: .4byte gLinkStatus _0800A5E0: .4byte gShouldAdvanceLinkState thumb_func_end CheckShouldAdvanceLinkState @@ -1837,14 +1054,14 @@ _0800A718: thumb_func_start LinkCB_RequestPlayerDataExchange LinkCB_RequestPlayerDataExchange: @ 800A720 push {lr} - ldr r0, _0800A740 @ =gUnknown_3003F20 + ldr r0, _0800A740 @ =gLinkStatus ldr r0, [r0] movs r1, 0x20 ands r0, r1 cmp r0, 0 beq _0800A734 ldr r0, _0800A744 @ =0x00002222 - bl sub_8009E60 + bl BuildSendCmd _0800A734: ldr r1, _0800A748 @ =gLinkCallback movs r0, 0 @@ -1852,7 +1069,7 @@ _0800A734: pop {r0} bx r0 .align 2, 0 -_0800A740: .4byte gUnknown_3003F20 +_0800A740: .4byte gLinkStatus _0800A744: .4byte 0x00002222 _0800A748: .4byte gLinkCallback thumb_func_end LinkCB_RequestPlayerDataExchange @@ -1861,7 +1078,7 @@ _0800A748: .4byte gLinkCallback task00_link_test: @ 800A74C push {r4-r6,lr} sub sp, 0x20 - ldr r1, _0800A86C @ =gUnknown_82345D0 + ldr r1, _0800A86C @ =gASCIITestPrint mov r0, sp bl strcpy mov r0, sp @@ -1874,13 +1091,13 @@ task00_link_test: @ 800A74C movs r2, 0x1 movs r3, 0x2 bl LinkTest_prnthex - ldr r4, _0800A874 @ =gUnknown_3003F20 + ldr r4, _0800A874 @ =gLinkStatus ldr r0, [r4] movs r1, 0xF movs r2, 0x1 movs r3, 0x8 bl LinkTest_prnthex - ldr r0, _0800A878 @ =gUnknown_3003FB0 + ldr r0, _0800A878 @ =gLink ldrb r0, [r0, 0x1] movs r1, 0x2 movs r2, 0xA @@ -1901,13 +1118,13 @@ task00_link_test: @ 800A74C movs r2, 0xC movs r3, 0x2 bl LinkTest_prnthex - ldr r0, _0800A87C @ =gUnknown_3003FA0 + ldr r0, _0800A87C @ =gLastSendQueueCount ldrb r0, [r0] movs r1, 0x19 movs r2, 0x1 movs r3, 0x2 bl LinkTest_prnthex - ldr r0, _0800A880 @ =gUnknown_3004F70 + ldr r0, _0800A880 @ =gLastRecvQueueCount ldrb r0, [r0] movs r1, 0x19 movs r2, 0x2 @@ -1920,13 +1137,13 @@ task00_link_test: @ 800A74C movs r2, 0x5 movs r3, 0x2 bl LinkTest_prnthex - ldr r0, _0800A884 @ =gUnknown_3003E6C + ldr r0, _0800A884 @ =gLinkDebugSeed ldr r0, [r0] movs r1, 0x2 movs r2, 0xC movs r3, 0x8 bl LinkTest_prnthex - ldr r0, _0800A888 @ =gUnknown_3003EB0 + ldr r0, _0800A888 @ =gLinkDebugFlags ldr r0, [r0] movs r1, 0x2 movs r2, 0xD @@ -1982,27 +1199,27 @@ _0800A84A: pop {r0} bx r0 .align 2, 0 -_0800A86C: .4byte gUnknown_82345D0 +_0800A86C: .4byte gASCIITestPrint _0800A870: .4byte gShouldAdvanceLinkState -_0800A874: .4byte gUnknown_3003F20 -_0800A878: .4byte gUnknown_3003FB0 -_0800A87C: .4byte gUnknown_3003FA0 -_0800A880: .4byte gUnknown_3004F70 -_0800A884: .4byte gUnknown_3003E6C -_0800A888: .4byte gUnknown_3003EB0 +_0800A874: .4byte gLinkStatus +_0800A878: .4byte gLink +_0800A87C: .4byte gLastSendQueueCount +_0800A880: .4byte gLastRecvQueueCount +_0800A884: .4byte gLinkDebugSeed +_0800A888: .4byte gLinkDebugFlags _0800A88C: .4byte gLinkTestBlockChecksums thumb_func_end task00_link_test thumb_func_start SetLinkDebugValues SetLinkDebugValues: @ 800A890 - ldr r2, _0800A89C @ =gUnknown_3003E6C + ldr r2, _0800A89C @ =gLinkDebugSeed str r0, [r2] - ldr r0, _0800A8A0 @ =gUnknown_3003EB0 + ldr r0, _0800A8A0 @ =gLinkDebugFlags str r1, [r0] bx lr .align 2, 0 -_0800A89C: .4byte gUnknown_3003E6C -_0800A8A0: .4byte gUnknown_3003EB0 +_0800A89C: .4byte gLinkDebugSeed +_0800A8A0: .4byte gLinkDebugFlags thumb_func_end SetLinkDebugValues thumb_func_start sub_800A8A4 @@ -2010,7 +1227,7 @@ sub_800A8A4: @ 800A8A4 push {r4,lr} movs r1, 0 movs r2, 0 - ldr r0, _0800A8D0 @ =gUnknown_3003F40 + ldr r0, _0800A8D0 @ =gSavedLinkPlayerCount ldrb r0, [r0] cmp r1, r0 bge _0800A8C6 @@ -2031,7 +1248,7 @@ _0800A8C6: pop {r1} bx r1 .align 2, 0 -_0800A8D0: .4byte gUnknown_3003F40 +_0800A8D0: .4byte gSavedLinkPlayerCount thumb_func_end sub_800A8A4 thumb_func_start sub_800A8D4 @@ -2063,10 +1280,10 @@ _0800A8EA: thumb_func_start sub_800A900 sub_800A900: @ 800A900 push {r4-r7,lr} - ldr r1, _0800A934 @ =gUnknown_3003F40 + ldr r1, _0800A934 @ =gSavedLinkPlayerCount strb r0, [r1] bl GetMultiplayerId - ldr r1, _0800A938 @ =gUnknown_3003F60 + ldr r1, _0800A938 @ =gSavedMultiplayerId strb r0, [r1] ldr r4, _0800A93C @ =gLinkPlayers ldr r3, _0800A940 @ =gSavedLinkPlayers @@ -2089,35 +1306,35 @@ _0800A914: pop {r0} bx r0 .align 2, 0 -_0800A934: .4byte gUnknown_3003F40 -_0800A938: .4byte gUnknown_3003F60 +_0800A934: .4byte gSavedLinkPlayerCount +_0800A938: .4byte gSavedMultiplayerId _0800A93C: .4byte gLinkPlayers _0800A940: .4byte gSavedLinkPlayers thumb_func_end sub_800A900 thumb_func_start sub_800A944 sub_800A944: @ 800A944 - ldr r0, _0800A94C @ =gUnknown_3003F40 + ldr r0, _0800A94C @ =gSavedLinkPlayerCount ldrb r0, [r0] bx lr .align 2, 0 -_0800A94C: .4byte gUnknown_3003F40 +_0800A94C: .4byte gSavedLinkPlayerCount thumb_func_end sub_800A944 thumb_func_start sub_800A950 sub_800A950: @ 800A950 - ldr r0, _0800A958 @ =gUnknown_3003F60 + ldr r0, _0800A958 @ =gSavedMultiplayerId ldrb r0, [r0] bx lr .align 2, 0 -_0800A958: .4byte gUnknown_3003F60 +_0800A958: .4byte gSavedMultiplayerId thumb_func_end sub_800A950 thumb_func_start sub_800A95C sub_800A95C: @ 800A95C push {r4-r6,lr} movs r5, 0 - ldr r0, _0800A990 @ =gUnknown_3003F40 + ldr r0, _0800A990 @ =gSavedLinkPlayerCount ldrb r2, [r0] adds r6, r0, 0 cmp r5, r2 @@ -2145,7 +1362,7 @@ _0800A986: movs r0, 0 b _0800A99E .align 2, 0 -_0800A990: .4byte gUnknown_3003F40 +_0800A990: .4byte gSavedLinkPlayerCount _0800A994: .4byte gLinkPlayers _0800A998: .4byte gSavedLinkPlayers _0800A99C: @@ -2162,7 +1379,7 @@ sub_800A9A4: @ 800A9A4 mov r7, r8 push {r7} movs r4, 0 - ldr r0, _0800AA10 @ =gUnknown_3003F40 + ldr r0, _0800AA10 @ =gSavedLinkPlayerCount ldrb r0, [r0] cmp r4, r0 bcs _0800AA04 @@ -2196,13 +1413,13 @@ _0800A9E6: movs r0, 0x1 strb r0, [r1] bl CloseLink - ldr r0, _0800AA20 @ =c2_800ACD4 + ldr r0, _0800AA20 @ =CB2_LinkError bl SetMainCallback2 _0800A9F6: adds r0, r4, 0x1 lsls r0, 24 lsrs r4, r0, 24 - ldr r0, _0800AA10 @ =gUnknown_3003F40 + ldr r0, _0800AA10 @ =gSavedLinkPlayerCount ldrb r0, [r0] cmp r4, r0 bcc _0800A9C2 @@ -2213,36 +1430,36 @@ _0800AA04: pop {r0} bx r0 .align 2, 0 -_0800AA10: .4byte gUnknown_3003F40 +_0800AA10: .4byte gSavedLinkPlayerCount _0800AA14: .4byte gSavedLinkPlayers _0800AA18: .4byte gLinkPlayers _0800AA1C: .4byte gLinkErrorOccurred -_0800AA20: .4byte c2_800ACD4 +_0800AA20: .4byte CB2_LinkError thumb_func_end sub_800A9A4 thumb_func_start sub_800AA24 sub_800AA24: @ 800AA24 - ldr r0, _0800AA30 @ =gUnknown_3003F40 + ldr r0, _0800AA30 @ =gSavedLinkPlayerCount movs r1, 0 strb r1, [r0] - ldr r0, _0800AA34 @ =gUnknown_3003F60 + ldr r0, _0800AA34 @ =gSavedMultiplayerId strb r1, [r0] bx lr .align 2, 0 -_0800AA30: .4byte gUnknown_3003F40 -_0800AA34: .4byte gUnknown_3003F60 +_0800AA30: .4byte gSavedLinkPlayerCount +_0800AA34: .4byte gSavedMultiplayerId thumb_func_end sub_800AA24 thumb_func_start GetLinkPlayerCount_2 GetLinkPlayerCount_2: @ 800AA38 - ldr r0, _0800AA44 @ =gUnknown_3003F20 + ldr r0, _0800AA44 @ =gLinkStatus ldr r0, [r0] movs r1, 0x1C ands r0, r1 lsrs r0, 2 bx lr .align 2, 0 -_0800AA44: .4byte gUnknown_3003F20 +_0800AA44: .4byte gLinkStatus thumb_func_end GetLinkPlayerCount_2 thumb_func_start IsLinkMaster @@ -2252,7 +1469,7 @@ IsLinkMaster: @ 800AA48 ldrb r0, [r0] cmp r0, 0 bne _0800AA68 - ldr r0, _0800AA64 @ =gUnknown_3003F20 + ldr r0, _0800AA64 @ =gLinkStatus ldr r0, [r0] lsrs r0, 5 movs r1, 0x1 @@ -2260,7 +1477,7 @@ IsLinkMaster: @ 800AA48 b _0800AA70 .align 2, 0 _0800AA60: .4byte gWirelessCommType -_0800AA64: .4byte gUnknown_3003F20 +_0800AA64: .4byte gLinkStatus _0800AA68: bl sub_80FBA2C lsls r0, 24 @@ -2356,12 +1573,12 @@ _0800AB08: .4byte gUnknown_3003F34 thumb_func_start sub_800AB0C sub_800AB0C: @ 800AB0C push {lr} - ldr r0, _0800AB28 @ =gUnknown_3004F70 + ldr r0, _0800AB28 @ =gLastRecvQueueCount ldrb r0, [r0] cmp r0, 0 bne _0800AB22 ldr r0, _0800AB2C @ =0x00005fff - bl sub_8009E60 + bl BuildSendCmd ldr r1, _0800AB30 @ =gLinkCallback ldr r0, _0800AB34 @ =sub_800AB38 str r0, [r1] @@ -2369,7 +1586,7 @@ _0800AB22: pop {r0} bx r0 .align 2, 0 -_0800AB28: .4byte gUnknown_3004F70 +_0800AB28: .4byte gLastRecvQueueCount _0800AB2C: .4byte 0x00005fff _0800AB30: .4byte gLinkCallback _0800AB34: .4byte sub_800AB38 @@ -2460,12 +1677,12 @@ _0800ABD0: .4byte gUnknown_3003F24 thumb_func_start sub_800ABD4 sub_800ABD4: @ 800ABD4 push {lr} - ldr r0, _0800ABF0 @ =gUnknown_3004F70 + ldr r0, _0800ABF0 @ =gLastRecvQueueCount ldrb r0, [r0] cmp r0, 0 bne _0800ABEA ldr r0, _0800ABF4 @ =0x00002ffe - bl sub_8009E60 + bl BuildSendCmd ldr r1, _0800ABF8 @ =gLinkCallback ldr r0, _0800ABFC @ =sub_800AC00 str r0, [r1] @@ -2473,7 +1690,7 @@ _0800ABEA: pop {r0} bx r0 .align 2, 0 -_0800ABF0: .4byte gUnknown_3004F70 +_0800ABF0: .4byte gLastRecvQueueCount _0800ABF4: .4byte 0x00002ffe _0800ABF8: .4byte gLinkCallback _0800ABFC: .4byte sub_800AC00 @@ -2528,14 +1745,14 @@ _0800AC50: .4byte gUnknown_3003F2C _0800AC54: .4byte gLinkCallback thumb_func_end sub_800AC00 - thumb_func_start sub_800AC58 -sub_800AC58: @ 800AC58 + thumb_func_start CheckErrorStatus +CheckErrorStatus: @ 800AC58 push {lr} ldr r0, _0800AC9C @ =gLinkOpen ldrb r0, [r0] cmp r0, 0 beq _0800AC98 - ldr r0, _0800ACA0 @ =gUnknown_3003F20 + ldr r0, _0800ACA0 @ =gLinkStatus ldr r2, [r0] movs r0, 0xFE lsls r0, 11 @@ -2548,13 +1765,13 @@ sub_800AC58: @ 800AC58 bne _0800AC8E ldr r1, _0800ACA8 @ =sLinkErrorBuffer str r2, [r1] - ldr r0, _0800ACAC @ =gUnknown_3004F70 + ldr r0, _0800ACAC @ =gLastRecvQueueCount ldrb r0, [r0] strb r0, [r1, 0x4] - ldr r0, _0800ACB0 @ =gUnknown_3003FA0 + ldr r0, _0800ACB0 @ =gLastSendQueueCount ldrb r0, [r0] strb r0, [r1, 0x5] - ldr r0, _0800ACB4 @ =c2_800ACD4 + ldr r0, _0800ACB4 @ =CB2_LinkError bl SetMainCallback2 _0800AC8E: ldr r1, _0800ACB8 @ =gLinkErrorOccurred @@ -2566,14 +1783,14 @@ _0800AC98: bx r0 .align 2, 0 _0800AC9C: .4byte gLinkOpen -_0800ACA0: .4byte gUnknown_3003F20 +_0800ACA0: .4byte gLinkStatus _0800ACA4: .4byte gSuppressLinkErrorMessage _0800ACA8: .4byte sLinkErrorBuffer -_0800ACAC: .4byte gUnknown_3004F70 -_0800ACB0: .4byte gUnknown_3003FA0 -_0800ACB4: .4byte c2_800ACD4 +_0800ACAC: .4byte gLastRecvQueueCount +_0800ACB0: .4byte gLastSendQueueCount +_0800ACB4: .4byte CB2_LinkError _0800ACB8: .4byte gLinkErrorOccurred - thumb_func_end sub_800AC58 + thumb_func_end CheckErrorStatus thumb_func_start sub_800ACBC sub_800ACBC: @ 800ACBC @@ -2590,8 +1807,8 @@ sub_800ACBC: @ 800ACBC _0800ACD0: .4byte sLinkErrorBuffer thumb_func_end sub_800ACBC - thumb_func_start c2_800ACD4 -c2_800ACD4: @ 800ACD4 + thumb_func_start CB2_LinkError +CB2_LinkError: @ 800ACD4 push {r4,lr} movs r0, 0 movs r1, 0 @@ -2710,7 +1927,7 @@ _0800AE0C: .4byte gSoftResetDisabled _0800AE10: .4byte Task_DestroySelf _0800AE14: .4byte gMain _0800AE18: .4byte sub_800AF2C - thumb_func_end c2_800ACD4 + thumb_func_end CB2_LinkError thumb_func_start sub_800AE1C sub_800AE1C: @ 800AE1C @@ -2730,7 +1947,7 @@ sub_800AE1C: @ 800AE1C bl CopyToBgTilemapBuffer movs r0, 0x1 bl CopyBgTilemapBufferToVram - ldr r0, _0800AEC0 @ =gUnknown_8231EC4 + ldr r0, _0800AEC0 @ =gWirelessLinkDisplayPal movs r1, 0 movs r2, 0x20 bl LoadPalette @@ -2780,7 +1997,7 @@ sub_800AE1C: @ 800AE1C .align 2, 0 _0800AEB8: .4byte gWirelessLinkDisplay4bpp _0800AEBC: .4byte gWirelessLinkDisplayBin -_0800AEC0: .4byte gUnknown_8231EC4 +_0800AEC0: .4byte gWirelessLinkDisplayPal _0800AEC4: .4byte gUnknown_8234610 _0800AEC8: .4byte gUnknown_841DEF0 _0800AECC: .4byte gUnknown_841DF05 @@ -3010,14 +2227,14 @@ _0800B088: .4byte 0x04000128 thumb_func_start IsLinkConnectionEstablished IsLinkConnectionEstablished: @ 800B08C - ldr r0, _0800B098 @ =gUnknown_3003F20 + ldr r0, _0800B098 @ =gLinkStatus ldr r0, [r0] lsrs r0, 6 movs r1, 0x1 ands r0, r1 bx lr .align 2, 0 -_0800B098: .4byte gUnknown_3003F20 +_0800B098: .4byte gLinkStatus thumb_func_end IsLinkConnectionEstablished thumb_func_start SetSuppressLinkErrorMessage @@ -3042,7 +2259,7 @@ _0800B0B0: .4byte gLinkErrorOccurred sub_800B0B4: @ 800B0B4 push {r4-r6,lr} bl InitLocalLinkPlayer - ldr r1, _0800B100 @ =gUnknown_3003E70 + ldr r1, _0800B100 @ =gLocalLinkPlayerBlock adds r2, r1, 0 adds r2, 0x10 ldr r0, _0800B104 @ =gLocalLinkPlayer @@ -3052,7 +2269,7 @@ sub_800B0B4: @ 800B0B4 stm r2!, {r3,r4,r6} ldr r0, [r0] str r0, [r2] - ldr r3, _0800B108 @ =gUnknown_82345C0 + ldr r3, _0800B108 @ =gASCIIGameFreakInc adds r2, r1, 0 adds r0, r3, 0 ldm r0!, {r4-r6} @@ -3076,9 +2293,9 @@ sub_800B0B4: @ 800B0B4 pop {r0} bx r0 .align 2, 0 -_0800B100: .4byte gUnknown_3003E70 +_0800B100: .4byte gLocalLinkPlayerBlock _0800B104: .4byte gLocalLinkPlayer -_0800B108: .4byte gUnknown_82345C0 +_0800B108: .4byte gASCIIGameFreakInc _0800B10C: .4byte gBlockSendBuffer thumb_func_end sub_800B0B4 @@ -3106,7 +2323,7 @@ sub_800B110: @ 800B110 str r0, [r1] adds r0, r2, 0 bl sub_800B284 - ldr r5, _0800B170 @ =gUnknown_82345C0 + ldr r5, _0800B170 @ =gASCIIGameFreakInc adds r0, r4, 0 adds r1, r5, 0 bl strcmp @@ -3119,7 +2336,7 @@ sub_800B110: @ 800B110 cmp r0, 0 beq _0800B160 _0800B15A: - ldr r0, _0800B174 @ =c2_800ACD4 + ldr r0, _0800B174 @ =CB2_LinkError bl SetMainCallback2 _0800B160: pop {r4-r6} @@ -3128,8 +2345,8 @@ _0800B160: .align 2, 0 _0800B168: .4byte gBlockRecvBuffer _0800B16C: .4byte gLinkPlayers -_0800B170: .4byte gUnknown_82345C0 -_0800B174: .4byte c2_800ACD4 +_0800B170: .4byte gASCIIGameFreakInc +_0800B174: .4byte CB2_LinkError thumb_func_end sub_800B110 thumb_func_start HandleLinkConnection @@ -3143,7 +2360,7 @@ HandleLinkConnection: @ 800B178 ldr r1, _0800B1B8 @ =gSendCmd ldr r2, _0800B1BC @ =gRecvCmds bl LinkMain1 - ldr r4, _0800B1C0 @ =gUnknown_3003F20 + ldr r4, _0800B1C0 @ =gLinkStatus str r0, [r4] ldr r0, _0800B1C4 @ =gMain + 0x2C bl LinkMain2 @@ -3164,7 +2381,7 @@ _0800B1B0: .4byte gWirelessCommType _0800B1B4: .4byte gShouldAdvanceLinkState _0800B1B8: .4byte gSendCmd _0800B1BC: .4byte gRecvCmds -_0800B1C0: .4byte gUnknown_3003F20 +_0800B1C0: .4byte gLinkStatus _0800B1C4: .4byte gMain + 0x2C _0800B1C8: bl sub_80FAE94 @@ -3248,14 +2465,14 @@ sub_800B248: @ 800B248 ldrb r0, [r0] cmp r0, 0 bne _0800B268 - ldr r0, _0800B260 @ =gUnknown_3003FB0 + ldr r0, _0800B260 @ =gLink ldr r1, _0800B264 @ =0x00000fbd adds r0, r1 ldrb r0, [r0] b _0800B26C .align 2, 0 _0800B25C: .4byte gWirelessCommType -_0800B260: .4byte gUnknown_3003FB0 +_0800B260: .4byte gLink _0800B264: .4byte 0x00000fbd _0800B268: bl sub_80FC460 @@ -3318,7 +2535,7 @@ DisableSerial: @ 800B29C str r0, [r2] str r1, [r2, 0x4] str r0, [sp] - ldr r1, _0800B2EC @ =gUnknown_3003FB0 + ldr r1, _0800B2EC @ =gLink ldr r2, _0800B2F0 @ =0x050003f0 mov r0, sp bl CpuSet @@ -3330,7 +2547,7 @@ _0800B2DC: .4byte 0x04000128 _0800B2E0: .4byte 0x0400010e _0800B2E4: .4byte 0x0400012a _0800B2E8: .4byte 0x04000120 -_0800B2EC: .4byte gUnknown_3003FB0 +_0800B2EC: .4byte gLink _0800B2F0: .4byte 0x050003f0 thumb_func_end DisableSerial @@ -3359,7 +2576,7 @@ EnableSerial: @ 800B2F4 strh r4, [r0] movs r5, 0 str r5, [sp] - ldr r1, _0800B364 @ =gUnknown_3003FB0 + ldr r1, _0800B364 @ =gLink ldr r2, _0800B368 @ =0x050003f0 mov r0, sp bl CpuSet @@ -3373,9 +2590,9 @@ EnableSerial: @ 800B2F4 strb r4, [r0] ldr r0, _0800B37C @ =sHandshakePlayerCount strb r4, [r0] - ldr r0, _0800B380 @ =gUnknown_3003FA0 + ldr r0, _0800B380 @ =gLastSendQueueCount strb r4, [r0] - ldr r0, _0800B384 @ =gUnknown_3004F70 + ldr r0, _0800B384 @ =gLastRecvQueueCount strb r4, [r0] add sp, 0x4 pop {r4,r5} @@ -3386,15 +2603,15 @@ _0800B354: .4byte 0x04000134 _0800B358: .4byte 0x04000128 _0800B35C: .4byte 0x00004003 _0800B360: .4byte 0x0400012a -_0800B364: .4byte gUnknown_3003FB0 +_0800B364: .4byte gLink _0800B368: .4byte 0x050003f0 _0800B36C: .4byte sNumVBlanksWithoutSerialIntr _0800B370: .4byte sSendNonzeroCheck _0800B374: .4byte sRecvNonzeroCheck _0800B378: .4byte sChecksumAvailable _0800B37C: .4byte sHandshakePlayerCount -_0800B380: .4byte gUnknown_3003FA0 -_0800B384: .4byte gUnknown_3004F70 +_0800B380: .4byte gLastSendQueueCount +_0800B384: .4byte gLastRecvQueueCount thumb_func_end EnableSerial thumb_func_start ResetSerial @@ -3412,7 +2629,7 @@ LinkMain1: @ 800B398 adds r4, r0, 0 adds r5, r1, 0 adds r6, r2, 0 - ldr r0, _0800B3B4 @ =gUnknown_3003FB0 + ldr r0, _0800B3B4 @ =gLink ldrb r0, [r0, 0x1] cmp r0, 0x4 bhi _0800B44A @@ -3422,7 +2639,7 @@ LinkMain1: @ 800B398 ldr r0, [r0] mov pc, r0 .align 2, 0 -_0800B3B4: .4byte gUnknown_3003FB0 +_0800B3B4: .4byte gLink _0800B3B8: .4byte _0800B3BC .align 2, 0 _0800B3BC: @@ -3433,23 +2650,23 @@ _0800B3BC: .4byte _0800B43E _0800B3D0: bl DisableSerial - ldr r1, _0800B3DC @ =gUnknown_3003FB0 + ldr r1, _0800B3DC @ =gLink movs r0, 0x1 strb r0, [r1, 0x1] b _0800B44A .align 2, 0 -_0800B3DC: .4byte gUnknown_3003FB0 +_0800B3DC: .4byte gLink _0800B3E0: ldrb r0, [r4] cmp r0, 0x1 bne _0800B44A bl EnableSerial - ldr r1, _0800B3F4 @ =gUnknown_3003FB0 + ldr r1, _0800B3F4 @ =gLink movs r0, 0x2 strb r0, [r1, 0x1] b _0800B44A .align 2, 0 -_0800B3F4: .4byte gUnknown_3003FB0 +_0800B3F4: .4byte gLink _0800B3F8: ldrb r1, [r4] cmp r1, 0x1 @@ -3459,7 +2676,7 @@ _0800B3F8: bl CheckMasterOrSlave b _0800B44A _0800B408: - ldr r2, _0800B41C @ =gUnknown_3003FB0 + ldr r2, _0800B41C @ =gLink ldrb r0, [r2] cmp r0, 0x8 bne _0800B44A @@ -3469,20 +2686,20 @@ _0800B408: strb r1, [r2, 0xE] b _0800B44A .align 2, 0 -_0800B41C: .4byte gUnknown_3003FB0 +_0800B41C: .4byte gLink _0800B420: - ldr r0, _0800B42C @ =gUnknown_3003FB0 + ldr r0, _0800B42C @ =gLink movs r1, 0 strb r1, [r0, 0x1] ldr r0, _0800B430 @ =0x0400012a strh r1, [r0] b _0800B44A .align 2, 0 -_0800B42C: .4byte gUnknown_3003FB0 +_0800B42C: .4byte gLink _0800B430: .4byte 0x0400012a _0800B434: bl InitTimer - ldr r1, _0800B484 @ =gUnknown_3003FB0 + ldr r1, _0800B484 @ =gLink movs r0, 0x4 strb r0, [r1, 0x1] _0800B43E: @@ -3493,7 +2710,7 @@ _0800B43E: _0800B44A: movs r0, 0 strb r0, [r4] - ldr r1, _0800B484 @ =gUnknown_3003FB0 + ldr r1, _0800B484 @ =gLink ldrb r2, [r1, 0x2] ldrb r0, [r1, 0x3] lsls r0, 2 @@ -3522,7 +2739,7 @@ _0800B462: orrs r0, r2 b _0800B48C .align 2, 0 -_0800B484: .4byte gUnknown_3003FB0 +_0800B484: .4byte gLink _0800B488: adds r0, r2, 0 orrs r0, r3 @@ -3566,7 +2783,7 @@ CheckMasterOrSlave: @ 800B4C4 ldr r1, [r0] movs r0, 0xC ands r1, r0 - ldr r2, _0800B4E4 @ =gUnknown_3003FB0 + ldr r2, _0800B4E4 @ =gLink cmp r1, 0x8 bne _0800B4E8 ldrb r0, [r2, 0x2] @@ -3576,7 +2793,7 @@ CheckMasterOrSlave: @ 800B4C4 b _0800B4EC .align 2, 0 _0800B4E0: .4byte 0x04000128 -_0800B4E4: .4byte gUnknown_3003FB0 +_0800B4E4: .4byte gLink _0800B4E8: movs r0, 0 strb r0, [r2] @@ -3588,7 +2805,7 @@ _0800B4EC: thumb_func_start InitTimer InitTimer: @ 800B4F0 push {lr} - ldr r0, _0800B514 @ =gUnknown_3003FB0 + ldr r0, _0800B514 @ =gLink ldrb r0, [r0] cmp r0, 0 beq _0800B50E @@ -3605,7 +2822,7 @@ _0800B50E: pop {r0} bx r0 .align 2, 0 -_0800B514: .4byte gUnknown_3003FB0 +_0800B514: .4byte gLink _0800B518: .4byte 0x0400010c _0800B51C: .4byte 0x0000ff3b thumb_func_end InitTimer @@ -3618,13 +2835,13 @@ sub_800B520: @ 800B520 mov r5, r8 push {r5-r7} adds r3, r0, 0 - ldr r2, _0800B598 @ =gUnknown_3004F74 + ldr r2, _0800B598 @ =gLinkSavedIme ldr r1, _0800B59C @ =0x04000208 ldrh r0, [r1] strh r0, [r2] movs r0, 0 strh r0, [r1] - ldr r1, _0800B5A0 @ =gUnknown_3003FB0 + ldr r1, _0800B5A0 @ =gLink ldr r4, _0800B5A4 @ =0x00000339 adds r0, r1, r4 ldrb r4, [r0] @@ -3647,7 +2864,7 @@ _0800B55E: movs r2, 0 ldr r4, _0800B5A8 @ =sSendNonzeroCheck mov r9, r4 - ldr r1, _0800B5AC @ =gUnknown_3003FA0 + ldr r1, _0800B5AC @ =gLastSendQueueCount mov r10, r1 lsls r5, r0, 1 movs r0, 0x18 @@ -3675,18 +2892,18 @@ _0800B574: bls _0800B574 b _0800B5BC .align 2, 0 -_0800B598: .4byte gUnknown_3004F74 +_0800B598: .4byte gLinkSavedIme _0800B59C: .4byte 0x04000208 -_0800B5A0: .4byte gUnknown_3003FB0 +_0800B5A0: .4byte gLink _0800B5A4: .4byte 0x00000339 _0800B5A8: .4byte sSendNonzeroCheck -_0800B5AC: .4byte gUnknown_3003FA0 +_0800B5AC: .4byte gLastSendQueueCount _0800B5B0: movs r0, 0x1 strb r0, [r6, 0x12] ldr r2, _0800B5F4 @ =sSendNonzeroCheck mov r9, r2 - ldr r4, _0800B5F8 @ =gUnknown_3003FA0 + ldr r4, _0800B5F8 @ =gLastSendQueueCount mov r10, r4 _0800B5BC: mov r1, r9 @@ -3703,7 +2920,7 @@ _0800B5BC: strh r2, [r4] _0800B5D4: ldr r1, _0800B600 @ =0x04000208 - ldr r2, _0800B604 @ =gUnknown_3004F74 + ldr r2, _0800B604 @ =gLinkSavedIme ldrh r0, [r2] strh r0, [r1] ldr r4, _0800B5FC @ =0x00000339 @@ -3720,10 +2937,10 @@ _0800B5D4: bx r0 .align 2, 0 _0800B5F4: .4byte sSendNonzeroCheck -_0800B5F8: .4byte gUnknown_3003FA0 +_0800B5F8: .4byte gLastSendQueueCount _0800B5FC: .4byte 0x00000339 _0800B600: .4byte 0x04000208 -_0800B604: .4byte gUnknown_3004F74 +_0800B604: .4byte gLinkSavedIme thumb_func_end sub_800B520 thumb_func_start sub_800B608 @@ -3734,13 +2951,13 @@ sub_800B608: @ 800B608 mov r5, r8 push {r5-r7} mov r9, r0 - ldr r2, _0800B664 @ =gUnknown_3004F74 + ldr r2, _0800B664 @ =gLinkSavedIme ldr r1, _0800B668 @ =0x04000208 ldrh r0, [r1] strh r0, [r2] movs r0, 0 strh r0, [r1] - ldr r1, _0800B66C @ =gUnknown_3003FB0 + ldr r1, _0800B66C @ =gLink ldr r3, _0800B670 @ =0x00000fbd adds r0, r1, r3 ldrb r0, [r0] @@ -3777,9 +2994,9 @@ _0800B65A: strb r0, [r7, 0xC] b _0800B6F0 .align 2, 0 -_0800B664: .4byte gUnknown_3004F74 +_0800B664: .4byte gLinkSavedIme _0800B668: .4byte 0x04000208 -_0800B66C: .4byte gUnknown_3003FB0 +_0800B66C: .4byte gLink _0800B670: .4byte 0x00000fbd _0800B674: movs r3, 0 @@ -3850,7 +3067,7 @@ _0800B6EC: strb r3, [r2, 0xC] _0800B6F0: ldr r1, _0800B710 @ =0x04000208 - ldr r3, _0800B714 @ =gUnknown_3004F74 + ldr r3, _0800B714 @ =gLinkSavedIme ldrh r0, [r3] strh r0, [r1] pop {r3-r5} @@ -3864,13 +3081,13 @@ _0800B6F0: _0800B708: .4byte 0x00000fbc _0800B70C: .4byte 0x00000fbd _0800B710: .4byte 0x04000208 -_0800B714: .4byte gUnknown_3004F74 +_0800B714: .4byte gLinkSavedIme thumb_func_end sub_800B608 thumb_func_start LinkVSync LinkVSync: @ 800B718 push {r4,lr} - ldr r3, _0800B740 @ =gUnknown_3003FB0 + ldr r3, _0800B740 @ =gLink ldrb r4, [r3] cmp r4, 0 beq _0800B754 @@ -3890,7 +3107,7 @@ LinkVSync: @ 800B718 strb r0, [r3, 0x13] b _0800B77E .align 2, 0 -_0800B740: .4byte gUnknown_3003FB0 +_0800B740: .4byte gLink _0800B744: ldrb r0, [r3, 0x13] cmp r0, 0x1 @@ -3944,7 +3161,7 @@ Timer3Intr: @ 800B788 thumb_func_start SerialCB SerialCB: @ 800B798 push {r4,lr} - ldr r4, _0800B7C4 @ =gUnknown_3003FB0 + ldr r4, _0800B7C4 @ =gLink ldr r0, _0800B7C8 @ =0x04000128 ldr r1, [r0] lsls r0, r1, 26 @@ -3963,7 +3180,7 @@ SerialCB: @ 800B798 bl SendRecvDone b _0800B7EA .align 2, 0 -_0800B7C4: .4byte gUnknown_3003FB0 +_0800B7C4: .4byte gLink _0800B7C8: .4byte 0x04000128 _0800B7CC: bl DoHandshake @@ -3982,7 +3199,7 @@ _0800B7E6: movs r0, 0x4 strb r0, [r4, 0x1] _0800B7EA: - ldr r3, _0800B810 @ =gUnknown_3003FB0 + ldr r3, _0800B810 @ =gLink ldrb r0, [r3, 0xD] adds r0, 0x1 movs r2, 0 @@ -3993,7 +3210,7 @@ _0800B7EA: asrs r0, 24 cmp r0, 0x8 bne _0800B80A - ldr r0, _0800B818 @ =gUnknown_3004F70 + ldr r0, _0800B818 @ =gLastRecvQueueCount ldr r2, _0800B81C @ =0x00000fbd adds r1, r3, r2 ldrb r1, [r1] @@ -4003,9 +3220,9 @@ _0800B80A: pop {r0} bx r0 .align 2, 0 -_0800B810: .4byte gUnknown_3003FB0 +_0800B810: .4byte gLink _0800B814: .4byte sNumVBlanksWithoutSerialIntr -_0800B818: .4byte gUnknown_3004F70 +_0800B818: .4byte gLastRecvQueueCount _0800B81C: .4byte 0x00000fbd thumb_func_end SerialCB @@ -4029,7 +3246,7 @@ DoHandshake: @ 800B830 push {r6,r7} movs r5, 0 ldr r6, _0800B84C @ =0x0000ffff - ldr r0, _0800B850 @ =gUnknown_3003FB0 + ldr r0, _0800B850 @ =gLink ldrb r1, [r0, 0xE] adds r7, r0, 0 cmp r1, 0x1 @@ -4039,7 +3256,7 @@ DoHandshake: @ 800B830 b _0800B860 .align 2, 0 _0800B84C: .4byte 0x0000ffff -_0800B850: .4byte gUnknown_3003FB0 +_0800B850: .4byte gLink _0800B854: .4byte 0x0400012a _0800B858: .4byte 0x00008fff _0800B85C: @@ -4048,7 +3265,7 @@ _0800B85C: _0800B860: adds r0, r2, 0 strh r0, [r1] - ldr r2, _0800B8BC @ =gSioMlt_Recv + ldr r2, _0800B8BC @ =gLink + 4 ldr r3, _0800B8C0 @ =0x04000120 ldr r0, [r3] ldr r1, [r3, 0x4] @@ -4093,7 +3310,7 @@ _0800B8A0: .align 2, 0 _0800B8B4: .4byte 0x0400012a _0800B8B8: .4byte 0x0000b9a0 -_0800B8BC: .4byte gSioMlt_Recv +_0800B8BC: .4byte gLink + 4 _0800B8C0: .4byte 0x04000120 _0800B8C4: .4byte sHandshakePlayerCount _0800B8C8: .4byte 0x00008fff @@ -4162,7 +3379,7 @@ DoRecv: @ 800B92C ldr r0, [r0] str r0, [sp] str r1, [sp, 0x4] - ldr r0, _0800B988 @ =gUnknown_3003FB0 + ldr r0, _0800B988 @ =gLink ldrb r1, [r0, 0x16] adds r6, r0, 0 cmp r1, 0 @@ -4202,7 +3419,7 @@ _0800B97A: b _0800BA30 .align 2, 0 _0800B984: .4byte 0x04000120 -_0800B988: .4byte gUnknown_3003FB0 +_0800B988: .4byte gLink _0800B98C: .4byte sChecksumAvailable _0800B990: ldr r2, _0800BA00 @ =0x00000fbc @@ -4303,7 +3520,7 @@ _0800BA40: .4byte 0x00000fbd thumb_func_start DoSend DoSend: @ 800BA44 push {r4,lr} - ldr r0, _0800BA80 @ =gUnknown_3003FB0 + ldr r0, _0800BA80 @ =gLink ldrb r1, [r0, 0x16] adds r4, r0, 0 cmp r1, 0x8 @@ -4333,7 +3550,7 @@ DoSend: @ 800BA44 strb r2, [r1] b _0800BAEC .align 2, 0 -_0800BA80: .4byte gUnknown_3003FB0 +_0800BA80: .4byte gLink _0800BA84: .4byte 0x0400012a _0800BA88: .4byte sSendBufferEmpty _0800BA8C: .4byte 0x00000339 @@ -4397,7 +3614,7 @@ _0800BAF4: .4byte 0x0400012a thumb_func_start StopTimer StopTimer: @ 800BAF8 push {lr} - ldr r0, _0800BB18 @ =gUnknown_3003FB0 + ldr r0, _0800BB18 @ =gLink ldrb r0, [r0] cmp r0, 0 beq _0800BB14 @@ -4414,7 +3631,7 @@ _0800BB14: pop {r0} bx r0 .align 2, 0 -_0800BB18: .4byte gUnknown_3003FB0 +_0800BB18: .4byte gLink _0800BB1C: .4byte 0x0400010e _0800BB20: .4byte 0x0000ff7f _0800BB24: .4byte 0x0400010c @@ -4424,7 +3641,7 @@ _0800BB28: .4byte 0x0000ff3b thumb_func_start SendRecvDone SendRecvDone: @ 800BB2C push {lr} - ldr r1, _0800BB40 @ =gUnknown_3003FB0 + ldr r1, _0800BB40 @ =gLink ldrb r0, [r1, 0x17] cmp r0, 0x8 bne _0800BB44 @@ -4433,7 +3650,7 @@ SendRecvDone: @ 800BB2C strb r0, [r1, 0x17] b _0800BB54 .align 2, 0 -_0800BB40: .4byte gUnknown_3003FB0 +_0800BB40: .4byte gLink _0800BB44: ldrb r0, [r1] cmp r0, 0 @@ -4453,7 +3670,7 @@ _0800BB58: .4byte 0x0400010e thumb_func_start ResetSendBuffer ResetSendBuffer: @ 800BB5C push {r4-r6,lr} - ldr r1, _0800BBA4 @ =gUnknown_3003FB0 + ldr r1, _0800BBA4 @ =gLink ldr r2, _0800BBA8 @ =0x00000339 adds r0, r1, r2 movs r2, 0 @@ -4490,7 +3707,7 @@ _0800BB82: pop {r0} bx r0 .align 2, 0 -_0800BBA4: .4byte gUnknown_3003FB0 +_0800BBA4: .4byte gLink _0800BBA8: .4byte 0x00000339 _0800BBAC: .4byte 0x0000efff thumb_func_end ResetSendBuffer @@ -4498,7 +3715,7 @@ _0800BBAC: .4byte 0x0000efff thumb_func_start ResetRecvBuffer ResetRecvBuffer: @ 800BBB0 push {r4-r7,lr} - ldr r1, _0800BC10 @ =gUnknown_3003FB0 + ldr r1, _0800BC10 @ =gLink ldr r2, _0800BC14 @ =0x00000fbd adds r0, r1, r2 movs r2, 0 @@ -4549,7 +3766,7 @@ _0800BBE6: pop {r0} bx r0 .align 2, 0 -_0800BC10: .4byte gUnknown_3003FB0 +_0800BC10: .4byte gLink _0800BC14: .4byte 0x00000fbd _0800BC18: .4byte 0x00000fbc _0800BC1C: .4byte 0x0000efff diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index 582cc073e..3b6ec730f 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -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: diff --git a/asm/overworld.s b/asm/overworld.s index 5cc051c8a..f2ec7532b 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -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 diff --git a/asm/trade.s b/asm/trade.s index 4c3932ef1..52db4c7d2 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -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 diff --git a/baserom.ips b/baserom.ips Binary files differindex df32a8df2..362a80b84 100644 --- a/baserom.ips +++ b/baserom.ips diff --git a/data/data.s b/data/data.s index 018135521..5a5580d37 100644 --- a/data/data.s +++ b/data/data.s @@ -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 diff --git a/include/bg_regs.h b/include/bg_regs.h new file mode 100644 index 000000000..660b47d1e --- /dev/null +++ b/include/bg_regs.h @@ -0,0 +1,6 @@ +#ifndef GUARD_BG_REGS_H +#define GUARD_BG_REGS_H + +extern const u8 gBGControlRegOffsets[]; + +#endif //GUARD_BG_REGS_H diff --git a/include/link.h b/include/link.h index 22667cc11..220465046 100644 --- a/include/link.h +++ b/include/link.h @@ -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); diff --git a/include/main.h b/include/main.h index d326909ff..7218dc896 100644 --- a/include/main.h +++ b/include/main.h @@ -71,4 +71,6 @@ void SeedRngAndSetTrainerId(void); extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; +extern u8 gLinkTransferringData; + #endif // GUARD_MAIN_H diff --git a/ld_script.txt b/ld_script.txt index 433528ed4..233a65bb8 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -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); diff --git a/src/link.c b/src/link.c index b1e1466fc..6f28f78c8 100644 --- a/src/link.c +++ b/src/link.c @@ -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; + } +} diff --git a/src/mevent.c b/src/mevent.c index a4a9ea82d..25c5294e9 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -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 diff --git a/sym_common.txt b/sym_common.txt index 646d333cb..0adbe29b3 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -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 - -gUnknown_3003ED2: @ 3003ED2 - .space 0x2 + .space 0x50 -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 - .space 0x4 - -gSioMlt_Recv: @ 3003FB4 - .space 0xFBC +gLink: @ 3003FB0 + .space 0xFC0 -gUnknown_3004F70: @ 3004F70 +gLastRecvQueueCount: @ 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 |