diff options
Diffstat (limited to 'src/code_8098BDC.c')
-rw-r--r-- | src/code_8098BDC.c | 225 |
1 files changed, 222 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)); +} |