          CTEXT  SCI MDD COMMANDS
          OVERLAY  (MDD DISPLAY/ENTER CENTRAL MEMORY COMMANDS)
 DCM      SPACE  4,10
**        DCM - DISPLAY CENTRAL MEMORY.
*
*         CALLS  DMB.


 DCM      ROUTINE

 DCM0     AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDN    2           SET OCTAL/DISPLAY DUMP
          RJM    DMB         DISPLAY MEMORY BLOCK
          LDC    DCM0+OCWD   REFRESH ADDRESS
          LJM    CMDR        RETURN
 DHB      SPACE  4,10
**        DHB - DISPLAY 64 BIT MEMORY FROM A BYTE ADDRESS.
*
*         CALLS  DMB, TBA.


 DHB      ROUTINE

          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          ZJN    DHB0        IF ADDRESS NOT ENTERED
          RJM    TBA         TRANSLATE BYTE ADDRESS
 DHB0     AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDN    0           SET HEX BYTE DISPLAY
          RJM    DMB         DISPLAY MEMORY BLOCK
          LDC    DHB0+HXBT   REFRESH ADDRESS
          LJM    CMDR        RETURN
 DHX      SPACE  4,10
**        DHX - DISPLAY 64 BIT MEMORY IN HEX.
*
*         CALLS  DMB.


 DHX      ROUTINE

          LDN    1           SET HEX WORD DISPLAY
          STM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    DMB         DISPLAY MEMORY BLOCK
          LDC    DHX+HXWD    REFRESH ADDRESS
          LJM    CMDR        RETURN
 EBT      SPACE  4,10
**        EBT - ENTER HEX BYTE MEMORY.
*
*         ENTRY  (PC) = PARAMETER COUNT.
*
*         USES   T1, T2, T6.
*
*         CALLS  CBR, DNV, INW, TBA.


 EBT      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          NJN    EBT0        IF ADDRESS SPECIFIED
          LJM    CMDE        SET ERROR

 EBT0     LDM    VAL1+3      SAVE BYTE NUMBER FROM BEGINNING OF WORD
          LPN    7
          STD    T6
          RJM    TBA         TRANSLATE BYTE ADDRESS
          RJM    CBR         CHECK BOUNDS REGISTER
 EBT1     LDN    1+MRNT
          RJM    DNV
          NJN    EBT2        IF ANOTHER BYTE TO WRITE
          AOML   CMWC        INCREMENT CM WRITE COUNTER
          LJM    CMDF        RETURN

 EBT2     LDD    MP+2
          LMC    RR          ACTIVATE R-REGISTER
          CRML   NBUF,ON     READ WORD TO BE PATCHED
          LDD    T6
          SHN    -1
          STD    T2
          LDD    T6
          LPN    1
          STD    T1
          NJN    EBT3        IF ODD BYTE
          LDM    ABUF
          SHN    8D
          STML   ABUF
 EBT3     LDML   NBUF,T2     CHANGE DESIRED BYTE
          LPML   EBTA,T1
          LMML   ABUF
          STML   NBUF,T2
          LDD    MP+2
          LMC    RR          ACTIVATE R-REGISTER
          CWML   NBUF,ON     REWRITE WORD
          AOD    T6
          SBN    8D
          MJN    EBT4        IF NOT AT WORD BOUNDARY
          STD    T6
          RJM    INW         INCREMENT TO NEXT WORD
 EBT4     LJM    EBT1        GET NEXT PARCEL

 EBTA     BSS    0           BYTE MASKS
          LOC    0
          CON    0#00FF
          CON    0#FF00
          LOC    *O
 ECM      SPACE  4,10
**        ECM - ENTER CENTRAL MEMORY.
*
*         CALLS  CBR, SMP.


 ECM      ROUTINE

          RJM    SMP         SET MEMORY PARAMETERS
          RJM    CBR         CHECK BOUNDS REGISTER
          LDD    MP+2        RESET (A)
          LMC    RR          ACTIVATE R-REGISTER
          CWM    MRBF,ON
          AOML   CMWC        INCREMENT CM WRITE COUNTER
          LJM    CMDF        RETURN
 RRR      SPACE  4,10
**        RRR - REFRESH RATE ROUTINE.


 RRR      ROUTINE

          LDM    HLPC        GET PARAMETER VALUE
          ZJN    RRR1        IF FASTER
          LDM    RRRP        GET NUMBER OF INCREASES
          LMN    17
          ZJN    RRR3        IF SLOWEST POSSIBLE NOW
          AOM    RRRP        INCREMENT VALUE
          UJN    RRR2        FORM LOAD INSTRUCTION

 RRR1     LDM    RRRP        GET NUMBER IF INCREASES
          LMN    4
          ZJN    RRR3        IF FASTEST POSSIBLE NOW
          SOM    RRRP        DECREMENT VALUE
 RRR2     SHN    11          SHIFT TO SIGNIFICANCE
          STML   MDDR
 RRR3     LJM    CMDF        RETURN
 CBR      SPACE  4,10
**        CBR - CHECK BOUNDS REGISTER.
*
*         EXIT   BOUNDS REGISTER SET PROPERLY FOR WRITE.
*
*         CALLS  CMB, SPB.


 CBR      SUBR               ENTRY/EXIT
          RJM    CMB         CHECK MEMORY BOUND
          RJM    SPB         SET PP BOUNDARY
          UJN    CBRX        RETURN
 CMB      SPACE  4,10
**        CMB - CHECK MEMORY BOUNDS.
*
*         EXIT   RETURN IF WRITE PERMITTED.
*                TO *CMDF* IF WRITE BEYOND MEMORY BOUNDS.
*
*         USES   RN, T0, T1, T2.
*
*         MACROS PRINT.


 CMB1     READMR RDATA,ELCM,S0MBRG  READ S0/S0E MEMORY BOUNDS REGISTER
          LDM    RDATA       REFORMAT TO NON-S0/S0E REGISTER FORMAT
          STM    RDATA+4
          LDM    RDATA+1
          STM    RDATA+5
          LDC    0#40        SET FAKE ENABLED FLAG
          STM    RDATA
          UJN    CMB2        ENTER COMMON CODE SEQUENCE

 CMB      SUBR               ENTRY/EXIT
          LDM    S0FLG       CHECK MAINFRAME TYPE
          NJN    CMB1        IF S0/S0E
          LDK    MBRG
          STD    RN
          LDM    ELCM
          RJM    RMR         READMR RDATA,ELCM,MBRG MEMORY BOUNDS REGISTER
 CMB2     LDM    RDATA
          LPC    0#40
          ZJN    CMBX        IF PORT BOUNDS CHECKING OFF
          LDM    MEMM        CHECK MEMORY MODEL NUMBER
          LMC    0#34
          ZJN    CMB4        IF MODEL 34 MEMORY
          LMN    0#35&0#34
          ZJN    CMB4        IF MODEL 35 MEMORY
          LDM    RDATA+4     PACK UPPER BOUND
          SHN    8D
          LMM    RDATA+5
          SHN    -3
          STDL   T0          SAVE IT IN T0
 CMB3     SRD    T1          SAVE UPPER 16 BITS OF R-REGISTER
          LDD    T2          GET UPPER 6 FROM LOWER 12
          SHN    -6
          STD    T2
          LDD    T1          GET UPPER 10 BITS
          SHN    6
          LMDL   T2          ADD IN T2
          SBDL   T0          SUBTRACT BOUNDS
          MJP    CMBX        IF WRITE LESS THAN BOUNDS
          AOM    OVLP
          PRINT  CMBM+CRLF   *WRITE WOULD CROSS MEMORY BOUNDS*
          LJM    CMDF        RETURN FROM CM-WRITE

*         EXTRACT MEMORY BOUNDS FOR MODEL 34 MEMORY.

 CMB4     LDM    RDATA+6
          SHN    10
          LMM    RDATA+7
          SHN    -3
          STDL   T0
          LDM    RDATA+5     EXTRACT UPPER 3 BITS OF BOUNDS ADDRESS
          LPN    7
          SHN    17-2
          RADL   T0
          UJP    CMB3        COMPARE VALUES

 CMBM     ASCII  (WRITE WOULD CROSS MEMORY BOUNDS)
 DDT      SPACE  4,10
**        DDT - DISPLAY DISPLAY CODE TEXT.
*
*         ENTRY  (NBUF - NBUF+4) = DISPLAY CODE TEXT.
*
*         USES   T2.
*
*         CALLS  PDC.


 DDT      SUBR               ENTRY/EXIT
          LDN    1R
          STIAO  BP          PUT CHARACTER IN OUTPUT QUEUE
          LDN    0
          STD    T2
 DDT1     LDM    NBUF,T2
          SHN    -6
          RJM    PDC         PRINT UPPER CHARACTER
          LDM    NBUF,T2
          LPN    77
          RJM    PDC         PRINT LOWER CHARACTER
          AOD    T2
          LMN    5
          NJN    DDT1        IF MORE TO DISPLAY
          UJN    DDTX        RETURN
 DMB      SPACE  4,10
**        DMB - DISPLAY MEMORY BLOCK IN DESIRED FORM.
*
*         ENTRY  (A) = MEMORY DISPLAY FORMAT.
*                      0 = HEX BYTE/ASCII.
*                      1 = HEX WORD/ASCII.
*                      2 = OCTAL/DISPLAY.
*
*         USES   T1, WC.
*
*         CALLS  DAT, DDT, EOL, INW, LCA, PRN, SMP, SNP.


 DMB      SUBR               ENTRY/EXIT
          STD    T1
          LDM    DMBB,T1     SET ROUTINE ADDRESS
          STM    DMBA
          RJM    SMP         SET MEMORY PARAMETERS
 DMB1     SOD    WC          DECREMENT WORD COUNT
          MJN    DMBX        IF ALL WORDS DISPLAYED
          LDD    MP          SET ADDRESS FOR *PRN*
          SHN    14
          LMD    MP+1
          SHN    -6
          STM    NBUF        UPPER FOUR CHARACTERS (10 BITS)
                             ** NOTE UPPER 2 BITS INVALID - 0'S **
          LDD    MP+1
          SHN    14
          LPC    770000      CLEAR LOWER 4 BITS
          LMD    MP+2
          SHN    -6
          STM    NBUF+1      NEXT FOUR CHARACTERS (12 BITS)
          LDD    MP+2
          SHN    6
          STM    NBUF+2      LAST TWO CHARACTERS (6 BITS)
          LJM    **          PROCESS MEMORY WORD
 DMBA     EQU    *-1

 DMBB     BSS    0
          LOC    0
          CON    DMB2        HEX BYTE/ASCII
          CON    DMB3        HEX WORD/ASCII
          CON    DMB5        OCTAL/DISPLAY
          LOC    *O

*         HEX BYTE WITH ASCII INTERPRETATION.

 DMB2     RJM    SNB         CHANGE TO BYTE ADDRESS
          LDN    8D          SET DIGITS TO PRINT
          STM    DMBC
          LDN    HBDT/10000
          UJN    DMB4        PROCESS LIKE HEX WORD DISPLAY

*         HEX WORD WITH ASCII INTERPRETATION.

 DMB3     RJM    SNB         CHANGE TO A WORD ADDRESS
          RJM    SNB
          LDN    7           SET DIGITS TO PRINT
          STM    DMBC
          LDN    HMDT/10000
 DMB4     ADC    LDCI
          STM    DMBD        SET DISPLAY TYPE
          LDC    HPDT+7
 DMBC     EQU    *-1
          RJM    PRN         DISPLAY ADDRESS
          RJM    LCA         LOAD ADDRESS
          CRML   NBUF,ON     READ MEMORY WORD
 DMBD     LDC    HMDT+16D    HEX WORD MEMORY DUMP
*         LDC    HBDT+16D    HEX BYTE MEMORY DUMP
          RJM    PRN         DISPLAY CONTENTS OF ADDRESS
          RJM    DAT         DISPLAY ASCII TEXT
          UJN    DMB6        COMPLETE LINE AND INCREMENT ADDRESS

*         OCTAL WITH DISPLAY CODE INTERPRETATION.

 DMB5     LDC    OMDT+12
          RJM    PRN         DISPLAY ADDRESS IN OCTAL
          RJM    LCA         LOAD ADDRESS
          CRM    NBUF,ON
          LDC    OMDT+20D
          RJM    PRN         DISPLAY CONTENTS OF ADDRESS
          RJM    DDT         DISPLAY TEXT
 DMB6     RJM    EOL         END LINE
          RJM    INW         INCREMENT TO NEXT WORD
          LJM    DMB1        CHECK FOR MORE TO DISPLAY
 INW      SPACE  4,10
**        INW - INCREMENT TO NEXT WORD ADDRESS.
*
*         ENTRY  (MP - MP+2) = CM ADDRESS.
*
*         EXIT   (MP - MP+2) = CM ADDRESS + 1.


 INW      SUBR               ENTRY/EXIT
          AOD    MP+2
          SHN    -14         SAVE CARRY BIT
          RAD    MP+1
          SHN    -14         SAVE CARRY BIT
          ADD    MP
          LPN    17          ONLY 4 BITS VALID
          STD    MP
          UJN    INWX        RETURN
 LCA      SPACE  4,10
**        LCA - LOAD CM ADDRESS.
*
*         ENTRY  (MP - MP+2) = CM ADDRESS.
*
*         EXIT   (R-REGISTER) (A) = CM ADDRESS.
*
*         USES   T1, T2.


 LCA      SUBR               ENTRY/EXIT
          LDD    MP+1        BITS 4 TO 15
          SHN    6
          STD    T2          BITS 10 TO 15 OF ADDRESS
                             * BITS 16 TO 21 WILL BE IN A REGISTER
          LPC    770000      BITS 4 TO 9 LEFT
          ADD    MP          GET BITS 0 TO 3
          SHN    6           GET INTO PROPER ORDER
          STD    T1          SAVE UPPER TEN BITS
          LRD    T1
          LDD    MP+2        GET BITS 16 TO 27
          LMC    RR          ACTIVATE R-REGISTER
          UJN    LCAX        RETURN
 PDC      SPACE  4,10
**        PDC - PRINT DISPLAY CODE CHARACTER.
*
*         ENTRY  (A) = DISPLAY CODE CHARACTER.
*
*         EXIT   CHARACTER CONVERTED TO ASCII AND PRINTED.


 PDC2     LDN    1R
 PDC3     STIAO  BP          PUT CHARACTER IN OUTPUT QUEUE

 PDC      SUBR               ENTRY/EXIT
          ZJN    PDC2        IF COLON
          SBN    33
          PJN    PDC1        IF NOT ALPHABETIC
          ADC    1RA-1+33
          UJN    PDC3        PRINT IT

 PDC1     SBN    10D
          PJN    PDC2        IF NOT NUMERIC
          ADN    1R0+10D
          UJN    PDC3        PRINT IT
 SMP      SPACE  4,10
**        SMP - SET MEMORY PARAMETERS.
*
*         ENTRY  (VAL1 - VAL1+3) = MEMORY ADDRESS.
*                (VAL3 - VAL3+2) = INCREMENT VALUE.
*                (VAL2) = WORD COUNT.
*
*         EXIT   TO *CMDE* IF ADDRESS BEYOND PHYSICAL MEMORY SIZE.
*                (MP - MP+2) = MEMORY ADDRESS.
*                (WC) = WORD COUNT.
*                (A) = MEMORY ADDRESS RELATIVE TO R.
*
*         USES   MP - MP+2, WC.
*
*         CALLS  FHE, LCA.


 SMP      SUBR               ENTRY/EXIT
          LDM    VAL3+2      INCREMENT MEMORY ADDRESS
          RAM    VAL1+3      BITS 16 TO 27 OF ADDRESS
          STD    MP+2
          SHN    -14         SAVE CARRY BIT
          ADM    VAL3+1      INCREMENT
          RAM    VAL1+2      BITS 4 TO 15 OF ADDRESS
          STD    MP+1
          SHN    -14         SAVE CARRY BIT
          ADM    VAL3
          RAM    VAL1+1      BITS 0 TO 4 OF ADDRESS
          LPN    17
          STD    MP
          LDN    0
          STM    VAL3        CLEAR INCREMENT
          STM    VAL3+1
          STM    VAL3+2

*         VERIFY THAT ADDRESS IS WITHIN PHYSICAL MEMORY SIZE.  NOTE THAT
*         ONLY THE FWA IS CHECKED, SO THAT IT IS POSSIBLE TO SUBVERT THIS
*         CHECK BY SPECIFYING A VALID FWA WITH A TOO-LARGE WORD COUNT.

          LDN    CMID        READ MEMORY DESCRIPTOR
          RJM    FHE
          LDM    HBUF+CMIPMS CALCULATE PHYSICAL MEMORY SIZE
          SHN    6
          STM    HBUF+2
          SHN    -14
          STM    HBUF+1
          LDM    HBUF+CMIPMS+1
          SHN    6
          STM    HBUF+3
          SHN    -14
          RAM    HBUF+2
          LDM    VAL1        VALIDATE ADDRESS
          NJP    SMP3        IF ADDRESS BEYOND PHYSICAL MEMORY SIZE
          LDM    VAL1+1
          SBM    HBUF+1
          MJN    SMP1        IF ADDRESS VALID
          NJN    SMP3        IF ADDRESS BEYOND PHYSICAL MEMORY SIZE
          LDM    VAL1+2
          SBM    HBUF+2
          MJN    SMP1        IF ADDRESS VALID
          NJN    SMP3        IF ADDRESS BEYOND PHYSICAL MEMORY SIZE
          LDM    VAL1+3
          SBM    HBUF+3
          PJN    SMP3        IF ADDRESS BEYOND PHYSICAL MEMORY SIZE
 SMP1     LDM    VAL2        CHECK WORD COUNT
          SBN    20
          MJN    SMP2        IF <= 16
          LDN    20          LIMIT WORD COUNT TO 16
          STM    VAL2
 SMP2     LDM    VAL2        STORE WORD COUNT
          STD    WC
          RJM    LCA         LOAD CM ADDRESS
          LJM    SMPX        RETURN

 SMP3     LJM    CMDE        PRINT ERROR MESSAGE
 SNB      SPACE  4,10
**        SNB - SHIFT NBUF 1 BIT LEFT.
*
*         EXIT   (NBUF - NBUF+2) LEFT SHIFTED.


 SNB      SUBR               ENTRY/EXIT
          LDM    NBUF+2      LAST SIX BITS
          SHN    15-14       SHIFT LEFT 1
          STM    NBUF+2
          SHN    22-15       MOVE BIT TO END
          LPC    400000      CLEAR REST OF A
          LMM    NBUF+1      GET MIDDLE 12 BITS
          SHN    15-14       SHIFT END BIT AROUND
          STM    NBUF+1
          SHN    22-15       MOVE BIT TO END
          LPC    400000      CLEAR REST OF A
          LMM    NBUF        GET FIRST 12 BITS
          SHN    15-14       SHIFT END BIT AROUND
          STM    NBUF
          UJN    SNBX        RETURN
 TBA      SPACE  4,10
**        TBA - TRANSLATE BYTE ADDRESS.
*
*         EXIT   (VAL1 - VAL1+3) = WORD ADDRESS.
*
*         CALLS  SMP.


 TBA      SUBR               ENTRY/EXIT
          LDM    VAL1        GET HIGH ORDER FIRST
          LPC    177         ONLY POSSIBLE VALID BITS
          SHN    22-3
          STM    VAL1        EFFECT OF SHN -3
          SHN    -3
          LPC    70000
          LMM    VAL1+1
          SHN    22-3
          STM    VAL1+1
          SHN    -3
          LPC    70000
          LMM    VAL1+2
          SHN    22-3
          STM    VAL1+2
          SHN    -3
          LPC    70000
          LMM    VAL1+3
          SHN    -3          SHIFT OFF ODD BYTES
          STM    VAL1+3
          RJM    SMP         SET MEMORY PARAMETERS
          LJM    TBAX        RETURN

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD MAINTENANCE REGISTER ROUTINES)
 CER      SPACE  4,10
**        CER - CLEAR ERROR IN REGISTERS.
*
*         EXIT   TO *CXR1*.
*
*         CALLS  SMO.


 CER      ROUTINE

          LDM    MRPV
          RJM    SMO         SET UP MAINTENANCE REGISTER OPERATION
          FUNCMR ,MRCE
          UJN    CXR1        RETURN
 CXR      SPACE  4,10
**        CXR - CLEAR ERROR IN REGISTERS.
*
*         CALLS  SMO.
*
*         MACROS PRINT.


 CXR      ROUTINE

          LDM    MRPV
          RJM    SMO         SET UP MAINTENANCE REGISTER OPERATION
          FUNCMR ,MRMC
 CXR1     AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          PRINT  CXRM+CRLF   *CLEARED*
          LJM    CMDF        RETURN

 CXRM     ASCII  (CLEARED)
 MRP      SPACE  4,10
