summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2020-11-20 18:57:36 -0600
committerSeth Barberee <seth.barberee@gmail.com>2020-11-20 18:57:36 -0600
commitdb6ed3e526baf0018b47dda5a1f6a802c7763a6e (patch)
tree5fd65c6b19c4cb7d8e0c00eef9d6dd27c55076aa /src
parent2832112389a4193e1a13725b4fbdacf8528951e8 (diff)
some more work on decomping funcs
Diffstat (limited to 'src')
-rw-r--r--src/code_8098BDC.c225
-rw-r--r--src/code_80A26CC.c9
2 files changed, 231 insertions, 3 deletions
diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c
index b47d39c..2d04bf4 100644
--- a/src/code_8098BDC.c
+++ b/src/code_8098BDC.c
@@ -3,12 +3,22 @@
extern struct PlayTimeStruct *gUnknown_203B47C;
extern u32 gUnknown_20398A8;
-extern u32 gUnknown_8115F5C;
extern u32 gUnknown_20398AC;
extern u32 gUnknown_20398B0;
extern u32 gUnknown_20398B4;
+extern u8 gUnknown_20398B9;
+extern u8 gUnknown_20398BA;
extern u32 gUnknown_20398C0;
+extern s16 gUnknown_20398C4;
extern u16 gUnknown_20398BE;
+extern u8 gUnknown_203B49D;
+extern u8 gUnknown_203B49C;
+
+extern u32 gUnknown_8115F5C;
+extern u32 gUnknown_8115F80;
+extern u32 gUnknown_8115FA4;
+extern u32 gUnknown_8115FC8;
+extern u32 gUnknown_8115FE8;
extern void Log(u32, u32*, s32, u32);
@@ -22,7 +32,6 @@ extern void sub_80A6E80();
extern void sub_8099BE4();
extern void sub_8099744();
extern void sub_8011860();
-extern void IncrementPlayTime(struct PlayTimeStruct *Time);
extern void sub_800CB20();
extern void sub_800485C();
extern void nullsub_120();
@@ -51,12 +60,13 @@ extern void sub_8098CC8();
extern void sub_809674C();
extern void sub_80961B4();
extern void sub_8091FB4();
+extern s32 sub_80A2B18(s16);
extern u8 sub_8001CC4(u8, u8, u8);
extern void sub_8091980(u32);
extern u8 sub_80023E4(u32);
extern void sub_80118C4(u16);
-extern void sub_809C730();
+extern u8 sub_809C730();
void sub_8098BDC(void)
{
@@ -214,3 +224,212 @@ bool8 sub_8098DCC(u32 r0)
return FALSE;
}
+#ifndef NONMATCHING
+NAKED
+#endif
+bool8 sub_8098E18(s16 r0, u32 r1, u32 r2)
+{
+#ifdef NONMATCHING
+ // Had to nonmatch because the prologue statements of add/lsls/lsrs didn't match
+ s32 temp;
+ s16 return_var;
+ temp = r0;
+ if(gUnknown_20398A8 == 0)
+ {
+ Log(0, &gUnknown_8115F80, temp, r2);
+ if(gUnknown_203B49D != 0)
+ {
+ gUnknown_20398A8 = 7;
+ }
+ else
+ {
+ if(gUnknown_203B49C == 0)
+ {
+ gUnknown_20398C4 = r2;
+ }
+ return_var = sub_80A2750(gUnknown_20398C4);
+ // TODO so ugly but it works.. nested if statements aren't my thing in decomping
+ if(return_var == 2)
+ {
+ goto _08098E88;
+ }
+ if(return_var > 2)
+ {
+ goto _08098E7C;
+ }
+ if(return_var == 1)
+ {
+ goto _08098E84;
+ }
+ else
+ {
+ goto _08098E8C;
+ }
+_08098E7C:
+ if(return_var == 4)
+ {
+ gUnknown_20398A8 = 8;
+ goto _08098E8C;
+ }
+ else
+ {
+ goto _08098E8C;
+ }
+_08098E84:
+ gUnknown_20398A8 = 5;
+ goto _08098E8C;
+_08098E88:
+ gUnknown_20398A8 = 6;
+ }
+_08098E8C:
+ gUnknown_20398AC = 1;
+ gUnknown_20398B0 = r1;
+ sub_809C730();
+ return TRUE;
+ }
+ return FALSE;
+#else
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tadds r6, r1, 0\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r2, r0, 16\n"
+ "\tadds r5, r2, 0\n"
+ "\tldr r4, _08098E40\n"
+ "\tldr r0, [r4]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08098EA8\n"
+ "\tldr r1, _08098E44\n"
+ "\tmovs r0, 0\n"
+ "\tadds r3, r6, 0\n"
+ "\tbl Log\n"
+ "\tldr r0, _08098E48\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08098E4C\n"
+ "\tmovs r0, 0x7\n"
+ "\tb _08098E8A\n"
+ "\t.align 2, 0\n"
+"_08098E40: .4byte gUnknown_20398A8\n"
+"_08098E44: .4byte gUnknown_8115F80\n"
+"_08098E48: .4byte gUnknown_203B49D\n"
+"_08098E4C:\n"
+ "\tldr r0, _08098E74\n"
+ "\tldrb r0, [r0]\n"
+ "\tldr r1, _08098E78\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08098E58\n"
+ "\tstrh r5, [r1]\n"
+"_08098E58:\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r1, r2]\n"
+ "\tbl sub_80A2750\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _08098E88\n"
+ "\tcmp r0, 0x2\n"
+ "\tbgt _08098E7C\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _08098E84\n"
+ "\tb _08098E8C\n"
+ "\t.align 2, 0\n"
+"_08098E74: .4byte gUnknown_203B49C\n"
+"_08098E78: .4byte gUnknown_20398C4\n"
+"_08098E7C:\n"
+ "\tcmp r0, 0x4\n"
+ "\tbne _08098E8C\n"
+ "\tmovs r0, 0x8\n"
+ "\tb _08098E8A\n"
+"_08098E84:\n"
+ "\tmovs r0, 0x5\n"
+ "\tb _08098E8A\n"
+"_08098E88:\n"
+ "\tmovs r0, 0x6\n"
+"_08098E8A:\n"
+ "\tstr r0, [r4]\n"
+"_08098E8C:\n"
+ "\tldr r0, _08098EA0\n"
+ "\tmovs r1, 0x1\n"
+ "\tstr r1, [r0]\n"
+ "\tldr r0, _08098EA4\n"
+ "\tstr r6, [r0]\n"
+ "\tbl sub_809C730\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _08098EAA\n"
+ "\t.align 2, 0\n"
+"_08098EA0: .4byte gUnknown_20398AC\n"
+"_08098EA4: .4byte gUnknown_20398B0\n"
+"_08098EA8:\n"
+ "\tmovs r0, 0\n"
+"_08098EAA:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+#endif
+}
+
+// Unused
+u32 sub_8098EB0(u32 r0, u32 r1, u32 r2, u32 r3)
+{
+ if(gUnknown_20398A8 == 0)
+ {
+ if(gUnknown_203B49D != 0)
+ {
+ Log(0, &gUnknown_8115FA4, r0, r3);
+ gUnknown_20398A8 = 7;
+ gUnknown_20398AC = 1;
+ gUnknown_20398B0 = r0;
+ sub_809C730();
+ return 1;
+ }
+ }
+ return 0;
+}
+
+u32 sub_8098F00(u32 r0, u32 r1, u32 r2, u32 r3)
+{
+ if(gUnknown_20398A8 == 0)
+ {
+ Log(0, &gUnknown_8115FC8, r0, r3);
+ gUnknown_20398A8 = 9;
+ gUnknown_20398AC = 1;
+ gUnknown_20398B0 = r0;
+ sub_809C730();
+ return 1;
+ }
+ return 0;
+}
+
+u32 sub_8098F44(u32 r0, u32 r1, u32 r2, u32 r3)
+{
+ if(gUnknown_20398A8 == 0)
+ {
+ Log(0, &gUnknown_8115FE8, r0, r3);
+ gUnknown_20398A8 = 0xA;
+ gUnknown_20398AC = 1;
+ gUnknown_20398B0 = r0;
+ sub_809C730();
+ return 1;
+ }
+ return 0;
+}
+
+u32 sub_8098F88(void)
+{
+ return gUnknown_20398B9;
+}
+
+u32 sub_8098F94(void)
+{
+ return gUnknown_20398BA;
+}
+
+s16 sub_8098FA0(void)
+{
+ return sub_8001658(0, 0x11);
+}
+
+s32 sub_8098FB4(void)
+{
+ return sub_80A2B18(sub_8001658(0, 0x11));
+}
diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c
index 4baeb5d..7be1bbb 100644
--- a/src/code_80A26CC.c
+++ b/src/code_80A26CC.c
@@ -20,6 +20,15 @@ extern struct unkStruct_80A2608 *sub_80A2620(u32);
extern u8 sub_8097384(u32);
extern s16 gUnknown_8116F9A[];
+s16 sub_80A26B8(s16 r0)
+{
+ // Useless cast that forces correct ordering
+ s32 temp;
+ temp = r0;
+
+ return gUnknown_8116F9A[r0];
+}
+
s16 sub_80A26CC(s16 r0)
{
return (0xDC >> 2) + r0;