User Tools

Site Tools


Action unknown: copypageplugin__copy
plato:source:plaopl:mrq

Table of Contents

MRQ

Table Of Contents

  • [00010] -MRQ- PLATO/MASTOR REQUEST PROCESSOR
  • [00013] MASTOR REQUEST PROCESSOR.
  • [00017] QUALS - ESTABLISH ALPHABETIC ORDER.
  • [00074] MASTOR-TO-MRQ REQUEST FORMATS
  • [00182] COMMON SYMBOL/MACRO DEFINITIONS.
  • [00227] MACRO DEFINITIONS
  • [00272] FIELD - EXTRACT SPECIFIED FIELD.
  • [00326] DIRECT CELL DEFINITIONS
  • [00362] MAIN PROGRAM
  • [00452] MRQR100 - PROCESS PENDING MASTOR REQUESTS.
  • [00520] MRQRTAB - REQUEST/PROCESSOR TABLE.
  • [00569] EXITS FROM REQUEST PROCESSING
  • [00624] ERROR EXITS / DROP PPU
  • [00674] PROCESS REQUESTS (UCPJ, UJOB, SYNC, MCS)
  • [00785] CLOCKER - UPDATE RUNNING MILLISEC CLOCKS.
  • [00786] CLOCKER - UPDATE JOB CLOCKS.
  • [01071] FCP - FIND HIGHEST PR CP IN *W* STATE.
  • [01072] FCP - FIND HIGHEST JOB IN *W* STATUS.
  • [01135] PAUSE - PAUSE FOR STORAGE MOVE.
  • [01136] PAUSE - PAUSE FOR STORAGE RELOCATION
  • [01238] PSM - PAUSE FOR STORAGE MOVE.
  • [01270] PSM1 - PAUSE FOR STORAGE MOVE
  • [01280] LOADPPW - LOAD PP COMMUNICATIONS WORD ADDRESS
  • [01299] MESSAG - OUTPUT MESSAGE TO *B*-DISPLAY.
  • [01323] VJOBN - VERIFY JOB NAME. (NOS VERSION 1)
  • [01326] VJOBN - VERIFY JOB NAME.
  • [01358] READEJT - READ EXECUTING JOB TABLE.
  • [01360] READEJT - READ PARTIAL ENTRY FROM EJT.
  • [01404] SWITCH - CHANGE CONTROL POINT ASSIGNMENT.
  • [01405] SWITCH - CHANGE CONTROL POINT ASSIGNMENT.
  • [01455] RSVDDP - RESERVE DDP PORT/CHANNEL.
  • [01518] RELDDP - RELEASE DDP PORT/CHANNEL.
  • [01542] RSVTAB - RESERVE *JOBTAB* TABLE.
  • [01587] RELTAB - RELEASE *JOBTAB* TABLE RESERVATION.
  • [01626] READECS - ECS TO PPU TRANSFER VIA DDP.
  • [01680] WRITECS - PPU TO ECS TRANSFER VIA DDP.
  • [01755] FLAG - ECS FLAG REGISTER OPERATIONS VIA DDP.
  • [01814] DDPMCP - MASTER CLEAR DDP PORT.
  • [01838] EXDROP - INFORM MASTOR OF EXECUTOR DROP.
  • [01839] EXDROP - INFORM MASTOR OF EXECUTOR DROP.
  • [01869] COMMON DECKS
  • [01884] STORAGE DEFINITIONS (MAIN OVERLAY)

Source Code

MRQ.txt
MRQ 
* /---   FILE TYPE = E
* /---   BLOCK      IDENT      00 000   85/02/13  07.11 
          IDENT  MRQ,PPFW    MASTOR REQUEST PROCESSOR.
          PERIPH
          BASE   MIXED
          LIST   F
          SST 
          SYSCOM
          TITLE  -MRQ-   PLATO/MASTOR REQUEST PROCESSOR 
          COMMENT MASTOR REQUEST PROCESSOR (PLATO)
          SPACE  4
***       MRQ - MASTOR REQUEST PROCESSOR. 
* 
*         PLATO SYSTEM PROGRAMMERS INNUMERABLE. 
* 
          TITLE  QUALS - ESTABLISH ALPHABETIC ORDER.
* 
*         ESTABLISH ALPHABETIC QUAL ORDER.
* 
*         NOTE THAT THE FIRST AND LAST QUAL CARDS ARE 
*         MARKERS AND MUST APPEAR EXACTLY AS THEY ARE 
*         IN ORDER FOR THE PROGRAMS THAT UPDATE THESE 
*         QUAL CARDS TO WORK. 
* 
*         QUAL   START
          QUAL   ABLK 
          QUAL   ACCH 
          QUAL   AFT
          QUAL   ATT
          QUAL   BIO
          QUAL   CPS
          QUAL   CSCAN
          QUAL   C=DDP
          QUAL   DDPCM
          QUAL   DDP70
          QUAL   EJT
          QUAL   EVT
          QUAL   FAW
          QUAL   FIP
          QUAL   FIW
          QUAL   FTYPE
          QUAL   INITIAL
          QUAL   INIT1
          QUAL   INIT2
          QUAL   INIT3
          QUAL   JIO
          QUAL   JMACT
          QUAL   JSCAN
          QUAL   MACRO$ 
          QUAL   MASI 
          QUAL   MFF
          QUAL   MNTCH
          QUAL   MRQSPL 
          QUAL   PIM
          QUAL   PPUAV
          QUAL   RSCR 
          QUAL   SCD
          QUAL   SCR
          QUAL   SSD
          QUAL   SYSDAX 
          QUAL   SYSDBX 
          QUAL   SYSDCX 
          QUAL   SYSDEX 
          QUAL   SYSDIX 
          QUAL   SYSDMX 
          QUAL   SYSDPX 
          QUAL   SYSDQX 
          QUAL   SYSDRX 
          QUAL   1DS
          QUAL
  
* /---   BLOCK      COMMENTS   00 000   84/11/30  07.59 
          TITLE  MASTOR-TO-MRQ REQUEST FORMATS
************************************************************
* 
*         -MRQ- 
* 
*         PPU PROGRAM *MRQ* PROCESSES SPECIAL REQUESTS FOR
*         LOGIC *MASTOR*
* 
* 
*         FORMAT OF *MASTOR* TO *MRQ* REQUEST WORD -
* 
*             1ST  12 BITS = REQUEST / REPLY TYPE CODE
*             NEXT 36      = REQUEST PARAMETERS 
*             NEXT 11      = UNUSED 
*             NEXT  1      = COMPLETION BIT 
* 
* 
*         REQUEST FORMATS - 
* 
*         REQUEST TYPE = 1  = SET CPU PRIORITY
*         12/1, 24/0, 12/CPU PRIORITY, 12/0 
* 
*         REQUEST TYPE = 2  = OBTAIN MAIN-FRAME NUMBER
*         12/2, 36/0, 12/0
* 
*         REQUEST TYPE = 3  = DROP PPU
*         12/3, 36/0, 12/0
* 
*         REQUEST TYPE = 4  = ABORT SPECIFIED CONTROL POINT 
*         12/4, 24/0, 12/CONTROL POINT, 12/0
* 
*         REQUEST TYPE = 5  = WRITE TABLE OF RUNNING JOBS 
*         12/5, 12/0, 24/CM ADDRESS FOR TABLE, 12/0 
* 
*         REQUEST TYPE = 6  = UPDATE *JOBTAB* 
*         12/6, 36/0, 12/0
* 
*         REQUEST TYPE = 7  = OBTAIN B-DISPLAY INFORMATION
*         12/7,48/0 
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
* 
*         REQUEST TYPE = 8  = OBTAIN A-DISPLAY INFORMATION
*         12/8,48/0 
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
*         42/JOB NAME, 18/CONTROL POINT NUMBER
* 
*         REQUEST TYPE = 9  = OBTAIN P-DISPLAY INFORMATION
*         12/9,48/0 
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
* 
*         REQUEST TYPE = 10 = OBTAIN Q-DISPLAY INFORMATION
*         12/10,48/0
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
* 
*         REQUEST TYPE = 11 = SET RAX/FLX TO *MASTOR* VALUES
*         12/11, 36/0, 12/0 
* 
* /---   BLOCK      COMMENTS   00 000   85/03/22  08.44 
* 
*         REQUEST TYPE = 12 = OBTAIN C-DISPLAY INFORMATION
*         12/12,48/0
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
*         24/0, 12/LENGTH, 24/CM ADDRESS
* 
*         REQUEST TYPE = 13 = OBTAIN M-DISPLAY INFORMATION
*         12/13,48/0
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
*         24/0, 12/LENGTH, 24/ECS ADDRESS 
* 
*         REQUEST TYPE = 14 = SET JOB NAME
*         12/14, 36/0, 12/0 
* 
*         REQUEST TYPE = 15 = DROP SPECIFIED JOB
*         12/15, 1/FORCE DROP, 11/0, 24/0, 12/0 
*         42/JOB NAME, 18/0 
* 
*         REQUEST TYPE = 20 = PURGE SPECIFIED JOB 
*         12/20, 36/0, 12/0 
*         42/JOB NAME, 18/0 
* 
*         REQUEST TYPE = 29 = OBTAIN E-DISPLAY INFORMATION
*         12/29,48/0
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
* 
*         REQUEST TYPE = 30 = OBTAIN I-DISPLAY INFORMATION
*         12/30,48/0
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
* 
*         REQUEST TYPE = 31 = OBTAIN NUMBER FREE PPUS 
*         12/31, 24/0, 12/NUM PPUS, 12/0
* 
*         REQUEST TYPE = 32 = SYNCHRONIZE CLOCKS
*         12/32, 36/0, 12/0 
*         12/1, 48/CLOCK ADJUSTMENT VALUE 
* 
*         REQUEST TYPE = 33 = OBTAIN R-DISPLAY INFORMATION
*         12/33,48/0
*         12/0,24/BUFFER LENGTH,24/BUFFER ADDRESS 
* 
*         REQUEST TYPE = 34 = SEARCH PERIPHERAL LIBRARY 
*         12/34, 18/0, 18/PPUNAME, 12/0 
* 
*         REQUEST TYPE = 36 = SET A170 MAINT CHANNEL FLAG 
*         12/36,48/0
* 
* 
************************************************************
* /---   BLOCK      COMMONS    00 000   85/02/11  15.04 
          TITLE  COMMON SYMBOL/MACRO DEFINITIONS. 
*CALL     COMPMAC            SYSTEM PP MACROS.
*CALL     PLASGLB            PLATO GLOBAL EQUIVALENCES. 
*CALL     SYSCON             SYSTEM CONFIGURATION (GLOBAL)
          QUAL   BIO
*CALL     COMSBIO            BATCHIO EQUIVALENCES.
          QUAL   CPS
*CALL     COMSCPS            CPU MONITOR SUBFUNCTION CODES. 
          QUAL   EJT
*CALL     COMSEJT            EXECUTING JOB TABLE DEFINITIONS
          QUAL   EVT
*CALL     COMSEVT            EVENT DESCRIPTORS (R-DISPLAY)
          QUAL   JIO
*CALL     COMSJIO            QFT EQUIVALENCES (Q-DISPLAY) 
          QUAL   PIM
*CALL     COMSPIM            PP INSTRUCTION MNEMONICS.
          QUAL
  
 SHNI     EQU    /PIM/SHNI   FOR *COMPCPE*
  
          QUAL   SCD
