

It Was a Problem Back in the Day
source link: http://www.os2museum.com/wp/it-was-a-problem-back-in-the-day/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

It Was a Problem Back in the Day
Several years ago, I found out the hard way that old versions of DOS have trouble with hard disks with more than 17 sectors per track. To recap, DOS versions older than 3.3 may hang when booting from a hard disk with more than 17 sectors per track, but the exact behavior is somewhat complex.
Old DOS versions required IO.SYS to be contiguous and attempted to load it with a single disk read if possible, but perhaps to keep the code size small, the loading code isn’t very sophisticated and reads sectors from the beginning of IO.SYS until the end of the disk track. With 17 sectors per track, there can never be a problem. With lots of sectors (more than 30 can be a problem) DOS can hang, but the behavior depends on exactly where IO.SYS begins relative to the end of the disk track it’s on. Even on a disk with maximum (63) sectors per track, old DOS versions may boot fine if IO.SYS is sufficiently close to the end of the track.
Where exactly IO.SYS is depends on the size of the FAT tables and the root directory size. In practice the root directory size is more or less fixed, but the FAT size very much depends on the size of the DOS partition. Needless to say, the behavior is unpredictable to users and highly undesirable.
The problem was fixed in 1986 or early 1987, which implies that it was already known. Now I have a good idea why it was known.
Standard ST-506 MFM drives used with the IBM PC/XT and PC/AT always had 17 sectors per track. That was a function of the disk spinning at 3,600 RPM , the drive controller delivering data at 5 Mbps, and the sectors being 512 bytes long. But in the mid-1980s, another disk interface started gaining popularity: ESDI, or Enhanced Small Device Interface.
ESDI was an evolutionary step between ST-506 on one end of the spectrum and SCSI/IDE on the other. The ESDI interface was considerably more intelligent than ST-506, but just like ST-506 (and unlike SCSI/IDE), required a separate controller.
ESDI started out with 10 Mbps data rates and over time achieved over 20 Mbps. ESDI drives were thus inherently much faster than ST-506 drives, but also had more sectors per track. It is obvious that if an ESDI drive rotated at the same 3,600 RPM and used the same 512-byte sectors but moved data at twice the bit rate of ST-506, it had to be able fit more sectors on a track.
And sure enough, ESDI drives commonly had 34 or 35 sectors per track. There were also ESDI drives with more than 1,024 cylinders. And all of that caused trouble.
Translation Required
The problems were clearly known, even if they were not well explained. For example, the documentation for WD1007 ESDI controllers says MS-DOS 3.3 needs to be used, although it is not clear on why. It also says that “some of the older operating systems can only recognize 17 sectors per track”, but does not name any names.
Compaq was much clearer: “MS-DOS 3.1 or earlier supports drive type 25 only”. The 130 MB ESDI disk in the DeskPro 386 could be configured as either type 25 (17 sectors per track) or type 35 (34 sectors per track) in the BIOS. Compaq firmly pointed the finger at DOS.
Note that elsewhere the same document states: “MS-DOS 3.2 or later supports drive type 25 or 35. Depending on the application, there may be some performance improvement by using drive type 35.” Also note that the original DeskPro 386 shipped with DOS 3.1, and Compaq does not appear to have used DOS 3.2 much at all, although it did exist. (DOS 3.2 was generally a fairly short-lived product.)
It is clear from the Compaq and WD documentation that ESDI controllers supported geometry translation. In the early days of ESDI, many users were probably forced to translate the sectors per track from 34 to 17.
This was never a limitation of the PC BIOS, only a limitation of PC operating systems written in an era when only hard disks with 17 sectors per track existed. In the case of DOS, it was clearly not even a conscious decision but a bug that could not be discovered through testing at the time.
ESDI controllers were also capable of working around actual BIOS limitations, notably the 1,024 cylinder limit. The WD1007 controllers supported translations with 63 sectors per track, same as the “maximal” geometry used by IDE drives. The WD1007V-SE2 supported a maximum BIOS geometry of 63 SPT, 16 heads, and 1024 cylinders—the familiar 504 MB limit of the BIOS INT 13h service.
It perhaps does not say anything positive about the PC industry that problems which were known in 1986 or so took a good ten years to solve.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK