1MR 
          IDENT  1MR,/MRP/MRP 
          PERIPH
          BASE   MIXED
          SST 
*COMMENT  1MR - MACHINE RECOVERY PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  1MR - MACHINE RECOVERY PROCESSOR.
          SPACE  4
***       1MR - MACHINE RECOVERY PROCESSOR. 
*         R. J. PRIEVE       75/02/14.
*         P. D. HAAS.        87/04/10.
          SPACE  4
***       1MR PROCESSES FUNCTION REQUESTS FROM *MREC*, THE
*         MACHINE RECOVERY UTILITY. 
* 
*         FUNCTIONS PROCESSED ARE THE FOLLOWING.
* 
*         FUNCTION 0 - RETRIEVE DISPLAY INFORMATION.
*         FUNCTION 1 - PROCESS DAT, FAT, MRT,S, SYSTEM SECTORS, 
*         AND UNIT AND/OR CONTROLLER RESERVE SITUATIONS.
*         FUNCTION 2 - UPDATE MST ENTRIES IN CM FOR INDEPENDENT 
*         SHARED DEVICES. 
*         FUNCTION 3 - CLEAR DEVICE INTERLOCKS. 
          SPACE  4
***       ENTRY CONDITIONS. 
* 
*T,   IR  18/1MR,18/0,6/FN,18/PARM
* 
*         FN     FUNCTION NUMBER. 
*         PARM   PARAMETER. 
* 
*         PARAMETERS ARE DOCUMENTED IN HEADER INFORMATION 
*         OF EACH FUNCTION PROCESSOR. 
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         * INCORRECT 1MR FUNCTION.*
* 
*         * 1MR ERROR FLAG TERMINATION.* - ERROR FLAG WAS SET AT
*         MREC,S CONTROL POINT. 
* 
*         * SSER, EQXXX, TKYYYY.* - UNRECOVERED ERROR OCCURRED WHEN 
*         ATTEMPTING TO READ OR WRITE THE SYSTEM SECTOR ON EQXXX, 
*         TRACK YYYY.  THE SECTOR IS NOT PROCESSED.  PROCESSING 
*         CONTINUES.  THIS MESSAGE IS ALSO ISSUED TO THE ERRLOG.
* 
*         * EQXXX, MRT PROCESSED BUT NOT REWRITTEN.* - UNRECOVERED
*         WRITE ERROR OCCURRED WHEN ATTEMPTING TO ZERO OUT THE MRT
*         FOR EQXXX.  PROCESSING CONTINUES. 
* 
*         * EQXXX, TKYYYY, INCORRECT LOCAL FILE.* - MRT BIT WAS FOUND 
*         SET FOR TRACK YYYY ON EQXXX, BUT THE TRACK WAS NOT THE FIRST
*         TRACK OF A LOCAL FILE.  THE MRT BIT WAS CLEARED BUT THE 
*         TRACK WAS NOT DROPPED.
* 
*         * EQXXX, DAF INTERLOCKS NOT CLEARED.* - INTERLOCKS IN THE 
*         SYSTEM SECTORS OF DIRECT ACCESS FILES ON EQXXX WERE NOT 
*         CLEARED, EITHER BECAUSE OF MASS STORAGE ERRORS OR 
*         BECAUSE A PF CATALOG SIZE ERROR WAS DETECTED. 
* 
*         * RECOVERING PF.EQXXX, TRK YYYY.* - INFORMATIVE MESSAGE ISSUED
*         AT CONTROL POINT WHEN PRESERVED FILES ARE BEING PROCESSED 
*         ON EQXXX. 
* 
*         * EQXXX, UNYY, CHECKING RESERVE.* - INFORMATIVE MESSAGE 
*         ISSUED TO B-DISPLAY WHILE CONTROLLER AND UNIT RESERVES
*         ARE BEING PROCESSED.  IN THE CASE OF MULTI-UNIT 
*         DEVICES, YY IS THE PHYSICAL UNIT NUMBER.
* 
*         * EQXXX, CLEARING LABEL SECTOR INTERLOCKS.* - INFORMATIVE 
*         MESSAGE ISSUED TO B-DISPLAY WHILE THE RMS COPY OF THE 
*         MST IS BEING PROCESSED (SHARED RMS SYSTEM ONLY).
* 
*         * EQXXX, CHYY, CONTROLLER RESERVED.* - INFORMATIVE MESSAGE
*         ISSUED TO B-DISPLAY INDICATING THAT THE HARDWARE CONTROLLER 
*         RESERVE IS HELD BY THE DOWN MAINFRAME FOR THE SPECIFIED 
*         CHANNEL/DEVICE.  TO CLEAR THE RESERVE, THE OPERATOR SHOULD
*         HIT THE DEADSTART BUTTON.  IF THE CONTROLLER IS TO BE 
*         IGNORED BY THIS MAINFRAME, JUST ENTER THE *GO,JSN* COMMAND. 
* 
*         * EQXXX, UNYY, UNIT RESERVED.* - INFORMATIVE MESSAGE ISSUED 
*         TO B-DISPLAY INDICATING THAT THE HARDWARE UNIT RESERVE IS 
*         HELD BY THE DOWN MAINFRAME FOR THE SPECIFIED UNIT.  IF THIS 
*         DEVICE IS TO BE IGNORED BY THIS MAINFRAME, THE OPERATOR 
*         SHOULD JUST ENTER *GO,JSN*.  OTHERWISE, THE OPERATOR SHOULD 
*         CLEAR THE UNIT RESERVE (SEE DOCUMENTATION IN *MREC*) ON 
*         THE UNIT TO CONTINUE PROCESSING.
* 
*         * INTERLOCKING IQFT, EQXXX.* - INDICATES *1MR* IS WAITING 
*         FOR THE INTERLOCK ON THE *IQFT* TRACK.
          SPACE  4
*CALL     COMPMAC 
*CALL     COMSCPS 
*CALL     COMSIOQ 
*CALL     COMSJIO 
          QUAL   LSD
*CALL     COMSLSD 
          QUAL   *
 N4SS     EQU    /LSD/N4SS
 DISS     EQU    /LSD/DISS
 CKSS     EQU    /LSD/CKSS
 DKSS     EQU    /LSD/DKSS
          QUAL   MMF
          LIST   X
*CALL     COMSMMF 
          LIST   *
          QUAL   *
 MISD     EQU    /MMF/MISD
 MMPF     EQU    /MMF/MMPF
 MXMF     EQU    /MMF/MXMF
          QUAL   MRT
          LIST   X
*CALL     COMSMRT 
          LIST   *
          QUAL   *
*CALL     COMSMSP 
*CALL     COMSMST 
*CALL     COMSPFM 
*CALL     COMSPIM 
*CALL     COMSSSD 
*CALL     COMSSSE 
*CALL     COMSWEI 
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 BUFS     EQU    BFMS-502    SCRATCH BUFFER 
 QBUF     EQU    BUFS-502    *IQFT* BUFFER
 BUFD     EQU    QBUF-5*2    *DAT* BUFFER 
          SPACE  4
****      DIRECT LOCATION ASSIGNMENTS.
  
  
          ORG    16 
 EF       BSS    1           ERROR FLAG 
 SC       BSS    1           SCRATCH
 CN       BSS    5           CM BUFFER
 DA       BSS    2           DAT TRACK ADDRESS
 DF       BSS    1           DIRECT ACCESS FILE COUNT 
 DT       BSS    1           DAT/FAT TRACK
 ET       BSS    2           ENVIRONMENT TABLE ADDRESS
 EQ       BSS    1           EQUIPMENT BEING PROCESSED
 ID       BSS    1           MACHINE ID OF THIS MACHINE 
 LK       BSS    1           LINK DEVICE EST ORDINAL
 MD       BSS    1           MACHINE INDEX OF DOWNED MACHINE
 MI       BSS    1           MID OF DOWNED MACHINE
 MK       BSS    1           MACHINE MASK OF DOWNED MACHINE 
 NT       BSS    1           NUMBER OF TRACKS ON CURRENT DEVICE 
 FT       BSS    1           FILE TYPE
 PF       BSS    1           PRESERVED FILE TRACK INTERLOCK STATUS
 TC       BSS    1           TRACK COUNT
 BY       BSS    1           BYTE COUNT 
 WB       EQU    NT - BY     WORD BUFFER (5 LOCATIONS)
 BI       BSS    1           BIT COUNT
 AD       BSS    1           ADDRESS OF CURRENT MRT BYTE
  
          ORG    57 
  
 SD       BSS    1           TYPE OF SHARED DEVICE (FUNCTION 2) 
*                            0 = EXTENDED MEMORY MMF DEVICE.
*                            1 = INDEPENDENT SHARED DEVICE (ISD). 
 TW       BSS    1           CONSTANT 2 
 SX       BSS    1           CONSTANT 6 
 RE       BSS    1           READ EXTENDED MEMORY SUBFUNCTION * 1000
 WE       BSS    1           WRITE EXTENDED MEMORY SUBFUNCTION * 1000 
 CT       BSS    1           CURRENT TRACK
 QF       BSS    1           FIRST TRACK OF *IQFT*
 QT       BSS    1           CURRENT TRACK OF *IQFT*
 QS       BSS    1           CURRENT SECTOR OF *IQFT* 
****
          TITLE  MAIN ROUTINE.
  
  
**        MAIN ROUTINE. 
  
  
          QUAL   MRP
          ORG    PPFW 
  
 MRP      RJM    PRS         PRESET 
 MRPA     EQU    *-1
  
 DROP     RJM    CFI         CLEAR FLAG REGISTER INTERLOCKS 
 MRP1     LDN    1           SET COMPLETE FLAG FOR *MREC* 
          STD    CN+4 
          LDD    RA 
          SHN    6
          ADC    /MRT/RCLW
          CWD    CN 
 MRP2     MONITOR  DPPM      DROP PP
          UJN    ABT1        EXIT TO PP RESIDENT
  
 ERR      LDC    =C* 1MR ERROR FLAG TERMINATION.* 
          RJM    DFM
          LDC    WDSX        RESET ERROR RETURN FROM *WDS*
          STM    WDSA 
          RJM    TQF         TERMINATE *IQFT* 
          RJM    CFI         CLEAR FLAG REGISTER INTERLOCKS 
          UJN    MRP2        DROP PP
          SPACE  4
**        ABT - ISSUE MESSAGE AND ABORT.
* 
*         ENTRY  (A) = MESSAGE ADDRESS. 
  
  
 ABT      RJM    DFM         ISSUE MESSAGE
          RJM    CFI         CLEAR FLAG REGISTER INTERLOCKS 
          MONITOR ABTM
 ABT1     LJM    PPR         EXIT TO PP RESIDENT
          SPACE  4
**        COMMON DECKS. 
  
  
          QUAL
*CALL     COMPC2D 
*CALL     COMPCEA 
*CALL     COMPCKP 
*CALL     COMPRSS 
*CALL     COMPSSE 
  
          QUAL   MRP
*CALL     COMPWEI 
*CALL     COMPWSS 
 WDS      SPACE  4,10 
**        WDS - WRITE MASS STORAGE. 
* 
*         ENTRY  (A) = SAME AS ENTRY TO DRIVER. 
*                (T5 - T7) = MASS STORAGE PARAMETERS. 
* 
*         EXIT   (A) = 0 IF NO WRITE ERRORS.
* 
*         CALLS  WDS. 
  
  
 WDS1     LDN    0           INDICATE SUCCESSFUL WRITE
  
 WDS      SUBR               ENTRY/EXIT 
          RJM    //WDS
          PJN    WDS1        IF WRITE COMPLETED 
          SHN    21-12
          SHN    0-21 
          NJN    WDSX        IF NON-RECOVERABLE ERROR 
          LCN    10 
          LJM    WDSX        ERROR RETURN 
 WDSA     EQU    *-1
          TITLE  FUNCTION 1 - PROCESS DAT, FAT, MRT-S.
 PMT      SPACE  4
**        PMT - PROCESS DAT, FAT, MRT,S.  (FUNCTION 1)
* 
*         ENTRY  (IR+3 - IR+4) = ADDR.
* 
*         ADDR   ADDRESS OF TABLE OF DEVICES TO RECOVER.
* 
*         CALLS  CAA, CLU, C2D, DAT, DFM, MRT, PDT, PFB, RMI, SDM,
*                SDP, SFR, *2MS*. 
* 
*         MACROS EXECUTE, PAUSE.
  
  
 PMT      SUBR               ENTRY/EXIT 
          EXECUTE  2MS       LOAD HARDWARE RESERVE ROUTINES 
          LDD    LK 
          ZJN    PMT1        IF NOT EXTENDED MEMORY MMF 
          LDN    /MMF/DATI
          RJM    SFR         SET DAT INTERLOCK
          RJM    CLU         CLEAR UTILITY / DEVICE INTERLOCKS
  
*         PROCESS DAT, MRT-S, SYSTEM SECTORS. 
  
 PMT1     LCN    0           PRESET TABLE INDEX 
          STD    SC 
 PMT2     PAUSE  NE 
          AOD    SC          READ TABLE ENTRY 
          RJM    CAA
          ADD    SC 
          CRD    CM 
          LDD    CM+4        SET EST ORDINAL
          STD    EQ 
          STD    T5 
          NJN    PMT3        IF NOT END OF DEVICES TO RECOVER 
          LJM    PMTX        RETURN 
  
 PMT3     LDD    CM          SET POSSIBLE IGNORE DEVICE 
          STM    PMTA 
          LDD    CM+3        SET TYPE OF SHARED DEVICE
          STD    SD 
          ZJN    PMT4        IF NOT ISD 
          LDD    T5 
          STD    LK 
          RJM    SDM         CHECK IF DEVICE SHARED TO DOWN MF
          NJN    PMT2        IF NOT SHARED TO DOWN MF 
          RJM    RMI         RELEASE MST INTERLOCKS 
          UJN    PMT5        PROCESS MRT
  
 PMT4     RJM    PDT         PROCESS DAT FOR DEVICE 
          ZJN    PMT7        IF NO PROCESSING FOR DEVICE
 PMT5     RJM    SDP         SET DEVICE PARAMETERS
          STM    PMTB 
          RJM    MRT         PROCESS MRT FOR DEVICE 
          LDC    0
 PMTA     EQU    *-1
          LMN    /MRT/IGN 
          ZJN    PMT6        IF IGNORE DEVICE 
          LDC    **          CHECK PFC SIZE 
 PMTB     EQU    *-1
          ZJN    PMT8        IF 8-WORD PF CATALOGS
          LDD    DF 
          ZJN    PMT6        IF NO DAF-S
          RJM    PFB         PROCESS DAF SYSTEM SECTORS 
          NJN    PMT8        IF ALL FILES NOT PROCESSED 
 PMT6     LDD    SD 
          NJN    PMT7        IF ISD 
          LDD    WE          WRITE DAT ENTRY WITH ACCESS CLEARED
          STD    T3 
          LDD    MA 
          CWM    BUFD,TW     STORE DAT ENTRY IN MESSAGE BUFFER
          LDD    EQ          SET EQUIPMENT
          RJM    DAT         WRITE DAT ENTRY
 PMT7     LJM    PMT2        LOOP FOR NEXT DEVICE 
  
 PMT8     LDD    EQ          CONVERT UPPER DIGIT OF EST ORDINAL 
          SHN    -6 
          ADC    2RQ0 
          STM    PMTC+1 
          LDD    EQ          CONVERT LOWER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    PMTC+2 
          LDC    PMTC        * EQXXX, DAF INTERLOCKS NOT CLEARED.*
          RJM    DFM
          UJN    PMT7        LOOP FOR NEXT DEVICE 
  
  
 PMTC     DATA   C* EQXXX, DAF INTERLOCKS NOT CLEARED.* 
          TITLE  FUNCTION 4 - PROCESS RESERVES AND BAT-S. 
 PRB      SPACE  4,10 
