summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKEKW555 <152369890+KEKW555@users.noreply.github.com>2023-12-22 02:32:34 +0530
committerGitHub <noreply@github.com>2023-12-21 13:02:34 -0800
commita5a2b57a1cb6537c99fc39b9a3cdc7a561eea196 (patch)
treedd5d4319dc4a4bba43f48656a3bbdfb072e73973
parent888033f7bdb32e2fdee51ebed7c65f2967267bc5 (diff)
Match sub_0801E31C (#656)
* Match sub_0801E31C * Nuke common folder * Remove unnecessary casts
-rw-r--r--asm/non_matching/common/sub_0801E31C.inc189
-rw-r--r--src/common.c57
2 files changed, 56 insertions, 190 deletions
diff --git a/asm/non_matching/common/sub_0801E31C.inc b/asm/non_matching/common/sub_0801E31C.inc
deleted file mode 100644
index 5ba7e20e..00000000
--- a/asm/non_matching/common/sub_0801E31C.inc
+++ /dev/null
@@ -1,189 +0,0 @@
- .syntax unified
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #0x20
- str r0, [sp]
- str r1, [sp, #4]
- mov sl, r2
- mov sb, r3
- ldr r0, _0801E3AC @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _0801E3B0 @ =gUnk_02017AA0
- adds r0, r0, r1
- movs r1, #0xa0
- lsls r1, r1, #4
- bl MemClear
- cmp sl, sb
- bge _0801E3DC
- movs r6, #0
- mov r8, sl
- mov r7, r8
- mov r0, r8
- lsls r1, r0, #1
- movs r0, #3
- subs r5, r0, r1
- cmp r6, r8
- ble _0801E35E
- b _0801E45E
-_0801E35E:
- mov r1, r8
- lsls r0, r1, #2
- ldr r4, _0801E3B4 @ =gUnk_02018EE0
- adds r0, r0, r4
- str r0, [sp, #0x10]
- mov r1, sb
- mov r0, r8
- muls r0, r1, r0
- str r0, [sp, #0x14]
- movs r3, #0
-_0801E372:
- adds r0, r3, #0
- mov r1, sl
- str r3, [sp, #0x18]
- bl Div
- adds r4, r0, #0
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- str r4, [sp, #0x1c]
- ldr r0, [sp, #0x14]
- mov r1, sl
- bl Div
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- lsls r2, r6, #2
- ldr r4, _0801E3B4 @ =gUnk_02018EE0
- adds r1, r2, r4
- str r0, [r1]
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #0x10]
- str r0, [r1]
- ldr r3, [sp, #0x18]
- cmp r5, #0
- bge _0801E3B8
- adds r0, r5, #6
- adds r5, r0, r2
- b _0801E3D2
- .align 2, 0
-_0801E3AC: .4byte gUnk_03003DE4
-_0801E3B0: .4byte gUnk_02017AA0
-_0801E3B4: .4byte gUnk_02018EE0
-_0801E3B8:
- adds r1, r5, #0
- adds r1, #0xa
- subs r0, r6, r7
- lsls r0, r0, #2
- adds r5, r1, r0
- ldr r4, [sp, #0x10]
- subs r4, #4
- str r4, [sp, #0x10]
- ldr r0, [sp, #0x14]
- mov r1, sb
- subs r0, r0, r1
- str r0, [sp, #0x14]
- subs r7, #1
-_0801E3D2:
- add r3, sb
- adds r6, #1
- cmp r6, r7
- ble _0801E372
- b _0801E45E
-_0801E3DC:
- movs r6, #0
- mov r8, sb
- mov r7, r8
- mov r4, r8
- lsls r1, r4, #1
- movs r0, #3
- subs r5, r0, r1
- cmp r6, r8
- bgt _0801E45E
- lsls r0, r4, #2
- ldr r1, _0801E438 @ =gUnk_02018EE0
- adds r0, r0, r1
- str r0, [sp, #8]
- mov r0, sl
- mov r4, r8
- muls r4, r0, r4
- str r4, [sp, #0xc]
- movs r3, #0
-_0801E400:
- adds r0, r3, #0
- mov r1, sb
- str r3, [sp, #0x18]
- bl Div
- adds r4, r0, #0
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- str r4, [sp, #0x1c]
- ldr r0, [sp, #0xc]
- mov r1, sb
- bl Div
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- lsls r2, r6, #2
- ldr r4, _0801E438 @ =gUnk_02018EE0
- adds r1, r2, r4
- str r0, [r1]
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #8]
- str r0, [r1]
- ldr r3, [sp, #0x18]
- cmp r5, #0
- bge _0801E43C
- adds r0, r5, #6
- adds r5, r0, r2
- b _0801E456
- .align 2, 0
-_0801E438: .4byte gUnk_02018EE0
-_0801E43C:
- adds r1, r5, #0
- adds r1, #0xa
- subs r0, r6, r7
- lsls r0, r0, #2
- adds r5, r1, r0
- ldr r4, [sp, #8]
- subs r4, #4
- str r4, [sp, #8]
- ldr r0, [sp, #0xc]
- mov r1, sl
- subs r0, r0, r1
- str r0, [sp, #0xc]
- subs r7, #1
-_0801E456:
- add r3, sl
- adds r6, #1
- cmp r6, r7
- ble _0801E400
-_0801E45E:
- ldr r0, [sp]
- ldr r1, [sp, #4]
- mov r2, r8
- bl sub_0801E290
- ldr r0, _0801E48C @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _0801E490 @ =gUnk_02017AA0
- adds r0, r0, r1
- ldr r1, _0801E494 @ =0x04000040
- ldr r2, _0801E498 @ =0xA2600001
- bl SetVBlankDMA
- add sp, #0x20
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801E48C: .4byte gUnk_03003DE4
-_0801E490: .4byte gUnk_02017AA0
-_0801E494: .4byte 0x04000040
-_0801E498: .4byte 0xA2600001
- .syntax divided
diff --git a/src/common.c b/src/common.c
index 06cb3def..e05db3ee 100644
--- a/src/common.c
+++ b/src/common.c
@@ -898,7 +898,62 @@ void sub_0801E290(u32 param_1, u32 param_2, u32 count) {
}
}
-ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4));
+void sub_0801E31C(u32 sp00, u32 sp04, s32 r10, s32 r9) {
+ u16 sp1c, sp1c2;
+ u16 kk, kk2;
+ u16 uVar2;
+ s32 r5;
+ s32 r6;
+ s32 r7;
+ s32 r8; // the lower one of param3 and param4
+
+ MemClear(&gUnk_02017AA0[gUnk_03003DE4[0]], 0xa00);
+ if (r10 < r9) {
+ r6 = 0;
+ r7 = r8 = r10;
+ r5 = 3 - r8 * 2;
+
+ while (r6 <= r7) {
+ sp1c = Div(r9 * r6, r10);
+ kk = Div(r9 * r7, r10);
+ // TODO: Fix data type in declaration. There shouldn't be a need to cast this.
+ ((u32*)gUnk_02018EE0)[r6] = kk;
+ ((u32*)gUnk_02018EE0)[r7] = sp1c;
+ if (r5 < 0) {
+ r5 += 6 + r6 * 4;
+ r6++;
+ } else {
+ r5 += 10 + (r6 - r7) * 4;
+ r7--;
+ r6++;
+ }
+ }
+ } else {
+ r6 = 0;
+ r7 = r8 = r9;
+ r5 = 3 - r8 * 2;
+
+ while (r6 <= r7) {
+ sp1c2 = Div(r10 * r6, r9);
+ kk2 = Div(r10 * r7, r9);
+ // TODO: Fix data type in declaration. There shouldn't be a need to cast this.
+ ((u32*)gUnk_02018EE0)[r6] = kk2;
+ ((u32*)gUnk_02018EE0)[r7] = sp1c2;
+ if (r5 < 0) {
+ r5 += 6 + r6 * 4;
+ r6++;
+ } else {
+ r5 += 10 + (r6 - r7) * 4;
+ r7--;
+ r6++;
+ }
+ }
+ }
+ sub_0801E290(sp00, sp04, r8);
+ SetVBlankDMA((u16*)&gUnk_02017AA0[gUnk_03003DE4[0]], (u16*)REG_ADDR_WIN0H,
+ ((DMA_ENABLE | DMA_START_HBLANK | DMA_16BIT | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_RELOAD) << 16) +
+ 0x1);
+}
void sub_0801E49C(s32 baseX, s32 baseY, s32 radius, u32 baseAngle) {
u8* ptr2;