*COMDECK  COMPMAC 
          CTEXT  COMPMAC - PERIPHERAL PROCESSOR SYSTEM MACROS.
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1971.
 COMPMAC  SPACE  4
***       COMPMAC - PERIPHERAL PROCESSOR SYSTEM MACROS. 
*         G. R. MANSFIELD.   69/09/27.
*         R. S. HORECK.      71/10/10.
 COMPMAC  SPACE  4
***              COMPMAC DEFINES SEVERAL MACROS WHICH ARE USED IN THE 
*         SYSTEM PP PACKAGES. 
 COMPMAC  SPACE  4
***       SCRATCH SYMBOLS.
* 
* 
*         THE FOLLOWING SYMBOLS ARE USED IN MACROS FOR SCRATCH. 
*         .1, .2, .3. 
  
  
          NOREF  .1,.2,.3 
 ADBC     SPACE  4
***       ADBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         ADBC   (P1,P2,...,PN) 
*         ADD A CONSTANT CONTAINING BITS PN TO (A). 
  
  
          PURGMAC ADBC
 ADBC     MACRO  P
  .1 (P)
  ADK .1
  ENDM
 BITCON   SPACE  4
***       BITCON - SET BIT CONSTANT.
* 
* 
*         BITCON (P1,P2,...,PN) 
*         ENTRY  (PN) = BIT NUMBERS TO SET. 
  
  
          PURGMAC BITCON
 BITCON   MACRO  P
.1 BITSET (P) 
   CON .1 
   ENDM 
 BITSET   SPACE  4
***       BITSET - GENERATE A MULTI-BIT CONSTANT. 
* 
* 
*NAME     BITSET (P1,P2,...,PN) 
*         ENTRY  *NAME* = NAME OF BIT CONSTANT. 
*                (PN) = BITS TO SET.
  
  
          PURGMAC BITSET
          MACRO  BITSET,N,P 
 N SET 0
   IRP P
.1 DECMIC P 
 N SET N+1S".1" 
   IRP
   BSS 0
   ENDM 
 EXECUTE  SPACE  4
***       EXECUTE - PROGRAM/OVERLAY CALL. 
*         THIS MACRO IS INTENDED TO BE USED FOR CROSS REFERENCE 
*         PURPOSES. 
* 
* 
*         EXECUTE NAME,ADDRESS
*         ENTRY  (NAME) = NAME OF PROGRAM/OVERLAY.
*                (ADDRESS) = LOAD ADDRESS FOR OVERLAY.
*                (ADDRESS) = (*), LOAD *NAME* INTO -A- REGISTER, BUT
*                            DO NOT EXECUTE.
*                (ADDRESS) = (=), DO NOT GENERATE CODE. 
*         EXIT   (A) = 3R*NAME* SHIFTED 12 BITS LEFT. (ABC = 3RCAB) 
*         CALLS  R.OVLJ (IF *ADDRESS* NOT GIVEN, ELSE R.OVL)
  
  
          PURGMAC EXECUTE 
 EXECUTE  MACRO  N,A
   IFC NE,$A$=$ 
.1 SET 3R_N 
.2 SET .1/100B
.3 SET .2*100B
.3 SET .1-.2
.3 SET .3*10000B
.3 SET .3+.2
   LDC .3 
   IFC NE,$A$*$ 
   STD OV 
   SHN -6 
   SCN 77B
   STD OV+1 
.4 IFC NE,$A$$
   LDC A
   STD LA 
   RJP R.OVL
.4 ELSE 1 
   LJP R.OVLJ 
   ENDIF
   ENDM 
 INDEX    SPACE  4