**        PRB - PROCESS RESERVES AND BAT-S.  (FUNCTION 4) 
* 
*         ENTRY  (IR+3 - IR+4) = ADDR.
* 
*         ADDR   ADDRESS OF TABLE OF DEVICES TO RECOVER.
* 
*         CALLS  ECS, RES, *2MS*. 
* 
*         MACROS EXECUTE. 
  
  
 PRB      SUBR               ENTRY/EXIT 
          LDD    LK 
          ZJN    PRB1        IF NOT EXTENDED MEMORY MMF 
  
*         DISABLE LEVEL 3 RECOVERY OF DOWNED MACHINE. 
  
          LDN    ZERL        BUILD MMFL WORD FOR DOWNED MACHINE 
          CRD    CM 
          LDD    MI          SET MID OF DOWNED MACHINE
          STD    CM 
          LDD    MD          SET MACHINE INDEX OF DOWNED MACHINE
          STD    CM+4 
          LDD    MA          SET CM BUFFER ADDRESS
          CWD    CM 
          LDD    ET+1        SET EXTENDED MEMORY ADDRESS
          ADD    MD          ADD INDEX INTO CORRECT ENTRY 
          SBN    1
          STD    CM+4 
          SHN    -14
          ADD    ET 
          ADD    WE 
          STD    CM+3 
          LDN    1-1         WRITE EXTENDED MEMORY
          RJM    ECS
  
*         PROCESS CONTROLLER AND UNIT RESERVES. 
  
 PRB1     EXECUTE  2MS       LOAD HARDWARE RESERVE ROUTINES 
          RJM    RES         PROCESS BAT-S AND HARDWARE RESERVES
          UJP    PRBX        RETURN 
          TITLE  SUBROUTINES. 
 CAA      SPACE  4
**        CAA - CALCULATE ABSOLUTE ADDRESS. 
* 
*         ENTRY  (IR+3 - IR+4) = RELATIVE ADDRESS.
* 
*         EXIT   (A) = ABSOLUTE ADDRESS.
  
  
 CAA      SUBR               ENTRY/EXIT 
          LDD    IR+3 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          UJN    CAAX        RETURN 
 CAT      SPACE  4,10 
**        CAT - CALCULATE ADDRESS OF TRT. 
* 
*         ENTRY  (A) = ADDRESS OF WORD *TRLL* IN MST. 
* 
*         EXIT   (A) = FWA OF TRT.
* 
*         USES   CM - CM+4. 
  
  
 CAT      SUBR               ENTRY/EXIT 
          CRD    CM          GET FWA OF TRT 
          LDD    CM+3 
          LPN    77 
          SHN    14 
          LMD    CM+4 
          UJN    CATX        RETURN 
 CAM      SPACE  4
**        CAM - CHECK ACCESS MODES FOR DIRECT ACCESS FILE.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK.
*                (BFMS) = SYSTEM SECTOR.
* 
*         EXIT   (A) = (PF) = 0 IF FILE PURGED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  RRS. 
* 
*         MACROS ENDMS, MONITOR.
  
  
 CAM1     LDN    1           SET FILE NOT PURGED
  
 CAM      SUBR               ENTRY/EXIT 
          LDM    CASS        CHECK PURGE BIT
          SHN    21-5 
          PJN    CAM1        IF PURGE BIT NOT SET 
          SHN    -21+5+22    CHECK IF ACTIVE USERS
          LPN    32 
          ADM    UCSS+1 
          ADM    UCSS+2 
          ADM    UCSS+3 
          ADM    UCSS+4 
          NJN    CAMX        IF ACTIVE USERS
          RJM    RRS
          ENDMS 
          LDD    T6          RELEASE FILE SPACE 
          STD    CM+2 
          LDD    T5 
          STD    CM+1 
          MONITOR DTKM
*         LDN    0           CLEAR TRACK INTERLOCK STATUS 
          STD    PF 
          UJN    CAMX        RETURN 
 CFI      SPACE  4,10 
**        CFI - CLEAR FLAG REGISTER INTERLOCKS HELD BY *1MR*. 
* 
*         ENTRY  (CFIA) = LINK DEVICE EST ORDINAL, IF ECS MMF.
*                       = 0, IF ISD MMF.
* 
*         USES   T2.
* 
*         CALLS  CFR, SCI.
  
  
 CFI      SUBR               ENTRY/EXIT 
          RJM    SCI         CLEAR *CMS* INTERLOCK
          LDC    **          CHECK TYPE OF MMF OPERATION
 CFIA     EQU    *-1         (LINK DEVICE EST ORDINAL, IF ECS MMF)
          ZJN    CFIX        IF NOT EXTENDED MEMORY MMF 
          LDC    TFRB-3      CLEAR FLAG REGISTER INTERLOCKS 
          STD    T2 
 CFI1     LDN    3
          RAD    T2 
          LDI    T2 
          ZJN    CFIX        IF END OF FLAG BITS
          LPN    40 
          ZJN    CFI1        IF NOT SET 
          LMI    T2 
          RJM    CFR
          UJN    CFI1 
  
 CQF      SPACE  4,15 
**        CQF - CHECK QUEUE FILE. 
* 
*         ENTRY  (MI) = ID OF DOWN MACHINE. 
*                (QF) = FIRST TRACK OF *IQFT* IF INITIALIZED. 
*                (T4) = CHANNEL (RESERVED). 
*                (T5) = EST ORDINAL.
*                (CT) = (T6) = FIRST TRACK OF PRESERVED FILE. 
*                (BFMS) = PRESERVED FILE SYSTEM SECTOR. 
* 
*         EXIT   (A) = 0 IF NOT QUEUE FILE. 
*                (FT) = FILE TYPE.
* 
*         USES   T1, T2, T3.
* 
*         CALLS  IQF, WQF, WSS. 
* 
*         MACROS ENDMS, FILEREC, SETMS. 
  
  
 CQF6     LDN    0           INDICATE NON-QUEUE FILE
  
 CQF      SUBR               ENTRY/EXIT 
          LDM    FNSS+4      EXTRACT FILE TYPE
          SHN    -6 
          STD    FT 
          LDN    RDATL       SET LENGTH OF QUEUE FILE TABLE 
          STD    T3 
 CQF1     SOD    T3          DECREMENT INDEX
          MJN    CQF6        IF END OF TABLE
          LDM    RDAT,T3
          LMD    FT 
          NJN    CQF1        IF NOT MATCHING FILE TYPE
          LDM    FGSS 
          LPN    2
          ZJN    CQF2        IF INACTIVE QUEUE FILE 
          LDM    RMSS 
          LMD    MI 
          NJN    CQF6        IF NOT ACTIVE QUEUE FILE ON DOWN MACHINE 
          LCN    2           SET QUEUE FILE INACTIVE
          RAM    FGSS 
          RJM    WSS         REWRITE SYSTEM SECTOR
 CQF2     LDD    QF 
          NJN    CQF3        IF QUEUE FILE PROCESSING INITIATED 
          ENDMS 
          RJM    IQF         INITIALIZE *IQFT*
 CQF3     LDM    RMSS        SET MACHINE ID 
          STM    FMSS+4 
          LDM    FLSS        SET FILE LENGTH
          STM    CDSS 
          LDM    FLSS+1 
          STM    CDSS+1 
          LDC    IOSS        SYSTEM SECTOR ADDRESS OF QFT ENTRY 
          STD    T1 
          LDC    QBUF+2      SET BUFFER ADDRESS 
 CQFC     EQU    *-1
          STD    T2 
          ADN    5*QFTE      END OF QFT ENTRY 
          STD    T3 
          ADN    5*10-5*QFTE END OF MAXIMUM SIZE QFT ENTRY
          STM    CQFD 
  
*         MOVE IQFT ENTRY TO BUFFER.
  
 CQF4     LDI    T1          MOVE QFT ENTRY 
          STI    T2 
          AOD    T1          ADVANCE BUFFER ADDRESSES 
          AOD    T2 
          LMD    T3 
          NJN    CQF4        IF NOT END OF QFT ENTRY
          LDN    5
          STD    T1 
          LDD    MA          MOVE REMAINDER OF IQFT ENTRY 
          CWM    CDSS,ON
          CWM    FMSS,ON
          CWM    FDSS,ON
          CWM    ACSS,ON
          CWM    FOSS,ON
          SBN    5
          CRM    QBUF+2+5*10,T1 
 CQFD     EQU    *-1
          LDC    5*QFEWL     ADVANCE BUFFER ADDRESS 
          RAM    CQFC 
          LDN    QFEWL       ADVANCE SECTOR LENGTH
          RAM    QBUF+1 
          SHN    -6 
          ZJN    CQF5        IF NOT FULL SECTOR 
          RJM    WQF         WRITE *IQFT* SECTOR
          ZJN    CQF5        IF SECTOR WRITTEN
          LJM    IQF2        END OF SPACE ON *IQFT* 
  
 CQF5     LDD    CT          RESET CURRENT TRACK
          STD    T6 
          LJM    CQFX        RETURN 
  
  
          FILEREC 
 DAP      SPACE  4,10 
**        DAP - DELAY AND PAUSE.
* 
*         EXIT   (A) = 0 IF *ODET* OR ERROR .GE. *SPET* SET.
  
  
 DAP      SUBR               ENTRY/EXIT 
          DELAY 
          PAUSE 
          LDD    CM+1 
          SBN    ODET 
          ZJN    DAPX        IF OPERATOR DROP 
          SBN    SPET-ODET
          SHN    -21         (A) = 1 IF NO ERROR *SPET* OR ABOVE
          UJN    DAPX        RETURN 
 DPS      SPACE  4
**        DPS - DETERMINE IF PRESERVED FILE AND RESERVATION BIT 
*         IS SET FOR TRACK SPECIFIED. 
* 
*         ENTRY  (T6) = TRACK.
* 
*         EXIT   (A, BIT 21) = RESERVATION BIT. 
*                (A, BIT 7) = PRESERVED FILE BIT. 
*                (A, BIT 3) = TRACK INTERLOCK BIT.
* 
*         USES   CM - CM+4. 
  
  
 DPS      SUBR               ENTRY/EXIT 
          LDD    T6          READ TRT WORD
          SHN    -2 
 DPSA     ADC    TRTS 
          CRD    CM 
          LDD    T6          SET SHIFT COUNT
          LPN    3
          ADC    SHNI+16
          STM    DPSB 
          LDD    CM+4 
 DPSB     SHN    16 
          UJN    DPSX        RETURN 
 IQF      SPACE  4,15 
**        IQF - INITIALIZE *IQFT*.
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (QF) = (QT) = FIRST TRACK OF *IQFT*. 
*                (QS) = FIRST SECTOR OF *IQFT*. 
* 
*         USES   T3, T6.
* 
*         CALLS  RSS, WSS.
* 
*         MACROS SETMS. 
  
  
 IQF      SUBR               ENTRY/EXIT 
 IQF2     LDM    PFBA 
          STD    T6          SET *IQFT* TRACK 
          STD    QF 
          STD    QT 
          LDC    500
          STD    T3 
 IQF4     LDN    0           CLEAR SYSTEM SECTOR BUFFER 
          STM    BFMS+1,T3
          STM    QBUF+1,T3   CLEAR IQFT BUFFER
          SOD    T3 
          NJN    IQF4        LOOP TO START OF BUFFER
          STM    QBUF+1      CLEAR SECTOR WORD COUNT
          LDD    MA          MOVE FILE NAME TO BUFFER 
          CWM    IQFA,ON
          SBN    1
          CRM    FNSS,ON
          SETMS  POSITION 
          RJM    WSS         WRITE *IQFT* SYSTEM SECTOR 
          LDN    FSMS        SET FIRST *IQF* SECTOR 
          STD    QS 
          LDD    CT          RESTORE CURRENT TRACK
          STD    T6 
          SETMS  POSITION 
*         LDN    0           REREAD QUEUE FILE SYSTEM SECTOR
          RJM    RSS
          LJM    IQFX        RETURN 
  
  
 IQFA     VFD    42/0LQUEUES,6/1,6/SYFT,6/0 
 MRM      SPACE  4
**        MRM - ISSUE MRT ERROR MESSAGE.
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE.
*                (T6) = TRACK.
*                (EQ) = EST ORDINAL TO BE INSERTED IN MESSAGE.
* 
*         USES   T1.
* 
*         CALLS  C2D, DFM.
  
  
 MRM      SUBR               ENTRY/EXIT 
          STD    T1          SAVE MESSAGE ADDRESS 
          STM    MRMA 
          LDD    EQ          CONVERT UPPER DIGIT OF EST ORDINAL 
          SHN    -6 
          ADC    2RQ0 
          STM    1,T1 
          LDD    EQ          CONVERT LOWER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    2,T1 
          LDD    T1 
          LMC    MRTC 
          ZJN    MRM1        IF NO TRACK IN MESSAGE 
          LDD    T6          CONVERT TRACK MESSAGE
          RJM    C2D
          STM    6,T1 
          LDD    T6 
          SHN    -6 
          RJM    C2D
          STM    5,T1 
          LDD    T1          ISSUE MESSAGE TO ERRLOG
          LMC    ERLN 
          RJM    DFM
 MRM1     LDC    *           ISSUE MESSAGE TO DAYFILE 
 MRMA     EQU    *-1
          RJM    DFM
          LJM    MRMX        RETURN 
 MRT      SPACE  4
**        MRT - PROCESS MRT.
* 
*         ENTRY  (T6) = MRT TRACK NUMBER. 
*                (NT) = NUMBER OF TRACKS ON DEVICE BEING RECOVERED. 
*                (EQ) = EST ORDINAL BEING PROCESSED.
* 
*         EXIT   TO *MSR* IF LINK DEVICE ERROR. 
* 
*         USES   AD, BY, TC, T5, T6, CM - CM+4. 
* 
*         CALLS  MRM, PTR, RSC, WDS.
* 
*         MACROS ENDMS, MONITOR, SETMS. 
  
  
 MRT8     LDD    MA          RESET MRT TRACK AND SECTOR 
          CWM    MRTB,ON
          SBN    1
          CRD    T3 
          SETMS  IO,(NS,RW) 
          LDC    BUFS        SET BUFFER ADDRESS 
          RJM    WDS         WRITE SECTOR 
          MJN    MRT9        IF ERROR 
          ENDMS 
          UJN    MRTX        RETURN 
  
 MRT9     LDC    MRTC        SET MESSAGE ADDRESS
          RJM    MRM         ISSUE ERROR MESSAGE
  
 MRT      SUBR               ENTRY/EXIT 
          LDD    EQ          UPDATE TRT FOR DEVICE
          STD    CM+1 
          LDN    UTRS 
          STD    CM+3 
          MONITOR  STBM 
*         LDN    0           SET FIRST TRACK
          STD    TC 
          STD    BY 
          LDD    LK          READ MRT SECTOR FROM LINK DEVICE 
          STD    T5 
          LDD    SD 
          ZJN    MRT1        IF NOT ISD 
          LDN    /MMF/MRTL-/MMF/MRST
 MRT1     ADN    /MMF/MRST-1  SET MRT SECTOR
          ADD    MD 
          STD    T7 
          SETMS  IO,NS
          LDC    BUFS+2+4    SET FIRST MRT BYTE TO PROCESS
          STD    AD 
          SBN    2+4         READ MRT SECTOR
          RJM    RSC
          LDD    MA          SAVE MRT TRACK AND SECTOR
          CWD    T3 
          CRM    MRTB,ON
          ENDMS 
          LDD    EQ          SET EST ORDINAL
          STD    T5 
          SETMS  IO,RW
 MRT2     LDI    AD 
          NJN    MRT4        IF BITS SET IN BYTE
 MRT3     SOD    AD 
          LDN    14          INCREMENT TRACKS 
          RAD    TC 
          AOD    BY          INCREMENT BYTE WITHIN WORD 
          LMN    3
          NJN    MRT2        IF NOT DONE WITH CM WORD 
