summaryrefslogtreecommitdiff
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
parente1558f0801b1a28197a00cf6cf8cc703129aa36a (diff)
decompile rom_1068C.s
-rwxr-xr-xasm/rom_1068C.s348
-rw-r--r--include/functions.h6
-rwxr-xr-xinclude/main.h1
-rw-r--r--include/variables.h6
-rwxr-xr-xld_script.txt2
-rw-r--r--src/rom_1068C.c124
6 files changed, 133 insertions, 354 deletions
diff --git a/asm/rom_1068C.s b/asm/rom_1068C.s
deleted file mode 100755
index 37c7a85..0000000
--- a/asm/rom_1068C.s
+++ /dev/null
@@ -1,348 +0,0 @@
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_1068C
-sub_1068C: @ 0x0801068C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- adds r4, r0, #0
- adds r7, r2, #0
- mov sb, r3
- ldr r0, [sp, #0x24]
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- str r0, [sp]
- movs r2, #0
- cmp r2, sb
- bge _080106F0
- lsls r0, r1, #5
- adds r0, r0, r4
- mov sl, r0
-_080106B2:
- movs r3, #0
- adds r6, r2, #1
- cmp r3, r7
- bge _080106E8
- lsls r0, r2, #5
- mov r1, sl
- adds r5, r1, r0
- ldr r0, _08010700 @ =gUnknown_03005C00
- mov ip, r0
- ldr r1, _08010704 @ =0x00000FFF
- mov r8, r1
- ldr r0, [sp]
- lsls r4, r0, #0xc
-_080106CC:
- adds r1, r3, r5
- lsls r1, r1, #0x10
- lsrs r1, r1, #0xf
- add r1, ip
- ldrh r2, [r1]
- mov r0, r8
- ands r0, r2
- orrs r0, r4
- strh r0, [r1]
- adds r0, r3, #1
- lsls r0, r0, #0x10
- lsrs r3, r0, #0x10
- cmp r3, r7
- blt _080106CC
-_080106E8:
- lsls r0, r6, #0x10
- lsrs r2, r0, #0x10
- cmp r2, sb
- blt _080106B2
-_080106F0:
- add sp, #4
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08010700: .4byte gUnknown_03005C00
-_08010704: .4byte 0x00000FFF
-
- thumb_func_start sub_10708
-sub_10708: @ 0x08010708
- push {r4, r5, lr}
- sub sp, #8
- str r0, [sp]
- str r1, [sp, #4]
- lsls r2, r2, #0x10
- lsrs r0, r2, #0x10
- movs r4, #0
- lsls r3, r3, #0x10
- asrs r1, r3, #0x10
- cmp r4, r1
- bge _08010744
- ldr r2, _0801074C @ =0x040000D4
- lsls r0, r0, #0x10
- asrs r3, r0, #0xc
- movs r0, #0x80
- lsls r0, r0, #0x18
- orrs r3, r0
- adds r5, r1, #0
-_0801072C:
- lsls r1, r4, #0xa
- ldr r0, [sp]
- adds r0, r0, r1
- str r0, [r2]
- ldr r0, [sp, #4]
- adds r0, r0, r1
- str r0, [r2, #4]
- str r3, [r2, #8]
- ldr r0, [r2, #8]
- adds r4, #1
- cmp r4, r5
- blt _0801072C
-_08010744:
- add sp, #8
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0801074C: .4byte 0x040000D4
-
- thumb_func_start sub_10750
-sub_10750: @ 0x08010750
- push {r4, r5, lr}
- sub sp, #8
- str r0, [sp]
- str r1, [sp, #4]
- lsls r2, r2, #0x10
- lsrs r0, r2, #0x10
- movs r4, #0
- lsls r3, r3, #0x10
- asrs r1, r3, #0x10
- cmp r4, r1
- bge _0801078C
- ldr r2, _08010794 @ =0x040000D4
- lsls r0, r0, #0x10
- asrs r3, r0, #0x10
- movs r0, #0x80
- lsls r0, r0, #0x18
- orrs r3, r0
- adds r5, r1, #0
-_08010774:
- lsls r1, r4, #6
- ldr r0, [sp]
- adds r0, r0, r1
- str r0, [r2]
- ldr r0, [sp, #4]
- adds r0, r0, r1
- str r0, [r2, #4]
- str r3, [r2, #8]
- ldr r0, [r2, #8]
- adds r4, #1
- cmp r4, r5
- blt _08010774
-_0801078C:
- add sp, #8
- pop {r4, r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08010794: .4byte 0x040000D4
-
- thumb_func_start sub_10798
-sub_10798: @ 0x08010798
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #4
- mov r8, r2
- ldr r4, _08010818 @ =0x040000D4
- str r0, [r4]
- ldr r2, _0801081C @ =gUnknown_0201A920
- str r2, [r4, #4]
- ldr r0, _08010820 @ =0x80000100
- str r0, [r4, #8]
- ldr r3, [r4, #8]
- str r1, [r4]
- movs r1, #0x80
- lsls r1, r1, #3
- adds r3, r2, r1
- str r3, [r4, #4]
- str r0, [r4, #8]
- ldr r0, [r4, #8]
- mov r1, sp
- ldr r5, _08010824 @ =0x00007FFF
- adds r0, r5, #0
- strh r0, [r1]
- str r1, [r4]
- ldr r0, _08010828 @ =0xFFFFFC00
- adds r2, r2, r0
- str r2, [r4, #4]
- ldr r0, _0801082C @ =0x81000200
- str r0, [r4, #8]
- ldr r0, [r4, #8]
- str r2, [r4]
- str r3, [r4, #4]
- ldr r5, _08010830 @ =0x80000200
- str r5, [r4, #8]
- ldr r0, [r4, #8]
- str r3, [r4]
- movs r6, #0xa0
- lsls r6, r6, #0x13
- str r6, [r4, #4]
- str r5, [r4, #8]
- ldr r0, [r4, #8]
- bl sub_1050C
- ldr r1, _08010834 @ =gMain
- movs r0, #0x80
- lsls r0, r0, #0x13
- ldrh r0, [r0]
- strh r0, [r1, #0x16]
- movs r7, #0
-_080107FA:
- mov r1, r8
- cmp r1, #0
- beq _08010804
- bl _call_via_r8
-_08010804:
- adds r0, r7, #0
- bl sub_1001C
- bl sub_D74
- cmp r7, #0x20
- bne _08010838
- ldr r0, _0801081C @ =gUnknown_0201A920
- b _0801083A
- .align 2, 0
-_08010818: .4byte 0x040000D4
-_0801081C: .4byte gUnknown_0201A920
-_08010820: .4byte 0x80000100
-_08010824: .4byte 0x00007FFF
-_08010828: .4byte 0xFFFFFC00
-_0801082C: .4byte 0x81000200
-_08010830: .4byte 0x80000200
-_08010834: .4byte gMain
-_08010838:
- ldr r0, _0801085C @ =gUnknown_0201AD20
-_0801083A:
- str r0, [r4]
- str r6, [r4, #4]
- str r5, [r4, #8]
- ldr r0, [r4, #8]
- adds r0, r7, #0
- adds r0, #0x10
- lsls r0, r0, #0x10
- lsrs r7, r0, #0x10
- cmp r7, #0x20
- bls _080107FA
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0801085C: .4byte gUnknown_0201AD20
-
- thumb_func_start sub_10860
-sub_10860: @ 0x08010860
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #4
- adds r5, r0, #0
- ldr r1, _080108C8 @ =0x040000D4
- movs r0, #0xa0
- lsls r0, r0, #0x13
- mov r8, r0
- str r0, [r1]
- ldr r3, _080108CC @ =gUnknown_0201A520
- str r3, [r1, #4]
- ldr r4, _080108D0 @ =0x80000200
- str r4, [r1, #8]
- ldr r0, [r1, #8]
- mov r2, sp
- ldr r6, _080108D4 @ =0x00007FFF
- adds r0, r6, #0
- strh r0, [r2]
- str r2, [r1]
- movs r2, #0x80
- lsls r2, r2, #3
- adds r0, r3, r2
- str r0, [r1, #4]
- ldr r0, _080108D8 @ =0x81000200
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- str r3, [r1]
- movs r6, #0x80
- lsls r6, r6, #4
- adds r3, r3, r6
- str r3, [r1, #4]
- str r4, [r1, #8]
- ldr r0, [r1, #8]
- movs r7, #0
- adds r6, r1, #0
-_080108A8:
- cmp r5, #0
- beq _080108B0
- bl _call_via_r5
-_080108B0:
- adds r0, r7, #0
- bl sub_1001C
- bl sub_D74
- cmp r7, #0x20
- bne _080108E0
- ldr r0, _080108DC @ =gUnknown_0201A920
- str r0, [r6]
- mov r0, r8
- str r0, [r6, #4]
- b _080108E8
- .align 2, 0
-_080108C8: .4byte 0x040000D4
-_080108CC: .4byte gUnknown_0201A520
-_080108D0: .4byte 0x80000200
-_080108D4: .4byte 0x00007FFF
-_080108D8: .4byte 0x81000200
-_080108DC: .4byte gUnknown_0201A920
-_080108E0:
- ldr r0, _08010908 @ =gUnknown_0201AD20
- str r0, [r6]
- mov r2, r8
- str r2, [r6, #4]
-_080108E8:
- str r4, [r6, #8]
- ldr r0, [r6, #8]
- adds r0, r7, #0
- adds r0, #0x10
- lsls r0, r0, #0x10
- lsrs r7, r0, #0x10
- cmp r7, #0x20
- bls _080108A8
- bl sub_D74
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08010908: .4byte gUnknown_0201AD20
-
- thumb_func_start sub_1090C
-sub_1090C: @ 0x0801090C
- ldr r1, _08010920 @ =gUnknown_0201A500
- movs r2, #0
- adds r0, r1, #0
- adds r0, #0xc
-_08010914:
- str r2, [r0]
- subs r0, #4
- cmp r0, r1
- bge _08010914
- bx lr
- .align 2, 0
-_08010920: .4byte gUnknown_0201A500
diff --git a/include/functions.h b/include/functions.h
index e53d349..6698a17 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -171,12 +171,12 @@ extern void sub_FD5C(void (*func)(void));
extern void sub_FE04(void (*func)(void));
//extern ? sub_FEB8();
//extern ? sub_FF74();
-//extern ? sub_1001C();
+extern void sub_1001C(int);
//extern ? sub_10170();
//extern ? sub_102A8();
//extern ? sub_10424();
//extern ? sub_10480();
-//extern ? sub_1050C();
+extern void sub_1050C(void);
//extern ? sub_10528();
//extern ? sub_10544();
//extern ? sub_105A0();
@@ -389,7 +389,7 @@ extern void sub_FE04(void (*func)(void));
// asm/rom_1068C.s
//extern ? sub_1068C();
-extern void sub_10708(void*, void*, u16, s16);
+extern void sub_10708(void *volatile, void *volatile, s16, s16);
//extern ? sub_10750();
//extern ? sub_10798();
//extern ? sub_10860();
diff --git a/include/main.h b/include/main.h
index 435aa8d..126f6c2 100755
--- a/include/main.h
+++ b/include/main.h
@@ -80,7 +80,6 @@ extern void (*gUnknown_02017BD0)(void);
extern void (*gUnknown_02017BD4)(void);
extern StateFunc gMainFuncs[];
extern struct OamData gOamBuffer[128];
-extern u16 gUnknown_03005C00[0x600];
void sub_24C(void);
void sub_2B4(void);
diff --git a/include/variables.h b/include/variables.h
index d8efc57..92bf425 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -3,10 +3,14 @@
// Place all external variable declarations in this file
+extern u16 gUnknown_0201A520[];
+extern u16 gUnknown_0201AD20[];
+extern u32 gUnknown_0201A500[];
+extern u16 gUnknown_0201A920[];
extern u8 gUnknown_03000000[];
//extern ? gOamBuffer;
//extern ? IntrMain_Buffer;
-//extern ? gUnknown_03005C00;
+extern u16 gUnknown_03005C00[0x600];
//extern ? SoundMainRAM_Buffer;
extern u16 sGbPlayerCurKeys;
extern u16 sGbPlayerPrevKeys;
diff --git a/ld_script.txt b/ld_script.txt
index 2f53a9e..a2f1ac2 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -40,7 +40,7 @@ SECTIONS
asm/field_select.o(.text);
asm/intro.o(.text);
asm/high_scores.o(.text);
- asm/rom_1068C.o(.text);
+ src/rom_1068C.o(.text);
src/titlescreen.o(.text);
asm/rom_11B9C.o(.text);
src/rom_3219C.o(.text);
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