1RM 
          IDENT  1RM,RDM
          PERIPH
          BASE   M
          SST 
          TITLE  1RM - REDEFINE MASS STORAGE. 
*COMMENT  1RM - REDEFINE MASS STORAGE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RDM      SPACE  4,10 
*****     1RM - REDEFINE MASS STORAGE.
* 
*         A. J. BEEKMAN.     77/04/25.
*         W. E. GOEBEL.      80/02/25.
* 
*         *1RM* PROVIDES FUNCTIONS USED IN THE REDEFINITION OR REPAIR 
*         OF 844 AND 885 TYPE MASS STORAGE DEVICES. 
          SPACE  4,10 
***       *1RM* USES PARAMETERS PASSED TO IT FROM THE CPU ROUTINE 
*         *CONFIG* (CONFIGURATION MONITOR) TO PERFORM OPERATIONS
*         WHICH CONTROL THE ON-LINE RECONFIGURATION OR REPAIR OF
*         844 AND 885 TYPE MASS STORAGE DEVICES.
          SPACE  4,10 
***       *1RM* PROCESSES THE FUNCTIONS AS DEFINED IN *COMS1RM*.
*         ALL *1RM* FUNCTIONS REQUIRE THAT THE CALLING JOB HAS MASS 
*         STORAGE SUBSYSTEM ID. 
* 
*         THE CALL TO *1RM* IS IN THE FOLLOWING FORM -
* 
*T IR     24/ *1RMP*,18/ KDMA,18/ ADDR
* 
*         ADDR = ADDRESS OF CALL BLOCK. 
*         KDMA = K-DISPLAY MESSAGE LINE ADDRESS.
* 
*                THE CALL BLOCK FORMAT IS DOCUMENTED IN *COMS1RM*.
          SPACE  4,10 
***       K-DISPLAY COMMANDS. 
* 
*         THE FOLLOWING COMMANDS ARE ENTERED IN RESPONSE TO AN
*         ERROR CONDITION DETECTED BY *1RM*.
* 
*         ABORT. THIS COMMAND IS ENTERED TO DISCONTINUE PROCESSING
*                OF THE CURRENT COMMAND IN PROGRESS.
* 
*         IGNORE.  THE ERROR CONDITION DETECTED BY *1RM* IS TO
*                BE IGNORED.  THIS COMMAND SHOULD BE USED WITH
*                DISCRETION.  IT SHOULD BE USED ONLY WHEN THE 
*                ERROR BEING POSTED IS WELL UNDERSTOOD AND
*                CAN LEGITIMATELY BE IGNORED. 
* 
*         NEXT.  THIS COMMAND IS ENTERED IN RESPONSE TO AN
*                885 SERVO TIMING CHECK WHEN THE TIMING DATA
*                IS IN THE REQUIRED RANGE.  ENTRY OF THIS 
*                COMMAND WILL CAUSE PROCESSING TO CONTINUE
*                WITH EITHER THE NEXT UNIT OR THE NEXT STEP 
*                OF PROCESSING. 
* 
*         RECHECK.  THIS COMMAND IS ENTERED TO RETRY A PROCESS
*                WHICH PREVIOUSLY GAVE AN ERROR.  IF THE ERROR
*                PERSISTS THE MESSAGE WILL BE POSTED AGAIN
*                WITH ANOTHER OPPORTUNITY FOR OPERATOR ACTION.
          SPACE  4,10 
***       K-DISPLAY OPERATOR MESSAGES.
* 
* 
*         THE FOLLOWING COMMANDS ARE POSTED ON THE K-DISPLAY BY 
*         *1RM*.  WHEN *1RM* DETECTS A CONDITION WHICH MAY BE 
*         RESPONDED TO BY THE OPERATOR, A MESSAGE IS POSTED AND 
*         THE LEGAL COMMANDS ARE POSTED ON THE K-DISPLAY.  THE
*         FOLLOWING LIST OF ERROR MESSAGES LISTS THOSE LEGAL
*         COMMANDS AND INDICATES IF AN OPERATOR RESPONSE IS 
*         REQUIRED OR OPTIONAL. 
* 
* 
*         UNIT XX, CHYY WRITE/READ VERIFY ERROR.
*                PART OF THE VALIDATION PROCEDURE WHEN RETURNING
*                AN EQUIPMENT FOR SYSTEM USE (CLEAR COMMAND) IS 
*                TO WRITE A SECTOR OF DATA TO THE DEVICE, READ IT 
*                BACK AND VERIFY THE DATA.  WHEN THIS VERIFICATION
*                FAILS THE ABOVE MESSAGE APPEARS. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         ERROR IN PERFORMING SERVO CHECK ON UNIT XX. 
*                THE SERVO ADJUSTMENT PROCEDURE HAS ENCOUNTERED 
*                A DISK ERROR CONDITION.
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         UNIT XX SERVO TIMING= XXX.  ACCEPTABLE RANGE IS 325 TO 345. 
*                WHEN RECONFIGURING AN 885 HDA A SERVO ADJUSTMENT 
*                PROCEDURE IS EXECUTED.  THIS PROCEDURE MEASURES
*                SERVO TIMING CHARACTERISTICS WHICH MUST BE IN THE
*                SPECIFIED RANGE.  A DRIVE ADJUSTMENT MUST BE MADE
*                BY A CE UNTIL THE TIMING IS IN THE SPECIFIED 
*                RANGE. 
*         COMMANDS - REQUIRED.
*                ABORT, RECHECK.
*                NEXT.  ONLY IF TIMING IS IN RANGE. 
*                IGNORE.  ONLY IF TIMING IS NOT IN RANGE. 
* 
* 
*         ERROR ON LINK DEVICE. 
*                WHEN A DEVICE IS SHARED BETWEEN MAINFRAMES THE 
*                LINK DEVICE IS READ TO SYNCHRONIZE PROCESSING
*                BETWEEN MACHINES.  WHEN AN ERROR OCCURS IN 
*                READING THE LINK DEVICE THIS ERROR MESSAGE 
*                IS ISSUED. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE. 
* 
* 
*         SPIN DOWN UNIT XX.
*                THIS IS A DIRECTIVE TO THE OPERATOR OR CE TO 
*                SPIN DOWN THE SPECIFIED UNIT IN PREPARATION
*                FOR MOVING THE PACK OR HDA.
*         COMMAND - OPTIONAL. 
*                ABORT, IGNORE. 
* 
* 
*         MOVE PACK FROM UNIT XX TO UNIT YY AND SPIN UP.
*                THIS DIRECTIVE IS ISSUED TO THE OPERATOR FOR 
*                EACH UNIT TO BE MOVED DURING A RECONFIGURATION.
*                UNIT XX HAS PREVIOUSLY BEEN DIRECTED TO BE 
*                SPUN DOWN AND ITS PACK OR HDA IS NOW TO BE 
*                MOVED TO UNIT YY.
*         COMMANDS - OPTIONAL.
*                ABORT, IGNORE. 
* 
* 
*         UNIT XX, CHYY LABEL READ ERROR. 
*                IN VERIFYING THAT THE CORRECT LABEL IS PRESENT 
*                ON UNIT XX A DISK ERROR OCCURRED WHICH PREVENTED 
*                THE LABEL FROM BEING READ SUCCESSFULLY.
*                THE CHANNEL IS SPECIFIED IN THE MESSAGE AND
*                MAY BE HELPFUL IF THE VERIFY ERROR OCCURS
*                ONLY FROM A SINGLE CHANNEL IN A DUAL ACCESS
*                CONFIGURATION. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         UNIT XX, CHYY LABEL VERIFICATION ERROR. 
*                THE LABEL SECTOR WAS READ BUT THE DATA IN THE
*                LABEL SECTOR IS NOT CORRECT. 
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE, RECHECK.
* 
* 
*         WAITING FOR MACHINE ID=XX.
*                A SHARED DEVICE IS BEING PROCESSED AND IT HAS
*                BEEN DETECTED THAT MACHINE IDXX IS NOT AT THE
*                SAME STAGE OF PROCESSING AS THIS MACHINE.
*         COMMANDS - REQUIRED.
*                ABORT, IGNORE. 
* 
* 
*         COMMAND ABORTED.
*                INFORMATIVE MESSAGE STATING THAT THE ATTEMPTED 
*                COMMAND WAS ABORTED AND ALL VALUES FOR THE CURRENT 
*                EQUIPMENT BEING PROCESSED HAVE BEEN RESET TO THEIR 
*                ORIGINAL VALUE.
*         COMMANDS - NONE.
* 
* 
*         UNIT XX SERVO TIMING IN PROGRESS. 
*                INFORMATIVE MESSAGE STATING THAT ADJUSTMENTS ARE 
*                BEING MADE ON THE SERVO TIMING.
*         COMMANDS - NONE.
* 
* 
*         EQXXX, REDEFINITION COMPLETE. 
*                NORMAL COMPLETION MESSAGE. 
* 
* 
*         EQXXX, SYSTEM USAGE OF DEVICE SUSPENDED.
*                INFORMATIVE MESSAGE STATING THAT DEVICE USAGE HAS
*                BEEN SUSPENDED AS REQUESTED. 
*         COMMANDS - NONE.
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         * 1RM INCORRECT REQUEST.* = INCORRECT FUNCTION CODE OR STATUS 
*         WORD ADDRESS OUT OF RANGE.
* 
*         * 1RM USER ACCESS NOT VALID.* = CALLING JOB NOT MASS STORAGE
*         SUBSYSTEM QUEUE PRIORITY. 
          SPACE  4,10 
**        ROUTINES USED.
* 
*         0SI - SERVO TIMING. 
          SPACE  4
**        COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMSCPS 
          QUAL   DSL
*CALL     COMSDSL 
          QUAL   *
*CALL     COMSEVT 
*CALL     COMSLSD 
*CALL     COMSMMF 
*CALL     COMSMSP 
*CALL     COMSMST 
*CALL     COMSPIM 
*CALL     COMSPRD 
*CALL     COMSSSD 
*CALL     COMSZOL 
          LIST   X
*CALL     COMS1RM 
          LIST   *
          TITLE  MACROS.
 COMMAND  SPACE  4,10 
