#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
/*--------------------------------------------------------------------------*/
-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
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>");
}
/* 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;
* 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] == '-')) {
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)
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;
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;
my_puts_P(PSTR("Zero length?\n"));
return CMD_RET_FAILURE;
}
-
+
if (dest > src) {
src += count - 1;
dest += count - 1;
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);
* 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;
* 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;
return ret; /* not reached */
}
#endif /* CONFIG_CMD_MEMTEST */
-