MTR 
          IDENT  MTR,0
          PERIPH J
          BASE   MIXED
          SST    FTN,IA,PPR,TH,.EST,SSCP
*COMMENT  MTR - PPU MONITOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  MTR - PP MONITOR.
          SPACE  4
***       MTR - PP MONITOR. 
*         G. R. MANSFIELD.   70/12/13.
*         R. E. TATE.        76/11/10.
          SPACE  4
***              *MTR* IS LOADED INTO PP 0 AT DEAD START TIME AND 
*         REMAINS THERE FOR THE DURATION OF SYSTEM EXECUTION. 
* 
*                *MTR* PERFORMS THE FOLLOWING FUNCTIONS.
*         1.  PROCESS CERTAIN PPU REQUESTS. 
*         2.  ALLOCATION OF CENTRAL MEMORY. 
*         3.  MAINTAIN TIME OF DAY AND DATE.
*         4.  MAINTAIN THE REAL TIME CLOCK. 
*         5.  CHECK THE CONTENTS OF (RA+1) OF ACTIVE CENTRAL
*                PROGRAMS FOR SYSTEM REQUESTS.
* 
*         *MTR* INPUT REGISTER. 
* 
*T, IR    18/ *MTR*,6/ SC,36/0
* 
*         SC     SYSTEM CONTROL POINT NUMBER. 
* 
*         *MTR* MAINTAINS THE FOLLOWING DATA IN THE 
*         STATISTICAL DATA AREA.
* 
*T, MTRS  12/0,12/ CLOCK,12/ MXN,12/ WCT,12/ CCT
* 
*         CLOCK  COUNT OF TIMES *TIM* CALLED AND CLOCK UPDATE MISSED. 
*         MXN    WORST CASE TIME TO DO AN MXN.  (MICRO SECONDS) 
*         WCT    WORST CASE CYCLE TIME.  (MILLISECONDS) 
*         CCT    CURRENT CYCLE TIME.  (MILLISECONDS)
          SPACE  4
*CALL     COMPMAC 
*CALL     COMPIOU 
*CALL     COMSCPS 
*CALL     COMSMSC 
          QUAL   DSL
*CALL     COMSDSL 
          QUAL   *
*CALL     COMSDFT 
*CALL     COMSDST 
*CALL     COMSIOU 
*CALL     COMSJCE 
          LIST   X
*CALL     COMSMTR 
          LIST   *
*CALL     COMSMST 
*CALL     COMSPIM 
*CALL     COMSPRD 
          QUAL   REM
*CALL     COMSREM 
          QUAL   *
*CALL     COMSSSD 
          QUAL   MSP
*CALL     COMSMSP 
          QUAL   *
*CALL     COMSSCR 
          QUAL   IOU
*CALL     COMSIOU 
          QUAL   *
          SPACE  4
****      DIRECT LOCATION ASSIGNENTS. 
  
  
          ORG    0
  
 T0       CON    PRS-1       TEMPORARY STORAGE
  
 PD       EQU    T0 - T0+4   PACKED DATE AND TIME (*PDTL*)
  
 T1       CON    0
 T2       CON    0
 T3       CON    0
 T4       CON    0
 T5       CON    0
 T6       CON    0
 T7       CON    0
  
  
 CM       VFD    60/0        CM WORD BUFFER 
 TI       EQU    CM - CM+4   DISPLAY CODE TIME (*TIML*) 
  
 T8       CON    0           TEMPORARY STORAGE
 MB       CON    0,0         MEMORY BLOCKS - TEMPORARY
  
  
 CN       VFD    60/0        CM WORD BUFFER 
 LS       CON    7777        LATEST SECOND COUNT
 BA       CON    0           BYTE ADDRESS 
 PA       CON    0           PARAMETER ADDRESS
  
  
 CS       VFD    60/0        CONTROL POINT STATUS WORD
  
 RC       CON    RQRL        RECALL STACK POINTER 
 RQ       CON    RQRL        *RQRL* POINTER 
 CF       CON    1           CHANNEL TABLE WRITE FLAG 
  
  
 MM       BSS    0           MEMORY MANAGEMENT
 MM.0     CON    7777        CONTROL POINT MOVING 
 MM.1     CON    0           MOVE INCREMENT 
 MM.2     CON    0           LOWER MOVE CONTROL POINT 
 MM.3     CON    0           CONTROL POINT REQUESTING MOVE
 MM.4     CON    0           PP REQUESTING MOVE 
  
 NP       CON    0           NUMBER OF PPS
 NC       CON    0           NUMBER OF CONTROL POINTS 
  
  
 TM       BSS    0           REAL TIME CLOCK
          VFD    24/0        SECONDS
          VFD    36/0        MILLISECONDS 
  
 MS       CON    0           LAST MICROSECOND COUNT 
 ST       CON    1000D       SECOND TIMER 
  
 FT       CON    4000        CONSTANT 4000
 SC       CON    SCRL        *SCRL* POINTER 
  
  
 OR       VFD    60/0        PP OUTPUT REGISTER 
  
 OF       CON    0           ADDRESS OF FIRST PP OUTPUT REGISTER
 PP       CON    0           CURRENT PP NUMBER
 PR       CON    0           PRIORITY SEEK REQUEST PP 
 ON       CON    1           CONSTANT 1 
 HN       CON    100         CONSTANT 100 
 FR       CON    4           CONSTANT FOUR
 TR       CON    3           CONSTANT 3 
 CP       CON    0           CONTROL POINT NUMBER 
 CY       CON    0           START OF CURRENT CYCLE 
 OA       CON    0           CURRENT OUTPUT REGISTER ADDRESS
  
 ZR       VFD    60/0        CM ZERO WORD (5 LOCATIONS) 
  
  
  
  
*         ASSEMBLY CONSTANTS. 
  
  
 MLSC     EQU    1000D       MICROSECONDS/MILLISECOND 
 CH       EQU    CHSC        S/C REGISTER CHANNEL 
 MR       EQU    CHMR        CYBER 170-8X5 MAINTENANCE CHANNEL
 MXRC     EQU    3           MAXIMUM RECALL REQUESTS PER LOOP 
 MBCS     EQU    6           MEMORY BLOCK CONVERSION SHIFT COUNT
  
  
****
          TITLE  MACRO DEFINITIONS. 
 PPR      SPACE  4
 MSTA     SPACE  4,20 
**        MSTA - GENERATE MST ADDRESS.
* 
*         THIS MACRO IS TO BE USED FOR ALL MST ADDRESSES IN ORDER TO
*         ALLOW FOR EST EXPANSION.
* 
*         MSTA   WORD,PP,DC,EO
*         ENTRY  WORD = MST WORD DESIRED. 
*                PP = PP NUMBER USED TO ACCESS PP TABLE OF MST
*                ADDRESSES (*TPMS*).
*                DC = 5 BYTES OF SCRATCH DIRECT CELLS.
*                EO = IF SUPPLIED, (A) = EST ORDINAL. 
* 
*         EXIT   (A) = CM ADDRESS IF *WORD* SUPPLIED. 
*                (DC - DC+4) = *EQDE* WORD OF EST ENTRY IF *DC* IS
*                              SUPPLIED.
* 
*         IF *DC* IS SUPPLIED MST ADDRESS IS OBTAINED FROM THE
*         EST, AND IF *PP* IS SUPPLIED, IT IS STORED INTO *TPMS*. 
*         IF *DC* IS NOT SUPPLIED, THE MST ADDRESS IS OBTAINED FROM 
*         *TPMS*.  IF *WORD* IS NOT SUPPLIED THE CM ADDRESS IS NOT
*         RETURNED. 
  
  
 MSTA     MACRO  WORD,PP,DC,EO
          MACREF MSTA 
 .M1      IFC    NE,*DC** 
          IFC    EQ,*EO**,1 
          LDD    T5 
          SFA    EST
          ADK    EQDE 
          CRD    DC 
          LDD    DC+4 
          IFC    NE,*PP**,1 
          STM    TPMS,PP
 .M1      ELSE
          LDM    TPMS,PP
 .M1      ENDIF 
          IFC    NE,*WORD**,2 
          SHN    3
          ADN    WORD 
          ENDM
 NSDJ     SPACE  4,10 
**        NSDJ - NO SHARED DEVICES JUMP.
* 
*         THE INSTRUCTION FOLLOWING THIS MACRO IS REPLACED BY A *UJN* 
*         IF THERE ARE NO SHARED DEVICES IN THE SYSTEM. 
* 
*         NSDJ   ADDR 
*         ENTRY  ADDR = ADDRESS TO JUMP TO. 
  
  
 NSDJ     MACRO  A
          LOCAL  AA 
          MACREF NSDJ 
 AA       EQU    *
 NSDJ     RMT 
          CON    AA 
          LOC    AA 
          UJN    A
          LOC    *O 
 NSDJ     RMT 
          ENDM
 N8SJ     SPACE  4,10 
**        N8SJ - NO ISD SUBSYSTEM JUMP. 
* 
*         THE INSTRUCTION FOLLOWING THIS MACRO IS REPLACED BY A *UJN* 
*         IF THERE IS NO ISD SUBSYSTEM PRESENT. 
* 
*         N8SJ   ADDR 
*         ENTRY  ADDR = ADDRESS TO JUMP TO. 
  
  
 N8SJ     MACRO  A
          LOCAL  AA 
          MACREF N8SJ 
 AA       EQU    *
 N8SJ     RMT 
          CON    AA 
          LOC    AA 
          UJN    A
          LOC    *O 
 N8SJ     RMT 
          ENDM
 PPR      SPACE  4,10 
**        PPR - SET PP REQUEST PROCESSOR. 
* 
*         PPR    FCN,PRC
*         ENTRY  *FCN* = FUNCTION NUMBER. 
*                IF *PRC* IS SPECIFIED, *.PRC* IS ADDRESS OF PROCESSOR. 
*                OTHERWISE, *.FCN* IS ADDRESS OF PROCESSOR. 
  
  
 PPR      MACRO  FCN,PRC
          LOCAL  J,K
          MACREF PPR
 J        OCTMIC FCN
          IFC    EQ,$PRC$$
 K        MICRO  1,3, FCN 
 K        MICRO  1,4,*."K"* 
 "K"      CON    FCN
          ORG    *-1
          ELSE   1
 K        MICRO  1,, PRC
 PPR      RMT 
          ORG    TPPR+FCN 
          CON    "K"
 PPR      RMT 
          ENDM
 SUBFUN   SPACE  4,10 
**        SUBFUN - SET SUBFUNCTION PROCESSOR. 
* 
*SFA      SUBFUN FNC,SFN
*         ENTRY  SFA = SUBFUNCTION PROCESSOR ENTRY NAME.
*                FNC = FUNCTION NAME. 
*                SFN = SUBFUNCTION NAME.
* 
*         THIS MACRO BUILDS A TABLE OF SUBFUNCTION PROCESSORS.
*         THE TABLE IS NAMED T*FNC*, AND EACH ENTRY IS THE
*         ADDRESS OF THE PROCESSOR FOR THE SUBFUNCTION. 
  
  
          MACRO  SUBFUN,SFA,FNC,SFN 
          MACREF SUBFUN 
 SFA  BSS    0
          IRP    SFN
 T_FNC    RMT 
          ORG    T_FNC+SFN
          CON    SFA
 T_FNC    RMT 
          IRP 
          ENDM
          TITLE  MAIN PROGRAM.
 MRP      SPACE  4,10 
**        MONITOR RE-ENTRY PROCESSOR. 
  
  
 MRP      CON    0           REENTRY ADDRESS
          LDM    MRP
          STM    TREA,PP
*         UJN    MTR         CHECK NEXT PP
 MTR      SPACE  4,10 
**        MTR - MAIN PROGRAM. 
  
  
 MTR      AOD    PP          GET NEXT OUTPUT REGISTER ADDRESS 
 MTRA     SBN    **          (NUMBER OF NON-CONCURRENT PPS) 
 MTRB     NJN    MTR1        IF NOT LAST NPP
*         UJN    MTR2        (NO CONCURRENT PPS PRESENT)
*         UJN    MTR1        (MONITOR STEP SET) 
          LDN    PPRL        CHECK FOR CPP REQUESTS 
          CRD    CM 
          LDD    CM 
          ZJN    MTR4        IF NO CPP REQUESTS 
          LDN    0           CLEAR CPP REQUEST FLAG 
          STD    CM 
          LDK    PPRL 
          CWD    CM 
 MTR1     SBN    **          (NUMBER OF CONCURRENT PPS) 
 MTRC     EQU    *-1
          ERRPL  10-PPRL     *PPRL* MIGHT EQUAL NUMBER OF CPPS
 MTR2     ZJN    MTR4        IF ALL OUTPUT REGISTERS CHECKED
          LDD    PP          READ PP-S OUTPUT REGISTER
 MTR3     SHN    3
          ADD    OF 
          STD    OA 
          CRD    OR 
          LDM    TREA,PP     GET PP-S REENTRY ADDRESS 
          STM    MTRD 
          LDD    OR 
          ZJN    MTR         IF NO REQUEST
          LJM    **          EXIT TO PROCESSOR
 MTRD     EQU    *-1
  
*         PERFORM SYSTEM FUNCTIONS. 
  
 MTR4     RJM    TIM         UPDATE TIME
          RJM    CRQ         CHECK RECALL QUEUE 
          LDD    CF 
          ZJN    MTR5        IF NO CHANNEL UPDATES
 MTRE     LDN    CTALL       WORD COUNT OF CHANNEL TABLE
*         LDN    NCTAL       (CCH-S NOT PRESENT)
          STD    CF 
          LDC    **          WRITE CHANNEL TABLE
 MTRF     EQU    *-1
          CWM    TCHS,CF
          LDN    0           CLEAR CHANNEL UPDATE FLAG
          STD    CF 
 MTR5     RJM    PHE         PROCESS HARDWARE ERRORS
 MTRG     EQU    *-2
*         UJN    *+2         (6000 SERIES)
  
*         UPDATE STATISTICAL DATA.
  
          TLDC   MTRS,SDA    READ *MTR* STATISTICAL DATA
          CRD    CM 
          LDC    **          UPDATE MISSED CLOCK UPDATE COUNT 
 MTRI     EQU    *-1         (MISSED CLOCK UPDATE COUNT)
          RAD    CM+1 
          LDN    0           RESET CURRENT CYCLE MISSED CLOCK UPDATES 
          STM    MTRI 
          LDD    TM+4        CALCULATE ELAPSED CYCLE TIME 
          SBD    CY 
          PJN    MTR6        IF NO OVERFLOW 
          ADC    10000
 MTR6     STD    CM+4 
          RAD    CY 
          LDD    CM+4 
          SBD    CM+3 
          MJN    MTR7        IF NOT NEW WORST CASE TIME 
          RAD    CM+3        UPDATE WORST CASE CYCLE TIME 
 MTR7     LDC    **          SET WORST CASE *MXN* TIME
 MTRJ     EQU    *-1         (WORST CASE *MXN* TIME)
          SBD    CM+2 
          MJN    MTR8        IF NOT WORST CASE *MXN* TIME 
          RAD    CM+2        UPDATE WORST CASE *MXN* TIME 
 MTR8     LDN    0           RESET CURRENT CYCLE WORST CASE *MXN* TIME
          STM    MTRJ 
          TLDC   MTRS,SDA    WRITE *MTR* STATISTICAL DATA 
          CWD    CM 
  
*         THE CPU SWITCH IS DONE AS LONG AS POSSIBLE AFTER THE CALL 
*         TO *CRQ* TO ALLOW *CPUMTR* TO HAVE FINISHED PROCESSING CPU
*         RECALLS.  THE CALL TO *WXP* IS MADE TO INSURE ANY RECALLS 
*         HAVE COMPLETED. 
  
          RJM    WXP         WAIT RECALL COMPLETION 
          RJM    CCS         CHECK CPU SWITCH 
          RJM    CCP         CHECK CENTRAL PROGRAM
          LDN    0           SET UP OUTPUT REGISTER SCAN
          STD    PP 
          LJM    MTR         LOOP 
          TITLE  TIMEKEEPING. 
 AVC      SPACE  4
**        AVC - ADVANCE CLOCK.
* 
*         ENTRY MUST BE MADE AT LEAST EVERY 4 MILLISECONDS. 
* 
*         IF THE MACHINE IS IN A MULTI-MAINFRAME COMPLEX THE
*         FOLLOWING IS DONE.
*         1)     STATUS FLAG REGISTER BITS. 
*         2)     WRITE REAL TIME CLOCK TO ECS.
*         3)     STATUS MAINFRAMES ECS CLOCKS EVERY 2 SECONDS.
* 
*         USES   CM - CM+4, T3. 
* 
*         CALLS  AVT, CPR, TIM. 
  
  
 AVC4     BSS    0
 AVCB     LDC    10000B+ARTF ADVANCE CPU-1 RUNNING TIME 
*         UJN    AVC5        (1 CPU)
          RJM    CPR
 AVC5     LDD    HN          RESET RETURN 
          STM    AVCA 
          RJM    AVT         ADVANCE TIME OF DAY
 AVCC     LDD    TM+1 
*         UJN    AVCD        (NO MULTI-MAINFRAME PROCESSING)
          LPN    1
          STD    CN+2        SET TIME TO STATUS MAINFRAMES
 AVCD     LDN    ARMF        ADVANCE RUNNING TIME 
*         LDN    ARTF        (NO MULTI-MAINFRAME PROCESSING)
          RJM    CPR
  
 AVC      SUBR               ENTRY/EXIT 
*         UJN    AVC4        (ONE SECOND ELAPSED) 
 AVCA     EQU    *-2
          RJM    TIM         ADVANCE MILLISECOND CLOCK
 AVC1     TLDC   CACX,CMT    READ CPU 0 EXCHANGE REQUEST
*         UJN    AVCX        (1 CPU ONLY) 
 CX1      EQU    *-2
          CRD    CM 
          LDN    0           CLEAR EXCHANGE REQUEST OUTSTANDING FLAG
          STD    T3 
          LDD    CM+1 
          ADD    CM+2 
          ZJN    AVC2        IF NO EXCHANGE REQUEST 
          AOD    T3 
          LDN    PCXF        PROCESS CPU 0 EXCHANGE REQUEST 
          RJM    CPR
 AVC2     TLDC   CACX+1,CMT  READ CPU 1 EXCHANGE REQUEST
          CRD    CM 
          LDD    CM+1 
          ADD    CM+2 
          ZJN    AVC3        IF NO EXCHANGE REQUEST 
          AOD    T3 
          LDC    10000+PCXF  PROCESS CPU 1 EXCHANGE REQUEST 
          RJM    CPR
 AVC3     LDD    T3 
          NJN    AVC1        IF EXCHANGE REQUEST OUTSTANDING
          UJN    AVCX        RETURN 
 TIM      SPACE  4,20 
**        TIM - UPDATE REAL TIME CLOCK. 
* 
*         THE REAL TIME CLOCK IN CM IS UPDATED EVERY MILLISECOND.  THIS 
*         ROUTINE WHEN CALLED FROM OTHER THAN *AVC* IS USED TO MAINTAIN 
*         TIME ACCURACY WITHOUT CALLS TO *CPR*.  ON CYBER 180 AND 
*         CYBER 170-865/875 MAINFRAMES, THE REAL TIME CLOCK IS READ 
*         AFTER EVERY EXCHANGE TO *CPUMTR*, SINCE *CPUMTR* CONTROLS 
*         THE CLOCK USING THE CPU CLOCK.  BETWEEN EXCHANGES, *MTR*
*         MAINTAINS THE REAL TIME CLOCK IN THE USUAL WAY TO ENSURE
*         ACCURACY DURING PERIODS WHEN *CPUMTR* IS INACTIVE.
* 
*         EXIT   (RTCL) UPDATED IN CM IF MILLISECOND OR MORE ELAPSED. 
*                (MTRI) = COUNT OF TIMES CLOCK UPDATE MISSED. 
* 
*         USES   LS, MS, ST, CM - CM+4, TM - TM+4.
* 
*         CALLS  ETA. 
  
  
 TIM5     LDD    HN          RESET RETURN 
          STM    TIMX 
          UJN    TIM1        REENTER LOOP 
  
 TIM6     STD    MS 
          TLDC   /EXPACS/MXP+6,XBP  READ (MA), (A6), (B6) 
          CRD    CM 
          LDD    CM 
          ADD    CM+1 
          NJN    TIMX        IF EXCHANGE PACKAGE NOT READY
          LDC    RTCL 
          CRD    TM          READ THE MILLISECOND CLOCK 
          LDD    TM+1 
          SBD    LS 
          ZJN    TIM8        IF NO CHANGE IN SECONDS
          PJN    TIM7        IF NO OVERFLOW 
          ADC    10000
 TIM7     RJM    ETA         ENABLE TIME ADVANCE
          LDD    TM+1        MARK CURRENT SECONDS 
          STD    LS 
 TIM8     LDN    PSNI        RESET EXCHANGE SWITCH
          STM    TIMB 
  
 TIM      SUBR               ENTRY/EXIT 
 TIM1     IAN    14          READ CLOCK 
 TIMB     PSN                NORMAL 
*         UJN    TIM6        EXCHANGE OUTSTANDING (CPU CLOCK) 
          SBD    MS 
          PJN    TIM2        IF NO OVERFLOW 
          ADC    10000
 TIM2     ADC    -MLSC+35    CYCLES TILL RTCL WRITTEN 
*         ADC    -MLSC+17    (2X PP SPEED)
*         ADC    -MLSC+10    (4X PP SPEED)
 TIMA     EQU    *-1
          MJN    TIMX        IF NOT .GE. 1 MILLISECOND ELAPSED
          SHN    -12
          ZJN    TIM3        IF REMAINDER .LT. 1024 MICROSECONDS
          AOM    MTRI        COUNT MISSED CLOCK UPDATE
          ISTORE TIMX,(UJN TIM5)  SET UP TO LOOP
 TIM3     LDC    MLSC 
          RAD    MS 
          AOD    TM+4        ADVANCE MILLISECOND CLOCK
          SHN    -14
          ZJN    TIM4        IF NO OVERFLOW 
          RAD    TM+3        UPDATE MILLISECONDS ON OVERFLOW
          SHN    -14
          RAD    TM+2 
 TIM4     SOD    ST          UPDATE SECOND TIMER
          NJN    TIM4.1      IF NOT 1 SECOND ELAPSED
          LDN    1           SET INCREMENT FOR *AVT*
          RJM    ETA         ENABLE TIME ADVANCE
          AOD    TM+1        UPDATE SECONDS 
          STD    LS          MARK CURRENT SECONDS 
          SHN    -14
          RAD    TM 
 TIM4.1   LDC    RTCL        UPDATE CLOCK 
          CWD    TM 
          LJM    TIMX        EXIT 
 ETA      SPACE  4
**        ETA - ENABLE TIME ADVANCE.
* 
*         THE UPDATE OF THE DATE AND TIME IS ENABLED, THE 
*         NUMBER OF SECONDS TO ADVANCE IT IS ESTABLISHED, 
*         AND THE SECOND TIMER IS RESET.
* 
*         ENTRY  (A) .EQ. NUMBER OF SECONDS TO ADVANCE TIME.
* 
*         EXIT   TIME ADVANCE IS ENABLED. 
  
  
 ETA      SUBR               ENTRY/EXIT 
          STM    AVTC        SET SECONDS INCREMENT
          ISTORE AVCA,(UJN AVC4)  ENABLE CLOCK UPDATE 
          LDC    1000D       RESET SECOND TIMER 
          STD    ST 
          UJN    ETAX        EXIT 
 AVT      SPACE  4,10 
**        AVT - ADVANCE TIME. 
* 
*         ADVANCES THE TIME OF DAY AND DATE IN RESPONSE TO THE REAL 
*         TIME CLOCK AND STORES THEM IN CENTRAL MEMORY.  ON THE HOUR, 
*         THE TIME PROCESSING FUNCTION CODE IS SET IN THE *1MB* CALL
*         WORD. 
* 
*         EXIT   (PDTL), (JDAL), (TIML), (DTEL) UPDATED IN CMR. 
* 
*         USES   CN, PD - PD+4(T0 - T0+4), TI - TI+4(CM - CM+4).
* 
*         CALLS  CPR. 
  
  
 AVT2     LDN    PDTL        WRITE *PDTL* AND *TIML*
          CWD    PD 
          ADK    TIML-PDTL
          CWD    TI 
          LDD    CN 
          NJN    AVTX        IF NOT TOP OF HOUR 
*         LDN    0           CLEAR BUFFER ADDRESS 
*         STD    CN 
          LDN    ADTF        CALL *CPUMTR* TO COMPLETE THE ADVANCE
          RJM    CPR
  
 AVT      SUBR               ENTRY/EXIT 
          LDN    PDTL        READ *PDTL* AND *TIML* 
          CRD    PD 
          ADK    TIML-PDTL
          CRD    TI 
          LDC    1           ADVANCE SECONDS
 AVTC     EQU    *-1
          STD    CN          INITIALIZE TOP OF HOUR FLAG
          RAD    PD+4 
          LDM    AVTC 
          SHN    6
          RAD    TI+4 
          SHN    -6 
          SBN    1R9+1
 AVT1     MJN    AVT2        IF NOT 10 SECONDS
          SHN    6
          ADC    2R0.        RESET SECONDS
          STD    TI+4 
          AOD    TI+3        ADVANCE 10 SECONDS 
          LPN    77 
          SBN    1R6
          MJN    AVT1        IF NOT 60 SECONDS
          LDN    100-60D     ADVANCE MINUTES, RESET SECONDS 
          RAD    PD+4 
          LDC    2R.0        RESET 10 SECONDS 
          STD    TI+3 
          AOD    TI+2        ADVANCE MINUTES
          LPN    77 
          SBN    1R9+1
          MJN    AVT1        IF NOT 10 MINUTES
          LDN    100+1R0-1R9-1 ADVANCE 10 MINUTES 
          RAD    TI+2 
          SHN    -6 
          SBN    1R6
          MJN    AVT1        IF NOT 60 MINUTES
          LDM    PHED+2 
          SCN    SPTP 
 AVTA     LMN    SPTP        SET TIME PROCESSING FUNCTION FOR *1MB* 
*         LMN    0           (NO TIME CALL FOR C70 NON-SIMULATION)
          ERRNZ  SPTP-1      (ERROR IF TIME FUNCTION VALUE CHANGES) 
          STM    PHED+2 
          LDN    0           CLEAR BUFFER ADDRESS 
          STD    CN 
          LJM    AVT2        CALL *CPUMTR* TO COMPLETE THE ADVANCE
          TITLE RECALL CRITERION PROCESSING.
 CRQ      SPACE  4,10 
**        CRQ - CHECK RECALL CRITERION. 
* 
*         THIS ROUTINE PROCESSED UP TO *MXRC* ENTRIES OF THE RECALL 
*         REQUEST QUEUE.  EACH ENTRY IS CHECKED TO SEE IF THE 
*         RECALL CRITERION HAS BEEN SATISFIED.  IF IT HAS, *CPUMTR* IS
*         CALLED TO BRING THE REQUEST OUT OF RECALL.
* 
*         CALLS  CPR, RCP.
  
  
 CRQ6     LDD    CN+2        CHECK REQUEST
          LPN    77 
          LMN    CRCW-100 
          ERRNG  CRCW-100    *CRCW* MUST BE .GE. 100
          ZJN    CRQ7        IF CPU IN RECALL 
          LDC    10000+PRQF 
          RJM    CPR
          UJN    CRQ3        CHECK NEXT REQUEST 
  
 CRQ7     RJM    RCP         RECALL CPU 
  
 CRQ      SUBR               ENTRY/EXIT 
          LDN    MXRC        SET MAXIMUM NUMBER OF REQUESTS TO PROCESS
          STD    T3 
          LDD    RC 
          LMD    RQ 
          NJN    CRQ4        IF NOT POINTER WORD
          AOD    T3 
  
*         THIS CODE IS USED TO RESET THE LIST POINTER TO THE
*         BEGINNING IN THE INFREQUENT EVENT THAT *MTR* TRIES
*         TO USE A BAD POINTER, WHICH IS USUALLY CAUSED BY
*         *CPUMTR* MAKING CHANGES IN THE LIST WHILE *MTR* IS
*         SCANNING IT.
  
 CRQ2     LDD    RQ          RESET TO START OF LIST 
          CRD    CM 
          LDD    CM+4        SET TO PROCESS FIRST ENTRY 
          STD    RC 
 CRQ3     SOD    T3 
          MJN    CRQX        IF LIMIT OF ENTRIES TO PROCESS 
 CRQ4     LDD    RC 
 CRQ5     CRD    CM 
          STD    CN+2 
          LDD    CM+4        SET NEXT ENTRY 
          STD    RC 
          SCN    17 
          ZJN    CRQ2        IF END OF LIST 
  
*         THE FOLLOWING LOGIC IS DEPENDENT ON THE RECALL TYPES BEING
*         IN A CERTAIN ORDER. 
  
          ERRNZ  PCBF-1      LOGIC REQUIRES THIS VALUE
          ERRNZ  PTRF-2      LOGIC REQUIRES THIS VALUE
          ERRNZ  PTMF-3      LOGIC REQUIRES THIS VALUE
  
          LDD    CM 
          SBN    PTMF 
          ZJN    PTM         IF TIMED RECALL
          PJN    CRQ2        IF ILLEGAL RECALL CRITERION
          ADN    -PCBF+PTMF 
 CRQA     ZJN    PCB         IF PROCESS COMPLETION BIT
*         ZJN    PCB3        (CME PRESENT)
          MJN    CRQ2        IF NOT TIMED RECALL
 PTM      SPACE  4,10 
**        PTM - TIMED RECALL PROCESSOR. 
* 
*T, CM    12/  PTMF,36/  RT,12/  LK 
*         RT     RECALL TIME. 
*         LK     NEXT RECALL ENTRY. 
  
  
 PTM      LDD    TM+2 
          SBD    CM+1 
          NJN    PTM1        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+3 
          SBD    CM+2 
          NJN    PTM1        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+4 
          SBD    CM+3 
 PTM1     MJN    PTM3        IF NOT TIME TO RECALL REQUEST
 PTM2     LJM    CRQ6        RECALL REQUEST 
  
 PTM3     LDD    CM 
          LMN    PTRF 
          ZJN    PCB2        IF *PTRF* ENTRY PRESENT
          LDD    RQ          RESET POINTER TO START OF LIST 
          STD    RC 
          LJM    CRQX        RETURN 
 PCB      SPACE  4,10 
**        PCB - COMPLETION BIT PROCESSOR. 
* 
*T, CM    12/  PCBF,12/,24/  AD,12/  LK 
*         AD     ADDRESS OF WORD TO CHECK COMPLETION BIT. 
*         LK     NEXT RECALL ENTRY. 
  
  
 PCB      LDD    CM+2        CHECK COMPLETION BIT 
 PCB1     SHN    14 
          ADD    CM+3 
          CRD    OR 
          LDD    OR+4 
          LPN    1
          NJN    PTM2        IF COMPLETE
 PCB2     LJM    CRQ3        CHECK NEXT REQUEST 
  
*         COMPLETION BIT PROCESSOR FOR CME MAINFRAMES.
  
 PCB3     LDD    CM+2        SET R-REGISTER TO UPPER 12 BITS
          SHN    6
          STD    OR+1 
          SHN    -14
          STD    OR 
          LDC    0           GET UPPER HALF OF MACHINE SIZE/100B
 PCBA     EQU    *-1
          SBD    OR 
          MJN    PCB2        IF ADDRESS .GT. MACHINE SIZE 
          NJN    PCB4        IF ADDRESS .LT. MACHINE SIZE 
          LDD    CM+3 
          SHN    -6 
          ADD    OR+1 
          STD    T0 
          LDC    0           GET LOWER HALF OF MACHINE SIZE/100B
 PCBB     EQU    *-1
          SBD    T0 
          MJN    PCB2        IF ADDRESS .GT. MACHINE SIZE 
          ZJN    PCB2        IF ADDRESS .EQ. MACHINE SIZE 
 PCB4     LRD    OR          LOAD R-REGISTER
          LDN    40          SET R-REGISTER BIT IN A
          UJN    PCB1        READ COMPLETION ADDRESS
          TITLE  PROCESS HARDWARE ERRORS. 
 PHE      SPACE  4,20 
**        PHE - PROCESS HARDWARE ERRORS.
* 
*         EXIT   (A) = 0 IF *1MB* CALL NOT REQUIRED.
*                    = 1 IF *1MB* WAS CALLED OR WAS ALREADY CALLED. 
* 
*         USES   CP, T4, CM - CM+4, CS - CS+4.
* 
*         CALLS  FTN, ODW, PSE. 
* 
*         NOTE   *1MB* IS CALLED IF ONE OR MORE OF THE FOLLOWING
*                CONDITIONS HAVE BEEN DETECTED WHEN CHECKING THE
*                S/C REGISTERS AND THE *1MB* INHIBIT BIT IS NOT SET.
*                1)  A UNIQUE SINGLE BIT SECDED ERROR HAS OCCURRED. 
*                2)  ERRORS OTHER THAN UNIQUE SINGLE BIT SECDED 
*                    ERRORS HAVE OCCURRED.
*                3)  TOP-OF-HOUR PROCESSING HAS BEEN SPECIFIED. 
* 
*                *1MB* IS CALLED FOR MAINTENANCE REGISTER PROCESSING
*                AND TIME PROCESSING IF THE MACHINE IS A CYBER 180. 
  
  
 PHE      SUBR               ENTRY/EXIT 
  
*         CHECK CYBER 180 MAINTENANCE REGISTERS.
* 
*         NOTE   THE FOLLWING CODE IS ALTERED BY *PRESET* TO PROCESS
*                HARDWARE ERRORS ON VARIOUS MAINFRAMES. 
  
  
 PHEA     LDC    **          (ADDRESS OF *DFT* CONTROL WORD)
          CRD    CM          READ *DFT* CONTROL WORD
 PHEF     LDC    **          (ADDRESS OF NOS REQUEST HEADER)
          CRD    CS 
          LDD    CM+4 
          SHN    21-2 
          MJN    PHE0        IF NOT DEDICATED *DFT* 
          LDD    CM+4 
          LPN    1
          UJN    PHE3        CHECK FOR *1MB* CALL 
  
 PHE0     SCF    PHEX,MR     IF CHANNEL RESERVED BY ANOTHER PP
          FNC    /IOU/MRSS,MR  SUMMARY STATUS 
          IJM    PHE1,MR     IF CHANNEL RESPONDED TO FUNCTION 
          DCN    MR+40
          CCF    *,MR 
          UJN    PHEX        RETURN 
  
 PHE1     ACN    MR 
          IAN    MR          READ SUMMARY STATUS
          DCN    MR+40
          CFM    PHE2,MR     IF NO ERRORS OCCURRED
          LDN    1           ERROR IN READING SS REGISTER 
 PHE2     CCF    *,MR 
*         UJN    PHE3        PROCESS *1MB* CALL 
  
*         ACCESS CYBER 70, 170, 700 SERIES AND 865/875 S/C REGISTER.
  
 PHEE     RMT 
          LOC    PHEA 
          LDC    FCTE        TEST ERROR FUNCTION
