CPD 
          IDENT  CPD,CPD     COLLECT PERFORMANCE DATA 
          PERIPH
          BASE   MIXED
          SST    SSCP 
*COMMENT  CPD - COLLECT PERFORMANCE DATA. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  CPD - COLLECT PERFORMANCE DATA.
 CPD      SPACE  4,10 
***       CPD - COLLECT PERFORMANCE DATA. 
* 
*         S. L. KSANDER.     78/12/13.
*         R. M. DESSEL.      81/07/27.
*         J. L. LARSON.      83/04/11.
          SPACE  4,10 
***       CPD GENERATES A FILE FROM WHICH SYSTEM USAGE CAN BE 
*         DETERMINED.  COUNTS OF VARIOUS FORMS OF ACTIVITY ARE
*         MAINTAINED AND PERIODICALLY WRITTEN TO THIS FILE. 
          SPACE  4,10 
***       CALL. 
* 
* 
*T        18/ *CPD*,6/ CP,12/ SO,6/,18/ FET ADDR
* 
*T  FET   42/  FILE NAME,18/
*T  FET+1 42/ ,18/ FIRST
*T  FET+2 42/ ,18/ IN 
*T  FET+3 42/ ,18/ OUT
*T  FET+4 12/ FO,30/,18/ LIMIT
*T  FET+5 12/ ,12/ FW,12/ SL,12/ ML,12/ FL
*T, FET+8 42/  PF NAME,12/,6/ MODE
* 
* 
*         SO - ORDINAL OF RESERVED SYSTEM FNT ENTRY.
*         FO - RELATIVE SAMPLE FILE ADDRESS IN NFL. 
*         FW - FILE WRITE TIME IN SECONDS.
*         SL - SLOW LOOP TIME IN MILLISECONDS.
*         ML - MEDIUM LOOP TIME IN MILLISECONDS.
*         FL - FAST LOOP TIME IN MILLISECONDS.
* 
*         IF A LOOP TIME IS SET TO ZERO, NO SAMPLES FOR THAT
*         LOOP WILL BE TAKEN. 
          SPACE  4,10 
***       *CPD* TERMINATION.
* 
*         TO TERMINATE *CPD*, THE *CPD* DROP FLAG MUST BE SET.
*         REFER TO *SFM* DOCUMENTATION FOR FURTHER INFORMATION
*         CONCERNING THIS.
          SPACE  4,10 
***       DATA FILE FORMAT. 
* 
*         RECORD 1 = HEADER DATA. 
*                THIS RECORD CONTAINS STATIC INFORMATION REGARDING
*                THE SYSTEM CONFIGURATION AVAILABLE.  THIS RECORD 
*                CONTAINS A FIXED DATA BLOCK, A MASS STORAGE BLOCK, 
*                A JOB CONTROL DATA  BLOCK, AND AN EST DATA BLOCK.
*                THE SPECIFIC FORMAT OF THIS RECORD IS DESCRIBED
*                IN *COMSCPD*.
* 
*         RECORD 2 - N = DATA RECORDS.
*                THESE RECORDS CONTAIN THE ACCUMULATED DATA FOR 
*                EACH FILE WRITE INTERVAL.  EACH RECORD CONTAINS
*                A FIXED BASE BLOCK AND A MASS STORAGE DATA BLOCK.
*                THE SPECIFIC FORMAT OF THIS RECORD IS DESCRIBED
*                IN *COMSCPD*.
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
* 
*         * CPD - FILE NOT FOUND.*
*                THE SPECIFIED DATA FILE WAS NOT FOUND. 
* 
*         * CPD - ALREADY ACTIVE.*
*                *CPD* IS ALREADY RUNNING IN THE SYSTEM.
* 
*         * CPD - FILE STATUS ERROR.* 
*                ONE OF THE FOLLOWING CONDITIONS EXISTED REGARDING
*                THE SPECIFIED DATA FILE. 
*                1. UNABLE TO FIND FAST ATTACH FILE CALLED SAMPLE ON
*                   CALLERS FAMILY. 
*                2. UNABLE TO ATTACH FAST ATTACH FILE IN REQUESTED
*                   MODE. 
* 
*         * CPD - USER ACCESS NOT VALID.* 
*                CALLING PROGRAM DOES NOT HAVE SYSTEM ORIGIN
*                PRIVILEGES.
* 
*         * CPD - OVERLAY NOT IN RPL.*
*                *CPD* OVERLAY *3CR* OR *3CS* WAS NOT IN THE RPL. 
* 
*         * CPD - PARAMETER ERROR.* 
*                THE SPECIFIED PARAMETER ADDRESS IS INCORRECT.
* 
*         * CPD - INITIATED.* 
*                *CPD* MAIN LOOP INITIATED. 
* 
*         * CPD - TERMINATED.*
*                *CPD* MAIN LOOP TERMINATED.
          TITLE  DIRECT CELL DEFINITIONS. 
*         DIRECT LOCATION ASSIGNMENTS.
  
  
 T8       EQU    16          TEMPORARY STORAGE (USED BY MACROS) 
 T9       EQU    17          TEMPORARY STORAGE (USED BY MACROS) 
 FS       EQU    20 - 24     FST ENTRY
 VB       EQU    25          FWA VARIABLE DATA BUFFER 
 LE       EQU    26          LAST ORDINAL + 1 OF DEFINED EST ENTRIES
 ME       EQU    27          NUMBER OF MASS STORAGE ENTRIES 
 NP       EQU    30          NUMBER OF PPUS 
 NC       EQU    31          NUMBER OF CONTROL POINTS 
 SC       EQU    32          CURRENT TIME IN SECONDS
 MS       EQU    33          CURRENT TIME IN MILLISECONDS 
 LI       EQU    34          OPERATION LOOP INDEX 
 LO       EQU    35          LOOP OPERATION ADDRESS 
 BA       EQU    36          BUFFER POINTER 
 PC       EQU    37          PPU COMMUNICATION AREA ADDRESS 
 CN       EQU    40 - 44     WORKING STORAGE
 TA       EQU    40          IAF RA/100B (FOR ROUTINE *AIA* ONLY) 
 WC       EQU    45          BUFFER WORD COUNT
 NM       EQU    46          NUMBER OF MCT ENTRIES - 1
 EC       EQU    47          PROCESSOR CONNECT CODE 
 FO       EQU    57          FNT ORDINAL FOR *SAMPLE* FILE
 AB       EQU    60 - 64     WORKING STORAGE
 RC       EQU    65          RECORD COUNT IN BUFFER 
 RX       EQU    66          MAXIMUM RECORDS IN BUFFER
 RN       EQU    HN          P REGISTER MAINTENANCE REGISTER NUMBER 
          TITLE  MACRO DEFINITIONS. 
*         MACRO DEFINITIONS.
 ADO      SPACE  4,15 