*CALL     COMSSCD            SERVICE CLASS DEFINITIONS. 
          QUAL
  
 DSSC     EQU    /SCD/DSSC   FOR *COMPCPE*
 SSSC     EQU    /SCD/SSSC   FOR *COMPCPE*
 MXJC     EQU    /SCD/MXJC   FOR *COMPRJC*
  
          QUAL   SCR
*CALL     COMSSCR            S/C REGISTER EQUIVALENCES. 
          QUAL   SSD
*CALL     COMSSSD            SUBSYSTEM DEFINITIONS. 
          QUAL   1DS
*CALL     COMS1DS            1DS FUNCTION CODE DEFINITIONS. 
          QUAL
          BASE   *
*CALL     PLAP501            NOS 501 MACROS USED BY PLATO.
*CALL     AIDTEXT            NOS LEVEL DEPENDENT INSTRUCTS. 
*CALL     PTEXT              PLATO PP EQUIVALENCES. 
*CALL     PLASMPC            MASTOR PARAMETERS AND CONSTANTS
*CALL     PLASMRQ            MRQ/MASTOR REQUEST CODES.
  
 QUAL$    SET    1           NO AUTO-QUALIFY FOR COMMON DCKS
  
* /---   BLOCK      MACROS     00 000   84/12/03  08.14 
          TITLE  MACRO DEFINITIONS
***       REQTAB MACRO       DEFINE MRQ REQUEST TABLE 
* 
*         1ST ARGUMENT = OVERLAY NUMBER (0 = NOT AN OVERLAY)
*         2ND          = ADDRESS TO JUMP TO IF NOT AN 
*                        OVERLAY (IRRELEVANT IF 1ST ARGUMENT
*                        IS NONZERO)
*         3RD          = AN ARGUMENT VALUE TO PASS TO THE 
*                        EXECUTION ROUTINE
*         4TH          = FLAG TO INDICATE WHETHER REQUEST 
*                        DEPENDS ON THE *SECUR* CONFIG
*                        PARAMETER BEING *ON*.
* 
*         FIRST WORD OF ENTRY 
*              1/SECUR FLAG (1=SECUR MUST BE *ON* TO USE) 
*              5/OVERLAY NUMBER (0 = NO OVERLAY)
*              6/ARGUMENT VALUE 
*         SECOND WORD OF ENTRY
*             12/ADDRESS TO JUMP TO IF OVERLAY NUMBER = 0 
* 
* 
          PURGMAC REQTAB
          MACREF REQTAB$
 REQTAB   MACRO  OVL,ADDR,ARG,SECURF
          MACREF REQTAB 
 .RQT     IFC    EQ,*SECURF** 
 .SECUR   SET    0           DEFAULT = 0
 .RQT     ELSE
 .SECUR   SET    SECURF      ELSE, PASSED VALUE 
 .RQT     ENDIF 
          VFD    1/.SECUR,5/OVL,6/ARG 
          VFD    12/ADDR
          ENDM
  
***       DROP.  MACRO       DROP PP, DIAGNOSTICALLY. 
* 
          PURGMAC DROP. 
          MACREF DROP.$ 
 DROP.    MACRO 
          MACREF DROP.
          RJM    DROPMSG
          ENDM
* 
* /---   BLOCK      FIELD MAC  00 000   84/11/30  08.06 
          SPACE  4,10 
**        FIELD - EXTRACT SPECIFIED FIELD.
* 
*         1ST ARG - PP BYTE TO BE LOADED. 
*         2ND ARG - .ARS. TO MOVE FIELD TO LOW ORDER. 
*         3RD ARG - MASK FOR FIELD. 
*         4TH ARG - .CLS. TO MOVE FIELD FOR STORAGE.
*         5TH ARG - PP BYTE WHERE FIELD WILL BE -RAM-ED.
* 
*         ANY ARG CAN BE OPTIONAL, AND UNNECESSARY
*         INSTRUCTIONS WILL BE OPTIMIZED OUT. 
* 
  
          PURGMAC FIELD 
          MACREF FIELD$ 
 FIELD    MACRO  IN,RSH,MSK,LSH,OUT 
 .IN      IFC    NE,*IN** 
 .IND     IFLT   IN,100B
          LDD    IN 
 .IND     ELSE
          LDM    IN 
 .IND     ENDIF 
 .IN      ENDIF 
  
 .RSH     IFC    NE,*RSH**
 .RSH0    IFNE   RSH,0
          SHN    -RSH 
 .RSH0    ENDIF 
 .RSH     ENDIF 
  
 .MSK     IFC    NE,*MSK**
 .MSKN    IFLT   MSK,100B 
          LPN    MSK
 .MSKN    ELSE
          LPC    MSK
 .MSKN    ENDIF 
 .MSK     ENDIF 
  
 .LSH     IFC    NE,*LSH**
 .LSH0    IFNE   LSH,0
          SHN    LSH
 .LSH0    ENDIF 
 .LSH     ENDIF 
  
 .OUT     IFC    NE,*OUT**
 .OUTD    IFLT   OUT,100B 
          RAD    OUT
 .OUTD    ELSE
          RAM    OUT
 .OUTD    ENDIF 
 .OUT     ENDIF 
  
          ENDM
* 
* /---   BLOCK      DIRECT     00 000   87/02/24  13.23 
          TITLE  DIRECT CELL DEFINITIONS
 D.T0     EQU    20B         DIRECT CELL WORK VARIABLES 
 D.T1     EQU    21B
 D.T2     EQU    22B
 D.T3     EQU    23B
 D.T4     EQU    24B
 D.PPWD   EQU    25B         (2 WORDS) ADDRESS OF CPU / PPU 
*                            COMMUNICATION AREA 
 D.CPN    EQU    27B         CONTROL POINT NUMBER 
 D.PNT    EQU    30B         JOB NAME TABLE POINTER 
 D.BPR    EQU    31B         HIGHEST NON-PLATO CPU PR IN W
 D.CPR    EQU    32B         HIGHEST CPU PRIORITY IN *WAIT* 
 EC       EQU    33B         ECS / ESM MODE 
 D.JI     EQU    34B         JOB INDEX
 CN       EQU    35B - 41B   CM WORK CELL 
* 
 D.COM    EQU    42B         COMSOURCE NOS FLAG (0 - NO)
* 
*         D.MMF HAS TWO VALUES ON A BATCH MULTI-MAINFRAME 
*         SYSTEM.  A VALUE OF 1 MEANS THIS IS THE FIRST 
*         TIME THROUGH THE MAIN LOOP.  A VALUE OF 2 MEANS 
*         THIS IS THE SECOND (AND FINAL) TIME THROUGH.  MRQ 
*         WILL BE DROPPED WHEN THE FINAL LOOP IS COMPLETED. 
* 
* 
 D.MMF    EQU    43B         MMF FLAG (0 - PLATO ON 2ND MCH)
 D.NSCR   EQU    44B         NUMBER OF S/C REGISTERS
 D.RSAV   EQU    45B - 46B   SAVE (R) REGISTER OF MRQ-S CP
 D.A170   EQU    47B         170/800 FLAG  (NONZERO=170/800)
 RI       EQU    60B - 61B   RANDOM INDEX (FOR CRA) 
 EX       EQU    62B         EXTENDED ADDRESSING MODE (=1)
  
 SC1      EQU    CHSC        CHANNEL FOR 1ST S/C REGISTER 
 SC2      EQU    36B         CHANNEL FOR 2ND S/C REGISTER 
* 
* /---   BLOCK      MAIN       00 000   87/06/12  12.03 
          TITLE  MAIN PROGRAM 
          ORG    PPFW 
 MRQ      BSS    0
          EXEC   INITIAL     INITIALIZATIONS
          LDM    MFN
          NJN    MRQ1        IF NOT MAINFRAME ZERO
          LDN    3           SET OVERLAY ARGUMENT 
          STM    II 
          EXEC   MASI        INITIALIZE MASTOR CONTROL POINT
 MRQ1     BSS    0
 .NOS252  IFGE   OSLEV,678D 
          LDM    DDP1        CHECK PRIMARY DDP CHANNEL
          SHN    6
          MJN    MRQ3        IF PATH ENABLED
          LDM    DDP2        CHECK SECONDARY DDP CHANNEL
          SHN    6
          MJN    MRQ3        IF PATH ENABLED
 .NOS252  ELSE
          LDM    /C=DDP/C=DDP   READ DDP CHANNEL NUMBER 
          SHN    6           SHIFT FIRST BIT TO SIGN
          PJN    MRQ3        -- DDP IS PRESENT
 .NOS252  ENDIF 
          EXEC   INIT1       170/800 SERIES, NO DDP 
          EXEC   INIT2       170/700 SERIES, NO DDP 
 MRQ3     BSS    0
          EXEC   INIT3       MRQ INITS REQUIRING EM ACCESS
          LDN    1
          STM    INITC       MARK INITIALIZATIONS COMPLETE
          RJM    MRQR100
  
* /---   BLOCK      MAIN       00 000   87/06/12  11.56 
* 
*         MAIN MRQ LOOP - UPDATE TABLES AND PROCESS REQUESTS
* 
*         NOTE THAT IF A JOB CALLS MRQ WITH AUTO-RECALL, THE
*         CPU WILL BE RE-STARTED AFTER THE FIRST MRQ REQUEST
*         HAS BEEN PROCESSED. 
* 
 MRQREQ   LDD    D.MMF
          ZJN    MRQREQ3     IF A PLATO MMF 
          LPN    2
          NJP    MRQREQ7     IF SECOND TIME THROUGH HERE
          STM    RII         (RII)=0 = FORCE A REQUEST CHECK
          LDD    D.MMF
          SHN    1           MAKE NEXT TIME THE 2ND TIME
          STD    D.MMF
          UJN    MRQREQ5     IF A BATCH MMF 
* 
 MRQREQ3  DELAY  100         IDLE 
  
 MRQREQ5  CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          CALL   FCP
          CALL   EXDROP      CHECK FOR EXECUTOR DROP
          CALL   PAUSE
          SOM    RII         CHECK IF TIME FOR REQUEST CHECK
          PJN    MRQREQ6     IF NOT TIME FOR REQUEST CHECK YET
          RJM    MRQR100     CHECK FOR A REQUEST
          UJP    MRQREQ 
* 
 MRQREQ6  BSS    0
          SOM    JII         CHECK IF TIME FOR SCAN FUNCTION
          PJP    MRQREQ 
  
          LDC    5000        RE-SET TIMER 
          STM    JII
  
 MRQREQ7  BSS    0
          EXEC   CSCAN       UPDATE *CLOKTAB* 
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          EXEC   JSCAN       UPDATE *JOBTAB*
          LDD    D.NSCR      CHECK NUMBER OF S/C REGISTERS
          ZJN    MRQE7.1     IF NO SCR-S AND NOT 1ST TIME 
          EXEC   RSCR        UPDATE CM COPY OF S/C REGISTER 
 MRQE7.1  BSS    0
          LDD    D.MMF
          NJN    MRQREQ8     IF A BATCH MMF 
          LJM    MRQREQ 
* 
 MRQREQ8  BSS    0
  
 .NOSV2   IFLT   OSLEV,562D  (NOS VERSION 1)
          LDD    CP          SET UP PP RECALL 
          ADN    RLPW 
          CWD    IR 
 .NOSV2   ENDIF 
  
          MONITOR  DPPM      DROP PPU 
          LJM    PPR
