[SeaBIOS] [Bochs-developers] [Bug #2956217] INT13 AH=8 returns wrong valueswhen cylinders=1

Sebastian Herbszt herbszt at gmx.de
Thu Mar 4 20:39:30 CET 2010


Sebastian Herbszt wrote:
> The following disk description is used to trigger this bug:
> ata0-master: type=disk, path=fdtest.img, mode=flat, cylinders=1, heads=150, spt=63
> 
> The current BIOS returns CX=0xFFFF. This value is wrong.
> 
> rombios.c got
> 
>      nlc = nlc - 2; /* 0 based, last sector not used */
>      SET_AL(0);
>      SET_CH(nlc & 0xff);
>      SET_CL(((nlc >> 2) & 0xc0) | (nlspt & 0x3f));
>      SET_DH(nlh - 1);
> 
> with BX_USE_ATADRV and without it's
> 
>      max_cylinder = hd_cylinders - 2; /* 0 based */
>      SET_AL(0);
>      SET_CH(max_cylinder & 0xff);
>      SET_CL(((max_cylinder >> 2) & 0xc0) | (hd_sectors & 0x3f));
>      SET_DH(hd_heads - 1);
> 
> nlc and max_cylinder are Bit16u so substracting 2 from 1 gets us the wrong value.
> 
> Section "INT 13 - DISK - GET DRIVE PARAMETERS (PC,XT286,CONV,PS,ESDI,SCSI)"
> from Ralf Browns "Interrupt List, part 2 of 18" got
> 
> "the maximum cylinder number reported in CX is usually two less than
>   the total cylinder count reported in the fixed disk parameter table
>   (see INT 41h,INT 46h) because early hard disks used the last cylinder
>   for testing purposes; however, on some Zenith machines, the maximum
>   cylinder number reportedly is three less than the count in the fixed
>   disk parameter table.
> for BIOSes which reserve the last cylinder for testing purposes, the
>   cylinder count is automatically decremented"
> 
> I don't think Bochs BIOS uses "the last cylinder for testing purpose" so i would suggest
> decrementing by 1 not 2. This should also fix the reported problem.
> 
> Thoughts?
> 
> - Sebastian

SeaBIOS has the same problem and similar wrong comment about last sector when
decrementing the cylinder count:

    } else if (regs->dl < EXTSTART_CD) {
        // Hard drive
        count = GET_BDA(hdcount);
        nlc--;  // last sector reserved
    } else {


- Sebastian




More information about the SeaBIOS mailing list