diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-13 11:17:38 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-13 11:17:38 -0500 |
commit | 11fd159ae811866fcbfdeb7ec558b5809dda9c50 (patch) | |
tree | c903a970784ed71369b2e236bb90ed0853513408 | |
parent | 78b44870080fd5ab3f14002bfdb00540c132a3c8 (diff) |
Port link_rfu from Emerald
-rw-r--r-- | asm/link_rfu.s | 3175 | ||||
-rw-r--r-- | include/link_rfu.h | 59 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/link_rfu.c | 1383 |
4 files changed, 1443 insertions, 3176 deletions
diff --git a/asm/link_rfu.s b/asm/link_rfu.s deleted file mode 100644 index 49fe3aef5..000000000 --- a/asm/link_rfu.s +++ /dev/null @@ -1,3175 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80FD3A4 -sub_80FD3A4: @ 80FD3A4 - push {r4,lr} - bl rfu_REQBN_softReset_and_checkID - adds r4, r0, 0 - ldr r0, _080FD3E8 @ =0x00008001 - cmp r4, r0 - bne _080FD3B8 - ldr r1, _080FD3EC @ =gUnknown_3005E10 - movs r0, 0x1 - strb r0, [r1, 0x8] -_080FD3B8: - ldr r0, _080FD3EC @ =gUnknown_3005E10 - ldrb r2, [r0, 0x4] - adds r1, r0, 0 - cmp r2, 0x17 - beq _080FD3CC - cmp r2, 0x1 - beq _080FD3CC - movs r0, 0 - strb r0, [r1, 0x5] - strb r0, [r1, 0x4] -_080FD3CC: - movs r0, 0 - strb r0, [r1, 0x7] - strb r0, [r1, 0xD] - strb r0, [r1, 0x1] - strb r0, [r1] - movs r0, 0xFF - strb r0, [r1, 0x6] - bl sub_80FEAF4 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080FD3E8: .4byte 0x00008001 -_080FD3EC: .4byte gUnknown_3005E10 - thumb_func_end sub_80FD3A4 - - thumb_func_start rfu_REQ_sendData_wrapper -rfu_REQ_sendData_wrapper: @ 80FD3F0 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080FD410 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - bne _080FD418 - ldr r0, _080FD414 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x2] - movs r2, 0 - cmp r0, 0x1 - bne _080FD420 - movs r2, 0x1 - b _080FD420 - .align 2, 0 -_080FD410: .4byte gRfuLinkStatus -_080FD414: .4byte gUnknown_3005E10 -_080FD418: - ldr r0, _080FD42C @ =gUnknown_3005E10 - ldrb r1, [r0, 0x3] - movs r1, 0 - strb r1, [r0, 0x3] -_080FD420: - adds r0, r2, 0 - bl rfu_REQ_sendData - pop {r0} - bx r0 - .align 2, 0 -_080FD42C: .4byte gUnknown_3005E10 - thumb_func_end rfu_REQ_sendData_wrapper - - thumb_func_start sub_80FD430 -sub_80FD430: @ 80FD430 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - cmp r5, 0 - beq _080FD478 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r4, _080FD468 @ =gUnknown_3005E10 - ldr r2, _080FD46C @ =0x01000024 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - movs r0, 0xFF - strb r0, [r4, 0x6] - str r5, [r4, 0x40] - str r6, [r4, 0x44] - ldr r0, _080FD470 @ =sub_80FE394 - bl rfu_setMSCCallback - ldr r0, _080FD474 @ =sub_80FDC98 - bl rfu_setREQCallback - movs r0, 0 - b _080FD47A - .align 2, 0 -_080FD468: .4byte gUnknown_3005E10 -_080FD46C: .4byte 0x01000024 -_080FD470: .4byte sub_80FE394 -_080FD474: .4byte sub_80FDC98 -_080FD478: - movs r0, 0x4 -_080FD47A: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80FD430 - - thumb_func_start sub_80FD484 -sub_80FD484: @ 80FD484 - push {r4,lr} - sub sp, 0x4 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r4, _080FD4A8 @ =gUnknown_3005E10 - ldr r2, _080FD4AC @ =0x01000020 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - movs r0, 0xFF - strb r0, [r4, 0x6] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FD4A8: .4byte gUnknown_3005E10 -_080FD4AC: .4byte 0x01000020 - thumb_func_end sub_80FD484 - - thumb_func_start sub_80FD4B0 -sub_80FD4B0: @ 80FD4B0 - push {r4,lr} - adds r4, r0, 0 - bl sub_80FD4E4 - ldr r1, _080FD4E0 @ =gUnknown_3005E10 - movs r2, 0x1 - strb r2, [r1, 0x4] - movs r0, 0x2 - strb r0, [r1, 0x5] - str r4, [r1, 0x3C] - ldrb r0, [r4, 0x11] - strb r0, [r1, 0x9] - ldrh r0, [r4, 0x12] - strh r0, [r1, 0x32] - ldrh r0, [r4, 0x14] - strh r0, [r1, 0x18] - ldrb r0, [r4, 0x10] - cmp r0, 0 - beq _080FD4D8 - strb r2, [r1, 0xB] -_080FD4D8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FD4E0: .4byte gUnknown_3005E10 - thumb_func_end sub_80FD4B0 - - thumb_func_start sub_80FD4E4 -sub_80FD4E4: @ 80FD4E4 - push {r4,r5,lr} - ldr r2, _080FD528 @ =gUnknown_3005E10 - movs r0, 0 - strb r0, [r2, 0x5] - strb r0, [r2, 0x4] - movs r1, 0xFF - strb r1, [r2, 0x6] - strb r0, [r2, 0x7] - strb r0, [r2, 0x10] - strb r0, [r2, 0xC] - adds r1, r2, 0 - adds r1, 0x24 - strb r0, [r1] - adds r1, 0xC - strb r0, [r1] - movs r3, 0 - adds r5, r2, 0 - adds r5, 0x28 - movs r4, 0 - adds r2, 0x34 -_080FD50C: - lsls r1, r3, 1 - adds r0, r1, r5 - strh r4, [r0] - adds r1, r2 - strh r4, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _080FD50C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FD528: .4byte gUnknown_3005E10 - thumb_func_end sub_80FD4E4 - - thumb_func_start sub_80FD52C -sub_80FD52C: @ 80FD52C - ldr r1, _080FD534 @ =gUnknown_3005E10 - movs r0, 0x15 - strb r0, [r1, 0x4] - bx lr - .align 2, 0 -_080FD534: .4byte gUnknown_3005E10 - thumb_func_end sub_80FD52C - - thumb_func_start sub_80FD538 -sub_80FD538: @ 80FD538 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r3, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 16 - lsrs r2, 16 - mov r8, r2 - ldr r1, _080FD570 @ =gUnknown_3005E10 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _080FD574 - cmp r0, 0x8 - bne _080FD55E - cmp r5, 0x1 - beq _080FD574 -_080FD55E: - movs r0, 0x1 - strh r0, [r1, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x1 - b _080FD606 - .align 2, 0 -_080FD570: .4byte gUnknown_3005E10 -_080FD574: - bl rfu_getMasterSlave - lsls r0, 24 - cmp r0, 0 - bne _080FD594 - ldr r1, _080FD590 @ =gUnknown_3005E10 - movs r0, 0x2 - strh r0, [r1, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x2 - b _080FD606 - .align 2, 0 -_080FD590: .4byte gUnknown_3005E10 -_080FD594: - movs r2, 0 - ldrh r0, [r6] - ldr r4, _080FD5C8 @ =0x0000ffff - adds r1, r6, 0x2 - ldr r3, _080FD5CC @ =gUnknown_3005E10 - cmp r0, r4 - beq _080FD5B4 -_080FD5A2: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xF - bhi _080FD5B4 - ldrh r0, [r1] - adds r1, 0x2 - cmp r0, r4 - bne _080FD5A2 -_080FD5B4: - cmp r2, 0x10 - bne _080FD5D0 - movs r0, 0x4 - strh r0, [r3, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x4 - b _080FD606 - .align 2, 0 -_080FD5C8: .4byte 0x0000ffff -_080FD5CC: .4byte gUnknown_3005E10 -_080FD5D0: - cmp r5, 0x1 - bls _080FD5DE - movs r0, 0x1 - strb r0, [r3, 0x7] - movs r5, 0x1 - movs r7, 0 - b _080FD5E2 -_080FD5DE: - movs r0, 0 - strb r0, [r3, 0x7] -_080FD5E2: - cmp r5, 0 - beq _080FD5EC - movs r0, 0x5 - strb r0, [r3, 0x4] - b _080FD5FA -_080FD5EC: - movs r0, 0x9 - strb r0, [r3, 0x4] - ldrb r0, [r3, 0xB] - cmp r0, 0 - beq _080FD5FA - movs r0, 0x2 - strb r0, [r3, 0xB] -_080FD5FA: - strb r5, [r3, 0x6] - strh r7, [r3, 0x1A] - mov r0, r8 - strh r0, [r3, 0x26] - str r6, [r3, 0x20] - movs r0, 0 -_080FD606: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80FD538 - - thumb_func_start sub_80FD610 -sub_80FD610: @ 80FD610 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - ldr r1, _080FD644 @ =gUnknown_3005E10 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _080FD648 - subs r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bls _080FD648 - movs r0, 0x1 - strh r0, [r1, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x1 - b _080FD6E8 - .align 2, 0 -_080FD644: .4byte gUnknown_3005E10 -_080FD648: - bl rfu_getMasterSlave - lsls r0, 24 - cmp r0, 0 - bne _080FD668 - ldr r1, _080FD664 @ =gUnknown_3005E10 - movs r0, 0x2 - strh r0, [r1, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x2 - b _080FD6E8 - .align 2, 0 -_080FD664: .4byte gUnknown_3005E10 -_080FD668: - movs r2, 0 - ldr r0, _080FD6B4 @ =gRfuLinkStatus - ldr r1, [r0] - ldrb r3, [r1, 0x8] - ldr r5, _080FD6B8 @ =gUnknown_3005E10 - adds r7, r0, 0 - cmp r2, r3 - bcs _080FD696 - ldrh r0, [r1, 0x14] - cmp r0, r6 - beq _080FD696 - adds r4, r1, 0 - adds r1, r3, 0 -_080FD682: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r1 - bcs _080FD696 - lsls r0, r2, 5 - adds r0, r4, r0 - ldrh r0, [r0, 0x14] - cmp r0, r6 - bne _080FD682 -_080FD696: - ldr r0, [r7] - ldrb r0, [r0, 0x8] - cmp r0, 0 - beq _080FD6A2 - cmp r2, r0 - bne _080FD6BC -_080FD6A2: - movs r0, 0x3 - strh r0, [r5, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x3 - b _080FD6E8 - .align 2, 0 -_080FD6B4: .4byte gRfuLinkStatus -_080FD6B8: .4byte gUnknown_3005E10 -_080FD6BC: - ldrb r0, [r5, 0x4] - cmp r0, 0 - beq _080FD6C6 - cmp r0, 0x9 - bne _080FD6CE -_080FD6C6: - movs r0, 0xC - strb r0, [r5, 0x4] - movs r0, 0xD - b _080FD6D4 -_080FD6CE: - movs r0, 0xB - strb r0, [r5, 0x4] - movs r0, 0xC -_080FD6D4: - strb r0, [r5, 0x5] - strh r6, [r5, 0x1E] - mov r0, r8 - strh r0, [r5, 0x1A] - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _080FD6E6 - movs r0, 0x7 - strb r0, [r5, 0x7] -_080FD6E6: - movs r0, 0 -_080FD6E8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80FD610 - - thumb_func_start sub_80FD6F4 -sub_80FD6F4: @ 80FD6F4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r6, _080FD758 @ =gUnknown_3005E10 - adds r3, r6, 0 - adds r3, 0x30 - ldrb r2, [r3] - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _080FD750 - adds r0, r2, 0 - bics r0, r1 - strb r0, [r3] - movs r4, 0 - ldr r7, _080FD75C @ =gRfuLinkStatus - movs r5, 0x1 - adds r3, 0x4 - movs r2, 0 -_080FD71A: - adds r0, r1, 0 - asrs r0, r4 - ands r0, r5 - cmp r0, 0 - beq _080FD72A - lsls r0, r4, 1 - adds r0, r3 - strh r2, [r0] -_080FD72A: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080FD71A - ldr r0, [r7] - ldrb r4, [r0, 0x3] - ands r4, r1 - cmp r4, 0 - beq _080FD744 - adds r0, r4, 0 - bl sub_80FE818 -_080FD744: - ldr r0, _080FD758 @ =gUnknown_3005E10 - strh r4, [r0, 0x14] - movs r0, 0x33 - adds r1, r4, 0 - bl sub_80FE7F0 -_080FD750: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FD758: .4byte gUnknown_3005E10 -_080FD75C: .4byte gRfuLinkStatus - thumb_func_end sub_80FD6F4 - - thumb_func_start sub_80FD760 -sub_80FD760: @ 80FD760 - push {r4,r5,lr} - lsls r0, 24 - movs r2, 0 - ldr r1, _080FD77C @ =gUnknown_3005E10 - strb r2, [r1, 0x7] - adds r5, r1, 0 - cmp r0, 0 - beq _080FD780 - bl sub_80FD4E4 - movs r0, 0x17 - strb r0, [r5, 0x4] - b _080FD84A - .align 2, 0 -_080FD77C: .4byte gUnknown_3005E10 -_080FD780: - ldrb r0, [r5, 0x4] - subs r0, 0x5 - cmp r0, 0xD - bhi _080FD836 - lsls r0, 2 - ldr r1, _080FD794 @ =_080FD798 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FD794: .4byte _080FD798 - .align 2, 0 -_080FD798: - .4byte _080FD7D0 - .4byte _080FD7DC - .4byte _080FD7DC - .4byte _080FD83C - .4byte _080FD7E6 - .4byte _080FD7F0 - .4byte _080FD7F0 - .4byte _080FD7FA - .4byte _080FD804 - .4byte _080FD804 - .4byte _080FD83C - .4byte _080FD80A - .4byte _080FD830 - .4byte _080FD830 -_080FD7D0: - movs r1, 0 - movs r0, 0x8 - strb r0, [r5, 0x4] - strb r1, [r5, 0x5] - movs r2, 0x13 - b _080FD83C -_080FD7DC: - movs r0, 0x7 - strb r0, [r5, 0x4] - movs r0, 0x8 - strb r0, [r5, 0x5] - b _080FD83C -_080FD7E6: - movs r0, 0 - strb r0, [r5, 0x5] - strb r0, [r5, 0x4] - movs r2, 0x21 - b _080FD83C -_080FD7F0: - movs r1, 0 - movs r0, 0xB - strb r0, [r5, 0x4] - strb r1, [r5, 0x5] - b _080FD83C -_080FD7FA: - movs r0, 0 - strb r0, [r5, 0x5] - strb r0, [r5, 0x4] - movs r2, 0x23 - b _080FD83C -_080FD804: - movs r0, 0xE - strb r0, [r5, 0x4] - b _080FD83C -_080FD80A: - ldrb r0, [r5, 0x11] - strb r0, [r5, 0x4] - ldrb r0, [r5, 0x12] - strb r0, [r5, 0x5] - ldr r4, _080FD82C @ =gRfuLinkStatus - ldr r0, [r4] - ldrb r0, [r0, 0x3] - bl sub_80FE818 - ldr r0, [r4] - ldrb r0, [r0, 0x3] - strh r0, [r5, 0x14] - movs r0, 0x33 - movs r1, 0x1 - bl sub_80FE7F0 - b _080FD84A - .align 2, 0 -_080FD82C: .4byte gRfuLinkStatus -_080FD830: - movs r0, 0x12 - strb r0, [r5, 0x4] - b _080FD83C -_080FD836: - strb r2, [r5, 0x5] - strb r2, [r5, 0x4] - movs r2, 0x43 -_080FD83C: - ldrb r0, [r5, 0x4] - cmp r0, 0 - bne _080FD84A - adds r0, r2, 0 - movs r1, 0 - bl sub_80FE7F0 -_080FD84A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80FD760 - - thumb_func_start sub_80FD850 -sub_80FD850: @ 80FD850 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0 - mov r8, r1 - mov r5, sp - adds r5, 0x1 - mov r4, sp - adds r4, 0x2 - mov r1, sp - adds r2, r5, 0 - adds r3, r4, 0 - bl rfu_REQBN_watchLink - mov r0, sp - ldrb r0, [r0] - adds r7, r4, 0 - cmp r0, 0 - beq _080FD922 - ldr r1, _080FD8EC @ =gUnknown_3005E10 - mov r0, sp - ldrb r0, [r0] - strh r0, [r1, 0x14] - ldrb r0, [r5] - strh r0, [r1, 0x16] - ldrb r0, [r1, 0x9] - adds r6, r1, 0 - cmp r0, 0 - beq _080FD90A - movs r0, 0x1 - strb r0, [r6, 0xA] - ldrb r0, [r6, 0x6] - cmp r0, 0 - bne _080FD8A6 - ldrb r0, [r5] - cmp r0, 0 - bne _080FD8A6 - movs r0, 0x4 - strb r0, [r6, 0xA] -_080FD8A6: - ldrb r0, [r6, 0xA] - cmp r0, 0x1 - bne _080FD8F0 - movs r2, 0 - mov r4, sp - movs r5, 0x1 - mov r12, r6 - mov r3, r12 - adds r3, 0x30 - movs r6, 0x34 - add r6, r12 - mov r9, r6 -_080FD8BE: - ldrb r0, [r4] - asrs r0, r2 - ands r0, r5 - cmp r0, 0 - beq _080FD8DC - adds r0, r5, 0 - lsls r0, r2 - ldrb r1, [r3] - orrs r0, r1 - strb r0, [r3] - lsls r0, r2, 1 - add r0, r9 - mov r6, r12 - ldrh r1, [r6, 0x32] - strh r1, [r0] -_080FD8DC: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _080FD8BE - movs r0, 0x31 - b _080FD902 - .align 2, 0 -_080FD8EC: .4byte gUnknown_3005E10 -_080FD8F0: - movs r0, 0 - strb r0, [r6, 0xA] - mov r0, sp - ldrb r0, [r0] - bl sub_80FE818 - movs r0, 0x1 - mov r8, r0 - movs r0, 0x33 -_080FD902: - movs r1, 0x1 - bl sub_80FE7F0 - b _080FD91E -_080FD90A: - mov r0, sp - ldrb r0, [r0] - bl sub_80FE818 - movs r1, 0x1 - mov r8, r1 - movs r0, 0x30 - movs r1, 0x2 - bl sub_80FE7F0 -_080FD91E: - bl sub_80FEAF4 -_080FD922: - ldr r0, _080FDA0C @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FD9FC - ldrb r0, [r7] - cmp r0, 0 - beq _080FD980 - movs r2, 0 - ldr r6, _080FDA10 @ =gUnknown_3005E10 - movs r3, 0x1 - adds r4, r6, 0 - adds r4, 0x34 - adds r6, 0x30 - adds r5, r7, 0 -_080FD940: - ldrb r0, [r6] - asrs r0, r2 - ands r0, r3 - cmp r0, 0 - beq _080FD95C - ldrb r0, [r5] - asrs r0, r2 - ands r0, r3 - cmp r0, 0 - beq _080FD95C - lsls r0, r2, 1 - adds r0, r4 - movs r1, 0 - strh r1, [r0] -_080FD95C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _080FD940 - ldr r3, _080FDA10 @ =gUnknown_3005E10 - adds r2, r3, 0 - adds r2, 0x30 - ldrb r1, [r7] - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldrb r0, [r7] - strh r0, [r3, 0x14] - movs r0, 0x32 - movs r1, 0x1 - bl sub_80FE7F0 -_080FD980: - ldr r0, _080FDA10 @ =gUnknown_3005E10 - adds r3, r0, 0 - adds r3, 0x30 - ldrb r1, [r3] - adds r6, r0, 0 - cmp r1, 0 - beq _080FD9F8 - movs r4, 0 - movs r2, 0 - movs r5, 0x1 -_080FD994: - ldrb r0, [r3] - asrs r0, r2 - ands r0, r5 - cmp r0, 0 - beq _080FD9C6 - lsls r1, r2, 1 - adds r0, r6, 0 - adds r0, 0x34 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - beq _080FD9C6 - subs r0, 0x1 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bne _080FD9C6 - adds r0, r5, 0 - lsls r0, r2 - ldrb r1, [r3] - bics r1, r0 - strb r1, [r3] - orrs r4, r0 - lsls r0, r4, 24 - lsrs r4, r0, 24 -_080FD9C6: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _080FD994 - cmp r4, 0 - beq _080FD9EA - adds r0, r4, 0 - bl sub_80FE818 - movs r6, 0x1 - mov r8, r6 - ldr r0, _080FDA10 @ =gUnknown_3005E10 - strh r4, [r0, 0x14] - movs r0, 0x33 - movs r1, 0x1 - bl sub_80FE7F0 -_080FD9EA: - ldr r0, _080FDA10 @ =gUnknown_3005E10 - adds r1, r0, 0 - adds r1, 0x30 - ldrb r1, [r1] - adds r6, r0, 0 - cmp r1, 0 - bne _080FD9FC -_080FD9F8: - movs r0, 0 - strb r0, [r6, 0xA] -_080FD9FC: - mov r0, r8 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080FDA0C: .4byte gRfuLinkStatus -_080FDA10: .4byte gUnknown_3005E10 - thumb_func_end sub_80FD850 - - thumb_func_start rfu_syncVBlank_ -rfu_syncVBlank_: @ 80FDA14 - push {lr} - bl rfu_syncVBlank - lsls r0, 16 - cmp r0, 0 - beq _080FDA2C - movs r0, 0xF1 - movs r1, 0 - bl sub_80FE7F0 - bl sub_80FEAF4 -_080FDA2C: - pop {r0} - bx r0 - thumb_func_end rfu_syncVBlank_ - - thumb_func_start sub_80FDA30 -sub_80FDA30: @ 80FDA30 - push {r4,lr} - adds r3, r0, 0 - ldr r1, _080FDA48 @ =gUnknown_3005E10 - ldr r2, [r1, 0x40] - cmp r2, 0 - bne _080FDA4C - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _080FDA4C - strb r2, [r1, 0x4] - b _080FDC1A - .align 2, 0 -_080FDA48: .4byte gUnknown_3005E10 -_080FDA4C: - ldr r0, _080FDA80 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x7] - cmp r0, 0 - beq _080FDA5A - adds r0, r3, 0 - bl sub_80FDC28 -_080FDA5A: - ldr r4, _080FDA80 @ =gUnknown_3005E10 - ldrb r0, [r4, 0x4] - cmp r0, 0 - bne _080FDA64 - b _080FDBE4 -_080FDA64: - bl rfu_waitREQComplete - movs r0, 0x1 - strb r0, [r4, 0xE] - ldrb r0, [r4, 0x4] - subs r0, 0x1 - cmp r0, 0x16 - bls _080FDA76 - b _080FDBDA -_080FDA76: - lsls r0, 2 - ldr r1, _080FDA84 @ =_080FDA88 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FDA80: .4byte gUnknown_3005E10 -_080FDA84: .4byte _080FDA88 - .align 2, 0 -_080FDA88: - .4byte _080FDB08 - .4byte _080FDB40 - .4byte _080FDB46 - .4byte _080FDB5C - .4byte _080FDB74 - .4byte _080FDB7A - .4byte _080FDB80 - .4byte _080FDBDA - .4byte _080FDB86 - .4byte _080FDB8C - .4byte _080FDB92 - .4byte _080FDB98 - .4byte _080FDBA8 - .4byte _080FDBAE - .4byte _080FDBDA - .4byte _080FDBB4 - .4byte _080FDBC4 - .4byte _080FDBCA - .4byte _080FDBD0 - .4byte _080FDBDA - .4byte _080FDBD6 - .4byte _080FDBDA - .4byte _080FDAE4 -_080FDAE4: - bl sub_80FD3A4 - ldr r1, _080FDB00 @ =0x00008001 - movs r2, 0xFF - cmp r0, r1 - bne _080FDAF2 - movs r2, 0x44 -_080FDAF2: - ldr r1, _080FDB04 @ =gUnknown_3005E10 - movs r0, 0 - strb r0, [r1, 0x5] - strb r0, [r1, 0x4] - adds r0, r2, 0 - b _080FDB32 - .align 2, 0 -_080FDB00: .4byte 0x00008001 -_080FDB04: .4byte gUnknown_3005E10 -_080FDB08: - bl sub_80FD3A4 - ldr r1, _080FDB20 @ =0x00008001 - cmp r0, r1 - bne _080FDB28 - ldr r0, _080FDB24 @ =gUnknown_3005E10 - ldrb r1, [r0, 0x5] - strb r1, [r0, 0x4] - movs r1, 0x3 - strb r1, [r0, 0x5] - b _080FDBDA - .align 2, 0 -_080FDB20: .4byte 0x00008001 -_080FDB24: .4byte gUnknown_3005E10 -_080FDB28: - ldr r1, _080FDB3C @ =gUnknown_3005E10 - movs r0, 0 - strb r0, [r1, 0x5] - strb r0, [r1, 0x4] - movs r0, 0xFF -_080FDB32: - movs r1, 0 - bl sub_80FE7F0 - b _080FDBDA - .align 2, 0 -_080FDB3C: .4byte gUnknown_3005E10 -_080FDB40: - bl rfu_REQ_reset - b _080FDBDA -_080FDB46: - ldr r0, _080FDB58 @ =gUnknown_3005E10 - ldr r2, [r0, 0x3C] - ldrh r0, [r2, 0x2] - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - bl rfu_REQ_configSystem - b _080FDBDA - .align 2, 0 -_080FDB58: .4byte gUnknown_3005E10 -_080FDB5C: - ldr r0, _080FDB70 @ =gUnknown_3005E10 - ldr r3, [r0, 0x3C] - ldrb r0, [r3, 0x4] - ldrh r1, [r3, 0x6] - ldr r2, [r3, 0x8] - ldr r3, [r3, 0xC] - bl rfu_REQ_configGameData - b _080FDBDA - .align 2, 0 -_080FDB70: .4byte gUnknown_3005E10 -_080FDB74: - bl rfu_REQ_startSearchChild - b _080FDBDA -_080FDB7A: - bl rfu_REQ_pollSearchChild - b _080FDBDA -_080FDB80: - bl rfu_REQ_endSearchChild - b _080FDBDA -_080FDB86: - bl rfu_REQ_startSearchParent - b _080FDBDA -_080FDB8C: - bl rfu_REQ_pollSearchParent - b _080FDBDA -_080FDB92: - bl rfu_REQ_endSearchParent - b _080FDBDA -_080FDB98: - ldr r0, _080FDBA4 @ =gUnknown_3005E10 - ldrh r0, [r0, 0x1E] - bl rfu_REQ_startConnectParent - b _080FDBDA - .align 2, 0 -_080FDBA4: .4byte gUnknown_3005E10 -_080FDBA8: - bl rfu_REQ_pollConnectParent - b _080FDBDA -_080FDBAE: - bl rfu_REQ_endConnectParent - b _080FDBDA -_080FDBB4: - ldr r0, _080FDBC0 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x3] - bl rfu_REQ_CHILD_startConnectRecovery - b _080FDBDA - .align 2, 0 -_080FDBC0: .4byte gRfuLinkStatus -_080FDBC4: - bl rfu_REQ_CHILD_pollConnectRecovery - b _080FDBDA -_080FDBCA: - bl rfu_REQ_CHILD_endConnectRecovery - b _080FDBDA -_080FDBD0: - bl rfu_REQ_changeMasterSlave - b _080FDBDA -_080FDBD6: - bl rfu_REQ_stopMode -_080FDBDA: - bl rfu_waitREQComplete - ldr r1, _080FDC20 @ =gUnknown_3005E10 - movs r0, 0 - strb r0, [r1, 0xE] -_080FDBE4: - ldr r0, _080FDC20 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x4] - subs r0, 0x12 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080FDBF4 - b _080FDA5A -_080FDBF4: - ldr r0, _080FDC24 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FDC0A - movs r0, 0 - bl sub_80FD850 - lsls r0, 24 - cmp r0, 0 - bne _080FDC1A -_080FDC0A: - bl sub_80FE418 - bl sub_80FE63C - bl sub_80FE74C - bl sub_80FE918 -_080FDC1A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FDC20: .4byte gUnknown_3005E10 -_080FDC24: .4byte gRfuLinkStatus - thumb_func_end sub_80FDA30 - - thumb_func_start sub_80FDC28 -sub_80FDC28: @ 80FDC28 - push {r4,lr} - adds r3, r0, 0 - ldr r0, _080FDC4C @ =gUnknown_3005E10 - ldrb r1, [r0, 0x7] - adds r4, r0, 0 - cmp r1, 0x5 - bne _080FDC52 - movs r2, 0x1 - strb r2, [r4, 0x6] - strb r1, [r4, 0x4] - ldrh r0, [r4, 0x1C] - strh r0, [r4, 0x1A] - lsls r0, 16 - cmp r0, 0 - beq _080FDC50 - movs r0, 0x6 - strb r0, [r4, 0x7] - b _080FDC52 - .align 2, 0 -_080FDC4C: .4byte gUnknown_3005E10 -_080FDC50: - strb r2, [r4, 0x7] -_080FDC52: - ldrb r0, [r4, 0x7] - cmp r0, 0x1 - bne _080FDC7C - strb r0, [r4, 0x6] - movs r0, 0x5 - strb r0, [r4, 0x4] - adds r0, r3, 0 - movs r1, 0x8C - bl __umodsi3 - strh r0, [r4, 0x1A] - movs r1, 0x8C - subs r1, r0 - strh r1, [r4, 0x1C] - lsls r0, 16 - cmp r0, 0 - beq _080FDC78 - movs r0, 0x2 - b _080FDC7A -_080FDC78: - movs r0, 0x3 -_080FDC7A: - strb r0, [r4, 0x7] -_080FDC7C: - ldrb r0, [r4, 0x7] - cmp r0, 0x3 - bne _080FDC92 - movs r0, 0 - strb r0, [r4, 0x6] - movs r0, 0x28 - strh r0, [r4, 0x1A] - movs r0, 0x4 - strb r0, [r4, 0x7] - movs r0, 0x9 - strb r0, [r4, 0x4] -_080FDC92: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80FDC28 - - thumb_func_start sub_80FDC98 -sub_80FDC98: @ 80FDC98 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r0, _080FDCD0 @ =gUnknown_3005E10 - ldrb r1, [r0, 0xE] - adds r7, r0, 0 - cmp r1, 0 - bne _080FDCB6 - b _080FE17C -_080FDCB6: - movs r0, 0 - strb r0, [r7, 0xE] - mov r0, r8 - subs r0, 0x10 - cmp r0, 0x2D - bls _080FDCC4 - b _080FE16E -_080FDCC4: - lsls r0, 2 - ldr r1, _080FDCD4 @ =_080FDCD8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FDCD0: .4byte gUnknown_3005E10 -_080FDCD4: .4byte _080FDCD8 - .align 2, 0 -_080FDCD8: - .4byte _080FDD90 - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FDDBC - .4byte _080FDDA8 - .4byte _080FE16E - .4byte _080FDDD0 - .4byte _080FDDE0 - .4byte _080FDE04 - .4byte _080FDE24 - .4byte _080FDE44 - .4byte _080FDEB4 - .4byte _080FDEE6 - .4byte _080FDEFC - .4byte _080FDF44 - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE0BC - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FDFB4 - .4byte _080FE000 - .4byte _080FE048 - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE16E - .4byte _080FE15C -_080FDD90: - cmp r6, 0 - beq _080FDD96 - b _080FE16E -_080FDD96: - ldr r0, _080FDDA4 @ =gUnknown_3005E10 - ldrb r1, [r0, 0x5] - strb r1, [r0, 0x4] - movs r1, 0x4 - strb r1, [r0, 0x5] - b _080FE16E - .align 2, 0 -_080FDDA4: .4byte gUnknown_3005E10 -_080FDDA8: - cmp r6, 0 - beq _080FDDAE - b _080FE16E -_080FDDAE: - ldr r0, _080FDDB8 @ =gUnknown_3005E10 - ldrb r1, [r0, 0x5] - strb r1, [r0, 0x4] - strb r6, [r0, 0x5] - b _080FE16E - .align 2, 0 -_080FDDB8: .4byte gUnknown_3005E10 -_080FDDBC: - cmp r6, 0 - beq _080FDDC2 - b _080FE16E -_080FDDC2: - ldr r0, _080FDDCC @ =gUnknown_3005E10 - strb r6, [r0, 0x5] - strb r6, [r0, 0x4] - movs r0, 0 - b _080FE0DA - .align 2, 0 -_080FDDCC: .4byte gUnknown_3005E10 -_080FDDD0: - cmp r6, 0 - beq _080FDDD6 - b _080FE16E -_080FDDD6: - ldr r1, _080FDDDC @ =gUnknown_3005E10 - movs r0, 0x6 - b _080FDEF0 - .align 2, 0 -_080FDDDC: .4byte gUnknown_3005E10 -_080FDDE0: - ldr r1, _080FDE00 @ =gUnknown_3005E10 - ldrh r0, [r1, 0x1A] - cmp r0, 0 - bne _080FDDEA - b _080FE16E -_080FDDEA: - subs r0, 0x1 - strh r0, [r1, 0x1A] - lsls r0, 16 - cmp r0, 0 - beq _080FDDF6 - b _080FE16E -_080FDDF6: - movs r0, 0x7 - strb r0, [r1, 0x4] - movs r0, 0x8 - strb r0, [r1, 0x5] - b _080FE16E - .align 2, 0 -_080FDE00: .4byte gUnknown_3005E10 -_080FDE04: - cmp r6, 0 - beq _080FDE0A - b _080FE16E -_080FDE0A: - ldr r0, _080FDE20 @ =gUnknown_3005E10 - ldrb r1, [r0, 0x5] - strb r1, [r0, 0x4] - strb r6, [r0, 0x5] - ldrb r0, [r0, 0x7] - cmp r0, 0 - beq _080FDE1A - b _080FE16E -_080FDE1A: - movs r0, 0x13 - b _080FE0DA - .align 2, 0 -_080FDE20: .4byte gUnknown_3005E10 -_080FDE24: - cmp r6, 0 - beq _080FDE2A - b _080FE16E -_080FDE2A: - ldrb r0, [r7, 0xB] - cmp r0, 0x1 - bne _080FDE3A - ldrh r0, [r7, 0x1A] - cmp r0, 0x1 - bls _080FDE3A - subs r0, 0x1 - strh r0, [r7, 0x1A] -_080FDE3A: - ldr r1, _080FDE40 @ =gUnknown_3005E10 - movs r0, 0xA - b _080FDEF0 - .align 2, 0 -_080FDE40: .4byte gUnknown_3005E10 -_080FDE44: - cmp r6, 0 - bne _080FDE8A - bl sub_80FE778 - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - strb r0, [r1] - ldr r4, _080FDEAC @ =gUnknown_3005E10 - strh r0, [r4, 0x14] - cmp r0, 0 - beq _080FDE64 - movs r0, 0x20 - movs r1, 0x1 - bl sub_80FE7F0 -_080FDE64: - ldrb r0, [r4, 0xB] - cmp r0, 0 - beq _080FDE8A - ldrh r0, [r4, 0x1A] - cmp r0, 0x1 - beq _080FDE8A - ldr r0, _080FDEB0 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0x4 - bne _080FDE8A - bl rfu_REQ_endSearchParent - bl rfu_waitREQComplete - movs r0, 0x9 - strb r0, [r4, 0x4] - movs r0, 0x1 - strb r0, [r4, 0xB] -_080FDE8A: - ldr r1, _080FDEAC @ =gUnknown_3005E10 - ldrh r0, [r1, 0x1A] - cmp r0, 0 - bne _080FDE94 - b _080FE16E -_080FDE94: - subs r0, 0x1 - strh r0, [r1, 0x1A] - lsls r0, 16 - cmp r0, 0 - beq _080FDEA0 - b _080FE16E -_080FDEA0: - movs r0, 0xB - strb r0, [r1, 0x4] - movs r0, 0 - strb r0, [r1, 0x5] - b _080FE16E - .align 2, 0 -_080FDEAC: .4byte gUnknown_3005E10 -_080FDEB0: .4byte gRfuLinkStatus -_080FDEB4: - cmp r6, 0 - beq _080FDEBA - b _080FE16E -_080FDEBA: - ldr r2, _080FDED4 @ =gUnknown_3005E10 - ldrb r0, [r2, 0x5] - strb r0, [r2, 0x4] - ldrb r1, [r2, 0x7] - cmp r1, 0 - bne _080FDED8 - lsls r0, 24 - cmp r0, 0 - beq _080FDECE - b _080FE16E -_080FDECE: - movs r0, 0x21 - b _080FE0DA - .align 2, 0 -_080FDED4: .4byte gUnknown_3005E10 -_080FDED8: - cmp r1, 0x7 - bne _080FDEDE - b _080FE16E -_080FDEDE: - movs r0, 0x5 - strb r0, [r2, 0x4] - strb r0, [r2, 0x7] - b _080FE16E -_080FDEE6: - cmp r6, 0 - beq _080FDEEC - b _080FE16E -_080FDEEC: - ldr r1, _080FDEF8 @ =gUnknown_3005E10 - movs r0, 0xD -_080FDEF0: - strb r0, [r1, 0x5] - strb r0, [r1, 0x4] - b _080FE16E - .align 2, 0 -_080FDEF8: .4byte gUnknown_3005E10 -_080FDEFC: - cmp r6, 0 - bne _080FDF20 - ldr r4, _080FDF3C @ =gUnknown_3005E20 - mov r0, sp - adds r1, r4, 0 - bl rfu_getConnectParentStatus - lsls r0, 16 - cmp r0, 0 - bne _080FDF20 - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - bne _080FDF20 - adds r1, r4, 0 - subs r1, 0x10 - movs r0, 0xE - strb r0, [r1, 0x4] -_080FDF20: - ldr r1, _080FDF40 @ =gUnknown_3005E10 - ldrh r0, [r1, 0x1A] - cmp r0, 0 - bne _080FDF2A - b _080FE16E -_080FDF2A: - subs r0, 0x1 - strh r0, [r1, 0x1A] - lsls r0, 16 - cmp r0, 0 - beq _080FDF36 - b _080FE16E -_080FDF36: - movs r0, 0xE - strb r0, [r1, 0x4] - b _080FE16E - .align 2, 0 -_080FDF3C: .4byte gUnknown_3005E20 -_080FDF40: .4byte gUnknown_3005E10 -_080FDF44: - cmp r6, 0 - beq _080FDF4A - b _080FE16E -_080FDF4A: - ldr r4, _080FDF7C @ =gUnknown_3005E20 - mov r0, sp - adds r1, r4, 0 - bl rfu_getConnectParentStatus - lsls r0, 16 - cmp r0, 0 - beq _080FDF5C - b _080FE16E -_080FDF5C: - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - bne _080FDF80 - adds r1, r4, 0 - subs r1, 0x10 - movs r0, 0x13 - strb r0, [r1, 0x4] - movs r0, 0xF - strb r0, [r1, 0x5] - movs r0, 0x22 - strh r0, [r1, 0x1E] - ldrb r0, [r1, 0x10] - strh r0, [r1, 0x14] - b _080FDFA0 - .align 2, 0 -_080FDF7C: .4byte gUnknown_3005E20 -_080FDF80: - adds r1, r4, 0 - subs r1, 0x10 - strb r6, [r1, 0x5] - strb r6, [r1, 0x4] - movs r0, 0x23 - strh r0, [r1, 0x1E] - mov r0, sp - ldrb r0, [r0] - strh r0, [r1, 0x14] - ldrb r0, [r1, 0x7] - cmp r0, 0 - beq _080FDFA0 - movs r0, 0x3 - strb r0, [r1, 0x7] - movs r0, 0x9 - strb r0, [r1, 0x4] -_080FDFA0: - ldr r4, _080FDFB0 @ =gUnknown_3005E10 - ldrb r0, [r4, 0x1E] - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0 - strh r0, [r4, 0x1E] - b _080FE16E - .align 2, 0 -_080FDFB0: .4byte gUnknown_3005E10 -_080FDFB4: - cmp r6, 0 - beq _080FDFBA - b _080FE16E -_080FDFBA: - ldr r2, _080FDFFC @ =gRfuLinkStatus - ldr r3, [r2] - ldrb r0, [r3, 0x3] - movs r1, 0 - strh r0, [r7, 0x14] - movs r0, 0x11 - strb r0, [r7, 0x5] - strb r0, [r7, 0x4] - strb r1, [r7, 0x10] - ldrb r0, [r3, 0x3] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FDFD8 - b _080FE16E -_080FDFD8: - adds r1, r7, 0 - movs r3, 0x1 -_080FDFDC: - ldrb r0, [r1, 0x10] - adds r0, 0x1 - strb r0, [r1, 0x10] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _080FDFEC - b _080FE16E -_080FDFEC: - ldr r0, [r2] - ldrb r0, [r0, 0x3] - ldrb r4, [r7, 0x10] - asrs r0, r4 - ands r0, r3 - cmp r0, 0 - beq _080FDFDC - b _080FE16E - .align 2, 0 -_080FDFFC: .4byte gRfuLinkStatus -_080FE000: - cmp r6, 0 - bne _080FE01E - mov r0, sp - bl rfu_CHILD_getConnectRecoveryStatus - lsls r0, 16 - cmp r0, 0 - bne _080FE01E - mov r0, sp - ldrb r0, [r0] - cmp r0, 0x1 - bhi _080FE01E - ldr r1, _080FE044 @ =gUnknown_3005E10 - movs r0, 0x12 - strb r0, [r1, 0x4] -_080FE01E: - ldr r2, _080FE044 @ =gUnknown_3005E10 - ldrb r0, [r2, 0x10] - lsls r0, 1 - adds r1, r2, 0 - adds r1, 0x34 - adds r1, r0, r1 - ldrh r0, [r1] - cmp r0, 0 - bne _080FE032 - b _080FE16E -_080FE032: - subs r0, 0x1 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - beq _080FE03E - b _080FE16E -_080FE03E: - movs r0, 0x12 - strb r0, [r2, 0x4] - b _080FE16E - .align 2, 0 -_080FE044: .4byte gUnknown_3005E10 -_080FE048: - cmp r6, 0 - beq _080FE04E - b _080FE16E -_080FE04E: - mov r0, sp - bl rfu_CHILD_getConnectRecoveryStatus - lsls r0, 16 - cmp r0, 0 - beq _080FE05C - b _080FE16E -_080FE05C: - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - bne _080FE078 - ldr r1, _080FE074 @ =gUnknown_3005E10 - movs r0, 0x13 - strb r0, [r1, 0x4] - movs r0, 0x16 - strb r0, [r1, 0x5] - movs r0, 0x32 - strh r0, [r1, 0x1E] - b _080FE08C - .align 2, 0 -_080FE074: .4byte gUnknown_3005E10 -_080FE078: - ldr r4, _080FE0B4 @ =gUnknown_3005E10 - strb r6, [r4, 0x5] - strb r6, [r4, 0x4] - ldr r0, _080FE0B8 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x3] - bl sub_80FE818 - movs r0, 0x33 - strh r0, [r4, 0x1E] -_080FE08C: - ldr r5, _080FE0B4 @ =gUnknown_3005E10 - ldrb r0, [r5, 0x10] - lsls r0, 1 - adds r1, r5, 0 - adds r1, 0x34 - adds r0, r1 - movs r1, 0 - movs r4, 0 - strh r4, [r0] - adds r0, r5, 0 - adds r0, 0x30 - strb r1, [r0] - strb r1, [r5, 0xA] - ldrb r0, [r5, 0x1E] - movs r1, 0x1 - bl sub_80FE7F0 - strh r4, [r5, 0x1E] - b _080FE16E - .align 2, 0 -_080FE0B4: .4byte gUnknown_3005E10 -_080FE0B8: .4byte gRfuLinkStatus -_080FE0BC: - cmp r6, 0 - bne _080FE16E - ldr r5, _080FE0E4 @ =gUnknown_3005E10 - ldrb r1, [r5, 0x5] - adds r0, r1, 0 - cmp r0, 0x16 - bne _080FE0E8 - ldrb r0, [r5, 0x11] - strb r0, [r5, 0x4] - ldrb r0, [r5, 0x12] - strb r0, [r5, 0x5] - ldrb r0, [r5, 0x2] - movs r0, 0x1 - strb r0, [r5, 0x2] - movs r0, 0x41 -_080FE0DA: - movs r1, 0 - bl sub_80FE7F0 - b _080FE16E - .align 2, 0 -_080FE0E4: .4byte gUnknown_3005E10 -_080FE0E8: - cmp r0, 0xF - bne _080FE16E - strb r1, [r5, 0x4] - ldrb r0, [r5, 0x2] - movs r4, 0x1 - strb r4, [r5, 0x2] - movs r0, 0x41 - movs r1, 0 - bl sub_80FE7F0 - adds r1, r5, 0 - adds r1, 0x24 - ldrb r0, [r5, 0x10] - lsls r4, r0 - ldrb r0, [r1] - orrs r4, r0 - strb r4, [r1] - ldrb r0, [r5, 0x10] - lsls r0, 1 - adds r1, 0x4 - adds r0, r1 - ldrh r1, [r5, 0x26] - movs r7, 0 - strh r1, [r0] - ldrb r1, [r5, 0x10] - movs r0, 0x4 - bl rfu_clearSlot - mov r4, sp - ldrb r0, [r5, 0x10] - movs r1, 0xE - bl rfu_NI_CHILD_setSendGameName - strb r0, [r4] - lsls r0, 24 - cmp r0, 0 - beq _080FE16E - strb r7, [r5, 0x5] - strb r7, [r5, 0x4] - bl sub_80FEAF4 - ldr r0, _080FE158 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - orrs r0, r1 - bl sub_80FE818 - mov r0, sp - ldrb r0, [r0] - strh r0, [r5, 0x14] - movs r0, 0x25 - movs r1, 0x1 - bl sub_80FE7F0 - b _080FE16E - .align 2, 0 -_080FE158: .4byte gRfuLinkStatus -_080FE15C: - cmp r6, 0 - bne _080FE16E - ldr r0, _080FE178 @ =gUnknown_3005E10 - strb r6, [r0, 0x5] - strb r6, [r0, 0x4] - movs r0, 0x42 - movs r1, 0 - bl sub_80FE7F0 -_080FE16E: - ldr r1, _080FE178 @ =gUnknown_3005E10 - movs r0, 0x1 - strb r0, [r1, 0xE] - b _080FE1CA - .align 2, 0 -_080FE178: .4byte gUnknown_3005E10 -_080FE17C: - cmp r6, 0x3 - bne _080FE1CA - ldrb r0, [r7, 0xF] - cmp r0, 0 - beq _080FE1CA - mov r3, r8 - cmp r3, 0x24 - beq _080FE194 - cmp r3, 0x26 - beq _080FE194 - cmp r3, 0x27 - bne _080FE1CA -_080FE194: - bl rfu_REQ_RFUStatus - bl rfu_waitREQComplete - mov r0, sp - bl rfu_getRFUStatus - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - bne _080FE1CA - ldr r4, _080FE1E0 @ =gRfuLinkStatus - ldr r0, [r4] - ldrb r0, [r0] - cmp r0, 0 - bne _080FE1CA - bl rfu_getSTWIRecvBuffer - ldr r1, [r4] - ldrb r1, [r1, 0x2] - strb r1, [r0, 0x4] - movs r1, 0x1 - strb r1, [r0, 0x5] - movs r0, 0x29 - bl sub_80FD850 - movs r6, 0 -_080FE1CA: - mov r4, r8 - cmp r4, 0x26 - bne _080FE1D2 - b _080FE2E6 -_080FE1D2: - cmp r4, 0x26 - bgt _080FE1E4 - cmp r4, 0x10 - bne _080FE1DC - b _080FE304 -_080FE1DC: - b _080FE322 - .align 2, 0 -_080FE1E0: .4byte gRfuLinkStatus -_080FE1E4: - mov r0, r8 - cmp r0, 0x30 - beq _080FE1F2 - cmp r0, 0x3D - bne _080FE1F0 - b _080FE304 -_080FE1F0: - b _080FE322 -_080FE1F2: - cmp r6, 0 - beq _080FE1F8 - b _080FE326 -_080FE1F8: - bl rfu_getSTWIRecvBuffer - ldr r4, _080FE2A8 @ =gUnknown_3005E10 - ldrb r0, [r0, 0x8] - strh r0, [r4, 0x14] - bl sub_80FE83C - adds r2, r4, 0 - adds r2, 0x30 - ldrb r1, [r2] - cmp r1, 0 - beq _080FE24E - ldrb r0, [r4, 0x14] - adds r3, r1, 0 - bics r3, r0 - adds r0, r3, 0 - strb r0, [r2] - movs r3, 0 - adds r7, r4, 0 - adds r1, r7, 0 - movs r5, 0x1 - adds r4, r1, 0 - adds r4, 0x34 - movs r2, 0 -_080FE228: - ldrh r0, [r1, 0x14] - asrs r0, r3 - ands r0, r5 - cmp r0, 0 - beq _080FE238 - lsls r0, r3, 1 - adds r0, r4 - strh r2, [r0] -_080FE238: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _080FE228 - ldr r1, _080FE2A8 @ =gUnknown_3005E10 - ldrb r0, [r1, 0x6] - cmp r0, 0 - bne _080FE24E - strb r0, [r1, 0x5] - strb r0, [r1, 0x4] -_080FE24E: - mov r3, sp - ldr r1, _080FE2A8 @ =gUnknown_3005E10 - ldrb r2, [r1] - ldrb r0, [r1, 0x14] - ands r0, r2 - strb r0, [r3] - movs r3, 0 - adds r7, r1, 0 - ldr r2, _080FE2AC @ =gRfuLinkStatus - mov r1, sp - movs r5, 0x1 - adds r4, r7, 0 -_080FE266: - ldrb r0, [r1] - asrs r0, r3 - ands r0, r5 - cmp r0, 0 - beq _080FE27A - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _080FE27A - subs r0, 0x1 - strb r0, [r7, 0x1] -_080FE27A: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _080FE266 - ldrb r1, [r7, 0x14] - ldrb r0, [r7] - bics r0, r1 - strb r0, [r7] - ldrb r1, [r7, 0x7] - cmp r1, 0 - beq _080FE2C4 - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0xFF - bne _080FE2D6 - cmp r1, 0x8 - bne _080FE2B0 - ldrh r0, [r7, 0x1C] - strh r0, [r7, 0x1A] - movs r0, 0x6 - strb r0, [r7, 0x7] - b _080FE2C2 - .align 2, 0 -_080FE2A8: .4byte gUnknown_3005E10 -_080FE2AC: .4byte gRfuLinkStatus -_080FE2B0: - ldrb r0, [r7, 0x4] - subs r0, 0x6 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080FE2C4 - movs r0, 0x1 - strb r0, [r7, 0x7] - movs r0, 0x5 -_080FE2C2: - strb r0, [r7, 0x4] -_080FE2C4: - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0xFF - bne _080FE2D6 - ldrb r0, [r7, 0x4] - cmp r0, 0 - bne _080FE2D6 - movs r0, 0xFF - strb r0, [r7, 0x6] -_080FE2D6: - ldrb r0, [r7, 0xE] - cmp r0, 0 - bne _080FE322 - movs r0, 0x40 - movs r1, 0x1 - bl sub_80FE7F0 - b _080FE322 -_080FE2E6: - bl sub_80FE6F0 - ldr r0, _080FE300 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0xFF - beq _080FE322 - movs r0, 0x50 - movs r1, 0 - bl sub_80FE7F0 - b _080FE322 - .align 2, 0 -_080FE300: .4byte gRfuLinkStatus -_080FE304: - cmp r6, 0 - bne _080FE326 - ldr r0, _080FE350 @ =gUnknown_3005E10 - strb r6, [r0, 0xD] - strb r6, [r0, 0x1] - strb r6, [r0] - movs r1, 0xFF - strb r1, [r0, 0x6] - bl sub_80FEAF4 - mov r4, r8 - cmp r4, 0x3D - bne _080FE322 - bl sub_80FD484 -_080FE322: - cmp r6, 0 - beq _080FE376 -_080FE326: - ldr r7, _080FE350 @ =gUnknown_3005E10 - mov r0, r8 - cmp r0, 0x1C - bne _080FE358 - cmp r6, 0 - beq _080FE358 - ldrb r0, [r7, 0x7] - cmp r0, 0x4 - bne _080FE358 - ldr r2, _080FE354 @ =gRfuLinkStatus - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1] - ldr r1, [r2] - movs r0, 0xF - strb r0, [r1, 0x2] - bl sub_80FE818 - bl rfu_waitREQComplete - b _080FE388 - .align 2, 0 -_080FE350: .4byte gUnknown_3005E10 -_080FE354: .4byte gRfuLinkStatus -_080FE358: - movs r1, 0 - mov r3, r8 - strh r3, [r7, 0x14] - strh r6, [r7, 0x16] - ldrb r0, [r7, 0xE] - cmp r0, 0 - beq _080FE36A - strb r1, [r7, 0x5] - strb r1, [r7, 0x4] -_080FE36A: - movs r0, 0xF0 - movs r1, 0x2 - bl sub_80FE7F0 - bl sub_80FEAF4 -_080FE376: - mov r4, r8 - cmp r4, 0xFF - bne _080FE388 - movs r0, 0xF2 - movs r1, 0 - bl sub_80FE7F0 - bl sub_80FEAF4 -_080FE388: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80FDC98 - - thumb_func_start sub_80FE394 -sub_80FE394: @ 80FE394 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r4, _080FE3C8 @ =gUnknown_3005E10 - ldrb r7, [r4, 0xE] - movs r0, 0 - strb r0, [r4, 0xE] - movs r0, 0x1 - strb r0, [r4, 0xF] - ldr r0, _080FE3CC @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r5, [r0] - cmp r5, 0 - bne _080FE3D0 - adds r0, r6, 0 - bl sub_80FD850 - ldrb r0, [r4, 0x2] - cmp r0, 0x1 - beq _080FE3E8 - bl sub_80FEAF4 - strb r5, [r4, 0xF] - strb r7, [r4, 0xE] - b _080FE40C - .align 2, 0 -_080FE3C8: .4byte gUnknown_3005E10 -_080FE3CC: .4byte gRfuLinkStatus -_080FE3D0: - mov r0, sp - bl rfu_UNI_PARENT_getDRAC_ACK - lsls r0, 16 - cmp r0, 0 - bne _080FE3E8 - mov r1, sp - ldrb r0, [r4, 0x3] - ldrb r1, [r1] - orrs r0, r1 - ldrb r1, [r4, 0x3] - strb r0, [r4, 0x3] -_080FE3E8: - ldr r4, _080FE414 @ =gUnknown_3005E10 - ldr r1, [r4, 0x44] - cmp r1, 0 - beq _080FE404 - adds r0, r6, 0 - bl _call_via_r1 - bl rfu_waitREQComplete - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - bne _080FE404 - bl sub_80FEAF4 -_080FE404: - ldr r1, _080FE414 @ =gUnknown_3005E10 - movs r0, 0 - strb r0, [r1, 0xF] - strb r7, [r1, 0xE] -_080FE40C: - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FE414: .4byte gUnknown_3005E10 - thumb_func_end sub_80FE394 - - thumb_func_start sub_80FE418 -sub_80FE418: @ 80FE418 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r1, _080FE49C @ =gUnknown_3005E10 - ldrb r0, [r1, 0x4] - subs r0, 0x5 - lsls r0, 24 - lsrs r0, 24 - adds r3, r1, 0 - cmp r0, 0x3 - bls _080FE436 - b _080FE62A -_080FE436: - ldr r0, _080FE4A0 @ =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2, 0x2] - ldrb r0, [r3, 0xC] - adds r4, r1, 0 - eors r4, r0 - ands r4, r1 - ldrb r0, [r2, 0x7] - bics r4, r0 - mov r8, r4 - strb r1, [r3, 0xC] - cmp r4, 0 - beq _080FE45E - strh r4, [r3, 0x14] - movs r0, 0x10 - movs r1, 0x1 - str r3, [sp, 0x4] - bl sub_80FE7F0 - ldr r3, [sp, 0x4] -_080FE45E: - movs r0, 0 - str r0, [sp] - movs r6, 0 - adds r7, r3, 0 - movs r1, 0x24 - adds r1, r3 - mov r9, r1 -_080FE46C: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r6 - lsrs r4, r0, 24 - movs r5, 0 - mov r0, r8 - ands r0, r4 - cmp r0, 0 - beq _080FE4BE - lsls r1, r6, 1 - adds r0, r7, 0 - adds r0, 0x28 - adds r1, r0 - ldrh r0, [r7, 0x26] - strh r0, [r1] - mov r2, r9 - ldrb r1, [r2] - adds r0, r4, 0 - orrs r0, r1 - strb r0, [r2] - adds r6, 0x1 - mov r10, r6 - b _080FE574 - .align 2, 0 -_080FE49C: .4byte gUnknown_3005E10 -_080FE4A0: .4byte gRfuLinkStatus -_080FE4A4: - ldrb r1, [r7] - adds r0, r4, 0 - orrs r0, r1 - strb r0, [r7] - ldrb r0, [r7, 0x1] - adds r0, 0x1 - strb r0, [r7, 0x1] - ldr r0, [sp] - orrs r0, r4 - str r0, [sp] - movs r0, 0x1 - orrs r5, r0 - b _080FE508 -_080FE4BE: - mov r1, r9 - ldrb r0, [r1] - ands r0, r4 - adds r2, r6, 0x1 - mov r10, r2 - cmp r0, 0 - beq _080FE574 - ldr r0, _080FE518 @ =gRfuSlotStatusNI - lsls r1, r6, 2 - adds r1, r0 - ldr r1, [r1] - ldrh r0, [r1, 0x34] - cmp r0, 0x46 - bne _080FE524 - adds r0, r1, 0 - adds r0, 0x61 - ldrb r0, [r0] - cmp r0, 0x1 - bne _080FE53C - movs r5, 0x2 - ldr r3, [r3, 0x20] - ldrh r2, [r3] - ldr r0, _080FE51C @ =0x0000ffff - cmp r2, r0 - beq _080FE508 - ldr r0, _080FE520 @ =gRfuLinkStatus - ldr r0, [r0] - lsls r1, r6, 5 - adds r0, r1 - ldrh r0, [r0, 0x18] - ldr r1, _080FE51C @ =0x0000ffff -_080FE4FC: - cmp r0, r2 - beq _080FE4A4 - adds r3, 0x2 - ldrh r2, [r3] - cmp r2, r1 - bne _080FE4FC -_080FE508: - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - bne _080FE53C - movs r0, 0x4 - orrs r5, r0 - b _080FE53C - .align 2, 0 -_080FE518: .4byte gRfuSlotStatusNI -_080FE51C: .4byte 0x0000ffff -_080FE520: .4byte gRfuLinkStatus -_080FE524: - lsls r1, r6, 1 - adds r0, r3, 0 - adds r0, 0x28 - adds r1, r0 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldr r1, _080FE5F8 @ =0x0000ffff - ands r0, r1 - cmp r0, 0 - bne _080FE53C - movs r5, 0x6 -_080FE53C: - movs r0, 0x2 - ands r0, r5 - cmp r0, 0 - beq _080FE562 - mov r2, r9 - ldrb r0, [r2] - bics r0, r4 - movs r2, 0 - mov r1, r9 - strb r0, [r1] - lsls r0, r6, 1 - adds r1, r7, 0 - adds r1, 0x28 - adds r0, r1 - strh r2, [r0] - movs r0, 0x8 - adds r1, r6, 0 - bl rfu_clearSlot -_080FE562: - movs r0, 0x4 - ands r5, r0 - ldr r3, _080FE5FC @ =gUnknown_3005E10 - cmp r5, 0 - beq _080FE574 - ldrb r1, [r7, 0xD] - adds r0, r4, 0 - orrs r0, r1 - strb r0, [r7, 0xD] -_080FE574: - mov r2, r10 - lsls r0, r2, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bhi _080FE580 - b _080FE46C -_080FE580: - ldr r4, [sp] - cmp r4, 0 - beq _080FE592 - ldr r0, _080FE5FC @ =gUnknown_3005E10 - strh r4, [r0, 0x14] - movs r0, 0x11 - movs r1, 0x1 - bl sub_80FE7F0 -_080FE592: - ldr r1, _080FE5FC @ =gUnknown_3005E10 - ldrb r0, [r1, 0xD] - cmp r0, 0 - beq _080FE5CE - movs r5, 0x1 - ldr r0, _080FE600 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x6] - cmp r0, 0 - beq _080FE5B2 - ldrb r0, [r1, 0x3] - ldrb r1, [r1] - ands r0, r1 - cmp r0, r1 - beq _080FE5B2 - movs r5, 0 -_080FE5B2: - cmp r5, 0 - beq _080FE5CE - ldr r4, _080FE5FC @ =gUnknown_3005E10 - ldrb r0, [r4, 0xD] - bl sub_80FE818 - ldrb r0, [r4, 0xD] - movs r1, 0 - strh r0, [r4, 0x14] - strb r1, [r4, 0xD] - movs r0, 0x12 - movs r1, 0x1 - bl sub_80FE7F0 -_080FE5CE: - ldr r0, _080FE5FC @ =gUnknown_3005E10 - adds r1, r0, 0 - adds r1, 0x24 - ldrb r1, [r1] - adds r3, r0, 0 - cmp r1, 0 - bne _080FE62A - ldrb r0, [r3, 0x4] - cmp r0, 0x8 - bne _080FE62A - ldrb r0, [r3, 0x7] - cmp r0, 0 - bne _080FE604 - strb r0, [r3, 0x5] - strb r0, [r3, 0x4] - movs r0, 0x14 - movs r1, 0 - bl sub_80FE7F0 - b _080FE62A - .align 2, 0 -_080FE5F8: .4byte 0x0000ffff -_080FE5FC: .4byte gUnknown_3005E10 -_080FE600: .4byte gRfuLinkStatus -_080FE604: - cmp r0, 0x2 - bne _080FE610 - movs r0, 0x3 - strb r0, [r3, 0x7] - movs r0, 0x9 - b _080FE616 -_080FE610: - movs r0, 0x1 - strb r0, [r3, 0x7] - movs r0, 0x5 -_080FE616: - strb r0, [r3, 0x4] - ldrb r0, [r3] - cmp r0, 0 - beq _080FE62A - movs r0, 0 - strh r0, [r3, 0x1A] - movs r0, 0x8 - strb r0, [r3, 0x7] - movs r0, 0x5 - strb r0, [r3, 0x4] -_080FE62A: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80FE418 - - thumb_func_start sub_80FE63C -sub_80FE63C: @ 80FE63C - push {r4-r6,lr} - ldr r1, _080FE6E0 @ =0x04000208 - ldrh r0, [r1] - adds r6, r0, 0 - movs r0, 0 - strh r0, [r1] - ldr r4, _080FE6E4 @ =gUnknown_3005E10 - ldrb r0, [r4, 0x4] - cmp r0, 0xF - bne _080FE6A0 - ldrb r1, [r4, 0x10] - lsls r1, 1 - adds r5, r4, 0 - adds r5, 0x28 - adds r1, r5 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - beq _080FE676 - ldr r1, _080FE6E8 @ =gRfuSlotStatusNI - ldrb r0, [r4, 0x10] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x27 - bne _080FE6A0 -_080FE676: - bl sub_80FEB14 - movs r0, 0x18 - strb r0, [r4, 0x4] - ldrb r1, [r4, 0x10] - movs r0, 0x4 - bl rfu_clearSlot - adds r2, r4, 0 - adds r2, 0x24 - movs r1, 0x1 - ldrb r0, [r4, 0x10] - lsls r1, r0 - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldrb r0, [r4, 0x10] - lsls r0, 1 - adds r0, r5 - movs r1, 0 - strh r1, [r0] -_080FE6A0: - ldr r0, _080FE6E0 @ =0x04000208 - strh r6, [r0] - ldr r5, _080FE6E4 @ =gUnknown_3005E10 - ldrb r0, [r5, 0x4] - cmp r0, 0x18 - bne _080FE6DA - ldrb r0, [r5, 0x2] - cmp r0, 0x1 - bne _080FE6B6 - bl sub_80FEB14 -_080FE6B6: - ldrb r0, [r5, 0x2] - adds r4, r0, 0 - cmp r4, 0 - bne _080FE6DA - strb r4, [r5, 0x5] - strb r4, [r5, 0x4] - ldr r0, _080FE6EC @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - orrs r0, r1 - bl sub_80FE818 - strh r4, [r5, 0x14] - movs r0, 0x25 - movs r1, 0x1 - bl sub_80FE7F0 -_080FE6DA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FE6E0: .4byte 0x04000208 -_080FE6E4: .4byte gUnknown_3005E10 -_080FE6E8: .4byte gRfuSlotStatusNI -_080FE6EC: .4byte gRfuLinkStatus - thumb_func_end sub_80FE63C - - thumb_func_start sub_80FE6F0 -sub_80FE6F0: @ 80FE6F0 - push {r4,r5,lr} - ldr r5, _080FE744 @ =gUnknown_3005E10 - ldrb r0, [r5, 0x4] - cmp r0, 0xF - bne _080FE73C - ldr r1, _080FE748 @ =gRfuSlotStatusNI - ldrb r2, [r5, 0x10] - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x26 - bne _080FE73C - movs r4, 0 - strb r4, [r5, 0x5] - strb r4, [r5, 0x4] - movs r0, 0x4 - adds r1, r2, 0 - bl rfu_clearSlot - adds r2, r5, 0 - adds r2, 0x24 - movs r1, 0x1 - ldrb r0, [r5, 0x10] - lsls r1, r0 - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldrb r0, [r5, 0x10] - lsls r0, 1 - adds r1, r5, 0 - adds r1, 0x28 - adds r0, r1 - strh r4, [r0] - movs r0, 0x24 - movs r1, 0 - bl sub_80FE7F0 -_080FE73C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FE744: .4byte gUnknown_3005E10 -_080FE748: .4byte gRfuSlotStatusNI - thumb_func_end sub_80FE6F0 - - thumb_func_start sub_80FE74C -sub_80FE74C: @ 80FE74C - push {lr} - ldr r1, _080FE774 @ =gUnknown_3005E10 - ldrb r0, [r1, 0x6] - cmp r0, 0 - bne _080FE770 - ldrb r0, [r1, 0xA] - cmp r0, 0x1 - bne _080FE770 - ldrb r0, [r1, 0x4] - strb r0, [r1, 0x11] - ldrb r0, [r1, 0x5] - strb r0, [r1, 0x12] - movs r0, 0x10 - strb r0, [r1, 0x4] - movs r0, 0x11 - strb r0, [r1, 0x5] - movs r0, 0x2 - strb r0, [r1, 0xA] -_080FE770: - pop {r0} - bx r0 - .align 2, 0 -_080FE774: .4byte gUnknown_3005E10 - thumb_func_end sub_80FE74C - - thumb_func_start sub_80FE778 -sub_80FE778: @ 80FE778 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - movs r6, 0 - movs r5, 0 - ldr r1, _080FE7E4 @ =gRfuLinkStatus - ldr r0, [r1] - ldrb r0, [r0, 0x8] - cmp r6, r0 - bcs _080FE7D4 - mov r8, r0 - ldr r0, _080FE7E8 @ =gUnknown_3005E10 - mov r10, r0 - mov r9, r1 -_080FE798: - mov r1, r10 - ldr r3, [r1, 0x20] - ldrh r2, [r3] - adds r0, r5, 0x1 - mov r12, r0 - ldr r1, _080FE7EC @ =0x0000ffff - cmp r2, r1 - beq _080FE7CA - mov r1, r9 - ldr r0, [r1] - lsls r1, r5, 5 - adds r0, r1 - ldrh r4, [r0, 0x18] - ldr r7, _080FE7EC @ =0x0000ffff - movs r1, 0x1 - lsls r1, r5 -_080FE7B8: - cmp r4, r2 - bne _080FE7C2 - orrs r6, r1 - lsls r0, r6, 24 - lsrs r6, r0, 24 -_080FE7C2: - adds r3, 0x2 - ldrh r2, [r3] - cmp r2, r7 - bne _080FE7B8 -_080FE7CA: - mov r1, r12 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, r8 - bcc _080FE798 -_080FE7D4: - adds r0, r6, 0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080FE7E4: .4byte gRfuLinkStatus -_080FE7E8: .4byte gUnknown_3005E10 -_080FE7EC: .4byte 0x0000ffff - thumb_func_end sub_80FE778 - - thumb_func_start sub_80FE7F0 -sub_80FE7F0: @ 80FE7F0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r4, _080FE814 @ =gUnknown_3005E10 - ldr r2, [r4, 0x40] - cmp r2, 0 - beq _080FE806 - bl _call_via_r2 -_080FE806: - movs r0, 0 - strh r0, [r4, 0x16] - strh r0, [r4, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FE814: .4byte gUnknown_3005E10 - thumb_func_end sub_80FE7F0 - - thumb_func_start sub_80FE818 -sub_80FE818: @ 80FE818 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080FE838 @ =gUnknown_3005E10 - ldrb r5, [r4, 0xE] - movs r1, 0x1 - strb r1, [r4, 0xE] - bl rfu_REQ_disconnect - bl rfu_waitREQComplete - strb r5, [r4, 0xE] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FE838: .4byte gUnknown_3005E10 - thumb_func_end sub_80FE818 - - thumb_func_start sub_80FE83C -sub_80FE83C: @ 80FE83C - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080FE908 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _080FE884 - movs r4, 0 -_080FE84E: - ldr r1, _080FE90C @ =gRfuSlotStatusNI - lsls r0, r4, 2 - adds r0, r1 - ldr r2, [r0] - ldrh r0, [r2] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE87A - ldrb r1, [r2, 0x1A] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE87A - adds r2, r1, 0 - bics r2, r5 - movs r0, 0x20 - adds r1, r4, 0 - bl rfu_changeSendTarget -_080FE87A: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080FE84E -_080FE884: - ldr r0, _080FE908 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x5] - cmp r0, 0 - beq _080FE8C2 - movs r4, 0 -_080FE890: - ldr r1, _080FE90C @ =gRfuSlotStatusNI - lsls r0, r4, 2 - adds r0, r1 - ldr r2, [r0] - ldrh r0, [r2, 0x34] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE8B8 - adds r0, r2, 0 - adds r0, 0x4E - ldrb r0, [r0] - ands r0, r5 - cmp r0, 0 - beq _080FE8B8 - adds r0, r4, 0 - bl rfu_NI_stopReceivingData -_080FE8B8: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080FE890 -_080FE8C2: - ldr r0, _080FE908 @ =gRfuLinkStatus - ldr r3, [r0] - ldrb r2, [r3, 0x6] - cmp r2, 0 - beq _080FE900 - mvns r1, r5 - adds r0, r1, 0 - ands r0, r2 - strb r0, [r3, 0x6] - movs r4, 0 - ldr r7, _080FE910 @ =gRfuSlotStatusUNI - ldr r6, _080FE914 @ =0x00008024 -_080FE8DA: - lsls r0, r4, 2 - adds r0, r7 - ldr r2, [r0] - ldrh r0, [r2] - cmp r0, r6 - bne _080FE8F6 - ldrb r3, [r2, 0x3] - adds r0, r5, 0 - ands r0, r3 - cmp r0, 0 - beq _080FE8F6 - adds r0, r1, 0 - ands r0, r3 - strb r0, [r2, 0x3] -_080FE8F6: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080FE8DA -_080FE900: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FE908: .4byte gRfuLinkStatus -_080FE90C: .4byte gRfuSlotStatusNI -_080FE910: .4byte gRfuSlotStatusUNI -_080FE914: .4byte 0x00008024 - thumb_func_end sub_80FE83C - - thumb_func_start sub_80FE918 -sub_80FE918: @ 80FE918 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _080FEA04 @ =gUnknown_3005E10 - ldrh r0, [r0, 0x18] - cmp r0, 0 - beq _080FE9F4 - ldr r0, _080FEA08 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _080FE9B8 - movs r6, 0 -_080FE938: - ldr r3, _080FEA0C @ =gRfuSlotStatusNI - lsls r2, r6, 2 - adds r0, r2, r3 - ldr r0, [r0] - ldrh r1, [r0] - movs r4, 0x80 - lsls r4, 8 - adds r0, r4, 0 - ands r1, r0 - adds r7, r2, 0 - adds r0, r6, 0x1 - mov r9, r0 - cmp r1, 0 - beq _080FE9AE - movs r5, 0 - movs r4, 0 - movs r1, 0x1 - mov r8, r1 - mov r10, r3 -_080FE95E: - adds r0, r7, r3 - ldr r0, [r0] - ldrb r0, [r0, 0x1A] - asrs r0, r4 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _080FE988 - lsls r0, r4, 2 - adds r0, r3 - ldr r0, [r0] - ldr r1, _080FEA04 @ =gUnknown_3005E10 - ldrh r0, [r0, 0x2] - ldrh r1, [r1, 0x18] - cmp r0, r1 - bls _080FE988 - mov r0, r8 - lsls r0, r4 - orrs r5, r0 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_080FE988: - cmp r5, 0 - beq _080FE9A4 - mov r1, r10 - adds r0, r7, r1 - ldr r0, [r0] - ldrb r0, [r0, 0x1A] - adds r2, r5, 0 - eors r2, r0 - movs r0, 0x20 - adds r1, r6, 0 - str r3, [sp] - bl rfu_changeSendTarget - ldr r3, [sp] -_080FE9A4: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080FE95E -_080FE9AE: - mov r3, r9 - lsls r0, r3, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _080FE938 -_080FE9B8: - ldr r0, _080FEA08 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x5] - cmp r0, 0 - beq _080FE9F4 - movs r6, 0 -_080FE9C4: - ldr r1, _080FEA0C @ =gRfuSlotStatusNI - lsls r0, r6, 2 - adds r0, r1 - ldr r2, [r0] - ldrh r0, [r2, 0x34] - movs r4, 0x80 - lsls r4, 8 - adds r1, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE9EA - ldr r1, _080FEA04 @ =gUnknown_3005E10 - ldrh r0, [r2, 0x36] - ldrh r1, [r1, 0x18] - cmp r0, r1 - bls _080FE9EA - adds r0, r6, 0 - bl rfu_NI_stopReceivingData -_080FE9EA: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _080FE9C4 -_080FE9F4: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FEA04: .4byte gUnknown_3005E10 -_080FEA08: .4byte gRfuLinkStatus -_080FEA0C: .4byte gRfuSlotStatusNI - thumb_func_end sub_80FE918 - - thumb_func_start sub_80FEA10 -sub_80FEA10: @ 80FEA10 - push {lr} - ldr r1, _080FEA20 @ =gUnknown_3005E10 - str r0, [r1, 0x44] - ldr r0, _080FEA24 @ =sub_80FE394 - bl rfu_setMSCCallback - pop {r0} - bx r0 - .align 2, 0 -_080FEA20: .4byte gUnknown_3005E10 -_080FEA24: .4byte sub_80FE394 - thumb_func_end sub_80FEA10 - - thumb_func_start sub_80FEA28 -sub_80FEA28: @ 80FEA28 - ldr r1, _080FEA30 @ =gUnknown_3005E10 - str r0, [r1, 0x40] - bx lr - .align 2, 0 -_080FEA30: .4byte gUnknown_3005E10 - thumb_func_end sub_80FEA28 - - thumb_func_start sub_80FEA34 -sub_80FEA34: @ 80FEA34 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r0, _080FEA58 @ =gUnknown_3005E10 - ldrb r1, [r0, 0x9] - adds r3, r0, 0 - cmp r1, 0 - beq _080FEA5C - cmp r4, 0 - bne _080FEA5C - adds r0, 0x30 - ldrb r0, [r0] - cmp r0, 0 - beq _080FEA5C - movs r0, 0x5 - b _080FEA6C - .align 2, 0 -_080FEA58: .4byte gUnknown_3005E10 -_080FEA5C: - ldr r2, _080FEA74 @ =0x04000208 - ldrh r1, [r2] - movs r0, 0 - strh r0, [r2] - strb r4, [r3, 0x9] - strh r5, [r3, 0x32] - strh r1, [r2] - movs r0, 0 -_080FEA6C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080FEA74: .4byte 0x04000208 - thumb_func_end sub_80FEA34 - - thumb_func_start sub_80FEA78 -sub_80FEA78: @ 80FEA78 - push {lr} - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _080FEA94 @ =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x4] - ldrb r0, [r0, 0x5] - orrs r0, r1 - cmp r0, 0 - bne _080FEA9C - ldr r0, _080FEA98 @ =gUnknown_3005E10 - strh r2, [r0, 0x18] - movs r0, 0 - b _080FEAAC - .align 2, 0 -_080FEA94: .4byte gRfuLinkStatus -_080FEA98: .4byte gUnknown_3005E10 -_080FEA9C: - ldr r1, _080FEAB0 @ =gUnknown_3005E10 - movs r0, 0x6 - strh r0, [r1, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x6 -_080FEAAC: - pop {r1} - bx r1 - .align 2, 0 -_080FEAB0: .4byte gUnknown_3005E10 - thumb_func_end sub_80FEA78 - - thumb_func_start sub_80FEAB4 -sub_80FEAB4: @ 80FEAB4 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - ldr r1, _080FEADC @ =gUnknown_3005E10 - ldrb r0, [r1, 0x4] - subs r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _080FEAE0 - movs r0, 0x7 - strh r0, [r1, 0x14] - movs r0, 0xF3 - movs r1, 0x1 - bl sub_80FE7F0 - movs r0, 0x7 - b _080FEAEE - .align 2, 0 -_080FEADC: .4byte gUnknown_3005E10 -_080FEAE0: - cmp r2, 0 - beq _080FEAEA - movs r0, 0x1 - strb r0, [r1, 0xB] - b _080FEAEC -_080FEAEA: - strb r3, [r1, 0xB] -_080FEAEC: - movs r0, 0 -_080FEAEE: - pop {r1} - bx r1 - thumb_func_end sub_80FEAB4 - - thumb_func_start sub_80FEAF4 -sub_80FEAF4: @ 80FEAF4 - push {lr} - ldr r1, _080FEB10 @ =gUnknown_3005E10 - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _080FEB0C - ldrb r0, [r1, 0x2] - movs r0, 0 - strb r0, [r1, 0x2] - movs r0, 0x45 - movs r1, 0 - bl sub_80FE7F0 -_080FEB0C: - pop {r0} - bx r0 - .align 2, 0 -_080FEB10: .4byte gUnknown_3005E10 - thumb_func_end sub_80FEAF4 - - thumb_func_start sub_80FEB14 -sub_80FEB14: @ 80FEB14 - push {lr} - ldr r1, _080FEB28 @ =gUnknown_3005E10 - ldrb r0, [r1, 0x2] - cmp r0, 0 - bne _080FEB2C - movs r0, 0x45 - movs r1, 0 - bl sub_80FE7F0 - b _080FEB38 - .align 2, 0 -_080FEB28: .4byte gUnknown_3005E10 -_080FEB2C: - ldrb r0, [r1, 0x2] - cmp r0, 0x1 - bne _080FEB38 - ldrb r0, [r1, 0x2] - movs r0, 0x2 - strb r0, [r1, 0x2] -_080FEB38: - pop {r0} - bx r0 - thumb_func_end sub_80FEB14 - - thumb_func_start sub_80FEB3C -sub_80FEB3C: @ 80FEB3C - push {lr} - ldr r0, _080FEB5C @ =gUnknown_3005E10 - ldrb r1, [r0, 0x7] - adds r2, r0, 0 - cmp r1, 0 - beq _080FEBA6 - ldrb r0, [r2, 0x4] - subs r0, 0x5 - cmp r0, 0x6 - bhi _080FEBA6 - lsls r0, 2 - ldr r1, _080FEB60 @ =_080FEB64 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080FEB5C: .4byte gUnknown_3005E10 -_080FEB60: .4byte _080FEB64 - .align 2, 0 -_080FEB64: - .4byte _080FEB80 - .4byte _080FEB88 - .4byte _080FEB92 - .4byte _080FEB92 - .4byte _080FEB98 - .4byte _080FEB98 - .4byte _080FEB9E -_080FEB80: - movs r0, 0x3 - strb r0, [r2, 0x7] - movs r0, 0x9 - b _080FEBA4 -_080FEB88: - movs r0, 0x2 - strb r0, [r2, 0x7] - movs r0, 0x1 - strh r0, [r2, 0x1A] - b _080FEBA6 -_080FEB92: - movs r0, 0x2 - strb r0, [r2, 0x7] - b _080FEBA6 -_080FEB98: - movs r0, 0x28 - strh r0, [r2, 0x1A] - b _080FEBA6 -_080FEB9E: - movs r0, 0x28 - strh r0, [r2, 0x1A] - movs r0, 0xA -_080FEBA4: - strb r0, [r2, 0x4] -_080FEBA6: - pop {r0} - bx r0 - thumb_func_end sub_80FEB3C - - .align 2, 0 @ Don't pad with nop. diff --git a/include/link_rfu.h b/include/link_rfu.h index 033f4c8d4..602d7fa64 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -9,6 +9,65 @@ struct Padded_U8 u8 value; }; +struct UnkLinkRfuStruct_02022B2C +{ + u8 unk_00; + u8 unk_01; + u16 unk_02; + u8 unk_04; + u16 unk_06; + struct UnkLinkRfuStruct_02022B14 *unk_08; + u8 *unk_0c; + u8 unk_10; + u8 unk_11; + u16 unk_12; + u16 unk_14; +}; + +struct UnkRfuStruct_1 +{ + /* 0x000 */ u8 unk_00; + /* 0x001 */ u8 unk_01; + /* 0x002 */ vu8 unk_02; + /* 0x003 */ vu8 unk_03; + /* 0x004 */ u8 unk_04; + /* 0x005 */ u8 unk_05; + /* 0x006 */ u8 unk_06; + /* 0x007 */ u8 unk_07; + /* 0x008 */ u8 unk_08; + /* 0x009 */ u8 unk_09; + /* 0x00a */ u8 unk_0a; + /* 0x00b */ u8 unk_0b; + /* 0x00c */ u8 unk_0c; + /* 0x00d */ u8 unk_0d; + /* 0x00e */ u8 unk_0e; + /* 0x00f */ u8 unk_0f; + /* 0x010 */ u8 unk_10; + /* 0x011 */ u8 unk_11; + /* 0x012 */ u8 unk_12; + // aligned + /* 0x014 */ u16 unk_14; + /* 0x016 */ u16 unk_16; + /* 0x018 */ u16 unk_18; + /* 0x01a */ u16 unk_1a; + /* 0x01c */ u16 unk_1c; + /* 0x01e */ u16 unk_1e; + /* 0x020 */ const u16 *unk_20; + /* 0x024 */ u8 unk_24; + /* 0x026 */ u16 unk_26; + /* 0x028 */ u16 unk_28[4]; + /* 0x030 */ u8 unk_30; + // aligned + /* 0x032 */ u16 unk_32; + /* 0x034 */ u16 unk_34[4]; + /* 0x03c */ const struct UnkLinkRfuStruct_02022B2C *unk_3c; + /* 0x040 */ void (*unk_40)(u8, u8); + /* 0x044 */ void (*unk_44)(u16); + /* 0x048 */ u8 filler_48[8]; + /* 0x050 */ u32 unk_50[0x399]; + /* 0xeb4 */ u8 filler_e64[12]; +}; + void AddTextPrinterToWindow1(const u8 *str); bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src); void sub_80FA190(void); diff --git a/ld_script.txt b/ld_script.txt index 2544f8d42..05ed8277a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -226,7 +226,7 @@ SECTIONS { src/save_menu_util.o(.text); src/map_preview_screen.o(.text); asm/link_rfu_2.o(.text); - asm/link_rfu.o(.text); + src/link_rfu.o(.text); asm/easy_chat_2.o(.text); src/pokedex_screen.o(.text); asm/pokedex_screen.o(.text); diff --git a/src/link_rfu.c b/src/link_rfu.c new file mode 100644 index 000000000..37049e358 --- /dev/null +++ b/src/link_rfu.c @@ -0,0 +1,1383 @@ +#include "global.h" +#include "librfu.h" +#include "link_rfu.h" + +struct UnkRfuStruct_1 gUnknown_3005E10; + +void sub_80FD4E4(void); +void sub_80FDC28(u32 a0); +void sub_80FDC98(u16 reqCommandId, u16 reqResult); +void sub_80FE394(u16 reqCommandId); +void sub_80FE418(void); +void sub_80FE63C(void); +void sub_80FE6F0(void); +void sub_80FE74C(void); +u8 sub_80FE778(void); +void sub_80FE7F0(u8 a0, u8 a1); +void sub_80FE818(u8 bmDisconnectSlot); +void sub_80FE83C(u8 a0); +void sub_80FE918(void); +void sub_80FEAF4(void); +void sub_80FEB14(void); + +u32 sub_80FD3A4(void) +{ + u32 id = rfu_REQBN_softReset_and_checkID(); + if (id == 0x8001) + gUnknown_3005E10.unk_08 = 1; + if (gUnknown_3005E10.unk_04 != 0x17 && gUnknown_3005E10.unk_04 != 0x01) + { + gUnknown_3005E10.unk_05 = 0; + gUnknown_3005E10.unk_04 = 0; + } + gUnknown_3005E10.unk_07 = 0; + gUnknown_3005E10.unk_0d = 0; + gUnknown_3005E10.unk_01 = 0; + gUnknown_3005E10.unk_00 = 0; + gUnknown_3005E10.unk_06 = -1; + sub_80FEAF4(); + return id; +} + +void rfu_REQ_sendData_wrapper(u8 clockChangeFlag) +{ + if (gRfuLinkStatus->parentChild == MODE_CHILD) + { + if (gUnknown_3005E10.unk_02 == 1) + clockChangeFlag = 1; + else + clockChangeFlag = 0; + } + else + gUnknown_3005E10.unk_03 = 0; + rfu_REQ_sendData(clockChangeFlag); +} + +s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16)) +{ + if (func1 == NULL) + { + return 4; + } + CpuFill16(0, &gUnknown_3005E10, offsetof(struct UnkRfuStruct_1, filler_48)); + gUnknown_3005E10.unk_06 = -1; + gUnknown_3005E10.unk_40 = func1; + gUnknown_3005E10.unk_44 = func2; + rfu_setMSCCallback(sub_80FE394); + rfu_setREQCallback(sub_80FDC98); + return 0; +} + +void sub_80FD484(void) +{ + CpuFill16(0, &gUnknown_3005E10, offsetof(struct UnkRfuStruct_1, unk_40)); + gUnknown_3005E10.unk_06 = -1; +} + +void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0) +{ + sub_80FD4E4(); + gUnknown_3005E10.unk_04 = 1; + gUnknown_3005E10.unk_05 = 2; + gUnknown_3005E10.unk_3c = unk0; + gUnknown_3005E10.unk_09 = unk0->unk_11; + gUnknown_3005E10.unk_32 = unk0->unk_12; + gUnknown_3005E10.unk_18 = unk0->unk_14; + if (unk0->unk_10) + { + gUnknown_3005E10.unk_0b = 1; + } +} + +void sub_80FD4E4(void) +{ + u8 i; + + gUnknown_3005E10.unk_05 = 0; + gUnknown_3005E10.unk_04 = 0; + gUnknown_3005E10.unk_06 = -1; + gUnknown_3005E10.unk_07 = 0; + gUnknown_3005E10.unk_10 = 0; + gUnknown_3005E10.unk_0c = 0; + gUnknown_3005E10.unk_24 = 0; + gUnknown_3005E10.unk_30 = 0; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + gUnknown_3005E10.unk_28[i] = 0; + gUnknown_3005E10.unk_34[i] = 0; + } +} + +void sub_80FD52C(void) +{ + gUnknown_3005E10.unk_04 = 0x15; +} + +u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6) +{ + u8 i; + const u16 *buffer; + + if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 != 0x08 || r5 != 1)) + { + gUnknown_3005E10.unk_14 = 1; + sub_80FE7F0(0xf3, 0x01); + return 1; + } + if (!rfu_getMasterSlave()) + { + gUnknown_3005E10.unk_14 = 2; + sub_80FE7F0(0xf3, 0x01); + return 2; + } + for (i = 0, buffer = r6; i < 16; i++) + { + if (*buffer++ == 0xFFFF) + { + break; + } + } + if (i == 16) + { + gUnknown_3005E10.unk_14 = 4; + sub_80FE7F0(0xf3, 0x01); + return 4; + } + if (r5 > 1) + { + gUnknown_3005E10.unk_07 = 1; + r5 = 1; + r7 = 0; + } + else + { + gUnknown_3005E10.unk_07 = 0; + } + if (r5 != 0) + { + gUnknown_3005E10.unk_04 = 5; + } + else + { + gUnknown_3005E10.unk_04 = 9; + if (gUnknown_3005E10.unk_0b) + { + gUnknown_3005E10.unk_0b = 2; + } + } + gUnknown_3005E10.unk_06 = r5; + gUnknown_3005E10.unk_1a = r7; + gUnknown_3005E10.unk_26 = r8; + gUnknown_3005E10.unk_20 = r6; + return 0; +} + +u8 sub_80FD610(u16 parentId, u16 unk_1a) +{ + u8 i; + + if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 < 9 || gUnknown_3005E10.unk_04 > 11)) + { + gUnknown_3005E10.unk_14 = 1; + sub_80FE7F0(0xF3, 0x01); + return 1; + } + if (!rfu_getMasterSlave()) + { + gUnknown_3005E10.unk_14 = 2; + sub_80FE7F0(0xF3, 0x01); + return 2; + } + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) + { + if (gRfuLinkStatus->partner[i].id == parentId) + { + break; + } + } + if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) + { + gUnknown_3005E10.unk_14 = 3; + sub_80FE7F0(0xF3, 0x01); + return 3; + } + if (gUnknown_3005E10.unk_04 == 0 || gUnknown_3005E10.unk_04 == 9) + { + gUnknown_3005E10.unk_04 = 12; + gUnknown_3005E10.unk_05 = 13; + } + else + { + gUnknown_3005E10.unk_04 = 11; + gUnknown_3005E10.unk_05 = 12; + } + gUnknown_3005E10.unk_1e = parentId; + gUnknown_3005E10.unk_1a = unk_1a; + if (gUnknown_3005E10.unk_07 != 0) + { + gUnknown_3005E10.unk_07 = 7; + } + return 0; +} + +void sub_80FD6F4(u8 lossSlot) +{ + u8 i; + + if (lossSlot & gUnknown_3005E10.unk_30) + { + gUnknown_3005E10.unk_30 &= ~lossSlot; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((lossSlot >> i) & 1) + { + gUnknown_3005E10.unk_34[i] = 0; + } + } + i = gRfuLinkStatus->linkLossSlotFlag & lossSlot; + if (i) + { + sub_80FE818(i); + } + gUnknown_3005E10.unk_14 = i; + sub_80FE7F0(0x33, i); + } +} + +void sub_80FD760(bool8 a0) +{ + u8 r2; + + r2 = 0; + gUnknown_3005E10.unk_07 = 0; + if (a0) + { + sub_80FD4E4(); + gUnknown_3005E10.unk_04 = 23; + } + else + { + switch (gUnknown_3005E10.unk_04) + { + case 5: + gUnknown_3005E10.unk_04 = 8; + gUnknown_3005E10.unk_05 = 0; + r2 = 0x13; + break; + case 6: + gUnknown_3005E10.unk_04 = 7; + gUnknown_3005E10.unk_05 = 8; + break; + case 7: + gUnknown_3005E10.unk_04 = 7; + gUnknown_3005E10.unk_05 = 8; + break; + case 8: + break; + case 9: + gUnknown_3005E10.unk_05 = 0; + gUnknown_3005E10.unk_04 = 0; + r2 = 0x21; + break; + case 10: + gUnknown_3005E10.unk_04 = 11; + gUnknown_3005E10.unk_05 = 0; + break; + case 11: + gUnknown_3005E10.unk_04 = 11; + gUnknown_3005E10.unk_05 = 0; + break; + case 12: + gUnknown_3005E10.unk_05 = 0; + gUnknown_3005E10.unk_04 = 0; + r2 = 0x23; + break; + case 13: + gUnknown_3005E10.unk_04 = 14; + break; + case 14: + gUnknown_3005E10.unk_04 = 14; + break; + case 15: + break; + case 16: + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11; + gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12; + sub_80FE818(gRfuLinkStatus->linkLossSlotFlag); + gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag; + sub_80FE7F0(0x33, 0x01); + return; + case 17: + gUnknown_3005E10.unk_04 = 18; + break; + case 18: + gUnknown_3005E10.unk_04 = 18; + break; + default: + gUnknown_3005E10.unk_05 = 0; + gUnknown_3005E10.unk_04 = 0; + r2 = 0x43; + break; + } + if (gUnknown_3005E10.unk_04 == 0) + { + sub_80FE7F0(r2, 0); + } + } +} + +bool8 sub_80FD850(u16 reqCommandId) +{ + bool8 retVal; + u8 i; + u8 bmLinkLossSlot; + u8 linkLossReason; + u8 parentBmLinkRecoverySlot; + u8 flags; + + retVal = FALSE; + rfu_REQBN_watchLink(reqCommandId, &bmLinkLossSlot, &linkLossReason, &parentBmLinkRecoverySlot); + if (bmLinkLossSlot) + { + gUnknown_3005E10.unk_14 = bmLinkLossSlot; + gUnknown_3005E10.unk_16 = linkLossReason; + if (gUnknown_3005E10.unk_09) + { + gUnknown_3005E10.unk_0a = 1; + if (gUnknown_3005E10.unk_06 == 0 && linkLossReason == REASON_DISCONNECTED) + { + gUnknown_3005E10.unk_0a = 4; + } + if (gUnknown_3005E10.unk_0a == 1) + { + for (i = 0; i < 4; i++) + { + if ((bmLinkLossSlot >> i) & 1) + { + gUnknown_3005E10.unk_30 |= (1 << i); + gUnknown_3005E10.unk_34[i] = gUnknown_3005E10.unk_32; + } + } + sub_80FE7F0(0x31, 0x01); + } + else + { + gUnknown_3005E10.unk_0a = 0; + sub_80FE818(bmLinkLossSlot); + retVal = TRUE; + sub_80FE7F0(0x33, 0x01); + } + } + else + { + sub_80FE818(bmLinkLossSlot); + retVal = TRUE; + sub_80FE7F0(0x30, 0x02); + } + sub_80FEAF4(); + } + if (gRfuLinkStatus->parentChild == 1) + { + if (parentBmLinkRecoverySlot) + { + for (i = 0; i < 4; i++) + { + if ((gUnknown_3005E10.unk_30 >> i) & 1 && (parentBmLinkRecoverySlot >> i) & 1) + { + gUnknown_3005E10.unk_34[i] = 0; + } + } + gUnknown_3005E10.unk_30 &= ~parentBmLinkRecoverySlot; + gUnknown_3005E10.unk_14 = parentBmLinkRecoverySlot; + sub_80FE7F0(0x32, 0x01); + } + if (gUnknown_3005E10.unk_30) + { + flags = 0; + for (i = 0; i < 4; i++) + { + if ((gUnknown_3005E10.unk_30 >> i) & 1 && gUnknown_3005E10.unk_34[i] && --gUnknown_3005E10.unk_34[i] == 0) + { + gUnknown_3005E10.unk_30 &= ~(1 << i); + flags |= (1 << i); + } + } + if (flags) + { + sub_80FE818(flags); + retVal = TRUE; + gUnknown_3005E10.unk_14 = flags; + sub_80FE7F0(0x33, 0x01); + } + } + if (!gUnknown_3005E10.unk_30) + { + gUnknown_3005E10.unk_0a = 0; + } + } + return retVal; +} + +void rfu_syncVBlank_(void) +{ + if (rfu_syncVBlank()) + { + sub_80FE7F0(0xF1, 0x00); + sub_80FEAF4(); + } +} + +void sub_80FDA30(u32 a0) +{ + u8 r2; + + if (gUnknown_3005E10.unk_40 == NULL && gUnknown_3005E10.unk_04 != 0) + { + gUnknown_3005E10.unk_04 = 0; + } + else + { + if (gUnknown_3005E10.unk_07 != 0) + { + sub_80FDC28(a0); + } + do + { + if (gUnknown_3005E10.unk_04 != 0) + { + rfu_waitREQComplete(); + gUnknown_3005E10.unk_0e = 1; + switch (gUnknown_3005E10.unk_04) + { + case 23: + r2 = sub_80FD3A4() == 0x8001 ? 0x44 : 0xFF; + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE7F0(r2, 0); + break; + case 1: + if (sub_80FD3A4() == 0x8001) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; + gUnknown_3005E10.unk_05 = 3; + } + else + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE7F0(0xFF, 0); + } + break; + case 2: + rfu_REQ_reset(); + break; + case 3: + rfu_REQ_configSystem(gUnknown_3005E10.unk_3c->unk_02, gUnknown_3005E10.unk_3c->unk_00, gUnknown_3005E10.unk_3c->unk_01); + break; + case 4: + rfu_REQ_configGameData(gUnknown_3005E10.unk_3c->unk_04, gUnknown_3005E10.unk_3c->unk_06, (const u8 *)gUnknown_3005E10.unk_3c->unk_08, gUnknown_3005E10.unk_3c->unk_0c); + break; + case 5: + rfu_REQ_startSearchChild(); + break; + case 6: + rfu_REQ_pollSearchChild(); + break; + case 7: + rfu_REQ_endSearchChild(); + break; + case 8: + break; + case 9: + rfu_REQ_startSearchParent(); + break; + case 10: + rfu_REQ_pollSearchParent(); + break; + case 11: + rfu_REQ_endSearchParent(); + break; + case 12: + rfu_REQ_startConnectParent(gUnknown_3005E10.unk_1e); + break; + case 13: + rfu_REQ_pollConnectParent(); + break; + case 14: + rfu_REQ_endConnectParent(); + break; + case 15: + break; + case 16: + rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); + break; + case 17: + rfu_REQ_CHILD_pollConnectRecovery(); + break; + case 18: + rfu_REQ_CHILD_endConnectRecovery(); + break; + case 19: + rfu_REQ_changeMasterSlave(); + break; + case 20: + break; + case 21: + rfu_REQ_stopMode(); + break; + case 22: + break; + } + rfu_waitREQComplete(); + gUnknown_3005E10.unk_0e = 0; + } + } while (gUnknown_3005E10.unk_04 == 18 || gUnknown_3005E10.unk_04 == 19); + if (gRfuLinkStatus->parentChild != 1 || !sub_80FD850(0)) + { + sub_80FE418(); + sub_80FE63C(); + sub_80FE74C(); + sub_80FE918(); + } + } +} + +void sub_80FDC28(u32 a0) +{ + if (gUnknown_3005E10.unk_07 == 5) + { + gUnknown_3005E10.unk_06 = 1; + gUnknown_3005E10.unk_04 = 5; + gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c; + if (gUnknown_3005E10.unk_1a) + { + gUnknown_3005E10.unk_07 = 6; + } + else + { + gUnknown_3005E10.unk_07 = 1; + } + } + if (gUnknown_3005E10.unk_07 == 1) + { + gUnknown_3005E10.unk_06 = 1; + gUnknown_3005E10.unk_04 = 5; + gUnknown_3005E10.unk_1a = a0 % 140; + gUnknown_3005E10.unk_1c = 140 - gUnknown_3005E10.unk_1a; + if (gUnknown_3005E10.unk_1a) + { + gUnknown_3005E10.unk_07 = 2; + } + else + { + gUnknown_3005E10.unk_07 = 3; + } + } + if (gUnknown_3005E10.unk_07 == 3) + { + gUnknown_3005E10.unk_06 = 0; + gUnknown_3005E10.unk_1a = 40; + gUnknown_3005E10.unk_07 = 4; + gUnknown_3005E10.unk_04 = 9; + } +} + +void sub_80FDC98(u16 r8, u16 r6) +{ + u8 sp0; + register u8 *stwiRecvBuffer asm("r0"); + u8 *tmp; + u8 i; + + if (gUnknown_3005E10.unk_0e != 0) + { + gUnknown_3005E10.unk_0e = 0; + switch (r8) + { + case 16: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; + gUnknown_3005E10.unk_05 = 4; + } + break; + case 23: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; + gUnknown_3005E10.unk_05 = 0; + } + break; + case 22: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE7F0(0x00, 0x00); + } + break; + case 25: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 6; + } + break; + case 26: + if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0) + { + gUnknown_3005E10.unk_04 = 7; + gUnknown_3005E10.unk_05 = 8; + } + break; + case 27: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; + gUnknown_3005E10.unk_05 = 0; + if (gUnknown_3005E10.unk_07 == 0) + { + sub_80FE7F0(0x13, 0x00); + } + } + break; + case 28: + if (r6 == 0) + { + if (gUnknown_3005E10.unk_0b == 1 && gUnknown_3005E10.unk_1a > 1) + { + gUnknown_3005E10.unk_1a--; + } + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 10; + } + break; + case 29: + if (r6 == 0) + { + sp0 = sub_80FE778(); + gUnknown_3005E10.unk_14 = sp0; + if (sp0) + { + sub_80FE7F0(0x20, 0x01); + } + if (gUnknown_3005E10.unk_0b && gUnknown_3005E10.unk_1a != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX) + { + rfu_REQ_endSearchParent(); + rfu_waitREQComplete(); + gUnknown_3005E10.unk_04 = 9; + gUnknown_3005E10.unk_0b = 1; + } + } + if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0) + { + gUnknown_3005E10.unk_04 = 11; + gUnknown_3005E10.unk_05 = 0; + } + break; + case 30: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; + if (gUnknown_3005E10.unk_07 == 0) + { + if (gUnknown_3005E10.unk_04 == 0) + { + sub_80FE7F0(0x21, 0x00); + } + } + else if (gUnknown_3005E10.unk_07 != 7) + { + gUnknown_3005E10.unk_04 = 5; + gUnknown_3005E10.unk_07 = 5; + } + } + break; + case 31: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 13; + } + break; + case 32: + if (r6 == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10) && !sp0) + { + gUnknown_3005E10.unk_04 = 14; + } + if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0) + { + gUnknown_3005E10.unk_04 = 14; + } + break; + case 33: + if (r6 == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10)) + { + if (!sp0) + { + gUnknown_3005E10.unk_04 = 19; + gUnknown_3005E10.unk_05 = 15; + gUnknown_3005E10.unk_1e = 0x22; + gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_10; + } + else + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + gUnknown_3005E10.unk_1e = 0x23; + gUnknown_3005E10.unk_14 = sp0; + if (gUnknown_3005E10.unk_07) + { + gUnknown_3005E10.unk_07 = 3; + gUnknown_3005E10.unk_04 = 9; + } + } + sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01); + gUnknown_3005E10.unk_1e = 0; + } + break; + case 50: + if (r6 == 0) + { + gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag; + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 17; + for (gUnknown_3005E10.unk_10 = 0; gUnknown_3005E10.unk_10 < 4; gUnknown_3005E10.unk_10 ++) + { + if ((gRfuLinkStatus->linkLossSlotFlag >> gUnknown_3005E10.unk_10) & 1) + { + break; + } + } + } + break; + case 51: + if (r6 == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2) + { + gUnknown_3005E10.unk_04 = 18; + } + if (gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] && --gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] == 0) + { + gUnknown_3005E10.unk_04 = 18; + } + break; + case 52: + if (r6 == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0)) + { + if (!sp0) + { + gUnknown_3005E10.unk_04 = 19; + gUnknown_3005E10.unk_05 = 22; + gUnknown_3005E10.unk_1e = 0x32; + } + else + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE818(gRfuLinkStatus->linkLossSlotFlag); + gUnknown_3005E10.unk_1e = 0x33; + } + gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] = 0; + gUnknown_3005E10.unk_30 = 0; + gUnknown_3005E10.unk_0a = 0; + sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01); + gUnknown_3005E10.unk_1e = 0; + } + break; + case 39: + if (r6 == 0) + { + if (gUnknown_3005E10.unk_05 == 22) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11; + gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12; + gUnknown_3005E10.unk_02 = 1; + sub_80FE7F0(0x41, 0x00); + } + else if (gUnknown_3005E10.unk_05 == 15) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; + gUnknown_3005E10.unk_02 = 1; + sub_80FE7F0(0x41, 0x00); + gUnknown_3005E10.unk_24 |= 1 << gUnknown_3005E10.unk_10; + gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = gUnknown_3005E10.unk_26; + rfu_clearSlot(4, gUnknown_3005E10.unk_10); + tmp = &sp0; + *tmp = rfu_NI_CHILD_setSendGameName(gUnknown_3005E10.unk_10, 0x0e); + if (*tmp) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FEAF4(); + sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + gUnknown_3005E10.unk_14 = sp0; + sub_80FE7F0(0x25, 0x01); + } + } + } + break; + case 61: + if (r6 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE7F0(0x42, 0x00); + } + break; + } + gUnknown_3005E10.unk_0e = 1; + } + else if (r6 == 3 && gUnknown_3005E10.unk_0f && (r8 == 0x24 || r8 == 0x26 || r8 == 0x27)) + { + rfu_REQ_RFUStatus(); + rfu_waitREQComplete(); + rfu_getRFUStatus(&sp0); + if (sp0 == 0 && gRfuLinkStatus->parentChild == MODE_CHILD) + { + stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; + stwiRecvBuffer[4] = gRfuLinkStatus->connSlotFlag; + stwiRecvBuffer[5] = 1; + sub_80FD850(0x29); + r6 = 0; + } + } + switch (r8) + { + case 48: + if (r6 == 0) + { + stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; + gUnknown_3005E10.unk_14 = stwiRecvBuffer[8]; + sub_80FE83C(gUnknown_3005E10.unk_14); + if (gUnknown_3005E10.unk_30) + { + gUnknown_3005E10.unk_30 &= ~gUnknown_3005E10.unk_14; + for (i = 0; i < 4; i++) + { + if ((gUnknown_3005E10.unk_14 >> i) & 1) + { + gUnknown_3005E10.unk_34[i] = 0; + } + } + if (gUnknown_3005E10.unk_06 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + } + } + sp0 = gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14; + for (i = 0; i < 4; i++) + { + if ((sp0 >> i) & 1 && gUnknown_3005E10.unk_01) + { + gUnknown_3005E10.unk_01--; + } + } + gUnknown_3005E10.unk_00 &= ~gUnknown_3005E10.unk_14; + if (gUnknown_3005E10.unk_07) + { + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + { + if (gUnknown_3005E10.unk_07 == 8) + { + gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c; + gUnknown_3005E10.unk_07 = 6; + gUnknown_3005E10.unk_04 = 6; + } + else if (gUnknown_3005E10.unk_04 != 6 && gUnknown_3005E10.unk_04 != 7) + { + gUnknown_3005E10.unk_07 = 1; + gUnknown_3005E10.unk_04 = 5; + } + } + } + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + { + if (gUnknown_3005E10.unk_04 == 0) + { + gUnknown_3005E10.unk_06 = -1; + } + } + if (gUnknown_3005E10.unk_0e == 0) + { + sub_80FE7F0(0x40, 0x01); + } + } + break; + case 38: + sub_80FE6F0(); + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) + { + sub_80FE7F0(0x50, 0x00); + } + break; + case 16: + case 61: + if (r6 == 0) + { + gUnknown_3005E10.unk_0d = 0; + gUnknown_3005E10.unk_01 = 0; + gUnknown_3005E10.unk_00 = 0;; + gUnknown_3005E10.unk_06 = -1; + sub_80FEAF4(); + if (r8 == 61) + { + sub_80FD484(); + } + } + break; + } + if (r6 != 0) + { + if (r8 == 28 && r6 != 0 && gUnknown_3005E10.unk_07 == 4) + { + gRfuLinkStatus->parentChild = MODE_PARENT; + gRfuLinkStatus->connSlotFlag = 0xF; + sub_80FE818(15); + rfu_waitREQComplete(); + return; + } + else + { + gUnknown_3005E10.unk_14 = r8; + gUnknown_3005E10.unk_16 = r6; + if (gUnknown_3005E10.unk_0e) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + } + sub_80FE7F0(0xf0, 0x02); + sub_80FEAF4(); + } + } + if (r8 == 0xFF) + { + sub_80FE7F0(0xf2, 0x00); + sub_80FEAF4(); + } +} + +void sub_80FE394(u16 reqCommandId) +{ + u8 r7; + u8 ackFlag; + + r7 = gUnknown_3005E10.unk_0e; + gUnknown_3005E10.unk_0e = 0; + gUnknown_3005E10.unk_0f = 1; + if (gRfuLinkStatus->parentChild == MODE_CHILD) + { + sub_80FD850(reqCommandId); + if (gUnknown_3005E10.unk_02 != 1) + { + sub_80FEAF4(); + gUnknown_3005E10.unk_0f = 0; + gUnknown_3005E10.unk_0e = r7; + return; + } + } + else + { + if (!rfu_UNI_PARENT_getDRAC_ACK(&ackFlag)) + { + gUnknown_3005E10.unk_03 |= ackFlag; + } + } + if (gUnknown_3005E10.unk_44 != NULL) + { + gUnknown_3005E10.unk_44(reqCommandId); + rfu_waitREQComplete(); + if (gUnknown_3005E10.unk_02 == 2) + { + sub_80FEAF4(); + } + } + gUnknown_3005E10.unk_0f = 0; + gUnknown_3005E10.unk_0e = r7; +} + +void sub_80FE418(void) +{ + u8 flags; + u8 sp0; + u8 i; + u8 r5; + u8 r4; + const u16 *ptr; + + if (gUnknown_3005E10.unk_04 == 5 || gUnknown_3005E10.unk_04 == 6 || gUnknown_3005E10.unk_04 == 7 || gUnknown_3005E10.unk_04 == 8) + { + flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_3005E10.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; + gUnknown_3005E10.unk_0c = gRfuLinkStatus->connSlotFlag; + if (flags) + { + gUnknown_3005E10.unk_14 = flags; + sub_80FE7F0(0x10, 0x01); + } + sp0 = 0x00; + for (i = 0; i < 4; i++) + { + r4 = 1 << i; + r5 = 0x00; + if (flags & r4) + { + gUnknown_3005E10.unk_28[i] = gUnknown_3005E10.unk_26; + gUnknown_3005E10.unk_24 |= r4; + } + else if (gUnknown_3005E10.unk_24 & r4) + { + if (gRfuSlotStatusNI[i]->recv.state == 0x46) + { + if (gRfuSlotStatusNI[i]->recv.dataType == 1) // Game identification information + { + r5 = 0x02; + for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++) + { + if (gRfuLinkStatus->partner[i].serialNo == *ptr) + { + gUnknown_3005E10.unk_00 |= r4; + gUnknown_3005E10.unk_01++; + sp0 |= r4; + r5 |= 0x01; + break; + } + } + if (!(r5 & 0x01)) + { + r5 |= 0x04; + } + } + } + else if (--gUnknown_3005E10.unk_28[i] == 0) + { + r5 = 0x06; + } + if (r5 & 0x02) + { + gUnknown_3005E10.unk_24 &= ~r4; + gUnknown_3005E10.unk_28[i] = 0; + rfu_clearSlot(0x08, i); + } + if (r5 & 0x04) + { + gUnknown_3005E10.unk_0d |= r4; + } + } + } + if (sp0) + { + gUnknown_3005E10.unk_14 = sp0; + sub_80FE7F0(0x11, 0x01); + } + if (gUnknown_3005E10.unk_0d) + { + r5 = 0x01; + if (gRfuLinkStatus->sendSlotUNIFlag && ((gUnknown_3005E10.unk_03 & gUnknown_3005E10.unk_00) != gUnknown_3005E10.unk_00)) + { + r5 = 0x00; + } + if (r5) + { + sub_80FE818(gUnknown_3005E10.unk_0d); + gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_0d; + gUnknown_3005E10.unk_0d = 0; + sub_80FE7F0(0x12, 0x01); + } + } + if (gUnknown_3005E10.unk_24 == 0 && gUnknown_3005E10.unk_04 == 8) + { + if (gUnknown_3005E10.unk_07 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE7F0(0x14, 0x00); + } + else + { + if (gUnknown_3005E10.unk_07 == 2) + { + gUnknown_3005E10.unk_07 = 3; + gUnknown_3005E10.unk_04 = 9; + } + else + { + gUnknown_3005E10.unk_07 = 1; + gUnknown_3005E10.unk_04 = 5; + } + if (gUnknown_3005E10.unk_00) + { + gUnknown_3005E10.unk_1a = 0; + gUnknown_3005E10.unk_07 = 8; + gUnknown_3005E10.unk_04 = 5; + } + } + } + } +} + +void sub_80FE63C(void) +{ + u16 imeBak = REG_IME; + REG_IME = 0; + if (gUnknown_3005E10.unk_04 == 15) + { + if (--gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == 0x27) + { + sub_80FEB14(); + gUnknown_3005E10.unk_04 = 24; + rfu_clearSlot(4, gUnknown_3005E10.unk_10); + gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10); + gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0; + } + } + REG_IME = imeBak; + if (gUnknown_3005E10.unk_04 == 24) + { + if (gUnknown_3005E10.unk_02 == 1) + { + sub_80FEB14(); + } + if (gUnknown_3005E10.unk_02 == 0) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + gUnknown_3005E10.unk_14 = 0; + sub_80FE7F0(0x25, 0x01); + } + } +} + +void sub_80FE6F0(void) +{ + if (gUnknown_3005E10.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == 0x26) + { + gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + rfu_clearSlot(4, gUnknown_3005E10.unk_10); + gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10); + gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0; + sub_80FE7F0(0x24, 0x00); + } +} + +void sub_80FE74C(void) +{ + if (gUnknown_3005E10.unk_06 == 0 && gUnknown_3005E10.unk_0a == 1) + { + gUnknown_3005E10.unk_11 = gUnknown_3005E10.unk_04; + gUnknown_3005E10.unk_12 = gUnknown_3005E10.unk_05; + gUnknown_3005E10.unk_04 = 16; + gUnknown_3005E10.unk_05 = 17; + gUnknown_3005E10.unk_0a = 2; + } +} + +u8 sub_80FE778(void) +{ + u8 i; + const u16 *ptr; + u8 flags = 0x00; + + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) + { + for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++) + { + if (gRfuLinkStatus->partner[i].serialNo == *ptr) + { + flags |= (1 << i); + } + } + } + return flags; +} + +void sub_80FE7F0(u8 a0, u8 a1) +{ + if (gUnknown_3005E10.unk_40 != NULL) + { + gUnknown_3005E10.unk_40(a0, a1); + } + gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_16 = 0; +} + +void sub_80FE818(u8 a0) +{ + u8 unk_0e_bak = gUnknown_3005E10.unk_0e; + gUnknown_3005E10.unk_0e = 1; + rfu_REQ_disconnect(a0); + rfu_waitREQComplete(); + gUnknown_3005E10.unk_0e = unk_0e_bak; +} + +void sub_80FE83C(u8 a0) +{ + u8 i; + + if (gRfuLinkStatus->sendSlotNIFlag) + { + for (i = 0; i < 4; i++) + { + if (gRfuSlotStatusNI[i]->send.state & 0x8000 && gRfuSlotStatusNI[i]->send.bmSlot & a0) + { + rfu_changeSendTarget(0x20, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0); + } + } + } + if (gRfuLinkStatus->recvSlotNIFlag) + { + for (i = 0; i < 4; i++) + { + if (gRfuSlotStatusNI[i]->recv.state & 0x8000 && gRfuSlotStatusNI[i]->recv.bmSlot & a0) + { + rfu_NI_stopReceivingData(i); + } + } + } + if (gRfuLinkStatus->sendSlotUNIFlag) + { + gRfuLinkStatus->sendSlotUNIFlag &= ~a0; + for (i = 0; i < 4; i++) + { + if (gRfuSlotStatusUNI[i]->send.state == 0x8024 && a0 & gRfuSlotStatusUNI[i]->send.bmSlot) + { + gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0; + } + } + } +} + +void sub_80FE918(void) +{ + u8 i; + u8 j; + u8 flags; + + if (gUnknown_3005E10.unk_18) + { + if (gRfuLinkStatus->sendSlotNIFlag) + { + for (i = 0; i < 4; i ++) + { + if (gRfuSlotStatusNI[i]->send.state & 0x8000) + { + flags = 0; + for (j = 0; j < 4; j++) + { + if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > gUnknown_3005E10.unk_18) + { + flags |= (1 << j); + } + if (flags) + { + rfu_changeSendTarget(0x20, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot); + } + } + } + } + } + if (gRfuLinkStatus->recvSlotNIFlag) + { + for (i = 0; i < 4; i++) + { + if (gRfuSlotStatusNI[i]->recv.state & 0x8000 && gRfuSlotStatusNI[i]->recv.failCounter > gUnknown_3005E10.unk_18) + { + rfu_NI_stopReceivingData(i); + } + } + } + } +} + +void sub_80FEA10(void (*func)(u16)) +{ + gUnknown_3005E10.unk_44 = func; + rfu_setMSCCallback(sub_80FE394); +} + +void sub_80FEA28(void (*func)(u8, u8)) +{ + gUnknown_3005E10.unk_40 = func; +} + +u8 sub_80FEA34(u8 a0, u16 a1) +{ + u16 imeBak; + if (gUnknown_3005E10.unk_09 && a0 == 0 && gUnknown_3005E10.unk_30) + { + return 5; + } + imeBak = REG_IME; + REG_IME = 0; + gUnknown_3005E10.unk_09 = a0; + gUnknown_3005E10.unk_32 = a1; + REG_IME = imeBak; + return 0; +} + +u8 sub_80FEA78(u16 a0) +{ + if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) + { + gUnknown_3005E10.unk_14 = 6; + sub_80FE7F0(0xf3, 0x01); + return 6; + } + gUnknown_3005E10.unk_18 = a0; + return 0; +} + +u8 sub_80FEAB4(u8 a0) +{ + if (gUnknown_3005E10.unk_04 == 9 || gUnknown_3005E10.unk_04 == 10 || gUnknown_3005E10.unk_04 == 11) + { + gUnknown_3005E10.unk_14 = 7; + sub_80FE7F0(0xf3, 0x01); + return 7; + } + if (a0) + { + gUnknown_3005E10.unk_0b = 1; + } + else + { + gUnknown_3005E10.unk_0b = 0; + } + return 0; +} + +void sub_80FEAF4(void) +{ + if (gUnknown_3005E10.unk_02) + { + gUnknown_3005E10.unk_02 = 0; + sub_80FE7F0(0x45, 0x00); + } +} + +void sub_80FEB14(void) +{ + if (gUnknown_3005E10.unk_02 == 0) + { + sub_80FE7F0(0x45, 0x00); + } + else if (gUnknown_3005E10.unk_02 == 1) + { + gUnknown_3005E10.unk_02 = 2; + } +} + +void sub_80FEB3C(void) +{ + if (gUnknown_3005E10.unk_07) + { + switch (gUnknown_3005E10.unk_04) + { + case 5: + gUnknown_3005E10.unk_07 = 3; + gUnknown_3005E10.unk_04 = 9; + break; + case 6: + gUnknown_3005E10.unk_07 = 2; + gUnknown_3005E10.unk_1a = 1; + break; + case 7: + case 8: + gUnknown_3005E10.unk_07 = 2; + break; + case 9: + case 10: + gUnknown_3005E10.unk_1a = 40; + break; + case 11: + gUnknown_3005E10.unk_1a = 40; + gUnknown_3005E10.unk_04 = 10; + break; + } + } +} + |