home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / os2 / gtak212b.zip / SOURCE.ZIP / OS2-ST01 / st01.doc < prev    next >
Text File  |  1992-05-23  |  2KB  |  123 lines

  1. Addresses:
  2. ----------
  3.  
  4.  C900:0A00    Control/status port
  5.  C900:0C00-0FFF    Data port (1KB), adress ignored
  6.  
  7. Command port:
  8. -------------
  9.  
  10.   [7]    SCSI enable        E
  11.   [6]    Interrupt enable    IE
  12.   [5]    Parity enable        PE
  13.   [4]    Start arbitration    ArbR
  14.   [3]    ATN
  15.   [2]    BSY
  16.   [1]    SEL
  17.   [0]    RST
  18.  
  19. Status port:
  20. ------------
  21.  
  22.   [7]    Arbitration complete    ArbC
  23.   [6]    Parity error        PErr
  24.   [5]    SEL
  25.   [4]    REQ
  26.   [3]    C/D
  27.   [2]    I/O
  28.   [1]    MSG
  29.   [0]    BSY
  30.  
  31. Operation:
  32. ----------
  33.  
  34. Default Cmd bits: EnableIRQ,EnableParity
  35.  
  36. RST:
  37.  
  38.     Cmd  = E+IE+PE+RST
  39.     .. some time
  40.     Cmd  = IE+PE
  41.     .. some time
  42.  
  43. Arbitrate:
  44.  
  45.     Cmd  = IE+PE
  46.     Data = HA target ID as bit mask
  47.     Cmd  = E+PE+ArbR
  48.     .. wait for ArbC (300 msec)
  49.     Data |= 1 << LUN
  50.     Cmd  = E+PE+IE+SEL+ATN
  51.     .. wait for BSY (100 msec)
  52.     Cmd  = IE+PE
  53.     .. wait (20 msec)
  54.     Cmd  = E*IE+PE+ATN
  55.     .. wait for (MSG+CD+IO+REQ) == (MSG+CD+0+REQ) (200 msec)
  56.     Data = 0xC0+LUN# (message out: identify, enable disconnect)
  57.     Cmd  = E+IE+PE
  58.  
  59. Data phase (x: out=0, in=IO):
  60.  
  61.     while (data available)
  62.         .. wait for REQ
  63.         if (MSG+CD+IO) != (0+0+x) then break
  64.         if slow then
  65.             transfer single byte
  66.         else
  67.             fast block transfer (max 1K)
  68.     while (MSG+CD+IO+REQ) == (0+0+x+REQ)
  69.         transfer dummy byte
  70.         .. wait for REQ or timeout (a few msec)
  71.  
  72. Execute transfer, controlled by target, until disconnected:
  73.  
  74.     while not long timeout (sec)
  75.         if not BSY then return error
  76.         if not REQ then continue
  77.         case MSG+CD+IO of
  78.             0+0+0:        -- data out
  79.                 Data out phase
  80.             0+0+IO:     -- data in
  81.                 Data in phase
  82.             0+CD+0:        -- command out
  83.                 Data = next command byte
  84.             0+CD+IO:    -- status in
  85.                 Next status byte = Data
  86.             MSG+CD+0:    -- message out
  87.                 Data = null message (0x08)
  88.                 Cmd  = E+IE+PE
  89.             MSG+CD+IO:    -- message in
  90.                 message byte = Data
  91.                 case message byte of
  92.                     Complete, Disconnect:
  93.                         Cmd = IE+PE
  94.                     SavePtr:
  95.                         save data ptr&len
  96.                     RestorePtr:
  97.                         restore data ptr&len
  98.                     MessageReject:
  99.                     Nop:
  100.                     Identify:
  101.                         ignore
  102.                     otherwise:
  103.                         if message bit [7] then
  104.                             ignore (identify)
  105.                         else
  106.                             error (unknown)
  107.  
  108. Interrupt /reselect):
  109.  
  110.     if not SEL then 
  111.         error, return
  112.     .. wait for IO (some 10 msec)
  113.     id = Data
  114.     if HA target address bit not set in id then
  115.         error, return
  116.     lun bit = id and not (HA target address bit)
  117.     Cmd = E+IE+PE+BSY    -- acknowledge reselection
  118.     .. wait for SEL (some 10 msec)
  119.     .. wait for BSY (some 10 msec)
  120.     Cmd = E+IE+PE
  121.     Execute transfer, ...
  122.     
  123.