mirror of
https://github.com/PDP-10/its.git
synced 2026-01-28 21:01:16 +00:00
TCTYP and CRTSTY source code.
This commit is contained in:
298
src/rms/macros.18
Executable file
298
src/rms/macros.18
Executable file
@@ -0,0 +1,298 @@
|
||||
|
||||
IF2 [ .MLLIT=1
|
||||
$PURE==0
|
||||
IFN PURESW,[
|
||||
$PURLC==$PURBG ;RESET BOTH LOCATION COUNTERS.
|
||||
$VARLC==$VARBG
|
||||
]]
|
||||
IF2 .INEOF
|
||||
|
||||
.MLLIT=1 ;MULTI-LINE MODE.
|
||||
IFN 0,[
|
||||
.AUXIL ;DON'T CREF THIS FILE'S SYMBOLS UNLESS THEY'RE ACTUALLY USED ELSEWHERE.
|
||||
]
|
||||
IFNDEF %TOOVR,.INSRT SYSTEM;TTYDEF >
|
||||
IFNDEF %PIMPV,.INSRT SYSTEM;BITS >
|
||||
|
||||
;AC DEFS.
|
||||
F==0 ;FLAGS.
|
||||
A=1 ;THESE USED FOR ARGS.
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
G=6 ;RARELY SAVED IF USED.
|
||||
H=7
|
||||
I=10 ;CHARACTER IO THRU HERE.
|
||||
J=11 ;-> FILE BLOCK.
|
||||
K=12
|
||||
M=13 ;OUTPUT PATH.
|
||||
N=14 ;INPUT PATH.
|
||||
R=15
|
||||
S=16
|
||||
P=17 ;PDL POINTER.
|
||||
|
||||
SAVE=PUSH P,
|
||||
REST=POP P,
|
||||
CALL=PUSHJ P,
|
||||
RET=POPJ P,
|
||||
|
||||
SIGN=400000 ;IT SAVES A LITTLE TYPING
|
||||
JRSTF=JRST 2,
|
||||
JOV=JFCL 10,
|
||||
JCRY0=JFCL 4,
|
||||
JCRY1=JFCL 2,
|
||||
JFOV=JFCL 1,
|
||||
.FORMAT 30,2704_24. ;MAKE A, FORMAT TREAT A LIKE AC
|
||||
.FORMAT 34,00222704_12. ;CHANGE A,B FORMAT TO TREAT A LIKE AC
|
||||
.AOP .OPER@ 0,.RDATIM ;GET DATE AND TIME OF ASSEMBLY
|
||||
ASTIME=.AVAL1 ;TIME (SIXBIT /HHMMSS/) OF ASSEMBLY
|
||||
ASDATE=.AVAL2 ;DATE (SIXBIT /YYMMDD/) OF ASSEMBLY
|
||||
|
||||
|
||||
;SWDEF NAME=EXPR ;SET "NAME" TO "EXPR" IFF "NAME" NOT DEFINED
|
||||
|
||||
DEFINE SWDEF ASSGT/
|
||||
IRPS DUMMY,,[ASSGT]
|
||||
IFNDEF DUMMY,ASSGT
|
||||
.ISTOP
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
;FOLLOWING MACROS TAKE ADVANTAGE
|
||||
;OF ARGUMENT EVALUATION AT EXPANSION TIME
|
||||
|
||||
DEFINE CONCAT A,B
|
||||
A!B!TERMIN
|
||||
|
||||
DEFINE DEF A,B,C,D,E,F,G,H,I,J,K
|
||||
DEFINE A!B!C!D!E!F!G!H!I!J!K!TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE PRINTA A,B,C,D,E,F
|
||||
IF1,[PRINTC Á!B!C!D!E!F
|
||||
Ý
|
||||
TERMIN
|
||||
|
||||
|
||||
DEFINE PRINTB A,B,C,D,E,F
|
||||
PRINTC Á!B!C!D!E!F
|
||||
Š
|
||||
TERMIN
|
||||
|
||||
;(RIGHT) BYTE POINTER, POS ARG IS # BITS TO RIGHT OF BYTE
|
||||
|
||||
DEFINE POINTR POS,SIZ
|
||||
<POS>_12.+<SIZ>_6,,TERMIN
|
||||
|
||||
;(LEFT) BYTE POINTER, 1STBIT ARG IS # BITS TO LEFT OF BYTE
|
||||
|
||||
DEFINE POINTL 1STBIT,SIZ
|
||||
<36.-<SIZ>-<1STBIT>>_12.+<SIZ>_6,,TERMIN
|
||||
|
||||
;BYTE POINTER TO BYTE BEFORE FIRST IN WORD
|
||||
|
||||
DEFINE POINTZ SIZ
|
||||
36.-<36./<SIZ>*<SIZ>>_12.+<SIZ>_6,,-1 TERMIN
|
||||
|
||||
;BYTE POINTER TO THE WORD BUT OFF THE LEFT END (EG 440700,,)
|
||||
DEFINE POINTW SIZ
|
||||
36._12.+<SIZ>_6,,TERMIN
|
||||
|
||||
;(PLURAL) BYTE POINTER ARRAY TO LDB FROM INDEXED
|
||||
|
||||
DEFINE POINTS SIZ
|
||||
REPEAT 36./<SIZ>,<36.-<SIZ>*<.RPCNT+1>>_12.+<SIZ>_6,,TERMIN
|
||||
|
||||
;(ILDB) BYTE POINTER ARRAY TO ILDB FROM
|
||||
|
||||
DEFINE POINTI SIZ
|
||||
REPEAT 36./<SIZ>,<36.-<SIZ>*.RPCNT>_12.+<SIZ>_6,,TERMIN
|
||||
|
||||
;ASSEMBLE INTO A CERTAIN LOCATION
|
||||
|
||||
DEFINE TMPLOC LCTN,CRUFT/
|
||||
.ZZ==.
|
||||
LOC LCTN
|
||||
CRUFT
|
||||
.=.ZZ
|
||||
TERMIN
|
||||
|
||||
;DECREMENT A 7 BIT BYTE POINTER
|
||||
|
||||
DEFINE DBP7 AC
|
||||
ADD AC,[070000,,0]
|
||||
TLNE AC,400000
|
||||
SUB AC,[430000,,1]
|
||||
TERMIN
|
||||
|
||||
;DECREMENT 7 BIT BYTE POINTER AND JUMP
|
||||
|
||||
DEFINE DBP7J AC,ADR
|
||||
ADD AC,[70000,,0]
|
||||
JUMPGE AC,ADR
|
||||
SUB AC,[430000,,1]
|
||||
JRST ADR
|
||||
TERMIN
|
||||
|
||||
;IFNEED FOOSW,FOO,[FOO:BAR]
|
||||
;ASSEMBLES IF FOO NEEDED OR FOOSW NONZERO.
|
||||
|
||||
DEFINE IFNEED A,B
|
||||
SWDEF A==0
|
||||
IF1 [IRPS X,,[B]
|
||||
IFE 3-.TYPE X ,A==1
|
||||
TERMIN ]
|
||||
IFN A,TERMIN
|
||||
|
||||
|
||||
;REPEAT AN INSTRUCTION WITH VARIOUS ADDRESSES
|
||||
|
||||
DEFINE INSIRP A,B
|
||||
IRPS %%ADR,,[B]
|
||||
A,%%ADR
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
;TAKE ACTION WHEN A BUG IS DETECTED.
|
||||
;(MIGHT BE REDEFINED AFTER THIS FILE)
|
||||
DEFINE BUG A/
|
||||
.VALUE
|
||||
TERMIN
|
||||
|
||||
;PAUSE IF IN DEBUG MODE. SHOULD HAPPEN BEFORE THE PROGRAM
|
||||
;FINALIZES ITS MAIN ACTION OR KILLS ITSELF.
|
||||
DEFINE DPAUSE
|
||||
SKIPE DEBUG
|
||||
.VALUE
|
||||
TERMIN
|
||||
|
||||
;1ST ARG NAME OF SYSTEM CALL,
|
||||
;2ND LIKE A LITERAL HAS ARGS TO CALL.
|
||||
DEFINE SYSCAL A,B
|
||||
.CALL [SETZ ? SIXBIT/A/ ? B ((SETZ))]
|
||||
TERMIN
|
||||
|
||||
DEFINE INSERT LINE/
|
||||
IRPS %NAME,,[LINE]
|
||||
DEFINE %NAME DEFALT/
|
||||
.INSRT DSK:DEFALT LINE
|
||||
TERMIN
|
||||
.ISTOP
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE INSERT DEFALT/GENSYM
|
||||
IRPS %NAME,,[DEFALT]
|
||||
IFNDEF %NAME,[
|
||||
DEFINE %NAME
|
||||
.INSRT DSK:!TERMIN
|
||||
]
|
||||
DEFINE GENSYM
|
||||
EXPUNG GENSYM
|
||||
%NAME!!TERMIN
|
||||
.ISTOP
|
||||
TERMIN
|
||||
GENSYM DEFALTîTERMIN
|
||||
SWDEF PURESW==0
|
||||
IFE PURESW,[
|
||||
DEFINE VBLK
|
||||
IFE $PURE, .ERR CONSEC. VBLK'S
|
||||
$PURE==0
|
||||
TERMIN
|
||||
|
||||
DEFINE PBLK
|
||||
IFN $PURE, .ERR CONSEC. PBLK'S
|
||||
$PURE==1
|
||||
TERMIN
|
||||
|
||||
DEFINE $PUREND ;SETS $PURMX, $VARMX IF PURESW.
|
||||
TERMIN
|
||||
]
|
||||
|
||||
IFN PURESW,[
|
||||
DEFINE VBLK ;START IMPURE CODING.
|
||||
IFE $PURE, .ERR CONSEC. VBLK'S
|
||||
IFN $PURE, $PURLC==. ? .=$VARLC
|
||||
$PURE==0
|
||||
TERMIN
|
||||
|
||||
DEFINE PBLK ;START PURE CODING.
|
||||
IFN $PURE, .ERR CONSEC. PBLK'S.
|
||||
IFE $PURE, $VARLC==. ? .=$PURLC
|
||||
$PURE==1
|
||||
TERMIN
|
||||
|
||||
SWDEF $VARBG==. ;DEFINE STARTS OF SEGMENTS.
|
||||
SWDEF $PURBG==20*2000
|
||||
$PURLC==$PURBG ;INITIALIZE LOC. CNTRS.
|
||||
$VARLC==$VARBG
|
||||
|
||||
DEFINE $PUREND ;PUT THIS AFTER END OF BOTH SEGS.
|
||||
IFN $PURE, VBLK ;FORCE BOTH $PURLC AND $VARLC TO BE RIGHT.
|
||||
PBLK
|
||||
$PURMX==$PURLC
|
||||
$VARMX==$VARLC
|
||||
TERMIN
|
||||
] ;END IFN PURESW,
|
||||
|
||||
$PURE==0
|
||||
|
||||
DEFINE VARS X
|
||||
VBLK
|
||||
X
|
||||
PBLK
|
||||
TERMIN
|
||||
|
||||
;UUO DEFINITION MACROS:
|
||||
|
||||
F"UUONUM==0 ;USED TO ASSIGN VALUES TO UUOS.
|
||||
|
||||
;DEFINE UUO NAMED A, DISPATCH ENTRY B.
|
||||
DEFINE UUODEF A,B
|
||||
F"UUONUM==F"UUONUM+1
|
||||
A=F"UUONUM_33
|
||||
TMPLOC UUOTAB+A_-33, B
|
||||
TERMIN
|
||||
|
||||
;DEFINE AN OUTPUT UUO, TO CALL AT CURRENT LOCATION.
|
||||
DEFINE OUTUUO A
|
||||
UUODEF .M"A,\.,,F"OUTUOH
|
||||
TERMIN
|
||||
|
||||
;ARRANGE FOR SOME THINGS TO BE DONE AT END OF ASSAMBLY.
|
||||
EQUALS $END,END
|
||||
|
||||
DEFINE END ADDR
|
||||
F"UUOMAX==F"UUONUM ;LARGEST UUO NUM. USED.
|
||||
F"CHNMAX==F"CHNNUM ;LARGEST ASSIGNED CHANNEL NUM.
|
||||
IFN F"UUOMAX,[IFNDEF UUOTAB,[ VBLK
|
||||
UUOTAB: BLOCK F"UUOMAX ]]
|
||||
IFN PURESW, IFNDEF $PURMX, $PUREND ;(UNLESS ALREADY DONE)
|
||||
$END ADDR
|
||||
TERMIN
|
||||
;ASSEMBLE A FILE BLOCK AND NAME THE WORDS IN IT.
|
||||
|
||||
DEFINE FILDEF NAM,CHNL,SIZ
|
||||
NAM!CHN: CHNL
|
||||
NAM!DEV: 0
|
||||
NAM!FN1: 0
|
||||
NAM!FN2: 0
|
||||
NAM!SNM: 0
|
||||
NAM!BPT: 0+IFN NAM!BSZ,POINTZ SIZ,NAM!BUF
|
||||
NAM!PNT: 0
|
||||
NAM!CNT: -1 ;BUFFER NOT INITTED.
|
||||
NAM!EPT: 0
|
||||
NAM!BSB: 36./SIZ
|
||||
NAM!LEN: NAM!BSZ
|
||||
NAM!MOD: 0
|
||||
IFN NAM!BSZ,NAM!BUF: BLOCK NAM!BSZ+1
|
||||
TERMIN
|
||||
|
||||
;NUMBER OF NEXT UNASSIGNED IO CHANNEL.
|
||||
DEFINE FRECHN
|
||||
F"CHNNUM+1
|
||||
F"CHNNUM==F"CHNNUM+1
|
||||
TERMIN
|
||||
|
||||
F"CHNNUM==0
|
||||
Reference in New Issue
Block a user