*COMDECK  COMPMAC 
          CTEXT  COMPMAC - PP SYSTEM MACROS.
 COMPMAC  SPACE  4
***       COMPMAC - PP SYSTEM MACROS. 
*         G. R. MANSFIELD.  09/27/69. 
 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, .4, .5. 
  
  
          NOREF  .1,.2,.3,.4
 BITSET   SPACE  4
***       BITSET - GENERATE BIT CONSTANT. 
* 
* 
*NAME     BITSET (P1,P2,...,PN) 
*         ENTRY  *NAME* = NAME OF BIT CONSTANT. 
*                (PN) = BITS TO SET.
  
  
          MACRO  BITSET,N,P 
N SET 0 
  IRP P 
.1 DECMIC P 
N SET N+1S".1"
  IRP 
  BSS     0 
  ENDM
 LDP      SPACE  4,10 
***       LDP - DEFINE ABSOLUTE LOAD MEMORY INSTRUCTION.
* 
* 
*         LDP    ADDRESS
*         DEFINE AN ABSOLUTE LONG JUMP INSTRUCTION FOR USE BY OTHER 
*         MACROS. 
*         ENTRY  (ADDRESS) = MEMORY ADDRESS.
  
  
 LDP      PPOP   5,5000B
 LJP      SPACE  4
***       LJP - DEFINE ABSOLUTE LONG JUMP INSTRUCTION.
* 
* 
*         LJP    ADDRESS
*         DEFINE AN ABSOLUTE LONG JUMP INSTRUCTION FOR USE BY OTHER 
*         MACROS. 
*         ENTRY  (ADDRESS) = JUMP ADDRESS.
  
  
 LJP      PPOP   5,0100B
 RJP      SPACE  4
***       RJP - DEFINE ABSOLUTE RETURN JUMP INSTRUCTION.
* 
* 
*         RJP    ADDRESS
*         DEFINE AN ABSOLUTE RETURN JUMP INSTRUCTION FOR USE BY OTHER 
*         MACROS. 
*         ENTRY  (ADDRESS) = JUMP ADDRESS.
  
  
 RJP      PPOP   5,0200B
 LDBC     SPACE  4
***       LDBC - LOAD (A) WITH BIT CONSTANT.
* 
* 
*         LDBC   (P1,P2,...,PN) 
*         LOAD (A) WITH A CONSTANT CONTAINING BITS PN.
  
  
 LDBC     MACRO  P
  .1 (P)
  LDC .1
  ENDM
 ADBC     SPACE  4
***       ADBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         ADBC   (P1,P2,...,PN) 
*         ADD A CONSTANT CONTAINING BITS PN TO (A). 
  
  
 ADBC     MACRO  P
  .1 (P)
  ADC .1
  ENDM
 LPBC     SPACE  4
***       LPBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         LPBC   (P1,P2,...,PN) 
*         LOGICAL PRODUCT OF (A) AND CONSTANT CONTAINING BITS PN. 
  
  
 LPBC     MACRO  P
  .1 (P)
  LPC .1
  ENDM
 LMBC     SPACE  4
***       LMBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         LMBC   (P1,P2,...,PN) 
*         LOGICAL DIFFERENCE OF (A) AND CONSTANT CONTAINING BITS PN.
  
  
 LMBC     MACRO  P
  .1 (P)
  LMC .1
  ENDM
 DELAY    SPACE  4,10 
***       DELAY - DELAY FOR SYSTEM DELAY TIME.
*         DELAYS APPROXIMATELY 130 MICRO SECONDS. 
* 
*         EXIT   (A) = 0. 
  
  
 DELAY    MACRO 
  LDP DLYA
  STM *+2 
  CON 0 
  NJN *-1 
  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 IF *NAME* BEGINS
*                            WITH *0*.
*                (ADDRESS) = (*), LOAD *NAME* INTO -A- REGISTER, BUT
*                            DO NOT EXECUTE.
*                (ADDRESS) = (=), DO NOT GENERATE CODE. 
*         CALLS  EXR. 
  
  
 EXECUTE  MACRO  N,A
  QUAL
(N) SET 0 
  QUAL *
  IFC NE,$A$=$
M MICRO 1,1, N
  IFC EQ,$"M"$0$,3
  IFC NE,$A$*$,2
  LDC A . NO LOAD ADDRESS SPECIFIED 
  STD LA
  LDC 3R_N
  IFC NE,$A$*$,1
  RJP EXR 
  ENDIF 
  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  FTN. 
  
  
 MONITOR  MACRO  F
  LDN F 
  RJP FTN 
  ENDM
 OVERFLOW SPACE  4,30 
