summaryrefslogtreecommitdiff
path: root/avr
diff options
context:
space:
mode:
authorLeo C2016-05-23 11:23:12 +0200
committerLeo C2016-05-23 11:23:12 +0200
commit32154e5a9e9bf0a52269b3715711b76dc8fcac0f (patch)
tree02ed6bd2146ef77f8193e78f29ec97354c31350b /avr
parent79082813de096a57d76fa5b7757183b8a23a95b2 (diff)
downloadz180-stamp-32154e5a9e9bf0a52269b3715711b76dc8fcac0f.zip
mw command: add word and longword options
Diffstat (limited to 'avr')
-rw-r--r--avr/cmd_mem.c61
-rw-r--r--avr/command_tbl.c11
2 files changed, 50 insertions, 22 deletions
diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c
index a725c61..9adee72 100644
--- a/avr/cmd_mem.c
+++ b/avr/cmd_mem.c
@@ -22,6 +22,7 @@
#include "cli_readline.h"
#include "print-utils.h"
#include "con-utils.h"
+#include "getopt-min.h"
#include "timer.h"
#include "z80-if.h"
#include "debug.h"
@@ -193,36 +194,60 @@ command_ret_t do_mem_nm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
command_ret_t do_mem_mw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- uint8_t writeval;
- uint32_t addr, count;
+ uint32_t writeval;
+ uint32_t addr;
+ uint32_t count = 1;
+ uint_fast8_t width = 1;
- (void) cmdtp;
- (void) flag;
+ (void) cmdtp; (void) flag;
- if ((argc < 3) || (argc > 4))
+ /* reset getopt() */
+ optind = 1;
+
+ int opt;
+ while ((opt = getopt(argc, argv, PSTR("bwl"))) != -1) {
+ switch (opt) {
+ case 'b':
+ width = 1;
+ break;
+ case 'w':
+ width = 2;
+ break;
+ case 'l':
+ width = 4;
+ break;
+ default: /* '?' */
+ return CMD_RET_USAGE;
+ }
+ }
+
+ /* remaining arguments */
+ argc -= optind;
+ if ((argc < 2) || (argc > 3))
return CMD_RET_USAGE;
- /* Address is specified since argc > 1
- */
- addr = strtoul(argv[1], NULL, 16);
+ /* Address and value are specified since (adjusted) argc >= 2 */
+ addr = strtoul(argv[optind++], NULL, 16);
addr += base_address;
-
- /* Get the value to write.
- */
- writeval = (uint8_t) strtoul(argv[2], NULL, 16);
+ writeval = strtoul(argv[optind++], NULL, 16);
/* Count ? */
- if (argc == 4) {
- count = strtoul(argv[3], NULL, 16);
- } else {
- count = 1;
- }
+ if (argc == 3)
+ count = strtoul(argv[optind], NULL, 16);
if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) {
my_puts_P(PSTR("Bus timeout\n"));
return CMD_RET_FAILURE;
}
- z80_memset(addr, writeval, count);
+
+ if (width == 1)
+ z80_memset(addr, writeval, count);
+ else {
+ while (count--) {
+ z80_write_block((const uint8_t *) &writeval, addr, width);
+ addr += width;
+ }
+ }
z80_bus_cmd(Release);
return CMD_RET_SUCCESS;
diff --git a/avr/command_tbl.c b/avr/command_tbl.c
index 1731b83..2c91355 100644
--- a/avr/command_tbl.c
+++ b/avr/command_tbl.c
@@ -98,8 +98,8 @@ CMD_TBL_ITEM(
echo, CONFIG_SYS_MAXARGS, 1, do_echo,
"display a line of text",
"[-n] [argument ...]\n"
- " - echo the argument(s) to console.\n"
- " -n do not output the trailing newline"
+ "- echo the argument(s) to console.\n"
+ " -n do not output the trailing newline"
),
CMD_TBL_ITEM(
sleep , 2, 1, do_sleep,
@@ -249,9 +249,12 @@ CMD_TBL_ITEM(
"address"
),
CMD_TBL_ITEM(
- mw, 4, 1, do_mem_mw,
+ mw, CONFIG_SYS_MAXARGS, 1, do_mem_mw,
"memory write (fill)",
- "address value [count]"
+ "[-bwl] address value [count]\n"
+ " -b write value as byte (8 bit, default)\n"
+ " -w write value as word (16 bit)\n"
+ " -l write value as long (32 bit)\n"
),
CMD_TBL_ITEM(
cp, 4, 1, do_mem_cp,