+ } else if(stracmp(argv[0], 3, (char* []){"?", "h", "help"})) {
+ fprintf(stdout, "breakpoint manipulate:\n");
+ fprintf(stdout, " b[reak] a[dd] <address>\n");
+ fprintf(stdout, " b[reak] d[el] <address>\n");
+ fprintf(stdout, " b[reak] l[ist]\n");
+ fprintf(stdout, " b[reak] r[eset]\n");
+ } else {
+ fprintf(stderr, "%s: Not breakpoint manipulate command. see `b ?'.\n", argv[0]);
+ }
+ }
+}
+
+bool debuggercmd(char *cmd, DBARGS *args)
+{
+ bool next = false;
+ if(stracmp(cmd, 2, (char* []){"s", "step"})) {
+ execmode.step = true;
+ next = true;
+ } else if(stracmp(cmd, 2, (char* []){"b", "break"})) {
+ db_break(args->argc, args->argv);
+ } else if(stracmp(cmd, 2, (char* []){"c", "continue"})) {
+ execmode.step = false;
+ next = true;
+ } else if(stracmp(cmd, 2, (char* []){"t", "trace"})) {
+ if(args->argc > 0 && stracmp(args->argv[0], 2, (char* []){"a", "auto"})) {
+ execmode.logical = false;
+ execmode.trace = true;
+ } else if(args->argc > 0 && stracmp(args->argv[0], 2, (char* []){"no", "noauto"})) {
+ execmode.trace = false;
+ } else {
+ fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr);
+ dspregister();
+ }
+ } else if(stracmp(cmd, 2, (char* []){"T", "tracelogical"})) {
+ if(args->argc > 0 && stracmp(args->argv[0], 2, (char* []){"a", "auto"})) {
+ execmode.logical = true;
+ execmode.trace = true;
+ } else if(args->argc > 0 && stracmp(args->argv[0], 2, (char* []){"no", "noauto"})) {
+ execmode.trace = false;
+ } else {
+ fprintf(stdout, "#%04X: Register::::\n", sys->cpu->pr);
+ dspregister();
+ }
+ } else if(stracmp(cmd, 2, (char* []){"d", "dump"})) {
+ if(args->argc > 0 && stracmp(args->argv[0], 2, (char* []){"a", "auto"})) {
+ execmode.dump = true;
+ } else if(args->argc > 0 && stracmp(args->argv[0], 2, (char* []){"no", "noauto"})) {
+ execmode.dump = false;
+ } else {
+ dumpmemory();