diff options
author | Leo C | 2016-05-26 11:23:59 +0200 |
---|---|---|
committer | Leo C | 2016-05-26 11:23:59 +0200 |
commit | ee5dbfef84e6697f027dad9fd4367040204e6a17 (patch) | |
tree | 3d9368be0e685f8d45e07b78e34e98a517e2421d /avr | |
parent | 1aed7fd5dc9fb03d459ad7fb096bfc52c80d2cd3 (diff) | |
download | z180-stamp-ee5dbfef84e6697f027dad9fd4367040204e6a17.zip |
check for short reads. return 512 0-bytes and no error.
Diffstat (limited to 'avr')
-rw-r--r-- | avr/z180-serv.c | 15 |
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); } } |