diff options
Diffstat (limited to 'cctools/s51/s51-parse.c')
| -rw-r--r-- | cctools/s51/s51-parse.c | 241 | 
1 files changed, 0 insertions, 241 deletions
| diff --git a/cctools/s51/s51-parse.c b/cctools/s51/s51-parse.c deleted file mode 100644 index 170c979d..00000000 --- a/cctools/s51/s51-parse.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright © 2008 Keith Packard <keithp@keithp.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -#include "s51.h" - -static struct command_function functions[] = { -	{ "help",   "?",  command_help,	"help",		"Print this list\n" }, -	{ "quit",   "q",  command_quit,	"[q]uit",	"Quit\n" }, -	{ "di",	    "di", command_di,	"di <start> <end>", -		"Dump imem\n" }, -	{ "ds",	    "ds", command_ds,	"ds <start> <end>", -		"Dump sprs\n" }, -	{ "dx",	    "dx", command_dx,	"dx <start> <end>", -		"Dump xaddr\n" }, -	{ "set",    "t",  command_set,	"se[t] mem <prefix> <address> <data> ...", -		"Set mem {xram|rom|iram|sfr}\n" -		"set bit <addr>\n" }, -	{ "dump",   "d",  command_dump,	"[d]ump <prefix> <start> <end>", -		"Dump {xram|rom|iram|sfr} <start> <end>\n" }, -	{ "file", "file", command_file, "file <filename>", -		"Pretend to load executable from <filename>\n" }, -	{ "pc",	    "p",  command_pc, "[p]c [addr]", -		"Get or set pc value\n" }, -	{ "break",  "b",  command_break,"[b]reak <addr>", -		"Set break point\n" }, -	{ "clear",  "c",  command_clear,"[c]lear <addr>", -		"Clear break point\n" }, -	{ "run",    "r",  command_run, "[r]un [start] [stop]", -		"Run with optional start and temp breakpoint addresses\n" }, -	{ "go",     "g",  command_run, "[g]o [start] [stop]", -		"Run with optional start and temp breakpoint addresses\n" }, -	{ "next",   "n",  command_next, "[n]ext", -		"Step over one instruction, past any call\n" }, -	{ "step",   "s",  command_step, "[s]tep", -		"Single step\n" }, -	{ "load",   "l",  command_load, "[l]oad <file>", -		"Load a hex file into memory or flash" }, -	{ "halt",   "h",  command_halt, "[h]alt", -		"Halt the processor\n" }, -	{ "reset","res",command_reset,	"[res]et", -		"Reset the CPU\n" }, -	{ "status","status",command_status, "status", -		"Display CC1111 debug status\n" }, -	{ "info",   "i",  command_info, "[i]info", -		"Get information\n" }, -	{ "stop",  "stop", command_stop, "stop", -		"Ignored\n" }, -	{ NULL, NULL, NULL, NULL, NULL }, -}; - -#ifndef FALSE -#define FALSE 0 -#define TRUE 1 -#endif - -static int -string_to_int(char *s, int *v) -{ -	char *endptr; - -	if (isdigit(s[0]) || s[0] == '-' || s[0] == '+') { -		*v = strtol(s, &endptr, 0); -		if (endptr == s) -			return FALSE; -	} else if (*s == '\'') { -		s++; -		if (*s == '\\') { -			s++; -			switch (*s) { -			case 'n': -				*v = '\n'; -				break; -			case 't': -				*v = '\t'; -				break; -			default: -				*v = (int) *s; -				break; -			} -		} else -			*v = (int) *s; -		s++; -		if (*s != '\'') -			return FALSE; -	} -	else -		return FALSE; -    return TRUE; -} - -struct command_function * -command_string_to_function(struct command_function *functions, char *name) -{ -	int i; -	for (i = 0; functions[i].name; i++) -		if (!strcmp(name, functions[i].name) || -		    !strcmp(name, functions[i].alias)) -			return &functions[i]; -	return NULL; -} - -enum command_result -command_function_help(struct command_function *functions, int argc, char **argv) -{ -	int i; -	struct command_function *func; - -	if (argc == 1) { -		for (i = 0; functions[i].name; i++) -			s51_printf("%-10s%s\n", functions[i].name, -			       functions[i].usage); -	} else { -		for (i = 1; i < argc; i++) { -			func = command_string_to_function(functions, argv[i]); -			if (!func) { -				s51_printf("%-10s unknown command\n", argv[i]); -				return command_syntax; -			} -			s51_printf("%-10s %s\n%s", func->name, -			       func->usage, func->help); -		} -	} -	return command_debug; -} - -static int -command_split_into_words(char *line, char **argv) -{ -	char quotechar; -	int argc; - -	argc = 0; -	while (*line) { -		while (isspace(*line)) -			line++; -		if (!*line) -			break; -		if (*line == '"') { -			quotechar = *line++; -			*argv++ = line; -			argc++; -			while (*line && *line != quotechar) -				line++; -			if (*line) -				*line++ = '\0'; -		} else { -			*argv++ = line; -			argc++; -			while (*line && !isspace(*line)) -				line++; -			if (*line) -				*line++ = '\0'; -		} -	} -	*argv = 0; -	return argc; -} - -enum command_result -command_help(int argc, char **argv) -{ -	return command_function_help(functions, argc, argv); -} - -void -command_syntax_error(int argc, char **argv) -{ -	s51_printf("Syntax error in:"); -	while (*argv) -		s51_printf(" %s", *argv++); -	s51_printf("\n"); -} - -void -command_read (void) -{ -	int argc; -	char line[1024]; -	char *argv[20]; -	enum command_result result; -	struct command_function *func; - -	s51_dbg = ccdbg_open (); -	if (!s51_dbg) { -		perror("ccdbg_open"); -		exit(1); -	} -	ccdbg_debug_mode(s51_dbg); -	ccdbg_halt(s51_dbg); -	s51_printf("Welcome to the non-simulated processor\n"); -	for (;;) { -		if (s51_read_line (line, sizeof line) == 0) -			break; -		s51_interrupted = 0; -		argc = command_split_into_words(line, argv); -		if (argc > 0) { -			func = command_string_to_function(functions, argv[0]); -			if (!func) -				command_syntax_error(argc, argv); -			else -			{ -				result = (*func->func)(argc, argv); -				if (s51_interrupted) -					result = command_interrupt; -				switch (result) { -				case command_syntax: -					command_syntax_error(argc, argv); -					break; -				case command_error: -					s51_printf("Error\n"); -					break; -				case command_success: -					break; -				case command_interrupt: -					ccdbg_halt(s51_dbg); -					s51_printf("Interrupted\n"); -					break; -				default: -					break; -				} -			} -		} -	} -	ccdbg_close(s51_dbg); -	s51_printf("...\n"); -} | 
