perm filename MACTEN.MAC[IP,NET] blob
sn#702334 filedate 1983-02-16 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00035 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 DEC-10 UNIVERSAL PARAMETERS
C00005 00003 SUBTTL TABLE OF CONTENTS
C00007 00004 SUBTTL REVISION HISTORY
C00009 00005
C00011 00006 TITLE MACRO
C00013 00007 BUILD$ MACRO
C00016 00008 GENERATE A PASS2 PRINTX STATEMENT
C00018 00009 +.PARA -8
C00020 00010 MODSHW MACRO
C00021 00011 IDENTITY
C00022 00012 INTERESTING SYMBOLS
C00024 00013 SUBTTL MACRO DEFINITIONS -- DEFINING SYMBOLS
C00025 00014 MACRO TO DEFINE A SYMBOL AND FORCE IT INTERN
C00026 00015 SUBTTL MACRO DEFINITIONS -- LISTING CONTROL
C00028 00016 SUBTTL MACRO DEFINITIONS -- BYTE MANIPULATION
C00031 00017 SUBTTL MACRO DEFINITIONS -- INFO/REDEF
C00033 00018 SUBTTL MACRO DEFINITIONS -- STACK CONTROL
C00035 00019 SUBTTL SIMPLE STRUCTURE AND LOAD/STORE
C00038 00020 SUBTTL FLAG DEFINITIONS
C00039 00021 SUBTTL MACRO DEFINITIONS -- GENERATE OP CODES ABCX
C00040 00022 STORE (AC,FIRST,LAST,CONSTANT) PUTS CONSTANT IN FIRST THRU LAST.
C00041 00023 GENERATE CAI OR CAM AS APPROPRIATE
C00042 00024 GENERATE IMMEDIATE OR MEMORY CONSTANTS
C00044 00025 GENERATE IMMEDIATE OR MEMORY FOR FLOATING POINT
C00045 00026 MACRO TO GENERATE MACROS OF THE FORM TXYY. THESE MACRO REPLACE
C00048 00027 DEFINE TXC (AC,FLAG),<
C00050 00028 MACROS TO TEST AND SET/CLEAR/COMPLEMENT FLAGS WHICH ARE NOT
C00052 00029 NOTE - "TXNI.", "TXND.", "JUMPI." & "JUMPD." MAY ASSEMBLE AS ONE OR MORE
C00055 00030 JUMP TO "LOCATN" IF THE FIELD
C00057 00031 SUBTTL MACRO DEFINITIONS -- JUMPPT
C00060 00032 SUBTTL USEFUL OPDEFS
C00062 00033 SUBTTL SYMBOLS FOR THE CONTROL CHARACTERS
C00064 00034 SUBTTL HARDWARE BITS OF INTEREST TO USERS
C00065 00035 SUBTTL
C00066 ENDMK
C⊗;
SUBTTL DEC-10 UNIVERSAL PARAMETERS
.XCREF
IFDEF %..C,<IFE %..C,< .CREF
TAPE >>
;***Copyright (C) 1971,1972,1973,1974,1975,1977,1978,1979 Digital Equipment Corp., Maynard, Mass.***
;THIS PARAMETER FILE CONTAINS MACRO DEFINITIONS, SYMBOL DEFINITIONS
; AND OPDEFS WHICH ARE OPERATING SYSTEM INDEPENDENT. THIS
; FILE WAS ORIGINALLY PART OF C.MAC THE TOPS-10 CUSP UUO
; PARAMETER FILE.
MACWHO==0 ;LAST PATCHER
MACVER==3 ;MAJOR VERSION
MACMIN==0 ;MINOR VERSION
MACEDT==31 ;EDIT LEVEL
SALL
SUBTTL TABLE OF CONTENTS
; SECTION PAGE
; 1. REVISION HISTORY...................................... 3
; 2. INTERESTING SYMBOLS................................... 4
; 3. MACRO DEFINITIONS -- ND, XP, EXT, GLOB................ 5
; 4. MACRO DEFINITIONS -- LISTING CONTROL.................. 7
; 5. MACRO DEFINITIONS -- BYTE MANIPULATION................ 8
; 6. MACRO DEFINITIONS -- INFO/REDEF....................... 9
; 7. MACRO DEFINITIONS -- STACK CONTROL.................... 10
; 8. SIMPLE STRUCTURE AND LOAD/STORE....................... 11
; 9. FLAG DEFINITIONS...................................... 12
; 10. MACRO DEFINITIONS -- GENERATE OP CODES ABCX........... 13
; 11. MACRO DEFINITIONS -- JUMPPT........................... 22
; 12. USEFUL OPDEFS......................................... 23
; 13. SYMBOLS FOR THE CONTROL CHARACTERS.................... 24
; 14. HARDWARE BITS OF INTEREST TO USERS.................... 25
SUBTTL REVISION HISTORY
;BASED UPON C.MAC %7(163) RELEASED MAY, 1974
;VERSIONS RESET WHEN CREATED
;1 CREATION
;2 CLEAN UP AND CORRECT BUGS INTRODUCED IN ORIGINAL SPLIT
;3 (10-14,209) REMOVE PDP-6 TEST IF SAME AS KA IN JUMPPT
;4 MASK DOWN VALUE IN INSVL.
;5 (10-14,209) ADD .SUA?? SYMBOLS
;6 ADD LSTOF., LSTON.
;7 ADD VRSN. AND VR.???
;10 ADD SHOW.
;11 ADD CONT.
;12 ADD DEFST., LOAD., STOR.
;13 ADD FLAG., LFLAG., SFLAG. AND CHANGE TX??
;14 ADD .LHALF, .RHALF, .FWORD
;15 ADD .ZERO5
;16 ADD FRAME.
;17 ADD TY??.
;20 ADD ZERO.
;21 ADD NDS.
;22 SIMPLIFY INSVL.
;23 ADD KL-10 IN JUMPPT
;24 WITHDRAW 13 UNTIL UNDERSTOOD
;25 TITLE. ETC.
;26 SPR 10-26427 PURGE DERIVED MACRO SYMBOLS TO ELIMINATE PROBLEMS
; DURING ASSEMBLY OF A PROGRAM THAT MAY ACCIDENTALLY USE THE SAME
; SYMBOL - CAUSES MULTIPLE DEFINED LABEL MESSAGES .
; AREA AFFECTED: LAST PAGE
;27 RDH 30-MAR-79
; REDEFINE ND ETC. TO SHOW VALUES, APPEAR IN CREF LISTING
; ADD NOT-KNOWN-TO-DDT HARDWARE MNEMONICS, .NODDT OBNOXIOUS SYMBOLS
;30 RDH 28-JUN-79 10-27572, 10-27753
; MACROS GENERATED BAD CODE: MOVX AC,LH.ALF; ADDX AC,LH.ALF;
; FADRX AC,1.99999999.
;31 RDH 8-COT-79
; MORE BRACKETS IN XP MACRO TO AVOID "Q" ERRORS.
;+.CENTER
;TITLE. MACRO
;.SKIP 2
;THE TITLE. MACRO IS DESIGNED TO HANDLE THE PROBLEMS OF
;MAINTAINING VERSION NUMBERS IN PROGRAMS. THE MACRO GENERATES
;A SERIES OF MACROS TO PERFORM VARIOUS FUNCTIONS FOR THE
;MACRO-10 PROGRAMMER. THE GENERAL FORM IS:
;.PARAGRAPH 0
;TITLE. (ABV,PRGNAM,COMMENT)
;.TAB STOPS 8
;.LEFT MARG 8
;.PARAGRAPH -8
;WHERE: ABV=3-CHAR PROGRAM ABBREVIATION, IE. "DRT" FOR DIRECT.
;.BREAK
;PRGNAM=PROGRAM NAME, DIRECT.
;.BREAK
;COMMENT=SHORT STATEMENT STATING PROGRAM'S FUNCTION
;
;.LEFT MARG 0
;.PARA 0
;THE TITLE. MACRO ASSUMES THAT FOUR SYMBOLS ARE DEFINED,
;XXXVER, XXXMIN, XXXWHO AND XXXEDT, WHERE XXX=THE 3-CHARACTER
;PROGRAM ABBREVIATION SUPPLIED TO THE MACRO.
;TWO SYMBOLS ARE DEFINED XXXASC AND XXXSIX WHICH ARE SYMBOLICALLY
;AND RESPECTIVELY DEFINED AS THE ASCII AND SIXBIT VALUES OF THE
;PROGRAM ABBREVIATION SUPPLIED.
;-
SUBTTL TITLE MACRO
;&.SUBTTL TITLE MACRO
; TITLE. (DRT,DIRECT,PROGRAM TO LIST DIRECTORIES)
DEFINE TITLE.(ABV,PRGNAM,COMENT),<
.XCREF
Z==0
IFNDEF ABV'VER,<Z==-1>
IFNDEF ABV'MIN,<Z==-1>
IFNDEF ABV'EDT,<Z==-1>
IFNDEF ABV'WHO,<Z==-1>
IFL Z,<PRINTX ?SYMBOLS ABV'WHO,ABV'VER,ABV'MIN AND ABV'EDT NOT DEFINED
PRINTX ?VERSION SYMBOLS MUST BE DEFINED BEFORE CALLING TITLE. MACRO
END>
.CREF
IF2,<LALL>
ABV'SIX==SIXBIT /ABV/ ; PRGNAM ABBREVIATION IN SIXBIT
ABV'ASC==ASCIZ /ABV/ ; PRGNAM ABBREVIATION IN ASCII
SALL
.XCREF
%FIRST=ABV'MIN/↑D26
IFE %FIRST,<%SECON==ABV'MIN
%FIRST==0>
IFG %FIRST,<%SECON=ABV'MIN-<↑D26*%FIRST>>
IFE ABV'MIN-↑D26,<%SECON==ABV'MIN
%FIRST=0>
IFE ABV'MIN-↑D52,<%SECON==↑D26
%FIRST=1>
; DEFINE ALL THE MACROS
BUILD$ (PRGNAM,\ABV'VER,\ABV'MIN,\%FIRST,<,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,∨
T,U,V,W,X,Y,Z>,\%SECON,<,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,∨
V,W,X,Y,Z>,\ABV'EDT,\ABV'WHO,COMENT,ABV)
IF2,<PURGE %SECON,%FIRST,Z>
.CREF>
SUBTTL BUILD$ MACRO
;+THE TITLE. MACRO GENERATES THE FOLLOWING MACROS TO
;BE OPTIONALLY CALLED BY THE USER.
;.LEFT MARG 8
;-.TAB STOPS 8
DEFINE BUILD$ (PRGNAM,MAJN,MINOR,O1,L1,O2,L2,EDIT,CUS,COMENT,ABV,%TMP,%A,%B),<
%TMP==-1
IRP L1,<%TMP==%TMP+1
IFE O1-%TMP, <%TMP==-1
IRP L2,<%TMP==%TMP+1
IFE O2-%TMP, <
;+.PARA -8
;XXXTTL MACRO TO GENERATE A TITLE STATEMENT OF THE FORM:
;.BREAK
;-TITLE PRGNAM COMMENT VERSION
DEFINE ABV'TTL,<IFG CUS,<
TITLE PRGNAM - COMENT %'MAJN'L1'L2(EDIT)-CUS
>IFE CUS,<
TITLE PRGNAM - COMENT %'MAJN'L1'L2(EDIT)
>>
;+.PARA -8
;XXX137 MACRO TO SETUP LOCATION 137 WITH THE SPECIFIED
;-VERSION NUMBER. NOTE: THE MACRO DOES ITS OWN "LOC" AND "RELOC".
DEFINE ABV'137,<IFG CUS,<
IF2,<LALL>
LOC 137
BYTE (3)ABV'WHO(9)ABV'VER(6)ABV'MIN(18)ABV'EDT ; PRGNAM %'MAJN'L1'L2(EDIT)-CUS
RELOC
SALL
> IFE CUS,<
IF2,<LALL>
LOC 137
BYTE (3)ABV'WHO(9)ABV'VER(6)ABV'MIN(18)ABV'EDT ; PRGNAM %'MAJN'L1'L2(EDIT)
RELOC
SALL
>>
; MACRO TO DEFINE VERSION # AT CURRENT LOCATION
;+.PARA -8
;XXXVRS MACRO TO DEFINE THE VERSION NUMBER AT AN
;-ARBITRARY USER LOCATION.
DEFINE ABV'VRS,<IFG CUS,<
IF2,<LALL>
BYTE (3)ABV'WHO(9)ABV'VER(6)ABV'MIN(18)ABV'EDT ; PRGNAM %'MAJN'L1'L2(EDIT)-CUS
SALL
> IFE CUS,<
IF2,<LALL>
BYTE (3)ABV'WHO(9)ABV'VER(6)ABV'MIN(18)ABV'EDT ; PRGNAM %'MAJN'L1'L2(EDIT)
SALL
>>
; GENERATE A PASS2 PRINTX STATEMENT
;+.PARA -8
;-XXXPTX GENERATES A PASS2 PRINTX STATEMENT.
DEFINE ABV'PTX,<
IF2,<
IFG CUS,<PRINTX PRGNAM %'MAJN'L1'L2(EDIT)-CUS COMENT
> IFE CUS,<PRINTX PRGNAM %'MAJN'L1'L2(EDIT) COMENT
>>>
;+.PARA -8
;XXXSTL THE XXXSTL MACRO GENERATES A NEW PAGE
;VIA THE MACRO PAGE PSEUDO-OP AND OPTIONALLY
;DEFINES A NEW SUBTTL COMMAND. THE CALL IS "XXXSTL (COMMENT)".
;IF THE XXXSTL MACRO IS CALLED WITH A NULL ARGUMENT A COMMENT
; LINE IS GENERATED AT THE BOTTOM OF THE CURRENT PAGE
; AND AT THE TOP OF THE NEXT PAGE INDICATING THAT THE PAGE
;-HAS BEEN CONTINUED.
DEFINE ABV'STL (TEXT),<IFNB <TEXT>,<
SUBTTL TEXT
PAGE
> IFB <TEXT>,<
LALL
PAGE ; CONTINUED TO NEXT PAGE
SALL ; CONTINUED FROM PREVIOUS PAGE
>>
;+.PARA -8
;XXXUNV MACRO TO GENERATE A UNIVERSAL STATEMENT. THE MACRO IN
;EFFECT IS AN EXACT COPY OF THE XXXTTL MACRO EXCEPT THAT THE
;-WORD "UNIVERSAL" REPLACES THE WORD "TITLE".
DEFINE ABV'UNV,<IFG CUS,<
LALL
UNIVERSAL PRGNAM - COMENT %'MAJN'L1'L2(EDIT)-CUS
SALL
>IFE CUS,<
LALL
UNIVERSAL PRGNAM - COMENT %'MAJN'L1'L2(EDIT)
SALL
>>
;+.PARA -8
;XXXERR MACRO TO TYPE A FATAL ERROR MESSAGE ON THE
;USER'S TERMINAL. THE CALL IS OF THE FORM:
;.BREAK
;XXXERR (ZZZ,ERROR MESSAGE,<PDP-10 INSTRUCTION>)
;.BREAK
;ZZZ IS THE 3-CHARACTER ERROR CODE, ERROR MESSAGE IS THE ASCIZ
;STRING TO BE TYPED ON THE TERMINAL AND PDP-10 INSTRUCTION IS
;AN OPTIONAL ARGUMENT INDICATING WHAT THE USER WANTS TO DO
;ABOUT THE ERROR JUST TYPED. IF THE ARGUMENT IS NULL AN
;-EXIT IS EXECUTED.
DEFINE ABV'ERR (COD,MSG,INSTR),<
...'COD: JRST [
OUTSTR [ASCIZ \
? ABV''COD MSG\]
IFNB <INSTR>,<INSTR>
IFB <INSTR>,<EXIT>
]>
;+.PARA -8
;XXXWRN MACRO SIMILAR TO THE XXXERR MACRO EXCEPT THAT A
;WARNING MESSAGE IS ISSUED RATHER THAN A FATAL AND
;-THE DEFAULT PDP-10 INSTRUCTION TO BE EXECUTED IS "JRST .+1".
DEFINE ABV'WRN (COD,MSG,INSTR),<
...'COD: JRST [
OUTSTR [ASCIZ \
% ABV''COD MSG\]
IFNB <INSTR>,<INSTR>
IFB <INSTR>,<JRST .+1>
]>
;; DEFINE NEW MACROS HERE
>>>>;; DELETED RIGHT BRACKET HERE
PURGE %TMP,%A,%B
>
SUBTTL MODSHW MACRO
;+
;.SKIP 2
;.LEFT MARG 0
;.CENTER
;MODSHW MACRO
;.PARA 0
;THE MODSHW MACRO IS DESIGNED TO "SHOW" VERSION VALUES OF RELATED
;MODULES. THE FORM IS "MODSHW (ABV)" WHERE ABV IS THE 3-CHARACTER
;PROGRAM ABBREVIATION. THE SYMBOL "%%ABV" IS DEFINED WITH THAT VALUE.
;-
DEFINE MODSHW (ABV),<
LALL
%%'ABV==BYTE (3)ABV'WHO(9)ABV'VER(6)ABV'MIN(18)ABV'EDT
SALL
>
SUBTTL IDENTITY
TITLE. (MAC,MACTEN,DECSYSTEM-10 COMMON PARAMETER FILE)
IFNDEF %..C,<MACUNV>
MACPTX
SUBTTL INTERESTING SYMBOLS
;VERSION FORMAT COMPONENTS
VR.WHO==7B2 ;WHO EDITTED (0=DEC DEVELOPMENT, 1=OTHER DEC,
; 2-4=CUSTOMER, 5-7=END USER)
VR.VER==777B11 ;MAJOR DEC VERSION
VR.MIN==77B17 ;MINOR DEC VERSION (1=A, ETC.)
VR.EDT==777777 ;EDIT LEVEL
;MACRO TO FORMAT THIS MODULE'S VERSION
; VRSN. PREFIX
;
;ASSUMES SYMBOLS OF FORM PREFIX'CUS, ..VER, ETC.
DEFINE VRSN.(PFX),<BYTE (3)PFX'WHO (9)PFX'VER (6)PFX'MIN (18)PFX'EDT>
;MISC. CONSTANTS
.INFIN==377777,,777777 ;PLUS INFINITY
.MINFI==1B0 ;MINUS INFINITY
LH.ALF==777777B17 ;LEFT HALF WORD
RH.ALF==777777 ;RIGHT HALF WORD
FW.ORD==-1 ;FULL WORD
.ZERO5==0 ;MNEMONIC THAT NO @ OR INDEX POSSIBLE
SUBTTL MACRO DEFINITIONS -- DEFINING SYMBOLS
;MACRO TO DEFINE A SYMBOL IF NOT ALREADY DEFINED
; ND SYMBOL,VALUE
DEFINE ND(SYM,VAL)
<IF2,<IFDEF SYM,<SYM==SYM>> IFNDEF SYM,<SYM==<VAL>>>
;MACRO TO DEFINE A SYMBOL IF NOT ALREADY DEFINED AND SHOW ITS VALUE
;THIS MACRO IS SUPERCEDED BY THE ND MACRO (EDIT 27) AND IS OBSOLETE
DEFINE NDS.(SYM,VAL)
<ND (SYM,<VAL>)
PRINTX %PLEASE USE ND MACRO, NDS. MACRO IS NOW OBSOLETE
>
;MACRO TO SHOW THE VALUE OF AN ABSOLUTE SYMBOL
; SHOW SYMBOL
;WARNING-- DO NOT USE AS LAST LOCATION IN A SEGMENT
DEFINE SHOW.(ARG$),< .XCREF
EXP <ARG$>
.ORG .-1
.CREF>
;MACRO TO DEFINE A SYMBOL AND FORCE IT INTERN
; XP SYMBOL,VALUE,PRINT
; WHERE PRINT IS NON-BLANK TO PRINT OUT FROM DDT
DEFINE XP(SYM,VAL,PRINT)
<IFB <PRINT>,<SYM==:<VAL>> IFNB <PRINT>,<SYM=:<VAL>>>
;MACRO TO EXTERN A SYMBOL IF NOT DEFINED IN THIS ROUTINE
; EXT SYMBOL
DEFINE EXT(SYM)
<IRP SYM,<IF2,<IFNDEF SYM,<EXTERN SYM>>>>
;MACRO TO EXTERN OR INTERN A SYMBOL
; GLOB SYMBOL
DEFINE GLOB(SYMBOL),<
IRP SYMBOL,<
IF2,< IFDEF SYMBOL,<INTERN SYMBOL>
IFNDEF SYMBOL,<EXTERN SYMBOL>
SUPPRE SYMBOL>>>
SUBTTL MACRO DEFINITIONS -- LISTING CONTROL
;THIS MACRO IS USED TO FORCE A PAGE OVERFLOW WITH COMMENT
;TO HAVE LISTINGS MATCH THE PROPOSED CODING STANDARD.
;
;IT IS INVOKED WHENEVER A PAGE OVERFLOW WOULD HAVE HAPPENED.
;
;
;ACCORDING TO THE PROPOSED STANDARD, ALL SOURCE FOR A ROUTINE
;MUST OCCUR ON ONE PAGE. HOWEVER, IT IS IMPORTANT FOR THE
;USER TO FIND "SENTENCE" BREAKS TO FORM THE OVERFLOW (EJECT)
;POINTS. WHENEVER OVERFLOW OCCURS, A COMMENT
;TO THAT EFFECT SHOULD APPEAR IN THE LISTING. ALL THIS IS
;ACCOMPLISHED BY THE USER INCLUDING THE MACRO "CONT." IN HIS
;SOURCE AT THE POINT OF THE OVERFLOW. NO BLANKS SHOULD PRECEED
;OR FOLLOW THE MACRO.
DEFINE CONT.<LALL
PAGE ;(CONTINUED ON NEXT PAGE)
SALL ;(CONTINUED FROM PREVIOUS PAGE)
>
;MACROS TO TURN ON AND OFF LISTINGS WHEN NESTING
; LSTOF. TURNS OFF LISTING AND CREF
; LSTOF. X TURNS OFF LISTING
; LSTON. RESTORES LISTING AND CREF IF TOP LEVEL
;IF LSTIN. IS DEFINED AS .MINFI, THEN ALL LISTINGS ON
DEFINE LSTOF.(CREF$),<
IFNDEF LSTIN., LSTIN.==0
IFE LSTIN.,<
IFB <CREF$>, .XCREF
XLIST>
LSTIN.==LSTIN.+1
>
DEFINE LSTON.,<
IFG LSTIN., LSTIN.==LSTIN.-1
IFLE LSTIN.,< .CREF
LIST>
>
SUBTTL MACRO DEFINITIONS -- BYTE MANIPULATION
;MACRO TO COMPUTE THE WIDTH OF A MASK
; "WID" RETURNS THE LENGTH OF THE LEFTMOST STRING OF
; CONSECUTIVE ONES IN THE WORD.
DEFINE WID(MASK),<<↑L<-<<MASK>←<↑L<MASK>>>-1>>>
;MACRO TO COMPUTE THE POSITION OF A MASK
DEFINE POS(MASK),<<↑L<MASK>+↑L<-<<MASK>←<↑L<MASK>>>-1>-1>>
;MACRO TO BUILD A POINTER TO A MASKED QUANTITY
; POINTR LOCATION,MASK
DEFINE POINTR(LOC,MASK),<<POINT WID(MASK),LOC,POS(MASK)>>
;MACRO TO BUILD A MASK "WID" BITS WIDE, WITH ITS RIGHTMOST BIT
; IN THE BIT POSITION "POS". (I.E. A MASK FOR THE BYTE
; POINTED TO BY THE BYTE POINTER "POINT WID,LOC,POS")
DEFINE MASK.(WID,POS),<<<<1←<WID>>-1>B<POS>>>
;MACRO TO DEFINE A SYMBOL WITH ONLY ONE BIT ON, IN THE SAME POSITION AS
; THE RIGHTMOST BIT IN "MASK" (OR 0, IF "MASK" = 0)
DEFINE RGHBT.(MASK),<<<MASK>&-<MASK>>>
;MACRO TO DEFINE A SYMBOL WITH ONLY ONE BIT ON, IN THE SAME POSITION AS
; THE LEFTMOST BIT IN "MASK" (OR 0, IF "MASK" = 0)
DEFINE LFTBT.(MASK),<<1B<↑L<MASK>>>>
; "FILIN." RETURNS A WORD WITH A CONSECUTIVE STRING OF ONES FROM THE
; BIT POSITION OF THE LEFTMOST ONE IN "MASK" THROUGH THE BIT POSITION
; OF THE RIGHTMOST ONE IN "MASK" INCLUSIVE.
DEFINE FILIN.(MASK),<<<MASK>!<<LFTBT.(MASK)>-<RGHBT.(MASK)>>>>
; "ALIGN." RETURNS THE NUMBER OF TRAILING ZEROS IN "MASK"
; (I.E. A VALUE WHICH IS THE RIGHT COUNTERPART OF THE VALUE
; RETURNED BY THE MACRO-10 OPERATOR "↑L")
DEFINE ALIGN.(MASK),<<↑D35-<↑L<RGHBT.(MASK)>>+<↑D37*<<↑L<RGHBT.(MASK)>>/↑D36>>>>
; BTSWP.(AC,BIT-1,BIT-2) SWAPS BITS 1 AND 2 IN AC.
; BIT-1 AND BIT-2 ARE DECIMALS 0-35
DEFINE BTSWP.(AC,BIT1,BIT2),<
REPEAT 3,<
TXCE AC,1B<BIT1>!1B<BIT2>
>>
; "INSVL." POSITIONS VALUE IN MASK
DEFINE INSVL.(VALUE,MASK),<<<<VALUE>B<POS(<MASK>)>>&<MASK>>>
SUBTTL MACRO DEFINITIONS -- INFO/REDEF
;THE FOLLOWING MACROS FACILITATE THE ACCUMULATION OF TEXT BY PERMITTING
;THE USER TO APPEND A LINE OF TEXT TO THE BODY OF TEXT ALREADY
;ACCUMULATED. THE MACROS ARE USED IN THE FOLLOWING WAY:
;1. TO CLEAR THE MECHANISM:
; CINFO.
;2. TO APPEND THE LINE "SAMPLE LINE" (FOLLOWED BY CR-LF) TO THE
;END OF THE TEXT ACCUMULATED SO FAR:
; INFO. REDEF.,"SAMPLE LINE"
;3. TO DEFINE A MACRO "NAME" SO THAT ITS EXPANSION WILL BE THE TEXT
;ACCUMULATED SO FAR, (NOTE-IT ADDS A NULL LINE TO THE END):
; INFO. DEFINE "NAME"
DEFINE CINFO. <
DEFINE INFO.(OPCODE,NEWARG)<
OPCODE NEWARG>>
DEFINE REDEF.(OLDARG)<
DEFINE INFO.(OPCODE,NEWARG)<
OPCODE <OLDARG
NEWARG>>>
SUBTTL MACRO DEFINITIONS -- STACK CONTROL
;MACRO TO DEFINE A BUNCH OF WORDS ON THE STACK.
;EACH ARGUMENT TO THE FRAME. MACRO ALLOCATES 1 WORD ON THE
; STACK AND DEFINES A MACRO WITH THE SAME NAME AS -N(P).
;
;WARNING: THIS MACRO DEFINES THINGS IN TERMS OF (P) AND THEREFOR
; NOTHING ELSE MAY BE PUSHED ON THE STACK!!!
DEFINE FRAME. (LIST,%A),<
OLD%%%==10 ;;SAVE CURRENT RADIX
RADIX 8
N%%%==0 ;;ARGUMENT COUNT
IRP LIST,<
FR%%AM (LIST,\<N%%%+1>) ;;DEFINE SYMBOL MACRO
N%%%==N%%%+1 ;;COUNT ARGS
>
ADD P,[N%%%,,N%%%] ;;ALLOCATE SPACE
PUSHJ P,%A ;;DO THE SUBROUTINE
SKIPA
AOS -N%%%(P) ;;PASS ON SKIP RETURN
SUB P,[N%%%,,N%%%] ;;DEALLOCATE SPACE
POPJ P, ;;RETURN
%A:
RADIX OLD%%%
PURGE N%%%,OLD%%%
>
DEFINE FR%%AM (A,B),<
DEFINE A,<-↑O'B(P)>
>
SUBTTL SIMPLE STRUCTURE AND LOAD/STORE
;MACROS TO DEFINE AND LOAD/STORE A BYTE LOCATION
;MACRO DEFST. (BYTE NAME, WORD LOCATION, MASK)
; DEFINES THE LOCATION AND SIZE OF THE BYTE
DEFINE DEFST.(NAM$,LOC$,MASK$),<
..OLD==10
..TYP==3
IFE <MASK$>+1,..TYP==0
IFE <MASK$>-↑O777777,..TYP==1
IFE <MASK$>-↑O777777B17,..TYP==2
..POS==POS(<MASK$>)
..WID==WID(<MASK$>)
RADIX 10
DF%%ST (\..TYP,NAM$,<LOC$>,\..POS,\..WID)
PURGE ..OLD,..TYP,..POS,..WID>
; THIS IS A HELPER MACRO FOR INTERNAL USE
DEFINE DF%%ST (TYP$,NAM$,LOC$,POS$,WID$),<
RADIX ..OLD
DEFINE NAM$ (OPS,AC,E),<
..C==0
IRP OPS,<
IFE TYP$-..C,<
STOPI
IFN 3-..C, OPS <AC>,LOC$''E
IFE 3-..C, OPS <AC>,[POINT WID$,LOC$''E,POS$]
>
..C==..C+1>
PURGE ..C>
>
;MACRO LOAD. (AC, BYTE NAME, OPTIONAL LOC)
; WILL LOAD AC WITH THE CONTENTS OF THE BYTE. IF AND ONLY
; NO LOCATION WAS GIVEN IN DEFST., GIVE IT IN LOAD.
;MACRO STOR. IS IDENTICAL EXCEPT THE AC IS STORED INTO THE BYTE.
;MACRO ZERO. IS IDENTICAL (FIRST ARG IGNORED) EXCEPT ZERO IS STORED
DEFINE LOAD. (AC$,STR$,E$),< STR$ (<MOVE,HRRZ,HLRZ,LDB>,<AC$>,<E$>)>
DEFINE STOR. (AC$,STR$,E$),< STR$ (<MOVEM,HRRM,HRLM,DPB>,<AC$>,<E$>)>
DEFINE ZERO. (AC$,STR$,E$),< STR$ (<SETZM,HLLZS,HRRZS,<PRINTX ?CAN'T ZERO BYTE>>,<AC$>,<E$>)>
SUBTTL FLAG DEFINITIONS
;MACRO FLAG. DEFINES A LIST OF FLAGS AS BEING IN
;A PARTICULAR REGISTER IN SUCH A FASHION THAT
;THE BITS ARE ASSIGNED AT ASSEMBLY TIME AND THE REGISTER AND
;BITS ARE "REMEMBERED" FOR FUTURE USE IN THE TX?? MACROS.
;;THIS WILL BE DEFINED AT SOME FUTURE TIME AND VERSION.
SUBTTL MACRO DEFINITIONS -- GENERATE OP CODES ABCX
;MACRO TO GENERATE MOVEI, MOVSI, OR MOVE [] AS APPROPRIATE
; ALSO HRLOI, HRROI
DEFINE MOVX (AC,FLAG),<
.XCREF
TEST%%=0
IFE <<FLAG>←-↑D18>,<
TEST%%=1
.CREF
MOVEI AC,<FLAG>
.XCREF
>
IFE TEST%%,<IFE <<FLAG>←↑D18>,<
TEST%%=1
.CREF
MOVSI AC,(FLAG)
.XCREF
>>
IFE TEST%%,<IFE <<<FLAG>←-↑D18>-↑O777777>,<
TEST%%=1
.CREF
HRROI AC,<FLAG>
.XCREF
>>
IFE TEST%%,<IFE <<<FLAG>←↑D18>-↑O777777B17>,<
TEST%%=1
.CREF
HRLOI AC,(<FLAG>-↑O777777)
.XCREF
>>
IFE TEST%%,<
.CREF
MOVE AC,[FLAG]
.XCREF
>
PURGE TEST%%
.CREF>
;STORE (AC,FIRST,LAST,CONSTANT) PUTS CONSTANT IN FIRST THRU LAST.
DEFINE STORE(AC,FIRST,LAST,CONS),<
IFE <CONS>,< SETZM FIRST> ;;IF CONS=0, CLEAR FIRST
IFE <CONS>+1,< SETOM FIRST> ;;IF CONS=-1, SET FIRST TO -1
IFN <CONS>*<<CONS>+1>,<MOVX AC,<CONS> ;;ELSE DO IT
MOVEM AC,FIRST> ;; THE HARD WAY
IFNB <LAST>,< ;;IF MORE THAN ONE LOCATION
MOVE AC,[FIRST,,FIRST+1]
BLT AC,LAST ;;DISTRIBUTE THE CONSTANT
>>
;GENERATE CAI OR CAM AS APPROPRIATE
DEFINE CAX (AC,VAL),<OP%%CA (AC,VAL,)>
DEFINE CAXL (AC,VAL),<OP%%CA (AC,VAL,L)>
DEFINE CAXLE (AC,VAL),<OP%%CA (AC,VAL,LE)>
DEFINE CAXE (AC,VAL),<OP%%CA (AC,VAL,E)>
DEFINE CAXG (AC,VAL),<OP%%CA (AC,VAL,G)>
DEFINE CAXGE (AC,VAL),<OP%%CA (AC,VAL,GE)>
DEFINE CAXN (AC,VAL),<OP%%CA (AC,VAL,N)>
DEFINE CAXA (AC,VAL),<OP%%CA (AC,VAL,A)>
DEFINE OP%%CA (AC,VALUE,CODE),<
.XCREF
IFE <<VALUE>←-↑D18>,<
.CREF
CAI'CODE AC,<VALUE>
.XCREF
>
IFN <<VALUE>←-↑D18>,<
.CREF
CAM'CODE AC,[VALUE]
.XCREF
>
.CREF>
;GENERATE IMMEDIATE OR MEMORY CONSTANTS
DEFINE ADDX (AC,VAL),<OP%%IA (AC,VAL,ADD,SUB)>
DEFINE SUBX (AC,VAL),<OP%%IA (AC,VAL,SUB,ADD)>
DEFINE MULX (AC,VAL),<OP%%IN (AC,VAL,MUL)>
DEFINE IMULX (AC,VAL),<OP%%IN (AC,VAL,IMUL)>
DEFINE DIVX (AC,VAL),<OP%%IN (AC,VAL,DIV)>
DEFINE IDIVX (AC,VAL),<OP%%IN (AC,VAL,IDIV)>
DEFINE OP%%IA (AC,VALUE,CODE,ALT),<
.XCREF
TEST%%=0
IFE <<<VALUE>←-↑D18>-↑O777777>,<
IFN <<VALUE>&↑O777777>,<
TEST%%=1
.CREF
ALT'I AC,-<VALUE>
.XCREF
>>
IFE TEST%%,<
OP%%IN AC,<VALUE>,CODE
>
PURGE TEST%%
.CREF>
DEFINE OP%%IN (AC,VALUE,CODE),<
.XCREF
IFE <<VALUE>←-↑D18>,<
.CREF
CODE'I AC,<VALUE>
.XCREF
>
IFN <<VALUE>←-↑D18>,<
.CREF
CODE AC,[VALUE]
.XCREF
>
.CREF>
;GENERATE IMMEDIATE OR MEMORY FOR FLOATING POINT
DEFINE FADRX (AC,VAL),<OP%%FP (AC,VAL,FADR)>
DEFINE FSBRX (AC,VAL),<OP%%FP (AC,VAL,FSBR)>
DEFINE FMPRX (AC,VAL),<OP%%FP (AC,VAL,FMPR)>
DEFINE FDVRX (AC,VAL),<OP%%FP (AC,VAL,FDVR)>
DEFINE OP%%FP (AC,VALUE,CODE),<
.XCREF
IFE <<VALUE>←↑D18>,<
.CREF
CODE'I AC,(VALUE)
.XCREF
>
IFN <<VALUE>←↑D18>,<
.CREF
CODE AC,[VALUE]
.XCREF
>
.CREF>
;MACRO TO GENERATE MACROS OF THE FORM TXYY. THESE MACRO REPLACE
; A TLYY OR A TRYY DEPENDING UPON THEIR ARGUMENT. SEE EXAMPLES:
;
; CALL RESULT
; TXNE F,1B20 TRNE F,1B20
; TXON F,1B0 TLON F,(1B0)
; TXZ F,1B1!1B31 TDZ F,[1B1!1B31]
;
;IF CALLED WITH ONLY ONE ARG, IT IS ASSUMED TO BE DEFINED BY A FLAG. MACRO
.XCREF
DEFINE TX0%% (M,S),<
IRP M,<
IRP S,<
DEFINE TX'M'S (AC,FLAG),<
.XCREF
IFB <FLAG>, OP%%TX <↑O37777777&AC>,1B<AC←-↑D30>,TL'M'S,TR'M'S,TD'M'S
IFNB <FLAG>, OP%%TX AC,<FLAG>,TL'M'S,TR'M'S,TD'M'S
.CREF
>>>>
TX0%% <N,Z,O,C>,<E,N,A>
PURGE TX0%%
.CREF
DEFINE TXN (AC,FLAG),<
IFB <FLAG>, JFCL 0
IFNB <FLAG>, TRN AC,<,,<FLAG>>
>
DEFINE TXZ (AC,FLAG),<
.XCREF
IFB <FLAG>, TXZ (<↑O37777777&AC>,1B<AC←-↑D30>)
IFNB <FLAG>,<
IFN <<AC>&↑O777777777760>, PRINTX ? AC IS NOT AN ACCUMULATOR
IFE <<<FLAG>←-↑D18>-↑O777777>,<
.CREF
ANDI AC,<,,-1-<FLAG>>
.XCREF>
IFN <<<FLAG>←-↑D18>-↑O777777>,<
OP%%TX AC,<FLAG>,TLZ,TRZ,TDZ
>> .CREF>
DEFINE TXO (AC,FLAG),<
.XCREF
IFB <FLAG>, TXO (<↑O37777777&AC>,1B<AC←-↑D30>)
IFNB <FLAG>,<
IFN <<AC>&↑O777777777760>, PRINTX ? AC IS NOT AN ACCUMULATOR
IFE <<<FLAG>←-↑D18>-↑O777777>,<
.CREF
ORCMI AC,<,,-1-<FLAG>>
.XCREF>
IFN <<<FLAG>←-↑D18>-↑O777777>,<
OP%%TX AC,<FLAG>,TLO,TRO,TDO
>> .CREF>
DEFINE TXC (AC,FLAG),<
.XCREF
IFB <FLAG>, TXC (<↑O37777777&AC>,1B<AC←-↑D30>)
IFNB <FLAG>,<
IFN <<AC>&↑O777777777760>, PRINTX ? AC IS NOT AN ACCUMULATOR
IFE <<<FLAG>←-↑D18>-↑O777777>,<
.CREF
EQVI AC,<,,-1-<FLAG>>
.XCREF>
IFN <<<FLAG>←-↑D18>-↑O777777>,<
OP%%TX AC,<FLAG>,TLC,TRC,TDC
>> .CREF>
DEFINE OP%%TX (AC,FLAG,L,R,D)<
.XCREF
IFN <<AC>&↑O777777777760>, PRINTX ? AC IS NOT AN ACCUMULATOR
TEMP%%=0
IFE <<FLAG>←↑D18>,<
IFN <FLAG>,<
TEMP%%=1
.CREF
L AC,(FLAG)
.XCREF
>>
IFE <<FLAG>←-↑D18>,<
TEMP%%=1
.CREF
R AC,<FLAG>
.XCREF
>
IFE TEMP%%,<
.CREF
D AC,[FLAG]
>
PURGE TEMP%%
.CREF>
;DEFINE MNEMONIC CODES FOR SOME OF ABOVE
DEFINE IORX (AC,FLAG),<TXO AC,<FLAG>>
DEFINE ANDX (AC,FLAG),<TXZ AC,-1-<FLAG>>
DEFINE XORX (AC,FLAG),<TXC AC,<FLAG>>
;MACROS TO TEST AND SET/CLEAR/COMPLEMENT FLAGS WHICH ARE NOT
;IN ACCUMULATORS. BE VERY CAREFUL THAT THESE GENERATE TWO
;INSTRUCTIONS, SO CAN NOT BE SKIPPED OVER.
;THEY EACH HAVE TWO ARGUMENTS, THE FIRST IS A SCRATCH AC
; AND THE SECOND IS THE FLAG WHICH WAS DEFINED IN A FLAG. MACRO.
DEFINE TYNE. (AC,FLAG),<
MOVX AC,1B<FLAG←-↑D30>
.XCREF
<TDNE AC,>!<37777777&FLAG>
.CREF
>
DEFINE TYNN. (AC,FLAG),<
MOVX AC,1B<FLAG←-↑D30>
.XCREF
<TDNN AC,>!<37777777&FLAG>
.CREF
>
DEFINE TYO. (AC,FLAG),<
MOVX AC,1B<FLAG←-↑D30>
.XCREF
<IORM AC,>!<37777777&FLAG>
.CREF
>
DEFINE TYZ. (AC,FLAG),<
MOVX AC,1B<FLAG←-↑D30>
.XCREF
<ANDCAM AC,>!<37777777&FLAG>
.CREF
>
DEFINE TYC. (AC,FLAG),<
MOVX AC,1B<FLAG←-↑D30>
.XCREF
<XORM AC,>!<37777777&FLAG>
.CREF
>
;NOTE - "TXNI.", "TXND.", "JUMPI." & "JUMPD." MAY ASSEMBLE AS ONE OR MORE
; INSTRUCTIONS, DEPENDING ON THE ACTUAL VALUES OF THEIR ARGUMENTS.
; IN ALL CASES WHERE THE MACRO EXPANSION IS MORE THAN ONE INSTRUCTION
; IT WILL BE TRUE THAT IF CONTROL ARRIVES AT THE SECOND INSTRUCTION
; OF THE MACRO EXPANSION, CONTROL WILL UNCONDITIONALLY BE PASSED TO
; THE INSTRUCTION IMMEDIATELY FOLLOWING THE LAST INSTRUCTION OF THE
; MACRO EXPANSION (WITHOUT HAVING ALTERED ANY PART OF THE MACHINE
; STATE OTHER THAN THE PC). THUS A SKIP TYPE INSTRUCTION IMMEDIATELY
; PRECEEDING A "TXNI.", "TXND.", "JUMPI.", OR "JUMPD." MACRO WILL HAVE
; THE EFFECT OF SKIPPING OVER THE ENTIRE MACRO EXPANSION.
;
;
;TEST (BUT DON'T MODIFY) THE FIELD
; (IN "AC") SPECIFIED BY "MASK" AND SKIP IF IT IS IDENTICAL TO "PATERN"
DEFINE TXNI.(AC,MASK,PATERN),<
IFE <<MASK>←<1+↑L<MASK>>>,<
IFE <<MASK>&<PATERN>>,<
TXNE AC,<MASK>
>
IFN <<MASK>&<PATERN>>,<
TXNN AC,<MASK>
>>
IFN <<MASK>←<1+↑L<MASK>>>,<
TXCA AC,<<PATERN>&<MASK>>
JRST .+4
TXCE AC,<<PATERN>&<MASK>>
JRST .+2
TXNE AC,<<-<PATERN>-1>&<MASK>>
>>
;TEST (BUT DON'T MODIFY) THE FIELD
; (IN "AC") SPECIFIED BY "MASK" AND SKIP IF IT IS DIFFERENT THAN "PATERN"
DEFINE TXND.(AC,MASK,PATERN),<
IFE <<MASK>←<1+↑L<MASK>>>,<
IFE <<MASK>&<PATERN>>,<
TXNN AC,<MASK>
>
IFN <<MASK>&<PATERN>>,<
TXNE AC,<MASK>
>>
IFN <<MASK>←<1+↑L<MASK>>>,<
TXCA AC,<<PATERN>&<MASK>>
JRST .+4
TXCE AC,<<PATERN>&<MASK>>
JRST .+3
TXNN AC,<<-<PATERN>-1>&<MASK>>
>>
;JUMP TO "LOCATN" IF THE FIELD
; (IN "AC") SPECIFIED BY "MASK" IS IDENTICAL TO "PATERN"
DEFINE JUMPI.(AC,MASK,PATERN,LOCATN),<
IFE <<MASK>←1>,<
IFE <MASK>,<
JUMPA AC,LOCATN
>
IFN <MASK>,<
IFE <<PATERN>&<MASK>>,<
JUMPGE AC,LOCATN
>
IFN <<PATERN>&<MASK>>,<
JUMPL AC,LOCATN
>>>
IFN <<MASK>←1>,<
TXCA AC,<<PATERN>&<MASK>>
JRST .+5
TXCE AC,<<PATERN>&<MASK>>
JRST .+3
TXNN AC,<<-<PATERN>-1>&<MASK>>
JRST LOCATN
>>
;JUMP TO "LOCATN" IF THE FIELD
; (IN "AC") SPECIFIED BY "MASK" IS DIFFERENT THAN "PATERN"
DEFINE JUMPD.(AC,MASK,PATERN,LOCATN)
<IFE <<MASK>←1>,<
IFE <MASK>,<
JUMP AC,LOCATN
>
IFN <MASK>,<
IFE <<PATERN>&<MASK>>,<
JUMPL AC,LOCATN
>
IFN <<PATERN>&<MASK>>,<
JUMPGE AC,LOCATN
>>>
IFN <<MASK>←1>,<
TXCA AC,<<PATERN>&<MASK>>
JRST .+5
TXCE AC,<<PATERN>&<MASK>>
JRST LOCATN
TXNE AC,<<-<PATERN>-1>&<MASK>>
JRST LOCATN
>>
SUBTTL MACRO DEFINITIONS -- JUMPPT
;MACRO TO JUMP DEPENDING UPON PROCESSOR TYPE
;CALL: JUMPPT TEMPAC,PDP-6 ADDR,KA-10 ADDR,KI-10 ADDR,KL-10 ADDR
; WHERE TEMPAC IS AN AC TO USE AS A TEMP
; BLANK PROCESSORS FALL THROUGH TO NEXT INSTRUCTION
; NOTE THERE IS NO WAY TO DISTINGUISH BETWEEN KL-10 AND KS-10 CPU'S
DEFINE JUMPPT (AC,CP166,KA10,KI10,KL10,KX,KY,KZ,%1),<
IFDIF <CP166><KA10>,<
JFCL 1,.+1 ;;CLEAR PC-CHANGE FLAG
JRST .+1 ;;SET PC-CHANGE
IFNB <CP166>,< JFCL 1,CP166
IFNB <KA10>,<IFIDN <KA10><KI10>,<IFIDN <KI10><KL10>,< JRST KA10>>>>
IFB <CP166>,< JFCL 1,%1
IFIDN <KA10><KI10>,<IFIDN <KI10><KL10>,< JRST KA10>>>
>;;END IFDIF <CP166><KA10>
IFDIF <KA10><KI10>,<
HRLOI AC,-2 ;;SET FOR KA/KI TEST
IFNB <KA10>,< AOBJP AC,KA10
IFNB <KI10>,<IFIDN <KI10><KL10>,<JRST KI10>>>
IFB <KA10>,<IFDIF <KI10><KL10>,<AOBJP AC,%1>
IFIDN <KI10><KL10>,<AOBJN AC,KI10>>
>;;END IFDIF <KA10><KI10>
IFDIF <KI10><KL10>,<
IF2,<IFE AC,<PRINTX ? AC MUST BE NON-ZERO IN JUMPPT>>
MOVEI AC,0 ;;SET FOR KI/KL TEST
BLT AC,0 ;;DO TEST
IFNB <KI10>,< JUMPE AC,KI10
IFNB <KL10>,< JRST KL10>>
IFB <KI10>,< JUMPN AC,KL10>
>;;END IFDIF <KI10><KL10>
%1:>
;DEFINE UNITS OF STORAGE ALLOCATION
.SUAP6==↑D1024 ;PDP-6
.SUAKA==↑D1024 ;KA-10
.SUAKI==↑D512 ;KI-10
.SUAKL==↑D512 ;KL-10
SUBTTL USEFUL OPDEFS
;OPDEF THE NOT-KNOWN-TO-DDT HARDWARE MNEMONICS
OPDEF PORTAL [JRST 01,] ;CONCEALED ENTRY POINT JUMP
OPDEF JRSTF [JRST 02,] ;JUMP RESTORING FLAGS
OPDEF HALT [JRST 04,] ;JUMP, HALTING PROCESSOR
OPDEF XJRSTF [JRST 05,] ;FLAG-PC-DOUBLEWORD JRSTF
OPDEF XJEN [JRST 06,] ;FLAG-PC-DOUBLEWORD JEN
OPDEF XPCW [JRST 07,] ;FLAG-PC-DOUBLEWORD XSFM+XJRSTF
OPDEF JEN [JRST 12,] ;JRSTF ENABLING PI
OPDEF XSFM [JRST 14,] ;SAVE FLAG-PC-DOUBLEWORD NO JUMP
OPDEF JFOV [JFCL 01,] ;JUMP ON FLOATING UNDER/OVERFLOW
OPDEF JCRY1 [JFCL 02,] ;JUMP ON CARRY-1
OPDEF JCRY0 [JFCL 04,] ;JUMP ON CARRY-0
OPDEF JCRY [JFCL 06,] ;JUMP ON CARRY-0 OR CARRY-1
OPDEF JOV [JFCL 10,] ;JUMP ON OVERFLOW
;THE P-CLASS (JUMP TO A POPJ ROUTINE) INSTRUCTIONS
; OPDEF PJRST [JRST] ;PUSHJ/POPJ
OPDEF PJRST [JUMPA 17,] ;PUSHJ/POPJ
;THIS CUTE TRICK WILL ALLOW DDT
;TO DISTINGUISH BETWEEN JRST AND
;PJRST INSTRUCTIONS . . .
OPDEF PJRSTF [JRSTF] ;PUSHJ/POPJ
OPDEF PJSP [JSP] ;MOVEI .+1/PUSHJ/POPJ
OPDEF PJUMPL [JUMPL]
OPDEF PJMPLE [JUMPLE]
OPDEF PJUMPE [JUMPE]
OPDEF PJUMPN [JUMPN]
OPDEF PJUMPG [JUMPG]
OPDEF PJMPGE [JUMPGE]
.NODDT PJRSTF, PJSP
.NODDT PJUMPL, PJMPLE, PJUMPE
.NODDT PJUMPN, PJUMPG, PJMPGE
SUBTTL SYMBOLS FOR THE CONTROL CHARACTERS
.CHNUL==000 ;NULL
.CHCNA==001
.CHCNB==002
.CHCNC==003
.CHCND==004
.CHCNE==005
.CHCNF==006
.CHBEL==007 ;BELL
.CHCNH==010
.CHTAB==011 ;TAB
.CHLFD==012 ;LINE-FEED
.CHVTB==013 ;VERTICAL TAB
.CHFFD==014 ;FORM FEED
.CHCRT==015 ;CARRIAGE RETURN
.CHCNN==016
.CHCNO==017
.CHCNP==020
.CHCNQ==021
.CHCNR==022
.CHCNS==023
.CHCNT==024
.CHCNU==025
.CHCNV==026
.CHCNW==027
.CHCNX==030
.CHCNY==031
.CHCNZ==032
.CHESC==033 ;ESCAPE
.CHCBS==034 ;CONTROL BACK SLASH
.CHCRB==035 ;CONTROL RIGHT BRACKET
.CHCCF==036 ;CONTROL CIRCONFLEX
.CHCUN==037 ;CONTROL UNDERLINE
.CHALT==175 ;OLD ALTMODE
.CHAL2==176 ;ALTERNATE OLD ALTMODE
.CHDEL==177 ;DELETE
SUBTTL HARDWARE BITS OF INTEREST TO USERS
;PC FLAGS
PC.OVF==1B0 ;OVERFLOW
PC.CY0==1B1 ;CARRY 0
PC.CY1==1B2 ;CARRY 1
PC.FOV==1B3 ;FLOATING OVERFLOW
PC.BIS==1B4 ;BYTE INCREMENT SUPPRESSION
PC.USR==1B5 ;USER MODE
PC.UIO==1B6 ;USER IOT MODE
PC.LIP==1B7 ;LAST INSTRUCTION PUBLIC
PC.AFI==1B8 ;ADDRESS FAILURE INHIBIT
PC.ATN==3B10 ;APR TRAP NUMBER
PC.FUF==1B11 ;FLOATING UNDERFLOW
PC.NDV==1B12 ;NO DIVIDE
SUBTTL
.XCREF
%%MACT==<VRSN. (MAC)>
PURGE MACWHO,MACVER,MACMIN,MACEDT
PURGE MACSIX,MAC137,MACSTL,MACASC,MACUNV ;[26]
PURGE MACWRN,MACTTL,MACPTX,MACERR ;[26]
IF1,< ASUPPRESS>
IFNDEF %..C,<END> ;END UNIVERSAL OF MACTEN
.CREF