diff options
-rw-r--r-- | asm/unk_debug_menu_3.s | 57 | ||||
-rw-r--r-- | src/debug/unk_debug_menu_3.c | 81 |
2 files changed, 80 insertions, 58 deletions
diff --git a/asm/unk_debug_menu_3.s b/asm/unk_debug_menu_3.s index cd931e15f..162558160 100644 --- a/asm/unk_debug_menu_3.s +++ b/asm/unk_debug_menu_3.s @@ -5,63 +5,6 @@ .text - thumb_func_start debug_sub_813C810 -debug_sub_813C810: - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - add sp, sp, #0xffffffdc - add r6, r0, #0 - ldr r5, ._31 @ gUnknown_Debug_845E443 - ldr r0, ._31 + 4 @ gUnknown_Debug_845E4EF - ldr r4, ._31 + 8 @ gEnemyParty - sub r0, r0, r5 - mov r8, r0 - add r0, r6, #0 - add r1, r5, #0 - mov r2, r8 - bl memcpy - add r0, r4, #0 - mov r1, #0xc9 - mov r2, #0x15 - mov r3, #0x82 - bl debug_sub_813C638 - add r0, r4, #0 - mov r1, sp - bl debug_sub_813C6AC - ldr r0, ._31 + 12 @ gUnknown_Debug_845E467 - add r0, r6, r0 - sub r0, r0, r5 - add r1, r4, #0 - mov r2, #0x64 - bl memcpy - ldr r0, ._31 + 16 @ gUnknown_Debug_845E4CB - add r0, r6, r0 - sub r0, r0, r5 - mov r1, sp - mov r2, #0x24 - bl memcpy - add r0, r6, #0 - add r1, r5, #0 - bl unref_sub_812620C - mov r0, r8 - add sp, sp, #0x24 - pop {r3} - mov r8, r3 - pop {r4, r5, r6} - pop {r1} - bx r1 -._32: - .align 2, 0 -._31: - .word gUnknown_Debug_845E443 - .word gUnknown_Debug_845E4EF - .word gEnemyParty - .word gUnknown_Debug_845E467 - .word gUnknown_Debug_845E4CB - - thumb_func_end debug_sub_813C810 - thumb_func_start debug_sub_813C888 debug_sub_813C888: push {r4, r5, r6, lr} diff --git a/src/debug/unk_debug_menu_3.c b/src/debug/unk_debug_menu_3.c index 50c9cb5cb..7b9d2bbaa 100644 --- a/src/debug/unk_debug_menu_3.c +++ b/src/debug/unk_debug_menu_3.c @@ -322,6 +322,85 @@ __attribute__((naked)) size_t debug_sub_813C740(u8 * dest) "\t.word\tgUnknown_Debug_845E467\n" "\t.word\tgUnknown_Debug_845E4CB"); } -#endif +#endif // NONMATCHING + +#ifdef NONMATCHING +// same reason as before +size_t debug_sub_813C810(u8 * dest) +{ + struct MailStruct mail; + size_t size = gUnknown_Debug_845E443End - gUnknown_Debug_845E443; + struct Pokemon *mon = gEnemyParty; + + memcpy(dest, gUnknown_Debug_845E443, size); + debug_sub_813C638(mon, SPECIES_UNOWN, 5, ITEM_NONE); + debug_sub_813C6AC(mon, &mail); + + // nonmatching pointer arithmetic + memcpy(gUnknown_Debug_845E467 - gUnknown_Debug_845E443 + dest, mon, sizeof(struct Pokemon)); + + memcpy(gUnknown_Debug_845E4CB - gUnknown_Debug_845E443 + dest, &mail, sizeof(struct MailStruct)); + + unref_sub_812620C(dest, gUnknown_Debug_845E443); + + return size; +} +#else +__attribute__((naked)) size_t debug_sub_813C810(u8 * dest) +{ + asm("\tpush\t{r4, r5, r6, lr}\n" + "\tmov\tr6, r8\n" + "\tpush\t{r6}\n" + "\tadd\tsp, sp, #0xffffffdc\n" + "\tadd\tr6, r0, #0\n" + "\tldr\tr5, ._31 @ gUnknown_Debug_845E443\n" + "\tldr\tr0, ._31 + 4 @ gUnknown_Debug_845E4EF\n" + "\tldr\tr4, ._31 + 8 @ gEnemyParty\n" + "\tsub\tr0, r0, r5\n" + "\tmov\tr8, r0\n" + "\tadd\tr0, r6, #0\n" + "\tadd\tr1, r5, #0\n" + "\tmov\tr2, r8\n" + "\tbl\tmemcpy\n" + "\tadd\tr0, r4, #0\n" + "\tmov\tr1, #0xc9\n" + "\tmov\tr2, #0x15\n" + "\tmov\tr3, #0x82\n" + "\tbl\tdebug_sub_813C638\n" + "\tadd\tr0, r4, #0\n" + "\tmov\tr1, sp\n" + "\tbl\tdebug_sub_813C6AC\n" + "\tldr\tr0, ._31 + 12 @ gUnknown_Debug_845E467\n" + "\tadd\tr0, r6, r0\n" + "\tsub\tr0, r0, r5\n" + "\tadd\tr1, r4, #0\n" + "\tmov\tr2, #0x64\n" + "\tbl\tmemcpy\n" + "\tldr\tr0, ._31 + 16 @ gUnknown_Debug_845E4CB\n" + "\tadd\tr0, r6, r0\n" + "\tsub\tr0, r0, r5\n" + "\tmov\tr1, sp\n" + "\tmov\tr2, #0x24\n" + "\tbl\tmemcpy\n" + "\tadd\tr0, r6, #0\n" + "\tadd\tr1, r5, #0\n" + "\tbl\tunref_sub_812620C\n" + "\tmov\tr0, r8\n" + "\tadd\tsp, sp, #0x24\n" + "\tpop\t{r3}\n" + "\tmov\tr8, r3\n" + "\tpop\t{r4, r5, r6}\n" + "\tpop\t{r1}\n" + "\tbx\tr1\n" + "._32:\n" + "\t.align\t2, 0\n" + "._31:\n" + "\t.word\tgUnknown_Debug_845E443\n" + "\t.word\tgUnknown_Debug_845E4EF\n" + "\t.word\tgEnemyParty\n" + "\t.word\tgUnknown_Debug_845E467\n" + "\t.word\tgUnknown_Debug_845E4CB"); +} +#endif // NONMATCHING #endif // DEBUG |