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, whattype 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 writegate to 
compensate for the gap.  Failure wait out the delay may
result in writing over innocent data on other tracks or sides.

                        -Bryce Nesbitt

