summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHenny022p <info@henny022.de>2021-02-25 23:33:03 +0100
committerHenny022p <info@henny022.de>2021-02-25 23:33:03 +0100
commit7cb0eee76a3fbc6400f7bc80198e2fcd5312f3d3 (patch)
tree2a664e82020019e58a0fce5cc7fbc1704e617e55 /src
parentf089e58a243fd7b6bf2ffb39caa625127163c6fe (diff)
nonmatch sub_080B16AC
Diffstat (limited to 'src')
-rw-r--r--src/code_080B1520.c94
1 files changed, 92 insertions, 2 deletions
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