1MV 
          IDENT  1MV,IMV
          PERIPH
          BASE   MIXED
          SST 
*COMMENT  1MV - MASS STORAGE AND MEDIA VERIFICATION.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  1MV - MASS STORAGE AND MEDIA VERIFICATION. 
          SPACE  4,10 
***       1MV - MASS STORAGE AND MEDIA VERIFICATION.
* 
*         R. K. MYERS.       84/11/19.
*         W. E. GOEBEL.      85/04/12.
          SPACE  4,10 
***       *1MV* PERFORMS THE FOLLOWING MASS STORAGE VALIDATION
*         FUNCTIONS.
* 
*         0 = DVFC = MASS STORAGE DEVICE VERIFICATION.
*                PERFORM A PHYSICAL AND LOGICAL VERIFICATION OF A MASS
*                STORAGE EQUIPMENT. 
*                PHYSICAL VERIFICATION INVOLVES WRITING AND READING 
*                THE MAINTENANCE CYLINDER ON ALL UNITS OF A DEVICE
*                THROUGH ALL CHANNELS OF ACCESS.  THE DATA READ IS
*                VERIFIED AGAINST THE DATA WRITTEN. 
*                LOGICAL VERIFICATION INVOLVES THE READING OF THE 
*                LABEL SECTOR ON ALL UNITS OF A DEVICE THROUGH ALL
*                CHANNELS OF ACCESS.  THE LABEL READ IS VERIFIED FOR
*                THE PROPER DATA. 
* 
*         1 = ONFC = SET DEVICE IN *ON* STATE.
*                THE DEVICE IS TURNED ON UPON SUCCESSFUL VERIFICATION.
* 
*         2 = IDFC = SET DEVICE IN *IDLE* STATE.
*                SET THE DEVICE IN THE *IDLE* STATE UPON A SUCCESSFULL
*                VERIFICATION.
* 
*         3 = OFFC = SET DEVICE IN *OFF* STATE. 
*                SET THE DEVICE IN THE *OFF* STATE UPON A SUCCESSFULL 
*                LABEL VERIFICATION.  THE PHYSICAL VERIFICATION IS
*                NOT PERFORMED. 
* 
*         4 = MVFC = MEDIA VERIFICATION.
*                A LOGICAL TRACK IS WRITTEN AND READ SECTOR 
*                BY SECTOR THROUGH ALL CHANNELS OF ACCESS.
*                IF NO ERRORS ARE ENCOUNTERED, THE TRACK FLAW 
*                IS CLEARED AND THE TRACK CAN BE REUSED.
* 
*         5 = UCFC = MASS STORAGE DATA PATH VERIFICATION AND SET
*                    CHANNEL STATE = *UP*.
*                PERFORM A PHYSICAL AND LOGICAL VERIFICATION OF A 
*                MASS STORAGE EQUIPMENT USING A SPECIFIED CHANNEL.
*                PHYSICAL AND LOGICAL VERIFICATION ARE PERFORMED IN THE 
*                SAME FASHION AS FOR FUNCTION *DVFC* WITH THE EXCEPTION 
*                THAT ONLY THE SPECIFIED CHANNEL IS USED.  UPON 
*                SUCCESSFUL VERIFICATION, THE CHANNEL STATE IS CHANGED
*                TO *UP*. 
* 
*         6 = SCFC = DISK SWEEP CYCLING.
*                PERFORM THE NEXT SEEK SEQUENCE IN THE SWEEP CYCLING
*                ALGORITHM FOR ALL PHYSICAL UNITS OF THE DEVICE WHOSE 
*                EST ORDINAL WAS PASSED IN THE *1MV* CALL.
          SPACE  4,15 
***       CALL. 
* 
*T        18/1MV, 6/CP, 12/EST, 6/FCN, 1/R, 17/PAR. 
* 
*         CP     CALLING CONTROL POINT. 
*         EST    EST ORDINAL TO PROCESS.
*         FCN    FUNCTION CODE. 
*         R      LABEL REPAIR HAS BEEN ATTEMPTED. 
*         PAR    = TRACK NUMBER TO TEST (FUNCTION *MVFC*).
*                = CHANNEL NUMBER, INCLUDING CONCURRENCY FLAG (FUNCTION 
*                  *UCFC*). 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMPCHI 
*CALL     COMSCPS 
*CALL     COMSDFS 
          QUAL   DSL
*CALL     COMSDSL 
          QUAL   *
 PLSS     EQU    /DSL/PLSS
*CALL     COMSEVT 
*CALL     COMSHIO 
*CALL     COMSLSD 
          QUAL   MMF
*CALL     COMSMMF 
          QUAL   *
 MISD     EQU    /MMF/MISD
*CALL     COMSMSP 
*CALL     COMSMST 
*CALL     COMSPFM 
*CALL     COMSPIM 
*CALL     COMSSSE 
*CALL     COMSWEI 
*CALL     COMSZOL 
*CALL     COMS1DS 
          LIST   X
*CALL     COMS1MV 
          LIST   *
          TITLE  MACRO DEFINITIONS. 
 FCN      SPACE  4,10 
**        FCN - DEFINE FUNCTION PROCESSOR.
* 
* FN      FCN    P,R,E
* 
*         FN     FUNCTION CODE. 
*         P      NAME OF FUNCTION PROCESSOR.
*         R      NAME OF REPAIR PROCESSOR (HANDLES REPAIRABLE ERRORS).
*         E      ERRORS THAT CAN BE REPAIRED BY *R*.
* 
*         TABLE GENERATED.
* 
*T,TN     12/ P,12/ R,12/ E 
  
  
          PURGMAC  FCN
  
          MACRO  FCN,FN,P,R,E 
          MACREF FCN
          ORG    TFCN+3*FN
          LOC    FN 
 .A       IFC    NE,$P$$
          CON    P,R,E
 .A       ELSE
          LOC    *O 
 .A       ENDIF 
          ENDM
 OVERLAY  SPACE  4,10 
**        OVERLAY - DEFINE THE SECONDARY OVERLAY(S).
* 
*         OVERLAY (TEXT)
*         ENTRY  *TEXT* = TEXT OF SUBTITLE. 
  
  
 .N       SET    0
 OVLB     MICRO  1,, 2V      OVERLAY NAME 
  
  
          PURGMAC OVERLAY 
  
 OVERLAY  MACRO  TEXT 
          MACREF OVERLAY
          QUAL
 .N       SET    .N+1 
 .M       MICRO  .N,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 
 .O       MICRO  1,3, "OVLB"".M"
          QUAL   ".O" 
          TITLE  ".O" - TEXT
          IDENT  ".O",OVLA   TEXT 
*COMMENT  1MV - TEXT
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          ORG    OVLA 
          LJM    *           ENTRY/EXIT 
          UJN    *-2         OVERLAY EXIT ADDRESS 
          ENDM
 ENTRY    SPACE  4,10 
**        ENTRY - DEFINE OVERLAY ENTRY POINT. 
* 
* NAME    ENTRY 
*         NAME = NAME OF ENTRY ADDRESS. 
  
  
          PURGMAC ENTRY 
  
          MACRO  ENTRY,NAME 
          MACREF ENTRY
          QUAL
 NAME     BSS    0           ENTRY
          QUAL   *
          ENDM
 VERIFY   SPACE  4,10 
**        VERIFY - DEFINE HARDWARE VERIFICATION ROUTINE FOR EQUIPMENT.
* 
* NAME    ENTRY  EQ 
*         NAM =  NAME OF ENTRY ADDRESS. 
*         EQ =   EQUIPMENT TYPE(S) TO VERIFY. 
  
  
          PURGMAC VERIFY
          MACRO  VERIFY,NAM,EQ
          MACREF VERIFY 
 NAM      SUBR               ENTRY/EXIT 
          IRP    EQ 
 PRC._EQ  EQU    NAM
          IRP 
          ENDM
          SPACE  4,20 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 BEGIN    BSSN   16 
 T8       BSSN   1           SCRATCH
 T9       BSSN   1           SCRATCH
 CN       BSSN   5           CM WORD BUFFER (5 LOCATIONS) 
 CC       BSSN   1           CURRENT CHANNEL ORDINAL FOR DEVICE 
 DA       BSSN   1           CHANNEL COUNT - 1 FOR DEVICE 
 ES       BSSN   5           EST ENTRY (5 LOCATIONS)
 EI       BSSN   1           SCRATCH
 FC       BSSN   1           FUNCTION CODE
 FP       BSSN   1           *SEQM* FUNCTION PARAMETER
 HC       BSSN   1           HEAD PROCESSING COUNTER
 MT       BSSN   1           MEDIA ERROR THRESHOLD (1MV)
*                            SCRATCH CELL (2VA) 
 NS       BSSN   1           NUMBER OF SECTORS TO PROCESS 
 SU       BSSN   1           SINGLE UNIT SECTOR LIMIT 
 DP       BSSN   5           DEVICE SEEK PARAMETERS (5 LOCATIONS) 
          ERRNG  50-*        DIRECT CELL OVERFLOW 
          BSSN   57-* 
 SP       BSSN   1           STATISTICS BUFFER POINTER
          ERRNG  70-*        DIRECT CELL OVERFLOW 
 END      BSSN
  
 EQ       EQU    IR+2        EQUIPMENT ORDINAL TO PROCESS 
****
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 BUFL     EQU    502         PP BUFFER SIZE 
 BUFP     EQU    5252        BUFFER WORD PATTERN FOR WRITE/READ TEST
 CH       EQU    0           MASS STORAGE CHANNEL 
 DVSC     EQU    3           DEVICE VERIFICATION SECTOR COUNT 
 FCOC     EQU    10          OPERATION COMPLETE FUNCTION CODE 
 FCGS     EQU    12          GENERAL STATUS FUNCTION CODE 
 FCFP     EQU    16          FORMAT 895 FUNCTION CODE 
 FPBL     EQU    22          PARAMETER BLOCK LENGTH FOR 895 FORMATTING
 METH     EQU    6           MAINTENANCE CYLINDER MEDIA ERROR THRESHOLD 
  
  
**        STATISTICS BUFFER DEFINITION. 
  
  
 BEGIN    BSSN   0
 WCDB     BSSN   1           WRITE ERROR CODE BYTE
 RCDB     BSSN   1           READ ERROR CODE BYTE 
 FMTB     BSSN   1           895 FORMATTING ERROR COUNT BYTE
 WCTB     BSSN   1           WRITE ERROR COUNT BYTE 
 RCTB     BSSN   1           READ ERROR COUNT BYTE
 VCTB     BSSN   1           VERIFY ERROR COUNT BYTE
 FMNB     BSSN   3           FAMILY/PACK NAME BYTES 
 DNMB     BSSN   1           DEVICE NUMBER BYTE 
 EMNB     BSSN   1           EQUIPMENT MNEMONIC BYTE
 LREB     BSSN   1           LABEL READ ERROR CODE
 LEFB     BSSN   1           LABEL ERROR FLAGS
 MXNB     BSSN   0           MAXIMUM STATUS BUFFER BYTES
 END      BSSN
 TBUFL    EQU    2*10*MXNB   TOTAL BUFFER LENGTH IN PP BYTES
****
          TITLE  MAIN PROGRAM.
**        1MV - MAIN PROGRAM. 
  
  
          ORG    PPFW 
 IMV      LJM    PRS         PRESET PROGRAM 
 DPP      SPACE  4,10 
**        DROP PP.
  
  
 DPP      RJM    RAE         RELEASE ASSIGNED EQUIPMENT 
          RJM    CVI         CLEAR VERIFICATION INTERLOCK 
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
          TITLE  FUNCTION PROCESSORS. 
 DVFC     SPACE  4,10 
**        DVFC - DEVICE VERIFICATION AND CLEAR SUSPECT. 
* 
*         ENTRY  (IR+2) = EST ORDINAL TO VERIFY.
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *DVFC*. 
  
  
 DVF      ENTRY              ENTRY
          RJM    DHV         PERFORM DEVICE VERIFICATION
          RJM    LBV         PERFORM LABEL VERIFICATION 
 DVF1     RJM    CFE         CHECK FOR ERRORS 
          MJN    DVF2        IF ERRORS
          LDN    CSES        CLEAR SUSPECT
          RJM    SDA         SET DEVICE AVAILABLE 
          RJM    IPE         ISSUE REMOVABLE PACK EVENT 
 DVF2     CMSTF  L1MV        CLEAR *1MV* ACTIVE FLAG
 DVF3     UJP    DPP         DROP PP
 ONFC     SPACE  4,10 
**        ONFC - DEVICE VERIFICATION AND SET DEVICE *ON*. 
* 
*         ENTRY  (IR+2) = EST ORDINAL TO VERIFY.
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *ONFC*. 
  
  
 ONF      ENTRY              ENTRY
          RJM    DHV         PERFORM DEVICE VERIFICATION
          RJM    LBV         PERFORM LABEL VERIFICATION 
 ONF1     RJM    CFE         CHECK FOR ERRORS 
          MJN    ONF2        IF ERRORS
          LDN    ONES        SET DEVICE ON
          RJM    SDA         SET DEVICE AVAILABLE 
*         LDN    0
          RJM    SVF         CLEAR VERIFICATION FAILURE COUNT 
 ONF2     UJN    DVF3        DROP PP
 IDFC     SPACE  4,10 
**        IDFC - DEVICE VERIFICATION AND SET DEVICE *IDLE*. 
* 
*         ENTRY  (IR+2) = EST ORDINAL TO VERIFY.
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *IDFC*. 
  
  
 IDF      ENTRY              ENTRY
          RJM    DHV         PERFORM DEVICE VERIFICATION
          RJM    LBV         PERFORM LABEL VERIFICATION 
 IDF1     RJM    CFE         CHECK FOR ERRORS 
          MJN    IDF2        IF ERRORS
          LDN    IDES        SET DEVICE IN *IDLE* STATE 
          RJM    SDA         SET DEVICE AVAILABLE 
 IDF2     UJN    ONF2        DROP PP
 LVA      SPACE  4,10 
**        LVFC - LABEL VERIFICATION AND SET DEVICE *OFF*. 
* 
*         ENTRY  (IR+2) = EST ORDINAL TO VERIFY.
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *OFFC*. 
  
  
 LVA      ENTRY              ENTRY
          RJM    LBV         PERFORM LABEL VERIFICATION 
          RJM    CFE         CHECK FOR ERRORS 
          MJN    LVA1        IF ERRORS
          LDN    OFES        SET DEVICE OFF 
          RJM    CSF         ISSUE *SEQM* FUNCTION
 LVA1     UJN    IDF2        DROP PP
 MVA      SPACE  4,10 
**        MVFC - MEDIA VERIFICATION OF A PARTICULAR TRACK.
* 
*         ENTRY  (IR+2) = EST ORDINAL TO PROCESS. 
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *MVFC*. 
*                (IR+4) = LOGICAL TRACK NUMBER TO VERIFY. 
  
  
 MVA      ENTRY              ENTRY
          LDD    ES+4        READ MAXIMUM TRACKS
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    IR+4        PRESET TRACK NUMBER TO PROCESS 
          STD    T6 
          LPC    3777 
          SBD    CM 
          PJP    MVA6        IF BEYOND END OF TRT 
          SETMS  IOCH,(AD,DE,DF,ND,NR),DBUF 
          RJM    FBP         FILL BUFFER WITH WRITE PATTERN 
  
*         WRITE, READ AND VERIFY ENTIRE TRACK.
  
          LDD    T4          SET CHANNEL FOR BUFFERED DEVICE
 MVA1     STM    STSB 
          LDN    0           INITIALIZE SECTOR NUMBER 
          STD    T7 
          LDN    MXSC        SET SECTOR COUNT 
          STD    NS 
 MVA2     SBD    NS 
          PJN    MVA3        IF NOT MAXIMUM SECTORS TO PROCESS
          RAD    NS 
 MVA3     RJM    WCS         WRITE CONSECUTIVE SECTORS
          NJN    MVA5        IF WRITE ERRORS
          RJM    RCS         READ BACK SECTOR DATA
          NJN    MVA5        IF READ ERRORS 
          RJM    VBD         VERIFY BUFFER DATA 
          NJN    MVA5        IF DATA VERIFICATION ERRORS
          LDM    SLM
          SBD    T7 
          NJN    MVA2        IF NOT SECTOR LIMIT
          RJM    SNC
          PJP    MVA1        IF ANOTHER CHANNEL TO PROCESS
          LDD    EQ 
          STD    CM+1 
          LDD    IR+4        TRACK NUMBER TO CLEAR FLAW ON
          STD    CM+2 
          LDN    CTFS 
          STD    CM+3 
          MONITOR  STBM 
          UJN    MVA6        RETURN 
  
 MVA5     ENDMS 
          LDK    /COMSDFS/HS0105  ISSUE BML MESSAGE 
          RJM    IBM
 MVA6     LDD    EQ          CLEAR TRACK NUMBER IN MST
          STD    CM+1 
          LDD    IR+4 
          STD    CM+2 
          LDN    CFTS        CONDTIONALLY CLEAR TRACK NUMBER
          STD    CM+3 
          MONITOR  SMDM 
 MVA7     UJP    DVF2        CLEAR *1MV* ACTIVE AND DROP PP 
 UCFC     SPACE  4,10 