* 
* /---   BLOCK      MRQR100    00 000   82/11/18  09.07 
          TITLE  MRQR100 - PROCESS PENDING MASTOR REQUESTS. 
* 
*         CHECK FOR *MASTOR* TO *MRQ* REQUEST 
* 
 MRQR100  SUBR
          CALL   PAUSE       CHECK FOR ERROR/STORAGE MOVE 
          LDC    20 
          STM    RII         RE-SET TIMER 
          LDN    3
          STD    D.T0        SET NUMBER CM WORDS TO READ
          RJM    LOADPPW     GET ADDRESS OF REQUEST WORD
          CRM    REQUEST,D.T0    READ REQUEST WORDS 
          LDM    REQUEST+4
          LPN    1           CHECK COMPLETION BIT 
          NJP    MRQR950     IF REQUEST COMPLETED 
          LDM    REQUEST
          SHN    1           MULTIPLY BY MRQRTAB ENTRY SIZE 
          STD    D.T1 
          ADC    -MRQRMAX    CHECK REQUEST CODE LEGAL 
          PJP    MRQRERR
          LDM    MRQRTAB,D.T1    LOAD FIRST WORD OF ENTRY 
          STD    D.T0 
          SHN    6           CHECK TOP BIT
          PJN    MRQ200      IF DOESN*T DEPEND ON *SECUR* 
  
*         GET VALUE OF *SECUR* FOR CURRENT MAINFRAME. 
  
          LDD    RA 
          SHN    6
          ADN    MS.ECSP
          CRM    ECSP,ON     UPDATE CURRENT VALUE OF *ECSP* 
  
*         NOW SEE IF *SECUR* IS ON (1) OR OFF (0).
  
          LDM    ECSP 
          LPN    10B         *SECUR* BIT
          NJP    MRQRERR     IF *SECUR* = ON
  
 MRQ200   LDD    D.T0        RESTORE FIRST WORD OF ENTRY
          AOD    D.T1        (A) = ADDR OF SECOND ENTRY WORD
          LDM    MRQRTAB,D.T1    LOAD SECOND WORD OF ENTRY
          STD    D.T1 
  
 MRQR500  LDD    D.T0 
          LPC    3700B       OVERLAY NUMBER 
          NJN    MRQR700     IF AN OVERLAY
          LDD    D.T1        ADDRESS
          ZJP    MRQRERR     IF NO ADDRESS (AND NO OVERLAY) 
  
*         PROCESS ADDRESS 
  
          LDD    D.T0 
          LPN    77B         LOAD ARGUMENT
          STM    II 
          LJM    0,D.T1      JUMP TO APPROPRIATE ROUTINE
* 
*         PROCESS OVERLAY 
* 
 MRQR700  LDD    D.T0 
          LPN    77B         LOAD ARGUMENT
          STM    II 
          LDD    D.T0 
          LPC    3700B       OVERLAY NUMBER 
          SHN    -6 
          EXEC               EXECUTE THE OVERLAY
          LJM    MRQRX
* 
* /---   BLOCK      MRQRTAB    00 000   85/03/22  08.49 
          TITLE  MRQRTAB - REQUEST/PROCESSOR TABLE. 
 MRQRTAB  BSS    0
          REQTAB 0,MRQRX,0     0  = NO-OP 
          REQTAB MASI,0,0,0    1  = SET CPU/QUEUE PRIORITY
          REQTAB MASI,0,1,0    2  = OBTAIN MAINFRAME NUMBER 
          REQTAB MASI,0,2,0    3  = DROP PPU
          REQTAB 0,MRQRERR,0   4  = OBSOLETE (ABORT JOB)
          REQTAB 0,MRQWJB,0    5  = WRITE RUNNING JOB TABLE 
          REQTAB 0,MRQJSC,0    6  = *JOBTAB* SCAN 
          REQTAB SYSDBX,0,0    7  = OBTAIN B-DISPLAY INFO 
          REQTAB SYSDAX,0,0    8  = OBTAIN A-DISPLAY INFO 
          REQTAB SYSDPX,0,0    9  = OBTAIN P-DISPLAY INFO 
          REQTAB SYSDQX,0,0    10 = OBTAIN Q-DISPLAY INFO 
*  NEXT OVERLAY ALSO CALLED DIRECTLY DURING INITIALIZATION
          REQTAB MASI,0,3,0    11 = SET RAE/FLE TO *MASTOR* 
          REQTAB SYSDCX,0,0    12 = OBTAIN C-DISPLAY INFO 
          REQTAB SYSDMX,0,0,1  13 = OBTAIN M-DISPLAY INFO 
          REQTAB MASI,0,4,0    14 = SET JOB NAME
          REQTAB JMACT,0,0     15 = DROP SPECIFIED JOB
          REQTAB SYSDHX,0,0    16 = OBTAIN H-DISPLAY INFO 
          REQTAB 0,MRQRERR,0   17 = UNUSED
          REQTAB 0,MRQRERR,0   18 = UNUSED
          REQTAB 0,MRQRERR,0   19 = UNUSED
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
          REQTAB 0,MRQRERR,0   20 = OBSOLETE (PURGE Q FILE) 
 .NOSV2   ELSE               (NOS VERSION 1)
          REQTAB JMACT,0,1     20 = PURGE QUEUE FILE
 .NOSV2   ENDIF 
          REQTAB 0,MRQRERR,0   21 = UNUSED
          REQTAB 0,MRQRERR,0   22 = UNUSED
          REQTAB 0,MRQRERR,0   23 = UNUSED
          REQTAB 0,MRQRERR,0   24 = UNUSED
          REQTAB 0,MRQRERR,0   25 = UNUSED
          REQTAB 0,MRQRERR,0   26 = UNUSED
          REQTAB 0,MRQRERR,0   27 = UNUSED
          REQTAB 0,MRQRERR,0   28 = UNUSED
          REQTAB SYSDEX,0,0    29 = OBTAIN E-DISPLAY INFO 
          REQTAB SYSDIX,0,0    30 = OBTAIN I-DISPLAY INFO 
          REQTAB PPUAV,0,0     31 = DETERMIN NUMBR PPUS FREE
          REQTAB 0,MRQSNC,0    32 = SYNCHRONIZE CLOCKS
          REQTAB SYSDRX,0,0    33 = OBTAIN R-DISPLAY INFO 
          REQTAB MRQSPL,0,0    34 = SEARCH PERIPH. LIBRARY
          REQTAB 0,MRQRERR,0   35 = UNUSED
          REQTAB 0,MNTCH,0     36 = SET MC FLAG 
* 
          BSS    0
 MRQRMAX  EQU    *-MRQRTAB
* 
* /---   BLOCK      REQEXITS   00 000   82/11/18  08.55 
          TITLE  EXITS FROM REQUEST PROCESSING
**        STANDARD EXIT FOR DISPLAY OVERLAYS
* 
*         (D.T3) = NUMBER OF PPU WORDS OF DATA TO BE WRITTEN
*         BUFF = BEGINNING ADDRESS OF DATA
*         RSVDDP HAS BEEN CALLED TO RESERVE DDP 
* 
 DSPWRT   LDC    BUFF 
          STD    D.T0        D.T0 = PPU MEMORY ADDRESS
          LDM    MRAX+1 
          ADM    REQUEST+9   ECS ADDR LOWER 
          STD    D.T2        D.T2 = LOWER PART OF ECS ADDR
          SHN    -12
          ADM    MRAX        COMPUTE UPPER PART OF ABS ADDR 
          ADM    REQUEST+8   ECS ADDR UPPER 
          STD    D.T1        D.T1 = UPPER PART OF ECS ADDR
          CALL   WRITECS     WRITE INFO TO ECS
          CALL   RELDDP      RELEASE DDP PORT 
*         UJN    MRQRX
* 
*         REQUEST PROCESSING EXITS
* 
 MRQRX    LDC    4000B       MARK NO ERROR OCCURRED 
          STM    REQUEST
          UJN    MRQR900
* 
 MRQRER1  CALL   RELDDP      RELEASE DDP IF NECESSARY 
  
 MRQRERR  LDC    4077B       MARK ERROR OCCURRED
          STM    REQUEST
  
 MRQR900  LDN    1           SET COMPLETION BIT 
          STM    REQUEST+4
          RJM    LOADPPW     GET ADDRESS OF REQUEST WORD
          CWM    REQUEST,ON  RE-WRITE REQUEST 
          LDD    CP          CALLING CP AREA ADDR 
          ADK    STSW        OFFSET TO STATUS WORD
          CRD    CM          READ CONTROL POINT STATUS WORD 
          LDD    CM+C.CPSTAT
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
          SHN    -11B        (A) = CP STATUS
          SBN    6           6 = *I* = AUTO-RECALL
          NJN    MRQR950     IF NOT IN AUTO-RECALL
 .NOSV2   ELSE               (NOS VERSION 1)
          LPC    1000B       CHECK IF AUTO-RECALL BIT SET 
          ZJN    MRQR950     IF NOT IN AUTO-RECALL
 .NOSV2   ENDIF 
          LDN    ZERL 
          CRD    CM          PRE-CLEAR ARGUMENT AREA
          MONITOR RCPM       RE-START CPU 
 MRQR950  BSS    0
          UJP    MRQR100X 
* 
* 
* /---   BLOCK      ERREXITS   00 000   82/11/22  11.58 
          TITLE  ERROR EXITS / DROP PPU 
* 
*         ERROR EXITS - 
* 
 MRQERR5  BSS    0
          CALL   DFM,(=C/ "PPU.MRQ" - CANNOT RETURN TO MASTOR./)
          DROP. 
* 
* 
 MRQERR1  BSS    0
          CALL   DFM,(=C/ "PPU.MRQ" - IMPROPER REQUEST./) 
  
 MRQERRX  LDN    ZERL        PRE-CLEAR ARGUMENTS
          CRD    CM 
          LDN    PPET 
          STD    CM+1        SET ERROR FLAG = PPU ABORT 
          MONITOR CEFM
          DROP. 
* 
 DROPMSG  SUBR               ENTER AS SUBROUTINE, NO EXIT 
          LDM    DROPMSG     READ CALLING ADDR
          SHN    -6          KEEP UPPER 2 DIGITS
          RJM    C2D         CONVERT TO DISPLAY CODE
          STM    DRPB        STORE IN MESSAGE TEXT
          LDM    DROPMSG     READ CALLING ADDR AGAIN
          LPN    77B         KEEP LOWER 2 DIGITS
          RJM    C2D         CONVERT TO DISPLAY CODE
          STM    DRPB+1      STORE IN MESSAGE TEXT
          LDK    CPON+DRPA   MESSAGE TYPE + TEXT ADDR 
          RJM    DFM         OUTPUT MESSAGE 
  
 DROP     CALL   RELTAB      RELEASE *JOBTAB* 
          CALL   RELDDP      RELEASE DDP
          LDN    ZERL 
          CRD    CM 
          MONITOR DPPM       DROP PPU 
          LJM    PPR
* 
* 
 DRPA     DATA   H* "PPU.MRQ" - DROPPED AT *
 DRPB     DATA   0,0         4 CHAR ADDR
          DIS    ,/./        PERIOD + END-OF-LINE 
* 
* 
          BASE   M
*CALL     COMPC2D            CONSTANT TO OCTAL DISPLAY CODE 
          BASE   *
