From 2ba69bc812aabcc14e5cba7ddea74fbaea2ee235 Mon Sep 17 00:00:00 2001 From: Michael McMaster Date: Tue, 12 Oct 2021 21:44:51 +1000 Subject: [PATCH] Fix for writes with sector sizes larger than 512 bytes --- CHANGELOG | 4 ++++ src/firmware/config.c | 2 +- src/firmware/disk.c | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9b37972e..7971604f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +? 6.4.13 + - Fix SCSI writes with sector sizes larger than 512. + + 20210810 6.4.12 - Fix USB disconnect issue when no SD card is installed. diff --git a/src/firmware/config.c b/src/firmware/config.c index 2efb7ff2..451ad623 100755 --- a/src/firmware/config.c +++ b/src/firmware/config.c @@ -36,7 +36,7 @@ #include -static const uint16_t FIRMWARE_VERSION = 0x064C; +static const uint16_t FIRMWARE_VERSION = 0x064D; // Optional static config extern uint8_t* __fixed_config; diff --git a/src/firmware/disk.c b/src/firmware/disk.c index 45b18aa0..43c58e55 100755 --- a/src/firmware/disk.c +++ b/src/firmware/disk.c @@ -893,11 +893,21 @@ void scsiDiskPoll() // use sg_dd from sg_utils3 tools to test. uint32_t rem = totalSDSectors - i; - uint32_t sectors = rem < maxSectors ? rem : maxSectors; + uint32_t sectors; + if (rem <= maxSectors) + { + sectors = rem; + } + else + { + sectors = maxSectors; + while (sectors % sdPerScsi) sectors--; + } + if (useSlowDataCount) { - scsiSetDataCount(sectors * bytesPerSector); + scsiSetDataCount((sectors / sdPerScsi) * bytesPerSector); } for (int scsiSector = i; scsiSector < i + sectors; ++scsiSector) -- 2.38.5