This highlights a specific case where the "read error while reading drive" message will pop up on boot. I have an HP Brio 8314 which has this problem. If you don't have this exact machine, 86Box has a machine with the same problem: Slot 1, "[i440LX] Micronics Spitfire". It is not a hardware bug, it is a BIOS bug.

For some reason, under some unknown circumstances, certain releases of PhoenixBIOS 4.0 Release 6.0 (with a copyright extending to 1997) will incorrectly set DL to 0x00 before jumping into the MBR code. This results in the MBR loader trying to load a partition boot sector from the first floppy drive.

The patch I am using right now is roughly equivalent to the following DEBUG patch (MBR extracted via FDISK /SMBR using the 1.3 Live CD release and the BOOTNORM loader):

   debug boot.mbr
   a11d
   jmp 1fe0:7d10

   a210
   mov dl, 80
   jmp 122

   w
   q


However, a proper fix for this should be something like this, executed before one attempts to use INT 0x13:

   ;; Work around a bug in 1997 PhoenixBIOS 4.0 Release 6.0,
   ;; where DL can be erroneously set to 0x00 (first floppy drive)
   cmp dl, 0x00
   jne nodlbug
   mov dl, 0x80
   nodlbug:


(I release all code in this email into the public domain.)

I'd need to do further analysis to see how a second hard drive behaves, but this will cover the most common case.

Two further points of note:
1. In the MS-DOS 4.00 sources, the drive number is loaded from the MBR in such a way that it gets forced to 0x80. But that makes it effectively impossible to boot from a different drive number. 2. The PnP BIOS specifications require DL to be set to the boot drive, and this BIOS does have PnP support. This confirms that the behaviour from the BIOS is a bug.

Regards,
Ben R

P.S. If you have a later version of FreeDOS FDISK and you used an earlier version with the /SMBR switch, *DO NOT USE THE /LOADMBR SWITCH!* You will lose all partitioning information and probably have to wipe your disk and reinstall everything. Use /LOADIPL in that case instead! (or the /AMBR alias, which is what you would have been using before.) Yes, I learnt this from experience, unfortunately.
_______________________________________________
Freedos-devel mailing list
Freedos-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freedos-devel

Reply via email to