**        COMMAND - SPECIFY LEGAL K-DISPLAY COMMANDS. 
* 
*         THE *TPAR* WORD INDICATES TO *CONFIG* WHICH K-DISPLAY 
*         COMMANDS ARE LEGAL FOR *1RM* PROCESSING.  THIS
*         MACRO IS USED TO SET THE *TPAR* WORD TO THE LEGAL 
*         COMMANDS.  WHEN *CONFIG* DETECTS A LEGAL COMMAND IT IS
*         PASSED TO *1RM* VIA WORD *TCOM* IN THE CALL BLOCK.
*         *1RM* CHECKS FOR COMMANDS WITH THE AID OF THE *IFCOM* 
*         MACRO.
* 
*         COMMAND  C
*                C = A LIST OF LEGAL COMMAND KEYWORDS.
  
  
 COMMAND  MACRO  C
          MACREF COMMAND
 .2       SET    0
          IRP    C
 .1       DECMIC ._C-1
 .2       SET    .2+1BS".1" 
          IRP 
          IFGT   .2,77
          LDC    .2 
          ELSE   1
          LDN    .2 
          RJM    SLC
          ENDM
 LDBUF    SPACE  4,10 
**        LDBUF - LOAD ADDRESS OF CALL BUFFER WORD. 
* 
*         LDBUF  ADD
*                ADD = CALL BUFFER WORD INDEX.
  
  
 LDBUF    MACRO  A
          MACREF LDBUF
          RJM    LDB
          IFNE   A,0,1
          ADN    A
          ENDM
 IFCOM    SPACE  4,10 
**        IFCOM - CHECK IF COMMAND ENTERED. 
* 
*         THIS MACRO CHECKS FOR A COMMAND PREVIOUSLY SPECIFIED
*         WITH THE COMMAND MACRO TO SEE IF IT HAS BEEN ENTERED
*         VIA THE K-DISPLAY.
* 
*         IFCOM  C,TAG
*                C = COMMAND LIST TO BE CHECKED.
*                TAG = ADDRESS TO JUMP TO IF COMMAND ENTERED. 
  
  
 IFCOM    MACRO  C,TAG
          MACREF IFCOM
 .2       SET    0
          IRP    C
 .1       DECMIC ._C-1
 .2       SET    .2+1BS".1" 
          IRP 
          IFGT   .2,77
          LDC    .2 
          ELSE   1
          LDN    .2 
          RJM    CLC
          IF     DEF,TAG
          IFLT   *-TAG,40 
          NJN    TAG         IF TAG WITHIN RANGE
          ELSE   2
          ZJN    *+3         IF TAG OUT OF RANGE, REVERSE TEST LOGIC
          LJM    TAG         LONG JUMP TO TAG 
          ENDM
 MESG     SPACE  4,10 
**        MESG - SEND MESSAGE TO K-DISPLAY. 
* 
*         MESG   ADD
*                ADD = ADDRESS OF K-DISPLAY MESSAGE.
  
  
 MESG     MACRO  A
          MACREF MESG 
          IFC    NE,=A=*=,1 
          LDC    A
          RJM    KMS
          ENDM
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 BEGIN    BSSN   20 
 CN       BSSN   5           CM WORD BUFFER 
 CH       BSSN   1           CHANNEL CURRENTLY IN USE 
 DI       BSSN   1           DAT INDEX
 EQ       BSSN   1           EST ORDINAL FOR RECONFIGURATION
 FN       BSSN   1           FUNCTION IN PROGRESS 
 GL       BSSN   1           DEVICE UNAVAILABLE FLAG
 LU       BSSN   1           LOGICAL UNIT NUMBER OF CURRENT UNIT
 LT       BSSN   1           LABEL TRACK FROM MST 
 MF       BSSN   1           MMF STATUS 
 MM       BSSN   1           MACHINE MASK FOR THIS MACHINE
 MS       BSSN   1           MST ADDRESS/10B
 NC       BSSN   1           FIRST OF SECOND CHANNEL FLAG 
 NU       BSSN   1           NUMBER OF UNITS FOR EQUIPMENT
 PU       BSSN   1           PHYSICAL UNIT NUMBER OF CURRENT UNIT 
 RM       BSSN   1           *RD* DEVICE MST ADDRESS/10B
 RU       BSSN   1           UNITS FOR RECONFIGURATION OR REPAIR
 SC       BSSN   1           SUSPENDED DEVICE COUNT 
 SL       BSSN   1           SINGLE UNIT SECTOR LIMIT FOR EQUIPMENT 
 MX       BSSN   0           MAXIMUM DIRECT CELL
 END      BSSN
          ERRPL  MX-50       DIRECT CELL OVERFLOW 
  
  
****
          TITLE  RDM - MAIN PROGRAM.
**        RDM - MAIN PROGRAM. 
  
  
          ORG    PPFW 
 RDM      RJM    PRS         PRESET 
 RDM1     DELAY 
          PAUSE 
          LDBUF  RFNB        CHECK FOR FUNCTION REQUEST 
          CRD    CN 
          LDD    CM+1 
          ZJN    RDM2        IF NO ERROR FLAG 
          LDN    0
          LJM    RDM4        DROP PP
  
 RDM2     LDD    CN+4 
          SHN    21 
          PJN    RDM1        IF NO FUNCTION PRESENT 
          STD    FN 
          RJM    SEQ         SET EQUIPMENT PARAMETERS 
          LDM    TFCN,FN
          STM    RDMA 
          RJM    *           PROCESS REQUEST
 RDMA     EQU    *-1
  
*         RETURN FROM FUNCTION PROCESSOR. 
*         IF A DEVICE SUSPEND REQUEST IS OUTSTANDING *1RM* MUST 
*         REMAIN ASSIGNED UNTIL IT IS CLEARED.  IF *1RM* WERE 
*         TO DROP OUT A DEADLOCK COULD BE CREATED BECAUSE OF
*         PP RESOURCES BEING TIED UP WAITING FOR THE SUSPENDED
*         DEVICE. 
* 
*         (A) = 0 IF COMMAND WAS NOT ABORTED. 
*         (A) .NE. 0 IF *ABORT* WAS ENTERED.
  
          ZJN    RDM3        IF COMMAND NOT ABORTED 
          MESG   RDMB        *COMMAND ABORTED*
 RDM3     RJM    RRD         RESET *RD* DEVICE
          LDBUF  RFNB        READ FUNCTION WORD 
          CRD    CN 
          LDD    SC          CHECK FOR SUSPENDED DEVICES
          ZJN    RDM4        IF NO DEVICE SUSPENDED - DROP PP 
          LDD    CN+4 
          SCN    1
 RDM4     STD    CN+4 
          LDBUF  RFNB 
          CWD    CN 
          LDD    CN+4 
          ZJN    RDM5        IF DROP OF PP
          LJM    RDM1        CHECK FOR NEXT FUNCTION
  
 RDM5     RJM    CSP         CLEAR EQUIPMENT ASSIGNMENT 
          LDK    ZERL        RESTART JOBS WAITING ON DEVICE 
          CRD    CM 
          LDD    EQ          EST ORDINAL
          STD    CM+3 
*         LDN    0           *WISE* SUBFUNCTION 
*         STD    CM+4 
          ERRNZ  WISE        ADJUST CODE IF VALUE CHANGES 
          MONITOR  EATM 
          MONITOR  DPPM 
          LJM    PPR         EXIT 
  
 RDMB     DATA   C*COMMAND ABORTED.*
          SPACE  4,10 
**        TFCN - TABLE OF FUNCTION CODE PROCESSORS. 
* 
*         ENTRY = 1 WORD INDEXED BY FUNCTION CODE.
* 
*T        12/ ADDR
*                ADDR = ADDRESS OF FUNCTION PROCESSOR.
  
  
 TFCN     INDEX              TABLE OF FUNCTION CODE PROCESSORS
          INDEX  RUMF,UMT    UPDATE MST-S FROM EXTENDED MEMORY
          INDEX  RCLF,CLR    CLEAR IDLE AND SUSPEND REQUESTS
          INDEX  RCDF,CDI    CLEAR DAT INTERLOCK
          INDEX  RDDF,RDD    REDEFINE DEVICE
          INDEX  RSPF,SPD    SUSPEND DEVICE ACTIVITY
          INDEX  RMXF 
 CDI      TITLE  CLEAR *DATI* INTERLOCK.
**        CDI - CLEAR *DATI* INTERLOCK.  (FUNCTION RCDF). 
* 
*         ENTRY  (MF) = MULTI-MAINFRAME LINK DEVICE.
* 
*         USES   CN - CN+4. 
* 
*         CALLS  IFR. 
  
  
 CDI      SUBR               ENTRY/EXIT 
          LDD    MF          CHECK FOR MULTI-MAINFRAME
          ZJN    CDIX        IF NOT MMF 
          LDC    MMFL        READ *DATI* INTERLOCK INDICATION 
          CRD    CN 
          LDD    CN+2 
          ZJN    CDIX        IF INTERLOCK NOT SET 
          LCN    DATI 
          RJM    IFR         CLEAR *DATI* FLAG REGISTER INTERLOCK 
          LDN    0           CLEAR INTERLOCK INDICATOR
          STD    CN+2 
          LDC    MMFL 
          CWD    CN 
          LDN    0
          UJN    CDIX        RETURN 
          TITLE  CLR - CLEAR IDLE AND SUSPEND REQUEST.
**        CLR - CLEAR IDLE AND SUSPEND REQUEST.  (FUNCTION RCLF). 
* 
*         CLEAR THE IDLE AND SUSPEND REQUESTED BIT FOR THE SPECIFIED
*         EQUIPMENT.
* 
*         ENTRY  (EQ) = EST ORDINAL.
* 
*         EXIT   (A) .NE. 0 IF THE OPERATION WAS ABORTED OR AN ERROR
*                           FLAG IS SET AT THE CONTROL POINT. 
* 
*         USES   LU, NC, T5, T7, CM - CM+4, CN - CN+4.
* 
*         CALLS  CAS, CDI, CDP, CSP, MSV, PUE, SCF, SDI, SNC, VLB, WAM. 
* 
*         MACROS CMSTF, LDBUF, MONITOR, SFA.
  
  
 CLR      SUBR               ENTRY
          LDD    GL 
          ZJN    CLR1        IF DEVICE AVAILABLE
          LJM    CLR6        CLEAR SUSPEND AND IDLE STATUS
  
 CLR1     LDN    MSTL        SET MST WORD COUNT 
          STD    T7 
          LDBUF  ESTD        READ EST ENTRY 
          CRD    CN 
          ADN    MSTD-ESTD   READ MST 
          CRM    BFMS,T7
          RJM    SCF         SET COMMON FIELDS IN *RD* DEVICE 
          NJN    CLRX        IF ERROR FLAG SET AT CP
  
