X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/f338df2abc35f85961aa6266458f94ea2a102b81..d0581f881c4072ef0ac453167a98dc3bc0d87d86:/avr/cmd_mem.c diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c index 49a46f6..6341e0b 100644 --- a/avr/cmd_mem.c +++ b/avr/cmd_mem.c @@ -30,8 +30,6 @@ #define CONFIG_SYS_MEMTEST_SCRATCH 0 #endif -static int mod_mem(cmd_tbl_t *, int, int, int, char * const []); - /* Display values from last command. * Memory modify remembered values are different from display memory. */ @@ -65,10 +63,10 @@ int z180_dump_mem(uint32_t startaddr, uint32_t len, const char *title) if (len < 16) llen = len; - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); for (i = pre; i < llen; i++) buf[i] = z80_read(addr + i); - z80_release_bus_save(state); + z80_bus_cmd(Release); printf_P(PSTR("%.5lx:"), addr); #if 0 @@ -116,7 +114,7 @@ int z180_dump_mem(uint32_t startaddr, uint32_t len, const char *title) * Syntax: * md {addr} {len} */ -int do_mem_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t addr, length; @@ -154,19 +152,89 @@ int do_mem_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) dp_last_addr = addr + length; dp_last_length = length; - return 0; + return CMD_RET_SUCCESS; } -int do_mem_mm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +/* Modify memory. + * + * Syntax: + * mm {addr} + * nm {addr} + */ +static command_ret_t +mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) +{ + uint32_t addr; + uint8_t data; + int nbytes; + + (void) cmdtp; + + if (argc != 2) + return CMD_RET_USAGE; + + /* We use the last specified parameters, unless new ones are + * entered. + */ + addr = mm_last_addr; + + if ((flag & CMD_FLAG_REPEAT) == 0) { + /* New command specified. + */ + + /* Address is specified since argc > 1 + */ + addr = strtoul(argv[1], NULL, 16); + addr += base_address; + } + + /* Print the address, followed by value. Then accept input for + * the next value. A non-converted value exits. + */ + do { + z80_bus_cmd(Request); + data = z80_read(addr); + printf("%05lx: %02x", addr, data); + z80_bus_cmd(Release); + + nbytes = cli_readline(PSTR(" ? ")); + if (nbytes == 0 || (nbytes == 1 && console_buffer[0] == '-')) { + /* pressed as only input, don't modify current + * location and move to next. "-" pressed will go back. + */ + if (incrflag) + addr += nbytes ? -1 : 1; + nbytes = 1; + } + else { + char *endp; + data = strtoul(console_buffer, &endp, 16); + nbytes = endp - console_buffer; + if (nbytes) { + z80_bus_cmd(Request); + z80_write(addr, data); + z80_bus_cmd(Release); + if (incrflag) + addr++; + } + } + } while (nbytes); + + mm_last_addr = addr; + return CMD_RET_SUCCESS; +} + + +command_ret_t do_mem_mm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { return mod_mem (cmdtp, 1, flag, argc, argv); } -int do_mem_nm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_nm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { return mod_mem (cmdtp, 0, flag, argc, argv); } -int do_mem_mw(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; @@ -193,18 +261,18 @@ int do_mem_mw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) count = 1; } - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); while (count-- > 0) { z80_write(addr, writeval); ++addr; } - z80_release_bus_save(state); + z80_bus_cmd(Release); - return 0; + return CMD_RET_SUCCESS; } #ifdef CONFIG_MX_CYCLIC -int do_mem_mdc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_mdc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int i; uint32_t count; @@ -225,14 +293,14 @@ int do_mem_mdc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* check for ctrl-c to abort... */ if (ctrlc()) { my_puts("Abort\n"); - return 0; + return CMD_RET_SUCCESS; } } - return 0; + return CMD_RET_SUCCESS; } -int do_mem_mwc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_mwc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int i; uint32_t count; @@ -253,18 +321,18 @@ int do_mem_mwc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* check for ctrl-c to abort... */ if (ctrlc()) { my_puts("Abort\n"); - return 0; + return CMD_RET_SUCCESS; } } - return 0; + return CMD_RET_SUCCESS; } #endif /* CONFIG_MX_CYCLIC */ -int do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t addr1, addr2, count, ngood; - int rcode = 0; + command_ret_t rcode = CMD_RET_SUCCESS; uint8_t byte1, byte2; (void) cmdtp; @@ -281,15 +349,15 @@ int do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) count = strtoul(argv[3], NULL, 16); for (ngood = 0; ngood < count; ++ngood) { - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); byte1 = z80_read(addr1); byte2 = z80_read(addr2); - z80_release_bus_save(state); + z80_bus_cmd(Release); if (byte1 != byte2) { printf( "byte at 0x%05lx (%#02x) != " "byte at 0x%05lx (%#02x)\n", addr1, byte1, addr2, byte2); - rcode = 1; + rcode = CMD_RET_FAILURE; break; } addr1++; @@ -298,7 +366,7 @@ int do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) /* check for ctrl-c to abort... */ if (ctrlc()) { my_puts("Abort\n"); - return 0; + return CMD_RET_SUCCESS; } } @@ -306,7 +374,7 @@ int do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return rcode; } -int do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t src, dest, count; int_fast8_t step; @@ -325,7 +393,7 @@ int do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (count == 0) { my_puts ("Zero length ???\n"); - return 1; + return CMD_RET_FAILURE; } if (dest > src) { @@ -337,23 +405,23 @@ int do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) while (count-- > 0) { uint8_t data; - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); data = z80_read(src); z80_write(dest, data); - z80_release_bus_save(state); + z80_bus_cmd(Release); src += step; dest += step; /* check for ctrl-c to abort... */ if (ctrlc()) { my_puts("Abort\n"); - return 0; + return CMD_RET_SUCCESS; } } - return 0; + return CMD_RET_SUCCESS; } -int do_mem_base(cmd_tbl_t *cmdtp, int flag, int argc, +command_ret_t do_mem_base(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { (void) cmdtp; @@ -365,10 +433,10 @@ int do_mem_base(cmd_tbl_t *cmdtp, int flag, int argc, } /* Print the current base address. */ printf("Base Address: 0x%05lx\n", base_address); - return 0; + return CMD_RET_SUCCESS; } -int do_mem_loop(cmd_tbl_t *cmdtp, int flag, int argc, +command_ret_t do_mem_loop(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t addr, length; @@ -390,26 +458,26 @@ int do_mem_loop(cmd_tbl_t *cmdtp, int flag, int argc, * If we have only one object, just run infinite loops. */ if (length == 1) { - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); for (;;) z80_read(addr); - z80_release_bus_save(state); + z80_bus_cmd(Release); } - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); for (;;) { uint32_t i = length; uint32_t p = addr; while (i-- > 0) z80_read(p++); } - z80_release_bus_save(state); + z80_bus_cmd(Release); - return 0; + return CMD_RET_SUCCESS; } #ifdef CONFIG_LOOPW -int do_mem_loopw (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +command_ret_t do_mem_loopw (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t addr, length; uint8_t data; @@ -432,7 +500,7 @@ int do_mem_loopw (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) * If we have only one object, just run infinite loops. */ if (length == 1) { - zstate_t state = z80_request_bus_save(); + z80_bus_cmd(Request); for (;;) z80_write(addr, data); } @@ -730,12 +798,13 @@ static uint32_t mem_test_quick(vu_long *buf, uint32_t start_addr, uint32_t end_a * configured using CONFIG_SYS_ALT_MEMTEST. The complete test loops until * interrupted by ctrl-c or by a failure of one of the sub-tests. */ -int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, +command_ret_t do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t start, end; vu_long *buf, *dummy; int iteration_limit; +/* TODO: command_ret_t */ int ret; uint32_t errs = 0; /* number of errors, or -1 if interrupted */ uint32_t pattern; @@ -807,72 +876,3 @@ int do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, } #endif /* CONFIG_CMD_MEMTEST */ -/* Modify memory. - * - * Syntax: - * mm {addr} - * nm {addr} - */ -static int -mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) -{ - uint32_t addr; - uint8_t data; - int nbytes; - - (void) cmdtp; - - if (argc != 2) - return CMD_RET_USAGE; - - /* We use the last specified parameters, unless new ones are - * entered. - */ - addr = mm_last_addr; - - if ((flag & CMD_FLAG_REPEAT) == 0) { - /* New command specified. - */ - - /* Address is specified since argc > 1 - */ - addr = strtoul(argv[1], NULL, 16); - addr += base_address; - } - - /* Print the address, followed by value. Then accept input for - * the next value. A non-converted value exits. - */ - do { - zstate_t state = z80_request_bus_save(); - data = z80_read(addr); - printf("%05lx: %02x", addr, data); - z80_release_bus_save(state); - - nbytes = cli_readline(PSTR(" ? ")); - if (nbytes == 0 || (nbytes == 1 && console_buffer[0] == '-')) { - /* pressed as only input, don't modify current - * location and move to next. "-" pressed will go back. - */ - if (incrflag) - addr += nbytes ? -1 : 1; - nbytes = 1; - } - else { - char *endp; - data = strtoul(console_buffer, &endp, 16); - nbytes = endp - console_buffer; - if (nbytes) { - zstate_t state = z80_request_bus_save(); - z80_write(addr, data); - z80_release_bus_save(state); - if (incrflag) - addr++; - } - } - } while (nbytes); - - mm_last_addr = addr; - return 0; -} -