* 
* 
* /---   BLOCK      PROCESS    00 000   85/03/22  08.58 
          TITLE  PROCESS REQUESTS (UCPJ, UJOB, SYNC, MCS) 
* 
*         REQUEST = 5 = WRITE TABLE OF RUNNING JOBS 
* 
 MRQWJB   EXEC   CSCAN       UPDATE JOB TABLE 
          LDC    MS.NCP 
          STD    D.T0        SET NUMBER WORDS TO WRITE
          LDM    REQUEST+2
          SHN    12          FORM ADDRESS TO WRITE
          ADM    REQUEST+3
          CALL   ABS         CONVERT TO ABSOLUTE
          ZJP    MRQRERR
          CWM    CPJNAM,D.T0         WRITE JOB NAMES TO CM
          UJP    MRQRX
* 
* 
*         REQUEST = 6 = PERFORM *JOBTAB* SCAN 
* 
 MRQJSC   EXEC   CSCAN       UPDATE *CLOKTAB* 
          EXEC   JSCAN       UPDATE *JOBTAB*
          UJP    MRQRX
* 
* 
*         REQUEST = 32 = SYNCHRONIZE CLOCKS 
* 
 MRQSNC   LDC    7777B       INITIALIZE TIME-OUT
          STM    II 
  
 MSNC20   LDN    2           SET NUMBER OF CM WORDS TO READ 
          STD    D.T0 
          RJM    LOADPPW     GET ADDRESS OF REQUEST WORD
          CRM    REQUEST,D.T0 
          LDM    REQUEST+5   CHECK IF ADJUSTMENT VALUE READY
          NJP    MSNC40 
          SOM    II          TIME-OUT END TEST
          ZJP    MRQRERR
          CALL   PAUSE       CHECK FOR ERROR/STORAGE MOVE 
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          DELAY  100
          UJP    MSNC20 
* 
 MSNC40   LDN    4           INITIALIZE INDEX 
          STD    D.T0 
  
 MSNC45   LDM    REQUEST+5,D.T0    SET CLOCK ADJ VALUE
          STM    CKADJ,D.T0 
          SOD    D.T0        DECREMENT INDEX
          PJP    MSNC45 
          LDM    CKADJ+1     SET UPPER BYTE 
          STM    CKADJ
          LDM    CKADJF      CHECK IF INITIAL ADJUSTMENT
          NJP    MSNC50 
          LDC    RTCL        READ MILLISECOND CLOCK 
          CRM    CKBUFF,ON
          LDM    CKBUFF+4 
          SBN    1           FORCE UPDATE OF MSEC CLOCK 
          STM    CKLAST+5    SET LAST CLOCK TIME
  
 MSNC50   CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          LDN    1
          STM    CKADJF      MARK CLOCK SYNCHRONIZED
          UJP    MRQRX
* 
* /---   BLOCK      PROCESS    00 000   85/07/17  14.46 
* 
*         REQUEST = 36 = SET MASTOR INTERLOCK 
* 
*         CALLS     - CLOCKER, MESSAG.
* 
*         USES   - CM.
* 
 MNTCH    LDC    1000        TIMES TO TRY BEFORE MESSAGE (1 SEC)
          STM    MCWK 
  
 MC15     LDD    RA          GET MASTOR-S RA
          SHN    6
          ADN    MS.INTK     (A) = ADDRESS OF INTERLOCK WORD
          CRD    CM 
          LDD    CM          (A) = FIRST 2 CHARS OF WHO HAS INTERLOCK 
          NJN    MC20        IF SOMEONE HAS THE INTERLOCK 
          LDN    ZERL 
          CRM    INTLK,ON 
          LDM    PNW         (A) = *MA* 
          STM    INTLK
          LDM    PNW+1       (A) = *ST* 
          STM    INTLK+1
          LDM    PNW+2       (A) = *OR* 
          STM    INTLK+2
          LDD    RA          GET MASTOR-S RA
          SHN    6
          ADN    MS.INTK     (A) = ADDRESS OF INTERLOCK WORD
          CWM    INTLK,ON 
          UJP    MRQRX       MARK NO ERROR OCCURRED 
  
*         INTERLOCK WORD RESERVED SOMEWHERE ELSE
  
 MC20     CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          DELAY  1000        IDLE FOR 1 MILLISEC
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          SOM    MCWK        (A) = NUMBER OF TRIES LEFT 
          PJP    MC15        IF SOME TRIES LEFT 
          LDC    MSGMC
          RJM    MESSAG 
          RJM    PAUSE       CHECK FOR ERROR / STORAGE MOVE 
          UJP    MNTCH       TRY AGAIN -- WE GET IT OR HANG 
* 
 INTLK    BSS    5
 MCWK     BSS    1           NUMBER OF TIMES TO TRY AGAIN 
 MSGMC    DIS    ,/"PPU.MRQ"  CANNOT GET MASTOR INTLOK/ 
  
* /---   BLOCK      CLOCKER    00 000   79/02/23  17.33 
          TITLE  CLOCKER - UPDATE RUNNING MILLISEC CLOCKS.
**        CLOCKER - UPDATE JOB CLOCKS.
* 
*         UPDATES MILLISECOND CLOCK IN RA+77 OF JOBS LISTED 
*         IN CM *CLOKTAB* TABLE 
* 
*         DOESN'7T USE  --  D.T0-D.T4 
* 
 CLOCKER  SUBR
          LDM    CKON        CHECK IF CLOCKING ACTIVATED YET
          ZJN    CLOCKERX 
  
*         CHECK IF MILLISECOND CLOCK HAS TICKED 
  
 CLOK100  LDC    RTCL        READ MILLISECOND CLOCK 
          CRM    CKBUFF,ON
          LDM    CKBUFF+4 
          SBM    CKLAST+5    COMPARE WITH LAST CLOCK TIME 
          ZJN    CLOCKERX 
          STM    CKTICK      SET CLOCK TICK SIZE
          LDM    CKBUFF+4    RE-SET LAST CLOCK UPDATE TIME
          STM    CKLAST+5 
          LDN    0
          STM    CKBUFF      CLEAR UPPER TWO BYTES OF CLOCK 
          STM    CKBUFF+1 
  
*         ADJUST MILLISECOND CLOCK
  
          LDM    CKADJ+4     ADJUST 4TH BYTE
          RAM    CKBUFF+4 
          SHN    -12
          ADM    CKADJ+3     ADJUST 3RD BYTE
          RAM    CKBUFF+3 
          SHN    -12
          ADM    CKADJ+2     ADJUST 2ND BYTE
          RAM    CKBUFF+2 
          SHN    -12
          RAM    CKBUFF+4    END-ROUND CARRY
  
*         PREVENT NEGATIVE ELAPSED TIME 
  
          LDM    CKADJF      CHECK IF INITIALIZATIONS 
          ZJP    CLOK115
          LDM    CKBUFF+2    CHECK IF ELAPSED TIME NEGATIVE 
          SBM    CKLAST+2 
          MJP    CLOK112
          NJP    CLOK115
          LDM    CKBUFF+3 
          SBM    CKLAST+3 
          MJP    CLOK112
          NJP    CLOK115
          LDM    CKBUFF+4 
          SBM    CKLAST+4 
          PJP    CLOK115
          ADK    15          MINIMUM CLOCK TICK VALUE 
          PJN    CLOK113     SKIP MSG IF NORMAL CORRECTION
  
 CLOK112  CALL   MESSAG,(=16C"PPU.MRQ"  CLOCK RESET)
 CLOK113  LJM    CLOCKERX 
* 
 CLOK115  LDM    CKBUFF+4    UPDATE PREVIOUS CLOCK VALUE
          STM    CKLAST+4 
          LDM    CKBUFF+3 
          STM    CKLAST+3 
          LDM    CKBUFF+2 
          STM    CKLAST+2 
  
*         UPDATE MILLISECOND CLOCK IN *MASTOR* RA+77B 
  
          LDC    77B
          CALL   ABS         GET ABS ADDR OF RA+77
          ZJP    MRQERR1
          CWM    CKBUFF,ON   WRITE OUT MILLISECOND CLOCK
  
*         UPDATE MILLISECOND CLOCK IN RA+77B OF JOBS LISTED 
*         IN *CLOKTAB* TABLE
  
          LDC    5*CKLTH     INITIALIZE PPU *CLOKTAB* INDEX 
          STD    T1 
  
 CLOK120  LDC    -5          DECREMENT *CLOKTAB* INDEX
          RAD    T1 
          ZJP    CLOCKERX 
          LDM    CLOKTAB,T1 
          ZJP    CLOK120     SKIP IF NO JOB NAME
  
* /---   BLOCK      CLOCKER/V2 00 000   89/06/01  15.43 
  
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
  
          LDM    CLOKTAB+2,T1   (A) = EJT ORDINAL 
          ZJP    CLOK190     DELETE JOB FROM TABLE
          CALL   READEJT     READ EXECUTING JOB TABLE 
          LDM    CLOKTAB,T1  COMPARE CHARS 1-2 OF JSN 
          LMD    EJT.JSN
          NJP    CLOK190     DELETE ENTRY IF DIFF JSN 
          LDM    CLOKTAB+1,T1  COMPARE CHARS 3-4 OF JSN 
          LMD    EJT.JSN+1
          NJP    CLOK190
          LDD    EJT.ST      READ EJT STATUS BYTE 
          SHN    17D-6       MOVE JOB ADVANCE FLAG TO SIGN
          MJP    CLOK190     REMOVE IF CHANGING JOB STEP
          SHN    6
          LPN    37B         (A) = JOB STATUS 
          SBN    /EJT/EXJS   CHECK FOR EXECUTING
          NJP    CLOK120     RELOOP IF NOT EXECUTING
          LDD    EJT.EF      READ ERROR FLAGS 
          NJP    CLOK190     DELETE JOB IF ERROR OCCURRED 
          LDD    EJT.XCP     READ CONTROL POINT NUMBER
          LPN    37B         MASK FOR CONTROL POINT NUMBER
          SHN    7           (A) = FWA OF CP AREA 
          STD    T2 
          STM    CLOKTAB+4,T1 
          ADK    STSW        LOAD CP STATUS WORD
          CRD    CM 
          LDD    CM+1        CHECK ERROR FLAGS
          NJP    CLOK190
  
          LDK    CMCL        CHECK FOR PENDING STORAGE MOVE 
          CRD    CM 
          LDD    CM          CP AREA WHERE MOVE IS PENDING
 .NOS27   IFGE   OSLEV,716D  NOS 2.7.1
          SHN    7
 .NOS27   ENDIF 
          SBD    T2          OUR TARGET CP AREA 
          ZJP    CLOK120     RELOOP IF MTR ABOUT TO MOVE CP 
 CLOKA    LDN    FLSW        READ FIELD LENGTH WORD 
*         LDN    FLSW+1      (CME PRESENT)
          ADD    T2 
          CRD    CM 
  
* /---   BLOCK      CLOCKER/V1 00 000   82/12/02  09.01 
  
 .NOSV2   ELSE               (NOS VERSION 1)
  
*         READ JOB NAME AT TARGET CP
  
          LDM    CLOKTAB+4,T1 
          ZJP    CLOK120     JUMP IF JOB DELETED FROM TABLE 
          ADN    JNMW        BIAS TO JOB NAME 
          CRD    CM          READ JOB NAME
          LDD    CM+3 
          SCN    77B         CLEAR 8TH CHARACTER OF JOB NAME
          STD    CM+3 
  
