• Hello Guest! We're hosting a challenge to welcome vintage Intel macs to the MLA during the month of July! See this thread for more information.
  • We've made some quality of life improvements to the Trading Post. More info here.

ZuluIDE

65a

6502
I got a ZuluIDE because I had some free ATA connectors on this MDD I've been slowly assembling.

Good news, it works, I can see CDs and swap them.

Bad news, it is not visible to OpenFirmware (at least on the ATA-66 bus) and cannot be booted from.

Weird news, it works fine in OS9 except if I run Drive Setup. It will lock up the host indefinitely (and I think the ZuluIDE for a minute or so). With or without an SD card, so it's probably a fw timing problem or unexpected response.

The only error in the ZuluIDE logs I saw that seemed weird before the timeout was an unimplemented ATAPI_READ_DISC_STRUCTURE. Implementing it didn't seem to help. Toggling various config booleans also did not seem to help.

Has anyone tried one of these in a mac so far? Was it bootable? Did Disk Setup work?
 
I have no experience with ZuluIDE.

What Open Firmware version does your MDD have?

We can run some commands in Open Firmware to see what's causing problems.

Connect to Open Firmware with telnet, load and execute "Open Firmware Trace.of" from disk or paste into telnet (paste requires text pacing character rate to be reduced so that Open Firmware doesn't drop any characters).

Patch some relevant words using these commands:
Code:
dev /packages/ata-disk
patch-words
dev /packages/atapi-disk
patch-words

\ ata-3 cd
dev ide0
patch-words
dev ..
patch-words

\ ata-4
dev ultra2
patch-words
dev ..
patch-words

\ ata-6 hd
dev ultra0
patch-words
dev ..
patch-words

Then run some tests for wherever you think the ZuluIDE is connected:
Code:
\ test ata-3 master
trace-on " ide0" select-dev trace-off

\ test ata-4 master
trace-on " ultra2" select-dev trace-off

\ test ata-6 master
trace-on " ultra0" select-dev trace-off

\ test ata-3 slave
trace-on " ide1" select-dev trace-off

\ test ata-4 slave
trace-on " ultra3" select-dev trace-off

\ test ata-6 slave
trace-on " ultra1" select-dev trace-off

We'll be able to see what commands are being used to identify and open the device.

boot debugging notes at:
https://68kmla.org/bb/threads/updat...om-usb-from-the-boot-picker.48601/post-546120
 

Attachments

I got a ZuluIDE because I had some free ATA connectors on this MDD I've been slowly assembling.

Good news, it works, I can see CDs and swap them.

Bad news, it is not visible to OpenFirmware (at least on the ATA-66 bus) and cannot be booted from.
Apple's OpenFirmware implementation makes some interesting assumptions about ATA device types and which bus channel they expect to see them on. This appears to be is a hard-coded machine-side limitation, not an issue with ZuluIDE firmware.

Weird news, it works fine in OS9 except if I run Drive Setup. It will lock up the host indefinitely (and I think the ZuluIDE for a minute or so). With or without an SD card, so it's probably a fw timing problem or unexpected response.
This is a known bug we're working on addressing.
 
Apple's OpenFirmware implementation makes some interesting assumptions about ATA device types and which bus channel they expect to see them on. This appears to be is a hard-coded machine-side limitation, not an issue with ZuluIDE firmware.
I suspect a firmware problem with ZuluIDE. Output from the trace will determine what, if any, assumptions are being made by Open Firmware. If the cause of the problem is found, then we can patch ZuluIDE or Open Firmware.
 
Will try the trace @joevt and post results. @rabbitholecomputing thanks for looking! I will also try it on the usual optical bus to see if it helps. Really like the device so far, happy to run debug images or hack on it, I have a working build environment.
 
Telnet trace (it definitely should be ultra0). Looks like it's trying to speak IDE?

Code:
0 > trace-on " ultra0" select-dev trace-off [ open ff850068 6
  [] need-ata-quiesce? ff850068 6 ffffffff
  [] 1st-time-mgropen? ff850068 6 ffffffff
  [] my-max-ultra ff850068 6 0
  [ set-max-ultra ff850068 6
  ] set-max-ultra ff850068 6
  [] bus-id ff850068 6 3
  [] ata100base ff850068 6 f5004000
  [ setataaddresses ff850068 6
    [] ata100base ff850068 6 f5004000
    [] iooffset ff850068 6 f5004000 f5004000 2000
    [] dmaoffset ff850068 6 f5004000 1000
  ] setataaddresses ff850068 6
  [] ataiobase ff850068 6 f5006000
  [ >ide.data ff850068 6 f5006000
  ] >ide.data ff850068 6 f5006000
  [] openwait ff850068 6 64
  [ wait-bsy ff850068 6
    [] wait-bsy-timeouts ff850068 6 0
    [ sts@ ff850068 6 4959e ffffffff
      [] ataiobase ff850068 6 4959e ffffffff f5006000
      [ >ide.statuscommand ff850068 6 4959e ffffffff f5006000
      ] >ide.statuscommand ff850068 6 4959e ffffffff f5006070
    ] sts@ ff850068 6 4959e ffffffff 0
    [] kbsy ff850068 6 4959e ffffffff 0 80
    [ sts@ ff850068 6 4959e ffffffff
      [] ataiobase ff850068 6 4959e ffffffff f5006000
      [ >ide.statuscommand ff850068 6 4959e ffffffff f5006000
      ] >ide.statuscommand ff850068 6 4959e ffffffff f5006070
    ] sts@ ff850068 6 4959e ffffffff 0
    [] kbsy ff850068 6 4959e ffffffff 0 80
  ] wait-bsy ff850068 6
  [ set-drive-select ff850068 6 0
    [ dev! ff850068 6 0
      [] ataiobase ff850068 6 0 f5006000
      [ >ide.devicehead ff850068 6 0 f5006000
      ] >ide.devicehead ff850068 6 0 f5006060
    ] dev! ff850068 6
  ] set-drive-select ff850068 6
  [] kdevctlone ff850068 6 8
  [ dev2! ff850068 6 8
    [] ataiobase ff850068 6 8 f5006000
    [ >ide.altstatdevcnt ff850068 6 8 f5006000
    ] >ide.altstatdevcnt ff850068 6 8 f5006160
  ] dev2! ff850068 6
  [ wait-bsy ff850068 6
    [] wait-bsy-timeouts ff850068 6 0
    [ sts@ ff850068 6 495ae ffffffff
      [] ataiobase ff850068 6 495ae ffffffff f5006000
      [ >ide.statuscommand ff850068 6 495ae ffffffff f5006000
      ] >ide.statuscommand ff850068 6 495ae ffffffff f5006070
    ] sts@ ff850068 6 495ae ffffffff 8
    [] kbsy ff850068 6 495ae ffffffff 8 80
    [ sts@ ff850068 6 495ae ffffffff
      [] ataiobase ff850068 6 495ae ffffffff f5006000
      [ >ide.statuscommand ff850068 6 495ae ffffffff f5006000
      ] >ide.statuscommand ff850068 6 495ae ffffffff f5006070
    ] sts@ ff850068 6 495ae ffffffff 0
    [] kbsy ff850068 6 495ae ffffffff 0 80
  ] wait-bsy ff850068 6
  [ set-drive-select ff850068 6 1
    [] kdev ff850068 6 10
    [ dev! ff850068 6 10
      [] ataiobase ff850068 6 10 f5006000
      [ >ide.devicehead ff850068 6 10 f5006000
      ] >ide.devicehead ff850068 6 10 f5006060
    ] dev! ff850068 6
  ] set-drive-select ff850068 6
  [] kdevctlone ff850068 6 8
  [ dev2! ff850068 6 8
    [] ataiobase ff850068 6 8 f5006000
    [ >ide.altstatdevcnt ff850068 6 8 f5006000
    ] >ide.altstatdevcnt ff850068 6 8 f5006160
  ] dev2! ff850068 6
  [ identify-protocols ff850068 6
    [ wait-bsy ff850068 6
      [] wait-bsy-timeouts ff850068 6 0
      [ sts@ ff850068 6 495bf ffffffff
        [] ataiobase ff850068 6 495bf ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495bf ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495bf ffffffff f5006070
      ] sts@ ff850068 6 495bf ffffffff 8
      [] kbsy ff850068 6 495bf ffffffff 8 80
      [ sts@ ff850068 6 495bf ffffffff
        [] ataiobase ff850068 6 495bf ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495bf ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495bf ffffffff f5006070
      ] sts@ ff850068 6 495bf ffffffff 8
      [] kbsy ff850068 6 495bf ffffffff 8 80
    ] wait-bsy ff850068 6
    [ set-drive-select ff850068 6 0
      [ dev! ff850068 6 0
        [] ataiobase ff850068 6 0 f5006000
        [ >ide.devicehead ff850068 6 0 f5006000
        ] >ide.devicehead ff850068 6 0 f5006060
      ] dev! ff850068 6
    ] set-drive-select ff850068 6
    [ wait-bsy ff850068 6
      [] wait-bsy-timeouts ff850068 6 0
      [ sts@ ff850068 6 495cc ffffffff
        [] ataiobase ff850068 6 495cc ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495cc ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495cc ffffffff f5006070
      ] sts@ ff850068 6 495cc ffffffff 0
      [] kbsy ff850068 6 495cc ffffffff 0 80
      [ sts@ ff850068 6 495cc ffffffff
        [] ataiobase ff850068 6 495cc ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495cc ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495cc ffffffff f5006070
      ] sts@ ff850068 6 495cc ffffffff 0
      [] kbsy ff850068 6 495cc ffffffff 0 80
    ] wait-bsy ff850068 6
    [ wait-bsy ff850068 6
      [] wait-bsy-timeouts ff850068 6 0
      [ sts@ ff850068 6 495d5 ffffffff
        [] ataiobase ff850068 6 495d5 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495d5 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495d5 ffffffff f5006070
      ] sts@ ff850068 6 495d5 ffffffff 0
      [] kbsy ff850068 6 495d5 ffffffff 0 80
      [ sts@ ff850068 6 495d5 ffffffff
        [] ataiobase ff850068 6 495d5 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495d5 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495d5 ffffffff f5006070
      ] sts@ ff850068 6 495d5 ffffffff 0
      [] kbsy ff850068 6 495d5 ffffffff 0 80
    ] wait-bsy ff850068 6
    [ set-drive-select ff850068 6 0
      [ dev! ff850068 6 0
        [] ataiobase ff850068 6 0 f5006000
        [ >ide.devicehead ff850068 6 0 f5006000
        ] >ide.devicehead ff850068 6 0 f5006060
      ] dev! ff850068 6
    ] set-drive-select ff850068 6
    [ wait-bsy ff850068 6
      [] wait-bsy-timeouts ff850068 6 0
      [ sts@ ff850068 6 495e2 ffffffff
        [] ataiobase ff850068 6 495e2 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495e2 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495e2 ffffffff f5006070
      ] sts@ ff850068 6 495e2 ffffffff 0
      [] kbsy ff850068 6 495e2 ffffffff 0 80
      [ sts@ ff850068 6 495e2 ffffffff
        [] ataiobase ff850068 6 495e2 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 495e2 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 495e2 ffffffff f5006070
      ] sts@ ff850068 6 495e2 ffffffff 0
      [] kbsy ff850068 6 495e2 ffffffff 0 80
    ] wait-bsy ff850068 6
    [ chi@ ff850068 6
      [] ataiobase ff850068 6 f5006000
      [ >ide.cylinderhi ff850068 6 f5006000
      ] >ide.cylinderhi ff850068 6 f5006050
    ] chi@ ff850068 6 0
    [ clo@ ff850068 6 0
      [] ataiobase ff850068 6 0 f5006000
      [ >ide.cylinderlow ff850068 6 0 f5006000
      ] >ide.cylinderlow ff850068 6 0 f5006040
    ] clo@ ff850068 6 0 0
    [ cnt@ ff850068 6
      [] ataiobase ff850068 6 f5006000
      [ >ide.sectorcount ff850068 6 f5006000
      ] >ide.sectorcount ff850068 6 f5006020
    ] cnt@ ff850068 6 0
    [ num@ ff850068 6 0
      [] ataiobase ff850068 6 0 f5006000
      [ >ide.sectornumber ff850068 6 0 f5006000
      ] >ide.sectornumber ff850068 6 0 f5006030
    ] num@ ff850068 6 0 0
    [ sts2@ ff850068 6 0
      [] ataiobase ff850068 6 0 f5006000
      [ >ide.altstatdevcnt ff850068 6 0 f5006000
      ] >ide.altstatdevcnt ff850068 6 0 f5006160
    ] sts2@ ff850068 6 0 0
    [ wait-bsy ff850068 6 0
      [] wait-bsy-timeouts ff850068 6 0 0
      [ sts@ ff850068 6 0 495f5 ffffffff
        [] ataiobase ff850068 6 0 495f5 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 495f5 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 495f5 ffffffff f5006070
      ] sts@ ff850068 6 0 495f5 ffffffff 0
      [] kbsy ff850068 6 0 495f5 ffffffff 0 80
      [ sts@ ff850068 6 0 495f5 ffffffff
        [] ataiobase ff850068 6 0 495f5 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 495f5 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 495f5 ffffffff f5006070
      ] sts@ ff850068 6 0 495f5 ffffffff 0
      [] kbsy ff850068 6 0 495f5 ffffffff 0 80
    ] wait-bsy ff850068 6 0
    [ set-drive-select ff850068 6 0 1
      [] kdev ff850068 6 0 10
      [ dev! ff850068 6 0 10
        [] ataiobase ff850068 6 0 10 f5006000
        [ >ide.devicehead ff850068 6 0 10 f5006000
        ] >ide.devicehead ff850068 6 0 10 f5006060
      ] dev! ff850068 6 0
    ] set-drive-select ff850068 6 0
    [ wait-bsy ff850068 6 0
      [] wait-bsy-timeouts ff850068 6 0 0
      [ sts@ ff850068 6 0 49603 ffffffff
        [] ataiobase ff850068 6 0 49603 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 49603 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 49603 ffffffff f5006070
      ] sts@ ff850068 6 0 49603 ffffffff 10
      [] kbsy ff850068 6 0 49603 ffffffff 10 80
      [ sts@ ff850068 6 0 49603 ffffffff
        [] ataiobase ff850068 6 0 49603 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 49603 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 49603 ffffffff f5006070
      ] sts@ ff850068 6 0 49603 ffffffff 0
      [] kbsy ff850068 6 0 49603 ffffffff 0 80
    ] wait-bsy ff850068 6 0
    [ chi@ ff850068 6 0
      [] ataiobase ff850068 6 0 f5006000
      [ >ide.cylinderhi ff850068 6 0 f5006000
      ] >ide.cylinderhi ff850068 6 0 f5006050
    ] chi@ ff850068 6 0 0
    [ clo@ ff850068 6 0 0
      [] ataiobase ff850068 6 0 0 f5006000
      [ >ide.cylinderlow ff850068 6 0 0 f5006000
      ] >ide.cylinderlow ff850068 6 0 0 f5006040
    ] clo@ ff850068 6 0 0 0
    [ cnt@ ff850068 6 0
      [] ataiobase ff850068 6 0 f5006000
      [ >ide.sectorcount ff850068 6 0 f5006000
      ] >ide.sectorcount ff850068 6 0 f5006020
    ] cnt@ ff850068 6 0 0
    [ num@ ff850068 6 0 0
      [] ataiobase ff850068 6 0 0 f5006000
      [ >ide.sectornumber ff850068 6 0 0 f5006000
      ] >ide.sectornumber ff850068 6 0 0 f5006030
    ] num@ ff850068 6 0 0 0
    [ sts2@ ff850068 6 0 0
      [] ataiobase ff850068 6 0 0 f5006000
      [ >ide.altstatdevcnt ff850068 6 0 0 f5006000
      ] >ide.altstatdevcnt ff850068 6 0 0 f5006160
    ] sts2@ ff850068 6 0 0 0
    [ wait-bsy ff850068 6 0 0
      [] wait-bsy-timeouts ff850068 6 0 0 0
      [ sts@ ff850068 6 0 0 49618 ffffffff
        [] ataiobase ff850068 6 0 0 49618 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 0 49618 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 0 49618 ffffffff f5006070
      ] sts@ ff850068 6 0 0 49618 ffffffff 0
      [] kbsy ff850068 6 0 0 49618 ffffffff 0 80
      [ sts@ ff850068 6 0 0 49618 ffffffff
        [] ataiobase ff850068 6 0 0 49618 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 0 49618 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 0 49618 ffffffff f5006070
      ] sts@ ff850068 6 0 0 49618 ffffffff 0
      [] kbsy ff850068 6 0 0 49618 ffffffff 0 80
    ] wait-bsy ff850068 6 0 0
    [ set-drive-select ff850068 6 0 0 0
      [ dev! ff850068 6 0 0 0
        [] ataiobase ff850068 6 0 0 0 f5006000
        [ >ide.devicehead ff850068 6 0 0 0 f5006000
        ] >ide.devicehead ff850068 6 0 0 0 f5006060
      ] dev! ff850068 6 0 0
    ] set-drive-select ff850068 6 0 0
    [ wait-bsy ff850068 6 0 0
      [] wait-bsy-timeouts ff850068 6 0 0 0
      [ sts@ ff850068 6 0 0 49628 ffffffff
        [] ataiobase ff850068 6 0 0 49628 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 0 49628 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 0 49628 ffffffff f5006070
      ] sts@ ff850068 6 0 0 49628 ffffffff 0
      [] kbsy ff850068 6 0 0 49628 ffffffff 0 80
      [ sts@ ff850068 6 0 0 49628 ffffffff
        [] ataiobase ff850068 6 0 0 49628 ffffffff f5006000
        [ >ide.statuscommand ff850068 6 0 0 49628 ffffffff f5006000
        ] >ide.statuscommand ff850068 6 0 0 49628 ffffffff f5006070
      ] sts@ ff850068 6 0 0 49628 ffffffff 0
      [] kbsy ff850068 6 0 0 49628 ffffffff 0 80
    ] wait-bsy ff850068 6 0 0
    [] protocols ff850068 6 0 0 ff9c10a0
  ] identify-protocols ff850068 6
  [] protocols ff850068 6 ff9c10a0
  [ use-ata-interface ff850068 6
  ] use-ata-interface ff850068 6
] open ff850068 6 ffffffff
[ decode-unit ff850068 6 ffbde61b 1
] decode-unit ff850068 6 0
[ open ff850068 6
  [] protocols ff850068 6 ff9c10a0
  [ get-my-protocol ff850068 6
    [ get-my-protocol ff850068 6 0
      [] protocols ff850068 6 0 ff9c10a0
    ] get-my-protocol ff850068 6 0
  ] get-my-protocol ff850068 6 0
  [] kataprotocol ff850068 6 0 1
  [] katapiprotocol ff850068 6 0 2
] open ff850068 6 0
[ close ff850068 6
] close ff850068 6
[ close ff850068 6
] close ff850068 6

can't OPEN device
 ok
0 >
 
Telnet trace (it definitely should be ultra0). Looks like it's trying to speak IDE?
If anyone wants to follow the code for this, my Open Firmware Forth dumps for 4.4.7f1 and 4.4.8f2 are at:
https://68kmla.org/bb/threads/g4-mdd-ram-recognised-at-wrong-size.52427/post-595230
They have code for multiple ATA controllers. The one we're looking at is the only one that has ata100base so follow open from there.

It's trying to detect the protocols of the primary and secondary devices.
The protocols are stored to protocols. Valid values are 1=kataprotocol and 2=katapiprotocol but it stores 0,0.

Can you connect a real ATAPI device to this connector and see how the trace looks then, so we can see where it goes wrong or so we can have an example that does not go wrong.
 
This machine is running the latest from the G4 MDD fw update, if that helps. I think that's 4.4.8f2?

I tried the DVD-ROM on the ultra0 spot. Because of the setup of the machine, this was quite annoying and required a vertical orientation, since I want to use the real Ultra-ATA hd cable for CS and controlling the experiment.

I first checked to see if it would boot a CD-ROM (ASD 215, some debian) and it did not. OS9 did not see it, and Disk Utility in Tiger spun forever. Possibly the vertical orientation is not ok, but it did seem to spin fine.

I then tried the ZuluIDE where the DVD-ROM was, with CS set to off (master). This did not show up on the desktop, and hung multi-boot. It hard hung Disk Utility in Tiger, but this may relate to mucking around in zuluide.ini, need to start over there.

It's too hot in the office to muck around more with the machine, but I'll try to get traces of these configs in the next few days.
 
Maybe there's an issue with timeouts?

openwait is 100 ms.

drive-select has 1 ms after selecting device.

wait-bsy has 32 seconds timeout but it's not timing out because status register is never 0x80 (kbsy). It checks the primary and secondary devices.

Maybe there's an issue with the interface protocol detection?
It writes 8 (kdevctlone) to the device control register for each device before calling identify-protocols (2 ms delay after each write).

identify-protocols does the following:
Code:
wait-bsy
set-drive-select \ primary
wait-bsy
for device in primary secondary do
    wait-bsy
    set-drive-select \ device
    wait-bsy
    if chi@,clo@ are 0xeb,0x14 then
        do some weird stuff like assume primary is atapi ... what's the dup for?
        ...
    else
        if cnt@ == 1 and num@ == 1 and (sts2@ & 0x51) == 0x50 then
            kataprotocol
        else
            no protocol
done

Need to look at the ATA and ATAPI specs to understand these protocol tests.
 
The ATA/ATAPI protocol detection method is described at:
https://wiki.osdev.org/ATAPI
DingusPPC has method device_set_signature for AtapiBaseDevice and AtaBaseDevice.

If ZuluIDE has similar methods, then is it expecting a different trigger for setting the signature? Something different than what Open Firmware is doing?
 
It writes 8 (kdevctlone) to the device control register for each device before calling identify-protocols (2 ms delay after each write).
8 is ATAPI_SOFT_RESET but that's for the command register, not the control register so ignore that.

Mac OS X has these definitions:
Code:
/* Task file definition *** Device Control Register *** */
enum {
    bATADCROne                    = 3,                            /* bit number of always one bit*/
    bATADCRReset                = 2,                            /* bit number of reset bit*/
    bATADCRnIntEnable            = 1,                            /* bit number of interrupt disable*/
    mATADCROne                    = 1 << bATADCROne,                /* always one bit*/
    mATADCRReset                = 1 << bATADCRReset,            /* Reset (1 = reset)*/
    mATADCRnIntEnable            = 1 << bATADCRnIntEnable        /* Interrupt Disable(0 = enabled)*/
};
But Mac OS X doesn't use *CROne.
For Open Firmware, I guess kdevctlone exists because every write to the device control register should have that bit set because it's always supposed to be set? I haven't seen this mentioned in a specification though.

These say bit 3 is reserved:
  • "X3T13 2008D Revision 7b" "Information Technology - AT Attachment-3 Interface (ATA-3)" "27 January 1997"
  • "T13 1321D Revision 3" "Information Technology - AT Attachment with Packet Interface - 5 (ATA/ATAPI-5)" "29 February 2000"
  • "T13 1410D Revision 3" "Information Technology - AT Attachment with Packet Interface - 6 (ATA/ATAPI-6)" "30 October 2001"
  • "T13 1532D Volume 1 Revision 1a" "Information Technology - AT Attachment with Packet Interface - 7 Volume 1 (ATA/ATAPI-7 V1)" "31 October 2002"

Actually, I found these which show bit 3 is set to 1. I don't know when that changed to a reserved value.
  • "ANSI x3T9.2/90-143 Rev 2.3" "ATA (AT Attachment) "January 30, 1991"
  • "ANSI x3.221" "Revision 3.3A?" "Information Technology - AT Attachment Interface for Disk Drives" "January 3, 1993"
  • "X3T9.2 791D "Revision 4" "Information technology - AT Attachment Interface for Disk Drives" "17-MAR-93"
Some other documents are listed at
http://www.os2museum.com/wp/historical-ata-standard-drafts/
The oldest one has bit 3 as undefined.
 
Back
Top