The floppy LBA to CHS translation was incorrect for the last sector of
a given cylinder. This wasn't a problem under QEMU as it came to the
same results anyway, but it causes errors of real floppy controllers.
Signed-off-by: Kevin O'Connor <kevin(a)koconnor.net>
---
src/hw/floppy.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/hw/floppy.c b/src/hw/floppy.c
index d43b489..c5118ec 100644
--- a/src/hw/floppy.c
+++ b/src/hw/floppy.c
@@ -496,11 +496,10 @@ static struct chs_s
lba2chs(struct disk_op_s *op)
{
struct chs_s res = { };
- u32 lba = op->lba;
- u32 tmp = lba + 1;
+ u32 tmp = op->lba;
u16 nls = GET_GLOBALFLAT(op->drive_gf->lchs.sector);
- res.sector = tmp % nls;
+ res.sector = (tmp % nls) + 1;
tmp /= nls;
u16 nlh = GET_GLOBALFLAT(op->drive_gf->lchs.head);
--
1.8.3.1
FDD Read Errors handling
"I found another 3,5 floppy drive, old .. but still reasonably in good conditions.. a SAMSUNG SFD-321B /LEB T5.. this one works like charm.. reads ALL the AMIGA disks I throw at it with no flaws.."