summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-01-25 08:38:48 -0800
committerKeith Packard <keithp@keithp.com>2009-01-25 08:38:48 -0800
commit3cc8d11eb8d5d0b42141dd84a58d461287f59e3a (patch)
tree11702b387bff81165f4f4f5832a627414a48fdf3
parent60940b4be23962db79b8e914ec943d0636dd68ad (diff)
Support 'set' command
The 'set' command modifies target memory and registers Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--s51/s51-command.c30
-rw-r--r--s51/s51-parse.c4
2 files changed, 31 insertions, 3 deletions
diff --git a/s51/s51-command.c b/s51/s51-command.c
index 63d142f4..034d5dce 100644
--- a/s51/s51-command.c
+++ b/s51/s51-command.c
@@ -152,7 +152,35 @@ command_dx (int argc, char **argv)
enum command_result
command_set (int argc, char **argv)
{
- return command_error;
+ uint16_t address;
+ uint8_t *data;
+ int len = argc - 3;
+ int i;
+ enum command_result ret = command_success;
+
+ if (len < 0)
+ return command_error;
+ if (parse_uint16(argv[2], &address) != command_success)
+ return command_error;
+ if (len == 0)
+ return command_success;
+ data = malloc(len);
+ if (!data)
+ return command_error;
+ for (i = 0; i < len; i++)
+ if (parse_uint8(argv[i+3], &data[i]) != command_success)
+ return command_error;
+
+ if (strcmp(argv[1], "xram") == 0) {
+ ccdbg_write_memory(s51_dbg, address, data, len);
+ } else if (strcmp(argv[1], "iram") == 0) {
+ ccdbg_write_memory(s51_dbg, address + 0xff00, data, len);
+ } else if (strcmp(argv[1], "sfr") == 0) {
+ ccdbg_write_sfr(s51_dbg, (uint8_t) address, data, len);
+ } else
+ ret = command_error;
+ free(data);
+ return ret;
}
enum command_result
diff --git a/s51/s51-parse.c b/s51/s51-parse.c
index 749d7bd8..aba45485 100644
--- a/s51/s51-parse.c
+++ b/s51/s51-parse.c
@@ -27,8 +27,8 @@ static struct command_function functions[] = {
"Dump sprs\n" },
{ "dx", "dx", command_dx, "dx <start> <end>",
"Dump xaddr\n" },
- { "set", "t", command_set, "se[t] mem <prefix> <start> <end>",
- "Set mem {xram|rom|iram|sfr} <start> <end>\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" },