*         VERIFY JOB NAME - CHECK JOB STILL RUNNING 
  
          LDD    CM          COMPARE 1ST BYTE 
          SBM    CLOKTAB,T1 
          NJP    CLOK190
          LDD    CM+1        COMPARE 2ND BYTE 
          SBM    CLOKTAB+1,T1 
          NJP    CLOK190
          LDD    CM+2        COMPARE 3RD BYTE 
          SBM    CLOKTAB+2,T1 
          NJP    CLOK190
          LDM    CLOKTAB+3,T1 
          SCN    77B         CLEAR 8TH CHARACTER
          SBM    CM+3        COMPARE 4TH BYTE 
          NJP    CLOK190
  
*         CHECK FOR PENDING STORAGE MOVE
  
          LDK    CMCL 
          CRD    CM 
          LDD    CM          FWA OF CP AREA ABOUT TO MOVE 
          SBM    CLOKTAB+4,T1  FWA OF OUR TARGET CP 
          ZJP    CLOK120     IF MTR ABOUT TO MOVE THIS CP 
  
*         CHECK FOR ERROR OR CHANGE IN CONDITION
  
          LDM    CLOKTAB+4,T1 
          ADN    STSW        FORM ADDRESS OF STATUS WORD
          CRD    CM 
          LDD    CM+C.CPEF   CHECK IF ERROR OCCURRED
          NJP    CLOK190
          LDD    CM+C.CPSTAT
          LPN    40B         CHECK FOR JOB ADVANCE FLAG 
          NJP    CLOK190     REMOVE IF CHANGING JOB STEP
  
*         READ CM RA
  
 .CLOK150 IFGE   OSLEV,552D  IF NOS LEVEL IS 552 OR GREATER 
          LDM    CLOKTAB+4,T1    (A) = JOB-S CP AREA
          ADN    FLSW        FORM ADDRESS OF RA AND FL
          CRD    CM 
 .CLOK150 ENDIF 
          LDD    CM+C.CPRA   LOAD CM RA 
          ZJP    CLOK120
          STD    T2          T2 = JOBS CM RA
  
          LDD    D.A170      CHECK FOR 800 SERIES MAINFRAME 
          ZJN    CLOK160     -- NO, DON'7T FOOL WITH R OR RA
 .NOSV2   ENDIF 
  
* /---   BLOCK      CLOCKER    00 000   82/11/29  16.42 
  
*         PROGRAMMER-S NOTES FOR 800 SERIES MAINFRAMES -- 
* 
*         1)  FROM THIS POINT ON UNTIL *CLOK185* THERE MUST 
*             BE NO STORAGE MOVE REQUESTS MADE.  THIS IS
*             BECAUSE THE (R) WOULD BE UPDATED, BUT 
*             *CLOK185* WOULD RESTORE THE OLD VALUE WHEN IT 
*             WOULD NEXT BE EXECUTED. 
*         2)  ALL EXITS FROM THIS LOOP (FROM THIS POINT ON) 
*             WHICH USED TO GO TO *CLOK120* TO PROCESS THE
*             NEXT TABLE ENTRY SHOULD NOW GO TO *CLOK185* SO
*             THAT THE R-REGISTER WILL BE PROPERLY RESTORED 
*             FOR A170 MACHINES.
  
  
*         BUILD *RA* FOR A170 MACHINES
  
          SRD    D.RSAV      SAVE CURRENT (R) 
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
          LRD    CM+1        (RA - NFL) / 100B
          LDD    CM+3        4000B+NFL/100B 
 .NOSV2   ELSE               (NOS VERSION 1)
          LRD    CM+C.CPRA-1   RA 
          LDD    RA 
 .NOSV2   ENDIF 
          STD    T2          T2 IS SET UP TO WORK WITH (R)
  
 CLOK160  BSS    0
          LDD    CM+C.CPFL   OBTAIN FIELD LENGTH
          ZJP    CLOK185     IF TOO LITTLE CM FIELD LENGTH
  
*         CHECK IF SHOULD UPDATE CPU TIME FOR THIS JOB
  
          LDD    T2          GET ABSOLUTE CM RA 
          SHN    6
          ADC    101B        ABSOLUTE ADDRESS OF RA+101B
          CRM    CKBUFF+10D,ON    READ CURRENT CPU CLOCK
  
          LDM    CLOKTAB+4,T1   FWA OF CP AREA
          ADN    6           READ WORD 6 OF EXCHANGE PACKAGE
          CRD    CM 
          LDD    CM          READ UPPER BYTE OF *MA*
          LPN    77B         MASK OFF UNUSED PORTION
          ADD    CM+1        PLUS LOWER BYTE
          NJN    CLOK180     -- IF NOT EXECUTING
  
* /---   BLOCK      CLOCKER    00 000   86/12/12  13.53 
  
*         INCREMENT CPU TIME CLOCK IN RA+101B 
  
 CLOK170  LDM    CKTICK      GET CLOCK TICK VALUE 
          RAM    CKBUFF+14
          SHN    -12         INCREMENT CPU TIME CLOCK 
          RAM    CKBUFF+13
          SHN    -12
          RAM    CKBUFF+12
  
*         UPDATE MILLISECOND CLOCK IN RA+77B
  
 CLOK180  BSS    0
          LDD    D.BPR       HIGHEST WAITING CPU PR (BATCH) 
          SHN    6           SHIFT UP (24/,18/BPR,18/CPR) 
          STM    CKBUFF+8 
          LDD    D.CPR       GET HIGHEST PRIORITY IN *W*
          STM    CKBUFF+9 
          LDM    CPUSON      SET CPU FLAG 
          STM    CKBUFF+5 
          LDD    T2 
          SHN    6           POSITION CM RA 
          ADN    77B         ABSOLUTE ADDRESS OF RA+77B 
          CWM    CKBUFF,TR   WRITE BACK WORDS 77-101B 
  
 CLOK185  BSS    0
          LRD    D.RSAV      RESTORE OLD (R)
          UJP    CLOK120
* 
 CLOK190  LDN    0           MARK JOB NO LONGER RUNNING 
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
          STM    CLOKTAB+2,T1  CLEAR EJT ORDINAL
 .NOSV2   ELSE               (NOS VERSION 1)
          STM    CLOKTAB+4,T1 
 .NOSV2   ENDIF 
          LDM    CLOKTAB+3,T1 
          LPN    1           CHECK IF MULTI-EXECUTOR DROP 
          ZJP    CLOK120
          LDN    1           FLAG EXECUTOR HAS DROPPED
          STM    MXDRPD 
          UJP    CLOK120
* 
* /---   BLOCK      FCP        00 000   86/12/12  13.49 
          TITLE  FCP - FIND HIGHEST PR CP IN *W* STATE. 
**        FCP - FIND HIGHEST JOB IN *W* STATUS. 
* 
*         ON EXIT, TWO DIRECT CELLS ARE SET TO THE HIGHEST
*         CPU PRIORITY FOR A JOB IN WAIT STATE, AS FOLLOWS';
* 
*         (D.CPR) = FOR ANY JOB 
*         (D.BPR) = FOR ANY NON-PLATO SUBSYSTEM JOB 
* 
  
 FCP      SUBR
  
          LDN    0           INITIALIZE CP PRIORITY 
          STD    D.CPR       CLEAR MAX CPU PR IN W STATE
          STD    D.BPR       CLEAR MAX NON-PLATO CPU PR ETC 
  
          LDM    NCPNT       INITIALIZE CP LOOP 
          STD    T1 
  
 FCP1     ZJN    FCPX        IF NO MORE CONTROL POINTS
  
*         READ *STSW* AND *JCIW* FROM CONTROL POINT AREA
  
          SHN    7           CP NUM * 200B = CP AREA ADDR 
          ADN    STSW 
          CRD    CM 
  
 .NOS750  IFGE   OSLEV,750D 
          ADK    CWQW-STSW   READ CPU PRIORITY
 .NOS750  ELSE
          ADN    JCIW-STSW
 .NOS750  ENDIF 
          CRD    D.T0        READ CPU PRIORITY
          LDD    CM+C.CPSTAT CHECK CPU ACTIVITY 
          SHN    -11B 
          SBN    4           CHECK FOR STATUS = *W* = 4 
          NJN    FCP2        NOT WAITING FOR CPU
          LDD    D.T0        ELSE LOAD CP PRIORITY
 .NOS750  IFGE   OSLEV,750D 
          SHN    -3 
          LPC    177B 
 .NOS750  ELSE
          LPC    177B 
 .NOS750  ENDIF 
          STD    D.T0        STORE ACTUAL CPU PRIORITY
  
          LDD    D.T2        READ SUB-SYSTEM IDENTIFIER 
          SBK    /SSD/PLSI   CHECK FOR OTHER PLATO JOBS 
          ZJN    FCP1.5      -- YES, IT IS A PLATO JOB
          LDD    D.T0        CPU PRIORITY 
          SBD    D.BPR       CURRENT MAX BATCH CPU PRIORITY 
          MJN    FCP2        -- NOT A NEW RECORD
          RAD    D.BPR       ELSE, ADD DIFF TO FORM NEW MAX 
  
 FCP1.5   BSS    0
          LDD    D.T0        CPU PRIORITY 
          SBD    D.CPR       MAX CPU PRIORITY 
          MJN    FCP2        -- NOT A NEW RECORD
          RAD    D.CPR       ELSE BUMP PRIORITY UP BY DIFF. 
  
 FCP2     SOD    T1          BUMP TO NEXT CONTROL POINT 
          UJN    FCP1        LOOP 
* 
* /---   BLOCK      PAUSE      00 000   89/06/01  15.44 
          TITLE  PAUSE - PAUSE FOR STORAGE MOVE.
**        PAUSE - PAUSE FOR STORAGE RELOCATION
* 
*         CHECK CPU ACTIVITY AND PAUSE / DROP AS NECESSARY
* 
*         IF NO CPU ACTIVITY BUT *DIS* ACTIVE,
*                CONTINUE PROCESSING
  
 PAUSE    SUBR
          LDD    CP 
          ADN    STSW 
          CRD    CM 
          LDD    CM+C.CPEF   CHECK ERROR FLAG 
          ZJN    PSE1        IF NO ERROR
          DROP.              DROP PP
* 
 PSE1     LDD    CM+C.CPSTAT CHECK CPU ACTIVITY 
          SHN    -11B 
  
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
  
          NJN    PSE2        IF SOME SORT OF ACTIVITY 
          LDD    CP          (A) = FWA OF CP AREA 
          ADK    JCIW        JOB CONTROL INFO WORD
          CRD    CM 
          LDD    CM+3 
          SHN    8           MOVE *DIS* FLAG TO SIGN
          MJN    PSE2        DIS UP, CHECK FOR STORAGE MOVE 
          DROP.              DROP PP
* 
 PSE2     BSS    0
          LDK    CMCL        CPUMTR STORAGE MOVE INFO 
          CRD    CM 
          LDD    CP          FWA OF MASTOR CP 
 .NOS27   IFGE   OSLEV,716D  NOS 2.7.1
          SHN    -7 
 .NOS27   ENDIF 
          LMD    CM          CP ABOUT TO BE MOVED 
          NJN    PSE4        NOT WAITING FOR US, EXIT 
          RJM    PSM         ELSE PAUSE FOR STORAGE MOVE
  
 PSE4     UJP    PAUSEX 
