*COMDECK  COMPFLB 
          CTEXT  COMPFLB - FIND MASS STORAGE LABEL. 
**        COMPFLB FIND MASS STORAGE LABEL.
          SPACE  4,10 
LOSTIL    EQU    24B         LOST INTERLOCK CODE AND STATUS 
STIL      BIT    S.STIL      INTERLOCKED STACK REQUEST BIT
  
  
**        FLB    FIND LABEL 
* 
*         ENTRY  (SRQ+C.STPRBN)=EST ORDINAL 
*                (SRQ2+C.STPFW)=BUFFER ADDRESS
* 
*         EXIT   (A).EQ. 0 IF GOOD LABEL FOUND
*                (A).GT. 0 CODE AND STATUS RETURNED 
*                (A) = -0 LABEL NOT FOUND 
*                (SRQ+0)=RB NUMBER OF LABEL 
* 
*         USES   T0,T1,T2,T3,T4.
* 
*         CALLS  WRL,R.RAFL.
  
FLB8      AOM    FLBA 
          SBN    10          CANT HANG SYSTEM BECAUSE OF BAD EQUIPEMT 
          MJN    FLB1        IF NOT LOST I/L
          LDN    LOSTIL 
  
 FLB      SUBR
          LDN    0           INITIALIZE BROKEN CONNECT COUNT
          STM    FLBA 
FLB1      LDN    1
          STM    SRQ+0       STARTING RB
FLB2      LDN    0
          STM    SSQPRU 
FLB3      LDM    SRQ2+C.STPFW 
          ADK    CHECKSUM 
          STD    T4          SAVE CHECKSUM ADDRESS
          LDN    O.RDP       READ ORDER CODE
          RJM    WRL         READ LABEL 
          ZJN  FLBX          IF GOOD LABEL FOUND
          ADN    2
          ZJN    FLB5              IF BAD CHECKSUM
          SBN    LOSTIL+2 
          ZJN    FLB8        IF LOST I/L
          ADN    LOSTIL-22B  CHECK FOR IDLE DEVICE
          NJN    FLB5        IF NOT IDLE
          LDN    22B
          JMP    FLBX 
  
FLB5      LDM    R.FAF
          ZJN    FLB2        IF NOT SET 
          RJM    R.RAFL 
FLB6      AOM    SSQPRU      INCREMENT PRU NUMBER 
          SBM    RBSIZE      COMPARE WITH LIMIT 
          MJN    FLB3        IF WITHIN LIMIT
          AOM    SRQ+0       ADVANCE RB 
          SBN    N.LBRBLM 
          PJN    FLB7        IF LABEL SCAN COMPLETE 
          LJM    FLB2 
  
FLB7      LCN    0           LABEL NOT FOUND
          JMP    FLBX 
  
  
 RBSIZE   DATA   1           USE AS DEFAULT 
 FLBA     CON    0
 WRL      SPACE  4,10 
**        WRL    WRITE/READ LABEL PRU 
* 
*         ENTRY  (A)=O.RDP,READ LABEL 
*                (A)=O.WRP,WRITE LABEL
* 
*         EXIT   (A) = 0 , IF O.K.
*                (A) = CODE AND STATUS RETURNED 
*                (A) = -1 LABEL NOT  *DEV1* 
*                (A) = -2 CHECKSUM ERROR IN LABEL 
* 
*         USES   NONE.
* 
*         CALLS  SSQ,CLS,IOC,R.WRITEP,R.READP.
  
 WRL      SUBR
          RJM    SSQ         SETUP STACK REQUEST
          LDM    SRQ+C.STO   ORDER CODE 
          ADC    -4000B-O.RDP 
          SCN    STIL        IGNORE THE S.R INTERLOCK BIT 
          ZJN    WRL1        IF READING 
  
          LDM    SRQ2+C.STPFW  BUFFER ADDRESS 
          ADK    CHECKSUM 
          STD    T4                ADDRESS OF CHECKSUM WORD 
          ADK    10000B-CHECKSUM   BUFFER ADDRESS + WRITE FLAG
          RJM    CLS         CHECK LABEL
          MJN    WRLX        IF BAD LABEL 
          LDC    SRQ
          RJM    R.WRITEP    WRITE LABEL
          RJM    IOC         I/O CHECK
 WRL1A    BSS    0
          JMP    WRLX        EXIT WITH (A) SET
  
 WRL1     LDC    SRQ
          RJM    R.READP     READ LABEL 
          RJM    IOC         I/O CHECK
          NJN  WRL1A         IF IO ERROR
          LDM    SRQ2+C.STPFW 
          RJM    CLS         CHECK LABEL
          JMP    WRLX        EXIT WITH (A) SET
 CLS      SPACE  4,10 