**        UCFC - DATA PATH VERIFICATION AND SET CHANNEL STATE = *UP*. 
* 
*         ENTRY  (IR+2) = EST ORDINAL OF EQUIPMENT TO VERIFY. 
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *UCFC*. 
*                (IR+4) = CHANNEL NUMBER, INCLUDING CONCURRENCY FLAG. 
  
  
 UCF      ENTRY              ENTRY
 UCF1     LDM    TSCH,CC
          STD    T4          STORE CHANNEL FOR VERIFICATION PROCESSOR 
          STM    TSCH 
          LMD    IR+4 
          ZJN    UCF3        IF CHANNEL FOUND IN TABLE
          AOD    CC 
          LMD    DA 
          NJN    UCF1        IF ANOTHER CHANNEL 
 UCF2     UJN    MVA7        DROP PP
  
 UCF3     STD    CC          FORCE SINGLE CHANNEL VERIFICATION
          STM    DCHA+4 
          STM    HVLA        DISABLE HYDRA DIAGNOSTICS
          ADN    1
          STD    DA 
          LDD    ES 
          SHN    21-6 
          MJN    UCF5        IF UNAVAILABLE DEVICE
          RJM    DHV         PERFORM VERIFICATION ON SPECIFIED CHANNEL
          RJM    LBV         PERFORM LABEL VERIFICATION 
 UCF4     RJM    CFE         CHECK FOR ERRORS 
          MJN    UCF2        IF ERRORS
 UCF5     LDD    T5          SET CHANNEL STATE TO *UP*
          STD    CM+1 
          LDM    TSCH        CHANNEL
          STD    CM+2 
          LDK    SUCS        SUBFUNCTION
          STD    CM+3 
          MONITOR  SCSM 
          RJM    CEQ         CLEAR ERRORS FROM UNIT I/O QUEUE 
 UCF6     UJP    UCF2        CLEAR ACTIVE FLAG AND DROP PP
 SCF      SPACE  4,10 
**        SCFC - PERFORM DISK SWEEP CYCLING.
* 
*         ENTRY  (IR+2) = EST ORDINAL OF EQUIPMENT ON WHICH TO PERFORM
*                         SWEEP CYCLING SEEK SEQUENCE.
*                (IR+3) = UPPER 6 BITS IS FUNCTION CODE *SCFC*. 
  
  
 SCF      ENTRY              ENTRY
          EXECUTE  0SC,OVLA  EXECUTE *0SC*
          UJN    UCF6        CLEAR ACTIVE FLAG AND DROP PP
          TITLE  SUBROUTINES. 
 AEC      SPACE  4,15 
**        AEC - ANALYZE ERROR CODE. 
* 
*         ENTRY  (RDCT) = 6/, 6/ EC.
*                         EC = ERROR CODE.
*                (MT) = MEDIA ERROR THRESHOLD.
* 
*         EXIT   (A) = 0, IF *EC* IS *DRVE* OR *CRSE*.
*                    = *PARE*, IF *EC*=*PARE* AND *METH* NOT EXCEEDED.
*                    = 1/1, 1/D, 6/, 1/C, 3/, 6/ EC.
*                      D = 1, IF *EC*=*DDFE*. 
*                      C = 1, IF CHANNEL OR CONTROLLER ERROR. 
*                (MT) DECREMENTED IF MEDIA ERROR ENCOUNTERED. 
* 
*         USES   MT.
  
  
 AEC1     LDD    MT          MEDIA ERROR THRESHOLD
          ZJN    AEC3        IF TOO MANY MEDIA ERRORS 
          SOD    MT 
          LDK    PARE+1000*IDC.ME 
          UJN    AECX        RETURN 
  
 AEC2     LMC    SHNI&77&DDFE 
          STM    AECA 
          LDC    AECB        BIT MAP OF ERRORS INVOLVING CHAN/CONT
          SHN    0-**        POSITION BIT CORRESPONDING TO ERROR
 AECA     EQU    *-1
          LPN    1
          LMK    IDC.ME 
          SHN    9D 
          LMD    T0 
 AEC3     LMC    400000+PARE+1000*IDC.ME
  
 AEC      SUBR               ENTRY/EXIT 
          LDM    RDCT 
          LPN    77 
          LMN    DRVE 
          ZJN    AECX        IF DRIVE RESERVE ERROR 
          LMN    CRSE&DRVE
          ZJN    AECX        IF CONTROLLER RESERVE ERROR
          LMN    PARE&CRSE
          ZJN    AEC1        IF MEDIA ERROR 
          STD    T0 
          LMN    DDFE&PARE
          NJN    AEC2        IF NOT DIAGNOSTIC FAILURE
          LDC    600000+1000*IDC.DF+DDFE
          UJN    AECX        RETURN 
  
  
*         GENERATE THE SET OF ERROR CODES OF CHANNEL/CONTROLLER ERRORS. 
  
 .1       SET    1
 .2       SET    0
 .A       ECHO   ,ES=("DREC") 
 .B       IFEQ   IDC.ES,1 
          ERRNG  17D-.1      ERROR CODE OVER 17 IS CHAN/CONT ERROR CODE 
 .1       DECMIC .1 
 .2       SET    .2+1S".1"
 .B       ENDIF 
 .1       SET    .1+1 
 .A       ENDD
  
 AECB     EQU    .2 
 CDA      SPACE  4,10 
**        CDA - CALCULATE PHYSICAL DISK ADDRESS.
* 
*         ENTRY  (T4 - T7) = MASS STORAGE DRIVER PARAMETERS.
*                (ES - ES+4) = *EQDE* WORD OF EST ENTRY.
* 
*         EXIT   (DP - DP+4) = SEEK PARAMETERS. 
* 
*         USES   T1, T2, T3, T8, T9, CM - CM+4, DP - DP+4.
* 
*         MACROS MONITOR. 
  
  
 CDA9     LDD    MA          STORE LOGICAL DISK ADDRESS 
          CWD    T4 
          MONITOR  LDAM      CONVERT TO PHYSICAL ADDRESS
          LDD    MA 
          ADN    1           RETRIEVE SEEK PARAMETERS 
          CRD    DP 
 CDA10    AOD    DP          FLAG DISK ADDRESS PRESENT
  
 CDA      SUBR               ENTRY/EXIT 
          LDD    DP 
          NJN    CDAX        IF ADDRESS ALREADY OBTAINED
          STD    CM+1 
          STD    T8          CLEAR PHYSICAL SECTOR ACCUMULATOR
 CDAA     LDD    T6 
*         UJN    CDA9        (NON-BUFFERED DEVICE)
          LPC    3777 
          STD    T3          ITERATION COUNT FOR CONVERSION 
  
*         UNIT INDEX = SECTOR NUMBER / SINGLE UNIT SECTOR LIMIT.
  
          LDD    T7          LOGICAL SECTOR NUMBER
          STD    T9 
 CDA1     STD    T2 
          AOD    DP          ADVANCE UNIT INDEX 
          LDD    T2 
          SBD    SU 
          PJN    CDA1        IF DIVISION INCOMPLETE 
          LDD    ES+4 
          SHN    3
          ADN    DDLL        FETCH UNIT DESCRIPTOR WORD FROM MST
          CRD    CM 
          SOD    DP 
          SHN    -1 
          LMC    -0          CALCULATE BYTE ADDRESS 
          ADN    CM+4 
          STD    T1 
          LDD    DP 
          LPN    1
          SHN    21-0        DETERMINE POSITION WITHIN BYTE 
          LMI    T1 
          PJN    CDA2        IF UNIT POSITIONED LOW 
          SHN    -6 
 CDA2     LPN    77          EXTRACT UNIT NUMBER
          STD    DP+1 
          LDD    CM          MERGE WITH EQUIPMENT (CONTROLLER) NUMBER 
          LPC    700
          RAD    DP+1 
  
*         CONVERT LOGICAL DISK ADDRESS TO RELATIVE SECTOR COUNT.
  
 CDA3     SOD    T3 
          MJN    CDA5        IF CONVERSION COMPLETE 
          LDM    LSLT 
          RAD    T9          ADVANCE LOGICAL SECTOR COUNT 
          SHN    -14
          RAD    T8 
          UJN    CDA3        LOOP ON CONVERSION 
  
*         DIVIDE THE RELATIVE SECTOR COUNT BY THE NUMBER OF LOGICAL 
*         SECTORS PER CYLINDER. 
  
 CDA4     AOD    DP+2        ADVANCE RELATIVE CYLINDER NUMBER 
 CDA5     LDM    LSCY 
          STD    T0 
          LDD    T9 
          SBM    LSCY+1      DIVIDE BY ITERATIVE SUBTRACTION
          STD    T9 
          PJN    CDA6        IF NO BORROW 
          AOD    T9 
          AOD    T0 
 CDA6     LDD    T8 
          SBD    T0 
          STD    T8 
          PJN    CDA4        IF DIVISION NOT COMPLETE 
          LDM    LSCY+1 
          RAD    T9 
          SHN    -14
          ADD    T0 
          RAD    T8 
          LDD    ES+4 
          SHN    3
          ADN    SCYL        FETCH STARTING CYLINDER FROM MST 
          CRD    CM 
          LDD    CM+2        CONVERT RELATIVE CYLINDER TO ABSOLUTE
          RAD    DP+2 
          UJN    CDA8        COMPLETE ADDRESS CONVERSION
  
*         DIVIDE THE REMAINDER OF THE ABOVE CALCULATION BY THE NUMBER 
*         OF LOGICAL SECTORS PER PHYSICAL TRACK.
  
 CDA7     AOD    DP+3        ADVANCE PHYSICAL TRACK NUMBER
 CDA8     LDN    0
          SBM    LSPT        DIVIDE BY ITERATIVE SUBTRACTION
          RAD    T9 
          PJN    CDA7        IF NO UNDERFLOW
          ADM    LSPT 
 CDAB     SHN    0           SET PHYSICAL SECTOR NUMBER 
          STD    DP+4 
          LJM    CDA10       RETURN 
 CEQ      SPACE  4,10 
**        CEQ - CLEAR ERRORS FROM UNIT I/O QUEUE. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (ES - ES+4) = EST ENTRY. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SUT. 
* 
*         MACROS DELAY, MONITOR.
  
  
 CEQ1     DELAY 
          LDD    CN          *PUT* ORDINAL
 CEQ2     STD    CM+2 
          LDN    SUIS        *BIOM* SUBFUNCTION 
          STD    CM+1 
          MONITOR  BIOM      INTERLOCK *PUT* ENTRY
          LDD    CM+1 
          NJN    CEQ1        IF CURRENTLY UNAVAILABLE 
          LDD    CN 
          STD    CM+2 
          LDN    CETS        CLEAR ERROR STATUS FROM I/O QUEUE
          STD    CM+1 
          MONITOR  BIOM 
*         LDN    0           SCAN UNIT TABLE
 CEQ3     RJM    SUT
          NJN    CEQ2        IF SPECIFIED DEVICE
  
 CEQ      SUBR               ENTRY/EXIT 
          LDD    ES+3 
          LMC    2RDV 
          ZJN    CEQX        IF AN 819 DISK 
          LMK    2RDW&2RDV
          ZJN    CEQX        IF AN 819 DISK 
          LCN    0
          UJN    CEQ3        CLEAR ERRORS 
 CFE      SPACE  4,25 
**        CFE - CHECK FOR ERRORS. 
* 
*         ENTRY  (DVC1) = CHANNEL 1 DEVICE STATISTICS.
*                (DVC2) = CHANNEL 2 DEVICE STATISTICS.
* 
*         EXIT   (A) .LT. 0 IF ERRORS FOUND.
*                *1DS* CALLED TO DOWN CHANNEL IF ERRORS ON ONE OF TWO 
*                CHANNELS OR PATH VERIFICATION FAILURE. 
*                DEVICE DOWNED IF VERIFY ERRORS.
*                DEVICE TURNED OFF IF OTHER ERRORS. 
* 
*         USES   CC, SP, T2, T3, CM - CM+4, CN - CN+4.
* 
*         CALLS  CSF, DCH, IBM, SVF, VSF. 
* 
*         NOTE - *CFE* USES CM - CM+4 AND CN - CN+4 TO ACCUMULATE ANY 
*                ERRORS DETECTED ON THE FIRST AND SECOND CHANNELS,
*                RESPECTIVELY.  THE FIVE BYTES ARE USED AS FOLLOWS -
* 
*                BYTE 0 = CHANNEL NUMBER. 
*                BYTE 1 = VERIFICATION ERROR COUNT. 
*                BYTE 2 = TOTAL ERROR COUNT.
*                BYTE 3 = UNREPAIRABLE ERROR COUNT. 
*                BYTE 4 = CHANNEL/CONTROLLER ERROR COUNT. 
  
  
 CFE      SUBR               ENTRY/EXIT 
          LDN    ZERL        CLEAR CHANNEL ERROR COUNTS 
          CRD    CM 
          CRD    CN 
          LDN    CM          SET FIRST CHANNEL ACCUMULATOR ADDRESS
          STD    T2 
          LDC    DVC1        BUFFER START ADDRESS 
          STD    SP 
          LDN    0
          STD    CC 
 CFE1     LDM    TSCH,CC     SET CHANNEL NUMBER 
          STI    T2 
          LDN    10          SET UNIT COUNT 
          STD    T3 
 CFE2     LDM    VCTB,SP     ACCUMULATE VERIFY ERROR COUNTS 
          ZJN    CFE3        IF NO VERIFY ERROR 
          AOM    1,T2        COUNT VERIFY ERROR THIS UNIT 
 CFE3     LDM    LEFB,SP     GET REPAIRABLE LABEL ERRORS
          LPC    ** 
 CFEA     EQU    *-1         (SET BY PRESET)
          STD    T0 
          LMM    LEFB,SP     ACCUMULATE READ/WRITE/LABEL ERROR COUNTS 
          ZJN    CFE3.1      IF NO UNREPAIRABLE LABEL ERRORS
          LDN    1
 CFE3.1   ADM    RCTB,SP
          ADM    WCTB,SP
          ADM    FMTB,SP
          ZJN    CFE3.3      IF NO UNREPAIRABLE ERRORS
          SHN    -9D
          ZJN    CFE3.2      IF NO CHANNEL/CONTROLLER ERRORS
          AOM    4,T2        COUNT CHANNEL/CONTROLLER ERRORS
 CFE3.2   AOM    3,T2        COUNT UNREPAIRABLE ERRORS
 CFE3.3   ADD    T0 
          ZJN    CFE4        IF NO ERRORS 
          AOM    2,T2        COUNT ERRORS 
 CFE4     LDN    MXNB 
          RAD    SP 
          SOD    T3 
          NJP    CFE2        IF NOT THROUGH WITH ALL UNITS
          LDN    CN          SET SECOND CHANNEL ACCUMULATOR ADDRESS 
          STD    T2 
          AOD    CC 
          LMD    DA 
          NJP    CFE1        IF ANOTHER CHANNEL 
          SOD    CC 
          ZJN    CFE8        IF ONLY ONE CHANNEL
          LDD    CN+1 
          ADD    CN+2 
          NJN    CFE5        IF ERRORS ON SECOND CHANNEL
          LDD    CM+1 
          ADD    CM+2 
          ZJN    CFE7        IF NO ERROR ON PRIMARY CHANNEL 
  
