Files
Pokemon-Firered/asm/link.s
T
2019-10-05 15:49:05 -04:00

4835 lines
88 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
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 CB2_LinkTest
CB2_LinkTest: @ 8009A8C
push {lr}
bl LinkTestProcessKeyInput
movs r0, 0x1
movs r1, 0x1
movs r2, 0
bl TestBlockTransfer
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
pop {r0}
bx r0
thumb_func_end CB2_LinkTest
thumb_func_start LinkMain2
LinkMain2: @ 8009AB0
push {r4,r5,lr}
adds r4, r0, 0
ldr r0, _08009AC0 @ =gLinkOpen
ldrb r0, [r0]
cmp r0, 0
bne _08009AC4
movs r0, 0
b _08009B0C
.align 2, 0
_08009AC0: .4byte gLinkOpen
_08009AC4:
movs r1, 0
ldr r5, _08009B14 @ =gUnknown_3003EC4
ldr r3, _08009B18 @ =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 InitLocalLinkPlayer
ldr r0, _08009C7C @ =gUnknown_3003E70
adds r2, r0, 0
adds r2, 0x10
ldr r1, _08009C80 @ =gLocalLinkPlayer
ldm r1!, {r3-r5}
stm r2!, {r3-r5}
ldm r1!, {r3,r6,r7}
stm r2!, {r3,r6,r7}
ldr r1, [r1]
str r1, [r2]
ldr r4, _08009C84 @ =gUnknown_82345C0
adds r2, r0, 0
adds r1, r4, 0
ldm r1!, {r5-r7}
stm r2!, {r5-r7}
ldrh r3, [r1]
strh r3, [r2]
ldrb r1, [r1, 0x2]
strb r1, [r2, 0x2]
adds r1, r0, 0
adds r1, 0x2C
ldm r4!, {r2,r3,r5}
stm r1!, {r2,r3,r5}
ldrh r2, [r4]
strh r2, [r1]
ldrb r2, [r4, 0x2]
strb r2, [r1, 0x2]
movs r1, 0x3C
bl InitBlockSend
b _08009E3E
.align 2, 0
_08009C7C: .4byte gUnknown_3003E70
_08009C80: .4byte gLocalLinkPlayer
_08009C84: .4byte gUnknown_82345C0
_08009C88:
ldr r1, _08009C90 @ =gUnknown_3003F28
movs r0, 0x1
strb r0, [r1]
b _08009E3E
.align 2, 0
_08009C90: .4byte gUnknown_3003F28
_08009C94:
mov r7, r12
adds r1, r7, r6
lsls r1, 2
ldr r0, _08009CB8 @ =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}
ldr r0, _0800A000 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _08009FF6
bl sub_80F9828
_08009FF6:
ldr r1, _0800A004 @ =gUnknown_3003F80
ldr r0, _0800A008 @ =sub_800A040
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0800A000: .4byte gWirelessCommType
_0800A004: .4byte gUnknown_3003F80
_0800A008: .4byte sub_800A040
thumb_func_end sub_8009FE8
thumb_func_start sub_800A00C
sub_800A00C: @ 800A00C
push {lr}
ldr r0, _0800A01C @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _0800A020
bl sub_80F9808
b _0800A03A
.align 2, 0
_0800A01C: .4byte gWirelessCommType
_0800A020:
ldr r0, _0800A030 @ =gUnknown_3003F80
ldr r1, [r0]
ldr r0, _0800A034 @ =sub_800A040
cmp r1, r0
beq _0800A038
movs r0, 0
b _0800A03A
.align 2, 0
_0800A030: .4byte gUnknown_3003F80
_0800A034: .4byte sub_800A040
_0800A038:
movs r0, 0x1
_0800A03A:
pop {r1}
bx r1
thumb_func_end sub_800A00C
thumb_func_start sub_800A040
sub_800A040: @ 800A040
push {lr}
ldr r0, _0800A054 @ =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A050
ldr r0, _0800A058 @ =0x0000cafe
bl sub_8009E60
_0800A050:
pop {r0}
bx r0
.align 2, 0
_0800A054: .4byte gReceivedRemoteLinkPlayers
_0800A058: .4byte 0x0000cafe
thumb_func_end sub_800A040
thumb_func_start sub_800A05C
sub_800A05C: @ 800A05C
ldr r1, _0800A064 @ =gUnknown_3003F80
movs r0, 0
str r0, [r1]
bx lr
.align 2, 0
_0800A064: .4byte gUnknown_3003F80
thumb_func_end sub_800A05C
thumb_func_start sub_800A068
sub_800A068: @ 800A068
push {lr}
ldr r0, _0800A078 @ =gWirelessCommType
ldrb r1, [r0]
cmp r1, 0
beq _0800A07C
bl sub_80F985C
b _0800A080
.align 2, 0
_0800A078: .4byte gWirelessCommType
_0800A07C:
ldr r0, _0800A084 @ =gUnknown_3003F80
str r1, [r0]
_0800A080:
pop {r0}
bx r0
.align 2, 0
_0800A084: .4byte gUnknown_3003F80
thumb_func_end sub_800A068
thumb_func_start GetLinkPlayerCount
GetLinkPlayerCount: @ 800A088
push {lr}
ldr r0, _0800A0A0 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0800A0A8
ldr r0, _0800A0A4 @ =gUnknown_3003F20
ldr r0, [r0]
movs r1, 0x1C
ands r0, r1
lsrs r0, 2
b _0800A0B0
.align 2, 0
_0800A0A0: .4byte gWirelessCommType
_0800A0A4: .4byte gUnknown_3003F20
_0800A0A8:
bl sub_80FA4EC
lsls r0, 24
lsrs r0, 24
_0800A0B0:
pop {r1}
bx r1
thumb_func_end GetLinkPlayerCount
thumb_func_start sub_800A0B4
sub_800A0B4: @ 800A0B4
push {lr}
ldr r0, _0800A0C8 @ =gUnknown_3000E54
movs r1, 0
str r1, [r0]
ldr r0, _0800A0CC @ =gLinkTimeOutCounter
strh r1, [r0]
bl OpenLink
pop {r0}
bx r0
.align 2, 0
_0800A0C8: .4byte gUnknown_3000E54
_0800A0CC: .4byte gLinkTimeOutCounter
thumb_func_end sub_800A0B4
thumb_func_start sub_800A0D0
sub_800A0D0: @ 800A0D0
push {r4-r7,lr}
adds r5, r0, 0
adds r6, r1, 0
movs r7, 0
ldr r0, _0800A0F8 @ =gReceivedRemoteLinkPlayers
ldrb r4, [r0]
cmp r4, 0x1
bne _0800A1C8
bl GetLinkPlayerCount_2
lsls r0, 24
lsrs r0, 24
cmp r5, r0
bgt _0800A0F0
cmp r0, r6
ble _0800A100
_0800A0F0:
ldr r1, _0800A0FC @ =gUnknown_3000E54
movs r0, 0x6
str r0, [r1]
b _0800A1E2
.align 2, 0
_0800A0F8: .4byte gReceivedRemoteLinkPlayers
_0800A0FC: .4byte gUnknown_3000E54
_0800A100:
bl GetLinkPlayerCount
lsls r0, 24
cmp r0, 0
bne _0800A112
ldr r0, _0800A11C @ =gUnknown_3003EAC
strb r4, [r0]
bl CloseLink
_0800A112:
movs r6, 0
ldr r4, _0800A120 @ =gLinkPlayers
movs r5, 0
b _0800A138
.align 2, 0
_0800A11C: .4byte gUnknown_3003EAC
_0800A120: .4byte gLinkPlayers
_0800A124:
adds r0, r4, 0
adds r0, 0x14
adds r0, r5, r0
ldr r1, [r0]
ldr r0, [r4, 0x14]
cmp r1, r0
bne _0800A134
adds r7, 0x1
_0800A134:
adds r5, 0x1C
adds r6, 0x1
_0800A138:
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
cmp r6, r0
blt _0800A124
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
cmp r7, r0
bne _0800A1B8
ldr r0, _0800A170 @ =gLinkPlayers
ldr r1, [r0, 0x14]
ldr r0, _0800A174 @ =0x00001133
cmp r1, r0
bne _0800A1AC
bl sub_804FB34
cmp r0, 0x1
beq _0800A194
cmp r0, 0x1
bgt _0800A17C
cmp r0, 0
beq _0800A188
ldr r2, _0800A178 @ =gUnknown_3000E54
b _0800A1E0
.align 2, 0
_0800A170: .4byte gLinkPlayers
_0800A174: .4byte 0x00001133
_0800A178: .4byte gUnknown_3000E54
_0800A17C:
cmp r0, 0x2
beq _0800A1A0
ldr r2, _0800A184 @ =gUnknown_3000E54
b _0800A1E0
.align 2, 0
_0800A184: .4byte gUnknown_3000E54
_0800A188:
ldr r1, _0800A190 @ =gUnknown_3000E54
movs r0, 0x1
b _0800A1BC
.align 2, 0
_0800A190: .4byte gUnknown_3000E54
_0800A194:
ldr r1, _0800A19C @ =gUnknown_3000E54
movs r0, 0x4
b _0800A1BC
.align 2, 0
_0800A19C: .4byte gUnknown_3000E54
_0800A1A0:
ldr r1, _0800A1A8 @ =gUnknown_3000E54
movs r0, 0x5
b _0800A1BC
.align 2, 0
_0800A1A8: .4byte gUnknown_3000E54
_0800A1AC:
ldr r1, _0800A1B4 @ =gUnknown_3000E54
movs r0, 0x1
b _0800A1BC
.align 2, 0
_0800A1B4: .4byte gUnknown_3000E54
_0800A1B8:
ldr r1, _0800A1C4 @ =gUnknown_3000E54
movs r0, 0x3
_0800A1BC:
str r0, [r1]
adds r2, r1, 0
b _0800A1E0
.align 2, 0
_0800A1C4: .4byte gUnknown_3000E54
_0800A1C8:
ldr r0, _0800A1E8 @ =gLinkTimeOutCounter
ldrh r1, [r0]
adds r1, 0x1
strh r1, [r0]
lsls r1, 16
movs r0, 0x96
lsls r0, 18
ldr r2, _0800A1EC @ =gUnknown_3000E54
cmp r1, r0
bls _0800A1E0
movs r0, 0x2
str r0, [r2]
_0800A1E0:
ldrb r0, [r2]
_0800A1E2:
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0800A1E8: .4byte gLinkTimeOutCounter
_0800A1EC: .4byte gUnknown_3000E54
thumb_func_end sub_800A0D0
thumb_func_start IsLinkPlayerDataExchangeComplete
IsLinkPlayerDataExchangeComplete: @ 800A1F0
push {r4-r6,lr}
movs r6, 0
movs r4, 0
ldr r5, _0800A1FC @ =gLinkPlayers
b _0800A220
.align 2, 0
_0800A1FC: .4byte gLinkPlayers
_0800A200:
lsls r0, r4, 3
subs r0, r4
lsls r0, 2
adds r1, r5, 0
adds r1, 0x14
adds r0, r1
ldr r1, [r0]
ldr r0, [r5, 0x14]
cmp r1, r0
bne _0800A21A
adds r0, r6, 0x1
lsls r0, 24
lsrs r6, r0, 24
_0800A21A:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
_0800A220:
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
cmp r4, r0
bcc _0800A200
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
cmp r6, r0
bne _0800A244
movs r2, 0x1
ldr r0, _0800A240 @ =gUnknown_3000E54
str r2, [r0]
b _0800A24C
.align 2, 0
_0800A240: .4byte gUnknown_3000E54
_0800A244:
movs r2, 0
ldr r1, _0800A254 @ =gUnknown_3000E54
movs r0, 0x3
str r0, [r1]
_0800A24C:
adds r0, r2, 0
pop {r4-r6}
pop {r1}
bx r1
.align 2, 0
_0800A254: .4byte gUnknown_3000E54
thumb_func_end IsLinkPlayerDataExchangeComplete
thumb_func_start GetLinkPlayerTrainerId
GetLinkPlayerTrainerId: @ 800A258
lsls r0, 24
lsrs r0, 24
ldr r2, _0800A26C @ =gLinkPlayers
lsls r1, r0, 3
subs r1, r0
lsls r1, 2
adds r2, 0x4
adds r1, r2
ldr r0, [r1]
bx lr
.align 2, 0
_0800A26C: .4byte gLinkPlayers
thumb_func_end GetLinkPlayerTrainerId
thumb_func_start sub_800A270
sub_800A270: @ 800A270
push {r4,r5,lr}
ldr r5, _0800A290 @ =gLinkPlayers
movs r4, 0x4
_0800A276:
adds r0, r5, 0
movs r1, 0
movs r2, 0x1C
bl memset
adds r5, 0x1C
subs r4, 0x1
cmp r4, 0
bge _0800A276
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800A290: .4byte gLinkPlayers
thumb_func_end sub_800A270
thumb_func_start ResetBlockSend
ResetBlockSend: @ 800A294
ldr r1, _0800A2A4 @ =gUnknown_3000E08
movs r0, 0
strb r0, [r1, 0x8]
strh r0, [r1]
strh r0, [r1, 0x2]
str r0, [r1, 0x4]
bx lr
.align 2, 0
_0800A2A4: .4byte gUnknown_3000E08
thumb_func_end ResetBlockSend
thumb_func_start InitBlockSend
InitBlockSend: @ 800A2A8
push {r4-r7,lr}
adds r7, r0, 0
adds r6, r1, 0
ldr r4, _0800A2BC @ =gUnknown_3000E08
ldrb r5, [r4, 0x8]
cmp r5, 0
beq _0800A2C0
movs r0, 0
b _0800A2FE
.align 2, 0
_0800A2BC: .4byte gUnknown_3000E08
_0800A2C0:
bl GetMultiplayerId
strb r0, [r4, 0x9]
movs r0, 0x1
strb r0, [r4, 0x8]
strh r6, [r4, 0x2]
strh r5, [r4]
adds r0, 0xFF
cmp r6, r0
bls _0800A2D8
str r7, [r4, 0x4]
b _0800A2EA
_0800A2D8:
ldr r5, _0800A304 @ =gBlockSendBuffer
cmp r7, r5
beq _0800A2E8
adds r0, r5, 0
adds r1, r7, 0
adds r2, r6, 0
bl memcpy
_0800A2E8:
str r5, [r4, 0x4]
_0800A2EA:
ldr r0, _0800A308 @ =0x0000bbbb
bl sub_8009E60
ldr r1, _0800A30C @ =gUnknown_3003F80
ldr r0, _0800A310 @ =LinkCB_BlockSendBegin
str r0, [r1]
ldr r1, _0800A314 @ =gUnknown_3000E48
movs r0, 0
str r0, [r1]
movs r0, 0x1
_0800A2FE:
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0800A304: .4byte gBlockSendBuffer
_0800A308: .4byte 0x0000bbbb
_0800A30C: .4byte gUnknown_3003F80
_0800A310: .4byte LinkCB_BlockSendBegin
_0800A314: .4byte gUnknown_3000E48
thumb_func_end InitBlockSend
thumb_func_start LinkCB_BlockSendBegin
LinkCB_BlockSendBegin: @ 800A318
push {lr}
ldr r1, _0800A330 @ =gUnknown_3000E48
ldr r0, [r1]
adds r0, 0x1
str r0, [r1]
cmp r0, 0x2
bls _0800A32C
ldr r1, _0800A334 @ =gUnknown_3003F80
ldr r0, _0800A338 @ =LinkCB_BlockSend
str r0, [r1]
_0800A32C:
pop {r0}
bx r0
.align 2, 0
_0800A330: .4byte gUnknown_3000E48
_0800A334: .4byte gUnknown_3003F80
_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 r5, [r0, 0x4]
ldr r2, _0800A390 @ =gUnknown_3003F50
ldr r1, _0800A394 @ =0x00008888
strh r1, [r2]
movs r3, 0
adds r4, r0, 0
adds r6, r4, 0
adds r2, 0x2
_0800A350:
lsls r0, r3, 1
ldrh r1, [r6]
adds r0, r1
adds r0, r5
ldrb r1, [r0, 0x1]
lsls r1, 8
ldrb r0, [r0]
orrs r0, r1
strh r0, [r2]
adds r2, 0x2
adds r3, 0x1
cmp r3, 0x6
ble _0800A350
ldrh r0, [r4]
adds r0, 0xE
strh r0, [r4]
ldrh r1, [r4, 0x2]
lsls r0, 16
lsrs r0, 16
cmp r1, r0
bhi _0800A384
movs r0, 0
strb r0, [r4, 0x8]
ldr r1, _0800A398 @ =gUnknown_3003F80
ldr r0, _0800A39C @ =sub_800A3A0
str r0, [r1]
_0800A384:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0800A38C: .4byte gUnknown_3000E08
_0800A390: .4byte gUnknown_3003F50
_0800A394: .4byte 0x00008888
_0800A398: .4byte gUnknown_3003F80
_0800A39C: .4byte sub_800A3A0
thumb_func_end LinkCB_BlockSend
thumb_func_start sub_800A3A0
sub_800A3A0: @ 800A3A0
ldr r1, _0800A3A8 @ =gUnknown_3003F80
movs r0, 0
str r0, [r1]
bx lr
.align 2, 0
_0800A3A8: .4byte gUnknown_3003F80
thumb_func_end sub_800A3A0
thumb_func_start sub_800A3AC
sub_800A3AC: @ 800A3AC
push {lr}
bl GetMultiplayerId
ldr r0, _0800A3C4 @ =0x00004444
bl sub_8009E60
ldr r1, _0800A3C8 @ =gUnknown_2022114
ldr r0, [r1]
adds r0, 0x1
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0800A3C4: .4byte 0x00004444
_0800A3C8: .4byte gUnknown_2022114
thumb_func_end sub_800A3AC
thumb_func_start sub_800A3CC
sub_800A3CC: @ 800A3CC
ldr r1, _0800A3DC @ =gUnknown_2022114
movs r0, 0
str r0, [r1]
ldr r1, _0800A3E0 @ =gUnknown_3003F80
ldr r0, _0800A3E4 @ =sub_800A3AC
str r0, [r1]
bx lr
.align 2, 0
_0800A3DC: .4byte gUnknown_2022114
_0800A3E0: .4byte gUnknown_3003F80
_0800A3E4: .4byte sub_800A3AC
thumb_func_end sub_800A3CC
thumb_func_start sub_800A3E8
sub_800A3E8: @ 800A3E8
ldr r0, _0800A3F0 @ =gUnknown_2022114
ldr r0, [r0]
bx lr
.align 2, 0
_0800A3F0: .4byte gUnknown_2022114
thumb_func_end sub_800A3E8
thumb_func_start sub_800A3F4
sub_800A3F4: @ 800A3F4
push {lr}
ldr r0, _0800A400 @ =0x0000aaaa
bl sub_8009E60
pop {r0}
bx r0
.align 2, 0
_0800A400: .4byte 0x0000aaaa
thumb_func_end sub_800A3F4
thumb_func_start GetMultiplayerId
GetMultiplayerId: @ 800A404
push {lr}
ldr r0, _0800A418 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
beq _0800A420
ldr r0, _0800A41C @ =0x04000128
ldr r0, [r0]
lsls r0, 26
lsrs r0, 30
b _0800A428
.align 2, 0
_0800A418: .4byte gWirelessCommType
_0800A41C: .4byte 0x04000128
_0800A420:
bl rfu_get_multiplayer_id
lsls r0, 24
lsrs r0, 24
_0800A428:
pop {r1}
bx r1
thumb_func_end GetMultiplayerId
thumb_func_start bitmask_all_link_players_but_self
bitmask_all_link_players_but_self: @ 800A42C
push {lr}
bl GetMultiplayerId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
movs r0, 0x1
lsls r0, r1
movs r1, 0xF
eors r0, r1
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end bitmask_all_link_players_but_self
thumb_func_start SendBlock
SendBlock: @ 800A448
push {lr}
adds r3, r1, 0
lsls r2, 16
lsrs r1, r2, 16
ldr r0, _0800A460 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
beq _0800A464
adds r0, r3, 0
bl InitBlockSend
b _0800A46A
.align 2, 0
_0800A460: .4byte gWirelessCommType
_0800A464:
adds r0, r3, 0
bl sub_80F9E60
_0800A46A:
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end SendBlock
thumb_func_start sub_800A474
sub_800A474: @ 800A474
push {lr}
lsls r0, 24
lsrs r1, r0, 24
adds r2, r1, 0
ldr r0, _0800A490 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A494
adds r0, r1, 0
bl sub_80FA0F8
lsls r0, 24
lsrs r0, 24
b _0800A4B0
.align 2, 0
_0800A490: .4byte gWirelessCommType
_0800A494:
ldr r0, _0800A4A0 @ =gUnknown_3003F80
ldr r0, [r0]
cmp r0, 0
beq _0800A4A4
movs r0, 0
b _0800A4B0
.align 2, 0
_0800A4A0: .4byte gUnknown_3003F80
_0800A4A4:
ldr r0, _0800A4B4 @ =gUnknown_3003F90
strb r2, [r0]
ldr r0, _0800A4B8 @ =0x0000cccc
bl sub_8009E60
movs r0, 0x1
_0800A4B0:
pop {r1}
bx r1
.align 2, 0
_0800A4B4: .4byte gUnknown_3003F90
_0800A4B8: .4byte 0x0000cccc
thumb_func_end sub_800A474
thumb_func_start IsLinkTaskFinished
IsLinkTaskFinished: @ 800A4BC
push {lr}
ldr r0, _0800A4D0 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A4D4
bl IsNoOneConnected
lsls r0, 24
lsrs r0, 24
b _0800A4E2
.align 2, 0
_0800A4D0: .4byte gWirelessCommType
_0800A4D4:
movs r1, 0
ldr r0, _0800A4E8 @ =gUnknown_3003F80
ldr r0, [r0]
cmp r0, 0
bne _0800A4E0
movs r1, 0x1
_0800A4E0:
adds r0, r1, 0
_0800A4E2:
pop {r1}
bx r1
.align 2, 0
_0800A4E8: .4byte gUnknown_3003F80
thumb_func_end IsLinkTaskFinished
thumb_func_start GetBlockReceivedStatus
GetBlockReceivedStatus: @ 800A4EC
push {lr}
ldr r0, _0800A510 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
beq _0800A518
ldr r2, _0800A514 @ =gUnknown_3003EBC
ldrb r0, [r2, 0x3]
lsls r0, 3
ldrb r1, [r2, 0x2]
lsls r1, 2
orrs r0, r1
ldrb r1, [r2, 0x1]
lsls r1, 1
orrs r0, r1
ldrb r1, [r2]
orrs r0, r1
b _0800A51C
.align 2, 0
_0800A510: .4byte gWirelessCommType
_0800A514: .4byte gUnknown_3003EBC
_0800A518:
bl sub_80F9CC8
_0800A51C:
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
thumb_func_end GetBlockReceivedStatus
thumb_func_start sub_800A524
sub_800A524: @ 800A524
push {lr}
lsls r0, 24
lsrs r1, r0, 24
ldr r0, _0800A53C @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A540
adds r0, r1, 0
bl sub_80F9720
b _0800A548
.align 2, 0
_0800A53C: .4byte gWirelessCommType
_0800A540:
ldr r0, _0800A54C @ =gUnknown_3003EBC
adds r0, r1, r0
movs r1, 0x1
strb r1, [r0]
_0800A548:
pop {r0}
bx r0
.align 2, 0
_0800A54C: .4byte gUnknown_3003EBC
thumb_func_end sub_800A524
thumb_func_start ResetBlockReceivedFlags
ResetBlockReceivedFlags: @ 800A550
push {r4,lr}
ldr r0, _0800A56C @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A570
movs r4, 0
_0800A55C:
lsls r0, r4, 24
lsrs r0, 24
bl sub_80F974C
adds r4, 0x1
cmp r4, 0x4
ble _0800A55C
b _0800A57E
.align 2, 0
_0800A56C: .4byte gWirelessCommType
_0800A570:
ldr r1, _0800A584 @ =gUnknown_3003EBC
movs r2, 0
adds r0, r1, 0x3
_0800A576:
strb r2, [r0]
subs r0, 0x1
cmp r0, r1
bge _0800A576
_0800A57E:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800A584: .4byte gUnknown_3003EBC
thumb_func_end ResetBlockReceivedFlags
thumb_func_start ResetBlockReceivedFlag
ResetBlockReceivedFlag: @ 800A588
push {lr}
lsls r0, 24
lsrs r1, r0, 24
ldr r0, _0800A5A0 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800A5A4
adds r0, r1, 0
bl sub_80F974C
b _0800A5B2
.align 2, 0
_0800A5A0: .4byte gWirelessCommType
_0800A5A4:
ldr r0, _0800A5B8 @ =gUnknown_3003EBC
adds r1, r0
ldrb r0, [r1]
cmp r0, 0
beq _0800A5B2
movs r0, 0
strb r0, [r1]
_0800A5B2:
pop {r0}
bx r0
.align 2, 0
_0800A5B8: .4byte gUnknown_3003EBC
thumb_func_end ResetBlockReceivedFlag
thumb_func_start CheckShouldAdvanceLinkState
CheckShouldAdvanceLinkState: @ 800A5BC
push {lr}
ldr r0, _0800A5DC @ =gUnknown_3003F20
ldr r1, [r0]
movs r0, 0x20
ands r0, r1
cmp r0, 0
beq _0800A5D8
movs r0, 0x1C
ands r1, r0
cmp r1, 0x4
bls _0800A5D8
ldr r1, _0800A5E0 @ =gUnknown_3003F84
movs r0, 0x1
strb r0, [r1]
_0800A5D8:
pop {r0}
bx r0
.align 2, 0
_0800A5DC: .4byte gUnknown_3003F20
_0800A5E0: .4byte gUnknown_3003F84
thumb_func_end CheckShouldAdvanceLinkState
thumb_func_start LinkTestCalcBlockChecksum
LinkTestCalcBlockChecksum: @ 800A5E4
push {r4,lr}
adds r4, r0, 0
lsls r1, 16
movs r3, 0
movs r2, 0
lsrs r1, 17
cmp r3, r1
bcs _0800A60A
_0800A5F4:
lsls r0, r2, 1
adds r0, r4
ldrh r0, [r0]
adds r0, r3, r0
lsls r0, 16
lsrs r3, r0, 16
adds r0, r2, 0x1
lsls r0, 16
lsrs r2, r0, 16
cmp r2, r1
bcc _0800A5F4
_0800A60A:
adds r0, r3, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end LinkTestCalcBlockChecksum
thumb_func_start PrintHexDigit
PrintHexDigit: @ 800A614
push {r4,r5,lr}
lsls r0, 24
lsrs r0, 24
lsls r1, 24
lsrs r1, 24
lsls r2, 24
ldr r4, _0800A648 @ =gLinkTestBGInfo
ldr r3, [r4]
lsls r3, 11
movs r5, 0xC0
lsls r5, 19
adds r3, r5
lsrs r2, 19
adds r2, r1
lsls r2, 1
adds r2, r3
ldr r3, [r4, 0x4]
lsls r3, 12
ldr r1, [r4, 0x8]
adds r1, 0x1
adds r0, r1
orrs r3, r0
strh r3, [r2]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800A648: .4byte gLinkTestBGInfo
thumb_func_end PrintHexDigit
thumb_func_start sub_800A64C
sub_800A64C: @ 800A64C
push {r4,r5,lr}
lsls r0, 24
lsrs r0, 24
lsls r1, 24
lsrs r1, 24
lsls r2, 24
ldr r4, _0800A680 @ =gLinkTestBGInfo
ldr r3, [r4]
lsls r3, 11
movs r5, 0xC0
lsls r5, 19
adds r3, r5
lsrs r2, 19
adds r2, r1
lsls r2, 1
adds r2, r3
ldr r3, [r4, 0x4]
lsls r3, 12
ldr r1, [r4, 0x8]
adds r1, r0
orrs r3, r1
strh r3, [r2]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800A680: .4byte gLinkTestBGInfo
thumb_func_end sub_800A64C
thumb_func_start sub_800A684
sub_800A684: @ 800A684
push {r4-r7,lr}
sub sp, 0x10
adds r5, r0, 0
lsls r1, 24
lsrs r6, r1, 24
lsls r2, 24
lsrs r7, r2, 24
lsls r3, 24
lsrs r3, 24
movs r4, 0
cmp r4, r3
bge _0800A6B0
movs r2, 0xF
_0800A69E:
mov r0, sp
adds r1, r0, r4
adds r0, r5, 0
ands r0, r2
strb r0, [r1]
lsrs r5, 4
adds r4, 0x1
cmp r4, r3
blt _0800A69E
_0800A6B0:
subs r4, r3, 0x1
cmp r4, 0
blt _0800A6D0
_0800A6B6:
mov r1, sp
adds r0, r1, r4
ldrb r0, [r0]
adds r1, r6, 0
adds r2, r7, 0
bl PrintHexDigit
adds r0, r6, 0x1
lsls r0, 24
lsrs r6, r0, 24
subs r4, 0x1
cmp r4, 0
bge _0800A6B6
_0800A6D0:
add sp, 0x10
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800A684
thumb_func_start sub_800A6D8
sub_800A6D8: @ 800A6D8
push {r4-r7,lr}
adds r3, r0, 0
lsls r1, 24
lsrs r7, r1, 24
lsls r2, 24
lsrs r2, 24
movs r6, 0
ldrb r0, [r3]
cmp r0, 0
beq _0800A718
adds r4, r3, 0
lsls r5, r2, 24
_0800A6F0:
ldrb r0, [r4]
cmp r0, 0xA
bne _0800A700
movs r0, 0x80
lsls r0, 17
adds r5, r0
movs r6, 0
b _0800A710
_0800A700:
ldrb r0, [r4]
adds r1, r7, r6
lsls r1, 24
lsrs r1, 24
lsrs r2, r5, 24
bl sub_800A64C
adds r6, 0x1
_0800A710:
adds r4, 0x1
ldrb r0, [r4]
cmp r0, 0
bne _0800A6F0
_0800A718:
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800A6D8
thumb_func_start sub_800A720
sub_800A720: @ 800A720
push {lr}
ldr r0, _0800A740 @ =gUnknown_3003F20
ldr r0, [r0]
movs r1, 0x20
ands r0, r1
cmp r0, 0
beq _0800A734
ldr r0, _0800A744 @ =0x00002222
bl sub_8009E60
_0800A734:
ldr r1, _0800A748 @ =gUnknown_3003F80
movs r0, 0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0800A740: .4byte gUnknown_3003F20
_0800A744: .4byte 0x00002222
_0800A748: .4byte gUnknown_3003F80
thumb_func_end sub_800A720
thumb_func_start task00_link_test
task00_link_test: @ 800A74C
push {r4-r6,lr}
sub sp, 0x20
ldr r1, _0800A86C @ =gUnknown_82345D0
mov r0, sp
bl strcpy
mov r0, sp
movs r1, 0x5
movs r2, 0x2
bl sub_800A6D8
ldr r0, _0800A870 @ =gUnknown_3003F84
ldrb r0, [r0]
movs r1, 0x2
movs r2, 0x1
movs r3, 0x2
bl sub_800A684
ldr r4, _0800A874 @ =gUnknown_3003F20
ldr r0, [r4]
movs r1, 0xF
movs r2, 0x1
movs r3, 0x8
bl sub_800A684
ldr r0, _0800A878 @ =gUnknown_3003FB0
ldrb r0, [r0, 0x1]
movs r1, 0x2
movs r2, 0xA
movs r3, 0x2
bl sub_800A684
ldr r0, [r4]
movs r1, 0x1C
ands r0, r1
lsrs r0, 2
movs r1, 0xF
movs r2, 0xA
movs r3, 0x2
bl sub_800A684
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
ldrb r0, [r0]
movs r1, 0x19
movs r2, 0x1
movs r3, 0x2
bl sub_800A684
ldr r0, _0800A880 @ =gUnknown_3004F70
ldrb r0, [r0]
movs r1, 0x19
movs r2, 0x2
movs r3, 0x2
bl sub_800A684
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
ldr r0, [r0]
movs r1, 0x2
movs r2, 0xC
movs r3, 0x8
bl sub_800A684
ldr r0, _0800A888 @ =gUnknown_3003EB0
ldr r0, [r0]
movs r1, 0x2
movs r2, 0xD
movs r3, 0x8
bl sub_800A684
bl GetSioMultiSI
lsls r0, 24
lsrs r0, 24
movs r1, 0x19
movs r2, 0x5
movs r3, 0x1
bl sub_800A684
bl IsSioMultiMaster
lsls r0, 24
lsrs r0, 24
movs r1, 0x19
movs r2, 0x6
movs r3, 0x1
bl sub_800A684
bl IsLinkConnectionEstablished
lsls r0, 24
lsrs r0, 24
movs r1, 0x19
movs r2, 0x7
movs r3, 0x1
bl sub_800A684
bl HasLinkErrorOccurred
lsls r0, 24
lsrs r0, 24
movs r1, 0x19
movs r2, 0x8
movs r3, 0x1
bl sub_800A684
movs r6, 0
movs r5, 0x80
lsls r5, 19
ldr r4, _0800A88C @ =gUnknown_3003F88
_0800A84A:
ldrh r0, [r4]
lsrs r2, r5, 24
movs r1, 0xA
movs r3, 0x4
bl sub_800A684
movs r0, 0x80
lsls r0, 17
adds r5, r0
adds r4, 0x2
adds r6, 0x1
cmp r6, 0x3
ble _0800A84A
add sp, 0x20
pop {r4-r6}
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
thumb_func_end task00_link_test
thumb_func_start SetLinkDebugValues
SetLinkDebugValues: @ 800A890
ldr r2, _0800A89C @ =gUnknown_3003E6C
str r0, [r2]
ldr r0, _0800A8A0 @ =gUnknown_3003EB0
str r1, [r0]
bx lr
.align 2, 0
_0800A89C: .4byte gUnknown_3003E6C
_0800A8A0: .4byte gUnknown_3003EB0
thumb_func_end SetLinkDebugValues
thumb_func_start sub_800A8A4
sub_800A8A4: @ 800A8A4
push {r4,lr}
movs r1, 0
movs r2, 0
ldr r0, _0800A8D0 @ =gUnknown_3003F40
ldrb r0, [r0]
cmp r1, r0
bge _0800A8C6
movs r4, 0x1
adds r3, r0, 0
_0800A8B6:
adds r0, r4, 0
lsls r0, r2
orrs r1, r0
lsls r0, r1, 24
lsrs r1, r0, 24
adds r2, 0x1
cmp r2, r3
blt _0800A8B6
_0800A8C6:
adds r0, r1, 0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_0800A8D0: .4byte gUnknown_3003F40
thumb_func_end sub_800A8A4
thumb_func_start sub_800A8D4
sub_800A8D4: @ 800A8D4
push {r4-r6,lr}
movs r4, 0
movs r5, 0
movs r6, 0x1
b _0800A8EA
_0800A8DE:
adds r0, r6, 0
lsls r0, r5
orrs r4, r0
lsls r0, r4, 24
lsrs r4, r0, 24
adds r5, 0x1
_0800A8EA:
bl GetLinkPlayerCount
lsls r0, 24
lsrs r0, 24
cmp r5, r0
blt _0800A8DE
adds r0, r4, 0
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_800A8D4
thumb_func_start sub_800A900
sub_800A900: @ 800A900
push {r4-r7,lr}
ldr r1, _0800A934 @ =gUnknown_3003F40
strb r0, [r1]
bl GetMultiplayerId
ldr r1, _0800A938 @ =gUnknown_3003F60
strb r0, [r1]
ldr r4, _0800A93C @ =gLinkPlayers
ldr r3, _0800A940 @ =gSavedLinkPlayers
movs r2, 0x4
_0800A914:
adds r0, r3, 0
adds r1, r4, 0
ldm r1!, {r5-r7}
stm r0!, {r5-r7}
ldm r1!, {r5-r7}
stm r0!, {r5-r7}
ldr r1, [r1]
str r1, [r0]
adds r4, 0x1C
adds r3, 0x1C
subs r2, 0x1
cmp r2, 0
bge _0800A914
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800A934: .4byte gUnknown_3003F40
_0800A938: .4byte gUnknown_3003F60
_0800A93C: .4byte gLinkPlayers
_0800A940: .4byte gSavedLinkPlayers
thumb_func_end sub_800A900
thumb_func_start sub_800A944
sub_800A944: @ 800A944
ldr r0, _0800A94C @ =gUnknown_3003F40
ldrb r0, [r0]
bx lr
.align 2, 0
_0800A94C: .4byte gUnknown_3003F40
thumb_func_end sub_800A944
thumb_func_start sub_800A950
sub_800A950: @ 800A950
ldr r0, _0800A958 @ =gUnknown_3003F60
ldrb r0, [r0]
bx lr
.align 2, 0
_0800A958: .4byte gUnknown_3003F60
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
ldrb r2, [r0]
adds r6, r0, 0
cmp r5, r2
bge _0800A986
ldr r1, _0800A994 @ =gLinkPlayers
ldr r0, _0800A998 @ =gSavedLinkPlayers
adds r4, r0, 0x4
adds r3, r1, 0x4
_0800A972:
ldr r1, [r3]
ldr r0, [r4]
cmp r1, r0
bne _0800A97C
adds r5, 0x1
_0800A97C:
adds r4, 0x1C
adds r3, 0x1C
subs r2, 0x1
cmp r2, 0
bne _0800A972
_0800A986:
ldrb r6, [r6]
cmp r5, r6
beq _0800A99C
movs r0, 0
b _0800A99E
.align 2, 0
_0800A990: .4byte gUnknown_3003F40
_0800A994: .4byte gLinkPlayers
_0800A998: .4byte gSavedLinkPlayers
_0800A99C:
movs r0, 0x1
_0800A99E:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_800A95C
thumb_func_start sub_800A9A4
sub_800A9A4: @ 800A9A4
push {r4-r7,lr}
mov r7, r8
push {r7}
movs r4, 0
ldr r0, _0800AA10 @ =gUnknown_3003F40
ldrb r0, [r0]
cmp r4, r0
bcs _0800AA04
ldr r6, _0800AA14 @ =gSavedLinkPlayers
ldr r5, _0800AA18 @ =gLinkPlayers
movs r0, 0x8
adds r0, r6
mov r8, r0
adds r7, r5, 0
adds r7, 0x8
_0800A9C2:
lsls r0, r4, 3
subs r0, r4
lsls r2, r0, 2
adds r1, r6, 0x4
adds r1, r2, r1
adds r0, r5, 0x4
adds r0, r2, r0
ldr r1, [r1]
ldr r0, [r0]
cmp r1, r0
bne _0800A9E6
mov r1, r8
adds r0, r2, r1
adds r1, r2, r7
bl StringCompare
cmp r0, 0
beq _0800A9F6
_0800A9E6:
ldr r1, _0800AA1C @ =gUnknown_3003EAC
movs r0, 0x1
strb r0, [r1]
bl CloseLink
ldr r0, _0800AA20 @ =c2_800ACD4
bl SetMainCallback2
_0800A9F6:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
ldr r0, _0800AA10 @ =gUnknown_3003F40
ldrb r0, [r0]
cmp r4, r0
bcc _0800A9C2
_0800AA04:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800AA10: .4byte gUnknown_3003F40
_0800AA14: .4byte gSavedLinkPlayers
_0800AA18: .4byte gLinkPlayers
_0800AA1C: .4byte gUnknown_3003EAC
_0800AA20: .4byte c2_800ACD4
thumb_func_end sub_800A9A4
thumb_func_start sub_800AA24
sub_800AA24: @ 800AA24
ldr r0, _0800AA30 @ =gUnknown_3003F40
movs r1, 0
strb r1, [r0]
ldr r0, _0800AA34 @ =gUnknown_3003F60
strb r1, [r0]
bx lr
.align 2, 0
_0800AA30: .4byte gUnknown_3003F40
_0800AA34: .4byte gUnknown_3003F60
thumb_func_end sub_800AA24
thumb_func_start GetLinkPlayerCount_2
GetLinkPlayerCount_2: @ 800AA38
ldr r0, _0800AA44 @ =gUnknown_3003F20
ldr r0, [r0]
movs r1, 0x1C
ands r0, r1
lsrs r0, 2
bx lr
.align 2, 0
_0800AA44: .4byte gUnknown_3003F20
thumb_func_end GetLinkPlayerCount_2
thumb_func_start IsLinkMaster
IsLinkMaster: @ 800AA48
push {lr}
ldr r0, _0800AA60 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0800AA68
ldr r0, _0800AA64 @ =gUnknown_3003F20
ldr r0, [r0]
lsrs r0, 5
movs r1, 0x1
ands r0, r1
b _0800AA70
.align 2, 0
_0800AA60: .4byte gWirelessCommType
_0800AA64: .4byte gUnknown_3003F20
_0800AA68:
bl sub_80FBA2C
lsls r0, 24
lsrs r0, 24
_0800AA70:
pop {r1}
bx r1
thumb_func_end IsLinkMaster
thumb_func_start sub_800AA74
sub_800AA74: @ 800AA74
ldr r0, _0800AA7C @ =gUnknown_3000E50
ldrb r0, [r0]
bx lr
.align 2, 0
_0800AA7C: .4byte gUnknown_3000E50
thumb_func_end sub_800AA74
thumb_func_start sub_800AA80
sub_800AA80: @ 800AA80
push {lr}
lsls r0, 16
lsrs r3, r0, 16
ldr r0, _0800AA94 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800AA98
bl task_add_05_task_del_08FA224_when_no_RfuFunc
b _0800AAAC
.align 2, 0
_0800AA94: .4byte gWirelessCommType
_0800AA98:
ldr r2, _0800AAB0 @ =gUnknown_3003F80
ldr r1, [r2]
cmp r1, 0
bne _0800AAAC
ldr r0, _0800AAB4 @ =sub_800AB0C
str r0, [r2]
ldr r0, _0800AAB8 @ =gUnknown_3003F24
strb r1, [r0]
ldr r0, _0800AABC @ =gUnknown_3003F34
strh r3, [r0]
_0800AAAC:
pop {r0}
bx r0
.align 2, 0
_0800AAB0: .4byte gUnknown_3003F80
_0800AAB4: .4byte sub_800AB0C
_0800AAB8: .4byte gUnknown_3003F24
_0800AABC: .4byte gUnknown_3003F34
thumb_func_end sub_800AA80
thumb_func_start sub_800AAC0
sub_800AAC0: @ 800AAC0
push {lr}
ldr r0, _0800AAD0 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800AAD4
bl task_add_05_task_del_08FA224_when_no_RfuFunc
b _0800AAFC
.align 2, 0
_0800AAD0: .4byte gWirelessCommType
_0800AAD4:
ldr r2, _0800AAE8 @ =gUnknown_3003F80
ldr r1, [r2]
cmp r1, 0
beq _0800AAF0
ldr r1, _0800AAEC @ =gUnknown_202285C
ldrh r0, [r1]
adds r0, 0x1
strh r0, [r1]
b _0800AAFC
.align 2, 0
_0800AAE8: .4byte gUnknown_3003F80
_0800AAEC: .4byte gUnknown_202285C
_0800AAF0:
ldr r0, _0800AB00 @ =sub_800AB0C
str r0, [r2]
ldr r0, _0800AB04 @ =gUnknown_3003F24
strb r1, [r0]
ldr r0, _0800AB08 @ =gUnknown_3003F34
strh r1, [r0]
_0800AAFC:
pop {r0}
bx r0
.align 2, 0
_0800AB00: .4byte sub_800AB0C
_0800AB04: .4byte gUnknown_3003F24
_0800AB08: .4byte gUnknown_3003F34
thumb_func_end sub_800AAC0
thumb_func_start sub_800AB0C
sub_800AB0C: @ 800AB0C
push {lr}
ldr r0, _0800AB28 @ =gUnknown_3004F70
ldrb r0, [r0]
cmp r0, 0
bne _0800AB22
ldr r0, _0800AB2C @ =0x00005fff
bl sub_8009E60
ldr r1, _0800AB30 @ =gUnknown_3003F80
ldr r0, _0800AB34 @ =sub_800AB38
str r0, [r1]
_0800AB22:
pop {r0}
bx r0
.align 2, 0
_0800AB28: .4byte gUnknown_3004F70
_0800AB2C: .4byte 0x00005fff
_0800AB30: .4byte gUnknown_3003F80
_0800AB34: .4byte sub_800AB38
thumb_func_end sub_800AB0C
thumb_func_start sub_800AB38
sub_800AB38: @ 800AB38
push {r4,lr}
bl GetLinkPlayerCount
lsls r0, 24
lsrs r2, r0, 24
movs r3, 0
movs r1, 0
cmp r3, r2
bge _0800AB5C
ldr r4, _0800AB84 @ =gUnknown_3003F30
_0800AB4C:
adds r0, r1, r4
ldrb r0, [r0]
cmp r0, 0
beq _0800AB56
adds r3, 0x1
_0800AB56:
adds r1, 0x1
cmp r1, r2
blt _0800AB4C
_0800AB5C:
cmp r3, r2
bne _0800AB7E
ldr r2, _0800AB88 @ =gBattleTypeFlags
ldr r0, [r2]
ldr r1, _0800AB8C @ =0x0000ffdf
ands r0, r1
str r0, [r2]
ldr r0, _0800AB90 @ =gLinkVSyncDisabled
movs r4, 0x1
strb r4, [r0]
bl CloseLink
ldr r1, _0800AB94 @ =gUnknown_3003F80
movs r0, 0
str r0, [r1]
ldr r0, _0800AB98 @ =gUnknown_3003F24
strb r4, [r0]
_0800AB7E:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800AB84: .4byte gUnknown_3003F30
_0800AB88: .4byte gBattleTypeFlags
_0800AB8C: .4byte 0x0000ffdf
_0800AB90: .4byte gLinkVSyncDisabled
_0800AB94: .4byte gUnknown_3003F80
_0800AB98: .4byte gUnknown_3003F24
thumb_func_end sub_800AB38
thumb_func_start sub_800AB9C
sub_800AB9C: @ 800AB9C
push {lr}
ldr r0, _0800ABAC @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x1
bne _0800ABB0
bl sub_80FA42C
b _0800ABC2
.align 2, 0
_0800ABAC: .4byte gWirelessCommType
_0800ABB0:
ldr r1, _0800ABC8 @ =gUnknown_3003F80
ldr r0, [r1]
cmp r0, 0
bne _0800ABBC
ldr r0, _0800ABCC @ =sub_800ABD4
str r0, [r1]
_0800ABBC:
ldr r1, _0800ABD0 @ =gUnknown_3003F24
movs r0, 0
strb r0, [r1]
_0800ABC2:
pop {r0}
bx r0
.align 2, 0
_0800ABC8: .4byte gUnknown_3003F80
_0800ABCC: .4byte sub_800ABD4
_0800ABD0: .4byte gUnknown_3003F24
thumb_func_end sub_800AB9C
thumb_func_start sub_800ABD4
sub_800ABD4: @ 800ABD4
push {lr}
ldr r0, _0800ABF0 @ =gUnknown_3004F70
ldrb r0, [r0]
cmp r0, 0
bne _0800ABEA
ldr r0, _0800ABF4 @ =0x00002ffe
bl sub_8009E60
ldr r1, _0800ABF8 @ =gUnknown_3003F80
ldr r0, _0800ABFC @ =sub_800AC00
str r0, [r1]
_0800ABEA:
pop {r0}
bx r0
.align 2, 0
_0800ABF0: .4byte gUnknown_3004F70
_0800ABF4: .4byte 0x00002ffe
_0800ABF8: .4byte gUnknown_3003F80
_0800ABFC: .4byte sub_800AC00
thumb_func_end sub_800ABD4
thumb_func_start sub_800AC00
sub_800AC00: @ 800AC00
push {r4,lr}
bl GetLinkPlayerCount
lsls r0, 24
lsrs r2, r0, 24
movs r1, 0
cmp r1, r2
bcs _0800AC2A
ldr r3, _0800AC50 @ =gUnknown_3003F2C
ldrb r0, [r3]
cmp r0, 0
beq _0800AC2A
_0800AC18:
adds r0, r1, 0x1
lsls r0, 24
lsrs r1, r0, 24
cmp r1, r2
bcs _0800AC2A
adds r0, r1, r3
ldrb r0, [r0]
cmp r0, 0
bne _0800AC18
_0800AC2A:
cmp r1, r2
bne _0800AC48
movs r1, 0
ldr r4, _0800AC54 @ =gUnknown_3003F80
ldr r3, _0800AC50 @ =gUnknown_3003F2C
movs r2, 0
_0800AC36:
adds r0, r1, r3
strb r2, [r0]
adds r0, r1, 0x1
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0x3
bls _0800AC36
movs r0, 0
str r0, [r4]
_0800AC48:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800AC50: .4byte gUnknown_3003F2C
_0800AC54: .4byte gUnknown_3003F80
thumb_func_end sub_800AC00
thumb_func_start sub_800AC58
sub_800AC58: @ 800AC58
push {lr}
ldr r0, _0800AC9C @ =gLinkOpen
ldrb r0, [r0]
cmp r0, 0
beq _0800AC98
ldr r0, _0800ACA0 @ =gUnknown_3003F20
ldr r2, [r0]
movs r0, 0xFE
lsls r0, 11
ands r0, r2
cmp r0, 0
beq _0800AC98
ldr r0, _0800ACA4 @ =gUnknown_3003F38
ldrb r0, [r0]
cmp r0, 0
bne _0800AC8E
ldr r1, _0800ACA8 @ =sLinkErrorBuffer
str r2, [r1]
ldr r0, _0800ACAC @ =gUnknown_3004F70
ldrb r0, [r0]
strb r0, [r1, 0x4]
ldr r0, _0800ACB0 @ =gUnknown_3003FA0
ldrb r0, [r0]
strb r0, [r1, 0x5]
ldr r0, _0800ACB4 @ =c2_800ACD4
bl SetMainCallback2
_0800AC8E:
ldr r1, _0800ACB8 @ =gUnknown_3003EAC
movs r0, 0x1
strb r0, [r1]
bl CloseLink
_0800AC98:
pop {r0}
bx r0
.align 2, 0
_0800AC9C: .4byte gLinkOpen
_0800ACA0: .4byte gUnknown_3003F20
_0800ACA4: .4byte gUnknown_3003F38
_0800ACA8: .4byte sLinkErrorBuffer
_0800ACAC: .4byte gUnknown_3004F70
_0800ACB0: .4byte gUnknown_3003FA0
_0800ACB4: .4byte c2_800ACD4
_0800ACB8: .4byte gUnknown_3003EAC
thumb_func_end sub_800AC58
thumb_func_start sub_800ACBC
sub_800ACBC: @ 800ACBC
push {r4,lr}
ldr r4, _0800ACD0 @ =sLinkErrorBuffer
str r0, [r4]
strb r1, [r4, 0x5]
strb r2, [r4, 0x4]
strb r3, [r4, 0x6]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800ACD0: .4byte sLinkErrorBuffer
thumb_func_end sub_800ACBC
thumb_func_start c2_800ACD4
c2_800ACD4: @ 800ACD4
push {r4,lr}
movs r0, 0
movs r1, 0
bl SetGpuReg
ldr r0, _0800ADE0 @ =gMPlayInfo_SE1
bl m4aMPlayStop
ldr r0, _0800ADE4 @ =gMPlayInfo_SE2
bl m4aMPlayStop
ldr r0, _0800ADE8 @ =gMPlayInfo_SE3
bl m4aMPlayStop
ldr r0, _0800ADEC @ =gHeap
movs r1, 0xE0
lsls r1, 9
bl InitHeap
bl ResetSpriteData
bl FreeAllSpritePalettes
bl ResetPaletteFadeControl
movs r0, 0
movs r1, 0
movs r2, 0x2
bl FillPalette
bl ResetTasks
bl ScanlineEffect_Stop
ldr r1, _0800ADF0 @ =gWirelessCommType
ldrb r0, [r1]
cmp r0, 0
beq _0800AD30
ldr r0, _0800ADF4 @ =sLinkErrorBuffer
ldrb r0, [r0, 0x6]
cmp r0, 0
bne _0800AD2C
movs r0, 0x3
strb r0, [r1]
_0800AD2C:
bl sub_80F85F8
_0800AD30:
ldr r0, _0800ADF8 @ =sub_800978C
bl SetVBlankCallback
movs r0, 0
bl ResetBgsAndClearDma3BusyFlags
ldr r1, _0800ADFC @ =gUnknown_82345E8
movs r0, 0
movs r2, 0x2
bl InitBgsFromTemplates
ldr r4, _0800AE00 @ =gUnknown_2022860
movs r0, 0x80
lsls r0, 4
bl Alloc
adds r1, r0, 0
str r1, [r4]
movs r0, 0x1
bl SetBgTilemapBuffer
ldr r0, _0800AE04 @ =gUnknown_82345F0
bl InitWindows
lsls r0, 16
cmp r0, 0
beq _0800ADD8
bl DeactivateAllTextPrinters
bl ResetTempTileDataBuffers
movs r0, 0x52
movs r1, 0
bl SetGpuReg
movs r0, 0x10
movs r1, 0
bl SetGpuReg
movs r0, 0x12
movs r1, 0
bl SetGpuReg
movs r0, 0x14
movs r1, 0
bl SetGpuReg
movs r0, 0x16
movs r1, 0
bl SetGpuReg
movs r1, 0xE0
lsls r1, 8
movs r0, 0
bl ClearGpuRegBits
ldr r0, _0800AE08 @ =gTMCaseMainWindowPalette
movs r1, 0xF0
movs r2, 0x20
bl LoadPalette
ldr r1, _0800AE0C @ =gSoftResetDisabled
movs r0, 0
strb r0, [r1]
ldr r0, _0800AE10 @ =Task_DestroySelf
movs r1, 0
bl CreateTask
bl StopMapMusic
ldr r1, _0800AE14 @ =gMain
movs r0, 0
str r0, [r1]
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
ldr r0, _0800AE18 @ =sub_800AF2C
bl SetMainCallback2
_0800ADD8:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800ADE0: .4byte gMPlayInfo_SE1
_0800ADE4: .4byte gMPlayInfo_SE2
_0800ADE8: .4byte gMPlayInfo_SE3
_0800ADEC: .4byte gHeap
_0800ADF0: .4byte gWirelessCommType
_0800ADF4: .4byte sLinkErrorBuffer
_0800ADF8: .4byte sub_800978C
_0800ADFC: .4byte gUnknown_82345E8
_0800AE00: .4byte gUnknown_2022860
_0800AE04: .4byte gUnknown_82345F0
_0800AE08: .4byte gTMCaseMainWindowPalette
_0800AE0C: .4byte gSoftResetDisabled
_0800AE10: .4byte Task_DestroySelf
_0800AE14: .4byte gMain
_0800AE18: .4byte sub_800AF2C
thumb_func_end c2_800ACD4
thumb_func_start sub_800AE1C
sub_800AE1C: @ 800AE1C
push {r4,r5,lr}
sub sp, 0xC
ldr r1, _0800AEB8 @ =gWirelessLinkDisplay4bpp
movs r5, 0
str r5, [sp]
movs r0, 0x1
movs r2, 0
movs r3, 0
bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _0800AEBC @ =gWirelessLinkDisplayBin
movs r0, 0x1
movs r2, 0
movs r3, 0
bl CopyToBgTilemapBuffer
movs r0, 0x1
bl CopyBgTilemapBufferToVram
ldr r0, _0800AEC0 @ =gUnknown_8231EC4
movs r1, 0
movs r2, 0x20
bl LoadPalette
movs r0, 0
movs r1, 0
bl FillWindowPixelBuffer
movs r0, 0x2
movs r1, 0
bl FillWindowPixelBuffer
ldr r4, _0800AEC4 @ =gUnknown_8234610
str r4, [sp]
str r5, [sp, 0x4]
ldr r0, _0800AEC8 @ =gUnknown_841DEF0
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0x3
movs r2, 0x2
movs r3, 0x5
bl AddTextPrinterParameterized3
str r4, [sp]
str r5, [sp, 0x4]
ldr r0, _0800AECC @ =gUnknown_841DF05
str r0, [sp, 0x8]
movs r0, 0x2
movs r1, 0x3
movs r2, 0x2
movs r3, 0x2
bl AddTextPrinterParameterized3
movs r0, 0
bl PutWindowTilemap
movs r0, 0x2
bl PutWindowTilemap
movs r0, 0
movs r1, 0
bl CopyWindowToVram
movs r0, 0x2
movs r1, 0x3
bl CopyWindowToVram
movs r0, 0
bl ShowBg
movs r0, 0x1
bl ShowBg
add sp, 0xC
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800AEB8: .4byte gWirelessLinkDisplay4bpp
_0800AEBC: .4byte gWirelessLinkDisplayBin
_0800AEC0: .4byte gUnknown_8231EC4
_0800AEC4: .4byte gUnknown_8234610
_0800AEC8: .4byte gUnknown_841DEF0
_0800AECC: .4byte gUnknown_841DF05
thumb_func_end sub_800AE1C
thumb_func_start sub_800AED0
sub_800AED0: @ 800AED0
push {lr}
sub sp, 0xC
movs r0, 0x1
movs r1, 0
bl FillWindowPixelBuffer
movs r0, 0x2
movs r1, 0
bl FillWindowPixelBuffer
ldr r0, _0800AF24 @ =gUnknown_8234610
str r0, [sp]
movs r0, 0
str r0, [sp, 0x4]
ldr r0, _0800AF28 @ =gUnknown_841DE9D
str r0, [sp, 0x8]
movs r0, 0x1
movs r1, 0x3
movs r2, 0x2
movs r3, 0
bl AddTextPrinterParameterized3
movs r0, 0x1
bl PutWindowTilemap
movs r0, 0x2
bl PutWindowTilemap
movs r0, 0x1
movs r1, 0
bl CopyWindowToVram
movs r0, 0x2
movs r1, 0x3
bl CopyWindowToVram
movs r0, 0
bl ShowBg
add sp, 0xC
pop {r0}
bx r0
.align 2, 0
_0800AF24: .4byte gUnknown_8234610
_0800AF28: .4byte gUnknown_841DE9D
thumb_func_end sub_800AED0
thumb_func_start sub_800AF2C
sub_800AF2C: @ 800AF2C
push {r4,lr}
sub sp, 0xC
ldr r0, _0800AF4C @ =gMain
movs r1, 0x87
lsls r1, 3
adds r0, r1
ldrb r0, [r0]
cmp r0, 0x3C
beq _0800AF72
cmp r0, 0x3C
bgt _0800AF50
cmp r0, 0
beq _0800AF5A
cmp r0, 0x1E
beq _0800AF72
b _0800AFC4
.align 2, 0
_0800AF4C: .4byte gMain
_0800AF50:
cmp r0, 0x5A
beq _0800AF72
cmp r0, 0x82
beq _0800AF7A
b _0800AFC4
_0800AF5A:
ldr r0, _0800AF68 @ =sLinkErrorBuffer
ldrb r0, [r0, 0x6]
cmp r0, 0
beq _0800AF6C
bl sub_800AE1C
b _0800AFC4
.align 2, 0
_0800AF68: .4byte sLinkErrorBuffer
_0800AF6C:
bl sub_800AED0
b _0800AFC4
_0800AF72:
movs r0, 0x16
bl PlaySE
b _0800AFC4
_0800AF7A:
ldr r0, _0800AF9C @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0x2
bne _0800AFA8
ldr r0, _0800AFA0 @ =gUnknown_8234610
str r0, [sp]
movs r0, 0
str r0, [sp, 0x4]
ldr r0, _0800AFA4 @ =gUnknown_841DF6B
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0x3
movs r2, 0x2
movs r3, 0x14
bl AddTextPrinterParameterized3
b _0800AFC4
.align 2, 0
_0800AF9C: .4byte gWirelessCommType
_0800AFA0: .4byte gUnknown_8234610
_0800AFA4: .4byte gUnknown_841DF6B
_0800AFA8:
cmp r0, 0x1
bne _0800AFC4
ldr r0, _0800AFFC @ =gUnknown_8234610
str r0, [sp]
movs r0, 0
str r0, [sp, 0x4]
ldr r0, _0800B000 @ =gUnknown_841DF4C
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0x3
movs r2, 0x2
movs r3, 0x14
bl AddTextPrinterParameterized3
_0800AFC4:
ldr r0, _0800B004 @ =gMain
movs r2, 0x87
lsls r2, 3
adds r1, r0, r2
ldrb r1, [r1]
cmp r1, 0xA0
bne _0800B03C
ldr r4, _0800B008 @ =gWirelessCommType
ldrb r2, [r4]
cmp r2, 0x1
bne _0800B010
ldrh r0, [r0, 0x2E]
ands r2, r0
cmp r2, 0
beq _0800B02E
bl sub_812B484
movs r0, 0x15
bl PlaySE
movs r0, 0
strb r0, [r4]
ldr r1, _0800B00C @ =sLinkErrorBuffer
movs r0, 0
strb r0, [r1, 0x6]
bl sub_8079B7C
b _0800B02E
.align 2, 0
_0800AFFC: .4byte gUnknown_8234610
_0800B000: .4byte gUnknown_841DF4C
_0800B004: .4byte gMain
_0800B008: .4byte gWirelessCommType
_0800B00C: .4byte sLinkErrorBuffer
_0800B010:
cmp r2, 0x2
bne _0800B02E
ldrh r1, [r0, 0x2E]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _0800B02E
bl sub_812B484
bl rfu_REQ_stopMode
bl rfu_waitREQComplete
bl DoSoftReset
_0800B02E:
ldr r0, _0800B050 @ =gMain
movs r2, 0x87
lsls r2, 3
adds r1, r0, r2
ldrb r1, [r1]
cmp r1, 0xA0
beq _0800B048
_0800B03C:
movs r2, 0x87
lsls r2, 3
adds r1, r0, r2
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
_0800B048:
add sp, 0xC
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800B050: .4byte gMain
thumb_func_end sub_800AF2C
thumb_func_start GetSioMultiSI
GetSioMultiSI: @ 800B054
ldr r0, _0800B060 @ =0x04000128
ldrh r0, [r0]
lsrs r0, 2
movs r1, 0x1
ands r0, r1
bx lr
.align 2, 0
_0800B060: .4byte 0x04000128
thumb_func_end GetSioMultiSI
thumb_func_start IsSioMultiMaster
IsSioMultiMaster: @ 800B064
push {lr}
movs r3, 0
ldr r2, _0800B088 @ =0x04000128
ldrh r1, [r2]
movs r0, 0x8
ands r0, r1
cmp r0, 0
beq _0800B080
ldrh r1, [r2]
movs r0, 0x4
ands r0, r1
cmp r0, 0
bne _0800B080
movs r3, 0x1
_0800B080:
adds r0, r3, 0
pop {r1}
bx r1
.align 2, 0
_0800B088: .4byte 0x04000128
thumb_func_end IsSioMultiMaster
thumb_func_start IsLinkConnectionEstablished
IsLinkConnectionEstablished: @ 800B08C
ldr r0, _0800B098 @ =gUnknown_3003F20
ldr r0, [r0]
lsrs r0, 6
movs r1, 0x1
ands r0, r1
bx lr
.align 2, 0
_0800B098: .4byte gUnknown_3003F20
thumb_func_end IsLinkConnectionEstablished
thumb_func_start SetSuppressLinkErrorMessage
SetSuppressLinkErrorMessage: @ 800B09C
ldr r1, _0800B0A4 @ =gUnknown_3003F38
strb r0, [r1]
bx lr
.align 2, 0
_0800B0A4: .4byte gUnknown_3003F38
thumb_func_end SetSuppressLinkErrorMessage
thumb_func_start HasLinkErrorOccurred
HasLinkErrorOccurred: @ 800B0A8
ldr r0, _0800B0B0 @ =gUnknown_3003EAC
ldrb r0, [r0]
bx lr
.align 2, 0
_0800B0B0: .4byte gUnknown_3003EAC
thumb_func_end HasLinkErrorOccurred
thumb_func_start sub_800B0B4
sub_800B0B4: @ 800B0B4
push {r4-r6,lr}
bl InitLocalLinkPlayer
ldr r1, _0800B100 @ =gUnknown_3003E70
adds r2, r1, 0
adds r2, 0x10
ldr r0, _0800B104 @ =gLocalLinkPlayer
ldm r0!, {r3-r5}
stm r2!, {r3-r5}
ldm r0!, {r3,r4,r6}
stm r2!, {r3,r4,r6}
ldr r0, [r0]
str r0, [r2]
ldr r3, _0800B108 @ =gUnknown_82345C0
adds r2, r1, 0
adds r0, r3, 0
ldm r0!, {r4-r6}
stm r2!, {r4-r6}
ldrh r4, [r0]
strh r4, [r2]
ldrb r0, [r0, 0x2]
strb r0, [r2, 0x2]
adds r0, r1, 0
adds r0, 0x2C
ldm r3!, {r2,r5,r6}
stm r0!, {r2,r5,r6}
ldrh r2, [r3]
strh r2, [r0]
ldrb r2, [r3, 0x2]
strb r2, [r0, 0x2]
ldr r0, _0800B10C @ =gBlockSendBuffer
movs r2, 0x3C
bl memcpy
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0800B100: .4byte gUnknown_3003E70
_0800B104: .4byte gLocalLinkPlayer
_0800B108: .4byte gUnknown_82345C0
_0800B10C: .4byte gBlockSendBuffer
thumb_func_end sub_800B0B4
thumb_func_start sub_800B110
sub_800B110: @ 800B110
push {r4-r6,lr}
lsls r0, 24
lsrs r0, 24
lsls r2, r0, 8
ldr r1, _0800B168 @ =gBlockRecvBuffer
adds r4, r2, r1
lsls r2, r0, 3
subs r2, r0
lsls r2, 2
ldr r0, _0800B16C @ =gLinkPlayers
adds r2, r0
adds r1, r2, 0
adds r0, r4, 0
adds r0, 0x10
ldm r0!, {r3,r5,r6}
stm r1!, {r3,r5,r6}
ldm r0!, {r3,r5,r6}
stm r1!, {r3,r5,r6}
ldr r0, [r0]
str r0, [r1]
adds r0, r2, 0
bl sub_800B284
ldr r5, _0800B170 @ =gUnknown_82345C0
adds r0, r4, 0
adds r1, r5, 0
bl strcmp
cmp r0, 0
bne _0800B15A
adds r0, r4, 0
adds r0, 0x2C
adds r1, r5, 0
bl strcmp
cmp r0, 0
beq _0800B160
_0800B15A:
ldr r0, _0800B174 @ =c2_800ACD4
bl SetMainCallback2
_0800B160:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0800B168: .4byte gBlockRecvBuffer
_0800B16C: .4byte gLinkPlayers
_0800B170: .4byte gUnknown_82345C0
_0800B174: .4byte c2_800ACD4
thumb_func_end sub_800B110
thumb_func_start HandleLinkConnection
HandleLinkConnection: @ 800B178
push {r4,r5,lr}
ldr r0, _0800B1B0 @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0800B1C8
ldr r0, _0800B1B4 @ =gUnknown_3003F84
ldr r1, _0800B1B8 @ =gUnknown_3003F50
ldr r2, _0800B1BC @ =gRecvCmds
bl LinkMain1
ldr r4, _0800B1C0 @ =gUnknown_3003F20
str r0, [r4]
ldr r0, _0800B1C4 @ =gMain + 0x2C
bl LinkMain2
ldr r0, [r4]
movs r1, 0x80
lsls r1, 1
ands r0, r1
cmp r0, 0
beq _0800B1EC
bl sub_8058318
cmp r0, 0x1
bne _0800B1EC
_0800B1AA:
movs r0, 0x1
b _0800B1EE
.align 2, 0
_0800B1B0: .4byte gWirelessCommType
_0800B1B4: .4byte gUnknown_3003F84
_0800B1B8: .4byte gUnknown_3003F50
_0800B1BC: .4byte gRecvCmds
_0800B1C0: .4byte gUnknown_3003F20
_0800B1C4: .4byte gMain + 0x2C
_0800B1C8:
bl sub_80FAE94
adds r4, r0, 0
bl sub_80FAEF0
adds r5, r0, 0
bl sub_8058318
cmp r0, 0x1
bne _0800B1EC
cmp r4, 0x1
beq _0800B1AA
bl sub_80F90DC
cmp r0, 0
bne _0800B1AA
cmp r5, 0
bne _0800B1AA
_0800B1EC:
movs r0, 0
_0800B1EE:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end HandleLinkConnection
thumb_func_start sub_800B1F4
sub_800B1F4: @ 800B1F4
push {lr}
ldr r0, _0800B208 @ =gReceivedRemoteLinkPlayers
ldrb r0, [r0]
cmp r0, 0
bne _0800B204
ldr r1, _0800B20C @ =gWirelessCommType
movs r0, 0x1
strb r0, [r1]
_0800B204:
pop {r0}
bx r0
.align 2, 0
_0800B208: .4byte gReceivedRemoteLinkPlayers
_0800B20C: .4byte gWirelessCommType
thumb_func_end sub_800B1F4
thumb_func_start sub_800B210
sub_800B210: @ 800B210
push {lr}
ldr r0, _0800B224 @ =gReceivedRemoteLinkPlayers
ldrb r1, [r0]
cmp r1, 0
bne _0800B21E
ldr r0, _0800B228 @ =gWirelessCommType
strb r1, [r0]
_0800B21E:
pop {r0}
bx r0
.align 2, 0
_0800B224: .4byte gReceivedRemoteLinkPlayers
_0800B228: .4byte gWirelessCommType
thumb_func_end sub_800B210
thumb_func_start sub_800B22C
sub_800B22C: @ 800B22C
push {lr}
ldr r0, _0800B240 @ =gReceivedRemoteLinkPlayers
ldrb r1, [r0]
cmp r1, 0
bne _0800B23A
ldr r0, _0800B244 @ =gWirelessCommType
strb r1, [r0]
_0800B23A:
pop {r0}
bx r0
.align 2, 0
_0800B240: .4byte gReceivedRemoteLinkPlayers
_0800B244: .4byte gWirelessCommType
thumb_func_end sub_800B22C
thumb_func_start sub_800B248
sub_800B248: @ 800B248
push {lr}
ldr r0, _0800B25C @ =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0800B268
ldr r0, _0800B260 @ =gUnknown_3003FB0
ldr r1, _0800B264 @ =0x00000fbd
adds r0, r1
ldrb r0, [r0]
b _0800B26C
.align 2, 0
_0800B25C: .4byte gWirelessCommType
_0800B260: .4byte gUnknown_3003FB0
_0800B264: .4byte 0x00000fbd
_0800B268:
bl sub_80FC460
_0800B26C:
pop {r1}
bx r1
thumb_func_end sub_800B248
thumb_func_start sub_800B270
sub_800B270: @ 800B270
push {lr}
bl sub_800B248
cmp r0, 0x2
bhi _0800B27E
movs r0, 0
b _0800B280
_0800B27E:
movs r0, 0x1
_0800B280:
pop {r1}
bx r1
thumb_func_end sub_800B270
thumb_func_start sub_800B284
sub_800B284: @ 800B284
push {lr}
ldrb r1, [r0, 0x10]
strb r1, [r0, 0x12]
adds r2, r0, 0
adds r2, 0x8
ldrb r1, [r0, 0x1A]
adds r0, r2, 0
bl ConvertInternationalString
pop {r0}
bx r0
thumb_func_end sub_800B284
thumb_func_start sub_800B29C
sub_800B29C: @ 800B29C
push {lr}
sub sp, 0x4
movs r0, 0xC0
bl DisableInterrupts
ldr r1, _0800B2DC @ =0x04000128
movs r2, 0x80
lsls r2, 6
adds r0, r2, 0
strh r0, [r1]
ldr r0, _0800B2E0 @ =0x0400010e
movs r2, 0
strh r2, [r0]
adds r1, 0xDA
movs r0, 0xC0
strh r0, [r1]
ldr r0, _0800B2E4 @ =0x0400012a
strh r2, [r0]
ldr r2, _0800B2E8 @ =0x04000120
movs r0, 0
movs r1, 0
str r0, [r2]
str r1, [r2, 0x4]
str r0, [sp]
ldr r1, _0800B2EC @ =gUnknown_3003FB0
ldr r2, _0800B2F0 @ =0x050003f0
mov r0, sp
bl CpuSet
add sp, 0x4
pop {r0}
bx r0
.align 2, 0
_0800B2DC: .4byte 0x04000128
_0800B2E0: .4byte 0x0400010e
_0800B2E4: .4byte 0x0400012a
_0800B2E8: .4byte 0x04000120
_0800B2EC: .4byte gUnknown_3003FB0
_0800B2F0: .4byte 0x050003f0
thumb_func_end sub_800B29C
thumb_func_start sub_800B2F4
sub_800B2F4: @ 800B2F4
push {r4,r5,lr}
sub sp, 0x4
movs r0, 0xC0
bl DisableInterrupts
ldr r0, _0800B354 @ =0x04000134
movs r4, 0
strh r4, [r0]
ldr r2, _0800B358 @ =0x04000128
movs r1, 0x80
lsls r1, 6
adds r0, r1, 0
strh r0, [r2]
ldrh r0, [r2]
ldr r3, _0800B35C @ =0x00004003
adds r1, r3, 0
orrs r0, r1
strh r0, [r2]
movs r0, 0x80
bl EnableInterrupts
ldr r0, _0800B360 @ =0x0400012a
strh r4, [r0]
movs r5, 0
str r5, [sp]
ldr r1, _0800B364 @ =gUnknown_3003FB0
ldr r2, _0800B368 @ =0x050003f0
mov r0, sp
bl CpuSet
ldr r0, _0800B36C @ =gUnknown_3000E64
strb r4, [r0]
ldr r0, _0800B370 @ =gUnknown_3000E66
strh r5, [r0]
ldr r0, _0800B374 @ =gUnknown_3000E68
strh r5, [r0]
ldr r0, _0800B378 @ =gUnknown_3000E6A
strb r4, [r0]
ldr r0, _0800B37C @ =gUnknown_3000E6B
strb r4, [r0]
ldr r0, _0800B380 @ =gUnknown_3003FA0
strb r4, [r0]
ldr r0, _0800B384 @ =gUnknown_3004F70
strb r4, [r0]
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0800B354: .4byte 0x04000134
_0800B358: .4byte 0x04000128
_0800B35C: .4byte 0x00004003
_0800B360: .4byte 0x0400012a
_0800B364: .4byte gUnknown_3003FB0
_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
push {lr}
bl sub_800B2F4
bl sub_800B29C
pop {r0}
bx r0
thumb_func_end sub_800B388
thumb_func_start LinkMain1
LinkMain1: @ 800B398
push {r4-r7,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r6, r2, 0
ldr r0, _0800B3B4 @ =gUnknown_3003FB0
ldrb r0, [r0, 0x1]
cmp r0, 0x4
bhi _0800B44A
lsls r0, 2
ldr r1, _0800B3B8 @ =_0800B3BC
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0800B3B4: .4byte gUnknown_3003FB0
_0800B3B8: .4byte _0800B3BC
.align 2, 0
_0800B3BC:
.4byte _0800B3D0
.4byte _0800B3E0
.4byte _0800B3F8
.4byte _0800B434
.4byte _0800B43E
_0800B3D0:
bl sub_800B29C
ldr r1, _0800B3DC @ =gUnknown_3003FB0
movs r0, 0x1
strb r0, [r1, 0x1]
b _0800B44A
.align 2, 0
_0800B3DC: .4byte gUnknown_3003FB0
_0800B3E0:
ldrb r0, [r4]
cmp r0, 0x1
bne _0800B44A
bl sub_800B2F4
ldr r1, _0800B3F4 @ =gUnknown_3003FB0
movs r0, 0x2
strb r0, [r1, 0x1]
b _0800B44A
.align 2, 0
_0800B3F4: .4byte gUnknown_3003FB0
_0800B3F8:
ldrb r1, [r4]
cmp r1, 0x1
beq _0800B408
cmp r1, 0x2
beq _0800B420
bl CheckMasterOrSlave
b _0800B44A
_0800B408:
ldr r2, _0800B41C @ =gUnknown_3003FB0
ldrb r0, [r2]
cmp r0, 0x8
bne _0800B44A
ldrb r0, [r2, 0x3]
cmp r0, 0x1
bls _0800B44A
strb r1, [r2, 0xE]
b _0800B44A
.align 2, 0
_0800B41C: .4byte gUnknown_3003FB0
_0800B420:
ldr r0, _0800B42C @ =gUnknown_3003FB0
movs r1, 0
strb r1, [r0, 0x1]
ldr r0, _0800B430 @ =0x0400012a
strh r1, [r0]
b _0800B44A
.align 2, 0
_0800B42C: .4byte gUnknown_3003FB0
_0800B430: .4byte 0x0400012a
_0800B434:
bl InitTimer
ldr r1, _0800B484 @ =gUnknown_3003FB0
movs r0, 0x4
strb r0, [r1, 0x1]
_0800B43E:
adds r0, r5, 0
bl sub_800B520
adds r0, r6, 0
bl sub_800B608
_0800B44A:
movs r0, 0
strb r0, [r4]
ldr r1, _0800B484 @ =gUnknown_3003FB0
ldrb r2, [r1, 0x2]
ldrb r0, [r1, 0x3]
lsls r0, 2
orrs r2, r0
ldrb r0, [r1]
cmp r0, 0x8
bne _0800B462
movs r0, 0x20
orrs r2, r0
_0800B462:
ldrb r0, [r1, 0xC]
lsls r3, r0, 8
ldrb r0, [r1, 0xF]
lsls r4, r0, 9
ldrb r0, [r1, 0x10]
lsls r5, r0, 12
ldrb r0, [r1, 0x11]
lsls r6, r0, 13
ldrb r0, [r1, 0x12]
lsls r7, r0, 14
ldrb r0, [r1, 0x1]
cmp r0, 0x4
bne _0800B488
movs r0, 0x40
orrs r0, r3
orrs r0, r2
b _0800B48C
.align 2, 0
_0800B484: .4byte gUnknown_3003FB0
_0800B488:
adds r0, r2, 0
orrs r0, r3
_0800B48C:
orrs r0, r4
orrs r0, r5
orrs r0, r6
orrs r0, r7
adds r2, r0, 0
ldrb r3, [r1, 0x13]
cmp r3, 0x1
bne _0800B4A2
movs r0, 0x80
lsls r0, 9
orrs r2, r0
_0800B4A2:
ldrb r0, [r1, 0x2]
cmp r0, 0x3
bls _0800B4AE
movs r0, 0x80
lsls r0, 10
orrs r2, r0
_0800B4AE:
adds r1, r2, 0
cmp r3, 0x2
bne _0800B4BA
movs r0, 0x80
lsls r0, 11
orrs r1, r0
_0800B4BA:
adds r0, r1, 0
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end LinkMain1
thumb_func_start CheckMasterOrSlave
CheckMasterOrSlave: @ 800B4C4
push {lr}
ldr r0, _0800B4E0 @ =0x04000128
ldr r1, [r0]
movs r0, 0xC
ands r1, r0
ldr r2, _0800B4E4 @ =gUnknown_3003FB0
cmp r1, 0x8
bne _0800B4E8
ldrb r0, [r2, 0x2]
cmp r0, 0
bne _0800B4E8
strb r1, [r2]
b _0800B4EC
.align 2, 0
_0800B4E0: .4byte 0x04000128
_0800B4E4: .4byte gUnknown_3003FB0
_0800B4E8:
movs r0, 0
strb r0, [r2]
_0800B4EC:
pop {r0}
bx r0
thumb_func_end CheckMasterOrSlave
thumb_func_start InitTimer
InitTimer: @ 800B4F0
push {lr}
ldr r0, _0800B514 @ =gUnknown_3003FB0
ldrb r0, [r0]
cmp r0, 0
beq _0800B50E
ldr r1, _0800B518 @ =0x0400010c
ldr r2, _0800B51C @ =0x0000ff3b
adds r0, r2, 0
strh r0, [r1]
adds r1, 0x2
movs r0, 0x41
strh r0, [r1]
movs r0, 0x40
bl EnableInterrupts
_0800B50E:
pop {r0}
bx r0
.align 2, 0
_0800B514: .4byte gUnknown_3003FB0
_0800B518: .4byte 0x0400010c
_0800B51C: .4byte 0x0000ff3b
thumb_func_end InitTimer
thumb_func_start sub_800B520
sub_800B520: @ 800B520
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
adds r3, r0, 0
ldr r2, _0800B598 @ =gUnknown_3004F74
ldr r1, _0800B59C @ =0x04000208
ldrh r0, [r1]
strh r0, [r2]
movs r0, 0
strh r0, [r1]
ldr r1, _0800B5A0 @ =gUnknown_3003FB0
ldr r4, _0800B5A4 @ =0x00000339
adds r0, r1, r4
ldrb r4, [r0]
adds r6, r1, 0
cmp r4, 0x31
bhi _0800B5B0
movs r1, 0xCE
lsls r1, 2
adds r0, r6, r1
ldrb r0, [r0]
adds r0, r4, r0
lsls r0, 24
lsrs r0, 24
cmp r0, 0x31
bls _0800B55E
subs r0, 0x32
lsls r0, 24
lsrs r0, 24
_0800B55E:
movs r2, 0
ldr r4, _0800B5A8 @ =gUnknown_3000E66
mov r9, r4
ldr r1, _0800B5AC @ =gUnknown_3003FA0
mov r10, r1
lsls r5, r0, 1
movs r0, 0x18
adds r0, r6
mov r8, r0
mov r12, r2
movs r7, 0x64
_0800B574:
ldrh r0, [r4]
ldrh r1, [r3]
orrs r0, r1
strh r0, [r4]
adds r0, r2, 0
muls r0, r7
adds r0, r5, r0
add r0, r8
strh r1, [r0]
mov r1, r12
strh r1, [r3]
adds r3, 0x2
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x7
bls _0800B574
b _0800B5BC
.align 2, 0
_0800B598: .4byte gUnknown_3004F74
_0800B59C: .4byte 0x04000208
_0800B5A0: .4byte gUnknown_3003FB0
_0800B5A4: .4byte 0x00000339
_0800B5A8: .4byte gUnknown_3000E66
_0800B5AC: .4byte gUnknown_3003FA0
_0800B5B0:
movs r0, 0x1
strb r0, [r6, 0x12]
ldr r2, _0800B5F4 @ =gUnknown_3000E66
mov r9, r2
ldr r4, _0800B5F8 @ =gUnknown_3003FA0
mov r10, r4
_0800B5BC:
mov r1, r9
ldrh r0, [r1]
cmp r0, 0
beq _0800B5D4
ldr r2, _0800B5FC @ =0x00000339
adds r0, r6, r2
ldrb r1, [r0]
adds r1, 0x1
movs r2, 0
strb r1, [r0]
mov r4, r9
strh r2, [r4]
_0800B5D4:
ldr r1, _0800B600 @ =0x04000208
ldr r2, _0800B604 @ =gUnknown_3004F74
ldrh r0, [r2]
strh r0, [r1]
ldr r4, _0800B5FC @ =0x00000339
adds r0, r6, r4
ldrb r0, [r0]
mov r1, r10
strb r0, [r1]
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800B5F4: .4byte gUnknown_3000E66
_0800B5F8: .4byte gUnknown_3003FA0
_0800B5FC: .4byte 0x00000339
_0800B600: .4byte 0x04000208
_0800B604: .4byte gUnknown_3004F74
thumb_func_end sub_800B520
thumb_func_start sub_800B608
sub_800B608: @ 800B608
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
mov r9, r0
ldr r2, _0800B664 @ =gUnknown_3004F74
ldr r1, _0800B668 @ =0x04000208
ldrh r0, [r1]
strh r0, [r2]
movs r0, 0
strh r0, [r1]
ldr r1, _0800B66C @ =gUnknown_3003FB0
ldr r3, _0800B670 @ =0x00000fbd
adds r0, r1, r3
ldrb r0, [r0]
mov r12, r1
cmp r0, 0
bne _0800B674
movs r3, 0
ldrb r0, [r1, 0x3]
cmp r3, r0
bcs _0800B65A
movs r5, 0
adds r6, r0, 0
_0800B63A:
movs r2, 0
lsls r1, r3, 4
adds r4, r3, 0x1
add r1, r9
_0800B642:
lsls r0, r2, 1
adds r0, r1
strh r5, [r0]
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x7
bls _0800B642
lsls r0, r4, 24
lsrs r3, r0, 24
cmp r3, r6
bcc _0800B63A
_0800B65A:
movs r0, 0x1
mov r7, r12
strb r0, [r7, 0xC]
b _0800B6F0
.align 2, 0
_0800B664: .4byte gUnknown_3004F74
_0800B668: .4byte 0x04000208
_0800B66C: .4byte gUnknown_3003FB0
_0800B670: .4byte 0x00000fbd
_0800B674:
movs r3, 0
mov r0, r12
ldrb r1, [r0, 0x3]
cmp r3, r1
bcs _0800B6CA
ldr r0, _0800B708 @ =0x00000fbc
add r0, r12
ldrb r0, [r0]
lsls r6, r0, 1
movs r2, 0xCF
lsls r2, 2
add r2, r12
mov r8, r2
mov r10, r1
_0800B690:
movs r2, 0
lsls r1, r3, 4
adds r4, r3, 0x1
lsls r0, r3, 1
mov r7, r9
adds r5, r1, r7
adds r0, r3
lsls r0, 3
adds r0, r3
lsls r3, r0, 5
_0800B6A4:
lsls r1, r2, 1
adds r1, r5
movs r7, 0x64
adds r0, r2, 0
muls r0, r7
adds r0, r6, r0
adds r0, r3
add r0, r8
ldrh r0, [r0]
strh r0, [r1]
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x7
bls _0800B6A4
lsls r0, r4, 24
lsrs r3, r0, 24
cmp r3, r10
bcc _0800B690
_0800B6CA:
mov r2, r12
ldr r0, _0800B70C @ =0x00000fbd
adds r1, r2, r0
ldrb r0, [r1]
subs r0, 0x1
movs r3, 0
strb r0, [r1]
ldr r1, _0800B708 @ =0x00000fbc
adds r2, r1
ldrb r0, [r2]
adds r0, 0x1
strb r0, [r2]
lsls r0, 24
lsrs r0, 24
cmp r0, 0x31
bls _0800B6EC
strb r3, [r2]
_0800B6EC:
mov r2, r12
strb r3, [r2, 0xC]
_0800B6F0:
ldr r1, _0800B710 @ =0x04000208
ldr r3, _0800B714 @ =gUnknown_3004F74
ldrh r0, [r3]
strh r0, [r1]
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800B708: .4byte 0x00000fbc
_0800B70C: .4byte 0x00000fbd
_0800B710: .4byte 0x04000208
_0800B714: .4byte gUnknown_3004F74
thumb_func_end sub_800B608
thumb_func_start LinkVSync
LinkVSync: @ 800B718
push {r4,lr}
ldr r3, _0800B740 @ =gUnknown_3003FB0
ldrb r4, [r3]
cmp r4, 0
beq _0800B754
ldrb r0, [r3, 0x1]
cmp r0, 0x2
beq _0800B74E
cmp r0, 0x4
bne _0800B77E
movs r0, 0xD
ldrsb r0, [r3, r0]
cmp r0, 0x8
bgt _0800B744
ldrb r0, [r3, 0x10]
cmp r0, 0x1
beq _0800B74E
movs r0, 0x1
strb r0, [r3, 0x13]
b _0800B77E
.align 2, 0
_0800B740: .4byte gUnknown_3003FB0
_0800B744:
ldrb r0, [r3, 0x13]
cmp r0, 0x1
beq _0800B77E
movs r0, 0
strb r0, [r3, 0xD]
_0800B74E:
bl sub_800B820
b _0800B77E
_0800B754:
ldrb r2, [r3, 0x1]
cmp r2, 0x4
beq _0800B75E
cmp r2, 0x2
bne _0800B77E
_0800B75E:
ldr r1, _0800B784 @ =gUnknown_3000E64
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
lsls r0, 24
lsrs r0, 24
cmp r0, 0xA
bls _0800B77E
cmp r2, 0x4
bne _0800B776
movs r0, 0x2
strb r0, [r3, 0x13]
_0800B776:
cmp r2, 0x2
bne _0800B77E
strb r4, [r3, 0x3]
strb r4, [r3, 0xF]
_0800B77E:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800B784: .4byte gUnknown_3000E64
thumb_func_end LinkVSync
thumb_func_start Timer3Intr
Timer3Intr: @ 800B788
push {lr}
bl StopTimer
bl sub_800B820
pop {r0}
bx r0
thumb_func_end Timer3Intr
thumb_func_start SerialCB
SerialCB: @ 800B798
push {r4,lr}
ldr r4, _0800B7C4 @ =gUnknown_3003FB0
ldr r0, _0800B7C8 @ =0x04000128
ldr r1, [r0]
lsls r0, r1, 26
lsrs r0, 30
strb r0, [r4, 0x2]
ldrb r0, [r4, 0x1]
cmp r0, 0x2
beq _0800B7CC
cmp r0, 0x4
bne _0800B7EA
lsls r0, r1, 25
lsrs r0, 31
strb r0, [r4, 0x10]
bl DoRecv
bl DoSend
bl SendRecvDone
b _0800B7EA
.align 2, 0
_0800B7C4: .4byte gUnknown_3003FB0
_0800B7C8: .4byte 0x04000128
_0800B7CC:
bl DoHandshake
lsls r0, 24
cmp r0, 0
beq _0800B7EA
ldrb r0, [r4]
cmp r0, 0
beq _0800B7E6
movs r0, 0x3
strb r0, [r4, 0x1]
movs r0, 0x8
strb r0, [r4, 0xD]
b _0800B7EA
_0800B7E6:
movs r0, 0x4
strb r0, [r4, 0x1]
_0800B7EA:
ldr r3, _0800B810 @ =gUnknown_3003FB0
ldrb r0, [r3, 0xD]
adds r0, 0x1
movs r2, 0
strb r0, [r3, 0xD]
ldr r1, _0800B814 @ =gUnknown_3000E64
strb r2, [r1]
lsls r0, 24
asrs r0, 24
cmp r0, 0x8
bne _0800B80A
ldr r0, _0800B818 @ =gUnknown_3004F70
ldr r2, _0800B81C @ =0x00000fbd
adds r1, r3, r2
ldrb r1, [r1]
strb r1, [r0]
_0800B80A:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800B810: .4byte gUnknown_3003FB0
_0800B814: .4byte gUnknown_3000E64
_0800B818: .4byte gUnknown_3004F70
_0800B81C: .4byte 0x00000fbd
thumb_func_end SerialCB
thumb_func_start sub_800B820
sub_800B820: @ 800B820
ldr r0, _0800B82C @ =0x04000128
ldrh r1, [r0]
movs r2, 0x80
orrs r1, r2
strh r1, [r0]
bx lr
.align 2, 0
_0800B82C: .4byte 0x04000128
thumb_func_end sub_800B820
thumb_func_start DoHandshake
DoHandshake: @ 800B830
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
movs r5, 0
ldr r6, _0800B84C @ =0x0000ffff
ldr r0, _0800B850 @ =gUnknown_3003FB0
ldrb r1, [r0, 0xE]
adds r7, r0, 0
cmp r1, 0x1
bne _0800B85C
ldr r1, _0800B854 @ =0x0400012a
ldr r2, _0800B858 @ =0x00008fff
b _0800B860
.align 2, 0
_0800B84C: .4byte 0x0000ffff
_0800B850: .4byte gUnknown_3003FB0
_0800B854: .4byte 0x0400012a
_0800B858: .4byte 0x00008fff
_0800B85C:
ldr r1, _0800B8B4 @ =0x0400012a
ldr r2, _0800B8B8 @ =0x0000b9a0
_0800B860:
adds r0, r2, 0
strh r0, [r1]
ldr r2, _0800B8BC @ =gSioMlt_Recv
ldr r3, _0800B8C0 @ =0x04000120
ldr r0, [r3]
ldr r1, [r3, 0x4]
str r0, [r2]
str r1, [r2, 0x4]
movs r0, 0
movs r1, 0
str r0, [r3]
str r1, [r3, 0x4]
strb r0, [r2, 0xA]
movs r4, 0
ldr r0, _0800B8C4 @ =gUnknown_3000E6B
mov r9, r0
mov r8, r2
ldr r2, _0800B8C8 @ =0x00008fff
ldr r1, _0800B8CC @ =0x0000ffff
mov r12, r1
_0800B888:
lsls r0, r4, 1
add r0, r8
ldrh r3, [r0]
movs r0, 0x4
negs r0, r0
ands r0, r3
ldr r1, _0800B8B8 @ =0x0000b9a0
cmp r0, r1
beq _0800B8A0
adds r0, r3, 0
cmp r0, r2
bne _0800B8D0
_0800B8A0:
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
adds r0, r3, 0
cmp r6, r0
bls _0800B8D8
cmp r0, 0
beq _0800B8D8
adds r6, r3, 0
b _0800B8D8
.align 2, 0
_0800B8B4: .4byte 0x0400012a
_0800B8B8: .4byte 0x0000b9a0
_0800B8BC: .4byte gSioMlt_Recv
_0800B8C0: .4byte 0x04000120
_0800B8C4: .4byte gUnknown_3000E6B
_0800B8C8: .4byte 0x00008fff
_0800B8CC: .4byte 0x0000ffff
_0800B8D0:
cmp r0, r12
beq _0800B8E2
movs r5, 0
b _0800B8E2
_0800B8D8:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x3
bls _0800B888
_0800B8E2:
strb r5, [r7, 0x3]
adds r0, r5, 0
cmp r0, 0x1
bls _0800B912
mov r2, r9
ldrb r2, [r2]
cmp r0, r2
bne _0800B904
ldrh r1, [r7, 0x4]
ldr r0, _0800B900 @ =0x00008fff
cmp r1, r0
bne _0800B904
movs r0, 0x1
b _0800B91E
.align 2, 0
_0800B900: .4byte 0x00008fff
_0800B904:
ldrb r0, [r7, 0x3]
cmp r0, 0x1
bls _0800B912
movs r0, 0x3
ands r6, r0
adds r0, r6, 0x1
b _0800B914
_0800B912:
movs r0, 0
_0800B914:
strb r0, [r7, 0xF]
ldrb r0, [r7, 0x3]
mov r1, r9
strb r0, [r1]
movs r0, 0
_0800B91E:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end DoHandshake
thumb_func_start DoRecv
DoRecv: @ 800B92C
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x8
ldr r0, _0800B984 @ =0x04000120
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
ldr r0, _0800B988 @ =gUnknown_3003FB0
ldrb r1, [r0, 0x16]
adds r6, r0, 0
cmp r1, 0
bne _0800B990
movs r4, 0
ldr r7, _0800B98C @ =gUnknown_3000E6A
ldrb r0, [r6, 0x3]
cmp r4, r0
bcs _0800B97A
adds r5, r6, 0
ldrh r1, [r6, 0x14]
adds r3, r7, 0
adds r2, r6, 0
_0800B95A:
lsls r0, r4, 1
add r0, sp
ldrh r0, [r0]
cmp r1, r0
beq _0800B96E
ldrb r0, [r3]
cmp r0, 0
beq _0800B96E
movs r0, 0x1
strb r0, [r5, 0x11]
_0800B96E:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
ldrb r0, [r2, 0x3]
cmp r4, r0
bcc _0800B95A
_0800B97A:
movs r0, 0
strh r0, [r6, 0x14]
movs r0, 0x1
strb r0, [r7]
b _0800BA30
.align 2, 0
_0800B984: .4byte 0x04000120
_0800B988: .4byte gUnknown_3003FB0
_0800B98C: .4byte gUnknown_3000E6A
_0800B990:
ldr r2, _0800BA00 @ =0x00000fbc
adds r1, r6, r2
adds r2, 0x1
adds r0, r6, r2
ldrb r2, [r0]
ldrb r1, [r1]
adds r0, r2, r1
lsls r0, 24
lsrs r0, 24
cmp r0, 0x31
bls _0800B9AC
subs r0, 0x32
lsls r0, 24
lsrs r0, 24
_0800B9AC:
cmp r2, 0x31
bhi _0800BA08
movs r4, 0
ldrb r1, [r6, 0x3]
cmp r4, r1
bcs _0800BA0C
adds r5, r6, 0
ldr r7, _0800BA04 @ =gUnknown_3000E68
lsls r0, 1
mov r12, r0
movs r2, 0xCF
lsls r2, 2
adds r2, r6
mov r8, r2
_0800B9C8:
lsls r1, r4, 1
mov r2, sp
adds r0, r2, r1
ldrh r3, [r0]
ldrh r2, [r5, 0x14]
adds r0, r3, r2
strh r0, [r5, 0x14]
ldrh r0, [r7]
orrs r0, r3
strh r0, [r7]
ldrb r2, [r5, 0x17]
movs r0, 0x64
muls r0, r2
add r0, r12
adds r1, r4
lsls r1, 3
adds r1, r4
lsls r1, 5
adds r0, r1
add r0, r8
strh r3, [r0]
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
ldrb r0, [r5, 0x3]
cmp r4, r0
bcc _0800B9C8
b _0800BA0C
.align 2, 0
_0800BA00: .4byte 0x00000fbc
_0800BA04: .4byte gUnknown_3000E68
_0800BA08:
movs r0, 0x2
strb r0, [r6, 0x12]
_0800BA0C:
ldrb r0, [r6, 0x17]
adds r0, 0x1
strb r0, [r6, 0x17]
lsls r0, 24
lsrs r0, 24
cmp r0, 0x8
bne _0800BA30
ldr r2, _0800BA3C @ =gUnknown_3000E68
ldrh r0, [r2]
cmp r0, 0
beq _0800BA30
ldr r1, _0800BA40 @ =0x00000fbd
adds r0, r6, r1
ldrb r1, [r0]
adds r1, 0x1
strb r1, [r0]
movs r0, 0
strh r0, [r2]
_0800BA30:
add sp, 0x8
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800BA3C: .4byte gUnknown_3000E68
_0800BA40: .4byte 0x00000fbd
thumb_func_end DoRecv
thumb_func_start DoSend
DoSend: @ 800BA44
push {r4,lr}
ldr r0, _0800BA80 @ =gUnknown_3003FB0
ldrb r1, [r0, 0x16]
adds r4, r0, 0
cmp r1, 0x8
bne _0800BA96
ldr r1, _0800BA84 @ =0x0400012a
ldrh r0, [r4, 0x14]
strh r0, [r1]
ldr r1, _0800BA88 @ =gUnknown_3000E65
ldrb r2, [r1]
cmp r2, 0
bne _0800BA90
ldr r0, _0800BA8C @ =0x00000339
adds r1, r4, r0
ldrb r0, [r1]
subs r0, 0x1
strb r0, [r1]
movs r0, 0xCE
lsls r0, 2
adds r1, r4, r0
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
lsls r0, 24
lsrs r0, 24
cmp r0, 0x31
bls _0800BAEC
strb r2, [r1]
b _0800BAEC
.align 2, 0
_0800BA80: .4byte gUnknown_3003FB0
_0800BA84: .4byte 0x0400012a
_0800BA88: .4byte gUnknown_3000E65
_0800BA8C: .4byte 0x00000339
_0800BA90:
movs r0, 0
strb r0, [r1]
b _0800BAEC
_0800BA96:
ldr r1, _0800BABC @ =gUnknown_3000E65
ldrb r0, [r1]
cmp r0, 0
bne _0800BAB2
ldr r2, _0800BAC0 @ =0x00000339
adds r0, r4, r2
ldrb r0, [r0]
cmp r0, 0
bne _0800BAAC
movs r0, 0x1
strb r0, [r1]
_0800BAAC:
ldrb r0, [r1]
cmp r0, 0
beq _0800BAC8
_0800BAB2:
ldr r1, _0800BAC4 @ =0x0400012a
movs r0, 0
strh r0, [r1]
b _0800BAE6
.align 2, 0
_0800BABC: .4byte gUnknown_3000E65
_0800BAC0: .4byte 0x00000339
_0800BAC4: .4byte 0x0400012a
_0800BAC8:
ldr r3, _0800BAF4 @ =0x0400012a
movs r1, 0xCE
lsls r1, 2
adds r0, r4, r1
ldrb r0, [r0]
lsls r0, 1
ldrb r2, [r4, 0x16]
movs r1, 0x64
muls r1, r2
adds r0, r1
adds r1, r4, 0
adds r1, 0x18
adds r0, r1
ldrh r0, [r0]
strh r0, [r3]
_0800BAE6:
ldrb r0, [r4, 0x16]
adds r0, 0x1
strb r0, [r4, 0x16]
_0800BAEC:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800BAF4: .4byte 0x0400012a
thumb_func_end DoSend
thumb_func_start StopTimer
StopTimer: @ 800BAF8
push {lr}
ldr r0, _0800BB18 @ =gUnknown_3003FB0
ldrb r0, [r0]
cmp r0, 0
beq _0800BB14
ldr r2, _0800BB1C @ =0x0400010e
ldrh r1, [r2]
ldr r0, _0800BB20 @ =0x0000ff7f
ands r0, r1
strh r0, [r2]
ldr r1, _0800BB24 @ =0x0400010c
ldr r2, _0800BB28 @ =0x0000ff3b
adds r0, r2, 0
strh r0, [r1]
_0800BB14:
pop {r0}
bx r0
.align 2, 0
_0800BB18: .4byte gUnknown_3003FB0
_0800BB1C: .4byte 0x0400010e
_0800BB20: .4byte 0x0000ff7f
_0800BB24: .4byte 0x0400010c
_0800BB28: .4byte 0x0000ff3b
thumb_func_end StopTimer
thumb_func_start SendRecvDone
SendRecvDone: @ 800BB2C
push {lr}
ldr r1, _0800BB40 @ =gUnknown_3003FB0
ldrb r0, [r1, 0x17]
cmp r0, 0x8
bne _0800BB44
movs r0, 0
strb r0, [r1, 0x16]
strb r0, [r1, 0x17]
b _0800BB54
.align 2, 0
_0800BB40: .4byte gUnknown_3003FB0
_0800BB44:
ldrb r0, [r1]
cmp r0, 0
beq _0800BB54
ldr r0, _0800BB58 @ =0x0400010e
ldrh r1, [r0]
movs r2, 0x80
orrs r1, r2
strh r1, [r0]
_0800BB54:
pop {r0}
bx r0
.align 2, 0
_0800BB58: .4byte 0x0400010e
thumb_func_end SendRecvDone
thumb_func_start ResetSendBuffer
ResetSendBuffer: @ 800BB5C
push {r4-r6,lr}
ldr r1, _0800BBA4 @ =gUnknown_3003FB0
ldr r2, _0800BBA8 @ =0x00000339
adds r0, r1, r2
movs r2, 0
strb r2, [r0]
movs r3, 0xCE
lsls r3, 2
adds r0, r1, r3
strb r2, [r0]
movs r0, 0
movs r6, 0x64
adds r5, r1, 0
adds r5, 0x18
ldr r4, _0800BBAC @ =0x0000efff
_0800BB7A:
movs r2, 0
adds r1, r0, 0x1
adds r3, r0, 0
muls r3, r6
_0800BB82:
lsls r0, r2, 1
adds r0, r3
adds r0, r5
strh r4, [r0]
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x31
bls _0800BB82
lsls r0, r1, 24
lsrs r0, 24
cmp r0, 0x7
bls _0800BB7A
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0800BBA4: .4byte gUnknown_3003FB0
_0800BBA8: .4byte 0x00000339
_0800BBAC: .4byte 0x0000efff
thumb_func_end ResetSendBuffer
thumb_func_start ResetRecvBuffer
ResetRecvBuffer: @ 800BBB0
push {r4-r7,lr}
ldr r1, _0800BC10 @ =gUnknown_3003FB0
ldr r2, _0800BC14 @ =0x00000fbd
adds r0, r1, r2
movs r2, 0
strb r2, [r0]
ldr r3, _0800BC18 @ =0x00000fbc
adds r0, r1, r3
strb r2, [r0]
movs r0, 0x64
mov r12, r0
movs r3, 0xCF
lsls r3, 2
adds r7, r1, r3
ldr r6, _0800BC1C @ =0x0000efff
_0800BBCE:
movs r3, 0
lsls r0, r2, 1
adds r5, r2, 0x1
adds r0, r2
lsls r0, 3
adds r0, r2
lsls r4, r0, 5
_0800BBDC:
movs r2, 0
adds r1, r3, 0x1
mov r0, r12
muls r0, r3
adds r3, r0, 0
_0800BBE6:
lsls r0, r2, 1
adds r0, r3
adds r0, r4
adds r0, r7
strh r6, [r0]
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x31
bls _0800BBE6
lsls r0, r1, 24
lsrs r3, r0, 24
cmp r3, 0x7
bls _0800BBDC
lsls r0, r5, 24
lsrs r2, r0, 24
cmp r2, 0x3
bls _0800BBCE
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0800BC10: .4byte gUnknown_3003FB0
_0800BC14: .4byte 0x00000fbd
_0800BC18: .4byte 0x00000fbc
_0800BC1C: .4byte 0x0000efff
thumb_func_end ResetRecvBuffer
.align 2, 0 @ Don't pad with nop.