From 8a5f292618e7464340a28bb584295510e4b50b3d Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 16 Jan 2020 04:46:17 +0800 Subject: [PATCH 1/5] document symbols --- asm/librfu.s | 473 ++++++++++++++++++------------------ asm/librfu_intr.s | 40 +-- common_syms/librfu.txt | 12 +- common_syms/librfu_stwi.txt | 2 +- data/librfu_rodata.s | 6 +- include/librfu.h | 62 ++--- include/link_rfu.h | 27 ++ include/union_room.h | 2 +- src/crt0.s | 2 +- src/librfu.c | 12 +- src/librfu_rfu.c | 30 +-- src/librfu_stwi.c | 290 +++++++++++----------- src/link_rfu.c | 230 +++++++++--------- src/trade.c | 2 +- src/union_room.c | 2 +- 15 files changed, 596 insertions(+), 596 deletions(-) diff --git a/asm/librfu.s b/asm/librfu.s index 82fba2202e..28cc015943 100644 --- a/asm/librfu.s +++ b/asm/librfu.s @@ -47,21 +47,21 @@ _082E3EEE: .align 2, 0 .pool _082E3EFC: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus str r4, [r0] - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic adds r0, r4, 0 adds r0, 0xB4 str r0, [r1] - ldr r1, =gUnknown_03007898 + ldr r1, =gRfuFixed adds r0, 0x28 str r0, [r1] - ldr r2, =gUnknown_03007880 + ldr r2, =gRfuSlotStatusNI movs r1, 0xDE lsls r1, 1 adds r0, r4, r1 str r0, [r2] - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI movs r3, 0xDF lsls r3, 2 adds r0, r4, r3 @@ -88,10 +88,10 @@ _082E3F28: lsrs r5, r0, 16 cmp r5, 0x3 bls _082E3F28 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r1, [r0] adds r1, 0xDC - ldr r4, =gUnknown_03007870 + ldr r4, =gRfuSlotStatusUNI ldr r0, [r4, 0xC] adds r0, 0x1C str r0, [r1] @@ -100,7 +100,7 @@ _082E3F28: bl STWI_init_all bl rfu_STC_clearAPIVariables movs r5, 0 - ldr r3, =gUnknown_03007880 + ldr r3, =gRfuSlotStatusNI movs r2, 0 _082E3F6C: lsls r1, r5, 2 @@ -121,7 +121,7 @@ _082E3F6C: movs r0, 0x2 negs r0, r0 ands r4, r0 - ldr r1, =gUnknown_03007898 + ldr r1, =gRfuFixed ldr r0, [r1] adds r2, r0, 0 adds r2, 0x8 @@ -159,7 +159,7 @@ rfu_STC_clearAPIVariables: @ 82E3FDC adds r7, r0, 0 movs r6, 0 strh r6, [r1] - ldr r5, =gUnknown_03007894 + ldr r5, =gRfuStatic ldr r1, [r5] ldrb r4, [r1] mov r0, sp @@ -174,7 +174,7 @@ rfu_STC_clearAPIVariables: @ 82E3FDC mov r0, sp adds r0, 0x2 strh r1, [r0] - ldr r4, =gUnknown_03007890 + ldr r4, =gRfuLinkStatus ldr r1, [r4] ldr r2, =0x0100005a bl CpuSet @@ -230,7 +230,7 @@ rfu_UNI_PARENT_getDRAC_ACK: @ 82E4078 adds r4, r0, 0 movs r0, 0 strb r0, [r4] - ldr r5, =gUnknown_03007890 + ldr r5, =gRfuLinkStatus ldr r0, [r5] ldrb r0, [r0] cmp r0, 0x1 @@ -284,7 +284,7 @@ rfu_setTimerInterrupt: @ 82E40C0 thumb_func_start rfu_getSTWIRecvBuffer rfu_getSTWIRecvBuffer: @ 82E40D4 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -305,7 +305,7 @@ rfu_setMSCCallback: @ 82E40E4 rfu_setREQCallback: @ 82E40F0 push {lr} adds r1, r0, 0 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] str r1, [r0] negs r0, r1 @@ -324,7 +324,7 @@ rfu_enableREQCallback: @ 82E410C lsls r0, 24 cmp r0, 0 beq _082E4124 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] ldrb r1, [r2] movs r0, 0x8 @@ -333,7 +333,7 @@ rfu_enableREQCallback: @ 82E410C .align 2, 0 .pool _082E4124: - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] ldrb r1, [r2] movs r0, 0xF7 @@ -355,7 +355,7 @@ rfu_STC_REQ_callback: @ 82E4138 lsrs r4, r1, 16 ldr r0, =rfu_CB_defaultCallback bl STWI_set_Callback_M - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] strh r4, [r0, 0x1C] ldrb r1, [r0] @@ -363,7 +363,7 @@ rfu_STC_REQ_callback: @ 82E4138 ands r0, r1 cmp r0, 0 beq _082E4166 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] ldr r2, [r0] adds r0, r5, 0 @@ -386,21 +386,21 @@ rfu_CB_defaultCallback: @ 82E4178 lsrs r3, r1, 16 cmp r0, 0xFF bne _082E41D4 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] ldrb r1, [r0] movs r0, 0x8 ands r0, r1 cmp r0, 0 beq _082E41A2 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] ldr r2, [r0] movs r0, 0xFF adds r1, r3, 0 bl _call_via_r2 _082E41A2: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -422,7 +422,7 @@ _082E41C2: lsrs r4, r0, 24 cmp r4, 0x3 bls _082E41B0 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] movs r0, 0xFF strb r0, [r1] @@ -438,7 +438,7 @@ _082E41D4: rfu_waitREQComplete: @ 82E41E8 push {lr} bl STWI_poll_CommandEnd - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] ldrh r0, [r0, 0x1C] pop {r1} @@ -463,7 +463,7 @@ rfu_REQ_RFUStatus: @ 82E41FC rfu_getRFUStatus: @ 82E4210 push {r4,r5,lr} adds r4, r0, 0 - ldr r5, =gUnknown_03007898 + ldr r5, =gRfuFixed ldr r0, [r5] adds r0, 0xDC ldr r0, [r0] @@ -495,18 +495,15 @@ _082E4246: bx r1 thumb_func_end rfu_getRFUStatus - thumb_func_start sub_82E424C -sub_82E424C: @ 82E424C + thumb_func_start rfu_MBOOT_CHILD_inheritanceLinkStatus +rfu_MBOOT_CHILD_inheritanceLinkStatus: @ 82E424C push {lr} - ldr r2, =gUnknown_089A324C + ldr r2, =str_checkMbootLL ldr r3, =gDma3Requests + 0xE0 b _082E4266 .align 2, 0 .pool - thumb_func_end sub_82E424C - - thumb_func_start sub_82E425C -sub_82E425C: @ 82E425C +_082E425C: ldrb r0, [r3] adds r3, 0x1 adds r2, 0x1 @@ -515,7 +512,7 @@ sub_82E425C: @ 82E425C _082E4266: ldrb r1, [r2] cmp r1, 0 - bne sub_82E425C + bne _082E425C movs r2, 0xC0 lsls r2, 18 movs r3, 0 @@ -537,11 +534,11 @@ _082E4274: bne _082E42BC movs r0, 0xC0 lsls r0, 18 - ldr r1, =gUnknown_03007890 + ldr r1, =gRfuLinkStatus ldr r1, [r1] movs r2, 0x5A bl CpuSet - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] ldrb r1, [r2] movs r0, 0x80 @@ -556,7 +553,7 @@ _082E42BC: _082E42BE: pop {r1} bx r1 - thumb_func_end sub_82E425C + thumb_func_end rfu_MBOOT_CHILD_inheritanceLinkStatus thumb_func_start rfu_REQ_stopMode rfu_REQ_stopMode: @ 82E42C4 @@ -568,7 +565,7 @@ rfu_REQ_stopMode: @ 82E42C4 movs r0, 0x3D movs r1, 0x6 bl rfu_STC_REQ_callback - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r1, [r0] ldrh r0, [r1, 0x12] movs r0, 0x6 @@ -580,11 +577,11 @@ _082E42EC: bl AgbRFU_SoftReset bl rfu_STC_clearAPIVariables movs r0, 0x8 - bl sub_82E6D6C + bl AgbRFU_checkID ldr r1, =0x00008001 cmp r0, r1 bne _082E4350 - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] ldrb r0, [r0, 0xA] lsls r0, 2 @@ -673,7 +670,7 @@ _082E43AC: bl AgbRFU_SoftReset bl rfu_STC_clearAPIVariables movs r0, 0x1E - bl sub_82E6D6C + bl AgbRFU_checkID adds r2, r0, 0 cmp r2, 0 bne _082E43CA @@ -746,7 +743,7 @@ rfu_REQ_configSystem: @ 82E440C bl STWI_send_SystemConfigREQ cmp r6, 0 bne _082E444C - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] movs r0, 0x1 strh r0, [r1, 0x1A] @@ -762,7 +759,7 @@ _082E444C: lsls r0, 2 adds r1, r6, 0 bl Div - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic ldr r1, [r1] strh r0, [r1, 0x1A] strh r4, [r5] @@ -860,10 +857,10 @@ rfu_CB_configGameData: @ 82E4500 lsrs r7, r1, 16 cmp r7, 0 bne _082E458A - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] ldr r1, [r0, 0x24] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r6, [r0] ldrb r2, [r1, 0x4] adds r5, r6, 0 @@ -895,7 +892,7 @@ _082E454C: _082E4552: strb r0, [r1] movs r2, 0 - ldr r3, =gUnknown_03007890 + ldr r3, =gRfuLinkStatus _082E4558: ldr r0, [r3] adds r0, 0x9A @@ -910,7 +907,7 @@ _082E4558: bls _082E4558 adds r4, 0x1 movs r2, 0 - ldr r3, =gUnknown_03007890 + ldr r3, =gRfuLinkStatus _082E4574: ldr r0, [r3] adds r0, 0xA9 @@ -939,7 +936,7 @@ rfu_REQ_startSearchChild: @ 82E459C push {r4,lr} movs r1, 0 ldr r4, =rfu_CB_defaultCallback - ldr r3, =gUnknown_03007894 + ldr r3, =gRfuStatic movs r2, 0 _082E45A6: ldr r0, [r3] @@ -959,7 +956,7 @@ _082E45A6: lsrs r1, r0, 16 cmp r1, 0 bne _082E45F0 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -995,7 +992,7 @@ rfu_CB_startSearchChild: @ 82E460C adds r2, r1, 0 cmp r2, 0 bne _082E4624 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] movs r0, 0x1 strb r0, [r1, 0x9] @@ -1022,7 +1019,7 @@ rfu_STC_clearLinkStatus: @ 82E4634 mov r0, sp movs r5, 0 strh r5, [r0] - ldr r4, =gUnknown_03007890 + ldr r4, =gRfuLinkStatus ldr r1, [r4] adds r1, 0x14 ldr r2, =0x01000040 @@ -1031,7 +1028,7 @@ rfu_STC_clearLinkStatus: @ 82E4634 strb r5, [r0, 0x8] _082E465C: movs r1, 0 - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus adds r4, r2, 0 movs r3, 0 _082E4664: @@ -1098,7 +1095,7 @@ rfu_CB_pollAndEndSearchChild: @ 82E46C0 _082E46D2: cmp r4, 0x1A bne _082E4714 - ldr r5, =gUnknown_03007890 + ldr r5, =gRfuLinkStatus ldr r0, [r5] adds r0, 0x94 ldrh r0, [r0] @@ -1112,7 +1109,7 @@ _082E46D2: cmp r0, 0 bne _082E4730 ldr r1, [r5] - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -1125,7 +1122,7 @@ _082E46D2: _082E4714: cmp r4, 0x1B bne _082E4730 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1] cmp r0, 0xFF @@ -1134,7 +1131,7 @@ _082E4714: movs r0, 0 strh r0, [r1] _082E4728: - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] movs r0, 0 strb r0, [r1, 0x9] @@ -1154,7 +1151,7 @@ rfu_STC_readChildList: @ 82E4748 push {r4-r7,lr} mov r7, r8 push {r7} - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -1162,9 +1159,9 @@ rfu_STC_readChildList: @ 82E4748 adds r6, r0, 0x4 cmp r7, 0 beq _082E47EE - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic mov r8, r0 - ldr r1, =gUnknown_03007890 + ldr r1, =gRfuLinkStatus mov r12, r1 _082E4766: ldrb r4, [r6, 0x2] @@ -1332,12 +1329,12 @@ rfu_STC_readParentCandidateList: @ 82E4888 mov r0, sp movs r4, 0 strh r4, [r0] - ldr r5, =gUnknown_03007890 + ldr r5, =gRfuLinkStatus ldr r1, [r5] adds r1, 0x14 ldr r2, =0x01000040 bl CpuSet - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r2, [r0] @@ -1471,7 +1468,7 @@ rfu_REQ_startConnectParent: @ 82E4998 lsrs r4, r0, 16 movs r3, 0 movs r2, 0 - ldr r1, =gUnknown_03007890 + ldr r1, =gRfuLinkStatus ldr r0, [r1] ldrh r0, [r0, 0x14] cmp r0, r4 @@ -1497,7 +1494,7 @@ _082E49C4: _082E49CC: cmp r3, 0 bne _082E49F0 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] strh r4, [r0, 0x1E] ldr r0, =rfu_STC_REQ_callback @@ -1545,7 +1542,7 @@ rfu_CB_pollConnectParent: @ 82E4A14 str r1, [sp, 0x28] cmp r1, 0 bne _082E4B16 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -1559,7 +1556,7 @@ rfu_CB_pollConnectParent: @ 82E4A14 lsls r0, 17 lsls r0, r1 lsrs r2, r0, 24 - ldr r4, =gUnknown_03007890 + ldr r4, =gRfuLinkStatus ldr r3, [r4] ldrb r1, [r3, 0x2] adds r0, r2, 0 @@ -1583,7 +1580,7 @@ rfu_CB_pollConnectParent: @ 82E4A14 strb r0, [r1, 0x1] ldr r0, [r4] strb r2, [r0] - ldr r3, =gUnknown_03007894 + ldr r3, =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0x80 @@ -1641,7 +1638,7 @@ _082E4AEA: _082E4AF4: cmp r5, 0x3 bhi _082E4B16 - ldr r4, =gUnknown_03007890 + ldr r4, =gRfuLinkStatus mov r0, r10 lsls r5, r0, 5 adds r0, r5, 0 @@ -1677,7 +1674,7 @@ rfu_getConnectParentStatus: @ 82E4B34 adds r3, r0, 0 movs r0, 0xFF strb r0, [r3] - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r2, [r0] @@ -1709,14 +1706,14 @@ rfu_REQ_endConnectParent: @ 82E4B68 ldr r0, =rfu_CB_pollConnectParent bl STWI_set_Callback_M bl STWI_send_CP_EndREQ - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] ldrb r0, [r1, 0x6] cmp r0, 0x3 bhi _082E4B90 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] adds r0, 0xA ldrb r1, [r1, 0x6] @@ -1734,12 +1731,12 @@ _082E4B90: rfu_syncVBlank: @ 82E4BA0 push {r4,r5,lr} bl rfu_NI_checkCommFailCounter - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0xFF beq _082E4C78 - ldr r4, =gUnknown_03007894 + ldr r4, =gRfuStatic ldr r1, [r4] ldrb r0, [r1, 0x6] cmp r0, 0 @@ -1778,7 +1775,7 @@ _082E4BFA: cmp r3, 0 beq _082E4C10 _082E4BFE: - ldr r3, =gUnknown_03007894 + ldr r3, =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0xFD @@ -1787,7 +1784,7 @@ _082E4BFE: .align 2, 0 .pool _082E4C10: - ldr r3, =gUnknown_03007894 + ldr r3, =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r0, 0x2 @@ -1806,7 +1803,7 @@ _082E4C1A: movs r0, 0xFB ands r0, r1 strb r0, [r3] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] ldrb r0, [r0, 0x3] @@ -1828,7 +1825,7 @@ _082E4C54: lsrs r4, r0, 24 cmp r4, 0x3 bls _082E4C42 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] movs r0, 0xFF strb r0, [r1] @@ -1874,21 +1871,21 @@ rfu_REQBN_watchLink: @ 82E4C80 ldrb r0, [r2, 0xC] ldr r2, [sp, 0x4] strb r0, [r2] - ldr r5, =gUnknown_03007890 + ldr r5, =gRfuLinkStatus ldr r0, [r5] ldrb r0, [r0] cmp r0, 0xFF bne _082E4CBE b _082E504E _082E4CBE: - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] ldrb r0, [r0, 0x14] cmp r0, 0 bne _082E4CCA b _082E504E _082E4CCA: - ldr r3, =gUnknown_03007894 + ldr r3, =gRfuStatic ldr r2, [r3] ldrb r1, [r2] movs r4, 0x4 @@ -1912,7 +1909,7 @@ _082E4CEE: lsrs r0, 24 cmp r0, 0x29 bne _082E4D30 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -1940,7 +1937,7 @@ _082E4D30: lsls r0, 1 cmp r6, r0 bne _082E4D80 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -1963,7 +1960,7 @@ _082E4D56: ands r0, r1 cmp r0, 0 beq _082E4D76 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] adds r0, 0xA adds r0, r5 @@ -1983,7 +1980,7 @@ _082E4D80: bne _082E4D88 b _082E504E _082E4D88: - ldr r4, =gUnknown_03007898 + ldr r4, =gRfuFixed ldr r0, [r4] adds r0, 0xDC ldr r0, [r0] @@ -2005,7 +2002,7 @@ _082E4D88: ldr r0, [r0] adds r2, r0, 0x4 movs r5, 0 - ldr r3, =gUnknown_03007890 + ldr r3, =gRfuLinkStatus _082E4DBC: ldr r0, [r3] adds r0, 0xA @@ -2031,7 +2028,7 @@ _082E4DE8: ldr r0, [sp, 0xC] b _082E5050 _082E4DF4: - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic ldr r0, [r1] adds r0, 0xE adds r2, r0, r5 @@ -2041,7 +2038,7 @@ _082E4DF4: beq _082E4E1A subs r0, 0x4 strb r0, [r2] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] adds r0, 0xA adds r1, r0, r5 @@ -2065,7 +2062,7 @@ _082E4E2E: ldr r2, [sp, 0x8] cmp r2, 0x1 bne _082E4F10 - ldr r4, =gUnknown_03007890 + ldr r4, =gRfuLinkStatus ldr r1, [r4] ldrb r0, [r1, 0x2] ands r0, r6 @@ -2109,7 +2106,7 @@ _082E4E84: lsls r0, 16 cmp r0, 0 bne _082E4F10 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -2128,7 +2125,7 @@ _082E4E84: .align 2, 0 .pool _082E4EB8: - ldr r2, =gUnknown_03007894 + ldr r2, =gRfuStatic ldr r1, [r2] adds r1, 0xA adds r1, r5 @@ -2173,7 +2170,7 @@ _082E4F04: _082E4F0E: strb r1, [r0] _082E4F10: - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus mov r12, r2 ldr r1, [r2] ldrb r7, [r1] @@ -2215,7 +2212,7 @@ _082E4F10: ldrb r0, [r1, 0x1] adds r0, 0x1 strb r0, [r1, 0x1] - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] adds r0, 0xA adds r0, r5 @@ -2235,7 +2232,7 @@ _082E4F7E: bne _082E5002 bl STWI_send_SlotStatusREQ bl STWI_poll_CommandEnd - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r2, [r0] @@ -2250,7 +2247,7 @@ _082E4F7E: ldrb r0, [r2, 0x2] cmp r0, r5 bne _082E4FD0 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] lsls r1, r5, 1 adds r0, 0x12 @@ -2276,7 +2273,7 @@ _082E4FD0: ldrb r0, [r2, 0x2] cmp r0, r5 bne _082E4FD0 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] lsls r1, r5, 1 adds r0, 0x12 @@ -2293,7 +2290,7 @@ _082E4FFE: lsrs r0, 24 mov r9, r0 _082E5002: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r1, [r0, 0x2] mov r2, r8 @@ -2320,7 +2317,7 @@ _082E5028: bl STWI_send_DisconnectREQ bl STWI_poll_CommandEnd _082E5038: - ldr r1, =gUnknown_03007898 + ldr r1, =gRfuFixed ldr r0, [r1] adds r0, 0xDC ldr r0, [r0] @@ -2361,13 +2358,13 @@ rfu_STC_removeLinkData: @ 82E506C lsls r0, 17 lsls r0, r7 lsrs r6, r0, 24 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] adds r0, 0xE adds r0, r7 movs r1, 0 strb r1, [r0] - ldr r1, =gUnknown_03007890 + ldr r1, =gRfuLinkStatus ldr r4, [r1] ldrb r0, [r4, 0x2] ands r0, r6 @@ -2447,7 +2444,7 @@ rfu_REQ_disconnect: @ 82E512C push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r1, [r2] ldrb r0, [r1, 0x2] ldrb r1, [r1, 0x3] @@ -2455,7 +2452,7 @@ rfu_REQ_disconnect: @ 82E512C ands r0, r4 cmp r0, 0 beq _082E51B0 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] strb r4, [r1, 0x5] ldr r2, [r2] @@ -2519,7 +2516,7 @@ rfu_CB_disconnect: @ 82E51BC lsrs r5, r1, 16 cmp r5, 0x3 bne _082E51F8 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0 @@ -2531,7 +2528,7 @@ rfu_CB_disconnect: @ 82E51BC lsls r0, 16 cmp r0, 0 bne _082E51F8 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] @@ -2540,9 +2537,9 @@ rfu_CB_disconnect: @ 82E51BC bne _082E51F8 movs r5, 0 _082E51F8: - ldr r3, =gUnknown_03007894 + ldr r3, =gRfuStatic ldr r2, [r3] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0x2] ldrb r1, [r1, 0x3] @@ -2550,7 +2547,7 @@ _082E51F8: ldrb r1, [r2, 0x5] ands r0, r1 strb r0, [r2, 0x5] - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -2565,7 +2562,7 @@ _082E5220: lsls r0, 17 lsls r0, r4 lsrs r0, 24 - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic ldr r1, [r1] ldrb r1, [r1, 0x5] ands r0, r1 @@ -2581,7 +2578,7 @@ _082E523C: cmp r4, 0x3 bls _082E5220 _082E5246: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2, 0x2] ldrb r0, [r2, 0x3] @@ -2594,7 +2591,7 @@ _082E5258: adds r0, r6, 0 adds r1, r5, 0 bl rfu_STC_REQ_callback - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] ldrb r0, [r0, 0x9] cmp r0, 0 @@ -2622,7 +2619,7 @@ rfu_REQ_CHILD_startConnectRecovery: @ 82E529C push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] strb r5, [r0, 0x5] movs r4, 0 @@ -2646,7 +2643,7 @@ _082E52B6: _082E52CA: adds r0, r2, 0 bl STWI_set_Callback_M - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] lsls r0, r4, 5 adds r0, r1, r0 @@ -2686,20 +2683,20 @@ rfu_CB_CHILD_pollConnectRecovery: @ 82E530C lsrs r7, r1, 16 cmp r7, 0 bne _082E5390 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] ldrb r0, [r0, 0x4] cmp r0, 0 bne _082E5390 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] ldrb r1, [r1, 0x5] adds r6, r0, 0 cmp r1, 0 beq _082E5390 - ldr r1, =gUnknown_03007890 + ldr r1, =gRfuLinkStatus ldr r0, [r1] strb r7, [r0] movs r4, 0 @@ -2763,7 +2760,7 @@ rfu_CHILD_getConnectRecoveryStatus: @ 82E53B0 adds r2, r0, 0 movs r0, 0xFF strb r0, [r2] - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -2863,7 +2860,7 @@ rfu_getMasterSlave: @ 82E5450 lsrs r2, r0, 24 cmp r2, 0x1 bne _082E547E - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r1, [r0] adds r0, r1, 0 adds r0, 0x2C @@ -2906,7 +2903,7 @@ rfu_clearAllSlot: @ 82E5488 _082E54A4: mov r0, sp strh r7, [r0] - ldr r0, =gUnknown_03007880 + ldr r0, =gRfuSlotStatusNI lsls r4, r5, 2 adds r0, r4, r0 ldr r1, [r0] @@ -2914,13 +2911,13 @@ _082E54A4: ldr r2, =0x01000034 bl CpuSet strh r7, [r6] - ldr r0, =gUnknown_03007870 + ldr r0, =gRfuSlotStatusUNI adds r4, r0 ldr r1, [r4] adds r0, r6, 0 ldr r2, =0x0100000a bl CpuSet - ldr r3, =gUnknown_03007890 + ldr r3, =gRfuLinkStatus ldr r0, [r3] adds r0, 0x10 adds r0, r5 @@ -2941,7 +2938,7 @@ _082E54A4: strb r1, [r0, 0x5] ldr r0, [r3] strb r1, [r0, 0x6] - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] strb r1, [r0, 0x2] ldr r0, =0x04000208 @@ -2966,14 +2963,14 @@ rfu_STC_releaseFrame: @ 82E5528 adds r5, r2, 0 lsls r1, 24 lsrs r3, r1, 24 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] ldrb r1, [r0] movs r0, 0x80 ands r0, r1 cmp r0, 0 bne _082E5568 - ldr r6, =gUnknown_03007890 + ldr r6, =gRfuLinkStatus cmp r3, 0 bne _082E5554 ldr r1, [r6] @@ -2990,7 +2987,7 @@ _082E5554: .align 2, 0 .pool _082E5568: - ldr r6, =gUnknown_03007890 + ldr r6, =gRfuLinkStatus cmp r3, 0 bne _082E557C ldr r1, [r6] @@ -3054,7 +3051,7 @@ _082E55C4: cmp r0, 0 beq _082E568C movs r3, 0 - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI lsls r0, r7, 2 adds r0, r1 mov r9, r0 @@ -3069,7 +3066,7 @@ _082E55E2: beq _082E5634 mov r2, r9 ldr r4, [r2] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] adds r0, r4, 0 adds r0, 0x2C @@ -3090,7 +3087,7 @@ _082E5614: ldr r0, [r2] adds r4, r0, 0 adds r4, 0x34 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] movs r1, 0x1 lsls r1, r7 @@ -3150,7 +3147,7 @@ _082E568C: ands r0, r4 cmp r0, 0 beq _082E5702 - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, r7, 2 adds r0, r1 ldr r3, [r0] @@ -3160,14 +3157,14 @@ _082E568C: ands r0, r1 cmp r0, 0 beq _082E56F4 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] ldrb r1, [r0] movs r0, 0x80 ands r0, r1 cmp r0, 0 bne _082E56D8 - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r1, [r2] ldrb r0, [r1, 0xF] adds r0, 0x3 @@ -3178,7 +3175,7 @@ _082E568C: .align 2, 0 .pool _082E56D8: - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r1, [r2] adds r1, 0x10 adds r1, r7 @@ -3209,7 +3206,7 @@ _082E5702: mov r1, sp movs r0, 0 strh r0, [r1] - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, r7, 2 adds r0, r1 ldr r1, [r0] @@ -3256,7 +3253,7 @@ _082E576C: ands r0, r3 cmp r0, 0 beq _082E5788 - ldr r0, =gUnknown_03007880 + ldr r0, =gRfuSlotStatusNI lsls r1, 2 adds r1, r0 ldr r0, [r1] @@ -3274,7 +3271,7 @@ _082E5788: lsls r0, 3 b _082E57A4 _082E5796: - ldr r0, =gUnknown_03007870 + ldr r0, =gRfuSlotStatusUNI lsls r1, r4, 2 adds r1, r0 ldr r0, [r1] @@ -3324,7 +3321,7 @@ rfu_UNI_setSendData: @ 82E57DC lsrs r1, r0, 24 lsls r2, 24 lsrs r2, 24 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -3362,7 +3359,7 @@ rfu_NI_CHILD_setSendGameName: @ 82E5818 lsls r1, 17 lsls r1, r0 lsrs r1, 24 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r3, [r0] adds r3, 0x98 movs r0, 0x1A @@ -3394,7 +3391,7 @@ rfu_STC_setSendData_org: @ 82E584C lsls r2, 24 lsrs r2, 24 mov r8, r2 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2] mov r10, r0 @@ -3444,7 +3441,7 @@ _082E58C0: movs r2, 0 movs r0, 0x1 ands r0, r3 - ldr r4, =gUnknown_089A3220 + ldr r4, =llsf_struct cmp r0, 0 bne _082E58E2 movs r1, 0x1 @@ -3509,7 +3506,7 @@ _082E591E: cmp r6, 0x40 bne _082E59F4 _082E5938: - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI lsls r0, r2, 2 adds r0, r1 ldr r0, [r0] @@ -3568,7 +3565,7 @@ _082E5998: bls _082E5998 movs r2, 0 movs r5, 0x1 - ldr r4, =gUnknown_03007880 + ldr r4, =gRfuSlotStatusNI movs r1, 0 _082E59B2: adds r0, r3, 0 @@ -3608,7 +3605,7 @@ _082E59F4: ands r0, r6 cmp r0, 0 beq _082E5A2C - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, r2, 2 adds r0, r1 ldr r1, [r0] @@ -3674,7 +3671,7 @@ rfu_changeSendTarget: @ 82E5A54 _082E5A78: cmp r0, 0x20 bne _082E5B18 - ldr r0, =gUnknown_03007880 + ldr r0, =gRfuSlotStatusNI mov r12, r0 lsls r0, r7, 2 add r0, r12 @@ -3725,7 +3722,7 @@ _082E5AD2: lsrs r2, r0, 24 cmp r2, 0x3 bls _082E5ABE - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0x4] ldr r2, [sp] @@ -3751,7 +3748,7 @@ _082E5AFE: _082E5B18: cmp r3, 0x10 bne _082E5BA4 - ldr r3, =gUnknown_03007870 + ldr r3, =gRfuSlotStatusUNI lsls r1, r7, 2 adds r0, r1, r3 ldr r0, [r0] @@ -3797,7 +3794,7 @@ _082E5B70: ldrh r0, [r3] mov r8, r0 strh r2, [r3] - ldr r4, =gUnknown_03007890 + ldr r4, =gRfuLinkStatus ldr r2, [r4] adds r5, r1, r5 ldr r0, [r5] @@ -3845,7 +3842,7 @@ rfu_NI_stopReceivingData: @ 82E5BBC lsls r0, 3 b _082E5C26 _082E5BCC: - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI lsls r0, r3, 2 adds r0, r1 ldr r2, [r0] @@ -3873,7 +3870,7 @@ _082E5C04: movs r0, 0x47 _082E5C06: strh r0, [r2, 0x34] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] movs r1, 0x1 lsls r1, r3 @@ -3911,7 +3908,7 @@ rfu_UNI_changeAndReadySendData: @ 82E5C34 lsls r0, 3 b _082E5CC0 _082E5C4C: - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r4, [r0] @@ -3924,7 +3921,7 @@ _082E5C4C: .align 2, 0 .pool _082E5C6C: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1] cmp r0, 0x1 @@ -3981,7 +3978,7 @@ rfu_UNI_readySendData: @ 82E5CC8 lsrs r0, 24 cmp r0, 0x3 bhi _082E5CE6 - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r2, [r0] @@ -4005,7 +4002,7 @@ rfu_UNI_clearRecvNewDataFlag: @ 82E5CF4 lsrs r0, 24 cmp r0, 0x3 bhi _082E5D0A - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r1, [r0] @@ -4023,7 +4020,7 @@ rfu_REQ_sendData: @ 82E5D14 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2] adds r4, r0, 0 @@ -4041,7 +4038,7 @@ _082E5D28: orrs r3, r0 cmp r3, 0 bne _082E5DB8 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] ldrb r1, [r2, 0x3] adds r4, r0, 0 @@ -4076,7 +4073,7 @@ _082E5D6E: cmp r0, 0 bne _082E5E12 _082E5D80: - ldr r4, =gUnknown_03007898 + ldr r4, =gRfuFixed ldr r1, [r4] movs r0, 0x1 str r0, [r1, 0x68] @@ -4114,10 +4111,10 @@ _082E5DC4: bl STWI_set_Callback_M cmp r5, 0 beq _082E5DFC - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0x68 - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic ldr r1, [r1] ldr r1, [r1, 0x24] adds r1, 0x4 @@ -4128,10 +4125,10 @@ _082E5DC4: .align 2, 0 .pool _082E5DFC: - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0x68 - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic ldr r1, [r1] ldr r1, [r1, 0x24] adds r1, 0x4 @@ -4141,12 +4138,12 @@ _082E5DFC: _082E5E12: cmp r5, 0 beq _082E5E4E - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 bne _082E5E44 - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] ldr r1, [r0, 0x1C] cmp r1, 0 @@ -4181,7 +4178,7 @@ rfu_CB_sendData: @ 82E5E58 ldr r0, =0x00008020 mov r8, r0 _082E5E6C: - ldr r0, =gUnknown_03007870 + ldr r0, =gRfuSlotStatusUNI lsls r2, r6, 2 adds r0, r2, r0 ldr r1, [r0] @@ -4191,7 +4188,7 @@ _082E5E6C: movs r0, 0 strb r0, [r1, 0x2] _082E5E7E: - ldr r0, =gUnknown_03007880 + ldr r0, =gRfuSlotStatusNI adds r0, r2, r0 ldr r4, [r0] ldrh r0, [r4] @@ -4201,7 +4198,7 @@ _082E5E7E: movs r1, 0 adds r2, r4, 0 bl rfu_STC_releaseFrame - ldr r5, =gUnknown_03007890 + ldr r5, =gRfuLinkStatus ldr r2, [r5] ldrb r1, [r4, 0x1A] ldrb r0, [r2, 0x4] @@ -4227,7 +4224,7 @@ _082E5EB8: cmp r6, 0x3 bls _082E5E6C _082E5EC2: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r1, [r0] ldrb r0, [r1, 0xE] movs r0, 0 @@ -4286,7 +4283,7 @@ rfu_constructSendLLFrame: @ 82E5F28 mov r5, r8 push {r5-r7} sub sp, 0x4 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2] cmp r0, 0xFF @@ -4304,7 +4301,7 @@ _082E5F40: movs r0, 0 strb r0, [r2, 0xE] mov r8, r0 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0x6C str r0, [sp] @@ -4316,7 +4313,7 @@ _082E5F40: mov r10, r1 _082E5F6A: movs r5, 0 - ldr r0, =gUnknown_03007880 + ldr r0, =gRfuSlotStatusNI lsls r7, r6, 2 adds r4, r7, r0 ldr r2, [r4] @@ -4345,7 +4342,7 @@ _082E5F8A: lsrs r0, 16 adds r5, r0 _082E5FA6: - ldr r0, =gUnknown_03007870 + ldr r0, =gRfuSlotStatusUNI adds r0, r7, r0 ldr r0, [r0] ldrh r0, [r0] @@ -4360,7 +4357,7 @@ _082E5FA6: _082E5FC0: cmp r5, 0 beq _082E5FF4 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -4382,15 +4379,15 @@ _082E5FF4: lsrs r6, r0, 24 cmp r6, 0x3 bls _082E5F6A - ldr r6, =gUnknown_03007894 + ldr r6, =gRfuStatic mov r0, r8 cmp r0, 0 beq _082E603E ldr r2, [sp] movs r0, 0x3 ands r0, r2 - ldr r5, =gUnknown_03007890 - ldr r1, =gUnknown_03007898 + ldr r5, =gRfuLinkStatus + ldr r1, =gRfuFixed cmp r0, 0 beq _082E6026 movs r4, 0 @@ -4446,11 +4443,11 @@ rfu_STC_NI_constructLLSF: @ 82E6060 lsls r0, 24 lsrs r0, 24 mov r10, r0 - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r0, [r2] ldrb r0, [r0] lsls r0, 4 - ldr r1, =gUnknown_089A3220 + ldr r1, =llsf_struct adds r0, r1 mov r8, r0 ldrh r1, [r4] @@ -4570,7 +4567,7 @@ _082E6130: orrs r3, r0 orrs r3, r5 str r3, [sp] - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r0, [r2] ldrb r0, [r0] cmp r0, 0x1 @@ -4611,7 +4608,7 @@ _082E61A2: adds r0, r1 ldr r0, [r0] str r0, [sp, 0x4] - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r1, [r0] add r0, sp, 0x4 ldr r3, [r1, 0x4] @@ -4633,7 +4630,7 @@ _082E61C2: movs r0, 0 strb r0, [r6] _082E61DC: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r1, [r2] cmp r1, 0x1 @@ -4677,7 +4674,7 @@ rfu_STC_UNI_constructLLSF: @ 82E6220 lsls r0, 24 lsrs r0, 24 mov r8, r0 - ldr r1, =gUnknown_03007870 + ldr r1, =gRfuSlotStatusUNI lsls r0, 2 adds r0, r1 ldr r4, [r0] @@ -4693,11 +4690,11 @@ _082E6244: .align 2, 0 .pool _082E624C: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2] lsls r0, 4 - ldr r1, =gUnknown_089A3220 + ldr r1, =llsf_struct adds r5, r0, r1 ldrh r0, [r4] movs r1, 0xF @@ -4717,7 +4714,7 @@ _082E624C: _082E6276: mov r2, sp movs r3, 0 - ldr r1, =gUnknown_03007898 + ldr r1, =gRfuFixed mov r12, r1 add r7, sp, 0x4 ldrb r0, [r5] @@ -4746,7 +4743,7 @@ _082E629E: adds r0, r7, 0 adds r1, r6, 0 bl _call_via_r3 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2] cmp r0, 0x1 @@ -4782,12 +4779,12 @@ _082E62E8: thumb_func_start rfu_REQ_recvData rfu_REQ_recvData: @ 82E62F4 push {r4,lr} - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r4, [r0] ldrb r0, [r4] cmp r0, 0xFF beq _082E6320 - ldr r2, =gUnknown_03007894 + ldr r2, =gRfuStatic ldr r3, [r2] ldrb r0, [r4, 0x4] ldrb r1, [r4, 0x5] @@ -4823,17 +4820,17 @@ rfu_CB_recvData: @ 82E6334 lsrs r7, r1, 16 cmp r7, 0 bne _082E63F8 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r0, [r0] ldrb r0, [r0, 0x1] cmp r0, 0 beq _082E63F8 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] strb r7, [r0, 0x1] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0] cmp r0, 0x1 @@ -4848,16 +4845,16 @@ _082E6380: movs r6, 0 ldr r0, =0x00008043 mov r8, r0 - ldr r3, =gUnknown_03007890 + ldr r3, =gRfuLinkStatus _082E6388: - ldr r0, =gUnknown_03007880 + ldr r0, =gRfuSlotStatusNI lsls r1, r6, 2 adds r1, r0 ldr r4, [r1] ldrh r0, [r4, 0x34] cmp r0, r8 bne _082E63DA - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r0, [r0] ldrb r0, [r0, 0x1] asrs r0, r6 @@ -4897,7 +4894,7 @@ _082E63DA: lsrs r6, r0, 24 cmp r6, 0x3 bls _082E6388 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] ldrb r0, [r1, 0x4] cmp r0, 0 @@ -4926,7 +4923,7 @@ _082E63F8: rfu_STC_PARENT_analyzeRecvPacket: @ 82E6420 push {r4-r7,lr} sub sp, 0x4 - ldr r1, =gUnknown_03007898 + ldr r1, =gRfuFixed ldr r0, [r1] adds r0, 0xDC ldr r0, [r0] @@ -4935,7 +4932,7 @@ rfu_STC_PARENT_analyzeRecvPacket: @ 82E6420 movs r5, 0 mov r12, r1 movs r7, 0x1F - ldr r4, =gUnknown_03007894 + ldr r4, =gRfuStatic movs r6, 0x1 _082E643A: mov r0, sp @@ -5007,7 +5004,7 @@ _082E64A0: thumb_func_start rfu_STC_CHILD_analyzeRecvPacket rfu_STC_CHILD_analyzeRecvPacket: @ 82E64B8 push {r4-r6,lr} - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] adds r0, 0xDC ldr r1, [r0] @@ -5018,7 +5015,7 @@ rfu_STC_CHILD_analyzeRecvPacket: @ 82E64B8 adds r5, 0x8 cmp r4, 0 bne _082E64D8 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r1, [r0] movs r0, 0xF strb r0, [r1, 0x1] @@ -5065,14 +5062,14 @@ rfu_STC_analyzeLLSF: @ 82E6510 mov r12, r0 lsls r2, 16 lsrs r3, r2, 16 - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r0, [r2] ldrb r0, [r0] mvns r0, r0 movs r1, 0x1 ands r0, r1 lsls r0, 4 - ldr r1, =gUnknown_089A3220 + ldr r1, =llsf_struct adds r6, r0, r1 ldrb r0, [r6] cmp r3, r0 @@ -5188,7 +5185,7 @@ _082E6574: beq _082E661A b _082E673C _082E661A: - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r3, [r2] ldrb r2, [r3] cmp r2, 0x1 @@ -5226,7 +5223,7 @@ _082E6664: b _082E673C _082E6678: movs r4, 0 - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI ldr r0, [r1] ldrb r0, [r0, 0x1A] mov r5, r12 @@ -5254,7 +5251,7 @@ _082E6694: ands r0, r2 cmp r0, 0 beq _082E6694 - ldr r3, =gUnknown_03007890 + ldr r3, =gRfuLinkStatus ldr r0, [r3] ldrb r0, [r0, 0x4] mov r5, r12 @@ -5307,7 +5304,7 @@ _082E6706: bl rfu_STC_NI_receive_Receiver b _082E6732 _082E6718: - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r0, [r0] ldrb r0, [r0, 0x4] asrs r0, r4 @@ -5348,7 +5345,7 @@ rfu_STC_UNI_receive: @ 82E6754 str r2, [sp] lsls r0, 24 lsrs r7, r0, 24 - ldr r2, =gUnknown_03007870 + ldr r2, =gRfuSlotStatusUNI lsls r1, r7, 2 adds r1, r2 ldr r3, [r1] @@ -5401,7 +5398,7 @@ _082E67B4: ldr r0, [r0] ldr r0, [r0, 0x14] str r0, [sp, 0x4] - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] add r1, sp, 0x4 ldr r3, [r0, 0x4] @@ -5414,7 +5411,7 @@ _082E67DE: ldrh r0, [r5, 0x2] cmp r0, 0 beq _082E67F2 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] movs r0, 0x10 lsls r0, r7 @@ -5443,7 +5440,7 @@ rfu_STC_NI_receive_Sender: @ 82E6808 lsls r1, 24 lsrs r1, 24 mov r10, r1 - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI lsrs r0, 22 adds r0, r1 ldr r0, [r0] @@ -5645,7 +5642,7 @@ _082E69A8: ldrh r2, [r4] movs r0, 0 strh r0, [r4] - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r3, [r0] movs r0, 0x10 mov r7, r10 @@ -5655,7 +5652,7 @@ _082E69A8: movs r1, 0 strb r0, [r3, 0x2] lsls r0, r7, 2 - ldr r3, =gUnknown_03007880 + ldr r3, =gRfuSlotStatusNI adds r0, r3 ldr r0, [r0] strh r1, [r0, 0x2] @@ -5687,7 +5684,7 @@ rfu_STC_NI_receive_Receiver: @ 82E69F4 lsrs r0, 24 mov r8, r0 movs r7, 0 - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI lsls r0, 2 adds r0, r1 ldr r4, [r0] @@ -5704,7 +5701,7 @@ rfu_STC_NI_receive_Receiver: @ 82E69F4 ldrb r0, [r6, 0x2] cmp r0, 0x3 bne _082E6A64 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] movs r0, 0x1 mov r1, r8 @@ -5773,7 +5770,7 @@ _082E6AAE: ands r0, r1 cmp r2, r0 bne _082E6B04 - ldr r0, =gUnknown_03007898 + ldr r0, =gRfuFixed ldr r0, [r0] lsls r1, r3, 2 adds r1, 0x4 @@ -5831,7 +5828,7 @@ _082E6B2C: ldrh r2, [r3] movs r0, 0 strh r0, [r3] - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r4, [r0] movs r0, 0x1 mov r1, r8 @@ -5861,7 +5858,7 @@ rfu_STC_NI_initSlot_asRecvControllData: @ 82E6B70 adds r2, r1, 0 lsls r0, 24 lsrs r4, r0, 24 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r3, [r0] ldrb r1, [r3] mov r12, r0 @@ -5895,7 +5892,7 @@ _082E6B98: strh r0, [r2] ldr r0, =0x00000702 strh r0, [r2, 0x18] - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r2, [r0] ldrb r1, [r2, 0x4] adds r0, r6, 0 @@ -5943,7 +5940,7 @@ rfu_STC_NI_initSlot_asRecvDataEntity: @ 82E6C00 ldrb r0, [r0] cmp r0, 0x1 bne _082E6C24 - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus lsls r1, r5, 5 adds r1, 0x14 ldr r0, [r0] @@ -5953,7 +5950,7 @@ rfu_STC_NI_initSlot_asRecvDataEntity: @ 82E6C00 .align 2, 0 .pool _082E6C24: - ldr r1, =gUnknown_03007880 + ldr r1, =gRfuSlotStatusNI lsls r0, r5, 2 adds r0, r1 ldr r2, [r0] @@ -5965,13 +5962,13 @@ _082E6C24: lsls r1, 17 lsls r1, r5 lsrs r1, 24 - ldr r0, =gUnknown_03007894 + ldr r0, =gRfuStatic ldr r3, [r0] ldrb r2, [r3, 0x4] adds r0, r1, 0 orrs r0, r2 strb r0, [r3, 0x4] - ldr r0, =gUnknown_03007890 + ldr r0, =gRfuLinkStatus ldr r2, [r0] ldrb r0, [r2, 0x5] bics r0, r1 @@ -6027,7 +6024,7 @@ _082E6CAC: thumb_func_start rfu_NI_checkCommFailCounter rfu_NI_checkCommFailCounter: @ 82E6CB8 push {r4-r7,lr} - ldr r2, =gUnknown_03007890 + ldr r2, =gRfuLinkStatus ldr r0, [r2] ldrb r1, [r0, 0x4] ldrb r0, [r0, 0x5] @@ -6039,14 +6036,14 @@ rfu_NI_checkCommFailCounter: @ 82E6CB8 mov r12, r0 movs r0, 0 strh r0, [r1] - ldr r1, =gUnknown_03007894 + ldr r1, =gRfuStatic ldr r0, [r1] ldrb r0, [r0, 0x2] lsrs r7, r0, 4 movs r3, 0 adds r6, r1, 0 adds r5, r2, 0 - ldr r4, =gUnknown_03007880 + ldr r4, =gRfuSlotStatusNI _082E6CE2: movs r0, 0x80 lsls r0, 17 @@ -6118,8 +6115,8 @@ rfu_REQ_noise: @ 82E6D54 .pool thumb_func_end rfu_REQ_noise - thumb_func_start sub_82E6D6C -sub_82E6D6C: @ 82E6D6C + thumb_func_start AgbRFU_checkID +AgbRFU_checkID: @ 82E6D6C push {r4-r7,lr} mov r7, r8 push {r7} @@ -6138,13 +6135,13 @@ _082E6D88: ldr r0, =0x04000200 ldrh r0, [r0] mov r8, r0 - ldr r4, =gRfuState + ldr r4, =gSTWIStatus ldr r1, [r4] movs r0, 0xA str r0, [r1] - ldr r0, =sub_82E6F88 + ldr r0, =Sio32IDIntr bl STWI_set_Callback_ID - bl sub_82E6E20 + bl Sio32IDInit ldr r0, [r4] ldrb r0, [r0, 0xA] lsls r0, 2 @@ -6173,7 +6170,7 @@ _082E6DD6: lsrs r5, r0, 24 cmp r5, 0xFF beq _082E6DEA - bl sub_82E6E94 + bl Sio32IDMain adds r6, r0, 0 cmp r6, 0 beq _082E6DC4 @@ -6186,7 +6183,7 @@ _082E6DEA: strh r2, [r0] movs r0, 0x1 strh r0, [r1] - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r1, [r0] movs r0, 0 str r0, [r1] @@ -6200,17 +6197,17 @@ _082E6E08: bx r1 .align 2, 0 .pool - thumb_func_end sub_82E6D6C + thumb_func_end AgbRFU_checkID - thumb_func_start sub_82E6E20 -sub_82E6E20: @ 82E6E20 + thumb_func_start Sio32IDInit +Sio32IDInit: @ 82E6E20 push {r4,r5,lr} sub sp, 0x4 ldr r3, =0x04000208 movs r4, 0 strh r4, [r3] ldr r2, =0x04000200 - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] movs r1, 0x8 ldrb r0, [r0, 0xA] @@ -6237,7 +6234,7 @@ sub_82E6E20: @ 82E6E20 strh r0, [r2] movs r0, 0 str r0, [sp] - ldr r1, =gUnknown_030078A0 + ldr r1, =gRfuSIO32Id ldr r2, =0x05000003 mov r0, sp bl CpuSet @@ -6249,12 +6246,12 @@ sub_82E6E20: @ 82E6E20 bx r0 .align 2, 0 .pool - thumb_func_end sub_82E6E20 + thumb_func_end Sio32IDInit - thumb_func_start sub_82E6E94 -sub_82E6E94: @ 82E6E94 + thumb_func_start Sio32IDMain +Sio32IDMain: @ 82E6E94 push {r4-r7,lr} - ldr r0, =gUnknown_030078A0 + ldr r0, =gRfuSIO32Id ldrb r1, [r0, 0x1] mov r12, r1 adds r7, r0, 0 @@ -6364,14 +6361,14 @@ _082E6F82: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_82E6E94 + thumb_func_end Sio32IDMain - thumb_func_start sub_82E6F88 -sub_82E6F88: @ 82E6F88 + thumb_func_start Sio32IDIntr +Sio32IDIntr: @ 82E6F88 push {r4,r5,lr} ldr r0, =0x04000120 ldr r5, [r0] - ldr r0, =gUnknown_030078A0 + ldr r0, =gRfuSIO32Id ldrb r1, [r0] adds r4, r0, 0 cmp r1, 0x1 @@ -6381,7 +6378,7 @@ sub_82E6F88: @ 82E6F88 movs r2, 0x80 orrs r1, r2 strh r1, [r0] - thumb_func_end sub_82E6F88 + thumb_func_end Sio32IDIntr non_word_aligned_thumb_func_start sub_82E6FA2 sub_82E6FA2: @ 82E6FA2 @@ -6429,7 +6426,7 @@ _082E6FF6: cmp r0, 0x3 bhi _082E700C lsls r0, 1 - ldr r1, =gUnknown_089A3258 + ldr r1, =Sio32ConnectionData adds r0, r1 ldrh r0, [r0] b _082E700E diff --git a/asm/librfu_intr.s b/asm/librfu_intr.s index 7f375e419e..fe79ae17dc 100644 --- a/asm/librfu_intr.s +++ b/asm/librfu_intr.s @@ -18,7 +18,7 @@ IntrSIO32: @ 82E3554 cmp r0, 0 ldmdbeq r11, {r11,sp,lr} bxeq lr - bl sub_82E3EB0 + bl Callback_Dummy_ID ldmdb r11, {r11,sp,lr} bx lr _082E3590: @@ -33,7 +33,7 @@ _082E35A8: ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_082E35B4: .4byte gRfuState +_082E35B4: .4byte gSTWIStatus arm_func_end IntrSIO32 arm_func_start sio32intr_clock_master @@ -204,10 +204,10 @@ _082E3800: beq _082E3840 ldrh r1, [r0, 0x12] ldrb r0, [r0, 0x6] - bl sub_82E3EA8 + bl Callback_Dummy_M b _082E3840 .align 2, 0 -_082E382C: .4byte gRfuState +_082E382C: .4byte gSTWIStatus _082E3830: add r3, r5, 0x3 strh r3, [r4] @@ -423,7 +423,7 @@ _082E3AD4: beq _082E3C4C mov r0, 0x1EC add r0, r0, 0x2 - bl sub_82E3EAC + bl Callback_Dummy_S b _082E3C4C _082E3B48: mov r3, 0x120 @@ -445,7 +445,7 @@ _082E3B48: ldrb r0, [r0, 0x6] mov r1, r2 orr r0, r0, r3, lsl 8 - bl sub_82E3EAC + bl Callback_Dummy_S b _082E3C4C _082E3B9C: mov r3, 0x208 @@ -472,7 +472,7 @@ _082E3BE4: bhi _082E3BE4 b _082E3C20 .align 2, 0 -_082E3BF4: .4byte gRfuState +_082E3BF4: .4byte gSTWIStatus _082E3BF8: .4byte 0x996601ee _082E3BFC: mov r2, 0xFF00 @@ -532,7 +532,7 @@ _082E3CA4: ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_082E3CB8: .4byte gRfuState +_082E3CB8: .4byte gSTWIStatus arm_func_end handshake_wait arm_func_start STWI_set_timer_in_RAM @@ -588,7 +588,7 @@ _082E3D5C: mov r3, 0x3 b _082E3D8C .align 2, 0 -_082E3D74: .4byte gRfuState +_082E3D74: .4byte gSTWIStatus _082E3D78: mvn r3, 0x850 sub r3, r3, 0x2 @@ -637,7 +637,7 @@ STWI_stop_timer_in_RAM: @ 82E3DCC ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_082E3E18: .4byte gRfuState +_082E3E18: .4byte gSTWIStatus arm_func_end STWI_stop_timer_in_RAM arm_func_start STWI_init_slave @@ -677,20 +677,20 @@ STWI_init_slave: @ 82E3E1C ldmdb r11, {r11,sp,lr} bx lr .align 2, 0 -_082E3EA4: .4byte gRfuState +_082E3EA4: .4byte gSTWIStatus arm_func_end STWI_init_slave - arm_func_start sub_82E3EA8 -sub_82E3EA8: @ 82E3EA8 + arm_func_start Callback_Dummy_M +Callback_Dummy_M: @ 82E3EA8 bx r2 - arm_func_end sub_82E3EA8 + arm_func_end Callback_Dummy_M - arm_func_start sub_82E3EAC -sub_82E3EAC: @ 82E3EAC + arm_func_start Callback_Dummy_S +Callback_Dummy_S: @ 82E3EAC bx r1 - arm_func_end sub_82E3EAC + arm_func_end Callback_Dummy_S - arm_func_start sub_82E3EB0 -sub_82E3EB0: @ 82E3EB0 + arm_func_start Callback_Dummy_ID +Callback_Dummy_ID: @ 82E3EB0 bx r0 - arm_func_end sub_82E3EB0 + arm_func_end Callback_Dummy_ID diff --git a/common_syms/librfu.txt b/common_syms/librfu.txt index e81d78795c..820c865bef 100644 --- a/common_syms/librfu.txt +++ b/common_syms/librfu.txt @@ -1,6 +1,6 @@ -gUnknown_03007870 -gUnknown_03007880 -gUnknown_03007890 -gUnknown_03007894 -gUnknown_03007898 -gUnknown_030078A0 +gRfuSlotStatusUNI +gRfuSlotStatusNI +gRfuLinkStatus +gRfuStatic +gRfuFixed +gRfuSIO32Id diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt index 0e8468f4d1..a1f7735535 100644 --- a/common_syms/librfu_stwi.txt +++ b/common_syms/librfu_stwi.txt @@ -1 +1 @@ -gRfuState +gSTWIStatus diff --git a/data/librfu_rodata.s b/data/librfu_rodata.s index aa8f5170d3..679256541d 100644 --- a/data/librfu_rodata.s +++ b/data/librfu_rodata.s @@ -1,6 +1,6 @@ .section .rodata -gUnknown_089A3220:: @ 89A3220 +llsf_struct:: @ 89A3220 .byte 2, 14, 0, 10, 9, 5, 7, 2 .byte 0, 15, 1, 3, 3, 0, 31, 0 .byte 3, 22, 18, 14, 13, 9, 11, 3 @@ -9,9 +9,9 @@ gUnknown_089A3220:: @ 89A3220 .asciz "RFU_V1026" .align 2 -gUnknown_089A324C:: @ 89A324C +str_checkMbootLL:: @ 89A324C .asciz "RFU-MBOOT" .align 2 -gUnknown_089A3258:: @ 89A3258 +Sio32ConnectionData:: @ 89A3258 .asciz "NINTENDOSio32ID_030820" diff --git a/include/librfu.h b/include/librfu.h index 55b5d264cc..1806482e41 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -1,6 +1,7 @@ #ifndef GUARD_LIBRFU_H #define GUARD_LIBRFU_H +#include "global.h" #include "main.h" enum @@ -70,34 +71,7 @@ union RfuPacket struct RfuPacket8 rfuPacket8; }; -struct UnkLinkRfuStruct_02022B14Substruct -{ - u16 unk_00_0:4; - u16 unk_00_4:1; - u16 unk_00_5:1; - u16 unk_00_6:1; - u16 isChampion:1; - u16 hasNationalDex:1; - u16 gameClear:1; // never read, redundant with isChampion - u16 unk_01_2:4; // always 3? - u16 unk_01_6:2; - u8 playerTrainerId[2]; -}; - -struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14 -{ - struct UnkLinkRfuStruct_02022B14Substruct unk_00; - u8 unk_04[4]; - u16 species:10; - u16 type:6; - u8 unk_0a_0:7; - u8 unk_0a_7:1; - u8 playerGender:1; - u8 level:7; - u8 unk_0c; -}; - -struct RfuStruct +struct STWIStatus { vs32 unk_0; u8 txParams; @@ -133,7 +107,7 @@ struct RfuIntrStruct u8 block2[0x30]; }; -struct RfuUnk1 +struct RfuSlotStatusUNI { u16 unk_0; u8 unk_2; @@ -145,7 +119,7 @@ struct RfuUnk1 struct RfuIntrStruct unk_1c; }; -struct RfuUnk2 +struct RfuSlotStatusNI { u16 unk_0; u16 unk_2; @@ -164,7 +138,7 @@ struct RfuUnk2 u8 unk_70[0x70]; }; -struct RfuUnk3 +struct RfuFixed { u32 unk_0; u32 unk_4; @@ -172,17 +146,19 @@ struct RfuUnk3 u32 unk_dc; }; +#define RFU_GAME_NAME_LENGTH 13 // Possible length of game name set by rfu_REQB_configGameData +#define RFU_USER_NAME_LENGTH 8 + struct RfuUnk5Sub { u16 unk_00; u8 unk_02; u16 unk_04; - struct UnkLinkRfuStruct_02022B14 unk_06; - u8 fill_13[1]; - u8 playerName[PLAYER_NAME_LENGTH + 1]; + u8 gname[RFU_GAME_NAME_LENGTH + 2]; // Game name of parent candidate Game name of connection partner + u8 uname[RFU_USER_NAME_LENGTH + 1]; // User name for parent candidate User name for connection partner }; -struct RfuUnk5 +struct RfuLinkStatus { u8 unk_00; u8 unk_01; @@ -196,16 +172,16 @@ struct RfuUnk5 u8 filler_09[1]; u8 unk_0a[4]; u8 filler_0e[6]; - struct RfuUnk5Sub unk_14[4]; + struct RfuUnk5Sub unk_14[5]; }; -extern struct RfuStruct *gRfuState; +extern struct STWIStatus *gSTWIStatus; -extern struct RfuUnk5 *gUnknown_03007890; -extern u32 *gUnknown_03007894; -extern struct RfuUnk3* gUnknown_03007898; -extern struct RfuUnk2* gUnknown_03007880[4]; -extern struct RfuUnk1* gUnknown_03007870[4]; +extern struct RfuLinkStatus *gRfuLinkStatus; +extern u32 *gRfuStatic; +extern struct RfuFixed* gRfuFixed; +extern struct RfuSlotStatusNI* gRfuSlotStatusNI[4]; +extern struct RfuSlotStatusUNI* gRfuSlotStatusUNI[4]; extern void* sub_82E53F4; extern void rfu_STC_clearAPIVariables(void); @@ -221,7 +197,7 @@ void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3); bool16 rfu_syncVBlank(void); void rfu_REQ_reset(void); void rfu_REQ_configSystem(u16, u8, u8); -void rfu_REQ_configGameData(u8, u16, struct UnkLinkRfuStruct_02022B14 *, u8 *); +void rfu_REQ_configGameData(u8, u16, const u8 *gname, const u8 *uname); void rfu_REQ_startSearchChild(void); void rfu_REQ_pollSearchChild(void); void rfu_REQ_endSearchChild(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index 533e515c5f..0c169dd263 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -6,6 +6,33 @@ // Exported type declarations +struct UnkLinkRfuStruct_02022B14Substruct +{ + u16 unk_00_0:4; + u16 unk_00_4:1; + u16 unk_00_5:1; + u16 unk_00_6:1; + u16 isChampion:1; + u16 hasNationalDex:1; + u16 gameClear:1; // never read, redundant with isChampion + u16 unk_01_2:4; // always 3? + u16 unk_01_6:2; + u8 playerTrainerId[2]; +}; + +struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14 +{ + struct UnkLinkRfuStruct_02022B14Substruct unk_00; + u8 unk_04[4]; + u16 species:10; + u16 type:6; + u8 unk_0a_0:7; + u8 unk_0a_7:1; + u8 playerGender:1; + u8 level:7; + u8 unk_0c; +}; + struct UnkLinkRfuStruct_02022B2C { u8 unk_00; diff --git a/include/union_room.h b/include/union_room.h index 54f09cbeb0..cc0415155e 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -1,7 +1,7 @@ #ifndef GUARD_UNION_ROOM_H #define GUARD_UNION_ROOM_H -#include "librfu.h" +#include "link_rfu.h" // Exported type declarations diff --git a/src/crt0.s b/src/crt0.s index 9ed6789684..3ab7117133 100644 --- a/src/crt0.s +++ b/src/crt0.s @@ -163,7 +163,7 @@ IntrMain: @ 8000248 IntrMain_FoundIntr: strh r0, [r3, OFFSET_REG_IF - 0x200] bic r2, r2, r0 - ldr r0, =gRfuState + ldr r0, =gSTWIStatus ldr r0, [r0] ldrb r0, [r0, 0xA] mov r1, 0x8 diff --git a/src/librfu.c b/src/librfu.c index cdf14b6936..b84ba7ae54 100644 --- a/src/librfu.c +++ b/src/librfu.c @@ -1,9 +1,9 @@ #include "global.h" #include "librfu.h" -struct RfuUnk1* gUnknown_03007870[4]; -struct RfuUnk2* gUnknown_03007880[4]; -struct RfuUnk5 *gUnknown_03007890; -u32 *gUnknown_03007894; -struct RfuUnk3* gUnknown_03007898; -u8 gUnknown_030078A0[12]; +struct RfuSlotStatusUNI* gRfuSlotStatusUNI[4]; +struct RfuSlotStatusNI* gRfuSlotStatusNI[4]; +struct RfuLinkStatus *gRfuLinkStatus; +u32 *gRfuStatic; +struct RfuFixed* gRfuFixed; +u8 gRfuSIO32Id[12]; diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index c5aa25c10d..7437bcecf6 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -36,33 +36,33 @@ if (unk1 < num) return 1; } - gUnknown_03007890 = unk0; - gUnknown_03007894 = unk0 + (0xB4 / sizeof(u32)); - gUnknown_03007898 = (struct RfuUnk3*)(unk0 + (0xDC / sizeof(u32))); - gUnknown_03007880[0] = (struct RfuUnk2*)(unk0 + (0x1BC / sizeof(u32))); - gUnknown_03007870[0] = (struct RfuUnk1*)(unk0 + (0x37C / sizeof(u32))); + gRfuLinkStatus = unk0; + gRfuStatic = unk0 + (0xB4 / sizeof(u32)); + gRfuFixed = (struct RfuFixed*)(unk0 + (0xDC / sizeof(u32))); + gRfuSlotStatusNI[0] = (struct RfuSlotStatusNI*)(unk0 + (0x1BC / sizeof(u32))); + gRfuSlotStatusUNI[0] = (struct RfuSlotStatusUNI*)(unk0 + (0x37C / sizeof(u32))); for (i = 1; i < 4; i++, num) { - gUnknown_03007880[i] = (struct RfuUnk2*)&gUnknown_03007880[i-1]->unk_70; - gUnknown_03007870[i] = (struct RfuUnk1*)&gUnknown_03007870[i-1]->unk_1c; + gRfuSlotStatusNI[i] = (struct RfuSlotStatusNI*)&gRfuSlotStatusNI[i-1]->unk_70; + gRfuSlotStatusUNI[i] = (struct RfuSlotStatusUNI*)&gRfuSlotStatusUNI[i-1]->unk_1c; } - gUnknown_03007898->unk_dc = (u32)&gUnknown_03007870[3]->unk_1c; - STWI_init_all(&gUnknown_03007870[3]->unk_1c, interrupt, copyInterruptToRam); + gRfuFixed->unk_dc = (u32)&gRfuSlotStatusUNI[3]->unk_1c; + STWI_init_all(&gRfuSlotStatusUNI[3]->unk_1c, interrupt, copyInterruptToRam); rfu_STC_clearAPIVariables(); for (i = 0; i < 4; i++) { - gUnknown_03007880[i]->unk_68 = 0; - gUnknown_03007880[i]->unk_6c = 0; - gUnknown_03007870[i]->unk_14 = 0; - gUnknown_03007870[i]->unk_18 = 0; + gRfuSlotStatusNI[i]->unk_68 = 0; + gRfuSlotStatusNI[i]->unk_6c = 0; + gRfuSlotStatusUNI[i]->unk_14 = 0; + gRfuSlotStatusUNI[i]->unk_18 = 0; } // Not matching, register differences v12 = (u16*)((u32)&sub_82E53F4 & ~1); - v13 = (u16*)gUnknown_03007898->unk_8; + v13 = (u16*)gRfuFixed->unk_8; for (i = 47; i != 0xFFFF; i--) { @@ -71,7 +71,7 @@ ++v13; } - gUnknown_03007898->unk_4 = (u32)(&gUnknown_03007898->unk_8[1]); + gRfuFixed->unk_4 = (u32)(&gRfuFixed->unk_8[1]); return 0; }*/ diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 670692118e..45abaa70bc 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -1,7 +1,7 @@ #include "global.h" #include "librfu.h" -struct RfuStruct *gRfuState; +struct STWIStatus *gSTWIStatus; extern IntrFunc IntrSIO32(void); @@ -22,34 +22,34 @@ int STWI_reset_ClockCounter(void); void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam) { // If we're copying our interrupt into RAM, DMA it to block1 and use - // block2 for our RfuStruct, otherwise block1 holds the RfuStruct. + // block2 for our STWIStatus, otherwise block1 holds the STWIStatus. // interrupt usually is a pointer to gIntrTable[1] if (copyInterruptToRam == TRUE) { *interrupt = (IntrFunc)interruptStruct->block1; DmaCopy16(3, &IntrSIO32, interruptStruct->block1, 0x960); - gRfuState = (struct RfuStruct*)interruptStruct->block2; + gSTWIStatus = (struct STWIStatus*)interruptStruct->block2; } else { *interrupt = (IntrFunc)IntrSIO32; - gRfuState = (struct RfuStruct*)interruptStruct->block1; + gSTWIStatus = (struct STWIStatus*)interruptStruct->block1; } - gRfuState->rxPacket = (union RfuPacket*)interruptStruct->rxPacketAlloc; - gRfuState->txPacket = (union RfuPacket*)interruptStruct->txPacketAlloc; - gRfuState->msMode = 1; - gRfuState->unk_0 = 0; - gRfuState->txParams = 0; - gRfuState->unk_5 = 0; - gRfuState->unk_7 = 0; - gRfuState->unk_8 = 0; - gRfuState->unk_9 = 0; - gRfuState->timerState = 0; - gRfuState->timerActive = 0; - gRfuState->unk_12 = 0; - gRfuState->unk_15 = 0; - gRfuState->unk_2c = 0; + gSTWIStatus->rxPacket = (union RfuPacket*)interruptStruct->rxPacketAlloc; + gSTWIStatus->txPacket = (union RfuPacket*)interruptStruct->txPacketAlloc; + gSTWIStatus->msMode = 1; + gSTWIStatus->unk_0 = 0; + gSTWIStatus->txParams = 0; + gSTWIStatus->unk_5 = 0; + gSTWIStatus->unk_7 = 0; + gSTWIStatus->unk_8 = 0; + gSTWIStatus->unk_9 = 0; + gSTWIStatus->timerState = 0; + gSTWIStatus->timerActive = 0; + gSTWIStatus->unk_12 = 0; + gSTWIStatus->unk_15 = 0; + gSTWIStatus->unk_2c = 0; REG_RCNT = 0x100; //TODO: mystery bit? REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; @@ -62,9 +62,9 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b void STWI_init_timer(IntrFunc *interrupt, int timerSelect) { *interrupt = STWI_intr_timer; - gRfuState->timerSelect = timerSelect; + gSTWIStatus->timerSelect = timerSelect; - IntrEnable(INTR_FLAG_TIMER0 << gRfuState->timerSelect); + IntrEnable(INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); } void AgbRFU_SoftReset(void) @@ -74,8 +74,8 @@ void AgbRFU_SoftReset(void) REG_RCNT = 0x8000; REG_RCNT = 0x80A0; // all these bits are undocumented - timerL = ®_TMCNT_L(gRfuState->timerSelect); - timerH = ®_TMCNT_H(gRfuState->timerSelect); + timerL = ®_TMCNT_L(gSTWIStatus->timerSelect); + timerH = ®_TMCNT_H(gSTWIStatus->timerSelect); *timerH = 0; *timerL = 0; *timerH = 0x83; @@ -85,24 +85,24 @@ void AgbRFU_SoftReset(void) REG_RCNT = 0x80A0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; - gRfuState->unk_0 = 0; - gRfuState->txParams = 0; - gRfuState->unk_5 = 0; - gRfuState->activeCommand = 0; - gRfuState->unk_7 = 0; - gRfuState->unk_8 = 0; - gRfuState->unk_9 = 0; - gRfuState->timerState = 0; - gRfuState->timerActive = 0; - gRfuState->unk_12 = 0; - gRfuState->msMode = 1; - gRfuState->unk_15 = 0; - gRfuState->unk_2c = 0; + gSTWIStatus->unk_0 = 0; + gSTWIStatus->txParams = 0; + gSTWIStatus->unk_5 = 0; + gSTWIStatus->activeCommand = 0; + gSTWIStatus->unk_7 = 0; + gSTWIStatus->unk_8 = 0; + gSTWIStatus->unk_9 = 0; + gSTWIStatus->timerState = 0; + gSTWIStatus->timerActive = 0; + gSTWIStatus->unk_12 = 0; + gSTWIStatus->msMode = 1; + gSTWIStatus->unk_15 = 0; + gSTWIStatus->unk_2c = 0; } void STWI_set_MS_mode(u8 mode) { - gRfuState->msMode = mode; + gSTWIStatus->msMode = mode; } u16 STWI_read_status(u8 index) @@ -110,13 +110,13 @@ u16 STWI_read_status(u8 index) switch (index) { case 0: - return gRfuState->unk_12; + return gSTWIStatus->unk_12; case 1: - return gRfuState->msMode; + return gSTWIStatus->msMode; case 2: - return gRfuState->unk_0; + return gSTWIStatus->unk_0; case 3: - return gRfuState->activeCommand; + return gSTWIStatus->activeCommand; default: return 0xFFFF; } @@ -134,31 +134,31 @@ void STWI_init_Callback_S(void) void STWI_set_Callback_M(void *callback) { - gRfuState->callbackM = callback; + gSTWIStatus->callbackM = callback; } void STWI_set_Callback_S(void *callback) { - gRfuState->callbackS = callback; + gSTWIStatus->callbackS = callback; } void STWI_set_Callback_ID(u32 id) { - gRfuState->callbackID = id; + gSTWIStatus->callbackID = id; } u16 STWI_poll_CommandEnd(void) { - while (gRfuState->unk_2c == TRUE) + while (gSTWIStatus->unk_2c == TRUE) ; - return gRfuState->unk_12; + return gSTWIStatus->unk_12; } void STWI_send_ResetREQ(void) { if (!STWI_init(RFU_RESET)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -167,7 +167,7 @@ void STWI_send_LinkStatusREQ(void) { if (!STWI_init(RFU_LINK_STATUS)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -176,7 +176,7 @@ void STWI_send_VersionStatusREQ(void) { if (!STWI_init(RFU_VERSION_STATUS)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -185,7 +185,7 @@ void STWI_send_SystemStatusREQ(void) { if (!STWI_init(RFU_SYSTEM_STATUS)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -194,7 +194,7 @@ void STWI_send_SlotStatusREQ(void) { if (!STWI_init(RFU_SLOT_STATUS)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -203,7 +203,7 @@ void STWI_send_ConfigStatusREQ(void) { if (!STWI_init(RFU_CONFIG_STATUS)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -215,10 +215,10 @@ void STWI_send_GameConfigREQ(u8 * unk1, u8 *data) if (!STWI_init(RFU_GAME_CONFIG)) { - gRfuState->txParams = 6; + gSTWIStatus->txParams = 6; //TODO: what is unk1 - packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *(u16*)packetBytes = *(u16*)unk1; @@ -249,9 +249,9 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) { u8 *packetBytes; - gRfuState->txParams = 1; + gSTWIStatus->txParams = 1; - packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *packetBytes++ = unk3; @@ -265,7 +265,7 @@ void STWI_send_SC_StartREQ(void) { if (!STWI_init(RFU_SC_START)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -274,7 +274,7 @@ void STWI_send_SC_PollingREQ(void) { if (!STWI_init(RFU_SC_POLLING)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -283,7 +283,7 @@ void STWI_send_SC_EndREQ(void) { if (!STWI_init(RFU_SC_END)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -292,7 +292,7 @@ void STWI_send_SP_StartREQ(void) { if (!STWI_init(RFU_SP_START)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -301,7 +301,7 @@ void STWI_send_SP_PollingREQ(void) { if (!STWI_init(RFU_SP_POLLING)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -310,7 +310,7 @@ void STWI_send_SP_EndREQ(void) { if (!STWI_init(RFU_SP_END)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -319,8 +319,8 @@ void STWI_send_CP_StartREQ(u16 unk1) { if (!STWI_init(RFU_CP_START)) { - gRfuState->txParams = 1; - gRfuState->txPacket->rfuPacket32.data[0] = unk1; + gSTWIStatus->txParams = 1; + gSTWIStatus->txPacket->rfuPacket32.data[0] = unk1; STWI_start_Command(); } } @@ -329,7 +329,7 @@ void STWI_send_CP_PollingREQ(void) { if (!STWI_init(RFU_CP_POLLING)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -338,7 +338,7 @@ void STWI_send_CP_EndREQ(void) { if (!STWI_init(RFU_CP_END)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -351,8 +351,8 @@ void STWI_send_DataTxREQ(void *in, u8 size) if (size & (sizeof(u32) - 1)) txParams += 1; - gRfuState->txParams = txParams; - CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->txParams * sizeof(u32)); + gSTWIStatus->txParams = txParams; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->txParams * sizeof(u32)); STWI_start_Command(); } } @@ -365,8 +365,8 @@ void STWI_send_DataTxAndChangeREQ(void *in, u8 size) if (size & (sizeof(u32) - 1)) txParams += 1; - gRfuState->txParams = txParams; - CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->txParams * sizeof(u32)); + gSTWIStatus->txParams = txParams; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->txParams * sizeof(u32)); STWI_start_Command(); } } @@ -375,7 +375,7 @@ void STWI_send_DataRxREQ(void) { if (!STWI_init(RFU_DATA_RX)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -384,7 +384,7 @@ void STWI_send_MS_ChangeREQ(void) { if (!STWI_init(RFU_MS_CHANGE)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -395,15 +395,15 @@ void STWI_send_DataReadyAndChangeREQ(u8 unk) { if (!unk) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; } else { u8 *packetBytes; - gRfuState->txParams = 1; + gSTWIStatus->txParams = 1; - packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *packetBytes++ = unk; @@ -422,9 +422,9 @@ void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1) { u8 *packetBytes; - gRfuState->txParams = 1; + gSTWIStatus->txParams = 1; - packetBytes = gRfuState->txPacket->rfuPacket8.data; + packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); *packetBytes++ = unk0; @@ -440,7 +440,7 @@ void STWI_send_ResumeRetransmitAndChangeREQ(void) { if (!STWI_init(RFU_RESUME_RETRANSMIT_AND_CHANGE)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -449,8 +449,8 @@ void STWI_send_DisconnectREQ(u8 unk) { if (!STWI_init(RFU_DISCONNECT)) { - gRfuState->txParams = 1; - gRfuState->txPacket->rfuPacket32.data[0] = unk; + gSTWIStatus->txParams = 1; + gSTWIStatus->txPacket->rfuPacket32.data[0] = unk; STWI_start_Command(); } @@ -460,8 +460,8 @@ void STWI_send_TestModeREQ(u8 unk0, u8 unk1) { if (!STWI_init(RFU_TEST_MODE)) { - gRfuState->txParams = 1; - gRfuState->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); + gSTWIStatus->txParams = 1; + gSTWIStatus->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); STWI_start_Command(); } @@ -474,10 +474,10 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2) if (!STWI_init(RFU_CPR_START)) { - gRfuState->txParams = 2; + gSTWIStatus->txParams = 2; arg1 = unk1 | (unk0 << 16); - packetData = gRfuState->txPacket->rfuPacket32.data; + packetData = gSTWIStatus->txPacket->rfuPacket32.data; packetData[0] = arg1; packetData[1] = unk2; @@ -489,7 +489,7 @@ void STWI_send_CPR_PollingREQ(void) { if (!STWI_init(RFU_CPR_POLLING)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -498,7 +498,7 @@ void STWI_send_CPR_EndREQ(void) { if (!STWI_init(RFU_CPR_END)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } @@ -507,18 +507,18 @@ void STWI_send_StopModeREQ(void) { if (!STWI_init(RFU_STOP_MODE)) { - gRfuState->txParams = 0; + gSTWIStatus->txParams = 0; STWI_start_Command(); } } void STWI_intr_timer(void) { - switch (gRfuState->timerState) + switch (gSTWIStatus->timerState) { //TODO: Make an enum for these case 2: - gRfuState->timerActive = 1; + gSTWIStatus->timerActive = 1; STWI_set_timer(50); break; case 1: @@ -527,11 +527,11 @@ void STWI_intr_timer(void) STWI_restart_Command(); break; case 3: - gRfuState->timerActive = 1; + gSTWIStatus->timerActive = 1; STWI_stop_timer(); STWI_reset_ClockCounter(); - if (gRfuState->callbackM) - gRfuState->callbackM(255, 0); + if (gSTWIStatus->callbackM) + gSTWIStatus->callbackM(255, 0); break; } } @@ -541,79 +541,79 @@ void STWI_set_timer(u8 unk) vu16 *timerL; vu16 *timerH; - timerL = ®_TMCNT_L(gRfuState->timerSelect); - timerH = ®_TMCNT_H(gRfuState->timerSelect); + timerL = ®_TMCNT_L(gSTWIStatus->timerSelect); + timerH = ®_TMCNT_H(gSTWIStatus->timerSelect); REG_IME = 0; switch (unk) { case 50: *timerL = 0xFCCB; - gRfuState->timerState = 1; + gSTWIStatus->timerState = 1; break; case 80: *timerL = 0xFAE0; - gRfuState->timerState = 2; + gSTWIStatus->timerState = 2; break; case 100: *timerL = 0xF996; - gRfuState->timerState = 3; + gSTWIStatus->timerState = 3; break; case 130: *timerL = 0xF7AD; - gRfuState->timerState = 4; + gSTWIStatus->timerState = 4; break; } *timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; - REG_IF = INTR_FLAG_TIMER0 << gRfuState->timerSelect; + REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect; REG_IME = 1; } void STWI_stop_timer(void) { - gRfuState->timerState = 0; + gSTWIStatus->timerState = 0; - REG_TMCNT_L(gRfuState->timerSelect) = 0; - REG_TMCNT_H(gRfuState->timerSelect) = 0; + REG_TMCNT_L(gSTWIStatus->timerSelect) = 0; + REG_TMCNT_H(gSTWIStatus->timerSelect) = 0; } u16 STWI_init(u8 request) { if (!REG_IME) { - gRfuState->unk_12 = 6; - if (gRfuState->callbackM) - gRfuState->callbackM(request, gRfuState->unk_12); + gSTWIStatus->unk_12 = 6; + if (gSTWIStatus->callbackM) + gSTWIStatus->callbackM(request, gSTWIStatus->unk_12); return TRUE; } - else if (gRfuState->unk_2c == TRUE) + else if (gSTWIStatus->unk_2c == TRUE) { - gRfuState->unk_12 = 2; - gRfuState->unk_2c = FALSE; - if (gRfuState->callbackM) - gRfuState->callbackM(request, gRfuState->unk_12); + gSTWIStatus->unk_12 = 2; + gSTWIStatus->unk_2c = FALSE; + if (gSTWIStatus->callbackM) + gSTWIStatus->callbackM(request, gSTWIStatus->unk_12); return TRUE; } - else if(!gRfuState->msMode) + else if(!gSTWIStatus->msMode) { - gRfuState->unk_12 = 4; - if (gRfuState->callbackM) - gRfuState->callbackM(request, gRfuState->unk_12, gRfuState); + gSTWIStatus->unk_12 = 4; + if (gSTWIStatus->callbackM) + gSTWIStatus->callbackM(request, gSTWIStatus->unk_12, gSTWIStatus); return TRUE; } else { - gRfuState->unk_2c = TRUE; - gRfuState->activeCommand = request; - gRfuState->unk_0 = 0; - gRfuState->txParams = 0; - gRfuState->unk_5 = 0; - gRfuState->unk_7 = 0; - gRfuState->unk_8 = 0; - gRfuState->unk_9 = 0; - gRfuState->timerState = 0; - gRfuState->timerActive = 0; - gRfuState->unk_12 = 0; - gRfuState->unk_15 = 0; + gSTWIStatus->unk_2c = TRUE; + gSTWIStatus->activeCommand = request; + gSTWIStatus->unk_0 = 0; + gSTWIStatus->txParams = 0; + gSTWIStatus->unk_5 = 0; + gSTWIStatus->unk_7 = 0; + gSTWIStatus->unk_8 = 0; + gSTWIStatus->unk_9 = 0; + gSTWIStatus->timerState = 0; + gSTWIStatus->timerActive = 0; + gSTWIStatus->unk_12 = 0; + gSTWIStatus->unk_15 = 0; REG_RCNT = 0x100; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; @@ -626,15 +626,15 @@ int STWI_start_Command() u16 imeTemp; // Yes, it matters that it's casted to a u32... - *(u32*)gRfuState->txPacket->rfuPacket8.data = 0x99660000 | (gRfuState->txParams << 8) | gRfuState->activeCommand; - REG_SIODATA32 = gRfuState->txPacket->rfuPacket32.command; + *(u32*)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->txParams << 8) | gSTWIStatus->activeCommand; + REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command; - gRfuState->unk_0 = 0; - gRfuState->unk_5 = 1; + gSTWIStatus->unk_0 = 0; + gSTWIStatus->unk_5 = 1; imeTemp = REG_IME; REG_IME = 0; - REG_IE |= (INTR_FLAG_TIMER0 << gRfuState->timerSelect); + REG_IE |= (INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); REG_IE |= INTR_FLAG_SERIAL; REG_IME = imeTemp; @@ -645,30 +645,30 @@ int STWI_start_Command() int STWI_restart_Command(void) { - if (gRfuState->unk_15 <= 1) + if (gSTWIStatus->unk_15 <= 1) { - gRfuState->unk_15++; + gSTWIStatus->unk_15++; STWI_start_Command(); } else { - if (gRfuState->activeCommand == RFU_MS_CHANGE || gRfuState->activeCommand == RFU_DATA_TX_AND_CHANGE || gRfuState->activeCommand == RFU_UNK35 || gRfuState->activeCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE) + if (gSTWIStatus->activeCommand == RFU_MS_CHANGE || gSTWIStatus->activeCommand == RFU_DATA_TX_AND_CHANGE || gSTWIStatus->activeCommand == RFU_UNK35 || gSTWIStatus->activeCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE) { - gRfuState->unk_12 = 1; - gRfuState->unk_2c = 0; + gSTWIStatus->unk_12 = 1; + gSTWIStatus->unk_2c = 0; - if (gRfuState->callbackM) - gRfuState->callbackM(gRfuState->activeCommand, gRfuState->unk_12); + if (gSTWIStatus->callbackM) + gSTWIStatus->callbackM(gSTWIStatus->activeCommand, gSTWIStatus->unk_12); } else { - gRfuState->unk_12 = 1; - gRfuState->unk_2c = 0; + gSTWIStatus->unk_12 = 1; + gSTWIStatus->unk_2c = 0; - if (gRfuState->callbackM) - gRfuState->callbackM(gRfuState->activeCommand, gRfuState->unk_12); + if (gSTWIStatus->callbackM) + gSTWIStatus->callbackM(gSTWIStatus->activeCommand, gSTWIStatus->unk_12); - gRfuState->unk_0 = 4; //TODO: what's 4 + gSTWIStatus->unk_0 = 4; //TODO: what's 4 } } @@ -677,9 +677,9 @@ int STWI_restart_Command(void) int STWI_reset_ClockCounter(void) { - gRfuState->unk_0 = 5; //TODO: what is 5 - gRfuState->txParams = 0; - gRfuState->unk_5 = 0; + gSTWIStatus->unk_0 = 5; //TODO: what is 5 + gSTWIStatus->txParams = 0; + gSTWIStatus->unk_5 = 0; REG_SIODATA32 = (1 << 31); REG_SIOCNT = 0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; diff --git a/src/link_rfu.c b/src/link_rfu.c index cedc6b2fba..6f45b528e3 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -364,7 +364,7 @@ u32 sub_800BEC0(void) void rfu_REQ_sendData_wrapper(u8 r2) { u8 val; - if (!gUnknown_03007890->unk_00) + if (!gRfuLinkStatus->unk_00) { val = gUnknown_03004140.unk_02; r2 = 0; @@ -515,14 +515,14 @@ u8 sub_800C12C(u16 r6, u16 r8) sub_800D30C(0xF3, 0x01); return 2; } - for (i = 0; i < gUnknown_03007890->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->unk_08; i++) { - if (gUnknown_03007890->unk_14[i].unk_00 == r6) + if (gRfuLinkStatus->unk_14[i].unk_00 == r6) { break; } } - if (gUnknown_03007890->unk_08 == 0 || i == gUnknown_03007890->unk_08) + if (gRfuLinkStatus->unk_08 == 0 || i == gRfuLinkStatus->unk_08) { gUnknown_03004140.unk_14 = 3; sub_800D30C(0xF3, 0x01); @@ -561,7 +561,7 @@ void sub_800C210(u8 a0) gUnknown_03004140.unk_34[i] = 0; } } - i = gUnknown_03007890->unk_03 & a0; + i = gRfuLinkStatus->unk_03 & a0; if (i) { sub_800D334(i); @@ -630,8 +630,8 @@ void sub_800C27C(bool8 a0) case 16: gUnknown_03004140.unk_04 = gUnknown_03004140.unk_11; gUnknown_03004140.unk_05 = gUnknown_03004140.unk_12; - sub_800D334(gUnknown_03007890->unk_03); - gUnknown_03004140.unk_14 = gUnknown_03007890->unk_03; + sub_800D334(gRfuLinkStatus->unk_03); + gUnknown_03004140.unk_14 = gRfuLinkStatus->unk_03; sub_800D30C(0x33, 0x01); return; case 17: @@ -703,7 +703,7 @@ bool8 sub_800C36C(u16 a0) } sub_800D610(); } - if (gUnknown_03007890->unk_00 == 1) + if (gRfuLinkStatus->unk_00 == 1) { if (sp2) { @@ -800,7 +800,7 @@ void sub_800C54C(u32 a0) rfu_REQ_configSystem(gUnknown_03004140.unk_3c->unk_02, gUnknown_03004140.unk_3c->unk_00, gUnknown_03004140.unk_3c->unk_01); break; case 4: - rfu_REQ_configGameData(gUnknown_03004140.unk_3c->unk_04, gUnknown_03004140.unk_3c->unk_06, gUnknown_03004140.unk_3c->unk_08, gUnknown_03004140.unk_3c->unk_0c); + rfu_REQ_configGameData(gUnknown_03004140.unk_3c->unk_04, gUnknown_03004140.unk_3c->unk_06, (const u8 *)gUnknown_03004140.unk_3c->unk_08, gUnknown_03004140.unk_3c->unk_0c); break; case 5: rfu_REQ_startSearchChild(); @@ -834,7 +834,7 @@ void sub_800C54C(u32 a0) case 15: break; case 16: - rfu_REQ_CHILD_startConnectRecovery(gUnknown_03007890->unk_03); + rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->unk_03); break; case 17: rfu_REQ_CHILD_pollConnectRecovery(); @@ -857,7 +857,7 @@ void sub_800C54C(u32 a0) gUnknown_03004140.unk_0e = 0; } } while (gUnknown_03004140.unk_04 == 18 || gUnknown_03004140.unk_04 == 19); - if (gUnknown_03007890->unk_00 != 1 || !sub_800C36C(0)) + if (gRfuLinkStatus->unk_00 != 1 || !sub_800C36C(0)) { sub_800CF34(); sub_800D158(); @@ -983,7 +983,7 @@ static void sub_800C7B4(u16 r8, u16 r6) { sub_800D30C(0x20, 0x01); } - if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gUnknown_03007890->unk_08 == 4) + if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gRfuLinkStatus->unk_08 == 4) { rfu_REQ_endSearchParent(); rfu_waitREQComplete(); @@ -1059,11 +1059,11 @@ static void sub_800C7B4(u16 r8, u16 r6) case 50: if (r6 == 0) { - gUnknown_03004140.unk_14 = gUnknown_03007890->unk_03; + gUnknown_03004140.unk_14 = gRfuLinkStatus->unk_03; gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 17; for (gUnknown_03004140.unk_10 = 0; gUnknown_03004140.unk_10 < 4; gUnknown_03004140.unk_10 ++) { - if ((gUnknown_03007890->unk_03 >> gUnknown_03004140.unk_10) & 1) + if ((gRfuLinkStatus->unk_03 >> gUnknown_03004140.unk_10) & 1) { break; } @@ -1092,7 +1092,7 @@ static void sub_800C7B4(u16 r8, u16 r6) else { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gUnknown_03007890->unk_03); + sub_800D334(gRfuLinkStatus->unk_03); gUnknown_03004140.unk_1e = 0x33; } gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] = 0; @@ -1126,7 +1126,7 @@ static void sub_800C7B4(u16 r8, u16 r6) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; sub_800D610(); - sub_800D334(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03); + sub_800D334(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); gUnknown_03004140.unk_14 = sp0; sub_800D30C(0x25, 0x01); } @@ -1148,10 +1148,10 @@ static void sub_800C7B4(u16 r8, u16 r6) rfu_REQ_RFUStatus(); rfu_waitREQComplete(); rfu_getRFUStatus(&sp0); - if (sp0 == 0 && gUnknown_03007890->unk_00 == 0) + if (sp0 == 0 && gRfuLinkStatus->unk_00 == 0) { stwiRecvBuffer = rfu_getSTWIRecvBuffer(); - stwiRecvBuffer[4] = gUnknown_03007890->unk_02; + stwiRecvBuffer[4] = gRfuLinkStatus->unk_02; stwiRecvBuffer[5] = 1; sub_800C36C(0x29); r6 = 0; @@ -1191,7 +1191,7 @@ static void sub_800C7B4(u16 r8, u16 r6) gUnknown_03004140.unk_00 &= ~gUnknown_03004140.unk_14; if (gUnknown_03004140.unk_07) { - if (gUnknown_03007890->unk_00 == 0xFF) + if (gRfuLinkStatus->unk_00 == 0xFF) { if (gUnknown_03004140.unk_07 == 8) { @@ -1206,7 +1206,7 @@ static void sub_800C7B4(u16 r8, u16 r6) } } } - if (gUnknown_03007890->unk_00 == 0xFF) + if (gRfuLinkStatus->unk_00 == 0xFF) { if (gUnknown_03004140.unk_04 == 0) { @@ -1221,7 +1221,7 @@ static void sub_800C7B4(u16 r8, u16 r6) break; case 38: sub_800D20C(); - if (gUnknown_03007890->unk_00 != 0xFF) + if (gRfuLinkStatus->unk_00 != 0xFF) { sub_800D30C(0x50, 0x00); } @@ -1246,8 +1246,8 @@ static void sub_800C7B4(u16 r8, u16 r6) { if (r8 == 28 && r6 != 0 && gUnknown_03004140.unk_07 == 4) { - gUnknown_03007890->unk_00 = 1; - gUnknown_03007890->unk_02 = 15; + gRfuLinkStatus->unk_00 = 1; + gRfuLinkStatus->unk_02 = 15; sub_800D334(15); rfu_waitREQComplete(); return; @@ -1279,7 +1279,7 @@ static void sub_800CEB0(u16 r6) r7 = gUnknown_03004140.unk_0e; gUnknown_03004140.unk_0e = 0; gUnknown_03004140.unk_0f = 1; - if (gUnknown_03007890->unk_00 == 0) + if (gRfuLinkStatus->unk_00 == 0) { sub_800C36C(r6); if (gUnknown_03004140.unk_02 != 1) @@ -1321,8 +1321,8 @@ static void sub_800CF34(void) if (gUnknown_03004140.unk_04 == 5 || gUnknown_03004140.unk_04 == 6 || gUnknown_03004140.unk_04 == 7 || gUnknown_03004140.unk_04 == 8) { - flags = ((gUnknown_03007890->unk_02 ^ gUnknown_03004140.unk_0c) & gUnknown_03007890->unk_02) & ~gUnknown_03007890->unk_07; - gUnknown_03004140.unk_0c = gUnknown_03007890->unk_02; + flags = ((gRfuLinkStatus->unk_02 ^ gUnknown_03004140.unk_0c) & gRfuLinkStatus->unk_02) & ~gRfuLinkStatus->unk_07; + gUnknown_03004140.unk_0c = gRfuLinkStatus->unk_02; if (flags) { gUnknown_03004140.unk_14 = flags; @@ -1340,14 +1340,14 @@ static void sub_800CF34(void) } else if (gUnknown_03004140.unk_24 & r4) { - if (gUnknown_03007880[i]->unk_34 == 0x46) + if (gRfuSlotStatusNI[i]->unk_34 == 0x46) { - if (gUnknown_03007880[i]->unk_61 == 1) + if (gRfuSlotStatusNI[i]->unk_61 == 1) { r5 = 0x02; for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (gUnknown_03007890->unk_14[i].unk_04 == *ptr) + if (gRfuLinkStatus->unk_14[i].unk_04 == *ptr) { gUnknown_03004140.unk_00 |= r4; gUnknown_03004140.unk_01++; @@ -1386,7 +1386,7 @@ static void sub_800CF34(void) if (gUnknown_03004140.unk_0d) { r5 = 0x01; - if (gUnknown_03007890->unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) + if (gRfuLinkStatus->unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) { r5 = 0x00; } @@ -1434,7 +1434,7 @@ static void sub_800D158(void) REG_IME = 0; if (gUnknown_03004140.unk_04 == 15) { - if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gUnknown_03007880[gUnknown_03004140.unk_10]->unk_0 == 0x27) + if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_03004140.unk_10]->unk_0 == 0x27) { sub_800D630(); gUnknown_03004140.unk_04 = 24; @@ -1453,7 +1453,7 @@ static void sub_800D158(void) if (gUnknown_03004140.unk_02 == 0) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03); + sub_800D334(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); gUnknown_03004140.unk_14 = 0; sub_800D30C(0x25, 0x01); } @@ -1462,7 +1462,7 @@ static void sub_800D158(void) static void sub_800D20C(void) { - if (gUnknown_03004140.unk_04 == 15 && gUnknown_03007880[gUnknown_03004140.unk_10]->unk_0 == 0x26) + if (gUnknown_03004140.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_03004140.unk_10]->unk_0 == 0x26) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; rfu_clearSlot(4, gUnknown_03004140.unk_10); @@ -1490,11 +1490,11 @@ static u8 sub_800D294(void) const u16 *ptr; u8 flags = 0x00; - for (i = 0; i < gUnknown_03007890->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->unk_08; i++) { for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (gUnknown_03007890->unk_14[i].unk_04 == *ptr) + if (gRfuLinkStatus->unk_14[i].unk_04 == *ptr) { flags |= (1 << i); } @@ -1525,34 +1525,34 @@ static void sub_800D358(u8 a0) { u8 i; - if (gUnknown_03007890->unk_04) + if (gRfuLinkStatus->unk_04) { for (i = 0; i < 4; i++) { - if (gUnknown_03007880[i]->unk_0 & 0x8000 && gUnknown_03007880[i]->unk_1a & a0) + if (gRfuSlotStatusNI[i]->unk_0 & 0x8000 && gRfuSlotStatusNI[i]->unk_1a & a0) { - rfu_changeSendTarget(0x20, i, gUnknown_03007880[i]->unk_1a & ~a0); + rfu_changeSendTarget(0x20, i, gRfuSlotStatusNI[i]->unk_1a & ~a0); } } } - if (gUnknown_03007890->unk_05) + if (gRfuLinkStatus->unk_05) { for (i = 0; i < 4; i++) { - if (gUnknown_03007880[i]->unk_34 & 0x8000 && gUnknown_03007880[i]->unk_4e & a0) + if (gRfuSlotStatusNI[i]->unk_34 & 0x8000 && gRfuSlotStatusNI[i]->unk_4e & a0) { rfu_NI_stopReceivingData(i); } } } - if (gUnknown_03007890->unk_06) + if (gRfuLinkStatus->unk_06) { - gUnknown_03007890->unk_06 &= ~a0; + gRfuLinkStatus->unk_06 &= ~a0; for (i = 0; i < 4; i++) { - if (gUnknown_03007870[i]->unk_0 == 0x8024 && a0 & gUnknown_03007870[i]->unk_3) + if (gRfuSlotStatusUNI[i]->unk_0 == 0x8024 && a0 & gRfuSlotStatusUNI[i]->unk_3) { - gUnknown_03007870[i]->unk_3 &= ~a0; + gRfuSlotStatusUNI[i]->unk_3 &= ~a0; } } } @@ -1566,32 +1566,32 @@ static void sub_800D434(void) if (gUnknown_03004140.unk_18) { - if (gUnknown_03007890->unk_04) + if (gRfuLinkStatus->unk_04) { for (i = 0; i < 4; i ++) { - if (gUnknown_03007880[i]->unk_0 & 0x8000) + if (gRfuSlotStatusNI[i]->unk_0 & 0x8000) { flags = 0; for (j = 0; j < 4; j++) { - if ((gUnknown_03007880[i]->unk_1a >> j) & 1 && gUnknown_03007880[j]->unk_2 > gUnknown_03004140.unk_18) + if ((gRfuSlotStatusNI[i]->unk_1a >> j) & 1 && gRfuSlotStatusNI[j]->unk_2 > gUnknown_03004140.unk_18) { flags |= (1 << j); } if (flags) { - rfu_changeSendTarget(0x20, i, flags ^ gUnknown_03007880[i]->unk_1a); + rfu_changeSendTarget(0x20, i, flags ^ gRfuSlotStatusNI[i]->unk_1a); } } } } } - if (gUnknown_03007890->unk_05) + if (gRfuLinkStatus->unk_05) { for (i = 0; i < 4; i++) { - if (gUnknown_03007880[i]->unk_34 & 0x8000 && gUnknown_03007880[i]->unk_36 > gUnknown_03004140.unk_18) + if (gRfuSlotStatusNI[i]->unk_34 & 0x8000 && gRfuSlotStatusNI[i]->unk_36 > gUnknown_03004140.unk_18) { rfu_NI_stopReceivingData(i); } @@ -1628,7 +1628,7 @@ u8 sub_800D550(u8 a0, u16 a1) u8 sub_800D594(u16 a0) { - if (gUnknown_03007890->unk_04 | gUnknown_03007890->unk_05) + if (gRfuLinkStatus->unk_04 | gRfuLinkStatus->unk_05) { gUnknown_03004140.unk_14 = 6; sub_800D30C(0xf3, 0x01); @@ -2049,17 +2049,17 @@ void ASCIIToPkmnStr(u8 *q1, const u8 *q2) u8 sub_800DD1C(u8 maxFlags) { u8 flagCount = 0; - u32 flags = gUnknown_03007890->unk_02; + u32 flags = gRfuLinkStatus->unk_02; u8 i; - if (gUnknown_03007890->unk_00 == 1) + if (gRfuLinkStatus->unk_00 == 1) { for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) { if (maxFlags == flagCount + 1) - return gUnknown_03007890->unk_0a[i]; + return gRfuLinkStatus->unk_0a[i]; flagCount++; } } @@ -2069,7 +2069,7 @@ u8 sub_800DD1C(u8 maxFlags) for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) - return gUnknown_03007890->unk_0a[i]; + return gRfuLinkStatus->unk_0a[i]; } } return 0; @@ -2081,7 +2081,7 @@ NAKED u8 sub_800DD1C(u8 maxFlags) "\tlsls r0, 24\n" "\tlsrs r5, r0, 24\n" "\tmovs r6, 0\n" - "\tldr r0, =gUnknown_03007890\n" + "\tldr r0, =gRfuLinkStatus\n" "\tldr r4, [r0]\n" "\tldrb r2, [r4, 0x2]\n" "\tldrb r1, [r4]\n" @@ -2177,24 +2177,24 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) if (gUnknown_03004140.unk_06 == 1) { retVal = TRUE; - if (sub_8010454(gUnknown_03007890->unk_14[idx].unk_04) && ((gUnknown_03007890->unk_07 >> idx) & 1)) + if (sub_8010454(gRfuLinkStatus->unk_14[idx].unk_04) && ((gRfuLinkStatus->unk_07 >> idx) & 1)) { - memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, 0xD); - memcpy(buff2, gUnknown_03007890->unk_14[idx].playerName, PLAYER_NAME_LENGTH + 1); + memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, PLAYER_NAME_LENGTH + 1); } else { memset(buff1, 0, 0xD); - memset(buff2, 0, sizeof(gUnknown_03007890->unk_14[idx].playerName)); + memset(buff2, 0, PLAYER_NAME_LENGTH + 1); } } else { retVal = FALSE; - if (sub_8010454(gUnknown_03007890->unk_14[idx].unk_04)) + if (sub_8010454(gRfuLinkStatus->unk_14[idx].unk_04)) { - memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, 0xD); - memcpy(buff2, gUnknown_03007890->unk_14[idx].playerName, PLAYER_NAME_LENGTH + 1); + memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, PLAYER_NAME_LENGTH + 1); } else { @@ -2208,10 +2208,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) { bool8 retVal = FALSE; - if (gUnknown_03007890->unk_14[idx].unk_04 == 0x7F7D) + if (gRfuLinkStatus->unk_14[idx].unk_04 == 0x7F7D) { - memcpy(buff1, &gUnknown_03007890->unk_14[idx].unk_06, 0xD); - memcpy(buff2, gUnknown_03007890->unk_14[idx].playerName, 8); + memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, 8); retVal = TRUE; } else @@ -2237,7 +2237,7 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) x = 0xE7; y = 0x08; } - if (gUnknown_03007890->unk_00 == 1) + if (gRfuLinkStatus->unk_00 == 1) { sprId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0); gSprites[sprId].data[7] = 0x1234; @@ -2278,12 +2278,12 @@ void LoadWirelessStatusIndicatorSpriteGfx(void) u8 sub_800E124(void) { u8 i; - u8 flags = gUnknown_03007890->unk_02; + u8 flags = gRfuLinkStatus->unk_02; for (i = 0; i < 4; i++) { if (flags & 1) { - return gUnknown_03007890->unk_0a[i]; + return gRfuLinkStatus->unk_0a[i]; } flags >>= 1; } @@ -2307,7 +2307,7 @@ void sub_800E174(void) struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId]; u8 signalStrength = 255; u8 i = 0; - if (gUnknown_03007890->unk_00 == 1) + if (gRfuLinkStatus->unk_00 == 1) { for (i = 0; i < GetLinkPlayerCount() - 1; i++) { @@ -2787,7 +2787,7 @@ void sub_800ED34(u16 unused) } rfu_REQ_recvData(); rfu_waitREQComplete(); - if (gUnknown_03007870[gUnknown_03005000.unk_c3e]->unk_12) + if (gRfuSlotStatusUNI[gUnknown_03005000.unk_c3e]->unk_12) { gUnknown_03005000.unk_cd0++; sub_800D7D8(&gUnknown_03005000.unk_124, gUnknown_03005000.unk_c3f); @@ -2858,7 +2858,7 @@ bool8 sub_800EE94(void) bool32 sub_800EEBC(void) { - if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gUnknown_03007890->unk_14[gUnknown_03005000.unk_c3d].unk_00, 240)) + if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3d].unk_00, 240)) { gUnknown_03005000.unk_04 = 9; return TRUE; @@ -2971,7 +2971,7 @@ bool32 IsRfuRecvQueueEmpty(void) s32 i; s32 j; - if (gUnknown_03007890->unk_06 == 0) + if (gRfuLinkStatus->unk_06 == 0) { return FALSE; } @@ -2999,7 +2999,7 @@ bool32 sub_800F0F8(void) else { gUnknown_03005000.unk_cdb = 0; - if ((gUnknown_03005000.unk_ce2 & gUnknown_03007890->unk_02) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gUnknown_03007890->unk_02)) + if ((gUnknown_03005000.unk_ce2 & gRfuLinkStatus->unk_02) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gRfuLinkStatus->unk_02)) { if (!gUnknown_03005000.unk_cdc) { @@ -3119,7 +3119,7 @@ bool32 sub_800F1E0(void) gUnknown_03005000.unk_0e = 0; } retval = gUnknown_03005000.unk_cdc; - return gUnknown_03007890->unk_06 ? retval & 1 : FALSE; + return gRfuLinkStatus->unk_06 ? retval & 1 : FALSE; } void sub_800F498(u16 *a0, u8 *a1) @@ -3162,7 +3162,7 @@ bool32 sub_800F4F0(void) sub_800F86C(0); if (gUnknown_03004140.unk_02 == 0 && gUnknown_03005000.unk_ce4) { - rfu_REQ_disconnect(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03); + rfu_REQ_disconnect(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); rfu_waitREQComplete(); switchval = sub_8011A74(); if (switchval != 1 && switchval != 6 && switchval != 9) @@ -3305,7 +3305,7 @@ static void sub_800F86C(u8 unused) return; // fallthrough case 0x7700: - if (gUnknown_03007890->unk_00 == 0) + if (gRfuLinkStatus->unk_00 == 0) { gUnknown_03005000.playerCount = gRecvCmds[i][1]; gUnknown_03005000.unk_cce = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); @@ -3353,7 +3353,7 @@ static void sub_800F86C(u8 unused) { if (gReceivedRemoteLinkPlayers != 0) { - if (gRecvCmds[i][1] & gUnknown_03007890->unk_02) + if (gRecvCmds[i][1] & gRfuLinkStatus->unk_02) { gReceivedRemoteLinkPlayers = 0; sub_800D630(); @@ -3611,7 +3611,7 @@ void sub_801011C(void) void sub_8010148(void) { - rfu_REQ_disconnect(gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03); + rfu_REQ_disconnect(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); rfu_waitREQComplete(); sub_801011C(); } @@ -3631,7 +3631,7 @@ void LinkRfu_FatalError(void) { sub_800D630(); gUnknown_03005000.unk_ce4 = 1; - gUnknown_03005000.unk_ce3 = gUnknown_03007890->unk_02 | gUnknown_03007890->unk_03; + gUnknown_03005000.unk_ce3 = gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03; } void sub_80101CC(void) @@ -3821,7 +3821,7 @@ bool8 sub_8010540(void) { if (gUnknown_03005000.unk_cd1[i] < 5 || gUnknown_03005000.unk_cd1[i] > 6) { - if (gUnknown_03007880[i]->unk_34 == 0x46 || gUnknown_03007880[i]->unk_34 == 0x48) + if (gRfuSlotStatusNI[i]->unk_34 == 0x46 || gRfuSlotStatusNI[i]->unk_34 == 0x48) { if (gUnknown_03005000.unk_cd5[i] == 8) { @@ -3833,7 +3833,7 @@ bool8 sub_8010540(void) } } - else if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) + else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) rfu_clearSlot(8, i); { @@ -3898,7 +3898,7 @@ u32 sub_8010714(u16 a0, const u8 *a1) u8 r0 = sub_8011CE4(a1, a0); if (r0 == 0xFF) return 2; - if (gUnknown_03007880[r0]->unk_0 == 0) + if (gRfuSlotStatusNI[r0]->unk_0 == 0) return 1; return 0; } @@ -3910,7 +3910,7 @@ void sub_8010750(void) sub_8010540(); for (i = 0; i < 4; i++) { - if (gUnknown_03007880[i]->unk_0 == 0x26 || gUnknown_03007880[i]->unk_0 == 0x27) + if (gRfuSlotStatusNI[i]->unk_0 == 0x26 || gRfuSlotStatusNI[i]->unk_0 == 0x27) { if (gUnknown_03005000.unk_cd5[i] == 10) gUnknown_03005000.unk_cd5[i] = 11; @@ -3924,16 +3924,16 @@ s32 sub_80107A0(void) s32 retval = 0; if (gUnknown_03005000.unk_c85 == 8) { - if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_0 == 0x26 || gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_0 == 0x27) + if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_0 == 0x26 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_0 == 0x27) rfu_clearSlot(4, gUnknown_03005000.unk_c3e); } - if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x46 || gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x48) + if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x46 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x48) { rfu_clearSlot(8, gUnknown_03005000.unk_c3e); sub_8011A64(gUnknown_03005000.unk_c86, 0); retval = gUnknown_03005000.unk_c86; } - else if (gUnknown_03007880[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) + else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) { rfu_clearSlot(8, gUnknown_03005000.unk_c3e); retval = 6; @@ -4282,14 +4282,14 @@ void sub_801103C(void) void sub_8011068(u8 a0) { gUnknown_02022B14.unk_0a_7 = a0; - rfu_REQ_configGameData(0, 2, &gUnknown_02022B14, gUnknown_02022B22); + rfu_REQ_configGameData(0, 2, (const u8 *)&gUnknown_02022B14, gUnknown_02022B22); } void sub_8011090(u8 a0, u32 a1, u32 a2) { if (a0) sub_8010F84(a0, a1, a2); - rfu_REQ_configGameData(0, 2, &gUnknown_02022B14, gUnknown_02022B22); + rfu_REQ_configGameData(0, 2, (const u8 *)&gUnknown_02022B14, gUnknown_02022B22); } void sub_80110B8(u32 a0) @@ -4370,7 +4370,7 @@ void sub_801120C(u8 a0, u8 unused1) { if ((gUnknown_03004140.unk_14 >> i) & 1) { - struct UnkLinkRfuStruct_02022B14 *structPtr = &gUnknown_03007890->unk_14[i].unk_06; + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->unk_14[i].gname; if (structPtr->unk_0a_0 == sub_800F7DC()->unk_0a_0) { gUnknown_03005000.unk_cd1[i] = 0; @@ -4528,7 +4528,7 @@ u8 sub_8011628(s32 a0) { if ((a0 >> i) & 1) { - struct UnkLinkRfuStruct_02022B14 *structPtr = &gUnknown_03007890->unk_14[i].unk_06; + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->unk_14[i].gname; if (structPtr->unk_0a_0 == 0x45) ret |= (1 << i); } @@ -4629,7 +4629,7 @@ void sub_8011674(u8 a0, u8 unused1) break; case 0x32: gUnknown_03005000.unk_f0 = 3; - if (gUnknown_03007890->unk_00 == 0) + if (gRfuLinkStatus->unk_00 == 0) gUnknown_03005000.unk_c3c = 1; break; case 0x30: @@ -4654,7 +4654,7 @@ void sub_8011674(u8 a0, u8 unused1) sub_800C27C(0); } - if (gUnknown_03007890->unk_00 == 0xFF && gUnknown_03004140.unk_07 == 0 && FuncIsActiveTask(sub_800EB44) == TRUE) + if (gRfuLinkStatus->unk_00 == 0xFF && gUnknown_03004140.unk_07 == 0 && FuncIsActiveTask(sub_800EB44) == TRUE) gUnknown_03005000.unk_04 = 0x11; sub_8011A64(2, a0); @@ -4825,13 +4825,13 @@ u8 sub_8011CE4(const u8 *a0, u16 a1) for (i = 0; i < 4; i++) { - u16 trainerId = ReadU16(gUnknown_03007890->unk_14[i].unk_06.unk_00.playerTrainerId); - if (sub_8010454(gUnknown_03007890->unk_14[i].unk_04) - && !StringCompare(a0, gUnknown_03007890->unk_14[i].playerName) + u16 trainerId = ReadU16(gRfuLinkStatus->unk_14[i].gname + 2); + if (sub_8010454(gRfuLinkStatus->unk_14[i].unk_04) + && !StringCompare(a0, gRfuLinkStatus->unk_14[i].uname) && a1 == trainerId) { ret = i; - if (gUnknown_03007890->unk_14[i].unk_02 != 0xFF) + if (gRfuLinkStatus->unk_14[i].unk_02 != 0xFF) break; } } @@ -4911,7 +4911,7 @@ void sub_8011EF4(u8 taskId) u8 id = sub_8011CE4((u8*)data, ReadU16(&data[8])); if (id != 0xFF) { - if (gUnknown_03007890->unk_14[id].unk_02 != 0xFF) + if (gRfuLinkStatus->unk_14[id].unk_02 != 0xFF) { gUnknown_03005000.unk_c3d = id; if (sub_800EEBC()) @@ -5006,9 +5006,9 @@ void sub_801209C(u8 taskId) u8 id = sub_8011CE4(gUnknown_03005000.playerName, trainerId); if (id != 0xFF) { - if (!sub_801200C(gTasks[taskId].data[1], &gUnknown_03007890->unk_14[id].unk_06)) + if (!sub_801200C(gTasks[taskId].data[1], (void *)gRfuLinkStatus->unk_14[id].gname)) { - if (gUnknown_03007890->unk_14[id].unk_02 != 0xFF && !sub_800C12C(gUnknown_03007890->unk_14[id].unk_00, 0x5A)) + if (gRfuLinkStatus->unk_14[id].unk_02 != 0xFF && !sub_800C12C(gRfuLinkStatus->unk_14[id].unk_00, 0x5A)) { gUnknown_03005000.unk_04 = 0xA; DestroyTask(taskId); @@ -5081,17 +5081,17 @@ void sub_801229C(void) s32 i, j; nullsub_13(GetBlockReceivedStatus(), 0x1C, 0x13, 2); - nullsub_13(gUnknown_03007890->unk_02, 0x14, 1, 1); - nullsub_13(gUnknown_03007890->unk_03, 0x17, 1, 1); + nullsub_13(gRfuLinkStatus->unk_02, 0x14, 1, 1); + nullsub_13(gRfuLinkStatus->unk_03, 0x17, 1, 1); if (gUnknown_03005000.unk_0c == 1) { for (i = 0; i < 4; i++) { - if ((gUnknown_03007890->unk_07 >> i) & 1) + if ((gRfuLinkStatus->unk_07 >> i) & 1) { - nullsub_13(gUnknown_03007890->unk_14[i].unk_04, 1, i + 3, 4); - nullsub_5((void*) &gUnknown_03007890->unk_14[i].unk_06, 6, i + 3); - nullsub_5(gUnknown_03007890->unk_14[i].playerName, 0x16, i + 3); + nullsub_13(gRfuLinkStatus->unk_14[i].unk_04, 1, i + 3, 4); + nullsub_5((void*)gRfuLinkStatus->unk_14[i].gname, 6, i + 3); + nullsub_5(gRfuLinkStatus->unk_14[i].uname, 0x16, i + 3); } } for (i = 0; i < 4; i++) @@ -5103,7 +5103,7 @@ void sub_801229C(void) } nullsub_5(gUnknown_082ED868, 1, 0xF); } - else if (gUnknown_03007890->unk_02 != 0 && gUnknown_03007890->unk_07 != 0) + else if (gRfuLinkStatus->unk_02 != 0 && gRfuLinkStatus->unk_07 != 0) { for (i = 0; i < 4; i++) { @@ -5111,19 +5111,19 @@ void sub_801229C(void) nullsub_5(gUnknown_082ED84B, 6, i + 3); nullsub_5(gUnknown_082ED85B, 0x16, i + 3); } - nullsub_13(gUnknown_03007890->unk_14[gUnknown_03005000.unk_c3e].unk_04, 1, 3, 4); - nullsub_5((void*) &gUnknown_03007890->unk_14[gUnknown_03005000.unk_c3e].unk_06, 6, 3); - nullsub_5(gUnknown_03007890->unk_14[gUnknown_03005000.unk_c3e].playerName, 0x16, 3); + nullsub_13(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].unk_04, 1, 3, 4); + nullsub_5((void*)gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].gname, 6, 3); + nullsub_5(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].uname, 0x16, 3); } else { - for (i = 0; i < gUnknown_03007890->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->unk_08; i++) { - if (gUnknown_03007890->unk_14[i].unk_02 != 0xFF) + if (gRfuLinkStatus->unk_14[i].unk_02 != 0xFF) { - nullsub_13(gUnknown_03007890->unk_14[i].unk_04, 1, i + 3, 4); - nullsub_13(gUnknown_03007890->unk_14[i].unk_00, 6, i + 3, 4); - nullsub_5(gUnknown_03007890->unk_14[i].playerName, 0x16, i + 3); + nullsub_13(gRfuLinkStatus->unk_14[i].unk_04, 1, i + 3, 4); + nullsub_13(gRfuLinkStatus->unk_14[i].unk_00, 6, i + 3, 4); + nullsub_5(gRfuLinkStatus->unk_14[i].uname, 0x16, i + 3); } } for (; i < 4; i++) diff --git a/src/trade.c b/src/trade.c index a9a0b9b2ad..9abc614280 100644 --- a/src/trade.c +++ b/src/trade.c @@ -254,7 +254,7 @@ static bool32 sub_80771BC(void) { if (gUnknown_02022C2C == 29) { - if (gUnknown_03007880[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0) + if (gRfuSlotStatusNI[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0) return TRUE; else return FALSE; diff --git a/src/union_room.c b/src/union_room.c index 4eea421baa..9cb3bec797 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4077,7 +4077,7 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) StringCopy(arg3->field_58 + 0x10, gSpeciesNames[sUnionRoomTrade.playerSpecies]); for (i = 0; i < 4; i++) { - if (gUnknown_03007890->unk_14[i].unk_04 == 2) + if (gRfuLinkStatus->unk_14[i].unk_04 == 2) { ConvertIntToDecimalStringN(arg3->field_58 + 0x20, arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3); StringCopy(arg3->field_58 + 0x30, gSpeciesNames[arg2[1]]); From c2be2e8c69eda4ecf0a1daa499dde10174b0891b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 16 Jan 2020 05:38:24 +0800 Subject: [PATCH 2/5] sync documentation from firered --- include/librfu.h | 732 ++++++++++++++++++++++++++++++++++++---------- src/librfu.c | 4 +- src/librfu_stwi.c | 446 +++++++++++++--------------- src/link_rfu.c | 228 +++++++-------- src/trade.c | 2 +- src/union_room.c | 2 +- 6 files changed, 896 insertions(+), 518 deletions(-) diff --git a/include/librfu.h b/include/librfu.h index 1806482e41..8dd25541f6 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -4,56 +4,278 @@ #include "global.h" #include "main.h" -enum -{ - RFU_RESET = 0x10, - RFU_LINK_STATUS, - RFU_VERSION_STATUS, - RFU_SYSTEM_STATUS, - RFU_SLOT_STATUS, - RFU_CONFIG_STATUS, - RFU_GAME_CONFIG, - RFU_SYSTEM_CONFIG, - RFU_UNK18, - RFU_SC_START, - RFU_SC_POLLING, - RFU_SC_END, - RFU_SP_START, - RFU_SP_POLLING, - RFU_SP_END, - RFU_CP_START, - RFU_CP_POLLING, - RFU_CP_END, - RFU_UNK22, - RFU_UNK23, - RFU_DATA_TX, - RFU_DATA_TX_AND_CHANGE, - RFU_DATA_RX, - RFU_MS_CHANGE, - RFU_DATA_READY_AND_CHANGE, - RFU_DISCONNECTED_AND_CHANGE, - RFU_UNK2A, - RFU_UNK2B, - RFU_UNK2C, - RFU_UNK2D, - RFU_UNK2E, - RFU_UNK2F, - RFU_DISCONNECT, - RFU_TEST_MODE, - RFU_CPR_START, - RFU_CPR_POLLING, - RFU_CPR_END, - RFU_UNK35, - RFU_UNK36, - RFU_RESUME_RETRANSMIT_AND_CHANGE, - RFU_UNK38, - RFU_UNK39, - RFU_UNK3A, - RFU_UNK3B, - RFU_UNK3C, - RFU_STOP_MODE, // 3D -}; +/* TODOs: + * - split files + * - documentation + * - decompile librfu_intr.s once arm support is back again + (for internal structs not documented in SDK) + * - check if any field needs to be volatile + * - check if field names make sense + */ +// -------------------------------------------------------------------------- +// +// Restrictions When Using RFU +// +// -------------------------------------------------------------------------- +/* + The following restrictions apply when using RFU. + + + (a) The timer for Sound DMA uses only 0 + (b) The prescaler for the timer count for the Sound DMA uses 59.5 ns. + (c) The sound sampling rate is Max36.314KHz. + + + These types of DMA can be operated on a maximum CPU cycle of 42 cycles. + Calculate the number of the transferable DMA count based on this 42 cycles and the access cycles of the destination and source. + For example, if both the CPU internal RAM --> VRAM have a one cycle access, then a 21 count DMA can occur. + + + If RFU is used outside of these restrictions, problems, such as the loss of data caused by the failure of the AGB, as a clock slave, + to notify that data has been received from the RFU, will occur. + When this problem occurs, the REQ callback will send a REQ_commandID=ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ notification. + (When using Link Manager, the LMAN call back will send a LMAN_msg=LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA notification.) + +*/ + +// REQ-COMMAND (STWI) ID CODE LIST + +// REQ Command ID returned by the REQ callback +#define ID_RESET_REQ 0x0010 +#define ID_LINK_STATUS_REQ 0x0011 +#define ID_VERSION_STATUS_REQ 0x0012 // not defined in SDK header +#define ID_SYSTEM_STATUS_REQ 0x0013 +#define ID_SLOT_STATUS_REQ 0x0014 // not defined in SDK header +#define ID_CONFIG_STATUS_REQ 0x0015 // not defined in SDK header +#define ID_GAME_CONFIG_REQ 0x0016 +#define ID_SYSTEM_CONFIG_REQ 0x0017 +#define ID_SC_START_REQ 0x0019 +#define ID_SC_POLL_REQ 0x001a +#define ID_SC_END_REQ 0x001b +#define ID_SP_START_REQ 0x001c +#define ID_SP_POLL_REQ 0x001d +#define ID_SP_END_REQ 0x001e +#define ID_CP_START_REQ 0x001f +#define ID_CP_POLL_REQ 0x0020 +#define ID_CP_END_REQ 0x0021 +#define ID_DATA_TX_REQ 0x0024 +#define ID_DATA_TX_AND_CHANGE_REQ 0x0025 +#define ID_DATA_RX_REQ 0x0026 +#define ID_MS_CHANGE_REQ 0x0027 // When returned by the REQ callback, this ID indicates that execution of rfu_REQ_changeMasterSlave has finished. + // This ID is returned by both the REQ callback and the MSC callback. + // When returned by the MSC callback, this is notification that after the AGB has been made into the clock slave, the MC_Timer expired and the RFU returned the AGB to be the clock master. +#define ID_DISCONNECT_REQ 0x0030 +#define ID_TEST_MODE_REQ 0x0031 // not defined in SDK header +#define ID_CPR_START_REQ 0x0032 +#define ID_CPR_POLL_REQ 0x0033 +#define ID_CPR_END_REQ 0x0034 +#define ID_UNK35_REQ 0x0035 // not defined in SDK header +#define ID_RESUME_RETRANSMIT_AND_CHANGE_REQ 0x0037 +#define ID_STOP_MODE_REQ 0x003d +#define ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ 0x00ff // When the AGB is the clock slave, the RFU generates an informational notice, and an automatically started DMA, such as HDMA, is generated at the instant the AGB is being returned as the clock master. This ID is notified by a REQ callback when the exchange of this information (REQ command) fails. + +// REQ Command ID returned by the MSC callback +#define ID_DISCONNECTED_AND_CHANGE_REQ 0x0029 +#define ID_DATA_READY_AND_CHANGE_REQ 0x0028 +#define ID_DRAC_REQ_WITH_ACK_FLAG 0x0128 + +// -------------------------------------------------------------------------- +// +// Data Definitions +// +// -------------------------------------------------------------------------- + +#define RFU_ID 0x00008001 // ID number of AGB-RFU device: ID returned by execution of rfu_REQBN_softReset_and_checkID. + +#define RFU_MBOOT_DOWNLOADER_SERIAL_NO 0x0000 // The game serial number of the multi-boot downloader (programs that boot without a Game Pak) + +#define RFU_API_BUFF_SIZE_RAM 0x0e8c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM) +#define RFU_API_BUFF_SIZE_ROM 0x052c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM) + +#define RFU_CHILD_MAX 4 // Maximum number of slaves that can be connected to one parent device + +#define RFU_GAME_NAME_LENGTH 13 // Possible length of game name set by rfu_REQB_configGameData +#define RFU_USER_NAME_LENGTH 8 // Possible length of user name set by rfu_REQB_configGameData + +#define RFU_H_DMA_MAX_CPU_CYCLE 42 // Maximum number of CPU cycles for H-DMA or DMA that starts with V-Blank that can operate when using RFU + +// Value to determine the level of the icon that displays the link strength of the wireless status (value of rfuLinkStatus->strength[0-3]) +#define RFU_LINK_ICON_LEVEL4_MAX 255 // 90% -100% (If the value is betwen 229 and 255, the icon level is 4) +#define RFU_LINK_ICON_LEVEL4_MIN 229 +#define RFU_LINK_ICON_LEVEL3_MAX 228 // 50% - 89% (If the value is betwen 127 and 228, the icon level is 3) +#define RFU_LINK_ICON_LEVEL3_MIN 127 +#define RFU_LINK_ICON_LEVEL2_MAX 126 // 10% - 49% (If the value is betwen 25 and 126, the icon level is 2) +#define RFU_LINK_ICON_LEVEL2_MIN 25 +#define RFU_LINK_ICON_LEVEL1_MAX 24 // 0% - 9% (If the value is betwen 0 and 24, the icon level is 1) +#define RFU_LINK_ICON_LEVEL1_MIN 0 + + +// ******************************************************* +// Definition Data for Arguments Used in Library Functions +// ******************************************************* +// Specified by u16 mbootFlag in rfu_REQ_configGameData +#define RFU_MBOOT_FLAG 0x01 // Enabling this flag, allows connection to a multi-boot program. + +// AvailSlot (number of slots available for connection) used in u16 availSlotFlag in rfu_REQ_configSystem +#define AVAIL_SLOT4 0x0000 +#define AVAIL_SLOT3 0x0001 +#define AVAIL_SLOT2 0x0002 +#define AVAIL_SLOT1 0x0003 + +// u8 connTypeFlag specified by rfu_setRecvBuffer +#define TYPE_UNI 0x10 // UNI-type +#define TYPE_NI 0x20 // NI-type + +// u8 connTypeFlag specified by rfu_clearSlot +#define TYPE_UNI_SEND 0x01 // UNI-type send +#define TYPE_UNI_RECV 0x02 // UNI-type receive +#define TYPE_NI_SEND 0x04 // NI-type send +#define TYPE_NI_RECV 0x08 // NI-type receive + +// ******************************************************* +// Definition Data Returned by Return Values for Library Functions +// ******************************************************* + +// The function doesn't have return value. +// Value of u8 *status for rfu_REQ_pollConnectParent (Connection Trial Status) +// #define CP_STATUS_DONE 0x00 // Connection successful +// #define CP_STATUS_IN_PROCESS 0x01 // Connecting +// #define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device +// #define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting +// #define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error + +// The function doesn't exist. +// Value of u8 *status argument for rfu_REQ_pollRecoveryConnect (Link Restore Status) +// #define RC_STATUS_DONE 0x00 // Connection restore successful +// #define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore) +// #define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device +// #define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error + +// Value of u8 *linkLossReason argument for rfu_REQBN_watchLink (Reason for Link Loss) +#define REASON_DISCONNECTED 0x00 // State of complete disconnection with rfuLL_disconnect and no possibility of restoring the link (can detect only child device) +#define REASON_LINK_LOSS 0x01 // State of link loss that allows for the possibility for the link to be restored + + +// ******************************************************* +// Definition Data Returned with Return Values for Library Functions +// ******************************************************* + +// Value returned by rfu_getMasterSlave +#define AGB_CLK_SLAVE 0 // AGB clock slave +#define AGB_CLK_MASTER 1 // AGB clock master + +// ******************************************************* +// Error Code Group for Library Functions +// ******************************************************* + +// Error codes returned by u16 REQ_result with a REQ callback when a REQ-API function is executed +#define ERR_REQ_CMD 0x0000 +#define ERR_REQ_CMD_CLOCK_DRIFT (ERR_REQ_CMD | 0x0001) // Clock drift occurs when a REQ command is sent +#define ERR_REQ_CMD_SENDING (ERR_REQ_CMD | 0x0002) // The next command cannot be issued because a REQ command is being sent +#define ERR_REQ_CMD_ACK_REJECTION (ERR_REQ_CMD | 0x0003) // The REQ command was refused when issued +#define ERR_REQ_CMD_CLOCK_SLAVE (ERR_REQ_CMD | 0x0004) // Issuing the REQ command was attempted but failed because the AGB is the clock slave +#define ERR_REQ_CMD_IME_DISABLE (ERR_REQ_CMD | 0x0006) // Issuing the REQ command was attempted but failed because the IME register is 0 + +#define ERR_PID_NOT_FOUND 0x0100 // The specified PID does not exist in the gRfuLinkStatus->partner[0-3].id list + +// Error code returned by the return value of rfu_initializeAPI +#define ERR_RFU_API_BUFF_SIZE 0x0001 +#define ERR_RFU_API_BUFF_ADR 0x0002 + +// Error codes returned by return values for rfu_REQBN_softReset_and_checkID +#define ERR_ID_CHECK_IME_DISABLE 0xffffffff // ID check could not be executed because REG_IME=0 when executing rfu_REQBN_softReset_and_checkID + +// Error codes returned by rfu_getConnectParentStatus and rfu_CHILD_getConnectRecoveryStatus +#define ERR_REQ_CMD_ID (ERR_REQ_CMD | 0x0010) // A required REQ command was not executed within this function execution + +// Error codes returned by rfu_NI_setSendData, rfu_UNI_setSendData, and rfu_NI_CHILD_setSendGameName +#define ERR_MODE 0x0300 +#define ERR_MODE_NOT_PARENT (ERR_MODE | 0x0000) // not in SDK +#define ERR_MODE_NOT_CONNECTED (ERR_MODE | 0x0001) // RFU is not in connection mode (parent or child) + +#define ERR_SLOT 0x0400 +#define ERR_SLOT_NO (ERR_SLOT | 0x0000) // The specified slot number is not right +#define ERR_SLOT_NOT_CONNECTED (ERR_SLOT | 0x0001) // The specified slot is not connected +#define ERR_SLOT_BUSY (ERR_SLOT | 0x0002) // The specified slot is already communicating +#define ERR_SLOT_NOT_SENDING (ERR_SLOT | 0x0003) // The specified slot is not currently sending (Note: This is returned by rfu_UNI_re_setSendData) +#define ERR_SLOT_TARGET (ERR_SLOT | 0x0004) // The specified target slot is not right + +#define ERR_SUBFRAME_SIZE 0x0500 // The specified subframe size is either larger than the remaining communication frame size or smaller than the link layer subframe header size + +// Error code returned by rfu_clearSlot, rfu_setRecvBuffer, and rfu_changeSendTarget +#define ERR_COMM_TYPE 0x0600 // The specified communication format is not right + +// Error code returned by rfu_REQ_recvData (when receiving NI-type or UNI-type data) +#define ERR_DATA_RECV 0x0700 // Error notification is issued in the following format. + // "ERR_DATA_RECV | (slot number issuing error with 0x0010<recv.errorCode. + +// Error code during NI-type communication (code entered into gRfuSlotStatusNI[x]->recv.errorCode) +#define ERR_RECV_BUFF_OVER (ERR_DATA_RECV | 0x0001) // The receive data size is larger than the receive buffer (Note: This error is used for both NI and UNI) +#define ERR_RECV_REPLY_SUBFRAME_SIZE (ERR_DATA_RECV | 0x0002) // All frames are already in use by other communications, and a subframe for reception response could not be secured + +// Error code during UNI-type communication (code entered into gRfuSlotStatusUNI[x]->recv.errorCode) +#define ERR_RECV_DATA_OVERWRITED (ERR_DATA_RECV | 0x0008) // Received new data when gRfuSlotStatusUNI[x]->recv.newDataFlag=1 + +// not in SDK header +#define ERR_RECV_UNK (ERR_DATA_RECV | 0x0001 | 0x0008) + +// ******************************************************* +// Definition Data Used by Global Variables in the Library +// ******************************************************* + +// gRfuLinkStatus------------------------------------------- +// Connection status (refer to gRfuLinkStatus->parentChild) +#define MODE_NEUTRAL 0xff // Initialization +#define MODE_CHILD 0x00 // Child +#define MODE_PARENT 0x01 // Parent + + +// gRfuSlotStatusNI,UNI----------------------------------- +// Definition data for NI-(Numbered Information) and UNI-(Un-Numbered Information) type communication + +// Definition data common to NI- and UNI-type communication +#define LLF_P_SIZE 87 // Maximum link layer communication frame size for the Parent (Maximum number of bytes per transmission) +#define LLF_C_SIZE 16 // " " for the Child +#define LLSF_P_HEADER_SIZE 3 // Header size used by one link layer subframe (NI or UNI frame) for the Parent +#define LLSF_C_HEADER_SIZE 2 // " " for the Child + +// Link Layer Communication Code +#define LCOM_NULL 0x0000 +#define LCOM_NI_START 0x0001 +#define LCOM_NI 0x0002 +#define LCOM_NI_END 0x0003 +#define LCOM_UNI 0x0004 + +// Flag for Slot Status Data +#define SLOT_BUSY_FLAG 0x8000 // Slot in use +#define SLOT_SEND_FLAG 0x0020 // Send +#define SLOT_RECV_FLAG 0x0040 // Receive + +// NI- and UNI-type shared slot stand-by data (same state as gRfuSlotStatusNI[x]->send or ->recv.state or gRfuSlotStatusUNI) +#define SLOT_STATE_READY 0x0000 // Slot initialization + +// Status data for NI-type communication (gRfuSlotStatusNI[x]->send or ->recv.state) +#define SLOT_STATE_SEND_START (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI_START) // Start transmission +#define SLOT_STATE_SENDING (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI) // Transmitting +#define SLOT_STATE_SEND_LAST (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI_END) // Verify transmission end +#define SLOT_STATE_SEND_NULL (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NULL) // Send NULL subframe to notify end of transmission +#define SLOT_STATE_SEND_SUCCESS ( SLOT_SEND_FLAG | 0x006) // Transmission successful +#define SLOT_STATE_SEND_FAILED ( SLOT_SEND_FLAG | 0x007) // Transmission failed + // Distinction of slot where transmission succeeded/failed compares gRfuSlotStatusNI[x]->send.bmSlot and same bmSlot_org +#define SLOT_STATE_RECV_START (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI_START) // Start reception +#define SLOT_STATE_RECEIVING (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI) // Receiving +#define SLOT_STATE_RECV_LAST (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI_END) // Verify reception end +#define SLOT_STATE_RECV_SUCCESS ( SLOT_RECV_FLAG | 0x006) // Reception successful +#define SLOT_STATE_RECV_FAILED ( SLOT_RECV_FLAG | 0x007) // Reception failed +#define SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN (SLOT_RECV_FLAG | 0x008) // The data was received successful, but because the end of the communication was incomplete, whether the transmission side status is successful or failed is unknown +#define SLOT_STATE_RECV_IGNORE ( SLOT_RECV_FLAG | 0x009) // Ignore reception (refer to gRfuSlotStatusNI[x]->recv.errorCode for reason for ignoring) + +// Status data for UNI-type communication (refer to gRfuSlotStatusUNI[x]->send.state) +#define SLOT_STATE_SEND_UNI (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_UNI) // Transmitting + +// the following structs are not documented in SDK struct RfuPacket8 { u8 data[0x74]; @@ -73,164 +295,362 @@ union RfuPacket struct STWIStatus { - vs32 unk_0; - u8 txParams; - u8 unk_5; - u8 activeCommand; - u8 unk_7; - u8 unk_8; - u8 unk_9; + vs32 state; + u8 reqLength; + u8 reqNext; + u8 reqActiveCommand; + u8 ackLength; + u8 ackNext; + u8 ackActiveCommand; u8 timerSelect; u8 unk_b; - int timerState; + s32 timerState; // this field is u32 in firered vu8 timerActive; u8 unk_11; - vu16 unk_12; + vu16 error; vu8 msMode; - u8 unk_15; + u8 recoveryCount; u8 unk_16; u8 unk_17; void (*callbackM)(); - void (*callbackS)(); - u32 callbackID; + void (*callbackS)(u16); + void (*unk_20)(void); union RfuPacket *txPacket; union RfuPacket *rxPacket; vu8 unk_2c; - u8 padding[3]; }; +// This struct is used as u8 array in SDK. struct RfuIntrStruct { - u8 rxPacketAlloc[0x74]; - u8 txPacketAlloc[0x74]; - u8 block1[0x960]; - u8 block2[0x30]; + union RfuPacket rxPacketAlloc; + union RfuPacket txPacketAlloc; + u8 block1[0x960]; // size of librfu_intr.s binary + struct STWIStatus block2; }; +// Data Structure for Transmitting UNI-Type Data +struct UNISend +{ + u16 state; // Slot communication state (SLOT_STATE_READY, SLOT_STATE_SEND_UNI) + u8 dataReadyFlag; // Flag indicating transmission data is prepared (0: data sent; 1: transmission data ready) + // Set with rfu_UNI_re_setSendData or rfu_UNI_readySendData, cleared when data is sent with rfu_REQ_sendData. + u8 bmSlot; // Expresses transmission destination slot as bits + u16 payloadSize; // Payload size of 1 transmission. "size" specified by rfu_UNI_setSendData or rfu_UNI_re_setSendData is used. + const void *src; // Beginning address of transmission data +}; + +// Data Structure for Receiving UNI Data +struct UNIRecv +{ + u16 state; // Slot communication state (SLOT_STATE_READY, SLOT_STATE_RECEIVING, SLOT_STATE_RECV_IGNORE) + u16 errorCode; // Error code during reception + u16 dataSize; // Size of receive data + u8 newDataFlag; // Flag indicating whether receive data has newly arrived (0: no newly arrived data; 1: newly arrived data) + // The flag is cleared with rfu_UNI_clearRecvNewDataFlag; it is set when data is received with rfu_REQ_recvData. + u8 dataBlockFlag; // Flag for unreferenced receive data overwrite block (default is 0 Note: not used) +}; + +// Slot Status Data Structure for UNI-Type Communication struct RfuSlotStatusUNI { - u16 unk_0; - u8 unk_2; - u8 unk_3; - u8 fill_4[14]; - u8 unk_12; - u32 unk_14; - u32 unk_18; - struct RfuIntrStruct unk_1c; + struct UNISend send; // Transmission Status + struct UNIRecv recv; // Reception Status + void *recvBuffer; // Reception Buffer Address + u32 recvBufferSize; // Reception Buffer Size +}; + +#define WINDOW_COUNT 4 + +struct NIComm +{ + u16 state; // Communication state of slot + u16 failCounter; // Count of failed transmissions/receptions (Count is increased when transmission/reception of data does not succeed within 1PF=16.7 ms) + const u8 *now_p[WINDOW_COUNT]; // Address of current send/receive (The data is divided into WINDOW_COUNT blocks and sent in payloadSize units.) + // remainSize is u32 in SDK. This is a hack to match ASM + s32 remainSize; // Size of remaining communication data + u16 errorCode; // Error code + u8 bmSlot; // Expresses the current communication slot in bits + // (When sending from the Master, because multiple slaves can be specified with bmSlot, communications are terminated based on the failCounter for each child device) + // Parameters used inside the Library + u8 recvAckFlag[WINDOW_COUNT]; + u8 ack; + u8 phase; + u8 n[WINDOW_COUNT]; + // Parameters indicating the current communication content + const void *src; // Start address transmission data (valid only for transmitting device) + u8 bmSlotOrg; // Expresses the communication source slot at the beginning of the transmission in bits (valid only for transmitting device) + u8 dataType; // Transmission/reception data type (0: User data; 1: Game identification information) + u16 payloadSize; // Payload size for one transmission + u32 dataSize; // Size of transmission/reception data + // Calculated by subtracting link layer header size from subFrameSize specified by the rfu_NI_setSendData function }; struct RfuSlotStatusNI { - u16 unk_0; - u16 unk_2; - u8 fill_4[0x16]; - u8 unk_1a; - u8 fill_1b[0x19]; - u16 unk_34; - u16 unk_36; - u8 fill_38[0x16]; - u8 unk_4e; - u8 fill_4f[0x12]; - u8 unk_61; - u8 fill_62[6]; - void *unk_68; - void *unk_6c; - u8 unk_70[0x70]; + struct NIComm send; // Transmission Status + struct NIComm recv; // Reception Status + void *recvBuffer; // Reception Buffer Address + u32 recvBufferSize; // Reception Buffer Size }; -struct RfuFixed +// Game Identification Information Data Structure +struct RfuTgtData { - u32 unk_0; - u32 unk_4; - u8 unk_8[0xD4]; - u32 unk_dc; -}; - -#define RFU_GAME_NAME_LENGTH 13 // Possible length of game name set by rfu_REQB_configGameData -#define RFU_USER_NAME_LENGTH 8 - -struct RfuUnk5Sub -{ - u16 unk_00; - u8 unk_02; - u16 unk_04; + u16 id; // ID of parent candidate ID of connection partner + u8 slot; // Slot number where parent candidate can enter Connection slot number + u8 mbootFlag; // Flag to indicate whether or not the parent candidate Flag to indicate whether or not the connection partner + // is multiboot program for download is multiboot program for download + u16 serialNo; // Game serial number of parent candidate Game serial number of connection partner u8 gname[RFU_GAME_NAME_LENGTH + 2]; // Game name of parent candidate Game name of connection partner u8 uname[RFU_USER_NAME_LENGTH + 1]; // User name for parent candidate User name for connection partner }; struct RfuLinkStatus { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03; - u8 unk_04; - u8 unk_05; - u8 unk_06; - u8 unk_07; - u8 unk_08; - u8 filler_09[1]; - u8 unk_0a[4]; - u8 filler_0e[6]; - struct RfuUnk5Sub unk_14[5]; + u8 parentChild; // Connection status (0x01:MODE_PARENT 0x00:MODE_CHILD 0xff:MODE_NEUTRAL) + u8 connCount; // Number of connections + u8 connSlotFlag; // Flag to indicate in bits the connection slot (0x01<block1; - DmaCopy16(3, &IntrSIO32, interruptStruct->block1, 0x960); - gSTWIStatus = (struct STWIStatus*)interruptStruct->block2; + DmaCopy16(3, &IntrSIO32, interruptStruct->block1, sizeof(interruptStruct->block1)); + gSTWIStatus = &interruptStruct->block2; } else { - *interrupt = (IntrFunc)IntrSIO32; - gSTWIStatus = (struct STWIStatus*)interruptStruct->block1; + *interrupt = IntrSIO32; + gSTWIStatus = (struct STWIStatus *)interruptStruct->block1; } - - gSTWIStatus->rxPacket = (union RfuPacket*)interruptStruct->rxPacketAlloc; - gSTWIStatus->txPacket = (union RfuPacket*)interruptStruct->txPacketAlloc; + gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc; + gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc; gSTWIStatus->msMode = 1; - gSTWIStatus->unk_0 = 0; - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; - gSTWIStatus->unk_7 = 0; - gSTWIStatus->unk_8 = 0; - gSTWIStatus->unk_9 = 0; + gSTWIStatus->state = 0; + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; + gSTWIStatus->ackLength = 0; + gSTWIStatus->ackNext = 0; + gSTWIStatus->ackActiveCommand = 0; gSTWIStatus->timerState = 0; gSTWIStatus->timerActive = 0; - gSTWIStatus->unk_12 = 0; - gSTWIStatus->unk_15 = 0; + gSTWIStatus->error = 0; + gSTWIStatus->recoveryCount = 0; gSTWIStatus->unk_2c = 0; - - REG_RCNT = 0x100; //TODO: mystery bit? + REG_RCNT = 0x100; // TODO: mystery bit? REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; STWI_init_Callback_M(); STWI_init_Callback_S(); - IntrEnable(INTR_FLAG_SERIAL); } -void STWI_init_timer(IntrFunc *interrupt, int timerSelect) +void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect) { *interrupt = STWI_intr_timer; gSTWIStatus->timerSelect = timerSelect; - IntrEnable(INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); } @@ -78,25 +65,24 @@ void AgbRFU_SoftReset(void) timerH = ®_TMCNT_H(gSTWIStatus->timerSelect); *timerH = 0; *timerL = 0; - *timerH = 0x83; + *timerH = TIMER_ENABLE | TIMER_1024CLK; while (*timerL <= 0x11) REG_RCNT = 0x80A2; *timerH = 3; REG_RCNT = 0x80A0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; - - gSTWIStatus->unk_0 = 0; - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; - gSTWIStatus->activeCommand = 0; - gSTWIStatus->unk_7 = 0; - gSTWIStatus->unk_8 = 0; - gSTWIStatus->unk_9 = 0; + gSTWIStatus->state = 0; + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; + gSTWIStatus->reqActiveCommand = 0; + gSTWIStatus->ackLength = 0; + gSTWIStatus->ackNext = 0; + gSTWIStatus->ackActiveCommand = 0; gSTWIStatus->timerState = 0; gSTWIStatus->timerActive = 0; - gSTWIStatus->unk_12 = 0; + gSTWIStatus->error = 0; gSTWIStatus->msMode = 1; - gSTWIStatus->unk_15 = 0; + gSTWIStatus->recoveryCount = 0; gSTWIStatus->unk_2c = 0; } @@ -110,13 +96,13 @@ u16 STWI_read_status(u8 index) switch (index) { case 0: - return gSTWIStatus->unk_12; + return gSTWIStatus->error; case 1: return gSTWIStatus->msMode; case 2: - return gSTWIStatus->unk_0; + return gSTWIStatus->state; case 3: - return gSTWIStatus->activeCommand; + return gSTWIStatus->reqActiveCommand; default: return 0xFFFF; } @@ -124,136 +110,130 @@ u16 STWI_read_status(u8 index) void STWI_init_Callback_M(void) { - STWI_set_Callback_M(0); + STWI_set_Callback_M(NULL); } void STWI_init_Callback_S(void) { - STWI_set_Callback_S(0); + STWI_set_Callback_S(NULL); } -void STWI_set_Callback_M(void *callback) +// The callback can take 2 or 3 arguments. +void STWI_set_Callback_M(void *callbackM) { - gSTWIStatus->callbackM = callback; + gSTWIStatus->callbackM = callbackM; } -void STWI_set_Callback_S(void *callback) +void STWI_set_Callback_S(void (*callbackS)(u16)) { - gSTWIStatus->callbackS = callback; + gSTWIStatus->callbackS = callbackS; } -void STWI_set_Callback_ID(u32 id) +void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer { - gSTWIStatus->callbackID = id; + gSTWIStatus->unk_20 = func; } u16 STWI_poll_CommandEnd(void) { while (gSTWIStatus->unk_2c == TRUE) ; - return gSTWIStatus->unk_12; + return gSTWIStatus->error; } void STWI_send_ResetREQ(void) { - if (!STWI_init(RFU_RESET)) + if (!STWI_init(ID_RESET_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_LinkStatusREQ(void) { - if (!STWI_init(RFU_LINK_STATUS)) + if (!STWI_init(ID_LINK_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_VersionStatusREQ(void) { - if (!STWI_init(RFU_VERSION_STATUS)) + if (!STWI_init(ID_VERSION_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SystemStatusREQ(void) { - if (!STWI_init(RFU_SYSTEM_STATUS)) + if (!STWI_init(ID_SYSTEM_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SlotStatusREQ(void) { - if (!STWI_init(RFU_SLOT_STATUS)) + if (!STWI_init(ID_SLOT_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_ConfigStatusREQ(void) { - if (!STWI_init(RFU_CONFIG_STATUS)) + if (!STWI_init(ID_CONFIG_STATUS_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } -void STWI_send_GameConfigREQ(u8 * unk1, u8 *data) +void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data) { u8 *packetBytes; - int i; + s32 i; - if (!STWI_init(RFU_GAME_CONFIG)) + if (!STWI_init(ID_GAME_CONFIG_REQ)) { - gSTWIStatus->txParams = 6; - - //TODO: what is unk1 + gSTWIStatus->reqLength = 6; + // TODO: what is unk1 packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *(u16*)packetBytes = *(u16*)unk1; - + *(u16 *)packetBytes = *(u16 *)unk1; packetBytes += sizeof(u16); unk1 += sizeof(u16); - - for (i = 0; i < 14; i++) + for (i = 0; i < 14; ++i) { *packetBytes = *unk1; - packetBytes++; - unk1++; + ++packetBytes; + ++unk1; } - - for (i = 0; i < 8; i++) + for (i = 0; i < 8; ++i) { *packetBytes = *data; - packetBytes++; - data++; + ++packetBytes; + ++data; } - STWI_start_Command(); } } void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) { - if (!STWI_init(RFU_SYSTEM_CONFIG)) + if (!STWI_init(ID_SYSTEM_CONFIG_REQ)) { u8 *packetBytes; - gSTWIStatus->txParams = 1; - + gSTWIStatus->reqLength = 1; packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *packetBytes++ = unk3; *packetBytes++ = unk2; *(u16*)packetBytes = unk1; @@ -263,63 +243,63 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3) void STWI_send_SC_StartREQ(void) { - if (!STWI_init(RFU_SC_START)) + if (!STWI_init(ID_SC_START_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SC_PollingREQ(void) { - if (!STWI_init(RFU_SC_POLLING)) + if (!STWI_init(ID_SC_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SC_EndREQ(void) { - if (!STWI_init(RFU_SC_END)) + if (!STWI_init(ID_SC_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SP_StartREQ(void) { - if (!STWI_init(RFU_SP_START)) + if (!STWI_init(ID_SP_START_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SP_PollingREQ(void) { - if (!STWI_init(RFU_SP_POLLING)) + if (!STWI_init(ID_SP_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_SP_EndREQ(void) { - if (!STWI_init(RFU_SP_END)) + if (!STWI_init(ID_SP_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_CP_StartREQ(u16 unk1) { - if (!STWI_init(RFU_CP_START)) + if (!STWI_init(ID_CP_START_REQ)) { - gSTWIStatus->txParams = 1; + gSTWIStatus->reqLength = 1; gSTWIStatus->txPacket->rfuPacket32.data[0] = unk1; STWI_start_Command(); } @@ -327,142 +307,132 @@ void STWI_send_CP_StartREQ(u16 unk1) void STWI_send_CP_PollingREQ(void) { - if (!STWI_init(RFU_CP_POLLING)) + if (!STWI_init(ID_CP_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_CP_EndREQ(void) { - if (!STWI_init(RFU_CP_END)) + if (!STWI_init(ID_CP_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } -void STWI_send_DataTxREQ(void *in, u8 size) +void STWI_send_DataTxREQ(const void *in, u8 size) { - if (!STWI_init(RFU_DATA_TX)) + if (!STWI_init(ID_DATA_TX_REQ)) { - u8 txParams = (size / sizeof(u32)); + u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) - txParams += 1; - - gSTWIStatus->txParams = txParams; - CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->txParams * sizeof(u32)); + reqLength += 1; + gSTWIStatus->reqLength = reqLength; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32)); STWI_start_Command(); } } -void STWI_send_DataTxAndChangeREQ(void *in, u8 size) +void STWI_send_DataTxAndChangeREQ(const void *in, u8 size) { - if (!STWI_init(RFU_DATA_TX_AND_CHANGE)) + if (!STWI_init(ID_DATA_TX_AND_CHANGE_REQ)) { - u8 txParams = (size / sizeof(u32)); + u8 reqLength = (size / sizeof(u32)); if (size & (sizeof(u32) - 1)) - txParams += 1; - - gSTWIStatus->txParams = txParams; - CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->txParams * sizeof(u32)); + reqLength += 1; + gSTWIStatus->reqLength = reqLength; + CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32)); STWI_start_Command(); } } void STWI_send_DataRxREQ(void) { - if (!STWI_init(RFU_DATA_RX)) + if (!STWI_init(ID_DATA_RX_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_MS_ChangeREQ(void) { - if (!STWI_init(RFU_MS_CHANGE)) + if (!STWI_init(ID_MS_CHANGE_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_DataReadyAndChangeREQ(u8 unk) { - if (!STWI_init(RFU_DATA_READY_AND_CHANGE)) + if (!STWI_init(ID_DATA_READY_AND_CHANGE_REQ)) { if (!unk) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; } else { u8 *packetBytes; - gSTWIStatus->txParams = 1; - + gSTWIStatus->reqLength = 1; packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *packetBytes++ = unk; *packetBytes++ = 0; *packetBytes++ = 0; *packetBytes = 0; } - STWI_start_Command(); } } void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1) { - if (!STWI_init(RFU_DISCONNECTED_AND_CHANGE)) + if (!STWI_init(ID_DISCONNECTED_AND_CHANGE_REQ)) { u8 *packetBytes; - gSTWIStatus->txParams = 1; - + gSTWIStatus->reqLength = 1; packetBytes = gSTWIStatus->txPacket->rfuPacket8.data; packetBytes += sizeof(u32); - *packetBytes++ = unk0; *packetBytes++ = unk1; *packetBytes++ = 0; *packetBytes = 0; - STWI_start_Command(); } } void STWI_send_ResumeRetransmitAndChangeREQ(void) { - if (!STWI_init(RFU_RESUME_RETRANSMIT_AND_CHANGE)) + if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_DisconnectREQ(u8 unk) { - if (!STWI_init(RFU_DISCONNECT)) + if (!STWI_init(ID_DISCONNECT_REQ)) { - gSTWIStatus->txParams = 1; + gSTWIStatus->reqLength = 1; gSTWIStatus->txPacket->rfuPacket32.data[0] = unk; - STWI_start_Command(); } } void STWI_send_TestModeREQ(u8 unk0, u8 unk1) { - if (!STWI_init(RFU_TEST_MODE)) + if (!STWI_init(ID_TEST_MODE_REQ)) { - gSTWIStatus->txParams = 1; + gSTWIStatus->reqLength = 1; gSTWIStatus->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8); - STWI_start_Command(); } } @@ -472,71 +442,69 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2) u32 *packetData; u32 arg1; - if (!STWI_init(RFU_CPR_START)) + if (!STWI_init(ID_CPR_START_REQ)) { - gSTWIStatus->txParams = 2; - + gSTWIStatus->reqLength = 2; arg1 = unk1 | (unk0 << 16); packetData = gSTWIStatus->txPacket->rfuPacket32.data; packetData[0] = arg1; packetData[1] = unk2; - STWI_start_Command(); } } void STWI_send_CPR_PollingREQ(void) { - if (!STWI_init(RFU_CPR_POLLING)) + if (!STWI_init(ID_CPR_POLL_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_CPR_EndREQ(void) { - if (!STWI_init(RFU_CPR_END)) + if (!STWI_init(ID_CPR_END_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } void STWI_send_StopModeREQ(void) { - if (!STWI_init(RFU_STOP_MODE)) + if (!STWI_init(ID_STOP_MODE_REQ)) { - gSTWIStatus->txParams = 0; + gSTWIStatus->reqLength = 0; STWI_start_Command(); } } -void STWI_intr_timer(void) +static void STWI_intr_timer(void) { switch (gSTWIStatus->timerState) { - //TODO: Make an enum for these - case 2: - gSTWIStatus->timerActive = 1; - STWI_set_timer(50); - break; - case 1: - case 4: - STWI_stop_timer(); - STWI_restart_Command(); - break; - case 3: - gSTWIStatus->timerActive = 1; - STWI_stop_timer(); - STWI_reset_ClockCounter(); - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(255, 0); - break; + // TODO: Make an enum for these + case 2: + gSTWIStatus->timerActive = 1; + STWI_set_timer(50); + break; + case 1: + case 4: + STWI_stop_timer(); + STWI_restart_Command(); + break; + case 3: + gSTWIStatus->timerActive = 1; + STWI_stop_timer(); + STWI_reset_ClockCounter(); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(255, 0); + break; } } -void STWI_set_timer(u8 unk) +static void STWI_set_timer(u8 unk) { vu16 *timerL; vu16 *timerH; @@ -546,144 +514,134 @@ void STWI_set_timer(u8 unk) REG_IME = 0; switch (unk) { - case 50: - *timerL = 0xFCCB; - gSTWIStatus->timerState = 1; - break; - case 80: - *timerL = 0xFAE0; - gSTWIStatus->timerState = 2; - break; - case 100: - *timerL = 0xF996; - gSTWIStatus->timerState = 3; - break; - case 130: - *timerL = 0xF7AD; - gSTWIStatus->timerState = 4; - break; + case 50: + *timerL = 0xFCCB; + gSTWIStatus->timerState = 1; + break; + case 80: + *timerL = 0xFAE0; + gSTWIStatus->timerState = 2; + break; + case 100: + *timerL = 0xF996; + gSTWIStatus->timerState = 3; + break; + case 130: + *timerL = 0xF7AD; + gSTWIStatus->timerState = 4; + break; } *timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK; REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect; REG_IME = 1; } -void STWI_stop_timer(void) +static void STWI_stop_timer(void) { gSTWIStatus->timerState = 0; - REG_TMCNT_L(gSTWIStatus->timerSelect) = 0; REG_TMCNT_H(gSTWIStatus->timerSelect) = 0; } -u16 STWI_init(u8 request) +static u16 STWI_init(u8 request) { if (!REG_IME) { - gSTWIStatus->unk_12 = 6; - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(request, gSTWIStatus->unk_12); + gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error); return TRUE; } else if (gSTWIStatus->unk_2c == TRUE) { - gSTWIStatus->unk_12 = 2; + gSTWIStatus->error = ERR_REQ_CMD_SENDING; gSTWIStatus->unk_2c = FALSE; - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(request, gSTWIStatus->unk_12); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error); return TRUE; } else if(!gSTWIStatus->msMode) { - gSTWIStatus->unk_12 = 4; - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(request, gSTWIStatus->unk_12, gSTWIStatus); + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE; + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus); return TRUE; } else { gSTWIStatus->unk_2c = TRUE; - gSTWIStatus->activeCommand = request; - gSTWIStatus->unk_0 = 0; - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; - gSTWIStatus->unk_7 = 0; - gSTWIStatus->unk_8 = 0; - gSTWIStatus->unk_9 = 0; + gSTWIStatus->reqActiveCommand = request; + gSTWIStatus->state = 0; + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; + gSTWIStatus->ackLength = 0; + gSTWIStatus->ackNext = 0; + gSTWIStatus->ackActiveCommand = 0; gSTWIStatus->timerState = 0; gSTWIStatus->timerActive = 0; - gSTWIStatus->unk_12 = 0; - gSTWIStatus->unk_15 = 0; - + gSTWIStatus->error = 0; + gSTWIStatus->recoveryCount = 0; REG_RCNT = 0x100; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; return FALSE; } } -int STWI_start_Command() +static s32 STWI_start_Command(void) { u16 imeTemp; - // Yes, it matters that it's casted to a u32... - *(u32*)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->txParams << 8) | gSTWIStatus->activeCommand; + // equivalent to gSTWIStatus->txPacket->rfuPacket32.command, + // but the cast here is required to avoid register issue + *(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand; REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command; - - gSTWIStatus->unk_0 = 0; - gSTWIStatus->unk_5 = 1; - + gSTWIStatus->state = 0; + gSTWIStatus->reqNext = 1; imeTemp = REG_IME; REG_IME = 0; REG_IE |= (INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect); REG_IE |= INTR_FLAG_SERIAL; REG_IME = imeTemp; - REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_MULTI_BUSY | SIO_115200_BPS; - return 0; } -int STWI_restart_Command(void) +static s32 STWI_restart_Command(void) { - if (gSTWIStatus->unk_15 <= 1) + if (gSTWIStatus->recoveryCount <= 1) { - gSTWIStatus->unk_15++; + ++gSTWIStatus->recoveryCount; STWI_start_Command(); } else { - if (gSTWIStatus->activeCommand == RFU_MS_CHANGE || gSTWIStatus->activeCommand == RFU_DATA_TX_AND_CHANGE || gSTWIStatus->activeCommand == RFU_UNK35 || gSTWIStatus->activeCommand == RFU_RESUME_RETRANSMIT_AND_CHANGE) + if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ) { - gSTWIStatus->unk_12 = 1; + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT; gSTWIStatus->unk_2c = 0; - - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(gSTWIStatus->activeCommand, gSTWIStatus->unk_12); + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); } else { - gSTWIStatus->unk_12 = 1; + gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT; gSTWIStatus->unk_2c = 0; - - if (gSTWIStatus->callbackM) - gSTWIStatus->callbackM(gSTWIStatus->activeCommand, gSTWIStatus->unk_12); - - gSTWIStatus->unk_0 = 4; //TODO: what's 4 + if (gSTWIStatus->callbackM != NULL) + gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error); + gSTWIStatus->state = 4; // TODO: what's 4 } } - return 0; } -int STWI_reset_ClockCounter(void) +static s32 STWI_reset_ClockCounter(void) { - gSTWIStatus->unk_0 = 5; //TODO: what is 5 - gSTWIStatus->txParams = 0; - gSTWIStatus->unk_5 = 0; + gSTWIStatus->state = 5; // TODO: what is 5 + gSTWIStatus->reqLength = 0; + gSTWIStatus->reqNext = 0; REG_SIODATA32 = (1 << 31); REG_SIOCNT = 0; REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS; REG_SIOCNT = (SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS) + 0x7F; - return 0; } diff --git a/src/link_rfu.c b/src/link_rfu.c index 6f45b528e3..9291f574eb 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -364,7 +364,7 @@ u32 sub_800BEC0(void) void rfu_REQ_sendData_wrapper(u8 r2) { u8 val; - if (!gRfuLinkStatus->unk_00) + if (!gRfuLinkStatus->parentChild) { val = gUnknown_03004140.unk_02; r2 = 0; @@ -515,14 +515,14 @@ u8 sub_800C12C(u16 r6, u16 r8) sub_800D30C(0xF3, 0x01); return 2; } - for (i = 0; i < gRfuLinkStatus->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { - if (gRfuLinkStatus->unk_14[i].unk_00 == r6) + if (gRfuLinkStatus->partner[i].id == r6) { break; } } - if (gRfuLinkStatus->unk_08 == 0 || i == gRfuLinkStatus->unk_08) + if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) { gUnknown_03004140.unk_14 = 3; sub_800D30C(0xF3, 0x01); @@ -561,7 +561,7 @@ void sub_800C210(u8 a0) gUnknown_03004140.unk_34[i] = 0; } } - i = gRfuLinkStatus->unk_03 & a0; + i = gRfuLinkStatus->linkLossSlotFlag & a0; if (i) { sub_800D334(i); @@ -630,8 +630,8 @@ void sub_800C27C(bool8 a0) case 16: gUnknown_03004140.unk_04 = gUnknown_03004140.unk_11; gUnknown_03004140.unk_05 = gUnknown_03004140.unk_12; - sub_800D334(gRfuLinkStatus->unk_03); - gUnknown_03004140.unk_14 = gRfuLinkStatus->unk_03; + sub_800D334(gRfuLinkStatus->linkLossSlotFlag); + gUnknown_03004140.unk_14 = gRfuLinkStatus->linkLossSlotFlag; sub_800D30C(0x33, 0x01); return; case 17: @@ -703,7 +703,7 @@ bool8 sub_800C36C(u16 a0) } sub_800D610(); } - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { if (sp2) { @@ -834,7 +834,7 @@ void sub_800C54C(u32 a0) case 15: break; case 16: - rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->unk_03); + rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); break; case 17: rfu_REQ_CHILD_pollConnectRecovery(); @@ -857,7 +857,7 @@ void sub_800C54C(u32 a0) gUnknown_03004140.unk_0e = 0; } } while (gUnknown_03004140.unk_04 == 18 || gUnknown_03004140.unk_04 == 19); - if (gRfuLinkStatus->unk_00 != 1 || !sub_800C36C(0)) + if (gRfuLinkStatus->parentChild != 1 || !sub_800C36C(0)) { sub_800CF34(); sub_800D158(); @@ -910,7 +910,7 @@ static void sub_800C744(u32 a0) static void sub_800C7B4(u16 r8, u16 r6) { u8 sp0; - register u8 *stwiRecvBuffer asm("r0"); + register struct RfuIntrStruct *stwiRecvBuffer asm("r0"); u8 *tmp; u8 i; @@ -983,7 +983,7 @@ static void sub_800C7B4(u16 r8, u16 r6) { sub_800D30C(0x20, 0x01); } - if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gRfuLinkStatus->unk_08 == 4) + if (gUnknown_03004140.unk_0b && gUnknown_03004140.unk_1a != 1 && gRfuLinkStatus->findParentCount == 4) { rfu_REQ_endSearchParent(); rfu_waitREQComplete(); @@ -1059,11 +1059,11 @@ static void sub_800C7B4(u16 r8, u16 r6) case 50: if (r6 == 0) { - gUnknown_03004140.unk_14 = gRfuLinkStatus->unk_03; + gUnknown_03004140.unk_14 = gRfuLinkStatus->linkLossSlotFlag; gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 17; for (gUnknown_03004140.unk_10 = 0; gUnknown_03004140.unk_10 < 4; gUnknown_03004140.unk_10 ++) { - if ((gRfuLinkStatus->unk_03 >> gUnknown_03004140.unk_10) & 1) + if ((gRfuLinkStatus->linkLossSlotFlag >> gUnknown_03004140.unk_10) & 1) { break; } @@ -1092,7 +1092,7 @@ static void sub_800C7B4(u16 r8, u16 r6) else { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gRfuLinkStatus->unk_03); + sub_800D334(gRfuLinkStatus->linkLossSlotFlag); gUnknown_03004140.unk_1e = 0x33; } gUnknown_03004140.unk_34[gUnknown_03004140.unk_10] = 0; @@ -1126,7 +1126,7 @@ static void sub_800C7B4(u16 r8, u16 r6) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; sub_800D610(); - sub_800D334(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + sub_800D334(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); gUnknown_03004140.unk_14 = sp0; sub_800D30C(0x25, 0x01); } @@ -1148,11 +1148,11 @@ static void sub_800C7B4(u16 r8, u16 r6) rfu_REQ_RFUStatus(); rfu_waitREQComplete(); rfu_getRFUStatus(&sp0); - if (sp0 == 0 && gRfuLinkStatus->unk_00 == 0) + if (sp0 == 0 && gRfuLinkStatus->parentChild == 0) { stwiRecvBuffer = rfu_getSTWIRecvBuffer(); - stwiRecvBuffer[4] = gRfuLinkStatus->unk_02; - stwiRecvBuffer[5] = 1; + stwiRecvBuffer->rxPacketAlloc.rfuPacket8.data[4] = gRfuLinkStatus->connSlotFlag; + stwiRecvBuffer->rxPacketAlloc.rfuPacket8.data[5] = 1; sub_800C36C(0x29); r6 = 0; } @@ -1163,7 +1163,7 @@ static void sub_800C7B4(u16 r8, u16 r6) if (r6 == 0) { stwiRecvBuffer = rfu_getSTWIRecvBuffer(); - gUnknown_03004140.unk_14 = stwiRecvBuffer[8]; + gUnknown_03004140.unk_14 = stwiRecvBuffer->rxPacketAlloc.rfuPacket8.data[8]; sub_800D358(gUnknown_03004140.unk_14); if (gUnknown_03004140.unk_30) { @@ -1191,7 +1191,7 @@ static void sub_800C7B4(u16 r8, u16 r6) gUnknown_03004140.unk_00 &= ~gUnknown_03004140.unk_14; if (gUnknown_03004140.unk_07) { - if (gRfuLinkStatus->unk_00 == 0xFF) + if (gRfuLinkStatus->parentChild == 0xFF) { if (gUnknown_03004140.unk_07 == 8) { @@ -1206,7 +1206,7 @@ static void sub_800C7B4(u16 r8, u16 r6) } } } - if (gRfuLinkStatus->unk_00 == 0xFF) + if (gRfuLinkStatus->parentChild == 0xFF) { if (gUnknown_03004140.unk_04 == 0) { @@ -1221,7 +1221,7 @@ static void sub_800C7B4(u16 r8, u16 r6) break; case 38: sub_800D20C(); - if (gRfuLinkStatus->unk_00 != 0xFF) + if (gRfuLinkStatus->parentChild != 0xFF) { sub_800D30C(0x50, 0x00); } @@ -1246,8 +1246,8 @@ static void sub_800C7B4(u16 r8, u16 r6) { if (r8 == 28 && r6 != 0 && gUnknown_03004140.unk_07 == 4) { - gRfuLinkStatus->unk_00 = 1; - gRfuLinkStatus->unk_02 = 15; + gRfuLinkStatus->parentChild = 1; + gRfuLinkStatus->connSlotFlag = 15; sub_800D334(15); rfu_waitREQComplete(); return; @@ -1279,7 +1279,7 @@ static void sub_800CEB0(u16 r6) r7 = gUnknown_03004140.unk_0e; gUnknown_03004140.unk_0e = 0; gUnknown_03004140.unk_0f = 1; - if (gRfuLinkStatus->unk_00 == 0) + if (gRfuLinkStatus->parentChild == 0) { sub_800C36C(r6); if (gUnknown_03004140.unk_02 != 1) @@ -1321,8 +1321,8 @@ static void sub_800CF34(void) if (gUnknown_03004140.unk_04 == 5 || gUnknown_03004140.unk_04 == 6 || gUnknown_03004140.unk_04 == 7 || gUnknown_03004140.unk_04 == 8) { - flags = ((gRfuLinkStatus->unk_02 ^ gUnknown_03004140.unk_0c) & gRfuLinkStatus->unk_02) & ~gRfuLinkStatus->unk_07; - gUnknown_03004140.unk_0c = gRfuLinkStatus->unk_02; + flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_03004140.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; + gUnknown_03004140.unk_0c = gRfuLinkStatus->connSlotFlag; if (flags) { gUnknown_03004140.unk_14 = flags; @@ -1340,14 +1340,14 @@ static void sub_800CF34(void) } else if (gUnknown_03004140.unk_24 & r4) { - if (gRfuSlotStatusNI[i]->unk_34 == 0x46) + if (gRfuSlotStatusNI[i]->recv.state == 0x46) { - if (gRfuSlotStatusNI[i]->unk_61 == 1) + if (gRfuSlotStatusNI[i]->recv.dataType == 1) { r5 = 0x02; for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (gRfuLinkStatus->unk_14[i].unk_04 == *ptr) + if (gRfuLinkStatus->partner[i].serialNo == *ptr) { gUnknown_03004140.unk_00 |= r4; gUnknown_03004140.unk_01++; @@ -1386,7 +1386,7 @@ static void sub_800CF34(void) if (gUnknown_03004140.unk_0d) { r5 = 0x01; - if (gRfuLinkStatus->unk_06 && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) + if (gRfuLinkStatus->sendSlotUNIFlag && ((gUnknown_03004140.unk_03 & gUnknown_03004140.unk_00) != gUnknown_03004140.unk_00)) { r5 = 0x00; } @@ -1434,7 +1434,7 @@ static void sub_800D158(void) REG_IME = 0; if (gUnknown_03004140.unk_04 == 15) { - if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_03004140.unk_10]->unk_0 == 0x27) + if (--gUnknown_03004140.unk_28[gUnknown_03004140.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_03004140.unk_10]->send.state == 0x27) { sub_800D630(); gUnknown_03004140.unk_04 = 24; @@ -1453,7 +1453,7 @@ static void sub_800D158(void) if (gUnknown_03004140.unk_02 == 0) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; - sub_800D334(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + sub_800D334(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); gUnknown_03004140.unk_14 = 0; sub_800D30C(0x25, 0x01); } @@ -1462,7 +1462,7 @@ static void sub_800D158(void) static void sub_800D20C(void) { - if (gUnknown_03004140.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_03004140.unk_10]->unk_0 == 0x26) + if (gUnknown_03004140.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_03004140.unk_10]->send.state == 0x26) { gUnknown_03004140.unk_04 = gUnknown_03004140.unk_05 = 0; rfu_clearSlot(4, gUnknown_03004140.unk_10); @@ -1490,11 +1490,11 @@ static u8 sub_800D294(void) const u16 *ptr; u8 flags = 0x00; - for (i = 0; i < gRfuLinkStatus->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { for (ptr = gUnknown_03004140.unk_20; *ptr != 0xFFFF; ptr++) { - if (gRfuLinkStatus->unk_14[i].unk_04 == *ptr) + if (gRfuLinkStatus->partner[i].serialNo == *ptr) { flags |= (1 << i); } @@ -1525,34 +1525,34 @@ static void sub_800D358(u8 a0) { u8 i; - if (gRfuLinkStatus->unk_04) + if (gRfuLinkStatus->sendSlotNIFlag) { for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_0 & 0x8000 && gRfuSlotStatusNI[i]->unk_1a & a0) + if (gRfuSlotStatusNI[i]->send.state & 0x8000 && gRfuSlotStatusNI[i]->send.bmSlot & a0) { - rfu_changeSendTarget(0x20, i, gRfuSlotStatusNI[i]->unk_1a & ~a0); + rfu_changeSendTarget(0x20, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0); } } } - if (gRfuLinkStatus->unk_05) + if (gRfuLinkStatus->recvSlotNIFlag) { for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_34 & 0x8000 && gRfuSlotStatusNI[i]->unk_4e & a0) + if (gRfuSlotStatusNI[i]->recv.state & 0x8000 && gRfuSlotStatusNI[i]->recv.bmSlot & a0) { rfu_NI_stopReceivingData(i); } } } - if (gRfuLinkStatus->unk_06) + if (gRfuLinkStatus->sendSlotUNIFlag) { - gRfuLinkStatus->unk_06 &= ~a0; + gRfuLinkStatus->sendSlotUNIFlag &= ~a0; for (i = 0; i < 4; i++) { - if (gRfuSlotStatusUNI[i]->unk_0 == 0x8024 && a0 & gRfuSlotStatusUNI[i]->unk_3) + if (gRfuSlotStatusUNI[i]->send.state == 0x8024 && a0 & gRfuSlotStatusUNI[i]->send.bmSlot) { - gRfuSlotStatusUNI[i]->unk_3 &= ~a0; + gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0; } } } @@ -1566,32 +1566,32 @@ static void sub_800D434(void) if (gUnknown_03004140.unk_18) { - if (gRfuLinkStatus->unk_04) + if (gRfuLinkStatus->sendSlotNIFlag) { for (i = 0; i < 4; i ++) { - if (gRfuSlotStatusNI[i]->unk_0 & 0x8000) + if (gRfuSlotStatusNI[i]->send.state & 0x8000) { flags = 0; for (j = 0; j < 4; j++) { - if ((gRfuSlotStatusNI[i]->unk_1a >> j) & 1 && gRfuSlotStatusNI[j]->unk_2 > gUnknown_03004140.unk_18) + if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > gUnknown_03004140.unk_18) { flags |= (1 << j); } if (flags) { - rfu_changeSendTarget(0x20, i, flags ^ gRfuSlotStatusNI[i]->unk_1a); + rfu_changeSendTarget(0x20, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot); } } } } } - if (gRfuLinkStatus->unk_05) + if (gRfuLinkStatus->recvSlotNIFlag) { for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_34 & 0x8000 && gRfuSlotStatusNI[i]->unk_36 > gUnknown_03004140.unk_18) + if (gRfuSlotStatusNI[i]->recv.state & 0x8000 && gRfuSlotStatusNI[i]->recv.failCounter > gUnknown_03004140.unk_18) { rfu_NI_stopReceivingData(i); } @@ -1628,7 +1628,7 @@ u8 sub_800D550(u8 a0, u16 a1) u8 sub_800D594(u16 a0) { - if (gRfuLinkStatus->unk_04 | gRfuLinkStatus->unk_05) + if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) { gUnknown_03004140.unk_14 = 6; sub_800D30C(0xf3, 0x01); @@ -2049,17 +2049,17 @@ void ASCIIToPkmnStr(u8 *q1, const u8 *q2) u8 sub_800DD1C(u8 maxFlags) { u8 flagCount = 0; - u32 flags = gRfuLinkStatus->unk_02; + u32 flags = gRfuLinkStatus->connSlotFlag; u8 i; - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) { if (maxFlags == flagCount + 1) - return gRfuLinkStatus->unk_0a[i]; + return gRfuLinkStatus->strength[i]; flagCount++; } } @@ -2069,7 +2069,7 @@ u8 sub_800DD1C(u8 maxFlags) for (i = 0; i < 4; flags >>= 1, i++) { if (flags & 1) - return gRfuLinkStatus->unk_0a[i]; + return gRfuLinkStatus->strength[i]; } } return 0; @@ -2177,10 +2177,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) if (gUnknown_03004140.unk_06 == 1) { retVal = TRUE; - if (sub_8010454(gRfuLinkStatus->unk_14[idx].unk_04) && ((gRfuLinkStatus->unk_07 >> idx) & 1)) + if (sub_8010454(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1)) { - memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); - memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); } else { @@ -2191,10 +2191,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) else { retVal = FALSE; - if (sub_8010454(gRfuLinkStatus->unk_14[idx].unk_04)) + if (sub_8010454(gRfuLinkStatus->partner[idx].serialNo)) { - memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); - memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, PLAYER_NAME_LENGTH + 1); + memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->partner[idx].uname, PLAYER_NAME_LENGTH + 1); } else { @@ -2208,10 +2208,10 @@ bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) { bool8 retVal = FALSE; - if (gRfuLinkStatus->unk_14[idx].unk_04 == 0x7F7D) + if (gRfuLinkStatus->partner[idx].serialNo == 0x7F7D) { - memcpy(buff1, gRfuLinkStatus->unk_14[idx].gname, 0xD); - memcpy(buff2, gRfuLinkStatus->unk_14[idx].uname, 8); + memcpy(buff1, gRfuLinkStatus->partner[idx].gname, 0xD); + memcpy(buff2, gRfuLinkStatus->partner[idx].uname, 8); retVal = TRUE; } else @@ -2237,7 +2237,7 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) x = 0xE7; y = 0x08; } - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { sprId = CreateSprite(&sWirelessStatusIndicatorSpriteTemplate, x, y, 0); gSprites[sprId].data[7] = 0x1234; @@ -2278,12 +2278,12 @@ void LoadWirelessStatusIndicatorSpriteGfx(void) u8 sub_800E124(void) { u8 i; - u8 flags = gRfuLinkStatus->unk_02; + u8 flags = gRfuLinkStatus->connSlotFlag; for (i = 0; i < 4; i++) { if (flags & 1) { - return gRfuLinkStatus->unk_0a[i]; + return gRfuLinkStatus->strength[i]; } flags >>= 1; } @@ -2307,7 +2307,7 @@ void sub_800E174(void) struct Sprite *sprite = &gSprites[gWirelessStatusIndicatorSpriteId]; u8 signalStrength = 255; u8 i = 0; - if (gRfuLinkStatus->unk_00 == 1) + if (gRfuLinkStatus->parentChild == 1) { for (i = 0; i < GetLinkPlayerCount() - 1; i++) { @@ -2530,7 +2530,7 @@ void sub_800E6D0(void) void sub_800E700(void) { - if (!rfu_initializeAPI(gUnknown_03004140.unk_50, sizeof gUnknown_03004140.unk_50, gIntrTable + 1, TRUE)) + if (!rfu_initializeAPI((void *)gUnknown_03004140.unk_50, sizeof gUnknown_03004140.unk_50, gIntrTable + 1, TRUE)) { gLinkType = 0; sub_800AAF4(); @@ -2787,7 +2787,7 @@ void sub_800ED34(u16 unused) } rfu_REQ_recvData(); rfu_waitREQComplete(); - if (gRfuSlotStatusUNI[gUnknown_03005000.unk_c3e]->unk_12) + if (gRfuSlotStatusUNI[gUnknown_03005000.unk_c3e]->recv.newDataFlag) { gUnknown_03005000.unk_cd0++; sub_800D7D8(&gUnknown_03005000.unk_124, gUnknown_03005000.unk_c3f); @@ -2858,7 +2858,7 @@ bool8 sub_800EE94(void) bool32 sub_800EEBC(void) { - if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3d].unk_00, 240)) + if (gUnknown_03005000.unk_04 == 7 && !sub_800C12C(gRfuLinkStatus->partner[gUnknown_03005000.unk_c3d].id, 240)) { gUnknown_03005000.unk_04 = 9; return TRUE; @@ -2971,7 +2971,7 @@ bool32 IsRfuRecvQueueEmpty(void) s32 i; s32 j; - if (gRfuLinkStatus->unk_06 == 0) + if (gRfuLinkStatus->sendSlotUNIFlag == 0) { return FALSE; } @@ -2999,7 +2999,7 @@ bool32 sub_800F0F8(void) else { gUnknown_03005000.unk_cdb = 0; - if ((gUnknown_03005000.unk_ce2 & gRfuLinkStatus->unk_02) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gRfuLinkStatus->unk_02)) + if ((gUnknown_03005000.unk_ce2 & gRfuLinkStatus->connSlotFlag) == gUnknown_03005000.unk_ce2 && (gUnknown_03005000.unk_ce2 & gRfuLinkStatus->connSlotFlag)) { if (!gUnknown_03005000.unk_cdc) { @@ -3119,7 +3119,7 @@ bool32 sub_800F1E0(void) gUnknown_03005000.unk_0e = 0; } retval = gUnknown_03005000.unk_cdc; - return gRfuLinkStatus->unk_06 ? retval & 1 : FALSE; + return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE; } void sub_800F498(u16 *a0, u8 *a1) @@ -3162,7 +3162,7 @@ bool32 sub_800F4F0(void) sub_800F86C(0); if (gUnknown_03004140.unk_02 == 0 && gUnknown_03005000.unk_ce4) { - rfu_REQ_disconnect(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); switchval = sub_8011A74(); if (switchval != 1 && switchval != 6 && switchval != 9) @@ -3305,7 +3305,7 @@ static void sub_800F86C(u8 unused) return; // fallthrough case 0x7700: - if (gRfuLinkStatus->unk_00 == 0) + if (gRfuLinkStatus->parentChild == 0) { gUnknown_03005000.playerCount = gRecvCmds[i][1]; gUnknown_03005000.unk_cce = sub_800F74C((u8 *)(gRecvCmds[i] + 2)); @@ -3353,7 +3353,7 @@ static void sub_800F86C(u8 unused) { if (gReceivedRemoteLinkPlayers != 0) { - if (gRecvCmds[i][1] & gRfuLinkStatus->unk_02) + if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag) { gReceivedRemoteLinkPlayers = 0; sub_800D630(); @@ -3611,7 +3611,7 @@ void sub_801011C(void) void sub_8010148(void) { - rfu_REQ_disconnect(gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03); + rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); sub_801011C(); } @@ -3631,7 +3631,7 @@ void LinkRfu_FatalError(void) { sub_800D630(); gUnknown_03005000.unk_ce4 = 1; - gUnknown_03005000.unk_ce3 = gRfuLinkStatus->unk_02 | gRfuLinkStatus->unk_03; + gUnknown_03005000.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; } void sub_80101CC(void) @@ -3821,7 +3821,7 @@ bool8 sub_8010540(void) { if (gUnknown_03005000.unk_cd1[i] < 5 || gUnknown_03005000.unk_cd1[i] > 6) { - if (gRfuSlotStatusNI[i]->unk_34 == 0x46 || gRfuSlotStatusNI[i]->unk_34 == 0x48) + if (gRfuSlotStatusNI[i]->recv.state == 0x46 || gRfuSlotStatusNI[i]->recv.state == 0x48) { if (gUnknown_03005000.unk_cd5[i] == 8) { @@ -3833,7 +3833,7 @@ bool8 sub_8010540(void) } } - else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) + else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x47) rfu_clearSlot(8, i); { @@ -3898,7 +3898,7 @@ u32 sub_8010714(u16 a0, const u8 *a1) u8 r0 = sub_8011CE4(a1, a0); if (r0 == 0xFF) return 2; - if (gRfuSlotStatusNI[r0]->unk_0 == 0) + if (gRfuSlotStatusNI[r0]->send.state == 0) return 1; return 0; } @@ -3910,7 +3910,7 @@ void sub_8010750(void) sub_8010540(); for (i = 0; i < 4; i++) { - if (gRfuSlotStatusNI[i]->unk_0 == 0x26 || gRfuSlotStatusNI[i]->unk_0 == 0x27) + if (gRfuSlotStatusNI[i]->send.state == 0x26 || gRfuSlotStatusNI[i]->send.state == 0x27) { if (gUnknown_03005000.unk_cd5[i] == 10) gUnknown_03005000.unk_cd5[i] = 11; @@ -3924,16 +3924,16 @@ s32 sub_80107A0(void) s32 retval = 0; if (gUnknown_03005000.unk_c85 == 8) { - if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_0 == 0x26 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_0 == 0x27) + if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->send.state == 0x26 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->send.state == 0x27) rfu_clearSlot(4, gUnknown_03005000.unk_c3e); } - if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x46 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x48) + if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x46 || gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x48) { rfu_clearSlot(8, gUnknown_03005000.unk_c3e); sub_8011A64(gUnknown_03005000.unk_c86, 0); retval = gUnknown_03005000.unk_c86; } - else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->unk_34 == 0x47) + else if (gRfuSlotStatusNI[gUnknown_03005000.unk_c3e]->recv.state == 0x47) { rfu_clearSlot(8, gUnknown_03005000.unk_c3e); retval = 6; @@ -4370,7 +4370,7 @@ void sub_801120C(u8 a0, u8 unused1) { if ((gUnknown_03004140.unk_14 >> i) & 1) { - struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->unk_14[i].gname; + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->partner[i].gname; if (structPtr->unk_0a_0 == sub_800F7DC()->unk_0a_0) { gUnknown_03005000.unk_cd1[i] = 0; @@ -4528,7 +4528,7 @@ u8 sub_8011628(s32 a0) { if ((a0 >> i) & 1) { - struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->unk_14[i].gname; + struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)gRfuLinkStatus->partner[i].gname; if (structPtr->unk_0a_0 == 0x45) ret |= (1 << i); } @@ -4629,7 +4629,7 @@ void sub_8011674(u8 a0, u8 unused1) break; case 0x32: gUnknown_03005000.unk_f0 = 3; - if (gRfuLinkStatus->unk_00 == 0) + if (gRfuLinkStatus->parentChild == 0) gUnknown_03005000.unk_c3c = 1; break; case 0x30: @@ -4654,7 +4654,7 @@ void sub_8011674(u8 a0, u8 unused1) sub_800C27C(0); } - if (gRfuLinkStatus->unk_00 == 0xFF && gUnknown_03004140.unk_07 == 0 && FuncIsActiveTask(sub_800EB44) == TRUE) + if (gRfuLinkStatus->parentChild == 0xFF && gUnknown_03004140.unk_07 == 0 && FuncIsActiveTask(sub_800EB44) == TRUE) gUnknown_03005000.unk_04 = 0x11; sub_8011A64(2, a0); @@ -4825,13 +4825,13 @@ u8 sub_8011CE4(const u8 *a0, u16 a1) for (i = 0; i < 4; i++) { - u16 trainerId = ReadU16(gRfuLinkStatus->unk_14[i].gname + 2); - if (sub_8010454(gRfuLinkStatus->unk_14[i].unk_04) - && !StringCompare(a0, gRfuLinkStatus->unk_14[i].uname) + u16 trainerId = ReadU16(gRfuLinkStatus->partner[i].gname + 2); + if (sub_8010454(gRfuLinkStatus->partner[i].serialNo) + && !StringCompare(a0, gRfuLinkStatus->partner[i].uname) && a1 == trainerId) { ret = i; - if (gRfuLinkStatus->unk_14[i].unk_02 != 0xFF) + if (gRfuLinkStatus->partner[i].slot != 0xFF) break; } } @@ -4911,7 +4911,7 @@ void sub_8011EF4(u8 taskId) u8 id = sub_8011CE4((u8*)data, ReadU16(&data[8])); if (id != 0xFF) { - if (gRfuLinkStatus->unk_14[id].unk_02 != 0xFF) + if (gRfuLinkStatus->partner[id].slot != 0xFF) { gUnknown_03005000.unk_c3d = id; if (sub_800EEBC()) @@ -5006,9 +5006,9 @@ void sub_801209C(u8 taskId) u8 id = sub_8011CE4(gUnknown_03005000.playerName, trainerId); if (id != 0xFF) { - if (!sub_801200C(gTasks[taskId].data[1], (void *)gRfuLinkStatus->unk_14[id].gname)) + if (!sub_801200C(gTasks[taskId].data[1], (void *)gRfuLinkStatus->partner[id].gname)) { - if (gRfuLinkStatus->unk_14[id].unk_02 != 0xFF && !sub_800C12C(gRfuLinkStatus->unk_14[id].unk_00, 0x5A)) + if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_800C12C(gRfuLinkStatus->partner[id].id, 0x5A)) { gUnknown_03005000.unk_04 = 0xA; DestroyTask(taskId); @@ -5081,17 +5081,17 @@ void sub_801229C(void) s32 i, j; nullsub_13(GetBlockReceivedStatus(), 0x1C, 0x13, 2); - nullsub_13(gRfuLinkStatus->unk_02, 0x14, 1, 1); - nullsub_13(gRfuLinkStatus->unk_03, 0x17, 1, 1); + nullsub_13(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); + nullsub_13(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); if (gUnknown_03005000.unk_0c == 1) { for (i = 0; i < 4; i++) { - if ((gRfuLinkStatus->unk_07 >> i) & 1) + if ((gRfuLinkStatus->getNameFlag >> i) & 1) { - nullsub_13(gRfuLinkStatus->unk_14[i].unk_04, 1, i + 3, 4); - nullsub_5((void*)gRfuLinkStatus->unk_14[i].gname, 6, i + 3); - nullsub_5(gRfuLinkStatus->unk_14[i].uname, 0x16, i + 3); + nullsub_13(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + nullsub_5((void*)gRfuLinkStatus->partner[i].gname, 6, i + 3); + nullsub_5(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); } } for (i = 0; i < 4; i++) @@ -5103,7 +5103,7 @@ void sub_801229C(void) } nullsub_5(gUnknown_082ED868, 1, 0xF); } - else if (gRfuLinkStatus->unk_02 != 0 && gRfuLinkStatus->unk_07 != 0) + else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0) { for (i = 0; i < 4; i++) { @@ -5111,19 +5111,19 @@ void sub_801229C(void) nullsub_5(gUnknown_082ED84B, 6, i + 3); nullsub_5(gUnknown_082ED85B, 0x16, i + 3); } - nullsub_13(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].unk_04, 1, 3, 4); - nullsub_5((void*)gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].gname, 6, 3); - nullsub_5(gRfuLinkStatus->unk_14[gUnknown_03005000.unk_c3e].uname, 0x16, 3); + nullsub_13(gRfuLinkStatus->partner[gUnknown_03005000.unk_c3e].serialNo, 1, 3, 4); + nullsub_5((void*)gRfuLinkStatus->partner[gUnknown_03005000.unk_c3e].gname, 6, 3); + nullsub_5(gRfuLinkStatus->partner[gUnknown_03005000.unk_c3e].uname, 0x16, 3); } else { - for (i = 0; i < gRfuLinkStatus->unk_08; i++) + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) { - if (gRfuLinkStatus->unk_14[i].unk_02 != 0xFF) + if (gRfuLinkStatus->partner[i].slot != 0xFF) { - nullsub_13(gRfuLinkStatus->unk_14[i].unk_04, 1, i + 3, 4); - nullsub_13(gRfuLinkStatus->unk_14[i].unk_00, 6, i + 3, 4); - nullsub_5(gRfuLinkStatus->unk_14[i].uname, 0x16, i + 3); + nullsub_13(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + nullsub_13(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); + nullsub_5(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); } } for (; i < 4; i++) diff --git a/src/trade.c b/src/trade.c index 9abc614280..bd97471e38 100644 --- a/src/trade.c +++ b/src/trade.c @@ -254,7 +254,7 @@ static bool32 sub_80771BC(void) { if (gUnknown_02022C2C == 29) { - if (gRfuSlotStatusNI[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0) + if (gRfuSlotStatusNI[sub_800E87C(gUnknown_03004140.unk_00)]->send.state == 0) return TRUE; else return FALSE; diff --git a/src/union_room.c b/src/union_room.c index 9cb3bec797..6098ce3496 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4077,7 +4077,7 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) StringCopy(arg3->field_58 + 0x10, gSpeciesNames[sUnionRoomTrade.playerSpecies]); for (i = 0; i < 4; i++) { - if (gRfuLinkStatus->unk_14[i].unk_04 == 2) + if (gRfuLinkStatus->partner[i].serialNo == 2) { ConvertIntToDecimalStringN(arg3->field_58 + 0x20, arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3); StringCopy(arg3->field_58 + 0x30, gSpeciesNames[arg2[1]]); From 46b00b11d4f62d866f55247f291678c8366498bd Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 16 Jan 2020 07:21:54 +0800 Subject: [PATCH 3/5] match all the functions --- asm/librfu.s | 6487 ----------------------------------------- include/gba/io_reg.h | 2 +- include/gba/syscall.h | 2 + ld_script.txt | 2 +- src/agb_flash.c | 2 +- src/librfu_rfu.c | 2257 +++++++++++++- src/librfu_sio32id.c | 167 ++ 7 files changed, 2371 insertions(+), 6548 deletions(-) delete mode 100644 asm/librfu.s create mode 100644 src/librfu_sio32id.c diff --git a/asm/librfu.s b/asm/librfu.s deleted file mode 100644 index 28cc015943..0000000000 --- a/asm/librfu.s +++ /dev/null @@ -1,6487 +0,0 @@ - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start rfu_initializeAPI -rfu_initializeAPI: @ 82E3EB4 - push {r4-r7,lr} - adds r4, r0, 0 - mov r12, r2 - lsls r1, 16 - lsrs r2, r1, 16 - lsls r3, 24 - lsrs r7, r3, 24 - movs r0, 0xF0 - lsls r0, 20 - ands r0, r4 - movs r1, 0x80 - lsls r1, 18 - cmp r0, r1 - bne _082E3ED4 - cmp r7, 0 - bne _082E3EDC -_082E3ED4: - movs r0, 0x3 - ands r0, r4 - cmp r0, 0 - beq _082E3EE0 -_082E3EDC: - movs r0, 0x2 - b _082E3FB8 -_082E3EE0: - cmp r7, 0 - beq _082E3EEC - ldr r3, =0x00000e64 - b _082E3EEE - .align 2, 0 - .pool -_082E3EEC: - ldr r3, =0x00000504 -_082E3EEE: - cmp r2, r3 - bcs _082E3EFC - movs r0, 0x1 - b _082E3FB8 - .align 2, 0 - .pool -_082E3EFC: - ldr r0, =gRfuLinkStatus - str r4, [r0] - ldr r1, =gRfuStatic - adds r0, r4, 0 - adds r0, 0xB4 - str r0, [r1] - ldr r1, =gRfuFixed - adds r0, 0x28 - str r0, [r1] - ldr r2, =gRfuSlotStatusNI - movs r1, 0xDE - lsls r1, 1 - adds r0, r4, r1 - str r0, [r2] - ldr r1, =gRfuSlotStatusUNI - movs r3, 0xDF - lsls r3, 2 - adds r0, r4, r3 - str r0, [r1] - movs r5, 0x1 - adds r6, r2, 0 - adds r4, r1, 0 -_082E3F28: - lsls r2, r5, 2 - adds r3, r2, r6 - subs r1, r5, 0x1 - lsls r1, 2 - adds r0, r1, r6 - ldr r0, [r0] - adds r0, 0x70 - str r0, [r3] - adds r2, r4 - adds r1, r4 - ldr r0, [r1] - adds r0, 0x1C - str r0, [r2] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _082E3F28 - ldr r0, =gRfuFixed - ldr r1, [r0] - adds r1, 0xDC - ldr r4, =gRfuSlotStatusUNI - ldr r0, [r4, 0xC] - adds r0, 0x1C - str r0, [r1] - mov r1, r12 - adds r2, r7, 0 - bl STWI_init_all - bl rfu_STC_clearAPIVariables - movs r5, 0 - ldr r3, =gRfuSlotStatusNI - movs r2, 0 -_082E3F6C: - lsls r1, r5, 2 - adds r0, r1, r3 - ldr r0, [r0] - str r2, [r0, 0x68] - str r2, [r0, 0x6C] - adds r1, r4 - ldr r0, [r1] - str r2, [r0, 0x14] - str r2, [r0, 0x18] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _082E3F6C - ldr r4, =sub_82E53F4 - movs r0, 0x2 - negs r0, r0 - ands r4, r0 - ldr r1, =gRfuFixed - ldr r0, [r1] - adds r2, r0, 0 - adds r2, 0x8 - movs r3, 0x2F - ldr r5, =0x0000ffff -_082E3F9C: - ldrh r0, [r4] - strh r0, [r2] - adds r4, 0x2 - adds r2, 0x2 - subs r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r5 - bne _082E3F9C - ldr r1, [r1] - adds r0, r1, 0 - adds r0, 0x9 - str r0, [r1, 0x4] - movs r0, 0 -_082E3FB8: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_initializeAPI - - thumb_func_start rfu_STC_clearAPIVariables -rfu_STC_clearAPIVariables: @ 82E3FDC - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, =0x04000208 - ldrh r0, [r1] - adds r7, r0, 0 - movs r6, 0 - strh r6, [r1] - ldr r5, =gRfuStatic - ldr r1, [r5] - ldrb r4, [r1] - mov r0, sp - strh r6, [r0] - ldr r2, =0x01000014 - bl CpuSet - ldr r2, [r5] - movs r0, 0x8 - ands r4, r0 - movs r1, 0 - strb r4, [r2] - mov r0, sp - adds r0, 0x2 - strh r1, [r0] - ldr r4, =gRfuLinkStatus - ldr r1, [r4] - ldr r2, =0x0100005a - bl CpuSet - ldr r1, [r4] - movs r0, 0x4 - strb r0, [r1, 0x9] - ldr r0, [r5] - strb r6, [r0, 0x6] - ldr r1, [r4] - movs r0, 0xFF - strb r0, [r1] - bl rfu_clearAllSlot - ldr r0, [r5] - strb r6, [r0, 0x9] - movs r2, 0 - movs r3, 0 -_082E4030: - ldr r0, [r5] - lsls r1, r2, 1 - adds r0, 0x12 - adds r0, r1 - strh r3, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _082E4030 - ldr r0, =0x04000208 - strh r7, [r0] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_clearAPIVariables - - thumb_func_start rfu_REQ_PARENT_resumeRetransmitAndChange -rfu_REQ_PARENT_resumeRetransmitAndChange: @ 82E4064 - push {lr} - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_ResumeRetransmitAndChangeREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_PARENT_resumeRetransmitAndChange - - thumb_func_start rfu_UNI_PARENT_getDRAC_ACK -rfu_UNI_PARENT_getDRAC_ACK: @ 82E4078 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strb r0, [r4] - ldr r5, =gRfuLinkStatus - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0x1 - beq _082E4094 - movs r0, 0xC0 - lsls r0, 2 - b _082E40BA - .align 2, 0 - .pool -_082E4094: - bl rfu_getSTWIRecvBuffer - adds r1, r0, 0 - ldrb r0, [r1] - cmp r0, 0x28 - beq _082E40A4 - cmp r0, 0x36 - bne _082E40B8 -_082E40A4: - ldrb r0, [r1, 0x1] - cmp r0, 0 - bne _082E40B0 - ldr r0, [r5] - ldrb r0, [r0, 0x2] - b _082E40B2 -_082E40B0: - ldrb r0, [r1, 0x4] -_082E40B2: - strb r0, [r4] - movs r0, 0 - b _082E40BA -_082E40B8: - movs r0, 0x10 -_082E40BA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end rfu_UNI_PARENT_getDRAC_ACK - - thumb_func_start rfu_setTimerInterrupt -rfu_setTimerInterrupt: @ 82E40C0 - push {lr} - adds r2, r0, 0 - adds r0, r1, 0 - lsls r2, 24 - lsrs r2, 24 - adds r1, r2, 0 - bl STWI_init_timer - pop {r0} - bx r0 - thumb_func_end rfu_setTimerInterrupt - - thumb_func_start rfu_getSTWIRecvBuffer -rfu_getSTWIRecvBuffer: @ 82E40D4 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - bx lr - .align 2, 0 - .pool - thumb_func_end rfu_getSTWIRecvBuffer - - thumb_func_start rfu_setMSCCallback -rfu_setMSCCallback: @ 82E40E4 - push {lr} - bl STWI_set_Callback_S - pop {r0} - bx r0 - thumb_func_end rfu_setMSCCallback - - thumb_func_start rfu_setREQCallback -rfu_setREQCallback: @ 82E40F0 - push {lr} - adds r1, r0, 0 - ldr r0, =gRfuFixed - ldr r0, [r0] - str r1, [r0] - negs r0, r1 - orrs r0, r1 - lsrs r0, 31 - bl rfu_enableREQCallback - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_setREQCallback - - thumb_func_start rfu_enableREQCallback -rfu_enableREQCallback: @ 82E410C - push {lr} - lsls r0, 24 - cmp r0, 0 - beq _082E4124 - ldr r0, =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0x8 - orrs r0, r1 - b _082E412E - .align 2, 0 - .pool -_082E4124: - ldr r0, =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0xF7 - ands r0, r1 -_082E412E: - strb r0, [r2] - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_enableREQCallback - - thumb_func_start rfu_STC_REQ_callback -rfu_STC_REQ_callback: @ 82E4138 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - ldr r0, =rfu_CB_defaultCallback - bl STWI_set_Callback_M - ldr r0, =gRfuStatic - ldr r0, [r0] - strh r4, [r0, 0x1C] - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _082E4166 - ldr r0, =gRfuFixed - ldr r0, [r0] - ldr r2, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl _call_via_r2 -_082E4166: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_REQ_callback - - thumb_func_start rfu_CB_defaultCallback -rfu_CB_defaultCallback: @ 82E4178 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r3, r1, 16 - cmp r0, 0xFF - bne _082E41D4 - ldr r0, =gRfuStatic - ldr r0, [r0] - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _082E41A2 - ldr r0, =gRfuFixed - ldr r0, [r0] - ldr r2, [r0] - movs r0, 0xFF - adds r1, r3, 0 - bl _call_via_r2 -_082E41A2: - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - adds r5, r0, 0 - orrs r5, r1 - movs r4, 0 -_082E41B0: - adds r0, r5, 0 - asrs r0, r4 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _082E41C2 - adds r0, r4, 0 - bl rfu_STC_removeLinkData -_082E41C2: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _082E41B0 - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1] -_082E41D4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_defaultCallback - - thumb_func_start rfu_waitREQComplete -rfu_waitREQComplete: @ 82E41E8 - push {lr} - bl STWI_poll_CommandEnd - ldr r0, =gRfuStatic - ldr r0, [r0] - ldrh r0, [r0, 0x1C] - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_waitREQComplete - - thumb_func_start rfu_REQ_RFUStatus -rfu_REQ_RFUStatus: @ 82E41FC - push {lr} - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_RFUStatus - - thumb_func_start rfu_getRFUStatus -rfu_getRFUStatus: @ 82E4210 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, =gRfuFixed - ldr r0, [r5] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x93 - beq _082E422C - movs r0, 0x10 - b _082E4246 - .align 2, 0 - .pool -_082E422C: - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _082E4240 - ldr r0, [r5] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - b _082E4242 -_082E4240: - movs r0, 0xFF -_082E4242: - strb r0, [r4] - movs r0, 0 -_082E4246: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end rfu_getRFUStatus - - thumb_func_start rfu_MBOOT_CHILD_inheritanceLinkStatus -rfu_MBOOT_CHILD_inheritanceLinkStatus: @ 82E424C - push {lr} - ldr r2, =str_checkMbootLL - ldr r3, =gDma3Requests + 0xE0 - b _082E4266 - .align 2, 0 - .pool -_082E425C: - ldrb r0, [r3] - adds r3, 0x1 - adds r2, 0x1 - cmp r1, r0 - bne _082E42BC -_082E4266: - ldrb r1, [r2] - cmp r1, 0 - bne _082E425C - movs r2, 0xC0 - lsls r2, 18 - movs r3, 0 - movs r1, 0 -_082E4274: - ldrh r0, [r2] - adds r0, r3, r0 - lsls r0, 16 - lsrs r3, r0, 16 - adds r2, 0x2 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x59 - bls _082E4274 - ldr r0, =gDma3Requests + 0xEA - ldrh r0, [r0] - cmp r3, r0 - bne _082E42BC - movs r0, 0xC0 - lsls r0, 18 - ldr r1, =gRfuLinkStatus - ldr r1, [r1] - movs r2, 0x5A - bl CpuSet - ldr r0, =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r0, 0 - b _082E42BE - .align 2, 0 - .pool -_082E42BC: - movs r0, 0x1 -_082E42BE: - pop {r1} - bx r1 - thumb_func_end rfu_MBOOT_CHILD_inheritanceLinkStatus - - thumb_func_start rfu_REQ_stopMode -rfu_REQ_stopMode: @ 82E42C4 - push {lr} - ldr r0, =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _082E42EC - movs r0, 0x3D - movs r1, 0x6 - bl rfu_STC_REQ_callback - ldr r0, =gSTWIStatus - ldr r1, [r0] - ldrh r0, [r1, 0x12] - movs r0, 0x6 - strh r0, [r1, 0x12] - b _082E4362 - .align 2, 0 - .pool -_082E42EC: - bl AgbRFU_SoftReset - bl rfu_STC_clearAPIVariables - movs r0, 0x8 - bl AgbRFU_checkID - ldr r1, =0x00008001 - cmp r0, r1 - bne _082E4350 - ldr r0, =gSTWIStatus - ldr r0, [r0] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r2, =0x04000100 - adds r1, r0, r2 - movs r0, 0 - str r0, [r1] - movs r0, 0x83 - lsls r0, 16 - str r0, [r1] - ldr r0, [r1] - lsls r0, 16 - ldr r2, =0x0105ffff - ldr r3, =rfu_CB_stopMode - cmp r0, r2 - bhi _082E432A -_082E4322: - ldr r0, [r1] - lsls r0, 16 - cmp r0, r2 - bls _082E4322 -_082E432A: - movs r0, 0 - str r0, [r1] - adds r0, r3, 0 - bl STWI_set_Callback_M - bl STWI_send_StopModeREQ - b _082E4362 - .align 2, 0 - .pool -_082E4350: - ldr r1, =0x04000128 - movs r2, 0x80 - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x3D - movs r1, 0 - bl rfu_STC_REQ_callback -_082E4362: - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_stopMode - - thumb_func_start rfu_CB_stopMode -rfu_CB_stopMode: @ 82E436C - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - cmp r2, 0 - bne _082E4386 - ldr r1, =0x04000128 - movs r4, 0x80 - lsls r4, 6 - adds r0, r4, 0 - strh r0, [r1] -_082E4386: - adds r0, r3, 0 - adds r1, r2, 0 - bl rfu_STC_REQ_callback - pop {r4} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_stopMode - - thumb_func_start rfu_REQBN_softReset_and_checkID -rfu_REQBN_softReset_and_checkID: @ 82E4398 - push {lr} - ldr r0, =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _082E43AC - movs r0, 0x1 - negs r0, r0 - b _082E43CC - .align 2, 0 - .pool -_082E43AC: - bl AgbRFU_SoftReset - bl rfu_STC_clearAPIVariables - movs r0, 0x1E - bl AgbRFU_checkID - adds r2, r0, 0 - cmp r2, 0 - bne _082E43CA - ldr r1, =0x04000128 - movs r3, 0x80 - lsls r3, 6 - adds r0, r3, 0 - strh r0, [r1] -_082E43CA: - adds r0, r2, 0 -_082E43CC: - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_REQBN_softReset_and_checkID - - thumb_func_start rfu_REQ_reset -rfu_REQ_reset: @ 82E43D4 - push {lr} - ldr r0, =rfu_CB_reset - bl STWI_set_Callback_M - bl STWI_send_ResetREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_reset - - thumb_func_start rfu_CB_reset -rfu_CB_reset: @ 82E43E8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r4, r1, 0 - cmp r4, 0 - bne _082E43FC - bl rfu_STC_clearAPIVariables -_082E43FC: - adds r0, r5, 0 - adds r1, r4, 0 - bl rfu_STC_REQ_callback - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_CB_reset - - thumb_func_start rfu_REQ_configSystem -rfu_REQ_configSystem: @ 82E440C - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - lsls r2, 24 - lsrs r6, r2, 24 - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - movs r0, 0x3 - ands r4, r0 - movs r0, 0x3C - orrs r4, r0 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl STWI_send_SystemConfigREQ - cmp r6, 0 - bne _082E444C - ldr r0, =gRfuStatic - ldr r1, [r0] - movs r0, 0x1 - strh r0, [r1, 0x1A] - b _082E4466 - .align 2, 0 - .pool -_082E444C: - ldr r5, =0x04000208 - ldrh r4, [r5] - movs r0, 0 - strh r0, [r5] - movs r0, 0x96 - lsls r0, 2 - adds r1, r6, 0 - bl Div - ldr r1, =gRfuStatic - ldr r1, [r1] - strh r0, [r1, 0x1A] - strh r4, [r5] -_082E4466: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_configSystem - - thumb_func_start rfu_REQ_configGameData -rfu_REQ_configGameData: @ 82E4474 - push {r4-r7,lr} - sub sp, 0x10 - adds r4, r2, 0 - adds r7, r3, 0 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, r1, 16 - adds r5, r4, 0 - mov r0, sp - strb r1, [r0] - lsrs r2, 24 - strb r2, [r0, 0x1] - cmp r6, 0 - beq _082E449A - movs r1, 0x80 - orrs r2, r1 - movs r1, 0 - orrs r2, r1 - strb r2, [r0, 0x1] -_082E449A: - movs r2, 0x2 - ldr r0, =rfu_CB_configGameData - mov r12, r0 -_082E44A0: - mov r3, sp - adds r1, r3, r2 - ldrb r0, [r4] - strb r0, [r1] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xE - bls _082E44A0 - movs r3, 0 - adds r1, r7, 0 - movs r2, 0 -_082E44BA: - ldrb r0, [r1] - adds r0, r3, r0 - lsls r0, 24 - adds r1, 0x1 - lsrs r0, 24 - ldrb r3, [r5] - adds r0, r3 - lsls r0, 24 - lsrs r3, r0, 24 - adds r5, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _082E44BA - mov r1, sp - mvns r0, r3 - strb r0, [r1, 0xF] - cmp r6, 0 - beq _082E44E6 - movs r0, 0 - strb r0, [r1, 0xE] -_082E44E6: - mov r0, r12 - bl STWI_set_Callback_M - mov r0, sp - adds r1, r7, 0 - bl STWI_send_GameConfigREQ - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_configGameData - - thumb_func_start rfu_CB_configGameData -rfu_CB_configGameData: @ 82E4500 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _082E458A - ldr r0, =gSTWIStatus - ldr r0, [r0] - ldr r1, [r0, 0x24] - ldr r0, =gRfuLinkStatus - ldr r6, [r0] - ldrb r2, [r1, 0x4] - adds r5, r6, 0 - adds r5, 0x98 - strh r2, [r5] - ldrb r0, [r1, 0x5] - lsls r3, r0, 8 - orrs r3, r2 - strh r3, [r5] - adds r4, r1, 0x6 - movs r1, 0x80 - lsls r1, 8 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _082E454C - eors r3, r1 - strh r3, [r5] - adds r1, r6, 0 - adds r1, 0x97 - movs r0, 0x1 - b _082E4552 - .align 2, 0 - .pool -_082E454C: - adds r1, r6, 0 - adds r1, 0x97 - movs r0, 0 -_082E4552: - strb r0, [r1] - movs r2, 0 - ldr r3, =gRfuLinkStatus -_082E4558: - ldr r0, [r3] - adds r0, 0x9A - adds r0, r2 - ldrb r1, [r4] - strb r1, [r0] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xC - bls _082E4558 - adds r4, 0x1 - movs r2, 0 - ldr r3, =gRfuLinkStatus -_082E4574: - ldr r0, [r3] - adds r0, 0xA9 - adds r0, r2 - ldrb r1, [r4] - strb r1, [r0] - adds r4, 0x1 - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _082E4574 -_082E458A: - mov r0, r12 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_configGameData - - thumb_func_start rfu_REQ_startSearchChild -rfu_REQ_startSearchChild: @ 82E459C - push {r4,lr} - movs r1, 0 - ldr r4, =rfu_CB_defaultCallback - ldr r3, =gRfuStatic - movs r2, 0 -_082E45A6: - ldr r0, [r3] - adds r0, 0xE - adds r0, r1 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _082E45A6 - adds r0, r4, 0 - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _082E45F0 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _082E45F6 - movs r0, 0x1 - bl rfu_STC_clearLinkStatus - b _082E45F6 - .align 2, 0 - .pool -_082E45F0: - movs r0, 0x19 - bl rfu_STC_REQ_callback -_082E45F6: - ldr r0, =rfu_CB_startSearchChild - bl STWI_set_Callback_M - bl STWI_send_SC_StartREQ - pop {r4} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_startSearchChild - - thumb_func_start rfu_CB_startSearchChild -rfu_CB_startSearchChild: @ 82E460C - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r2, r1, 0 - cmp r2, 0 - bne _082E4624 - ldr r0, =gRfuStatic - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x9] -_082E4624: - adds r0, r3, 0 - adds r1, r2, 0 - bl rfu_STC_REQ_callback - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_startSearchChild - - thumb_func_start rfu_STC_clearLinkStatus -rfu_STC_clearLinkStatus: @ 82E4634 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl rfu_clearAllSlot - cmp r4, 0 - beq _082E465C - mov r0, sp - movs r5, 0 - strh r5, [r0] - ldr r4, =gRfuLinkStatus - ldr r1, [r4] - adds r1, 0x14 - ldr r2, =0x01000040 - bl CpuSet - ldr r0, [r4] - strb r5, [r0, 0x8] -_082E465C: - movs r1, 0 - ldr r2, =gRfuLinkStatus - adds r4, r2, 0 - movs r3, 0 -_082E4664: - ldr r0, [r4] - adds r0, 0xA - adds r0, r1 - strb r3, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _082E4664 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0, 0x1] - ldr r0, [r2] - strb r1, [r0, 0x2] - ldr r0, [r2] - strb r1, [r0, 0x3] - ldr r0, [r2] - strb r1, [r0, 0x7] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_clearLinkStatus - - thumb_func_start rfu_REQ_pollSearchChild -rfu_REQ_pollSearchChild: @ 82E4698 - push {lr} - ldr r0, =rfu_CB_pollAndEndSearchChild - bl STWI_set_Callback_M - bl STWI_send_SC_PollingREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_pollSearchChild - - thumb_func_start rfu_REQ_endSearchChild -rfu_REQ_endSearchChild: @ 82E46AC - push {lr} - ldr r0, =rfu_CB_pollAndEndSearchChild - bl STWI_set_Callback_M - bl STWI_send_SC_EndREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_endSearchChild - - thumb_func_start rfu_CB_pollAndEndSearchChild -rfu_CB_pollAndEndSearchChild: @ 82E46C0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - cmp r6, 0 - bne _082E46D2 - bl rfu_STC_readChildList -_082E46D2: - cmp r4, 0x1A - bne _082E4714 - ldr r5, =gRfuLinkStatus - ldr r0, [r5] - adds r0, 0x94 - ldrh r0, [r0] - cmp r0, 0 - bne _082E4730 - ldr r0, =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _082E4730 - ldr r1, [r5] - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrh r0, [r0, 0x4] - adds r1, 0x94 - strh r0, [r1] - b _082E4730 - .align 2, 0 - .pool -_082E4714: - cmp r4, 0x1B - bne _082E4730 - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1] - cmp r0, 0xFF - bne _082E4728 - adds r1, 0x94 - movs r0, 0 - strh r0, [r1] -_082E4728: - ldr r0, =gRfuStatic - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x9] -_082E4730: - adds r0, r4, 0 - adds r1, r6, 0 - bl rfu_STC_REQ_callback - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_pollAndEndSearchChild - - thumb_func_start rfu_STC_readChildList -rfu_STC_readChildList: @ 82E4748 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r7, [r0, 0x1] - adds r6, r0, 0x4 - cmp r7, 0 - beq _082E47EE - ldr r0, =gRfuStatic - mov r8, r0 - ldr r1, =gRfuLinkStatus - mov r12, r1 -_082E4766: - ldrb r4, [r6, 0x2] - cmp r4, 0x3 - bhi _082E47E2 - mov r2, r12 - ldr r1, [r2] - ldrb r0, [r1, 0x2] - asrs r0, r4 - movs r5, 0x1 - ands r0, r5 - cmp r0, 0 - bne _082E47E2 - ldrb r0, [r1, 0x3] - asrs r0, r4 - ands r0, r5 - cmp r0, 0 - bne _082E47E2 - mov r1, r8 - ldr r0, [r1] - adds r0, 0xE - adds r0, r4 - movs r1, 0xF0 - strb r1, [r0] - ldr r0, [r2] - adds r0, 0xA - adds r0, r4 - movs r1, 0x10 - strb r1, [r0] - ldr r2, [r2] - adds r0, r5, 0 - lsls r0, r4 - ldrb r1, [r2, 0x2] - orrs r0, r1 - strb r0, [r2, 0x2] - mov r2, r12 - ldr r1, [r2] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r1, [r2] - lsls r3, r4, 5 - adds r1, r3 - ldrh r0, [r6] - strh r0, [r1, 0x14] - strb r4, [r1, 0x16] - ldr r0, [r2] - strb r5, [r0] - mov r0, r8 - ldr r2, [r0] - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - mov r2, r8 - ldr r1, [r2] - lsls r0, r4, 1 - adds r1, 0x12 - adds r1, r0 - mov r2, r12 - ldr r0, [r2] - adds r0, r3 - ldrh r0, [r0, 0x14] - strh r0, [r1] -_082E47E2: - subs r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r6, 0x4 - cmp r7, 0 - bne _082E4766 -_082E47EE: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_readChildList - - thumb_func_start rfu_REQ_startSearchParent -rfu_REQ_startSearchParent: @ 82E4804 - push {lr} - ldr r0, =rfu_CB_startSearchParent - bl STWI_set_Callback_M - bl STWI_send_SP_StartREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_startSearchParent - - thumb_func_start rfu_CB_startSearchParent -rfu_CB_startSearchParent: @ 82E4818 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r4, r1, 0 - cmp r4, 0 - bne _082E482E - movs r0, 0 - bl rfu_STC_clearLinkStatus -_082E482E: - adds r0, r5, 0 - adds r1, r4, 0 - bl rfu_STC_REQ_callback - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_CB_startSearchParent - - thumb_func_start rfu_REQ_pollSearchParent -rfu_REQ_pollSearchParent: @ 82E483C - push {lr} - ldr r0, =sub_82E4850 - bl STWI_set_Callback_M - bl STWI_send_SP_PollingREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_pollSearchParent - - thumb_func_start sub_82E4850 -sub_82E4850: @ 82E4850 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r1, 16 - adds r4, r1, 0 - cmp r4, 0 - bne _082E4864 - bl rfu_STC_readParentCandidateList -_082E4864: - adds r0, r5, 0 - adds r1, r4, 0 - bl rfu_STC_REQ_callback - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_82E4850 - - thumb_func_start rfu_REQ_endSearchParent -rfu_REQ_endSearchParent: @ 82E4874 - push {lr} - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_SP_EndREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_endSearchParent - - thumb_func_start rfu_STC_readParentCandidateList -rfu_STC_readParentCandidateList: @ 82E4888 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r0, sp - movs r4, 0 - strh r4, [r0] - ldr r5, =gRfuLinkStatus - ldr r1, [r5] - adds r1, 0x14 - ldr r2, =0x01000040 - bl CpuSet - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r2, [r0] - ldrb r7, [r2, 0x1] - adds r2, 0x4 - ldr r0, [r5] - strb r4, [r0, 0x8] - movs r6, 0 - cmp r7, 0 - beq _082E498C - mov r12, r5 - ldr r0, =0x00007fff - mov r8, r0 -_082E48BE: - subs r0, r7, 0x7 - lsls r0, 24 - lsrs r7, r0, 24 - adds r1, r2, 0x6 - adds r2, 0x13 - ldrb r0, [r2] - mvns r0, r0 - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, 0x1 - movs r4, 0 - movs r3, 0 - adds r6, 0x1 -_082E48D8: - ldrb r0, [r2] - adds r0, r4, r0 - lsls r0, 24 - adds r2, 0x1 - lsrs r0, 24 - ldrb r4, [r1] - adds r0, r4 - lsls r0, 24 - lsrs r4, r0, 24 - adds r1, 0x1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _082E48D8 - cmp r4, r5 - bne _082E4980 - subs r2, 0x1C - mov r0, r12 - ldr r1, [r0] - ldrb r0, [r1, 0x8] - lsls r0, 5 - adds r0, 0x14 - adds r4, r1, r0 - ldrh r0, [r2] - movs r3, 0 - strh r0, [r4] - adds r2, 0x2 - ldrb r0, [r2] - strb r0, [r4, 0x2] - adds r2, 0x2 - ldrh r1, [r2] - mov r0, r8 - ands r0, r1 - strh r0, [r4, 0x4] - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _082E4940 - movs r0, 0x1 - strb r0, [r4, 0x3] - b _082E4942 - .align 2, 0 - .pool -_082E4940: - strb r3, [r4, 0x3] -_082E4942: - adds r2, 0x2 - movs r3, 0 - adds r5, r4, 0 - adds r5, 0x15 - adds r4, 0x6 -_082E494C: - adds r1, r4, r3 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xC - bls _082E494C - adds r2, 0x1 - movs r3, 0 - adds r4, r5, 0 -_082E4964: - adds r1, r4, r3 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x7 - bls _082E4964 - mov r4, r12 - ldr r1, [r4] - ldrb r0, [r1, 0x8] - adds r0, 0x1 - strb r0, [r1, 0x8] -_082E4980: - lsls r0, r6, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bhi _082E498C - cmp r7, 0 - bne _082E48BE -_082E498C: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end rfu_STC_readParentCandidateList - - thumb_func_start rfu_REQ_startConnectParent -rfu_REQ_startConnectParent: @ 82E4998 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - movs r3, 0 - movs r2, 0 - ldr r1, =gRfuLinkStatus - ldr r0, [r1] - ldrh r0, [r0, 0x14] - cmp r0, r4 - beq _082E49C4 - adds r5, r1, 0 -_082E49AE: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bhi _082E49C4 - ldr r0, [r5] - lsls r1, r2, 5 - adds r0, r1 - ldrh r0, [r0, 0x14] - cmp r0, r4 - bne _082E49AE -_082E49C4: - cmp r2, 0x4 - bne _082E49CC - movs r3, 0x80 - lsls r3, 1 -_082E49CC: - cmp r3, 0 - bne _082E49F0 - ldr r0, =gRfuStatic - ldr r0, [r0] - strh r4, [r0, 0x1E] - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - adds r0, r4, 0 - bl STWI_send_CP_StartREQ - b _082E49F8 - .align 2, 0 - .pool -_082E49F0: - movs r0, 0x1F - adds r1, r3, 0 - bl rfu_STC_REQ_callback -_082E49F8: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end rfu_REQ_startConnectParent - - thumb_func_start rfu_REQ_pollConnectParent -rfu_REQ_pollConnectParent: @ 82E4A00 - push {lr} - ldr r0, =rfu_CB_pollConnectParent - bl STWI_set_Callback_M - bl STWI_send_CP_PollingREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_pollConnectParent - - thumb_func_start rfu_CB_pollConnectParent -rfu_CB_pollConnectParent: @ 82E4A14 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x28] - cmp r1, 0 - bne _082E4B16 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrh r5, [r0, 0x4] - ldrb r1, [r0, 0x6] - mov r10, r1 - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _082E4B16 - movs r0, 0x80 - lsls r0, 17 - lsls r0, r1 - lsrs r2, r0, 24 - ldr r4, =gRfuLinkStatus - ldr r3, [r4] - ldrb r1, [r3, 0x2] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _082E4B16 - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r3, 0x2] - ldr r1, [r4] - ldrb r0, [r1, 0x3] - bics r0, r2 - strb r0, [r1, 0x3] - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x94 - movs r2, 0 - strh r5, [r0] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r0, [r4] - strb r2, [r0] - ldr r3, =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0x80 - orrs r0, r1 - strb r0, [r2] - movs r5, 0 - adds r7, r4, 0 - add r6, sp, 0x20 - movs r0, 0 - mov r8, r0 -_082E4A92: - ldr r2, [r7] - lsls r4, r5, 5 - adds r0, r2, r4 - ldr r1, [r3] - ldrh r0, [r0, 0x14] - ldrh r1, [r1, 0x1E] - cmp r0, r1 - bne _082E4AEA - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _082E4AE0 - mov r9, sp - adds r0, r4, 0 - adds r0, 0x14 - adds r0, r2, r0 - mov r1, sp - movs r2, 0x10 - bl CpuSet - mov r1, r8 - strh r1, [r6] - ldr r1, [r7] - adds r1, 0x14 - adds r0, r6, 0 - ldr r2, =0x01000040 - bl CpuSet - ldr r0, [r7] - mov r1, r8 - strb r1, [r0, 0x8] - b _082E4AF4 - .align 2, 0 - .pool -_082E4AE0: - adds r0, r4, 0 - adds r0, 0x14 - adds r2, r0 - mov r9, r2 - b _082E4AF4 -_082E4AEA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _082E4A92 -_082E4AF4: - cmp r5, 0x3 - bhi _082E4B16 - ldr r4, =gRfuLinkStatus - mov r0, r10 - lsls r5, r0, 5 - adds r0, r5, 0 - adds r0, 0x14 - ldr r1, [r4] - adds r1, r0 - mov r0, r9 - movs r2, 0x10 - bl CpuSet - ldr r0, [r4] - adds r0, r5 - mov r1, r10 - strb r1, [r0, 0x16] -_082E4B16: - ldr r0, [sp, 0x24] - ldr r1, [sp, 0x28] - bl rfu_STC_REQ_callback - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_pollConnectParent - - thumb_func_start rfu_getConnectParentStatus -rfu_getConnectParentStatus: @ 82E4B34 - push {lr} - adds r3, r0, 0 - movs r0, 0xFF - strb r0, [r3] - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r2, [r0] - ldrb r0, [r2] - adds r0, 0x60 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _082E4B58 - movs r0, 0x10 - b _082E4B64 - .align 2, 0 - .pool -_082E4B58: - adds r2, 0x6 - ldrb r0, [r2] - strb r0, [r1] - ldrb r0, [r2, 0x1] - strb r0, [r3] - movs r0, 0 -_082E4B64: - pop {r1} - bx r1 - thumb_func_end rfu_getConnectParentStatus - - thumb_func_start rfu_REQ_endConnectParent -rfu_REQ_endConnectParent: @ 82E4B68 - push {lr} - ldr r0, =rfu_CB_pollConnectParent - bl STWI_set_Callback_M - bl STWI_send_CP_EndREQ - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrb r0, [r1, 0x6] - cmp r0, 0x3 - bhi _082E4B90 - ldr r0, =gRfuStatic - ldr r0, [r0] - adds r0, 0xA - ldrb r1, [r1, 0x6] - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_082E4B90: - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_endConnectParent - - thumb_func_start rfu_syncVBlank -rfu_syncVBlank: @ 82E4BA0 - push {r4,r5,lr} - bl rfu_NI_checkCommFailCounter - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0xFF - beq _082E4C78 - ldr r4, =gRfuStatic - ldr r1, [r4] - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _082E4BBE - subs r0, 0x1 - strb r0, [r1, 0x6] -_082E4BBE: - bl rfu_getMasterSlave - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, [r4] - ldrb r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _082E4BF0 - cmp r3, 0 - bne _082E4BFE - movs r0, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r1, [r4] - movs r0, 0xB4 - lsls r0, 1 - strh r0, [r1, 0x20] - b _082E4BFA - .align 2, 0 - .pool -_082E4BF0: - cmp r3, 0 - beq _082E4C10 - movs r0, 0xFB - ands r0, r1 - strb r0, [r2] -_082E4BFA: - cmp r3, 0 - beq _082E4C10 -_082E4BFE: - ldr r3, =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0xFD - ands r0, r1 - b _082E4C1A - .align 2, 0 - .pool -_082E4C10: - ldr r3, =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r0, 0x2 - orrs r0, r1 -_082E4C1A: - strb r0, [r2] - ldr r3, [r3] - ldrb r1, [r3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _082E4C78 - ldrh r0, [r3, 0x20] - cmp r0, 0 - bne _082E4C74 - movs r0, 0xFB - ands r0, r1 - strb r0, [r3] - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - ldrb r0, [r0, 0x3] - adds r5, r0, 0 - orrs r5, r1 - movs r4, 0 -_082E4C42: - adds r0, r5, 0 - asrs r0, r4 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _082E4C54 - adds r0, r4, 0 - bl rfu_STC_removeLinkData -_082E4C54: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _082E4C42 - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - movs r0, 0xFF - strb r0, [r1] - movs r0, 0x1 - b _082E4C7A - .align 2, 0 - .pool -_082E4C74: - subs r0, 0x1 - strh r0, [r3, 0x20] -_082E4C78: - movs r0, 0 -_082E4C7A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end rfu_syncVBlank - - thumb_func_start rfu_REQBN_watchLink -rfu_REQBN_watchLink: @ 82E4C80 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - mov r8, r1 - str r2, [sp] - str r3, [sp, 0x4] - lsls r0, 16 - lsrs r6, r0, 16 - movs r0, 0 - str r0, [sp, 0x8] - movs r1, 0 - str r1, [sp, 0xC] - mov r2, r8 - strb r1, [r2] - mov r0, sp - ldrb r1, [r0, 0xC] - ldr r0, [sp] - strb r1, [r0] - mov r2, sp - ldrb r0, [r2, 0xC] - ldr r2, [sp, 0x4] - strb r0, [r2] - ldr r5, =gRfuLinkStatus - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0xFF - bne _082E4CBE - b _082E504E -_082E4CBE: - ldr r0, =gSTWIStatus - ldr r0, [r0] - ldrb r0, [r0, 0x14] - cmp r0, 0 - bne _082E4CCA - b _082E504E -_082E4CCA: - ldr r3, =gRfuStatic - ldr r2, [r3] - ldrb r1, [r2] - movs r4, 0x4 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _082E4CE0 - movs r0, 0xB4 - lsls r0, 1 - strh r0, [r2, 0x20] -_082E4CE0: - ldr r1, [r3] - ldrb r0, [r1, 0x6] - cmp r0, 0 - bne _082E4CEE - strb r4, [r1, 0x6] - movs r1, 0x1 - str r1, [sp, 0x8] -_082E4CEE: - lsls r0, r6, 24 - lsrs r0, 24 - cmp r0, 0x29 - bne _082E4D30 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrb r0, [r1, 0x4] - mov r2, r8 - strb r0, [r2] - ldrb r0, [r1, 0x5] - ldr r1, [sp] - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _082E4D18 - ldr r0, [r5] - ldrb r0, [r0, 0x2] - strb r0, [r2] -_082E4D18: - movs r2, 0x2 - str r2, [sp, 0x8] - b _082E4D88 - .align 2, 0 - .pool -_082E4D30: - movs r0, 0x9B - lsls r0, 1 - cmp r6, r0 - bne _082E4D80 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r6, [r0, 0x5] - ldr r0, [r5] - ldrb r0, [r0, 0x2] - eors r6, r0 - ands r6, r0 - mov r0, r8 - strb r6, [r0] - movs r0, 0x1 - ldr r1, [sp] - strb r0, [r1] - movs r5, 0 -_082E4D56: - mov r2, r8 - ldrb r0, [r2] - asrs r0, r5 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _082E4D76 - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - adds r0, 0xA - adds r0, r5 - movs r1, 0 - strb r1, [r0] - adds r0, r5, 0 - bl rfu_STC_removeLinkData -_082E4D76: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _082E4D56 -_082E4D80: - ldr r0, [sp, 0x8] - cmp r0, 0 - bne _082E4D88 - b _082E504E -_082E4D88: - ldr r4, =gRfuFixed - ldr r0, [r4] - adds r0, 0xDC - ldr r0, [r0] - ldr r1, [r0] - str r1, [sp, 0x10] - ldr r0, [r0, 0x4] - str r0, [sp, 0x14] - ldr r0, =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_LinkStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0xC] - cmp r0, 0 - bne _082E4DE8 - ldr r0, [r4] - adds r0, 0xDC - ldr r0, [r0] - adds r2, r0, 0x4 - movs r5, 0 - ldr r3, =gRfuLinkStatus -_082E4DBC: - ldr r0, [r3] - adds r0, 0xA - adds r0, r5 - ldrb r1, [r2] - strb r1, [r0] - adds r2, 0x1 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _082E4DBC - movs r2, 0 - mov r9, r2 - movs r5, 0 - b _082E4DF4 - .align 2, 0 - .pool -_082E4DE8: - movs r0, 0x11 - ldr r1, [sp, 0xC] - bl rfu_STC_REQ_callback - ldr r0, [sp, 0xC] - b _082E5050 -_082E4DF4: - ldr r1, =gRfuStatic - ldr r0, [r1] - adds r0, 0xE - adds r2, r0, r5 - ldrb r0, [r2] - adds r3, r1, 0 - cmp r0, 0 - beq _082E4E1A - subs r0, 0x4 - strb r0, [r2] - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - adds r0, 0xA - adds r1, r0, r5 - ldrb r0, [r1] - cmp r0, 0xF - bhi _082E4E1A - movs r0, 0x10 - strb r0, [r1] -_082E4E1A: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r5 - lsrs r6, r0, 24 - adds r0, r5, 0x1 - mov r10, r0 - ldr r1, [sp, 0xC] - cmp r1, 0 - beq _082E4E2E - b _082E5002 -_082E4E2E: - ldr r2, [sp, 0x8] - cmp r2, 0x1 - bne _082E4F10 - ldr r4, =gRfuLinkStatus - ldr r1, [r4] - ldrb r0, [r1, 0x2] - ands r0, r6 - cmp r0, 0 - beq _082E4F10 - adds r0, r1, 0 - adds r0, 0xA - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _082E4F04 - ldrb r0, [r1] - cmp r0, 0x1 - bne _082E4E84 - ldr r1, [r3] - adds r1, 0xA - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - ldr r0, [r3] - adds r0, 0xA - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x3 - bls _082E4F10 - mov r0, r8 - ldrb r1, [r0] - adds r0, r6, 0 - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - ldr r0, [sp] - strb r2, [r0] - b _082E4F10 - .align 2, 0 - .pool -_082E4E84: - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _082E4F10 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _082E4EB8 - mov r2, r8 - ldrb r1, [r2] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2] - mov r0, sp - ldrb r1, [r0, 0x8] - ldr r0, [sp] - b _082E4F0E - .align 2, 0 - .pool -_082E4EB8: - ldr r2, =gRfuStatic - ldr r1, [r2] - adds r1, 0xA - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - ldr r2, [r2] - lsrs r0, 24 - ldrh r1, [r2, 0x1A] - cmp r0, r1 - bls _082E4F10 - adds r0, r2, 0 - adds r0, 0xA - adds r0, r5 - mov r2, sp - ldrb r2, [r2, 0xC] - strb r2, [r0] - ldr r0, [r4] - ldrb r0, [r0, 0x2] - bl STWI_send_DisconnectREQ - bl STWI_poll_CommandEnd - mov r0, r8 - ldrb r1, [r0] - adds r0, r6, 0 - orrs r0, r1 - mov r1, r8 - strb r0, [r1] - mov r2, sp - ldrb r0, [r2, 0x8] - ldr r2, [sp] - strb r0, [r2] - b _082E4F10 - .align 2, 0 - .pool -_082E4F04: - ldr r0, [r3] - adds r0, 0xA - adds r0, r5 - mov r1, sp - ldrb r1, [r1, 0xC] -_082E4F0E: - strb r1, [r0] -_082E4F10: - ldr r2, =gRfuLinkStatus - mov r12, r2 - ldr r1, [r2] - ldrb r7, [r1] - adds r0, r5, 0x1 - mov r10, r0 - cmp r7, 0x1 - bne _082E5002 - adds r0, r1, 0 - adds r0, 0xA - adds r4, r0, r5 - ldrb r3, [r4] - cmp r3, 0 - beq _082E5002 - ldrb r2, [r1, 0x3] - adds r0, r6, 0 - ands r0, r2 - cmp r0, 0 - beq _082E4F7E - cmp r3, 0xA - bls _082E4F78 - ldr r2, [sp, 0x4] - ldrb r1, [r2] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2] - mov r0, r12 - ldr r2, [r0] - ldrb r1, [r2, 0x2] - adds r0, r6, 0 - orrs r0, r1 - movs r3, 0 - strb r0, [r2, 0x2] - mov r2, r12 - ldr r1, [r2] - ldrb r0, [r1, 0x3] - bics r0, r6 - strb r0, [r1, 0x3] - ldr r1, [r2] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r0, =gRfuStatic - ldr r0, [r0] - adds r0, 0xA - adds r0, r5 - strb r3, [r0] - b _082E5002 - .align 2, 0 - .pool -_082E4F78: - movs r0, 0 - strb r0, [r4] - b _082E5002 -_082E4F7E: - ldrb r0, [r1, 0x2] - orrs r0, r2 - ands r0, r6 - cmp r0, 0 - bne _082E5002 - bl STWI_send_SlotStatusREQ - bl STWI_poll_CommandEnd - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r2, [r0] - ldrb r0, [r2, 0x1] - subs r0, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - adds r2, 0x8 - cmp r3, 0 - beq _082E5002 - ldrh r4, [r2] - ldrb r0, [r2, 0x2] - cmp r0, r5 - bne _082E4FD0 - ldr r0, =gRfuStatic - ldr r0, [r0] - lsls r1, r5, 1 - adds r0, 0x12 - adds r0, r1 - ldrh r0, [r0] - cmp r4, r0 - bne _082E4FD0 - lsls r7, r5 - mov r0, r9 - orrs r0, r7 - lsls r0, 24 - b _082E4FFE - .align 2, 0 - .pool -_082E4FD0: - adds r2, 0x4 - subs r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0 - beq _082E5002 - ldrh r4, [r2] - ldrb r0, [r2, 0x2] - cmp r0, r5 - bne _082E4FD0 - ldr r0, =gRfuStatic - ldr r0, [r0] - lsls r1, r5, 1 - adds r0, 0x12 - adds r0, r1 - ldrh r0, [r0] - cmp r4, r0 - bne _082E4FD0 - movs r0, 0x1 - lsls r0, r5 - mov r1, r9 - orrs r1, r0 - lsls r0, r1, 24 -_082E4FFE: - lsrs r0, 24 - mov r9, r0 -_082E5002: - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r1, [r0, 0x2] - mov r2, r8 - ldrb r0, [r2] - ands r0, r1 - ands r6, r0 - cmp r6, 0 - beq _082E501C - adds r0, r5, 0 - movs r1, 0 - bl rfu_STC_removeLinkData -_082E501C: - mov r1, r10 - lsls r0, r1, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bhi _082E5028 - b _082E4DF4 -_082E5028: - mov r2, r9 - cmp r2, 0 - beq _082E5038 - mov r0, r9 - bl STWI_send_DisconnectREQ - bl STWI_poll_CommandEnd -_082E5038: - ldr r1, =gRfuFixed - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldr r2, [sp, 0x10] - str r2, [r0] - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldr r1, [sp, 0x14] - str r1, [r0, 0x4] -_082E504E: - movs r0, 0 -_082E5050: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_REQBN_watchLink - - thumb_func_start rfu_STC_removeLinkData -rfu_STC_removeLinkData: @ 82E506C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r12, r1 - movs r0, 0x80 - lsls r0, 17 - lsls r0, r7 - lsrs r6, r0, 24 - ldr r0, =gRfuStatic - ldr r0, [r0] - adds r0, 0xE - adds r0, r7 - movs r1, 0 - strb r1, [r0] - ldr r1, =gRfuLinkStatus - ldr r4, [r1] - ldrb r0, [r4, 0x2] - ands r0, r6 - mov r8, r1 - cmp r0, 0 - beq _082E50AA - ldrb r0, [r4, 0x1] - cmp r0, 0 - beq _082E50AA - subs r0, 0x1 - strb r0, [r4, 0x1] -_082E50AA: - mov r3, r8 - ldr r2, [r3] - mvns r5, r6 - ldrb r1, [r2, 0x2] - adds r0, r5, 0 - ands r0, r1 - strb r0, [r2, 0x2] - ldr r2, [r3] - ldrb r1, [r2, 0x3] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2, 0x3] - ldr r3, [r3] - ldr r0, [r3] - ldr r1, =0x00ff00ff - ands r0, r1 - cmp r0, 0 - bne _082E50D2 - movs r0, 0xFF - strb r0, [r3] -_082E50D2: - mov r0, r12 - cmp r0, 0 - beq _082E5110 - mov r1, sp - movs r4, 0 - movs r0, 0 - strh r0, [r1] - lsls r0, r7, 5 - adds r0, 0x14 - mov r2, r8 - ldr r1, [r2] - adds r1, r0 - ldr r2, =0x01000010 - mov r0, sp - bl CpuSet - mov r0, r8 - ldr r2, [r0] - ldrb r1, [r2, 0x3] - adds r0, r5, 0 - ands r0, r1 - strb r0, [r2, 0x3] - mov r2, r8 - ldr r1, [r2] - ldrb r0, [r1, 0x7] - ands r5, r0 - strb r5, [r1, 0x7] - ldr r0, [r2] - adds r0, 0xA - adds r0, r7 - strb r4, [r0] -_082E5110: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_removeLinkData - - thumb_func_start rfu_REQ_disconnect -rfu_REQ_disconnect: @ 82E512C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r2, =gRfuLinkStatus - ldr r1, [r2] - ldrb r0, [r1, 0x2] - ldrb r1, [r1, 0x3] - orrs r0, r1 - ands r0, r4 - cmp r0, 0 - beq _082E51B0 - ldr r0, =gRfuStatic - ldr r1, [r0] - strb r4, [r1, 0x5] - ldr r2, [r2] - ldrb r1, [r2] - adds r3, r0, 0 - cmp r1, 0xFF - bne _082E5178 - ldr r0, [r3] - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _082E5178 - ldrb r0, [r2, 0x3] - ands r0, r4 - cmp r0, 0 - beq _082E51B0 - movs r0, 0x30 - movs r1, 0 - bl rfu_CB_disconnect - b _082E51B0 - .align 2, 0 - .pool -_082E5178: - ldr r0, [r3] - ldrb r0, [r0, 0x9] - cmp r0, 0 - beq _082E51A4 - ldr r0, =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SC_EndREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _082E51A4 - movs r0, 0x1B - bl rfu_STC_REQ_callback - b _082E51B0 - .align 2, 0 - .pool -_082E51A4: - ldr r0, =rfu_CB_disconnect - bl STWI_set_Callback_M - adds r0, r4, 0 - bl STWI_send_DisconnectREQ -_082E51B0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_disconnect - - thumb_func_start rfu_CB_disconnect -rfu_CB_disconnect: @ 82E51BC - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - cmp r5, 0x3 - bne _082E51F8 - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0 - bne _082E51F8 - ldr r0, =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SystemStatusREQ - bl STWI_poll_CommandEnd - lsls r0, 16 - cmp r0, 0 - bne _082E51F8 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _082E51F8 - movs r5, 0 -_082E51F8: - ldr r3, =gRfuStatic - ldr r2, [r3] - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0x2] - ldrb r1, [r1, 0x3] - orrs r0, r1 - ldrb r1, [r2, 0x5] - ands r0, r1 - strb r0, [r2, 0x5] - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldr r0, [r3] - ldrb r0, [r0, 0x5] - strb r0, [r1, 0x8] - cmp r5, 0 - bne _082E5246 - movs r4, 0 -_082E5220: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r4 - lsrs r0, 24 - ldr r1, =gRfuStatic - ldr r1, [r1] - ldrb r1, [r1, 0x5] - ands r0, r1 - cmp r0, 0 - beq _082E523C - adds r0, r4, 0 - movs r1, 0x1 - bl rfu_STC_removeLinkData -_082E523C: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _082E5220 -_082E5246: - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2, 0x2] - ldrb r0, [r2, 0x3] - orrs r0, r1 - cmp r0, 0 - bne _082E5258 - movs r0, 0xFF - strb r0, [r2] -_082E5258: - adds r0, r6, 0 - adds r1, r5, 0 - bl rfu_STC_REQ_callback - ldr r0, =gRfuStatic - ldr r0, [r0] - ldrb r0, [r0, 0x9] - cmp r0, 0 - beq _082E5286 - ldr r0, =rfu_CB_defaultCallback - bl STWI_set_Callback_M - bl STWI_send_SC_StartREQ - bl STWI_poll_CommandEnd - adds r5, r0, 0 - cmp r5, 0 - beq _082E5286 - movs r0, 0x19 - adds r1, r5, 0 - bl rfu_STC_REQ_callback -_082E5286: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_disconnect - - thumb_func_start rfu_REQ_CHILD_startConnectRecovery -rfu_REQ_CHILD_startConnectRecovery: @ 82E529C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, =gRfuStatic - ldr r0, [r0] - strb r5, [r0, 0x5] - movs r4, 0 - movs r0, 0x1 - ands r0, r5 - ldr r2, =rfu_STC_REQ_callback - cmp r0, 0 - bne _082E52CA - movs r1, 0x1 -_082E52B6: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bhi _082E52CA - adds r0, r5, 0 - asrs r0, r4 - ands r0, r1 - cmp r0, 0 - beq _082E52B6 -_082E52CA: - adds r0, r2, 0 - bl STWI_set_Callback_M - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - lsls r0, r4, 5 - adds r0, r1, r0 - ldrh r0, [r0, 0x14] - adds r1, 0x94 - ldrh r1, [r1] - adds r2, r5, 0 - bl STWI_send_CPR_StartREQ - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_CHILD_startConnectRecovery - - thumb_func_start rfu_REQ_CHILD_pollConnectRecovery -rfu_REQ_CHILD_pollConnectRecovery: @ 82E52F8 - push {lr} - ldr r0, =rfu_CB_CHILD_pollConnectRecovery - bl STWI_set_Callback_M - bl STWI_send_CPR_PollingREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_CHILD_pollConnectRecovery - - thumb_func_start rfu_CB_CHILD_pollConnectRecovery -rfu_CB_CHILD_pollConnectRecovery: @ 82E530C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _082E5390 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _082E5390 - ldr r0, =gRfuStatic - ldr r1, [r0] - ldrb r1, [r1, 0x5] - adds r6, r0, 0 - cmp r1, 0 - beq _082E5390 - ldr r1, =gRfuLinkStatus - ldr r0, [r1] - strb r7, [r0] - movs r4, 0 - adds r5, r1, 0 - mov r12, r4 -_082E5346: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r4 - lsrs r3, r0, 24 - ldr r2, [r5] - ldr r0, [r6] - ldrb r0, [r0, 0x5] - ands r0, r3 - ldrb r1, [r2, 0x3] - ands r0, r1 - cmp r0, 0 - beq _082E5380 - ldrb r1, [r2, 0x2] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2, 0x2] - ldr r1, [r5] - ldrb r0, [r1, 0x3] - bics r0, r3 - strb r0, [r1, 0x3] - ldr r1, [r5] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] - ldr r0, [r6] - adds r0, 0xA - adds r0, r4 - mov r1, r12 - strb r1, [r0] -_082E5380: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _082E5346 - ldr r1, [r6] - movs r0, 0 - strb r0, [r1, 0x5] -_082E5390: - mov r0, r8 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_CHILD_pollConnectRecovery - - thumb_func_start rfu_CHILD_getConnectRecoveryStatus -rfu_CHILD_getConnectRecoveryStatus: @ 82E53B0 - push {lr} - adds r2, r0, 0 - movs r0, 0xFF - strb r0, [r2] - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x4D - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _082E53D4 - movs r0, 0x10 - b _082E53DA - .align 2, 0 - .pool -_082E53D4: - ldrb r0, [r1, 0x4] - strb r0, [r2] - movs r0, 0 -_082E53DA: - pop {r1} - bx r1 - thumb_func_end rfu_CHILD_getConnectRecoveryStatus - - thumb_func_start rfu_REQ_CHILD_endConnectRecovery -rfu_REQ_CHILD_endConnectRecovery: @ 82E53E0 - push {lr} - ldr r0, =rfu_CB_CHILD_pollConnectRecovery - bl STWI_set_Callback_M - bl STWI_send_CPR_EndREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_CHILD_endConnectRecovery - - thumb_func_start sub_82E53F4 -sub_82E53F4: @ 82E53F4 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r3, [r5] - ldr r1, [r6] - subs r2, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _082E5418 - adds r4, r0, 0 - thumb_func_end sub_82E53F4 - - non_word_aligned_thumb_func_start sub_82E540A -sub_82E540A: @ 82E540A - ldrb r0, [r3] - strb r0, [r1] - adds r3, 0x1 - adds r1, 0x1 - subs r2, 0x1 - cmp r2, r4 - bne sub_82E540A -_082E5418: - str r3, [r5] - str r1, [r6] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_82E540A - - thumb_func_start rfu_REQ_changeMasterSlave -rfu_REQ_changeMasterSlave: @ 82E5424 - push {lr} - movs r0, 0x1 - bl STWI_read_status - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _082E5444 - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - bl STWI_send_MS_ChangeREQ - b _082E544C - .align 2, 0 - .pool -_082E5444: - movs r0, 0x27 - movs r1, 0 - bl rfu_STC_REQ_callback -_082E544C: - pop {r0} - bx r0 - thumb_func_end rfu_REQ_changeMasterSlave - - thumb_func_start rfu_getMasterSlave -rfu_getMasterSlave: @ 82E5450 - push {lr} - movs r0, 0x1 - bl STWI_read_status - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1 - bne _082E547E - ldr r0, =gSTWIStatus - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x2C - ldrb r0, [r0] - cmp r0, 0 - beq _082E547E - ldrb r0, [r1, 0x6] - cmp r0, 0x27 - beq _082E547C - cmp r0, 0x25 - beq _082E547C - cmp r0, 0x37 - bne _082E547E -_082E547C: - movs r2, 0 -_082E547E: - adds r0, r2, 0 - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_getMasterSlave - - thumb_func_start rfu_clearAllSlot -rfu_clearAllSlot: @ 82E5488 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r1, =0x04000208 - ldrh r0, [r1] - mov r8, r0 - movs r0, 0 - strh r0, [r1] - movs r5, 0 - mov r0, sp - adds r0, 0x2 - movs r7, 0 - adds r6, r0, 0 -_082E54A4: - mov r0, sp - strh r7, [r0] - ldr r0, =gRfuSlotStatusNI - lsls r4, r5, 2 - adds r0, r4, r0 - ldr r1, [r0] - mov r0, sp - ldr r2, =0x01000034 - bl CpuSet - strh r7, [r6] - ldr r0, =gRfuSlotStatusUNI - adds r4, r0 - ldr r1, [r4] - adds r0, r6, 0 - ldr r2, =0x0100000a - bl CpuSet - ldr r3, =gRfuLinkStatus - ldr r0, [r3] - adds r0, 0x10 - adds r0, r5 - movs r1, 0x10 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _082E54A4 - ldr r2, [r3] - movs r1, 0 - movs r0, 0x57 - strb r0, [r2, 0xF] - ldr r0, [r3] - strb r1, [r0, 0x4] - ldr r0, [r3] - strb r1, [r0, 0x5] - ldr r0, [r3] - strb r1, [r0, 0x6] - ldr r0, =gRfuStatic - ldr r0, [r0] - strb r1, [r0, 0x2] - ldr r0, =0x04000208 - mov r1, r8 - strh r1, [r0] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_clearAllSlot - - thumb_func_start rfu_STC_releaseFrame -rfu_STC_releaseFrame: @ 82E5528 - push {r4-r6,lr} - adds r4, r2, 0 - lsls r0, 24 - lsrs r2, r0, 24 - adds r5, r2, 0 - lsls r1, 24 - lsrs r3, r1, 24 - ldr r0, =gRfuStatic - ldr r0, [r0] - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _082E5568 - ldr r6, =gRfuLinkStatus - cmp r3, 0 - bne _082E5554 - ldr r1, [r6] - ldrb r0, [r1, 0xF] - ldrh r4, [r4, 0x2E] - adds r0, r4 - strb r0, [r1, 0xF] -_082E5554: - ldr r1, [r6] - ldrb r0, [r1, 0xF] - adds r0, 0x3 - strb r0, [r1, 0xF] - b _082E5588 - .align 2, 0 - .pool -_082E5568: - ldr r6, =gRfuLinkStatus - cmp r3, 0 - bne _082E557C - ldr r1, [r6] - adds r1, 0x10 - adds r1, r2 - ldrb r0, [r1] - ldrh r4, [r4, 0x2E] - adds r0, r4 - strb r0, [r1] -_082E557C: - ldr r1, [r6] - adds r1, 0x10 - adds r1, r5 - ldrb r0, [r1] - adds r0, 0x2 - strb r0, [r1] -_082E5588: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_releaseFrame - - thumb_func_start rfu_clearSlot -rfu_clearSlot: @ 82E5594 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r7, 0x3 - bls _082E55B4 - movs r0, 0x80 - lsls r0, 3 - b _082E572C -_082E55B4: - movs r0, 0xF - mov r1, r8 - ands r0, r1 - cmp r0, 0 - bne _082E55C4 - movs r0, 0xC0 - lsls r0, 3 - b _082E572C -_082E55C4: - ldr r1, =0x04000208 - ldrh r0, [r1] - mov r10, r0 - movs r0, 0 - strh r0, [r1] - movs r0, 0xC - mov r2, r8 - ands r0, r2 - cmp r0, 0 - beq _082E568C - movs r3, 0 - ldr r1, =gRfuSlotStatusNI - lsls r0, r7, 2 - adds r0, r1 - mov r9, r0 -_082E55E2: - movs r4, 0 - cmp r3, 0 - bne _082E5614 - movs r0, 0x4 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _082E5634 - mov r2, r9 - ldr r4, [r2] - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - adds r0, r4, 0 - adds r0, 0x2C - ldrb r1, [r0] - ldrb r0, [r2, 0x4] - bics r0, r1 - strb r0, [r2, 0x4] - b _082E5634 - .align 2, 0 - .pool -_082E5614: - movs r0, 0x8 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _082E5634 - mov r2, r9 - ldr r0, [r2] - adds r4, r0, 0 - adds r4, 0x34 - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - movs r1, 0x1 - lsls r1, r7 - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] -_082E5634: - adds r6, r3, 0x1 - cmp r4, 0 - beq _082E5684 - ldrh r0, [r4] - movs r2, 0x80 - lsls r2, 8 - adds r1, r2, 0 - ands r0, r1 - cmp r0, 0 - beq _082E5674 - lsls r1, r3, 24 - lsrs r1, 24 - adds r0, r7, 0 - adds r2, r4, 0 - bl rfu_STC_releaseFrame - movs r1, 0 - adds r2, r4, 0 - adds r2, 0x2C - movs r5, 0x1 - movs r3, 0 -_082E565E: - ldrb r0, [r2] - asrs r0, r1 - ands r0, r5 - cmp r0, 0 - beq _082E566A - strh r3, [r4, 0x2] -_082E566A: - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x3 - bls _082E565E -_082E5674: - mov r1, sp - movs r0, 0 - strh r0, [r1] - mov r0, sp - adds r1, r4, 0 - ldr r2, =0x0100001a - bl CpuSet -_082E5684: - lsls r0, r6, 16 - lsrs r3, r0, 16 - cmp r3, 0x1 - bls _082E55E2 -_082E568C: - movs r0, 0x1 - mov r4, r8 - ands r0, r4 - cmp r0, 0 - beq _082E5702 - ldr r1, =gRfuSlotStatusUNI - lsls r0, r7, 2 - adds r0, r1 - ldr r3, [r0] - ldrh r1, [r3] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _082E56F4 - ldr r0, =gRfuStatic - ldr r0, [r0] - ldrb r1, [r0] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _082E56D8 - ldr r2, =gRfuLinkStatus - ldr r1, [r2] - ldrb r0, [r1, 0xF] - adds r0, 0x3 - ldrb r4, [r3, 0x4] - adds r0, r4 - strb r0, [r1, 0xF] - b _082E56EA - .align 2, 0 - .pool -_082E56D8: - ldr r2, =gRfuLinkStatus - ldr r1, [r2] - adds r1, 0x10 - adds r1, r7 - ldrb r0, [r1] - adds r0, 0x2 - ldrb r4, [r3, 0x4] - adds r0, r4 - strb r0, [r1] -_082E56EA: - ldr r2, [r2] - ldrb r1, [r3, 0x3] - ldrb r0, [r2, 0x6] - bics r0, r1 - strb r0, [r2, 0x6] -_082E56F4: - mov r0, sp - movs r1, 0 - strh r1, [r0] - ldr r2, =0x01000006 - adds r1, r3, 0 - bl CpuSet -_082E5702: - movs r0, 0x2 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _082E5724 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, =gRfuSlotStatusUNI - lsls r0, r7, 2 - adds r0, r1 - ldr r1, [r0] - adds r1, 0xC - ldr r2, =0x01000004 - mov r0, sp - bl CpuSet -_082E5724: - ldr r0, =0x04000208 - mov r2, r10 - strh r2, [r0] - movs r0, 0 -_082E572C: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_clearSlot - - thumb_func_start rfu_setRecvBuffer -rfu_setRecvBuffer: @ 82E5750 - push {r4-r6,lr} - adds r5, r2, 0 - adds r6, r3, 0 - lsls r0, 24 - lsrs r3, r0, 24 - adds r2, r3, 0 - lsls r1, 24 - lsrs r1, 24 - adds r4, r1, 0 - cmp r1, 0x3 - bls _082E576C - movs r0, 0x80 - lsls r0, 3 - b _082E57A4 -_082E576C: - movs r0, 0x20 - ands r0, r3 - cmp r0, 0 - beq _082E5788 - ldr r0, =gRfuSlotStatusNI - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - str r5, [r0, 0x68] - str r6, [r0, 0x6C] - b _082E57A2 - .align 2, 0 - .pool -_082E5788: - movs r0, 0x10 - ands r2, r0 - cmp r2, 0 - bne _082E5796 - movs r0, 0xC0 - lsls r0, 3 - b _082E57A4 -_082E5796: - ldr r0, =gRfuSlotStatusUNI - lsls r1, r4, 2 - adds r1, r0 - ldr r0, [r1] - str r5, [r0, 0x14] - str r6, [r0, 0x18] -_082E57A2: - movs r0, 0 -_082E57A4: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_setRecvBuffer - - thumb_func_start rfu_NI_setSendData -rfu_NI_setSendData: @ 82E57B0 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - str r3, [sp] - movs r0, 0x20 - adds r1, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl rfu_STC_setSendData_org - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end rfu_NI_setSendData - - thumb_func_start rfu_UNI_setSendData -rfu_UNI_setSendData: @ 82E57DC - push {lr} - sub sp, 0x4 - adds r3, r1, 0 - lsls r0, 24 - lsrs r1, r0, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _082E57FC - adds r0, r2, 0x3 - b _082E57FE - .align 2, 0 - .pool -_082E57FC: - adds r0, r2, 0x2 -_082E57FE: - lsls r0, 24 - lsrs r2, r0, 24 - movs r0, 0 - str r0, [sp] - movs r0, 0x10 - bl rfu_STC_setSendData_org - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r1} - bx r1 - thumb_func_end rfu_UNI_setSendData - - thumb_func_start rfu_NI_CHILD_setSendGameName -rfu_NI_CHILD_setSendGameName: @ 82E5818 - push {lr} - sub sp, 0x4 - adds r2, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - movs r1, 0x80 - lsls r1, 17 - lsls r1, r0 - lsrs r1, 24 - ldr r0, =gRfuLinkStatus - ldr r3, [r0] - adds r3, 0x98 - movs r0, 0x1A - str r0, [sp] - movs r0, 0x40 - bl rfu_STC_setSendData_org - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_NI_CHILD_setSendGameName - - thumb_func_start rfu_STC_setSendData_org -rfu_STC_setSendData_org: @ 82E584C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - str r3, [sp] - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2] - mov r10, r0 - cmp r1, 0xFF - bne _082E5880 - ldr r0, =0x00000301 - b _082E5A36 - .align 2, 0 - .pool -_082E5880: - movs r0, 0xF - ands r0, r3 - cmp r0, 0 - bne _082E588E - movs r0, 0x80 - lsls r0, 3 - b _082E5A36 -_082E588E: - ldrb r0, [r2, 0x2] - ldrb r1, [r2, 0x3] - orrs r0, r1 - ands r0, r3 - cmp r0, r3 - beq _082E58A4 - ldr r0, =0x00000401 - b _082E5A36 - .align 2, 0 - .pool -_082E58A4: - movs r0, 0x10 - ands r0, r6 - cmp r0, 0 - beq _082E58B0 - ldrb r0, [r2, 0x6] - b _082E58B2 -_082E58B0: - ldrb r0, [r2, 0x4] -_082E58B2: - ands r0, r3 - cmp r0, 0 - beq _082E58C0 - ldr r0, =0x00000402 - b _082E5A36 - .align 2, 0 - .pool -_082E58C0: - movs r2, 0 - movs r0, 0x1 - ands r0, r3 - ldr r4, =llsf_struct - cmp r0, 0 - bne _082E58E2 - movs r1, 0x1 -_082E58CE: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bhi _082E58E2 - adds r0, r3, 0 - asrs r0, r2 - ands r0, r1 - cmp r0, 0 - beq _082E58CE -_082E58E2: - mov r0, r10 - ldr r1, [r0] - ldrb r0, [r1] - cmp r0, 0x1 - bne _082E58F4 - adds r1, 0xF - b _082E58FE - .align 2, 0 - .pool -_082E58F4: - cmp r0, 0 - bne _082E5900 - adds r0, r2, 0 - adds r0, 0x10 - adds r1, r0 -_082E58FE: - mov r9, r1 -_082E5900: - mov r1, r10 - ldr r0, [r1] - ldrb r0, [r0] - lsls r0, 4 - adds r0, r4 - ldrb r4, [r0] - mov r0, r9 - ldrb r0, [r0] - cmp r8, r0 - bhi _082E5918 - cmp r8, r4 - bhi _082E591E -_082E5918: - movs r0, 0xA0 - lsls r0, 3 - b _082E5A36 -_082E591E: - ldr r1, =0x04000208 - ldrh r0, [r1] - str r0, [sp, 0x4] - movs r7, 0 - strh r7, [r1] - movs r0, 0x20 - ands r0, r6 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _082E5938 - cmp r6, 0x40 - bne _082E59F4 -_082E5938: - ldr r1, =gRfuSlotStatusNI - lsls r0, r2, 2 - adds r0, r1 - ldr r0, [r0] - mov r12, r0 - movs r1, 0 - strh r1, [r0, 0x18] - mov r1, r12 - adds r1, 0x2D - mov r2, r12 - str r1, [r2, 0x4] - movs r0, 0x7 - str r0, [r2, 0x14] - mov r0, r12 - adds r0, 0x2C - strb r3, [r0] - strb r3, [r2, 0x1A] - mov r2, r8 - subs r0, r2, r4 - mov r2, r12 - strh r0, [r2, 0x2E] - cmp r5, 0 - beq _082E5974 - strb r7, [r1] - b _082E5978 - .align 2, 0 - .pool -_082E5974: - movs r0, 0x1 - strb r0, [r1] -_082E5978: - ldr r0, [sp, 0x28] - mov r1, r12 - str r0, [r1, 0x30] - ldr r2, [sp] - str r2, [r1, 0x28] - movs r1, 0 - mov r0, r12 - strb r1, [r0, 0x1F] - adds r0, 0x20 - strb r1, [r0] - mov r4, r12 - adds r4, 0x1B - movs r6, 0 - mov r2, r12 - adds r2, 0x21 - movs r5, 0x1 -_082E5998: - adds r0, r4, r1 - strb r6, [r0] - adds r0, r2, r1 - strb r5, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _082E5998 - movs r2, 0 - movs r5, 0x1 - ldr r4, =gRfuSlotStatusNI - movs r1, 0 -_082E59B2: - adds r0, r3, 0 - asrs r0, r2 - ands r0, r5 - cmp r0, 0 - beq _082E59C4 - lsls r0, r2, 2 - adds r0, r4 - ldr r0, [r0] - strh r1, [r0, 0x2] -_082E59C4: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _082E59B2 - mov r1, r10 - ldr r2, [r1] - ldrb r1, [r2, 0x4] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2, 0x4] - mov r2, r9 - ldrb r0, [r2] - mov r1, r8 - subs r0, r1 - strb r0, [r2] - ldr r0, =0x00008021 - mov r2, r12 - strh r0, [r2] - b _082E5A2C - .align 2, 0 - .pool -_082E59F4: - movs r0, 0x10 - ands r0, r6 - cmp r0, 0 - beq _082E5A2C - ldr r1, =gRfuSlotStatusUNI - lsls r0, r2, 2 - adds r0, r1 - ldr r1, [r0] - strb r3, [r1, 0x3] - ldr r0, [sp] - str r0, [r1, 0x8] - mov r2, r8 - subs r0, r2, r4 - strh r0, [r1, 0x4] - mov r2, r9 - ldrb r0, [r2] - mov r2, r8 - subs r0, r2 - mov r2, r9 - strb r0, [r2] - ldr r0, =0x00008024 - strh r0, [r1] - mov r0, r10 - ldr r2, [r0] - ldrb r1, [r2, 0x6] - adds r0, r3, 0 - orrs r0, r1 - strb r0, [r2, 0x6] -_082E5A2C: - ldr r0, =0x04000208 - mov r1, sp - ldrh r1, [r1, 0x4] - strh r1, [r0] - movs r0, 0 -_082E5A36: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_STC_setSendData_org - - thumb_func_start rfu_changeSendTarget -rfu_changeSendTarget: @ 82E5A54 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r3, r0, 0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - cmp r7, 0x3 - bls _082E5A78 - movs r0, 0x80 - lsls r0, 3 - b _082E5BAC -_082E5A78: - cmp r0, 0x20 - bne _082E5B18 - ldr r0, =gRfuSlotStatusNI - mov r12, r0 - lsls r0, r7, 2 - add r0, r12 - ldr r5, [r0] - ldrh r2, [r5] - ldr r1, =0x00008020 - adds r0, r1, 0 - ands r0, r2 - cmp r0, r1 - bne _082E5B2E - ldrb r0, [r5, 0x1A] - adds r3, r6, 0 - eors r3, r0 - adds r2, r3, 0 - ands r2, r6 - cmp r2, 0 - bne _082E5B66 - cmp r3, 0 - bne _082E5AA6 - b _082E5BAA -_082E5AA6: - ldr r1, =0x04000208 - ldrh r0, [r1] - mov r8, r0 - strh r2, [r1] - movs r2, 0 - mvns r1, r3 - str r1, [sp] - lsls r4, r6, 24 - mov r10, r4 - movs r0, 0x1 - mov r9, r0 - movs r1, 0 -_082E5ABE: - adds r0, r3, 0 - asrs r0, r2 - mov r4, r9 - ands r0, r4 - cmp r0, 0 - beq _082E5AD2 - lsls r0, r2, 2 - add r0, r12 - ldr r0, [r0] - strh r1, [r0, 0x2] -_082E5AD2: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _082E5ABE - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0x4] - ldr r2, [sp] - ands r2, r0 - strb r2, [r1, 0x4] - strb r6, [r5, 0x1A] - mov r0, r10 - cmp r0, 0 - bne _082E5AFE - adds r0, r7, 0 - movs r1, 0 - adds r2, r5, 0 - bl rfu_STC_releaseFrame - movs r0, 0x27 - strh r0, [r5] -_082E5AFE: - ldr r0, =0x04000208 - mov r1, r8 - strh r1, [r0] - b _082E5BAA - .align 2, 0 - .pool -_082E5B18: - cmp r3, 0x10 - bne _082E5BA4 - ldr r3, =gRfuSlotStatusUNI - lsls r1, r7, 2 - adds r0, r1, r3 - ldr r0, [r0] - ldrh r2, [r0] - ldr r0, =0x00008024 - adds r5, r3, 0 - cmp r2, r0 - beq _082E5B40 -_082E5B2E: - ldr r0, =0x00000403 - b _082E5BAC - .align 2, 0 - .pool -_082E5B40: - movs r3, 0 - movs r2, 0 - adds r4, r5, 0 -_082E5B46: - cmp r2, r7 - beq _082E5B54 - lsls r0, r2, 2 - adds r0, r4 - ldr r0, [r0] - ldrb r0, [r0, 0x3] - orrs r3, r0 -_082E5B54: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _082E5B46 - adds r2, r6, 0 - ands r2, r3 - cmp r2, 0 - beq _082E5B70 -_082E5B66: - ldr r0, =0x00000404 - b _082E5BAC - .align 2, 0 - .pool -_082E5B70: - ldr r3, =0x04000208 - ldrh r0, [r3] - mov r8, r0 - strh r2, [r3] - ldr r4, =gRfuLinkStatus - ldr r2, [r4] - adds r5, r1, r5 - ldr r0, [r5] - ldrb r1, [r0, 0x3] - ldrb r0, [r2, 0x6] - bics r0, r1 - strb r0, [r2, 0x6] - ldr r2, [r4] - ldrb r1, [r2, 0x6] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2, 0x6] - ldr r0, [r5] - strb r6, [r0, 0x3] - mov r2, r8 - strh r2, [r3] - b _082E5BAA - .align 2, 0 - .pool -_082E5BA4: - movs r0, 0xC0 - lsls r0, 3 - b _082E5BAC -_082E5BAA: - movs r0, 0 -_082E5BAC: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_changeSendTarget - - thumb_func_start rfu_NI_stopReceivingData -rfu_NI_stopReceivingData: @ 82E5BBC - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _082E5BCC - movs r0, 0x80 - lsls r0, 3 - b _082E5C26 -_082E5BCC: - ldr r1, =gRfuSlotStatusNI - lsls r0, r3, 2 - adds r0, r1 - ldr r2, [r0] - adds r5, r2, 0 - adds r5, 0x34 - ldr r1, =0x04000208 - ldrh r0, [r1] - adds r4, r0, 0 - movs r0, 0 - strh r0, [r1] - ldrh r1, [r2, 0x34] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _082E5C20 - ldr r0, =0x00008043 - cmp r1, r0 - bne _082E5C04 - movs r0, 0x48 - b _082E5C06 - .align 2, 0 - .pool -_082E5C04: - movs r0, 0x47 -_082E5C06: - strh r0, [r2, 0x34] - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - movs r1, 0x1 - lsls r1, r3 - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] - adds r0, r3, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl rfu_STC_releaseFrame -_082E5C20: - ldr r0, =0x04000208 - strh r4, [r0] - movs r0, 0 -_082E5C26: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_NI_stopReceivingData - - thumb_func_start rfu_UNI_changeAndReadySendData -rfu_UNI_changeAndReadySendData: @ 82E5C34 - push {r4-r7,lr} - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - adds r3, r0, 0 - lsls r2, 24 - lsrs r5, r2, 24 - cmp r0, 0x3 - bls _082E5C4C - movs r0, 0x80 - lsls r0, 3 - b _082E5CC0 -_082E5C4C: - ldr r1, =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - ldrh r1, [r4] - ldr r0, =0x00008024 - cmp r1, r0 - beq _082E5C6C - ldr r0, =0x00000403 - b _082E5CC0 - .align 2, 0 - .pool -_082E5C6C: - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1] - cmp r0, 0x1 - bne _082E5C84 - adds r6, r1, 0 - adds r6, 0xF - ldrb r0, [r4, 0x4] - ldrb r1, [r1, 0xF] - b _082E5C92 - .align 2, 0 - .pool -_082E5C84: - adds r0, r3, 0 - adds r0, 0x10 - adds r6, r1, r0 - adds r1, 0x10 - adds r1, r3 - ldrb r0, [r4, 0x4] - ldrb r1, [r1] -_082E5C92: - adds r0, r1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, r5 - bcc _082E5CBC - ldr r2, =0x04000208 - ldrh r1, [r2] - movs r0, 0 - strh r0, [r2] - str r7, [r4, 0x8] - subs r0, r3, r5 - strb r0, [r6] - strh r5, [r4, 0x4] - movs r0, 0x1 - strb r0, [r4, 0x2] - strh r1, [r2] - movs r0, 0 - b _082E5CC0 - .align 2, 0 - .pool -_082E5CBC: - movs r0, 0xA0 - lsls r0, 3 -_082E5CC0: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_UNI_changeAndReadySendData - - thumb_func_start rfu_UNI_readySendData -rfu_UNI_readySendData: @ 82E5CC8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _082E5CE6 - ldr r1, =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldrh r1, [r2] - ldr r0, =0x00008024 - cmp r1, r0 - bne _082E5CE6 - movs r0, 0x1 - strb r0, [r2, 0x2] -_082E5CE6: - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_UNI_readySendData - - thumb_func_start rfu_UNI_clearRecvNewDataFlag -rfu_UNI_clearRecvNewDataFlag: @ 82E5CF4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _082E5D0A - ldr r1, =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - movs r0, 0 - strb r0, [r1, 0x12] -_082E5D0A: - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_UNI_clearRecvNewDataFlag - - thumb_func_start rfu_REQ_sendData -rfu_REQ_sendData: @ 82E5D14 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2] - adds r4, r0, 0 - cmp r1, 0xFF - bne _082E5D28 - b _082E5E4E -_082E5D28: - cmp r1, 0x1 - bne _082E5DB8 - ldrb r0, [r2, 0x4] - ldrb r1, [r2, 0x5] - adds r3, r0, 0 - orrs r3, r1 - ldrb r0, [r2, 0x6] - orrs r3, r0 - cmp r3, 0 - bne _082E5DB8 - ldr r0, =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2, 0x3] - adds r4, r0, 0 - cmp r1, 0 - beq _082E5D50 - movs r0, 0x10 - strb r0, [r2, 0x8] - ldr r0, [r4] - strb r3, [r0, 0x7] -_082E5D50: - ldr r1, [r4] - ldrb r0, [r1, 0x8] - cmp r0, 0 - beq _082E5D68 - subs r0, 0x1 - strb r0, [r1, 0x8] - b _082E5D6E - .align 2, 0 - .pool -_082E5D68: - ldrb r0, [r1, 0x7] - adds r0, 0x1 - strb r0, [r1, 0x7] -_082E5D6E: - ldr r1, [r4] - ldrb r0, [r1, 0x8] - cmp r0, 0 - bne _082E5D80 - ldrb r1, [r1, 0x7] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _082E5E12 -_082E5D80: - ldr r4, =gRfuFixed - ldr r1, [r4] - movs r0, 0x1 - str r0, [r1, 0x68] - movs r0, 0xFF - str r0, [r1, 0x78] - ldr r0, =sub_82E5F00 - bl STWI_set_Callback_M - cmp r5, 0 - bne _082E5DAC - ldr r0, [r4] - adds r0, 0x68 - movs r1, 0x1 - bl STWI_send_DataTxREQ - b _082E5E4E - .align 2, 0 - .pool -_082E5DAC: - ldr r0, [r4] - adds r0, 0x68 - movs r1, 0x1 - bl STWI_send_DataTxAndChangeREQ - b _082E5E4E -_082E5DB8: - ldr r0, [r4] - ldrb r0, [r0, 0xE] - cmp r0, 0 - bne _082E5DC4 - bl rfu_constructSendLLFrame -_082E5DC4: - ldr r0, [r4] - ldrb r0, [r0, 0xE] - cmp r0, 0 - beq _082E5E12 - ldr r0, =rfu_CB_sendData - bl STWI_set_Callback_M - cmp r5, 0 - beq _082E5DFC - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0x68 - ldr r1, =gRfuStatic - ldr r1, [r1] - ldr r1, [r1, 0x24] - adds r1, 0x4 - lsls r1, 24 - lsrs r1, 24 - bl STWI_send_DataTxAndChangeREQ - b _082E5E4E - .align 2, 0 - .pool -_082E5DFC: - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0x68 - ldr r1, =gRfuStatic - ldr r1, [r1] - ldr r1, [r1, 0x24] - adds r1, 0x4 - lsls r1, 24 - lsrs r1, 24 - bl STWI_send_DataTxREQ -_082E5E12: - cmp r5, 0 - beq _082E5E4E - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _082E5E44 - ldr r0, =gSTWIStatus - ldr r0, [r0] - ldr r1, [r0, 0x1C] - cmp r1, 0 - beq _082E5E4E - movs r0, 0x27 - bl _call_via_r1 - b _082E5E4E - .align 2, 0 - .pool -_082E5E44: - ldr r0, =rfu_CB_sendData2 - bl STWI_set_Callback_M - bl STWI_send_MS_ChangeREQ -_082E5E4E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_sendData - - thumb_func_start rfu_CB_sendData -rfu_CB_sendData: @ 82E5E58 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _082E5EC2 - movs r6, 0 - ldr r0, =0x00008020 - mov r8, r0 -_082E5E6C: - ldr r0, =gRfuSlotStatusUNI - lsls r2, r6, 2 - adds r0, r2, r0 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - cmp r0, 0 - beq _082E5E7E - movs r0, 0 - strb r0, [r1, 0x2] -_082E5E7E: - ldr r0, =gRfuSlotStatusNI - adds r0, r2, r0 - ldr r4, [r0] - ldrh r0, [r4] - cmp r0, r8 - bne _082E5EB8 - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - bl rfu_STC_releaseFrame - ldr r5, =gRfuLinkStatus - ldr r2, [r5] - ldrb r1, [r4, 0x1A] - ldrb r0, [r2, 0x4] - bics r0, r1 - strb r0, [r2, 0x4] - adds r0, r4, 0 - adds r0, 0x2D - ldrb r3, [r0] - cmp r3, 0x1 - bne _082E5EB4 - ldr r1, [r5] - lsls r3, r6 - ldrb r0, [r1, 0x7] - orrs r3, r0 - strb r3, [r1, 0x7] -_082E5EB4: - movs r0, 0x26 - strh r0, [r4] -_082E5EB8: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _082E5E6C -_082E5EC2: - ldr r0, =gRfuLinkStatus - ldr r1, [r0] - ldrb r0, [r1, 0xE] - movs r0, 0 - strb r0, [r1, 0xE] - movs r0, 0x24 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_sendData - - thumb_func_start rfu_CB_sendData2 -rfu_CB_sendData2: @ 82E5EF0 - push {lr} - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x24 - bl rfu_STC_REQ_callback - pop {r0} - bx r0 - thumb_func_end rfu_CB_sendData2 - - thumb_func_start sub_82E5F00 -sub_82E5F00: @ 82E5F00 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - cmp r1, 0 - beq _082E5F16 - movs r0, 0x24 - bl rfu_STC_REQ_callback - b _082E5F22 -_082E5F16: - cmp r0, 0xFF - bne _082E5F22 - movs r0, 0xFF - movs r1, 0 - bl rfu_STC_REQ_callback -_082E5F22: - pop {r0} - bx r0 - thumb_func_end sub_82E5F00 - - thumb_func_start rfu_constructSendLLFrame -rfu_constructSendLLFrame: @ 82E5F28 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2] - cmp r0, 0xFF - bne _082E5F40 - b _082E6044 -_082E5F40: - ldrb r0, [r2, 0x4] - ldrb r1, [r2, 0x5] - orrs r0, r1 - ldrb r1, [r2, 0x6] - orrs r0, r1 - cmp r0, 0 - beq _082E6044 - ldrb r0, [r2, 0xE] - movs r0, 0 - strb r0, [r2, 0xE] - mov r8, r0 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0x6C - str r0, [sp] - movs r6, 0 - movs r0, 0x80 - lsls r0, 8 - mov r9, r0 - ldr r1, =0x00008024 - mov r10, r1 -_082E5F6A: - movs r5, 0 - ldr r0, =gRfuSlotStatusNI - lsls r7, r6, 2 - adds r4, r7, r0 - ldr r2, [r4] - ldrh r1, [r2] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - beq _082E5F8A - adds r0, r6, 0 - mov r1, sp - bl rfu_STC_NI_constructLLSF - lsls r0, 16 - lsrs r5, r0, 16 -_082E5F8A: - ldr r2, [r4] - ldrh r1, [r2, 0x34] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - beq _082E5FA6 - adds r2, 0x34 - adds r0, r6, 0 - mov r1, sp - bl rfu_STC_NI_constructLLSF - lsls r0, 16 - lsrs r0, 16 - adds r5, r0 -_082E5FA6: - ldr r0, =gRfuSlotStatusUNI - adds r0, r7, r0 - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, r10 - bne _082E5FC0 - adds r0, r6, 0 - mov r1, sp - bl rfu_STC_UNI_constructLLSF - lsls r0, 16 - lsrs r0, 16 - adds r5, r0 -_082E5FC0: - cmp r5, 0 - beq _082E5FF4 - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _082E5FE8 - add r8, r5 - b _082E5FF4 - .align 2, 0 - .pool -_082E5FE8: - adds r0, r7, r6 - adds r0, 0x8 - lsls r5, r0 - mov r2, r8 - orrs r2, r5 - mov r8, r2 -_082E5FF4: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _082E5F6A - ldr r6, =gRfuStatic - mov r0, r8 - cmp r0, 0 - beq _082E603E - ldr r2, [sp] - movs r0, 0x3 - ands r0, r2 - ldr r5, =gRfuLinkStatus - ldr r1, =gRfuFixed - cmp r0, 0 - beq _082E6026 - movs r4, 0 - movs r3, 0x3 -_082E6018: - strb r4, [r2] - adds r0, r2, 0x1 - str r0, [sp] - adds r2, r0, 0 - ands r0, r3 - cmp r0, 0 - bne _082E6018 -_082E6026: - ldr r0, [r1] - mov r2, r8 - str r2, [r0, 0x68] - ldr r0, [r5] - ldrb r0, [r0] - cmp r0, 0 - bne _082E603E - ldr r0, [sp] - subs r0, 0x6C - ldr r1, [r1] - subs r0, r1 - mov r8, r0 -_082E603E: - ldr r0, [r6] - mov r1, r8 - str r1, [r0, 0x24] -_082E6044: - 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 - .pool - thumb_func_end rfu_constructSendLLFrame - - thumb_func_start rfu_STC_NI_constructLLSF -rfu_STC_NI_constructLLSF: @ 82E6060 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - mov r12, r1 - adds r4, r2, 0 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r2, =gRfuLinkStatus - ldr r0, [r2] - ldrb r0, [r0] - lsls r0, 4 - ldr r1, =llsf_struct - adds r0, r1 - mov r8, r0 - ldrh r1, [r4] - ldr r0, =0x00008022 - cmp r1, r0 - bne _082E60CA - adds r3, r4, 0 - adds r3, 0x20 - ldrb r1, [r3] - lsls r1, 2 - adds r5, r4, 0x4 - adds r1, r5, r1 - ldr r2, [r4, 0x28] - ldr r0, [r4, 0x30] - adds r2, r0 - ldr r0, [r1] - adds r6, r3, 0 - cmp r0, r2 - bcc _082E60CA - movs r7, 0 -_082E60A8: - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _082E60B8 - strb r7, [r6] -_082E60B8: - ldrb r1, [r3] - lsls r1, 2 - adds r1, r5, r1 - ldr r2, [r4, 0x28] - ldr r0, [r4, 0x30] - adds r2, r0 - ldr r0, [r1] - cmp r0, r2 - bcs _082E60A8 -_082E60CA: - ldrh r1, [r4] - movs r0, 0x40 - ands r0, r1 - mov r9, r1 - cmp r0, 0 - beq _082E60E8 - movs r5, 0 - b _082E612C - .align 2, 0 - .pool -_082E60E8: - ldr r0, =0x00008022 - cmp r9, r0 - bne _082E611C - adds r3, r4, 0 - adds r3, 0x20 - ldrb r0, [r3] - lsls r0, 2 - adds r1, r4, 0x4 - adds r1, r0 - ldrh r7, [r4, 0x2E] - ldr r5, [r1] - adds r2, r5, r7 - ldr r1, [r4, 0x28] - ldr r0, [r4, 0x30] - adds r0, r1, r0 - adds r6, r3, 0 - cmp r2, r0 - bls _082E6118 - subs r0, r5 - lsls r0, 16 - lsrs r5, r0, 16 - b _082E6130 - .align 2, 0 - .pool -_082E6118: - adds r5, r7, 0 - b _082E6130 -_082E611C: - ldrh r2, [r4, 0x2E] - ldr r0, [r4, 0x14] - cmp r0, r2 - bcc _082E6128 - adds r5, r2, 0 - b _082E612C -_082E6128: - lsls r0, 16 - lsrs r5, r0, 16 -_082E612C: - adds r6, r4, 0 - adds r6, 0x20 -_082E6130: - movs r3, 0xF - mov r0, r9 - ands r3, r0 - mov r1, r8 - ldrb r1, [r1, 0x3] - lsls r3, r1 - ldrb r0, [r4, 0x1F] - mov r2, r8 - ldrb r2, [r2, 0x4] - lsls r0, r2 - orrs r3, r0 - ldrb r1, [r6] - adds r0, r1, 0 - mov r7, r8 - ldrb r7, [r7, 0x5] - lsls r0, r7 - orrs r3, r0 - adds r0, r4, 0 - adds r0, 0x21 - adds r0, r1 - ldrb r0, [r0] - mov r1, r8 - ldrb r1, [r1, 0x6] - lsls r0, r1 - orrs r3, r0 - orrs r3, r5 - str r3, [sp] - ldr r2, =gRfuLinkStatus - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0x1 - bne _082E6178 - ldrb r0, [r4, 0x1A] - lsls r0, 18 - orrs r3, r0 - str r3, [sp] -_082E6178: - mov r2, sp - movs r3, 0 - mov r7, r8 - ldrb r7, [r7] - cmp r3, r7 - bcs _082E61A2 -_082E6184: - mov r0, r12 - ldr r1, [r0] - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r1, 0x1 - mov r7, r12 - str r1, [r7] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - mov r0, r8 - ldrb r0, [r0] - cmp r3, r0 - bcc _082E6184 -_082E61A2: - cmp r5, 0 - beq _082E61C2 - ldrb r1, [r6] - lsls r1, 2 - adds r0, r4, 0x4 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x4] - ldr r0, =gRfuFixed - ldr r1, [r0] - add r0, sp, 0x4 - ldr r3, [r1, 0x4] - mov r1, r12 - adds r2, r5, 0 - bl _call_via_r3 -_082E61C2: - ldrh r1, [r4] - ldr r0, =0x00008022 - cmp r1, r0 - bne _082E61DC - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _082E61DC - movs r0, 0 - strb r0, [r6] -_082E61DC: - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r1, [r2] - cmp r1, 0x1 - bne _082E61F8 - ldrb r0, [r2, 0xE] - strb r1, [r2, 0xE] - b _082E6206 - .align 2, 0 - .pool -_082E61F8: - movs r0, 0x1 - mov r1, r10 - lsls r0, r1 - ldrb r1, [r2, 0xE] - orrs r0, r1 - ldrb r1, [r2, 0xE] - strb r0, [r2, 0xE] -_082E6206: - mov r2, r8 - ldrb r0, [r2] - adds r0, r5, r0 - lsls r0, 16 - lsrs r0, 16 - 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 rfu_STC_NI_constructLLSF - - thumb_func_start rfu_STC_UNI_constructLLSF -rfu_STC_UNI_constructLLSF: @ 82E6220 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r6, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, =gRfuSlotStatusUNI - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _082E6244 - ldrb r0, [r4, 0x3] - cmp r0, 0 - bne _082E624C -_082E6244: - movs r0, 0 - b _082E62E8 - .align 2, 0 - .pool -_082E624C: - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2] - lsls r0, 4 - ldr r1, =llsf_struct - adds r5, r0, r1 - ldrh r0, [r4] - movs r1, 0xF - ands r1, r0 - ldrb r0, [r5, 0x3] - lsls r1, r0 - ldrh r0, [r4, 0x4] - orrs r1, r0 - str r1, [sp] - ldrb r0, [r2] - cmp r0, 0x1 - bne _082E6276 - ldrb r0, [r4, 0x3] - lsls r0, 18 - orrs r1, r0 - str r1, [sp] -_082E6276: - mov r2, sp - movs r3, 0 - ldr r1, =gRfuFixed - mov r12, r1 - add r7, sp, 0x4 - ldrb r0, [r5] - cmp r3, r0 - bcs _082E629E -_082E6286: - ldr r1, [r6] - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r1, 0x1 - str r1, [r6] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r1, [r5] - cmp r3, r1 - bcc _082E6286 -_082E629E: - ldr r0, [r4, 0x8] - str r0, [sp, 0x4] - mov r2, r12 - ldr r0, [r2] - ldrh r2, [r4, 0x4] - ldr r3, [r0, 0x4] - adds r0, r7, 0 - adds r1, r6, 0 - bl _call_via_r3 - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2] - cmp r0, 0x1 - bne _082E62D0 - ldrb r0, [r2, 0xE] - movs r0, 0x10 - b _082E62DC - .align 2, 0 - .pool -_082E62D0: - movs r0, 0x10 - mov r1, r8 - lsls r0, r1 - ldrb r1, [r2, 0xE] - orrs r0, r1 - ldrb r1, [r2, 0xE] -_082E62DC: - strb r0, [r2, 0xE] - ldrh r0, [r4, 0x4] - ldrb r5, [r5] - adds r0, r5 - lsls r0, 16 - lsrs r0, 16 -_082E62E8: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end rfu_STC_UNI_constructLLSF - - thumb_func_start rfu_REQ_recvData -rfu_REQ_recvData: @ 82E62F4 - push {r4,lr} - ldr r0, =gRfuLinkStatus - ldr r4, [r0] - ldrb r0, [r4] - cmp r0, 0xFF - beq _082E6320 - ldr r2, =gRfuStatic - ldr r3, [r2] - ldrb r0, [r4, 0x4] - ldrb r1, [r4, 0x5] - orrs r0, r1 - ldrb r1, [r4, 0x6] - orrs r0, r1 - movs r1, 0 - strb r0, [r3, 0x3] - ldr r0, [r2] - strb r1, [r0, 0x4] - ldr r0, =rfu_CB_recvData - bl STWI_set_Callback_M - bl STWI_send_DataRxREQ -_082E6320: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_recvData - - thumb_func_start rfu_CB_recvData -rfu_CB_recvData: @ 82E6334 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - lsrs r7, r1, 16 - cmp r7, 0 - bne _082E63F8 - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0 - beq _082E63F8 - ldr r0, =gRfuStatic - ldr r0, [r0] - strb r7, [r0, 0x1] - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0] - cmp r0, 0x1 - bne _082E637C - bl rfu_STC_PARENT_analyzeRecvPacket - b _082E6380 - .align 2, 0 - .pool -_082E637C: - bl rfu_STC_CHILD_analyzeRecvPacket -_082E6380: - movs r6, 0 - ldr r0, =0x00008043 - mov r8, r0 - ldr r3, =gRfuLinkStatus -_082E6388: - ldr r0, =gRfuSlotStatusNI - lsls r1, r6, 2 - adds r1, r0 - ldr r4, [r1] - ldrh r0, [r4, 0x34] - cmp r0, r8 - bne _082E63DA - ldr r0, =gRfuStatic - ldr r0, [r0] - ldrb r0, [r0, 0x1] - asrs r0, r6 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _082E63DA - adds r5, r4, 0 - adds r5, 0x34 - adds r0, r4, 0 - adds r0, 0x61 - ldrb r2, [r0] - cmp r2, 0x1 - bne _082E63BE - ldr r1, [r3] - lsls r2, r6 - ldrb r0, [r1, 0x7] - orrs r2, r0 - strb r2, [r1, 0x7] -_082E63BE: - adds r0, r6, 0 - movs r1, 0x1 - adds r2, r5, 0 - str r3, [sp] - bl rfu_STC_releaseFrame - ldr r3, [sp] - ldr r2, [r3] - ldrb r1, [r5, 0x1A] - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x46 - strh r0, [r4, 0x34] -_082E63DA: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x3 - bls _082E6388 - ldr r0, =gRfuStatic - ldr r1, [r0] - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _082E63F8 - adds r7, r0, 0 - movs r1, 0xE0 - lsls r1, 3 - adds r0, r1, 0 - orrs r7, r0 -_082E63F8: - mov r0, r9 - adds r1, r7, 0 - bl rfu_STC_REQ_callback - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_CB_recvData - - thumb_func_start rfu_STC_PARENT_analyzeRecvPacket -rfu_STC_PARENT_analyzeRecvPacket: @ 82E6420 - push {r4-r7,lr} - sub sp, 0x4 - ldr r1, =gRfuFixed - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - ldr r0, [r0, 0x4] - lsrs r3, r0, 8 - movs r5, 0 - mov r12, r1 - movs r7, 0x1F - ldr r4, =gRfuStatic - movs r6, 0x1 -_082E643A: - mov r0, sp - adds r1, r0, r5 - adds r0, r3, 0 - ands r0, r7 - strb r0, [r1] - lsrs r3, 5 - cmp r0, 0 - bne _082E6456 - ldr r0, [r4] - adds r1, r6, 0 - lsls r1, r5 - ldrb r2, [r0, 0x1] - orrs r1, r2 - strb r1, [r0, 0x1] -_082E6456: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _082E643A - mov r1, r12 - ldr r0, [r1] - adds r0, 0xDC - ldr r0, [r0] - adds r6, r0, 0 - adds r6, 0x8 - movs r5, 0 -_082E646E: - mov r0, sp - adds r1, r0, r5 - ldrb r0, [r1] - adds r7, r5, 0x1 - cmp r0, 0 - beq _082E64A0 - adds r4, r1, 0 -_082E647C: - ldrb r2, [r4] - adds r0, r5, 0 - adds r1, r6, 0 - bl rfu_STC_analyzeLLSF - lsls r0, 24 - lsrs r0, 24 - adds r6, r0 - ldrb r1, [r4] - subs r1, r0 - strb r1, [r4] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _082E64A0 - lsls r0, r1, 24 - cmp r0, 0 - bne _082E647C -_082E64A0: - lsls r0, r7, 24 - lsrs r5, r0, 24 - cmp r5, 0x3 - bls _082E646E - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_PARENT_analyzeRecvPacket - - thumb_func_start rfu_STC_CHILD_analyzeRecvPacket -rfu_STC_CHILD_analyzeRecvPacket: @ 82E64B8 - push {r4-r6,lr} - ldr r0, =gRfuFixed - ldr r0, [r0] - adds r0, 0xDC - ldr r1, [r0] - ldrh r0, [r1, 0x4] - movs r4, 0x7F - ands r4, r0 - adds r5, r1, 0 - adds r5, 0x8 - cmp r4, 0 - bne _082E64D8 - ldr r0, =gRfuStatic - ldr r1, [r0] - movs r0, 0xF - strb r0, [r1, 0x1] -_082E64D8: - movs r0, 0x80 - lsls r0, 8 - adds r6, r0, 0 -_082E64DE: - cmp r4, 0 - beq _082E6500 - movs r0, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl rfu_STC_analyzeLLSF - lsls r0, 16 - lsrs r0, 16 - adds r5, r0 - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - ands r0, r6 - cmp r0, 0 - beq _082E64DE -_082E6500: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_CHILD_analyzeRecvPacket - - thumb_func_start rfu_STC_analyzeLLSF -rfu_STC_analyzeLLSF: @ 82E6510 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r7, r1, 0 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r2, 16 - lsrs r3, r2, 16 - ldr r2, =gRfuLinkStatus - ldr r0, [r2] - ldrb r0, [r0] - mvns r0, r0 - movs r1, 0x1 - ands r0, r1 - lsls r0, 4 - ldr r1, =llsf_struct - adds r6, r0, r1 - ldrb r0, [r6] - cmp r3, r0 - bcs _082E654C - adds r0, r3, 0 - b _082E673E - .align 2, 0 - .pool -_082E654C: - movs r5, 0 - movs r4, 0 - ldrb r3, [r6, 0x1] - ldrb r1, [r6, 0x7] - mov r8, r1 - ldr r2, [sp] - mov r9, r2 - cmp r4, r0 - bcs _082E6574 - adds r2, r0, 0 -_082E6560: - ldrb r0, [r7] - lsls r1, r4, 3 - lsls r0, r1 - orrs r5, r0 - adds r7, 0x1 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r2 - bcc _082E6560 -_082E6574: - adds r0, r5, 0 - lsrs r0, r3 - mov r3, r8 - ands r0, r3 - ldr r1, =0xffffff00 - mov r10, r1 - mov r3, r10 - mov r2, r9 - ands r3, r2 - orrs r3, r0 - str r3, [sp] - adds r0, r5, 0 - ldrb r1, [r6, 0x2] - lsrs r0, r1 - ldrb r1, [r6, 0x8] - ands r0, r1 - lsls r0, 8 - ldr r4, =0xffff00ff - adds r2, r4, 0 - ands r2, r3 - orrs r2, r0 - str r2, [sp] - adds r0, r5, 0 - ldrb r3, [r6, 0x3] - lsrs r0, r3 - ldrb r1, [r6, 0x9] - ands r0, r1 - lsls r0, 16 - ldr r3, =0xff00ffff - ands r3, r2 - orrs r3, r0 - str r3, [sp] - adds r0, r5, 0 - ldrb r1, [r6, 0x4] - lsrs r0, r1 - ldrb r1, [r6, 0xA] - ands r0, r1 - lsls r0, 24 - ldr r2, =0x00ffffff - mov r8, r2 - mov r1, r8 - ands r1, r3 - orrs r1, r0 - mov r8, r1 - str r1, [sp] - adds r1, r5, 0 - ldrb r2, [r6, 0x5] - lsrs r1, r2 - ldrb r0, [r6, 0xB] - ands r1, r0 - mov r9, sp - ldr r2, [sp, 0x4] - mov r3, r10 - ands r2, r3 - orrs r2, r1 - str r2, [sp, 0x4] - adds r0, r5, 0 - ldrb r1, [r6, 0x6] - lsrs r0, r1 - ldrb r1, [r6, 0xC] - ands r0, r1 - lsls r0, 8 - ands r4, r2 - orrs r4, r0 - str r4, [sp, 0x4] - ldrh r0, [r6, 0xE] - ands r5, r0 - lsls r1, r5, 16 - ldr r0, =0x0000ffff - ands r0, r4 - orrs r0, r1 - str r0, [sp, 0x4] - lsrs r0, 16 - ldrb r6, [r6] - adds r0, r6 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - mov r0, sp - ldrb r0, [r0] - cmp r0, 0 - beq _082E661A - b _082E673C -_082E661A: - ldr r2, =gRfuLinkStatus - ldr r3, [r2] - ldrb r2, [r3] - cmp r2, 0x1 - bne _082E66D8 - ldrb r0, [r3, 0x2] - mov r5, r12 - asrs r0, r5 - ands r0, r2 - cmp r0, 0 - bne _082E6632 - b _082E673C -_082E6632: - mov r1, r8 - lsrs r0, r1, 16 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _082E6664 - mov r0, r12 - mov r1, sp - adds r2, r7, 0 - bl rfu_STC_UNI_receive - b _082E673C - .align 2, 0 - .pool -_082E6664: - mov r5, r9 - ldrb r0, [r5, 0x3] - cmp r0, 0 - bne _082E6678 - mov r0, r12 - mov r1, sp - adds r2, r7, 0 - bl rfu_STC_NI_receive_Receiver - b _082E673C -_082E6678: - movs r4, 0 - ldr r1, =gRfuSlotStatusNI - ldr r0, [r1] - ldrb r0, [r0, 0x1A] - mov r5, r12 - asrs r0, r5 - ands r0, r2 - cmp r0, 0 - beq _082E6694 - ldrb r0, [r3, 0x4] - b _082E66BA - .align 2, 0 - .pool -_082E6694: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bhi _082E673C - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - ldrb r0, [r0, 0x1A] - mov r2, r12 - asrs r0, r2 - movs r2, 0x1 - ands r0, r2 - cmp r0, 0 - beq _082E6694 - ldr r3, =gRfuLinkStatus - ldr r0, [r3] - ldrb r0, [r0, 0x4] - mov r5, r12 -_082E66BA: - asrs r0, r5 - ands r0, r2 - cmp r0, 0 - beq _082E6694 - cmp r4, 0x3 - bhi _082E673C - adds r0, r4, 0 - mov r1, r12 - mov r2, sp - adds r3, r7, 0 - bl rfu_STC_NI_receive_Sender - b _082E673C - .align 2, 0 - .pool -_082E66D8: - ldrb r1, [r3, 0x2] - mov r2, r9 - ldrb r0, [r2, 0x1] - adds r5, r1, 0 - ands r5, r0 - cmp r5, 0 - beq _082E673C - movs r4, 0 - movs r6, 0x1 -_082E66EA: - adds r0, r5, 0 - asrs r0, r4 - ands r0, r6 - cmp r0, 0 - beq _082E6732 - mov r1, sp - ldrb r0, [r1, 0x2] - cmp r0, 0x4 - bne _082E6706 - adds r0, r4, 0 - adds r2, r7, 0 - bl rfu_STC_UNI_receive - b _082E6732 -_082E6706: - ldrb r0, [r1, 0x3] - cmp r0, 0 - bne _082E6718 - adds r0, r4, 0 - mov r1, sp - adds r2, r7, 0 - bl rfu_STC_NI_receive_Receiver - b _082E6732 -_082E6718: - ldr r0, =gRfuLinkStatus - ldr r0, [r0] - ldrb r0, [r0, 0x4] - asrs r0, r4 - ands r0, r6 - cmp r0, 0 - beq _082E6732 - adds r0, r4, 0 - adds r1, r4, 0 - mov r2, sp - adds r3, r7, 0 - bl rfu_STC_NI_receive_Sender -_082E6732: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _082E66EA -_082E673C: - mov r0, r10 -_082E673E: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end rfu_STC_analyzeLLSF - - thumb_func_start rfu_STC_UNI_receive -rfu_STC_UNI_receive: @ 82E6754 - push {r4-r7,lr} - sub sp, 0x8 - adds r6, r1, 0 - str r2, [sp] - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, =gRfuSlotStatusUNI - lsls r1, r7, 2 - adds r1, r2 - ldr r3, [r1] - adds r5, r3, 0 - adds r5, 0xC - movs r4, 0 - movs r0, 0 - strh r0, [r5, 0x2] - ldr r0, [r1] - ldr r0, [r0, 0x18] - adds r1, r2, 0 - ldrh r2, [r6, 0x6] - cmp r0, r2 - bcs _082E6790 - movs r0, 0x49 - strh r0, [r3, 0xC] - ldr r0, =0x00000701 - strh r0, [r5, 0x2] - b _082E67DE - .align 2, 0 - .pool -_082E6790: - ldrb r0, [r5, 0x7] - cmp r0, 0 - beq _082E67A8 - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _082E67B4 - ldr r0, =0x00000709 - strh r0, [r5, 0x2] - b _082E67DE - .align 2, 0 - .pool -_082E67A8: - ldrb r0, [r5, 0x6] - cmp r0, 0 - beq _082E67B4 - movs r0, 0xE1 - lsls r0, 3 - strh r0, [r5, 0x2] -_082E67B4: - movs r4, 0 - ldr r0, =0x00008042 - strh r0, [r5] - ldrh r0, [r6, 0x6] - strh r0, [r5, 0x4] - ldrh r2, [r6, 0x6] - lsls r0, r7, 2 - adds r0, r1 - ldr r0, [r0] - ldr r0, [r0, 0x14] - str r0, [sp, 0x4] - ldr r0, =gRfuFixed - ldr r0, [r0] - add r1, sp, 0x4 - ldr r3, [r0, 0x4] - mov r0, sp - bl _call_via_r3 - movs r0, 0x1 - strb r0, [r5, 0x6] - strh r4, [r5] -_082E67DE: - ldrh r0, [r5, 0x2] - cmp r0, 0 - beq _082E67F2 - ldr r0, =gRfuStatic - ldr r2, [r0] - movs r0, 0x10 - lsls r0, r7 - ldrb r1, [r2, 0x4] - orrs r0, r1 - strb r0, [r2, 0x4] -_082E67F2: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_UNI_receive - - thumb_func_start rfu_STC_NI_receive_Sender -rfu_STC_NI_receive_Sender: @ 82E6808 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r2, 0 - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r1, =gRfuSlotStatusNI - lsrs r0, 22 - adds r0, r1 - ldr r0, [r0] - mov r12, r0 - ldrh r0, [r0] - mov r9, r0 - mov r0, r12 - adds r0, 0x21 - ldrb r2, [r6, 0x4] - adds r0, r2 - ldrb r0, [r0] - str r0, [sp] - ldrb r2, [r6, 0x2] - cmp r2, 0x2 - bne _082E6844 - ldr r0, =0x00008022 - cmp r9, r0 - beq _082E685E -_082E6844: - cmp r2, 0x1 - bne _082E684E - ldr r0, =0x00008021 - cmp r9, r0 - beq _082E685E -_082E684E: - movs r3, 0x1B - add r3, r12 - mov r8, r3 - cmp r2, 0x3 - bne _082E6882 - ldr r0, =0x00008023 - cmp r9, r0 - bne _082E6882 -_082E685E: - ldrb r1, [r6, 0x4] - mov r0, r12 - adds r0, 0x21 - adds r0, r1 - ldrb r0, [r0] - movs r7, 0x1B - add r7, r12 - mov r8, r7 - ldrb r2, [r6, 0x5] - cmp r0, r2 - bne _082E6882 - adds r0, r7, r1 - movs r1, 0x1 - mov r3, r10 - lsls r1, r3 - ldrb r2, [r0] - orrs r1, r2 - strb r1, [r0] -_082E6882: - ldrb r2, [r6, 0x4] - mov r7, r8 - adds r0, r7, r2 - ldrb r0, [r0] - mov r3, r12 - ldrb r1, [r3, 0x1A] - ands r0, r1 - cmp r0, r1 - bne _082E697E - adds r3, 0x21 - adds r2, r3, r2 - ldrb r0, [r2] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - movs r1, 0 - strb r0, [r2] - ldrb r0, [r6, 0x4] - add r0, r8 - strb r1, [r0] - mov r7, r12 - ldrh r1, [r7] - ldr r2, =0x00007fdf - adds r0, r1, r2 - lsls r0, 16 - lsrs r0, 16 - adds r5, r3, 0 - cmp r0, 0x1 - bhi _082E6970 - ldr r0, =0x00008021 - cmp r1, r0 - bne _082E68E8 - ldrb r1, [r6, 0x4] - lsls r1, 2 - subs r3, 0x1D - adds r1, r3, r1 - ldrh r2, [r7, 0x2E] - ldr r0, [r1] - adds r0, r2 - str r0, [r1] - b _082E68FE - .align 2, 0 - .pool -_082E68E8: - ldrb r2, [r6, 0x4] - lsls r2, 2 - mov r3, r12 - adds r3, 0x4 - adds r2, r3, r2 - mov r7, r12 - ldrh r1, [r7, 0x2E] - lsls r1, 2 - ldr r0, [r2] - adds r0, r1 - str r0, [r2] -_082E68FE: - mov r0, r12 - ldrh r1, [r0, 0x2E] - ldr r0, [r0, 0x14] - subs r0, r1 - mov r1, r12 - str r0, [r1, 0x14] - cmp r0, 0 - beq _082E6912 - cmp r0, 0 - bge _082E697E -_082E6912: - mov r0, r12 - adds r0, 0x20 - movs r2, 0 - strb r2, [r0] - mov r7, r12 - ldrh r1, [r7] - ldr r0, =0x00008021 - cmp r1, r0 - bne _082E695C - movs r4, 0 -_082E6926: - adds r0, r5, r4 - movs r1, 0x1 - strb r1, [r0] - lsls r1, r4, 2 - adds r1, r3, r1 - mov r2, r12 - ldrh r0, [r2, 0x2E] - adds r2, r0, 0 - muls r2, r4 - mov r7, r12 - ldr r0, [r7, 0x28] - adds r0, r2 - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _082E6926 - ldr r0, [r7, 0x30] - str r0, [r7, 0x14] - ldr r0, =0x00008022 - strh r0, [r7] - b _082E697E - .align 2, 0 - .pool -_082E695C: - strb r2, [r5] - mov r0, r12 - str r2, [r0, 0x14] - ldr r0, =0x00008023 - mov r1, r12 - strh r0, [r1] - b _082E697E - .align 2, 0 - .pool -_082E6970: - lsls r1, 16 - ldr r0, =0x80230000 - cmp r1, r0 - bne _082E697E - ldr r0, =0x00008020 - mov r2, r12 - strh r0, [r2] -_082E697E: - mov r3, r12 - ldrh r0, [r3] - cmp r0, r9 - bne _082E69A8 - ldrb r2, [r6, 0x4] - mov r0, r12 - adds r0, 0x21 - adds r0, r2 - ldrb r0, [r0] - ldr r7, [sp] - cmp r0, r7 - bne _082E69A8 - mov r1, r8 - adds r0, r1, r2 - ldrb r0, [r0] - mov r2, r10 - asrs r0, r2 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _082E69CE -_082E69A8: - ldr r4, =0x04000208 - ldrh r2, [r4] - movs r0, 0 - strh r0, [r4] - ldr r0, =gRfuStatic - ldr r3, [r0] - movs r0, 0x10 - mov r7, r10 - lsls r0, r7 - ldrb r1, [r3, 0x2] - orrs r0, r1 - movs r1, 0 - strb r0, [r3, 0x2] - lsls r0, r7, 2 - ldr r3, =gRfuSlotStatusNI - adds r0, r3 - ldr r0, [r0] - strh r1, [r0, 0x2] - strh r2, [r4] -_082E69CE: - 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 - .pool - thumb_func_end rfu_STC_NI_receive_Sender - - thumb_func_start rfu_STC_NI_receive_Receiver -rfu_STC_NI_receive_Receiver: @ 82E69F4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r6, r1, 0 - str r2, [sp] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r7, 0 - ldr r1, =gRfuSlotStatusNI - lsls r0, 2 - adds r0, r1 - ldr r4, [r0] - adds r5, r4, 0 - adds r5, 0x34 - ldrh r0, [r4, 0x34] - mov r9, r0 - ldrb r0, [r6, 0x4] - adds r3, r4, 0 - adds r3, 0x55 - adds r0, r3, r0 - ldrb r0, [r0] - mov r10, r0 - ldrb r0, [r6, 0x2] - cmp r0, 0x3 - bne _082E6A64 - ldr r0, =gRfuStatic - ldr r2, [r0] - movs r0, 0x1 - mov r1, r8 - lsls r0, r1 - ldrb r1, [r2, 0x1] - orrs r0, r1 - strb r0, [r2, 0x1] - ldrh r1, [r4, 0x34] - ldr r0, =0x00008042 - cmp r1, r0 - bne _082E6AAA - adds r0, r4, 0 - adds r0, 0x54 - strb r7, [r0] - strb r7, [r3] - ldr r0, =0x00008043 - strh r0, [r4, 0x34] - b _082E6AAA - .align 2, 0 - .pool -_082E6A64: - cmp r0, 0x2 - bne _082E6A90 - ldr r0, =0x00008041 - cmp r9, r0 - bne _082E6A7C - ldr r0, [r5, 0x14] - cmp r0, 0 - bne _082E6A7C - mov r0, r8 - adds r1, r5, 0 - bl rfu_STC_NI_initSlot_asRecvDataEntity -_082E6A7C: - ldrh r1, [r5] - ldr r0, =0x00008042 - cmp r1, r0 - bne _082E6AAA - b _082E6AAE - .align 2, 0 - .pool -_082E6A90: - cmp r0, 0x1 - bne _082E6AAA - ldr r7, =0x00008041 - cmp r9, r7 - beq _082E6AAE - mov r0, r8 - adds r1, r5, 0 - bl rfu_STC_NI_initSlot_asRecvControllData - ldrh r0, [r4, 0x34] - cmp r0, r7 - bne _082E6B4A - movs r7, 0x1 -_082E6AAA: - cmp r7, 0 - beq _082E6B04 -_082E6AAE: - ldrb r2, [r6, 0x5] - ldrb r3, [r6, 0x4] - adds r4, r5, 0 - adds r4, 0x21 - adds r0, r4, r3 - ldrb r0, [r0] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - cmp r2, r0 - bne _082E6B04 - ldr r0, =gRfuFixed - ldr r0, [r0] - lsls r1, r3, 2 - adds r1, 0x4 - adds r1, r5, r1 - ldrh r2, [r6, 0x6] - ldr r3, [r0, 0x4] - mov r0, sp - bl _call_via_r3 - ldrh r1, [r5] - ldr r0, =0x00008042 - cmp r1, r0 - bne _082E6AF4 - ldrb r0, [r6, 0x4] - lsls r0, 2 - adds r2, r5, 0x4 - adds r2, r0 - ldrh r0, [r5, 0x2E] - lsls r1, r0, 1 - adds r1, r0 - ldr r0, [r2] - adds r0, r1 - str r0, [r2] -_082E6AF4: - ldrh r1, [r6, 0x6] - ldr r0, [r5, 0x14] - subs r0, r1 - str r0, [r5, 0x14] - ldrb r0, [r6, 0x4] - adds r0, r4, r0 - ldrb r1, [r6, 0x5] - strb r1, [r0] -_082E6B04: - ldrh r0, [r5, 0x18] - cmp r0, 0 - bne _082E6B4A - ldrb r0, [r6, 0x4] - adds r1, r5, 0 - adds r1, 0x20 - strb r0, [r1] - ldrh r0, [r5] - cmp r0, r9 - bne _082E6B2C - adds r0, r5, 0 - adds r0, 0x21 - ldrb r2, [r6, 0x4] - adds r0, r2 - ldrb r0, [r0] - cmp r0, r10 - bne _082E6B2C - ldrb r6, [r6, 0x5] - cmp r0, r6 - bne _082E6B4A -_082E6B2C: - ldr r3, =0x04000208 - ldrh r2, [r3] - movs r0, 0 - strh r0, [r3] - ldr r0, =gRfuStatic - ldr r4, [r0] - movs r0, 0x1 - mov r1, r8 - lsls r0, r1 - ldrb r1, [r4, 0x2] - orrs r0, r1 - movs r1, 0 - strb r0, [r4, 0x2] - strh r1, [r5, 0x2] - strh r2, [r3] -_082E6B4A: - 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 - .pool - thumb_func_end rfu_STC_NI_receive_Receiver - - thumb_func_start rfu_STC_NI_initSlot_asRecvControllData -rfu_STC_NI_initSlot_asRecvControllData: @ 82E6B70 - push {r4-r7,lr} - adds r2, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, =gRfuLinkStatus - ldr r3, [r0] - ldrb r1, [r3] - mov r12, r0 - cmp r1, 0x1 - bne _082E6B90 - movs r5, 0x3 - adds r1, r3, 0 - adds r1, 0xF - b _082E6B98 - .align 2, 0 - .pool -_082E6B90: - movs r5, 0x2 - adds r0, r4, 0 - adds r0, 0x10 - adds r1, r3, r0 -_082E6B98: - movs r7, 0x1 - adds r0, r7, 0 - lsls r0, r4 - lsls r0, 24 - lsrs r6, r0, 24 - adds r4, r6, 0 - ldrh r3, [r2] - cmp r3, 0 - bne _082E6BF6 - ldrb r0, [r1] - cmp r0, r5 - bcs _082E6BD0 - movs r0, 0x49 - strh r0, [r2] - ldr r0, =0x00000702 - strh r0, [r2, 0x18] - ldr r0, =gRfuStatic - ldr r2, [r0] - ldrb r1, [r2, 0x4] - adds r0, r6, 0 - orrs r0, r1 - strb r0, [r2, 0x4] - b _082E6BF6 - .align 2, 0 - .pool -_082E6BD0: - strh r3, [r2, 0x18] - ldrb r0, [r1] - subs r0, r5 - strb r0, [r1] - adds r0, r2, 0 - adds r0, 0x2D - str r0, [r2, 0x4] - movs r0, 0x7 - str r0, [r2, 0x14] - strb r7, [r2, 0x1F] - strh r3, [r2, 0x2E] - strb r4, [r2, 0x1A] - ldr r0, =0x00008041 - strh r0, [r2] - mov r0, r12 - ldr r1, [r0] - ldrb r0, [r1, 0x5] - orrs r4, r0 - strb r4, [r1, 0x5] -_082E6BF6: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_NI_initSlot_asRecvControllData - - thumb_func_start rfu_STC_NI_initSlot_asRecvDataEntity -rfu_STC_NI_initSlot_asRecvDataEntity: @ 82E6C00 - push {r4-r7,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - adds r0, 0x2D - ldrb r0, [r0] - cmp r0, 0x1 - bne _082E6C24 - ldr r0, =gRfuLinkStatus - lsls r1, r5, 5 - adds r1, 0x14 - ldr r0, [r0] - adds r0, r1 - adds r0, 0x4 - b _082E6C7A - .align 2, 0 - .pool -_082E6C24: - ldr r1, =gRfuSlotStatusNI - lsls r0, r5, 2 - adds r0, r1 - ldr r2, [r0] - ldr r1, [r4, 0x30] - ldr r0, [r2, 0x6C] - cmp r1, r0 - bls _082E6C78 - movs r1, 0x80 - lsls r1, 17 - lsls r1, r5 - lsrs r1, 24 - ldr r0, =gRfuStatic - ldr r3, [r0] - ldrb r2, [r3, 0x4] - adds r0, r1, 0 - orrs r0, r2 - strb r0, [r3, 0x4] - ldr r0, =gRfuLinkStatus - ldr r2, [r0] - ldrb r0, [r2, 0x5] - bics r0, r1 - strb r0, [r2, 0x5] - ldr r0, =0x00000701 - strh r0, [r4, 0x18] - movs r0, 0x47 - strh r0, [r4] - adds r0, r5, 0 - movs r1, 0x1 - adds r2, r4, 0 - bl rfu_STC_releaseFrame - b _082E6CAC - .align 2, 0 - .pool -_082E6C78: - ldr r0, [r2, 0x68] -_082E6C7A: - str r0, [r4, 0x4] - movs r3, 0 - adds r6, r4, 0 - adds r6, 0x21 - movs r7, 0 - adds r5, r4, 0x4 -_082E6C86: - adds r0, r6, r3 - strb r7, [r0] - lsls r1, r3, 2 - adds r1, r5, r1 - ldrh r0, [r4, 0x2E] - adds r2, r0, 0 - muls r2, r3 - ldr r0, [r4, 0x4] - adds r0, r2 - str r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _082E6C86 - ldr r0, [r4, 0x30] - str r0, [r4, 0x14] - ldr r0, =0x00008042 - strh r0, [r4] -_082E6CAC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_STC_NI_initSlot_asRecvDataEntity - - thumb_func_start rfu_NI_checkCommFailCounter -rfu_NI_checkCommFailCounter: @ 82E6CB8 - push {r4-r7,lr} - ldr r2, =gRfuLinkStatus - ldr r0, [r2] - ldrb r1, [r0, 0x4] - ldrb r0, [r0, 0x5] - orrs r0, r1 - cmp r0, 0 - beq _082E6D3E - ldr r1, =0x04000208 - ldrh r0, [r1] - mov r12, r0 - movs r0, 0 - strh r0, [r1] - ldr r1, =gRfuStatic - ldr r0, [r1] - ldrb r0, [r0, 0x2] - lsrs r7, r0, 4 - movs r3, 0 - adds r6, r1, 0 - adds r5, r2, 0 - ldr r4, =gRfuSlotStatusNI -_082E6CE2: - movs r0, 0x80 - lsls r0, 17 - lsls r0, r3 - lsrs r2, r0, 24 - ldr r0, [r5] - ldrb r0, [r0, 0x4] - ands r0, r2 - cmp r0, 0 - beq _082E6D0A - ldr r0, [r6] - ldrb r0, [r0, 0x2] - ands r0, r2 - cmp r0, 0 - bne _082E6D0A - lsls r0, r3, 2 - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x2] - adds r0, 0x1 - strh r0, [r1, 0x2] -_082E6D0A: - ldr r0, [r5] - ldrb r0, [r0, 0x5] - ands r0, r2 - cmp r0, 0 - beq _082E6D28 - adds r0, r7, 0 - ands r0, r2 - cmp r0, 0 - bne _082E6D28 - lsls r0, r3, 2 - adds r0, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x36] - adds r0, 0x1 - strh r0, [r1, 0x36] -_082E6D28: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _082E6CE2 - ldr r0, [r6] - movs r1, 0 - strb r1, [r0, 0x2] - ldr r0, =0x04000208 - mov r1, r12 - strh r1, [r0] -_082E6D3E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_NI_checkCommFailCounter - - thumb_func_start rfu_REQ_noise -rfu_REQ_noise: @ 82E6D54 - push {lr} - ldr r0, =rfu_STC_REQ_callback - bl STWI_set_Callback_M - movs r0, 0x1 - movs r1, 0 - bl STWI_send_TestModeREQ - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end rfu_REQ_noise - - thumb_func_start AgbRFU_checkID -AgbRFU_checkID: @ 82E6D6C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, =0x04000208 - ldrh r0, [r0] - cmp r0, 0 - bne _082E6D88 - movs r0, 0x1 - negs r0, r0 - b _082E6E08 - .align 2, 0 - .pool -_082E6D88: - ldr r0, =0x04000200 - ldrh r0, [r0] - mov r8, r0 - ldr r4, =gSTWIStatus - ldr r1, [r4] - movs r0, 0xA - str r0, [r1] - ldr r0, =Sio32IDIntr - bl STWI_set_Callback_ID - bl Sio32IDInit - ldr r0, [r4] - ldrb r0, [r0, 0xA] - lsls r0, 2 - ldr r1, =0x04000100 - adds r4, r0, r1 - lsls r0, r5, 27 - lsrs r5, r0, 24 - movs r7, 0 - b _082E6DD6 - .align 2, 0 - .pool -_082E6DC4: - strh r6, [r4, 0x2] - strh r6, [r4] - movs r0, 0x83 - strh r0, [r4, 0x2] -_082E6DCC: - ldrh r0, [r4] - cmp r0, 0x1F - bls _082E6DCC - strh r7, [r4, 0x2] - strh r7, [r4] -_082E6DD6: - subs r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xFF - beq _082E6DEA - bl Sio32IDMain - adds r6, r0, 0 - cmp r6, 0 - beq _082E6DC4 -_082E6DEA: - ldr r1, =0x04000208 - movs r0, 0 - strh r0, [r1] - ldr r0, =0x04000200 - mov r2, r8 - strh r2, [r0] - movs r0, 0x1 - strh r0, [r1] - ldr r0, =gSTWIStatus - ldr r1, [r0] - movs r0, 0 - str r0, [r1] - bl STWI_set_Callback_ID - adds r0, r6, 0 -_082E6E08: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 - .pool - thumb_func_end AgbRFU_checkID - - thumb_func_start Sio32IDInit -Sio32IDInit: @ 82E6E20 - push {r4,r5,lr} - sub sp, 0x4 - ldr r3, =0x04000208 - movs r4, 0 - strh r4, [r3] - ldr r2, =0x04000200 - ldr r0, =gSTWIStatus - ldr r0, [r0] - movs r1, 0x8 - ldrb r0, [r0, 0xA] - lsls r1, r0 - movs r5, 0x80 - orrs r1, r5 - ldrh r0, [r2] - bics r0, r1 - strh r0, [r2] - movs r0, 0x1 - strh r0, [r3] - ldr r0, =0x04000134 - strh r4, [r0] - subs r2, 0xD8 - movs r1, 0x80 - lsls r1, 5 - adds r0, r1, 0 - strh r0, [r2] - ldrh r0, [r2] - movs r3, 0x81 - lsls r3, 7 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] - movs r0, 0 - str r0, [sp] - ldr r1, =gRfuSIO32Id - ldr r2, =0x05000003 - mov r0, sp - bl CpuSet - ldr r0, =0x04000202 - strh r5, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end Sio32IDInit - - thumb_func_start Sio32IDMain -Sio32IDMain: @ 82E6E94 - push {r4-r7,lr} - ldr r0, =gRfuSIO32Id - ldrb r1, [r0, 0x1] - mov r12, r1 - adds r7, r0, 0 - cmp r1, 0 - beq _082E6EAC - cmp r1, 0x1 - beq _082E6EE4 - b _082E6F7C - .align 2, 0 - .pool -_082E6EAC: - movs r6, 0x1 - strb r6, [r7] - ldr r3, =0x04000128 - ldrh r0, [r3] - movs r5, 0x1 - orrs r0, r5 - strh r0, [r3] - ldr r4, =0x04000208 - mov r0, r12 - strh r0, [r4] - ldr r2, =0x04000200 - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] - strh r6, [r4] - strb r5, [r7, 0x1] - ldrb r0, [r3] - orrs r0, r1 - strb r0, [r3] - b _082E6F80 - .align 2, 0 - .pool -_082E6EE4: - ldrh r0, [r7, 0xA] - cmp r0, 0 - bne _082E6F78 - ldrb r0, [r7] - cmp r0, 0x1 - bne _082E6F14 - ldrh r0, [r7, 0x2] - cmp r0, 0 - bne _082E6F80 - ldr r3, =0x04000208 - strh r0, [r3] - ldr r2, =0x04000128 - ldrh r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strh r0, [r2] - mov r1, r12 - strh r1, [r3] - b _082E6F80 - .align 2, 0 - .pool -_082E6F14: - ldrh r1, [r7, 0x4] - ldr r0, =0x00008001 - cmp r1, r0 - beq _082E6F80 - ldrh r6, [r7, 0x2] - cmp r6, 0 - bne _082E6F80 - ldr r4, =0x04000208 - strh r6, [r4] - ldr r3, =0x04000200 - ldrh r1, [r3] - ldr r0, =0x0000ff7f - ands r0, r1 - strh r0, [r3] - mov r7, r12 - strh r7, [r4] - ldr r2, =0x04000128 - strh r6, [r2] - movs r1, 0x80 - lsls r1, 5 - adds r0, r1, 0 - strh r0, [r2] - ldr r0, =0x04000202 - movs r5, 0x80 - strh r5, [r0] - ldrh r0, [r2] - movs r7, 0x81 - lsls r7, 7 - adds r1, r7, 0 - orrs r0, r1 - strh r0, [r2] - strh r6, [r4] - ldrh r0, [r3] - orrs r0, r5 - strh r0, [r3] - mov r0, r12 - strh r0, [r4] - b _082E6F80 - .align 2, 0 - .pool -_082E6F78: - movs r0, 0x2 - strb r0, [r7, 0x1] -_082E6F7C: - ldrh r0, [r7, 0xA] - b _082E6F82 -_082E6F80: - movs r0, 0 -_082E6F82: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end Sio32IDMain - - thumb_func_start Sio32IDIntr -Sio32IDIntr: @ 82E6F88 - push {r4,r5,lr} - ldr r0, =0x04000120 - ldr r5, [r0] - ldr r0, =gRfuSIO32Id - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x1 - beq sub_82E6FA2 - ldr r0, =0x04000128 - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] - thumb_func_end Sio32IDIntr - - non_word_aligned_thumb_func_start sub_82E6FA2 -sub_82E6FA2: @ 82E6FA2 - ldrb r2, [r4] - lsls r1, r2, 4 - adds r0, r5, 0 - lsls r0, r1 - lsrs r1, r0, 16 - movs r0, 0x1 - subs r0, r2 - lsls r0, 4 - lsls r5, r0 - adds r0, r5, 0 - lsrs r5, r0, 16 - ldrh r0, [r4, 0xA] - cmp r0, 0 - bne _082E6FF6 - ldrh r2, [r4, 0x6] - cmp r1, r2 - bne _082E6FF4 - ldrh r3, [r4, 0x2] - cmp r3, 0x3 - bls _082E6FDC - strh r5, [r4, 0xA] - b _082E6FF6 - .align 2, 0 - .pool -_082E6FDC: - ldrh r0, [r4, 0x4] - mvns r0, r0 - lsls r0, 16 - lsrs r0, 16 - cmp r1, r0 - bne _082E6FF6 - mvns r0, r2 - lsls r0, 16 - lsrs r0, 16 - cmp r5, r0 - bne _082E6FF6 - adds r0, r3, 0x1 -_082E6FF4: - strh r0, [r4, 0x2] -_082E6FF6: - ldrh r0, [r4, 0x2] - cmp r0, 0x3 - bhi _082E700C - lsls r0, 1 - ldr r1, =Sio32ConnectionData - adds r0, r1 - ldrh r0, [r0] - b _082E700E - .align 2, 0 - .pool -_082E700C: - ldr r0, =0x00008001 -_082E700E: - strh r0, [r4, 0x4] - mvns r0, r5 - strh r0, [r4, 0x6] - ldr r3, =0x04000120 - ldrh r2, [r4, 0x4] - ldrb r1, [r4] - movs r0, 0x1 - subs r0, r1 - lsls r0, 4 - lsls r2, r0 - ldrh r0, [r4, 0x6] - lsls r1, 4 - lsls r0, r1 - adds r2, r0 - str r2, [r3] - ldrb r0, [r4] - cmp r0, 0x1 - bne _082E705C - ldrh r0, [r4, 0x2] - cmp r0, 0 - bne _082E703E - ldr r0, =0x0000494e - cmp r5, r0 - bne _082E705C -_082E703E: - movs r0, 0 - ldr r1, =0x00000257 -_082E7042: - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, r1 - bls _082E7042 - ldrh r0, [r4, 0xA] - cmp r0, 0 - bne _082E705C - ldr r0, =0x04000128 - ldrh r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strh r1, [r0] -_082E705C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 - .pool - thumb_func_end sub_82E6FA2 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index df79b084d3..071a89bc58 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -461,7 +461,7 @@ #define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L) #define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H) -#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4))) +#define REG_TMCNT(n) (*(vu32 *)(REG_ADDR_TMCNT + ((n) * 4))) #define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4))) #define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4))) #define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT) diff --git a/include/gba/syscall.h b/include/gba/syscall.h index f3382b874c..56cd4ba587 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -45,4 +45,6 @@ void RLUnCompVram(const void *src, void *dest); int MultiBoot(struct MultiBootParam *mp); +s32 Div(s32 num, s32 denom); + #endif // GUARD_GBA_SYSCALL_H diff --git a/ld_script.txt b/ld_script.txt index 7e0eeac3de..6719b69075 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -358,7 +358,7 @@ SECTIONS { src/librfu_intr.o(.text); asm/librfu_intr.o(.text); src/librfu_rfu.o(.text); - asm/librfu.o(.text); + src/librfu_sio32id.o(.text); src/libisagbprn.o(.text); *libagbsyscall.a:ArcTan2.o(.text); *libagbsyscall.a:BgAffineSet.o(.text); diff --git a/src/agb_flash.c b/src/agb_flash.c index 34fb4e84a6..a9cf13d5f4 100644 --- a/src/agb_flash.c +++ b/src/agb_flash.c @@ -74,7 +74,7 @@ u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void)) return 1; sTimerNum = timerNum; - sTimerReg = ®_TMCNT(sTimerNum); + sTimerReg = ®_TMCNT_L(sTimerNum); *intrFunc = FlashTimerIntr; return 0; } diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 7437bcecf6..f5f13cc5d4 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -1,77 +1,2218 @@ -#include "global.h" -#include "main.h" - #include "librfu.h" -// Nonmatching, only register differences -/*u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam) +struct LLSFStruct +{ + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04; + u8 unk05; + u8 unk06; + u8 unk07; + u8 unk08; + u8 unk09; + u8 unk0A; + u8 unk0B; + u8 unk0C; + u16 unk0E; +}; + +struct RfuLocalStruct +{ + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04; + u8 unk05; + u16 unk06; +}; + +static void rfu_CB_defaultCallback(u8, u16); +static void rfu_CB_reset(u8, u16); +static void rfu_CB_configGameData(u8, u16); +static void rfu_CB_stopMode(u8, u16); +static void rfu_CB_startSearchChild(u8, u16); +static void rfu_CB_pollAndEndSearchChild(u8, u16); +static void rfu_CB_startSearchParent(u8, u16); +static void rfu_CB_pollSearchParent(u8, u16); +static void rfu_CB_pollConnectParent(u8, u16); +static void rfu_CB_pollConnectParent(u8, u16); +static void rfu_CB_disconnect(u8, u16); +static void rfu_CB_CHILD_pollConnectRecovery(u8, u16); +static void rfu_CB_sendData(__attribute__((unused)) u8, u16); +static void rfu_CB_sendData2(__attribute__((unused)) u8, u16); +static void rfu_CB_sendData3(u8, u16); +static void rfu_CB_recvData(u8, u16); +static void rfu_enableREQCallback(bool8); +static void rfu_STC_clearAPIVariables(void); +static void rfu_STC_readChildList(void); +static void rfu_STC_readParentCandidateList(void); +static void rfu_STC_REQ_callback(u8, u16); +static void rfu_STC_removeLinkData(u8, u8); +static void rfu_STC_fastCopy(const u8 **, u8 **, s32); +static void rfu_STC_clearLinkStatus(u8); +static void rfu_NI_checkCommFailCounter(void); +static u16 rfu_STC_setSendData_org(u8, u8, u8, const void *, u32); +static void rfu_constructSendLLFrame(void); +static u16 rfu_STC_NI_constructLLSF(u8, u8 **, struct NIComm *); +static u16 rfu_STC_UNI_constructLLSF(u8, u8 **); +static void rfu_STC_PARENT_analyzeRecvPacket(void); +static void rfu_STC_CHILD_analyzeRecvPacket(void); +static u16 rfu_STC_analyzeLLSF(u8, const u8 *, u16); +static void rfu_STC_UNI_receive(u8, const struct RfuLocalStruct *, const u8 *); +static void rfu_STC_NI_receive_Receiver(u8, const struct RfuLocalStruct *, const u8 *); +static void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuLocalStruct *, __attribute__((unused)) const u8 *); +static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *); +static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); + +//struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; +//struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; +//struct RfuLinkStatus *gRfuLinkStatus; +//struct RfuStatic *gRfuStatic; +//struct RfuFixed *gRfuFixed; + +/*static const struct LLSFStruct llsf_struct[2] = { + { + 2, 14, 0, 10, 9, 5, 7, 2, + 0, 15, 1, 3, 3, 0x1f + }, { + 3, 22, 18, 14, 13, 9, 11, 3, + 15, 15, 1, 3, 3, 0x7f + } +}; + +#ifdef EMERALD +static const char lib_ver[] = "RFU_V1026"; +#else +static const char lib_ver[] = "RFU_V1024"; +#endif + +static const char str_checkMbootLL[] = "RFU-MBOOT"; +*/ +extern const struct LLSFStruct llsf_struct[2]; +extern const char str_checkMbootLL[];// = "RFU-MBOOT"; + +u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) { u16 i; - u16 *v13; - u16 *v12; - u16 num; + u16 *dst; + const u16 *src; + u16 r3; - if (((u32)unk0 & 0xF000000) == 0x2000000 && copyInterruptToRam) - { - return 2; - } - - if ((u32)unk0 & 3) - return 2; - - // Nintendo pls, just use a ternary for once + // is in EWRAM? + if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam) + return ERR_RFU_API_BUFF_ADR; + // is not 4-byte aligned? + if ((u32)APIBuffer & 3) + return ERR_RFU_API_BUFF_ADR; if (copyInterruptToRam) { // An assert/debug print may have existed before, ie - // printf("%s %u < %u", "somefile.c:12345", unk1, num) + // printf("%s %u < %u", "somefile.c:12345", buffByteSize, num) // to push this into r3? - num = 0xe64; - if (unk1 < num) - return 1; + r3 = sizeof(struct RfuAPIBuffer); + if (buffByteSize < r3) + return ERR_RFU_API_BUFF_SIZE; } - - if (copyInterruptToRam == FALSE) + if (!copyInterruptToRam) { - num = 0x504; // same as above, this should be r3 not r0 - if (unk1 < num) - return 1; + r3 = 0x504; // same issue as above + if (buffByteSize < r3) + return ERR_RFU_API_BUFF_SIZE; } - gRfuLinkStatus = unk0; - gRfuStatic = unk0 + (0xB4 / sizeof(u32)); - gRfuFixed = (struct RfuFixed*)(unk0 + (0xDC / sizeof(u32))); - gRfuSlotStatusNI[0] = (struct RfuSlotStatusNI*)(unk0 + (0x1BC / sizeof(u32))); - gRfuSlotStatusUNI[0] = (struct RfuSlotStatusUNI*)(unk0 + (0x37C / sizeof(u32))); - - for (i = 1; i < 4; i++, num) + gRfuLinkStatus = &APIBuffer->linkStatus; + gRfuStatic = &APIBuffer->static_; + gRfuFixed = &APIBuffer->fixed; + gRfuSlotStatusNI[0] = &APIBuffer->NI[0]; + gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0]; + for (i = 1; i < RFU_CHILD_MAX; ++i) { - gRfuSlotStatusNI[i] = (struct RfuSlotStatusNI*)&gRfuSlotStatusNI[i-1]->unk_70; - gRfuSlotStatusUNI[i] = (struct RfuSlotStatusUNI*)&gRfuSlotStatusUNI[i-1]->unk_1c; + gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1]; + gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1]; } - - gRfuFixed->unk_dc = (u32)&gRfuSlotStatusUNI[3]->unk_1c; - STWI_init_all(&gRfuSlotStatusUNI[3]->unk_1c, interrupt, copyInterruptToRam); + // TODO: Is it possible to fix the following 2 statements? + // It's equivalent to: + // gRfuFixed->STWIBuffer = &APIBuffer->intr; + // STWI_init_all(&APIBuffer->intr, sioIntrTable_p, copyInterruptToRam); + gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1]; + STWI_init_all((struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1], sioIntrTable_p, copyInterruptToRam); rfu_STC_clearAPIVariables(); - - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - gRfuSlotStatusNI[i]->unk_68 = 0; - gRfuSlotStatusNI[i]->unk_6c = 0; - gRfuSlotStatusUNI[i]->unk_14 = 0; - gRfuSlotStatusUNI[i]->unk_18 = 0; + gRfuSlotStatusNI[i]->recvBuffer = NULL; + gRfuSlotStatusNI[i]->recvBufferSize = 0; + gRfuSlotStatusUNI[i]->recvBuffer = NULL; + gRfuSlotStatusUNI[i]->recvBufferSize = 0; } - - // Not matching, register differences - v12 = (u16*)((u32)&sub_82E53F4 & ~1); - v13 = (u16*)gRfuFixed->unk_8; - - for (i = 47; i != 0xFFFF; i--) + // looks like a macro copying data + do { - *v13 = *v12; - ++v12; - ++v13; - } - - gRfuFixed->unk_4 = (u32)(&gRfuFixed->unk_8[1]); - + src = (const u16 *)((u32)&rfu_STC_fastCopy & 0xFFFFFFFE); + dst = gRfuFixed->fastCopyBuffer; + for (r3 = 0x2F; r3 != 0xFFFF; --r3) // copy rfu_STC_fastCopy function body to buffer + *dst++ = *src++; + gRfuFixed->fastCopyPtr = (void *)gRfuFixed->fastCopyBuffer + 1; + } while (0); return 0; -}*/ +} + +static void rfu_STC_clearAPIVariables(void) +{ + u16 IMEBackup = REG_IME; + u8 i, r4; + + REG_IME = 0; + r4 = gRfuStatic->flags; + CpuFill16(0, gRfuStatic, sizeof(struct RfuStatic)); + gRfuStatic->flags = r4 & 8; + CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); + gRfuLinkStatus->watchInterval = 4; + gRfuStatic->nowWatchInterval = 0; + gRfuLinkStatus->parentChild = MODE_NEUTRAL; + rfu_clearAllSlot(); + gRfuStatic->SCStartFlag = 0; + for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i) + gRfuStatic->cidBak[i] = 0; + REG_IME = IMEBackup; +} + +void rfu_REQ_PARENT_resumeRetransmitAndChange(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_ResumeRetransmitAndChangeREQ(); +} + +u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) +{ + struct RfuIntrStruct *buf; + + *ackFlag = 0; + if (gRfuLinkStatus->parentChild != MODE_PARENT) + return ERR_MODE_NOT_PARENT; + buf = rfu_getSTWIRecvBuffer(); + switch (buf->rxPacketAlloc.rfuPacket8.data[0]) + { + case 40: + case 54: + if (buf->rxPacketAlloc.rfuPacket8.data[1] == 0) + *ackFlag = gRfuLinkStatus->connSlotFlag; + else + *ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4]; + return 0; + default: + return ERR_REQ_CMD_ID; + } +} + +void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p) +{ + STWI_init_timer(timerIntrTable_p, timerNo); +} + +struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void) +{ + return gRfuFixed->STWIBuffer; +} + +void rfu_setMSCCallback(void (*callback)(u16 reqCommandId)) +{ + STWI_set_Callback_S(callback); +} + +void rfu_setREQCallback(void (*callback)(u16 reqCommandId, u16 reqResult)) +{ + gRfuFixed->reqCallback = callback; + rfu_enableREQCallback(callback != NULL); +} + +static void rfu_enableREQCallback(bool8 enable) +{ + if (enable) + gRfuStatic->flags |= 8; + else + gRfuStatic->flags &= 0xF7; +} + +static void rfu_STC_REQ_callback(u8 r5, u16 reqResult) +{ + STWI_set_Callback_M(rfu_CB_defaultCallback); + gRfuStatic->reqResult = reqResult; + if (gRfuStatic->flags & 8) + gRfuFixed->reqCallback(r5, reqResult); +} + +static void rfu_CB_defaultCallback(u8 r0, u16 reqResult) +{ + s32 r5; + u8 i; + + if (r0 == 0xFF) + { + if (gRfuStatic->flags & 8) + gRfuFixed->reqCallback(r0, reqResult); + r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + for (i = 0; i < RFU_CHILD_MAX; ++i) + if ((r5 >> i) & 1) + rfu_STC_removeLinkData(i, 1); + gRfuLinkStatus->parentChild = MODE_NEUTRAL; + } +} + +u16 rfu_waitREQComplete(void) +{ + STWI_poll_CommandEnd(); + return gRfuStatic->reqResult; +} + +void rfu_REQ_RFUStatus(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_SystemStatusREQ(); +} + +u16 rfu_getRFUStatus(u8 *rfuState) +{ + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] != 0x93) + return ERR_REQ_CMD_ID; + if (STWI_poll_CommandEnd() == 0) + *rfuState = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7]; + else + *rfuState = 0xFF; + return 0; +} + +u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) +{ + const char *s1 = str_checkMbootLL; + char *s2 = (char *)0x30000F0; + u16 checksum; + u16 *r2; + u8 i; + + while (*s1 != '\0') + if (*s1++ != *s2++) + return 1; + r2 = (u16 *)0x3000000; + checksum = 0; + for (i = 0; i < 90; ++i) + checksum += *r2++; + if (checksum != *(u16 *)0x30000FA) + return 1; + CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); + gRfuStatic->flags |= 0x80; + return 0; +} + +void rfu_REQ_stopMode(void) +{ + vu32 *timerReg; + + if (REG_IME == 0) + { + rfu_STC_REQ_callback(61, 6); + gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; + } + else + { + AgbRFU_SoftReset(); + rfu_STC_clearAPIVariables(); + if (AgbRFU_checkID(8) == 0x8001) + { + timerReg = ®_TMCNT(gSTWIStatus->timerSelect); + *timerReg = 0; + *timerReg = (TIMER_ENABLE | TIMER_1024CLK) << 16; + while (*timerReg << 16 < 262 << 16) + ; + *timerReg = 0; + STWI_set_Callback_M(rfu_CB_stopMode); + STWI_send_StopModeREQ(); + } + else + { + REG_SIOCNT = SIO_MULTI_MODE; + rfu_STC_REQ_callback(61, 0); + } + } +} + +static void rfu_CB_stopMode(u8 a1, u16 reqResult) +{ + if (reqResult == 0) + REG_SIOCNT = SIO_MULTI_MODE; + rfu_STC_REQ_callback(a1, reqResult); +} + +u32 rfu_REQBN_softReset_and_checkID(void) +{ + u32 r2; + + if (REG_IME == 0) + return ERR_ID_CHECK_IME_DISABLE; + AgbRFU_SoftReset(); + rfu_STC_clearAPIVariables(); + if ((r2 = AgbRFU_checkID(30)) == 0) + REG_SIOCNT = SIO_MULTI_MODE; + return r2; +} + +void rfu_REQ_reset(void) +{ + STWI_set_Callback_M(rfu_CB_reset); + STWI_send_ResetREQ(); +} + +static void rfu_CB_reset(u8 a1, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_clearAPIVariables(); + rfu_STC_REQ_callback(a1, reqResult); +} + +void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_SystemConfigREQ((availSlotFlag & AVAIL_SLOT1) | 0x3C, maxMFrame, mcTimer); + if (mcTimer == 0) + { + gRfuStatic->unk_1a = 1; + } + else + { + u16 IMEBackup = REG_IME; + + REG_IME = 0; + gRfuStatic->unk_1a = Div(600, mcTimer); + REG_IME = IMEBackup; + } +} + +void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname) +{ + u8 sp[16]; + u8 i; + u8 r3; + const u8 *gnameBackup = gname; + const u8 *unameBackup; + + sp[0] = serialNo; + sp[1] = serialNo >> 8; + if (mbootFlag != 0) + sp[1] = (serialNo >> 8) | 0x80; + for (i = 2; i < 15; ++i) + sp[i] = *gname++; + r3 = 0; + unameBackup = uname; + for (i = 0; i < 8; ++i) + { + r3 += *unameBackup++; + r3 += *gnameBackup++; + } + sp[15] = ~r3; + if (mbootFlag != 0) + sp[14] = 0; + STWI_set_Callback_M(rfu_CB_configGameData); + STWI_send_GameConfigREQ(sp, uname); +} + +static void rfu_CB_configGameData(u8 ip, u16 r7) +{ + s32 r2, r3; + u8 *r4; + u8 i; + u8 *r1; + + if (r7 == 0) + { + r1 = gSTWIStatus->txPacket->rfuPacket8.data; + r2 = gRfuLinkStatus->my.serialNo = r1[4]; + gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2; + r4 = &r1[6]; + if (gRfuLinkStatus->my.serialNo & 0x8000) + { + gRfuLinkStatus->my.serialNo = gRfuLinkStatus->my.serialNo ^ 0x8000; + gRfuLinkStatus->my.mbootFlag = 1; + } + else + { + gRfuLinkStatus->my.mbootFlag = 0; + } + for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i) + gRfuLinkStatus->my.gname[i] = *r4++; + ++r4; + for (i = 0; i < RFU_USER_NAME_LENGTH; ++i) + gRfuLinkStatus->my.uname[i] = *r4++; + } + rfu_STC_REQ_callback(ip, r7); +} + +void rfu_REQ_startSearchChild(void) +{ + u16 r1; + + for (r1 = 0; r1 < 4; ++r1) + gRfuStatic->lsFixedCount[r1] = 0; + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SystemStatusREQ(); + r1 = STWI_poll_CommandEnd(); + if (r1 == 0) + { + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + rfu_STC_clearLinkStatus(1); + } + else + { + rfu_STC_REQ_callback(25, r1); + } + STWI_set_Callback_M(rfu_CB_startSearchChild); + STWI_send_SC_StartREQ(); +} + +static void rfu_CB_startSearchChild(u8 r3, u16 reqResult) +{ + if (reqResult == 0) + gRfuStatic->SCStartFlag = 1; + rfu_STC_REQ_callback(r3, reqResult); +} + +static void rfu_STC_clearLinkStatus(u8 r4) +{ + u8 i; + + rfu_clearAllSlot(); + if (r4 != 0) + { + CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); + gRfuLinkStatus->findParentCount = 0; + } + for (i = 0; i < RFU_CHILD_MAX; ++i) + gRfuLinkStatus->strength[i] = 0; + gRfuLinkStatus->connCount = 0; + gRfuLinkStatus->connSlotFlag = 0; + gRfuLinkStatus->linkLossSlotFlag = 0; + gRfuLinkStatus->getNameFlag = 0; +} + +void rfu_REQ_pollSearchChild(void) +{ + STWI_set_Callback_M(rfu_CB_pollAndEndSearchChild); + STWI_send_SC_PollingREQ(); +} + +void rfu_REQ_endSearchChild(void) +{ + STWI_set_Callback_M(rfu_CB_pollAndEndSearchChild); + STWI_send_SC_EndREQ(); +} + +static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_readChildList(); + if (r4 == 26) + { + if (gRfuLinkStatus->my.id == 0) + { + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SystemStatusREQ(); + if (STWI_poll_CommandEnd() == 0) + gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + } + } + else if (r4 == 27) + { + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + gRfuLinkStatus->my.id = 0; + gRfuStatic->SCStartFlag = 0; + } + rfu_STC_REQ_callback(r4, reqResult); +} + +static void rfu_STC_readChildList(void) +{ + u32 r5; + u8 r8 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]; + u8 *r4; + u8 i; + u8 r2; + + for (r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + r8 != 0; + r4 += 4) + { + r2 = r4[2]; + if (r2 < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1)) + { + gRfuStatic->lsFixedCount[r2] = 0xF0; + gRfuLinkStatus->strength[r2] = 0x10; + gRfuLinkStatus->connSlotFlag |= 1 << r2; + ++gRfuLinkStatus->connCount; + gRfuLinkStatus->partner[r2].id = *(u16 *)r4; + gRfuLinkStatus->partner[r2].slot = r2; + gRfuLinkStatus->parentChild = MODE_PARENT; + gRfuStatic->flags &= 0x7F; + gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id; + } + --r8; + } +} + +void rfu_REQ_startSearchParent(void) +{ + STWI_set_Callback_M(rfu_CB_startSearchParent); + STWI_send_SP_StartREQ(); +} + +static void rfu_CB_startSearchParent(u8 r5, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_clearLinkStatus(0); + rfu_STC_REQ_callback(r5, reqResult); +} + +void rfu_REQ_pollSearchParent(void) +{ + STWI_set_Callback_M(rfu_CB_pollSearchParent); + STWI_send_SP_PollingREQ(); +} + +static void rfu_CB_pollSearchParent(u8 r5, u16 reqResult) +{ + if (reqResult == 0) + rfu_STC_readParentCandidateList(); + rfu_STC_REQ_callback(r5, reqResult); +} + +void rfu_REQ_endSearchParent(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_SP_EndREQ(); +} + +static void rfu_STC_readParentCandidateList(void) +{ + u8 r7, r6, r5, r4, r3; + u8 *r1, *r2; + struct RfuTgtData *r4_; + + CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); + r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0]; + r7 = r2[1]; + r2 += 4; + gRfuLinkStatus->findParentCount = 0; + for (r6 = 0; r6 < 4 && r7 != 0; ++r6) + { + r7 -= 7; + r1 = r2 + 6; + r2 += 19; + r5 = ~*r2; + ++r2; + r4 = 0; + for (r3 = 0; r3 < 8; ++r3) + { + r4 += *r2++; + r4 += *r1++; + } + if (r4 == r5) + { + r2 -= 28; + r4_ = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount]; + r4_->id = *(u16 *)r2; + r2 += 2; + r4_->slot = *r2; + r2 += 2; + r4_->serialNo = *(u16 *)r2 & 0x7FFF; + if (*(u16 *)r2 & 0x8000) + r4_->mbootFlag = 1; + else + r4_->mbootFlag = 0; + r2 += 2; + for (r3 = 0; r3 < RFU_GAME_NAME_LENGTH; ++r3) + r4_->gname[r3] = *r2++; + ++r2; + for (r3 = 0; r3 < RFU_USER_NAME_LENGTH; ++r3) + r4_->uname[r3] = *r2++; + ++gRfuLinkStatus->findParentCount; + } + } +} + +void rfu_REQ_startConnectParent(u16 pid) +{ + u16 r3 = 0; + u8 i; + for (i = 0; i < RFU_CHILD_MAX && gRfuLinkStatus->partner[i].id != pid; ++i) + ; + if (i == 4) + r3 = 256; + if (r3 == 0) + { + gRfuStatic->tryPid = pid; + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_CP_StartREQ(pid); + } + else + { + rfu_STC_REQ_callback(31, r3); + } +} + +void rfu_REQ_pollConnectParent(void) +{ + STWI_set_Callback_M(rfu_CB_pollConnectParent); + STWI_send_CP_PollingREQ(); +} + +static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) +{ + u16 id; + u8 slot; + u8 r2, r5; + struct RfuTgtData *r9; + struct RfuTgtData sp; + + if (sp28 == 0) + { + id = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + slot = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6]; + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + { + r2 = 1 << slot; + if (!(r2 & gRfuLinkStatus->connSlotFlag)) + { + gRfuLinkStatus->connSlotFlag |= r2; + gRfuLinkStatus->linkLossSlotFlag &= ~r2; + gRfuLinkStatus->my.id = id; + ++gRfuLinkStatus->connCount; + gRfuLinkStatus->parentChild = MODE_CHILD; + gRfuStatic->flags |= 0x80; + for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5) + { + if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid) + { + if (gRfuLinkStatus->findParentCount != 0) + { + r9 = &sp; + CpuCopy16(&gRfuLinkStatus->partner[r5], &sp, sizeof(struct RfuTgtData)); + CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); + gRfuLinkStatus->findParentCount = 0; + } + else + { + r9 = &gRfuLinkStatus->partner[r5]; + } + break; + } + } + if (r5 < RFU_CHILD_MAX) + { + CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData)); + gRfuLinkStatus->partner[slot].slot = slot; + } + } + } + } + rfu_STC_REQ_callback(sp24, sp28); +} + +u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo) +{ + u8 r0, *r2; + + *status = 0xFF; + r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + r0 = r2[0] + 96; + if (r0 <= 1) + { + r2 += 6; + *connectSlotNo = r2[0]; + *status = r2[1]; + return 0; + } + return ERR_REQ_CMD_ID; +} + +void rfu_REQ_endConnectParent(void) +{ + STWI_set_Callback_M(rfu_CB_pollConnectParent); + STWI_send_CP_EndREQ(); + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6] < 4) + gRfuStatic->linkEmergencyFlag[gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6]] = 0; +} + +u16 rfu_syncVBlank(void) +{ + u8 r3, r4; + s32 r5; + + rfu_NI_checkCommFailCounter(); + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + return 0; + if (gRfuStatic->nowWatchInterval != 0) + --gRfuStatic->nowWatchInterval; + r3 = rfu_getMasterSlave(); + if (!(gRfuStatic->flags & 2)) + { + if (r3 == 0) + { + gRfuStatic->flags |= 4; + gRfuStatic->watchdogTimer = 360; + } + } + else if (r3 != 0) + { + gRfuStatic->flags &= 0xFB; + } + if (r3 != 0) + gRfuStatic->flags &= 0xFD; + else + gRfuStatic->flags |= 2; + if (!(gRfuStatic->flags & 4)) + return 0; + if (gRfuStatic->watchdogTimer == 0) + { + gRfuStatic->flags &= 0xFB; + r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + if ((r5 >> r4) & 1) + rfu_STC_removeLinkData(r4, 1); + gRfuLinkStatus->parentChild = MODE_NEUTRAL; + return 1; + } + --gRfuStatic->watchdogTimer; + return 0; +} + +u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot) +{ + u8 sp08 = 0; + u8 sp0C = 0; + u8 i; + s32 sp10, sp14; + u8 *r2; + u8 r9, r6, r3, connSlotFlag, r0; + + *bmLinkLossSlot = 0; + *linkLossReason = REASON_DISCONNECTED; + *parentBmLinkRecoverySlot = 0; + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL || gSTWIStatus->msMode == 0) + return 0; + if (gRfuStatic->flags & 4) + gRfuStatic->watchdogTimer = 360; + if (gRfuStatic->nowWatchInterval == 0) + { + gRfuStatic->nowWatchInterval = 4; + sp08 = 1; + } + if ((u8)reqCommandId == 41) + { + u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + + *bmLinkLossSlot = r1[4]; + *linkLossReason = r1[5]; + if (*linkLossReason == REASON_LINK_LOSS) + *bmLinkLossSlot = gRfuLinkStatus->connSlotFlag; + sp08 = 2; + } + else + { + if (reqCommandId == 310) + { + r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; + r6 ^= gRfuLinkStatus->connSlotFlag; + *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag; + *linkLossReason = REASON_LINK_LOSS; + for (i = 0; i < RFU_CHILD_MAX; ++i) + { + if ((*bmLinkLossSlot >> i) & 1) + { + gRfuLinkStatus->strength[i] = 0; + rfu_STC_removeLinkData(i, 0); + } + } + } + if (sp08 == 0) + return 0; + } + sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command; + sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_LinkStatusREQ(); + sp0C = STWI_poll_CommandEnd(); + if (sp0C == 0) + { + r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + for (i = 0; i < RFU_CHILD_MAX; ++i) + gRfuLinkStatus->strength[i] = *r2++; + r9 = 0; + i = 0; + } + else + { + rfu_STC_REQ_callback(17, sp0C); + return sp0C; + } + for (; i < RFU_CHILD_MAX; ++i) + { + if (gRfuStatic->lsFixedCount[i] != 0) + { + gRfuStatic->lsFixedCount[i] -= 4; + if (gRfuLinkStatus->strength[i] <= 15) + gRfuLinkStatus->strength[i] = 16; + } + r6 = 1 << i; + if (sp0C == 0) + { + if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6)) + { + if (gRfuLinkStatus->strength[i] == 0) + { + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + ++gRfuStatic->linkEmergencyFlag[i]; + if (gRfuStatic->linkEmergencyFlag[i] > 3) + { + *bmLinkLossSlot |= r6; + *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? + } + } + else + { + STWI_send_SystemStatusREQ(); + if (STWI_poll_CommandEnd() == 0) + { + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + { + *bmLinkLossSlot |= r6; + *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? + } + else + { + if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->unk_1a) + { + gRfuStatic->linkEmergencyFlag[i] = 0; + STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag); + STWI_poll_CommandEnd(); + *bmLinkLossSlot |= r6; + *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? + } + } + } + } + } + else + { + gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0? + } + } + if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0) + { + if (r6 & gRfuLinkStatus->linkLossSlotFlag) + { + if (gRfuLinkStatus->strength[i] > 10) + { + *parentBmLinkRecoverySlot |= r6; + gRfuLinkStatus->connSlotFlag |= r6; + gRfuLinkStatus->linkLossSlotFlag &= ~r6; + ++gRfuLinkStatus->connCount; + gRfuStatic->linkEmergencyFlag[i] = 0; + } + else + { + gRfuLinkStatus->strength[i] = 0; + } + } + else + { + if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r6)) + { + STWI_send_SlotStatusREQ(); + STWI_poll_CommandEnd(); + r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + r3 = r2[1] - 1; + for (r2 += 8; r3 != 0; r2 += 4, --r3) + { + u16 r4 = *(u16 *)r2; + + if (r2[2] == i && r4 == gRfuStatic->cidBak[i]) + { + r9 |= 1 << i; + break; + } + } + } + } + } + } + connSlotFlag = gRfuLinkStatus->connSlotFlag; + r0 = *bmLinkLossSlot; + r0 &= connSlotFlag; + if (r6 & r0) + rfu_STC_removeLinkData(i, 0); + } + if (r9 != 0) + { + STWI_send_DisconnectREQ(r9); + STWI_poll_CommandEnd(); + } + // equivalent to: + // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = sp10; + *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = sp10; + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = sp14; + return 0; +} + +static void rfu_STC_removeLinkData(u8 r7, u8 r12) +{ + u8 r5 = 1 << r7; + s32 r6; + + gRfuStatic->lsFixedCount[r7] = 0; + if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0) + --gRfuLinkStatus->connCount; + gRfuLinkStatus->connSlotFlag &= r6 = ~r5; + gRfuLinkStatus->linkLossSlotFlag |= r5; + if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0) + gRfuLinkStatus->parentChild = MODE_NEUTRAL; + if (r12 != 0) + { + CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData)); + gRfuLinkStatus->linkLossSlotFlag &= r6; + gRfuLinkStatus->getNameFlag &= r6; + gRfuLinkStatus->strength[r7] = 0; + } +} + +void rfu_REQ_disconnect(u8 bmDisconnectSlot) +{ + u16 r1; + + if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot) + { + gRfuStatic->recoveryBmSlot = bmDisconnectSlot; + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gRfuStatic->flags & 0x80) + { + if (gRfuLinkStatus->linkLossSlotFlag & bmDisconnectSlot) + rfu_CB_disconnect(48, 0); + } + else if (gRfuStatic->SCStartFlag + && (STWI_set_Callback_M(rfu_CB_defaultCallback), + STWI_send_SC_EndREQ(), + (r1 = STWI_poll_CommandEnd()) != 0)) + { + rfu_STC_REQ_callback(27, r1); + } + else + { + STWI_set_Callback_M(rfu_CB_disconnect); + STWI_send_DisconnectREQ(bmDisconnectSlot); + } + } +} + +static void rfu_CB_disconnect(u8 r6, u16 r5) +{ + u8 r4, r0; + + if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD) + { + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SystemStatusREQ(); + if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) + r5 = 0; + } + gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot; + if (r5 == 0) + { + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + { + r0 = 1 << r4; + if (r0 & gRfuStatic->recoveryBmSlot) + rfu_STC_removeLinkData(r4, 1); + } + } + if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0) + gRfuLinkStatus->parentChild = MODE_NEUTRAL; + rfu_STC_REQ_callback(r6, r5); + if (gRfuStatic->SCStartFlag) + { + STWI_set_Callback_M(rfu_CB_defaultCallback); + STWI_send_SC_StartREQ(); + r5 = STWI_poll_CommandEnd(); + if (r5 != 0) + rfu_STC_REQ_callback(25, r5); + } +} + +void rfu_REQ_CHILD_startConnectRecovery(u8 bmRecoverySlot) +{ + u8 i; + + gRfuStatic->recoveryBmSlot = bmRecoverySlot; + for (i = 0; i < RFU_CHILD_MAX && !((bmRecoverySlot >> i) & 1); ++i) + ; + STWI_set_Callback_M(rfu_STC_REQ_callback); + // if i == 4, gRfuLinkStatus->partner[i].id becomes gRfuLinkStatus->my.id + STWI_send_CPR_StartREQ(gRfuLinkStatus->partner[i].id, gRfuLinkStatus->my.id, bmRecoverySlot); +} + +void rfu_REQ_CHILD_pollConnectRecovery(void) +{ + STWI_set_Callback_M(rfu_CB_CHILD_pollConnectRecovery); + STWI_send_CPR_PollingREQ(); +} + +static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) +{ + u8 r3, r4; + struct RfuLinkStatus *r2; + + if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) + { + gRfuLinkStatus->parentChild = MODE_CHILD; + for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4) + { + r3 = 1 << r4; + r2 = gRfuLinkStatus; // ??? + if (gRfuStatic->recoveryBmSlot & r3 & r2->linkLossSlotFlag) + { + gRfuLinkStatus->connSlotFlag |= r3; + gRfuLinkStatus->linkLossSlotFlag &= ~r3; + ++gRfuLinkStatus->connCount; + gRfuStatic->linkEmergencyFlag[r4] = 0; + } + } + gRfuStatic->recoveryBmSlot = 0; + } + rfu_STC_REQ_callback(r8, r7); +} + +u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status) +{ + u8 r0; + + *status = 0xFF; + r0 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] + 77; + if (r0 <= 1) + { + *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + return 0; + } + return ERR_REQ_CMD_ID; +} + +void rfu_REQ_CHILD_endConnectRecovery(void) +{ + STWI_set_Callback_M(rfu_CB_CHILD_pollConnectRecovery); + STWI_send_CPR_EndREQ(); +} + +static void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size) +{ + const u8 *src = *src_p; + u8 *dst = *dst_p; + s32 i; + + for (i = size - 1; i != -1; --i) + *dst++ = *src++; + *src_p = src; + *dst_p = dst; +} + +void rfu_REQ_changeMasterSlave(void) +{ + if (STWI_read_status(1) == 1) + { + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_MS_ChangeREQ(); + } + else + { + rfu_STC_REQ_callback(39, 0); + } +} + +bool8 rfu_getMasterSlave(void) +{ + bool8 masterSlave = STWI_read_status(1); + + if (masterSlave == AGB_CLK_MASTER) + { + if (gSTWIStatus->unk_2c) + { + if (gSTWIStatus->reqActiveCommand == 39 + || gSTWIStatus->reqActiveCommand == 37 + || gSTWIStatus->reqActiveCommand == 55) + masterSlave = AGB_CLK_SLAVE; + } + } + return masterSlave; +} + +void rfu_clearAllSlot(void) +{ + u16 i; + u16 IMEBackup = REG_IME; + + REG_IME = 0; + for (i = 0; i < RFU_CHILD_MAX; ++i) + { + CpuFill16(0, gRfuSlotStatusNI[i], 2 * sizeof(struct NIComm)); + CpuFill16(0, gRfuSlotStatusUNI[i], sizeof(struct UNISend) + sizeof(struct UNIRecv)); + gRfuLinkStatus->remainLLFrameSizeChild[i] = 16; + } + gRfuLinkStatus->remainLLFrameSizeParent = LLF_P_SIZE; + gRfuLinkStatus->sendSlotNIFlag = 0; + gRfuLinkStatus->recvSlotNIFlag = 0; + gRfuLinkStatus->sendSlotUNIFlag = 0; + gRfuStatic->recvRenewalFlag = 0; + REG_IME = IMEBackup; +} + +static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4) +{ + + if (!(gRfuStatic->flags & 0x80)) + { + if (r3 == 0) + gRfuLinkStatus->remainLLFrameSizeParent += r4->payloadSize; + gRfuLinkStatus->remainLLFrameSizeParent += 3; + } + else + { + if (r3 == 0) + gRfuLinkStatus->remainLLFrameSizeChild[r5] += r4->payloadSize; + gRfuLinkStatus->remainLLFrameSizeChild[r5] += 2; + } +} + +u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) +{ + u16 r10, r3, r1; + struct NIComm *r4; + + if (slotStatusIndex >= RFU_CHILD_MAX) + return ERR_SLOT_NO; + if (!(connTypeFlag & (TYPE_UNI_SEND | TYPE_UNI_RECV | TYPE_NI_SEND | TYPE_NI_RECV))) + return ERR_COMM_TYPE; + r10 = REG_IME; + REG_IME = 0; + if (connTypeFlag & (TYPE_NI_SEND | TYPE_NI_RECV)) + { + for (r3 = 0; r3 < 2; ++r3) + { + r4 = NULL; + if (r3 == 0) + { + if (connTypeFlag & TYPE_NI_SEND) + { + r4 = &gRfuSlotStatusNI[slotStatusIndex]->send; + gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg; + } + } + else + { + if (connTypeFlag & TYPE_NI_RECV) + { + r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv; + gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); + } + } + if (r4 != NULL) + { + if (r4->state & SLOT_BUSY_FLAG) + { + rfu_STC_releaseFrame(slotStatusIndex, r3, r4); + for (r1 = 0; r1 < RFU_CHILD_MAX; ++r1) + if ((r4->bmSlotOrg >> r1) & 1) + r4->failCounter = 0; + } + CpuFill16(0, r4, sizeof(struct NIComm)); + } + } + } + if (connTypeFlag & TYPE_UNI_SEND) + { + struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex]; + + if (r3->send.state & SLOT_BUSY_FLAG) + { + if (!(gRfuStatic->flags & 0x80)) + gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize; + else + gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)r3->send.payloadSize; + gRfuLinkStatus->sendSlotUNIFlag &= ~r3->send.bmSlot; + } + CpuFill16(0, &r3->send, sizeof(struct UNISend)); + } + if (connTypeFlag & TYPE_UNI_RECV) + { + CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv)); + } + REG_IME = r10; + return 0; +} + +u16 rfu_setRecvBuffer(u8 connType, u8 slotNo, void *buffer, u32 buffSize) +{ + if (slotNo >= RFU_CHILD_MAX) + return ERR_SLOT_NO; + if (connType & TYPE_NI) + { + gRfuSlotStatusNI[slotNo]->recvBuffer = buffer; + gRfuSlotStatusNI[slotNo]->recvBufferSize = buffSize; + } + else if (!(connType & TYPE_UNI)) + { + return ERR_COMM_TYPE; + } + else + { + gRfuSlotStatusUNI[slotNo]->recvBuffer = buffer; + gRfuSlotStatusUNI[slotNo]->recvBufferSize = buffSize; + } + return 0; +} + +u16 rfu_NI_setSendData(u8 bmSendSlot, u8 subFrameSize, const void *src, u32 size) +{ + return rfu_STC_setSendData_org(32, bmSendSlot, subFrameSize, src, size); +} + +u16 rfu_UNI_setSendData(u8 bmSendSlot, const void *src, u8 size) +{ + u8 subFrameSize; + + if (gRfuLinkStatus->parentChild == MODE_PARENT) + subFrameSize = size + 3; + else + subFrameSize = size + 2; + return rfu_STC_setSendData_org(16, bmSendSlot, subFrameSize, src, 0); +} + +u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize) +{ + return rfu_STC_setSendData_org(64, 1 << slotNo, subFrameSize, &gRfuLinkStatus->my.serialNo, 26); +} + +static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 sp28) +{ + u8 r2, r0; + u8 r4; + u8 *r9; + u8 r5; + u8 i; + u16 sp04; + struct RfuSlotStatusUNI *r1; + struct RfuSlotStatusNI *r12; + + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + return ERR_MODE_NOT_CONNECTED; + if (!(bmSendSlot & 0xF)) + return ERR_SLOT_NO; + if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot) + return ERR_SLOT_NOT_CONNECTED; + if (r6 & 0x10) + r0 = gRfuLinkStatus->sendSlotUNIFlag; + else + r0 = gRfuLinkStatus->sendSlotNIFlag; + if (r0 & bmSendSlot) + return ERR_SLOT_BUSY; + for (r2 = 0; r2 < RFU_CHILD_MAX && !((bmSendSlot >> r2) & 1); ++r2) + ; + if (gRfuLinkStatus->parentChild == MODE_PARENT) + r9 = &gRfuLinkStatus->remainLLFrameSizeParent; + else if (gRfuLinkStatus->parentChild == MODE_CHILD) + r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; + r4 = llsf_struct[gRfuLinkStatus->parentChild].unk00; + if (subFrameSize > *r9 || subFrameSize <= r4) + return ERR_SUBFRAME_SIZE; + sp04 = REG_IME; + REG_IME = 0; + r5 = r6 & 0x20; + if (r5 || r6 == 0x40) + { + u8 *r1; // a hack to swap instructions + + r12 = gRfuSlotStatusNI[r2]; + r1 = NULL; + r12->send.errorCode = 0; + *r12->send.now_p = r1 = &r12->send.dataType; + r12->send.remainSize = 7; + r12->send.bmSlotOrg = bmSendSlot; + r12->send.bmSlot = bmSendSlot; + r12->send.payloadSize = subFrameSize - r4; + if (r5 != 0) + *r1 = 0; + else + *r1 = 1; + r12->send.dataSize = sp28; + r12->send.src = src; + r12->send.ack = 0; + r12->send.phase = 0; + #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette + asm("":::"r2"); + #endif + for (i = 0; i < WINDOW_COUNT; ++i) + { + r12->send.recvAckFlag[i] = 0; + r12->send.n[i] = 1; + } + for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2) + if ((bmSendSlot >> r2) & 1) + gRfuSlotStatusNI[r2]->send.failCounter = 0; + gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot; + *r9 -= subFrameSize; + r12->send.state = SLOT_STATE_SEND_START; + } + else if (r6 & 0x10) + { + r1 = gRfuSlotStatusUNI[r2]; + r1->send.bmSlot = bmSendSlot; + r1->send.src = src; + r1->send.payloadSize = subFrameSize - r4; + *r9 -= subFrameSize; + r1->send.state = SLOT_STATE_SEND_UNI; + gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot; + } + REG_IME = sp04; + return 0; +} + +u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) +{ + struct RfuSlotStatusNI *r5; + u16 r8; + u8 r2; + + if (slotStatusIndex >= RFU_CHILD_MAX) + return ERR_SLOT_NO; + if (connType == 0x20) + { + r5 = gRfuSlotStatusNI[slotStatusIndex]; + if ((r5->send.state & SLOT_BUSY_FLAG) + && (r5->send.state & SLOT_SEND_FLAG)) + { + connType = bmNewTgtSlot ^ r5->send.bmSlot; + + if (!(connType & bmNewTgtSlot)) + { + if (connType) + { + r8 = REG_IME; + REG_IME = 0; + for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2) + { + if ((connType >> r2) & 1) + gRfuSlotStatusNI[r2]->send.failCounter = 0; + } + gRfuLinkStatus->sendSlotNIFlag &= ~connType; + r5->send.bmSlot = bmNewTgtSlot; + if (r5->send.bmSlot == 0) + { + rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send); + r5->send.state = SLOT_STATE_SEND_FAILED; + } + REG_IME = r8; + } + } + else + { + return ERR_SLOT_TARGET; + } + } + else + { + return ERR_SLOT_NOT_SENDING; + } + } + else + { + if (connType == 16) + { + s32 r3; + + if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != SLOT_STATE_SEND_UNI) + return ERR_SLOT_NOT_SENDING; + for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2) + if (r2 != slotStatusIndex) + r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot; + if (bmNewTgtSlot & r3) + return ERR_SLOT_TARGET; + r8 = REG_IME; + REG_IME = 0; + gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot; + gRfuLinkStatus->sendSlotUNIFlag |= bmNewTgtSlot; + gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot = bmNewTgtSlot; + REG_IME = r8; + } + else + { + return ERR_COMM_TYPE; + } + } + return 0; +} + +u16 rfu_NI_stopReceivingData(u8 slotStatusIndex) +{ + struct NIComm *r5; + u16 r4, r1; + + if (slotStatusIndex >= RFU_CHILD_MAX) + return ERR_SLOT_NO; + r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv; + r4 = REG_IME; + ++r4; --r4; // fix r4, r5 register swap + REG_IME = 0; + if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG) + { + if (gRfuSlotStatusNI[slotStatusIndex]->recv.state == SLOT_STATE_RECV_LAST) + gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN; + else + gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED; + gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); + rfu_STC_releaseFrame(slotStatusIndex, 1, r5); + } + REG_IME = r4; + return 0; +} + +u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size) +{ + struct UNISend *r4; + u8 *r6; + u16 r1; + u8 r3_; + + if (slotStatusIndex >= RFU_CHILD_MAX) + return ERR_SLOT_NO; + r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send; + if (r4->state != SLOT_STATE_SEND_UNI) + return ERR_SLOT_NOT_SENDING; + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + r6 = &gRfuLinkStatus->remainLLFrameSizeParent; + r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize; + } + else + { + r6 = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex]; + r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize; + } + if (r3_ < size) + return ERR_SUBFRAME_SIZE; + r1 = REG_IME; + REG_IME = 0; + r4->src = src; + *r6 = r3_ - size; + r4->payloadSize = size; + r4->dataReadyFlag = 1; + REG_IME = r1; + return 0; +} + +void rfu_UNI_readySendData(u8 slotStatusIndex) +{ + if (slotStatusIndex < RFU_CHILD_MAX) + { + if (gRfuSlotStatusUNI[slotStatusIndex]->send.state == SLOT_STATE_SEND_UNI) + gRfuSlotStatusUNI[slotStatusIndex]->send.dataReadyFlag = 1; + } +} + +void rfu_UNI_clearRecvNewDataFlag(u8 slotStatusIndex) +{ + if (slotStatusIndex < RFU_CHILD_MAX) + gRfuSlotStatusUNI[slotStatusIndex]->recv.newDataFlag = 0; +} + +void rfu_REQ_sendData(bool8 clockChangeFlag) +{ + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) + { + if (gRfuLinkStatus->parentChild == MODE_PARENT + && !(gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag)) + { + if (gRfuStatic->commExistFlag) + { + gRfuStatic->emberCount = 16; + gRfuStatic->nullFrameCount = 0; + } + if (gRfuStatic->emberCount) + --gRfuStatic->emberCount; + else + ++gRfuStatic->nullFrameCount; + if (gRfuStatic->emberCount + || !(gRfuStatic->nullFrameCount & 0xF)) + { + gRfuFixed->LLFBuffer[0] = 1; + gRfuFixed->LLFBuffer[4] = 0xFF; + STWI_set_Callback_M(rfu_CB_sendData3); + if (!clockChangeFlag) + STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, 1); + else + STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, 1); + return; + } + } + else + { + if (!gRfuLinkStatus->LLFReadyFlag) + rfu_constructSendLLFrame(); + if (gRfuLinkStatus->LLFReadyFlag) + { + STWI_set_Callback_M(rfu_CB_sendData); + if (clockChangeFlag) + { + STWI_send_DataTxAndChangeREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4); + return; + } + STWI_send_DataTxREQ(gRfuFixed->LLFBuffer, gRfuStatic->totalPacketSize + 4); + } + } + if (clockChangeFlag) + { + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + if (gSTWIStatus->callbackS != NULL) + gSTWIStatus->callbackS(39); + } + else + { + STWI_set_Callback_M(rfu_CB_sendData2); + STWI_send_MS_ChangeREQ(); + } + } + } +} + +static void rfu_CB_sendData(__attribute__((unused)) u8 r0, u16 r7) +{ + u8 r6; + struct NIComm *r4; + + if (r7 == 0) + { + for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) + { + if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag) + gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0; + r4 = &gRfuSlotStatusNI[r6]->send; + if (r4->state == SLOT_STATE_SEND_NULL) + { + rfu_STC_releaseFrame(r6, 0, r4); + gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot; + if (r4->dataType == 1) + gRfuLinkStatus->getNameFlag |= 1 << r6; + r4->state = SLOT_STATE_SEND_SUCCESS; + } + } + } + gRfuLinkStatus->LLFReadyFlag = 0; + rfu_STC_REQ_callback(36, r7); +} + +static void rfu_CB_sendData2(__attribute__((unused)) u8 r0, u16 r1) +{ + rfu_STC_REQ_callback(36, r1); +} + +static void rfu_CB_sendData3(u8 r0, u16 r1) +{ + if (r1 != 0) + rfu_STC_REQ_callback(36, r1); + else if (r0 == 0xFF) + rfu_STC_REQ_callback(0xFF, 0); +} + +static void rfu_constructSendLLFrame(void) +{ + u32 r8, r5; + u8 r6; + u8 *sp00; + struct RfuSlotStatusNI *r2; + + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL + && gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag) + { + gRfuLinkStatus->LLFReadyFlag = 0; + r8 = 0; + sp00 = (u8 *)&gRfuFixed->LLFBuffer[1]; + for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) + { + r5 = 0; + if (gRfuSlotStatusNI[r6]->send.state & SLOT_BUSY_FLAG) + r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send); + if (gRfuSlotStatusNI[r6]->recv.state & SLOT_BUSY_FLAG) + r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv); + if (gRfuSlotStatusUNI[r6]->send.state == SLOT_STATE_SEND_UNI) + r5 += rfu_STC_UNI_constructLLSF(r6, &sp00); + if (r5 != 0) + { + if (gRfuLinkStatus->parentChild == MODE_PARENT) + r8 += r5; + else + r8 |= r5 << (5 * r6 + 8); + } + } + if (r8 != 0) + { + while ((u32)sp00 & 3) + *sp00++ = 0; + gRfuFixed->LLFBuffer[0] = r8; + if (gRfuLinkStatus->parentChild == MODE_CHILD) + { + u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]); + + // Does the volatile qualifier make sense? + // It's the same as: + // asm("":::"memory"); + r8 = r0 - *(u8 *volatile *)&gRfuFixed; + } + } + gRfuStatic->totalPacketSize = r8; + } +} + +static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) +{ + u16 r5; + u32 sp00; + u8 i; + u8 *r2; + const struct LLSFStruct *r8 = &llsf_struct[gRfuLinkStatus->parentChild]; + + if (r4->state == SLOT_STATE_SENDING) + { + while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize) + { + ++r4->phase; + if (r4->phase == 4) + r4->phase = 0; + } + } + if (r4->state & SLOT_RECV_FLAG) + { + r5 = 0; + } + else if (r4->state == SLOT_STATE_SENDING) + { + if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize) + r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase]; + else + r5 = r4->payloadSize; + } + else + { + if ((u32)r4->remainSize >= r4->payloadSize) + r5 = r4->payloadSize; + else + r5 = r4->remainSize; + } + sp00 = (r4->state & 0xF) << r8->unk03 + | r4->ack << r8->unk04 + | r4->phase << r8->unk05 + | r4->n[r4->phase] << r8->unk06 + | r5; + if (gRfuLinkStatus->parentChild == MODE_PARENT) + sp00 |= r4->bmSlot << 18; + r2 = (u8 *)&sp00; + for (i = 0; i < r8->unk00; ++i) + *(*r12)++ = *r2++; + if (r5 != 0) + { + const u8 *sp04 = r4->now_p[r4->phase]; + + gRfuFixed->fastCopyPtr(&sp04, r12, r5); + } + if (r4->state == SLOT_STATE_SENDING) + { + ++r4->phase; + if (r4->phase == 4) + r4->phase = 0; + } + if (gRfuLinkStatus->parentChild == MODE_PARENT) + gRfuLinkStatus->LLFReadyFlag = 1; + else + gRfuLinkStatus->LLFReadyFlag |= 1 << r10; + return r5 + r8->unk00; +} + +static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) +{ + const struct LLSFStruct *r5; + const u8 *sp04; + u32 sp00; + u8 *r2; + u8 i; + struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->send; + + if (!r4->dataReadyFlag || !r4->bmSlot) + return 0; + r5 = &llsf_struct[gRfuLinkStatus->parentChild]; + sp00 = (r4->state & 0xF) << r5->unk03 + | r4->payloadSize; + if (gRfuLinkStatus->parentChild == MODE_PARENT) + sp00 |= r4->bmSlot << 18; + r2 = (u8 *)&sp00; + for (i = 0; i < r5->unk00; ++i) + *(*r6)++ = *r2++; + sp04 = r4->src; + gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize); + if (gRfuLinkStatus->parentChild == MODE_PARENT) + gRfuLinkStatus->LLFReadyFlag = 16; + else + gRfuLinkStatus->LLFReadyFlag |= 16 << r8; + return r5->unk00 + r4->payloadSize; +} + +void rfu_REQ_recvData(void) +{ + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) + { + gRfuStatic->commExistFlag = gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag; + gRfuStatic->recvErrorFlag = 0; + STWI_set_Callback_M(rfu_CB_recvData); + STWI_send_DataRxREQ(); + } +} + +static void rfu_CB_recvData(u8 r9, u16 r7) +{ + u8 r6; + struct RfuSlotStatusNI *r4; + struct NIComm *r5; + + if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) + { + gRfuStatic->NIEndRecvFlag = 0; + if (gRfuLinkStatus->parentChild == MODE_PARENT) + rfu_STC_PARENT_analyzeRecvPacket(); + else + rfu_STC_CHILD_analyzeRecvPacket(); + for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) + { + r4 = gRfuSlotStatusNI[r6]; + if (r4->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) + { + r5 = &r4->recv; + if (r5->dataType == 1) + gRfuLinkStatus->getNameFlag |= 1 << r6; + rfu_STC_releaseFrame(r6, 1, r5); + gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot; + r4->recv.state = SLOT_STATE_RECV_SUCCESS; + } + } + if (gRfuStatic->recvErrorFlag) + r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV; + } + rfu_STC_REQ_callback(r9, r7); +} + +static void rfu_STC_PARENT_analyzeRecvPacket(void) +{ + u32 r3; + u8 r5; + u8 sp[4]; + u8 *r6; + + r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8; + for (r5 = 0; r5 < NELEMS(sp); ++r5) + { + sp[r5] = r3 & 0x1F; + r3 >>= 5; + if (sp[r5] == 0) + gRfuStatic->NIEndRecvFlag |= 1 << r5; + } + r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; + for (r5 = 0; r5 < NELEMS(sp); ++r5) + { + if (sp[r5]) + { + u8 *r4 = &sp[r5]; + + do + { + u8 r0 = rfu_STC_analyzeLLSF(r5, r6, *r4); + + r6 += r0; + *r4 -= r0; + } while (!(*r4 & 0x80) && (*r4)); + } + } +} + +static void rfu_STC_CHILD_analyzeRecvPacket(void) +{ + u16 r4; + u8 *r5; + u16 r0; + + r4 = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F; + r5 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; + if (r4 == 0) + gRfuStatic->NIEndRecvFlag = 15; + do + { + if (r4 == 0) + break; + r0 = rfu_STC_analyzeLLSF(0, r5, r4); + r5 += r0; + r4 -= r0; + } while (!(r4 & 0x8000)); +} + +static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) +{ + struct RfuLocalStruct sp00; + const struct LLSFStruct *r6; + u32 r5; + u8 r4; + u32 r0; + u16 r10; + + r6 = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)]; + if (r3 < r6->unk00) + return r3; + r5 = 0; + for (r4 = 0; r4 < r6->unk00; ++r4) + r5 |= *r7++ << 8 * r4; + sp00.unk00 = (r5 >> r6->unk01) & r6->unk07; + sp00.unk01 = (r5 >> r6->unk02) & r6->unk08; + sp00.unk02 = (r5 >> r6->unk03) & r6->unk09; + sp00.unk03 = (r5 >> r6->unk04) & r6->unk0A; + sp00.unk04 = (r5 >> r6->unk05) & r6->unk0B; + sp00.unk05 = (r5 >> r6->unk06) & r6->unk0C; + sp00.unk06 = (r5 & r6->unk0E) & r5; + r10 = sp00.unk06 + r6->unk00; + if (sp00.unk00 == 0) + { + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + if ((gRfuLinkStatus->connSlotFlag >> r12) & 1) + { + if (sp00.unk02 == 4) + { + rfu_STC_UNI_receive(r12, &sp00, r7); + } + else if (sp00.unk03 == 0) + { + rfu_STC_NI_receive_Receiver(r12, &sp00, r7); + } + else + { + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + if (((gRfuSlotStatusNI[r4]->send.bmSlot >> r12) & 1) + && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1)) + break; + if (r4 <= 3) + rfu_STC_NI_receive_Sender(r4, r12, &sp00, r7); + } + } + } + else + { + s32 r5 = gRfuLinkStatus->connSlotFlag & sp00.unk01; + + if (r5) + { + for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + { + if ((r5 >> r4) & 1) + { + if (sp00.unk02 == 4) + rfu_STC_UNI_receive(r4, &sp00, r7); + else if (sp00.unk03 == 0) + rfu_STC_NI_receive_Receiver(r4, &sp00, r7); + else if ((gRfuLinkStatus->sendSlotNIFlag >> r4) & 1) + rfu_STC_NI_receive_Sender(r4, r4, &sp00, r7); + } + } + } + } + } + return r10; +} + +static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 *sp00) +{ + u8 *sp04; + u32 r2; + struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7]; + struct UNIRecv *r5 = &r3->recv; + + r5->errorCode = 0; + if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06) + { + r3->recv.state = SLOT_STATE_RECV_IGNORE; + r5->errorCode = ERR_RECV_BUFF_OVER; + } + else + { + if (r5->dataBlockFlag) + { + if (r5->newDataFlag) + { + r5->errorCode = ERR_RECV_UNK; + goto _081E2F0E; + } + } + else + { + if (r5->newDataFlag) + r5->errorCode = ERR_RECV_DATA_OVERWRITED; + } + r5->state = SLOT_STATE_RECEIVING; + r2 = r5->dataSize = r6->unk06; + sp04 = gRfuSlotStatusUNI[r7]->recvBuffer; + gRfuFixed->fastCopyPtr(&sp00, &sp04, r2); + r5->newDataFlag = 1; + r5->state = 0; + } +_081E2F0E: + if (r5->errorCode) + gRfuStatic->recvErrorFlag |= 16 << r7; +} + +static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3) +{ + struct NIComm *r12 = &gRfuSlotStatusNI[r0]->send; + u16 r9 = r12->state; + u8 sp00 = r12->n[r6->unk04]; + u8 *r8; + u8 r4; + u16 r2; + + if ((r6->unk02 == 2 && r9 == SLOT_STATE_SENDING) + || (r6->unk02 == 1 && r9 == SLOT_STATE_SEND_START) + || (r6->unk02 == 3 && r9 == SLOT_STATE_SEND_LAST)) + { + if (r12->n[r6->unk04] == r6->unk05) + r12->recvAckFlag[r6->unk04] |= 1 << r10; + } + if ((r12->recvAckFlag[r6->unk04] & r12->bmSlot) == r12->bmSlot) + { + r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3; + r12->recvAckFlag[r6->unk04] = 0; + if ((u16)(r12->state + ~SLOT_STATE_SEND_NULL) <= 1) + { + if (r12->state == SLOT_STATE_SEND_START) + r12->now_p[r6->unk04] += r12->payloadSize; + else + r12->now_p[r6->unk04] += r12->payloadSize << 2; + r12->remainSize -= r12->payloadSize; + if (r12->remainSize != 0) + if (r12->remainSize >= 0) + goto _081E30AE; + // Above is a hack to avoid optimization over comparison. + // rfu_STC_NI_constructLLSF uses this field as u32. + // It's equivalent to the following condition: + // if (r12->remainSize == 0 || r12->remainSize < 0) + { + r12->phase = 0; + if (r12->state == SLOT_STATE_SEND_START) + { + for (r4 = 0; r4 < WINDOW_COUNT; ++r4) + { + r12->n[r4] = 1; + r12->now_p[r4] = r12->src + r12->payloadSize * r4; + } + r12->remainSize = r12->dataSize; + r12->state = SLOT_STATE_SENDING; + } + else + { + r12->n[0] = 0; + r12->remainSize = 0; + r12->state = SLOT_STATE_SEND_LAST; + } + } + _081E30AE: + } + else if (r12->state == SLOT_STATE_SEND_LAST) + { + r12->state = SLOT_STATE_SEND_NULL; + } + } + if (r12->state != r9 + || r12->n[r6->unk04] != sp00 + || (r12->recvAckFlag[r6->unk04] >> r10) & 1) + { + r2 = REG_IME; + REG_IME = 0; + gRfuStatic->recvRenewalFlag |= 16 << r10; + gRfuSlotStatusNI[r10]->send.failCounter = 0; + REG_IME = r2; + } +} + +static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, const u8 *sp00) +{ + u16 r2; + u32 r7 = 0; + struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8]; + struct NIComm *r5 = &r4->recv; + u16 r9 = r4->recv.state; + u8 r10 = r4->recv.n[r6->unk04]; + + if (r6->unk02 == 3) + { + gRfuStatic->NIEndRecvFlag |= 1 << r8; + if (r4->recv.state == SLOT_STATE_RECEIVING) + { + r4->recv.phase = 0; + r4->recv.n[0] = 0; + r4->recv.state = SLOT_STATE_RECV_LAST; + } + } + else if (r6->unk02 == 2) + { + if (r9 == SLOT_STATE_RECV_START && !r5->remainSize) + rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5); + if (r5->state == SLOT_STATE_RECEIVING) + r7 = 1; + } + else if (r6->unk02 == 1) + { + if (r9 == SLOT_STATE_RECV_START) + { + r7 = 1; + } + else + { + rfu_STC_NI_initSlot_asRecvControllData(r8, r5); + if (r4->recv.state != SLOT_STATE_RECV_START) + return; + r7 = 1; + } + } + if (r7 != 0) + { + if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3)) + { + gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06); + if (r5->state == SLOT_STATE_RECEIVING) + r5->now_p[r6->unk04] += 3 * r5->payloadSize; + r5->remainSize -= r6->unk06; + r5->n[r6->unk04] = r6->unk05; + } + } + if (r5->errorCode == 0) + { + r5->phase = r6->unk04; + if (r5->state != r9 || r5->n[r6->unk04] != r10 || r5->n[r6->unk04] == r6->unk05) + { + r2 = REG_IME; + REG_IME = 0; + gRfuStatic->recvRenewalFlag |= 1 << r8; + r5->failCounter = 0; + REG_IME = r2; + } + } +} + +static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) +{ + u8 *r1; + u32 r5; + u8 r6; + + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + r5 = 3; + r1 = &gRfuLinkStatus->remainLLFrameSizeParent; + } + else + { + r5 = 2; + r1 = &gRfuLinkStatus->remainLLFrameSizeChild[r4]; + } + r6 = 1 << r4; + if (r2->state == 0) + { + if (*r1 < r5) + { + r2->state = SLOT_STATE_RECV_IGNORE; + r2->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE; + gRfuStatic->recvErrorFlag |= r6; + } + else + { + r2->errorCode = 0; + *r1 -= r5; + r2->now_p[0] = &r2->dataType; + r2->remainSize = 7; + r2->ack = 1; + r2->payloadSize = 0; + r2->bmSlot = r6; + r2->state = SLOT_STATE_RECV_START; + gRfuLinkStatus->recvSlotNIFlag |= r6; + } + } +} + +static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4) +{ + u8 r1, r3; + + if (r4->dataType == 1) + { + r4->now_p[0] = (void *)&gRfuLinkStatus->partner[r5].serialNo; + } + else + { + if (r4->dataSize > gRfuSlotStatusNI[r5]->recvBufferSize) + { + r1 = 1 << r5; + gRfuStatic->recvErrorFlag |= r1; + gRfuLinkStatus->recvSlotNIFlag &= ~r1; + r4->errorCode = ERR_RECV_BUFF_OVER; + r4->state = SLOT_STATE_RECV_FAILED; + rfu_STC_releaseFrame(r5, 1, r4); + return; + } + r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer; + } + for (r3 = 0; r3 < WINDOW_COUNT; ++r3) + { + r4->n[r3] = 0; + r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3]; + } + r4->remainSize = r4->dataSize; + r4->state = SLOT_STATE_RECEIVING; +} + +static void rfu_NI_checkCommFailCounter(void) +{ + u16 r12; + u32 r7; + u8 r2, r3; + + if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) + { + r12 = REG_IME; + REG_IME = 0; + r7 = gRfuStatic->recvRenewalFlag >> 4; + for (r3 = 0; r3 < RFU_CHILD_MAX; ++r3) + { + r2 = 1 << r3; + if (gRfuLinkStatus->sendSlotNIFlag & r2 + && !(gRfuStatic->recvRenewalFlag & r2)) + ++gRfuSlotStatusNI[r3]->send.failCounter; + if (gRfuLinkStatus->recvSlotNIFlag & r2 + && !(r7 & r2)) + ++gRfuSlotStatusNI[r3]->recv.failCounter; + } + gRfuStatic->recvRenewalFlag = 0; + REG_IME = r12; + } +} + +void rfu_REQ_noise(void) +{ + STWI_set_Callback_M(rfu_STC_REQ_callback); + STWI_send_TestModeREQ(1, 0); +} diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c new file mode 100644 index 0000000000..f5d652348f --- /dev/null +++ b/src/librfu_sio32id.c @@ -0,0 +1,167 @@ +#include "librfu.h" + +static void Sio32IDIntr(void); +static void Sio32IDInit(void); +static s32 Sio32IDMain(void); + +//struct RfuSIO32Id gRfuSIO32Id; + +//static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO +//static const char Sio32IDLib_Var[] = "Sio32ID_030820"; + +extern const u16 Sio32ConnectionData[]; +extern const char Sio32IDLib_Var[]; + +s32 AgbRFU_checkID(u8 r5) +{ + u16 r8; + vu16 *r4; + s32 r6; + + if (REG_IME == 0) + return -1; + r8 = REG_IE; + gSTWIStatus->state = 10; + STWI_set_Callback_ID(Sio32IDIntr); + Sio32IDInit(); + r4 = ®_TMCNT_L(gSTWIStatus->timerSelect); + r5 *= 8; + while (--r5 != 0xFF) + { + r6 = Sio32IDMain(); + if (r6 != 0) + break; + r4[1] = 0; + r4[0] = 0; + r4[1] = TIMER_1024CLK | TIMER_ENABLE; + while (r4[0] < 32) + ; + r4[1] = 0; + r4[0] = 0; + } + REG_IME = 0; + REG_IE = r8; + REG_IME = 1; + gSTWIStatus->state = 0; + STWI_set_Callback_ID(NULL); + return r6; +} + +static void Sio32IDInit(void) +{ + REG_IME = 0; + REG_IE &= ~((8 << gSTWIStatus->timerSelect) | INTR_FLAG_SERIAL); + REG_IME = 1; + REG_RCNT = 0; + REG_SIOCNT = SIO_32BIT_MODE; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + CpuFill32(0, &gRfuSIO32Id, sizeof(struct RfuSIO32Id)); + REG_IF = INTR_FLAG_SERIAL; +} + +static s32 Sio32IDMain(void) +{ + u8 r12; + + switch (r12 = gRfuSIO32Id.unk1) + { + case 0: + gRfuSIO32Id.unk0 = 1; + REG_SIOCNT |= SIO_38400_BPS; + REG_IME = r12; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = 1; + gRfuSIO32Id.unk1 = 1; + *(vu8 *)®_SIOCNT |= SIO_ENABLE; + break; + case 1: + if (gRfuSIO32Id.unkA == 0) + { + if (gRfuSIO32Id.unk0 == 1) + { + if (gRfuSIO32Id.unk2 == 0) + { + REG_IME = gRfuSIO32Id.unk2; + REG_SIOCNT |= SIO_ENABLE; + REG_IME = r12; + } + } + else if (gRfuSIO32Id.unk4 != 0x8001 && !gRfuSIO32Id.unk2) + { + REG_IME = gRfuSIO32Id.unk2; + REG_IE &= ~INTR_FLAG_SERIAL; + REG_IME = r12; + REG_SIOCNT = gRfuSIO32Id.unk2; + REG_SIOCNT = SIO_32BIT_MODE; + REG_IF = INTR_FLAG_SERIAL; + REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE; + REG_IME = gRfuSIO32Id.unk2; + REG_IE |= INTR_FLAG_SERIAL; + REG_IME = r12; + } + break; + } + else + { + gRfuSIO32Id.unk1 = 2; + // fallthrough + } + default: + return gRfuSIO32Id.unkA; + } + return 0; +} + +static void Sio32IDIntr(void) +{ + u32 r5; + u16 r0; +#ifndef NONMATCHING + register u32 r1 asm("r1"); + register u16 r0_ asm("r0"); +#else + u32 r1; + u16 r0_; +#endif + + r5 = REG_SIODATA32; + if (gRfuSIO32Id.unk0 != 1) + REG_SIOCNT |= SIO_ENABLE; + r1 = 16 * gRfuSIO32Id.unk0; // to handle side effect of inline asm + r1 = (r5 << r1) >> 16; + r5 = (r5 << 16 * (1 - gRfuSIO32Id.unk0)) >> 16; + if (gRfuSIO32Id.unkA == 0) + { + if (r1 == gRfuSIO32Id.unk6) + { + if (gRfuSIO32Id.unk2 > 3) + { + gRfuSIO32Id.unkA = r5; + } + else if (r1 == (u16)~gRfuSIO32Id.unk4) + { + r0_ = ~gRfuSIO32Id.unk6; + if (r5 == r0_) + ++gRfuSIO32Id.unk2; + } + } + else + { + gRfuSIO32Id.unk2 = gRfuSIO32Id.unkA; + } + } + if (gRfuSIO32Id.unk2 < 4) + gRfuSIO32Id.unk4 = *(gRfuSIO32Id.unk2 + Sio32ConnectionData); + else + gRfuSIO32Id.unk4 = 0x8001; + gRfuSIO32Id.unk6 = ~r5; + REG_SIODATA32 = (gRfuSIO32Id.unk4 << 16 * (1 - gRfuSIO32Id.unk0)) + + (gRfuSIO32Id.unk6 << 16 * gRfuSIO32Id.unk0); + if (gRfuSIO32Id.unk0 == 1 && (gRfuSIO32Id.unk2 || r5 == 0x494E)) + { + for (r0 = 0; r0 < 600; ++r0) + ; + if (gRfuSIO32Id.unkA == 0) + REG_SIOCNT |= SIO_ENABLE; + } +} From aa631825fcf8661f7ef57afe0cb652a4147ca77a Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 16 Jan 2020 07:28:23 +0800 Subject: [PATCH 4/5] resolve data sections --- common_syms/{librfu.txt => librfu_rfu.txt} | 1 - common_syms/librfu_sio32id.txt | 1 + data/librfu_rodata.s | 17 ----------------- include/librfu.h | 1 - ld_script.txt | 3 ++- ld_script_modern.txt | 5 +++-- src/librfu.c | 9 --------- src/librfu_rfu.c | 20 +++++++------------- src/librfu_sio32id.c | 9 +++------ sym_common.txt | 3 ++- 10 files changed, 18 insertions(+), 51 deletions(-) rename common_syms/{librfu.txt => librfu_rfu.txt} (85%) create mode 100644 common_syms/librfu_sio32id.txt delete mode 100644 data/librfu_rodata.s delete mode 100644 src/librfu.c diff --git a/common_syms/librfu.txt b/common_syms/librfu_rfu.txt similarity index 85% rename from common_syms/librfu.txt rename to common_syms/librfu_rfu.txt index 820c865bef..4b742dcd25 100644 --- a/common_syms/librfu.txt +++ b/common_syms/librfu_rfu.txt @@ -3,4 +3,3 @@ gRfuSlotStatusNI gRfuLinkStatus gRfuStatic gRfuFixed -gRfuSIO32Id diff --git a/common_syms/librfu_sio32id.txt b/common_syms/librfu_sio32id.txt new file mode 100644 index 0000000000..97395e84b3 --- /dev/null +++ b/common_syms/librfu_sio32id.txt @@ -0,0 +1 @@ +gRfuSIO32Id diff --git a/data/librfu_rodata.s b/data/librfu_rodata.s deleted file mode 100644 index 679256541d..0000000000 --- a/data/librfu_rodata.s +++ /dev/null @@ -1,17 +0,0 @@ - .section .rodata - -llsf_struct:: @ 89A3220 - .byte 2, 14, 0, 10, 9, 5, 7, 2 - .byte 0, 15, 1, 3, 3, 0, 31, 0 - .byte 3, 22, 18, 14, 13, 9, 11, 3 - .byte 15, 15, 1, 3, 3, 0, 0x7f, 0 - - .asciz "RFU_V1026" - - .align 2 -str_checkMbootLL:: @ 89A324C - .asciz "RFU-MBOOT" - - .align 2 -Sio32ConnectionData:: @ 89A3258 - .asciz "NINTENDOSio32ID_030820" diff --git a/include/librfu.h b/include/librfu.h index 8dd25541f6..39cc68319f 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -5,7 +5,6 @@ #include "main.h" /* TODOs: - * - split files * - documentation * - decompile librfu_intr.s once arm support is back again (for internal structs not documented in SDK) diff --git a/ld_script.txt b/ld_script.txt index 6719b69075..b7cb97a17d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -1235,7 +1235,8 @@ SECTIONS { src/agb_flash_mx.o(.rodata); src/agb_flash_le.o(.rodata); src/siirtc.o(.rodata); - data/librfu_rodata.o(.rodata); + src/librfu_rfu.o(.rodata); + src/librfu_sio32id.o(.rodata); *libgcc.a:_divdi3.o(.rodata); *libgcc.a:_udivdi3.o(.rodata); *libc.a(.rodata); diff --git a/ld_script_modern.txt b/ld_script_modern.txt index bf575857e6..52b08fd4b3 100644 --- a/ld_script_modern.txt +++ b/ld_script_modern.txt @@ -70,7 +70,7 @@ SECTIONS { src/librfu_intr.o(.text); asm/librfu_intr.o(.text); src/librfu_rfu.o(.text); - asm/librfu.o(.text); + src/librfu_sio32id.o(.text); *libagbsyscall.a:*.o(.text*); *libgcc.a:*.o(.text*); *libc.a:*.o(.text*); @@ -100,7 +100,8 @@ SECTIONS { src/agb_flash_mx.o(.rodata); src/agb_flash_le.o(.rodata); src/siirtc.o(.rodata); - data/librfu_rodata.o(.rodata); + src/librfu_rfu.o(.rodata); + src/librfu_sio32id.o(.rodata); *libgcc.a:*.o(.rodata*); *libc.a:*.o(.rodata*); *libc.a:*.o(.data*); diff --git a/src/librfu.c b/src/librfu.c deleted file mode 100644 index 1a295fd48c..0000000000 --- a/src/librfu.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "global.h" -#include "librfu.h" - -struct RfuSlotStatusUNI* gRfuSlotStatusUNI[4]; -struct RfuSlotStatusNI* gRfuSlotStatusNI[4]; -struct RfuLinkStatus *gRfuLinkStatus; -struct RfuStatic *gRfuStatic; -struct RfuFixed* gRfuFixed; -struct RfuSIO32Id gRfuSIO32Id; diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index f5f13cc5d4..732cc532d2 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -67,13 +67,13 @@ static void rfu_STC_NI_receive_Sender(u8, u8, const struct RfuLocalStruct *, __a static void rfu_STC_NI_initSlot_asRecvDataEntity(u8, struct NIComm *); static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); -//struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; -//struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; -//struct RfuLinkStatus *gRfuLinkStatus; -//struct RfuStatic *gRfuStatic; -//struct RfuFixed *gRfuFixed; +struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX]; +struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX]; +struct RfuLinkStatus *gRfuLinkStatus; +struct RfuStatic *gRfuStatic; +struct RfuFixed *gRfuFixed; -/*static const struct LLSFStruct llsf_struct[2] = { +static const struct LLSFStruct llsf_struct[2] = { { 2, 14, 0, 10, 9, 5, 7, 2, 0, 15, 1, 3, 3, 0x1f @@ -83,16 +83,9 @@ static void rfu_STC_NI_initSlot_asRecvControllData(u8, struct NIComm *); } }; -#ifdef EMERALD static const char lib_ver[] = "RFU_V1026"; -#else -static const char lib_ver[] = "RFU_V1024"; -#endif static const char str_checkMbootLL[] = "RFU-MBOOT"; -*/ -extern const struct LLSFStruct llsf_struct[2]; -extern const char str_checkMbootLL[];// = "RFU-MBOOT"; u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) { @@ -2031,6 +2024,7 @@ static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct } } _081E30AE: + ; } else if (r12->state == SLOT_STATE_SEND_LAST) { diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c index f5d652348f..fc57019865 100644 --- a/src/librfu_sio32id.c +++ b/src/librfu_sio32id.c @@ -4,13 +4,10 @@ static void Sio32IDIntr(void); static void Sio32IDInit(void); static s32 Sio32IDMain(void); -//struct RfuSIO32Id gRfuSIO32Id; +struct RfuSIO32Id gRfuSIO32Id; -//static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO -//static const char Sio32IDLib_Var[] = "Sio32ID_030820"; - -extern const u16 Sio32ConnectionData[]; -extern const char Sio32IDLib_Var[]; +static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO +static const char Sio32IDLib_Var[] = "Sio32ID_030820"; s32 AgbRFU_checkID(u8 r5) { diff --git a/sym_common.txt b/sym_common.txt index 8f08952071..a804a76e76 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -77,4 +77,5 @@ gReservedSpritePaletteCount: .include "m4a.o" .include "agb_flash.o" .include "librfu_stwi.o" - .include "librfu.o" + .include "librfu_rfu.o" + .include "librfu_sio32id.o" From a40f05490040350b8973728fdebe5a48360d4fac Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 17 Jan 2020 18:34:37 -0500 Subject: [PATCH 5/5] Move/rename gfx start/end vars --- include/constants/event_objects.h | 36 ++++++++++++++++--------------- include/event_object_movement.h | 3 --- src/event_object_movement.c | 13 ++++++----- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 07ed2d40c0..b30527c807 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -240,27 +240,29 @@ #define EVENT_OBJ_GFX_LINK_RS_MAY 236 #define EVENT_OBJ_GFX_LUGIA 237 #define EVENT_OBJ_GFX_HOOH 238 -#define EVENT_OBJ_GFX_BARD_2 239 + +#define NUM_OBJ_EVENT_GFX 239 // These are dynamic object gfx ids. // They correspond with the values of the VAR_OBJ_GFX_ID_X vars. // More info about them in include/constants/vars.h -#define EVENT_OBJ_GFX_VAR_0 240 -#define EVENT_OBJ_GFX_VAR_1 241 -#define EVENT_OBJ_GFX_VAR_2 242 -#define EVENT_OBJ_GFX_VAR_3 243 -#define EVENT_OBJ_GFX_VAR_4 244 -#define EVENT_OBJ_GFX_VAR_5 245 -#define EVENT_OBJ_GFX_VAR_6 246 -#define EVENT_OBJ_GFX_VAR_7 247 -#define EVENT_OBJ_GFX_VAR_8 248 -#define EVENT_OBJ_GFX_VAR_9 249 -#define EVENT_OBJ_GFX_VAR_A 250 -#define EVENT_OBJ_GFX_VAR_B 251 -#define EVENT_OBJ_GFX_VAR_C 252 -#define EVENT_OBJ_GFX_VAR_D 253 -#define EVENT_OBJ_GFX_VAR_E 254 -#define EVENT_OBJ_GFX_VAR_F 255 +#define OBJ_EVENT_GFX_VARS (NUM_OBJ_EVENT_GFX + 1) +#define EVENT_OBJ_GFX_VAR_0 (OBJ_EVENT_GFX_VARS + 0x0) // 240 +#define EVENT_OBJ_GFX_VAR_1 (OBJ_EVENT_GFX_VARS + 0x1) +#define EVENT_OBJ_GFX_VAR_2 (OBJ_EVENT_GFX_VARS + 0x2) +#define EVENT_OBJ_GFX_VAR_3 (OBJ_EVENT_GFX_VARS + 0x3) +#define EVENT_OBJ_GFX_VAR_4 (OBJ_EVENT_GFX_VARS + 0x4) +#define EVENT_OBJ_GFX_VAR_5 (OBJ_EVENT_GFX_VARS + 0x5) +#define EVENT_OBJ_GFX_VAR_6 (OBJ_EVENT_GFX_VARS + 0x6) +#define EVENT_OBJ_GFX_VAR_7 (OBJ_EVENT_GFX_VARS + 0x7) +#define EVENT_OBJ_GFX_VAR_8 (OBJ_EVENT_GFX_VARS + 0x8) +#define EVENT_OBJ_GFX_VAR_9 (OBJ_EVENT_GFX_VARS + 0x9) +#define EVENT_OBJ_GFX_VAR_A (OBJ_EVENT_GFX_VARS + 0xA) +#define EVENT_OBJ_GFX_VAR_B (OBJ_EVENT_GFX_VARS + 0xB) +#define EVENT_OBJ_GFX_VAR_C (OBJ_EVENT_GFX_VARS + 0xC) +#define EVENT_OBJ_GFX_VAR_D (OBJ_EVENT_GFX_VARS + 0xD) +#define EVENT_OBJ_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE) +#define EVENT_OBJ_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) // 255 #define SHADOW_SIZE_S 0 #define SHADOW_SIZE_M 1 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 93f73e6357..957d621749 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -1,9 +1,6 @@ #ifndef GUARD_FIELD_EVENT_OBJ_H #define GUARD_FIELD_EVENT_OBJ_H -#define NUM_OBJECT_GRAPHICS_INFO 239 -#define SPRITE_VAR 240 - enum SpinnerRunnerFollowPatterns { RUNFOLLOW_ANY, diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f84a7bedbe..491e3cd6b2 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1861,27 +1861,30 @@ const struct EventObjectGraphicsInfo *GetEventObjectGraphicsInfo(u8 graphicsId) { u8 bard; - if (graphicsId >= SPRITE_VAR) + if (graphicsId >= OBJ_EVENT_GFX_VARS) { - graphicsId = VarGetEventObjectGraphicsId(graphicsId - SPRITE_VAR); + graphicsId = VarGetEventObjectGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); } + if (graphicsId == EVENT_OBJ_GFX_BARD) { bard = GetCurrentMauvilleOldMan(); return gMauvilleOldManGraphicsInfoPointers[bard]; } - if (graphicsId >= NUM_OBJECT_GRAPHICS_INFO) + + if (graphicsId >= NUM_OBJ_EVENT_GFX) { graphicsId = EVENT_OBJ_GFX_NINJA_BOY; } + return gEventObjectGraphicsInfoPointers[graphicsId]; } static void SetEventObjectDynamicGraphicsId(struct EventObject *eventObject) { - if (eventObject->graphicsId >= SPRITE_VAR) + if (eventObject->graphicsId >= OBJ_EVENT_GFX_VARS) { - eventObject->graphicsId = VarGetEventObjectGraphicsId(eventObject->graphicsId - SPRITE_VAR); + eventObject->graphicsId = VarGetEventObjectGraphicsId(eventObject->graphicsId - OBJ_EVENT_GFX_VARS); } }