diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2020-11-20 18:57:36 -0600 |
---|---|---|
committer | Seth Barberee <seth.barberee@gmail.com> | 2020-11-20 18:57:36 -0600 |
commit | db6ed3e526baf0018b47dda5a1f6a802c7763a6e (patch) | |
tree | 5fd65c6b19c4cb7d8e0c00eef9d6dd27c55076aa | |
parent | 2832112389a4193e1a13725b4fbdacf8528951e8 (diff) |
some more work on decomping funcs
-rw-r--r-- | asm/code_8098BDC.s | 235 | ||||
-rw-r--r-- | asm/code_809D148.s | 13 | ||||
-rw-r--r-- | src/code_8098BDC.c | 225 | ||||
-rw-r--r-- | src/code_80A26CC.c | 9 |
4 files changed, 231 insertions, 251 deletions
diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index 3dad36e..099d9d3 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -5,241 +5,6 @@ .text - thumb_func_start sub_8098E18 -sub_8098E18: - push {r4-r6,lr} - adds r6, r1, 0 - lsls r0, 16 - asrs r2, r0, 16 - adds r5, r2, 0 - ldr r4, _08098E40 - ldr r0, [r4] - cmp r0, 0 - bne _08098EA8 - ldr r1, _08098E44 - movs r0, 0 - adds r3, r6, 0 - bl Log - ldr r0, _08098E48 - ldrb r0, [r0] - cmp r0, 0 - beq _08098E4C - movs r0, 0x7 - b _08098E8A - .align 2, 0 -_08098E40: .4byte gUnknown_20398A8 -_08098E44: .4byte gUnknown_8115F80 -_08098E48: .4byte gUnknown_203B49D -_08098E4C: - ldr r0, _08098E74 - ldrb r0, [r0] - ldr r1, _08098E78 - cmp r0, 0 - bne _08098E58 - strh r5, [r1] -_08098E58: - movs r2, 0 - ldrsh r0, [r1, r2] - bl sub_80A2750 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - beq _08098E88 - cmp r0, 0x2 - bgt _08098E7C - cmp r0, 0x1 - beq _08098E84 - b _08098E8C - .align 2, 0 -_08098E74: .4byte gUnknown_203B49C -_08098E78: .4byte gUnknown_20398C4 -_08098E7C: - cmp r0, 0x4 - bne _08098E8C - movs r0, 0x8 - b _08098E8A -_08098E84: - movs r0, 0x5 - b _08098E8A -_08098E88: - movs r0, 0x6 -_08098E8A: - str r0, [r4] -_08098E8C: - ldr r0, _08098EA0 - movs r1, 0x1 - str r1, [r0] - ldr r0, _08098EA4 - str r6, [r0] - bl sub_809C730 - movs r0, 0x1 - b _08098EAA - .align 2, 0 -_08098EA0: .4byte gUnknown_20398AC -_08098EA4: .4byte gUnknown_20398B0 -_08098EA8: - movs r0, 0 -_08098EAA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8098E18 - - thumb_func_start sub_8098EB0 -sub_8098EB0: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08098EE4 - ldr r0, [r5] - cmp r0, 0 - bne _08098EF8 - ldr r0, _08098EE8 - ldrb r0, [r0] - cmp r0, 0 - beq _08098EF8 - ldr r1, _08098EEC - movs r0, 0 - adds r2, r4, 0 - bl Log - movs r0, 0x7 - str r0, [r5] - ldr r1, _08098EF0 - movs r0, 0x1 - str r0, [r1] - ldr r0, _08098EF4 - str r4, [r0] - bl sub_809C730 - movs r0, 0x1 - b _08098EFA - .align 2, 0 -_08098EE4: .4byte gUnknown_20398A8 -_08098EE8: .4byte gUnknown_203B49D -_08098EEC: .4byte gUnknown_8115FA4 -_08098EF0: .4byte gUnknown_20398AC -_08098EF4: .4byte gUnknown_20398B0 -_08098EF8: - movs r0, 0 -_08098EFA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8098EB0 - - thumb_func_start sub_8098F00 -sub_8098F00: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08098F10 - ldr r0, [r5] - cmp r0, 0 - beq _08098F14 - movs r0, 0 - b _08098F32 - .align 2, 0 -_08098F10: .4byte gUnknown_20398A8 -_08098F14: - ldr r1, _08098F38 - movs r0, 0 - adds r2, r4, 0 - bl Log - movs r0, 0x9 - str r0, [r5] - ldr r1, _08098F3C - movs r0, 0x1 - str r0, [r1] - ldr r0, _08098F40 - str r4, [r0] - bl sub_809C730 - movs r0, 0x1 -_08098F32: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08098F38: .4byte gUnknown_8115FC8 -_08098F3C: .4byte gUnknown_20398AC -_08098F40: .4byte gUnknown_20398B0 - thumb_func_end sub_8098F00 - - thumb_func_start sub_8098F44 -sub_8098F44: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08098F54 - ldr r0, [r5] - cmp r0, 0 - beq _08098F58 - movs r0, 0 - b _08098F76 - .align 2, 0 -_08098F54: .4byte gUnknown_20398A8 -_08098F58: - ldr r1, _08098F7C - movs r0, 0 - adds r2, r4, 0 - bl Log - movs r0, 0xA - str r0, [r5] - ldr r1, _08098F80 - movs r0, 0x1 - str r0, [r1] - ldr r0, _08098F84 - str r4, [r0] - bl sub_809C730 - movs r0, 0x1 -_08098F76: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08098F7C: .4byte gUnknown_8115FE8 -_08098F80: .4byte gUnknown_20398AC -_08098F84: .4byte gUnknown_20398B0 - thumb_func_end sub_8098F44 - - thumb_func_start sub_8098F88 -sub_8098F88: - ldr r0, _08098F90 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08098F90: .4byte gUnknown_20398B9 - thumb_func_end sub_8098F88 - - thumb_func_start sub_8098F94 -sub_8098F94: - ldr r0, _08098F9C - ldrb r0, [r0] - bx lr - .align 2, 0 -_08098F9C: .4byte gUnknown_20398BA - thumb_func_end sub_8098F94 - - thumb_func_start sub_8098FA0 -sub_8098FA0: - push {lr} - movs r0, 0 - movs r1, 0x11 - bl sub_8001658 - lsls r0, 16 - asrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_8098FA0 - - thumb_func_start sub_8098FB4 -sub_8098FB4: - push {lr} - movs r0, 0 - movs r1, 0x11 - bl sub_8001658 - lsls r0, 16 - asrs r0, 16 - bl sub_80A2B18 - pop {r1} - bx r1 - thumb_func_end sub_8098FB4 - thumb_func_start sub_8098FCC sub_8098FCC: push {r4,lr} diff --git a/asm/code_809D148.s b/asm/code_809D148.s index 5571ce2..bc5bed2 100644 --- a/asm/code_809D148.s +++ b/asm/code_809D148.s @@ -10035,17 +10035,4 @@ _080A26B4: bx r1 thumb_func_end sub_80A2688 - thumb_func_start sub_80A26B8 -sub_80A26B8: - lsls r0, 16 - ldr r1, _080A26C8 - asrs r0, 15 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_080A26C8: .4byte gUnknown_8116F9A - thumb_func_end sub_80A26B8 - .align 2,0 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; |