summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2020-09-16 14:00:48 -0500
committerSeth Barberee <seth.barberee@gmail.com>2020-09-16 14:00:48 -0500
commit190c3562b9df62ab57297c46348f3739563c9868 (patch)
tree735a8a62d07f64809fe90e38b35f545fa499204d
parent5cdd4a723668c8abd46205f74a51a8a82e72f35c (diff)
decomp a chunk of input
-rw-r--r--asm/input.s129
-rw-r--r--include/input.h44
-rwxr-xr-xld_script.txt1
-rw-r--r--src/input.c206
4 files changed, 251 insertions, 129 deletions
diff --git a/asm/input.s b/asm/input.s
index d439867..f7b8540 100644
--- a/asm/input.s
+++ b/asm/input.s
@@ -5,135 +5,6 @@
.text
- thumb_func_start InitInput
-InitInput:
- ldr r0, =gUnknown_20255F0
- movs r3, 0
- movs r2, 0
- strh r2, [r0]
- strh r2, [r0, 0x2]
- strh r2, [r0, 0x4]
- strh r2, [r0, 0x6]
- ldr r0, =gUnknown_2025638
- strh r2, [r0]
- strh r2, [r0, 0x2]
- strh r2, [r0, 0x4]
- strh r2, [r0, 0x6]
- ldr r1, =gUnknown_202562C
- ldr r0, =0x4a14c1
- str r0, [r1]
- ldr r0, =gUnknown_2025600
- str r2, [r0, 0x20]
- ldr r1, =0xffff
- strh r1, [r0]
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0, 0x2]
- strh r1, [r0, 0x4]
- strh r1, [r0, 0x6]
- strh r1, [r0, 0x1C]
- strh r1, [r0, 0x1E]
- strh r1, [r0, 0x8]
- strh r1, [r0, 0xA]
- strh r1, [r0, 0xC]
- strh r1, [r0, 0xE]
- strh r1, [r0, 0x10]
- strh r1, [r0, 0x12]
- strh r1, [r0, 0x14]
- strh r1, [r0, 0x16]
- adds r1, r0, 0
- adds r1, 0x28
- strb r3, [r1]
- adds r0, 0x29
- strb r3, [r0]
- ldr r0, =gUnknown_2025668
- strh r2, [r0]
- strh r2, [r0, 0x2]
- bx lr
- .align 2, 0
- .pool
- thumb_func_end InitInput
-
- thumb_func_start sub_800485C
-sub_800485C:
- push {r4,r5,lr}
- ldr r2, =gUnknown_2025638
- ldr r1, =gUnknown_20255F0
- adds r0, r2, 0
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldr r0, [r0]
- str r0, [r1]
- movs r3, 0
- movs r0, 0
- strh r0, [r2]
- strh r0, [r2, 0x2]
- strh r0, [r2, 0x4]
- strh r0, [r2, 0x6]
- ldr r0, =gUnknown_2025600
- ldr r1, =0xffff
- strh r1, [r0]
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0, 0x2]
- strh r1, [r0, 0x4]
- strh r1, [r0, 0x6]
- strh r1, [r0, 0x8]
- strh r1, [r0, 0xA]
- strh r1, [r0, 0xC]
- strh r1, [r0, 0xE]
- strh r1, [r0, 0x10]
- strh r1, [r0, 0x12]
- strh r1, [r0, 0x14]
- strh r1, [r0, 0x16]
- adds r1, r0, 0
- adds r1, 0x28
- strb r3, [r1]
- adds r0, 0x29
- strb r3, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
- .pool
- thumb_func_end sub_800485C
-
- thumb_func_start sub_80048B8
-sub_80048B8:
- movs r0, 0
- bx lr
- thumb_func_end sub_80048B8
-
- thumb_func_start sub_80048BC
-sub_80048BC:
- movs r0, 0
- bx lr
- thumb_func_end sub_80048BC
-
- thumb_func_start sub_80048C0
-sub_80048C0:
- movs r0, 0
- bx lr
- thumb_func_end sub_80048C0
-
- thumb_func_start sub_80048C4
-sub_80048C4:
- movs r0, 0
- bx lr
- thumb_func_end sub_80048C4
-
- thumb_func_start sub_80048C8
-sub_80048C8:
- movs r0, 0
- bx lr
- thumb_func_end sub_80048C8
-
- thumb_func_start sub_80048CC
-sub_80048CC:
- movs r0, 0
- bx lr
- thumb_func_end sub_80048CC
-
thumb_func_start sub_80048D0
sub_80048D0:
ldr r1, =gUnknown_20255F0
diff --git a/include/input.h b/include/input.h
new file mode 100644
index 0000000..1ac1bec
--- /dev/null
+++ b/include/input.h
@@ -0,0 +1,44 @@
+struct test
+{
+ /* 0x0 */ u16 unk0;
+ /* 0x2 */ u16 unk1;
+ /* 0x4 */ u16 unk2;
+ /* 0x6 */ u16 unk3;
+ /* 0x8 */ u16 unk4;
+};
+
+struct test3
+{
+ /* 0x0 */ u16 unk0;
+ /* 0x2 */ u16 unk1;
+ /* 0x4 */ u16 unk2;
+ /* 0x6 */ u16 unk3;
+};
+
+struct Input
+{
+ /* 0x0 */ u16 unk0;
+ /* 0x2 */ u16 unk1;
+ /* 0x4 */ u16 unk2;
+ /* 0x6 */ u16 unk3;
+ /* 0x8 */ u16 unk4;
+ /* 0xA */ u16 unk5;
+ /* 0xC */ u16 unk6;
+ /* 0xE */ u16 unk7;
+ /* 0x10 */ u16 unk8;
+ /* 0x12 */ u16 unk9;
+ /* 0x14 */ u16 unk10;
+ /* 0x16 */ u16 unk11;
+ /* 0x18 */ u16 unk12;
+ /* 0x1A */ u16 unk13;
+ /* 0x1C */ u16 unk14;
+ /* 0x1E */ u16 unk15;
+ /* 0x20 */ u16 unk16;
+ /* 0x22 */ u16 unk17[3]; // padding
+ /* 0x28 */ u8 unk18;
+ /* 0x29 */ u8 unk19;
+ /* 0x2A */ u8 unk20;
+};
+
+void InitInput(void);
+void sub_800485C(void);
diff --git a/ld_script.txt b/ld_script.txt
index ed0cae4..c1d91f7 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -52,6 +52,7 @@ SECTIONS {
src/other_random.o(.text);
src/util.o(.text);
src/bg_palette_buffer.o(.text);
+ src/input.o(.text);
asm/input.o(.text);
asm/code_8004AA0.o(.text);
src/sprite.o(.text);
diff --git a/src/input.c b/src/input.c
new file mode 100644
index 0000000..9455eb2
--- /dev/null
+++ b/src/input.c
@@ -0,0 +1,206 @@
+#include "global.h"
+#include "input.h"
+
+extern struct Input gUnknown_2025600;
+extern struct test gUnknown_20255F0;
+extern struct test gUnknown_2025638;
+extern struct test gUnknown_2025648;
+extern struct test3 gUnknown_2025668;
+extern u32 gUnknown_202562C;
+
+#ifndef NONMATCHING
+NAKED
+#endif
+void InitInput(void)
+{
+#ifdef NONMATCHING
+ gUnknown_20255F0.unk0 = 0;
+ gUnknown_20255F0.unk1 = 0;
+ gUnknown_20255F0.unk2 = 0;
+ gUnknown_20255F0.unk3 = 0;
+
+ gUnknown_2025638.unk0 = 0;
+ gUnknown_2025638.unk1 = 0;
+ gUnknown_2025638.unk2 = 0;
+ gUnknown_2025638.unk3 = 0;
+
+ gUnknown_202562C = 4854977; // ????? (0x4a14c1)
+
+ gUnknown_2025600.unk16 = 0; // TODO: should be str but generates strh
+ gUnknown_2025600.unk0 = 0xffff; // probably a mask
+ gUnknown_2025600.unk1 = -1;
+ gUnknown_2025600.unk2 = -1;
+ gUnknown_2025600.unk3 = -1;
+ gUnknown_2025600.unk14 = -1;
+ gUnknown_2025600.unk15 = -1;
+ gUnknown_2025600.unk4 = -1;
+ gUnknown_2025600.unk5 = -1;
+ gUnknown_2025600.unk6 = -1;
+ gUnknown_2025600.unk7 = -1;
+ gUnknown_2025600.unk8 = -1;
+ gUnknown_2025600.unk9 = -1;
+ gUnknown_2025600.unk10 = -1;
+ gUnknown_2025600.unk11 = -1;
+ gUnknown_2025600.unk18 = 0;
+ gUnknown_2025600.unk19 = 0;
+
+ gUnknown_2025668.unk0 = 0;
+ gUnknown_2025668.unk1 = 0;
+#else
+ asm_unified("\tldr r0, =gUnknown_20255F0\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r2, 0\n"
+ "\tstrh r2, [r0] \n"
+ "\tstrh r2, [r0, 0x2]\n"
+ "\tstrh r2, [r0, 0x4]\n"
+ "\tstrh r2, [r0, 0x6]\n"
+ "\tldr r0, =gUnknown_2025638\n"
+ "\tstrh r2, [r0]\n"
+ "\tstrh r2, [r0, 0x2]\n"
+ "\tstrh r2, [r0, 0x4]\n"
+ "\tstrh r2, [r0, 0x6]\n"
+ "\tldr r1, =gUnknown_202562C\n"
+ "\tldr r0, =0x4a14c1\n"
+ "\tstr r0, [r1]\n"
+ "\tldr r0, =gUnknown_2025600\n"
+ "\tstr r2, [r0, 0x20]\n"
+ "\tldr r1, =0xffff\n"
+ "\tstrh r1, [r0] \n"
+ "\tmovs r1, 0x1\n"
+ "\tnegs r1, r1\n"
+ "\tstrh r1, [r0, 0x2]\n"
+ "\tstrh r1, [r0, 0x4]\n"
+ "\tstrh r1, [r0, 0x6]\n"
+ "\tstrh r1, [r0, 0x1C]\n"
+ "\tstrh r1, [r0, 0x1E]\n"
+ "\tstrh r1, [r0, 0x8]\n"
+ "\tstrh r1, [r0, 0xA]\n"
+ "\tstrh r1, [r0, 0xC]\n"
+ "\tstrh r1, [r0, 0xE]\n"
+ "\tstrh r1, [r0, 0x10]\n"
+ "\tstrh r1, [r0, 0x12]\n"
+ "\tstrh r1, [r0, 0x14]\n"
+ "\tstrh r1, [r0, 0x16]\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r1, 0x28\n"
+ "\tstrb r3, [r1]\n"
+ "\tadds r0, 0x29\n"
+ "\tstrb r3, [r0]\n"
+ "\tldr r0, =gUnknown_2025668\n"
+ "\tstrh r2, [r0]\n"
+ "\tstrh r2, [r0, 0x2]\n"
+ "\tbx lr\n"
+ "\t.align 2, 0\n"
+ "\t.pool");
+#endif
+}
+
+#ifndef NONMATCHING
+NAKED
+#endif
+void sub_800485C(void)
+{
+#ifdef NONMATCHING
+ gUnknown_20255F0 = gUnknown_2025638;
+
+ // TODO missing:
+ // ldr r0, [r0]
+ // str r0, [r1]
+
+ gUnknown_2025638.unk0 = 0;
+ gUnknown_2025638.unk1 = 0;
+ gUnknown_2025638.unk2 = 0;
+ gUnknown_2025638.unk3 = 0;
+
+ gUnknown_2025600.unk0 = 0xffff;
+ gUnknown_2025600.unk1 = -1;
+ gUnknown_2025600.unk2 = -1;
+ gUnknown_2025600.unk3 = -1;
+ gUnknown_2025600.unk4 = -1;
+ gUnknown_2025600.unk5 = -1;
+ gUnknown_2025600.unk6 = -1;
+ gUnknown_2025600.unk7 = -1;
+ gUnknown_2025600.unk8 = -1;
+ gUnknown_2025600.unk9 = -1;
+ gUnknown_2025600.unk10 = -1;
+ gUnknown_2025600.unk11 = -1;
+
+ gUnknown_2025600.unk18 = 0;
+ gUnknown_2025600.unk19 = 0;
+#else
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tldr r2, =gUnknown_2025638\n"
+ "\tldr r1, =gUnknown_20255F0\n"
+ "\tadds r0, r2, 0\n"
+ "\tldm r0!, {r3-r5}\n"
+ "\tstm r1!, {r3-r5}\n"
+ "\tldr r0, [r0]\n"
+ "\tstr r0, [r1]\n"
+ "\tmovs r3, 0\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r2]\n"
+ "\tstrh r0, [r2, 0x2]\n"
+ "\tstrh r0, [r2, 0x4]\n"
+ "\tstrh r0, [r2, 0x6]\n"
+ "\tldr r0, =gUnknown_2025600\n"
+ "\tldr r1, =0xffff\n"
+ "\tstrh r1, [r0]\n"
+ "\tmovs r1, 0x1\n"
+ "\tnegs r1, r1\n"
+ "\tstrh r1, [r0, 0x2]\n"
+ "\tstrh r1, [r0, 0x4]\n"
+ "\tstrh r1, [r0, 0x6]\n"
+ "\tstrh r1, [r0, 0x8]\n"
+ "\tstrh r1, [r0, 0xA]\n"
+ "\tstrh r1, [r0, 0xC]\n"
+ "\tstrh r1, [r0, 0xE]\n"
+ "\tstrh r1, [r0, 0x10]\n"
+ "\tstrh r1, [r0, 0x12]\n"
+ "\tstrh r1, [r0, 0x14]\n"
+ "\tstrh r1, [r0, 0x16]\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r1, 0x28\n"
+ "\tstrb r3, [r1]\n"
+ "\tadds r0, 0x29\n"
+ "\tstrb r3, [r0]\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "\t.pool");
+#endif
+}
+
+// Unused
+u8 sub_80048B8(void)
+{
+ return 0;
+}
+
+u8 sub_80048BC(void)
+{
+ return 0;
+}
+
+// Unused
+u8 sub_80048C0(void)
+{
+ return 0;
+}
+
+// Unused
+u8 sub_80048C4(void)
+{
+ return 0;
+}
+
+u8 sub_80048C8(void)
+{
+ return 0;
+}
+
+// Unused
+u8 sub_80048CC(void)
+{
+ return 0;
+}