]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
check for short reads. return 512 0-bytes and no error.
authorLeo C <erbl259-lmu@yahoo.de>
Thu, 26 May 2016 09:23:59 +0000 (11:23 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Thu, 26 May 2016 09:23:59 +0000 (11:23 +0200)
avr/z180-serv.c

index 62e8729e2dd24d25e454cb1936c3b8dfcc8fd6ce..f61351094b1d4f2150b72efeff500a3deda59af5 100644 (file)
@@ -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);
                                }
                        }