*         ERROR EXISTS ON PRIMARY CHANNEL BUT NOT ON SECONDARY CHANNEL. 
  
          LDN    CM 
          UJN    CFE6        DOWN CHANNEL 
  
 CFE5     LDD    CM+1 
          ADD    CM+2 
          NJN    CFE8        IF ERRORS ON BOTH CHANNELS 
          LDN    CN 
 CFE6     RJM    DCH         DOWN CHANNEL 
 CFE7     RJM    VSF         VERIFY SYSTEM FILE 
          UJP    CFEX        RETURN 
  
 CFE8     LDD    CM+1 
          ADD    CN+1 
          NJP    CFE10       IF DATA VERIFICATION ERRORS
          LDD    CM+2 
          ADD    CN+2 
          ZJN    CFE7        IF NO READ/WRITE/LABEL ERRORS
          LDD    CM+3 
          ADD    CN+3 
          NJN    CFE9        IF UNREPAIRABLE ERRORS 
          LJM    **          PROCESS REPAIRABLE ERROR 
 CFEB     EQU    *-1         (SET BY PRESET)
  
 CFE9     LDM    DCHA+4 
          ZJN    CFE11       IF PATH VERIFICATION 
          LDD    ES+4 
          SHN    3
          ADN    CTLL 
          CRD    CN 
          AOD    CN          INCREMENT VERIFICATION FAILURE COUNTER 
          RJM    SVF
          LDD    ES+4 
          SHN    3
          ADN    THLL 
          CRD    CM 
          LDD    CN 
          SBD    CM 
          MJP    CFE7        IF COUNT BELOW THRESHOLD - CLEAR ERROR 
          LDD    ES 
          SHN    21-1 
          MJN    CFE13       IF DEVICE OFF OR DOWN
          LDN    OFES 
          RJM    CSF         ISSUE *SEQM* 
          LDN    /COMSDFS/HS0030  ISSUE BML MESSAGE 
          RJM    IBM
          UJN    CFE13       RETURN 
  
 CFE10    LDM    DCHA+4 
          NJN    CFE12       IF NOT PATH VERIFICATION 
 CFE11    LDN    CM 
          RJM    DCH         DOWN CHANNEL 
          LDC    4000+UCFC
          RJM    IBM         ISSUE ERROR LOG MESSAGE
          UJN    CFE14       RETURN 
  
*         DOWN DEVICE WHEN VERIFY ERRORS ARE PRESENT ON ALL CHANNELS. 
  
 CFE12    LDD    ES          CHECK DEVICE STATE 
          LPN    3
          LMN    3
          ZJN    CFE13       IF DEVICE DOWN 
          LDN    DWES        RETURN DOWN STATUS 
          RJM    CSF         ISSUE *SEQM* 
          LDN    /COMSDFS/HS0034  ISSUE BML MESSAGE 
          RJM    IBM
 CFE13    LCN    0
 CFE14    LJM    CFEX        RETURN 
 CSF      SPACE  4,15 
**        CSF - CALL *SEQM* SUBFUNCTION.
* 
*         ENTRY  (A) = *SEQM* SUBFUNCTION.
*                (EQ) = EST ORDINAL.
*                (ES - ES+4) = EST ENTRY. 
* 
*         USES   T3, CM - CM+4. 
* 
*         CALLS  RAE. 
* 
*         MACROS MONITOR, SFA.
  
  
 CSF      SUBR               ENTRY/EXIT 
          STD    T3 
          LDD    ES          CHECK DEVICE STATE 
          LPN    3
          LMN    3
          NJN    CSF1        IF NOT *DOWN*
          RJM    RAE         RELEASE ASSIGNED EQUIPMENT 
 CSF1     LDD    T3 
          STD    CM+2        SET SUBFUNCTION FOR *SEQM* CALL
          LDD    EQ 
          STD    CM+1 
          LDN    0
          STD    CM+4 
          MONITOR  SEQM 
          SFA    EST,EQ      REREAD EST ENTRY 
          ADK    EQDE 
          CRD    ES 
          UJN    CSFX        RETURN 
 CVI      SPACE  4,10 
**        CVI - CLEAR VERIFICATION INTERLOCK. 
* 
*         ENTRY  (CVIA) = EST ORDINAL OF DEVICE WITH INTERLOCK SET. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 CVI      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CM 
          LDC    **          (EST ORDINAL OF DEVICE WITH INTERLOCK SET) 
 CVIA     EQU    *-1
          ZJN    CVIX        IF NO INTERLOCK SET
          STD    CM+1        SET EST ORDINAL
          LDN    CVIS        CLEAR DEVICE VERIFICATION INTERLOCK
          STD    CM+3 
          MONITOR  STBM 
*         LDN    0
          STM    CVIA        CLEAR EST ORDINAL
          UJN    CVIX        RETURN 
 DCH      SPACE  4,10 
**        DCH - DOWN CHANNEL. 
* 
*         ENTRY  (A) = ADDRESS OF CHANNEL SUMMARY.
*                ((A)) = CHANNEL NUMBER.
*                ((A)+4) = CHANNEL/CONTROLLER ERROR COUNT.
*                (EQ) = EST ORDINAL OF EQUIPMENT BEING VERIFIED.
* 
*         USES   CM - CM+4. 
* 
*         MACROS EXECUTE, MONITOR.
  
  
 DCH      SUBR               ENTRY/EXIT 
          STD    CM+1 
          LDI    CM+1 
          STM    DCHA+3      SAVE CHANNEL AND CONCURRENCY FLAG
          LDM    4,CM+1 
          NJN    DCH1        IF CHANNEL/CONTROLLER ERRORS DETECTED
          LDD    EQ          SET EST ORDINAL IN REQUEST 
          RAM    DCHA+4 
 DCH1     LDD    MA 
          CWM    DCHA,ON
          LDN    0
          STD    CM+1 
          EXECUTE  1DS,=
          MONITOR  RPPM      CALL *1DS* TO DOWN CHANNEL 
          UJN    DCHX        RETURN 
  
  
 DCHA     VFD    18/3L1DS,6/,12/DWNF,12/0,12/4000 
 DHV      SPACE  4,10 
**        DHV - PERFORM DEVICE VERIFICATION.
* 
*         ENTRY  (CC) = CHANNEL COUNT.
*                (T5) = EST ORDINAL.
*                (ES - ES+4) = WORD *EQDE* OF EST ENTRY.
* 
*         EXIT   (A) .NE. 0 IF PREMATURE VERIFICATION TERMINATION.
*                ERRORS ENCOUNTERED ARE REFLECTED IN STATISTICS BUFFER. 
* 
*         USES   T8.
* 
*         CALLS  FBP, SVI, DEVICE DEPENDENT PROCESSORS. 
  
  
 DHV1     LDN    0           SET RETURN STATUS
  
 DHV      SUBR               ENTRY/EXIT 
          RJM    SVI         SET VERIFICATION INTERLOCK 
          RJM    FBP         FILL BUFFER WITH WRITE PATTERN 
          LDM    DVPC        SETUP PROCESSOR
          ZJN    DHVX        IF DEVICE NOT SUPPORTED
          STD    T8 
          LDC    LDNI+METH   ALLOW MAINTENANCE CYLINDER MEDIA ERRORS
          ERRPL  METH-100    CODE DEPENDS ON VALUE
          STM    RCSA 
          STM    WCSA 
          RJM    0,T8        PERFORM DEVICE DEPENDENT PROCESSING
          UJN    DHVX        RETURN 
 FBP      SPACE  4,10 
**        FBP - FILL BUFFER WITH PATTERN TO WRITE.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1.
  
  
 FBP      SUBR               ENTRY/EXIT 
          LDC    BUFL 
          STD    T1 
 FBP1     LDC    BUFP        FILL BUFFER WITH PATTERN 
          STM    BFMS-1,T1
          SOD    T1          FILL BUFFER WITH PATTERN 
          NJN    FBP1        IF NOT END OF BUFFER 
*         LDN    0
          UJN    FBPX        RETURN 
 FDC      SPACE  4,10 
**        FDC - FORMAT 895 DEVICE MAINTENANCE TRACK.
* 
*         ENTRY  (T4) = CHANNEL NUMBER. 
*                (EQ) = EST ORDINAL.
*                (DVMT) = MAINTENANCE TRACK NUMBER. 
*                (ES - ES+4) = EST ENTRY. 
* 
*         EXIT   (A) .NE. 0 IF ERROR. 
*                (T4) = CHANNEL NUMBER. 
*                (T5) = EST ORDINAL.
*                (T6) = MAINTENANCE TRACK NUMBER. 
* 
*         CALLS  /2VA/FDC.
* 
*         MACROS EXECUTE. 
  
  
 FDC      SUBR               ENTRY/EXIT 
          LDD    T4          SAVE CHANNEL NUMBER
          STM    FDCA 
          EXECUTE  2VA
          LDC    *           (CHANNEL NUMBER) 
 FDCA     EQU    *-1
          STD    T4 
          RJM    /2VA/FMT    FORMAT 895 MAINTENANCE TRACK 
          UJN    FDCX        RETURN 
 HVE      SPACE  4,15 
**        HVE - HARDWARE VERIFICATION FOR EXTENDED MEMORY DEVICES.
* 
*         ENTRY  (CC) = CHANNEL COUNT.
*                (T5) = EST ORDINAL.
* 
*         EXIT   ERRORS NOTED IN STATISTICS BUFFER. 
* 
*         USES   T6, T7.
* 
*         CALLS  RCS, SNC, VBD, WCS.
* 
*         MACROS SETMS, VERIFY. 
  
  
 HVE      VERIFY (DE,DP)     ENTRY/EXIT 
          SETMS  IOCH,(AD,AR,DE,DF,ND),DBUF 
          LDM    DVMT        SETUP MAINTENANCE TRACK
          STD    T6 
          ZJN    HVEX        IF UNDEFINED 
 HVE1     LDN    1
          STD    NS          SET NUMBER OF SECTORS TO PROCESS 
 HVEA     LDN    0
*         LDN    20          IF EM TRACK SIZE IS MORE THAN 2020 WORDS 
          STD    T7 
 HVE2     RJM    WCS
          RJM    RCS
          RJM    VBD         VERIFY READ BUFFERS
          LDM    SLM
          SBD    T7 
          NJN    HVE2        IF MORE SECTORS TO PROCESS 
          RJM    SNC         SELECT NEXT CHANNEL
          PJN    HVE1        IF SECOND CHANNEL PRESENT
          UJP    HVEX        RETURN 
 HVL      SPACE  4,15 
**        HVL - HARDWARE VERIFICATION FOR RMS DEVICES.
* 
*         ENTRY  (CC) = CHANNEL COUNT.
*                (T4) = FIRST CHANNEL.
*                (T5) = EST ORDINAL.
*                (ES - ES+4) = WORD *EQDE* OF EST ENTRY.
* 
*         EXIT   ERRORS NOTED IN STATISTICS BUFFER. 
* 
*         USES   HC, NS, SP, T6, T7.
* 
*         CALLS  FDC, IHD, RCS, SNC, VBD, WCS.
* 
*         MACROS SETMS, VERIFY. 
  
  
 HVL      VERIFY (DB,DC,DD,DF,DG,DH,DI,DJ,DK,DL,DM,DN,DQ,DR,DX,DY,DZ,EA,
,EB,EC,ED,EE,EF,EM,EN,EG,EH,EI,EJ,EK,EL,EO,EP,ES,EU,EV,EW)
          SETMS  IOCH,(AD,AR,DE,DF,ND),DBUF 
 HVLA     UJN    HVL2        INITIATE HYDRA DIAGNOSTICS 
*         PSN                (PATH VERIFICATION)
  
 HVL1     LDC    0           (HYDRA DIAGNOSTICS DISABLED) 
*         LDC    2*DDFE+1    (HYDRA DIAGNOSTIC FAILURE DETECTED)
 HVLB     EQU    *-1
          ZJN    HVL3        IF NO DIAGNOSTICS
 HVL2     RJM    IHD
*         UJN    HVL3        (IF NOT HYDRA DEVICE)
 HVLE     EQU    HVL2 
 HVL3     LDM    DVMT        SET MAINTENANCE TRACK
          STD    T6 
          ZJN    HVLX        IF UNDEFINED 
 HVLF     RJM    FDC         FORMAT MAINTENANCE TRACK, IF 895 
*         UJN    HVL3.1      (IF NOT 895 DEVICE)
          NJP    HVL5        IF FORMATTING ERROR
 HVL3.1   LDN    0
          STD    HC 
          STM    HVLD 
          STM    HVLG        INITIALIZE SECTOR NUMBER 
          SBM    DVSB        PHYSICAL SECTORS/BUFFER-1
          STM    HVLH        INITIALIZE MASK
          LDD    T4          STORE CHANNEL IN CASE OF BUFFERED DEVICE 
          STM    STSB 
          LDN    DVSC        SET NUMBER OF SECTORS TO PROCESS 
          STD    NS 
          LDM    DVST        RESET FOR OTHER CHANNEL
          STM    HVLC 
 HVL4     LDC    **          SECTOR NUMBER
 HVLG     EQU    *-1
          ADM    DVSB        ROUND UP TO BUFFER MULTIPLE
          LPC    ** 
 HVLH     EQU    *-1
          STD    T7 
          SBM    HVLC 
          PJN    HVL7        IF ROUNDING EXCEEDS SECTOR LIMIT 
          RJM    WCS         WRITE CONSECUTIVE SECTORS
 HVL5     NJN    HVL6        IF WRITE ERRORS
          RJM    RCS         READ BACK SECTOR DATA
          NJN    HVL6        IF READ ERRORS 
          RJM    VBD         VERIFY READ BUFFERS
 HVL6     NJN    HVL10       IF DATA VERIFICATION ERRORS
 HVL7     LDM    DVSI 
          SBN    DVSC        ADVANCE SECTOR TO NEXT PHYSICAL TRACK
          RAM    HVLG 
          LDC    0           SECTORS + GAP SECTORS PER LOGICAL TRACK
 HVLC     EQU    *-1
          SBM    HVLG 
          SBN    1
          PJN    HVL8        IF STILL WITHIN SAME LOGICAL TRACK 
          LMC    -0 
          ADC    0           OFFSET TO NEXT UNIT
 HVLD     EQU    *-1
          SBN    1
          STM    HVLG 
          AOD    T6          INCREMENT TO NEXT LOGICAL TRACK
 HVL8     AOD    HC 
          SBM    DVHL 
          ZJN    HVL11       IF ALL HEADS PROCESSED 
 HVL9     LJM    HVL4        PROCESS NEXT HEAD
  
 HVL10    NJN    HVL12       IF ERROR 
 HVL11    STD    HC 
          LDN    MXNB        INCREMENT STATISTICS POINTER TO NEXT UNIT
          RAD    SP 
          LDM    DVMT        RESET LOGICAL TRACK POINTER
          STD    T6 
          LDD    SU          CHANGE FOR NEXT UNIT 
          RAM    HVLC 
          LDD    SU          CHANGE SECTOR OFFSET TO NEXT UNIT
          RAM    HVLD 
          STD    T7          SET NEXT SECTOR
          LMM    SLM
          NJN    HVL9        IF ANOTHER UNIT
 HVL12    RJM    SNC         SELECT NEXT CHANNEL
          PJP    HVL1        IF SECOND CHANNEL PRESENT
          LJM    HVLX        RETURN 
 IBM      SPACE  4,15 
**        IBM - ISSUE BML MESSAGE.
* 
*         ENTRY  (A) = SYMPTOM CODE OF BML MESSAGE. 
*                (CH) = CHANNEL NUMBER BEING DOWNED.
*                (EQ) = EST ORDINAL.
* 
*         EXIT   (A) = 0. 
* 
*         USES   CN.
* 
*         CALLS  CDA, /2VA/ELM. 
* 
*         MACROS EXECUTE. 
  
  
 IBM      SUBR   DVF2        ENTRY/EXIT 
          STD    CN 
          RJM    CDA         GET PHYSICAL DISK ADDRESS
          EXECUTE  2VA
          LDD    EQ          RESET EQUIPMENT
          STD    T5 
          RJM    /2VA/ELM    ISSUE BML MESSAGE
          UJN    IBMX        RETURN 
 IHD      SPACE  4,10 
**        IHD - INITIATE HYDRA DIAGNOSTICS. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
*                (ES - ES+4) = *EQDE* WORD OF EST ENTRY.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SUT. 
* 
*         MACROS MONITOR. 
  
  
 IHD2     SHN    PUTLS       CHANGE ORDINAL TO INDEX
          ADD    CN+4 
          STD    CM+4 
          SHN    -14         FORM *PUT* ENTRY ADDRESS 
          ADD    CN+3 
          STD    CM+3 
          LDN    1           PARAMETER WORD COUNT 
          STD    CM+1 
          LDN    0           CLEAR UNUSED BYTE
          STD    CM+2 
          LDD    MA          STORE MESSAGE BUFFER PARAMETERS
          CWM    IHDA,CM+1
          MONITOR  UTEM 
