diff options
-rw-r--r-- | asm/link_rfu_2.s | 2298 | ||||
-rw-r--r-- | data/link_rfu_2.s | 12 | ||||
-rw-r--r-- | include/link.h | 1 | ||||
-rw-r--r-- | include/link_rfu.h | 16 | ||||
-rw-r--r-- | include/overworld.h | 25 | ||||
-rw-r--r-- | src/link_rfu_2.c | 711 |
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; +} |