From: CONRADUS@plearn.edu.pl (KMK) Newsgroups: comp.sys.atari.8bit Subject: A message to OS/DOSdevelopers Date: 28 Dec 1995 15:20:18 -0500 A message to Operating Systems/Disk Operating Systems developers. Dear developer! We are pleased to present you a preliminary document about our IDE hard drive interface for Atari 130XE (and compatible) computers. As existing Disk Operating Systems aren't able to use all the capabilities we provided, we are kindly asking you to upgrade the latest versions of your work and implement the specific IDE features, those have been described below. The four general problems we found trying to use any of the existing DOSes, are as follows: 1) All DOSes we tested, i.e. SpartaDOS 3.2g, SpartaDOS X 4.20, MyDOS 4.53 and BWDOS 1.10, when they have been executed, seem to force the DUNIT (?0301) value to ?01. Such action is not necessary, because the DUNIT is already set by the XL OS's RESET routines, and is obnoxious, because, as a result, the DOS is unable to read its config files, when the system has been started from a partition other, than D1:. 2) All the DOSes we tested are unable to read/write 512-byte sectors, so they are unable to work in the IDE native mode (see below). The interface provides the emulation mode to handle 256- byte sector operations, but, as a result, the drive is unable to reach its full speed. Especially any writes to the hard drive are very slow. The implementation of the 512 byte allocation units may also be profitable in the future, if we decide to add support for DMA transfers. 3) All the DOSes we tested are unable to handle big partitions (i.e. over 16 MB limit). The implementation of the 512 byte allocation units may solve this problem in a part (the limit would be 32 MB per partition then), but, if you decide to implement big partitions handling, we advise you to consider about using the 23-bit sector addressing in conjuntion with the larger allocation units (see below for details). 4) All the DOSes we tested are unable to handle disks D10-D15. Operating Systems developers please note, that there is no necessity to set the DUNIT value in the OS BOOT routine, as the DUNIT is already set by previous RESET routines. We hope, that you will take these problems into consideration, decide to support the features described below and don't hesitate to send us your comments, if any. Regards Konrad Kokoszkiewicz E-mail: conradus@plearn.edu.pl S-mail: ul. Tomaszowska 95/37 PL-26-420 Nowe Miasto nad Pilica POLAND *** IDE Hard Drive Interface v.1.0 - a preliminary document Copyright (c) 1995-1996 by Jacek Zuk and Konrad Kokoszkiewicz Made in Poland *** The IDE package contains: 1) the IDE interface 2) a power supply 3) a cable to connect the interface with a drive 4) utilities disk with MyDOS 4.53 5) this document Index rerum I. Introduction II. Capabilities overview III. How to make it work (step by step) IV. Keystrokes V. Write-protection feature VI. Executing non-DOS software VII. Dual drive configuration VIII. Software development information IX. Memory usage X. Error messages I. Introduction Seven years ago, when I first heard about hard drives for the Atari 8-bit, a 20 MB SCSI device's price was over 600 USD and, of course, was out of reach for people in a country on the wrong side of the Iron Courtain, where wages were about 20 USD per month. The 1050 floppy drive was a dream - what would I say about the hard one...? Over the next six years many things have been changed. Among others, the Iron Courtain got rusty, we have started earning more money, got some new Atari computers and, simultaneously, the prices of hard drives have gone down dramatically... and one day I realised, that it is possible to obtain an IDE hard drive for the beloved 8-bit Atari with very reasonable price! But there still was no documentation and the only one, that I knew, was a theory about writing 'new device' handlers for the XL operating system... The most important thing on my "way to the hard drive" has happened, when a friend of mine has found a "Technical Reference Manual" for a Caviar WDAC2200. I read this paper very carefully, then went to Jack - a person, who looks to know everything about wires and other strange gadgets, those have been fixed inside and seem to make it work. About a week later Jack said, that there was no objections (contraindications, as we used to say) to build an interface - so the project started. The last year we spent thinking, talking, building the hardware (Jack), writing the software (me), testing, fixing bugs, catching incompatibilities, and learning, learning, learning. We have discovered a lot of strange things about Ataris and IDE hard drives (some of them have been mentioned below). Finally, we are pleased to present you our results - we tried to make them as professional, as it have been allowed by the limited (2k) ROM space, not very "elastic" operating system and not very great processing power of the Atari 8-bit computer. I hope you will agree, that we did a good job. II. Capabilities overview The Interface's internal software provides two modes: native and emulation. The native mode uses a 512 byte physical block as a logical data sector, the emulation mode uses the physical block to store two 256 byte logical data sectors. ALL existing DOSes require the emulation mode to work properly. Maximum drive capacity: 8388607 physical blocks on each device. Maximum number of partitions: 15 Maximum capacity of a partition: 8388607 logical sectors Logical sector length: 256 or 512 bytes (larger blocks will be implemented in the future) Average speed: 58 kilobytes per second (native mode, R/W) 32 kilobytes per second (emulation mode, reading) 7 kilobytes per second (emulation mode, writing) Booting from any partition Write protection capability 8 jumpers to set the device number for the operating system Note, that ALL existing DOSes limit the partition size to 16 MB. III. How to make it work (step by step) 1) Make sure, that the power on your computer is turned off. 2) Insert the interface to the connector at the back side of the computer. 3) Connect the interface and a 3,5" IDE drive with the cable. Caution: You may damage the drive if the interface cable is not connected properly. Make sure, that pin 1 on the cable (red line) is connected to pin 1 on the drive and on the interface (red dot). 4) Connect the power supply and the drive. 5) Insert the utilities disk into drive 1. 6) Turn on the power on the hard drive and on the computer holding down the SHIFT key. Make sure, if the drive is spinning up properly. If not, turn the power off, check the connections and try again. Note, that some very old drives need A LOT of power, so our power supply may not be sufficient. 7) Be patient - the Interface waits some seconds when the drive is spinning up. 8) When the MyDOS is ready to use, execute the FDISK.COM file. 9) A menu should appear. If you see a message like "Device not found" instead, please turn the power off, check the connection between the interface and the computer, then try again. Check the jumper position. 10) Select the "Surface test" from the main menu. Your drive will be tested for bad sectors. If the test finishes without any message, the drive is in good condition - no bad sectors have been found. 11) Select the "Partitioning" from the main menu. "Total" will indicate you total amount of 512 byte sectors, that have been found on the drive, "Remain" - total amount of sectors, that haven't been allocated yet, "Specs" will show a number of cylinders, heads and sectors per track. 12) Use arrows to select a drive you want to be a partition. 13) Press the RETURN key and type in a number of sectors, that you want to be allocated to the partition. Note, that it is a number of real, 512 byte sectors, so if you specify 32767, the DOS partition will have 65534 logical, 256-byte sectors. 14) Press RETURN to confirm the number of sectors or press ESC key to cancel. 15) If you want to have more partitions, repeat the last three steps as many as you want. 16) Press the TAB key and select a partition, that you want to be the BOOT partition. If you are the SpartaDOS X user and you want to have the CONFIG.SYS on the hard drive, the BOOT partition must be D1:, so you should change the physical number of your floppy drive to D2: or another. 17) Press RETURN key to set the BOOT partition. 18) Press the TAB key to move the cursor to the menu at the bottom right corner of the screen. 19) Select the "Opts" option. 20) Select the boot type according to your system configuration: - "control", if you want to boot up MyDOS (or another DOS) from other partition than D1: The interface will take full control over the boot process. - "pass", if you want to boot up MyDOS (or another DOS) from D1: The interface will pass the control over the boot process to the operating system. Select this option, if you have any troubles with the "controlled" boot up - the interface, taking the control over the boot process, uses some hints that may not work with some DOSes, cartridges or upgraded (customized) operating systems. You MUST select this option, if you are the SpartaDOS X user. 21) Press ESC to exit the "Options" menu 22) Select the "Write" option to write the new partition table to the drive. 23) Press ESC to return to the main menu 24) Select the "Soft format" option from the menu. The FDISK will attempt to build new directories on the attached partitions. Note, that the SpartaDOS 3.2 does not provide such action - to do it, you must use a separated formatter, as the P_FORMAT.COM. 25) Exit the FDISK. 26) Write the DOS file(s) to the BOOT partition. If you are the MyDOS user, select the "H" option from the DUP menu. If you are the SpartaDOS 3.2 user, copy the DOS to the BOOT partition and use the BOOT command to make the disk bootable. 27) Press SELECT/RESET to cause the cold boot. The DOS will load itself from the drive - the installation process is completed. Some IDE drives used to clear the BUSY and assert the READY bits in their internal status registers *before* the spin-up process is finished - the drive looks to be ready, but isn't ready in fact and cannot execute any commands (very strange, by the way...). To prevent such troubles during power up, the internal software waits about 5 seconds before taking any action with the IDE controller. This delay is not necessary during the cold boot, that has been caused by pressing SELECT/RESET or via OS entry RESETCD (?E477). In such case the internal software uses a fast initialization method. However, if you turn the power switch off and on very quickly, the initial routines may not recognize this boot process as a real power up. As a result, the boot process will crash. To prevent such problems, after turning the power off, you should always wait 10-15 seconds before turning it on again. This time should be sufficient to invalidate internal flags, that have been located in RAM. IV. Keystrokes SHIFT/RESET disables the drive. The drive will remain spinning, but the partitions will not respond to operating system requests (error 138). To enable it again just press the RESET key. SELECT/RESET forces the cold boot. V. Write-protection feature The IDE hard drive interface provides the write-protection feature to minimize a risk of accidental data damage caused by viruses, damaged software or children. When a partition is locked, there's NO POSSIBILITY to write data to this partition or unlock it by asserting commands, causing a cold boot or turning the power off and on. Damaging a write-protected partition by writing accidental data to random memory locations is also *practically* impossible - the risk is very small. VI. Executing non-DOS software with the hard drive Some software, especially games and demos, have their own disk formats and cannot be copied to a partition. However, the IDE software provides limited capabilities to execute such programs. If you selected the "controlled" hard drive boot when partitioning the drive and your BOOT partition is not the D1:, you may run the non-DOS disk from the floppy drive. To do it, insert the disk into the floppy disk drive then press SELECT and RESET keys holding down the SHIFT key. The internal software of the IDE Interface will pass its initialization routines and your computer will boot up from the floppy. The hard drive will be "invisible" for the system. If you want to execute such software from the hard drive, you must provide a small partition to use it in such manner. Though the D10-D15 partitions are invisible for existing operating systems and cannot be accessed by DOS, they may be booted as well. When you are partitioning your drive, create a small (up to 520 physical blocks) disk, for example D10:. When you complete the installation and make the drive work, execute the FHCOPY.COM file from the utilities disk, then copy your floppy to the D10:. Now execute the FDISK, select the "Partitioning" option from the main menu, then press the TAB key twice to move the cursor to the menu at the bottom right corner of the screen. Select the "Opts" option, then set the "Drive redirection" to D10:. If the "controlled" boot-up has been selected, you must change it now to the "pass" mode. Write new partition table, exit the FDISK and reboot the system - the non-DOS program will load itself from the hard drive. To return to the previous configuration, insert the utilities disk to your floppy disk drive, reboot the system holding down the SHIFT key, then execute the FDISK, reset the "Drive redirection" to D1: and "Boot type" to its previous state, write the new partition table, exit the FDISK and reboot the system. VII. Dual drive configuration The IDE drive interface is able to handle two IDE devices configured as master and slave drives (please refer the drive manual to connect it and set up properly). However, some drives, when they are configured to work as the slave device, used to wait some seconds before they start spinning. For this reason, the Interface DOES NOT INITIALIZE the slave drive during power up or reset. It would make little sense, because the drive is not spinning (i.e. is not ready) at that time. As a result, the slave drive remains not initialized, even if the boot process has been finished and the system looks to be ready to use. If the slave drive have finished the spin-up process, there are two ways to make it work properly: 1) assert the ALL RESET command (see next section), or 2) force the system to read a sector from any partition, that have been allocated to the slave drive - if the drive is ready, it will be recalibrated automatically. Please DO NOT start the operating system from the slave drive partitions. VIII. Software development information The IDE drive partitions operate as normal floppy drives or ramdisks and can be accessed via OS DISKINT (?E453) and SIOINT (?E459) routines. All the partitions recognize the following commands: 1) Standard subset R - read a sector - this command reads a specified logical sector from a specified partition. It reads ALWAYS THE WHOLE LOGICAL SECTOR, i.e. 256 or 512 bytes, according to the current mode and regardless of the DBYT value. The sector number is a 24-bit value, the most significant byte (now called DAUX3) is located at ?0307 (this byte was unused by the XL OS). Sector numbers less than ?000001 or greater than maximum sector number for the specified partition are invalid and will cause the error 144. P - put a sector - writes data to a specified logical sector on a specified partition. There are the same restrictions, as mentioned above. This command will return status 144 when attempting to execute on a write-protected partition. W - write a sector - the same, as "P" command. S - read status block - transfers the 4-byte disk status to the memory. The bit of the first byte are as follows: 7 - not used by the hard drive 6 - write protection enabled 5 - double density drive (always 1) 4 - master present (usually 1) 3 - slave present 2 - not used by the hard drive 1 - not used by the hard drive 0 - not used be the hard drive The second byte provides reversed (eor'ed with ?FF) value of the IDE controller error register. The bits are as follows: 7 - BBD - Bad block detected 6 - ECC - Error correction code (uncorrectable error) 5 - NUL - unused, always 1 4 - IDNF - ID not found (target sector could not be found) 3 - NUL - unused, always 1 2 - AC - Aborted command 1 - TK0 - Track 0 error (unable to find a valid track 0) 0 - DAMNF - Data address mark not found The normal (default) value of this byte is ?FF. The next byte has a dummy value ?E0. The last byte of the status block holds the number of retries for the software IDE handler in ROM. N - read configuration - reads the 12-byte PERCOM block to the memory. The values returned by a partition are as follows: 0 - number of tracks (always 1) 1 - revision number (?10 = 1.0) 2 - total number of logical sectors, the middle byte 3 - total number of logical sectors, the low byte 4 - total number of logical sectors, the high byte 5 - additional information: bit 3 - IDE hard drive partition (always 1) bit 2 - double density drive (always 1) bit 1 - 8 inch floppy disk drive (always 0) 6 - number of bytes per logical sector, high byte 7 - number of bytes per logical sector, low byte 8 - unused, always ?FF 9 - value ?49 10 - value ?44 11 - value ?45 The last three bytes contain an identifier of the hard drive type ("IDE"). 2) Specific ones ?E6 - sleep drive - stops the drives and deactivates their internal controllers. See ALL RESET command for the DCB variables details. ?E7 - all reset - resets, recalibrates and reinitializes both hard drives. It is the only way to exit the Sleep mode. This command needs the number of any partition stored to the DUNIT (?0301). The master drive must be present while asserting this command, otherwise the timeout error will occur. ?EC - identify drive - transfers the 512 bytes of data, that specify the drive's parameters. The fields are as follows (F = fixed value, V = variable, R = reserved, should be zero): 0 - vendor specific information, bits are as follows: 15 - 0, reserved for non-magnetic devices (F) 14 - vendor specific (F) 13 - vendor specific (F) 12 - vendor specific (F) 11 - vendor specific (F) 10 - vendor specific (F) 9 - vendor specific (F) 8 - vendor specific (F) 7 - removable media device, if 1 (F) 6 - removable controller and/or device, if 1 (F) 5 - vendor specific (F) 4 - vendor specific (F) 3 - vendor specific (F) 2 - vendor specific (F) 1 - vendor specific (F) 0 - reserved (R) 2 - number of cylinders (F) 4 - reserved (R) 6 - number of heads (F) 8 - vendor specific 10 - vendor specific 12 - number of sectors per track (F) 14 - vendor specific 16 - vendor specific 18 - vendor specific 20-39 - serial number, ASCII characters (F) 40 - vendor specific 42 - vendor specific 44 - number of ECC bytes transferred on LONG operations (F) 46-53 - firmware revision, ASCII characters (F) 54-93 - controller model number, ASCII characters (F) 94 - numbers of sectors/interrupt R/W multiples, bits: 15-8 - vendor specific 7-0 - ?00 = READ/WRITE MULTIPLE not implemented (F) ?01-?FF = maximum number of sectors that can be transferred per interrupt on READ/WRITE MULTIPLE commands (F). 96 - reserved (R) 98 - capabilities, bits: 15 - reserved (R) 14 - reserved (R) 13 - 1 = standard standby timer values are supported 0 = standby timer values are vendor specific (F) 12 - reserved (R) 11 - 1 = IORDY supported (F) 0 = IORDY may be supported (F) 10 - 1 = IORDY can be disabled (F) 9 - 1 = LBA supported (F) 8 - 1 = DMA supported (F) 7-0 - vendor specific (F) 100 - reserved (R) 102 - PIO data transfer cycle timing (F) 104 - DMA data transfer cycle timing (F) 106-511 - reserved All values are in standard low/high convention. Some parameters are defined as a string of ASCII characters. For the string "Copyright", the character "C" is the first byte, "o" is the second byte etc. When such fields are transferred, the order of transmission is: - the 1st character ("C") is on bits 15 through 8 of the 1st word - the 2nd character ("o") is on bits 7 through 0 of the 1st word - the 3rd character ("p") is on bits 15 through 8 of the 2nd word - the 4th character ("y") is on bits 7 through 0 of the 2nd word etc. Note, that the DMA transfers, although may be supported by the drive itself, may not be supported by the current version of the interface's hardware. Please also refer the SLEEP DRIVE command to get an information about the DCB variables. ?EE - force media change - forces the interface to re-read the partition table from the drive. All other commands will cause error 139 (negative acknowledge). Note, that the software does not provide a FORMAT DISK command - it hasn't been implemented to prevent an accidental data damage. The drive must be formatted using a separated program. Operating system developers should note, that the internal software of the IDE Interface changes the DUNIT (?0301) to the BOOT partition number during boot up. IX. Memory usage The Interface's internal software uses the following RAM locations: ?01 and ?34-?3C. The PDVMSK (?0247), PDVRS (?0248) and DCB variables (especially DAUX3 ?0307) should be used only in their proper functions (please DO NOT use them as temporary data registers!). The ?0400-?06FF area should also remain intact during the cold boot. X. Error messages You can get the following error reports from the IDE drive: 138 - Timeout error - attempting to read or write data to a partition, that is physically allocated to the slave drive, while the slave drive is busy, not ready or does not exist at all; or attempting to assert the ALL RESET command, while the master drive is not present. It may occur, if you accidentally disconnect the master drive or disconnect the slave drive without reconfiguring your system. It may also indicate a damaged partition table - please reboot your system. If this action doesn't cause any effect, you must use the FDISK to repair the partition table. See also section VII. - "Dual drive configuration". 139 - Invalid command 144 - Device done error: 1) the software attempted to write data to a write-protected partition. 2) the software attempted to read or write data outside of the limits, those are valid for the partition. 3) there is a bad sector on the partition. Please assert the "S" command to get the value of the internal IDE error register. 4) the interface's software is unable to handle your drive. Please run the FDISK and select the "Surface test" from the main menu. If the test fails and you know, that your drive is in good condition (no bad blocks) for sure, please assert the IDENTIFY DRIVE command (from a BASIC, for example), copy the buffer to a file and send the file to us. Konrad M.Kokoszkiewicz (KMK) E-mail: conradus@plearn.edu.pl -------------------------------------------------------------------------------- Craig Lisowski (clisowsk@mcs.kent.edu)