summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2019-08-05 21:48:30 -0500
committerCameron Hall <cameronghall@cox.net>2019-08-05 21:48:30 -0500
commit66780ab02c2d26de2b74e64b07320467a47b42db (patch)
tree918340b38b16e9aba7d9f85d8e5e200f0649445d /src
parente1558f0801b1a28197a00cf6cf8cc703129aa36a (diff)
decompile rom_1068C.s
Diffstat (limited to 'src')
-rw-r--r--src/rom_1068C.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/rom_1068C.c b/src/rom_1068C.c
new file mode 100644
index 0000000..4a5e619
--- /dev/null
+++ b/src/rom_1068C.c
@@ -0,0 +1,124 @@
+#include "global.h"
+#include "main.h"
+
+void sub_1068C(int a, int b, int c, int d, u16 e)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < d; i++)
+ {
+ for (j = 0; j < c; j++)
+ {
+ u16 index = b * 32 + a + i * 32 + j;
+
+ gUnknown_03005C00[index] = (gUnknown_03005C00[index] & 0xFFF) | (e << 12);
+ }
+ }
+}
+
+// This requires volatile parameters to match. There is no reason, *ever*, to do this.
+void sub_10708(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY)
+{
+ int i;
+
+ for (i = 0; i < numTilesY; i++)
+ {
+ DmaCopy16(3, (u8 *)src + 0x400 * i, (u8 *)dest + 0x400 * i, numTilesX * 32);
+ }
+}
+
+void sub_10750(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY)
+{
+ int i;
+
+ for (i = 0; i < numTilesY; i++)
+ {
+ DmaCopy16(3, (u8 *)src + 0x40 * i, (u8 *)dest + 0x40 * i, numTilesX * 2);
+ }
+}
+
+void sub_10798(void *a, void *b, void (*func)(void))
+{
+ u16 i;
+
+ DmaCopy16(3, a, gUnknown_0201A920, 0x200);
+ DmaCopy16(3, b, gUnknown_0201A920 + 0x200, 0x200);
+ DmaFill16(3, 0x7FFF, gUnknown_0201A920 - 0x200, 0x400);
+ DmaCopy16(3, gUnknown_0201A920 - 0x200, gUnknown_0201A920 + 0x200, 0x400);
+ DmaCopy16(3, gUnknown_0201A920 + 0x200, (void *)PLTT, 0x400);
+
+ sub_1050C();
+ gMain.unk16 = REG_DISPCNT;
+
+ for (i = 0; i <= 32; i += 16)
+ {
+ if (func != NULL)
+ func();
+ sub_1001C(i);
+ sub_D74();
+ if (i == 32)
+ {
+ DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
+ }
+ else
+ {
+ DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
+ }
+ }
+}
+
+void sub_10860(void (*func)(void))
+{
+ u16 i;
+
+ DmaCopy16(3, (void *)PLTT, gUnknown_0201A520, 0x400);
+ DmaFill16(3, 0x7FFF, gUnknown_0201A520 + 0x200, 0x400);
+ DmaCopy16(3, gUnknown_0201A520, gUnknown_0201A520 + 0x400, 0x400);
+
+ for (i = 0; i <= 32; i += 16)
+ {
+ if (func != NULL)
+ func();
+ sub_1001C(i);
+ sub_D74();
+ if (i == 32)
+ {
+ DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
+ }
+ else
+ {
+ DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
+ }
+ }
+ sub_D74();
+}
+
+#ifdef NONMATCHING
+// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}'
+void sub_1090C(void)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ gUnknown_0201A500[i] = 0;
+}
+#else
+NAKED
+void sub_1090C(void)
+{
+ asm_unified("\n\
+ ldr r1, _08010920 @ =gUnknown_0201A500\n\
+ movs r2, #0\n\
+ adds r0, r1, #0\n\
+ adds r0, #0xc\n\
+_08010914:\n\
+ str r2, [r0]\n\
+ subs r0, #4\n\
+ cmp r0, r1\n\
+ bge _08010914\n\
+ bx lr\n\
+ .align 2, 0\n\
+_08010920: .4byte gUnknown_0201A500");
+}
+#endif