*         LDN    0           SCAN UNIT TABLE
 IHD3     RJM    SUT
          NJN    IHD2        IF SPECIFIED DEVICE
  
 IHD      SUBR               ENTRY/EXIT 
 IHD1     LCN    0
          UJN    IHD3        SEARCH FOR *PUT* ENTRY 
  
  
 IHDA     VFD    6/PILL,6/1,6/DVDF,42/1 
 IPE      SPACE  4,10 
**        IPE - ISSUE REMOVABLE PACK EVENT. 
* 
*         ENTRY  (ES - ES+4) = EST ENTRY. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 IPE      SUBR               ENTRY/EXIT 
          LDD    ES+4        READ PACKNAME/DEVICE NUMBER
          SHN    3
          ADK    PFGL 
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          NJN    IPEX        IF NOT AUXILIARY DEVICE
          LDD    CM+3        BUILD PACKNAME HASH
          ADD    CM+2 
          ADD    CM+1 
          ADD    CM 
          STD    CM+4 
          LDN    0           SET EVENT
          STD    CM+1 
          LDN    VSNE/10000 
          STD    CM+3 
          MONITOR  EATM 
          UJN    IPEX        RETURN 
 LBV      SPACE  4,10 
**        LBV - LABEL VERIFICATION. 
* 
*         EXIT   STATISTICS BUFFER UPDATED WITH LABEL ERROR STATUS. 
* 
*         USES   CC, NS, SP, T7, CM - CM+4. 
* 
*         CALLS  SNC, VLS.
  
  
 LBV      SUBR               ENTRY/EXIT 
          LDD    ES          CHECK UNAVAILABLE DEVICE 
          SHN    21-6 
          MJN    LBVX        IF NOT TO PERFORM LABEL CHECK
          SHN    21-5-21+6
          MJN    LBVX        IF BUFFERED DEVICE 
          LDD    ES+4        CHECK FOR INITIALIZE PENDING 
          SHN    3
          ADN    STLL 
          CRD    CM 
          LDD    CM 
          LPC    MLIAL+MLIHD+MLIFD
          NJN    LBVX        IF INITIALIZE PENDING
          ADK    /MMF/LSLT
          STD    T7 
          STD    NS 
          STD    CC 
          LDK    DVC1        SET POINTER TO FIRST CHANNEL BUFFER
          STD    SP 
  
*         VALIDATE LABEL SECTORS ON ALL UNITS.
  
 LBV1     RJM    VLS         CHECK CONTENTS OF LABEL
          AOD    NS          INCREMENT RELATIVE UNIT NUMBER 
          LDN    MXNB        INCREMENT STATISTICS POINTER 
          RAD    SP 
          LDD    SU          INCREMENT TO NEXT UNIT 
          RAD    T7 
          SBM    SLM
          MJN    LBV1        IF NOT FINISHED WITH LOGICAL TRACK 
          LDN    /MMF/LSLT
          STD    T7          RESET STARTING SECTOR NUMBER 
          ADK    0-/MMF/LSLT
          STD    NS          RESET RELATIVE UNIT NUMBER 
          RJM    SNC         SET NEXT CHANNEL 
          PJN    LBV1        IF ALL CHANNELS NOT PROCESSED
          UJP    LBVX        RETURN 
 RCS      SPACE  4,25 
**        RCS - READ CONSECUTIVE SECTORS. 
* 
*         *RCS* READS (NS) CONSECUTIVE SECTORS IN CONSECUTIVE BUFFERS 
*         AT (DBUF).  IF A READ ERROR OCCURS, ((SP)+RCTB) IS INCREMENTED
*         AND READ ERROR CODE SAVED IN ((SP)+RCDB). 
* 
*         ENTRY  (NS) = NUMBER OF SECTORS TO READ.
*                (SP) = STATISTICS GATHERING POINTER. 
*                (T4 - T7) = MASS STORAGE DRIVER PARAMETERS.
* 
*         EXIT   (A) = READ ERROR COUNT.
* 
*         USES   MT, T7, T8, T9.
* 
*         CALLS  AEC, RDS.
* 
*         MACROS SETMS. 
  
  
 RCS5     SETMS  POSITION    FORCE SEEK ON NEXT I/O REQUEST 
*         LDN    0
  
 RCS      SUBR               ENTRY/EXIT 
          LDN    0           SET MEDIA ERROR THRESHOLD
*         LDN    METH        (I/O ON MAINTENANCE CYLINDER)
 RCSA     EQU    *-1
          STD    MT 
          LDC    DBUF        SET BUFFER POINTER 
          STD    T8 
          LDN    0           SET SECTOR NUMBER
          STD    T9 
 RCS1     SBD    NS 
          ZJN    RCS5        IF ALL SECTORS READ
          LDM    DVBE,T9
          NJN    RCS3        IF SECTOR HAD WRITE ERRORS 
          LDD    T8          SET UP BUFFER ADDRESS FOR READ 
          RJM    RDS
          PJN    RCS3        IF NO ERROR
          RJM    AEC         ANALYZE ERROR CODE 
          NJN    RCS2        IF NO CONTROLLER RESERVE 
          LDN    1           SET ERROR INDICATION 
          UJN    RCSX        RETURN 
  
 RCS2     STM    DVBE,T9
          STM    RCDB,SP     SAVE LATEST READ ERROR CODE
          PJN    RCS3        IF NOT TOO MANY MEDIA OR OTHER ERRORS
          AOM    RCTB,SP     SET READ ERROR COUNT 
          UJN    RCSX        RETURN 
  
 RCS3     AOD    T7          ADVANCE TO NEXT SECTOR 
          LDC    BUFL        INCREMENT TO NEXT READ BUFFER
          RAD    T8 
          AOD    T9          INCREMENT SECTOR NUMBER
          UJP    RCS1        PROCESS NEXT SECTOR
 RAE      SPACE  4,10 
**        RAE - RELEASE ASSIGNED EQUIPMENT. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 RAE      SUBR               ENTRY/EXIT 
          LDC    0
 RAEA     EQU    *-1
          ZJN    RAEX        IF EQUIPMENT NOT ASSIGNED
          STD    CM+1 
          MONITOR  DEQM      RELEASE EQUIPMENT ASSIGNMENT 
*         LDN    0
          STM    RAEA 
          UJN    RAEX        RETURN 
 RLT      SPACE  4,10 
**        RLT - REPAIR LABEL TRACK. 
* 
*         EXIT   TO *CFE9* IF DEVICE NOT OWNED BY THIS MAINFRAME. 
* 
*         USES   CM - CM+4, CN - CN+4, IR+3.
* 
*         CALLS  *1CK*, *1RU*.
* 
*         MACROS EXECUTE. 
  
  
 RLT      LDD    ES 
          SHN    21-4 
          MJN    RLT1        IF ISHARED 
          EXECUTE  1CK       REWRITE LABELS 
*         LJM    IMV         RERUN *1MV*
  
 RLT1     LDD    ES+4 
          SHN    3
          ADK    SDGL 
          CRD    CM 
          ADK    DULL-SDGL
          CRD    CN 
          LDD    CN+2 
          LPN    17 
          ADN    1
          SHN    1
          LMD    CM+4 
          LPN    76 
          ZJN    RLT2        IF INTERLOCKED BY THIS MAINFRAME 
          LJM    CFE9        PROCESS THE ERRORS 
  
 RLT2     STD    IR+3        SET *1RU* FUNCTION CODE
          EXECUTE  1RU       REWRITE LABELS 
*         LJM    IMV         RERUN *1MV*
 SDA      SPACE  4,10 
**        SDA - SET DEVICE AVAILABLE. 
* 
*         ENTRY  (A) = *SEQM* SUBFUNCTION.
*                (EQ) = EST ORDINAL.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T3, CM - CM+4. 
* 
*         CALLS  CEQ, CSF.
* 
*         MACROS MONITOR. 
  
  
 SDA      SUBR               ENTRY/EXIT 
          STD    T3 
          RJM    CEQ         CLEAR ERRORS FROM UNIT I/O QUEUE 
          LDD    T3 
          RJM    CSF         ISSUE *SEQM* FUNCTION
          LDD    EQ 
          STD    CM+1 
          LDN    STDE 
          STD    CM+2 
          LDN    CERS        CLEAR *DE* DEVICE ERROR STATUS 
          STD    CM+3 
          MONITOR  SMDM 
          LDN    ZERL        CLEAR *CMS* TIMERS 
          CRD    CM 
          ADN    RDSL-ZERL
          CWD    CM 
          ERRNZ  WISE        CODE DEPENDS ON VALUE
          LDD    EQ 
          STD    CM+3 
          MONITOR  EATM      ISSUE EVENT FOR THIS DEVICE
*         LDN    0
          UJN    SDAX        RETURN 
 SNC      SPACE  4,15 
**        SNC - SELECT NEXT CHANNEL.
* 
*         ENTRY  (CC) = CURRENT CHANNEL TABLE ORDINAL.
* 
*         EXIT   (A) .EQ. CHANNEL NUMBER. 
*                    .LT. 0 IF NO MORE CHANNELS.
*                (T4) CHANNEL SELECTED. 
*                (CC) INCREMENTED.
*                (SP) = SECOND CHANNEL STATISTICS POINTER.
*                CURRENT CHANNEL RELEASED.
* 
*         USES   CC, SP, T4.
* 
*         MACROS ENDMS. 
  
  
 SNC1     LCN    0
  
 SNC      SUBR               ENTRY/EXIT 
          ENDMS 
          AOD    CC          ADVANCE CHANNEL TABLE INDEX
          LMD    DA 
          ZJN    SNC1        IF NO MORE CHANNELS
          LDC    DVC2 
          STD    SP 
          LDM    TSCH,CC     SET CHANNEL AND CONCURRENCY FLAG 
          STD    T4 
          UJN    SNCX        RETURN 
  
  
 TSCH     CON    0           PRIMARY CHANNEL (FIRST IF SINGLE ACCESS) 
          CON    0           SECONDARY CHANNEL
 SUT      SPACE  4,15 
**        SUT - SCAN (BUFFERED I/O) UNIT TABLE. 
* 
*         ENTRY  (A) .LT. 0 IF INITIAL CALL.
*                (CN) = CURRENT *PUT* ORDINAL IF NOT INITIAL CALL.
*                (EQ) = EST ORDINAL.
*                (ES - ES+4) = EST ENTRY. 
*                (CN+3 - CN+4) = FWA OF *PUT* IF NOT INITIAL CALL.
* 
*         EXIT   (A) = 0 IF END OF SCAN.
*                    = (CN) = *PUT* ORDINAL.
*                (CN+3 - CN+4) = FWA OF PHYSICAL UNIT TABLE.
* 
*         USES   CM - CM+4, CN - CN+4.
  
  
 SUT1     SOD    CN 
          ZJN    SUTX        IF END OF UNIT TABLE 
 SUT2     LDD    CN+3 
          SHN    14-PUTLS 
          ADD    CN          FORM *PUT* ADDRESS 
          SHN    PUTLS
          ADD    CN+4 
          ADK    UNCT        READ UNIT CONTROL WORD 
          CRD    CM 
          LDD    CM+1        CHECK EST ORDINAL
          LMD    EQ 
          NJN    SUT1        IF NOT REQUIRED DEVICE 
          LDD    CN 
  
 SUT      SUBR               ENTRY/EXIT 
          PJN    SUT1        IF NOT INITIAL CALL
          LDD    ES+4 
          SHN    3
          ADN    DILL        FETCH DEVICE STATUS FROM MST 
          CRD    CM 
          LDD    CM+2 
          ZJN    SUTX        IF NOT BUFFERED DEVICE 
          LDC    BIOL 
          CRD    CN 
          LDD    CN+1        GET *PUT* DESCRIPTOR 
          SHN    14 
          LMD    CN+2 
          ADN    PUTP 
          CRD    CN 
          LDD    CN+3 
          LPN    77          CLEAR FLAGS
          STD    CN+3 
          UJP    SUT2        BEGIN UNIT TABLE SCAN
 SVF      SPACE  4,10 
**        SVF - SET VERIFICATION FAILURE COUNT. 
* 
*         ENTRY  (A) = VERIFICATION FAILURE COUNT TO SET. 
* 
*         EXIT   FAILURE COUNT IN *CTLL* MST WORD UPDATED.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 SVF      SUBR               ENTRY/EXIT 
          STM    SVFA+4 
          LDN    0
          STD    CM+2 
          LDD    ES+4        BASE TABLE ADDRESS 
          SHN    3
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          LDN    1
          STD    CM+1 
          LDD    MA          UPDATE FAILURE COUNT 
          CWM    SVFA,ON
          MONITOR  UTEM 
          UJN    SVFX        RETURN 
  
  
 SVFA     VFD    1/0,5/CTLL,6/12D,6/48D,42/0
 SVI      SPACE  4,10 
**        SVI - SET VERIFICATION INTERLOCK. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (ES - ES+4) = WORD *EQDE* OF EST ENTRY.
* 
*         EXIT   (CVIA) = EST ORDINAL OF DEVICE WITH INTERLOCK SET. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS DELAY, MONITOR.
  
  
 SVI      SUBR               ENTRY/EXIT 
          LDD    ES 
          SHN    21-11
          PJN    SVIX        IF NOT SHARED DEVICE 
          SHN    21-4-21+11 
          MJN    SVIX        IF ISD DEVICE
 SVI1     LDN    ZERL 
          CRD    CM 
          LDD    T5          SET EST ORDINAL
          STD    CM+1 
          STM    CVIA 
          LDN    SVIS        SET DEVICE VERIFICATION INTERLOCK
          STD    CM+3 
          MONITOR  STBM 
          LDD    CM+1 
          ZJN    SVIX        IF INTERLOCK SET SUCCESSFULLY
          DELAY  20B         DELAY 2 MILLISECONDS 
          UJN    SVI1        RETRY
 VBD      SPACE  4,15 
**        VBD - VERIFY BUFFER DATA. 
* 
*         FOR EACH BUFFER THAT DOES NOT VERIFY, ((SP)+VCTB) IS
*         INCREMENTED.
* 
*         ENTRY  (NS) = NUMBER OF BUFFERS TO PROCESS. 
*                (SP) = STATISTICS GATHERING POINTER. 
*                (T7) = LAST SECTOR TO CHECK + 1. 
* 
*         EXIT   (A) = DATA ERROR COUNT.
* 
*         USES   CN, T1, T2, T3.
  
  
 VBD      SUBR               ENTRY/EXIT 
          LDC    DBUF        SET BUFFER POINTER 
          STD    T3 
          LDN    0           SET SECTOR NUMBER
          STD    T2 
 VBD1     SBD    NS 
          ZJN    VBDX        IF ALL BUFFERS PROCESSED 
          LDD    T3 
          STD    T1          SET BUFFER ADDRESS TO CHECK
          ADC    BUFL 
          STD    T3 
          LDM    DVBE,T2
          NJN    VBD3        IF ERROR OCCURRED
          LDD    T7          COMPUTE SECTOR NUMBER
          SBD    NS 
          ADD    T2 
          STD    T0 
          ADN    1
          LMI    T1 
          NJN    VBD4        IF MISMATCH ON SECTOR
          AOD    T1 
          LDI    T1 
          LMD    HN 
          NJN    VBD4        IF MISMATCH ON WORD COUNT
          AOD    T1 
 VBD2     LDC    BUFP 
          LMI    T1 
          NJN    VBD4        IF PATTERN MISMATCH
          AOD    T1 
          LMD    T3 
          NJN    VBD2        IF NOT END OF BUFFER 
 VBD3     AOD    T2 
          UJN    VBD1        CHECK FOR END OF BUFFERS 
  
 VBD4     LDD    T0          SET (T7) TO SECTOR IN ERROR
          STD    T7 
          AOM    VCTB,SP     SET DATA ERROR COUNT 
          UJP    VBDX        RETURN 
 VLS      SPACE  4,15 