**        MRP - MAINTENANCE REGISTER DISPLAY PROCESSOR.
*
*         USES   PP, T0, T1, WC.
*
*         CALLS  DMR, SMO.


 MRP      ROUTINE

          LDD    PC          GET PARAMETER COUNT
          LPN    1S2         TEST FOR REGISTER NUMBER GIVEN
          ZJN    MRP15       IF REGISTER NOT SPECIFIED
          LDD    PC          GET PARAMETER COUNT
          LPN    1S3         TEST FOR COUNT GIVEN
          ZJN    MRP10       IF DISPLAY ONLY ONE REGISTER
          LDM    VAL2        GET REGISTER DISPLAY COUNT
          SBN    20          LIMIT TO REPEAT OF 16
          MJN    MRP5        IF NUMBER IS <= 16
          LDN    20          RESET VAL2 TO MAX
          STM    VAL2
 MRP5     LDM    VAL2        SET NUMBER OF ADDITIONAL REGISTERS TO DISPLAY
 MRP10    STM    MRPC
          LJM    MRP40       PROCESS SPECIFIC REGISTER(S)

 MRP15    AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDM    MRPV        CHECK IF IOU REGISTERS REQUESTED
          LMC    MRIL
          NJP    MRP25       IF MEMORY OR CPU REGISTERS REQUESTED

*         SET UP MODEL-DEPENDENT IOU PROCESSING.

          LDM    IOUM        TEST FOR I4
          LMC    0#43
          ZJP    MRP20       IF MODEL 43
          LMN    0#44&0#43
          ZJP    MRP20       IF MODEL 44
          LDM    IOUM
          LMC    0#42
          ZJN    MRP20       IF MODEL 42
          SHN    -4
          NJN    MRP20       IF NOT I4
          READMR RDATA,I0CC,OIMR  CHECK IF CIO SUBSYSTEM PRESENT
          LDML   RDATA+7     CHECK *OIMR* BIT 56
          SHN    21-63D+56D
          PJN    MRP20       IF CONCURRENT PP-S NOT PRESENT
          LDC    LPNI+2      SET FOR I4 LIST OF REGISTERS
          STM    DMRA        SET MASK IN DISPLAY ROUTINE
          LDC    LPNI+1S5    SET FOR LINE FEED CONTROL
          STM    DMRB        SET MASK IN DISPLAY ROUTINE
 MRP20    UJN    MRP35       DISPLAY REGISTERS

*         SET UP MODEL-DEPENDENT CPU/MEMORY PROCESSING.

 MRP25    LDM    CPUT        GET CLASS OF MACHINE
          LPN    7
          STD    T1
          ZJN    MRP35       IF CLASS FOUND
          LDN    1
          STD    T0
 MRP30    LDD    T0
          SHN    1
          STD    T0          SET MASK IN DISPLAY ROUTINE
          SOD    T1
          NJN    MRP30       IF NOT TO CPU TYPE YET
          LDC    LPNI        SET MASK FOR PROPER LIST
          ADD    T0
          STM    DMRA
          LDD    T0          TEST FOR S3 OR THETA
          SBN    10          BIT SET FOR S3
          MJN    MRP35       IF S1CR/S2
          LDC    LPNI+1S5
          STM    DMRB        SET NO CR/LF FLAG IN DISPLAY ROUTINE

*         DISPLAY DEFAULT LIST OF REGISTERS.

 MRP35    LDM    MRPV        GET LIST TO DISPLAY
          RJM    DMR         READ AND DISPLAY REGISTERS
          LDC    MRP15       REPEAT ADDRESS
          LJM    CMDR        RETURN

*         DISPLAY SPECIFIED REGISTER(S).

 MRP40    LDC    LPNI+77     SET MASK IN DISPLAY ROUTINE
          STM    DMRA
          LDM    MRPV
          RJM    SMO         SET UP MAINTENANCE REGISTER OPERATION
          AOM    OVLP        INHIBIT OVERLAY RELOAD
          LDM    MRPC        GET NUMBER OF REGISTERS TO DISPLAY
          STD    WC
          LDM    MRPE        SAVE STARTING REGISTER NUMBER
          STD    PP
 MRP45    LDC    MRPE
          RJM    DMR         DISPLAY ONE REGISTER
          AOM    MRPE        INCREMENT TO NEXT REGISTER
          SOD    WC          DECREMENT REGISTER COUNT
          PJN    MRP45       IF NEED TO DO ANOTHER REGISTER
          LDD    PP          RESTORE BEGINNING REGISTER NUMBER
          STM    MRPE
          LDC    MRP40       SET REENTRY ADDRESS
          LJM    CMDR        RETURN
 MRW      SPACE  4,10
**        MRW - WRITE MAINTENANCE REGISTER.
*
*         CALLS  DMR, SMO.
*
*         MACROS WRITMR.


 MRW      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDM    MRPV
          RJM    SMO         SET UP MAINTENANCE REGISTER OPERATION
          LPN    1S2+1S3
          LMN    1S2+1S3
          NJN    MRW1        IF NOT ENOUGH PARAMETERS
          WRITMR MRBF
          AOML   MRWC        INCREMENT MR WRITE COUNTER
          LDC    LPNI+77     SET ALL MASKS
          STM    DMRA
          LDC    MRPE
          RJM    DMR         DISPLAY REGISTER
          LJM    CMDF        RETURN

 MRW1     LJM    CMDE        PROCESS ERROR
 RFP      SPACE  4,10
**        RFP - DISPLAY REGISTER FILE.
*
*         USES   M1, M2, M3, RN, T1, W1.
*
*         CALLS  AMR, CMI, EOL, PRN.


 RFP      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDM    CPUT        GET CPU TYPE
          LPN    7           CLEAR NUMBER OF CPUS
          STD    T1
          LMN    4
          NJN    RFP1        IF NOT A THETA
          LJM    CMDE        ILLEGAL COMMAND ON A THETA

 RFP1     LDM    ELPR        GET PROCESSOR CODE
          SCN    17
          ADM    RFPT,T1
          STD    M3
          LDM    RFPB        GET WORD COUNT
          STD    M1
          LDM    RFPA        GET FIRST ADDRESS TO READ
          STD    M2
 RFP2     LDD    M2
          STD    RN
          STM    NBUF
          LDN    MRDT+2      PRINT TWO DIGIT ADDRESS
          RJM    PRN
          LDC    MRRD        READ CODE
          ADD    M3          ADD IN TYPE CODE
          RJM    AMR
          IAM    NBUF,MR     READ REGISTER
          LDN    10          MUST READ A BLOCK OF 400(8) BYTES
          STD    W1
 RFP3     LDN    37
          IAM    BUF,MR      SKIP UNWANTED DATA
          SOD    W1
          NJN    RFP3        IF NOT DONE SKIPPING DATA
          RJM    CMI         RELEASE INTERLOCK ON MAINTENANCE CHANNEL
          LDN    MRDT+20
          RJM    PRN         PRINT REGISTER VALUE
          RJM    EOL
          AOD    M2
          SOD    M1          DECREMENT COUNT
          NJN    RFP2        IF NOT DONE YET
          LDC    RFP+MRNT    SET REENTRY
          LJM    CMDR        RETURN

 RFPT     DATA   1           CODE FOR AN S1CR
          DATA   1           CODE FOR AN S1
          DATA   5           CODE FOR AN S2
          DATA   7           CODE FOR AN S3
 DMR      SPACE  4,10
**        DMR - DUMP MAINTENANCE REGISTER.
*
*         ENTRY  (A) = LIST OF REGISTERS TO DISPLAY.
*
*         USES   M1, M2, M3.
*
*         CALLS  DTO, EOL, PRN, RMR, SMO, WAS.
*
*         MACROS PRINT, READMR.


 DMR      SUBR               ENTRY/EXIT
          STD    M1
          RJM    SMO         SET UP MAINTENANCE REGISTER OPERATION
 DMR1     LDI    M1
          STD    RN          SET REGISTER NUMBER
          STM    NBUF        SAVE REGISTER NUMBER
          ADC    -400
          PJN    DMRX        IF END OF LIST
          AOD    M1          GET FLAG MASK FOR REGISTER
          LDI    M1
 DMRA     LPN    1           ASSUME S1CR
*         LPN    1           (I1/I1CR/I2)
*         LPN    2           (I4)
*         LPN    1           (S1CR)
*         LPN    2           (S1)
*         LPN    4           (S2)
*         LPN    10          (S3)
*         LPN    20          (THETA)
*         LPN    77          (SPECIFIC REGISTER(S))
          NJN    DMR2        IF MATCH PROCESS REGISTER
 DMR1.5   LDN    2           ADVANCE TO NEXT ENTRY
          RAD    M1          INCREMENT TO NEXT REGISTER
          UJN    DMR1        PROCESS IT

 DMR2     LDN    MRDT+2
          RJM    PRN         PRINT 2 HEX DIGIT REGISTER NUMBER
          LDD    M2          SET CONNECT CODE
          STD    EC
          READMR NBUF
          RJM    DTO         TEST FOR DEADMAN TIMEOUT
          LDN    MRDT+20
          RJM    PRN         DISPLAY 64 BIT REGISTER
 DMR3     LDI    M1          TEST FOR END OF LINE
 DMRB     LPN    **          ASSUME S1CR THROUGH S2
*         LPN    0           (NORMAL)
*         LPN    40          (ALLOW TWO REGISTERS PER LINE)
          ZJN    DMR4        IF NO-EOL BIT IS SET
          PRINT  DMRM        SPACE OVER A LITTLE
          UJN    DMR1.5      GO TO NEXT REGISTER

 DMR4     AOD    M1          PRINT REGISTER NAME
          LDI    M1
          LMC    CRLF        SET TO PRINT EOL
          RJM    WAS
          AOD    M1          INCREMENT TO NEXT REGISTER
          LJM    DMR1        PROCESS IT

 DMRM     ASCII  (        )
 SMO      SPACE  4,10
**        SMO - SET UP MAINTENANCE REGISTER OPERATION.
*
*         ENTRY  (A) = ADDRESS OF MR TABLE.
*                (PC) = PARAMETER COUNT.
*
*         EXIT   (A) = PARAMETER COUNT.
*                (EC) = (M2) = CONNECT CODE.
*                (RN) = (M3) = REGISTER NUMBER.


 SMO      SUBR               ENTRY/EXIT
          STD    T2
          LDM    -1,T2
          STM    MRPE-1
          STD    T2
          LDI    T2          SET ELEMENT CONNECT CODE
          STD    EC
          STD    M2
          LDM    MRPE        FETCH REGISTER NUMBER
          STD    RN
          STD    M3
          LDDL   PC          RETURN WITH (A) = PARAMETER COUNT
          UJN    SMOX        RETURN
          EJECT
**        MAINTENANCE REGISTER TABLES.


          CON    ELIO        IOU PORT CODE ADDRESS
 MRIL     BSS    0           IOU MAINTENANCE REGISTERS
 00       MR     (SS),(1,0)               BIT         MEANING
 12       MR     (OI),(5,1,0)             0           DISPLAY I1 AND I2
 16       MR     (OI),(1)                 1           DISPLAY ON I41
 18       MR     (MASK REG),(5,1,0)       5           DISPLAY NEXT REG.
 1C       MR     (MASK REG),(1)                       ON THIS SAME LINE
 21       MR     (OS BOUNDS),(5,1,0)
 25       MR     (OS BOUNDS),(1)
 30       MR     (EC),(5,1,0)
 34       MR     (EC),(1)
 40       MR     (STATUS),(5,1,0)
 44       MR     (STATUS),(1)
 80       MR     (FS1),(5,1,0)
 84       MR     (FS1),(1)
 81       MR     (FS2),(5,1,0)
 85       MR     (FS2),(1)
 A0       MR     (TM),(5,1,0)
 A4       MR     (TM),(1)
          CON    7777

          CON    ELCM        MEMORY PORT CODE ADDRESS
 MRML     BSS    0           MEMORY MAINTENANCE REGISTERS
 00       MR     (SS),(4,3,2,1,0)         BIT         MEANING
 12       MR     (OI),(4,3,2,1,0)         0           DISPLAY FOR S1CR
 20       MR     (EC),(4,3,2,1,0)         1           DISPLAY FOR S1
 21       MR     (MEM BOUNDS),(4,3,2,1,0) 2           DISPLAY FOR S2
 A0       MR     (CEL),(3,2,1,0)          3           DISPLAY FOR S3
 A0       MR     (CEL0),(4)               4           DISPLAY FOR THETA
 A1       MR     (CEL1),(4)
 A2       MR     (CEL2),(4)
 A3       MR     (CEL3),(4)
 A4       MR     (UEL1),(3,2,1,0)
 A4       MR     (UEL0),(4)
 A5       MR     (UEL1),(4)
 A6       MR     (UEL2),(4)
 A7       MR     (UEL3),(4)
 A8       MR     (UEL2),(3,2,1,0)
          CON    7777
          EJECT
          CON    ELPR        PROCESSOR PORT CODE ADDRESS
 MRPL     BSS    0           PROCESSOR MAINTENANCE REGISTERS
 00       MR     (SS),(4,3,2,1,0)         BIT         MEANING
 30       MR     (DEC),(4,3,2,1,0)        0           DISPLAY FOR S1CR
 31       MR     (S),(4,3,2,1,0)          1           DISPLAY FOR S1
 40       MR     (P),(4,3,2,1,0)          2           DISPLAY FOR S2
 41       MR     (MPS),(4,3,2,1,0)        3           DISPLAY FOR S3
 42       MR     (MCR),(4,3,2,1,0)        4           DISPLAY FOR THETA
 43       MR     (UCR),(4,3,2,1,0)        5           DISPLAY NEXT REG.
 48       MR     (PTA),(4,3,2,1,0)                    ON SAME LINE
 49       MR     (PTL),(4,3,2,1,0)
 4A       MR     (PSM),(4,3,2,1,0)
 51       MR     (MDW),(4,3,2,1,0)
 61       MR     (JPS),(4,3,2,1,0)
 62       MR     (SIT),(4,3,2,1,0)
 80       MR     (PFS),(5,4,3,2,1,0)
 81       MR     (PFS),(4,3,2,0)
 82       MR     (PFS),(5,4,3)
 83       MR     (PFS),(4,3)
 84       MR     (PFS),(5,4,3)
 85       MR     (PFS),(4,3)
 86       MR     (PFS),(5,4,3)
 87       MR     (PFS),(4,3)
 88       MR     (PFS),(5,4,3)
 89       MR     (PFS),(4,3)
 8A       MR     (PFS),(5,4)
 8B       MR     (PFS),(4)
 8C       MR     (PFS),(5,4)
 8D       MR     (PFS),(4)
 8E       MR     (PFS),(5,4)
 8F       MR     (PFS),(4)
 91       MR     (CSEL),(0)
 92       MR     (CCEL),(2)
 93       MR     (MCEL),(2,1,0)
          CON    7777
 BUF      SPACE  4,10
 BUF      EQU    *

          ERRNG  7037B-BUF   MUST SAVE 40 WORDS FOR THIS BUFFER

          QUAL   *
          SPACE  4,10
 MRML     EQUAL
 MRIL     EQUAL
 MRPL     EQUAL

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD PP/CPU DISPLAY/CONTROL ROUTINES)
 DPR      SPACE  4,10
**        DPR - DISPLAY PP REGISTERS.
*
*         USES   M1, M2, M3, PP, T1.
*
*         CALLS  DPP, DTO, EOL, WAS.
*
*         MACROS PRINT, READMR.


 DPR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          READMR MRBF,ELIO,OIMR  GET BARRELS INSTALLED
          RJM    DTO         TEST FOR DEADMAN TIMEOUT
          LDM    MRBF+2
          STD    M1          SAVE BARREL MASK
          LDM    DPRB
          STD    T1
          LDML   DPRT,T1     GET PROPER MESSAGE
          RJM    WAS         PRINT WHICH REGISTERS ARE DISPLAYED
          LDC    ISTR
          STD    M2          SAVE NIO STATUS REGISTER
          LDN    0
          STD    PP          START WITH PP ZERO
          LDN    1
          STD    M3          START WITH BARREL ZERO
 DPR5     LDD    M1
          LPDL   M3          TEST BARREL IS INSTALLED
          ZJN    DPR10       IF BARREL NOT PRESENT
          LDN    DEMR        GET NIO *EC* REGISTER NUMBER
          RJM    DPP         DISPLAY PP-S FROM THIS BARREL
          RJM    EOL         OUTPUT END OF LINE
          LDD    M3          UPDATE BARREL INDICATOR
          RAD    M3
          LMN    20          TEST FOR LAST BARREL
          NJN    DPR5        IF ANOTHER BARREL POSSIBLE
 DPR10    LDM    IOUM        TEST FOR I4
          LMC    0#43
          ZJN    DPR15       IF MODEL 43
          LMN    0#44&0#43
          ZJN    DPR15       IF MODEL 44
          LDM    IOUM
          LMC    0#42
          ZJN    DPR17       IF MODEL 42
          SHN    -4
          ZJP    DPR20       IF AN I4
 DPR15    LJM    DPR25       NOT AN I4

 DPR17    READMR MRBF,ELIO,OIMR  GET BARRELS INSTALLED
          LDM    MRBF+7      GET CIO BARREL INSTALLED
          LPC    0#80
          ZJN    DPR15       IF NO CIO INSTALLED
          LDC    ISTR
          STD    M2          SAVE NIO STATUS REGISTER
          LDN    1
          STD    M3          START WITH BARREL ZERO
          STD    M1          BARREL 0
          LDN    30B
          STD    PP          START WITH PP 0 BIASED BY 30B
          PRINT  DPRC+CRLF   LABEL AS CIO PP
          LDN    DEMR        GET NIO *EC* REGISTER NUMBER
          RJM    DPP         DISPLAY PP-S FROM THIS BARREL
          RJM    EOL         OUTPUT END OF LINE
          LJM    DPR25       GO DISPLAY BARREL

 DPR20    READMR MRBF,ELIO,OIMR+4  GET CIO BARRELS INSTALLED
          RJM    DTO         TEST FOR DEADMAN TIMEOUT
          LDM    MRBF+2
          STD    M1          SAVE BARREL MASK
          LPN    1
          ZJN    DPR25       IF NO CIO BARRELS
          LDC    ISTR+4
          STD    M2          SAVE CIO STATUS REGISTER
          LDN    0
          STD    PP          START WITH PP ZERO
          LDN    DEMR+4      GET CIO *EC* REGISTER NUMBER
          RJM    DPP         DISPLAY THIS BARREL
          PRINT  DPRC+CRLF   LABEL AS CIO PP
          LDD    M1
          LPN    2
          ZJN    DPR25       IF BARREL ONE NOT INSTALLED
          LDN    DEMR+4      GET CIO *EC* REGISTER NUMBER
          RJM    DPP         DISPLAY THIS BARREL
          PRINT  DPRC+CRLF   LABEL AS CIO PP
 DPR25    LDC    DPR         SET REFRESH ADDRESS
          LJM    CMDR        RETURN

 DPRT     CON    DPRP+CRLF
          CON    DPRQ+CRLF
          CON    DPRK+CRLF
          CON    DPRA+CRLF

 DPRP     ASCII  (P REG)
 DPRQ     ASCII  (Q REG)
 DPRK     ASCII  (K REG)
 DPRA     ASCII  (A REG)
 DPRC     ASCII  ( CIO)
 DPRW     CON    0

 HLT      SPACE  4,10
**        HLT - HALT PROCESSOR.
*
*         MACROS PRINT.


 HLT      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          FUNCMR ELPR,MRHP
          PRINT  HLTA+CRLF   *CPU HALTED*
          LJM    CMDF        RETURN

 HLTA     ASCII  (CPU HALTED)
 IPR      SPACE  4,10
**        IPR - IDLE PP.
*
*         USES   T0.
*
*         CALLS  IDP.
*
*         MACROS PRINT.


 IPR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          ZJN    IPR2        IF NO PP NUMBER GIVEN
          LDM    PPCT        GET TYPE OF PP
          ZJN    IPR1        IF NIO PP
          LDM    IOUM        TEST FOR I4
          SHN    -4
          LMN    4
          NJN    IPR2        IF NOT
          LDC    0#100       SET CIO FLAG
 IPR1     ADD    PP          ADD IN PP NUMBER
          STD    T0          SAVE NUMBER
          SBM    PPNO        TEST IF SCI PP
          ZJN    IPR2        ILLEGAL IF SCI PP
          LDD    T0          RETRIEVE NUMBER
          RJM    IDP         IDLE PP
          PRINT  IPRA+CRLF   *PP HALTED*
          LJM    CMDF        RETURN

 IPR2     LJM    CMDE        RETURN *ILL*

 IPRA     ASCII  (PP HALTED)
 RPP      SPACE  4,10
