summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-04-07 13:20:26 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-04-07 13:20:26 -0400
commit28565a3fe307d906cceb562c1ffe526f3d94cfc8 (patch)
tree0cbc3316e78ebe132cdd48b10ea7b26d96279c46
parent5bf9e96c84c5f9253e014416208f32b95a297087 (diff)
I struggle to hold back my words about debug_sub_813C810
-rw-r--r--asm/unk_debug_menu_3.s57
-rw-r--r--src/debug/unk_debug_menu_3.c81
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