through rfufunc_80FA020

This commit is contained in:
PikalaxALT
2018-01-20 11:53:35 -05:00
parent 6ac0175c1e
commit b8af0f011d
3 changed files with 120 additions and 345 deletions

View File

@@ -5,337 +5,6 @@
.text
thumb_func_start sub_800FE50
sub_800FE50: @ 800FE50
push {r4,lr}
adds r4, r0, 0
ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0800FE76
bl sub_8011A80
cmp r0, 0
bne _0800FE76
ldr r0, =gUnknown_03005000+0xF2
adds r1, r4, 0
movs r2, 0xC
bl memcpy
movs r0, 0xBC
lsls r0, 6
bl sub_800FD14
_0800FE76:
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end sub_800FE50
thumb_func_start sub_800FE84
@ bool8 sub_800FE84(u32 a1, u32 size)
sub_800FE84: @ 800FE84
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
adds r7, r0, 0
adds r6, r1, 0
ldr r5, =gUnknown_03005000
ldr r0, [r5]
cmp r0, 0
bne _0800FEB8
ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0800FEB8
movs r0, 0x7C
adds r0, r5
mov r9, r0
ldrb r1, [r0]
mov r8, r1
cmp r1, 0
beq _0800FEC8
ldr r1, =gUnknown_02022B44
adds r1, 0x83
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
_0800FEB8:
movs r0, 0
b _0800FF32
.pool
_0800FEC8:
adds r0, r6, 0
movs r1, 0xC
bl __umodsi3
negs r4, r0
orrs r4, r0
lsrs r4, 31
bl GetMultiplayerId
adds r1, r5, 0
adds r1, 0x7D
strb r0, [r1]
movs r0, 0x1
mov r1, r9
strb r0, [r1]
adds r0, r6, 0
movs r1, 0xC
bl __udivsi3
adds r0, r4
adds r1, r5, 0
adds r1, 0x6E
strh r0, [r1]
adds r0, r5, 0
adds r0, 0x6C
mov r1, r8
strh r1, [r0]
movs r0, 0x80
lsls r0, 1
cmp r6, r0
bls _0800FF0A
str r7, [r5, 0x70]
b _0800FF1C
_0800FF0A:
ldr r4, =gBlockSendBuffer
cmp r7, r4
beq _0800FF1A
adds r0, r4, 0
adds r1, r7, 0
adds r2, r6, 0
bl memcpy
_0800FF1A:
str r4, [r5, 0x70]
_0800FF1C:
movs r0, 0x88
lsls r0, 8
bl sub_800FD14
ldr r0, =gUnknown_03005000
ldr r1, =rfufunc_80F9F44
str r1, [r0]
adds r0, 0x5B
movs r1, 0
strb r1, [r0]
movs r0, 0x1
_0800FF32:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
.pool
thumb_func_end sub_800FE84
thumb_func_start rfufunc_80F9F44
rfufunc_80F9F44: @ 800FF4C
push {r4,r5,lr}
ldr r0, =gSendCmd
ldrh r0, [r0]
cmp r0, 0
bne _0800FFA0
movs r5, 0x88
lsls r5, 8
adds r0, r5, 0
bl sub_800FD14
ldr r4, =gUnknown_03005000
ldrb r0, [r4, 0xC]
cmp r0, 0x1
bne _0800FF84
adds r1, r4, 0
adds r1, 0x5B
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
bls _0800FFA0
b _0800FF9C
.pool
_0800FF84:
bl GetMultiplayerId
ldr r1, =gRecvCmds
lsls r0, 24
lsrs r0, 20
adds r0, r1
ldrh r1, [r0]
movs r0, 0xFF
lsls r0, 8
ands r0, r1
cmp r0, r5
bne _0800FFA0
_0800FF9C:
ldr r0, =sub_800FFB0
str r0, [r4]
_0800FFA0:
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end rfufunc_80F9F44
thumb_func_start sub_800FFB0
sub_800FFB0: @ 800FFB0
push {r4-r6,lr}
ldr r0, =gUnknown_03005000
mov r12, r0
ldr r5, [r0, 0x70]
ldr r3, =gSendCmd
mov r2, r12
adds r2, 0x6C
ldrh r1, [r2]
movs r4, 0x89
lsls r4, 8
adds r0, r4, 0
orrs r0, r1
strh r0, [r3]
movs r4, 0
adds r6, r2, 0
adds r3, 0x2
_0800FFD0:
lsls r2, r4, 1
ldrh r1, [r6]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
adds r0, r2
adds r0, r5
ldrb r1, [r0, 0x1]
lsls r1, 8
ldrb r0, [r0]
orrs r0, r1
strh r0, [r3]
adds r3, 0x2
adds r4, 0x1
cmp r4, 0x6
ble _0800FFD0
mov r0, r12
adds r0, 0x6C
ldrh r1, [r0]
adds r1, 0x1
strh r1, [r0]
adds r0, 0x2
ldrh r0, [r0]
lsls r1, 16
lsrs r1, 16
cmp r0, r1
bhi _08010014
mov r0, r12
adds r0, 0x7C
movs r1, 0
strb r1, [r0]
ldr r0, =rfufunc_80FA020
mov r1, r12
str r0, [r1]
_08010014:
pop {r4-r6}
pop {r0}
bx r0
.pool
thumb_func_end sub_800FFB0
thumb_func_start rfufunc_80FA020
rfufunc_80FA020: @ 8010028
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
ldr r5, =gUnknown_03005000
ldr r0, [r5, 0x70]
mov r8, r0
bl GetMultiplayerId
lsls r0, 24
lsrs r6, r0, 24
ldrb r0, [r5, 0xC]
cmp r0, 0
bne _080100F0
ldr r3, =gSendCmd
adds r2, r5, 0
adds r2, 0x6E
ldrh r0, [r2]
subs r0, 0x1
ldr r4, =0xffff8900
adds r1, r4, 0
orrs r0, r1
strh r0, [r3]
movs r4, 0
mov r9, r5
ldr r0, =gRecvCmds
mov r12, r0
lsls r5, r6, 4
adds r7, r2, 0
adds r3, 0x2
_08010064:
lsls r2, r4, 1
ldrh r1, [r7]
lsls r0, r1, 1
adds r0, r1
lsls r0, 2
adds r0, r2
add r0, r8
adds r1, r0, 0
subs r1, 0xB
ldrb r1, [r1]
lsls r1, 8
subs r0, 0xC
ldrb r0, [r0]
orrs r0, r1
strh r0, [r3]
adds r3, 0x2
adds r4, 0x1
cmp r4, 0x6
ble _08010064
mov r1, r12
adds r0, r5, r1
ldrb r1, [r0]
mov r3, r9
adds r0, r3, 0
adds r0, 0x6E
ldrh r0, [r0]
subs r0, 0x1
cmp r1, r0
bne _080100F4
lsls r0, r6, 2
adds r0, r6
lsls r0, 2
adds r1, r3, 0
adds r1, 0x88
adds r1, r0, r1
ldr r2, =gUnknown_082ED628
adds r0, r3
adds r0, 0x82
ldrh r0, [r0]
lsls r0, 2
adds r0, r2
ldr r1, [r1]
ldr r0, [r0]
cmp r1, r0
beq _080100E8
adds r0, r6, 0
bl sub_800F638
ldr r1, =gUnknown_02022B44
adds r1, 0x64
ldrh r0, [r1]
adds r0, 0x1
strh r0, [r1]
b _080100F4
.pool
_080100E8:
movs r0, 0
mov r4, r9
str r0, [r4]
b _080100F4
_080100F0:
movs r0, 0
str r0, [r5]
_080100F4:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end rfufunc_80FA020
thumb_func_start sub_8010100
sub_8010100: @ 8010100
push {lr}