**        RPP - RESTART PP AT ADDRESS.
*
*         USES   PP, T1.
*
*         CALLS  DLP, SCF.


 RPP      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDN    MX          SET TO DEADSTART ON CHANNEL 15
          STD    T1
          LDD    PC          GET PARAMETER COUNT
          LPN    1S2
          ZJN    RPP2        IF NO ADDRESS GIVEN
          LDM    PPCT        GET TYPE OF PP
          ZJN    RPP1        IF NIO PP
          LDM    IOUM        TEST FOR I4
          SHN    -4
          LMN    4
          NJN    RPP2        IF NOT
          LDC    0#100       SET CIO PP FLAG
 RPP1     RAD    PP          MERGE PP NUMBER AND CIO FLAG
          LDK    MX          ACQUIRE CHANNEL 15 INTERLOCK
          RJM    SCF
          LDD    PP
          RJM    DLP         DEADSTART LOAD PP
          LDM    RPPA        ADDRESS FROM COMMAND
          SBN    1
          OAN    MX          OUTPUT TO CHANNEL MX
          DCN    MX+40
          CCF    *,MX        RELEASE INTERLOCK
          PRINT  RPPB+CRLF   *PP STARTED*
          LJM    CMDF        RETURN

 RPP2     LJM    CMDE        PROCESS ERROR

*RPPA     EQU    7575        (GLOBAL)
 RPPB     ASCII  (PP STARTED)
 SMC      SPACE  4,10
**        SMC - START MICRO CODE.
*
*         EXIT   PROCESSOR HAS BEEN -
*                  MASTER CLEARED.
*                  S-REGISTER WRITTEN.
*                  STARTED.
*
*         MACROS FUNCMR, PRINT, WRITMR.


 SMC      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDD    PC          GET PARAMETER COUNT
          ZJP    SMC1        IF NONE JUST RESTART PROCESSOR
          LDML   VAL1+2      GET STARTING ADDRESS
          SHN    12D
          ADML   VAL1+3
          ZJN    SMC1        IF ADDRESS = 0
          STM    SMCA+7
          SHN    -8D
          STM    SMCA+6
          FUNCMR ELPR,MRMC   MASTER CLEAR PROCESSOR
          WRITMR SMCA,ELPR,PCSA
 SMC1     FUNCMR ELPR,MRSP   START PROCESSOR
          PRINT  SMCB+CRLF   *CPU STARTED*
          LJM    CMDF        RETURN

 SMCA     BSSZ   10B
 SMCB     ASCII  (CPU STARTED)
 DPP      SPACE  4,10
**        DPP - DISPLAY PP REGISTERS.
*
*         ENTRY  (PP) = FIRST LOGICAL PP NUMBER TO DISPLAY.
*                (M2) = STATUS REGISTER TO READ.
*                (A) = *EC* REGISTER TO FUNCTION.
*
*         USES   PP, RN, T6, T7.
*
*         CALLS  PRN.
*
*         MACROS LOCKMR, READMR, WRITMR.


 DPP      SUBR               ENTRY/EXIT
          STD    T6          SAVE *EC* REGISTER NUMBER
          STD    RN          SET *EC* REGISTER TO FUNCTION
          READMR MRBF,ELIO   SAVE CURRENT *EC* REGISTER
          READMR RDATA       GET CURRENT *EC* REGISTER
          LDN    5           SET NUMBER OF PP-S TO DISPLAY PER LINE
          STD    T7
          LDM    DPRB        SET REGISTER (A, K, P, Q) TO DISPLAY
          STM    RDATA+6
          LDD    PP          CHECK PP NUMBER
          SBN    11+1
          NJN    DPP1        IF NOT START OF BARREL 2
          LDN    20          RESET PP NUMBER TO PP20
          STD    PP
 DPP1     LDM    RDATA+4     PRESERVE 8K AND SYSTEM INITIALIZED BITS
          SCN    77
          LMD    PP          SELECT PP TO STATUS
          LMN    40          SET AUTO BIT FOR AN I2
          STM    RDATA+4
          LDD    T6          SET *EC* REGISTER
          STD    RN
          LOCKMR SET
          WRITMR RDATA       FUNCTION PROPER *EC* REGISTER
          LDD    M2          SET STATUS REGISTER NUMBER
          STD    RN
          READMR NBUF
          LOCKMR CLEAR
          LDM    NBUF+4      EXTRACT ADDRESS FROM REGISTER
*         LPN    3           CODE ASSUMES UPPER BITS ARE ZERO
          SHN    10
          LMM    NBUF+5
          SHN    10
          LMM    NBUF+6
          SHN    14
          STM    NBUF        SAVE UPPER 12 BITS
          SHN    14
          STM    NBUF+1      SAVE LOWER 6 BITS
          LDC    6+OMDT      DISPLAY 6-DIGIT OCTAL NUMBER
          RJM    PRN
          AOD    PP          ADVANCE PP NUMBER
          SOD    T7          DECREMENT COUNTER
          NJP    DPP1        IF MORE PP-S TO DISPLAY ON THIS LINE
          LDD    T6          SET *EC* REGISTER TO RESTORE
          STD    RN
          WRITMR MRBF        RESTORE ENVIRONMENT CONTROL REGISTER
          LJM    DPPX        RETURN

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD CONDITION REGS AND CONTROL STORE ROUTINES)
 DKR      SPACE  4,10
**        DKR - DISPLAY CONTROL STORE (128 BITS PER WORD).
*
*         USES   EC, M1, M2, M3, RN.
*
*         CALLS  EOL, PRN, PCR, TPS.
*
*         MACROS READMR.


 DKR      ROUTINE

          LDN    1           READ OPERATION
          STM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          STD    M1          INITIALIZE POINTER
          RJM    TPS         TEST PROCESSOR STATE
          RJM    PCR         PREPARE CONTROL STORE READ
 DKR1     LDD    M2          SET CONNECT CODE
          STD    EC
          LDDL   M3          GET CONTROL STORE ADDRESS
          STDL   RN
          STML   NBUF        PRINT ADDRESS
          LDC    HMDT+4
          RJM    PRN
          READMR NBUF,,,20   READ ONE WORD OF CONTROL STORE
          LDN    MRDT+40
          RJM    PRN         PRINT CONTENTS
          RJM    EOL         PRINT CR-LF
          LDN    2           ADVANCE ADDRESS BY TWO
          AODL   M3
          AOD    M1          INCREMENT COUNTER
          LDM    RFPB        GET WORD COUNT
          SBD    M1          SUBTRACT COUNTER
          PJN    DKR1        IF NOT DONE
          LJM    CMDF        RETURN
 DSR      SPACE  4,10
**        DSR - DISPLAY CONTROL STORE (64 BITS PER WORD).
*
*         USES   EC, M1, M2, M3, RN.
*
*         CALLS  EOL, PRN, PCR, TPS.
*
*         MACROS READMR.


 DSR      ROUTINE

          LDN    1           READ OPERATION
          STD    M1          INITIALIZE POINTER
          STM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    TPS         TEST PROCESSOR STATE
          RJM    PCR         PREPARE CONTROL STORE READ
 DSR1     LDD    M2          SET CONNECT CODE
          STD    EC
          LDDL   M3          GET CONTROL STORE ADDRESS
          STDL   RN
          STML   NBUF        PRINT ADDRESS
          LDC    HMDT+4
          RJM    PRN
          READMR NBUF,,,10   READ ONE WORD OF CONTROL STORE
          LDN    MRDT+20
          RJM    PRN         PRINT CONTENTS
          RJM    EOL         PRINT CR-LF
          AODL   M3          ADVANCE ADDRESS
          AOD    M1          ADVANCE COUNTER
          LDM    RFPB        GET WORD COUNT
          SBD    M1          SUBTRACT COUNTER
          PJN    DSR1        IF NOT DONE
          LJM    CMDF        RETURN
 EKR      SPACE  4,10
**        EKR - ENTER HEX BYTE MEMORY.
*
*         USES   RN, T7.
*
*         CALLS  DNV, EOL, PRN, PCR, TPS.
*
*         MACROS READMR, WRITMR.


 EKR      ROUTINE

          LDN    0           WRITE OPERATION
          STD    T7          INITIALIZE POINTER
          RJM    TPS         TEST PROCESSOR STATE
          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          NJN    EKR1        IF ADDRESS SPECIFIED
          LJM    CMDE        SET ERROR

 EKR1     RJM    PCR         PREPARE CONTROL STORE READ
          READMR EBUF,,,16D  READ ONE WORD OF CONTROL STORE
 EKR2     LDN    1+MRNT
          RJM    DNV         DECODE ONE BYTE
          ZJN    EKR3        IF NO MORE TO WRITE
          LDM    ABUF
          STM    EBUF,T7
          AOD    T7
          SBN    16D
          MJN    EKR2        IF NOT DONE WITH WORD
 EKR3     WRITMR EBUF,,,16D  REWRITE WORD
          READMR NBUF,,,16D  READ WORD BACK
          LDN    MRDT+40
          RJM    PRN         PRINT CONTENTS
          RJM    EOL         PRINT CR-LF
          LJM    CMDF        RETURN
 ESR      SPACE  4,10
**        ESR - ENTER HEX BYTE MEMORY.
*
*         USES   RN, T7.
*
*         CALLS  DNV, EOL, PRN, PCR, TPS.
*
*         MACROS READMR, WRITMR.


 ESR      ROUTINE

          LDN    0           WRITE OPERATION
          STD    T7          INITIALIZE POINTER
          RJM    TPS         TEST PROCESSOR STATE
          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          NJN    ESR1        IF ADDRESS SPECIFIED
          LJM    CMDE        SET ERROR

 ESR1     RJM    PCR         PREPARE CONTROL STORE READ
          READMR EBUF,,,8D   READ ONE WORD OF CONTROL STORE
 ESR2     LDN    1+MRNT
          RJM    DNV         DECODE ONE BYTE
          ZJN    ESR3        IF NO MORE TO WRITE
          LDM    ABUF
          STM    EBUF,T7
          AOD    T7
          SBN    8D
          MJN    ESR2        IF NOT DONE WITH WORD
 ESR3     WRITMR EBUF,,,8D   REWRITE WORD
          READMR NBUF,,,8D   READ WORD BACK
          LDN    MRDT+20
          RJM    PRN         PRINT CONTENTS
          RJM    EOL         PRINT CR-LF
          LJM    CMDF        RETURN
 MCR/UCR  SPACE  4,10
**        MCR - DISPLAY DECODED MCR BITS.
**        UCR - DISPLAY DECODED UCR BITS.
*
*         USES   M1.
*
*         CALLS  TBR.
*
*         MACROS READMR.


 MCR      ROUTINE

          LDC    MCRB        SET MCR BIT LIST
          UJN    UCR1        DECODE MCR BITS

 UCR      ROUTINE

          LDC    UCRB+10000  SET UCR BIT LIST AND UCR FLAG
          ERRNZ  PUCR-PMCR-1 CODE ASSUMES *PUCR* = *PMCR* + 1
 UCR1     STD    M1
          SHN    -14
          ADC    PMCR        ADD MCR REGISTER NUMBER
          STD    RN
          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          NJN    UCR2        IF PARAMETER 1 SPECIFIED
          READMR NBUF,ELPR   READ MCR/UCR
          LDM    NBUF+6      PACK FLAG BUFFER
          SHN    10
          ADM    NBUF+7
          STML   NBUF        SAVE MCR/UCR VALUE
 UCR2     RJM    TBR         TRANSLATE BIT REGISTER
          LJM    CMDF        COMPLETE COMMAND


 UCRB     CON    =C*UCR = *
          LOC    0
          CON    =C*PRIV FAULT*
          CON    =C*UNIMP INST*
          CON    =C*FREE FLAG*
          CON    =C*PIT*
          CON    =C*I-RING POP*
          CON    =C*CRIT F FLG*
          CON    =C*KEYPT*
          CON    =C*DIVIDE FLT*
          CON    =C*DEBUG*
          CON    =C*A-OVL*
          CON    =C*E-OVL*
          CON    =C*E-UND*
          CON    =C*FP LOSS*
          CON    =C*FP INDEF*
          CON    =C*ARITH LOSS*
          CON    =C*BAD BDP*
          LOC    *O

 MCRB     CON    =C*MCR = *
          LOC    0
          CON    =C*DUE*
          CON    0
          CON    =C*SHRT WARN*
          CON    =C*I-SPEC*
          CON    =C*A-SPEC*
          CON    =C*170 XJ*
          CON    =C*ACCESS FLT*
          CON    =C*E-SPEC*
          CON    =C*EXT INT*
          CON    =C*PAGE FAULT*
          CON    =C*180 XJ*
          CON    =C*SIT*
          CON    =C*INV SEG/RN0*
          CON    =C*CALL/RTN FLT*
          CON    =C*SOFT ERROR*
          CON    =C*TRAP EXCPT*
          LOC    *O
 PCR      SPACE  4,10
**        PCR - PREPARE CONTROL STORE READ.
*
*         ENTRY  (VAL1+2 - VAL1+3) = STARTING ADDRESS.
*                (EC) = CONNECT CODE.
*                (RFPC) = TYPE CODE.
*
*         EXIT   (EC) = (M2) = MODIFIED CONNECT CODE.
*                (RN) = (M3) = ADDRESS.


 PCR      SUBR               ENTRY/EXIT
          LDM    VAL1+2      GET STARTING ADDRESS
          SHN    14
          ADM    VAL1+3
          STDL   RN
          STDL   M3
          LDD    EC          GET CONNECT CODE BACK
          SCN    0#F         CLEAR TYPE CODE
          ADM    RFPC        ADD IN TYPE CODE FOR CONTROL STORE
          STD    EC
          STD    M2
          UJN    PCRX        RETURN
 TBR      SPACE  4,10
**        TBR - TRANSLATE BIT REGISTER.
*
*         ENTRY  (M1) = BIT DEFINITION TEXT TABLE.
*                (NBUF) = BITS TO ANALYZE.
*
*         USES   M1, M2.
*
*         CALLS  EOL, WAS.
*
*         MACROS PRINT.


 TBR1     PRINT  TBRM        TELL USER REGISTER IS CLEAR
 TBR2     RJM    EOL         COMPLETE LINE

 TBR      SUBR               ENTRY/EXIT
          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDI    M1          PRINT HEADER
          RJM    WAS         WRITE STRING
          LDML   NBUF        CHECK REGISTER CONTENTS
          ZJN    TBR1        IF NO ERRORS PRESENT
          STDL   M2
 TBR3     AOD    M1          ADVANCE TO NEXT MESSAGE
          LDDL   M2          CHECK NEXT BIT
          ZJN    TBR2        IF ALL ERRORS PROCESSED
          RADL   M2
          SHN    21-20
          PJN    TBR3        IF BIT NOT SET
          LDI    M1
          ZJN    TBR3        IF NO MESSAGE
          RJM    WAS         WRITE STRING
          LDN    1R,
          STIAO  BP          PUT CHARACTER IN OUTPUT QUEUE
          UJN    TBR3        CHECK NEXT BIT

 TBRM     ASCII  (CLEAR)
 TPS      SPACE  4,10
**        TPS - TEST PROCESSOR STATE.
*
*         EXIT   TO *CMDF* IF PROCESSOR RUNNING.
*                RETURN IF PROCESSOR HALTED.
*
*         USES   RN.
*
*         CALLS  RMR.
*
*         MACROS PRINT.


 TPS      SUBR               ENTRY/EXIT
          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDN    0
          STD    RN
          LDM    ELPR
          RJM    RMR         READ STATUS SUMMARY REGISTER
          SHN    21-3
          MJN    TPSX        IF PROCESSOR HALTED
          PRINT  TPSM        *CPU MUST be HALTED*
          PRINT  TPSN+CRLF   * to access Control Store*
          LJM    CMDF        RETURN

 TPSM     ASCII  (CPU MUST be HALTED)
 TPSN     ASCII  ( to access Control Store)

 EBUF     EQU    *           SAVE AREA FOR WRITING CONTROL STORE

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD VIRTUAL MEMORY COMMANDS)
 DMM      SPACE  4,10
**        DMM - DISPLAY PVA COMMAND.
*
*         USES   T1, T2, T3, WC.
*
*         CALLS  DAT, DPS, EOL, MSA, PRN, SPT.
*
*         MACROS PRINT.


 DMM      ROUTINE            DISPLAY VIRTUAL MEMORY

          LDD    PC          GET PARAMETER COUNT
          SHN    21-6
          PJN    DMM1        IF PAGE SIZE MASK NOT CHANGED
          RJM    DPS         DEFINE PAGE SIZE
 DMM1     AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDM    VAL3+1
          SHN    21-13
          PJN    DMM3        IF INCREMENT
          LMN    0#1F
 DMM3     SHN    21-6
          STDL   T1
          SHN    14-21
          LPC    10000
          ADM    VAL3+2
          SHN    3
          RAML   VMBA+2
          SHN    -20
          ADDL   T1
          RAML   VMBA+1
          LDN    0           CLEAR INCREMENT
          STM    VAL3
          STM    VAL3+1
          STM    VAL3+2
          LDM    VMBA+3      MAKE SYSTEM VIRTUAL ADDRESS
          RJM    MSA         BASED ON JPS
          NJN    DMM4        IF SEGMENT EXISTS
          PRINT  DMMM+CRLF   *SEGMENT MISSING*
          LJM    CMDF        EXIT WITH NO REFRESH

 DMM4     RJM    SPT         SEARCH PAGE TABLE
          STD    T3          SAVE RMA FOR *DC*, *DM* AND *DH* COMMANDS
          SRD    T1
          LDD    T2          LOWER 12 BITS OF R-REGISTER
          SHN    6
          ADD    T3          ADD A REGISTER OFFSET
          STM    VAL1+3      SAVE LOWER 12 BITS
          LPC    770000
          ADD    T1          ADD UPPER 10 BITS OF R-REGISTER
          SHN    6           SHIFT INTO PROPER ORDER
          STM    VAL1+2      SAVE MIDDLE 12 BITS OF ADDRESS
          SHN    -14
          STM    VAL1+1      SAVE UPPER 4 BITS OF ADDRESS
          LDM    VAL2
          SBN    20          LIMIT TO REPEAT OF 16
          MJN    DMM5        IF NUMBER IS <= 16
          LDN    20          RESET VAL2 TO MAX
          STM    VAL2
 DMM5     LDM    VAL2
          STD    WC          SET WORD COUNT
          LDM    VMBA
          STM    NBUF        SET SEGMENT NUMBER
          PRINT  DMMP        PRINT * SEGMENT *
          LDC    3+HPDT
          RJM    PRN         PRINT SEGMENT NUMBER
          RJM    EOL         PRINT END OF LINE
 DMM6     LDDL   MP+1
          STML   NBUF        SET BYTE OFFSET
          LDDL   MP+2
          SCN    7           ROUND BYTE ADDRESS DOWN
          STML   NBUF+1
          LDC    HMDT+8D
          RJM    PRN         PRINT BYTE OFFSET
          RJM    SPT         SEARCH PAGE TABLE
          ZJN    DMM8        IF PAGE MISSING
          CRML   NBUF,ON     READ ONE WORD
          LDC    16D+HBDT
          RJM    PRN         DISPLAY BYTES
          RJM    DAT         DISPLAY ASCII
          RJM    EOL
          LDN    10          INCREMENT TO NEXT WORD
          RADL   MP+2
          SHN    -20
          RADL   MP+1
          SOD    WC          DECREMENT WORD COUNT
          NJN    DMM6        IF MORE TO DISPLAY
 DMM7     LDC    DMM1+HXBT   REENTRY ADDRESS
          LJM    CMDR        RETURN

 DMM8     PRINT  DMMN+CRLF   *PAGE MISSING*
          UJN    DMM7        EXIT

 DMMM     ASCII  (SEGMENT MISSING)
 DMMN     ASCII  (PAGE MISSING)
 DMMP     ASCII  (* SEGMENT *)
 SEP      SPACE  4,10
