.NLIST .IF NDF,$$PASS ;ONLY ON PASS #1 .MACRO SMACIT $DIDDO=0 $L$=0 $T=0 $L=0 $LL=0 $R=-1 IIII=-1 .ENDM .MACRO ..PUSH AA1,AA2 IIII=IIII+1 .IRP TT,\IIII TYPS'TT = AA1 LBLS'TT = AA2 .ENDM .ENDM .MACRO ..POP AA1,AA2 .IIF LT IIII,.ERROR IIII ;STACK UNDERFLOW!!!!!! .IRP TT,\IIII AA1 = TYPS'TT AA2 = LBLS'TT .ENDM IIII=IIII-1 .ENDM .MACRO ..TAG TG,WH .EMITL .ENDM .MACRO ..BRAN BRA,TG,WH,SPLBRN .IF NB .IF GE .-WH'TG-126. .EMIT .IFF .EMIT .ENDC .IFF .EMIT .ENDC .ENDM .MACRO .EMIT VAL $E$=1 .IIF DF LST$$ .LIST MEB VAL .IIF DF LST$$ .NLIST MEB .ENDM .MACRO .EMITL VAL .IIF DF LST$$ .LIST VAL .IIF DF LST$$ .NLIST .ENDM .MACRO .EMITR S1,S2 .EMIT .IIF GT S2-1 .EMITR ,\S2-1 .ENDM .MACRO .IFOPR OPRA,RELA,TTG .EMIT OPRA .IF GT $R .IIF EQ $L$ .EMIT .IIF EQ $L$-1 .EMIT .IIF EQ $L$-2 .EMIT .IIF EQ $L$-3 .EMIT .IFF .IIF EQ $L$ .EMIT .IIF EQ $L$-1 .EMIT .IIF EQ $L$-2 .EMIT .IIF EQ $L$-3 .EMIT .ENDC ..PUSH 0,$T $I$=1 .ENDM .MACRO .IS Q1,Q2,QB,QT $I$=0 .IIF IDN , .IFOPR <>,NE,QT .IIF IDN , .IFOPR <>,EQ,QT .IIF NE $I$ .MEXIT .IIF DIF ,,.IFOPR <>,Q2,QT .IIF IDN ,,.IFOPR <<.=.>>,Q2,QT .ENDM .MACRO .GENBR A1,B1,C1,D1,E1 $I$=0 .IIF IDN .IFOPR <>,NE,E1 .IIF IDN .IFOPR <>,EQ,E1 .IIF IDN .IFOPR <>,EQ,E1 .IIF IDN <#0> .IFOPR <>,B1,E1 .IIF IDN <#0> .IFOPR <>,B1,E1 .IIF IDN .IS A1,C1,D1,E1 .IIF IDN <=> .IFOPR <>,EQ,E1 .IIF EQ $I$ .IFOPR <>,B1,E1 .ENDM .MACRO .OPADD V1,V2,V3 .IIF IDN <#1> .EMIT .IIF NE $E$ .MEXIT .IIF IDN .EMIT .IIF NE $E$ .MEXIT .EMIT .ENDM .MACRO .OPSUB V1,V2,V3 .IIF IDN <#1> .EMIT .IIF NE $E$ .MEXIT .IIF IDN .EMIT .IIF NE $E$ .MEXIT .EMIT .ENDM .MACRO RNE LOC .EMIT .ENDM .MACRO REQ LOC .EMIT .ENDM .MACRO RLT LOC .EMIT .ENDM .MACRO RGE LOC .EMIT .ENDM .MACRO RGT LOC .EMIT .ENDM .MACRO RLE LOC .EMIT .ENDM .MACRO RPL LOC .EMIT .ENDM .MACRO RMI LOC .EMIT .ENDM .MACRO RHI LOC .EMIT .ENDM .MACRO RLOS LOC .EMIT .ENDM .MACRO RHIS LOC .EMIT .ENDM .MACRO RLO LOC .EMIT .ENDM .MACRO RCS LOC .EMIT .ENDM .MACRO RCC LOC .EMIT .ENDM .MACRO RVS LOC .EMIT .ENDM .MACRO RVC LOC .EMIT .ENDM .MACRO IF A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .IIF B .MEXIT $F$=0 .IIF IDN <:=> $F$=1 .IIF IDN <:B=> $F$=1 .IF NE $F$ .IFARI A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .MEXIT .ENDC $O$=0 $I$=0 .IIF IDN .LEAVE A,BE,C,BB,F .IIF NE $I$ .MEXIT .IIF IDN .GOTO A,BE,C,BB,F .IIF NE $I$ .MEXIT .IIF IDN .OR A,BE,C,BB .IIF IDN .OR A,BE,C,BB .IF EQ $O$ .IIF EQ $L$-1 .GENBR A,BE,C,BB,\$T2 .IIF NE $L$-1 .GENBR A,BE,C,BB,\$T .ENDC $T=$T+1 .IIF B ,.MEXIT .IIF B ,.MEXIT ; D EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z .IIF LE $DIDDO .MEXIT ..POP $$T,$$T ..TAG \$$T,L $DIDDO=$DIDDO-1 .ENDM .MACRO .OR OA,OB,OC,OD $R=-$R $O$=1 $SV$=$L$ $L$=0 .IIF NE $L$-1 .GENBR OA,OB,OC,OD,\$T .IIF EQ $L$-1 .GENBR OA,OB,OC,OD,\$T2 $L$=$SV$ $R=-$R .ENDM .MACRO .IFARI A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .SIMPLE A,BE,C,D,EE .IIF IDN IF RESULT,IS,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .IIF IDN .MEXIT .IIF IDN IF RESULT,IS,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .IIF IDN .MEXIT IF RESULT,IS,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .ENDM .MACRO .LEAVE LA,LB,LC,LD,LE $L$=2 .IIF B $K$=$LL .IIF NB $K$=LE $R=-$R .GENBR LA,LB,LC,LD,\$K$ ..POP $$TT,$$TT $R=-$R $L$=0 .ENDM .MACRO .GOTO GA,GB,GC,GD,GEE $R=-$R $L$=3 .GENBR GA,GB,GC,GD,GEE ..POP $$TT,$$TT $R=-$R $L$=0 .ENDM .MACRO OR EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .IIF B .MEXIT .IIF IDN ..POP $T1,$T .IIF IDN ..POP $T1,$T IF'BB EE,F,G,H .IF DIF .IF DIF ..POP $$TT,$$TT ..POP $$T,$$T ..TAG \$$T,L .IIF B ..PUSH 0,$$TT .IIF B .MEXIT .IIF IDN ..PUSH 0,$$TT .IIF IDN .MEXIT H I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z ..TAG \$$TT,L $DIDDO=0 .MEXIT .ENDC .ENDC H I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z .ENDM .MACRO AND EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB .IIF B .MEXIT $$S=0 .IIF IDN ,,$$S=1 .IIF IDN ,,$$S=1 .IF GT $$S ..POP $$T,$$T IF'BB EE,F,G,H ..TAG \$$T,L H I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z .IFF ..POP $T,$T IF'BB EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z .ENDC .ENDM .MACRO DO EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z .IIF B ,.MEXIT LET EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z $DIDDO=$DIDDO+1 .ENDM .MACRO THEN EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z .IIF B .MEXIT EE F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z $DIDDO=$DIDDO+1 .ENDM .MACRO ELSE ..POP $T1,$T2 .IIF NE $T1,.ERROR $T1 ;ELSE SEEN IN OTHER THAN IF BLOCK ..BRAN BR,\$T,L ..TAG \$T2,L ..PUSH $T1,$T $T=$T+1 .ENDM .MACRO WHILE A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,BB $DIDDO=-1 ..TAG \$L,B IF A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,BB .IF EQ $DIDDO ..BRAN BR,\$L,B ..POP $$T,$$T ..TAG \$$T,L .IFF ..PUSH 1,$L $LL=$L .ENDC $DIDDO=0 $L=$L+1 .ENDM .MACRO CASE A,BBB,C .IIF DIF .EMIT .EMIT .IRP TT,\$T .EMIT .ENDR ..PUSH 4,$T $T=$T+1 .ENDM .MACRO FOR A,BBB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z .IIF DIF ,,FOR A,BBB,C,D,EE,BY,#1,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X .IIF DIF ,,.MEXIT ; .SIMPLE A,BBB,C ..TAG \$L,B .IF B ..PUSH 2,$L $LL=$L .IRP TT,\<$L> .MACRO $.$'TT D A,EE,G,TT .ENDM .ENDM .IFF $SDO=$DIDDO H I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z D A,EE,G,\$L .IIF GT $DIDDO-$SDO $DIDDO=$DIDDO-1 .ENDC $L=$L+1 .ENDM .MACRO TO A1,A2,A3,A4 $E$=0 .OPADD A1,A3 .EMIT .EMIT .EMITL .ENDM .MACRO DOWNTO A1,A2,A3,A4 $E$=0 .OPSUB A1,A3 .EMIT .EMIT .EMITL .ENDM .MACRO REPEAT A,BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z .IF IDN THRU BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V .MEXIT .ENDC ..TAG \$L,B ..PUSH 5,$L $LL=$L $L=$L+1 .IIF B .MEXIT .IF IDN UNTILB BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z .MEXIT .ENDC .IF IDN UNTIL BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z .MEXIT .ENDC LET A,BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z .ENDM .MACRO UNTIL A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB $L$=1 ..POP $T1,$T2 .IF NE $T1-5 .ERROR ; UNTIL SEEN IN OTHER THAN REPEAT BLOCK .MEXIT .ENDC IF A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,BB ..POP $$T,$$T ..TAG \$T2,E $L$=0 .ENDM .MACRO THRU A,BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V .NTYPE A3,A .IF NE A3&70 .ERROR ; A MUST BE A REGISTER .MEXIT .ENDC .IIF NB ,LET A,BB,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V ..TAG \$L,B ..PUSH 6,$L $LL=$L .IRP TT,\$L .MACRO $.$'TT ; .EMIT .EMIT .EMIT .ENDM .ENDM $L=$L+1 .ENDM .MACRO END COMM ..POP $T1,$T2 .IIF EQ $T1 ..TAG \$T2,L ;-0- IF .IIF EQ $T1 .MEXIT ; $LL = $LL -1 .IIF EQ $T1-3 ..TAG \$T2,E ;-3- BEGIN/END .IIF EQ $T1-3 .MEXIT ; .IIF EQ $T1-5 ..BRAN BR,\$T2,B,1 ;-5- REPEAT .IIF EQ $T1-5 ..TAG \$T2,E .IIF EQ $T1-5 .MEXIT ; .IF EQ $T1-1 ;-1- WHILE ..BRAN BR,\$T2,B,1 ..POP $$T,$$T ..TAG \$$T,L ..TAG \$T2,E .MEXIT .ENDC ; .IF EQ $T1-2 ;-2- REPEAT/FOR .IRP TT,<\$T2> $.$'TT .ENDM .MEXIT .ENDC ; .IF EQ $T1-4 ;-4- CASE $LL = $LL + 1 ..TAG \$T2,L .EMIT .EMIT .EMIT .MEXIT .ENDC ; .IF EQ $T1-6 ; -6- THRU (REPEAT THRU) .IRP TT,\$T2 $.$'TT .ENDM ..TAG \$T2,E .MEXIT .ENDC ; .ERROR ; $T STRANGE SUPER-MAC STACK VALUE .ENDM .MACRO BEGIN BNAME .IIF NB BNAME=$L ..PUSH 3,$L ..TAG \$L,B $LL = $L $L=$L+1 .ENDM .MACRO $$END .IF GE IIII .PRINT ; MISSING END END $$END .ENDC .ENDM .MACRO LEAVE AAAA,A,BB,C,D,EE,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V .IF B .IRP QQ,\<$LL> .EMIT
.ENDM .MEXIT .ENDC .IRP QQ,\AAAA .EMIT
.ENDM .ENDM .MACRO JUMPTO AAAA,A,B,C,D,E,F,H,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V .EMIT .ENDM .MACRO GOTO BBBB .EMIT
.ENDM .MACRO PUSH P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q22 .IF NB P0 .EMIT PUSH P1,P2,P3,P4,P5,P6,P7,P8,P9 .ENDC .ENDM .MACRO POP P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q22 .IF NB P0 .EMIT POP P1,P2,P3,P4,P5,P6,P7,P8,P9 .ENDC .ENDM .MACRO LET A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V .SIMPLE A,BE,C,D,EE .IIF B .MEXIT .IIF B .MEXIT .IIF B .MEXIT .IF LT $Y$ LET A,BE,A,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V .MEXIT .ENDC LET A,BE,A,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V .ENDM .MACRO .SIMPLE X1,X2,X3,X4,X5,X6 .IF IDN <:B=> .SIMPLE X1,:=,X3,X4,X5,B .MEXIT .ENDC $Y$=0 $Z$=0 .IIF IDN $Y$=7 .IIF IDN <0> $Y$=7 .IIF IDN <#0> $Y$=7 .IIF IDN $Y$=4 .IIF IDN $Y$=-1 ; .IIF IDN $Y$=-1 .IIF IDN <-> $Y$=-2 .IF DIF .IIF EQ $Y$-7 .EMIT .IIF EQ $Y$-4 .EMIT .IIF EQ $Y$ .EMIT .ENDC .IF DIF .IIF LT $Y$ .EMIT .ENDC .IIF IDN <+1> $Y$=-5 .IIF IDN <-1> $Y$=-6 .IF LT $Y$ .IIF EQ $Y$+1 .EMIT .IIF EQ $Y$+2 .EMIT .IIF EQ $Y$+5 .EMIT .IIF EQ $Y$+6 .EMIT .MEXIT .ENDC ; .IIF B .MEXIT .IIF IDN .MEXIT $E$=0 .IIF EQ $E$ .ARITH X1,X5,X6,X4 .ENDM .MACRO .ARITH Y1,Y2,Y3,Y4 .IIF IDN <+> .OPADD Y1,Y2,Y3 .IIF IDN <-> .OPSUB Y1,Y2,Y3 .IIF NE $E$ .MEXIT .IIF IDN .EMIT .IIF IDN .EMIT .IIF IDN .EMIT .IIF NE $E$ .MEXIT .IIF IDN .EMIT .IIF IDN .EMIT .IIF IDN .EMIT .IIF IDN .EMIT .IIF NE $E$ .MEXIT .IIF IDN .EMITR ,Y2 .IIF IDN .EMITR ,Y2 .IIF IDN .EMITR ,Y2 .IIF IDN .EMITR ,Y2 .IIF NE $E$ .MEXIT .IIF IDN <*> .EMIT .IIF IDN .EMIT
.IIF IDN .EMIT .IIF IDN .EMIT .IIF NE $E$ .MEXIT ; .IIF IDN .EMIT .IIF EQ $E$ .ERROR ; Y4 NOT A LEGAL OPERATOR .ENDM .MACRO ORB EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z OR EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,B .ENDM .MACRO ANDB EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z AND EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,B .ENDM .MACRO IFB A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z IF A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,TE,U,V,W,X,Y,Z,B .ENDM .MACRO UNTILB A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z UNTIL A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,B .ENDM .MACRO WHILEB A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z WHILE A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,B .ENDM .MACRO ON.NOERROR A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S IF RESULT IS,CC,A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S .ENDM .MACRO ON.ERROR A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S IF RESULT IS,CS,A,BE,C,D,EE,F,G,H,I,J,K,LL,M,N,O,P,Q,R,S .ENDM .MACRO FI COMM END .ENDM .macro $line num mov #^d'num,^o-12(%5) .endm $line .macro $chksp num .globl $chksp jsr 0,$chksp .word num .endm $chksp ; ; ; 11/34 instruction set simulators ; .macro sob r,a dec r bne a .endm sob .macro sxt d,?a,?b bmi $'a clr d br $'b $'a: mov #-1,d $'b: .endm sxt .macro $$$ c,r,rtn .globl rtn mov c,-(6) jsr 0,rtn .byte , .endm $$$ .macro ash r,s $$$ r,s,$ash .endm ash .macro ashc r,s $$$ r,s,$ashc .endm ashc .macro xor r,d .ntype $$$.,d mov d,-(6) .if ne,$$$.-16 ;if on stack bis r,d ;set bits in d .iff bis r,2(6) .endc mov r,-(6) com (6) ;compute bic (6)+,(6) ; R & D bic (6)+,d ;clear these bits in "d" .endm xor .macro mul r,s $$$ r,s,$mul .endm mul .macro div r,s $$$ r,s,$div .endm div ; ; ; The following macros allow assembly-language calls to higher level ; language routines (C or FORTRAN). ; ; .macro call r,a,b .if nb,b mov r5,-(sp) .endc ...arg a .if nb,b ;calling FORTRAN routine mov #...a,-(sp) ;# of arguments mov sp,r5 ;r5 -> arguments ...a = ...a+1 ;1 more item to pop .endc .globl r jsr pc,@#r ;call subroutine .if ne,...a ;if any args at all add #<...a*2>,sp ;fix stack .endc .if nb,b mov (sp)+,r5 .endc .endm call ; ; ; The "...arg" macro puts the arguments on the stack in reverse order. ; .macro ...arg a,b,c,d,e,f,g,h,i,j,k,l ...a = 0 ;no args yet ....f = 0 ;no args encountered .irp x, ;note reverse order .if nb,x ;arg specified? mov x,-(sp) ;yes, put on stack ...a = ...a+1 ;and bump counter ....f = 1 ;arg encountered flag .iff .if ne,....f ;if 1st arg encountered clr -(sp) ;give default arg of 0 ...a = ...a+1 ;and bump counter .endc .endc .endr .endm ...arg ; ; ; The following macro is used to simulate "C" function protocol ; for assembly-language routines. ; .macro function name arg,usr=swap .psect name,i,ro,gbl,con .globl name name: br .+10 ;follow "C" conventions .byte 40,40,40,40,40,40 $$$$. = . . = .-6 .ascii \name\ . = $$$$. .globl $csv,$cret jsr 5,$csv ....a. = s.arg1 .irp x, mov ....a.(r5),x ....a. = ....a. + 2 .endr .if idn
.globl $usrsw .if idn , $usrsw = 0 .iff $usrsw = 1 .endc .endc .endm function ; ; ; entry point into a function (assembly-language functions only). ; ; .macro entry name .globl name name: br .+10 .byte 40,40,40,40,40,40 $$$$. = . . = .-6 .ascii \name\ . = $$$$. jsr 5,$csv .endm entry ; ; "C" style return ; .macro return val .if nb,val mov val,r0 .endc .globl $cret jmp $cret .endm return ; ; "C" Argument offsets: ; S.ARG1 = 04 S.ARG2 = 06 S.ARG3 = 10 .ENDC $$PASS = 1 SMACIT .PAGE .LIST