*         LDC    FCTB        (CYBER 70 NON-SCR SIMULATION)
          FJM    PHEX,CH     IF CHANNEL HUNG FULL 
*         FJM    PHEX,15     (CYBER 70) 
          RJM    ODW
          UJN    PHE3        SAVE ERROR STATUS
          LOC    *O 
 PHEE     RMT 
  
*         SAVE ERROR PRESENT STATUS.
*         CHECK IF *1MB* CALL IS NEEDED.
  
 PHE3     STD    T0          SAVE ERROR STATUS
 PHEG     ADD    CS+4        INCLUDE *DFT* REQUEST PRESENT STATUS 
*         PSN                (NON-CYBER 180 MAINFRAME)
          ADM    PHED+2 
          ZJN    PHE4.1      IF *1MB* CALL NOT REQUIRED 
          LDD    SC          CHECK INHIBIT BIT
          CRD    CS 
          LDD    CS 
          SHN    0-13 
          NJN    PHE4.1      IF *1MB* ALREADY CALLED
          LDD    T0          GET ERROR STATUS 
          UJN    PHE5        PROCESS CYBER 180 ERROR
*         ZJN    PHE5        (CYBER 170, 865/875 ERROR/TIME PROCESSING) 
*         UJN    PHE5        (CYBER 70 AND NO SIMULATION) 
 PHEB     EQU    *-1
  
          RJM    PSE         PROCESS SINGLE BIT ERRORS
          LDC    FCTE        TEST FOR OTHER ERRORS
          RJM    ODW
          STD    T4 
          LDC    FCCL+DSBL   ENABLE SINGLE BIT LOGGING
          RJM    ODW
          UJN    PHE4        TEST FOR NEED TO CALL *1MB*
  
*         PSN                (CYBER 176)
 PHEC     EQU    *-1
          LDC    FCCL+DLSL   ENABLE 176 LCME SINGLE BIT LOGGING 
          RJM    ODW
 PHE4     LDM    PHED+2      TEST FOR NEED TO CALL *1MB*
          ADD    T4 
          NJN    PHE5        IF TIME/ERROR PROCESSING REQUIRED
 PHE4.1   LJM    PHEX        RETURN 
  
*         CALL *1MB* VIA *1MP*. 
  
 PHE5     LDD    FT          SET INHIBIT BIT
          RAD    CS 
          LDD    SC 
          CWD    CS 
          LDD    NC          SYSTEM CONTROL POINT NUMBER
          STD    CP 
          LDD    OF          PP0 OUTPUT REGISTER ADDRESS
          ADN    1
          CWM    PHED,ON     WRITE PP CALL TO MESSAGE BUFFER
          LDN    0
          STD    CM+1 
          MONITOR  RPPM      REQUEST PP 
          EXECUTE  1MP,=