*         LDN    0
          STD    BY          RESET BYTE COUNTER 
          LDN    10 
          RAD    AD 
          LCN    4           ADJUST TRACK COUNT 
          RAD    TC 
          SBD    NT 
          MJN    MRT2        IF MORE TRACKS TO CHECK
          LJM    MRT8 
  
 MRT4     LDN    1           INITIALIZE MASK
          STM    MRTA 
          SHN    13-0        SET TRACK
          ADD    TC 
          STD    T6 
 MRT5     LDI    AD 
          ZJN    MRT3        IF NO MORE TRACK BITS IN MRT BYTE
          LPC    0
 MRTA     EQU    *-1
          ZJN    MRT6        IF TRACK BIT NOT SET 
          LMI    AD          CLEAR TRACK BIT
          STI    AD 
          RJM    PTR         PROCESS TRACK RESERVATION
          MJN    MRT6        IF VALID TRACK ASSIGNMENT
          LDC    MRTD        ISSUE ERROR MESSAGE
          RJM    MRM
 MRT6     AOD    T6          ADVANCE TRACK
          LDM    MRTA 
          RAM    MRTA        ADJUST MASK FOR NEXT MRT BIT 
          SHN    -14
          ZJN    MRT5        IF NOT ZERO MASK 
          LJM    MRT3        SET NEXT MRT BYTE
  
  
 MRTB     BSS    5           TEMPORARY STORAGE
 MRTC     DATA   C* EQXXX, MRT PROCESSED BUT NOT REWRITTEN.*
 MRTD     DATA   C* EQXXX, TKYYYY, INCORRECT LOCAL FILE.* 
 MSR      SPACE  4
**        MSR - RETURN ERROR TO *MREC*. 
* 
*         ENTRY  (A) = ERROR CODE.
* 
*         EXIT   ERROR RETURN WORD RETURNED TO *MREC*.
* 
*         CALLS  CFR. 
  
  
 MSR      STD    T5          SAVE ERROR CODE
          LDN    ZERL 
          CRD    T0 
          LDD    RA          RETURN ERROR WORD TO *MREC*
          SHN    6
          ADC    /MRT/ERRW
          CWD    T1 
 MSR1     LJM    DROP        DROP PP
 PFB      SPACE  4
**        PFB - CLEAN UP DIRECT ACCESS FILE SYSTEM SECTORS. 
* 
*         ENTRY  (EQ) = EST ORDINAL TO PROCESS. 
*                (NT) = NUMBER OF TRACKS ON DEVICE. 
* 
*         EXIT   (A) = 0 IF DEVICE CLEANUP COMPLETED. 
* 
*         USES   BY, CT, NT, PF, TC, T2, T5, T6, T7, CM - CM+4. 
* 
*         CALLS  CAM, CQF, C2D, DPS, FAT, PFA, RRS, RSS, SSE, STB,
*                STI, TQF, USC, WDS.
* 
*         MACROS ENDMS, PAUSE, SETMS. 
  
  
 PFB      SUBR               ENTRY/EXIT 
          LDD    EQ          SET EST ORDINAL
          STD    T5 
          SHN    -6          CONVERT UPPER DIGIT OF EST ORDINAL 
          ADC    2RQ0 
          STM    PFBB+10
          STM    PFBC+13
          LDD    EQ          CONVERT LOWER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    PFBB+11
          STM    PFBC+14
          SETMS  IO,(NS,RW) 
          LDN    0
          STD    BY          PRESET FILES PROCESSED COUNT 
          STD    EF 
          LDD    CM+4        GET *IQFT* POINTER FROM MST
          STM    PFBD 
 PFB0     SHN    3
          ADN    ACGL 
          CRD    CM 
          LDD    CM+3        SET *IQFT* TRACK 
          STM    PFBA 
          STD    T6          INTERLOCK *IQFT* 
          RJM    STI
          ZJN    PFB1        IF TRACK INTERLOCKED 
          LDD    CP 
          ADN    MS2W        STORE WAITING MESSAGE
          CWM    PFBC,TR
          DELAY  10*100D     DELAY 100 MS 
          PAUSE  NE 
          LDC    **          LOAD MST ADDRESS 
 PFBD     EQU    *-1
          UJN    PFB0        LOOP ON INTERLOCK
  
 PFB1     STD    PF 
          LDC    PFB18       SET WRITE ERROR PROCESSING RETURN
          STM    WDSA 
          LDD    MD          SET MACHINE INDEX*5
          STD    TC 
          SHN    2
          RAD    TC 
          ADC    UCSS        SET BEGINNING OF DOWNED MACHINE ENTRY
          STM    USCA 
          LDC    4000-1      SET INITIAL TRACK
          STD    CT 
          ADN    1           SET LAST TRACK + 1 
          RAD    NT 
 PFB2     AOD    CT          ADVANCE TRACK NUMBER 
          LMD    NT 
          NJN    PFB3        IF NOT END OF TRT
          STD    CM 
          LDC    WDSX        RESET ERROR RETURN 
          STM    WDSA 
          LDD    CP          CLEAR CONTROL POINT MESSAGE
          ADN    MS2W 
          CWD    CM 
          RJM    TQF         TERMINATE *IQFT* 
          LDD    EF 
          LJM    PFBX        RETURN 
  
 PFB3     LDD    CT          SET NEXT TRACK 
          STD    T6 
          LMC    0
 PFBA     EQU    *-1
          ZJN    PFB2        IF *IQFT* TRACK
          RJM    DPS         DETERMINE TRACK STATUS 
          SHN    21-7 
          PJN    PFB2        IF NOT FIRST TRACK OF PRESERVED FILE 
  
*         READ AND VERIFY SYSTEM SECTOR.
  
          AOD    BY          INCREMENT SYSTEM SECTORS PROCESSED 
          LMN    NFTP 
          NJN    PFB4        IF NOT TIME TO PAUSE 
          STD    BY          RESET COUNTER
          PAUSE  NE 
 PFB4     LDD    T6          SET TRACK NUMBER IN MESSAGE
          RJM    C2D
          STM    PFBB+16
          LDD    T6 
          SHN    -6 
          RJM    C2D
          STM    PFBB+15
          LDD    CP          ISSUE MESSAGE
          ADN    MS2W 
          CWM    PFBB,TR
          SETMS  POSITION 
*         LDN    0
          RJM    RSS
          ZJN    PFB7        IF VALID SYSTEM SECTOR 
 PFB5     ENDMS 
          LDD    PF 
          ZJN    PFB6        IF TRACK NOT INTERLOCKED 
          LDN    CTIS 
          RJM    STB         CLEAR TRACK INTERLOCK
*         LDN    0
          STD    PF 
 PFB6     LJM    PFB2        LOOP FOR NEXT PRESERVED FILE 
  
 PFB7     RJM    CQF         CHECK FOR QUEUE FILE 
          NJN    PFB5        IF QUEUE FILE PROCESSED
          LDD    FT          CHECK FILE TYPE
          LMN    PMFT 
          ZJN    PFB10       IF DIRECT ACCESS FILE
          LMN    FAFT&PMFT
          NJN    PFB5        IF NOT FAST ATTACH FILE
          RJM    RRS
          LDD    SD 
          NJN    PFB9        IF ISD 
          LDM    FISS 
          LPC    3777 
          ZJN    PFB10       IF NOT GLOBAL ATTACH FILE
          RJM    FAT         PROCESS FAST ATTACH FILE 
 PFB8     NJN    PFB5        IF FILE STILL IN FAST ATTACH STATUS
          LJM    PFB14       REWRITE SECTOR 
  
 PFB9     RJM    PFA         PROCESS FAST ATTACH FILE ON ISD
          NJN    PFB8        IF SYSTEM SECTOR UPDATE NOT REQUIRED 
          UJN    PFB14       REWRITE SYSTEM SECTOR
  
*         UPDATE USER COUNTS IN SYSTEM SECTOR.
  
 PFB10    LDM    UCSS,TC     CHECK IF ALL COUNTS ZERO 
          LPN    1
          STD    T2 
          ADM    UCSS+1,TC
          ADM    UCSS+2,TC
          ADM    UCSS+3,TC
          ADM    UCSS+4,TC
          NJN    PFB12       IF NECESSARY TO UPDATE SECTOR
          RJM    CAM         CHECK ACCESS MODE BITS 
          NJN    PFB8        IF FILE NOT PURGED 
 PFB11    LJM    PFB2        LOOP FOR NEXT PRESERVED FILE 
  
 PFB12    RJM    RRS         REREAD SYSTEM SECTOR WITH INTERLOCK
          LDN    0
          STM    FISS 
          RJM    USC         UPDATE SYSTEM SECTOR COUNTS
          LDC    PMFT*100 
          STM    FNSS+4 
 PFB14    RJM    CAM         CHECK ACCESS MODE BITS 
          ZJN    PFB11       IF FILE PURGED 
  
*         WRITE SECTOR BACK TO DEVICE.
  
          LDN    0           RESET SECTOR 
          STD    T7 
          LDC    BFMS        WRITE SECTOR 
          RJM    WDS
          ZJN    PFB16       IF NO ERRORS 
          ENDMS 
          RJM    SSE
 PFB16    LJM    PFB5        CLEAR TRACK INTERLOCK
  
 PFB18    AOD    EF          SET ERROR FLAG 
          LDD    NT 
          SBN    1           ENABLE IMMEDIATE RETURN
          STD    CT 
          UJN    PFB16       COMPLETE OPERATIONS ON DEVICE
  
  
 PFBB     DATA   C* RECOVERING PF.EQXXX, TRK YYYY.* 
 PFBC     DATA   C*$INTERLOCKING IQFT,  EQXXX.* 
 PTR      SPACE  4,15 
**        PTR - PROCESS TRACK RESERVATION.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = CURRENT TRACK.
*                (SD) = INDEPENDENT SHARED DEVICE STATUS. 
* 
*         EXIT   (A) .GE. 0 IF INCORRECT LOCAL FILE.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DPS, RSS, STB. 
* 
*         MACROS ENDMS, MONITOR.
  
  
 PTR1     LDN    CTIS        CLEAR INTERLOCK
          RJM    STB
 PTR3     LCN    0           SET EXIT CONDITION 
  
 PTR      SUBR               ENTRY/EXIT 
          RJM    DPS         DETERMINE TRACK STATUS 
          SHN    21-3 
          MJN    PTR1        IF TRACK INTERLOCKED 
          SHN    3-21+22
          PJN    PTRX        IF TRACK NOT RESERVED
          SHN    21-7 
          MJN    PTRX        IF FILE PRESERVED
          LDN    0           READ SYSTEM SECTOR 
          RJM    RSS
          LPC    7777 
          NJN    PTRX        IF SYSTEM SECTOR ERROR 
          ENDMS 
          LDD    T6          RELEASE LOCAL FILE DISK SPACE
          STD    CM+2 
          LDD    T5 
          LMC    2000        SET TRACK DROP FOR ANOTHER MACHINE 
          STD    CM+1 
          MONITOR  DTKM 
          UJN    PTR3        RETURN 
 RRS      SPACE  4,15 
**        RRS - REREAD SYSTEM SECTOR IF TRACK INTERLOCK NOT SET.
* 
*         ENTRY  (PF) = TRACK INTERLOCK STATUS. 
* 
*         EXIT   TO CALLER IF TRACK INTERLOCKED ON ENTRY. 
* 
*         EXIT   (A) = (T6) IF TRACK NO LONGER RESERVED.
*                    = RESPONSE FROM *RSS*. 
*                TO PREVIOUS *RSS* CALLER IF TRACK NOT ALREADY
*                INTERLOCKED. 
* 
*         CALLS  RSS, STI.
* 
*         MACROS ENDMS. 
  
  
 RRS      SUBR               ENTRY/EXIT 
          LDD    PF 
          NJN    RRSX        IF FIRST TRACK INTERLOCKED 
          ENDMS 
          LDM    RSS         CHANGE RETURN TO LAST *RSS* CALLER 
          STM    RRS
          RJM    STI         SET TRACK INTERLOCK
          NJN    RRSX        IF TRACK NO LONGER RESERVED
*         LDN    0           REREAD SYSTEM SECTOR 
          RJM    RSS
          UJN    RRSX        RETURN 
 RSC      SPACE  4,10 
**        RSC - READ SECTOR AND CHECK FOR ERRORS. 
* 
*         ENTRY  (A) = BUFFER ADDRESS.
*                (T5 - T7) = DRIVER PARAMETERS. 
* 
*         ERROR  TO *MSR* IF READ ERROR.
* 
*         CALLS  RDS. 
* 
*         MACROS ENDMS. 
  
  
 RSC      SUBR               ENTRY/EXIT 
          RJM    RDS         READ SECTOR
          PJN    RSCX        IF NO ERROR
 RSC1     ENDMS 
          LDN    /MRT/RER    SET READ ERROR 
          LJM    MSR         PROCESS ERROR
 SCI      SPACE  4,15 
**        SCI - INCREMENT/DECREMENT *MREC* ACTIVITY COUNT.
* 
*         *CMS* WILL WAIT ON THE ACTIVITY COUNT IN *INWL* BEFORE AN 
*         UNLOAD WILL BE PROCESSED. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 SCI      SUBR               ENTRY/EXIT 
 SCIA     LDD    MA          INCREMENT/DECREMENT *MREC* COUNT 
*         UJN    SCIX        (NOT *PMT* OR *UMT* FUNCTION)
          CWM    SCIB,TW
          SBN    1
          CRD    CM 
          MONITOR  UADM 
          LDD    CM+1 
          ZJN    SCIX        IF NO OVERFLOW/UNDERFLOW 
 SCI1     MONITOR  HNGM 
          UJN    SCI1        HANG 
  
  
 SCIB     VFD    12/LIOS,12/INWL,6/18D,6/6,24/0  INCREMENT ACTIVITY 
*SCIB     VFD    12/LDOS,12/INWL,6/18D,6/6,24/0  (DECREMENT ACTIVITY) 
          VFD    12/0,12/1,12/1,24/0
 SDP      SPACE  4,15 
**        SDP - SET DEVICE PARAMETERS.
* 
*         ENTRY  (EQ) = EQUIPMENT.
* 
*         EXIT   (A) = PF CATALOG SIZE. 
*                    = 0, 8 WORD CATALOGS.
*                    = 1000, 16 WORD CATALOGS.
*                (DF) = DAF COUNT.
*                (NT) = NUMBER OF TRACKS ON DEVICE. 
*                (DPSA - DPSA+1) = TRT ADDRESS. 
* 
*         USES   T0 - T6, CN - CN+4.
* 
*         MACROS SFA. 
* 
*         CALLS  CAT. 
  
  
 SDP      SUBR               ENTRY/EXIT 
          SFA    EST,EQ      SET DEVICE PARAMETERS
          ADK    EQDE 
          CRD    CN 
          LDD    CN+4 
          SHN    3
          ADN    MDGL 
          CRD    T0 
          SBN    MDGL-TDGL
          CRD    T1 
          ADN    ACGL-TDGL
          CRD    CN          SET DAF COUNT
          ADN    TRLL-ACGL
          RJM    CAT         CALCULATE FWA OF TRT 
          SBD    TH 
          STM    DPSA+1 
          SHN    -14
          LMC    ADCI 
          STM    DPSA 
          LDD    T1+2 
          SHN    2
          STD    NT          NUMBER OF TRACKS 
          SHN    21-13
          PJN    SDP1        IF NOT FULL-LENGTH TRT 
          SOD    NT          SET (NT) = 3777
 SDP1     LDD    CN+2 
          STD    DF          DAF COUNT
          LDD    T0          GET PFC SIZE 
          LPC    1000 
          LJM    SDPX        RETURN 
 STB      SPACE  4,15 
**        STB - SET TRACK BIT.
* 
*         ENTRY  (A) = *STBM* SUBFUNCTION CODE. 
*                (T5) = EST ORDINAL.
*                (T6) = TRACK NUMBER. 
* 
*         EXIT   (A) = MONITOR RESPONSE.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 STB      SUBR               ENTRY/EXIT 
          STD    CM+3        SET SUBFUNCTION CODE 
          LDD    T6          SET TRACK
          STD    CM+2 
          LDD    T5          SET EST ORDINAL
          LMC    1S10 
          STD    CM+1 
          MONITOR  STBM      ISSUE REQUEST
          LDD    CM+1 
          UJN    STBX        RETURN 
 STI      SPACE  4,15 
