Disk Drives - what YOU are doing wrong! * Copyright 1988 Commodore-Amiga, Inc. * This information is provided "as is"; no warranties are made. All * use is at your own risk. No liability or responsibility is assumed. * Permission granted to reproduce, provided this notice remains. A distressing number of our third party hardware and software developers have been using the floppy disk drives in an incorrect manner. If you use the trackdisk.device you are safe. If you go directly to the hardware, or build hardware, then this article is for you. For Hardware types: 1> The disk drive light should not flash on and off during access. Our drive activity light reflects the state of the motor. Typically the LED signal is driven by IN_USE (pin 4). 2> For compatibility with future systems, we require that drives refuse to step past track zero. That is, if the head is already at zero, and an outward step is received, it should not move the head. The drive must still reset it's "DISKCHANGE" latch, however. 3> The critical specifications for our 90mm (3.5") drives are: 3ms track-to-track. 15ms settling time. >80% radial alignment using a Dysan Alignment disk. 500ms motor spinup. 800ms maximum power on delay. For Software types: This part is primarily directed at people who write custom boot-loaders for game software. Due to defective loaders, there are thousands of Amiga owners who can't load some games, and will NEVER BE ABLE TO BUY THEM. The ultimate source for information on drive timing comes from the manufacturer's specifications. This article simply highlights the most misused points. 1> Don't make bad assumptions. For example; if you depend on the motor being on, turn it on before use. Don't assume that your boot code will be entered with the disk drive or system in any reliable state. 2> **NEVER** use a loop like this for timing: move.w #$1000,D0 busy_wait dbra d0,busy_wait This fails to produce accurate timing under a large number of circumstances. The speed of the above loop depends on what CPU is installed in the system, what video mode is selected, what type of memory the program is in, in what relation to vertical blank the code executes in, what the blitter is doing, what interrupts are enabled and more other factors than you want to think about. The 8520 chip provides fast, easy timing. See the companion article entitled "How to waste time". 3> The STEP line must be used as a low-going pulse. The direction must be set up FIRST, with a separate write to the register. A typical use would be: or.b #%00000010,$bfd100 ;Set up direction and.b #%11111110,$bfd100 ;Pulse low nop ;Wait a bit nop ; " " " or.b #%00000001,$bfd100 ;Set it high again ;-- now wait 3 miliseconds for the head to ;-- get to the next track We specify that our drives must get to the next track within 3 miliseconds. Some drives will step considerably faster, others will fail at or before 2.8 miliseconds. When the direction of step is changed, the settling time must also be added (a total minimum delay of 18 miliseconds). Note that the TRACK ZERO sensor will not be valid until the head actually reaches the track. 4> When turning on the motor, wait for the READY signal to go low before reading or writing (steps are ok before then). Note that READY is only valid when the motor signal is ON. 5> To determine if a disk is in the drive, look at the DISKCHANGE signal. If it is low,the disk has been removed (and possibly inserted again) since the last check. Step the head to reset the latch and examine the current state. 6> Some code uses an extra track or two for storage or copy protection. We will not guarantee that our drives will have more than the normal 80 tracks. We will say that using one extra track is rather safe, two tracks is probably ok, and three tracks is a very bad idea. 7> After a disk write DMA has finished, a delay of 1.2 miliseconds is required before any other operations (drive select, step, head change, etc.). The type of disk drives we use have a gap between the erase head and the read-write head. The disk drive keeps the erase head enabled after the end of write gate to compensate for the gap. Failure wait out the delay may result in writing over innocent data on other tracks or sides. -Bryce Nesbitt