From b239cac239e6f79d35ed1dd42d25d4163e94eac1 Mon Sep 17 00:00:00 2001 From: Peter Evans Date: Thu, 1 Mar 2018 19:31:56 -0600 Subject: [PATCH] Add dblock command to disassemble blocks of code --- include/vm_debug.h | 1 + src/vm_debug.c | 15 +++++++++++++++ tests/vm_debug.c | 9 +++++++++ 3 files changed, 25 insertions(+) diff --git a/include/vm_debug.h b/include/vm_debug.h index 3d76bc3..c109133 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(dblock); extern DEBUG_CMD(disasm); extern DEBUG_CMD(help); extern DEBUG_CMD(jump); diff --git a/src/vm_debug.c b/src/vm_debug.c index 37b16b0..bbcf937 100644 --- a/src/vm_debug.c +++ b/src/vm_debug.c @@ -11,6 +11,7 @@ #include "apple2.h" #include "mos6502.h" +#include "mos6502.dis.h" #include "vm_debug.h" #include "vm_di.h" #include "vm_reflect.h" @@ -34,6 +35,8 @@ static bool breakpoints[BREAKPOINTS_MAX]; vm_debug_cmd cmdtable[] = { { "break", "b", vm_debug_cmd_break, 1, "", "Add breakpoint at ", }, + { "dblock", "db", vm_debug_cmd_dblock, 2, " ", + "Disassemble a block of code", }, { "disasm", "d", vm_debug_cmd_disasm, 0, "", "Toggle disassembly", }, { "help", "h", vm_debug_cmd_help, 0, "", @@ -428,3 +431,15 @@ DEBUG_CMD(disasm) fprintf(stream, "disassembly %s\n", mach->disasm ? "ON" : "OFF"); } + +DEBUG_CMD(dblock) +{ + if (args->addr1 > args->addr2) { + return; + } + + mos6502 *cpu = (mos6502 *)vm_di_get(VM_CPU); + FILE *stream = (FILE *)vm_di_get(VM_OUTPUT); + + mos6502_dis_scan(cpu, stream, args->addr1, args->addr2); +} diff --git a/tests/vm_debug.c b/tests/vm_debug.c index 8f08d81..c39602b 100644 --- a/tests/vm_debug.c +++ b/tests/vm_debug.c @@ -278,3 +278,12 @@ Test(vm_debug, cmd_disassemble) vm_debug_cmd_disasm(&args); cr_assert_eq(mach->disasm, false); } + +Test(vm_debug, cmd_dblock) +{ + mos6502_set(mach->cpu, 0, 0xEA); + args.addr1 = 0; + args.addr2 = 1; + vm_debug_cmd_dblock(&args); + cr_assert_neq(strlen(buf), 0); +}