diff options
-rw-r--r-- | asm/code_8098BDC.s | 219 | ||||
-rw-r--r-- | asm/code_809D148.s | 176 | ||||
-rwxr-xr-x | ld_script.txt | 1 | ||||
-rw-r--r-- | src/code_8098BDC.c | 83 | ||||
-rw-r--r-- | src/code_809D148.c | 277 |
5 files changed, 345 insertions, 411 deletions
diff --git a/asm/code_8098BDC.s b/asm/code_8098BDC.s index 5c9a6fb..3dad36e 100644 --- a/asm/code_8098BDC.s +++ b/asm/code_8098BDC.s @@ -5,132 +5,6 @@ .text - thumb_func_start sub_8098D1C -sub_8098D1C: - push {r4-r7,lr} - adds r7, r1, 0 - adds r4, r2, 0 - lsls r0, 16 - asrs r5, r0, 16 - ldr r6, _08098D34 - ldr r0, [r6] - cmp r0, 0 - beq _08098D38 - movs r0, 0 - b _08098D60 - .align 2, 0 -_08098D34: .4byte gUnknown_20398A8 -_08098D38: - ldr r1, _08098D68 - movs r0, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl Log - movs r1, 0x1 - str r1, [r6] - ldr r0, _08098D6C - str r1, [r0] - ldr r0, _08098D70 - str r4, [r0] - ldr r1, _08098D74 - movs r0, 0x2 - str r0, [r1] - ldr r0, _08098D78 - strh r5, [r0] - ldr r0, _08098D7C - str r7, [r0] - movs r0, 0x1 -_08098D60: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08098D68: .4byte gUnknown_8115F5C -_08098D6C: .4byte gUnknown_20398AC -_08098D70: .4byte gUnknown_20398B0 -_08098D74: .4byte gUnknown_20398B4 -_08098D78: .4byte gUnknown_20398BE -_08098D7C: .4byte gUnknown_20398C0 - thumb_func_end sub_8098D1C - - thumb_func_start sub_8098D80 -sub_8098D80: - push {r4,lr} - adds r4, r0, 0 - ldr r1, _08098DB8 - ldr r0, [r1] - cmp r0, 0 - bne _08098DC4 - movs r0, 0x3 - str r0, [r1] - ldr r1, _08098DBC - movs r0, 0x1 - str r0, [r1] - ldr r0, _08098DC0 - str r4, [r0] - bl sub_809C730 - movs r0, 0xD - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _08098DB2 - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_80118C4 -_08098DB2: - movs r0, 0x1 - b _08098DC6 - .align 2, 0 -_08098DB8: .4byte gUnknown_20398A8 -_08098DBC: .4byte gUnknown_20398AC -_08098DC0: .4byte gUnknown_20398B0 -_08098DC4: - movs r0, 0 -_08098DC6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8098D80 - - thumb_func_start sub_8098DCC -sub_8098DCC: - push {r4,lr} - adds r4, r0, 0 - ldr r1, _08098E04 - ldr r0, [r1] - cmp r0, 0 - bne _08098E10 - movs r0, 0x4 - str r0, [r1] - ldr r1, _08098E08 - movs r0, 0x1 - str r0, [r1] - ldr r0, _08098E0C - str r4, [r0] - bl sub_809C730 - movs r0, 0xD - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - bne _08098DFE - lsls r0, r4, 16 - lsrs r0, 16 - bl sub_80118C4 -_08098DFE: - movs r0, 0x1 - b _08098E12 - .align 2, 0 -_08098E04: .4byte gUnknown_20398A8 -_08098E08: .4byte gUnknown_20398AC -_08098E0C: .4byte gUnknown_20398B0 -_08098E10: - movs r0, 0 -_08098E12: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8098DCC - thumb_func_start sub_8098E18 sub_8098E18: push {r4-r6,lr} @@ -8713,97 +8587,4 @@ _0809D0A6: bx r1 thumb_func_end sub_809D058 - thumb_func_start sub_809D0AC -sub_809D0AC: - push {lr} - bl sub_809D0BC - pop {r0} - bx r0 - thumb_func_end sub_809D0AC - - thumb_func_start nullsub_119 -nullsub_119: - bx lr - thumb_func_end nullsub_119 - - thumb_func_start sub_809D0BC -sub_809D0BC: - push {r4,r5,lr} - ldr r5, _0809D0F8 - ldr r1, _0809D0FC - ldr r2, [r1] - ldr r3, [r1, 0x4] - str r2, [r5, 0x3C] - str r3, [r5, 0x40] - adds r0, r5, 0 - adds r0, 0x44 - movs r4, 0 - strb r4, [r0] - movs r0, 0 - bl sub_809D158 - str r4, [r5, 0x8] - str r4, [r5, 0xC] - str r4, [r5, 0x10] - movs r0, 0x1 - negs r0, r0 - str r0, [r5, 0x4] - str r4, [r5, 0x24] - str r4, [r5, 0x28] - str r4, [r5, 0x2C] - str r4, [r5, 0x30] - str r4, [r5, 0x34] - str r4, [r5, 0x38] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809D0F8: .4byte gUnknown_20399E8 -_0809D0FC: .4byte gUnknown_8116478 - thumb_func_end sub_809D0BC - - thumb_func_start sub_809D100 -sub_809D100: - push {lr} - adds r2, r0, 0 - ldr r1, _0809D120 - ldr r0, [r1, 0x24] - cmp r0, r2 - beq _0809D11A - str r2, [r1, 0x24] - movs r0, 0 - str r0, [r1, 0x28] - str r0, [r1, 0x2C] - str r0, [r1, 0x30] - str r0, [r1, 0x34] - str r0, [r1, 0x38] -_0809D11A: - pop {r0} - bx r0 - .align 2, 0 -_0809D120: .4byte gUnknown_20399E8 - thumb_func_end sub_809D100 - - thumb_func_start sub_809D124 -sub_809D124: - push {r4,lr} - adds r4, r0, 0 - ldr r3, _0809D144 - ldr r0, [r3, 0x24] - cmp r0, r4 - beq _0809D13A - str r4, [r3, 0x24] - movs r0, 0 - str r0, [r3, 0x30] - str r0, [r3, 0x34] - str r0, [r3, 0x38] -_0809D13A: - str r1, [r3, 0x28] - str r2, [r3, 0x2C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809D144: .4byte gUnknown_20399E8 - thumb_func_end sub_809D124 - .align 2,0 diff --git a/asm/code_809D148.s b/asm/code_809D148.s index b03391b..75bec2b 100644 --- a/asm/code_809D148.s +++ b/asm/code_809D148.s @@ -5,182 +5,6 @@ .text - thumb_func_start sub_809D148 -sub_809D148: - ldr r1, _0809D154 - str r0, [r1] - movs r0, 0 - str r0, [r1, 0x8] - bx lr - .align 2, 0 -_0809D154: .4byte gUnknown_20399E8 - thumb_func_end sub_809D148 - - thumb_func_start sub_809D158 -sub_809D158: - ldr r2, _0809D16C - str r0, [r2] - movs r0, 0 - str r0, [r2, 0x8] - ldr r0, [r1] - ldr r1, [r1, 0x4] - str r0, [r2, 0x1C] - str r1, [r2, 0x20] - bx lr - .align 2, 0 -_0809D16C: .4byte gUnknown_20399E8 - thumb_func_end sub_809D158 - - thumb_func_start sub_809D170 -sub_809D170: - ldr r2, _0809D17C - str r0, [r2] - movs r0, 0 - str r0, [r2, 0x8] - str r1, [r2, 0x4] - bx lr - .align 2, 0 -_0809D17C: .4byte gUnknown_20399E8 - thumb_func_end sub_809D170 - - thumb_func_start sub_809D180 -sub_809D180: - ldr r2, _0809D18C - str r0, [r2] - movs r0, 0x1 - str r0, [r2, 0x8] - str r1, [r2, 0xC] - bx lr - .align 2, 0 -_0809D18C: .4byte gUnknown_20399E8 - thumb_func_end sub_809D180 - - thumb_func_start sub_809D190 -sub_809D190: - ldr r3, _0809D1A4 - str r0, [r3] - movs r0, 0x1 - str r0, [r3, 0x8] - str r2, [r3, 0xC] - ldr r0, [r1] - ldr r1, [r1, 0x4] - str r0, [r3, 0x14] - str r1, [r3, 0x18] - bx lr - .align 2, 0 -_0809D1A4: .4byte gUnknown_20399E8 - thumb_func_end sub_809D190 - - thumb_func_start sub_809D1A8 -sub_809D1A8: - ldr r3, _0809D1B8 - str r0, [r3] - movs r0, 0x1 - str r0, [r3, 0x8] - str r2, [r3, 0xC] - str r1, [r3, 0x4] - bx lr - .align 2, 0 -_0809D1B8: .4byte gUnknown_20399E8 - thumb_func_end sub_809D1A8 - - thumb_func_start sub_809D1BC -sub_809D1BC: - ldr r2, _0809D1C8 - str r0, [r2] - movs r0, 0x2 - str r0, [r2, 0x8] - str r1, [r2, 0x10] - bx lr - .align 2, 0 -_0809D1C8: .4byte gUnknown_20399E8 - thumb_func_end sub_809D1BC - - thumb_func_start sub_809D1CC -sub_809D1CC: - ldr r3, _0809D1E0 - str r0, [r3] - movs r0, 0x2 - str r0, [r3, 0x8] - str r2, [r3, 0x10] - ldr r0, [r1] - ldr r1, [r1, 0x4] - str r0, [r3, 0x14] - str r1, [r3, 0x18] - bx lr - .align 2, 0 -_0809D1E0: .4byte gUnknown_20399E8 - thumb_func_end sub_809D1CC - - thumb_func_start sub_809D1E4 -sub_809D1E4: - ldr r3, _0809D1F4 - str r0, [r3] - movs r0, 0x2 - str r0, [r3, 0x8] - str r2, [r3, 0x10] - str r1, [r3, 0x4] - bx lr - .align 2, 0 -_0809D1F4: .4byte gUnknown_20399E8 - thumb_func_end sub_809D1E4 - - thumb_func_start sub_809D1F8 -sub_809D1F8: - ldr r2, _0809D204 - str r0, [r2] - movs r0, 0x3 - str r0, [r2, 0x8] - str r1, [r2, 0xC] - bx lr - .align 2, 0 -_0809D204: .4byte gUnknown_20399E8 - thumb_func_end sub_809D1F8 - - thumb_func_start sub_809D208 -sub_809D208: - ldr r3, _0809D21C - str r0, [r3] - movs r0, 0x3 - str r0, [r3, 0x8] - str r2, [r3, 0xC] - ldr r0, [r1] - ldr r1, [r1, 0x4] - str r0, [r3, 0x14] - str r1, [r3, 0x18] - bx lr - .align 2, 0 -_0809D21C: .4byte gUnknown_20399E8 - thumb_func_end sub_809D208 - - thumb_func_start sub_809D220 -sub_809D220: - ldr r3, _0809D230 - str r0, [r3] - movs r0, 0x3 - str r0, [r3, 0x8] - str r2, [r3, 0xC] - str r1, [r3, 0x4] - bx lr - .align 2, 0 -_0809D230: .4byte gUnknown_20399E8 - thumb_func_end sub_809D220 - - thumb_func_start sub_809D234 -sub_809D234: - push {lr} - ldr r0, _0809D244 - ldr r0, [r0, 0x8] - cmp r0, 0 - beq _0809D240 - movs r0, 0x1 -_0809D240: - pop {r1} - bx r1 - .align 2, 0 -_0809D244: .4byte gUnknown_20399E8 - thumb_func_end sub_809D234 - thumb_func_start sub_809D248 sub_809D248: ldr r3, _0809D258 diff --git a/ld_script.txt b/ld_script.txt index 23346ab..51ad399 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -125,6 +125,7 @@ SECTIONS { asm/code_8098468.o(.text); src/code_8098BDC.o(.text); asm/code_8098BDC.o(.text); + src/code_809D148.o(.text); asm/code_809D148.o(.text); asm/code_80A26CC.o(.text); src/code_80A7714.o(.text); diff --git a/src/code_8098BDC.c b/src/code_8098BDC.c index bd56fb3..23aa716 100644 --- a/src/code_8098BDC.c +++ b/src/code_8098BDC.c @@ -1,6 +1,15 @@ #include "global.h" extern u32 gUnknown_203B47C; +extern u32 gUnknown_20398A8; +extern u32 gUnknown_8115F5C; +extern u32 gUnknown_20398AC; +extern u32 gUnknown_20398B0; +extern u32 gUnknown_20398B4; +extern u32 gUnknown_20398C0; +extern u16 gUnknown_20398BE; + +extern void Log(u32, u32*, s32, u32); extern void sub_809B57C(); extern void GroundScript_Unlock(); @@ -44,6 +53,10 @@ extern void sub_8091FB4(); extern u8 sub_8001CC4(u8, u8, u8); extern void sub_8091980(u32); +extern u8 sub_80023E4(u32); +extern void sub_80118C4(u32); +extern void sub_809C730(); + void sub_8098BDC(void) { sub_809B57C(); @@ -148,19 +161,57 @@ void sub_8098CC8(void) sub_8091FB4(); } -// TODO lsrs should be asrs on my first arg -//u8 sub_8098D1C(u16 r0, u32 r1, s32 r2) -//{ -// if(gUnknown_20398A8 == 0) -// { -// Log(0, &gUnknown_8115F5C, r0, r2); -// gUnknown_20398A8 = 1; -// gUnknown_20398AC = 1; -// gUnknown_20398B0 = r2; -// gUnknown_20398B4 = 2; -// gUnknown_20398BE = r0; -// gUnknown_20398C0 = r1; -// return 1; -// } -// return 0; -//} +bool8 sub_8098D1C(s16 r0, u32 r1, u32 r2) +{ + s32 temp; + temp = r0; // force a asr shift + if(gUnknown_20398A8 == 0) + { + Log(0, &gUnknown_8115F5C, temp, r2); + gUnknown_20398A8 = 1; + gUnknown_20398AC = 1; + gUnknown_20398B0 = r2; + gUnknown_20398B4 = 2; + gUnknown_20398BE = temp; + gUnknown_20398C0 = r1; + return TRUE; + } + return FALSE; +} + +bool8 sub_8098D80(u32 r0) +{ + if(gUnknown_20398A8 == 0) + { + gUnknown_20398A8 = 3; + gUnknown_20398AC = 1; + gUnknown_20398B0 = r0; + sub_809C730(); + if(sub_80023E4(0xD) == 0) + { + // Terrible hack but meh + sub_80118C4((r0 << 16) >> 16); + } + return TRUE; + } + return FALSE; +} + +bool8 sub_8098DCC(u32 r0) +{ + if(gUnknown_20398A8 == 0) + { + gUnknown_20398A8 = 4; + gUnknown_20398AC = 1; + gUnknown_20398B0 = r0; + sub_809C730(); + if(sub_80023E4(0xD) == 0) + { + // Terrible hack but meh + sub_80118C4((r0 << 16) >> 16); + } + return TRUE; + } + return FALSE; +} + 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; +//} |