mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
sub_800C36C
This commit is contained in:
parent
d6d315d817
commit
03ce7b042a
232
asm/link_rfu.s
232
asm/link_rfu.s
@ -5,238 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_800C36C
|
||||
sub_800C36C: @ 800C36C
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
sub sp, 0x4
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0
|
||||
mov r8, r1
|
||||
mov r5, sp
|
||||
adds r5, 0x1
|
||||
mov r4, sp
|
||||
adds r4, 0x2
|
||||
mov r1, sp
|
||||
adds r2, r5, 0
|
||||
adds r3, r4, 0
|
||||
bl rfu_REQBN_watchLink
|
||||
mov r0, sp
|
||||
ldrb r0, [r0]
|
||||
adds r7, r4, 0
|
||||
cmp r0, 0
|
||||
beq _0800C43E
|
||||
ldr r1, =gUnknown_03004140
|
||||
mov r0, sp
|
||||
ldrb r0, [r0]
|
||||
strh r0, [r1, 0x14]
|
||||
ldrb r0, [r5]
|
||||
strh r0, [r1, 0x16]
|
||||
ldrb r0, [r1, 0x9]
|
||||
adds r6, r1, 0
|
||||
cmp r0, 0
|
||||
beq _0800C426
|
||||
movs r0, 0x1
|
||||
strb r0, [r6, 0xA]
|
||||
ldrb r0, [r6, 0x6]
|
||||
cmp r0, 0
|
||||
bne _0800C3C2
|
||||
ldrb r0, [r5]
|
||||
cmp r0, 0
|
||||
bne _0800C3C2
|
||||
movs r0, 0x4
|
||||
strb r0, [r6, 0xA]
|
||||
_0800C3C2:
|
||||
ldrb r0, [r6, 0xA]
|
||||
cmp r0, 0x1
|
||||
bne _0800C40C
|
||||
movs r2, 0
|
||||
mov r4, sp
|
||||
movs r5, 0x1
|
||||
mov r12, r6
|
||||
mov r3, r12
|
||||
adds r3, 0x30
|
||||
movs r6, 0x34
|
||||
add r6, r12
|
||||
mov r9, r6
|
||||
_0800C3DA:
|
||||
ldrb r0, [r4]
|
||||
asrs r0, r2
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
beq _0800C3F8
|
||||
adds r0, r5, 0
|
||||
lsls r0, r2
|
||||
ldrb r1, [r3]
|
||||
orrs r0, r1
|
||||
strb r0, [r3]
|
||||
lsls r0, r2, 1
|
||||
add r0, r9
|
||||
mov r6, r12
|
||||
ldrh r1, [r6, 0x32]
|
||||
strh r1, [r0]
|
||||
_0800C3F8:
|
||||
adds r0, r2, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
cmp r2, 0x3
|
||||
bls _0800C3DA
|
||||
movs r0, 0x31
|
||||
b _0800C41E
|
||||
.pool
|
||||
_0800C40C:
|
||||
movs r0, 0
|
||||
strb r0, [r6, 0xA]
|
||||
mov r0, sp
|
||||
ldrb r0, [r0]
|
||||
bl sub_800D334
|
||||
movs r0, 0x1
|
||||
mov r8, r0
|
||||
movs r0, 0x33
|
||||
_0800C41E:
|
||||
movs r1, 0x1
|
||||
bl sub_800D30C
|
||||
b _0800C43A
|
||||
_0800C426:
|
||||
mov r0, sp
|
||||
ldrb r0, [r0]
|
||||
bl sub_800D334
|
||||
movs r1, 0x1
|
||||
mov r8, r1
|
||||
movs r0, 0x30
|
||||
movs r1, 0x2
|
||||
bl sub_800D30C
|
||||
_0800C43A:
|
||||
bl sub_800D610
|
||||
_0800C43E:
|
||||
ldr r0, =gUnknown_03007890
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
bne _0800C518
|
||||
ldrb r0, [r7]
|
||||
cmp r0, 0
|
||||
beq _0800C49C
|
||||
movs r2, 0
|
||||
ldr r6, =gUnknown_03004140
|
||||
movs r3, 0x1
|
||||
adds r4, r6, 0
|
||||
adds r4, 0x34
|
||||
adds r6, 0x30
|
||||
adds r5, r7, 0
|
||||
_0800C45C:
|
||||
ldrb r0, [r6]
|
||||
asrs r0, r2
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
beq _0800C478
|
||||
ldrb r0, [r5]
|
||||
asrs r0, r2
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
beq _0800C478
|
||||
lsls r0, r2, 1
|
||||
adds r0, r4
|
||||
movs r1, 0
|
||||
strh r1, [r0]
|
||||
_0800C478:
|
||||
adds r0, r2, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
cmp r2, 0x3
|
||||
bls _0800C45C
|
||||
ldr r3, =gUnknown_03004140
|
||||
adds r2, r3, 0
|
||||
adds r2, 0x30
|
||||
ldrb r1, [r7]
|
||||
ldrb r0, [r2]
|
||||
bics r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r0, [r7]
|
||||
strh r0, [r3, 0x14]
|
||||
movs r0, 0x32
|
||||
movs r1, 0x1
|
||||
bl sub_800D30C
|
||||
_0800C49C:
|
||||
ldr r0, =gUnknown_03004140
|
||||
adds r3, r0, 0
|
||||
adds r3, 0x30
|
||||
ldrb r1, [r3]
|
||||
adds r6, r0, 0
|
||||
cmp r1, 0
|
||||
beq _0800C514
|
||||
movs r4, 0
|
||||
movs r2, 0
|
||||
movs r5, 0x1
|
||||
_0800C4B0:
|
||||
ldrb r0, [r3]
|
||||
asrs r0, r2
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
beq _0800C4E2
|
||||
lsls r1, r2, 1
|
||||
adds r0, r6, 0
|
||||
adds r0, 0x34
|
||||
adds r1, r0
|
||||
ldrh r0, [r1]
|
||||
cmp r0, 0
|
||||
beq _0800C4E2
|
||||
subs r0, 0x1
|
||||
strh r0, [r1]
|
||||
lsls r0, 16
|
||||
cmp r0, 0
|
||||
bne _0800C4E2
|
||||
adds r0, r5, 0
|
||||
lsls r0, r2
|
||||
ldrb r1, [r3]
|
||||
bics r1, r0
|
||||
strb r1, [r3]
|
||||
orrs r4, r0
|
||||
lsls r0, r4, 24
|
||||
lsrs r4, r0, 24
|
||||
_0800C4E2:
|
||||
adds r0, r2, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r2, r0, 24
|
||||
cmp r2, 0x3
|
||||
bls _0800C4B0
|
||||
cmp r4, 0
|
||||
beq _0800C506
|
||||
adds r0, r4, 0
|
||||
bl sub_800D334
|
||||
movs r6, 0x1
|
||||
mov r8, r6
|
||||
ldr r0, =gUnknown_03004140
|
||||
strh r4, [r0, 0x14]
|
||||
movs r0, 0x33
|
||||
movs r1, 0x1
|
||||
bl sub_800D30C
|
||||
_0800C506:
|
||||
ldr r0, =gUnknown_03004140
|
||||
adds r1, r0, 0
|
||||
adds r1, 0x30
|
||||
ldrb r1, [r1]
|
||||
adds r6, r0, 0
|
||||
cmp r1, 0
|
||||
bne _0800C518
|
||||
_0800C514:
|
||||
movs r0, 0
|
||||
strb r0, [r6, 0xA]
|
||||
_0800C518:
|
||||
mov r0, r8
|
||||
add sp, 0x4
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.pool
|
||||
thumb_func_end sub_800C36C
|
||||
|
||||
thumb_func_start rfu_syncVBlank_
|
||||
rfu_syncVBlank_: @ 800C530
|
||||
push {lr}
|
||||
|
@ -157,3 +157,4 @@ void rfu_REQ_sendData(u8);
|
||||
void rfu_setMSCCallback(void (*func)(u16));
|
||||
void rfu_setREQCallback(void (*func)(u16, u16));
|
||||
bool8 rfu_getMasterSlave(void);
|
||||
void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3);
|
||||
|
@ -52,7 +52,7 @@ struct UnkRfuStruct_1 {
|
||||
/* 0x012 */ u8 unk_12;
|
||||
// aligned
|
||||
/* 0x014 */ u16 unk_14;
|
||||
/* 0x016 */ u8 filler_16[2];
|
||||
/* 0x016 */ u16 unk_16;
|
||||
/* 0x018 */ u16 unk_18;
|
||||
/* 0x01a */ u16 unk_1a;
|
||||
/* 0x01c */ u8 filler_1c[2];
|
||||
|
@ -350,3 +350,95 @@ void sub_800C27C(bool8 a0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_800C36C(u16 a0)
|
||||
{
|
||||
bool8 retVal;
|
||||
u8 i;
|
||||
u8 sp0;
|
||||
u8 sp1;
|
||||
u8 sp2;
|
||||
u8 flags;
|
||||
|
||||
retVal = FALSE;
|
||||
rfu_REQBN_watchLink(a0, &sp0, &sp1, &sp2);
|
||||
if (sp0)
|
||||
{
|
||||
gUnknown_03004140.unk_14 = sp0;
|
||||
gUnknown_03004140.unk_16 = sp1;
|
||||
if (gUnknown_03004140.unk_09)
|
||||
{
|
||||
gUnknown_03004140.unk_0a = 1;
|
||||
if (gUnknown_03004140.unk_06 == 0 && sp1 == 0)
|
||||
{
|
||||
gUnknown_03004140.unk_0a = 4;
|
||||
}
|
||||
if (gUnknown_03004140.unk_0a == 1)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if ((sp0 >> i) & 1)
|
||||
{
|
||||
gUnknown_03004140.unk_30 |= (1 << i);
|
||||
gUnknown_03004140.unk_34[i] = gUnknown_03004140.unk_32;
|
||||
}
|
||||
}
|
||||
sub_800D30C(0x31, 0x01);
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_03004140.unk_0a = 0;
|
||||
sub_800D334(sp0);
|
||||
retVal = TRUE;
|
||||
sub_800D30C(0x33, 0x01);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800D334(sp0);
|
||||
retVal = TRUE;
|
||||
sub_800D30C(0x30, 0x02);
|
||||
}
|
||||
sub_800D610();
|
||||
}
|
||||
if (gUnknown_03007890->unk_00 == 1)
|
||||
{
|
||||
if (sp2)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if ((gUnknown_03004140.unk_30 >> i) & 1 && (sp2 >> i) & 1)
|
||||
{
|
||||
gUnknown_03004140.unk_34[i] = 0;
|
||||
}
|
||||
}
|
||||
gUnknown_03004140.unk_30 &= ~sp2;
|
||||
gUnknown_03004140.unk_14 = sp2;
|
||||
sub_800D30C(0x32, 0x01);
|
||||
}
|
||||
if (gUnknown_03004140.unk_30)
|
||||
{
|
||||
flags = 0;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
if ((gUnknown_03004140.unk_30 >> i) & 1 && gUnknown_03004140.unk_34[i] && --gUnknown_03004140.unk_34[i] == 0)
|
||||
{
|
||||
gUnknown_03004140.unk_30 &= ~(1 << i);
|
||||
flags |= (1 << i);
|
||||
}
|
||||
}
|
||||
if (flags)
|
||||
{
|
||||
sub_800D334(flags);
|
||||
retVal = TRUE;
|
||||
gUnknown_03004140.unk_14 = flags;
|
||||
sub_800D30C(0x33, 0x01);
|
||||
}
|
||||
}
|
||||
if (!gUnknown_03004140.unk_30)
|
||||
{
|
||||
gUnknown_03004140.unk_0a = 0;
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user