mirror of
https://github.com/pevans/erc-c.git
synced 2024-11-27 20:51:17 +00:00
Add unbreak command, unbreak_all() function for testing
This commit is contained in:
parent
c17616c383
commit
01f230dc85
@ -72,13 +72,17 @@ extern vm_debug_cmd *vm_debug_find_cmd(const char *);
|
||||
extern void vm_debug_break(int);
|
||||
extern void vm_debug_execute(const char *);
|
||||
extern void vm_debug_quit();
|
||||
extern void vm_debug_unbreak(int);
|
||||
extern void vm_debug_unbreak_all();
|
||||
|
||||
extern DEBUG_CMD(break);
|
||||
extern DEBUG_CMD(help);
|
||||
extern DEBUG_CMD(jump);
|
||||
extern DEBUG_CMD(printaddr);
|
||||
extern DEBUG_CMD(printstate);
|
||||
extern DEBUG_CMD(quit);
|
||||
extern DEBUG_CMD(resume);
|
||||
extern DEBUG_CMD(unbreak);
|
||||
extern DEBUG_CMD(writeaddr);
|
||||
extern DEBUG_CMD(writestate);
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <strings.h>
|
||||
@ -20,12 +21,14 @@
|
||||
|
||||
/*
|
||||
* A table of breakpoints, arranged by address in a CPU. If
|
||||
* breakpoints[i] is zero, then there is no breakpoint. If it is
|
||||
* non-zero, then there is a breakpoint at address i.
|
||||
* breakpoints[i] is false, then there is no breakpoint. If it is
|
||||
* true, then there is a breakpoint at address i.
|
||||
*/
|
||||
static int breakpoints[BREAKPOINTS_MAX];
|
||||
static bool breakpoints[BREAKPOINTS_MAX];
|
||||
|
||||
vm_debug_cmd cmdtable[] = {
|
||||
{ "break", "b", vm_debug_cmd_break, 1, "<addr>",
|
||||
"Add breakpoint at <addr>", },
|
||||
{ "help", "h", vm_debug_cmd_help, 0, "",
|
||||
"Print out this list of commands", },
|
||||
{ "jump", "j", vm_debug_cmd_jump, 1, "<addr>",
|
||||
@ -38,6 +41,8 @@ vm_debug_cmd cmdtable[] = {
|
||||
"Quit the emulator", },
|
||||
{ "resume", "r", vm_debug_cmd_resume, 0, "",
|
||||
"Resume execution", },
|
||||
{ "unbreak", "u", vm_debug_cmd_unbreak, 1, "<addr>",
|
||||
"Remove breakpoint at <addr>", },
|
||||
{ "writeaddr", "wa", vm_debug_cmd_writeaddr, 2, "<addr> <byte>",
|
||||
"Write <byte> at <addr>", },
|
||||
{ "writestate", "ws", vm_debug_cmd_writestate, 2, "<reg> <byte>",
|
||||
@ -90,7 +95,17 @@ vm_debug_break(int addr)
|
||||
return;
|
||||
}
|
||||
|
||||
breakpoints[addr] = 1;
|
||||
breakpoints[addr] = true;
|
||||
}
|
||||
|
||||
void
|
||||
vm_debug_unbreak(int addr)
|
||||
{
|
||||
if (addr < 0 || addr >= BREAKPOINTS_MAX) {
|
||||
return;
|
||||
}
|
||||
|
||||
breakpoints[addr] = false;
|
||||
}
|
||||
|
||||
bool
|
||||
@ -100,7 +115,13 @@ vm_debug_broke(int addr)
|
||||
return false;
|
||||
}
|
||||
|
||||
return breakpoints[addr] != 0;
|
||||
return breakpoints[addr];
|
||||
}
|
||||
|
||||
void
|
||||
vm_debug_unbreak_all()
|
||||
{
|
||||
memset(breakpoints, false, BREAKPOINTS_MAX);
|
||||
}
|
||||
|
||||
char *
|
||||
@ -215,6 +236,11 @@ vm_debug_find_cmd(const char *str)
|
||||
sizeof(vm_debug_cmd), cmd_compar);
|
||||
}
|
||||
|
||||
DEBUG_CMD(break)
|
||||
{
|
||||
vm_debug_break(args->addr1);
|
||||
}
|
||||
|
||||
DEBUG_CMD(help)
|
||||
{
|
||||
FILE *stream = (FILE *)vm_di_get(VM_OUTPUT);
|
||||
@ -280,3 +306,8 @@ DEBUG_CMD(quit)
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
DEBUG_CMD(unbreak)
|
||||
{
|
||||
vm_debug_unbreak(args->addr1);
|
||||
}
|
||||
|
@ -49,6 +49,8 @@ teardown()
|
||||
fclose(stream);
|
||||
|
||||
apple2_free(mach);
|
||||
|
||||
vm_debug_unbreak_all();
|
||||
}
|
||||
|
||||
TestSuite(vm_debug, .init = setup, .fini = teardown);
|
||||
@ -177,4 +179,37 @@ Test(vm_debug, broke)
|
||||
cr_assert_eq(vm_debug_broke(0x23), true);
|
||||
}
|
||||
|
||||
Test(vm_debug, unbreak)
|
||||
{
|
||||
vm_debug_break(0x23);
|
||||
|
||||
cr_assert_eq(vm_debug_broke(0x23), true);
|
||||
vm_debug_unbreak(0x23);
|
||||
cr_assert_eq(vm_debug_broke(0x23), false);
|
||||
}
|
||||
|
||||
Test(vm_debug, cmd_break)
|
||||
{
|
||||
args.addr1 = 123;
|
||||
vm_debug_cmd_break(&args);
|
||||
|
||||
cr_assert_eq(vm_debug_broke(123), true);
|
||||
}
|
||||
|
||||
Test(vm_debug, cmd_unbreak)
|
||||
{
|
||||
args.addr1 = 123;
|
||||
vm_debug_cmd_break(&args);
|
||||
cr_assert_eq(vm_debug_broke(123), true);
|
||||
vm_debug_cmd_unbreak(&args);
|
||||
cr_assert_eq(vm_debug_broke(123), false);
|
||||
}
|
||||
|
||||
Test(vm_debug, unbreak_all)
|
||||
{
|
||||
vm_debug_break(55555);
|
||||
vm_debug_unbreak_all();
|
||||
cr_assert_eq(vm_debug_broke(55555), false);
|
||||
}
|
||||
|
||||
/* Test(vm_debug, quit) */
|
||||
|
Loading…
Reference in New Issue
Block a user