* 
* /---   BLOCK      PAUSE      00 000   89/06/01  15.44 
  
 .NOSV2   ELSE               (NOS VERSION 1)
  
          NJN    PSE3        IF ACTIVITY
  
*         CHECK FOR DIS ACTIVE
  
          LDN    PPUL 
          CRD    CM 
          LDD    CM+2        SAVE NUMBER OF PPS ON SYSTEM 
          SBN    11D
          PJN    PSE1.1      IF MORE THAN 10 PPS
          LDN    10D         SET 10 PPS 
          UJN    PSE1.2 
* 
 PSE1.1   LDN    20D
 PSE1.2   STD    T1 
          LDN    PPCP        GET ADDRESS OF PP COMMUNICATION
          CRD    CM 
          LDD    CM+4 
          STD    T2 
  
 PSE2     CRD    CM          READ NEXT INPUT REGISTER 
          LDD    CM 
          LMC    2RDI 
          NJN    PSE6        IF NOT *DIS* 
          LDD    CP 
          SHN    -7 
          LMC    1RS*100B 
          LMD    CM+1 
          SCN    40B
          NJN    PSE6        IF NOT *DIS* AT THIS CP
  
*         CHECK FOR STORAGE MOVE
  
 PSE3     LDN    CMCL 
          CRD    CM 
          LDD    CP 
 .NOS27   IFGE   OSLEV,716D  NOS 2.7.1
          SHN    -7 
 .NOS27   ENDIF 
          LMD    CM 
          NJN    PSE4        IF NOT THIS CP 
          RJM    PSM         PAUSE FOR STORAGE MOVE 
  
 PSE4     LJM    PAUSEX 
  
 PSE6     SOD    T1 
          NJN    PSE7        IF MORE PPS TO CHECK 
          DROP.              DROP PP
  
 PSE7     LDN    10B         BUMP TO NEXT INPUT REGISTER
          RAD    T2 
          LJM    PSE2        LOOP 
* 
 .NOSV2   ENDIF 
* 
* /---   BLOCK      PSM        00 000   87/06/12  12.37 
 PSM      TITLE  PSM - PAUSE FOR STORAGE MOVE.
**        PSM - PAUSE FOR STORAGE MOVE. 
* 
*         DROP DDP IF RESERVED
*         DO STORAGE MOVE 
*         RESERVE DDP AGAIN IF NEEDED 
* 
  
 PSM      SUBR
          LDM    RDDP        IS DDP RESERVED
          ZJN    PSM100 
  
*         DDP IS RESERVED, SO RELEASE IT BUT RETAIN FLAG
  
          LDN    ZERL 
          CRD    CM 
          LDM    /C=DDP/C=DDP 
          STD    CM+1 
          MONITOR DCHM
  
 PSM100   CALL   PSM1 
  
          LDM    RDDP        WAS DDP RESERVED 
          ZJN    PSMX 
  
*         DDP WAS RESERVED, SO RESERVE AGAIN
  
          LDN    0
          STM    RDDP 
          CALL   RSVDDP 
          UJN    PSMX 
* 
 PSM1     SPACE  5,11 
**        PSM1 - PAUSE FOR STORAGE MOVE 
* 
*         ISSUE MONITOR FUNCTION TO PAUSE 
  
 PSM1     SUBR
          PAUSE  ST 
          UJN    PSM1X
* 
* /---   BLOCK      LOADPPW    00 000   84/11/30  08.19 
 LOADPPW  TITLE  LOADPPW - LOAD PP COMM. WORD ADDR
**        LOADPPW - LOAD PP COMMUNICATIONS WORD ADDRESS 
* 
*         LOAD THE ABSOLUTE ADDRESS OF THE CM WORD USED FOR 
*         PP COMMUNICATIONS.
* 
*         ENTRY  NONE.
* 
*         EXIT   A = ABSOLUTE ADDRESS OF COMMUNICATIONS WORD
  
 LOADPPW  SUBR
          LDD    D.PPWD      UPPER PART OF RELATIVE ADDRESS 
          SHN    12          POSITION UPPER PART OF ADDRESS 
          ADD    D.PPWD+1    ATTACH LOWER PART
          CALL   ABS         CONVERT TO ABSOLUTE
          ZJP    MRQERR1     IF ADDRESS OUT OF RANGE
          UJN    LOADPPWX 
* 
* /---   BLOCK      MESSAG     00 000   84/11/30  08.19 
 MESSAG   TITLE  MESSAG - OUTPUT MESSAGE TO *B*-DISPLAY 
**        MESSAG - OUTPUT MESSAGE TO *B*-DISPLAY. 
* 
*         ON ENTRY  -  A = ADDRESS OF MESSAGE 
* 
*         DESTROYS NO VARIABLES 
* 
  
 MESSAG   SUBR
          STM    MSGA        PLANT PPU ADDR OF MESSAGE
          LDD    D.T0 
          STM    MSG20       PRESERVE *D.T0*
          LDN    5
          STD    D.T0        SET LENGTH OF MESSAGE
          LDD    CP          LOAD CONTROL POINT AREA ADDRESS
          ADK    MS1W        ADD BIAS TO MESSAGE AREA 
          CWM    **,D.T0     WRITE MESSAGE TO CP AREA 
 MSGA     EQU    *-1         PLANTED PP MEM ADDR
          LDM    MSG20
          STD    D.T0        RESTORE *D.T0* 
          UJN    MESSAGX
* 
 MSG20    BSS    1
* 
* /---   BLOCK      VJOBN      00 000   82/11/12  12.21 
          TITLE  VJOBN - VERIFY JOB NAME.  (NOS VERSION 1)
 .NOSV2   IFLT   OSLEV,562D  (NOS VERSION 1)
  
**        VJOBN - VERIFY JOB NAME.
* 
*         VERIFY JOB IS STILL AT CONTROL POINT
* 
*         ENTRY - (A) = ADDRESS OF JOB NAME 
*                 (CPN) = CONTROL POINT TO CHECK
* 
*         EXIT  - (A) = 0 IF JOB NAME NAME MATCHES
  
  
 VJOBN    SUBR
          STD    T1 
          LDM    CPN
          SHN    7
          ADN    JNMW 
          CRD    CM          READ JOB NAME
          LDI    T1 
          LMD    CM 
          NJN    VJOBNX      IF MISMATCH
          LDM    1,T1 
          LMD    CM+1 
          NJN    VJOBNX      IF MISMATCH
          LDM    2,T1 
          LMD    CM+2 
          NJN    VJOBNX      IF MISMATCH
          LDM    3,T1 
          LMD    CM+3 
          SCN    77B
          UJN    VJOBNX 
  
 .NOSV2   ENDIF 
* /---   BLOCK      READEJT    00 000   82/11/18  09.21 
          TITLE  READEJT - READ EXECUTING JOB TABLE.
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
**        READEJT - READ PARTIAL ENTRY FROM EJT.
* 
*         ENTRY  (A) = EJT ORDINAL. 
* 
*         EXIT   (CM - CM+4) = FIRST WORD OF EJT ENTRY, 
*                (CN - CN+4) = SECOND WORD, 
*                (T3 - T7)   = THIRD WORD,
*                (A) = ABS CM ADDR OF THIRD WORD. 
* 
*         USES   - T0 (IF *EJTE* IS ODD), CM - CM+4,
*                  CN - CN+4, T3 - T7.
* 
*         MACROS - SFA (WHICH CALLS .CEA FROM COMPGFP). 
* 
 READEJT  SUBR
          SFA    EJT         COMPUTE CM ADDR FROM EJT ORD.
          CRD    CM          READ FIRST WORD
          ADN    1
          CRD    CN          READ SECOND WORD 
          ADN    1
          CRD    T3          READ THIRD WORD
          UJP    READEJTX    RETURN 
* 
*         DEFINITIONS OF FIELDS WITHIN EJT
* 
  
 EJT.JSN  EQU    CM          JOB SEQUENCE NUMBER (2 BYTES)
 EJT.ST   EQU    CM+4        JOB STATUS BYTE
  
 EJT.XCP  EQU    CN+3        CONTROL POINT (IFF EXECUTING)
 EJT.XPR  EQU    CN+4        PRIORITY (IFF EXECUTING) 
  
 EJT.EF   EQU    T3+1        ERROR FLAGS
  
* 
* *       GLOBAL FNT PROCESSORS FOR USE WITH *SFA* MACRO. 
* 
 QFT$     EQU    1           ASSEMBLE .CQA SUBROUTINE 
 EJT$     EQU    1           ASSEMBLE .CEA SUBROUTINE 
 IFP$     EQU    1           REMOTE INITIALIZATION SUBR.
*CALL     COMPGFP 
* 
 .NOSV2   ENDIF 
* /---   BLOCK      SWITCH     00 000   82/11/18  09.22 
          TITLE  SWITCH - CHANGE CONTROL POINT ASSIGNMENT.
**        SWITCH - CHANGE CONTROL POINT ASSIGNMENT. 
* 
*         SWITCH TO SPECFIED CONTROL POINT
* 
*         ON ENTRY - D.T0 = CONTROL POINT NUMBER
* 
*         ON EXIT  - CPN  = CONTROL POINT NUMBER
*                           0 IF ERROR OCCURRED 
* 
* 
  
 SWT90    LDN    0           OPERATION FAILED.
          STM    CPN
  
 SWITCH   SUBR
          LDD    D.T0        LOAD SPECIFIED C.P. NUMBER 
          ZJP    SWT90
          SBM    NCPNT
          SBN    1           CHECK CONTROL POINT LEGAL
          PJP    SWT90
          LDD    D.T0 
          SHN    7           COMPUTE ADDRESS OF JOB NAME
  
 .NOSV2   IFGE   OSLEV,562D  (NOS VERSION 2)
          ADK    TFSW        READ EJT ORDINAL 
 .NOSV2   ELSE               (NOS VERSION 1)
          ADK    JNMW        READ JOB NAME
 .NOSV2   ENDIF 
  
          CRD    CM 
          LDD    CM 
          ZJP    SWT90       EXIT IF NO JOB RUNNING 
          LDN    ZERL        ADDRESS OF ZERO CM WORD
          CRD    CM          PRE-CLEAR ARGUMENT AREA
          LDD    D.T0 
          STM    CPN         SET NEW CONTROL POINT NUMBER 
          ADD    TH          SET REJECT-ON-MOVE-PENDING BIT 
          STD    CM+1 
          MONITOR CCAM
          LDD    CM+1        CHECK IF CHANGE SUCCESSFULL
          NJP    SWT90
          LDM    CPN         CHECK IF SWITCH TO *MASTOR*
          SBD    D.CPN
          NJN    SCP1 
          CALL   PSM
  
 SCP1     LJM    SWITCHX
* 
* /---   BLOCK      RSVDDP     00 000   87/02/17  12.37 
 RSVDDP   TITLE  DDP PORT/CHANNEL RESERVATIONS