*         VERIFY FUNCTIONAL AND LOGICAL INTEGRITY OF EQUIPMENT. 
  
 CLR2     LDN    1           SET FIRST CHANNEL
          STD    NC 
 CLR3     RJM    SNC         SET *NC* CHANNEL 
          NJN    CLR5        IF CHANNEL NOT AVAILABLE 
          RJM    VLB         VERIFY LABEL SECTOR
          NJN    CLR7        IF *ABORT* 
 CLR4     RJM    MSV         MASS STORAGE VERIFICATION
          ZJN    CLR5        IF VERIFY GOOD 
          LDC    CLRA        * UNIT XX, CHYY WRITE/READ VERIFY ERROR.*
          RJM    PUE         PROCESS UNIT ERROR 
          MJN    CLR4        IF *RECHECK* 
          NJN    CLR7        IF *ABORT* 
 CLR5     SOD    NC 
          PJN    CLR3        IF MORE CHANNELS TO PROCESS
  
*         ADVANCE TO NEXT UNIT. 
  
          AOD    LU 
          LDD    SL 
          RAD    T7 
          SBM    SLM
          MJN    CLR2        IF MORE UNITS TO PROCESS 
  
*         CLEAR SUSPEND AND IDLE STATUS.
  
 CLR6     RJM    SDI         SET DAT INTERLOCK
 CLR7     NJN    CLR9        IF *ABORT* 
          RJM    CSP         CLEAR SUSPEND STATUS 
          RJM    CAS         CHECK ALL SUSPENDS CLEARED 
          NJN    CLR8        IF SUSPEND SET FOR OTHER MACHINES
          LDD    EQ 
          STD    T5 
          CMSTF  GRDR        CLEAR REDEFINITION REQUESTED 
 CLR8     RJM    CDI         CLEAR DAT INTERLOCK
          LDC    ZJNI+WAM4-WAMB   USE CORRECT CONDITIONAL JUMP
          RJM    WAM         ENSURE SYNCHRONIZATION OF PROCESSING 
          NJN    CLR9        IF *ABORT* 
          RJM    CDP         COMPLETE DEVICE PROCESSING 
          LDN    0
 CLR9     LJM    CLRX        RETURN 
  
 CLRA     DATA   C* UNIT XX, CHYY WRITE/READ VERIFY ERROR.* 
 RDD      TITLE  REDEFINE UNITS FUNCTION PROCESSOR. 
**        RDD - REDEFINE UNITS.  (FUNCTION RDDF). 
* 
*         REDEFINE AN EQUIPMENT BY CHANGING THE UNITS AND OPTIONALLY
*         THE CHANNELS.  THE CHANGE MAY INVOLVE PHYSICALLY MOVING 
*         PACKS OR HDAS IN WHICH CASE THE PROCESS IS GUIDED BY
*         MESSAGES WHICH APPEAR ON THE *K* DISPLAY AND AT THE USER-S
*         CONTROL POINT.
* 
*         ENTRY  (FG) = FLAGS.
*                       1 = SPIN DOWN UNITS BEING CHANGED.
*                       2 = VERIFY LABELS ON NEW CONFIGURATION. 
* 
*         EXIT   (A) .NE. 0 IF OPERATION ABORTED. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  CLR, GCI, SCH, SDU, SPD, SUU, ULD. 
* 
*         MACROS LDBUF. 
  
  
 RDD      SUBR               ENTRY/EXIT 
          LDD    RU 
          ZJN    RDD1        IF NO CHANGE OF UNITS
          RJM    SPD         SUSPEND DEVICE USAGE 
          NJN    RDDX        IF REDEFINITION ABORTED
          LDD    GL 
          NJN    RDD1        IF DEVICE UNAVAILABLE
          RJM    SDU         SPIN DOWN CHANGED UNITS
          NJN    RDDX        IF *ABORT* OR ERROR FLAG SET 
          RJM    SUU         SPIN UP UNITS
          NJN    RDDX        IF *ABORT* OR ERROR FLAG SET 
  
*         SET NEW CONFIGURATION IN MST. 
  
 RDD1     LDBUF  ESTD        SET NEW CHANNELS 
          CRD    CN 
          LDD    CN+1        SET NEW CHANNELS IN EST
          RJM    GCI
          ZJN    RDD2        IF FULL-TRACK CHANNEL
          LDD    CN+1        SET HALF-TRACK FLAG
          LPC    7377 
          LMC    400
          STD    CN+1 
 RDD2     LDD    CN+2        PROCESS SECOND CHANNEL 
          ZJN    RDD5        IF NO SECOND CHANNEL 
          RJM    GCI
          ZJN    RDD5        IF FULL-TRACK CHANNEL
          LDD    CN+2        SET HALF-TRACK FLAG
          LPC    7377 
          LMC    400
          STD    CN+2 
 RDD5     LDD    EQ          SET CHANNELS IN EST
          RJM    SCH
          LDBUF  MSTD+DDLL   SET NEW UNIT LIST
          CRD    CN 
          LDD    CN 
          LPC    3777 
          STD    CN 
          LDD    MS 
          SHN    3
          ADN    DDLL 
          CWD    CN 
          RJM    ULD         UPDATE LINKED DEVICES MST-S
          RJM    CLR         CLEAR SUSPEND AND IDLE AFTER VALIDATION
          LJM    RDDX        RETURN 
 SPD      TITLE  SUSPEND PROCESSING ON DEVICE.
**        SPD - SUSPEND PROCESSING ON DEVICE.  (FUNCTION RSPF). 
* 
*         THIS FUNCTION SUSPENDS PROCESSING ON A DEVICE SO THAT 
*         REPAIR OPERATIONS CAN BE EFFECTED.  ALSO A DEVICE MAY 
*         BE SUSPENDED SO THAT A UNIT IN ITS CONFIGURATION MAY
*         BE ADDED TO ANOTHER EQUIPMENT.
* 
*         EXIT   (A) .NE. 0 IF THE OPERATION WAS ABORTED OR AN ERROR
*                           FLAG IS SET AT THE CONTROL POINT. 
*                (SC) UPDATED TO INDICATE NEW SUSPEND COUNT.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CDI, SDI, SSP, WAM.
* 
*         MACROS MONITOR, SFA.
  
  
 SPD      SUBR               ENTRY/EXIT 
  
*         THE *DATI* INTERLOCK IS HELD WHILE SETTING THE SUSPEND
*         STATUS ON A DEVICE.  SUSPEND STATUS REQUIRES THAT IDLE
*         BE SET ON THE DEVICE.  THE *DATI* INTERLOCK CONTROLS THE
*         CLEARING OF SUSPEND.  WHEN THE LAST MACHINE CLEARS IT-S 
*         SUSPEND STATUS IT ALSO CLEARS DEVICE IDLE.  THUS WHEN 
*         CHECKING TO ENSURE IDLE IS SET SO THAT SUSPEND MAY THEN BE
*         SET, THE *DATI* INTERLOCK IS HELD TO ENSURE THAT ANOTHER
*         MACHINE IS NOT CLEARING IDLE AT THE SAME TIME.
  
          RJM    SDI         SET *DATI* INTERLOCK 
          NJN    SPDX        IF SUSPEND ABORTED 
  
*         CHECK THAT THE DEVICE IDLE STATUS HAS NOT BEEN CLEARED
*         BY ANOTHER MACHINE. 
  
          LDD    EQ          OBTAIN UP-TO-DATE MST IN CM
          STD    CM+1 
          LDN    UTRS 
          STD    CM+3 
          MONITOR  STBM 
          SFA    EST,EQ      READ *ACGL* WORD OF MST
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    ACGL 
          CRD    CM 
          LDD    CM+4        CHECK REDEFINITION REQUESTED BIT 
          SHN    21-GRDR
          PJN    SPD1        IF IDLE NOT SET
          RJM    SSP         SET SUSPEND STATUS 
 SPD1     RJM    CDI         CLEAR *DATI* INTERLOCK 
  
*         IN ORDER TO ENSURE ALL MACHINES ARE SYNCHRONIZED IN 
*         THEIR PROCESSING OF A DEVICE THE FOLLOWING CODE WAITS 
*         FOR ANY OTHER MACHINES SHARING THE DEVICE TO SUSPEND
*         ACTIVITY. 
  
          LDC    NJNI+WAM4-WAMB  USE CORRECT CONDITIONAL JUMP 
          RJM    WAM         WAIT FOR ALL MACHINES
          NJN    SPD2        IF *ABORT* 
*         LDN    0           INDICATE NO ABORT
 SPD2     LJM    SPDX        RETURN 
          TITLE  UMT - UPDATE SHARED DEVICE MST FROM EXTENDED MEMORY. 
**        UMT - UPDATE SHARED DEVICE MST FROM ECS.  (FUNCTION RUMF).
* 
*         ENTRY  NO CALL BLOCK PARAMETERS NEEDED. 
* 
*         EXIT   MST-S FOR ALL SHARED DEVICES UPDATED FROM ECS. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         MACROS MONITOR, SFA.
  
  
 UMT      SUBR               ENTRY/EXIT 
          LDD    MF 
          ZJN    UMTX        IF NOT MULTI-MAINFRAME 
          LDN    ESTP        INITIALIZE EST SEARCH
          CRD    CN 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    CN 
 UMT1     AOD    CN          ADVANCE EST ORDINAL
          LMD    CN+3 
          ZJN    UMTX        IF END OF EQUIPMENTS 
          SFA    EST,CN      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-13
          PJN    UMT1        IF NOT MASS STORAGE
          SHN    21-11-21+13
          PJN    UMT1        IF NOT SHARED DEVICE 
          LDD    CN          UPDATE MST FROM EXTENDED MEMORY
          STD    CM+1 
          LDN    UTRS 
          STD    CM+3 
          MONITOR  STBM 
          UJN    UMT1        NEXT EQUIPMENT 
 CAS      TITLE  SUBROUTINES. 
 CAS      SPACE  4,10 
**        CAS - CHECK ALL SUSPENDS CLEARED. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (DI) = DAT INDEX.
* 
*         EXIT   (A) = 0 IF SUSPEND CLEARED FOR ALL OTHER MACHINES. 
* 
*         USES   T1 - T3. 
* 
*         CALLS  RDE. 
* 
*         MACROS SFA. 
  
  
 CAS      SUBR               ENTRY/EXIT 
          LDD    MF 
          ZJN    CASX        IF NOT MMF 
          SFA    EST,EQ      TEST FOR SHARED DEVICE 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          LPC    1000 
          ZJN    CASX        IF DEVICE NOT SHARED 
          RJM    RDE         READ DAT ENTRY FOR DEVICE
          NJN    CASX        IF *ABORT* 
          LDC    BFMS+2+DALL*5
          STD    T1 
          LDN    1           PRESET SEARCH MASK 
          STD    T2 
          LDN    MXMF 
          STD    T3 
 CAS1     LDM    TDAT+5+4 
          LMD    T2 
          SBM    TDAT+5+4 
          PJN    CAS2        IF NOT SHARING WITH THIS MACHINE 
          LDI    T1 
          SHN    0-10 
          LMN    3
          ZJN    CAS4        IF DEVICE IS DOWN
 CAS2     LDD    T2          ADVANCE MACHINE MASK AND INDEX 
          RAD    T2 
          LDN    LLLL*5 
          RAD    T1 
          SOD    T3 
          NJN    CAS1        IF MORE MACHINES 
 CAS3     LJM    CASX        RETURN 
  
 CAS4     LDN    1           SET REPLY STATUS 
          UJN    CAS3        RETURN 
 CDP      SPACE  4,10 
