]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_mem.c
Merge branch 'master' into timelib
[z180-stamp.git] / avr / cmd_mem.c
index 91668bdf819a2e7bc0c9b4dc9eb9b84833a4242a..0bc57421bdfc95282e9d38df262f3b8d54afad4a 100644 (file)
 #include <stdlib.h>
 #include <ctype.h>
 
-#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] : "<NULL>");
@@ -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 */
-