**        RSVDDP - RESERVE DDP PORT/CHANNEL.
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/RSVDDP  IF THE DDP IS NOT AVAILABLE ON A 
*         170/800 MACHINE.
* 
  
 RSVDDP   SUBR
          LDM    RDDP        CHECK IF DDP RESERVED
          NJN    RSVDDPX
  
 RVD110   CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          LDN    ZERL 
          CRD    CM 
 .NOS252  IFGE   OSLEV,678D 
          LDM    DDP1 
 .NOS252  ELSE
          LDM    /C=DDP/C=DDP 
 .NOS252  ENDIF 
          STD    CM+1        SET CHANNEL NUMBER 
          MONITOR CCHM       CHECK IF CHANNEL RESERVED
          LDD    CM+2 
          NJN    RVD114      IF CHANNEL ASSIGNED
 .NOS252  IFGE   OSLEV,678D 
          LDM    DDP2 
          ZJN    RVD113      IF NO SECONDARY ACCESS 
          STD    CM+1        SET CHANNEL NUMBER 
          MONITOR CCHM       CHECK IF CHANNEL RESERVED
          LDD    CM+2 
          NJN    RVD114      IF CHANNEL ASSIGNED
 .NOS252  ENDIF 
 RVD113   CALL   PSM1 
          UJN    RVD110      TRY AGAIN
* 
 RVD114   AOM    RDDP        MARK DDP RESERVED
 .NOS252  IFGE   OSLEV,678D 
          LDD    CM+1        LOAD CHANNEL ASSIGNED
          PLANT  CHANNEL,C=DDP
 .NOS252  ENDIF 
  
 RVD120   IJM    RVD122,C=DDP 
          DCN    C=DDP,40B   INSURE CHANNEL INACTIVE
  
 RVD122   FNC    5010B,C=DDP        MASTER-CLEAR PORT 
          WAIT   INACTIVE,C=DDP,RVD140
          LDD    EC 
          ZJN    RVD130      IF ECS MODE
          FNC    5404B,C=DDP SELECT ESM MODE
  
 RVD130   LJM    RSVDDPX
  
*         PROCESS DDP CHANNEL MALFUNCTION.
  
 RVD140   LDN    0           CLEAR JOB TABLE FLAG 
          STM    RJTAB
          CALL   RELDDP      RELEASE DDP CHANNEL
          CALL   DFM,(=C/"PPU.MRQ"  DDP FUNCTION REJECT./)
          DROP.              DROP PP
* 
 RVDL     EQU    *-RSVDDPX   LENGTH OF ROUTINE -RSVDDP- 
* 
* /---   BLOCK      RELDDP     00 000   84/11/30  08.22 
 RELDDP   SPACE  4,10 
**        RELDDP - RELEASE DDP PORT/CHANNEL.
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/RELDDP  IF THE DDP IS NOT AVAILABLE ON A 
*         170/800 MACHINE.
* 
  
 RELDDP   SUBR
          LDM    RDDP        CHECK IF DDP RESERVED
          ZJN    RELDDPX
          LDN    ZERL        PRE-CLEAR ARGUMENTS
          CRD    CM 
          LDM    /C=DDP/C=DDP 
          STD    CM+1        SET CHANNEL NUMBER 
          MONITOR DCHM       RELEASE CHANNEL
          LDN    0
          STM    RDDP        MARK DDP NO LONGER RESERVED
          UJN    RELDDPX
  
 RLDL     EQU    *-RELDDPX   LENGTH OF ROUTINE -RELDDP- 
* 
* 
* /---   BLOCK      RSVTAB     00 000   84/11/30  08.23 
 RSVTAB   TITLE  RESERVE/RELEASE *JOBTAB* VIA DDP.
**        RSVTAB - RESERVE *JOBTAB* TABLE.
* 
*         RESERVE *JOBTAB* TABLE VIA ECS FLAG REGISTER
*         (MAY RESERVE DDP PORT)
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/RSVTAB  IF THE DDP IS NOT AVAILABLE ON A 
*         170/800 MACHINE.
* 
  
 RSVTAB   SUBR
          LDM    RJTAB       CHECK IF TABLE RESERVED
          NJN    RSVTABX
* 
 RVT10    CALL   RSVDDP      RESERVE DDP PORT 
          LDC    1000        INITIALIZE COUNTER 
          STM    RSVWK
* 
 RVT20    LDC    4020B       SET DDP FUNCTION AND BIT 
          STD    D.T0 
          CALL   FLAG        FUNCTION ECS FLAG REGISTER 
          NJP    RVT30
          LDN    1           MARK TABLE RESERVED
          STM    RJTAB
          UJN    RSVTABX
* 
 RVT30    CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          DELAY  1000        IDLE 
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          SOM    RSVWK
          PJP    RVT20       CHECK FOR INTERLOCK PROBLEM
          CALL   RELDDP      RELEASE DDP PORT 
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          DELAY  1000        IDLE 
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          DELAY  1000        IDLE 
          CALL   CLOCKER     UPDATE MILLISECOND CLOCK 
          CALL   MESSAG,(=19C"PPU.MRQ"  FLAG INTERLOCK) 
          CALL   PAUSE       CHECK FOR ERROR / STORAGE MOVE 
          UJP    RVT10       CONTINUE WAITING 
  
 RSVL     EQU    *-RSVTABX   LENGTH OF ROUTINE -RSVTAB- 
* 
* /---   BLOCK      RELTAB     00 000   84/11/30  08.23 
 RELTAB   EJECT 
**        RELTAB - RELEASE *JOBTAB* TABLE RESERVATION.
* 
*         RELEASE *JOBTAB* TABLE VIA ECS FLAG REGISTER
*         (MAY RESERVE DDP PORT)
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/RELTAB  IF THE DDP IS NOT AVAILABLE ON A 
*         170/800 MACHINE.
* 
* 
 RELTAB   SUBR
          LDM    RJTAB       CHECK IF *JOBTAB* RESERVED 
          ZJN    RELTABX
          CALL   RSVDDP      RESERVE DDP PORT 
          LDC    7020B       SET DDP FUNCTION AND BIT 
          STD    D.T0 
          CALL   FLAG        FUNCTION ECS FLAG REGISTER 
          ZJP    REL1        IF FUNCTION ACCEPTED 
          CALL   DFM,(=C/"PPU.MRQ"  ADDRESS PE ON FLAG FUNCTION/) 
          LDN    ZERL 
          CRD    CM 
          LDN    OKET 
          STD    CM+1 
          MONITOR CEFM
          MONITOR DPPM
          UJP    PPR
* 
 REL1     LDN    0
          STM    RJTAB       MARK *JOBTAB* RELEASED 
          LJM    RELTABX
* 
* 
 RSVWK    BSS    14B         PADDING FOR ROUTINES IN INIT1/2
  
 RELL     EQU    *-RELTABX   LENGTH OF ROUTINE -RELTAB- 
* 
* 
* /---   BLOCK      READECS    00 000   82/11/17  13.43 
 READECS  TITLE  READECS - ECS TO PPU TRANSFER VIA DDP. 
**        READECS - ECS TO PPU TRANSFER VIA DDP.
* 
*         ON ENTRY  -  D.T0 = PPU MEMORY ADDRESS
*                      D.T1 = UPPER PORTION OF ECS ADDRESS
*                      D.T2 = LOWER PORTION OF ECS ADDRESS
*                      D.T3 = NUMBER OF PPU WORDS TO READ 
* 
*         ON RETURN - A = 0 = READ COMPLETED
*                         1 = ECS PARITY ERROR
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/READECS  IF THE DDP IS NOT AVAILABLE ON A
*         170/800 MACHINE.
* 
* 
 READECS  SUBR
          IJM    RCS10,C=DDP
          DCN    C=DDP,40B
* 
 RCS10    FNC    5001B,C=DDP      5001B = READ ECS
          WAIT   INACTIVE,C=DDP,RCS82 
          ACN    C=DDP,40B
          FJM    RCS82,C=DDP
          LDN    2
          OAM    D.T1,C=DDP  OUTPUT 2 WORD ECS ADDRESS
          LDD    D.T0 
          STM    RCS15+1     PLANT PPU MEMORY ADDRESS 
          WAIT   FULL,C=DDP,RCS82 
* 
          LDM    D.T3        NUMBER OF WORDS TO READ
 RCS15    IAM    **,C=DDP    READ ECS TO PPU MEMORY 
          NJP    RCS80       EXIT IF ERROR
* 
 RCS20    IJM    RCS80,C=DDP   WAIT CHANNEL ACTIVE + FULL 
          EJM    RCS20,C=DDP
          DCN    C=DDP,40B   DISCONNECT CHANNEL 
          LDN    0           MARK NO ERROR OCCURRED 
 RCS30    LJM    READECSX 
* 
 RCS80    CALL   DFM,(=C/"PPU.MRQ"  ECS PARITY ERROR/)
          UJP    RCS90
* 
 RCS82    CALL   DFM,(=C/"PPU.MRQ"  DDP CHANNEL ERROR/) 
          UJP    RCS90
* 
 RCS90    CALL   DDPMCP      MASTER CLEAR DDP PORT
          LDN    1           MARK ERROR OCCURRED
          UJN    RCS30
          BSSZ   116B        FILLER FOR OTHER -READECS- CODE
  
 RCSL     EQU    *-READECSX  LENGTH OF ROUTINE -READECS-
* 
* /---   BLOCK      WRITECS    00 000   82/11/17  13.43 
 WRITECS  TITLE  WRITECS - PPU TO ECS TRANSFER VIA DDP. 
**        WRITECS - PPU TO ECS TRANSFER VIA DDP.
* 
*         ON ENTRY  -  D.T0 = PPU MEMORY ADDRESS
*                      D.T1 = UPPER PORTION OF ECS ADDRESS
*                      D.T2 = LOWER PORTION OF ECS ADDRESS
*                      D.T3 = NUMBER OF PPU WORDS TO WRITE
* 
*         ON RETURN - A = 0 = WRITE COMPLETED 
*                         1 = ECS ABORT 
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/WRITECS  IF THE DDP IS NOT AVAILABLE ON A
*         170/800 MACHINE.
* 
* 
 WRITECS  SUBR
  
*         TRAP ANY ATTEMPT TO DESTROY THE ECS LABEL BY
*         WRITING TO ADDRESS 0. 
  
          LDN    D.T1        (A) = TOP 12 BITS OF ADDRESS 
          ADN    D.T2        ADD BOTTOM 12 BITS OF ADDRESS
          NJN    WEM1        IF ADDRESS NON-ZERO
          MONITOR MXFM
  
 WEM1     LDD    D.T3 
          NJN    WEM2        IF NON-ZERO LENGTH 
          MONITOR MXFM
  
 WEM2     IJM    WCS10,C=DDP
          DCN    C=DDP,40B
* 
 WCS10    FNC    5002B,C=DDP      5002B = WRITE ECS 
          WAIT   INACTIVE,C=DDP,WCS92 
          ACN    C=DDP,40B
          LDN    2
          OAM    D.T1,C=DDP  OUTPUT 2 WORD ECS ADDRESS
          LDD    D.T0 
          STM    WCS15+1     PLANT PPU MEMORY ADDRESS 
* 
          LDM    D.T3        NUMBER OF WORDS TO WRITE 
 WCS15    OAM    **,C=DDP    WRITE PPU MEMORY TO ECS
          NJP    WCS90       EXIT IF ERROR
          DCN    C=DDP,40B
* 
 WCS30    FNC    5004B,C=DDP      5004B = SELECT STATUS 
          WAIT   INACTIVE,C=DDP,WCS90 
          ACN    C=DDP,40B   RE-ACTIVATE DDP CHANNEL
          WAIT   FULL,C=DDP,WCS90 
          IAN    C=DDP,40B   INPUT STATUS WORD
          DCN    C=DDP,40B
          LPN    11B         MASK WRITE/ABORT BITS
          NJP    WCS50       JUMP IF ERROR OR INCOMPLETE
          IJM    WCS40,C=DDP     EXIT (A=0) 
          DCN    C=DDP,40B
 WCS40    LJM    WRITECSX    EXIT (A=0) 