**        CDP - COMPLETE DEVICE PROCESSING. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
* 
*         CALLS  C2D. 
* 
*         MACROS MESG.
  
  
 CDP      SUBR               ENTRY/EXIT 
          LDD    EQ          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    CDPA+1 
          LDD    EQ          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    CDPA+2 
          MESG   CDPA 
          UJN    CDPX        RETURN 
  
 CDPA     DATA   C*EQXXX, REDEFINITION COMPLETE.* 
 CLC      SPACE  4,10 
**        CLC - CHECK FOR LEGAL COMMAND.
* 
*         ENTRY  (A) = COMMAND MASK TO CHECK. 
* 
*         EXIT   (A) .NE. 0 IF COMMAND ENTERED. 
*                LEGAL COMMANDS CLEARED WHEN (A) .NE. 0.
* 
*         USES   CM - CM+4. 
* 
*         MACROS COMMAND, LDBUF, PAUSE. 
  
  
 .1       DECMIC .ABORT-1    SET BIT NUMBER MICRO FOR *ABORT* 
 CLC1     LDN    1BS".1"     ERROR FLAG TREATED AS *ABORT* COMMAND
 CLC2     BSS    0
 CLCA     LPC    *
          ZJN    CLCX        IF NO LEGAL COMMAND FOUND
          COMMAND            CLEAR LEGAL COMMANDS 
          LDN    1           RETURN STATUS
  
 CLC      SUBR               ENTRY/EXIT 
          STM    CLCA+1      SET LEGAL COMMAND MASK 
          SHN    -14
          LMC    LPCI 
          STM    CLCA 
          PAUSE              CHECK ERROR FLAG 
          LDD    CM+1 
          SBN    ODET 
          PJN    CLC1        IF ERROR FLAG SET
          LDBUF  TCOM        READ LEGAL COMMANDS
          CRD    CM 
          LDD    CM+3 
          SHN    14 
          LMD    CM+4 
          LJM    CLC2        RETURN 
 CNR      SPACE  4,10 
