diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-10-20 08:40:04 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-10-20 08:40:04 -0500 |
commit | ba5df32ca23fe022a0e5db530e0f4d87d15508bf (patch) | |
tree | 9b938107fbf57f470a0f91a88fe9423409254665 | |
parent | 684eb41feb95329d131b7480f0a34cc0ce7b259a (diff) |
Decompile SetMatrixScale()
-rwxr-xr-x | asm/intro.s | 6 | ||||
-rwxr-xr-x | asm/rom_11B9C.s | 40 | ||||
-rwxr-xr-x | asm/rom_24C.s | 73 | ||||
-rwxr-xr-x | src/main.c | 42 |
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 @@ -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; +} |