diff options
-rw-r--r-- | src/code_80118A4.c | 123 | ||||
-rw-r--r-- | src/code_80118A4_1.c | 32 | ||||
-rw-r--r-- | src/music.c | 61 | ||||
-rw-r--r-- | src/pokemon_1.c | 109 |
4 files changed, 30 insertions, 295 deletions
diff --git a/src/code_80118A4.c b/src/code_80118A4.c index c8ba82b..c05a8db 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -27,11 +27,11 @@ extern void nullsub_28(void); extern int sprintf(char *, const char *, ...); -struct unkFileStruct +struct DebugLocation { - u32 unk0; - u32 unk4; - u32 unk8; + char *file; + u32 line; + char *func; }; @@ -41,9 +41,9 @@ extern s16 gUnknown_202DE22; extern s16 gUnknown_202DE24; extern u32 gUnknown_202DE1C; extern u32 gUnknown_203B14C; -extern const char gNotEntryText; -extern const char gUnknown_80D418C; -extern char gUnknown_80D41C4; +extern const char gNotEntryText[]; +extern const char gUnknown_80D418C[]; +extern const char gUnknown_80D41C4[]; void sub_8011760(void) { @@ -172,55 +172,18 @@ void sub_8011930(u16 r0) sub_800BFD0(r0); } -// TODO fix this nonmatching -#ifndef NONMATCHING -NAKED -#endif u32 sub_8011940(u16 r0) { -#ifdef NONMATCHING u32 temp; temp = sub_800C068(); - if(r0 == 0x3e7) + if(r0 == 999) { - temp ^= r0; - // TODO this OR/NEG apparently is close - temp |= -temp; - return temp >> 31; + temp ^= 999; + return (-temp | temp) >> 31; } - if(temp != r0) - return 0; - else - return 1; -#else - asm_unified("\tpush {r4,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tbl sub_800C068\n" - "\tlsls r0, 16\n" - "\tlsrs r1, r0, 16\n" - "\tldr r0, _08011960\n" - "\tcmp r4, r0\n" - "\tbne _08011964\n" - "\teors r1, r4\n" - "\tnegs r0, r1\n" - "\torrs r0, r1\n" - "\tlsrs r0, 31\n" - "\tb _0801196C\n" - "\t.align 2,0\n" - "_08011960: .4byte 0x000003e7\n" - "_08011964:\n" - "\tmovs r0, 0\n" - "\tcmp r1, r4\n" - "\tbne _0801196C\n" - "\tmovs r0, 0x1\n" - "_0801196C:\n" - "\tpop {r4}\n" - "\tpop {r1}\n" - "\tbx r1"); -#endif + return temp == r0; } void sub_8011974(u16 r0, u16 r1) @@ -289,68 +252,20 @@ void nullsub_26(void) { } -#ifndef NONMATCHING -NAKED -#endif // Unused -void PrintFuncFileLineOrNotEntry(char * r0, struct unkFileStruct *r1) +void PrintFuncFileLineOrNotEntry(char * r0, struct DebugLocation *r1) { -#ifdef NONMATCHING - u32 temp; if(r1 != 0) { - // TODO fix regswap here.. otherwise looks good - temp = r1->unk4; - sprintf(r0, &gUnknown_80D418C, r1->unk8, r1->unk0, temp); + sprintf(r0, gUnknown_80D418C, r1->func, r1->file, r1->line); } else { - sprintf(r0, &gNotEntryText); + sprintf(r0, gNotEntryText); } -#else - asm_unified("\tpush {r4,lr}\n" - "\tsub sp, 0x4\n" - "\tadds r4, r0, 0\n" - "\tadds r0, r1, 0\n" - "\tcmp r0, 0\n" - "\tbeq _08011A90\n" - "\tldr r1, _08011A8C\n" - "\tldr r2, [r0, 0x8]\n" - "\tldr r3, [r0]\n" - "\tldr r0, [r0, 0x4]\n" - "\tstr r0, [sp]\n" - "\tadds r0, r4, 0\n" - "\tbl sprintf\n" - "\tb _08011A98\n" - "\t.align 2, 0\n" -"_08011A8C: .4byte gUnknown_80D418C\n" -"_08011A90:\n" - "\tldr r1, _08011AA0\n" - "\tadds r0, r4, 0\n" - "\tbl sprintf\n" -"_08011A98:\n" - "\tadd sp, 0x4\n" - "\tpop {r4}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_08011AA0: .4byte gNotEntryText"); -#endif -} - -void PrintFuncFileLine(char *r0, struct unkFileStruct *r1, u32 r2) -{ - volatile u32 temp; - volatile u32 temp2; - u32 r3; - u32 r4; - char *preload; - - preload = &gUnknown_80D41C4; - r3 = r1->unk8; - r4 = r1->unk0; - temp = r4; - temp2 = r1->unk4; - - sprintf(r0, preload, r2, r3); +} + +void PrintFuncFileLine(char *buf, struct DebugLocation *loc, char* prefix) +{ + sprintf(buf, gUnknown_80D41C4, prefix, loc->func, loc->file, loc->line); } diff --git a/src/code_80118A4_1.c b/src/code_80118A4_1.c index 9d57d7d..89f4db5 100644 --- a/src/code_80118A4_1.c +++ b/src/code_80118A4_1.c @@ -23,40 +23,10 @@ void sub_8011B14(void) gUnknown_203B150 = 0; } -#ifndef NONMATCHING -NAKED -#endif u8 sub_8011B20(void) { -#ifdef NONMATCHING - // TODO figure out why I mix up my mv/ldr for these kinds of comparisons - u8 temp; - if(gUnknown_203B150 == 0) - { - temp = 1; - } - else - { - temp = 0; - } - gUnknown_203B150 = temp; + gUnknown_203B150 = !gUnknown_203B150; return gUnknown_203B150; -#else - asm_unified("\tpush {lr}\n" - "\tldr r1, _08011B38\n" - "\tmovs r2, 0\n" - "\tldrb r0, [r1]\n" - "\tcmp r0, 0\n" - "\tbne _08011B2E\n" - "\tmovs r2, 0x1\n" -"_08011B2E:\n" - "\tstrb r2, [r1]\n" - "\tldrb r0, [r1]\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" -"_08011B38: .4byte gUnknown_203B150"); -#endif } // unused diff --git a/src/music.c b/src/music.c index 13544d9..8997887 100644 --- a/src/music.c +++ b/src/music.c @@ -99,12 +99,8 @@ void nullsub_179(void) { } -#ifndef NONMATCHING -NAKED -#endif u8 sub_800CA38(u32 songIndex) { -#ifdef NONMATCHING if(IsBGSong(songIndex)) { if(sub_800CAE0(songIndex) == 0) @@ -114,70 +110,19 @@ u8 sub_800CA38(u32 songIndex) } if(sub_800CACC(songIndex)) { - // TODO compiler gets weird here wanted to skip to next check if(sub_800CAE0(songIndex) == 1) { - _0800CA70: return 1; } } - if(sub_800CAAC(songIndex)) + else if(sub_800CAAC(songIndex)) { - if((sub_800CAE0(songIndex) > 1)) + if(sub_800CAE0(songIndex) > 1) { - goto _0800CA70; + return 1; } } return 0; -#else - asm_unified("\tpush {r4,lr}\n" - "\tadds r4, r0, 0\n" - "\tbl IsBGSong\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA54\n" - "\tlsls r0, r4, 16\n" - "\tlsrs r0, 16\n" - "\tbl sub_800CAE0\n" - "\tlsls r0, 16\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA70\n" -"_0800CA54:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_800CACC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA74\n" - "\tlsls r0, r4, 16\n" - "\tlsrs r0, 16\n" - "\tbl sub_800CAE0\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbne _0800CA90\n" -"_0800CA70:\n" - "\tmovs r0, 0x1\n" - "\tb _0800CA92\n" -"_0800CA74:\n" - "\tadds r0, r4, 0\n" - "\tbl sub_800CAAC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800CA90\n" - "\tlsls r0, r4, 16\n" - "\tlsrs r0, 16\n" - "\tbl sub_800CAE0\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbhi _0800CA70\n" -"_0800CA90:\n" - "\tmovs r0, 0\n" -"_0800CA92:\n" - "\tpop {r4}\n" - "\tpop {r1}\n" - "\tbx r1"); -#endif } void nullsub_19(void) diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 5a1eb88..ebb24d7 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -6,7 +6,7 @@ extern int sprintf(char *, const char *, ...); extern struct gPokemon *gMonsterParameters; extern struct FileArchive gUnknown_8510000; -extern const char gUnknown_8107684; +extern const char gUnknown_8107684[]; struct unkEvolve { @@ -14,35 +14,16 @@ struct unkEvolve /* 0x4 */ struct EvolveNeeds needs; }; -#ifndef NONMATCHING -NAKED -#endif -void sub_808DD48(s16 r0, struct unkEvolve *r1) +s16 sub_808DD48(s16 r0, struct unkEvolve *r1) { -#ifdef NONMATCHING struct EvolveStruct1 temp2; struct EvolveNeeds temp1; temp1 = gMonsterParameters[r0].need; - temp2 = gMonsterParameters[r0].pre; // TODO should be using r2 but it uses r0 + temp2 = gMonsterParameters[r0].pre; r1->conditions = temp2; r1->needs = temp1; -#else - asm_unified("\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tldr r2, _0808DD64\n" - "\tldr r3, [r2]\n" - "\tlsls r2, r0, 3\n" - "\tadds r2, r0\n" - "\tlsls r2, 3\n" - "\tadds r2, r3\n" - "\tldr r3, [r2, 0x38]\n" - "\tldr r2, [r2, 0x34]\n" - "\tstr r2, [r1]\n" - "\tstr r3, [r1, 0x4]\n" - "\tbx lr\n" - "\t.align 2, 0\n" -"_0808DD64: .4byte gMonsterParameters"); -#endif + // The return value is not used anywhere, but necessary for the function to match. + return r0; } u8 sub_808DD68(s16 r0, u32 r1) @@ -60,106 +41,30 @@ u8 sub_808DD68(s16 r0, u32 r1) } } -#ifndef NONMATCHING -NAKED -#endif struct OpenedFile *sub_808DD90(s16 r0) { -#ifdef NONMATCHING // Looks like this loads the dialogue sprite for the pokemon - // Two words: register memes... else it matches - // Fix this and then one after matches too char buffer[0xC]; if(gMonsterParameters[r0].dialogue_sprites == 0) { return NULL; } - sprintf(buffer, &gUnknown_8107684); + sprintf(buffer, gUnknown_8107684, r0); // "kao%03d" return OpenFile(buffer, &gUnknown_8510000); -#else - asm_unified("\tpush {lr}\n" - "\tsub sp, 0xC\n" - "\tlsls r0, 16\n" - "\tasrs r2, r0, 16\n" - "\tldr r0, _0808DDBC\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0, 0x10]\n" - "\tcmp r0, 0\n" - "\tbeq _0808DDC8\n" - "\tldr r1, _0808DDC0\n" - "\tmov r0, sp\n" - "\tbl sprintf\n" - "\tldr r1, _0808DDC4\n" - "\tmov r0, sp\n" - "\tbl OpenFile\n" - "\tb _0808DDCA\n" - "\t.align 2, 0\n" -"_0808DDBC: .4byte gMonsterParameters\n" -"_0808DDC0: .4byte gUnknown_8107684\n" -"_0808DDC4: .4byte gUnknown_8510000\n" -"_0808DDC8:\n" - "\tmovs r0, 0\n" -"_0808DDCA:\n" - "\tadd sp, 0xC\n" - "\tpop {r1}\n" - "\tbx r1"); -#endif } -#ifndef NONMATCHING -NAKED -#endif struct OpenedFile *sub_808DDD0(s16 r0) { -#ifdef NONMATCHING // Looks like this loads the dialogue sprite for the pokemon - // Two words: register memes... else it matches char buffer[0xC]; if(gMonsterParameters[r0].dialogue_sprites == 0) { return NULL; } - sprintf(buffer, &gUnknown_8107684); + sprintf(buffer, gUnknown_8107684, r0); // "kao%03d" return OpenFileAndGetFileDataPtr(buffer, &gUnknown_8510000); -#else - asm_unified("\tpush {lr}\n" - "\tsub sp, 0xC\n" - "\tlsls r0, 16\n" - "\tasrs r2, r0, 16\n" - "\tldr r0, _0808DDFC\n" - "\tldr r1, [r0]\n" - "\tlsls r0, r2, 3\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0, 0x10]\n" - "\tcmp r0, 0\n" - "\tbeq _0808DE08\n" - "\tldr r1, _0808DE00\n" - "\tmov r0, sp\n" - "\tbl sprintf\n" - "\tldr r1, _0808DE04\n" - "\tmov r0, sp\n" - "\tbl OpenFileAndGetFileDataPtr\n" - "\tb _0808DE0A\n" - "\t.align 2, 0\n" - "_0808DDFC: .4byte gMonsterParameters\n" - "_0808DE00: .4byte gUnknown_8107684\n" - "_0808DE04: .4byte gUnknown_8510000\n" - "_0808DE08:\n" - "\tmovs r0, 0\n" - "_0808DE0A:\n" - "\tadd sp, 0xC\n" - "\tpop {r1}\n" - "\tbx r1"); - -#endif } bool8 sub_808DE10(s16 r0, s32 r1) |