**        CNR - CHECK NOT READY STATUS ON DEVICE. 
* 
*         ENTRY  (T6) = TRACK TO READ.
*                (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0 IF UNIT HAS NOT READY STATUS.
*                    .GT. 0 IF UNIT HAS READY STATUS. 
*                    .LT. 0 IF MASS STORAGE READ ERROR. 
* 
*         CALLS  RDS. 
* 
*         MACROS ENDMS, SETMS.
  
  
 CNR1     ENDMS 
          LDN    1           SET READY STATUS 
  
 CNR      SUBR               ENTRY/EXIT 
          SETMS  IO,(AD,DF,NR)
          LDC    BFMS        READ SECTOR
          RJM    RDS
          PJN    CNR1        IF NO MASS STORAGE ERROR 
          LPN    77          CHECK NOT READY STATUS 
          LMN    NRDE 
          ZJN    CNRX        IF NOT READY 
          LCN    1           SET READ ERROR 
          UJN    CNRX        RETURN 
 CSP      SPACE  4,10 
**        CSP - CLEAR SUSPEND STATUS. 
* 
*         ENTRY  (MS) = MST ADDRESS/10B.
*                (SC) = SUSPEND COUNT.
* 
*         USES   SC, T5, CM - CM+7. 
* 
*         MACROS CMSTF, MONITOR.
  
  
 CSP      SUBR               ENTRY/EXIT 
          LDM    SCFA 
          LPN    77 
          ZJN    CSP1        IF EQUIPMENT NOT ASSIGNED
          SOM    SCFA        CLEAR ASSIGNMENT FLAG
          LDD    CP          GET EJT ORDINAL
          ADK    TERW 
          CRD    CM+3 
          LDD    EQ 
          LMC    4000        INDICATE EJT ORDINAL PASSED
          STD    CM+1 
          MONITOR  DEQM 
 CSP1     LDD    SC 
          ZJN    CSPX        IF EQUIPMENTS NOT SUSPENDED
          LDD    EQ          SET DEVICE STATE = ON
          STD    T5 
          STD    CM+1 
          LDN    ** 
 CSPA     EQU    *-1
          ZJN    CSP2        IF DEVICE STATE UNCHANGED
          LDK    ONES 
          STD    CM+2 
          MONITOR  SEQM 
          SOD    SC          UPDATE SUSPEND COUNT 
 CSP2     CMSTF  LFPR        FORCE UPDATE OF LOCAL MST TO ECS 
          UJP    CSPX        RETURN 
 C3D      SPACE  4,10 
**        C3D - CONVERT THREE DIGITS OF DECIMAL DISPLAY CODE. 
* 
*         ENTRY  (A) = NUMBER TO CONVERT. 
* 
*         EXIT   (A) = THREE DISPLAY CODE DIGITS. 
*                (A) = 999 IN DISPLAY CODE IF .GT. THREE DIGITS.
* 
*         USES   CM - CM+4. 
  
  
 C3D3     LDC    3R999
  
 C3D      SUBR               ENTRY/EXIT 
          STD    CM+3 
          ADC    -999D
          PJN    C3D3        IF .GE. 999
          LDN    2           PRESET DIVISION
          STD    CM+4 
          LDN    0
          STD    CM 
          STD    CM+1 
          STD    CM+2 
 C3D1     LDD    CM+3 
          SBM    C3DA,CM+4
          MJN    C3D2        IF NEXT DECIMAL PLACE
          STD    CM+3 
          AOM    CM,CM+4
          UJN    C3D1        CONTINUE DIVISION
  
 C3D2     SOD    CM+4 
          PJN    C3D1        IF NOT COMPLETE
          LDD    CM+2        ASSEMBLE DIGITS
          SHN    6
          ADD    CM+1 
          SHN    6
          ADD    CM 
          ADC    3R000
          UJN    C3DX        RETURN 
  
 C3DA     CON    1,10D,100D  DIVISION TABLE 
 DOS      SPACE  4,20 
**        DOS - DELAY APPROXIMATELY ONE SECOND. 
* 
*         THE PURPOSE OF THIS ROUTINE IS TO AVOID CHECKING THE DEVICE 
*         TOO OFTEN.  THE TIME INTERVAL IS NOT REALLY IMPORTANT.
* 
*         USES   T1, T2.
* 
*         MACROS DELAY, PAUSE.
  
  
 DOS      SUBR               ENTRY/EXIT 
          LDN    40D         SET DELAY INCREMENT PARAMETERS 
          STD    T2 
 DOS1     LDC    100D 
          STD    T1 
 DOS2     DELAY 
          PAUSE  NE 
          SOD    T1 
          NJN    DOS2        IF NOT END OF INNER INCREMENT
          SOD    T2 
          NJN    DOS1        IF NOT END OF DELAY
          UJN    DOSX        RETURN 
 GCI      SPACE  4,10 
**        GCI - GET CHANNEL CONTROLWARE TABLE INDEX.
* 
*         ENTRY  (A) = CHANNEL(S).
* 
*         EXIT   (A) = 0, IF FULL-TRACK CONTROLLER CHANNEL. 
*                    .NE. 0, OTHERWISE. 
*                (T2) = CHANNEL BEING PROCESSED.
* 
*         USES   T0, T1, T2, CM - CM+4. 
  
  
 GCI      SUBR               ENTRY/EXIT 
          LPN    37          SAVE CHANNEL NUMBER
          STD    T1 
          STD    T2 
          LCN    0
          STD    T0 
 GCI1     AOD    T0          INCREMENT CM WORD OFFSET 
          LCN    5           DIVIDE BY 5
          RAD    T1 
          PJN    GCI1        IF INCORRECT CM WORD OFFSET
          LDC    **          FWA OF CHANNEL CONTROLWARE TABLE 
 GCIA     EQU    *-2
          ADD    T0          ADD CORRECT CM WORD OFFSET 
          CRD    CM 
          LDM    CM+5,T1
          LPN    77 
          LMN    /DSL/FTCW
          ZJN    GCIX        IF FULL TRACK CONTROLWARE CHANNEL
          LMN    /DSL/FMCW&/DSL/FTCW
          UJN    GCIX        RETURN 
 KMS      SPACE  4,10 
**        KMS - SEND MESSAGE TO K-DISPLAY.
* 
*         ENTRY  (A) = MESSAGE ADDRESS. 
* 
*         USES   T1 - T2. 
* 
*         MACROS DELAY, PAUSE.
  
  
 KMS      SUBR               ENTRY/EXIT 
          STD    T1 
          LDN    0
          STD    T2 
 KMS1     LDI    T1          MOVE MESSAGE TO BUFFER 
          ZJN    KMS2        IF END OF MESSAGE
          STM    KMSA,T2
          AOD    T1 
          AOD    T2 
          LMN    60D/2
          NJN    KMS1        IF NOT END OF LINE 
 KMS2     LDC    2R          BLANK FILL MESSAGE 
          STM    KMSA,T2
          AOD    T2 
          SBN    60D/2
          MJN    KMS2        IF NOT END OF LINE 
          LDN    6
          STD    T1 
          LDD    IR+3        WRITE MESSAGE TO K-DISPLAY 
          SCN    77 
          SHN    6
          ADD    IR+2 
          ADD    RA 
          SHN    6
          CWM    KMSA,T1
 KMS3     DELAY              PAUSE FOR MESSAGE TO BE SEEN 
          PAUSE  NE 
          SOD    T2 
          PJN    KMS3        IF MORE DELAY
          LJM    KMSX        RETURN 
  
 KMSA     BSS    60D/2+1
 LDB      SPACE  4,10 
**        LDB - LOAD CALL BLOCK BUFFER ADDRESS. 
* 
*         EXIT   (A) = ABSOLUTE ADDRESS OF CALL BLOCK.
  
  
 LDB      SUBR               ENTRY/EXIT 
          LDD    IR+3        GET CALL BLOCK ADDRESS FROM *IR* 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          UJN    LDBX        RETURN 
 PSA      SPACE  4,10 
**        PSA - PROCESS SERVO ADJUSTMENT. 
* 
*         ENTRY  (T5) = 0.
*                (T6) = LABEL TRACK.
*                (T7) = CURRENT SECTOR. 
* 
*         EXIT   (A) .NE. 0 IF *ABORT*. 
* 
*         USES   CN - CN+1, T6 - T7.
* 
*         CALLS  C3D, SPU, WFC. 
* 
*         MACROS COMMAND, EXECUTE, MESG, SETMS. 
  
  
 PSA9     LDN    0           RETURN STATUS
  
 PSA      SUBR               ENTRY/EXIT 
          SETMS  STATUS 
          LDD    CM+3 
          LPC    3777 
          LMC    2RDM 
          ZJN    PSA1        IF 885 
          LMN    2RDQ&2RDM
          NJN    PSA9        IF NOT 885 
 PSA1     LDD    T7          SAVE LOGICAL SECTOR NUMBER 
          STD    CN 
          LDD    RM          SET UNIT IN MESSAGES 
          RJM    SPU
          STM    PSAB+24
          STM    PSAC+3 
          STM    PSAD+3 
 PSA2     MESG   PSAD        * UNIT XX SERVO TIMING IN PROGRESS.* 
          LDN    0           SET *0SI* FUNCTION 
          STM    OVLA 
          EXECUTE  0SI,OVLA+1 
          STM    PSAA        SET PROCESSOR ADDRESS
          LDN    0           SET TRACK TO ZERO
          STD    T6 
          LDD    CN          RESTORE SECTOR NUMBER
          STD    T7 
          RJM    *           PERFORM SERVO CHECK
 PSAA     EQU    *-1
          MJN    PSA4        IF SERVO CHECK UNSUCCESSFUL
          STD    CN+1        SAVE TIME
          NJN    PSA3        IF NOT OUT OF RANGE
          LDC    999D        SET OUT OF RANGE 
 PSA3     RJM    C3D         CONVERT THREE DIGITS TO DECIMAL DISPLAY
          STM    PSAC+14
          SHN    -14
          LMC    2L 
          STM    PSAC+13
          LDD    CN+1 
          ADC    -325D
          MJN    PSA5        IF OUT OF RANGE
          SBN    346D-325D
          PJN    PSA5        IF OUT OF RANGE
          COMMAND  (ABORT,NEXT,RECHECK)  ENABLE COMMANDS
          UJN    PSA6        SET MESSAGE
  
 PSA4     COMMAND  (ABORT,IGNORE,RECHECK)  ENABLE COMMANDS
          MESG   PSAB        SET ERROR MESSAGE
          UJN    PSA7        WAIT FOR COMMAND 
  
 PSA5     COMMAND  (ABORT,IGNORE,RECHECK)  ENABLE COMMANDS
 PSA6     MESG   PSAC        SET TIMING DATA MESSAGE
 PSA7     LDD    LT          RESET TO LABEL TRACK 
          STD    T6 
          RJM    WFC         WAIT FOR COMMAND 
          PJN    PSA8        IF NOT *RECHECK* 
          LJM    PSA2        RECHECK SERVO TIMING 
  
 PSA8     LJM    PSAX        RETURN WITH STATUS 
  
 PSAB     DATA   C* ERROR IN PERFORMING SERVO CHECK ON UNITXX.* 
 PSAC     DATA   C* UNIT XX SERVO TIMING= XXX.  ACCEPTABLE RANGE IS 325 
,TO 345.* 
 PSAD     DATA   C* UNIT XX SERVO TIMING IN PROGRESS.*
 PUE      SPACE  4,10 
**        PUE - PROCESS UNIT ERROR. 
* 
*         ENTRY  (A) = ERROR MESSAGE ADDRESS. 
*                (CH) = CHANNEL.
* 
*         EXIT   (A) .LT. 0 IF *RECHECK* COMMAND ENTERED. 
*                (A) = 0 IF *IGNORE* OR *NEXT* COMMAND ENTERED. 
*                (A) .GT. 0 IF *ABORT* COMMAND ENTERED. 
* 
*         USES   T1.
* 
*         CALLS  C2D, SPU, WFC. 
* 
*         MACROS COMMAND, MESG. 
  
  
 PUE      SUBR               ENTRY/EXIT 
          STD    T1 
          LDD    RM          SET UNIT AND CHANNEL IN MESSAGE
          RJM    SPU
          STM    3,T1 
          LDD    CH 
          RJM    C2D
          STM    6,T1 
          COMMAND  (ABORT,IGNORE,RECHECK) 
          LDD    T1 
          MESG   *
          RJM    WFC         WAIT FOR COMMAND 
          LJM    PUEX        RETURN 
 RDE      SPACE  4,20 
**        RDE - READ DAT ENTRY FROM EXTENDED MEMORY.
* 
*         ENTRY  (MF) = LINK EQUIPMENT. 
*                (DI) = DAT INDEX.
* 
*         EXIT   (A) .NE. 0 IF *ABORT*. 
*                (TDAT) = DAT ENTRY.
*                (BFMS) = DAT TRACK FOR THIS EQUIPMENT. 
* 
*         USES   T3, CM - CM+4, T5 - T7.
* 
*         CALLS  RDS. 
* 
*         MACROS COMMAND, ENDMS, IFCOM, MESG, SETMS.
  
  
 RDE      SUBR               ENTRY/EXIT 
          LDD    MF          SET LINK EQUIPMENT 
          STD    T5 
          SETMS  IO,(NR,DF) 
  
*         SET POINTERS TO READ DAT. 
  
          LDD    CM+4        GET DAT POINTER
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+4        SET DAT TRACK
          STD    T6 
          LDD    DI          SET DAT SECTOR 
          SHN    21-4 
          STD    T7 
          SHN    -14         SET DAT SECTOR INDEX 
          STD    T3 
          SHN    2           SET INDEX * 5
          RAD    T3 
  
*         READ DAT. 
  
          LDC    BFMS        READ SECTOR
          RJM    RDS
          PJN    RDE2        IF NO ERROR
          MESG   RDEA        ERROR ON LINK DEVICE 
          COMMAND  (ABORT,IGNORE)  SET LEGAL COMMANDS 
 RDE1     IFCOM  IGNORE,RDE2 IF *IGNORE*
          IFCOM  ABORT,RDEX  IF *ABORT* 
          UJN    RDE1        RECHECK COMMAND ENTRY
  
 RDE2     LDN    0           INITIALIZE BUFFER INDEX
          STD    CM 
 RDE3     LDM    BFMS+2,T3
          STM    TDAT,CM
          AOD    T3          ADVANCE POINTERS 
          AOD    CM 
          LMN    5*2
          NJN    RDE3        IF TWO WORDS NOT MOVED 
          LDM    TDAT+4      SET DAT TRACK FOR THIS EQUIPMENT 
          STD    T6 
          LDN    0
          STD    T7 
          LDC    BFMS        READ DAT TRACK 
          RJM    RDS
          PJN    RDE5        IF NO ERROR
          MESG   RDEA        ERROR ON LINK DEVICE 
          COMMAND  (ABORT,IGNORE)  SET LEGAL COMMANDS 
 RDE4     IFCOM  IGNORE,RDE5  IF *IGNORE* 
          IFCOM  ABORT,RDEX  IF *ABORT* 
          UJN    RDE4        RECHECK COMMAND ENTRY
  
 RDE5     ENDMS 
          LJM    RDEX        RETURN 
  
 RDEA     DATA   C*ERROR ON LINK DEVICE.* 
 RRD      SPACE  4,10 
**        RRD - RESET *RD* DEVICE FIELDS. 
* 
*         ENTRY  (RM) = MST ADDRESS/10B OF *RD* DEVICE. 
*                (EQ) = ORIGINAL EST ORDINAL. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  SCH. 
* 
*         MACROS MONITOR. 
  
  
 RRD      SUBR               ENTRY/EXIT 
          LDM    SCFB 
          ZJN    RRDX        IF *RD* DOES NOT NEED TO BE RESET
  
*         RESET EST/MST FIELDS. 
  
          LDN    ZERL        CLEAR CHANNELS 
          CRD    CM 
          LDD    RM          CLEAR MST WORDS
          SHN    3
          ADN    MDGL 
          CWD    CM 
          ADN    DILL-MDGL
          CWD    CM 
          ADN    DDLL-DILL
          CWD    CM 
          LDN    ZERL        CLEAR CHANNELS 
          CRD    CN 
          LDN    0
          RJM    SCH
          LDC    2RRD        RESET *RD* EQUIPMENT TYPE
          STD    CM+3 
          LDN    SMNS        SET MNEMONIC 
          STD    CM+2 
          MONITOR  SEQM 
*         LDN    0
          STM    SCFB        CLEAR *RD* ALTERED FLAG
          LJM    RRDX        RETURN 
 SCF      SPACE  4,20 
**        SCF - SET COMMON *RD* DEVICE FIELDS.
* 
*         ENTRY  (CN - CN+4) = EST ENTRY. 
*                (BFMS) = MST ENTRY.
*                (EQ) = ORIGINAL EST ORDINAL. 
* 
*         EXIT   (A) .NE. 0 IF AN ERROR FLAG IS SET IN THE CPA. 
*                (T5) = 0.
*                (T6) = LABEL TRACK.
*                (T7) = 0.
*                (LU) = 0.
* 
*         USES   T5, T7 - CM+3. 
* 
*         CALLS  SCH. 
* 
*         MACROS DELAY, MONITOR, PAUSE. 
  
  
 SCF      SUBR               ENTRY/EXIT 
 SCFA     LDN    0
*         LDN    1           (ON SECOND CALL) 
          NJP    SCF2        IF DEVICE ALREADY ASSIGNED 
          LDD    CP 
          ADK    TERW 
          CRD    T7 
          LDD    EQ          SET ORIGINAL EST ORDINAL 
          STD    T5 
 SCF1     DELAY 
          PAUSE 
          LDD    CM+1 
          NJN    SCFX        IF ERROR FLAG IS SET 
          LDD    T5          SET EST ORDINAL
          LMC    4000 
          STD    CM+1 
          LDK    RVES 
          STD    CM+2 
          LDD    T7          SPECIFY EJT ORDINAL
          STD    CM+3 
          MONITOR  REQM 
          LDD    CM+1 
          ZJN    SCF1        IF EQUIPMENT NOT ASSIGNED
          AOM    SCFA        INDICATE ASSIGNED EQUIPMENT
 SCF2     LDN    0           CLEAR DEVICE ACTIVITY/SET STATE = ON 
          STM    BFMS+DALL*5
          STM    BFMS+DALL*5+1
          LDD    RM          SET PARAMETERS IN *RD* DEVICE
          SHN    3
          ADN    MDGL 
          CWM    BFMS+MDGL*5,ON 
          ADN    DILL-MDGL-1
          CWM    BFMS+DILL*5,ON 
          ADN    DDLL-DILL-1
          CWM    BFMS+DDLL*5,ON 
          LDN    0           SET CHANNELS 
          RJM    SCH
          LDN    0
          STD    CM+1 
          LDD    CN+3        SET EQUIPMENT TYPE IN EQUIPMENT 0
          STD    CM+3 
          LDN    SMNS        SET MNEMONIC 
          STD    CM+2 
          MONITOR  SEQM 
          SFA    EST,EQ 
          ADN    EQAE 
          CRD    CM 
          LDD    CM+2        SET INSTRUCTION PLUG FOR DRIVER
          STM    SCFC+4 
          LDN    1
          STD    CM+1 
          LDD    MA 
          CWM    SCFC,ON
          LDN    0           SET ADDRESS FOR *RD* DEVICE
          SFA    EST
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          MONITOR  UTEM 
*         LDN    0           PRESET VALIDATION LOOP 
          STD    LU 
          STD    T5 
          STD    T7 
          LDD    LT 
          STD    T6 
          AOM    SCFB        FLAG *RD* ALTERED
          SETMS  IO,(AD,DF,NR)
          LDM    MSD         CHECK STATUS 
          LPC    100
          LJM    SCFX        RETURN 
  
 SCFB     CON    0           *RD* DEVICE ALTERED FLAG 
 SCFC     VFD    6/EQAE,6/12D,6/24D,42/0
 SCH      SPACE  4,10 
**        SCH - SET CHANNEL(S) IN EST.
* 
*         ENTRY  (A) = EQUIPMENT. 
*                (CN+1 - CN+2) = CHANNEL(S).
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 SCH      SUBR               ENTRY/EXIT 
          STD    CM+1        ENTER CALL PARAMETERS
          LDD    CN+1 
          STD    CM+2 
          LDD    CN+2 
          STD    CM+4 
          LDN    SCHS        SET CHANNEL(S) IN EST
          STD    CM+3 
          MONITOR  SCSM      SET CHANNELS 
          UJN    SCHX        RETURN 
 SDI      SPACE  4,10 
**        SDI - SET *DATI* INTERLOCK. 
* 
*         ENTRY  (MF) = MMF LINK DEVICE.
* 
*         EXIT   (A) .NE. 0 IF ABORT COMMAND ENTERED. 
* 
*         USES   CN - CN+4. 
* 
*         CALLS  IFR. 
* 
*         MACROS COMMAND, IFCOM.
  
  
 SDI2     COMMAND            RESET LEGAL COMMANDS 
          LDC    4000        SET DAT INTERLOCK INDICATION 
          STD    CN+2 
          LDC    MMFL        WRITE INTERLOCK INDICATOR
          CWD    CN 
 SDI3     LDN    0           RETURN STATUS
  
 SDI      SUBR               ENTRY/EXIT 
          LDD    MF 
          ZJN    SDIX        IF NOT MULTI-MAINFRAME 
          LDC    MMFL        CHECK *DATI* INTERLOCK HELD
          CRD    CN 
          LDD    CN+2 
          NJN    SDI3        IF INTERLOCK PREVIOUSLY SET
          COMMAND  ABORT     ENABLE *ABORT* COMMAND 
  
 SDI1     LDN    DATI        ATTEMPT TO SET INTERLOCK 
          RJM    IFR
          LDD    CM+1 
          ZJN    SDI2        IF INTERLOCK SET 
          IFCOM  ABORT,SDIX  IF ABORT COMMAND ENTERED 
          UJN    SDI1        RECHECK INTERLOCK
 SDU      SPACE  4,10 
**        SDU - SPIN DOWN UNITS.
* 
*         THIS ROUTINE MONITORS THE SPINNING DOWN OF UNITS TO BE
*         RECONFIGURED OR RECABLED. 
* 
*         ENTRY  (RU) = UNITS TO BE RECONFIGURED OR RECABLED. 
* 
*         EXIT   (A) .NE. 0 IF *ABORT* ENTERED OR A CONTROL POINT 
*                           ERROR FLAG IS SET.
* 
*         USES   LU, T7, CN - CN+4. 
* 
*         CALLS  CNR, DOS, SCF, SPU.
* 
*         MACROS COMMAND, IFCOM, MESG, SFA. 
  
  
 SDU4     LDN    0
  
 SDU      SUBR               ENTRY/EXIT 
          LDN    MSTL        SET *RD* DEVICE
          STD    T7 
          SFA    EST,EQ      SET OLD DEVICE PARAMETERS
          ADK    EQDE 
          CRD    CN 
          LDD    MS 
          SHN    3
          CRM    BFMS,T7
          RJM    SCF         SET COMMON *RD* DEVICE FIELDS
          NJN    SDUX        IF ERROR FLAG SET
          UJN    SDU2        ENTER LOOP 
  
*         FIND UNITS TO PROCESS AND WAIT FOR *NOT READY*. 
  
 SDU1     COMMAND            CLEAR COMMAND LIST 
          AOD    LU          ADVANCE UNIT 
          LDD    SL 
          RAD    T7 
          SBM    SLM
          PJN    SDU4        IF NO MORE UNITS 
 SDU2     LDD    RU          CHECK IF PROCESSING THIS UNIT
          LMM    TMSK,LU
          SBD    RU 
          PJN    SDU1        IF NOT THIS UNIT 
          LDD    RM 
          RJM    SPU         SET PHYSICAL UNIT NUMBER 
          STM    SDUA+10
          MESG   SDUA        * SPIN DOWN UNIT XX.*
 SDU3     RJM    CNR         CHECK NOT READY
          ZJN    SDU1        IF NOT READY 
          COMMAND  (ABORT,IGNORE) 
          IFCOM  IGNORE,SDU1 IF *IGNORE*
          IFCOM  ABORT,SDUX  IF *ABORT* 
          RJM    DOS         DELAY
          UJN    SDU3        RETRY
  
 SDUA     DATA   C* SPIN DOWN UNIT XX.* 
 SEQ      SPACE  4,10 
**        SEQ - SET EQUIPMENT PARAMETERS. 
* 
*         EXIT   (DI) = DAT INDEX FOR EQUIPMENT.
*                (EQ) = EST ORDINAL FROM CALL BLOCK.
*                (GL) = DEVICE UNAVAILABLE FLAG.
*                (LT) = LABEL TRACK FOR EQUIPMENT.
*                (MS) = MST ADDRESS FOR EQUIPMENT.
*                (NU) = NUMBER OF UNITS IN EQUIPMENT. 
*                (RU) = UNITS FOR RECONFIGURATION OR REPAIR.
*                (SL) = SINGLE UNIT SECTOR LIMIT. 
* 
*         USES   DI, EQ, GL, LT, MS, NU, RU, SL, CM - CM+4, T5 - T7.
* 
*         MACROS LDBUF, MONITOR, SFA. 
  
  
 SEQ      SUBR               ENTRY/EXIT 
          LDBUF  CUEQ        GET CURRENT EST ORDINAL
          CRD    CM 
          ADN    URCD-CUEQ   GET RECONFIGURATION AND REPAIR UNITS 
          CRD    CM-1 
          ADN    ESTD-URCD   GET EST ENTRY
          CRD    CM-2 
          ADN    MSTD-ESTD+ALGL  GET LABEL TRACK
          CRD    CM-3 
          LDD    CM+4        SET EST ORDINAL
          STD    EQ 
          LDD    CM-1+4      SET UNITS
          STD    RU 
          LDD    CM-2+4      SET MST ADDRESS
          STD    MS 
          LDD    CM-3+1      SET LABEL TRACK
          STD    LT 
          LDBUF  MSTD+MDGL   READ DAT INDEX 
          CRD    CM-2 
          ADN    DDLL-MDGL   READ NUMBER OF UNITS 
          CRD    CM 
          LDD    CM-2        SET DAT INDEX
          LPC    377
          STD    DI 
          LDD    CM-2+1      SET SINGLE UNIT SECTOR LIMIT 
          LPC    3777 
          STD    SL 
          LDD    CM          SET NUMBER OF UNITS
          LPN    7
          ADN    1
          STD    NU 
          LDD    CM 
          SHN    21-12
          PJN    SEQ1        IF NOT NULL EQUIPMENT
          SOD    NU 
 SEQ1     SFA    EST,EQ      SET DEVICE UNAVAILABLE FLAG
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          LPC    100
          STD    GL 
 SEQ2     LJM    SEQX        RETURN 
 SLC      SPACE  4,10 
**        SLC - SET LEGAL COMMAND.
* 
*         ENTRY  (A) = BIT MASK OF LEGAL COMMANDS.
* 
*         MACROS LDBUF. 
  
  
 SLC1     LDN    ZERL        CLEAR LEGAL COMMANDS 
          CRM    SLCA,ON
          LDBUF  TCOM        CLEAR COMMANDS ENTERED 
          CWM    SLCA,ON
          SBN    1+TCOM-TPAR
          CWM    SLCA,ON
  
 SLC      SUBR               ENTRY/EXIT 
          ZJN    SLC1        IF CLEARING COMMANDS 
          STM    SLCA+4      CLEAR LEGAL COMMANDS 
          SHN    -14
          STM    SLCA+3 
          LDBUF  TPAR        SET LEGAL COMMANDS 
          CWM    SLCA,ON
          UJN    SLCX        RETURN 
  
 SLCA     BSSZ   5           LEGAL COMMANDS 
 SNC      SPACE  4,10 
**        SNC - SET CHANNEL SPECIFIED BY *NC*.
* 
*         ENTRY  (NC) = CHANNEL FLAG, 0 = FIRST CHANNEL.
* 
*         EXIT   (A) = 0 IF CHANNEL SET IN *RD* DEVICE. 
*                (A) .NE. 0 IF CHANNEL DOWN OR NOT PRESENT. 
* 
*         USES   CH, CM - CM+4, CN - CN+4.
* 
*         CALLS  SCH. 
* 
*         MACROS LDBUF. 
  
  
 SNC2     LDN    1           SET CHANNEL NOT PRESENT
  
 SNC      SUBR               ENTRY/EXIT 
          LDD    NC 
          ZJN    SNC1        IF FIRST CHANNEL 
          LDD    CN+2 
          ZJN    SNC2        IF NO SECOND CHANNEL 
          STD    CN+1 
          LDN    0
 SNC1     STD    CN+2 
          LPN    77 
          STD    CH 
          SHN    21-12
          MJN    SNCX        IF DOWN CHANNEL
          LDN    0
          RJM    SCH         SET CHANNEL IN EST 
          LDBUF  ESTD        RESTORE EST
          CRD    CN 
          LDN    0
          UJN    SNCX        RETURN 
 SPU      SPACE  4,10 
**        SPU - SET PHYSICAL UNIT.
* 
*         ENTRY  (LU) = LOGICAL UNIT NUMBER.
*                (A) = MST ADDRESS CONTAINING UNIT. 
* 
*         EXIT   (PU) = UNIT NUMBER.
*                (A) = DISPLAY CODE UNIT NUMBER.
* 
*         USES   PU, T0, CM - CM+4. 
* 
*         CALLS  C2D. 
  
  
 SPU      SUBR               ENTRY/EXIT 
          SHN    3           READ *DDLL* MST WORD 
          ADN    DDLL 
          CRD    CM 
          LDN    CM*2+11     SET BYTE POINTER = CM+4 - LU/2 
          SBD    LU 
          SHN    21 
          STD    T0 
          LMD    T0 
          LMI    T0 
          MJN    SPU1        IF FIRST UNIT IN BYTE
          SHN    -6 
 SPU1     LPN    77 
          STD    PU 
          RJM    C2D         CONVERT TO DISPLAY CODE
          UJN    SPUX        RETURN 
 SSP      SPACE  4,20 
**        SSP - SET SUSPEND STATUS ON DEVICE. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (MS) = MST ADDRESS.
*                (SC) = CURRENT COUNT OF SUSPENDED DEVICES. 
* 
*         EXIT   (A) .NE. 0 IF A CONTROL POINT ERROR FLAG IS SET. 
*                (SC) = UPDATED SUSPEND COUNT.
* 
*         USES   CM+1, CM+2, SC, T5.
* 
*         CALLS  C2D. 
* 
*         MACROS CMSTF, MESG, MONITOR.
  
  
 SSP      SUBR               ENTRY/EXIT 
  
*         SET DOWN STATUS.
  
          LDD    EQ 
          STD    T5 
          STD    CM+1 
          LDK    DWES 
          STD    CM+2 
          MONITOR  SEQM 
          AOD    SC          UPDATE SUSPEND COUNT 
          AOM    CSPA        SET DEVICE STATE CHANGE FLAG 
          LDD    EQ          SET EQUIPMENT
          STD    T5 
          SHN    -3          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          RJM    C2D
          STM    SSPA+1 
          LDD    EQ          CONVERT LOWER DIGIT OF EST ORDINAL 
          LPN    7
          SHN    6
          ADC    2R0, 
          STM    SSPA+2 
          CMSTF  LFPR        FORCE UPDATE OF LOCAL MST TO ECS 
          MESG   SSPA 
          LDN    0
          LJM    SSPX        RETURN 
  
 SSPA     DATA   C*EQXXX, SYSTEM USAGE OF DEVICE SUSPENDED.*
 SUU      SPACE  4,10 
**        SUU - SPIN UP UNITS.
* 
*         ENTRY  (RU) = UNITS TO BE RECONFIGURED OR RECABLED. 
* 
*         EXIT   (A) .NE. 0 IF *ABORT* ENTERED OR CP ERROR FLAG IS SET. 
* 
*         USES   LU, T7, CN - CN+4. 
* 
*         CALLS  CNR, DOS, PSA, SCF, SPU. 
* 
*         MACROS COMMAND, IFCOM, LDBUF, MESG. 
  
  
 SUU      SUBR               ENTRY/EXIT 
          LDN    MSTL        SET *RD* DEVICE
          STD    T7 
          LDBUF  ESTD        SET NEW DEVICE PARAMETERS
          CRD    CN 
          ADN    MSTD-ESTD
          CRM    BFMS,T7
          RJM    SCF         SET COMMON *RD* DEVICE FIELDS
          NJN    SUUX        IF CONTROL POINT ERROR FLAG SET
  
  
          UJN    SUU2        ENTER LOOP 
  
 SUU1     COMMAND            CLEAR COMMAND LIST 
          AOD    LU          ADVANCE UNIT 
          LDD    SL 
          RAD    T7 
          SBM    SLM
          ZJN    SUUX        IF END OF UNITS
 SUU2     LDD    RU 
          LMM    TMSK,LU
          SBD    RU 
          PJN    SUU1        IF NOT CHANGING THIS UNIT
          LDD    MS 
          RJM    SPU         GET OLD UNIT NUMBER
          STM    SUUA+12
          LDD    RM 
          RJM    SPU         GET NEW UNIT NUMBER
          STM    SUUA+20
          COMMAND  (ABORT,IGNORE)  SET LEGAL COMMANDS 
          MESG   SUUA        *MOVE PACK FROM UNIT XX TO UNIT YY ...*
 SUU3     RJM    CNR         CHECK IF UNIT READY
          NJN    SUU4        IF READY CHECK SERVO TIMING
          RJM    DOS         DELAY
          IFCOM  IGNORE,SUU1 IF IGNORE OF NOT READY 
          IFCOM  ABORT,SUUX  IF *ABORT* 
          UJN    SUU3        RECHECK UNIT 
  
 SUU4     RJM    PSA         PROCESS SERVO ADJUSTMENT 
          NJN    SUU5        IF *ABORT* 
          LJM    SUU1        PROCESS NEXT UNIT
  
 SUU5     LJM    SUUX        RETURN 
  
 SUUA     DATA   C*MOVE PACK FROM UNIT XX  TO UNIT YY AND SPIN UP.* 
 ULD      SPACE  4,20 
**        ULD - UPDATE LINKED DEVICE MST-S. 
* 
*         ENTRY  (NU) = NUMBER OF UNITS FOR EQUIPMENT.
*                (MS) = MST ADDRESS/10B OF EQUIPMENT TO RECONFIGURE.
* 
*         USES   T7, CM - CM+4, CN - CN+4, T1 - T3. 
* 
*         MACROS SFA. 
  
  
 ULD      SUBR               ENTRY/EXIT 
  
*         CHECK IF UNIT IS IN FIRST EQUIPMENT OF LINKED DEVICE. 
  
          LDD    MS          GET ORIGINAL NUMBER OF UNITS - 1 
          SHN    3
          ADN    DDLL 
          CRD    CM 
          LDD    CM 
          SHN    -3 
          LPN    7
          ADN    1
          STD    T1          SAVE POSITION IN UNIT LIST 
          SBD    NU 
          PJN    ULDX        IF UNITS IN FIRST EQUIPMENT IN CHAIN 
  
*         BUILD TABLE OF UNITS IN *TDAT*. 
  
          LDN    0           INITIALIZE LOOP
          STD    T2 
          LDN    4
          STD    T3 
 ULD1     LDM    CM,T3       SET UNITS
          SHN    14 
          STM    TDAT+1,T2
          SHN    -14
          STM    TDAT,T2
          LDN    2           ADVANCE TABLE POINTER
          RAD    T2 
          SOD    T3 
          NJN    ULD1        IF MORE UNITS IN *DDLL*
  
*         GET NEXT EQUIPMENT IN CHAIN.
  
 ULD2     LDD    MS 
          SHN    3
          ADN    STLL 
          CRD    CN 
          LDD    CN+4 
          SHN    -3 
          SFA    EST
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          STD    T7          SAVE MST ADDRESS 
          SHN    3
          ADN    DDLL 
          CRD    CM 
          LDD    CM 
          SHN    21-12
          MJN    ULD2        IF NULL EQUIPMENT
          LDD    CM          SET NUMBER OF UNITS - 1 FOR THIS EQUIPMENT 
          SHN    -3 
          LPN    7
          STD    T2 
  
*         RESET UNIT LIST FROM TABLE OF UNITS.
  
          LDN    CM+4        PRESET LOOP
          STD    T3 
 ULD3     LDI    T3          REPLACE LOWER UNIT 
          SCN    77 
          LMM    TDAT,T1
          STI    T3 
          AOD    T1          ADVANCE TABLE POINTER
          SBD    NU 
          PJN    ULD4        IF END OF UNITS
          SOD    T2 
          MJN    ULD4        IF END OF EQUIPMENT
          LDI    T3          REPLACE UPPER UNIT 
          SHN    14 
          SCN    77 
          LMM    TDAT,T1
          SHN    6
          STI    T3 
          SOD    T3 
          AOD    T1          ADVANCE TABLE POINTER
          SBD    NU 
          PJN    ULD4        IF END OF UNITS
          SOD    T2 
          PJN    ULD3        IF MORE UNITS IN THIS EQUIPMENT
 ULD4     LDD    T7          REWRITE UNIT LIST
          SHN    3
          ADN    DDLL 
          CWD    CM 
          LDD    T1 
          SBD    NU 
          PJN    ULD5        IF END OF UNITS
          LJM    ULD2        GET NEXT EQUIPMENT IN CHAIN
  
 ULD5     LJM    ULDX        RETURN 
 VLB      SPACE  4,20 
**        VLB - VERIFY LABEL. 
* 
*         ENTRY  (T5) = 0, *RD* PSEUDO EQUIPMENT. 
*                (T6) = LABEL TRACK.
*                (T7) = LU * SINGLE UNIT SECTOR LIMIT.
*                (LU) = LOGICAL UNIT NUMBER, 0 - 7. 
*                (PU) = PHYSICAL UNIT NUMBER, 0 - 77. 
*                (CH) = CHANNEL(S) TO CHECK.
* 
*         EXIT   (A) .NE. 0 IF ABORT ENTERED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  PUE, RDS.
* 
*         MACROS ENDMS, SETMS.
  
  
 VLB5     LDC    VLBB        * UNIT XX LABEL VERIFY ERROR.* 
          RJM    PUE         PROCESS UNIT ERROR 
          MJN    VLB1        IF *RECHECK* 
*         UJN    VLBX        RETURN *ABORT* OR *IGNORE* STATUS
  
 VLB      SUBR               ENTRY/EXIT 
 VLB1     SETMS  IO,(AD,DF,NR)
          LDC    BFMS        READ LABEL SECTOR
          RJM    RDS
          PJN    VLB2        IF NO READ ERROR 
          LDC    VLBA        * UNIT XX LABEL READ ERROR.* 
          RJM    PUE         PROCESS UNIT ERROR 
          MJN    VLB1        IF *RECHECK* 
          NJN    VLBX        IF *ABORT* 
*         UJN    VLB2        IGNORE READ ERROR
  
 VLB2     ENDMS 
  
*         VERIFY CONTROL BYTES, TRACK AND EQUIPMENT TYPE. 
  
          LDM    BFMS        CHECK CONTROL BYTES
          LMC    3777 
 VLB3     NJN    VLB5        IF NOT PROPER CONTROL BYTE 
          LDM    BFMS+1 
          LMN    77 
          NJN    VLB3        IF NOT PROPER WORD COUNT 
          LDM    FTSS 
          LMD    LT 
          NJN    VLB3        IF NOT PROPER TRACK
          LDD    MS          READ FAMILY AND DEVICE NUMBER
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDM    E4SS        CHECK EQUIPMENT TYPE 
          LMD    CN+3 
          LPC    3777 
 VLB4     NJN    VLB3        IF NOT CORRECT EQUIPMENT TYPE
  
*         VERIFY FAMILY, DEVICE NUMBER AND RELATIVE UNIT. 
  
          LDD    CM+4        SET RELATIVE UNIT
          SCN    70 
          STD    CM+4 
          LDD    LU 
          SHN    3
          RAD    CM+4 
          LDM    N4SS+5*PFGL COMPARE FAMILY AND DEVICE NUMBER 
          LMD    CM 
          NJN    VLB4        IF NO MATCH
          LDM    N4SS+5*PFGL+1
          LMD    CM+1 
          NJN    VLB4        IF NO MATCH
          LDM    N4SS+5*PFGL+2
          LMD    CM+2 
          NJN    VLB4        IF NO MATCH
          LDM    N4SS+5*PFGL+3
          LMD    CM+3 
          NJN    VLB4        IF NO MATCH
          LDM    N4SS+5*PFGL+4  COMPARE RELATIVE UNIT AND TOTAL UNITS 
          LMD    CM+4 
          LPN    77 
          NJN    VLB4        IF NO MATCH
          LJM    VLBX        RETURN 
  
 VLBA     DATA   C* UNIT XX, CHYY LABEL READ ERROR.*
 VLBB     DATA   C* UNIT XX, CHYY LABEL VERIFICATION ERROR.*
 WAM      SPACE  4,10 
**        WAM - WAIT FOR ALL MACHINES TO SYNCHRONIZE PROCESSING.
* 
*         ENTRY  (A) = CONDITIONAL JUMP INSTRUCTION FOR *WAMB*. 
*                (MF) = MULTI-MAINFRAME FLAG. 
*                (MM) = MACHINE MASK OF THIS MACHINE. 
* 
*         EXIT   (A) .NE. 0 IF COMMAND ABORTED. 
* 
*         USES   CN - CN+2. 
* 
*         CALLS  RDE. 
* 
*         MACROS COMMAND, IFCOM, MESG, SFA. 
  
  
 WAM5     COMMAND            CLEAR COMMAND LIST 
          LDN    1           RETURN ABORT STATUS
  
 WAM      SUBR               ENTRY/EXIT 
          STM    WAMB        CHANGE CONDITIONAL JUMP INSTRUCTION
          ERRNG  37+WAMB-WAM4  IF OUT OF RANGE
          LDD    MF 
          ZJN    WAMX        IF NOT MULTI-MAINFRAME 
          SFA    EST,EQ      TEST FOR SHARED DEVICE 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          LPC    1000 
          ZJN    WAMX        IF DEVICE NOT SHARED 
  
*         CHECK FOR DOWN STATUS SET/CLEAR ON ALL ACTIVE MACHINES
*         SHARING THIS DEVICE.
  
          LDN    1           INITIALIZE MACHINE SEARCH LOOP 
          STD    CN          MACHINE INDEX
          STD    CN+1        MACHINE MASK 
          LDN    0
          STD    CN+2        MST LOCAL AREA INDEX 
 WAM1     RJM    RDE         READ DAT ENTRY 
          NJN    WAM5        IF *ABORT* 
 WAM2     LDM    TDAT+5+4    CHECK ACCESS BIT 
          LMD    CN+1 
          SBM    TDAT+5+4 
          PJN    WAM3        IF NO ACCESS SET FOR MACHINE 
          LDD    MM 
          LMD    CN+1 
          ZJN    WAM3        IF THIS MACHINE
          LDM    BFMS+2+DALL*5,CN+2 
          SHN    0-10 
          LMN    3
          NJN    WAM4        IF DEVICE NOT DOWN 
*         ZJN    WAM4        IF DEVICE STILL DOWN 
 WAMB     EQU    *-1
 WAM3     LDD    CN+1        ADVANCE MACHINE
          RAD    CN+1 
          LDN    LLLL*5 
          RAD    CN+2 
          AOD    CN 
          LMN    MXMF+1 
          NJN    WAM2        IF NOT END OF MACHINES 
          COMMAND            CLEAR LEGAL COMMAND TABLE
          LDN    0
          LJM    WAMX        RETURN 
  
 WAM4     COMMAND  (ABORT,IGNORE)  ENABLE COMMAND PROCESSING
          LDM    BFMS+2+STLL*5+2,CN+2  SET MACHINE ID 
          STM    WAMA+14
          MESG   WAMA        SET MESSAGE IN K-DISPLAY 
          IFCOM  IGNORE,WAM3 IF *IGNORE* COMMAND ENTERED
          IFCOM  ABORT,WAM5  IF *ABORT* COMMAND ENTERED 
          LJM    WAM1        RECHECK THIS MACHINE INDEX 
  
 WAMA     DATA   C* WAITING FOR MACHINE ID=XX.* 
 WFC      SPACE  4,10 
**        WFC - WAIT FOR COMMAND TO BE ENTERED. 
* 
*         EXIT   (A) .LT. 0 IF *RECHECK* COMMAND ENTERED. 
*                (A) = 0 IF *IGNORE* OR *NEXT* COMMAND ENTERED. 
*                (A) .GT. 0 IF *ABORT* COMMAND ENTERED. 
*                COMMAND LIST CLEARED.
* 
*         USES   T1.
* 
*         MACROS COMMAND, IFCOM.
  
  
 WFC2     COMMAND            CLEAR COMMAND LIST 
          SOD    T1          RETURN COMMAND CODE
  
 WFC      SUBR               ENTRY/EXIT 
 WFC1     LDN    0           PRESET COMMAND CODE
          STD    T1 
          IFCOM  RECHECK,WFC2  IF *RECHECK* 
          AOD    T1 
          IFCOM  (IGNORE,NEXT),WFC2  IF *IGNORE* OR *NEXT*
          AOD    T1 
          IFCOM  ABORT,WFC2  IF *ABORT* 
          UJN    WFC1        RECHECK COMMAND ENTRY
          TITLE  COMMON DECKS.
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
*CALL     COMPIFR 
*CALL     COMPTGB 
*CALL     COMPTLB 
*CALL     COMPMSV 
          SPACE  4
          USE    LITERALS 
 TABLES   SPACE  4,10 
 TMSK     BSS    0           TABLE OF MASK BITS INDEXED BY ORDINAL
          CON    1
          CON    2
          CON    4
          CON    10 
          CON    20 
          CON    40 
          CON    100
          CON    200
          CON    400
          CON    1000 
          CON    2000 
          CON    4000 
  
 TDAT     EQU    *           TWO CM WORD BUFFER FOR DAT ENTRY 
 OVLA     EQU    TDAT+5*2    OVERLAY AREA 
 L.1RM    EQU    OVLA+1+ZPXL END OF *1RM* PLUS *0PI*
          ERRPL  L.1RM-BFMS  *OPI* EXTENDS INTO BFMS
 PRS      TITLE  PRESET.
**        PRS - PRESET. 
* 
*         EXIT   (SC) = 0, SUSPENDED DEVICE COUNT.
*                (EQ) = *RD* EQUIPMENT EST ORDINAL. 
*                (RM) = *RD* DEVICE MST ADDRESS.
*                (MF) = MULTI-MAINFRAME LINK DEVICE NUMBER. 
*                (TUNL) = DDLL MST WORD FOR NEW DEFINITION. 
* 
*         USES   EQ, MF, MM, RM, SC, CM - CM+4. 
* 
*         CALLS  DFM. 
* 
*         MACROS MONITOR, SFA.
  
  
 PRS      SUBR               ENTRY/EXIT 
  
*         CHECK STATUS WORD ADDRESS.
  
          LDD    IR+3        CHECK ADDRESS
          LPN    77 
          SHN    14 
          MJN    PRS1        IF OUT OF RANGE
          ADD    IR+4 
          ADN    CBMX 
          SHN    -6 
          SBD    FL 
          PJN    PRS1        IF .GT. FL - 1 
          LDD    IR+3        SET ADDRESS - 2
          LPN    77 
          SHN    14 
          ADD    IR+4 
          SBN    2
          PJN    PRS2        IF .GT. RA + 1 
 PRS1     LDC    =C* 1RM INCORRECT REQUEST.*
          LJM    PRS3        ISSUE ERROR MESSAGE AND ABORT
  
*         CHECK FOR LEGAL ACCESS. 
  
 PRS2     LDD    CP          GET QUEUE PRIORITY 
          ADN    JCIW 
          CRD    CM 
          LDC    MSSI 
          LMD    CM+2 
          ZJN    PRS4        IF LEGAL ACCESS
          LDC    =C* 1RM USER ACCESS NOT VALID.*
 PRS3     RJM    DFM         ISSUE MESSAGE
          MONITOR  ABTM 
          LJM    PPR         EXIT 
  
*         GET MASS STORAGE EQUIPMENT EST POINTERS.
*         SET MULTI-MAINFRAME STATUS. 
  
 PRS4     LDC    MMFL        GET EST ORDINAL OF LINK DEVICE 
          CRD    CM 
          LDD    CM+1        SET MMF STATUS 
          LPC    777
          STD    MF 
          LDD    CM+3        SET MACHINE MASK 
          STD    MM 
          LDN    RDEQ        READ *RD* EST ENTRY
          STD    EQ 
          SFA    EST
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          STD    RM 
          LDN    0           CLEAR SUSPENDED DEVICE COUNT 
          STD    SC 
          LDK    CHTP        READ FWA OF CHANNEL TABLES 
          CRD    CM 
          LDD    CM+2        PRESET FWA OF CONTROLWARE TABLE
          SHN    14 
          LMD    CM+3 
          ADN    CTALL*2
          STM    GCIA+1 
          SHN    -14
          RAM    GCIA 
          LJM    PRSX        RETURN 
          SPACE  4
          END 
