summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/link_rfu_2.s1158
-rw-r--r--data/link_rfu_2.s87
-rw-r--r--include/link_rfu.h48
-rw-r--r--ld_script.txt2
-rw-r--r--src/link_rfu_2.c638
-rw-r--r--sym_bss.txt15
6 files changed, 691 insertions, 1257 deletions
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s
index 716faa934..a5426166d 100644
--- a/asm/link_rfu_2.s
+++ b/asm/link_rfu_2.s
@@ -5,1164 +5,6 @@
.text
- thumb_func_start nullsub_87
-nullsub_87: @ 80F85F0
- bx lr
- thumb_func_end nullsub_87
-
- thumb_func_start nullsub_88
-nullsub_88: @ 80F85F4
- bx lr
- thumb_func_end nullsub_88
-
- thumb_func_start sub_80F85F8
-sub_80F85F8: @ 80F85F8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- ldr r6, _080F869C @ =Rfu
- adds r5, r6, 0
- adds r5, 0xEE
- ldrb r4, [r5]
- mov r0, sp
- movs r7, 0
- strh r7, [r0]
- ldr r2, _080F86A0 @ =0x010004d6
- adds r1, r6, 0
- bl CpuSet
- movs r0, 0xFF
- strb r0, [r6, 0xC]
- ldrb r0, [r5]
- strb r4, [r5]
- ldrb r0, [r5]
- cmp r0, 0x4
- beq _080F862A
- ldrb r0, [r5]
- strb r7, [r5]
-_080F862A:
- mov r7, sp
- adds r7, 0x2
- add r0, sp, 0x4
- mov r8, r0
- movs r0, 0x6
- add r0, sp
- mov r9, r0
- adds r5, r6, 0
- adds r5, 0x80
- movs r4, 0x4
-_080F863E:
- adds r0, r5, 0
- bl sub_80F9CB4
- adds r5, 0x14
- subs r4, 0x1
- cmp r4, 0
- bge _080F863E
- movs r5, 0
- ldr r4, _080F86A4 @ =Rfu+0x6c
- adds r0, r4, 0
- bl sub_80F9CB4
- adds r0, r4, 0
- adds r0, 0xB8
- bl sub_80FC478
- ldr r0, _080F86A8 @ =0x00000634
- adds r4, r0
- adds r0, r4, 0
- bl sub_80FC4D4
- strh r5, [r7]
- ldr r1, _080F86AC @ =gSendCmd
- ldr r2, _080F86B0 @ =0x01000008
- adds r0, r7, 0
- bl CpuSet
- mov r0, r8
- strh r5, [r0]
- ldr r1, _080F86B4 @ =gRecvCmds
- ldr r2, _080F86B8 @ =0x01000028
- bl CpuSet
- mov r0, r9
- strh r5, [r0]
- ldr r1, _080F86BC @ =gLinkPlayers
- ldr r2, _080F86C0 @ =0x01000046
- bl CpuSet
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F869C: .4byte Rfu
-_080F86A0: .4byte 0x010004d6
-_080F86A4: .4byte Rfu+0x6c
-_080F86A8: .4byte 0x00000634
-_080F86AC: .4byte gSendCmd
-_080F86B0: .4byte 0x01000008
-_080F86B4: .4byte gRecvCmds
-_080F86B8: .4byte 0x01000028
-_080F86BC: .4byte gLinkPlayers
-_080F86C0: .4byte 0x01000046
- thumb_func_end sub_80F85F8
-
- thumb_func_start InitRFU
-InitRFU: @ 80F86C4
- push {r4-r6,lr}
- ldr r4, _080F86EC @ =gIntrTable
- ldr r5, [r4, 0x4]
- ldr r6, [r4, 0x8]
- bl sub_80F86F4
- bl rfu_REQ_stopMode
- bl rfu_waitREQComplete
- ldr r1, _080F86F0 @ =0x04000208
- movs r0, 0
- strh r0, [r1]
- str r5, [r4, 0x4]
- str r6, [r4, 0x8]
- movs r0, 0x1
- strh r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F86EC: .4byte gIntrTable
-_080F86F0: .4byte 0x04000208
- thumb_func_end InitRFU
-
- thumb_func_start sub_80F86F4
-sub_80F86F4: @ 80F86F4
- push {r4,lr}
- ldr r0, _080F8728 @ =gRfuAPIBuffer
- ldr r1, _080F872C @ =0x00000e64
- ldr r4, _080F8730 @ =gIntrTable + 0x4
- adds r2, r4, 0
- movs r3, 0x1
- bl rfu_initializeAPI
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _080F8722
- ldr r0, _080F8734 @ =gLinkType
- strh r1, [r0]
- movs r0, 0
- bl sub_80FB128
- bl sub_80F85F8
- adds r1, r4, 0x4
- movs r0, 0x3
- bl rfu_setTimerInterrupt
-_080F8722:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8728: .4byte gRfuAPIBuffer
-_080F872C: .4byte 0x00000e64
-_080F8730: .4byte gIntrTable + 0x4
-_080F8734: .4byte gLinkType
- thumb_func_end sub_80F86F4
-
- thumb_func_start sub_80F8738
-sub_80F8738: @ 80F8738
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_80FA738
- ldr r0, _080F8758 @ =Rfu
- ldrh r0, [r0, 0x4]
- cmp r0, 0x12
- bls _080F874C
- b _080F8852
-_080F874C:
- lsls r0, 2
- ldr r1, _080F875C @ =_080F8760
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F8758: .4byte Rfu
-_080F875C: .4byte _080F8760
- .align 2, 0
-_080F8760:
- .4byte _080F87AC
- .4byte _080F8852
- .4byte _080F87D4
- .4byte _080F8852
- .4byte _080F8804
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8852
- .4byte _080F8818
-_080F87AC:
- ldr r0, _080F87C8 @ =gUnknown_203ABF0
- bl sub_80FD4B0
- ldr r0, _080F87CC @ =Rfu
- movs r2, 0x1
- strh r2, [r0, 0x4]
- ldr r1, _080F87D0 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _080F8852
- .align 2, 0
-_080F87C8: .4byte gUnknown_203ABF0
-_080F87CC: .4byte Rfu
-_080F87D0: .4byte gTasks
-_080F87D4:
- ldr r4, _080F87F8 @ =Rfu
- ldrb r0, [r4, 0xC]
- ldr r3, _080F87FC @ =gUnknown_843EC8C
- movs r1, 0
- movs r2, 0xF0
- bl sub_80FD538
- movs r0, 0x3
- strh r0, [r4, 0x4]
- ldr r1, _080F8800 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x6
- strh r1, [r0, 0xA]
- b _080F8852
- .align 2, 0
-_080F87F8: .4byte Rfu
-_080F87FC: .4byte gUnknown_843EC8C
-_080F8800: .4byte gTasks
-_080F8804:
- movs r0, 0
- bl sub_80FD760
- ldr r1, _080F8814 @ =Rfu
- movs r0, 0x5
- strh r0, [r1, 0x4]
- b _080F8852
- .align 2, 0
-_080F8814: .4byte Rfu
-_080F8818:
- ldr r4, _080F8858 @ =Rfu
- ldr r0, _080F885C @ =0x00000993
- adds r1, r4, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080F8860 @ =sub_80F8DA8
- bl sub_80FEA10
- bl sub_80F8AA4
- bl sub_80F8AEC
- movs r0, 0x14
- strh r0, [r4, 0x4]
- ldr r1, _080F8864 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- ldr r0, _080F8868 @ =sub_80FA834
- movs r1, 0x5
- bl CreateTask
- adds r0, r5, 0
- bl DestroyTask
-_080F8852:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8858: .4byte Rfu
-_080F885C: .4byte 0x00000993
-_080F8860: .4byte sub_80F8DA8
-_080F8864: .4byte gTasks
-_080F8868: .4byte sub_80FA834
- thumb_func_end sub_80F8738
-
- thumb_func_start sub_80F886C
-sub_80F886C: @ 80F886C
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080F8878 @ =gUnknown_843EC51
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080F8878: .4byte gUnknown_843EC51
- thumb_func_end sub_80F886C
-
- thumb_func_start sub_80F887C
-sub_80F887C: @ 80F887C
- push {r4-r7,lr}
- adds r2, r0, 0
- adds r5, r1, 0
- movs r4, 0x1
- adds r1, r2, 0
- movs r6, 0
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- bne _080F88BC
- movs r3, 0
- movs r5, 0x1
- ldr r1, _080F88B8 @ =Rfu+0x996
-_080F8896:
- adds r0, r2, 0
- ands r0, r5
- cmp r0, 0
- beq _080F88A8
- adds r0, r3, r1
- strb r4, [r0]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
-_080F88A8:
- asrs r2, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _080F8896
- b _080F8932
- .align 2, 0
-_080F88B8: .4byte Rfu+0x996
-_080F88BC:
- movs r3, 0
- mvns r0, r1
- mov r12, r0
- movs r7, 0x1
- ldr r4, _080F8938 @ =Rfu+0x996
-_080F88C6:
- adds r2, r1, 0
- ands r2, r7
- cmp r2, 0
- bne _080F88D2
- adds r0, r3, r4
- strb r2, [r0]
-_080F88D2:
- asrs r1, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _080F88C6
- movs r4, 0x4
- ldr r0, _080F8938 @ =Rfu+0x996
- ldrb r7, [r0]
-_080F88E4:
- movs r3, 0
- subs r1, r4, 0x1
- cmp r7, r4
- beq _080F8900
- ldr r2, _080F8938 @ =Rfu+0x996
-_080F88EE:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bhi _080F8900
- adds r0, r3, r2
- ldrb r0, [r0]
- cmp r0, r4
- bne _080F88EE
-_080F8900:
- cmp r3, 0x4
- bne _080F8906
- adds r6, r4, 0
-_080F8906:
- lsls r0, r1, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080F88E4
- mov r0, r12
- ands r5, r0
- movs r3, 0
- movs r2, 0x1
- ldr r1, _080F8938 @ =Rfu+0x996
-_080F8918:
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _080F8926
- adds r0, r3, r1
- strb r6, [r0]
- adds r6, 0x1
-_080F8926:
- asrs r5, 1
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x3
- bls _080F8918
-_080F8932:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8938: .4byte Rfu+0x996
- thumb_func_end sub_80F887C
-
- thumb_func_start sub_80F893C
-sub_80F893C: @ 80F893C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _080F8958 @ =Rfu
- ldrh r3, [r0, 0x4]
- adds r7, r0, 0
- cmp r3, 0xC
- bls _080F894E
- b _080F8A8A
-_080F894E:
- lsls r0, r3, 2
- ldr r1, _080F895C @ =_080F8960
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F8958: .4byte Rfu
-_080F895C: .4byte _080F8960
- .align 2, 0
-_080F8960:
- .4byte _080F8994
- .4byte _080F8A8A
- .4byte _080F8A8A
- .4byte _080F8A8A
- .4byte _080F8A8A
- .4byte _080F8A8A
- .4byte _080F89AC
- .4byte _080F8A8A
- .4byte _080F8A8A
- .4byte _080F89D4
- .4byte _080F8A8A
- .4byte _080F89E8
- .4byte _080F8A2C
-_080F8994:
- ldr r0, _080F89A4 @ =gUnknown_843EBB4
- bl sub_80FD4B0
- ldr r0, _080F89A8 @ =Rfu
- movs r2, 0x1
- strh r2, [r0, 0x4]
- b _080F89BC
- .align 2, 0
-_080F89A4: .4byte gUnknown_843EBB4
-_080F89A8: .4byte Rfu
-_080F89AC:
- ldrb r0, [r7, 0xC]
- ldr r3, _080F89CC @ =gUnknown_843EC8C
- movs r1, 0
- movs r2, 0xF0
- bl sub_80FD538
- movs r2, 0x7
- strh r2, [r7, 0x4]
-_080F89BC:
- ldr r1, _080F89D0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _080F8A8A
- .align 2, 0
-_080F89CC: .4byte gUnknown_843EC8C
-_080F89D0: .4byte gTasks
-_080F89D4:
- ldr r0, _080F89E4 @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0xA
- strh r0, [r1, 0xA]
- b _080F8A8A
- .align 2, 0
-_080F89E4: .4byte gTasks
-_080F89E8:
- bl sub_80FA788
- cmp r0, 0x6
- beq _080F8A0C
- cmp r0, 0x6
- bgt _080F89FA
- cmp r0, 0x5
- beq _080F8A00
- b _080F8A8A
-_080F89FA:
- cmp r0, 0x9
- beq _080F8A0C
- b _080F8A8A
-_080F8A00:
- ldr r1, _080F8A08 @ =Rfu
- movs r0, 0xC
- strh r0, [r1, 0x4]
- b _080F8A8A
- .align 2, 0
-_080F8A08: .4byte Rfu
-_080F8A0C:
- bl sub_80FEB14
- ldr r0, _080F8A24 @ =Rfu
- ldr r1, _080F8A28 @ =0x0000099c
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- adds r0, r6, 0
- bl DestroyTask
- b _080F8A8A
- .align 2, 0
-_080F8A24: .4byte Rfu
-_080F8A28: .4byte 0x0000099c
-_080F8A2C:
- ldr r0, _080F8A90 @ =0x000008f6
- adds r4, r7, r0
- ldrb r0, [r4]
- movs r5, 0x80
- lsls r5, 17
- lsls r5, r0
- lsrs r5, 24
- ldrb r1, [r4]
- movs r0, 0xC
- bl rfu_clearSlot
- ldrb r1, [r4]
- ldr r0, _080F8A94 @ =0x000008f7
- adds r2, r7, r0
- movs r0, 0x10
- movs r3, 0x46
- bl rfu_setRecvBuffer
- adds r1, r7, 0
- adds r1, 0x4C
- adds r0, r5, 0
- movs r2, 0xE
- bl rfu_UNI_setSendData
- ldr r1, _080F8A98 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- adds r0, r6, 0
- bl DestroyTask
- ldr r4, _080F8A9C @ =gUnknown_203AC08
- ldrb r0, [r4, 0xF]
- cmp r0, 0
- bne _080F8A82
- bl sub_80FC208
- ldrb r0, [r4, 0xF]
- adds r0, 0x1
- strb r0, [r4, 0xF]
-_080F8A82:
- ldr r0, _080F8AA0 @ =sub_80FA834
- movs r1, 0x5
- bl CreateTask
-_080F8A8A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8A90: .4byte 0x000008f6
-_080F8A94: .4byte 0x000008f7
-_080F8A98: .4byte gTasks
-_080F8A9C: .4byte gUnknown_203AC08
-_080F8AA0: .4byte sub_80FA834
- thumb_func_end sub_80F893C
-
- thumb_func_start sub_80F8AA4
-sub_80F8AA4: @ 80F8AA4
- push {r4,r5,lr}
- ldr r0, _080F8AE4 @ =gUnknown_3005E10
- ldrb r5, [r0]
- movs r4, 0
-_080F8AAC:
- movs r0, 0x1
- ands r0, r5
- cmp r0, 0
- beq _080F8AD0
- lsls r2, r4, 3
- subs r2, r4
- lsls r2, 1
- ldr r0, _080F8AE8 @ =Rfu+0x14
- adds r2, r0
- movs r0, 0x10
- adds r1, r4, 0
- movs r3, 0xE
- bl rfu_setRecvBuffer
- movs r0, 0x3
- adds r1, r4, 0
- bl rfu_clearSlot
-_080F8AD0:
- lsrs r5, 1
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _080F8AAC
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8AE4: .4byte gUnknown_3005E10
-_080F8AE8: .4byte Rfu+0x14
- thumb_func_end sub_80F8AA4
-
- thumb_func_start sub_80F8AEC
-sub_80F8AEC: @ 80F8AEC
- push {r4-r6,lr}
- ldr r0, _080F8B28 @ =gUnknown_3005E10
- ldrb r5, [r0]
- ldr r4, _080F8B2C @ =Rfu+0x93f
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x46
- bl rfu_UNI_setSendData
- adds r0, r5, 0
- bl sub_80F886C
- ldr r1, _080F8B30 @ =0xfffff6c1
- adds r6, r4, r1
- adds r1, r4, 0
- adds r1, 0x53
- strb r0, [r1]
- adds r4, 0x5B
- strb r5, [r4]
- movs r1, 0x1
- negs r1, r1
- adds r0, r5, 0
- bl sub_80F887C
- movs r0, 0x1
- strb r0, [r6, 0xC]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8B28: .4byte gUnknown_3005E10
-_080F8B2C: .4byte Rfu+0x93f
-_080F8B30: .4byte 0xfffff6c1
- thumb_func_end sub_80F8AEC
-
- thumb_func_start sub_80F8B34
-sub_80F8B34: @ 80F8B34
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x54
- bne _080F8B68
- bl sub_80FB9F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _080F8B68
- ldr r0, _080F8B80 @ =gUnknown_3005E10
- ldrb r0, [r0]
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- movs r0, 0
- movs r1, 0
- bl sub_80FB9E4
-_080F8B68:
- ldr r0, _080F8B84 @ =Rfu
- ldrh r2, [r0, 0x4]
- adds r6, r0, 0
- cmp r2, 0x12
- bls _080F8B74
- b _080F8CE6
-_080F8B74:
- lsls r0, r2, 2
- ldr r1, _080F8B88 @ =_080F8B8C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F8B80: .4byte gUnknown_3005E10
-_080F8B84: .4byte Rfu
-_080F8B88: .4byte _080F8B8C
- .align 2, 0
-_080F8B8C:
- .4byte _080F8BD8
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8CE6
- .4byte _080F8C28
- .4byte _080F8C88
- .4byte _080F8CE6
- .4byte _080F8C9C
- .4byte _080F8C00
- .4byte _080F8CE6
-_080F8BD8:
- ldr r0, _080F8BF4 @ =gUnknown_203ABF0
- bl sub_80FD4B0
- ldr r0, _080F8BF8 @ =Rfu
- movs r2, 0x1
- strh r2, [r0, 0x4]
- ldr r1, _080F8BFC @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _080F8CE6
- .align 2, 0
-_080F8BF4: .4byte gUnknown_203ABF0
-_080F8BF8: .4byte Rfu
-_080F8BFC: .4byte gTasks
-_080F8C00:
- ldr r3, _080F8C1C @ =gUnknown_843EC8C
- movs r0, 0x2
- movs r1, 0
- movs r2, 0xF0
- bl sub_80FD538
- ldr r0, _080F8C20 @ =sub_80F8D20
- bl sub_80FEA10
- ldr r1, _080F8C24 @ =Rfu
- movs r0, 0x12
- strh r0, [r1, 0x4]
- b _080F8CE6
- .align 2, 0
-_080F8C1C: .4byte gUnknown_843EC8C
-_080F8C20: .4byte sub_80F8D20
-_080F8C24: .4byte Rfu
-_080F8C28:
- ldr r1, _080F8C6C @ =0x000008f6
- adds r0, r6, r1
- ldrb r1, [r0]
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r1
- lsrs r0, 24
- adds r1, r6, 0
- adds r1, 0x4C
- movs r2, 0xE
- bl rfu_UNI_setSendData
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080F8CE6
- strb r0, [r6, 0xC]
- adds r0, r5, 0
- bl DestroyTask
- ldr r0, _080F8C70 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0x16
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _080F8C78
- ldr r0, _080F8C74 @ =sub_80FACF0
- movs r1, 0x1
- bl CreateTask
- b _080F8CE6
- .align 2, 0
-_080F8C6C: .4byte 0x000008f6
-_080F8C70: .4byte gTasks
-_080F8C74: .4byte sub_80FACF0
-_080F8C78:
- ldr r0, _080F8C84 @ =sub_80FA834
- movs r1, 0x5
- bl CreateTask
- b _080F8CE6
- .align 2, 0
-_080F8C84: .4byte sub_80FA834
-_080F8C88:
- movs r0, 0
- bl sub_80FD760
- ldr r1, _080F8C98 @ =Rfu
- movs r0, 0xF
- strh r0, [r1, 0x4]
- b _080F8CE6
- .align 2, 0
-_080F8C98: .4byte Rfu
-_080F8C9C:
- ldr r0, _080F8CEC @ =0x00000993
- adds r1, r6, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, _080F8CF0 @ =sub_80F8DA8
- bl sub_80FEA10
- movs r0, 0x1
- bl sub_80FAFE0
- bl sub_80F8AA4
- bl sub_80F8AEC
- movs r0, 0x14
- strh r0, [r6, 0x4]
- ldr r1, _080F8CF4 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- movs r4, 0x1
- strb r4, [r6, 0xC]
- ldr r0, _080F8CF8 @ =sub_80FA834
- movs r1, 0x5
- bl CreateTask
- movs r1, 0x9A
- lsls r1, 4
- adds r0, r6, r1
- strb r4, [r0]
- adds r0, r5, 0
- bl DestroyTask
-_080F8CE6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8CEC: .4byte 0x00000993
-_080F8CF0: .4byte sub_80F8DA8
-_080F8CF4: .4byte gTasks
-_080F8CF8: .4byte sub_80FA834
- thumb_func_end sub_80F8B34
-
- thumb_func_start sub_80F8CFC
-sub_80F8CFC: @ 80F8CFC
- push {lr}
- ldr r3, _080F8D10 @ =gUnknown_843EC8C
- movs r0, 0x1
- movs r1, 0
- movs r2, 0xF0
- bl sub_80FD538
- pop {r0}
- bx r0
- .align 2, 0
-_080F8D10: .4byte gUnknown_843EC8C
- thumb_func_end sub_80F8CFC
-
- thumb_func_start sub_80F8D14
-sub_80F8D14: @ 80F8D14
- push {lr}
- movs r0, 0
- bl sub_80FD760
- pop {r0}
- bx r0
- thumb_func_end sub_80F8D14
-
- thumb_func_start sub_80F8D20
-sub_80F8D20: @ 80F8D20
- push {r4,lr}
- ldr r0, _080F8D90 @ =Rfu
- movs r2, 0
- movs r1, 0xD
- adds r0, 0x59
-_080F8D2A:
- strb r2, [r0]
- subs r0, 0x1
- subs r1, 0x1
- cmp r1, 0
- bge _080F8D2A
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- ldr r1, _080F8D94 @ =gRfuSlotStatusUNI
- ldr r3, _080F8D90 @ =Rfu
- ldr r0, _080F8D98 @ =0x000008f6
- adds r4, r3, r0
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0, 0x12]
- cmp r0, 0
- beq _080F8D84
- ldr r2, _080F8D9C @ =0x00000988
- adds r1, r3, r2
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- movs r1, 0x92
- lsls r1, 1
- adds r0, r3, r1
- ldr r2, _080F8DA0 @ =0x000008f7
- adds r1, r3, r2
- bl sub_80FC588
- ldr r1, _080F8DA4 @ =gUnknown_203AC08
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- bl sub_80F906C
- ldrb r0, [r4]
- bl rfu_UNI_readySendData
- ldrb r0, [r4]
- bl rfu_UNI_clearRecvNewDataFlag
-_080F8D84:
- movs r0, 0x1
- bl LinkRfu_REQ_SendData_HandleParentRelationship
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8D90: .4byte Rfu
-_080F8D94: .4byte gRfuSlotStatusUNI
-_080F8D98: .4byte 0x000008f6
-_080F8D9C: .4byte 0x00000988
-_080F8DA0: .4byte 0x000008f7
-_080F8DA4: .4byte gUnknown_203AC08
- thumb_func_end sub_80F8D20
-
- thumb_func_start sub_80F8DA8
-sub_80F8DA8: @ 80F8DA8
- ldr r0, _080F8DB8 @ =Rfu
- ldr r1, _080F8DBC @ =0x00000993
- adds r0, r1
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
- bx lr
- .align 2, 0
-_080F8DB8: .4byte Rfu
-_080F8DBC: .4byte 0x00000993
- thumb_func_end sub_80F8DA8
-
- thumb_func_start sub_80F8DC0
-sub_80F8DC0: @ 80F8DC0
- push {r4-r6,lr}
- ldr r0, _080F8DE0 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080F8E64
- bl sub_80FD52C
- ldr r4, _080F8DE4 @ =Rfu
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- bne _080F8DEC
- ldr r0, _080F8DE8 @ =sub_80F8738
- b _080F8DF2
- .align 2, 0
-_080F8DE0: .4byte gUnknown_203ADFA
-_080F8DE4: .4byte Rfu
-_080F8DE8: .4byte sub_80F8738
-_080F8DEC:
- cmp r0, 0
- bne _080F8E14
- ldr r0, _080F8E10 @ =sub_80F893C
-_080F8DF2:
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080F8E34
- adds r0, r4, 0
- adds r0, 0x67
- ldrb r0, [r0]
- bl DestroyTask
- bl sub_80F85F8
- b _080F8E34
- .align 2, 0
-_080F8E10: .4byte sub_80F893C
-_080F8E14:
- cmp r0, 0x2
- bne _080F8E34
- ldr r0, _080F8E6C @ =sub_80F8B34
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080F8E34
- adds r0, r4, 0
- adds r0, 0x67
- ldrb r0, [r0]
- bl DestroyTask
- bl sub_80F85F8
-_080F8E34:
- movs r5, 0
- ldr r6, _080F8E70 @ =gUnknown_843ED88
-_080F8E38:
- lsls r0, r5, 2
- adds r0, r6
- ldr r4, [r0]
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080F8E5A
- adds r0, r4, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080F8E5A:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _080F8E38
-_080F8E64:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8E6C: .4byte sub_80F8B34
-_080F8E70: .4byte gUnknown_843ED88
- thumb_func_end sub_80F8DC0
-
- thumb_func_start sub_80F8E74
-sub_80F8E74: @ 80F8E74
- push {lr}
- ldr r0, _080F8E98 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080F8E92
- ldr r0, _080F8E9C @ =sub_80F8738
- movs r1, 0x1
- bl CreateTask
- ldr r1, _080F8EA0 @ =Rfu
- adds r1, 0x67
- strb r0, [r1]
-_080F8E92:
- pop {r0}
- bx r0
- .align 2, 0
-_080F8E98: .4byte gUnknown_203ADFA
-_080F8E9C: .4byte sub_80F8738
-_080F8EA0: .4byte Rfu
- thumb_func_end sub_80F8E74
-
- thumb_func_start sub_80F8EA4
-sub_80F8EA4: @ 80F8EA4
- push {lr}
- ldr r1, _080F8EBC @ =Rfu
- ldrh r0, [r1, 0x4]
- cmp r0, 0x7
- bne _080F8EC4
- ldr r2, _080F8EC0 @ =0x00000985
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _080F8EC4
- movs r0, 0x1
- b _080F8EC6
- .align 2, 0
-_080F8EBC: .4byte Rfu
-_080F8EC0: .4byte 0x00000985
-_080F8EC4:
- movs r0, 0
-_080F8EC6:
- pop {r1}
- bx r1
- thumb_func_end sub_80F8EA4
-
- thumb_func_start sub_80F8ECC
-sub_80F8ECC: @ 80F8ECC
- push {r4,lr}
- ldr r4, _080F8EFC @ =Rfu
- ldrh r0, [r4, 0x4]
- cmp r0, 0x7
- bne _080F8F08
- ldr r0, _080F8F00 @ =gRfuLinkStatus
- ldr r1, [r0]
- ldr r2, _080F8F04 @ =0x000008f5
- adds r0, r4, r2
- ldrb r0, [r0]
- lsls r0, 5
- adds r1, r0
- ldrh r0, [r1, 0x14]
- movs r1, 0xF0
- bl sub_80FD610
- lsls r0, 24
- cmp r0, 0
- bne _080F8F08
- movs r0, 0x9
- strh r0, [r4, 0x4]
- movs r0, 0x1
- b _080F8F0A
- .align 2, 0
-_080F8EFC: .4byte Rfu
-_080F8F00: .4byte gRfuLinkStatus
-_080F8F04: .4byte 0x000008f5
-_080F8F08:
- movs r0, 0
-_080F8F0A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80F8ECC
-
- thumb_func_start sub_80F8F10
-sub_80F8F10: @ 80F8F10
- push {lr}
- ldr r0, _080F8F34 @ =gUnknown_203ADFA
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080F8F2E
- ldr r0, _080F8F38 @ =sub_80F893C
- movs r1, 0x1
- bl CreateTask
- ldr r1, _080F8F3C @ =Rfu
- adds r1, 0x67
- strb r0, [r1]
-_080F8F2E:
- pop {r0}
- bx r0
- .align 2, 0
-_080F8F34: .4byte gUnknown_203ADFA
-_080F8F38: .4byte sub_80F893C
-_080F8F3C: .4byte Rfu
- thumb_func_end sub_80F8F10
-
- thumb_func_start sub_80F8F40
-sub_80F8F40: @ 80F8F40
- push {lr}
- ldr r0, _080F8F50 @ =gUnknown_3005E10
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F8F54
- movs r0, 0
- b _080F8F56
- .align 2, 0
-_080F8F50: .4byte gUnknown_3005E10
-_080F8F54:
- movs r0, 0x1
-_080F8F56:
- pop {r1}
- bx r1
- thumb_func_end sub_80F8F40
-
- thumb_func_start sub_80F8F5C
-sub_80F8F5C: @ 80F8F5C
- ldr r1, _080F8F70 @ =Rfu
- movs r0, 0x4
- strh r0, [r1, 0x4]
- ldr r0, _080F8F74 @ =gUnknown_3005E10
- ldrb r0, [r0]
- ldr r2, _080F8F78 @ =0x0000099f
- adds r1, r2
- strb r0, [r1]
- bx lr
- .align 2, 0
-_080F8F70: .4byte Rfu
-_080F8F74: .4byte gUnknown_3005E10
-_080F8F78: .4byte 0x0000099f
- thumb_func_end sub_80F8F5C
-
thumb_func_start sub_80F8F7C
sub_80F8F7C: @ 80F8F7C
push {lr}
diff --git a/data/link_rfu_2.s b/data/link_rfu_2.s
index ff63f205c..640b04b79 100644
--- a/data/link_rfu_2.s
+++ b/data/link_rfu_2.s
@@ -6,93 +6,6 @@
.section .rodata
.align 2
-gUnknown_843EBB4:: @ 843EBB4
- .byte 0x04, 0x20
- .2byte 0x0000
- .byte 0x00
- .align 1
- .2byte 0x0002
- .4byte gUnknown_3005440
- .4byte Rfu+2480
- .byte 0x01, 0x00
- .2byte 0x0258, 0x012c
- .align 2
-
-gUnknown_843EBCC:: @ 843EBCC
- .byte 0x00, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00
-
-gUnknown_843EBD4:: @ 843EBD4
- .4byte 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f
- .4byte 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff
- .4byte 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff
- .4byte 0x00ffffff
-
-gUnknown_843EC38:: @ 843EC38
- .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02
- .byte 0x03
-
-gUnknown_843EC41:: @ 843EC41
- .byte 0x00, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03
- .byte 0x01, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04
-
-gUnknown_843EC51:: @ 843EC51
- .byte 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
- .byte 0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
- .byte 0x00, 0x00, 0x00
-
-gUnknown_843EC64:: @ 843EC64
- .4byte gBlockSendBuffer
- .2byte 0xc8
- .align 2
- .4byte gBlockSendBuffer
- .2byte 0xc8
- .align 2
- .4byte gBlockSendBuffer
- .2byte 0x64
- .align 2
- .4byte gBlockSendBuffer
- .2byte 0xdc
- .align 2
- .4byte gBlockSendBuffer
- .2byte 0x28
- .align 2
-
-gUnknown_843EC8C:: @ 843EC8C
- .2byte 0x0002, 0x7f7d, 0xffff
-
- .macro ascipad str, len
-1:
- .ascii "\str"
-2:
- .space \len - (2b - 1b)
- .endm
-
-sUnref_843EC92::
- ascipad "RFU WAIT", 15
- ascipad "RFU BOOT", 15
- ascipad "RFU ERROR", 15
- ascipad "RFU RESET", 15
- ascipad "RFU CONFIG", 15
- ascipad "RFU START", 15
- ascipad "RFU SC POLL", 15
- ascipad "RFU SP POLL", 15
- ascipad "RFU START", 15
- ascipad "RFU SEND ERR", 15
- ascipad "RFU CP POLL", 15
-
-sUnref_843ED38::
- ascipad " ", 16
- ascipad "RECOVER START ", 16
- ascipad "DISSCONECT ", 16
- ascipad "RECOVER SUUSES", 16
- ascipad "RECOVER FAILED", 16
-
- .align 2
-gUnknown_843ED88:: @ 843ED88
- .4byte sub_80FA834
- .4byte sub_80FAA94
- .4byte sub_80FACF0
-
.align 2
gUnknown_843ED94:: @ 843ED94
abspath "rfu.c"
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 8ee7674cf..7f695ebe2 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -24,6 +24,20 @@ struct UnkLinkRfuStruct_02022B2C
u16 unk_14;
};
+struct UnkLinkRfuStruct_02022B44
+{
+ u8 fill_00[6];
+ u16 unk_06;
+ u8 fill_08[6];
+ vu8 unk_0e;
+ u8 unk_0f;
+ u8 fill_10[0x54];
+ u16 unk_64;
+ u8 fill_66[0x1d];
+ u8 unk_83;
+ u8 fill_84[0x58];
+};
+
struct UnkRfuStruct_1
{
/* 0x000 */ u8 unk_00;
@@ -65,6 +79,26 @@ struct UnkRfuStruct_1
/* 0x044 */ void (*unk_44)(u16);
};
+struct UnkRfuStruct_2_Sub_124
+{
+ /* 0x000 */ u8 unk_00[20][70];
+ /* 0x578 */ vu8 unk_8c0;
+ /* 0x579 */ vu8 unk_8c1;
+ /* 0x57a */ vu8 unk_8c2;
+ /* 0x57b */ vu8 unk_8c3;
+};
+
+struct UnkRfuStruct_2_Sub_9e8
+{
+ /* 0x000 */ u8 unk_00[40][14];
+ /* 0x230 */ vu8 unk_230;
+ /* 0x231 */ vu8 unk_231;
+ /* 0x232 */ vu8 unk_232;
+ /* 0x233 */ vu8 unk_233;
+};
+
+extern struct UnkRfuStruct_1 gUnknown_3005E10;
+
void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void sub_80FA190(void);
@@ -106,6 +140,20 @@ void sub_80FCF34(void);
void InitRFU(void);
void sub_80FEB14(void);
+void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr);
+void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr);
+
+void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0);
+u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6);
+void sub_80FD760(bool8 a0);
+void sub_80FEA10(void (*func)(u16));
+void sub_80FB9E4(u8 a0, u16 a1);
+u8 sub_80FB9F4(void);
+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);
+
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/ld_script.txt b/ld_script.txt
index d164b3f56..8b17d3cd6 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -225,6 +225,7 @@ SECTIONS {
asm/box_party_pokemon_dropdown.o(.text);
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);
@@ -510,6 +511,7 @@ SECTIONS {
src/new_menu_helpers.o(.rodata);
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);
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
new file mode 100644
index 000000000..80873ec60
--- /dev/null
+++ b/src/link_rfu_2.c
@@ -0,0 +1,638 @@
+#include "global.h"
+#include "librfu.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "quest_log.h"
+#include "task.h"
+
+struct UnkRfuStruct_2_Sub_6c
+{
+ /* 0x00 */ u16 unk_00;
+ /* 0x02 */ u16 unk_02;
+ /* 0x04 */ const u8 *unk_04;
+ /* 0x08 */ u32 unk_08;
+ /* 0x0c */ u32 unk_0c;
+ /* 0x10 */ u8 unk_10;
+ /* 0x11 */ u8 unk_11;
+ /* 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
+{
+ /* 0x000 */ void (*RfuFunc)(void);
+ /* 0x004 */ u16 unk_04;
+ /* 0x006 */ u8 filler_06[4];
+ /* 0x00a */ u16 unk_0a;
+ /* 0x00c */ u8 unk_0c;
+ /* 0x00d */ u8 playerCount;
+ /* 0x00e */ u8 unk_0e;
+ /* 0x00f */ u8 unk_0f;
+ /* 0x010 */ u16 unk_10;
+ /* 0x012 */ u16 unk_12;
+ /* 0x014 */ u8 unk_14[4][14];
+ /* 0x04c */ u8 unk_4c[14];
+ /* 0x05a */ u8 unk_5a;
+ /* 0x05b */ u8 unk_5b;
+ /* 0x05c */ u8 unk_5c[5];
+ /* 0x061 */ u8 unk_61[5];
+ /* 0x066 */ u8 unk_66;
+ /* 0x067 */ u8 unk_67;
+ /* 0x068 */ u8 filler_68[4];
+ /* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
+ /* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
+ /* 0x0e4 */ u8 unk_e4[5];
+ /* 0x0e9 */ u8 unk_e9[5];
+ /* 0x0ee */ vu8 unk_ee;
+ /* 0x0ef */ u8 unk_ef;
+ /* 0x0f0 */ u8 unk_f0;
+ /* 0x0f1 */ u8 unk_f1;
+ /* 0x0f2 */ u16 unk_f2[6];
+ /* 0x0fe */ u16 unk_fe;
+ /* 0x100 */ u16 unk_100;
+ /* 0x102 */ u8 unk_102;
+ /* 0x103 */ u8 filler_103[0x10A - 0x103];
+ /* 0x10A */ struct UnkLinkRfuStruct_02022B14 unk_10A;
+ /* 0x11B */ u8 filler_;
+ /* 0x11C */ u8 playerName[PLAYER_NAME_LENGTH];
+ /* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
+ /* 0x6a0 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
+ /* 0x8d4 */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
+ /* 0x8f4 */ vu8 unk_c3c;
+ /* 0x8f5 */ u8 unk_c3d;
+ /* 0x8f6 */ vu8 unk_c3e;
+ /* 0x8f7 */ u8 unk_c3f[70];
+ /* 0x93d */ u8 unk_c85;
+ /* 0x93e */ u8 unk_c86;
+ /* 0x93f */ u8 unk_c87[5][7][2];
+ /* 0x985 */ u8 unk_ccd;
+ /* 0x986 */ u8 unk_cce;
+ /* 0x987 */ u8 unk_ccf;
+ /* 0x988 */ vu8 unk_cd0;
+ /* 0x989 */ u8 unk_cd1[4];
+ /* 0x98d */ u8 unk_cd5[4];
+ /* 0x991 */ u8 unk_cd9;
+ /* 0x992 */ u8 unk_cda;
+ /* 0x993 */ vu8 unk_cdb;
+ /* 0x994 */ vu8 unk_cdc;
+ /* 0x995 */ u8 unk_cdd;
+ /* 0x996 */ u8 unk_cde[4];
+ /* 0x99a */ u8 unk_ce2;
+ /* 0x99b */ u8 unk_ce3;
+ /* 0x99c */ u8 unk_ce4;
+ /* 0x99d */ u8 unk_ce5;
+ /* 0x99e */ u8 unk_ce6;
+ /* 0x99f */ u8 unk_ce7;
+ /* 0x9a0 */ u8 unk_ce8;
+ /* 0x9a1 */ u8 unk_ce9;
+ /* 0x9a2 */ u8 unk_cea[4];
+ /* 0x9a6 */ u8 unk_cee[4];
+} Rfu; // size: 0x9AC
+
+EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_203ABF0 = {};
+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];
+
+struct UnkLinkRfuStruct_02022B14 gUnknown_3005440;
+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_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data);
+void sub_80FA738(void);
+int sub_80FA788(void);
+void sub_80FA834(u8 taskId);
+void sub_80FAA94(u8 taskId);
+void sub_80FACF0(u8 taskId);
+void sub_80FAFE0(u8 a0);
+void sub_80FC208(void);
+
+const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = {
+ .unk_00 = 0x04,
+ .unk_01 = 0x20,
+ .unk_02 = 0x0000,
+ .unk_04 = 0x00,
+ .unk_06 = 0x0002,
+ .unk_08 = &gUnknown_3005440,
+ .unk_0c = gUnknown_3005E00,
+ .unk_10 = 0x01,
+ .unk_11 = 0x00,
+ .unk_12 = 0x0258,
+ .unk_14 = 0x012c
+};
+
+const u8 gUnknown_843EBCC[] = {
+ 0, 3, 2, 1, 0
+};
+
+const u32 gUnknown_843EBD4[] = {
+ 0x000000,
+ 0x000001,
+ 0x000003,
+ 0x000007,
+ 0x00000f,
+ 0x00001f,
+ 0x00003f,
+ 0x00007f,
+ 0x0000ff,
+ 0x0001ff,
+ 0x0003ff,
+ 0x0007ff,
+ 0x000fff,
+ 0x001fff,
+ 0x003fff,
+ 0x007fff,
+ 0x00ffff,
+ 0x01ffff,
+ 0x03ffff,
+ 0x07ffff,
+ 0x0fffff,
+ 0x1fffff,
+ 0x3fffff,
+ 0x7fffff,
+ 0xffffff
+};
+
+const u8 gUnknown_843EC38[] = {
+ 0, 0, 1,
+ 1, 2, 2,
+ 2, 2, 3
+};
+
+const u8 gUnknown_843EC41[] = {
+ 0, 1, 1, 2,
+ 1, 2, 2, 3,
+ 1, 2, 2, 3,
+ 2, 3, 3, 4
+};
+
+const u8 gUnknown_843EC51[] = {
+ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
+};
+
+const struct {
+ u8 *buffer;
+ u32 size;
+} gUnknown_843EC64[] = {
+ { gBlockSendBuffer, 200 },
+ { gBlockSendBuffer, 200 },
+ { gBlockSendBuffer, 100 },
+ { gBlockSendBuffer, 220 },
+ { gBlockSendBuffer, 40 }
+};
+
+const u16 gUnknown_843EC8C[] = {
+ 0x0002, 0x7f7d, 0xFFFF
+};
+
+const char sUnref_843EC92[][15] = {
+ "RFU WAIT",
+ "RFU BOOT",
+ "RFU ERROR",
+ "RFU RESET",
+ "RFU CONFIG",
+ "RFU START",
+ "RFU SC POLL",
+ "RFU SP POLL",
+ "RFU START",
+ "RFU SEND ERR",
+ "RFU CP POLL"
+};
+
+const char sUnref_843ED37[][16] = {
+ " ",
+ "RECOVER START ",
+ "DISSCONECT ",
+ "RECOVER SUUSES",
+ "RECOVER FAILED"
+};
+
+const TaskFunc gUnknown_843ED88[] = {
+ sub_80FA834,
+ sub_80FAA94,
+ sub_80FACF0
+};
+
+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)
+{
+
+}
+
+void sub_80F85F8(void)
+{
+ s32 i;
+ u8 unk_ee_bak = Rfu.unk_ee;
+ CpuFill16(0, &Rfu, sizeof Rfu);
+ Rfu.unk_0c = 0xFF;
+ Rfu.unk_ee = unk_ee_bak;
+ if (Rfu.unk_ee != 4)
+ {
+ Rfu.unk_ee = 0;
+ }
+ for (i = 0; i < 5; i++)
+ {
+ sub_80F9CB4(Rfu.unk_80 + i);
+ }
+ sub_80F9CB4(&Rfu.unk_6c);
+ sub_80FC478(&Rfu.unk_124);
+ sub_80FC4D4(&Rfu.unk_9e8);
+ CpuFill16(0, gSendCmd, sizeof gSendCmd);
+ CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
+ CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers);
+}
+
+void InitRFU(void)
+{
+ IntrFunc serialIntr = gIntrTable[1];
+ IntrFunc timerIntr = gIntrTable[2];
+ sub_80F86F4();
+ rfu_REQ_stopMode();
+ rfu_waitREQComplete();
+ REG_IME = 0;
+ gIntrTable[1] = serialIntr;
+ gIntrTable[2] = timerIntr;
+ REG_IME = INTR_FLAG_VBLANK;
+}
+
+void sub_80F86F4(void)
+{
+ if (!rfu_initializeAPI(&gRfuAPIBuffer, sizeof gRfuAPIBuffer, gIntrTable + 1, TRUE))
+ {
+ gLinkType = 0;
+ sub_80FB128(0);
+ sub_80F85F8();
+ rfu_setTimerInterrupt(3, gIntrTable + 2);
+ }
+}
+
+void sub_80F8738(u8 taskId)
+{
+ sub_80FA738();
+ switch (Rfu.unk_04)
+ {
+ case 0:
+ sub_80FD4B0(&gUnknown_203ABF0);
+ Rfu.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 2:
+ sub_80FD538(Rfu.unk_0c, 0, 240, gUnknown_843EC8C);
+ Rfu.unk_04 = 3;
+ gTasks[taskId].data[1] = 6;
+ break;
+ case 3:
+ break;
+ case 4:
+ sub_80FD760(FALSE);
+ Rfu.unk_04 = 5;
+ break;
+ case 5:
+ break;
+ case 18:
+ Rfu.unk_cdb = 0;
+ sub_80FEA10(sub_80F8DA8);
+ sub_80F8AA4();
+ sub_80F8AEC();
+ Rfu.unk_04 = 20;
+ gTasks[taskId].data[1] = 8;
+ CreateTask(sub_80FA834, 5);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+s32 sub_80F886C(u8 idx)
+{
+ return gUnknown_843EC51[idx];
+}
+
+void sub_80F887C(s32 r2, s32 r5)
+{
+ u8 i;
+ u8 r4 = 1;
+ s32 r1 = r2;
+ s32 r6 = 0;
+ if (r5 == -1)
+ {
+ for (i = 0; i < 4; r2 >>= 1, i++)
+ {
+ if (r2 & 1)
+ {
+ Rfu.unk_cde[i] = r4;
+ r4++;
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < 4; r1 >>= 1, i++)
+ {
+ if (!(r1 & 1))
+ {
+ Rfu.unk_cde[i] = 0;
+ }
+ }
+ for (r4 = 4; r4 != 0; r4--)
+ {
+ for (i = 0; i < 4 && Rfu.unk_cde[i] != r4; i++);
+ if (i == 4)
+ {
+ r6 = r4;
+ }
+ }
+ for (r5 &= ~r2, i = 0; i < 4; r5 >>= 1, i++)
+ {
+ if (r5 & 1)
+ {
+ Rfu.unk_cde[i] = r6++;
+ }
+ }
+ }
+}
+
+void sub_80F893C(u8 taskId)
+{
+ switch (Rfu.unk_04)
+ {
+ case 0:
+ sub_80FD4B0(&gUnknown_843EBB4);
+ Rfu.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 6:
+ sub_80FD538(Rfu.unk_0c, 0, 0xf0, gUnknown_843EC8C);
+ Rfu.unk_04 = 7;
+ gTasks[taskId].data[1] = 7;
+ break;
+ case 7:
+ break;
+ case 9:
+ gTasks[taskId].data[1] = 10;
+ break;
+ case 11:
+ switch (sub_80FA788())
+ {
+ case 5:
+ Rfu.unk_04 = 12;
+ break;
+ case 6:
+ case 9:
+ sub_80FEB14();
+ Rfu.unk_ce4 = 2;
+ DestroyTask(taskId);
+ break;
+ }
+ break;
+ case 12:
+ {
+ u8 r5 = 1 << Rfu.unk_c3e;
+ rfu_clearSlot(12, Rfu.unk_c3e);
+ rfu_setRecvBuffer(16, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ rfu_UNI_setSendData(r5, Rfu.unk_4c, 14);
+ gTasks[taskId].data[1] = 8;
+ DestroyTask(taskId);
+ if (gUnknown_203AC08.unk_0f == 0)
+ {
+ sub_80FC208();
+ gUnknown_203AC08.unk_0f++;
+ }
+ CreateTask(sub_80FA834, 5);
+ break;
+ }
+ }
+}
+
+void sub_80F8AA4(void)
+{
+ u8 i;
+ u8 r5 = gUnknown_3005E10.unk_00;
+ for (i = 0; i < 4; i++)
+ {
+ if (r5 & 1)
+ {
+ rfu_setRecvBuffer(16, i, Rfu.unk_14[i], 14);
+ rfu_clearSlot(3, i);
+ }
+ r5 >>= 1;
+ }
+}
+
+void sub_80F8AEC(void)
+{
+ u8 r5 = gUnknown_3005E10.unk_00;
+ rfu_UNI_setSendData(r5, Rfu.unk_c87, 70);
+ Rfu.unk_cda = sub_80F886C(r5);
+ Rfu.unk_ce2 = r5;
+ sub_80F887C(r5, -1);
+ Rfu.unk_0c = 1;
+}
+
+void sub_80F8B34(u8 taskId)
+{
+ if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4)
+ {
+ rfu_REQ_disconnect(gUnknown_3005E10.unk_00);
+ rfu_waitREQComplete();
+ sub_80FB9E4(0, 0);
+ }
+ switch (Rfu.unk_04)
+ {
+ case 0:
+ sub_80FD4B0(&gUnknown_203ABF0);
+ Rfu.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 17:
+ sub_80FD538(2, 0, 240, gUnknown_843EC8C);
+ sub_80FEA10(sub_80F8D20);
+ Rfu.unk_04 = 18;
+ break;
+ case 18:
+ break;
+ case 13:
+ if (rfu_UNI_setSendData(1 << Rfu.unk_c3e, Rfu.unk_4c, 14) == 0)
+ {
+ Rfu.unk_0c = 0;
+ DestroyTask(taskId);
+ if (gTasks[taskId].data[7])
+ {
+ CreateTask(sub_80FACF0, 1);
+ }
+ else
+ {
+ CreateTask(sub_80FA834, 5);
+ }
+ }
+ break;
+ case 14:
+ sub_80FD760(0);
+ Rfu.unk_04 = 15;
+ break;
+ case 15:
+ break;
+ case 16:
+ Rfu.unk_cdb = 0;
+ sub_80FEA10(sub_80F8DA8);
+ sub_80FAFE0(1);
+ sub_80F8AA4();
+ sub_80F8AEC();
+ Rfu.unk_04 = 20;
+ gTasks[taskId].data[1] = 8;
+ Rfu.unk_0c = 1;
+ CreateTask(sub_80FA834, 5);
+ Rfu.unk_ce8 = 1;
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80F8CFC(void)
+{
+ sub_80FD538(1, 0, 240, gUnknown_843EC8C);
+}
+
+void sub_80F8D14(void)
+{
+ sub_80FD760(FALSE);
+}
+
+void sub_80F8D20(u16 unused)
+{
+ s32 i;
+
+ for (i = 0; i < 14; i++)
+ {
+ Rfu.unk_4c[i] = 0;
+ }
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ if (gRfuSlotStatusUNI[Rfu.unk_c3e]->recv.newDataFlag)
+ {
+ Rfu.unk_cd0++;
+ sub_80FC588(&Rfu.unk_124, Rfu.unk_c3f);
+ gUnknown_203AC08.unk_06++;
+ sub_80F906C();
+ rfu_UNI_readySendData(Rfu.unk_c3e);
+ rfu_UNI_clearRecvNewDataFlag(Rfu.unk_c3e);
+ }
+ LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
+}
+
+void sub_80F8DA8(u16 unused)
+{
+ Rfu.unk_cdb = 1;
+}
+
+void sub_80F8DC0(void)
+{
+ u8 i;
+
+ if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
+ return;
+
+ sub_80FD52C();
+ if (Rfu.unk_0c == 1)
+ {
+ if (FuncIsActiveTask(sub_80F8738) == TRUE)
+ {
+ DestroyTask(Rfu.unk_67);
+ sub_80F85F8();
+ }
+ }
+ else if (Rfu.unk_0c == 0)
+ {
+ if (FuncIsActiveTask(sub_80F893C) == TRUE)
+ {
+ DestroyTask(Rfu.unk_67);
+ sub_80F85F8();
+ }
+ }
+ else if (Rfu.unk_0c == 2)
+ {
+ if (FuncIsActiveTask(sub_80F8B34) == TRUE)
+ {
+ DestroyTask(Rfu.unk_67);
+ sub_80F85F8();
+ }
+ }
+ for (i = 0; i < 3; i++)
+ {
+ if (FuncIsActiveTask(gUnknown_843ED88[i]) == TRUE)
+ {
+ DestroyTask(FindTaskIdByFunc(gUnknown_843ED88[i]));
+ }
+ }
+}
+
+void sub_80F8E74(void)
+{
+ if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
+ return;
+ Rfu.unk_67 = CreateTask(sub_80F8738, 1);
+}
+
+bool8 sub_80F8EA4(void)
+{
+ if (Rfu.unk_04 == 7 && Rfu.unk_ccd)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 sub_80F8ECC(void)
+{
+ if (Rfu.unk_04 == 7 && !sub_80FD610(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
+ {
+ Rfu.unk_04 = 9;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_80F8F10(void)
+{
+ if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
+ return;
+ Rfu.unk_67 = CreateTask(sub_80F893C, 1);
+}
+
+bool8 sub_80F8F40(void)
+{
+ if (gUnknown_3005E10.unk_00)
+ {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_80F8F5C(void)
+{
+ Rfu.unk_04 = 4;
+ Rfu.unk_ce7 = gUnknown_3005E10.unk_00;
+}
diff --git a/sym_bss.txt b/sym_bss.txt
index 08f390b01..e6ef49e94 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -70,19 +70,10 @@ gUnknown_3000FE8: @ 3000FE8
.align 2
.include "src/easy_chat.o"
+ .align 2
+ .include "src/link_rfu_2.o"
-gUnknown_3001188: @ 3001188
- .space 0x8
-
-gRfuAPIBuffer: @ 3001190
- .space 0xE68
-
-gUnknown_3001FF8: @ 3001FF8
- .space 0x10
-
-gUnknown_3002008: @ 3002008
- .space 0x10
-
+ .align 2
gUnknown_3002018: @ 3002018
.space 0x4