nonmatch sub_0807D008

This commit is contained in:
Henny022p 2021-02-18 17:09:01 +01:00
parent 3f54062fa5
commit 809a903207
4 changed files with 127 additions and 80 deletions

View File

@ -69,80 +69,3 @@ _0807CFFE:
.align 2, 0 .align 2, 0
_0807D004: .4byte 0x4D435A33 _0807D004: .4byte 0x4D435A33
thumb_func_start sub_0807D008
sub_0807D008: @ 0x0807D008
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #0xc
adds r7, r1, #0
bl sub_0807D1C4
adds r5, r0, #0
ldrh r0, [r5, #2]
add r4, sp, #4
adds r1, r4, #0
bl sub_0807D0EC
adds r6, r0, #0
mov r8, r4
cmp r6, #2
bne _0807D048
ldrh r0, [r5, #6]
ldrh r2, [r5]
adds r1, r7, #0
bl sub_0807D1D8
cmp r0, #0
beq _0807D046
ldrh r2, [r5]
mov r0, r8
adds r1, r7, #0
bl sub_0807D0A0
cmp r0, #0
bne _0807D072
_0807D046:
movs r6, #0
_0807D048:
ldrh r0, [r5, #4]
mov r1, r8
bl sub_0807D0EC
adds r4, r0, #0
cmp r4, #2
bne _0807D078
ldrh r0, [r5, #8]
ldrh r2, [r5]
adds r1, r7, #0
bl sub_0807D1D8
cmp r0, #0
beq _0807D076
ldrh r2, [r5]
mov r0, r8
adds r1, r7, #0
bl sub_0807D0A0
cmp r0, #0
beq _0807D076
_0807D072:
movs r0, #1
b _0807D098
_0807D076:
movs r4, #0
_0807D078:
movs r0, #0
str r0, [sp]
ldrh r2, [r5]
lsrs r2, r2, #2
movs r0, #0xa0
lsls r0, r0, #0x13
orrs r2, r0
mov r0, sp
adds r1, r7, #0
bl CpuSet
orrs r6, r4
movs r0, #0
cmp r6, #0
bne _0807D098
subs r0, #1
_0807D098:
add sp, #0xc
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}

View File

@ -0,0 +1,84 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
sub sp, #0xc
adds r7, r1, #0
bl sub_0807D1C4
adds r5, r0, #0
ldrh r0, [r5, #2]
add r4, sp, #4
adds r1, r4, #0
bl sub_0807D0EC
adds r6, r0, #0
mov r8, r4
cmp r6, #2
bne _0807D048
ldrh r0, [r5, #6]
ldrh r2, [r5]
adds r1, r7, #0
bl sub_0807D1D8
cmp r0, #0
beq _0807D046
ldrh r2, [r5]
mov r0, r8
adds r1, r7, #0
bl sub_0807D0A0
cmp r0, #0
bne _0807D072
_0807D046:
movs r6, #0
_0807D048:
ldrh r0, [r5, #4]
mov r1, r8
bl sub_0807D0EC
adds r4, r0, #0
cmp r4, #2
bne _0807D078
ldrh r0, [r5, #8]
ldrh r2, [r5]
adds r1, r7, #0
bl sub_0807D1D8
cmp r0, #0
beq _0807D076
ldrh r2, [r5]
mov r0, r8
adds r1, r7, #0
bl sub_0807D0A0
cmp r0, #0
beq _0807D076
_0807D072:
movs r0, #1
b _0807D098
_0807D076:
movs r4, #0
_0807D078:
movs r0, #0
str r0, [sp]
ldrh r2, [r5]
lsrs r2, r2, #2
movs r0, #0xa0
lsls r0, r0, #0x13
orrs r2, r0
mov r0, sp
adds r1, r7, #0
bl CpuSet
orrs r6, r4
movs r0, #0
cmp r6, #0
bne _0807D098
subs r0, #1
_0807D098:
add sp, #0xc
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.syntax divided

View File

@ -1,6 +1,3 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified .syntax unified

View File

@ -3,6 +3,7 @@
#include "functions.h" #include "functions.h"
#include "script.h" #include "script.h"
#include "entity.h" #include "entity.h"
#include "save.h"
extern u8 gUnk_0811E514[]; extern u8 gUnk_0811E514[];
extern u8 gUnk_0811E510[]; extern u8 gUnk_0811E510[];
@ -28,6 +29,47 @@ void sub_0807DAF0(Entity* entity, ScriptExecutionContext* context, u32 unk1);
u32 sub_0807D1D8(u32 unk_1, const char* unk_2, u32 unk_3); u32 sub_0807D1D8(u32 unk_1, const char* unk_2, u32 unk_3);
u32 sub_0807D128(u16* unk_1); u32 sub_0807D128(u16* unk_1);
u16 sub_0807D1A4(u16* unk_1, u32 unk_2); u16 sub_0807D1A4(u16* unk_1, u32 unk_2);
u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3);
u32 sub_0807D0EC(u32 unk_1, const char* unk_2);
NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D008.inc", u32 sub_0807D008(u32 param_1, SaveFile* saveFile)) {
u32 set_0;
char auStack32[8];
struct_0807D1C4* thing;
u32 t1;
u32 t2;
u32 ret;
u32 temp;
thing = sub_0807D1C4(param_1);
t1 = sub_0807D0EC(thing->field_0x2, auStack32);
if (t1 == 2) {
if ((sub_0807D1D8(thing->field_0x6, (char*)saveFile, thing->field_0x0) == 0) ||
(sub_0807D0A0((u16*)auStack32, (u16*)saveFile, (u32)thing->field_0x0) == 0)) {
t1 = 0;
} else {
return 1;
}
}
t2 = sub_0807D0EC(thing->field_0x4, auStack32);
if (t2 == 2) {
if ((sub_0807D1D8(thing->field_0x8, (char*)saveFile, thing->field_0x0) != 0) &&
(sub_0807D0A0((u16*)auStack32, (u16*)saveFile, (u32)thing->field_0x0) != 0)) {
return 1;
}
t2 = 0;
}
set_0 = 0;
CpuSet(&set_0, saveFile, thing->field_0x0 >> 2 | CPU_SET_SRC_FIXED | CPU_SET_32BIT);
temp = t1 | t2;
ret = 0;
if (temp == 0) {
ret = -1;
}
return ret;
}
END_NONMATCH
NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D0A0.inc", u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3)) { NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D0A0.inc", u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3)) {
u32 r0; u32 r0;
@ -114,6 +156,7 @@ u16 sub_0807D1A4(u16* unk_1, u32 unk_2) {
return uVar1; return uVar1;
} }
// TODO properly type this array
struct_0807D1C4* sub_0807D1C4(u32 unk_1) { struct_0807D1C4* sub_0807D1C4(u32 unk_1) {
return (struct_0807D1C4*)(gUnk_0811E4BC + unk_1 * 0xc); return (struct_0807D1C4*)(gUnk_0811E4BC + unk_1 * 0xc);
} }