diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 3cdcaae2..8e4a0927 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -146,44 +146,3 @@ _0807D098: mov r8, r3 pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0807D0A0 -sub_0807D0A0: @ 0x0807D0A0 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r5, r1, #0 - adds r6, r2, #0 - adds r0, r7, #4 - movs r1, #4 - bl sub_0807D1A4 - adds r4, r0, #0 - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - adds r0, r5, #0 - adds r1, r6, #0 - bl sub_0807D1A4 - adds r4, r4, r0 - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - ldrh r0, [r7] - cmp r0, r4 - bne _0807D0DE - lsls r0, r0, #0x10 - ldrh r1, [r7, #2] - rsbs r0, r0, #0 - lsrs r0, r0, #0x10 - cmp r1, r0 - bne _0807D0DE - ldr r1, [r7, #4] - ldr r0, _0807D0E4 @ =0x4D435A33 - cmp r1, r0 - beq _0807D0E8 -_0807D0DE: - movs r0, #0 - b _0807D0EA - .align 2, 0 -_0807D0E4: .4byte 0x4D435A33 -_0807D0E8: - movs r0, #1 -_0807D0EA: - pop {r4, r5, r6, r7, pc} - diff --git a/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc b/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc new file mode 100644 index 00000000..a9596425 --- /dev/null +++ b/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc @@ -0,0 +1,48 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r7, r0, #0 + adds r5, r1, #0 + adds r6, r2, #0 + adds r0, r7, #4 + movs r1, #4 + bl sub_0807D1A4 + adds r4, r0, #0 + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + adds r0, r5, #0 + adds r1, r6, #0 + bl sub_0807D1A4 + adds r4, r4, r0 + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + ldrh r0, [r7] + cmp r0, r4 + bne _0807D0DE + lsls r0, r0, #0x10 + ldrh r1, [r7, #2] + rsbs r0, r0, #0 + lsrs r0, r0, #0x10 + cmp r1, r0 + bne _0807D0DE + ldr r1, [r7, #4] + ldr r0, _0807D0E4 @ =0x4D435A33 + cmp r1, r0 + beq _0807D0E8 +_0807D0DE: + movs r0, #0 + b _0807D0EA + .align 2, 0 +_0807D0E4: .4byte 0x4D435A33 +_0807D0E8: + movs r0, #1 +_0807D0EA: + pop {r4, r5, r6, r7, pc} + + .syntax divided diff --git a/asm/non_matching/code_0807CC3C/sub_0807D1D8.inc b/asm/non_matching/code_0807CC3C/sub_0807D1D8.inc index f96b3810..8537e0d1 100644 --- a/asm/non_matching/code_0807CC3C/sub_0807D1D8.inc +++ b/asm/non_matching/code_0807CC3C/sub_0807D1D8.inc @@ -1,6 +1,3 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" .syntax unified diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c index 2bb8c81d..d06294a4 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -29,6 +29,35 @@ u32 sub_0807D1D8(u32 unk_1, const char* unk_2, u32 unk_3); u32 sub_0807D128(u16* unk_1); u16 sub_0807D1A4(u16* unk_1, u32 unk_2); +NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D0A0.inc", u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3)) { + u32 r0; + + u32* u32_1 = (u32*)unk_1; + + u16 u0; + u32 u1; + + u0 = sub_0807D1A4(unk_1 + 2, 4); + u0 = u0 + sub_0807D1A4(unk_2, unk_3); + + u1 = unk_1[0]; + if (u1 != u0) { + r0 = 0; + } else { + if (unk_1[1] == (-(u1 << 0x10) >> 0x10)) { + if (*(u32_1 + 1) != 'MCZ3') { + r0 = 0; + } else { + r0 = 1; + } + } else { + r0 = 0; + } + } + return r0; +} +END_NONMATCH + u32 sub_0807D0EC(u32 unk_1, const char* unk_2) { u32 ret;