COMPPPR 
COMMON
          CTEXT  COMPPPR - NPP AND CPP RESIDENT CODE. 
          SPACE  4,10 
 .A       IF     DEF,CPP$ 
 .PP      MICRO  1,, CPP     SET CPP ASSEMBLY FLAG
 .A       ELSE
 .PP      MICRO  1,, NPP     SET NPP ASSEMBLY FLAG
 .A       ENDIF 
          QUAL               UNQUALIFY THE SYMBOLS DEFINED
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 PPR      SPACE  4,10 
***       PPR - NPP AND CPP RESIDENT CODE.
* 
*         G. R. MANSFIELD.   70/12/12.
*         R. E. TATE.        73/01/05.
*         P. D. HAAS.        75/04/19.
*         W. E. GOEBEL.      78/04/29.
*         J. M. MAREK.       86/03/10.
          SPACE  4,10 
***       *COMPPPR* SUPPLIES THE CODE NECESSARY TO ASSEMBLE PP RESIDENT 
*         FOR A NONCONCURRENT PP (NPP) AND A CONCURRENT PP (CPP). 
*         CPP-S ARE ONLY AVAILABLE IN A CYBER 180 MODEL I4 IOU.  THEY 
*         HAVE 8K MEMORIES AND USE CONCURRENT CHANNELS (CCH), BUT 
*         OTHERWISE THEY ARE VERY SIMILAR TO NPP-S. 
* 
*         *COMPPPR* CONTAINS SEVERAL *LONG* INSTRUCTIONS WHICH ACCESS 
*         THE FULL 16 BITS IN A CYBER 180 PP-S MEMORY.  THESE INSTRUC-
*         TIONS ARE ASSEMBLED AS *SHORT* INSTRUCTIONS AND ARE CHANGED 
*         INTO LONG INSTRUCTIONS BY PRESET CODE WHEN *PPR* IS LOADED
*         INTO A CONCURRENT PP.  THE LONG INSTRUCTIONS ARE REQUIRED TO
*         HANDLED ADDRESSES THAT MAY ORIGINATE FROM ANYWHERE IN AN 8K 
*         MEMORY. 
* 
*         *CPP$* MUST BE UNDEFINED TO PRODUCE THE NPP RESIDENT CODE.
*         WHENEVER IT IS DEFINED, CPP RESIDENT CODE WILL BE PRODUCED. 
* 
*         XREF   COMPIOU, COMSMSC.
          SPACE  4,10 
***       THE FOLLOWING PP OUTPUT REGISTER FUNCTIONS ARE PASSED 
*         FROM *CPUMTR* TO *PPR* AND ARE PROCESSED BY *PPR*.
 ASCM     SPACE  4,10 
***       ASCM - AVOID SEARCH CALL. 
* 
*         THE *SPLM* LIBRARY SEARCH HAS ALREADY BEEN PERFORMED FOR
*         THE NEXT PP LOAD. 
* 
*         12/ ASCM,48/ *SPLM* REPLY PARAMETERS
 BOTM     SPACE  4,10 
***       BOTM - BEGIN OVERLAYING TASK. 
* 
*         LOAD A BOOTSTRAP PROGRAM IN HIGH PP MEMORY. 
* 
*T, OR    12/ BOTM,24/ FWA,12/ P1,12/ P2
*         FWA    ADDRESS OF BOOTSTRAP CODE. 
*         P1     PARAMETER FOR BOOTSTRAP PROGRAM. 
*         P2     PARAMETER FOR BOOTSTRAP PROGRAM. 
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 DEC      MICRO  1,, PPR     DECK NAME
 DIRECT   SPACE  4,10 
**        DIRECT LOCATION ASSIGNMENTS.
  
  
          LOC    0
 T0       CON    0           TEMPORARY STORAGE
 T1       CON    0
 T2       CON    0
 T3       CON    0
 T4       CON    0
 T5       CON    0
 T6       CON    0
 T7       CON    0
  
 CM       VFD    60/0        CM WORD BUFFER 
 LA       CON    0           PP PACKAGE LOAD ADDRESS
 T8       CON    0           TEMPORARY STORAGE
 T9       CON    0
  
*         THE FOLLOWING 15D DIRECT CELLS ARE NORMALLY UNUSED. 
*         HOWEVER, FOR THE BENEFIT OF CERTAIN PP PROGRAMS, *PPR*
*         READS THE FIRST THREE WORDS OF THE PP MESSAGE BUFFER
*         INTO THIS AREA IMMEDIATELY AFTER PP ASSIGNMENT SO THAT
*         THE INFORMATION IS NOT DESTROYED BY LOADING OF THE PP.
  
 MP       BSS    3*5         MESSAGE BUFFER PARAMETERS
  
          BSS    50-*        UNUSED AREA
  
 IR       VFD    60/0        INPUT REGISTER 
 RA       CON    0           REFERENCE ADDRESS/100
 FL       CON    0           FIELD LENGTH/100 
          CON    0           UNUSED 
  
          BSS    70-*        UNUSED 
  
 ON       CON    1           CONSTANT 1 
 HN       CON    100         CONSTANT 100 
 D1       EQU    HN          USE FOR INDIRECT REFERENCE TO *DRSW* 
 TH       CON    1000        CONSTANT 1000
 TR       CON    3           CONSTANT 3 
 CP       CON    0           CONTROL POINT ADDRESS
 IA       CON    0           INPUT REGISTER ADDRESS 
 OA       CON    0           OUTPUT REGISTER ADDRESS
 MA       CON    0           MESSAGE BUFFER ADDRESS 
 DRSW     CON    0           DRIVER SCRATCH 
          ERRNZ  DRSW-100    USE OF *D1* REQUIRES DRSW = 100
  
 WDSE     CON    0           WRITE ERROR PROCESSING BUFFER ADDRESS
 ERXA     CON    0           *RDS/WDS* EXIT ADDRESS FOR *7ES* 
 RDCT     CON    0           MS ERROR PROCESSOR INTERFACE WORD
 STSA     CON    0           DEVICE STATUS
 STSB     CON    0           DRIVER CHANNEL ERROR STATUS
 UERR     CON    0           ERROR PROCESSING OPTIONS 
 SLM      CON    0           SECTOR LIMIT 
 MSD      CON    77          MASS STORAGE DESIGNATOR WORD 
 CHRV     CON    0           CHANNEL RESERVATION INDICATOR
****
 PPR      TITLE  PP RESIDENT. 
 FTN      SPACE  4,10 
