POLL - Disable polling of the drives. Defaults to “0”, polling enabled. When enabled, a single interrupt is
generated after a reset. No polling is performed while the drive head is loaded and the head unload delay has not
expired.
FIFOTHR - The FIFO threshold in the execution phase of read or write commands. This is programmable from 1 to
16 bytes. Defaults to one byte. A “00” selects one byte; “0F” selects 16 bytes.
PRETRK - Pre-Compensation Start Track Number. Programmable from track 0 to 255. Defaults to track 0. A “00”
selects track 0; “FF” selects track 255.
Version
The Version command checks to see if the controller is an enhanced type or the older type (765A). A value of 90 H
is returned as the result byte.
Relative Seek
The command is coded the same as for Seek, except for the MSB of the first byte and the DIR bit.
Table 44 - Head Step Direction Control
DIR
ACTION
0
Step Head Out
1
Step Head In
RCN - Relative Cylinder Number that determines how many tracks to step the head in or out from the current track
number.
The Relative Seek command differs from the Seek command in that it steps the head the absolute number of
tracks specified in the command instead of making a comparison against an internal register. The Seek
command is good for drives that support a maximum of 256 tracks. Relative Seeks cannot be overlapped with
other Relative Seeks. Only one Relative Seek can be active at a time. Relative Seeks may be overlapped with
Seeks and Recalibrates. Bit 4 of Status Register 0 (EC) will be set if Relative Seek attempts to step outward
beyond Track 0. As an example, assume that a floppy drive has 300 useable tracks. The host needs to read track
300 and the head is on any track (0-255). If a Seek command is issued, the head will stop at track 255. If a
Relative Seek command is issued, the FDC will move the head the specified number of tracks, regardless of the
internal cylinder position register (but will increment the register). If the head was on track 40 (d), the maximum
track that the FDC could position the head on using Relative Seek will be 295 (D), the initial track + 255 (D). The
maximum count that the head can be moved with a single Relative Seek command is 255 (D).
The internal register, PCN, will overflow as the cylinder number crosses track 255 and will contain 39 (D). The
resulting PCN value is thus (RCN + PCN) mod 256. Functionally, the FDC starts counting from 0 again as the
track number goes above 255 (D). It is the user’s responsibility to compensate FDC functions (precompensation
track number) when accessing tracks greater than 255. The FDC does not keep track that it is working in an
“extended track area” (greater than 255). Any command issued will use the current PCN value except for the
Recalibrate command, which only looks for the TRACK0 signal. Recalibrate will return an error if the head is
farther than 79 due to its limitation of issuing a maximum of 80 step pulses. The user simply needs to issue a
second Recalibrate command. The Seek command and implied seeks will function correctly within the 44 (D)
track (299-255) area of the “extended track area”. It is the user’s responsibility not to issue a new track position
that will exceed the maximum track that is present in the extended area. To return to the standard floppy range (0-
255) of tracks, a Relative Seek should be issued to cross the track 255 boundary. A Relative Seek can be used
instead of the normal Seek, but the host is required to calculate the difference between the current head location
and the new (target) head location. This may require the host to issue a Read ID command to ensure that the
head is physically on the track that software assumes it to be. Different FDC commands will return different
cylinder results which may be difficult to keep track of with software without the Read ID command.
SMSC DS – FDC37N869
Page 55
Rev. 11/09/2000