**        VLS - VERIFY LABEL SECTOR.
* 
*         ENTRY  (T7) = LABEL SECTOR NUMBER.
*                (NS) = RELATIVE UNIT NUMBER. 
*                (SP) = ERROR STATISTICS BUFFER POINTER.
* 
*         EXIT   ERROR INDICATORS SET IN STATISTICS BUFFER. 
* 
*         USES   MT, T4, T6, T7, T8, CM - CM+4, CN - CN+4, IR - IR+4. 
* 
*         CALLS  AEC, RDS, VLT, *5ME*.
* 
*         MACROS ENDMS, EXECUTE, SETMS. 
  
  
 VLS11    RJM    AEC         ANALYZE ERROR CODE 
          ZJN    VLS12       IF DRIVE OR CONTROLLER RESERVE 
          STM    LREB,SP     SAVE LABEL READ ERROR
          LDK    REFG        SET READ ERROR FLAG
 VLS12    STM    LEFB,SP
          ENDMS 
  
 VLS      SUBR               ENTRY/EXIT 
 VLS0     SETMS  IOCH,(AD,AR,DE,DF,ND)
*         LDN    0           SET MEDIA ERROR THRESHOLD
          STD    MT 
          LDM    TSCH,CC     SET CHANNEL
          STD    T4 
          STM    STSB        STORE CHANNEL IN CASE BUFFERED DEVICE
          LDD    ES+4        READ MST DATA
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+1        SET LABEL TRACK NUMBER 
          STD    T6 
          LDC    BFMS 
          RJM    RDS         READ SECTOR
 VLS0.1   MJP    VLS11       IF MASS STORAGE ERROR
  
*         CHECK CONTENTS OF LABEL.
  
*         LDN    0
          STD    T8          SET ERROR STATUS 
          LDM    LLSS 
          SHN    -1 
          ZJN    VLS0.2      IF NOT LEVEL 2 LABEL 
          LDD    NS 
          NJN    VLS0.2      IF NOT RELATIVE UNIT ZERO
          RJM    VLT         VERIFY LEVEL 2 LABEL 
          MJN    VLS0.1      IF TRT READ ERROR
          STD    T8          SET ERROR STATUS 
          LPK    CKFG 
          NJP    VLS12       IF CHECKSUM ERROR
 VLS0.2   LDM    BFMS        CHECK CONTROL BYTES
          LMC    3777 
          ZJN    VLS1        IF PROPER CONTROL BYTE 
          LDK    CBFG        SET BAD CONTROL BYTE FLAG
          RAD    T8 
 VLS1     LDM    BFMS+1 
          LMN    77 
          ZJN    VLS2        IF PROPER WORD COUNT 
          LDK    WCFG        SET BAD WORD COUNT FLAG
          RAD    T8 
 VLS2     LDM    FTSS 
          LMD    T6 
          ZJN    VLS3        IF PROPER TRACK
          LDK    TNFG        SET BAD TRACK NUMBER FLAG
          RAD    T8 
 VLS3     LDM    E4SS        COMPARE EQUIPMENT TYPE WITH EST
          STM    EMNB,SP
          LMM    DVDT 
          ZJN    VLS6        IF MATCHING EQUIPMENT MNEMONIC 
          LMN    1RP&1RE
 VLSA     PSN 
*         ZJN    VLS6        (IF NON-MATCHING EM EQUIPMENT TYPES) 
          LDK    EQFG        SET BAD EQUIPMENT MNEMONIC 
          RAD    T8 
 VLS6     LDD    ES+4        GET FAMILY/PACKNAME
          SHN    3
          ADN    PFGL 
          CRD    CN 
          LDD    MA          COPY LABEL NAME TO MESSAGE BUFFER
          CWM    N4SS+5*PFGL,ON 
          SBN    1           MOVE NAME TO DIRECT CELLS
          CRD    CM 
          LDD    CM 
          LMD    CN 
          NJN    VLS7        IF NOT THE SAME LABEL
          LDD    CM+1 
          LMD    CN+1 
          NJN    VLS7        IF NOT THE SAME LABEL
          LDD    CM+2 
          LMD    CN+2 
          NJN    VLS7        IF NOT THE SAME LABEL
          LDD    CM+3 
          LMD    CN+3 
          SCN    77          CHECK DEVICE NUMBER SEPARATELY 
          NJN    VLS7        IF NOT THE SAME LABEL
          LDD    CM+4 
          LMD    CN+4 
          SCN    70 
          ZJN    VLS8        IF GOOD COMPARE
 VLS7     LDK    FPFG        SET FAMILY/PACK NAME ERROR FLAG
          RAD    T8 
 VLS8     LDD    CM+3        COMPARE DEVICE NUMBERS 
          LMD    CN+3 
          LPN    77 
          ZJN    VLS9        IF DEVICE NUMBERS MATCH
          LDK    DNFG        SET BAD DEVICE NUMBER FLAG 
          RAD    T8 
 VLS9     LDD    CM 
          STM    FMNB,SP
          LDD    CM+1 
          STM    FMNB+1,SP
          LDD    CM+2 
          STM    FMNB+2,SP
          LDD    CM+3 
          STM    DNMB,SP
          LDD    CM+4        CHECK RELATIVE UNIT NUMBER 
          SHN    -3 
          LPN    7
          LMD    NS 
          ZJN    VLS10       IF CORRECT UNIT NUMBER 
          LDK    RUFG        SET RELATIVE UNIT NUMBER ERROR 
 VLS10    RAD    T8 
          LPK    FPFG+DNFG+RUFG 
          NJN    VLS10.2     IF WRONG PACK
 VLS10.1  LDD    T8 
          LJM    VLS12       RETURN 
  
 VLS10.2  LDD    ES 
          SHN    21-11
          PJN    VLS10.1     IF NOT SHARED
          SHN    11-21
          LPN    3
          LMN    3
          ZJN    VLS10.1     IF DOWN
          LDD    T5 
          STD    IR+3        SET EST ORDINAL
          LDK    BFMS 
          STD    IR+2        SET BUFFER ADDRESS 
          EXECUTE  5ME
          LDD    IA          RESTORE INPUT REGISTER 
          CRD    IR 
          LDN    /MMF/LSLT   RESET LABEL SECTOR 
          STD    T7 
          LJM    VLS0        RETRY VERIFICATION 
 VLT      SPACE  4,15 
**        VLT - VERIFY LEVEL TWO LABEL. 
* 
*         ENTRY  (NS) = RELATIVE UNIT NUMBER. 
*                (SP) = ERROR STATISTICS BUFFER POINTER.
*                (T7) = LABEL SECTOR NUMBER.
*                (ES - ES+4) = *EQDE* WORD OF EST ENTRY.
* 
*         EXIT   (A) = ERROR INDICATORS.
* 
*         USES   T1, T7, T9, CM - CM+4. 
* 
*         CALLS  CLC, RDS.
  
  
 VLT6     LDK    CKFG        CHECKSUM ERROR 
  
 VLT      SUBR               ENTRY/EXIT 
          RJM    CLC         COMPUTE LABEL CHECKSUM 
          LMM    CKSS 
          NJN    VLT6        IF INCORRECT CHECKSUM
          LDM    N4SS+SDGL*5+4  CHECK MST/TRT INTERLOCK 
          LPN    76 
          ZJN    VLT1        IF NOT INTERLOCKED 
          SHN    -1 
          STD    T1 
          LDD    ES+4        COMPARE INTERLOCK WITH THIS MF-S INDEX 
          SHN    3
          ADK    DULL 
          CRD    CM 
          LDD    CM+2 
          LPN    17 
          ADN    1
          LMD    T1 
          ZJN    VLT1        IF INTERLOCKED BY THIS MAINFRAME 
          LDD    T1 
          SHN    2
          RAD    T1 
          LDM    DISS-5+3,T1
          LPN    1
          LMN    1
          ZJN    VLT1        IF INTERLOCKED FOR DEVICE RECOVERY 
          LDK    ILFG 
 VLT1     STD    T9 
          LDD    NS 
          NJP    VLT4        IF NOT RELATIVE UNIT ZERO
          LDM    N4SS+TDGL*5+2  CHECK MST AND TRT COUNTERS
          SHN    -6 
          ADN    1
          RAD    T7 
          LDC    DBUF 
          RJM    RDS         READ LAST SECTOR OF TRT
          MJN    VLT5        IF READ ERROR
          LDM    N4SS+SDGL*5+2
          LMM    DBUF+2+77*5+2
          NJN    VLT2        IF COUNTERS DON-T MATCH
          LDM    N4SS+SDGL*5+3
          LMM    DBUF+2+77*5+3
          NJN    VLT2        IF COUNTERS DON-T MATCH
          LDM    N4SS+SDGL*5+4
          LMM    DBUF+2+77*5+4
          SCN    77 
          ZJN    VLT3        IF COUNTERS MATCH
 VLT2     LDD    TH          COUNTER MISMATCH 
*         LDK    CMFG 
          ERRNZ  CMFG-1000B 
          RAD    T9 
 VLT3     LDN    /MMF/LSLT   RESET LABEL SECTOR 
          STD    T7 
 VLT4     LDD    T9 
 VLT5     LJM    VLTX        RETURN 
 VSF      SPACE  4,15 
**        VSF - VERIFY SYSTEM FILE. 
* 
*         ENTRY  (EQ) = (T5) = EST ORDINAL. 
*                (ES - ES+4) = EST ENTRY. 
* 
*         EXIT   (A) .LT. 0 IF I/O ERROR. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  IRA, WSF.
* 
*         MACROS SFA. 
  
  
 VSF      SUBR               ENTRY/EXIT 
          LDD    ES 
          LPC    2003        CHECK DEVICE STATE 
          LMC    2003 
          NJN    VSFX        IF NOT DOWN SYSTEM DEVICE
          LDN    FNTP 
          CRD    CM          FETCH FNT POINTER
          LDD    CM 
          SHN    14          READ SYSTEM FILE FST 
          LMD    CM+1 
          ERRNZ  SYFO        CODE DEPENDS ON VALUE
          ADN    FSTG 
          CRD    CN 
          RJM    IRA         INITIALIZE RANDOM ACCESS PROCESSORS
  
*         WRITE SYSTEM FILE - SYSTEM + EOI SECTORS. 
  
          LDD    CN+1        PROCESS SYSTEM FILE
          RJM    WSF
          MJN    VSFX        IF I/O ERROR 
  
*         WRITE PP LIBRARY FILE - SYSTEM + EOI SECTORS. 
  
          LDM    PLSS        PROCESS PP LIBRARY FILE
          RJM    WSF
          UJP    VSFX        RETURN 
 WCS      SPACE  4,15 
**        WCS - WRITE CONSECUTIVE SECTORS.
* 
*         ENTRY  (NS) = NUMBER OF SECTORS TO WRITE. 
*                (SP) = STATISTICS GATHERING POINTER. 
*                (T4 - T7) = MASS STORAGE DRIVER PARAMETERS.
*                (BFMS) = DATA TO WRITE.
* 
*         EXIT   (A) = WRITE ERROR COUNT. 
* 
*         USES   MT, T7, T9.
* 
*         CALLS  AEC, WDS.
  
  
 WCS6     LDN    0           RESTORE ORIGINAL SECTOR NUMBER 
          SBD    NS 
          RAD    T7 
          LDN    0
  
 WCS      SUBR               ENTRY/EXIT 
          LDN    0           SET MEDIA ERROR THRESHOLD
*         LDN    METH        (I/O ON MAINTENANCE CYLINDER)
 WCSA     EQU    *-1
          STD    MT 
          LDD    HN 
          STM    BFMS+1      SET SECTOR WORD COUNT
          LDN    0
          STD    T9          INITIALIZE SECTOR NUMBER 
          LDD    T7 
 WCS1     ADN    1           SET SECTOR LINKAGE 
          STM    BFMS 
          AOD    T9 
          SBD    NS 
          ERRNZ  WLSF        CODE DEPENDS ON VALUE
          ZJN    WCS2        IF WRITING LAST SECTOR 
          PJN    WCS6        IF WRITING COMPLETE
          LDC    WCSF 
 WCS2     ADC    BFMS 
          RJM    WDS
          PJN    WCS3        IF NO ERROR
          RJM    AEC         ANALYZE ERROR CODE 
          NJN    WCS3        IF NOT DRIVE OR CONTROLLER RESERVE 
          STM    DVBE-1,T9
          LDN    1           SET ERROR INDICATOR
 WCS2.1   UJP    WCSX        RETURN 
  
 WCS3     STM    DVBE-1,T9
          STM    WCDB,SP     SAVE LATEST WRITE ERROR CODE 
          MJN    WCS4        IF TOO MANY MEDIA OR OTHER ERRORS
          AOD    T7 
          UJP    WCS1        PROCESS NEXT SECTOR
  
 WCS4     SHN    21-20
          PJN    WCS5        IF NOT DIAGNOSTIC FAILURE
          STM    HVLB 
 WCS5     AOM    WCTB,SP     SET WRITE ERROR COUNT
          UJN    WCS2.1      RETURN 
 WSF      SPACE  4,15 
**        WSF - WRITE SYSTEM FILE.
* 
*         ENTRY  (A) = FIRST TRACK OF FILE. 
*                (EQ) = ORDINAL OF DEVICE BEING VERIFIED. 
* 
*         EXIT   (A) .LT. 0 IF I/O ERROR. 
* 
*         USES   T5, T6, T7.
* 
*         CALLS  RDS, SEI, WEI, WSS.
* 
*         MACROS ENDMS, SETMS.
  
  
 WSF      SUBR               ENTRY/EXIT 
          STD    T6 
          LDN    0           SYSTEM SECTOR NUMBER 
          STD    T7 
          SETMS  READSYS,(AD,DF,ND) 
          LDC    BFMS        READ SYSTEM SECTOR 
          RJM    RDS
          MJN    WSFX        IF READ ERROR
          ENDMS 
          LDD    EQ          SELECT DEVICE BEING VERIFIED 
          STD    T5 
          SETMS  IO,(AD,DF,ND,NR) 
          RJM    WSS         WRITE SYSTEM SECTOR
          MJN    WSFX        IF WRITE ERROR 
          RJM    SEI         LOCATE EOI ON SYSTEM FILE
          SETMS  POSITION 
          RJM    WEI         WRITE EOI SECTOR 
          MJN    WSF1        IF WRITE ERROR 
          ENDMS 
*         LDN    0
 WSF1     UJP    WSFX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCLC 
 IRA$     EQU    0           SET *IRA* INITIALIZATION COMPLETE
*CALL     COMPSEI 
*CALL     COMPIRA 
*CALL     COMPTLB 
*CALL     COMPWEI 
*CALL     COMPWSS 
          TITLE  BUFFERS. 
          SPACE  4,10 
**        BUFFERS.
  
  
 BUF      EQU    *
 BEGIN    BSSN   BUF
  
*         CELLS SET BY PRESET.
  
 DVDT     BSSN   1           DEVICE TYPE
 DVMT     BSSN   1           DEVICE MAINTENANCE TRACK 
 DVHL     BSSN   1           DEVICE HEAD COUNT LIMIT PER TRACK
 DVSI     BSSN   1           DEVICE SECTOR INCREMENT TO NEXT HEAD 
 CVNF     BSSN   1           CONVERSION FACTOR
 DVST     BSSN   0           DEVICE SECTORS BETWEEN LOGICAL TRACKS
 LSLT     BSSN   1           LOGICAL SECTORS/LOGICAL TRACK
 LSCY     BSSN   2           LOGICAL SECTORS/CYLINDER 
 LSPT     BSSN   1           LOGICAL SECTORS/PHYSICAL TRACK 
 DVSB     BSSN   1           PHYSICAL SECTORS / BUFFER - 1
 DVPC     BSSN   1           DEVICE HARDWARE VERIFICATION PROCESSOR 
  
*         ZEROED OUT TABLES.
  
 DVC1     BSSN   10*MXNB     CHANNEL 1 STATISTICS BUFFER
 DVC2     BSSN   10*MXNB     CHANNEL 2 STATISTICS BUFFER
 EZOT     BSSN   0           END OF ZEROED OUT TABLES 
  
*         SCRATCH CELLS.
  
 .1       SET    BFMS-* 
 MXSC     EQU    .1/503      MAXIMUM SECTORS IN BUFFER
 DVBE     BSSN   MXSC        DEVICE VERIFICATION ERROR FLAG BUFFER
 DBUF     BSSN   MXSC*BUFL   DATA VERIFICATION DATA BUFFER
  
  
 END      BSSN
  
 OVLA     EQU    DVBE+5      *2VA* OVERLAY LOAD POINT 
          SPACE  4,10 
          ERRNG  BFMS-DBUF-MXSC*BUFL  OVERFLOW INTO WRITE BUFFER
          ERRNG  MXSC-DVSC   NOT ENOUGH SECTORS FOR DEVICE VERIFY 
          ERRNG  EPFW-OVLA-ZSCL  *0SC* OVERLAYED BY ERROR PROCESSOR 
          TITLE  PRESET TABLES. 
 TDVC     SPACE  4,10 