**        STI - SET TRACK INTERLOCK.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = TRACK.
* 
*         EXIT   (A) = 0 IF TRACK INTERLOCKED.
*                    = (T6) IF TRACK NOT RESERVED.
*                (PF) = (T6) IF TRACK INTERLOCKED.
* 
*         ERROR  TO *ERR* IF *ORET* ERROR FLAG DETECTED.
* 
*         CALLS  STB. 
* 
*         MACROS DELAY, PAUSE.
  
  
 STI2     LDD    T6          FLAG TRACK INTERLOCKED 
          STD    PF 
 STI3     LMD    T6          RETURN INTERLOCK STATUS
  
 STI      SUBR               ENTRY/EXIT 
 STI1     LDN    STIS        ATTEMPT TRACK INTERLOCK
          RJM    STB
          ZJN    STI2        IF INTERLOCK SET 
          LMN    2
          ZJN    STI3        IF TRACK NOT RESERVED
          DELAY  250D*10
          PAUSE 
          LDD    CM+1        CHECK ERROR FLAG 
          LMN    ORET 
          NJN    STI1        IF NOT OPERATOR OVERRIDE 
          LJM    ERR         PROCESS ERROR FLAG TERMINATION 
 TQF      SPACE  4,15 
**        TQF - TERMINATE *IQFT*. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (QF) = FIRST TRACK OF *IQFT*.
*                (QT) = CURRENT *IQFT* TRACK. 
*                (QS) = CURRENT *IQFT* SECTOR.
* 
*         EXIT   (QF) = 0.
* 
*         USES   T1, T6, T7.
* 
*         CALLS  STB, WEI, WQF. 
* 
*         MACROS ENDMS, MONITOR, SETMS. 
  
  
 TQF2     LDM    PFBA 
          ZJN    TQFX        IF *IQFT* NOT INTERLOCKED
          STD    T6 
          LDN    CTIS        CLEAR TRACK INTERLOCK
          RJM    STB
*         LDN    0           CLEAR *IQFT* PROCESSING INITIATED
          STD    QF 
          STM    PFBA        CLEAR TRACK INTERLOCKED FLAG 
  
 TQF      SUBR               ENTRY/EXIT 
          LDD    QF 
          ZJN    TQF2        IF NO QUEUE FILE PROCESSING
          LDC    500
          STD    T1 
 TQF1     LDN    0           CLEAR EOI SECTOR BUFFER
          STM    BFMS+1,T1
          SOD    T1 
          NJN    TQF1        LOOP TO START OF BUFFER
          RJM    WQF         WRITE LAST *IQFT* SECTOR 
          LDD    MA          MOVE FILE NAME TO BUFFER 
          CWM    IQFA,ON
          SBN    1
          CRM    BFMS+FNEI,ON 
          LDD    T5          SETUP EOI SECTOR BUFFER
          STM    BFMS+FSEI
          LDD    QF 
          STM    BFMS+FTEI
          LDD    QT          SET CURRENT *IQFT* TRACK AND SECTOR
          STD    T6 
          LDD    QS 
          STD    T7 
          SETMS  POSITION 
          RJM    WEI         WRITE EOI SECTOR 
          ENDMS 
          LDD    T5          SET EOI IN TRT 
          LMC    1S11 
          STD    CM+1 
          LDD    QT 
          LPC    3777 
          STD    CM+2 
          LDD    QS 
          STD    CM+3 
          MONITOR  DTKM 
          LJM    TQF2        CLEAR TRACK INTERLOCK
 USC      SPACE  4,10 
*         USC - UPDATE SYSTEM SECTOR COUNTS.
* 
*         ENTRY  (T2) = WRITE MODE FLAG FROM UCSS OF DOWN MACHINE.
*                (TC) = MACHINE INDEX*5.
*                (MI) = MACHINE INDEX.
*                (UCSA) = ADDRESS IN BUFFER OF DOWN MACHINE PF COUNTS.
*                (BFMS) = SYSTEM SECTOR.
* 
*         EXIT   COUNTS UPDATED AND ENTRY CLEARED FOR DOWN MACHINE. 
  
  
 USC      SUBR               ENTRY/EXIT 
          LDN    0           SUBTRACT DOWN MACHINE COUNTS FROM TOTAL
          SBM    UCSS+1,TC
          RAM    UCSS+1 
          LDN    0
          SBM    UCSS+2,TC
          RAM    UCSS+2 
          LDN    0
          SBM    UCSS+3,TC
          RAM    UCSS+3 
          LDN    0
          SBM    UCSS+4,TC
          RAM    UCSS+4 
          LDM    UCSS,TC
          LPN    2
          ZJN    USC1        IF LOCAL UTILITY ATTACH FLAG NOT SET 
          LDM    CASS        CLEAR GLOBAL UTILITY ATTACH FLAG 
          LPC    7677 
          STM    CASS 
 USC1     LDN    ZERL        CLEAR ENTRY FOR DOWNED MACHINE 
          CRM    *,ON 
 USCA     EQU    *-1
          LDD    T2 
          ZJN    USC2        IF WRITE MODE NOT SET
          LDM    CASS        CLEAR WRITE MODE BITS IN ACCESS WORD 
          LPC    7541 
          STM    CASS 
 USC2     LJM    USCX        RETURN 
 WQF      SPACE  4,15 
**        WQF - WRITE *IQFT* SECTOR.
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (QT) = CURRENT *IQFT* TRACK. 
*                (QS) = CURRENT *IQFT* SECTOR.
* 
*         EXIT   (A) = 0 IF SECTOR WRITTEN. 
* 
*         USES   T6, T7, CM - CM+4. 
* 
*         CALLS  WDS. 
* 
*         MACROS ENDMS, MONITOR.
  
  
 WQF      SUBR               ENTRY/EXIT 
          LDD    QT          SET CURRENT *IQFT* TRACK 
          STD    T6 
          LDC    QBUF+2      RESET BUFFER POINTER 
          STM    CQFC 
          LDD    QS          SET *IQFT* SECTOR
          STD    T7 
          ADN    1           SET SECTOR LINKAGE 
          STM    QBUF 
          STD    QS          SET NEXT *IQFT* SECTOR 
          LMM    SLM
          NJN    WQF1        IF NOT SECTOR LIMIT
          ENDMS 
*         LDN    0
          STD    CM+3 
          STD    CM+4 
          STD    QS 
          LDD    T5          REQUEST NEXT *IQFT* TRACK
          STD    CM+1 
          LDD    T6 
          STD    CM+2 
          MONITOR  RTCM 
          LDD    CM+4        SET NEXT TRACK IN SECTOR LINKAGE 
          STM    QBUF 
          ZJN    WQF3        IF NO TRACK AVAILABLE
          STD    QT 
 WQF1     SETMS  POSITION 
          LDC    QBUF+WLSF   WRITE *IQFT* SECTOR
          RJM    WDS
          ENDMS 
*         LDN    0
          STM    QBUF+1 
 WQF2     LJM    WQFX        RETURN 
  
 WQF3     LDD    T7          SAVE LAST SECTOR FOR EOI 
          STD    QS 
          UJN    WQF2        RETURN 
          TITLE  EXTENDED MEMORY MMF SUBROUTINES. 
          SPACE  4,10 
***       EXTENDED MEMORY MMF SUBROUTINES.
* 
*         THE FOLLOWING CODE IS USED ONLY FOR ECS MMF ENVIRONMENTS. 
*         IT IS OVERLAID BY ISD MMF CODE IF RUNNING IN AN ISD SYSTEM. 
  
  
          USE    OVERLAY
 OVLA     EQU    *+5         *2MR* LOAD ADDRESS 
 CFR      SPACE  4,10 
**        CFR - CLEAR FLAG REGISTER BIT.
* 
*         ENTRY  (A) = BIT NUMBER TO CLEAR. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  TFR. 
* 
*         MACROS MONITOR. 
  
  
 CFR      SUBR               ENTRY/EXIT 
          RJM    TFR         TOGGLE FLAG REGISTER BIT 
          LDD    T1          BIT NUMBER 
          SHN    6
          STD    CM+1 
          LDN    CFRS        SET TO CLEAR FLAG REGISTER BIT 
          SHN    11 
          STD    CM+3 
          MONITOR ECSM
          UJN    CFRX        RETURN 
 DAT      SPACE  4,10 
**        DAT - READ(WRITE) DAT ENTRY (2 WORDS).
* 
*         ENTRY  (A) = EST ORDINAL OF EQUIPMENT.
*                (T3) = RECS*1000 IF READ, WECS*1000 IF WRITE.
*                DAT IN CM BUFFER (MA - MA+1) IF WRITE. 
* 
*         EXIT   (BUFD) = 2 WORD DAT ENTRY. (READ ONLY) 
* 
*         CALLS  ECS. 
* 
*         USES   CM - CM+4, T1. 
* 
*         MACROS SFA. 
  
  
 DAT      SUBR               ENTRY/EXIT 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        READ MST FOR DAT INDEX 
          SHN    3
          ADN    MDGL 
          CRD    CM 
          LDD    CM          SET DAT INDEX
          LPC    377
          SHN    1
          ADD    DA+1 
          STD    CM+4 
          SHN    -14
          ADD    T3          SET TO READ/WRITE EXTENDED MEMORY
          ADD    DA 
          STD    CM+3 
          LDN    2-1         READ TWO WORDS 
          RJM    ECS         READ(WRITE) EXTENDED MEMORY
          LDD    T3 
          LMD    WE 
          ZJN    DATX        IF WRITE 
          LDD    MA 
          CRM    BUFD,TW
          UJN    DATX        RETURN 
 ECS      SPACE  4,10 
**        ECS - READ/WRITE EXTENDED MEMORY. 
* 
*         ENTRY  (A) = WORD COUNT - 1.
*                (CM+3 - CM+4) = PARAMETERS FOR *ECSM* FUNCTION.
* 
*         EXIT   (A) = 0. 
* 
*         ERROR  TO *MSR* IF TRANSFER ERROR.
  
  
 ECS      SUBR               ENTRY/EXIT 
          SHN    6
          STD    CM+1        SET WORD COUNT 
          LDD    MA 
          STD    CM+2        SET BUFFER ADDRESS 
          MONITOR ECSM
          LDD    CM+1 
          ZJN    ECSX        IF NO ERRORS 
          LDN    /MRT/RER    SET READ ERROR 
          LJM    MSR         PROCESS ERROR
 FAT      SPACE  4,10 
**        FAT - PROCESS FAST ATTACH PERMANENT FILES.
* 
*         ENTRY  (A) = INDEX OF FAT ENTRY IN EXTENDED MEMORY. 
*                SYSTEM SECTOR IN BFMS. 
* 
*         EXIT   (A) = 0 IF REMOVE FILE FROM FAST ATTACH STATUS.
* 
*         USES   T2, T3, T7, CM - CM+4. 
* 
*         CALLS  CFR, ECS, SFR, WFW.
* 
*         MACROS ENDMS. 
  
  
 FAT      SUBR               ENTRY/EXIT 
          STD    T3 
          LDK    MMFL 
          CRD    CM 
          LDD    CM+1 
          SHN    21-12
          PJN    FAT1        IF NOT LSPMMF
          SHN    12-21
          LPC    777
          LMD    T5 
          NJN    FAT1        IF FILE DOES NOT RESIDE ON LINK DEVICE 
          ENDMS 
 FAT1     LDN    /MMF/FATI   OBTAIN *FATI* INTERLOCK
          RJM    SFR
          LDN    0           SET FAT WORD TO READ 
          STD    T2 
 FAT2     LDD    T3          SET FAST ATTACH TRACK ADDRESS
          SHN    /MMF/FATS
          ADD    T2 
          ADD    DA+1 
          ADC    /MMF/FAST*100
          STD    CM+4 
          SHN    -14
          ADD    DA 
          ADD    RE          READ EXTENDED MEMORY 
          STD    CM+3 
          LDN    1-1         SET WORD COUNT 
          RJM    ECS         READ FAT WORD
          LDD    T2          READ FAT ENTRY INTO BUFFER 
          SHN    2
          ADD    T2 
          ADC    BUFS 
          STM    FATA 
          LDD    MA 
          CRM    BUFS,ON
 FATA     EQU    *-1
          AOD    T2 
          LMN    /MMF/MXMF+2
          NJN    FAT2        IF NOT END OF WORDS TO READ
          LDD    MD          SET INDEX INTO ENTRY FOR DOWNED MACHINE
          SHN    2
          ADD    MD 
          STD    T2 
          STD    T7          PRESET EXIT CONDITION
          LDN    0           ADJUST COUNTS
          SBM    BUFS+5+2,T2
          RAM    BUFS+5+2 
          LDN    0
          SBM    BUFS+5+3,T2
          RAM    BUFS+5+3 
          LDN    0
          SBM    BUFS+5+4,T2
          RAM    BUFS+5+4 
          LDD    MA          WRITE GLOBAL COUNTS TO EXTENDED MEMORY 
          CWM    BUFS+5,ON
          LDN    1
          RJM    WFW         WRITE FAT WORD 
          LDN    ZERL 
          CRD    CM 
          LDD    MA 
          CWD    CM 
          LDD    MD 
          ADN    1
          RJM    WFW         WRITE FAT WORD 
          LDN    0
          STM    BUFS+5,T2   ZERO SLOT FOR THIS MACHINE 
          STD    T2 
 FAT3     LDM    BUFS+2*5,T2
          NJN    FAT4        IF FILE STILL ATTACHED 
          LDN    5
          RAD    T2 
          LMK    5*/MMF/MXMF
          NJN    FAT3        IF NOT END OF MACHINES TO CHECK
          STM    FISS        CLEAR FAST ATTACH STATUS 
          STD    T7          SET EXIT CONDITION 
          LDN    ZERL        CLEAR ENTRY IN EXTENDED MEMORY 
          CRD    CM 
          LDD    MA 
          CWD    CM 
          LDN    0
          RJM    WFW         WRITE WORD 0 OF FAT
          LDC    PMFT*100    RESET FILE TYPE
          STM    FNSS+4 
          LDM    CASS        CLEAR WRITE MODE BITS IN ACCESS WORD 
          LPC    7541 
          STM    CASS 
 FAT4     LDN    /MMF/FATI   CLEAR *FATI* INTERLOCK 
          RJM    CFR
          LDD    T7 
          LJM    FATX        RETURN 
 PDT      SPACE  4,10 
**        PDT - CLEAR DEVICE ACCESSED BIT IN DAT FOR DOWNED MACHINE.
* 
*         ENTRY  (EQ) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF NOT PROCESSING DEVICE.
*                (T6) = MST TRACK IF PROCESSING DEVICE. 
* 
*         USES   T3, T6.
* 
*         CALLS  CKP, DAT.
  
  
 PDT      SUBR               ENTRY/EXIT 
          LDD    MK 
          STM    PDTA        SET DOWNED MACHINE MASK
          LDD    RE 
          STD    T3          SET READ OF DAT
          LDD    EQ 
          RJM    DAT
          LDM    BUFD+5+4    CHECK IF DOWNED MACHINE ACCESSING DEVICE 
          LPC    *
 PDTA     EQU    *-1
          ZJN    PDTX        IF DEVICE ACCESS NOT SET 
          LMM    BUFD+5+4 
          STM    BUFD+5+4 
          LDM    BUFD+4      SET MST TRACK FOR DEVICE 
          STD    T6 
          RJM    CKP         SET CHECKPOINT BIT 
          LDN    1
          UJN    PDTX        RETURN 
 SFR      SPACE  4,10 