View File

@@ -47,7 +47,11 @@ struct UnkLinkRfuStruct_02022B44
u8 fill_08[6];
vu8 unk_0e;
u8 unk_0f;
u8 fill_10[0xcc];
u8 fill_10[0x54];
u16 unk_64;
u8 fill_66[0x1d];
u8 unk_83;
u8 fill_84[0x58];
};
struct UnkRfuStruct_1 {
@@ -96,7 +100,7 @@ struct UnkRfuStruct_1 {
struct UnkRfuStruct_2_Sub_6c {
/* 0x00 */ u16 unk_00;
/* 0x02 */ u16 unk_02;
/* 0x04 */ u8 *unk_04;
/* 0x04 */ const u8 *unk_04;
/* 0x08 */ u32 unk_08;
/* 0x0c */ u32 unk_0c;
/* 0x10 */ u8 unk_10;
@@ -210,7 +214,7 @@ bool32 sub_800F7E4(void);
void sub_800F804(void);
void sub_800F850(void);
u8 sub_800FCD8(void);
bool32 sub_800FE84(const void *src, size_t size);
bool32 sub_800FE84(const u8 *src, size_t size);
void Rfu_set_zero(void);
u8 sub_80104F4(void);
u8 rfu_get_multiplayer_id(void);
@@ -224,10 +228,15 @@ void sub_800E174(void);
void sub_800E6D0(void);
bool32 sub_8010EC0(void);
bool32 sub_8010F1C(void);
bool32 sub_8011A80(void);
bool32 sub_800F0B8(void);
u32 sub_80124D4(void);
void RfuVSync(void);
void sub_80111B0(bool32 a0);
u8 sub_8011A74(void);
struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void);
void sub_8011068(u8 a0);
void sub_8011170(u32 a0);
void sub_8011A64(u8 a0, u16 a1);
#endif //GUARD_LINK_RFU_H

View File

@@ -49,16 +49,18 @@ static void sub_800D358(u8 a0);
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);
static bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
static void sub_800EAB4(void);
static void sub_800EAFC(void);
void sub_800ED34(u16 unused);
static void sub_800EDBC(u16 unused);
static void sub_800F048(void);
struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void);
void sub_800F86C(u8 a0);
void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data);
void sub_800FD14(u16 a0);
static void sub_800F86C(u8 unused);
static void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data);
void sub_800FD14(u16 command);
void rfufunc_80F9F44(void);
void sub_800FFB0(void);
void rfufunc_80FA020(void);
bool32 sub_8010454(u16 a0);
void sub_8010528(void);
void sub_8010750(void);
@@ -68,9 +70,6 @@ void sub_80109E8(u16 a0);
void sub_8010A70(void *a0);
void sub_8010AAC(u8 taskId);
void sub_8010D0C(u8 taskId);
void sub_8011068(u8 a0);
void sub_8011170(u32 a0);
void sub_8011A64(u8 a0, u16 a1);
void sub_8011D6C(u8 a0);
u8 sub_8012224(void);
void sub_801227C(void);
@@ -1885,7 +1884,7 @@ void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2)
}
}
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
static bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
{
int i;
@@ -3393,7 +3392,7 @@ void sub_800F850(void)
gUnknown_03005000.unk_00 = sub_800F820;
}
void sub_800F86C(u8 unused)
static void sub_800F86C(u8 unused)
{
u16 i;
u16 j;
@@ -3523,7 +3522,7 @@ bool8 sub_800FC88(void)
return TRUE;
}
void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data)
static void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data)
{
data->unk_00 = 0;
data->unk_02 = 0;
@@ -3749,3 +3748,101 @@ __attribute__((naked)) void sub_800FD14(u16 command)
"\t.pool");
}
#endif
void sub_800FE50(u16 *a0)
{
if (gSendCmd[0] == 0 && sub_8011A80() == 0)
{
memcpy(gUnknown_03005000.unk_f2, a0, sizeof(gUnknown_03005000.unk_f2));
sub_800FD14(0x2f00);
}
}
bool32 sub_800FE84(const u8 *src, size_t size)
{
bool8 r4;
if (gUnknown_03005000.unk_00 != NULL)
return FALSE;
if (gSendCmd[0] != 0)
return FALSE;
if (gUnknown_03005000.unk_6c.unk_10 != 0)
{
gUnknown_02022B44.unk_83++;
return FALSE;
}
r4 = (size % 12) != 0;
gUnknown_03005000.unk_6c.unk_11 = GetMultiplayerId();
gUnknown_03005000.unk_6c.unk_10 = 1;
gUnknown_03005000.unk_6c.unk_02 = (size / 12) + r4;
gUnknown_03005000.unk_6c.unk_00 = 0;
if (size > 0x100)
gUnknown_03005000.unk_6c.unk_04 = src;
else
{
if (src != gBlockSendBuffer)
memcpy(gBlockSendBuffer, src, size);
gUnknown_03005000.unk_6c.unk_04 = gBlockSendBuffer;
}
sub_800FD14(0x8800);
gUnknown_03005000.unk_00 = rfufunc_80F9F44;
gUnknown_03005000.unk_5b = 0;
return TRUE;
}
void rfufunc_80F9F44(void)
{
if (gSendCmd[0] == 0)
{
sub_800FD14(0x8800);
if (gUnknown_03005000.unk_0c == 1)
{
if (++gUnknown_03005000.unk_5b > 2)
gUnknown_03005000.unk_00 = sub_800FFB0;
}
else
{
if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800)
gUnknown_03005000.unk_00 = sub_800FFB0;
}
}
}
void sub_800FFB0(void)
{
int i;
const u8 *src = gUnknown_03005000.unk_6c.unk_04;
gSendCmd[0] = 0x8900 | gUnknown_03005000.unk_6c.unk_00;
for (i = 0; i < 7; i++)
gSendCmd[i + 1] = (src[(i << 1) + gUnknown_03005000.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + gUnknown_03005000.unk_6c.unk_00 * 12 + 0];
gUnknown_03005000.unk_6c.unk_00++;
if (gUnknown_03005000.unk_6c.unk_02 <= gUnknown_03005000.unk_6c.unk_00)
{
gUnknown_03005000.unk_6c.unk_10 = 0;
gUnknown_03005000.unk_00 = rfufunc_80FA020;
}
}
void rfufunc_80FA020(void)
{
const u8 *src = gUnknown_03005000.unk_6c.unk_04;
u8 mpId = GetMultiplayerId();
int i;
if (gUnknown_03005000.unk_0c == 0)
{
gSendCmd[0] = (~0x76ff) | (gUnknown_03005000.unk_6c.unk_02 - 1);
for (i = 0; i < 7; i++)
gSendCmd[i + 1] = (src[(i << 1) + (gUnknown_03005000.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (gUnknown_03005000.unk_6c.unk_02 - 1) * 12 + 0];
if ((u8)gRecvCmds[mpId][0] == gUnknown_03005000.unk_6c.unk_02 - 1)
{
if (gUnknown_03005000.unk_80[mpId].unk_08 != gUnknown_082ED628[gUnknown_03005000.unk_80[mpId].unk_02])
{
sub_800F638(mpId, gUnknown_03005000.unk_80[mpId].unk_08);
gUnknown_02022B44.unk_64++;
}
else
gUnknown_03005000.unk_00 = NULL;
}
}
else
gUnknown_03005000.unk_00 = NULL;
}