***       FTN - PROCESS MONITOR FUNCTION. 
*         ALSO PAUSES WHEN ENTERED WITH (A) = 0.
* 
*         ENTRY  (A) = FUNCTION.
*                (A) = 0 IF TO PAUSE FOR RELOCATION.
*                (CM+1 - CM+4) = PARAMETERS, IF FUNCTION PRESENT. 
* 
*         EXIT   (A) = 0. 
*                (CM - CM+4) = CONTENTS OF OUTPUT REGISTER. 
*                (RA) = REFERENCE ADDRESS.
*                (FL) = FIELD LENGTH. 
  
  
 OFTNA    SET    *O 
 FTNA     VFD    6/0
          VFD    18/0        (P)
          VFD    18/0        (A0) 
          VFD    18/0        (B0) 
          ORG    OFTNA+4
          LOC    FTNA+4 
 FTN7     SHN    21-13       CHECK RETRY OF REQUEST 
          PJN    FTN10       IF REQUEST NOT REJECTED
          SHN    21-11-21+13 CHECK FOR PARTIAL COMPLETION 
          MJN    FTN8        IF MORE PROCESSING 
 FTNB     LDC    SBNI+1+10000  (INDEPENDENT SHARED/LOW SPEED PORT MMF)
*         LDC    SBNI+1        (HIGH SPEED PORT MMF OR SINGLE MACHINE)
*         SBN    1           IF 4X PPU
*         SBN    1           IF 2X PPU
*         SBN    2           IF 1X PPU
          NJN    *-1         IF DELAY IS NOT COMPLETE 
 FTN8     LDD    CM          RESET FUNCTION FOR RETRY 
          LPC    177
          UJN    FTN1        REISSUE FUNCTION 
  
*         CHECK FOR MOVE REQUESTED. 
  
 FTN9     LDN    CMCL 
          CRD    CM 
          LDD    CM 
          LMC    ** 
 FTNG     EQU    *-1         (ASSIGNED CP/PCP NUMBER) 
          NJN    FTN11       IF NOT AT MOVE 
          LDN    PRLM 
          UJN    FTN1        PAUSE FOR MOVE 
  
 FTN10    LDC    SBNI+20     DELAY
          PJN    *-1         IF DELAY NOT COMPLETE
          LDD    OA          READ OUTPUT REGISTER 
          CRD    CM 
          LDD    CM 
          ADK    -BOTM
 .A       IFC    EQ,/".PP"/NPP/ 
          UJN    FTN1.1      CHECK RESPONSE 
 .A       ELSE
          PJN    FTN1.1      IF OUTPUT REGISTER NOT CLEAR 
 .A       ENDIF 
  
*         RE-ENTER HERE FROM *1RU* AND *1FA*. 
  
 FTN11    LDC    FLSW        READ RA AND FL 
 FTNC     EQU    *-2
*         LDC    CPA+FLSW    (ASSIGNED TO CP, NO CME) 
*         LDC    CPA+FLSW+1  (ASSIGNED TO CP, CME PRESENT)
*         LDC    PCPA+FLSW   (ASSIGNED TO PCP, NO CME)
*         LDC    PCPA+FLSW+1 (ASSIGNED TO PCP, CME PRESENT) 
          CRD    CM 
          LRD    CM+1 
          LDD    CM+3 
          STD    RA 
          LDD    CM+4 
          STD    FL 
          LDD    OA          REREAD OUTPUT REGISTER 
          CRD    CM 
          LDN    0
  
 FTN      SUBR               ENTRY/EXIT 
          ZJN    FTN9        IF PAUSE REQUEST 
 FTN1     STD    CM          STORE FUNCTION 
  
*         ENTRY FROM *CPUMTR* FUNCTION POST PROCESSOR OVERLAYS TO 
*         RETURN TO CALLER. 
  
 FTN1.0   LDD    OA          ENTER OUTPUT REGISTER
          CWD    CM 
          LDN    CPUM-1      CHECK FUNCTION 
          SBD    CM 
  
 .A       IFC    EQ,/".PP"/NPP/ 
 FTN2     PJN    FTN10       IF NOT CPU FUNCTION
          UJN    FTN3        PROCESS CPUMTR FUNCTION
  
 FTN1.1   ZJN    FTN1.2      IF *BOTM*
          MJN    FTN11       IF FUNCTION COMPLETE 
          ERRNZ  BOTM-ASCM-1 CODE DEPENDS ON ORDER OF FUNCTIONS 
          LJM    FTN7        LOOP 
  
*         EXECUTE ROUTINE SPECIFIED BY *BOTM*.  ALSO ENTERED FROM 
*         *CPUMTR* FUNCTION POST PROCESSOR OVERLAYS TO EXECUTE CODE 
*         SEGMENT.
  
 FTN1.2   ADD    CM+1        GET CM ADDRESS OF BOOTSTRAP
          SHN    14 
          ADD    CM+2 
          CRM    10001-3*5,TR 
*         LJM    BOOTSTRAP   (P) = (T0)+1 
*                            (A) = ADDRESS OF BOOTSTRAP + 3.
  
 .A       ELSE
          MJN    FTN3        IF CPU FUNCTION
 FTN1.1   SBN    CPUM-2 
          PJP    FTN7        IF CPU FUNCTION
          LDK    PPRL        SET MTR REQUEST FLAG 
          CRD    CM 
          LDD    OA 
          STD    CM 
          LDK    PPRL 
          CWD    CM 
 FTN2     LJM    FTN10       DELAY
 .A       ENDIF 
  
 FTN3     BSS    0
 XJ2      LDC    **          READ (MA), (A6), (B6)
          CRD    CM 
          LDD    CM          CHECK (MA) 
          ADD    CM+1 
          NJN    FTN3        IF EXCHANGE PACKAGE NOT READY
          LDN    PPXL        SET *PP EXCHANGE PENDING* FLAG 
          CWD    HN 
  
 FTN4     BSS    0
 XJ3      LDC    **          STORE (P), (A0), (B0)
          CWM    FTNA,ON
  
 FTN5     BSS    0
 XJ4      LDC    *           EXCHANGE CPU 
 CP1      MXN    0
          CRD    CM          CHECK (B0) 
          LDD    CM+4 
          ZJN    FTN2        IF EXCHANGE TAKEN
  
*         DELAY FOR 20 MICS BEFORE RETRYING EXCHANGE. 
*         (A) = 1006 = (FTNA+4) = DELAY VALUE.
  
 FTNE     SBN    20          (4X PPU) 
*         SBN    40          (2X PPU) 
*         SBN    77          (1X PPU) 
          PJN    *-1         IF NOT END OF DELAY
  
*         CHECK FOR TIME OUT ON EXCHANGE REQUEST. 
*         (T0) = P+1 OF *CWM FTNA* INSTRUCTION. 
  
 FTNF     LCN    2           (4X PPU) 
*         LCN    2           (2X PPU) 
*         LCN    3           (1X PPU) 
          RAD    T0 
          PJN    FTN5        IF NOT TO REQUEST PP EXCHANGE PRIORITY 
          LDN    CPSL        HAVE CPUMTR NOTE PP REQUESTING EXCHANGE
          CWD    CM 
          UJN    FTN4        RESET (T0) 
 .BLI     SPACE  4,20 