**        SFR - SET FLAG REGISTER BIT.
* 
*         ENTRY  (A) = BIT NUMBER TO SET. 
* 
*         ERROR  TO *ERR* IF ERROR FLAG SET.
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  DAP, TFR.
* 
*         MACROS MONITOR. 
  
  
 SFR2     LDD    CP          CLEAR MESSAGE
          ADN    MS2W 
          CWD    CM 
  
 SFR      SUBR               ENTRY/EXIT 
          RJM    TFR         TOGGLE FLAG REGISTER BIT 
 SFR1     LDD    T1          SET BIT NUMBER 
          SHN    6
          STD    CM+1 
          LDC    SFRS*1000
          STD    CM+3 
          MONITOR  ECSM 
          LDD    CM+1 
          ZJN    SFR2        IF BIT SET 
          LDD    CP 
          ADN    MS2W 
          CWM    SFRA,TR
          RJM    DAP         DELAY AND PAUSE
          NJN    SFR1        IF NO OPERATOR DROP
          LDD    T1          RESET BIT INTERLOCKED FLAG 
          RJM    TFR         TOGGLE FLAG REGISTER BIT 
          LJM    ERR         ERROR FLAG TERMINATION 
  
  
 SFRA     DATA   C*WAITING FOR XXXI INTERLOCK.* 
 TFRB     SPACE  4,10 
**        TFRB - TABLE OF FLAG REGISTER BIT INTERLOCKS. 
* 
*         ENTRY  = 3 WORDS. 
*T, TFRB  6/,1/I  ,5/N  ,24/FLAG BIT MNEMONIC 
*         I      FLAG BIT INTERLOCKED FLAG
*         N      BIT NUMBER 
  
  
 TFRB     BSS    0           TABLE OF FLAG REGISTER BIT INTERLOCKS
          VFD    12//MMF/DATI,24/0LDATI  DAT INTERLOCK
          VFD    12//MMF/FATI,24/0LFATI  FAST ATTACH TRACK INTERLOCK
          VFD    12//MMF/BDTI,24/0LBDTI  BDT INTERLOCK
  
          CON    0           TERMINATOR 
 TFR      SPACE  4,10 
**        TFR - TOGGLE FLAG REGISTER BIT. 
* 
*         ENTRY  (A) = FLAG BIT NUMBER. 
* 
*         USES   T1, CM+2.
  
  
 TFR      SUBR               ENTRY/EXIT 
          STD    T1 
          LDC    TFRB-3      INITIALIZE BIT SEARCH
          STD    CM+2 
 TFR1     LDN    3           SEARCH FOR FLAG BIT
          RAD    CM+2 
          LDI    CM+2 
          ZJN    *           IF BIT NOT FOUND 
          LMD    T1 
          LPN    37 
          NJN    TFR1        IF NOT FOUND 
          LDI    CM+2        TOGGLE BIT 
          LMN    40 
          STI    CM+2 
          LDM    1,CM+2      SET BIT MNEMONIC IN MESSAGE
          STM    SFRA+6 
          LDM    2,CM+2 
          STM    SFRA+7 
          UJN    TFRX        RETURN 
 WFW      SPACE  4,10 
**        WFW - WRITE FAT WORD. 
* 
*         ENTRY  (A) = RELATIVE FAT WORD TO WRITE.
*                (T3) = FAT INDEX.
*                MESSAGE BUFFER CONTAINS WORD TO WRITE. 
* 
*         USES   CM+3, CM+4.
* 
*         CALLS  ECS. 
  
  
 WFW      SUBR               ENTRY/EXIT 
          SHN    22-/MMF/FATS 
          ADD    T3 
          SHN    /MMF/FATS
          ADD    DA+1        SET FAST ATTACH TRACK ADDRESS
          ADC    /MMF/FAST*100
          STD    CM+4 
          SHN    -14
          ADD    DA 
          ADD    WE 
          STD    CM+3 
          LDN    1-1         WORD COUNT 
          RJM    ECS         WRITE EXTENDED MEMORY
          UJN    WFWX        RETURN 
          SPACE  4,5
 E1MR     BSS    0           END OF ECS MMF CODE
          TITLE  FUNCTION 0 - RETRIEVE DISPLAY INFORMATION. 
 RDI      SPACE  4,10 
**        RDI - RETRIEVE DISPLAY INFORMATION.  (FUNCTION 0) 
* 
*         ENTRY  (IR+3 - IR+4) = ADDR.
* 
*         ADDR   ADDRESS OF TABLE OF SHARED DEVICES FOR THIS MACHINE. 
* 
*         CALLS  CAA, DAT.
* 
*         MACROS SFA. 
  
  
 RDI      SUBR               ENTRY/EXIT 
          LDK    EFRL        READ MACHINE STATE TABLE 
          CRD    CM 
          LDN    /MMF/MXMF   SET MAXIMUM NUMBER OF MAINFRAMES 
          STD    T1 
          LDD    CM 
          SHN    14 
          LMD    CM+1 
          CRM    BFMS,T1
          LDD    RA          WRITE STATE TABLE TO CM TABLE
          SHN    6
          ADK    /MRT/TMID
          CWM    BFMS,T1
  
*         RETURN MASKS OF MACHINES SHARING DEVICES WITH THIS MACHINE. 
  
          LCN    0           SET TABLE INDEX
          STD    SC 
 RDI1     AOD    SC          INCREMENT TABLE INDEX
          RJM    CAA
          ADD    SC 
          CRD    CN          READ TABLE ENTRY 
          LDD    CN+4 
          ZJN    RDIX        IF END OF TABLE
          SFA    EST
          ADK    EQDE        READ EST ENTRY 
          CRD    CM 
          LDD    CM 
          SHN    21-6 
          MJN    RDI1        IF DEVICE UNAVAILABLE
          LDD    RE 
          STD    T3          SET READ OPERATION 
          LDD    CN+4 
          RJM    DAT         READ DAT ENTRY 
          LDM    BUFD+5+4 
          LMC    0           CLEAR MASK OF THIS MACHINE 
 RDIA     EQU    *-1
          STD    CN          SET MACHINE MASK 
          RJM    CAA
          ADD    SC          WRITE ENTRY BACK TO *MREC* 
          CWD    CN 
          UJP    RDI1        LOOP FOR NEXT DEVICE 
  
  
          ERRNG  BUFD-*      CODE OVERFLOWS BUFFER
          TITLE  FUNCTION 3 - CLEAR DEVICE INTERLOCKS.
 CDV      SPACE  4,10 
**        CDV - CLEAR DEVICE INTERLOCKS.  (FUNCTION 3)
* 
*         ENTRY  (IR+4) = MACHINE INDEX FOR WHICH TO CLEAR INTERLOCKS.
* 
*         EXIT   TO *MRP2*. 
* 
*         MACROS MONITOR. 
  
  
 CDV8     MONITOR  HNGM 
 CDV9     LDK    EFRL        CHANGE STATE OF DOWN MACHINE 
          CRD    CM 
          LDD    CM 
          SHN    14 
          LMD    CM+1 
          ADD    IR+4 
          ADK    /MMF/MFST-1
          CRD    CN 
          LDD    CN+4 
          LMN    /MMF/MFMR
          NJN    CDV8        IF NOT IN PROPER STATE 
*         LDN    /MMF/MFDN   SET *1MR* DONE STATE 
          ERRNZ  /MMF/MFDN   CODE DEPENDS ON VALUE OF TAG 
          STD    CN+4 
          LDD    CM          WRITE STATE WORD 
          SHN    14 
          LMD    CM+1 
          ADD    IR+4 
          ADK    /MMF/MFST-1
          CWD    CN 
          LJM    MRP2        EXIT TO DROP PP ONLY 
  
 CDV      SUBR               ENTRY/EXIT 
          LDK    ESTP        PRESET EQUIPMENT SEARCH
          CRD    CM 
          LDD    CM+3 
          STD    EQ 
 CDV1     SOD    EQ 
          ZJN    CDV9        IF END OF EQUIPMENTS 
          SFA    EST
          ADK    EQDE 
          CRD    CN 
          LDD    CN 
          LPC    5020 
          LMC    5000 
          NJN    CDV1        IF NOT MMF SHARED DEVICE 
  
*         OBTAIN DEVICE INTERLOCK WHILE PROCESSING TRACK INTERLOCKS.
  
          RJM    CBI         CLEAR SHARED BUFFERED DEVICE INTERLOCKS
          LDD    EQ          SET EST ORDINAL
          STD    CM+1 
          LDN    SDIS        INTERLOCK DEVICE 
          STD    CM+3 
          MONITOR  STBM 
          LDD    CN+4        GET TRT ADDRESS
          SHN    3
          ADK    TDGL 
          CRD    T1 
          ADK    SDGL-TDGL
          CRD    T6          (T6 - T6+1) = EM ADDRESS OF MST
          ADK    TRLL-SDGL
          CRD    CN+3-4      (CN+2 - CN+3) = TRT ADDRESS
          LDD    T1+2        SET TRT LENGTH 
          STD    TC 
          LDN    0           SET CURRENT TRT WORD 
          STD    CN 
          UJN    CDV3        ENTER LOOP 
  
*         LOOP THROUGH TRT WORDS CHECKING FOR INTERLOCKED TRACKS. 
  
 CDV2     AOD    CN          ADVANCE TRT WORD 
          SBD    TC 
          PJP    CDV4        IF END OF TRT
 CDV3     LDD    CN+2        READ TRT WORD
          SHN    14 
          LMD    CN+3 
          ADD    CN 
          CRD    T1 
          LDD    T1+4 
          SHN    -4 
          LPN    17 
          ZJN    CDV2        IF NO TRACK INTERLOCK BITS SET 
  
*         INTERLOCKED TRACK(S) FOUND, CHECK IF HELD BY DOWN MACHINE.
  
          ADC    TCDVB       GET INTERLOCK BITS IN MRT ORDER
          STD    T0 
          LDI    T0 
          STM    CDVB        (CDVB) = TRACK INTERLOCK BITS (MRT ORDER)
          LDD    IR+4        COMPUTE EXTENDED MEMORY MRT ADDRESS
          SHN    6+3
          ADD    CN 
          SHN    -3 
          ADC    /MMF/MRST*100-100
          STD    SC          ADDRESS OF MRT WORD IN TRACK 
          ADD    T6+1 
          STD    CM+4 
          SHN    -14
          ADD    T6 
          ADD    RE 
          STD    CM+3 
          LDD    MA          SET CM ADDRESS 
          STD    CM+2 
          LDN    0           SET WORD COUNT TO 1
          STD    CM+1 
          MONITOR  ECSM 
          LDD    MA          READ MRT WORD
          CRD    CM 
  
*         CHECK MRT WORD OF DOWN MACHINE TO SEE IF IT HAS INTERLOCKS. 
  
          LDD    CN          COMPUTE MRT BYTE 
          LPN    7
          STD    BI 
          LDM    TCDV,BI     SET BYTE FROM TABLE
          STD    BY 
          LDM    TCDVA,BI    SET MRT SHIFTS 
          STM    CDVA 
          LMN    77 
          STM    CDVC 
          LDI    BY 
 CDVA     SHN    **          SHIFT MRT BITS TO BITS 4 - 7 
          LPC    ** 
 CDVB     EQU    *-1
          ZJP    CDV2        IF NO INTERLOCKS HELD BY THIS MACHINE
          STD    T0          SAVE INTERLOCKS CLEARED
 CDVC     SHN    **          SHIFT BACK 
          LMI    BY 
          STI    BY 
  
*         CLEAR TRACK INTERLOCK BITS IN TRT WORD. 
  
          LDD    T0          GET INTERLOCK BITS CLEARED IN TRT ORDER
          SHN    -4 
          ADC    TCDVB
          STD    T0 
          LDI    T0 
          LMD    T1+4 
          STD    T1+4 
          LDD    CN+2        WRITE TRT WORD 
          SHN    14 
          ADD    CN+3 
          ADD    CN 
          CWD    T1 
  
*         REWRITE MRT WORD TO EXTENDED MEMORY.
  
          LDD    MA          SET CM ADDRESS 
          CWD    CM          WRITE MRT WORD TO MB 
          STD    CM+2 
          LDD    SC          SET ADDRESS OF MRT WORD
          ADD    T6+1 
          STD    CM+4 
          SHN    -14
          ADD    T6 
          ADD    WE 
          STD    CM+3 
          LDN    0           SET WORD COUNT TO 1
          STD    CM+1 
          MONITOR  ECSM 
          LJM    CDV2        PROCESS NEXT TRT WORD
  
*         ADJUST *PFM* ACTIVITY COUNTS. 
  
 CDV4     LDN    GLGL-LLLL   COMPUTE EM ADDRESS OF LOCAL MST
          STD    SC 
          LDN    0
          STD    T0 
 CDV5     LDN    LLLL 
          RAD    SC 
          AOD    T0 
          LMD    IR+4 
          NJN    CDV5        IF NOT END OF COMPUTATION
          ERRNG  6-LLLL      LOCAL MST EXCEEDS MESSAGE BUFFER 
          LDD    SC          SET EXTENDED MEMORY ADDRESS FOR *ECSM* 
          ADD    T6+1 
          STD    CM+4 
          SHN    -14
          ADD    T6 
          ADD    RE 
          STD    CM+3 
          LDD    MA          SET CM ADDRESS 
          STD    CM+2 
          LDC    LLLL*100-100 
          STD    CM+1 
          MONITOR  ECSM 
          LDD    MA          READ LOCAL AREA
          CRM    MBUF,SX
  
*         SUBTRACT LOCAL PF COUNTS FROM GLOBAL. 
  
          LDD    CN+4        READ GLOBAL COUNT WORD FROM CM MST 
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+1 
          ZJN    CDV7        IF NO COUNTS SET 
          SBM    MBUF+DULL*5-GLGL*5+1 
          MJN    CDV6        IF COUNTER UNDERFLOW 
          STD    CM+1 
 CDV6     LDN    0
          STM    MBUF+DULL*5-GLGL*5+1 
          LDD    CN+4 
          SHN    3
          ADK    TDGL 
          CWD    CM 
  
*         WRITE LOCAL MST BACK TO EXTENDED MEMORY.
  
          LDD    MA          WRITE LOCAL AREA 
          STD    CM+2 
          CWM    MBUF,SX
          LDD    SC          SET EXTENDED MEMORY ADDRESS FOR *ECSM* 
          ADD    T6+1 
          STD    CM+4 
          SHN    -14
          ADD    T6 
          ADD    WE 
          STD    CM+3 
          LDC    LLLL*100-100 
          STD    CM+1 
          MONITOR  ECSM 
  
*         CLEAR DEVICE INTERLOCK.  NOTE THAT THE TRT AND GLOBAL MST 
*         ARE WRITTEN TO EXTENDED MEMORY BY THIS FUNCTION.
  
 CDV7     LDD    EQ 
          ADC    4000        SET CHECKPOINT BIT 
          STD    CM+1 
          LDN    CDIS 
          STD    CM+3 
          MONITOR  STBM 
          LJM    CDV1        PROCESS NEXT EQUIPMENT 
  
  
 TCDV     CON    CM+4,CM+4,CM+4,CM+3,CM+3,CM+3,CM+2,CM+2
 TCDVA    CON    SHNI+4,SHNI,SHNI+73,SHNI+4,SHNI,SHNI+73,SHNI+4,SHNI
 TCDVB    CON    00,200,100,300,40,240,140,340
          CON    20,220,120,320,60,260,160,360
          TITLE  *CDV* SUBROUTINES. 
 ABE      SPACE  4,10 
**        ABE - ACCESS *BDT* ENTRY. 
* 
*         ENTRY  (A) = READ/WRITE FUNCTION CODE (*RE* OR *WE*). 
*                (SC) = *DAT* INDEX.
*                (ABEA) = *BDT* TRACK.
* 
*         USES   CM+3, CM+4, T6, T7.
* 
*         CALLS  CEA, ECS.
  
  
 ABE      SUBR               ENTRY/EXIT 
          ADC    ADDI 
          STM    ABEB 
          LDC    **          (*BDT* TRACK)
 ABEA     EQU    *-1
          STD    T6 
          LDN    0
          STD    T7 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDD    SC          ADD *DAT* INDEX
          RAD    CM+4 
          SHN    -14
 ABEB     ADD    RE          READ FUNCTION
