summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-10-20 08:40:04 -0500
committerMarcus Huderle <huderlem@gmail.com>2018-10-20 08:40:04 -0500
commitba5df32ca23fe022a0e5db530e0f4d87d15508bf (patch)
tree9b938107fbf57f470a0f91a88fe9423409254665
parent684eb41feb95329d131b7480f0a34cc0ce7b259a (diff)
Decompile SetMatrixScale()
-rwxr-xr-xasm/intro.s6
-rwxr-xr-xasm/rom_11B9C.s40
-rwxr-xr-xasm/rom_24C.s73
-rwxr-xr-xsrc/main.c42
4 files changed, 43 insertions, 118 deletions
diff --git a/asm/intro.s b/asm/intro.s
index 5d3ff95..edc0a34 100755
--- a/asm/intro.s
+++ b/asm/intro.s
@@ -1349,7 +1349,7 @@ sub_9D70: @ 0x08009D70
movs r2, #0
ldrsh r1, [r4, r2]
movs r2, #0
- bl sub_7C0
+ bl SetMatrixScale
ldrh r0, [r6]
mov r3, r8
strh r0, [r3, #2]
@@ -5643,7 +5643,7 @@ sub_C0D8: @ 0x0800C0D8
movs r2, #0
ldrsh r1, [r4, r2]
movs r2, #0
- bl sub_7C0
+ bl SetMatrixScale
ldr r1, _0800C1FC @ =0x0201A450
ldrh r0, [r1]
mov r3, r8
@@ -7169,7 +7169,7 @@ sub_CD18: @ 0x0800CD18
movs r3, #0
ldrsh r1, [r1, r3]
movs r2, #0
- bl sub_7C0
+ bl SetMatrixScale
ldrh r0, [r7]
strh r0, [r6, #2]
ldrh r0, [r7, #2]
diff --git a/asm/rom_11B9C.s b/asm/rom_11B9C.s
index 4e0cc2b..7252b58 100755
--- a/asm/rom_11B9C.s
+++ b/asm/rom_11B9C.s
@@ -1288,7 +1288,7 @@ _08012646:
ldrsh r1, [r7, r3]
adds r0, r1, #0
movs r2, #0
- bl sub_7C0
+ bl SetMatrixScale
ldr r0, _080126C8 @ =0x020314E0
ldr r3, [r0]
adds r0, r3, #0
@@ -1459,7 +1459,7 @@ _080127A2:
ldrsh r1, [r7, r2]
adds r0, r1, #0
movs r2, #0
- bl sub_7C0
+ bl SetMatrixScale
ldr r0, _08012828 @ =0x020314E0
ldr r3, [r0]
adds r0, r3, #0
@@ -31965,7 +31965,7 @@ _08021CB0:
movs r2, #0
ldrsh r1, [r1, r2]
movs r2, #1
- bl sub_7C0
+ bl SetMatrixScale
movs r0, #0
ldr r6, _08021D6C @ =gOamBuffer
ldr r1, _08021D70 @ =0xFFFFFE00
@@ -47739,7 +47739,7 @@ _08029C84:
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #2
- bl sub_7C0
+ bl SetMatrixScale
movs r1, #0x80
mov r0, sp
ldrh r0, [r0, #2]
@@ -47753,7 +47753,7 @@ _08029CA0:
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #3
- bl sub_7C0
+ bl SetMatrixScale
ldr r0, [r4]
adds r0, r0, r6
ldrh r0, [r0]
@@ -47779,7 +47779,7 @@ _08029CD6:
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #4
- bl sub_7C0
+ bl SetMatrixScale
ldr r0, [r4]
adds r0, r0, r6
ldrh r0, [r0]
@@ -47806,7 +47806,7 @@ _08029D0E:
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #5
- bl sub_7C0
+ bl SetMatrixScale
ldr r0, _08029D38 @ =0x020314E0
ldr r1, [r0]
adds r2, r1, r6
@@ -53544,7 +53544,7 @@ _0802CBD6:
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #6
- bl sub_7C0
+ bl SetMatrixScale
ldr r0, _0802CCB0 @ =0x020314E0
ldr r1, [r0]
ldr r0, _0802CCB4 @ =0x00000286
@@ -68248,7 +68248,7 @@ _08034238:
adds r5, r4, #2
lsls r2, r5, #0x10
asrs r2, r2, #0x10
- bl sub_7C0
+ bl SetMatrixScale
ldrh r0, [r6, #2]
subs r0, #0x10
strh r0, [r6, #2]
@@ -81029,22 +81029,22 @@ _0803AAE8:
adds r0, r5, #0
adds r1, r5, #0
movs r2, #1
- bl sub_7C0
+ bl SetMatrixScale
rsbs r4, r5, #0
lsls r4, r4, #0x10
asrs r4, r4, #0x10
adds r0, r4, #0
adds r1, r5, #0
movs r2, #2
- bl sub_7C0
+ bl SetMatrixScale
adds r0, r5, #0
adds r1, r4, #0
movs r2, #3
- bl sub_7C0
+ bl SetMatrixScale
adds r0, r4, #0
adds r1, r4, #0
movs r2, #4
- bl sub_7C0
+ bl SetMatrixScale
ldr r1, _0803AB48 @ =0x020314E0
ldr r0, [r1]
adds r1, r0, r7
@@ -87815,22 +87815,22 @@ _0803E26C:
adds r0, r5, #0
adds r1, r5, #0
movs r2, #1
- bl sub_7C0
+ bl SetMatrixScale
rsbs r4, r5, #0
lsls r4, r4, #0x10
asrs r4, r4, #0x10
adds r0, r4, #0
adds r1, r5, #0
movs r2, #2
- bl sub_7C0
+ bl SetMatrixScale
adds r0, r5, #0
adds r1, r4, #0
movs r2, #3
- bl sub_7C0
+ bl SetMatrixScale
adds r0, r4, #0
adds r1, r4, #0
movs r2, #4
- bl sub_7C0
+ bl SetMatrixScale
ldr r1, _0803E2BC @ =0x020314E0
ldr r0, [r1]
adds r1, r0, r6
@@ -106726,13 +106726,13 @@ _08047DBA:
lsls r1, r2, #0x10
asrs r1, r1, #0x10
movs r2, #3
- bl sub_7C0
+ bl SetMatrixScale
ldr r3, [sp]
lsls r1, r3, #0x10
asrs r1, r1, #0x10
adds r0, r1, #0
movs r2, #4
- bl sub_7C0
+ bl SetMatrixScale
ldr r4, _08047E74 @ =gMain
ldrh r1, [r4, #0x12]
cmp r1, #0xcb
@@ -110626,7 +110626,7 @@ _08049D92:
ldr r5, [sp, #0x10]
asrs r1, r5, #0x10
movs r2, #5
- bl sub_7C0
+ bl SetMatrixScale
ldr r6, _08049EA4 @ =0x0200B470
movs r0, #0x64
mov r2, sl
diff --git a/asm/rom_24C.s b/asm/rom_24C.s
index 4e4687a..258919a 100755
--- a/asm/rom_24C.s
+++ b/asm/rom_24C.s
@@ -4,79 +4,6 @@
.text
- thumb_func_start sub_7C0
-sub_7C0: @ 0x080007C0
- push {r4, r5, r6, lr}
- mov r6, r8
- push {r6}
- sub sp, #8
- adds r3, r0, #0
- adds r4, r1, #0
- adds r5, r2, #0
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- lsls r5, r5, #0x10
- lsrs r5, r5, #0x10
- lsls r3, r3, #0x10
- asrs r3, r3, #0x10
- movs r0, #0x80
- lsls r0, r0, #9
- mov r8, r0
- adds r1, r3, #0
- bl __divsi3
- adds r6, r0, #0
- lsls r6, r6, #0x10
- lsrs r6, r6, #0x10
- lsls r4, r4, #0x10
- asrs r4, r4, #0x10
- mov r0, r8
- adds r1, r4, #0
- bl __divsi3
- mov r1, sp
- strh r6, [r1]
- mov r4, sp
- adds r4, #2
- movs r1, #0
- strh r1, [r4]
- add r6, sp, #4
- strh r1, [r6]
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- mov r1, sp
- adds r1, #6
- strh r0, [r1]
- ldr r3, _0800084C @ =gOamBuffer
- lsls r5, r5, #0x10
- asrs r5, r5, #0x10
- lsls r1, r5, #5
- adds r1, r1, r3
- mov r2, sp
- ldrh r2, [r2]
- strh r2, [r1, #6]
- lsls r5, r5, #2
- adds r1, r5, #1
- lsls r1, r1, #3
- adds r1, r1, r3
- ldrh r2, [r4]
- strh r2, [r1, #6]
- adds r1, r5, #2
- lsls r1, r1, #3
- adds r1, r1, r3
- ldrh r2, [r6]
- strh r2, [r1, #6]
- adds r5, #3
- lsls r5, r5, #3
- adds r5, r5, r3
- strh r0, [r5, #6]
- add sp, #8
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0800084C: .4byte gOamBuffer
-
thumb_func_start sub_850
sub_850: @ 0x08000850
ldr r0, _08000888 @ =0x04000208
diff --git a/src/main.c b/src/main.c
index e3571a1..e311b6f 100755
--- a/src/main.c
+++ b/src/main.c
@@ -277,25 +277,23 @@ static int sub_780(int arg0, int arg1)
return 1 / var0;
}
-// struct OamMatrix
-// {
-// s16 a;
-// s16 b;
-// s16 c;
-// s16 d;
-// };
-//
-// void sub_7C0(s16 arg0, s16 arg1, s16 matrixNum)
-// {
-// u16 a = 0x10000 / arg0;
-// u16 d = 0x10000 / arg1;
-// volatile s16 a2 = a;
-// volatile s16 b2 = 0;
-// volatile s16 c2 = 0;
-// volatile s16 d2 = d;
-
-// gOamBuffer[matrixNum * 4 ].affineParam = a2;
-// gOamBuffer[matrixNum * 4 + 1].affineParam = b2;
-// gOamBuffer[matrixNum * 4 + 2].affineParam = c2;
-// gOamBuffer[matrixNum * 4 + 3].affineParam = d;
-// }
+void SetMatrixScale(s16 xScale, s16 yScale, s16 matrixNum)
+{
+ vu16 a2, b2, c2, d2;
+ u16 a = 0x10000 / xScale;
+ u32 d = 0x10000 / yScale;
+ a2 = a;
+ b2 = 0;
+ c2 = 0;
+ // There is a delayed u16 shift here that is tricky to produce.
+#ifndef NONMATCHING
+ asm_unified("lsls r0, r0, #0x10\n\
+ lsrs r0, r0, #0x10");
+#endif
+ d2 = d;
+
+ gOamBuffer[matrixNum * 4 ].affineParam = a2;
+ gOamBuffer[matrixNum * 4 + 1].affineParam = b2;
+ gOamBuffer[matrixNum * 4 + 2].affineParam = c2;
+ gOamBuffer[matrixNum * 4 + 3].affineParam = d;
+}