***       BLI - BUILD LONG INSTRUCTION (CPPS ONLY). 
* 
*         *BLI* USES A *STIL* INSTRUCTION (WHICH IS BUILT BY *1MA*) TO
*         CREATE LONG INSTRUCTIONS IN A CYBER 180 CPP.
* 
*         ENTRY  (A) = THE LONG INSTRUCTION.
*                (T3) = THE ADDRESS AT WHICH TO STORE THE INSTRUCTION.
*                (.EST) = RETURN ADDRESS. 
* 
*         NOTE - *.BLI* IS ONLY TO BE USED BY THE *BLI* MACRO.  *.BLI*
*         EXITS TO THE RETURN ADDRESS OF THE LAST CALL TO *.EST*.  THIS 
*         IS A VERY UNUSUAL EXIT PATH, BUT IT ALLOWS THE BUILDING OF
*         LONG INSTRUCTIONS TO BE ACCOMPLISHED AT THE COST OF ONLY ONE
*         BYTE IN PP RESIDENT.
  
  
          BSSZ   .BLI-*      (SPARES) 
  
 .BLI     STI    T3 
*         STIL   T3          (SET BY *1MA* DURING CPP DEADSTART)
*         UJN    .ESTX       RETURN 
  
  
          ERRNZ  .BLI+1-.ESTX  *BLI* ASSUMES THE RELATIONSHIP 
          ERRNZ  .BLI+2-.EST *BLI* ASSUMES THE RELATIONSHIP 
 .EST     SPACE  4,10 
**        .EST - CONVERT EST ORDINAL TO EST ADDRESS.
* 
*         ENTRY  (A) = EST ORDINAL. 
* 
*         EXIT   (A) = ADDRESS OF EST ENTRY.
* 
*         USES   T0 (IF *ESTE* IS NOT A POWER OF 2).
* 
*         MACROS CFI. 
  
  
 .EST     SUBR               ENTRY/EXIT 
          CFI    EST
 ESTA     ADC    **          (SET IN PRESET)
          UJN    .ESTX       RETURN 
  
          BSSZ   .DLY-*      (SPARES FOR *CFI* MACRO IF *ESTE* CHANGES) 
 DLY      SPACE  4,10 
**        .DLY - DELAY COUNT FOR 125 MICROSECONDS 
* 
*         THE .DLY CELL IS FOR USE WITH THE DELAY MACRO TO FORM 
*         A 125 MICROSECOND DELAY.  IT ASSUMES THE FOLLOWING CODE 
*         TO DELAY IS USED. 
*         LDM    .DLY 
*         SBN    1
*         NJN    *-1         IF NOT END OF DELAY
  
  
 .DLY     CON    75          DELAY COUNT FOR 1X PPU 
*         CON    173         DELAY COUNT FOR 2X PPU 
*         CON    370         DELAY COUNT FOR 4X PPU 
  
 DLYA     SBN    20          1X PP
*         SBN    10          2X PP
*         SBN    4           4X PP
          SPACE  4
  
          ERRNG  EFTN-*      *FTN* HAS OVERFLOWED 
  
 PPR      SPACE  4,10 
***       PPR - PP RESIDENT.
* 
*         EVERY 128 MICROSECONDS, PPR READS THE INPUT REGISTER
*         AND CHECKS FOR THE PRESENCE OF A PROGRAM NAME.  IF ONE IS 
*         PRESENT *PLL* IS CALLED TO LOAD THE REQUESTED PROGRAM.
  
  
          BSSZ   PPR-*       (SPARES) 
  
 .A       IFC    EQ,/".PP"/NPP/ 
 PPR      LDN    PPRL        FETCH LOAD PARAMETERS
          CRD    CM 
          UJN    PLL9        LOAD PP IDLE LOOP
 .A       ELSE
 PPR      UJN    *           HANG TO AWAIT IDLE STATE 
 .A       ENDIF 
  
 PPR1     LJM    5,LA        ENTER PROGRAM
 PLL      SPACE  4,15 
**        PLL - PERIPHERAL LIBRARY LOADER.
* 
*         ENTRY  (A) = PACKAGE NAME.
*                (LA) = LOAD ADDRESS FOR LOCATION FREE ROUTINES.
* 
*         USES   CM - CM+4, LA.  FOR *RPL* LOAD.
*                T1 - T7, CM - CM+4, LA, T8, T9.  FOR *PLD* LOAD. 
* 
*         CALLS  LEP, RDS.
* 
*         MACROS ENDMS, MONITOR, MSERR, PAUSE, SETMS. 
  
  
          BSSZ   PLLA-1-*    (SPARES) 
  
 PLL8     LDC    *
 PLLA     EQU    *-1
          STD    CM+2 
          LDC    *
 PLLB     EQU    *-1
          STD    CM+3 
          MONITOR SPLM
 PLL9     UJN    PLL2        LOAD PROGRAM 
  
 PLL10    LMD    CM+1        READ PACKAGE FROM RPL
          SHN    14 
          ADD    CM+2 
          CRM    **,CM+3
 PLLC     EQU    *-1
 PLL11    PAUSE  NE 
 PLLD     EQU    *-1
*         RJM    PPFW-1      (*1BP* LOAD OF MAIN OVERLAY) 
  
 PLL      SUBR               ENTRY/EXIT 
          STM    PLLB 
          SHN    -14
          STM    PLLA 
          LDD    OA 
          CRD    CM 
          SOD    CM 
          ERRNZ  ASCM-1      CODE DEPENDS ON VALUE
          NJN    PLL8        IF LIBRARY NOT SEARCHED
          LDD    OA 
          CWD    CM 
  
*         RE-ENTER HERE FROM *7SE* TO RETRY AFTER ERRORS. 
*         IF THE ERROR WAS FROM READING A PROGRAM FROM AN ALTERNATE 
*         SYSTEM DEVICE *7SE* WILL HAVE DISABLED THE ALTERNATE
*         SYSTEM COPY OF THE PROGRAM.  THE RETRY WILL THEN GO 
*         TO A SYSTEM DEVICE. 
  
 PLL2     LDD    CM+4        SET LOAD ADDRESS 
          NJN    PLL3        IF NOT ZERO LEVEL OVERLAY
          LDDL   LA 
 PLL3     STDL   LA 
  
*         ENTRY FOR MASS STORAGE ERROR PROCESSOR LOADS. 
  
 PLL4     STML   PLLC        STORE ADDRESS FOR *CRM*
          LDD    CM+1 
          LPC    300
          NJN    PLL10       IF LOAD FROM RPL 
  