**        ADO - ADD ONE.
* 
*         ADO    M,D
* 
*         ENTRY  *M* = BUFFER OFFSET TO BE INCREMENTED. 
*                *D* = INDEX OFFSET.
*                (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
* 
*         USES   T8.
* 
*         REQUIRES BUFFER OFFSET TO BE DEFINED VIA *MPAR* MACRO 
*         IN ORDER TO SET FIELD PRECISION.
  
  
          PURGMAC ADO 
  
 ADO      MACRO  M,D
          MACREF ADO
 .1       SET    P.M-1
 .2       IFC    NE,$D$$
          LDD    D
          IFNE   .1,0,1 
          SHN    .1 
          ADD    BA 
          STD    T8 
          AOM    M+.1,T8
          DUP    .1 
 .1       SET    .1-1 
          SHN    -14
          RAM    M+.1,T8
          ENDD
 .2       ELSE
          AOM    M+.1,BA
          DUP    .1 
 .1       SET    .1-1 
          SHN    -14
          RAM    M+.1,BA
          ENDD
 .2       ENDIF 
          ENDM
 ADA      SPACE  4,20 
**        ADA - ADD ACCUMULATOR.
* 
*         ADA    M,D
* 
*         ENTRY  *M* = BUFFER OFFSET TO BE INCREMENTED. 
*                *D* = INDEX OFFSET.
*                (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
* 
*         USES   T8, T9.
* 
*         CALLS  ADA. 
* 
*         REQUIRES BUFFER OFFSET TO BE DEFINED VIA *MPAR* MACRO 
*         IN ORDER TO SET FIELD PRECISION.
* 
*         WARNING - IF THE *D* PARAMETER IS PRESENT, ONLY 
*                THE LOWER 12 BITS OF *A* ARE USED, AND THE 
*                ELEMENT PRECISION MUST NOT BE GREATER THAN TWO.
  
  
          PURGMAC ADA 
  
 ADA      MACRO  M,D
          MACREF ADA
 .1       SET    P.M-1
 .2       IFC    NE,$D$$
          STD    T8 
          LDD    D
          ERRPL  .1-2        PRECISION ERROR
 .3       IFNE   .1,0 
          SHN    1
          ADK    M
          RJM    ADA
 .3       ELSE
          ADD    BA 
          STD    T9 
          LDD    T8 
          RAM    M,T9 
 .3       ENDIF 
 .2       ELSE
          RAM    M+.1,BA
          DUP    .1 
 .1       SET    .1-1 
          SHN    -14
          RAM    M+.1,BA
          ENDD
 .2       ENDIF 
          ENDM
 RDM      SPACE  4,15 
**        RDM - READ MEMORY.
* 
*         RDM    M
* 
*         ENTRY  (A) = CM ADDRESS TO READ.
*                *M* = BUFFER OFFSET TO READ INTO.
*                (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
* 
*         EXIT   (A) = INITIAL CM ADDRESS + CM WORDS READ.
* 
*         USES   T8, T9.
* 
*         CALLS  RDM. 
* 
*         REQUIRES BUFFER OFFSET TO BE DEFINED VIA *MPAR* MACRO 
*         TO SET FIELD PRECISION. 
  
  
          PURGMAC RDM 
  
 RDM      MACRO  M
          MACREF RDM
          STD    T9 
          SHN    -14
          STD    T8 
          LDC    P.M/5*10000+M
          ERRNZ  P.M/5*5-P.M LENGTH ERROR 
          RJM    RDM         READ MEMORY
          ENDM
 MPAR     SPACE  4,15 
**        MPAR - MULTIPLE PRECISION ARRAY.
* 
* NAME    MPAR   L,P
* 
*         ENTRY  *NAME* = ARRAY NAME. 
*                *L* = ARRAY LENGTH IN ELEMENTS.
*                *P* = ELEMENT PRECISION IN PPU WORDS.
* 
*         EXIT   *P.NAME* = PRECISION OF ELEMENTS.
*                *L.NAME* = ARRAY LENGTH. 
* 
*         WARNING - IF ARRAY LENGTH IS NOT EQUAL TO ONE, THE ELEMENT
*         PRECISION MUST NOT BE GREATER THAN TWO. 
  
  
          PURGMAC MPAR
  
          MACRO  MPAR,NAME,LEN,PREC 
          MACREF MPAR 
 .1       IFC    NE,$NAME$$ 
 .2       IFC    EQ,$PREC$$ 
          ERR                PRECISION NOT SPECIFIED
 .2       ELSE
 P.NAME   EQU    PREC 
 .2       ENDIF 
 .3       IFNE   LEN,1
          ERRNG  2-P.NAME    OFFSET CALCULATION ERROR 
 .3       ENDIF 
 L.NAME   EQU    LEN
 NAME     BSS    L.NAME*P.NAME
 BL       SET    BL+L.NAME*P.NAME 
 .1       ENDIF 
          ENDM
 STA      SPACE  4,10 
**        STA - STORE ACCUMULATOR.
* 
*         STA    M
* 
*         ENTRY  *M* = DATA OFFSET IN BUFFER. 
*                (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
  
  
          PURGMAC  STA
  
 STA      MACRO  M
 .1       SET    P.M-1
          ERRPL  .1-2        PRECISION ERROR
 .2       IFNE   .1,0 
          STM    M+1,BA 
          SHN    -14
 .2       ENDIF 
          STM    M,BA 
          ENDM
          TITLE  COMMON DECKS.
*         COMMON DECKS. 
  
  
*CALL     COMPMAC 
*CALL     COMPMRM 
*CALL     COMSCPS 
*CALL     COMSEJT 
          QUAL   EVENT
*CALL     COMSEVT 
          QUAL   *
*CALL     COMSHIO 
*CALL     COMSIOU 
*CALL     COMSJIO 
*CALL     COMSMSP 
*CALL     COMSMTR 
*CALL     COMSPFM 
*CALL     COMSPIM 
          QUAL   IAF
*CALL     COMSREM 
          QUAL   *
*CALL     COMSSCD 
          QUAL   SCR
*CALL     COMSSCR 
          QUAL   *
*CALL     COMSSSD 
*CALL     COMSSSJ 
*CALL     COMSWEI 
          LIST   F,X
*CALL     COMSCPD 
          LIST   *
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 SSJ$     EQU    1           ASSEMBLE *SSJ=* PROCESSING IN *COMPCUA*
 SBUFL    MAX    48D,CTALL*5 SCRATCH BUFFER LENGTH
  
****
          TITLE  MAIN PROGRAM.
 CPD      SPACE  4,10 
**        CPD - MAIN PROGRAM. 
  
  
          ORG    PPFW 
  
 CPD      LJM    /PRS/PRS    PRESET 
  
 FITS     EQU    CPD         FILE INTERLOCK STATUS
  
 CPD1     LDN    1           INDICATE NOT TRACK LIMIT 
          RJM    CDS         CHECK DROP STATUS
*         LDN    0
          STD    LI          SET LOOP INDEX 
          LDC    RTCL        SET REAL TIME
          CRD    CM 
          LDD    CM+1        SET SECONDS
          STD    SC 
          LDD    CM+4        SET MILLISECONDS 
          STD    MS 
  
*         CHECK LOOP OPERATIONS TIMES.
  
 CPD2     LDD    MS          SET ELAPSED TIME 
          SBM    CPDA,LI
          PJN    CPD3        IF NO UNDERFLOW
          ADC    10000
 CPD3     STD    T1 
          SBM    CPDC,LI
          MJN    CPD4        IF NOT GTREATER THAN MAXIMUM CYCLE TIME
          RAM    CPDC,LI     UPDATE MAXIMUM CYCLE TIME
 CPD4     LDM    CPDB,LI
          ZJN    CPD7        IF NO OPERATION TO BE PERFORMED
          SBD    T1          CHECK OPERATION INTERVAL 
          SBN    1
          PJN    CPD7        IF TIME NOT EXPIRED
          LDD    MS          SET NEW BASE TIME
          STM    CPDA,LI
          LDM    TLOT,LI     SET OPERATION TABLE ADDRESS
          STD    LO 
          LDI    LO          INCREMENT SAMPLE COUNT 
          ADD    BA 
          STD    T1 
          AOM    1,T1 
          SHN    -14
          RAI    T1 
          AOD    LO          ADVANCE TO PROCESS OPERATIONS
 CPD5     LDI    LO 
          STD    T1 
          ZJN    CPD6        IF ROUTINE NOT TO BE PERFORMED 
          RJM    0,T1        PERFORM OPERATION ROUTINE
 CPD6     AOD    LO          ADVANCE TO PROCESS NEXT OPERATION
          LMM    TLOTL,LI 
          NJN    CPD5        IF MORE OPERATIONS TO PROCESS
 CPD7     AOD    LI          INCREMENT LOOP INDEX 
          LMN    MSLC 
          NJP    CPD2        IF ALL MILLISECOND LOOPS NOT PROCESSED 
          LDM    CPDB,LI
          ZJN    CPD9        IF NO SNAPSHOT OPERATION TO BE PERFORMED 
          LDD    SC          SET ELAPSED TIME 
          SBM    CPDA,LI
          PJN    CPD8        IF NO UNDERFLOW
          ADC    10000
 CPD8     SBM    CPDB,LI     CHECK SNAPSHOT LOOP INTERVAL TIME
          MJN    CPD9        IF TIME NOT EXPIRED
          LDD    SC          SET NEW BASE TIME
          STM    CPDA,LI
          RJM    /3CR/SNO    PERFORM SNAPSHOT OPERATION 
          AOD    RC          ADVANCE RECORD COUNT 
          SBD    RX 
          ZJN    CPD10       IF END OF BUFFER 
          LDD    WC          ADVANCE BUFFER ADDRESS FOR NEXT RECORD 
          SHN    2
          ADD    WC 
          RAD    BA 
 CPD9     LJM    CPD1        LOOP 
  
 CPD10    EXECUTE  3CS       WRITE FILE 
 CPD11    RJM    /3CS/ZFB    ZERO FILL BUFFER 
          EXECUTE  3CR       LOAD OVERLAID LOOP OPERATION ROUTINES
          LDC    RTCL        SET INITIAL OPERATION TIMES
          CRD    CM 
          LDD    CM+4 
          STM    CPDA        FAST LOOP
          STM    CPDA+1      MEDIUM LOOP
          STM    CPDA+2      SLOW LOOP
          LDD    CM+1 
          STM    CPDA+3      SNAPSHOT LOOP
          UJN    CPD9        LOOP 
  
  
 CPDA     BSS    0           LOOP OPERATION BASE TIMES
          CON    0           FAST LOOP
          CON    0           MEDIUM LOOP
          CON    0           SLOW LOOP
 MSLC     EQU    *-CPDA      MILLISECOND LOOP COUNT 
          CON    0           SNAPSHOT LOOP
 SCLC     EQU    *-CPDA-MSLC SECOND LOOP COUNT
  
 CPDB     BSS    0           LOOP OPERATION INTERVAL TIMES
          CON    0           FAST LOOP
          CON    0           MEDIUM LOOP
          CON    0           SLOW LOOP
          CON    0           SNAPSHOT LOOP
  
 CPDC     BSS    0           MAXIMUM CYCLE TIMES
          CON    0           FAST LOOP
          CON    0           MEDIUM LOOP
          CON    0           SLOW LOOP
  
 TLOT     BSS    0           TABLE OF LOOP OPERATION TABLE ADDRESSES
          CON    TFLO        FAST LOOP OPERATIONS 
          CON    TMLO        MEDIUM LOOP OPERATIONS 
          CON    TSLO        SLOW LOOP OPERATIONS 
  
 TLOTL    BSS    0           TABLE OF LOOP OPERATION TABLES LWA + 1 
          CON    TFLOL       FAST LOOP OPERATIONS 
          CON    TMLOL       MEDIUM LOOP OPERATIONS 
          CON    TSLOL       SLOW LOOP OPERATIONS 
  
 TFLO     BSS    0           TABLE OF FAST LOOP OPERATIONS
          CON    CNIL        INCREMENT FAST LOOP SAMPLE COUNT 
          CON    CDA         CHECK DEVICE ACTIVITY
 DCBP     CON    0           DISABLE BUFFERED I/O 
*         CON    CBP         (CHECK BUFFERED I/O PARAMETERS)
 DCBC     CON    0           DISABLE BUFFERED I/O 
*         CON    CBC         (CHECK BUFFERED I/O CHANNEL USAGE) 
          CON    CHU         CHECK CHANNEL USAGE
          CON    /3CR/CMR    CHECK MOVE REQUEST 
          CON    CPU         CHECK CPU USAGE
          CON    /3CR/PPU    COUNT PP USAGE 
 TFLOL    EQU    *           TABLE OF FAST LOOP OPERATIONS LWA + 1
  
 TMLO     BSS    0           TABLE OF MEDIUM LOOP OPERATIONS
          CON    CTML        INCREMENT MEDIUM LOOP SAMPLE COUNT 
          CON    /3CR/ACA    ACCUMULATE CONTROL POINT ACTIVITY
          CON    /3CR/CMR    CHECK MOVE REQUEST 
          CON    /3CR/UEA    UPDATE EJT ACTIVITY
 TMLOL    EQU    *           TABLE OF MEDIUM LOOP OPERATIONS LWA + 1
  
 TSLO     BSS    0           TABLE OF SLOW LOOP OPERATIONS
          CON    CTOL        INCREMENT SLOW LOOP SAMPLE COUNT 
          CON    /3CR/ACP    ACCUMULATE CONCURRENT PP ACTIVITY
          CON    /3CR/AEA    ACCUMULATE EST ACTIVITY
          CON    /3CR/AIA    ACCUMULATE IAF ACTIVITY
          CON    /3CR/UQA    UPDATE QFT ACTIVITY
 TSLOL    EQU    *           TABLE OF SLOW LOOP OPERATIONS LWA + 1
          TITLE  LOOP OPERATION ROUTINES. 
 CBC      SPACE  4,10 
**        CBC - CHECK BUFFERED I/O CHANNEL USAGE. 
* 
*         ENTRY  (CBCA) = CHANNEL TABLE ADDRESS.
*                (CBCB) = NUMBER OF CHANNEL TABLE ENTRIES.
* 
*         EXIT   BUFFERED I/O CHANNEL USAGE UPDATED.
* 
*         USES   T1, T2, T3, AB - AB+4, CM - CM+4.
* 
*         MACROS ADO. 
  
  
 CBC      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T3 
          LDC    0
 CBCA     EQU    *-2         (CHANNEL TABLE ADDRESS)
          STD    T2          SET CHANNEL TABLE ADDRESS
          SHN    -14
          STD    T1 
 CBC1     SHN    14 
          ADD    T2 
          ADK    CREQ 
          CRD    CM          READ CHANNEL TABLE WORD *CREQ* 
          ADN    CCNT-CREQ   READ CHANNEL NUMBER
          CRD    AB 
          LDD    CM 
          ZJN    CBC2        IF NOT BUSY
          LDD    AB+1        SET CHANNEL NUMBER 
          LPN    77 
          STD    CM 
          ADO    BICA,CM     COUNT CHANNEL ACTIVITY 
 CBC2     AOD    T3          ADVANCE CHANNEL TABLE INDEX
          SBN    0
 CBCB     EQU    *-1         (NUMBER OF CHANNEL TABLE ENTRIES)
          PJN    CBCX        IF END OF CHANNELS 
          LDN    CCTL 
          RAD    T2          ADVANCE TABLE ADDRESS
          SHN    -14
          RAD    T1 
          UJN    CBC1        CHECK NEXT CHANNEL 
 CBP      SPACE  4,10 
**        CBP - CHECK BUFFERED I/O PARAMETERS.
* 
*         ENTRY  (CBPA) = FWA BUFFERED I/O TABLES.
* 
*         EXIT   BUFFERED I/O PARAMETERS UPDATED. 
* 
*         USES   T2, CM - CM+4. 
* 
*         MACROS ADA. 
  
  
 CBP      SUBR               ENTRY/EXIT 
          LDN    WRTP-EMTP+1 INITIALIZE CONTROL WORD INDEX
          STD    T2 
 CBP1     SOD    T2 
          MJN    CBPX        IF END OF CONTROL WORDS
 CBPA     ADC    EMTP        (FWA CONTROL WORDS + *EMPT*) 
          CRD    CM 
          LDD    CM+1        ADD COUNT OF BUFFERS IN LIST 
          ADA    BILA,T2
          UJN    CBP1        LOOP 
  
  
          ERRNZ  DWTP-EMTP-1 OFFSET ERROR IN *MPAR* TABLE 
          ERRNZ  DRDP-DWTP-1 OFFSET ERROR IN *MPAR* TABLE 
          ERRNZ  WRTP-DRDP-1 OFFSET ERROR IN *MPAR* TABLE 
 CDA      SPACE  4,10 
**        CDA - CHECK DEVICE ACTIVITY.
* 
*         ENTRY  (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
*                (ME) = NUMBER OF MS ENTRIES. 
*                (CDAA) = PP SPEED MASK.
*                (CDAB) = FWA MST-S.
* 
*         EXIT   DEVICE ACTIVITY USAGE UPDATED. 
* 
*         USES   T1, T2, VB, CM - CM+4. 
  
  
 CDA      SUBR               ENTRY/EXIT 
          LDM    CDAC        COMPUTE RANDOM DELAY 
          ADC    273D 
          LPC    0
*         LPC    777         (1XPP) 
*         LPC    1777        (2XPP) 
*         LPC    3777        (4XPP) 
 CDAA     EQU    *-1
          STM    CDAC 
 CDA1     SBN    1           NOW COUNT OUT THE DELAY
          NJN    CDA1        IF NOT END OF DELAY
          LDD    ME          NUMBER OF MS ENTRIES 
          STD    T1 
          LDD    BA          SET MASS STORAGE REQUEST ENTRY FWA 
          ADK    DFBL+NMSA
          STD    VB 
          LDC    **          FWA MST-S
 CDAB     EQU    *-1
          STD    T2 
 CDA2     SOD    T1 
          MJN    CDAX        IF END OF MS ENTRIES 
          LDD    T2 
          SHN    3
          ADN    DALL 
          CRD    CM 
          LDD    CM          UPDATE ACTIVITY USAGE
          LPN    77 
          RAM    1,VB 
          SHN    -14
          RAI    VB 
          ERRNZ  P.NMSA-2    CODE DEPENDS ON SIZE 
          LDN    DMBL        ADVANCE TO NEXT MS REQUEST ENTRY 
          RAD    VB 
          LDN    MSTXL/10 
          RAD    T2 
          UJN    CDA2        PROCESS NEXT DEVICE
  
  
 CDAC     CON    0           DELAY
 CHU      SPACE  4,20 
**        CHU - CHECK CHANNEL USAGE.
* 
*         ACTIVITY ON CHANNELS ASSIGNED TO BUFFERED I/O DRIVERS 
*         IS IGNORED HERE AND PROCESSED SEPARATELY IN ROUTINE *CBC*.
*         FOR CONCURRENT CHANNELS, ONLY CHANNEL REQUESTED/RESERVED IS 
*         RECORDED, SINCE DETERMINING CHANNEL ACTIVITY IS IMPRACTICAL.
* 
*         ENTRY  (NP) = NUMBER OF PP-S. 
*                (PC) = FWA OF PP COMMUNICATIONS AREA.
*                (CHUA) = NUMBER OF CHANNELS ON MAINFRAME.
*                (CHUB) = FWA CHANNEL TABLE.
* 
*         EXIT   CHANNEL USAGE UPDATED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS ADO. 
  
  
 CHU      SUBR               ENTRY/EXIT 
          LDN    CTALL       CHANNEL STATUS TABLE LENGTH
          STD    T1 
 CHUA     LDC    **          (FWA OF CHANNEL TABLE) 
          CRM    SBUF,T1
          LCN    0           INITIALIZE CHANNEL NUMBER
          STD    T1 
 CHU1     AOD    T1 
 CHUB     LMN    40+**       (MAXIMUM CONCURRENT CHANNEL + 1) 
          ZJN    CHUX        IF ALL CHANNELS PROCESSED
          LDD    T1 
 CHUC     SBN    **          (MAXIMUM NON-CONCURRENT CHANNEL + 1) 
          PJN    CHU2        IF CONCURRENT CHANNEL
  
*         CHECK FOR BUFFERED I/O USAGE. 
  
          LDM    SBUF,T1     GET ASSIGNED PP NUMBER 
          LPN    37 
          SHN    3           GET PP INPUT REGISTER
          ADD    PC 
          CRD    CM 
          LDD    CM+1 
          SCN    77 
          SHN    6
          LMD    CM 
          LMC    3RP1H
          ZJN    CHU1        IF *1HP* 
          LMC    3RM1X&3RP1H
          ZJN    CHU1        IF *1XM* 
  
*         SAMPLE CHANNEL DATA.
  
          LDC    IJMI        GENERATE CHANNEL INSTRUCTION 
          ADD    T1 
          STM    CHUD 
 CHUD     IJM    CHU2,**     IF CHANNEL INACTIVE
          ADO    ACCH,T1     INCREMENT CHANNEL ACTIVE COUNT 
  
*         THE FOLLOWING CODE IS PERFORMED FOR ALL CHANNELS. 
  
 CHU2     LDM    SBUF,T1     SET CHANNEL STATUS 
          SHN    21-13
          PJN    CHU3        IF NOT REQUESTED 
          ADO    RQCH,T1     INCREMENT CHANNEL REQUESTED COUNT
 CHU3     LDM    SBUF,T1     SET CHANNEL STATUS 
          LPN    37 
          ZJN    CHU4        IF NOT RESERVED
          ADO    RSCH,T1     INCREMENT CHANNEL RESERVED COUNT 
 CHU4     LJM    CHU1        LOOP 
 CPU      SPACE  4,15 
**        CPU - CPU USAGE.
* 
*         ENTRY  (NC) = NUMBER OF THE SYSTEM CONTROL POINT. 
*                (CPUA) = MODIFIED IF NO SCR ON MAINFRAME.
*                (TCPS) = CPU STATUSES. 
*                (RN) = P REGISTER MAINTENANCE REGISTER NUMBER. 
* 
*         EXIT   CPU ACTIVITY UPDATED.
* 
*         USES   EC, AB - AB+4, CM - CM+4, CN - CN+4, T1 - T3.
* 
*         MACROS ADO, READMR. 
  
  
 CPU7     LDN    /SCR/FCRD+20  READ STATUS/CONTROL REGISTER 
          OAN    CHSC 
          IAN    CHSC 
          STD    T1 
          SHN    -3          CHECK MONITOR MODE 
          LPN    3
          ZJN    CPU8        IF NOT MONITOR MODE
          SBN    1           SET CPU OFFSET 
          STD    T2 
          ADO    MNMD,T2     INCREMENT MONITOR MODE COUNT 
 CPU8     LDD    T1          CHECK EXTENDED MEMORY TRANSFER 
          LPN    4
          ZJN    CPUX        IF NO EXTENDED MEMORY TRANSFER ACTIVE
          ADO    ECST        INCREMENT EXTENDED MEMORY TRANS
  
 CPU      SUBR               ENTRY/EXIT 
          LDN    0           INITIALIZE CPU COUNT 
          STD    T2 
          UJN    CPU2        CHECK CPU 0 STATUS 
  
 CPU1     AOD    T2 
          LMN    TCPSL
 CPUA     ZJN    CPU7        IF ALL CPUS PROCESSED
*         ZJN    CPUX        (NO SCR ON MAINFRAME)
          LDN    CTCUL
 CPU2     STD    T1          SET CPU USAGE INDEX
          LDM    TCPS,T2
          NJN    CPU1        IF CPU OFF 
 CPUB     LJM    CPU2.3      DETERMINE NOS CPU USAGE
*         UJN    CPU2.1      (180 TYPE CPU) 
  
*         DETERMINE CODE SEGMENT FOR 180 TYPE CPU.
  
 CPU2.1   LDM    PCCC,T2     SET PROCESSOR CONNECT CODE 
          STD    EC 
          READMR PREG        READ P REGISTER
          LDM    PREG+2      GET PROCESSOR CODE SEGMENT 
          LPN    17 
          SHN    10 
          ADM    PREG+3 
          SBN    CSNS 
          ZJN    CPU2.3      IF NOS SEGMENT 
          SBN    CSEI-CSNS
          ZJN    CPU2.2      IF EI SEGMENT
          SBN    CSVU-CSEI   DETERMINE NOS/VE SYSTEM OR USER SEGMENT
          SHN    0-21 
          LMN    1
          ADN    1
 CPU2.2   ADN    CI18        SET 180 USAGE CATEGORY 
          STD    T1 
          LJM    CPU6        INCREMENT CPU COUNT
  
*         DETERMINE NOS CPU USAGE.
  
 CPU2.3   LDD    T2          GET CPU CPA ADDRESS
          ADC    CPAL 
          CRD    CM 
          LDD    CM+2 
          ADN    TFSW 
          CRD    CN 
          SBN    TFSW-JCIW
          CRD    AB 
          LDD    CM+2 
          SHN    -7 
          LMD    NC 
          NJN    CPU2.4      IF CPU NOT ACTIVE AT SYSTEM CONTROL POINT
          LDD    CM+1        GET EXCHANGE PACKAGE TYPE
          SHN    -6 
          SBN    IDXT 
          PJN    CPU6        IF IDLE PACKAGE
          ADN    IDXT+1 
          RAD    T1          SET INDEX FOR EXCHANGE PACKAGE 
          UJN    CPU6        INCREMENT CPU USAGE COUNT
  
 CPU2.4   LDN    CISU        INCREMENT CPU USAGE INDEX TO SUBSYSTEM 
          RAD    T1 
          LDD    AB+2 
          LMN    IRSI 
          ZJN    CPU3        IF ROLLOUT INHIBITED 
          LMN    IRSI 
          ADC    -LSSI
          MJN    CPU4        IF NOT SUBSYSTEM 
 CPU3     STD    T3          INCREMENT SUBSYSTEM CPU USAGE
          ADO    SSCU,T3
          UJN    CPU6        INCREMENT USAGE COUNT
  
 CPU4     AOD    T1          INCREMENT CPU USAGE INDEX
          SFA    EJT,CN 
          ADN    SCLE-JSNE   SET JOB ORIGIN TYPE
          CRD    CN 
          LDD    CN 
          LPN    17 
          LMK    SYOT 
          ZJN    CPU6        IF SYSTEM ORIGIN 
          AOD    T1          INCREMENT CPU USAGE INDEX
 CPU6     ADO    CTCU,T1     INCREMENT CPU USAGE COUNT
          LJM    CPU1        PROCESS NEXT CPU 
  
  
 MRER     EQU    CPUX        ERROR PROCESSOR ADDRESS FOR *COMPMRM*
  
 PCCC     BSS    1           PROCESSOR A CONNECT CODE 
          BSS    1           PROCESSOR B CONNECT CODE 
  
 TCPS     BSS    0           TABLE OF CPU STATUS (0=ON, 1=OFF)
          CON    0           CPU 0 ON/OFF FLAG
          CON    0           CPU 1 OF/OFF FLAG
 TCPSL    EQU    *-TCPS      TABLE LENGTH 
  
 PREG     BSS    10          P REGISTER FROM MAINTENANCE UNIT 
          TITLE  RESIDENT SUBROUTINES.
 ADA      SPACE  4,10 
**        ADA - ADD VALUE TO BUFFER.
* 
*         ENTRY  (A) = OFFSET INTO BUFFER FOR DOUBLE PRECISION WORD.
*                (BA) = BUFFER BASE ADDRESS.
*                (T8) = VALUE TO ADD TO DOUBLE PRECISION WORD.
* 
*         USES   T9.
  
  
 ADA      SUBR               ENTRY/EXIT 
          ADD    BA 
          STD    T9 
          LDD    T8          ADD VALUE TO BUFFER
          RAM    1,T9 
          SHN    -14
          RAI    T9 
          UJN    ADAX        RETURN 
 CCA      SPACE  4,10 
**        CCA - COMPUTE CPA/PCPA ADDRESS. 
* 
*         ENTRY  (A) = CP/PCP NUMBER. 
*                (NC) = NUMBER OF CONTROL POINTS. 
* 
*         EXIT   (A) = CPA/PCPA ADDRESS.
  
  
 CCA1     ADD    NC 
          SHN    7
  
 CCA      SUBR               ENTRY/EXIT 
          SBD    NC 
          MJN    CCA1        IF CONTROL POINT 
          ZJN    CCA1        IF SYSTEM CONTROL POINT
          SHN    7
 CCAA     ADC    **          (PCP AREAS BASE ADDRESS) 
          UJN    CCAX        RETURN 
 CDS      SPACE  4,10 
**        CDS - CHECK DROP STATUS.
* 
*         ENTRY  (A) = 0 IF TRACK LIMIT.
*                (RC) = NUMBER OF RECORDS IN BUFFER.
* 
*         EXIT   (A) = 0. 
*                TO */3CS/DPP* IF PP TO BE DROPPED. 
* 
*         USES   CN, CM - CM+4. 
* 
*         CALLS  /3CR/SNO.
* 
*         MACROS EXECUTE. 
  
  
 CDS      SUBR               ENTRY/EXIT 
          STD    CN 
          LDC    INWL        CHECK *CPD* DROP FLAG
          CRD    CM 
          LDD    CM+4 
          LPN    4
          ZJN    CDSX        IF NO DROP OUT 
          LDD    CN 
          ZJN    CDS2        IF TRACK LIMIT 
          RJM    /3CR/SNO    PERFORM SNAPSHOT OPERATION 
          AOD    RC          ADVANCE RECORD COUNT 
          EXECUTE  3CS       LOAD FILE WRITE ROUTINES 
 CDS1     LJM    /3CS/DPP    DROP PP
  
 CDS2     RJM    /3CS/CIS    CLEAR INTERLOCK STATUS 
          UJN    CDS1        DROP PP
 RDM      SPACE  4,10 
**        RDM - READ MEMORY TO BUFFER.
* 
*         ENTRY  (A) = 6/ WORD COUNT, 12/ BUFFER OFFSET.
*                (T8 - T9) = CM ADDRESS TO READ FROM. 
* 
*         EXIT   (A) = CM LWA+1 OF DATA READ. 
* 
*         USES   LA.
  
  
 RDM      SUBR               ENTRY/EXIT 
          ADD    BA          CALCULATE BUFFER ADDRESS 
          STM    RDMA 
          SHN    -14
          STD    LA          SAVE WORD COUNT
          LDD    T8 
          SHN    14 
          ADD    T9 
          CRM    **,LA
 RDMA     EQU    *-1
          UJN    RDMX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 EJT$     EQU    1           INITIALIZE EJT PROCESSING
 IFP$     EQU    1           ASSEMBLE REMOTE INITIALIZATION CODE
 QFT$     EQU    1           INITIALIZE QFT PROCESSING
*CALL     COMPGFP 
*CALL     COMPMRA 
          SPACE  4,10 
          USE    LITS        FLUSH LITERALS 
          USE    *
          SPACE  4,10 
*         CPD OVERLAY LOAD ADDRESS. 
  
  
 COVL     EQU    *+5         CPD OVERLAY LOAD ADDRESS 
          TITLE  PRESET.
          QUAL   PRS
  
  
*         OVERLAID PRESET COMMON DECKS AND PRESET CODE. 
  
  
*CALL     COMPCUA 
  
  
          QUAL
 IFP      HERE
          QUAL   *
 PRS      SPACE  4,30 
**        PRS - PRESET. 
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (FO) = 0.
*                (FITS) = 0 IF FILE INTERLOCK NOT REQUIRED. 
*                (FS - FS+4) = DATA FILE FST. 
*                (LE) = LAST ORDINAL + 1 OF DEFINED EST ENTRIES.
*                (LO) .NE. 0. 
*                (ME) = NUMBER OF MASS STORAGE ENTRIES. 
*                (NC) = NUMBER OF CONTROL POINTS. 
*                (NP) = NUMBER OF PPUS. 
*                (PC) = PPU COMMUNICATION AREA ADDRESS. 
*                (NM) = NUMBER OF MCT ENTRIES - 1.
*                (RX) = MAXIMUM RECORD COUNT IN BUFFER. 
*                (WC) = DATA RECORD WORD COUNT. 
*                MAIN CODE/TABLES MODIFIED AS NEEDED. 
*                TO *CPD11* TO ENTER MAIN LOOP. 
* 
*         ERROR  TO *ERR* IF ERROR ENCOUNTERED. 
* 
*         USES   BA, FO, LI, LO, MD, MS, NC, NP, PC, SC, RC, RX, WC,
*                AB - AB+4, CM - CM+4, CN - CN+4, FS - FS+4, IR - IR+4, 
*                T1 - T6. 
* 
*         CALLS  CPT, CRS, CUA, DFM, FAT, IFP, RCS, RDB, RJC, SAF,
*                SEI, SFB, *3CS*, /3CS/CIS, /3CS/DPB, /3CS/RNT, 
*                /3CS/SIS, /3CS/WES.
* 
*         MACROS CFI, EXECUTE, MONITOR, SETMS, SFA, STA.
  
  
 PRS      BSS    0           ENTRY
          LDK    PCPP        SET FWA OF PCPA-S
          CRD    CM 
          LDD    CM+3 
          SHN    14 
          LMD    CM+4 
          SBK    200B 
          STM    CCAA+1 
          SHN    -14
          LMC    ADCI 
          STM    CCAA 
          RJM    IFP
          LDN    0           CLEAR FNT ORDINAL POINTER
          STD    FO 
          RJM    CUA         CHECK USER ACCESS
          ZJN    PRS2        IF ACCESS ALLOWED
          LDC    ERRA&ERRF   * CPD - USER ACCESS NOT VALID.*
 PRS1     LMC    ERRF        * CPD - OVERLAY NOT IN RPL.* 
          LJM    ERR         ISSUE ERROR MESSAGE
  
 PRS2     LDC    3R3CR       CHECK *3CR* IN RPL 
*         LDC    3R3CS       (CHECK *3CS* IN RPL) 
 PRSA     EQU    *-1
          STD    CM+3 
          SHN    -14
          STD    CM+2 
          MONITOR  SPLM      SEARCH LIBRARY DIRECTORY 
          LDD    CM+1 
          SCN    77 
          ZJN    PRS1        IF OVERLAY NOT IN RPL
          AOM    PRSA 
          LPN    77 
          SBN    1RS+1
          MJN    PRS2        IF MORE OVERLAYS TO CHECK
          LDN    1           CLEAR *CPD* DROP FLAG
          STD    CM+1 
          STD    CM+2 
          LDD    MA 
          CWM    PRSC,ON
          MONITOR  UADM 
  
*         CHECK PARAMETER BLOCK ADDRESS.
  
          LDD    IR+3        CHECK PARAMETER ADDRESS
          LPN    37 
          STD    IR+3 
          SHN    14 
          LMD    IR+4 
          SBN    2
          MJN    PRS3        IF ADDRESS .LT. 2
          ADN    2+FETL-1 
          SHN    -6 
          SBD    FL 
          MJN    PRS4        IF PARAMETER BLOCK WITHIN FL 
 PRS3     LDC    ERRB        * CPD - PARAMETER ERROR.*
          LJM    ERR         ISSUE ERROR MESSAGE
  
*         GET LOOP PARAMETERS.
  
 PRS4     LDD    IR+3        SET ARGUMENTS
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          ADN    4           GET SAMPLE FILE OFFSET IN NFL
          CRD    AB-1 
          ERRNZ  FO+1-AB     CODE DEPENDS ON VALUE
          ADN    5-4
          CRD    CM 
          ADN    3
          CRD    CN          SET MODE 
          LDD    CN+4 
          LMN    PTAP 
          ZJN    PRS5        IF APPEND MODE REQUEST 
          LMN    PTMD&PTAP
          ZJN    PRS5        IF MODIFY MODE 
          LMN    PTWR&PTMD
          NJN    PRS3        IF NOT WRITE MODE
          STM    FITS        CLEAR INTERLOCK NEEDED 
 PRS5     LDC    HBUF        SET HEADER BUFFER ADDRESS
          STD    BA 
 .1       MICRO  1,2, "VERS" SET CPD VERSION
 .2       MICRO  3,2, "VERS"
          LDC    2R".1" 
          STM    CPDV,BA
          LDC    2R".2" 
          STM    CPDV+1,BA
          LDD    CM+4 
          STA    DLIL        SET FAST LOOP TIME 
          STM    CPDB+0 
          LDD    CM+3 
          STA    DLML        SET MEDIUM LOOP TIME 
          STM    CPDB+1 
          LDD    CM+2 
          STA    DLOL        SET SLOW LOOP TIME 
          STM    CPDB+2 
          LDD    CM+1 
          STA    DLFW        SET SAMPLING/FILE WRITE LOOP TIME
          STM    CPDB+3 
          LDD    FO 
          NJN    PRS7        IF FILE FOUND
          LDC    ERRD        * CPD - FILE NOT FOUND.* 
          UJN    PRS8        ISSUE ERROR MESSAGE
  
 PRS7     NFA    FO,R        READ FST INFORMATION 
          ADN    FSTL 
          CRD    T5          SET DIRECT CELLS 
          CRD    FS 
          LDD    IR+2 
          NJN    PRS9        IF FNT SLOT RESERVED 
          LDC    ERRE        * CPD - FILE STATUS ERROR.*
 PRS8     LJM    ERR         ISSUE ERROR MESSAGE
  
 PRS9     RJM    SEI         SEARCH FOR EOI 
          LDD    T6 
          STD    FS+2        SET CURRENT TRACK
          LDD    T7 
          STD    FS+3 
  
*         DETERMINE NUMBER OF CONTROL POINTS, NUMBER OF PPUS, 
*         AND FWA OF CHANNEL TABLE. 
  
 PRS10    LDN    PPCP        SET PPU COMMUNICATION AREA ADDRESS 
          CRD    CM 
          LDD    CM+4 
          STD    PC 
          LDD    CM+2        SET CURRENT USER EM SHIFT COUNT
          ERRNZ  MEFL-PPCP
          SHN    -11
          STA    UESC 
          LDC    CHTP        SET FWA OF CHANNEL TABLE 
          CRD    CM 
          LDD    CM+2 
          RAM    CHUA 
          LDD    CM+3 
          STM    CHUA+1 
          LDN    PPUL        READ PP AND CHANNEL COUNT
          CRD    CM 
          ERRNZ  PPUL-CPPL   CODE ASSUMES NPP/CPP DATA IN SAME WORD 
          ADK    MCTP-CPPL   GET NUMBER OF MCT ENTRIES
          CRD    AB 
          LDD    CM+3        SET NUMBER OF PHYSICALLY PRESENT CPP-S 
          LPN    77 
          STD    T0 
          STA    NCPP 
          LDD    T0          SET MAXIMUM CHANNEL FOR REQUEST/RESERVE
          RAM    CHUB 
          LDD    CM+1        SET NUMBER OF CONTROL POINTS 
          STA    NCPT 
          ADN    1
          STD    NC 
          SOD    AB+2        SET NUMBER OF MCT ENTRIES - 1
          STD    NM 
          SBD    NC          SET NUMBER OF PCP-S
          STA    NPCP 
          LDD    CM          SET CHANNEL COUNT
          ADN    1
          RAM    CHUC 
          LDD    CM+2        SET PP COUNT 
          STD    NP 
          STD    T1          CHECK INACTIVE PPS 
          STD    T2 
 PRS11    SOD    T2 
          MJN    PRS12       IF NO MORE PPS TO CHECK
          SHN    3
          ADD    PC 
          CRD    AB 
          LDD    AB 
          LMC    2R** 
          NJN    PRS11       IF NOT INACTIVE PP 
          SOD    T1          DECREMENT ACTIVE PP COUNT
          UJN    PRS11       LOOP FOR NEXT PP 
  
 PRS12    LDD    T1          SET ACTIVE PP COUNT
          STA    NNPP 
  
*         SET CPU INFORMATION, MEMORY SIZES IN HEADER RECORD. 
  
          LDC    MABL        READ MAINFRAME ATTRIBUTES
          CRD    CM 
          ADN    EABL-MABL
          CRD    CN 
          LDD    CM+4        ADJUST RANDOM DELAY FOR PP SPEED 
          LPN    7
          STD    T1 
          SBN    PRSDL
          PJN    PRS13       IF INCORRECT VALUE 
          LDM    PRSD,T1
          STM    CDAA 
 PRS13    LDD    CM+1        GET CPU 0 ON/OFF STATUS
          LPN    1
          STM    TCPS        BIT 0 SET IF CPU 0 OFF 
          LDD    CM+1        GET CPU 1 ON/OFF STATUS
          SHN    -1 
          LPN    1
          STM    TCPS+1      BIT 0 SET IF CPU 1 OFF 
          LMN    1
          ADN    1           SET NUMBER OF CPUS 
          STA    NCPU 
          LDD    CM+1        CHECK MAINFRAME TYPE 
          STD    T1 
          SHN    -6 
          LPN    31 
          ZJN    PRS14       IF CYBER 170 AND NOT CYBER 176 
          LDN    CPUX-CPU7   DISABLE SCR PROCESSING 
          RAM    CPUA 
          LDD    CM+1 
          SHN    21-13
          MJN    PRS14       IF NOT CYBER 180 
          LDC    UJNI+CPU2.1 SET MAINTENANCE REGISTER PROCESSING
          STM    CPUB 
          LDD    CN+3        SET PROCESSOR A CONNECT CODE 
          STM    PCCC 
          LDD    CN+4        SET PROCESSOR B CONNECT CODE 
          STM    PCCC+1 
 PRS14    LDD    CM+2        SET MACHINE MEMORY SIZE/100B 
          LPN    77 
          SHN    14 
          ADD    CM+3 
          STA    MEMS 
          LDN    CMRL        SET CMR SIZE/100 
          CRD    CM 
          LDD    CM+4 
          STA    CMRS 
          LDN    ECRL        SET USER EXTENDED MEMORY SIZE
          CRD    CM 
          LDD    CM+1 
          STA    UECS 
          LDC    EPBP        READ NUMBER OF EXTENDED MEMORY/PP BUFFERS
          CRD    CM 
          LDD    CM+3 
          SHN    -6 
          STA    ECPB        STORE IN HEADER
          LDC    BIOL        CHECK FOR BUFFERED I/O CHANNELS
          CRD    CM 
          LDD    CM+2        SET BUFFERED I/O CONTROL TABLE ADDRESS 
          RAM    CBPA+1 
          SHN    -14
          ADD    CM+1 
          RAM    CBPA 
          LDD    CM+1 
          SHN    14 
          LMD    CM+2 
          ZJN    PRS15       IF NO BUFFERED I/O 
          ADN    CCTP        READ CHANNEL TABLE POINTER WORD
          CRD    CM 
          ADN    CBTP-CCTP   READ CONTROL BUFFER POINTER WORD 
          CRD    AB 
          LDD    CM 
          RAM    CBCB        SET NUMBER OF CHANNEL TABLES 
          LDD    CM+4        PRESET CHANNEL TABLE ADDRESS 
          STM    CBCA+1 
          LDD    CM+3 
          RAM    CBCA 
          LDC    CBC         ENABLE BUFFERED I/O PROCESSING 
          STM    DCBC 
          LDC    CBP
          STM    DCBP 
          LDD    AB          SET BUFFER COUNT IN HEADER 
 PRS15    STA    TIOB 
  
*         SET IAF/TELEX INFORMATION IN HEADER RECORD. 
  
          LDN    TTEQ        FETCH *TT* EST ENTRY 
          SFA    EST
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          LPC    777
          STA    TRMS 
  
*         SET MASS STORAGE AND TAPE INFORMATION IN HEADER RECORD. 
  
          LDN    ESTP        SET EST POINTER
          CRD    T1 
          LDN    NOPE        INITIALIZE EST ORDINAL FOR SEARCH
          STD    T1 
          LDN    0           INITIALIZE TAPE EQUIPMENT COUNTER
          STD    T2 
          STD    T5 
          STD    ME          INITIALIZE MS ENTRY COUNTER
 PRS16    SFA    EST,T1      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+3        SET EQUIPMENT STATUS 
          LMC    2RMT 
          ZJN    PRS17       IF *MT*
          LMC    2RNT&2RMT
          ZJN    PRS17       IF *NT*
          LMC    2RCT&2RNT
          ZJN    PRS17       IF *CT*
          LMC    2RAT&2RCT
          NJN    PRS18       IF NOT *AT*
 PRS17    AOD    T2          INCREMENT TAPE EQUIPMENT COUNTER 
 PRS18    LDD    CM 
          SHN    21-13
          PJN    PRS19       IF NOT MASS STORAGE
          AOD    ME          COUNT MS ENTRY 
          LDD    T5 
          NJN    PRS19       IF MST FWA ALREADY SET 
          LDD    CM+4        SAVE MST FWA 
          STD    T5 
 PRS19    AOD    T1          ADVANCE EST ORDINAL
          LMD    T3 
          NJN    PRS16       IF NOT END OF EST
          STD    LO          INDICATE PRESET PROCESSING 
          LDD    T2 
          STA    MTXS 
          LDD    T3          SET LAST ORDINAL + 1 OF EST
          STD    LE 
          STA    ESTL 
          LDD    ME          SET NUMBER OF MASS STORAGE EST ENTRIES 
          STD    T1 
          STA    MXMS 
          LDD    T5          SET FWA MST-S
          STM    CDAB 
          LDK    HBUF+HFBL+MSUN  SET MS DATA BUFFER ADDRESS 
          STD    VB 
          LDK    DFBL        SET DATA RECORD LENGTH 
          STD    RX 
 PRS20    LDD    T5          GET MS DATA FROM MST 
          SHN    3
          ADK    TDGL 
          CRD    CM 
          ADK    DDLL-TDGL
          CRD    AB 
          LDD    AB+4        SET UNIT NUMBER
          LPN    77 
          STI    VB 
          LDD    CM          SET MS TRACK CAPACITY
          STM    TRKC-MSUN,VB 
          LDN    HMBL        ADVANCE TO NEXT MS DATA BLOCK
          RAD    VB 
          LDN    MSTXL/10    ADVANCE TO NEXT MST
          RAD    T5 
          LDN    DMBL        CALCULATE DATA BLOCK LENGTH
          RAD    RX 
          SOD    T1 
          NJN    PRS20       IF MORE MST-S TO SCAN
          LDN    DSSL        SET LIBDECK NUMBER 
          CRD    CM 
          LDD    CM+4 
          STA    LIBD 
          LDC    MMFL        SET MACHINE ID 
          CRD    CM 
          LDD    CM 
          STA    MCID 
          LDC    MSAP        SET MASS STORAGE ALLOCATION AREA 
          CRD    CM 
          LDN    P.MSAA/5 
          ERRNZ  P.MSAA/5*5-P.MSAA  CODE DEPENDS ON SIZE
          STD    T1 
          LDD    CM 
          LPN    77 
          SHN    14 
          ADD    CM+1 
          CRM    HBUF+MSAA,T1  READ DEVICE SELECTION INFORMATION
          LDN    IPRL        SET SECONDARY ROLLOUT THRESHOLD
          CRD    CM 
          LDD    CM+1 
          STA    SROT 
  
*         SET FNT, EJT, QFT, FOT, AND SERVICE CLASS FIXED BLOCK 
*         INFORMATION IN HEADER RECORD. 
  
  
          LDN    FNTP        READ FNT POINTER 
          CRD    CM 
          LDD    CM+2        SET NUMBER OF FNT ENTRIES
          STA    MFNT 
          LDN    EJTP        READ EJT POINTER 
          CRD    CM 
          LDD    CM+2        STORE NUMBER OF EJT ENTRIES
          STA    MEJT 
          LDN    QFTP        READ QFT POINTER 
          CRD    CM 
          LDD    CM+2        STORE NUMBER OF QFT ENTRIES
          STA    MQFT 
          LDC    FOTP        READ FOT POINTER 
          CRD    CM 
          LDD    CM+2        SET NUMBER OF FOT ENTRIES
          STA    MFOT 
          LDN    ESTE        SET LENGTH OF EST ENTRY
          STA    ESTS 
          LDN    FNTE        SET SIZE OF FNT ENTRY
          STA    FNTS 
          LDN    EJTE        SET LENGTH OF AN EJT ENTRY 
          STA    EJTS 
          LDN    QFTE        SET LENGTH OF A QFT ENTRY
          STA    QFTS 
          LDN    MXSC        SET MAXIMUM NUMBER OF SERVICE CLASSES
          STA    MXNS 
          LDN    MXJS        SET MAXIMUM NUMBER OF JOB STATUSES 
          STA    MNJS 
          LDN    MXCS        SET MAXIMUM NUMBER OF CONNECTION STATUSES
          STA    MNCS 
  
*         SET SYSTEM DELAY PARAMETERS IN HEADER RECORD. 
  
          LDN    MSCL        SET RECALL AND SWITCH DELAYS 
          CRD    CM 
          LDD    CM+1        SET CPU RECALL DELAY 
          STA    CPUD 
          LDD    CM+2        SET PP AUTO RECALL DELAY 
          STA    PPRD 
          LDD    CM+4        SET MEMORY PAD SIZE
          STA    MPSZ 
          LDN    JSCL        SET JOB SCHEDULER CONTROL WORDS
          CRD    CM 
          LDD    CM+1        SET INPUT FILE SCHEDULING INTERVAL 
          STA    ISCI 
          LDD    CM+2        SET SCHEDULER CYCLE INTERVAL 
          STA    SCIN 
  
*         SET SYSTEM CONSTANTS IN HEADER RECORD.
  
 PRS22    LDN    CTCUL       SET SYSTEM CONSTANTS 
          STA    CON1 
          LDN    5*CTALL
          STA    CON2 
          LDN    MXOT 
          STA    CON3 
          LDN    MXFT 
          STA    CON7 
          LDN    MXRS 
          STA    CON8 
          LDN    10 
          STD    T1 
          LDN    TIML        READ SYSTEM TIME/DATE/VERSION
          CRM    HBUF+TIME,T1 
          ERRNZ  DTEL-TIML-1 CODE DEPENDS ON LOCATION 
          ERRNZ  SYTL-DTEL-1 CODE DEPENDS ON LOCATION 
          ERRNZ  SVNL-SYTL-4 CODE DEPENDS ON LOCATION 
          ERRNZ  DATE-TIME-5 CODE DEPENDS ON LOCATION 
          ERRNZ  SYSV-DATE-5 CODE DEPENDS ON LOCATION 
          ERRNZ  P.SYSV-6*5  CODE DEPENDS ON SIZE 
  
*         CALCULATE SIZE OF HEADER RECORD.
  
          LDN    0
          STD    AB+4 
          STD    MS 
          LDD    VB          CALCULATE LENGTH OF DATA IN BUFFER 
          ADC    -HBUF
          STD    SC 
 PRS23    AOD    MS          CALCULATE WORDS OF DATA IN BUFFER
          LCN    5
          RAD    SC 
          SBN    5
          PJN    PRS23       IF MORE WORDS IN BUFFER
          LDN    P.ESTB/5    CALCULATE WORDS IN EST BLOCK 
          ERRNZ  P.ESTB/5*5-P.ESTB  BLOCK LENGTH ERROR
          STD    T1 
 PRS24    LDD    LE          CALCULATE NUMBER OF EST WORDS
          RAD    AB+4 
          SOD    T1 
          NJN    PRS24       IF MORE WORDS IN EST ENTRY 
          LDK    P.JCBA/5    NUMBER OF JOB CONTROL BLOCK WORDS
          ERRNZ  P.JCBA/5*5-P.JCBA  BLOCK LENGTH ERROR
          STD    LI 
          ADD    AB+4 
          ADD    MS 
          STD    WC          SET HEADER RECORD WORD COUNT 
          LDN    1           SET RECORD COUNT 
          STD    RC 
          LDD    SC 
          ZJN    PRS25       IF NO LEFT OVER BYTES
          AOD    WC          ADJUST FOR PARTIAL WORD
 PRS25    NFA    FO,R 
          CRD    CN          RETRIEVE SAMPLE FILE NAME
          LDD    FO 
          STD    CM+4 
          LDN    DLFS        CLEAR LOCAL FNT ENTRY
          STD    CM+1 
          MONITOR  PLFM 
          SFA    FNT,IR+2    ENTER DATA IN SYSTEM FNT 
          CWD    CN 
          ADN    FSTG 
          CWD    FS 
  
*         SET JOB CONTROL BLOCK AND EST INFORMATION IN HEADER 
*         RECORD AND PROCESS HEADER SECTOR WRITES AS NEEDED.
  
 P3CS     EQU    *           *3CR* LWA+1 LIMIT
  
          EXECUTE  3CS       LOAD WRITE ROUTINES
          RJM    /3CS/SIS    SET FILE INTERLOCK 
          SETMS  IO,(NS),HBUF-4 
          RJM    /3CS/RNT    REQUEST TRACKS FOR HEADER RECORD 
          LDN    1
          RJM    RJC         GET FWA JOB CONTROL BLOCKS 
          RJM    RDB         READ DATA INTO HEADER BUFFER 
          LDD    AB+4        SET EST BLOCK LENGTH 
          STD    LI 
          LDN    0
          SFA    EST         GET FWA EST
          RJM    RDB         READ EST DATA INTO HEADER BUFFER 
          LDD    WC          DUMP REMAINING WORDS TO FILE 
          RJM    /3CS/DPB 
          LDC    HBUF+FSEI   FORCE *WES* TO USE HEADER BUFFER 
          STM    /3CS/WESA
          LDC    HBUF 
          STM    /3CS/WESB
          RJM    /3CS/WES    WRITE EOI SECTOR 
          RJM    /3CS/CIS    CLEAR FILE INTERLOCK 
  
*         MOVE PPU TO SYSTEM CONTROL POINT. 
  
          RJM    CRS         CHECK RECALL STATUS
          ZJN    PRS26       IF AUTO RECALL NOT SET 
          LDN    ZERL        CLEAR (SYSTEM REQUEST) 
          CRD    CM 
          LDD    RA 
          SHN    6
          ADN    1
          CWD    CM 
          MONITOR RCPM       RESTART CPU
 PRS26    LDD    NC 
          STD    CM+1 
          MONITOR CCAM       CHANGE TO SYSTEM CONTROL POINT 
          LDD    IA          RESET INPUT REGISTER 
          CRD    IR 
          LDC    PRSB        * CPD - INITIATED.*
          RJM    DFM
          LDN    0           ENTER INITIATION EVENT 
          STD    CM+1 
          LDC    /EVENT/CPIE
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          MONITOR EATM
*         LDN    0
          STD    WC 
 PRS27    AOD    WC          SET DATA RECORD ROUNDED WORD COUNT 
          LCN    5
          RAD    RX 
          SBN    1
          PJN    PRS27       IF MORE BYTES IN RECORD
          LDN    0           CALCULATE MAXIMUM DATA RECORDS IN BUFFER 
          STD    RX 
          LDK    BUFFLW 
          SBD    WC 
 PRS28    STD    T1 
          AOD    RX          INCREMENT RECORD COUNT 
          LDD    T1 
          SBD    WC 
          PJN    PRS28       IF MORE ROOM IN BUFFER 
          LJM    CPD11       ENTER CPD MAIN LOOP
  
  
 PRSB     DATA   C* CPD - INITIATED.* 
 PRSC     CON    LDOS        DECREMENT LOW CORE FIELD BY ONE
          CON    INWL        WORD ADDRESS 
          CON    2*100+1     BIT ADDRESS/FIELD WIDTH
          CON    0,0
 PRSD     BSS    0           TABLE OF FAST LOOP DELAY RANGES
          CON    777         1X PP SPEED
          CON    1777        2X PP SPEED
          CON    3777        4X PP SPEED
 PRSDL    EQU    *-PRSD 
 ERR      SPACE  4,10 
**        ERR - PROCESS PRESET ERROR. 
* 
*         ENTRY  (A) = ERROR MESSAGE ADDRESS. 
* 
*         EXIT   TO *PPR*.
* 
*         CALLS  DFM. 
* 
*         MACROS MONITOR. 
  
  
 ERR      BSS    0           ENTRY
          RJM    DFM         ISSUE ERROR MESSAGE
          LDD    IR+2 
          ZJN    ERR1        IF NO RESERVED SLOT IN SYSTEM FNT
          STD    CM+1 
          LDN    PFNT        RELEASE RESERVED ENTRY 
          STD    CM+2 
          MONITOR  MTRM 
 ERR1     MONITOR  ABTM 
          LJM    PPR         RETURN TO PP RESIDENT
  
  
 ERRA     DATA   C* CPD - USER ACCESS NOT VALID.* 
 ERRB     DATA   C* CPD - PARAMETER ERROR.* 
 ERRC     DATA   C* CPD - ALREADY ACTIVE.*
 ERRD     DATA   C* CPD - FILE NOT FOUND.*
 ERRE     DATA   C* CPD - FILE STATUS ERROR.* 
 ERRF     DATA   C* CPD - OVERLAY NOT IN RPL.*
 RDB      SPACE  4,20 
**        RDB - READ DATA INTO BUFFER.
* 
*         ENTRY  (A) = CM ADDRESS TO READ DATA FROM.
*                (BA) = HEADER BUFFER BASE ADDRESS. 
*                (LI) = WORD COUNT TO READ FROM CM. 
*                (MS) = NUMBER OF DATA WORDS IN BUFFER. 
*                (SC) = NUMBER OF EXCESS DATA BYTES IN BUFFER.
*                (VB) = FWA TO READ DATA TO IN PP.
*                (WC) = REMAINING WORD COUNT OF HEADER RECORD.
* 
*         EXIT   (BA) = HEADER BUFFER BASE ADDRESS. 
*                (MS) = UPDATED NUMBER OF DATA WORDS IN BUFFER. 
*                (VB) = LWA+1 OF DATA IN BUFFER.
*                (WC) = REMAINING WORD COUNT OF HEADER RECORD.
* 
*         USES   LI, T1, AB - AB+2. 
* 
*         CALLS  RWB, /3CS/DPB. 
  
  
 RDB3     LDD    LI          READ WORDS TO BUFFER 
          RJM    RWB
  
 RDB      SUBR               ENTRY/EXIT 
          STD    AB+1        SAVE CM ADDRESS TO READ FROM 
          SHN    -14
          STD    AB 
 RDB1     LDK    NWHB        CALCULATE WORDS REMAINING IN BUFFER
          SBD    MS 
          STD    AB+2 
          SBD    LI          WORD COUNT TO READ FROM CM 
          PJN    RDB3        IF SUFFICIENT ROOM IN BUFFER 
          LDD    AB+2        FILL HEADER BUFFER 
          RJM    RWB
          LDD    LI          CALCULATE WORDS LEFT TO READ 
          SBD    AB+2 
          STD    LI 
          LDC    NWHB+10000  DUMP HEADER BUFFER 
          RJM    /3CS/DPB 
          LDK    HBUF        RESET HEADER BUFFER BASE ADDRESS 
          STD    BA 
          STD    VB 
          LDD    WC          DECREMENT WORDS REMAINING IN RECORD
          SBD    MS 
          STD    WC 
          LDN    0           INITIALIZE BUFFER WORD COUNT 
          STD    MS 
          LDD    SC          MOVE EXCESS BYTES TO START OF BUFFER 
          STD    T1 
          RAD    VB 
 RDB2     SOD    T1 
          MJN    RDB1        IF END OF EXCESS BYTES 
          LDM    HBUF+HBUFL,T1
          STM    HBUF,T1
          UJN    RDB2        LOOP FOR NEXT BYTE 
 RWB      SPACE  4,15 
**        RWB - READ WORDS TO BUFFER. 
* 
*         ENTRY  (A) = NUMBER OF WORDS TO READ. 
*                (AB - AB+1) = CM ADDRESS OF DATA.
*                (MS) = NUMBER OF DATA WORDS IN BUFFER. 
*                (VB) = FWA TO READ DATA TO IN PP.
* 
*         EXIT   (AB - AB+1) = LWA+1 DATA IN CM.
*                (MS) = UPDATED NUMBER OF DATA WORDS IN BUFFER. 
*                (VB) = LWA+1 DATA IN BUFFER. 
* 
*         USES   T1.
  
  
 RWB      SUBR               ENTRY/EXIT 
          ZJN    RWBX        IF NO WORDS TO READ
          STD    T1 
          RAD    MS          UPDATE NUMBER OF DATA WORDS IN BUFFER
          LDD    VB          SET PP BUFFER ADDRESS FOR READ 
          STM    RWBA 
          LDD    AB          GET CM ADDRESS OF DATA 
          SHN    14 
          ADD    AB+1 
          CRM    **,T1
 RWBA     EQU    *-1
          STD    AB+1        SAVE UPDATED CM ADDRESS
          SHN    -14
          STD    AB 
          LDD    T1          ADVANCE PP BUFFER LWA+1
          SHN    2
          ADD    T1 
          RAD    VB 
          UJN    RWBX        RETURN 
          SPACE  4,10 
          CFNT
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPCRS 
*CALL     COMPRJC 
*CALL     COMPSEI 
          SPACE  4,10 
          USE    LITS        FLUSH LITERALS 
          USE    *
          TITLE  HEADER RECORD BUFFER ALLOCATION. 
 HBUF     SPACE  4,10 
**        HEADER RECORD BUFFER ALLOCATION.
  
  
          BSS    4           HEADER BYTES FOR SECTOR AND FOR READ-BACK
 HBUF     EQU    *           HEADER RECORD BUFFER 
  
 RHBS     EQU    EPFW-4-HBUF REMAINING HEADER BUFFER SPACE
 NHSC     EQU    RHBS/500B   NUMBER OF SECTORS IN HEADER BUFFER 
 NWHB     EQU    NHSC*100B   NUMBER OF WORDS IN HEADER BUFFER 
 HBUFL    EQU    NHSC*500B   LENGTH OF HEADER BUFFER IN BYTES 
 HMNL     EQU    HFBL+MSMX*HMBL  MINIMUM HEADER LENGTH
          ERRNG  HBUFL-HMNL  SECTOR SPACE OVERFLOWED
  
          QUAL   *
          TTL    3CR - CPD OVERLAID LOOP OPERATIONS.
          TITLE 
          QUAL   3CR
          IDENT  3CR,PLOX    CPD OVERLAID LOOP OPERATIONS 
          ORG    COVL 
*COMMENT  3CR - CPD OVERLAID LOOP OPERATIONS. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 PMR      SPACE  4,10 
**        PLO - PRESET *CPD* OVERLAID LOOP OPERATIONS.
  
  
 PLO      SUBR               ENTRY/EXIT 
          UJN    PLOX        RETURN 
          TITLE  LOOP OPERATION ROUTINES. 
 ACA      SPACE  4,10 
**        ACA - ACCUMULATE CP AND PCP ACTIVITY. 
* 
*         ENTRY  (NC) = NUMBER OF CONTROL POINTS. 
*                (NM) = NUMBER OF MCT ENTRIES - 1.
* 
*         EXIT   CONTROL POINT ACTIVITY UPDATED.
* 
*         USES   AB - AB+4, CM - CM+4, CN - CN+4, T1 - T7.
* 
*         CALLS  CCA. 
* 
*         MACROS ADA, SFA.
  
  
 ACA6     LDN    ACML+AECL*0 SET AVAILABLE CENTRAL MEMORY 
          CRD    CM 
          LDD    CM          ACCUMULATE AVAILABLE CM
          SHN    14 
          LMD    CM+1 
          ADA    MMAV 
          LDD    CM+3        ACCUMULATE AVAILABLE USER EM 
          ADA    ECAV 
  
 ACA      SUBR               ENTRY/EXIT 
          LDD    NM          SET NUMBER OF MCT ENTRIES - 1
          STD    T1 
  
*         SAMPLE CONTROL POINT ACTIVITY.
  
 ACA1     SOD    T1 
          ZJN    ACA6        IF ALL CONTROL POINTS PROCESSED
          RJM    CCA         SET CP/PCP ADDRESS 
          ADK    TFSW        CHECK FOR JOB ASSIGNMENT TO CP/PCP 
          CRD    CM 
          LDD    CM 
          ZJN    ACA1        IF JOB NOT ASSIGNED
          SFA    EJT
          ADN    SCLE-JSNE   GET SERVICE CLASS
          CRD    CN 
          LDD    CN 
          SHN    -6 
          STD    T2 
          LDD    T1          SET CP/PCP ADDRESS 
          RJM    CCA
          ADK    STSW        GET JOB STATUS WORD
          CRD    CN 
          ADN    FLSW-STSW   SET FIELD LENGTH 
          CRD    T3 
          ADN    ECSW-FLSW   SET EXTENDED MEMORY WORD 
          CRD    AB 
          ADN    JCIW-ECSW   SET JOB CONTROL WORD 
          CRD    CM 
          SOD    T2 
          MJN    ACA1.1      IF RESERVED SERVICE CLASS
          SBN    MXJC-1 
          PJN    ACA1.1      IF NO JOB CONTROL BLOCK
          LDD    NC 
          SBD    T1 
          PJN    ACA1.2      IF CONTROL POINT 
          LDD    T3+4        ACCUMULATE CM FL BY SERVICE CLASS
          ADD    T3          ADD NFL SPACE
          ADA    MPCP,T2
          LDD    AB+4        ACCUMULATE EM FL BY SERVICE CLASS
          ADA    ECPC,T2
 ACA1.1   UJN    ACA2        CONTINUE 
  
 ACA1.2   LDD    T3+4        ACCUMULATE CM FL BY SERVICE CLASS
          ADD    T3          ADD NFL SPACE
          ADA    MMCP,T2
          LDD    AB+4        ACCUMULATE ECS FL BY SERVICE CLASS 
          ADA    ECCP,T2
 ACA2     LDD    CM+2        CHECK SUBSYSTEM ID 
          SBN    IRSI 
          ZJN    ACA3        IF ROLLOUT INHIBITED 
          ADC    -LSSI+IRSI 
          MJN    ACA4        IF NOT SUBSYSTEM 
 ACA3     STD    T2 
          LDD    T3+4        ACCUMULATE MEMORY FOR SUBSYSTEMS 
          ADD    T3          ADD NFL SPACE
          ADA    SMCP,T2
 ACA4     LDD    CN          CHECK CONTROL POINT STATUS 
          SHN    -11
          SBN    WCPS 
          MJN    ACA5        IF NOT *W*, *X*, OR *I* STATUS 
          ADD    BA 
          STD    T2 
          AOM    WSCP,T2     INCREMENT CONTROL POINT STATUS COUNT 
 ACA5     LJM    ACA1        PROCESS NEXT CONTROL POINT 
  
  
          ERRNZ  ACML-AECL   PARAMETER CALCULATION ERROR
          ERRNZ  XSCP-WSCP-1 OFFSET ERROR 
          ERRNZ  ARCP-WSCP-2 OFFSET ERROR 
          ERRNZ  XCPS-WCPS-1 OFFSET ERROR 
          ERRNZ  ICPS-WCPS-2 OFFSET ERROR 
          ERRNZ  P.ARCP-1    OFFSET ERROR 
 ACP      SPACE  4,10 
**        ACP - ACCUMULATE CONCURRENT PP ACTIVITY.
* 
*         EXIT   *CTCP* AND *NCPA* FIELDS INCREMENTED IF NECESSARY. 
* 
*         USES   T0, CM - CM+4. 
* 
*         NOTE   CODE ASSUMES ACTIVE = PHYSICAL - AVAILABLE.
  
  
 ACP      SUBR               ENTRY/EXIT 
          LDN    CPPL        CHECK CPP CONFIGURATION
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          ZJN    ACPX        IF NO CONCURRENT PP-S ON SYSTEM
          STD    T0 
          LDN    PPAL        CHECK NUMBER OF AVAILABLE CPP-S
          CRD    CM 
          LDD    CM+3 
          LPN    77 
          STD    CM+3 
          NJN    ACP1        IF CPP(S) AVAILABLE
          ADO    NCPA        INCREMENT *NO CPP AVAILABLE* COUNTER 
 ACP1     LDD    T0 
          SBD    CM+3 
          ADA    CTCP        INCREMENT *ACTIVE CPP-S* COUNTER 
          UJN    ACPX        RETURN 
 AEA      SPACE  4,10 
**        AEA - ACCUMULATE EST ACTIVITY.
* 
*         ENTRY  (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
*                (LE) = LAST ORDINAL + 1 OF DEFINED EST ENTRIES.
* 
*         EXIT   EST ACTIVITY UPDATED.
* 
*         USES   T1, T2, VB, CM - CM+4, CN - CN+4.
* 
*         MACROS ADO, SFA.
  
  
 AEA      SUBR               ENTRY/EXIT 
          LDD    BA          SET MASS STORAGE TRACK ENTRY FWA 
          ADK    DFBL+TRES
          STD    VB 
          LDN    NOPE        SET FIRST EST ORDINAL
          STD    T1 
  
*         SAMPLE EQUIPMENT STATUS.
  
 AEA1     SFA    EST,T1      READ MST ENTRY 
          ADK    EQDE 
          CRD    CM 
          ADK    EQAE-EQDE
          CRD    CN 
          LDD    CM          CHECK MASS STORAGE 
          SHN    21-13
          PJN    AEA3        IF NOT MASS STORAGE
          LDD    CM+4 
          SHN    3
          ADK    TDGL 
          CRD    CM 
          LDD    CM+4        ACCUMULATE AVAILABLE TRACKS
          RAM    1,VB 
          SHN    -14
          RAI    VB 
          ERRNZ  P.TRES-2    CODE DEPENDS ON SIZE 
          LDN    DMBL 
          RAD    VB          ADVANCE TO NEXT MS TRACK ENTRY 
 AEA2     AOD    T1          INCREMENT EST ORDINAL
          LMD    LE          CHECK END OF DEFINED EST ENTRIES 
          NJN    AEA1        IF EST NOT COMPLETE
          UJN    AEAX        RETURN 
  
 AEA3     LDD    CN+4 
          ZJN    AEA2        IF NOT ASSIGNED
          LDD    CM 
          LPN    2
          NJN    AEA2        IF DEVICE IS DOWN OR OFF 
          LDD    CM+3        GET DEVICE TYPE
          LMC    2RMT 
          ZJN    AEA4        IF *MT*
          LMC    2RCT&2RMT
          ZJN    AEA3.2      IF *CT*
          LMC    2RNT&2RCT
          ZJN    AEA3.1      IF *NT*
          LMC    2RAT&2RNT
          NJN    AEA2        IF NOT *AT*
          LDN    1
 AEA3.1   ADN    1
 AEA3.2   ADN    1
 AEA4     STD    T2          SET TAPE DEVICE TYPE 
          ADO    DRES,T2     INCREMENT TAPE DRIVES IN USE 
          UJN    AEA2        LOOP 
 AIA      SPACE  4,10 
**        AIA - ACCUMULATE IAF ACTIVITY.
* 
*         EXIT   IAF ACTIVITY UPDATED.
* 
*         USES   T1, AB - AB+4, CM - CM+4, CN - CN+4. 
* 
*         CALLS  PIR, RRR, SRR. 
* 
*         MACROS ADA. 
  
  
 AIA      SUBR               ENTRY/EXIT 
          LDC    /IAF/VCPT*1S7 CHECK IAF CONTROL POINT
          ADN    JCIW 
          CRD    CM 
          LDD    CM+2 
          LMC    IFSI 
          NJN    AIAX        IF IAF NOT PRESENT 
          RJM    PIR         PRESET WITH IAF R-REGISTER 
          RJM    SRR         SET IAF R-REGISTER 
          LDD    TA          SET IAF RA 
          SHN    6
          ADN    /IAF/VANL   SET NUMBER OF ACTIVE USERS 
          CRD    AB 
          ADN    /IAF/VPAL-/IAF/VANL SET POT CONTROL WORDS
          CRD    CN 
          ADN    /IAF/VPUL-/IAF/VPAL
          CRD    CM 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    AB+4        ACCUMULATE ACTIVE USER COUNT 
          ADA    ANTX 
          LDD    CN+4        ACCUMULATE POTS ALLOCATED
          ADA    PATX 
          LDD    CM+4        ACCUMULATE POTS IN USE 
          ADA    PUTX 
          LJM    AIAX        RETURN 
 CMR      SPACE  4,10 
**        CMR - CHECK STORAGE MOVE REQUEST. 
* 
*         ENTRY  (LI) = OPERATION LOOP INDEX. 
* 
*         EXIT   STORAGE MOVE REQUEST ACTIVITY UPDATED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         MACROS ADO. 
  
  
 CMR3     ADO    SMRP        INCREMENT STORAGE MOVE REQUEST PENDING 
  
 CMR      SUBR               ENTRY/EXIT 
          LDN    CMCL        CHECK STORAGE MOVE REQUEST 
          CRD    CM 
          LDD    CM 
          LMC    7777 
          ZJN    CMR2        IF NO STORAGE MOVE REQUEST PENDING 
          LDD    LI          CHECK OPERATION LOOP INDEX 
          ZJN    CMR3        IF FAST LOOP OPERATION 
          LDN    0           SET INITIAL OFFSET 
          STD    T1 
 CMR1     LDM    LSMR,T1     COMPARE MOVE REQUESTS
          LMM    CM,T1
          NJN    CMR2        IF NOT EQUAL 
          AOD    T1          INCREMENT OFFSET 
          LMN    5
          NJN    CMR1        IF COMPARE NOT COMPLETE
          ADO    SSMP        INCREMENT SAME STORAGE MOVE PENDING
 CMR2     LDD    LI          CHECK OPERATION LOOP INDEX 
          ZJN    CMRX        IF FAST LOOP OPERATION 
          LDD    MA          SET LAST MOVE REQUEST
          CWD    CM 
          CRM    LSMR,ON
          UJN    CMRX        RETURN 
  
  
 LSMR     BSSZ   5           LAST STORAGE MOVE REQUEST BUFFER 
 PPU      SPACE  4,10 
**        PPU - PP USAGE. 
* 
*         ENTRY  (NP) = NUMBER OF PP-S AVAILABLE. 
* 
*         EXIT   PP USAGE UPDATED.
* 
*         USES   CM - CM+4. 
* 
*         MACROS ADA, ADO.
  
  
 PPU      SUBR               ENTRY/EXIT 
          LDN    PPAL        READ AVAILABLE PP-S
          CRD    CM 
          LDD    NP          ACCUMULATE PP USAGE
          SBD    CM+4 
          ADA    CTPP 
          LDC    PQRL        READ PP QUEUE POINTER
          CRD    CM 
          LDD    CM+4 
          ZJN    PPU3        IF NO PP-S QUEUED
          ADO    NPAV        INCREMENT NO PP AVAILABLE COUNT
 PPU3     LDN    JSCL 
          CRD    CM 
          LDD    CM 
          SHN    21-13
          PJN    PPU4        IF JOB SCHEDULER NOT ACTIVE
          ADO    NSJA        INCREMENT JOB SCHEDULER ACTIVE COUNT 
 PPU4     LDC    SDAP        READ *MTR* DATA
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          ADN    MTRS 
          CRD    CM 
          LDD    CM+4        ACCUMULATE *MTR* CYCLE TIME
          ADA    MTCT 
          LJM    PPUX        RETURN 
 SAA      SPACE  4,10 
**        SAA - SET EXCHANGE PACKAGE CPU ACCUMULATOR ADDRESS. 
* 
*         ENTRY  (A) = SYSTEM CONTROL POINT EXCHANGE PACKAGE TYPE.
*                (AB+3 - AB+4) = *CPUMTR* SYSTEM CONTROL POINT EXCHANGE 
*                                PACKAGE TABLE POINTER. 
* 
*         EXIT   (A) = ADDRESS OF EXCHANGE PACKAGE CPU ACCUMULATOR. 
*                (A) = 0 IF EXCHANGE PACKAGE NOT IN USE.
* 
*         USES   (CN - CN+4). 
  
  
 SAA      SUBR               ENTRY/EXIT 
          STD    CN          SAVE INDEX 
          LDD    AB+3        SET EXCHANGE PACKAGE TABLE ADDRESS 
          SHN    14 
          ADD    AB+4 
          ADD    CN          SET ENTRY ADDRESS
          CRD    CN          READ TABLE ENTRY 
          LDD    CN+3        SET EXCHANGE PACKAGE ADDRESS 
          LPN    77 
          SHN    14 
          ADD    CN+4 
          ADN    CTMW        SET ACCUMULATOR ADDRESS
          UJN    SAAX        RETURN 
 SNO      SPACE  4,10 
**        SNO - SNAPSHOT LOOP OPERATIONS
* 
*         EXIT   SNAPSHOT LOOP VARIABLES UPDATED. 
* 
*         USES   AB - AB+4, CM - CM+4.
* 
*         CALLS  SAA. 
* 
*         MACROS RDM. 
  
  
 SNO      SUBR               ENTRY/EXIT 
          LDN    INSL        SAMPLE INSTALLATION AREA 
          RDM    INSA 
          LDN    PDTL        GET PACKED DATE AND TIME 
          RDM    PDTM 
          ADN    RTCL-PDTL-P.PDTM/5  SAMPLE REAL TIME CLOCK 
          RDM    RLTM 
          LDC    SDAP        SAMPLE STATISTICAL DATA AREA 
          CRD    CM 
          LDD    CM 
          SHN    14 
          ADD    CM+1 
          RDM    SDAA 
          LDD    NC          SAMPLE PROGRAM MODE CPUMTR TIME
          SHN    7
          ADN    CPTW 
          RDM    PGTM 
          LDC    CMTP        GET *CPUMTR* FWA 
          CRD    AB 
          LDD    AB+3 
          SHN    14 
          ADD    AB+4 
          ADN    CSXP        EXCHANGE PACKAGE TABLE POINTER 
          CRD    AB 
          LDN    SMXT        SET STORAGE MOVE ACCUMULATOR ADDRESS 
          RJM    SAA
          RDM    SMTM        SET STORAGE MOVE TIME
          LDM    DCBP 
          ZJN    SNO1        IF BUFFERED I/O NOT CONFIGURED 
          LDN    PSXT        SET PSEUDO-PP ACCUMULATOR ADDRESS
          RJM    SAA
          RDM    PSTM        SET PSEUDO-PP TIME 
 SNO1     LDM    TCPS 
          ZJN    SNO2        IF CPU 0 *ON*
          LDN    MIXT        SET MAIN IDLE PACKAGE ACCUMULATOR ADDRESS
          UJN    SNO3        READ CPU 1 IDLE TIME 
  
 SNO2     LDN    MIXT        SET MAIN IDLE PACKAGE ACCUMULATOR ADDRESS
          RJM    SAA
          RDM    I0TM        SET CPU 0 IDLE TIME
          LDM    TCPS+1 
          NJN    SNO4        IF CPU 1 *OFF* 
          LDN    DIXT        SET CPU 1 IDLE PACKAGE ACCUMULATOR ADDRESS 
 SNO3     RJM    SAA
          RDM    I1TM        SET CPU 1 IDLE TIME
 SNO4     LJM    SNOX        RETURN 
 UEA      SPACE  4,10 
**        UEA - UPDATE EJT ENTRY. 
* 
*         ENTRY  (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
* 
*         EXIT   EJT ACTIVITY UPDATED.
* 
*         USES   CM+2, AB - AB+4, CN - CN+4, T1 - T5. 
* 
*         MACROS ADA, ADO, SFA. 
  
  
 UEA      SUBR               ENTRY EXIT 
          LDN    EJTP        READ EJT POINTER 
          CRD    CM 
          UJN    UEA2        ACCESS EJT 
  
*         SEARCH EJT TO DETERMINE JOB STATUS BY SERVICE CLASS.
  
 UEA1     SOD    CM+2        DECREMENT EJT ORDINAL
          ZJN    UEAX        IF NO MORE ENTRIES 
 UEA2     SFA    EJT,CM+2    ACCESS EJT ENTRY 
          CRD    CN          GET JOB STATUS 
          ADN    SCHE-JSNE   GET SCHEDULER FIELD
          CRD    AB 
          ADN    SCLE-SCHE   GET SERVICE CLASS
          CRD    T1 
          LDD    CN 
          ZJN    UEA1        IF FREE ENTRY
          LDD    T1 
          SHN    -6 
          SBN    1
          STD    T1 
          MJN    UEA1        IF RESERVED SERVICE CLASS
          SBN    MXJC-1 
          PJN    UEA1        IF NO JOB CONTROL BLOCK
          ADO    EJTU        INCREMENT ENTRIES IN USE 
          LDD    CN+4        GET JOB STATUS 
          SHN    -1 
          LPN    37 
          STD    T2          (T2) = JOB STATUS
          LMN    EXJS 
          ZJN    UEA3        IF JOB EXECUTING 
          LMK    PCJS&EXJS
          ZJN    UEA3        IF JOB AT PCP
  
*         DETERMINE MEMORY IN ROLLOUT QUEUE.
  
          LDD    T5          INCREMENT FL ASSIGNED TO JOB 
          ADA    MMRQ,T1
          LDD    T4          INCREMENT EXTENDED MEMORY ROLLOUT QUEUE
          ADA    ECRQ,T1
  
*         INCREMENT JOB STATUS ACTIVITY BY SERVICE CLASS. 
  
 UEA3     LDN    MXJC-1      CALCULATE JOB STATUS*(MXJC-1)
          STD    T3 
          LDN    0
          STD    T4 
 UEA4     LDD    T2 
          RAD    T4 
          SOD    T3 
          NJN    UEA4        IF NOT COMPLETE
          LDD    T4 
          ADD    T1          ADD JOB CLASS OFFSET 
          ADD    BA          ADD BUFFER BASE ADDRESS
          STD    T2 
          AOM    JSSC,T2     INCREMENT JOB STATUS BY SERVICE CLASS
          ERRNZ  P.JSSC-1    CODE DEPENDS ON SIZE 
  
*         DETERMINE NUMBER OF NON-INTERACTIVE, ON-LINE, OR
*         DETACHED INTERACTIVE JOBS.
  
          LDD    CN+4        GET CONNECTION STATUS
          SHN    -7 
          LPN    17 
          STD    T1          (T1) = CONNECTION STATUS 
          ADO    JBCS,T1     INCREMENT CONNECTION STATUS
          LJM    UEA1        PROCESS NEXT EJT ENTRY 
 UQA      SPACE  4,10 
**        UQA - UPDATE QFT ACTIVITY.
* 
*         ENTRY  (BA) = BUFFER BASE ADDRESS OF CURRENT RECORD.
* 
*         EXIT   QFT ACTIVITY UPDATED.
* 
*         USES   CM+2, CN - CN+4, T1 - T5.
* 
*         MACROS ADO, SFA.
  
  
 UQA      SUBR               ENTRY/EXIT 
          LDN    QFTP        READ QFT POINTER 
          CRD    CM 
          UJN    UQA3        ACCESS QFT 
  
*         SEARCH QFT TO DETERMINE QUEUE TYPES.
  
 UQA1     ADO    QACP        INCREMENT FILES ASSIGNED TO CP 
 UQA2     SOD    CM+2        DECREMENT QFT ORDINAL
          ZJN    UQAX        IF NO MORE ENTRIES 
 UQA3     SFA    QFT,CM+2    ACCESS QFT ENTRY 
          CRD    CN 
          ADN    SCLQ-JSNQ   GET SERVICE CLASS
          CRD    T1 
          LDD    CN 
          ZJN    UQA2        IF FREE ENTRY
          LDD    T1 
          SHN    -6 
          STD    T1 
          ZJN    UQA2        IF RESERVED SERVICE CLASS
          SBN    MXJC 
          PJN    UQA2        IF NO JOB CONTROL BLOCK
          ADO    QFTU        INCREMENT ENTRIES IN USE 
          SOD    T1 
          LDD    CN+4 
          LPN    2
          NJN    UQA1        IF JOB ASSIGNED TO CP
          LDD    CN+4 
          SHN    -11
          LMK    INQT 
          ZJN    UQA6        IF INPUT QUEUE FILE TYPE 
          LMN    PRQT&INQT
          ZJN    UQA5        IF PRINT QUEUE FILE TYPE 
          LMN    PHQT&PRQT
          ZJN    UQA4        IF PUNCH QUEUE FILE TYPE 
          LDN    QNCP-PFSC
 UQA4     ADN    PFSC-LPSC
 UQA5     ADN    LPSC-IFSC
 UQA6     ADD    BA          CALCULATE ADDRESS OF QUEUE ENTRY 
          RAD    T1 
          AOM    IFSC,T1     INCREMENT QUEUE COUNT FOR SERVICE CLASS
          LJM    UQA2        LOOP 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
          QUAL
 PIR$     EQU    1           SELECT ASSEMBLY OF *PIR* FOR IAF R-REG 
 VCPT     EQU    /IAF/VCPT   DEFINE CONTROL POINT FOR *COMPSRR* 
          QUAL   *
*CALL     COMPSRR 
  
  
          ERRNZ  P.IFSC-1    CODE DEPENDS ON SIZE 
          ERRNZ  P.LPSC-1    CODE DEPENDS ON SIZE 
          ERRNZ  P.PFSC-1    CODE DEPENDS ON SIZE 
          ERRNZ  P.QNCP-1    CODE DEPENDS ON SIZE 
          SPACE  4,10 
          USE    LITS        FLUSH LITERALS 
          USE    *
  
          QUAL   *
  
 R3CR     EQU    *+4-COVL    ROUND LENGTH OF *3CR*
 L3CR     EQU    R3CR/5*5    LENGTH OF *3CR*
          TTL    3CS - CPD FILE WRITE OPERATIONS. 
          TITLE 
          QUAL   3CS
          IDENT  3CS,PFWX    CPD FILE WRITE OPERATIONS
          ORG    COVL 
*COMMENT  3CS - CPD FILE WRITE OPERATIONS.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 PFW      SPACE  4,10 
**        PFW - PRESET CPD FILE WRITE OPERATIONS. 
* 
*         ENTRY  (LO) = 0 IF CALLED FROM PRESET.
* 
*         CALLS  FWO. 
  
  
 PFW      SUBR               ENTRY/EXIT 
          LDD    LO 
          ZJN    PFWX        IF OVERLAY LOAD BY PRESET
          RJM    FWO         PERFORM FILE WRITE OPERATION 
          UJN    PFWX        RETURN 
          TITLE  FILE WRITE ROUTINES. 
 CIS      SPACE  4,10 
**        CIS - CLEAR INTERLOCK STATUS. 
* 
*         ENTRY  (FITS) = 0 IF FILE INTERLOCK NOT REQUIRED. 
*                (FS - FS+4) = DATA FILE FST. 
* 
*         USES   T6.
* 
*         CALLS  CTI. 
  
  
 CIS      SUBR               ENTRY/EXIT 
          LDM    FITS        CHECK FILE INTERLOCK STATUS
          ZJN    CISX        IF FILE INTERLOCK NOT REQUIRED 
          LDD    FS+1 
          STD    T6 
          RJM    CTI         CLEAR TRACK INTERLOCK
          UJN    CISX        RETURN 
 DPB      SPACE  4,20 
**        DPB - DUMP BUFFER TO FILE.
* 
*         ENTRY  (A) = 6/EOR FLAG, 12/WORD COUNT. 
*                (BA) = BUFFER ADDRESS. 
*                (FS - FS+4) = DATA FILE FST. 
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         EXIT   (BA) = LWA+1 WORDS IN BUFFER WRITTEN TO FILE.
*                (T6) = UPDATED CURRENT TRACK.
*                (T7) = UPDATED CURRENT SECTOR. 
* 
*         ERROR  TO *DPP* IF NEXT TRACK NOT RESERVED AND
*                SYSTEM DEBUG DISABLED. 
* 
*         USES   BA, CN, T3, T6, T7.
* 
*         CALLS  CIS, SNT, WDS, WES.
* 
*         MACROS MONITOR. 
  
  
 DPB      SUBR               ENTRY/EXIT 
          STD    T3          SET WORD COUNT 
          SHN    6
          STD    CN          SAVE EOR FLAG
 DPB1     LDD    T3 
          NJN    DPB2        IF MORE WORDS TO WRITE 
          LDD    CN 
          NJN    DPBX        IF NO EXTRA EOR TO WRITE 
          AOD    CN 
 DPB2     SOD    BA 
          LDD    HN 
          STI    BA 
          LDD    T3 
          SBD    HN 
          PJN    DPB3        IF FULL SECTOR 
          LDD    T3          SET SHORT SECTOR 
          STI    BA 
          LDN    0
 DPB3     STD    T3 
          SOD    BA 
          LDD    T7 
          ADN    1
          STI    BA 
          LMM    SLM
          NJN    DPB4        IF NOT AT END OF TRACK 
          RJM    SNT         GET NEXT TRACK 
          STI    BA 
          SHN    6
          PJP    DPB6        IF NEXT TRACK NOT ALLOCATED
 DPB4     LDD    BA          WRITE SECTOR 
          LMC    WCSF 
          RJM    WDS
          PJN    DPB4.2      IF NO ERROR
          SHN    21-11
          PJN    DPB4.1      IF NOT PREVIOUS SECTOR ERROR 
          LDM    WDSE        REWRITE PREVIOUS SECTOR
*         LMC    WLSF 
          ERRNZ  WLSF        CODE DEPENDS ON VALUE
          RJM    WDS
          PJN    DPB4        IF NO ERROR
 DPB4.1   RJM    WES         ATTEMPT TO WRITE EOI SECTOR
          RJM    CIS         CLEAR FILE INTERLOCK 
          LJM    DPP         DROP PP
  
 DPB4.2   LDI    BA          SET NEXT SECTOR
          STD    T7 
          SHN    6
          PJN    DPB5        IF NOT NEW TRACK 
          SHN    -6          SET TRACK
          STD    T6 
          LDN    0           CLEAR SECTOR 
          STD    T7 
 DPB5     AOD    BA          GET SECTOR WORD COUNT
          LDI    BA          ADVANCE BUFFER ADDRESS TO NEXT SECTOR
          SHN    2
          ADI    BA 
          ADN    1
          RAD    BA          ADVANCE BUFFER ADDRESS 
          LJM    DPB1        LOOP TO WRITE NEXT SECTOR
  
 DPB6     RJM    WES         WRITE EOI
          RJM    CIS         CLEAR FILE INTERLOCK 
          LDN    0           SET NO ERROR FLAG
          STD    CM+2 
          LDC    *           SET ADDRESS WHERE ERROR DETECTED 
          STD    CM+1 
          MONITOR  CHGM      CONDITIONAL HANG 
*         LJM    DPP         DROP PP
 DPP      SPACE  4,10 
**        DPP - DROP PP.
* 
*         ENTRY  (FO) = FNT ORDINAL.
*                (MD) = MODE. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DFM, *0DF*.
* 
*         MACROS MONITOR. 
  
  
 DPP      BSS    0           ENTRY
          LDC    DPPA 
          RJM    DFM         ISSUE TERMINATION MESSAGE
*         LDN    0
          STD    CM+1 
          LDN    /EVENT/CPTE ISSUE TERMINATION EVENT
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          MONITOR  EATM 
          MONITOR  DPPM      DROP PPU 
          LJM    PPR         RETURN TO PP RESIDENT
  
  
 DPPA     DATA   C* CPD - TERMINATED.*
 FWO      SPACE  4,10 
**        FWO - FILE WRITE OPERATIONS.
* 
*         ENTRY  (FS - FS+4) = DATA FILE FST. 
*                (RC) = RECORD COUNT IN BUFFER. 
*                (WC) = WORD COUNT OF RECORD. 
* 
*         USES   BA, RC.
* 
*         CALLS  CIS, DPB, RNT, SIS, WES. 
* 
*         MACROS SETMS. 
  
  
 FWO      SUBR               ENTRY/EXIT 
          RJM    SIS         SET INTERLOCK STATUS 
          SETMS  IO,(NS),BUFF-4 
          RJM    RNT         REQUEST TRACKS 
          LDK    BUFF        SET BUFFER BASE ADDRESS
          STD    BA 
 FWO1     LDD    WC          WRITE ENTIRE RECORD
          RJM    DPB         DUMP BUFFER TO FILE
          SOD    RC 
          NJN    FWO1        IF MORE RECORDS TO WRITE 
          RJM    WES         WRITE EOI SECTOR 
          RJM    CIS         CLEAR INTERLOCK STATUS 
          UJN    FWOX        RETURN 
 RNT      SPACE  4,15 
**        RNT - REQUEST TRACKS. 
* 
*         ENTRY  (FS - FS+4) = FST ENTRY. 
*                (RC) = NUMBER OF RECORDS TO WRITE. 
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
*                (WC) = WORD COUNT OF RECORD. 
* 
*         USES   T2, T3, CM - CM+4. 
* 
*         CALLS  CDS, SNT.
* 
*         MACROS DELAY, MONITOR.
  
  
 RNT      SUBR               ENTRY/EXIT 
          LDN    0
          STD    T3 
          LDD    RC 
          STD    T2 
 RNT1     LDD    WC          CALCULATE SECTORS TO WRITE 
          ADN    77 
          SHN    -6 
          RAD    T3 
          LDD    WC 
          LPN    77 
          NJN    RNT2        IF EOR COUNTED 
          AOD    T3 
 RNT2     SOD    T2 
          NJN    RNT1        IF MORE RECORDS TO WRITE 
          AOD    T3          ALLOW FOR EOI
          ADD    T7          CHECK SECTORS LEFT ON CURRENT TRACK
 RNT3     SBM    SLM
          STD    T3 
          SBN    1
          PJN    RNT5        IF NOT ENOUGH SECTORS ON CURRENT TRACK 
 RNT4     LDD    FS+2        RESET CURRENT TRACK
          STD    T6 
          UJN    RNTX        RETURN 
  
 RNT5     RJM    SNT         SET NEXT TRACK 
          SHN    6
          PJN    RNT6        IF NEXT TRACK NOT ASSIGNED 
          SHN    -6 
          STD    T6 
          LDD    T3 
          UJN    RNT3        CHECK SECTORS ON NEXT TRACK
  
 RNT6     LDD    T5          SET EQUIPMENT EST ORDINAL
          STD    CM+1 
          LDD    T6          SET CURRENT TRACK
          STD    CM+2 
          LDN    0
          STD    CM+3 
          LDD    T3          REQUEST REMAINING SECTORS
          STD    CM+4 
          MONITOR RTCM       REQUEST TRACK TRAIN
          LDD    CM+4 
          NJN    RNT4        IF TRACKS ASSIGNED 
          RJM    CDS         CHECK DROP STATUS
 RNT7     DELAY 
          LDD    T2 
          NJN    RNT6        IF EVENT ALREADY ISSUED
          AOD    T2          SET FLAG 
          LDD    CP          SET TRACK LIMIT MESSAGE
          ADN    MS2W 
          CWM    RNTA,TR     *CPD - TRACK LIMIT.* 
          LDN    ZERL        ISSUE TRACK LIMIT EVENT
          CRD    CM 
          LDN    /EVENT/TKLE
          STD    CM+4 
          MONITOR  EATM 
          UJN    RNT7        RETRY REQUEST
  
  
 RNTA     DATA   C*CPD - TRACK LIMIT.*
 SIS      SPACE  4,15 
**        SIS - SET INTERLOCK STATUS. 
* 
*         ENTRY  (FITS) = 0 IF FILE INTERLOCK NOT REQUIRED. 
*                (FS - FS+4) = DATA FILE FST. 
* 
*         EXIT   INTERLOCK SET IF REQUIRED. 
*                (T5) = EQUIPMENT EST ORDINAL.
*                (T6) = CURRENT TRACK.
*                (T7) = CURRENT SECTOR. 
* 
*         CALLS  IRA, STI.
  
  
 SIS      SUBR               ENTRY/EXIT 
          LDD    FS          SET EQUIPMENT
          STD    T5 
          RJM    IRA         INITIALIZE RANDOM ACCESS PROCESSORS
          LDM    FITS        CHECK FILE INTERLOCK STATUS
          ZJN    SIS1        IF FILE INTERLOCK NOT REQUIRED 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          RJM    STI         SET TRACK INTERLOCK
 SIS1     LDD    FS+3        SET CURRENT SECTOR 
          STD    T7 
          LDD    FS+2        SET CURRENT TRACK
          STD    T6 
          UJN    SISX        RETURN 
 WES      SPACE  4,15 
**        WES - WRITE EOI SECTOR. 
* 
*         ENTRY  (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         EXIT   (FS - FS+4) = UPDATED FST ENTRY. 
*                ENHANCED EOI SECTOR WRITTEN. 
*                ENDMS ISSUED.
*                TRT UPDATED TO REFLECT NEW EOI.
* 
*         CALLS  WEI. 
* 
*         MACROS ENDMS, MONITOR.
  
  
 WES      SUBR               ENTRY/EXIT 
          LDD    T6          SET CURRENT TRACK
          STD    FS+2 
          LDD    T7          SET CURRENT SECTOR 
          STD    FS+3 
          LDD    MA          WRITE DATA FILE POINTERS 
          CWD    FS 
          CRM    BUFF+FSEI,ON  COPY FST TO EOI BUFFER 
*         CRM    HBUF+FSEI,ON  (PRESET DIRECT CALL) 
 WESA     EQU    *-1
          LDC    BUFF        WRITE ENHANCED EOI 
*         LDC    HBUF        (PRESET DIRECT CALL) 
 WESB     EQU    *-1
          RJM    WEI
          ENDMS 
          LDD    T5          SET EQUIPMENT
          LMC    4000 
          STD    CM+1 
          LDD    T6          SET CURRENT TRACK
          LPC    3777 
          STD    CM+2 
          LDD    T7          SET CURRENT SECTOR 
          STD    CM+3 
          MONITOR  DTKM 
          UJN    WESX        RETURN 
 ZFB      SPACE  4,10 
**        ZFB - ZERO FILL BUFFER. 
* 
*         ENTRY  (WC) = WORD COUNT OF RECORD. 
*                (RX) = MAXIMUM NUMBER OF RECORDS IN BUFFER.
* 
*         EXIT   (BA) = BUFFER BASE ADDRESS.
*                (RC) = 0.
* 
*         USES   T1, T2, BA.
  
  
 ZFB      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR RECORD COUNT 
          STD    RC 
          LDC    BUFF        SET BUFFER BASE ADDRESS
          STD    BA 
          STD    T1 
          LDD    RX          GET MAXIMUM RECORD COUNT 
          STD    T2 
 ZFB1     LDD    WC 
          SHN    2
          ADD    WC 
          RAD    T1 
          SOD    T2 
          NJN    ZFB1        IF MORE RECORDS TO COUNT 
 ZFB2     SOD    T1 
          SBD    BA 
          MJN    ZFBX        IF BUFFER CLEARED
          LDN    0
          STI    T1 
          UJN    ZFB2        LOOP 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 QUAL$    EQU    0           DO NOT QUALIFY COMMON DECKS
*CALL     COMPCTI 
 IRA$     EQU    1           SET PRESET PRESENT 
*CALL     COMPSNT 
*CALL     COMPIRA 
*CALL     COMPSTI 
 WEI$     EQU    0           SET EOI BUFFER SUPPLIED BY CALLER
*CALL     COMPWEI 
          SPACE  4,10 
          USE    LITS        FLUSH LITERALS 
          USE    *
  
          QUAL   *
  
 R3CS     EQU    *+4-COVL    ROUND LENGTH OF *3CS*
 L3CS     EQU    R3CS/5*5    LENGTH OF *3CS*
  
          ERRNG  /PRS/P3CS-COVL-L3CS  CHECK OVERFLOW INTO PRESET CODE 
  
 MLOV     MAX    L3CR,L3CS   MAXIMUM LENGTH OF OVERLAYS 
 SBUF     EQU    EPFW-SBUFL  SCRATCH BUFFER 
 BUFF     EQU    COVL+MLOV+4 DATA BUFFER FWA
 BUFFL    EQU    SBUF-BUFF   MAXIMUM BUFFER LENGTH IN BYTES 
 BUFFLW   EQU    BUFFL/5     MAXIMUM BUFFER LENGTH IN WORDS 
          ERRNG  BUFFLW*5-DFBL-MSMX*DMBL  INSUFFICIENT BUFFER SPACE 
          TTL    CPD - COLLECT PERFORMANCE DATA.
          SPACE  4,10 
          END 
