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;