**        TDVC - TABLE OF DEVICE CONSTANTS. 
  
  
 TDVC     BSS    0
 TDVCL    EQU    13          TABLE ENTRY LENGTH 
 .A       SET    TDVCL+4
 TDVCS    EQU    .A/5        TABLE ENTRY SIZE (CM WORD COUNT) 
          LIST   G
          ECHO   ,DT="MSEQ" 
 .1       IF     DEF,PRC._DT
          CON    2R_DT        DT
          CON    MCLT_DT      LOGICAL TRACK OF MAINTENANCE CYLINDER 
 .2       IFEQ   PRC.DT,HVL 
          CON    PTCY_DT      PHYSICAL TRACKS PER CYLINDER
 .A       SET    TT_DT+1
          CON    LSPS_DT*PSPT_DT/.A SECTOR OFFSET TO NEXT HEAD POSITION 
          CON    CFS_DT       CONVERSION FACTOR SHIFT COUNT 
          CON    SL_DT+GS_DT   LOGICAL SECTORS/LOGICAL TRACK
 .A       SET    PSPT_DT*PTCY_DT-SPSC_DT  PHYSICAL SECTORS/CYLINDER 
 .B       SET    .A*LSPS_DT   LOGICAL SECTORS/CYLINDER
 .C       SET    .B/10000 
 .D       SET    .C*10000 
          CON    .C           UPPER LOGICAL SECTORS/CYLINDER
          CON    .B-.D        LOWER LOGICAL SECTORS/CYLINDER
          CON    LSPT_DT      LOGICAL SECTORS/PHYSICAL TRACK
 .3       IF     DEF,PSBF_DT
          CON    37           LOGICAL SECTOR BUFFER ROUNDING FACTOR 
 .3       ELSE
          CON    0
 .3       ENDIF 
 .2       ELSE
          BSSZ   TDVCL-3
 .2       ENDIF 
          CON    PRC._DT      DEVICE TYPE PROCESSOR 
 .1       ENDIF 
          ENDD
          LIST   *
          BSSZ   TDVCL       END OF TABLE - NULL PARAMETERS 
 TFCN     SPACE  4,10 
**        TFCN - TABLE OF FUNCTION PROCESSORS.
* 
*         ENTRY - 3 BYTES.
*         BYTE 0 = FUNCTION PROCESSOR.
*         BYTE 1 = REPAIR PROCESSOR.
*         BYTE 2 = REPAIRABLE ERRORS. 
  
  
 TFCN     BSS    0
  
 DVFC     FCN    DVF,RLT,REFG+CKFG+CMFG 
 ONFC     FCN    ONF,RLT,REFG+CKFG+CMFG 
 IDFC     FCN    IDF,RLT,REFG+CKFG+CMFG 
 OFFC     FCN    LVA,RLT,REFG+CKFG+CMFG 
 MVFC     FCN    MVA,CFE9,0 
 UCFC     FCN    UCF,CFE9,0 
 SCFC     FCN    SCF,DVF2,0 
 MXFN     FCN 
          TITLE  PRESET.
 PRS      SPACE  4,30 
**        PRS - PRESET. 
* 
*         ENTRY  (IR - IR+4) = *1MV* CALL.
* 
*         EXIT   (CC) = (DA) = CHANNEL COUNT. 
*                (FC) = FUNCTION CODE.
*                (SU) = SINGLE UNIT SECTOR COUNT FROM MST.
*                (SP) = POINTER TO STATISTICS BUFFER. 
*                (T4) = FIRST CHANNEL.
*                (T5) = EST ORDINAL.
*                (T7) = 0.
*                (DP - DP+4) = 0 ((DP) = 1 IF EXTENDED MEMORY). 
*                (ES - ES+4) = *EQDE* WORD OF EST ENTRY.
*                (DVSA) = SINGLE UNIT SECTOR + GAP COUNT. 
*                (DVHL) = HEAD COUNT LIMIT FOR DEVICE.
*                (DVMT) = MAINTENANCE CYLINDER LOGICAL TRACK. 
*                (DVSI) = SECTOR INCREMENT FOR FUNCTION.
* 
*         ERROR  TO *DPP* IF BAD CALL.
* 
*         USES   T1, T8, CM - CM+4, CN - CN+4, ES - ES+4. 
  
  
 PRS      BSS                ENTRY
          LDD    IR+3 
          SHN    -6 
          STD    FC          EXTRACT FUNCTION CODE
          SHN    1
          ADD    FC 
          STD    T1 
          SBN    MXFN*3 
          PJN    PRS1        IF INCORRECT FUNCTION CODE 
          LDM    TFCN,T1     SET PROCESSOR ADDRESS
          STM    PRSB 
          LDM    TFCN+1,T1   SET REPAIR PROCESSOR ADDRESS 
          STM    CFEB 
          LDM    TFCN+2,T1   SET REPAIRABLE ERRORS
          STM    CFEA 
          LDK    ESTP 
          CRD    CM 
          LDD    EQ          SET EST ORDINAL
          STD    T5 
          SBD    CM+3 
          PJN    PRS1        IF OUT OF EST
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    ES 
          ADK    EQAE-EQDE
          CRD    CN 
          LDD    ES 
          SHN    21-13
          MJN    PRS2        IF DEVICE IS MASS STORAGE
 PRS1     LJM    DPP         DROP PP
  
 PRS2     LDD    ES+3 
          LMC    2RDC 
          ZJN    PRS2.1      IF 895 TYPE DEVICE 
          ISTORE HVLF,(UJN HVL3.1)  DISABLE 895 FORMATTING
          LDD    ES+3 
          LMC    2RDF 
          ZJN    PRS2.2      IF 887 TYPE (HYDRA) DEVICE 
          LMN    2RDH&2RDF
          ZJN    PRS2.2      IF 887 TYPE (HYDRA) DEVICE 
 PRS2.1   ISTORE HVLE,(UJN HVL3)  DISABLE HYDRA DIAGNOSTICS 
 PRS2.2   LDD    ES+4        READ MST DATA
          SHN    3
          ADN    MDGL 
          CRD    CM 
          ADN    DILL-MDGL   GET DRIVER WORD
          CRD    DP 
          LDD    CM+1        SAVE SINGLE UNIT SECTOR LIMIT
          LPC    3777 
          STD    SU 
  
*         SEARCH FOR DEVICE IN TABLE. 
  
          LDC    TDVC-TDVCL   INITIALIZE POINTER INTO DEVICE CONSTANTS
          STD    T1 
          LDD    DP+3 
          NJN    PRS3        IF BUFFERED DEVICE 
          LDC    *
          ORG    *-1         TRANSFER FOR NON-BUFFERED DEVICE 
          LOC    CDAA 
          UJN    CDA9        PROCESS *LDAM* DEVICE
          LOC    *O 
          STM    CDAA 
 PRS3     LDN    TDVCL       INCREMENT POINTER
          RAD    T1 
          LDI    T1          CHECK DEVICE MNEMONIC
          ZJN    PRS4        IF DEVICE NOT FOUND
          LMD    ES+3 
          NJN    PRS3        IF NO MATCH
 PRS4     STD    CC 
          STD    T7 
          STD    DA 
          LDD    T1          TRANSFER DEVICE PARAMETERS 
          STM    PRSA 
          LDN    TDVCS       SET WORD COUNT 
          STD    T1 
          ERRNG  6-TDVCS     TRANSFER OVERFLOWS MESSAGE BUFFER
          LDD    MA 
          CWM    0,T1        MOVE TABLE ENTRY INTO MESSAGE BUFFER 
 PRSA     EQU    *-1
          SBN    TDVCS       COPY ENTRY TO DEVICE PARAMETER BLOCK 
          CRM    DVDT,T1
          LDN    ZERL        CLEAR DEVICE SEEK PARAMETERS 
          CRD    DP 
          LDN    77          SET LOGICAL TO PHYSICAL SECTOR CONVERSION
          SBM    CVNF 
          RAM    CDAB 
          LDD    ES+3 
          STM    DVDT 
          LMC    2RDP 
          ZJN    PRS5        IF ESM 
          LMN    2RDE&2RDP
          NJN    PRS6        IF NOT UEM 
 PRS5     ISTORE VLSA,(ZJN VLS6)
          AOD    DP          AVOID ADDRESS CONVERSION 
          LDD    CN+2 
          SHN    -6 
          LPN    3
          ZJN    PRS6        IF XM TRACK SIZE IS 2020 WORDS 
          LDD    ES+4 
          SHN    3           FORM MST ADDRESS 
          ADK    ALGL 
          CRD    CM 
          LDD    CM+1 
          STM    DVMT        USE LABEL TRACK FOR VERIFICATION 
          LDN    20 
          RAM    HVEA        BEGIN VERIFICATION AT SECTOR 20
 PRS6     LDD    ES+3 
          LMC    2RDE 
          ZJN    PRS9        IF EXTENDED MEMORY 
          LDN    ES+1 
          STD    T1 
 PRS7     LDI    T1          SET CHANNEL IN TABLE 
          LPN    77 
          STM    TSCH,DA
          LMI    T1 
          SHN    0-12 
          LMN    2
          NJN    PRS8        IF ACCESS NOT PRESENT OR DISABLED
          AOD    DA 
 PRS8     AOD    T1          ADVANCE CHANNEL BYTE ADDRESS 
          LMN    ES+3 
          NJN    PRS7        IF ANOTHER CHANNEL BYTE
          SOD    DA 
          MJP    DPP         IF NO CHANNELS 
          ZJN    PRS10       IF SINGLE ACCESS DEVICE
          LDD    ES 
          SHN    21-6 
          PJN    PRS10       IF DEVICE IS AVAILABLE 
          LDD    ES+1 
          LMD    ES+2 
          LPC    400
 PRS9     ZJN    PRS10       IF SAME CONTROLLER TYPES 
          LDD    ES+2 
          SHN    0-10 
          LPN    1
          STD    T1 
          LDM    ES+1,T1     SET HALF TRACK CHANNEL FOR VERIFICATION
          LPN    77 
          STM    TSCH 
          UJN    PRS11       CONTINUE 
  
 PRS10    AOD    DA          SET CHANNEL COUNT
          LDM    TSCH 
 PRS11    STD    T4          SET FIRST CHANNEL
          LDD    IR+3        GET REPAIR STATUS
          LPN    40 
          NJN    PRS12       IF REPAIR HAS BEEN ATTEMPTED 
          LDD    T5 
          STD    CM+1 
          LDN    RVES        RESERVE EQUIPMENT
          STD    CM+2 
          MONITOR  REQM 
          LDD    CM+1 
          NJN    PRS13       IF DEVICE RESERVED 
          LJM    IBM+1       ISSUE BML MESSAGE
  
 PRS12    LDN    0           COUNT ALL LABEL ERRORS AS UNREPAIRABLE 
          STM    CFEA 
 PRS13    LDD    T5 
          STM    RAEA        SET EQUIPMENT RESERVED 
  
*         CLEAR STATISTICS BUFFER.
  
          LDC    EZOT-1      SET BUFFER LWA+1 
          STD    SP          SAVE STARTING ADDRESS
          ERRNG  *-EZOT-1    TABLES OVERLAP CODE
 PRS14    LDN    0
          STI    SP 
          SOD    SP          DECREMENT POINTER
          LMC    DVC1 
          NJN    PRS14       IF NOT DONE CLEARING 
          STI    SP 
          RJM    ECA         ENABLE CONTROLLER ACTIVITY 
          LJM    *           EXIT TO PROCESSOR
 PRSB     EQU    *-1
          TITLE  PRESET SUBROUTINES.
 ECA      SPACE  4,15 
**        ECA - ENABLE CONTROLLER ACTIVITY. 
* 
*         THIS ROUTINE FORCES THE 583X/47444 (*DAS*) OR 9853 (*XMD*)
*         DRIVER TO REENABLE ACTIVITY TO A CONTROLLER IN ORDER TO 
*         ALLOW A *UCFC* (*UP,CCH*) FUNCTION TO BE PROCESSED. 
*         THIS IS ACCOMPLISHED BY SETTING A SPECIAL REQUEST BIT IN
*         WORD *PILL* OF THE *PUT*, AND A BIT FOR THE SPECIFIED 
*         CHANNEL IN WORD *BDLL* OF THE *MST*.
* 
*         ENTRY  (FC) = FUNCTION CODE.
*                (IR+2) = EST ORDINAL.
*                (IR+4) = CHANNEL.
* 
*         USES   CM - CM+4, CN - CN+4, T1.
* 
*         MACROS MONITOR, SFA.
  
  
 ECA      SUBR               ENTRY/EXIT 
          LDD    FC          CHECK FUNCTION CODE
          LMN    UCFC 
          NJN    ECAX        IF NOT *UP,CCH* FUNCTION 
          SFA    EST,IR+2    READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDN    TECAL       CHECK DEVICE TYPE
          STD    T1 
 ECA2     SOD    T1          CHECK NEXT TABLE ENTRY 
          MJN    ECAX        IF THIS DEVICE TYPE NOT IN TABLE 
          LDD    CM+3 
          LMM    TECA,T1
          NJN    ECA2        IF DEVICE TYPE DOES NOT MATCH
  
*         SET CHANNEL SELECTION FLAGS.
  
          LDD    CM+1        CHECK FOR FIRST CHANNEL SPECIFIED
          LPN    77 
          LMD    IR+4 
          NJN    ECA3        IF FIRST CHANNEL NOT SPECIFIED 
          LDN    1           SET FLAG FOR FIRST CHANNEL 
          UJN    ECA4        UPDATE *MST* 
  
 ECA3     LDN    2           SET FLAG FOR SECOND CHANNEL
  
*         SET CHANNEL SELECTION FLAGS INTO *MST*. 
  
 ECA4     STD    CN+4 
          LDC    BDLL*100+2  6/INDEX INTO *MST*, 6/BITS TO CHANGE 
          STD    CN 
          LDC    49D*100     6/LOW ORDER BIT, 6/0 
          STD    CN+1 
          LDD    MA 
          CWD    CN          STORE MESSAGE BUFFER PARAMETERS
          LDD    CM+4        SAVE *MST* ADDRESS 
          STD    T1 
          SHN    3
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          LDN    1
          STD    CM+1        REQUESTS IN MESSAGE BUFFER 
          MONITOR UTEM       UPDATE TABLE ENTRY 
  
*         SET SPECIAL REQUEST INTO *PUT*. 
  
          LDC    PILL*100+1  6/INDEX INTO *PUT*, 6/BITS TO CHANGE 
          STD    CN 
          LDC    ECAF*100    6/LOW ORDER BIT, 6/0 
          STD    CN+1 
          LDN    1
          STD    CN+4        NEW VALUE
          LDD    MA 
          CWD    CN          STORE MESSAGE BUFFER PARAMETERS
          LDD    T1 
          SHN    3           *MST* ADDRESS
          ADK    DILL 
          CRD    CM          (CM+2) = PUT ORDINAL 
          LDK    BIOL 
          CRD    CN          READ BUFFERED I/O POINTERS 
          LDD    CN+1 
          SHN    14 
          LMD    CN+2 
          ADK    PUTP 
          CRD    CN          READ *PUT* POINTER 
          LDD    CM+2 
          SHN    PUTLS
          ADD    CN+4 
          STD    CM+4        SET START ADDRESS OF *PUT* 
          SHN    -14
          ADD    CN+3 
          STD    CM+3 
          LDN    1
          STD    CM+1        REQUESTS IN MESSAGE BUFFER 
          MONITOR UTEM       UPDATE TABLE ENTRY 
          UJP    ECAX        RETURN 
  
  
 TECA     BSS    0           TABLE OF 583X/9853/47444 DEVICES 
          CON    2RDN        9853 
          CON    2REA        5832 (1X SSD)
          CON    2REB        5832 (2X SSD)
          CON    2REC        5833 (1X SABRE)
          CON    2RED        5833 (1XP SABRE) 
          CON    2REE        5833 (2X SABRE)
          CON    2REF        5833 (2XP SABRE) 
          CON    2REG        5838 (1X ELITE)
          CON    2REH        5838 (1XP ELITE) 
          CON    2REI        5838 (2X ELITE)   (MP) 
          CON    2REJ        5838 (2XP ELITE)  (MP) 
          CON    2REK        5838 (3XP ELITE)  (MP) 
          CON    2REL        5838 (4X ELITE)   (MP) 
          CON    2REM        5833 (3XP SABRE)  (MP) 
          CON    2REN        5833 (4X SABRE)   (MP) 
          CON    2REO        47444 (1X 3.5IN) 
          CON    2REP        47444 (1XP 3.5IN)
          CON    2RES        47444 (2X 3.5IN)  (MP) 
          CON    2REU        47444 (2XP 3.5IN) (MP) 
          CON    2REV        47444 (3XP 3.5IN) (MP) 
          CON    2REW        47444 (4X 3.5IN)  (MP) 
 TECAL    EQU    *-TECA      LENGTH OF TABLE
          SPACE  4,10 
          OVERFLOW
          OVERLAY  (*1MV* FUNCTION COMPLETION OVERLAY.) 
 ELM      SPACE  4,20 