**        SEP - SET CPU VALUE.
*
*         CALLS  FPC, PVC.
*
*         MACROS PRINT.


 SEP      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDM    SEPA        INSPECT PARAMETER VALUE
          ZJN    SEP2        IF CPU 0 SPECIFIED
          SBN    1
          NJN    SEP3        IF CPU GREATER THAN ONE SPECIFIED
          LDN    1
          RJM    FPC         FIND PROPER PORT CODE
          LMN    77
          ZJN    SEP3        IF CPU NOT FOUND
          PRINT  SEPM+CRLF   *CPU 1.*
 SEP1     RJM    PVC         PRESET VIRTUAL CONSTANTS
          LJM    CMDF        RETURN

 SEP2     RJM    FPC         FIND PROPER PORT CODE
          LMN    77
          ZJN    SEP3        IF NOT FOUND
          PRINT  SEPN+CRLF   *CPU 2.*
          UJN    SEP1        CONTINUE PROCESSING COMMAND

 SEP3     PRINT  SEPP+CRLF   *CPU # not found.*
          LDN    0
          STM    SEPA        RESET TO CPU 0
          UJN    SEP2        PROCESS ERROR

 SEPM     ASCII  (CPU 1.)
 SEPN     ASCII  (CPU 0.)
 SEPP     ASCII  (CPU # not found.)
 DPS      SPACE  4,10
**        DPS - DEFINE PAGE SIZE.
*
*         ENTRY  (PSMV) = CONTENTS OF PAGE SIZE MASK REGISTER.
*
*         EXIT   (PSMV) = PAGE SIZE MASK.
*                (SPTS) = SHIFT INSTRUCTION TO EXTRACT PAGE NUMBER.
*
*         USES   T2.


 DPS      SUBR               ENTRY/EXIT
          LDC    SHNI+100
          STM    SPTS        SET SHIFT INTO PAGE TABLE SEARCH
          LDM    PSMV
          LMC    0#7F
          STD    T2
          STM    PSMV        SET PAGE SIZE MASK
 DPS1     SOM    SPTS        ADD TO SHIFT COUNT
          LDD    T2
          SHN    21-0        REMOVE LOWEST BIT
          STD    T2
          NJN    DPS1        IF MORE BITS PRESENT
          UJN    DPSX        RETURN
 FPC      SPACE  4,10
**        FPC - FIND PROCESSOR PORT CODE.
*
*         ENTRY  (A) = CPU NUMBER.
*
*         EXIT   (A) = 77 IF PROCESSOR NOT FOUND.
*                (EC) = (ELPR) = PROCESSOR PORT CODE.
*
*         CALLS  FHE.


 FPC1     LDN    77          SET PROCESSOR NOT FOUND

 FPC      SUBR               ENTRY/EXIT
          SHN    14
          ADN    PROCID
          RJM    FHE         FIND PROCESSOR PORT CODE
          MJN    FPC1        IF NOT FOUND
          LDM    HBUF+CPRPC
          STM    ELPR        SAVE IT
          STD    EC
          LDM    HBUF+CPRE+EM  GET MODEL NUMBER
          UJN    FPCX        RETURN
 LBA      SPACE  4,10
**        LBA - LOAD BYTE ADDRESS.
*
*         ENTRY  (A) = POINTER TO BYTE ADDRESS.
*
*         EXIT   (A) = CM ADDRESS.
*                (M1 - M2) = R-REGISTER VALUE.
*                (M3) = OFFSET FROM R-REGISTER.


 LBA      SUBR               ENTRY/EXIT
          STD    M3
          LDI    M3          SET UPPER PART OF R-REGISTER
          LPN    37
          SHN    7
          STD    M2
          LDIL   M3          SET LOWER PART OF R-REGISTER
          SHN    -5
          LPC    0#3FF
          STD    M1
          LRD    M1
          LDML   1,M3
          SHN    -3
          STDL   M3          SET OFFSET
          LMC    RR          ACTIVATE R-REGISTER
          UJN    LBAX        RETURN
 LWA      SPACE  4,10
**        LWA - LOAD WORD ADDRESS.
*
*         ENTRY  (CM+2 - CM+3) = WORD ADDRESS.
*
*         EXIT   (A) = CM ADDRESS.
*                (CM - CM+1) = R-REGISTER VALUE.
*                (CM+3) = OFFSET FROM R-REGISTER.


 LWA      SUBR               ENTRY/EXIT
          LDD    CM+2        SET UPPER PART OF R-REGISTER
          LPN    3
          SHN    10D
          STD    CM+1
          LDD    CM+2        SET R-REGISTER BITS 12 - 18
          SHN    -2
          STD    CM
          LRD    CM
          LDDL   CM+3        SET OFFSET
          LMC    RR
          UJN    LWAX        RETURN
 MSA      SPACE  4,10
**        MSA - MAKE SYSTEM VIRTUAL ADDRESS.
*
*         ENTRY  (A) = ADDRESS OF EXCHANGE PACKAGE ADDRESS.
*                (VMBA - VMBA+2) = PROCESS VIRTUAL ADDRESS.
*
*         EXIT   (MP - MP+2) = SYSTEM VIRTUAL ADDRESS.
*                TO *CMDE* IF INVALID EXCHANGE PACKAGE ADDRESS.
*
*         USES   MP - MP+2, M3, T1 - T6, W0 - W3.
*
*         CALLS  LBA.


 MSA2     LJM    CMDE        RETURN INVALID COMMAND

 MSA3     LDN    0           FLAG INVALID/MISSING SEGMENT

 MSA      SUBR               ENTRY/EXIT

*         THE EXCHANGE PACKAGE ADDRESS MUST FIRST BE VALIDATED.  IF NOS/VE
*         IS NOT YET DEADSTARTED AND NO *SE* COMMAND HAS BEEN ENTERED, THEN
*         THE EXCHANGE PACKAGE ADDRESS WILL BE ALL ZEROS.  IF ON AN S0/S0E
*         AND THE CPU HAS NOT YET BEEN STARTED, THE EXCHANGE PACKAGE ADDRESS
*         FROM *SE* WILL BE ALL ONES, SINCE THE MPS/JPS ACCESS REQUIRES
*         MICROCODE ASSIST.

          STD    M3
          LDI    M3
          ADML   1,M3
          ZJN    MSA2        IF EXCHANGE PACKAGE ADDRESS = 0
          LDI    M3
          LMC    7777
          NJN    MSA1        IF NOT ALL ONES
          LDML   1,M3
          LMC    177777
          ZJN    MSA2        IF EXCHANGE PACKAGE ADDRESS IS ALL ONES
 MSA1     LDD    M3
          RJM    LBA         LOAD BYTE ADDRESS
          ADN    16D         SEGMENT TABLE LENGTH OFFSET
          CRDL   T1          GET SEGMENT TABLE LENGTH
          ADN    34D-16D     SEGMENT TABLE ADDRESS OFFSET
          CRDL   T2          GET SEGMENT TABLE ADDRESS
          ADN    1
          CRDL   T3
          LDDL   T1
          SBM    VMBA
          MJN    MSA3        IF NOT A VALID SEGMENT
          LDN    T2
          RJM    LBA         LOAD ADDRESS OF SEGMENT TABLE
          ADM    VMBA        ADD SEGMENT OF INTEREST
          CRDL   W0          FETCH ASID
          LDDL   W1
          ZJP    MSA3        IF NOT A VALID ASID
          STDL   MP          SAVE ASID
          LDML   VMBA+1      COPY REMAINDER OF PVA
          STDL   MP+1
          LDML   VMBA+2
          STDL   MP+2
          LDN    1
          LJM    MSAX        RETURN
 PVC      SPACE  4,10
**        PVC - PRESET VIRTUAL ADDRESS CONSTANTS.
*
*         ENTRY  NONE.
*
*         EXIT   (PTAV - PTAV+1) = PAGE TABLE ADDRESS.
*                (JPSV - JPSV+1) = JPS VALUE.
*                (MPSV - MPSV+1) = MPS VALUE.
*                (PSMV) = PAGE SIZE MASK.
*                (PTLV) = PAGE TABLE LENGTH MASK.
*
*         USES   T4, T5, RN.
*
*         CALLS  DPS, RMR.


 PVC      SUBR               ENTRY/EXIT
          LDN    PVCAL
          STD    T5
 PVC1     LDM    PVCA+1,T5
          STD    T4          SET DATA ADDRESS
          LDM    PVCA,T5     GET REGISTER NUMBER
          STD    RN
          LDM    ELPR
          RJM    RMR         READMR RDATA,ELPR
          LDM    RDATA+4     FORM 32 BIT VALUE
          SHN    10
          LMM    RDATA+5
          STIL   T4
          LDM    RDATA+6
          SHN    10
          LMM    RDATA+7
          STML   1,T4
          LCN    2
          RAD    T5
          MJN    PVC2        IF NO MORE REGISTERS TO READ
          UJN    PVC1        GO BACK FOR MORE

 PVC2     RJM    DPS         DEFINE PAGE SIZE
          LJM    PVCX        RETURN

 PVCA     BSS    0           TABLE OF REGISTERS
          LOC    0
          CON    S0PPTA,PTAV    PAGE TABLE ADDRESS
          CON    S0PJPS,JPSV    JPS EXCHANGE PACKAGE ADDRESS
          CON    S0PMPS,MPSV    MPS EXCHANGE PACKAGE ADDRESS
          CON    S0PPSM,PSMV-1  PAGE SIZE MASK
 PVCAL    CON    S0PPTL,PTLV-1  PAGE TABLE LENGTH
          LOC    *O
 SPT      SPACE  4,10
**        SPT - SEARCH PAGE TABLE.
*
*         ENTRY  (MP - MP+2) = SYSTEM VIRTUAL ADDRESS.
*
*         EXIT   (A) = ADDRESS OF WORD.
*                    = 0 IF NOT FOUND.
*
*         USES   T1, T2, T3, T4, T5, T6, T7, CM - CM+3, W0 - W3.
*
*         CALLS  LWA.


 SPT      SUBR               ENTRY/EXIT

*         MODIFY SHIFT INSTRUCTIONS ACCORDING TO PAGE SIZE FUNCTION.

          LDM    SPTS        GET SEARCH PAGE TABLE SHIFT
          STM    SPTA
          STM    SPTC
          STM    SPTH
          ADN    10
          LPC    1077
          STM    SPTB
          LDM    SPTS
          LMC    77          COMPLEMENT SHIFT
          STM    SPTF
          STM    SPTI
          LDM    SPTS
          SBN    12
          STM    SPTG

*         FORM THE PAGE NUMBER FROM THE SYSTEM VIRTUAL ADDRESS.  THE
*         BIT POSITION OF THE 16-BIT PAGE NUMBER IS A FUNCTION OF THE
*         PAGE SIZE AS INDICATED BY THE PAGE SIZE MASK.

          LDDL   MP+2        PAGE OFFSET
          SHN    -9D
 SPTA     SHN    -0          (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          STDL   T2
          LDM    PSMV        SAVE CORRECT NUMBER OF BITS
          SHN    9D
          LMC    777
          LPDL   MP+1        PAGE NUMBER
 SPTB     SHN    0           (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          RADL   T2          PAGE NUMBER (LOWER)
          LDDL   MP+1
          SHN    -9D
 SPTC     SHN    -0          (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          STDL   T1          PAGE NUMBER (UPPER)

*         FORM THE HASH INDEX.  EXCLUSIVE OR THE 16-BIT ASID WITH THE
*         RIGHTMOST 16 BITS OF THE PAGE NUMBER.  CONCATENATE A ZERO ON THE
*         RIGHT.  THIS IS THE RIGHTMOST 17 BITS OF THE HASH INDEX (WORD
*         BOUNDARY).  THE REMAINING LEFT 6 BITS ARE FORMED BY AN EXCLUSIVE
*         OR OF THE LEFTMOST 6 BITS OF THE ASID WITH THE RIGHTMOST 6 BITS OF
*         THE PAGE NUMBER.

          LDDL   T2
          LMDL   MP          EXCLUSIVE OR WITH ASID
          SHN    1           FORM WORD ADDRESS
          STDL   T4          HASH INDEX (LOWER)
          SHN    -20
          STDL   T3          SAVE LEFTMOST BIT OF RIGHT 17 BITS
          LDDL   MP
          SHN    -12
          STM    SPTD+1      FORM INSTRUCTION
          LDDL   T2
          LPN    77
 SPTD     LMC    0
          SHN    1
          RAD    T3          HASH INDEX (UPPER)

*         FORM THE PAGE TABLE LENGTH MASK.

          LDML   PTLV        PAGE TABLE LENGTH
          LPC    177         SAVE 7 BITS
          SHN    9D
          LMC    777
          STDL   T6          PAGE TABLE LENGTH MASK (LOWER)
          LDML   PTLV
          SHN    -7
          STD    T5          PAGE TABLE LENGTH MASK (UPPER)

*         MODIFY THE PAGE NUMBER FROM THE SYSTEM VIRTUAL ADDRESS FOR
*         COMPARISON WITH THE PAGE TABLE ENTRY.  IN THE PAGE TABLE ENTRY,
*         THE PAGE NUMBER IS ZERO FILLED ON THE RIGHT IF THE PAGE SIZE IS
*         LARGER THAN 512 BYTES (I.E. THE PAGE NUMBER IS LESS THAN 22 BITS).

          LDDL   T1
 SPTF     SHN    0           (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          STDL   T1
          LDDL   T2
 SPTG     SHN    -0          (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          RAD    T1          PAGE NUMBER (UPPER) SHIFTED FOR PAGE SIZE FUNCTION
          LDC    0#FFFF
 SPTH     SHN    -0          (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          LPDL   T2
 SPTI     SHN    0           (MODIFIED ACCORDING TO PAGE SIZE FUNCTION)
          STDL   T2          PAGE NUMBER (LOWER) SHIFTED FOR PAGE SIZE FUNCTION

*         FORM A WORD ADDRESS FOR THE PAGE TABLE ADDRESS.

          LDML   PTAV+1
          SHN    -3
          STML   SPTP+1
          LDML   PTAV
          LPN    7
          SHN    13D
          RAML   SPTP+1
          LDML   PTAV
          SHN    -3
          STML   SPTP

*         SEARCH THE PAGE TABLE FOR AN ENTRY WHOSE ASID AND PAGE NUMBER MATCH
*         THAT OF THE SYSTEM VIRTUAL ADDRESS.  UP TO 32 ENTRIES ARE TESTED.
*         THE 32 ENTRIES ARE THOSE CONTIGUOUS, VALID OR INVALID, WHICH START
*         AT THE LOCATION IN THE SYSTEM PAGE TABLE INDICATED BY THE HASH INDEX
*         AND INCLUDE THE NEXT 31 HIGHER ADDRESS WORDS.

          LDN    32D
          STD    T7          SET SEARCH LIMIT
 SPT1     LDDL   T4          HASH INDEX (LOWER)
          LPDL   T6          PAGE TABLE LENGTH MASK (LOWER)
          STDL   CM+1
          LDDL   T3          HASH INDEX (UPPER)
          LPDL   T5          PAGE TABLE LENGTH MASK (UPPER)
          STDL   CM
          LDML   SPTP+1
          ADDL   CM+1        ADD NEW VALUE TO PAGE TABLE ADDRESS
          STDL   CM+3
          SHN    -20         SAVE POSSIBLE CARRY BIT
          STD    CM+2
          LDML   SPTP
          ADDL   CM
          RADL   CM+2        SYSTEM PAGE TABLE ADDRESS TO BEGIN SEARCH
          RJM    LWA         LOAD WORD ADDRESS OF PAGE TABLE
          CRDL   W0          PAGE TABLE ENTRY
          LDDL   W0
          SHN    21-17
          PJN    SPT2        IF INVALID PAGE
          SHN    2
          SCN    0#F
          STDL   W0          EXTRACT ASID
          LDDL   W1
          SHN    4-20
          RADL   W0          COMPLETE ASID
          LMDL   MP
          NJN    SPT2        IF NOT CORRECT ASID
          LDD    W1          EXTRACT SEGMENT/PAGE ID AND POSITION IT
          SHN    -6
          STD    W0          SEGMENT/PAGE ID (UPPER)
          LDDL   W1
          LPN    77
          SHN    12
          STDL   W1
          LDDL   W2
          SHN    -6
          RADL   W1          SEGMENT/PAGE ID (LOWER)
          LMDL   T2          COMPARE WITH PAGE NUMBER
          NJN    SPT2        IF NO MATCH (ON LOWER)
          LDDL   W0
          LMDL   T1
          ZJN    SPT3        IF MATCH (ON UPPER)
 SPT2     AODL   T4          INCREMENT PAGE TABLE HASH INDEX
          SHN    -20         SAVE POSSIBLE CARRY BIT
          RADL   T3
          SOD    T7          DECREMENT SEARCH COUNT
          ZJN    SPT4        IF NO MORE TO SEARCH
          LJM    SPT1        CONTINUE SEARCH

*         THE CORRECT PAGE TABLE ENTRY HAS BEEN FOUND.  CREATE THE REAL MEMORY
*         ADDRESS.

 SPT3     LDDL   MP+2        SAVE PAGE OFFSET
          SHN    -9D
          LPML   PSMV
          STD    T5
          LDDL   W3          CREATE RMA
          STD    T2
          SHN    -14
          STD    T1
          LDD    W2          GET UPPER SIX BITS
          LPN    77
          SHN    4
          RAD    T1          (T1 T2) = R-REGISTER
          LDD    MP+2
          LPC    770
          SHN    11
          LMD    T5          INCLUDE UPPER BITS OF BYTE NUMBER
          SHN    6
          LMC    RR          ACTIVATE R-REGISTER
          LRD    T1
 SPT4     LJM    SPTX        RETURN

 SPTP     CON    0,0         WORD ADDRESS OF PAGE TABLE ADDRESS

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD HELP WITH NO PARAMETERS)
 HEP      SPACE  4,10
**        HEP - HELP ROUTINE (WITH NO PARAMETERS).
*
*         EXIT   TO *HWP* IF PARAMETER SPECIFIED.
*
*         USES   M1, M2, M3.
*
*         CALLS  GKC, SKP, WAS, *HWP*.
*
*         MACROS PRINT.


 HEP6     LDI    BP          SET COMMAND NAME
          SHN    10
          ADM    1,BP
          STML   HLPC
          CALL   HWP         PROCESS HELP WITH PARAMETER

 HEP      ROUTINE

          RJM    SKP         SKIP DELIMITERS
          NJN    HEP6        IF PARAMETER SUPPLIED
          AOM    OVLP        INHIBIT OVERLAY LOADS
          LDN    0           INITIALIZE LINE COUNTER
          STD    M1
          LDC    HEPB        GET FIRST COMMAND
          STD    M2

*         DETERMINE COMMAND MASK.

          LDM    S0FLG       CHECK FOR S0/S0E MAINFRAME
          SHN    1
          NJN    HEP0        IF S0/S0E, SET MASK = 2
          LDN    1           SET MASK = 1 FOR ALL OTHER MAINFRAMES
 HEP0     STD    M3
 HEP1     LDI    M2          CHECK COMMAND RELEVANCE
          LPDL   M3
          ZJN    HEP5        IF COMMAND NOT VALID ON THIS HARDWARE
          LDM    1,M2        CHECK IF LINE PRESENT
          ZJP    CMDF        IF END OF LIST
          AOD    M1          ADVANCE LINE COUNTER
          LMN    23D
          NJN    HEP4        IF PAUSE NOT REQUIRED

*         PAUSE SO HELP TEXT DOES NOT SCROLL.

          PRINT  HEPA+CRLF   NOTIFY OPERATOR OF PAUSE
          LDC    HEP3        SET TEMPORARY REENTRY ADDRESS
          STI    PT
 HEP2     LJM    SMPX        RETURN

 HEP3     RJM    GKC         GET CHARACTER FROM TERMINAL
          ZJN    HEP2        IF NO CHARACTER ENTERED
          LDN    1           RESET LINE COUNTER
          STD    M1

*         PRINT NEXT LINE OF DIRECTORY.

 HEP4     LDM    1,M2        SET ADDRESS OF HELP TEXT
          ADC    CRLF        ADD IN CALL TO *EOL*
          RJM    WAS         PRINT COMMAND
 HEP5     LDN    2           ADVANCE TO NEXT COMMAND
          RAD    M2
          LJM    HEP1        LOOP FOR NEXT COMMAND

 HEPA     ASCII  (Press any key to continue.)

 HEPB     BSS    0           DESCRIPTION OF EACH COMMAND
 HELD     HERE

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD HELP COMMAND WITH PARAMETER)
 HWP      SPACE  4,10
**        HWP - HELP ROUTINE (WITH PARAMETER).
*
*         ENTRY  (HLPC) = COMMAND MNEMONIC.
*
*         USES   T1, T2, T3.
*
*         CALLS  WAS.


 HWP      ROUTINE

          AOM    OVLP        INHIBIT OVERLAY LOADS

*         DETERMINE COMMAND MASK.

          LDM    S0FLG       CHECK FOR S0/S0E MAINFRAME
          SHN    1
          NJN    HWP1        IF S0/S0E, SET MASK = 2
          LDN    1           SET MASK = 1 FOR ALL OTHER MAINFRAMES
 HWP1     STD    T2

*         SEARCH HELP TEXT FOR MATCHING COMMAND.

          LDN    0           INITIALIZE SEARCH INDEX
          STD    T1
 HWP2     LDM    HWPA,T1     CHECK VALIDITY OF COMMAND
          LPDL   T2
          ZJN    HWP3        IF COMMAND NOT VALID ON THIS HARDWARE
          LDM    HWPA+1,T1
          ZJN    HWP5        IF COMMAND NOT PRESENT IN LIST
          STD    T3
          LDIL   T3          GET FIRST WORD OF HELP ENTRY
          LMML   HLPC
          ZJN    HWP4        IF COMMAND FOUND
 HWP3     LDN    2           ADVANCE TO NEXT ENTRY
          RAD    T1
          UJN    HWP2        LOOP

 HWP4     LDM    HWPA+1,T1   SET ADDRESS OF HELP TEXT
          ADC    CRLF        ADD CALL TO *EOL*
          RJM    WAS         PRINT DESIRED SYNTAX
          LJM    CMDF        RETURN

 HWP5     LJM    CMDE        PROCESS ERROR

 HWPA     BSS    0           TEXT FOR INDIVIDUAL COMMANDS
 HELP     HERE

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD *DF* COMMAND ROUTINES)
 DFR      SPACE  4,10
**        DFR - DISPLAY DFT CONTROL BLOCK HEADER.
*
*         USES   CM - CM+3, M2, M3, T1, T2, WC.
*
*         CALLS  FDP, LRR, PRN, TDF, WAS.
*
*         MACROS PRINT.


 DFR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    FDP         FETCH DFT POINTER
          NJN    DFR5        IF DFT BLOCK EXISTS
          PRINT  DFRB+CRLF   *No DFT*
          LJM    CMDF        RETURN

*         SET UP TO DISPLAY DFT HEADER BLOCK.

 DFR5     AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDN    0           INITIALIZE HEADER BLOCK WORD OFFSET
          STD    M2
          LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDML   DFTO
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   CM          READ DFT HEADER
          LDD    CM+DHNPW    GET NUMBER OF HEADER WORDS
          SHN    -DH.NPW
          NJN    DFR10       IF COUNT PRESENT
          LDN    6           ASSUME DFT LEVEL 1 WITH 6 HEADER WORDS
 DFR10    STD    M3

*         DISPLAY DFT HEADER BLOCK.

 DFR15    RJM    LRR         RESTORE R-REGISTER
          LDD    M2          GET OFFSET INTO BLOCK
          ADM    DFTO
          LMC    RR          ACTIVATE R-REGISTER
          CRML   NBUF,ON     READ WORD FROM BLOCK
          LDC    HMDT+16D    HEX WORD 16 NIBBLES
          RJM    PRN         PRINT WORD
          LDML   DFRA,M2     GET LABEL
          RJM    WAS         OUTPUT LABEL WITH EOL
          AOD    M2          INCREMENT TO NEXT WORD
          LMD    M3          TEST FOR END
          NJN    DFR15       IF MORE HEADER WORDS TO DISPLAY

*         TRANSLATE DFT CONTROL WORD FLAGS.

          RJM    TDF         TRANSLATE DFT HEADER
          LDC    DFR5        GET REPEAT ADDRESS
          LJM    CMDR        RETURN

 DFRA     BSS    0           TABLE OF LABEL ADDRESSES
          LOC    0
 HDRP     CON    DFHM+CRLF   DFT CONTROL WORD
 SECP     CON    DFSP+CRLF   SECDED ID TABLE POINTER
 MRBP     CON    DFRP+CRLF   MAINTENANCE REGISTER BUFFERS POINTER
 MDLP     CON    DFDP+CRLF   MODEL DEPENDENT BUFFER POINTER
 NVEP     CON    DFVP+CRLF   NOS/VE BUFFER POINTER
 C17P     CON    DFPP+CRLF   C170 PP RESIDENT BUFFER POINTER
 OSRP     CON    DFNP+CRLF   C170 OS BUFFER POINTER
 BCWP     CON    DFCW+CRLF   MR BUFFER CONTROL WORDS BUFFER POINTER
 MECP     CON    DFMC+CRLF   MAINFRAME ELEMENT COUNTER BUFFER POINTER
 ECRP     CON    DFCI+CRLF   DFT CONTROL INFORMATION BUFFER POINTER
 SSBP     CON    DFSS+CRLF   SUPPORTIVE STATUS BUFFERS POINTER
 NRSP     CON    DFNR+CRLF   NON-REGISTER STATUS BUFFER POINTER
 DCMP     CON    DFCM+CRLF   DFT CENTRAL MEMORY RESIDENT POINTER
 PRDP     CON    DFPR+CRLF   PP REGISTER SAVE AREA POINTER
 SDBP     CON    DFSD+CRLF   SECONDARY DFT BUFFER POINTER
          LOC    *O

 DFHM     ASCII  ( DFT Control Word)
 DFSP     ASCII  ( SECDED ID Table PTR.)
 DFRP     ASCII  ( Maintenance Reg. Buffers PTR.)
 DFDP     ASCII  ( Model Dependent Buffer PTR.)
 DFVP     ASCII  ( NOS/VE Buffer PTR.)
 DFPP     ASCII  ( C170 PP Resident Buffer PTR.)
 DFNP     ASCII  ( C170 OS Buffer PTR.)
 DFCW     ASCII  ( MR Buf. Control Words Buffer PTR.)
 DFMC     ASCII  ( MF Element Counter Buffer PTR.)
 DFCI     ASCII  ( DFT Control Info. Buffer PTR.)
 DFSS     ASCII  ( Supportive Status Buffers PTR.)
 DFNR     ASCII  ( Non-Register Status Buffer PTR.)
 DFCM     ASCII  ( DFT Central Memory Resident PTR.)
 DFPR     ASCII  ( PP Register Save Area PTR.)
 DFSD     ASCII  ( Secondary DFT Buffer PTR.)

 DFRB     ASCII  (No DFT)
 TDF      SPACE  4,10
**        TDF - TRANSLATE DFT HEADER.
*
*         ENTRY  (DP - DP+1) = POINTER TO DFT HEADER.
*
*         USES   M2, W0 - W3.
*
*         CALLS  DFV.


 TDF      SUBR               ENTRY/EXIT
          LRD    DP          READ THE DFT HEADER
          LDM    DFTO
          LMC    RR
          CRDL   W0

*         THE FOLLOWING CODE MUST BE MODIFIED IF NEW FLAGS ARE ADDED.

          LDDL   W3          GET FLAGS
          LPC    1S13-1      EXTRACT 13 FLAGS
          SHN    20-13D      LEFT JUSTIFY 13 FLAGS IN 16-BIT PP WORD
          STDL   W2
          LDC    TDFB        DFT BIT LIST
          RJM    DFV         DECODE FLAG VALUES
          UJN    TDFX        RETURN


 TDFB     CON    =C*DFT = *
          LOC    0
          CON    =C*DISABLE SCM REFRESH*
          CON    =C*DUAL-STATE TRANSITION*
          CON    =C*DFT FREEZE*
          CON    =C*HALT ON CORRECTED ERROR*
          CON    =C*HALT ON UNCORRECTED ERROR*
          CON    =C*DFT VERIFIED*
          CON    =C*DFT REJECTED*
          CON    =C*LOG SECDED*
          CON    0           RETURN FROM DUAL STATE NON-DEDICATED MODE
          CON    =C*C170 ERROR LOGGING*
          CON    =C*C170 NON-DEDICATED MODE*
          CON    =C*C180 ERRORS LOGGED*
          CON    =C*C170 ERRORS LOGGED*
          LOC    *O
          SPACE  4,10
*         COMMON DECKS.


*COPY     CTP$SCI_MDD_DFT_CMDS_COMMON

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD *MB* COMMAND ROUTINES)
 MBR      SPACE  4,10
**        MBR - DISPLAY DFT MAINTENANCE BUFFER CONTROL WORDS.
*
*         USES   M1, M2, M3, PC, PP, T2, WC, CM - CM+3, CN - CN+3.
*
*         CALLS  DTO, EOL, FDP, FWB, LRR, PHL, PIN, PRN, PSN, SMA, *DOF*, *MRR*.
*
*         MACROS PRINT, READMR.


 MBR      ROUTINE

          RJM    FDP         FETCH DFT POINTER
          NJN    MBR5        IF DFT BLOCK EXISTS
          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          PRINT  MBRF+CRLF   *No DFT*
          LJM    CMDF        RETURN

 MBR5     LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          ZJN    MBR10       IF NOT *MB,NN*
          CALL   MRR         PROCESS MRB OUTPUT

*         GET THE DFT VERSION NUMBER TO DETERMINE WHICH DISPLAY FORMAT TO USE.

 MBR10    LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDML   DFTO
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   CM          READ DFT HEADER
          LDDL   CM+DHRL     GET DFT VERSION
          SHN    -DH.RL
          SBN    VER4
          PJN    MBR15       IF VERSION 4 OR ABOVE
          LJM    DOF         DISPLAY OLD FORMAT OF THE *MB* COMMAND

*         INITIALIZE FOR DISPLAY.

 MBR15    AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDN    0           CLEAR HEADER LINES DISPLAYED FLAG
          STM    MBRA
          STM    MBRB        CLEAR INDEX NUMBER DISPLAYED FLAG
          LDN    1           INITIALIZE DISPLAY INDEX
          STD    M1
          LRD    DP          GET BUFFER CONTROL WORDS POINTER
          LDML   DFTO
          ADC    RR+BCWP
          CRDL   CM
          LDD    CM+3        SAVE NUMBER OF BUFFER CONTROL WORD ENTRIES
          SBN    1           SKIP SCRATCH BUFFER
          STD    WC
          LRD    CM+1
          LDD    CM          SAVE BUFFER CONTROL WORD OFFSET
          STD    PC
          RJM    SMA         SET MEMORY ADDRESS
          LRD    DP          GET SUMMARY STATUS BUFFER POINTER
          LDML   DFTO
          ADC    RR+SSBP
          CRDL   CM
          ADN    1           GET NRSB POINTER
          ERRNZ  NRSP-SSBP-1 (CODE EXPECTS CONSECUTIVE POINTERS)
          CRDL   CN
          LRD    CM+1        GET FIRST WORD OF SUPPORTIVE STATUS BUFFER
          LDD    CM
          ADC    RR
          CRDL   CM
          LDDL   CM+3        SAVE SUPPORTIVE STATUS BUFFER ELEMENT SIZE
          STML   MBRC
          ADN    1           SET SUPPORTIVE STATUS ENTRY OFFSET (SKIP SCRATCH)
          STDL   M2
          LRD    CN+1        GET FIRST WORD OF NRSB
          LDD    CN
          ADC    RR
          CRDL   CN

*         FOR THE NON-REGISTER STATUS BUFFERS, THE FIRST THREE ENTRIES WILL
*         NOT BE DISPLAYED (SCRATCH, TOP OF HOUR AND *SCI* ENTRIES).

          LDD    CN+2        SAVE NUMBER OF NRSB ENTRIES
          SBN    3           SKIP SCRATCH, TOP OF HOUR AND *SCI* ENTRIES
          STD    PP
          LDDL   CN+3        SAVE NRSB ELEMENT SIZE
          STML   MBRD
          STDL   M3          SET OFFSET TO SKIP SCRATCH, TOP OF HOUR AND *SCI*
          SHN    1
          ADN    1           SKIP BUFFER HEADER WORD
          RADL   M3

*         DISPLAY NEXT SUPPORTIVE STATUS BUFFER IF THERE IS ONE.

 MBR20    LDDL   WC          CHECK IF SUPPORTIVE STATUS BUFFER TO DISPLAY
          ZJP    MBR30       IF NO SUPPORTIVE STATUS BUFFER TO DISPLAY
          RJM    LRR         LOAD R-REGISTER FOR MR BUFFER CONTROL WORDS
          LDD    M1          READ NEXT MR BUFFER CONTROL WORD
          ADD    PC
          ADC    RR
          CRDL   CM
          LDDL   CM+2        CHECK SEQUENCE NUMBER
          STML   MBRE+2      SAVE FOR *PSN*
          SHN    -8D
          ZJP    MBR25       IF SEQUENCE NUMBER = 0, THEN END OF SS BUFFER
          RJM    PHL         PRINT HEADER LINES
          LDN    COLSI       GET INDEX NUMBER COLUMN NUMBER
          RJM    PIN         PRINT INDEX NUMBER
          LDN    COLSS       GET SEQUENCE NUMBER COLUMN NUMBER
          RJM    PSN         PRINT SEQUENCE NUMBER
          LRD    DP          GET SUPPORTIVE STATUS BUFFER POINTER
          LDML   DFTO
          ADC    RR+SSBP
          CRDL   CM
          LRD    CM+1
          LDN    4           SET NUMBER OF WORDS TO READ
          STD    T2
          LDD    CM          READ NEXT SUPPORTIVE STATUS BUFFER ENTRY
          ADDL   M2
          ADC    RR
          CRML   MBRE,T2
          LDN    0           SET END OF FAULT SYMPTOM CODE
          STM    MBRE+20
          LDN    COLSF       GET FAULT SYMPTOM CODE COLUMN NUMBER
          RJM    FWB         FILL WITH BLANKS
          PRINT  MBRE+12     DISPLAY FAULT SYMPTOM CODE
          LDML   MBRC        INCREMENT SUPPORTIVE STATUS ENTRY OFFSET
          RADL   M2
          SOD    WC          DECREMENT NUMBER OF BUFFER CONTROL WORDS LEFT
 MBR25    STD    WC

*         DISPLAY NEXT NRSB IF THERE IS ONE.  HOWEVER, DO NOT DISPLAY ANYTHING
*         FOR THE TOP OF HOUR ENTRY (INDEX = 1) OR THE *SCI* ENTRY (INDEX = 2).

 MBR30    LDDL   PP          CHECK IF NRSB ENTRIES LEFT
          ZJP    MBR45       IF NO NRSB ENTRIES LEFT
          LDD    M1
          SBN    3
          PJN    MBR35       IF NOT TOP OF HOUR OR *SCI* INDEX
          LDD    WC          CHECK IF FIRST SS BUFFER CONTAINED DATA
          ZJP    MBR55       IF NO SS DATA
          LJM    MBR50       WRITE END OF LINE

 MBR35    LRD    DP          GET NRSB POINTER
          LDML   DFTO
          ADC    RR+NRSP
          CRDL   CM
          LDN    5           SET NUMBER OF ELEMENT WORDS TO READ
          STD    T2
          LRD    CM+1
          LDD    CM
          ADDL   M3
          ADC    RR
          CRML   MBRE,T2
          LDML   MBRE+2      GET SEQUENCE NUMBER
          SHN    -8D
          ZJP    MBR45       IF SEQUENCE NUMBER = 0, THEN END OF NRSB
          RJM    PHL         PRINT HEADER LINES
          LDN    COLNI       GT INDEX NUMBER COLUMN NUMBER
          RJM    PIN         PRINT INDEX NUMBER
          LDN    COLNS       GET SEQUENCE NUMBER COLUMN NUMBER
          RJM    PSN         PRINT SEQUENCE NUMBER
          LDN    0           SET END OF FAULT SYMPTOM CODE
          STM    MBRE+24
          LDN    COLNF       GET FAULT SYMPTON CODE COLUMN NUMBER
          RJM    FWB         FILL WITH BLANKS
          PRINT  MBRE+16     DISPLAY FAULT SYMPTOM CODE
          LDML   MBRD        INCREMENT NRSB ENTRY OFFSET
          RADL   M3
          SOD    PP          DECREMENT NUMBER OF NRSB ENTRIES LEFT
 MBR45    STD    PP
          LDM    MBRB        CHECK IF ANY ENTRIES PROCESSED
          ZJN    MBR60       IF DONE WITH BOTH SS BUFFER/NRSB
 MBR50    RJM    EOL         WRITE END OF LINE
          LDN    0           RESET INDEX NUMBER DISPLAYED FLAG
          STM    MBRB
 MBR55    AOD    M1          INCREMENT DISPLAY NDEX
          LJM    MBR20       DISPLAY NEXT LINE

*         DISPLAY IOU SUMMARY STATUS REGISTER.

 MBR60    PRINT  MBRK+CRLF   PRINT BLANK LINE
          LDM    I0CC        SET IOU CONNECT CODE
          STD    EC
          LDN    0           SET IOU SUMMARY STATUS REGISTER NUMBER
          STD    RN
          READMR NBUF        READ IOU SUMMARY STATUS
          RJM    DTO         TEST FOR DEADMAN TIMEOUT
          PRINT  MBRH        PRINT LABEL
          LDN    MRDT+2
          RJM    PRN         DISPLAY 2 CHARACTERS OF REGISTER
          RJM    EOL         PRINT END OF LINE
          RJM    EOL         PRINT BLANK LINE
          LDM    MBRA        CHECK IF ANY BUFFER DATA DISPLAYED
          ZJN    MBR65       IF NONE
          PRINT  MBRI        PRINT INFORMATIONAL MESSAGE
          PRINT  MBRJ+CRLF
 MBR65    LDC    MBR15       GET REPEAT ADDRESS
          LJM    CMDR        RETURN

 COLSI    EQU    1           SS INDEX NUMBER COLUMN NUMBER
 COLSS    EQU    8D          SS SEQUENCE NUMBER COLUMN NUMBER
 COLSF    EQU    15D         SS FAULT SYMPTOM CODE COLUMN NUMBER
 COLNI    EQU    30D         NRSB INDEX NUMBER COLUMN NUMBER
 COLNS    EQU    37D         NRSB SEQUENCE NUMBER COLUMN NUMBER
 COLNF    EQU    44D         NRSB FAULT SYMPTOM CODE COLUMN NUMBER
 MBRA     CON    0           HEADER LINES DISPLAYED FLAG
 MBRB     CON    0           INDEX NUMBER DISPLAYED FLAG
 MBRC     CON    0           SUPPORTIVE STATUS BUFFER ELEMENT SIZE
 MBRD     CON    0           NON-REGISTER STATUS BUFFER ELEMENT SIZE
 MBRE     BSS    6*4         ELEMENT BUFFER
 MBRF     ASCII  (No DFT)
 MBRH     ASCII  (IOU SS = )
 MBRI     ASCII  (Enter MB,i or NS,i [i = index )
 MBRJ     ASCII  (number] for more information)
 MBRK     ASCII  ( )
 NSR      SPACE  4,10
**        NSR - DISPLAY NON-REGISTER STATUS BUFFER.
*
*         USES   M1, M2, M3, T1, CM - CM+3.
*
*         CALLS  EOL, FDP, LRR, PRN, SMA.
*
*         MACROS PRINT.


 NSR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    FDP         FETCH DFT POINTER
          NJN    NSR5        IF DFT BLOCK EXISTS
          PRINT  MBRF+CRLF   *No DFT*
          LJM    CMDF        RETURN

 NSR5     LDDL   W0+1        CHECK DFT VERSION LEVEL
          SHN    -DH.RL
          SBN    VER5
 NSR10    MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT COMMAND
 NSR15    AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          NJN    NSR20       IF INDEX SPECIFIED
          STM    DFTP        SET DEFAULT TO INDEX ZERO
 NSR20    LRD    DP
          LDM    DFTO        GET NON-REGISTER STATUS BUFFER POINTER
          ADC    RR+NRSP
          CRDL   CM
          LRD    CM+1
          LDD    CM          SAVE A-OFFSET
          STD    M2
          ADC    RR
          CRDL   CM          READ FIRST WORD OF NRSB
          LDDL   CM+3        SAVE BUFFER SIZE
          STDL   M1
          LDDL   CM+2        GET NUMBER OF BUFFERS
          SBN    1           INDICES START WITH ZERO
          SBM    DFTP
          MJN    NSR10       IF BUFFER INDEX TOO BIG

*         COMPUTE OFFSET TO SPECIFIED ENTRY.

          LDN    1           SKIP HEADER WORD
          RAD    M2
          LDM    DFTP
          STD    T1
 NSR25    SOD    T1          DECREMENT INDEX
          MJN    NSR30       IF OFFSET FOUND
          LDD    CM+3        INCREMENT OFFSET TO NEXT ENTRY
          RADL   M2
          UJN    NSR25       CONTINUE

 NSR30    LDDL   M2
          RJM    SMA         SAVE MEMORY ADDRESS
          LDN    0           INITIALIZE COUNTER
          STD    M3
 NSR35    RJM    LRR         RESTORE R-REGISTER
          LDDL   M2
          ADD    M3
          ADC    RR
          CRML   NBUF,ON     READ NEXT WORD
          LDC    HBDT+16D    HEX BYTE MEMORY DUMP
          RJM    PRN         PRINT THE WORD
          RJM    EOL
          AOD    M3          INCREMENT COUNTER
          SBD    M1          TEST FOR END
          MJN    NSR35       IF MORE TO PROCESS
          LDC    NSR15       GET REPEAT ADDRESS
          LJM    CMDR        RETURN
 DOF      SPACE  4,10
**        DOF - DISPLAY OLD FORMAT OF THE *MB* COMMAND.
*
*         USES   M2, WC, CM - CM+3.
*
*         CALLS  EOL, LRR, PRN, SMA.
*
*         MACROS PRINT.


 DOF      ROUTINE

          AOM    OVLP
          LRD    DP          READ THE DFT BUFFER HEADER WORD
          LDML   DFTO
          LMC    RR
          CRDL   CM
          LDD    CM+DHNBF    GET NUMBER OF MAINTENANCE BUFFERS
          LPN    77
          STD    WC
          LDD    CM+DHNPW    GET NUMBER OF HEADER WORDS
          SHN    -DH.NPW
          NJN    DOF5        IF COUNT PRESENT
          LDN    6           ASSUME DFT LEVEL 1 WITH 6 HEADER WORDS
 DOF5     STD    M2

*         DISPLAY MAINTENANCE REGISTER BUFFER CONTROL WORDS.

          PRINT  DOFA+CRLF   PRINT HEADER AND EOL
          LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDML   DFTO
          RAD    M2
          RJM    SMA         SET MEMORY ADDRESS
          LDD    M2          ADJUST LWA+1 TO DISPLAY
          RAD    WC          SAVE NUMBER
 DOF10    RJM    LRR         RESTORE R-REGISTER
          LDD    M2
          LMC    RR          ACTIVATE R-REGISTER
          CRML   NBUF,ON     READ WORD FROM BLOCK
          LDC    HMDT+16D    HEX WORD 16 NIBBLES
          RJM    PRN         PRINT WORD
          RJM    EOL         WRITE END OF LINE
          AOD    M2          INCREMENT TO NEXT WORD
          SBD    WC          TEST FOR END
          MJN    DOF10       IF NOT DONE
          LDC    DOF         SET REPEAT ADDRESS
          LJM    CMDR        RETURN

 DOFA     ASCII  (MR Buffer Control Words)
 FWB      SPACE  4,10
**        FWB - FILL WITH BLANKS.
*
*         THE OUTPUT LINE IS FILLED WITH BLANKS UP TO THE SPECIFIED
*         COLUMN NUMBER.
*
*         (A) = COLUMN NUMBER.
*
*         USES   T1.
*
*         MACROS PRINT.


 FWB      SUBR               ENTRY/EXIT
          STD    T1          SAVE COLUMN NUMBER
 FWB5     LDD    BP          COMPUTE THE CURRENT NUMBER OF CHARACTERS
          SBD    BA
          SBD    T1
          ADN    1
          PJN    FWBX        IF AT SPECIFIED COLUMN
          PRINT  FWBA        ADD A SPACE TO THE OUTPUT BUFFER
          UJN    FWB5        CONTINUE

 FWBA     ASCII  ( )
 PHL      SPACE  4,10
**        PHL - PRINT HEADER LINES FOR *MB* COMMAND DISPLAY.
*
*         ENTRY  (MBRA) = 0 IF HEADER LINES HAVE NOT YET BEEN PRINTED.
*
*         EXIT   (MBRA) <> 0.
*
*         CALLS  EOL.
*
*         MACROS PRINT.


 PHL      SUBR               ENTRY/EXIT
          LDML   MBRA
          NJN    PHLX        IF HEADER LINES HAVE ALREADY BEEN PRINTED
          PRINT  PHLA        PRINT HEADER LINE 1
          PRINT  PHLB+CRLF
          RJM    EOL         PRINT BLANK LINE
          PRINT  PHLC        PRINT HEADER LINE 2
          PRINT  PHLD+CRLF
          RJM    EOL         PRINT BLANK LINE
          AOM    MBRA        SET HEADER LINES DISPLAYED FLAG
          UJN    PHLX        RETURN

 PHLA     ASCII  (MR Buff. Control Words)
 PHLB     ASCII  (       Non-Reg. Status Buffers)
 PHLC     ASCII  (Index  Seq #  FSC            )
 PHLD     ASCII  (Index  Seq #  FSC)
 PIN      SPACE  4,10
**        PIN - PRINT INDEX NUMBER.
*
*         ENTRY  (A) = COLUMN NUMBER AT WHICH TO START.
*                (M1) = INDEX NUMBER.
*
*         EXIT   (MBRB) <> 0.
*
*         CALLS  FWB, PRN.


 PIN      SUBR               ENTRY/EXIT
          RJM    FWB         FILL WITH BLANKS TO SPECIFIED COLUMN NUMBER
          LDD    M1          GET INDEX NUMBER TO BE DISPLAYED
          STM    NBUF
          LDN    MRDT+2
          RJM    PRN         PRINT NUMBER
          AOM    MBRB        SET INDEX NUMBER DISPLAYED FLAG
          UJN    PINX        RETURN
 PSN      SPACE  4,10
**        PSN - PRINT SEQUENCE NUMBER.
*
*         ENTRY  (A) = COLUMN NUMBER AT WHICH TO START.
*                (MBRE+2) = 8/SEQUENCE NUMBER, 8/.
*
*         CALLS  FWB, PRN.


 PSN      SUBR               ENTRY/EXIT
          RJM    FWB         FILL WITH BLANKS TO SPECIFIED COLUMN NUMBER
          LDML   MBRE+2      GET SEQUENCE NUMBER TO BE DISPLAYED
          SHN    -8D
          STM    NBUF
          LDN    MRDT+2
          RJM    PRN         PRINT SEQUENCE NUMBER
          UJN    PSNX        RETURN
          SPACE  4,10
*         COMMON DECKS.


*COPY     CTP$SCI_MDD_DFT_CMDS_COMMON

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD MRB COMMAND ROUTINES)
 MRR      SPACE  4,10
**        MRR - DISPLAY MAINTENANCE REGISTER BUFFER.
*
*         USES   M1, M2, M3, T1 - T5, WC, W0 - W3.
*
*         CALLS  DBC, EOL, LRR, PRN, SMA, UPR.


 MRR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDML   DFTO
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   W0          READ DFT HEADER
          LDD    W0+DHNPW    GET NUMBER OF HEADER WORDS
          SHN    -DH.NPW
          NJN    MRR5        IF HEADER CONTAINS NUMBER OF HEADER WORDS
          LDN    6           ASSUME DFT LEVEL 1 WITH 6 HEADER WORDS
 MRR5     ADC    ADNI        UPDATE INSTRUCTION
          STM    MRRA
          LDDL   W0+DHLBF    GET LENGTH OF MAINTENANCE BUFFERS
          SHN    -10
          STD    WC          SAVE NUMBER
          LDD    W0+DHNBF    GET NUMBER OF MAINTENANCE BUFFERS
          LPN    77
          SBN    1           FOR BEGINNING WITH ZERO
          SBM    DFTP        SUBTRACT BUFFER NUMBER OF INTEREST
          MJP    CMDE        IF TOO LARGE
          LDD    W0+DHRL     CHECK DFT VERSION
          SHN    -DH.RL
          SBN    4
          MJN    MRR10       IF VERSION 3 OR BELOW
          LDM    DFTO        READ BUFFER CONTROL WORD POINTER
          ADC    RR+BCWP
          CRDL   W0
          LDD    W0
          LRD    W0+1
          UJN    MRR15       CONTINUE

 MRR10    LDM    DFTO        SET OFFSET TO DFT CONTROL WORD
 MRRA     ADN    **          BYPASS POINTER AREA
 MRR15    ADM    DFTP        SELECT SPECIFIC POINTER REQUESTED
          LMC    RR          ACTIVATE R-REGISTER
          CRDL   W0          :   :   :   : OFFSET :
          LRD    DP
          LDM    DFTO        READ MR BUFFER POINTER
          ADC    RR+MRBP
          CRDL   T2          : A : R : R : LENGTH :
          LDD    T2
          ADD    W0+3
          STD    M3          SAVE A REGISTER + OFFSET
          LRD    T3          RESET R-REGISTER
          RJM    SMA         SAVE MEMORY ADDRESS
          RJM    DBC         DECODE BUFFER CONTROL WORD
          LDN    0           INITIALIZE COUNTERS
          STD    M1          BLOCK COUNTER
          STD    M2          WORD COUNTER
 MRR20    RJM    LRR         RESTORE R-REGISTER
          LDD    M3
          LMC    RR          ACTIVATE R-REGISTER
          CRML   RHDR,ON     READ IN THE HEADER
 MRR25    LDM    RHDR,M2     GET READY TO PRINT REGISTER NUMBER
          STM    NBUF
          RJM    LRR         RESTORE R-REGISTER
          AOD    M2          INCREMENT TO NEXT WORD
          ADD    M3          ADD IN POINTER + OFFSET
          LMC    RR          ACTIVATE R-REGISTER
          CRML   MRVAL,ON    READ WORD FROM BLOCK
          LDML   MRVAL       ADD REGISTER CONTENTS
          ADML   MRVAL+1
          ADML   MRVAL+2
          ADML   MRVAL+3
          ADML   NBUF        ADD REGISTER NUMBER
          ZJN    MRR30       IF END OF REGISTERS (NUMBER AND CONTENTS = 0)
          LDN    MRDT+2      DISPLAY REGISTER NUMBER
          RJM    PRN
          RJM    UDR         UNPACK AND DISPLAY THE REGISTER
 MRR30    LDD    M2
          SBN    4           TEST FOR END
          MJP    MRR25       IF NOT DONE
          LDN    5           ADVANCE ADDRESS
          RAD    M1
          SBD    WC
          ZJN    MRR35       IF ALL WORDS PROCESSED
          AOD    M2
          RAD    M3          INCREMENT OFFSET TO NEXT BLOCK
          LDN    0           RESET WORD COUNTER
          STD    M2
          LJM    MRR20       LOOP

 MRR35    LDK    OVLN        SET REPEAT OVERLAY NUMBER
          STML   CMDA
          LDC    MRR         SET REPEAT ADDRESS
          LJM    CMDR        RETURN
 DBC      SPACE  4,10
**        DBC - DECODE BUFFER CONTROL WORD.
*
*         ENTRY  (W0 - W3) = BUFFER CONTROL WORD.
*
*         EXIT   TO *TOH* IF TOP-OF-HOUR COUNTERS/SECDED ENTRY.
*
*         USES   M2, W2.
*
*         CALLS  PRN, WAS, *TOH*.
*
*         MACROS PRINT.


 DBC      SUBR               ENTRY/EXIT

*         CHECK FOR TOP-OF-HOUR COUNTERS/SECDED ENTRIES.

          LDD    W0+1        EXTRACT DFT ANALYSIS WITHOUT PRIORITY
          LMC    DATHM+0#0700
          ZJN    DBC1        IF TOP-OF-HOUR MAINFRAME ELEMENT COUNTER ENTRY
          LMN    DATHS&DATHM
 DBC1     ZJP    TOH         IF TOP-OF-HOUR SECDED ENTRY

*         PROCESS NORMAL MAINTENANCE REGISTER BUFFER.

          LDD    W0          GET OS ACTION CODE
          LPC    0#FF
          STM    NBUF        PRINT NUMBER
          LDN    MRDT+2
          RJM    PRN
          PRINT  DBCB        SPACE
          LDDL   W1          DFT ANALYSIS CODE
          STML   NBUF        PRINT NUMBER
          LDK    HMDT+4
          RJM    PRN
          PRINT  DBCB        SPACE
          LDDL   W2          GET SEQUENCE NUMBER
          SHN    -8D
          STM    NBUF        PRINT NUMBER
          LDN    MRDT+2
          RJM    PRN
          PRINT  DBCB        SPACE

*         THE FOLLOWING CODE MUST BE MODIFIED IF NEW FLAGS ARE ADDED.

          LDD    W2          GET FLAGS
          LPN    1S6-1       EXTRACT 6 FLAGS
          SHN    20-6        LEFT JUSTIFY 6 FLAGS IN 16-BIT PP WORD
          STDL   W2
          LDC    DBCA        DFT BIT LIST
          RJM    DFV         DECODE FLAG VALUES
          LJM    DBCX        RETURN


 DBCA     CON    =C*FLAGS = *
          LOC    0
          CON    =C*LOG(CONSOLE)*
          CON    =C*THRESHOLD EXCEEDED*
          CON    =C*LOG(OS)*
          CON    =C*BUFFER INTERLOCKED*
          CON    =C*VALID C180 DATA*
          CON    =C*VALID C170 DATA*
          ERRNZ  *-6         NUMBER OF FLAGS DOES NOT AGREE WITH CODE
          LOC    *O
 DBCB     ASCII  (, )
 ODC      SPACE  4,10
**        ODC - OUTPUT DESCRIPTOR AND ERROR COUNTS.
*
*         ENTRY  (A) = ADDRESS OF ELEMENT DESCRIPTOR.
*                (NBUF - NBUF+3) = MRB ENTRY.
*
*         CALLS  EOL, PRN, WAS.


 ODC      SUBR               ENTRY/EXIT
          RJM    WAS         OUTPUT DESCRIPTOR
          LDML   NBUF+1      PRINT UNLOGGED COUNT
          STML   NBUF
          LDC    HMDT+4
          RJM    PRN
          LDML   NBUF+2      PRINT CORRECTED COUNT
          STML   NBUF
          LDC    HMDT+4
          RJM    PRN
          LDML   NBUF+3      PRINT UNCORRECTED COUNT
          STML   NBUF
          LDC    HMDT+4
          RJM    PRN
          RJM    EOL         ADD END OF LINE
          UJN    ODCX        RETURN
 RNB      SPACE  4,10
**        RNB - READ NEXT BUFFER ENTRY.
*
*         ENTRY  (M1) = MRB ENTRY INDEX.
*                (M3) = OFFSET TO MRB INFORMATION.
*
*         EXIT   (NBUF - NBUF+3) = NEXT MRB ENTRY.
*
*         CALLS  LRR.


 RNB      SUBR               ENTRY/EXIT
          RJM    LRR         RESTORE R-REGISTER
          LDD    M1          READ NEXT ENTRY FROM BUFFER
          ADD    M3
          LMC    RR
          CRML   NBUF,ON
          UJN    RNBX        RETURN
 TOH      SPACE  4,10
**        TOH - PROCESS TOP-OF-HOUR COUNTER/SECDED ENTRY.
*
*         ENTRY  VIA *LJM*.
*                (W0 - W0+3) = MRB CONTROL WORD.
*                (M3) = OFFSET TO MRB INFORMATION.
*
*         USES   M1, M2, T0 - T3, T4.
*
*         CALLS  EOL, LRR, ODC, PRN, RNB, WAS.


 TOH      BSS    0           ENTRY
          LDC    SECP+RR     READ SECDED ID TABLE POINTER
          ADM    DFTO
          LRD    DP
          CRDL   T0
          LDD    T0+3        SET SECDED WORD COUNT IN MRB ENTRY
          ADN    2           INCLUDE OPTIONS INSTALLED AND EID DATA
          STD    M2
          LDM    S0FLG       CHECK MAINFRAME TYPE
          NJN    TOH1        IF S0/S0E
          STM    TOHH        SHORTEN LIST FOR OTHER MAINFRAMES

*         CHECK FOR TOP-OF-HOUR COUNTERS/SECDED ENTRIES.

 TOH1     LDD    W0+1        EXTRACT DFT ANALYSIS WITHOUT PRIORITY
          LMC    DATHS+0#0700
          ZJP    TOH8        IF SECDED ENTRY

*         PROCESS MAINFRAME ELEMENT COUNTERS ENTRY.

          PRINT  TOHA+CRLF   PRINT TITLE
          PRINT  TOHB+CRLF   PRINT COLUMN HEADINGS
          LDN    0           INITIALIZE WORD INDEX
          STD    M1

*         CHECK THE *DFT* REVISION LEVEL.  AT *DFT* REVISION LEVEL 4, THE
*         ELEMENT COUNTERS ARE DISPLAYED IN A DIFFERENT FORMAT.

          LRD    DP          READ *DFT* CONTROL WORD
          LDC    HDRP+RR
          ADM    DFTO
          CRDL   T0
          LDDL   T0+DHRL
          SHN    -DH.RL
          SBN    4
          PJN    TOH4        IF *DFT* VERSION >= 4
 TOH2     RJM    RNB         READ NEXT BUFFER ENTRY
          LDM    TOHG,M1
          RJM    ODC         OUTPUT DESCRIPTOR AND COUNTS
 TOH3     AOD    M1          ADVANCE WORD INDEX
          LDM    TOHG,M1     CHECK FOR END OF DESCRIPTORS
          NJN    TOH2        IF ALL WORDS NOT YET PROCESSED
          LJM    TOH10       SET UP FOR REENTRY

*         PROCESS MAINFRAME ELEMENT COUNTER ENTRY FOR DFT VERSION >= 4.
*         THE ELEMENT ID IN EACH ENTRY IS USED AS AN INDEX INTO THE
*         ELEMENT DESCRIPTOR TABLE.  THE *LOGGED MRB SIZE* IN THE
*         TOP-OF-HOUR SUPPORTIVE STATUS BUFFER ENTRY IS USED TO DETERMINE
*         HOW MANY ELEMENT ID'S TO PROCESS.  THE TOP-OF-HOUR SUPPORTIVE
*         STATUS BUFFER ENTRY IS ASSUMED TO BE ENTRY NUMBER 1.

 TOH4     LDC    SSBP+RR     GET SUPPORTIVE STATUS BUFFER POINTER
          ADM    DFTO
          LRD    DP
          CRDL   T0
          LRD    T1          READ SUPPORTIVE STATUS HEADER WORD
          LDDL   T0
          ADC    RR
          CRDL   T1
          LDDL   T4          BUFFER ELEMENT SIZE
          ADDL   T0          READ TOP-OF-HOUR SUPPORTIVE STATUS ENTRY
          ADC    RR+1
          CRDL   T0
          LDDL   T3          SAVE LOGGED MRB SIZE
          ZJN    TOH7        IF NONE TO LOG
          STDL   M2
 TOH5     RJM    RNB         READ NEXT BUFFER ENTRY
          LDML   NBUF        GET ELEMENT ID CODE
          STDL   T1
          SBN    0#10        ALTER OFFSET TO TABLE IF REQUIRED
          NJN    TOH6        IF NO ALTERING REQUIRED
          LDDL   T1          CHANGE TABLE OFFSET TO EITHER 4 OR 5
          LPN    2
          SHN    -1
          ADN    4
          STDL   T1
 TOH6     LDM    TOHI,T1
          RJM    ODC         OUTPUT DESCRIPTOR AND COUNTS
          AOD    M1
          SBD    M2
          NJN    TOH5        IF ALL WORDS NOT YET PROCESSED
 TOH7     LJM    TOH10       SET UP REENTRY ADDRESS

*         PROCESS SECDED ENTRY.

 TOH8     PRINT  TOHC+CRLF   PRINT TITLE
          LDN    0           INITIALIZE WORD INDEX
          STD    M1
          RJM    RNB         READ BUFFER ENTRY
          LDC    TOHD        *(MEM OI) = *
          RJM    WAS
          LDC    HMDT+16D    PRINT CONTENTS OF *OIMR* WORD
          RJM    PRN
          RJM    EOL         ADD END OF LINE
          RJM    LRR         RESTORE R-REGISTER
          AOD    M1
          ADD    M3          PROCESS ELEMENT ID WORD
          LMC    RR
          CRML   NBUF,ON
          LDC    TOHE        *(MEM EID) = *
          RJM    WAS
          LDC    HMDT+16D    PRINT CONTENTS OF *EIMR* WORD
          RJM    PRN
          RJM    EOL         ADD END OF LINE
          PRINT  TOHF+CRLF   PRINT COLUMN HEADINGS
 TOH9     AOD    M1          READ NEXT DATA WORD
          LMD    M2
          ZJP    TOH10       IF ALL WORDS PROCESSED
          RJM    RNB         READ NEXT BUFFER ENTRY
          LDML   NBUF
          ZJN    TOH10       IF NO MORE ERRORS TO PROCESS
          LDC    HMDT+4      PROCESS COUNT FIELD
          RJM    PRN
          LDML   NBUF+1      MOVE ADDRESS FIELD DATA
          STML   NBUF
          LDML   NBUF+2
          STML   NBUF+1
          LDC    HMDT+8D     PROCESS ADDRESS FIELD
          RJM    PRN
          LDML   NBUF+3      MOVE SYNDROME DATA
          STML   NBUF
          LDC    HMDT+4      PROCESS SYNDROME DATA
          RJM    PRN
          RJM    EOL         ADD END OF LINE
          LJM    TOH9        LOOP FOR NEXT WORD

*         SET UP FOR REENTRY.

 TOH10    LDC    MBR         SET UP REENTRY ADDRESS
          LJM    CMDR        EXIT TO *MDD* RESIDENT

 TOHA     ASCII  (TOP OF HOUR MAINFRAME ELEMENT COUNTERS)
 TOHB     ASCII  (ELEMENT     ULOG CORR UCOR)
 TOHC     ASCII  (TOP OF HOUR SECDED ID TABLE)
 TOHD     ASCII  ((MEM OI)  = )
 TOHE     ASCII  ((MEM EID) = )
 TOHF     ASCII  (CNT  ADDRESS  SYND)

*         DEFINE ASCII ELEMENT DESCRIPTORS AND ADDRESS TABLE FOR *DFT*
*         REVISION LEVEL < 4.

 TOHG     BSS    0
          CON    TOH.IOU     IOU-0
          CON    TOH.MEM     MEMORY-0
          CON    TOH.CPU     CPU-0
          CON    TOH.MFR     MAINFRAME
          CON    TOH.CON     CONSOLE
          CON    TOH.IOU1    IOU-1
          CON    TOH.MEM1    MEMORY-1
          CON    TOH.CPU1    CPU-1
          CON    TOH.GPD     GLOBAL PROCESSOR DESCRIPTOR
          CON    TOH.WCC     WALL CLOCK CHIP
*TOHH     CON    0           (ALL MAINFRAMES EXCEPT S0/S0E)

*         THE FOLLOWING ITEMS ARE ONLY APPLICABLE TO S0/S0E MAINFRAMES.

 TOHH     CON    TOH.MDD     MODEL DEPENDENT DESCRIPTOR
          CON    TOH.MAP     PAGE MAP
          CON    0           END OF LIST

 TOH.IOU  ASCII  (IOU-0     - )
 TOH.MEM  ASCII  (MEMORY-0  - )
 TOH.CPU  ASCII  (CPU-0     - )
 TOH.MFR  ASCII  (MAINFRAME - )
 TOH.CON  ASCII  (CONSOLE   - )
 TOH.IOU1 ASCII  (IOU-1     - )
 TOH.MEM1 ASCII  (MEMORY-1  - )
 TOH.CPU1 ASCII  (CPU-1     - )
 TOH.GPD  ASCII  (GPD MRT   - )
 TOH.WCC  ASCII  (WCC MRT   - )
 TOH.MDD  ASCII  (MOD. DEP. - )
 TOH.MAP  ASCII  (PAGE MAP  - )

*         DEFINE ADDRESS TABLE FOR *DFT* REVISION LEVEL >= 4.

 TOHI     BSS    0
          CON    TOH.CPU     CPU-0
          CON    TOH.MEM     MEMORY
          CON    TOH.IOU     IOU-0
          CON    TOH.MAP     PAGE MAP
          CON    TOH.CPU1    CPU-1
          CON    TOH.IOU1    IOU-1
 UDR      SPACE  4,10
**        UDR - UNPACK AND DISPLAY REGISTER.
*
*         ENTRY  (MRVAL) = PACKED REGISTER.
*
*         EXIT   (NBUF) = UNPACKED REGISTER.
*
*         USES   T1, T2.
*
*         CALLS  EOL, PRN.


 UDR      SUBR               ENTRY/EXIT
          LDN    0
          STD    T2          INITIALIZE POINTERS
          STD    T1
 UDR1     LDML   MRVAL,T2    16 BITS
          SHN    -10
          STM    NBUF,T1     UPPER 8 BITS
          AOD    T1          INCREMENT TO POINTER
          LDM    MRVAL,T2    16 BITS
          LPC    0#FF
          STM    NBUF,T1     LOWER 8 BITS
          AOD    T1          INCREMENT TO POINTER
          AOD    T2          INCREMENT FROM POINTER
          SBN    4
          NJN    UDR1        IF NOT DONE
          LDN    MRDT+16D
          RJM    PRN         DISPLAY THE MAINTENANCE REGISTER
          RJM    EOL         NEXT LINE
          UJN    UDRX        RETURN

 RHDR     BSS    4
 MRVAL    BSS    4
          SPACE  4,10
*         COMMON DECKS.


*COPY     CTP$SCI_MDD_DFT_CMDS_COMMON

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD *DD*/*MD* COMMAND ROUTINES)
 DDR      SPACE  4,10
**        DDR - DISPLAY DFT STRUCTURE.
*
*         USES   M1, M2, M3, T2 - T5.
*
*         CALLS  EOL, FDP, LRR, PRN, SMA.


 DDR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    FDP         FETCH DFT POINTER
          NJN    DDR10       IF DFT BLOCK EXISTS
          PRINT  DDRA+CRLF   *NO DFT*
          LJM    CMDF        RETURN

 DDR10    LDDL   W0+1        CHECK DFT VERSION LEVEL
          SHN    -DH.RL
          SBN    VER4
          MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
          LDD    PC          CHECK FOR SPECIFIED PARAMETER
          LPN    1S1
          NJN    DDR15       IF STRUCTURE PARAMETER SPECIFIED
          LDN    BCWP        SET DEFAULT TO *BC*
          STM    DDST
 DDR15    LDDL   W0          CHECK IF POINTER EXISTS
          SHN    -10
          SBN    1
          SBML   DDST
          MJP    CMDE        IF SELECTED BUFFER IS NOT IN STRUCTURE
 DDR20    AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDN    0           INITIALIZE COUNTER
          STD    M2
          LDM    DFTO
          ADC    RR
          ADM    DDST        GET INDEX TO REQUESTED STRUCTURE
          CRDL   T2          : A : R : R : LENGTH :
          LDDL   T5          SAVE LENGTH OF BUFFER
          NJN    DDR25       IF BUFFER EXISTS
          PRINT  DDRB+CRLF   *Zero buffer length.*
          LJM    CMDR        RETURN

 DDR25    STDL   M1
          LRD    T3
          LDDL   T2          SAVE OFFSET
          STDL   M3
          RJM    SMA         SAVE MEMORY ADDRESS
 DDR30    RJM    LRR         RESTORE R-REGISTER
          LDDL   M3
          ADDL   M2
          LMC    RR
          CRML   NBUF,ON     READ A WORD OF THE STRUCTURE
          LDC    HBDT+16D    HEX BYTE MEMORY DUMP
          RJM    PRN         DISPLAY THE WORD
          RJM    EOL         WRITE END OF LINE
          AODL   M2          INCREMENT COUNTER
          SBDL   M1          TEST FOR END OF STRUCTURE
          MJN    DDR30       IF MORE TO PROCESS
          LDC    DDR20       GET REPEAT ADDRESS
          LJM    CMDR        RETURN

 DDRA     ASCII  (NO DFT)
 DDRB     ASCII  (Zero buffer length.)
 MDR      SPACE  4,10
**        MDR - DISPLAY DFT MODEL-DEPENDENT BUFFER.
*
*         USES   M1, M2, M3, T2 - T5.
*
*         CALLS  EOL, FDP, LRR, PRN, SMA.


 MDR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    FDP         FETCH DFT POINTER
          NJN    MDR10       IF DFT BLOCK EXISTS
          PRINT  MDRM+CRLF   *NO DFT*
          LJM    CMDF        RETURN

 MDR10    AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDN    0
          STD    M2          INITIALIZE COUNTER
          LDM    DFTO
          ADC    RR+MDLP     ACTIVATE R-REGISTER
          CRDL   T2          : A : R : R : LENGTH :

*         IF THE BUFFER INDEX PARAMETER IS PRESENT, GET THE CORRESPONDING BUFFER POINTER.

          LDD    PC          GET PARAMETER COUNT
          LPN    1S1
          ZJN    MDR30       IF NOT *MD,BI*
          LDDL   W0+1        CHECK DFT VERSION
          SHN    -DH.RL
          SBN    VER4
 MDR20    MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
          LDDL   T2+3        GET NUMBER OF BUFFERS
          SBN    1           INDICES BEGIN WITH ZERO
          SBM    DFTP
          MJN    MDR20       IF BUFFER INDEX TOO LARGE
          LRD    T3
          LDDL   T2          READ THE CORRESPONDING BUFFER POINTER
          ADC    RR
          ADM    DFTP
          CRDL   T2          : A : R : R : LENGTH :
 MDR30    LDDL   T2+3
          STDL   M1          SAVE LENGTH OF BUFFER
          LRD    T3
          LDD    T2
          STD    M3
          RJM    SMA         SAVE MEMORY ADDRESS
 MDR40    RJM    LRR         RESTORE R-REGISTER
          LDD    M3
          ADD    M2
          LMC    RR          ACTIVATE R-REGISTER
          CRML   NBUF,ON     READ A WORD
          LDC    HBDT+16D    HEX BYTE MEMORY DUMP
          RJM    PRN         DISPLAY THE WORD
          RJM    EOL
          AOD    M2          INCREMENT COUNTER
          SBD    M1          TEST FOR END
          MJN    MDR40       IF MORE TO PROCESS
          LDC    MDR10       GET REPEAT ADDRESS
          LJM    CMDR        RETURN

 MDRM     ASCII  (NO DFT)
          SPACE  4,10
*         COMMON DECKS.


*COPY     CTP$SCI_MDD_DFT_CMDS_COMMON

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD DFT/ECR COMMAND ROUTINES)
 DER      SPACE  4,10
**        DER - DISPLAY DFT ECR ELEMENT.
*
*         USES   M1, M2, M3.
*
*         CALLS  CDV, FEB, LRR, PRN, RWE, SMA, WAS.


 DER      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    CDV
          MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
          LDD    PC          CHECK FOR ELEMENT ID PARAMETER
          LPN    1S1
          ZJP    CMDE        IF NO ELEMENT ID SPECIFIED
 DER10    RJM    RWE         READ FIRST WORD OF DFT ECR RECORD
          RJM    FEB         FIND ELEMENT BUFFER
          STDL   M3          SAVE OFFSET
          LDDL   W4          SAVE BUFFER LENGTH
          STDL   M1
          LDN    0           INITIALIZE OFFSET
          STD    M2
          LDDL   M3
          RJM    SMA         SAVE MEMORY ADDRESS
 DER20    RJM    LRR         RESTORE R-REGISTER
          LDD    M3          GET OFFSET INTO TABLE
          ADD    M2
          LMC    RR
          CRML   NBUF,ON     READ WORD FROM TABLE
          LDC    HMDT+16D    HEX WORD 16 NIBBLES
          RJM    PRN         PRINT WORD
          LDML   DERA,M2     GET LABEL
          RJM    WAS         OUTPUT LABEL WITH EOL
          AOD    M2          INCREMENT TO NEXT WORD
          LMD    M1          TEST FOR END
          NJN    DER20       IF MORE WORDS TO DISPLAY
          LDC    DER10       GET REPEAT ADDRESS
          LJM    CMDR        RETURN


 DERA     BSS    0           TABLE OF LABEL ADDRESSES
          LOC    0
 ECRID    CON    DEID+CRLF   ID/ACTION/REGISTER 1/REGISTER 2
 ECRTH    CON    DETH+CRLF   CORRECTED/UNCORRECTED THRESHOLDS
 ECRM1    CON    DEM1+CRLF   M1 BIT MASK FIELD
 ECRR1    CON    DER1+CRLF   R1 BIT MASK FIELD
 ECRM2    CON    DEM2+CRLF   M2 BIT MASK FIELD
 ECRR2    CON    DER2+CRLF   R2 BIT MASK FIELD
          LOC    *O

 DEID     ASCII  ( ID/Action/Register 1/Register 2)
 DETH     ASCII  ( Corrected/Uncorrected Thresh.)
 DEM1     ASCII  ( M1 Bit Mask Field)
 DER1     ASCII  ( R1 Bit Mask Field)
 DEM2     ASCII  ( M2 Bit Mask Field)
 DER2     ASCII  ( R2 Bit Mask Field)
 SDR      SPACE  4,10
**        SDR - SET DFT PROCESSOR FOR ERROR ACTION.
*
*         USES   CM - CM+3, M3.
*
*         CALLS  CDV, DBC, EBC, EUC, FDP, RWE, SPB.
*
*         MACROS FINDCM, PRINT.


 SDR      ROUTINE

          AOM    OVLP        SET INHIBIT OVERLAY LOAD FLAG
          RJM    FDP         FETCH DFT POINTER
          SBN    2
          ZJN    SDR10       IF DFT WAS VERIFIED
          PRINT  SDRM+CRLF   *DFT NOT VERIFIED*
          LJM    CMDF        RETURN

*         CHECK DFT VERSION.  THE *U* AND *C* PARAMETER OPTIONS ARE VALID ONLY IF
*         THE DFT VERSION IS <= 4.  THE *A* PARAMETER OPTION IS VALID ONLY IF THE
*         DFT VERSION IS >= 5.

 SDR10    LDM    DFTF        PICK UP WHICH FLAG
          STD    M3
          LMN    3           CHECK IF *A* SPECIFIED
          ZJP    SDR60       IF ALL ERRORS SPECIFIED
          LDD    M3          CHECK IF *U* OR *C* SPECIFIED
          SBN    1
          ZJN    SDR20       IF *C* SPECIFIED
          SBN    2-1
          NJN    SDR30       IF *U* NOT SPECIFIED
 SDR20    RJM    CDV         CHECK DFT VERSION
          PJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
 SDR30    RJM    SPB         SET PP BOUNDARY
          LDM    DFTR        GET IF ON OR OFF
          NJN    SDR40       IF OFF
          STD    CM+DHSEQ    SET UP FOR *RDSL* INSTRUCTION
          STD    CM+DHRL
          STD    CM+DHLBF
          LDML   FDRT,M3
          STDL   CM+DHFLG    SET APPROPRIATE BIT
          LDM    DFTO
          LMC    RR          ACTIVATE R-REGISTER
          RDSL   CM
          PRINT  FDRM+CRLF   *ERROR HANDLING INACTIVE*
          UJN    SDR50       RETURN

 SDR40    LCN    0           SET UP FOR *RDCL* INSTRUCTION
          STDL   CM+DHSEQ
          STDL   CM+DHRL
          STDL   CM+DHLBF
          LDML   TDRT,M3
          STDL   CM+DHFLG    CLEAR APPROPRIATE BIT
          LDM    DFTO
          LMC    RR          ACTIVATE R-REGISTER
          RDCL   CM
          PRINT  TDRM+CRLF   *ERROR HANDLING ACTIVE*
 SDR50    LJM    CMDF        RETURN

 SDR60    RJM    CDV         CHECK IF DFT VERSION SUPPORTS THIS PARAMETER
          MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
          RJM    EUC         ENSURE UPDATE ERROR CONTROL FLAG CLEAR
          FINDCM ECR
          STDL   CM          SAVE OFFSET
          LDN    3           SKIP HEADER WORDS
          RADL   CM
          RJM    SPB         SET PP BOUNDS
          LDM    DFTR        CHECK ACTION
          NJN    SDR70       IF ACTION = OFF
          LDN    2           SET UP ACTION CODE TO FREEZE ON ANY ERROR
          UJN    SDR80       CONTINUE

 SDR70    LDN    0           SET UP ACTION CODE TO PROCESS ALL ERRORS
 SDR80    STD    M3
 SDR90    LDDL   CM          READ NEXT ECR ELEMENT FIRST WORD
          ADC    RR
          CRDL   W0
          LDDL   W0          CHECK IF ELEMENT SHOULD BE SKIPPED
          LPC    0#FF
          LMN    DFTREID
          ZJN    SDR100      IF THIS ELEMENT SHOULD BE SKIPPED
          LDDL   M3          SET ACTION CODE
          STDL   W0+1
          RJM    DBC         DISABLE BOUNDS CHECKING
          LDDL   CM          REWRITE ECR ELEMENT FIRST WORD
          ADC    RR
          CWDL   W0
          RJM    EBC         ENABLE BOUNDS CHECKING
 SDR100   LDDL   W4          SKIP TO NEXT ELEMENT
          RADL   CM
          SOD    W5          DECREMENT NUMBER OF ELEMENTS
          NJN    SDR90       PROCESS NEXT ECR ELEMENT

*         TELL DFT TO UPDATE ITS COPY OF THE ECR.

          RJM    RWE         READ FIRST WORD OF DFT ECR ELEMENT
          LDN    2           SET UPDATE ERROR CONTROL FLAG
          RAML   W3
          RJM    SPB         SET PP BOUNDS
          LDDL   CM          REWRITE FIRST WORD OF DFT ECR ELEMENT
          ADC    RR
          CWDL   W2
          PRINT  ADRM+CRLF   *ECR UPDATED*
          LJM    CMDF        RETURN

*         SINCE THE *A* OPTION DOES NOT HAVE A CORRESPONDING BIT IN THE DFT
*         CONTROL WORD, NO ENTRIES ARE PROVIDED FOR IT IN THE FOLLOWING TABLE.


 FDRT     CON    2000        TOTAL FREEZE OF DFT
          CON    1000        FREEZE ON CORRECTED ERROR
          CON    400         FREEZE ON UNCORRECTED ERROR
 TDRT     CON    175777      TOTAL THAW OF DFT
          CON    176777      THAW ON CORRECTED ERROR
          CON    177377      THAW ON UNCORRECTED ERROR

 ADRM     ASCII  (ECR updated)
 FDRM     ASCII  (Error handling INACTIVE)
 TDRM     ASCII  (Error handling ACTIVE)
 SDRM     ASCII  (DFT not verified)
 UER      SPACE  4,10
**        UER - UPDATE DFT ECR ELEMENT.
*
*         CALLS  CAC, CDV, DBC, EBC, EUC, FEB, SCV, SPB.


 UER      ROUTINE

          RJM    CDV         CHECK DFT VERSION
          MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
          RJM    EUC         ENSURE UPDATE ERROR CONTROL FLAG CLEAR
          LDD    PC          CHECK FOR ELEMENT ID PARAMETER
          LPN    1S1
          ZJP    CMDE        IF NO ELEMENT ID PARAMETER SPECIFIED
          RJM    FEB         FIND ELEMENT BUFFER
          CRML   ECEB,W4     READ ELEMENT BUFFER

*         PROCESS ACTION CODE PARAMETER.

          LDD    PC
          LPN    1S2
          ZJN    UER10       IF ACTION CODE NOT SPECIFIED
          RJM    CAC         CONVERT ACTION CODE
          STML   ECEB+ECRID*4+1  STORE ACTION CODE
          LDN    1S1+1S2     GET PARAMETER MASK
          LJM    UER50       CHECK FOR MORE PARAMETERS SPECIFIED

*         PROCESS REGISTER 1 PARAMETER.

 UER10    LDD    PC
          LPN    1S3
          ZJN    UER20       IF REGISTER 1 PARAMETER NOT SPECIFIED
          LDD    PC          CHECK FOR REGISTER VALUE PARAMETER
          LPN    1S5
          ZJP    CMDE        IF REGISTER VALUE NOT SPECIFIED
          LDML   UEP1        STORE REGISTER NUMBER
          STML   ECEB+ECRID*4+2
          LDC    ECEB+ECRR1*4  GET REGISTER VALUE STORE ADDRESS
          RJM    SCV         STORE CM WORD VALUE
          LDN    1S1+1S3+1S5 GET PARAMETER MASK
          LJM    UER50       CHECK IF MORE PARAMETERS SPECIFIED

*         PROCESS REGISTER 2 PARAMETER.

 UER20    LDD    PC
          LPN    1S4
          ZJN    UER30       IF REGISTER 2 PARAMETER NOT SPECIFIED
          LDD    PC          CHECK FOR REGISTER VALUE PARAMETER
          LPN    1S5
          ZJP    CMDE        IF REGISTER VALUE NOT SPECIFIED
          LDML   UEP1        STORE REGISTER NUMBER
          STML   ECEB+ECRID*4+3
          LDC    ECEB+ECRR2*4  GET REGISTER VALUE STORE ADDRESS
          RJM    SCV         STORE CM WORD VALUE
          LDN    1S1+1S4+1S5 GET PARAMETER MASK
          UJN    UER50       CHECK IF MORE PARAMETERS SPECIFIED

*         PROCESS MASK 1 PARAMETER.

 UER30    LDD    PC
          LPC    1S6
          ZJN    UER40       IF MASK 1 PARAMETER NOT SPECIFIED
          LDC    ECEB+ECRM1*4  GET MASK 1 STORE ADDRESS
          RJM    SCV         STORE CM WORD VALUE
          LDC    1S1+1S6     GET PARAMETER MASK
          UJN    UER50       CHECK IF MORE PARAMETERS SPECIFIED

*         PROCESS MASK 2 PARAMETER.

 UER40    LDD    PC
          LPC    1S7
          ZJP    CMDE        IF MASK 2 PARAMETER NOT SPECIFIED
          LDC    ECEB+ECRM2*4  GET MASK 2 STORE ADDRESS
          RJM    SCV         STORE CM WORD VALUE
          LDC    1S1+1S7     GET PARAMETER MASK
 UER50    LMD    PC
          NJP    CMDE        IF TOO MANY PARAMETERS SPECIFIED

*         WRITE ELEMENT BUFFER BACK TO CM.

          RJM    SPB         SET PP BOUNDARY
          RJM    DBC         DISABLE BOUNDS CHECKING
          LDDL   CM
          ADC    RR
          CWML   ECEB,W4
          RJM    EBC         ENABLE BOUNDS CHECKING
          LJM    CMDF        RETURN
 WER      SPACE  4,10
**        WER - WRITE DFT ECR ELEMENT.
*
*         EXIT   UPDATE ERROR CONTROL FLAG IN THE ECR HAS BEEN SET.
*
*         CALLS  CDV, EUC, SPB.


 WER      ROUTINE
          RJM    CDV         CHECK DFT VERSION
          MJP    CMDE        IF DFT VERSION DOES NOT SUPPORT THIS COMMAND
          RJM    EUC         ENSURE UPDATE ERROR CONTROL FLAG CLEAR
          RJM    SPB
          LDN    2           SET UPDATE ERROR CONTROL FLAG
          RAML   W3
          LDDL   CM          REWRITE FIRST WORD OF ECR RECORD
          ADC    RR
          CWDL   W2
          PRINT  WERA+CRLF   *ECR UPDATED*
          LJM    CMDF        RETURN

 WERA     ASCII  ( ECR updated)
 CAC      SPACE  4,10
**        CAC - CONVERT ACTION CODE.
*
*         THE ACTION CODE IS ENTERED AS A DECIMAL NUMBER.  HOWEVER, THE PARAMETER
*         CRACKER ACCEPTS IT AS A HEXIDECIMAL NUMBER (ALL PARAMETERS ON A COMMAND
*         ARE ACCEPTED IN A SINGLE FORMAT).  THIS ROUTINE CONVERTS THE ACTION
*         CODE TO AN OCTAL FORMAT AS REQUIRED IN THE ECR RECORD.
*
*         ENTRY  (UEP1) = ACTION CODE PARAMETER IN HEXIDECIMAL FORMAT.
*
*         EXIT   (A) = ACTION CODE IN OCTAL FORMAT.
*
*         USES   T1, T2.


 CAC      SUBR               ENTRY/EXIT
          LDML   UEP1
          STDL   T1
          SHN    -4
          STD    T2          NUMBER OF 6'S TO SUBTRACT FOR CONVERSION
          ZJN    CAC20       IF NO CONVERSION NEEDED
 CAC10    LCN    6
          RADL   T1
          SOD    T2
          ZJN    CAC20       IF CONVERSION COMPLETE
          UJN    CAC10       CONTINUE

 CAC20    LDDL   T1          GET OCTAL NUMBER
          UJN    CACX        RETURN
 CDV      SPACE  4,10
**        CDV - CHECK DFT VERSION.
*
*         EXIT   (A) >= 0 IF RUNNING VERSION >= 5.
*
*         CALLS  FDP.


 CDV      SUBR               ENTRY/EXIT
          RJM    FDP         FETCH DFT POINTER
          NJN    CDV10       IF DFT BLOCK EXISTS
          PRINT  RWEA+CRLF   *NO DFT*
          LJM    CMDF        RETURN

 CDV10    LDDL   W0+1        CHECK DFT VERSION LEVEL
          SHN    -8D
          SBN    5
          UJN    CDVX        RETURN
 DBC      SPACE  4,10
**        DBC - DISABLE BOUNDS CHECKING.
*
*         ENTRY  MEMORY BOUNDS ENABLED ON CERTAIN PORTS.
*
*         EXIT   MEMORY BOUNDS CHECKING DISABLED ON ALL PORTS.
*                (M1) = SAVED PORT SELECT VALUE.
*                MAINTENANCE REGISTER INTERLOCKED.
*
*         CALLS  RMR.
*
*         MACROS LOCKMR, READMR, WRITMR.


 DBC      SUBR               ENTRY/EXIT
          LOCKMR SET
          LDM    S0FLG
          NJP    DBC10       IF S0/S0E
          LDK    MBRG
          STD    RN
          LDM    ELCM
          RJM    RMR         READ MEMORY BOUNDS REGISTER
          LDM    RDATA
          STD    M1          SAVE PORT SELECT
          LDN    0
          STM    RDATA       DISABLE ALL PORTS
          WRITMR RDATA,ELCM
          LJM    DBCX        RETURN

 DBC10    LDC    S0MBD       INITIALIZE REGISTER LOOP
          STD    RN
 DBC20    READMR RDATA,ELCM  READ NEXT REGISTER
          LDM    RDATA+2
          LPN    1
          SHN    5
          STD    M1          SAVE BIT 23
          LDM    RDATA+2
          SCN    1           CLEAR BIT 23
          STM    RDATA+2
          LDM    RDATA+3
          SHN    -3
          RAD    M1          ADD BITS 24 - 28 TO SAVED SELECT BITS
          LDM    RDATA+3
          LPN    7           CLEAR BITS 24 - 28
          STM    RDATA+3
          WRITMR RDATA,ELCM  REWRITE REGISTER
          AOD    RN          ADVANCE TO NEXT REGISTER
          LMC    S0MBD+0#10
          NJP    DBC20       IF MORE BOUNDS REGISTERS TO PROCESS
          LJM    DBCX        RETURN
 EBC      SPACE  4,10
**        EBC - ENABLE BOUNDS CHECKING
*
*         ENTRY  MEMORY BOUNDS DISABLED.
*                (M1) = SAVED PORT SELECT.
*                MAINTENANCE REGISTER INTERLOCKED.
*
*         EXIT   MEMORY BOUNDS RESTORED TO PREVIOUS VALUE.
*                MAINTENANCE REGISTER INTERLOCK CLEARED.
*
*         MACROS LOCKMR, READMR, WRITMR.


 EBC      SUBR               ENTRY/EXIT
          LDM    S0FLG
          NJP    EBC10       IF S0/S0E
          LDK    MBRG
          STD    RN
          LDM    ELCM
          RJM    RMR         READ MEMORY BOUNDS REGISTER
          LDD    M1
          STM    RDATA       RESTORE PORT SELECT
          WRITMR RDATA,ELCM
          LJM    EBC30       RELEASE INTERLOCK

 EBC10    LDC    S0MBD       INITIALIZE REGISTER LOOP
          STD    RN

*         NOTE - CODE ASSUMES THAT PORT SELECT IS IDENTICAL FOR ALL.

 EBC20    READMR RDATA,ELCM  READ NEXT REGISTER
          LDD    M1          GET PORT ENABLE BITS
          SHN    -5
          RAM    RDATA+2     RESTORE BIT 23
          LDM    RDATA+3
          LPN    7           ENSURE CLEAR
          STM    RDATA+3
          LDD    M1          GET ENABLE BITS
          LPN    0#1F        JUST 24 - 28
          SHN    3           POSITION
          RAM    RDATA+3     RESTORE BITS
          WRITMR RDATA,ELCM
          AOD    RN          ADVANCE TO NEXT REGISTER
          LMC    S0MBD+0#10
          NJP    EBC20       IF MORE BOUNDS REGISTERS TO PROCESS
 EBC30    LOCKMR CLEAR       RELEASE INTERLOCK
          LJM    EBCX        RETURN
 EUC      SPACE  4,10
**        EUC - ENSURE UPDATE ERROR CONTROL FLAG CLEAR.
*
*         EXIT   UPDATE ERROR CONTROL FLAG CLEAR.
*
*         CALLS  RWE.


 EUC      SUBR               ENTRY/EXIT
          RJM    RWE         READ FIRST WORD OF DFT ECR RECORD
          LDDL   W3          CHECK UPDATE FLAG
          LPN    2
          ZJN    EUCX        IF UPDATE FLAG CLEAR
          LJM    CMDE        RETURN ERROR
 FEB      SPACE  4,10
**        FEB - FIND ELEMENT BUFFER.
*
*         ENTRY  (ECEI) = ELEMENT ID PARAMETER.
*                (W4) = ELEMENT SIZE.
*                (W5) = NUMBER OF ELEMENTS.
*
*         EXIT   (A + R-REGISTER) = CM ADDRESS OF ELEMENT FIRST WORD.
*                (CM) = R-REGISTER OFFSET.
*                (W4) = ELEMENT SIZE.
*                TO *CMDF* IF ELEMENT NOT FOUND.
*                TO *CMDE* IF ELEMENT ID = DFTREID.
*
*         USES   W5, W0 - W3.
*
*         MACROS FINDCM.


 FEB      SUBR               ENTRY/EXIT
          LDML   ECEI
          LMN    DFTREID
          ZJP    CMDE        IF ELEMENT MAY NOT BE CHANGED
          FINDCM ECR         FIND ECR WITHIN THE CIP DIRECTORY
          STDL   CM          SAVE OFFSET
          LDN    3           SKIP HEADER WORDS
          RADL   CM

*         LOOP UNTIL ELEMENT FOUND OR END OF TABLE.

 FEB20    LDDL   CM
          ADC    RR
          CRDL   W0
          LDDL   W0          COMPARE ID'S
          LPC    0#FF
          LMM    ECEI
          ZJN    FEB30       IF ELEMENT FOUND
          LDDL   W4          ADVANCE TO NEXT ELEMENT
          RADL   CM
          SODL   W5          DECREMENT NUMBER OF ELEMENTS
          NJN    FEB20       IF MORE ELEMENTS TO CHECK
          PRINT  FEBB+CRLF   *ELEMENT ID NOT FOUND*
          LJM    CMDF        RETURN

*         SET UP THE ELEMENT ADDRESS.

 FEB30    LDDL   CM
          ADC    RR
          LJM    FEBX        RETURN
 FEBB     ASCII  (ELEMENT ID NOT FOUND)
 ECEB     SPACE  4,10
**        ECEB - ECR ELEMENT BUFFER.


 ECEB     BSS    ECRES       ECR ELEMENT BUFFER
 RWE      SPACE  4,10
**        RWE - READ FIRST WORD OF DFT ECR RECORD.
*
*         EXIT   (CM - CM+3) = DFT ECR POINTER.
*                (W2 - W5) = FIRST WORD OF DFT ECR RECORD.
*
*         CALLS  FDP.


 RWE      SUBR               ENTRY/EXIT
          RJM    FDP         FETCH DFT POINTER
          NJN    RWE10       IF DFT BLOCK EXISTS
          PRINT  RWEA+CRLF   *NO DFT*
          LJM    CMDF        RETURN

 RWE10    LRD    DP          SET R-REGISTER TO DFT BLOCK
          LDM    DFTO        READ ECR POINTER
          ADC    RR+ECRP
          CRDL   CM          : A : R : R : LENGTH :
          LRD    CM+1        READ FIRST WORD OF ECR
          LDDL   CM
          ADC    RR
          CRDL   W2          (W4) = ENTRY SIZE, (W5) = NUMBER OF ELEMENTS
          UJN    RWEX        RETURN

 RWEA     ASCII  (NO DFT)
 SCV      SPACE  4,10
**        SCV - STORE CM WORD VALUE.
*
*         ENTRY  (A) = FIRST PP WORD ADDRESS AT WHICH TO STORE.
*                (UEP2 - UEP2+3) = CM WORD TO STORE.
*
*         USES   T1.
*
*         MACROS STILAO.


 SCV      SUBR               ENTRY/EXIT
          STDL   T1          SAVE BYTE ADDRESS
          LDML   UEP2        STORE CM WORD
          STILAO T1
          LDML   UEP2+1
          STILAO T1
          LDML   UEP2+2
          STILAO T1
          LDML   UEP2+3
          STILAO T1
          UJN    SCVX        RETURN
          SPACE  4,10
*         COMMON DECKS.


*COPY     CTP$SCI_MDD_DFT_CMDS_COMMON

          OVERFLOW  SCMT     CHECK FOR OVERFLOW
          OVERLAY  (MDD *BYE* COMMAND)
 BYE      SPACE  4,10
**        BYE - RETURN MDD PP.
*
*         EXIT   TO *CMDE* IF COMMAND ILLEGAL.
*                TO *RCP* IF NEED TO RELOAD C170 PP RESIDENT.
*                *D8WC* IN EICB UPDATED WITH OVERLAY, CM/MR WRITE COUNTERS.
*
*         USES   T1, CM - CM+3, W0 - W0+3.
*
*         CALLS  CMP, CSI, CTP, IIB, SPB.


 BYE      ROUTINE

          LRD    IB+1        SET UP R-REGISTER
          RJM    SPB         SET PP BOUNDARY

*         WRITE OVERLAY LOAD, CM WRITE, MR WRITE COUNTERS TO *D8WC*.

          LDN    0           CLEAR UNUSED BITS (0 - 15)
          STDL   CM
          LDML   OVLS        REPORT OVERLAY LOADS
          STDL   CM+1
          LDML   CMWC        REPORT CM WRITES
          STDL   CM+2
          LDML   MRWC        REPORT MR WRITES
          STDL   CM+3
          LDN    D8WC        WRITE COUNTERS TO EICB
          RJM    IIB
          CWDL   CM

*         THE BYE COMMAND IS ILLEGAL IF *MDD* WAS INITIATED AT CTI TIME.

          LDN    D7RS        GET SAVE AREA FWA
          RJM    IIB
          CRDL   W0
          LDDL   W0+1
          SHN    21-17
          PJN    BYE10       IF NOT CTI TIME INITIATED
 BYE5     LJM    CMDE        COMMAND ILLEGAL

*         IF THERE IS NO PARAMETER TABLE DEFINED, THEN THIS COPY OF *SCI* IS
*         RUNNING FOR 170 *MDD* MODE ONLY OR FOR CTI/*MDD* (IN THE CASE OF AN
*         OLD VERSION OF THE C170 OS).  IF RUNNING FOR 170 *MDD* MODE, CLEAR
*         THE TWO PORT MUX RESERVES AND RELOAD THE 170 PP RESIDENT.  IF RUNNING
*         FOR CTI/*MDD*, THE COMMAND IS ILLEGAL.

 BYE10    LDD    SB
          ADD    SB+1
          ZJN    BYE15       IF PARAMETER TABLE NOT DEFINED

*         IF *SCD* MODE IS ACTIVE ON THE SAME PORT, SIMPLY DEACTIVATE *MDD* MODE.
*         IF *SCD* MODE IS ACTIVE ON THE OTHER PORT, CLEAR PORT RESERVES AND
*         DEACTIVATE *MDD* MODE.  IF *SCD* MODE NOT ACTIVE, CLEAR PORT RESERVES,
*         DEACTIVATE *MDD* AND RELOAD PP RESIDENT.

          LDM    SCMT+PTDB.
          NJN    BYE20       IF *SCD* MODE ACTIVE
*         LDN    0           CLEAR PP NUMBER
          RJM    CMP         CLEAR *MDD* DATA IN *SCI* PARAMETER TABLE
 BYE15    RJM    CSI         CHECK C170 PP RESIDENT SAVE AREA INTERLOCK
          NJN    BYE5        IF THIS PP DOES NOT HOLD THE INTERLOCK
          RJM    CTP         CLEAR RESERVES
          LJM    RCP         RELOAD PP RESIDENT

 BYE20    LPN    1           ISOLATE *SCD* PORT NUMBER
          STD    T1
          LDM    MDMT+PTDB.  COMPARE *SCD* AND *MDD* PORTS
          LPN    1
          LMD    T1
          ZJN    BYE25       IF *SCD* AND *MDD* ON THE SAME PORT
          RJM    CTP         CLEAR TWO PORT MUX RESERVE
 BYE25    LDN    1           DO NOT CLEAR PP NUMBER
          RJM    CMP         CLEAR *MDD* DATA IN *SCI* PARAMETER TABLE
          LJM    CMDF        RETURN
 PHD      SPACE  4,10
**        PHD - PRINT HEADER.
*
*         SETS UP THE TERMINAL FOR MDD USE.
*
*         EXIT   (MDMT+RTNP.) = *MDD*.
*
*         CALLS  DLY, SCF.
*
*         MACROS PRINT.


 PHD      ROUTINE

          LDN    MX          RESERVE CHANNEL 15
          RJM    SCF
          LDM    MDMT+PTDB.  GET PORT NUMBER
          LPN    1
          ADC    MXPT        ADD IN PORT SELECT FUNCTION
          STM    PHDA
          PSN                NEED ON S0/S0E
          FNC    MXPT+0,MX   SELECT DESIRED PORT
 PHDA     EQU    *-1
          FNC    MXSS,MX     GET PORT STATUS
          ACN    MX
          IAN    MX
          DCN    MX
          SHN    21-DSRB     CHECK DATA SET READY
          MJN    PHD1        IF DATA SET READY
          FNC    MXDR+1,MX   SET DATA TERMINAL READY
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE
          LDC    1000D       DELAY FOR 1 SECOND, NEEDED FOR PC CONSOLE
          RJM    DLY
 PHD1     FNC    MXDM,MX     DESELECT PORT
          AJM    *,MX        WAIT FOR FUNCTION COMPLETE
          CCF    *,MX        RELEASE TPM
          AOM    OVLP        INHIBIT OVERLAY RELOAD
          PRINT  PHDB+CRLF   OUTPUT TERMINAL SETUP AND FIRST TITLE LINE
          PRINT  PHDC+CRLF   OUTPUT SECOND TITLE LINE
          LDN    0
          STM    OVLP        ALLOW OVERLAY RELOAD
          LDC    MDD
          STI    PT          PUT MAIN ROUTINE ADDRESS IN RTNP.
          LJM    SMPX        RETURN

 PHDB     CON    0#0D0D      TERMINATE ANY MULTIPLE CODE
          CON    0#1E33      DISABLE HOST LOADED CODE
          CON    0#1E12      80 CHARACTER LINE
          CON    0#4812      SCROLLING MODE
          CON    0#180C      CLEAR SCREEN (FOR CDC721 AND CDC751)
          ASCII  (SCI/MDD - Level "SCILVL")
 PHDC     ASCII  (COPYRIGHT FIDES INFORMATION SERVICES. 2003)
 CMP      SPACE  4,10
**        CMP - CLEAR *MDD* DATA IN *SCI* PARAMETER TABLE.
*
*         ENTRY  (A) = 0 IF PP NUMBER SHOULD BE CLEARED.
*                OS BOUNDS SET TO LOWER PP.
*
*         EXIT   *MDD* DATA IN PARAMETER TABLE CLEARED.
*
*         USES   CM - CM+3.
*
*         CALLS  GSI.


 CMP      SUBR               ENTRY/EXIT
          NJN    CMP1        IF PP NUMBER NOT TO BE CLEARED
          LDC    0#C0F       MASK TO CLEAR PP NUMBER
          STM    CMPA
 CMP1     RJM    GSI         GET PARAMETER TABLE INTERLOCK
          LDDL   CM+1        SET CHANGED FLAG
          LPC    0#AFFF
 CMPA     EQU    *-1
*         LPC    0#AC0F      (CLEAR PP NUMBER TOO)
          LMC    0#4000
          STDL   CM+1
          LDN    0           CLEAR *MDD* DATA
          STDL   CM+3
          LDM    SBAO
          LMC    RR
          CWDL   CM          CLEAR DATA AND INTERLOCK
          UJN    CMPX        RETURN
 CSI      SPACE  4,10
**        CSI - CHECK C170 PP RESIDENT SAVE AREA INTERLOCK.
*
*         ENTRY  (W0 - W0+3) = *D7RS*.
*
*         EXIT   (A) = 0 IF THIS PP HOLDS THE SAVE AREA INTERLOCK.


 CSI1     LDN    1

 CSI      SUBR               ENTRY/EXIT
          LDDL   W0+1
          SHN    21-15
          PJN    CSI1        IF NOT C170 *MDD* MODE
          SHN    0-4-21+15   ISOLATE PP NUMBER
          LPN    77
          SBM    PPNO        COMPARE WITH *SCI* PP NUMBER
          UJN    CSIX        RETURN
 CTP      SPACE  4,10
**        CTP - CLEAR TWO PORT MUX RESERVES.
*
*         EXIT   PORT RESERVE CLEARED.
*                PORT ACCESS CLEARED IF NO OTHER PORT REQUEST WAITING.
*
*         USES   T6.
*
*         CALLS  RTR, SCF.
*
*         MACROS LOCKMR, WRITMR.


 CTP      SUBR               ENTRY/EXIT
          LDM    PTDB.,PT    GET PORT NUMBER
          LPN    1
          STD    T6
          LMC    SHNI        SET UP SHIFT INSTRUCTIONS
          STM    CTPB
          LMN    77
          STM    CTPA
          LDN    MX          RESERVE CHANNEL 15
          RJM    SCF
          LOCKMR SET
          RJM    RTR         READ TEST MODE REGISTER
          SHN    **          PORT 0 BEING USED
 CTPA     EQU    *-1
*         SHN    -1          (PORT 1 BEING USED)
          LPN    24
          NJN    CTP1        IF SOMEONE ELSE WAITING

*         CLEAR PORT ACCESS.

          LDD    T6          SELECT PORT
          ADC    MXPT
          FAN    MX
          FNC    MXMC,MX     MASTER CLEAR PORT
          FNC    MXDR,MX     CLEAR DATA TERMINAL READY
          AJM    *,MX        IF FUNCTION NOT COMPLETE
          FNC    MXRTS,MX    CLEAR REQUEST TO SEND
          AJM    *,MX        IF FUNCTION NOT COMPLETE
          FNC    MXDM,MX     DESELECT MULTIPLEXOR
          AJM    *,MX        IF FUNCTION NOT COMPLETE
 CTP1     CCF    *,MX

*         CLEAR RESERVED, REQUESTED AND REREQUESTED BITS IN A0.

          LDML   PTDB.,PT    CLEAR PORT ATTACHED
          STM    PTDB.,PT
          LDN    25          FORM SELECTIVE CLEAR MASK
          SHN    0           PORT 0
 CTPB     EQU    *-1
*         SHN    1           (PORT 1)
          ADC    SCNI
          STM    CTPC
          LDM    RDATA+7
 CTPC     SCN    **
          STM    RDATA+7
          WRITMR RDATA,ELIO,ITMR
          LOCKMR CLEAR
          LDML   EMC0,T6     CLEAR PORT ATTACHED FLAG
          STM    EMC0,T6
          LJM    CTPX        RETURN
*COPY     CTP$SCI_DELAY_ROUTINE
 RCP      SPACE  4,10
**        RCP - RELOAD C170 PP RESIDENT.
*
*         EXIT   EXECUTION IS TRANSFERRED TO THE ADDRESS AT LOCATION 0
*                OF THE SAVED PP RESIDENT.
*
*         USES   CM, W0 - W0+3.
*
*         CALLS  STA.


 RCP      ROUTINE

          LDN    D7RS
          RJM    IIB
          CRDL   W0
          LDDL   W1          GET PP RESIDENT LENGTH
          LPN    17
          SHN    21-3
          STDL   CM
          LDDL   W2
          SHN    -8D
          RADL   CM
          LDDL   W2          ISOLATE SAVE AREA FWA
          LPC    377
          STDL   W2
          RJM    STA         CONVERT ADDRESS TO R-POINTER
          RJM    SPB         ENSURE THIS IS A LOWER PP
          LDD    W6
          ADC    RR
          CRM    0,CM        LOAD PP RESIDENT

          OVERFLOW  SCMT     CHECK FOR OVERFLOW

          ENDX