*         PROCESS LOAD FROM SYSTEM OR ALTERNATE SYSTEM DEVICE.
  
          LDD    OA          SET EQUIPMENT FOR *SMS*
          CRD    T4 
          SETMS  READSYS
  
 .A       IFC    EQ,/".PP"/NPP/ 
          LDD    LA          SET READ ADDRESS POINTER 
          SBN    2
          STD    T3 
 PLL5     LDI    T3          SAVE TWO BYTES 
          STD    T8 
          LDM    1,T3 
          STD    T9 
          LDD    T3          READ SECTOR
          RJM    RDS
          MJN    PLL7        IF READ ERROR
          AOD    T7          SET NEXT SECTOR
          LMM    SLM
          NJN    PLL6        IF NOT NEW TRACK 
          STD    T7 
          LDI    T3 
          STD    T6 
 PLL6     LDD    T8          RESTORE TWO BYTES
          STI    T3 
          LDD    T9 
          STM    1,T3 
          LDC    500         INCREMENT ADDRESS OF READ
          RAD    T3 
          SOM    3,LA 
          NJN    PLL5        IF NOT EOR 
          ENDMS              END MASS STORAGE 
          LJM    PLL11       RETURN 
  
 PLL7     MSERR  7SE,*
          UJN    LEP1        LOAD *7SE* 
  
 .A       ELSE
          RJM    RDS         READ OVERLAY 
          MJN    PLL5        IF READ ERROR
          ENDMS              END MASS STORAGE 
          LJM    PLL11       RETURN 
  
 PLL5     LDM    PLL         CHECK CALLER 
          LMC    PPR1 
          ZJN    PLL6        IF CALLED BY PRESET
          LDK    HNGM-DPPM   HANG THE CPP 
 PLL6     ADK    DPPM        DROP THE CPP 
          RJM    FTN
          LJM    PPR         IDLE 
 .A       ENDIF 
  
  
 .A       IFC    EQ,/".PP"/NPP/ 
 BEP      SPACE  4,10 
**        BEP - BREAKPOINT MS ERROR PROCESSOR.
  
  
 BEP      SUBR               ENTRY/EXIT 
          UJN    BEPX        RETURN 
          CON    0
*         LJM    /BMS/SBK    (*BMS* ACTIVE) 
 .A       ENDIF 
 LEP      SPACE  4,10 
**        LEP - LOAD MASS STORAGE ERROR PROCESSING OVERLAY. 
* 
*         ENTRY  (A) = OVERLAY NAME & 3R7DP.
* 
*         USES   T1.
  
  
          BSSZ   LEP-*       (SPARES) 
  
 LMSE     EQU    10001-3*5
  
 LEP      MSERR  7EQ,*
 .A       IFC    EQ,/".PP"/NPP/ 
 LEP1     LMC    3R7DQ
          STD    T1 
          LDN    MSEL        READ/EXECUTE PRELOADER 
          CRM    LMSE,TR
 .A       ELSE
          UJN    *           HANG - ERROR PROCESSORS DO NOT WORK IN CPP 
 .A       ENDIF 
 DFM      SPACE  4,25 
***       DFM - SEND DAYFILE MESSAGE. 
* 
*         CAUTION - DAYFILE MESSAGES SHOULD NOT BE ISSUED 
*         WITH NON-DEDICATED CHANNEL(S) RESERVED. 
* 
*         CAUTION - WHEN ISSUING A DAYFILE MESSAGE FROM A CONCURRENT
*         PP THE MESSAGE MUST BE BELOW 10000B.
* 
*         ENTRY  (A) BITS  0 - 11 = BEGINNING ADDRESS OF MESSAGE. 
*                (A) BITS 12 - 17 = MESSAGE CONTROL CODE. 
*                MESSAGE TERMINATED BY 0000 BYTE. 
*                (CM+1) = MESSAGE LENGTH IN PP WORDS IF BML MESSAGE.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T0 - T2, CM - CM+4.
* 
*         IF DAYFILE BUFFER DUMP REQUIRED-
*         SAVES AND RESTORES EPFW - 110, AND MASS STORAGE DRIVER, 
*         AND FIRST PART OF PROGRAM.  LOCATIONS 7764 TO END 
*         OF THE PP ARE DESTROYED.
* 
*         CALLS  *1DD*. 
* 
*         MACROS MONITOR. 
  
  
          BSSZ   DFM-1-*     (SPARES) 
  
 DFM      SUBR               ENTRY/EXIT 
          STM    DFMA        SAVE MESSAGE ADDRESS 
          SBN    1
          STD    T2 
          SHN    -14         SET MESSAGE OPTION 
          STD    CM+2 
          LPN    17 
          SBN    BMLN/10000 
          PJN    DFM2        IF MAINTAINANCE LOG (*BMLN* OR *BMCN*) 
 DFM1     AOD    T2          ADVANCE MESSAGE ADDRESS
          LDI    T2 
          NJN    DFM1        IF NOT END OF MESSAGE
          AOD    T2          SET BYTE COUNT OF MESSAGE
          SBM    DFMA 
          STD    CM+1 
 DFM2     LDN    6
          STD    T1 
          LDD    MA          STORE MESSAGE IN MESSAGE BUFFER
          CWM    *,T1 
 DFMA     EQU    *-1
 DFM3     MONITOR  DFMM      PROCESS DAYFILE MESSAGE
 .A       IFC    EQ,/".PP"/NPP/ 
          LDD    CM+3 
          ZJN    DFMX        IF BUFFER DUMP NOT REQUIRED
 DFMB     LDC    **          READ *1DD* LOAD CODE 
          CRM    10003-3*5,TR 
 .A       ELSE
*         LDN    0
          UJN    DFMX        RETURN 
 .A       ENDIF 
 EXR      SPACE  4,15 
***       EXR - EXECUTE ROUTINE.
* 
*         CAUTION, ONE SHOULD NOT LOAD NON CM RESIDENT
*         OVERLAYS WITH NON-DEDICATED CHANNEL(S) RESERVED.
* 
*         ENTRY  (A) = ROUTINE NAME.
*                (LA) = LOAD ADDRESS FOR LOCATION FREE ROUTINES.
* 
*         EXIT   EXIT TO CALLED ROUTINE VIA SIMULATED RETURN JUMP FROM
*                CALLER.
* 
*         CALLS  PLL. 
  
  
          BSSZ   EXR-*       (SPARES) 
  
 EXR      CON    0           RETURN ADDRESS 
          RJM    PLL         LOAD ROUTINE 
          LDML   EXR         SET RETURN ADDRESS 
          STML   6,LA 
          LJM    7,LA        ENTER ROUTINE
 SMS      SPACE  4,20 
