summaryrefslogtreecommitdiff
path: root/avr
diff options
context:
space:
mode:
authorLeo C2016-05-26 11:23:59 +0200
committerLeo C2016-05-26 11:23:59 +0200
commitee5dbfef84e6697f027dad9fd4367040204e6a17 (patch)
tree3d9368be0e685f8d45e07b78e34e98a517e2421d /avr
parent1aed7fd5dc9fb03d459ad7fb096bfc52c80d2cd3 (diff)
downloadz180-stamp-ee5dbfef84e6697f027dad9fd4367040204e6a17.zip
check for short reads. return 512 0-bytes and no error.
Diffstat (limited to 'avr')
-rw-r--r--avr/z180-serv.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/avr/z180-serv.c b/avr/z180-serv.c
index 62e8729..f613510 100644
--- a/avr/z180-serv.c
+++ b/avr/z180-serv.c
@@ -24,7 +24,7 @@
#include "bcd.h"
#include "rtc.h"
-#define DEBUG_CPM_SDIO 0 /* set to 1 to debug */
+#define DEBUG_CPM_SDIO 1 /* set to 1 to debug */
#define debug_cpmsd(fmt, args...) \
debug_cond(DEBUG_CPM_SDIO, fmt, ##args)
@@ -388,6 +388,11 @@ void do_msg_cpm_rw(uint8_t subf, int len, uint8_t * msg)
}
res = f_lseek(&drv_table[drv].fd, pos);
+#if 0
+ if (f_tell(&drv_table[drv].fd) != pos) {
+ return msg_cpm_result(subf, 0x05, res);
+ }
+#endif
while (!res && secs--) {
unsigned int brw;
@@ -407,7 +412,13 @@ void do_msg_cpm_rw(uint8_t subf, int len, uint8_t * msg)
buserr = 1;
break;
} else {
- z80_write_block(disk_buffer, addr, CONFIG_CPM_BLOCK_SIZE);
+ if (brw == 0) {
+ debug_cpmsd(" short read, brw: %d\n", brw);
+ z80_memset(addr, 0, CONFIG_CPM_BLOCK_SIZE);
+ brw = CONFIG_CPM_BLOCK_SIZE;
+ } else {
+ z80_write_block(disk_buffer, addr, CONFIG_CPM_BLOCK_SIZE);
+ }
z80_bus_cmd(Release);
}
}