**        ELM - ERROR LOG MESSAGE PROCESSOR.
* 
*         ENTRY  (CN) = SYMPTOM CODE. 
*                (DCHA+3) = CHANNEL NUMBER, INCLUDING CONCURRENCY FLAG. 
*                (CN) = SYMPTOM CODE FOR BML MESSAGE. 
*                (EQ) = EST ORDINAL.
*                (FC) = *1MV* FUNCTION CODE.
*                (DP - DP+4) = DEVICE SEEK PARAMETERS.
* 
*         EXIT   (A) = 0. 
* 
*         USES   MT, T1, T2, T3, T8, CM - CM+4, CN - CN+4.
* 
*         CALLS  C2D, DFM.
* 
*         MACROS MONITOR. 
  
  
 ELM      SUBR               ENTRY/EXIT 
          LDD    EQ          CONVERT UPPER TWO DIGITS OF EST ORDINAL
          SHN    -3 
          RJM    C2D
          STM    ELMB+1 
          STM    ELMC+1 
          STM    ELMD+1 
          STM    ELME+1 
          STM    ELMF+1 
          LDD    EQ          CONVERT LOWER DIGIT OF EST ORDINAL 
          STM    BMLEO       STORE EST ORDINAL IN BML MESSAGE 
          LPN    7
          SHN    6
          ADC    2R0
          STM    ELMB+2 
          STM    ELMC+2 
          STM    ELMD+2 
          STM    ELME+2 
          STM    ELMF+2 
          LDD    CN          STORE SYMPTOM CODE IN MESSAGE
          STD    T2 
          STM    BMLSC
          LDD    DP+1        ADD UNIT NUMBER TO MESSAGE 
          STM    BMLUN
 ELM1     LDK    PPCP        ADD PP NUMBER TO MESSAGE 
          CRD    CM 
          ADN    MMFL-PPCP
          CRD    CN 
          LDD    CN          ADD MACHINE ID TO MESSAGE
          STM    BMLMF
          LDD    IA          STORE PP NUMBER IN BML MESSAGE 
          SBD    CM+4 
          SHN    3
          LMM    DCHA+3      APPEND CHANNEL NUMBER
          STM    BMLPP
  
*         DETERMINE THE APPROPRIATE BML MESSAGE IDENTIFIER TO BE
*         ADDED TO THE MESSAGE.  FOR DISKS, THE MESSAGE ID CAN BE 
*         DETERMINED FROM THE DEVICE CODE.  FOR EXTENDED MEMORY,
*         IT MUST BE DETERMINED FROM DATA IN WORD *DILL* OF THE MST.
  
          LDN    0           INITIALIZE TABLE POINTERS
          STD    T8 
          LDC    MSGID-2     SET TABLE ADDRESS
          STD    T1 
          LDD    ES+3        SAVE DEVICE CODE 
          STD    T3 
          LMC    2RDE 
          ZJN    ELM2        IF A *DE* TYPE DEVICE
          LMN    2RDP&2RDE
          NJN    ELM3        IF NOT A *DP* TYPE DEVICE
 ELM2     LDD    ES+4        GET MST WORD *DILL*
          SHN    3
          ADN    DILL 
          CRD    CM 
          LDD    CM+3        USE *DILL* DATA FIELDS 
          LPC    707
          STD    T3 
          LDC    MSEID-2     SET TABLE ADDRESS
          STD    T1 
 ELM3     LDN    2
          RAD    T1 
          LDI    T1          SCAN TABLE FOR A MATCH 
          ZJN    ELM4        IF DEVICE IS NOT FOUND IN TABLE
          LMD    T3 
          NJN    ELM3        IF A MATCH HAS NOT YET BEEN FOUND
          LDM    1,T1 
 ELM4     STM    BMLID       STORE MESSAGE ID IN BML MESSAGE
          LDN    BMLL1
          STD    T3          SET BML MESSAGE LENGTH 
 ELM5     LDN    2
          RAD    T8 
          LDM    TFCN-2,T8
          LMD    T2 
          NJN    ELM5        IF NOT A SYMPTOM CODE MATCH
          LDM    TFCN-1,T8
          STD    T1 
          LDC    ELMD        SET DEFAULT ERRORLOG MESSAGE 
          LJM    0,T1        PROCESS SYMPTOM CODE DEPENDENT DATA
  
 ELM6     LDM    DCHA+3      CHANNEL NUMBER (AND CONCURRENCY FLAG)
          RJM    C2D         CONVERT CHANNEL NUMBER FOR MESSAGE 
          STM    ELMA+1 
          LDN    0           SET NO BML MESSAGE 
          STD    T3 
          LDC    ELMA        *CHXX, EQXXX VERIFICATION FAILURE.*
          LJM    ELM9.1      ISSUE ERRLOG MESSAGE 
  
 ELM7     LDN    BMLL2       SET BML MESSAGE LENGTH 
          STD    T3 
          LDD    DP+2        SET CYLINDER IN MESSAGE
          STM    BMLCY
          LDD    DP+3        SET PHYSICAL TRACK IN MESSAGE
          STM    BMLTR
          LDD    DP+4        SET PHYSICAL SECTOR IN MESSAGE 
          STM    BMLSN
          LDD    IR+4        STORE TRACK NUMBER IN ERRLOG MESSAGE 
          RJM    C2D
          STM    ELMF+5 
          LDD    IR+4 
          SHN    -6 
          RJM    C2D
          STM    ELMF+4 
          LDC    ELMF+ERLN   ISSUE ERROR LOG MESSAGE
          RJM    DFM
          UJN    ELM11       ISSUE BML MESSAGE
  
 ELM8     LDC    ELMC        *EQXXX DOWNED BY SYSTEM.*
 ELM9     STD    MT 
          LDC    ELMB+ERLN   *EQXXX VERIFICATION FAILURE.*
          RJM    DFM
          LDD    MT 
 ELM9.1   LMC    ERLN        ISSUE ERROR LOG MESSAGE
 ELM10    RJM    DFM
          LDN    ZERL        ISSUE *SEE, ERRORLOG* EVENT
          CRD    CM 
          LDN    ELAE 
          STD    CM+4 
          MONITOR  EATM 
 ELM11    LDD    T3 
          ZJN    ELM12       IF NULL MESSAGE
          STD    CM+1        SET BML MESSAGE LENGTH 
          LDC    BML+BMLN    ISSUE BML MESSAGE
          RJM    DFM
 ELM12    LJM    ELMX        RETURN 
  
 ELM13    LDN    0           SET NO BML MESSAGE 
          STD    T3 
          LDC    ELME+ERLN
          UJP    ELM10       ISSUE ERRLOG MESSAGE 
 TFCN     SPACE  4
**        TFCN - TABLE OF SYMPTOM CODE DEPENDENT PROCESSORS.
  
  
 TFCN     BSS    0
          CON    4000+UCFC,ELM6        CHANNEL VERIFICATION FAILURE 
          CON    /COMSDFS/HS0030,ELM9  DEVICE SET *OFF* BY SYSTEM 
          CON    /COMSDFS/HS0034,ELM8  DEVICE SET *DOWN* BY SYSTEM
          CON    /COMSDFS/HS0105,ELM7  TRACK FLAWED BY SYSTEM 
          CON    0,ELM13               DEVICE UNAVAILABLE 
 MSGID    SPACE  4,10 
*         MSGID - TABLE OF MESSAGE ID-S FOR NON-EXTENDED MEMORY DEVICES.
  
  
 MSGID    BSS    0
          CON    2RDI,/COMSDFS/RM0002   (DI)  844-2X, HALF TRACK
          CON    2RDJ,/COMSDFS/RM0003   (DJ)  844-4X, HALF TRACK
          CON    2RDK,/COMSDFS/RM0004   (DK)  844-2X, FULL TRACK
          CON    2RDL,/COMSDFS/RM0005   (DL)  844-4X, FULL TRACK
          CON    2RDV,/COMSDFS/RM0006   (DV)  819, SINGLE DENSITY 
          CON    2RDW,/COMSDFS/RM0006   (DW)  819, DOUBLE DENSITY 
          CON    2RDM,/COMSDFS/RM0007   (DM)  885, HALF TRACK 
          CON    2RDQ,/COMSDFS/RM0017   (DQ)  885, FULL TRACK 
          CON    2RDR,/COMSDFS/RM0015   (DR)  CDSS II 
          CON    2RDX,/COMSDFS/RM0010   (DX)  3330-1
          CON    2RDY,/COMSDFS/RM0011   (DY)  3330-11 
          CON    2RDZ,/COMSDFS/RM0012   (DZ)  3350
          CON    2RDA,/COMSDFS/RM0013   (DA)  33502 
          CON    2RDB,/COMSDFS/RM0014   (DB)  885-42 (PFMD) 
          CON    2RDC,/COMSDFS/RM0115   (DC)  895 
          CON    2RDD,/COMSDFS/RM0110   (DD)  834 
          CON    2RDF,/COMSDFS/RM0120   (DF)  887 (4KB SECTOR)
          CON    2RDG,/COMSDFS/RM0111   (DG)  836 
          CON    2RDH,/COMSDFS/RM0121   (DH)  887 (16KB SECTOR) 
          CON    2RDN,/COMSDFS/RM0124   (DN)  9853 (XMD/CM3)
          CON    2REA,/COMSDFS/RM0130   (EA)  5832 (1X SSD) 
          CON    2REB,/COMSDFS/RM0131   (EB)  5832 (2X SSD) 
          CON    2REC,/COMSDFS/RM0132   (EC)  5833 (1X SABRE) 
          CON    2RED,/COMSDFS/RM0133   (ED)  5833 (1XP SABRE)
          CON    2REE,/COMSDFS/RM0134   (EE)  5833 (2X SABRE) 
          CON    2REF,/COMSDFS/RM0137   (EF)  5833 (2XP SABRE)
          CON    2REG,/COMSDFS/RM0142   (EG)  5838 (1X ELITE) 
          CON    2REH,/COMSDFS/RM0143   (EH)  5838 (1XP ELITE)
          CON    2REI,/COMSDFS/RM0144   (EI)  5838 (2X ELITE)   (MP)
          CON    2REJ,/COMSDFS/RM0147   (EJ)  5838 (2XP ELITE)  (MP)
          CON    2REK,/COMSDFS/RM0145   (EK)  5838 (3XP ELITE)  (MP)
          CON    2REL,/COMSDFS/RM0146   (EL)  5838 (4X ELITE)   (MP)
          CON    2REM,/COMSDFS/RM0135   (EM)  5833 (3XP SABRE)  (MP)
          CON    2REN,/COMSDFS/RM0136   (EN)  5833 (4X SABRE)   (MP)
          CON    2REO,/COMSDFS/RM0162   (EO)  47444 (1X 3.5IN)
          CON    2REP,/COMSDFS/RM0163   (EP)  47444 (1XP 3.5IN) 
          CON    2RES,/COMSDFS/RM0164   (ES)  47444 (2X 3.5IN)  (MP)
          CON    2REU,/COMSDFS/RM0167   (EU)  47444 (2XP 3.5IN) (MP)
          CON    2REV,/COMSDFS/RM0165   (EV)  47444 (3XP 3.5IN) (MP)
          CON    2REW,/COMSDFS/RM0166   (EW)  47444 (4X 3.5IN)  (MP)
          CON    0           END OF TABLE 
 MSEID    SPACE  4,10 
*         MSEID - TABLE OF MESSAGE ID-S FOR EXTENDED MEMORY DEVICES.
  
  
 MSEID    BSS    0
          CON    102,/COMSDFS/RM0070    (DP)  ECS I  - DC135 DDP
          CON    100,/COMSDFS/RM0071    (DE)  ECS I  - COUPLER
          CON    202,/COMSDFS/RM0072    (DP)  ECS II - DC135 DDP
          CON    200,/COMSDFS/RM0073    (DE)  ECS II - COUPLER
          CON    101,/COMSDFS/RM0074    (DP)  ECS I  - DC145 DDP
          CON    201,/COMSDFS/RM0075    (DP)  ECS II - DC145 DDP
          CON    300,/COMSDFS/RM0076    (DP)  LCME   - COUPLER
          CON    400,/COMSDFS/RM0077    (DE)  UEM 
          CON    500,/COMSDFS/RM0207    (DE)  ESM    - COUPLER
          CON    501,/COMSDFS/RM0210    (DP)  ESM    - LOW SPEED PORT 
          CON    601,/COMSDFS/RM0172    (DP)  STORNET 
          CON    0           END OF TABLE 
          SPACE  4,10 
*         BINARY MAINTENANCE LOG MESSAGE. 
  
 BML      BSS    0
  
 BMLID    VFD    12/         MESSAGE ID 
  
 BMLSC    VFD    12/         SYMPTOM CODE 
  
 BMLPP    VFD    6/          PP NUMBER
          VFD    6/          CHANNEL NUMBER 
  
 BMLUN    VFD    6/0         EQUIPMENT NUMBER 
          VFD    6/          UNIT NUMBER
  
          VFD    12/0        RESERVED 
  
 BMLEO    VFD    12/         EST ORDINAL
  
          VFD    24/0        RESERVED 
 BMLMF    VFD    12/         MAINFRAME ID 
  
          VFD    12/0        RESERVED 
  
 BMLL1    EQU    *-BML       MESSAGE LENGTH (NON-TRACK FLAW FORMAT) 
  
          VFD    24/0        RESERVED 
 BMLCY    VFD    12/         CYLINDER 
  
 BMLTR    VFD    12/         TRACK
  
 BMLSN    VFD    12/         SECTOR 
  
 BMLL2    EQU    *-BML       MESSAGE LENGTH (TRACK FLAW FORMAT) 
          SPACE  4,10 
*         ERROR LOG MESSAGES. 
  
  
 ELMA     DATA   6HCHXX,
 ELMB     DATA   C*EQXXX VERIFICATION FAILURE.* 
 ELMC     DATA   C*EQXXX DOWNED BY SYSTEM.* 
 ELMD     DATA   C*EQXXX OFFED BY SYSTEM.*
 ELME     DATA   C*EQXXX UNAVAILABLE.*
 ELMF     DATA   C*EQXXX,TKNNNN, MEDIA DEFECT FLAWED.*
 FMT      SPACE  4,10 
