Support 'set' command
authorKeith Packard <keithp@keithp.com>
Sun, 25 Jan 2009 16:38:48 +0000 (08:38 -0800)
committerKeith Packard <keithp@keithp.com>
Sun, 25 Jan 2009 16:38:48 +0000 (08:38 -0800)
The 'set' command modifies target memory and registers

Signed-off-by: Keith Packard <keithp@keithp.com>
s51/s51-command.c
s51/s51-parse.c

index 63d142f45c3fd51b8e80e7961ac9ffce543f3fcd..034d5dce9f21bef1c19c23303c9a96efeeb0c175 100644 (file)
@@ -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
index 749d7bd8490e873c97ad04e185fb7e23ab0f1b42..aba454859b94394e8711b60d76a2b6fc8dc6c687 100644 (file)
@@ -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" },