No XT-IDE users?
Chuck Guzis
cclist at sydex.com
Sun Aug 16 20:50:39 CDT 2015
On 08/16/2015 06:18 PM, Steven Hirsch wrote:
> What is the "Chuck mod"?
I'll try to make this brief (ha!). One of the problems with the
original XTIDE is that the data bus on a regular ATA drive is 16 bits.
(There used to be a mode that could be set to allow an ATA drive to
support 8-bit transfers, but that's long gone from most drives, now
almost solely present in the CF interface).
So the XTIDE would latch half the 16-bit bus on a read and make it
available at a different I/O address IIRC, 8 locations higher).
Reading, therefore became a matter of issuing an IN al,dx instruction,
storing the byte, then adjusting the address in dx (XCHG DX,some other
register) and repeating for the rest of the 16-bit word, adjusting dx
again back to the original and looping...
I observed that if the addressing of the drive was slightly modified by
swapping I/O address bits 0 and 2, one could put the two halves of the
16-bit register ad adjacent I/O addresses and let the 8088 (or V20) BIU
handle the input as a word operation. This means that the entire read
loop on an 8088 collapses to a "in ax,dx / stosw/ loop"
three-instruction sequence. On a V20, it's even simpler "rep insw".
The last I recall, writes couldn't use the BIU trick because of the way
the latch clocked data to the drive. You can't win 'em all. At least it
was no slower than the old way--and code tends to do far more reads than
writes.
Of course, this results in the other ATA registers being a little out of
normal sequence, but that's a simple code change.
--Chuck
More information about the cctech
mailing list