**        FMT - FORMAT 895 DEVICE MAINTENANCE TRACK.
* 
*         ENTRY  (T4) = CHANNEL NUMBER. 
*                (EQ) = EST ORDINAL.
*                (DVMT) = MAINTENANCE TRACK NUMBER. 
*                (ES - ES+4) = EST ENTRY. 
* 
*         EXIT   (A) .NE. 0 IF ERROR. 
*                (T4) = CHANNEL NUMBER. 
*                (T5) = EST ORDINAL.
*                (T6) = MAINTENANCE TRACK NUMBER. 
* 
*         USES   T1, T2, T4, T5, T6, CM - CM+4, CN - CN+2.
* 
*         CALLS  FNC, SDR.
* 
*         MACROS DCHAN, DELAY, RCHAN. 
  
  
 FMT12    LDD    ES+4        GET UNIT COUNT 
          SHN    3
          ADK    DDLL 
          CRD    CM 
          LDD    CM 
          LPN    7
          STD    T2 
          LDN    FMMC 
          RJM    SDR
          LDN    0           SET RETURN STATUS
  
 FMT      SUBR               ENTRY/EXIT 
          LDM    DVMT        RESTORE MAINTENANCE TRACK NUMBER 
          STD    T6 
          LDD    EQ          RESTORE EST ORDINAL
          STD    T5 
          LDD    T4 
          LPN    40 
          NJN    FMT12       IF CONCURRENT CHANNEL
          LDD    T4 
          RCHAN              RESERVE CHANNEL
          LDC    CTAB 
          STD    T1          SET CHANNEL TABLE ADDRESS
 FMT1     LDI    T1 
          ZJN    FMT2        IF END OF LIST 
          STD    T2 
          LDI    T2          MODIFY INSTRUCTION 
          SCN    37 
          LMD    T4 
          STI    T2 
          AOD    T1          ADVANCE LIST POINTER 
          UJN    FMT1        MODIFY NEXT INSTRUCTION
  
 FMT2     LDD    ES+4        GET UNIT LIST
          SHN    3
          ADK    DDLL 
          CRD    CM 
          LDD    T6          STORE CYLINDER NUMBER
          LPC    3777 
          SHN    -1 
          STD    CN 
 FMT3     LDD    CM+4        EXTRACT NEXT UNIT
          SHN    14 
          STD    CM+4 
          ERRPL  4000-3*SLDC CODE DEPENDS ON VALUE
          SHN    -14
          LMC    3S6         SET MODE/OPERATION DECODE
          STD    CN+1 
          LDD    TH          SET LARGE RECORD SIZE
          STD    CN+2 
 FMT4     LDK    FCFP        ISSUE FORMAT FUNCTION
          RJM    FNC
          MJN    FMT6        IF ERROR 
          ACN    CH 
          LDN    FPBL 
          OAM    CN,CH
          NJN    FMT6        IF INCOMPLETE DATA TRANSFER
 FMT5     EJM    FMT7,CH     IF ALL DATA WAS ACCEPTED 
          ADN    1
          NJN    FMT5        IF NOT TIMEOUT 
 FMT6     UJN    FMT9        SET ERROR STATUS 
  
 FMT7     DCN    CH+40
          LCN    0           SET 4 SECOND TIMEOUT 
          STD    T2 
 FMT8     DELAY  10 
          LDK    FCGS        ISSUE GENERAL STATUS FUNCTION
          RJM    FNC
          MJN    FMT9        IF ERROR 
          ACN    CH 
          LDN    1
          IAM    T1,CH
          NJN    FMT9        IF INCOMPLETE DATA TRANSFER
          SFM    FMT9,CH     IF CHANNEL PARITY ERROR
          DCN    CH+40
          LDD    T1 
          ZJN    FMT10       IF TRACK FORMATTING COMPLETE 
          SOD    T2 
          NJN    FMT8        IF NOT TIMEOUT 
 FMT9     AOM    FMTB,SP     SET ERROR STATUS 
          UJN    FMT11       COMPLETE PROCESSING
  
 FMT10    AOD    CN+2        INCREMENT TRACK NUMBER 
          LPN    77 
          LMN    PTCYDC 
          NJP    FMT4        IF NOT END OF CYLINDER 
          LDD    CM 
          LPN    7
          SBN    1
          STD    CM 
          PJP    FMT3        IF MORE UNITS TO FORMAT
 FMT11    DCN    CH+40
          LDK    FCOC        RELEASE HARDWARE RESERVES
          RJM    FNC
          SHN    0-21        SET ERROR STATUS IF ERROR
          RAM    FMTB,SP
          LDD    T4          RELEASE CHANNEL
          DCHAN 
          LDM    FMTB,SP
          LJM    FMTX        RETURN 
 FNC      SPACE  4,10 
**        FNC - FUNCTION CHANNEL. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   (A) .EQ. 0 IF FUNCTION WAS ACCEPTED. 
*                    .LT. 0 IF TIMEOUT OR CHANNEL ACTIVE UPON ENTRY.
  
  
 FNC      SUBR               ENTRY/EXIT 
          AJM    FNC2,CH     IF CHANNEL ALREADY ACTIVE
          FAN    CH 
 FNC1     ADD    ON 
          IJM    FNC3,CH     IF FUNCTION ACCEPTED 
          NJN    FNC1        IF NOT TIMEOUT YET 
 FNC2     DCN    CH+40
          LCN    0           RETURN ERROR STATUS
          UJN    FNCX        RETURN 
  
 FNC3     LDN    0           RETURN SUCCESSFUL STATUS 
          UJN    FNCX        RETURN 
  
  
 CTAB     BSS    0           TABLE OF CHANNEL INSTRUCTION ADDRESSES 
          CHTB
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPC2D 
*CALL     COMPSDR 
*CALL     COMPSMI 
 VTE      SPACE  4,15 
**        VTE - VERIFY TRT EOI SECTORS. 
* 
*         ENTRY  (EQ) = EST ORDINAL BEING PROCESSED.
* 
*         USES   T6, T7.
* 
*         CALLS  CMI, CPF, CPS, FEB, FFT, PCV, WEI. 
* 
*         MACROS SETMS. 
  
  
 VTE      SUBR               ENTRY/EXIT 
          RJM    PCV         PRESET 
 VTE1     RJM    FEB         FIND *EOI* BYTE IN TRT 
          ZJN    VTEX        IF FINISHED WITH *EOI* PROCESSING
          RJM    FFT         FIND FIRST TRACK OF TRT CHAIN
          RJM    CPS         CHECK IF FILE IS PRESERVED 
          ZJN    VTE5        IF FILE IS NOT PRESERVED 
          RJM    CPF         CHECK PRESERVED FILE INTERLOCKS
          NJN    VTE1        IF FILE INTERLOCKED ON OTHER MAINFRAME 
 VTE2     LDD    T9          SETUP TO WRITE AN ENHANCED EOI SECTOR
          SBN    1
          STD    T6 
          LDD    EI 
          STD    T7 
          SETMS  IO,(AD,ND,NR)
          RJM    WEI         WRITE PROPER EOI SECTOR
  
*         CHECK FOR MS ERROR. 
  
          ENDMS 
 VTE3     UJP    VTE1        CONTINUE TO NEXT EOI 
  
 VTE5     RJM    CMI         CHECK MACHINE RECOVERY TABLE INTERLOCK 
          ZJN    VTE3        IF FILE NOT LOCAL TO THIS MAINFRAME
          UJP    VTE2        GO WRITE CORRECT EOI TO FILE 
 CMI      SPACE  4,15 
**        CMI - CHECK MACHINE RECOVERY TABLE INTERLOCK. 
* 
*         ENTRY  (T6) = FIRST TRACK NUMBER OF FILE. 
*                (T8) = BYTE NUMBER IN TRT WORD.
*                (CM - CM+4) = TRT WORD CONTAINING (T6).
*                (FTPB) = LENGTH OF TRT BEING PROCESSED.
* 
*         EXIT   (A) = 0 IF FILE IS NOT LOCAL TO THIS MAINFRAME.
*                    .NE. 0 IF FILE IS LOCAL TO THIS MAINFRAME. 
* 
*         USES   T1, T2, CM - CM+4. 
  
  
 CMI3     LDN    1           RETURN WITH LOCAL FILE STATUS
  
 CMI      SUBR               ENTRY/EXIT 
          LDD    CM+4        CHECK TRACK INTERLOCK
          LMM    TCMI,T8
          SBD    CM+4 
          PJN    CMI3        IF FILE NOT INTERLOCKED
  
*         CHECK MRT TO DETERMINE WHO HAS FILE INTERLOCKED.
  
 CMI1     LDD    T6          CALCULATE WORD OFFSET INTO MRT 
          SHN    21-4 
          STD    T1 
          SHN    4-21        SAVE BIT INTERLOCK NUMBER (BITS 0-4) 
          STD    T2 
 CMIB     LDC    **          GET TRT FWA
          ADM    FTPB        ADD LENGTH OF TRT
          ADD    T1          ADD OFFSET INTO MRT
          CRD    CM 
          LDN    CM+5        SET BYTE POINTER WITHIN MRT WORD 
          STD    T0 
 CMI2     SOD    T0 
          LCN    14 
          RAD    T2 
          PJN    CMI2        IF NOT POSITIONED TO PROPER BYTE 
          ADC    SHNI+21-0+14 
          STM    CMIC 
          LDI    T0 
 CMIC     SHN    ** 
          SHN    0-21 
          UJP    CMIX        RETURN 
  
  
 TCMI     CON    200,100,40,20  TABLE OF TRACK INTERLOCK BITS 
 CPF      SPACE  4,15 
**        CPF - CHECK PRESERVED FILE STATUS.
* 
*         ENTRY  (MT) = FIRST TRACK NUMBER OF FILE. 
* 
*         EXIT   (A) = 0 IF FILE IS NOT INTERLOCKED.
*                    .NE. 0 IF FILE IS INTERLOCKED ON OTHER MAINFRAME.
* 
*         USES   T6, T7.
* 
*         CALLS  CPI, RDS.
* 
*         MACROS ENDMS, SETMS.
  
  
 CPF      SUBR               ENTRY/EXIT 
          LDD    MT          SETUP TO READ SYSTEM SECTOR
          STD    T6 
          LDN    0
          STD    T7 
          SETMS  IO,(AD,ND) 
          LDC    BFMS        READ SYSTEM SECTOR 
          RJM    RDS
  
*         CHECK FOR MS ERROR. 
  
          ENDMS 
          LDM    BFMS+2+4 
          SHN    -6 
          LMN    PMFT 
          ZJN    CPF1        IF DIRECT ACCESS PERMANENT FILE
          LMN    FAFT&PMFT
          NJN    CPF2        IF NOT FAST ATTACH PERMANENT FILE
 CPF1     LDD    ES 
          LPC    1020 
          ZJN    CPF2        IF DEVICE NOT A SHARED DEVICE
          RJM    CPI         CHECK MMF PERMANENT FILE INTERLOCKS
 CPF2     UJP    CPFX        RETURN 
 CPS      SPACE  4,10 
**        CPS - CHECK FOR PRESERVED FILE STATUS.
* 
*         ENTRY  (T6) = FIRST TRACK NUMBER. 
*                (T8) = BYTE NUMBER IN TRT WORD.
*                (CM - CM+4) = TRT WORD CONTAINING (T6).
* 
*         EXIT   (A) = 0 IF FILE IS NOT PRESERVED.
*                    .NE. 0 IF FILE IS PRESERVED FILE.
  
  
 CPS      SUBR               ENTRY/EXIT 
          LDD    CM+4        CHECK FOR PRESERVED BIT
          LMM    TCPS,T8
          SBD    CM+4 
          SHN    -21
          UJN    CPSX        RETURN 
  
*         BIT MASKS FOR INTERLOCK TESTS.
  
 TCPS     CON    4000,2000,1000,0400
 CPI      SPACE  4,10 
**        CPI - CHECK MMF PERMANENT FILE INTERLOCKS.
* 
*         ENTRY  (BFMS) = SYSTEM SECTOR OF PRESERVED FILE.
* 
*         EXIT   (A) = 0 IF FILE IS NOT INTERLOCKED.
*                    .NE. 0 IF FILE IS INTERLOCKED ON OTHER MAINFRAME.
* 
*         USES   T2, T3, T5.
* 
*         CALLS  SMI. 
  
  
 CPI      SUBR               ENTRY/EXIT 
          LDD    EQ 
          STD    T5 
          RJM    SMI         GET CURRENT MACHINE INDEX
          STD    T2 
          SHN    1
          STD    T3          *2 
          ADD    T3          *4 
          RAD    T2          *5 
          UJN    CPIX        RETURN 
 FEB      SPACE  4,15 
**        FEB - FIND EOI TRT BYTE.
* 
*         ENTRY  (T9) = TRACK NUMBER TO BEGIN SEARCH. 
* 
*         EXIT   (A) = 0 IF NO EOI BYTE FOUND.
*                (T6) = TRACK NUMBER CONTAINING EOI BYTE, IF FOUND. 
*                (T9) = UPDATED TO BEGIN NEXT SEARCH. 
* 
*         USES   T2.
* 
*         CALLS  FTP. 
  
  
 FEB      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T2 
          LDD    T9 
          RJM    FTP
          ZJN    FEBX        IF NO *EOI* FOUND
          ADN    1
          STD    T9 
          UJN    FEBX        RETURN 
 FFT      SPACE  4,10 
**        FFT - FIND FIRST TRACK LINK.
* 
*         ENTRY  (T6) = TRACK NUMBER TO LINK BACK TO *BOI*. 
* 
*         EXIT   (A) = (MT) = (T6) = TRACK NUMBER OF FIRST TRACK. 
* 
*         USES   MT, T2, T6.
* 
*         CALLS  FTP. 
  
  
 FFT      SUBR               ENTRY/EXIT 
 FFT1     LDD    T6 
          STD    T2 
          LDN    0           BEGIN SEARCH FROM BEGINNING OF TRT 
          RJM    FTP
          NJN    FFT1        IF FIRST LINK NOT FOUND
          LDD    T6          SAVE FIRST TRACK NUMBER
          STD    MT 
          UJN    FFTX        RETURN 
 FTP      SPACE  4,15 
**        FTP - FIND TRT BYTE PATTERN.
* 
*         ENTRY  (A) = TRACK NUMBER IN TRT TO BEGIN WITH. 
*                (T2) = PATTERN TO FIND IN TRT BYTES. 
* 
*         EXIT   (A) = (T6) = TRACK NUMBER OF PATTERN MATCH.
*                (EI) = *EOI* SECTOR NUMBER, IF FOUND AS MATCH. 
*                (T8) = BYTE NUMBER IN TRT WORD.
* 
*         USES   EI, T1, T2, T6, T8, CM - CM+4. 
  
  
 FTP      SUBR               ENTRY/EXIT 
          STD    T6 
          LPN    3           CALCULATE FIRST OFFSET 
          ADN    CM 
          STD    T1 
          LDD    T6          CALCULATE TRT WORD OFFSET
          LPC    3777 
          SHN    -2 
          STD    T6 
 FTP1     LDC    **          READ TRT WORD
 FTPA     EQU    *-1
          ADD    T6 
          CRD    CM 
 FTP2     LDI    T1 
          SHN    21-13
          PJN    FTP4        IF *EOI* BYTE
          SHN    21+1-21+13 
          LMD    T2 
          ZJN    FTP5        IF PATTERN MATCH 
 FTP3     AOD    T1 
          SBN    CM+4 
          NJN    FTP2        IF NOT THROUGH ALL TRT BYTES 
          LDN    CM 
          STD    T1 
          LDC    **          CHECK IF DONE WITH TRT 
 FTPB     EQU    *-1         (NUMBER OF WORDS IN TRT) 
          SBD    T6 
          ZJN    FTPX        IF NO PATTERN MATCH FOUND
          AOD    T6          INCREMENT TRT WORD OFFSET
          UJN    FTP1        CONTINUE SEARCHING TRT 
  
 FTP4     LDD    T2 
          NJN    FTP3        IF NOT SEARCHING FOR *EOI* 
          LDI    T1          SAVE *EOI* SECTOR NUMBER 
          STD    EI 
 FTP5     LDD    T1          CONSTRUCT TRACK NUMBER 
          SBN    CM 
          STD    T8          SAVE BYTE NUMBER IN TRT WORD 
          SHN    21-2 
          ADD    T6 
          SHN    2
          ADC    4000 
          STD    T6 
          LJM    FTPX        RETURN 
 PCV      SPACE  4,20 
**        PCV - PRESET CONDITIONS FOR *VTE*.
* 
*         ENTRY  (ES - ES+4) = EST ENTRY. 
* 
*         EXIT   (FTPB) = TRT LENGTH IN CM WORDS. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  IRA. 
  
  
 PCV      SUBR               ENTRY/EXIT 
          RJM    IRA         SET ADDRESSES
          LDD    ES+4 
          SHN    3
          ADK    TDGL        GET TRT LENGTH 
          CRD    CN 
          ADN    TRLL-TDGL   GET TRT FWA
          CRD    CM 
          LDD    CN+2 
          STM    FTPB 
          LDD    CM+4        PRESET TRT ADDRESS 
          STM    CMIB+1 
          STM    FTPA 
          LDD    CM+3 
          LPN    77 
          LMC    LDCI 
          STM    CMIB 
          STM    FTPA-1 
          UJP    PCVX        RETURN 
  
          QUAL   *
  
          OVERFLOW  OVLA,BFMS 
          TITLE 
          END 
