From 6a4d1cbcc7b13b295ada64c0e939ca6fb11b0213 Mon Sep 17 00:00:00 2001 From: Zur3l <90565581+Zur3l@users.noreply.github.com> Date: Sat, 11 Jul 2026 15:59:32 -0400 Subject: [PATCH] Decomp sub_02001AB0 --- .../{main_02001AB0.inc => main_02001B0C.inc} | 0 asm/{main_02001AB0.s => main_02001B0C.s} | 29 +------------- include/main_02001A54.h | 1 + main.lsf | 2 +- src/main_02001A54.c | 40 +++++++++++++++++++ 5 files changed, 43 insertions(+), 29 deletions(-) rename asm/include/{main_02001AB0.inc => main_02001B0C.inc} (100%) rename asm/{main_02001AB0.s => main_02001B0C.s} (95%) diff --git a/asm/include/main_02001AB0.inc b/asm/include/main_02001B0C.inc similarity index 100% rename from asm/include/main_02001AB0.inc rename to asm/include/main_02001B0C.inc diff --git a/asm/main_02001AB0.s b/asm/main_02001B0C.s similarity index 95% rename from asm/main_02001AB0.s rename to asm/main_02001B0C.s index 17e3eeb4..9c3483fe 100644 --- a/asm/main_02001AB0.s +++ b/asm/main_02001B0C.s @@ -1,35 +1,8 @@ .include "asm/macros.inc" - .include "main_02001AB0.inc" + .include "main_02001B0C.inc" .text - arm_func_start sub_02001AB0 -sub_02001AB0: ; 0x02001AB0 - stmdb sp!, {r3, r4, r5, lr} - tst r0, #0x80000000 - movne r2, #1 - moveq r2, #0 - tst r1, #0x80000000 - and r4, r2, #0xff - movne r2, #1 - moveq r2, #0 - cmp r1, #0 - and r5, r2, #0xff - mvneq r0, #0x80000000 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, r4, r5, pc} - cmp r4, #0 - rsbne r0, r0, #0 - cmp r5, #0 - rsbne r1, r1, #0 - bl sub_02001BB4 - cmp r4, r5 - rsbne r0, r0, #0 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02001AB0 - arm_func_start UMultiplyByFixedPoint UMultiplyByFixedPoint: ; 0x02001B0C stmdb sp!, {r3, r4, r5, lr} diff --git a/include/main_02001A54.h b/include/main_02001A54.h index af2881b4..4be3412c 100644 --- a/include/main_02001A54.h +++ b/include/main_02001A54.h @@ -4,5 +4,6 @@ #include "util.h" s32 MultiplyByFixedPoint(s32 x, s32 y); +s32 sub_02001AB0(s32 x, s32 y); #endif //PMDSKY_MAIN_02001A54_H diff --git a/main.lsf b/main.lsf index 3c17a76e..2ad6e721 100644 --- a/main.lsf +++ b/main.lsf @@ -19,7 +19,7 @@ Static main Object src/main_020018D0.o Object asm/main_02001A30.o Object src/main_02001A54.o - Object asm/main_02001AB0.o + Object asm/main_02001B0C.o Object src/main_0200224C.o Object asm/main_020022C4.o Object src/main_0200330C.o diff --git a/src/main_02001A54.c b/src/main_02001A54.c index 5a103714..e6f33a0a 100644 --- a/src/main_02001A54.c +++ b/src/main_02001A54.c @@ -1,6 +1,7 @@ #include "main_02001A54.h" extern s32 UMultiplyByFixedPoint(s32, s32); +extern s32 sub_02001BB4(s32, s32); s32 MultiplyByFixedPoint(s32 x, s32 y) { @@ -40,3 +41,42 @@ s32 MultiplyByFixedPoint(s32 x, s32 y) } return result; } + +s32 sub_02001AB0(s32 x, s32 y) +{ + s32 result; + bool8 xNeg; + bool8 yNeg; + + // Same as checking if x < 0 and y < 0 + if (x & 0x80000000) { + xNeg = TRUE; + } else { + xNeg = FALSE; + } + if (y & 0x80000000) { + yNeg = TRUE; + } else { + yNeg = FALSE; + } + + if (y == 0) { + return 0x7FFFFFFF; + } + if (x == 0) { + return 0; + } + + if (xNeg) { + x = -x; + } + if (yNeg) { + y = -y; + } + + result = sub_02001BB4(x, y); + if (xNeg != yNeg) { + result = -result; + } + return result; +}