***       SMS - SET MASS STORAGE. 
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = 0. 
* 
*         MACROS MONITOR, SFA.
* 
*         NOTE - THE *.SMS* ENTRY POINT IS SUPPORTED ONLY VIA THE 
*         *SETMS* MACRO DEFINED IN *COMPMAC*.  IF THIS LOCATION 
*         CHANGES, THE DEFINITION OF *.SMS* MUST BE CHANGED IN
*         *PPCOM* AND *COMSMSP* AND ALL PROGRAMS USING THE *SETMS*
*         MACRO MUST BE REASSEMBLED.
  
  
 .SMSX    IFLT   SMSX,* 
          ERR                *SMSX* ENTRY POINT MOVED 
 .SMSX    ELSE
          DUP    SMSX-*,1    (SPARES) 
          UJN    *           HANG-S 
 .SMSX    ENDIF 
  
 SMSX     LDN    0
  
          LJM    *           EXIT 
 .SMS     EQU    *-1
          STD    CM+4        *SETMS* AND ERROR PROCESSING OPTIONS 
          SHN    -14
          STD    CM+3 
          LDD    T5          SET EQUIPMENT
          STD    CM+1 
          LDD    MA          WRITE MESSAGE BUFFER PARAMETERS
          CWM    DRSW,TR
          MONITOR  LMSM      LOAD MASS STORAGE DRIVER 
          LDD    CM+1 
          SHN    14 
          ADD    CM+2 
          ZJN    SMS1        IF NO DRIVER LOAD
          CRM    MSFW,CM+3
 SMS1     LDD    MA          READ DRIVER CELLS
          CRM    DRSW,CM+4
          CRD    CM          READ EST 
          LDM    STSA        CHECK DRIVER PRESET EXECUTION
          NJN    SMSX        IF NO DRIVER PRESET
          CON    LJMI        ENTER DRIVER PRESET
          SPACE  4
          ERRNZ  MSFW-*      CHECK PPR CONTIGUOUS WITH MS DRIVER
 MSD      TITLE  MASS STORAGE DRIVER OVERLAY AREA.
***       MASS STORAGE DRIVERS ARE OVERLAYS LOADED BY PP RESIDENT 
*         IN AN AREA BETWEEN PP RESIDENT AND THE FIRST WORD ADDRESS OF
*         PP PROGRAMS.
          SPACE  4
**        MASS STORAGE DRIVERS ARE CODED SUCH THAT THE ENTRY POINTS 
*         REMAIN CONSTANT BETWEEN ALL DRIVERS.
* 
*         PARAMETERS PASSED TO THE DRIVER - 
*                (T4) = CHANNEL, IF PREVIOUSLY RESERVED.
*                (T5) = EST ORDINAL.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         THE RULES - 
*                NAME = *6DN*, WHERE N IS A UNIQUE LETTER FOR EACH
*                            DRIVER.  DRIVER NAMES FOR AN EQUIPMENT 
*                            ARE DEFINED IN *COMSMSP*.
* 
*                ORIGIN = *MSFW*
* 
*                FIRST WORD = ADDRESS OF THE DRIVER INITIALIZATION
*                            ROUTINE.  THIS ENTRY IS USED BY *SMS* TO 
*                            CAUSE INITIALIZATION OF THE DRIVER.  EXIT
*                            FROM INITIALIZATION IS TO *SMSX*.
*                            *SMS* ENTERS THE INITIALIZATION ROUTINE
*                            WITH (CM - CM+4) = EST ENTRY.
* 
*                THE ENTRIES FOR READ, WRITE, AND ENDMS ORIGINED
*                            AT THE APPROPRIATE SYMBOLIC NAMES. 
*                            I.E. *RDS*, *WDS*, *EMS*.
*                            THESE ENTRIES ARE ENTERED VIA RETURN 
*                            JUMP, AND DUE TO THE DEFINITION OF THE 
*                            NAMES, TRANSFER CODE IS NECESSARY. 
* 
*                THE DRIVER MUST NOT USE ANY DIRECT LOCATIONS 
*                            EXCEPT T1, T2, T4, AND CM - CM+4.
*                            THE INTEGRITY OF THE MESSAGE BUFFER IS NOT 
*                            GUARANTEED DURING DRIVER PROCESSING. 
*                            *SETMS* PROCESSING IS CONSIDERED PART
*                            OF DRIVER PROCESSING AND FOLLOWS THE 
*                            SAME RULES FOR DIRECT CELL AND MESSAGE 
*                            BUFFER USAGE.
* 
*                THE DRIVER WILL AUTOMATICALLY REQUEST THE CHANNEL AS 
*                            NECESSARY ON CALLS TO *RDS* AND *WDS*. 
*                            THE CALLING PROGRAM MUST REQUEST THE 
*                            DRIVER (BY USING THE *ENDMS* MACRO)  TO
*                            RETURN THE CHANNEL WHEN THE MASS STORAGE 
*                            OPERATION IS COMPLETE.  T4 IS RESERVED FOR 
*                            THE DRIVER TO STORE THE CURRENT CHANNEL
*                            NUMBER.  THE CONTENTS OF T4 MUST NOT BE
*                            CHANGED BETWEEN CALLS TO THE DRIVER BEFORE 
*                            THE *ENDMS*. 
  
*                USE OF THE *IOCH* AND *PIOCH* DRIVER TYPES REQUIRES
*                            CALLER TO STORE THE CHANNEL NUMBER IN *T4* 
*                            PRIOR TO CALLING THE DRIVER. 
* 
*                THE ERROR PROCESSOR ORIGIN IS AT *EPFW* OR HIGHER AND
*                            THE ERROR PROCESSOR EXTENDS TO THE END OF
*                            PP MEMORY.  THE ERROR PROCESSOR MAY BE 
*                            CALLED BY *RDS* AND *WDS*. 
* 
*                THE DRIVER AND ITS ASSOCIATED ERROR PROCESSORS MUST
*                            RESIDE IN RPL. 
          SPACE  4,10 
