From ee5dbfef84e6697f027dad9fd4367040204e6a17 Mon Sep 17 00:00:00 2001 From: Leo C Date: Thu, 26 May 2016 11:23:59 +0200 Subject: [PATCH] check for short reads. return 512 0-bytes and no error. --- avr/z180-serv.c | 15 +++++++++++++-- 1 file 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); } } -- 2.39.2