*         ADD    WE          (WRITE FUNCTION) 
          RAD    CM+3 
          LDN    1-1         READ OR WRITE ONE WORD 
          RJM    ECS         READ OR WRITE *BDT* ENTRY
          UJN    ABEX        RETURN 
 CBI      SPACE  4,10 
**        CBI - CLEAR SHARED BUFFERED DEVICE INTERLOCKS.
* 
*         ENTRY  (MD) = MACHINE INDEX OF DOWNED MACHINE.
*                (EQ) = EST ORDINAL.
*                (CN - CN+4) = EST ENTRY. 
* 
*         USES   SC, CM - CM+4, T1 - T5.
* 
*         CALLS  ABE, CFR, SFR. 
* 
*         MACROS CMSTF, MONITOR.
  
  
 CBI      SUBR               ENTRY/EXIT 
          LDD    CN 
          SHN    21-5 
          PJN    CBIX        IF NOT SHARED BUFFERED DEVICE
          LDN    ZERL 
          CRD    CM 
          LDD    MD          SET MACHINE INDEX OF DOWNED MACHINE
          STD    CM+2 
          LDD    EQ          SET EST ORDINAL
          STD    CM+4 
          LDN    CBRS        CLEAR *BAT* READ ACCESS PERMISSIONS
          STD    CM+1 
          MONITOR  MTEM 
          LDD    CN+4 
          SHN    3
          ADN    MDGL 
          CRD    CM 
          LDD    CM          GET *DAT* INDEX
          LPC    377
          STD    SC 
          LDN    /MMF/BDTI   SET *BDT* INTERLOCK
          RJM    SFR
          LDN    RE          READ *BDT* ENTRY 
          RJM    ABE
          LDD    MA 
          CRD    T1 
          LDD    T1          CHECK ERROR PROCESSING INTERLOCK 
          ZJN    CBI1        IF INTERLOCK NOT SET 
          LPN    7
          LMD    MD 
          NJN    CBI1        IF INTERLOCK NOT HELD BY DOWNED MACHINE
          STD    T1          CLEAR INTERLOCK
          CMSTF  GDER        CLEAR ERROR PROCESSING BIT IN *ACGL* 
 CBI1     LDD    T2          CHECK RESTORE PARITY INTERLOCK 
          ZJN    CBI2        IF INTERLOCK NOT SET 
          LPN    7
          LMD    MD 
          NJN    CBI2        IF INTERLOCK NOT HELD BY DOWNED MACHINE
          STD    T1+1        CLEAR INTERLOCK
          STD    T1+2        CLEAR CONTROLLER SERIAL NUMBER 
          STD    T1+3 
          STD    T1+4 
          CMSTF  GDUR        CLEAR RESTORE IN PROGRESS BIT IN *ACGL*
          CMSTF  GDRI        CLEAR RESTORE INITIATION BIT IN *ACGL* 
 CBI2     LDD    MA 
          CWD    T1 
          LDN    WE          REWRITE *BDT* ENTRY
          RJM    ABE
          LDN    /MMF/BDTI   CLEAR *BDT* INTERLOCK
          RJM    CFR
          CMSTF  GPDA        CLEAR MMF PARITY DEVICE ACCESS FLAG
 CBIA     EQU    *-3         (BIT NUMBER FOR DOWNED MAINFRAME)
          UJP    CBIX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
          QUAL   COMPTGB
 QUAL$    EQU    0           PREVENT FURTHER QUALIFICATION
 T5       EQU    EQ          USE *EQ* AS EST ORDINAL IN *COMPTGB* 
*CALL     COMPTGB 
          QUAL   *
 TGB      EQU    /COMPTGB/TGB 
          SPACE  4,10 
 MBUF     BSS    0
          TITLE  PRESET.
 PRS      SPACE  4,10 
**        PRS - PRESET PROGRAM. 
* 
*         EXIT   (ID) = MID OF THIS MACHINE.
*                (LK) = EST ORDINAL OF LINK DEVICE. 
*                (MD) = MACHINE INDEX OF DOWNED MACHINE.
*                (MK) = MACHINE MASK OF DOWNED MACHINE. 
*                (MI) = MID OF DOWNED MACHINE.
*                (AD) = FUNCTION CODE.
*                (QF) = 0.
*                (TW) = CONSTANT TWO. 
*                (SX) = CONSTANT SIX. 
*                (DT) = DAT / FAT TRACK.
*                (RE) = *ECSM* READ FUNCTION. 
*                (WE) = *ECSM* WRITE FUNCTION.
*                (DA - DA+1) = DEVICE ACCESS TABLE ADDRESS. 
*                (ET - ET+1) = ENVIRONMENT TABLE ADDRESS. 
* 
*         CALLS  AST, CEA, DAP, SCI.
* 
*         MACROS SFA. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          LDN    2
          STD    TW 
          LDD    IR+3 
          SHN    -6 
          STD    AD 
          SBN    /MRT/MFUN
          MJN    PRS0        IF LEGAL FUNCTION
          LDC    PRSA        * INCORRECT 1MR FUNCTION.* 
          LJM    ABT         ABORT
  
 PRS0     LDD    AD          CHECK FUNCTION CODE
          LMN    /MRT/PMT 
          ZJN    PRS0.1      IF *PMT* FUNCTION
          LMN    /MRT/UMT&/MRT/PMT
          ZJN    PRS0.1      IF *UMT* FUNCTION
          ISTORE SCIA,(UJN SCIX)  DISABLE *CMS* INTERLOCK CODE
          LJM    PRS3        READ MULTIMAINFRAME INFORMATION
  
*         WAIT FOR *CMS* TO COMPLETE. 
  
 PRS0.1   LDC    FEAF*10000+MSSI
          RJM    AST         CHECK FOR *CMS* ACTIVE 
          ZJN    PRS2        IF *CMS* NOT ACTIVE
          RJM    DAP         DELAY AND PAUSE
          NJN    PRS1        IF NO ERROR FLAG SET 
          STD    CM          CLEAR MESSAGE
          LDD    CP 
          ADK    MS2W 
          CWD    CM 
          LJM    MRP2        DROP PP
  
 PRS1     LDD    CP          * WAITING FOR *CMS* TO FINISH.*
          ADK    MS2W 
          CWM    PRSC,TR
          LDN    ZERL 
          CRD    CM 
          LDD    MA 
          CWD    IR 
          MONITOR  RECM      RECALL *1MR* 
          LJM    PPR         RETURN TO RESIDENT 
  
 PRS2     STD    CM          CLEAR MESSAGE
          LDD    CP 
          ADK    MS2W 
          CWD    CM 
          RJM    SCI         SET *CMS* INTERLOCK
*         LDN    0
          STD    QF 
          LDN    LDOS        SET TO DECREMENT ACTIVITY COUNT
          STM    SCIB 
  
*         READ MULTIMAINFRAME INFORMATION.
  
 PRS3     LDK    MMFL        READ LINK DEVICE EST ORDINAL 
          CRD    CM 
          LDD    CM          STORE MID OF THIS MACHINE
          STD    ID 
          LDD    CM+3        SET MACHINE MASK 
          STM    RDIA 
          LDD    CM+1        CHECK FOR SHARED BUFFERED DEVICES
          SHN    21-11
          MJN    PRS3.1      IF SHARED BUFFERED DEVICES DEFINED 
          AOM    PRSE        DISABLE SHARED BUFFERED DEVICE PROCESSING
 PRS3.1   LDD    CM+1        STORE EST ORDINAL OF LINK DEVICE 
          LPC    777
          STD    LK          SET LINK EST ORDINAL 
          STM    CFIA 
          ZJN    PRS4        IF NO LINK DEVICE
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CN 
          LDD    CN+4        READ MST TO OBTAIN LABEL TRACK 
          SHN    3
          ADN    ALGL 
          CRD    CN 
          LDD    CN+4        SET DAT/FAT TRACK
          STD    DT 
          LDD    CN+1        SET LABEL TRACK
          STD    T6 
          LDN    /MMF/ETLT   SET ENVIRONMENT TABLE SECTOR 
          STD    T7 
          RJM    CEA         CONVERT TO EXTENDED MEMORY ADDRESS 
          LDD    CM+3 
          STD    ET 
          LDD    CM+4 
          STD    ET+1 
          LDD    DT          SET DAT/FAT TRACK ADDRESS
          STD    T6 
          LDN    0
          STD    T7 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDD    CM+4 
          STD    DA+1 
          LDD    CM+3 
          STD    DA 
 PRS4     LDD    AD 
          LMN    /MRT/CDV 
          NJN    PRS5        IF NOT CLEAR DEVICE INTERLOCK FUNCTION 
          LDD    IR+4 
          UJN    PRS6        SET MACHINE INDEX OF DOWNED MACHINE
  
 PRS5     LDD    RA          SET MACHINE INDEX OF DOWNED MACHINE
          SHN    6
          ADC    /MRT/MASK
          CRD    CM 
          LDD    CM+4 
 PRS6     STD    MD 
          ADN    GPDA-1      SET BIT NUMBER FOR *CMSTF* REQUEST 
          LMC    LCNI 
          STM    CBIA 
          LDM    PRSB-1,MD   SET MASK OF DOWNED MACHINE 
          STD    MK 
          LDD    CM          SET MID OF DOWNED MACHINE
          STD    MI 
          LDN    6
          STD    SX 
          LDC    RECS*1000
          STD    RE 
          LDC    WECS*1000
          STD    WE 
 PRSE     LDN    0
*         LDN    1           (SHARED BUFFERED DEVICES NOT DEFINED)
          NJN    PRS7        IF SHARED BUFFERED DEVICES NOT DEFINED 
          LDD    ET+1 
          ADN    /MMF/BAET   SET ADDRESS OF ENVIRONMENT TABLE WORD
          STD    CM+4 
          SHN    -14
          ADD    ET 
          ADD    RE 
          STD    CM+3 
          LDN    1-1         READ ONE WORD FROM EXTENDED MEMORY 
          RJM    ECS
          LDD    MA 
          CRD    CM 
          LDD    CM+1        SET *BDT* FIRST TRACK
          STM    ABEA 
  
*         CHECK FOR ISD ENVIRONMENT.
  
 PRS7     LDM    PRSD,AD     SET ADDRESS OF FUNCTION PROCESSOR
          STM    MRPA 
          LDD    LK 
          NJP    MRP         IF EXTENDED MEMORY MMF 
          LDC    MRP
          STM    EXR         SET RETURN ADDRESS 
          EXECUTE  2MR,*
          LJM    EXR+1       LOAD ISD MMF SUBROUTINES 
  
  
 PRSA     DATA   C* INCORRECT 1MR FUNCTION.*
  
  
*         TABLE OF MACHINE MASKS (INDEXED BY MACHINE INDEX).
  
 PRSB     BSS    0
 .1       SET    1
          DUP    MXMF,2 
          CON    .1 
 .1       SET    .1+.1
  
  
 PRSC     DATA   30L WAITING FOR *CMS* TO FINISH. 
  
  
*         TABLE OF FUNCTION PROCESSOR ADDRESSES.
  
 PRSD     INDEX 
          INDEX  /MRT/RDI,RDI  RETRIEVE DISPLAY INFORMATION 
          INDEX  /MRT/PMT,PMT  PROCESS DAT, FAT, MRT-S
          INDEX  /MRT/UMT,UMT  UPDATE MST ENTRIES IN CM 
          INDEX  /MRT/CDV,CDV  CLEAR DEVICE INTERLOCKS
          INDEX  /MRT/PRB,PRB  PROCESS RESERVES AND BAT-S 
          INDEX  /MRT/MFUN
          SPACE  4,10 
*         PRESET COMMON DECKS.
  
  
*CALL     COMPAST 
          SPACE  4,10 
          OVERFLOW
          TTL    1MR/2MR - PROCESS ISD RECOVERY.
          TITLE  ISD MMF SUBROUTINES. 
          IDENT  2MR,OVLA 
*COMMENT  1MR - PROCESS ISD RECOVERY. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       2MR - PROCESS ISD RECOVERY. 
*         D. K. ELDRED.      82/12/01.
          SPACE  4,10 
***       ISD MMF SUBROUTINES.
* 
*         THE FOLLOWING CODE IS USED ONLY FOR ISD MMF ENVIRONMENTS. 
*         IT OVERLAYS THE EXTENDED MEMORY MMF SUBROUTINES IN *1MR*. 
  
  
          ORG    OVLA 
  
 TMR      SUBR               ENTRY/EXIT 
          UJN    TMRX        RETURN 
 CTC      SPACE  4,15 
**        CTC - COPY DISK TABLES TO CENTRAL MEMORY. 
* 
*         ENTRY  (T3) = MST POINTER.
*                (T5) = EST ORDINAL.
*                (T6) = LABEL TRACK.
*                (CT) = LAST TRT SECTOR + 1.
*                (WB+2) = TRT LENGTH. 
*                (WB+3) = LABEL SECTOR NUMBER.
* 
*         USES   CT, T7, WB, WB+1.
* 
*         CALLS  CAT, RDS.
  
  
 CTC1     LDD    WB+2        ADJUST WORD COUNT
          LPN    77 
          ZJN    CTCX        IF END OF TRT ON SECTOR BOUNDARY 
          STD    WB 
 CTC2     LDC    BUFS        READ SECTOR OF TRT DATA
          RJM    RDS
          LDD    T3          SET MST POINTER TO TRT 
          SHN    3
          ADN    TRLL        CALCULATE TRT ADDRESS
          RJM    CAT
          ADD    WB+1        WRITE TRT DATA TO CENTRAL MEMORY 
          CWM    BUFS+2,WB
          LDD    HN          ADVANCE TRT OFFSET 
          RAD    WB+1 
 CTC3     AOD    T7          ADVANCE SECTOR NUMBER
          SBD    CT 
          MJN    CTC2        IF ANOTHER FULL SECTOR 
          ZJN    CTC1        IF PARTIAL SECTOR
  
 CTC      SUBR               ENTRY/EXIT 
          LDN    0
          STD    WB+1        INITIALIZE TRT OFFSET
          LDD    HN 
          STD    WB          SET FULL SECTOR WORD COUNT 
          LDD    WB+3 
          STD    T7          SET LABEL SECTOR 
          SOD    CT 
          UJN    CTC3        COPY TRT 
 CUC      SPACE  4,10 
**        CUC - COMPARE UPDATE COUNTS.
* 
*         ENTRY  (A) = ADDRESS OF COUNTER IN *BFMS* BUFFER. 
*                (BUFS) = TRT / MRT SECTOR. 
* 
*         EXIT   (A) = 0 IF COUNTS MATCH. 
* 
*         USES   T1.
  
  
 CUC      SUBR               ENTRY/EXIT 
          STD    T1 
          LDI    T1          COMPARE UPDATE COUNTS
          LMM    BUFS+2+5*77+2
          NJN    CUCX        IF NO MATCH
          LDM    1,T1 
          LMM    BUFS+2+5*77+3
          NJN    CUCX        IF NON-MATCHING COUNTS 
          LDM    2,T1 
          LMM    BUFS+2+5*77+4
          SCN    77 
          UJN    CUCX        RETURN 
 PFA      SPACE  4,15 
