http://www.scs.cs.nyu.edu/aos/lab/hardware/ATA-d1410r3a.pdfpage 103, the atapi "download microcode" command,
This command enables the host to alter the device’s microcode. The data transferred using the DOWNLOAD
MICROCODE command is vendor specific.
All transfers shall be an integer multiple of the sector size. The size of the data transfer is determined by the
contents of the LBA Low register and the Sector Count register. The LBA Low register shall be used to extend
the Sector Count register to create a 16-bit sector count value. The LBA Low register shall be the most
significant eight bits and the Sector Count register shall be the least significant eight bits. A value of zero in
both the LBA Low register and the Sector Count register shall specify no data is to be transferred. This allows
transfer sizes from 0 bytes to 33,553,920 bytes, in 512 byte increments.
The Features register shall be used to determine the effect of the DOWNLOAD MICROCODE command. The
values for the Features register are:
- 01h – download is for immediate, temporary use.
- 07h – save downloaded code for immediate and future use.
Either or both values may be supported. All other values are reserved.
but if all I need to do, is write a program that sends that command, and then saves the result why do there need to be special versions of the program depending on which chipset the drive runs? ah well, I'll try to figure out how to write an assembley program that runs on a dos boot disk.