From 3cc8d11eb8d5d0b42141dd84a58d461287f59e3a Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 25 Jan 2009 08:38:48 -0800 Subject: [PATCH] Support 'set' command The 'set' command modifies target memory and registers Signed-off-by: Keith Packard --- s51/s51-command.c | 30 +++++++++++++++++++++++++++++- s51/s51-parse.c | 4 ++-- 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 ", "Dump xaddr\n" }, - { "set", "t", command_set, "se[t] mem ", - "Set mem {xram|rom|iram|sfr} \n" + { "set", "t", command_set, "se[t] mem
...", + "Set mem {xram|rom|iram|sfr}\n" "set bit \n" }, { "dump", "d", command_dump, "[d]ump ", "Dump {xram|rom|iram|sfr} \n" }, -- 2.30.2