summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-12-04 21:05:41 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2017-12-04 21:05:41 -0500
commit21619096da8532cdb16caf56f38af996bbf75540 (patch)
treea0dcf1124b933eafaff0da852e785bd817066548
parent765ad80884338edfa752dcee450f62742b94d547 (diff)
sub_800E748
-rw-r--r--asm/link_rfu.s111
-rw-r--r--include/link_rfu.h12
-rw-r--r--src/link_rfu.c56
3 files changed, 59 insertions, 120 deletions
diff --git a/asm/link_rfu.s b/asm/link_rfu.s
index 0a93e630f..6205b4204 100644
--- a/asm/link_rfu.s
+++ b/asm/link_rfu.s
@@ -5,117 +5,6 @@
.text
- thumb_func_start sub_800E748
-sub_800E748: @ 800E748
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_8010750
- ldr r0, =gUnknown_03005000
- ldrh r0, [r0, 0x4]
- cmp r0, 0x12
- bls _0800E75C
- b _0800E862
-_0800E75C:
- lsls r0, 2
- ldr r1, =_0800E770
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0800E770:
- .4byte _0800E7BC
- .4byte _0800E862
- .4byte _0800E7E4
- .4byte _0800E862
- .4byte _0800E814
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E862
- .4byte _0800E828
-_0800E7BC:
- ldr r0, =gUnknown_02022B2C
- bl sub_800BFCC
- ldr r0, =gUnknown_03005000
- movs r2, 0x1
- strh r2, [r0, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r2, [r0, 0xA]
- b _0800E862
- .pool
-_0800E7E4:
- ldr r4, =gUnknown_03005000
- ldrb r0, [r4, 0xC]
- ldr r3, =gUnknown_082ED6E0
- movs r1, 0
- movs r2, 0xF0
- bl sub_800C054
- movs r0, 0x3
- strh r0, [r4, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x6
- strh r1, [r0, 0xA]
- b _0800E862
- .pool
-_0800E814:
- movs r0, 0
- bl sub_800C27C
- ldr r1, =gUnknown_03005000
- movs r0, 0x5
- strh r0, [r1, 0x4]
- b _0800E862
- .pool
-_0800E828:
- ldr r4, =gUnknown_03005000
- ldr r0, =0x00000cdb
- adds r1, r4, r0
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r0, =sub_800EDBC
- bl sub_800D52C
- bl sub_800EAB4
- bl sub_800EAFC
- movs r0, 0x14
- strh r0, [r4, 0x4]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- strh r1, [r0, 0xA]
- ldr r0, =sub_801084C
- movs r1, 0x5
- bl CreateTask
- adds r0, r5, 0
- bl DestroyTask
-_0800E862:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_800E748
-
thumb_func_start sub_800E87C
sub_800E87C: @ 800E87C
lsls r0, 24
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 6a55bb536..4f8e193fc 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -67,7 +67,7 @@ struct UnkRfuStruct_1 {
/* 0x01a */ u16 unk_1a;
/* 0x01c */ u16 unk_1c;
/* 0x01e */ u16 unk_1e;
- /* 0x020 */ u16 *unk_20;
+ /* 0x020 */ const u16 *unk_20;
/* 0x024 */ u8 unk_24;
/* 0x026 */ u16 unk_26;
/* 0x028 */ u16 unk_28[4];
@@ -126,7 +126,9 @@ struct UnkRfuStruct_Sub_Unused {
};
struct UnkRfuStruct_2 {
- /* 0x000 */ u8 filler_00[12];
+ /* 0x000 */ u8 filler_00[4];
+ /* 0x004 */ u16 unk_04;
+ /* 0x006 */ u8 filler_06[6];
/* 0x00c */ u8 unk_0c;
/* 0x00d */ u8 playerCount;
/* 0x00e */ u8 filler_0e[0x5e];
@@ -139,7 +141,9 @@ struct UnkRfuStruct_2 {
/* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
/* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
/* 0xc3c */ u8 filler_c3c[3];
- /* 0xc3f */ u8 filler_c3f[0xb5];
+ /* 0xc3f */ u8 filler_c3f[0x9c];
+ /* 0xcdb */ vu8 unk_cdb;
+ /* 0xcdc */ u8 filler_cdc[0x18];
}; // size = 0xcf4
// Exported RAM declarations
@@ -174,5 +178,7 @@ bool32 sub_8010F1C(void);
bool32 sub_800F0B8(void);
u32 sub_80124D4(void);
void RfuVSync(void);
+void sub_80111B0(bool32 a0);
+u8 sub_8011A74(void);
#endif //GUARD_LINK_RFU_H
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 32080bf29..14584f99f 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -2,6 +2,7 @@
// Includes
#include "global.h"
#include "malloc.h"
+#include "task.h"
#include "rng.h"
#include "decompress.h"
#include "text.h"
@@ -46,10 +47,13 @@ static void sub_800D434(void);
static void sub_800D610(void);
void sub_800D630(void);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
+void sub_800EDBC(u16 a0);
+void sub_800EAB4(void);
+void sub_800EAFC(void);
void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data);
bool32 sub_8010454(u16 a0);
-void sub_80111B0(bool32 a0);
-u8 sub_8011A74(void);
+void sub_8010750(void);
+void sub_801084C(u8 taskId);
u8 sub_8012224(void);
// .rodata
@@ -186,6 +190,8 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
SpriteCallbackDummy
};
+extern const u16 gUnknown_082ED6E0[4];
+
// .text
u32 sub_800BEC0(void)
@@ -290,10 +296,10 @@ void sub_800C048(void)
gUnknown_03004140.unk_04 = 0x15;
}
-u8 sub_800C054(u8 r5, u16 r7, u16 r8, u16 *r6)
+u8 sub_800C054(u8 r5, u16 r7, u16 r8, const u16 *r6)
{
u8 i;
- u16 *buffer;
+ const u16 *buffer;
if (gUnknown_03004140.unk_04 != 0 && (gUnknown_03004140.unk_04 != 0x08 || r5 != 1))
{
@@ -1168,7 +1174,7 @@ static void sub_800CF34(void)
u8 i;
u8 r5;
u8 r4;
- u16 *ptr;
+ const u16 *ptr;
if (gUnknown_03004140.unk_04 == 5 || gUnknown_03004140.unk_04 == 6 || gUnknown_03004140.unk_04 == 7 || gUnknown_03004140.unk_04 == 8)
{
@@ -1338,7 +1344,7 @@ static void sub_800D268(void)
static u8 sub_800D294(void)
{
u8 i;
- u16 *ptr;
+ const u16 *ptr;
u8 flags = 0x00;
for (i = 0; i < gUnknown_03007890->unk_08; i++)
@@ -2381,3 +2387,41 @@ void sub_800E700(void)
rfu_setTimerInterrupt(3, gIntrTable + 2);
}
}
+
+void sub_800E748(u8 taskId)
+{
+ sub_8010750();
+ switch (gUnknown_03005000.unk_04)
+ {
+ case 0:
+ sub_800BFCC(&gUnknown_02022B2C);
+ gUnknown_03005000.unk_04 = 1;
+ gTasks[taskId].data[1] = 1;
+ break;
+ case 1:
+ break;
+ case 2:
+ sub_800C054(gUnknown_03005000.unk_0c, 0, 240, gUnknown_082ED6E0);
+ gUnknown_03005000.unk_04 = 3;
+ gTasks[taskId].data[1] = 6;
+ break;
+ case 3:
+ break;
+ case 4:
+ sub_800C27C(FALSE);
+ gUnknown_03005000.unk_04 = 5;
+ break;
+ case 5:
+ break;
+ case 18:
+ gUnknown_03005000.unk_cdb = 0;
+ sub_800D52C(sub_800EDBC);
+ sub_800EAB4();
+ sub_800EAFC();
+ gUnknown_03005000.unk_04 = 20;
+ gTasks[taskId].data[1] = 8;
+ CreateTask(sub_801084C, 5);
+ DestroyTask(taskId);
+ break;
+ }
+}