X-Git-Url: http://cloudbase.mooo.com/gitweb/z180-stamp.git/blobdiff_plain/69988dc1f60ce27d2192eb2aa579962f585fffc8..d332e3337306d5f8b5c810048bbd145391c33f29:/avr/cmd_mem.c diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c index 91668bd..0bc5742 100644 --- a/avr/cmd_mem.c +++ b/avr/cmd_mem.c @@ -15,16 +15,13 @@ #include #include -#include "config.h" -#include "debug.h" #include "command.h" #include "cli_readline.h" +#include "print-utils.h" #include "con-utils.h" #include "z80-if.h" +//#include "debug.h" -/* - * TODO: printf() --> printf_P() - */ #ifndef CONFIG_SYS_MEMTEST_SCRATCH #define CONFIG_SYS_MEMTEST_SCRATCH 0 @@ -41,72 +38,15 @@ static uint32_t base_address = 0; /*--------------------------------------------------------------------------*/ -static void print_blanks(uint_fast8_t count) -{ - while(count--) - putchar(' '); -} -int z180_dump_mem(uint32_t startaddr, uint32_t len, const char *title) +void z180_read_buf(uint8_t *buf, uint32_t addr, uint8_t count) { - uint8_t buf[16]; - uint8_t llen = 16; - uint8_t pre = startaddr % 16; - uint32_t addr = startaddr & ~0x0f; - len += pre; - uint8_t i; - - if (title && *title) - printf_P(PSTR("%s\n"),title); - - while (len) { - if (len < 16) - llen = len; - - z80_bus_cmd(Request); - for (i = pre; i < llen; i++) - buf[i] = z80_read(addr + i); - z80_bus_cmd(Release); - - printf_P(PSTR("%.5lx:"), addr); -#if 0 - print_blanks(3 * pre); - - /* Print hex values */ - for (i = pre; i < llen; i++) - printf_P(PSTR(" %.2x"), buf[i]); -#else - for (i = 0; i < llen; i++) { - if ((i % 8) == 0) - putchar(' '); - if (i < pre) - printf_P(PSTR(".. ")); - else - printf_P(PSTR("%.2x "), buf[i]); + if (z80_bus_cmd(Request) & ZST_ACQUIRED) { + z80_read_block (buf, addr, count); + z80_bus_cmd(Release); } -#endif - /* fill line with whitespace for nice ASCII print */ -#if 1 - print_blanks(3 * (16u - i) + (16u-i)/8 + 1 + pre); -#else - -#endif - /* Print data in ASCII characters */ - for (i = pre; i < llen; i++) - printf_P(PSTR("%c"), isprint(buf[i]) ? buf[i] : '.'); - putchar('\n'); - - pre = 0; - addr += 16; - len -= llen; - - if (ctrlc()) - return -1; - } - return 0; } - /*--------------------------------------------------------------------------*/ /* Memory Display @@ -117,10 +57,10 @@ int z180_dump_mem(uint32_t startaddr, uint32_t len, const char *title) command_ret_t do_mem_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t addr, length; - + (void) cmdtp; -#if 0 +#if 0 printf_P(PSTR("flag: %d, argc: %d"), flag, argc); for (int i = 0; i < argc; i++) { printf_P(PSTR(", argv[%d]: %s"), i, argv[i] ? argv[i] : ""); @@ -148,7 +88,7 @@ command_ret_t do_mem_md(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ } /* Print the lines. */ - z180_dump_mem(addr, length, NULL); + dump_mem(addr, addr, length, z180_read_buf, NULL); dp_last_addr = addr + length; dp_last_length = length; @@ -192,10 +132,13 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) * the next value. A non-converted value exits. */ do { - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } data = z80_read(addr); - printf_P(PSTR("%05lx: %02x"), addr, data); z80_bus_cmd(Release); + printf_P(PSTR("%05lx: %02x"), addr, data); nbytes = cli_readline(PSTR(" ? ")); if (nbytes == 0 || (nbytes == 1 && console_buffer[0] == '-')) { @@ -211,7 +154,10 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[]) data = strtoul(console_buffer, &endp, 16); nbytes = endp - console_buffer; if (nbytes) { - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } z80_write(addr, data); z80_bus_cmd(Release); if (incrflag) @@ -261,11 +207,11 @@ command_ret_t do_mem_mw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ count = 1; } - z80_bus_cmd(Request); - while (count-- > 0) { - z80_write(addr, writeval); - ++addr; + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; } + z80_memset(addr, writeval, count); z80_bus_cmd(Release); return CMD_RET_SUCCESS; @@ -349,13 +295,17 @@ command_ret_t 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) { - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + rcode = CMD_RET_FAILURE; + break; + } byte1 = z80_read(addr1); byte2 = z80_read(addr2); z80_bus_cmd(Release); if (byte1 != byte2) { - printf( "byte at 0x%05lx (%#02x) != " - "byte at 0x%05lx (%#02x)\n", + printf_P(PSTR("byte at 0x%05lx (%#02x) != " + "byte at 0x%05lx (%#02x)\n"), addr1, byte1, addr2, byte2); rcode = CMD_RET_FAILURE; break; @@ -395,7 +345,7 @@ command_ret_t do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ my_puts_P(PSTR("Zero length?\n")); return CMD_RET_FAILURE; } - + if (dest > src) { src += count - 1; dest += count - 1; @@ -405,7 +355,10 @@ command_ret_t do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ while (count-- > 0) { uint8_t data; - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } data = z80_read(src); z80_write(dest, data); z80_bus_cmd(Release); @@ -458,13 +411,19 @@ command_ret_t do_mem_loop(cmd_tbl_t *cmdtp, int flag, int argc, * If we have only one object, just run infinite loops. */ if (length == 1) { - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } for (;;) z80_read(addr); z80_bus_cmd(Release); } - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } for (;;) { uint32_t i = length; uint32_t p = addr; @@ -500,11 +459,18 @@ command_ret_t do_mem_loopw (cmd_tbl_t *cmdtp, int flag, int argc, char * const a * If we have only one object, just run infinite loops. */ if (length == 1) { - z80_bus_cmd(Request); + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } for (;;) z80_write(addr, data); } + if (!(z80_bus_cmd(Request) & ZST_ACQUIRED)) { + my_puts_P(PSTR("Bus timeout\n")); + return CMD_RET_FAILURE; + } for (;;) { uint32_t i = length; uint32_t p = addr; @@ -875,4 +841,3 @@ command_ret_t do_mem_mtest(cmd_tbl_t *cmdtp, int flag, int argc, return ret; /* not reached */ } #endif /* CONFIG_CMD_MEMTEST */ -