***       INDEX - GENERATE INDEXED TABLE. 
* 
* 
*NAME     INDEX  TYPE,ADDRESS 
*         THIS MACRO IS INTENDED TO GENERATE TABLES WHICH ARE INDEXED 
*         BY SYMBOLIC CONSTANTS SUCH AS FILE AND JOB ORIGIN CODES.
*         IT HAS 3 CALLING SEQUENCES. 
*         IF *NAME* IS PRESENT, THE FWA OF THE TABLE IS SET TO *NAME*.
* 
*         IF *ADDRESS* IS MISSING, THE TABLE IS TERMINATED WITH AN
*         *ORG* TO THE END OF THE TABLE.  THIS RESULTS IN ZERO ENTRIES
*         FOR UNDEFINED ENTRIES IN THE TABLE. 
* 
*         OTHERWISE, A TABLE ENTRY IS MADE AT *INDEX* + *TYPE* OF 
*         *ADDRESS*.
* 
*         EXAMPLE - TO GENERATE A TABLE FOR PROCESSING FILE TYPES.
* 
*TFTP     INDEX              BEGIN TABLE
* 
*         INDEX  PRFT,PRP    PROCESS PRINT FILE AT *PRP*
*         INDEX  LOFT,LOP    PROCESS LOCAL FILE AT *LOP*
* 
*         INDEX  MXFT        TERMINATE TABLE AT *TFTP*+*MXFT* 
* 
*         THE CODE PROCESSING THIS TABLE NOTES THAT - 
*         A FILE TYPE \ *MXFT* CANNOT BE PROCESSED, 
*         A TABLE ENTRY = 0, CANNOT BE PROCESSED. 
* 
*         USES   SYMBOL NAME *INDEX*. 
*         CALLS  NONE.
  
  
          PURGMAC INDEX 
          MACRO  INDEX,A,B,C
   IFC NE,$A$$
 A BSS 0
.2 SET A
   ELSE 5 
   ORG .2+B 
   IFC NE,$C$$,2
   LOC B
   CON C
   BSS 0
   ENDM 
 PPINIT   SPACE  4
***       PPINIT - INITIALIZE PP PROGRAM. 
* 
* 
*         PPINIT
*         EXIT   (CM - CM+4) = CPU STATUS WORD. 
*                (IR - IR+4) = PP INPUT REGISTER. 
*                (RA) = REFERENCE ADDRESS/100B
*                (FL) = FIELD LENGTH/100B 
*                (ON) = 1.
*                (CP) = CONTROL POINT AREA ADDRESS. 
*         CALLS  RAF. 
  
  
          PURGMAC PPINIT
 PPINIT   MACRO 
  LDN 1 
  STD ON
  LDD IA
  CRD IR
  PAUSE 
  ENDM
 JMP      SPACE  4
***       JMP - UNCONDITIONAL THREADED JUMP.
* 
* 
*         JMP    TAG
*         THIS WILL FORM A UJN JUMP BACKWARDS TO THE LAST JUMP TO TAG,
*         OR WILL FORM A LJM TO TAG.
*         EXIT   .TAG = ADDRESS OF LAST BRANCH TO TAG.
  
  
          PURGMAC JMP 
 JMP      MACRO  A
   IF DEF,A 
   IFGT A+40B,*,1 
.A SET A
   IF DEF,.A
   IFGT .A+40B,*
   UJN .A 
.A SET *-1
   ELSE 
.A SET *
   LJM A
   ENDIF
   ENDM 
 LCK      SPACE  4
***       LCK - LOAD COMPLEMENT CONSTANT TO (A).
* 
* 
*         LCK    VALUE
*         LOAD (A) WITH THE COMPLEMENT OF *VALUE*.
  
  
          PURGMAC LCK 
 LCK      MACRO  V
.1 SET V
   .2 LCN,LDN,.1,-.1,LDC,-.1
   ENDM 
 LDBC     SPACE  4
***       LDBC - LOAD (A) WITH BIT CONSTANT.
* 
* 
*         LDBC   (P1,P2,...,PN) 
*         LOAD (A) WITH A CONSTANT CONTAINING BITS PN.
  
  
          PURGMAC LDBC
 LDBC     MACRO  P
  .1 (P)
  LDK .1
  ENDM
 LMBC     SPACE  4
***       LMBC - LOGICAL DIFFERENCE BETWEEN (A) AND BIT CONSTANT TO (A).
* 
* 
*         LMBC   (P1,P2,...,PN) 
*         LOGICAL DIFFERENCE OF (A) AND CONSTANT CONTAINING BITS PN.
  
  
          PURGMAC LMBC
 LMBC     MACRO  P
  .1 (P)
  LMK .1
  ENDM
 LMK      SPACE  4
***       LMK - LOGICAL DIFFERENCE BETWEEN (A) AND *VALUE* TO (A).
* 
* 
*         LMK    VALUE
*         SET (A) = LOGICAL DIFFERENCE BETWEEN *VALUE* AND (A). 
  
  
          PURGMAC LMK 
 LMK      MACRO  V
