diff options
-rw-r--r-- | asm/link_rfu_2.s | 1158 | ||||
-rw-r--r-- | data/link_rfu_2.s | 87 | ||||
-rw-r--r-- | include/link_rfu.h | 48 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/link_rfu_2.c | 638 | ||||
-rw-r--r-- | sym_bss.txt | 15 |
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 |