***       OVERFLOW - TEST FOR PP MEMORY OVERFLOW. 
* 
*         THIS MACRO IS INTENDED TO TEST FOR PP MEMORY OVERFLOW WHEN
*         LOADING OVERLAYS FROM MASS STORAGE.  THIS MACRO SHOULD
*         BE PLACED AT THE END OF THE OVERLAY BEING TESTED. 
* 
*         OVERFLOW ORIGIN,END 
*         ENTRY  (ORIGIN) = ORIGIN ADDRESS OF OVERLAY.  *PPFW* IS 
*                   ASSUMED IF NO PARAMETER IS ENTERED. 
*                (END) = ADDRESS THAT IS NOT TO BE DESTROYED.  (I.E.
*                   LWA+1 OF AREA BEING LOADED INTO.)  10000B (END OF 
*                   PP MEMORY) IS ASSUMED IF NO PARAMETER IS ENTERED. 
* 
*         THREE *ERRNG* PSEUDO OPS ARE USED TO INDICATE THE SPACE LEFT. 
*                *BYTES LEFT AFTER LAST SECTOR* = THE NUMBER OF BYTES 
*                   BETWEEN THE LAST BYTE OF THE LAST SECTOR READ IN
*                   AND *END*.  THE ORIGIN ADDRESS OF THE OVERLAY CAN 
*                   BE INCREASED BY THIS AMOUNT WITHOUT CAUSING OVER- 
*                   FLOW.  IF THIS IS LESS THAN 500 THE OVERLAY SIZE
*                   CANNOT BE INCREASED BY SO MUCH THAT ANOTHER SECTOR
*                   IS REQUIRED.
*                *BYTES LEFT IN LAST SECTOR* = THE NUMBER OF BYTES
*                   THAT CAN BE ADDED TO THE OVERLAY WITHOUT REQUIR-
*                   ING ANOTHER SECTOR. 
*                *BYTES CAN BE ADDED TO OVERLAY* = THE MAXIMUM NUMBER 
*                   OF BYTES THAT CAN BE ADDED TO THIS OVERLAY (ASSUM-
*                   ING THE ORG ADDRESS DOES NOT CHANGE) WITHOUT CAUS-
*                   ING OVERFLOW. 
* 
*         NOTE.  THIS MACRO USES A *USE OVERFLOW* PSEUDO OP TO FORCE
*                THE LITERALS BLOCK TO BE DEFINED.  IF THE PROGRAM HAS
*                A USE BLOCK CALLED *OVERFLOW* THE TEST WILL BE 
*                INCORRECT. 
  
  
 OVERFLOW MACRO  O,E
  USE OVERFLOW
.1 SET O PPFW 
.2 SET E 10000
.3 SET *-.1+5+4+500 
.4 SET .2-.1+5-1
          LIST   M
  
          ERRNG  .2-.1+5-.3/500*500-1 BYTES LEFT AFTER LAST SECTOR
          ERRNG  .3/500*500-5-*+.1-5  BYTES LEFT IN LAST SECTOR 
          ERRNG  .4/500*500-5-*+.1-5  BYTES CAN BE ADDED TO OVERLAY 
  
          LIST   *
  USE * 
  ENDM
 PAUSE    SPACE  4
***       PAUSE - PAUSE FOR RELOCATION AND RESET (RA) AND (FL). 
* 
* 
*         PAUSE 
*         ENTRY  NONE.
*         CALLS  PRL. 
  
  
 PAUSE    MACRO 
  RJP PRL 
  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
 .1       SPACE  4
**        .1 - GENERATE BIT CONSTANT. 
* 
* 
*         .1     (P1,P2,...,PN) 
*         ENTRY  (PN) = BIT CONSTANT TO SET.
  
  
 .1       MACRO  P
.1 SET 0
  IRP P 
.2 DECMIC P 
.1 SET .1+1S".2"
  IRP 
  ENDM
 BITCON   SPACE  4
***       BITCON - SET BIT CONSTANT.
* 
* 
*         BITCON (P1,P2,...,PN) 
*         ENTRY  (PN) = BIT NUMBERS TO SET. 
  
  
 BITCON   MACRO  P
.1 BITSET (P) 
  CON .1
  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.
  
  
          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
          ENDX
