summaryrefslogtreecommitdiff
path: root/avr/cmd_mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'avr/cmd_mem.c')
-rw-r--r--avr/cmd_mem.c58
1 files changed, 42 insertions, 16 deletions
diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c
index 66ace10..0bc5742 100644
--- a/avr/cmd_mem.c
+++ b/avr/cmd_mem.c
@@ -41,10 +41,10 @@ static uint32_t base_address = 0;
void z180_read_buf(uint8_t *buf, uint32_t addr, uint8_t count)
{
- z80_bus_cmd(Request);
- while (count--)
- *buf++ = z80_read(addr++);
- z80_bus_cmd(Release);
+ if (z80_bus_cmd(Request) & ZST_ACQUIRED) {
+ z80_read_block (buf, addr, count);
+ z80_bus_cmd(Release);
+ }
}
/*--------------------------------------------------------------------------*/
@@ -132,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] == '-')) {
@@ -151,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)
@@ -201,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;
@@ -289,7 +295,11 @@ 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);
@@ -345,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);
@@ -398,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;
@@ -440,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;