.1 SET V
   .2  LMN,LMC,.1,.1,LMC,.1 
   ENDM 
 LPBC     SPACE  4
***       LPBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         LPBC   (P1,P2,...,PN) 
*         LOGICAL PRODUCT OF (A) AND CONSTANT CONTAINING BITS PN. 
  
  
          PURGMAC LPBC
 LPBC     MACRO  P
  .1 (P)
  LPK .1
  ENDM
 LPK      SPACE  4
***       LPK - LOGICAL PRODUCT OF (A) AND *VALUE* TO (A).
* 
* 
*         LPK    VALUE
*         SET (A) = LOGICAL PRODUCT OF (A) AND *VALUE* TO (A).
  
  
          PURGMAC LPK 
 LPK      MACRO  V
.1 SET V
   .2  LPN,SCN,.1,-.1,LPC,.1
   ENDM 
 MONITOR  SPACE  4
***       MONITOR - REQUEST MONITOR FUNCTION. 
* 
* 
*         MONITOR FUNCTION
*         ENTRY  (FUNCTION) = MONITOR FUNCTION TO PERFORM.
*                PARAMETERS PRESTORED IN (CM+1 - CM+4). 
*         EXIT   NONE.
*         CALLS  R.MTR. 
  
  
          PURGMAC MONITOR 
 MONITOR  MACRO  F
  LDN F 
  RJP R.MTR 
  ENDM
 PAUSE    SPACE  4
***       PAUSE - PAUSE FOR RELOCATION AND RESET (RA) AND (FL). 
* 
* 
*         PAUSE 
*         ENTRY  NONE.
*         CALLS  R.RAFL 
  
  
          PURGMAC PAUSE 
 PAUSE    MACRO 
  RJP R.RAFL
  ENDM
 SCK      SPACE  4
***       SCK - SELECTIVELY CLEAR THE BITS IN *VALUE* FROM (A). 
* 
* 
*         SCK    VALUE
*         CLEAR ANY BITS SET IN *VALUE* FROM (A). 
  
  
          PURGMAC SCK 
 SCK      MACRO  V
.1 SET V
   .2 SCN,LPN,.1,-.1,LPC,-.1
   ENDM 
 SUBR     SPACE  4
***       SUBR - DEFINE SUBROUTINE ENTRY/EXIT LINE. 
* 
* 
*NAME     SUBR
*         DECLARE *NAME* TO BE THE ENTRY POINT TO A PP SUBROUTINE.
*         THIS SUBROUTINE IS ENTERED VIA RETURN JUMP TO *NAME*. 
* 
*         THE FOLLOWING CODE IS GENERATED - 
*NAMEX    LJM    *
*NAME     EQU    *-1
  
  
          PURGMAC SUBR
          MACRO  SUBR,A 
A_X LJP * 
A EQU *-1 
  ENDM
 SYSCOM   SPACE  4
***       SYSCOM - DEFINE PP SYMBOLS. (DIRECT CELLS AND DAYFILE MESSAGE 
*         OPTIONS)
* 
* 
*         SYSCOM
  
  
          PURGMAC SYSCOM
 SYSCOM   MACRO 
          LIST   M
          BASE   M
  
  
****      DIRECT LOCATION ASSIGNMENTS.
* 
*         ALL DIRECT CELLS ARE IDENTIFIED BY 2 CHARACTER CODES. 
  
  
 T0       EQU    0           TEMPORARY STORAGE
 T1       EQU    1           TEMPORARY STORAGE
 T2       EQU    2           TEMPORARY STORAGE
 T3       EQU    3           TEMPORARY STORAGE
 T4       EQU    4           TEMPORARY STORAGE
 T5       EQU    5           TEMPORARY STORAGE
 T6       EQU    6           TEMPORARY STORAGE
 T7       EQU    7           TEMPORARY STORAGE
  
 CM       EQU    10 - 14     CENTRAL MEMORY BUFFER (5 LOCATIONS)
 LA       EQU    15          OVERLAY LOAD ADDRESS 
 OV       EQU    16 - 17     PP OVERLAY/NAME TO LOAD
  
*         COMMON SYMBOLS FOR OFTEN USED CELLS.
  