* 
 WCS50    LPN    10B
          NJP    WCS30       LOOP IF WRITE NOT COMPLETE 
* 
 WCS90    CALL   DFM,(=C/"PPU.MRQ"  ECS ABORT/) 
          UJP    WCS99
* 
 WCS92    CALL   DFM,(=C/"PPU.MRQ"  DDP CHANNEL ERROR/) 
* 
 WCS99    CALL   DDPMCP      MASTER CLEAR DDP PORT
          LDN    1           MARK ERROR OCCURRED
          UJN    WCS40
  
          BSSZ   36B         FILLER FOR OTHER -WRITECS- CODE
  
 WCSL     EQU    *-WRITECSX  LENGTH OF ROUTINE -WRITECS-
* 
* /---   BLOCK      FLAG       00 000   84/11/30  08.24 
 FLAG     TITLE  FLAG - ECS FLAG REG OPERATIONS VIA DDP.
**        FLAG - ECS FLAG REGISTER OPERATIONS VIA DDP.
* 
*         ON ENTRY  -  D.T0 = FLAG REG FUNCTION / BIT 
* 
*         ON RETURN - A = 0 = ACCEPT
*                         1 = REJECT
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/FLAG  IF THE DDP IS NOT AVAILABLE ON A 
*         170/800 MACHINE.
* 
* 
 FLAG     SUBR
          LDD    D.T0        LOAD FUNCTION / BIT
          LPC    3777B
          ADC    4000B       INSURE FLAG REGISTER BIT SET 
          STD    D.T0 
          LDN    0
          STD    D.T1        CLEAR 2ND WORD OF ADDRESS
          STD    D.T2        NO ERROR SO FAR
* 
 FLG10    IJM    FLG15,C=DDP
          DCN    C=DDP,40B
* 
 FLG15    FNC    5001B,C=DDP FUNCTION FLAG REGISTER (ECS) 
*         FNC    5040B,C=DDP FUNCTION FLAG REGISTER (ESM) 
          WAIT   INACTIVE,C=DDP,FLG82 
          ACN    C=DDP,40B
          FJM    FLG82,C=DDP
          LDN    2
          OAM    D.T0,C=DDP  OUTPUT 2 WORD ECS ADDRESS
          WAIT   EMPTY,C=DDP,FLG82
          DCN    C=DDP,40B   DISCONNECT CHANNEL 
* 
          FNC    5004B,C=DDP      5004B = SELECT STATUS 
          WAIT   INACTIVE,C=DDP,FLG82 
          ACN    C=DDP,40B   RE-ACTIVATE DDP CHANNEL
          IAN    C=DDP,40B   INPUT STATUS WORD
          DCN    C=DDP,40B
          LPN    1B          A = ABORT BIT (0/1)
          STD    D.T2 
          CALL   DDPMCP      MASTER CLEAR DDP PORT
          LDD    D.T2 
          LJM    FLAGX
* 
 FLG82    LDD    D.T2        IF FIRST TIME, WRITE MESSAGE 
          NJP    FLG84
          CALL   DFM,(=C/"PPU.MRQ"  DDP CHANNEL ERROR/) 
          LDN    1           MARK ERROR OCCURRED
          STD    D.T2 
* 
 FLG84    CALL   DDPMCP      MASTER CLEAR DDP PORT
          UJP    FLG10       TRY AGAIN
  
          BSSZ   14 
 FLGL     EQU    *-FLAGX     LENGTH OF ROUTINE -FLAG- 
* 
* /---   BLOCK      DDPMCP     00 000   84/11/30  08.24 
DDPMCP    TITLE  DDPMCP - MASTER CLEAR DDP PORT.
**        DDPMCP - MASTER CLEAR DDP PORT. 
* 
*         THIS SUBROUTINE WILL BE OVERWRITTEN BY
*         /DDPCM/DDPMCP  IF THE DDP IS NOT AVAILABLE ON A 
*         170/800 MACHINE.
* 
 DDPMCP   SUBR
          IJM    DMC20,C=DDP
          DCN    C=DDP,40B   INSURE CHANNEL INACTIVE
* 
 DMC20    FNC    5010B,C=DDP      5010B = MASTER CLEAR PORT 
          WAIT   EMPTY,C=DDP
          WAIT   INACTIVE,C=DDP 
* 
          IJM    DMC40,C=DDP      CHECK IF CHANNEL INACTIVE 
          DCN    C=DDP,40B   DISCONNECT DDP CHANNEL 
 DMC40    LDD    EC 
          ZJN    DDPMCPX     IF ECS MODE
          FNC    5404B,C=DDP SELECT ESM MODE
          UJN    DDPMCPX
  
 DMCL     EQU    *-DDPMCPX    LENGTH OF ROUTINE -DDPMCP-
* 
* /---   BLOCK      EXDROP     00 000   82/11/17  09.04 
          TITLE  EXDROP - INFORM MASTOR OF EXECUTOR DROP. 
**        EXDROP - INFORM MASTOR OF EXECUTOR DROP.
* 
  
 EXDROP   SUBR
          LDM    MXDRPD      CHECK IF DROP DETECTED 
          ZJN    EXDROPX
          LDN    0           CLEAR DROP DETECTED FLAG 
          STM    MXDRPD 
          EXEC   CSCAN       UPDATE *CLOKTAB* 
          EXEC   JSCAN       UPDATE *JOBTAB*
          CALL   RSVDDP      RESERVE DDP PORT 
          LDN    ZERL 
          CRM    BUFF,ON     PRE-CLEAR
          LDN    1
          STM    BUFF+4      FORM EXECUTOR DROP FLAG
          LDC    BUFF 
          STD    D.T0        D.T0 = PPU MEMORY ADDRESS
          LDM    MRAX+1      LOWER PART OF ECS RA 
          ADC    MS.EDRF
          STD    D.T2        D.T2 = LOWER PART OF ECS ADDR
          SHN    -12
          ADM    MRAX        UPPER PART OF ECS RA 
          STD    D.T1        D.T1 = UPPER PART OF ECS ADDR
          LDN    5
          STD    D.T3        D.T3 = NUM PPU WORDS TO WRITE
          CALL   WRITECS     WRITE EXECUTOR DROP FLAG 
          CALL   RELDDP      RELEASE DDP PORT 
          LJM    EXDROPX
* 
* /---   BLOCK      COMDECKS   00 000   84/11/30  08.26 
          TITLE  COMMON DECKS 
* 
* *       CALL SUBROUTINE COMMON DECKS (QUAL$)
* 
          BASE   M
 AQA$     SET    1           ASSEMBLE *ADD QFNT ADDRESS*
*CALL     COMPQFP 
          BASE   *
*CALL     PLAPABS 
*CALL     PLAPDNM 
*CALL     PLAPEQN 
*CALL     PLAPEXO 
*CALL     PLAPPLN 
  
* /---   BLOCK      STORAGE    00 000   87/06/12  12.03 
          TITLE  STORAGE DEFINITIONS (MAIN OVERLAY) 
* 
* *       STORAGE -- TABLES, BUFFERS, FLAGS, INDEXES, CELLS 
* 
  
* 
*         (C=DDP) = CHANNEL OF DDP. 
*                 = -1 IF NO DDP. 
* 
 C=DDP    TABLE  CHANNEL     DDP CHANNEL TABLE
  
 .NOS252  IFGE   OSLEV,678D 
 DDP1     BSSZ   1           PRIMARY DDP CHANNEL
 DDP2     BSSZ   1           SECONDARY DDP CHANNEL
 .NOS252  ENDIF 
* 
* 
 MASNAM   DIS    ,*MASTOR*   *MASTOR* JOB NAME
 MFN      DATA   0           MAIN-FRAME NUMBER
* 
 MASTAB   BSSZ   5*5         *MASTOR* POINTER TABLE 
 M.JTAB   EQU    MASTAB+21   POINTER TO JOB NAME TABLE
* 
 CLOKPNT  BSSZ   5           *CLOKTAB* POINTER
 M.CTAB   EQU    CLOKPNT+3   POINTER TO MSEC CLOCK TABLE
* 
  
*         THE FOLLOWING 15 WORDS ARE READ FROM CM AND 
*         MUST BE CONTIGUOUS. 
  
 CHKS     BSS    5           CHECKSUM OF PARAMETERS 
 ECSP     BSS    1           START OF ECS POINTERS
 MRAX     BSSZ   2           *MASTOR* RAX 
 MFLX     BSSZ   2           *MASTOR* FLX 
 PNW      BSS    5           PROGRAM NAME WORD
  
 NCPNT    BSS    1           NUMBER OF CONTROL POINTS 
 CPN      DATA   0           CONTROL POINT NUMBER FOR SWITCH
 MXDRPD   DATA   0           EXECUTOR DROP DETECTED FLAG
* 
 CKBUFF   DATA   0,0,0,0,0   BUFFER FOR MILLISECOND CLOCK 
          DATA   0,0,0,0,0   BUFFER FOR HIGHEST PRIORITY
          DATA   0,0,0,0,0   BUFFER FOR CPU CLOCK 
 CKLAST   BSSZ   6           PREVIOUS CLOCK VALUES
 CKTICK   DATA   0           CLOCK TICK VALUE 
 CKON     DATA   0           CLOCK ON/OFF FLAG
 CKADJF   DATA   0           CLOCK ADJUSTMENT FLAG
 CKADJ    DATA   0,0,0,0,0   BUFFER FOR CLOCK ADJUST VALUE
 CKCPU    BSSZ   10          CPU ASSIGNMENT BUFFER
 CPUSON   DATA   4000B       = 0 IF ONLY ONE CPU
* 
 INITC    DATA   0           1 IF INITIALIZATIONS COMPLETE
 RDDP     BSSZ   1           DDP RESERVED FLAG
 RJTAB    BSSZ   1           *JOBTAB* RESERVED FLAG 
* 
 REQUEST  BSSZ   3*5         *MASTOR* TO *MRQ* REQUEST WORDS
* 
 II       BSS    1
* 
 RII      DATA   0           REQUEST SCAN TIMER 
 JII      DATA   0           *JOBTAB* SCAN TIMER
* 
 CKLTH    EQU    MS.CKTN
 CLOKTAB  BSSZ   5*CKLTH     *CLOKTAB* TABLE IMAGE
* 
 CPJNAM   BSSZ   5*MS.NCP    JOB NAMES BY CONTROL POINT 
  
          USE    LITERALS    FORCE LITERAL BLOCK
  
 OVBUFF   OVBUFF "MRQ.OVX",760B     OVERLAY BUFFER
  
 BUFFLTH  EQU    1460B       BUFFER LENGTH
 BUFFWDS  EQU    BUFFLTH/5
 BUFF     EQU    *           START OF WORK BUFFER 
  
 .NOS518  IFLT   "MODLEVEL",518 
 DFBLTH   EQU    BUFFWDS-10  DAYFILE BUFFER LENGTH
 .NOS518  ENDIF 
  
          ERRNG  7764B-BUFF-BUFFLTH 
plato/source/plaopl/mrq.txt ยท Last modified: 2023/08/05 18:54 by Site Administrator