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@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);