**        SETMS - SET MASS STORAGE DRIVER.
* 
*         CAUTION - NOT ALL *SETMS* CALLS CAUSE A DRIVER TO BE LOADED - 
*                   REFER TO THE OPERATION DESCRIPTIONS SHOWN BELOW.
*                   CALLS TO DRIVER ROUTINES *RDS*, *WDS* AND *.EMS*
*                   (CALLED BY *ENDMS* MACRO) MUST NOT BE MADE WITHOUT
*                   FIRST ISSUING A *SETMS* CALL WITH AN OPTION THAT
*                   DOES CAUSE A DRIVER LOAD. 
* 
*         CALL
* 
*         SETMS  OP,(EP),WB 
*         OP =   OPERATION TO PERFORM.
*                IO          READ OR WRITE. 
*                IOCH        READ OR WRITE USING CHANNEL SELECTED BY
*                            CALLER.
*                PIO         READ OR WRITE PROTECTED SECTOR(S). 
*                PIOCH       READ OR WRITE PROTECTED SECTOR(S) USING
*                            CHANNEL SELECTED BY CALLER.
*                STATUS      RETURN EQUIPMENT STATUS.  ALL *SETMS* EXIT 
*                            CONDITIONS ARE SATISFIED EXCEPT NO DRIVER
*                            LOAD IS PERFORMED. 
*                READSTR     READ STREAM.  VALID FOR BUFFERED I/O 
*                            DEVICES ONLY.
*                READSYS     READ SYSTEM FILE.  THIS OPTION DIRECTS 
*                            THE SYSTEM TO SELECT AN APPROPRIATE
*                            DEVICE FROM WHICH TO READ.  THIS OPTION
*                            IMPLIES SELECTION OF THE *EPNS* ERROR
*                            PROCESSING OPTION IN THAT *MTR* WILL NOT 
*                            RETURN THE *LNRE* ERROR FLAG FOR AN OFF OR 
*                            SUSPECT DEVICE IF THE *READSYS* OPERATION
*                            TYPE IS IN EFFECT. 
*                POSITION    FORCE SEEK ON NEXT DRIVER CALL. NO DRIVER
*                            LOAD OCCURS. 
*                NODRIVER    FORCE DRIVER LOAD ON NEXT *SETMS* CALL.
*                            NO DRIVER LOAD OCCURS.  THIS OPERATION IS
*                            FORCED BY THE *PIO* AND *PIOCH* OPERATION
*                            TYPES. 
* 
*         EP     ERROR PROCESSING OPTIONS.
*                AD = ALLOW ACCESS TO *DOWN* DEVICE.
*                AR = RETURN TO THE CALLER IMMEDIATELY FOR ANY TYPE 
*                     OF ERROR.  NOTE - SELECTION OF AR IS EQUIVALENT 
*                     TO SELECTION OF NR, ER, AND RR. 
*                DE = DISABLE *ENDMS*.
*                DF = DISABLE FAILURE EVALUATION.  THE DEVICE WILL
*                     NOT BE FLAGGED AS SUSPECT NOR WILL A TRACK BE SET 
*                     IN THE MST WHEN A MEDIA ERROR OCCURS. 
*                ER = RETURN TO CALLER FOR NORMAL ERROR CONDITIONS. 
*                     NORMAL ERRORS ARE THOSE NOT INCLUDED IN RESERVE 
*                     ERROR TYPES.
*                ND = NO LEVEL 1 DIAGNOSTICS SHOULD BE RUN
*                     (ISD DEVICES ONLY). 
*                NF = NO FLUSH OF ECS BUFFER ON *WLSF* FUNCTION 
*                     (BUFFERED DEVICES ONLY).
*                NR = IMMEDIATE RETURN ON NOT READY ERRORS.  THIS 
*                     INCLUDES THE FOLLOWING CONDITIONS - 
*                            A. HARDWARE NOT READY. 
*                            B. REDEFINITION IN PROGRESS. 
*                            C. DEVICE DOWN.
*                NS = IGNORE DEVICE STATE.  THIS OPTION IS USED BY PP 
*                     PROGRAMS THAT WANT TO ATTEMPT ACCESSING A DEVICE
*                     REGARDLESS OF ITS LOGICAL STATUS. 
*                RR = IMMEDIATE RETURN ON RESERVE ERRORS. 
*                RW = REWRITE DATA OPERATION, RECOPY OF EXISTING
*                     DATA (BUFFERED DEVICES ONLY). 
*                SM = DISALLOW *1DD* LOAD INTO THIS PP. 
* 
*         WB     ADDRESS OF WRITE ERROR PROCESSING BUFFER.
* 
*         NOTE - THIS MACRO IS THE ONLY SUPPORTED INTERFACE TO THE
*         *.SMS* PPR ENTRY POINT.  THE VALUE OF THIS SYMBOL IS
*         DEFINED IN *PPCOM*. 
* 
*         EXIT   (A) = 0. 
*                (CM - CM+4) = *EQDE* WORD OF EST ENTRY.
*                (SLM) =     MAXIMUM NUMBER OF SECTORS PER TRACK. 
*                (UERR) =    ERROR PROCESSING OPTIONS.
*                (MSD) = 1/S, 4/0, 1/F, 6/D 
*                        S = 1 IF JOB IS NOT A SUBSYSTEM. 
*                        F = 1 IF DEVICE IS INACCESSIBLE (DEVICE STATE
*                            *OFF* OR *DOWN* OR SUSPECT FLAG SET).
*                            THIS FLAG WILL ALWAYS BE CLEAR IF THE
*                            *UCTM* JOB TERMINATION MODE IS SET.
*                        D = DRIVER INDEX.
*                            0    NO DRIVER PRESENT IN PP.
*                            1    *6DI* PRESENT.
*                            2    *6DJ* PRESENT.
*                            3    *6DP* PRESENT.
*                            4    *6DE* PRESENT.
*                            5    *6DX* PRESENT.
 RDS      SPACE  4,20 
**        RDS - READ SECTOR.
* 
*         CAUTION, STORAGE MOVE MAY OCCUR.
* 
*         ENTRY  DRIVER INITIALIZED (SETMS MACRO EXECUTED). 
*                (T4) = CHANNEL IF PREVIOUSLY RESERVED OR THE OPERATION 
*                       TYPE IS *IOCH* OR *PIOCH*.
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
*                (A) = FWA OF DATA BUFFER. (502 WORD BUFFER NEEDED.)
* 
*         EXIT   (A) = 0 IF NO ERROR OR RECOVERED ERROR.
*                    = 1/1, 5/0, 12/(RDCT) IF UNRECOVERED ERROR.
*                (T4) = CHANNEL.
* 
*         NOTE   REFER TO *COMSMSP* FOR A DESCRIPTION OF THE CONTENTS 
*                OF *RDCT*. 
 WDS      SPACE  4,30 
