Files
2019-09-27 01:42:56 -04:00

5553 lines
93 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.text
.syntax unified
thumb_func_start IsWirelessAdapterConnected
IsWirelessAdapterConnected: @ 0x08008F68
push {lr}
bl sub_0800AF5C
bl sub_0800E1C4
bl sub_0800B97C
ldr r1, _08008F8C
cmp r0, r1
beq _08008F90
bl sub_0800AF78
bl CloseLink
bl RestoreSerialTimer3IntrHandlers
movs r0, #0
b _08008F9A
.align 2, 0
_08008F8C: .4byte 0x00008001
_08008F90:
bl rfu_REQ_stopMode
bl rfu_waitREQComplete
movs r0, #1
_08008F9A:
pop {r1}
bx r1
.align 2, 0
thumb_func_end IsWirelessAdapterConnected
thumb_func_start Task_DestroySelf
Task_DestroySelf: @ 0x08008FA0
push {lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
bl DestroyTask
pop {r0}
bx r0
.align 2, 0
thumb_func_end Task_DestroySelf
thumb_func_start InitLinkTestBG
InitLinkTestBG: @ 0x08008FB0
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r5, r0, #0
ldr r4, [sp, #0x18]
lsls r5, r5, #0x18
lsrs r5, r5, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
mov r8, r1
lsls r2, r2, #0x18
lsrs r6, r2, #0x18
lsls r3, r3, #0x18
lsrs r7, r3, #0x18
lsls r4, r4, #0x10
lsrs r4, r4, #0x10
ldr r0, _0800900C
lsls r1, r5, #4
movs r2, #0x20
bl LoadPalette
ldr r3, _08009010
ldr r0, _08009014
str r0, [r3]
lsls r2, r7, #0xe
lsls r0, r4, #5
movs r1, #0xc0
lsls r1, r1, #0x13
adds r0, r0, r1
adds r2, r2, r0
str r2, [r3, #4]
ldr r0, _08009018
str r0, [r3, #8]
ldr r0, [r3, #8]
ldr r0, _0800901C
str r6, [r0]
str r5, [r0, #4]
str r4, [r0, #8]
mov r0, r8
cmp r0, #2
beq _0800903A
cmp r0, #2
bgt _08009020
cmp r0, #1
beq _08009028
b _0800905C
.align 2, 0
_0800900C: .4byte 0x082BFB6C
_08009010: .4byte 0x040000D4
_08009014: .4byte 0x082BFB8C
_08009018: .4byte 0x80000110
_0800901C: .4byte 0x030031D0
_08009020:
mov r0, r8
cmp r0, #3
beq _0800904C
b _0800905C
_08009028:
lsls r1, r6, #8
movs r0, #1
orrs r1, r0
lsls r0, r7, #2
orrs r1, r0
movs r0, #0xa
bl SetGpuReg
b _0800905C
_0800903A:
lsls r1, r6, #8
movs r0, #1
orrs r1, r0
lsls r0, r7, #2
orrs r1, r0
movs r0, #0xc
bl SetGpuReg
b _0800905C
_0800904C:
lsls r1, r6, #8
movs r0, #1
orrs r1, r0
lsls r0, r7, #2
orrs r1, r0
movs r0, #0xe
bl SetGpuReg
_0800905C:
mov r0, r8
lsls r4, r0, #2
adds r0, r4, #0
adds r0, #0x10
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0
bl SetGpuReg
adds r4, #0x12
lsls r4, r4, #0x18
lsrs r4, r4, #0x18
adds r0, r4, #0
movs r1, #0
bl SetGpuReg
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_end InitLinkTestBG
thumb_func_start sub_08009088
sub_08009088: @ 0x08009088
push {r4, r5, r6, lr}
mov r6, r8
push {r6}
mov r8, r0
adds r6, r1, #0
adds r4, r2, #0
adds r5, r3, #0
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
mov r8, r0
lsls r6, r6, #0x18
lsrs r6, r6, #0x18
lsls r4, r4, #0x18
lsrs r4, r4, #0x18
lsls r5, r5, #0x18
lsrs r5, r5, #0x18
ldr r0, _080090F4
mov r2, r8
lsls r1, r2, #4
movs r2, #0x20
bl LoadPalette
ldr r2, _080090F8
ldr r0, _080090FC
str r0, [r2]
lsls r0, r5, #0xe
movs r1, #0xc0
lsls r1, r1, #0x13
adds r0, r0, r1
str r0, [r2, #4]
ldr r0, _08009100
str r0, [r2, #8]
ldr r0, [r2, #8]
ldr r0, _08009104
str r4, [r0]
mov r1, r8
str r1, [r0, #4]
movs r1, #0
str r1, [r0, #8]
ldr r0, _08009108
adds r6, r6, r0
ldrb r0, [r6]
lsls r4, r4, #8
lsls r5, r5, #2
orrs r4, r5
adds r1, r4, #0
bl SetGpuReg
pop {r3}
mov r8, r3
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_080090F4: .4byte 0x082BFB6C
_080090F8: .4byte 0x040000D4
_080090FC: .4byte 0x082BFB8C
_08009100: .4byte 0x80000110
_08009104: .4byte 0x030031D0
_08009108: .4byte 0x082BFF20
thumb_func_end sub_08009088
thumb_func_start LinkTestScreen
LinkTestScreen: @ 0x0800910C
push {r4, lr}
sub sp, #4
bl ResetSpriteData
bl FreeAllSpritePalettes
bl ResetTasks
ldr r0, _080091A0
bl SetVBlankCallback
bl ResetBlockSend
ldr r1, _080091A4
ldr r2, _080091A8
adds r0, r2, #0
strh r0, [r1]
bl OpenLink
ldr r0, _080091AC
ldrh r0, [r0, #0x24]
bl SeedRng
movs r4, #0
_0800913C:
bl Random
ldr r1, _080091B0
ldr r1, [r1]
adds r1, #0xa
adds r1, r1, r4
strb r0, [r1]
adds r4, #1
cmp r4, #3
ble _0800913C
movs r4, #0
str r4, [sp]
movs r0, #0
movs r1, #2
movs r2, #4
movs r3, #0
bl InitLinkTestBG
movs r1, #0xaa
lsls r1, r1, #5
movs r0, #0
bl SetGpuReg
ldr r0, _080091B4
movs r1, #0
bl CreateTask
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
ldr r0, _080091B8
str r4, [r0]
bl InitLocalLinkPlayer
ldr r0, _080091BC
movs r1, #0
bl CreateTask
ldr r0, _080091C0
bl SetMainCallback2
add sp, #4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080091A0: .4byte 0x08009259
_080091A4: .4byte 0x0202267E
_080091A8: .4byte 0x00001111
_080091AC: .4byte 0x03002360
_080091B0: .4byte 0x03005AF0
_080091B4: .4byte 0x08008FA1
_080091B8: .4byte 0x03000D60
_080091BC: .4byte 0x0800A415
_080091C0: .4byte 0x08009559
thumb_func_end LinkTestScreen
thumb_func_start SetLocalLinkPlayerId
SetLocalLinkPlayerId: @ 0x080091C4
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r1, _080091D0
strh r0, [r1, #0x18]
bx lr
.align 2, 0
_080091D0: .4byte 0x02022684
thumb_func_end SetLocalLinkPlayerId
thumb_func_start InitLocalLinkPlayer
InitLocalLinkPlayer: @ 0x080091D4
push {r4, r5, lr}
ldr r5, _08009240
ldr r4, _08009244
ldr r1, [r4]
ldrb r2, [r1, #0xa]
ldrb r0, [r1, #0xb]
lsls r0, r0, #8
orrs r2, r0
ldrb r0, [r1, #0xc]
lsls r0, r0, #0x10
orrs r2, r0
ldrb r0, [r1, #0xd]
lsls r0, r0, #0x18
orrs r2, r0
str r2, [r5, #4]
adds r0, r5, #0
adds r0, #8
bl StringCopy
ldr r0, [r4]
ldrb r0, [r0, #8]
strb r0, [r5, #0x13]
ldr r0, _08009248
ldrh r0, [r0]
str r0, [r5, #0x14]
ldr r0, _0800924C
ldrb r0, [r0]
strh r0, [r5, #0x1a]
ldr r0, _08009250
ldrb r0, [r0]
movs r2, #0x80
lsls r2, r2, #7
adds r1, r2, #0
adds r0, r0, r1
strh r0, [r5]
movs r0, #0x80
lsls r0, r0, #8
strh r0, [r5, #2]
bl IsNationalPokedexEnabled
strb r0, [r5, #0x10]
ldr r0, _08009254
bl FlagGet
lsls r0, r0, #0x18
cmp r0, #0
beq _0800923A
ldrb r0, [r5, #0x10]
movs r1, #0x10
orrs r0, r1
strb r0, [r5, #0x10]
_0800923A:
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_08009240: .4byte 0x02022684
_08009244: .4byte 0x03005AF0
_08009248: .4byte 0x0202267E
_0800924C: .4byte 0x0829BDA5
_08009250: .4byte 0x0829BDA4
_08009254: .4byte 0x0000087F
thumb_func_end InitLocalLinkPlayer
thumb_func_start sub_08009258
sub_08009258: @ 0x08009258
push {lr}
bl LoadOam
bl ProcessSpriteCopyRequests
bl TransferPlttBuffer
pop {r0}
bx r0
.align 2, 0
thumb_func_end sub_08009258
thumb_func_start InitLink
InitLink: @ 0x0800926C
push {lr}
ldr r3, _0800928C
ldr r1, _08009290
ldr r2, _08009294
adds r0, r1, #0
adds r0, #0xe
_08009278:
strh r2, [r0]
subs r0, #2
cmp r0, r1
bge _08009278
movs r0, #1
strb r0, [r3]
bl EnableSerial
pop {r0}
bx r0
.align 2, 0
_0800928C: .4byte 0x0202267C
_08009290: .4byte 0x030031B0
_08009294: .4byte 0x0000EFFF
thumb_func_end InitLink
thumb_func_start Task_TriggerHandshake
Task_TriggerHandshake: @ 0x08009298
push {lr}
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
ldr r0, _080092C8
lsls r1, r2, #2
adds r1, r1, r2
lsls r1, r1, #3
adds r1, r1, r0
ldrh r0, [r1, #8]
adds r0, #1
strh r0, [r1, #8]
lsls r0, r0, #0x10
asrs r0, r0, #0x10
cmp r0, #5
bne _080092C2
ldr r1, _080092CC
movs r0, #1
strb r0, [r1]
adds r0, r2, #0
bl DestroyTask
_080092C2:
pop {r0}
bx r0
.align 2, 0
_080092C8: .4byte 0x03005B60
_080092CC: .4byte 0x030031E4
thumb_func_end Task_TriggerHandshake
thumb_func_start OpenLink
OpenLink: @ 0x080092D0
push {r4, r5, r6, lr}
ldr r0, _08009318
ldrb r4, [r0]
cmp r4, #0
bne _08009344
bl ResetSerial
bl InitLink
ldr r1, _0800931C
ldr r0, _08009320
str r0, [r1]
ldr r0, _08009324
strb r4, [r0]
ldr r0, _08009328
strb r4, [r0]
ldr r0, _0800932C
strb r4, [r0]
bl ResetBlockReceivedFlags
bl ResetBlockSend
ldr r0, _08009330
str r4, [r0]
ldr r0, _08009334
strb r4, [r0]
ldr r0, _08009338
strb r4, [r0]
ldr r0, _0800933C
strh r4, [r0]
ldr r0, _08009340
movs r1, #2
bl CreateTask
b _08009348
.align 2, 0
_08009318: .4byte 0x0300319C
_0800931C: .4byte 0x030031E0
_08009320: .4byte 0x0800A3E9
_08009324: .4byte 0x030027E8
_08009328: .4byte 0x0300310C
_0800932C: .4byte 0x03003198
_08009330: .4byte 0x03000D54
_08009334: .4byte 0x03003188
_08009338: .4byte 0x03003184
_0800933C: .4byte 0x03003194
_08009340: .4byte 0x08009299
_08009344:
bl sub_0800E1C4
_08009348:
ldr r1, _08009374
movs r0, #0
strb r0, [r1]
movs r1, #0
ldr r6, _08009378
movs r2, #0
movs r5, #1
ldr r4, _0800937C
ldr r3, _08009380
_0800935A:
adds r0, r1, r6
strb r5, [r0]
adds r0, r1, r4
strb r2, [r0]
adds r0, r1, r3
strb r2, [r0]
adds r1, #1
cmp r1, #3
ble _0800935A
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08009374: .4byte 0x030031C4
_08009378: .4byte 0x03003118
_0800937C: .4byte 0x03003190
_08009380: .4byte 0x0300318C
thumb_func_end OpenLink
thumb_func_start CloseLink
CloseLink: @ 0x08009384
push {r4, lr}
ldr r0, _080093A8
movs r4, #0
strb r4, [r0]
ldr r0, _080093AC
ldrb r0, [r0]
cmp r0, #0
beq _08009398
bl sub_0800E894
_08009398:
ldr r0, _080093B0
strb r4, [r0]
bl DisableSerial
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080093A8: .4byte 0x030031C4
_080093AC: .4byte 0x0300319C
_080093B0: .4byte 0x0202267C
thumb_func_end CloseLink
thumb_func_start TestBlockTransfer
TestBlockTransfer: @ 0x080093B4
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
ldr r5, _08009478
ldr r4, _0800947C
ldrb r0, [r5]
ldrh r1, [r4]
cmp r0, r1
beq _080093D8
ldrh r0, [r4]
movs r1, #2
movs r2, #3
movs r3, #2
bl LinkTest_prnthex
ldrh r0, [r4]
strb r0, [r5]
_080093D8:
movs r5, #0
ldr r7, _08009480
_080093DC:
ldr r0, _08009484
adds r6, r5, r0
lsls r0, r5, #1
adds r0, r0, r5
lsls r0, r0, #2
adds r4, r0, r7
ldrb r0, [r6]
ldrh r1, [r4]
cmp r0, r1
beq _08009404
ldrh r0, [r4]
adds r2, r5, #4
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
movs r1, #2
movs r3, #2
bl LinkTest_prnthex
ldrh r0, [r4]
strb r0, [r6]
_08009404:
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #3
bls _080093DC
bl GetBlockReceivedStatus
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
cmp r7, #0xf
bne _0800946A
movs r5, #0
ldr r0, _08009480
mov sb, r0
ldr r1, _08009488
mov r8, r1
_08009424:
adds r0, r7, #0
asrs r0, r5
movs r1, #1
ands r0, r1
cmp r0, #0
beq _08009460
lsls r0, r5, #8
ldr r1, _0800948C
adds r0, r0, r1
lsls r4, r5, #1
adds r1, r4, r5
lsls r1, r1, #2
add r1, sb
ldrh r1, [r1, #2]
bl LinkTestCalcBlockChecksum
ldr r1, _08009490
adds r4, r4, r1
movs r6, #0
strh r0, [r4]
adds r0, r5, #0
bl ResetBlockReceivedFlag
ldrh r0, [r4]
cmp r0, r8
beq _08009460
ldr r0, _08009494
strb r6, [r0]
ldr r0, _08009498
strb r6, [r0]
_08009460:
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
cmp r5, #3
bls _08009424
_0800946A:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08009478: .4byte 0x03000D64
_0800947C: .4byte 0x03000D10
_08009480: .4byte 0x03000D20
_08009484: .4byte 0x03000D68
_08009488: .4byte 0x00000342
_0800948C: .4byte 0x0202207C
_08009490: .4byte 0x030031E8
_08009494: .4byte 0x02022074
_08009498: .4byte 0x02022075
thumb_func_end TestBlockTransfer
thumb_func_start LinkTestProcessKeyInput
LinkTestProcessKeyInput: @ 0x0800949C
push {r4, r5, lr}
sub sp, #4
ldr r4, _0800953C
ldrh r1, [r4, #0x2e]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _080094B2
ldr r1, _08009540
movs r0, #1
strb r0, [r1]
_080094B2:
ldrh r1, [r4, #0x2c]
movs r5, #2
adds r0, r5, #0
ands r0, r1
cmp r0, #0
beq _080094C6
ldr r0, _08009544
ldr r1, _08009548
bl InitBlockSend
_080094C6:
ldrh r1, [r4, #0x2e]
movs r0, #0x80
lsls r0, r0, #2
ands r0, r1
cmp r0, #0
beq _080094E2
movs r0, #1
rsbs r0, r0, #0
str r5, [sp]
movs r1, #0
movs r2, #0x10
movs r3, #0
bl BeginNormalPaletteFade
_080094E2:
ldrh r1, [r4, #0x2e]
movs r0, #8
ands r0, r1
cmp r0, #0
beq _080094F2
movs r0, #1
bl SetSuppressLinkErrorMessage
_080094F2:
ldrh r1, [r4, #0x2e]
movs r0, #0x80
lsls r0, r0, #1
ands r0, r1
cmp r0, #0
beq _08009504
movs r0, #1
bl TrySavingData
_08009504:
ldrh r1, [r4, #0x2e]
movs r0, #4
ands r0, r1
cmp r0, #0
beq _08009512
bl sub_0800A7F8
_08009512:
ldr r0, _0800954C
ldrb r0, [r0]
cmp r0, #0
beq _08009532
ldr r2, [r4, #0x24]
ldr r0, _08009550
ldrb r1, [r0]
ldr r0, _08009554
ldr r0, [r0]
cmp r0, #0
bne _0800952C
movs r0, #0x10
orrs r1, r0
_0800952C:
adds r0, r2, #0
bl SetLinkDebugValues
_08009532:
add sp, #4
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800953C: .4byte 0x03002360
_08009540: .4byte 0x030031E4
_08009544: .4byte 0x02004000
_08009548: .4byte 0x00002004
_0800954C: .4byte 0x02022074
_08009550: .4byte 0x030027E8
_08009554: .4byte 0x030031E0
thumb_func_end LinkTestProcessKeyInput
thumb_func_start CB2_LinkTest
CB2_LinkTest: @ 0x08009558
push {lr}
bl LinkTestProcessKeyInput
movs r0, #1
movs r1, #1
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: @ 0x0800957C
push {r4, r5, lr}
adds r4, r0, #0
ldr r0, _0800958C
ldrb r0, [r0]
cmp r0, #0
bne _08009590
movs r0, #0
b _080095D8
.align 2, 0
_0800958C: .4byte 0x0202267C
_08009590:
movs r1, #0
ldr r5, _080095E0
ldr r3, _080095E4
movs r2, #0
_08009598:
lsls r0, r1, #1
adds r0, r0, r3
strh r2, [r0]
adds r0, r1, #1
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #7
bls _08009598
ldrh r0, [r4]
strh r0, [r5]
ldr r0, _080095E8
ldr r0, [r0]
movs r1, #0x40
ands r0, r1
cmp r0, #0
beq _080095D4
ldr r0, _080095EC
ldr r0, [r0]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
bl ProcessRecvCmds
ldr r0, _080095F0
ldr r0, [r0]
cmp r0, #0
beq _080095D0
bl _call_via_r0
_080095D0:
bl CheckErrorStatus
_080095D4:
ldr r0, _080095E8
ldrh r0, [r0]
_080095D8:
pop {r4, r5}
pop {r1}
bx r1
.align 2, 0
_080095E0: .4byte 0x03003124
_080095E4: .4byte 0x030031B0
_080095E8: .4byte 0x03003180
_080095EC: .4byte 0x04000128
_080095F0: .4byte 0x030031E0
thumb_func_end LinkMain2
thumb_func_start HandleReceiveRemoteLinkPlayer
HandleReceiveRemoteLinkPlayer: @ 0x080095F4
push {r4, r5, r6, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r5, #0
ldr r1, _08009608
adds r0, r0, r1
strb r5, [r0]
movs r4, #0
adds r6, r1, #0
b _08009614
.align 2, 0
_08009608: .4byte 0x03003118
_0800960C:
adds r0, r4, r6
ldrb r0, [r0]
adds r5, r5, r0
adds r4, #1
_08009614:
bl GetLinkPlayerCount_2
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r4, r0
blt _0800960C
cmp r5, #0
bne _08009630
ldr r1, _08009638
ldrb r0, [r1]
cmp r0, #0
bne _08009630
movs r0, #1
strb r0, [r1]
_08009630:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08009638: .4byte 0x030031C4
thumb_func_end HandleReceiveRemoteLinkPlayer
thumb_func_start ProcessRecvCmds
ProcessRecvCmds: @ 0x0800963C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #4
movs r6, #0
_0800964A:
ldr r0, _08009694
lsls r1, r6, #1
adds r3, r1, r0
movs r0, #0
strh r0, [r3]
lsls r4, r6, #4
ldr r5, _08009698
adds r2, r4, r5
ldrh r0, [r2]
mov ip, r1
adds r7, r6, #1
str r7, [sp]
cmp r0, #0
bne _08009668
b _08009906
_08009668:
ldrh r1, [r2]
ldr r0, _0800969C
cmp r1, r0
bne _08009672
b _080098B8
_08009672:
cmp r1, r0
bgt _080096C0
ldr r0, _080096A0
cmp r1, r0
bne _0800967E
b _080098FC
_0800967E:
cmp r1, r0
bgt _080096AC
ldr r0, _080096A4
cmp r1, r0
beq _08009704
ldr r0, _080096A8
cmp r1, r0
bne _08009690
b _080098C0
_08009690:
b _08009906
.align 2, 0
_08009694: .4byte 0x030030C0
_08009698: .4byte 0x03003130
_0800969C: .4byte 0x00005FFF
_080096A0: .4byte 0x00004444
_080096A4: .4byte 0x00002222
_080096A8: .4byte 0x00002FFE
_080096AC:
ldr r0, _080096BC
cmp r1, r0
beq _08009754
adds r0, #0x11
cmp r1, r0
beq _08009754
b _08009906
.align 2, 0
_080096BC: .4byte 0x00005555
_080096C0:
ldr r0, _080096DC
cmp r1, r0
beq _08009760
cmp r1, r0
bgt _080096E8
ldr r0, _080096E0
cmp r1, r0
beq _0800978C
ldr r0, _080096E4
cmp r1, r0
bne _080096D8
b _080098D0
_080096D8:
b _08009906
.align 2, 0
_080096DC: .4byte 0x0000BBBB
_080096E0: .4byte 0x00008888
_080096E4: .4byte 0x0000AAAA
_080096E8:
ldr r0, _080096FC
cmp r1, r0
bne _080096F0
b _080098FC
_080096F0:
ldr r0, _08009700
cmp r1, r0
bne _080096F8
b _080098D6
_080096F8:
b _08009906
.align 2, 0
_080096FC: .4byte 0x0000CAFE
_08009700: .4byte 0x0000CCCC
_08009704:
bl InitLocalLinkPlayer
ldr r1, _08009748
adds r1, #0x10
ldr r0, _0800974C
ldm r0!, {r2, r3, r4}
stm r1!, {r2, r3, r4}
ldm r0!, {r2, r5, r7}
stm r1!, {r2, r5, r7}
ldr r0, [r0]
str r0, [r1]
ldr r3, _08009750
ldr r1, _08009748
adds r0, r3, #0
ldm r0!, {r4, r5, r7}
stm r1!, {r4, r5, r7}
ldrh r2, [r0]
strh r2, [r1]
ldrb r0, [r0, #2]
strb r0, [r1, #2]
ldr r0, _08009748
adds r0, #0x2c
ldm r3!, {r1, r2, r4}
stm r0!, {r1, r2, r4}
ldrh r1, [r3]
strh r1, [r0]
ldrb r1, [r3, #2]
strb r1, [r0, #2]
ldr r0, _08009748
movs r1, #0x3c
bl InitBlockSend
b _08009906
.align 2, 0
_08009748: .4byte 0x030030D0
_0800974C: .4byte 0x02022684
_08009750: .4byte 0x082BFF24
_08009754:
ldr r1, _0800975C
movs r0, #1
strb r0, [r1]
b _08009906
.align 2, 0
_0800975C: .4byte 0x03003188
_08009760:
mov r5, ip
adds r1, r5, r6
lsls r1, r1, #2
ldr r7, _08009784
adds r1, r1, r7
movs r0, #0
strh r0, [r1]
ldr r0, _08009788
adds r0, #2
adds r0, r4, r0
ldrh r0, [r0]
strh r0, [r1, #2]
ldr r0, _08009788
adds r0, #4
adds r0, r4, r0
ldrh r0, [r0]
strb r0, [r1, #9]
b _08009906
.align 2, 0
_08009784: .4byte 0x03000D20
_08009788: .4byte 0x03003130
_0800978C:
mov r1, ip
adds r0, r1, r6
lsls r0, r0, #2
ldr r2, _080097D0
adds r3, r0, r2
ldrh r1, [r3, #2]
movs r0, #0x80
lsls r0, r0, #1
adds r5, r2, #0
mov sl, r5
cmp r1, r0
bls _080097DC
ldr r7, _080097D4
mov r8, r7
movs r2, #0
adds r5, r3, #0
ldr r7, _080097D8
adds r3, r4, #0
_080097B0:
ldrh r1, [r5]
lsrs r1, r1, #1
adds r1, r1, r2
lsls r1, r1, #1
add r1, r8
adds r2, #1
lsls r0, r2, #1
adds r0, r0, r3
adds r0, r0, r7
ldrh r0, [r0]
strh r0, [r1]
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
cmp r2, #6
bls _080097B0
b _0800980C
.align 2, 0
_080097D0: .4byte 0x03000D20
_080097D4: .4byte 0x0201C000
_080097D8: .4byte 0x03003130
_080097DC:
movs r2, #0
ldr r0, _0800988C
mov sb, r0
adds r7, r3, #0
ldr r1, _08009890
mov r8, r1
lsls r5, r6, #8
adds r3, r4, #0
_080097EC:
ldrh r1, [r7]
lsrs r1, r1, #1
adds r1, r1, r2
lsls r1, r1, #1
adds r1, r1, r5
add r1, sb
adds r2, #1
lsls r0, r2, #1
adds r0, r0, r3
add r0, r8
ldrh r0, [r0]
strh r0, [r1]
lsls r2, r2, #0x10
lsrs r2, r2, #0x10
cmp r2, #6
bls _080097EC
_0800980C:
mov r2, ip
adds r1, r2, r6
lsls r1, r1, #2
add r1, sl
ldrh r0, [r1]
adds r0, #0xe
movs r3, #0
strh r0, [r1]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
ldrh r1, [r1, #2]
cmp r0, r1
blo _08009906
ldr r0, _08009894
adds r0, r6, r0
ldrb r0, [r0]
cmp r0, #1
bne _080098AE
lsls r1, r6, #8
ldr r0, _0800988C
adds r1, r1, r0
mov r8, r1
lsls r0, r6, #3
subs r0, r0, r6
lsls r0, r0, #2
ldr r1, _08009898
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, #1
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r0, #1
bhi _08009866
strb r3, [r2, #0x12]
strb r3, [r2, #0x11]
strb r3, [r2, #0x10]
_08009866:
ldr r5, _0800989C
mov r0, r8
adds r1, r5, #0
bl strcmp
cmp r0, #0
bne _08009882
mov r0, r8
adds r0, #0x2c
adds r1, r5, #0
bl strcmp
cmp r0, #0
beq _080098A4
_08009882:
ldr r0, _080098A0
bl SetMainCallback2
b _08009906
.align 2, 0
_0800988C: .4byte 0x0202207C
_08009890: .4byte 0x03003130
_08009894: .4byte 0x03003118
_08009898: .4byte 0x020226A0
_0800989C: .4byte 0x082BFF24
_080098A0: .4byte 0x0800AA0D
_080098A4:
lsls r0, r6, #0x18
lsrs r0, r0, #0x18
bl HandleReceiveRemoteLinkPlayer
b _08009906
_080098AE:
lsls r0, r6, #0x18
lsrs r0, r0, #0x18
bl SetBlockReceivedFlag
b _08009906
_080098B8:
ldr r0, _080098BC
b _080098C2
.align 2, 0
_080098BC: .4byte 0x03003190
_080098C0:
ldr r0, _080098CC
_080098C2:
adds r0, r6, r0
movs r1, #1
strb r1, [r0]
b _08009906
.align 2, 0
_080098CC: .4byte 0x0300318C
_080098D0:
bl sub_08009FDC
b _08009906
_080098D6:
ldr r3, _080098F4
ldr r0, _080098F8
adds r0, #2
adds r0, r4, r0
ldrh r2, [r0]
lsls r2, r2, #3
adds r0, r2, r3
ldr r1, [r0]
adds r3, #4
adds r2, r2, r3
ldrh r2, [r2]
movs r0, #0
bl SendBlock
b _08009906
.align 2, 0
_080098F4: .4byte 0x082BFEF8
_080098F8: .4byte 0x03003130
_080098FC:
ldr r0, _08009924
adds r0, #2
adds r0, r4, r0
ldrh r0, [r0]
strh r0, [r3]
_08009906:
ldr r1, [sp]
lsls r0, r1, #0x10
lsrs r6, r0, #0x10
cmp r6, #3
bhi _08009912
b _0800964A
_08009912:
add sp, #4
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_08009924: .4byte 0x03003130
thumb_func_end ProcessRecvCmds
thumb_func_start BuildSendCmd
BuildSendCmd: @ 0x08009928
push {lr}
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
ldr r0, _08009954
cmp r2, r0
beq _080099F8
cmp r2, r0
bgt _08009988
ldr r0, _08009958
cmp r2, r0
beq _080099E4
cmp r2, r0
bgt _08009964
ldr r0, _0800995C
cmp r2, r0
beq _080099D0
ldr r0, _08009960
_0800994A:
cmp r2, r0
bne _08009950
b _08009A7C
_08009950:
b _08009A9E
.align 2, 0
_08009954: .4byte 0x00006666
_08009958: .4byte 0x00004444
_0800995C: .4byte 0x00002222
_08009960: .4byte 0x00002FFE
_08009964:
ldr r0, _08009974
cmp r2, r0
bne _0800996C
b _08009A7C
_0800996C:
cmp r2, r0
bgt _08009978
subs r0, #0x11
b _0800994A
.align 2, 0
_08009974: .4byte 0x00005566
_08009978:
ldr r0, _08009984
cmp r2, r0
bne _08009980
b _08009A68
_08009980:
b _08009A9E
.align 2, 0
_08009984: .4byte 0x00005FFF
_08009988:
ldr r0, _0800999C
cmp r2, r0
beq _08009A40
cmp r2, r0
bgt _080099A8
ldr r0, _080099A0
cmp r2, r0
beq _08009A04
ldr r0, _080099A4
b _0800994A
.align 2, 0
_0800999C: .4byte 0x0000AAAB
_080099A0: .4byte 0x00007777
_080099A4: .4byte 0x0000AAAA
_080099A8:
ldr r0, _080099BC
cmp r2, r0
beq _08009A88
cmp r2, r0
bgt _080099C4
ldr r0, _080099C0
cmp r2, r0
beq _08009A24
b _08009A9E
.align 2, 0
_080099BC: .4byte 0x0000CAFE
_080099C0: .4byte 0x0000BBBB
_080099C4:
ldr r0, _080099CC
cmp r2, r0
beq _08009A54
b _08009A9E
.align 2, 0
_080099CC: .4byte 0x0000CCCC
_080099D0:
ldr r0, _080099DC
strh r2, [r0]
ldr r1, _080099E0
ldrh r1, [r1]
b _08009A9C
.align 2, 0
_080099DC: .4byte 0x030031B0
_080099E0: .4byte 0x0202267E
_080099E4:
ldr r0, _080099F0
strh r2, [r0]
ldr r1, _080099F4
ldrh r1, [r1, #0x2c]
b _08009A9C
.align 2, 0
_080099F0: .4byte 0x030031B0
_080099F4: .4byte 0x03002360
_080099F8:
ldr r0, _08009A00
movs r1, #0
b _08009A9A
.align 2, 0
_08009A00: .4byte 0x030031B0
_08009A04:
ldr r0, _08009A20
strh r2, [r0]
movs r1, #0
adds r3, r0, #0
movs r2, #0xee
_08009A0E:
adds r1, #1
lsls r0, r1, #1
adds r0, r0, r3
strh r2, [r0]
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
cmp r1, #4
bls _08009A0E
b _08009A9E
.align 2, 0
_08009A20: .4byte 0x030031B0
_08009A24:
ldr r1, _08009A38
strh r2, [r1]
ldr r2, _08009A3C
ldrh r0, [r2, #2]
strh r0, [r1, #2]
ldrb r0, [r2, #9]
adds r0, #0x80
strh r0, [r1, #4]
b _08009A9E
.align 2, 0
_08009A38: .4byte 0x030031B0
_08009A3C: .4byte 0x03000D10
_08009A40:
ldr r0, _08009A4C
strh r2, [r0]
ldr r1, _08009A50
ldrh r1, [r1]
b _08009A9C
.align 2, 0
_08009A4C: .4byte 0x030031B0
_08009A50: .4byte 0x0203CB48
_08009A54:
ldr r0, _08009A60
strh r2, [r0]
ldr r1, _08009A64
ldrb r1, [r1]
b _08009A9C
.align 2, 0
_08009A60: .4byte 0x030031B0
_08009A64: .4byte 0x030031F0
_08009A68:
ldr r0, _08009A74
strh r2, [r0]
ldr r1, _08009A78
ldrh r1, [r1]
b _08009A9C
.align 2, 0
_08009A74: .4byte 0x030031B0
_08009A78: .4byte 0x03003194
_08009A7C:
ldr r0, _08009A84
strh r2, [r0]
b _08009A9E
.align 2, 0
_08009A84: .4byte 0x030031B0
_08009A88:
ldr r0, _08009AA4
ldrh r1, [r0]
cmp r1, #0
beq _08009A9E
ldr r0, _08009AA8
ldrb r0, [r0]
cmp r0, #0
bne _08009A9E
ldr r0, _08009AAC
_08009A9A:
strh r2, [r0]
_08009A9C:
strh r1, [r0, #2]
_08009A9E:
pop {r0}
bx r0
.align 2, 0
_08009AA4: .4byte 0x03005B08
_08009AA8: .4byte 0x03002354
_08009AAC: .4byte 0x030031B0
thumb_func_end BuildSendCmd
thumb_func_start sub_08009AB0
sub_08009AB0: @ 0x08009AB0
push {lr}
ldr r0, _08009AC8
ldrb r0, [r0]
cmp r0, #0
beq _08009ABE
bl sub_0800F2C4
_08009ABE:
ldr r1, _08009ACC
ldr r0, _08009AD0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_08009AC8: .4byte 0x0300319C
_08009ACC: .4byte 0x030031E0
_08009AD0: .4byte 0x08009B09
thumb_func_end sub_08009AB0
thumb_func_start IsSendingKeysToLink
IsSendingKeysToLink: @ 0x08009AD4
push {lr}
ldr r0, _08009AE4
ldrb r0, [r0]
cmp r0, #0
beq _08009AE8
bl IsSendingKeysToRfu
b _08009B02
.align 2, 0
_08009AE4: .4byte 0x0300319C
_08009AE8:
ldr r0, _08009AF8
ldr r1, [r0]
ldr r0, _08009AFC
cmp r1, r0
beq _08009B00
movs r0, #0
b _08009B02
.align 2, 0
_08009AF8: .4byte 0x030031E0
_08009AFC: .4byte 0x08009B09
_08009B00:
movs r0, #1
_08009B02:
pop {r1}
bx r1
.align 2, 0
thumb_func_end IsSendingKeysToLink
thumb_func_start sub_08009B08
sub_08009B08: @ 0x08009B08
push {lr}
ldr r0, _08009B1C
ldrb r0, [r0]
cmp r0, #1
bne _08009B18
ldr r0, _08009B20
bl BuildSendCmd
_08009B18:
pop {r0}
bx r0
.align 2, 0
_08009B1C: .4byte 0x030031C4
_08009B20: .4byte 0x0000CAFE
thumb_func_end sub_08009B08
thumb_func_start ClearLinkCallback
ClearLinkCallback: @ 0x08009B24
push {lr}
ldr r0, _08009B34
ldrb r1, [r0]
cmp r1, #0
beq _08009B38
bl Rfu_set_zero
b _08009B3C
.align 2, 0
_08009B34: .4byte 0x0300319C
_08009B38:
ldr r0, _08009B40
str r1, [r0]
_08009B3C:
pop {r0}
bx r0
.align 2, 0
_08009B40: .4byte 0x030031E0
thumb_func_end ClearLinkCallback
thumb_func_start ClearLinkCallback_2
ClearLinkCallback_2: @ 0x08009B44
push {lr}
ldr r0, _08009B54
ldrb r1, [r0]
cmp r1, #0
beq _08009B58
bl Rfu_set_zero
b _08009B5C
.align 2, 0
_08009B54: .4byte 0x0300319C
_08009B58:
ldr r0, _08009B60
str r1, [r0]
_08009B5C:
pop {r0}
bx r0
.align 2, 0
_08009B60: .4byte 0x030031E0
thumb_func_end ClearLinkCallback_2
thumb_func_start GetLinkPlayerCount
GetLinkPlayerCount: @ 0x08009B64
push {lr}
ldr r0, _08009B7C
ldrb r0, [r0]
cmp r0, #0
bne _08009B84
ldr r0, _08009B80
ldr r0, [r0]
movs r1, #0x1c
ands r0, r1
lsrs r0, r0, #2
b _08009B8C
.align 2, 0
_08009B7C: .4byte 0x0300319C
_08009B80: .4byte 0x03003180
_08009B84:
bl sub_0800FFF4
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
_08009B8C:
pop {r1}
bx r1
thumb_func_end GetLinkPlayerCount
thumb_func_start sub_08009B90
sub_08009B90: @ 0x08009B90
push {r4, r5, r6, r7, lr}
adds r6, r0, #0
adds r5, r1, #0
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
movs r2, #0
cmp r2, r4
bge _08009BC8
movs r7, #0xff
ldr r3, _08009BBC
_08009BA8:
ldrh r0, [r3]
adds r1, r7, #0
ands r1, r0
cmp r1, r6
beq _08009BB6
cmp r1, r5
bne _08009BC0
_08009BB6:
movs r0, #1
b _08009BCC
.align 2, 0
_08009BBC: .4byte 0x020226A0
_08009BC0:
adds r3, #0x1c
adds r2, #1
cmp r2, r4
blt _08009BA8
_08009BC8:
movs r0, #1
rsbs r0, r0, #0
_08009BCC:
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_08009B90
thumb_func_start sub_08009BD4
sub_08009BD4: @ 0x08009BD4
push {r4, r5, lr}
movs r5, #0
ldr r4, _08009BDC
b _08009BEE
.align 2, 0
_08009BDC: .4byte 0x020226A0
_08009BE0:
ldrh r0, [r4, #0x1a]
cmp r0, #1
beq _08009BEA
movs r0, #1
b _08009BFC
_08009BEA:
adds r4, #0x1c
adds r5, #1
_08009BEE:
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r5, r0
blt _08009BE0
movs r0, #0
_08009BFC:
pop {r4, r5}
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_08009BD4
thumb_func_start sub_08009C04
sub_08009C04: @ 0x08009C04
push {lr}
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #4
bne _08009C1E
movs r0, #2
movs r1, #1
bl sub_08009B90
cmp r0, #0
bge _08009C22
_08009C1E:
movs r0, #0
b _08009C24
_08009C22:
movs r0, #1
_08009C24:
pop {r1}
bx r1
thumb_func_end sub_08009C04
thumb_func_start Link_AnyPartnersPlayingRubyOrSapphire
Link_AnyPartnersPlayingRubyOrSapphire: @ 0x08009C28
push {lr}
movs r0, #2
movs r1, #1
bl sub_08009B90
cmp r0, #0
bge _08009C3A
movs r0, #0
b _08009C3C
_08009C3A:
movs r0, #1
_08009C3C:
pop {r1}
bx r1
thumb_func_end Link_AnyPartnersPlayingRubyOrSapphire
thumb_func_start sub_08009C40
sub_08009C40: @ 0x08009C40
push {lr}
movs r0, #4
movs r1, #5
bl sub_08009B90
adds r2, r0, #0
cmp r2, #0
blt _08009C68
ldr r0, _08009C64
lsls r1, r2, #3
subs r1, r1, r2
lsls r1, r1, #2
adds r1, r1, r0
ldrh r0, [r1, #0x1a]
cmp r0, #1
bne _08009C68
movs r0, #1
b _08009C6A
.align 2, 0
_08009C64: .4byte 0x020226A0
_08009C68:
movs r0, #0
_08009C6A:
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_08009C40
thumb_func_start OpenLinkTimed
OpenLinkTimed: @ 0x08009C70
push {lr}
ldr r0, _08009C84
movs r1, #0
str r1, [r0]
ldr r0, _08009C88
strh r1, [r0]
bl OpenLink
pop {r0}
bx r0
.align 2, 0
_08009C84: .4byte 0x03000D5C
_08009C88: .4byte 0x02022680
thumb_func_end OpenLinkTimed
thumb_func_start GetLinkPlayerDataExchangeStatusTimed
GetLinkPlayerDataExchangeStatusTimed: @ 0x08009C8C
push {r4, r5, r6, r7, lr}
adds r5, r0, #0
adds r6, r1, #0
movs r7, #0
ldr r0, _08009CB8
ldrb r4, [r0]
cmp r4, #1
beq _08009C9E
b _08009DD8
_08009C9E:
bl GetLinkPlayerCount_2
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r5, r0
bgt _08009CAE
cmp r0, r6
ble _08009CC0
_08009CAE:
ldr r1, _08009CBC
movs r0, #6
str r0, [r1]
b _08009DF2
.align 2, 0
_08009CB8: .4byte 0x030031C4
_08009CBC: .4byte 0x03000D5C
_08009CC0:
bl GetLinkPlayerCount
lsls r0, r0, #0x18
cmp r0, #0
bne _08009CD2
ldr r0, _08009CDC
strb r4, [r0]
bl CloseLink
_08009CD2:
movs r6, #0
ldr r4, _08009CE0
movs r5, #0
b _08009CF8
.align 2, 0
_08009CDC: .4byte 0x0300310C
_08009CE0: .4byte 0x020226A0
_08009CE4:
adds r0, r4, #0
adds r0, #0x14
adds r0, r5, r0
ldr r1, [r0]
ldr r0, [r4, #0x14]
cmp r1, r0
bne _08009CF4
adds r7, #1
_08009CF4:
adds r5, #0x1c
adds r6, #1
_08009CF8:
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r6, r0
blt _08009CE4
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r7, r0
bne _08009D70
ldr r0, _08009D30
ldr r1, [r0, #0x14]
ldr r0, _08009D34
cmp r1, r0
bne _08009D60
bl sub_0807A198
cmp r0, #1
beq _08009D48
cmp r0, #1
bgt _08009D3C
cmp r0, #0
beq _08009D60
ldr r3, _08009D38
b _08009DF0
.align 2, 0
_08009D30: .4byte 0x020226A0
_08009D34: .4byte 0x00001133
_08009D38: .4byte 0x03000D5C
_08009D3C:
cmp r0, #2
beq _08009D54
ldr r3, _08009D44
b _08009DF0
.align 2, 0
_08009D44: .4byte 0x03000D5C
_08009D48:
ldr r1, _08009D50
movs r0, #4
b _08009D64
.align 2, 0
_08009D50: .4byte 0x03000D5C
_08009D54:
ldr r1, _08009D5C
movs r0, #5
b _08009D64
.align 2, 0
_08009D5C: .4byte 0x03000D5C
_08009D60:
ldr r1, _08009D6C
movs r0, #1
_08009D64:
str r0, [r1]
adds r3, r1, #0
b _08009DF0
.align 2, 0
_08009D6C: .4byte 0x03000D5C
_08009D70:
ldr r6, _08009DC4
movs r0, #3
str r0, [r6]
ldr r4, _08009DC8
bl GetMultiplayerId
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r0, #3
subs r1, r1, r0
lsls r1, r1, #2
adds r4, #0x14
adds r1, r1, r4
ldr r5, [r1]
bl GetMultiplayerId
movs r1, #1
eors r0, r1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r0, #3
subs r1, r1, r0
lsls r1, r1, #2
adds r1, r1, r4
ldr r1, [r1]
ldr r2, _08009DCC
cmp r5, r2
bne _08009DAE
ldr r0, _08009DD0
cmp r1, r0
beq _08009DBA
_08009DAE:
ldr r0, _08009DD0
adds r3, r6, #0
cmp r5, r0
bne _08009DF0
cmp r1, r2
bne _08009DF0
_08009DBA:
ldr r1, _08009DD4
movs r0, #3
strh r0, [r1]
ldr r3, _08009DC4
b _08009DF0
.align 2, 0
_08009DC4: .4byte 0x03000D5C
_08009DC8: .4byte 0x020226A0
_08009DCC: .4byte 0x00002266
_08009DD0: .4byte 0x00002277
_08009DD4: .4byte 0x02037282
_08009DD8:
ldr r0, _08009DF8
ldrh r1, [r0]
adds r1, #1
strh r1, [r0]
lsls r1, r1, #0x10
movs r0, #0x96
lsls r0, r0, #0x12
ldr r3, _08009DFC
cmp r1, r0
bls _08009DF0
movs r0, #2
str r0, [r3]
_08009DF0:
ldrb r0, [r3]
_08009DF2:
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08009DF8: .4byte 0x02022680
_08009DFC: .4byte 0x03000D5C
thumb_func_end GetLinkPlayerDataExchangeStatusTimed
thumb_func_start IsLinkPlayerDataExchangeComplete
IsLinkPlayerDataExchangeComplete: @ 0x08009E00
push {r4, r5, r6, lr}
movs r6, #0
movs r4, #0
ldr r5, _08009E0C
b _08009E30
.align 2, 0
_08009E0C: .4byte 0x020226A0
_08009E10:
lsls r0, r4, #3
subs r0, r0, r4
lsls r0, r0, #2
adds r1, r5, #0
adds r1, #0x14
adds r0, r0, r1
ldr r1, [r0]
ldr r0, [r5, #0x14]
cmp r1, r0
bne _08009E2A
adds r0, r6, #1
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
_08009E2A:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
_08009E30:
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r4, r0
blo _08009E10
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r6, r0
bne _08009E54
movs r2, #1
ldr r0, _08009E50
str r2, [r0]
b _08009E5C
.align 2, 0
_08009E50: .4byte 0x03000D5C
_08009E54:
movs r2, #0
ldr r1, _08009E64
movs r0, #3
str r0, [r1]
_08009E5C:
adds r0, r2, #0
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
_08009E64: .4byte 0x03000D5C
thumb_func_end IsLinkPlayerDataExchangeComplete
thumb_func_start GetLinkPlayerTrainerId
GetLinkPlayerTrainerId: @ 0x08009E68
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
ldr r2, _08009E7C
lsls r1, r0, #3
subs r1, r1, r0
lsls r1, r1, #2
adds r2, #4
adds r1, r1, r2
ldr r0, [r1]
bx lr
.align 2, 0
_08009E7C: .4byte 0x020226A0
thumb_func_end GetLinkPlayerTrainerId
thumb_func_start ResetLinkPlayers
ResetLinkPlayers: @ 0x08009E80
push {r4, r5, lr}
ldr r5, _08009EA0
movs r4, #4
_08009E86:
adds r0, r5, #0
movs r1, #0
movs r2, #0x1c
bl memset
adds r5, #0x1c
subs r4, #1
cmp r4, #0
bge _08009E86
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_08009EA0: .4byte 0x020226A0
thumb_func_end ResetLinkPlayers
thumb_func_start ResetBlockSend
ResetBlockSend: @ 0x08009EA4
ldr r1, _08009EB4
movs r0, #0
strb r0, [r1, #8]
strh r0, [r1]
strh r0, [r1, #2]
str r0, [r1, #4]
bx lr
.align 2, 0
_08009EB4: .4byte 0x03000D10
thumb_func_end ResetBlockSend
thumb_func_start InitBlockSend
InitBlockSend: @ 0x08009EB8
push {r4, r5, r6, r7, lr}
adds r7, r0, #0
adds r6, r1, #0
ldr r4, _08009ECC
ldrb r5, [r4, #8]
cmp r5, #0
beq _08009ED0
movs r0, #0
b _08009F0E
.align 2, 0
_08009ECC: .4byte 0x03000D10
_08009ED0:
bl GetMultiplayerId
strb r0, [r4, #9]
movs r0, #1
strb r0, [r4, #8]
strh r6, [r4, #2]
strh r5, [r4]
adds r0, #0xff
cmp r6, r0
bls _08009EE8
str r7, [r4, #4]
b _08009EFA
_08009EE8:
ldr r5, _08009F14
cmp r7, r5
beq _08009EF8
adds r0, r5, #0
adds r1, r7, #0
adds r2, r6, #0
bl memcpy
_08009EF8:
str r5, [r4, #4]
_08009EFA:
ldr r0, _08009F18
bl BuildSendCmd
ldr r1, _08009F1C
ldr r0, _08009F20
str r0, [r1]
ldr r1, _08009F24
movs r0, #0
str r0, [r1]
movs r0, #1
_08009F0E:
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
_08009F14: .4byte 0x0202257C
_08009F18: .4byte 0x0000BBBB
_08009F1C: .4byte 0x030031E0
_08009F20: .4byte 0x08009F29
_08009F24: .4byte 0x03000D50
thumb_func_end InitBlockSend
thumb_func_start LinkCB_BlockSendBegin
LinkCB_BlockSendBegin: @ 0x08009F28
push {lr}
ldr r1, _08009F40
ldr r0, [r1]
adds r0, #1
str r0, [r1]
cmp r0, #2
bls _08009F3C
ldr r1, _08009F44
ldr r0, _08009F48
str r0, [r1]
_08009F3C:
pop {r0}
bx r0
.align 2, 0
_08009F40: .4byte 0x03000D50
_08009F44: .4byte 0x030031E0
_08009F48: .4byte 0x08009F4D
thumb_func_end LinkCB_BlockSendBegin
thumb_func_start LinkCB_BlockSend
LinkCB_BlockSend: @ 0x08009F4C
push {r4, r5, r6, lr}
ldr r0, _08009F9C
ldr r5, [r0, #4]
ldr r2, _08009FA0
ldr r1, _08009FA4
strh r1, [r2]
movs r3, #0
adds r4, r0, #0
adds r6, r4, #0
adds r2, #2
_08009F60:
lsls r0, r3, #1
ldrh r1, [r6]
adds r0, r0, r1
adds r0, r0, r5
ldrb r1, [r0, #1]
lsls r1, r1, #8
ldrb r0, [r0]
orrs r0, r1
strh r0, [r2]
adds r2, #2
adds r3, #1
cmp r3, #6
ble _08009F60
ldrh r0, [r4]
adds r0, #0xe
strh r0, [r4]
ldrh r1, [r4, #2]
lsls r0, r0, #0x10
lsrs r0, r0, #0x10
cmp r1, r0
bhi _08009F94
movs r0, #0
strb r0, [r4, #8]
ldr r1, _08009FA8
ldr r0, _08009FAC
str r0, [r1]
_08009F94:
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_08009F9C: .4byte 0x03000D10
_08009FA0: .4byte 0x030031B0
_08009FA4: .4byte 0x00008888
_08009FA8: .4byte 0x030031E0
_08009FAC: .4byte 0x08009FB1
thumb_func_end LinkCB_BlockSend
thumb_func_start LinkCB_BlockSendEnd
LinkCB_BlockSendEnd: @ 0x08009FB0
ldr r1, _08009FB8
movs r0, #0
str r0, [r1]
bx lr
.align 2, 0
_08009FB8: .4byte 0x030031E0
thumb_func_end LinkCB_BlockSendEnd
thumb_func_start sub_08009FBC
sub_08009FBC: @ 0x08009FBC
push {lr}
bl GetMultiplayerId
ldr r0, _08009FD4
bl BuildSendCmd
ldr r1, _08009FD8
ldr r0, [r1]
adds r0, #1
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_08009FD4: .4byte 0x00004444
_08009FD8: .4byte 0x02022078
thumb_func_end sub_08009FBC
thumb_func_start sub_08009FDC
sub_08009FDC: @ 0x08009FDC
push {lr}
ldr r1, _08009FF4
movs r0, #0
str r0, [r1]
ldr r0, _08009FF8
ldrb r0, [r0]
cmp r0, #0
beq _08009FFC
bl sub_0800F334
b _0800A002
.align 2, 0
_08009FF4: .4byte 0x02022078
_08009FF8: .4byte 0x0300319C
_08009FFC:
ldr r1, _0800A008
ldr r0, _0800A00C
str r0, [r1]
_0800A002:
pop {r0}
bx r0
.align 2, 0
_0800A008: .4byte 0x030031E0
_0800A00C: .4byte 0x08009FBD
thumb_func_end sub_08009FDC
thumb_func_start sub_0800A010
sub_0800A010: @ 0x0800A010
ldr r0, _0800A018
ldr r0, [r0]
bx lr
.align 2, 0
_0800A018: .4byte 0x02022078
thumb_func_end sub_0800A010
thumb_func_start sub_0800A01C
sub_0800A01C: @ 0x0800A01C
push {lr}
ldr r0, _0800A028
bl BuildSendCmd
pop {r0}
bx r0
.align 2, 0
_0800A028: .4byte 0x0000AAAA
thumb_func_end sub_0800A01C
thumb_func_start GetMultiplayerId
GetMultiplayerId: @ 0x0800A02C
push {lr}
ldr r0, _0800A040
ldrb r0, [r0]
cmp r0, #1
beq _0800A048
ldr r0, _0800A044
ldr r0, [r0]
lsls r0, r0, #0x1a
lsrs r0, r0, #0x1e
b _0800A050
.align 2, 0
_0800A040: .4byte 0x0300319C
_0800A044: .4byte 0x04000128
_0800A048:
bl rfu_get_multiplayer_id
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
_0800A050:
pop {r1}
bx r1
thumb_func_end GetMultiplayerId
thumb_func_start bitmask_all_link_players_but_self
bitmask_all_link_players_but_self: @ 0x0800A054
push {lr}
bl GetMultiplayerId
adds r1, r0, #0
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
movs r0, #1
lsls r0, r1
movs r1, #0xf
eors r0, r1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
pop {r1}
bx r1
thumb_func_end bitmask_all_link_players_but_self
thumb_func_start SendBlock
SendBlock: @ 0x0800A070
push {lr}
adds r3, r1, #0
lsls r2, r2, #0x10
lsrs r1, r2, #0x10
ldr r0, _0800A088
ldrb r0, [r0]
cmp r0, #1
beq _0800A08C
adds r0, r3, #0
bl InitBlockSend
b _0800A092
.align 2, 0
_0800A088: .4byte 0x0300319C
_0800A08C:
adds r0, r3, #0
bl sub_0800F968
_0800A092:
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
pop {r1}
bx r1
.align 2, 0
thumb_func_end SendBlock
thumb_func_start sub_0800A09C
sub_0800A09C: @ 0x0800A09C
push {lr}
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
adds r2, r1, #0
ldr r0, _0800A0B8
ldrb r0, [r0]
cmp r0, #1
bne _0800A0BC
adds r0, r1, #0
bl sub_0800FC00
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
b _0800A0D8
.align 2, 0
_0800A0B8: .4byte 0x0300319C
_0800A0BC:
ldr r0, _0800A0C8
ldr r0, [r0]
cmp r0, #0
beq _0800A0CC
movs r0, #0
b _0800A0D8
.align 2, 0
_0800A0C8: .4byte 0x030031E0
_0800A0CC:
ldr r0, _0800A0DC
strb r2, [r0]
ldr r0, _0800A0E0
bl BuildSendCmd
movs r0, #1
_0800A0D8:
pop {r1}
bx r1
.align 2, 0
_0800A0DC: .4byte 0x030031F0
_0800A0E0: .4byte 0x0000CCCC
thumb_func_end sub_0800A09C
thumb_func_start IsLinkTaskFinished
IsLinkTaskFinished: @ 0x0800A0E4
push {lr}
ldr r0, _0800A0F8
ldrb r0, [r0]
cmp r0, #1
bne _0800A0FC
bl sub_08010000
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
b _0800A10A
.align 2, 0
_0800A0F8: .4byte 0x0300319C
_0800A0FC:
movs r1, #0
ldr r0, _0800A110
ldr r0, [r0]
cmp r0, #0
bne _0800A108
movs r1, #1
_0800A108:
adds r0, r1, #0
_0800A10A:
pop {r1}
bx r1
.align 2, 0
_0800A110: .4byte 0x030031E0
thumb_func_end IsLinkTaskFinished
thumb_func_start GetBlockReceivedStatus
GetBlockReceivedStatus: @ 0x0800A114
push {lr}
ldr r0, _0800A138
ldrb r0, [r0]
cmp r0, #1
beq _0800A140
ldr r2, _0800A13C
ldrb r0, [r2, #3]
lsls r0, r0, #3
ldrb r1, [r2, #2]
lsls r1, r1, #2
orrs r0, r1
ldrb r1, [r2, #1]
lsls r1, r1, #1
orrs r0, r1
ldrb r1, [r2]
orrs r0, r1
b _0800A144
.align 2, 0
_0800A138: .4byte 0x0300319C
_0800A13C: .4byte 0x0300311C
_0800A140:
bl sub_0800F7BC
_0800A144:
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
pop {r1}
bx r1
thumb_func_end GetBlockReceivedStatus
thumb_func_start SetBlockReceivedFlag
SetBlockReceivedFlag: @ 0x0800A14C
push {lr}
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
ldr r0, _0800A164
ldrb r0, [r0]
cmp r0, #1
bne _0800A168
adds r0, r1, #0
bl sub_0800F1BC
b _0800A170
.align 2, 0
_0800A164: .4byte 0x0300319C
_0800A168:
ldr r0, _0800A174
adds r0, r1, r0
movs r1, #1
strb r1, [r0]
_0800A170:
pop {r0}
bx r0
.align 2, 0
_0800A174: .4byte 0x0300311C
thumb_func_end SetBlockReceivedFlag
thumb_func_start ResetBlockReceivedFlags
ResetBlockReceivedFlags: @ 0x0800A178
push {r4, lr}
ldr r0, _0800A194
ldrb r0, [r0]
cmp r0, #1
bne _0800A198
movs r4, #0
_0800A184:
lsls r0, r4, #0x18
lsrs r0, r0, #0x18
bl sub_0800F1E8
adds r4, #1
cmp r4, #4
ble _0800A184
b _0800A1A6
.align 2, 0
_0800A194: .4byte 0x0300319C
_0800A198:
ldr r1, _0800A1AC
movs r2, #0
adds r0, r1, #3
_0800A19E:
strb r2, [r0]
subs r0, #1
cmp r0, r1
bge _0800A19E
_0800A1A6:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800A1AC: .4byte 0x0300311C
thumb_func_end ResetBlockReceivedFlags
thumb_func_start ResetBlockReceivedFlag
ResetBlockReceivedFlag: @ 0x0800A1B0
push {lr}
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
ldr r0, _0800A1C8
ldrb r0, [r0]
cmp r0, #1
bne _0800A1CC
adds r0, r1, #0
bl sub_0800F1E8
b _0800A1DA
.align 2, 0
_0800A1C8: .4byte 0x0300319C
_0800A1CC:
ldr r0, _0800A1E0
adds r1, r1, r0
ldrb r0, [r1]
cmp r0, #0
beq _0800A1DA
movs r0, #0
strb r0, [r1]
_0800A1DA:
pop {r0}
bx r0
.align 2, 0
_0800A1E0: .4byte 0x0300311C
thumb_func_end ResetBlockReceivedFlag
thumb_func_start CheckShouldAdvanceLinkState
CheckShouldAdvanceLinkState: @ 0x0800A1E4
push {lr}
ldr r0, _0800A204
ldr r1, [r0]
movs r0, #0x20
ands r0, r1
cmp r0, #0
beq _0800A200
movs r0, #0x1c
ands r1, r0
cmp r1, #4
bls _0800A200
ldr r1, _0800A208
movs r0, #1
strb r0, [r1]
_0800A200:
pop {r0}
bx r0
.align 2, 0
_0800A204: .4byte 0x03003180
_0800A208: .4byte 0x030031E4
thumb_func_end CheckShouldAdvanceLinkState
thumb_func_start LinkTestCalcBlockChecksum
LinkTestCalcBlockChecksum: @ 0x0800A20C
push {r4, lr}
adds r4, r0, #0
lsls r1, r1, #0x10
movs r3, #0
movs r2, #0
lsrs r1, r1, #0x11
cmp r3, r1
bhs _0800A232
_0800A21C:
lsls r0, r2, #1
adds r0, r0, r4
ldrh r0, [r0]
adds r0, r3, r0
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
adds r0, r2, #1
lsls r0, r0, #0x10
lsrs r2, r0, #0x10
cmp r2, r1
blo _0800A21C
_0800A232:
adds r0, r3, #0
pop {r4}
pop {r1}
bx r1
.align 2, 0
thumb_func_end LinkTestCalcBlockChecksum
thumb_func_start LinkTest_prnthexchar
LinkTest_prnthexchar: @ 0x0800A23C
push {r4, r5, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
lsls r2, r2, #0x18
ldr r4, _0800A270
ldr r3, [r4]
lsls r3, r3, #0xb
movs r5, #0xc0
lsls r5, r5, #0x13
adds r3, r3, r5
lsrs r2, r2, #0x13
adds r2, r2, r1
lsls r2, r2, #1
adds r2, r2, r3
ldr r3, [r4, #4]
lsls r3, r3, #0xc
ldr r1, [r4, #8]
adds r1, #1
adds r0, r0, r1
orrs r3, r0
strh r3, [r2]
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800A270: .4byte 0x030031D0
thumb_func_end LinkTest_prnthexchar
thumb_func_start LinkTest_prntchar
LinkTest_prntchar: @ 0x0800A274
push {r4, r5, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
lsls r2, r2, #0x18
ldr r4, _0800A2A8
ldr r3, [r4]
lsls r3, r3, #0xb
movs r5, #0xc0
lsls r5, r5, #0x13
adds r3, r3, r5
lsrs r2, r2, #0x13
adds r2, r2, r1
lsls r2, r2, #1
adds r2, r2, r3
ldr r3, [r4, #4]
lsls r3, r3, #0xc
ldr r1, [r4, #8]
adds r1, r1, r0
orrs r3, r1
strh r3, [r2]
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800A2A8: .4byte 0x030031D0
thumb_func_end LinkTest_prntchar
thumb_func_start LinkTest_prnthex
LinkTest_prnthex: @ 0x0800A2AC
push {r4, r5, r6, r7, lr}
sub sp, #0x10
adds r5, r0, #0
lsls r1, r1, #0x18
lsrs r6, r1, #0x18
lsls r2, r2, #0x18
lsrs r7, r2, #0x18
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
movs r4, #0
cmp r4, r3
bge _0800A2D8
movs r2, #0xf
_0800A2C6:
mov r0, sp
adds r1, r0, r4
adds r0, r5, #0
ands r0, r2
strb r0, [r1]
lsrs r5, r5, #4
adds r4, #1
cmp r4, r3
blt _0800A2C6
_0800A2D8:
subs r4, r3, #1
cmp r4, #0
blt _0800A2F8
_0800A2DE:
mov r1, sp
adds r0, r1, r4
ldrb r0, [r0]
adds r1, r6, #0
adds r2, r7, #0
bl LinkTest_prnthexchar
adds r0, r6, #1
lsls r0, r0, #0x18
lsrs r6, r0, #0x18
subs r4, #1
cmp r4, #0
bge _0800A2DE
_0800A2F8:
add sp, #0x10
pop {r4, r5, r6, r7}
pop {r0}
bx r0
thumb_func_end LinkTest_prnthex
thumb_func_start LinkTest_prntint
LinkTest_prntint: @ 0x0800A300
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
sub sp, #0x14
adds r6, r0, #0
lsls r1, r1, #0x18
lsrs r7, r1, #0x18
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
mov sb, r2
lsls r3, r3, #0x18
lsrs r3, r3, #0x18
mov r8, r3
movs r0, #1
rsbs r0, r0, #0
str r0, [sp, #0x10]
cmp r6, #0
bge _0800A32C
str r7, [sp, #0x10]
rsbs r6, r6, #0
_0800A32C:
movs r5, #0
movs r1, #1
rsbs r1, r1, #0
add r1, r8
mov sl, r1
cmp r5, r8
bge _0800A358
_0800A33A:
mov r0, sp
adds r4, r0, r5
adds r0, r6, #0
movs r1, #0xa
bl __modsi3
strb r0, [r4]
adds r0, r6, #0
movs r1, #0xa
bl __divsi3
adds r6, r0, #0
adds r5, #1
cmp r5, r8
blt _0800A33A
_0800A358:
mov r5, sl
cmp r5, #0
blt _0800A378
_0800A35E:
mov r1, sp
adds r0, r1, r5
ldrb r0, [r0]
adds r1, r7, #0
mov r2, sb
bl LinkTest_prnthexchar
adds r0, r7, #1
lsls r0, r0, #0x18
lsrs r7, r0, #0x18
subs r5, #1
cmp r5, #0
bge _0800A35E
_0800A378:
movs r0, #1
rsbs r0, r0, #0
ldr r1, [sp, #0x10]
cmp r1, r0
beq _0800A38E
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
movs r0, #0xa
mov r2, sb
bl LinkTest_prnthexchar
_0800A38E:
add sp, #0x14
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_end LinkTest_prntint
thumb_func_start LinkTest_prntstr
LinkTest_prntstr: @ 0x0800A3A0
push {r4, r5, r6, r7, lr}
adds r3, r0, #0
lsls r1, r1, #0x18
lsrs r7, r1, #0x18
lsls r2, r2, #0x18
lsrs r2, r2, #0x18
movs r6, #0
ldrb r0, [r3]
cmp r0, #0
beq _0800A3E0
adds r4, r3, #0
lsls r5, r2, #0x18
_0800A3B8:
ldrb r0, [r4]
cmp r0, #0xa
bne _0800A3C8
movs r0, #0x80
lsls r0, r0, #0x11
adds r5, r5, r0
movs r6, #0
b _0800A3D8
_0800A3C8:
ldrb r0, [r4]
adds r1, r7, r6
lsls r1, r1, #0x18
lsrs r1, r1, #0x18
lsrs r2, r5, #0x18
bl LinkTest_prntchar
adds r6, #1
_0800A3D8:
adds r4, #1
ldrb r0, [r4]
cmp r0, #0
bne _0800A3B8
_0800A3E0:
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
thumb_func_end LinkTest_prntstr
thumb_func_start LinkCB_RequestPlayerDataExchange
LinkCB_RequestPlayerDataExchange: @ 0x0800A3E8
push {lr}
ldr r0, _0800A408
ldr r0, [r0]
movs r1, #0x20
ands r0, r1
cmp r0, #0
beq _0800A3FC
ldr r0, _0800A40C
bl BuildSendCmd
_0800A3FC:
ldr r1, _0800A410
movs r0, #0
str r0, [r1]
pop {r0}
bx r0
.align 2, 0
_0800A408: .4byte 0x03003180
_0800A40C: .4byte 0x00002222
_0800A410: .4byte 0x030031E0
thumb_func_end LinkCB_RequestPlayerDataExchange
thumb_func_start Task_PrintTestData
Task_PrintTestData: @ 0x0800A414
push {r4, r5, r6, lr}
sub sp, #0x20
ldr r1, _0800A534
mov r0, sp
bl strcpy
mov r0, sp
movs r1, #5
movs r2, #2
bl LinkTest_prntstr
ldr r0, _0800A538
ldrb r0, [r0]
movs r1, #2
movs r2, #1
movs r3, #2
bl LinkTest_prnthex
ldr r4, _0800A53C
ldr r0, [r4]
movs r1, #0xf
movs r2, #1
movs r3, #8
bl LinkTest_prnthex
ldr r0, _0800A540
ldrb r0, [r0, #1]
movs r1, #2
movs r2, #0xa
movs r3, #2
bl LinkTest_prnthex
ldr r0, [r4]
movs r1, #0x1c
ands r0, r1
lsrs r0, r0, #2
movs r1, #0xf
movs r2, #0xa
movs r3, #2
bl LinkTest_prnthex
bl GetMultiplayerId
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0xf
movs r2, #0xc
movs r3, #2
bl LinkTest_prnthex
ldr r0, _0800A544
ldrb r0, [r0]
movs r1, #0x19
movs r2, #1
movs r3, #2
bl LinkTest_prnthex
ldr r0, _0800A548
ldrb r0, [r0]
movs r1, #0x19
movs r2, #2
movs r3, #2
bl LinkTest_prnthex
bl GetBlockReceivedStatus
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0xf
movs r2, #5
movs r3, #2
bl LinkTest_prnthex
ldr r0, _0800A54C
ldr r0, [r0]
movs r1, #2
movs r2, #0xc
movs r3, #8
bl LinkTest_prnthex
ldr r0, _0800A550
ldr r0, [r0]
movs r1, #2
movs r2, #0xd
movs r3, #8
bl LinkTest_prnthex
bl GetSioMultiSI
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0x19
movs r2, #5
movs r3, #1
bl LinkTest_prnthex
bl IsSioMultiMaster
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0x19
movs r2, #6
movs r3, #1
bl LinkTest_prnthex
bl IsLinkConnectionEstablished
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0x19
movs r2, #7
movs r3, #1
bl LinkTest_prnthex
bl HasLinkErrorOccurred
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
movs r1, #0x19
movs r2, #8
movs r3, #1
bl LinkTest_prnthex
movs r6, #0
movs r5, #0x80
lsls r5, r5, #0x13
ldr r4, _0800A554
_0800A512:
ldrh r0, [r4]
lsrs r2, r5, #0x18
movs r1, #0xa
movs r3, #4
bl LinkTest_prnthex
movs r0, #0x80
lsls r0, r0, #0x11
adds r5, r5, r0
adds r4, #2
adds r6, #1
cmp r6, #3
ble _0800A512
add sp, #0x20
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_0800A534: .4byte 0x082BFF34
_0800A538: .4byte 0x030031E4
_0800A53C: .4byte 0x03003180
_0800A540: .4byte 0x03003210
_0800A544: .4byte 0x03003200
_0800A548: .4byte 0x030041D0
_0800A54C: .4byte 0x030030CC
_0800A550: .4byte 0x03003110
_0800A554: .4byte 0x030031E8
thumb_func_end Task_PrintTestData
thumb_func_start SetLinkDebugValues
SetLinkDebugValues: @ 0x0800A558
ldr r2, _0800A564
str r0, [r2]
ldr r0, _0800A568
str r1, [r0]
bx lr
.align 2, 0
_0800A564: .4byte 0x030030CC
_0800A568: .4byte 0x03003110
thumb_func_end SetLinkDebugValues
thumb_func_start sub_0800A56C
sub_0800A56C: @ 0x0800A56C
push {r4, lr}
movs r1, #0
movs r2, #0
ldr r0, _0800A598
ldrb r0, [r0]
cmp r1, r0
bge _0800A58E
movs r4, #1
adds r3, r0, #0
_0800A57E:
adds r0, r4, #0
lsls r0, r2
orrs r1, r0
lsls r0, r1, #0x18
lsrs r1, r0, #0x18
adds r2, #1
cmp r2, r3
blt _0800A57E
_0800A58E:
adds r0, r1, #0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_0800A598: .4byte 0x030031A0
thumb_func_end sub_0800A56C
thumb_func_start sub_0800A59C
sub_0800A59C: @ 0x0800A59C
push {r4, r5, r6, lr}
movs r4, #0
movs r5, #0
movs r6, #1
b _0800A5B2
_0800A5A6:
adds r0, r6, #0
lsls r0, r5
orrs r4, r0
lsls r0, r4, #0x18
lsrs r4, r0, #0x18
adds r5, #1
_0800A5B2:
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r5, r0
blt _0800A5A6
adds r0, r4, #0
pop {r4, r5, r6}
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_0800A59C
thumb_func_start sub_0800A5C8
sub_0800A5C8: @ 0x0800A5C8
push {r4, r5, r6, r7, lr}
ldr r1, _0800A5FC
strb r0, [r1]
bl GetMultiplayerId
ldr r1, _0800A600
strb r0, [r1]
ldr r4, _0800A604
ldr r3, _0800A608
movs r2, #4
_0800A5DC:
adds r0, r3, #0
adds r1, r4, #0
ldm r1!, {r5, r6, r7}
stm r0!, {r5, r6, r7}
ldm r1!, {r5, r6, r7}
stm r0!, {r5, r6, r7}
ldr r1, [r1]
str r1, [r0]
adds r4, #0x1c
adds r3, #0x1c
subs r2, #1
cmp r2, #0
bge _0800A5DC
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0800A5FC: .4byte 0x030031A0
_0800A600: .4byte 0x030031C0
_0800A604: .4byte 0x020226A0
_0800A608: .4byte 0x0202272C
thumb_func_end sub_0800A5C8
thumb_func_start GetSavedPlayerCount
GetSavedPlayerCount: @ 0x0800A60C
ldr r0, _0800A614
ldrb r0, [r0]
bx lr
.align 2, 0
_0800A614: .4byte 0x030031A0
thumb_func_end GetSavedPlayerCount
thumb_func_start sub_0800A618
sub_0800A618: @ 0x0800A618
ldr r0, _0800A620
ldrb r0, [r0]
bx lr
.align 2, 0
_0800A620: .4byte 0x030031C0
thumb_func_end sub_0800A618
thumb_func_start sub_0800A624
sub_0800A624: @ 0x0800A624
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
movs r3, #0
ldr r0, _0800A694
ldrb r1, [r0]
mov sb, r0
cmp r3, r1
bge _0800A678
ldr r0, _0800A698
mov ip, r0
ldr r0, _0800A69C
ldr r2, _0800A6A0
mov r8, r2
ldr r7, _0800A6A4
mov r6, ip
adds r6, #0x14
adds r5, r0, #4
movs r4, #0
adds r2, r1, #0
_0800A64E:
mov r0, ip
adds r0, #4
adds r0, r4, r0
ldr r1, [r0]
ldr r0, [r5]
cmp r1, r0
bne _0800A66C
ldrh r0, [r7]
cmp r0, r8
bne _0800A66A
adds r1, r0, #0
ldr r0, [r6]
cmp r1, r0
bne _0800A66C
_0800A66A:
adds r3, #1
_0800A66C:
adds r6, #0x1c
adds r5, #0x1c
adds r4, #0x1c
subs r2, #1
cmp r2, #0
bne _0800A64E
_0800A678:
mov r0, sb
ldrb r0, [r0]
cmp r3, r0
bne _0800A6A8
bl GetLinkPlayerCount_2
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
mov r1, sb
ldrb r1, [r1]
cmp r0, r1
bne _0800A6A8
movs r0, #1
b _0800A6AA
.align 2, 0
_0800A694: .4byte 0x030031A0
_0800A698: .4byte 0x020226A0
_0800A69C: .4byte 0x0202272C
_0800A6A0: .4byte 0x00002288
_0800A6A4: .4byte 0x0202267E
_0800A6A8:
movs r0, #0
_0800A6AA:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
thumb_func_end sub_0800A624
thumb_func_start sub_0800A6B8
sub_0800A6B8: @ 0x0800A6B8
push {r4, r5, lr}
ldr r5, _0800A6D8
movs r4, #3
_0800A6BE:
adds r0, r5, #0
movs r1, #0
movs r2, #0x1c
bl CpuSet
adds r5, #0x1c
subs r4, #1
cmp r4, #0
bge _0800A6BE
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800A6D8: .4byte 0x0202272C
thumb_func_end sub_0800A6B8
thumb_func_start sub_0800A6DC
sub_0800A6DC: @ 0x0800A6DC
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
movs r4, #0
ldr r0, _0800A748
ldrb r0, [r0]
cmp r4, r0
bhs _0800A73C
ldr r6, _0800A74C
ldr r5, _0800A750
movs r0, #8
adds r0, r0, r6
mov r8, r0
adds r7, r5, #0
adds r7, #8
_0800A6FA:
lsls r0, r4, #3
subs r0, r0, r4
lsls r2, r0, #2
adds r1, r6, #4
adds r1, r2, r1
adds r0, r5, #4
adds r0, r2, r0
ldr r1, [r1]
ldr r0, [r0]
cmp r1, r0
bne _0800A71E
mov r1, r8
adds r0, r2, r1
adds r1, r2, r7
bl StringCompare
cmp r0, #0
beq _0800A72E
_0800A71E:
ldr r1, _0800A754
movs r0, #1
strb r0, [r1]
bl CloseLink
ldr r0, _0800A758
bl SetMainCallback2
_0800A72E:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
ldr r0, _0800A748
ldrb r0, [r0]
cmp r4, r0
blo _0800A6FA
_0800A73C:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0800A748: .4byte 0x030031A0
_0800A74C: .4byte 0x0202272C
_0800A750: .4byte 0x020226A0
_0800A754: .4byte 0x0300310C
_0800A758: .4byte 0x0800AA0D
thumb_func_end sub_0800A6DC
thumb_func_start sub_0800A75C
sub_0800A75C: @ 0x0800A75C
ldr r0, _0800A768
movs r1, #0
strb r1, [r0]
ldr r0, _0800A76C
strb r1, [r0]
bx lr
.align 2, 0
_0800A768: .4byte 0x030031A0
_0800A76C: .4byte 0x030031C0
thumb_func_end sub_0800A75C
thumb_func_start GetLinkPlayerCount_2
GetLinkPlayerCount_2: @ 0x0800A770
ldr r0, _0800A77C
ldr r0, [r0]
movs r1, #0x1c
ands r0, r1
lsrs r0, r0, #2
bx lr
.align 2, 0
_0800A77C: .4byte 0x03003180
thumb_func_end GetLinkPlayerCount_2
thumb_func_start IsLinkMaster
IsLinkMaster: @ 0x0800A780
push {lr}
ldr r0, _0800A798
ldrb r0, [r0]
cmp r0, #0
bne _0800A7A0
ldr r0, _0800A79C
ldr r0, [r0]
lsrs r0, r0, #5
movs r1, #1
ands r0, r1
b _0800A7A8
.align 2, 0
_0800A798: .4byte 0x0300319C
_0800A79C: .4byte 0x03003180
_0800A7A0:
bl Rfu_IsMaster
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
_0800A7A8:
pop {r1}
bx r1
thumb_func_end IsLinkMaster
thumb_func_start sub_0800A7AC
sub_0800A7AC: @ 0x0800A7AC
ldr r0, _0800A7B4
ldrb r0, [r0]
bx lr
.align 2, 0
_0800A7B4: .4byte 0x03000D58
thumb_func_end sub_0800A7AC
thumb_func_start sub_0800A7B8
sub_0800A7B8: @ 0x0800A7B8
push {lr}
lsls r0, r0, #0x10
lsrs r3, r0, #0x10
ldr r0, _0800A7CC
ldrb r0, [r0]
cmp r0, #1
bne _0800A7D0
bl task_add_05_task_del_08FA224_when_no_RfuFunc
b _0800A7E4
.align 2, 0
_0800A7CC: .4byte 0x0300319C
_0800A7D0:
ldr r2, _0800A7E8
ldr r1, [r2]
cmp r1, #0
bne _0800A7E4
ldr r0, _0800A7EC
str r0, [r2]
ldr r0, _0800A7F0
strb r1, [r0]
ldr r0, _0800A7F4
strh r3, [r0]
_0800A7E4:
pop {r0}
bx r0
.align 2, 0
_0800A7E8: .4byte 0x030031E0
_0800A7EC: .4byte 0x0800A845
_0800A7F0: .4byte 0x03003184
_0800A7F4: .4byte 0x03003194
thumb_func_end sub_0800A7B8
thumb_func_start sub_0800A7F8
sub_0800A7F8: @ 0x0800A7F8
push {lr}
ldr r0, _0800A808
ldrb r0, [r0]
cmp r0, #1
bne _0800A80C
bl task_add_05_task_del_08FA224_when_no_RfuFunc
b _0800A834
.align 2, 0
_0800A808: .4byte 0x0300319C
_0800A80C:
ldr r2, _0800A820
ldr r1, [r2]
cmp r1, #0
beq _0800A828
ldr r1, _0800A824
ldrh r0, [r1]
adds r0, #1
strh r0, [r1]
b _0800A834
.align 2, 0
_0800A820: .4byte 0x030031E0
_0800A824: .4byte 0x020227C0
_0800A828:
ldr r0, _0800A838
str r0, [r2]
ldr r0, _0800A83C
strb r1, [r0]
ldr r0, _0800A840
strh r1, [r0]
_0800A834:
pop {r0}
bx r0
.align 2, 0
_0800A838: .4byte 0x0800A845
_0800A83C: .4byte 0x03003184
_0800A840: .4byte 0x03003194
thumb_func_end sub_0800A7F8
thumb_func_start sub_0800A844
sub_0800A844: @ 0x0800A844
push {lr}
ldr r0, _0800A860
ldrb r0, [r0]
cmp r0, #0
bne _0800A85A
ldr r0, _0800A864
bl BuildSendCmd
ldr r1, _0800A868
ldr r0, _0800A86C
str r0, [r1]
_0800A85A:
pop {r0}
bx r0
.align 2, 0
_0800A860: .4byte 0x030041D0
_0800A864: .4byte 0x00005FFF
_0800A868: .4byte 0x030031E0
_0800A86C: .4byte 0x0800A871
thumb_func_end sub_0800A844
thumb_func_start sub_0800A870
sub_0800A870: @ 0x0800A870
push {r4, lr}
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
movs r3, #0
movs r1, #0
cmp r3, r2
bge _0800A894
ldr r4, _0800A8C0
_0800A884:
adds r0, r1, r4
ldrb r0, [r0]
cmp r0, #0
beq _0800A88E
adds r3, #1
_0800A88E:
adds r1, #1
cmp r1, r2
blt _0800A884
_0800A894:
cmp r3, r2
bne _0800A8B8
ldr r2, _0800A8C4
ldr r0, [r2]
movs r1, #0x21
rsbs r1, r1, #0
ands r0, r1
str r0, [r2]
ldr r0, _0800A8C8
movs r4, #1
strb r4, [r0]
bl CloseLink
ldr r1, _0800A8CC
movs r0, #0
str r0, [r1]
ldr r0, _0800A8D0
strb r4, [r0]
_0800A8B8:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800A8C0: .4byte 0x03003190
_0800A8C4: .4byte 0x02022C90
_0800A8C8: .4byte 0x030027E8
_0800A8CC: .4byte 0x030031E0
_0800A8D0: .4byte 0x03003184
thumb_func_end sub_0800A870
thumb_func_start sub_0800A8D4
sub_0800A8D4: @ 0x0800A8D4
push {lr}
ldr r0, _0800A8E4
ldrb r0, [r0]
cmp r0, #1
bne _0800A8E8
bl sub_0800FF34
b _0800A8FA
.align 2, 0
_0800A8E4: .4byte 0x0300319C
_0800A8E8:
ldr r1, _0800A900
ldr r0, [r1]
cmp r0, #0
bne _0800A8F4
ldr r0, _0800A904
str r0, [r1]
_0800A8F4:
ldr r1, _0800A908
movs r0, #0
strb r0, [r1]
_0800A8FA:
pop {r0}
bx r0
.align 2, 0
_0800A900: .4byte 0x030031E0
_0800A904: .4byte 0x0800A90D
_0800A908: .4byte 0x03003184
thumb_func_end sub_0800A8D4
thumb_func_start sub_0800A90C
sub_0800A90C: @ 0x0800A90C
push {lr}
ldr r0, _0800A928
ldrb r0, [r0]
cmp r0, #0
bne _0800A922
ldr r0, _0800A92C
bl BuildSendCmd
ldr r1, _0800A930
ldr r0, _0800A934
str r0, [r1]
_0800A922:
pop {r0}
bx r0
.align 2, 0
_0800A928: .4byte 0x030041D0
_0800A92C: .4byte 0x00002FFE
_0800A930: .4byte 0x030031E0
_0800A934: .4byte 0x0800A939
thumb_func_end sub_0800A90C
thumb_func_start sub_0800A938
sub_0800A938: @ 0x0800A938
push {r4, lr}
bl GetLinkPlayerCount
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
movs r1, #0
cmp r1, r2
bhs _0800A962
ldr r3, _0800A988
ldrb r0, [r3]
cmp r0, #0
beq _0800A962
_0800A950:
adds r0, r1, #1
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, r2
bhs _0800A962
adds r0, r1, r3
ldrb r0, [r0]
cmp r0, #0
bne _0800A950
_0800A962:
cmp r1, r2
bne _0800A980
movs r1, #0
ldr r4, _0800A98C
ldr r3, _0800A988
movs r2, #0
_0800A96E:
adds r0, r1, r3
strb r2, [r0]
adds r0, r1, #1
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #3
bls _0800A96E
movs r0, #0
str r0, [r4]
_0800A980:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800A988: .4byte 0x0300318C
_0800A98C: .4byte 0x030031E0
thumb_func_end sub_0800A938
thumb_func_start CheckErrorStatus
CheckErrorStatus: @ 0x0800A990
push {lr}
ldr r0, _0800A9D4
ldrb r0, [r0]
cmp r0, #0
beq _0800A9D0
ldr r0, _0800A9D8
ldr r2, [r0]
movs r0, #0xfe
lsls r0, r0, #0xb
ands r0, r2
cmp r0, #0
beq _0800A9D0
ldr r0, _0800A9DC
ldrb r0, [r0]
cmp r0, #0
bne _0800A9C6
ldr r1, _0800A9E0
str r2, [r1]
ldr r0, _0800A9E4
ldrb r0, [r0]
strb r0, [r1, #4]
ldr r0, _0800A9E8
ldrb r0, [r0]
strb r0, [r1, #5]
ldr r0, _0800A9EC
bl SetMainCallback2
_0800A9C6:
ldr r1, _0800A9F0
movs r0, #1
strb r0, [r1]
bl CloseLink
_0800A9D0:
pop {r0}
bx r0
.align 2, 0
_0800A9D4: .4byte 0x0202267C
_0800A9D8: .4byte 0x03003180
_0800A9DC: .4byte 0x03003198
_0800A9E0: .4byte 0x020227B8
_0800A9E4: .4byte 0x030041D0
_0800A9E8: .4byte 0x03003200
_0800A9EC: .4byte 0x0800AA0D
_0800A9F0: .4byte 0x0300310C
thumb_func_end CheckErrorStatus
thumb_func_start sub_0800A9F4
sub_0800A9F4: @ 0x0800A9F4
push {r4, lr}
ldr r4, _0800AA08
str r0, [r4]
strb r1, [r4, #5]
strb r2, [r4, #4]
strb r3, [r4, #6]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800AA08: .4byte 0x020227B8
thumb_func_end sub_0800A9F4
thumb_func_start CB2_LinkError
CB2_LinkError: @ 0x0800AA0C
push {r4, lr}
movs r0, #0
movs r1, #0
bl SetGpuReg
ldr r0, _0800AB20
bl m4aMPlayStop
ldr r0, _0800AB24
bl m4aMPlayStop
ldr r0, _0800AB28
bl m4aMPlayStop
ldr r0, _0800AB2C
movs r1, #0xe0
lsls r1, r1, #9
bl InitHeap
bl ResetSpriteData
bl FreeAllSpritePalettes
bl ResetPaletteFadeControl
movs r0, #0
movs r1, #0
movs r2, #2
bl FillPalette
bl ResetTasks
bl ScanlineEffect_Stop
ldr r1, _0800AB30
ldrb r0, [r1]
cmp r0, #0
beq _0800AA68
ldr r0, _0800AB34
ldrb r0, [r0, #6]
cmp r0, #0
bne _0800AA64
movs r0, #3
strb r0, [r1]
_0800AA64:
bl sub_0800E0C8
_0800AA68:
ldr r0, _0800AB38
bl SetVBlankCallback
movs r0, #0
bl ResetBgsAndClearDma3BusyFlags
ldr r1, _0800AB3C
movs r0, #0
movs r2, #2
bl InitBgsFromTemplates
ldr r4, _0800AB40
movs r0, #0x80
lsls r0, r0, #4
bl Alloc
adds r1, r0, #0
str r1, [r4]
movs r0, #1
bl SetBgTilemapBuffer
ldr r0, _0800AB44
bl InitWindows
lsls r0, r0, #0x10
cmp r0, #0
beq _0800AB18
bl DeactivateAllTextPrinters
bl reset_temp_tile_data_buffers
movs r0, #0x50
movs r1, #0
bl SetGpuReg
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, r1, #8
movs r0, #0
bl ClearGpuRegBits
ldr r0, _0800AB48
movs r1, #0xf0
movs r2, #0x20
bl LoadPalette
ldr r1, _0800AB4C
movs r0, #0
strb r0, [r1]
ldr r0, _0800AB50
movs r1, #0
bl CreateTask
bl StopMapMusic
ldr r1, _0800AB54
movs r0, #0
str r0, [r1]
bl RunTasks
bl AnimateSprites
bl BuildOamBuffer
bl UpdatePaletteFade
ldr r0, _0800AB58
bl SetMainCallback2
_0800AB18:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800AB20: .4byte 0x03007510
_0800AB24: .4byte 0x03007550
_0800AB28: .4byte 0x030075A0
_0800AB2C: .4byte 0x02000000
_0800AB30: .4byte 0x0300319C
_0800AB34: .4byte 0x020227B8
_0800AB38: .4byte 0x08009259
_0800AB3C: .4byte 0x082BFF4C
_0800AB40: .4byte 0x020227C4
_0800AB44: .4byte 0x082BFF54
_0800AB48: .4byte 0x085D7B04
_0800AB4C: .4byte 0x030027A0
_0800AB50: .4byte 0x08008FA1
_0800AB54: .4byte 0x03002360
_0800AB58: .4byte 0x0800AC7D
thumb_func_end CB2_LinkError
thumb_func_start sub_0800AB5C
sub_0800AB5C: @ 0x0800AB5C
push {r4, r5, lr}
sub sp, #0xc
ldr r1, _0800ABF8
movs r0, #0
movs r2, #0x20
movs r3, #0
bl LoadBgTiles
ldr r1, _0800ABFC
movs r5, #0
str r5, [sp]
movs r0, #1
movs r2, #0
movs r3, #0
bl DecompressAndLoadBgGfxUsingHeap
ldr r1, _0800AC00
movs r0, #1
movs r2, #0
movs r3, #0
bl CopyToBgTilemapBuffer
movs r0, #1
bl CopyBgTilemapBufferToVram
ldr r0, _0800AC04
movs r1, #0
movs r2, #0x20
bl LoadPalette
movs r0, #0
movs r1, #0
bl FillWindowPixelBuffer
movs r0, #2
movs r1, #0
bl FillWindowPixelBuffer
ldr r4, _0800AC08
str r4, [sp]
str r5, [sp, #4]
ldr r0, _0800AC0C
str r0, [sp, #8]
movs r0, #0
movs r1, #3
movs r2, #0x18
movs r3, #5
bl AddTextPrinterParameterized3
str r4, [sp]
str r5, [sp, #4]
ldr r0, _0800AC10
str r0, [sp, #8]
movs r0, #2
movs r1, #3
movs r2, #3
movs r3, #2
bl AddTextPrinterParameterized3
movs r0, #0
bl PutWindowTilemap
movs r0, #2
bl PutWindowTilemap
movs r0, #0
movs r1, #0
bl CopyWindowToVram
movs r0, #2
movs r1, #3
bl CopyWindowToVram
add sp, #0xc
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800ABF8: .4byte 0x082BFEB8
_0800ABFC: .4byte 0x082BF4D8
_0800AC00: .4byte 0x082BF980
_0800AC04: .4byte 0x082BF4B8
_0800AC08: .4byte 0x082BFF74
_0800AC0C: .4byte 0x082BFE50
_0800AC10: .4byte 0x082BFE62
thumb_func_end sub_0800AB5C
thumb_func_start sub_0800AC14
sub_0800AC14: @ 0x0800AC14
push {lr}
sub sp, #0xc
ldr r1, _0800AC70
movs r0, #0
movs r2, #0x20
movs r3, #0
bl LoadBgTiles
movs r0, #1
movs r1, #0
bl FillWindowPixelBuffer
movs r0, #2
movs r1, #0
bl FillWindowPixelBuffer
ldr r0, _0800AC74
str r0, [sp]
movs r0, #0
str r0, [sp, #4]
ldr r0, _0800AC78
str r0, [sp, #8]
movs r0, #1
movs r1, #3
movs r2, #3
movs r3, #0
bl AddTextPrinterParameterized3
movs r0, #1
bl PutWindowTilemap
movs r0, #2
bl PutWindowTilemap
movs r0, #1
movs r1, #0
bl CopyWindowToVram
movs r0, #2
movs r1, #3
bl CopyWindowToVram
add sp, #0xc
pop {r0}
bx r0
.align 2, 0
_0800AC70: .4byte 0x082BFEB8
_0800AC74: .4byte 0x082BFF74
_0800AC78: .4byte 0x082BFE00
thumb_func_end sub_0800AC14
thumb_func_start CB2_PrintErrorMessage
CB2_PrintErrorMessage: @ 0x0800AC7C
push {r4, lr}
sub sp, #0xc
ldr r0, _0800AC9C
movs r1, #0x87
lsls r1, r1, #3
adds r0, r0, r1
ldrb r0, [r0]
cmp r0, #0x1e
beq _0800ACE8
cmp r0, #0x1e
bgt _0800ACA0
cmp r0, #0
beq _0800ACB4
cmp r0, #2
beq _0800ACCE
b _0800AD3C
.align 2, 0
_0800AC9C: .4byte 0x03002360
_0800ACA0:
cmp r0, #0x5a
beq _0800ACE8
cmp r0, #0x5a
bgt _0800ACAE
cmp r0, #0x3c
beq _0800ACE8
b _0800AD3C
_0800ACAE:
cmp r0, #0x82
beq _0800ACF0
b _0800AD3C
_0800ACB4:
ldr r0, _0800ACC4
ldrb r0, [r0, #6]
cmp r0, #0
beq _0800ACC8
bl sub_0800AB5C
b _0800AD3C
.align 2, 0
_0800ACC4: .4byte 0x020227B8
_0800ACC8:
bl sub_0800AC14
b _0800AD3C
_0800ACCE:
movs r0, #0
bl ShowBg
ldr r0, _0800ACE4
ldrb r0, [r0, #6]
cmp r0, #0
beq _0800AD3C
movs r0, #1
bl ShowBg
b _0800AD3C
.align 2, 0
_0800ACE4: .4byte 0x020227B8
_0800ACE8:
movs r0, #0x16
bl PlaySE
b _0800AD3C
_0800ACF0:
ldr r0, _0800AD14
ldrb r0, [r0]
cmp r0, #2
bne _0800AD20
ldr r0, _0800AD18
str r0, [sp]
movs r0, #0
str r0, [sp, #4]
ldr r0, _0800AD1C
str r0, [sp, #8]
movs r0, #0
movs r1, #3
movs r2, #0x18
movs r3, #0x12
bl AddTextPrinterParameterized3
b _0800AD3C
.align 2, 0
_0800AD14: .4byte 0x0300319C
_0800AD18: .4byte 0x082BFF74
_0800AD1C: .4byte 0x082BFE9F
_0800AD20:
cmp r0, #1
bne _0800AD3C
ldr r0, _0800AD70
str r0, [sp]
movs r0, #0
str r0, [sp, #4]
ldr r0, _0800AD74
str r0, [sp, #8]
movs r0, #0
movs r1, #3
movs r2, #0x18
movs r3, #0x12
bl AddTextPrinterParameterized3
_0800AD3C:
ldr r0, _0800AD78
movs r2, #0x87
lsls r2, r2, #3
adds r1, r0, r2
ldrb r1, [r1]
cmp r1, #0xa0
bne _0800ADAC
ldr r4, _0800AD7C
ldrb r2, [r4]
cmp r2, #1
bne _0800AD84
ldrh r0, [r0, #0x2e]
ands r2, r0
cmp r2, #0
beq _0800AD9E
movs r0, #0x15
bl PlaySE
movs r0, #0
strb r0, [r4]
ldr r1, _0800AD80
movs r0, #0
strb r0, [r1, #6]
bl sub_0816FEF0
b _0800AD9E
.align 2, 0
_0800AD70: .4byte 0x082BFF74
_0800AD74: .4byte 0x082BFE8D
_0800AD78: .4byte 0x03002360
_0800AD7C: .4byte 0x0300319C
_0800AD80: .4byte 0x020227B8
_0800AD84:
cmp r2, #2
bne _0800AD9E
ldrh r1, [r0, #0x2e]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _0800AD9E
bl rfu_REQ_stopMode
bl rfu_waitREQComplete
bl DoSoftReset
_0800AD9E:
ldr r0, _0800ADC0
movs r2, #0x87
lsls r2, r2, #3
adds r1, r0, r2
ldrb r1, [r1]
cmp r1, #0xa0
beq _0800ADB8
_0800ADAC:
movs r2, #0x87
lsls r2, r2, #3
adds r1, r0, r2
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
_0800ADB8:
add sp, #0xc
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800ADC0: .4byte 0x03002360
thumb_func_end CB2_PrintErrorMessage
thumb_func_start GetSioMultiSI
GetSioMultiSI: @ 0x0800ADC4
ldr r0, _0800ADD0
ldrh r0, [r0]
lsrs r0, r0, #2
movs r1, #1
ands r0, r1
bx lr
.align 2, 0
_0800ADD0: .4byte 0x04000128
thumb_func_end GetSioMultiSI
thumb_func_start IsSioMultiMaster
IsSioMultiMaster: @ 0x0800ADD4
push {lr}
movs r3, #0
ldr r2, _0800ADF8
ldrh r1, [r2]
movs r0, #8
ands r0, r1
cmp r0, #0
beq _0800ADF0
ldrh r1, [r2]
movs r0, #4
ands r0, r1
cmp r0, #0
bne _0800ADF0
movs r3, #1
_0800ADF0:
adds r0, r3, #0
pop {r1}
bx r1
.align 2, 0
_0800ADF8: .4byte 0x04000128
thumb_func_end IsSioMultiMaster
thumb_func_start IsLinkConnectionEstablished
IsLinkConnectionEstablished: @ 0x0800ADFC
ldr r0, _0800AE08
ldr r0, [r0]
lsrs r0, r0, #6
movs r1, #1
ands r0, r1
bx lr
.align 2, 0
_0800AE08: .4byte 0x03003180
thumb_func_end IsLinkConnectionEstablished
thumb_func_start SetSuppressLinkErrorMessage
SetSuppressLinkErrorMessage: @ 0x0800AE0C
ldr r1, _0800AE14
strb r0, [r1]
bx lr
.align 2, 0
_0800AE14: .4byte 0x03003198
thumb_func_end SetSuppressLinkErrorMessage
thumb_func_start HasLinkErrorOccurred
HasLinkErrorOccurred: @ 0x0800AE18
ldr r0, _0800AE20
ldrb r0, [r0]
bx lr
.align 2, 0
_0800AE20: .4byte 0x0300310C
thumb_func_end HasLinkErrorOccurred
thumb_func_start sub_0800AE24
sub_0800AE24: @ 0x0800AE24
push {r4, r5, r6, lr}
bl InitLocalLinkPlayer
ldr r1, _0800AE70
adds r2, r1, #0
adds r2, #0x10
ldr r0, _0800AE74
ldm r0!, {r3, r4, r5}
stm r2!, {r3, r4, r5}
ldm r0!, {r3, r4, r6}
stm r2!, {r3, r4, r6}
ldr r0, [r0]
str r0, [r2]
ldr r3, _0800AE78
adds r2, r1, #0
adds r0, r3, #0
ldm r0!, {r4, r5, r6}
stm r2!, {r4, r5, r6}
ldrh r4, [r0]
strh r4, [r2]
ldrb r0, [r0, #2]
strb r0, [r2, #2]
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, #2]
strb r2, [r0, #2]
ldr r0, _0800AE7C
movs r2, #0x3c
bl memcpy
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_0800AE70: .4byte 0x030030D0
_0800AE74: .4byte 0x02022684
_0800AE78: .4byte 0x082BFF24
_0800AE7C: .4byte 0x0202257C
thumb_func_end sub_0800AE24
thumb_func_start sub_0800AE80
sub_0800AE80: @ 0x0800AE80
push {r4, r5, lr}
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r2, r0, #8
ldr r1, _0800AED0
adds r4, r2, r1
lsls r1, r0, #3
subs r1, r1, r0
lsls r1, r1, #2
ldr r0, _0800AED4
adds r1, r1, r0
adds r0, r4, #0
adds r0, #0x10
ldm r0!, {r2, r3, r5}
stm r1!, {r2, r3, r5}
ldm r0!, {r2, r3, r5}
stm r1!, {r2, r3, r5}
ldr r0, [r0]
str r0, [r1]
ldr r5, _0800AED8
adds r0, r4, #0
adds r1, r5, #0
bl strcmp
cmp r0, #0
bne _0800AEC2
adds r0, r4, #0
adds r0, #0x2c
adds r1, r5, #0
bl strcmp
cmp r0, #0
beq _0800AEC8
_0800AEC2:
ldr r0, _0800AEDC
bl SetMainCallback2
_0800AEC8:
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800AED0: .4byte 0x0202207C
_0800AED4: .4byte 0x020226A0
_0800AED8: .4byte 0x082BFF24
_0800AEDC: .4byte 0x0800AA0D
thumb_func_end sub_0800AE80
thumb_func_start HandleLinkConnection
HandleLinkConnection: @ 0x0800AEE0
push {r4, r5, lr}
ldr r0, _0800AF18
ldrb r0, [r0]
cmp r0, #0
bne _0800AF30
ldr r0, _0800AF1C
ldr r1, _0800AF20
ldr r2, _0800AF24
bl LinkMain1
ldr r4, _0800AF28
str r0, [r4]
ldr r0, _0800AF2C
bl LinkMain2
ldr r0, [r4]
movs r1, #0x80
lsls r1, r1, #1
ands r0, r1
cmp r0, #0
beq _0800AF54
bl sub_08086FD0
cmp r0, #1
bne _0800AF54
_0800AF12:
movs r0, #1
b _0800AF56
.align 2, 0
_0800AF18: .4byte 0x0300319C
_0800AF1C: .4byte 0x030031E4
_0800AF20: .4byte 0x030031B0
_0800AF24: .4byte 0x03003130
_0800AF28: .4byte 0x03003180
_0800AF2C: .4byte 0x0300238C
_0800AF30:
bl sub_080109B0
adds r4, r0, #0
bl sub_08010A0C
adds r5, r0, #0
bl sub_08086FD0
cmp r0, #1
bne _0800AF54
cmp r4, #1
beq _0800AF12
bl IsRfuRecvQueueEmpty
cmp r0, #0
bne _0800AF12
cmp r5, #0
bne _0800AF12
_0800AF54:
movs r0, #0
_0800AF56:
pop {r4, r5}
pop {r1}
bx r1
thumb_func_end HandleLinkConnection
thumb_func_start sub_0800AF5C
sub_0800AF5C: @ 0x0800AF5C
push {lr}
ldr r0, _0800AF70
ldrb r0, [r0]
cmp r0, #0
bne _0800AF6C
ldr r1, _0800AF74
movs r0, #1
strb r0, [r1]
_0800AF6C:
pop {r0}
bx r0
.align 2, 0
_0800AF70: .4byte 0x030031C4
_0800AF74: .4byte 0x0300319C
thumb_func_end sub_0800AF5C
thumb_func_start sub_0800AF78
sub_0800AF78: @ 0x0800AF78
push {lr}
ldr r0, _0800AF8C
ldrb r1, [r0]
cmp r1, #0
bne _0800AF86
ldr r0, _0800AF90
strb r1, [r0]
_0800AF86:
pop {r0}
bx r0
.align 2, 0
_0800AF8C: .4byte 0x030031C4
_0800AF90: .4byte 0x0300319C
thumb_func_end sub_0800AF78
thumb_func_start sub_0800AF94
sub_0800AF94: @ 0x0800AF94
push {lr}
ldr r0, _0800AFA8
ldrb r1, [r0]
cmp r1, #0
bne _0800AFA2
ldr r0, _0800AFAC
strb r1, [r0]
_0800AFA2:
pop {r0}
bx r0
.align 2, 0
_0800AFA8: .4byte 0x030031C4
_0800AFAC: .4byte 0x0300319C
thumb_func_end sub_0800AF94
thumb_func_start GetLinkRecvQueueLength
GetLinkRecvQueueLength: @ 0x0800AFB0
push {lr}
ldr r0, _0800AFC4
ldrb r0, [r0]
cmp r0, #0
bne _0800AFD0
ldr r0, _0800AFC8
ldr r1, _0800AFCC
adds r0, r0, r1
ldrb r0, [r0]
b _0800AFD4
.align 2, 0
_0800AFC4: .4byte 0x0300319C
_0800AFC8: .4byte 0x03003210
_0800AFCC: .4byte 0x00000FBD
_0800AFD0:
bl sub_08011FC0
_0800AFD4:
pop {r1}
bx r1
thumb_func_end GetLinkRecvQueueLength
thumb_func_start sub_0800AFD8
sub_0800AFD8: @ 0x0800AFD8
push {lr}
bl GetLinkRecvQueueLength
cmp r0, #2
bhi _0800AFE6
movs r0, #0
b _0800AFE8
_0800AFE6:
movs r0, #1
_0800AFE8:
pop {r1}
bx r1
thumb_func_end sub_0800AFD8
thumb_func_start sub_0800AFEC
sub_0800AFEC: @ 0x0800AFEC
ldr r0, _0800AFF4
ldrb r0, [r0]
bx lr
.align 2, 0
_0800AFF4: .4byte 0x0300319C
thumb_func_end sub_0800AFEC
thumb_func_start DisableSerial
DisableSerial: @ 0x0800AFF8
push {lr}
sub sp, #4
movs r0, #0xc0
bl DisableInterrupts
ldr r1, _0800B038
movs r2, #0x80
lsls r2, r2, #6
adds r0, r2, #0
strh r0, [r1]
ldr r0, _0800B03C
movs r2, #0
strh r2, [r0]
adds r1, #0xda
movs r0, #0xc0
strh r0, [r1]
ldr r0, _0800B040
strh r2, [r0]
ldr r2, _0800B044
movs r0, #0
movs r1, #0
str r0, [r2]
str r1, [r2, #4]
str r0, [sp]
ldr r1, _0800B048
ldr r2, _0800B04C
mov r0, sp
bl CpuSet
add sp, #4
pop {r0}
bx r0
.align 2, 0
_0800B038: .4byte 0x04000128
_0800B03C: .4byte 0x0400010E
_0800B040: .4byte 0x0400012A
_0800B044: .4byte 0x04000120
_0800B048: .4byte 0x03003210
_0800B04C: .4byte 0x050003F0
thumb_func_end DisableSerial
thumb_func_start EnableSerial
EnableSerial: @ 0x0800B050
push {r4, r5, lr}
sub sp, #4
movs r0, #0xc0
bl DisableInterrupts
ldr r0, _0800B0B0
movs r4, #0
strh r4, [r0]
ldr r2, _0800B0B4
movs r1, #0x80
lsls r1, r1, #6
adds r0, r1, #0
strh r0, [r2]
ldrh r0, [r2]
ldr r3, _0800B0B8
adds r1, r3, #0
orrs r0, r1
strh r0, [r2]
movs r0, #0x80
bl EnableInterrupts
ldr r0, _0800B0BC
strh r4, [r0]
movs r5, #0
str r5, [sp]
ldr r1, _0800B0C0
ldr r2, _0800B0C4
mov r0, sp
bl CpuSet
ldr r0, _0800B0C8
strb r4, [r0]
ldr r0, _0800B0CC
strh r5, [r0]
ldr r0, _0800B0D0
strh r5, [r0]
ldr r0, _0800B0D4
strb r4, [r0]
ldr r0, _0800B0D8
strb r4, [r0]
ldr r0, _0800B0DC
strb r4, [r0]
ldr r0, _0800B0E0
strb r4, [r0]
add sp, #4
pop {r4, r5}
pop {r0}
bx r0
.align 2, 0
_0800B0B0: .4byte 0x04000134
_0800B0B4: .4byte 0x04000128
_0800B0B8: .4byte 0x00004003
_0800B0BC: .4byte 0x0400012A
_0800B0C0: .4byte 0x03003210
_0800B0C4: .4byte 0x050003F0
_0800B0C8: .4byte 0x03000D6C
_0800B0CC: .4byte 0x03000D6E
_0800B0D0: .4byte 0x03000D70
_0800B0D4: .4byte 0x03000D72
_0800B0D8: .4byte 0x03000D73
_0800B0DC: .4byte 0x03003200
_0800B0E0: .4byte 0x030041D0
thumb_func_end EnableSerial
thumb_func_start ResetSerial
ResetSerial: @ 0x0800B0E4
push {lr}
bl EnableSerial
bl DisableSerial
pop {r0}
bx r0
.align 2, 0
thumb_func_end ResetSerial
thumb_func_start LinkMain1
LinkMain1: @ 0x0800B0F4
push {r4, r5, r6, r7, lr}
adds r4, r0, #0
adds r5, r1, #0
adds r6, r2, #0
ldr r0, _0800B110
ldrb r0, [r0, #1]
cmp r0, #4
bhi _0800B1A6
lsls r0, r0, #2
ldr r1, _0800B114
adds r0, r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0800B110: .4byte 0x03003210
_0800B114: .4byte 0x0800B118
_0800B118: @ jump table
.4byte _0800B12C @ case 0
.4byte _0800B13C @ case 1
.4byte _0800B154 @ case 2
.4byte _0800B190 @ case 3
.4byte _0800B19A @ case 4
_0800B12C:
bl DisableSerial
ldr r1, _0800B138
movs r0, #1
strb r0, [r1, #1]
b _0800B1A6
.align 2, 0
_0800B138: .4byte 0x03003210
_0800B13C:
ldrb r0, [r4]
cmp r0, #1
bne _0800B1A6
bl EnableSerial
ldr r1, _0800B150
movs r0, #2
strb r0, [r1, #1]
b _0800B1A6
.align 2, 0
_0800B150: .4byte 0x03003210
_0800B154:
ldrb r1, [r4]
cmp r1, #1
beq _0800B164
cmp r1, #2
beq _0800B17C
bl CheckMasterOrSlave
b _0800B1A6
_0800B164:
ldr r2, _0800B178
ldrb r0, [r2]
cmp r0, #8
bne _0800B1A6
ldrb r0, [r2, #3]
cmp r0, #1
bls _0800B1A6
strb r1, [r2, #0xe]
b _0800B1A6
.align 2, 0
_0800B178: .4byte 0x03003210
_0800B17C:
ldr r0, _0800B188
movs r1, #0
strb r1, [r0, #1]
ldr r0, _0800B18C
strh r1, [r0]
b _0800B1A6
.align 2, 0
_0800B188: .4byte 0x03003210
_0800B18C: .4byte 0x0400012A
_0800B190:
bl InitTimer
ldr r1, _0800B1E0
movs r0, #4
strb r0, [r1, #1]
_0800B19A:
adds r0, r5, #0
bl EnqueueSendCmd
adds r0, r6, #0
bl DequeueRecvCmds
_0800B1A6:
movs r0, #0
strb r0, [r4]
ldr r1, _0800B1E0
ldrb r2, [r1, #2]
ldrb r0, [r1, #3]
lsls r0, r0, #2
orrs r2, r0
ldrb r0, [r1]
cmp r0, #8
bne _0800B1BE
movs r0, #0x20
orrs r2, r0
_0800B1BE:
ldrb r0, [r1, #0xc]
lsls r3, r0, #8
ldrb r0, [r1, #0xf]
lsls r4, r0, #9
ldrb r0, [r1, #0x10]
lsls r5, r0, #0xc
ldrb r0, [r1, #0x11]
lsls r6, r0, #0xd
ldrb r0, [r1, #0x12]
lsls r7, r0, #0xe
ldrb r0, [r1, #1]
cmp r0, #4
bne _0800B1E4
movs r0, #0x40
orrs r0, r3
orrs r0, r2
b _0800B1E8
.align 2, 0
_0800B1E0: .4byte 0x03003210
_0800B1E4:
adds r0, r2, #0
orrs r0, r3
_0800B1E8:
orrs r0, r4
orrs r0, r5
orrs r0, r6
orrs r0, r7
adds r2, r0, #0
ldrb r3, [r1, #0x13]
cmp r3, #1
bne _0800B1FE
movs r0, #0x80
lsls r0, r0, #9
orrs r2, r0
_0800B1FE:
ldrb r0, [r1, #2]
cmp r0, #3
bls _0800B20A
movs r0, #0x80
lsls r0, r0, #0xa
orrs r2, r0
_0800B20A:
adds r1, r2, #0
cmp r3, #2
bne _0800B216
movs r0, #0x80
lsls r0, r0, #0xb
orrs r1, r0
_0800B216:
adds r0, r1, #0
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
thumb_func_end LinkMain1
thumb_func_start CheckMasterOrSlave
CheckMasterOrSlave: @ 0x0800B220
push {lr}
ldr r0, _0800B23C
ldr r1, [r0]
movs r0, #0xc
ands r1, r0
ldr r2, _0800B240
cmp r1, #8
bne _0800B244
ldrb r0, [r2, #2]
cmp r0, #0
bne _0800B244
strb r1, [r2]
b _0800B248
.align 2, 0
_0800B23C: .4byte 0x04000128
_0800B240: .4byte 0x03003210
_0800B244:
movs r0, #0
strb r0, [r2]
_0800B248:
pop {r0}
bx r0
thumb_func_end CheckMasterOrSlave
thumb_func_start InitTimer
InitTimer: @ 0x0800B24C
push {lr}
ldr r0, _0800B270
ldrb r0, [r0]
cmp r0, #0
beq _0800B26A
ldr r1, _0800B274
ldr r2, _0800B278
adds r0, r2, #0
strh r0, [r1]
adds r1, #2
movs r0, #0x41
strh r0, [r1]
movs r0, #0x40
bl EnableInterrupts
_0800B26A:
pop {r0}
bx r0
.align 2, 0
_0800B270: .4byte 0x03003210
_0800B274: .4byte 0x0400010C
_0800B278: .4byte 0x0000FF3B
thumb_func_end InitTimer
thumb_func_start EnqueueSendCmd
EnqueueSendCmd: @ 0x0800B27C
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
adds r3, r0, #0
ldr r2, _0800B2F4
ldr r1, _0800B2F8
ldrh r0, [r1]
strh r0, [r2]
movs r0, #0
strh r0, [r1]
ldr r1, _0800B2FC
ldr r4, _0800B300
adds r0, r1, r4
ldrb r4, [r0]
adds r6, r1, #0
cmp r4, #0x31
bhi _0800B30C
movs r1, #0xce
lsls r1, r1, #2
adds r0, r6, r1
ldrb r0, [r0]
adds r0, r4, r0
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x31
bls _0800B2BA
subs r0, #0x32
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
_0800B2BA:
movs r2, #0
ldr r4, _0800B304
mov sb, r4
ldr r1, _0800B308
mov sl, r1
lsls r5, r0, #1
movs r0, #0x18
adds r0, r0, r6
mov r8, r0
mov ip, r2
movs r7, #0x64
_0800B2D0:
ldrh r0, [r4]
ldrh r1, [r3]
orrs r0, r1
strh r0, [r4]
adds r0, r2, #0
muls r0, r7, r0
adds r0, r5, r0
add r0, r8
strh r1, [r0]
mov r1, ip
strh r1, [r3]
adds r3, #2
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #7
bls _0800B2D0
b _0800B318
.align 2, 0
_0800B2F4: .4byte 0x030041D4
_0800B2F8: .4byte 0x04000208
_0800B2FC: .4byte 0x03003210
_0800B300: .4byte 0x00000339
_0800B304: .4byte 0x03000D6E
_0800B308: .4byte 0x03003200
_0800B30C:
movs r0, #1
strb r0, [r6, #0x12]
ldr r2, _0800B350
mov sb, r2
ldr r4, _0800B354
mov sl, r4
_0800B318:
mov r1, sb
ldrh r0, [r1]
cmp r0, #0
beq _0800B330
ldr r2, _0800B358
adds r0, r6, r2
ldrb r1, [r0]
adds r1, #1
movs r2, #0
strb r1, [r0]
mov r4, sb
strh r2, [r4]
_0800B330:
ldr r1, _0800B35C
ldr r2, _0800B360
ldrh r0, [r2]
strh r0, [r1]
ldr r4, _0800B358
adds r0, r6, r4
ldrb r0, [r0]
mov r1, sl
strb r0, [r1]
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0800B350: .4byte 0x03000D6E
_0800B354: .4byte 0x03003200
_0800B358: .4byte 0x00000339
_0800B35C: .4byte 0x04000208
_0800B360: .4byte 0x030041D4
thumb_func_end EnqueueSendCmd
thumb_func_start DequeueRecvCmds
DequeueRecvCmds: @ 0x0800B364
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
mov sb, r0
ldr r2, _0800B3C0
ldr r1, _0800B3C4
ldrh r0, [r1]
strh r0, [r2]
movs r0, #0
strh r0, [r1]
ldr r1, _0800B3C8
ldr r3, _0800B3CC
adds r0, r1, r3
ldrb r0, [r0]
mov ip, r1
cmp r0, #0
bne _0800B3D0
movs r3, #0
ldrb r0, [r1, #3]
cmp r3, r0
bhs _0800B3B6
movs r5, #0
adds r6, r0, #0
_0800B396:
movs r2, #0
lsls r1, r3, #4
adds r4, r3, #1
add r1, sb
_0800B39E:
lsls r0, r2, #1
adds r0, r0, r1
strh r5, [r0]
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #7
bls _0800B39E
lsls r0, r4, #0x18
lsrs r3, r0, #0x18
cmp r3, r6
blo _0800B396
_0800B3B6:
movs r0, #1
mov r7, ip
strb r0, [r7, #0xc]
b _0800B44C
.align 2, 0
_0800B3C0: .4byte 0x030041D4
_0800B3C4: .4byte 0x04000208
_0800B3C8: .4byte 0x03003210
_0800B3CC: .4byte 0x00000FBD
_0800B3D0:
movs r3, #0
mov r0, ip
ldrb r1, [r0, #3]
cmp r3, r1
bhs _0800B426
ldr r0, _0800B464
add r0, ip
ldrb r0, [r0]
lsls r6, r0, #1
movs r2, #0xcf
lsls r2, r2, #2
add r2, ip
mov r8, r2
mov sl, r1
_0800B3EC:
movs r2, #0
lsls r1, r3, #4
adds r4, r3, #1
lsls r0, r3, #1
mov r7, sb
adds r5, r1, r7
adds r0, r0, r3
lsls r0, r0, #3
adds r0, r0, r3
lsls r3, r0, #5
_0800B400:
lsls r1, r2, #1
adds r1, r1, r5
movs r7, #0x64
adds r0, r2, #0
muls r0, r7, r0
adds r0, r6, r0
adds r0, r0, r3
add r0, r8
ldrh r0, [r0]
strh r0, [r1]
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #7
bls _0800B400
lsls r0, r4, #0x18
lsrs r3, r0, #0x18
cmp r3, sl
blo _0800B3EC
_0800B426:
mov r2, ip
ldr r0, _0800B468
adds r1, r2, r0
ldrb r0, [r1]
subs r0, #1
movs r3, #0
strb r0, [r1]
ldr r1, _0800B464
adds r2, r2, r1
ldrb r0, [r2]
adds r0, #1
strb r0, [r2]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x31
bls _0800B448
strb r3, [r2]
_0800B448:
mov r2, ip
strb r3, [r2, #0xc]
_0800B44C:
ldr r1, _0800B46C
ldr r3, _0800B470
ldrh r0, [r3]
strh r0, [r1]
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0800B464: .4byte 0x00000FBC
_0800B468: .4byte 0x00000FBD
_0800B46C: .4byte 0x04000208
_0800B470: .4byte 0x030041D4
thumb_func_end DequeueRecvCmds
thumb_func_start LinkVSync
LinkVSync: @ 0x0800B474
push {r4, lr}
ldr r3, _0800B49C
ldrb r4, [r3]
cmp r4, #0
beq _0800B4B0
ldrb r0, [r3, #1]
cmp r0, #2
beq _0800B4AA
cmp r0, #4
bne _0800B4DA
movs r0, #0xd
ldrsb r0, [r3, r0]
cmp r0, #8
bgt _0800B4A0
ldrb r0, [r3, #0x10]
cmp r0, #1
beq _0800B4AA
movs r0, #1
strb r0, [r3, #0x13]
b _0800B4DA
.align 2, 0
_0800B49C: .4byte 0x03003210
_0800B4A0:
ldrb r0, [r3, #0x13]
cmp r0, #1
beq _0800B4DA
movs r0, #0
strb r0, [r3, #0xd]
_0800B4AA:
bl StartTransfer
b _0800B4DA
_0800B4B0:
ldrb r2, [r3, #1]
cmp r2, #4
beq _0800B4BA
cmp r2, #2
bne _0800B4DA
_0800B4BA:
ldr r1, _0800B4E0
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0xa
bls _0800B4DA
cmp r2, #4
bne _0800B4D2
movs r0, #2
strb r0, [r3, #0x13]
_0800B4D2:
cmp r2, #2
bne _0800B4DA
strb r4, [r3, #3]
strb r4, [r3, #0xf]
_0800B4DA:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800B4E0: .4byte 0x03000D6C
thumb_func_end LinkVSync
thumb_func_start Timer3Intr
Timer3Intr: @ 0x0800B4E4
push {lr}
bl StopTimer
bl StartTransfer
pop {r0}
bx r0
.align 2, 0
thumb_func_end Timer3Intr
thumb_func_start SerialCB
SerialCB: @ 0x0800B4F4
push {r4, lr}
ldr r4, _0800B520
ldr r0, _0800B524
ldr r1, [r0]
lsls r0, r1, #0x1a
lsrs r0, r0, #0x1e
strb r0, [r4, #2]
ldrb r0, [r4, #1]
cmp r0, #2
beq _0800B528
cmp r0, #4
bne _0800B546
lsls r0, r1, #0x19
lsrs r0, r0, #0x1f
strb r0, [r4, #0x10]
bl DoRecv
bl DoSend
bl SendRecvDone
b _0800B546
.align 2, 0
_0800B520: .4byte 0x03003210
_0800B524: .4byte 0x04000128
_0800B528:
bl DoHandshake
lsls r0, r0, #0x18
cmp r0, #0
beq _0800B546
ldrb r0, [r4]
cmp r0, #0
beq _0800B542
movs r0, #3
strb r0, [r4, #1]
movs r0, #8
strb r0, [r4, #0xd]
b _0800B546
_0800B542:
movs r0, #4
strb r0, [r4, #1]
_0800B546:
ldr r3, _0800B56C
ldrb r0, [r3, #0xd]
adds r0, #1
movs r2, #0
strb r0, [r3, #0xd]
ldr r1, _0800B570
strb r2, [r1]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #8
bne _0800B566
ldr r0, _0800B574
ldr r2, _0800B578
adds r1, r3, r2
ldrb r1, [r1]
strb r1, [r0]
_0800B566:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800B56C: .4byte 0x03003210
_0800B570: .4byte 0x03000D6C
_0800B574: .4byte 0x030041D0
_0800B578: .4byte 0x00000FBD
thumb_func_end SerialCB
thumb_func_start StartTransfer
StartTransfer: @ 0x0800B57C
ldr r0, _0800B588
ldrh r1, [r0]
movs r2, #0x80
orrs r1, r2
strh r1, [r0]
bx lr
.align 2, 0
_0800B588: .4byte 0x04000128
thumb_func_end StartTransfer
thumb_func_start DoHandshake
DoHandshake: @ 0x0800B58C
push {r4, r5, r6, r7, lr}
mov r7, sb
mov r6, r8
push {r6, r7}
movs r5, #0
ldr r6, _0800B5A8
ldr r0, _0800B5AC
ldrb r1, [r0, #0xe]
adds r7, r0, #0
cmp r1, #1
bne _0800B5B8
ldr r1, _0800B5B0
ldr r2, _0800B5B4
b _0800B5BC
.align 2, 0
_0800B5A8: .4byte 0x0000FFFF
_0800B5AC: .4byte 0x03003210
_0800B5B0: .4byte 0x0400012A
_0800B5B4: .4byte 0x00008FFF
_0800B5B8:
ldr r1, _0800B610
ldr r2, _0800B614
_0800B5BC:
adds r0, r2, #0
strh r0, [r1]
ldr r2, _0800B618
ldr r3, _0800B61C
ldr r0, [r3]
ldr r1, [r3, #4]
str r0, [r2]
str r1, [r2, #4]
movs r0, #0
movs r1, #0
str r0, [r3]
str r1, [r3, #4]
strb r0, [r2, #0xa]
movs r4, #0
ldr r0, _0800B620
mov sb, r0
mov r8, r2
ldr r2, _0800B624
ldr r1, _0800B628
mov ip, r1
_0800B5E4:
lsls r0, r4, #1
add r0, r8
ldrh r3, [r0]
movs r0, #4
rsbs r0, r0, #0
ands r0, r3
ldr r1, _0800B614
cmp r0, r1
beq _0800B5FC
adds r0, r3, #0
cmp r0, r2
bne _0800B62C
_0800B5FC:
adds r0, r5, #1
lsls r0, r0, #0x18
lsrs r5, r0, #0x18
adds r0, r3, #0
cmp r6, r0
bls _0800B634
cmp r0, #0
beq _0800B634
adds r6, r3, #0
b _0800B634
.align 2, 0
_0800B610: .4byte 0x0400012A
_0800B614: .4byte 0x0000B9A0
_0800B618: .4byte 0x03003214
_0800B61C: .4byte 0x04000120
_0800B620: .4byte 0x03000D73
_0800B624: .4byte 0x00008FFF
_0800B628: .4byte 0x0000FFFF
_0800B62C:
cmp r0, ip
beq _0800B63E
movs r5, #0
b _0800B63E
_0800B634:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
cmp r4, #3
bls _0800B5E4
_0800B63E:
strb r5, [r7, #3]
adds r0, r5, #0
cmp r0, #1
bls _0800B66E
mov r2, sb
ldrb r2, [r2]
cmp r0, r2
bne _0800B660
ldrh r1, [r7, #4]
ldr r0, _0800B65C
cmp r1, r0
bne _0800B660
movs r0, #1
b _0800B67A
.align 2, 0
_0800B65C: .4byte 0x00008FFF
_0800B660:
ldrb r0, [r7, #3]
cmp r0, #1
bls _0800B66E
movs r0, #3
ands r6, r0
adds r0, r6, #1
b _0800B670
_0800B66E:
movs r0, #0
_0800B670:
strb r0, [r7, #0xf]
ldrb r0, [r7, #3]
mov r1, sb
strb r0, [r1]
movs r0, #0
_0800B67A:
pop {r3, r4}
mov r8, r3
mov sb, r4
pop {r4, r5, r6, r7}
pop {r1}
bx r1
.align 2, 0
thumb_func_end DoHandshake
thumb_func_start DoRecv
DoRecv: @ 0x0800B688
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #8
ldr r0, _0800B6E0
ldr r1, [r0, #4]
ldr r0, [r0]
str r0, [sp]
str r1, [sp, #4]
ldr r0, _0800B6E4
ldrb r1, [r0, #0x16]
adds r6, r0, #0
cmp r1, #0
bne _0800B6EC
movs r4, #0
ldr r7, _0800B6E8
ldrb r0, [r6, #3]
cmp r4, r0
bhs _0800B6D6
adds r5, r6, #0
ldrh r1, [r6, #0x14]
adds r3, r7, #0
adds r2, r6, #0
_0800B6B6:
lsls r0, r4, #1
add r0, sp
ldrh r0, [r0]
cmp r1, r0
beq _0800B6CA
ldrb r0, [r3]
cmp r0, #0
beq _0800B6CA
movs r0, #1
strb r0, [r5, #0x11]
_0800B6CA:
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
ldrb r0, [r2, #3]
cmp r4, r0
blo _0800B6B6
_0800B6D6:
movs r0, #0
strh r0, [r6, #0x14]
movs r0, #1
strb r0, [r7]
b _0800B78C
.align 2, 0
_0800B6E0: .4byte 0x04000120
_0800B6E4: .4byte 0x03003210
_0800B6E8: .4byte 0x03000D72
_0800B6EC:
ldr r2, _0800B75C
adds r1, r6, r2
adds r2, #1
adds r0, r6, r2
ldrb r2, [r0]
ldrb r1, [r1]
adds r0, r2, r1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x31
bls _0800B708
subs r0, #0x32
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
_0800B708:
cmp r2, #0x31
bhi _0800B764
movs r4, #0
ldrb r1, [r6, #3]
cmp r4, r1
bhs _0800B768
adds r5, r6, #0
ldr r7, _0800B760
lsls r0, r0, #1
mov ip, r0
movs r2, #0xcf
lsls r2, r2, #2
adds r2, r2, r6
mov r8, r2
_0800B724:
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, r0
add r0, ip
adds r1, r1, r4
lsls r1, r1, #3
adds r1, r1, r4
lsls r1, r1, #5
adds r0, r0, r1
add r0, r8
strh r3, [r0]
adds r0, r4, #1
lsls r0, r0, #0x18
lsrs r4, r0, #0x18
ldrb r0, [r5, #3]
cmp r4, r0
blo _0800B724
b _0800B768
.align 2, 0
_0800B75C: .4byte 0x00000FBC
_0800B760: .4byte 0x03000D70
_0800B764:
movs r0, #2
strb r0, [r6, #0x12]
_0800B768:
ldrb r0, [r6, #0x17]
adds r0, #1
strb r0, [r6, #0x17]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #8
bne _0800B78C
ldr r2, _0800B798
ldrh r0, [r2]
cmp r0, #0
beq _0800B78C
ldr r1, _0800B79C
adds r0, r6, r1
ldrb r1, [r0]
adds r1, #1
strb r1, [r0]
movs r0, #0
strh r0, [r2]
_0800B78C:
add sp, #8
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0800B798: .4byte 0x03000D70
_0800B79C: .4byte 0x00000FBD
thumb_func_end DoRecv
thumb_func_start DoSend
DoSend: @ 0x0800B7A0
push {r4, lr}
ldr r0, _0800B7DC
ldrb r1, [r0, #0x16]
adds r4, r0, #0
cmp r1, #8
bne _0800B7F2
ldr r1, _0800B7E0
ldrh r0, [r4, #0x14]
strh r0, [r1]
ldr r1, _0800B7E4
ldrb r2, [r1]
cmp r2, #0
bne _0800B7EC
ldr r0, _0800B7E8
adds r1, r4, r0
ldrb r0, [r1]
subs r0, #1
strb r0, [r1]
movs r0, #0xce
lsls r0, r0, #2
adds r1, r4, r0
ldrb r0, [r1]
adds r0, #1
strb r0, [r1]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #0x31
bls _0800B848
strb r2, [r1]
b _0800B848
.align 2, 0
_0800B7DC: .4byte 0x03003210
_0800B7E0: .4byte 0x0400012A
_0800B7E4: .4byte 0x03000D6D
_0800B7E8: .4byte 0x00000339
_0800B7EC:
movs r0, #0
strb r0, [r1]
b _0800B848
_0800B7F2:
ldr r1, _0800B818
ldrb r0, [r1]
cmp r0, #0
bne _0800B80E
ldr r2, _0800B81C
adds r0, r4, r2
ldrb r0, [r0]
cmp r0, #0
bne _0800B808
movs r0, #1
strb r0, [r1]
_0800B808:
ldrb r0, [r1]
cmp r0, #0
beq _0800B824
_0800B80E:
ldr r1, _0800B820
movs r0, #0
strh r0, [r1]
b _0800B842
.align 2, 0
_0800B818: .4byte 0x03000D6D
_0800B81C: .4byte 0x00000339
_0800B820: .4byte 0x0400012A
_0800B824:
ldr r3, _0800B850
movs r1, #0xce
lsls r1, r1, #2
adds r0, r4, r1
ldrb r0, [r0]
lsls r0, r0, #1
ldrb r2, [r4, #0x16]
movs r1, #0x64
muls r1, r2, r1
adds r0, r0, r1
adds r1, r4, #0
adds r1, #0x18
adds r0, r0, r1
ldrh r0, [r0]
strh r0, [r3]
_0800B842:
ldrb r0, [r4, #0x16]
adds r0, #1
strb r0, [r4, #0x16]
_0800B848:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800B850: .4byte 0x0400012A
thumb_func_end DoSend
thumb_func_start StopTimer
StopTimer: @ 0x0800B854
push {lr}
ldr r0, _0800B874
ldrb r0, [r0]
cmp r0, #0
beq _0800B870
ldr r2, _0800B878
ldrh r1, [r2]
ldr r0, _0800B87C
ands r0, r1
strh r0, [r2]
ldr r1, _0800B880
ldr r2, _0800B884
adds r0, r2, #0
strh r0, [r1]
_0800B870:
pop {r0}
bx r0
.align 2, 0
_0800B874: .4byte 0x03003210
_0800B878: .4byte 0x0400010E
_0800B87C: .4byte 0x0000FF7F
_0800B880: .4byte 0x0400010C
_0800B884: .4byte 0x0000FF3B
thumb_func_end StopTimer
thumb_func_start SendRecvDone
SendRecvDone: @ 0x0800B888
push {lr}
ldr r1, _0800B89C
ldrb r0, [r1, #0x17]
cmp r0, #8
bne _0800B8A0
movs r0, #0
strb r0, [r1, #0x16]
strb r0, [r1, #0x17]
b _0800B8B0
.align 2, 0
_0800B89C: .4byte 0x03003210
_0800B8A0:
ldrb r0, [r1]
cmp r0, #0
beq _0800B8B0
ldr r0, _0800B8B4
ldrh r1, [r0]
movs r2, #0x80
orrs r1, r2
strh r1, [r0]
_0800B8B0:
pop {r0}
bx r0
.align 2, 0
_0800B8B4: .4byte 0x0400010E
thumb_func_end SendRecvDone
thumb_func_start ResetSendBuffer
ResetSendBuffer: @ 0x0800B8B8
push {r4, r5, r6, lr}
ldr r1, _0800B900
ldr r2, _0800B904
adds r0, r1, r2
movs r2, #0
strb r2, [r0]
movs r3, #0xce
lsls r3, r3, #2
adds r0, r1, r3
strb r2, [r0]
movs r0, #0
movs r6, #0x64
adds r5, r1, #0
adds r5, #0x18
ldr r4, _0800B908
_0800B8D6:
movs r2, #0
adds r1, r0, #1
adds r3, r0, #0
muls r3, r6, r3
_0800B8DE:
lsls r0, r2, #1
adds r0, r0, r3
adds r0, r0, r5
strh r4, [r0]
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #0x31
bls _0800B8DE
lsls r0, r1, #0x18
lsrs r0, r0, #0x18
cmp r0, #7
bls _0800B8D6
pop {r4, r5, r6}
pop {r0}
bx r0
.align 2, 0
_0800B900: .4byte 0x03003210
_0800B904: .4byte 0x00000339
_0800B908: .4byte 0x0000EFFF
thumb_func_end ResetSendBuffer
thumb_func_start ResetRecvBuffer
ResetRecvBuffer: @ 0x0800B90C
push {r4, r5, r6, r7, lr}
ldr r1, _0800B96C
ldr r2, _0800B970
adds r0, r1, r2
movs r2, #0
strb r2, [r0]
ldr r3, _0800B974
adds r0, r1, r3
strb r2, [r0]
movs r0, #0x64
mov ip, r0
movs r3, #0xcf
lsls r3, r3, #2
adds r7, r1, r3
ldr r6, _0800B978
_0800B92A:
movs r3, #0
lsls r0, r2, #1
adds r5, r2, #1
adds r0, r0, r2
lsls r0, r0, #3
adds r0, r0, r2
lsls r4, r0, #5
_0800B938:
movs r2, #0
adds r1, r3, #1
mov r0, ip
muls r0, r3, r0
adds r3, r0, #0
_0800B942:
lsls r0, r2, #1
adds r0, r0, r3
adds r0, r0, r4
adds r0, r0, r7
strh r6, [r0]
adds r0, r2, #1
lsls r0, r0, #0x18
lsrs r2, r0, #0x18
cmp r2, #0x31
bls _0800B942
lsls r0, r1, #0x18
lsrs r3, r0, #0x18
cmp r3, #7
bls _0800B938
lsls r0, r5, #0x18
lsrs r2, r0, #0x18
cmp r2, #3
bls _0800B92A
pop {r4, r5, r6, r7}
pop {r0}
bx r0
.align 2, 0
_0800B96C: .4byte 0x03003210
_0800B970: .4byte 0x00000FBD
_0800B974: .4byte 0x00000FBC
_0800B978: .4byte 0x0000EFFF
thumb_func_end ResetRecvBuffer