summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_080B1520.s189
-rw-r--r--asm/non_matching/code_080B1520/sub_080B16AC.inc192
-rw-r--r--src/code_080B1520.c94
3 files changed, 284 insertions, 191 deletions
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