[SeaBIOS] [PATCH 1/2] floppy: Fix incorrect LBA to CHS translation.

Kevin O'Connor kevin at koconnor.net
Mon Dec 9 18:40:54 CET 2013


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 at 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




More information about the SeaBIOS mailing list