diff options
36 files changed, 1303 insertions, 2054 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s index a20b4310c..03105bc3d 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -2087,7 +2087,7 @@ _080817C0: bl sub_8057F34 ldr r0, _080817DC @ =gSpecialVar_0x8005 ldrb r0, [r0] - bl sub_80096F8 + bl SetLocalLinkPlayerId movs r0, 0x2 strh r0, [r5, 0x8] b _08081820 @@ -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/easy_chat.s b/asm/easy_chat.s index ffd31bcc8..26d7ac8bc 100644 --- a/asm/easy_chat.s +++ b/asm/easy_chat.s @@ -797,7 +797,7 @@ _080BDCA4: .4byte 0x0000ffff thumb_func_start sub_80BDCA8 sub_80BDCA8: @ 80BDCA8 push {lr} - bl sub_806E25C + bl IsNationalPokedexEnabled lsls r0, 24 lsrs r0, 24 pop {r1} @@ -1116,7 +1116,7 @@ _080BDEB2: movs r0, 0x13 strh r0, [r3] _080BDF0C: - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _080BDF2A ldr r0, _080BDF30 @ =gUnknown_20399BC diff --git a/asm/event_data.s b/asm/event_data.s index 263bd99c3..4c7c7c828 100644 --- a/asm/event_data.s +++ b/asm/event_data.s @@ -193,8 +193,8 @@ _0806E254: .4byte gSaveBlock2Ptr _0806E258: .4byte 0x00006258 thumb_func_end EnableNationalPokedex - thumb_func_start sub_806E25C -sub_806E25C: @ 806E25C + thumb_func_start IsNationalPokedexEnabled +IsNationalPokedexEnabled: @ 806E25C push {lr} ldr r0, _0806E288 @ =gSaveBlock2Ptr ldr r0, [r0] @@ -224,7 +224,7 @@ _0806E294: _0806E296: pop {r1} bx r1 - thumb_func_end sub_806E25C + thumb_func_end IsNationalPokedexEnabled thumb_func_start sub_806E29C sub_806E29C: @ 806E29C diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s index d88145fde..1ffe9b0db 100644 --- a/asm/evolution_scene.s +++ b/asm/evolution_scene.s @@ -1321,7 +1321,7 @@ sub_80CE8DC: @ 80CE8DC ldr r0, _080CE940 @ =gPlayerParty adds r1, r0 mov r9, r1 - bl sub_806E25C + bl IsNationalPokedexEnabled mov r10, r4 cmp r0, 0 bne _080CE948 @@ -2736,7 +2736,7 @@ sub_80CF53C: @ 80CF53C ldr r0, _080CF5C0 @ =gPlayerParty adds r1, r0 mov r8, r1 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _080CF598 movs r1, 0x8 diff --git a/asm/link.s b/asm/link.s index 80b4f5f6a..14131af9e 100644 --- a/asm/link.s +++ b/asm/link.s @@ -5,1427 +5,6 @@ .text - thumb_func_start sub_8009480 -sub_8009480: @ 8009480 - push {lr} - ldr r0, _08009494 @ =gUnknown_203ADFA - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08009498 - movs r0, 0 - b _080094CE - .align 2, 0 -_08009494: .4byte gUnknown_203ADFA -_08009498: - bl sub_800B1F4 - bl sub_80F86F4 - movs r0, 0x1 - bl sub_80FB128 - bl sub_80FD3A4 - ldr r1, _080094C0 @ =0x00008001 - cmp r0, r1 - beq _080094C4 - bl sub_800B210 - bl CloseLink - bl RestoreSerialTimer3IntrHandlers - movs r0, 0 - b _080094CE - .align 2, 0 -_080094C0: .4byte 0x00008001 -_080094C4: - bl rfu_REQ_stopMode - bl rfu_waitREQComplete - movs r0, 0x1 -_080094CE: - pop {r1} - bx r1 - thumb_func_end sub_8009480 - - thumb_func_start sub_80094D4 -sub_80094D4: @ 80094D4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end sub_80094D4 - - thumb_func_start sub_80094E4 -sub_80094E4: @ 80094E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldr r4, [sp, 0x18] - lsls r5, 24 - lsrs r5, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08009540 @ =gUnknown_8232578 - lsls r1, r5, 4 - movs r2, 0x20 - bl LoadPalette - ldr r3, _08009544 @ =0x040000d4 - ldr r0, _08009548 @ =gUnknown_8232598 - str r0, [r3] - lsls r2, r7, 14 - lsls r0, r4, 5 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - adds r2, r0 - str r2, [r3, 0x4] - ldr r0, _0800954C @ =0x80001000 - str r0, [r3, 0x8] - ldr r0, [r3, 0x8] - ldr r0, _08009550 @ =gUnknown_3003F70 - str r6, [r0] - str r5, [r0, 0x4] - str r4, [r0, 0x8] - mov r0, r8 - cmp r0, 0x2 - beq _0800956E - cmp r0, 0x2 - bgt _08009554 - cmp r0, 0x1 - beq _0800955C - b _08009590 - .align 2, 0 -_08009540: .4byte gUnknown_8232578 -_08009544: .4byte 0x040000d4 -_08009548: .4byte gUnknown_8232598 -_0800954C: .4byte 0x80001000 -_08009550: .4byte gUnknown_3003F70 -_08009554: - mov r0, r8 - cmp r0, 0x3 - beq _08009580 - b _08009590 -_0800955C: - lsls r1, r6, 8 - movs r0, 0x1 - orrs r1, r0 - lsls r0, r7, 2 - orrs r1, r0 - movs r0, 0xA - bl SetGpuReg - b _08009590 -_0800956E: - lsls r1, r6, 8 - movs r0, 0x1 - orrs r1, r0 - lsls r0, r7, 2 - orrs r1, r0 - movs r0, 0xC - bl SetGpuReg - b _08009590 -_08009580: - lsls r1, r6, 8 - movs r0, 0x1 - orrs r1, r0 - lsls r0, r7, 2 - orrs r1, r0 - movs r0, 0xE - bl SetGpuReg -_08009590: - mov r0, r8 - lsls r4, r0, 2 - adds r0, r4, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl SetGpuReg - adds r4, 0x12 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl SetGpuReg - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80094E4 - - thumb_func_start sub_80095BC -sub_80095BC: @ 80095BC - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r6, r1, 0 - adds r4, r2, 0 - adds r5, r3, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r0, _08009628 @ =gUnknown_8232578 - mov r2, r8 - lsls r1, r2, 4 - movs r2, 0x20 - bl LoadPalette - ldr r2, _0800962C @ =0x040000d4 - ldr r0, _08009630 @ =gUnknown_8232598 - str r0, [r2] - lsls r0, r5, 14 - movs r1, 0xC0 - lsls r1, 19 - adds r0, r1 - str r0, [r2, 0x4] - ldr r0, _08009634 @ =0x80001000 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _08009638 @ =gUnknown_3003F70 - str r4, [r0] - mov r1, r8 - str r1, [r0, 0x4] - movs r1, 0 - str r1, [r0, 0x8] - ldr r0, _0800963C @ =gBGControlRegOffsets - adds r6, r0 - ldrb r0, [r6] - lsls r4, 8 - lsls r5, 2 - orrs r4, r5 - adds r1, r4, 0 - bl SetGpuReg - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08009628: .4byte gUnknown_8232578 -_0800962C: .4byte 0x040000d4 -_08009630: .4byte gUnknown_8232598 -_08009634: .4byte 0x80001000 -_08009638: .4byte gUnknown_3003F70 -_0800963C: .4byte gBGControlRegOffsets - thumb_func_end sub_80095BC - - thumb_func_start sub_8009640 -sub_8009640: @ 8009640 - push {r4,lr} - sub sp, 0x4 - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - ldr r0, _080096D4 @ =sub_800978C - bl SetVBlankCallback - bl ResetBlockSend - ldr r1, _080096D8 @ =gLinkType - ldr r2, _080096DC @ =0x00001111 - adds r0, r2, 0 - strh r0, [r1] - bl OpenLink - ldr r0, _080096E0 @ =gMain - ldrh r0, [r0, 0x24] - bl SeedRng - movs r4, 0 -_08009670: - bl Random - ldr r1, _080096E4 @ =gSaveBlock2Ptr - ldr r1, [r1] - adds r1, 0xA - adds r1, r4 - strb r0, [r1] - adds r4, 0x1 - cmp r4, 0x3 - ble _08009670 - movs r4, 0 - str r4, [sp] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0 - bl sub_80094E4 - movs r1, 0xAA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _080096E8 @ =sub_80094D4 - movs r1, 0 - bl CreateTask - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080096EC @ =gUnknown_3000E58 - str r4, [r0] - bl sub_8009708 - ldr r0, _080096F0 @ =task00_link_test - movs r1, 0 - bl CreateTask - ldr r0, _080096F4 @ =c2_08009A8C - bl SetMainCallback2 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080096D4: .4byte sub_800978C -_080096D8: .4byte gLinkType -_080096DC: .4byte 0x00001111 -_080096E0: .4byte gMain -_080096E4: .4byte gSaveBlock2Ptr -_080096E8: .4byte sub_80094D4 -_080096EC: .4byte gUnknown_3000E58 -_080096F0: .4byte task00_link_test -_080096F4: .4byte c2_08009A8C - thumb_func_end sub_8009640 - - thumb_func_start sub_80096F8 -sub_80096F8: @ 80096F8 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08009704 @ =gLocalLinkPlayer - strh r0, [r1, 0x18] - bx lr - .align 2, 0 -_08009704: .4byte gLocalLinkPlayer - thumb_func_end sub_80096F8 - - thumb_func_start sub_8009708 -sub_8009708: @ 8009708 - push {r4,r5,lr} - ldr r5, _08009774 @ =gLocalLinkPlayer - ldr r4, _08009778 @ =gSaveBlock2Ptr - ldr r1, [r4] - ldrb r2, [r1, 0xA] - ldrb r0, [r1, 0xB] - lsls r0, 8 - orrs r2, r0 - ldrb r0, [r1, 0xC] - lsls r0, 16 - orrs r2, r0 - ldrb r0, [r1, 0xD] - lsls r0, 24 - orrs r2, r0 - str r2, [r5, 0x4] - adds r0, r5, 0 - adds r0, 0x8 - bl StringCopy - ldr r0, [r4] - ldrb r0, [r0, 0x8] - strb r0, [r5, 0x13] - ldr r0, _0800977C @ =gLinkType - ldrh r0, [r0] - str r0, [r5, 0x14] - ldr r0, _08009780 @ =gGameLanguage - ldrb r0, [r0] - strh r0, [r5, 0x1A] - ldr r0, _08009784 @ =gGameVersion - ldrb r0, [r0] - movs r2, 0x80 - lsls r2, 7 - adds r1, r2, 0 - adds r0, r1 - strh r0, [r5] - movs r0, 0x80 - lsls r0, 8 - strh r0, [r5, 0x2] - bl sub_806E25C - strb r0, [r5, 0x10] - ldr r0, _08009788 @ =0x00000844 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0800976E - ldrb r0, [r5, 0x10] - movs r1, 0x10 - orrs r0, r1 - strb r0, [r5, 0x10] -_0800976E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08009774: .4byte gLocalLinkPlayer -_08009778: .4byte gSaveBlock2Ptr -_0800977C: .4byte gLinkType -_08009780: .4byte gGameLanguage -_08009784: .4byte gGameVersion -_08009788: .4byte 0x00000844 - thumb_func_end sub_8009708 - - thumb_func_start sub_800978C -sub_800978C: @ 800978C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_800978C - - thumb_func_start sub_80097A0 -sub_80097A0: @ 80097A0 - push {lr} - ldr r3, _080097C0 @ =gLinkOpen - ldr r1, _080097C4 @ =gUnknown_3003F50 - ldr r2, _080097C8 @ =0x0000efff - adds r0, r1, 0 - adds r0, 0xE -_080097AC: - strh r2, [r0] - subs r0, 0x2 - cmp r0, r1 - bge _080097AC - movs r0, 0x1 - strb r0, [r3] - bl sub_800B2F4 - pop {r0} - bx r0 - .align 2, 0 -_080097C0: .4byte gLinkOpen -_080097C4: .4byte gUnknown_3003F50 -_080097C8: .4byte 0x0000efff - thumb_func_end sub_80097A0 - - thumb_func_start task02_080097CC -task02_080097CC: @ 80097CC - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080097FC @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _080097F6 - ldr r1, _08009800 @ =gUnknown_3003F84 - movs r0, 0x1 - strb r0, [r1] - adds r0, r2, 0 - bl DestroyTask -_080097F6: - pop {r0} - bx r0 - .align 2, 0 -_080097FC: .4byte gTasks -_08009800: .4byte gUnknown_3003F84 - thumb_func_end task02_080097CC - - thumb_func_start OpenLink -OpenLink: @ 8009804 - push {r4-r6,lr} - ldr r0, _0800984C @ =gWirelessCommType - ldrb r4, [r0] - cmp r4, 0 - bne _08009878 - bl sub_800B388 - bl sub_80097A0 - ldr r1, _08009850 @ =gUnknown_3003F80 - ldr r0, _08009854 @ =sub_800A720 - str r0, [r1] - ldr r0, _08009858 @ =gLinkVSyncDisabled - strb r4, [r0] - ldr r0, _0800985C @ =gUnknown_3003EAC - strb r4, [r0] - ldr r0, _08009860 @ =gUnknown_3003F38 - strb r4, [r0] - bl ResetBlockReceivedFlags - bl ResetBlockSend - ldr r0, _08009864 @ =gUnknown_3000E4C - str r4, [r0] - ldr r0, _08009868 @ =gUnknown_3003F28 - strb r4, [r0] - ldr r0, _0800986C @ =gUnknown_3003F24 - strb r4, [r0] - ldr r0, _08009870 @ =gUnknown_3003F34 - strh r4, [r0] - ldr r0, _08009874 @ =task02_080097CC - movs r1, 0x2 - bl CreateTask - b _0800987C - .align 2, 0 -_0800984C: .4byte gWirelessCommType -_08009850: .4byte gUnknown_3003F80 -_08009854: .4byte sub_800A720 -_08009858: .4byte gLinkVSyncDisabled -_0800985C: .4byte gUnknown_3003EAC -_08009860: .4byte gUnknown_3003F38 -_08009864: .4byte gUnknown_3000E4C -_08009868: .4byte gUnknown_3003F28 -_0800986C: .4byte gUnknown_3003F24 -_08009870: .4byte gUnknown_3003F34 -_08009874: .4byte task02_080097CC -_08009878: - bl sub_80F86F4 -_0800987C: - ldr r1, _080098A8 @ =gReceivedRemoteLinkPlayers - movs r0, 0 - strb r0, [r1] - movs r1, 0 - ldr r6, _080098AC @ =gUnknown_3003EB8 - movs r2, 0 - movs r5, 0x1 - ldr r4, _080098B0 @ =gUnknown_3003F30 - ldr r3, _080098B4 @ =gUnknown_3003F2C -_0800988E: - adds r0, r1, r6 - strb r5, [r0] - adds r0, r1, r4 - strb r2, [r0] - adds r0, r1, r3 - strb r2, [r0] - adds r1, 0x1 - cmp r1, 0x3 - ble _0800988E - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080098A8: .4byte gReceivedRemoteLinkPlayers -_080098AC: .4byte gUnknown_3003EB8 -_080098B0: .4byte gUnknown_3003F30 -_080098B4: .4byte gUnknown_3003F2C - thumb_func_end OpenLink - - thumb_func_start CloseLink -CloseLink: @ 80098B8 - push {r4,lr} - ldr r0, _080098DC @ =gReceivedRemoteLinkPlayers - movs r4, 0 - strb r4, [r0] - ldr r0, _080098E0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _080098CC - bl sub_80F8DC0 -_080098CC: - ldr r0, _080098E4 @ =gLinkOpen - strb r4, [r0] - bl sub_800B29C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080098DC: .4byte gReceivedRemoteLinkPlayers -_080098E0: .4byte gWirelessCommType -_080098E4: .4byte gLinkOpen - thumb_func_end CloseLink - - thumb_func_start TestBlockTransfer -TestBlockTransfer: @ 80098E8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r5, _080099AC @ =gUnknown_3000E5C - ldr r4, _080099B0 @ =gUnknown_3000E08 - ldrb r0, [r5] - ldrh r1, [r4] - cmp r0, r1 - beq _0800990C - ldrh r0, [r4] - movs r1, 0x2 - movs r2, 0x3 - movs r3, 0x2 - bl sub_800A684 - ldrh r0, [r4] - strb r0, [r5] -_0800990C: - movs r5, 0 - ldr r7, _080099B4 @ =gUnknown_3000E18 -_08009910: - ldr r0, _080099B8 @ =gUnknown_3000E60 - adds r6, r5, r0 - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r4, r0, r7 - ldrb r0, [r6] - ldrh r1, [r4] - cmp r0, r1 - beq _08009938 - ldrh r0, [r4] - adds r2, r5, 0x4 - lsls r2, 24 - lsrs r2, 24 - movs r1, 0x2 - movs r3, 0x2 - bl sub_800A684 - ldrh r0, [r4] - strb r0, [r6] -_08009938: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _08009910 - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xF - bne _0800999E - movs r5, 0 - ldr r0, _080099B4 @ =gUnknown_3000E18 - mov r9, r0 - ldr r1, _080099BC @ =0x00000342 - mov r8, r1 -_08009958: - adds r0, r7, 0 - asrs r0, r5 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08009994 - lsls r0, r5, 8 - ldr r1, _080099C0 @ =gBlockRecvBuffer - adds r0, r1 - lsls r4, r5, 1 - adds r1, r4, r5 - lsls r1, 2 - add r1, r9 - ldrh r1, [r1, 0x2] - bl LinkTestCalcBlockChecksum - ldr r1, _080099C4 @ =gUnknown_3003F88 - adds r4, r1 - movs r6, 0 - strh r0, [r4] - adds r0, r5, 0 - bl ResetBlockReceivedFlag - ldrh r0, [r4] - cmp r0, r8 - beq _08009994 - ldr r0, _080099C8 @ =gLinkTestDebugValuesEnabled - strb r6, [r0] - ldr r0, _080099CC @ =gUnknown_2022111 - strb r6, [r0] -_08009994: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _08009958 -_0800999E: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080099AC: .4byte gUnknown_3000E5C -_080099B0: .4byte gUnknown_3000E08 -_080099B4: .4byte gUnknown_3000E18 -_080099B8: .4byte gUnknown_3000E60 -_080099BC: .4byte 0x00000342 -_080099C0: .4byte gBlockRecvBuffer -_080099C4: .4byte gUnknown_3003F88 -_080099C8: .4byte gLinkTestDebugValuesEnabled -_080099CC: .4byte gUnknown_2022111 - thumb_func_end TestBlockTransfer - - 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 @ =gUnknown_3003F84 - 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 @ =gUnknown_3003F80 - 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 gUnknown_3003F84 -_08009A78: .4byte gHeap + 0x4000 -_08009A7C: .4byte 0x00002004 -_08009A80: .4byte gLinkTestDebugValuesEnabled -_08009A84: .4byte gLinkVSyncDisabled -_08009A88: .4byte gUnknown_3003F80 - thumb_func_end LinkTestProcessKeyInput - - thumb_func_start c2_08009A8C -c2_08009A8C: @ 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 c2_08009A8C - - 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 @ =gUnknown_3003F50 - 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 @ =gUnknown_3003F80 - 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 gUnknown_3003F50 -_08009B1C: .4byte gUnknown_3003F20 -_08009B20: .4byte 0x04000128 -_08009B24: .4byte gUnknown_3003F80 - 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 @ =gUnknown_3003EB8 - adds r0, r1 - strb r5, [r0] - movs r4, 0 - adds r6, r1, 0 - b _08009B48 - .align 2, 0 -_08009B3C: .4byte gUnknown_3003EB8 -_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 sub_8009708 - 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 @ =gUnknown_3000E18 - 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 gUnknown_3000E18 -_08009CBC: .4byte gRecvCmds -_08009CC0: - mov r3, r12 - adds r0, r3, r6 - lsls r0, 2 - ldr r5, _08009D04 @ =gUnknown_3000E18 - 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 gUnknown_3000E18 -_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 @ =gUnknown_3003EB8 - 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 gUnknown_3003EB8 -_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 @ =gUnknown_3003F50 - strh r2, [r0] - ldr r1, _08009F18 @ =gLinkType - ldrh r1, [r1] - b _08009FD4 - .align 2, 0 -_08009F14: .4byte gUnknown_3003F50 -_08009F18: .4byte gLinkType -_08009F1C: - ldr r0, _08009F28 @ =gUnknown_3003F50 - strh r2, [r0] - ldr r1, _08009F2C @ =gMain - ldrh r1, [r1, 0x2C] - b _08009FD4 - .align 2, 0 -_08009F28: .4byte gUnknown_3003F50 -_08009F2C: .4byte gMain -_08009F30: - ldr r0, _08009F38 @ =gUnknown_3003F50 - movs r1, 0 - b _08009FD2 - .align 2, 0 -_08009F38: .4byte gUnknown_3003F50 -_08009F3C: - ldr r0, _08009F58 @ =gUnknown_3003F50 - 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 gUnknown_3003F50 -_08009F5C: - ldr r1, _08009F70 @ =gUnknown_3003F50 - strh r2, [r1] - ldr r2, _08009F74 @ =gUnknown_3000E08 - 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 gUnknown_3003F50 -_08009F74: .4byte gUnknown_3000E08 -_08009F78: - ldr r0, _08009F84 @ =gUnknown_3003F50 - strh r2, [r0] - ldr r1, _08009F88 @ =gSpecialVar_ItemId - ldrh r1, [r1] - b _08009FD4 - .align 2, 0 -_08009F84: .4byte gUnknown_3003F50 -_08009F88: .4byte gSpecialVar_ItemId -_08009F8C: - ldr r0, _08009F98 @ =gUnknown_3003F50 - strh r2, [r0] - ldr r1, _08009F9C @ =gUnknown_3003F90 - ldrb r1, [r1] - b _08009FD4 - .align 2, 0 -_08009F98: .4byte gUnknown_3003F50 -_08009F9C: .4byte gUnknown_3003F90 -_08009FA0: - ldr r0, _08009FAC @ =gUnknown_3003F50 - strh r2, [r0] - ldr r1, _08009FB0 @ =gUnknown_3003F34 - ldrh r1, [r1] - b _08009FD4 - .align 2, 0 -_08009FAC: .4byte gUnknown_3003F50 -_08009FB0: .4byte gUnknown_3003F34 -_08009FB4: - ldr r0, _08009FBC @ =gUnknown_3003F50 - strh r2, [r0] - b _08009FD6 - .align 2, 0 -_08009FBC: .4byte gUnknown_3003F50 -_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 @ =gUnknown_3003F50 -_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 gUnknown_3003F50 - thumb_func_end sub_8009E60 - thumb_func_start sub_8009FE8 sub_8009FE8: @ 8009FE8 push {lr} @@ -1435,14 +14,14 @@ sub_8009FE8: @ 8009FE8 beq _08009FF6 bl sub_80F9828 _08009FF6: - ldr r1, _0800A004 @ =gUnknown_3003F80 + ldr r1, _0800A004 @ =gLinkCallback ldr r0, _0800A008 @ =sub_800A040 str r0, [r1] pop {r0} bx r0 .align 2, 0 _0800A000: .4byte gWirelessCommType -_0800A004: .4byte gUnknown_3003F80 +_0800A004: .4byte gLinkCallback _0800A008: .4byte sub_800A040 thumb_func_end sub_8009FE8 @@ -1458,7 +37,7 @@ sub_800A00C: @ 800A00C .align 2, 0 _0800A01C: .4byte gWirelessCommType _0800A020: - ldr r0, _0800A030 @ =gUnknown_3003F80 + ldr r0, _0800A030 @ =gLinkCallback ldr r1, [r0] ldr r0, _0800A034 @ =sub_800A040 cmp r1, r0 @@ -1466,7 +45,7 @@ _0800A020: movs r0, 0 b _0800A03A .align 2, 0 -_0800A030: .4byte gUnknown_3003F80 +_0800A030: .4byte gLinkCallback _0800A034: .4byte sub_800A040 _0800A038: movs r0, 0x1 @@ -1483,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 @@ -1494,12 +73,12 @@ _0800A058: .4byte 0x0000cafe thumb_func_start sub_800A05C sub_800A05C: @ 800A05C - ldr r1, _0800A064 @ =gUnknown_3003F80 + ldr r1, _0800A064 @ =gLinkCallback movs r0, 0 str r0, [r1] bx lr .align 2, 0 -_0800A064: .4byte gUnknown_3003F80 +_0800A064: .4byte gLinkCallback thumb_func_end sub_800A05C thumb_func_start sub_800A068 @@ -1514,13 +93,13 @@ sub_800A068: @ 800A068 .align 2, 0 _0800A078: .4byte gWirelessCommType _0800A07C: - ldr r0, _0800A084 @ =gUnknown_3003F80 + ldr r0, _0800A084 @ =gLinkCallback str r1, [r0] _0800A080: pop {r0} bx r0 .align 2, 0 -_0800A084: .4byte gUnknown_3003F80 +_0800A084: .4byte gLinkCallback thumb_func_end sub_800A068 thumb_func_start GetLinkPlayerCount @@ -1530,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 @@ -1538,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 @@ -1551,7 +130,7 @@ _0800A0B0: thumb_func_start sub_800A0B4 sub_800A0B4: @ 800A0B4 push {lr} - ldr r0, _0800A0C8 @ =gUnknown_3000E54 + ldr r0, _0800A0C8 @ =sPlayerDataExchangeStatus movs r1, 0 str r1, [r0] ldr r0, _0800A0CC @ =gLinkTimeOutCounter @@ -1560,7 +139,7 @@ sub_800A0B4: @ 800A0B4 pop {r0} bx r0 .align 2, 0 -_0800A0C8: .4byte gUnknown_3000E54 +_0800A0C8: .4byte sPlayerDataExchangeStatus _0800A0CC: .4byte gLinkTimeOutCounter thumb_func_end sub_800A0B4 @@ -1582,19 +161,19 @@ sub_800A0D0: @ 800A0D0 cmp r0, r6 ble _0800A100 _0800A0F0: - ldr r1, _0800A0FC @ =gUnknown_3000E54 + ldr r1, _0800A0FC @ =sPlayerDataExchangeStatus movs r0, 0x6 str r0, [r1] b _0800A1E2 .align 2, 0 _0800A0F8: .4byte gReceivedRemoteLinkPlayers -_0800A0FC: .4byte gUnknown_3000E54 +_0800A0FC: .4byte sPlayerDataExchangeStatus _0800A100: bl GetLinkPlayerCount lsls r0, 24 cmp r0, 0 bne _0800A112 - ldr r0, _0800A11C @ =gUnknown_3003EAC + ldr r0, _0800A11C @ =gLinkErrorOccurred strb r4, [r0] bl CloseLink _0800A112: @@ -1603,7 +182,7 @@ _0800A112: movs r5, 0 b _0800A138 .align 2, 0 -_0800A11C: .4byte gUnknown_3003EAC +_0800A11C: .4byte gLinkErrorOccurred _0800A120: .4byte gLinkPlayers _0800A124: adds r0, r4, 0 @@ -1640,52 +219,52 @@ _0800A138: bgt _0800A17C cmp r0, 0 beq _0800A188 - ldr r2, _0800A178 @ =gUnknown_3000E54 + ldr r2, _0800A178 @ =sPlayerDataExchangeStatus b _0800A1E0 .align 2, 0 _0800A170: .4byte gLinkPlayers _0800A174: .4byte 0x00001133 -_0800A178: .4byte gUnknown_3000E54 +_0800A178: .4byte sPlayerDataExchangeStatus _0800A17C: cmp r0, 0x2 beq _0800A1A0 - ldr r2, _0800A184 @ =gUnknown_3000E54 + ldr r2, _0800A184 @ =sPlayerDataExchangeStatus b _0800A1E0 .align 2, 0 -_0800A184: .4byte gUnknown_3000E54 +_0800A184: .4byte sPlayerDataExchangeStatus _0800A188: - ldr r1, _0800A190 @ =gUnknown_3000E54 + ldr r1, _0800A190 @ =sPlayerDataExchangeStatus movs r0, 0x1 b _0800A1BC .align 2, 0 -_0800A190: .4byte gUnknown_3000E54 +_0800A190: .4byte sPlayerDataExchangeStatus _0800A194: - ldr r1, _0800A19C @ =gUnknown_3000E54 + ldr r1, _0800A19C @ =sPlayerDataExchangeStatus movs r0, 0x4 b _0800A1BC .align 2, 0 -_0800A19C: .4byte gUnknown_3000E54 +_0800A19C: .4byte sPlayerDataExchangeStatus _0800A1A0: - ldr r1, _0800A1A8 @ =gUnknown_3000E54 + ldr r1, _0800A1A8 @ =sPlayerDataExchangeStatus movs r0, 0x5 b _0800A1BC .align 2, 0 -_0800A1A8: .4byte gUnknown_3000E54 +_0800A1A8: .4byte sPlayerDataExchangeStatus _0800A1AC: - ldr r1, _0800A1B4 @ =gUnknown_3000E54 + ldr r1, _0800A1B4 @ =sPlayerDataExchangeStatus movs r0, 0x1 b _0800A1BC .align 2, 0 -_0800A1B4: .4byte gUnknown_3000E54 +_0800A1B4: .4byte sPlayerDataExchangeStatus _0800A1B8: - ldr r1, _0800A1C4 @ =gUnknown_3000E54 + ldr r1, _0800A1C4 @ =sPlayerDataExchangeStatus movs r0, 0x3 _0800A1BC: str r0, [r1] adds r2, r1, 0 b _0800A1E0 .align 2, 0 -_0800A1C4: .4byte gUnknown_3000E54 +_0800A1C4: .4byte sPlayerDataExchangeStatus _0800A1C8: ldr r0, _0800A1E8 @ =gLinkTimeOutCounter ldrh r1, [r0] @@ -1694,7 +273,7 @@ _0800A1C8: lsls r1, 16 movs r0, 0x96 lsls r0, 18 - ldr r2, _0800A1EC @ =gUnknown_3000E54 + ldr r2, _0800A1EC @ =sPlayerDataExchangeStatus cmp r1, r0 bls _0800A1E0 movs r0, 0x2 @@ -1707,7 +286,7 @@ _0800A1E2: bx r1 .align 2, 0 _0800A1E8: .4byte gLinkTimeOutCounter -_0800A1EC: .4byte gUnknown_3000E54 +_0800A1EC: .4byte sPlayerDataExchangeStatus thumb_func_end sub_800A0D0 thumb_func_start IsLinkPlayerDataExchangeComplete @@ -1749,14 +328,14 @@ _0800A220: cmp r6, r0 bne _0800A244 movs r2, 0x1 - ldr r0, _0800A240 @ =gUnknown_3000E54 + ldr r0, _0800A240 @ =sPlayerDataExchangeStatus str r2, [r0] b _0800A24C .align 2, 0 -_0800A240: .4byte gUnknown_3000E54 +_0800A240: .4byte sPlayerDataExchangeStatus _0800A244: movs r2, 0 - ldr r1, _0800A254 @ =gUnknown_3000E54 + ldr r1, _0800A254 @ =sPlayerDataExchangeStatus movs r0, 0x3 str r0, [r1] _0800A24C: @@ -1765,7 +344,7 @@ _0800A24C: pop {r1} bx r1 .align 2, 0 -_0800A254: .4byte gUnknown_3000E54 +_0800A254: .4byte sPlayerDataExchangeStatus thumb_func_end IsLinkPlayerDataExchangeComplete thumb_func_start GetLinkPlayerTrainerId @@ -1807,7 +386,7 @@ _0800A290: .4byte gLinkPlayers thumb_func_start ResetBlockSend ResetBlockSend: @ 800A294 - ldr r1, _0800A2A4 @ =gUnknown_3000E08 + ldr r1, _0800A2A4 @ =sBlockSend movs r0, 0 strb r0, [r1, 0x8] strh r0, [r1] @@ -1815,7 +394,7 @@ ResetBlockSend: @ 800A294 str r0, [r1, 0x4] bx lr .align 2, 0 -_0800A2A4: .4byte gUnknown_3000E08 +_0800A2A4: .4byte sBlockSend thumb_func_end ResetBlockSend thumb_func_start InitBlockSend @@ -1823,14 +402,14 @@ InitBlockSend: @ 800A2A8 push {r4-r7,lr} adds r7, r0, 0 adds r6, r1, 0 - ldr r4, _0800A2BC @ =gUnknown_3000E08 + ldr r4, _0800A2BC @ =sBlockSend ldrb r5, [r4, 0x8] cmp r5, 0 beq _0800A2C0 movs r0, 0 b _0800A2FE .align 2, 0 -_0800A2BC: .4byte gUnknown_3000E08 +_0800A2BC: .4byte sBlockSend _0800A2C0: bl GetMultiplayerId strb r0, [r4, 0x9] @@ -1855,11 +434,11 @@ _0800A2E8: str r5, [r4, 0x4] _0800A2EA: ldr r0, _0800A308 @ =0x0000bbbb - bl sub_8009E60 - ldr r1, _0800A30C @ =gUnknown_3003F80 + bl BuildSendCmd + ldr r1, _0800A30C @ =gLinkCallback ldr r0, _0800A310 @ =LinkCB_BlockSendBegin str r0, [r1] - ldr r1, _0800A314 @ =gUnknown_3000E48 + ldr r1, _0800A314 @ =sBlockSendDelayCounter movs r0, 0 str r0, [r1] movs r0, 0x1 @@ -1870,38 +449,38 @@ _0800A2FE: .align 2, 0 _0800A304: .4byte gBlockSendBuffer _0800A308: .4byte 0x0000bbbb -_0800A30C: .4byte gUnknown_3003F80 +_0800A30C: .4byte gLinkCallback _0800A310: .4byte LinkCB_BlockSendBegin -_0800A314: .4byte gUnknown_3000E48 +_0800A314: .4byte sBlockSendDelayCounter thumb_func_end InitBlockSend thumb_func_start LinkCB_BlockSendBegin LinkCB_BlockSendBegin: @ 800A318 push {lr} - ldr r1, _0800A330 @ =gUnknown_3000E48 + ldr r1, _0800A330 @ =sBlockSendDelayCounter ldr r0, [r1] adds r0, 0x1 str r0, [r1] cmp r0, 0x2 bls _0800A32C - ldr r1, _0800A334 @ =gUnknown_3003F80 + ldr r1, _0800A334 @ =gLinkCallback ldr r0, _0800A338 @ =LinkCB_BlockSend str r0, [r1] _0800A32C: pop {r0} bx r0 .align 2, 0 -_0800A330: .4byte gUnknown_3000E48 -_0800A334: .4byte gUnknown_3003F80 +_0800A330: .4byte sBlockSendDelayCounter +_0800A334: .4byte gLinkCallback _0800A338: .4byte LinkCB_BlockSend thumb_func_end LinkCB_BlockSendBegin thumb_func_start LinkCB_BlockSend LinkCB_BlockSend: @ 800A33C push {r4-r6,lr} - ldr r0, _0800A38C @ =gUnknown_3000E08 + ldr r0, _0800A38C @ =sBlockSend ldr r5, [r0, 0x4] - ldr r2, _0800A390 @ =gUnknown_3003F50 + ldr r2, _0800A390 @ =gSendCmd ldr r1, _0800A394 @ =0x00008888 strh r1, [r2] movs r3, 0 @@ -1932,7 +511,7 @@ _0800A350: bhi _0800A384 movs r0, 0 strb r0, [r4, 0x8] - ldr r1, _0800A398 @ =gUnknown_3003F80 + ldr r1, _0800A398 @ =gLinkCallback ldr r0, _0800A39C @ =sub_800A3A0 str r0, [r1] _0800A384: @@ -1940,21 +519,21 @@ _0800A384: pop {r0} bx r0 .align 2, 0 -_0800A38C: .4byte gUnknown_3000E08 -_0800A390: .4byte gUnknown_3003F50 +_0800A38C: .4byte sBlockSend +_0800A390: .4byte gSendCmd _0800A394: .4byte 0x00008888 -_0800A398: .4byte gUnknown_3003F80 +_0800A398: .4byte gLinkCallback _0800A39C: .4byte sub_800A3A0 thumb_func_end LinkCB_BlockSend thumb_func_start sub_800A3A0 sub_800A3A0: @ 800A3A0 - ldr r1, _0800A3A8 @ =gUnknown_3003F80 + ldr r1, _0800A3A8 @ =gLinkCallback movs r0, 0 str r0, [r1] bx lr .align 2, 0 -_0800A3A8: .4byte gUnknown_3003F80 +_0800A3A8: .4byte gLinkCallback thumb_func_end sub_800A3A0 thumb_func_start sub_800A3AC @@ -1962,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 @@ -1979,13 +558,13 @@ sub_800A3CC: @ 800A3CC ldr r1, _0800A3DC @ =gUnknown_2022114 movs r0, 0 str r0, [r1] - ldr r1, _0800A3E0 @ =gUnknown_3003F80 + ldr r1, _0800A3E0 @ =gLinkCallback ldr r0, _0800A3E4 @ =sub_800A3AC str r0, [r1] bx lr .align 2, 0 _0800A3DC: .4byte gUnknown_2022114 -_0800A3E0: .4byte gUnknown_3003F80 +_0800A3E0: .4byte gLinkCallback _0800A3E4: .4byte sub_800A3AC thumb_func_end sub_800A3CC @@ -2002,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 @@ -2093,25 +672,25 @@ sub_800A474: @ 800A474 .align 2, 0 _0800A490: .4byte gWirelessCommType _0800A494: - ldr r0, _0800A4A0 @ =gUnknown_3003F80 + ldr r0, _0800A4A0 @ =gLinkCallback ldr r0, [r0] cmp r0, 0 beq _0800A4A4 movs r0, 0 b _0800A4B0 .align 2, 0 -_0800A4A0: .4byte gUnknown_3003F80 +_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 @@ -2130,7 +709,7 @@ IsLinkTaskFinished: @ 800A4BC _0800A4D0: .4byte gWirelessCommType _0800A4D4: movs r1, 0 - ldr r0, _0800A4E8 @ =gUnknown_3003F80 + ldr r0, _0800A4E8 @ =gLinkCallback ldr r0, [r0] cmp r0, 0 bne _0800A4E0 @@ -2141,7 +720,7 @@ _0800A4E2: pop {r1} bx r1 .align 2, 0 -_0800A4E8: .4byte gUnknown_3003F80 +_0800A4E8: .4byte gLinkCallback thumb_func_end IsLinkTaskFinished thumb_func_start GetBlockReceivedStatus @@ -2151,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] @@ -2165,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: @@ -2175,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 @@ -2190,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] @@ -2198,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 @@ -2220,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: @@ -2233,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 @@ -2251,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 @@ -2262,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 @@ -2278,15 +857,15 @@ CheckShouldAdvanceLinkState: @ 800A5BC ands r1, r0 cmp r1, 0x4 bls _0800A5D8 - ldr r1, _0800A5E0 @ =gUnknown_3003F84 + ldr r1, _0800A5E0 @ =gShouldAdvanceLinkState movs r0, 0x1 strb r0, [r1] _0800A5D8: pop {r0} bx r0 .align 2, 0 -_0800A5DC: .4byte gUnknown_3003F20 -_0800A5E0: .4byte gUnknown_3003F84 +_0800A5DC: .4byte gLinkStatus +_0800A5E0: .4byte gShouldAdvanceLinkState thumb_func_end CheckShouldAdvanceLinkState thumb_func_start LinkTestCalcBlockChecksum @@ -2326,7 +905,7 @@ PrintHexDigit: @ 800A614 lsls r1, 24 lsrs r1, 24 lsls r2, 24 - ldr r4, _0800A648 @ =gUnknown_3003F70 + ldr r4, _0800A648 @ =gLinkTestBGInfo ldr r3, [r4] lsls r3, 11 movs r5, 0xC0 @@ -2347,7 +926,7 @@ PrintHexDigit: @ 800A614 pop {r0} bx r0 .align 2, 0 -_0800A648: .4byte gUnknown_3003F70 +_0800A648: .4byte gLinkTestBGInfo thumb_func_end PrintHexDigit thumb_func_start sub_800A64C @@ -2358,7 +937,7 @@ sub_800A64C: @ 800A64C lsls r1, 24 lsrs r1, 24 lsls r2, 24 - ldr r4, _0800A680 @ =gUnknown_3003F70 + ldr r4, _0800A680 @ =gLinkTestBGInfo ldr r3, [r4] lsls r3, 11 movs r5, 0xC0 @@ -2378,11 +957,11 @@ sub_800A64C: @ 800A64C pop {r0} bx r0 .align 2, 0 -_0800A680: .4byte gUnknown_3003F70 +_0800A680: .4byte gLinkTestBGInfo thumb_func_end sub_800A64C - thumb_func_start sub_800A684 -sub_800A684: @ 800A684 + thumb_func_start LinkTest_prnthex +LinkTest_prnthex: @ 800A684 push {r4-r7,lr} sub sp, 0x10 adds r5, r0, 0 @@ -2428,7 +1007,7 @@ _0800A6D0: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_800A684 + thumb_func_end LinkTest_prnthex thumb_func_start sub_800A6D8 sub_800A6D8: @ 800A6D8 @@ -2472,58 +1051,58 @@ _0800A718: bx r0 thumb_func_end sub_800A6D8 - thumb_func_start sub_800A720 -sub_800A720: @ 800A720 + 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 @ =gUnknown_3003F80 + ldr r1, _0800A748 @ =gLinkCallback movs r0, 0 str r0, [r1] pop {r0} bx r0 .align 2, 0 -_0800A740: .4byte gUnknown_3003F20 +_0800A740: .4byte gLinkStatus _0800A744: .4byte 0x00002222 -_0800A748: .4byte gUnknown_3003F80 - thumb_func_end sub_800A720 +_0800A748: .4byte gLinkCallback + thumb_func_end LinkCB_RequestPlayerDataExchange thumb_func_start task00_link_test 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 movs r1, 0x5 movs r2, 0x2 bl sub_800A6D8 - ldr r0, _0800A870 @ =gUnknown_3003F84 + ldr r0, _0800A870 @ =gShouldAdvanceLinkState ldrb r0, [r0] movs r1, 0x2 movs r2, 0x1 movs r3, 0x2 - bl sub_800A684 - ldr r4, _0800A874 @ =gUnknown_3003F20 + bl LinkTest_prnthex + ldr r4, _0800A874 @ =gLinkStatus ldr r0, [r4] movs r1, 0xF movs r2, 0x1 movs r3, 0x8 - bl sub_800A684 - ldr r0, _0800A878 @ =gUnknown_3003FB0 + bl LinkTest_prnthex + ldr r0, _0800A878 @ =gLink ldrb r0, [r0, 0x1] movs r1, 0x2 movs r2, 0xA movs r3, 0x2 - bl sub_800A684 + bl LinkTest_prnthex ldr r0, [r4] movs r1, 0x1C ands r0, r1 @@ -2531,83 +1110,83 @@ task00_link_test: @ 800A74C movs r1, 0xF movs r2, 0xA movs r3, 0x2 - bl sub_800A684 + bl LinkTest_prnthex bl GetMultiplayerId lsls r0, 24 lsrs r0, 24 movs r1, 0xF movs r2, 0xC movs r3, 0x2 - bl sub_800A684 - ldr r0, _0800A87C @ =gUnknown_3003FA0 + bl LinkTest_prnthex + ldr r0, _0800A87C @ =gLastSendQueueCount ldrb r0, [r0] movs r1, 0x19 movs r2, 0x1 movs r3, 0x2 - bl sub_800A684 - ldr r0, _0800A880 @ =gUnknown_3004F70 + bl LinkTest_prnthex + ldr r0, _0800A880 @ =gLastRecvQueueCount ldrb r0, [r0] movs r1, 0x19 movs r2, 0x2 movs r3, 0x2 - bl sub_800A684 + bl LinkTest_prnthex bl GetBlockReceivedStatus lsls r0, 24 lsrs r0, 24 movs r1, 0xF movs r2, 0x5 movs r3, 0x2 - bl sub_800A684 - ldr r0, _0800A884 @ =gUnknown_3003E6C + bl LinkTest_prnthex + ldr r0, _0800A884 @ =gLinkDebugSeed ldr r0, [r0] movs r1, 0x2 movs r2, 0xC movs r3, 0x8 - bl sub_800A684 - ldr r0, _0800A888 @ =gUnknown_3003EB0 + bl LinkTest_prnthex + ldr r0, _0800A888 @ =gLinkDebugFlags ldr r0, [r0] movs r1, 0x2 movs r2, 0xD movs r3, 0x8 - bl sub_800A684 + bl LinkTest_prnthex bl GetSioMultiSI lsls r0, 24 lsrs r0, 24 movs r1, 0x19 movs r2, 0x5 movs r3, 0x1 - bl sub_800A684 + bl LinkTest_prnthex bl IsSioMultiMaster lsls r0, 24 lsrs r0, 24 movs r1, 0x19 movs r2, 0x6 movs r3, 0x1 - bl sub_800A684 + bl LinkTest_prnthex bl IsLinkConnectionEstablished lsls r0, 24 lsrs r0, 24 movs r1, 0x19 movs r2, 0x7 movs r3, 0x1 - bl sub_800A684 + bl LinkTest_prnthex bl HasLinkErrorOccurred lsls r0, 24 lsrs r0, 24 movs r1, 0x19 movs r2, 0x8 movs r3, 0x1 - bl sub_800A684 + bl LinkTest_prnthex movs r6, 0 movs r5, 0x80 lsls r5, 19 - ldr r4, _0800A88C @ =gUnknown_3003F88 + ldr r4, _0800A88C @ =gLinkTestBlockChecksums _0800A84A: ldrh r0, [r4] lsrs r2, r5, 24 movs r1, 0xA movs r3, 0x4 - bl sub_800A684 + bl LinkTest_prnthex movs r0, 0x80 lsls r0, 17 adds r5, r0 @@ -2620,27 +1199,27 @@ _0800A84A: pop {r0} bx r0 .align 2, 0 -_0800A86C: .4byte gUnknown_82345D0 -_0800A870: .4byte gUnknown_3003F84 -_0800A874: .4byte gUnknown_3003F20 -_0800A878: .4byte gUnknown_3003FB0 -_0800A87C: .4byte gUnknown_3003FA0 -_0800A880: .4byte gUnknown_3004F70 -_0800A884: .4byte gUnknown_3003E6C -_0800A888: .4byte gUnknown_3003EB0 -_0800A88C: .4byte gUnknown_3003F88 +_0800A86C: .4byte gASCIITestPrint +_0800A870: .4byte gShouldAdvanceLinkState +_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 @@ -2648,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 @@ -2669,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 @@ -2701,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 @@ -2727,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 @@ -2783,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: @@ -2800,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 @@ -2830,17 +1409,17 @@ _0800A9C2: cmp r0, 0 beq _0800A9F6 _0800A9E6: - ldr r1, _0800AA1C @ =gUnknown_3003EAC + ldr r1, _0800AA1C @ =gLinkErrorOccurred 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 @@ -2851,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 gUnknown_3003EAC -_0800AA20: .4byte c2_800ACD4 +_0800AA1C: .4byte gLinkErrorOccurred +_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 @@ -2890,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 @@ -2898,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 @@ -2931,7 +1510,7 @@ sub_800AA80: @ 800AA80 .align 2, 0 _0800AA94: .4byte gWirelessCommType _0800AA98: - ldr r2, _0800AAB0 @ =gUnknown_3003F80 + ldr r2, _0800AAB0 @ =gLinkCallback ldr r1, [r2] cmp r1, 0 bne _0800AAAC @@ -2945,7 +1524,7 @@ _0800AAAC: pop {r0} bx r0 .align 2, 0 -_0800AAB0: .4byte gUnknown_3003F80 +_0800AAB0: .4byte gLinkCallback _0800AAB4: .4byte sub_800AB0C _0800AAB8: .4byte gUnknown_3003F24 _0800AABC: .4byte gUnknown_3003F34 @@ -2963,7 +1542,7 @@ sub_800AAC0: @ 800AAC0 .align 2, 0 _0800AAD0: .4byte gWirelessCommType _0800AAD4: - ldr r2, _0800AAE8 @ =gUnknown_3003F80 + ldr r2, _0800AAE8 @ =gLinkCallback ldr r1, [r2] cmp r1, 0 beq _0800AAF0 @@ -2973,7 +1552,7 @@ _0800AAD4: strh r0, [r1] b _0800AAFC .align 2, 0 -_0800AAE8: .4byte gUnknown_3003F80 +_0800AAE8: .4byte gLinkCallback _0800AAEC: .4byte gUnknown_202285C _0800AAF0: ldr r0, _0800AB00 @ =sub_800AB0C @@ -2994,22 +1573,22 @@ _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 - ldr r1, _0800AB30 @ =gUnknown_3003F80 + bl BuildSendCmd + ldr r1, _0800AB30 @ =gLinkCallback ldr r0, _0800AB34 @ =sub_800AB38 str r0, [r1] _0800AB22: pop {r0} bx r0 .align 2, 0 -_0800AB28: .4byte gUnknown_3004F70 +_0800AB28: .4byte gLastRecvQueueCount _0800AB2C: .4byte 0x00005fff -_0800AB30: .4byte gUnknown_3003F80 +_0800AB30: .4byte gLinkCallback _0800AB34: .4byte sub_800AB38 thumb_func_end sub_800AB0C @@ -3046,7 +1625,7 @@ _0800AB5C: movs r4, 0x1 strb r4, [r0] bl CloseLink - ldr r1, _0800AB94 @ =gUnknown_3003F80 + ldr r1, _0800AB94 @ =gLinkCallback movs r0, 0 str r0, [r1] ldr r0, _0800AB98 @ =gUnknown_3003F24 @@ -3060,7 +1639,7 @@ _0800AB84: .4byte gUnknown_3003F30 _0800AB88: .4byte gBattleTypeFlags _0800AB8C: .4byte 0x0000ffdf _0800AB90: .4byte gLinkVSyncDisabled -_0800AB94: .4byte gUnknown_3003F80 +_0800AB94: .4byte gLinkCallback _0800AB98: .4byte gUnknown_3003F24 thumb_func_end sub_800AB38 @@ -3076,7 +1655,7 @@ sub_800AB9C: @ 800AB9C .align 2, 0 _0800ABAC: .4byte gWirelessCommType _0800ABB0: - ldr r1, _0800ABC8 @ =gUnknown_3003F80 + ldr r1, _0800ABC8 @ =gLinkCallback ldr r0, [r1] cmp r0, 0 bne _0800ABBC @@ -3090,7 +1669,7 @@ _0800ABC2: pop {r0} bx r0 .align 2, 0 -_0800ABC8: .4byte gUnknown_3003F80 +_0800ABC8: .4byte gLinkCallback _0800ABCC: .4byte sub_800ABD4 _0800ABD0: .4byte gUnknown_3003F24 thumb_func_end sub_800AB9C @@ -3098,22 +1677,22 @@ _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 - ldr r1, _0800ABF8 @ =gUnknown_3003F80 + bl BuildSendCmd + ldr r1, _0800ABF8 @ =gLinkCallback ldr r0, _0800ABFC @ =sub_800AC00 str r0, [r1] _0800ABEA: pop {r0} bx r0 .align 2, 0 -_0800ABF0: .4byte gUnknown_3004F70 +_0800ABF0: .4byte gLastRecvQueueCount _0800ABF4: .4byte 0x00002ffe -_0800ABF8: .4byte gUnknown_3003F80 +_0800ABF8: .4byte gLinkCallback _0800ABFC: .4byte sub_800AC00 thumb_func_end sub_800ABD4 @@ -3144,7 +1723,7 @@ _0800AC2A: cmp r1, r2 bne _0800AC48 movs r1, 0 - ldr r4, _0800AC54 @ =gUnknown_3003F80 + ldr r4, _0800AC54 @ =gLinkCallback ldr r3, _0800AC50 @ =gUnknown_3003F2C movs r2, 0 _0800AC36: @@ -3163,39 +1742,39 @@ _0800AC48: bx r0 .align 2, 0 _0800AC50: .4byte gUnknown_3003F2C -_0800AC54: .4byte gUnknown_3003F80 +_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 ands r0, r2 cmp r0, 0 beq _0800AC98 - ldr r0, _0800ACA4 @ =gUnknown_3003F38 + ldr r0, _0800ACA4 @ =gSuppressLinkErrorMessage ldrb r0, [r0] cmp r0, 0 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 @ =gUnknown_3003EAC + ldr r1, _0800ACB8 @ =gLinkErrorOccurred movs r0, 0x1 strb r0, [r1] bl CloseLink @@ -3204,14 +1783,14 @@ _0800AC98: bx r0 .align 2, 0 _0800AC9C: .4byte gLinkOpen -_0800ACA0: .4byte gUnknown_3003F20 -_0800ACA4: .4byte gUnknown_3003F38 +_0800ACA0: .4byte gLinkStatus +_0800ACA4: .4byte gSuppressLinkErrorMessage _0800ACA8: .4byte sLinkErrorBuffer -_0800ACAC: .4byte gUnknown_3004F70 -_0800ACB0: .4byte gUnknown_3003FA0 -_0800ACB4: .4byte c2_800ACD4 -_0800ACB8: .4byte gUnknown_3003EAC - thumb_func_end sub_800AC58 +_0800ACAC: .4byte gLastRecvQueueCount +_0800ACB0: .4byte gLastSendQueueCount +_0800ACB4: .4byte CB2_LinkError +_0800ACB8: .4byte gLinkErrorOccurred + thumb_func_end CheckErrorStatus thumb_func_start sub_800ACBC sub_800ACBC: @ 800ACBC @@ -3228,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 @@ -3315,7 +1894,7 @@ _0800AD30: ldr r1, _0800AE0C @ =gSoftResetDisabled movs r0, 0 strb r0, [r1] - ldr r0, _0800AE10 @ =sub_80094D4 + ldr r0, _0800AE10 @ =Task_DestroySelf movs r1, 0 bl CreateTask bl StopMapMusic @@ -3345,10 +1924,10 @@ _0800AE00: .4byte gUnknown_2022860 _0800AE04: .4byte gUnknown_82345F0 _0800AE08: .4byte gTMCaseMainWindowPalette _0800AE0C: .4byte gSoftResetDisabled -_0800AE10: .4byte sub_80094D4 +_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 @@ -3368,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 @@ -3418,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 @@ -3648,39 +2227,39 @@ _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 SetSuppressLinkErrorMessage: @ 800B09C - ldr r1, _0800B0A4 @ =gUnknown_3003F38 + ldr r1, _0800B0A4 @ =gSuppressLinkErrorMessage strb r0, [r1] bx lr .align 2, 0 -_0800B0A4: .4byte gUnknown_3003F38 +_0800B0A4: .4byte gSuppressLinkErrorMessage thumb_func_end SetSuppressLinkErrorMessage thumb_func_start HasLinkErrorOccurred HasLinkErrorOccurred: @ 800B0A8 - ldr r0, _0800B0B0 @ =gUnknown_3003EAC + ldr r0, _0800B0B0 @ =gLinkErrorOccurred ldrb r0, [r0] bx lr .align 2, 0 -_0800B0B0: .4byte gUnknown_3003EAC +_0800B0B0: .4byte gLinkErrorOccurred thumb_func_end HasLinkErrorOccurred thumb_func_start sub_800B0B4 sub_800B0B4: @ 800B0B4 push {r4-r6,lr} - bl sub_8009708 - ldr r1, _0800B100 @ =gUnknown_3003E70 + bl InitLocalLinkPlayer + ldr r1, _0800B100 @ =gLocalLinkPlayerBlock adds r2, r1, 0 adds r2, 0x10 ldr r0, _0800B104 @ =gLocalLinkPlayer @@ -3690,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} @@ -3714,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 @@ -3744,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 @@ -3757,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} @@ -3766,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 @@ -3777,11 +2356,11 @@ HandleLinkConnection: @ 800B178 ldrb r0, [r0] cmp r0, 0 bne _0800B1C8 - ldr r0, _0800B1B4 @ =gUnknown_3003F84 - ldr r1, _0800B1B8 @ =gUnknown_3003F50 + ldr r0, _0800B1B4 @ =gShouldAdvanceLinkState + 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 @@ -3799,10 +2378,10 @@ _0800B1AA: b _0800B1EE .align 2, 0 _0800B1B0: .4byte gWirelessCommType -_0800B1B4: .4byte gUnknown_3003F84 -_0800B1B8: .4byte gUnknown_3003F50 +_0800B1B4: .4byte gShouldAdvanceLinkState +_0800B1B8: .4byte gSendCmd _0800B1BC: .4byte gRecvCmds -_0800B1C0: .4byte gUnknown_3003F20 +_0800B1C0: .4byte gLinkStatus _0800B1C4: .4byte gMain + 0x2C _0800B1C8: bl sub_80FAE94 @@ -3886,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 @@ -3931,8 +2510,8 @@ sub_800B284: @ 800B284 bx r0 thumb_func_end sub_800B284 - thumb_func_start sub_800B29C -sub_800B29C: @ 800B29C + thumb_func_start DisableSerial +DisableSerial: @ 800B29C push {lr} sub sp, 0x4 movs r0, 0xC0 @@ -3956,7 +2535,7 @@ sub_800B29C: @ 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 @@ -3968,12 +2547,12 @@ _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 sub_800B29C + thumb_func_end DisableSerial - thumb_func_start sub_800B2F4 -sub_800B2F4: @ 800B2F4 + thumb_func_start EnableSerial +EnableSerial: @ 800B2F4 push {r4,r5,lr} sub sp, 0x4 movs r0, 0xC0 @@ -3997,23 +2576,23 @@ sub_800B2F4: @ 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 - ldr r0, _0800B36C @ =gUnknown_3000E64 + ldr r0, _0800B36C @ =sNumVBlanksWithoutSerialIntr strb r4, [r0] - ldr r0, _0800B370 @ =gUnknown_3000E66 + ldr r0, _0800B370 @ =sSendNonzeroCheck strh r5, [r0] - ldr r0, _0800B374 @ =gUnknown_3000E68 + ldr r0, _0800B374 @ =sRecvNonzeroCheck strh r5, [r0] - ldr r0, _0800B378 @ =gUnknown_3000E6A + ldr r0, _0800B378 @ =sChecksumAvailable strb r4, [r0] - ldr r0, _0800B37C @ =gUnknown_3000E6B + 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} @@ -4024,25 +2603,25 @@ _0800B354: .4byte 0x04000134 _0800B358: .4byte 0x04000128 _0800B35C: .4byte 0x00004003 _0800B360: .4byte 0x0400012a -_0800B364: .4byte gUnknown_3003FB0 +_0800B364: .4byte gLink _0800B368: .4byte 0x050003f0 -_0800B36C: .4byte gUnknown_3000E64 -_0800B370: .4byte gUnknown_3000E66 -_0800B374: .4byte gUnknown_3000E68 -_0800B378: .4byte gUnknown_3000E6A -_0800B37C: .4byte gUnknown_3000E6B -_0800B380: .4byte gUnknown_3003FA0 -_0800B384: .4byte gUnknown_3004F70 - thumb_func_end sub_800B2F4 - - thumb_func_start sub_800B388 -sub_800B388: @ 800B388 +_0800B36C: .4byte sNumVBlanksWithoutSerialIntr +_0800B370: .4byte sSendNonzeroCheck +_0800B374: .4byte sRecvNonzeroCheck +_0800B378: .4byte sChecksumAvailable +_0800B37C: .4byte sHandshakePlayerCount +_0800B380: .4byte gLastSendQueueCount +_0800B384: .4byte gLastRecvQueueCount + thumb_func_end EnableSerial + + thumb_func_start ResetSerial +ResetSerial: @ 800B388 push {lr} - bl sub_800B2F4 - bl sub_800B29C + bl EnableSerial + bl DisableSerial pop {r0} bx r0 - thumb_func_end sub_800B388 + thumb_func_end ResetSerial thumb_func_start LinkMain1 LinkMain1: @ 800B398 @@ -4050,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 @@ -4060,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: @@ -4070,24 +2649,24 @@ _0800B3BC: .4byte _0800B434 .4byte _0800B43E _0800B3D0: - bl sub_800B29C - ldr r1, _0800B3DC @ =gUnknown_3003FB0 + bl DisableSerial + 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 sub_800B2F4 - ldr r1, _0800B3F4 @ =gUnknown_3003FB0 + bl EnableSerial + 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 @@ -4097,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 @@ -4107,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: @@ -4131,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 @@ -4160,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 @@ -4204,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] @@ -4214,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] @@ -4226,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 @@ -4243,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 @@ -4256,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] @@ -4283,9 +2862,9 @@ sub_800B520: @ 800B520 lsrs r0, 24 _0800B55E: movs r2, 0 - ldr r4, _0800B5A8 @ =gUnknown_3000E66 + 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 @@ -4313,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 gUnknown_3000E66 -_0800B5AC: .4byte gUnknown_3003FA0 +_0800B5A8: .4byte sSendNonzeroCheck +_0800B5AC: .4byte gLastSendQueueCount _0800B5B0: movs r0, 0x1 strb r0, [r6, 0x12] - ldr r2, _0800B5F4 @ =gUnknown_3000E66 + ldr r2, _0800B5F4 @ =sSendNonzeroCheck mov r9, r2 - ldr r4, _0800B5F8 @ =gUnknown_3003FA0 + ldr r4, _0800B5F8 @ =gLastSendQueueCount mov r10, r4 _0800B5BC: mov r1, r9 @@ -4341,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 @@ -4357,11 +2936,11 @@ _0800B5D4: pop {r0} bx r0 .align 2, 0 -_0800B5F4: .4byte gUnknown_3000E66 -_0800B5F8: .4byte gUnknown_3003FA0 +_0800B5F4: .4byte sSendNonzeroCheck +_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 @@ -4372,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] @@ -4415,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 @@ -4488,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} @@ -4502,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 @@ -4528,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 @@ -4545,7 +3124,7 @@ _0800B754: cmp r2, 0x2 bne _0800B77E _0800B75E: - ldr r1, _0800B784 @ =gUnknown_3000E64 + ldr r1, _0800B784 @ =sNumVBlanksWithoutSerialIntr ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -4567,7 +3146,7 @@ _0800B77E: pop {r0} bx r0 .align 2, 0 -_0800B784: .4byte gUnknown_3000E64 +_0800B784: .4byte sNumVBlanksWithoutSerialIntr thumb_func_end LinkVSync thumb_func_start Timer3Intr @@ -4582,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 @@ -4601,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 @@ -4620,18 +3199,18 @@ _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 strb r0, [r3, 0xD] - ldr r1, _0800B814 @ =gUnknown_3000E64 + ldr r1, _0800B814 @ =sNumVBlanksWithoutSerialIntr strb r2, [r1] lsls r0, 24 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] @@ -4641,9 +3220,9 @@ _0800B80A: pop {r0} bx r0 .align 2, 0 -_0800B810: .4byte gUnknown_3003FB0 -_0800B814: .4byte gUnknown_3000E64 -_0800B818: .4byte gUnknown_3004F70 +_0800B810: .4byte gLink +_0800B814: .4byte sNumVBlanksWithoutSerialIntr +_0800B818: .4byte gLastRecvQueueCount _0800B81C: .4byte 0x00000fbd thumb_func_end SerialCB @@ -4667,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 @@ -4677,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: @@ -4686,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] @@ -4698,7 +3277,7 @@ _0800B860: str r1, [r3, 0x4] strb r0, [r2, 0xA] movs r4, 0 - ldr r0, _0800B8C4 @ =gUnknown_3000E6B + ldr r0, _0800B8C4 @ =sHandshakePlayerCount mov r9, r0 mov r8, r2 ldr r2, _0800B8C8 @ =0x00008fff @@ -4731,9 +3310,9 @@ _0800B8A0: .align 2, 0 _0800B8B4: .4byte 0x0400012a _0800B8B8: .4byte 0x0000b9a0 -_0800B8BC: .4byte gSioMlt_Recv +_0800B8BC: .4byte gLink + 4 _0800B8C0: .4byte 0x04000120 -_0800B8C4: .4byte gUnknown_3000E6B +_0800B8C4: .4byte sHandshakePlayerCount _0800B8C8: .4byte 0x00008fff _0800B8CC: .4byte 0x0000ffff _0800B8D0: @@ -4800,13 +3379,13 @@ 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 bne _0800B990 movs r4, 0 - ldr r7, _0800B98C @ =gUnknown_3000E6A + ldr r7, _0800B98C @ =sChecksumAvailable ldrb r0, [r6, 0x3] cmp r4, r0 bcs _0800B97A @@ -4840,8 +3419,8 @@ _0800B97A: b _0800BA30 .align 2, 0 _0800B984: .4byte 0x04000120 -_0800B988: .4byte gUnknown_3003FB0 -_0800B98C: .4byte gUnknown_3000E6A +_0800B988: .4byte gLink +_0800B98C: .4byte sChecksumAvailable _0800B990: ldr r2, _0800BA00 @ =0x00000fbc adds r1, r6, r2 @@ -4865,7 +3444,7 @@ _0800B9AC: cmp r4, r1 bcs _0800BA0C adds r5, r6, 0 - ldr r7, _0800BA04 @ =gUnknown_3000E68 + ldr r7, _0800BA04 @ =sRecvNonzeroCheck lsls r0, 1 mov r12, r0 movs r2, 0xCF @@ -4903,7 +3482,7 @@ _0800B9C8: b _0800BA0C .align 2, 0 _0800BA00: .4byte 0x00000fbc -_0800BA04: .4byte gUnknown_3000E68 +_0800BA04: .4byte sRecvNonzeroCheck _0800BA08: movs r0, 0x2 strb r0, [r6, 0x12] @@ -4915,7 +3494,7 @@ _0800BA0C: lsrs r0, 24 cmp r0, 0x8 bne _0800BA30 - ldr r2, _0800BA3C @ =gUnknown_3000E68 + ldr r2, _0800BA3C @ =sRecvNonzeroCheck ldrh r0, [r2] cmp r0, 0 beq _0800BA30 @@ -4934,14 +3513,14 @@ _0800BA30: pop {r0} bx r0 .align 2, 0 -_0800BA3C: .4byte gUnknown_3000E68 +_0800BA3C: .4byte sRecvNonzeroCheck _0800BA40: .4byte 0x00000fbd thumb_func_end DoRecv 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 @@ -4949,7 +3528,7 @@ DoSend: @ 800BA44 ldr r1, _0800BA84 @ =0x0400012a ldrh r0, [r4, 0x14] strh r0, [r1] - ldr r1, _0800BA88 @ =gUnknown_3000E65 + ldr r1, _0800BA88 @ =sSendBufferEmpty ldrb r2, [r1] cmp r2, 0 bne _0800BA90 @@ -4971,16 +3550,16 @@ DoSend: @ 800BA44 strb r2, [r1] b _0800BAEC .align 2, 0 -_0800BA80: .4byte gUnknown_3003FB0 +_0800BA80: .4byte gLink _0800BA84: .4byte 0x0400012a -_0800BA88: .4byte gUnknown_3000E65 +_0800BA88: .4byte sSendBufferEmpty _0800BA8C: .4byte 0x00000339 _0800BA90: movs r0, 0 strb r0, [r1] b _0800BAEC _0800BA96: - ldr r1, _0800BABC @ =gUnknown_3000E65 + ldr r1, _0800BABC @ =sSendBufferEmpty ldrb r0, [r1] cmp r0, 0 bne _0800BAB2 @@ -5001,7 +3580,7 @@ _0800BAB2: strh r0, [r1] b _0800BAE6 .align 2, 0 -_0800BABC: .4byte gUnknown_3000E65 +_0800BABC: .4byte sSendBufferEmpty _0800BAC0: .4byte 0x00000339 _0800BAC4: .4byte 0x0400012a _0800BAC8: @@ -5035,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 @@ -5052,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 @@ -5062,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 @@ -5071,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 @@ -5091,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 @@ -5128,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 @@ -5136,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 @@ -5187,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 d4934caa9..3b6ec730f 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -71,7 +71,7 @@ _080F863E: adds r0, r4, 0 bl sub_80FC4D4 strh r5, [r7] - ldr r1, _080F86AC @ =gUnknown_3003F50 + ldr r1, _080F86AC @ =gSendCmd ldr r2, _080F86B0 @ =0x01000008 adds r0, r7, 0 bl CpuSet @@ -97,7 +97,7 @@ _080F869C: .4byte gUnknown_3005450 _080F86A0: .4byte 0x010004d6 _080F86A4: .4byte gUnknown_30054BC _080F86A8: .4byte 0x00000634 -_080F86AC: .4byte gUnknown_3003F50 +_080F86AC: .4byte gSendCmd _080F86B0: .4byte 0x01000008 _080F86B4: .4byte gRecvCmds _080F86B8: .4byte 0x01000028 @@ -1277,7 +1277,7 @@ _080F9034: .4byte 0x01000028 thumb_func_start sub_80F9038 sub_80F9038: @ 80F9038 push {lr} - ldr r3, _080F9064 @ =gUnknown_3003F50 + ldr r3, _080F9064 @ =gSendCmd ldr r2, _080F9068 @ =gRecvCmds movs r1, 0x6 _080F9040: @@ -1288,7 +1288,7 @@ _080F9040: subs r1, 0x1 cmp r1, 0 bge _080F9040 - ldr r1, _080F9064 @ =gUnknown_3003F50 + ldr r1, _080F9064 @ =gSendCmd movs r2, 0 adds r0, r1, 0 adds r0, 0xC @@ -1300,7 +1300,7 @@ _080F9056: pop {r0} bx r0 .align 2, 0 -_080F9064: .4byte gUnknown_3003F50 +_080F9064: .4byte gSendCmd _080F9068: .4byte gRecvCmds thumb_func_end sub_80F9038 @@ -2007,7 +2007,7 @@ _080F95E4: ldrb r1, [r2] strb r0, [r2] bl sub_80FA510 - ldr r5, _080F9658 @ =gUnknown_3003F50 + ldr r5, _080F9658 @ =gSendCmd add r4, sp, 0x48 adds r0, r5, 0 adds r1, r4, 0 @@ -2045,7 +2045,7 @@ _080F9648: .4byte 0x0000099c _080F964C: .4byte gUnknown_3007460 _080F9650: .4byte gReceivedRemoteLinkPlayers _080F9654: .4byte 0x00000988 -_080F9658: .4byte gUnknown_3003F50 +_080F9658: .4byte gSendCmd thumb_func_end sub_80F9514 thumb_func_start sub_80F965C @@ -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,21 +2714,21 @@ _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: movs r0, 0xEE lsls r0, 8 bl sub_80F9D04 - ldr r1, _080F9B90 @ =gUnknown_3003F50 - ldr r3, _080F9B94 @ =gUnknown_3003ED2 + ldr r1, _080F9B90 @ =gSendCmd + 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] @@ -2739,9 +2739,9 @@ _080F9B68: strh r0, [r1, 0x6] b _080F9BF4 .align 2, 0 -_080F9B90: .4byte gUnknown_3003F50 -_080F9B94: .4byte gUnknown_3003ED2 -_080F9B98: .4byte gUnknown_3003ED4 +_080F9B90: .4byte gSendCmd +_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 @@ -2949,7 +2949,7 @@ sub_80F9D04: @ 80F9D04 push {r4,r5,lr} lsls r0, 16 lsrs r1, r0, 16 - ldr r5, _080F9D34 @ =gUnknown_3003F50 + ldr r5, _080F9D34 @ =gSendCmd strh r1, [r5] movs r0, 0xF0 lsls r0, 7 @@ -2970,7 +2970,7 @@ sub_80F9D04: @ 80F9D04 beq _080F9DFC b _080F9E22 .align 2, 0 -_080F9D34: .4byte gUnknown_3003F50 +_080F9D34: .4byte gSendCmd _080F9D38: movs r0, 0xCC lsls r0, 7 @@ -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,14 +3096,14 @@ _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 sub_80F9E2C: @ 80F9E2C push {r4,lr} adds r4, r0, 0 - ldr r0, _080F9E58 @ =gUnknown_3003F50 + ldr r0, _080F9E58 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080F9E52 @@ -3122,7 +3122,7 @@ _080F9E52: pop {r0} bx r0 .align 2, 0 -_080F9E58: .4byte gUnknown_3003F50 +_080F9E58: .4byte gSendCmd _080F9E5C: .4byte gUnknown_3005542 thumb_func_end sub_80F9E2C @@ -3146,7 +3146,7 @@ _080F9E7C: ldr r0, [r5] cmp r0, 0 bne _080F9EA4 - ldr r0, _080F9EB8 @ =gUnknown_3003F50 + ldr r0, _080F9EB8 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080F9EA4 @@ -3170,7 +3170,7 @@ _080F9EA8: .4byte gUnknown_843ED94 _080F9EAC: .4byte 0x00000701 _080F9EB0: .4byte gUnknown_843EDD8 _080F9EB4: .4byte gUnknown_3005450 -_080F9EB8: .4byte gUnknown_3003F50 +_080F9EB8: .4byte gSendCmd _080F9EBC: .4byte gUnknown_203AC08 _080F9EC0: adds r0, r6, 0 @@ -3240,7 +3240,7 @@ _080F9F40: .4byte rfufunc_80F9F44 thumb_func_start rfufunc_80F9F44 rfufunc_80F9F44: @ 80F9F44 push {r4,r5,lr} - ldr r0, _080F9F74 @ =gUnknown_3003F50 + ldr r0, _080F9F74 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080F9F98 @@ -3263,7 +3263,7 @@ rfufunc_80F9F44: @ 80F9F44 bls _080F9F98 b _080F9F94 .align 2, 0 -_080F9F74: .4byte gUnknown_3003F50 +_080F9F74: .4byte gSendCmd _080F9F78: .4byte gUnknown_3005450 _080F9F7C: bl GetMultiplayerId @@ -3295,7 +3295,7 @@ sub_80F9FA8: @ 80F9FA8 ldr r0, _080FA014 @ =gUnknown_3005450 mov r12, r0 ldr r5, [r0, 0x70] - ldr r3, _080FA018 @ =gUnknown_3003F50 + ldr r3, _080FA018 @ =gSendCmd mov r2, r12 adds r2, 0x6C ldrh r1, [r2] @@ -3348,7 +3348,7 @@ _080FA00C: bx r0 .align 2, 0 _080FA014: .4byte gUnknown_3005450 -_080FA018: .4byte gUnknown_3003F50 +_080FA018: .4byte gSendCmd _080FA01C: .4byte rfufunc_80FA020 thumb_func_end sub_80F9FA8 @@ -3367,7 +3367,7 @@ rfufunc_80FA020: @ 80FA020 ldrb r0, [r5, 0xC] cmp r0, 0 bne _080FA0E8 - ldr r3, _080FA0CC @ =gUnknown_3003F50 + ldr r3, _080FA0CC @ =gSendCmd adds r2, r5, 0 adds r2, 0x6E ldrh r0, [r2] @@ -3439,7 +3439,7 @@ _080FA05C: b _080FA0EC .align 2, 0 _080FA0C8: .4byte gUnknown_3005450 -_080FA0CC: .4byte gUnknown_3003F50 +_080FA0CC: .4byte gSendCmd _080FA0D0: .4byte 0xffff8900 _080FA0D4: .4byte gRecvCmds _080FA0D8: .4byte gUnknown_843EBD4 @@ -3624,7 +3624,7 @@ _080FA220: .4byte sub_80FA160 thumb_func_start sub_80FA224 sub_80FA224: @ 80FA224 push {r4,lr} - ldr r0, _080FA250 @ =gUnknown_3003F50 + ldr r0, _080FA250 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080FA248 @@ -3645,7 +3645,7 @@ _080FA248: pop {r0} bx r0 .align 2, 0 -_080FA250: .4byte gUnknown_3003F50 +_080FA250: .4byte gSendCmd _080FA254: .4byte gUnknown_3005450 _080FA258: .4byte sub_80FA1C4 thumb_func_end sub_80FA224 @@ -3789,7 +3789,7 @@ sub_80FA350: @ 80FA350 ldrb r0, [r0] cmp r0, 0 bne _080FA372 - ldr r0, _080FA380 @ =gUnknown_3003F50 + ldr r0, _080FA380 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080FA372 @@ -3805,7 +3805,7 @@ _080FA372: .align 2, 0 _080FA378: .4byte gUnknown_3005450 _080FA37C: .4byte 0x0000069e -_080FA380: .4byte gUnknown_3003F50 +_080FA380: .4byte gSendCmd _080FA384: .4byte sub_80FA2B0 thumb_func_end sub_80FA350 @@ -3822,7 +3822,7 @@ sub_80FA388: @ 80FA388 ldrb r0, [r0] cmp r0, 0 bne _080FA416 - ldr r0, _080FA3BC @ =gUnknown_3003F50 + ldr r0, _080FA3BC @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080FA416 @@ -3834,7 +3834,7 @@ sub_80FA388: @ 80FA388 .align 2, 0 _080FA3B4: .4byte gUnknown_3005450 _080FA3B8: .4byte 0x0000069e -_080FA3BC: .4byte gUnknown_3003F50 +_080FA3BC: .4byte gSendCmd _080FA3C0: .4byte sub_80FA2B0 _080FA3C4: bl GetLinkPlayerCount @@ -3869,7 +3869,7 @@ _080FA3F2: ldrb r0, [r0] cmp r0, 0 bne _080FA416 - ldr r0, _080FA424 @ =gUnknown_3003F50 + ldr r0, _080FA424 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080FA416 @@ -3886,7 +3886,7 @@ _080FA416: .align 2, 0 _080FA41C: .4byte gUnknown_3005450 _080FA420: .4byte 0x0000069e -_080FA424: .4byte gUnknown_3003F50 +_080FA424: .4byte gSendCmd _080FA428: .4byte sub_80FA350 thumb_func_end sub_80FA388 @@ -4540,7 +4540,7 @@ _080FA8D8: .align 2, 0 _080FA8E8: .4byte gTasks _080FA8EC: - ldr r0, _080FA8FC @ =gUnknown_3003F50 + ldr r0, _080FA8FC @ =gSendCmd ldrh r0, [r0] cmp r0, 0 bne _080FA9BC @@ -4549,7 +4549,7 @@ _080FA8F4: strh r0, [r4, 0x8] b _080FA9BC .align 2, 0 -_080FA8FC: .4byte gUnknown_3003F50 +_080FA8FC: .4byte gSendCmd _080FA900: ldrb r0, [r5, 0xD] b _080FA92C @@ -4831,7 +4831,7 @@ _080FAB0C: .4byte _080FABEE .4byte _080FAC78 _080FAB24: - ldr r0, _080FAB40 @ =gUnknown_3003F50 + ldr r0, _080FAB40 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 beq _080FAB2E @@ -4844,9 +4844,9 @@ _080FAB2E: bl sub_80F9D04 b _080FAC2E .align 2, 0 -_080FAB40: .4byte gUnknown_3003F50 +_080FAB40: .4byte gSendCmd _080FAB44: - ldr r0, _080FAB58 @ =gUnknown_3003F50 + ldr r0, _080FAB58 @ =gSendCmd ldrh r0, [r0] cmp r0, 0 beq _080FAB4E @@ -4857,7 +4857,7 @@ _080FAB4E: adds r1, r3 b _080FAC36 .align 2, 0 -_080FAB58: .4byte gUnknown_3003F50 +_080FAB58: .4byte gSendCmd _080FAB5C: bl GetBlockReceivedStatus lsls r0, 24 @@ -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: @@ -6866,7 +6866,7 @@ sub_80FBA78: @ 80FBA78 bl ResetPaletteFade ldr r0, _080FBAF4 @ =sub_80FBA64 bl SetVBlankCallback - bl sub_8009480 + bl IsWirelessAdapterConnected lsls r0, 24 cmp r0, 0 beq _080FBAEC @@ -7269,7 +7269,7 @@ sub_80FBDB8: @ 80FBDB8 push {r4-r6,lr} lsls r0, 24 lsrs r4, r0, 24 - ldr r6, _080FBE10 @ =gUnknown_3003F50 + ldr r6, _080FBE10 @ =gSendCmd ldrh r0, [r6] cmp r0, 0 bne _080FBE08 @@ -7309,7 +7309,7 @@ _080FBE08: pop {r0} bx r0 .align 2, 0 -_080FBE10: .4byte gUnknown_3003F50 +_080FBE10: .4byte gSendCmd _080FBE14: .4byte gUnknown_3005450 _080FBE18: .4byte gTasks _080FBE1C: .4byte gUnknown_843EC41 @@ -9184,7 +9184,7 @@ _080FCB88: ands r4, r1 orrs r4, r0 strb r4, [r7] - bl sub_806E25C + bl IsNationalPokedexEnabled ands r0, r6 ldrb r1, [r7, 0x1] ands r5, r1 diff --git a/asm/main_menu.s b/asm/main_menu.s index fed088ff3..76c9f8838 100644 --- a/asm/main_menu.s +++ b/asm/main_menu.s @@ -948,7 +948,7 @@ _0800CAEE: movs r0, 0 b _0800CB22 _0800CAF2: - bl sub_8009480 + bl IsWirelessAdapterConnected lsls r0, 24 lsrs r5, r0, 24 cmp r5, 0 @@ -1227,7 +1227,7 @@ sub_800CCF8: @ 800CCF8 beq _0800CD44 movs r0, 0x5 bl PlaySE - bl sub_8009480 + bl IsWirelessAdapterConnected movs r0, 0x1 negs r0, r0 movs r1, 0 @@ -1500,7 +1500,7 @@ sub_800CF3C: @ 800CF3C lsrs r0, 24 cmp r0, 0x1 bne _0800CFAE - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _0800CF64 movs r0, 0x1 diff --git a/asm/overworld.s b/asm/overworld.s index 1bf22ede1..10d1b4ee8 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/party_menu.s b/asm/party_menu.s index 44a250e82..899e8e7ea 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -16284,7 +16284,7 @@ _08126C20: .4byte 0x0000ffff thumb_func_start sub_8126C24 sub_8126C24: @ 8126C24 push {lr} - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _08126C60 ldr r0, _08126C54 @ =gUnknown_203B0A0 diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 2f0682c94..b0b53da55 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -49,7 +49,7 @@ sub_810250C: @ 810250C mov r6, r8 push {r6} sub sp, 0xC - bl sub_806E25C + bl IsNationalPokedexEnabled lsls r0, 24 lsrs r6, r0, 24 bl m4aSoundVSyncOff @@ -594,7 +594,7 @@ _081029D0: adds r1, 0x62 movs r2, 0 bl ListMenuGetScrollAndRow - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _081029F4 ldr r0, _081029F0 @ =gUnknown_84520E4 @@ -915,7 +915,7 @@ sub_8102C28: @ 8102C28 bl AddWindow ldr r1, [r7] strb r0, [r1, 0x16] - bl sub_806E25C + bl IsNationalPokedexEnabled adds r5, r0, 0 cmp r5, 0 bne _08102C9E @@ -1904,7 +1904,7 @@ sub_8103518: @ 8103518 sub sp, 0x4 lsls r0, 24 lsrs r4, r0, 24 - bl sub_806E25C + bl IsNationalPokedexEnabled movs r1, 0x97 str r1, [sp] cmp r0, 0 @@ -5594,7 +5594,7 @@ sub_81052D0: @ 81052D0 sub sp, 0x8 lsls r0, 24 lsrs r6, r0, 24 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _081052E8 ldr r0, _081052E4 @ =gUnknown_84406E0 @@ -8137,7 +8137,7 @@ sub_8106810: @ 8106810 push {r4,lr} lsls r0, 16 lsrs r4, r0, 16 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0x1 beq _08106830 adds r0, r4, 0 @@ -8609,7 +8609,7 @@ sub_8106B60: @ 8106B60 movs r1, 0x3 movs r2, 0x1 bl sub_8104AB0 - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _08106BA4 adds r0, r5, 0 diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s index 2d2866914..1cb9d85a3 100644 --- a/asm/save_menu_util.s +++ b/asm/save_menu_util.s @@ -55,7 +55,7 @@ _080F8024: .align 2, 0 _080F8030: .4byte gSaveBlock2Ptr _080F8034: - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 beq _080F8044 movs r0, 0x1 diff --git a/asm/trade.s b/asm/trade.s index 42097bd3e..52db4c7d2 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -6443,7 +6443,7 @@ _0804FA2C: cmp r5, r7 blt _0804FA2C _0804FA4E: - bl sub_806E25C + bl IsNationalPokedexEnabled mov r1, r9 lsls r4, r1, 2 cmp r0, 0 @@ -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/asm/trainer_card.s b/asm/trainer_card.s index 787a9748a..9a28cbc5e 100644 --- a/asm/trainer_card.s +++ b/asm/trainer_card.s @@ -2039,7 +2039,7 @@ _0808A0DC: .4byte gUnknown_8419CE7 thumb_func_start sub_808A0E0 sub_808A0E0: @ 808A0E0 push {lr} - bl sub_806E25C + bl IsNationalPokedexEnabled cmp r0, 0 bne _0808A0F2 movs r0, 0x1 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 eb755739a..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 -gUnknown_8232578:: @ 8232578 - .incbin "baserom.gba", 0x232578, 0x20 - -gUnknown_8232598:: @ 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/data/map_event_scripts.inc b/data/map_event_scripts.inc index 44861f91f..908d7e543 100644 --- a/data/map_event_scripts.inc +++ b/data/map_event_scripts.inc @@ -1492,7 +1492,7 @@ EventScript_1A651A:: @ 81A651A clearflag FLAG_0x09D call EventScript_1A6551 special sub_81130A8 - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 0 call_if 1, EventScript_1A653B call EventScript_1A6541 diff --git a/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc b/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc index 7dae5f353..048ca96d6 100644 --- a/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc +++ b/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc @@ -5,7 +5,7 @@ IndigoPlateau_PokemonCenter_1F_MapScripts:: @ 816EA5A IndigoPlateau_PokemonCenter_1F_MapScript1_16EA65:: @ 816EA65 setrespawn SPAWN_INDIGO_PLATEAU - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 call_if 1, EventScript_16EA79 end @@ -19,7 +19,7 @@ EventScript_16EA79:: @ 816EA79 IndigoPlateau_PokemonCenter_1F_EventScript_16EA8A:: @ 816EA8A lock faceplayer - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 goto_if_eq EventScript_16EAA6 msgbox gUnknown_819A8D8 diff --git a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc index 7a1941f72..83a42e67d 100644 --- a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc +++ b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc @@ -220,7 +220,7 @@ OneIsland_PokemonCenter_1F_EventScript_170EC5:: @ 8170EC5 goto_if_eq EventScript_171044 compare_var_to_value VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4 goto_if_eq EventScript_1710F2 - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 goto_if_eq EventScript_1710FC compare_var_to_value VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 3 diff --git a/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc b/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc index 9fc141070..7cdedc60c 100644 --- a/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc +++ b/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc @@ -4,7 +4,7 @@ ThreeIsland_DunsparceTunnel_MapScripts:: @ 8164D26 ThreeIsland_DunsparceTunnel_MapScript1_164D2C:: @ 8164D2C setworldmapflag FLAG_WORLD_MAP_THREE_ISLAND_DUNSPARCE_TUNNEL - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled copyvar VAR_0x8008, VAR_RESULT compare_var_to_value VAR_0x8008, 1 call_if 1, EventScript_164D50 @@ -26,7 +26,7 @@ ThreeIsland_DunsparceTunnel_EventScript_164D60:: @ 8164D60 faceplayer checkflag FLAG_0x2E2 goto_if_eq EventScript_164DC2 - specialvar VAR_RESULT, sub_806E25C + specialvar VAR_RESULT, IsNationalPokedexEnabled compare_var_to_value VAR_RESULT, 1 goto_if_eq EventScript_164D90 msgbox gUnknown_817D13B diff --git a/data/specials.inc b/data/specials.inc index c99d484d4..5e9a3aeae 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -371,7 +371,7 @@ gSpecials:: @ 815FD60 def_special sub_80CC2BC def_special sub_80CC3CC def_special sub_80CC524 - def_special sub_8009480 + def_special IsWirelessAdapterConnected def_special sub_8115A24 def_special BerryBlenderLinkJoinGroup def_special UnionRoomSpecial @@ -412,7 +412,7 @@ gSpecials:: @ 815FD60 def_special sub_812B35C def_special Special_SSAnneDepartureCutscene def_special sub_8149A18 - def_special sub_806E25C + def_special IsNationalPokedexEnabled def_special sub_815D9E8 def_special sub_814B504 def_special sub_80CC8CC 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/event_data.h b/include/event_data.h index 5f455467d..036b0a325 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -36,9 +36,8 @@ bool32 sub_806E2BC(void); void sub_806E6FC(void); void sub_806E2D0(void); void sub_806E370(void); -bool32 sub_806E25C(void); +bool32 IsNationalPokedexEnabled(void); void sub_806E190(void); - extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; extern u16 gSpecialVar_0x8002; diff --git a/include/librfu.h b/include/librfu.h index 90f69cb5a..d107894dd 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -1,3 +1,6 @@ +#ifndef GUARD_LIBRFU_H +#define GUARD_LIBRFU_H + #include "main.h" enum @@ -130,6 +133,128 @@ struct RfuIntrStruct u8 block2[0x30]; }; +struct RfuUnk1 +{ + u16 unk_0; + u8 unk_2; + u8 unk_3; + u8 fill_4[14]; + u8 unk_12; + u32 unk_14; + u32 unk_18; + struct RfuIntrStruct unk_1c; +}; + +struct RfuUnk2 +{ + u16 unk_0; + u16 unk_2; + u8 fill_4[0x16]; + u8 unk_1a; + u8 fill_1b[0x19]; + u16 unk_34; + u16 unk_36; + u8 fill_38[0x16]; + u8 unk_4e; + u8 fill_4f[0x12]; + u8 unk_61; + u8 fill_62[6]; + void *unk_68; + void *unk_6c; + u8 unk_70[0x70]; +}; + +struct RfuUnk3 +{ + u32 unk_0; + u32 unk_4; + u8 unk_8[0xD4]; + u32 unk_dc; +}; + +struct RfuUnk5Sub +{ + u16 unk_00; + u8 unk_02; + u16 unk_04; + struct UnkLinkRfuStruct_02022B14 unk_06; + u8 fill_13[1]; + u8 playerName[PLAYER_NAME_LENGTH + 1]; +}; + +struct RfuUnk5 +{ + u8 unk_00; + u8 unk_01; + u8 unk_02; + u8 unk_03; + u8 unk_04; + u8 unk_05; + u8 unk_06; + u8 unk_07; + u8 unk_08; + u8 filler_09[1]; + u8 unk_0a[4]; + u8 filler_0e[6]; + struct RfuUnk5Sub unk_14[4]; +}; + extern struct RfuStruct *gRfuState; +extern struct RfuUnk5 *gUnknown_03007890; +extern u32 *gUnknown_03007894; +extern struct RfuUnk3* gUnknown_03007898; +extern struct RfuUnk2* gUnknown_03007880[4]; +extern struct RfuUnk1* gUnknown_03007870[4]; +extern void* sub_82E53F4; +extern void rfu_STC_clearAPIVariables(void); + void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam); +void rfu_REQ_stopMode(void); +void rfu_waitREQComplete(void); +u32 rfu_REQBN_softReset_and_checkID(void); +void rfu_REQ_sendData(u8); +void rfu_setMSCCallback(void (*func)(u16)); +void rfu_setREQCallback(void (*func)(u16, u16)); +bool8 rfu_getMasterSlave(void); +void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); +bool16 rfu_syncVBlank(void); +void rfu_REQ_reset(void); +void rfu_REQ_configSystem(u16, u8, u8); +void rfu_REQ_configGameData(u8, u16, struct UnkLinkRfuStruct_02022B14 *, u8 *); +void rfu_REQ_startSearchChild(void); +void rfu_REQ_pollSearchChild(void); +void rfu_REQ_endSearchChild(void); +void rfu_REQ_startSearchParent(void); +void rfu_REQ_pollSearchParent(void); +void rfu_REQ_endSearchParent(void); +void rfu_REQ_startConnectParent(u16); +void rfu_REQ_pollConnectParent(void); +void rfu_REQ_endConnectParent(void); +void rfu_REQ_CHILD_startConnectRecovery(u8); +void rfu_REQ_CHILD_pollConnectRecovery(void); +void rfu_REQ_CHILD_endConnectRecovery(void); +void rfu_REQ_changeMasterSlave(void); +void rfu_REQ_RFUStatus(void); +void rfu_getRFUStatus(u8 *status); +u8 *rfu_getSTWIRecvBuffer(void); +u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1); +void rfu_clearSlot(u8 a0, u8 a1); +void rfu_clearAllSlot(void); +bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status); +bool16 rfu_getConnectParentStatus(u8 *status, u8 *a1); +bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0); +void rfu_REQ_disconnect(u8 who); +void rfu_changeSendTarget(u8 a0, u8 who, u8 a2); +void rfu_NI_stopReceivingData(u8 who); +u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam); +void rfu_setTimerInterrupt(u8 which, IntrFunc *intr); +void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3); +bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size); +void rfu_REQ_recvData(void); +void rfu_UNI_readySendData(u8 a0); +void rfu_UNI_clearRecvNewDataFlag(u8 a0); +void rfu_REQ_PARENT_resumeRetransmitAndChange(void); +void rfu_NI_setSendData(u8, u8, const void *, u32); + +#endif // GUARD_LIBRFU_H diff --git a/include/link.h b/include/link.h index d5d3f08a3..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 @@ -138,7 +153,7 @@ extern u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE]; extern u16 gLinkType; extern u32 gLinkStatus; -extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2]; +extern u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2]; extern u16 gSendCmd[CMD_LENGTH]; extern u8 gShouldAdvanceLinkState; extern struct LinkPlayer gLinkPlayers[]; @@ -147,13 +162,12 @@ extern bool8 gReceivedRemoteLinkPlayers; extern bool8 gLinkVSyncDisabled; extern u8 gWirelessCommType; -extern u8 gUnknown_3003F84; -extern u64 gSioMlt_Recv; +extern u8 gShouldAdvanceLinkState; 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); @@ -208,7 +222,7 @@ void sub_80098D8(void); void CloseLink(void); bool8 IsLinkTaskFinished(void); bool32 sub_800B270(void); -void sub_800B388(void); +void ResetSerial(void); void sub_8054A28(void); void sub_800B1F4(void); void LoadWirelessStatusIndicatorSpriteGfx(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index 928ae380e..e7fa2a848 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -19,5 +19,8 @@ void MEvent_CreateTask_Leader(u8); void sub_80F9E2C(void * data); u8 sub_8116DE0(void); void sub_80FBB4C(void); +void sub_80F86F4(void); +void sub_80FB128(bool32 a0); +u32 sub_80FD3A4(void); #endif //GUARD_LINK_RFU_H diff --git a/include/main.h b/include/main.h index 589709436..c962cf7bd 100644 --- a/include/main.h +++ b/include/main.h @@ -72,4 +72,6 @@ u16 GetGeneratedTrainerIdLower(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 7dbe59085..bd63a0778 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -60,6 +60,7 @@ SECTIONS { src/text.o(.text); src/sprite.o(.text); src/string_util.o(.text); + src/link.o(.text); asm/link.o(.text); src/multiboot.o(.text); asm/main_menu.o(.text); @@ -379,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/ereader_helpers.c b/src/ereader_helpers.c index 2a9b9ea71..cce6cefca 100644 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -51,7 +51,7 @@ int EReader_Send(size_t r6, const void * r5) { GetKeyInput(); if (TEST_BUTTON(sJoyNew, B_BUTTON)) - gUnknown_3003F84 = 2; + gShouldAdvanceLinkState = 2; sSendRecvStatus = EReaderHandleTransfer(1, r6, r5, NULL); if ((sSendRecvStatus & 0x13) == 0x10) @@ -71,7 +71,7 @@ int EReader_Send(size_t r6, const void * r5) } else { - gUnknown_3003F84 = 0; + gShouldAdvanceLinkState = 0; VBlankIntrWait(); } } @@ -90,7 +90,7 @@ int EReader_Recv(void * r5) { GetKeyInput(); if (TEST_BUTTON(sJoyNew, B_BUTTON)) - gUnknown_3003F84 = 2; + gShouldAdvanceLinkState = 2; sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, r5); if ((sSendRecvStatus & 0x13) == 0x10) @@ -110,7 +110,7 @@ int EReader_Recv(void * r5) } else { - gUnknown_3003F84 = 0; + gShouldAdvanceLinkState = 0; VBlankIntrWait(); } } @@ -150,7 +150,7 @@ static void OpenSerial32(void) REG_RCNT = 0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE; REG_SIOCNT |= SIO_MULTI_SD; - gUnknown_3003F84 = 0; + gShouldAdvanceLinkState = 0; sCounter1 = 0; sCounter2 = 0; } @@ -167,7 +167,7 @@ u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu case 1: if (DetermineSendRecvState(mode)) EnableSio(); - if (gUnknown_3003F84 == 2) + if (gShouldAdvanceLinkState == 2) { sSendRecvMgr.field_04 = 2; sSendRecvMgr.state = 6; @@ -179,7 +179,7 @@ u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu sSendRecvMgr.state = 3; // fallthrough case 3: - if (gUnknown_3003F84 == 2) + if (gShouldAdvanceLinkState == 2) { sSendRecvMgr.field_04 = 2; sSendRecvMgr.state = 6; diff --git a/src/intro.c b/src/intro.c index bb7242f2f..c15f40dd3 100644 --- a/src/intro.c +++ b/src/intro.c @@ -561,7 +561,7 @@ static bool8 sub_80EC62C(void) } break; case 142: - sub_800B388(); + ResetSerial(); SetMainCallback2(sub_80EC5B8); break; } diff --git a/src/link.c b/src/link.c new file mode 100644 index 000000000..6f28f78c8 --- /dev/null +++ b/src/link.c @@ -0,0 +1,642 @@ +#include "global.h" +#include "palette.h" +#include "bg_regs.h" +#include "gpu_regs.h" +#include "decompress.h" +#include "malloc.h" +#include "save.h" +#include "quest_log.h" +#include "link_rfu.h" +#include "librfu.h" +#include "random.h" +#include "task.h" +#include "event_data.h" +#include "string_util.h" +#include "item_menu.h" +#include "link.h" + +extern u16 gHeldKeyCodeToSend; + +struct BlockTransfer +{ + u16 pos; + u16 size; + const u8 *src; + bool8 active; + u8 multiplayerId; +}; + +struct LinkTestBGInfo +{ + u32 screenBaseBlock; + u32 paletteNum; + u32 dummy_8; + 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]; +static u32 sBlockSendDelayCounter; +static u32 gUnknown_3000E4C; +static u8 gUnknown_3000E50; +static u32 sPlayerDataExchangeStatus; +static u32 gUnknown_3000E58; +static u8 sLinkTestLastBlockSendPos; +ALIGNED(8) static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; +static u8 sNumVBlanksWithoutSerialIntr; +static bool8 sSendBufferEmpty; +static u16 sSendNonzeroCheck; +static u16 sRecvNonzeroCheck; +static u8 sChecksumAvailable; +static u8 sHandshakePlayerCount; +#undef static + +u16 gLinkPartnersHeldKeys[6]; +u32 gLinkDebugSeed; +struct LinkPlayerBlock gLocalLinkPlayerBlock; +bool8 gLinkErrorOccurred; +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 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; +EWRAM_DATA u32 gUnknown_2022114 = 0; +EWRAM_DATA u16 gBlockRecvBuffer[MAX_RFU_PLAYERS][BLOCK_BUFFER_SIZE / 2] = {}; +EWRAM_DATA u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE] = {}; +EWRAM_DATA bool8 gLinkOpen = FALSE; +EWRAM_DATA u16 gLinkType = 0; +EWRAM_DATA u16 gLinkTimeOutCounter = 0; +EWRAM_DATA struct LinkPlayer gLocalLinkPlayer = {}; +EWRAM_DATA struct LinkPlayer gLinkPlayers[MAX_RFU_PLAYERS] = {}; +EWRAM_DATA struct LinkPlayer gSavedLinkPlayers[MAX_RFU_PLAYERS] = {}; +EWRAM_DATA struct { + u32 status; + u8 lastRecvQueueCount; + u8 lastSendQueueCount; + u8 unk_06; +} sLinkErrorBuffer = {}; +EWRAM_DATA u16 gUnknown_202285C = 0; +EWRAM_DATA void *gUnknown_2022860 = NULL; + +void 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 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); + +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) +{ + if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3) + return FALSE; + + sub_800B1F4(); + sub_80F86F4(); + sub_80FB128(1); + if (sub_80FD3A4() == 0x8001) + { + rfu_REQ_stopMode(); + rfu_waitREQComplete(); + return TRUE; + } + sub_800B210(); + CloseLink(); + RestoreSerialTimer3IntrHandlers(); + return FALSE; +} + +void Task_DestroySelf(u8 taskId) +{ + DestroyTask(taskId); +} + +void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4) +{ + 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; + switch (bgNum) + { + case 1: + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock)); + break; + case 2: + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock)); + break; + case 3: + SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(charBaseBlock)); + break; + } + SetGpuReg(REG_OFFSET_BG0HOFS + bgNum * 4, 0); + SetGpuReg(REG_OFFSET_BG0VOFS + bgNum * 4, 0); +} + +void sub_80095BC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) +{ + 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; + SetGpuReg(gBGControlRegOffsets[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock)); +} + +void LinkTestScreen(void) +{ + int i; + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(sub_800978C); + ResetBlockSend(); + gLinkType = 0x1111; + OpenLink(); + SeedRng(gMain.vblankCounter2); + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; + } + InitLinkTestBG(0, 2, 4, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); + CreateTask(Task_DestroySelf, 0); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + gUnknown_3000E58 = 0; + InitLocalLinkPlayer(); + CreateTask(task00_link_test, 0); + SetMainCallback2(CB2_LinkTest); +} + +void SetLocalLinkPlayerId(u8 playerId) +{ + gLocalLinkPlayer.id = playerId; +} + +void InitLocalLinkPlayer(void) +{ + gLocalLinkPlayer.trainerId = gSaveBlock2Ptr->playerTrainerId[0] | (gSaveBlock2Ptr->playerTrainerId[1] << 8) | (gSaveBlock2Ptr->playerTrainerId[2] << 16) | (gSaveBlock2Ptr->playerTrainerId[3] << 24); + StringCopy(gLocalLinkPlayer.name, gSaveBlock2Ptr->playerName); + gLocalLinkPlayer.gender = gSaveBlock2Ptr->playerGender; + gLocalLinkPlayer.linkType = gLinkType; + gLocalLinkPlayer.language = gGameLanguage; + gLocalLinkPlayer.version = gGameVersion + 0x4000; + gLocalLinkPlayer.lp_field_2 = 0x8000; + gLocalLinkPlayer.name[8] = IsNationalPokedexEnabled(); + if (FlagGet(FLAG_0x844)) + { + gLocalLinkPlayer.name[8] |= 0x10; + } +} + +void sub_800978C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void InitLink(void) +{ + int i; + + for (i = 0; i < 8; i++) + { + gSendCmd[i] = 0xEFFF; + } + gLinkOpen = TRUE; + EnableSerial(); +} + +void Task_TriggerHandshake(u8 taskId) +{ + if (++gTasks[taskId].data[0] == 5) + { + gShouldAdvanceLinkState = 1; + DestroyTask(taskId); + } +} + +void OpenLink(void) +{ + int i; + + if (!gWirelessCommType) + { + ResetSerial(); + InitLink(); + gLinkCallback = LinkCB_RequestPlayerDataExchange; + gLinkVSyncDisabled = FALSE; + gLinkErrorOccurred = FALSE; + gSuppressLinkErrorMessage = FALSE; + ResetBlockReceivedFlags(); + ResetBlockSend(); + gUnknown_3000E4C = 0; + gUnknown_3003F28 = FALSE; + gUnknown_3003F24 = FALSE; + gUnknown_3003F34 = 0; + CreateTask(Task_TriggerHandshake, 2); + } + else + { + sub_80F86F4(); + } + gReceivedRemoteLinkPlayers = 0; + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + gRemoteLinkPlayersNotReceived[i] = TRUE; + gUnknown_3003F30[i] = FALSE; + gUnknown_3003F2C[i] = FALSE; + } +} + +void CloseLink(void) +{ + gReceivedRemoteLinkPlayers = FALSE; + if (gWirelessCommType) + { + sub_80F8DC0(); + } + gLinkOpen = FALSE; + DisableSerial(); +} + +void TestBlockTransfer(u8 nothing, u8 is, u8 used) +{ + u8 i; + u8 status; + + if (sLinkTestLastBlockSendPos != sBlockSend.pos) + { + LinkTest_prnthex(sBlockSend.pos, 2, 3, 2); + sLinkTestLastBlockSendPos = sBlockSend.pos; + } + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (sLinkTestLastBlockRecvPos[i] != sBlockRecv[i].pos) + { + LinkTest_prnthex(sBlockRecv[i].pos, 2, i + 4, 2); + sLinkTestLastBlockRecvPos[i] = sBlockRecv[i].pos; + } + } + status = GetBlockReceivedStatus(); + if (status == 0xF) // 0b1111 + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if ((status >> i) & 1) + { + gLinkTestBlockChecksums[i] = LinkTestCalcBlockChecksum(gBlockRecvBuffer[i], sBlockRecv[i].size); + ResetBlockReceivedFlag(i); + if (gLinkTestBlockChecksums[i] != 0x0342) + { + gLinkTestDebugValuesEnabled = FALSE; + gUnknown_2022111 = FALSE; + } + } + } + } +} + +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 78880c228..af2006e14 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -126,7 +126,7 @@ u8 sub_8143674(struct MEvent_Str_1 *mgr) resp = 2; if (mgr->status & 4) resp = 3; - gUnknown_3003F84 = 0; + gShouldAdvanceLinkState = 0; return resp; } @@ -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/src/pokemon.c b/src/pokemon.c index 152e8e1df..4685dcbcd 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -4961,7 +4961,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) if (gEvolutionTable[species][i].param == heldItem) { targetSpecies = gEvolutionTable[species][i].targetSpecies; - if (sub_806E25C() || targetSpecies <= 151) + if (IsNationalPokedexEnabled() || targetSpecies <= 151) { heldItem = 0; SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); @@ -5629,7 +5629,7 @@ u16 sub_8043F90(u16 species) { species = SpeciesToNationalPokedexNum(species); - if (!sub_806E25C() && species > 151) + if (!IsNationalPokedexEnabled() && species > 151) return 0xFFFF; return species; } diff --git a/src/prof_pc.c b/src/prof_pc.c index 35566e714..aeabc8644 100644 --- a/src/prof_pc.c +++ b/src/prof_pc.c @@ -33,7 +33,7 @@ u16 Special_GetPokedexCount(void) gSpecialVar_0x8005 = GetNationalPokedexCount(0); gSpecialVar_0x8006 = GetNationalPokedexCount(1); } - return sub_806E25C(); + return IsNationalPokedexEnabled(); } const u8 * sub_80CA424(u16 count) diff --git a/sym_bss.txt b/sym_bss.txt index 22b6dfdc8..a2cf9ccd8 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -6,58 +6,19 @@ .space 0x4 + .align 2 .include "src/bg.o" + .align 2 .include "src/malloc.o" + .align 2 .include "src/text_printer.o" + .align 2 .include "src/sprite.o" - .align 2 -gUnknown_3000E08: @ 3000E08 - .space 0x10 - -gUnknown_3000E18: @ 3000E18 - .space 0x30 - -gUnknown_3000E48: @ 3000E48 - .space 0x4 - -gUnknown_3000E4C: @ 3000E4C - .space 0x4 - -gUnknown_3000E50: @ 3000E50 - .space 0x4 - -gUnknown_3000E54: @ 3000E54 - .space 0x4 - -gUnknown_3000E58: @ 3000E58 - .space 0x4 - -gUnknown_3000E5C: @ 3000E5C - .space 0x4 - -gUnknown_3000E60: @ 3000E60 - .space 0x4 - -gUnknown_3000E64: @ 3000E64 - .space 0x1 - -gUnknown_3000E65: @ 3000E65 - .space 0x1 - -gUnknown_3000E66: @ 3000E66 - .space 0x2 - -gUnknown_3000E68: @ 3000E68 - .space 0x2 - -gUnknown_3000E6A: @ 3000E6A - .space 0x1 - -gUnknown_3000E6B: @ 3000E6B - .space 0x1 - + .include "src/link.o" + .align 2 .include "src/multiboot.o" + .align 2 .include "src/daycare.o" gUnknown_3000E78: @ 3000E78 diff --git a/sym_common.txt b/sym_common.txt index a5c25be05..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 -gUnknown_3003EAC: @ 3003EAC +gLinkErrorOccurred: @ 3003EAC .space 0x4 -gUnknown_3003EB0: @ 3003EB0 +gLinkDebugFlags: @ 3003EB0 .space 0x8 -gUnknown_3003EB8: @ 3003EB8 +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 @@ -57,52 +51,49 @@ gUnknown_3003F30: @ 3003F30 gUnknown_3003F34: @ 3003F34 .space 0x4 -gUnknown_3003F38: @ 3003F38 +gSuppressLinkErrorMessage: @ 3003F38 .space 0x4 gWirelessCommType: @ 3003F3C .space 0x4 -gUnknown_3003F40: @ 3003F40 +gSavedLinkPlayerCount: @ 3003F40 .space 0x10 -gUnknown_3003F50: @ 3003F50 +gSendCmd: @ 3003F50 .space 0x10 -gUnknown_3003F60: @ 3003F60 +gSavedMultiplayerId: @ 3003F60 .space 0x4 gReceivedRemoteLinkPlayers: @ 3003F64 .space 0xC -gUnknown_3003F70: @ 3003F70 +gLinkTestBGInfo: @ 3003F70 .space 0x10 -gUnknown_3003F80: @ 3003F80 +gLinkCallback: @ 3003F80 .space 0x4 -gUnknown_3003F84: @ 3003F84 +gShouldAdvanceLinkState: @ 3003F84 .space 0x4 -gUnknown_3003F88: @ 3003F88 +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 diff --git a/sym_ewram.txt b/sym_ewram.txt index 8ef93ab54..f821f7170 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -13,57 +13,9 @@ .include "src/sprite.o" .align 2 .include "src/string_util.o" - - @ .include "src/link.o" -gLinkTestDebugValuesEnabled: @ 2022110 - .space 0x1 - -gUnknown_2022111: @ 2022111 - .space 0x1 - - .align 2 -gUnknown_2022114: @ 2022114 - .space 0x4 - -gBlockRecvBuffer: @ 2022118 - .space 0x500 - -gBlockSendBuffer: @ 2022618 - .space 0x100 - -gLinkOpen: @ 2022718 - .space 0x1 - - .align 1 -gLinkType: @ 202271A - .space 0x2 - -gLinkTimeOutCounter: @ 202271C - .space 0x2 - - .align 2 -gLocalLinkPlayer: @ 2022720 - .space 0x1C - - .align 2 -gLinkPlayers: @ 202273C - .space 0x8C - - .align 2 -gSavedLinkPlayers: @ 20227C8 - .space 0x8C - .align 2 -sLinkErrorBuffer: @ 2022854 - .space 0x8 - - .align 1 -gUnknown_202285C: @ 202285C - .space 0x2 - - .align 2 -gUnknown_2022860: @ 2022860 - .space 0xC + .include "src/link.o" + .space 8 @ .include "src/link_rfu.o" .include "src/battle_controllers.o" |