X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/32154e5a9e9bf0a52269b3715711b76dc8fcac0f..7af9364ebd7ad6c143f31e9abe745c6d75f8322b:/avr/cmd_mem.c diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c index 9adee72..315cd71 100644 --- a/avr/cmd_mem.c +++ b/avr/cmd_mem.c @@ -14,7 +14,6 @@ */ #include "common.h" -#include #include #include @@ -23,6 +22,7 @@ #include "print-utils.h" #include "con-utils.h" #include "getopt-min.h" +#include "eval_arg.h" #include "timer.h" #include "z80-if.h" #include "debug.h" @@ -85,12 +85,12 @@ command_ret_t do_mem_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ if ((flag & CMD_FLAG_REPEAT) == 0) { /* Address is specified since argc > 1 */ - addr = strtoul(argv[1], NULL, 16); + addr = eval_arg(argv[1], NULL); addr += base_address; /* If another parameter, it is the length to display. */ if (argc > 2) - length = strtoul(argv[2], NULL, 16); + length = eval_arg(argv[2], NULL); } /* Print the lines. */ @@ -136,7 +136,7 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) /* Address is specified since argc > 1 */ - addr = strtoul(argv[1], NULL, 16); + addr = eval_arg(argv[1], NULL); addr += base_address; } @@ -163,7 +163,7 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) } else { char *endp; - data = strtoul(console_buffer, &endp, 16); + data = eval_arg(console_buffer, &endp); nbytes = endp - console_buffer; if (nbytes) { if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { @@ -176,7 +176,7 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) addr++; } } - } while (nbytes); + } while (nbytes > 0); mm_last_addr = addr; return CMD_RET_SUCCESS; @@ -202,7 +202,7 @@ command_ret_t do_mem_mw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ (void) cmdtp; (void) flag; /* reset getopt() */ - optind = 1; + optind = 0; int opt; while ((opt = getopt(argc, argv, PSTR("bwl"))) != -1) { @@ -227,13 +227,13 @@ command_ret_t do_mem_mw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ return CMD_RET_USAGE; /* Address and value are specified since (adjusted) argc >= 2 */ - addr = strtoul(argv[optind++], NULL, 16); + addr = eval_arg(argv[optind++], NULL); addr += base_address; - writeval = strtoul(argv[optind++], NULL, 16); + writeval = eval_arg(argv[optind++], NULL); /* Count ? */ if (argc == 3) - count = strtoul(argv[optind], NULL, 16); + count = eval_arg(argv[optind], NULL); if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { my_puts_P(PSTR("Bus timeout\n")); @@ -262,18 +262,27 @@ command_ret_t do_mem_mdc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const ar (void) cmdtp; (void) flag; - if (argc < 4) + optind = 0; + if (argv[0][1] != 'd') { + int opt; + while ((opt = getopt(argc, argv, PSTR("bwl"))) != -1) + if (opt == '?') + return CMD_RET_USAGE; + --optind; + } + + if (argc-optind != 4) return CMD_RET_USAGE; - count = strtoul(argv[3], NULL, 10); + count = eval_arg(argv[optind + 3], NULL); clear_ctrlc(); /* forget any previous Control C */ for (;;) { if (argv[0][1] == 'd') - do_mem_md (NULL, 0, 3, argv); + do_mem_md (NULL, 0, argc-1, argv); /* memory display */ else - do_mem_mw (NULL, 0, 3, argv); + do_mem_mw (NULL, 0, argc-1, argv); /* memory write */ /* delay for ms... */ @@ -304,11 +313,11 @@ command_ret_t do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv return CMD_RET_USAGE; - addr1 = strtoul(argv[1], NULL, 16); + addr1 = eval_arg(argv[1], NULL); addr1 += base_address; - addr2 = strtoul(argv[2], NULL, 16); + addr2 = eval_arg(argv[2], NULL); addr2 += base_address; - count = strtoul(argv[3], NULL, 16); + count = eval_arg(argv[3], NULL); for (ngood = 0; ngood < count; ++ngood) { if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { @@ -351,11 +360,11 @@ command_ret_t do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ if (argc != 4) return CMD_RET_USAGE; - src = strtoul(argv[1], NULL, 16); + src = eval_arg(argv[1], NULL); src += base_address; - dest = strtoul(argv[2], NULL, 16); + dest = eval_arg(argv[2], NULL); dest += base_address; - count = strtoul(argv[3], NULL, 16); + count = eval_arg(argv[3], NULL); if (count == 0) { my_puts_P(PSTR("Zero length?\n")); @@ -398,7 +407,7 @@ command_ret_t do_mem_base(cmd_tbl_t *cmdtp, int flag, int argc, if (argc > 1) { /* Set new base address. */ - base_address = strtoul(argv[1], NULL, 16); + base_address = eval_arg(argv[1], NULL); } /* Print the current base address. */ printf_P(PSTR("Base Address: 0x%05lx\n"), base_address); @@ -417,10 +426,10 @@ command_ret_t do_mem_loop(cmd_tbl_t *cmdtp, int flag, int argc, return CMD_RET_USAGE; /* Address is always specified. */ - addr = strtoul(argv[1], NULL, 16); + addr = eval_arg(argv[1], NULL); /* Length is the number of bytes. */ - length = strtoul(argv[2], NULL, 16); + length = eval_arg(argv[2], NULL); /* We want to optimize the loops to run as fast as possible. @@ -463,12 +472,12 @@ command_ret_t do_mem_loopw (cmd_tbl_t *cmdtp, int flag, int argc, char * const a return CMD_RET_USAGE; /* Address is always specified. */ - addr = strtoul(argv[1], NULL, 16); + addr = eval_arg(argv[1], NULL); /* Length is the number of bytes. */ - length = strtoul(argv[2], NULL, 16); + length = eval_arg(argv[2], NULL); - data = strtoul(argv[3], NULL, 16); + data = eval_arg(argv[3], NULL); /* * We want to optimize the loops to run as fast as possible. @@ -739,15 +748,15 @@ command_ret_t do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, (void) flag; if (argc > 1) - start = strtoul(argv[1], NULL, 16); + start = eval_arg(argv[1], NULL); if (argc > 2) - end = strtoul(argv[2], NULL, 16); + end = eval_arg(argv[2], NULL); else end = CONFIG_SYS_RAMSIZE_MAX - 1; if (argc > 3) - iteration_limit = (unsigned int) strtoul(argv[3], NULL, 16); + iteration_limit = (unsigned int) eval_arg(argv[3], NULL); printf_P(PSTR("Testing %05lx ... %05lx:\n"), start, end); // debug("## %s:%d: start %#05lx end %#05lx\n", __func__, __LINE__, start, end);