**        PFA - PROCESS FAST ATTACH FOR ISD.
* 
*         ENTRY  (TC) = MACHINE INDEX*5.
*                SYSTEM SECTOR IN BFMS. 
* 
*         EXIT   (A) = 0 IF REWRITE SYSTEM SECTOR.
* 
*         CALLS  USC. 
* 
*         USES   T2.
  
  
 PFA3     LDN    1           SET NO SYSTEM SECTOR REWRITE 
  
 PFA      SUBR               ENTRY/EXIT 
          LDM    UCSS,TC
          SHN    21-2 
          PJN    PFA3        IF NO ENTRY FOR DOWNED MACHINE 
          SHN    -21+2+22 
          LPN    1
          STD    T2 
          RJM    USC         UPDATE SYSTEM SECTOR COUNTS
          LDN    0           PRESET COUNTER 
          STD    T2 
 PFA1     LDM    UCSS+5,T2
          NJN    PFA2        IF FILE STILL BEING ACCESSED 
          LDN    5           ADVANCE COUNTER
          RAD    T2 
          LMC    /MMF/MMPF*5
          NJN    PFA1        IF NOT ALL MAINFRAMES CHECKED
          STM    FISS        CLEAR FAST ATTACH STATUS 
          LDC    PMFT*100    RESET FILE TYPE
          STM    FNSS+4 
 PFA2     LDN    0           SET TO REWRITE SYSTEM SECTOR 
          UJN    PFAX        RETURN 
 RMI      SPACE  4,10 
**        RMI - RELEASE MST INTERLOCKS. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (MD) = DOWNED MACHINE INDEX. 
* 
*         EXIT   TO *MSR* IF LABEL SECTOR ERROR.
* 
*         USES   T6, T7, CM - CM+4. 
  
*         CALLS  CDC, CLC, CTC, C2D, DAP, RSC, UDT, VDT, WDS. 
* 
*         MACROS ENDMS, SETMS.
  
  
 RMI      SUBR               ENTRY/EXIT 
          LDD    T5          CONVERT UPPER DIGIT OF EST ORDINAL 
          SHN    -6 
          ADC    2RQ0 
          STM    RMIB+1 
          LDD    T5          CONVERT LOWER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    RMIB+2 
          SETMS  IO,(NS,DE,RW)
          LDD    CM+4        SET MST ADDRESS
          STD    T3 
          SHN    3
          ADN    ALGL        READ DEVICE ALLOCATION WORD
          CRD    CM 
          LDD    CM+1        SET LABEL TRACK
          STD    T6 
          LDN    /MMF/LSLT
          STD    T7 
          LDD    CP          WRITE MESSAGE TO B-DISPLAY 
          ADN    MS2W 
          CWM    RMIB,TR
 RMI1     LDC    BFMS        READ LABEL SECTOR
          RJM    RSC
          RJM    VDT         VERIFY DISK TABLES 
          ZJN    RMI2        IF RESERVE HELD BY DOWN MACHINE
          MJN    RMI4        IF DEVICE NOT INTERLOCKED
          ENDMS 
          RJM    DAP         DELAY
          NJP    RMI1        IF NO OPERATOR DROP
          LJM    ERR         PROCESS OPERATOR DROP
  
 RMI2     LDD    WB+3 
          ZJN    RMI3        IF PRIMARY MRT CURRENT 
          LDN    0
          SBD    WB+3        SET PRIMARY MRT SECTOR 
          RAD    T7 
          LDC    BUFS        COPY MRT TO PRIMARY LOCATION 
          RJM    WDS
 RMI3     LDM    N4SS+5*SDGL+4
          SCN    77          CLEAR DOWN MACHINE INTERLOCK 
          SHN    -1 
          LMD    WB+4        SET THIS MACHINE-S INTERLOCK 
          SHN    1
          STM    N4SS+5*SDGL+4
          LDN    /MMF/LSLT   SET PRIMARY LABEL SECTOR 
          STD    T7 
          RJM    CLC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
 RMI4     LDD    MD 
          SHN    2           DOWN MACHINE INDEX * 5 
          ADD    MD 
          ADC    DISS-5      SET DIT ENTRY ADDRESS
          STD    T0 
          STM    RMIA 
          LDI    T0          EXTRACT ACTIVITY COUNT 
          LPN    77 
          LMC    -0          DECREMENT PFM ACTIVITY COUNT 
          RAM    N4SS+TDGL*5+1
  
*         CLEAR PF INTERLOCK AND INSTALL INTERLOCK IF HELD
*         BY DOWN MACHINE.
  
          LDI    T0 
          LPC    300
          LMM    N4SS+5*TDGL+1  CLEAR PF AND INSTALL INTERLOCKS 
          STM    N4SS+5*TDGL+1
          LDN    ZERL        CLEAR DIT ENTRY
          CRM    **,ON
 RMIA     EQU    *-1
          LDN    /MMF/LSLT   SET PRIMARY LABEL SECTOR 
          STD    T7 
          RJM    CDC         COMPUTE LABEL CHECKSUM 
          STM    CKSS 
          LDC    BFMS+WLSF   WRITE LABEL SECTOR 
          RJM    WDS
          PJN    RMI6        IF NO WRITE ERROR
          LDN    /MRT/WER    SET WRITE ERROR
          LJM    MSR         RETURN ERROR TO *MREC* 
  
 RMI6     LDD    WB 
          NJN    RMI8        IF NOT UPDATING TABLES IN CM 
          AOM    N4SS+5*SDGL+4
          LDD    T3          CALCULATE FWA OF TRT 
          SHN    3
          ADK    TDGL        SET DEVICE INTERLOCK IN CM 
          CWM    N4SS,TR
          RJM    CTC         COPY TRT TO CENTRAL MEMORY 
          ENDMS 
          RJM    UDT         UPDATE DEVICE INFORMATION TABLE
          LDN    CDIS 
          STD    CM+3        SET *STBM* SUBFUNCTION 
          LDD    T5 
          STD    CM+1        REBUILD TABLES ON DISK 
          MONITOR  STBM 
 RMI8     ENDMS              RELEASE MASS STORAGE RESOURCES 
*         LDN    0
          STD    CM 
          LDD    CP 
          ADN    MS2W        CLEAR MESSAGE
          CWD    CM 
          LJM    RMIX        RETURN 
  
  
 RMIB     DATA   C* EQXXX, CLEARING MST INTERLOCKS.*
 SDM      SPACE  4,15 
**        SDM - CHECK DEVICE SHARED TO DOWN MF. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (MI) = MID OF DOWN MAINFRAME.
* 
*         EXIT   (A) = 0, DEVICE SHARED TO DOWN MF. 
*                    = 1, DEVICE NOT SHARED TO DOWN MF. 
*                (MD) = MACHINE INDEX.
* 
*         USES   RE, T6, CM - CM+4. 
* 
*         MACROS SFA. 
* 
*         CALLS  CAT. 
  
  
 SDM      SUBR               ENTRY/EXIT 
          SFA    EST,T5 
          ADK    EQDE        READ EST ENTRY 
          CRD    CM 
          LDD    CM          CHECK DEVICE ATTRIBUTES
          LPC    4120 
          LMC    4020 
          NJN    SDM2        IF NOT MASS STORAGE / AVAILABLE / ISD
          LDD    CM+4 
          STD    RE          SAVE MST ADDRESS / 10
          SHN    3
          ADK    TDGL        FETCH TRT LENGTH 
          CRD    CM 
          LDD    CM+2        DETERMINE LENGTH OF MRT
          ADN    7
          SHN    -3 
          ADD    CM+2        ADD LENGTH OF THE TRT
          SBN    1
          STD    T6          SET DIT OFFSET 
          LDN    /MMF/MMPF
          STD    MD          MAXIMUM MACHINE CONFIGURATION
 SDM1     LDD    RE 
          SHN    3
          ADN    TRLL 
          RJM    CAT         CALCULATE FWA OF TRT 
          ADD    T6 
          ADD    MD 
          CRD    CM          READ DIT ENTRY 
          LDD    CM+4 
          LMD    MI 
          ZJN    SDM3        IF MATCHING MACHINE ID-S 
          SOD    MD 
          NJN    SDM1        IF MORE TO CHECK 
 SDM2     LDN    1
 SDM3     LJM    SDMX        RETURN 
 UDT      SPACE  4,10 
**        UDT - UPDATE DEVICE INFORMATION TABLE IN CM.
* 
*         ENTRY  (T3) = MST POINTER.
*                (WB+2) = TRT LENGTH. 
*                (BFMS) = LABEL SECTOR. 
* 
*         USES   T1, WB+2.
* 
*         CALLS  CAT. 
  
  
 UDT      SUBR               ENTRY/EXIT 
          LDN    /MMF/MISD
          STD    T1          DIT LENGTH 
          LDD    WB+2 
          ADN    7           CALCULATE DIT OFFSET 
          SHN    -3 
          RAD    WB+2        APPEND MRT LENGTH TO TRT LENGTH
          LDD    T3 
          SHN    3
          ADN    TRLL        CALCULATE FWA OF TRT 
          RJM    CAT
          ADD    WB+2        COPY DIT TO CENTRAL MEMORY 
          CWM    DISS,T1
          UJN    UDTX        RETURN 
 VDT      SPACE  4,25 
**        VDT - VERIFY DISK TABLES. 
* 
*         ENTRY  (MD) = DOWN MACHINE INDEX FOR SPECIFIED DEVICE.
*                (T3) = MST POINTER.
*                (T5) = EST ORDINAL.
*                (T6) = LABEL TRACK.
*                (T7) = 0.
*                (BFMS) = FIRST LABEL SECTOR. 
* 
*         EXIT   (A) .LT. 0 IF DEVICE NOT INTERLOCKED.
*                    .GT. 0 IF INTERLOCK HELD BY ACTIVE MACHINE.
*                    .EQ. 0 IF INTERLOCK HELD BY DOWN MACHINE.
*                (T7) = MRT SECTOR NUMBER IF TABLES VERIFIED. 
*                (WB) = 0 IF DEVICE INTERLOCK HELD BY DOWN MACHINE. 
*                (WB+2) = TRT LENGTH. 
*                (WB+3) = LABEL SECTOR NUMBER IF TABLES VERIFIED. 
*                (WB+4) = THIS MACHINE INDEX FOR SPECIFIED DEVICE.
*                (BFMS) = LABEL SECTOR. 
*                (BUFS) = MRT SECTOR IF DOWN MACHINE HAS INTERLOCK. 
* 
*         USES   CT, CM - CM+4, WB - WB+4.
* 
*         CALLS  CLC, CTC, CUC, RSC.
* 
*         MACROS ENDMS. 
  
  
 VDT8     LCN    1           INDICATE DEVICE NOT INTERLOCKED
  
 VDT      SUBR               ENTRY/EXIT 
          LDD    T3 
          SHN    3
          ADK    TDGL        FETCH TRT LENGTH 
          CRD    WB 
          ADN    DULL-TDGL   GET DEVICE USAGE WORD
          CRD    CM 
          LDD    CM+2        EXTRACT DIT ORDINAL
          LPN    17 
          ADN    1           SET MACHINE INDEX
          STD    WB+4 
          LDM    N4SS+5*SDGL+4  CHECK SOFTWARE RESERVE
          LPN    77 
          ZJN    VDT8        IF DEVICE NOT INTERLOCKED
          SHN    -1 
          LMD    MD          CHECK DEVICE HOLDING INTERLOCK 
          STD    WB 
          NJN    VDTX        IF NOT HELD BY DOWN MACHINE
 VDT1     STD    WB+3 
          RJM    CLC         COMPUTE LABEL CHECKSUM 
          LMM    CKSS 
          NJN    VDT3        IF CHECKSUM ERROR
  
*         READ ENTIRE TRT TO ENSURE NO DISK ERRORS FOR *CTC*. 
  
          AOD    T7          SET FIRST SECTOR OF TRT
          LDD    WB+2 
          SHN    -6          CALCULATE LAST SECTOR OF TRT 
          ADN    2
          ADD    WB+3        INCLUDE ALTERNATE TABLES BIAS
          STD    CT 
 VDT2     LDC    BUFS        READ TRT SECTOR
          RJM    RSC
          AOD    T7          ADVANCE SECTOR NUMBER
          LMD    CT 
          NJN    VDT2        IF NOT END OF TRT SECTOR 
  
*         VERIFY UPDATE COUNTS BETWEEN MST AND TRT. 
  
          LDC    N4SS+5*SDGL+2  COMPARE UPDATE COUNTS 
          RJM    CUC
 VDT3     NJN    VDT4        IF NON-MATCHING COUNTS 
          LDN    /MMF/MRTL-1
          ADD    MD 
          ADD    WB+3        SET MRT SECTOR OF DOWN MACHINE 
          STD    T7 
          LDC    BUFS        READ MRT SECTOR
          RJM    RSC
  
*         VERIFY UPDATE COUNTS BETWEEN DIT AND MRT. 
  
          LDD    MD          CALCULATE ADDRESS OF DIT ENTRY 
          SHN    2
          ADD    MD 
          ADC    /LSD/DISS-5+1  COMPARE UPDATE COUNTS 
          RJM    CUC
          ZJP    VDTX        IF MATCHING COUNTS 
 VDT4     LDD    WB+3 
          ZJN    VDT5        IF ALTERNATE LABEL NOT CHECKED 
          ENDMS 
          LJM    RSC1        PROCESS READ ERROR 
  
 VDT5     LDD    T3          READ MST 
          SHN    3
          ADN    DULL        SET ALTERNATE LABEL SECTOR 
          CRD    T7 
          LDC    BFMS        READ LABEL SECTOR
          RJM    RSC
          LDD    T7 
          LJM    VDT1        VERIFY ALTERNATE LABEL TABLES
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCLC 
          SPACE  4,5
          ERRNG  QBUF-*      CODE OVERFLOW INTO BUFFERS 
 SCP      SPACE  4,10 
**        SCP - SET / CLEAR PP PAUSE FLAG.
* 
*         ENTRY  (A) = 0 IF CLEARING PP PAUSE FLAG. 
*                    = 1 IF SETTING PP PAUSE FLAG.
* 
*         USES   CM - CM+4. 
  
  
 SCP      SUBR               ENTRY/EXIT 
          STD    T0 
          LDD    CP          FETCH SENSE SWITCH WORD
          ADN    SNSW 
          CRD    CM 
          LDD    CM+3        SET / CLEAR PAUSE FLAG 
          SCN    1
          LMD    T0 
          STD    CM+3 
          LDD    CP          STORE SENSE SWITCH WORD
          ADN    SNSW 
          CWD    CM 
          UJN    SCPX        RETURN 
          TITLE  FUNCTION 2 - UPDATE MST ENTRIES IN CM. 
 UMT      SPACE  4,10 
