Recently I had an occasion to find out why NetWare 3.12 using the shipped IDE driver (IDE.DSK) behaves, very, very strangely when let loose on disks bigger than about 500MB (a very foolish thing to even try). The driver loaded fine, discovered a 1GB disk fine, but when accessing it, it was extremely slow and produced a lot of errors.
After some debugging and disassembling IDE.DSK, the cause became obvious, but the chain of events that led to it was anything but.
The IDE.DSK driver in NetWare 3.12 dates from April 1993, meaning it’s older than the original ATA specification. The driver notably does not use LBA, because it was not yet standardized at the time; disks with LBA were perhaps just coming on the market, and they were generally not big enough to require LBA. Crucially, there were also no translating BIOSes yet.
The symptoms of the problem initially didn’t seem to make much sense. After working correctly for a short moment, NetWare would select non-existent device 1 (slave) on an IDE channel with only device 0 (master) present. Then it would read the alternate status register, get rather confused, and start endlessly re-calibrating and resetting the drive. In other words, completely unusable. So why would NetWare do such a thing?
Continue reading