**        WDS - WRITE SECTOR. 
* 
*         CAUTION, STORAGE MOVE MAY OCCUR.
* 
*         ENTRY  DRIVER INITIALIZED (SETMS MACRO EXECUTED). 
*                (T4) = CHANNEL IF PREVIOUSLY RESERVED OR THE OPERATION 
*                       TYPE IS *IOCH* OR *PIOCH*.
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
*                (A) = 6/  WF,12/  BA.
*                      WF = WRITE LAST SECTOR FLAG. 
*                           WCSF IS ADDED TO THE BUFFER ADDRESS WHEN
*                           WRITING CONSECUTIVE SECTORS.
*                           WLSF IS ADDED TO THE BUFFER ADDRESS WHEN
*                           WRITING THE LAST SECTOR.
*                (WDSE) = FWA OF WRITE ERROR RETRY BUFFER.
*                THIS BUFFER IS USED TO RETRY ERRORS ON THE PREVIOUS
*                SECTOR WHICH CAN OCCUR WHEN WRITING IN FULL TRACK
*                MODE. (502 WORD BUFFER NEEDED) 
*                WHENEVER WDS IS ENTERED WITH WCSF SPECIFIED AN ERROR 
*                MAY OCCUR ON THAT SECTOR WHICH MAY NOT BE DETECTED 
*                UNTILL WRITING THE NEXT SECTOR. THUS WHEN WRITING
*                ANY SECTOR FOLLOWING A WCSF SECTOR THE CALLING PPU 
*                PROGRAM MUST MAKE ALLOWANCES FOR RECOVERING THE
*                PREVIOUS SECTOR. THERE ARE TWO OPTIONS AVAILABLE FOR 
*                RECOVERING THESE ERRORS.  FIRST, THE 
*                PP PROGRAM CALLING WDS MAY ELECT NOT TO SET A
*                BUFFER ADDRESS IN WDSE. WHEN THIS IS DONE HOWEVER
*                THE ACCUMULATOR MUST BE CHECKED FOR NEGATIVE WITH
*                BIT 9 SET UPON RETURN FROM *WDS*.
*                THIS INDICATES THAT THE CURRENT SECTOR DATA WAS
*                DESTROYED AND THUS THE PP PROGRAM MUST REGENERATE THE
*                DATA AND LINKAGE BYTES AND REISSUE THE SECTOR TO WDS.
*                THE SECOND METHOD OF RECOVERING THESE ERRORS IS
*                SIMPLY TO SPECIFY A BUFFER ADDRESS IN WDSE. WHEN 
*                THIS IS DONE THE DRIVER AUTOMATICALLY ATTEMPTS 
*                RECOVERY OF THE PREVIOUS AND REISSUES THE CURRENT
*                SECTOR.
* 
*         EXIT   (A) = 0 IF NO ERROR OR RECOVERED ERROR.
*                    = 1/1, 5/0, 12/(RDCT) IF UNRECOVERED ERROR.
*                      IF BIT 11B OF *RDCT* IS SET, AN ERROR ON THE 
*                      PREVIOUS SECTOR WAS RECOVERED, BUT BECAUSE NO
*                      WRITE ERROR PROCESSING BUFFER WAS SPECIFIED, 
*                      THE CURRENT SECTOR BUFFER WAS USED TO RECOVER
*                      THE PREVIOUS SECTOR ERROR.  SO THE CURRENT 
*                      SECTOR BUFFER MUST BE REGENERATED AND THE WRITE
*                      OPERATION REISSUED.
*                (T4) = CHANNEL.
* 
*         NOTE   REFER TO *COMSMSP* FOR A DESCRIPTION OF THE CONTENTS 
*                OF *RDCT*. 
 EMS      SPACE  4,20 
**        EMS - END MASS STORAGE OPERATION. 
* 
*         CAUTION, STORAGE MOVE MAY OCCUR.
* 
*         ENTRY  DRIVER INITIALIZED (SETMS MACRO EXECUTED). 
*                (T4) = CHANNEL, IF RESERVED. 
*                (T5) = EQUIPMENT.
*                (T6) = TRACK.
*                (T7) = SECTOR. 
* 
*         EXIT   (A) = 0. 
          SPACE  4,10 
**        USING THE MASS STORAGE DRIVERS. 
* 
*         THE *SETMS* MACRO IS USED TO INITIATE A DISK I/O SEQUENCE AND 
*         THE *ENDMS* MACRO TERMINATES IT.  FOLLOWING IS THE GENERAL
*         FLOW TO READ AND REWRITE A SECTOR-
* 
*         SET UP T5 
*         SETMS  IO 
*         SET UP T6 AND T7
*         LDC    BUF
*         RJM    RDS
*         MJN    ERR
*         LDC    BUF+WLSF 
*         RJM    WDS
*         MJN    ERR         IF I/O ERROR OR INACCESSIBLE DEVICE
*         ENDMS 
* 
*         DURING AN I/O SEQUENCE, THE *SETMS* MACRO MUST BE REISSUED
*         WHEN- 
*                1) CHANGING TO A DIFFERENT EQUIPMENT.
*                2) CHANGING LOGICAL TRACKS IF IT IS POSSIBLE THAT
*                   THE FIRST SECTOR ON THE NEW TRACK MAY BE EXACTLY
*                   ONE GREATER THAN THE LAST SECTOR WRITTEN ON THE OLD 
*                   TRACK.  IN THIS CASE USE THE *POSITION* OPTION TO 
*                   FORCE A SEEK ON THE FIRST ACCESS OF THE NEW TRACK 
*                   WITHOUT ISSUING AN *LMSM* MONITOR FUNCTION. 
*                3) CHANGING FROM A READ OPERATION TYPE TO A WRITE
*                   OPERATION TYPE OR VISA VERSA IF IT IS POSSIBLE THAT 
*                   THE FIRST SECTOR TO BE READ/WRITTEN UNDER THE NEW 
*                   OPERATION TYPE IS EXACTLY ONE GREATER THAN THE LAST 
*                   SECTOR WRITTEN/READ UNDER THE FORMER OPERATION. 
*                4) CHANGING ERROR PROCESSING OPTIONS, CHANGING 
*                   SPECIFICATION OF A WRITE ERROR PROCESSING BUFFER, 
*                   OR CHANGING THE OPERATION TYPE (E. G. FROM *IO* TO
*                   *READSYS*). 
* 
*         UNLESS ONE OF THE ABOVE CONDITIONS EXISTS, A *SETMS* IS NOT 
*         REQUIRED IN ORDER TO DO ADDITIONAL I/O AFTER AN *ENDMS*.
* 
*         THE CALLING PROGRAM IS RESPONSIBLE FOR ISSUING AN *ENDMS* 
*         TO TERMINATE EVERY I/O SEQUENCE THAT DOES NOT ENCOUNTER AN
*         ERROR.  IF THE DRIVER RETURNS AN ERROR STATUS, THE *ENDMS*
*         IS DONE AUTOMATICALLY BY THE DRIVER, UNLESS THE *DE* OPTION 
*         WAS SPECIFIED ON THE *SETMS*. 
 PRS      TITLE  INITIALIZATION.
