summaryrefslogtreecommitdiff
path: root/src/code_809D148.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/code_809D148.c')
-rw-r--r--src/code_809D148.c277
1 files changed, 277 insertions, 0 deletions
diff --git a/src/code_809D148.c b/src/code_809D148.c
new file mode 100644
index 0000000..965ca12
--- /dev/null
+++ b/src/code_809D148.c
@@ -0,0 +1,277 @@
+#include "global.h"
+
+struct unkStruct_20399E8
+{
+ u32 unk0;
+ u32 unk4;
+ u32 unk8;
+ u32 unkC;
+ u32 unk10;
+ u32 unk14;
+ u32 unk18;
+ u32 unk1C;
+ u32 unk20;
+
+ u32 unk24;
+ u32 unk28;
+ u32 unk2C;
+ u32 unk30;
+ u32 unk34;
+ u32 unk38;
+};
+
+struct unkStruct_809D158
+{
+ u32 unk0;
+ u32 unk4;
+};
+
+extern struct unkStruct_20399E8 gUnknown_20399E8;
+
+void sub_809D0BC(void);
+
+
+void sub_809D0AC(void)
+{
+ sub_809D0BC();
+}
+
+void nullsub_119(void)
+{
+}
+
+#ifndef NONMATCHING
+NAKED
+#endif
+void sub_809D0BC(void)
+{
+#ifdef NONMATCHING
+ struct unkStruct_20399E8 *pre_load_203;
+
+ u32 temp;
+ u32 temp1;
+
+ pre_load_203 = &gUnknown_20399E8;
+
+ // TODO regswap.. should be r2/r3, not r0, r1
+ temp = gUnknown_8116478.unk0;
+ temp1 = gUnknown_8116478.unk4;
+
+ pre_load_203->unk3C = temp;
+ pre_load_203->unk40 = temp1;
+ pre_load_203->unk44 = 0;
+ sub_809D158(0);
+ pre_load_203->unk8 = 0;
+ pre_load_203->unkC = 0;
+ pre_load_203->unk10 = 0;
+ pre_load_203->unk4 = -1;
+ pre_load_203->unk24 = 0;
+ pre_load_203->unk28 = 0;
+ pre_load_203->unk2C = 0;
+ pre_load_203->unk30 = 0;
+ pre_load_203->unk34 = 0;
+ pre_load_203->unk38 = 0;
+#else
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tldr r5, _0809D0F8\n"
+ "\tldr r1, _0809D0FC\n"
+ "\tldr r2, [r1]\n"
+ "\tldr r3, [r1, 0x4]\n"
+ "\tstr r2, [r5, 0x3C]\n"
+ "\tstr r3, [r5, 0x40]\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x44\n"
+ "\tmovs r4, 0\n"
+ "\tstrb r4, [r0]\n"
+ "\tmovs r0, 0\n"
+ "\tbl sub_809D158\n"
+ "\tstr r4, [r5, 0x8]\n"
+ "\tstr r4, [r5, 0xC]\n"
+ "\tstr r4, [r5, 0x10]\n"
+ "\tmovs r0, 0x1\n"
+ "\tnegs r0, r0\n"
+ "\tstr r0, [r5, 0x4]\n"
+ "\tstr r4, [r5, 0x24]\n"
+ "\tstr r4, [r5, 0x28]\n"
+ "\tstr r4, [r5, 0x2C]\n"
+ "\tstr r4, [r5, 0x30]\n"
+ "\tstr r4, [r5, 0x34]\n"
+ "\tstr r4, [r5, 0x38]\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0809D0F8: .4byte gUnknown_20399E8\n"
+"_0809D0FC: .4byte gUnknown_8116478\n");
+#endif
+}
+
+void sub_809D100(u32 r0)
+{
+ if(gUnknown_20399E8.unk24 != r0)
+ {
+ gUnknown_20399E8.unk24 = r0;
+ gUnknown_20399E8.unk28 = 0;
+ gUnknown_20399E8.unk2C = 0;
+ gUnknown_20399E8.unk30 = 0;
+ gUnknown_20399E8.unk34 = 0;
+ gUnknown_20399E8.unk38 = 0;
+ }
+}
+
+void sub_809D124(u32 r0, u32 r1, u32 r2)
+{
+ if(gUnknown_20399E8.unk24 != r0)
+ {
+ gUnknown_20399E8.unk24 = r0;
+ gUnknown_20399E8.unk30 = 0;
+ gUnknown_20399E8.unk34 = 0;
+ gUnknown_20399E8.unk38 = 0;
+ }
+ gUnknown_20399E8.unk28 = r1;
+ gUnknown_20399E8.unk2C = r2;
+}
+
+void sub_809D148(u32 r0)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 0;
+
+}
+
+void sub_809D158(u32 r0, struct unkStruct_809D158 *r1)
+{
+ u32 temp;
+ u32 temp1;
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 0;
+
+ // Load both first and then store
+ temp = r1->unk0;
+ temp1 = r1->unk4;
+ gUnknown_20399E8.unk1C = temp;
+ gUnknown_20399E8.unk20 = temp1;
+}
+
+void sub_809D170(u32 r0, u32 r1)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 0;
+ gUnknown_20399E8.unk4 = r1;
+}
+
+void sub_809D180(u32 r0, u32 r1)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 1;
+ gUnknown_20399E8.unkC = r1;
+}
+
+void sub_809D190(u32 r0, struct unkStruct_809D158 *r1, u32 r2)
+{
+ u32 temp;
+ u32 temp1;
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 1;
+ gUnknown_20399E8.unkC = r2;
+
+ // Load both first and then store
+ temp = r1->unk0;
+ temp1 = r1->unk4;
+ gUnknown_20399E8.unk14 = temp;
+ gUnknown_20399E8.unk18 = temp1;
+}
+
+void sub_809D1A8(u32 r0, u32 r1, u32 r2)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 1;
+ gUnknown_20399E8.unkC = r2;
+ gUnknown_20399E8.unk4 = r1;
+}
+
+void sub_809D1BC(u32 r0, u32 r1)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 2;
+ gUnknown_20399E8.unk10 = r1;
+}
+
+void sub_809D1CC(u32 r0, struct unkStruct_809D158 *r1, u32 r2)
+{
+ u32 temp;
+ u32 temp1;
+
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 2;
+ gUnknown_20399E8.unk10 = r2;
+
+ // Load both first and then store
+ temp = r1->unk0;
+ temp1 = r1->unk4;
+ gUnknown_20399E8.unk14 = temp;
+ gUnknown_20399E8.unk18 = temp1;
+}
+
+void sub_809D1E4(u32 r0, u32 r1, u32 r2)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 2;
+ gUnknown_20399E8.unk10 = r2;
+ gUnknown_20399E8.unk4 = r1;
+}
+
+void sub_809D1F8(u32 r0, u32 r1)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 3;
+ gUnknown_20399E8.unkC = r1;
+}
+
+void sub_809D208(u32 r0, struct unkStruct_809D158 *r1, u32 r2)
+{
+ u32 temp;
+ u32 temp1;
+
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 3;
+ gUnknown_20399E8.unkC = r2;
+
+ // Load both first and then store
+ temp = r1->unk0;
+ temp1 = r1->unk4;
+ gUnknown_20399E8.unk14 = temp;
+ gUnknown_20399E8.unk18 = temp1;
+}
+
+void sub_809D220(u32 r0, u32 r1, u32 r2)
+{
+ gUnknown_20399E8.unk0 = r0;
+ gUnknown_20399E8.unk8 = 3;
+ gUnknown_20399E8.unkC = r2;
+ gUnknown_20399E8.unk4 = r1;
+}
+
+u32 sub_809D234(void)
+{
+ u32 temp;
+ temp = gUnknown_20399E8.unk8;
+ if(temp != 0)
+ {
+ temp = 1;
+ }
+ return temp;
+}
+
+// TODO regswap but matches otherwise
+//u8 sub_809D248(struct unkStruct_809D158 *r0)
+//{
+// u32 temp;
+// u32 temp1;
+//
+// temp = gUnknown_20399E8.unk3C;
+// temp1 = gUnknown_20399E8.unk40;
+// r0->unk0 = temp;
+// r0->unk4 = temp1;
+// return gUnknown_20399E8.unk44;
+//}