**        CLS    CHECK LABEL AND COMPUT CHECKSUM
* 
*         ENTRY  (A)=FLAG+(BUFFER ADDRESS)
*                   FLAG=00000,READ 
*                   FLAG=10000,WRITE
*         (T4) = LOCATION FOR CHECKSUM
*                BUFF+131B FOR TYPE 2 LABEL 
* 
*         EXIT   (A)=+ ,IF LABEL OK 
*                (A) = -1  IF LABEL NOT *DEV1* OR IS 7000 LABEL 
*                (A)=-2,IF CHECKSUM ERROR ON READ 
* 
*         USES   T0,T1,T2,T3. 
* 
*         CALLS  NONE.
  
 CLS1     LCN    1           NOT *DEV1* 
  
 CLS      SUBR
          STD    T1          BUFFER ADDRESS 
          ADC    500B 
          STD    T3          BUFFER LIMIT 
          SHN    -12D 
          STD    D.Z0        * WATHH OUT, DESTROYED BY CRM,CWM,IAM,OAM
          LDI    T4          OLD CHECKSUM 
          STM    CLSA 
          LDI    T1 
          ADC    -2RDE
          NJN    CLS1        IF NOT *DE*
          LDM    1,T1 
          ADC    -2RV1
          NJN    CLS1        IF NOT *DEV1*
          LDM    2,T1              GET LABEL TYPE FIELD 
          SHN    -6 
          ZJN    CLS1              IF 7000 LABEL
          LDN    0
          STD    T2          NEW CHECKSUM 
          STI    T4          OLD CHECKSUM 
  
 CLS2     LDI    T1          COMPUT CHECKSUM
          RAD    T2 
          SHN    -12D 
          RAD    T2 
          AOD    T1          ADVANCE BYTE ADDRESS 
          SBD    T3          CHECK FOR LIMIT
          MJN    CLS2        IF NOT DONE
          LDD    D.Z0        * WATCH OUT, DESTROYED BY CRM,CWM,IAM,OAM
          ZJN    CLS3        IF READ CHECK
          LDD    T2                GET CHECKSUM 
          LMC    7777B
          ZJN    CLS2.3            IF CHECKSUM=7777B
  
          LDD    T2 
 CLS2.3   STI    T4                STORE NEW CHECKSUM 
CLS2R     JMP  CLSX 
  
 CLS3     LDC    *-*         OLD CHECKSUM 
 CLSA     EQU    *-1
          STI    T4 
          SBD    T2          NEW CHECKSUM 
          ZJN  CLS2R
          LCN    2           * CHECKSUM ERR * 
          JMP    CLSX 
 SSQ      SPACE  4,10 
**        SSQ    SET-UP STACK REQUEST FOR LABEL I/O 
* 
*         ENTRY  (A)=ORDER CODE 
* 
*         EXIT   (SRQ)= STACK REQUEST FOR LABEL I/O.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
 SSQ      SUBR
          ADC    4000B       DIRECT BIT 
          ADC    0           ***   INSTRUCTION MODIFIED BY CALLER *** 
 FLB0     EQU    *-1         SET TO 40B TO GET IL SR
          STM    SRQ+C.STO   ORDER CODE 
          LDC    0           *** INSTRUCTION MODIFIED *** 
*                            IN ORDER TO ALLOW FOR EASY TRANSITION
*                            BETWEEN SYSTEMS THAT EXPECT THE LABEL
*                            TO BE ON THE FIRST PRU AND THOSE THAT
*                            DO NOT. TO CHANGE TO NEW SYSTEM STORE
*                            PRU NUMBER IN SSQPRU 
SSQPRU    EQU    *-1
          STM    SRQ+C.STPPRU 
          LDBC   (S.STFNTP,S.STFETP,S.STFXCT) 
          SHN    6
          STM    SRQ2+3 
          LDM    SRQ2+C.STPFW START OF BUFFER 
          ADC    500B-1 
          STM    SRQ2+C.STPLW  LAST WORD OF BUFFER
          JMP    SSQX 
 IOC      SPACE  4
**        IOC    I/O CHECK
* 
*         EXIT   (A) = CODE AND STATUS
  
 IOC      SUBR
          LDD    D.T3+C.RWPPST
          LPN    3                 GET UPPER 2 BITS OF CODE AND STATUS
          SHN    12 
          ADD    D.T3+C.RWPPST+1
          SHN    -9D               BITS 9-13 = CS 
          JMP    IOCX 
  
 CHECKSUM EQU    W.LBCKS*5+C.LBCKS
  
**        STACK REQUEST 
  
 SRQ      BSSZ   10D
 SRQ2     EQU    SRQ+5
  
          ENDX