*         LDN    SPLG        RESTORE LOGGING FUNCTION 
          ERRNZ  SPLG        CODE DEPENDS ON VALUE
          STM    PHED+2 
          STM    PHED+4 
          LDN    1           SET ERROR FOUND
          UJN    PHE4.1      RETURN 
  
 PHED     VFD    18/3L1MP,6/**,12/0,24/0
 PSE      SPACE  4,10 
**        PSE - PROCESS SINGLE BIT ERRORS.
* 
*         ENTRY  (PSEA) = CORRECT MAINFRAME TABLE INDEX.
* 
*         CALLS  BIS, ODW.
  
  
 PSE      SUBR               ENTRY/EXIT 
          LDC    FCSB+DSBL   DISABLE CM SINGLE BIT LOGGING
          RJM    ODW
          LDC    FCTB+SECD   TEST FOR SECDED ERROR
          RJM    ODW
          ZJN    PSE1        IF NO SECDED ERROR 
          LDC    FCTB+SDSC   TEST FOR DOUBLE BIT ERROR
          RJM    ODW
          NJN    PSE1        IF DOUBLE BIT ERROR
 PSEA     LDN    0           PASS MAINFRAME TABLE INDEX 
*         LDN    1           (CYBER 176)
          RJM    BIS         SEARCH FOR MATCHING IDENTIFIER 
 PSE1     UJN    PSEX        RETURN 
*         PSN                (CYBER 176)
 PSEB     EQU    *-1
  
*         PROCESS CYBER 176 LCM ERRORS. 
  
          LDC    FCSB+DLSL   DISABLE LCME SINGLE BIT LOGGING
          RJM    ODW
          LDC    FCTB+LSCD   TEST FOR LCME SECDED ERROR 
          RJM    ODW
          ZJN    PSEX        IF NO LCME SECDED ERROR
          LDC    FCTB+LDSC   TEST FOR LCME DOUBLE SECDED ERROR
          RJM    ODW
          NJN    PSE2        IF DOUBLE BIT ERROR
          LDN    UIDL        ADD OFFSET FOR LCME ID TABLE 
          RAM    BISD 
          LDN    2           LOAD IDENTIFIER FOR 176 LCME 
          RJM    BIS         SEARCH FOR MATCHING IDENTIFIER 
          LCN    UIDL        RESTORE OFFSET FOR CM ID TABLE 
          RAM    BISD 
 PSE2     LJM    PSEX        EXIT 
 ODW      SPACE  4,10 
**        ODW - OUTPUT DESCRIPTOR WORD. 
* 
*         ENTRY  (A) = DESCRIPTOR WORD. 
* 
*         EXIT   (A) = SCR REPLY WORD.
  
  
 ODW      SUBR               ENTRY/EXIT 
          OAN    CHSC        OUTPUT DESCRIPTOR WORD 
*         OAN    15          (CYBER 70) 
 ODWA     EQU    *-1
          IAN    CHSC        INPUT SCR REPLY WORD 
*         IAN    15          (CYBER 70) 
 ODWB     EQU    *-1
          UJN    ODWX        EXIT 
 BIS      SPACE  4,10 
**        BIS - BUILD ID AND SEARCH TABLE.
* 
*         ENTRY  (A) = 0 - BUILD ID FOR CYBER 170 AND 865/875.
*                      1 - BUILD ID FOR 176 CM. 
*                      2 - BUILD ID FOR 176 LCME. 
* 
*         EXIT   (CM-CM+4) = ERROR COUNTS IN *CECL* UPDATED.
* 
*         USES   T1, T2, T4, T6, T7, CM - CM+4, CN - CN+4, CS - CS+4. 
* 
*         CALLS  ODW. 
  
  
 BIS8     AOD    CM+4        INITIALIZE ID ERROR COUNT
          LDD    T6          STORE UNIQUE ID INTO TABLE 
          SHN    14 
          ADD    T4 
          CWD    CM 
          LDD    T2          SET APPROPRIATE FUNCTION BIT 
          LMN    2
          ZJN    BIS9        IF LCME SECDED ERROR 
          LDN    SPCS-SPLS   SET CM SECDED ERROR FUNCTION BIT 
 BIS9     ADN    SPLS        SET LCME SECDED ERROR FUNCTION BIT 
          RAM    PHED+2 
  
 BIS      SUBR               ENTRY/EXIT 
          STD    T2          SAVE ID BUILD TYPE 
          LDM    TBIS,T2     SAVE FWA OF ID BUILD ROUTINE 
          STD    T7 
          LDN    ZERL        CLEAR FIELD FOR BUILDING ID
          CRD    CM 
  
*         BUILD ID FOR APPROPRIATE MACHINE. 
  
          LDN    CM          INITIALIZE ID BUILD ADDRESS
          STD    T6 
 BIS1     AOD    T7 
          LDI    T7          GET NEXT SCR WORD INFORMATION
          ZJN    BIS2        IF ID BUILD COMPLETE 
          STM    BISA        SET APPROPRIATE MASK FOR SCR BYTES 
          AOD    T7 
          LDI    T7          GET SHIFT COUNT
          LPN    77 
          ADC    SHNI        BUILD SHIFT INSTRUCTION
          STM    BISB 
          LDI    T7          GET SCR WORD FROM TABLE AND READ 
          SHN    -6 
          LPN    37 
          IFNE   FCRD,0,1    (ADJUST IF READ FUNCTION CHANGES)
          ADC    FCRD 
          RJM    ODW
          LPC    *
 BISA     EQU    *-1         MASK OFF DESIRED SCR BITS
          SHN    0
 BISB     EQU    *-1         POSITION FOR ID BIT MERGE
          RAI    T6          MERGE ID BITS
          LDI    T7          CONTINUE ID BUILD IN APPROPRIATE BYTE
          SHN    0-13 
          RAD    T6 
          UJN    BIS1        GET NEXT SCR WORD
  
*         SCAN UNIQUE ID TABLE BACKWARDS TO SEE IF
*         THERE IS ALREADY AN ENTRY FOR THIS ERROR. 
  
 BIS2     LDN    UIDL        UNIQUE ID TABLE LENGTH 
          STD    T1 
 BIS3     SOD    T1          DECREMENT CURRENT ENTRY OFFSET 
          MJN    BIS5        IF SCAN COMPLETE 
          ADC    **          FWA OF UNIQUE ID TABLE 
 BISC     EQU    *-1
 BISD     ADN    0           ADD OFFSET FOR APPROPRIATE ID TABLE
          CRD    CN 
          STD    T4          STORE UNIQUE ID TABLE ADDRESS
          SHN    -14
          STD    T6 
          LDD    CN          TEST IF ENTRY IS AVAILABLE 
          ADD    CN+1 
          ADD    CN+2 
          NJN    BIS4        IF LOCATION CONTAINS AN IDENTIFIER 
          LJM    BIS8        IF LOCATION IS AVAILABLE 
  
 BIS4     LDD    CM          TEST IF BYTE 0 MATCHES 
          LMD    CN 
          NJN    BIS3        IF NO MATCH
          LDD    CM+1        TEST IF BYTE 1 MATCHES 
          LMD    CN+1 
          NJN    BIS3        IF NO MATCH
          LDD    CM+2        TEST IF BYTE 2 MATCHES 
          LMD    CN+2 
          NJN    BIS3        IF NO MATCH
  
*         THE NEWLY-BUILT IDENTIFIER MATCHES A TABLE ENTRY. 
  
          LDN    77 
          LMD    CN+4 
          ZJN    BIS5        IF REACHED THRESHOLD 
          AOD    CN+4        INCREMENT COUNTER
          LDD    T6          REWRITE UPDATED ID AND COUNT 
          SHN    14 
          ADD    T4 
          CWD    CN 
  
*         TEST WHICH RANK AND/OR SECDED BITS TO CLEAR.
  
 BIS5     AOD    T7          ISSUE SECDED CLEARING FUNCTION(S)
          LDI    T7 
          RJM    ODW
          AOD    T7 
 BISE     LDI    T7 
*         UJN    BIS6        (CYBER 170 OR 865/875) 
          RJM    ODW         SET C176 CM/LCME RANK II CLEAR 
          AOD    T7 
          LDI    T7          CLEAR C176 CM/LCME RANK II CLEAR 
          RJM    ODW
 BIS6     LDD    T2          INCREMENT APPROPRIATE ERROR COUNT
          SHN    -1 
          ADN    CM+3 
          STD    T2 
          LDK    CECL 
          CRD    CM 
          LDI    T2 
          LMC    7777 
          ZJN    BIS7        IF CM/LCME ERROR COUNT THRESHOLD REACHED 
          AOI    T2 
          LDK    CECL 
          CWD    CM          UPDATE *CECL*
 BIS7     LJM    BISX        RETURN 
  
*         TBIS - TABLE OF ID BUILD ENTRY POINTS.
  
 TBIS     BSS    0
          LOC    0
          CON    BISF-1      BUILD ID FOR LOWER C170 CM.
          CON    BISF-1      BUILD ID FOR C176 CM.
          CON    BISG-1      BUILD ID FOR C176 LCME.
          LOC    *O 
  
*         THE TABLE FIELDS BELOW CONTAIN THE FOLLOWING INFORMATION. 
* 
*         12/MASK, 1/INCR, 5/SCR WORD, 6/SHIFT. 
*         WHERE INCR = 0, IF NO INCREMENT TO NEXT ID CELL.
*                    = 1, IF INCREMENT REQUIRED.
*               SHIFT = BIT ALIGNMENT NEEDED TO MERGE SCR BITS
*                       INTO ID.
* 
*         FOLLOWING THE TERMINATOR FOR EACH ID TYPE ARE THE 
*         ERROR-CLEARING FUNCTION CODES TO BE ISSUED TO THE SCR.
*         EACH FUNCTION USES 12 BITS. 
  
 BISF     BSS    0           C176 CM ID INFORMATION 
          VFD    12/7777,1/1,5/LCMW,6/0 
          VFD    12/77,1/0,5/CMAW,6/6 
          VFD    12/7700,1/1,5/SYNW,6/-6
          VFD    12/60,1/0,5/SYNW,6/6 
          CON    0           C176 CM ID BUILD TERMINATOR
          CON    FCCL+SECD
          CON    FCSB+CCRT
          CON    FCCL+CCRT
 BISFL    EQU    *-BISF      LENGTH OF TABLE
  
*BISF     BSS    0           C170 CM ID INFORMATION 
*         VFD    12/6000,1/0,5/CSEW,6/0 
*         VFD    12/77,1/0,5/CMAW,6/4 
*         VFD    12/7400,1/1,5/SYNW,6/-10 
*         VFD    12/360,1/0,5/SYNW,6/4
*         CON    0           C170 ID BUILD TERMINATOR 
*         CON    FCCL+SECD
*         CON    0           TERMINATOR FOR C170 CLEARING FUNCTIONS 
*         CON    0
  
 BISG     BSS    0           C176 LCME ID INFORMATION 
          VFD    12/377,1/0,5/LSYW,6/4
          VFD    12/1400,1/0,5/LERW,6/-6
          VFD    12/60,1/1,5/LCAW,6/-4
          VFD    12/17,1/0,5/LCAW,6/10
          CON    0           C176 LCME ID BUILD TERMINATOR
          CON    FCCL+LSCD
          CON    FCSB+LCRT
          CON    FCCL+LCRT
          TITLE  PP REQUEST PROCESSING. 
***       PP FUNCTION REQUESTS. 
* 
*                PP FUNCTION REQUESTS ARE MADE TO *MTR* BY PLACING
*         THE FUNCTION CODE IN BYTE 0 OF THE PP-S OUTPUT REGISTER.
*         WHEN THE REQUEST IS COMPLETED, *MTR* CLEARS BYTE 0 OF 
*         THE OUTPUT REGISTER.
          SPACE  4,10 
**        PP REQUEST PROCESSOR. 
*         NOTE - FOLLOWING CODE MUST BE IN ORDER. 
 HNG      SPACE  4
**        HNG - HANG PPU AND DISPLAY MESSAGE
  
  
 HNGB     DATA   7777        A REGISTER SAVE AREA 
  
 HNG      CON    **          ADDRESS OF CALLER
 HNG1     STM    HNGB        SAVE (A) 
          LDD    OA 
          ADN    6
          CRD    CN 
          LDN    PDTL        SET PACKED DATE AND TIME 
          CRD    CM 
          LDC    2RHN        ADD *HNG/* TO PACKED DATE/TIME 
          STD    CM 
          LDC    2RG/ 
          STD    CM+1 
          LMD    CN+1 
          NJN    HNG2        IF INITIAL DETECTION OF HUNG PP
          LDD    CM 
          LMD    CN 
          ZJN    HNG3        IF NOT INITIAL DETECTION OF HUNG PP
 HNG2     LDD    OA 
          ADN    6
          CWD    CM 
          LDD    OA          ADD PP NAME TO *HUNG PP* MESSAGE 
          SBN    1
          CRD    CM 
          LDD    CM 
          STM    HNGC 
          LDD    CM+1 
          SCN    77 
          STM    HNGC+1 
 HNG3     LDC    MS2W+**     DISPLAY SYSTEM CP MESSAGE
 HNGD     EQU    *-1
          CWM    HNGA,TR
          UJN    DSD1        RETURN 
  
  
 HNGA     DATA   H*HUNG PP - *
 HNGC     DATA   C*XXX*      NAME OF HUNG PP
 DSD      SPACE  4,10 
**        DSD - PROCESS *DSD* REQUEST.
  
  
 DSD      LDC    7000        CHECK REQUEST
          RAD    OR 
          SHN    21-11
          MJN    DSD1        IF PREVIOUSLY PROCESSED
          LDD    OR 
          SBN    CPUM 
          MJN    PPR1        IF MTR FUNCTION
          LDD    OA          WRITE *OR* WITH CLEARED INTERLOCK
          CWD    OR 
          RJM    CPR         PROCESS CPU FUNCTION 
 DSD1     UJN    FNR         FUNCTION RETURN
 PPR      SPACE  4,10 
**        PPR - PROCESS PP REQUEST. 
* 
*         ENTRY  (A) = REQUEST. 
*                (OA) = PP OUTPUT REGISTER ADDRESS. 
*                (OR - OR+4) = PP OUTPUT REGISTER.
* 
*         EXIT   TO FUNCTION PROCESSOR WITH (A) = (OA). 
  
  
 PPR      SBN    CPUM 
 PPRA     EQU    *-1
*         UJN    MSC         (STEP MODE)
          PJN    FNR1        IF NOT AN *MTR* FUNCTION 
 PPR1     LDM    TPPR,OR     SET FUNCTION PROCESSOR 
          STD    T8 
          LDD    OA 
          LJM    0,T8        PROCESS FUNCTION 
 FNZ      SPACE  4
**        FNZ - FUNCTION RETURN TO CLEAR OUTPUT REGISTER. 
  
  
 FNZ      LDD    OA          CLEAR OUTPUT REGISTER
          CWD    ZR 
*         UJN    FNR
 FNR      SPACE  4
**        FNR - FUNCTION RETURN.
  
  
 FNR      RJM    CCP         CHECK CENTRAL PROGRAM
 FNR1     LJM    MTR         RETURN TO MAIN LOOP
 FNC      SPACE  4
**        FNC - FUNCTION RETURN TO CLEAR UPPER BYTE OF *OR*.
  
  
 FNC      LDN    0
 FNC1     STD    OR 
          LDD    OA 
          CWD    OR 
          UJN    FNR         FUNCTION RETURN
 MSC      SPACE  4
**        MSC - MONITOR STEP CONTROL. 
  
  
 MSC      LDD    OA          READ INPUT REGISTER
          SBN    1
          CRD    CM 
          LDN    OR 
          RJM    CFS         CHECK FOR STEP CRITERION 
          NJN    MSC5        IF STEP CRITERION NOT MET
          LDC    7777 
*         LDC    0           (STEP REQUESTED BY *DSD*)
 MSCA     EQU    *-1
          NJN    FNR         IF NOT STEPPED 
          LDD    OA 
          SBD    OF 
          LMC    **          (NEXT PP TO STEP)
 MSCB     EQU    *-1
          ZJN    MSC4        IF THIS PP 
          RJM    SNP         SET NEXT PP TO STEP
 MSC3     UJN    FNR         IGNORE REQUEST 
  
 MSC4     LCN    0           RESET STEP FLAG
          STM    MSCA 
          LDN    10          ADVANCE PP 
          RAM    MSCB 
 MSC5     RJM    TIM         UPDATE TIME
          RJM    SNP         SET NEXT PPU TO STEP 
  
*         PROCESS FUNCTION. 
  
          LDD    OR          CHECK FUNCTION 
          SBN    CPUM 
          PJN    MSC6        IF CPU FUNCTION
          RJM    TIM         UPDATE TIME
          LJM    PPR1        PROCESS REQUEST
  
 MSC6     LDD    OR 
          SHN    0-11 
          LMN    1
          NJN    MSC3        IF NOT *STEP* ONLY 
          LDD    OR          CLEAR FLAGS
          LPC    177
          STD    OR 
          LDD    OA 
          CWD    OR 
          RJM    CPR
          UJN    MSC3        COMPLETE FUNCTION
 SNP      SPACE  4
**        SNP - SET NEXT PP TO STEP.
* 
*         ENTRY  (MSCB) = CURRENT PP. 
* 
*         EXIT   (MSCB) = NEXT PP.
* 
*         USES   T1, T2, T4, CM - CM+4, CN - CN+4.
* 
*         CALLS  CFS. 
  
  
 SNP5     LDN    20 
          UJN    SNP1        RESET PP 2 
  
 SNP      SUBR               ENTRY/EXIT 
          LDN    1           SET PP COUNT 
          STD    T1 
          LDM    MSCB        SET PP 
 SNP1     STD    T2 
 SNP2     STM    MSCB 
          SHN    -3 
          STD    T4          SAVE PP NUMBER 
          LMD    NP 
          ZJN    SNP5        IF LAST PP 
          AOD    T1          ADVANCE PP COUNT 
          LMD    NP 
 SNP3     ZJN    SNPX        IF ALL PP-S CHECKED
          LDD    T2          READ INPUT REGISTER
          ADD    OF 
          CRD    CN 
          SBN    1
          CRD    CM 
          LDD    CM 
          ZJN    SNP4        IF PP NOT ASSIGNED 
          LDD    CN 
          ZJN    SNP4        IF NO FUNCTION REQUEST 
          LDN    CN 
          RJM    CFS         CHECK FOR STEP 
          NJN    SNP4        IF STEP CRITERION NOT MET
          LDM    TREA,T4
          LMC    PPR
          ZJN    SNP3        IF NO REENTRY PROCESSING 
 SNP4     LDN    10          ADVANCE PP 
          RAD    T2 
          UJN    SNP2        LOOP 
          TITLE  PP REQUEST FUNCTION PROCESSORS.
**        NOTE - EXIT CONDITION REFERENCES TO (OR - OR+4) SPECIFY 
*         THE STATUS OF THE PP OUTPUT REGISTER IN CENTRAL MEMORY. 
*         IN ALL CASES, (OR) = 0.  IF A BYTE IS NOT SPECIFIED,
*         THAT BYTE IS NOT CHANGED. 
*         THE DIRECT LOCATIONS *OR - OR+4* MAY DIFFER IN CONTENT
*         FROM THE ACTUAL OUTPUT REGISTER.
 ASCM     SPACE  4,10 
***       *ASCM* IS A *PPR* FUNCTION.  IT IS USED TO TELL PP RESIDENT 
*         ROUTINE *PLL* THAT THE LIBRARY HAS BEEN SEARCHED DURING 
*         ASSIGNMENT OF THE PP.  NO *MTR* PROCESSING IS REQUIRED. 
  
  
          PPR    ASCM,FNR1
 BOTM     SPACE  4,10 
***       *BOTM* IS A *PPR* FUNCTION.  IT IS USED TO TELL PP RESIDENT 
*         ROUTINE *FTN* TO LOAD A BOOTSTRAP PROGRAM.  NO *MTR*
*         PROCESSING IS REQUIRED. 
  
  
          PPR    BOTM,FNR1
 CCHM     SPACE  4,10 
***       CCHM - CHECK CHANNEL. 
* 
*         ASSIGN CHANNEL IF NOT IN USE. 
* 
*         ENTRY 
*T, OR    12/  CCHM,6/  ,1/  C,5/  CH,36/ 
*         C      SET IF CONCURRENT CHANNEL. 
*         CH     CHANNEL NUMBER.
* 
*         EXIT
*T, OR    12/  0,12/  CH,12/  ST,24/
*         CH     CHANNEL ASSIGNED IF ST = 1.
*         BIT 2**5 OF CH SET IF DOWN CHANNEL IN USE BY ANOTHER
*         MAINTENANCE USER. 
*         ST = 1 IF CHANNEL ASSIGNED. 
*         ST = 0 IF CHANNEL NOT ASSIGNED. 
  
  
          PPR    CCHM 
  
          LDD    OR+1        CHECK CHANNEL
          RJM    TCH
          ZJN    CCH3        IF FREE
          MJN    CCH2        IF DOWN
 CCH1     LJM    FNZ         REJECT FUNCTION
  
 CCH2     SHN    5-21 
          LPN    37 
          NJN    CCH1        IF DOWN CHANNEL IN USE 
          LDD    T2 
          RJM    GCE         GET CHANNEL ASSIGNMENT TABLE ENTRY 
          ZJN    CCH3        IF CHANNEL IS NOT ASSIGNED TO A JOB
          LMD    CN 
          NJN    CCH6        IF CHANNEL IS NOT ASSIGNED TO THIS JOB 
 CCH3     LDN    1           SET OUTPUT REGISTER
          STD    OR+2 
  
*         ENTRY FROM *RCHM*.
  
 CCH4     LDD    T2          SET CHANNEL
          LPN    37 
          STD    OR+1 
          LDD    PP          SET ASSIGNMENT TO THIS PP
          STD    CF          SET FLAG FOR CHANNEL UPDATE
          LMM    TCHS,T2
          LPC    -4000
          STM    TCHS,T2
 CCH5     LJM    FNC         COMPLETE FUNCTION
  
 CCH6     LDD    OR+1        INDICATE DOWN CHANNEL IN USE 
          SCN    40 
          LMN    40 
          STD    OR+1 
          UJN    CCH5        COMPLETE FUNCTION
  
 CDBM     SPACE  4,15 
***       CDBM - CHECK DAYFILE BUSY.
* 
*         CHECK STATUS OF SPECIFIED DAYFILE.
* 
*         ENTRY 
*T, OR    12/  CDBM, 12/  BC, 12/  MO, 12/  CP+SF, 12/  DI
*         BC     BYTE COUNT OF MESSAGE. 
*         MO     MESSAGE OPTION.
*         CP     CONTROL POINT ADDRESS. 
*         SF  =  0 TO WAIT ON SPACE IN DAYFILE BUFFER.
*             =  1 TO WAIT UNTIL PP DUMP BUFFER NOT BUSY. 
*         DI     DAYFILE INDEX. 
*                0 = JOB DAYFILE. 
*                1 = MASTER DAYFILE.
*                2 = ACCOUNT DAYFILE. 
*                3 = ERRLOG DAYFILE.
*                4 = MAINLOG DAYFILE. 
* 
*         EXIT   (SUBFUNCTION (SF) REQUEST SATISFIED) 
*T, OR    12/  DFMM, 12/  BC, 12/  MO, 12/, 12/ 
  
  
          PPR    CDBM 
  
          LDD    OR+3        CHECK FOR MOVE 
          SHN    0-7
          LMD    MM.0 
          ZJP    FNR         IF CP SCHEDULED FOR MOVE 
          LDD    OR+3        CHECK REQUEST
          LPN    1
          ZJN    CDB1        IF WAITING ON SPACE IN BUFFER
          LDN    DFPP 
          CRD    CS 
          LJM    CDB5        CHECK DUMP BUFFER BUSY 
  
 CDB1     LDD    OR+4 
          ZJN    CDB2        IF JOB DAYFILE 
          SHN    1
 CDBA     ADC    **          (FWA-3 OF DAYFILE POINTERS)
          ADD    OR+4 
          UJN    CDB3        CONTINUE PROCESSING
  
 CDB2     LDD    OA          REREAD INPUT REGISTER
          SBN    1
          CRD    CM 
          LDD    CM+1        EXTRACT CONTROL POINT NUMBER 
          LPN    37 
          SHN    7
 CDBB     ADN    FLSW        GET RA FROM FL CONTROL WORD
*         ADN    FLSW+1      (CME PRESENT)
          CRD    CM 
          LRD    CM+1 
          LDD    CM+3        READ BUFFER POINTERS FROM NFL
          SHN    6
          SBN    DAPN 
 CDB3     CRD    CM 
          ADN    1
          CRD    CN 
          ADN    1
          CRD    CS 
          LDD    CN+4        OUT - IN 
          SBD    CM+4 
          ZJN    CDB6        IF BUFFER EMPTY
          PJN    CDB4        IF OUT .GT. IN 
          ADD    CN+2        ADD BUFFER LENGTH
 CDB4     SBN    MXML 
          PJN    CDB6        IF SPACE IN BUFFER 
 CDB5     LDD    CS+4 
          LPN    1
          ZJN    CDB7        IF DAYFILE BUSY
 CDB6     LDC    DFMM+5000   HAVE PP REISSUE REQUEST WITHOUT DELAY
          STD    OR 
          LDD    OA          STORE OUTPUT REGISTER
          CWD    OR 
 CDB7     LJM    FNR         RETURN 
 DCHM     SPACE  4,10 
***       DCHM - DROP CHANNEL.
* 
*         RELEASE CHANNEL FROM ASSIGNMENT.
* 
*         ENTRY 
*T, OR    12/  DCHM,6/  0,1/  C,5/  CH,36/
*         C      SET IF CONCURRENT CHANNEL SPECIFIED IN CH. 
*         CH     CHANNEL TO DROP. 
* 
*         EXIT
*T, OR    60/  0
  
  
          PPR    DCHM 
  
          LDD    OR+1        CHECK LEGAL CHANNEL NUMBER 
          RJM    VCN
          LDD    PP 
          LMM    TCHS,T2
          LPN    37 
          ZJN    DCH1        IF CHANNEL ASSIGNED TO THIS PP 
          LDD    PP 
          SBN    1
          NJN    DCH2        IF NOT *DSD* 
 DCH1     LDD    OA          CLEAR OUTPUT REGISTER
          STD    CF          SET FLAG FOR CHANNEL UPDATE
          CWD    ZR 
          LDM    TCHS,T2
          LPC    140         UPDATE CHANNEL RESERVATION TABLE 
          STM    TCHS,T2
          UJN    CDB7        RETURN 
  
 DCH2     RJM    HNG         HANG PP
 DRCM     SPACE  4
***       DRCM - DRIVER RECALL CPU. 
* 
*         PERFORMS AN RCLM IF THE JOB IS IN RECALL.  THIS IS USED BY
*         THE TAPE AND MASS STORAGE DRIVERS WHO WRITE THIS FUNCTION TO
*         THEIR OUTPUT REGISTER WITHOUT WAITING FOR AN ACCEPT.
* 
*         ENTRY 
*T, OR    12/  DRCM,48/ 
* 
*         EXIT
*T, OR    60/  0
  
  
          PPR    DRCM 
  
          CWD    ZR          CLEAR OUTPUT REGISTER
          LDD    PP          GET ASSIGNED CP/PCP
          SHN    PPXES
          TADC   ACPP,PPX 
          CRD    CM 
          LDD    CM+4        SET CP ADDRESS 
          STD    CN+2 
          ADN    STSW        CHECK RECALL STATUS
          CRD    CS 
 DCRA     ADN    FLSW-STSW
*         ADN    FLSW+1-STSW (CME PRESENT)
          CRD    CM 
          LDD    CS 
          SHN    -11
          LMN    XCPS 
          ZJN    DRC1        IF *X* STATUS
          LDD    CN+2 
          ADN    CWQW 
          CRD    CM 
          LDD    CM+1 
          SHN    21-12
          PJN    DRC2        IF TO RECALL CPU 
          UJN    DRC4        RETURN 
  
 DRC1     LRD    CM+1 
          LDD    CM+3        CHECK (RA+1) 
          SHN    6
          ADN    1
          CRD    CM 
          LDD    CM 
          NJN    DRC4        IF (RA+1) .NE. 0 
 DRC2     RJM    RCP         RECALL CPU 
 DRC4     LJM    FNR         RETURN 
 DSWM     SPACE  4,70 
***       DSWM - DRIVER SEEK WAIT.
* 
*         CAUTION, STORAGE MOVE MAY OCCUR DURING *DSWM* PROCESSING. 
* 
*         ENTRY 
*T, OR    12/  DSWM,12/,12/,12/  F,12/
*T, MB    12/  T4,12/  T5,12/  T6,12/  T7,12/  CHRV 
*T, MB+1  12/  LU,6/  SF,6/  PU,12/  PC,12/  PT,12/  PS 
*         F    = SUBFUNCTION CODE.
*                0 = DROP CHANNEL.
*                1 = REQUEST CHANNEL, AND EQUIPMENT IF READSYS. 
*                2 = SEEK IN PROGRESS.
*                4 = UNIT SWITCH. 
*               10 = DRIVE RESERVE. 
*               11 = REQUEST CHANNEL, UNIT, AND EQUIPMENT IF READSYS. 
*               20 = WRITE IN PROGRESS (ISD ONLY).
*             2000 = CONTROLLER RESERVED. 
*         T4  =  CHANNEL. 
*         T5  =  EQUIPMENT. 
*         T6  =  LOGICAL TRACK. 
*         T7  =  LOGICAL SECTOR.
*         CHRV = WORD *CHRV*. 
*         LU  =  LOGICAL UNIT NUMBER. 
*         SF  =  SEEK TYPE (USED ON ISD DEVICES ONLY).
*                0 = NORMAL SEEK. 
*                1 = WRITE/SEEK.
*                2 = READ/SEEK. 
*                3 = CHECK WRITE COMPLETE.
*         PU  =  PHYSICAL UNIT NUMBER.
*         PC  =  CYLINDER ADDRESS.
*         PT  =  PHYSICAL TRACK.
*         PS  =  PHYSICAL SECTOR. 
* 
*         HANG CONDITIONS - 
* 
*         BAD CHANNEL NUMBER. 
*         EQUIPMENT *EQ* NOT MASS STORAGE.
*         CHANNEL NOT ASSIGNED WHEN BIT 0 OF *CHRV* .NE. 0. 
* 
* 
*         EXIT
*T, OR    12/  0,12/  RF,12/  CC,12/  ST,12/  T4
*T, MB    60/  SAME AS INPUT WITH *CHRV* UPDATED. 
*T, MB+1  60/  *PU* UPDATED IF READSYS, *SF* SET TO 3 IF SUBFUNCTION 20 
*         RF  =  RELEASE FUNCTION.
*                A DRIVE RELEASE FUNCTION IS RETURNED IF SEEK WAITS 
*                ARE OUTSTANDING ON THE CHANNEL FOR SHARED DEVICES. 
*                AN OPERATION COMPLETE IS RETURNED IN ALL OTHER CASES.
*                THE OPERATION COMPLETE RELEASES BOTH THE DRIVE AND 
*                THE CONTROLLER.
*         CC  =  1, IF ISD AND FUNCTION WAS *WRITE IN PROGRESS*.
*                12, OTHERWISE. 
*         ST  =  (CHRV), IF OK TO SEEK. 
*                COMPLEMENT OF EC, IF ERROR DETECTED. 
*                EC = CRSE, IF CONTROLLER RESERVE TIME OUT. 
*                EC = CHFE, IF INCORRECT *DSWM* FUNCTION NUMBER.
*                EC = DRVE, IF DRIVE RESERVE TIMEOUT. 
*                EC = LNRE, IF LOGICAL NOT READY. 
* 
*         RE-ENTRY
*T, OR    12/  DSWM,12/  RP,12/  CPM,12/  CH,5/ CP,7/  FG 
*         RP = REENTRY PROCESSOR ADDRESS. 
*         CPM = CONTROL POINT/PSEUDO-CONTROL POINT FOR MOVE CHECK.
*         CH = CHANNEL(S) TO REQUEST. 
*         CP = CONTROL POINT NUMBER FOR PRIVILEGES CHECK. 
*         FG = FLAGS. 
*                1 = REQUEST FOR CHANNEL AND UNIT ON NEW SEEK.
*                2 = SEEK WAIT FLAG.
*                4 = EQUIPMENT IS A SHARED DEVICE.
*                10 = SEEK OUTSTANDING ON SHARED DEVICE.
*                20 = CALLER SELECTED CHANNEL.
*                40 = ISD DEVICE FLAG.
*                100 = WRITE IN PROGRESS (ISD ONLY).
*T, MB    SAME AS INPUT WITH (T4) = ALLOWABLE CHANNEL(S). 
          SPACE  4,20 
**        MAXIMIZATION OF SEEK OVERLAP. 
* 
*         THE THROUGHPUT OF THE MASS STORAGE SUBSYSTEM CAN BE ENHANCED
*         BY MAXIMIZING THE SEEK OPERATIONS WHICH ARE PERFORMED IN
*         PARALLEL WITH DATA TRANSFERS, IE. SEEK OVERLAP.  IN ORDER TO
*         MAXIMIZE SEEK OVERLAPS WE MUST GIVE PRIORITY TO THE 
*         INITIATION OF NEW SEEKS, WHICH WILL START THE POSITIONER
*         MOVING.  WE SHOULD NOT GIVE THE CHANNEL TO A PP WHICH IS
*         CHECKING FOR THE COMPLETION OF A SEEK OPERATION IF ANOTHER
*         PP IS WAITING TO INITIATE A SEEK.  DOING SO WOULD TEND TO 
*         SERIALIZE THE SEEK AND DATA TRANSFER OPERATIONS.
* 
*         TO GIVE PRIORITY TO THE ASSIGNMENT OF THE CHANNEL TO INITIAL
*         SEEK OPERATIONS, *DSWM* KEEPS TRACK OF THE FOLLOWING. 
*         1)     FOR EACH CHANNEL REQUESTED BY A PP FOR AN INITIAL
*                SEEK, THE PP NUMBER OF THE REQUESTING PP IS SAVED
*                IN *TCHR*. 
*         2)     FOR EACH EQUIPMENT THE PP REQUESTING LOGICAL UNIT
*                ZERO IS SAVED IN *DALL* BYTE 3.
*         USING THIS INFORMATION WE KNOW WHEN RELEASING A RESOURCE
*         (IE. CHANNEL OR LOGICAL UNIT ZERO OF AN EQUIPMENT) IF 
*         ANOTHER PP NEEDS THE RESOURCE TO INITIATE A SEEK OPERATION. 
*         WHEN ANOTHER PP DOES NEED THE RESOURCE TO INITIATE A SEEK 
*         THIS IS TERMED A *PRIORITY SEEK REQUEST*. 
* 
*         THE MECHANISM OF GIVING PRIORITY TO A PARTICULAR PP IS
*         ACCOMPLISHED BY PROCESSING THE PRIORITY SEEK REQUEST UPON 
*         EXIT OF THE *DSWM* PROCESSING.  WHEN A *DSWM* FUNCTION
*         RESULTS IN THE FREEING OF A RESOURCE (IE. UNIT OR CHANNEL), 
*         THE RESOURCE WOULD NORMALLY BE ASSIGNED TO THE NEXT PP IN 
*         NUMERIC ORDER WHICH IS WAITING FOR IT.  TO ASSIGN IT TO A 
*         PRIORITY PP, NOT THE NEXT NUMERICAL PP, THE PP NUMBER IS
*         SAVED IN DIRECT CELL *PR* WHEN THE RESOURCE IS RELEASED.
*         WHEN THE *DSWM* REQUEST WHICH RELEASED THE RESOURCE, AND SET
*         *PR* IS COMPLETE OR GOES INTO REENTRY PROCESSING, A CHECK IS
*         MADE FOR A PENDING PRIORITY REQUEST.  IF ONE IS PRESENT,
*         THEN BEFORE RETURNING TO THE MAIN LOOP OF MTR, THE PRIORITY 
*         SEEK REQUEST IS PROCESSED.  THIS IS ACCOMPLISHED BY SETTING 
*         THE REGISTERS TO LOOK EXACTLY LIKE THE REQUEST WAS SENSED 
*         BY THE MAIN LOOP IN MTR.  IN EFFECT THE PROCESSING OF A 
*         PRIORITY SEEK REQUEST LOOKS AS THOUGH THE REQUEST WERE
*         INSERTED AS THE NEXT REQUEST IN THE MAIN LOOP OF MTR.  THIS 
*         APPROACH USES ALL THE NORMAL REENTRY LOGIC FOR RESOURCE 
*         ASSIGNMENT, THUS MINIMIZING SPECIAL CASE LOGIC. 
  
  
**        MSEK - THIS TAG DEFINES THE MAXIMUM NUMBER OF SEEK WAITS
*                ON A CHANNEL WITH SHARED DEVICES BEFORE ACCESS TO THE
*                CHANNEL FOR NEW SHARED DEVICE ACTIVITY IS
*                DISALLOWED.  THE TABLE *TSCA* CONTAINS THE NUMBER
*                OF SEEK WAITS FOR SHARED DEVICES WHICH ARE OUTSTANDING 
*                ON A CHANNEL.  WHEN THERE ARE OUTSTANDING SEEKS ON 
*                SHARED DEVICES, A DRIVE RELEASE FUNCTION WILL BE 
*                ISSUED INSTEAD OF AN OPERATION COMPLETE FOR ALL
*                DEVICES ON THE CHANNEL.  THE 
*                CONTINUED ISSUANCE OF DRIVE RELEASES INSTEAD OF
*                OPERATION COMPLETES WILL LOCK OUT ACCESS BY OTHER
*                MACHINES TO THE CONTROLLER AND DRIVES.  THUS THE 
*                NEED FOR A LIMIT ON THE NUMBER OF TIMES A DRIVE
*                RELEASE IS ISSUED.  *MSEK* PROVIDES A LIMIT TO 
*                THE CONTINUED ACCESS OF A CONTROLLER BY A SINGLE 
*                MACHINE.  THIS NUMBER DOES NOT HAVE A DIRECT 
*                CORRESPONDENCE TO THE NUMBER OF CONTIGUOUS I/O 
*                REQUESTS ALLOWED ON A CHANNEL.  THIS IS BECAUSE
*                THE TABLE *TSEK* WHICH *MSEK* LIMITS IS NOT A
*                COUNT OF I/O REQUESTS BUT RATHER IT IS A COUNT 
*                OF THE NUMBER TIMES A SEEK WAIT IS ISSUED WITH 
*                MULTIPLE SHARED DEVICE SEEKS OUTSTANDING.  THUS
*                THE CONTINUED ACCESS BY A SINGLE MACHINE WILL
*                BE LIMITED BUT NOT TO ANY SPECIFIC NUMBER OF 
*                REQUESTS.
  
 MSEK     EQU    40 
  
  
          PPR    DSWM 
          ADN    1           READ PARAMETERS
          CRD    T4 
          LDD    PP          GET ASSIGNED CP/PCP
          SHN    PPXES
          TADC   ACPP,PPX 
          CRD    CN 
          LDD    CN          SET ASSIGNED CP/PCP FOR MOVE CHECK 
          STD    OR+2 
          LDD    CN+4 
          STD    OR+4        SET CP FOR PRIVILEGES CHECK
          LDD    CM          SET CALLER SELECTED CHANNEL FLAG 
          LPN    20 
          RAD    OR+4 
          MSTA   DALL,PP,CS  GET EST, SAVE MST ADDRESS, READ DALL 
          CRD    CN 
          LDD    CS 
          SHN    21-13
          MJN    DSW1        IF MASS STORAGE
          LDD    T5 
          NJP    DSW7        IF NOT PERFORMING ON-LINE RECONFIGURATION
 DSW1     N8SJ   DSW3        (NO ISD SUBSYSTEM JUMP)
          LDD    CS+3 
          LMC    2RDG 
          ZJN    DSW2        IF 836 DEVICE
          LMN    1RD&1RG
          NJN    DSW3        IF NOT 834 DEVICE
 DSW2     LDN    40 
          RAD    OR+4 
 DSW3     NSDJ   DSW4        (NO SHARED DEVICE JUMP)
          LDD    CS 
          SHN    2-11 
          LPN    4           SET SHARED DEVICE FLAG 
          RAD    OR+4 
 DSW4     LDD    CM 
          LPN    1
          ZJP    DSW12       IF CHANNEL NOT RESERVED
  
*         PROCESS RELEASE OF CHANNEL. 
  
          LDN    MXNC 
          STD    CF          SET FLAG FOR CHANNEL UPDATE
          SBD    T4 
 DSW5     MJN    DSW7        IF INVALID CHANNEL 
          LDM    TCHR,T4     SET REQUESTING PP
          ZJN    DSW6        IF NO PRIORITY SEEK REQUEST
          STD    PR 
          LDN    0           CLEAR PRIORITY SEEK REQUEST
          STM    TCHR,T4
 DSW6     LDM    TCHS,T4
          LMD    PP 
          STD    T1 
          LPN    37 
          ZJN    DSW8        IF ASSIGNED TO THIS PP 
 DSW7     RJM    HNG         HANG PP
 DSW8     LDD    T1          CLEAR CHANNEL ASSIGNMENT 
          LPC    -4000
          STM    TCHS,T4
          NSDJ   DSW9        (NO SHARED DEVICE JUMP)
          LDD    OR+4 
          SHN    21-2 
          PJN    DSW8.1      IF NOT SHARED DEVICE 
          LDD    OR+3 
          SCN    4
          NJN    DSW9        IF NOT ENDMS OR UNIT SWITCH FUNCTION 
 DSW8.1   LDM    TSCA,T4
          NJN    DSW9        IF SHARED CHANNEL ACTIVITY 
          STM    TSEK,T4     CLEAR SEEK COUNT 
 DSW9     N8SJ   DSW12       (NO ISD SUBSYSTEM JUMP)
          LDD    OR+3 
          LPN    22 
          NJN    DSW12       IF SEEK OR BUFFER FLUSH WAIT 
          LDD    OR+4 
          LPN    40 
 DSW10    ZJN    DSW12       IF NOT ISD DEVICE
  
*         DECREMENT CONTROL MODULE ACTIVITY EXCEPT DURING SEEK
*         WAITS OR WRITE IN PROGRESS WAITS.  MAINTAINING THE
*         CONTROL MODULE ACTIVITY INSURES THE REQUEST WILL RECEIVE
*         THE SAME CHANNEL ASSIGNMENT.
  
          LDM    TCMN,PP
          SHN    -3 
          ADC    TCMA 
          STD    T1 
          SOI    T1 
          LPN    77 
          NJN    DSW11       IF NOT DECREMENT TO ZERO 
          STI    T1          CLEAR CHANNEL ASSIGNMENT 
          LDD    CN+4        REVERSE CHANNEL PRIORITY 
          SHN    6
          LMD    CN+4 
          SHN    6
          STD    CN+4 
          LDN    0
 DSW11    LPN    40 
          NJN    DSW15       IF UNDERFLOW 
 DSW12    LDD    OR+3        VALIDATE FUNCTION CODE 
          SBN    MXDSWM 
          MJN    DSW14       IF FUNCTION IN TABLE 
          SBN    20-MXDSWM
          ZJP    WIP         IF ISD BUFFER FLUSH WAIT 
          SBK    2000-20
          ZJN    RSV         IF CONTROLLER RESERVE
 DSW13    LCN    /MSP/CHFE   SET CHANNEL FAILURE CODE 
          LJM    RCE6        RETURN INCORRECT FUNCTION STATUS 
  
 DSW14    LDM    TDSWM,OR+3 
          STD    T8 
          LJM    0,T8        ENTER PROCESSOR
  
 DSW15    RJM    HNG         HANG PP
  
 MXDSWM   EQU    12          MAXIMUM VALUE OF DSWM SUBFUNCTION
 RSV      SPACE  4,10 
**        RSV - *DSWM* ROUTINE TO PROCESS RESERVE SITUATIONS. 
* 
*         FUNCTION 10 = DRIVE RESERVE.
*         FUNCTION 2000 = CONTROLLER RESERVE. 
* 
*         THESE FUNCTIONS SHOULD ONLY BE EXECUTED IN A MULTI-MAINFRAME
*         CONFIGURATION OR WHERE CONTROLLERS ARE BEING SHARED BETWEEN 
*         MACHINES.  THE PURPOSE OF THESE FUNCTIONS ARE TO RETRY THE
*         REQUEST UNTIL THE APPROPRIATE RESERVES CAN BE GAINED OR 
*         UNTIL THE FIVE SECOND TIME OUT HAS EXPIRED.  WHEN A TIME
*         OUT OCCURS, THE DRIVER WILL CALL THE ERROR PROCESSOR AND
*         THE APPROPRIATE ERROR PROCESSING WILL BE EXECUTED DEPENDING 
*         ON THE CALLER SELECTED OPTIONS. 
  
  
 RSV      SUBFUN DSWM,10     DRIVE RESERVE PROCESSOR ENTRY
          SUBFUN DSWM,2000   CONTROLLER RESERVE ENTRY 
          LDD    CN+4        REVERSE CHANNELS IN MST
          SHN    6
          LMD    CN+4 
          SHN    6
          STD    CN+4 
          MSTA   DALL,PP
          CWD    CN 
          LDD    OA 
          ADN    3
          CRD    CS 
          LDD    OR+3 
          SBD    CS 
          ZJN    RSV3        IF START TIME SET
          RAD    CS 
          LDD    TM+1 
          STD    CS+4 
          LDD    OA          REWRITE TIME WORD
          ADN    3
          CWD    CS 
 RSV3     LDD    TM+1 
          SBD    CS+4 
          PJN    RSV4        IF NO ROLL OVER
          ADC    10000
 RSV4     SBN    20D
          MJN    RSV6        IF 20 SECONDS HAVE NOT ELAPSED 
          LCN    0           SET UNIT NUMBER CLEARED
          STD    CS 
          RJM    CDA         CLEAR DEVICE ACTIVITY
          LDD    OR+3 
          LMN    10 
          ZJN    RSV5        IF DRIVE RESERVED
          LCN    /MSP/CRSE-/MSP/DRVE
 RSV5     SBN    /MSP/DRVE
          LJM    RCE6        SET ERROR CODE 
  
 RSV6     RJM    SCS         SET CHANNEL SELECTION PROCESSING 
          LJM    RER         REASSIGN CHANNEL UPON REENTRY
          SPACE  4,20 
**        RCE - *DSWM* ROUTINE TO REQUEST IO RESOURCES. 
* 
*         FUNCTION 11 = REQUEST CHANNEL, UNIT, AND EQUIPMENT. 
* 
*         THIS FUNCTION REQUESTS ALL THE RESOURCES THAT ARE NEEDED TO 
*         PERFORM AN I/O OPERATION FOR THE *6DI* AND *6DJ* DRIVERS. 
*         THE ORDER OF RESOURCE ASSIGNMENT IS AS FOLLOWS. 
*         FIRST, IF A SYSTEM REQUEST IS PENDING AND MORE THAN ONE 
*         SYSTEM DEVICE IS PRESENT, THE SYSTEM EQUIPMENT WILL BE
*         SELECTED.  THE SELECTION CRITERION IS DOCUMENTED IN *RSY*.
*         SECOND, THE SOFTWARE UNIT INTERLOCK IN *DALL* IS GAINED.
*         THIS IS AN IMPORTANT INTERLOCK IN THAT IT INSURES ONLY
*         ONE REQUEST IS PROCESSED FOR A UNIT AT A TIME.
*         THIRDLY, A CHANNEL IS SELECTED AND RESERVED.
* 
*         FUNCTION 4 = UNIT SWITCH. 
* 
*         THE UNIT INTERLOCK FOR THE PREVIOUS UNIT IS RELEASED AND THE
*         INTERLOCK FOR THE NEXT OR CURRENT UNIT IS REQUESTED.
* 
*         ACCESS TO AN *OFF* OR *SUSPECT* DEVICE WILL NOT NORMALLY BE 
*         GRANTED.  HOWEVER, IT WILL BE ALLOWED IF ONE OF THE FOLLOWING 
*         CONDITIONS IS MET - 
*                1. THE OPERATION IS A *READSYS* AND NO *ON* OR *IDLE*
*                   SYSTEM DEVICE EXISTS. 
*                2. THE *AD* OR *NS* *SETMS* ERROR PROCESSING OPTIONS 
*                   WERE SELECTED.
*                3. THE JOB TO WHICH THE CALLING PP IS ASSIGNED HAS AT
*                   LEAST ONE OF THE FOLLOWING ATTRIBUTES - 
*                            A. IT-S A SUBSYSTEM. 
*                            B. IT HAS THE *UTL=* ENTRY POINT.
*                            C. IT IS IN THE PROCESS OF BEING 
*                               UNCONDITIONALLY TERMINATED BY THE 
*                               OPERATOR. 
*         ACCESS TO A *DOWN* DEVICE WILL BE GRANTED ONLY IF THE CALLER
*         SPECIFIED THE *AD* *SETMS* ERROR PROCESSING OPTION.  ALTHOUGH 
*         THE CHECK FOR A *DOWN* DEVICE IS BYPASSED FOR *READSYS* 
*         OPERATIONS, ACCESS TO A *DOWN* DEVICE WILL NOT BE GRANTED 
*         SINCE ROUTINE *RSY* WILL ALWAYS SELECT A NON-*DOWN* DEVICE
*         AND IT IS NOT POSSIBLE TO *DOWN* THE LAST SYSTEM DEVICE.
  
  
 RCE      SUBFUN DSWM,(11,4) REQUEST CHANNEL AND UNIT PROCESSOR ENTRY 
          LDD    OA 
          ADN    2
          CRD    CS 
          AOD    OR+4        SET INITIAL SEEK REQUEST 
          N8SJ   RCE1        (NO ISD SUBSYSTEM JUMP)
          LPN    40 
          ZJN    RCE1        IF NOT ISD DEVICE
          LDD    CS+1        STORE UNIT NUMBER IN *TCMN*
          LPN    77 
          STM    TCMN,PP
 RCE1     RJM    CDA         CLEAR CURRENT UNIT ACTIVITY
          LDD    CM 
          SHN    21-5 
          PJN    RCE1.1      IF NOT *READSYS* 
          UJN    RCE2        CONTINUE 
*         LDC    RSY         (MULTIPLE SYSTEM DEVICES EXIST)
 RCEA     EQU    *-1
          CON    RSY
          LJM    RCE8        SET REENTRY PROCESSOR ADDRESS
  
 RCE1.1   SHN    5-1
          MJN    RCE2.2      IF ACCESS TO A *DOWN* DEVICE ALLOWED 
          LDD    CN 
          SHN    21-7 
          PJN    RCE2.0      IF DEVICE IS ACCESSIBLE
          LDK    INWL 
          CRD    CM+1 
          LDD    CM+1+3 
          SHN    21-3 
 RCE2     MJN    RCE2.2      IF DEADSTART SEQUENCING NOT COMPLETE 
          LDD    CN 
          SHN    0-10 
          LPN    3
          LMN    3
          NJN    RCE2.1      IF DEVICE NOT *DOWN* 
          MSTA   ACGL,PP
          CRD    CM+1 
          LDD    CM+1+4 
          SHN    21-GRDR+GRDR/12D*12D 
          PJP    RCE5        IF NOT BEING REDEFINED 
          LCN    /MSP/RDFE
          UJP    RCE6        SET ERROR CODE 
  
 RCE2.0   UJN    RCE3        CONTINUE 
  
 RCE2.1   LDD    CM 
          SHN    21-2 
 RCE2.2   MJN    RCE4        IF *NS* *SETMS* OPTION SELECTED
          LDD    OR+4 
          LPC    7600 
          ADK    TFSW 
          CRD    CM+1 
          ADK    SEPW-TFSW
          CRD    CM+2 
          ADK    JCIW-SEPW
          CRD    CM+3 
          LDD    CM+5 
          SBK    LSSI+1 
 RCE3     PJN    RCE7        IF SUBSYSTEM 
          LDD    CM+2 
          SHN    21-10
 RCE4     MJN    RCE7        IF *UTL=* ENTRY POINT PRESENT
          LDD    CM+1 
          CFI    EJT,,CM+1
 RCEB     ADC    SCHE 
          CRD    CM+1 
          LDD    CM+3 
          SHN    21-12
          ERRNZ  UCTM-2      CODE ASSUMES VALUE 
          MJN    RCE7        IF UNCONDITIONAL JOB TERMINATION MODE
 RCE5     LCN    /MSP/LNRE   SET ERROR CODE 
 RCE6     STD    OR+3 
          LDD    OA          WRITE PARAMETERS 
          ADN    1
          CWD    T4 
          LDN    0
          LJM    RRX2        RETURN ERROR STATUS
  
 RCE7     LDC    CUI         SET REENTRY PROCESSOR ADDRESS
 RCE8     STD    OR+1 
          LDM    TMSK,CS     SET UNIT MASK
          STD    OR+3 
          UJN    RCO1        CHECK FOR RESOURCES AVAILABLE
 RCO      SPACE  4
**        RCO - *DSWM* ROUTINE TO REQUEST A CHANNEL ONLY. 
* 
*         FUNCTION 1 = REQUEST CHANNEL. 
* 
*         THIS FUNCTION IS USED BY DRIVERS WHO DO NOT USE THE UNIT
*         INTERLOCK SCHEME.  THUS THE ONLY RESOURCE THEY NEED TO
*         EXECUTE A DRIVER REQUEST IS THE CHANNEL.
  
  
 RCO      SUBFUN DSWM,1      REQUEST CHANNEL ONLY PROCESSOR ENTRY 
          AOD    OR+4        SET INITIAL SEEK FOR PRIORITY SEEK REQUEST 
          RJM    SCS         SET CHANNEL SELECTION PROCESSING 
          LDM    TPPI,PP
          NJN    RCO2        IF ACTIVITY SET
          AOD    CN 
          MSTA   DALL,PP
          CWD    CN 
          LDN    1
 RCO1     STM    TPPI,PP     ENTER HERE FROM *RCE*
          LDD    OA          WRITE REENTRY PARAMETERS 
          CWD    OR 
 RCO2     LJM    RER2        CHECK FOR RESOURCES AVAILABLE
          SPACE  4,10 
**        EMS - *DSWM* ROUTINE TO RELEASE IO RESOURCES. 
* 
*         FUNCTION 0 = END MASS STORAGE OPERATION.
* 
*         THIS ROUTINE RELEASES THE CHANNEL AND SOFTWARE UNIT RESERVE 
*         WHEN PRESENT. 
  
  
 EMS      SUBFUN DSWM,0      END MASS STORAGE PROCESSOR ENTRY 
          LDD    T4          INSURE VALID CHANNEL 
          LPN    37 
          STD    T4 
          LCN    0           SET NO UNIT ASSIGNED 
          STD    CS 
          RJM    CDA         CLEAR DEVICE ACTIVITY
          LDD    OA          WRITE PARAMETERS 
          ADN    1
          CWD    T4 
          LDD    OR+2        CHECK FOR MOVE 
          LMD    MM.0 
          NJP    RRX         IF NO MOVE REQUESTED 
          LDC    CHD         SET CHANNEL DROP PROCESSOR 
          STD    OR+1 
          LDD    OA          WRITE REENTRY PARAMETERS 
          CWD    OR 
          LJM    RER         RETRY DROP ON REENTRY
 WIP      SPACE  4,10 
**        WIP - *DSWM* ISD WRITE WAIT PROCESSOR.
* 
*         FUNCTION 20 = ISD WRITE IN PROGRESS.
* 
*         THIS FUNCTION GIVES UP THE CHANNEL DURING AN ISD WRITE
*         OPERATION SO THAT OTHER PP-S MAY USE THE CHANNEL.  IT SETS
*         *CHECK WRITE COMPLETE* IN THE SEEK PARAMETERS, ALLOWING *6DJ* 
*         TO PROPERLY CHECK FOR WRITE COMPLETION WHEN IT GETS THE 
*         CHANNEL BACK.  *WIP* MUST ALSO RESTORE THE UNIT NUMBER PART 
*         OF THE SEEK PARAMETERS SINCE THE CALLING PP MAY HAVE USED THE 
*         MESSAGE BUFFER FOR OTHER PURPOSES BETWEEN WRITING SECTORS.
  
  
*WIP      SUBFUN DSWM,20     WAIT FOR WRITE IN PROGRESS 
 WIP      LDM    TCMN,PP     RESTORE UNIT NUMBER SEEK PARAMETER 
          ADC    300         SET *CHECK WRITE COMPLETE* 
          STD    CS+1 
          LDD    OA          REWRITE SEEK PARAMETER WORD
          ADN    2
          CWD    CS 
          LDC    102         SET SEEK AND WAIT FOR WRITE COMPLETE 
          UJN    SEK2        SET FLAGS
          SPACE  4,20 
**        SEK - *DSWM* SEEK WAIT PROCESSOR. 
* 
*         FUNCTION 2 = SEEK IN PROGRESS.
* 
*         THIS FUNCTION GIVES UP THE CHANNEL DURING A SEEK OPERATION
*         SO THAT OTHER REQUESTS MAY USE THE CHANNEL.  THE DRIVE IS 
*         PROTECTED FROM OTHER REQUESTS BY TWO METHODS. 
* 
*         FIRST, FOR A NON-SHARED DEVICE, THE SOFTWARE
*         UNIT RESERVE IN *DALL* INSURES THAT OTHER REQUESTS IN THIS
*         MACHINE WILL NOT ACCESS THE SEEKING DRIVE.
*         THIS IS NEEDED BECAUSE THE DRIVER RELEASES THE DRIVE AFTER
*         INITIATING THE SEEK TO ALLOW OTHER PP-S TO ACCESS OTHER 
*         DRIVES ON THE CHANNEL DURING THE SEEK OPERATION.  SINCE THE 
*         DRIVE IS RELEASED WHILE SEEKING, THE OPERATION CAN BE 
*         CONTINUED ON A CHANNEL DIFFERENT FROM THE ONE WHICH INITIATED 
*         THE SEEK.  THIS CAPABILITY GIVES A SIGNIFICANT PERFORMANCE
*         GAIN FOR DUAL CHANNEL ACCESS TO NON-SHARED DEVICES. 
* 
*         SECOND, FOR A SHARED DEVICE, SINCE THE SOFTWARE UNIT
*         INTERLOCK ONLY APPLIES TO ONE MACHINE, THE CONTROLLER AND 
*         UNIT RESERVES ARE MAINTAINED WHILE SEEKING SO THAT REQUESTS 
*         ON ANOTHER MACHINE DO NOT GAIN ACCESS TO THE DRIVE. 
*         THE RESERVES MUST BE HELD DURING AN ENTIRE I/O SEQUENCE 
*         (INCLUDING ERROR PROCESSING) ON INDEPENDENT SHARED DEVICES
*         SINCE THEY PROVIDE THE INTERLOCK FOR UPDATING TABLES ON THE 
*         DEVICE.  MMF DOES NOT DEPEND ON THE RESERVES FOR INTERLOCKS,
*         HOWEVER, THIS SCHEME IMPROVES PERFORMANCE BY ELIMINATING
*         RESEEKS FROM OTHER MACHINES DURING AN ACCESS. 
* 
*         ENTRY  (CN - CN+4) = MST WORD *DALL*. 
  
  
 SEK      SUBFUN DSWM,2      SEEK WAIT PROCESSOR ENTRY
          AOM    TSEK,T4     INCREMENT TOTAL SEEK COUNT 
          LDD    T6 
          SBD    CN+2 
          ZJN    SEK1        IF NO CHANGE IN POSITION 
          RAD    CN+2 
          MSTA   DALL,PP     UPDATE DEVICE ACTIVITY WORD
          CWD    CN 
 SEK1     LDN    2           SET SEEK WAIT
 SEK2     RAD    OR+4        CHECK FOR SHARED SEEK
          LPN    4
          ZJN    SEK3        IF NOT SHARED DEVICE 
          AOM    TSCA,T4     INCREMENT SHARED SEEK CHANNEL ACTIVITY 
          LDN    10 
          RAD    OR+4 
 SEK3     RJM    SCS         SET CHANNEL SELECTION PROCESSING 
*         UJN    RER         REASSIGN CHANNEL UPON REENTRY
          TITLE  RER - REENTRY PROCESSING.
**        RER - *DSWM* REENTRY PROCESSING.
* 
*         THIS ROUTINE ASSIGNS THE RESOURCES REQUIRED FOR THE I/O 
*         OPERATION.  THE MAIN *DSWM* ROUTINE ALONG WITH THE
*         FUNCTION PROCESSORS SETS UP THE RESOURCE REQUIREMENTS 
*         WHICH CAN THEN BE PROCESSED UPON INITIAL OR REENTRY.
* 
*         NOTE - A LARGE PART OF *MTR-S* EXECUTION TIME IS SPENT IN 
*         THIS SUBROUTINE.  IT IS EXTREMELY IMPORTANT TO OPTIMIZE AND 
*         REDUCE OVERHEAD IN THIS CODE IN ORDER TO NOT MAKE THE *MTR* 
*         CYCLE TIME TOO LARGE.  A LARGE *MTR* CYCLE TIME AFFECTS 
*         OVERALL SYSTEM PERFORMANCE. 
  
  
*         ENTER HERE TO ALLOW ACCESS TO RESOURCES BY OTHER PPS BEFORE 
*         REASSIGNING TO THIS REQUEST.
  
 RER      LDD    PR          CHECK IF PRIORITY REQUEST
          ZJN    RER1        IF NO PRIORITY SEEK REQUEST
          RJM    PRR         PROCESS PRIORITY REQUEST 
 RER1     RJM    TIM         UPDATE TIME
          RJM    MRP         RETURN TO MAIN LOOP
  
*         ENTER HERE TO IMMEDIATELY CHECK RESOURCES.
  
 RER2     LDD    OR+2        CHECK FOR MOVE 
          LMD    MM.0 
          ZJN    RER         IF MOVE REQUESTED, RETRY UPON REENTRY
          LJM    0,OR+1      JUMP TO PROCESSOR
 C1M      SPACE  4,20 
**        C1M - CHECK FOR ONE CONTROL MODULE CHANNEL FREE.
* 
*         WHEN ATTEMPTING ASSIGNMENT OF A SPECIFIC CHANNEL FOR
*         CONTROL MODULE ACCESS, ONE OF THE FOLLOWING CASES EXISTS. 
*         1)     NO CHANNEL IS PRESENTLY ASSIGNED TO THE REQUIRED 
*                CONTROL MODULE.
*                THE REQUESTED CHANNEL MAY BE ASSIGNED IF IT IS FREE. 
*                THIS CHANNEL WILL THEN BECOME ASSIGNED TO THE CONTROL
*                MODULE.
*         2)     A CHANNEL IS PRESENTLY ASSIGNED TO THE CONTROL MODULE
*                AND IS THE SAME AS THE REQUESTED CHANNEL.
*                THE REQUESTED CHANNEL MAY BE ASSIGNED IF IT IS FREE. 
*         3)     A CHANNEL IS PRESENTLY ASSIGNED TO THE CONTROL MODULE
*                AND IS DIFFERENT FROM THE REQUESTED CHANNEL. 
*                NO CHANNEL ASSIGNMENT IS POSSIBLE.  THE REQUEST MUST 
*                WAIT UNTIL ALL CONTROL MODULE REQUESTS ARE COMPLETE
*                AT WHICH TIME CASE (1) EXISTS, AND AN ASSIGNMENT MAY 
*                BE ALLOWED.
  
  
 C1M      LDM    TCMN,PP
          SHN    -3 
          ADC    TCMA 
          STD    T1 
          LDI    T1 
          ZJN    C2M1        IF CHANNEL NOT ASSIGNED TO CONTROL MODULE
          SHN    -6 
          LMD    OR+3 
          ZJN    C2M1        IF REQUEST FOR CHANNEL ASSIGNED TO C. M. 
          UJN    RER         RETRY ASSIGNMENT ON REENTRY
 C2M      SPACE  4,15 
**        C2M - CHECK FOR ONE OF TWO CONTROL MODULE CHANNELS FREE.
* 
*         WHEN ATTEMPTING ASSIGNMENT OF ONE OF TWO CHANNELS FOR 
*         CONTROL MODULE ACCESS, ONE OF THE FOLLOWING CASES EXISTS. 
*         1)     NO CHANNEL IS PRESENTLY ASSIGNED TO THE REQUIRED 
*                CONTROL MODULE.
*                EITHER CHANNEL MAY BE ASSIGNED IF IT IS FREE AND THE 
*                SEEK LIMIT IS NOT REACHED. 
*                THIS CHANNEL WILL THEN BECOME ASSIGNED TO THE CONTROL
*                MODULE.
*         2)     A CHANNEL IS PRESENTLY ASSIGNED TO THE CONTROL MODULE. 
*                THIS CHANNEL MAY BE ASSIGNED IF IT IS FREE AND THE 
*                SEEK LIMIT IS NOT REACHED.  IF THIS CHANNEL MAY NOT
*                BE ASSIGNED, THE OTHER CHANNEL IS NOT CHECKED. 
  
  
 C2M      LDM    TCMN,PP     GET THE CONTROL MODULE NUMBER
          SHN    -3 
          ADC    TCMA 
          STD    T1 
          LDI    T1 
          ZJN    C2C         IF CHANNEL NOT ASSIGNED TO CONTROL MODULE
          SHN    -6 
          STD    OR+3 
 C2M1     UJN    C1C         CHECK FOR FREE CHANNEL 
 C1C      SPACE  4,15 
**        C1C - CHECK FOR SINGLE CHANNEL FREE.
* 
*         IF THE REQUESTED CHANNEL IS FREE AND HAS NOT REACHED THE
*         SHARED DEVICE SEEK LIMIT, IT IS ASSIGNED. 
*         IF THE CHANNEL IS BEING REASSIGNED TO A REQUEST 
*         WHICH IS SEEKING ON A SHARED DEVICE, THEN THE 
*         SHARED SEEK COUNTER FOR THE CHANNEL IS DECREMENTED. 
* 
*         IF THE REQUESTED CHANNEL IS NOT FREE, THE CHANNEL 
*         REQUESTED BIT IS SET.  A PRIORITY SEEK REQUEST IS 
*         ALSO SET IF THE CHANNEL IS REQUESTED FOR AN INITIAL 
*         SEEK OPERATION. 
 C2C      SPACE  4,10 
**        C2C - CHECK FOR ONE OF TWO CHANNELS FREE. 
* 
*         IF EITHER CHANNEL IS FREE AND HAS NOT REACHED THE 
*         SHARED DEVICE SEEK LIMIT, IT IS ASSIGNED. 
* 
*         IF NEITHER CHANNEL IS FREE, THE CHANNEL REQUESTED BIT 
*         IS SET FOR THE PRIMARY CHANNEL.  A PRIORITY SEEK REQUEST IS 
*         ALSO SET FOR EACH OF THE CHANNELS.  AN INITIAL SEEK PRIORITY
*         REQUEST IS ONLY SET IF THE SEEK LIMIT HAS NOT BEEN REACHED. 
*         INITIAL SEEK REQUESTS HAVE PRIORITY OVER OTHER SEEKS. 
  
  
 C2C      LDD    OR+3 
          SHN    14 
          STD    OR+3 
          SHN    -14
          STD    T2 
          LDM    TCHS,T2
          NJN    C2C3        IF PRIMARY CHANNEL NOT FREE
  
*         CHECK SEEK LIMIT REACHED FOR PRIMARY CHANNEL. 
  
          NSDJ   C2C1        (NON-SHARED DEVICE JUMP) 
          LDD    OR+4 
          LPN    6
          LMN    4
          NJN    C2C1        IF NOT SHARED DEVICE OR SEEK WAIT
          LDM    TSEK,T2
          ADK    -MSEK
          PJN    C2C3        IF SEEK LIMIT REACHED - TRY OTHER CHANNEL
 C2C1     LDD    T2          SET PRIMARY CHANNEL
          STD    OR+3 
 C2C2     LJM    C2C10       ASSIGN CHANNEL - CANNOT BE SHARED SEEK 
  
*         CHECK SINGLE CHANNEL, OR SECOND OF DUAL CHANNELS. 
  
 C1C      BSS    0           SINGLE CHANNEL REQUESTED PROCESSOR 
          LDD    FT          INDICATE SINGLE CHANNEL
          STD    T2 
 C2C3     LDM    TCHS,OR+3
          NJN    C2C5        IF SECONDARY CHANNEL IS NOT FREE 
          NSDJ   C2C2        (NON-SHARED DEVICE JUMP) 
          LDD    OR+4 
          LPN    16 
          LMN    04 
          NJP    C2C9        IF NOT SHARED DEVICE OR SEEK WAIT
          LDK    MSEK-1 
          SBM    TSEK,OR+3
          PJN    C2C2        IF SEEK LIMIT NOT REACHED
          LJM    RER         RETRY UPON REENTRY 
  
 C2C5     LPC    -4000       SET THE CHANNEL REQUESTED FLAG 
          LMD    FT 
          STD    CF          SET FLAG FOR CHANNEL UPDATE
          STM    TCHS,OR+3
  
*         SET PRIORITY REQUEST. 
  
          LDD    T2 
          LMD    FT 
          NJN    C2C5.1      IF NOT CHANNEL SPECIFIC REQUEST
          LDM    TCHS,OR+3
          LPN    37 
          ZJN    C2C8.1      IF CHANNEL NOT ASSIGNED
 C2C5.1   LDD    OR+4        SET PRIMARY CHANNEL REQUESTED
          LPN    1
          ZJN    C2C6        IF NOT INITIAL SEEK
          LDM    TSEK,T2
          ADK    -MSEK
          PJN    C2C7.1      IF SEEK LIMIT REACHED
          UJN    C2C7        CONTINUE PROCESSING
  
 C2C6     LDM    TCHR,T2
          NJN    C2C7.1      IF REQUEST ALREADY SET 
 C2C7     LDD    PP          SET CHANNEL REQUESTED
          STM    TCHR,T2
 C2C7.1   LDD    OR+4        SET SECOND CHANNEL 
          LPN    1
          ZJN    C2C7.3      IF NOT INITIAL CHANNEL REQUEST 
          LDM    TSEK,OR+3
          ADK    -MSEK
          PJN    C2C8        IF SEEK LIMIT REACHED
          UJN    C2C7.4      CONTINUE PROCESSING
  
 C2C7.3   LDM    TCHR,OR+3
          NJN    C2C8        IF REQUEST ALREADY SET 
 C2C7.4   LDD    PP          SET THIS PP AS REQUESTING CHANNEL
          STM    TCHR,OR+3
 C2C8     LJM    RER         RETRY ASSIGNMENT UPON REENTRY
  
 C2C8.1   LDD    OR+4 
 C2C9     LPN    10 
          ZJN    C2C10       IF NO SHARED DEVICE SEEK 
          SOM    TSCA,OR+3
  
*         CHANNEL ASSIGNMENT ALLOWED. 
  
 C2C10    LDD    OA          READ CHANNEL PARAMETER 
          ADN    1
          CRD    T4 
          LDD    OR+3        ASSIGN CHANNEL 
          STD    T4 
          LDD    CM 
          SCN    11 
          LMN    1
          STD    CM 
          LDD    OA          REWRITE PARAMETERS 
          STD    CF          SET FLAG FOR CHANNEL UPDATE
          ADN    1
          CWD    T4 
          LDM    TCHS,T4     RESERVE CHANNEL
          LPC    -4000
          LMD    PP 
          STM    TCHS,T4
          N8SJ   RRX         (NO ISD SUBSYSTEM JUMP)
          LDD    OR+4 
          LPN    42 
          LMN    40 
          NJN    RRX         IF NOT ISD DEVICE OR SEEK WAIT ASSIGNMENT
          AOI    T1 
          LMN    1
          NJN    RRX         IF NOT FIRST ACTIVITY ON CONTROL MODULE
          LDD    T4 
          SHN    6
          RAI    T1 
          UJN    RRX         EXIT REENTRY PROCESSING
 CHD      SPACE  4,10 
**        CHD - CHANNEL DROP PROCESSOR. 
* 
*         COMPLETE THE CHANNEL DROP AFTER STORAGE MOVE COMPLETES. 
  
  
 CHD      LDD    OA          READ CHANNEL STATUS
          ADN    1
          CRD    T4 
*         UJN    RRX         COMPLETE FUNCTION
 RRX      SPACE  4,10 
**        RRX - EXIT *DSWM* REENTRY PROCESSING. 
  
  
 RRX      LDD    CM          SET CHANNEL STATUS 
          STD    OR+3 
          NSDJ   RRX2        (NO SHARED DEVICES JUMP) 
          LPN    1
          ZJN    RRX2        IF NO CHANNEL ASSIGNED UPON EXIT 
          LDM    TSCA,T4
          ZJN    RRX2        IF NO SHARED DEVICE ACTIVITY 
          LDD    OR+4 
          LPN    40 
          ZJN    RRX1        IF NOT ISD DEVICE
          LDI    T1 
          LPN    76 
          ZJN    RRX2        IF NO OTHER CONTROL MODULE ACTIVITY
 RRX1     LDN    20-10       SET DRIVE RELEASE
 RRX2     ADN    10 
*         LDN    10          (NO SHARED DEVICES)
 RRXA     EQU    *-1
          STD    OR+1 
          LDN    0           COMPLETE FUNCTION
          STD    OR 
          N8SJ   RRX3        (NO ISD SUBSYSTEM JUMP)
          LDD    OR+4 
          LPC    100
          ZJN    RRX3        IF ISD WRITE IN PROGRESS 
          LCN    12-1 
 RRX3     ADN    12 
          STD    OR+2 
          LDD    T4          SET CHANNEL IN REPLY 
          LPN    37 
          STD    OR+4 
          LDD    OA 
          CWD    OR 
          LDC    PPR         RESET REENTRY ADDRESS
          STM    TREA,PP
          LDD    PR 
          ZJN    RRX4        IF NO PRIORITY REQUEST 
          RJM    PRR         PROCESS REQUEST
 RRX4     LJM    FNR         RETURN TO MAIN LOOP
          SPACE  4,10 
**        RSY - SELECT SYSTEM DEVICE. 
* 
*         THIS ROUTINE SELECTS A SYSTEM DEVICE BASED UPON THE 
*         FOLLOWING CRITERION.
*         1)     SELECT DEVICE WITH LEAST ACTIVITY. 
*         2)     IF ACTIVITY COUNTS EQUAL, SELECT DEVICE WHICH WILL 
*                REQUIRE THE LEAST MOVE OF THE POSITIONER.
  
  
 RSY      LDD    OA          READ PARAMETERS FROM MESSAGE BUFFER
          ADN    1
          CRD    T4 
          RJM    TIM
          LCN    0
          STD    CM+1        (CM+1) = LEAST ACTIVITY FOUND
          STD    CM+2        (CM+2) = TABLE INDEX 
          UJN    RSY4        ENTER SEARCH LOOP
  
 RSY1     RAD    CM+1        SET NEW LEAST ACTIVITY 
          LDD    CN+2 
          SBD    T6 
          PJN    RSY2        IF POSITIVE DISTANCE 
          LMC    -0 
 RSY2     STD    CM+4        (CM+4) = LEAST DISTANCE TO POSITION
 RSY3     LDD    CM+2        SET BEST EQUIPMENT 
          STD    CM+3        (CM+3) = *TSYD* INDEX OF EQUIPMENT FOUND 
  
*         SEARCH SYSTEM DEVICES FOR FREE UNIT INTERLOCK.
  
 RSY4     AOD    CM+2        INCREMENT TO NEXT SYSTEM DEVICE
          LDM    TSYM,CM+2
          ZJN    RSY6        IF END OF LIST 
          SHN    3
          ADN    DALL 
          CRD    CN 
          LDD    CN 
          LPC    7677        IGNORE LOW SPACE INDICATOR 
          SBD    CM+1 
          MJN    RSY1        IF LESS ACTIVITY 
          NJN    RSY4        IF MORE ACTIVITY 
          LDD    CN+2 
          SBD    T6 
          PJN    RSY5        IF POSITIVE DISTANCE 
          LMC    -0 
 RSY5     SBD    CM+4 
          PJN    RSY4        IF .GE. PREVIOUS DISTANCE
          RAD    CM+4 
          UJN    RSY3        SET BEST EQUIPMENT 
  
 RSY6     LDM    TSYD,CM+3
          SBD    T5 
          ZJP    RSY11       IF NO EQUIPMENT CHANGE 
  
*         CHANGE EQUIPMENT DEPENDENT PARAMETERS.
  
          RAD    T5          SET NEW EQUIPMENT
          NSDJ   RSY7        (NO SHARED DEVICES JUMP) 
          LDD    OR+4        RESET SHARED FLAG
          SCN    4
          LMM    TSHS,CM+3
          STD    OR+4 
 RSY7     LDD    OA          RESET UNIT NUMBER
          ADN    2
          CRD    CS 
          LDM    TSYM,CM+3   SET NEW MST
          STM    TPMS,PP
          SHN    3
          ADN    DDLL 
          CRD    CN          READ NEW UNIT LIST 
          LDN    CN*2+11     SET BYTE POINTER = CN+4 - LU/2 
          SBD    CS 
          SHN    21 
          STD    T2 
          SCN    77 
          LMI    T2 
          MJN    RSY8        IF FIRST UNIT IN BYTE
          SHN    -6 
 RSY8     BSS    0
 RSYA     LPN    77 
*RSYA     LPN    37          (33502 SYSTEM) 
 RSYB     UJN    RSY9        (NOT 33502 SYSTEM JUMP)
*RSYB     LMD    CS+1 
          LPN    37 
          LMD    CS+1 
 RSY9     STD    CS+1 
          N8SJ   RSY10       (NO ISD SUBSYSTEM JUMP)
          STM    TCMN,PP
          LMC    200         RESTORE READ/SEEK PARAMETER
          STD    CS+1 
 RSY10    LDD    OA          WRITE NEW EQUIPMENT NUMBER 
          ADN    1
          CWD    T4 
          ADN    1           WRITE NEW PHYSICAL UNIT NUMBER 
          CWD    CS 
 RSY11    BSS    0
*         UJN    CUI         CHECK UNIT INTERLOCK 
 CUI      SPACE  4,10 
**        CUI - CHECK FOR UNIT INTERLOCK FREE.
* 
*         NOTE THAT THE ACTIVITY COUNT IS NOT INCREMENTED UNTIL AFTER 
*         THE SYSTEM SELECTION HAS TAKEN PLACE.  THIS IS DONE TO INSURE 
*         EQUAL TREATMENT OF ALL SYSTEM DEVICES.  IT ALSO PREVENTS
*         DEVICE ACTIVITY FROM BEING SET WHEN WAITING FOR STORAGE MOVE. 
* 
*         *CUI* SETS THIS PP AS REQUESTING THE UNIT, IF THE UNIT
*         INTERLOCK IS BUSY AND THE REQUEST IS FOR LOGICAL UNIT ZERO. 
* 
*         A UNIT REQUEST WILL BE PROCESSED IMMEDIATELY UPON RELEASE OF
*         THE UNIT, INSURING THE SEEK WILL BE INITIATED PRIOR TO
*         ASSIGNING THE CHANNEL TO OTHER REQUESTS.  WITHOUT THIS LOGIC
*         THE CHANNEL MAY BE GIVEN TO A REQUEST WHICH IS ON-CYLINDER
*         THUS PREVENTING THE SEEK FROM BEING INITIATED AND OVERLAPING
*         WITH I/O OPERATIONS.
  
  
 CUI      MSTA   DALL,PP     ENTRY TO INCREMENT ACTIVITY COUNT
          CRD    CN 
          AOD    CN 
          LDD    CN+1 
          LMD    OR+3 
          SBD    CN+1 
          PJN    CUI4        IF UNIT INTERLOCK AVAILABLE
          LDC    CUI3        RESET ENTRY TO CHECK UNIT INTERLOCK
          STD    OR+1 
          LDD    OA          WRITE UPDATED PROCESSOR ADDRESS
          CWD    OR 
 CUI1     LDD    OR+3 
          SHN    -13
          ZJN    CUI2        IF NOT FIRST UNIT OF DEVICE
          LDD    PP          SET THIS PP AS REQUESTING UNIT 
          STD    CN+3 
 CUI2     MSTA   DALL,PP
          CWD    CN 
          LJM    RER         RECHECK INTERLOCK UPON REENTRY 
  
 CUI3     MSTA   DALL,PP
          CRD    CN 
          LDD    CN+1 
          LMD    OR+3 
          SBD    CN+1 
          MJN    CUI1        IF UNIT INTERLOCK SET
 CUI4     RAD    CN+1        SET UNIT INTERLOCK 
          LDD    OA          READ TRACK 
          ADN    1
          CRD    T4 
          LDD    T6          SET CURRENT POSITION 
          STD    CN+2 
          MSTA   DALL,PP     WRITE UPDATED UNIT INTERLOCK 
          CWD    CN 
          RJM    SCS         SET CHANNEL SELECTION PROCESSING 
          LJM    0,OR+1      CHECK CHANNEL
 PRR      SPACE  4,15 
**        PRR - PROCESS PRIORITY REQUEST. 
* 
*         *PRR* IS ENTERED TWICE, FIRST, TO PROCESS A PRIORITY
*         REQUEST, AND SECOND, UPON COMPLETION OF PROCESSING A
*         PRIORITY REQUEST. 
* 
*         ENTRY  (A) = (PR) = PRIORITY PP NUMBER ON INITIAL ENTRY.
*                (A) = (PR) = PP OR ADDRESS FOR SECOND ENTRY. 
* 
*         EXIT   TO *RER2* TO PROCESS PRIORITY SEEK REQUEST.
*                TO INITIAL RETURN ADDRESS FOR SECOND ENTRY.
* 
*         USES   T1, PR.
  
  
 PRR      SUBR               ENTRY/EXIT 
          STD    T1 
          SHN    -5 
          NJN    PRR1        IF NOT INITIAL ENTRY 
          LDM    PRR         SAVE EXIT ADDRESS
          STM    PRRA 
          LDM    TREA,T1
          LMC    RER2 
          NJN    PRR2        IF NOT IN REENTRY PROCESSING 
          RJM    TIM
          LDD    OA          SET ORIGINAL OUTPUT REGISTER ADDRESS 
          STD    PR 
          LDD    T1 
          STD    PP 
          LJM    MTR3        PROCESS PRIORITY REQUEST 
  
 PRR1     LDD    PR          RESET OUTPUT REGISTER ADDRESS
          STD    OA 
          SBD    OF          RESET PP NUMBER
          SHN    -3 
          STD    PP 
 PRR2     LDN    0
          STD    PR 
          LJM    *           RETURN TO ORIGINAL ENTRY 
 PRRA     EQU    *-1
 SCS      SPACE  4,30 
**        SCS - SET *DSWM* CHANNEL SELECTION. 
* 
*         THIS ROUTINE SELECTS THE CHANNEL ASSIGNMENT PROCESSOR BASED 
*         UPON THE FOLLOWING TABLE.  THE TABLE CONTAINS ENTRIES FOR 
*         EACH OF THE POSSIBLE COMBINATIONS OF THE RELEVANT *DSWM*
*         REENTRY FLAGS.  THE RELEVANT *DSWM* REENTRY FLAGS ARE - 
* 
*         BIT    5           ISD DEVICE.
*         BIT    4           CHANNEL SELECTED BY CALLER.
*         BIT    3           SEEK ON SHARED DEVICE. 
* 
*         FLAGS      PROCESSOR     CHANNEL(S) 
*         0X            C2C           CN+4
*         1X            C1C           T4
*         2X            C1C           T4
*         3X            C1C           T4
*         4X            C2M           CN+4
*         5X            C1M           T4
*         6X            C1M           T4
*         7X            C1M           T4
* 
*         SELECTION OF THE *C2C* OR *C2M* PROCESSOR WILL BE MADE ONLY 
*         IF NEITHER CHANNEL OF A DUAL ACCESS DEVICE IS BEING IDLED.
* 
*         ENTRY  (OR+4) = *DSWM* REENTRY PROCESSING FLAGS.
*                (CN+4) = CHANNELS FOR UNIT.
*                (T4) = CURRENTLY SELECTED CHANNEL. 
* 
*         EXIT   (OR+1) = CHANNEL ASSIGNMENT PROCESSOR. 
*                (OR+3) = CHANNEL(S) FOR ASSIGNMENT PROCESSOR.
*                (OR - OR+4) WRITTEN TO (OA). 
  
  
 SCS8     STD    OR+3 
          LDD    OA          WRITE PARAMETERS 
          CWD    OR 
  
 SCS      SUBR               ENTRY/EXIT 
          LDD    OR+4 
          LPN    70 
          ZJN    SCS5        IF NO SPECIAL PROCESSING, FLAGS = 0X 
          SBN    40 
          MJN    SCS1        IF NOT ISD DEVICE, FLAGS = 1X, 2X, 3X
          ZJN    SCS4        IF NO CHANNEL SELECTION, FLAGS = 4X
 SCS0     LDC    C1M         FLAGS = 5X, 6X, 7X 
          UJN    SCS2        SELECT SINGLE CONTROL MODULE CHANNEL 
  
 SCS0.1   LDD    OR+4 
          LPN    40 
          NJN    SCS0        IF ISD 
 SCS1     LDC    C1C
 SCS2     STD    OR+1        SET SINGLE CHANNEL PROCESSOR 
          LDD    T4 
 SCS3     UJN    SCS8        STORE OUTPUT REGISTER AND RETURN 
  
 SCS4     LCN    C2C-C2M
 SCS5     ADC    C2C         CHANNEL SELECTION PROCESSOR
          STD    OR+1 
          LDD    CN+4 
          SHN    14 
          STD    T1 
          SHN    -14
 SCS6     STD    T4 
          LMD    T1 
          ZJN    SCS0.1      IF SINGLE CHANNEL ACCESS 
          LDM    TCHS,T1
          SHN    21-6 
          MJN    SCS1        IF CHANNEL BEING IDLED 
          LDM    TCHS,T4
          SHN    21-6 
          PJN    SCS7        IF CHANNEL NOT BEING IDLED 
          LDD    T1 
          UJN    SCS6        SELECT OTHER CHANNEL 
  
 SCS7     LDD    CN+4        SET CHANNELS FOR SELECTION 
          UJN    SCS3        STORE OUTPUT REGISTER AND RETURN 
 TDSWM    SPACE  4,10 
 TDSWM    BSS    0           TABLE OF *DSWM* SUBFUNCTION PROCESSORS 
          DUP    MXDSWM,1 
          CON    DSW15
 TDSWM    HERE
          ORG    TDSWM+MXDSWM 
          SPACE  4
**        TMSK - TABLE OF SINGLE BIT MASKS
  
 TMSK     BSS    0
          CON    4000 
          CON    2000 
          CON    1000 
          CON    0400 
          CON    0200 
          CON    0100 
          CON    0040 
          CON    0020 
 ECXM     TITLE  PP REQUEST FUNCTION PROCESSORS.
 HLTM     SPACE  4,10 
***       HLTM - HALT PP WHILE IN SYSTEM DEBUG MODE.
* 
*         ENTRY 
*T, OR    12/  HLTM,12/,12/,12/,12/ 
* 
*         EXIT   IF SYSTEM DEBUG MODE DISABLED
*T, OR    60/0
* 
*         EXIT   IF SYSTEM DEBUG MODE ENABLED 
*T, OR    12/  HLTM,12/,12/,12/,12/ 
  
  
          PPR    HLTM 
  
          LDK    SSTL        CHECK SYSTEM DEBUG DISABLED FLAG 
          CRD    CM 
          LDD    CM+3 
          SHN    21-1 
          PJN    PRL1        IF SYSTEM DEBUG ENABLED
  
 HLT1     LDC    MS2W+**     CLEAR PP HUNG MESSAGE AT SYSTEM CP 
 HLTA     EQU    *-1
          CWD    ZR 
          UJN    PRL2        RETURN CLEARING OUTPUT REGISTER
 PRLM     SPACE  4
***       PRLM - PAUSE FOR STORAGE RELOCATION.
* 
*         ENTRY 
*T, OR    12/  PRLM,12/,12/,12/,12/ 
* 
*         EXIT
*T, OR    12/  0, 48/ 
  
  
          PPR    PRLM 
  
          LDD    MM.4 
          ZJN    PRL2        IF NO MOVE IN PROGRESS 
          LDD    PP          GET ASSIGNED CP/PCP
          SHN    PPXES
          TADC   ACPP,PPX 
          CRD    CM 
          LDD    CM          CHECK CP/PCP ASSIGNMENT
          LMD    MM.0 
          NJN    PRL2        IF NOT AT MOVE 
 PRL1     LJM    FNR         EXIT 
  
 PRL2     LJM    FNC         EXIT TO CLEAR OUTPUT REGISTER
 RCHM     SPACE  4,20 
***       RCHM - REQUEST CHANNEL. 
* 
*         REQUEST ASSIGNMENT OF 1 OF 2 POSSIBLE CHANNELS. 
* 
*         ENTRY 
*T, OR    12/  RCHM,1/R,5/  ,1/C,5/  CH0,6/  ,1/C,5/  CH1,24/ 
*         R      SET IF CALLER WANTS IMMEDIATE RETURN IF CHANNEL(S) 
*                DOWN.
*         C      SET IF CONCURRENT CHANNEL IS SPECIFIED BY CHX. 
*         CHX    CHANNEL. 
* 
*         EXIT
*T, OR    12/  0,1/R,11/  CH,36/
*         R      SET IF CHANNEL(S) DOWN AND CALLER REQUESTED IMMEDIATE
*                RETURN.  THE *CH* FIELDS ARE UNCHANGED IN THIS CASE. 
*         CH     CHANNEL ASSIGNED.
  
  
          PPR    RCHM 
  
          LDD    PP          GET ASSIGNED CP/PCP
          SHN    PPXES
          TADC   ACPP,PPX 
          CRD    CM 
          LDD    CM          CHECK FOR MOVE 
          LMD    MM.0 
          ZJN    PRL1        IF MOVE REQUEST
          LDD    OR+1 
          LPN    77 
          RJM    TCH
          NJN    RCH2        IF CHANNEL NOT AVAILABLE 
 RCH1     LJM    CCH4        RESERVE THE CHANNEL
  
 RCH2     SHN    0-21 
          STD    T1          SAVE CHANNEL STATUS
          LDD    OR+2 
          NJN    RCH4        IF SECOND CHANNEL SPECIFIED
          AOD    T1 
 RCH3     SHN    -1 
          ZJN    PRL1        IF AT LEAST 1 CHANNEL UP 
          LDD    OR+1 
          SBD    FT 
          MJN    PRL1        IF REPLY NOT REQUESTED 
          LJM    FNC         RETURN REJECT STATUS 
  
 RCH4     RJM    TCH
          ZJN    RCH1        IF CHANNEL AVAILABLE 
          SHN    0-21 
          RAD    T1 
          UJN    RCH3        CHECK FOR BOTH CHANNELS DOWN 
 RCXM     SPACE   4,25
***       RCXM - PERFORM EM TRANSFER DURING ROLLIN/ROLLOUT. 
* 
*         *RCXM* REQUESTS ARE ISSUED BY *1RI* AND *1RO* DURING THE
*         ROLLIN/ROLLOUT OF USER EM.  THE ISSUING PP PLACES THE REQUEST 
*         IN ITS OUTPUT REGISTER AND PERFORMS I/O ASYNCHRONOUSLY WITH 
*         THE COMPLETION OF THE REQUEST.  *MTR* CHANGES THE REQUEST TO
*         AN *ECXM* REQUEST AND PASSES IT ON TO *CPUMTR*.  THE
*         APPROPRIATE REQUEST BIT WILL BE SET IN *CPUMTR-S* *PR*
*         PROGRAM MODE REQUEST WORD.
* 
*         ENTRY 
*T, OR    12/ECXM, 1/C, 11/, 12/CPN, 5/, 1/T, 18/ADDR 
*         C      SET IF ALTERNATE CP/PCP SPECIFIED. 
*         CPN    ALTERNATE CP/PCP NUMBER IF *C* SELECTED. 
*         T      FUNCTION TYPE -
*                0    READ. 
*                1    WRITE.
*         ADDR   RESPONSE ADDRESS.
* 
*         EXIT
*T, OR    60/0
*T, ADDR  12/0, 12/ST, 36/0 
*         ST = STATUS.
*              0      NO ERROR IN TRANSFER. 
*              7777   ERROR IN TRANSFER.
  
  
          PPR    RCXM 
  
          LDC    ECXM+2000   CHANGE FUNCTION TO PROGRAM MODE *ECXM* 
          STD    OR 
          LDD    OA          WRITE OUTPUT REGISTER
          CWD    OR 
          SBD    OF          COMPUTE PROGRAM MODE REQUEST STACK BIT 
          SHN    -3 
          ADN    11D
          STD    CN+2 
          LDN    EPRF        ENTER PROGRAM MODE REQUEST 
          RJM    CPR
          LJM    FNR         RETURN WITHOUT CLEARING PP OR
 SFLM     SPACE  4,15 
***       SFLM - SET FL INCREASE REJECTED.
* 
*         ENTRY 
*T, OR    12/ SFLM,12/ FN,12/ CP,12/,12/
* 
*         FN     FUNCTION 
*                1 = SET CM INCREASE REJECTED.
*                2 = SET ECS INCREASE REJECTED. 
*         CP     CONTROL POINT NUMBER.
* 
*         EXIT
*T, OR    12/ 0,48/ 
  
  
          PPR    SFLM 
  
  
          LDD    OR+2 
          SBD    NC 
          PJN    SFR2        IF ILLEGAL CP NUMBER 
          ADD    NC 
          SHN    7
          ADN    FLIW 
          STD    OR+3 
          CRD    CM 
          LDD    CM+3 
          ADD    CM+4 
          ZJN    SFR1        IF INCREASE NO LONGER PENDING
          LCN    0
          LMD    OR+1        SET MASK 
          STM    SFRA 
          LDD    CM+1        SET CORRECT BIT
          LPC    *
*         LPC    7776        (SET CM INCREASE REJECT) 
*         LPC    7775        (SET ECS INCREASE REJECT)
 SFRA     EQU    *-1
          LMD    OR+1 
          STD    CM+1 
          LDD    OR+3        REWRITE FL INCREASE CONTROL WORD 
          CWD    CM 
 SFR1     LJM    FNC         COMPLETE FUNCTION
  
 SFR2     RJM    HNG         HANG PP
 RSTM     SPACE  4,50 
***       RSTM - REQUEST STORAGE. 
* 
*         REQUEST CM OR ECS STORAGE ASSIGNMENT AT CONTROL POINT.
*         CM AND ECS STORAGE REQUESTS ARE DEFINED TO BE 
*         .GE. 0 AND .LE. 3777B.
* 
*         A *HUNG PP* WILL BE GENERATED IF ANY OF THE FOLLOWING OCCURS. 
*         1) REQUEST FOR ECS AND USER ECS IS NOT DEFINED. 
*         2) REQUEST FOR NEGATIVE FL FOR ECS. 
*         3) CMR REQUEST FOR NEGATIVE FL. 
*         4) FL REQUEST GREATER THAN 3777B. 
*         5) A SPECIAL REQUEST WAS MADE BY A PP OTHER THAN *VER*. 
*         6) REQUEST IS FOR AN INVALID CONTROL POINT. 
* 
*         THERE ARE SEVERAL CHECKS IN MEMORY ALLOCATION WHICH WILL
*         STOP *MTR* IF SOMETHING IS WRONG.  THIS TYPE OF LOGIC IS
*         NEEDED TO PRESERVE CONDITIONS AND ENSURE SYSTEM INTEGRITY.
* 
*         ENTRY 
* 
*T, OR    12/ RSTM,12/ FL,12/ F,12/ PN,12/
*         FL     FIELD LENGTH DESIRED (CM FL/100, ECS FL/*UESB*). 
*                IF NEGATIVE, AMOUNT OF CM TO RETURN TO SYSTEM
*                  (SPECIAL *VER* REQUEST ONLY).
* 
*         F      FLAG BITS. 
*                BIT  0 = TYPE OF STORAGE REQUEST (1 = XM). 
*                     1 = UNUSED. 
*                     2 = UNUSED. 
*                     3 = UNUSED. 
*                     4 = UNUSED. 
*                     5 = CLEAR STORAGE REQUEST COMPLETE. 
*                     6 = SET INCREASE IN *FLIW* IF NOT AVAILABLE.
*                     7 = CHANGE EXECUTION FL (*VER* ONLY). 
*                     8 = CM REQUEST IS FOR NEGATIVE FL.
*                     9 = CHANGE CMR SIZE.
*                    10 = TRANSFER FL FROM CP TO PCP (PSEUDO-ROLLOUT).
*                    11 = TRANSFER FL FROM PCP TO CP (PSEUDO-ROLLIN). 
* 
*         PN     PSEUDO-CONTROL POINT NUMBER IF CP/PCP TRANSFER (BIT 10 
*                  OR BIT 11 SET).
* 
*         EXIT
* 
*T, OR    60/  0
*         REQUEST HAS BEEN HONORED. 
* 
*T, OR    12/  0,12/  FL,12/,12/,12/
*         STORAGE IS NOT AVAILABLE. 
  
  
          PPR    RSTM 
  
          SBD    OF          GET ASSIGNED CP OR PCP 
          SHN    PPXES-PPCES
          TADC   ACPP,PPX 
          CRD    CM 
          LDD    MM.4 
          NJP    FNR         IF MOVE IN PROGRESS
          LDD    CM          SET ASSIGNED CP/PCP NUMBER 
          STD    CP 
          STD    T6 
          ZJN    RST2        IF INVALID CP/PCP NUMBER 
          SBM    UFLA 
          PJN    RST2        IF INVALID CP/PCP NUMBER 
          LDD    OR+2 
          LPN    1           SET STORAGE TYPE 
          STD    T5 
 RSTA     SBN    2
*         SBN    1           (USER ECS UNDEFINED) 
          PJN    RST2        IF ILLEGAL REQUEST 
          LDD    OR+2 
          SHN    0-11 
          ZJN    RST3        IF NOT CP/PCP FL TRANSFER OR CMR REQUEST 
          SCN    1
          NJN    RST1        IF PSEUDO-ROLLIN OR PSEUDO-ROLLOUT 
          STD    CP          SET CMR MCT ORDINAL
          STD    T6 
          UJN    RST3        SET FL CONTROL WORD ADDRESS = CMRL 
  
 RST1     LDD    OR+3 
          STD    T8          SAVE PCP NUMBER
          SBM    UFLA 
 RST2     PJN    RST4        IF INVALID PCP NUMBER
 RST3     LDM    MAFA,T5
          STD    OR+3        SET FL CONTROL WORD ADDRESS
          LDD    CP 
          RJM    SCP         READ FL CONTROL WORD 
          ADD    OR+3 
          CRD    CS 
          LDD    OR+2        SET BYTE INDEX 
          SHN    -6 
          LPN    4
          LMN    4
          STD    OR+4 
          NJN    RST5        IF NOT NEGATIVE FL REQUEST 
          LDD    T5 
          NJN    RST4        IF XM REQUEST
          LDD    CP 
          ZJN    RST4        IF CMR REQUEST 
          RJM    STA
          CRD    CM          GET MCT ENTRY FOR CP 
          LDD    CM 
          STD    T6          SET MCT ORDINAL TO BACKWARD LINK 
          LDD    OR+1 
          SBN    MNFL+1 
          MJN    RST6        IF VALID NFL REQUEST 
  
 RST4     RJM    HNG         HANG PP
  
 RST5     LDD    OR+2        CHECK FLAG BITS
          SHN    21-7 
          MJN    RST8        IF SPECIAL REQUEST 
          LDD    CS 
          ADD    OR+1 
          SHN    -13
          NJN    RST4        IF REQUEST .GT. 3777 
 RST6     LDD    T5 
 RSTB     ZJN    RST7        IF NOT AN ECS REQUEST
*         UJN    RST7        (SINGLE CPU OR CPU-1 FOR NOS/VE ONLY)
*         UJN    RST7        (810/830 ALLOW USER XM ON EITHER CPU)
*         UJN    RST7        (865/875 ALLOW ECS ON EITHER CPU)
          LDD    NC 
          SBD    CP 
          MJN    RST7        IF PCP 
          LDN    1
          STD    CM+4        SET IMPLICIT CPU 0 SELECTION 
          LDN    CPUS 
          STD    CM+1        CHANGE JOB CONTROL PARAMETERS
          MONITOR  SJCM 
 RST7     LDD    OA          STORE OUTPUT REGISTER
          CWD    OR 
          LDD    OR+2        CHECK FLAG BITS
          SHN    0-12 
          NJN    RST10       IF PSEUDO CONTROL POINT OPERATION
          LDD    OR+1        CHECK INCREASE 
          SBM    CS,OR+4
          NJN    RST12       IF FL CHANGE 
          RJM    CFL         CLEAR FL INCREASE REQUEST
          LJM    FNZ         CLEAR OUTPUT REGISTER
  
 RST8     RJM    PVE         CHECK SPECIAL REQUEST FROM *VER* 
          PJN    RST17       IF INCREASE
 RST9     LJM    RST22       PROCESS DECREASE 
  
 RST10    LJM    RST19       PROCESS PCP REQUEST
  
 RST12    STD    T7          SAVE INCREMENT 
          PJN    RST17       IF INCREASE
  
*         PROCESS STORAGE DECREASE. 
  
          LDD    CP 
          ZJN    RST9        IF CMR REQUEST 
          LMN    1
          NJN    RST15       IF NOT FIRST CP
          LDD    OR+4 
          ZJN    RST9        IF NEGATIVE FL REQUEST 
 RST15    LDD    CP 
 RSTE     SBN    **          CHECK CONTROL POINT
*         SBN    (NC)-1 
          NJN    RST16       IF NOT LAST CONTROL POINT
          LDD    OR+4 
          NJN    RST9        IF NOT NEGATIVE FL REQUEST 
 RST16    LDD    OR+2 
 RSTC     EQU    RST16
*         UJN    RST20       (MEMORY CLEARING NOT ENABLED)
          LPN    40 
          NJN    RST20       IF STORAGE CLEARED 
          LJM    RST26       SET UP *CSTM* REQUEST
  
*         PROCESS STORAGE INCREASE. 
  
 RST17    LDD    T6 
          RJM    RSB         FETCH UNASSIGNED MEMORY BLOCK
          SBD    T7 
          PJN    RST20       IF INCREASE POSSIBLE WITH NO MOVE
          RJM    UFL         CHECK UNASSIGNED FL
          MJN    RST21       IF MEMORY NOT AVAILABLE
          RJM    EMO         EVALUATE MOVE OPTIONS
 RST19    RJM    CRA         CHANGE REFERENCE ADDRESS 
 RST20    RJM    MFL         MODIFY FIELD LENGTH
          LJM    FNZ         CLEAR OUTPUT REGISTER
  
 RST21    RJM    SFL         SET FL INCREASE
          LJM    FNC         COMPLETE FUNCTION
  
*         MOVE CP 1 ON CMR DECREASE.
*         MOVE LAST CONTROL POINT ON DECREASE.
*         MOVE CP 1 ON CP 1 NEGATIVE FL DECREASE. 
  
 RST22    LDD    CP          SET REQUESTING CP
          STD    MM.3 
          NJN    RST23       IF NOT CMR REQUEST 
          LDN    1
 RST23    STD    MM.0        SET CP/PCP FOR MOVE
          STM    AMVB 
          LMN    1
          ZJN    RST24       IF CMR REQUEST OR CP 1 
          LCN    0
 RST24    LMD    T7          SET MOVE INCREMENT 
          STD    MM.1 
          RJM    MFL         MODIFY FIELD LENGTH
          LJM    EMO3        INITIATE MOVE
  
 RST26    LDD    OA          SAVE *RSTM* REQUEST IN MB+5
          ADN    6
          CWD    OR 
          LDC    400         SET SPECIAL *CSTM* REQUEST 
          STD    OR+1 
          LDC    CSTM+4000
          STD    OR 
          LDD    OA 
          CWD    OR 
          LJM    FNR         WAIT FOR *CSTM* TO COMPLETE
 SCHM     SPACE  4
 SEQM     SPACE  4,20 
***       SEQM - SET EQUIPMENT PARAMETERS.
* 
*         ENTRY.
*T, OR    12/ SEQM,12/ P0,12/ SF,12/ P1,12/ P2
*         WHERE - 
*         P0     EST ORDINAL FOR ALL SUBFUNCTIONS EXCEPT CCNS, ICNS.
*                FOR SF = DNCS, IF *P0* = 0 THEN UNCONFIGURED CHANNEL 
*                IS BEING GLOBALLY DOWNED.
*         P0     CONTROL POINT NUMBER FOR FUNCTIONS CCNS, ICNS. 
*                (IF 4000B + CONTROL POINT NUMBER, *P2* = ALTERNATE 
*                EJT ORDINAL).
*         SF     SUBFUNCTION CODE.
*                ONES =  0 = ON EQUIPMENT.
*                IDES =  1 = IDLE EQUIPMENT.
*                OFES =  2 = OFF EQUIPMENT. 
*                DWES =  3 = DOWN EQUIPMENT.
*                SB0S =  4 = SET BYTE 0 OF EST. 
*                SB1S =  5 = SET BYTE 1 OF EST. 
*                SB2S =  6 = SET BYTE 2 OF EST. 
*                SB3S =  7 = SET BYTE 3 OF EST. 
*                SB4S = 10 = SET BYTE 4 OF EST. 
*                DNCS = 11 = DOWN CHANNEL.
*                UPCS = 12 = UP CHANNEL.
*                       13 = RESERVED.
*                CCNS = 14 = RELEASE CHANNEL FROM MAINTENANCE JOB.
*                ICNS = 15 = ASSIGN CHANNEL TO MAINTENANCE JOB. 
*                       16 = RESERVED.
*                       17 = RESERVED.
*                SMNS = 20 = SET EQUIPMENT MNEMONIC.
*                CSES = 21 = CLEAR SUSPECT FLAG.
*                SSES = 22 = SET SUSPECT FLAG.
*                CRES = 23 = CLEAR RESTRICT NEW ACTIVITY FLAG.
*                SRES = 24 = SET RESTRICT NEW ACTIVITY FLAG.
*                       25 = RESERVED.
*                CKPS = 26 = CHECKPOINT SYSTEM. 
* 
*         P1     EQUIPMENT MNEMONIC FOR SUBFUNCTION SMNS. 
*         P1     MASK FOR SUBFUNCTIONS SB0S - SB4S. 
*         P1     6/ 0,6/ CH  FOR SF = DNCS, UPCS, CCNS AND ICNS.
*                CH = CHANNEL, INCLUDING CONCURRENCY FLAG.
*         P2     VALUE FOR SUBFUNCTIONS SB0S - SB4S.
*         P2     MUX CHANNEL INDICATOR FOR SUBFUNCTIONS DNCS, UPCS. 
*         P2     ALTERNATE EJT ORDINAL TO ASSIGN/RELEASE CHANNEL
*                TO/FROM FOR FUNCTIONS CCNS, ICNS, IF *P0* = 4000B +
*                CONTROL POINT NUMBER.
* 
*         EXIT. 
* 
*T, OR    12/  0,48/  UNCHANGED.
*                REQUEST HAS BEEN HONORED.
* 
*T, OR    60/ 0 FOR SUBFUNCTIONS ONES, IDES AND OFES WHEN THE DEVICE IS 
*                DOWN AND ASSIGNED TO A DIAGNOSTIC. 
* 
*T, OR    60/ 0 FOR SUBFUNCTION DWES WHEN ATTEMPTING TO DOWN THE LAST 
*                SYSTEM DEVICE. 
* 
*T, OR    12/ 0,12/ ST,36/ UNCHANGED   FOR SUBFUNCTION DNCS WHEN UNABLE 
*                                      TO PROCESS REQUEST NORMALLY. 
*             ST = 0  IF ONLY ONE NON-DOWN ACCESS REMAINS ON A
*                     NON-DOWN DEVICE.
* 
*T, OR    60/ 0 FOR SUBFUNCTION UPCS WHEN - 
*                A MAINTENANCE USER IS ACTIVE ON THE CHANNEL. 
* 
*         HANG CONDITIONS - 
* 
*         MUX CHANNEL AND CONCURRENT CHANNEL SPECIFIED ON 
*         UP/DOWN CHANNEL REQUEST (SUBFUNCTIONS DNCS, UPCS) 
*         THE VALUE OF THE CHANNEL DESCRIPTOR (1/C,5/CH)
*         EXCEEDS 51B (SUBFUNCTIONS DNCS, UPCS, CCNS, ICNS).
*         FOR SUBFUNCTION CCNS IF CHANNEL NOT ASSIGNED
*         TO CALLER (OR ALTERNATE EJT ORDINAL). 
  
  
          PPR    SEQM 
  
          LDD    PP          GET ASSIGNED CP/PCP
          SHN    PPXES
          TADC   ACPP,PPX 
          CRD    CM 
          LDD    CM          CHECK FOR MOVE 
          LMD    MM.0 
          ZJP    FNR         IF MOVE IN PROGRESS
          LDD    OR+2        CHECK SUBFUNCTION
          SBN    CCNS 
          ZJN    SEQ4        IF MAINTENANCE JOB REQUEST 
          SBN    ICNS-CCNS
          ZJN    SEQ4        IF MAINTENANCE JOB REQUEST 
          SBN    TSEQL-ICNS 
          MJN    SEQ2        IF VALID SUBFUNCTION 
 SEQ1     RJM    HNG         HANG PP
  
 SEQ2     LDD    OR+1        FETCH EST ENTRY
          SFA    EST
          ADK    EQDE 
          CRD    CS 
          LDD    OR+2 
          SBN    DNCS 
          NJN    SEQ3        IF NOT DOWN CHANNEL REQUEST
          LDD    OR+1 
          NJN    SEQ3        IF EST ORDINAL SPECIFIED 
          LDD    FT 
          STD    CM+1 
          LJM    DNC10       SET GLOBAL DOWN FLAG 
  
 SEQ3     LDC    0           VALIDATE EST ORDINAL 
 SEQA     EQU    *-1
          SBD    OR+1 
          MJN    SEQ1        IF INVALID ORDINAL 
 SEQ4     LDM    TSEQM,OR+2  SET PROCESSOR ADDRESS
          STD    T8 
          LDD    OR+3        GET MASK 
          LJM    0,T8        JUMP TO PROCESSOR
  
 SST      SPACE  4,10 
***       SST - SET EQUIPMENT STATE.
*         ON, IDLE, OFF, DOWN EQUIPMENT.
  
  
 SST      SUBFUN SEQM,DWES   DOWN EQUIPMENT 
          LDD    CS 
          SHN    21-13
          PJP    SST4        IF NOT MASS STORAGE
          SHN    13-12
          PJN    SST3        IF NOT SYSTEM DEVICE 
          LCN    0
          STD    T1 
          STD    T2 
 SST1     AOD    T2          INCREMENT NON-DOWN SYSTEM DEVICE COUNT 
 SST1.1   AOD    T1          ADVANCE SYSTEM DEVICE TABLE INDEX
          LDM    TSYM,T1
          ZJN    SST2        IF END OF SYSTEM DEVICE LIST 
          SHN    3
          ADK    DALL 
          CRD    CN 
          LDD    CN 
          SHN    0-10 
          LMN    3
          NJN    SST1        IF NOT DOWN, COUNT IT
          UJN    SST1.1      AVOID COUNTING DOWN DEVICE 
  
 SST2     LDD    T2 
          SHN    -1 
          ZJP    FNZ         IF ONLY ONE NON-DOWN SYSTEM DEVICE REMAINS 
 SST3     LDD    OR+1 
          STD    CM+1 
          MONITOR  CDAM      CHECK DEVICE ACTIVITY
          LDD    CM+1 
          NJP    FNR         IF ACTIVITY REMAINS
  
 SST4     SUBFUN SEQM,(ONES,IDES,OFES)
          LDD    CS          SET NEW DOWN BIT 
          SCN    3
          LMD    OR+2 
          STD    CS 
          LDD    OR+2        BITS TO SET 2/ STATE, 1/ SUSPECT, 1/ 
          SHN    2
          LMD    OR+2 
          LPN    16 
          SHN    14 
          LMN    16 
          UJN    SST9        SET STATE IN MST 
  
*         SET/CLEAR SUSPECT BIT.
  
 SST5     SUBFUN SEQM,SSES
          LDC    20002
          UJN    SST9        SET SUSPECT BIT
  
 SST6     SUBFUN SEQM,CSES   CLEAR SUSPECT BIT
          LDD    CS 
          LPN    2
          NJP    FNC         IF OFF OR DOWN, DO NOT CLEAR SUSPECT 
          LDN    2
          UJN    SST9        ADJUST BITS IN MST 
  
*         SET/CLEAR RESTRICT NEW ACTIVITY BIT.
  
 SST7     SUBFUN SEQM,SRES   SET RESTRICT NEW ACTIVITY BIT
          LDC    10001
          UJN    SST9        SET BIT IN MST 
  
 SST8     SUBFUN SEQM,CRES   CLEAR RESTRICT NEW ACTIVITY BIT
          LDN    1
 SST9     STD    CM+4        SET BITS TO CHANGE 
          SHN    -14
          STD    CM+2        NEW BIT VALUES 
          LDD    CS 
          SHN    21-13
          PJN    SMN1        IF NOT MASS STORAGE
          LDN    SSTS        SET EQUIPMENT STATE BITS VIA CPUMTR
          STD    CM+3 
          LDD    OR+1        SET EQUIPMENT
          STD    CM+1 
          MONITOR  SMDM 
          LDD    CM+1 
          ZJN    SMN1        IF DEVICE NOT ASSIGNED TO DIAGNOSTIC 
          LJM    FNZ         REJECT FUNCTION
 SEB      SPACE  4,10 
***       SEB - SET EST BYTES.
  
  
 SEB      SUBFUN SEQM,(SB0S,SB1S,SB2S,SB3S,SB4S)  SET BYTES OF EST
          STM    SEBA        SET CLEARING MASK
          LDM    CS-SB0S,OR+2 
          LPC    0
 SEBA     EQU    *-1
          LMD    OR+4        MERGE IN NEW BITS
          STM    CS-SB0S,OR+2 
          UJN    SMN1        WRITE EST TO MEMORY
 SMN      SPACE  4,10 
***       SMN - SET EQUIPMENT MNEMONIC. 
  
  
 SMN      SUBFUN SEQM,SMNS
          STD    CS+3 
 SMN1     SFA    EST,OR+1    UPDATE EST ENTRY 
          ADK    EQDE 
          CWD    CS 
          LJM    FNC         COMPLETE FUNCTION
 UPC      SPACE  4,10 
***       UPC - UP CHANNEL. 
  
  
 UPC      SUBFUN  SEQM,UPCS  UP CHANNEL 
          LDD    OR+4 
          NJN    UPC2        IF MUX CHANNEL 
          LDD    OR+3 
          RJM    VCN         VERIFY CHANNEL NUMBER
          LDM    TCHS,OR+3
          LPN    40 
          ZJN    UPC2        IF NOT GLOBALLY DOWN 
          LDD    OR+3 
          RJM    GCE
          ZJN    UPC2        IF CHANNEL NOT ASSIGNED TO JOB 
 UPC1     LJM    FNZ         REJECT FUNCTION
  
 UPC2     LDN    UPSS 
          RJM    RCS         REQUEST CHANNEL STATE CHANGE 
          ZJN    UPC1        IF FUNCTION REJECTED 
          LDD    OR+4 
          NJN    UPC3        IF MUX CHANNEL 
          AOD    CF          SET CHANNEL TABLE UPDATE FLAG
          LDM    TCHS,OR+3   ENSURE GLOBAL DOWN BIT CLEAR 
          SCN    40 
          STM    TCHS,OR+3
 UPC3     LJM    FNC         COMPLETE FUNCTION
 DNC      SPACE  4,10 
***       DNC - DOWN CHANNEL. 
  
  
 DNC      SUBFUN SEQM,DNCS   DOWN CHANNEL 
          LDD    OR+4 
          NJN    DNC1        IF MUX CHANNEL 
          LDD    OR+3 
          RJM    VCN         VERIFY CHANNEL NUMBER
  
*         CHECK FOR DOWNING LAST ACCESS TO NON-DOWN DEVICE. 
  
          LDD    CS 
          SHN    21-13
 DNC1     PJP    DNC9        IF NOT MASS STORAGE
          LDN    2
          STD    T1 
 DNC2     SOD    T1 
          PJN    DNC3        IF NOT END OF CHECK
          LDD    CS 
          LPN    3
          LMN    3
          ZJN    DNC4        IF DEVICE IS DOWN
          LJM    FNZ         REJECT FUNCTION
  
 DNC3     LDM    CS+1,T1
          SHN    21-13
          PJN    DNC2        IF ACCESS NOT PRESENT OR DISABLED
          SHN    13-12
          MJN    DNC2        IF CHANNEL DOWN
          SHN    12-21
          LPN    77 
          LMD    OR+3 
          ZJN    DNC2        IF NOT ALTERNATE PATH
 DNC4     LDD    CS+4        READ *STLL* FROM MST 
          SHN    3
          ADN    STLL 
          CRD    CM 
          LDD    CM+1        CHECK *1MV* ACTIVE ON DEVICE 
          SHN    21-7 
          MJN    DNC7        IF *1MV* ACTIVE, LEAVE REQUEST PENDING 
          LDM    TCHS,T2     SET IDLEDOWN FLAG IN CHANNEL TABLE 
          LPC    -100 
          LMD    HN 
          STM    TCHS,T2
          STD    CF          SET CHANNEL TABLE UPDATE FLAG
  
*         REQUEST *CPUMTR* TO SET CHANNEL STATE = *IDLE*. 
  
          LDK    SICS        REQUEST CHANNEL STATE CHANGE 
          RJM    RCS
  
*         CHECK FOR ACTIVITY ON 834/836 DEVICE THROUGH CHANNEL BEING
*         DOWNED. 
  
          LDD    CS+3 
          LMC    2RDG 
          ZJN    DNC5        IF 836 DEVICE
          LMN    1RD&1RG
          NJN    DNC8        IF NOT 834 DEVICE
 DNC5     LDN    10          CHECK *TCMA* ENTRIES 
          STD    T1 
 DNC6     SOD    T1 
          MJN    DNC8        IF ALL *TCMA* ENTRIES CHECKED
          LDM    TCMA,T1
          ZJN    DNC6        IF NO ACTIVITY ON THIS CONTROL MODULE
          SHN    -6 
          LMD    OR+3 
          NJN    DNC6        IF ACTIVITY THROUGH DIFFERENT CHANNEL
 DNC7     LJM    FNR         LEAVE REQUEST PENDING
  
*         CHECK FOR SEEK PENDING THROUGH THIS CHANNEL ON A SHARED 
*         NONBUFFERED DEVICE. 
  
 DNC8     LDD    CS 
          LPC    1060 
          SHN    21-5 
          MJN    DNC9        IF BUFFERED DEVICE 
          ZJN    DNC9        IF NOT A SHARED DEVICE 
          LDM    TCHS,OR+3
          LPN    37 
          NJN    DNC7        IF CHANNEL IS ASSIGNED 
          LDM    TSCA,OR+3
          NJN    DNC7        IF SEEK PENDING THROUGH THIS CHANNEL 
  
*         REQUEST *CPUMTR* TO SET THE CHANNEL STATE = *DOWN*. 
  
 DNC9     LDK    DWSS        REQUEST CHANNEL STATE CHANGE 
          RJM    RCS
          ZJN    DNC7        IF REQUEST WAS REJECTED
 DNC10    LDD    OR+4 
          NJN    DNC11       IF MUX CHANNEL 
  
*         CLEAR THE IDLEDOWN AND GLOBAL DOWN FLAGS IN THE CHANNEL 
*         TABLE.
  
          LDM    TCHS,OR+3
          LPC    -140 
          STM    TCHS,OR+3
  
*         SET THE GLOBAL DOWN FLAG IF THE CHANNEL IS GLOBALLY DOWN. 
  
          LDD    CM+1 
          STD    CF          SET CHANNEL UPDATE FLAG
          SHN    0-13 
          SHN    5-0
          RAM    TCHS,OR+3
 DNC11    LJM    FNC         COMPLETE THE FUNCTION
 AMC      SPACE  4,10 
***       AMC - ASSIGN/RELEASE CHANNEL TO/FROM MAINTENANCE JOB. 
  
  
 AMC      SUBFUN SEQM,(CCNS,ICNS) 
*         LDD    OR+3        GET CHANNEL ASSIGNMENT STATUS
          RJM    GCE
          LDD    OR+1        CHECK FOR ALTERNATE EJT ORDINAL
          SHN    21-13
          PJN    AMC1        IF NO ALTERNATE EJT ORDINAL
          LDD    OR+4 
          STD    CN 
 AMC1     LDD    OR+2 
          LMN    ICNS 
          NJN    AMC5        IF RELEASE CHANNEL 
          LDM    TCHS,OR+3
          LMN    40 
          ZJN    AMC3        IF CHANNEL GLOBALLY DOWN 
 AMC2     LJM    FNZ         REJECT FUNCTION
  
 AMC3     LDI    T1 
          NJN    AMC2        IF CHANNEL ASSIGNED TO A JOB 
          LDD    CN          INSERT NEW EST ORDINAL 
 AMC4     STI    T1 
          LDC    0           WRITE CHANNEL ASSIGNMENT TABLE 
 SEQB     EQU    *-1
          ADD    T0          ADD CORRECT WORD INDEX 
          CWD    CM 
          UJN    CKP1        COMPLETE FUNCTION
  
 AMC5     LDD    CN          CHECK EST ORDINAL
          LMI    T1 
          ZJN    AMC4        IF CHANNEL ASSIGNED TO THIS JOB
          RJM    HNG         HANG PP
 CKP      SPACE  4,10 
***       CKP - FORCE SYSTEM CHECKPOINT.
  
  
 CKP      SUBFUN SEQM,CKPS
          LDM    PHED+2      SET *1MB* FUNCTION FLAG
          SCN    SPCP 
          LMN    SPCP 
          STM    PHED+2 
 CKP1     LJM    FNC         COMPLETE FUNCTION
 TSEQM    SPACE  4,10 
 TSEQM    BSS    0
          DUP    MXSEQM,1 
          CON    HNG1 
 TSEQL    EQU    MXSEQM 
 TSEQM    HERE
          ORG    TSEQM+MXSEQM 
 DSRM     SPACE  4,20 
***       DSRM - DSD REQUESTS.
* 
*         NOTE - THIS FUNCTION WILL BE HONORED ONLY FROM *DSD*, OR IF 
*                REQUEST *SET EMERGENCY STEP* AND BIT 57 OF *SCRL* SET. 
*                REQUEST 02 - SET DATE AND TIME - WILL BE ACCEPTED FROM 
*                NON-DSD PROGRAMS TO SUPPORT *PLATO* MMF MODE.
* 
*         ENTRY 
*T, OR    12/  DSRM,6/  P,6/  SF,36/  P 
*         P = PARAMETERS
*         SF = SUBFUNCTION CODE 
* 
*         EXIT   (CM - CM+4) = (SCRL).
* 
*         USES   T7.
* 
*         SUBFUNCTION MSPS - SET MONITOR STEP.
* 
*         ENTRY 
*T, OR    12/  DSRM,6/  BN,6/  MSPS,12/  EO,12/  FN,12/  BV 
*         BN = BYTE NUMBER TO STEP ON.
*         EO = EJT ORDINAL.  ZERO IF ALL EXECUTING JOBS.
*         FN = FUNCTION TO STEP.  ZERO IF ALL FUNCTIONS.
*         BV = BYTE VALUE TO STEP ON. 
*         IF B = 0, THEN
*            V = 2/,1/  F,2/,7/  FN 
*            WHERE F = 1 IF FN IS *CPUMTR* FUNCTION.
* 
*         EXIT
*T, OR    60/  0
* 
*         SUBFUNCTION STPS - STEP MONITOR.
* 
*         ENTRY 
*T, OR    12/  DSRM,6/  ,6/  STPS,36/ 
* 
*         EXIT
*T, OR    60/  0
* 
*         SUBFUNCTION EDTS - ENTER DATE AND TIME. 
* 
*         ENTRY 
*T, OR    12/  DSRM,6/  ,6/  EDTS,12/  ADDR,24/ 
* 
*         ADDR   ADDRESS + 1 OF MESSAGE BUFFER
* 
*T, MB+1  60/  JULIAN DATE
*T, MB+2  60/  PACKED DATE AND TIME 
*T, MB+3  60/  TIME 
*T, MB+4  60/  DATE 
*T, MB+5  12/  DAY LIMIT, 48/  UNUSED 
* 
*         EXIT
* 
*T, OR    60/  0
* 
*         SUBFUNCTION ESPS - SET EMERGENCY STEP.
* 
*         ENTRY 
*T, OR    12/  DSRM,6/  BN,6/  MSPS,12/  0,12/  FN,12/  BV
*         BN = BYTE NUMBER TO STEP ON.
*         FN = FUNCTION TO STEP.
*         BV = BYTE VALUE TO STEP ON. 
*         IF B = 0, THEN
*            V = 2/,1/  F,2/,7/  FN 
*            WHERE F = 1 IF FN IS *CPUMTR* FUNCTION.
* 
*         EXIT
*T, OR    60/  0
* 
*         SUBFUNCTION CSPS - CLEAR MONITOR STEP.
* 
*         ENTRY 
*T, OR    12/  DSRM,6/  ,6/ CSPS,36/
* 
*         EXIT
*T, OR    60/  0
* 
*         SUBFUNCTION SKCS - SET K DISPLAY COMPLETE BIT.
* 
*         ENTRY 
*T, OR    12/  DSRM,6/ SF,6/ SKCS,12/  CPA,12/
* 
*         SF = LEFT/RIGHT SCREEN FLAG 
*            = 0 IF LEFT SCREEN 
*            = 1 IF RIGHT SCREEN
*         CPA = CONTROL POINT ADDRESS 
* 
*         EXIT
*T, OR    60/  0
  
  
          PPR    DSRM 
  
          LDD    SC 
          CRD    CM 
          LDD    PP 
          SBN    1           CHECK REQUESTER
          ZJN    DSR1        IF *DSD* 
          LDD    OR+1        CHECK FOR TIME SET 
          SBN    2
          ZJN    DSR1        IF TIME SET
          MJN    DSR2        IF NOT VALID *1MB* REQUEST 
          SBN    5-2
          PJN    DSR2        IF NOT VALID *1MB* REQUEST 
          LDD    CM 
          SHN    21-11
          PJN    DSR2        IF NOT *1MB* REQUEST 
 DSR1     LDD    OR+1 
          LPN    77 
          STD    T7 
          LDM    TDSRM,T7     SET REQUEST PROCESSOR 
          STD    T7 
  
*         EXIT TO PROCESSOR WITH
*                (A) = 0. 
*                (CM - CM+4) = *SCRL*.
  
          LDN    0
          LJM    0,T7        ENTER PROCESSOR
  
 DSR2     RJM    HNG         HANG PP
 SES      SPACE  4,10 
**        SES - SET EMERGENCY STEP. 
* 
*         EXIT   TO *MSP*.
  
  
 SES      SUBFUN DSRM,ESPS
          LDN    1           SET EMERGENCY STEP FLAG
*         UJN    MSP         EXIT TO *MSPS* PROCESSOR 
 MSP      SPACE  4,10 
**        MSP - SET MONITOR STEP. 
* 
*         EXIT   TO *FNZ* TO CLEAR OUTPUT REGISTER. 
* 
*         USES   CM, CN+2.
* 
*         CALLS  CPR. 
* 
*         MACROS ISTORE.
  
  
 MSP      SUBFUN DSRM,MSPS
          ADN    1           SET STEP FLAG POSITION 
          SHN    7
          STD    T0 
          LMC    -0          STEP FLAG MASK 
          STM    MSPA 
          LDD    CM 
          LPC    0
 MSPA     EQU    *-1
          LMD    T0          SET STEP FLAG
          STD    CM 
          LDD    SC 
          CWD    CM 
          LDD    OR+2        SET EJT ORDINAL
          STM    CFSA 
          LDD    OR+3        SET FUNCTION TO TRAP 
          STM    CFSB 
          LDD    OR+1        SET BYTE NUMBER TO STEP
          SHN    -6 
          STM    CFSC 
          LDD    OR+4        SET BYTE VALUE TO STEP 
          STM    CFSD 
          ISTORE MTRB,(UJN MTR1)  FORCE CHECK OF CPP OUTPUT REGISTERS 
          ISTORE PPRA,(UJN  MSC)  SET TRANSFER TO *MSC* 
          STM    MSCA 
          LDN    0           SET STEP MODE
          STD    CN+2 
          LDN    MSCF        CHANGE STEP MODE CONTROL 
          RJM    CPR
          LJM    FNZ         EXIT TO CLEAR OUTPUT REGISTER
 CMS      SPACE  4,10 
**        CMS - CLEAR MONITOR STEP MODE.
* 
*         EXIT   STEP MODE CLEARED. 
*                TO *STP* TO CLEAR OUTPUT REGISTER. 
* 
*         USES   CM, CN+2, T7, OR - OR+4. 
* 
*         CALLS  CPR. 
* 
*         MACROS ISTORE.
  
  
 CMS      SUBFUN DSRM,CSPS
          LDD    CM          CLEAR STEP SET 
          LPC    6177 
          STD    CM 
          LDD    SC 
          CWD    CM 
 CMSA     ISTORE MTRB,(NJN MTR1)  RESET CONDITIONAL CPP CHECKING
*         ISTORE MTRB,(UJN MTR2)  (NO CPP-S PRESENT)
          ISTORE PPRA,(SBN CPUM)  RESET *PPR* PROCESSING
          LDN    1           CLEAR STEP MODE
          STD    CN+2 
          LDN    MSCF        CHANGE STEP MODE CONTROL 
          RJM    CPR
          LDD    OF          SET PP 2 
          ADN    20 
          STD    T7 
 CMS1     LDD    T7          READ OUTPUT REGISTER 
          CRD    OR 
          LDD    OR 
          SHN    21-11
          PJN    CMS2        IF *MTR* FUNCTION OR NOT STEPPED 
          SHN    11-6 
          SHN    6-21 
          LMD    FT 
          STD    OR 
          LDD    T7 
          CWD    OR 
 CMS2     LDN    10          ADVANCE PP 
          RAD    T7 
          SBD    OF 
          SHN    -3 
          LMD    NP 
          NJN    CMS1        IF NOT LAST PP 
*         UJN    STP         EXIT TO CLEAR OUTPUT REGISTER
 STP      SPACE  4,10 
**        STP - STEP MONITOR. 
* 
*         EXIT   STEP MODE SET IF ENTERED FROM *STPS* SUBFUNCTION.
*                STEP MODE CLEARED IF ENTERED FROM *CSPS* SUBFUNCTION.
*                TO *FNZ* TO CLEAR OUTPUT REGISTER. 
  
  
 STP      SUBFUN DSRM,STPS
          STM    MSCA 
 STP1     LJM    FNZ         EXIT TO CLEAR OUTPUT REGISTER
 EDT      SPACE  4,10 
**        EDT - ENTER DATE AND TIME.
* 
*         EXIT   *ADTF* FUNCTION ISSUED TO *CPUMTR* TO ALTER DATE AND 
*                  TIME.
*                TO *STP1* TO CLEAR OUTPUT REGISTER.
* 
*         USES   CN.
* 
*         CALLS  CPR. 
  
  
 EDT      SUBFUN DSRM,EDTS
          LDD    OR+2        SET BUFFER ADDRESS 
          STD    CN 
          LDN    ADTF        CALL *CPUMTR* TO ENTER DATE AND TIME 
          RJM    CPR
          UJN    STP1        EXIT TO CLEAR OUTPUT REGISTER
 SKC      SPACE  4,10 
**        SKC - SET K DISPLAY COMPLETE BIT. 
* 
*         EXIT   *SKCF* FUNCTION ISSUED TO *CPUMTR* TO SET K DISPLAY
*                  COMPLETE BIT.
*                TO *STP1* TO CLEAR OUTPUT REGISTER.
* 
*         USES   CN+1, CN+2.
* 
*         CALLS  CPR. 
  
  
 SKC      SUBFUN DSRM,SKCS
          LDD    OR+1        SET LEFT/RIGHT SCREEN FLAG 
          STD    CN+1 
          LDD    OR+2        SET CP ADDRESS 
          STD    CN+2 
          LDN    SKCF        CALL *CPUMTR* TO SET COMPLETE BIT
          RJM    CPR
          UJN    STP1        EXIT TO CLEAR OUTPUT REGISTER
 TDSRM    SPACE  4,10 
 TDSRM    BSS    0
          DUP    MXDSRM,1 
          CON    HNG1 
 TDSRL    EQU    MXDSRM 
 TDSRM    HERE
          ORG    TDSRM+MXDSRM 
  
          TITLE  CPU PROGRAM CONTROL ROUTINES.
 CCP      SPACE  4
**        CCP - CHECK CENTRAL PROGRAM.
* 
*         THE CONTENTS OF THE CPU OUTPUT REGISTER, (RA+1), ARE CHECKED
*         AND *CPUMTR* IS REQUESTED TO PROCESS THE REQUEST. 
*         UPDATES CPU ASSIGNMENTS AMD PRIORITIES. 
* 
*         USES   CM - CM+4, CS - CS+4, OR - OR+4, T1, T7. 
* 
*         CALLS  AVC, CPR, MST. 
  
  
 CCP6     LDN    SMRL        CHECK STORAGE MOVE COMPLETE
          CRD    CM 
          LDD    CM 
          NJN    CCP1        IF MOVE NOT COMPLETE 
 CCP7     RJM    MST.        PROCESS COMPLETION 
          UJN    CCP1        CHECK RA+1 
  
 CCP8     BSS    0           SET OTHER CPU
 CCPD     LDM    CCPB 
*         UJN    CCPX        (SINGLE CPU) 
          ERRNZ  ACPL-ACPL/2*2  *ACPL* MUST BE EVEN 
          LMN    1
          STM    CCPB 
  
 CCP      SUBR               ENTRY/EXIT 
  
*         CHECK STORAGE MOVE STATUS.
  
 CCPA     CON    0
*         UJN    CCP6        (STORAGE MOVE IN PROGRESS) 
 CCP1     RJM    AVC         ADVANCE CLOCK
 CCPB     LDN    ACPL        READ ADDRESS OF ACTIVE RA
*         LDN    ACPL+1      (CHECKING CPU 1) 
          STD    T7 
          CRD    CM 
          LDD    CM 
          ZJN    CCP8        IF NO RA+1 TO CHECK
 CCPC     UJN    CCP2        READ RA+1
  
*         SHN    6           (CME PRESENT)
  
          STD    OR+1 
          SHN    6
          STD    OR 
          LRD    OR 
          LDN    40 
 CCP2     SHN    14 
          ADD    CM+1 
          ADN    1           READ RA+1
          CRD    OR 
          LDD    OR 
          ZJN    CCP4        IF (RA+1) = 0
  
*         REQUEST *CPUMTR* TO PROCESS (RA+1) REQUEST. 
  
          LDN    ZERL 
          CRD    CN 
          ERRNZ  CCPF        CODE REQUIRES VALUE
          LDD    T7          REQUEST (RA+1) CHECK 
          SBN    ACPL 
          SHN    14 
          RJM    CPR
 CCP3     LJM    CCP8        SET OTHER CPU
  
 CCP4     LDD    CM+2 
          ADD    CM+3 
          ZJN    CCP3        IF NO SUB-CONTROL POINT
          LDD    TM+2        CHECK FOR LIMIT
          SBD    CM+2 
          NJN    CCP5        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+3 
          SBD    CM+3 
          NJN    CCP5        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+4 
          SBD    CM+4 
 CCP5     MJN    CCP3        IF LIMIT NOT REACHED 
          LDD    T7          SET CPU NUMBER 
          SBN    ACPL 
          SHN    14 
          ADN    CSLF        CHECK SUB-CONTROL POINT LIMIT
          RJM    CPR
          UJN    CCP3        SET NEXT CPU 
 CCS      SPACE  4,10 
**        CCS - CHECK FOR CPU SWITCH. 
* 
*         EXIT   CPU SWITCH INITIATED AS NEEDED.
* 
*         USES   T7, CM - CM+4, CN - CN+4.
* 
*         CALLS  CPR. 
  
  
*         REQUEST CPU SWITCH.  *CSWF* IS ISSUED IF A SWITCH REQUEST WAS 
*         DETECTED IN *CSWL* SO THAT *CPR* WILL NOT RETRY IF THE
*         EXCHANGE REQUEST IS REJECTED.  IF THE CPU IS ALREADY IN 
*         MONITOR MODE, *CPUMTR* WILL MOST LIKELY DETECT THE *CSWL* 
*         REQUEST ON EXIT FROM MONITOR MODE.
  
 CCS8     LDN    CSWF        SET SWITCH CPU FUNCTION
 CCS9     SHN    6
          ADD    T7 
          SHN    14 
          RJM    CPR         REQUEST CPU SWITCH 
  
 CCS      SUBR               ENTRY/EXIT 
  
*         CHECK CPU SWITCH REQUEST AND CPU SLICE EXPIRED. 
  
          LDM    CCSB        TOGGLE CPU NUMBER IF DUAL CPU
 CCSA     LMN    3
*         LMN    0           (SINGLE CPU) 
          STM    CCSB 
          LPN    1           SET CPU NUMBER 
          STD    T7 
          ADN    CSWL 
          CRD    CN 
          ADN    TSCL-CSWL
          CRD    CM 
          LDD    CN 
          SHN    21-13
          MJN    CCS8        IF CPU SWITCH REQUESTED
          LDD    TM+2        CHECK CPU SLICE LIMIT
          SBD    CN+2 
          NJN    CCS1        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+3 
          SBD    CN+3 
          NJN    CCS1        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+4 
          SBD    CN+4 
 CCS1     MJN    CCS3        IF NOT TIME TO SWITCH CPU
 CCS2     LDN    TCSF        SET TIME SLICE CPU SWITCH FUNCTION 
          UJN    CCS9        SWITCH CPU 
  
*         CHECK RECALL SLICE EXPIRED. 
  
 CCS3     LDD    CM          CHECK RECALL FLAG
          SHN    21-0 
 CCS4     PJN    CCSX        IF RECALL SLICE NOT IN EFFECT
          LDD    TM+2        CHECK RECALL CPU SLICE LIMIT 
          SBD    CM+2 
          NJN    CCS5        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+3 
          SBD    CM+3 
          NJN    CCS5        IF LIMIT PASSED OR NOT REACHED 
          LDD    TM+4 
          SBD    CM+4 
 CCS5     MJN    CCS7        IF RECALL CPU SLICE NOT EXPIRED
          LDC    WQRL        GET *WQ* POINTER 
          CRD    CN 
 CCS6     LDD    CN+3 
          LPN    77 
          SHN    14 
          LMD    CN+4 
          ZJN    CCS4        IF JOB WAS REMOVED FROM *WQ* 
          CRD    CN 
          LDC    TSCL        GET PRIORITY OF JOB IN THIS CPU
          ADD    T7 
          CRD    CM 
          LDD    CN          COMPARE PRIORITIES AND FLAGS 
          SBD    CM 
          MJN    CCS7        IF PRIORITY/FLAGS DO NOT ALLOW CPU SWITCH
          LDD    CN+2        CHECK CPU SELECTION AND BYPASS FLAG
 CCSB     LPN    6
*         LPN    5           (CHECKING CPU 1) 
          NJN    CCS6        IF CANNOT ASSIGN CPU TO JOB
          LJM    CCS2        SWITCH CPU 
  
 CCS7     LJM    CCSX        RETURN 
 CPR      SPACE  4,15 
**        CPR - CPUMTR REQUEST PROCESSOR. 
* 
*         *CPUMTR* WILL TYPICALLY BE IN MONITOR MODE ON EXIT. 
* 
*         ENTRY  (A) BITS 0 - 11 = REQUEST. 
*                (A) BITS 12 - 17 = CPU NUMBER. 
*                (CN - CN+3) = PARAMETERS.
* 
*         EXIT   (MTRJ) = MAXIMUM WAIT TO MONITOR EXCHANGE TIME.
* 
*         USES   CN+3, CN+4, T1, T2, CM - CM+4. 
* 
*         CALLS  TIM, WXP.
* 
*         MACROS ISTORE.
  
  
 CPR      SUBR               ENTRY/EXIT 
          STD    CN+4        SET REQUEST
 CPRB     SHN    -14
*         UJN    CPR1        (1 CPU ONLY) 
          LMC    MXNI        SET *MXN* INSTRUCTION
          STM    MXN
          LPN    7           SET (A0) 
          SHN    6
          STM    CPRA+3 
 CPR1     RJM    WXP         WAIT EXCHANGE PACKAGE READY
          LDD    CN+3 
          SCN    77          CLEAR UNUSED FIELD 
          STD    CN+3 
          RJM    TIM         MAKE SURE *TIMB* EXCHANGE SWITCH RESET 
          LDN    PPXL        SET *PP EXCHANGE PENDING* FLAG 
          CWD    HN 
          IAN    14          SAVE CURRENT CLOCK VALUE 
          STD    T1 
  
*         ENTER REQUEST.  SINCE THE MICROCODE FOR RUNNING DUAL-CPU
*         *NOS* ON A CACHE MACHINE CHECKS (B0) TO DETERMINE IF THE
*         EXCHANGE PACKAGE IS READY, THE WORD CONTAINING (B0) *MUST*
*         BE THE LAST WORD STORED INTO THE EXCHANGE PACKAGE.
*         OTHERWISE, IF A *PURGE ALTERNATE CACHE* REQUEST WAS BEING 
*         PROCESSED BY MICROCODE AT THE SAME TIME THAT *MTR* WAS
*         PREPARING THE EXCHANGE PACKAGE, THE EXCHANGE COULD OCCUR
*         BEFORE THE EXCHANGE PACKAGE WAS READY.
  
          TLDC   /EXPACS/MXP+10,XBP  STORE (X0) 
          CWD    CN 
          SBN    10          STORE (P), (A0), (B0)
          CWM    CPRA,ON
  
*         EXCHANGE CPU.  TO EXCHANGE CPU 1 ON A DUAL CPU CACHE MACHINE, 
*         AN EXTERNAL INTERRUPT (*INPN*) IS USED INSTEAD OF AN *MXN*. 
*         SINCE THE *INPN* DOES NOT WAIT FOR THE EXCHANGE TO SUCCEED
*         OR FAIL BEFORE COMPLETING, *MTR* MUST WAIT 25 MICROSECONDS
*         BEFORE CHECKING THE EXCHANGE PACKAGE.  SINCE THE EXCHANGE MAY 
*         OCCUR AFTER AN EVEN LONGER INTERVAL IN SOME CASES, *MTR* MUST 
*         NEVER ABANDON AN ATTEMPT TO EXCHANGE CPU 1.  SINCE THE *INPN* 
*         WILL INTERRUPT A UEM BLOCK COPY EVEN IN MONITOR MODE, *MTR* 
*         MUST DELAY 125 MICROSECONDS AFTER AN APPARENT FAILED EXCHANGE 
*         BEFORE RETRYING, IF CPU 1 IS CURRENTLY IN MONITOR MODE. 
  
 CPR2     UJN    CPR3        EXCHANGE CPU 
*         LDM    CPRA+3      (DUAL CPU CACHE MACHINE) 
          CON    CPRA+3 
 CPRC     EQU    *-2
          ZJN    CPR3        IF EXCHANGING CPU 0
          INPN   4           INTERRUPT PROCESSOR 1 ON PORT 2
 CPRE     LDN    **          WAIT 25 MICROSECONDS BEFORE CHECKING 
          SBN    1
          NJN    *-1         IF DELAY NOT COMPLETE
          TLDC   /EXPACS/MXP+0,XBP
          CRD    CM 
          LDD    CM+4 
          ZJN    CPR4        IF EXCHANGE TAKEN
 CPRG     LDC    **+CMST+1   CHECK FOR CPU 1 IN MONITOR MODE
          CRD    CM 
          LDD    CM+1 
          ADD    CM+2 
          ADD    CM+3 
          ADD    CM+4 
          ZJN    CPR5        IF CPU 1 NOT IN MONITOR MODE 
 CPRH     LDC    **          WAIT 125 MICROSECONDS BEFORE RETRYING
          SBN    1
          NJN    *-1         IF DELAY NOT COMPLETE
          UJN    CPR5        UPDATE TIME AND RETRY
  
 CPR3     TLDC   /EXPACS/MXP+0,XBP  EXCHANGE CPU
 MXN      MXN    0
          CRD    CM          READ (P), (A0), (B0) 
          LDD    CM+4 
 CPR4     ZJN    CPR10       IF EXCHANGE TAKEN
*         ZJN    CPR9        IF EXCHANGE TAKEN (CME MACHINE)
 CPRF     EQU    *-1
          LDD    CN+4 
          SBN    NXWF 
          MJN    CPR10       IF NO WAIT FOR EXCHANGE REQUIRED 
 CPR5     RJM    TIM         UPDATE TIME
          IAN    14 
          SBD    T1 
          STD    T2 
          PJN    CPR6        IF NO ROLL OVER
          AOD    T2 
 CPR6     ADC    -MLSC
          MJN    CPR7        IF NOT ONE MILLISECOND 
          LDN    1           HAVE CPUMTR NOTE EXCHANGE REQUEST
          STD    CM+4 
          LDN    CPSL 
          CWD    CM 
 CPR7     LDD    T2          CHECK FOR MAXIMUM EXCHANGE WAIT
          SBM    MTRJ 
          MJN    CPR8        IF NOT MAXIMUM 
          RAM    MTRJ        UPDATE WORST-CASE *MXN* TIME 
 CPR8     LJM    CPR2        RETRY EXCHANGE 
  
 CPR9     ISTORE TIMB,(UJN TIM6)  SET UP EXCHANGE PACKAGE CHECK 
 CPR10    LJM    CPRX        EXIT 
 WXP      SPACE  4,10 
**        WXP - WAIT EXCHANGE PACKAGE READY.
* 
*         INSURES *CPUMTR* HAS EXITED FROM MONITOR MODE ON LAST CPR 
*         REQUEST.  ALSO ADVANCES TIME WHILE WAITING. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  TIM. 
  
  
 WXP      SUBR               ENTRY/EXIT 
 WXP1     RJM    TIM
          TLDC   /EXPACS/MXP+6,XBP  READ (MA), (A6), (B6) 
          CRD    CM 
          LDD    CM 
          ADD    CM+1 
          ZJN    WXPX        IF PACKAGE READY 
          UJN    WXP1        LOOP 
          TITLE  MEMORY ALLOCATION ROUTINES.
***       MEMORY ALLOCATION.
* 
*         CENTRAL MEMORY IS ALLOCATED TO EACH CONTROL POINT IN
*         CONTIGUOUS BLOCKS FOR EACH JOB.  UNALLOCATED MEMORY 
*         GENERALLY RESIDES BETWEEN JOBS.  IF A JOB REQUIRES MORE 
*         MEMORY THAN IS AVAILABLE ABOVE IT-S CURRENT MEMORY, A 
*         STORAGE MOVE IS REQUIRED.  THE JOBS ARE MOVED ONE AT A
*         TIME TO MOVE THE REQUIRED AMOUNT OF UNALLOCATED MEMORY
*         TO THE REQUESTING JOB.
 MST      SPACE  4,25 
**        MST - MOVE STORAGE. 
* 
*         *MST* WILL LOOP MOVING CONTROL POINTS UNTIL THE MOVE IS 
*         COMPLETE, A CONTROL POINT CANNOT BE MOVED DUE TO PP ACTIVITY, 
*         OR UNTIL 10B CONTROL POINTS HAVE BEEN MOVED.  IF ANY OF 
*         THESE CONDITIONS ARE ENCOUNTERED AN EXIT IS MADE SO THAT THE
*         THE ROUTINE WILL BE REENTERED.
* 
*         ENTRY  (MM - MM+4) = MOVE PARAMETERS. 
*                (OR+1) = REQUESTED FIELD LENGTH. 
*                (OR+2) = XX00 IF CM REQUEST. 
*                       = XX01 IF ECS REQUEST.
*                (OR+3) = *CMRL*/*FLSW* IF CM REQUEST.
*                       = *ECRL*/*ECSW* IF ECS REQUEST. 
*                (OR+4) = 4 IF POSITIVE FL/ECS REQUEST. 
*                       = 0 IF NEGATIVE FL REQUEST. 
* 
*         USES   CP, T1, T5, MM+1, CM - CM+6, CN - CN+3, CS - CS+4, 
*                OR - OR+4. 
* 
*         CALLS  AMV, AVC, CPR, ISR, MRP, PHE, SCP, STA, TIM. 
* 
*         MACROS MONITOR. 
  
  
 MSTX     RJM    MRP         RETURN TO MAIN LOOP
          LDM    CCPA 
          NJN    MSTX        IF MOVE NOT COMPLETE 
  
*         CHECK IF PP-S PAUSED. 
  
 MST      RJM    TIM         UPDATE TIME
          LDD    MM.0 
          STD    CP          SET CP FOR MOVE
          RJM    SCP
          ADN    STSW        GET CP STATUS
          CRD    CS 
          LDD    OR+2        SET STORAGE TYPE 
          LPN    1
          STD    T5 
          LDD    CS          CHECK CP STATUS
          LPN    37 
          ZJN    MST3        IF NO PP-S ASSIGNED
          LMN    1
          SHN    14 
          LMD    CP          CHECK IF MOVE OF REQUESTING CP 
          LMD    MM.3 
          NJN    MST1        IF NOT ONLY REQUESTING PP
          LDD    OR+2 
          LPC    200
          ZJN    MST3        IF NOT SPECIAL REQUEST 
 MST1     LDN    PPXE        SET PP1 *ACPP* OFFSET
          STD    T1 
 MST2     LDN    PPXE        ADVANCE TO NEXT PP 
          RAD    T1 
          TADC   ACPP,PPX    READ CP/PCP ASSIGNMENT 
          CRD    CM 
          TLMC   ACPP,PPX    (LAST *ACPP* WORD + *PPXE*)
 MSTA     EQU    *-1
 MST3     ZJN    MST6        IF END OF SCAN 
          LDD    CM 
          LMD    MM.0 
          NJN    MST2        IF PP NOT ACCESSING MOVE CP/PCP
  
**        IMPORTANT NOTE -
* 
*         ALL MONITOR FUNCTIONS SHOULD BE CONSIDERED STORAGE MOVABLE
*         WHILE THE REQUEST IS PENDING.  THEREFORE, PP ROUTINES 
*         SHOULD RECOMPUTE ANY ABSOLUTE ADDRESSES AFTER ISSUING ANY 
*         MONITOR FUNCTION.  THIS WILL ALLOW FOR THE FUTURE GOAL OF 
*         ACTUALLY ACHIEVING THIS OBJECTIVE.
  
          LDD    T1          SET PP COMMUNICATION AREA OFFSET 
          SHN    PPCES-PPXES
          ADD    OF          READ OUTPUT REGISTER 
          CRD    CM 
          LDD    CM 
          ZJN    MST5        IF NO FUNCTION 
          SHN    21-10
          MJN    MST2        IF STORAGE MOVE ALLOWED
          SHN    10-21
          SBN    SMAM 
          MJN    MST5        IF NON-MOVABLE *MTR* FUNCTION
          SBN    SMEM-SMAM
          MJN    MST2        IF MOVABLE FUNCTION
 MST5     RJM    AVC
          LJM    MSTX        RETURN 
  
*         CP READY TO MOVE. 
  
 MST6     LDD    MM.0        SET CP/PCP ADDRESS 
          RJM    SCP
          ADD    OR+3        GET FL CONTROL WORD
          CRD    CS 
          SBD    OR+3 
          ADN    ECSW        CHECK *ECXM* INTERLOCK 
          CRD    CM 
          LDD    CM+1 
          SHN    21-13
          MJN    MST5        IF *ECXM* IN PROGRESS
          LDD    MM.0 
          RJM    STA         FETCH MEMORY TABLE ENTRY 
          CRD    CM 
          LDD    CM+1        CHECK FORWARD LINK 
          LMD    NC 
          NJN    MST9        IF NOT LAST CP 
          LDD    MM.1 
          SHN    21-13
          PJN    MST9        IF UPWARD MOVE 
          LDD    OR+2 
          SHN    21-7 
          PJN    MST7        IF NOT SPECIAL REQUEST 
          LDN    0
          UJN    MST8        SAVE INCREMENT 
  
 MST7     LDM    CS,OR+4     MOVE DOWN BY INCREASE
 MST8     SBD    OR+1 
          STD    MM.1 
 MST9     LDD    CS+4        CHECK CURRENT FL 
          ADD    CS 
          NJN    MST11       IF FL .NE. 0 
  
*         UPDATE RA FOR CONTROL POINT IF FL = 0.
  
          STD    CN+3 
          LDD    MM.1        SET MEMORY INCREMENT 
          STD    CN 
          LDD    T5          STORAGE TYPE 
          STD    CN+1 
          LDN    MRAF        MODIFY REFERENCE ADDRESS 
          RJM    ISR
          RJM    AMV         ADVANCE MOVE 
          LDD    MM.4 
          ZJN    MST10       IF MOVE COMPLETED
          CRD    OR 
          LJM    MST         LOOP 
  
 MST10    LJM    FNR         EXIT 
  
*         INITIATE STORAGE MOVE.
  
 MST11    LDN    0           PRESET NO CPU STATUS 
          STD    CM+1 
          LDD    MM.0        CHECK CP AT MOVE 
          SBD    NC 
          PJN    MST13       IF PSEUDO CONTROL POINT
          LDN    SMRL 
          CWD    CP-4        SET *JAV* INTERLOCK
          MONITOR  DCPM 
          LDD    CM+1        SAVE CPU STATUS FROM *DCPM*
          STM    MSTE 
          LDD    CP          GET CPA ERROR FLAG 
          SHN    7
          ADN    STSW 
          CRD    CS 
          LDD    CS+1 
          LPN    37 
          LMN    PEET 
          NJN    MST12       IF NOT PARITY ERROR
 MSTC     RJM    PHE         VALIDATE PARITY ERROR
*         UJN    *+2         (NO S/C REGISTER OR SIMULATOR) 
          NJN    MST15       IF ERROR IN SCR
 MST12    LDC    0           SET CPU STATUS 
 MSTE     EQU    *-1
          STD    CM+1 
 MST13    LDD    MM.1        SET MOVE INCREMENT 
          STD    CM 
          LDC    0           SET/CLEAR BLOCK MOVE 
 MSTG     EQU    *-1
          STD    CM+2 
          LDN    0           CLEAR BLOCK MOVE INDICATOR 
          STM    MSTG 
          LDD    T5          INSERT MEMORY TYPE 
          STD    CM+3 
          LDD    CP          SET CONTROL POINT NUMBER 
          STD    CM+4 
          LDN    SMRL        STORE MOVE REQUEST 
          CWD    CM 
          LDC    0           SET MOVE IN PROGRESS FLAG
          ORG    *-1
          LOC    CCPA 
          UJN    CCP6        STORAGE MOVE IN PROGRESS 
          LOC    *O 
          STM    CCPA 
          LDM    MAFC,CM+3   REQUEST STORAGE MOVE 
          STD    CN+2 
          LDN    EPRF        ENTER PROGRAM MODE REQUEST 
          RJM    CPR
          LJM    MSTX        RETURN 
  
*         SET STORAGE UNAVAILABLE WHEN FATAL ERROR SET. 
  
 MST15    LDC    FNC         SET RETURN FOR COMPLETING MOVE 
          STM    AMV
          LDN    SMRL        CLEAR *SMRL* 
          CWD    ZR 
          LJM    AMV10       COMPLETE MOVE
  
*         COMPLETE MOVE PROCESSING. 
* 
*         ENTRY  (CM - CM+4) = (SMRL).
  
 MSTX.    LJM    *           RETURN EXIT COMPLETION CODE
  
 MST.     EQU    *-1
          LDD    CM+1 
          ZJN    MST16       IF NO ERROR ON MOVE
          LDD    MM.0 
          RJM    SCP         SET CP / PCP ADDRESS 
          ADN    TFSW 
          CRD    CM+2        (CM+2) = EJT ORDINAL 
          LDN    0
          STD    CP          INDICATE REQUEST FROM CP 0 
          LDC    4000+ECET
          STD    CM+1        SET ERROR FLAG 
          MONITOR  CEFM 
*         LDN    0           CLEAR MOVE IN PROGRESS FLAG
 MST16    STM    CCPA 
          LDD    MM.0        SET MOVE CP / PCP
          STD    CP 
          LDD    MM.4        RE-READ OUTPUT REGISTER
          CRD    OR 
          LDD    OR+2        RESET STORAGE TYPE 
          LPN    1
          STD    T5 
          RJM    AMV         ADVANCE MOVE 
          UJN    MSTX.       RETURN 
 AMF      SPACE  4,15 
**        AMF - ADJUST MACHINE FL.
* 
*         ENTRY  (A) = 10, TO UPDATE *MABL*, *ACML*, AND MCT OF LAST CP.
*                (A) = 11, TO UPDATE MCT OF LAST CP ONLY. 
*                (OR+1) = MEMORY DECREMENT (IF POSITIVE). 
*                (OR+1) = MEMORY INCREMENT (IF NEGATIVE). 
* 
*         USES   CN, CN+1.
* 
*         CALLS  CPR, WXP.
  
  
 AMF      SUBR               ENTRY/EXIT 
          STD    CN+1        SAVE REQUEST TYPE
          LDD    OR+1        SET MEMORY INCREMENT/DECREMENT 
          STD    CN 
          LDN    MFLF        MODIFY MACHINE FL
          RJM    CPR         ISSUE REQUEST
          RJM    WXP         WAIT FOR REQUEST TO COMPLETE 
          UJN    AMFX        RETURN 
 AMM      SPACE  4,25 
**        AMM - ACCUMULATE MEMORY TO MOVE.
* 
*         ENTRY  (A) = ADDRESS OF ORDINAL OF MCT ENTRY. 
*                (T3) = UNASSIGNED MEMORY ACCUMULATOR.
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (T7) = AMOUNT OF MEMORY REQUIRED.
*                (OR+3) = *FLSW* IF CM REQUEST. 
*                       = *ECSW* IF XM REQUEST. 
*                (MM+1) = MOVE COUNT ACCUMULATOR. 
*                (MM+4) = ASSIGNED MEMORY ACCUMULATOR.
* 
*         EXIT   (A) = INITIAL MOVE INCREMENT.
*                (MM+3) = ASSIGNED MEMORY TO MOVE.
*                (CS) = FIRST CP/PCP FOR LOWER MOVE.
*                (CS+1) = FIRST CP/PCP FOR UPPER MOVE.
*                (CS+2) = FIRST LOWER MOVE INCREMENT. 
*                (CS+3) = FIRST UPPER MOVE INCREMENT. 
*                (CS+4) = NUMBER OF CP/PCP-S TO MOVE. 
* 
*         USES   BA, PA, MM+1, MM+2, MM+4, T3, CN - CN+4. 
* 
*         CALLS  RSB, SCP, TIM. 
  
  
 AMM5     LDD    CS+4        RESET MOVE COUNT FOR REENTRY 
          STD    MM+1 
          LDD    MM+3        RESET MOVE BLOCKS FOR REENTRY
          STD    MM+4 
          LDN    0           INDICATE SEARCH INCOMPLETE 
  
 AMM      SUBR               ENTRY/EXIT 
          STD    PA 
          LPN    1
          ADN    CM          SET ADDRESS OF BACKWARD/FORWARD LINK 
          STD    BA 
 AMM1     LDI    PA          SET CP/PCP AREA ADDRESS
          RJM    SCP
          ADD    OR+3        GET FL CONTROL WORD
          CRD    CN 
          LDD    CN+4        ACCUMULATE MEMORY TO MOVE
          ADD    CN 
          ZJN    AMM4        IF NO ASSIGNED MEMORY
          RAD    MM+4 
          SHN    -14
          ZJN    AMM2        IF NO OVERFLOW 
          LCN    0
          STD    MM+4        SET MAXIMUM MEMORY 
 AMM2     AOD    MM+1 
 AMM3     MJN    AMM1        IF MORE MEMORY REQUIRED
 AMM4     LDI    PA 
          ZJN    AMM5        IF END OF MCT SCAN 
          STD    MM+2 
          LDI    BA          SAVE LINK
          STM    AMMA 
          RJM    TIM         UPDATE CLOCK 
          LDC    **          READ MCT ENTRY 
 AMMA     EQU    *-1
          RJM    RSB
          ZJN    AMM1        IF NO UNASSIGNED MEMORY FOUND
  
*         ACCUMULATE UNASSIGNED MEMORY. 
  
          LDD    MM+2        SET CP/PCP FOR MOVE
          STM    CS-CM,BA 
          LDD    MM+1        SAVE MOVE COUNT
          STD    CS+4 
          LDD    MM+4        SAVE BLOCKS TO MOVE
          STD    MM+3 
          LDD    T0          SAVE BLOCK SIZE
          STM    CS+2-CM,BA 
          RAD    T3          ACCUMULATE UNASSIGNED MEMORY 
          SBD    T7 
          MJN    AMM3        IF MORE MEMORY REQUIRED
          SBD    T0 
          LMC    -0          SET PARTIAL BLOCK
          STM    CS+2-CM,BA 
          LJM    AMMX        RETURN 
 AMV      SPACE  4,20 
**        AMV - ADVANCE MOVE. 
* 
*         ENTRY  (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (OR+1) = REQUESTED MEMORY. 
*                (OR+2) = *RSTM* FLAGS. 
*                (OR+3) = *CMRL*/*FLSW* IF CM REQUEST.
*                       = *ECRL*/*ECSW* IF ECS REQUEST. 
*                (OR+4) = 4 IF POSITIVE FL/ECS REQUEST. 
*                       = 0 IF NEGATIVE FL REQUEST. 
*                (MM - MM+4) = MOVE PARAMETERS. 
* 
*         EXIT   (MM - MM+4) UPDATED. 
*                *MABL* AND *ACML* ADJUSTED, IF SPECIAL *VER* REQUEST.
* 
*         USES   CP, T4, CN - CN+4, CS - CS+4, MM - MM+4. 
* 
*         CALLS  AMF, MFL, RSB, SCP.
  
  
 AMV8     LDD    MM.3        REQUESTING CP NUMBER 
          STD    CP 
          RJM    SCP         SET CP ADDRESS 
          ADD    OR+3 
          CRD    CS 
          RJM    MFL
          LDD    OR+2 
          SHN    21-7 
          PJN    AMV9        IF NOT *VER* SPECIAL REQUEST 
          LDN    10          SET REQUEST TYPE 
          RJM    AMF         ADJUST MACHINE FL
          LDK    MABL        READ NEW *MABL*
          CRD    CN 
          LDD    CN+2        SAVE NEW SIZE FOR COMPLETION BIT TESTING 
          STM    PCBA 
          LDD    CN+3 
          STM    PCBB 
 AMV9     LDD    MM.4        SET *RSTM* COMPLETE
          CWD    ZR 
 AMV10    LDD    MM.4        EXTRACT REENTRY TABLE INDEX
          SHN    -3 
          STD    MM.4 
          LDC    PPR         RESET MAIN LOOP
          STM    TREA,MM.4
*         STM    TREA-(OF)/10,MM.4
 AMVC     EQU    *-1
          LDN    ZERL        CLEAR MOVE PARAMETERS
          CRD    MM 
          LCN    0           SET MOVE COMPLETE
          STD    MM.0 
  
 AMVX     LDN    CMCL        STORE CONTROL WORD 
          CWD    MM 
          RJM    PCM         PURGE CACHE IF CPU 1 IN MONITOR MODE 
  
          LJM    *           RETURN EXIT
 AMV      EQU    *-1
          LDD    MM.0        GET MCT ENTRY FOR MOVE CP
          RJM    RSB
          STD    T4 
          LDD    CM+1        CHECK FORWARD LINK 
          LMD    NC 
          ZJN    AMV4        IF LAST CP 
          LDD    MM.1 
          SHN    6
          MJN    AMV5        IF DOWNWARD MOVE 
          LDD    MM.0 
          LMD    MM.3 
          ZJN    AMV3        IF REQUESTING CP JUST MOVED
          LDD    CM 
          STD    MM.0        SET NEXT CP/PCP FOR MOVE 
          LMD    MM.3 
          NJN    AMV1        IF UPPER MOVE NOT COMPLETE 
          LDD    OR+4 
          NJN    AMV3        IF NOT NEGATIVE FL REQUEST 
 AMV1     LDD    MM.0 
          RJM    RSB         FETCH NEXT MOVE INCREMENT
 AMV2     STD    MM.1 
          UJP    AMVX        RETURN 
  
*         BEGIN LOWER MOVE. 
  
 AMV3     LDC    0           INITIAL LOWER MOVE INCREMENT 
 AMVA     EQU    *-1
          ZJN    AMV4        IF NO LOWER MOVE 
          STD    T4 
          LDD    MM.2 
          NJN    AMV6        IF NOT CMR REQUEST 
 AMV4     LJM    AMV8        COMPLETE MOVE
  
*         ADVANCE LOWER MOVE. 
  
 AMV5     LDD    MM.0        CHECK CP/PCP JUST MOVED
          LMC    0
 AMVB     EQU    *-1
          ZJN    AMV4        IF REQUESTING CP 
          LDD    CM+1 
 AMV6     STD    MM.0        SET NEXT CP/PCP FOR MOVE 
          LMD    MM.3 
          NJN    AMV7        IF LOWER MOVE NOT COMPLETE 
          LDD    OR+4 
          ZJN    AMV4        IF NEGATIVE FL REQUEST 
  
 AMV7     LCN    0           NEXT MOVE INCREMENT
          LMD    T4 
          UJN    AMV2        SET NEGATIVE INCREMENT 
 CFL      SPACE  4,10 
**        CFL - CLEAR FL INCREASE.
* 
*         ENTRY  (CP) = CONTROL POINT NUMBER. 
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SCP. 
  
  
 CFL1     LDN    0           CLEAR ECS INCREASE 
          STD    CM+3 
          LDD    CM+1 
          SCN    2
 CFL2     STD    CM+1 
          LDD    CP          SET CP/PCP ADDRESS 
          RJM    SCP
          ADN    FLIW        REWRITE FL INCREASE CONTROL WORD 
          CWD    CM 
  
 CFL      SUBR               ENTRY/EXIT 
          LDD    CP 
          ZJN    CFLX        IF CMR REQUEST 
          RJM    SCP
          ADN    FLIW        READ FL INCREASE WORD
          CRD    CM 
          LDD    T5 
          NJN    CFL1        IF XM REQUEST
          STD    CM+2 
          STD    CM+4        CLEAR FL INCREASE
          LDD    CM+1 
          SCN    1
          UJN    CFL2        REWRITE FL INCREASE CONTROL WORD 
 CRA      SPACE  4,15 
**        CRA - CHANGE REFERENCE ADDRESS. 
* 
*         ENTRY  (CP) = CP/PCP NUMBER.
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (T8) = MCT ORDINAL OF HOLE.
*                (OR+2) = *RSTM* FLAGS. 
* 
*         USES   CP, CN - CN+4. 
* 
*         CALLS  ISR. 
  
  
 CRA1     LDD    T8          SET MCT ORDINAL OF HOLE
          STD    CN 
 CRA2     LDD    T5          INSERT STORAGE TYPE
          STD    CN+1 
          LDN    CRAF        CHANGE RA IN CPA, XP AND MCT 
          RJM    ISR
  
 CRA      SUBR               ENTRY/EXIT 
          LDD    OR+2 
          SCN    77          PRESERVE PCP FLAGS 
          STD    CN+3 
          SHN    21-12
          PJN    CRA1        IF NOT PSEUDO-ROLLOUT
          LDD    CP 
          STD    CN 
          LDD    T8          SET (CP) TO PCP NUMBER 
          STD    CP 
          UJN    CRA2        COMPLETE REQUEST 
 EMO      SPACE  4,15 
**        EMO - EVALUATE MOVE OPTIONS.
* 
*         ENTRY  (T8) = MCT ORDINAL OF HOLE.
*                (CS - CS+4) = FL CONTROL WORD OF REQUESTING CP.
* 
*         EXIT   TO CALLER IF NO FIELD LENGTH ASSIGNED. 
*                TO *MST* TO INITIATE MOVE IF FL PRESENT. 
* 
*         USES   MB, MM - MM+4. 
* 
*         CALLS  IMV. 
  
  
 EMO5     LDD    T8 
          ZJN    EMO2        IF NO HOLE FOUND 
  
 EMO      SUBR               ENTRY/EXIT 
          LDD    CS 
          ADD    CS+4 
          ZJN    EMO1        IF NO ASSIGNED FL
          SHN    -MBCS
          ADN    1           CONVERT MEMORY MOVE COUNT
 EMO1     STD    MB 
          ZJN    EMO5        IF NEW JOB / NEW XM REQUEST
  
*         INVESTIGATE INCREMENTAL MOVE. 
  
 EMO2     RJM    IMV         INITIATE MOVE
          LDD    CS+4 
          SBD    MB 
          MJN    EMO4        IF INCREMENTAL CHEAPER THAN BLOCK MOVE 
          LDD    T8 
          ZJN    EMO4        IF NO HOLE FOUND 
          STM    MSTG 
          LDD    MM.3        SET CP FOR MOVE
          STD    MM.0 
*         LDN    1           FAKE POSITIVE MOVE INCREMENT 
          STD    MM.1 
 EMO3     LDN    0           CLEAR LOWER MOVE 
          STD    MM.2 
 EMO4     LDD    OA          SET REQUESTING PP OR ADDRESS 
          STD    MM.4 
          LDN    CMCL        STORE MOVE CONTROL WORD
          CWD    MM 
          RJM    PCM         PURGE CACHE IF CPU 1 IN MONITOR MODE 
          LJM    MST         MOVE STORAGE 
 IMV      SPACE  4
**        IMV - INITIATE INCREMENTAL MOVE.
* 
*         ENTRY  (CP) = CONTROL POINT NUMBER / MCT ORDINAL. 
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (T6) = MCT ORDINAL IF NORMAL FL OR XM REQUEST. 
*                     = ORDINAL OF BACKWARD LINK IF NFL REQUEST.
*                (T7) = AMOUNT OF MEMORY REQUIRED.
*                (OR+4) = 4 IF POSITIVE FL OR XM REQUEST. 
*                       = 0 IF NEGATIVE FL REQUEST. 
* 
*         EXIT   (CS+4) = MOVE OVERHEAD COUNT.
*                (MM - MM+3) SET UP FOR FIRST MOVE. 
* 
*         USES   MB+1, T2, T3, T4, CM - CM+4, CS - CS+4, MM - MM+4. 
* 
*         CALLS  AMM, RSB, STA, TIM.
* 
*         ERROR  EXIT TO *HGM* IF MOVE CANNOT BE COMPLETED. 
  
  
 IMV      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CS 
          LDD    T6          FETCH UNASSIGNED MEMORY BLOCK
          RJM    RSB
          STD    T3          SET HOLE SIZE ABOUT THIS CP
          LDD    CM+1 
          STD    T4          SAVE FORWARD LINK
  
*         COMPUTE UPPER + LOWER MOVE. 
  
          LDN    CM+1        ACCUMULATE MEMORY FOR UPPER MOVE 
          RJM    AMM
          NJN    IMV2        IF REQUEST SATISFIED WITH UPPER MOVE 
          LDD    T6 
          STD    T2 
          RJM    STA         GET MCT ENTRY
          CRD    CM 
          LDN    T2          ACCUMULATE MEMORY FOR LOWER MOVE 
          RJM    AMM
          NJN    IMV2        IF MOVE CAN BE COMPLETED 
  
 IMV1     RJM    HGM         HANG *MTR* (NO RETURN) 
  
 IMV2     LDD    MM+3        CONVERT MOVE MEMORY TO COUNT 
          SHN    -MBCS
          RAD    CS+4        APPEND TO MOVE COUNT 
          STD    MB+1 
          RJM    TIM         UPDATE CLOCK 
          LDN    CMCL 
          CRD    MM 
          CWD    CS          SAVE COMPUTED VALUES 
          LDD    CP 
          SBN    2
          MJN    IMV5        IF CMR REQUEST OR CP 1 
  
*         COMPUTE LOWER + UPPER MOVE. 
  
          LDD    T6          GET UNASSIGNED MEMORY BLOCK
          RJM    RSB
          STD    T3          SET HOLE SIZE ABOUT THIS CP
          LDN    ZERL 
          CRD    CS 
          LDN    T2          ACCUMULATE MEMORY FOR LOWER MOVE 
          RJM    AMM
          NJN    IMV3        IF REQUEST SATISFIED WITH LOWER MOVE 
          LDD    T4 
          STD    CM+1 
          LDN    CM+1        ACCUMULATE MEMORY FOR UPPER MOVE 
          RJM    AMM
          ZJN    IMV1        IF MOVE CANNOT BE COMPLETED
 IMV3     LDD    MM+3 
          SHN    -MBCS       CONVERT MOVE MEMORY TO COUNT 
          RAD    CS+4 
  
*         COMPARE OVERHEAD OF UPPER/LOWER VS LOWER/UPPER MOVES. 
  
          SBD    MB+1 
          MJN    IMV4        IF LOWER/UPPER MOVE CHEAPER
          LDN    CMCL 
          CRD    CS          RESET UPPER/LOWER PARAMETERS 
 IMV4     RJM    TIM
 IMV5     LDD    CS+1 
          NJN    IMV6        IF UPPER MOVE PRESENT
          STD    MM.2 
          LDD    CS          SET INITIAL CP/PCP FOR LOWER MOVE
          STD    MM.0 
          LDD    CS+2        DEFINE NEGATIVE INCREMENT
          LMC    -0 
          UJN    IMV7        SET INCREMENT
  
 IMV6     STD    MM.0        SET INITIAL CP/PCP FOR UPPER MOVE
          LDD    CS 
          STD    MM.2        SET INITIAL CP/PCP FOR LOWER MOVE
          LDD    CS+2 
          STM    AMVA        SET INITIAL LOWER MOVE INCREMENT 
          LDD    CS+3 
 IMV7     STD    MM.1        SET MOVE INCREMENT 
          LDD    CP 
          STD    MM.3        SET REQUESTING CP
          STM    AMVB 
          LJM    IMVX        RETURN 
 ISR      SPACE  4,15 
**        ISR - ISSUE STORAGE REQUEST.
* 
*         ENTRY  (A) = MONITOR FUNCTION.
*                (CP) = CONTROL POINT NUMBER. 
*                (CN, CN+1, CN+3) = PARAMETERS. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   CN - CN+4. 
* 
*         CALLS  CPR, TIM.
  
  
 ISR      SUBR               ENTRY/EXIT 
          STM    ISRA 
          LDD    CP          SET CP NUMBER IN X0 IMAGE
          STD    CN+2 
          LDN    0           CLEAR UNUSED BYTE
          STD    CN+4 
          LDN    SMRL        STORE FUNCTION IN PROGRESS 
          CWD    CN 
          LDC    10000       ISSUE *CPUMTR* REQUEST 
 ISRA     EQU    *-1
          RJM    CPR
 ISR1     RJM    TIM         UPDATE TIME
          LDN    SMRL 
          CRD    CN          GET FUNCTION STATUS
          LDD    CN 
          NJN    ISR1        IF NOT COMPLETE
*         LDN    0
          UJN    ISRX        RETURN 
 MFL      SPACE  4,20 
**        MFL - MODIFY FIELD LENGTH.
* 
*         ENTRY  (CP) = CONTROL POINT NUMBER. 
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (OR+1) = NEW FIELD LENGTH. 
*                (OR+2) = *RSTM* FLAGS. 
*                (OR+3) = *CMRL*/*FLSW* IF CM REQUEST.
*                       = *ECRL*/*ECSW* IF ECS REQUEST. 
*                (OR+4) = 4 IF POSITIVE FL/ECS REQUEST. 
*                       = 0 IF NEGATIVE FL REQUEST. 
*                (CS - CS+4) = FL STATUS. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  CFL, CPR, ISR, SCP, WXP. 
* 
*         ERROR  EXIT TO *HGM* IF CMR SIZE .GE. MCMR*100B.
  
  
 MFL4     LDD    CP          SET CP/PCP NUMBER
          STD    CN+2 
          LDN    0           CLEAR UNUSED FIELDS
          STD    CN+4 
          LDN    SMRL        SET REQUEST IN PROGRESS
          CWD    CN 
 MFL5     LDD    CP          FORM CP/PCP AREA ADDRESS 
          RJM    SCP
          ADN    STSW        GET STATUS WORD
          CRD    CM 
          LDD    CM          CHECK CPU STATUS 
          SHN    -11
          LMN    ACPS 
          ZJN    MFL6        IF ACTIVITY IN CPU - 0 
          LDC    10000
 MFL6     LMN    MFLF        MODIFY FIELD LENGTH
          RJM    CPR
          RJM    WXP         WAIT REQUEST COMPLETE
          LDN    SMRL 
          CRD    CN          FETCH REQUEST STATUS 
          LDD    CN 
          NJN    MFL5        IF CHANGE NOT MADE 
  
 MFL      SUBR               ENTRY/EXIT 
          LDD    OR+2 
          LPC    1S11+1S10+1S7
          NJN    MFLX        IF SPECIAL REQUEST 
          STD    CN+3 
          LDD    CP 
          NJN    MFL2        IF NOT CMR REQUEST 
          LDD    OR+1 
          SBK    MCMR 
          MJN    MFL3        IF REQUEST .LT. MCMR*100B
  
 MFL1     RJM    HGM         HANG *MTR* (NO RETURN) 
  
 MFL2     RJM    CFL         CLEAR FL INCREASE REQUEST
 MFL3     LDD    OR+1 
          SBM    CS,OR+4     SET MEMORY INCREMENT 
          STD    CN 
          ZJN    MFLX        IF NO CHANGE 
          LDD    OR+4 
          SHN    6           SET TYPE OF FL + TYPE OF MEMORY
          LMD    T5 
          STD    CN+1 
 MFLA     LJM    MFL4        (DUAL CPU) 
  
*         LDN    MFLF        (SINGLE CPU) 
*         RJM    ISR
          CON    ISR
          UJP    MFLX        RETURN 
 PVE      SPACE  4,20 
**        PVE - PROCESS SPECIAL REQUEST.
* 
*         ENTRY  (T5) = 0 IF CM REQUEST.
*                (T5) = 1 IF XM REQUEST.
*                (OR+1) = REQUESTED MEMORY INCREMENT. 
*                (OR - OR+4) = UPDATED OUTPUT REGISTER. 
* 
*         EXIT   (A) .GT. 0 IF INCREASE.
*                    .LT. 0 IF DECREASE.
*                (CP) = LAST CONTROL POINT. 
*                (T6) = MCT ORDINAL OF LAST CONTROL POINT.
*                (T7) = AMOUNT OF INCREASE / DECREASE.
*                (CS - CS+4) = FL CONTROL WORD FOR LAST CONTROL POINT.
* 
*         USES   CP, T6, T7, CM - CM+4, CS - CS+4.
* 
*         CALLS  AMF, HNG, SCP. 
  
  
 PVE2     LDN    **          SET CP TO LAST CONTROL POINT 
*         LDN    (NC)-1 
 PVEA     EQU    *-1
          STD    CP 
          STD    T6 
          RJM    SCP         READ FL CONTROL WORD 
          ADD    OR+3 
          CRD    CS 
          LDD    OA          STORE OUTPUT REGISTER
          CWD    OR 
          LDD    OR+1        SET MEMORY INCREMENT 
          STD    T7 
          SHN    21-13       CHECK REQUEST TYPE 
          PJN    PVEX        IF *VER* REQUESTING MEMORY 
          LDN    11          SET REQUEST TYPE 
          RJM    AMF         SET UNASSIGNED MEMORY AFTER LAST CP
          LCN    1           INDICATE *VER* RETURNING MEMORY
  
 PVE      SUBR               ENTRY/EXIT 
          LDD    OA          VERIFY CALLER
          SBN    1
          CRD    CM 
          LDD    CM+1 
          SCN    77 
          SHN    6
          LMD    CM 
          LMC    3RRVE
          ZJN    PVE2        IF CALLER IS *VER* 
 PVE1     RJM    HNG         HANG PP
 RSB      SPACE  4,15 
**        RSB - RETURN SIZE OF UNASSIGNED MEMORY BLOCK. 
* 
*         ENTRY  (A) = ORDINAL OF MCT ENTRY.
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
* 
*         EXIT   (A) = (T0) = BLOCK SIZE. 
*                (T2) = ORDINAL OF MCT ENTRY. 
*                (CM - CM+4) = MCT ENTRY. 
* 
*         USES   T0, T2, CM - CM+4. 
* 
*         CALLS  STA. 
* 
*         ERROR  TO *HGM* IF MCT ENTRY DESTROYED. 
  
  
 RSB2     LDC    3777        RETURN MAXIMUM MEMORY
 RSB3     STD    T0 
  
 RSB      SUBR               ENTRY/EXIT 
          STD    T2 
          RJM    STA         FETCH MCT ENTRY
          CRD    CM 
          LDD    CM+3        VERIFY ENTRY 
          SHN    21-13
          MJN    RSB1        IF MCT ENTRY BAD 
          SHN    14-6 
          LMD    CM+4        CHECK UNASSIGNED MEMORY
          SBK    3777 
          PJN    RSB2        IF .GE. MAXIMUM FOR JOB
          LDD    CM+4 
          UJN    RSB3        RETURN 
  
 RSB1     RJM    HGM         HANG *MTR* (NO RETURN) 
 SCP      SPACE  4,10 
**        SCP - SET CP/PCP AREA ADDRESS.
* 
*         ENTRY  (A) = CP/PCP NUMBER. 
*                (NC) = SYSTEM CP NUMBER. 
* 
*         EXIT   (A) = CPA/PCPA ADDRESS.
  
  
 SCP1     ADD    NC          SET REAL CP AREA ADDRESS 
          SHN    7
  
 SCP      SUBR               ENTRY/EXIT 
          SBD    NC 
          MJN    SCP1        IF REAL CP 
          ZJN    SCP1        IF SYSTEM CP 
          SHN    7
          ADC    0           ADD BASE PCPA ADDRESS - CPA LENGTH 
 SCPA     EQU    *-1
          UJN    SCPX        RETURN 
 SFL      SPACE  4,15 
**        SFL - SET FL INCREASE.
* 
*         ENTRY  (CP) = CONTROL POINT NUMBER. 
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (OR+1) = FL TO SET FOR INCREASE. 
*                (OR+4) = 0 IF NEGATIVE FL REQUEST. 
*                (CS - CS+4) = CP FL STATUS WORD. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 SFL5     LDD    OR+1        SET XM FL REQUIRED 
          STD    CM+3 
 SFL6     LDD    CP          SET CP ADDRESS 
          SHN    7
          ADN    FLIW        REWRITE FL INCREASE CONTROL WORD 
          CWD    CM 
          LDN    0           CLEAR INPUT FILE SCHEDULING FLAG 
          STD    CM+2 
          MONITOR  RSJM      REQUEST JOB SCHEDULER
  
 SFL      SUBR               ENTRY/EXIT 
          LDD    OR+2 
          SHN    21-6 
          PJN    SFLX        IF DO NOT SET *FLIW* 
          LDD    CP 
          SHN    7
          ADN    FLIW        READ FL INCREASE CONTROL WORD
          CRD    CM 
          LDD    T5 
          NJN    SFL5        IF XM REQUEST
          LDD    CM+4 
          ZJN    SFL4        IF NO CM INCREASE PENDING
          LDD    OR+4 
          ZJN    SFL2        IF NFL REQUEST 
 SFL1     LDD    CS 
          UJN    SFL3        COMPUTE TOTAL CM FL
  
 SFL2     LDD    CM+2 
          NJN    SFLX        IF REISSUE OF NFL REQUEST
          LDD    OR+1 
          SBD    CS 
          STD    CM+2        COMPUTE NFL INCREASE AMOUNT
          LDD    CM+4 
          SBD    CS 
 SFL3     ADD    OR+1 
          STD    CM+4 
          LJM    SFL6        REWRITE FL INCREASE CONTROL WORD 
  
 SFL4     LDD    OR+4 
          NJN    SFL1        IF NOT NFL INCREASE
          LDD    OR+1 
          SBD    CS 
          STD    CM+2        COMPUTE NFL INCREASE 
          LDD    CS+4 
          UJN    SFL3        ADD NFL TO CM FL 
 STA      SPACE  4,10 
**        STA - SET MEMORY CONTROL TABLE ADDRESS. 
* 
*         ENTRY  (A) = CP/PCP NUMBER. 
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
* 
*         EXIT   (A) = ABSOLUTE TABLE ADDRESS.
  
  
 STA      SUBR               ENTRY/EXIT 
          SHN    1
          ADC    0           APPEND BASE MCT ADDRESS
 STAA     EQU    *-1
          ADD    T5 
          UJN    STAX        RETURN 
 UFL      SPACE  4,20 
**        UFL - SET UNASSIGNED FIELD LENGTHS. 
* 
*         ENTRY  (CP) = CP/PCP NUMBER.
*                (NC) = SYSTEM CP NUMBER. 
*                (T5) = 0 IF CM REQUEST.
*                     = 1 IF XM REQUEST.
*                (T7) = AMOUNT OF MEMORY REQUIRED.
*                (OR+4) = 0 IF NFL REQUEST. 
*                (CS - CS+4) = FL CONTROL WORD OF REQUESTING CP.
* 
*         EXIT   (A) .LT. 0 IF MEMORY UNAVAILABLE.
*                (T8) = MCT ORDINAL OF MEMORY HOLE. 
* 
*         USES   T1, T3, T4, T7, T8, CM - CM+4, CN - CN+4.
* 
*         CALLS  RSB, TIM.
  
  
 UFL11    LDD    T4 
          NJN    UFL12       IF CP HAS MEMORY ASSIGNED
          LDD    OR+4 
          ZJN    UFL12       IF NFL REQUEST 
          LDN    MSCL        GET MEMORY PAD SIZE
          CRD    CN 
          LDD    T7          CHECK REQUEST SIZE 
          ADD    CN+4 
          SBK    3770 
          MJN    UFL12       IF REQUEST SHORT ENOUGH TO PAD 
          LDN    0
          STD    CN+4 
 UFL12    LDD    CM          CHECK CENTRAL MEMORY 
          SHN    14 
          LMD    CM+1        TOTAL UNASSIGNED MEMORY
 UFL13    SBD    T7 
          PJN    UFL1        IF SUFFICIENT TO SATISFY REQUEST 
  
 UFL      SUBR               ENTRY/EXIT 
          LDD    CS 
          ADD    CS+4        TOTAL ASSIGNED MEMORY
          STD    T4 
          LDN    ACML        FETCH UNASSIGNED MEMORY COUNT
          CRD    CM 
          LDN    0           CLEAR MEMORY ASSIGNMENT PAD
          STD    CN+4 
          STD    T8          SET MEMORY HOLE NOT FOUND
          LDD    T5 
          ZJN    UFL11       IF REQUEST FOR CENTRAL MEMORY
          LDD    CM+3 
          UJN    UFL13       CHECK UNASSIGNED EXTENDED MEMORY 
  
 UFL1     SBD    CN+4 
          PJN    UFL3        IF SUFFICIENT MEMORY FOR REQUEST + PAD 
          ADD    CN+4 
          SBD    T4 
          PJN    UFL6        IF ENOUGH MEMORY TO WARRANT HOLE SEARCH
 UFL2     LDN    0
          UJN    UFLX        RETURN 
  
 UFL3     SBD    T4 
          PJN    UFL5        IF HOLE SEARCH FOR REQUEST + PAD 
          LDD    CN+4 
          RAD    T7 
 UFL4     UJN    UFLX        RETURN 
  
 UFL5     LDD    CN+4        APPEND PAD TO REQUEST
          RAD    T7 
 UFL6     LDD    OR+4 
          ZJN    UFLX        IF NFL REQUEST 
          LDD    CP 
          SBN    2
          MJN    UFL2        IF CMR OR CP 1 
          ADN    3
          LMD    NC 
 UFL7     ZJN    UFL4        IF LAST REAL CP
          LDD    T7 
          RAD    T4          INCLUDE CURRENT INCREASE 
          LDC    0
 UFLA     EQU    *-1         (NUMBER OF MCT ENTRIES)
          SBN    3
          STD    T1 
          LDN    1           INITIALIZE FORWARD LINK
          STD    CM+1 
          LCN    0           PRESET HOLE SIZE 
          STD    T3 
 UFL8     LDD    CM+1        SAVE FORWARD LINK
          STM    UFLB 
          RJM    TIM         UPDATE CLOCK 
          LDC    ** 
 UFLB     EQU    *-1
          RJM    RSB
          SBD    T4 
          MJN    UFL9        IF HOLE NOT FOUND
          SBD    T3 
          PJN    UFL9        IF THIS HOLE LARGER
          RAD    T3 
          LDD    T2          SAVE ORDINAL OF HOLE 
          STD    T8 
          LDD    T0          CHECK HOLE SIZE
          SBD    T4 
          ZJN    UFL7        IF EXACT FIT 
 UFL9     SOD    T1 
          ZJN    UFL7        IF SCAN COMPLETE 
          UJN    UFL8        CHECK NEXT MCT ENTRY 
          SPACE  4,10 
*         MEMORY ALLOCATION ADDRESSES / FUNCTIONS.
  
  
 MAFA     CON    FLSW,ECSW
 MAFC     CON    MSTF,MECF
  
          ERRNZ  FLSW-CMRL
          ERRNZ  ECSW-ECRL
          TITLE  SUBROUTINES. 
 ACP      SPACE  4
**        NOTE - SUBROUTINES WILL NOT ALTER OA, CP, OR - OR+4.
 CDA      SPACE  4,15 
**        CDA - CLEAR DEVICE ACTIVITY.
* 
*         ENTRY  (T4 - CM) = *DSWM* PARAMETERS FROM MESSAGE BUFFER. 
*                (CS) = UNIT TO WRITE TO *DRQP*.
*                (CN - CN+4) = DEVICE ACTIVITY WORD.
* 
*         EXIT   PP ACTIVITY WORD WRITTEN.
*                (PR) = PP NUMBER WAITING FOR THE UNIT BEING RELEASED.
* 
*         USES   CM, CN, CN+1, CN+3, PR.
* 
*         MACROS MSTA.
  
  
 CDA6     LDD    PP          STORE *DRQP* 
          SHN    PPXES
          TADC   DRQP,PPX 
          CWD    CS 
  
 CDA      SUBR               ENTRY/EXIT 
          LDD    CM          CLEAR *CHRV* CHANNEL STATUS
          SCN    11 
          STD    CM 
          LDM    TPPI,PP
          ZJN    CDA6        IF NO INTERLOCK HELD 
          SCN    1
          ZJN    CDA3        IF NO INTERLOCK SET
          LMD    CN+1 
          STD    CN+1 
          SHN    -13
          NJN    CDA2        IF FIRST UNIT NOT FREE 
          LDD    PR 
          NJN    CDA1        IF REQUEST FOR CHANNEL BY OTHER UNIT 
          LDD    CN+3 
          ZJN    CDA3        IF UNIT NOT REQUESTED
          STD    PR 
 CDA1     LDN    0           CLEAR UNIT REQUEST 
          STD    CN+3 
 CDA2     LDN    0
 CDA3     STM    TPPI,PP
          LDD    CN+1 
          SCN    17 
          NJN    CDA4        IF OTHER LOGICAL RESERVE(S) STILL SET
          LDN    1
          STD    CN+1        CLEAR *DALL* UPDATE INTERLOCK
 CDA4     SOD    CN 
          SHN    21-5 
          PJN    CDA5        IF NO UNDERFLOW
          SHN    5-21+22
          ADN    1           FIX UNDERFLOW PROBLEM
          STD    CN 
 CDA5     MSTA   DALL,PP     UPDATE DEVICE ACTIVITY 
          CWD    CN 
          LJM    CDA6        RETURN 
 CFS      SPACE  4,10 
**        CFS - CHECK FOR STEP CRITERION MET. 
* 
*         ENTRY  (A) = POINTER TO OUTPUT REGISTER.
*                (CM - CM+4) = INPUT REGISTER.
* 
*         EXIT   (A) = 0 IF STEP CRITERION MET BY THIS PPU. 
* 
*         USES   T3, CM - CM+4. 
  
  
 CFS      SUBR               ENTRY/EXIT 
          STD    T3          SAVE OUTPUT REGISTER ADDRESS 
          LDD    CM+1 
          LPN    37 
          SHN    7
          ADN    TFSW        READ CALLING CP EJT ORDINAL
          CRD    CM 
          LDC    0           EJT ORDINAL TO STEP
 CFSA     EQU    *-1
          ZJN    CFS1        IF NOT EJT ORDINAL STEP
          LMD    CM 
          ZJN    CFS1        IF CORRECT EJT ORDINAL 
          LDD    T3 
          SBD    OF 
          SHN    PPXES-PPCES
          TADC   ACPP,PPX 
          CRD    CM          GET ALTERNATE CP/PCP ASSIGNMENT IF PRESENT 
          LDD    CM+1 
          SHN    14 
          ADD    CM+2 
          ADK    TFSW        READ POSSIBLE ALTERNATE CP/PCP EJT ORDINAL 
          CRD    CM 
          LDD    CM 
          LMM    CFSA 
          NJN    CFSX        IF NOT CORRECT EJT ORDINAL 
 CFS1     LDC    **          FUNCTION TO STEP 
 CFSB     EQU    *-1
          ZJN    CFSX        IF NO FUNCTION TO STEP 
          LMI    T3 
          LPC    177
          NJN    CFS2        IF INCORRECT FUNCTION
          LDM    **,T3
 CFSC     EQU    *-1         BYTE NUMBER STEPING ON 
          LMC    **          BYTE VALUE TO STEP ON
 CFSD     EQU    *-1
 CFS2     LJM    CFSX        RETURN 
 FTN      SPACE  4,15 
**        FTN - PROCESS MONITOR FUNCTION. 
* 
*         ENTRY  (A) = FUNCTION.
*                (CP) = CONTROL POINT NUMBER. 
*                (CM+1 - CM+4) = PARAMETERS.
* 
*         EXIT   (CM - CM+4) = RESPONSE.
*                (A) = 0. 
* 
*         USES   CN - CN+4. 
* 
*         CALLS  AVC, CPR.
  
  
 FTN4     LDN    ZERL        INITIALIZE *ACPP*
          CRD    CN 
          LDD    CP          SET CONTROL POINT NUMBER 
          STD    CN 
          SHN    7           SET CONTROL POINT ADDRESS
          STD    CN+2 
          STD    CN+4 
          TLDC   ACPP,PPX    WRITE *ACPP* 
          CWD    CN 
          LDD    OF          WRITE OUTPUT REGISTER
          CWD    CM 
 FTNB     LMC    0           MERGE CPU NUMBER 
          RJM    CPR
 FTN5     RJM    AVC         ADVANCE CLOCK
          LDD    OF          READ OUTPUT REGISTER 
          CRD    CM 
          LDD    CM 
          NJN    FTN5        IF NOT COMPLETE
  
 FTN      SUBR               ENTRY/EXIT 
          STD    CM          SET REQUEST
 FTNA     LDC    LMCI 
*         UJN    FTN4        (1 CPU ONLY) 
          STM    FTNB 
          LDD    CM 
          LMN    DCPM 
          ZJN    FTN1        IF FUNCTION REQUIRING CORRECT CPU
          LMN    CEFM&DCPM
          NJN    FTN3        IF FUNCTION DOES NOT REQUIRE CORRECT CPU 
 FTN1     LDD    CP          CHECK CPU SELECTION
          SHN    7
          ADN    CWQW 
          CRD    CN 
          LDD    CN+2 
          LPN    3
          SBN    3
          ZJN    FTN3        IF NEITHER CPU ASSIGNABLE
          ADN    3-1
          PJN    FTN2        IF CPU SELECTION 
          LDD    CP          CHECK FOR ACTIVE JOB 
          SHN    7
          ADN    STSW 
          CRD    CN 
          LDD    CN 
          SHN    -11
          ZJN    FTN3        IF NOT ACTIVE
          SBN    3
          PJN    FTN3        IF NOT ACTIVE
          ADN    2
 FTN2     RAM    FTNB        SET CORRECT CPU
 FTN3     LJM    FTN4        ISSUE REQUEST
 GCE      SPACE  4,15 
**        GCE - GET CHANNEL ASSIGNMENT TABLE ENTRY. 
* 
*         ENTRY  (A) = CHANNEL NUMBER.
* 
*         EXIT   (A) = ((T1)) = CHANNEL ASSIGNMENT TABLE ENTRY. 
*                (CM - CM+4) = CHANNEL ASSIGNMENT TABLE WORD. 
*                (CN) = REQUESTING JOB-S EJT ORDINAL. 
*                (T0) = WORD INDEX FOR CHANNEL ASSIGNMENT TABLE.
* 
*         USES   T0, T1, CM - CM+4, CN - CN+4.
* 
*         CALLS  VCN. 
* 
  
  
 GCE      SUBR               ENTRY/EXIT 
          STD    T1          SAVE CHANNEL NUMBER
          RJM    VCN         VERIFY CHANNEL NUMBER
          LCN    0           INITIALIZE WORD INDEX
          STD    T0 
 GCE1     AOD    T0          INCREMENT WORD INDEX 
          LCN    5           DIVIDE BY 5 LOOP 
          RAD    T1 
          PJN    GCE1        IF NOT CORRECT INDEX 
          ADN    5+CM 
          STD    T1 
          LDC    0           READ CHANNEL ASSIGNMENT TABLE WORD 
 GCEA     EQU    *-1
          ADD    T0          ADD CORRECT WORD INDEX 
          CRD    CM 
          LDD    OA          GET JOB-S CP NUMBER
          SBN    1
          CRD    CN 
          LDD    CN+1        GET REQUESTING JOB-S EJT ORDINAL 
          LPN    37 
          SHN    7
          ADN    TFSW 
          CRD    CN 
          LDI    T1 
          UJN    GCEX        RETURN 
 HGM      SPACE  4,10 
**        HGM - HANG *MTR*. 
  
  
 HGM      CON    **          CALLER-S ADDRESS 
 HGM1     LDC    MS2W+**     DISPLAY MESSAGE
 HGMB     EQU    *-1
          CWM    HGMA,ON
          UJN    HGM1        LOOP 
  
  
 HGMA     DATA   C*MTR HUNG*
 PCM      SPACE  4,10 
**        PCM - PURGE CACHE IF CPU 1 IN MONITOR MODE. 
* 
*         PURGE CACHE IN CPU 1 ON A DUAL CPU MACHINE WITH 
*         CACHE, IF CPU 1 IS IN MONITOR MODE. 
* 
*         EXIT   CPU 1 CACHE PURGED IF DUAL-CPU NOS AND MONITOR MODE. 
* 
*         USES   CM - CM+4. 
  
  
 PCM      SUBR               ENTRY/EXIT 
 PCMA     UJN    PCMX        IF NOT DUAL-CPU NOS CACHE MACHINE
*         LDC    **+CMST+1   (DUAL-CPU NOS CACHE MACHINE) 
          CON    **          CHECK IF CPU 1 IN MONITOR MODE 
          CRD    CM 
          LDD    CM+1 
          ADD    CM+2 
          ADD    CM+3 
          ADD    CM+4 
          ZJN    PCMX        IF CPU 1 NOT IN MONITOR MODE 
          LDN    ZERL 
          CRD    CM 
          LDC    1S8         BIT 56 (IN 4 16-BIT BYTES) SELECTS CPU 1 
          STD    CM 
          LDK    EIBP        SET MICROCODE CPU 1 CACHE PURGE BIT
          RDSL   CM          CENTRAL READ AND SET LOCK (SELECT CPU 1) 
          INPN   4           PURGE CACHE IN SELECTED CPU (CPU 1)
          UJN    PCMX        RETURN 
 RCP      SPACE  4,10 
**        RCP - RECALL CPU. 
* 
*         ENTRY  (CN+2) = CONTROL POINT AREA ADDRESS. 
* 
*         USES   T7, CM - CM+4. 
* 
*         CALLS  CPR. 
  
  
*         THE FOLLOWING CODE WILL SELECT CPU 0 IF NEITHER CPU CAN BE
*         CURRENTLY ASSIGNED ON A DUAL CPU MACHINE WITH CACHE.
  
 RCP1     ADN    CWQW        GET CPU SELECTION
          CRD    CM 
          LDD    CM+2 
          LPN    3
          ZJN    RCP1.1      IF EITHER CPU ASSIGNABLE 
          LMN    3
          LPN    1           SELECT CPU FOR RECALL
          UJN    RCP2.1      RECALL CPU 
  
*         SELECT CPU WITH LOWEST PRIORITY JOB.
  
 RCP1.1   LDC    TSCL        CPU - 0 PRIORITY 
          CRD    T7 
          ADN    1           CPU - 1 PRIORITY 
          CRD    CM 
          LDD    CM 
          SBD    T7 
 RCP2     SHN    0-21        SIGN BIT TO RECALL CPU - 1 
 RCP2.1   SHN    14 
          LMN    RCLF 
          RJM    CPR
  
 RCP      SUBR               ENTRY/EXIT 
          LDD    CN+2 
          LPC    7600        SET CONTROL POINT ADDRESS
          STD    CN+2 
 RCPA     UJN    RCP1        CHECK CPU SELECTION
*         UJN    RCP2        (SINGLE CPU) 
 RCS      SPACE  4,15 
**        RCS - REQUEST CHANNEL STATE CHANGE. 
* 
*         ENTRY  (A) = *SCSM* SUBFUNCTION.
*                (OR+1) = EST ORDINAL.
*                (OR+3) = CHANNEL NUMBER. 
* 
*         EXIT   (A) = (CM+1) = *SCSM* REPLY. 
*                    = 0 IF FUNCTION WAS REJECTED.
* 
*         USES   CM+1 - CM+3. 
* 
*         MACROS MONITOR. 
  
  
 RCS      SUBR               ENTRY/EXIT 
          STD    CM+3        SUBFUNCTION
          LDD    OR+1        EST ORDINAL
          STD    CM+1 
          LDD    OR+3        CHANNEL
          STD    CM+2 
          MONITOR  SCSM 
          LDD    CM+1 
          UJN    RCSX        RETURN 
 TCH      SPACE  4
**        TCH - TEST CHANNEL. 
* 
*         ENTRY  (A) = CHANNEL NUMBER.
* 
*         EXIT   (T2) = CHANNEL.
*                (A) = 0 IF CHANNEL FREE. 
*                (A) .GT. 0 IF CHANNEL IS RESERVED. 
*                (A) = NEGATIVE IF CHANNEL DOWN.
* 
*         CALLS  VCN. 
  
  
 TCH      SUBR               ENTRY/EXIT 
          RJM    VCN         VERIFY CHANNEL NUMBER
          LDM    TCHS,T2
          ZJN    TCHX        IF CHANNEL IS FREE AND UP
          SHN    21-5 
          MJN    TCHX        IF CHANNEL DOWN
          SHN    -14
          ZJN    TCHX        IF CHANNEL UNASSIGNED
          STD    CF          SET CHANNEL UPDATE FLAG
          LDM    TCHS,T2     SET CHANNEL REQUESTED FLAG 
          LPC    -4000
          LMD    FT 
          STM    TCHS,T2
          UJN    TCHX        RETURN 
 VCN      SPACE  4,10 
**        VCN - VERIFY CHANNEL NUMBER.
* 
*         ENTRY  (A) = CHANNEL DESCRIPTOR.
* 
*         EXIT   (T2) = CHANNEL NUMBER. 
* 
*         ERROR  TO *HNG* IF INVALID CHANNEL NUMBER.
  
  
 VCN      SUBR               ENTRY/EXIT 
          LPN    77 
          STD    T2          EXTRACT CHANNEL NUMBER 
 VCNA     SBN    0
          MJN    VCNX        IF NON-CONCURRENT CHANNEL
 VCNB     SBN    40-0 
          MJN    VCN1        IF UNDEFINED CHANNEL 
 VCNC     SBN    0
          MJN    VCNX        IF CONCURRENT CHANNEL
 VCN1     RJM    HNG         HANG PP
 COMMON   SPACE  4,10 
**        COMMON DECKS. 
  
  
 EST$     EQU    1           SELECT EST PROCESSOR 
 IFP$     EQU    1           SELECT REMOTE INITIALIZATION 
*CALL     COMPGFP 
          TITLE  TABLES.
 TCHS     SPACE  4,10 
**        TCHS - CHANNEL TABLE. 
* 
*         ENTRY = 1 WORD. 
*         INDEXED BY CHANNEL NUMBER.
* 
*T, TCHS  1/  R,4/,1/  I,1/  D,5/  ST 
*         R      SET IF CHANNEL IS REQUESTED. 
*         I      SET IF CHANNEL BEING IDLED DOWN. 
*         D      SET IF CHANNEL IS DOWN.
*         ST     0 IF CHANNEL FREE. 
*         ST     PP NUMBER IF CHANNEL BUSY. 
  
 TCHS     EQU    *
 TCHSL    EQU    MXCH+1      CHANNEL NUMBER VALIDATION
 TPPR     SPACE  4
*         TPPR - TABLE OF *MTR* PP REQUESTS.
*         ENTRY = 1 WORD. 
*         INDEXED BY MONITOR FUNCTION CODE. 
* 
*T,       12/  ADDR 
  
  
 TPPR     EQU    TCHS+CTALL*5 
          ORG    TPPR 
  
          DUP    CPUM,1 
          CON    HNG1 
  
 PPR      HERE   INSERT      REQUEST PROCESSOR ADDRESSES
          ORG    TPPR+CPUM
 TREA     SPACE  4,10 
**        TREA - TABLE OF REENTRY ADDRESSES.
*         ENTRY = 1 WORD. 
* 
*T, TREA  12/  ADDR 
*         ADDR   ADDRESS OF CURRENT PROCESSOR FOR THE PP. 
*                = 0, IF PP IS TURNED OFF.
  
  
 TREA     EQU    *-1
          CON    DSD
          DUP    30D-2,1     NO ENTRY FOR *MTR*, SPECIAL ONE FOR *DSD*
          CON    PPR
          SPACE  4
**        CPRA - (P), (A0), (B0) FOR EXCHANGE PACKAGE.
  
  
 CPRA     BSS    5
          SPACE  4
**        BEGIN TABLES OVERLAYED BY PRESET. 
  
  
 BEGIN    BSSN   CPRA+5 
 TSYD     SPACE  4,10 
**        TSYD - TABLE OF SYSTEM DEVICES. 
*         ENTRY = 1 WORD. 
* 
*T, TSYD  12/  EQ 
*         EQ     NEXT SYSTEM DEVICE EST ORDINAL.
  
  
 TSYD     EQU    *
          BSSN   MXSY 
 TSHS     SPACE  4,10 
**        TSHS - TABLE OF SHARED SYSTEM DEVICES.
*         ENTRY = 1 WORD. 
* 
*T, TSHS  12/ V 
*         V      4, IF THIS SYSTEM DEVICE IS SHARED, ELSE 0.
  
  
 TSHS     EQU    *
          BSSN   MXSY 
 TSYM     SPACE  4,10 
**        TSYM - TABLE OF SYSTEM DEVICE MST ADDRESSES.
*         ENTRY = ONE WORD, ZERO WORD TERMINATES TABLE. 
* 
*T, TSYM  12/  MSTA 
*         MSTA   MST ADDRESS OF SYSTEM EQUIPMENT IN *TSYD* WITH SAME
*                RELATIVE TABLE POSITION. 
  
  
 TSYM     EQU    *
          BSSN   MXSY+1      FORCE ZERO TERMINATOR
 TCHR     SPACE  4,10 
**        TCHR - TABLE OF PRIORITY SEEK REQUESTS. 
*         ENTRY = ONE WORD, INDEXED BY CHANNEL NUMBER.
* 
*T, TCHR  12/  PPN
*         PPN    NUMBER OF PP WITH A PRIORITY REQUEST FOR THE CHANNEL.
*                A PRIORITY REQUEST IS ONE TO PERFORM THE INITIAL 
*                POSITION ON A UNIT.
  
  
 TCHR     EQU    *
          BSSN   MXNC+1 
          SPACE  4,10 
**        THE FOLLOWING TABLES ARE PRESET TO ZERO.
 TCMA     SPACE  4,10 
**        TCMA - TABLE OF CONTROL MODULE ACTIVITY.
*         ENTRY = 1 WORD. 
*         INDEXED BY CONTROL MODULE NUMBER. 
* 
*T, TCMA  6/  CH,6/  AC 
*         CH     CHANNEL NUMBER.
*         AC     ACTIVITY COUNT.
  
  
 TCMA     EQU    *
          BSSN   8D 
 TCMN     SPACE  4,10 
**        TCMN - TABLE OF DEVICE UNIT NUMBERS.
*         ENTRY = 1 WORD. 
*         INDEXED BY PP NUMBER. 
* 
*T, TCMN  12/  UN 
*         UN     DEVICE UNIT NUMBER.
  
  
 TCMN     EQU    *-2
          BSSN   20D-2       NO TABLE ENTRY FOR PP0, PP1
 TPPI     SPACE  4,10 
**        TPPI - TABLE OF PPU INTERLOCK BITS. 
*         ENTRY = 1 WORD. 
*         INDEXED BY PPU NUMBER.
* 
*T, TPPI  8/  IL,3/,1/  AC
*         IL     INTERLOCK HELD BY PPU. 
*         AC     ACTIVITY BIT.
  
  
 TPPI     EQU    *-2
          BSSN   20D-2       NO TABLE ENTRY FOR PP0, PP1
 TSCA     SPACE  4,10 
**        TSCA - TABLE OF SHARED DEVICE OUTSTANDING SEEKS.
*         ENTRY = 1 WORD. 
*         INDEXED BY CHANNEL NUMBER.
* 
*T, TSCA  12/  N
*         N = NUMBER OF SEEK WAITS FOR SHARED DEVICES ON THIS CHANNEL.
  
  
 TSCA     BSSN   MXNC+1 
 TSEK     SPACE  4,10 
**        TSEK - TABLE OF SEEK WAITS ON SHARED DEVICES. 
*         ENTRY = 1 WORD. 
*         INDEXED BY CHANNEL NUMBER.
* 
*T, TSEK  12/  N
*         N = NUMBER OF SEEK WAITS PROCESSED FOR THIS CHANNEL 
*             SINCE A TIME WHEN NO SHARED DEVICE ACTIVITY WAS 
*             PRESENT ON THE CHANNEL.  WHEN THIS COUNTER REACHES
*             A PREDEFINED CONSTANT FURTHER ASSIGNMENT OF THE 
*             CHANNEL FOR SHARED DEVICE ACCESS WILL BE DISALLOWED 
*             UNTIL ALL REQUESTS COMPLETE AND OTHER MACHINES ARE
*             ALLOWED ACCESS TO THE CONTROLLER. 
  
  
 TSEK     BSSN   MXNC+1 
  
 EZOT     EQU    *           END OF ZEROED OUT TABLES 
 TPMS     SPACE  4,15 
**        TPMS - TABLE OF MST ADDRESSES BY PP.
*         ENTRY = 1 WORD. 
*         INDEXED BY PPU NUMBER.
* 
*T, TPMS  12/  MSTA 
*         MSTA   MST ADDRESS / 10.
  
  
 TPMS     EQU    *-1
          BSSN   20D-1       NO TABLE ENTRY FOR PP0 
  
          ERRNG  7776-*      TABLE OVERFLOW 
 END      BSSN
          TITLE  MONITOR PRESET.
 PRS      SPACE  4,10 
 PRS8     CRD    CM 
          ADN    1
          CRM    OVLL,CM+4   LOAD NEXT PRESET OVERLAY 
  
 OVLL     BSS    0           PRESET OVERLAY LOAD ADDRESS
  
**        PRS - PRESET TABLES AND CONSTANTS.
  
  
 PRS      BSS    0           ENTRY
          LDN    PPCP        FETCH PP COMMUNICATION AREA POINTER
          CRD    CM 
          AOD    CM+4        SET FIRST OUTPUT REGISTER ADDRESS
          STD    OF 
          SHN    -3 
          LMC    -0 
          RAM    AMVC 
  
*         SET PP COMMUNICATION ADDRESSES. 
  
 PRS1     LDN    PPUL        SET PP STATUS
          CRD    CN 
          LDD    CN          SET MAXIMUM CHANNEL NUMBER + 1 
          ERRNZ  NCHL-PPUL   CODE DEPENDS ON VALUE
          RAM    VCNA 
          LDN    0
          SBD    CN 
          RAM    VCNB 
          LDD    CN+3        SET NUMBER OF CONCURRENT PPS 
*         ERRNZ  CPPL-PPUL   CODE DEPENDS ON VALUE
          LPN    77 
          STD    CN+3 
          NJN    PRS2        IF CONCURRENT PPS PRESENT
          ISTORE MTRB,(UJN  MTR2)  SKIP CPP PROCESSING
          STM    CMSA+1 
          ISTORE MTRE,(LDN  NCTAL)  WRITE ONLY NON CCH-S
 PRS2     LDD    CN+3 
          RAM    MTRC 
          STM    VCNC 
          LDD    CN+2        SET NUMBER OF NON-CONCURRENT PPS 
          LMK    10D
          ZJN    PRS3        IF 10 PP-S 
          LDN    10D
 PRS3     ADN    10D
          RAM    MTRA 
          LPN    77          SET TOTAL NUMBER OF PPS
          ADD    CN+3 
          STD    NP 
          SHN    PPXES       SET END OF PP-S FOR STORAGE MOVE CHECK 
          ADN    PPXE        ALLOW FOR PSEUDO-PP
          STM    MSTA 
          LDN    1           SET PP 1 
          STD    T1 
 PRS4     LDD    T1          CHECK FOR UNAVAILABLE PPS
          SHN    3
          ADD    OF 
          SBN    1           READ INPUT REGISTER
          CRD    CM 
          LDD    CM          CHECK PP STATUS
          LMC    2R** 
          NJN    PRS5        IF AVAILABLE 
          LDC    MTR         INHIBIT PROCESSING 
          STM    TREA,T1
 PRS5     AOD    T1          ADVANCE PP NUMBER
          LMD    NP 
          NJN    PRS4        IF NOT ALL PPS CHECKED 
  
*         RELOCATE CENTRAL MEMORY ADDRESS CONSTANTS.
  
          LDK    CMTP        READ *CPUMTR* FWA
          CRD    CM 
          LDD    CM+3 
          SHN    14 
          ADD    CM+4 
          ADK    CXBP        READ *EXPACS* BLOCK POINTER
          CRD    T4 
          LDK    PPCP        READ EXTENDED PP COMMUNICATION BLOCK FWA 
          CRD    CN 
          LDK    SDAP        READ STATISTICAL DATA AREA POINTER 
          CRD    CS 
          LDC    TSIC        SET RELOCATION TABLE ADDRESS 
          RJM    SIC         RELOCATE INSTRUCTIONS
  
          ERRPL  CPRA-*      CODE DESTROYED READING EXCHANGE PACKAGE
  
          TLDC   /EXPACS/MXP+0,XBP  READ EXCHANGE PACKAGE 
          CRM    CPRA,ON
          LDC    210B        SET *B0* (MICROCODE REQUIRES THIS VALUE) 
          STM    CPRA+4 
  
*         LOAD *4MZ* AND CONTINUE PRESET. 
  
          LDC    RPLP 
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          LJM    PRS8        OVERLAY WITH NEXT PRESET OVERLAY 
          SPACE  4,10 
**        INSTRUCTION RELOCATION EQUIVALENCES.
  
  
 CMT      EQU    CM+3        *CPUMTR* FWA 
 XBP      EQU    T4+3        *CPUMTR* *EXPACS* BLOCK POINTER
 PPX      EQU    CN+0        EXTENDED PP CONTROL BLOCK POINTER
 SDA      EQU    CS+0        STATISTICAL DATA AREA POINTER
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPSIC 
 TSIC     SPACE  4,10 
**        TSIC - INSTRUCTION RELOCATION TABLE.
  
  
 TSIC     BSS    0
          LIST   D
 SIC      HERE
          CON    0           TERMINATE ENTRIES
          LIST   *
  
          ERRNG  7777-*-5 
 4MZ      TTL    4MZ - MTR PRESET (PART 2). 
 4MZ      TITLE  MONITOR PRESET.
          IDENT  4MZ,FMZ
*COMMENT  MTR - PRESET (PART 2).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 4MZ      SPACE  4,10 
***       4MZ - MTR PRESET (PART 2).
* 
*         TO FREE SPACE IN *MTR*, SEVERAL PRESET OVERLAYS HAVE BEEN 
*         DEFINED.  THESE OVERLAYS ARE -
*         *4MZ*, *4MY*, *4MX*, *4MW*, *4MV* AND *4MU*.
*         *STL* LOADS THESE OVERLAYS INTO THE RPL BEFORE RELEASING
*         *MTR*.  ONCE *MTR* HAS FINISHED PRESET, *STL* LOADS THE 
*         DEADSTART RPL OVER THESE OVERLAYS.  *STL* IS PREVENTED FROM 
*         OVERWRITING THE PRESET OVERLAYS BEFORE *MTR* HAS READ THEM
*         BY THE FOLLOWING SCHEME - 
*         1)  AFTER RELEASING *MTR*, *STL* INITIALIZES *DIO*
*         RESIDENT AND ATTEMPTS TO READ THE NEXT TAPE BLOCK.
*         2)  THE TAPE BLOCK CANNOT BE READ UNTIL *DIO* FINISHES
*         INITIALIZING ITSELF, WHICH INCLUDES REQUESTING A CHANNEL
*         WITH A *RCHM* MONITOR FUNCTION. 
*         3)  THE *RCHM* FUNCTION CANNOT COMPLETE UNTIL *MTR* HAS 
*         READ ALL PRESET OVERLAYS AND BEGUN EXECUTING. 
  
  
          ORG    OVLL 
  
  
 FMZ      BSS    0           ENTRY
          LDN    DFPP        SET FWA-3 OF DAYFILE POINTERS FOR *CDBM* 
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          SBN    3
          STM    CDBA+1 
          SHN    -14
          RAM    CDBA 
          LDN    ECRL        CHECK USER ECS ENABLED 
          CRD    CM 
          LDD    CM+1        CHECK USER EXTENDED MEMORY SIZE
          SBD    CM+4 
          NJN    FMZ0        IF USER EM DEFINED 
          SOM    RSTA 
          LDC    HNG1        DISABLE *RCXM* FUNCTION
          STM    TPPR+RCXM
 FMZ0     LDK    MABL 
          CRD    CN 
          ADN    CHTP-MABL   READ CHANNEL TABLE POINTER 
          CRD    CM 
  
*         PRESET CHANNEL TABLE. 
  
          LDD    CM+3        SET CHANNEL STATUS TABLE ADDRESS 
          STM    MTRF 
          ADN    CTALL       SET CHANNEL ASSIGNMENT TABLE ADDRESS 
          STM    SEQB 
          STM    GCEA 
          SHN    -14
          STD    T0          SAVE OVERFLOW, IF ANY
          LDD    CM+2 
          RAM    MTRF-1 
          ADD    T0 
          STM    SEQB-1 
          STM    GCEA-1 
          LDN    CTALL       READ CHANNEL TABLE 
          STD    T1 
          LDD    CM+2 
          SHN    14 
          LMD    CM+3 
          CRM    TCHS,T1
  
*         COMPLETE CHANNEL TABLE PRESET.
  
          LDK    MXCH 
          STD    T1 
 FMZ1     LDM    TCHS,T1     PRESERVE DOWN STATUS 
          LPN    40 
          STM    TCHS,T1
          SOD    T1 
          PJN    FMZ1        IF MORE CHANNELS 
          AOM    TCHS+CHDS   ASSIGN DISPLAY CHANNEL TO *DSD*
  
*         ADJUST FOR MACHINE SIZE, PP SPEED AND MEMORY CLEARING.
  
          LDM    FMZA,CN+4   SET *RTCL* BASED ON PP SPEED 
          STM    TIMA 
          LDD    CN+2        SAVE MACHINE SIZE
          STM    PCBA 
          LDD    CN+3 
          STM    PCBB 
          LDK    SSTL        CHECK FOR MEMORY CLEARING ENABLED
          CRD    CM 
          LDD    CM 
          SHN    21-12
          PJN    FMZ2        IF MEMORY CLEARING ENABLED 
          ISTORE RSTC,(UJN RST20) DISABLE MEMORY CLEARING 
  
*         PRESET SECDED PROCESSING. 
  
 FMZ2     LDD    SC          SAVE ADDRESS OF UID TABLE
          CRD    CM 
          LDD    CM 
          LPN    77 
          RAM    BISC-1 
          LDD    CM+1 
          STM    BISC 
          LDD    CN+1 
          SHN    -11
          LMN    7
          ZJN    FMZ4        IF CYBER 176 
          ISTORE BISE,(UJN BIS6)  DISABLE CYBER 176 PROCESSING
  
*         MOVE SECDED PROCESSING TABLE FOR NON-176 INTO *BIS*.
  
          LDN    FMZBL       SET LENGTH TO MOVE 
          STD    T1 
 FMZ3     LDM    FMZB-1,T1
          STM    BISF-1,T1
          SOD    T1 
          NJN    FMZ3        IF NOT DONE MOVING 
  
*         LOAD *4MY* AND CONTINUE PRESET. 
  
 FMZ4     LDK    RPLP 
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          CRD    CM 
          ADD    CM+4 
          LJM    PRS8        LOAD NEXT PRESET OVERLAY 
  
  
 FMZA     BSS    0           CYCLES UNTIL *RTCL* WRITTEN
          LOC    0
          CON    -MLSC+35    1X PP SPEED
          CON    -MLSC+17    2X PP SPEED
          CON    -MLSC+10    4X PP SPEED
          LOC    *O 
  
 FMZB     BSS    0           C170 CM ID INFORMATION 
          VFD    12/6000,1/0,5/CSEW,6/0 
          VFD    12/77,1/0,5/CMAW,6/4 
          VFD    12/7400,1/1,5/SYNW,6/-10 
          VFD    12/360,1/0,5/SYNW,6/4
          CON    0           C170 ID BUILD TERMINATOR 
          CON    FCCL+SECD
          CON    0           TERMINATOR FOR C170 CLEARING FUNCTIONS 
          CON    0
 FMZBL    EQU    *-FMZB      TABLE LENGTH 
  
          ERRNZ  FMZBL-BISFL TABLE LENGTH ERROR 
          SPACE  4,10 
          ERRNG  7777-*-10D  OVERFLOW ON OVERLAY LOAD 
 4MY      TTL    4MY - MTR PRESET (PART 3). 
 4MY      TITLE  MONITOR PRESET.
          IDENT  4MY,FMY
*COMMENT  MTR - PRESET (PART 3).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 4MY      SPACE  4,10 
***       4MY - MTR PRESET (PART 3).
* 
*         ENTRY  (CN - CN+4) = MABL.
  
  
          ORG    OVLL 
  
  
 FMY      BSS    0           ENTRY
  
*         PRESET CYBER 180 HARDWARE ERROR PROCESSING. 
  
          LDD    CN+1 
          SHN    21-13
          MJP    FMY2        IF LARGE CENTRAL MEMORY NOT PRESENT
          ISTORE CPRF,(ZJN CPR9)  ENABLE *CPUMTR* CONTROL OF *RTCL* 
          AOM    CDBB        READ *FLSW* + 1
          AOM    DCRA 
          ISTORE CCPC,(SHN 6)  CHANGE TO CME CODE 
          ISTORE CRQA,(ZJN PCB3)  CHANGE TO CME PROCESSOR 
          LDC    UJNI-ZJNI   PREVENT CPU SELECTION FOR ECS
          RAM    RSTB 
          LDD    CN+1        CHECK FOR CYBER 170 S/C REGISTER 
          SHN    21-6 
          PJP    FMY2        IF CYBER 170-865/875 
          LDK    EIBP        READ *EICB* POINTER
          CRD    CM 
          LDD    CM 
          SHN    21-12
          PJP    FMY1        IF NOT DUAL CPU MACHINE WITH CACHE 
          LDC    LDMI+0      ENABLE CPU 0 CHECK 
          STM    CPRC 
          LDK    CMTP        SET *CPUMTR* BASE ADDRESS
          CRD    T1 
          LDD    T1+3 
          SHN    14 
          LMD    T1+4 
          RAM    CPRG+1 
          STM    PCMA+1 
          SHN    -14
          RAM    CPRG 
          STM    PCMA 
          LDM    FMYA,CN+4   SET COUNTER FOR 25 MICROSECOND DELAY 
          RAM    CPRE 
          LDM    FMYB,CN+4   SET COUNTER FOR 125 MICROSECOND DELAY
          STM    CPRH+1 
          SCF    *,MR        GET MAINTENANCE CHANNEL
          DCN    MR+40
          FNC    MRDC,MR     KILL DEADMAN TIMER 
          DCN    MR+40
          LDC    STII+T3+1S15  (STIL INSTRUCTION) 
          ACN    MR 
          OAN    MR 
          LDN    1
          IAM    FMYD,MR     READ *STIL* TO MEMORY
          DCN    MR+40       ENSURE MAINTENANCE CHANNEL INACTIVE
          CCF    *,MR        RELEASE CHANNEL
          LDC    FMYC        SET UP INSTRUCTION TABLE ADDRESS 
          STD    T2 
 FMY0     LDI    T2          ADDRESS OF 16-BIT INSTRUCTION
          ZJN    FMY1        IF FINISHED
          STD    T3 
          LDI    T3 
          LMC    1S15        CONVERT TO 16-BIT INSTRUCTION
 FMYD     STI    T3          SET LONG INSTRUCTIONS
*         STIL   T3          SET LONG INSTRUCTIONS
          AOD    T2 
          UJN    FMY0        PROCESS NEXT INSTRUCTION 
  
 FMY1     LDD    CM+3 
          SHN    14 
          LMD    CM+4 
          ADN    DSCM+3      READ DFT/OS BUFFER POINTER 
          CRD    CM 
          LDD    CM+2        SAVE ADDRESS OF *DFT* CONTROL WORD 
          SHN    14 
          LMD    CM+3 
          SHN    -4 
          SHN    6
          LMD    CM 
          STM    PHEA+1 
          SHN    -14
          RAM    PHEA 
          LPN    37 
          SHN    14          READ NOS REQUEST AREA POINTER
          ADM    PHEA+1 
          ADN    DFRQ 
          CRD    CM 
          LDD    CM+2        SAVE ADDRESS OF NOS REQUEST HEADER 
          SHN    14 
          LMD    CM+3 
          SHN    -4 
          SHN    6
          LMD    CM 
          STM    PHEF+1 
          SHN    -14
          RAM    PHEF 
  
*         LOAD *4MX* AND CONTINUE PRESET. 
  
 FMY2     LDK    RPLP 
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          LJM    PRS8        LOAD NEXT PRESET OVERLAY 
  
  
 FMYA     CON    14,30,61    COUNTERS FOR 25 MICROSECOND DELAY
 FMYB     CON    75,173,370  COUNTERS FOR 125 MICROSECOND DELAY 
 FMYC     LIST16             LIST OF LOCATIONS OF 16-BIT INSTRUCTIONS 
          SPACE  4,10 
          ERRNG  7777-*-10D  OVERFLOW ON OVERLAY LOAD 
 4MX      TTL    4MX - MTR PRESET (PART 4). 
 4MX      TITLE  MONITOR PRESET.
          IDENT  4MX,OMU
*COMMENT  MTR - PRESET (PART 4).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 4MX      SPACE  4,10 
***       4MX - MTR PRESET (PART 4).
* 
*         ENTRY  (CN - CN+4) = MABL.
  
  
          ORG    OVLL 
  
  
 OMU      BSS    0           ENTRY
  
*         PRESET CYBER 70, 170 HARDWARE ERROR PROCESSING. 
  
          LDD    CN+1 
          SHN    21-13
          MJN    OMU1        IF LARGE CENTRAL MEMORY NOT PRESENT
          SHN    21-6-21+13 
          PJN    OMU2        IF CYBER 865/875 
          LJM    OMU7        LOAD NEXT OVERLAY
  
 OMU1     SHN    21-6-21+13 
          MJN    OMU3        IF NOT CYBER 170 S/C REGISTER
 OMU2     LDD    HN          CHANGE TO TIME PROCESSING
*         LDC    ZJNI-UJNI
          ERRNZ  100-ZJNI+UJNI  (ADJUST IF INSTRUCTIONS CHANGE) 
          RAM    PHEB 
          LDD    CN+1 
          SHN    -11
          LMN    7
          NJN    OMU4        IF NOT CYBER 176 
          AOM    PSEA 
          LDN    PSNI 
          STM    PHEC 
          STM    PSEB 
          UJN    OMU4        LOAD CYBER 170 PROCESSER 
  
 OMU3     SHN    21-7-21+6+22 
          MJN    OMU6        IF NOT CYBER 70 INTERLOCK REGISTER 
          SOM    OMUC        CHANGE TO INTERLOCK REGISTER 
          SOM    ODWA 
          SOM    ODWB 
          LDN    SSTL        GET SUB-SYSTEM STATUS
          CRD    CM 
          LDD    CM+3        CHECK SIMULATED SCR
          SHN    21-3 
          PJN    OMU4        IF SIMULATED SCR IS SELECTED 
          SOM    AVTA        NO TIME CALL FOR C70 NON-SIMULATION
          LDC    FCTB        TEST BIT 0 FUNCTION
          STM    OMUB 
  
*         MOVE CYBER 70, 170, 700 SERIES, 865/875 BLOCK INTO *PHE*. 
  
 OMU4     LDN    OMUAL       LENGTH TO MOVE 
          STD    T1 
          ISTORE PHEG,(PSN)  DISABLE *DFT* CHECK IF NOT CYBER 180 
 OMU5     LDM    OMUA-1,T1
          STM    PHEA-1,T1
          SOD    T1 
          NJN    OMU5        IF MOVE NOT DONE 
          UJN    OMU7        CONTINUE 
  
 OMU6     LDC    UJNI+2      DISABLE *1MB* CALL 
          STM    MTRG 
          STM    MSTC 
  
*         LOAD *4MW* AND CONTINUE PRESET. 
  
 OMU7     LDK    RPLP 
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          LJM    PRS8        LOAD NEXT PRESET OVERLAY 
  
 OMUA     BSS    0           CYBER 170 ERROR PROCESSOR
          LIST   D
 PHEE     HERE
          LIST   *
 OMUAL    EQU    *-OMUA 
 OMUB     EQU    OMUA+1 
 OMUC     EQU    OMUA+2 
          SPACE  4,10 
          ERRNG  PHE3-PHEA-OMUAL       OVERFLOW OF *PHE*
          ERRNG  7777-*-10D  OVERFLOW ON OVERLAY LOAD 
 4MW      TTL    4MW - MTR PRESET (PART 5). 
 4MW      TITLE  MONITOR PRESET.
          IDENT  4MW,SCC
*COMMENT  MTR - PRESET (PART 5).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 4MW      SPACE  4,10 
**        4MW - MTR PRESET (PART 5).
  
  
          ORG    OVLL 
  
  
 SCC      BSS    0           ENTRY
          LDK    MCTP        GET MEMORY CONTROL TABLE POINTER 
          CRD    CN 
          LDD    CN+1        SET MCT BASE ADDRESS 
          STM    STAA 
          LDD    CN 
          RAM    STAA-1 
          LDD    CN+2        SET NUMBER OF MCT ENTRIES
          STM    UFLA 
          ERRNZ  MCTP-PCPP   CODE DEPENDS ON VALUE
          LDD    CN+3 
          SHN    14          FORM BASE PCPA ADDRESS 
          LMD    CN+4 
          SBK    CPAS 
          STM    SCPA        SET ADDRESS - *CPAS* 
          SHN    -14
          RAM    SCPA-1 
          LDN    NCPL        READ NUMBER OF CONTROL POINTS
          CRD    CM 
          AOD    CM+1        SET SYSTEM CONTROL POINT 
          STD    NC 
          SBN    1           SET LAST CONTROL POINT 
          RAM    RSTE 
          LPN    77 
          RAM    PVEA 
          LDD    NC          SET ADDRESS OF *MS2W* OF SYSTEM CP 
          SHN    7
          RAM    HGMB 
          STM    HNGD 
          STM    HLTA 
          RJM    IFP         INITIALIZE *COMPGFP* 
          LDN    ACPL        READ CPU 0 STATUS
          CRD    CM 
          LDD    CM          CHECK CPU 0
          SHN    6
          PJN    SCC3        IF AVAILABLE 
          LDD    HN 
*         LDC    100         (SAVES 1 BYTE) 
          RAM    CPRA+3      SET CPU - 1
          AOM    MXN
          AOM    CCPB 
          SOM    CCSB 
 SCC1     LDC    SCCA 
          STD    T1          SAVE TABLE ADDRESS 
 SCC2     LDI    T1 
          ZJN    SCC4        IF NO MORE INSTRUCTIONS TO MODIFY
          STD    T2 
          AOD    T1 
          LDI    T1          GET NEW INSTRUCTION VALUE
          STI    T2          STORE ON TOP OF OLD INSTRUCTION
          AOD    T1 
          UJN    SCC2        MODIFY THE NEXT INSTRUCTION
  
 SCC3     LDN    ACPL+1      READ CPU 1 STATUS
          CRD    CM 
          LDD    CM          CHECK CPU 1
          SHN    6
          MJN    SCC1        IF NOT AVAILABLE 
  
*         LOAD *4MV* AND CONTINUE PRESET. 
  
 SCC4     LDK    RPLP 
          CRD    CM 
          LDD    CM 
          SHN    14 
          LMD    CM+1 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          LJM    PRS8        LOAD NEXT PRESET OVERLAY 
  
  
*         TABLE OF INSTRUCTION MODIFICATIONS FOR SINGLE CPU OPERATION.
  
 SCCA     BSS    0
  
          CON    AVCB 
          LOC    AVCB 
          UJN    AVC5        SKIP PROCESSING FOR OTHER CPU
          LOC    *O 
  
          CON    CCPD 
          LOC    CCPD 
          UJN    CCPX        RETURN 
          LOC    *O 
  
          CON    CCSA 
          LOC    CCSA 
          LMN    0
          LOC    *O 
  
          CON    CPRB 
          LOC    CPRB 
          UJN    CPR1 
          LOC    *O 
  
          CON    CX1
          LOC    CX1
          UJN    AVCX        RETURN 
          LOC    *O 
  
          CON    MFLA 
          LOC    MFLA 
          CON    LDNI+MFLF
          LOC    *O 
  
          CON    MFLA+1 
          LOC    MFLA+1 
          CON    RJMI 
          LOC    *O 
  
          CON    FTNA 
          LOC    FTNA 
          UJN    FTN4        AVOID CPU SELECTION
          LOC    *O 
  
          CON    RCPA 
          LOC    RCPA 
          UJN    RCP2        AVOID CPU SELECTION
          LOC    *O 
  
          CON    RSTB 
          LOC    RSTB 
          UJN    RST7        AVOID CPU SELECTION
          LOC    *O 
  
          CON    0           END OF TABLE 
          SPACE  4,10 
 IFP      HERE               *COMPGFP* INITIALIZATION CODE
          SPACE  4,10 
          ERRNG  7777-*-10D  OVERFLOW ON OVERLAY LOAD 
 4MV      TTL    4MV - MTR PRESET (PART 6). 
 4MV      TITLE  MONITOR PRESET.
          IDENT  4MV,THU
*COMMENT  MTR - PRESET (PART 6).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 4MV      SPACE  4,10 
**        4MV - MTR PRESET (PART 6).
  
  
          ORG    OVLL 
  
  
 THU      BSS    0           ENTRY
  
*         SET MULTI-MAINFRAME PROCESSING. 
  
          LDK    MMFL        CHECK MMF ENVIRONMENT
          CRD    CS 
          ADN    EFRL-MMFL   CHECK ERROR IN PRESET
          CRD    CN 
          LDD    CN+4 
          NJN    THU1        IF ERROR DETECTED IN *CPUMTR* PRESET 
          LDD    CS+1 
          LPC    777
          NJN    THU2        IF MMF PRESENT 
 THU1     ISTORE AVCC,(UJN  AVCD)  DISABLE MULTI-MAINFRAME PROCESSING 
          LCN    ARMF-ARTF
          RAM    AVCD 
          LDD    CS+1 
          NJN    THU2        IF INDEPENDENT SHARED DEVICES PRESENT
          LDC    NSDJ        DISABLE SHARED DEVICE CODE 
          RJM    MMI         MODIFY *MTR* INSTRUCTIONS
          LDC    LDNI+10
          STM    RRXA 
 THU2     LDK    CFGL 
          CRD    CM 
          LDD    CM+3 
          SHN    21-11
          MJN    THU3        IF ISD SUBSYSTEM PRESENT 
          LDC    N8SJ        DISABLE ISD SUBSYSTEM CODE 
          RJM    MMI         MODIFY *MTR* INSTRUCTIONS
 THU3     LDC    RTCL        INITIALIZE REAL-TIME CLOCK 
          CRD    TM 
          LDD    TM+4        INITIALIZE CYCLE TIME
          STD    CY 
  
*         LOAD *4MU* AND CONTINUE PRESET. 
  
          LDK    RPLP 
          CRD    CM 
          LDD    CM 
          SHN    14 
          LMD    CM+1 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          CRD    CM 
          ADD    CM+4 
          LJM    PRS8        LOAD NEXT PRESET OVERLAY 
 NSDJ     SPACE  4,10 
**        NSDJ - TABLE OF NO SHARED DEVICE JUMP INSTRUCTIONS. 
* 
*T, NSDJ  12/ ADDRESS,12/ *UJN* INSTRUCTION 
  
  
 NSDJ     BSS    0
 NSDJ     HERE
          CON    0
 N8SJ     SPACE  4,10 
**        N8SJ - TABLE OF ISD SUBSYSTEM JUMP INSTRUCTIONS.
* 
*T, N8SJ  12/ ADDRESS,12/ *UJN* INSTRUCTION 
  
  
 N8SJ     BSS    0
 N8SJ     HERE
          CON    0
 MMI      SPACE  4,10 
**        MMI - MODIFY *MTR* INSTRUCTIONS.
* 
*         ENTRY  (A) = ADDRESS OF MODIFICATION TABLE. 
* 
*         EXIT   INSTRUCTIONS MODIFIED. 
* 
*         USES   T1, T2.
  
  
 MMI      SUBR               ENTRY/EXIT 
          STD    T1          SAVE TABLE ADDRESS 
 MMI1     LDI    T1 
          ZJN    MMIX        IF NO MORE INSTRUCTIONS TO MODIFY
          STD    T2 
          AOD    T1 
          LDI    T1          GET NEW INSTRUCTION VALUE
          STI    T2          STORE ON TOP OF OLD INSTRUCTION
          AOD    T1 
          UJN    MMI1        MODIFY THE NEXT INSTRUCTION
          SPACE  4,10 
          ERRNG  7777-*-10D  OVERFLOW ON OVERLAY LOAD 
 4MU      TTL    4MU - MTR PRESET (PART 7). 
 4MU      TITLE  MONITOR PRESET.
          IDENT  4MU,FMV
*COMMENT  MTR - PRESET (PART 7).
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 4MU      SPACE  4,10 
**        4MU - MTR PRESET (PART 7).
  
  
          ORG    OVLL 
  
  
 FMV      BSS    0           ENTRY
          LDK    ESTP        READ EST POINTER 
          CRD    OR 
          ADK    EJTP-ESTP   READ EJT POINTER 
          CRD    CM 
          SOD    OR+2        SET EST SIZE 
          STM    SEQA 
          LDD    CM+1        SET EJT FWA + *SCHE* OFFSET
          RAM    RCEB+1 
          SHN    -14
          ADD    CM 
          RAM    RCEB 
          LDK    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    OR+1 
  
*         BUILD MASS STORAGE TABLES.
  
          LDN    0
          STD    T1          INITIALIZE SYSTEM DEVICE COUNT 
          LDC    TSYM        SET SYSTEM MST TABLE ADDRESS 
          STD    T2 
          ERRNG  *-TSYM-MXSY TABLE OVERLAYS CODE
 FMV1     SFA    EST,OR+1    READ EST ENTRY 
          ADK    EQDE 
          CRD    CS 
          LDD    CS 
          SHN    0-12 
          LMN    3
          NJN    FMV3        IF NOT SYSTEM DEVICE 
          AOD    T1 
          SHN    -1 
          ZJN    FMV2        IF NOT MORE THAN 1 SYSTEM DEVICE 
          LDC    LDCI        ENABLE SYSTEM DEVICE SELECTION CODE
          STM    RCEA 
 FMV2     LDD    OR+1        SET EST ORDINAL
          STM    TSYD-TSYM,T2 
          LDD    CS          SET SHARED FLAG
          SHN    2-11 
          LPN    4
          STM    TSHS-TSYM,T2 
          LDD    CS+4        SET MST ADDRESS
          STI    T2 
          AOD    T2 
          LDD    CS+3 
          LMC    2RDA 
 FMV3     NJN    FMV4        IF NOT 33502 
          ISTORE RSYA,(LPN 37)  ENABLE 33502 SYSTEM PROCESSING
          ISTORE RSYB,(LMD CS+1)
 FMV4     AOD    OR+1 
          LMD    OR+3        LAST MASS STORAGE ORDINAL + 1
          NJP    FMV1        IF NOT END OF EQUIPMENT
          IAN    14 
          STD    MS 
          LDC    EZOT 
          STD    T1 
          LDN    DSCL        SET UP *MTR* ACTIVE STATUS 
          CRD    CM 
          STD    CM+2 
          IFPL   EZOT-*,1 
          BSSZ   EZOT-*      INSURE CODE TO ZERO TABLE IS BEYOND TABLE
 FMV5     LDN    0           CLEAR TABLES 
          STI    T2 
          AOD    T2 
          LMD    T1 
          NJN    FMV5        IF NOT END OF TABLES 
          LDN    DSCL        SET *MTR* ACTIVE STATUS
          CWD    CM 
          LJM    MTR4        ENTER MAIN LOOP
          SPACE  4,10 
          ERRNG  7777-*-10D  OVERFLOW ON OVERLAY LOAD 
          TTL    MTR - PP MONITOR.
          SPACE  4,10 
          END 