* AB      EQU    20 - 24     ASSEMBLY BUFFER (5 LOCATIONS)
* FS      EQU    20 - 30     FILE STATUS TABLE ENTRY (10 LOCATIONS) 
* DA      EQU    37          DEVICE AND ALLOCATION TYPE 
* BA      EQU    40 - 41     FWA FILE ENVIRONMENT TABLE ENTRY 
* FN      EQU    42 - 46     FILE NAME (5 LOCATIONS)
* FA      EQU    57          ADDRESS OF FILE STATUS TABLE ENTRY 
* FT      EQU    60 - 61     CIRCULAR BUFFER FIRST
* IN      EQU    62 - 63     CIRCULAR BUFFER IN 
* OT      EQU    64 - 65     CIRCULAR BUFFER OUT
* LM      EQU    66 - 67     CIRCULAR BUFFER LIMIT
* HN      EQU    71          CONSTANT 100B
* TH      EQU    72          CONSTANT 1000B 
* TR      EQU    73          CONSTANT 3 
  
*         LOCATIONS SET BY *PPINIT* MACRO.
  
 IR       EQU    D.PPIRB     PP INPUT REGISTER (5 LOCATIONS)
 RA       EQU    D.RA        CENTRAL MEMORY REFERENCE ADDRESS/100B
 FL       EQU    D.FL        CENTRAL MEMORY FIELD LENGTH/100B 
 ON       EQU    D.PPONE     CONSTANT 1 
 CP       EQU    D.CPAD      CONTROL POINT AREA ADDRESS (C.P. SHIFTED 7)
  
*         READ ONLY CONSTANTS SET BY PP RESIDENT. 
  
 IA       EQU    D.PPIR      PP INPUT REGISTER ADDRESS
 MA       EQU    D.PPMES1    PP MESSAGE BUFFER ADDRESS
 OA       EQU    D.PPSTAT    PP STATUS WORD/OUTPUT REGISTER 
  
  
**        DAYFILE MESSAGE OPTIONS.
* 
*         THE GENERAL FORMAT OF A DAYFILE MESSAGE OPTION IS - 
*         XXXN   WHERE -
*                XXX = OPTION IDENTIFIER. 
*                N = KEY LETTER FOR DAYFILE OPTION. 
* 
*         NORMAL DAYFILE MESSAGE IS SENT TO THE MASTER DAYFILE, THE 
*         CONTROL POINT DAYFILE, AND THE CONTROL POINT MESSAGE AREA.
  
  
 NMSN     EQU    10000       NORMAL MESSAGE TO CONTROL POINT MESSAGE
                             AREA ONLY. (*B* DISPLAY) 
 JNMN     EQU    20000       MESSAGE TO MASTER DAYFILE ONLY 
 JDCN     EQU    40000       MESSAGE TO LOCAL JOB DAYFILE 
 JDNN     EQU    50000       MESSAGE TO *B* DISPLAY AND LOCAL JOB 
                             DAYFILE ONLY 
  
  
**        DEFINE LOCAL PP OP CODES FOR *COMPMAC*
  
  
 LJP      PPOP   5,0100      *LJM* ABSOLUTE 
 RJP      PPOP   5,0200      *RJM* ABSOLUTE 
  
****
          BASE   *
          LIST   *
          ENDM
 .1       SPACE  4
**        .1 - GENERATE BIT CONSTANT. 
* 
* 
*         .1     (P1,P2,...,PN) 
*         ENTRY  (PN) = BIT CONSTANT TO SET.
  
  
          PURGMAC .1
 .1       MACRO  P
.1 SET 0
   IRP P
.2 DECMIC P 
.1 SET .1+1S".2"
   IRP
   ENDM 
 .2       SPACE  4
**        .2 - HANDLE *XXK* MACROS. 
* 
*         .2     PLD,NGD,V1,V2,MNM,V3 
*         ENTRY  PLD = OPERATION TO PERFORM USING *V1* IF 0 @ V1 @ 77B. 
*                NGD = OPERATION TO PERFORM USING *V2* IF -77B @ V1 < 0.
*                V1 = VALUE OF CONSTANT.
*                MNM = OPERATION TO PERFORM USING *V3* IF /V1/ \ 100B.
  
  
          PURGMAC .2
 .2       MACRO  PLD,NGD,V1,V2,MNM,V3 
.3 SET V1 
   IFLT .3,0,1
.3 SET -V1
   IFLT .3,100B 
.4 IFLT V1,0
   NGD V2 
.4 ELSE 4 
   PLD V1 
   ELSE 1 
   MNM V3 
   ENDM 
          SPACE  4
          ENDX
