DC205_SWIFT_Specification_Rev_2

                 <<< CACHE::USER3:[NOTES$LIBRARY]DSSI.NOTE;1 >>>
                   -< Digital's Small Storage Interconnect >-
================================================================================
Note 78.3                             SWIFT                               3 of 3
LEDS::DEROO                                        5795 lines   3-AUG-1989 05:50
                    -< SWIFT Spec. Rev 2.0 (Last one (?)) >-
--------------------------------------------------------------------------------











             Title:      DC205   SWIFT Specification Rev. 2.0


             Date:       2 August 1989

             Authors:    John DeRoo NKS1-1/E4  DTN 291-7220  LEDS::DEROO
                         Rob  Frame NKS1-1/E4  DTN 291-7219  LEDS::FRAME
                         Anne Solli NKS1-1/E4  DTN 291-7101  LEDS::SOLLI

             Abstract:   This document  describes the user  requirements
                         for   DC205, SWIFT (SII With Integrated  Fault-
                         Tolerance).   This chip    features  high speed
                         handling of  the DSSI protocol through  the use
                         of   state  machines.  Also  featured  is error
                         detection capability.









                   F O R   I N T E R N A L   U S E  O N L Y

              Copyright ©1989 by Digital Equipment Corporation


         The information  in  this document is subject  to  change without
         notice and  should  not be  construed as a  commitment by Digital
         Equipment  Corporation.   Digital  Equipment  Corporation assumes
         no responsibility for any errors that may occur in this document.

         This  specification does  not  describe  any  program  or product
         which  is currently  available from Digital Equipment Corporation
         nor  does Digital Equipment  Corporation commit to implement this
         specification  in  any  program  or  product.   Digital Equipment
         Corporation  makes  no commitment  that  this document accurately
         describes any product it might ever make.

     DC205 Specification - Rev 2.0     FOR INTERNAL USE ONLY         Page 2


     1  REV 1.0 INITIAL DRAFT

     2  REV 1.1 SECOND PASS CHANGES


          1.  The first pass of the SWIFT chip allowed  selection  timeouts
              in  the  range  of  0  to 187.5 usec.  The second pass of the
              SWIFT chip increased the multiplication factor of the Timeout
              Register  from  12.5  usec  to  25.6  usec allowing selection
              timeouts in the range of from 0 to 384 usec.

          2.  The first pass of the SWIFT chip had a selection  abort  time
              of  0  nsec.   The  second  pass  of  the  SWIFT  changed the
              selection abort time to 25.6 usec as required in the Addendum
              to DEC STD 161.

          3.  The description  of  the  Timeout  Register  was  updated  to
              reflect  the  second  pass  change, in section 5.1.1.3 of the
              specification.

          4.  The description of the  buffer  count  field  in  the  buffer
              status word was reworded for clarity, in section 7.3.2 of the
              specification.

          5.  A typo was corrected in section 12.2 of the specification  in
              which  the  value written to the DICTRL register for external
              loopback testing should have been 0013H instead of 0011H.

          6.  Additional information regarding SWIFT's monitoring of HP_RDY
              was provided in sections 13.3 and 13.4 of the specification.

          7.  The procedure for adding onto a linked list  was  changed  in
              section 7.2.4 of the specification.




     3  REV 2.0 FINAL CLEANUP


          1.  Various typos and Index references cleaned up.

          2.  An additional timing parameter was added  to  SWIFT  register
              read and write cycles.  It specifies a minimum time value for
              HP_CS deassertion.

          3.  The description of the selection timeout bits of the  Timeout
              Register was changed disallowing the 25.6 usec multiplication
              factor to be multiplied by any  value  greater  than  6  Hex.
              This  decreases  the selection timeout range from 384 usec to
              153.6 usec.


     DC205 Specification - Rev 2.0     FOR INTERNAL USE ONLY         Page 3
     Table of Contents                                        3 August 1989


                                        CONTENTS

             1       REV 1.0 INITIAL DRAFT  . . . . . . . . . . . . . . . 2
             2       REV 1.1 SECOND PASS CHANGES  . . . . . . . . . . . . 2
             3       REV 2.0 FINAL CLEANUP  . . . . . . . . . . . . . . . 2


     CHAPTER 1       INTRODUCTION

             1.1     GOALS  . . . . . . . . . . . . . . . . . . . . . . 1-1
             1.2     NON-GOALS  . . . . . . . . . . . . . . . . . . . . 1-2


     CHAPTER 2       SWIFT OVERVIEW


     CHAPTER 3       POSSIBLE CONFIGURATIONS


     CHAPTER 4       PIN DESCRIPTION


     CHAPTER 5       SWIFT INTERNAL REGISTERS

             5.1     REGISTER DEFINITIONS . . . . . . . . . . . . . . . 5-5
             5.1.1     Control And Setup Registers  . . . . . . . . . . 5-5
             5.1.1.1   CSR - Control/Status Register  . . . . . . . . . 5-5
             5.1.1.2   ID - DSSI ID Register  . . . . . . . . . . . . . 5-6
             5.1.1.3   TMO - Timeout Register . . . . . . . . . . . . . 5-7
             5.1.1.4   BUFSIZ - Buffer Size Register  . . . . . . . . . 5-8
             5.1.2     DSSI Registers . . . . . . . . . . . . . . . . . 5-9
             5.1.2.1   TLP - Target List Pointer  . . . . . . . . . . . 5-9
             5.1.2.2   ILP - Initiator List Pointer . . . . . . . . .  5-10
             5.1.2.3   DSCTRL - DSSI Control And Status Register  . .  5-10
             5.1.2.4   OOVSIZ<4:0> - Other OVerhead SIZe  . . . . . .  5-14
             5.1.2.5   ISTAT - Interrupt Status Register  . . . . . .  5-15
             5.1.3     Diagnostic And Test Registers  . . . . . . . .  5-17
             5.1.3.1   DDB - DSSI Data Bus  . . . . . . . . . . . . .  5-17
             5.1.3.2   DCS - DSSI Control Signals . . . . . . . . . .  5-18
             5.1.3.3   DICTRL - Diagnostic Control Register . . . . .  5-18
             5.2     REGISTER INITIALIZATION VALUES . . . . . . . . .  5-20


     CHAPTER 6       DSSI OPERATION


     CHAPTER 7       SWIFT OPERATION - USER INTERFACE

             7.1     DSSI USER SELECTABLE OPTIONS . . . . . . . . . . . 7-1
             7.2     FORMATTING PACKETS AND BUFFERS . . . . . . . . . . 7-2
             7.2.1     Overview . . . . . . . . . . . . . . . . . . . . 7-2
             7.2.2     General Buffer Format  . . . . . . . . . . . . . 7-3
             7.2.3     Why SWIFT Has Multiple Data Block Formats  . . . 7-6
             7.2.3.1   Types Of DSSI Packets  . . . . . . . . . . . . . 7-7

     DC205 Specification - Rev 2.0     FOR INTERNAL USE ONLY         Page 4
     Table of Contents                                        3 August 1989


             7.2.3.2   SPT Bit  . . . . . . . . . . . . . . . . . . . . 7-7
             7.2.3.3   Where To Find The EDC For The Data Block . . . . 7-8
             7.2.3.4   Zero-Filling . . . . . . . . . . . . . . . . . . 7-8
             7.2.3.5   Other Overhead Size (OOVSIZ) . . . . . . . . . . 7-9
             7.2.4     Adding To A Linked List  . . . . . . . . . . . . 7-9
             7.2.5     Removing From A Linked List  . . . . . . . . .  7-10
             7.3     SWIFT TO USER - CONTROL/STATUS INFORMATION . . .  7-11
             7.3.1     Indicating That The Transfer Is Complete . . .  7-11
             7.3.2     Providing Transfer Status - Packet Status Word  7-11


     CHAPTER 8       TARGET OPERATION

             8.1     TARGET RECEIVING A PACKET - A STEP BY STEP 
                     DESCRIPTION  . . . . . . . . . . . . . . . . . . . 8-1
             8.2     TARGET COMPLETING A PACKET - 4 MODES . . . . . . . 8-5
             8.3     ADDITIONAL NOTES ON TARGET OPERATION . . . . . . . 8-6
             8.3.1     Target Timeout . . . . . . . . . . . . . . . . . 8-6
             8.3.2     Target Receiving A RST While On The Bus  . . . . 8-6


     CHAPTER 9       INITIATOR OPERATION

             9.1     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP 
                     DESCRIPTION  . . . . . . . . . . . . . . . . . . . 9-1
             9.2     INITIATOR COMPLETING A PACKET - 3 MODES  . . . . . 9-7
             9.3     ADDITIONAL NOTES ON INITIATOR OPERATION  . . . . . 9-7
             9.3.1     Initiator And Fair Arbitration . . . . . . . . . 9-8
             9.3.2     Initiator Timeout  . . . . . . . . . . . . . . . 9-8
             9.3.3     Initiator Receiving A RST While On The Bus.  . . 9-8
             9.3.4     Initiator Read Back Error Detection  . . . . . . 9-8
             9.3.5     Initiator Detecting A Selection Timeout  . . . . 9-8


     CHAPTER 10      DATA INTEGRITY MEASURES

             10.1    ERROR PROTECTION ON DSSI BUS . . . . . . . . . .  10-1
             10.2    BACKPORT ERROR DETECTION . . . . . . . . . . . .  10-1
             10.3    BUFFER PROTECTION  . . . . . . . . . . . . . . .  10-2
             10.3.1    Rotated XOR For Buffer EDCs  . . . . . . . . .  10-2
             10.3.1.1  How EDCs Are Calculated  . . . . . . . . . . .  10-2
             10.3.2    Sync Character Overlapping The Status Word . .  10-3
             10.4    SWIFT REGISTER PROTECTION  . . . . . . . . . . .  10-3
             10.4.1    Read Back  . . . . . . . . . . . . . . . . . .  10-4
             10.4.2    Register Write Protect . . . . . . . . . . . .  10-4
             10.4.3    Address Separation . . . . . . . . . . . . . .  10-4
             10.4.4    Sync Characters  . . . . . . . . . . . . . . .  10-5
             10.4.5    Effects Of Bad Data  . . . . . . . . . . . . .  10-5
             10.4.5.1  Interrupt Status Register  . . . . . . . . . .  10-5
             10.4.5.2  DSSI Control Register  . . . . . . . . . . . .  10-6

     DC205 Specification - Rev 2.0     FOR INTERNAL USE ONLY         Page 5
     Table of Contents                                        3 August 1989


     CHAPTER 11      ARBITRATING MODE

             11.1    ADDITIONAL FUNCTIONALITY . . . . . . . . . . . .  11-1
             11.1.1    Memory Arbitration . . . . . . . . . . . . . .  11-1
             11.1.2    Address Counter Control  . . . . . . . . . . .  11-2
             11.1.3    Reduced Address Capability . . . . . . . . . .  11-2


     CHAPTER 12      TEST STRATEGY

             12.1    LOOP BACK TESTING  . . . . . . . . . . . . . . .  12-1
             12.1.1    SWIFT As An Initiator  . . . . . . . . . . . .  12-2
             12.1.2    SWIFT As A Target  . . . . . . . . . . . . . .  12-4
             12.2    EXTERNAL CONNECTOR TESTING . . . . . . . . . . .  12-5
             12.3    OTHER TESTABILITY FEATURES . . . . . . . . . . .  12-6
             12.3.1    Test Bit In DICTRL . . . . . . . . . . . . . .  12-6
             12.3.2    SRD Bit In DICTRL  . . . . . . . . . . . . . .  12-6
             12.3.3    LOTC And BC  . . . . . . . . . . . . . . . . .  12-7


     CHAPTER 13      EXTERNAL OPERATIONS AND TIMING

             13.1    MICROPROCESSOR READ CYCLES . . . . . . . . . . .  13-1
             13.2    MICROPROCESSOR WRITE CYCLES  . . . . . . . . . .  13-3
             13.3    MEMORY READ CYCLES (NORMAL MODE) . . . . . . . .  13-6
             13.4    MEMORY WRITE CYCLES (NORMAL MODE)  . . . . . . .  13-8
             13.5    MEMORY READ CYCLES (ARBITRATING MODE)  . . . . . 13-10
             13.6    MEMORY WRITE CYCLES (ARBITRATING MODE) . . . . . 13-12


     CHAPTER 14      MATERIAL SPECIFICATIONS

             14.1    PACKAGE  . . . . . . . . . . . . . . . . . . . .  14-1
             14.2    PINOUT . . . . . . . . . . . . . . . . . . . . .  14-2
             14.2.1    Signal Name To Pin Number Mapping  . . . . . .  14-2
             14.2.2    Pin Name Mapped To IO-Cell Type  . . . . . . .  14-3
             14.2.3    Power And Ground Pin Requirements  . . . . . .  14-4
             14.3    POWER CONSUMPTION  . . . . . . . . . . . . . . .  14-4


     CHAPTER 15      ELECTRICAL SPECIFICATIONS

             15.1    DSSI BUS ELECTRICAL SPECIFICATIONS . . . . . . .  15-1
             15.2    NON-DSSI BUS ELECTRICAL SPECIFICATIONS . . . . .  15-1












                                   CHAPTER 1

                                  INTRODUCTION



     This document is the specification  for  SWIFT  (SII  With  Integrated
     Fault  Tolerance), a special purpose, high speed, DSSI interface chip.
     This chip contains much of the functionality of the existing SII chip.
     In addition, SWIFT provides error detection capability and the ability
     to pre-format data for disk drives.   This  is  provided  through  EDC
     generation  and  checking  on  the  memory  port and user-controllable
     buffer sizes.  The memory port of the SWIFT is modeled  after  the  II
     (Integrated  circuit  Interconnect), which specifies a common protocol
     and interface timing to be used  for  inter-chip  communication.   The
     intent  of  this  document  is  to define, in detail, the user visible
     interface.  This includes the memory interface signals and timing, the
     internal  registers  visible  to the microprocessor through the memory
     interface, and the behavior of the chip during execution.



     1.1  GOALS

     The goals of SWIFT are simply stated and include:

          1.  SWIFT should interface to the PHOENIX host port  (in  adapter
              master  mode)  without  any  "glue"  logic (excepting passive
              devices).

          2.  SWIFT should support  both  the  initiator  and  target  DSSI
              roles.

          3.  SWIFT  should  implement  synchronous  data  transfers  above
              4MB/s.

          4.  SWIFT should use CMOS technology so as not to dissipate  more
              than 1.0 watt.

          5.  SWIFT should implement as much DSSI-specific functionality as
              possible.    It   should   control   the   DSSI   bus  nearly
              autonomously.

          6.  SWIFT should be usable by both the RF disk  drive  group  and
              the Cirrus group.

     INTRODUCTION                                                  Page 1-2
     GOALS                                                    3 August 1989


          7.  SWIFT should include on-board DSSI drivers.




     1.2  NON-GOALS


          1.  SWIFT is not intended to be a generic chip,  usable  by  many
              groups.

          2.  SWIFT is not intended to support SCSI mode.













                                   CHAPTER 2

                                 SWIFT OVERVIEW



     SWIFT interfaces two "ports".   One  is  the  memory  backport.   This
     includes  sixteen  multiplexed  address/data lines along with an extra
     address line, an address strobe, a data strobe, and  a  ready  signal.
     This  allows  direct  interface  to  the Phoenix chip.  This port will
     allow only address-data-data-data cycles.  In other words, the address
     is  present  on  the  multiplexed  address/data lines when the address
     strobe is asserted.  Following this is a series of data strobes,  each
     terminated  by  the  receipt  of  a  ready signal.  These data strobes
     provide data to or expect data from sequential  addresses  in  memory.
     This  port  also  allows  a  microprocessor  to  interface to SWIFT by
     utilizing the same multiplexed address/data lines, along with  a  chip
     select,  an  address  enable  and  a  data  enable signal.  SWIFT will
     respond to the assertion of  chip  select  by  asserting  the  address
     enable output.  At the deassertion of the signal, SWIFT will latch the
     address and direction of the transaction.  Following that will be  the
     data  enable  output.  At the deassertion of this signal, data will be
     latched by SWIFT on a write to SWIFT operation or will be available to
     the external device on a read from SWIFT.

          The second port is the DSSI bus.   The  outputs  from  SWIFT  are
     designed  to  meet  the  driver  requirements  necessary  to interface
     directly with the DSSI bus.  SWIFT will generate and check parity  and
     support both the initiator and target roles.












                                   CHAPTER 3

                            POSSIBLE CONFIGURATIONS



     There are two planned uses of SWIFT:

          1.  RFxx Disk Drives - SWIFT fits into the system as follows:

                                           +-----+  +-----+  +-----+
                                           |68000|  | ROM |  | RAM |
                                           |     |  |     |  |     |
                                           +--+--+  +--+--+  +--+--+
                                             |        |        |
                                              +--------+--------+
                                              V
                     /-----\ +-------+     +-----+
                    /  DSSI \| SWIFT |<--->| PNX |<----> To Drive
                    \       /|       |     |     |          Electronics
                     \-----/ +-------+     +-----+
                                              |
                                              V
                                           +-----+
                                           | PNX |
                                           | MEM |
                                           +-----+
              In this case,  the  microprocessor  communicates  with  SWIFT
              through  the  Phoenix  (PNX)  chip.   All  DMA  transfers are
              directed to and from Phoenix memory.

          2.  Cirrus IO Modules - SWIFT fits  into  the  Cirrus  system  as
              follows:

     POSSIBLE CONFIGURATIONS                                       Page 3-2
                                                              3 August 1989



                                          +--------+
                                          |FIREWALL|
                                          |        |
                                          +--------+
                                              |
                                              V
                     /-----\ +-------+     +------+
                    /  DSSI \| SWIFT |<--->| SLIM |<---> to LANCE
                    \       /|       |     |      |
                     \-----/ +-------+     +------+
                                              |
                                              V
                                           +------+
                                           | BUF  |
                                           | MEM  |
                                           +------+
              In  this  case,  the  microprocessor  communicates  to  SWIFT
              through the SLIM chip.  All DMA transfers are directed to and
              from buffer memory.













                                   CHAPTER 4

                                PIN DESCRIPTION



     To perform all of the required functions, the SWIFT will be  in  a  68
     pin  Cerquad  package.   The  pins  can  be  easily divided into three
     categories.   Two  of  these  correspond  to  the   ports   previously
     mentioned,  namely  the  DSSI  port and the memory port.  The third is
     classified as miscellaneous, which  includes  power,  test  and  clock
     inputs.   The  pin  descriptions  are given below.  All signals can be
     characterized by a combination of the following signal types:

           o  (BID) - Bi-directional

           o  (IN) - Input

           o  (OUT) - Output

           o  (OD) - Open Drain Output

           o  (3S) - Tri-State


              DSSI port.  The SWIFT interface to the DSSI bus  is  composed
              of the following 19 pins:

              1.  DSSI_DATA<7:0> L.  (BID, OD).  DSSI data bus.

              2.  DSSI_PARITY L.  (BID, OD).  DSSI parity line.

              3.  DSSI_CMD L.  (BID, OD).  DSSI C/D line.

              4.  DSSI_SEL L.  (BID, OD).  DSSI SEL line.

              5.  DSSI_INPUT L.  (BID, OD).  DSSI I/O line.

              6.  DSSI_REQ L.  (BID, OD).  DSSI REQ line.

              7.  DSSI_ACK L.  (BID, OD).  DSSI ACK line.

              8.  DSSI_BSY L.  (BID, OD).  DSSI BSY line.

     PIN DESCRIPTION                                               Page 4-2
                                                              3 August 1989


              9.  DSSI_RST L.  (BID, OD).  DSSI RST line.

             10.  ID<2:0> L.  (IN).  The DSSI  ID  number.   The  value  on
                  these  pins will be used by SWIFT as its DSSI ID when bit
                  15 of the ID register is clear (0).  At that time, a read
                  of the ID register will show the active high assertion of
                  the ID pins as the SWIFT ID.   When  bit  15  of  the  ID
                  register  is  set,  the  ID  pins  are  not  used and not
                  readable through SWIFT.  The value  in  the  ID  register
                  will be used by SWIFT as its DSSI ID.


              Memory Port.  The SWIFT  interface  to  the  memory  port  is
              composed of the following 26 signals:

              1.  HP_DAL <15:00> H.  (BID, 3S).   Multiplexed  address/data
                  lines.   During  the  data  portion  of  the cycle, these
                  signals  represent  DATA  <15:00>.   During  the  address
                  portion,  they  are used to represent ADDRESS <15:01,17>.
                  HP_ADDR16 represents ADDRESS <16>.  This  use  of  HP_DAL
                  <00>  during the address portion of the cycle doubles the
                  space addressable by SWIFT.

              2.  HP_ADDR16 H.  (OUT, 3S).   An  extension  of  the  memory
                  address  space  addressable by SWIFT.  Note that this and
                  HP_DAL <15:00> allows SWIFT to access 256KB.  This signal
                  is  used  for  address  only and is valid only during the
                  address portion of the bus cycle.

              3.  HP_WRITE L.  (BID,  3S).   This  signal  is  asserted  to
                  indicate  that  the  current  memory  cycle  is  a  WRITE
                  operation,  as  seen  by  the  bus   master,   deasserted
                  otherwise.  During SWIFT register accesses, it is sourced
                  by external logic, and should  be  driven  following  the
                  assertion of HP_ADREN L; it may be released following the
                  deassertion of HP_ADREN L; it must be released  following
                  the deassertion of HP_AS.

              4.  HP_AS L.  (OUT, 3S).  This signal defines the boundary of
                  a   memory   cycle   when  asserted.   Note  that  HP_DAL
                  (containing an  address)  will  be  valid  prior  to  the
                  assertion  of  HP_AS;  the  assertion  of  HP_AS  is  the
                  latching condition.  This signal will remain asserted for
                  only the first transfer.  This signal is also used during
                  microprocessor accesses to SWIFT.  Its deassertion  is  a
                  signal  to  the  external logic to stop driving HP_WRITE.
                  In arbitrating mode  and  during  memory  accesses,  this
                  signal  is  used as a clock input to an external counter.
                  It is not asserted during microprocessor accesses in this
                  mode.

              5.  HP_DS L.  (OUT, 3S).  This signal is a data  strobe,  and
                  is only used when accessing memory.  Data must be present
                  on HP_DAL<15:00> just after the assertion of HP_DS and is

     PIN DESCRIPTION                                               Page 4-3
                                                              3 August 1989


                  latched  on  the trailing edge by SWIFT on read cycles or
                  by the memory on write cycles.

              6.  HP_RDY L.  (IN).  When asserted during the  data  portion
                  of a memory cycle, it informs SWIFT that data is ready on
                  a read operation or that data has been taken on  a  write
                  operation  and  that  the  current  cycle  can end.  This
                  signal is not used during  microprocessor  accesses.   In
                  arbitrating  mode,  this  signal is used as a bus request
                  signal.  SWIFT asserts HP_BUSGRANT  in  response  to  the
                  assertion  of  this  when  it has relinquished the HP_DAL
                  bus.

              7.  HP_CS L.  (IN).  This signal is asserted low to  indicate
                  that   the   microprocessor  wishes  to  access  a  SWIFT
                  register.  SWIFT will respond to  this  as  soon  as  the
                  current bus cycle (if one was in progress) has completed.
                  This signal, together  with  the  HP_WRITE  signal,  will
                  control  the direction and enables of the transceivers in
                  the chip.  The HP_CS signal can be  deasserted  following
                  the assertion of HP_ADREN.

              8.  HP_ADREN L.  (OUT,  3S).   This  signal  is  asserted  in
                  response  to  a  chip select to inform the microprocessor
                  that the register address may be  placed  on  the  HP_DAL
                  lines.   This  signal  can also act as a bus grant to the
                  microprocessor.  The local intelligence will  also  drive
                  HP_WRITE  following  the  assertion of this signal.  This
                  signal is not used during memory accesses.

              9.  HP_DATAEN L.  (OUT, 3S).  This signal  is  asserted  when
                  SWIFT  is ready to accept or deliver register data on the
                  HP_DAL lines.  This signal, coupled with HP_WRITE can act
                  as  the  enable  and  direction  inputs  to  an  external
                  transceiver.  This  signal  is  not  used  during  memory
                  accesses.

             10.  HP_CLK H.  (IN).  This is the clock input used  by  SWIFT
                  to  synchronize  HP_CS,  HP_ADREN  and  HP_DATAEN.   This
                  allows the designer  to  use  synchronous  circuitry,  if
                  desired.  If not, this pin may be connected to SYS_CLK.

             11.  HP_BUSGRANT L.  (OUT, 3S).  This signal is used  only  in
                  the arbitrating mode.  Its assertion indicates that SWIFT
                  has relinquished the memory bus to another device.


              Miscellaneous Signals.  The 23 miscellaneous signals are:

              1.  SYS_INTERRUPT L.  (OUT, OD).  One multi-purpose interrupt
                  line  to  the  microprocessor  to  inform  it  of  packet
                  transfer termination or error conditions.  Its  assertion
                  indicates  that  an interrupt is pending.  It will remain
                  asserted until SWIFT is reset or the  ISTAT  Register  is

     PIN DESCRIPTION                                               Page 4-4
                                                              3 August 1989


                  cleared by the microprocessor.

              2.  SYS_RESET L.  (IN).  This  signal,  when  asserted,  will
                  force   SWIFT  to  reset  all  internal  state  machines,
                  initialize all registers and disconnect itself  from  the
                  DSSI bus.

              3.  SYS_CLK H.  (IN).  This is the  clock  input  for  SWIFT.
                  SWIFT requires a 30 MHz, 50(± 5)% duty cycle clock.

              4.  SYS_TEST H.  (IN).  SWIFT requires  this  pin  be  pulled
                  down  for  normal  operation.  When pulled up SWIFT is in
                  the test mode and all output pins are in a high impedance
                  state.

              5.  TESTOUT H.  (OUT).  This pin is  the  output  of  SWIFT's
                  parametric NAND tree.

              6.  QVSS1<4:0>.  (GND).  Ground return for DSSI drivers.

              7.  QVSS2 (GND).   Ground,  used  with  VBIAS  to  produce  a
                  voltage   reference   for   the  receivers  of  the  DSSI
                  transceivers.

              8.  QVDD1 (PWR).  The power input for the DSSI transceivers

              9.  IOVSS<1:0>  (GND).   Ground  return  for  the  host  port
                  drivers on the pad ring.

             10.  IOVDD<1:0> (PWR).  The power  input  for  the  host  port
                  drivers on the pad ring.

             11.  VSS<2:0> (GND).  Ground return for the internal logic  of
                  the chip.

             12.  VDD<2:0> (PWR).  The power input for the  internal  logic
                  of the chip.

             13.  VBIAS.  Must be tied to 5.62 Kohm  1%  bias  resistor  to
                  ground.  Used for reference voltage generator.



     PIN DESCRIPTION                                               Page 4-5
                                                              3 August 1989



                                  Pin Summary

                      _______________________________________
                     |                                       |
                     |             DSSI Port                 |
                     |                                       |
             <======>| DSSI_DATA<7:0>                        |
             <------>| DSSI_PARITY                           |
             <------>| DSSI_CMD                              |
             <------>| DSSI_INPUT                            |
             <------>| DSSI_REQ                              |
             <------>| DSSI_ACK                              |
             <------>| DSSI_BSY                              |
             <------>| DSSI_SEL                      ID<2:0> |O<====
             <------>| DSSI_RST                              |
                     |                                       |
                     |_______________________________________|
                     |                                       |
                     |            Memory Port                |
                     |                                       |
             <======>| HP_DAL<15:00>                  HP_AS  |O----->
             <-------| HP_ADDR16                      HP_DS  |O----->
             <----->O| HP_WRITE                    HP_ADREN  |O----->
             ------>O| HP_RDY                     HP_DATAEN  |O----->
             ------>O| HP_CS                       BUSGRANT  |O----->
             ------->| HP_CLK                                |
                     |                                       |
                     |_______________________________________|
                     |                                       |
                     |            Miscellaneous              |
                     |                                       |
             ------>O| SYS_RESET                    SYS_INT  |O----->
             ------->| SYS_CLK                      TESTOUT  |  ------>
             ------->| SYS_TEST                              |
             =======>| PWR<5:0>                              |
             =======>| GND<10:0>                             |
             ------->| VBIAS                                 |
                     |_______________________________________|













                                   CHAPTER 5

                            SWIFT INTERNAL REGISTERS



     SWIFT contains fourteen microprocessor-visible registers that are used
     to  control  and monitor the behavior of SWIFT during operation.  Five
     registers are used to set up SWIFT.  Information  in  these  registers
     includes  ID, timeout values, buffer size, alternate CI overhead size,
     and general enables.  These registers are typically only  accessed  at
     startup and can be write-protected.

          Four registers are used to  operate  SWIFT.   Two  of  these  are
     pointer  registers.   One  provides exception notification information
     and error flags, and the last  is  used  to  enable  and  monitor  the
     operation of SWIFT.  These will be referred to as "normal use" or DSSI
     registers.

          The last five registers provide diagnostic capabilities.  Two  of
     them allow direct control of the DSSI bus for diagnostic testing.  One
     register allows SWIFT to be configured in one of several  test  modes,
     and   the   remaining   registers  allow  visibility  into  SWIFT  for
     diagnostics.   These  registers  are  only  used   to   diagnose   the
     functionality  of  the chip and should only be accessed during powerup
     testing.  These registers can also be write-protected.

          The register "map" is defined below:


     SWIFT INTERNAL REGISTERS                                      Page 5-2
                                                              3 August 1989


                     SWIFT REGISTER MAP (USER VISIBLE)

        HP_DAL<5:0>              DATA BUS                    NAME

                     15                              0
                     +-------------------------------+
             +00     |    CONTROL/STATUS REGISTER    |       CSR
                     +-------------------------------+
             +02     |        ID   REGISTER          |       ID
                     +-------------------------------+
             +04     |           TIMEOUTS            |       TMO
                     +-------------------------------+
             +06     |      BUFFER SIZE REGISTER     |       BUFSIZ
                     +-------------------------------+
             +08     |     TARGET LIST POINTER       |       TLP
                     +-------------------------------+
             +10     |           BLANK               |
                     +-------------------------------+
             +12     |           BLANK               |
                     +-------------------------------+
             +14     |   INITIATOR LIST POINTER      |       ILP
                     +-------------------------------+
             +16     |           BLANK               |
                     +-------------------------------+
             +18     |         DSSI CONTROL          |       DSCTRL
                     +-------------------------------+
             +20     |        INTERRUPT STATUS       |       ISTAT
                     +-------------------------------+
             +22     |    DSSI DATA BUS AND PARITY   |       DDB
                     +-------------------------------+
             +24     |    DSSI CONTROL SIGNALS       |       DCS
                     +-------------------------------+
             +26     |    DIAG. CONTROL REGISTER     |       DICTRL
                     +-------------------------------+
             +28     |  OTHER OVERHEAD SIZE REGISTER |       OOVSIZ
                     +-------------------------------+
             +30     |           BLANK               |
                     +-------------------------------+
             +32     |            LOTC               |       LOTC
                     +-------------------------------+
             +34     |             BC                |       BC
                     +-------------------------------+


                                      NOTE

             Blank registers have been added to the register map to
             insure  that all normal use registers are at least two
             address  bits  apart.   This  prevents  a  single  bit
             address error from corrupting a SWIFT register.


     Most registers in SWIFT  are  standard  read/write  registers.   Some,
     however,  do  not  fall into this class.  The other types of registers

     SWIFT INTERNAL REGISTERS                                      Page 5-3
                                                              3 August 1989


     are:

              R/W1TC - read/write 1 to clear.  The ISTAT Register  contains
              bits  which  require  that once a status bit has been set, it
              can only be cleared by writing a 1 to that bit position.  For
              example:   the microprocessor reads the status register, then
              writes the value it read to clear it.   Bits  set  after  the
              register  has  been  read  remain  set  when  the register is
              written.

              R/O - read only.  Applies to a register which contains status
              bits   only,   and   therefore   cannot  be  written  by  the
              microprocessor.

              R/W - Some of these registers are true read/write  registers.
              Others   are  not  true  read/write  in  that  under  certain
              conditions they will not read back the value last written  to
              them.   These  conditions will be noted in the description of
              the register.

                              SWIFT REGISTER MAP

                 NAME             USAGE             CLASS
             +---------------+---------------+---------------+
             |  CSR          |   Setup       |       R/W     |
             +---------------+---------------+---------------+
             |  ID           |   Setup       |       R/W     |
             +---------------+---------------+---------------+
             |  TMO          |   Setup       |       R/W     |
             +---------------+---------------+---------------+
             |  SECSIZ       |   Setup       |       R/W     |
             +---------------+---------------+---------------+
             |  TLP          |    DSSI       |       R/W     |
             +---------------+---------------+---------------+
             |  ILP          |    DSSI       |       R/W     |
             +---------------+---------------+---------------+
             |  DSCTRL       |    DSSI       |       R/W,R/O |
             +---------------+---------------+---------------+
             |  ISTAT        |    DSSI       |       R/W1TC  |
             +---------------+---------------+---------------+
             |  DDB          |  DIAGNOSTIC   |       R/W     |
             +---------------+---------------+---------------+
             |  DCS          |  DIAGNOSTIC   |       R/W     |
             +---------------+---------------+---------------+
             |  DICTRL       |  DIAGNOSTIC   |       R/W     |
             +---------------+---------------+---------------+
             |  OOVSIZ       |   Setup       |       R/W     |
             +---------------+---------------+---------------+
             |  LOTC         |  DIAGNOSTIC   |       R/O     |
             +---------------+---------------+---------------+
             |  BC           |  DIAGNOSTIC   |       R/O     |
             +---------------+---------------+---------------+


     SWIFT INTERNAL REGISTERS                                      Page 5-4
                                                              3 August 1989


                                      NOTE

             For the entirety of the document, please keep in  mind
             that   all   memory  references  are  made  with  WORD
             addresses.  Note that the maximum address size  of  18
             bits  restricts  the amount of memory visible to SWIFT
             to 128K words.


     SWIFT INTERNAL REGISTERS                                      Page 5-5
     REGISTER DEFINITIONS                                     3 August 1989


     5.1  REGISTER DEFINITIONS


                                      NOTE

             All undefined bits in any non-blank registers (denoted
             by  "-")  will  read as zero.  Writing to any of these
             bits will have no effect.




     5.1.1  Control And Setup Registers

     These registers are used to set up SWIFT in its operating mode.   This
     group of registers can be write-protected to prevent accidental access
     to them.



     5.1.1.1  CSR - Control/Status Register

     This register  contains  control  and  status  information  about  the
     general operation of SWIFT, including various enable bits.

                             CSR (0) -- READ/WRITE

       15  14  13  12  11  10  9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - | - | - | - | - | - | - | - |HPM|RST|SPT|EEN| ZF|SLE|IIA| IE|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     The fields in the CSR are defined as follows:

           o  HPM - Set if SWIFT is operating on an arbitrated II bus.   In
              this  mode, SWIFT will handle arbitration.  HP_RDY is used as
              a BUS_REQ, with SWIFT returning HP_BUSGRANT to indicate  that
              the  external  device  has  control  of  the bus.  When clear
              (default on powerup) HP_RDY indicates that the  current  data
              transfer can be terminated and HP_BUSGRANT is not used.

           o  RST - (ReSeT Command) - Set to reset SWIFT.  Once  set,  this
              bit  will automatically be cleared by SWIFT when the reset is
              completed.  The reset takes 200 to 300 nsec to complete.

           o  SPT - (SPliT) Set if SWIFT is to put the  CI  overhead  in  a
              separate buffer from the data for data/utility packets.  Used
              in  RF  drives   along   with   ZF   to   format   data   for
              writing-to/reading-from disk.

           o  EEN - (EDC ENable) Set if SWIFT is to check buffer  EDCs  for
              outbound  buffers.   SWIFT  will  always read an EDC, but, if
              this bit is cleared , it  will  not  check  it.   SWIFT  will
              always generate and write correct EDCs for inbound buffers.

     SWIFT INTERNAL REGISTERS                                      Page 5-6
     REGISTER DEFINITIONS                                     3 August 1989


           o  ZF - (Zero Fill) - Set if SWIFT  is  to  zero-fill  the  last
              buffer  of  each data packet.  For inbound packets, when this
              bit is set, if the last word of data of the packet  does  not
              fall in the last word of the last buffer, the remaining words
              of the buffer will be written with zeros, and the EDC will be
              calculated  for each word in the buffer, including the zeros,
              then written at the end of the buffer.  For  inbound  packets
              without  this  bit  set, the EDC is written immediately after
              the last word of data.  For outbound packets  with  this  bit
              set, if SWIFT gets to the end of the packet before it gets to
              the end of a buffer, it will continue to read the rest of the
              buffer,  then the EDC.  If EEN is set, it will then check the
              EDC.  For outbound packets with this bit cleared, SWIFT  will
              read  the  EDC  immediately  after the last data word.  SWIFT
              determines that a packet is a Data packet by examining bit  4
              of  the  first byte in the Data Out phase (refer to CI spec).
              Note that all odd-byte-length packets will have the high byte
              of  the  last  word of data zero-filled regardless of whether
              the ZF bit is set or the packet is Data or not.

           o  SLE - (Selection Enable) - Set if  SWIFT  is  to  respond  to
              selections.  Clear (default on reset) otherwise.

           o  IIA - (Interrupt on Illegal Access) -  Set  if  SWIFT  is  to
              interrupt  the  processor  when  an  access  to  a  blank  or
              write-protected register  is  detected.   Clear  (default  on
              reset)  otherwise.   When  clear, SWIFT will never Set IAD in
              the ISTAT register.  Note that if IE is Clear, SWIFT will not
              interrupt  the  processor, but will update the ISTAT register
              appropriately (See ISTAT Register Description).

           o  IE - (Interrupt  Enable)  -  Set  if  interrupts  are  to  be
              enabled.   Clear (the default on reset) otherwise.  If clear,
              interrupts to the processor are disabled (regardless  of  the
              state of the IIA bit mentioned above), but the ISTAT register
              will   be   updated   appropriately   (See   ISTAT   Register
              description).   If  any  bit  is  already  set  in  the ISTAT
              register  when  this  bit  gets  set,  SWIFT  will  issue  an
              interrupt to the processor.




     5.1.1.2  ID - DSSI ID Register

     This register contains the three bit ID number of this  SWIFT  on  the
     DSSI  bus.   This  value is needed for arbitration and selection.  The
     value read from this register may not be the last value  written,  but
     will always indicate the DSSI ID SWIFT is currently using.


     SWIFT INTERNAL REGISTERS                                      Page 5-7
     REGISTER DEFINITIONS                                     3 August 1989


                             ID (2) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |P/R| - | - | - | - | - | - | - | - | - | - | - | - |BUS ID<2:0>|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     The bits is this register are defined as follows:

           o  P/R - (Pins/Register) - When Set, indicates that  the  ID  of
              SWIFT  is the value written to BUS ID in this register.  When
              cleared (default on  reset),  the  three  ID  pins  of  SWIFT
              determine the ID that will be used.

           o  BUS ID - The ID of SWIFT.  If P/R is  set,  these  bits  read
              back  what  was  last  written by the processor.  When P/R is
              cleared, these bits read back the setting of the external  ID
              pins.




     5.1.1.3  TMO - Timeout Register

     This register contains the timeout values for both the  Initiator  and
     Target roles.  Note that once enabled, the timeout values apply to all
     transactions.  This  register  also  contains  the  selection  timeout
     value.

                             TMO (4) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - | - | - | - |SELECTION TIME.|TARGET TIMEOUT |INIT. TIMEOUT  |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     The bits in this register are defined as follows:

           o  SELECTION TIMEOUT - the number of 25.6 microsecond  intervals
              which  may elapse from the beginning of selection until SWIFT
              aborts the selection.  The value written to these  bits  does
              not   translate  to  a  simple  multiplication  of  the  25.6
              microsecond time factor.  Bit 8 represents the highest  order
              bit, while bits 9,10 and 11 represent the lowest, 3rd highest
              and 2nd highest order bits.  The value that should be written
              to the selection timeout nibble is actually the desired 4 bit
              value circularly shifted to the left, such that  the  highest
              order bit ends up in the low bit position and the other three
              bits get shifted once to the left.  The  following  table  is
              provided  to  show  what  value should actually be written to
              this nibble in order to  produce  a  given  25.6  microsecond
              multiplication factor:


     SWIFT INTERNAL REGISTERS                                      Page 5-8
     REGISTER DEFINITIONS                                     3 August 1989


              Desired
                 N     Selection Timeout         Value Written to Nibble
              in Hex     (N x 25.6 us)                 in Hex
              -------------------------------------------------------------
                 0     Selection Timeouts Disabled       0
                 1      25.6  us                         2
                 2      51.2  us                         4 
                 3      76.8  us                         6
                 4     102.4  us                         8
                 5     128.0  us                         A
                 6     153.6  us                         C



                                          NOTE

                      If the selection timeout value written to the
                      nibble  exceeds  153.6 us SWIFT's behavior is
                      not predictable.

              Note that the selection timeout value represents the time  at
              which  SWIFT  releases  the  ID lines.  An additional time of
              25.6 us will pass before SWIFT releases its DSSI_SEL line  as
              well.   The  user  should  refer  to  section  9.3.5  of  the
              specification for more detail.  A  non-zero  value  indicates
              that the timer is enabled.

           o  TARGET TIMEOUT - the  number  of  200  microsecond  intervals
              which  may  elapse,  starting  from  the point when SWIFT was
              selected until the next observed bus free phase  while  SWIFT
              is  in the Target role.  Should this timer expire, SWIFT will
              immediately disconnect from the DSSI bus.  A  non-zero  value
              indicates the timer is enabled.

           o  INITIATOR TIMEOUT - the number of 200  microsecond  intervals
              which  may  elapse,  from  the  last observed bus free phase,
              until the next observed bus free phase while SWIFT is in  the
              Initiator  role;  or  the number of 200 microsecond intervals
              which  may  elapse  before  SWIFT,  acting  as  a   potential
              Initiator,  detects a bus free phase.  Should either of these
              conditions occur,  SWIFT  will  assert  DSSI  bus  reset.   A
              non-zero value indicates the timer is enabled.




     5.1.1.4  BUFSIZ - Buffer Size Register

     This register contains the maximum number of  data  words  that  SWIFT
     will put into a receive buffer before appending an EDC, or the maximum
     number of data words that SWIFT  will  read  from  a  transmit  buffer
     before  expecting  an  EDC.   This  register allows the user to make a
     buffer size other than 256 words.  The value written to this  register
     must  be  greater  than  128 or SWIFT's actions cannot be anticipated.

     SWIFT INTERNAL REGISTERS                                      Page 5-9
     REGISTER DEFINITIONS                                     3 August 1989


     This register  defaults  to  0000H  on  powerup.   It  is  the  user's
     responsibility  to  write  it  with  the  desired  buffer  size before
     allowing any data transfer.

                             BUFSIZ (6) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - | - | - |             BUFFER SIZE<12:0> (in words)          |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+




     5.1.2  DSSI Registers

     This group of four registers is used while the chip is operating.  Two
     registers  are  used  as pointers; a third is used for enabling SWIFT;
     and the fourth is used to report error status.



     5.1.2.1  TLP - Target List Pointer

     This register contains the address of the buffer in which  SWIFT  will
     attempt  to  write the next incoming packet.  SWIFT will automatically
     reload this register with its new value upon completion of the current
     transaction.   Refer  to  the DSSI Operation description later in this
     document.  Note that this address is really  a  17-bit  word  address,
     with  the  lower  bit  of  the  address forced to zero .  The register
     contains the upper sixteen bits of this 17-bit  address.   SWIFT  will
     interpret  a value of zero as the end of a linked list.  This register
     can only be written by the microprocessor when the register  value  is
     zero,  or the Input Enable bit (in the DSCTRL Register) is zero .  All
     other attempts to write this register will be ignored.  While SWIFT is
     updating  the  TLP or ILP, it will hold off all requests to access any
     register until the update is complete.  This  prevents  firmware  from
     accessing  a  "stale"  pointer.  Its default value is 0000H.  The user
     should read the sections on adding and removing from a linked list for
     additional information on how to update the TLP.

                               TLP (8) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |                ADDRESS OF NEXT "INCOMING" BUFFER              |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


     SWIFT INTERNAL REGISTERS                                     Page 5-10
     REGISTER DEFINITIONS                                     3 August 1989


     5.1.2.2  ILP - Initiator List Pointer

     This register contains the address of the buffer from which SWIFT will
     read  the  next outgoing packet.  SWIFT will automatically reload this
     register  with  its  new  value  upon  completion   of   the   current
     transaction.    Refer  to  DSSI  Operation  Description.   SWIFT  will
     interpret a value of zero as the end of a linked list.  Note that this
     address  is  really  a  17-bit word address, with the lower bit of the
     address forced to zero .  The register contains the upper sixteen bits
     of  this  17-bit  address.   This  register can only be written by the
     microprocessor when the register value is zero or  the  Output  Enable
     bit  (in  the  DSCTRL Register) is zero .  All other attempts to write
     this register will be ignored.  While SWIFT is  updating  the  TLP  or
     ILP,  it will not accept requests to access registers until the update
     is complete.  This prevents firmware from accessing a "stale" pointer.
     Its  default  value  is  0000H.   The user should read the sections on
     adding and removing from a linked list for additional  information  on
     how to update the ILP.

                               ILP (14) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |            ADDRESS OF NEXT "OUTGOING"  BUFFER                 |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+




     5.1.2.3  DSCTRL - DSSI Control And Status Register

     This register contains information necessary to  control  and  monitor
     SWIFT.

                        DSCTRL (18) -- READ/WRITE, READ ONLY

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | IN| MI| - |WP1| - | - |TPZ|IIP|OUT| MO| - |WP2| - | - |IPZ|OIP|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     The bits in this register are defined as follows:

           o  IN - (Input Enable) - when  Set,  indicates  that  SWIFT  may
              receive  incoming  packets.  This bit (and the MI bit) can be
              set only by the microprocessor.   When  cleared,  SWIFT  will
              return  a  NACK status for every transfer directed toward it.
              SWIFT will clear this bit (and interrupt  the  processor)  if
              the  sync  character  of a receive buffer is incorrect.  This
              bit is double  buffered;  if  the  microprocessor  wishes  to
              change  its value, SWIFT will buffer the value until the next
              appropriate interval at which it may be  changed  (see  IIP).
              This  allows  the microprocessor to temporarily disable SWIFT
              so that it can manipulate buffers.  To set the  IN  bit,  the

     SWIFT INTERNAL REGISTERS                                     Page 5-11
     REGISTER DEFINITIONS                                     3 August 1989


              microprocessor  must  write  a 1 to both this and the MI bit.
              To clear the IN bit, the microprocessor must  write  a  0  to
              both this and the MI bit.

           o  MI - (Microprocessor's Input Enable) - When  read,  this  bit
              reflects  the  buffered  value  that  will  be written to the
              'real' Input Enable by SWIFT at the  next  appropriate  time.
              For writes, both this bit and the Input Enable bit must match
              for any action to be taken.  In other words, if the IN and MI
              bits are not the same value when written, then neither the IN
              or MI bit will be changed.  This provides an increased amount
              of protection against errors in writing this register.

           o  WP1 - (Write Protect 1) - This bit, along with WP2, serves to
              write   protect  the  non-DSSI  registers  (i.e.   Setup  and
              Diagnostic  registers).   When  either  is  Set,  any  writes
              directed  at those registers are ignored, and may generate an
              interrupt (depending on the state of the IIA bit in the CSR).
              When  both  are  cleared,  all registers are accessible.  Two
              bits are used for increased  protection  against  bit  errors
              while writing this register.

           o  TPZ - (Target Pointer Zero) - This bit is Set if  the  Target
              pointer  is  currently zero (0000H).  This information can be
              used when determining the state of the  chip.   This  bit  is
              read  only.  This bit is set when SWIFT has no buffers on the
              Inbound List.

           o  IIP - (Input In Progress) - When set, this bit signifies that
              SWIFT is currently receiving an incoming packet.  Any attempt
              to change the Input Enable bit will be stalled by SWIFT until
              this  bit becomes clear.  This bit is read only.  This bit is
              set when SWIFT gets selected and is cleared  when  SWIFT  has
              completed all linked list operation and disconnected from the
              bus.

     The IN, MI, TPZ and IIP can be used to determine the  state  of  SWIFT
     with respect to inbound traffic.  These states are shown below:

     IN MI TPZ IIP           Description
     -- -- --- ---           -----------

     0  0  0   0     SWIFT has buffers available to it, but needs to be
                     enabled.

     0  0  0   1     SWIFT is currently receiving a packet which it will
                     NACK because it is not enabled.

     0  0  1   0     SWIFT has no buffers available to it and is not
                     enabled.  This is the default on power-up.

     0  0  1   1     SWIFT is currently receiving a packet which it will
                     NACK because it is not enabled and has no buffers.


     SWIFT INTERNAL REGISTERS                                     Page 5-12
     REGISTER DEFINITIONS                                     3 August 1989


     0  1  0   0     If the OIP bit is set, SWIFT is currently sending OUT
                     a packet, and will copy the MI bit to the IN bit at
                     the end of the transfer; see condition 1 1 0 0. If
                     the OIP bit is not set, condition 0 1 0 0 is not
                     possible.

     0  1  0   1     SWIFT is currently receiving a packet which it will
                     NACK since it is not enabled.  However, at the
                     completion of the current transfer, SWIFT will become
                     enabled.

     0  1  1   0     If the OIP bit is set, SWIFT is currently sending OUT
                     a packet, and will copy the MI bit to the IN bit at
                     the end of the transfer; see condition 1 1 1 0. If
                     the OIP bit is not set, condition 0 1 1 0 is
                     impossible.

     0  1  1   1     SWIFT is currently receiving a packet, which it will
                     NACK because it is not enabled and has no buffers
                     available to it. It will become enabled upon
                     completion of the transfer, however it will still
                     have no buffers available to it.

     1  0  0   0     If the OIP bit is set, SWIFT is currently sending OUT
                     a packet, and will copy the MI bit to the IN bit at
                     the end of the transfer; see condition 0 0 0 0. If
                     the OIP is not set, condition 1 0 0 0 is impossible.

     1  0  0   1     SWIFT is currently receiving a packet, and will
                     become disabled at the completion of the transfer.

     1  0  1   0     If the OIP bit is set, SWIFT is currently sending OUT
                     a packet, and will copy the MI bit to the IN bit at
                     the end of the transfer; see condition 0 0 1 0. If
                     the OIP is not set, condition 1 0 1 0 is impossible.

     1  0  1   1     SWIFT is currently receiving a packet, and will
                     become disabled at the completion of the transfer. It
                     will also have no buffers available to it.

     1  1  0   0     SWIFT has buffers available to it and is enabled, but
                     is currently not receiving a packet.

     1  1  0   1     SWIFT is currently receiving a packet, is enabled and
                     has buffers available to it.

     1  1  1   0     SWIFT is enabled, but has no buffers available to it.

     1  1  1   1     SWIFT is enabled and receiving a packet, which it
                     will NAK because it has no buffers available to it.


     SWIFT INTERNAL REGISTERS                                     Page 5-13
     REGISTER DEFINITIONS                                     3 August 1989


           o  OUT - (Output Enable) - when Set, this bit indicates SWIFT is
              enabled  to  send outbound packets.  This bit can be set only
              by the microprocessor.  See OBC bit in ISTAT Register  for  a
              list  of  when  SWIFT  clears this bit.  When OUT is cleared,
              SWIFT will not attempt  to  transmit  any  outgoing  packets.
              This   bit   is   double   buffered.    Therefore,   if   the
              microprocessor wishes to change its value, SWIFT will  buffer
              the value until the next appropriate interval at which it may
              be changed (see OIP).   This  allows  the  microprocessor  to
              temporarily  disable SWIFT so that it can manipulate buffers.
              To set the OUT bit, the microprocessor must write a 1 to both
              this   and   the   MO   bit.   To  clear  the  OUT  bit,  the
              microprocessor must write a 0 to both this and the MO bit.

           o  MO - (Microprocessor's Output Enable) - when read,  this  bit
              reflects  the  buffered  value  that  will  be written to the
              'real' Output Enable by SWIFT.  Both this bit and the  Output
              Enable  bit  must match for any action to be taken.  In other
              words, if the OUT and MO bits are not  the  same  value  when
              written,  then  neither  the  OUT or MO bits will be changed.
              This allows an increased amount of protection against  errors
              in writing this register.

           o  WP2 - (Write Protect 2) - this bit, along with WP1, serves to
              write   protect  the  non-DSSI  registers  (i.e.   Setup  and
              Diagnostic registers).  When either is set to 1,  any  writes
              directed  at  those  registers  are  ignored.   When both are
              cleared, all registers are accessible.  Two bits are used for
              increased  protection  against  bit errors while writing this
              register.

           o  IPZ - (Initiator Pointer Zero) - when Set signifies that  the
              Initiator  list  pointer is currently zero.  This information
              can be used when determining the state of SWIFT with  respect
              to outbound traffic.  This bit is read only.  This bit is set
              when SWIFT has no buffers in its outbound list.

           o  OIP - (Output In Progress) - when  set,  this  bit  signifies
              that  SWIFT  is  currently  sending  an outgoing packet.  Any
              attempt to change the Output Enable bit will  be  stalled  by
              SWIFT  until  this bit becomes clear.  This bit is read only.
              This bit is set when SWIFT decides to arbitrate for  the  bus
              and  remains set until either SWIFT completes the transfer as
              an Initiator, or gets selected as a Target.

     The OUT, MO, IPZ and OIP can be used to determine the state  of  SWIFT
     with respect to outbound traffic.  These states are shown below:

     OUT MO IPZ OIP          Description
     --  -- --- ---          -----------

     0   0  0   0    SWIFT has buffers available to it, but needs to be
                     enabled.


     SWIFT INTERNAL REGISTERS                                     Page 5-14
     REGISTER DEFINITIONS                                     3 August 1989


     0   0  0   1    Impossible condition.

     0   0  1   0    SWIFT has no buffers available to it and is not
                     enabled.  This is the default on power-up.

     0   0  1   1    Impossible condition.

     0   1  0   0    If the IIP bit is set, SWIFT is currently receiving a
                     packet, and will copy the MO bit to the OUT bit at
                     the end of the transfer; see condition 1 1 0 0. If
                     the IIP is not set, condition 0 1 0 0 is impossible.

     0   1  0   1    SWIFT is currently receiving a packet, which it will
                     NAK because it is not enabled. It will become
                     enabled, however, at the end of the transfer.

     0   1  1   0    If the IIP bit is set, SWIFT is currently receiving a
                     packet, and will copy the MO bit to the OUT bit at
                     the end of the transfer; see condition 1 1 1 0. If
                     the IIP is not set, condition 0 1 1 0 is impossible.

     0   1  1   1    Impossible condition.

     1   0  0   0    If the IIP bit is set, SWIFT is currently receiving a
                     packet, and will copy the MO bit to the OUT bit at
                     the end of the transfer; see condition 0 0 0 0. If
                     the IIP is not set, condition 1 0 0 0 is impossible.

     1   0  0   1    SWIFT is currently sending data, and will become
                     disabled at the completion of the transfer.

     1   0  1   0    If the IIP bit is set, SWIFT is currently receiving a
                     packet, and will copy the MO bit to the OUT bit at
                     the end of the transfer; see condition 0 0 1 0. If
                     the IIP is not set, condition 1 0 1 0 is impossible.

     1   0  1   1    Impossible condition.

     1   1  0   0    SWIFT has buffers available to it and is enabled, but
                     is currently not sending a packet.

     1   1  0   1    SWIFT is currently sending a packet.

     1   1  1   0    SWIFT is enabled, but has no buffers available to it.

     1   1  1   1    Impossible condition.




     5.1.2.4  OOVSIZ<4:0> - Other OVerhead SIZe

     The OOVSIZ register is used to allow SWIFT to handle  CI  data  packet
     overheads  of  other than 9 words.  This was implemented because while

     SWIFT INTERNAL REGISTERS                                     Page 5-15
     REGISTER DEFINITIONS                                     3 August 1989


     SWIFT was being designed, there was much talk about adding some new CI
     packet  types which would have overhead sizes larger than 9 words, but
     at the time there was no agreement about how large the  new  overheads
     would  be.   The  new  packets  were to be differentiated from the old
     packets by bit 7 of the CI command word being set.  When the packet is
     DATA/UTILITY,  SPT  is  set,  and bit 7 of the CI command word is set,
     SWIFT will use the value in OOVSIZ rather than 9 words as  the  length
     of the first buffer of the the packet.

                             OOVSIZ (6) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - | - | - | - | - | - | - | - | - | - | - |OOVSIZE<4:0>(words)|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+




     5.1.2.5  ISTAT - Interrupt Status Register

     This register contains interrupt status.   All  bits  are  W1TC.   The
     value of IE in the DSCTRL register has no effect on whether these bits
     are  set,  only  on  whether  they  generate  an  interrupt   to   the
     microprocessor.

                             ISTAT (20) -- READ/WRITE 1

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - |BFB|IDN|IER|INB|ODN|RST|RT3|RTO|EPE|IPE|IAD|IBC|OBC|SNF|LDN|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     These bits are defined as follows:

           o  BFB -  (Bad  First  Buffer)  -  this  bit  is  Set  if  SWIFT
              encounters  a  bad  sync character in the first buffer of the
              packet.  In this case SWIFT will not write any status to  the
              packet's status word, as the buffer is probably invalid.

           o  IDN - (Input DoNe) - this bit is Set when SWIFT, acting as  a
              Target, has SUCCESSFULLY received a packet.

           o  IER - (Input ERror) - this bit is Set when SWIFT, acting as a
              Target, encounters any error while receiving a packet.

           o  INB - (INbound Buffer error) - this  bit  is  Set  if  SWIFT,
              acting  as a Target, does not have enough buffers to complete
              the packet.

           o  ODN - (Output DoNe) - this bit is Set when SWIFT,  acting  as
              an  Initiator,  has  SUCCESSFULLY completed the transfer of a
              packet.

     SWIFT INTERNAL REGISTERS                                     Page 5-16
     REGISTER DEFINITIONS                                     3 August 1989


           o  RST - (ReSeT) - this bit is Set when  SWIFT  detects  that  a
              DSSI  reset  occurred - regardless of its current role on the
              bus.

           o  RT3 - (Third party ReseT) - this bit is Set if SWIFT detected
              a  reset  on  the  DSSI  bus,  while  it was idle - acting as
              neither an Initiator nor a Target.

           o  RTO - (Originator ReseT) - this bit is Set if SWIFT generated
              a reset on the DSSI bus.

           o  EPE - (External Parity Error) - this bit  is  Set  if  SWIFT,
              acting  as  a  Target,  encounters a parity error on the DSSI
              bus.

           o  IPE - (Internal Parity Error) - this bit  is  Set  if  SWIFT,
              acting  as  Target,  encounters a parity error AFTER the data
              has entered SWIFT, i.e., the data was corrupted within SWIFT.
              This  bit  will not be set if the error is encountered on the
              DSSI bus.

           o  IAD - (Illegal Access Detected) - this bit is Set if the  IIA
              bit  in the CSR register is set and the processor attempts to
              access  an  unassigned  (blank)  register  or  the  processor
              attempts  to  write  a write-protected register.  This bit is
              never set when the IIA bit is clear.  If, at the time the IIA
              bit  in  the  DSCTRL register is Cleared, this bit is Set, it
              will remain Set until Cleared by the processor.

           o  IBC - (IN Bit Cleared) - this bit is Set if, as a Target,  an
              incorrect sync pattern was found in an inbound buffer.

           o  OBC - (OUT Bit Cleared) - this bit is Set if :

              1.  As an Initiator, SWIFT received  RST  while  transmitting
                  data to another node.

              2.  As an Initiator, SWIFT's DSSI timer reached the Initiator
                  timeout value while transmitting data.

              3.  As an Initiator, SWIFT's DSSI timer reached the selection
                  timeout value while selecting a Target.

              4.  As  an  Initiator,  the   attached   Target   disconnects
                  unexpectedly.

              5.  As an  Initiator,  a  NACK  status  was  returned  on  an
                  outgoing packet.

              6.  As an Initiator, an incorrect sync pattern was  found  in
                  an outbound buffer.

     SWIFT INTERNAL REGISTERS                                     Page 5-17
     REGISTER DEFINITIONS                                     3 August 1989


              7.  As  an  Initiator,  an  unexpected  DSSI  bus  phase  was
                  encountered.

              8.  As an Initiator, an EDC error was detected  upon  reading
                  the packet command bytes or data from memory.


           o  SNF - (Sync Not Found) - this bit is Set if SWIFT encountered
              a  sync character which was not AAAA5555H.  If this condition
              occurs, SWIFT will disable the appropriate enable (IN or OUT)
              in  the DSCTRL Register and stop transfers in that direction.
              This bit is not set if the bad sync was found  in  the  first
              buffer.

           o  LDN - (List Done) - this bit is Set if SWIFT has completed  a
              packet, whether successfully or not.




     5.1.3  Diagnostic And Test Registers

     This group of registers is used to test SWIFT.  Two of  the  registers
     are  used to observe and control the DSSI bus while doing diagnostics.
     The remaining register is used to enable the various test modes of the
     chip.   This group of registers is to be used only for initialization,
     test, and diagnostic purposes.  They should never  be  used  while  in
     normal  operation.   They can be write-protected to prevent accidental
     access to them.



     5.1.3.1  DDB - DSSI Data Bus

     The DDB register is used in diagnostic mode (see  DICTRL  description)
     in  conjunction  with a loop back connector to test the DSSI port.  It
     is also used in diagnostic internal loopback mode to  effectively  act
     like  the  DSSI bus.  The fields in this register directly reflect the
     DSSI data bus ASSERTED HIGH.  This register should NOT be used  during
     normal operations.  It should be noted that care must be taken to test
     this portion of the chip without any disturbance to the DSSI bus  (See
     TEST STRATEGY).

                             DDB (22) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | -   -   -   -   -   -   - |PTY|         SP DATA <7:0>         |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


     SWIFT INTERNAL REGISTERS                                     Page 5-18
     REGISTER DEFINITIONS                                     3 August 1989


     5.1.3.2  DCS - DSSI Control Signals

     This register is used in diagnostic mode (see DICTRL  description)  in
     conjunction  with  a  loop  back connector to test the DSSI port or to
     effectively act as the DSSI bus in internal loopback mode.   The  bits
     in  this  register  directly  reflect  the DSSI control lines ASSERTED
     HIGH.  It should be noted that  data  written  to  this  register  may
     differ from that read back since only certain bits are driven while in
     the Target or Initiator mode.  (See TEST STRATEGY)

                             DCS (24) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - | - | - | - | - | - | - | - | - |BSY|SEL|RST|ACK|REQ|C/D|I/O|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+




     5.1.3.3  DICTRL - Diagnostic Control Register

     This register contains the various control  bits  used  in  diagnostic
     mode.   Note  that  the  signals  in  this  register  behave  somewhat
     differently than the  control  signals  on  the  DSSI  Bus  (See  TEST
     STRATEGY).

                             DICTRL (26) -- READ/WRITE

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | - | - | - | - | - | - | - | - | - |SRD|TST|DOE|COE|LPB|PRE|DIA|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     The bits is this register are defined as follows:

           o  SRD - (Status Register Diagnostics) - Set to enable the ISTAT
              Register  to  be  written as a normal register for diagnostic
              purposes.    When   clear,   the   ISTAT   Register   remains
              write-1-to-clear.

           o  TST - (Test Bit) -  Set,  only  for  fault-grading  purposes.
              This  bit  will  cause the DSSI timeout counters to increment
              more quickly than usual.

           o  DOE - (Data Output Enable) - Set  to  enable  the  DSSI  data
              drivers.   This  should  be used only in conjunction with the
              external loopback mode to test  the  chip's  drivers.   Clear
              (default on reset) otherwise.

           o  COE - (Control Output  Enable)  -  Set  to  enable  the  DSSI
              control   signal  drivers.   This  should  be  used  only  in
              conjunction with the  external  loopback  mode  to  test  the
              chip's  drivers.   Clear  (default  on  reset) otherwise.  If

     SWIFT INTERNAL REGISTERS                                     Page 5-19
     REGISTER DEFINITIONS                                     3 August 1989


              software attempts to set both the DOE and COE bit,  this  bit
              will remain cleared and DOE will be set.

           o  LPB - (Internal Loopback) - Set if the values written to  the
              diagnostic  registers  are  to  be looped back into the chip.
              This will enable the microprocessor to  insert  test  vectors
              into  the  chip during power-up diagnostics if desired.  Note
              that the DIA bit must be  deasserted  for  this  test  to  be
              meaningful.   Clear  (default  on reset) otherwise.  Refer to
              TEST STRATEGY.

           o  PRE - (Port Enable) - Set to enable the DSSI drivers.   After
              a  reset,  SWIFT  will be disconnected from the bus (this bit
              will be zero).  The primary purpose of this bit is  to  allow
              chip  diagnostics  to  run  without affecting the rest of the
              DSSI bus.   Note  that  this  bit  MUST  be  set  for  normal
              operation  of SWIFT or for the external loopback test mode of
              SWIFT.

           o  DIA - (Diagnostic Mode) - When this bit is asserted, SWIFT is
              in  external  loop-back  mode.   In this mode, the diagnostic
              registers directly control the DSSI data and  control  lines,
              as   well  as  the  bus  steering  signals.   After  a  RESET
              condition, this bit is zero .  Refer to TEST STRATEGY.


     SWIFT INTERNAL REGISTERS                                     Page 5-20
     REGISTER INITIALIZATION VALUES                           3 August 1989


     5.2  REGISTER INITIALIZATION VALUES

     The following table is a summary of the values which should appear  in
     SWIFT  registers  following a hard or soft reset.  Those marked by "X"
     indicate that the bit is indeterminate after reset.

      NAME                           BIT VALUES
      ----                           --- ------

      CSR                            0000 0000 0000 0000

      ID                             0000 0000 0000 0XXX

      TMO                            0000 0000 0000 0000

      BUFSIZ                         0000 0000 0000 0000

      TLP                            0000 0000 0000 0000

      ILP                            0000 0000 0000 0000

      DSCTRL                         0000 0010 0000 0010

      ISTAT                          0000 0000 0000 0000

      DDB                            0000 000X XXXX XXXX

      DCS                            0000 0000 0XXX XXXX

      DICTRL                         0000 0000 0000 0000

      OOVSIZ                         0000 0000 0000 0000













                                   CHAPTER 6

                                 DSSI OPERATION



     SWIFT is specifically intended  to  be  used  with  Digital's  Storage
     System  Interconnect (DSSI).  SWIFT provides many of the bus functions
     required  by  the  data  link  layer  using  a   minimal   number   of
     microprocessor  interrupts.   SWIFT  controls  all  DSSI bus protocol,
     meeting  the  specifications  outlined  in  Digital's  Storage  System
     Interconnect,   Addendum   to  DEC  STD  161.   It  controls  the  bus
     arbitration,  selection,  command,  data,  and  status  phases  of   a
     transfer.   It implements a "fair" arbitration scheme and provides for
     selection, initiator, and target timeouts.   The  following  is  taken
     from  the  aforementioned  specification,  and summarizes the DSSI Bus
     Sequences:

     DSSI OPERATION                                                Page 6-2
                                                              3 August 1989



                             +---------------+
                             |               |
                             |    Bus Free   |<------+
                             |               |       |
                             +---------------+       |
                                     |               |
                                     V               |
                             +---------------+       |
                             |               |  (1)  |
                             |  Arbitration  |-------+
                             |               |       |
                             +---------------+       |
                                     |               |
                                     V               |
                             +---------------+       |
                             |               |  (2)  |
                             |    Selection  |-------+
                             |               |       |
                             +---------------+       |
                                     |               |
                                     V               |
                             +---------------+       |
                         (4) |               |  (3)  |
                     +-------|  Command Out  |-------+
                     |       |               |       |
                     |       +---------------+       |
                     |               |               |
                     |               V               |
                     |       +---------------+       |
                     |       |               |   (5) |
                     |       |    Data Out   |-------+
                     |       |               |       |
                     |       +---------------+       |
                     |               |               |
                     |               V               |
                     |       +---------------+       |
                     |       |               |   (6) |
                     +------>|    Status In  |-------+
                             |               |
                             +---------------+

     The normal path follows  vertically  downward.   Exception  paths  are
     listed below:

          1.  The initiator arbitrates and loses.

          2.  The target failed to respond or responded with an  unexpected
              bus phase.

          3.  The operation was timed out  or  the  target  responded  with
              unexpected phase.

     DSSI OPERATION                                                Page 6-3
                                                              3 August 1989


          4.  The target detected a parity error or information mismatch in
              the  command,  or  the  target  did not have any buffer space
              available.

          5.  The operation was timed out or the target responded  with  an
              unexpected phase.

          6.  Entire transfer phase sequence occurred successfully  -  this
              is the normal case.













                                   CHAPTER 7

                        SWIFT OPERATION - USER INTERFACE



     SWIFT is specifically intended to be used with Digital's Small Storage
     Interconnect.   The  user  MAY  define  a  few  aspects  of  DSSI  bus
     operation, and MUST format the send and  receive  buffers  that  SWIFT
     will  operate  on.   The user must also set up the internal registers,
     such as the TLP,  ILP,  BUFSIZ  and  CSR  registers,  such  that  they
     accurately  reflect the buffers that have been prepared.  This chapter
     is intended to show the user the requirements and options of SWIFT.



     7.1  DSSI USER SELECTABLE OPTIONS

     SWIFT will handle all DSSI protocol, as described in chapter  6.   The
     USER, however, controls the following aspects of a DSSI bus transfer:

              1.  Whether or not SWIFT will respond to being selected by an
              Initiator.   If  the  SLE  bit  is  set,  SWIFT  will  assert
              DSSI_BSY_L in response to selection by a potential  Initiator
              and  become  a  Target;  if not set, SWIFT will do nothing in
              response to being selected.

              2.  When and  if  SWIFT  checks  for  target,  initiator,  or
              selection timeouts on the DSSI bus is determined by the value
              written to the TMO register.

              3.  Whether or not SWIFT will arbitrate for  the  bus  as  an
              Initiator is determined by the OUT bit in the DSCTRL register
              and the contents of the ILP register.  It is by  providing  a
              nonzero  value in the ILP register and setting the OUT and MO
              bits in the DSCTRL register that the user  enables  SWIFT  to
              arbitrate   for  the  DSSI  bus  and  potentially  become  an
              Initiator.

              4.  Whether or not SWIFT will attempt  to  receive  a  packet
              when  selected as a Target is determined by the the IN bit in
              the DSCTRL register and the contents of the TLP register.  It
              is  by  providing  a  nonzero  value in the TLP register, and
              setting the IN and MI bits in the DSCTRL register,  that  the
              user  allows  SWIFT to accept a packet from an Initiator.  If
              either the TLP register is zero, or  the  IN  bit  is  clear,

     SWIFT OPERATION - USER INTERFACE                              Page 7-2
     DSSI USER SELECTABLE OPTIONS                             3 August 1989


              SWIFT will respond to selection by a potential initiator, but
              will immediately jump to the Status In  phase  and  NACK  the
              packet.  It will continue to do this until the user rectifies
              the situation.




     7.2  FORMATTING PACKETS AND BUFFERS

     7.2.1  Overview


                                      NOTE

             In this document, packets and buffers do NOT refer  to
             the   same   thing.    Packets  are  the  vehicle  for
             transferring data on the  DSSI  bus.   The  format  of
             packets  is  determined  by  the CI Specification (DEC
             Std.   161)  and  the  DSSI   Addendum   to   the   CI
             Specification.   Some  of  the  content of a packet is
             determined  by  the  CI  PORT   spec.    Buffers   are
             structures  in  memory where data is stored before and
             after being transferred on the DSSI bus.  Buffers  can
             be  thought  of  as holding packets.  All buffers have
             the same general format, but there are some  specifics
             which  are  dependent on the content of the packet the
             buffers are holding, and  on  the  values  of  several
             registers   internal   to   SWIFT.    SWIFT  does  the
             translation  between  packets  on  the  DSSI  bus  and
             buffers  in  memory.  The relationship between packets
             and buffers is not one to  one;  several  buffers  may
             translate   into   one  packet,  but  one  buffer  can
             translate into no more than one packet.

     SWIFT keeps its buffers in two linked lists.   One  list  holds  empty
     buffers  into  which  SWIFT  will put inbound packets.  The other list
     holds nonempty buffers from which SWIFT will create and send  outbound
     packets.  Each list may hold one or more packets' worth of buffers.

                                      NOTE

             In this document, INBOUND PACKET refers  to  a  packet
             which  SWIFT  is receiving on the DSSI bus when acting
             as a Target.  OUTBOUND PACKET refers to a packet which
             SWIFT  is  sending  on  the DSSI bus When acting as an
             Initiator.

     For SWIFT to receive a packet on the DSSI bus, the microprocessor must
     first set up the chip.  It must then provide SWIFT with empty buffers.
     Once the microprocessor has created  and  linked  together  the  empty
     buffers,  it  writes  the address of the first buffer into SWIFT's TLP
     register and sets MI and IN.  SWIFT will then put any  inbound  packet
     into the buffer(s) provided by the microprocessor.

     SWIFT OPERATION - USER INTERFACE                              Page 7-3
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


          For SWIFT to send a packet across the DSSI bus, the  packet  must
     first  be  put  into  a  buffer  or  buffers.   This  is  done  by the
     microprocessor according to the same rules SWIFT uses to  put  inbound
     packets  into buffers.  Once the buffers are ready, the microprocessor
     loads the address of the first buffer  of  the  packet  into  the  ILP
     register  and  sets  the MO and OUT bits in the DSCTRL.  Conceptually,
     SWIFT will then read  the  buffers  provided  by  the  microprocessor,
     create  a  packet out of them, and attempt to send it on the DSSI bus.
     Actually, all three operations happen concurrently.



     7.2.2  General Buffer Format

     All buffers used by  SWIFT  have  the  same  structure.   This  is  to
     simplify  buffer management and buffer handling by SWIFT.  All buffers
     must begin on longword boundaries, i.e.   the  two  least  significant
     address bits must be zero.

          The general format of a SWIFT buffer is:


             byte                    General Buffer
             address
                      +-----------------------------------------------+
             base+0   |              Thread word                      |
                      +-----------------------------------------------+
             base+2   |              Status/Sync word 1               |
                      +-----------------------------------------------+
             base+4   |              Sync word 2                      |
                      +-----------------------------------------------+
             base+6   |              Command word                     |
                      +-----------------------------------------------+
             base+8   |        Command Bytes (6 bytes, 3 words)       |
                      +-----------------------------------------------+
             base+14  |              Command Bytes EDC                |
                      +-----------------------------------------------+
             base+16  |              Data (n bytes)                   |
                      +-----------------------------------------------+
             base+16+n|              Data EDC                         |
                      +-----------------------------------------------+

     The elements of the buffer are defined as follows:

           o  Thread Word - The Thread Word is a pointer to the next buffer
              in  this list.  A zero in this location indicates this is the
              end of the linked list, i.e.  the last buffer  in  the  list.
              The  Thread  Word  will  be  the byte address, shifted to the
              right by two places, of the beginning of the next  buffer  in
              the list - i.e.  the longword address of the next buffer.

           o  Status/Sync Word 1 - SWIFT expects this word  to  read  AAAAH
              before  it  uses  the buffer.  After a transfer is completed,
              either inbound or outbound, SWIFT  will  write  the  transfer

     SWIFT OPERATION - USER INTERFACE                              Page 7-4
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


              status  to  the Status/Sync Word 1 of the first buffer of the
              packet.  SWIFT will not change the Status/Sync Word 1 of  any
              non-first buffers of the packet.

           o  Sync Word 2 - SWIFT expects this word to read 5555H before it
              uses  the  buffer.  Sync Word 1 and Sync Word 2 together form
              the Sync Character.  The Sync Character  is  used  to  verify
              buffers.  See the Data Integrity section for details.  If the
              Sync Character is incorrect in either an inbound or  outbound
              buffer,  SWIFT  shall  assume  the  buffer  is  bad  (see the
              Initiator or Target operation chapters for information on how
              SWIFT  handles these conditions).  SWIFT never writes to Sync
              Word 2.

           o  Command Word - The  Command  Word  contains  instructions  to
              SWIFT regarding the transfer.  This word is valid only in the
              first buffer of a  packet.   In  subsequent  buffers,  it  is
              ignored by SWIFT.  SWIFT never writes to the Command Word

                   This bits in this word are:

                15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
              +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
              |IOC| - | - | - | - | - | - | - | - | - | - | - | - | DEST ID   |
              +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

              The bit fields in this memory word represent the following:

               o  IOC - (Interrupt On Completion) - When IE is Set  in  the
                  DSCTRL  register  and this bit is set in the first buffer
                  of  a  packet,  SWIFT  will  assert   SYSINTERRUPT   upon
                  completion  (successful or not) of the packet.  When this
                  bit is Clear, SWIFT will  not  assert  SYSINTERRUPT  when
                  done with a packet unless an error has occurred.  When IE
                  is Clear, SWIFT will not assert  SYSINTERRUPT  when  done
                  with a packet.

               o  DEST ID - For outbound buffers, the ID of the  Target  to
                  be selected.  Not used in inbound buffers.


           o  Command Bytes - The Command Bytes are  the  6  byte  sequence
              sent  in  COMMAND OUT phase on the DSSI bus by the Initiator.
              The Command Bytes section of the buffer is used by SWIFT only
              in  the  first  buffer of the packet.  In subsequent buffers,
              SWIFT  ignores  the  Command  Bytes  section.   For  outbound
              packets, SWIFT expects the microprocessor to have filled this
              section with the data defined in the DSSI spec.  For  inbound
              packets,  SWIFT  will  put  the  data sent in the COMMAND OUT
              phase here.

                   The format of the Command Bytes is:

     SWIFT OPERATION - USER INTERFACE                              Page 7-5
     FORMATTING PACKETS AND BUFFERS                           3 August 1989



                                     Command Bytes

               15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
              +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
              | REQ/ACK Offset|   Reserved    |     Command  Op. Code         |
              +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
              |          Source Port          |       Destination Port        |
              +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
              | 0 | 0 | 0 |              Frame Length                         |
              +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


              1.  REQ/ACK Offset -  The  number  in  this  field  partially
                  determines  what  offset  is  to  be used during the DATA
                  PHASE.  For outbound packets, the  microprocessor  should
                  set  this  number  to  7,  since SWIFT does not check the
                  number in this field,  but  instead  always  uses  7  for
                  outbound  transfers.   If  the microprocessor puts a 3 in
                  this field, no damage will  be  done,  but  the  transfer
                  could potentially be slower.  The REQ/ACK offset actually
                  used in a transfer is controlled by the  Target,  and  is
                  calculated  by  the  Target  to be the minimum of the the
                  value it receives in this field and the highest offset it
                  can  handle.  For an inbound packet, this number may read
                  3, 7, or 15.  If the number is 3, SWIFT  used  a  REQ/ACK
                  offset  of  3.   If  the  number is 7 or 15, SWIFT used a
                  REQ/ACK offset of 7.

              2.  Command Op.  Code - The number in this field  is  defined
                  by  the  DSSI Spec, Appendix A, to be E0H.  It is checked
                  by SWIFT in  inbound  packets,  but  is  not  checked  in
                  outbound packets.

              3.  Source Port - The number in  this  field  represents  the
                  port  address  of  the source of the packet.  For inbound
                  packets, this number will indicate  the  address  of  the
                  other  node.  For outbound packets, this number should be
                  the port address of this node.  Note that the  the  three
                  low  order bits of the port address are the DSSI address;
                  SWIFT depends on this when checking inbound packets.  For
                  inbound  packets, SWIFT compares the three low order bits
                  of this number with the DSSI address of  the  node  which
                  selected  it, as indicated in the Selection phase.  SWIFT
                  does not check the five high order bits.  Note  that  for
                  outbound  packets,  this  is  NOT  where  SWIFT  gets its
                  information about which node to select; that is extracted
                  from  the Command Word.  No checking is done for outbound
                  transfers.

              4.  Destination Port - The number in  this  field  represents
                  the  port  address of the destination of the packet.  For
                  outbound packets, this number should be the port  address
                  of  the  other  node.   For  inbound packets, this number

     SWIFT OPERATION - USER INTERFACE                              Page 7-6
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


                  should indicate port address of this node.   For  inbound
                  packets,  SWIFT compares the three low order bits of this
                  number with its DSSI  address  as  indicated  in  the  ID
                  register.  SWIFT does not check the five high order bits.
                  No checking is done for outbound transfers.

              5.  Frame Length - This number is the length in bytes of  the
                  data  section  of the packet.  According to Appendix A in
                  the DSSI Spec, the maximum value for the Frame Length  is
                  4500.    SWIFT   does  not  explicitly  check  that  this
                  restriction is met.  This word is where  SWIFT  gets  its
                  information  about  the  length of the packet.  Note that
                  this number does not have to be an integral  multiple  of
                  the byte length of a buffer's data section.


           o  Command Bytes EDC -  The  Command  Bytes  EDC  is  the  error
              detection  code for the command bytes.  For outbound packets,
              this word is always read by SWIFT but is checked only if  EEN
              is  set.   For  inbound  packets,  SWIFT always generates and
              writes this word.  This word  is  valid  only  in  the  first
              buffer  of  a  packet.  Note that this is not the same as the
              Command Bytes Checksum which is sent over the DSSI bus.

           o  Data Block - The Data  Block  holds  the  data  of  the  DSSI
              packet.  The packet data may be split up into several buffers
              (see below).  SWIFT has  several  Data  Block  formats.   The
              format  used  in  a particular buffer is dependent on several
              factors (see below).  The working  maximum  size  of  a  Data
              Block  is  the  value  in  the  BUFSIZ register.  The maximum
              possible size of a Data Block is  4095  words,  although  the
              largest practical value is 2225 words, since the maximum DSSI
              packet length is 4500 bytes.

           o  Data Block EDC - The Data Block EDC holds the EDC of the Data
              Block  if  the  Data  Block is completely full.  If it is not
              full, the EDC will be immediately following the last word  of
              data  (see below).  For outbound packets, this word is always
              read by SWIFT but is checked only if EEN is set.  For inbound
              packets, SWIFT always generates and writes this word.




     7.2.3  Why SWIFT Has Multiple Data Block Formats

     SWIFT is intended to be used as the DSSI interface chip for both hosts
     and  disk  drives.   Disk drives work on units of data called sectors,
     and each sector typically holds 512 bytes of data.  In a  disk  drive,
     by  setting the BUFSIZ to be 256 (words), SWIFT will expect buffers to
     be exactly the size of the drive's sectors.  This is very  useful  for
     preformatting  data  so  the  drive's  microprocessor does not have to
     format the data and generate an EDC  for  every  sector.   Conversely,
     hosts  typically use data in monolithic chunks.  By setting the BUFSIZ

     SWIFT OPERATION - USER INTERFACE                              Page 7-7
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


     to be 2225 (the current maximum length of a DSSI  packet,  in  words),
     SWIFT  will  expect  buffers large enough to hold entire DSSI packets.
     These two different operating environments are the primary reason  why
     SWIFT has multiple Data Block formats.



     7.2.3.1  Types Of DSSI Packets

     There are two distinct types of packets on the  DSSI  bus:   Data  and
     Message.   Data  packets are distinguished from Message packets by the
     first word of data in a packet.   SWIFT  checks  this  word  in  every
     packet to determine if the packet is Data or Message.  Message packets
     are  essentially  overhead;  they  are   used   for   requesting   and
     acknowledging   Data   packets,   among  other  things,  but  not  for
     transferring data.  From a disk drive's point of view, Message packets
     are  never  written  on  or  read from a disk, they are communications
     between the disk's microprocessor and the host.  Data packets, as  the
     name  implies,  are  used  to transfer data between the devices on the
     bus.  There is, however, some non-data information  contained  at  the
     beginning of each Data packet.  This non-data (CI Overhead) is control
     overhead imposed by the CI Port layer, and is currently fixed to be 18
     bytes long.

                                      NOTE

             In this section, the term real data will  be  used  to
             refer to that portion of a Data packet which is not CI
             Overhead information.

     To a disk drive, the  CI  Overhead  is  solely  for  the  use  of  the
     microprocessor,  and the rest of the Data packet is the information to
     be written to or read from the disk.  When a SWIFT in a disk drive  is
     converting  a  Data  packet into buffers, it separates the CI Overhead
     from the real data so the  real  data  is  preformatted  properly  for
     writing  to  disk.   SWIFT  expects outbound Data packet buffers to be
     split up in the same fashion.  The host treats the Data packet as  one
     block  of  data,  so  when  SWIFT  is operating in a host, it does not
     separate the real data from the CI Overhead in a Data packet.



     7.2.3.2  SPT Bit

     The SPT bit in the CSR determines whether SWIFT splits up Data packets
     or  not.  When the SPT bit is set , SWIFT will automatically place the
     CI Overhead into a separate buffer from the real data, or  expect  the
     CI  Overhead  to be in a separate buffer from the real data.  The real
     data, then, will begin in the  second  buffer  of  the  packet.   This
     allows  the  micoprocessor  to  transfer  the data sections of buffers
     directly to/from the disk without manipulating the data.  SPT does not
     affect the way Message packets are handled.

     SWIFT OPERATION - USER INTERFACE                              Page 7-8
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


     7.2.3.3  Where To Find The EDC For The Data Block

     Except for one case (see below), the EDC for a Data  Block  is  always
     immediately  after  the  last  word  of  data  in each buffer.  When a
     buffer's Data Block is completely full, the EDC  for  the  Data  Block
     will  be in the Data Block EDC location.  However, when the Data Block
     is not full, the EDC will be within the Data Block.  This  means  that
     when  SPT  is set, the first buffer of a Data Packet, which holds only
     the 9 word CI Overhead, has the EDC for its Data Block  as  the  tenth
     word of the Data Block.  Similarly, EDCs for Message packets which are
     shorter than the size of a buffer are within the  Data  Block.   If  a
     Message  packet  is  longer  than a single buffer but shorter than two
     buffers, the EDC of the first buffer is in the Data  Block  EDC  slot,
     and  the  EDC  of  the  second  buffer is after the last word of data.
     EDC's for the buffers holding the real data of a Data packet work in a
     similar  way.   Any  real data buffer which is full has its EDC in the
     Data Block EDC slot.  However, the EDC for the last buffer in  a  Data
     packet  may  be  either directly after the last word of data or in the
     Data Block EDC slot, even if the last buffer is not completely full.



     7.2.3.4  Zero-Filling

     As mentioned previously, disk drives work on sectors of data which are
     256  data words long.  A sector is the smallest unit of data which can
     be read from or written to a disk.  Each sector also  has  an  EDC  to
     protect  the sector's data.  The EDC is always after the 256th word of
     data and is always one word long.   The  EDC  is  generated  by  SWIFT
     before  data  is  written to the disk, and it is checked by SWIFT when
     the buffer containing the data from the sector is sent out on the DSSI
     bus.

          DSSI and the higher level protocols, such  as  the  CI  PORT  and
     MSCP, allow transfers of real data with lengths which are non-integral
     multiples of 512 bytes.  This can create problems with generating  and
     checking EDC's.

                                    Example

             A host may ask a disk  for  42  real  bytes  of  data.
             Since the disk must read an entire sector, the drive's
             processor will give SWIFT a Data Packet consisting  of
             two buffers:  the first containing the CI Overhead and
             its EDC, and the second containing  a  whole  sector's
             worth  of  data  and its EDC.  The processor will have
             set the Frame Length field to be 60 (18+42).  As SWIFT
             is  sending  the data, it is keeping track of how many
             bytes it has sent.  After it has sent the  60th  byte,
             it would want to check the EDC of the second buffer to
             make sure the data in it was valid.   The  problem  is
             that  the  buffer's  EDC  covers  all 256 words of the
             buffer.  The solution is for SWIFT to read the rest of
             the buffer without sending the extra data to the host,

     SWIFT OPERATION - USER INTERFACE                              Page 7-9
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


             then check the buffer's EDC at the end.  Similarly, if
             the host asks the disk to write 42 real bytes of data,
             SWIFT will receive all the bytes, then will have to do
             something  to fill up the rest of the buffer so it can
             put the EDC in the Data Block EDC location.   In  this
             case,  SWIFT  will write zeros to the rest of the Data
             Block, using those zeros in its EDC calculations, then
             write the EDC for all 256 words in the buffer (21 real
             data words + 235 zero words).

     These operations are called zero-filling, and are enabled  by  setting
     the ZF bit in the CSR.  Zero-filling can occur only on the last buffer
     of a Data packet when ZF is set.  If SPT and ZF are set , zero-filling
     will  occur  in  the  last  buffer  when a Data packet has a real data
     length that is not an integral  multiple  of  the  buffer  Data  Block
     length.  If ZF is set and SPT is clear, zero-filling will occur in the
     last buffer of a Data packet when the packet's Frame Length is not  an
     integral  multiple  of the Data Block length.  Note that typically SPT
     and ZF are either both set or both clear.



     7.2.3.5  Other Overhead Size (OOVSIZ)

     At the time SWIFT was being designed, there was  discussion  about  an
     ECO  to  the CI PORT spec which would create a new set of Data packets
     with CI Overheads  longer  than  18  bytes.   However,  there  was  no
     agreement  on how large the new CI Overheads would be.  The method for
     distinguishing the old type of data  packet  from  the  new  type  was
     defined,  though,  so  SWIFT  knows  how  to  distinguish between Data
     packets with an 18 byte CI overhead and Data packets with  the  "other
     overhead  size".   When the other overhead size is defined, SWIFT will
     be able to split up the new type of data packets through  the  use  of
     the  OOVSIZ  register.   This  register will have to be written by the
     microprocessor with the length, in words, of the other overhead  size.
     If  the  ECO never goes through, this register can be ignored.  If the
     ECO creates an overhead with an odd byte length overhead or more  than
     one  other  overhead  length, SWIFT will not be able to split up those
     types of Data packets.



     7.2.4  Adding To A Linked List

     The following enumerates the steps required  to  dynamically  add  new
     buffers to the TLP and ILP lists.

          1.  Fill in the new buffer command block and insure that the  two
              sync  words  are  correct.  The thread word of the new buffer
              must be zero or point to another valid buffer.

          2.  Update the thread word of the last  buffer  on  the  list  to
              point to the first new buffer to be added.

     SWIFT OPERATION - USER INTERFACE                             Page 7-10
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


          3.  Read the xLP.  Is it 0?  No, then don't update the xLP -  you
              are done.  Yes, continue with step 4.

          4.  Is the first sync character of the last buffer  still  there?
              Yes,  this indicates that status has not been written to that
              buffer yet and you should continue with  step  5.   No,  then
              don't update the xLP - you are done.

          5.  If you are adding to the TLP list turn off the IN and MO bits
              in  the  DSCTRL  register.  If you are adding to the ILP list
              turn off the OUT and MO bits in the DSCTRL register.

          6.  Write the xLP with the new thread word, pointing to  the  new
              buffer.

          7.  Read the xLP.  If the xLP is not the value you just wrote, go
              back  to step 6 and repeat.  If the xLP is the value you just
              wrote, go to step 8.

          8.  If you added to the TLP list, turn the IN bit in  the  DSCTRL
              register back on by setting IN and MI in the DSCTRL register.
              If you added to the ILP list, turn the OUT bit in the  DSCTRL
              register  back  on  by  setting  OUT  and  MO  in  the DSCTRL
              register.  You are done.


                                      NOTE

             When specifically changing the IN and MI bits  in  the
             DSCTRL  register,  write  the  OUT  and  MO  bits with
             complementary values  to  insure  that  they  are  not
             changed  as  well.  When specifically changing the OUT
             and MO bits in the DSCTRL register, write the  IN  and
             MI  bits with complementary values to insure that they
             are not changed as well.  The IN and MI pair  and  the
             OUT   and   MO   pair  can  only  be  changed  by  the
             microprocessor if the pair is written  with  the  same
             value at the same time.




     7.2.5  Removing From A Linked List

     The following enumerates the steps required to remove  unused  buffers
     from the TLP and ILP lists.

          1.  Clear the appropriate Enable (IN or OUT) bit  in  the  DSCTRL
              register.

          2.  Test this bit and the OIP/IIP bits until they both read zero.
              This  will  insure that SWIFT was not arbitrating and winning
              the bus, while the microprocessor  was  disabling  it  as  an
              Initiator.

     SWIFT OPERATION - USER INTERFACE                             Page 7-11
     FORMATTING PACKETS AND BUFFERS                           3 August 1989


          3.  Once both bits are cleared, any buffer  manipulation  can  be
              done, since the list will remain static.




     7.3  SWIFT TO USER - CONTROL/STATUS INFORMATION

     The user formats and prepares the outgoing packet or receive  buffers,
     loads  the  ILP or TLP with the starting address of a buffer, and sets
     the OUT or IN bit in the  DSCTRL  register  to  start  or  enable  the
     transfer.   SWIFT,  in  turn,  completes the transfer, alerts the user
     when the  transfer  is  complete,  and  returns  to  the  user  status
     information about the transfer.



     7.3.1  Indicating That The Transfer Is Complete

     SWIFT alerts the user that a transfer is complete via the SYSINTERRUPT
     line.   Interrupts  are enabled by the user via the IEN bit in the CSR
     register.



     7.3.2  Providing Transfer Status - Packet Status Word

     SWIFT  provides  status  information  on  a  transfer  via  the  ISTAT
     register,  and  the status word of a packet.  Packet status is written
     to the 2nd word of the first buffer of a packet,  upon  completion  of
     the  packet  transfer;  it is written over what was previously used as
     the first sync character.  The following is a description of the  bits
     in the status word of the packet:

       15  14  13  12  11  10   9   8   7   6   5   4   3   2   1   0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |DNE|  BUFFER COUNT<5:0>    |NEB|MEM|NRP|NAK|BPH|DSA|PAR|XSM|SNF|
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


           -  DNE - DoNE bit, is set when  a  packet  has  been  completed,
              whether  successfully or not, or when the microprocessor puts
              the first sync character in a buffer.   It  should  be  noted
              that  as this bit is set in the sync character, it should NOT
              be used to determine if the packet  has  been  completed.   A
              packet  has  been  completed when its sync character has been
              overwritten by the status word; thus, it will  no  longer  be
              AAAAH,  as  this  is  an  impossible combination for a packet
              status word.  The DNE bit, by itself, is therefore useless to
              the  microprocessor.   Only  if  it  is 0, does it indicate a
              problem, as no  microprocessor-prepared  buffer  should  ever
              have  a  0 in the DNE bit location.  A 0 in this bit location
              could indicate many problems:  the Sync/Status  location  had
              been  written over with some kind of erroneous data after the

     SWIFT OPERATION - USER INTERFACE                             Page 7-12
     SWIFT TO USER - CONTROL/STATUS INFORMATION               3 August 1989


              buffer had been checked, the buffer was  never  validated  in
              the  first  place,  the  microprocessor  wrote the wrong Sync
              Character (or 5555H) to it, etc.

           -  BUFFER  COUNT<5:0>   This   value   should   be   interpreted
              differently for inbound and outbound packets.

              1.  For inbound packets the following rules  apply.   If  the
                  packet  was  successfully received, this value represents
                  the number of buffers in the  received  packet.   If  the
                  packet  was  unsuccessfully received, this bit represents
                  the number of buffers that were checked and filled, up to
                  and  including the time the error occurred.  It should be
                  noted that a Target performs a  "burn-one-buffer"  ending
                  for  all errors other than a SNF and BFB error.  Thus, if
                  a Target determines that the packet is bad  due  to  such
                  things as bad parity, a Target timeout, a RST on the DSSI
                  bus, not enough buffers etc., it will  "burn-one-buffer".
                  This  means  that  it  will  NAK  the status of the first
                  buffer of the packet by writing  the  appropriate  status
                  word,  and  update the TLP with the address of the second
                  buffer of the packet.  This allows the Target to use  one
                  buffer  instead  of  several.   THERE IS ONE EXCEPTION to
                  this, and that is when a bad sync character is  found  in
                  either  a  first  buffer (BFB) or non-first buffer (SNF).
                  In the BFB case, the Target automatically clears  the  IN
                  bit in the DSCTRL register and leaves the TLP pointing to
                  the first buffer of the packet; status IS NOT written  to
                  that  buffer,  thus  the  buffer  count  bits  don't mean
                  anything.  In the  SNF  case,  the  Target  automatically
                  clears  the  IN bit in the DSCTRL register and leaves the
                  TLP pointing to the first buffer of the packet; status IS
                  written  to  the  first  buffer and thus the buffer count
                  bits ARE  valid  and  represent  the  number  of  buffers
                  received  up  to the time the bad sync was found PLUS the
                  bad buffer itself.  For example, if the Target discovered
                  a  parity  error as it was filling up the 5th buffer of a
                  packet the buffer count would be 5.  If  5  buffers  were
                  successfully  received  and  the  Target discovered a bad
                  sync character in the 6th buffer as it was  verifying  it
                  before using it, the buffer count would be 6.

              2.  For outbound packets the following rules  apply.   First,
                  it should be noted that Initiators always shut themselves
                  off (turn off the out bit in  the  DSCTRL  register)  and
                  update  the  ILP  with the address of the FIRST buffer of
                  the failed packet regardless of the kind  of  error  that
                  occurred.    If  the  packet  is  sent  successfully  the
                  Initiator will stay enabled as an  Initiator  and  update
                  the  ILP  with  the  thread word of the next packet to be
                  sent out.  Thus, for  a  successfully  sent  packet,  the
                  buffer  count bits represent the number of buffers in the
                  sent packet.  For  an  unsuccessfully  sent  packet,  the
                  buffer count bits represent the number of buffers fetched

     SWIFT OPERATION - USER INTERFACE                             Page 7-13
     SWIFT TO USER - CONTROL/STATUS INFORMATION               3 August 1989


                  UP TO AND INCLUDING the time at which the error occurred.
                  The  only  exception  to  this  rule  is  when a bad sync
                  character is found in a first buffer (BFB), in which case
                  there  is  no  status written at all and the buffer count
                  bits are meaningless.  For example, if a sudden DSSI  bus
                  reset occurs while the Initiator is sending out the fifth
                  buffer of a packet, the buffer count will be 5.   If  the
                  Initiator  has  sent  out  5  buffers  of  a  packet  and
                  discovers a bad sync character in the 6th buffer as it is
                  verifying  it  to  send, the buffer count will be 6 as it
                  had fetched 6 buffers at the time the error occurred.


           -  NEB - Not Enough Buffers bit, is set when SWIFT, acting as an
              Initiator/Target,  expects  to send/receive more buffers, but
              finds no more buffers linked on.

           -  MEM - MEMory error bit, is set by SWIFT when it is acting  as
              an Initiator, has EEN set, and finds an incorrect EDC word at
              the end of either the command bytes or the data  bytes  of  a
              buffer.

           -  NRP - No RePly bit,  is  set  when  SWIFT  gets  a  selection
              timeout,  i.e.   it  tries  to select a Target, but no Target
              responds.

           -  NAK - Not AcK bit,  is  set  when  the  packet  was  sent  or
              received unsuccessfully.

           -  BPH - Bad PHase bit, is set by an Initiator when  the  Target
              has jumped to a phase other than the one expected.

                  [example 1] A Target has just responded to the  selection
                  phase, but instead of sending the Command Out Phase along
                  with a REQ, it sends a Status, Data or invalid phase.

                  [example 2] The Initiator has just received  the  command
                  bytes  checksum and is expecting the Data Out Phase next,
                  but gets a Status, Command Out, or invalid phase instead.

                  [example 3] The Initiator is in the middle of sending the
                  data  bytes  and the Target switches to a Status, Command
                  Out or invalid phase.

                  [example 4] The Target asserts a Command Out, Data Out or
                  invalid phase, when the Initiator is expecting the Status
                  In Phase.


           -  DSA :  target command bytes error bit, is set when the Target
              detects  an  error  while  receiving the command bytes.  This
              could be from bad parity, checksum, a Target  timeout,  or  a
              DSSI  RST  occurring  while it is in the process of receiving
              the command bytes.

     SWIFT OPERATION - USER INTERFACE                             Page 7-14
     SWIFT TO USER - CONTROL/STATUS INFORMATION               3 August 1989


           -  PAR:  PARity error bit, is set by a Target when it detects  a
              parity  error,  either directly off the DSSI bus, or internal
              to SWIFT.

           -  XSM :  Checksum Error Bit, is set when the Target  detects  a
              command or data bytes checksum error.

           -  SNF :  Sync Not Found bit, is set when SWIFT  has  fetched  a
              new buffer and either of the sync characters is incorrect.


                                      NOTE

             The SYNC characters are setup by  the  user  in  EVERY
             buffer  of  the  packet,  whereas  the  status word is
             written by SWIFT only  in  the  FIRST  buffer  of  the
             packet and only upon COMPLETING the packet.













                                   CHAPTER 8

                                TARGET OPERATION




                                  Introduction
                                  Introduction

             SWIFT becomes a target once it responds  to  selection
             by  an  initiator.   When  acting  as  a TARGET, SWIFT
             asserts REQs on the DSSI  bus  when  it  is  ready  to
             accept data from the initiator.  The initiator asserts
             ACKs in response to the REQs when it has  placed  data
             on  the DSSI bus.  Once it has responded to selection,
             the target is responsible for controlling all the DSSI
             Bus  phase changes, using the CD and IO lines.  HOW it
             updates its TLP register, and IF it writes  status  to
             the  status  word  of  the  packet,  is  determined by
             whether  or   not   the   packet   transfer   occurred
             successfully,  and  if  unsuccessfully,  what  type of
             errors were encountered.  Section 1  of  this  chapter
             outlines  the  steps  performed  and  potential errors
             encountered, by a target  during  a  packet  transfer.
             Section  2  specifies  when  the  target will actually
             write buffer status, and how it will  update  its  TLP
             register  upon  completion  of  a  packet.   Section 3
             contains information on various  topics  of  interest,
             regarding SWIFT as a target in general.







     8.1  TARGET RECEIVING A PACKET - A STEP BY STEP DESCRIPTION


                                          NOTE

                      All DSSI bus phases are named  as  referenced
                      to  the Initiator.  Both target and initiator
                      experience the  Status  In  phase,  Data  Out
                      phase   etc.,   even  though  the  target  is
                      actually sending status OUT and  taking  data

     TARGET OPERATION                                              Page 8-2
     TARGET RECEIVING A PACKET - A STEP BY STEP DESCRIPTION   3 August 1989


                      IN.   This  specification  follows the naming
                      convention specified in the Addendum  to  DEC
                      STD 161.


          1.  SWIFT determines that an initiator is selecting a target when
              BSY  is  deasserted  and SEL is asserted on the DSSI bus.  It
              compares the ID sent by the initiator on the  bus,  with  its
              own ID.  Once it has determined that IT is being selected, it
              responds to the selection by asserting BSY and  entering  the
              COMMAND OUT phase.

                                          NOTE

                      If the P/R bit in the ID Register is set (1),
                      SWIFT  will  use  the three low order bits in
                      the ID Register as its ID.  If the P/R bit is
                      cleared (0), SWIFT will use the three DSSI ID
                      pins as its ID.  If the selected target  will
                      not  respond  to  the  selection  phase,  the
                      target's ID register and the  Destination  ID
                      in   the  initiator's  packet  command  word,
                      should be double checked for agreement.   The
                      Selection  Enable  bit  in  the  target's CSR
                      should also be checked; if it is not set (1),
                      the target will not respond to selections and
                      the initiator could  experience  a  selection
                      timeout.   This  checklist is given to aid in
                      system debug.  It does not mean to imply that
                      a  microprocessor  has  visibility  into  two
                      SWIFTs at the same time.



          2.  Once recognizing  that  it  has  been  selected,  the  target
              determines  if  it  may  fetch  the  first buffer from buffer
              memory.  Should either the TLP be zero (0), OR the IN bit not
              be set, the target determines that it cannot allow a transfer
              and immediately jumps to the  Status  In  phase;  it  neither
              clears the IN bit nor writes status to buffer RAM.  If the IN
              bit is set and the TLP register is not zero (0),  the  target
              begins  to fetch the first buffer.  It transfers the starting
              address of the buffer, located in the TLP  register,  into  a
              microprocessor  invisible register called the Current Pointer
              Register (CPR).  It then begins the check of the buffer:


                  [a] The target reads the  first  sync  character  of  the
                  packet,  at  the  address  held in the CPR + 2; this word
                  should read AAAA Hex, and is the first  word  the  target
                  uses  to determine that the buffer is valid.  IF the word
                  IS NOT correct the target immediately jumps to the Status
                  In phase, sending a NAK to the initiator.  It also clears
                  the DSCTRL register's MI bit and sets the BFB,  IER,  LDN

     TARGET OPERATION                                              Page 8-3
     TARGET RECEIVING A PACKET - A STEP BY STEP DESCRIPTION   3 August 1989


                  and  IBC bits in the ISTAT Register, which interrupts the
                  micro if enabled to do so.  It does not write  status  to
                  the  status  word  of  the packet, as it does not know if
                  this is  a  valid  buffer  or  a  part  of  a  previously
                  completed  packet.  The target completes the transfer, by
                  following step 1, outlined in section 8.2  IF  the  first
                  sync  character IS correct, the target proceeds with step
                  2b.


                  [b] The target reads the second sync character, expecting
                  a 5555 Hex.  IF the second sync character IS NOT correct,
                  the target proceeds the same way it does with a bad first
                  sync  character,  outlined in step 2a.  If it IS correct,
                  the target proceeds with step 2c.


                  [c] The target  reads  the  command  word  following  the
                  second  sync  character,  and  latches  the  Interrupt on
                  Completion bit; this bit determines if  the  target  will
                  interrupt  the  micro upon the successful completion of a
                  packet.  The Destination ID field of this  word  is  used
                  only  when  SWIFT  is an initiator, and is ignored by the
                  target.  The target then proceeds with step 3.




          3.  The target has  now  determined  that  the  first  buffer  it
              fetched  is  valid  and can begin filling it with the command
              bytes that the Initiator  is  waiting  to  send.   It  starts
              asynchronously  issuing REQs to the Initiator for the command
              bytes, and once the first word has been  received,  begins  a
              new memory write cycle at address CPR + 8.  It begins writing
              the command bytes to buffer RAM.


          4.  When the sixth command byte and the  command  bytes  checksum
              have  been  received,  the  target  checks  the command-bytes
              checksum; this is the last byte sent by the initiator  during
              the Command Out Phase:

                  [a] IF the command bytes checksum IS correct, the  target
                  jumps to the Data In phase and proceeds with step 5.

                  [b] IF the command bytes checksum  IS  NOT  correct,  the
                  target  jumps  to  the Status In phase and sends a NAK to
                  the initiator.  It also sets the IER and LDN bits in  the
                  ISTAT Register, and interrupts the micro if enabled to do
                  so.  It then writes status to  the  status  word  of  the
                  packet,  setting  the DNE, NAK, DSA, XSM and Buffer Count
                  bits.   The  target  then  completes  the  transfer,   by
                  following step 2, outlined in section 8.2

     TARGET OPERATION                                              Page 8-4
     TARGET RECEIVING A PACKET - A STEP BY STEP DESCRIPTION   3 August 1989


          5.  The target synchronously issues REQS to the initiator for the
              data  bytes  and  writes  them  to  buffer memory as they are
              received.  Once all the data bytes for a  given  buffer  have
              been  received,  the target determines if it has received the
              entire packet; if so it continues with step 7.  If  it  needs
              to fetch another buffer it continues with step 6.


          6.  The target has determined that there are more data  bytes  to
              come,  and it must fetch a new buffer.  It continues to issue
              REQs to the initiator until the REQ/ACK offset is reached  or
              its  internal  FIFO is filled.  Concurrently, it begins a new
              memory read cycle, using the address in the CPR; this is  the
              starting address of the just completed buffer, which contains
              the thread word pointing to the address of the next available
              buffer  linked  on.   Once the address of the next buffer has
              been fetched, it is  placed  in  the  CPR,  over-writing  its
              previous  contents.   The  target checks the new address.  If
              the  address  is  0,  SWIFT  DOES  NOT  have  enough  buffers
              available  to complete the packet.  It jumps to the Status In
              phase and sends a NAK to the initiator.   It  also  sets  the
              IER, LDN and INB bits in the ISTAT Register, which interrupts
              the micro if enabled to do so.  The target then writes status
              to  buffer  RAM,  setting  the DNE, NEB, NAK and Buffer Count
              bits.  The target completes the transfer by following step 2,
              outlined  in  section  8.2  If  the  target DOES have another
              buffer available, it will use the address in  the  CPR  as  a
              base  address,  and  issue  a  new  memory read cycle at base
              address +2.  It then begins the check of the sync characters:


              1.  IF either of the sync  characters  IS  NOT  correct,  the
                  target  immediately jumps to the Status In phase, sending
                  a NAK to  the  initiator.   It  also  clears  the  DSCTRL
                  Register's MI bit and sets the SNF, IER, IBC and LDN bits
                  in the ISTAT Register,  which  interrupts  the  micro  if
                  enabled  to  do  so.  As the incorrect sync character was
                  found in a NON-first packet buffer, the first  buffer  of
                  the  packet  must  have been valid, and the target writes
                  the packet  status  to  it.   The  target  completes  the
                  transfer, by following step 3, outlined in section 8.2


              2.  If each of the sync characters  IS  correct,  the  target
                  resumes  issuing  REQs  to the initiator.  As soon as the
                  first data word is received,  it  begins  another  memory
                  address  cycle  at  CPR + 16.  The target resumes writing
                  data  words  to  buffer  memory  as  they  are  received,
                  returning to step 5.



     TARGET OPERATION                                              Page 8-5
     TARGET RECEIVING A PACKET - A STEP BY STEP DESCRIPTION   3 August 1989


          7.  Once the target has received all the data  bytes,  it  checks
              the incoming data checksum; this is the last byte of data the
              initiator will send  during  the  transfer.   If  it  IS  NOT
              correct,  the target proceeds with step 8.  If it IS correct,
              the target has received the packet successfully; it jumps  to
              the  Status  In phase and sends an ACK to the initiator.  The
              target then completes the  transfer,  by  following  step  4,
              outlined in section 8.2


          8.  IF the data bytes checksum was NOT correct, the target  jumps
              to the Status Out phase and sends a NAK to the initiator.  It
              also sets the IER and LDN bits in the ISTAT  Register,  which
              interrupts  the  micro  if  enabled to do so.  It then writes
              status to the status word of the  packet,  setting  the  DNE,
              NAK,  XSM  and  Buffer  Count bits.  The target completes the
              transfer, by following step 2, outlined in section 8.2





     8.2  TARGET COMPLETING A PACKET - 4 MODES


          1.  When the target finds an  incorrect  Sync  character  in  the
              first buffer, it simply stops the DMA operation on the II bus
              and clears the DSCTRL  Register's  MI  bit.   It  leaves  the
              address  of  the  first buffer in the TLP register.  It jumps
              immediately to the Status In phase.  Once it has sent the NAK
              status  to the initiator, it disconnects from the DSSI bus by
              deasserting BSY.  Finally, it transfers the cleared MI bit to
              the  IN bit, disabling further target operations until MI has
              been set by the micro.  The ISTAT Register's BFB  bit  should
              alert  the  micro  that  the  the sync error was in the first
              buffer, and thus the status word of that packet is invalid.


          2.  When the target receives an incorrect command bytes checksum,
              an  incorrect  data  bytes  checksum,  a command bytes parity
              error, a data bytes parity error  or  does  not  have  enough
              buffers to complete a packet, it performs a "burn-one-buffer"
              packet ending.  It returns a NAK to the initiator, and writes
              status  to  the first buffer of the packet; it does NOT clear
              the MI bit.  It  then  updates  the  TLP  register  with  the
              address  in  the  thread  word of the FIRST buffer, i.e.  the
              second buffer, causing it to discard one  buffer  instead  of
              several.   The  second buffer will now be the first buffer of
              the next  packet  it  receives.   It  should  be  noted  that
              although  the target lost only one buffer due to the transfer
              error, the Buffer Count field in the packet status word still
              represents the number of buffers that were transferred at the
              time the error occurred.

     TARGET OPERATION                                              Page 8-6
     TARGET COMPLETING A PACKET - 4 MODES                     3 August 1989


          3.  When the target  finds  an  incorrect  sync  character  in  a
              nonfirst  buffer  it  NAKs the initiator and writes status to
              buffer RAM.  It also clears the DSCTRL Register's MI bit  and
              once  the  NAK  has been sent to the initiator, transfers the
              cleared MI bit to the IN bit.  The  target  updates  the  TLP
              register  with  the address of the first buffer of the packet
              that failed.  The micro should know that status  was  written
              to  the first buffer, as the ISTAT Register's SNF bit, rather
              than BFB bit was set.


          4.  When the target successfully  receives  a  packet  it  writes
              status  to the first buffer, setting the DNE and Buffer Count
              bits.  Once it has finished sending the  ACK  status  to  the
              initiator,  it  sets  the  LDN  and  IDN  bits  in  the ISTAT
              Register, which interrupts the micro if  the  packet  command
              word's  IOC  bit, and the CSR's IEN bits were previously set.
              Finally, it fetches the address of the next available buffer,
              located  in  the  thread  word of the last buffer filled, and
              places it into the TLP register.




     8.3  ADDITIONAL NOTES ON TARGET OPERATION

     8.3.1  Target Timeout

     The target starts its timer soon after being selected by an initiator.
     Should  it  timeout,  the  target  simply  disconnects from the bus by
     deasserting BSY.  It then sets the LDN  and  IER  bits  in  the  ISTAT
     Register,  which  interrupts  the  micro if enabled to do so.  It then
     writes status to the  packet  it  was  working  on  when  the  timeout
     occurred, setting the DNE, NAK and Buffer Count bits.  It then updates
     the TLP register with the address in the  thread  word  of  the  FIRST
     buffer,  performing a "burn-one-buffer" ending.  It does not clear the
     DSCTRL Register's MI bit, and is capable of being a target again.  The
     actual  timeout value is determined by the value written to the Target
     Timeout field of the Timeout Register.



     8.3.2  Target Receiving A RST While On The Bus

     If a target receives a DSSI RST while it is connected on the DSSI bus,
     it  will  simply  disconnect from the bus by deasserting BSY.  It will
     set the LDN, IER and RST bits in the ISTAT register, which  interrupts
     the micro if enabled to do so.  It then writes status to the packet it
     was working on when the RST occurred.  Finally,  it  updates  the  TLP
     register with the address in the thread word of the FIRST buffer, i.e.
     the second buffer, performing a "burn-one-buffer" ending.  It does not
     clear  the  DSCTRL  Register's MI bit and is capable of being a target
     again.












                                   CHAPTER 9

                              INITIATOR OPERATION




                                  Introduction
                                  Introduction

             SWIFT will arbitrate for the DSSI bus when the OUT bit
             in the DSCTRL Register is set, and the ILP register is
             not 0.  Once it has arbitrated for the bus and won, it
             selects   a   target  and  waits  for  the  target  to
             acknowledge being selected.  After that point it  acts
             like  a  slave  to the target, giving data and ACKs to
             the target, ONLY in response to the targets  REQS  for
             data.  The target controls all DSSI bus phase changes,
             while the Initiator monitors them for  validity.   HOW
             it  updates  its ILP register, and IF it writes status
             to the status word of the  packet,  is  determined  by
             whether   or   not   the   packet   transfer  occurred
             successfully, and  if  unsuccessfully,  what  type  of
             errors  were  encountered.   Section 1 of this chapter
             outlines the  steps  performed  and  potential  errors
             encountered, by an initiator during a packet transfer.
             Section 2 specifies when the initiator  will  actually
             write  buffer  status,  and how it will update its ILP
             register upon  completion  of  a  packet.   Section  3
             contains  information  on  various topics of interest,
             regarding SWIFT as an initiator in general.




     9.1  INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DESCRIPTION


          1.  When the ILP register is not 0 and the OUT bit is set,  SWIFT
              attempts  to become an initiator, and arbitrates for the bus.
              It asserts BSY and its node ID on the  DSSI  bus,  and  after
              waiting  a period of time, determines if it is the highest ID
              on the bus; this  is  the  arbitration  phase.   If  it  wins
              arbitration,   it   continues  with  step  2.   If  it  loses
              arbitration it removes BSY and its ID from the BUS, and waits
              until the bus is free again before arbitrating again.

     INITIATOR OPERATION                                           Page 9-2
     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DES ... 3 August 1989


          2.  Once the Initiator determines that it has won the  DSSI  bus,
              it  asserts  SEL  on  the  DSSI bus and prepares to fetch the
              first buffer, by copying the address in the ILP  register  to
              the  Current Pointer Register (CPR).  It then begins fetching
              the buffer and checking it for validity:


                  [a] The initiator reads the first sync character  of  the
                  packet,  at  the  address  held in the CPR + 2; this word
                  should read AAAA Hex and is the first word the  initiator
                  uses  to determine that the buffer is valid.  IF the word
                  IS NOT correct, the buffer is not valid and the initiator
                  immediately disconnects from the bus, by deasserting BSY.
                  All potential targets are totally oblivious to what  went
                  on,  as  none  were  ever  selected.   The initiator also
                  clears the DSCTRL Register's MO bit, sets the  BFB,  IER,
                  and  LDN bits in the ISTAT Register, which interrupts the
                  micro if enabled to do so.  It does not write  status  to
                  the  status  word  of  the packet, as it does not know if
                  this is a valid buffer or part of a previously  completed
                  packet.    The   initiator  completes  the  transfer,  by
                  following step 1, outlined in section 9.2  IF  the  first
                  sync  character  IS correct, the initiator continues with
                  step 2b.


                  [b]  The  initiator  reads  the  second  sync  character,
                  expecting  a  5555  Hex.  IF the second sync character IS
                  NOT correct, the initiator proceeds the same way it  does
                  with a bad first sync character, outlined in step 2a.  IF
                  the second  sync  character  IS  correct,  the  initiator
                  proceed to step 2c.


                  [c] The initiator reads the command  word,  latching  the
                  IOC  bit  and  the three bit Destination ID.  The IOC bit
                  determines if the initiator will interrupt the micro upon
                  the   successful   completion  of  a  packet,  while  the
                  Destination ID is  used  to  determine  which  target  to
                  select  during  the  selection phase.  The initiator then
                  continues with step 3.




          3.  The initiator has now determined that the first buffer of the
              packet  is  valid  and begins the target selection phase.  It
              decodes  the  three  bit  Destination  ID,  and  places   the
              resulting  one  bit  target  ID along with its own decoded ID
              onto the bus, deasserting BSY soon after.   This  deassertion
              of  BSY officially begins the Selection phase, and alerts the
              potential target that it should respond by asserting  BSY  on
              the  bus.   Once BSY is seen by the initiator, it removes SEL
              and both IDs  from  the  bus;  it  is  now  connected  as  an

     INITIATOR OPERATION                                           Page 9-3
     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DES ... 3 August 1989


              initiator.  The target is now responsible for maintaining the
              connection to the initiator, by maintaining an  asserted  BSY
              on  the  bus,  and controlling the DSSI bus phases via the CD
              and IO lines.  The initiator proceeds with step 4.

                                          NOTE

                      If  the  target  does  not  respond  to   the
                      selection  phase by asserting BSY on the bus,
                      a selection timeout could occur.  See section
                      9.3.5   for   a   description   of  selection
                      timeouts.



          4.  The initiator continues reading the same buffer  by  fetching
              the command bytes.  It returns one command byte along with an
              ACK,  each  time  a  REQ  is  issued  by  the  target,  while
              CONCURRENTLY  checking  the  DSSI  bus phase generated by the
              target:


                  [a] IF the target is issuing a Status In phase, while the
                  initiator  expects  the  Command Out phase, the initiator
                  ACCEPTS the NAK/ACK being sent to it (i.e.   acknowledges
                  the  REQ with an ACK); it IGNORES the actual status being
                  sent, assuming it to be a NAK.  It clears the MO  bit  in
                  the DSCTRL Register, and sets the LDN and OBC bits in the
                  ISTAT register, which interrupts the micro if enabled  to
                  do  so.  It then writes status to the packet, setting the
                  DNE, NAK, BPH  and  Buffer  Count  Bits.   The  initiator
                  completes  the transfer, by following step 2, outlined in
                  section 9.2


                  [b] If the target  is  issuing  an  INVALID  phase  (i.e.
                  neither  the  Command Out phase nor the Status In phase),
                  the Initiator immediately asserts RST on  the  DSSI  bus.
                  It clears the MO bit in the DSCTRL Register, and sets the
                  LDN, OBC, RTO and RST bits in the ISTAT  register,  which
                  interrupts  the  micro if enabled.  It then writes status
                  to the packet, setting the DNE, NAK, BPH and Buffer Count
                  bits.  The initiator completes the transfer, by following
                  step 2, outlined in section 9.2



          5.  The initiator fetches and sends all of the command bytes from
              the first buffer.  It then fetches the Command Bytes EDC.  If
              EDC checking is disabled, i.e.  the EEN bit  in  the  CSR  is
              clear  (0),  the  initiator  sends the Command Bytes CHECKSUM
              byte to the target.  If EEN is set (1), the initiator  checks
              the EDC first:

     INITIATOR OPERATION                                           Page 9-4
     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DES ... 3 August 1989


                  [a]  IF  the  command  bytes  EDC  IS  NOT  correct,  the
                  initiator  immediately  asserts  RST on the DSSI bus.  It
                  clears the MO bit in the DSCTRL Register,  and  sets  the
                  LDN,  OBC,  RTO and RST bits in the ISTAT register, which
                  interrupts the micro if enabled to do so.  It then writes
                  status  to  the  packet,  setting  the DNE, NAK, MEM, and
                  Buffer Count bits.  The initiator completes the transfer,
                  by following step 2, outlined in section 9.2


                  [b] IF the command bytes EDC IS  correct,  the  initiator
                  sends the Command Bytes Checksum to the target and starts
                  fetching  the  data  bytes  from  the  buffer.   It  then
                  continues with step 6.



          6.  The initiator continues reading the buffer.

                                          NOTE

                      From the first time an  initiator  fetches  a
                      new  buffer  to the point at which the entire
                      buffer has  been  sent  to  the  target,  the
                      initiator  need  only  issue one address read
                      cycle on the memory bus.  This is due to  the
                      consecutiveness  of  the  packet  header, the
                      command bytes  and  the  data  bytes  in  the
                      packet.   When an initiator is fetching a new
                      NON-first  buffer,   it   checks   the   sync
                      characters,  and  then  continues reading and
                      discarding buffer words UNTIL it reaches  the
                      buffer  address  +  16, the starting point of
                      valid DATA.  At this point it actually starts
                      transferring the data to the target.

              The initiator returns a data byte along with an ACK, for  all
              REQs  that  have  been  issued  by the target.  It constantly
              checks the phase sent out by the target:


                  [a] IF the target is issuing the Status In  phase,  while
                  the  initiator  expects the Data Out phase, the initiator
                  ACCEPTS the NAK/ACK being sent to it (i.e.   acknowledges
                  the  REQ  with  an ACK); it and IGNORES the actual status
                  being sent, assuming it to be a NAK.  It  clears  the  MO
                  bit  in the DSCTRL Register and sets the LDN and OBC bits
                  in the ISTAT register,  which  interrupts  the  micro  if
                  enabled  to  do so.  It then writes status to the packet,
                  setting the DNE, NAK, BPH and  Buffer  Count  Bits.   The
                  initiator  completes  the  transfer, by following step 2,
                  outlined in section 9.2


     INITIATOR OPERATION                                           Page 9-5
     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DES ... 3 August 1989


                  [b] If the target  is  issuing  an  INVALID  Phase  (i.e.
                  neither  the  data  phase  nor  the  status  phase),  the
                  initiator immediately asserts RST on the  DSSI  bus.   It
                  clears  the  MO  bit in the DSCTRL Register, and sets the
                  LDN, OBC, RTO and RST bits in the ISTAT  register,  which
                  interrupts the micro if enabled to do so.  It then writes
                  status to the status word of the packet, setting the DNE,
                  NAK,  BPH and Buffer Count bits.  The initiator completes
                  the transfer, by following step 2,  outlined  in  section
                  9.2



          7.  The initiator fetches and sends all of the  data  bytes  from
              the  buffer.   It then fetches the data bytes EDC word at the
              end of the buffer.  If the CSR's EEN bit is NOT set  and  the
              initiator  is  at  the  end of the packet, the initiator will
                                                                     tep
              send the target the Data Checksum, then continue with step 9.
              If  EEN  is  NOT set and the initiator is NOT at the end of a
              packet, the  initiator  must  fetch  another  buffer,  so  it
                                tep
              continues  with  step 8.  If EEN IS set, the initiator checks
              the EDC first:


                  [a] IF the data bytes EDC IS NOT correct,  the  initiator
                  immediately  asserts  RST on the DSSI bus.  It clears the
                  MO bit in the DSCTRL Register, and sets the LDN, OBC, RTO
                  and  RST bits in the ISTAT Register, which interrupts the
                  micro if enabled to do so.  It then writes status to  the
                  packet, setting the DNE, NAK, MEM, and Buffer Count bits.
                  The initiator completes the transfer by following step 3,
                  outlined in section 9.2


                  [b] IF the command bytes EDC IS  correct,  the  initiator
                  continues  with  step  8  if it has more data to send, or
                  step 9, if it has no more data to send.



          8.  The initiator has determined that there are more  data  bytes
              to  send and that it must fetch a new buffer.  It temporarily
              stops acknowledging REQs from the target, and  begins  a  new
              memory  read  cycle, using the address in the Current Pointer
              Register (CPR); this is the  starting  address  of  the  just
              completed  buffer, which contains the thread word pointing to
              the address of the next available buffer linked on.  Once the
              address  of the next buffer has been fetched, it is placed in
              the CPR register, over-writing the previous contents.  If the
              address  of the next buffer is 0, SWIFT DOES NOT have another
              buffer linked on, even though it believes it has more data to
              send.   It  immediately  assert RST on the DSSI bus.  It also
              sets the LDN, OBC, RST and RTO bits in  the  ISTAT  Register,
              which  interrupts  the  micro  if  enabled  to  do  so.   The

     INITIATOR OPERATION                                           Page 9-6
     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DES ... 3 August 1989


              initiator then writes status to buffer RAM, setting the  DNE,
              NEB,  NAK and Buffer Count bits.  The initiator completes the
              transfer, by following step 2, outlined in section 9.2 If the
              initiator DOES have another buffer linked on, it will use the
              address in the Current Pointer Register as  a  base  address,
              and  issue  a  new  II  bus address cycle at base address +2,
              beginning the check of the sync characters:


                  [a] IF either of the sync characters IS NOT correct,  the
                  initiator  immediately  asserts  RST on the DSSI bus.  It
                  also clears the DSCTRL Register's MO  bit  and  sets  the
                  SNF,  RST,  RTO,  OBC and LDN bits in the ISTAT Register,
                  which interrupts the micro if enabled to do so.   As  the
                  invalid  sync  character  was found in a NON-first packet
                  buffer, the first buffer of the  packet  must  have  been
                  valid,  and the initiator writes the packet status to it.
                  The initiator completes the transfer, by  following  step
                  2, outlined in section 9.2


                  [b] IF each  of  the  sync  characters  IS  correct,  the
                  initiator  has fetched a valid buffer and resumes reading
                  words from buffer memory.   It  reads  and  discards  the
                  words  until it is up to the address where it is fetching
                  valid packet DATA (i.e.  at CPR  +  16).   It  will  then
                  resume  sending data and ACKs, in response to the targets
                  REQS, cycling back to step 7.



          9.  The initiator now believes that it has successfully SENT  the
              entire packet to the target.  It waits to receive status from
              the target, to see if the target  has  successfully  RECEIVED
              the packet.  When it receives the REQ from the target to take
              the status on the bus, it first checks that the  phase  being
              sent out by the target is actually the Status In phase:

                  [a] If the target is issuing an INVALID phase, i.e.   not
                  the  Status  In  phase,  the  initiator  will immediately
                  assert RST on the DSSI bus.  It clears the MO bit in  the
                  DSCTRL  Register  and sets the LDN, OBC, RTO and RST bits
                  in the ISTAT register,  which  interrupts  the  micro  if
                  enabled  to  do so.  It then writes status to the packet,
                  setting the DNE, NAK, BPH and  Buffer  Count  bits.   The
                  initiator  completes  the  transfer, by following step 2,
                  outlined in section 9.2


                  [b] If the target is issuing the  Status  In  phase,  the
                  initiator  acknowledges  the status (i.e.  asserts an ACK
                  in response to the targets REQ), and checks  the  status.
                  IF  the status received is an ACK, the initiator sets the
                  LDN and ODN bits in the ISTAT  Register,  and  interrupts

     INITIATOR OPERATION                                           Page 9-7
     INITIATOR TRANSFERRING A PACKET - A STEP BY STEP DES ... 3 August 1989


                  the  micro  if  the packet command word's IOC bit and the
                  CSR's IEN bit were previously set.  It then writes status
                  to  the  packet,  setting  the DNE and Buffer Count Bits.
                  The initiator completes the transfer, by  following  step
                  3,  outlined  in section 9.2 IF the status received was a
                  NAK, the initiator  clears  the  MO  bit  in  the  DSCTRL
                  Register  and  sets the LDN and OBC in the ISTAT register
                  which interrupts the micro if  enabled  to  do  so.   The
                  initiator  completes  the  transfer, by following step 2,
                  outlined in section 9.2






     9.2  INITIATOR COMPLETING A PACKET - 3 MODES


          1.  When the initiator finds an incorrect sync character  in  the
              first buffer, it simply stops the DMA operation on the II bus
              and clears the DSCTRL Register's MO bit.  It also updates the
              ILP  register with the address of the first buffer.  Once the
              DMA operation has stopped, it transfers the cleared MO bit to
              the  OUT bit, disabling further initiator operations until MO
              has been set by the micro.  The  BFB  bit  should  alert  the
              micro  that  the  the sync error was in the first buffer, and
              thus the status word of that packet is invalid.


          2.  When the initiator finds an incorrect  sync  character  in  a
              nonfirst  buffer,  not enough buffers to complete a packet, a
              bad command bytes or data bytes  EDC,  an  invalid  DSSI  bus
              phase,  a  read  back  error on the bus, or it receives a NAK
              from the target, it clears the DSCTRL Register's MO  bit  and
              once  the  status  has been written to the status word of the
              packet, transfers the cleared MO bit  to  the  OUT  bit.   It
              updates  the ILP register with address of the first buffer of
              the packet.


          3.  When the initiator  successfully  sends  a  packet  and  then
              receives  an  ACK  status from the target, it updates the ILP
              with the starting address of the next packet,  found  in  the
              thread  word  of  the  last buffer of the current packet.  It
              does not clear the MO bit, but transfers it to the OUT bit.




     9.3  ADDITIONAL NOTES ON INITIATOR OPERATION


     INITIATOR OPERATION                                           Page 9-8
     ADDITIONAL NOTES ON INITIATOR OPERATION                  3 August 1989


     9.3.1  Initiator And Fair Arbitration

     The Initiator follows a "fair arbitration" scheme when arbitrating for
     the  DSSI bus.  The fair arbitration scheme requires that an initiator
     disable itself from arbitrating for the bus for a period of time after
     if  has  just  finished  transferring  a  packet;  this  method allows
     "fairer" sharing of the bus between the  DSSI  devices.   For  a  more
     detailed  description  of the DSSI fair arbitration scheme, the reader
     should refer to the Addendum to DEC STD 161.



     9.3.2  Initiator Timeout

     An initiator timeout is used to Reset a  potentially  hung  DSSI  bus.
     The initiator timer is started either by a potential initiator when it
     wishes to arbitrate for the bus and the DSSI bus  is  not  free  (i.e.
     either  BSY or SEL is asserted), or by an active initiator on the bus.
     When the timer expires the  initiator  asserts  RST  on  the  bus  for
     25usec.



     9.3.3  Initiator Receiving A RST While On The Bus.

     If an initiator receives a RST while it is transferring  a  packet  on
     the  bus,  it  clears the MO bit in the DSCTRL Register.  It also sets
     LDN and RST in the ISTAT Register and interrupts the micro if  enabled
     to  do  so.  It then writes status to the status word of the packet it
     is currently working on and sets the DNE, NAK and Buffer  Count  bits.
     Finally,  it transfers the cleared MO bit to the OUT bit in the DSCTRL
     Register.



     9.3.4  Initiator Read Back Error Detection

     If an initiator detects a read back error while  sending  data  during
     the  command or data phase of the transfer, it asserts RST on the DSSI
     bus.  It also clears MO in the DSCTRL Register, and sets the LDN,  RST
     and  RTO  bits  in  the  ISTAT Register, which interrupts the micro if
     enabled to do so.  It then writes status to the  status  word  of  the
     packet  it  is  currently  working on, setting the DNE, NAK and Buffer
     Count bits.  Finally, it transfers the cleared MO bit to the  OUT  bit
     in the DSCTRL Register.



     9.3.5  Initiator Detecting A Selection Timeout

     If a device does not respond to the  Initiator  during  the  selection
     phase  of the transfer (i.e.  BSY is deasserted and SEL is asserted on
     the DSSI bus), a selection timeout could occur.   The  initiator  will
     remove  its  IDs  from  the  bus in a time determined by the selection

     INITIATOR OPERATION                                           Page 9-9
     ADDITIONAL NOTES ON INITIATOR OPERATION                  3 August 1989


     timeout bits in  the  TMO  register;  a  selection  abort  time  later
     (defined to be 25.6 usec), the Initiator will remove DSSI_SEL from the
     bus.   SWIFT  will  not  assert  RST  on  the  bus.   For  a  complete
     description  of  selection  timeouts,  the  user  should  refer to the
     Addendum to DEC STD 161.  SWIFT clears MO in the DSCTRL Register,  and
     sets  the LDN bit in the ISTAT register, which interrupts the micro if
     enabled to do so.  It then writes status to the  status  word  of  the
     packet  it  is  currently  working  on,  setting the DNE, NAK, NRP and
     Buffer Count bits.  Finally, it transfers the cleared MO  bit  to  the
     OUT bit in the DSCTRL Register.












                                   CHAPTER 10

                            DATA INTEGRITY MEASURES



     Errors can occur in several places; SWIFT  facilitates  recovery  from
     errors whenever possible.  SWIFT supports, but does not require, fault
     tolerant operation.  This is to allow SWIFT to be used in a non-Cirrus
     environment.



     10.1  ERROR PROTECTION ON DSSI BUS

     SWIFT checks and generates both the DSSI parity and the DSSI checksums
     as  defined  in the DSSI Specification, but SWIFT adds to them another
     type of data protection which is  compatible  with  existing  devices.
     SWIFT  reads  the DSSI bus while driving it and compares what it reads
     to what it thinks it put on the bus.  This allows it to do  some  DSSI
     bus  error  detection without waiting for the target to respond.  This
     readback provides protection from certain types of  noise  and  bursty
     errors which can overwhelm parity and checksums.  Reading the bus will
     also be useful in testing bondwires in the  package,  since  a  broken
     bondwire  or a bad PC board trace will cause the signal to not pull up
     properly.  Since there will  be  a  semi-determinate  transition  time
     associated  with  each  line  on  the  bus, SWIFT must be careful when
     looking at the bus so as not to look too soon and mistakenly  identify
     an  error.   To avoid bus settling problems, SWIFT reads back only the
     data it is writing out.  It reads the DSSI phase signals off  the  bus
     and  uses  them to clock the read-back test.  Monitoring only the data
     lines is sufficient, since there is already much implicit checking  of
     phase information:  if the phase changes at the wrong time, or changes
     to the wrong phase at the right time, a DSSI error condition occurs.



     10.2  BACKPORT ERROR DETECTION

     In order to implement error detection on the  Backport,  SWIFT  checks
     the  EDC  on outgoing buffers and generates EDCs for incoming buffers.
     This EDC consists of one word at the end of the first buffer's Command
     Bytes  and one word after the Data Section of each buffer.  SWIFT will
     always READ the EDC, but CHECKing  of  the  EDC  can  be  disabled  by
     clearing  the EEN bit in the CSR.  SWIFT will always write the correct
     EDC for inbound buffers.   SWIFT  also  provides  a  method  by  which

     DATA INTEGRITY MEASURES                                      Page 10-2
     BACKPORT ERROR DETECTION                                 3 August 1989


     erroneous  data  or address information on the Backport DAL bus can be
     guaranteed not to corrupt data during register accesses.  This is done
     by  a  combination  of  register  read-back,  buffer  Sync Characters,
     illegal register  access  detection,  and  detectable  failure  modes.
     Together,  these error detection measures will protect the data in the
     buffers and in SWIFT's registers.



     10.3  BUFFER PROTECTION

     10.3.1  Rotated XOR For Buffer EDCs

     Each buffer has two EDCs:  a Command Bytes EDC, and a Data  EDC.   The
     EDCs  used  in  the  buffers  are  rotated  XORs.  The XOR without the
     rotation would protect against an odd number of errors in  every  data
     line.   The  rotation  adds  more  protection  against  stuck-ats  and
     intermittently faulty bits.

          The Command Bytes EDC covers the 6 Command Bytes  in  the  buffer
     header.   This  is  valid  only in the first buffer of a packet, since
     only the first buffer has valid data in  the  Command  Bytes  section.
     The Data EDC covers one buffer's Data.



     10.3.1.1  How EDCs Are Calculated

     Both Command Bytes EDC and Data Bytes EDC are generated the same  way.
     The  calculation begins with a seed value of 0045H.  The first word is
     XORed with the 0045H.  The result is shifted left by 1 bit so that the
     MSbit becomes the LSbit.  This continues for each of the data words to
     be protected by the EDC, with the EDC itself being the rotated  result
     of the last XOR.

          The following is an example of the calculation of the EDC for the
     command bytes of a SWIFT buffer.

     0045H   0000 0000 0100 0101     ``Seed'' Value
     70E0H   0111 0000 1110 0000     First Data Word
     -----   -------------------
             0111 0000 1010 0101     Result of XOR

             1110 0001 0100 1010     Result of rotate
     00FFH   0000 0000 1111 1111     Second Data Word
     -----   -------------------
             1110 0001 1011 0101     Result of XOR

             1100 0011 0110 1011     Result of rotate
     0014H   0000 0000 0001 0100     Third Data Word
     -----   -------------------
             1100 0011 0111 1111     Result of XOR

     86FFH   1000 0110 1111 1111     Result of rotate - The EDC

     DATA INTEGRITY MEASURES                                      Page 10-3
     BUFFER PROTECTION                                        3 August 1989


          The following is a segment of C code to calculate an EDC:

     unsigned int EDC_CAL(n,a)
          unsigned int n ;      /* The number of words to be covered by */
                                /*  the EDC                             */
          unsigned int *a ;     /* An array holding the n words to be   */
     {                          /*  covered by the EDC                  */
       unsigned int edc ;       /* The value of the EDC itself          */
       for (edc = 0x45; n > 0; n--) {  /* Count through values in array */
         edc ^= *a++ ;          /* Do the XOR and inc. array pointer    */
         if (edc & 0x8000) {    /* Check to see if MSbit is set         */
           edc <<= 1 ;          /* Shift left one bit, ``lose'' MSbit   */
           edc |= 1 ;           /* Bring MSbit back into LSbit          */
         }
         else                   /* MSbit was not set                    */
           edc <<= 1 ;          /* Shift left one bit, don't care about */
       }                        /*  old MSbit                           */
       return (edc) ;
     }



     10.3.2  Sync Character Overlapping The Status Word

     This helps SWIFT detect wild thread pointers.  When  SWIFT  follows  a
     thread to a new buffer it checks the Sync Character of that buffer for
     a particular pattern, thus reducing the possibility that wild  threads
     will  cause  SWIFT  to damage memory.  The Sync Character is two words
     long, each word the complement of the other.   This  allows  SWIFT  to
     automatically  check  the  DALs  for  stuck-ats.   If a wild thread is
     discovered, SWIFT will end the transfer as described in sections 8 and
     9.   The Sync Character should be "uncommon," e.g., not all zeros, and
     different from any possible status word that could be written over  it
     when the packet has been completed.  AAAA5555H satisfies both of these
     criteria, and has the added benefit of also being able to detect  both
     bridges between adjacent data lines and stuck-ats.



     10.4  SWIFT REGISTER PROTECTION

     SWIFT  implements  several  interlocking  methods  to   protect   data
     integrity  during  processor  accesses  to SWIFT registers.  There are
     four  distinct  single  bit  error  modes  associated  with   register
     accesses:

          1.  Bad Address during a register  read.   This  will  cause  the
              processor to read data from the wrong register.

          2.  Bad Data  during  a  register  read.   This  will  cause  the
              processor to have data with one bit incorrect.

     DATA INTEGRITY MEASURES                                      Page 10-4
     SWIFT REGISTER PROTECTION                                3 August 1989


          3.  Bad Address during a register write.   This  will  cause  the
              processor to write to the wrong SWIFT register.

          4.  Bad Data during a register write.  This will cause  the  data
              which  is  written  into  a  SWIFT  register  to have one bit
              incorrect.




     10.4.1  Read Back

     When reading data from a SWIFT register, the processor  should  always
     reread the register until it gets the same value twice in a row.  This
     will protect against all type 1 and 2 errors.  Note that during normal
     operation SWIFT's registers may change between processor reads, so the
     processor  may  have  to  be  somewhat   intelligent   in   performing
     read-backs.

          When it is writing data to a SWIFT register, the processor should
     always read back the data in the register after writing it.  This will
     detect all single bit errors on the DAL bus; however,  SWIFT  acts  on
     data  placed  in  its  registers  on a much faster time scale then the
     processor, so by the time the processor discovers the  mistake,  SWIFT
     may  have  already  performed  an  incorrect operation.  The following
     measures will protect against this type of error.



     10.4.2  Register Write Protect

     SWIFT's registers are divided into three conceptual  classes:   Setup,
     DSSI  Normal  Use,  and  Diagnostics  and Testing.  The first and last
     groups of registers are written to only on powerup or during  testing.
     Therefore,  to  prevent  an  error in the address phase during a write
     operation from activating an unanticipated  test  mode  during  normal
     operation,  these  two groups of registers can be write protected by a
     pair of bits in the DSCTRL Register.  If  the  processor  attempts  to
     write  one of these registers while it is protected and the IE and IIA
     bits are set, SWIFT will interrupt the processor.   If  the  processor
     attempts  to write to one of these registers while it is protected and
     the IIA bit is clear, SWIFT will not write the register, but will  not
     set  the  IAD bit in the ISTAT Register either.  On powerup, the write
     protect will be clear to allow the processor to configure SWIFT.



     10.4.3  Address Separation

     All the DSSI Normal Use registers have addresses which are  more  than
     one  bit  apart.   This prevents a single bit error during the address
     phase of a write  to  a  SWIFT  Normal  Use  register  from  adversely
     affecting  data.   There  are  blank registers which serve to separate
     Normal Use registers from each other.  Writing to these registers  has

     DATA INTEGRITY MEASURES                                      Page 10-5
     SWIFT REGISTER PROTECTION                                3 August 1989


     no  effect if the IIA bit is clear.  Any attempt to access these blank
     registers, either read or write, when the IIA bit is  set  will  cause
     SWIFT to interrupt the processor but continue with any DSSI operations
     which which were already in progress.  If  the  illegal  access  is  a
     write,  SWIFT  will  not  change anything.  If the illegal access is a
     read, SWIFT will return a value of 0.



     10.4.4  Sync Characters

     The Sync Character in the buffer header is used to  detect  errors  in
     the  data  phase  of  pointer  writes.   If  a  pointer  gets  written
     incorrectly and SWIFT starts to  act  upon  it  before  the  processor
     discovers  the error by readback, or SWIFT reads a bad threadword from
     a buffer, SWIFT will discover the error when it checks  for  the  Sync
     Character  of  the new `buffer.' If the incorrect pointer points to an
     actual unused buffer, SWIFT will start to process the buffer.  If  the
     buffer  is  not  fully  set  up to be sent, there should be a checksum
     error or a command error.  If sending the buffer violates a  message's
     buffer  ordering, the higher level protocols should detect it.  In any
     case, writing a bad value to a  list  pointer  will  have  no  adverse
     effect  unless  the  bad  value happens to point to a good buffer or a
     chunk of random memory which looks just like a good buffer.



     10.4.5  Effects Of Bad Data

     One thing  the  above  methods  do  not  protect  against  is  writing
     erroneous  data  to the intended non-pointer register.  There are only
     two Normal Use non-pointer registers:  ISTAT and DSCTRL.



     10.4.5.1  Interrupt Status Register

     The ISTAT register is write-one-to-clear.  This means that the bits in
     the  register  can be set only by SWIFT and can be cleared only by the
     microprocessor or a RESET.  To clear a bit, the processor writes a one
     to it.  This allows the processor to read the register, then write the
     value it read back into the register to clear it.  Writing a zero to a
     bit has no effect on it.

          If the processor attempts to clear one or more of the bits in the
     ISTAT  register  but a bit gets changed from a one to a zero, the bit,
     and the interrupt it represents, will remain pending  until  the  read
     back,  so  no  harm  is  done.   If  one  of the bits is inadvertently
     cleared, the effects are determined by which bit is affected, but,  in
     general, will not corrupt existing good data.

          If the processor reads the ISTAT register at the beginning of the
     interrupt  service routine, handles the interrupts, rechecks the ISTAT
     register for new interrupts, then clears all of the bits in the  ISTAT

     DATA INTEGRITY MEASURES                                      Page 10-6
     SWIFT REGISTER PROTECTION                                3 August 1989


     at  the same time, then unintentionally clearing an ISTAT bit will not
     be a problem.



     10.4.5.2  DSSI Control Register

     The DSCTRL Register controls the status of the pointer lists  and  the
     write  enable  on  the non-Normal Use registers.  Only the IN, MI OUT,
     MO, WP1, and WP2 bits are writable;  all  other  bits  in  the  DSCTRL
     Register  are  read-only.   The  IN  and  MI, and OUT and MO, bits are
     enable-pairs for the inbound buffer list, and  outbound  buffer  list,
     respectively.  If both bits of each pair are not written with the same
     value, neither control bit will not be affected by the write.  The WP1
     and  WP2 bits are a protect-pair for the register write protect of the
     non-Normal-Use registers.  If either of these bits has a 1 written  to
     it,  the  write  protection  is activated, but both must be cleared to
     deactivate it.  IIP and OIP, which are both read-only, are provided so
     the processor can tell when SWIFT is transferring a packet on the DSSI
     bus.












                                   CHAPTER 11

                                ARBITRATING MODE



     A second backport mode was added for the TF family of products.   This
     mode  incorporates  some  additional  functionality,  and  makes  some
     assumptions about the external hardware.  These assumptions include:

          1.  Other hardware residing on the II bus is not  "bursty"  (i.e.
              single accesses).

          2.  Other  hardware  rarely  accesses   the   memory   bus   (low
              throughput).

          3.  Memory access times are faster than 150 ns.

          4.  An external counter having a "LOAD" and "CLK" input is used.

          5.  There is no more than 128kB of memory.

     This set of assumptions fits nicely with the architecture  of  a  tape
     drive.   This mode, however, is not meant for devices with two or more
     high throughput ports, such as a disk drive or adapter.



     11.1  ADDITIONAL FUNCTIONALITY

     11.1.1  Memory Arbitration

     SWIFT will handle the arbitration of the memory bus.   Other  hardware
     will  request  this  bus  from  SWIFT  by asserting HP_BUSREQ(HP_RDY).
     After the current cycle (or immediately if the SWIFT is  idle),  SWIFT
     will  relinquish the bus by tristating its data bus and signal this by
     asserting HP_BUSGRANT.  The SWIFT will continue to assert  HP_BUSGRANT
     until  the requesting device has deasserted HP_BUSREQ.  These requests
     must be short in duration and infrequent if SWIFT throughput is not to
     be  degraded.   While  SWIFT is bus master, it assumes it controls the
     memory and will never be held off.  Therefore, all data cycle will  be
     of fixed 150 ns.  duration.

     ARBITRATING MODE                                             Page 11-2
     ADDITIONAL FUNCTIONALITY                                 3 August 1989


     11.1.2  Address Counter Control

     SWIFT will generate the control signals  needed  to  use  an  external
     counter  with  no  "glue"  chips.  In this mode, HP_ADDR16 becomes the
     HP_LOAD signal (see following section on addressing).  As such, it  is
     asserted  while  the address is on SWIFT DAL lines.  HP_AS becomes the
     counter clock(HP_CTRCLK).  It is asserted in the center  of  the  LOAD
     signal.



     11.1.3  Reduced Address Capability

     In order to provide the above mentioned functionality, the SWIFT  uses
     an  address  line (HP_ADDR16) as a control signal.  The effect of this
     is a 50% reduction in the amount  of  memory  the  SWIFT  is  able  to
     address.   The highest order address bit (address bit 17) is no longer
     sent from the chip.  In its place on HP_DAL<0> is address bit 16.












                                   CHAPTER 12

                                 TEST STRATEGY



     SWIFT was designed with testability in mind.  Towards that end,  there
     are  several features implemented in SWIFT to aid in testing the chip.
     When SWIFT is in diagnostic mode, the processor will be able to test a
     large  percentage  of  the  internal  circuitry,  as  well  as various
     interconnects on the module.  This allows a large degree of in-circuit
     testing without any special hardware.



     12.1  LOOP BACK TESTING

     When LPB is set in the DICTRL register, SWIFT is in internal  loopback
     mode.   In  this  mode,  the processor is able to directly control the
     DSSI inputs to SWIFT.  It is also able to read the outputs  which  the
     chip  generates.   This is accomplished by diverting I/O activity away
     from the physical DSSI port to the DDB and  DCS  registers.   When  in
     internal  loopback  mode,  SWIFT does not drive the physical DSSI bus,
     nor does it respond to signals on the physical DSSI bus.  This  allows
     a  large part of SWIFT to be tested while it is connected to an active
     DSSI bus or not connected to anything.  In internal loopback mode, the
     processor  can  simulate  both  inbound  and  outbound  transfers.  To
     perform a transfer in internal loopback mode, the processor must  link
     up the appropriate buffers and set up the SWIFT in the normal fashion,
     except LPB must be set and  PRE  should  be  clear  if  the  SWIFT  is
     connected  to  an active DSSI bus.  The SWIFT will then either send or
     receive a packet through the DCS and DDB registers, with the processor
     acting as the other node in the transfer.

          Note that DCS and DDB are not storage  registers;  what  is  read
     from   them  is  not  necessarily  what  was  last  written  to  them.
     Specifically, when in internal loopback mode, what is  read  from  the
     DCS and DDB registers represents only what the SWIFT is driving on the
     DSSI bus; however, due to the way the DCS register is connected to the
     control signals, in addition to the signals you would expect the SWIFT
     to assert,  there  may  be  other  signals  asserted.   This  will  be
     explained  in  greater  detail below.  Reading the DDB or DCS does not
     necessarily show any bits which were driven  by  the  processor  by  a
     previous  write  to  the  DDB  or  DCS  register.  For example, if the
     processor writes a 0003H to the DDB,  then  reads  the  DDB  and  sees
     0004H,  this  means  that  the  DSSI data bus has the 3 low order bits

     TEST STRATEGY                                                Page 12-2
     LOOP BACK TESTING                                        3 August 1989


     asserted, with bit 2 asserted by the SWIFT and bits 0 and  1  asserted
     by  the  processor and representing other nodes on the DSSI bus.  This
     situation could occur during arbitration if the SWIFT's ID is 2.

          Since register accesses work on a different time scale than  some
     of  the  operations on the DSSI bus, problems could occur when control
     through the DDB and DCS registers is not fast enough to meet DSSI  bus
     timing.   Fortunately,  there  is  only one case where this is a major
     problem, and SWIFT has an interlock feature when in internal  loopback
     mode  which  solves it.  In normal operation, during the data phase of
     an inbound transfer SWIFT can issue up to seven REQs without receiving
     an ACK (see REQ/ACK offset).  Since the cycle time for issuing REQs is
     much faster than a register access time,  in  internal  loopback  mode
     SWIFT  could  have  issued  several  REQs that the processor could not
     detect through reading the DCS  register.   To  solve  this  potential
     problem,  SWIFT  has an interlock when in internal loopback mode which
     prevents it from deasserting REQ or ACK  until  the  DDB  register  is
     accessed  and  the  normal conditions for deassertion are met.  Use of
     this interlock is described below.

          Since, when in internal loopback mode, SWIFT gets its DSSI  input
     only from the DCS and DDB registers, it cannot read back the values it
     is writing to the DSSI bus.  This would cause a read back error during
     command  or  data phases, but another interlock prevents all read back
     errors during internal loopback mode.  This has the side  effect  that
     the  processor  cannot simulate a read back error when the SWIFT is in
     internal loopback mode by writing  an  incorrect  value  to  the  DDB.
     Another  operation  affected by the lack of data read back in internal
     loop back mode is arbitration.  The  circuitry  that  decides  if  the
     SWIFT has won arbitration expects to see the SWIFT's encoded ID on the
     bus; if  it  does  not,  it  will  assume  that  the  SWIFT  has  lost
     arbitration.   To  remedy  this situation, the processor must write to
     the DDB the encoded ID of the SWIFT if the SWIFT is to win arbitration
     and  act  as an initiator.  In the case where the SWIFT is to act as a
     target, no special action need be taken, since  the  SWIFT  will  lose
     anyway,  but  the  encoded  ID  of  the  SWIFT  can be asserted by the
     processor along with its own encoded ID when  it  writes  to  the  DDB
     during  the arbitration phase.  The processor can then read the DDB to
     verify that the SWIFT is putting out its ID for arbitration.



     12.1.1  SWIFT As An Initiator

     If the SWIFT is to be acting as the initiator,  the  processor  should
     first  initialize  SWIFT  and  have buffers containing a packet linked
     into the ILP.  Before the processor enables the SWIFT  by  writing  to
     the  DSCTRL  register, it should write to the DDB register the encoded
     ID of the SWIFT.  This is to let the  SWIFT  see  its  own  ID  during
     arbitration.   The processor could "OR" the value it writes to the DDB
     with a lower encoded address to simulate other nodes  arbitrating  and
     losing,  or  it  could "OR" the value with a higher encoded address to
     simulate losing arbitration.  Note that it is always  the  processor's
     responsibility  to  generate the parity bit when it writes to the DDB.

     TEST STRATEGY                                                Page 12-3
     LOOP BACK TESTING                                        3 August 1989


     After writing the DSCTRL register, the  processor  can  read  the  DDB
     register  to  verify  that  the SWIFT is putting out the correct data.
     The processor then should read the DCS register until it has only  the
     SEL bit set (value of 0020H).  Once the processor sees this, it should
     read the DDB register to verify  that  the  SWIFT  is  generating  the
     correct  selection  data.  The processor should then write BSY and C/D
     (0042H) to the DCS register to put the transfer  into  command  phase.
     The  following  is  done  for  each  of  the six command bytes and the
     checksum:

          1.  The processor writes BSY, REQ, and C/D (0046H) to the DCS  to
              issue the REQ to the SWIFT.

          2.  The processor reads the DCS register until the SWIFT  asserts
              ACK.   The  SWIFT  will also be asserting REQ and C/D, so the
              processor should be looking for 000EH.

          3.  Once it sees ACK asserted, the processor should deassert  REQ
              by writing only BSY and C/D (0042H) to the DCS register.

          4.  The processor then reads the DDB register both to verify  the
              command byte and allow the SWIFT to deassert the ACK.

          5.  The  processor  reads  the  DCS  register  until  the   SWIFT
              deasserts  ACK.   The  SWIFT will also deassert REQ, but will
              leave C/D asserted, so the processor should be  checking  for
              0002H.

     After completing the transfer  of  the  Command  Bytes  Checksum,  the
     processor should write only BSY (0040H) to the DCS register to put the
     transfer into the Data Phase.  Then, for each of the  Data  Bytes  and
     the Data Bytes Checksum, the processor should do the following:

          1.  Write BSY and REQ (0044H) to the DCS register.

          2.  Write just BSY (0040H) to the DCS register.  These two writes
              issue  a  REQ  to the SWIFT.  The processor may issue as many
              REQs as the REQ/ACK offset allows before doing the next step.

          3.  For each REQ issued, the processor should watch for an ACK in
              the  DCS  register.  The C/D bit will also always be set, and
              the REQ bit will be set only if the the processor  still  has
              REQ  asserted,  so the processor should be looking for either
              000CH or 00EH.

          4.  Once the ACK bit is set, the processor should read  the  DDB.
              This  will  return  the value of the data byte and will allow
              the SWIFT to deassert ACK.

          5.  If there have been more REQs issued than ACKs  received,  the
              processor can watch for another ACK then read the DDB, but it
              should be noted that the processor may not be able to see the
              deassertion  of  ACK  because  it  can  happen  faster than a
              register cycle.

     TEST STRATEGY                                                Page 12-4
     LOOP BACK TESTING                                        3 August 1989


          6.  If the number of REQs and ACKs are equal, the  processor  may
              read  the  DCS  register  to verify that the SWIFT deasserted
              ACK.

     After the Data Bytes Checksum, the processor puts  the  transfer  into
     Status  In  phase  by  asserting  BSY, C/D, and I/O (0043H) in the DCS
     register.  It then writes the status of the  transfer  (0061H  for  an
     ACK,  anything else for a NACK) to the DDB register, then asserts BSY,
     REQ, C/D, and I/O (0047H) in the DCS register.  It  then  watches  the
     DCS register for ACK.  REQ, C/D and I/O will also get asserted, so the
     processor should watch for 000FH.  The processor then removes  ACK  by
     writing 0043H to the DCS register.  It can then check the DCS register
     to verify that only C/D and I/O are asserted  (0003H).   Finally,  the
     processor clears all bits in the DCS register, and the DSSI portion of
     the transfer is completed.  It will still take some time for the SWIFT
     to  complete the transfer, so the processor should watch for the SWIFT
     to write the status to the Status Word in the first buffer.



     12.1.2  SWIFT As A Target

     If the SWIFT is to be used as a target,  the  processor  should  first
     initialize  the  SWIFT and have empty buffers linked into the TLP.  It
     then puts the encoded address of the SWIFT and its own encoded address
     into  the  DDB.   This  is  used  for  arbitration and selection.  The
     processor then asserts BSY in the DCS register (0040H).   This  begins
     the  Arbitration  Phase.   It  then  asserts  BSY  and  SEL in the DCS
     register (0060H).  This begins the  Selection  Phase.   The  processor
     then  releases  BSY,  but  leaves SEL asserted (0020H).  The processor
     then waits for the SWIFT to assert BSY  and  C/D  (0042H).   Once  the
     SWIFT  has  asserted  BSY and C/D, the processor should release SEL by
     writing 0000H to the  DCS  register.   The  processor  then  does  the
     following  for  each  of  the  six Command Bytes and the Command Bytes
     Checksum:

          1.  Watch for SWIFT's assertion of REQ.   SWIFT  will  also  have
              BSY,  ACK,  and  C/D  set,  so  the processor should look for
              004EH.

          2.  Write the data byte to the DDB.

          3.  Write an ACK to the DCS (0008H).

          4.  Read the DDB.  This is to allow the  SWIFT  to  deassert  REQ
              (see above).

          5.  (optional) Read the DCS to verify  that  REQ  is  deasserted.
              This  is optional because if the SWIFT does not deassert REQ,
              something is very wrong and it will be caught  later  in  the
              tests.

     TEST STRATEGY                                                Page 12-5
     LOOP BACK TESTING                                        3 August 1989


          6.  Deassert ACK by writing 0000H to the DCS register.

     After the Command Bytes Checksum, the processor  watches  for  C/D  to
     become  deasserted.  BSY will also be asserted, and REQ and ACK may or
     may not be asserted, so the processor should look for 0040H or  004CH.
     The  processor  then does the following for each of the Data Bytes and
     the Data Bytes Checksum:

          1.  Watch for SWIFT's assertion of REQ.  SWIFT will also have BSY
              and ACK asserted, so the processor should look for 004CH.

          2.  Write the Data Byte to the DDB register

                                          NOTE

                      At  this  point,  the  processor  should  not
                      attempt  to  verify that SWIFT has deasserted
                      REQ since it  may  reassert  REQ  before  the
                      processor can read the DCS register.


          3.  Assert ACK by writing 0008H to the DCS register.

          4.  Deassert ACK by writing 0000H to the DCS register.

     After the Data Bytes Checksum, the processor  watches  for  CMD,  BSY,
     I/O,  REQ,  and  ACK  (004FH) in the DCS register.  This will indicate
     that the SWIFT has gone into Status Phase and has the status ready  in
     the  DDB.   The  processor  now  reads  the  status from the DDB, then
     asserts ACK in the DCS register (0008H) to acknowledge receipt of  the
     packet  status.   It  then  reads  the DDB again to allow the SWIFT to
     deassert REQ, then  reads  the  DCS  to  verify  that  the  SWIFT  has
     deasserted  REQ.   Finally,  the  processor deasserts all DSSI control
     signals by writing 0000H to the DCS.



     12.2  EXTERNAL CONNECTOR TESTING

     A second test procedure involves using an external  connector  at  the
     DSSI  bus.   This  allows the processor to verify the functionality of
     the DSSI bus drivers  and  receivers  and  the  signal  paths  to  the
     connector.   Bits in the DICTRL register allow the processor to enable
     various DSSI drivers.  Using the DDB and DCS registers, the  processor
     can  drive  the  DSSI  bus.   Reading  these registers should show the
     values which were written.  Note that  this  external  connector  must
     contain  the  proper  terminators  and  be powered.  The procedure for
     testing the SWIFT's DSSI port drivers and receivers is:

          1.  The external connecter is attached to the DSSI Port.

          2.  The processor asserts DOE, DIA and PRE by  writing  0013H  to
              the DICTRL register.

     TEST STRATEGY                                                Page 12-6
     EXTERNAL CONNECTOR TESTING                               3 August 1989


          3.  The processor writes 0155H to the DDB.

          4.  The processor reads the DDB register.  The value read  should
              be 0155H.

          5.  The processor writes 00AAH to the DDB.

          6.  The processor reads the DDB register.  The value read  should
              be 00AAH.

          7.  The processor clears DOE and asserts COE and DIA  by  writing
              0009H to the DICTRL register.

          8.  The processor writes 0055H to the DCS.

          9.  The processor reads the DCS register.  The value read  should
              be 0055H.

         10.  The processor writes 002AH to the DCS.

         11.  The processor reads the DCS register.  The value read  should
              be 002AH.

         12.  The processor deasserts COE and DIA by writing 0000H  to  the
              DICTRL register.

         13.  The external connector is removed from the DSSI port.




     12.3  OTHER TESTABILITY FEATURES

     The loopback and external  tests  mentioned  above  are  intended  for
     in-circuit  testing  of  the  SWIFT.   There  are  also a few features
     intended to simplify fault-grading and manufactoring tests.



     12.3.1  Test Bit In DICTRL

     The Test bit causes certain counters in the SWIFT to count faster than
     they  normally  would.   This  allows  testing  of  conditions  during
     fault-grading which normally would use a prohibitively large number of
     vectors, such as timeouts and DSSI bus Resets.



     12.3.2  SRD Bit In DICTRL

     Assertion of the SRD bit causes the ISTAT register to behave as a  R/W
     register.   This  is  to  allow fault-grading of the bits in the ISTAT
     register without simulating every condition.

     TEST STRATEGY                                                Page 12-7
     OTHER TESTABILITY FEATURES                               3 August 1989


     12.3.3  LOTC And BC

     These registers provide visibility into two counters which are used in
     SWIFT.   This  visibility allows fault-grading of the counters without
     having to count through all the bits in the counters.












                                   CHAPTER 13

                         EXTERNAL OPERATIONS AND TIMING



     This section discusses the external interfaces of SWIFT, especially to
     the memory port.  Diagrams are added for clarity.



     13.1  MICROPROCESSOR READ CYCLES

     When the microprocessor  wishes  to  read  the  contents  of  a  SWIFT
     register, it asserts HP_CS.  Upon detection of this signal, SWIFT will
     finish any memory transaction currently in progress  and  service  the
     microprocessor.   The  time  that  can  elapse  during  this period is
     variable; it depends greatly on the memory bus activity.  In the  best
     case  (the memory port is idle), the assertion of HP_ADREN could be as
     soon as 100 ns.  following the assertion of HP_CS.  In the worst  case
     (SWIFT  has  just  begun  a  new memory cycle or is updating a pointer
     register), the microprocessor is forced to sit idle as  SWIFT  asserts
     HP_AS,  followed  by HP_DS to the memory.  The duration of this action
     is a function  of  memory  bandwidth  and  traffic  and  will  not  be
     estimated  here.   One  clock  before the assertion of HP_ADREN, SWIFT
     will release the HP_WRITE signal,  preparing  for  the  microprocessor
     access.  Upon the assertion of HP_ADREN, the external logic must begin
     to drive the register address onto the HP_DAL  lines  and  also  drive
     HP_WRITE.   At  this time, the external logic may deassert HP_CS.  One
     HP_CLK cycle following the assertion of HP_ADREN,  SWIFT  will  assert
     HP_AS.   This  does  not  require  any reaction by the external logic.
     Note that this does not happen in the arbitrating mode.  Three  clocks
     later,  SWIFT  will  deassert  HP_ADREN,  thereby  ending  the address
     portion of the cycle.  SWIFT will latch the  contents  of  the  HP_DAL
     lines  internally,  along  with  the  HP_WRITE  signal.   The external
     hardware may release HP_WRITE now.  SWIFT requires  no  hold  time  on
     either  address  or  HP_WRITE.   Four  clock  cycles later, SWIFT will
     assert the HP_DATAEN signal.  The SWIFT will also drive  the  contents
     of  the  selected  register  onto  the  HP_DAL lines.  One clock cycle
     later, SWIFT will deassert HP_AS.  This signals the external logic  to
     release  HP_WRITE  if  it  hasn't already done so.  Three clock cycles
     later, SWIFT will deassert the HP_DATAEN signal,  thereby  ending  the
     cycle.   Data,  however,  will  remain  on  the  HP_DAL  lines  for an
     additional clock cycle or until the deassertion of HP_CS, whichever is
     later.

     EXTERNAL OPERATIONS AND TIMING                               Page 13-2
     MICROPROCESSOR READ CYCLES                               3 August 1989



                _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
     HP_CLK H__| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_
     (input)   |   |               |               |               |
               |T1 |               |               |               |
                   |  _____________|_______________|_______________|___
     HP_WRITE L----|-/             |\--------------|---------------|---\-------
                   |               ||T2            |               |
             ___   |          _____|_______________|_______________|___________
     HP_CS L   |\__|_________/_____|_______________|_______________|___/
     (input)   |   | |             | |             |               |
               |   | |T4           | |T5           |               |
               | T3  |               |             |               |
                     |               |             |               |
             _________               |_____________|_______________|___________
     HP_ADREN L      |\_____________/|             |               |
     (output)        |               |             | |             |
                     |     T6        |             | |T8           |
                     |               |             | |             | |T9
                     |               |    T7         |             | |
             _________________________________________               __________
     HP_DATAEN L     |               |               |\_____________/|
     (output)        |               |               |               |
                     |T10|           |               |      T11      |
            ______________           |               |   ____________|_________
     HP_AS L             |\__________________________|__/|           |
     (output)            |           |               |   |           |
                         |           |               |T13|           |
                         |               T12         |           |T14|
                                     |                           |   |
                                     | | T15                     |   |
              _________              |  _________                |   | ________
     HP_DAL H _________<  ADDRESS      >_________<      DATA OUT      >________
     (BiD)

     Times are as follows:

     EXTERNAL OPERATIONS AND TIMING                               Page 13-3
     MICROPROCESSOR READ CYCLES                               3 August 1989


     +-------+---------------------------------------+---------------+
     | Name  |            Description                |       Time    |
     +-------+---------------------------------------+---------------+
     | T1    |          HP_CLK cycle time            | T (33 ns. min)|
     +-------+-------------------------------------------------------+
     | T2    | HP_WRITE hold time following HP_ADREN |       0       |
     |       |           deassertion                 |               |
     +-------+---------------------------------------+---------------+
     | T3    |  HP_CS assertion to HP_ADREN assertion|     no max    |
     +-------+-------------------------------------------------------+
     | T4    |  HP_CLK rising to HP_ADREN assertion  |   20 ns max   |
     +-------+-------------------------------------------------------+
     | T5    | HP_CLK rising to HP_ADREN deassertion |   27 ns max   |
     +-------+---------------------------------------+---------------+
     | T6    |       HP_ADREN assertion width        |   4T-6  min   |
     +-------+---------------------------------------+---------------+
     | T7    |   HP_ADREN deassertion to HP_DATAEN   |   4T-6 min    |
     |       |               assertion               |               |
     +-------+---------------------------------------+---------------+
     | T8    |  HP_CLK rising to HP_DATAEN assertion |   20 ns min   |
     +-------+---------------------------------------+---------------+
     | T9    |HP_CLK rising to HP_DATAEN deassertion |   27 ns min   |
     +-------+---------------------------------------+---------------+
     | T10   | HP_ADREN assertion to HP_AS assertion |   T-5 min     |
     +-------+---------------------------------------+---------------+
     | T11   |       HP_DATAEN assertion width       |   4T-6  min   |
     +-------+---------------------------------------+---------------+
     | T12   |       HP_AS assertion width           |   8T-5  min   |
     +-------+---------------------------------------+---------------+
     | T13   |    HP_DATAEN assertion to HP_AS       |   T-5  max    |
     |       |             deassertion               |               |
     +-------+---------------------------------------+---------------+
     | T14   |  Data hold time after HP_DATAEN       |   T-15 min    |
     |       |            deassertion                |               |
     +-------+---------------------------------------+---------------+
     | T15   |  address hold time after HP_ADREN     |       0       |
     |       |            deassertion                |               |
     +-------+---------------------------------------+---------------+



     13.2  MICROPROCESSOR WRITE CYCLES

     When the microprocessor wishes to  modify  the  contents  of  a  SWIFT
     register, it asserts HP_CS.  Upon detection of this signal, SWIFT will
     finish any memory transaction currently in progress  and  service  the
     microprocessor.   The  time  that  can  elapse  during  this period is
     variable; it depends greatly on the memory bus activity.  In the  best
     case  (the memory port is idle), the assertion of HP_ADREN could be as
     soon as 100 ns.  following the assertion of HP_CS.  In the worst  case
     (SWIFT  has  just  begun a new memory cycle or is updating a pointer),
     the microprocessor is forced to sit idle  as  SWIFT  asserts  HP_  AS,
     followed  by  HP_DS  to  the memory.  The duration of this action is a
     function of memory bandwidth and traffic and  will  not  be  estimated

     EXTERNAL OPERATIONS AND TIMING                               Page 13-4
     MICROPROCESSOR WRITE CYCLES                              3 August 1989


     here.   One clock before the assertion of HP_ADREN, SWIFT will release
     the HP_WRITE signal, preparing for the  microprocessor  access.   Upon
     the  assertion of HP_ADREN, the external logic must begin to drive the
     register address onto the HP_DAL lines and also  drive  HP_WRITE.   At
     this  time,  the  external logic can deassert HP_CS.  One HP_CLK cycle
     following the assertion of HP_ADREN, SWIFT will  assert  HP_AS.   This
     does  not  require  any reaction by the external logic.  This does not
     happen in the arbitrating mode.  Three clock cycles later, SWIFT  will
     deassert  HP_ADREN,  thereby  ending the address portion of the cycle.
     SWIFT will latch the contents of the HP_DAL  lines  internally,  along
     with  the HP_WRITE signal.  Four clock cycles later, SWIFT will assert
     the HP_DATAEN signal.  The external logic may drive  the  contents  of
     the  selected  register onto the HP_DAL lines.  One clock cycle later,
     SWIFT will deassert HP_AS.  This signals the external logic to release
     HP_WRITE,  if  it  hasn't  done so already.  Three clock cycles later,
     SWIFT will deassert the HP_DATAEN signal, thereby  ending  the  cycle.
     Data  will  be  latched into SWIFT upon the deassertion of HP_ DATAEN.
     No hold time is required by SWIFT.

                _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
     HP_CLK H__| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_
     (input)   |   |               |               |               |
               |T1 |               |               |               |
                   |               |               |               |
     HP_WRITE L----|-\_____________|/--------------|---------------|---/-------
                   |               ||T2            |               |
             ___   |          _____|_______________|_______________|___________
     HP_CS L   |\__|_________/_____|_______________|_______________|___/
     (input)   |   | |             | |             |               |
               |   | |T4           | |T5           |               |
               | T3  |               |             |               |
                     |               |             |               |
             _________               |_____________|_______________|___________
     HP_ADREN L      |\_____________/|             |               |
     (output)        |               |             | |             |
                     |     T6        |             | |T8           |
                     |               |             | |             | |T9
                     |               |    T7         |             | |
             _________________________________________               __________
     HP_DATAEN L     |               |               |\_____________/|
     (output)        |               |               |               |
                     |T10|           |               |      T11      |
            ______________           |               |   ____________|_________
     HP_AS L             |\__________________________|__/|           |
     (output)            |           |               |   |           |
                         |           |               |T13|           |
                         |               T12         |               |T14|
                                     |                               |   |
                                     | | T15                         |   |
              _________              |  _________                    |   | ___
     HP_DAL H _________<  ADDRESS      >_________<      DATA IN           >___
     (BiD)

     Times are as follows:

     EXTERNAL OPERATIONS AND TIMING                               Page 13-5
     MICROPROCESSOR WRITE CYCLES                              3 August 1989


     +-------+---------------------------------------+---------------+
     | Name  |            Description                |       Time    |
     +-------+---------------------------------------+---------------+
     | T1    |          HP_CLK cycle time            | T (33 ns. min)|
     +-------+-------------------------------------------------------+
     | T2    | HP_WRITE hold time following HP_ADREN |       0       |
     |       |           deassertion                 |               |
     +-------+---------------------------------------+---------------+
     | T3    |  HP_CS assertion to HP_ADREN assertion|     no max    |
     +-------+-------------------------------------------------------+
     | T4    |  HP_CLK rising to HP_ADREN assertion  |    20 ns min  |
     +-------+-------------------------------------------------------+
     | T5    | HP_CLK rising to HP_ADREN deassertion |    27 ns min  |
     +-------+---------------------------------------+---------------+
     | T6    |       HP_ADREN assertion width        |    4T-6  min  |
     +-------+---------------------------------------+---------------+
     | T7    |   HP_ADREN deassertion to HP_DATAEN   |    4T-6 min   |
     |       |               assertion               |               |
     +-------+---------------------------------------+---------------+
     | T8    |  HP_CLK rising to HP_DATAEN assertion |    20 ns min  |
     +-------+---------------------------------------+---------------+
     | T9    |HP_CLK rising to HP_DATAEN deassertion |    27 ns min  |
     +-------+---------------------------------------+---------------+
     | T10   | HP_ADREN assertion to HP_AS assertion |    T-5 min    |
     +-------+---------------------------------------+---------------+
     | T11   |       HP_DATAEN assertion width       |    4T-6  min  |
     +-------+---------------------------------------+---------------+
     | T12   |       HP_AS assertion width           |    8T-5  min  |
     +-------+---------------------------------------+---------------+
     | T13   |    HP_DATAEN assertion to HP_AS       |    T-5 max    |
     |       |             deassertion               |               |
     +-------+---------------------------------------+---------------+
     | T14   |  Data hold time after HP_DATAEN       |       0       |
     |       |            deassertion                |               |
     +-------+---------------------------------------+---------------+
     | T15   |  address hold time after HP_ADREN     |       0       |
     |       |            deassertion                |               |
     +-------+---------------------------------------+---------------+
     Additional critical times are as follows:

     EXTERNAL OPERATIONS AND TIMING                               Page 13-6
     MICROPROCESSOR WRITE CYCLES                              3 August 1989



     +-----------------------------------------------+-------+-------+
     |              Parameter                        |  min  |  max  |
     +-----------------------------------------------+-------+-------+
     | HP_ADREN asserted to address must be valid    |  0    | 2T+15 |
     +-----------------------------------------------+-------+-------+
     | HP_ADREN deasserted to address invalid on bus |  0    |       |
     +-----------------------------------------------+-------+-------+
     | HP_ADREN asserted to HP_WRITE valid           |  0    | 2T+15 |
     +-----------------------------------------------+-------+-------+
     | HP_ADREN deasserted to HP_WRITE invalid       |  0    |       |
     +-----------------------------------------------+-------+-------+
     | HP_DATAEN asserted to HP_DAL valid (READ)     |       | 25    |
     +-----------------------------------------------+-------+-------+
     | HP_DATAEN asserted to data must be valid      |       | 2T    |
     |  (WRITE)                                      |       |       |
     +-----------------------------------------------+-------+-------+
     | HP_DATAEN deasserted to data invalid (WRITE)  |  0    |       |
     +-----------------------------------------------+-------+-------+
     | HP_CS deassertion time                        |  5T   |       |
     +-----------------------------------------------+-------+-------+




     13.3  MEMORY READ CYCLES (NORMAL MODE)

     When SWIFT wishes to begin a new transfer, it places  the  address  of
     the  memory location onto the HP_DAL lines.  Three clock cycles later,
     HP_AS is asserted.  This indicates to the external logic that SWIFT is
     beginning  a  new cycle.  The external logic must latch the address on
     the asserting edge of HP_AS.  Three clock  cycles  later,  SWIFT  will
     withdraw  the address from the multiplexed bus.  One clock tick later,
     SWIFT will assert HP_DS.  This signals that SWIFT  wishes  to  read  a
     memory  location.  This pulse will last a minimum of 160 ns., although
     it can be made longer.  SWIFT monitors the HP_RDY signal  waiting  for
     its  assertion.   Once  this is seen, SWIFT is free to end the current
     HP_DS.  Following the deassertion of the first data strobe, SWIFT will
     deassert  HP_AS.   For each additional contiguous word SWIFT needs, it
     will assert only HP_DS.  (The HP_AS signal is used  to  select  a  new
     starting  address and is not needed on a per access basis.) SWIFT will
     not reassert HP_DS if the HP_RDY from the previous HP_DS is  still  on
     the  bus.   If  the  microprocessor  wishes to access a SWIFT register
     while a DMA operation is in  progress,  SWIFT  will  finish  the  data
     strobe  currently  asserted and service the microprocessor.  Following
     this, SWIFT will NOT issue a new address strobe and  will  expect  the
     external logic to continue from the address which was last read.

     EXTERNAL OPERATIONS AND TIMING                               Page 13-7
     MEMORY READ CYCLES (NORMAL MODE)                         3 August 1989


                 _   _       _   _           _   _   _   _   _   _   _   _
     SYS_CLK H__| |_| |...._| |_| |........_| |_| |_| |_| |_| |_| |_| |_| |_
     (input)
                |T1 |       |               |
                |           |               |
                |T2|        |               |
             ______|        |               |    ____________________________
     HP_AS L       |\_______|_______________|___/
     (output)      |        |               |
             | T3  |  T4  | |               |
             |            |_|______         |    __________________
     HP_DAL H< ADDRESS    >_|______< DATA IN    >__________________< DATA IN
     (BiD)                  |      |         |T7|                    
                            | |T5  |         |
             _________________     |   T6    |_____________________
     HP_DS L                  \______________/                     \_________
                              |              |         T8          |
                              |      T9      |
             ________________________________|_______________________________
     HP_WRITE L               |              |
     (output)                 |    |  T10    |
                              |T11 |
             ______________________          ________________________________
     HP_RDY                        \________/
     (input)

     Times are as follows:

     EXTERNAL OPERATIONS AND TIMING                               Page 13-8
     MEMORY READ CYCLES (NORMAL MODE)                         3 August 1989


     +-------+-----------------------------------------------+-------+
     | Name  |               Description                     | Time  |
     +-------+-----------------------------------------------+-------+
     | T1    |               SYS_CLK cycle time              | 33 ns |
     +-------+-----------------------------------------------+-------+
     | T2    |      SYS_CLK rising to HP_AS assertion (max)  | 25 ns |
     +-------+-----------------------------------------------+-------+
     | T3    |       Address Valid to HP_AS  assertion (min) | 72 ns |
     +-------+-----------------------------------------------+-------+
     | T4    |       Address Hold after HP_AS assertion (min)| 78 ns |
     +-------+-----------------------------------------------+-------+
     | T5    |      SYS_CLK rising to HP_DS assertion (max)  | 21 ns |
     +-------+-----------------------------------------------+-------+
     | T6    |      Data setup to HP_DS deassertion (min)    | 40 ns |
     +-------+-----------------------------------------------+-------+
     | T7    |      Data hold after HP_DS deassertion (min)  |  0 ns |
     +-------+-----------------------------------------------+-------+
     | T8    |       Data Strobe deassertion time (minimum)  | 225 ns|
     +-------+-----------------------------------------------+-------+
     | T9    |       Data Strobe assertion time (minimum)    | 160 ns|
     +-------+-----------------------------------------------+-------+
     | T10   |  HP_RDY assertion to HP_DS deassertion (min)  |  66 ns|
     +-------+-----------------------------------------------+-------+
     | T10   |  HP_RDY assertion to HP_DS deassertion (max)* | 100 ns|
     +-------+-----------------------------------------------+-------+
     | T11   |     HP_RDY assertion after HP_DS assertion    | 60 ns |
     |       |     to insure 400 ns. cycle time (max)        |       |
     +-------+-----------------------------------------------+-------+

     * If HP_RDY is asserted within the first 60 ns. of HP_DS, the
       data strobe will be 160 ns. long.  The timing parameter, T10,
       refers to the synchronization delay if HP_RDY is NOT asserted
       within the first 60 ns.



     13.4  MEMORY WRITE CYCLES (NORMAL MODE)

     When SWIFT wishes to begin a new transfer, it places  the  address  of
     the  memory location onto the HP_DAL lines.  Three clock cycles later,
     HP_AS is asserted.  This indicates to the external logic that SWIFT is
     beginning  a  new cycle.  The external logic must latch the address on
     the asserting edge of HP_AS.  Three clock  cycles  later,  SWIFT  will
     withdraw  the address from the multiplexed bus.  One clock tick later,
     SWIFT will assert HP_DS.  This signals that SWIFT has placed the  data
     onto  the  DAL  lines.   This  pulse  will  last a minimum of 160 ns.,
     although it can be made longer.   SWIFT  monitors  the  HP_RDY  signal
     waiting  for  its  assertion.  Once this is seen, SWIFT is free to end
     the current HP_DS.   Following  the  deassertion  of  the  first  data
     strobe,  SWIFT  will  deassert  HP_AS.  For each additional contiguous
     word SWIFT needs, it will assert only HP_DS.   (The  HP_AS  signal  is
     used  to  select  a  new  starting  address and is not needed on a per
     access basis.) SWIFT will not reassert HP_DS if the  HP_RDY  from  the
     previous  HP_DS  is still on the bus.  If the microprocessor wishes to

     EXTERNAL OPERATIONS AND TIMING                               Page 13-9
     MEMORY WRITE CYCLES (NORMAL MODE)                        3 August 1989


     access a SWIFT register while a DMA operation is  in  progress,  SWIFT
     will  finish  the  data  strobe  currently  asserted  and  service the
     microprocessor.  Following this, SWIFT will NOT issue  a  new  address
     strobe and will expect the external logic to continue from the address
     which was last written.
                 _   _       _   _           _   _   _   _   _   _   _   _
     SYS_CLK H__| |_| |...._| |_| |........_| |_| |_| |_| |_| |_| |_| |_| |_
     (input)
                |T1 |       |               |
                |           |               |
                |T2|        |               |
             ______|        |               |    ____________________________
     HP_AS L       |\_______|_______________|___/
     (output)      |        |               |
             | T3  |  T4  | |               |
             |            |_|______         |    __________________
     HP_DAL H< ADDRESS    >_|______< DATA OUT    >__________________< DATA OU
     (BiD)                  |      |         |T7|                    
                            | |T5  |         |
             _________________     |   T6    |_____________________
     HP_DS L                  \______________/                     \_________
                              |              |         T8          |
                              |      T9      |
                              |              |
     HP_WRITE L_______________|______________|_______________________________
     (output)                 |    |  T10    |
                              |T11 |
             ______________________          ________________________________
     HP_RDY                        \________/
     (input)

     Times are as follows:

     EXTERNAL OPERATIONS AND TIMING                              Page 13-10
     MEMORY WRITE CYCLES (NORMAL MODE)                        3 August 1989


     +-------+-----------------------------------------------+-------+
     | Name  |               Description                     | Time  |
     +-------+-----------------------------------------------+-------+
     | T1    |               SYS_CLK cycle time              | 33 ns |
     +-------+-----------------------------------------------+-------+
     | T2    |  SYS_CLK rising to HP_AS assertion (maximum)  | 25 ns |
     +-------+-----------------------------------------------+-------+
     | T3    |  Address Valid to HP_AS assertion (minimum)   | 72 ns |
     +-------+-----------------------------------------------+-------+
     | T4    |  Address Hold after HP_AS assertion (minimum) | 78 ns |
     +-------+-----------------------------------------------+-------+
     | T5    |  SYS_CLK rising to HP_DS assertion  (maximum) | 21 ns |
     +-------+-----------------------------------------------+-------+
     | T6    |  Data setup to HP_DS deassertion (minimum)    | 72 ns |
     +-------+-----------------------------------------------+-------+
     | T7    |  Data hold after HP_DS deassertion (minimum)  | 60 ns |
     +-------+-----------------------------------------------+-------+
     | T8    |       Data Strobe deassertion time (minimum)  | 226 ns|
     +-------+-----------------------------------------------+-------+
     | T9    |       Data Strobe assertion time (minimum)    | 160 ns|
     +-------+-----------------------------------------------+-------+
     | T10   |  HP_RDY assertion to HP_DS deassertion (min)  |  66 ns|
     +-------+-----------------------------------------------+-------+
     | T10   |  HP_RDY assertion to HP_DS deassertion (max)* | 100 ns|
     +-------+-----------------------------------------------+-------+
     | T11   |     HP_RDY assertion after HP_DS assertion    | 60 ns |
     |       |     to insure 400 ns. cycle time (max)        |       |
     +-------+-----------------------------------------------+-------+

     * If HP_RDY is asserted within the first 60 ns. of HP_DS, the
       data strobe will be 160 ns. long.  The timing parameter, T10,
       refers to the synchronization delay if HP_RDY is NOT asserted
       within the first 60 ns.



     13.5  MEMORY READ CYCLES (ARBITRATING MODE)

     When SWIFT wishes to begin a new transfer, it places  the  address  of
     the  memory  location  onto  the  HP_DAL lines.  At the same time, the
     HP_ADDR16 (LOAD) signal is asserted.  Three clock cycles later,  HP_AS
     (CTRCLK)  is  asserted to load the counter.  Three clock cycles later,
     SWIFT will withdraw the address from the multiplexed bus and  deassert
     LOAD.   One  clock  tick later, SWIFT will assert HP_DS.  This signals
     that SWIFT wishes to read a memory location.   This  pulse  will  stay
     asserted  for  7  clocks.  Data should be valid within 4.5 clock ticks
     from the assertion of HP_DS.  One clock following the  deassertion  of
     the  data  strobe,  SWIFT  will  assert HP_AS(CTRCLK) to increment the
     external counter.  Three clocks  following  the  deassertion  of  data
     strobe,  SWIFT  will  deassert  HP_AS(CTRCLK).   HP_AS(CTRCLK) is thus
     asserted for two clock ticks.  HP_DS is deasserted for  a  minimum  of
     four  clock ticks in total.  For each additional contiguous word SWIFT
     needs, it will assert only HP_DS and CTRCLK.   If  the  microprocessor
     wishes to access a SWIFT register while a DMA operation is in progress

     EXTERNAL OPERATIONS AND TIMING                              Page 13-11
     MEMORY READ CYCLES (ARBITRATING MODE)                    3 August 1989


     or an external device requests SWIFT memory bus, SWIFT will finish the
     data  strobe currently in progress and service the request.  Following
     this, SWIFT will NOT issue a new  load  strobe  and  will  expect  the
     external logic to continue from the address which was last read.
                 _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
     SYS_CLK H__| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_
     (input)                            |
                | T1|   |               |
                | |T2   |               |
             ______     |          _____|____________________________________
     HP_ADDR16    |\____|_________/     |
     (output)     |     |         |     |
                  |     |         |     |
                  |     | |T3     |     |
                  |  T4   |   T5  |     |
                           _____________|_____________         ______________
     HP_AS   _____________/             |             \_______/
     (output)              |            |  |          |  T13  |
                           |            |  |T6
             ______________|_______________                ___________
     HP_DS L               |               \______________/|         |\______
                           |              |                |    T12  |
                   |  T8   |  T9   |      |      T10       | |T7
                   |               |         |    T11      | |
             _____                  _________              | |_______________
     HP_DAL H_____< ADDRESS        >_________<    DATA IN    >_______________
     (BiD)

             ________________________________________________________________
     HP_WRITE L
     (output)

     Times are as follows:

     EXTERNAL OPERATIONS AND TIMING                              Page 13-12
     MEMORY READ CYCLES (ARBITRATING MODE)                    3 August 1989


     +-------+-----------------------------------------------+-------+
     | Name  |               Description                     | Time  |
     +-------+-----------------------------------------------+-------+
     | T1    |               SYS_CLK cycle time              | 33 ns |
     +-------+-----------------------------------------------+-------+
     | T2    |   SYS_CLK rising to HP_ADDR16 assertion (max) | 30 ns |
     +-------+-----------------------------------------------+-------+
     | T3    |   SYS_CLK rising to HP_AS assertion (max)     | 25 ns |
     +-------+-----------------------------------------------+-------+
     | T4    |  HP_ADDR16 assertion to HP_AS assertion (min) | 85 ns |
     +-------+-----------------------------------------------+-------+
     | T5    |  HP_ADDR16 hold after HP_AS assertion (min)   | 85 ns |
     +-------+-----------------------------------------------+-------+
     | T6    |  SYS_CLK rising to HP_DS assertion (max)      | 21 ns |
     +-------+-----------------------------------------------+-------+
     | T7    | Data hold time after HP_DS deassertion (min)  |  0 ns |
     +-------+-----------------------------------------------+-------+
     | T8    |   Address Valid to HP_AS assertion (min)      | 70 ns |
     +-------+-----------------------------------------------+-------+
     | T9    |   Address Hold after HP_AS assertion (min)    | 70 ns |
     +-------+-----------------------------------------------+-------+
     | T10   |       Data Strobe assertion time (min)        | 185 ns|
     +-------+-----------------------------------------------+-------+
     | T11   |  Data setup time to HP_DS deassertion (min)   | 65 ns |
     +-------+-----------------------------------------------+-------+
     | T12   |   Data Strobe deassertion time (minimum)      |150 ns |
     +-------+-----------------------------------------------+-------+
     | T13   |        HP_AS deassertion time (min)           |230 ns |
     +-------+-----------------------------------------------+-------+



     13.6  MEMORY WRITE CYCLES (ARBITRATING MODE)

     When SWIFT wishes to begin a new transfer, it places  the  address  of
     the  memory  location  onto  the  HP_DAL  lines.   At  the  same time,
     HP_ADDR16  (LOAD)  is  asserted.   Three  clock  cycles  later,  HP_AS
     (CTRCLK) is asserted to clock the new address into the counter.  Three
     clock  cycles  later,  SWIFT  will  withdraw  the  address  from   the
     multiplexed  bus  and deassert LOAD.  One clock tick later, SWIFT will
     assert HP_DS.  This signals that SWIFT has placed the  data  onto  the
     DAL  lines.   This  pulse  will last for seven clock ticks.  One clock
     following the deassertion  of  the  data  strobe,  SWIFT  will  assert
     HP_AS(CTRCLK)   to  increment  the  external  counter.   Three  clocks
     following  the  deassertion  of  data  strobe,  SWIFT  will   deassert
     HP_AS(CTRCLK).   HP_AS(CTRCLK)  is  thus asserted for two clock ticks.
     HP_DS is deasserted for a minimum of four clock ticks in  total.   For
     each  additional  contiguous  word  SWIFT  writes, it will assert only
     HP_DS and CTRCLK.  If the microprocessor  wishes  to  access  a  SWIFT
     register  while  a  DMA operation is in progress or an external device
     requests SWIFT bus, SWIFT will finish  the  data  cycle  currently  in
     progress  and  service  the  request.   Following this, SWIFT will NOT
     issue a new load strobe and will expect the external logic to continue
     from the address which was last written.

     EXTERNAL OPERATIONS AND TIMING                              Page 13-13
     MEMORY WRITE CYCLES (ARBITRATING MODE)                   3 August 1989


                 _   _   _   _   _   _   _   _   _   _   _   _   _   _   _
     SYS_CLK H__| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_
     (input)                            |
                | T1|   |               |
                | |T2   |               |
             ______     |          _____|____________________________________
     HP_ADDR16    |\____|_________/     |
     (output)     |     |         |     |
                  |     |         |     |
                  |     | |T3     |     |
                  |  T4   |   T5  |     |
                           _____________|_____________         ______________
     HP_AS   _____________/             |             \_______/
     (output)              |            |  |          |  T13  |
                           |            |  |T6
             ______________|_______________                ___________
     HP_DS L               |               \______________/|         |\______
                           |              |                |    T12  |
                   |  T8   |  T9   |      |      T10       | |T7
                   |               |         |    T11      | |
             _____                  _________              | |_______________
     HP_DAL H_____< ADDRESS        >_________<    DATA OUT   >_______________
     (BiD)


     HP_WRITE L______________________________________________________________
     (output)

     Times are as follows:

     EXTERNAL OPERATIONS AND TIMING                              Page 13-14
     MEMORY WRITE CYCLES (ARBITRATING MODE)                   3 August 1989


     +-------+-----------------------------------------------+-------+
     | Name  |               Description                     | Time  |
     +-------+-----------------------------------------------+-------+
     | T1    |               SYS_CLK cycle time              | 33 ns |
     +-------+-----------------------------------------------+-------+
     | T2    |   SYS_CLK rising to HP_ADDR16 assertion (max) | 30 ns |
     +-------+-----------------------------------------------+-------+
     | T3    |   SYS_CLK rising to HP_AS assertion (max)     | 25 ns |
     +-------+-----------------------------------------------+-------+
     | T4    |  HP_ADDR16 assertion to HP_AS assertion (min) | 85 ns |
     +-------+-----------------------------------------------+-------+
     | T5    |  HP_ADDR16 hold after HP_AS assertion (min)   | 85 ns |
     +-------+-----------------------------------------------+-------+
     | T6    |  SYS_CLK rising to HP_DS assertion (max)      | 21 ns |
     +-------+-----------------------------------------------+-------+
     | T7    | Data hold time after HP_DS deassertion (min)  | 50 ns |
     +-------+-----------------------------------------------+-------+
     | T8    |   Address Valid to HP_AS assertion (min)      | 70 ns |
     +-------+-----------------------------------------------+-------+
     | T9    |   Address Hold after HP_AS assertion (min)    | 70 ns |
     +-------+-----------------------------------------------+-------+
     | T10   |       Data Strobe assertion time (min)        | 185 ns|
     +-------+-----------------------------------------------+-------+
     | T11   |  Data setup time to HP_DS deassertion (min)   |  0 ns |
     +-------+-----------------------------------------------+-------+
     | T12   |   Data Strobe deassertion time (minimum)      |150 ns |
     +-------+-----------------------------------------------+-------+
     | T13   |        HP_AS deassertion time (min)           |230 ns |
     +-------+-----------------------------------------------+-------+












                                   CHAPTER 14

                            MATERIAL SPECIFICATIONS



     14.1  PACKAGE

     SWIFT is a 68 pin  Cerquad  chip.   Package  external  dimensions  are
     available  in  the  SBG  Standard  Cell  Library  (Digital  Semicustom
     Business Group CMOS-2 Library).  The package does not need a heat sink
     (see the Power Consumption section).



                                   
                                   | | | | | |
                                  +++++++++++++
                                - |           | -
                                - |           | - }B
                                - |  68 PIN   | -
                                - |  CERQUAD  | -
                                - |           | -
                                - |           | -
                                  +++++++++++++
                                   | | | | | |

                                  |<----A---->|
                                |<------D------>|


               A = END TO END EXCLUDING PINS = .900"
               B = PIN WIDTH                 = .020"
               C = PIN TO PIN SPACING        = .050"
               D = END TO END INCLUDING PINS = 1.125" +/- .005"

     MATERIAL SPECIFICATIONS                                      Page 14-2
     PINOUT                                                   3 August 1989


     14.2  PINOUT

     14.2.1  Signal Name To Pin Number Mapping


                                                      D
                          D D   D D   D D   D D       S
                          S S   S S   S S   S S       S
                          S S   S S   S S   S S       I D
                          I I   I I   I I   I I       - S
                          - -   - -   - -   - -       P S
                          D D   D D   D D   D D       A I
                          A A Q A A Q A A Q A A Q V Q R _ Q
                          T T V T T V T T V T T V B V I B V
                          A A S A A S A A S A A D I S T S S
                          0 1 S 2 3 S 4 5 S 6 7 D A S Y Y S
                          L L 1 L L 1 L L 1 L L 1 S 2 L L 1

                          | | | | | | | | | | | | | | | | |
                      +----------------------------------------+
                      |   9   7   5   3   1   67  65  63  61   |
                      |     8   6   4   2   68  66  64  62     |
                      |   * *   * *   * *   * *       * *      |
          TESTOUT H --| 10                               * 60  |-- DSSI_ACK L
     SYSINTERRUPT L --| 11                               * 59  |-- DSSI_RST L
         HP_CLOCK H --| 12                               * 58  |-- DSSI_SEL L
                VDD --| 13                               * 57  |-- DSSI_CMD L
                VSS --| 14                                 56  |-- QVSS1
         SYSCLOCK H --| 15        68 PIN CERQUAD         * 55  |-- DSSI_REQ L
          SYSTEST H --| 16                               * 54  |-- DSSI_INPUT L
         BUSGRANT L --| 17                                 53  |-- VSS
             HPDS L --| 18                                 52  |-- VDD
             HPAS L --| 19                                 51  |-- ID2 L
          HPWRITE L --| 20                                 50  |-- ID1 L
         HPADDR16 H --| 21                                 49  |-- ID0 L
           HPDAL0 H --| 22                                 48  |-- SYSRESET L
           HPDAL1 H --| 23                                 47  |-- HPCS L
           HPDAL2 H --| 24                                 46  |-- HPRDY L
           HPDAL3 H --| 25                                 45  |-- HPDATAEN L
              IOVSS --| 26                                 44  |-- IOVDD
                      |      28  30  32  34  36  38  40  42    |
                      |    27  29  31  33  35  37  39  41  43  |
                      |________________________________________|
                           | | | | | | | | | | | | | | | | |
                           I H H H H H H V V H H H H H H H I
                           O P P P P P P S D P P P P P P P O
                           V D D D D D D S D D D D D D D A V
                           D A A A A A A     A A A A A A D S
                           D L L L L L L     L L L L L L D S
                             4 5 6 7 8 9     1 1 1 1 1 1 R
                                             0 1 2 3 4 5 E
                             H H H H H H                 N
                                             H H H H H H
                                                         L

     MATERIAL SPECIFICATIONS                                      Page 14-3
     PINOUT                                                   3 August 1989


     14.2.2  Pin Name Mapped To IO-Cell Type




     PIN NAME               IO CELL TYPE           DESCRIPTION
     --------               ------------           -----------

     DSSI_DATA<7:0> L       XQBUS                  86ma Open Drain XCVR
     DSSI_PARITY L          XQBUS                  86ma Open Drain XCVR
     DSSI_CMD L             XQBUS                  86ma Open Drain XCVR
     DSSI_SEL L             XQBUS                  86ma Open Drain XCVR
     DSSI_INPUT L           XQBUS                  86ma Open Drain XCVR
     DSSI_REQ L             XQBUS                  86ma Open Drain XCVR
     DSSI_ACK L             XQBUS                  86ma Open Drain XCVR
     DSSI_BSY L             XQBUS                  86ma Open Drain XCVR
     DSSI_RST L             XQBUS                  86ma Open Drain XCVR
     DSSI_ID<2:0> L         TLCHT                  TTL receiver
     HP_DAL<15:00> H        BD4T_R20               4ma driver,TTL receiver
     HP_ADDR16 H            BT4_R20                4ma driver
     HP_WRITE L             BD4T_R20               4ma driver,TTL receiver
     HP_AS/HP_CTRCLK  L     BT4_R20                4ma driver
     HP_DS L                BT4_R20                4ma driver
     HP_RDY/HP_BUSREQ L     TLCHT                  TTL receiver
     HP_BUSGRANT            BT4_R20                4ma driver,TTL receiver
     HP_CS L                TLCHT                  TTL receiver
     HP_ADREN L             BT4_R20                4ma driver
     HP_DATAEN L            BT4_R20                4ma driver
     HP_CLK H               TLCHT                  TTL receiver
     BUSGRANT L             BT4_R20                4ma driver
     SYSINTERRUPT_L         BT4OD_R20              4ma open drain driver
     SYSRESET_L             TLCHT                  TTL receiver
     ID<2:0>_L              TLCHT                  TTL receiver
     *SYSTEST               PTP4                   TEST INPUT PAD
     *TESTOUT               PTP3                   TEST OUTPUT PAD


     *NOTE: THESE ARE TEST PINS.  THEY CAN BE DRIVEN/MONITORED JUST LIKE
            ANY OTHER SWIFT I/O.

     MATERIAL SPECIFICATIONS                                      Page 14-4
     PINOUT                                                   3 August 1989


     14.2.3  Power And Ground Pin Requirements

     In general, power and ground requirements depend upon signal type  and
     internal  gate  count.   For SWIFT, the Power and Ground pins required
     for the different signal types are as follows:

           o  VSS/VDD Pins:  are used to supply the I/O pad level shifters,
              input pad drivers, output pad pre-drivers and internal cells.
              The number recommended is one pair for every 24 pads, or  one
              pair  for  every  3000  internal  gates, which ever number is
              higher.  SWIFT has 3 pairs of VSS/VDD pins, enough  for  9000
              gates and 72 pads.

           o  IOVSS/IOVDD Pins:  are used  to  provide  power  to  the  pad
              output drivers.  The number recommended is one pair for every
              twelve 4mAmp pads, including bidirectional pads.  SWIFT has 2
              IOVDD/IOVSS pairs, or enough for 24 output pads.

           o  DSSI Drivers - One  QVSS1  pin  is  provided  for  every  3.1
              open-drain drivers, giving a total of 5.  1 QVSS2 and 1 QVDD1
              pin are also provided.




     14.3  POWER CONSUMPTION

     Power  consumption  for  SWIFT  was   calculated   at   0.693   Watts,
     sufficiently low to operate without a heat sink.

     Total Power = Pint + Ppadring + Pqbus

     ----------------------------------------------------------------------

     Pint = summation(Ntype * fswitch * Fractionswitching * Ktype)

             This is broken into 5 terms:  one for 30 MHz logic, one for 10
     MHz  logic,  one  for  the B1I's in the 30 MHZ clock line, one for the
     B1I's in the 10 MHz clock line, and one for the two remaining B1I's.

     Fractionswitching = 0.25 (from Hudson)
     Ktypelogic      = 7.0 * 10**-12 W/Hz (from Hudson)
     KtypeB1I        = 210 * 10**-12 W/Hz (from Hudson)
     NType10MHz      = 1720
     Ntype30MHz      = 1306
     Fswitch10MHZ    = 5 * 10**6 Hz
     Fswitch30MHZ    = 15 * 10**6 Hz

     Pint    =       (1306 * 15*10**6 * 0.25 *   7*10**-12)W +
                     (1720 *  5*10**6 * 0.25 *   7*10**-12)W +
                     (6    * 30*10**6 * 1    * 210*10**-12)W +
                     (4    * 10*10**6 * 1    * 210*10**-12)W +
                     (2    *  5*10**6 * 0.01 * 210*10**-12)W


     MATERIAL SPECIFICATIONS                                      Page 14-5
     POWER CONSUMPTION                                        3 August 1989


     Pint    = 0.09551 W

     ----------------------------------------------------------------------

     Ppadring = Ppadinternal + Ppadexternal

     Ppadinternal = summation(Ntype * ((fswitch * (K1 * Cint + K2) + K3)
                                       * Fractionswitching + K4))

     Ppadexternal = summation(Ntype * fswitch * (X1 * Cext + X2)
                              * Fractionswitching)

             This summation is broken down into 5 terms:  one internal  and
     one  external  for the 17 BD4TR20 bidirectional pads, one external for
     the 8 BT4R20 output pads, one internal for the DRVT4 clock driver, and
     one internal for the 8 TLCHT input pads.

     fswitch         = 15 MHz
     Fractionswitching = 0.25 (see above)
     Cint            = 2 pf (estimate)
     CintDRVT4       = 6.21 pf (from STATGEN)
     Cext            = 50 pf (estimate)

     For the 4mA outputs and bidirects: (the units have been ommitted)
     K1              = 0
     K2              = 0.318
     K3              = 0
     K4              = 16.1/2 = 8.05 (This is what we were told to use)
     X1              = 0.0149
     X2              = 0.168

     For the TTL inputs:
     K1              = 0.0252
     K2              = 0.050
     K3              = 0
     K4              = 16.1

     For the Clock Driver input:
     K1              = 0.263
     K2              = 0.359
     K3              = 0
     K4              = 15.5


     Ppadinternal = (17 * ((15 * (0     * 2 + .318) + 0) * .25 + 8.05)) +
                    (8  * ((15 * (.0252 * 2 + .050) + 0) * .25 + 16.1)) +
                    (1  * ((15 * (.0263 * 2 + .359) + 0) * .25 + 15.5))

                     = 306.0 mW

     Ppadexternal    = (17 * 15 * (0.0149 * 50 + 0.168)) * 0.25) +
                       (8  * 15 * (0.0149 * 50 + 0.168)) * 0.25)

                     = 85.59 mW

     MATERIAL SPECIFICATIONS                                      Page 14-6
     POWER CONSUMPTION                                        3 August 1989



     Ppadring        = 0.3916 W

     ----------------------------------------------------------------------

     Pqbus = (Idcr * VDD) + (Idcx * VDD * Nqbus)
             + (VOL * IOL * MAXlow * Dutycycle)

     Idcr            = 6.7 mA (From Hudson)
     Idcx            = 0.59 mA (From Hudson)
     VOL             = 0.27 V (From Hudson)
     IOL             = 90 mA (From Hudson)
     Nqbus           = 16
     VDD             = 5.25 V
     Dutycycle       = 0.5 (see above)

     Pqbus   = (6.7 * 5.25) + (0.59 * 5.25 * 16) + (0.27 * 90 * 10 * 0.5)

     Pqbus   = 0.2062 W

     ----------------------------------------------------------------------

     Total Power     = 0.693 W












                                   CHAPTER 15

                           ELECTRICAL SPECIFICATIONS



     Electrical Specifications for SWIFT were provided by the SBG  Standard
     Cell Group.



     15.1  DSSI BUS ELECTRICAL SPECIFICATIONS


      -----------------------------------------------------------------------
     | SYMBOL |  PARAMETER | TEST CONDITIONS       | MIN | TYP | MAX | UNITS |
     |-----------------------------------------------------------------------|
     | Volb   | Low Level  | BUS Pin = 100ma;      |     | 0.6 | 0.9 |   V   |
     |        | Bus Voltage| Temperature=70 deg C  |     |     |     |       |
     |        |            | VDD = 4.75V           |     |     |     |       |
      -----------------------------------------------------------------------
     | Iihb   | High Level | VDD=5.25V             | -50 |     | 50  |  uA   |
     |        | Bus Leakage| Vin=5.25V             |     |     |     |       |
     |        | Current    |                       |     |     |     |       |
      -----------------------------------------------------------------------
     | Iilb   | Low Level  | VDD=5.25V             | -50 |     | 50  |  uA   |
     |        | Bus Leakage| Vin=0V                |     |     |     |       |
     |        | Current    |                       |     |     |     |       |
      -----------------------------------------------------------------------
     | Vihr   | Bus High   | VDD=4.75V;            | 2.0 |     |     |       |
     |        | Level Input| Temperature = 70 deg C|     |     |     |   V   |
     |        | Voltage    |                       |     |     |     |       |
      -----------------------------------------------------------------------
     | Vilr   | Bus Low    | VDD=4.75              | 1.2 | 1.4 |     |   V   |
     |        | Level Input| Temperature = 70 deg C|     |     |     |       |
     |        | Voltage    |                       |     |     |     |       |
      -----------------------------------------------------------------------





     15.2  NON-DSSI BUS ELECTRICAL SPECIFICATIONS

     The following table was taken from the SBG SCL2  library.   All  tests
     are  specified  from  4.75V  to 5.25V VDD unless otherwise noted.  The

     ELECTRICAL SPECIFICATIONS                                    Page 15-2
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


     temperature range is 0 to 70 degrees C ambient.

       HP Interface Receiver Cells:

     --------------------------------------------------------------------------
     Parameter                      Min     Max      Units      Test Conditions
     --------------------------------------------------------------------------

     High Level Input Voltage       2.0              Volts      VDD=4.75V

     Low Level Input Voltage                0.8      Volts      VDD=4.75V

     Input Leakage Current                  -10      uAmps      VDD=5.25V
                                                                Vin=0V

     Input Leakage                           10      uAmps      VDD=5.25V
                                                                Vin=5.25V
     --------------------------------------------------------------------------
     --------------------------------------------------------------------------


     HP Interface Driver Cells:

     --------------------------------------------------------------------------
     Parameter                      Min     Max      Units      Test Conditions
     --------------------------------------------------------------------------

     High Level Output Voltage      2.4              Volts      VDD=4.75V
                                                                IOH=-6MA

     Low Level Output Voltage               0.4      Volts      VDD=4.75V
                                                                IOL=6MA

     Output Leakage Current        -10      -10      uAmps      VDD=5.25V
                                                                Vin=0V

     Output Leakage Current         10       10      uAmps      VDD=5.25V
                                                                Vin=5.25V
     --------------------------------------------------------------------------
     --------------------------------------------------------------------------

     INDEX                                                     Page Index-1
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


                                     INDEX



     Arbitrating Mode, 11-1                Timeout Operation, 8-6
       HPM bit - See CSR-HPM             Bus Free Phase, 6-2
       Address Counter Control, 11-2     BUS ID<2:0> bits - See ID-BUS
       Memory Arbitration, 11-1              ID<2:0>
       Reduced Address Capability,
           11-2                          checkSuM error bit - See Status
     Arbitrating Mode Bit - See              Word-XSM
         CSR-HPM                         CI Overhead, 7-7
     Arbitration Phase, 6-2              CI Port, 7-8
       Initiator                         CI Port Specification, 7-2
         Fair Arbitration, 9-8             ECO, 7-9
         Normal Operation, 9-1           CI Specification, 7-2
       Target                            Cirrus, 3-1
         Normal Operation, 8-2           Cirrus Module, 3-1
                                         COE bit - See DICTRL-COE
     Bad Command Bytes Checksum, 8-3     Command Bytes, 7-4
     Bad Command Bytes EDC, 9-4            Command Op. Code, 7-5
     Bad Data Bytes EDC, 9-5               Destination Port, 7-5
     Bad EDC, 9-7                          Format, 7-4
     Bad First Buffer bit - See            Frame Length, 7-6
         ISTAT-BFB                         Initiator
     Bad Phase, 9-7                          Normal Operation, 9-3
     Bad Phase bit - See Status            REQ/ACK Offset, 7-5
         Word-BPH                          Source Port, 7-5
     Bad Sync Character                    Target
       First Buffer                          Normal Operation, 8-3
         Initiator, 9-7                  Command Bytes Checksum
         Target, 8-5                       Initiator
       Nonfirst Buffer                       Normal Operation, 9-3
         Initiator, 9-7                    Target
         Target, 8-6                         Burn One Buffer, 8-5
     BC, 12-7                                Normal Operation, 8-3
     BFB bit - See ISTAT-BFB             Command Bytes EDC, 7-6
     BPH bit - See Status Word-BPH         Initiator, 9-3
     Buffer Count<5:0> bits - See        Command Op. Code - See Command
         Status Word-Buffer Count<5:0>       Bytes-Command Op. Code
     Buffer Protection                   Command Out Phase
       Buffer EDC, 10-2                    Initiator
       Sync Character, 10-3                  Normal Operation, 9-3
     Buffer Size<9:0> Bits - See           Target
         BUFSIZ-Buffer Size<9:0>             Normal Operation, 8-1
     Buffers                             Command out Phase, 6-2
       Difference from Packets, 7-2      Command Word, 7-4
       Format, 7-2 to 7-3                  DEST ID, 7-4
     BUFSIZ, 5-8, 7-6                        Initiator
       Buffer Size<9:0>, 5-8                   Normal Operation, 9-2
     Burn One Buffer                       Initiator
       Buffer Count, 8-5                     Normal Operation, 9-2
       Normal Operation, 8-5               IOC, 7-4
       Response to DSSI_RST, 8-6             Initiator

     INDEX                                                     Page Index-2
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


           Normal Operation, 9-2         Diagnostic Mode bit - See
         Target                              DICTRL-DIA
           Normal Operation, 8-3, 8-6    DICTRL, 5-18
       Target                              COE, 5-18
         Normal Operation, 8-3, 8-6        DIA, 5-19
     Configurations, 3-1                   DOE, 5-18
     CPR - See Current Pointer             LPB, 5-19, 12-1
         Register                          PRE, 5-19
     CSR, 5-5                              SRD, 5-18, 12-6
       EEN, 5-5, 10-1                      TST, 5-18, 12-6
       HPM, 5-5                          DNE bit - See Status Word-DNE
       IE, 5-6                           DOE bit - See DICTRL-DOE
         Normal Operation, 8-6           Done bit - See Status Word-DNE
       IIA, 5-6, 10-4                    DSA bit - See Status Word-DSA
       RST, 5-5                          DSCTRL, 5-10
       SLE, 5-6, 7-1                       IIP, 5-11
         Normal Operation, 8-2             IN, 5-10, 7-1 to 7-2
       SPT, 5-5, 7-7, 7-9                    Bad Sync in First Buffer, 8-5
       ZF, 5-5, 7-8 to 7-9                   Bad Sync Nonfirst Buffer, 8-6
     Current Pointer Register                Target
       Initiator, 9-2                          Normal Operation, 8-2
       Target, 8-2                         IPZ, 5-13
                                           MI, 5-11, 7-2
     Data Block, 7-6                         Bad First Buffer, 8-2
     Data Block EDC, 7-6, 7-8                Bad Sync in First Buffer, 8-5
       Normal Operation, 9-5                 Bad Sync Nonfirst Buffer, 8-6
     Data Block Format, 7-6                  Burn One Buffer, 8-5
     Data Bytes Checksum                     Nonfirst buffer Bad Sync
       Initiator                                 Character, 8-4
         Normal Operation, 9-5               Response to DSSI_RST, 8-6
       Target                                Timeout Operation, 8-6
         Burn One Buffer, 8-5              MO, 5-13, 7-3
         Normal Operation, 8-4               Bad First Buffer, 9-2
     Data Integrity Measures, 10-1           Bad Sync in First Buffer, 9-7
     Data Out Phase, 6-2                     Initiator
       Normal Operation, 8-3                   Bad Cmd. Bytes EDC, 9-4
     DCS, 5-18, 12-1                           Bad Data Bytes EDC, 9-5
       ACK, 12-3                               DSSI Reset Received, 9-8
       BSY, 12-3                               Error Case, 9-7
       C/D, 12-3                               INVALID Phase while
       REQ, 12-3                                   expecting Command Out
     DDB, 5-17, 12-1                               Phase, 9-3
       PTY, 12-2                               INVALID Phase while
     DEC Standard 161 - See CI                     expecting Data Out
         Specification                             Phase, 9-4
     DEST ID - See Command Word-DEST           INVALID Phase while
         ID                                        expecting Status In
     Destination ID - See Command                  Phase, 9-6
         Word-DEST ID                          NAK Received, 9-6
     Destination Port - See Command            Nonfirst buffer Bad Sync
         Bytes-Destination Port                    Character, 9-6
     DIA bit - See DICTRL-DIA                  Read Back Error detected,
     Diagnostic Control Register - See             9-8
         DICTRL                                Selection Timeout, 9-8

     INDEX                                                     Page Index-3
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


           Status Phase while              Initiator Timeout, 9-8
               expecting Command Out       Target
               Phase, 9-3                    Response to DSSI_RST, 8-6
           Status Phase while
               expecting Data Out        EDC
               Phase, 9-4                  Buffer Protection, 10-2
       OIP, 5-13                           Calculation, 10-2
       OUT, 5-12, 7-1, 7-3                 Command Bytes, 7-6
         Bad Sync in First Buffer, 9-7     Data Block, 7-6, 7-8
         Initiator                         Example C Code, 10-3
           DSSI Reset Received, 9-8        Example Calculation, 10-2
           Error Case, 9-7               EDC Enable Bit - See CSR-EEN
           Normal Operation, 9-1         EEN bit - See CSR-EEN
           Read Back Error detected,     Electrical Specifications, 15-1
               9-8                       EPE bit - See ISTAT-EPE
           Selection Timeout, 9-8        Error Protection
       TPZ, 5-11                           Buffers, 10-2
       WP1, 5-11                           DSSI, 10-1
       WP2, 5-13                           II Bus, 10-1
     DSSI, 1-1                             Registers, 10-3
       Control and Status Register -     External Parity Error bit - See
           See DSCTRL                        ISTAT-EPE
       Control Signals Register - See
           DCS                           Fair Arbitration, 9-8
       Data Bus Register - See DDB       Frame Length - See Command
       Packets - See Packets                 Bytes-Frame Length
       Command Bytes, 7-4
       Error Protection, 10-1            Goals, 1-1
       ID, 4-2
       Operation, 6-1                    HPM Bit - See CSR-HPM
       Read Back Testing, 10-1
       Registers, 5-9                    IAD bit - See ISTAT-IAD
       Signals, 4-1                      IBC bit - See ISTAT-IBC
       Specification, 7-2                ID, 5-6
       User Selectable Options, 7-1        BUS ID<2:0>, 5-7
     DSSI Bus ID Bits - See ID-BUS         P/R, 5-7
         ID<2:0>                             Target
     DSSI ID Pins vs. Register Bit -           Normal Operation, 8-2
         See ID-P/R                      IDN bit - See ISTAT-IDN
     DSSI Reset                          IE bit - See CSR-IE
       Initiator                         IER bit - See ISTAT-IER
         Bad Cmd. Bytes EDC, 9-4         II, 1-1
         Bad Data Bytes EDC, 9-5         II Bus
         DSSI Reset Received, 9-8          Buffer EDC, 10-1
         INVALID Phase while expecting     Error Protection, 10-1
             Command Out Phase, 9-3        Signals, 4-2
         INVALID Phase while expecting   IIA bit - See CSR-IIA
             Data Out Phase, 9-4         IIP bit - See DSCTRL-IIP
         INVALID Phase while expecting   Illegal Register Access Detected
             Status In Phase, 9-6            bit - See ISTAT-IAD
         Nonfirst buffer Bad Sync        ILP, 5-9, 7-1, 7-3
             Character, 9-6                Bad Sync in First Buffer, 9-7
         Not Enough Buffers, 9-5           Initiator
         Read Back Error detected, 9-8       Error Case, 9-7

     INDEX                                                     Page Index-4
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


       Normal Operation, 9-1                 Status Phase while expecting
       Successful Transfer, 9-7                  Command Out Phase, 9-3
     IN bit - See DSCTRL-IN                  Status Phase while expecting
     IN Bit Cleared bit - See                    Data Out Phase, 9-4
         ISTAT-IBC                         IOC, 7-4
     INB bit - See ISTAT-INB               ISTAT, 5-15
     Inbound Buffer Error bit - See        Target
         ISTAT-INB                           Bad Cmd. Bytes Checksum, 8-3
     Initiator                               Bad Data Bytes Checksum, 8-5
       Normal Operation, 9-1                 Bad First Buffer, 8-2
     Initiator List Pointer - See ILP        Bad Sync in First Buffer, 8-5
     Initiator Pointer is Zero bit -         Nonfirst buffer Bad Sync
         See DSCTRL-IPZ                          Character, 8-4
     Initiator Timeout, 9-8                  Normal Operation, 8-3, 8-6
     Initiator Timeout bits - See            Not Enough Buffers, 8-4
         TMO-Initiator Timeout           Introduction, 1-1
     Input Done bit - See ISTAT-IDN      INVALID Phase
     Input Enable Bit - See DSCTRL-IN      Initiator
     Input Error Bit - See ISTAT-IER         While expecting Command Out
     Input In Progress bit - See                 Phase, 9-3 to 9-4
         DSCTRL-IIP                          While expecting Status In
     Internal Loopback bit - See                 Phase, 9-6
         DICTRL-LPB                      IOC - See Command Word-IOC
     Internal Loopback Mode, 12-1        IPE bit - See ISTAT-IPE
       Interlocks, 12-2                  IPZ bit - See DSCTRL-IPZ
       Read Back Error, 12-2             ISTAT, 5-15
     Internal Parity Error bit - See       BFB, 5-15
         ISTAT-IPE                           Initiator
     Interrupt Enable Bit - See CSR-IE         Bad First Buffer, 9-2
     Interrupt on Illegal Access Bit -         Bad Sync in First Buffer,
         See CSE-IIA                               9-7
     Interrupts, 7-11                        Target
       IE, 5-6                                 Bad First Buffer, 8-2
       Initiator                               Bad Sync in First Buffer,
         ACK Received, 9-6                         8-5
         Bad Cmd. Bytes EDC, 9-4           EPE, 5-16
         Bad Data Bytes EDC, 9-5           IAD, 5-16
         Bad First Buffer, 9-2             IBC, 5-16
         Bad Sync in First Buffer, 9-7       Bad First Buffer, 8-2
         DSSI Reset Received, 9-8            Nonfirst buffer Bad Sync
         INVALID Phase while expecting           Character, 8-4
             Command Out Phase, 9-3        IDN, 5-15
         INVALID Phase while expecting       Normal Operation, 8-6
             Data Out Phase, 9-4           IER, 5-15
         INVALID Phase while expecting       Bad Cmd. Bytes Checksum, 8-3
             Status In Phase, 9-6            Bad Data Bytes Checksum, 8-5
         NAK Received, 9-6                   Bad First Buffer, 8-2, 9-2
         Nonfirst buffer Bad Sync            Nonfirst buffer Bad Sync
             Character, 9-6                      Character, 8-4
         Normal Operation, 9-2               Not Enough Buffers, 8-4
         Not Enough Buffers, 9-5             Response to DSSI_RST, 8-6
         Read Back Error detected, 9-8       Timeout Operation, 8-6
         Selection Timeout, 9-8            INB, 5-15
                                             Not Enough Buffers, 8-4

     INDEX                                                     Page Index-5
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


       IPE, 5-16                             Not Enough Buffers, 9-5
       LDN, 5-17                             Status Phase while expecting
         Initiator                               Command Out Phase, 9-3
           ACK Received, 9-6                 Status Phase while expecting
           Bad Cmd. Bytes EDC, 9-4               Data Out Phase, 9-4
           Bad Data Bytes EDC, 9-5         ODN, 5-15
           Bad First Buffer, 9-2             ACK Received, 9-6
           DSSI Reset Received, 9-8        RST, 5-15
           INVALID Phase while               Initiator
               expecting Command Out           Bad Cmd. Bytes EDC, 9-4
               Phase, 9-3                      Bad Data Bytes EDC, 9-5
           INVALID Phase while                 DSSI Reset Received, 9-8
               expecting Data Out              INVALID Phase while
               Phase, 9-4                          expecting Command Out
           INVALID Phase while                     Phase, 9-3
               expecting Status In             INVALID Phase while
               Phase, 9-6                          expecting Data Out
           NAK Received, 9-6                       Phase, 9-4
           Nonfirst buffer Bad Sync            INVALID Phase while
               Character, 9-6                      expecting Status In
           Not Enough Buffers, 9-5                 Phase, 9-6
           Read Back Error detected,           Nonfirst buffer Bad Sync
               9-8                                 Character, 9-6
           Selection Timeout, 9-8              Not Enough Buffers, 9-5
           Status Phase while                  Read Back Error detected,
               expecting Command Out               9-8
               Phase, 9-3                    Target
           Status Phase while                  Response to DSSI_RST, 8-6
               expecting Data Out          RT3, 5-16
               Phase, 9-4                  RTO, 5-16
         Target                              Bad Cmd. Bytes EDC, 9-4
           Bad Cmd. Bytes Checksum,          Bad Data Bytes EDC, 9-5
               8-3                           INVALID Phase while expecting
           Bad Data Bytes Checksum,              Command Out Phase, 9-3
               8-5                           INVALID Phase while expecting
           Bad First Buffer, 8-2                 Data Out Phase, 9-4
           Nonfirst buffer Bad Sync          INVALID Phase while expecting
               Character, 8-4                    Status In Phase, 9-6
           Normal Operation, 8-6             Nonfirst buffer Bad Sync
           Not Enough Buffers, 8-4               Character, 9-6
           Response to DSSI_RST, 8-6         Not Enough Buffers, 9-5
           Timeout Operation, 8-6            Read Back Error detected, 9-8
       OBC, 5-16                           SNF, 5-17
         Bad Cmd. Bytes EDC, 9-4             Initiator
         Bad Data Bytes EDC, 9-5               Nonfirst buffer Bad Sync
         INVALID Phase while expecting             Character, 9-6
             Command Out Phase, 9-3          Target
         INVALID Phase while expecting         Bad Sync Nonfirst Buffer,
             Data Out Phase, 9-4                   8-6
         INVALID Phase while expecting         Nonfirst buffer Bad Sync
             Status In Phase, 9-6                  Character, 8-4
         NAK Received, 9-6
         Nonfirst buffer Bad Sync        LDN bit - See ISTAT-LDN
             Character, 9-6              Linked Lists, 7-2

     INDEX                                                     Page Index-6
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


       Adding to, 7-9                    Output in Progress bit - See
       Removing From, 7-10                   DSCTRL-OIP
     List Done bit - See ISTAT-LDN       Overview, 2-1
     Loop Back Testing, 12-1
     LOTC, 12-7                          P/R bit - SEE ID-P/R
     LPB bit - See DICTRL-LPB            Package, 14-1
                                         Packet
     MEM bit - See Status Word-MEM         Data type, 7-9
     Memory Error bit - See Status         Length, 7-6
         Word-MEM                        Packet Completion Modes
     Memory Port - See II Bus              Initiator, 9-7
     MI bit - See DSCTRL-MI                Target, 8-5
     Microprocessor's Input Enable bit   Packets
         - See DSCTRL-MI                   Data type, 7-7
     Microprocessor's Output Enable        Difference from Buffers, 7-2
         bit - See DSCTRL-MO               Format, 7-2, 7-7
     Miscellaneous Signals, 4-3            Message type, 7-7
     MO bit - See DSCTRL-MO              PAR bit - See Status Word-PAR
     MSCP, 7-8                           Parity Error
                                           Target
     NAK bit - See Status Word-NAK           Burn One Buffer, 8-5
     NEB bit - See Status Word-NEB       Parity Error bit - See Status
     No Reply bit - See Status               Word-PAR
         Word-NRP                        Phoenix, 2-1, 3-1
     Non-Goals, 1-2                      Pin Description, 4-1
     Nonfirst Buffers                    Pin Types, 4-1
       Initiator, 9-5                    Pinout, 14-2
       Target, 8-4                       Port Enable bit - See DICTRL-PRE
     Not ACK bit - See Status Word-NAK   Power and Ground Pin Requirements,
     Not Enough Buffers                      14-4
       Initiator, 9-5, 9-7               Power Consumption, 14-4
       Target, 8-4                       PRE bit - See DICTRL-PRE
         Burn One Buffer, 8-5
     Not Enough Buffers bit - See
         Status Word NEB                 Read Back Error
     NRP bit - See Status Word-NRP         Initiator, 9-7 to 9-8
                                           Internal Loopback Mode, 12-2
     OBC bit - See ISTAT-OBC             Real Data, 7-7
     ODN bit - See ISTAT-ODN             Register Protection
     OIP bit - See DSCTRL-OIP              Address separation, 10-4
     OOVSIZ, 5-14, 7-9                     Effects of Bad Data, 10-5
       OOVSIZE<4:0>, 5-14                  Error Protection, 10-3
     Other Overhead Size bits - See        Register Read Back, 10-4
         OOVSIZ-OOVSIZ<4:0>                Register Write Protect, 10-4
     OUT bit - See DSCTRL-OUT              Sync Characters, 10-5
     OUT Bit Cleared bit - See           Registers
         ISTAT-OBC                         Address Map, 5-2 to 5-3
     Output Done bit - See ISTAT-ODN       Definitions, 5-5
     Output Enable 1 bit - See             Description, 5-1 to 5-2
         DICTRL-DOE                        Diagnostic and Test, 5-17
     Output Enable 2 bit - See             DSSI, 5-9
         DICTRL-COE                        Initialization Values, 5-20
     Output Enable bit - See             REQ/ACK Offset - See Command
         DSCTRL-OUT                          Bytes REQ/ACK Offset

     INDEX                                                     Page Index-7
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


     Reset - Originator bit - See              Bad First Buffer, 8-2
         ISTAT-RTO                             Bad Sync in First Buffer,
     Reset - Third Party bit - See                 8-5
         ISTAT-RT3                             Bad Sync Nonfirst Buffer,
     Reset bit - See ISTAT-RST                     8-6
     Reset Command Bit - See CSR-Reset         Burn One Buffer, 8-5
     RFxx Disk Drives, 3-1                     Nonfirst buffer Bad Sync
     RST bit - See CSR-RST                         Character, 8-4
     RST bit - See ISTAT-RST                   Normal Operation, 8-2
     RT3 bit - See ISTAT-RT3                   Not Enough Buffers, 8-4
     RTO bit - See ISTAT-RTO               Target
                                             Normal Operation, 8-4
     Sector, 7-8                         Status Register Diagnostics Bit -
     Selection Enable Bit - See              See DICTRL-SRD
         CSR-SLE                         Status Word, 7-3
     Selection Phase, 6-2, 7-1             BPH, 7-13
       Initiator                             Initiator
         Normal Operation, 9-2                 INVALID Phase while
       Selection Timeout, 9-3                      expecting Command Out
       Target                                      Phase, 9-3
         Normal Operation, 8-1                 INVALID Phase while
     Selection Timeout, 9-3                        expecting Data Out
       Initiator, 9-8                              Phase, 9-4
       Normal Operation, 8-2                   Status Phase while
     Selection Timeout bits - See                  expecting Data Out
         TMO-Selection Timeout                     Phase, 9-4
     Signal Types, 4-1                     Buffer Count<5:0>, 7-12
     SII, 1-1                                Initiator
     SLE bit - See CSR-SLE                     ACK Received, 9-6
     SLIM, 3-1                                 Bad Cmd. Bytes EDC, 9-4
     SNF bit - See ISTAT-SNF                   Bad Data Bytes EDC, 9-5
     SNF bit - See Status Word-SNF             DSSI Reset Received, 9-8
     Source Port - See Command                 INVALID Phase while
         Bytes-Source Port                         expecting Command Out
     Split Bit - See CSR-SPT                       Phase, 9-3
     SPT bit - See CSR-SPT                     INVALID Phase while
     SRD bit - See DICTRL-SRD                      expecting Data Out
     Status In Phase, 6-2                          Phase, 9-4
       Initiator                               Not Enough Buffers, 9-5
         ACK Received, 9-6                     Read Back Error detected,
         NAK Received, 9-6                         9-8
         Normal Operation, 9-6                 Selection Timeout, 9-8
         While expecting Command Out,          Status Phase while
             9-3                                   expecting Command Out
         While expecting Data Out, 9-4             Phase, 9-3
       NAK                                     Status Phase while
         Initiator                                 expecting Data Out
           Bad Sync in First Buffer,               Phase, 9-4
               9-7                           Target
         Target                                Bad Cmd. Bytes Checksum,
           Bad Cmd. Bytes Checksum,                8-3
               8-3                             Bad Data Bytes Checksumon,
           Bad Data Bytes Checksum,                8-5
               8-5                             Burn One Buffer, 8-5

     INDEX                                                     Page Index-8
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


           Normal Operation, 8-6               INVALID Phase while
           Not Enough Buffers, 8-4                 expecting Command Out
           Timeout Operation, 8-6                  Phase, 9-3
       DNE, 7-11                               INVALID Phase while
         Initiator                                 expecting Data Out
           ACK Received, 9-6                       Phase, 9-4
           Bad Cmd. Bytes EDC, 9-4             Not Enough Buffers, 9-5
           Bad Data Bytes EDC, 9-5             Read Back Error detected,
           DSSI Reset Received, 9-8                9-8
           INVALID Phase while                 Selection Timeout, 9-8
               expecting Command Out           Status Phase while
               Phase, 9-3                          expecting Command Out
           INVALID Phase while                     Phase, 9-3
               expecting Data Out              Status Phase while
               Phase, 9-4                          expecting Data Out
           Not Enough Buffers, 9-5                 Phase, 9-4
           Read Back Error detected,         Parity Error
               9-8                             Bad Sync in First Buffer,
           Selection Timeout, 9-8                  8-5
           Status Phase while                Target
               expecting Command Out           Bad Cmd. Bytes Checksum,
               Phase, 9-3                          8-3
           Status Phase while                  Bad Data Bytes Checksum,
               expecting Data Out                  8-5
               Phase, 9-4                      Not Enough Buffers, 8-4
         Target                                Response to DSSI_RST, 8-6
           Bad Cmd. Bytes Checksum,            Timeout Operation, 8-6
               8-3                         NEB, 7-13
           Bad Data Bytes Checksum,          Initiator
               8-5                             Not Enough Buffers, 9-5
           Normal Operation, 8-6             Target
           Not Enough Buffers, 8-4             Not Enough Buffers, 8-4
           Timeout Operation, 8-6          NRP, 7-13
       DSA, 7-13                             Initiator
         Target                                Selection Timeout, 9-8
           Bad Cmd. Bytes Checksum,        PAR, 7-13
               8-3                         SNF, 7-14
           Bad Data Bytes Checksum,        Target
               8-5                           Bad First Buffer, 8-2
       Format, 7-11                        XSM, 7-14
       In relation to Sync Character,        Bad Cmd. Bytes Checksum, 8-3
           10-3                              Bad Data Bytes Checksum, 8-5
       Initiator                         Successful Transfer
         Bad First Buffer, 9-2             Initiator, 9-7
       MEM, 7-13                         SWIFT
         Initiator                         Configurations, 3-1
           Bad Cmd. Bytes EDC, 9-4       Sync Character
           Bad Data Bytes EDC, 9-5         Buffer Protection, 10-3
       NAK, 7-13                           First Buffer
         Initiator                           Initiator, 9-2
           Bad Cmd. Bytes EDC, 9-4           Target, 8-2
           Bad Data Bytes EDC, 9-5         Nonfirst buffer
           DSSI Reset Received, 9-8          Initiator
                                               Normal Operation, 9-5

     INDEX                                                     Page Index-9
     NON-DSSI BUS ELECTRICAL SPECIFICATIONS                   3 August 1989


         Target                            Burn One Buffer, 8-5
           Normal Operation, 8-4           Normal Operation, 8-2, 8-6
     Sync Not Found bit - See              Response to DSSI_RST, 8-6
         ISTAT-SNF                         Timeout Operation, 8-6
     Sync Not Found bit - See Status     TMO, 5-7, 7-1
         Word-SNF                          Initiator Timeout, 5-8
     Sync Word, 7-3                        Selection Timeout, 5-7
                                           Target Timeout, 5-8
     Target Command Bytes Error bit -        Timeout Operation, 8-6
         See Status Word-DSA             TPZ bit - See DSCTRL-TPZ
     Target List Pointer - See TLP       TST bit - See DICTRL-TST
     Target Operation, 8-1
     Target Pointer is Zero bit - See    User Interface, 7-1
         DSCTRL-TPZ
     Target Timeout, 8-6                 WP1 bit - See DSCTRL-WP1
     Target Timeout bits - See           WP2 bit - See DSCTRL-WP2
         TMO-Target Timeout              Write Protect 1 bit - See
     Test Bit - See DICTRL-TST               DSCTRL-WP1
     Test Stratagy, 12-1                 Write Protect 2 bit - See
     TF Tape Drives, 11-1                    DSCTRL-WP2
     Thread Word, 7-3
     Timeouts - See TMO                  XSM bit - See Status Word-XSM
     Timing, 13-1
     TLP, 5-9, 7-1 to 7-2                Zero Fill Bit - See CSR-ZF
       Bad Sync in First Buffer, 8-5     Zero-Filling, 7-8 to 7-9
       Bad Sync Nonfirst Buffer, 8-6     ZF bit - See CSR-ZF