diff options
| -rw-r--r-- | asm/link_rfu.s | 111 | ||||
| -rw-r--r-- | include/link_rfu.h | 12 | ||||
| -rw-r--r-- | src/link_rfu.c | 56 | 
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; +    } +} | 
