diff --git a/include/vm_debug.h b/include/vm_debug.h index 44d5fee..3d76bc3 100644 --- a/include/vm_debug.h +++ b/include/vm_debug.h @@ -78,6 +78,7 @@ extern void vm_debug_unbreak(int); extern void vm_debug_unbreak_all(); extern DEBUG_CMD(break); +extern DEBUG_CMD(disasm); extern DEBUG_CMD(help); extern DEBUG_CMD(jump); extern DEBUG_CMD(printaddr); diff --git a/src/vm_debug.c b/src/vm_debug.c index 73419d4..37b16b0 100644 --- a/src/vm_debug.c +++ b/src/vm_debug.c @@ -9,6 +9,7 @@ #include #include +#include "apple2.h" #include "mos6502.h" #include "vm_debug.h" #include "vm_di.h" @@ -33,6 +34,8 @@ static bool breakpoints[BREAKPOINTS_MAX]; vm_debug_cmd cmdtable[] = { { "break", "b", vm_debug_cmd_break, 1, "", "Add breakpoint at ", }, + { "disasm", "d", vm_debug_cmd_disasm, 0, "", + "Toggle disassembly", }, { "help", "h", vm_debug_cmd_help, 0, "", "Print out this list of commands", }, { "jump", "j", vm_debug_cmd_jump, 1, "", @@ -415,3 +418,13 @@ DEBUG_CMD(step) mos6502_execute(cpu); vm_debug_break(cpu->PC); } + +DEBUG_CMD(disasm) +{ + apple2 *mach = (apple2 *)vm_di_get(VM_MACHINE); + FILE *stream = (FILE *)vm_di_get(VM_OUTPUT); + + vm_reflect_disasm(NULL); + + fprintf(stream, "disassembly %s\n", mach->disasm ? "ON" : "OFF"); +} diff --git a/tests/vm_debug.c b/tests/vm_debug.c index 2d60d3c..8f08d81 100644 --- a/tests/vm_debug.c +++ b/tests/vm_debug.c @@ -268,3 +268,13 @@ Test(vm_debug, cmd_step) } /* Test(vm_debug, cmd_quit) */ + +Test(vm_debug, cmd_disassemble) +{ + cr_assert_eq(mach->disasm, false); + vm_debug_cmd_disasm(&args); + cr_assert_neq(strlen(buf), 0); + cr_assert_eq(mach->disasm, true); + vm_debug_cmd_disasm(&args); + cr_assert_eq(mach->disasm, false); +}