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