The ultimate reason why I pulled out the old Seagate ST-225 drive was because I wanted to try connecting it to the Western Digital WD1003-IWH board that I recently acquired.
The WD1003-IWH is a curious evolutionary half-step between ST506 interface MFM drives and IDE drives, a kind of a missing link. The Compaq Portable II (released in February 1986) appears to have been the first PC with an IDE interface but not the first PC with an IDE drive. The WD1003-IWH board facilitated the connection of a standard ST506 MFM drive, either a Miniscribe 8212 (10 MB) or Miniscribe 8425 (20 MB), to the usual 40-pin IDE connector on the Portable II’s multipurpose controller board. Here’s what that looked like.
I don’t have any Miniscribe MFM drives, but I figured the WD1003-IWH is more or less a WD1003-WAH in a different form factor and with a funny connector (40-pin IDE rather than ISA bus).
Not knowing if my WD1003-IWH was even functional, all I could try was to hook it up to the ST-225 and see what happens. But what happened was a bit weird.
I could clearly see that the WD1003-IWH responded like a standard AT disk controller, with the expected register contents after reset and EXECUTE DRIVE DIAGNOSTIC (90h) command, and accepting an INITIALIZE DRIVE PARAMETER (91h) command. But anything else just resulted in an error with the ABRT bit set.
In fact the DRDY and DSC bits in the status register that should normally be set weren’t. When it wasn’t showing errors, the status register value was zero… as if no drive was even there.
The DRDY status bit should simply reflect the drive ready signal, which becomes active once the drive reaches nominal RPM. There’s no complex logic behind it, and I knew the drive was working.
I checked the short cables the WD1003-IWH board came with, as well as the connector pins. I found no problem.
Then I checked, double-checked, and triple-checked the board, but only found that for something made in 1986, it’s in remarkably good visual condition. And yet the WD1003-IWH behaved as if there was no drive connected at all. When there clearly was.
I considered the possibility that it might only work with the Miniscribe drives that Compaq used, but that seemed far-fetched. Again, at least the DRDY status bit is so basic that it should work with any drive.
The next day, I looked at the ST-225 drive again, noting the row of jumper pins:
What are those for? A couple of rarely used configuration options and a drive ID. Seagate’s own documentation is very terse, but it resulted in a facepalm: “If twisted cable, use Drive Select 2”. Of course! My IBM/WD disk controller uses a twisted control cable, so that each drive can be jumpered as drive 2, the same kind of arrangement that PC floppy drives use.
But the WD1003-IWH does not have a twisted cable, and therefore probably expects that the drive it talks to is configured as drive 1. Could that be all there is to it? I changed the jumper so that the ST-225 would respond as drive 1 and hooked it up to the 1003-IWH again.
Lo and behold, there it was! Suddenly the DRDY (drive ready) and DSC (seek complete) bits in the status registers were set, and it was possible to access the drive!
Later I double checked and verified that when the ST-225 is jumpered as drive 2, it does not show up as the second drive on the WD1003-IWH. Most likely the drive select signals for selecting a drive other than 1 aren’t wired since it’s physically impossible to connect more than one drive to the WD1003-IWH.
After reconfiguring the drive, recalibrating/reading/seeking no longer failed, the controller and drive were clearly alive. Unfortunately my joy was short-lived for two reasons, one expected and one unexpected.
The expected reason was that the WD1003-IWH does not support the IDENTIFY DRIVE command. That’s really not surprising, since the controller has no way to know what drive is connected to it. The WD1003-IWH really does appear to be a very close functional equivalent of the standard WD1003-WAH controller.
The unexpected reason was that all the data I read from the drive was garbage. But not at all random garbage. This is what the drive’s boot sector looked like when I read it:
This is what it should have looked like:
Notice how every odd byte is actually correct, but every even byte contains the next odd byte instead. This is when using 16-bit port I/O, which is a requirement for the AT disk controller data port. The exact same code and the exact same IDE cable and ISA I/O card work without any trouble with a number of old and not so old IDE drives. And no, 8-bit I/O does not work; the drive clearly does read 512 bytes from its buffer when the host reads 256 words.
I briefly considered the possibility that the WD1003-IWH controller isn’t reading data from the MFM drive correctly because it was written using a different controller. But that’s not possible, because then there would be CRC errors or worse, and there weren’t any. I also considered the possibility that the buffer memory on the WD1003-IWH is faulty, but that should have been discovered by the controller diagnostics (which passed) and the problem didn’t really look like bad memory.
I’m really not sure what the problem is. It has almost certainly something to do with the fact that the AT disk data port is the only 16-bit port in the I/O range and that the IOCS16 signal needs to be activated by the WD1003-IWH in time. But I do not understand the mechanism which causes the data to be corrupted the way they are.
Just for kicks, I decided to plug the WD1003-IWH directly into the onboard IDE connector. That goes to a VL-bus Adaptec IDE controller rather than through an ISA slot. Could that change anything?
Well… sure enough, it did. With the WD1003-IWH + ST-225 plugged directly into onboard IDE, the machine booted off the ST-225 drive. Or rather it did as soon as I fixed the drive type in the BIOS.
Clearly the buffer memory on the WD1003-IWH is just fine, and in fact the adapter seems to be working as well as it did 35 years ago when it was new… but when it’s plugged into the ISA I/O adapter I have, it’s not working right and 16-bit data transfers are corrupted. That is almost certainly not a fault that developed over time but rather a design issue with the controller that existed since day one but never showed up with the machines it was designed for.
So is the WD1003-IWH any good? Yes and no. It allows connecting an MFM drive to an IDE connector, but it doesn’t turn an ST506 interface drive into an IDE drive. The crucial missing ingredient is the IDENTIFY DRIVE command, without which any modern software won’t know what to do with the drive. However, for systems where the BIOS drive type can be explicitly set, it does work.
The WD1003-IWH has one mysterious jumper that is “documented” by Compaq. But all the Compaq manual says is that one position is for a 10 MB drive and the other for a 20 MB drive. I have no idea what the jumper really does, but it does do something, and placing it in the 10 MB drive position prevents the ST-225 (which is a 20-megabyte drive) from booting. The jumper appears to limit the maximum cylinder, although the purpose of this escapes me.
Since the ST-225 has the same geometry as Compaq’s 20 MB drive (Miniscribe 8425), it’s unclear whether the WD1003-IWH can generally work with any drive geometry or if it’s somehow limited to the two models Compaq used. If more MFM drives turn up, that would be something to test.