From 7cb0eee76a3fbc6400f7bc80198e2fcd5312f3d3 Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 25 Feb 2021 23:33:03 +0100 Subject: [PATCH] nonmatch sub_080B16AC --- asm/code_080B1520.s | 189 ----------------- .../code_080B1520/sub_080B16AC.inc | 192 ++++++++++++++++++ src/code_080B1520.c | 94 ++++++++- 3 files changed, 284 insertions(+), 191 deletions(-) create mode 100644 asm/non_matching/code_080B1520/sub_080B16AC.inc diff --git a/asm/code_080B1520.s b/asm/code_080B1520.s index 565d01ef..e84f6af1 100644 --- a/asm/code_080B1520.s +++ b/asm/code_080B1520.s @@ -5,195 +5,6 @@ .text - thumb_func_start sub_080B16AC -sub_080B16AC: @ 0x080B16AC - push {r4, r5, r6, r7, lr} - sub sp, #0xb0 - adds r5, r1, #0 - lsls r0, r0, #0x10 - lsrs r1, r0, #0x10 - lsls r2, r2, #0x18 - lsrs r7, r2, #0x18 - ldr r0, _080B16C8 @ =gUnk_02036A50 - ldr r0, [r0] - ldrh r0, [r0, #4] - cmp r1, r0 - blo _080B16D0 - ldr r0, _080B16CC @ =0x000080FF - b _080B1804 - .align 2, 0 -_080B16C8: .4byte gUnk_02036A50 -_080B16CC: .4byte 0x000080FF -_080B16D0: - ldr r0, _080B1710 @ =gUnk_02036A50 - ldr r0, [r0] - ldrb r0, [r0, #8] - lsls r0, r0, #1 - mov r2, sp - adds r3, r0, r2 - adds r3, #0x84 - movs r0, #0 - strh r0, [r3] - subs r3, #2 - movs r4, #0 -_080B16E6: - ldrh r2, [r5] - adds r5, #2 - movs r0, #0 -_080B16EC: - strh r2, [r3] - subs r3, #2 - lsrs r2, r2, #1 - adds r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xf - bls _080B16EC - adds r0, r4, #1 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #3 - bls _080B16E6 - movs r4, #0 - ldr r0, _080B1710 @ =gUnk_02036A50 - adds r2, r0, #0 - ldr r0, [r0] - b _080B1722 - .align 2, 0 -_080B1710: .4byte gUnk_02036A50 -_080B1714: - strh r1, [r3] - subs r3, #2 - lsrs r1, r1, #1 - adds r0, r4, #1 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - ldr r0, [r2] -_080B1722: - ldrb r0, [r0, #8] - cmp r4, r0 - blo _080B1714 - movs r0, #0 - strh r0, [r3] - subs r3, #2 - movs r6, #1 - strh r6, [r3] - movs r4, #0xd0 - lsls r4, r4, #0x14 - ldr r0, _080B1794 @ =gUnk_02036A50 - ldr r0, [r0] - ldrb r2, [r0, #8] - adds r2, #0x43 - mov r0, sp - adds r1, r4, #0 - bl sub_080B1568 - movs r5, #0 - add r2, sp, #0xa4 - strh r5, [r2] - mov r1, sp - adds r1, #0xa6 - ldr r0, _080B1798 @ =0x04000006 - ldrh r0, [r0] - strh r0, [r1] - add r0, sp, #0xac - str r5, [r0] - ldrh r0, [r2] - cmp r0, #0 - bne _080B1768 - ldrh r0, [r4] - ands r0, r6 - cmp r0, #0 - bne _080B17F8 -_080B1768: - add r3, sp, #0xa8 - ldr r0, _080B1798 @ =0x04000006 - ldrh r0, [r0] - strh r0, [r3] - mov r4, sp - adds r4, #0xa6 - ldrh r1, [r3] - ldrh r0, [r4] - cmp r1, r0 - beq _080B17E2 - ldrh r1, [r3] - ldrh r0, [r4] - cmp r1, r0 - bls _080B179C - add r2, sp, #0xac - ldrh r1, [r3] - ldrh r0, [r4] - subs r1, r1, r0 - ldr r0, [r2] - adds r1, r1, r0 - str r1, [r2] - b _080B17B2 - .align 2, 0 -_080B1794: .4byte gUnk_02036A50 -_080B1798: .4byte 0x04000006 -_080B179C: - add r2, sp, #0xac - add r0, sp, #0xa8 - ldrh r0, [r0] - adds r0, #0xe4 - mov r1, sp - adds r1, #0xa6 - ldrh r1, [r1] - subs r0, r0, r1 - ldr r1, [r2] - adds r0, r0, r1 - str r0, [r2] -_080B17B2: - add r0, sp, #0xac - ldr r0, [r0] - cmp r0, #0x88 - bls _080B17D8 - add r0, sp, #0xa4 - ldrh r0, [r0] - cmp r0, #0 - bne _080B1802 - movs r0, #0xd0 - lsls r0, r0, #0x14 - ldrh r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _080B1802 - ldr r5, _080B17D4 @ =0x0000C001 - b _080B1802 - .align 2, 0 -_080B17D4: .4byte 0x0000C001 -_080B17D8: - mov r0, sp - adds r0, #0xa6 - add r1, sp, #0xa8 - ldrh r1, [r1] - strh r1, [r0] -_080B17E2: - add r2, sp, #0xa4 - ldrh r0, [r2] - cmp r0, #0 - bne _080B1768 - movs r0, #0xd0 - lsls r0, r0, #0x14 - movs r1, #1 - ldrh r0, [r0] - ands r1, r0 - cmp r1, #0 - beq _080B1768 -_080B17F8: - ldrh r0, [r2] - adds r0, #1 - strh r0, [r2] - cmp r7, #0 - bne _080B1768 -_080B1802: - adds r0, r5, #0 -_080B1804: - add sp, #0xb0 - pop {r4, r5, r6, r7} - pop {r1} - bx r1 - thumb_func_start sub_080B180C sub_080B180C: @ 0x080B180C push {r4, r5, lr} diff --git a/asm/non_matching/code_080B1520/sub_080B16AC.inc b/asm/non_matching/code_080B1520/sub_080B16AC.inc new file mode 100644 index 00000000..32a1a164 --- /dev/null +++ b/asm/non_matching/code_080B1520/sub_080B16AC.inc @@ -0,0 +1,192 @@ + + .syntax unified + .text + + push {r4, r5, r6, r7, lr} + sub sp, #0xb0 + adds r5, r1, #0 + lsls r0, r0, #0x10 + lsrs r1, r0, #0x10 + lsls r2, r2, #0x18 + lsrs r7, r2, #0x18 + ldr r0, _080B16C8 @ =gUnk_02036A50 + ldr r0, [r0] + ldrh r0, [r0, #4] + cmp r1, r0 + blo _080B16D0 + ldr r0, _080B16CC @ =0x000080FF + b _080B1804 + .align 2, 0 +_080B16C8: .4byte gUnk_02036A50 +_080B16CC: .4byte 0x000080FF +_080B16D0: + ldr r0, _080B1710 @ =gUnk_02036A50 + ldr r0, [r0] + ldrb r0, [r0, #8] + lsls r0, r0, #1 + mov r2, sp + adds r3, r0, r2 + adds r3, #0x84 + movs r0, #0 + strh r0, [r3] + subs r3, #2 + movs r4, #0 +_080B16E6: + ldrh r2, [r5] + adds r5, #2 + movs r0, #0 +_080B16EC: + strh r2, [r3] + subs r3, #2 + lsrs r2, r2, #1 + adds r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0xf + bls _080B16EC + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #3 + bls _080B16E6 + movs r4, #0 + ldr r0, _080B1710 @ =gUnk_02036A50 + adds r2, r0, #0 + ldr r0, [r0] + b _080B1722 + .align 2, 0 +_080B1710: .4byte gUnk_02036A50 +_080B1714: + strh r1, [r3] + subs r3, #2 + lsrs r1, r1, #1 + adds r0, r4, #1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + ldr r0, [r2] +_080B1722: + ldrb r0, [r0, #8] + cmp r4, r0 + blo _080B1714 + movs r0, #0 + strh r0, [r3] + subs r3, #2 + movs r6, #1 + strh r6, [r3] + movs r4, #0xd0 + lsls r4, r4, #0x14 + ldr r0, _080B1794 @ =gUnk_02036A50 + ldr r0, [r0] + ldrb r2, [r0, #8] + adds r2, #0x43 + mov r0, sp + adds r1, r4, #0 + bl sub_080B1568 + movs r5, #0 + add r2, sp, #0xa4 + strh r5, [r2] + mov r1, sp + adds r1, #0xa6 + ldr r0, _080B1798 @ =0x04000006 + ldrh r0, [r0] + strh r0, [r1] + add r0, sp, #0xac + str r5, [r0] + ldrh r0, [r2] + cmp r0, #0 + bne _080B1768 + ldrh r0, [r4] + ands r0, r6 + cmp r0, #0 + bne _080B17F8 +_080B1768: + add r3, sp, #0xa8 + ldr r0, _080B1798 @ =0x04000006 + ldrh r0, [r0] + strh r0, [r3] + mov r4, sp + adds r4, #0xa6 + ldrh r1, [r3] + ldrh r0, [r4] + cmp r1, r0 + beq _080B17E2 + ldrh r1, [r3] + ldrh r0, [r4] + cmp r1, r0 + bls _080B179C + add r2, sp, #0xac + ldrh r1, [r3] + ldrh r0, [r4] + subs r1, r1, r0 + ldr r0, [r2] + adds r1, r1, r0 + str r1, [r2] + b _080B17B2 + .align 2, 0 +_080B1794: .4byte gUnk_02036A50 +_080B1798: .4byte 0x04000006 +_080B179C: + add r2, sp, #0xac + add r0, sp, #0xa8 + ldrh r0, [r0] + adds r0, #0xe4 + mov r1, sp + adds r1, #0xa6 + ldrh r1, [r1] + subs r0, r0, r1 + ldr r1, [r2] + adds r0, r0, r1 + str r0, [r2] +_080B17B2: + add r0, sp, #0xac + ldr r0, [r0] + cmp r0, #0x88 + bls _080B17D8 + add r0, sp, #0xa4 + ldrh r0, [r0] + cmp r0, #0 + bne _080B1802 + movs r0, #0xd0 + lsls r0, r0, #0x14 + ldrh r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080B1802 + ldr r5, _080B17D4 @ =0x0000C001 + b _080B1802 + .align 2, 0 +_080B17D4: .4byte 0x0000C001 +_080B17D8: + mov r0, sp + adds r0, #0xa6 + add r1, sp, #0xa8 + ldrh r1, [r1] + strh r1, [r0] +_080B17E2: + add r2, sp, #0xa4 + ldrh r0, [r2] + cmp r0, #0 + bne _080B1768 + movs r0, #0xd0 + lsls r0, r0, #0x14 + movs r1, #1 + ldrh r0, [r0] + ands r1, r0 + cmp r1, #0 + beq _080B1768 +_080B17F8: + ldrh r0, [r2] + adds r0, #1 + strh r0, [r2] + cmp r7, #0 + bne _080B1768 +_080B1802: + adds r0, r5, #0 +_080B1804: + add sp, #0xb0 + pop {r4, r5, r6, r7} + pop {r1} + bx r1 + + .syntax divided diff --git a/src/code_080B1520.c b/src/code_080B1520.c index 675e321f..86086285 100644 --- a/src/code_080B1520.c +++ b/src/code_080B1520.c @@ -13,7 +13,7 @@ extern struct_08DE7D40* gUnk_02036A50; extern struct_08DE7D40 gUnk_08DE7D40; extern struct_08DE7D40 gUnk_08DE7D4C; -u16 sub_080B16AC(u16, u32, u32); +u16 sub_080B16AC(u16, u16*, u8); u32 sub_080B1520(u16 unk_1) { u32 ret; @@ -89,6 +89,96 @@ u32 sub_080B15E8(u16 unk_1, u16* unk_2) { } } -u16 sub_080B1698(u16 unk_1, u32 unk_2){ +u16 sub_080B1698(u16 unk_1, u16* unk_2) { return sub_080B16AC(unk_1, unk_2, 1); } + +// this is the furthest I could get +NONMATCH("asm/non_matching/code_080B1520/sub_080B16AC.inc", u16 sub_080B16AC(u16 unk_1, u16* unk_2, u8 unk_3)) { + u16 stack[0x52]; + vu16 stack_a4; + vu16 stack_a6; + vu16 stack_a8; + vu32 stack_ac; + + u32 r0, r1, r2; + + u8 i, j; + u16* ptr; + + r1 = unk_1; + if (unk_1 < gUnk_02036A50->unk_04) + return 0x80ff; + + ptr = stack + gUnk_02036A50->unk_08 + 0x42; + *ptr = 0; + ptr--; + for (i = 0; i <= 3; i++) { + r2 = *unk_2; + unk_2++; + for (j = 0; j <= 0xf; j++) { + *ptr = r2; + ptr--; + r2 = r2 >> 1; + } + } + for (i = 0; i < gUnk_02036A50->unk_08; i++) { + *ptr = r1; + ptr--; + r1 = r1 >> 1; + } + *ptr = 0; + ptr--; + *ptr = 1; + sub_080B1568(stack, (u16*)0xd000000, gUnk_02036A50->unk_08 + 0x43); + stack_a4 = 0; + stack_a6 = REG_VCOUNT; + stack_ac = 0; + if (stack_a4 == 0) { + r0 = *(u16*)0xd000000; + r0 &= 1; + if (r0 != 0) + goto bad; + } + do { + do { + do { + stack_a8 = REG_VCOUNT; + if (stack_a8 != stack_a6) { + if (stack_a8 > stack_a6) { + r1 = stack_a8; + r0 = stack_a6; + r1 = r1 - r0; + r0 = stack_ac; + r1 = r1 + r0; + stack_ac = r1; + } else { + r0 = stack_a8 + 0xe4; + r1 = stack_a6; + r0 = r0 - r1; + r1 = stack_ac; + r0 = r0 + r1; + stack_ac = r0; + } + if (stack_ac > 0x88) { + if (stack_a4 != 0) + return 0; + r0 = *(u16*)0xd000000; + r0 &= 1; + if (r0 != 0) + return 0; + return 0xc001; + } + stack_a6 = stack_a8; + } + } while (stack_a4 != 0); + r1 = 1; + r0 = *(u16*)0xd000000; + r1 &= r0; + } while (r1 != 0); + bad: + stack_a4++; + } while (unk_3 != 0); + return 0; +} +END_NONMATCH \ No newline at end of file