**        UMT - UPDATE MST ENTRIES IN CM.  (FUNCTION 2) 
* 
*         EXIT   MST-S FOR INDEPENDENT SHARED DEVICES UPDATED IN CM.
* 
*         USES   T1, T5, T6, WB+2, CM - CM+4, CN - CN+4.
* 
*         CALLS  C2D, RLS, SCP, SDM, UDT, VDT.
* 
*         MACROS DELAY, EXECUTE, SFA. 
  
  
 UMT8     LDN    0           CLEAR PP PAUSE FLAG
          RJM    SCP
  
 UMT      SUBR               ENTRY/EXIT 
          EXECUTE  2MS
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    T5 
          LDN    0           CLEAR TRACK POINTER (FOR *STB*)
          STD    T6 
          LDN    ESTP        GET EST POINTERS 
          CRD    CN 
 UMT1     AOD    T5          ADVANCE EST ORDINAL
          LMD    CN+3 
          ZJN    UMT8        IF END OF MASS STORAGE DEVICES 
          RJM    SDM
          NJN    UMT1        IF NOT AVAILABLE ISD SHARED WITH DOWN MF 
          LDD    T5 
          SHN    -6 
          ADC    2RQ0        CONVERT UPPER DIGIT OF EST ORDINAL 
          STM    UMTA+1 
          STM    UMTB+1 
          LDD    T5          CONVERT LOWER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    UMTA+2 
          STM    UMTB+2 
          LDN    1           SET PP PAUSE FLAG
          RJM    SCP
 UMT2     RJM    RLS         READ LABEL SECTOR
          NJN    UMT4        IF READ ERRORS 
          RJM    VDT         VERIFY DISK TABLES 
          ENDMS 
          RJM    UDT         UPDATE DIT IN CENTRAL MEMORY 
 UMT3     LJM    UMT1        PROCESS NEXT EST ENTRY 
  
 UMT4     LPN    77          EXTRACT ERROR CODE 
          LMN    CRSE 
          NJN    UMT5        IF CONTROLLER NOT RESERVED 
          LDD    T4 
          RJM    C2D         CONVERT CHANNEL FOR MESSAGE
          STM    UMTA+5 
          LDD    CP          WRITE MESSAGE TO B-DISPLAY 
          ADN    MS2W 
          CWM    UMTA,TR
          UJN    UMT6        CHECK FOR CLEARED PP PAUSE FLAG
  
 UMT5     LMN    RESE&CRSE
          NJP    RSC1        IF UNIT NOT RESERVED 
          LDM    RLSA+5 
          STM    UMTB+5      SET UNIT NUMBER IN MESSAGE 
          LDD    CP 
          ADN    MS2W        COPY MESSAGE TO B-DISPLAY
          CWM    UMTB,TR
 UMT6     DELAY 
          LDD    CP          READ SENSE SWITCH WORD 
          ADN    SNSW 
          CRD    CM 
          LDD    CM+3        CHECK FOR PAUSE FLAG CLEARED 
          SHN    21-0 
          MJP    UMT2        IF *GO* COMMAND NOT ISSUED 
 UMT7     LJM    UMT1        PROCESS NEXT EST ENTRY 
  
  
 UMTA     DATA   C* EQXXX, CHYY, CONTROLLER RESERVED.*
 UMTB     DATA   C* EQXXX, UNYY, UNIT RESERVED.*
          SPACE  4,10 
 E2MR     BSS    0           END OF ISD RECOVERY CODE 
          OVERFLOW  OVLA
  
 OVLB     MAX    E1MR+5,E2MR+5  *2MS* LOAD ADDRESS
          TTL    1MR/2MS - HARDWARE RESERVE ROUTINES. 
          TITLE  COMMON SUBROUTINES.
          IDENT  2MS,OVLB 
*COMMENT  1MR - HARDWARE RESERVE ROUTINES.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       2MS - HARDWARE RESERVE ROUTINES.
  
          ORG    OVLB 
  
  
 TMS      SUBR               ENTRY/EXIT 
          UJN    TMSX        RETURN AFTER LOAD
 RES      SPACE  4,15 
**        RES - PROCESS UNIT AND CONTROLLER RESERVES. 
* 
*         ENTRY  (IR+3 - IR+4) = FWA OF TABLE OF DEVICES TO RECOVER.
* 
*         EXIT   RETURN TO *MREC* FOR OPERATOR ACTION IF THERE IS 
*                A UNIT OR CONTROLLER RESERVE WHICH CANNOT BE CLEARED.
* 
*         USES   SC, T5, T6, CM - CM+4, CN -CN+4. 
* 
*         CALLS  CAA, CBW, RLS, SDM, *0RI*. 
* 
*         MACROS  EXECUTE.
  
  
 RES      SUBR               ENTRY/EXIT 
          EXECUTE 0RI,BUFS+1
          STM    RESA        SET PROCESSOR ADDRESS
          LCN    0
          STD    SC 
 RES1     AOD    SC          ADVANCE TABLE INDEX
          RJM    CAA
          ADD    SC          READ TABLE ENTRY FOR NEXT SHARED DEVICE
          CRD    CN 
          LDD    CN+4        SET EST ORDINAL
          STD    T5 
          ZJN    RESX        IF END OF DEVICES TO RECOVER 
          LDD    CN+3 
          ZJN    RES2        IF NOT ISD 
          RJM    SDM
          NJN    RES1        IF NOT SHARED WITH DOWN MF 
 RES2     LDD    CN 
          ZJN    RES3        IF DEVICE HAS NOT YET BEEN PROCESSED 
          SBN    /MRT/REL 
          MJN    RES1        IF IGNORE OR DEVICE ALREADY PROCESSED
 RES3     RJM    CBW         CLEAR BAT WRITE PERMISSIONS
          RJM    RLS         READ LABEL SECTOR
          ZJN    RES4        IF NO ERRORS 
          LPN    77 
          LMN    CRSE 
          ZJN    RES7        IF CONTROLLER RESERVED 
          LMN    RESE&CRSE
          ZJN    RES5        IF UNIT RESERVED 
 RES4     LDN    /MRT/PRO    SET DEVICE PROCESSED 
          STD    CN 
          RJM    CAA         WRITE ENTRY BACK TO TABLE
          ADD    SC 
          CWD    CN 
          LJM    RES1        CHECK NEXT EQUIPMENT 
  
 RES5     LDD    BI          CHECK EQUIPMENT TYPE 
          SHN    21-7 
          PJN    RES8        IF NOT *LDAM* EQUIPMENT
          LDD    CN          CHECK FOR RELEASE REQUESTED
          SBN    /MRT/REL 
          NJN    RES8        IF OPERATOR DID NOT SELECT RELEASE 
          STD    CN 
          RJM    *           EXECUTE *0RI* TO RELEASE RESERVE 
 RESA     EQU    *-1
          UJN    RES3        RECHECK RESERVE
  
 RES7     LDD    T4          RETURN CHANNEL NUMBER
          STD    CN+1 
          LDN    /MRT/CRS    SET CONTROLLER RESERVED
          UJN    RES9        CONTINUE 
  
 RES8     LDN    /MRT/URS    SET UNIT RESERVED
 RES9     STD    CN+4 
          LDD    T5          SET EQUIPMENT
          STD    CN+3 
          LDD    SC          SET INDEX INTO DEVICE TABLE
          STD    CN+2 
          LDN    0
          STD    CN 
          LDD    RA          RETURN ERROR WORD TO *MREC*
          SHN    6
          ADC    /MRT/ERRW
          CWD    CN 
          LJM    DROP        DROP PP
 CBW      SPACE  4,10 
**        CBW - CLEAR BAT WRITE ACCESS PERMISSIONS. 
* 
*         ENTRY  (T5) = EST ORDINAL FOR DEVICE. 
*                (MD) = MACHINE INDEX OF DOWNED MACHINE.
* 
*         USES   CM - CM+4, WB - WB+4.
* 
*         MACROS MONITOR, SFA.
  
  
 CBW      SUBR               ENTRY/EXIT 
          SFA    EST,T5      SET DEVICE PARAMETERS
          ADK    EQDE 
          CRD    WB 
          LDD    WB 
          SHN    21-11
          PJN    CBWX        IF NOT ECS MMF SHARED DEVICE 
          SHN    21-5-21+11 
          PJN    CBWX        IF NOT SHARED BUFFERED DEVICE
          LDN    ZERL 
          CRD    CM 
          LDD    MD          SET MACHINE INDEX OF DOWNED MACHINE
          STD    CM+2 
          LDD    T5          SET EST ORDINAL
          STD    CM+4 
          LDN    CBWS        CLEAR BAT WRITE ACCESS PERMISSIONS 
          STD    CM+1 
          MONITOR  MTEM 
          UJN    CBWX        RETURN 
 CLU      SPACE  4,10 
**        CLU - CLEAR UTILITY / DEVICE INTERLOCKS.
* 
*         USES   SC, CM - CM+4, CN - CN+4, T2 - T7. 
* 
*         CALLS  CEA, ECS, RSC, WSC.
* 
*         MACROS ENDMS, SETMS.
  
  
 CLU      SUBR               ENTRY/EXIT 
          LDD    ET+1 
          ADN    /MMF/DAET   SET ADDRESS OF ENVIRONMENT TABLE WORD
          STD    CM+4 
          SHN    -14
          ADD    ET 
          ADD    RE 
          STD    CM+3 
          LDN    1-1         READ ONE WORD FROM EXTENDED MEMORY 
          RJM    ECS
*         LDN    0           SET FIRST SECTOR 
          STD    T7 
          LDD    MA          GET WORD FROM CM BUFFER
          CRD    CM 
          LDD    CM+4        NUMBER OF WORDS IN DAT 
          SHN    -1 
          STD    SC          NUMBER OF DAT ENTRIES
          LDD    DT          SET DAT TRACK
          STD    T6 
          LDD    LK          READ FIRST SECTOR OF DAT 
          STD    T5 
          SETMS  IO,RW
 CLU1     LDC    BFMS        READ EXTENDED MEMORY SECTOR
          RJM    RSC
          LDN    100/2       SET NUMBER OF DAT ENTRIES
          STD    T2 
          LDN    1           SKIP HEADER BYTES
          STD    T3 
 CLU2     LDN    12          INCREMENT POSITION IN BUFFER 
          RAD    T3 
          LDM    BFMS-11,T3 
          ZJN    CLU4        IF HOLE
          LDM    BFMS,T3
          LMD    MK 
          NJN    CLU4        IF NOT ONLY DOWNED MACHINE USING DEVICE
*         LDN    0
          STM    BFMS,T3     CLEAR STATUS BYTE
          LDM    BFMS-5,T3
          NJN    CLU6        IF SHARED DEVICE 
*         LDN    0
          STM    BFMS-11,T3  CLEAR *DAT* ENTRY
 CLU4     SOD    SC 
          NJN    CLU5        IF MORE DAT ENTRIES
*         LDN    0
          RJM    WSC         REWRITE SECTOR 
          ENDMS 
          LJM    CLUX        RETURN 
  
 CLU5     SOD    T2 
          NJN    CLU2        IF NOT END OF SECTOR 
*         LDN    0
          RJM    WSC         REWRITE SECTOR 
          AOD    T7 
          LJM    CLU1        READ NEXT SECTOR 
  
*         CLEAR INTERLOCKS IN *ACGL* AND *SDGL*.
  
 CLU6     LDD    T7          SAVE DAT SECTOR
          STD    CN+1 
          LDD    T2          SAVE POSITION IN DAT 
          STD    CN 
          LDM    BFMS-5,T3   SET MST TRACK
          STD    T6 
          LDN    /MMF/MSST   SET MST SECTOR 
          STD    T7 
          LDC    BUFS        READ MST SECTOR
          RJM    RSC
          LDN    0           SET LOCAL AREA OFFSET
          STD    T1 
          LDD    MD          SET LOCAL AREA COUNT 
          STD    T2 
 CLU7     LDN    0           CLEAR LOCAL INTERLOCKS 
          STM    BUFS+2+5*DULL+1,T1 
          LDK    LLLL*5      ADVANCE OFFSET 
          RAD    T1 
          SOD    T2 
          NJN    CLU7        IF NOT END OF MACHINES 
*         LDN    0
          STM    BUFS+2+5*TDGL+1  CLEAR GLOBAL INTERLOCKS 
          LDM    BUFS+2+5*SDGL+4
          SCN    77          CLEAR SOFTWARE RESERVE 
          STM    BUFS+2+5*SDGL+4
          LDN    ZERL        CLEAR DEVICE DESCRIPTION 
          CRM    BUFS+2+5*PFGL,ON 
          LDM    BUFS+2+5*ACGL+4
          LPK    MGLAP
          LMK    MGUNL       SET GLOBAL UNLOAD
          STM    BUFS+2+5*ACGL+4
          LDC    BUFS        REWRITE MST SECTOR 
          RJM    WSC
          LDD    DT          RESTORE DAT TRACK
          STD    T6 
          LDD    CN+1        RESTORE DAT SECTOR 
          STD    T7 
          LDD    CN          RESTORE DAT POSITION 
          STD    T2 
          UJP    CLU4        PROCESS NEXT DAT ENTRY 
 RLS      SPACE  4,20 
**        RLS - READ LABEL SECTOR.
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF NO ERROR. 
*                    = (RDCT) IF ERROR. 
*                (T3) = MST POINTER.
*                (T6) = LABEL TRACK.
*                (BI) = BYTE 0 OF EST ENTRY FOR DEVICE. 
*                (CN+1) = PHYSICAL UNIT NUMBER IF UNIT RESERVED.
*                (BFMS) = FIRST LABEL SECTOR. 
* 
*         CALLS  C2D, RDS.
* 
*         USES   QS, T1, T7, CM - CM+4, WB - WB+4.
* 
*         MACROS ENDMS, SETMS.
  
  
 RLS      SUBR               ENTRY/EXIT 
          SETMS  IO,(NS,RR) 
          LDD    CM          SAVE BYTE 0 OF *EQDE* WORD 
          STD    BI 
          LDD    CM+4        SAVE MST POINTER 
          STD    T3 
          SHN    3
          ADN    ALGL        FETCH LABEL TRACK
          CRD    T6 
          ADN    MDGL-ALGL   GET SECTOR LIMITS
          CRD    CM 
          ADN    DDLL-MDGL   READ UNIT LIST 
          CRD    WB 
          LDD    T7          SET LABEL TRACK
          STD    T6 
          LDD    CM+1        EXTRACT SINGLE UNIT SECTOR LIMIT 
          LPC    3777 
          STD    QS 
          LDD    CM+4        SET LAST LABEL SECTOR
          SBD    QS 
          STD    T7 
          LDD    T5          CONVERT UPPER DIGIT OF EST ORDINAL 
          SHN    -6 
          ADC    2RQ0 
          STM    RLSA+1 
          LDD    T5          CONVERT LOWER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    RLSA+2 
          LDD    WB          EXTRACT UNIT COUNT 
          LPN    7
          LMN    7           INVERT COUNT 
          STD    WB 
  
*         READ LABEL SECTOR.
  
 RLS1     SHN    21-0        SET UNIT LIST INDEX
          STD    T1 
          SCN    3           MERGE BYTE FROM UNIT LIST
          LMM    WB+1,T1
          MJN    RLS2        IF UNIT PACKED LOW 
          SHN    -6 
 RLS2     LPN    77          EXTRACT UNIT NUMBER
          STD    CN+1 
          RJM    C2D
          STM    RLSA+5 
          LDD    CP          WRITE MESSAGE TO B-DISPLAY 
          ADN    MS2W 
          CWM    RLSA,TR
          LDC    BFMS        READ SECTOR
          RJM    RDS
          PJN    RLS4        IF NO ERROR
          LPN    77 
          LMN    CRSE 
          ZJN    RLS3        IF CONTROLLER RESERVED 
          LMN    RESE&CRSE
          NJN    RLS4        IF NOT UNIT RESERVED 
 RLS3     ENDMS 
*         LDN    0
          STD    CM 
          LDD    CP          CLEAR MESSAGE
          ADN    MS2W 
          CWD    CM 
          LDM    RDCT        SET ERROR STATUS 
          LJM    RLSX        RETURN 
  
*         ADVANCE TO NEXT UNIT OF MULTI-UNIT DEVICE.
  
 RLS4     LDD    T7          DECREMENT SECTOR ADDRESS 
          SBD    QS 
          MJN    RLS3        IF END OF UNITS
          STD    T7 
          AOD    WB 
          LJM    RLS1        LOOP FOR NEXT UNIT 
  
  
 RLSA     DATA   C* EQXXX, UNYY, CHECKING RESERVE.* 
 WSC      SPACE  4,10 
**        WSC - WRITE EXTENDED MEMORY SECTOR. 
* 
*         ENTRY  (A) = 0 IF DATA IN *BFMS*. 
*                (T4 - T7) = DRIVER PARAMETERS. 
* 
*         EXIT   TO *MSR* IF UNRECOVERED WRITE ERROR. 
* 
*         CALLS  WDS, MSR.
  
  
 WSC      SUBR               ENTRY/EXIT 
          NJN    WSC1        IF ALTERNATE BUFFER
          LDC    BFMS        SET BUFFER ADDRESS 
 WSC1     RJM    WDS         WRITE SECTOR 
          PJN    WSCX        IF NO ERROR
          LDN    /MRT/WER    SET LINK DEVICE WRITE ERROR
          LJM    MSR         PROCESS ERROR
  
  
          ERRNG  BUFS-*      CODE OVERFLOWS BUFFER
          TTL    1MR - MACHINE RECOVERY PROCESSOR.
          SPACE  4,10 
          END 
