summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/link_rfu_2.s2298
-rw-r--r--data/link_rfu_2.s12
-rw-r--r--include/link.h1
-rw-r--r--include/link_rfu.h16
-rw-r--r--include/overworld.h25
-rw-r--r--src/link_rfu_2.c711
6 files changed, 743 insertions, 2320 deletions
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s
index a5426166d..e67fa8ccf 100644
--- a/asm/link_rfu_2.s
+++ b/asm/link_rfu_2.s
@@ -5,2304 +5,6 @@
.text
- thumb_func_start sub_80F8F7C
-sub_80F8F7C: @ 80F8F7C
- push {lr}
- adds r1, r0, 0
- ldr r2, _080F8F94 @ =Rfu
- ldrh r0, [r2, 0x4]
- cmp r0, 0x11
- beq _080F8F8C
- cmp r1, 0
- beq _080F8F98
-_080F8F8C:
- movs r0, 0x12
- strh r0, [r2, 0x4]
- movs r0, 0x1
- b _080F8F9A
- .align 2, 0
-_080F8F94: .4byte Rfu
-_080F8F98:
- movs r0, 0
-_080F8F9A:
- pop {r1}
- bx r1
- thumb_func_end sub_80F8F7C
-
- thumb_func_start sub_80F8FA0
-sub_80F8FA0: @ 80F8FA0
- ldr r1, _080F8FA8 @ =Rfu
- movs r0, 0xE
- strh r0, [r1, 0x4]
- bx lr
- .align 2, 0
-_080F8FA8: .4byte Rfu
- thumb_func_end sub_80F8FA0
-
- thumb_func_start sub_80F8FAC
-sub_80F8FAC: @ 80F8FAC
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- movs r2, 0
- b _080F8FBE
-_080F8FB6:
- lsrs r1, 1
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_080F8FBE:
- cmp r2, 0x3
- bhi _080F8FD0
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F8FB6
- adds r0, r2, 0
- bl rfu_UNI_readySendData
-_080F8FD0:
- pop {r0}
- bx r0
- thumb_func_end sub_80F8FAC
-
- thumb_func_start sub_80F8FD4
-sub_80F8FD4: @ 80F8FD4
- push {r4-r7,lr}
- sub sp, 0x4
- movs r2, 0
- ldr r7, _080F9028 @ =gRecvCmds
- ldr r0, _080F902C @ =Rfu
- adds r6, r7, 0
- ldr r1, _080F9030 @ =0x0000093f
- adds r5, r0, r1
-_080F8FE4:
- movs r3, 0
- lsls r0, r2, 3
- lsls r1, r2, 4
- adds r4, r2, 0x1
- subs r0, r2
- lsls r0, 1
- adds r2, r0, r5
- adds r1, r6
-_080F8FF4:
- ldrh r0, [r1]
- lsrs r0, 8
- strb r0, [r2, 0x1]
- ldrh r0, [r1]
- strb r0, [r2]
- adds r2, 0x2
- adds r1, 0x2
- adds r3, 0x1
- cmp r3, 0x6
- ble _080F8FF4
- adds r2, r4, 0
- cmp r2, 0x4
- ble _080F8FE4
- movs r0, 0
- mov r1, sp
- strh r0, [r1]
- ldr r2, _080F9034 @ =0x01000028
- mov r0, sp
- adds r1, r7, 0
- bl CpuSet
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F9028: .4byte gRecvCmds
-_080F902C: .4byte Rfu
-_080F9030: .4byte 0x0000093f
-_080F9034: .4byte 0x01000028
- thumb_func_end sub_80F8FD4
-
- thumb_func_start sub_80F9038
-sub_80F9038: @ 80F9038
- push {lr}
- ldr r3, _080F9064 @ =gSendCmd
- ldr r2, _080F9068 @ =gRecvCmds
- movs r1, 0x6
-_080F9040:
- ldrh r0, [r3]
- strh r0, [r2]
- adds r3, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bge _080F9040
- ldr r1, _080F9064 @ =gSendCmd
- movs r2, 0
- adds r0, r1, 0
- adds r0, 0xC
-_080F9056:
- strh r2, [r0]
- subs r0, 0x2
- cmp r0, r1
- bge _080F9056
- pop {r0}
- bx r0
- .align 2, 0
-_080F9064: .4byte gSendCmd
-_080F9068: .4byte gRecvCmds
- thumb_func_end sub_80F9038
-
- thumb_func_start sub_80F906C
-sub_80F906C: @ 80F906C
- push {r4,r5,lr}
- ldr r4, _080F90CC @ =Rfu
- ldr r0, _080F90D0 @ =0x000008f4
- adds r5, r4, r0
- ldrb r0, [r5]
- cmp r0, 0
- beq _080F909E
- ldr r1, _080F90D4 @ =0x000008d4
- adds r0, r4, r1
- adds r1, r4, 0
- adds r1, 0x4C
- bl sub_80FC888
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080F90D8 @ =0x000008f2
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r1, r0, 0
- cmp r1, 0
- bne _080F909A
- ldrb r0, [r5]
- strb r1, [r5]
-_080F909A:
- cmp r2, 0
- bne _080F90C4
-_080F909E:
- ldr r5, _080F90CC @ =Rfu
- ldr r1, _080F90D0 @ =0x000008f4
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F90C4
- movs r1, 0xD4
- lsls r1, 3
- adds r0, r5, r1
- adds r4, r5, 0
- adds r4, 0x4C
- adds r1, r4, 0
- bl sub_80FC79C
- ldr r1, _080F90D4 @ =0x000008d4
- adds r0, r5, r1
- adds r1, r4, 0
- bl sub_80FC828
-_080F90C4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F90CC: .4byte Rfu
-_080F90D0: .4byte 0x000008f4
-_080F90D4: .4byte 0x000008d4
-_080F90D8: .4byte 0x000008f2
- thumb_func_end sub_80F906C
-
- thumb_func_start IsRfuRecvQueueEmpty
-IsRfuRecvQueueEmpty: @ 80F90DC
- push {r4,lr}
- ldr r0, _080F90EC @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- bne _080F90F0
-_080F90E8:
- movs r0, 0
- b _080F9110
- .align 2, 0
-_080F90EC: .4byte gRfuLinkStatus
-_080F90F0:
- movs r3, 0
- ldr r4, _080F9118 @ =gRecvCmds
-_080F90F4:
- movs r2, 0
- lsls r0, r3, 4
- adds r1, r0, r4
-_080F90FA:
- ldrh r0, [r1]
- cmp r0, 0
- bne _080F90E8
- adds r1, 0x2
- adds r2, 0x1
- cmp r2, 0x6
- ble _080F90FA
- adds r3, 0x1
- cmp r3, 0x4
- ble _080F90F4
- movs r0, 0x1
-_080F9110:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F9118: .4byte gRecvCmds
- thumb_func_end IsRfuRecvQueueEmpty
-
- thumb_func_start sub_80F911C
-sub_80F911C: @ 80F911C
- push {r4-r6,lr}
- ldr r6, _080F9138 @ =Rfu
- ldrh r0, [r6, 0x4]
- cmp r0, 0x13
- bhi _080F913C
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- movs r0, 0
- bl LinkRfu_REQ_SendData_HandleParentRelationship
- b _080F91F6
- .align 2, 0
-_080F9138: .4byte Rfu
-_080F913C:
- ldr r0, _080F9198 @ =0x00000993
- adds r1, r6, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080F919C @ =0x0000099a
- adds r1, r6, r0
- ldr r0, _080F91A0 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r1, [r1]
- ldrb r0, [r0, 0x2]
- ands r0, r1
- cmp r0, r1
- bne _080F91F6
- cmp r0, 0
- beq _080F91F6
- ldr r1, _080F91A4 @ =0x00000994
- adds r0, r6, r1
- ldrb r0, [r0]
- adds r5, r0, 0
- cmp r5, 0
- bne _080F91EC
- ldr r0, _080F91A8 @ =0x0000099b
- adds r4, r6, r0
- ldrb r0, [r4]
- cmp r0, 0
- beq _080F91CC
- bl sub_80FBCF8
- strb r5, [r4]
- ldr r1, _080F91AC @ =0x0000099c
- adds r0, r6, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080F91B0
- movs r4, 0x80
- lsls r4, 8
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_80FB9E4
- adds r0, r4, 0
- bl sub_80FB0E8
- b _080F91F6
- .align 2, 0
-_080F9198: .4byte 0x00000993
-_080F919C: .4byte 0x0000099a
-_080F91A0: .4byte gRfuLinkStatus
-_080F91A4: .4byte 0x00000994
-_080F91A8: .4byte 0x0000099b
-_080F91AC: .4byte 0x0000099c
-_080F91B0:
- ldr r0, _080F91C4 @ =gUnknown_3005E10
- ldrb r4, [r0]
- cmp r4, 0
- bne _080F91CC
- bl sub_80F8DC0
- ldr r0, _080F91C8 @ =gReceivedRemoteLinkPlayers
- strb r4, [r0]
- b _080F91F6
- .align 2, 0
-_080F91C4: .4byte gUnknown_3005E10
-_080F91C8: .4byte gReceivedRemoteLinkPlayers
-_080F91CC:
- bl sub_80F8FD4
- ldr r0, _080F91E4 @ =Rfu
- ldr r1, _080F91E8 @ =0x00000992
- adds r0, r1
- ldrb r0, [r0]
- bl rfu_UNI_readySendData
- movs r0, 0x1
- bl LinkRfu_REQ_SendData_HandleParentRelationship
- b _080F91F0
- .align 2, 0
-_080F91E4: .4byte Rfu
-_080F91E8: .4byte 0x00000992
-_080F91EC:
- bl rfu_REQ_PARENT_resumeRetransmitAndChange
-_080F91F0:
- ldr r1, _080F9200 @ =Rfu
- movs r0, 0x1
- strb r0, [r1, 0xE]
-_080F91F6:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080F9200: .4byte Rfu
- thumb_func_end sub_80F911C
-
- thumb_func_start sub_80F9204
-sub_80F9204: @ 80F9204
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- ldr r0, _080F92E4 @ =Rfu
- ldrh r1, [r0, 0x4]
- adds r6, r0, 0
- cmp r1, 0x13
- bhi _080F921C
- b _080F947E
-_080F921C:
- ldrb r0, [r6, 0xE]
- cmp r0, 0x1
- beq _080F9224
- b _080F947E
-_080F9224:
- bl rfu_waitREQComplete
- ldr r0, _080F92E8 @ =0x00000993
- adds r2, r6, r0
- ldrb r0, [r2]
- cmp r0, 0
- bne _080F9244
- adds r1, r6, 0
- adds r1, 0xEE
-_080F9236:
- ldrb r0, [r1]
- cmp r0, 0
- beq _080F923E
- b _080F94A4
-_080F923E:
- ldrb r0, [r2]
- cmp r0, 0
- beq _080F9236
-_080F9244:
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- ldr r2, _080F92EC @ =gUnknown_3005E10
- ldr r4, _080F92E4 @ =Rfu
- ldr r1, _080F92F0 @ =0x0000099a
- adds r0, r4, r1
- ldrb r1, [r2, 0x3]
- ldrb r0, [r0]
- ands r1, r0
- cmp r1, r0
- beq _080F9260
- b _080F9468
-_080F9260:
- ldr r6, _080F92F4 @ =0x00000994
- adds r1, r4, r6
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r1, _080F92F8 @ =gUnknown_203AC08
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- ldrb r7, [r2]
- movs r5, 0
-_080F9276:
- movs r0, 0x1
- ands r0, r7
- lsrs r1, r7, 1
- str r1, [sp, 0x4]
- adds r2, r5, 0x1
- str r2, [sp]
- cmp r0, 0
- bne _080F9288
- b _080F9388
-_080F9288:
- ldr r1, _080F92E4 @ =Rfu
- lsls r2, r5, 3
- subs r0, r2, r5
- lsls r4, r0, 1
- adds r0, r1, 0
- adds r0, 0x15
- adds r0, r4, r0
- ldrb r0, [r0]
- adds r6, r1, 0
- adds r3, r2, 0
- lsls r1, r5, 24
- mov r10, r1
- cmp r0, 0
- beq _080F9380
- ldr r2, _080F92FC @ =0x000009a6
- adds r0, r6, r2
- adds r1, r5, r0
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _080F9304
- adds r0, r6, 0
- adds r0, 0x14
- adds r0, r4, r0
- ldrb r2, [r0]
- lsrs r2, 5
- ldrb r0, [r1]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- cmp r2, r0
- beq _080F9304
- ldr r0, _080F9300 @ =0x000009a2
- adds r1, r6, r0
- adds r1, r5, r1
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bls _080F9380
- movs r0, 0x81
- lsls r0, 8
- bl sub_80FB0E8
- b _080F9380
- .align 2, 0
-_080F92E4: .4byte Rfu
-_080F92E8: .4byte 0x00000993
-_080F92EC: .4byte gUnknown_3005E10
-_080F92F0: .4byte 0x0000099a
-_080F92F4: .4byte 0x00000994
-_080F92F8: .4byte gUnknown_203AC08
-_080F92FC: .4byte 0x000009a6
-_080F9300: .4byte 0x000009a2
-_080F9304:
- ldr r2, _080F9444 @ =Rfu
- ldr r6, _080F9448 @ =0x000009a6
- adds r1, r2, r6
- adds r1, r5, r1
- subs r3, r5
- lsls r3, 1
- adds r4, r2, 0
- adds r4, 0x14
- adds r2, r3, r4
- ldrb r0, [r2]
- lsrs r0, 5
- strb r0, [r1]
- ldr r1, _080F9444 @ =Rfu
- subs r6, 0x4
- adds r0, r1, r6
- adds r0, r5, r0
- movs r1, 0
- strb r1, [r0]
- ldrb r1, [r2]
- movs r0, 0x1F
- ands r0, r1
- strb r0, [r2]
- ldr r2, _080F944C @ =Rfu+0x996
- adds r0, r5, r2
- ldrb r0, [r0]
- movs r6, 0
- lsls r1, r5, 24
- mov r10, r1
- lsrs r2, r7, 1
- str r2, [sp, 0x4]
- adds r5, 0x1
- str r5, [sp]
- ldr r1, _080F9450 @ =gRecvCmds
- mov r9, r1
- adds r5, r3, 0
- adds r7, r4, 0
- lsls r0, 4
- mov r8, r0
- adds r2, r5, 0x1
- mov r12, r2
-_080F9354:
- lsls r1, r6, 1
- mov r0, r8
- adds r4, r1, r0
- add r4, r9
- mov r2, r12
- adds r3, r1, r2
- adds r3, r7
- ldrb r2, [r3]
- lsls r2, 8
- adds r1, r5
- adds r1, r7
- ldrb r0, [r1]
- orrs r0, r2
- strh r0, [r4]
- movs r0, 0
- strb r0, [r3]
- strb r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x6
- bls _080F9354
-_080F9380:
- mov r1, r10
- lsrs r0, r1, 24
- bl rfu_UNI_clearRecvNewDataFlag
-_080F9388:
- ldr r2, [sp, 0x4]
- lsls r0, r2, 16
- lsrs r7, r0, 16
- ldr r6, [sp]
- lsls r0, r6, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bhi _080F939A
- b _080F9276
-_080F939A:
- bl sub_80F9038
- movs r0, 0
- bl sub_80F9868
- bl sub_80FA510
- ldr r4, _080F9444 @ =Rfu
- ldr r1, _080F9454 @ =0x0000099d
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F9476
- ldr r2, _080F9458 @ =0x00000991
- adds r0, r4, r2
- ldrb r2, [r0]
- cmp r2, 0
- bne _080F9476
- ldr r0, _080F945C @ =gUnknown_203AC08
- ldrb r1, [r0, 0xE]
- strb r2, [r0, 0xE]
- ldr r6, _080F9460 @ =0x00000992
- adds r0, r4, r6
- ldrb r1, [r0]
- movs r0, 0x3
- bl rfu_clearSlot
- movs r5, 0
- adds r7, r4, 0
- adds r7, 0x14
-_080F93D6:
- ldr r0, _080F9454 @ =0x0000099d
- adds r6, r4, r0
- ldrb r0, [r6]
- asrs r0, r5
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F93FA
- lsls r1, r5, 24
- lsrs r1, 24
- lsls r2, r5, 3
- subs r2, r5
- lsls r2, 1
- adds r2, r7
- movs r0, 0x10
- movs r3, 0xE
- bl rfu_setRecvBuffer
-_080F93FA:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _080F93D6
- subs r4, r6, 0x3
- ldrb r0, [r4]
- ldrb r2, [r6]
- adds r1, r0, 0
- orrs r1, r2
- bl sub_80F887C
- ldrb r1, [r6]
- movs r2, 0
- strb r1, [r6, 0x4]
- ldrb r0, [r4]
- orrs r0, r1
- strb r0, [r4]
- strb r2, [r6]
- ldrb r0, [r4]
- adds r1, r6, 0
- subs r1, 0x5E
- movs r2, 0x46
- bl rfu_UNI_setSendData
- ldrb r0, [r4]
- bl sub_80F886C
- adds r1, r6, 0
- subs r1, 0xB
- strb r0, [r1]
- ldr r0, _080F9464 @ =sub_80FAA94
- movs r1, 0
- bl CreateTask
- b _080F9476
- .align 2, 0
-_080F9444: .4byte Rfu
-_080F9448: .4byte 0x000009a6
-_080F944C: .4byte Rfu+0x996
-_080F9450: .4byte gRecvCmds
-_080F9454: .4byte 0x0000099d
-_080F9458: .4byte 0x00000991
-_080F945C: .4byte gUnknown_203AC08
-_080F9460: .4byte 0x00000992
-_080F9464: .4byte sub_80FAA94
-_080F9468:
- ldr r2, _080F9498 @ =0x00000994
- adds r1, r4, r2
- ldrb r0, [r1]
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1]
- strb r2, [r4, 0xE]
-_080F9476:
- ldr r1, _080F949C @ =Rfu
- movs r0, 0
- strb r0, [r1, 0xE]
- adds r6, r1, 0
-_080F947E:
- ldr r1, _080F9498 @ =0x00000994
- adds r0, r6, r1
- ldrb r0, [r0]
- adds r1, r0, 0
- ldr r0, _080F94A0 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- beq _080F94A8
- movs r0, 0x1
- ands r0, r1
- b _080F94AA
- .align 2, 0
-_080F9498: .4byte 0x00000994
-_080F949C: .4byte Rfu
-_080F94A0: .4byte gRfuLinkStatus
-_080F94A4:
- movs r0, 0
- b _080F94AA
-_080F94A8:
- movs r0, 0
-_080F94AA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80F9204
-
- thumb_func_start sub_80F94BC
-sub_80F94BC: @ 80F94BC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r2, r1, 0
- ldrh r1, [r4]
- cmp r1, 0
- beq _080F9500
- ldr r0, _080F94FC @ =Rfu
- movs r5, 0x81
- lsls r5, 1
- adds r3, r0, r5
- ldrb r0, [r3]
- lsls r0, 5
- orrs r0, r1
- strh r0, [r4]
- ldrb r0, [r3]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- strb r0, [r3]
- adds r3, r4, 0
- movs r4, 0x6
-_080F94E6:
- ldrh r1, [r3]
- lsrs r0, r1, 8
- strb r0, [r2, 0x1]
- strb r1, [r2]
- adds r2, 0x2
- adds r3, 0x2
- subs r4, 0x1
- cmp r4, 0
- bge _080F94E6
- b _080F950E
- .align 2, 0
-_080F94FC: .4byte Rfu
-_080F9500:
- movs r1, 0
- adds r0, r2, 0
- adds r0, 0xD
-_080F9506:
- strb r1, [r0]
- subs r0, 0x1
- cmp r0, r2
- bge _080F9506
-_080F950E:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80F94BC
-
- thumb_func_start sub_80F9514
-sub_80F9514: @ 80F9514
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x58
- ldr r0, _080F9638 @ =Rfu+0x124
- mov r1, sp
- bl sub_80FC6E8
- movs r1, 0
- ldr r0, _080F963C @ =gRecvCmds
- mov r12, r0
-_080F952A:
- movs r4, 0
- lsls r0, r1, 3
- adds r2, r1, 0x1
- mov r8, r2
- lsls r6, r1, 4
- subs r0, r1
- lsls r5, r0, 1
-_080F9538:
- lsls r1, r4, 1
- adds r3, r1, r6
- add r3, r12
- adds r1, r5, r1
- adds r0, r1, 0x1
- add r0, sp
- ldrb r2, [r0]
- lsls r2, 8
- mov r7, sp
- adds r0, r7, r1
- ldrb r0, [r0]
- orrs r0, r2
- strh r0, [r3]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bls _080F9538
- mov r1, r8
- lsls r0, r1, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bls _080F952A
- movs r0, 0
- bl sub_80F9868
- ldr r0, _080F9640 @ =gUnknown_3005E10
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- bne _080F95E4
- ldr r0, _080F9644 @ =Rfu
- ldr r2, _080F9648 @ =0x0000099c
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F95E4
- ldr r0, _080F964C @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- orrs r0, r1
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- bl sub_80FB9F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080F95B0
- cmp r0, 0x6
- beq _080F95B0
- cmp r0, 0x9
- beq _080F95B0
- movs r1, 0x90
- lsls r1, 8
- movs r0, 0x2
- bl sub_80FB9E4
-_080F95B0:
- bl rfu_clearAllSlot
- ldr r1, _080F9650 @ =gReceivedRemoteLinkPlayers
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080F9644 @ =Rfu
- movs r5, 0
- str r5, [r0]
- ldr r7, _080F9648 @ =0x0000099c
- adds r6, r0, r7
- ldrb r0, [r6]
- cmp r0, 0x1
- bne _080F95DC
- movs r4, 0x90
- lsls r4, 8
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_80FB9E4
- adds r0, r4, 0
- bl sub_80FB0E8
-_080F95DC:
- ldr r0, _080F9640 @ =gUnknown_3005E10
- strb r5, [r0, 0x5]
- strb r5, [r0, 0x4]
- strb r5, [r6]
-_080F95E4:
- ldr r6, _080F9644 @ =Rfu
- ldr r0, _080F9654 @ =0x00000988
- adds r2, r6, r0
- ldrb r0, [r2]
- cmp r0, 0
- beq _080F9628
- ldrb r0, [r2]
- subs r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- bl sub_80FA510
- ldr r5, _080F9658 @ =gSendCmd
- add r4, sp, 0x48
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80F94BC
- movs r1, 0xD4
- lsls r1, 3
- adds r0, r6, r1
- adds r1, r4, 0
- bl sub_80FC63C
- movs r1, 0
- movs r2, 0
-_080F9618:
- lsls r0, r1, 1
- adds r0, r5
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x6
- bls _080F9618
-_080F9628:
- bl IsRfuRecvQueueEmpty
- add sp, 0x58
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080F9638: .4byte Rfu+0x124
-_080F963C: .4byte gRecvCmds
-_080F9640: .4byte gUnknown_3005E10
-_080F9644: .4byte Rfu
-_080F9648: .4byte 0x0000099c
-_080F964C: .4byte gRfuLinkStatus
-_080F9650: .4byte gReceivedRemoteLinkPlayers
-_080F9654: .4byte 0x00000988
-_080F9658: .4byte gSendCmd
- thumb_func_end sub_80F9514
-
- thumb_func_start sub_80F965C
-sub_80F965C: @ 80F965C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, _080F9708 @ =Rfu
- ldr r2, [r0, 0x70]
- mov r10, r2
- movs r5, 0
- adds r2, r0, 0
- adds r2, 0x6E
- ldrh r3, [r2]
- cmp r5, r3
- bge _080F96F8
- mov r9, r0
- ldr r0, _080F970C @ =gUnknown_3002008
- mov r8, r0
-_080F967E:
- movs r0, 0x1
- ands r0, r1
- lsrs r7, r1, 1
- adds r6, r5, 0x1
- cmp r0, 0
- bne _080F96EC
- ldr r1, _080F9710 @ =0xffff8900
- adds r0, r1, 0
- adds r1, r5, 0
- orrs r1, r0
- mov r2, r8
- strh r1, [r2]
- movs r4, 0
- lsls r0, r5, 1
- ldr r3, _080F9714 @ =gUnknown_3001FF8
- mov r12, r3
- adds r0, r5
- lsls r0, 2
- mov r1, r10
- adds r2, r0, r1
- mov r3, r8
- adds r3, 0x2
-_080F96AA:
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- ldrb r0, [r2]
- orrs r0, r1
- strh r0, [r3]
- adds r2, 0x2
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _080F96AA
- movs r4, 0
- ldr r2, _080F970C @ =gUnknown_3002008
- ldr r1, _080F9714 @ =gUnknown_3001FF8
-_080F96C4:
- ldrh r0, [r2]
- lsrs r0, 8
- strb r0, [r1, 0x1]
- ldrh r0, [r2]
- strb r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _080F96C4
- ldr r0, _080F9718 @ =Rfu+0x6a0
- mov r1, r12
- bl sub_80FC63C
- movs r1, 0x1
- lsls r1, r5
- mov r2, r9
- ldr r0, [r2, 0x78]
- orrs r0, r1
- str r0, [r2, 0x78]
-_080F96EC:
- adds r1, r7, 0
- adds r5, r6, 0
- ldr r3, _080F971C @ =Rfu+0x6e
- ldrh r3, [r3]
- cmp r5, r3
- blt _080F967E
-_080F96F8:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F9708: .4byte Rfu
-_080F970C: .4byte gUnknown_3002008
-_080F9710: .4byte 0xffff8900
-_080F9714: .4byte gUnknown_3001FF8
-_080F9718: .4byte Rfu+0x6a0
-_080F971C: .4byte Rfu+0x6e
- thumb_func_end sub_80F965C
-
- thumb_func_start Rfu_SetBlockReceivedFlag
-Rfu_SetBlockReceivedFlag: @ 80F9720
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, _080F973C @ =Rfu
- ldrb r2, [r0, 0xC]
- cmp r2, 0x1
- bne _080F9740
- cmp r1, 0
- beq _080F9740
- adds r0, 0x61
- adds r0, r1, r0
- strb r2, [r0]
- b _080F9748
- .align 2, 0
-_080F973C: .4byte Rfu
-_080F9740:
- adds r0, 0x5C
- adds r0, r1, r0
- movs r1, 0x1
- strb r1, [r0]
-_080F9748:
- pop {r0}
- bx r0
- thumb_func_end Rfu_SetBlockReceivedFlag
-
- thumb_func_start Rfu_ResetBlockReceivedFlag
-Rfu_ResetBlockReceivedFlag: @ 80F974C
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _080F976C @ =Rfu
- adds r1, r3, 0
- adds r1, 0x5C
- adds r1, r0, r1
- movs r2, 0
- strb r2, [r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- adds r1, 0x92
- strb r2, [r1]
- bx lr
- .align 2, 0
-_080F976C: .4byte Rfu
- thumb_func_end Rfu_ResetBlockReceivedFlag
-
- thumb_func_start sub_80F9770
-sub_80F9770: @ 80F9770
- push {r4,r5,lr}
- adds r3, r0, 0
- ldr r0, _080F9784 @ =Rfu
- ldrb r1, [r0, 0xC]
- adds r5, r0, 0
- cmp r1, 0x1
- bne _080F9788
- movs r0, 0
- b _080F97AA
- .align 2, 0
-_080F9784: .4byte Rfu
-_080F9788:
- movs r2, 0
- ldr r0, _080F97B0 @ =0x00000996
- adds r4, r5, r0
-_080F978E:
- adds r1, r2, r4
- adds r0, r3, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _080F978E
- ldr r1, _080F97B4 @ =0x000008f6
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r0, r3
- ldrb r0, [r0]
-_080F97AA:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080F97B0: .4byte 0x00000996
-_080F97B4: .4byte 0x000008f6
- thumb_func_end sub_80F9770
-
- thumb_func_start rfu_func_080F97B8
-rfu_func_080F97B8: @ 80F97B8
- push {lr}
- ldr r0, _080F97F0 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F97EA
- ldr r3, _080F97F4 @ =gHeldKeyCodeToSend
- ldrh r2, [r3]
- cmp r2, 0
- beq _080F97EA
- ldr r0, _080F97F8 @ =gLinkTransferringData
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080F97EA
- ldr r1, _080F97FC @ =gUnknown_3001188
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldrb r0, [r1]
- lsls r0, 8
- orrs r0, r2
- strh r0, [r3]
- movs r0, 0xBE
- lsls r0, 8
- bl sub_80F9D04
-_080F97EA:
- pop {r0}
- bx r0
- .align 2, 0
-_080F97F0: .4byte gReceivedRemoteLinkPlayers
-_080F97F4: .4byte gHeldKeyCodeToSend
-_080F97F8: .4byte gLinkTransferringData
-_080F97FC: .4byte gUnknown_3001188
- thumb_func_end rfu_func_080F97B8
-
- thumb_func_start sub_80F9800
-sub_80F9800: @ 80F9800
- ldr r0, _080F9804 @ =gUnknown_3005440
- bx lr
- .align 2, 0
-_080F9804: .4byte gUnknown_3005440
- thumb_func_end sub_80F9800
-
- thumb_func_start IsSendingKeysToRfu
-IsSendingKeysToRfu: @ 80F9808
- push {lr}
- movs r2, 0
- ldr r0, _080F9820 @ =Rfu
- ldr r1, [r0]
- ldr r0, _080F9824 @ =rfu_func_080F97B8
- cmp r1, r0
- bne _080F9818
- movs r2, 0x1
-_080F9818:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080F9820: .4byte Rfu
-_080F9824: .4byte rfu_func_080F97B8
- thumb_func_end IsSendingKeysToRfu
-
- thumb_func_start sub_80F9828
-sub_80F9828: @ 80F9828
- push {r4,lr}
- ldr r4, _080F9848 @ =Rfu
- ldr r0, [r4]
- cmp r0, 0
- beq _080F983E
- ldr r0, _080F984C @ =gUnknown_843ED94 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/rfu.c"
- ldr r1, _080F9850 @ =0x000005c1 // 1473
- ldr r2, _080F9854 @ =gUnknown_843EDC4 "Rfu.RfuFunc == NULL"
- movs r3, 0x1
- bl AGBAssert
-_080F983E:
- ldr r0, _080F9858 @ =rfu_func_080F97B8
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F9848: .4byte Rfu
-_080F984C: .4byte gUnknown_843ED94
-_080F9850: .4byte 0x000005c1
-_080F9854: .4byte gUnknown_843EDC4
-_080F9858: .4byte rfu_func_080F97B8
- thumb_func_end sub_80F9828
-
- thumb_func_start Rfu_set_zero
-Rfu_set_zero: @ 80F985C
- ldr r1, _080F9864 @ =Rfu
- movs r0, 0
- str r0, [r1]
- bx lr
- .align 2, 0
-_080F9864: .4byte Rfu
- thumb_func_end Rfu_set_zero
-
- thumb_func_start sub_80F9868
-sub_80F9868: @ 80F9868
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- movs r0, 0
- mov r8, r0
-_080F9876:
- mov r1, r8
- lsls r5, r1, 4
- ldr r2, _080F98B4 @ =gRecvCmds
- adds r0, r5, r2
- ldrh r7, [r0]
- movs r3, 0xFF
- lsls r3, 8
- adds r0, r3, 0
- adds r1, r0, 0
- ands r1, r7
- movs r0, 0x88
- lsls r0, 8
- adds r2, r5, 0
- cmp r1, r0
- beq _080F9954
- cmp r1, r0
- bgt _080F98CA
- movs r0, 0xCC
- lsls r0, 7
- cmp r1, r0
- bne _080F98A2
- b _080F9AD0
-_080F98A2:
- cmp r1, r0
- bgt _080F98B8
- movs r0, 0xBE
- lsls r0, 7
- cmp r1, r0
- bne _080F98B0
- b _080F9AC0
-_080F98B0:
- b _080F9BF4
- .align 2, 0
-_080F98B4: .4byte gRecvCmds
-_080F98B8:
- movs r0, 0xEE
- lsls r0, 7
- cmp r1, r0
- beq _080F9914
- movs r0, 0xF0
- lsls r0, 7
- cmp r1, r0
- beq _080F9902
- b _080F9BF4
-_080F98CA:
- movs r0, 0xBE
- lsls r0, 8
- cmp r1, r0
- bne _080F98D4
- b _080F9BE4
-_080F98D4:
- cmp r1, r0
- bgt _080F98EC
- movs r0, 0x89
- lsls r0, 8
- cmp r1, r0
- beq _080F99B8
- movs r0, 0xA1
- lsls r0, 8
- cmp r1, r0
- bne _080F98EA
- b _080F9A9C
-_080F98EA:
- b _080F9BF4
-_080F98EC:
- movs r0, 0xED
- lsls r0, 8
- cmp r1, r0
- bne _080F98F6
- b _080F9B00
-_080F98F6:
- movs r0, 0xEE
- lsls r0, 8
- cmp r1, r0
- bne _080F9900
- b _080F9BA0
-_080F9900:
- b _080F9BF4
-_080F9902:
- ldr r4, _080F993C @ =Rfu
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- bne _080F9914
- ldr r0, _080F9940 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F9914
- b _080F9C40
-_080F9914:
- ldr r0, _080F9944 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- mov r6, r8
- adds r6, 0x1
- cmp r0, 0
- beq _080F9924
- b _080F9BF8
-_080F9924:
- ldr r1, _080F9948 @ =gRecvCmds + 2
- adds r0, r2, r1
- ldrh r0, [r0]
- ldr r3, _080F993C @ =Rfu
- strb r0, [r3, 0xD]
- ldr r4, _080F994C @ =gRecvCmds + 4
- adds r0, r2, r4
- bl sub_80F9770
- ldr r1, _080F9950 @ =Rfu+0x986
- strb r0, [r1]
- b _080F9BF8
- .align 2, 0
-_080F993C: .4byte Rfu
-_080F9940: .4byte gReceivedRemoteLinkPlayers
-_080F9944: .4byte gRfuLinkStatus
-_080F9948: .4byte gRecvCmds + 2
-_080F994C: .4byte gRecvCmds + 4
-_080F9950: .4byte Rfu+0x986
-_080F9954:
- ldr r2, _080F99AC @ =Rfu
- mov r9, r2
- mov r3, r8
- lsls r0, r3, 2
- add r0, r8
- lsls r7, r0, 2
- adds r3, r7, r2
- movs r4, 0x92
- adds r4, r3
- mov r12, r4
- ldrb r4, [r4]
- mov r6, r8
- adds r6, 0x1
- cmp r4, 0
- beq _080F9974
- b _080F9BF8
-_080F9974:
- adds r0, r3, 0
- adds r0, 0x80
- movs r2, 0
- strh r4, [r0]
- ldr r1, _080F99B0 @ =gRecvCmds + 2
- adds r0, r5, r1
- ldrh r0, [r0]
- adds r1, r3, 0
- adds r1, 0x82
- strh r0, [r1]
- ldr r1, _080F99B4 @ =gRecvCmds + 4
- adds r0, r5, r1
- ldrh r1, [r0]
- adds r0, r3, 0
- adds r0, 0x91
- strb r1, [r0]
- mov r0, r9
- adds r0, 0x88
- adds r0, r7, r0
- str r4, [r0]
- movs r0, 0x1
- mov r3, r12
- strb r0, [r3]
- mov r0, r9
- adds r0, 0x5C
- add r0, r8
- strb r2, [r0]
- b _080F9BF8
- .align 2, 0
-_080F99AC: .4byte Rfu
-_080F99B0: .4byte gRecvCmds + 2
-_080F99B4: .4byte gRecvCmds + 4
-_080F99B8:
- ldr r4, _080F9A88 @ =Rfu
- mov r9, r4
- mov r0, r8
- lsls r1, r0, 2
- adds r0, r1, r0
- lsls r4, r0, 2
- mov r3, r9
- adds r2, r4, r3
- adds r0, r2, 0
- adds r0, 0x92
- ldrb r3, [r0]
- mov r10, r1
- mov r6, r8
- adds r6, 0x1
- cmp r3, 0x1
- beq _080F99DA
- b _080F9BF8
-_080F99DA:
- movs r0, 0xFF
- ands r0, r7
- adds r2, 0x80
- strh r0, [r2]
- mov r1, r9
- adds r1, 0x88
- adds r1, r4, r1
- lsls r3, r0
- ldr r0, [r1]
- orrs r0, r3
- str r0, [r1]
- movs r4, 0
- ldr r0, _080F9A8C @ =gBlockRecvBuffer
- mov r9, r0
- mov r12, r2
- mov r1, r8
- lsls r7, r1, 8
- adds r3, r5, 0
-_080F99FE:
- mov r2, r12
- ldrh r0, [r2]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 1
- adds r1, r4
- lsls r1, 1
- adds r1, r7
- add r1, r9
- adds r2, r4, 0x1
- lsls r0, r2, 1
- adds r0, r3
- ldr r4, _080F9A90 @ =gRecvCmds
- adds r0, r4
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r2, 16
- lsrs r4, r2, 16
- cmp r4, 0x5
- bls _080F99FE
- ldr r4, _080F9A88 @ =Rfu
- mov r0, r10
- add r0, r8
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x88
- adds r1, r0, r1
- adds r2, r0, r4
- adds r0, r2, 0
- adds r0, 0x82
- ldrh r0, [r0]
- lsls r0, 2
- ldr r3, _080F9A94 @ =gUnknown_843EBD4
- adds r0, r3
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- beq _080F9A4C
- b _080F9BF8
-_080F9A4C:
- adds r1, r2, 0
- adds r1, 0x92
- movs r0, 0x2
- strb r0, [r1]
- mov r1, r8
- lsls r0, r1, 24
- lsrs r0, 24
- bl Rfu_SetBlockReceivedFlag
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- beq _080F9A6E
- b _080F9BF8
-_080F9A6E:
- ldr r0, _080F9A98 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F9A78
- b _080F9BF8
-_080F9A78:
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- beq _080F9A80
- b _080F9BF8
-_080F9A80:
- ldr r0, _080F9A8C @ =gBlockRecvBuffer
- bl sub_80FAA58
- b _080F9BF8
- .align 2, 0
-_080F9A88: .4byte Rfu
-_080F9A8C: .4byte gBlockRecvBuffer
-_080F9A90: .4byte gRecvCmds
-_080F9A94: .4byte gUnknown_843EBD4
-_080F9A98: .4byte gReceivedRemoteLinkPlayers
-_080F9A9C:
- ldr r2, _080F9AB8 @ =gUnknown_843EC64
- ldr r3, _080F9ABC @ =gRecvCmds + 2
- adds r0, r5, r3
- ldrh r1, [r0]
- lsls r1, 3
- adds r0, r1, r2
- ldr r0, [r0]
- adds r2, 0x4
- adds r1, r2
- ldrh r1, [r1]
- bl Rfu_InitBlockSend
- b _080F9BF4
- .align 2, 0
-_080F9AB8: .4byte gUnknown_843EC64
-_080F9ABC: .4byte gRecvCmds + 2
-_080F9AC0:
- ldr r1, _080F9ACC @ =Rfu+0xe4
- add r1, r8
- movs r0, 0x1
- strb r0, [r1]
- b _080F9BF4
- .align 2, 0
-_080F9ACC: .4byte Rfu+0xe4
-_080F9AD0:
- ldr r2, _080F9AF8 @ =Rfu
- movs r4, 0x80
- lsls r4, 1
- adds r0, r2, r4
- ldr r3, _080F9AFC @ =gRecvCmds + 2
- adds r1, r5, r3
- ldrh r0, [r0]
- mov r6, r8
- adds r6, 0x1
- ldrh r1, [r1]
- cmp r0, r1
- beq _080F9AEA
- b _080F9BF8
-_080F9AEA:
- adds r0, r2, 0
- adds r0, 0xE9
- add r0, r8
- movs r1, 0x1
- strb r1, [r0]
- b _080F9BF8
- .align 2, 0
-_080F9AF8: .4byte Rfu
-_080F9AFC: .4byte gRecvCmds + 2
-_080F9B00:
- ldr r7, _080F9B4C @ =Rfu
- ldrb r2, [r7, 0xC]
- cmp r2, 0
- bne _080F9B68
- ldr r3, _080F9B50 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r3]
- mov r6, r8
- adds r6, 0x1
- cmp r0, 0
- beq _080F9BF8
- ldr r0, _080F9B54 @ =gRecvCmds + 2
- adds r4, r5, r0
- ldrh r1, [r4]
- ldr r0, _080F9B58 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- ands r1, r0
- cmp r1, 0
- beq _080F9B38
- strb r2, [r3]
- bl sub_80FEB14
- ldr r1, _080F9B5C @ =gRecvCmds + 4
- adds r0, r5, r1
- ldrh r1, [r0]
- ldr r2, _080F9B60 @ =0x0000099c
- adds r0, r7, r2
- strb r1, [r0]
-_080F9B38:
- ldr r0, _080F9B64 @ =gRecvCmds
- adds r0, 0x6
- adds r0, r5, r0
- ldrh r0, [r0]
- strb r0, [r7, 0xD]
- ldrh r0, [r4]
- bl sub_80FA9D0
- b _080F9BF8
- .align 2, 0
-_080F9B4C: .4byte Rfu
-_080F9B50: .4byte gReceivedRemoteLinkPlayers
-_080F9B54: .4byte gRecvCmds + 2
-_080F9B58: .4byte gRfuLinkStatus
-_080F9B5C: .4byte gRecvCmds + 4
-_080F9B60: .4byte 0x0000099c
-_080F9B64: .4byte gRecvCmds
-_080F9B68:
- movs r0, 0xEE
- lsls r0, 8
- bl sub_80F9D04
- ldr r1, _080F9B90 @ =gSendCmd
- ldr r3, _080F9B94 @ =gRecvCmds + 2
- adds r0, r5, r3
- ldrh r0, [r0]
- strh r0, [r1, 0x2]
- ldr r4, _080F9B98 @ =gRecvCmds + 4
- adds r0, r5, r4
- ldrh r0, [r0]
- strh r0, [r1, 0x4]
- ldr r0, _080F9B9C @ =gRecvCmds
- adds r0, 0x6
- adds r0, r5, r0
- ldrh r0, [r0]
- strh r0, [r1, 0x6]
- b _080F9BF4
- .align 2, 0
-_080F9B90: .4byte gSendCmd
-_080F9B94: .4byte gRecvCmds + 2
-_080F9B98: .4byte gRecvCmds + 4
-_080F9B9C: .4byte gRecvCmds
-_080F9BA0:
- ldr r4, _080F9BD0 @ =Rfu
- ldrb r0, [r4, 0xC]
- mov r6, r8
- adds r6, 0x1
- cmp r0, 0x1
- bne _080F9C34
- ldr r0, _080F9BD4 @ =0x0000099b
- adds r2, r4, r0
- ldr r1, _080F9BD8 @ =gRecvCmds + 2
- adds r3, r5, r1
- ldrb r1, [r3]
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- ldr r2, _080F9BDC @ =gRecvCmds + 4
- adds r0, r5, r2
- ldrh r1, [r0]
- ldr r2, _080F9BE0 @ =0x0000099c
- adds r0, r4, r2
- strb r1, [r0]
- ldrh r0, [r3]
- bl sub_80FA9D0
- b _080F9BF8
- .align 2, 0
-_080F9BD0: .4byte Rfu
-_080F9BD4: .4byte 0x0000099b
-_080F9BD8: .4byte gRecvCmds + 2
-_080F9BDC: .4byte gRecvCmds + 4
-_080F9BE0: .4byte 0x0000099c
-_080F9BE4:
- ldr r0, _080F9C24 @ =gLinkPartnersHeldKeys
- mov r3, r8
- lsls r1, r3, 1
- adds r1, r0
- ldr r4, _080F9C28 @ =gRecvCmds + 2
- adds r0, r5, r4
- ldrh r0, [r0]
- strh r0, [r1]
-_080F9BF4:
- mov r6, r8
- adds r6, 0x1
-_080F9BF8:
- ldr r3, _080F9C2C @ =Rfu
- ldrb r4, [r3, 0xC]
- cmp r4, 0x1
- bne _080F9C34
- adds r0, r3, 0
- adds r0, 0x61
- mov r1, r8
- adds r2, r1, r0
- ldrb r0, [r2]
- adds r1, r0, 0
- cmp r1, 0
- beq _080F9C34
- cmp r1, 0x4
- bne _080F9C30
- adds r0, r3, 0
- adds r0, 0x5C
- add r0, r8
- movs r1, 0
- strb r4, [r0]
- strb r1, [r2]
- b _080F9C34
- .align 2, 0
-_080F9C24: .4byte gLinkPartnersHeldKeys
-_080F9C28: .4byte gRecvCmds + 2
-_080F9C2C: .4byte Rfu
-_080F9C30:
- adds r0, 0x1
- strb r0, [r2]
-_080F9C34:
- lsls r0, r6, 16
- lsrs r0, 16
- mov r8, r0
- cmp r0, 0x4
- bhi _080F9C40
- b _080F9876
-_080F9C40:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80F9868
-
- thumb_func_start sub_80F9C50
-sub_80F9C50: @ 80F9C50
- push {lr}
- movs r2, 0
- ldr r0, _080F9C64 @ =Rfu
- adds r1, r0, 0
- adds r1, 0x92
-_080F9C5A:
- ldrb r0, [r1]
- cmp r0, 0
- beq _080F9C68
- movs r0, 0
- b _080F9C72
- .align 2, 0
-_080F9C64: .4byte Rfu
-_080F9C68:
- adds r1, 0x14
- adds r2, 0x1
- cmp r2, 0x4
- ble _080F9C5A
- movs r0, 0x1
-_080F9C72:
- pop {r1}
- bx r1
- thumb_func_end sub_80F9C50
-
- thumb_func_start sub_80F9C78
-sub_80F9C78: @ 80F9C78
- push {r4,lr}
- movs r1, 0
- ldr r2, _080F9CA0 @ =Rfu
- ldrb r0, [r2, 0xD]
- cmp r1, r0
- bge _080F9CAC
- adds r4, r0, 0
- adds r3, r2, 0
- adds r3, 0x92
- adds r2, 0x5C
-_080F9C8C:
- ldrb r0, [r3]
- cmp r0, 0x2
- bne _080F9C9A
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080F9CA4
-_080F9C9A:
- movs r0, 0
- b _080F9CAE
- .align 2, 0
-_080F9CA0: .4byte Rfu
-_080F9CA4:
- adds r3, 0x14
- adds r1, 0x1
- cmp r1, r4
- blt _080F9C8C
-_080F9CAC:
- movs r0, 0x1
-_080F9CAE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80F9C78
-
- thumb_func_start sub_80F9CB4
-sub_80F9CB4: @ 80F9CB4
- movs r2, 0
- movs r1, 0
- strh r1, [r0]
- strh r1, [r0, 0x2]
- str r1, [r0, 0x4]
- str r1, [r0, 0x8]
- strb r2, [r0, 0x10]
- strb r2, [r0, 0x11]
- strb r2, [r0, 0x12]
- bx lr
- thumb_func_end sub_80F9CB4
-
- thumb_func_start Rfu_GetBlockReceivedStatus
-Rfu_GetBlockReceivedStatus: @ 80F9CC8
- push {r4,lr}
- movs r2, 0
- movs r1, 0
- ldr r0, _080F9D00 @ =Rfu
- adds r3, r0, 0
- adds r3, 0x92
- adds r4, r0, 0
- adds r4, 0x5C
-_080F9CD8:
- ldrb r0, [r3]
- cmp r0, 0x2
- bne _080F9CEE
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080F9CEE
- lsls r0, r1
- orrs r2, r0
- lsls r0, r2, 24
- lsrs r2, r0, 24
-_080F9CEE:
- adds r3, 0x14
- adds r1, 0x1
- cmp r1, 0x4
- ble _080F9CD8
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080F9D00: .4byte Rfu
- thumb_func_end Rfu_GetBlockReceivedStatus
-
- thumb_func_start sub_80F9D04
-sub_80F9D04: @ 80F9D04
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r5, _080F9D34 @ =gSendCmd
- strh r1, [r5]
- movs r0, 0xF0
- lsls r0, 7
- adds r4, r5, 0
- cmp r1, r0
- beq _080F9D98
- cmp r1, r0
- bgt _080F9D4A
- movs r0, 0xBE
- lsls r0, 7
- cmp r1, r0
- beq _080F9DE8
- cmp r1, r0
- bgt _080F9D38
- movs r0, 0xBC
- lsls r0, 6
- cmp r1, r0
- beq _080F9DFC
- b _080F9E22
- .align 2, 0
-_080F9D34: .4byte gSendCmd
-_080F9D38:
- movs r0, 0xCC
- lsls r0, 7
- cmp r1, r0
- beq _080F9DE8
- movs r0, 0xEE
- lsls r0, 7
- cmp r1, r0
- beq _080F9D98
- b _080F9E22
-_080F9D4A:
- movs r0, 0xBE
- lsls r0, 8
- cmp r1, r0
- beq _080F9E1C
- cmp r1, r0
- bgt _080F9E22
- movs r0, 0x88
- lsls r0, 8
- cmp r1, r0
- beq _080F9D68
- movs r0, 0xA1
- lsls r0, 8
- cmp r1, r0
- beq _080F9D80
- b _080F9E22
-_080F9D68:
- ldr r0, _080F9D7C @ =Rfu
- adds r1, r0, 0
- adds r1, 0x6E
- ldrh r1, [r1]
- strh r1, [r5, 0x2]
- adds r0, 0x7D
- ldrb r0, [r0]
- adds r0, 0x80
- strh r0, [r5, 0x4]
- b _080F9E22
- .align 2, 0
-_080F9D7C: .4byte Rfu
-_080F9D80:
- bl sub_80F9C50
- lsls r0, 24
- cmp r0, 0
- beq _080F9E22
- ldr r0, _080F9D94 @ =Rfu
- adds r0, 0x5A
- ldrb r0, [r0]
- b _080F9E20
- .align 2, 0
-_080F9D94: .4byte Rfu
-_080F9D98:
- ldr r3, _080F9DD4 @ =Rfu
- ldr r1, _080F9DD8 @ =0x0000099a
- adds r0, r3, r1
- ldr r2, _080F9DDC @ =0x0000099b
- adds r1, r3, r2
- ldrb r2, [r0]
- ldrb r0, [r1]
- eors r0, r2
- ldr r1, _080F9DE0 @ =gUnknown_843EC41
- adds r0, r1
- ldrb r0, [r0]
- adds r0, 0x1
- strb r0, [r3, 0xD]
- ldrb r0, [r3, 0xD]
- strh r0, [r4, 0x2]
- adds r2, r4, 0x4
- movs r4, 0
- ldr r0, _080F9DE4 @ =0x00000996
- adds r3, r0
-_080F9DBE:
- adds r1, r2, r4
- adds r0, r4, r3
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _080F9DBE
- b _080F9E22
- .align 2, 0
-_080F9DD4: .4byte Rfu
-_080F9DD8: .4byte 0x0000099a
-_080F9DDC: .4byte 0x0000099b
-_080F9DE0: .4byte gUnknown_843EC41
-_080F9DE4: .4byte 0x00000996
-_080F9DE8:
- ldr r0, _080F9DF8 @ =Rfu
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4, 0x2]
- b _080F9E22
- .align 2, 0
-_080F9DF8: .4byte Rfu
-_080F9DFC:
- movs r4, 0
- ldr r3, _080F9E18 @ =Rfu+0xf2
-_080F9E00:
- adds r2, r4, 0x1
- lsls r1, r2, 1
- adds r1, r5
- lsls r0, r4, 1
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r1]
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0x5
- bls _080F9E00
- b _080F9E22
- .align 2, 0
-_080F9E18: .4byte Rfu+0xf2
-_080F9E1C:
- ldr r0, _080F9E28 @ =gHeldKeyCodeToSend
- ldrh r0, [r0]
-_080F9E20:
- strh r0, [r5, 0x2]
-_080F9E22:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F9E28: .4byte gHeldKeyCodeToSend
- thumb_func_end sub_80F9D04
-
- thumb_func_start sub_80F9E2C
-sub_80F9E2C: @ 80F9E2C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _080F9E58 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080F9E52
- bl sub_80FBA00
- cmp r0, 0
- bne _080F9E52
- ldr r0, _080F9E5C @ =Rfu+0xf2
- adds r1, r4, 0
- movs r2, 0xC
- bl memcpy
- movs r0, 0xBC
- lsls r0, 6
- bl sub_80F9D04
-_080F9E52:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F9E58: .4byte gSendCmd
-_080F9E5C: .4byte Rfu+0xf2
- thumb_func_end sub_80F9E2C
-
- thumb_func_start Rfu_InitBlockSend
-Rfu_InitBlockSend: @ 80F9E60
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- adds r6, r1, 0
- cmp r6, 0xFC
- bls _080F9E7C
- ldr r0, _080F9EA8 @ =gUnknown_843ED94 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/rfu.c"
- ldr r1, _080F9EAC @ =0x00000701 // 1793
- ldr r2, _080F9EB0 @ =gUnknown_843EDD8 "size<=252"
- movs r3, 0x1
- bl AGBAssert
-_080F9E7C:
- ldr r5, _080F9EB4 @ =Rfu
- ldr r0, [r5]
- cmp r0, 0
- bne _080F9EA4
- ldr r0, _080F9EB8 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080F9EA4
- movs r0, 0x7C
- adds r0, r5
- mov r9, r0
- ldrb r1, [r0]
- mov r8, r1
- cmp r1, 0
- beq _080F9EC0
- ldr r1, _080F9EBC @ =gUnknown_203AC08
- adds r1, 0x83
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_080F9EA4:
- movs r0, 0
- b _080F9F2A
- .align 2, 0
-_080F9EA8: .4byte gUnknown_843ED94
-_080F9EAC: .4byte 0x00000701
-_080F9EB0: .4byte gUnknown_843EDD8
-_080F9EB4: .4byte Rfu
-_080F9EB8: .4byte gSendCmd
-_080F9EBC: .4byte gUnknown_203AC08
-_080F9EC0:
- adds r0, r6, 0
- movs r1, 0xC
- bl __umodsi3
- negs r4, r0
- orrs r4, r0
- lsrs r4, 31
- bl GetMultiplayerId
- adds r1, r5, 0
- adds r1, 0x7D
- strb r0, [r1]
- movs r0, 0x1
- mov r1, r9
- strb r0, [r1]
- adds r0, r6, 0
- movs r1, 0xC
- bl __udivsi3
- adds r0, r4
- adds r1, r5, 0
- adds r1, 0x6E
- strh r0, [r1]
- adds r0, r5, 0
- adds r0, 0x6C
- mov r1, r8
- strh r1, [r0]
- movs r0, 0x80
- lsls r0, 1
- cmp r6, r0
- bls _080F9F02
- str r7, [r5, 0x70]
- b _080F9F14
-_080F9F02:
- ldr r4, _080F9F38 @ =gBlockSendBuffer
- cmp r7, r4
- beq _080F9F12
- adds r0, r4, 0
- adds r1, r7, 0
- adds r2, r6, 0
- bl memcpy
-_080F9F12:
- str r4, [r5, 0x70]
-_080F9F14:
- movs r0, 0x88
- lsls r0, 8
- bl sub_80F9D04
- ldr r0, _080F9F3C @ =Rfu
- ldr r1, _080F9F40 @ =rfufunc_80F9F44
- str r1, [r0]
- adds r0, 0x5B
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x1
-_080F9F2A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080F9F38: .4byte gBlockSendBuffer
-_080F9F3C: .4byte Rfu
-_080F9F40: .4byte rfufunc_80F9F44
- thumb_func_end Rfu_InitBlockSend
-
- thumb_func_start rfufunc_80F9F44
-rfufunc_80F9F44: @ 80F9F44
- push {r4,r5,lr}
- ldr r0, _080F9F74 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080F9F98
- movs r5, 0x88
- lsls r5, 8
- adds r0, r5, 0
- bl sub_80F9D04
- ldr r4, _080F9F78 @ =Rfu
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- bne _080F9F7C
- adds r1, r4, 0
- adds r1, 0x5B
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bls _080F9F98
- b _080F9F94
- .align 2, 0
-_080F9F74: .4byte gSendCmd
-_080F9F78: .4byte Rfu
-_080F9F7C:
- bl GetMultiplayerId
- ldr r1, _080F9FA0 @ =gRecvCmds
- lsls r0, 24
- lsrs r0, 20
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- cmp r0, r5
- bne _080F9F98
-_080F9F94:
- ldr r0, _080F9FA4 @ =sub_80F9FA8
- str r0, [r4]
-_080F9F98:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F9FA0: .4byte gRecvCmds
-_080F9FA4: .4byte sub_80F9FA8
- thumb_func_end rfufunc_80F9F44
-
- thumb_func_start sub_80F9FA8
-sub_80F9FA8: @ 80F9FA8
- push {r4-r6,lr}
- ldr r0, _080FA014 @ =Rfu
- mov r12, r0
- ldr r5, [r0, 0x70]
- ldr r3, _080FA018 @ =gSendCmd
- mov r2, r12
- adds r2, 0x6C
- ldrh r1, [r2]
- movs r4, 0x89
- lsls r4, 8
- adds r0, r4, 0
- orrs r0, r1
- strh r0, [r3]
- movs r4, 0
- adds r6, r2, 0
- adds r3, 0x2
-_080F9FC8:
- lsls r2, r4, 1
- ldrh r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- strh r0, [r3]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _080F9FC8
- mov r0, r12
- adds r0, 0x6C
- ldrh r1, [r0]
- adds r1, 0x1
- strh r1, [r0]
- adds r0, 0x2
- ldrh r0, [r0]
- lsls r1, 16
- lsrs r1, 16
- cmp r0, r1
- bhi _080FA00C
- mov r0, r12
- adds r0, 0x7C
- movs r1, 0
- strb r1, [r0]
- ldr r0, _080FA01C @ =rfufunc_80FA020
- mov r1, r12
- str r0, [r1]
-_080FA00C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA014: .4byte Rfu
-_080FA018: .4byte gSendCmd
-_080FA01C: .4byte rfufunc_80FA020
- thumb_func_end sub_80F9FA8
-
- thumb_func_start rfufunc_80FA020
-rfufunc_80FA020: @ 80FA020
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r5, _080FA0C8 @ =Rfu
- ldr r0, [r5, 0x70]
- mov r8, r0
- bl GetMultiplayerId
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r5, 0xC]
- cmp r0, 0
- bne _080FA0E8
- ldr r3, _080FA0CC @ =gSendCmd
- adds r2, r5, 0
- adds r2, 0x6E
- ldrh r0, [r2]
- subs r0, 0x1
- ldr r4, _080FA0D0 @ =0xffff8900
- adds r1, r4, 0
- orrs r0, r1
- strh r0, [r3]
- movs r4, 0
- mov r9, r5
- ldr r0, _080FA0D4 @ =gRecvCmds
- mov r12, r0
- lsls r5, r6, 4
- adds r7, r2, 0
- adds r3, 0x2
-_080FA05C:
- lsls r2, r4, 1
- ldrh r1, [r7]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- add r0, r8
- adds r1, r0, 0
- subs r1, 0xB
- ldrb r1, [r1]
- lsls r1, 8
- subs r0, 0xC
- ldrb r0, [r0]
- orrs r0, r1
- strh r0, [r3]
- adds r3, 0x2
- adds r4, 0x1
- cmp r4, 0x6
- ble _080FA05C
- mov r1, r12
- adds r0, r5, r1
- ldrb r1, [r0]
- mov r3, r9
- adds r0, r3, 0
- adds r0, 0x6E
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r1, r0
- bne _080FA0EC
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 2
- adds r1, r3, 0
- adds r1, 0x88
- adds r1, r0, r1
- ldr r2, _080FA0D8 @ =gUnknown_843EBD4
- adds r0, r3
- adds r0, 0x82
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- beq _080FA0E0
- adds r0, r6, 0
- bl sub_80F965C
- ldr r1, _080FA0DC @ =gUnknown_203AC08
- adds r1, 0x64
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _080FA0EC
- .align 2, 0
-_080FA0C8: .4byte Rfu
-_080FA0CC: .4byte gSendCmd
-_080FA0D0: .4byte 0xffff8900
-_080FA0D4: .4byte gRecvCmds
-_080FA0D8: .4byte gUnknown_843EBD4
-_080FA0DC: .4byte gUnknown_203AC08
-_080FA0E0:
- movs r0, 0
- mov r4, r9
- str r0, [r4]
- b _080FA0EC
-_080FA0E8:
- movs r0, 0
- str r0, [r5]
-_080FA0EC:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end rfufunc_80FA020
-
thumb_func_start sub_80FA0F8
sub_80FA0F8: @ 80FA0F8
push {lr}
diff --git a/data/link_rfu_2.s b/data/link_rfu_2.s
index 640b04b79..4877a20e2 100644
--- a/data/link_rfu_2.s
+++ b/data/link_rfu_2.s
@@ -7,18 +7,6 @@
.align 2
.align 2
-gUnknown_843ED94:: @ 843ED94
- abspath "rfu.c"
-
- .align 2
-gUnknown_843EDC4:: @ 843EDC4
- .asciz "Rfu.RfuFunc == NULL"
-
- .align 2
-gUnknown_843EDD8:: @ 843EDD8
- .asciz "size<=252"
-
- .align 2
gUnknown_843EDE4:: @ 843EDE4
.asciz "PokemonSioInfo"
diff --git a/include/link.h b/include/link.h
index d61152d8a..bb3ffbb2f 100644
--- a/include/link.h
+++ b/include/link.h
@@ -188,6 +188,7 @@ extern bool8 gLinkVSyncDisabled;
extern u8 gWirelessCommType;
extern u8 gShouldAdvanceLinkState;
+extern u16 gLinkPartnersHeldKeys[6];
void Task_DestroySelf(u8);
void OpenLink(void);
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 7f695ebe2..cb315f31d 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -97,6 +97,14 @@ struct UnkRfuStruct_2_Sub_9e8
/* 0x233 */ vu8 unk_233;
};
+struct UnkRfuStruct_2_Sub_c1c
+{
+ /* 0x00 */ u8 unk_00[2][14];
+ /* 0x1c */ vu8 unk_1c;
+ /* 0x1d */ vu8 unk_1d;
+ /* 0x1e */ vu8 unk_1e;
+};
+
extern struct UnkRfuStruct_1 gUnknown_3005E10;
void AddTextPrinterToWindow1(const u8 *str);
@@ -120,7 +128,7 @@ void Rfu_set_zero(void);
u8 GetRfuPlayerCount(void);
void sub_80F9828(void);
u8 rfu_get_multiplayer_id(void);
-bool8 Rfu_InitBlockSend(const void * src, u16 size);
+bool32 Rfu_InitBlockSend(const u8 * src, size_t size);
bool8 sub_80FA0F8(u8 a0);
u8 Rfu_GetBlockReceivedStatus(void);
void Rfu_SetBlockReceivedFlag(u8 who);
@@ -139,6 +147,7 @@ struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void);
void sub_80FCF34(void);
void InitRFU(void);
void sub_80FEB14(void);
+bool32 sub_80FBA00(void);
void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr);
void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr);
@@ -153,6 +162,11 @@ void LinkRfu_REQ_SendData_HandleParentRelationship(bool8 clockChangeFlag);
void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
void sub_80FD52C(void);
u8 sub_80FD610(u16 parentId, u16 unk_1a);
+bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
+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);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/overworld.h b/include/overworld.h
index 69c1e964f..c24b63cf9 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -4,6 +4,29 @@
#include "global.h"
#include "main.h"
+#define LINK_KEY_CODE_NULL 0x00
+#define LINK_KEY_CODE_EMPTY 0x11
+#define LINK_KEY_CODE_DPAD_DOWN 0x12
+#define LINK_KEY_CODE_DPAD_UP 0x13
+#define LINK_KEY_CODE_DPAD_LEFT 0x14
+#define LINK_KEY_CODE_DPAD_RIGHT 0x15
+#define LINK_KEY_CODE_UNK_2 0x16
+#define LINK_KEY_CODE_EXIT_ROOM 0x17
+#define LINK_KEY_CODE_START_BUTTON 0x18
+#define LINK_KEY_CODE_A_BUTTON 0x19
+#define LINK_KEY_CODE_UNK_4 0x1A // I'd guess this is the B button?
+
+// These two are a hack to stop user input until link stuff can be
+// resolved.
+#define LINK_KEY_CODE_HANDLE_RECV_QUEUE 0x1B
+#define LINK_KEY_CODE_HANDLE_SEND_QUEUE 0x1C
+#define LINK_KEY_CODE_UNK_7 0x1D
+#define LINK_KEY_CODE_UNK_8 0x1E
+
+#define MOVEMENT_MODE_FREE 0
+#define MOVEMENT_MODE_FROZEN 1
+#define MOVEMENT_MODE_SCRIPTED 2
+
struct UnkPlayerStruct
{
u8 player_field_0;
@@ -153,4 +176,6 @@ void sub_805546C(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
+extern u16 gHeldKeyCodeToSend;
+
#endif //GUARD_OVERWORLD_H
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 80873ec60..5d8c26983 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -2,6 +2,7 @@
#include "librfu.h"
#include "link.h"
#include "link_rfu.h"
+#include "overworld.h"
#include "quest_log.h"
#include "task.h"
@@ -17,15 +18,7 @@ struct UnkRfuStruct_2_Sub_6c
/* 0x12 */ u8 unk_12;
};
-struct UnkRfuStruct_2_Sub_c1c
-{
- /* 0x00 */ u8 unk_00[2][14];
- /* 0x1c */ vu8 unk_1c;
- /* 0x1d */ vu8 unk_1d;
- /* 0x1e */ vu8 unk_1e;
-};
-
-struct
+struct UnkRfuStruct_2
{
/* 0x000 */ void (*RfuFunc)(void);
/* 0x004 */ u16 unk_04;
@@ -112,13 +105,23 @@ 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 = {
@@ -636,3 +639,693 @@ void sub_80F8F5C(void)
Rfu.unk_04 = 4;
Rfu.unk_ce7 = gUnknown_3005E10.unk_00;
}
+
+bool32 sub_80F8F7C(bool32 a0)
+{
+ if (Rfu.unk_04 == 17 || a0)
+ {
+ Rfu.unk_04 = 18;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_80F8FA0(void)
+{
+ Rfu.unk_04 = 14;
+}
+
+void sub_80F8FAC(u8 a0)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (a0 & 1)
+ {
+ rfu_UNI_readySendData(i);
+ break;
+ }
+ a0 >>= 1;
+ }
+}
+
+void sub_80F8FD4(void)
+{
+ s32 i, j;
+
+ for (i = 0; i < 5; i++)
+ {
+ struct UnkRfuStruct_2 *ptr = &Rfu;
+ for (j = 0; j < 7; j++)
+ {
+ ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8;
+ ptr->unk_c87[i][j][0] = gRecvCmds[i][j];
+ }
+ }
+ CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
+}
+
+void sub_80F9038(void)
+{
+ s32 i;
+ for (i = 0; i < 7; i++)
+ {
+ gRecvCmds[0][i] = gSendCmd[i];
+ }
+ for (i = 0; i < 7; i++)
+ {
+ gSendCmd[i] = 0;
+ }
+}
+
+void sub_80F906C(void)
+{
+ if (Rfu.unk_c3c)
+ {
+ u8 r2 = sub_80FC888(&Rfu.unk_c1c, Rfu.unk_4c);
+ if (Rfu.unk_c1c.unk_1e == 0)
+ {
+ Rfu.unk_c3c = 0;
+ }
+ if (r2)
+ {
+ return;
+ }
+ }
+ if (Rfu.unk_c3c == 0)
+ {
+ sub_80FC79C(&Rfu.unk_9e8, Rfu.unk_4c);
+ sub_80FC828(&Rfu.unk_c1c, Rfu.unk_4c);
+ }
+}
+
+bool32 IsRfuRecvQueueEmpty(void)
+{
+ s32 i;
+ s32 j;
+
+ if (gRfuLinkStatus->sendSlotUNIFlag == 0)
+ {
+ return FALSE;
+ }
+ for (i = 0; i < 5; i++)
+ {
+ for (j = 0; j < 7; j++)
+ {
+ if (gRecvCmds[i][j] != 0)
+ {
+ return FALSE;
+ }
+ }
+ }
+ return TRUE;
+}
+
+bool32 sub_80F911C(void)
+{
+ if (Rfu.unk_04 < 20)
+ {
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ LinkRfu_REQ_SendData_HandleParentRelationship(FALSE);
+ }
+ else
+ {
+ Rfu.unk_cdb = 0;
+ if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag))
+ {
+ if (!Rfu.unk_cdc)
+ {
+ if (Rfu.unk_ce3)
+ {
+ sub_80FBCF8(Rfu.unk_ce3);
+ Rfu.unk_ce3 = 0;
+ if (Rfu.unk_ce4 == 1)
+ {
+ sub_80FB9E4(2, 0x8000);
+ sub_80FB0E8(0x8000);
+ return FALSE;
+ }
+ if (!gUnknown_3005E10.unk_00)
+ {
+ sub_80F8DC0();
+ gReceivedRemoteLinkPlayers = 0;
+ return FALSE;
+ }
+ }
+ sub_80F8FD4();
+ rfu_UNI_readySendData(Rfu.unk_cda);
+ LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
+ }
+ else
+ {
+ rfu_REQ_PARENT_resumeRetransmitAndChange();
+ }
+ Rfu.unk_0e = 1;
+ }
+ }
+ return FALSE;
+}
+
+bool32 sub_80F9204(void)
+{
+ u16 i;
+ u16 flags;
+ u8 r0;
+ u16 j;
+ u8 retval;
+
+ if (Rfu.unk_04 >= 20 && Rfu.unk_0e == 1)
+ {
+ rfu_waitREQComplete();
+ while (Rfu.unk_cdb == 0)
+ {
+ if (Rfu.unk_ee != 0)
+ {
+ return FALSE;
+ }
+ }
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ if ((gUnknown_3005E10.unk_03 & Rfu.unk_ce2) == Rfu.unk_ce2)
+ {
+ Rfu.unk_cdc = 0;
+ gUnknown_203AC08.unk_06++;
+ flags = gUnknown_3005E10.unk_00;
+ for (i = 0; i < 4; i++)
+ {
+ if (flags & 1)
+ {
+ if (Rfu.unk_14[i][1])
+ {
+ if (Rfu.unk_cee[i] != 0xFF && (Rfu.unk_14[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7))
+ {
+ if (++Rfu.unk_cea[i] > 4)
+ sub_80FB0E8(0x8100);
+ }
+ else
+ {
+ Rfu.unk_cee[i] = Rfu.unk_14[i][0] / 32;
+ Rfu.unk_cea[i] = 0;
+ Rfu.unk_14[i][0] &= 0x1f;
+ r0 = Rfu.unk_cde[i];
+ for (j = 0; j < 7; j++)
+ {
+ gRecvCmds[r0][j] = (Rfu.unk_14[i][(j << 1) + 1] << 8) | Rfu.unk_14[i][(j << 1) + 0];
+ Rfu.unk_14[i][(j << 1) + 1] = 0;
+ Rfu.unk_14[i][(j << 1) + 0] = 0;
+ }
+ }
+ }
+ rfu_UNI_clearRecvNewDataFlag(i);
+ }
+ flags >>= 1;
+ }
+ sub_80F9038();
+ sub_80F9868(0);
+ sub_80FA510();
+ if (Rfu.unk_ce5 && !Rfu.unk_cd9)
+ {
+ gUnknown_203AC08.unk_0e = 0;
+ rfu_clearSlot(3, Rfu.unk_cda);
+ for (i = 0; i < 4; i++)
+ {
+ if ((Rfu.unk_ce5 >> i) & 1)
+ {
+ rfu_setRecvBuffer(0x10, i, Rfu.unk_14[i], 14);
+ }
+ }
+ sub_80F887C(Rfu.unk_ce2, Rfu.unk_ce2 | Rfu.unk_ce5);
+ Rfu.unk_ce9 = Rfu.unk_ce5;
+ Rfu.unk_ce2 |= Rfu.unk_ce5;
+ Rfu.unk_ce5 = 0;
+ rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70);
+ Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2);
+ CreateTask(sub_80FAA94, 0);
+ }
+ }
+ else
+ {
+ Rfu.unk_cdc = 1;
+ Rfu.unk_0e = 0;
+ }
+ Rfu.unk_0e = 0;
+ }
+ retval = Rfu.unk_cdc;
+ return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE;
+}
+
+void sub_80F94BC(u16 *a0, u8 *a1)
+{
+ s32 i;
+
+ if (a0[0])
+ {
+ a0[0] |= (Rfu.unk_102 << 5);
+ Rfu.unk_102 = (Rfu.unk_102 + 1) & 7;
+ for (i = 0; i < 7; i++)
+ {
+ a1[2 * i + 1] = a0[i] >> 8;
+ a1[2 * i + 0] = a0[i];
+ }
+ }
+ else
+ {
+ for (i = 0; i < 14; i++)
+ a1[i] = 0;
+ }
+}
+
+bool32 sub_80F9514(void)
+{
+ u8 i;
+ u8 j;
+ u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))];
+ u8 sp48[2 * (CMD_LENGTH - 1)];
+ u8 switchval;
+
+ sub_80FC6E8(&Rfu.unk_124, sp00);
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ for (j = 0; j < CMD_LENGTH - 1; j++)
+ {
+ gRecvCmds[i][j] = (sp00[i * 14 + (j << 1) + 1] << 8) | sp00[i * 14 + (j << 1) + 0];
+ }
+ }
+ sub_80F9868(0);
+ if (gUnknown_3005E10.unk_02 == 0 && Rfu.unk_ce4)
+ {
+ rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
+ rfu_waitREQComplete();
+ switchval = sub_80FB9F4();
+ if (switchval != 1 && switchval != 6 && switchval != 9)
+ sub_80FB9E4(2, 0x9000);
+ rfu_clearAllSlot();
+ gReceivedRemoteLinkPlayers = FALSE;
+ Rfu.RfuFunc = NULL;
+ if (Rfu.unk_ce4 == 1)
+ {
+ sub_80FB9E4(2, 0x9000);
+ sub_80FB0E8(0x9000);
+ }
+ gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0;
+ Rfu.unk_ce4 = 0;
+ }
+ if (Rfu.unk_cd0)
+ {
+ Rfu.unk_cd0--;
+ sub_80FA510();
+ sub_80F94BC(gSendCmd, sp48);
+ sub_80FC63C(&Rfu.unk_9e8, sp48);
+ for (i = 0; i < CMD_LENGTH - 1; i++)
+ gSendCmd[i] = 0;
+ }
+ return IsRfuRecvQueueEmpty();
+}
+
+void sub_80F965C(u8 unused, u32 flags)
+{
+ s32 i, j;
+
+ const u8 *r10 = Rfu.unk_6c.unk_04;
+ for (i = 0; i < Rfu.unk_6c.unk_02; i++)
+ {
+ if (!(flags & 1))
+ {
+ gUnknown_3002008[0] = (~0x76ff) | i;
+ for (j = 0; j < 7; j++)
+ {
+ gUnknown_3002008[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0];
+ }
+ for (j = 0; j < 7; j++)
+ {
+ gUnknown_3001FF8[2 * j + 1] = gUnknown_3002008[j] >> 8;
+ gUnknown_3001FF8[2 * j + 0] = gUnknown_3002008[j];
+
+ j++;j--; // Needed to match;
+ }
+ sub_80FC63C(&Rfu.unk_9e8, gUnknown_3001FF8);
+ Rfu.unk_6c.unk_0c |= (1 << i);
+ }
+ flags >>= 1;
+ }
+}
+
+void Rfu_SetBlockReceivedFlag(u8 a0)
+{
+ if (Rfu.unk_0c == 1 && a0)
+ Rfu.unk_61[a0] = 1;
+ else
+ Rfu.unk_5c[a0] = 1;
+}
+
+void Rfu_ResetBlockReceivedFlag(u8 a0)
+{
+ Rfu.unk_5c[a0] = 0;
+ Rfu.unk_80[a0].unk_12 = 0;
+}
+
+u8 sub_80F9770(const u8 *a0)
+{
+ u8 i;
+
+ if (Rfu.unk_0c == 1)
+ return FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ Rfu.unk_cde[i] = a0[i];
+ }
+ return a0[Rfu.unk_c3e];
+}
+
+void rfu_func_080F97B8(void)
+{
+ // static u8 gUnknown_3001188;
+ if (gReceivedRemoteLinkPlayers
+ && gHeldKeyCodeToSend != LINK_KEY_CODE_NULL
+ && gLinkTransferringData != TRUE)
+ {
+ gUnknown_3001188++;
+ gHeldKeyCodeToSend |= (gUnknown_3001188 << 8);
+ sub_80F9D04(0xbe00);
+ }
+}
+
+struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void)
+{
+ return &gUnknown_3005440;
+}
+
+bool32 IsSendingKeysToRfu(void)
+{
+ return Rfu.RfuFunc == rfu_func_080F97B8;
+}
+
+void sub_80F9828(void)
+{
+ AGB_ASSERT_EX(Rfu.RfuFunc == NULL, ABSPATH("rfu.c"), 1473);
+ Rfu.RfuFunc = rfu_func_080F97B8;
+}
+
+void Rfu_set_zero(void)
+{
+ Rfu.RfuFunc = NULL;
+}
+
+void sub_80F9868(u8 unused)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ switch (gRecvCmds[i][0] & 0xff00)
+ {
+ case 0x7800:
+ if (Rfu.unk_0c == 0 && gReceivedRemoteLinkPlayers != 0)
+ return;
+ // fallthrough
+ case 0x7700:
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
+ {
+ Rfu.playerCount = gRecvCmds[i][1];
+ Rfu.unk_cce = sub_80F9770((u8 *)(gRecvCmds[i] + 2));
+ }
+ break;
+ case 0x8800:
+ if (Rfu.unk_80[i].unk_12 == 0)
+ {
+ Rfu.unk_80[i].unk_00 = 0;
+ Rfu.unk_80[i].unk_02 = gRecvCmds[i][1];
+ Rfu.unk_80[i].unk_11 = gRecvCmds[i][2];
+ Rfu.unk_80[i].unk_08 = 0;
+ Rfu.unk_80[i].unk_12 = 1;
+ Rfu.unk_5c[i] = 0;
+ }
+ break;
+ case 0x8900:
+ if (Rfu.unk_80[i].unk_12 == 1)
+ {
+ Rfu.unk_80[i].unk_00 = gRecvCmds[i][0] & 0xff;
+ Rfu.unk_80[i].unk_08 |= (1 << Rfu.unk_80[i].unk_00);
+ for (j = 0; j < 6; j++)
+ gBlockRecvBuffer[i][Rfu.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1];
+ if (Rfu.unk_80[i].unk_08 == gUnknown_843EBD4[Rfu.unk_80[i].unk_02])
+ {
+ Rfu.unk_80[i].unk_12 = 2;
+ Rfu_SetBlockReceivedFlag(i);
+ if (sub_80F9800()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0)
+ sub_80FAA58(gBlockRecvBuffer);
+ }
+ }
+ break;
+ case 0xa100:
+ Rfu_InitBlockSend(gUnknown_843EC64[gRecvCmds[i][1]].buffer, (u16)gUnknown_843EC64[gRecvCmds[i][1]].size);
+ break;
+ case 0x5f00:
+ Rfu.unk_e4[i] = 1;
+ break;
+ case 0x6600:
+ if (Rfu.unk_100 == gRecvCmds[i][1])
+ Rfu.unk_e9[i] = 1;
+ break;
+ case 0xed00:
+ if (Rfu.unk_0c == 0)
+ {
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag)
+ {
+ gReceivedRemoteLinkPlayers = 0;
+ sub_80FEB14();
+ Rfu.unk_ce4 = gRecvCmds[i][2];
+ }
+ Rfu.playerCount = gRecvCmds[i][3];
+ sub_80FA9D0(gRecvCmds[i][1]);
+ }
+ }
+ else
+ {
+ sub_80F9D04(0xee00);
+ gSendCmd[1] = gRecvCmds[i][1];
+ gSendCmd[2] = gRecvCmds[i][2];
+ gSendCmd[3] = gRecvCmds[i][3];
+ }
+ break;
+ case 0xee00:
+ if (Rfu.unk_0c == 1)
+ {
+ Rfu.unk_ce3 |= gRecvCmds[i][1];
+ Rfu.unk_ce4 = gRecvCmds[i][2];
+ sub_80FA9D0(gRecvCmds[i][1]);
+ }
+ break;
+ case 0xbe00:
+ gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
+ break;
+ }
+ if (Rfu.unk_0c == 1 && Rfu.unk_61[i])
+ {
+ if (Rfu.unk_61[i] == 4)
+ {
+ Rfu.unk_5c[i] = 1;
+ Rfu.unk_61[i] = 0;
+ }
+ else
+ Rfu.unk_61[i]++;
+ }
+ }
+}
+
+bool8 sub_80F9C50(void)
+{
+ s32 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (Rfu.unk_80[i].unk_12)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool8 sub_80F9C78(void)
+{
+ s32 i;
+
+ for (i = 0; i < Rfu.playerCount; i++)
+ {
+ if (Rfu.unk_80[i].unk_12 != 2 || Rfu.unk_5c[i] != 1)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data)
+{
+ data->unk_00 = 0;
+ data->unk_02 = 0;
+ data->unk_04 = NULL;
+ data->unk_08 = 0;
+ data->unk_10 = 0;
+ data->unk_11 = 0;
+ data->unk_12 = 0;
+}
+
+u8 Rfu_GetBlockReceivedStatus(void)
+{
+ u8 flags = 0;
+ s32 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (Rfu.unk_80[i].unk_12 == 2 && Rfu.unk_5c[i] == 1)
+ {
+ flags |= (1 << i);
+ }
+ }
+ return flags;
+}
+
+void sub_80F9D04(u16 command)
+{
+ u8 i;
+ u8 *buff;
+ u8 tmp;
+
+ gSendCmd[0] = command;
+ switch (command)
+ {
+ case 0x8800:
+ gSendCmd[1] = Rfu.unk_6c.unk_02;
+ gSendCmd[2] = Rfu.unk_6c.unk_11 + 0x80;
+ break;
+ case 0xa100:
+ if (sub_80F9C50())
+ gSendCmd[1] = Rfu.unk_5a;
+ break;
+ case 0x7700:
+ case 0x7800:
+ tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3;
+ Rfu.playerCount = gUnknown_843EC41[tmp] + 1;
+ gSendCmd[1] = Rfu.playerCount;
+ buff = (u8 *)(gSendCmd + 2);
+ for (i = 0; i < 4; i++)
+ buff[i] = Rfu.unk_cde[i];
+ break;
+ case 0x6600:
+ case 0x5f00:
+ gSendCmd[1] = Rfu.unk_100;
+ break;
+ case 0x2f00:
+ for (i = 0; i < 6; i++)
+ gSendCmd[1 + i] = Rfu.unk_f2[i];
+ break;
+ case 0xbe00:
+ gSendCmd[1] = gHeldKeyCodeToSend;
+ break;
+ case 0xee00:
+ break;
+ case 0xed00:
+ break;
+ }
+}
+
+void sub_80F9E2C(void *a0)
+{
+ if (gSendCmd[0] == 0 && !sub_80FBA00())
+ {
+ memcpy(Rfu.unk_f2, a0, sizeof(Rfu.unk_f2));
+ sub_80F9D04(0x2f00);
+ }
+}
+
+bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
+{
+ bool8 r4;
+ AGB_ASSERT_EX(size<=252, ABSPATH("rfu.c"), 1793);
+ if (Rfu.RfuFunc != NULL)
+ return FALSE;
+ if (gSendCmd[0] != 0)
+ return FALSE;
+ if (Rfu.unk_6c.unk_10 != 0)
+ {
+ gUnknown_203AC08.unk_83++;
+ return FALSE;
+ }
+ r4 = (size % 12) != 0;
+ Rfu.unk_6c.unk_11 = GetMultiplayerId();
+ Rfu.unk_6c.unk_10 = 1;
+ Rfu.unk_6c.unk_02 = (size / 12) + r4;
+ Rfu.unk_6c.unk_00 = 0;
+ if (size > 0x100)
+ Rfu.unk_6c.unk_04 = src;
+ else
+ {
+ if (src != gBlockSendBuffer)
+ memcpy(gBlockSendBuffer, src, size);
+ Rfu.unk_6c.unk_04 = gBlockSendBuffer;
+ }
+ sub_80F9D04(0x8800);
+ Rfu.RfuFunc = rfufunc_80F9F44;
+ Rfu.unk_5b = 0;
+ return TRUE;
+}
+
+void rfufunc_80F9F44(void)
+{
+ if (gSendCmd[0] == 0)
+ {
+ sub_80F9D04(0x8800);
+ if (Rfu.unk_0c == 1)
+ {
+ if (++Rfu.unk_5b > 2)
+ Rfu.RfuFunc = sub_80F9FA8;
+ }
+ else
+ {
+ if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800)
+ Rfu.RfuFunc = sub_80F9FA8;
+ }
+ }
+}
+void sub_80F9FA8(void)
+{
+ s32 i;
+ const u8 *src = Rfu.unk_6c.unk_04;
+ gSendCmd[0] = 0x8900 | Rfu.unk_6c.unk_00;
+ for (i = 0; i < 7; i++)
+ gSendCmd[i + 1] = (src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 0];
+ Rfu.unk_6c.unk_00++;
+ if (Rfu.unk_6c.unk_02 <= Rfu.unk_6c.unk_00)
+ {
+ Rfu.unk_6c.unk_10 = 0;
+ Rfu.RfuFunc = rfufunc_80FA020;
+ }
+}
+
+void rfufunc_80FA020(void)
+{
+ const u8 *src = Rfu.unk_6c.unk_04;
+ u8 mpId = GetMultiplayerId();
+ s32 i;
+ if (Rfu.unk_0c == 0)
+ {
+ gSendCmd[0] = (~0x76ff) | (Rfu.unk_6c.unk_02 - 1);
+ for (i = 0; i < 7; i++)
+ gSendCmd[i + 1] = (src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 0];
+ if ((u8)gRecvCmds[mpId][0] == Rfu.unk_6c.unk_02 - 1)
+ {
+ if (Rfu.unk_80[mpId].unk_08 != gUnknown_843EBD4[Rfu.unk_80[mpId].unk_02])
+ {
+ sub_80F965C(mpId, Rfu.unk_80[mpId].unk_08);
+ gUnknown_203AC08.unk_64++;
+ }
+ else
+ Rfu.RfuFunc = NULL;
+ }
+ }
+ else
+ Rfu.RfuFunc = NULL;
+}