**        PRS - INITIALIZATION. 
* 
*         ENTRY  (T1) = 0 TO CLEAR PP MEMORY AND DROP PP. 
*                (T1) .NE. 0 IF NO PP DROP. 
*                (IA) = INPUT REGISTER ADDRESS. 
*                (OA) = OUTPUT REGISTER ADDRESS.
*                (MA) = MESSAGE BUFFER ADDRESS. 
*                (CP) = CONTROL POINT ADDRESS.
  
  
 PRS      LJM    PPR         ENTRY/EXIT  ENTERED BY *RJM* FROM *STL*
 .A       IFC    EQ,/".PP"/NPP/ 
          LDD    T1          SET FLAG TO IDENTIFY CALLER
          STM    PRSG 
 .A       ENDIF 
          LDK    PPCP        READ PP COMMUNICATION POINTER
          CRD    CM 
          LDD    IA          SET PP NUMBER
          SBD    CM+4 
          SHN    -PPCES 
          STD    T2 
          SBN    2           SET (PP NUMBER - 2) * 21 
          STD    T1 
          SHN    4
          RAD    T1 
          LDN    PXPP        READ PP EXCHANGE STATUS
          CRD    CM 
          LDD    T1          SET EXCHANGE PACKAGE ADDRESS 
          RAD    CM+4 
          STM    XJ3+1
          STM    XJ4+1
          SHN    -14
          RAD    CM+3 
          LMC    LDCI 
          STM    XJ3
          STM    XJ4
          LDD    CM+4        SET EXCHANGE PACKAGE MA ADDRESS
          ADN    6
          STM    XJ2+1
          SHN    -14
          ADD    CM+3 
          LMC    LDCI 
          STM    XJ2
          LDN    PXPP+1      READ (P), (A0), (B0) 
          CRM    FTNA,ON
          LDC    SHNI+6      RESET SHIFT INSTRUCTION
          STM    FTNA+4 
          LDN    ACPL        READ CPU 0 STATUS
          CRD    CM 
          LDD    CM          CHECK CPU 0
          SHN    6
          PJN    PRS1        IF CPU 0 AVAILABLE 
          AOM    CP1         SET CPU 1 EXCHANGE 
          LDD    HN 
          RAM    FTNA+3 
 PRS1     LDK    MABL        READ HARDWARE OPTIONS
          CRD    CM 
          LDM    PRSC,CM+4   GET DELAY FACTOR FOR PP SPEED
          STM    DLYA 
          LDM    PRSD,CM+4
          STM    FTNB+1      SET REJECTED REQUEST RETRY DELAY 
          LDM    PRSE,CM+4
          STM    FTNE        SET EXCHANGE RETRY DELAY 
          LDM    PRSF,CM+4
          STM    FTNF        SET EXCHANGE TIMEOUT DELAY 
          LDM    PRSH,CM+4   SET DELAY COUNTER
          STM    .DLY 
          LDN    ESTP        SET EST POINTER
          CRD    CM 
          LDD    CM 
          RAM    ESTA 
          LDD    CM+1 
          STM    ESTA+1 
 .A       IFC    EQ,/".PP"/NPP/ 
          LDN    DFPP        SET FWA OF DAYFILE DUMP BUFFER 
          CRD    CM 
          LDD    CM+2 
          RAM    DFMB 
          LDD    CM+3 
          STM    DFMB+1 
          LDK    MMFL        CHECK MMF ENVIRONMENT
          CRD    CM 
          LDD    CM+1 
          SHN    -12
          NJN    PRS3        IF ISHARED OR LOW SPEED PORT MMF 
          SOM    FTNB        ADJUST TIME DELAY
 PRS3     LDC    ** 
 PRSG     EQU    *-1
          NJN    PRS5        IF NOT RETURNED PP 
          LDC    PPFW 
          STD    T2 
          LDN    0
 PRS4     STI    T2 
          AOD    T2 
          SHN    -14
          ZJN    PRS4        IF MORE TO CLEAR 
          MONITOR  DPPM      MAKE PP AVAILABLE
 PRS5     LJM    PRS         RETURN 
 .A       ELSE
          LDC    PRSI        GET TABLE OF LONG INSTRUCTIONS 
          STD    CM+4 
 PRS6     LDI    CM+4        GET NEXT INSTRUCTION ADDRESS 
          ZJN    PRS7        IF END OF LIST 
          STD    T3 
          BLI    T3          BUILD LONG INSTRUCTION 
          AOD    CM+4 
          UJN    PRS6        PROCESS NEXT INSTRUCTION 
  
 PRS7     LDD    CP          SET *FTN* RETURN TO READ FLSW+1
          ADN    1
          RAM    FTNC+1 
          LDN    ZERL        SET *ACPP* PARAMETERS FOR CALLING CP 
          CRD    CM 
          LDD    CP 
          STD    CM+4 
          STD    CM+2 
          SHN    -7 
          STD    CM 
          STM    FTNG        SET CP NUMBER FOR MOVE CHECK 
          LDK    PPCP 
          CRD    MP 
          LDD    IA          SET *ACPP* ADDRESS 
          SBD    MP+4 
          SHN    PPXES-PPCES
          ADK    ACPP 
          ADD    MP+1 
          SHN    6
          ADD    MP 
          SHN    14 
          CWD    CM          SET *ACPP* TO CALLING CP 
  
*         LOAD AND EXECUTE REQUESTED ROUTINE. 
  
          LDD    IA          READ INPUT REGISTER
          CRD    IR 
          LDD    MA          READ MESSAGE BUFFER
          CRM    MP,TR
          LDC    PPR1        SET RETURN FROM *PLL*
          STM    PLL
          LDD    IR+1        SET PACKAGE NAME 
          SCN    77 
          SHN    6
          LMD    IR 
          SHN    6
          LJM    PLL+1       LOAD PROGRAM 
 .A       ENDIF 
  
  
*         DELAYS FOR 1X, 2X, AND 4X PP SPEEDS.
  
 PRSC     BSS    0           INPUT REGISTER READ DELAY
          LOC    0
          CON    SBNI+20     1X PP SPEED
          CON    SBNI+10     2X PP SPEED
          CON    SBNI+4      4X PP SPEED
          LOC    PRSC+* 
  
 PRSD     BSS    0           REJECTED REQUEST RETRY DELAY 
          LOC    0
          CON    SBNI+2      1X PP SPEED
          CON    SBNI+1      2X PP SPEED
          CON    SBNI+1      4X PP SPEED
          LOC    PRSD+* 
  
 PRSE     BSS    0           EXCHANGE RETRY DELAY 
          LOC    0
          CON    SBNI+77     1X PP SPEED
          CON    SBNI+40     2X PP SPEED
          CON    SBNI+20     4X PP SPEED
          LOC    PRSE+* 
  
 PRSF     BSS    0           EXCHANGE TIMEOUT DELAY 
          LOC    0
          CON    LCNI+3      1X PP SPEED
          CON    LCNI+2      2X PP SPEED
          CON    LCNI+2      4X PP SPEED
          LOC    PRSF+* 
  
 PRSH     CON    75,173,370  1X, 2X, 4X PP SPEEDS 
  
          IFC    EQ,/".PP"/NPP/,1 
          ERRPL  *-PPFW      PRESET CODE FOR NONCURRENT PPS IS TOO LONG 
  
 PRSI     BSS    0           TABLE OF LONG INSTRUCTIONS 
          LIST16
  
          BSS    0           LWA + 1 OF PP RESIDENT PRESET
          LOC    *O 
          QUAL   *
          ENDX
