diff options
-rw-r--r-- | asm/link_rfu_2.s | 4661 | ||||
-rw-r--r-- | asm/overworld.s | 2 | ||||
-rw-r--r-- | common_syms/link_rfu_2.txt | 3 | ||||
-rw-r--r-- | data/link_rfu_2.s | 45 | ||||
-rw-r--r-- | include/link.h | 16 | ||||
-rw-r--r-- | include/link_rfu.h | 9 | ||||
-rw-r--r-- | include/mystery_gift_menu.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/link_rfu_2.c | 1747 | ||||
-rw-r--r-- | src/mevent_server_helpers.c | 8 | ||||
-rw-r--r-- | sym_common.txt | 11 | ||||
-rw-r--r-- | sym_ewram.txt | 8 |
12 files changed, 1703 insertions, 4810 deletions
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s index e67fa8ccf..2428f2984 100644 --- a/asm/link_rfu_2.s +++ b/asm/link_rfu_2.s @@ -5,4665 +5,4 @@ .text - thumb_func_start sub_80FA0F8 -sub_80FA0F8: @ 80FA0F8 - push {lr} - ldr r1, _080FA110 @ =Rfu - adds r1, 0x5A - strb r0, [r1] - movs r0, 0xA1 - lsls r0, 8 - bl sub_80F9D04 - movs r0, 0x1 - pop {r1} - bx r1 - .align 2, 0 -_080FA110: .4byte Rfu - thumb_func_end sub_80FA0F8 - - thumb_func_start sub_80FA114 -sub_80FA114: @ 80FA114 - push {lr} - bl rfu_clearAllSlot - bl sub_80FD52C - ldr r1, _080FA138 @ =gReceivedRemoteLinkPlayers - movs r0, 0 - strb r0, [r1] - ldr r2, _080FA13C @ =Rfu - adds r3, r2, 0 - adds r3, 0xEF - movs r1, 0 - movs r0, 0x1 - strb r0, [r3] - str r1, [r2] - pop {r0} - bx r0 - .align 2, 0 -_080FA138: .4byte gReceivedRemoteLinkPlayers -_080FA13C: .4byte Rfu - thumb_func_end sub_80FA114 - - thumb_func_start sub_80FA140 -sub_80FA140: @ 80FA140 - push {lr} - ldr r0, _080FA15C @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - orrs r0, r1 - bl rfu_REQ_disconnect - bl rfu_waitREQComplete - bl sub_80FA114 - pop {r0} - bx r0 - .align 2, 0 -_080FA15C: .4byte gRfuLinkStatus - thumb_func_end sub_80FA140 - - thumb_func_start sub_80FA160 -sub_80FA160: @ 80FA160 - push {r4,lr} - ldr r4, _080FA178 @ =Rfu - ldrb r0, [r4, 0xC] - cmp r0, 0 - bne _080FA180 - bl sub_80FEB14 - ldr r0, _080FA17C @ =0x0000099c - adds r1, r4, r0 - movs r0, 0x2 - strb r0, [r1] - b _080FA184 - .align 2, 0 -_080FA178: .4byte Rfu -_080FA17C: .4byte 0x0000099c -_080FA180: - ldr r0, _080FA18C @ =sub_80FA140 - str r0, [r4] -_080FA184: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FA18C: .4byte sub_80FA140 - thumb_func_end sub_80FA160 - - thumb_func_start sub_80FA190 -sub_80FA190: @ 80FA190 - push {lr} - bl sub_80FEB14 - ldr r2, _080FA1B4 @ =Rfu - ldr r0, _080FA1B8 @ =0x0000099c - adds r1, r2, r0 - movs r0, 0x1 - strb r0, [r1] - ldr r0, _080FA1BC @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0x2] - ldrb r1, [r1, 0x3] - orrs r0, r1 - ldr r1, _080FA1C0 @ =0x0000099b - adds r2, r1 - strb r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_080FA1B4: .4byte Rfu -_080FA1B8: .4byte 0x0000099c -_080FA1BC: .4byte gRfuLinkStatus -_080FA1C0: .4byte 0x0000099b - thumb_func_end sub_80FA190 - - thumb_func_start sub_80FA1C4 -sub_80FA1C4: @ 80FA1C4 - push {r4,r5,lr} - ldr r0, _080FA208 @ =Rfu - ldrb r5, [r0, 0xD] - movs r2, 0 - movs r1, 0 - adds r3, r0, 0 - adds r4, r3, 0 - adds r4, 0xE4 -_080FA1D4: - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _080FA1DE - adds r2, 0x1 -_080FA1DE: - adds r1, 0x1 - cmp r1, 0x4 - ble _080FA1D4 - cmp r2, r5 - bne _080FA218 - ldr r2, _080FA20C @ =gBattleTypeFlags - ldr r0, [r2] - ldr r1, _080FA210 @ =0x0000ffdf - ands r0, r1 - str r0, [r2] - ldrb r0, [r3, 0xC] - cmp r0, 0 - bne _080FA214 - adds r0, r3, 0 - adds r0, 0xEE - ldrb r1, [r0] - movs r1, 0x3 - strb r1, [r0] - bl sub_80FA160 - b _080FA218 - .align 2, 0 -_080FA208: .4byte Rfu -_080FA20C: .4byte gBattleTypeFlags -_080FA210: .4byte 0x0000ffdf -_080FA214: - ldr r0, _080FA220 @ =sub_80FA160 - str r0, [r3] -_080FA218: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FA220: .4byte sub_80FA160 - thumb_func_end sub_80FA1C4 - - thumb_func_start sub_80FA224 -sub_80FA224: @ 80FA224 - push {r4,lr} - ldr r0, _080FA250 @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - bne _080FA248 - ldr r4, _080FA254 @ =Rfu - movs r1, 0x9A - lsls r1, 4 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080FA248 - movs r0, 0xBE - lsls r0, 7 - bl sub_80F9D04 - ldr r0, _080FA258 @ =sub_80FA1C4 - str r0, [r4] -_080FA248: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FA250: .4byte gSendCmd -_080FA254: .4byte Rfu -_080FA258: .4byte sub_80FA1C4 - thumb_func_end sub_80FA224 - - thumb_func_start sub_80FA25C -sub_80FA25C: @ 80FA25C - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, _080FA280 @ =Rfu - ldr r0, [r2] - cmp r0, 0 - bne _080FA27C - ldr r1, _080FA284 @ =0x00000991 - adds r0, r2, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _080FA288 @ =sub_80FA224 - str r0, [r2] - adds r0, r3, 0 - bl DestroyTask -_080FA27C: - pop {r0} - bx r0 - .align 2, 0 -_080FA280: .4byte Rfu -_080FA284: .4byte 0x00000991 -_080FA288: .4byte sub_80FA224 - thumb_func_end sub_80FA25C - - thumb_func_start task_add_05_task_del_08FA224_when_no_RfuFunc -task_add_05_task_del_08FA224_when_no_RfuFunc: @ 80FA28C - push {r4,lr} - ldr r4, _080FA2AC @ =sub_80FA25C - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _080FA2A4 - adds r0, r4, 0 - movs r1, 0x5 - bl CreateTask -_080FA2A4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FA2AC: .4byte sub_80FA25C - thumb_func_end task_add_05_task_del_08FA224_when_no_RfuFunc - - thumb_func_start sub_80FA2B0 -sub_80FA2B0: @ 80FA2B0 - push {r4,r5,lr} - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - beq _080FA2DE - ldr r1, _080FA348 @ =Rfu - ldr r2, _080FA34C @ =0x0000069e - adds r0, r1, r2 - ldrb r0, [r0] - adds r4, r0, 0 - cmp r4, 0 - bne _080FA2DE - adds r5, r1, 0 - adds r5, 0xFE - ldrh r0, [r5] - cmp r0, 0x3C - bls _080FA2DE - movs r0, 0xCC - lsls r0, 7 - bl sub_80F9D04 - strh r4, [r5] -_080FA2DE: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0 - cmp r1, r2 - bcs _080FA30A - ldr r0, _080FA348 @ =Rfu - adds r3, r0, 0 - adds r3, 0xE9 - ldrb r0, [r3] - cmp r0, 0 - beq _080FA30A -_080FA2F8: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - bcs _080FA30A - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _080FA2F8 -_080FA30A: - ldr r4, _080FA348 @ =Rfu - cmp r1, r2 - bne _080FA336 - movs r1, 0 - adds r3, r4, 0 - adds r3, 0xE9 - movs r2, 0 -_080FA318: - adds r0, r1, r3 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x4 - bls _080FA318 - movs r1, 0x80 - lsls r1, 1 - adds r0, r4, r1 - ldrh r1, [r0] - adds r1, 0x1 - movs r2, 0 - strh r1, [r0] - str r2, [r4] -_080FA336: - adds r1, r4, 0 - adds r1, 0xFE - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FA348: .4byte Rfu -_080FA34C: .4byte 0x0000069e - thumb_func_end sub_80FA2B0 - - thumb_func_start sub_80FA350 -sub_80FA350: @ 80FA350 - push {r4,lr} - ldr r4, _080FA378 @ =Rfu - ldr r1, _080FA37C @ =0x0000069e - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080FA372 - ldr r0, _080FA380 @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - bne _080FA372 - movs r0, 0xCC - lsls r0, 7 - bl sub_80F9D04 - ldr r0, _080FA384 @ =sub_80FA2B0 - str r0, [r4] -_080FA372: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FA378: .4byte Rfu -_080FA37C: .4byte 0x0000069e -_080FA380: .4byte gSendCmd -_080FA384: .4byte sub_80FA2B0 - thumb_func_end sub_80FA350 - - thumb_func_start sub_80FA388 -sub_80FA388: @ 80FA388 - push {r4,lr} - bl GetMultiplayerId - lsls r0, 24 - cmp r0, 0 - beq _080FA3C4 - ldr r4, _080FA3B4 @ =Rfu - ldr r1, _080FA3B8 @ =0x0000069e - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080FA416 - ldr r0, _080FA3BC @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - bne _080FA416 - movs r0, 0xCC - lsls r0, 7 - bl sub_80F9D04 - ldr r0, _080FA3C0 @ =sub_80FA2B0 - b _080FA414 - .align 2, 0 -_080FA3B4: .4byte Rfu -_080FA3B8: .4byte 0x0000069e -_080FA3BC: .4byte gSendCmd -_080FA3C0: .4byte sub_80FA2B0 -_080FA3C4: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0x1 - cmp r1, r2 - bcs _080FA3F2 - ldr r3, _080FA41C @ =Rfu - adds r0, r3, 0 - adds r0, 0xEA - ldrb r0, [r0] - cmp r0, 0 - beq _080FA3F2 - adds r3, 0xE9 -_080FA3E0: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - bcs _080FA3F2 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _080FA3E0 -_080FA3F2: - cmp r1, r2 - bne _080FA416 - ldr r4, _080FA41C @ =Rfu - ldr r1, _080FA420 @ =0x0000069e - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080FA416 - ldr r0, _080FA424 @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - bne _080FA416 - movs r0, 0xCC - lsls r0, 7 - bl sub_80F9D04 - ldr r0, _080FA428 @ =sub_80FA350 -_080FA414: - str r0, [r4] -_080FA416: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FA41C: .4byte Rfu -_080FA420: .4byte 0x0000069e -_080FA424: .4byte gSendCmd -_080FA428: .4byte sub_80FA350 - thumb_func_end sub_80FA388 - - thumb_func_start sub_80FA42C -sub_80FA42C: @ 80FA42C - push {lr} - ldr r1, _080FA444 @ =Rfu - ldr r2, [r1] - cmp r2, 0 - bne _080FA440 - ldr r0, _080FA448 @ =sub_80FA388 - str r0, [r1] - adds r0, r1, 0 - adds r0, 0xFE - strh r2, [r0] -_080FA440: - pop {r0} - bx r0 - .align 2, 0 -_080FA444: .4byte Rfu -_080FA448: .4byte sub_80FA388 - thumb_func_end sub_80FA42C - - thumb_func_start sub_80FA44C -sub_80FA44C: @ 80FA44C - push {r4,lr} - adds r3, r0, 0 - ldr r1, _080FA468 @ =gUnknown_843EC8C - ldrh r0, [r1] - cmp r0, r3 - beq _080FA47A - ldr r4, _080FA46C @ =0x0000ffff - adds r2, r1, 0 -_080FA45C: - ldrh r0, [r2] - cmp r0, r4 - bne _080FA470 - movs r0, 0 - b _080FA47C - .align 2, 0 -_080FA468: .4byte gUnknown_843EC8C -_080FA46C: .4byte 0x0000ffff -_080FA470: - adds r1, 0x2 - adds r2, 0x2 - ldrh r0, [r1] - cmp r0, r3 - bne _080FA45C -_080FA47A: - movs r0, 0x1 -_080FA47C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FA44C - - thumb_func_start sub_80FA484 -sub_80FA484: @ 80FA484 - push {lr} - cmp r0, 0 - beq _080FA498 - movs r1, 0x96 - lsls r1, 2 - movs r0, 0x1 - bl sub_80FEA34 - movs r0, 0 - b _080FA4A4 -_080FA498: - movs r0, 0 - movs r1, 0 - bl sub_80FEA34 - lsls r0, 24 - lsrs r0, 24 -_080FA4A4: - pop {r1} - bx r1 - thumb_func_end sub_80FA484 - - thumb_func_start sub_80FA4A8 -sub_80FA4A8: @ 80FA4A8 - push {lr} - ldr r0, _080FA4C0 @ =Rfu - ldr r1, _080FA4C4 @ =0x00000991 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - movs r0, 0 - bl sub_80FD760 - pop {r0} - bx r0 - .align 2, 0 -_080FA4C0: .4byte Rfu -_080FA4C4: .4byte 0x00000991 - thumb_func_end sub_80FA4A8 - - thumb_func_start rfu_get_multiplayer_id -rfu_get_multiplayer_id: @ 80FA4C8 - push {lr} - ldr r1, _080FA4DC @ =Rfu - ldrb r0, [r1, 0xC] - cmp r0, 0x1 - beq _080FA4E4 - ldr r2, _080FA4E0 @ =0x00000986 - adds r0, r1, r2 - ldrb r0, [r0] - b _080FA4E6 - .align 2, 0 -_080FA4DC: .4byte Rfu -_080FA4E0: .4byte 0x00000986 -_080FA4E4: - movs r0, 0 -_080FA4E6: - pop {r1} - bx r1 - thumb_func_end rfu_get_multiplayer_id - - thumb_func_start GetRfuPlayerCount -GetRfuPlayerCount: @ 80FA4EC - ldr r0, _080FA4F4 @ =Rfu - ldrb r0, [r0, 0xD] - bx lr - .align 2, 0 -_080FA4F4: .4byte Rfu - thumb_func_end GetRfuPlayerCount - - thumb_func_start IsLinkRfuTaskFinished -IsLinkRfuTaskFinished: @ 80FA4F8 - push {lr} - movs r1, 0 - ldr r0, _080FA50C @ =Rfu - ldr r0, [r0] - cmp r0, 0 - bne _080FA506 - movs r1, 0x1 -_080FA506: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_080FA50C: .4byte Rfu - thumb_func_end IsLinkRfuTaskFinished - - thumb_func_start sub_80FA510 -sub_80FA510: @ 80FA510 - push {lr} - ldr r0, _080FA524 @ =Rfu - ldr r0, [r0] - cmp r0, 0 - beq _080FA51E - bl _call_via_r0 -_080FA51E: - pop {r0} - bx r0 - .align 2, 0 -_080FA524: .4byte Rfu - thumb_func_end sub_80FA510 - - thumb_func_start sub_80FA528 -sub_80FA528: @ 80FA528 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r7, 0 - movs r5, 0 - ldr r6, _080FA594 @ =Rfu - ldr r0, _080FA598 @ =0x000008f6 - adds r0, r6 - mov r8, r0 -_080FA53A: - ldr r1, _080FA59C @ =0x00000989 - adds r0, r6, r1 - adds r4, r5, r0 - ldrb r0, [r4] - subs r0, 0x5 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080FA5C2 - ldr r1, _080FA5A0 @ =gRfuSlotStatusNI - lsls r0, r5, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0, 0x34] - cmp r0, 0x46 - beq _080FA55E - cmp r0, 0x48 - bne _080FA5A8 -_080FA55E: - ldr r2, _080FA5A4 @ =0x0000098d - adds r0, r6, r2 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, 0x8 - bne _080FA5C2 - movs r0, 0x9 - strb r0, [r4] - movs r0, 0xA - strb r0, [r1] - lsls r1, r5, 24 - lsrs r1, 24 - movs r0, 0x8 - bl rfu_clearSlot - movs r0, 0x80 - lsls r0, 17 - lsls r0, r5 - lsrs r0, 24 - movs r1, 0x8 - adds r2, r4, 0 - movs r3, 0x1 - bl rfu_NI_setSendData - movs r7, 0x1 - b _080FA5C2 - .align 2, 0 -_080FA594: .4byte Rfu -_080FA598: .4byte 0x000008f6 -_080FA59C: .4byte 0x00000989 -_080FA5A0: .4byte gRfuSlotStatusNI -_080FA5A4: .4byte 0x0000098d -_080FA5A8: - mov r2, r8 - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0, 0x34] - cmp r0, 0x47 - bne _080FA5C2 - lsls r1, r5, 24 - lsrs r1, 24 - movs r0, 0x8 - bl rfu_clearSlot -_080FA5C2: - adds r5, 0x1 - cmp r5, 0x3 - ble _080FA53A - adds r0, r7, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80FA528 - - thumb_func_start sub_80FA5D4 -sub_80FA5D4: @ 80FA5D4 - push {r4-r6,lr} - movs r3, 0 - movs r1, 0 - ldr r5, _080FA620 @ =Rfu+0x98d - movs r6, 0x1 - movs r4, 0 -_080FA5E0: - adds r2, r1, r5 - ldrb r0, [r2] - cmp r0, 0xB - bne _080FA5F4 - adds r0, r6, 0 - lsls r0, r1 - orrs r3, r0 - lsls r0, r3, 24 - lsrs r3, r0, 24 - strb r4, [r2] -_080FA5F4: - adds r1, 0x1 - cmp r1, 0x3 - ble _080FA5E0 - cmp r3, 0 - beq _080FA608 - adds r0, r3, 0 - bl rfu_REQ_disconnect - bl rfu_waitREQComplete -_080FA608: - movs r1, 0 - ldr r2, _080FA620 @ =Rfu+0x98d -_080FA60C: - adds r0, r1, r2 - ldrb r0, [r0] - subs r0, 0xA - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080FA624 - movs r0, 0x1 - b _080FA62C - .align 2, 0 -_080FA620: .4byte Rfu+0x98d -_080FA624: - adds r1, 0x1 - cmp r1, 0x3 - ble _080FA60C - movs r0, 0 -_080FA62C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80FA5D4 - - thumb_func_start sub_80FA634 -sub_80FA634: @ 80FA634 - push {lr} - adds r2, r0, 0 - adds r0, r1, 0 - lsls r2, 16 - lsrs r2, 16 - adds r1, r2, 0 - bl sub_80FBC70 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _080FA668 - ldr r0, _080FA660 @ =Rfu - ldr r2, _080FA664 @ =0x00000989 - adds r0, r2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, 0x9 - beq _080FA668 - movs r0, 0 - b _080FA66A - .align 2, 0 -_080FA660: .4byte Rfu -_080FA664: .4byte 0x00000989 -_080FA668: - movs r0, 0x1 -_080FA66A: - pop {r1} - bx r1 - thumb_func_end sub_80FA634 - - thumb_func_start sub_80FA670 -sub_80FA670: @ 80FA670 - push {r4-r6,lr} - adds r6, r0, 0 - adds r0, r2, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r1, 16 - lsrs r1, 16 - bl sub_80FBC70 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _080FA6B4 @ =Rfu - ldr r0, _080FA6B8 @ =0x00000989 - adds r5, r0 - adds r5, r4, r5 - strb r6, [r5] - movs r0, 0x4 - adds r1, r4, 0 - bl rfu_clearSlot - movs r0, 0x80 - lsls r0, 17 - lsls r0, r4 - lsrs r0, 24 - movs r1, 0x8 - adds r2, r5, 0 - movs r3, 0x1 - bl rfu_NI_setSendData - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FA6B4: .4byte Rfu -_080FA6B8: .4byte 0x00000989 - thumb_func_end sub_80FA670 - - thumb_func_start sub_80FA6BC -sub_80FA6BC: @ 80FA6BC - push {r4,r5,lr} - ldr r4, _080FA6F0 @ =Rfu - ldr r0, _080FA6F4 @ =0x0000093d - adds r5, r4, r0 - movs r0, 0x8 - strb r0, [r5] - ldr r0, _080FA6F8 @ =0x000008f6 - adds r4, r0 - ldrb r1, [r4] - movs r0, 0x4 - bl rfu_clearSlot - ldrb r1, [r4] - movs r0, 0x80 - lsls r0, 17 - lsls r0, r1 - lsrs r0, 24 - movs r1, 0x8 - adds r2, r5, 0 - movs r3, 0x1 - bl rfu_NI_setSendData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FA6F0: .4byte Rfu -_080FA6F4: .4byte 0x0000093d -_080FA6F8: .4byte 0x000008f6 - thumb_func_end sub_80FA6BC - - thumb_func_start sub_80FA6FC -sub_80FA6FC: @ 80FA6FC - push {lr} - adds r2, r0, 0 - adds r0, r1, 0 - lsls r2, 16 - lsrs r2, 16 - adds r1, r2, 0 - bl sub_80FBC70 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _080FA718 - movs r0, 0x2 - b _080FA732 -_080FA718: - ldr r1, _080FA72C @ =gRfuSlotStatusNI - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0 - beq _080FA730 - movs r0, 0 - b _080FA732 - .align 2, 0 -_080FA72C: .4byte gRfuSlotStatusNI -_080FA730: - movs r0, 0x1 -_080FA732: - pop {r1} - bx r1 - thumb_func_end sub_80FA6FC - - thumb_func_start sub_80FA738 -sub_80FA738: @ 80FA738 - push {r4,r5,lr} - bl sub_80FA528 - movs r4, 0 - ldr r0, _080FA77C @ =Rfu - ldr r1, _080FA780 @ =0x0000098d - adds r5, r0, r1 -_080FA746: - ldr r1, _080FA784 @ =gRfuSlotStatusNI - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0] - subs r0, 0x26 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _080FA770 - adds r1, r4, r5 - ldrb r0, [r1] - cmp r0, 0xA - bne _080FA766 - movs r0, 0xB - strb r0, [r1] -_080FA766: - lsls r1, r4, 24 - lsrs r1, 24 - movs r0, 0x4 - bl rfu_clearSlot -_080FA770: - adds r4, 0x1 - cmp r4, 0x3 - ble _080FA746 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FA77C: .4byte Rfu -_080FA780: .4byte 0x0000098d -_080FA784: .4byte gRfuSlotStatusNI - thumb_func_end sub_80FA738 - - thumb_func_start sub_80FA788 -sub_80FA788: @ 80FA788 - push {r4,r5,lr} - movs r4, 0 - ldr r1, _080FA800 @ =Rfu - ldr r2, _080FA804 @ =0x0000093d - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x8 - bne _080FA7C2 - ldr r2, _080FA808 @ =gRfuSlotStatusNI - ldr r0, _080FA80C @ =0x000008f6 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x26 - beq _080FA7BA - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x27 - bne _080FA7C2 -_080FA7BA: - ldrb r1, [r1] - movs r0, 0x4 - bl rfu_clearSlot -_080FA7C2: - ldr r2, _080FA808 @ =gRfuSlotStatusNI - ldr r5, _080FA800 @ =Rfu - ldr r0, _080FA80C @ =0x000008f6 - adds r1, r5, r0 - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0, 0x34] - cmp r0, 0x46 - beq _080FA7E6 - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0, 0x34] - cmp r0, 0x48 - bne _080FA814 -_080FA7E6: - ldrb r1, [r1] - movs r0, 0x8 - bl rfu_clearSlot - ldr r2, _080FA810 @ =0x0000093e - adds r4, r5, r2 - ldrb r0, [r4] - movs r1, 0 - bl sub_80FB9E4 - ldrb r4, [r4] - b _080FA82C - .align 2, 0 -_080FA800: .4byte Rfu -_080FA804: .4byte 0x0000093d -_080FA808: .4byte gRfuSlotStatusNI -_080FA80C: .4byte 0x000008f6 -_080FA810: .4byte 0x0000093e -_080FA814: - ldrb r0, [r1] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0, 0x34] - cmp r0, 0x47 - bne _080FA82C - ldrb r1, [r1] - movs r0, 0x8 - bl rfu_clearSlot - movs r4, 0x6 -_080FA82C: - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FA788 - - thumb_func_start sub_80FA834 -sub_80FA834: @ 80FA834 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r5, _080FA884 @ =Rfu - adds r0, r5, 0 - adds r0, 0xF1 - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080FA85C - movs r0, 0x9A - lsls r0, 4 - adds r1, r5, r0 - movs r0, 0 - strb r0, [r1] - adds r0, r6, 0 - bl DestroyTask -_080FA85C: - ldr r2, _080FA888 @ =gTasks - lsls r1, r6, 2 - adds r0, r1, r6 - lsls r0, 3 - adds r4, r0, r2 - movs r2, 0x8 - ldrsh r0, [r4, r2] - adds r7, r1, 0 - cmp r0, 0x3 - beq _080FA904 - cmp r0, 0x3 - bgt _080FA88C - cmp r0, 0x1 - beq _080FA8B4 - cmp r0, 0x1 - bgt _080FA900 - cmp r0, 0 - beq _080FA89E - b _080FA9BC - .align 2, 0 -_080FA884: .4byte Rfu -_080FA888: .4byte gTasks -_080FA88C: - cmp r0, 0x5 - beq _080FA938 - cmp r0, 0x5 - blt _080FA926 - cmp r0, 0x6 - beq _080FA96C - cmp r0, 0x65 - beq _080FA8EC - b _080FA9BC -_080FA89E: - bl sub_80F9C50 - lsls r0, 24 - cmp r0, 0 - bne _080FA8AA - b _080FA9BC -_080FA8AA: - bl ResetBlockReceivedFlags - bl sub_800B0B4 - b _080FA930 -_080FA8B4: - ldrb r0, [r5, 0xC] - cmp r0, 0x1 - bne _080FA8F4 - ldr r0, _080FA8CC @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _080FA8D0 - movs r0, 0xF0 - lsls r0, 7 - bl sub_80F9D04 - b _080FA8D8 - .align 2, 0 -_080FA8CC: .4byte gReceivedRemoteLinkPlayers -_080FA8D0: - movs r0, 0xEE - lsls r0, 7 - bl sub_80F9D04 -_080FA8D8: - ldr r0, _080FA8E8 @ =gTasks - adds r1, r7, r6 - lsls r1, 3 - adds r1, r0 - movs r0, 0x65 - strh r0, [r1, 0x8] - b _080FA9BC - .align 2, 0 -_080FA8E8: .4byte gTasks -_080FA8EC: - ldr r0, _080FA8FC @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - bne _080FA9BC -_080FA8F4: - movs r0, 0x2 - strh r0, [r4, 0x8] - b _080FA9BC - .align 2, 0 -_080FA8FC: .4byte gSendCmd -_080FA900: - ldrb r0, [r5, 0xD] - b _080FA92C -_080FA904: - ldrb r0, [r5, 0xC] - cmp r0, 0x1 - bne _080FA930 - bl sub_80F9C50 - lsls r0, 24 - cmp r0, 0 - beq _080FA9BC - adds r1, r5, 0 - adds r1, 0x5A - movs r0, 0 - strb r0, [r1] - movs r0, 0xA1 - lsls r0, 8 - bl sub_80F9D04 - b _080FA930 -_080FA926: - bl sub_80F9C78 - lsls r0, 24 -_080FA92C: - cmp r0, 0 - beq _080FA9BC -_080FA930: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080FA9BC -_080FA938: - movs r4, 0 - ldrb r0, [r5, 0xD] - cmp r4, r0 - bge _080FA956 -_080FA940: - adds r0, r4, 0 - bl sub_800B110 - lsls r0, r4, 24 - lsrs r0, 24 - bl Rfu_ResetBlockReceivedFlag - adds r4, 0x1 - ldrb r2, [r5, 0xD] - cmp r4, r2 - blt _080FA940 -_080FA956: - ldr r0, _080FA968 @ =gTasks - adds r1, r7, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FA9BC - .align 2, 0 -_080FA968: .4byte gTasks -_080FA96C: - adds r0, r6, 0 - bl DestroyTask - ldr r1, _080FA9C4 @ =gReceivedRemoteLinkPlayers - movs r0, 0x1 - strb r0, [r1] - movs r0, 0x9A - lsls r0, 4 - adds r1, r5, r0 - movs r0, 0 - strb r0, [r1] - movs r1, 0x96 - lsls r1, 2 - movs r0, 0x1 - bl sub_80FEA34 - ldr r2, _080FA9C8 @ =0x0000099e - adds r1, r5, r2 - ldrb r0, [r1] - cmp r0, 0 - beq _080FA9BC - movs r4, 0 - adds r2, r1, 0 - movs r3, 0x1 - ldr r0, _080FA9CC @ =0x0000099d - adds r5, r0 -_080FA9A0: - ldrb r0, [r2] - asrs r0, r4 - ands r0, r3 - cmp r0, 0 - beq _080FA9B6 - adds r0, r3, 0 - lsls r0, r4 - strb r0, [r5] - ldrb r1, [r2] - eors r0, r1 - strb r0, [r2] -_080FA9B6: - adds r4, 0x1 - cmp r4, 0x3 - ble _080FA9A0 -_080FA9BC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FA9C4: .4byte gReceivedRemoteLinkPlayers -_080FA9C8: .4byte 0x0000099e -_080FA9CC: .4byte 0x0000099d - thumb_func_end sub_80FA834 - - thumb_func_start sub_80FA9D0 -sub_80FA9D0: @ 80FA9D0 - push {r4,r5,lr} - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0 - movs r5, 0x1 - ldr r4, _080FA9F8 @ =Rfu+0x996 - movs r3, 0 -_080FA9DE: - adds r0, r2, 0 - asrs r0, r1 - ands r0, r5 - cmp r0, 0 - beq _080FA9EC - adds r0, r1, r4 - strb r3, [r0] -_080FA9EC: - adds r1, 0x1 - cmp r1, 0x3 - ble _080FA9DE - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FA9F8: .4byte Rfu+0x996 - thumb_func_end sub_80FA9D0 - - thumb_func_start sub_80FA9FC -sub_80FA9FC: @ 80FA9FC - push {r4-r7,lr} - adds r2, r0, 0 - ldr r1, _080FAA4C @ =Rfu - ldrb r0, [r2, 0xF] - strb r0, [r1, 0xD] - movs r4, 0 - ldr r0, _080FAA50 @ =0x00000996 - adds r5, r1, r0 - adds r3, r2, 0 - adds r3, 0x10 -_080FAA10: - adds r0, r4, r5 - adds r1, r3, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r4, 0x1 - cmp r4, 0x3 - ble _080FAA10 - adds r6, r2, 0 - ldr r5, _080FAA54 @ =gLinkPlayers - movs r4, 0x4 -_080FAA24: - adds r0, r5, 0 - adds r1, r6, 0 - adds r1, 0x14 - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - ldr r1, [r1] - str r1, [r0] - adds r0, r5, 0 - bl sub_800B284 - adds r6, 0x1C - adds r5, 0x1C - subs r4, 0x1 - cmp r4, 0 - bge _080FAA24 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FAA4C: .4byte Rfu -_080FAA50: .4byte 0x00000996 -_080FAA54: .4byte gLinkPlayers - thumb_func_end sub_80FA9FC - - thumb_func_start sub_80FAA58 -sub_80FAA58: @ 80FAA58 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldr r0, _080FAA8C @ =gUnknown_843EDE4 "PokemonSioInfo" - adds r1, r4, 0 - bl strcmp - adds r5, r0, 0 - cmp r5, 0 - bne _080FAA84 - adds r0, r4, 0 - bl sub_80FA9FC - mov r0, sp - strh r5, [r0] - ldr r2, _080FAA90 @ =0x0100007e - adds r1, r4, 0 - bl CpuSet - movs r0, 0 - bl ResetBlockReceivedFlag -_080FAA84: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FAA8C: .4byte gUnknown_843EDE4 -_080FAA90: .4byte 0x0100007e - thumb_func_end sub_80FAA58 - - thumb_func_start sub_80FAA94 -sub_80FAA94: @ 80FAA94 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r3, _080FAAF4 @ =Rfu - ldr r2, _080FAAF8 @ =gUnknown_843EC38 - ldr r1, _080FAAFC @ =0x000009a1 - adds r0, r3, r1 - ldrb r1, [r0] - adds r1, r2 - ldr r2, _080FAB00 @ =0x00000996 - adds r0, r3, r2 - ldrb r1, [r1] - adds r0, r1 - ldrb r4, [r0] - adds r0, r3, 0 - adds r0, 0xF1 - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080FAAD2 - movs r5, 0x9A - lsls r5, 4 - adds r1, r3, r5 - movs r0, 0 - strb r0, [r1] - adds r0, r6, 0 - bl DestroyTask -_080FAAD2: - ldr r0, _080FAB04 @ =gTasks - lsls r2, r6, 2 - adds r1, r2, r6 - lsls r1, 3 - adds r1, r0 - movs r3, 0x8 - ldrsh r1, [r1, r3] - adds r3, r0, 0 - adds r7, r2, 0 - cmp r1, 0x5 - bls _080FAAEA - b _080FACD6 -_080FAAEA: - lsls r0, r1, 2 - ldr r1, _080FAB08 @ =_080FAB0C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FAAF4: .4byte Rfu -_080FAAF8: .4byte gUnknown_843EC38 -_080FAAFC: .4byte 0x000009a1 -_080FAB00: .4byte 0x00000996 -_080FAB04: .4byte gTasks -_080FAB08: .4byte _080FAB0C - .align 2, 0 -_080FAB0C: - .4byte _080FAB24 - .4byte _080FAB44 - .4byte _080FAB5C - .4byte _080FABA4 - .4byte _080FABEE - .4byte _080FAC78 -_080FAB24: - ldr r0, _080FAB40 @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - beq _080FAB2E - b _080FACD6 -_080FAB2E: - adds r0, r4, 0 - bl ResetBlockReceivedFlag - movs r0, 0xF0 - lsls r0, 7 - bl sub_80F9D04 - b _080FAC2E - .align 2, 0 -_080FAB40: .4byte gSendCmd -_080FAB44: - ldr r0, _080FAB58 @ =gSendCmd - ldrh r0, [r0] - cmp r0, 0 - beq _080FAB4E - b _080FACD6 -_080FAB4E: - adds r1, r7, r6 - lsls r1, 3 - adds r1, r3 - b _080FAC36 - .align 2, 0 -_080FAB58: .4byte gSendCmd -_080FAB5C: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - asrs r0, r4 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080FAB70 - b _080FACD6 -_080FAB70: - adds r0, r4, 0 - bl ResetBlockReceivedFlag - lsls r2, r4, 8 - ldr r0, _080FAB9C @ =gBlockRecvBuffer - adds r2, r0 - ldr r1, _080FABA0 @ =gLinkPlayers - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - adds r0, r1 - adds r1, r0, 0 - adds r2, 0x10 - ldm r2!, {r3-r5} - stm r1!, {r3-r5} - ldm r2!, {r3-r5} - stm r1!, {r3-r5} - ldr r2, [r2] - str r2, [r1] - bl sub_800B284 - b _080FAC2E - .align 2, 0 -_080FAB9C: .4byte gBlockRecvBuffer -_080FABA0: .4byte gLinkPlayers -_080FABA4: - ldr r5, _080FAC40 @ =gBlockSendBuffer - adds r1, r5, 0 - ldr r0, _080FAC44 @ =gUnknown_843EDE4 "PokemonSioInfo" - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldrh r2, [r0] - strh r2, [r1] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x2] - ldr r1, _080FAC48 @ =Rfu - ldrb r0, [r1, 0xD] - strb r0, [r5, 0xF] - movs r2, 0 - adds r4, r5, 0 - adds r4, 0x10 - ldr r0, _080FAC4C @ =0x00000996 - adds r3, r1, r0 -_080FABC6: - adds r0, r4, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _080FABC6 - ldr r1, _080FAC50 @ =gLinkPlayers - adds r0, r5, 0 - adds r0, 0x14 - movs r2, 0x8C - bl memcpy - ldr r0, _080FAC54 @ =gTasks - adds r1, r7, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] -_080FABEE: - ldr r5, _080FAC40 @ =gBlockSendBuffer - ldr r1, _080FAC48 @ =Rfu - ldrb r0, [r1, 0xD] - strb r0, [r5, 0xF] - movs r2, 0 - ldr r3, _080FAC50 @ =gLinkPlayers - mov r12, r3 - adds r4, r5, 0 - adds r4, 0x10 - ldr r0, _080FAC4C @ =0x00000996 - adds r3, r1, r0 -_080FAC04: - adds r0, r4, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _080FAC04 - adds r0, r5, 0 - adds r0, 0x14 - mov r1, r12 - movs r2, 0x8C - bl memcpy - ldr r1, _080FAC40 @ =gBlockSendBuffer - movs r0, 0 - movs r2, 0xA0 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _080FACD6 -_080FAC2E: - ldr r0, _080FAC54 @ =gTasks - adds r1, r7, r6 - lsls r1, 3 - adds r1, r0 -_080FAC36: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _080FACD6 - .align 2, 0 -_080FAC40: .4byte gBlockSendBuffer -_080FAC44: .4byte gUnknown_843EDE4 -_080FAC48: .4byte Rfu -_080FAC4C: .4byte 0x00000996 -_080FAC50: .4byte gLinkPlayers -_080FAC54: .4byte gTasks -_080FAC58: - adds r0, r3, 0 - lsls r0, r2 - ldr r2, _080FAC74 @ =0x0000099d - adds r1, r5, r2 - strb r0, [r1] - ldrb r1, [r4] - eors r0, r1 - strb r0, [r4] - movs r4, 0x9A - lsls r4, 4 - adds r0, r5, r4 - strb r3, [r0] - b _080FACD0 - .align 2, 0 -_080FAC74: .4byte 0x0000099d -_080FAC78: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FACD6 - bl GetBlockReceivedStatus - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080FACD6 - mov r0, sp - movs r4, 0 - strh r4, [r0] - ldr r1, _080FACE0 @ =gBlockRecvBuffer - ldr r2, _080FACE4 @ =0x0100007e - bl CpuSet - movs r0, 0 - bl ResetBlockReceivedFlag - ldr r1, _080FACE8 @ =Rfu - movs r5, 0x9A - lsls r5, 4 - adds r0, r1, r5 - strb r4, [r0] - ldr r0, _080FACEC @ =0x0000099e - adds r3, r1, r0 - ldrb r0, [r3] - cmp r0, 0 - beq _080FACD0 - movs r2, 0 - adds r5, r1, 0 - adds r4, r3, 0 - ldrb r1, [r4] - movs r3, 0x1 -_080FACC0: - adds r0, r1, 0 - asrs r0, r2 - ands r0, r3 - cmp r0, 0 - bne _080FAC58 - adds r2, 0x1 - cmp r2, 0x3 - ble _080FACC0 -_080FACD0: - adds r0, r6, 0 - bl DestroyTask -_080FACD6: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FACE0: .4byte gBlockRecvBuffer -_080FACE4: .4byte 0x0100007e -_080FACE8: .4byte Rfu -_080FACEC: .4byte 0x0000099e - thumb_func_end sub_80FAA94 - - thumb_func_start sub_80FACF0 -sub_80FACF0: @ 80FACF0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r6, _080FAD2C @ =Rfu - adds r0, r6, 0 - adds r0, 0xF1 - ldrb r0, [r0] - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080FAD0E - adds r0, r5, 0 - bl DestroyTask -_080FAD0E: - ldr r1, _080FAD30 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080FAD54 - cmp r0, 0x1 - bgt _080FAD34 - cmp r0, 0 - beq _080FAD3A - b _080FAD8A - .align 2, 0 -_080FAD2C: .4byte Rfu -_080FAD30: .4byte gTasks -_080FAD34: - cmp r0, 0x2 - beq _080FAD66 - b _080FAD8A -_080FAD3A: - ldrb r0, [r6, 0xD] - cmp r0, 0 - beq _080FAD8A - bl sub_800B0B4 - ldr r1, _080FAD50 @ =gBlockSendBuffer - movs r0, 0 - movs r2, 0x3C - bl SendBlock - b _080FAD5E - .align 2, 0 -_080FAD50: .4byte gBlockSendBuffer -_080FAD54: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080FAD8A -_080FAD5E: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080FAD8A -_080FAD66: - bl GetBlockReceivedStatus - movs r4, 0x1 - adds r1, r4, 0 - ands r1, r0 - cmp r1, 0 - beq _080FAD8A - ldr r0, _080FAD90 @ =gBlockRecvBuffer - bl sub_80FA9FC - movs r0, 0 - bl ResetBlockReceivedFlag - ldr r0, _080FAD94 @ =gReceivedRemoteLinkPlayers - strb r4, [r0] - adds r0, r5, 0 - bl DestroyTask -_080FAD8A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FAD90: .4byte gBlockRecvBuffer -_080FAD94: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80FACF0 - - thumb_func_start sub_80FAD98 -sub_80FAD98: @ 80FAD98 - push {r4-r7,lr} - ldr r0, _080FAE10 @ =Rfu - adds r7, r0, 0 - adds r7, 0xEE - ldrb r1, [r7] - adds r5, r0, 0 - cmp r1, 0x1 - bne _080FAE30 - ldr r0, _080FAE14 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x2] - cmp r0, 0 - bne _080FAE30 - ldr r6, _080FAE18 @ =gMain - ldr r1, [r6, 0x4] - ldr r0, _080FAE1C @ =c2_mystery_gift_e_reader_run - cmp r1, r0 - bne _080FADC0 - ldr r1, _080FAE20 @ =gWirelessCommType - movs r0, 0x2 - strb r0, [r1] -_080FADC0: - ldr r4, _080FAE24 @ =CB2_LinkError - adds r0, r4, 0 - bl SetMainCallback2 - str r4, [r6, 0x8] - ldrh r0, [r5, 0xA] - lsls r4, r0, 16 - ldrh r0, [r5, 0x10] - lsls r0, 8 - orrs r4, r0 - ldrh r0, [r5, 0x12] - orrs r4, r0 - ldr r1, _080FAE28 @ =0x0000069e - adds r0, r5, r1 - ldrb r0, [r0] - adds r6, r0, 0 - ldr r1, _080FAE2C @ =0x000008d2 - adds r0, r5, r1 - ldrb r0, [r0] - adds r5, r0, 0 - bl sub_80FB9F4 - movs r3, 0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080FADF8 - movs r3, 0x1 -_080FADF8: - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_800ACBC - ldrb r0, [r7] - movs r0, 0x2 - strb r0, [r7] - bl CloseLink - b _080FAE62 - .align 2, 0 -_080FAE10: .4byte Rfu -_080FAE14: .4byte gUnknown_3005E10 -_080FAE18: .4byte gMain -_080FAE1C: .4byte c2_mystery_gift_e_reader_run -_080FAE20: .4byte gWirelessCommType -_080FAE24: .4byte CB2_LinkError -_080FAE28: .4byte 0x0000069e -_080FAE2C: .4byte 0x000008d2 -_080FAE30: - ldr r1, _080FAE68 @ =0x000008d3 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080FAE44 - ldr r1, _080FAE6C @ =0x0000069f - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FAE62 -_080FAE44: - ldr r0, _080FAE70 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x2] - cmp r0, 0 - beq _080FAE50 - bl sub_80FEB14 -_080FAE50: - movs r4, 0xE0 - lsls r4, 7 - movs r0, 0x1 - adds r1, r4, 0 - bl sub_80FB9E4 - adds r0, r4, 0 - bl sub_80FB0E8 -_080FAE62: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FAE68: .4byte 0x000008d3 -_080FAE6C: .4byte 0x0000069f -_080FAE70: .4byte gUnknown_3005E10 - thumb_func_end sub_80FAD98 - - thumb_func_start rfu_REQ_recvData_then_sendData -rfu_REQ_recvData_then_sendData: @ 80FAE74 - push {lr} - ldr r0, _080FAE90 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x6] - cmp r0, 0x1 - bne _080FAE8C - bl rfu_REQ_recvData - bl rfu_waitREQComplete - movs r0, 0 - bl LinkRfu_REQ_SendData_HandleParentRelationship -_080FAE8C: - pop {r0} - bx r0 - .align 2, 0 -_080FAE90: .4byte gUnknown_3005E10 - thumb_func_end rfu_REQ_recvData_then_sendData - - thumb_func_start sub_80FAE94 -sub_80FAE94: @ 80FAE94 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _080FAEC8 @ =Rfu - ldr r1, _080FAECC @ =0x00000985 - adds r0, r4, r1 - strb r5, [r0] - bl Random - lsls r0, 16 - lsrs r0, 16 - bl sub_80FDA30 - adds r0, r4, 0 - adds r0, 0xEF - ldrb r0, [r0] - cmp r0, 0 - bne _080FAEE8 - ldrb r0, [r4, 0xC] - cmp r0, 0x1 - beq _080FAED6 - cmp r0, 0x1 - bgt _080FAED0 - cmp r0, 0 - beq _080FAEDC - b _080FAEE8 - .align 2, 0 -_080FAEC8: .4byte Rfu -_080FAECC: .4byte 0x00000985 -_080FAED0: - cmp r0, 0x2 - beq _080FAEE4 - b _080FAEE8 -_080FAED6: - bl sub_80F911C - b _080FAEE8 -_080FAEDC: - bl sub_80F9514 - adds r5, r0, 0 - b _080FAEE8 -_080FAEE4: - bl rfu_REQ_recvData_then_sendData -_080FAEE8: - adds r0, r5, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FAE94 - - thumb_func_start sub_80FAEF0 -sub_80FAEF0: @ 80FAEF0 - push {r4,lr} - movs r4, 0 - ldr r1, _080FAF18 @ =Rfu - adds r0, r1, 0 - adds r0, 0xEF - ldrb r0, [r0] - cmp r0, 0 - bne _080FAF10 - ldrb r0, [r1, 0xC] - cmp r0, 0x1 - bne _080FAF0C - bl sub_80F9204 - adds r4, r0, 0 -_080FAF0C: - bl sub_80FAD98 -_080FAF10: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080FAF18: .4byte Rfu - thumb_func_end sub_80FAEF0 - - thumb_func_start sub_80FAF1C -sub_80FAF1C: @ 80FAF1C - push {lr} - ldr r0, _080FAF2C @ =gUnknown_3005E00 - ldr r1, _080FAF30 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - pop {r0} - bx r0 - .align 2, 0 -_080FAF2C: .4byte gUnknown_3005E00 -_080FAF30: .4byte gSaveBlock2Ptr - thumb_func_end sub_80FAF1C - - thumb_func_start sub_80FAF34 -sub_80FAF34: @ 80FAF34 - push {r4,lr} - ldr r4, _080FAF54 @ =gUnknown_3005440 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0xD - bl memset - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80FCB54 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FAF54: .4byte gUnknown_3005440 - thumb_func_end sub_80FAF34 - - thumb_func_start sub_80FAF58 -sub_80FAF58: @ 80FAF58 - push {r4,lr} - adds r4, r0, 0 - adds r3, r1, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080FAF70 @ =gUnknown_3005440 - adds r1, r4, 0 - bl sub_80FCB54 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FAF70: .4byte gUnknown_3005440 - thumb_func_end sub_80FAF58 - - thumb_func_start sub_80FAF74 -sub_80FAF74: @ 80FAF74 - push {r4,r5,lr} - ldr r5, _080FAF9C @ =gUnknown_3005440 - movs r4, 0x1 - ands r0, r4 - lsls r0, 4 - ldrb r3, [r5] - movs r2, 0x11 - negs r2, r2 - ands r2, r3 - orrs r2, r0 - ands r1, r4 - lsls r1, 5 - movs r0, 0x21 - negs r0, r0 - ands r2, r0 - orrs r2, r1 - strb r2, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FAF9C: .4byte gUnknown_3005440 - thumb_func_end sub_80FAF74 - - thumb_func_start sub_80FAFA0 -sub_80FAFA0: @ 80FAFA0 - push {r4,r5,lr} - ldr r5, _080FAFD4 @ =gUnknown_3005440 - lsls r0, 2 - ldrb r4, [r5, 0x9] - movs r3, 0x3 - ands r3, r4 - orrs r3, r0 - strb r3, [r5, 0x9] - ldr r3, _080FAFD8 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldrh r3, [r5, 0x8] - ldr r0, _080FAFDC @ =0xfffffc00 - ands r0, r3 - orrs r0, r1 - strh r0, [r5, 0x8] - lsls r2, 1 - ldrb r1, [r5, 0xB] - movs r0, 0x1 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, 0xB] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FAFD4: .4byte gUnknown_3005440 -_080FAFD8: .4byte 0x000003ff -_080FAFDC: .4byte 0xfffffc00 - thumb_func_end sub_80FAFA0 - - thumb_func_start sub_80FAFE0 -sub_80FAFE0: @ 80FAFE0 - push {lr} - lsls r0, 24 - ldr r2, _080FB000 @ =gUnknown_3005440 - lsrs r0, 17 - ldrb r3, [r2, 0xA] - movs r1, 0x7F - ands r1, r3 - orrs r1, r0 - strb r1, [r2, 0xA] - ldr r3, _080FB004 @ =gUnknown_3005E00 - movs r0, 0 - movs r1, 0x2 - bl rfu_REQ_configGameData - pop {r0} - bx r0 - .align 2, 0 -_080FB000: .4byte gUnknown_3005440 -_080FB004: .4byte gUnknown_3005E00 - thumb_func_end sub_80FAFE0 - - thumb_func_start sub_80FB008 -sub_80FB008: @ 80FB008 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080FB016 - bl sub_80FAF58 -_080FB016: - ldr r2, _080FB028 @ =gUnknown_3005440 - ldr r3, _080FB02C @ =gUnknown_3005E00 - movs r0, 0 - movs r1, 0x2 - bl rfu_REQ_configGameData - pop {r0} - bx r0 - .align 2, 0 -_080FB028: .4byte gUnknown_3005440 -_080FB02C: .4byte gUnknown_3005E00 - thumb_func_end sub_80FB008 - - thumb_func_start sub_80FB030 -sub_80FB030: @ 80FB030 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r9, r0 - bl sub_80F9800 - ldrb r1, [r0, 0xA] - movs r0, 0x7F - ands r0, r1 - cmp r0, 0x45 - bne _080FB0C4 - movs r5, 0 - movs r7, 0 - ldr r3, _080FB0D4 @ =Rfu - ldr r1, _080FB0D8 @ =0x0000099a - adds r0, r3, r1 - ldr r2, _080FB0DC @ =0x0000099b - adds r1, r3, r2 - ldrb r2, [r0] - ldrb r0, [r1] - adds r1, r0, 0 - eors r1, r2 - mov r8, r1 - movs r4, 0 - movs r6, 0x1 - ldr r2, _080FB0E0 @ =gLinkPlayers - mov r12, r2 - ldr r0, _080FB0E4 @ =0x00000996 - adds r0, r3 - mov r10, r0 - mov r3, r12 - adds r3, 0x4 -_080FB074: - mov r0, r8 - asrs r0, r4 - ands r0, r6 - cmp r0, 0 - beq _080FB0B4 - mov r1, r10 - adds r0, r4, r1 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - mov r2, r12 - adds r1, r0, r2 - ldrb r1, [r1, 0x13] - adds r2, r6, 0 - ands r2, r1 - lsls r2, 3 - adds r0, r3 - ldr r1, [r0] - movs r0, 0x7 - ands r1, r0 - movs r0, 0x80 - orrs r1, r0 - orrs r2, r1 - lsls r0, r5, 3 - lsls r2, r0 - orrs r7, r2 - adds r5, 0x1 - mov r0, r9 - subs r0, 0x1 - cmp r5, r0 - beq _080FB0BA -_080FB0B4: - adds r4, 0x1 - cmp r4, 0x3 - ble _080FB074 -_080FB0BA: - movs r0, 0x45 - adds r1, r7, 0 - movs r2, 0 - bl sub_80FB008 -_080FB0C4: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FB0D4: .4byte Rfu -_080FB0D8: .4byte 0x0000099a -_080FB0DC: .4byte 0x0000099b -_080FB0E0: .4byte gLinkPlayers -_080FB0E4: .4byte 0x00000996 - thumb_func_end sub_80FB030 - - thumb_func_start sub_80FB0E8 -sub_80FB0E8: @ 80FB0E8 - push {r4,lr} - adds r4, r0, 0 - ldr r2, _080FB110 @ =Rfu - adds r3, r2, 0 - adds r3, 0xEE - ldrb r0, [r3] - cmp r0, 0 - bne _080FB10A - ldr r1, _080FB114 @ =gUnknown_3005E10 - ldrh r0, [r1, 0x14] - strh r0, [r2, 0x10] - ldrh r0, [r1, 0x16] - strh r0, [r2, 0x12] - strh r4, [r2, 0xA] - ldrb r0, [r3] - movs r0, 0x1 - strb r0, [r3] -_080FB10A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FB110: .4byte Rfu -_080FB114: .4byte gUnknown_3005E10 - thumb_func_end sub_80FB0E8 - - thumb_func_start sub_80FB118 -sub_80FB118: @ 80FB118 - ldr r0, _080FB124 @ =Rfu - adds r0, 0xEE - ldrb r1, [r0] - movs r1, 0 - strb r1, [r0] - bx lr - .align 2, 0 -_080FB124: .4byte Rfu - thumb_func_end sub_80FB118 - - thumb_func_start sub_80FB128 -sub_80FB128: @ 80FB128 - push {lr} - adds r2, r0, 0 - cmp r2, 0 - bne _080FB140 - ldr r0, _080FB13C @ =Rfu - adds r0, 0xEE - ldrb r1, [r0] - strb r2, [r0] - b _080FB14A - .align 2, 0 -_080FB13C: .4byte Rfu -_080FB140: - ldr r0, _080FB150 @ =Rfu - adds r0, 0xEE - ldrb r1, [r0] - movs r1, 0x4 - strb r1, [r0] -_080FB14A: - pop {r0} - bx r0 - .align 2, 0 -_080FB150: .4byte Rfu - thumb_func_end sub_80FB128 - - thumb_func_start sub_80FB154 -sub_80FB154: @ 80FB154 - push {lr} - ldr r0, _080FB16C @ =gUnknown_3005E10 - ldrb r0, [r0] - movs r1, 0x1 - bl sub_80FBE20 - ldr r1, _080FB170 @ =Rfu - movs r0, 0 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080FB16C: .4byte gUnknown_3005E10 -_080FB170: .4byte Rfu - thumb_func_end sub_80FB154 - - thumb_func_start sub_80FB174 -sub_80FB174: @ 80FB174 - ldr r1, _080FB17C @ =Rfu - ldr r0, _080FB180 @ =sub_80FB154 - str r0, [r1] - bx lr - .align 2, 0 -_080FB17C: .4byte Rfu -_080FB180: .4byte sub_80FB154 - thumb_func_end sub_80FB174 - - thumb_func_start sub_80FB184 -sub_80FB184: @ 80FB184 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r4, r0, 24 - movs r6, 0 - cmp r4, 0x32 - bne _080FB19A - b _080FB2D8 -_080FB19A: - cmp r4, 0x32 - bgt _080FB1CA - cmp r4, 0x13 - bgt _080FB1B8 - cmp r4, 0x12 - blt _080FB1A8 - b _080FB366 -_080FB1A8: - cmp r4, 0x10 - bne _080FB1AE - b _080FB366 -_080FB1AE: - cmp r4, 0x10 - bgt _080FB204 - cmp r4, 0 - beq _080FB1F6 - b _080FB366 -_080FB1B8: - cmp r4, 0x30 - bne _080FB1BE - b _080FB2E4 -_080FB1BE: - cmp r4, 0x30 - ble _080FB1C4 - b _080FB2CC -_080FB1C4: - cmp r4, 0x14 - beq _080FB2A0 - b _080FB366 -_080FB1CA: - cmp r4, 0x44 - bgt _080FB1DC - cmp r4, 0x42 - blt _080FB1D4 - b _080FB366 -_080FB1D4: - cmp r4, 0x33 - bne _080FB1DA - b _080FB2E4 -_080FB1DA: - b _080FB366 -_080FB1DC: - cmp r4, 0xF3 - bne _080FB1E2 - b _080FB332 -_080FB1E2: - cmp r4, 0xF3 - bgt _080FB1EE - cmp r4, 0xF0 - bge _080FB1EC - b _080FB366 -_080FB1EC: - b _080FB34C -_080FB1EE: - cmp r4, 0xFF - bne _080FB1F4 - b _080FB34C -_080FB1F4: - b _080FB366 -_080FB1F6: - ldr r1, _080FB200 @ =Rfu - movs r0, 0x2 - strh r0, [r1, 0x4] - b _080FB366 - .align 2, 0 -_080FB200: .4byte Rfu -_080FB204: - ldr r0, _080FB268 @ =gUnknown_3005E10 - ldrh r0, [r0, 0x14] - bl sub_80FB564 - movs r5, 0 - movs r0, 0x1 - mov r8, r0 - ldr r1, _080FB26C @ =Rfu - mov r9, r1 - ldr r3, _080FB270 @ =0x0000098d - add r3, r9 - mov r10, r3 - movs r7, 0x7F -_080FB21E: - ldr r0, _080FB268 @ =gUnknown_3005E10 - ldrh r0, [r0, 0x14] - asrs r0, r5 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _080FB286 - ldr r0, _080FB274 @ =gRfuLinkStatus - lsls r1, r5, 5 - adds r1, 0x14 - ldr r0, [r0] - adds r0, r1 - ldrb r0, [r0, 0x10] - adds r4, r7, 0 - ands r4, r0 - bl sub_80F9800 - ldrb r1, [r0, 0xA] - adds r0, r7, 0 - ands r0, r1 - cmp r4, r0 - bne _080FB27C - ldr r0, _080FB278 @ =0x00000989 - add r0, r9 - adds r0, r5, r0 - movs r1, 0 - strb r1, [r0] - mov r3, r10 - adds r2, r5, r3 - strb r1, [r2] - movs r0, 0x20 - adds r1, r5, 0 - movs r3, 0x1 - bl rfu_setRecvBuffer - b _080FB286 - .align 2, 0 -_080FB268: .4byte gUnknown_3005E10 -_080FB26C: .4byte Rfu -_080FB270: .4byte 0x0000098d -_080FB274: .4byte gRfuLinkStatus -_080FB278: .4byte 0x00000989 -_080FB27C: - mov r0, r8 - lsls r0, r5 - orrs r6, r0 - lsls r0, r6, 24 - lsrs r6, r0, 24 -_080FB286: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _080FB21E - cmp r6, 0 - beq _080FB366 - adds r0, r6, 0 - bl rfu_REQ_disconnect - bl rfu_waitREQComplete - b _080FB366 -_080FB2A0: - ldr r4, _080FB2C0 @ =Rfu - ldr r1, _080FB2C4 @ =0x0000099f - adds r0, r4, r1 - ldr r1, _080FB2C8 @ =gUnknown_3005E10 - ldrb r2, [r0] - ldrb r0, [r1] - cmp r2, r0 - beq _080FB2BA - eors r0, r2 - bl rfu_REQ_disconnect - bl rfu_waitREQComplete -_080FB2BA: - movs r0, 0x11 - strh r0, [r4, 0x4] - b _080FB366 - .align 2, 0 -_080FB2C0: .4byte Rfu -_080FB2C4: .4byte 0x0000099f -_080FB2C8: .4byte gUnknown_3005E10 -_080FB2CC: - ldr r0, _080FB2D4 @ =Rfu - adds r0, 0xF0 - b _080FB362 - .align 2, 0 -_080FB2D4: .4byte Rfu -_080FB2D8: - ldr r0, _080FB2E0 @ =Rfu - adds r0, 0xF0 - movs r1, 0x3 - b _080FB364 - .align 2, 0 -_080FB2E0: .4byte Rfu -_080FB2E4: - ldr r1, _080FB314 @ =Rfu - adds r2, r1, 0 - adds r2, 0xF0 - movs r0, 0x4 - strb r0, [r2] - ldr r3, _080FB318 @ =0x0000099a - adds r1, r3 - ldr r0, _080FB31C @ =gUnknown_3005E10 - ldrb r2, [r0, 0x14] - ldrb r0, [r1] - adds r3, r0, 0 - bics r3, r2 - adds r2, r3, 0 - strb r2, [r1] - ldr r0, _080FB320 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FB328 - cmp r2, 0 - bne _080FB324 - adds r0, r4, 0 - bl sub_80FB0E8 - b _080FB328 - .align 2, 0 -_080FB314: .4byte Rfu -_080FB318: .4byte 0x0000099a -_080FB31C: .4byte gUnknown_3005E10 -_080FB320: .4byte gReceivedRemoteLinkPlayers -_080FB324: - bl sub_80FB174 -_080FB328: - movs r0, 0x2 - adds r1, r4, 0 - bl sub_80FB9E4 - b _080FB366 -_080FB332: - movs r0, 0x1 - movs r1, 0xF3 - bl sub_80FB9E4 - movs r0, 0xF3 - bl sub_80FB0E8 - ldr r0, _080FB348 @ =Rfu - adds r0, 0xEF - b _080FB362 - .align 2, 0 -_080FB348: .4byte Rfu -_080FB34C: - adds r0, r4, 0 - bl sub_80FB0E8 - movs r0, 0x1 - adds r1, r4, 0 - bl sub_80FB9E4 - ldr r0, _080FB374 @ =Rfu - ldr r1, _080FB378 @ =0x00000993 - adds r0, r1 - ldrb r1, [r0] -_080FB362: - movs r1, 0x1 -_080FB364: - strb r1, [r0] -_080FB366: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FB374: .4byte Rfu -_080FB378: .4byte 0x00000993 - thumb_func_end sub_80FB184 - - thumb_func_start sub_80FB37C -sub_80FB37C: @ 80FB37C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x31 - bne _080FB388 - b _080FB4E8 -_080FB388: - cmp r4, 0x31 - bgt _080FB3B6 - cmp r4, 0x22 - beq _080FB40C - cmp r4, 0x22 - bgt _080FB3A4 - cmp r4, 0x20 - beq _080FB3F4 - cmp r4, 0x20 - ble _080FB39E - b _080FB556 -_080FB39E: - cmp r4, 0 - beq _080FB3E6 - b _080FB556 -_080FB3A4: - cmp r4, 0x24 - beq _080FB432 - cmp r4, 0x24 - blt _080FB428 - cmp r4, 0x25 - beq _080FB47C - cmp r4, 0x30 - beq _080FB486 - b _080FB556 -_080FB3B6: - cmp r4, 0x44 - bgt _080FB3CC - cmp r4, 0x42 - blt _080FB3C0 - b _080FB556 -_080FB3C0: - cmp r4, 0x33 - beq _080FB49A - cmp r4, 0x33 - bge _080FB3CA - b _080FB504 -_080FB3CA: - b _080FB556 -_080FB3CC: - cmp r4, 0xF3 - bne _080FB3D2 - b _080FB524 -_080FB3D2: - cmp r4, 0xF3 - bgt _080FB3DE - cmp r4, 0xF0 - bge _080FB3DC - b _080FB556 -_080FB3DC: - b _080FB53C -_080FB3DE: - cmp r4, 0xFF - bne _080FB3E4 - b _080FB53C -_080FB3E4: - b _080FB556 -_080FB3E6: - ldr r1, _080FB3F0 @ =Rfu - movs r0, 0x6 - strh r0, [r1, 0x4] - b _080FB556 - .align 2, 0 -_080FB3F0: .4byte Rfu -_080FB3F4: - ldr r0, _080FB400 @ =Rfu - ldr r1, _080FB404 @ =gUnknown_3005E10 - ldrh r1, [r1, 0x14] - ldr r2, _080FB408 @ =0x00000985 - adds r0, r2 - b _080FB554 - .align 2, 0 -_080FB400: .4byte Rfu -_080FB404: .4byte gUnknown_3005E10 -_080FB408: .4byte 0x00000985 -_080FB40C: - ldr r0, _080FB41C @ =Rfu - ldr r1, _080FB420 @ =gUnknown_3005E10 - ldrh r1, [r1, 0x14] - ldr r2, _080FB424 @ =0x000008f6 - adds r0, r2 - ldrb r2, [r0] - b _080FB554 - .align 2, 0 -_080FB41C: .4byte Rfu -_080FB420: .4byte gUnknown_3005E10 -_080FB424: .4byte 0x000008f6 -_080FB428: - movs r0, 0x2 - adds r1, r4, 0 - bl sub_80FB9E4 - b _080FB556 -_080FB432: - ldr r4, _080FB468 @ =Rfu - movs r1, 0 - movs r0, 0xB - strh r0, [r4, 0x4] - ldr r2, _080FB46C @ =0x0000093d - adds r0, r4, r2 - strb r1, [r0] - ldr r0, _080FB470 @ =0x0000093e - adds r2, r4, r0 - strb r1, [r2] - ldr r1, _080FB474 @ =0x000008f6 - adds r5, r4, r1 - ldrb r1, [r5] - movs r0, 0x20 - movs r3, 0x1 - bl rfu_setRecvBuffer - ldrb r1, [r5] - ldr r2, _080FB478 @ =0x000008f7 - adds r4, r2 - movs r0, 0x10 - adds r2, r4, 0 - movs r3, 0x46 - bl rfu_setRecvBuffer - b _080FB556 - .align 2, 0 -_080FB468: .4byte Rfu -_080FB46C: .4byte 0x0000093d -_080FB470: .4byte 0x0000093e -_080FB474: .4byte 0x000008f6 -_080FB478: .4byte 0x000008f7 -_080FB47C: - movs r0, 0x2 - movs r1, 0x25 - bl sub_80FB9E4 - b _080FB556 -_080FB486: - ldr r0, _080FB4D8 @ =Rfu - adds r2, r0, 0 - adds r2, 0xF0 - movs r1, 0x2 - strb r1, [r2] - ldr r1, _080FB4DC @ =0x0000093e - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x6 - beq _080FB556 -_080FB49A: - ldr r2, _080FB4D8 @ =Rfu - adds r1, r2, 0 - adds r1, 0xF0 - ldrb r0, [r1] - cmp r0, 0x2 - beq _080FB4AA - movs r0, 0x4 - strb r0, [r1] -_080FB4AA: - ldr r1, _080FB4DC @ =0x0000093e - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x9 - beq _080FB4BC - movs r0, 0x2 - adds r1, r4, 0 - bl sub_80FB9E4 -_080FB4BC: - ldr r0, _080FB4E0 @ =gUnknown_843EDF8 "LINK LOSS DISCONNECT!" - movs r1, 0x5 - movs r2, 0x5 - bl nullsub_87 - ldr r0, _080FB4E4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FB556 - adds r0, r4, 0 - bl sub_80FB0E8 - b _080FB556 - .align 2, 0 -_080FB4D8: .4byte Rfu -_080FB4DC: .4byte 0x0000093e -_080FB4E0: .4byte gUnknown_843EDF8 -_080FB4E4: .4byte gReceivedRemoteLinkPlayers -_080FB4E8: - ldr r0, _080FB4FC @ =Rfu - adds r0, 0xF0 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _080FB500 @ =gUnknown_843EE10 "LINK LOSS RECOVERY NOW" - movs r1, 0x5 - movs r2, 0x5 - bl nullsub_87 - b _080FB556 - .align 2, 0 -_080FB4FC: .4byte Rfu -_080FB500: .4byte gUnknown_843EE10 -_080FB504: - ldr r1, _080FB51C @ =Rfu - adds r2, r1, 0 - adds r2, 0xF0 - movs r0, 0x3 - strb r0, [r2] - ldr r2, _080FB520 @ =0x000008f4 - adds r1, r2 - ldrb r0, [r1] - movs r0, 0x1 - strb r0, [r1] - b _080FB556 - .align 2, 0 -_080FB51C: .4byte Rfu -_080FB520: .4byte 0x000008f4 -_080FB524: - movs r0, 0x1 - movs r1, 0xF3 - bl sub_80FB9E4 - movs r0, 0xF3 - bl sub_80FB0E8 - ldr r0, _080FB538 @ =Rfu - adds r0, 0xEF - b _080FB552 - .align 2, 0 -_080FB538: .4byte Rfu -_080FB53C: - movs r0, 0x1 - adds r1, r4, 0 - bl sub_80FB9E4 - adds r0, r4, 0 - bl sub_80FB0E8 - ldr r0, _080FB55C @ =Rfu - ldr r1, _080FB560 @ =0x00000993 - adds r0, r1 - ldrb r1, [r0] -_080FB552: - movs r1, 0x1 -_080FB554: - strb r1, [r0] -_080FB556: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FB55C: .4byte Rfu -_080FB560: .4byte 0x00000993 - thumb_func_end sub_80FB37C - - thumb_func_start sub_80FB564 -sub_80FB564: @ 80FB564 - push {r4-r6,lr} - adds r3, r0, 0 - movs r2, 0 - movs r6, 0x1 - ldr r0, _080FB598 @ =Rfu - ldr r4, _080FB59C @ =0x000009a2 - adds r1, r0, r4 - movs r5, 0 - movs r4, 0xFF -_080FB576: - adds r0, r3, 0 - asrs r0, r2 - ands r0, r6 - cmp r0, 0 - beq _080FB588 - strb r5, [r1] - ldrb r0, [r1, 0x4] - orrs r0, r4 - strb r0, [r1, 0x4] -_080FB588: - adds r1, 0x1 - adds r2, 0x1 - cmp r2, 0x3 - ble _080FB576 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FB598: .4byte Rfu -_080FB59C: .4byte 0x000009a2 - thumb_func_end sub_80FB564 - - thumb_func_start sub_80FB5A0 -sub_80FB5A0: @ 80FB5A0 - push {r4-r7,lr} - adds r5, r0, 0 - movs r3, 0 - movs r2, 0 - movs r4, 0x1 - ldr r6, _080FB5E8 @ =gRfuLinkStatus - movs r7, 0x7F -_080FB5AE: - adds r0, r5, 0 - asrs r0, r2 - ands r0, r4 - cmp r0, 0 - beq _080FB5D4 - lsls r1, r2, 5 - adds r1, 0x14 - ldr r0, [r6] - adds r0, r1 - ldrb r1, [r0, 0x10] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0x45 - bne _080FB5D4 - adds r0, r4, 0 - lsls r0, r2 - orrs r3, r0 - lsls r0, r3, 24 - lsrs r3, r0, 24 -_080FB5D4: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _080FB5AE - adds r0, r3, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080FB5E8: .4byte gRfuLinkStatus - thumb_func_end sub_80FB5A0 - - thumb_func_start sub_80FB5EC -sub_80FB5EC: @ 80FB5EC - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x25 - bne _080FB5F8 - b _080FB86C -_080FB5F8: - cmp r4, 0x25 - bgt _080FB63A - cmp r4, 0x14 - bne _080FB602 - b _080FB780 -_080FB602: - cmp r4, 0x14 - bgt _080FB61A - cmp r4, 0x11 - beq _080FB69A - cmp r4, 0x11 - ble _080FB610 - b _080FB9C2 -_080FB610: - cmp r4, 0 - beq _080FB684 - cmp r4, 0x10 - beq _080FB690 - b _080FB9C2 -_080FB61A: - cmp r4, 0x22 - bne _080FB620 - b _080FB7E8 -_080FB620: - cmp r4, 0x22 - bgt _080FB62C - cmp r4, 0x20 - bne _080FB62A - b _080FB7D0 -_080FB62A: - b _080FB9C2 -_080FB62C: - cmp r4, 0x23 - bne _080FB632 - b _080FB804 -_080FB632: - cmp r4, 0x24 - bne _080FB638 - b _080FB83A -_080FB638: - b _080FB9C2 -_080FB63A: - cmp r4, 0x44 - bgt _080FB66A - cmp r4, 0x42 - blt _080FB644 - b _080FB9C2 -_080FB644: - cmp r4, 0x32 - bne _080FB64A - b _080FB894 -_080FB64A: - cmp r4, 0x32 - bgt _080FB65C - cmp r4, 0x30 - bne _080FB654 - b _080FB8C0 -_080FB654: - cmp r4, 0x31 - bne _080FB65A - b _080FB876 -_080FB65A: - b _080FB9C2 -_080FB65C: - cmp r4, 0x33 - bne _080FB662 - b _080FB8C8 -_080FB662: - cmp r4, 0x40 - bne _080FB668 - b _080FB97C -_080FB668: - b _080FB9C2 -_080FB66A: - cmp r4, 0xF3 - bne _080FB670 - b _080FB98C -_080FB670: - cmp r4, 0xF3 - bgt _080FB67C - cmp r4, 0xF0 - bge _080FB67A - b _080FB9C2 -_080FB67A: - b _080FB9A8 -_080FB67C: - cmp r4, 0xFF - bne _080FB682 - b _080FB9A8 -_080FB682: - b _080FB9C2 -_080FB684: - ldr r1, _080FB68C @ =Rfu - movs r0, 0x11 - strh r0, [r1, 0x4] - b _080FB9C2 - .align 2, 0 -_080FB68C: .4byte Rfu -_080FB690: - movs r0, 0x4 - movs r1, 0 - bl sub_80FB9E4 - b _080FB9C2 -_080FB69A: - bl sub_80F9800 - ldrb r1, [r0, 0xA] - movs r0, 0x7F - ands r0, r1 - cmp r0, 0x45 - bne _080FB758 - ldr r5, _080FB704 @ =Rfu - ldr r1, _080FB708 @ =0x00000991 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080FB758 - ldr r0, _080FB70C @ =gUnknown_3005E10 - ldrh r0, [r0, 0x14] - bl sub_80FB5A0 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _080FB722 - adds r0, r4, 0 - bl sub_80F886C - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x1 - mov r12, r2 - mov r1, r12 - lsls r1, r0 - lsls r1, 24 - lsrs r1, 24 - ldr r7, _080FB710 @ =0x0000099e - adds r6, r5, r7 - ldrb r2, [r6] - cmp r2, 0 - bne _080FB714 - movs r0, 0x9A - lsls r0, 4 - adds r3, r5, r0 - ldrb r0, [r3] - cmp r0, 0 - bne _080FB714 - subs r7, 0x1 - adds r0, r5, r7 - strb r1, [r0] - eors r1, r4 - orrs r1, r2 - strb r1, [r6] - mov r0, r12 - strb r0, [r3] - b _080FB722 - .align 2, 0 -_080FB704: .4byte Rfu -_080FB708: .4byte 0x00000991 -_080FB70C: .4byte gUnknown_3005E10 -_080FB710: .4byte 0x0000099e -_080FB714: - ldr r0, _080FB744 @ =Rfu - ldr r1, _080FB748 @ =0x0000099e - adds r0, r1 - ldrb r2, [r0] - adds r1, r4, 0 - orrs r1, r2 - strb r1, [r0] -_080FB722: - ldr r0, _080FB74C @ =gUnknown_3005E10 - ldrh r1, [r0, 0x14] - cmp r4, r1 - beq _080FB772 - ldr r2, _080FB744 @ =Rfu - ldr r7, _080FB750 @ =0x0000099b - adds r3, r2, r7 - adds r0, r4, 0 - eors r0, r1 - ldrb r1, [r3] - orrs r0, r1 - strb r0, [r3] - ldr r0, _080FB754 @ =0x0000099c - adds r2, r0 - movs r0, 0x2 - strb r0, [r2] - b _080FB772 - .align 2, 0 -_080FB744: .4byte Rfu -_080FB748: .4byte 0x0000099e -_080FB74C: .4byte gUnknown_3005E10 -_080FB750: .4byte 0x0000099b -_080FB754: .4byte 0x0000099c -_080FB758: - bl sub_80F9800 - ldrb r1, [r0, 0xA] - movs r0, 0x7F - ands r0, r1 - cmp r0, 0x54 - bne _080FB772 - ldr r0, _080FB77C @ =gUnknown_3005E10 - ldrb r0, [r0] - bl rfu_REQ_disconnect - bl rfu_waitREQComplete -_080FB772: - ldr r0, _080FB77C @ =gUnknown_3005E10 - ldrh r0, [r0, 0x14] - bl sub_80FB564 - b _080FB9C2 - .align 2, 0 -_080FB77C: .4byte gUnknown_3005E10 -_080FB780: - bl sub_80F9800 - ldrb r1, [r0, 0xA] - movs r0, 0x7F - ands r0, r1 - cmp r0, 0x45 - beq _080FB7B6 - ldr r4, _080FB7C8 @ =gUnknown_3005E10 - ldrb r0, [r4, 0x1] - cmp r0, 0x1 - bls _080FB7B6 - ldrb r0, [r4, 0x14] - bl sub_80F886C - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 17 - lsls r1, r0 - lsrs r1, 24 - ldrb r0, [r4] - eors r1, r0 - adds r0, r1, 0 - bl rfu_REQ_disconnect - bl rfu_waitREQComplete -_080FB7B6: - ldr r1, _080FB7CC @ =Rfu - ldrh r0, [r1, 0x4] - cmp r0, 0xF - beq _080FB7C0 - b _080FB9C2 -_080FB7C0: - movs r0, 0x10 - strh r0, [r1, 0x4] - b _080FB9C2 - .align 2, 0 -_080FB7C8: .4byte gUnknown_3005E10 -_080FB7CC: .4byte Rfu -_080FB7D0: - ldr r0, _080FB7DC @ =Rfu - ldr r1, _080FB7E0 @ =gUnknown_3005E10 - ldrh r1, [r1, 0x14] - ldr r2, _080FB7E4 @ =0x00000985 - adds r0, r2 - b _080FB9C0 - .align 2, 0 -_080FB7DC: .4byte Rfu -_080FB7E0: .4byte gUnknown_3005E10 -_080FB7E4: .4byte 0x00000985 -_080FB7E8: - ldr r0, _080FB7F8 @ =Rfu - ldr r1, _080FB7FC @ =gUnknown_3005E10 - ldrh r1, [r1, 0x14] - ldr r7, _080FB800 @ =0x000008f6 - adds r0, r7 - ldrb r2, [r0] - b _080FB9C0 - .align 2, 0 -_080FB7F8: .4byte Rfu -_080FB7FC: .4byte gUnknown_3005E10 -_080FB800: .4byte 0x000008f6 -_080FB804: - ldr r1, _080FB824 @ =Rfu - movs r0, 0x12 - strh r0, [r1, 0x4] - ldr r0, _080FB828 @ =0x00000987 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0x1 - bhi _080FB830 - adds r0, 0x1 - strb r0, [r1] - ldr r0, _080FB82C @ =sub_80FC028 - movs r1, 0x2 - bl CreateTask - b _080FB9C2 - .align 2, 0 -_080FB824: .4byte Rfu -_080FB828: .4byte 0x00000987 -_080FB82C: .4byte sub_80FC028 -_080FB830: - movs r0, 0x2 - movs r1, 0x23 - bl sub_80FB9E4 - b _080FB9C2 -_080FB83A: - ldr r4, _080FB860 @ =Rfu - movs r0, 0xD - strh r0, [r4, 0x4] - movs r0, 0x3 - movs r1, 0 - bl sub_80FB9E4 - ldr r1, _080FB864 @ =0x000008f6 - adds r0, r4, r1 - ldrb r1, [r0] - ldr r2, _080FB868 @ =0x000008f7 - adds r4, r2 - movs r0, 0x10 - adds r2, r4, 0 - movs r3, 0x46 - bl rfu_setRecvBuffer - b _080FB9C2 - .align 2, 0 -_080FB860: .4byte Rfu -_080FB864: .4byte 0x000008f6 -_080FB868: .4byte 0x000008f7 -_080FB86C: - movs r0, 0x2 - movs r1, 0x25 - bl sub_80FB9E4 - b _080FB9C2 -_080FB876: - ldr r0, _080FB88C @ =gUnknown_3005E10 - ldrb r1, [r0] - ldrh r0, [r0, 0x14] - ands r1, r0 - cmp r1, 0 - bne _080FB884 - b _080FB9C2 -_080FB884: - ldr r0, _080FB890 @ =Rfu - adds r0, 0xF0 - movs r1, 0x1 - b _080FB9C0 - .align 2, 0 -_080FB88C: .4byte gUnknown_3005E10 -_080FB890: .4byte Rfu -_080FB894: - ldr r2, _080FB8B4 @ =Rfu - adds r1, r2, 0 - adds r1, 0xF0 - movs r0, 0x3 - strb r0, [r1] - ldr r0, _080FB8B8 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - beq _080FB8AA - b _080FB9C2 -_080FB8AA: - ldr r7, _080FB8BC @ =0x000008f4 - adds r0, r2, r7 - ldrb r1, [r0] - movs r1, 0x1 - b _080FB9C0 - .align 2, 0 -_080FB8B4: .4byte Rfu -_080FB8B8: .4byte gRfuLinkStatus -_080FB8BC: .4byte 0x000008f4 -_080FB8C0: - ldr r0, _080FB900 @ =Rfu - adds r0, 0xF0 - movs r1, 0x2 - strb r1, [r0] -_080FB8C8: - ldr r2, _080FB900 @ =Rfu - adds r1, r2, 0 - adds r1, 0xF0 - ldrb r0, [r1] - cmp r0, 0x2 - beq _080FB8D8 - movs r0, 0x4 - strb r0, [r1] -_080FB8D8: - ldrb r0, [r2, 0xC] - cmp r0, 0x1 - bne _080FB916 - ldr r0, _080FB904 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FB934 - ldr r0, _080FB908 @ =0x0000099a - adds r2, r0 - ldr r0, _080FB90C @ =gUnknown_3005E10 - ldrb r1, [r0, 0x14] - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - cmp r0, 0 - bne _080FB910 - adds r0, r4, 0 - bl sub_80FB0E8 - b _080FB934 - .align 2, 0 -_080FB900: .4byte Rfu -_080FB904: .4byte gReceivedRemoteLinkPlayers -_080FB908: .4byte 0x0000099a -_080FB90C: .4byte gUnknown_3005E10 -_080FB910: - bl sub_80FB174 - b _080FB934 -_080FB916: - ldr r1, _080FB964 @ =0x0000099c - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x2 - beq _080FB934 - ldr r0, _080FB968 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FB934 - adds r0, r4, 0 - bl sub_80FB0E8 - movs r0, 0 - bl sub_80FD760 -_080FB934: - ldr r0, _080FB96C @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0xFF - bne _080FB95A - ldr r0, _080FB970 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _080FB95A - ldr r0, _080FB974 @ =sub_80F8B34 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080FB95A - ldr r1, _080FB978 @ =Rfu - movs r0, 0x11 - strh r0, [r1, 0x4] -_080FB95A: - movs r0, 0x2 - adds r1, r4, 0 - bl sub_80FB9E4 - b _080FB9C2 - .align 2, 0 -_080FB964: .4byte 0x0000099c -_080FB968: .4byte gReceivedRemoteLinkPlayers -_080FB96C: .4byte gRfuLinkStatus -_080FB970: .4byte gUnknown_3005E10 -_080FB974: .4byte sub_80F8B34 -_080FB978: .4byte Rfu -_080FB97C: - ldr r0, _080FB984 @ =Rfu - ldr r2, _080FB988 @ =0x0000099b - adds r0, r2 - b _080FB9BE - .align 2, 0 -_080FB984: .4byte Rfu -_080FB988: .4byte 0x0000099b -_080FB98C: - movs r0, 0x1 - movs r1, 0xF3 - bl sub_80FB9E4 - movs r0, 0xF3 - bl sub_80FB0E8 - ldr r0, _080FB9A4 @ =Rfu - adds r0, 0xEF - movs r1, 0x1 - b _080FB9C0 - .align 2, 0 -_080FB9A4: .4byte Rfu -_080FB9A8: - adds r0, r4, 0 - bl sub_80FB0E8 - movs r0, 0x1 - adds r1, r4, 0 - bl sub_80FB9E4 - ldr r0, _080FB9C8 @ =Rfu - ldr r7, _080FB9CC @ =0x00000993 - adds r0, r7 - ldrb r1, [r0] -_080FB9BE: - movs r1, 0 -_080FB9C0: - strb r1, [r0] -_080FB9C2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FB9C8: .4byte Rfu -_080FB9CC: .4byte 0x00000993 - thumb_func_end sub_80FB5EC - - thumb_func_start sub_80FB9D0 -sub_80FB9D0: @ 80FB9D0 - ldr r0, _080FB9DC @ =Rfu - ldr r1, _080FB9E0 @ =0x0000099c - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - bx lr - .align 2, 0 -_080FB9DC: .4byte Rfu -_080FB9E0: .4byte 0x0000099c - thumb_func_end sub_80FB9D0 - - thumb_func_start sub_80FB9E4 -sub_80FB9E4: @ 80FB9E4 - ldr r2, _080FB9F0 @ =Rfu - adds r3, r2, 0 - adds r3, 0xF1 - strb r0, [r3] - strh r1, [r2, 0xA] - bx lr - .align 2, 0 -_080FB9F0: .4byte Rfu - thumb_func_end sub_80FB9E4 - - thumb_func_start sub_80FB9F4 -sub_80FB9F4: @ 80FB9F4 - ldr r0, _080FB9FC @ =Rfu - adds r0, 0xF1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080FB9FC: .4byte Rfu - thumb_func_end sub_80FB9F4 - - thumb_func_start sub_80FBA00 -sub_80FBA00: @ 80FBA00 - push {lr} - bl sub_80FB9F4 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x1 - bls _080FBA14 - movs r0, 0 - b _080FBA16 -_080FBA14: - movs r0, 0x1 -_080FBA16: - pop {r1} - bx r1 - thumb_func_end sub_80FBA00 - - thumb_func_start sub_80FBA1C -sub_80FBA1C: @ 80FBA1C - ldr r0, _080FBA28 @ =Rfu - movs r1, 0x9A - lsls r1, 4 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080FBA28: .4byte Rfu - thumb_func_end sub_80FBA1C - - thumb_func_start Rfu_IsMaster -Rfu_IsMaster: @ 80FBA2C - ldr r0, _080FBA34 @ =Rfu - ldrb r0, [r0, 0xC] - bx lr - .align 2, 0 -_080FBA34: .4byte Rfu - thumb_func_end Rfu_IsMaster - - thumb_func_start RFUVSync -RFUVSync: @ 80FBA38 - push {lr} - bl rfu_syncVBlank_ - pop {r0} - bx r0 - thumb_func_end RFUVSync - - thumb_func_start sub_80FBA44 -sub_80FBA44: @ 80FBA44 - push {lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - ldr r1, _080FBA5C @ =gRecvCmds - ldr r2, _080FBA60 @ =0x05000014 - mov r0, sp - bl CpuSet - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080FBA5C: .4byte gRecvCmds -_080FBA60: .4byte 0x05000014 - thumb_func_end sub_80FBA44 - - thumb_func_start sub_80FBA64 -sub_80FBA64: @ 80FBA64 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80FBA64 - - thumb_func_start sub_80FBA78 -sub_80FBA78: @ 80FBA78 - push {r4,lr} - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - bl ResetPaletteFade - ldr r0, _080FBAF4 @ =sub_80FBA64 - bl SetVBlankCallback - bl IsWirelessAdapterConnected - lsls r0, 24 - cmp r0, 0 - beq _080FBAEC - ldr r1, _080FBAF8 @ =gLinkType - ldr r2, _080FBAFC @ =0x00001111 - adds r0, r2, 0 - strh r0, [r1] - bl sub_800B1F4 - bl OpenLink - ldr r0, _080FBB00 @ =gMain - ldrh r0, [r0, 0x24] - bl SeedRng - movs r4, 0 -_080FBAB4: - bl Random - ldr r1, _080FBB04 @ =gSaveBlock2Ptr - ldr r1, [r1] - adds r1, 0xA - adds r1, r4 - strb r0, [r1] - adds r4, 0x1 - cmp r4, 0x3 - ble _080FBAB4 - movs r1, 0xAA - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - bl sub_80FBB20 - ldr r0, _080FBB08 @ =sub_80FBB74 - bl SetMainCallback2 -_080FBAEC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FBAF4: .4byte sub_80FBA64 -_080FBAF8: .4byte gLinkType -_080FBAFC: .4byte 0x00001111 -_080FBB00: .4byte gMain -_080FBB04: .4byte gSaveBlock2Ptr -_080FBB08: .4byte sub_80FBB74 - thumb_func_end sub_80FBA78 - - thumb_func_start sub_80FBB0C -sub_80FBB0C: @ 80FBB0C - push {lr} - ldr r0, _080FBB1C @ =sub_80F8B34 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_080FBB1C: .4byte sub_80F8B34 - thumb_func_end sub_80FBB0C - - thumb_func_start sub_80FBB20 -sub_80FBB20: @ 80FBB20 - push {r4,lr} - ldr r4, _080FBB44 @ =nullsub_89 - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _080FBB3E - adds r0, r4, 0 - movs r1, 0 - bl CreateTask - ldr r1, _080FBB48 @ =Rfu - adds r1, 0x66 - strb r0, [r1] -_080FBB3E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FBB44: .4byte nullsub_89 -_080FBB48: .4byte Rfu - thumb_func_end sub_80FBB20 - - thumb_func_start sub_80FBB4C -sub_80FBB4C: @ 80FBB4C - push {lr} - ldr r0, _080FBB6C @ =nullsub_89 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080FBB66 - ldr r0, _080FBB70 @ =Rfu - adds r0, 0x66 - ldrb r0, [r0] - bl DestroyTask -_080FBB66: - pop {r0} - bx r0 - .align 2, 0 -_080FBB6C: .4byte nullsub_89 -_080FBB70: .4byte Rfu - thumb_func_end sub_80FBB4C - - thumb_func_start sub_80FBB74 -sub_80FBB74: @ 80FBB74 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80FBB74 - - thumb_func_start sub_80FBB8C -sub_80FBB8C: @ 80FBB8C - push {r4-r6,lr} - adds r4, r0, 0 - ldr r1, _080FBBC4 @ =Rfu - movs r0, 0x1 - strb r0, [r1, 0xC] - bl sub_80FAF1C - ldr r0, _080FBBC8 @ =sub_80FB184 - movs r1, 0 - bl sub_80FD430 - ldr r2, _080FBBCC @ =gUnknown_203ABF0 - adds r1, r2, 0 - ldr r0, _080FBBD0 @ =gUnknown_843EBB4 - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldr r0, _080FBBD4 @ =gUnknown_843EBCC - subs r4, 0x1 - adds r4, r0 - ldrb r0, [r4] - strh r0, [r2, 0x2] - bl sub_80F8E74 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBBC4: .4byte Rfu -_080FBBC8: .4byte sub_80FB184 -_080FBBCC: .4byte gUnknown_203ABF0 -_080FBBD0: .4byte gUnknown_843EBB4 -_080FBBD4: .4byte gUnknown_843EBCC - thumb_func_end sub_80FBB8C - - thumb_func_start sub_80FBBD8 -sub_80FBBD8: @ 80FBBD8 - push {lr} - ldr r1, _080FBBF4 @ =Rfu - movs r0, 0 - strb r0, [r1, 0xC] - bl sub_80FAF1C - ldr r0, _080FBBF8 @ =sub_80FB37C - ldr r1, _080FBBFC @ =sub_80F8D20 - bl sub_80FD430 - bl sub_80F8F10 - pop {r0} - bx r0 - .align 2, 0 -_080FBBF4: .4byte Rfu -_080FBBF8: .4byte sub_80FB37C -_080FBBFC: .4byte sub_80F8D20 - thumb_func_end sub_80FBBD8 - - thumb_func_start sub_80FBC00 -sub_80FBC00: @ 80FBC00 - push {r4-r7,lr} - ldr r0, _080FBC4C @ =gUnknown_203ADFA - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080FBC46 - ldr r4, _080FBC50 @ =Rfu - movs r5, 0 - movs r0, 0x2 - strb r0, [r4, 0xC] - bl sub_80FAF1C - ldr r0, _080FBC54 @ =sub_80FB5EC - movs r1, 0 - bl sub_80FD430 - ldr r2, _080FBC58 @ =gUnknown_203ABF0 - adds r1, r2, 0 - ldr r0, _080FBC5C @ =gUnknown_843EBB4 - ldm r0!, {r3,r6,r7} - stm r1!, {r3,r6,r7} - ldm r0!, {r3,r6,r7} - stm r1!, {r3,r6,r7} - strb r5, [r2, 0x11] - movs r0, 0x96 - lsls r0, 2 - strh r0, [r2, 0x12] - ldr r0, _080FBC60 @ =sub_80F8B34 - movs r1, 0x1 - bl CreateTask - adds r4, 0x67 - strb r0, [r4] -_080FBC46: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FBC4C: .4byte gUnknown_203ADFA -_080FBC50: .4byte Rfu -_080FBC54: .4byte sub_80FB5EC -_080FBC58: .4byte gUnknown_203ABF0 -_080FBC5C: .4byte gUnknown_843EBB4 -_080FBC60: .4byte sub_80F8B34 - thumb_func_end sub_80FBC00 - - thumb_func_start sub_80FBC64 -sub_80FBC64: @ 80FBC64 - ldrb r1, [r0, 0x1] - lsls r1, 8 - ldrb r0, [r0] - orrs r0, r1 - bx lr - thumb_func_end sub_80FBC64 - - thumb_func_start sub_80FBC70 -sub_80FBC70: @ 80FBC70 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - movs r0, 0xFF - mov r9, r0 - movs r7, 0 - ldr r1, _080FBCF4 @ =gRfuLinkStatus - mov r8, r1 -_080FBC8E: - lsls r4, r7, 5 - adds r5, r4, 0 - adds r5, 0x14 - mov r1, r8 - ldr r0, [r1] - adds r0, r5 - adds r0, 0x8 - bl sub_80FBC64 - lsls r0, 16 - lsrs r6, r0, 16 - mov r1, r8 - ldr r0, [r1] - adds r0, r4 - ldrh r0, [r0, 0x18] - bl sub_80FA44C - cmp r0, 0 - beq _080FBCD8 - mov r0, r8 - ldr r1, [r0] - adds r1, r5 - adds r1, 0x15 - ldr r0, [sp] - bl StringCompare - cmp r0, 0 - bne _080FBCD8 - cmp r10, r6 - bne _080FBCD8 - mov r9, r7 - mov r1, r8 - ldr r0, [r1] - adds r0, r4 - ldrb r0, [r0, 0x16] - cmp r0, 0xFF - bne _080FBCE2 -_080FBCD8: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3 - bls _080FBC8E -_080FBCE2: - mov r0, r9 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080FBCF4: .4byte gRfuLinkStatus - thumb_func_end sub_80FBC70 - - thumb_func_start sub_80FBCF8 -sub_80FBCF8: @ 80FBCF8 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r0, r6, 24 - lsrs r0, 24 - bl rfu_REQ_disconnect - bl rfu_waitREQComplete - ldr r4, _080FBD3C @ =Rfu - ldr r0, _080FBD40 @ =0x0000099a - adds r5, r4, r0 - ldrb r0, [r5] - bics r0, r6 - strb r0, [r5] - ldr r1, _080FBD44 @ =0x00000992 - adds r6, r4, r1 - ldrb r1, [r6] - movs r0, 0x1 - bl rfu_clearSlot - ldrb r0, [r5] - ldr r1, _080FBD48 @ =0x0000093f - adds r4, r1 - adds r1, r4, 0 - movs r2, 0x46 - bl rfu_UNI_setSendData - ldrb r0, [r5] - bl sub_80F886C - strb r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBD3C: .4byte Rfu -_080FBD40: .4byte 0x0000099a -_080FBD44: .4byte 0x00000992 -_080FBD48: .4byte 0x0000093f - thumb_func_end sub_80FBCF8 - - thumb_func_start sub_80FBD4C -sub_80FBD4C: @ 80FBD4C - push {lr} - lsls r1, 16 - lsrs r1, 16 - bl sub_80FBC70 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _080FBD66 - movs r0, 0x1 - lsls r0, r1 - bl sub_80FBCF8 -_080FBD66: - pop {r0} - bx r0 - thumb_func_end sub_80FBD4C - - thumb_func_start sub_80FBD6C -sub_80FBD6C: @ 80FBD6C - push {r4-r6,lr} - adds r4, r0, 0 - cmp r4, 0 - beq _080FBDAC - movs r3, 0 - movs r2, 0 - ldr r5, _080FBDB4 @ =Rfu+0x996 - adds r6, r5, 0x4 -_080FBD7C: - adds r0, r2, r5 - ldrb r0, [r0] - cmp r0, r4 - bne _080FBD9A - ldrb r0, [r6] - asrs r0, r2 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FBD9A - adds r0, r1, 0 - lsls r0, r2 - orrs r3, r0 - lsls r0, r3, 24 - lsrs r3, r0, 24 -_080FBD9A: - adds r2, 0x1 - cmp r2, 0x3 - ble _080FBD7C - cmp r3, 0 - beq _080FBDAC - adds r0, r3, 0 - movs r1, 0x2 - bl sub_80FBE20 -_080FBDAC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBDB4: .4byte Rfu+0x996 - thumb_func_end sub_80FBD6C - - thumb_func_start sub_80FBDB8 -sub_80FBDB8: @ 80FBDB8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r6, _080FBE10 @ =gSendCmd - ldrh r0, [r6] - cmp r0, 0 - bne _080FBE08 - ldr r5, _080FBE14 @ =Rfu - movs r1, 0x9A - lsls r1, 4 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080FBE08 - movs r0, 0xED - lsls r0, 8 - bl sub_80F9D04 - ldr r1, _080FBE18 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - strh r1, [r6, 0x2] - ldrh r1, [r0, 0xA] - strh r1, [r6, 0x4] - ldr r1, _080FBE1C @ =gUnknown_843EC41 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r0, r1 - ldrb r1, [r5, 0xD] - ldrb r0, [r0] - subs r1, r0 - strb r1, [r5, 0xD] - ldrb r0, [r5, 0xD] - strh r0, [r6, 0x6] - adds r0, r4, 0 - bl DestroyTask -_080FBE08: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBE10: .4byte gSendCmd -_080FBE14: .4byte Rfu -_080FBE18: .4byte gTasks -_080FBE1C: .4byte gUnknown_843EC41 - thumb_func_end sub_80FBDB8 - - thumb_func_start sub_80FBE20 -sub_80FBE20: @ 80FBE20 - push {r4-r6,lr} - adds r4, r0, 0 - adds r6, r1, 0 - ldr r5, _080FBE50 @ =sub_80FBDB8 - adds r0, r5, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - bne _080FBE58 - adds r0, r5, 0 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080FBE54 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - strh r4, [r0, 0x8] - b _080FBE68 - .align 2, 0 -_080FBE50: .4byte sub_80FBDB8 -_080FBE54: .4byte gTasks -_080FBE58: - ldr r0, _080FBE7C @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - orrs r4, r0 - strh r4, [r1, 0x8] -_080FBE68: - ldr r1, _080FBE7C @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - strh r6, [r0, 0xA] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBE7C: .4byte gTasks - thumb_func_end sub_80FBE20 - - thumb_func_start sub_80FBE80 -sub_80FBE80: @ 80FBE80 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080FBED8 @ =gTasks+0x8 - adds r4, r0, r1 - bl sub_80F8EA4 - lsls r0, 24 - cmp r0, 0 - beq _080FBF30 - adds r0, r4, 0 - adds r0, 0x10 - bl sub_80FBC64 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl sub_80FBC70 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080FBF18 - ldr r0, _080FBEDC @ =gRfuLinkStatus - ldr r0, [r0] - lsls r1, r2, 5 - adds r0, r1 - ldrb r0, [r0, 0x16] - cmp r0, 0xFF - beq _080FBEE8 - ldr r0, _080FBEE0 @ =Rfu - ldr r1, _080FBEE4 @ =0x000008f5 - adds r0, r1 - strb r2, [r0] - bl sub_80F8ECC - cmp r0, 0 - beq _080FBF36 - b _080FBF10 - .align 2, 0 -_080FBED8: .4byte gTasks+0x8 -_080FBEDC: .4byte gRfuLinkStatus -_080FBEE0: .4byte Rfu -_080FBEE4: .4byte 0x000008f5 -_080FBEE8: - bl sub_80F9800 - ldrb r1, [r0, 0xA] - movs r5, 0x7F - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0x15 - beq _080FBF30 - bl sub_80F9800 - ldrb r1, [r0, 0xA] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0x16 - beq _080FBF30 - movs r1, 0xE0 - lsls r1, 7 - movs r0, 0x2 - bl sub_80FB9E4 -_080FBF10: - adds r0, r6, 0 - bl DestroyTask - b _080FBF36 -_080FBF18: - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - ldr r0, _080FBF28 @ =Rfu - ldr r1, _080FBF2C @ =0x000008f5 - adds r0, r1 - strb r2, [r0] - b _080FBF36 - .align 2, 0 -_080FBF28: .4byte Rfu -_080FBF2C: .4byte 0x000008f5 -_080FBF30: - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] -_080FBF36: - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0xF0 - ble _080FBF4E - movs r1, 0xE0 - lsls r1, 7 - movs r0, 0x2 - bl sub_80FB9E4 - adds r0, r6, 0 - bl DestroyTask -_080FBF4E: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80FBE80 - - thumb_func_start sub_80FBF54 -sub_80FBF54: @ 80FBF54 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r5, r1, 16 - lsrs r5, 16 - ldr r0, _080FBF8C @ =Rfu - adds r0, 0xF1 - movs r1, 0 - strb r1, [r0] - ldr r0, _080FBF90 @ =sub_80FBE80 - movs r1, 0x3 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080FBF94 @ =gTasks+0x8 - adds r4, r0 - adds r0, r4, 0 - adds r1, r6, 0 - bl StringCopy - strh r5, [r4, 0x10] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FBF8C: .4byte Rfu -_080FBF90: .4byte sub_80FBE80 -_080FBF94: .4byte gTasks+0x8 - thumb_func_end sub_80FBF54 - - thumb_func_start sub_80FBF98 -sub_80FBF98: @ 80FBF98 - push {r4,r5,lr} - adds r4, r1, 0 - lsls r0, 16 - lsrs r5, r0, 16 - bl sub_80F9800 - ldrb r1, [r0, 0xA] - movs r2, 0x7F - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0x45 - bne _080FBFBE - ldrb r1, [r4, 0xA] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0x45 - beq _080FC01E -_080FBFBA: - movs r0, 0x1 - b _080FC020 -_080FBFBE: - ldrb r1, [r4, 0xA] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0x40 - bne _080FBFBA - cmp r5, 0x44 - bne _080FC01E - ldr r5, _080FBFEC @ =Rfu+0x10a - ldrh r0, [r5, 0x8] - ldr r3, _080FBFF0 @ =0x000003ff - adds r2, r3, 0 - ands r2, r0 - movs r0, 0xCE - lsls r0, 1 - cmp r2, r0 - bne _080FBFF4 - ldrh r1, [r4, 0x8] - adds r0, r3, 0 - ands r0, r1 - cmp r0, r2 - beq _080FC01E - b _080FBFBA - .align 2, 0 -_080FBFEC: .4byte Rfu+0x10a -_080FBFF0: .4byte 0x000003ff -_080FBFF4: - ldrh r1, [r4, 0x8] - adds r0, r3, 0 - ands r0, r1 - cmp r0, r2 - bne _080FBFBA - ldrb r2, [r4, 0xB] - movs r0, 0xFE - ldrb r3, [r5, 0xB] - adds r1, r0, 0 - ands r1, r2 - ands r0, r3 - cmp r1, r0 - bne _080FBFBA - ldrb r2, [r4, 0x9] - movs r0, 0xFC - ldrb r3, [r5, 0x9] - adds r1, r0, 0 - ands r1, r2 - ands r0, r3 - cmp r1, r0 - bne _080FBFBA -_080FC01E: - movs r0, 0 -_080FC020: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80FBF98 - - thumb_func_start sub_80FC028 -sub_80FC028: @ 80FC028 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - mov r8, r5 - ldr r6, _080FC0E0 @ =Rfu - adds r0, r6, 0 - adds r0, 0xF1 - ldrb r0, [r0] - cmp r0, 0x4 - bne _080FC046 - adds r0, r5, 0 - bl DestroyTask -_080FC046: - ldr r1, _080FC0E4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - movs r1, 0x96 - lsls r1, 17 - cmp r0, r1 - ble _080FC070 - movs r1, 0xE0 - lsls r1, 7 - movs r0, 0x2 - bl sub_80FB9E4 - adds r0, r5, 0 - bl DestroyTask -_080FC070: - ldr r1, _080FC0E8 @ =0x00000985 - adds r0, r6, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080FC108 - ldr r0, _080FC0EC @ =gUnknown_3005E10 - ldrb r0, [r0, 0x6] - cmp r0, 0 - bne _080FC108 - movs r2, 0x86 - lsls r2, 1 - adds r0, r6, r2 - bl sub_80FBC64 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r2, _080FC0F0 @ =0x00000119 - adds r0, r6, r2 - bl sub_80FBC70 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080FC108 - movs r1, 0xA - ldrsh r0, [r4, r1] - ldr r7, _080FC0F4 @ =gRfuLinkStatus - lsls r4, r2, 5 - adds r2, r4, 0 - adds r2, 0x14 - ldr r1, [r7] - adds r1, r2 - adds r1, 0x6 - bl sub_80FBF98 - cmp r0, 0 - bne _080FC0F8 - ldr r0, [r7] - adds r1, r0, r4 - ldrb r0, [r1, 0x16] - cmp r0, 0xFF - beq _080FC108 - ldrh r0, [r1, 0x14] - movs r1, 0x5A - bl sub_80FD610 - lsls r0, 24 - cmp r0, 0 - bne _080FC108 - movs r0, 0xA - strh r0, [r6, 0x4] - adds r0, r5, 0 - bl DestroyTask - b _080FC108 - .align 2, 0 -_080FC0E0: .4byte Rfu -_080FC0E4: .4byte gTasks -_080FC0E8: .4byte 0x00000985 -_080FC0EC: .4byte gUnknown_3005E10 -_080FC0F0: .4byte 0x00000119 -_080FC0F4: .4byte gRfuLinkStatus -_080FC0F8: - movs r1, 0xE0 - lsls r1, 7 - movs r0, 0x2 - bl sub_80FB9E4 - mov r0, r8 - bl DestroyTask -_080FC108: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80FC028 - - thumb_func_start sub_80FC114 -sub_80FC114: @ 80FC114 - push {r4-r7,lr} - adds r3, r0, 0 - adds r5, r1, 0 - lsls r4, r2, 24 - lsrs r4, 24 - ldr r6, _080FC184 @ =Rfu - ldr r1, _080FC188 @ =0x00000987 - adds r0, r6, r1 - movs r7, 0 - strb r7, [r0] - adds r0, r6, 0 - adds r0, 0xF1 - strb r7, [r0] - ldr r1, _080FC18C @ =0x00000119 - adds r0, r6, r1 - adds r1, r3, 0 - bl StringCopy - movs r1, 0x85 - lsls r1, 1 - adds r0, r6, r1 - adds r1, r5, 0 - movs r2, 0xD - bl memcpy - bl sub_80FEB3C - ldr r0, _080FC190 @ =sub_80FC028 - movs r1, 0x2 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080FC194 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r5 - strh r4, [r1, 0xA] - ldr r0, _080FC198 @ =sub_80F8B34 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r1, r0, 24 - adds r2, r1, 0 - cmp r4, 0x45 - bne _080FC19C - cmp r1, 0xFF - beq _080FC1AA - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r5 - movs r1, 0x1 - strh r1, [r0, 0x16] - b _080FC1AA - .align 2, 0 -_080FC184: .4byte Rfu -_080FC188: .4byte 0x00000987 -_080FC18C: .4byte 0x00000119 -_080FC190: .4byte sub_80FC028 -_080FC194: .4byte gTasks -_080FC198: .4byte sub_80F8B34 -_080FC19C: - cmp r2, 0xFF - beq _080FC1AA - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r5 - strh r7, [r0, 0x16] -_080FC1AA: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80FC114 - - thumb_func_start sub_80FC1B0 -sub_80FC1B0: @ 80FC1B0 - push {lr} - ldr r0, _080FC1C0 @ =Rfu - adds r0, 0xF0 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080FC1C4 - movs r0, 0 - b _080FC1C6 - .align 2, 0 -_080FC1C0: .4byte Rfu -_080FC1C4: - movs r0, 0x1 -_080FC1C6: - pop {r1} - bx r1 - thumb_func_end sub_80FC1B0 - - thumb_func_start sub_80FC1CC -sub_80FC1CC: @ 80FC1CC - push {r4,lr} - movs r1, 0 - ldr r0, _080FC1F0 @ =gUnknown_3005E10 - ldrb r2, [r0] - ldr r4, _080FC1F4 @ =Rfu+0x989 - movs r3, 0x1 -_080FC1D8: - adds r0, r2, 0 - asrs r0, r1 - ands r0, r3 - cmp r0, 0 - beq _080FC1F8 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _080FC1F8 - movs r0, 0 - b _080FC200 - .align 2, 0 -_080FC1F0: .4byte gUnknown_3005E10 -_080FC1F4: .4byte Rfu+0x989 -_080FC1F8: - adds r1, 0x1 - cmp r1, 0x3 - ble _080FC1D8 - movs r0, 0x1 -_080FC200: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80FC1CC - - thumb_func_start sub_80FC208 -sub_80FC208: @ 80FC208 - push {r4,lr} - movs r4, 0 -_080FC20C: - lsls r2, r4, 24 - lsrs r2, 24 - ldr r0, _080FC224 @ =gUnknown_843EE28 - movs r1, 0 - bl nullsub_87 - adds r4, 0x1 - cmp r4, 0x13 - ble _080FC20C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FC224: .4byte gUnknown_843EE28 - thumb_func_end sub_80FC208 - - thumb_func_start sub_80FC228 -sub_80FC228: @ 80FC228 - push {r4-r7,lr} - mov r7, r8 - push {r7} - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1C - movs r2, 0x13 - movs r3, 0x2 - bl nullsub_88 - ldr r4, _080FC2F8 @ =gRfuLinkStatus - ldr r0, [r4] - ldrb r0, [r0, 0x2] - movs r1, 0x14 - movs r2, 0x1 - movs r3, 0x1 - bl nullsub_88 - ldr r0, [r4] - ldrb r0, [r0, 0x3] - movs r1, 0x17 - movs r2, 0x1 - movs r3, 0x1 - bl nullsub_88 - ldr r0, _080FC2FC @ =Rfu - ldrb r0, [r0, 0xC] - cmp r0, 0x1 - bne _080FC304 - movs r6, 0 - adds r7, r4, 0 - movs r5, 0x14 -_080FC26C: - ldr r2, [r7] - ldrb r0, [r2, 0x7] - asrs r0, r6 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FC2AA - lsls r0, r6, 5 - adds r0, r2, r0 - ldrh r0, [r0, 0x18] - adds r4, r6, 0x3 - lsls r4, 24 - lsrs r4, 24 - adds r2, r4, 0 - movs r3, 0x4 - bl nullsub_88 - ldr r0, [r7] - adds r0, r5 - adds r0, 0x6 - movs r1, 0x6 - adds r2, r4, 0 - bl nullsub_87 - ldr r0, [r7] - adds r0, r5 - adds r0, 0x15 - movs r1, 0x16 - adds r2, r4, 0 - bl nullsub_87 -_080FC2AA: - adds r5, 0x20 - adds r6, 0x1 - cmp r6, 0x3 - ble _080FC26C - movs r6, 0 - ldr r0, _080FC2FC @ =Rfu - mov r8, r0 -_080FC2B8: - movs r5, 0 - adds r7, r6, 0x1 - lsls r0, r6, 3 - adds r2, r6, 0 - adds r2, 0xB - subs r0, r6 - lsls r0, 1 - mov r1, r8 - adds r1, 0x14 - adds r4, r0, r1 - lsls r6, r2, 24 -_080FC2CE: - ldrb r0, [r4] - lsls r1, r5, 25 - lsrs r1, 24 - lsrs r2, r6, 24 - movs r3, 0x2 - bl nullsub_88 - adds r4, 0x1 - adds r5, 0x1 - cmp r5, 0xD - ble _080FC2CE - adds r6, r7, 0 - cmp r6, 0x3 - ble _080FC2B8 - ldr r0, _080FC300 @ =gUnknown_843EE64 "NOWSLOT" - movs r1, 0x1 - movs r2, 0xF - bl nullsub_87 - b _080FC436 - .align 2, 0 -_080FC2F8: .4byte gRfuLinkStatus -_080FC2FC: .4byte Rfu -_080FC300: .4byte gUnknown_843EE64 -_080FC304: - ldr r1, [r4] - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _080FC3A0 - ldrb r0, [r1, 0x7] - cmp r0, 0 - beq _080FC3A0 - movs r6, 0 - movs r5, 0xC0 - lsls r5, 18 -_080FC318: - lsrs r4, r5, 24 - movs r0, 0 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x4 - bl nullsub_88 - ldr r0, _080FC38C @ =gUnknown_843EE47 - movs r1, 0x6 - adds r2, r4, 0 - bl nullsub_87 - ldr r0, _080FC390 @ =gUnknown_843EE57 - movs r1, 0x16 - adds r2, r4, 0 - bl nullsub_87 - movs r1, 0x80 - lsls r1, 17 - adds r5, r1 - adds r6, 0x1 - cmp r6, 0x3 - ble _080FC318 - ldr r5, _080FC394 @ =gRfuLinkStatus - ldr r1, [r5] - ldr r4, _080FC398 @ =Rfu - ldr r0, _080FC39C @ =0x000008f6 - adds r4, r0 - ldrb r0, [r4] - lsls r0, 5 - adds r1, r0 - ldrh r0, [r1, 0x18] - movs r1, 0x1 - movs r2, 0x3 - movs r3, 0x4 - bl nullsub_88 - ldrb r1, [r4] - lsls r1, 5 - adds r1, 0x14 - ldr r0, [r5] - adds r0, r1 - adds r0, 0x6 - movs r1, 0x6 - movs r2, 0x3 - bl nullsub_87 - ldrb r1, [r4] - lsls r1, 5 - adds r1, 0x14 - ldr r0, [r5] - adds r0, r1 - adds r0, 0x15 - movs r1, 0x16 - movs r2, 0x3 - bl nullsub_87 - b _080FC436 - .align 2, 0 -_080FC38C: .4byte gUnknown_843EE47 -_080FC390: .4byte gUnknown_843EE57 -_080FC394: .4byte gRfuLinkStatus -_080FC398: .4byte Rfu -_080FC39C: .4byte 0x000008f6 -_080FC3A0: - movs r6, 0 - ldr r1, _080FC440 @ =gRfuLinkStatus - ldr r0, [r1] - ldrb r0, [r0, 0x8] - cmp r6, r0 - bge _080FC3FC - adds r7, r1, 0 - movs r1, 0x14 - mov r8, r1 -_080FC3B2: - ldr r0, [r7] - lsls r5, r6, 5 - adds r1, r0, r5 - ldrb r0, [r1, 0x16] - cmp r0, 0xFF - beq _080FC3EE - ldrh r0, [r1, 0x18] - adds r4, r6, 0x3 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x4 - bl nullsub_88 - ldr r0, [r7] - adds r0, r5 - ldrh r0, [r0, 0x14] - movs r1, 0x6 - adds r2, r4, 0 - movs r3, 0x4 - bl nullsub_88 - ldr r0, [r7] - add r0, r8 - adds r0, 0x15 - movs r1, 0x16 - adds r2, r4, 0 - bl nullsub_87 -_080FC3EE: - movs r0, 0x20 - add r8, r0 - adds r6, 0x1 - ldr r0, [r7] - ldrb r0, [r0, 0x8] - cmp r6, r0 - blt _080FC3B2 -_080FC3FC: - cmp r6, 0x3 - bgt _080FC436 - lsls r0, r6, 24 - movs r1, 0xC0 - lsls r1, 18 - adds r5, r0, r1 -_080FC408: - lsrs r4, r5, 24 - movs r0, 0 - movs r1, 0x1 - adds r2, r4, 0 - movs r3, 0x4 - bl nullsub_88 - ldr r0, _080FC444 @ =gUnknown_843EE47 - movs r1, 0x6 - adds r2, r4, 0 - bl nullsub_87 - ldr r0, _080FC448 @ =gUnknown_843EE57 - movs r1, 0x16 - adds r2, r4, 0 - bl nullsub_87 - movs r0, 0x80 - lsls r0, 17 - adds r5, r0 - adds r6, 0x1 - cmp r6, 0x3 - ble _080FC408 -_080FC436: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FC440: .4byte gRfuLinkStatus -_080FC444: .4byte gUnknown_843EE47 -_080FC448: .4byte gUnknown_843EE57 - thumb_func_end sub_80FC228 - - thumb_func_start sub_80FC44C -sub_80FC44C: @ 80FC44C - ldr r0, _080FC458 @ =Rfu - ldr r1, _080FC45C @ =0x000008d2 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080FC458: .4byte Rfu -_080FC45C: .4byte 0x000008d2 - thumb_func_end sub_80FC44C - - thumb_func_start GetRfuRecvQueueLength -GetRfuRecvQueueLength: @ 80FC460 - ldr r0, _080FC46C @ =Rfu - ldr r1, _080FC470 @ =0x0000069e - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080FC46C: .4byte Rfu -_080FC470: .4byte 0x0000069e - thumb_func_end GetRfuRecvQueueLength - - thumb_func_start nullsub_89 -nullsub_89: @ 80FC474 - bx lr - thumb_func_end nullsub_89 - .align 2, 0 @ Don't pad with nop. diff --git a/asm/overworld.s b/asm/overworld.s index 8eeb570f1..5b3c1a495 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -5722,7 +5722,7 @@ sub_8057910: @ 8057910 lsrs r0, 24 cmp r0, 0x3C bls _0805792E - bl sub_80FA190 + bl LinkRfu_FatalError _0805792E: pop {r0} bx r0 diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt new file mode 100644 index 000000000..bf170665d --- /dev/null +++ b/common_syms/link_rfu_2.txt @@ -0,0 +1,3 @@ +gUnknown_3005440 +Rfu +gUnknown_3005E00 diff --git a/data/link_rfu_2.s b/data/link_rfu_2.s index 4877a20e2..ae38a9c89 100644 --- a/data/link_rfu_2.s +++ b/data/link_rfu_2.s @@ -6,48 +6,3 @@ .section .rodata .align 2 - .align 2 -gUnknown_843EDE4:: @ 843EDE4 - .asciz "PokemonSioInfo" - - .byte 0, 1, 7, 0x14, 0xFF - - .align 2 -gUnknown_843EDF8:: @ 843EDF8 - .asciz "LINK LOSS DISCONNECT!" - - .align 2 -gUnknown_843EE10:: @ 843EE10 - .asciz "LINK LOSS RECOVERY NOW" - - .align 2 -gUnknown_843EE28:: @ 843EE28 - .asciz " " - -gUnknown_843EE47:: @ 843EE47 - .asciz " " - -gUnknown_843EE57:: @ 843EE57 - .asciz " " - .asciz " " - .asciz "*" - - .align 2 -gUnknown_843EE64:: @ 843EE64 - .asciz "NOWSLOT" - .align 2 - .asciz " " - .align 2 - .asciz "CLOCK DRIFT" - .align 2 - .asciz "BUSY SEND " - .align 2 - .asciz "CMD REJECT " - .align 2 - .asciz "CLOCK SLAVE" - .align 2 - .asciz "CHILD " - .align 2 - .asciz "PARENT" - .align 2 - .asciz "SEARCH" diff --git a/include/link.h b/include/link.h index bb3ffbb2f..4175ac97f 100644 --- a/include/link.h +++ b/include/link.h @@ -65,6 +65,19 @@ #define LINKCMD_SEND_HELD_KEYS_2 0xCAFE #define LINKCMD_0xCCCC 0xCCCC +#define LINKTYPE_0x1111 0x1111 // trade +#define LINKTYPE_0x1122 0x1122 // trade +#define LINKTYPE_0x1133 0x1133 // trade +#define LINKTYPE_0x1144 0x1144 // trade +#define LINKTYPE_BATTLE 0x2211 +#define LINKTYPE_0x2222 0x2222 // unused battle? +#define LINKTYPE_SINGLE_BATTLE 0x2233 +#define LINKTYPE_DOUBLE_BATTLE 0x2244 +#define LINKTYPE_MULTI_BATTLE 0x2255 +#define LINKTYPE_BATTLE_TOWER_50 0x2266 +#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 +#define LINKTYPE_BATTLE_TOWER 0x2288 + #define MASTER_HANDSHAKE 0x8FFF #define SLAVE_HANDSHAKE 0xB9A0 @@ -262,5 +275,8 @@ bool8 IsWirelessAdapterConnected(void); bool8 sub_800A474(u8 a0); void LinkVSync(void); bool8 HandleLinkConnection(void); +void sub_800B0B4(void); +void sub_800B110(u32 who); +void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); #endif // GUARD_LINK_H diff --git a/include/link_rfu.h b/include/link_rfu.h index cb315f31d..a5c60fd52 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -109,7 +109,7 @@ extern struct UnkRfuStruct_1 gUnknown_3005E10; void AddTextPrinterToWindow1(const u8 *str); bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); -void sub_80FA190(void); +void LinkRfu_FatalError(void); void MG_DrawCheckerboardPattern(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void); bool8 IsLinkRfuTaskFinished(void); @@ -167,6 +167,13 @@ bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); bool8 sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2); bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1); bool8 sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1); +u8 sub_80FEA34(u8 a0, u16 a1); +void sub_80FDA30(u32 a0); +void sub_80FCB54(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, s32 r3); +void rfu_syncVBlank_(void); +s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16)); +void sub_80FEB3C(void); +void sub_80FAFE0(u8 a0); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h index 6fed52119..32624d602 100644 --- a/include/mystery_gift_menu.h +++ b/include/mystery_gift_menu.h @@ -6,5 +6,6 @@ extern bool8 gGiftIsFromEReader; void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32); void c2_mystery_gift(void); +void c2_mystery_gift_e_reader_run(void); #endif //GUARD_MYSTERY_GIFT_MENU_H diff --git a/ld_script.txt b/ld_script.txt index 8b17d3cd6..942e4ece3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -226,7 +226,6 @@ SECTIONS { src/save_menu_util.o(.text); src/map_preview_screen.o(.text); src/link_rfu_2.o(.text); - asm/link_rfu_2.o(.text); asm/link_rfu_4.o(.text); src/link_rfu.o(.text); asm/easy_chat_2.o(.text); @@ -512,7 +511,6 @@ SECTIONS { data/box_party_pokemon_dropdown.o(.rodata); src/map_preview_screen.o(.rodata); src/link_rfu_2.o(.rodata); - data/link_rfu_2.o(.rodata); data/link_rfu_4.o(.rodata); data/link_rfu.o(.rodata); src/pokedex_screen.o(.rodata); diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 5d8c26983..9baee37ed 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -1,10 +1,17 @@ #include "global.h" +#include "battle.h" +#include "gpu_regs.h" #include "librfu.h" #include "link.h" #include "link_rfu.h" +#include "mystery_gift_menu.h" #include "overworld.h" +#include "palette.h" #include "quest_log.h" +#include "random.h" +#include "string_util.h" #include "task.h" +#include "constants/species.h" struct UnkRfuStruct_2_Sub_6c { @@ -24,7 +31,7 @@ struct UnkRfuStruct_2 /* 0x004 */ u16 unk_04; /* 0x006 */ u8 filler_06[4]; /* 0x00a */ u16 unk_0a; - /* 0x00c */ u8 unk_0c; + /* 0x00c */ u8 unk_0c; // parentChildMode? /* 0x00d */ u8 playerCount; /* 0x00e */ u8 unk_0e; /* 0x00f */ u8 unk_0f; @@ -66,7 +73,7 @@ struct UnkRfuStruct_2 /* 0x93e */ u8 unk_c86; /* 0x93f */ u8 unk_c87[5][7][2]; /* 0x985 */ u8 unk_ccd; - /* 0x986 */ u8 unk_cce; + /* 0x986 */ u8 unk_cce; // childId /* 0x987 */ u8 unk_ccf; /* 0x988 */ vu8 unk_cd0; /* 0x989 */ u8 unk_cd1[4]; @@ -87,44 +94,58 @@ struct UnkRfuStruct_2 /* 0x9a1 */ u8 unk_ce9; /* 0x9a2 */ u8 unk_cea[4]; /* 0x9a6 */ u8 unk_cee[4]; -} Rfu; // size: 0x9AC +}; // size: 0x9AC + +struct UnkRfuStruct_8010A14{ + char unk_00[15]; // PokemonSioInfo + u8 unk_0f; + u8 unk_10[4]; + struct LinkPlayer unk_14[5]; + u8 fill_a0[0x5c]; +}; -EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_203ABF0 = {}; -EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {}; +static EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_203ABF0 = {}; +static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {}; -ALIGNED(8) IWRAM_DATA u8 gUnknown_3001188; -ALIGNED(8) IWRAM_DATA struct RfuAPIBuffer gRfuAPIBuffer; -ALIGNED(8) IWRAM_DATA u8 gUnknown_3001FF8[14]; -ALIGNED(8) IWRAM_DATA u16 gUnknown_3002008[7]; +static u8 gUnknown_3001188; +static struct RfuAPIBuffer gRfuAPIBuffer; +static u8 gUnknown_3001FF8[14]; +static u16 gUnknown_3002008[7]; struct UnkLinkRfuStruct_02022B14 gUnknown_3005440; +struct UnkRfuStruct_2 Rfu; u8 gUnknown_3005E00[PLAYER_NAME_LENGTH]; -void sub_80F8AA4(void); -void sub_80F8AEC(void); -void sub_80F8D20(u16 a0); -void sub_80F8DA8(u16 a0); -void sub_80F906C(void); -void sub_80F9868(u8 unused); -void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data); -void sub_80F9D04(u16 command); -void rfufunc_80F9F44(void); -void sub_80F9FA8(void); -void rfufunc_80FA020(void); -void sub_80FA510(void); -void sub_80FA738(void); -int sub_80FA788(void); -void sub_80FA834(u8 taskId); -void sub_80FA9D0(u16 a0); -bool32 sub_80FAA58(void * a0); -void sub_80FAA94(u8 taskId); -void sub_80FACF0(u8 taskId); -void sub_80FAFE0(u8 a0); -void sub_80FB0E8(u32 a0); -void sub_80FBCF8(u32 a0); -void sub_80FC208(void); - -const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = { +static void sub_80F8AA4(void); +static void sub_80F8AEC(void); +static void sub_80F8D20(u16 a0); +static void sub_80F8DA8(u16 a0); +static void sub_80F906C(void); +static void sub_80F9868(u8 unused); +static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data); +static void sub_80F9D04(u16 command); +static void rfufunc_80F9F44(void); +static void sub_80F9FA8(void); +static void rfufunc_80FA020(void); +static void CallRfuFunc(void); +static void sub_80FA738(void); +static int sub_80FA788(void); +static void sub_80FA834(u8 taskId); +static void sub_80FA9D0(u16 a0); +static void sub_80FAA58(void * a0); +static void sub_80FAA94(u8 taskId); +static void sub_80FACF0(u8 taskId); +static void sub_80FB0E8(u32 a0); +static void sub_80FB564(s32 a0); +static void sub_80FBB74(void); +static u8 sub_80FBC70(const u8 *a0, u16 a1); +static void sub_80FBCF8(u32 a0); +static void sub_80FBE20(u32 a0, u32 a1); +static void sub_80FC028(u8 taskId); +static void sub_80FC208(void); +static void nullsub_89(u8 taskId); + +static const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = { .unk_00 = 0x04, .unk_01 = 0x20, .unk_02 = 0x0000, @@ -138,11 +159,11 @@ const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = { .unk_14 = 0x012c }; -const u8 gUnknown_843EBCC[] = { +static const u8 gUnknown_843EBCC[] = { 0, 3, 2, 1, 0 }; -const u32 gUnknown_843EBD4[] = { +static const u32 gUnknown_843EBD4[] = { 0x000000, 0x000001, 0x000003, @@ -170,24 +191,24 @@ const u32 gUnknown_843EBD4[] = { 0xffffff }; -const u8 gUnknown_843EC38[] = { +static const u8 gUnknown_843EC38[] = { 0, 0, 1, 1, 2, 2, 2, 2, 3 }; -const u8 gUnknown_843EC41[] = { +static const u8 gUnknown_843EC41[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; -const u8 gUnknown_843EC51[] = { +static const u8 gUnknown_843EC51[] = { 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; -const struct { +static const struct { u8 *buffer; u32 size; } gUnknown_843EC64[] = { @@ -198,11 +219,11 @@ const struct { { gBlockSendBuffer, 40 } }; -const u16 gUnknown_843EC8C[] = { +static const u16 gUnknown_843EC8C[] = { 0x0002, 0x7f7d, 0xFFFF }; -const char sUnref_843EC92[][15] = { +static const char sUnref_843EC92[][15] = { "RFU WAIT", "RFU BOOT", "RFU ERROR", @@ -216,7 +237,7 @@ const char sUnref_843EC92[][15] = { "RFU CP POLL" }; -const char sUnref_843ED37[][16] = { +static const char sUnref_843ED37[][16] = { " ", "RECOVER START ", "DISSCONECT ", @@ -224,18 +245,18 @@ const char sUnref_843ED37[][16] = { "RECOVER FAILED" }; -const TaskFunc gUnknown_843ED88[] = { +static const TaskFunc gUnknown_843ED88[] = { sub_80FA834, sub_80FAA94, sub_80FACF0 }; -void nullsub_87(const void *unused_0, u8 unused_1, u8 unused_2) +static void nullsub_87(const void *unused_0, u8 unused_1, u8 unused_2) { // debug? } -void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3) +static void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3) { } @@ -287,7 +308,7 @@ void sub_80F86F4(void) } } -void sub_80F8738(u8 taskId) +static void sub_80F8738(u8 taskId) { sub_80FA738(); switch (Rfu.unk_04) @@ -325,12 +346,12 @@ void sub_80F8738(u8 taskId) } } -s32 sub_80F886C(u8 idx) +static u8 sub_80F886C(u8 idx) { return gUnknown_843EC51[idx]; } -void sub_80F887C(s32 r2, s32 r5) +static void sub_80F887C(s32 r2, s32 r5) { u8 i; u8 r4 = 1; @@ -374,7 +395,7 @@ void sub_80F887C(s32 r2, s32 r5) } } -void sub_80F893C(u8 taskId) +static void sub_80F893C(u8 taskId) { switch (Rfu.unk_04) { @@ -428,7 +449,7 @@ void sub_80F893C(u8 taskId) } } -void sub_80F8AA4(void) +static void sub_80F8AA4(void) { u8 i; u8 r5 = gUnknown_3005E10.unk_00; @@ -443,7 +464,7 @@ void sub_80F8AA4(void) } } -void sub_80F8AEC(void) +static void sub_80F8AEC(void) { u8 r5 = gUnknown_3005E10.unk_00; rfu_UNI_setSendData(r5, Rfu.unk_c87, 70); @@ -453,7 +474,7 @@ void sub_80F8AEC(void) Rfu.unk_0c = 1; } -void sub_80F8B34(u8 taskId) +static void sub_80F8B34(u8 taskId) { if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4) { @@ -524,7 +545,7 @@ void sub_80F8D14(void) sub_80FD760(FALSE); } -void sub_80F8D20(u16 unused) +static void sub_80F8D20(u16 unused) { s32 i; @@ -546,7 +567,7 @@ void sub_80F8D20(u16 unused) LinkRfu_REQ_SendData_HandleParentRelationship(TRUE); } -void sub_80F8DA8(u16 unused) +static void sub_80F8DA8(u16 unused) { Rfu.unk_cdb = 1; } @@ -592,14 +613,14 @@ void sub_80F8DC0(void) } } -void sub_80F8E74(void) +static void sub_80F8E74(void) { if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3) return; Rfu.unk_67 = CreateTask(sub_80F8738, 1); } -bool8 sub_80F8EA4(void) +static bool8 sub_80F8EA4(void) { if (Rfu.unk_04 == 7 && Rfu.unk_ccd) { @@ -608,7 +629,7 @@ bool8 sub_80F8EA4(void) return FALSE; } -bool32 sub_80F8ECC(void) +static bool32 sub_80F8ECC(void) { if (Rfu.unk_04 == 7 && !sub_80FD610(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240)) { @@ -618,7 +639,7 @@ bool32 sub_80F8ECC(void) return FALSE; } -void sub_80F8F10(void) +static void sub_80F8F10(void) { if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3) return; @@ -655,7 +676,7 @@ void sub_80F8FA0(void) Rfu.unk_04 = 14; } -void sub_80F8FAC(u8 a0) +static void sub_80F8FAC(u8 a0) { u8 i; @@ -670,7 +691,7 @@ void sub_80F8FAC(u8 a0) } } -void sub_80F8FD4(void) +static void sub_80F8FD4(void) { s32 i, j; @@ -686,7 +707,7 @@ void sub_80F8FD4(void) CpuFill16(0, gRecvCmds, sizeof gRecvCmds); } -void sub_80F9038(void) +static void sub_80F9038(void) { s32 i; for (i = 0; i < 7; i++) @@ -699,7 +720,7 @@ void sub_80F9038(void) } } -void sub_80F906C(void) +static void sub_80F906C(void) { if (Rfu.unk_c3c) { @@ -742,7 +763,7 @@ bool32 IsRfuRecvQueueEmpty(void) return TRUE; } -bool32 sub_80F911C(void) +static bool32 sub_80F911C(void) { if (Rfu.unk_04 < 20) { @@ -788,7 +809,7 @@ bool32 sub_80F911C(void) return FALSE; } -bool32 sub_80F9204(void) +static bool32 sub_80F9204(void) { u16 i; u16 flags; @@ -844,7 +865,7 @@ bool32 sub_80F9204(void) } sub_80F9038(); sub_80F9868(0); - sub_80FA510(); + CallRfuFunc(); if (Rfu.unk_ce5 && !Rfu.unk_cd9) { gUnknown_203AC08.unk_0e = 0; @@ -876,7 +897,7 @@ bool32 sub_80F9204(void) return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE; } -void sub_80F94BC(u16 *a0, u8 *a1) +static void sub_80F94BC(u16 *a0, u8 *a1) { s32 i; @@ -897,7 +918,7 @@ void sub_80F94BC(u16 *a0, u8 *a1) } } -bool32 sub_80F9514(void) +static bool32 sub_80F9514(void) { u8 i; u8 j; @@ -935,7 +956,7 @@ bool32 sub_80F9514(void) if (Rfu.unk_cd0) { Rfu.unk_cd0--; - sub_80FA510(); + CallRfuFunc(); sub_80F94BC(gSendCmd, sp48); sub_80FC63C(&Rfu.unk_9e8, sp48); for (i = 0; i < CMD_LENGTH - 1; i++) @@ -944,7 +965,7 @@ bool32 sub_80F9514(void) return IsRfuRecvQueueEmpty(); } -void sub_80F965C(u8 unused, u32 flags) +static void sub_80F965C(u8 unused, u32 flags) { s32 i, j; @@ -986,7 +1007,7 @@ void Rfu_ResetBlockReceivedFlag(u8 a0) Rfu.unk_80[a0].unk_12 = 0; } -u8 sub_80F9770(const u8 *a0) +static u8 sub_80F9770(const u8 *a0) { u8 i; @@ -999,7 +1020,7 @@ u8 sub_80F9770(const u8 *a0) return a0[Rfu.unk_c3e]; } -void rfu_func_080F97B8(void) +static void rfu_func_080F97B8(void) { // static u8 gUnknown_3001188; if (gReceivedRemoteLinkPlayers @@ -1033,7 +1054,7 @@ void Rfu_set_zero(void) Rfu.RfuFunc = NULL; } -void sub_80F9868(u8 unused) +static void sub_80F9868(u8 unused) { u16 i; u16 j; @@ -1138,7 +1159,7 @@ void sub_80F9868(u8 unused) } } -bool8 sub_80F9C50(void) +static bool8 sub_80F9C50(void) { s32 i; @@ -1150,7 +1171,7 @@ bool8 sub_80F9C50(void) return TRUE; } -bool8 sub_80F9C78(void) +static bool8 sub_80F9C78(void) { s32 i; @@ -1162,7 +1183,7 @@ bool8 sub_80F9C78(void) return TRUE; } -void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data) +static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data) { data->unk_00 = 0; data->unk_02 = 0; @@ -1188,7 +1209,7 @@ u8 Rfu_GetBlockReceivedStatus(void) return flags; } -void sub_80F9D04(u16 command) +static void sub_80F9D04(u16 command) { u8 i; u8 *buff; @@ -1273,7 +1294,7 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size) return TRUE; } -void rfufunc_80F9F44(void) +static void rfufunc_80F9F44(void) { if (gSendCmd[0] == 0) { @@ -1290,7 +1311,7 @@ void rfufunc_80F9F44(void) } } } -void sub_80F9FA8(void) +static void sub_80F9FA8(void) { s32 i; const u8 *src = Rfu.unk_6c.unk_04; @@ -1305,7 +1326,7 @@ void sub_80F9FA8(void) } } -void rfufunc_80FA020(void) +static void rfufunc_80FA020(void) { const u8 *src = Rfu.unk_6c.unk_04; u8 mpId = GetMultiplayerId(); @@ -1329,3 +1350,1569 @@ void rfufunc_80FA020(void) else Rfu.RfuFunc = NULL; } + +bool8 sub_80FA0F8(u8 a0) +{ + Rfu.unk_5a = a0; + sub_80F9D04(0xa100); + return TRUE; +} + +static void sub_80FA114(void) +{ + rfu_clearAllSlot(); + sub_80FD52C(); + gReceivedRemoteLinkPlayers = 0; + Rfu.unk_ef = 1; + Rfu.RfuFunc = NULL; +} + +static void sub_80FA140(void) +{ + rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + rfu_waitREQComplete(); + sub_80FA114(); +} + +static void sub_80FA160(void) +{ + if (Rfu.unk_0c == 0) + { + sub_80FEB14(); + Rfu.unk_ce4 = 2; + } + else + Rfu.RfuFunc = sub_80FA140; +} + +void LinkRfu_FatalError(void) +{ + sub_80FEB14(); + Rfu.unk_ce4 = 1; + Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; +} + +static void sub_80FA1C4(void) +{ + s32 i; + u8 playerCount = Rfu.playerCount; + s32 count = 0; + + for (i = 0; i < MAX_RFU_PLAYERS; i++) + { + if (Rfu.unk_e4[i]) + count++; + } + if (count == playerCount) + { + gBattleTypeFlags &= (u16)~BATTLE_TYPE_20; + if (Rfu.unk_0c == 0) + { + Rfu.unk_ee = 3; + sub_80FA160(); + } + else + Rfu.RfuFunc = sub_80FA160; + } +} + +static void sub_80FA224(void) +{ + if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + { + sub_80F9D04(0x5f00); + Rfu.RfuFunc = sub_80FA1C4; + } +} + +static void sub_80FA25C(u8 taskId) +{ + if (Rfu.RfuFunc == NULL) + { + Rfu.unk_cd9 = 1; + Rfu.RfuFunc = sub_80FA224; + DestroyTask(taskId); + } +} + +void task_add_05_task_del_08FA224_when_no_RfuFunc(void) +{ + if (!FuncIsActiveTask(sub_80FA25C)) + CreateTask(sub_80FA25C, 5); +} + +static void sub_80FA2B0(void) +{ + u8 playerCount; + u8 i; + + if (GetMultiplayerId() != 0) + { + if (Rfu.unk_124.unk_8c2 == 0 && Rfu.unk_fe > 0x3c) + { + sub_80F9D04(0x6600); + Rfu.unk_fe = 0; + } + } + playerCount = GetLinkPlayerCount(); + for (i = 0; i < playerCount; i++) + { + if (Rfu.unk_e9[i] == 0) + break; + } + if (i == playerCount) + { + for (i = 0; i < MAX_RFU_PLAYERS; i++) + Rfu.unk_e9[i] = 0; + Rfu.unk_100++; + Rfu.RfuFunc = NULL; + } + Rfu.unk_fe++; +} + +static void sub_80FA350(void) +{ + if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) + { + sub_80F9D04(0x6600); + Rfu.RfuFunc = sub_80FA2B0; + } +} + +static void sub_80FA388(void) +{ + u8 i; + u8 playerCount; + + if (GetMultiplayerId() != 0) + { + if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) + { + sub_80F9D04(0x6600); + Rfu.RfuFunc = sub_80FA2B0; + } + } + else + { + playerCount = GetLinkPlayerCount(); + for (i = 1; i < playerCount; i++) + { + if (Rfu.unk_e9[i] == 0) + break; + } + if (i == playerCount) + { + if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) + { + sub_80F9D04(0x6600); + Rfu.RfuFunc = sub_80FA350; + } + } + } +} + +void sub_80FA42C(void) +{ + if (Rfu.RfuFunc == NULL) + { + Rfu.RfuFunc = sub_80FA388; + Rfu.unk_fe = 0; + } +} + +bool32 sub_80FA44C(u32 a0) +{ + s32 i; + for (i = 0; gUnknown_843EC8C[i] != a0; i++) + { + if (gUnknown_843EC8C[i] == 0xFFFF) + return FALSE; + } + return TRUE; +} + +u8 sub_80FA484(bool32 a0) +{ + if (a0 == FALSE) + return sub_80FEA34(0, 0); + sub_80FEA34(1, 0x258); + return 0; +} + +void sub_80FA4A8(void) +{ + Rfu.unk_cd9 = 1; + sub_80FD760(FALSE); +} + +u8 rfu_get_multiplayer_id(void) +{ + if (Rfu.unk_0c == 1) + return 0; + return Rfu.unk_cce; +} + +u8 GetRfuPlayerCount(void) +{ + return Rfu.playerCount; +} + +bool8 IsLinkRfuTaskFinished(void) +{ + return Rfu.RfuFunc ? FALSE : TRUE; +} + +static void CallRfuFunc(void) +{ + if (Rfu.RfuFunc) + Rfu.RfuFunc(); +} + +static bool8 sub_80FA528(void) +{ + s32 i; + bool8 retval = FALSE; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if (Rfu.unk_cd1[i] < 5 || Rfu.unk_cd1[i] > 6) + { + if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) + { + if (Rfu.unk_cd5[i] == 8) + { + Rfu.unk_cd1[i] = 9; + Rfu.unk_cd5[i] = 10; + rfu_clearSlot(8, i); + rfu_NI_setSendData(1 << i, 8, Rfu.unk_cd1 + i, 1); + retval = TRUE; + } + + } + else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED) + { + rfu_clearSlot(8, i); + } + } + } + return retval; +} + +bool32 sub_80FA5D4(void) +{ + u8 flags = 0; + s32 i; + for (i = 0; i < 4; i++) + { + if (Rfu.unk_cd5[i] == 11) + { + flags |= (1 << i); + Rfu.unk_cd5[i] = 0; + } + } + if (flags) + { + rfu_REQ_disconnect(flags); + rfu_waitREQComplete(); + } + for (i = 0; i < 4; i++) + { + if (Rfu.unk_cd5[i] == 10 || Rfu.unk_cd5[i] == 11) + return TRUE; + } + return FALSE; +} + +bool32 sub_80FA634(u16 a0, const u8 *a1) +{ + u8 r1 = sub_80FBC70(a1, a0); + if (r1 == 0xFF) + return TRUE; + if (Rfu.unk_cd1[r1] == 9) + return TRUE; + return FALSE; +} + +void sub_80FA670(u8 a0, u16 a1, const u8 *a2) +{ + u8 r4 = sub_80FBC70(a2, a1); + Rfu.unk_cd1[r4] = a0; + rfu_clearSlot(4, r4); + rfu_NI_setSendData(1 << r4, 8, Rfu.unk_cd1 + r4, 1); +} + +void sub_80FA6BC(void) +{ + Rfu.unk_c85 = 8; + rfu_clearSlot(4, Rfu.unk_c3e); + rfu_NI_setSendData(1 << Rfu.unk_c3e, 8, &Rfu.unk_c85, 1); +} + +u32 sub_80FA6FC(u16 a0, const u8 *a1) +{ + u8 r0 = sub_80FBC70(a1, a0); + if (r0 == 0xFF) + return 2; + if (gRfuSlotStatusNI[r0]->send.state == 0) + return 1; + return 0; +} + +static void sub_80FA738(void) +{ + s32 i; + + sub_80FA528(); + for (i = 0; i < 4; i++) + { + if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED) + { + if (Rfu.unk_cd5[i] == 10) + Rfu.unk_cd5[i] = 11; + rfu_clearSlot(4, i); + } + } +} + +static s32 sub_80FA788(void) +{ + s32 retval = 0; + if (Rfu.unk_c85 == 8) + { + if (gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_FAILED) + rfu_clearSlot(4, Rfu.unk_c3e); + } + if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) + { + rfu_clearSlot(8, Rfu.unk_c3e); + sub_80FB9E4(Rfu.unk_c86, 0); + retval = Rfu.unk_c86; + } + else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED) + { + rfu_clearSlot(8, Rfu.unk_c3e); + retval = 6; + } + return retval; +} + +static void sub_80FA834(u8 taskId) +{ + s32 i; + + if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) + { + Rfu.unk_ce8 = 0; + DestroyTask(taskId); + } + switch (gTasks[taskId].data[0]) + { + case 0: + if (sub_80F9C50()) + { + ResetBlockReceivedFlags(); + sub_800B0B4(); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (Rfu.unk_0c == 1) + { + if (gReceivedRemoteLinkPlayers) + sub_80F9D04(0x7800); + else + sub_80F9D04(0x7700); + gTasks[taskId].data[0] = 101; + } + else + gTasks[taskId].data[0] = 2; + break; + case 101: + if (gSendCmd[0] == 0) + gTasks[taskId].data[0] = 2; + break; + case 2: + if (Rfu.playerCount) + gTasks[taskId].data[0]++; + break; + case 3: + if (Rfu.unk_0c == 1) + { + if (sub_80F9C50()) + { + Rfu.unk_5a = 0; + sub_80F9D04(0xa100); + gTasks[taskId].data[0]++; + } + } + else + gTasks[taskId].data[0]++; + break; + case 4: + if (sub_80F9C78()) + gTasks[taskId].data[0]++; + break; + case 5: + for (i = 0; i < Rfu.playerCount; i++) + { + sub_800B110(i); + Rfu_ResetBlockReceivedFlag(i); + } + gTasks[taskId].data[0]++; + break; + case 6: + DestroyTask(taskId); + gReceivedRemoteLinkPlayers = 1; + Rfu.unk_ce8 = 0; + sub_80FEA34(1, 0x258); + if (Rfu.unk_ce6) + { + for (i = 0; i < 4; i++) + { + if ((Rfu.unk_ce6 >> i) & 1) + { + Rfu.unk_ce5 = 1 << i; + Rfu.unk_ce6 ^= (1 << i); + } + } + } + break; + } +} + +static void sub_80FA9D0(u16 a0) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if ((a0 >> i) & 1) + Rfu.unk_cde[i] = 0; + } +} + +static void sub_80FA9FC(const struct UnkRfuStruct_8010A14 *a0) +{ + s32 i; + Rfu.playerCount = a0->unk_0f; + for (i = 0; i < 4; i++) + Rfu.unk_cde[i] = a0->unk_10[i]; + for (i = 0; i < MAX_RFU_PLAYERS; i++) + { + gLinkPlayers[i] = a0->unk_14[i]; + sub_800B284(gLinkPlayers + i); + } +} + +static void sub_80FAA58(void *a0) +{ + if (strcmp("PokemonSioInfo", ((struct UnkRfuStruct_8010A14 *)a0)->unk_00) == 0) + { + sub_80FA9FC(a0); + CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14)); + ResetBlockReceivedFlag(0); + } +} + +static void sub_80FAA94(u8 taskId) +{ + s32 i; + struct LinkPlayerBlock *r2; + struct UnkRfuStruct_8010A14 *r5; + u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]]; + if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) + { + Rfu.unk_ce8 = 0; + DestroyTask(taskId); + } + switch (gTasks[taskId].data[0]) + { + case 0: + if (gSendCmd[0] == 0) + { + ResetBlockReceivedFlag(r4); + sub_80F9D04(0x7800); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (gSendCmd[0] == 0) + gTasks[taskId].data[0]++; + break; + case 2: + if ((GetBlockReceivedStatus() >> r4) & 1) + { + ResetBlockReceivedFlag(r4); + r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4]; + gLinkPlayers[r4] = r2->linkPlayer; + sub_800B284(gLinkPlayers + r4); + gTasks[taskId].data[0]++; + } + break; + case 3: + r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer; + memcpy(r5->unk_00, "PokemonSioInfo", sizeof("PokemonSioInfo")); + r5->unk_0f = Rfu.playerCount; + for (i = 0; i < 4; i++) + r5->unk_10[i] = Rfu.unk_cde[i]; + memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers); + gTasks[taskId].data[0]++; + // fallthrough + case 4: + r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer; + r5->unk_0f = Rfu.playerCount; + for (i = 0; i < 4; i++) + r5->unk_10[i] = Rfu.unk_cde[i]; + memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers); + if (SendBlock(0, gBlockSendBuffer, 0xa0)) + gTasks[taskId].data[0]++; + break; + case 5: + if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1) + { + CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14)); + ResetBlockReceivedFlag(0); + Rfu.unk_ce8 = 0; + if (Rfu.unk_ce6) + { + for (i = 0; i < 4; i++) + { + if ((Rfu.unk_ce6 >> i) & 1) + { + Rfu.unk_ce5 = 1 << i; + Rfu.unk_ce6 ^= (1 << i); + Rfu.unk_ce8 = 1; + break; + } + } + } + DestroyTask(taskId); + } + break; + } +} + +static void sub_80FACF0(u8 taskId) +{ + if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) + DestroyTask(taskId); + switch (gTasks[taskId].data[0]) + { + case 0: + if (Rfu.playerCount) + { + sub_800B0B4(); + SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock)); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (IsLinkTaskFinished()) + gTasks[taskId].data[0]++; + break; + case 2: + if (GetBlockReceivedStatus() & 1) + { + sub_80FA9FC((const struct UnkRfuStruct_8010A14 *)gBlockRecvBuffer); + ResetBlockReceivedFlag(0); + gReceivedRemoteLinkPlayers = 1; + DestroyTask(taskId); + } + break; + } +} + +static void sub_80FAD98(void) +{ + if (Rfu.unk_ee == 1 && gUnknown_3005E10.unk_02 == 0) + { + if (gMain.callback2 == c2_mystery_gift_e_reader_run) + gWirelessCommType = 2; + SetMainCallback2(CB2_LinkError); + gMain.savedCallback = CB2_LinkError; + sub_800ACBC((Rfu.unk_0a << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_80FB9F4() == 2); + Rfu.unk_ee = 2; + CloseLink(); + } + else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1) + { + if (gUnknown_3005E10.unk_02) + sub_80FEB14(); + sub_80FB9E4(1, 0x7000); + sub_80FB0E8(0x7000); + } +} + +static void rfu_REQ_recvData_then_sendData(void) +{ + if (gUnknown_3005E10.unk_06 == 1) + { + rfu_REQ_recvData(); + rfu_waitREQComplete(); + LinkRfu_REQ_SendData_HandleParentRelationship(0); + } +} + +bool32 sub_80FAE94(void) +{ + bool32 retval = FALSE; + Rfu.unk_ccd = 0; + sub_80FDA30(Random()); + if (Rfu.unk_ef == 0) + { + switch (Rfu.unk_0c) + { + case 1: + sub_80F911C(); + break; + case 0: + retval = sub_80F9514(); + break; + case 2: + rfu_REQ_recvData_then_sendData(); + break; + } + } + return retval; +} + +bool32 sub_80FAEF0(void) +{ + bool32 retval = FALSE; + if (Rfu.unk_ef == 0) + { + if (Rfu.unk_0c == 1) + retval = sub_80F9204(); + sub_80FAD98(); + } + return retval; +} + +static void sub_80FAF1C(void) +{ + StringCopy(gUnknown_3005E00, gSaveBlock2Ptr->playerName); +} + +void sub_80FAF34(void) +{ + memset(&gUnknown_3005440, 0, 0xD); + sub_80FCB54(&gUnknown_3005440, 0, 0, 0); +} + +void sub_80FAF58(u8 a0, u32 a1, u32 a2) +{ + sub_80FCB54(&gUnknown_3005440, a0, a2, a1); +} + +void sub_80FAF74(bool32 a0, bool32 a1) +{ + gUnknown_3005440.unk_00.unk_00_4 = a0; + gUnknown_3005440.unk_00.unk_00_5 = a1; +} + +void sub_80FAFA0(u32 type, u32 species, u32 level) +{ + gUnknown_3005440.type = type; + gUnknown_3005440.species = species; + gUnknown_3005440.level = level; +} + +void sub_80FAFE0(u8 a0) +{ + gUnknown_3005440.unk_0a_7 = a0; + rfu_REQ_configGameData(0, 2, (void *)&gUnknown_3005440, gUnknown_3005E00); +} + +void sub_80FB008(u8 a0, u32 a1, u32 a2) +{ + if (a0) + sub_80FAF58(a0, a1, a2); + rfu_REQ_configGameData(0, 2, (void *)&gUnknown_3005440, gUnknown_3005E00); +} + +void sub_80FB030(u32 a0) +{ + s32 i; + u32 r5; + u32 r7; + s32 r8; + + if (sub_80F9800()->unk_0a_0 == 0x45) + { + r5 = 0; + r7 = 0; + r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3; + for (i = 0; i < 4; i++) + { + if ((r8 >> i) & 1) + { + r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3)); + r5++; + if (r5 == a0 - 1) + break; + } + } + sub_80FB008(0x45, r7, 0); + } +} + +static void sub_80FB0E8(u32 a0) +{ + if (Rfu.unk_ee == 0) + { + Rfu.unk_10 = gUnknown_3005E10.unk_14; + Rfu.unk_12 = gUnknown_3005E10.unk_16; + Rfu.unk_0a = a0; + Rfu.unk_ee = 1; + } +} + +static void sub_80FB118(void) +{ + Rfu.unk_ee = 0; +} + +void sub_80FB128(bool32 a0) +{ + if (!a0) + Rfu.unk_ee = 0; + else + Rfu.unk_ee = 4; +} + +static void sub_80FB154(void) +{ + sub_80FBE20(gUnknown_3005E10.unk_00, 1); + Rfu.RfuFunc = NULL; +} + +static void sub_80FB174(void) +{ + Rfu.RfuFunc = sub_80FB154; +} + +static void sub_80FB184(u8 a0, u8 unused1) +{ + u8 i; + u8 r6 = 0; + switch (a0) + { + case 0x00: + Rfu.unk_04 = 2; + break; + case 0x10: + break; + case 0x11: + sub_80FB564(gUnknown_3005E10.unk_14); + for (i = 0; i < 4; i++) + { + if ((gUnknown_3005E10.unk_14 >> i) & 1) + { + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; + if (structPtr->unk_0a_0 == sub_80F9800()->unk_0a_0) + { + Rfu.unk_cd1[i] = 0; + Rfu.unk_cd5[i] = 0; + rfu_setRecvBuffer(0x20, i, Rfu.unk_cd5 + i, 1); + } + else + { + r6 |= (1 << i); + } + } + } + if (r6) + { + rfu_REQ_disconnect(r6); + rfu_waitREQComplete(); + } + break; + case 0x12: + break; + case 0x13: + break; + case 0x14: + if (Rfu.unk_ce7 != gUnknown_3005E10.unk_00) + { + rfu_REQ_disconnect(Rfu.unk_ce7 ^ gUnknown_3005E10.unk_00); + rfu_waitREQComplete(); + } + Rfu.unk_04 = 0x11; + break; + case 0x31: + Rfu.unk_f0 = 1; + break; + case 0x32: + Rfu.unk_f0 = 3; + break; + case 0x30: + case 0x33: + Rfu.unk_f0 = 4; + Rfu.unk_ce2 &= ~gUnknown_3005E10.unk_14; + if (gReceivedRemoteLinkPlayers == 1) + { + if (Rfu.unk_ce2 == 0) + sub_80FB0E8(a0); + else + sub_80FB174(); + } + sub_80FB9E4(2, a0); + break; + case 0x34: + break; + case 0x42 ... 0x44: + break; + case 0xf3: + sub_80FB9E4(1, a0); + sub_80FB0E8(a0); + Rfu.unk_ef = 1; + break; + case 0xf0 ... 0xf2: + case 0xff: + sub_80FB0E8(a0); + sub_80FB9E4(1, a0); + Rfu.unk_cdb = 1; + break; + } +} + +static const u8 unref_843EDF3[] = _(" あきと"); + +static void sub_80FB37C(u8 a0, u8 unused1) +{ + switch (a0) + { + case 0x00: + Rfu.unk_04 = 6; + break; + case 0x20: + Rfu.unk_ccd = gUnknown_3005E10.unk_14; + break; + case 0x21: + break; + case 0x22: + Rfu.unk_c3e = gUnknown_3005E10.unk_14; + break; + case 0x23: + sub_80FB9E4(2, a0); + break; + case 0x24: + Rfu.unk_04 = 11; + Rfu.unk_c85 = 0; + Rfu.unk_c86 = 0; + rfu_setRecvBuffer(0x20, Rfu.unk_c3e, &Rfu.unk_c86, 1); + rfu_setRecvBuffer(0x10, Rfu.unk_c3e, Rfu.unk_c3f, 70); + break; + case 0x25: + sub_80FB9E4(2, 0x25); + break; + case 0x30: + Rfu.unk_f0 = 2; + if (Rfu.unk_c86 == 6) + break; + case 0x33: + if (Rfu.unk_f0 != 2) + Rfu.unk_f0 = 4; + if (Rfu.unk_c86 != 9) + sub_80FB9E4(2, a0); + nullsub_87("LINK LOSS DISCONNECT!", 5, 5); + if (gReceivedRemoteLinkPlayers == 1) + sub_80FB0E8(a0); + break; + case 0x31: + Rfu.unk_f0 = 1; + nullsub_87("LINK LOSS RECOVERY NOW", 5, 5); + break; + case 0x32: + Rfu.unk_f0 = 3; + Rfu.unk_c3c = 1; + break; + case 0x34: + break; + case 0x42 ... 0x44: + break; + case 0xF3: + sub_80FB9E4(1, a0); + sub_80FB0E8(a0); + Rfu.unk_ef = 1; + break; + case 0xF0 ... 0xF2: + case 0xFF: + sub_80FB9E4(1, a0); + sub_80FB0E8(a0); + Rfu.unk_cdb = 1; + break; + } +} + +static void sub_80FB564(s32 a0) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if ((a0 >> i) & 1) + { + Rfu.unk_cea[i] = 0; + Rfu.unk_cee[i] = 0xFF; + } + } +} + +static u8 sub_80FB5A0(s32 a0) +{ + u8 ret = 0; + u8 i; + + for (i = 0; i < 4; i++) + { + if ((a0 >> i) & 1) + { + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; + if (structPtr->unk_0a_0 == 0x45) + ret |= (1 << i); + } + } + + return ret; +} + +static void sub_80FB5EC(u8 a0, u8 unused1) +{ + u8 r1; + + switch (a0) + { + case 0x00: + Rfu.unk_04 = 0x11; + break; + case 0x10: + sub_80FB9E4(4, 0); + break; + case 0x11: + if (sub_80F9800()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0) + { + u8 idx = sub_80FB5A0(gUnknown_3005E10.unk_14); + if (idx != 0) + { + r1 = 1 << sub_80F886C(idx); + if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0) + { + Rfu.unk_ce5 = r1; + Rfu.unk_ce6 |= (r1 ^ idx); + Rfu.unk_ce8 = 1; + } + else + { + Rfu.unk_ce6 |= idx; + } + } + if (idx != gUnknown_3005E10.unk_14) + { + Rfu.unk_ce3 |= (idx ^ gUnknown_3005E10.unk_14); + Rfu.unk_ce4 = 2; + } + } + else if (sub_80F9800()->unk_0a_0 == 0x54) + { + rfu_REQ_disconnect(gUnknown_3005E10.unk_00); + rfu_waitREQComplete(); + } + sub_80FB564(gUnknown_3005E10.unk_14); + break; + case 0x12: + break; + case 0x13: + break; + case 0x14: + if (sub_80F9800()->unk_0a_0 != 0x45 && gUnknown_3005E10.unk_01 > 1) + { + r1 = 1 << sub_80F886C(gUnknown_3005E10.unk_14); + rfu_REQ_disconnect(gUnknown_3005E10.unk_00 ^ r1); + rfu_waitREQComplete(); + } + if (Rfu.unk_04 == 0xF) + Rfu.unk_04 = 0x10; + break; + case 0x20: + Rfu.unk_ccd = gUnknown_3005E10.unk_14; + break; + case 0x21: + break; + case 0x22: + Rfu.unk_c3e = gUnknown_3005E10.unk_14; + break; + case 0x23: + Rfu.unk_04 = 0x12; + if (Rfu.unk_ccf < 2) + { + Rfu.unk_ccf++; + CreateTask(sub_80FC028, 2); + } + else + { + sub_80FB9E4(2, a0); + } + break; + case 0x24: + Rfu.unk_04 = 0xD; + sub_80FB9E4(3, 0); + rfu_setRecvBuffer(0x10, Rfu.unk_c3e, Rfu.unk_c3f, 70); + break; + case 0x25: + sub_80FB9E4(2, a0); + break; + case 0x31: + if (gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14) + Rfu.unk_f0 = 1; + break; + case 0x32: + Rfu.unk_f0 = 3; + if (gRfuLinkStatus->parentChild == MODE_CHILD) + Rfu.unk_c3c = 1; + break; + case 0x30: + Rfu.unk_f0 = 2; + case 0x33: + if (Rfu.unk_f0 != 2) + Rfu.unk_f0 = 4; + if (Rfu.unk_0c == 1) + { + if (gReceivedRemoteLinkPlayers == 1) + { + Rfu.unk_ce2 &= ~(gUnknown_3005E10.unk_14); + if (Rfu.unk_ce2 == 0) + sub_80FB0E8(a0); + else + sub_80FB174(); + } + } + else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1) + { + sub_80FB0E8(a0); + sub_80FD760(0); + } + + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gUnknown_3005E10.unk_07 == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE) + Rfu.unk_04 = 0x11; + + sub_80FB9E4(2, a0); + break; + case 0x40: + Rfu.unk_ce3 = 0; + break; + case 0x42 ... 0x44: + break; + case 0xF3: + sub_80FB9E4(1, a0); + sub_80FB0E8(a0); + Rfu.unk_ef = 1; + break; + case 0xF0 ... 0xF2: + case 0xFF: + sub_80FB0E8(a0); + sub_80FB9E4(1, a0); + Rfu.unk_cdb = 0; + break; + } +} + +void sub_80FB9D0(void) +{ + Rfu.unk_ce4 = 2; +} + +void sub_80FB9E4(u8 a0, u16 a1) +{ + Rfu.unk_f1 = a0; + Rfu.unk_0a = a1; +} + +u8 sub_80FB9F4(void) +{ + return Rfu.unk_f1; +} + +bool32 sub_80FBA00(void) +{ + u32 var = sub_80FB9F4() - 1; + if (var < 2) + return TRUE; + else + return FALSE; +} + +bool32 sub_80FBA1C(void) +{ + return Rfu.unk_ce8; +} + +bool8 Rfu_IsMaster(void) +{ + return Rfu.unk_0c; +} + +void RFUVSync(void) +{ + rfu_syncVBlank_(); +} + +void sub_80FBA44(void) +{ + CpuFill32(0, gRecvCmds, sizeof(gRecvCmds)); +} + +static void sub_80FBA64(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_80FBA78(void) +{ + s32 i; + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ResetPaletteFade(); + SetVBlankCallback(sub_80FBA64); + if (IsWirelessAdapterConnected()) + { + gLinkType = LINKTYPE_0x1111; + sub_800B1F4(); + OpenLink(); + SeedRng(gMain.vblankCounter2); + for (i = 0; i < 4; i++) + gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256; + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + sub_80FBB20(); + SetMainCallback2(sub_80FBB74); + } +} + +bool32 sub_80FBB0C(void) +{ + return FuncIsActiveTask(sub_80F8B34); +} + +void sub_80FBB20(void) +{ + if (!FuncIsActiveTask(nullsub_89)) + Rfu.unk_66 = CreateTask(nullsub_89, 0); +} + +void sub_80FBB4C(void) +{ + if (FuncIsActiveTask(nullsub_89) == TRUE) + DestroyTask(Rfu.unk_66); +} + +static void sub_80FBB74(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80FBB8C(u32 a0) +{ + Rfu.unk_0c = 1; + sub_80FAF1C(); + sub_80FD430(sub_80FB184, NULL); + gUnknown_203ABF0 = gUnknown_843EBB4; + gUnknown_203ABF0.unk_02 = gUnknown_843EBCC[a0 - 1]; + sub_80F8E74(); +} + +void sub_80FBBD8(void) +{ + Rfu.unk_0c = 0; + sub_80FAF1C(); + sub_80FD430(sub_80FB37C, sub_80F8D20); + sub_80F8F10(); +} + +void sub_80FBC00(void) +{ + if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3) + return; + Rfu.unk_0c = 2; + sub_80FAF1C(); + sub_80FD430(sub_80FB5EC, NULL); + gUnknown_203ABF0 = gUnknown_843EBB4; + gUnknown_203ABF0.unk_11 = 0; + gUnknown_203ABF0.unk_12 = 0x258; + Rfu.unk_67 = CreateTask(sub_80F8B34, 1); +} + +static u16 ReadU16(const void *ptr) +{ + const u8 *ptr_ = ptr; + return (ptr_[1] << 8) | (ptr_[0]); +} + +static u8 sub_80FBC70(const u8 *a0, u16 a1) +{ + u8 i; + u8 ret = 0xFF; + + for (i = 0; i < 4; i++) + { + u16 trainerId = ReadU16(((struct UnkLinkRfuStruct_02022B14 *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId); + if (sub_80FA44C(gRfuLinkStatus->partner[i].serialNo) + && !StringCompare(a0, gRfuLinkStatus->partner[i].uname) + && a1 == trainerId) + { + ret = i; + if (gRfuLinkStatus->partner[i].slot != 0xFF) + break; + } + } + + return ret; +} + +static void sub_80FBCF8(u32 a0) +{ + rfu_REQ_disconnect(a0); + rfu_waitREQComplete(); + Rfu.unk_ce2 &= ~(a0); + rfu_clearSlot(1, Rfu.unk_cda); + rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70); + Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2); +} + +void sub_80FBD4C(const u8 *ptr, u16 a1) +{ + u8 var = sub_80FBC70(ptr, a1); + if (var != 0xFF) + sub_80FBCF8(1 << var); +} + +void sub_80FBD6C(u32 a0) +{ + if (a0 != 0) + { + s32 i; + u8 var = 0; + + for (i = 0; i < 4; i++) + { + if (Rfu.unk_cde[i] == a0 && (Rfu.unk_ce2 >> i) & 1) + var |= 1 << i; + } + if (var) + sub_80FBE20(var, 2); + } +} + +static void sub_80FBDB8(u8 taskId) +{ + if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + { + sub_80F9D04(0xED00); + gSendCmd[1] = gTasks[taskId].data[0]; + gSendCmd[2] = gTasks[taskId].data[1]; + Rfu.playerCount -= gUnknown_843EC41[gTasks[taskId].data[0]]; + gSendCmd[3] = Rfu.playerCount; + DestroyTask(taskId); + } +} + +static void sub_80FBE20(u32 a0, u32 a1) +{ + u8 taskId = FindTaskIdByFunc(sub_80FBDB8); + if (taskId == 0xFF) + { + taskId = CreateTask(sub_80FBDB8, 5); + gTasks[taskId].data[0] = a0; + } + else + { + gTasks[taskId].data[0] |= a0; + } + + gTasks[taskId].data[1] = a1; +} + +static void sub_80FBE80(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (sub_80F8EA4()) + { + u8 id = sub_80FBC70((u8*)data, ReadU16(&data[8])); + if (id != 0xFF) + { + if (gRfuLinkStatus->partner[id].slot != 0xFF) + { + Rfu.unk_c3d = id; + if (sub_80F8ECC()) + DestroyTask(taskId); + } + else if (sub_80F9800()->unk_0a_0 == 0x15 || sub_80F9800()->unk_0a_0 == 0x16) + { + data[15]++; + } + else + { + sub_80FB9E4(2, 0x7000); + DestroyTask(taskId); + } + } + else + { + data[15]++; + Rfu.unk_c3d = id; + } + } + else + { + data[15]++; + } + + if (data[15] > 240) + { + sub_80FB9E4(2, 0x7000); + DestroyTask(taskId); + } +} + +void sub_80FBF54(const u8 *src, u16 trainerId) +{ + u8 taskId; + s16 *data; + + Rfu.unk_f1 = 0; + taskId = CreateTask(sub_80FBE80, 3); + data = gTasks[taskId].data; + StringCopy((u8*)(data), src); + data[8] = trainerId; +} + +static bool32 sub_80FBF98(s16 a1, struct UnkLinkRfuStruct_02022B14 *structPtr) +{ + if (sub_80F9800()->unk_0a_0 == 0x45) + { + if (structPtr->unk_0a_0 != 0x45) + return TRUE; + } + else if (structPtr->unk_0a_0 != 0x40) + { + return TRUE; + } + else if (a1 == 0x44) + { + struct UnkLinkRfuStruct_02022B14 *structPtr2 = &Rfu.unk_10A; + if (structPtr2->species == SPECIES_EGG) + { + if (structPtr->species == structPtr2->species) + return FALSE; + else + return TRUE; + } + else if (structPtr->species != structPtr2->species + || structPtr->level != structPtr2->level + || structPtr->type != structPtr2->type) + { + return TRUE; + } + } + + return FALSE; +} + +static void sub_80FC028(u8 taskId) +{ + if (Rfu.unk_f1 == 4) + DestroyTask(taskId); + + if (++gTasks[taskId].data[0] > 300) + { + sub_80FB9E4(2, 0x7000); + DestroyTask(taskId); + } + + if (Rfu.unk_ccd != 0 && gUnknown_3005E10.unk_06 == 0) + { + u16 trainerId = ReadU16(Rfu.unk_10A.unk_00.playerTrainerId); + u8 id = sub_80FBC70(Rfu.playerName, trainerId); + if (id != 0xFF) + { + if (!sub_80FBF98(gTasks[taskId].data[1], (struct UnkLinkRfuStruct_02022B14 *)&gRfuLinkStatus->partner[id].gname)) + { + if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_80FD610(gRfuLinkStatus->partner[id].id, 0x5A)) + { + Rfu.unk_04 = 0xA; + DestroyTask(taskId); + } + } + else + { + sub_80FB9E4(2, 0x7000); + DestroyTask(taskId); + } + } + } +} + +void sub_80FC114(const u8 *name, struct UnkLinkRfuStruct_02022B14 *structPtr, u8 a2) +{ + u8 taskId, taskId2; + + Rfu.unk_ccf = 0; + Rfu.unk_f1 = 0; + StringCopy(Rfu.playerName, name); + memcpy(&Rfu.unk_10A, structPtr, 0xD); + sub_80FEB3C(); + taskId = CreateTask(sub_80FC028, 2); + gTasks[taskId].data[1] = a2; + taskId2 = FindTaskIdByFunc(sub_80F8B34); + if (a2 == 0x45) + { + if (taskId2 != 0xFF) + gTasks[taskId2].data[7] = 1; + } + else + { + if (taskId2 != 0xFF) + gTasks[taskId2].data[7] = 0; + } +} + +bool8 sub_80FC1B0(void) +{ + if (Rfu.unk_f0 == 1) + return TRUE; + else + return FALSE; +} + +bool32 sub_80FC1CC(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if ((gUnknown_3005E10.unk_00 >> i) & 1 && Rfu.unk_cd1[i] == 0) + return FALSE; + } + + return TRUE; +} + +static void sub_80FC208(void) +{ + s32 i; + + for (i = 0; i < 20; i++) + nullsub_87(" ", 0, i); +} + +static const char gUnknown_843EE47[16] = { + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + '\0' +}; + +static const char gUnknown_843EE57[9] = { + ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + '\0' +}; + +static const char gUnknown_843EE60[] = {' ', '\0'}; +static const char gUnknown_843EE62[] = {'*', '\0'}; + +static void sub_80FC228(void) +{ + s32 i, j; + + nullsub_88(GetBlockReceivedStatus(), 0x1C, 0x13, 2); + nullsub_88(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); + nullsub_88(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); + if (Rfu.unk_0c == 1) + { + for (i = 0; i < 4; i++) + { + if ((gRfuLinkStatus->getNameFlag >> i) & 1) + { + nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + nullsub_87((void*) &gRfuLinkStatus->partner[i].gname, 6, i + 3); + nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + } + } + for (i = 0; i < 4; i++) + { + for (j = 0; j < 14; j++) + { + nullsub_88(Rfu.unk_14[i][j], j * 2, i + 11, 2); + } + } + nullsub_87("NOWSLOT", 1, 0xF); + } + else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0) + { + for (i = 0; i < 4; i++) + { + nullsub_88(0, 1, i + 3, 4); + nullsub_87(gUnknown_843EE47, 6, i + 3); + nullsub_87(gUnknown_843EE57, 0x16, i + 3); + } + nullsub_88(gRfuLinkStatus->partner[Rfu.unk_c3e].serialNo, 1, 3, 4); + nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].gname, 6, 3); + nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].uname, 0x16, 3); + } + else + { + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) + { + if (gRfuLinkStatus->partner[i].slot != 0xFF) + { + nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + nullsub_88(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); + nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + } + } + for (; i < 4; i++) + { + nullsub_88(0, 1, i + 3, 4); + nullsub_87(gUnknown_843EE47, 6, i + 3); + nullsub_87(gUnknown_843EE57, 0x16, i + 3); + } + } +} + +static const char gUnknown_843EE6C[][12] = { + " ", + "CLOCK DRIFT", + "BUSY SEND ", + "CMD REJECT ", + "CLOCK SLAVE" +}; + +static const char gUnknown_843EEA8[][8] = { + "CHILD ", + "PARENT", + "SEARCH" +}; + +static u32 sub_80FC44C(void) +{ + return Rfu.unk_9e8.unk_232; +} + +u32 GetRfuRecvQueueLength(void) +{ + return Rfu.unk_124.unk_8c2; +} + +static void nullsub_89(u8 taskId) +{ + +} diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index 6df5207f0..94c01c081 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -96,12 +96,12 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr) svr->recvCRC = header.crc; if (svr->recvSize > ME_SEND_BUF_SIZE) { - sub_80FA190(); + LinkRfu_FatalError(); return FALSE; } else if (svr->recvIdent != header.ident) { - sub_80FA190(); + LinkRfu_FatalError(); return FALSE; } else @@ -133,7 +133,7 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr) case 2: if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) { - sub_80FA190(); + LinkRfu_FatalError(); return FALSE; } else @@ -192,7 +192,7 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr) if (IsLinkTaskFinished()) { if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) - sub_80FA190(); + LinkRfu_FatalError(); else ++svr->seqno; } diff --git a/sym_common.txt b/sym_common.txt index 848c19613..9f39f9f2b 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -75,17 +75,8 @@ gUnknown_3005078: @ 3005078 gUnknown_3005430: @ 3005430 .space 0x10 -gUnknown_3005440: @ 3005440 - .space 0x10 - -@ This name is necessary to match assert statements in link_rfu_2 -Rfu: @ 3005450 - .space 0x9AC - .align 4 -gUnknown_3005E00: @ 3005E00 - .space 0x10 - + .include "link_rfu_2.o" .align 4 .include "link_rfu.o" .align 4 diff --git a/sym_ewram.txt b/sym_ewram.txt index 9e5e91782..2647ced8c 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -330,14 +330,10 @@ gUnknown_203ABE8: @ 203ABE8 .align 2 .include "src/map_preview_screen.o" - .align 2 -gUnknown_203ABF0: @ 203ABF0 - .space 0x18 - -gUnknown_203AC08: @ 203AC08 - .space 0xDC + .include "src/link_rfu_2.o" + .align 2 gUnknown_203ACE4: @ 203ACE4 .space 0x4 |