After some digging, I discovered that several old drafts of the original ATA standard (later known as ATA-1) have been out in the public all along, or at least for a very long time, cleverly hiding among hundreds of SCSI-related documents. I don’t seem to be the only one who missed them. Here they are:
- DAD (Disk ATBus Definition) Rev 1, March 30, 1989. Very incomplete.
- ATA (AT Attachment) Rev 2.1, June 11, 1990.
- ATA (AT Attachment) Rev 2.2, August 15, 1990. Last under the CAM heading.
- ATA (AT Attachment) Rev 2.3, January 30, 1991. Under the new X3T9.2 heading.
- ATA (AT Attachment) Rev 3.0, November 22, 1991.
- ATA (AT Attachment) Rev 3.2, October 16, 1992.
- AT Attachment Interface for Disk Drives, January 3, 1993, ANSI X3.221. Official ISO/IEC/ANSI draft. Probably revision 3.3A.
- AT Attachment Interface for Disk Drives, March 17, 1993, Revision 4.
These old revisions may provide the best surviving documentation of existing ATA/IDE practice as it existed in 1989 and onward. The first working document was introduced in March 1989. The ANSI X3.221 standard was officially approved on May 12, 1994. The actual document text was finalized in late 1993.
Note that the 1991 drafts still did not include any LBA support or removable media support. It did include the IDENTIFY DRIVE command as well as the (optional) READ/WRITE MULTIPLE and SET MULTIPLE MODE commands, as well as slave DMA transfers and PIO modes 0, 1, and 2 (up to 8.33 MB/s interface transfer rate).
July 2020 Update: Two “new” ATA draft versions have been discovered in BBS archives, namely revisions 3.0 and 4. While the R3.0 document was a plain ASCII file, the R4 file was not and used IBM code page 437 extended characters. The file presented above was converted to UTF-8; the original R4 document is here. As the notes in R3.2 indicate, R3.0 from late 1991 did not yet have any concept of LBA.
October 2021 Update: Two more and even older ATA drafts came to light. The very first and very incomplete draft (not yet called ATA) from March 1989, and a much more complete revision 2.1. The R2.1 draft is quite recognizable as ATA. The document was converted from WordStar to PDF, using the same 2-up printing style that X3T9.2 used for draft standards back in the day. The original R2.1 draft is here.
Despite there was a IDENTIFY command, there were so many BIOSes lacking a auto-detection. This was very annoying. IIRC I even had a very early Pentium that lacked auto-detection.
Sometimes I used my mother’s newer computer to get disk-specs for my 386 and 486 boxes…
I think I had a 386SX in 1992 that had IDE auto-detection. Not as automatic as later BIOSes, but it was possible to get the disk geometry in BIOS setup and fill in the disk parameters. A lot easier than writing things down. It was AMI BIOS, that much I remember.
And a lot of IDE disks were delivered with Ontrack Diskmanager (with varying names depending on the hard disk brand – EZ Drive for WD for example). That’s how older or incompatible motherboard could support larger hard disks. As a reference: Ontrack Diskmanager acted as overlay for the BIOS and was activated through the MBR…
I use Ontrack DM on my 386SX with a ~2GB and a 8155MB disk, which is, in my opinion, a very good solution.
One thing I dont like about it is the non-standard bootsector/partition table.
Setup lets one choose wheter the user wants this bootsector or a .sys-driver. But I never managed to get it the .sys-driver working with the boot disk.
The idea was to create a <504MB partition for booting and use the driver for the rest of the disk. But this wasn't going to work.
Either DM does not support this configuration or I did something wrong.
I had no specific problem with that bootsector so far, but I don't like non-standard-stuff if I can avoid it.
EZ-Drive was made by Micro House, it was a competitor of Ontrack’s Disk Manager. And yes, in the mid-1990s those were very often used, because BIOSes were constantly behind the drive technology. The BIOSes in brand-name machines were probably the worst, because the vendors didn’t care about upgradability all that much. It worked with whatever they shipped.
Btw the 528 MB limit were probably a reason for disk manufacturers to make disks with a size of about 540MB. Large enough to not fit within the 528MB limit, but small enough that you could ingore the problem and just waste 12MB space. Made the customers aware of the problem but didn’t force them to solve it.
It’s strange that this problem weren’t solved earlier on. Was this maybe due to that no PC manufacturer were willing to pay the BIOS makers to fix the problem until it were neccessary?
I kind of ignored this problem while it did happen. Jumped directly from a 386DX40 to a Cyrix 6×86 machine, and led the 386 run Linux.
Btw which limits were there otherwise?
About 8GB were iirc a limit on PC’s.
On Amiga, there were a 4GB limit (one 32-bit variable to address each byte on the disk), which affected all kinds of controllers, not just IDE/ATA. This was/is afaik solved in software.
A lot of 540 MB drives were shipped with EIDE controllers that included BIOS support that broke the limit. I got one because it was cheaper to get the box with the controller plus hard drive than just the hard drive. The problem with getting it into systems right away was that there were 3 different methods of extending past the limit. Compaq EISA SystemPros shipped with IDA which included RAID and a lot of other features; Seagate offered Fast ATA while Western Digital offered EIDE. The ATA-2 standard got most of the features shoved in.
Other limits include
8 GB (1024 x 255 x 63)
128 GB (65,536 cylinders with 16 heads)
2 TB
plus several less common limits specific to certain hardware and BIOS revisions.
Apple had some really oddball IDE implementations. Despite being a mature standard in 1997 when it was released, the onboard IDE controller on the beige Powermac G3 has the 8.4GB limit to boot partitions! Yes, the Int 13h addressing limits hit a non-IBM compatible platform for some reason. I don’t think even the earlier Amigas have a problem with drives that large (outside of file system limits).
ATA-2 has nothing to do with BIOS translation BTW.
No one was going to pay anyone to solve a problem that did not yet exist, no matter how obvious it was that the problem was going to exist. To a large extent the issue was that this was all tied to IDE/ATA, which was a rapidly evolving interface at the time. LBA addressing did not exist until 1993 or so. CHS geometry translation in IDE drives also evolved at the same time. Really big drives were SCSI, and then it was Someone Else’s Problem (like Adaptec’s, and problems they did have).
I would say a big issue was that the underlying technology (ATA) only really took over in the early 1990s, and drive capacities started hitting the 528MB limit before ATA stabilized. So there was no time to prepare because when the preparation would need to have to be done (1992-1993), the underlying technology was not there. Keep in mind that ATA was only officially standardized in 1994 (the draft standard was finalized in late ’93).
There were solutions being offered at the time. Maxtor shipped the LXT-535A in either late 1990 or early 1991 (sources differ) which had a formatted capacity of 535 MB. The Maxtor install notes show it to be in a translation mode that hits the 528 million byte mark unless an advanced BIOS was used to make all the capacity available. Presumably, that means that some BIOS had received an update to work with that drive. Never underestimate how marketing will be at odds with standards committees.
All of this goes to explain the complexity of Annex D of the ATA-2 spec which tries to create a generic translation model for larger drives that also managed to work with the proprietary extensions that various manufacturers used. This helps explain the confusion that led to some of the alternate cylinder and head drive limits which can be seen at http://www.pcguide.com/ref/hdd/bios/size.htm
Thanks for those links.
Some other hints of IDE pre-history… have you ever wondered why bits [6:5] of the drive/head register have to be 01? (Bit 6 was later being redefined to indicate LBA mode.)
Well, if you read old(ish) WD IDE drive manuals http://www.bitsavers.org/pdf/westernDigital/disk/
those bits specify the sector size, 01 meaning 512 bytes. More info is in various WD HD controller IC datasheets: http://www.bitsavers.org/components/westernDigital/_dataBooks/
(see e.g. WD1010)
The drive/head register is referred to as SDH (for sector size, drive number, head number). Possible sector sizes are 128, 256, 512 and 1024 bytes.
It wouldn’t be too surprising if an original IBM PC/AT controller + drive could be formatted to have non-512-byte sectors. Of course there would be no BIOS/OS support so you’d have to hit the hardware registers directly. Maybe some early IDE drives which use the same WD chips also have that capability?
Yes, there’s a lot of fun history. The high 3 bits of the SDH register were documented as ‘101’ in the PC/AT Tech Ref, which reflected what the IBM BIOS supported. But in the WD docs, it’s clear that the bit 7 controlled CRC/ECC, and bits 6:5 selected sector size. Old WD controllers also supported up to 4 drives with 8 heads rather than 2 drives with 16 heads like newer implementations. Putting everything together is tricky because IBM’s documentation is not quite detailed enough and the WD chip docs don’t show exactly how everything was put together.
It’s highly likely that the PC/AT disk controller would have supported other sector sizes.
There are some details where even the initial ATA standard differs from old PC/AT controllers, and newer ATA standards have even more differences.
Also exists X3T9.2/90-143 ATA (AT Attachment) Rev 3.2 October 16, 1992
https://drive.google.com/open?id=0B9ixU7WkLUrickZnbU1iV1FGMEU
Thanks for that. I wonder where the text came from and why it’s not in the same archive as the rest. I found a text version of Rev 3.2 and added a link to the article. Revision 3.2 appears to be so far the oldest version of ATA which includes LBA support.