BrudnopisMikeya

From Atariki

Jump to: navigation, search
Register summary for selected Western Digital floppy drive controllers

Unified format
Greg Cook, 19/Aug/2005

Command register

Model
WD2795/WD2797            x   x   x   x   . . . x    x   . . x   . x
WD2791/WD2793            x   x   x   x   . . x .    x   . x .   . x
WD1773                   x   x   x   x   . x . .    x   . x .   . x
WD1770/WD1772            x   x   x   x   x . . .    x   x . .   x .

Type    Command         b7  b6  b5  b4     b3      b2    b1     b0
   I    Restore          0   0   0   0   H X h h    V   r r r   r r
   I    Seek             0   0   0   1   H X h h    V   r r r   r r
   I    Step             0   0   1   u   H X h h    V   r r r   r r
   I    Step in          0   1   0   u   H X h h    V   r r r   r r
   I    Step out         0   1   1   u   H X h h    V   r r r   r r
  II    Read sector      1   0   0   m   H S S L    E   0 C U   0 0
  II    Write sector     1   0   1   m   H S S L    E   P C U   a a
 III    Read address     1   1   0   0   H 0 0 0    E   0 0 U   0 0
 III    Read track       1   1   1   0   H 0 0 0    E   0 0 U   0 0
 III    Write track      1   1   1   1   H 0 0 0    E   P 0 U   0 0
  IV    Force interrupt  1   1   0   1   I I I I    I   X I I   X I

Parameters:
        0 = always 0
        1 = always 1
        X = not used (reset to 0)

        a = Data address mark
                0 = Data address mark
                1 = Deleted-data address mark
        C = Side compare
                0 = Disable side compare
                1 = Enable side compare
        E = Settling delay
                0 = No delay
                1 = Delay: 15 ms for WD279x at 2 MHz, and WD1772
                           30 ms for WD279x at 1 MHz, and WD1770/WD1773
        h = Head load
                0 = Unload head at beginning
                1 = Load head at beginning
        H = Motor On
                0 = Enable spin-up sequence
                1 = Disable spin-up sequence
        I = Interrupt
                I0 = Interrupt on not ready to ready transition
                I1 = Interrupt on ready to not ready transition
                I2 = Interrupt on index pulse
                I3 = Interrupt immediately
                        0 = No interrupt
                        1 = Raise interrupt on this condition
                I0..I3
                        all 0 = terminate current command without interrupt

        L = Interpretation of ID field
                The sector length in bytes is determined from the following
                table:
                   LSBs of sector length in ID field
                          00      01      10      11
                L
                0        256     512    1024     128
                1        128     256     512    1024
                WD177x and WD2791/3 operate with L = 1.
        m = Multiple sectors
                0 = Single sector
                1 = Multiple sectors
        P = Write precompensation
                0 = Enable write precompensation
                1 = Disable write precompensation
        r = Stepping rate
                            Model, clock frequency
                         WD1770  WD1772  WD279x  WD279x
                        /WD1773          @2 MHz  @1 MHz
                r1  r0
                 0   0     6 ms    6 ms    3 ms    6 ms
                 0   1    12 ms   12 ms    6 ms   12 ms
                 1   0    20 ms    2 ms   10 ms   20 ms
                 1   1    30 ms    3 ms   15 ms   30 ms
        S = Side comparand
                0 = Compare for side 0
                1 = Compare for side 1
        u = Update track (T in 279x datasheet)
                0 = No update
                1 = Update track register
        U = Update SSO (Side select)
                0 = Update SSO to 0
                1 = Update SSO to 1
        V = Verify on track
                0 = No verify
                1 = Verify on destination track

Status register

Model
WD2795/WD2797           . x   . x   . . x   . x   . x   x   x   x
WD2791/WD2793           . x   . x   . . x   . x   . x   x   x   x
WD1773                  . x   . x   . x .   . x   . x   x   x   x
WD1770/WD1772           x .   x .   x . .   x .   x .   x   x   x

Type    Command         b7    b6     b5     b4    b3   b2  b1  b0
   I    (all type Is)   M n   X w   s h h   R R   c c   T   I   b
  II    Read sector     M n   X 0   a a a   R R   c c   d   q   b
  II    Write sector    M n   w w   a f 0   R R   c c   d   q   b
 III    Read address    M n   X 0   a 0 0   R R   c c   d   q   b
 III    Read track      M n   X 0   a 0 0   R 0   c 0   d   q   b
 III    Write track     M n   w w   a f 0   R 0   c 0   d   q   b
  IV    Force interrupt
        -while busy     - -   - -   - - -   - -   - -   -   -   0
        -while idle     M n   X w   s h h   R R   c c   T   I   0
   -    Idle            M n   X w   s h h   R R   c c   T   I   b

Parameters:
        0 = always 0
        X = not defined
        - = retains previous value

        a = Data address mark
                0 = Data address mark
                1 = Deleted-data address mark
        b = Busy
                0 = controller idle
                1 = controller busy
        c = CRC error
                0 = CRC verified
                1 = CRC error
        d = Lost data (late register service)
                0 = no data lost
                1 = data lost
        f = Write fault
                0 = no write fault
                1 = write fault
        h = Head loaded
                0 = drive head not loaded
                1 = drive head loaded
        I = Index pulse
                0 = disc not at index mark (/IP = high)
                1 = disc at index mark (/IP = low)
        M = Motor on
                0 = drive motor off
                1 = drive motor on
        n = Not ready
                0 = drive ready
                1 = drive not ready
        q = Data request
                0 = Data register does not require service
                1 = Data register requires service
        R = Record not found
                0 = record found / verified on track
                1 = record not found / seek error
        s = Motor spin up sequence completed
                0 = spin up not completed
                1 = spin up completed
        T = Track 0
                0 = drive head not at track 0 (/TR00 = high)
                1 = drive head at track 0 (/TR00 = low)
        w = Write protect
                0 = disc write enabled
                1 = disc write protected

Notes:

The WD2791 and WD2795 have inverted data bus lines.
As noted elsewhere, the Busy flag may be left set when the FDC is idle, if
the FDC has been reset while a command was in progress.
If the WD1773 or WD279x is idle, and n = 1, flags c,h,I,R,T and w may be
invalid and contain 0.
The WD1770/2 status register description is taken from the datasheet; some
flags may have fixed values for certain commands, as with the other models.

References:

1770/2/3 Datasheet
        http://www.funet.fi/pub/cbm/documents/chipdata/wd177x/index.html
177x datasheet extracts and BBC disc hardware summary
        http://www.nvg.org/bbc/doc/wd1770.txt
        http://www.poppyfields.net/acorn/tech/1770.shtml
279x datasheet and application notes
        http://tcg.speccy.cz/zoom/files/wd2797.pdf
BBC Datasheets
        http://members.aon.at/~musher/bbc/datasheets.htm

Disclaimer:

The documentation in this file is for information only.  For a more
authoritative specification, refer to the manufacturer's original
datasheets.  The author does not guarantee the suitability of the hardware
for use in any particular application, especially life support and/or
critical systems; for authoritative information on suitability refer to the
manufacturer.  Whilst every effort has been made to maintain accuracy,
this file may contain errors, inaccuracies or omissions which may or
may not also be present in the datasheet(s).  Specifications are subject to
change without notice.  This documentation is supplied without warranty,
not even the implied warranties of merchantability or fitness for a
particular purpose. In no event shall the author or his suppliers be liable
for any loss, damage, injury or death, of any nature and howsoever caused,
arising from the use of, or failure, inability or unwillingness to use,
this documentation.

Greg Cook, [email address]
Personal tools