Код:
.MACRO MACSP L,I
.IF B,I
.MCALL IF,IFB,IFC,ELSE,FI,CALL,PROC,BEGIN,END
.MCALL LOOP,LOOPB,EXLOOP,REPEAT,CASE
.MCALL $20,$22,$90,$91,$92,$93,$94
$10=0
.IIF NB,L,$10=1
$11=1000
.ENDC
$0=20
$1=1
$2=0
$3=0
$4=0
$8=0
$9=1
$12=77777
.ENDM
.MACRO IF S,Q,D,T
$20 ,<S>,<Q>,<D>
IFC <Q>,<T>
.ENDM
.MACRO IFB S,Q,D,T
$20 B,<S>,<Q>,<D>
IFC <Q>,<T>
.ENDM
.MACRO $20 V,S,Q,D
.IF DIF,<Q>,<IN>
.IF DIF,<Q>,<NI>
.IF IDN,<D>,<#0>
$93 <TST'V S>
.IFF
$93 <CMP'V S,D>
.ENDC
.MEXIT
.ENDC
.ENDC
$93 <BIT'V S,D>
.ENDM
.MACRO IFC Q,T
.IF IDN,<T>,<THEN>
.IIF NE,$4,.ERROR ;U
.IIF EQ,$2,$92 $2
$90 $2*2,4,\$0
$22 F,<Q>,\$2
$2=0
.IIF NE,$3,$94 \$3,$:
$3=0
.MEXIT
.ENDC
.IF B,T
.IIF EQ,$4,.ERROR ;U
$4=0
$22 ,<Q>,\$3
$3=0
.IIF NE,$2,$94 \$2,$:
$2=0
.MEXIT
.ENDC
.IF IDN <T>,<AND>
.IIF EQ,$2,$92 $2
$22 F,<Q>,\$2
.MEXIT
.ENDC
.IF IDN,<T>,<OR>
.IIF EQ,$3,$92 $3
$22 ,<Q>,\$3
.MEXIT
.ENDC
.ERROR ;U
.ENDM
.MACRO $22 F,Q,L
$6=0
.IIF IDN,<Q>,<SLT>,$6=BLT
.IIF IDN,<Q>,<SLE>,$6=BLE
.IIF IDN,<Q>,<SGE>,$6=BGE
.IIF IDN,<Q>,<SGT>,$6=BGT
.IIF IDN,<Q>,<ULT>,$6=BLO
.IIF IDN,<Q>,<ULE>,$6=BLOS
.IIF IDN,<Q>,<UGE>,$6=BHIS
.IIF IDN,<Q>,<UGT>,$6=BHI
.IIF IDN,<Q>,<IN>,$6=BNE
.IIF IDN,<Q>,<NI>,$6=BEQ
.IIF EQ,$6,$6=B'Q
.IIF NE,$6&74377,.ERROR ;U
$6=$6/400&377
.IIF NB,F,$6=$6!1-<$6&1>
$93 BR,L
$94 .=.-1
$93 <.BYTE $6>
.ENDM
.MACRO ELSE
$91 $6,4,\$0-1
.IIF NE,$6&1,.ERROR ;N
$93 BR,\$1
$90 $1*2+1,4,\$0
$92
$94 \$6/2,$:
.ENDM
.MACRO FI
$91 $6,4,\$0-1
$94 \$6/2,$:
.ENDM
.MACRO CALL L
$93 <JSR %7,L>
.ENDM
.MACRO PROC L,S,B,C,T
;IF 'T' BLANK - FOR PDP-11, IF 'T' LSI - FOR LSI-11
$6=0
.IF NB,L
.IIF NE,$0-20,.ERROR ;N
MACSP ,I
$6=4
$90 7,0,\$0
$94 L:
.ENDC
$5=-1
.IRP R,<S>
.NTYPE $5,R
.IIF GT,$5-5,.ERROR ;T
$6=$6+4
$90 $5,0,\$0
$93 <MOV R,-(%6)>
.ENDR
.IF NB,B
.IIF LT,$5,.ERROR ;P
.IIF LE,B,.ERROR ;V
$7=B+1/2*2
.IIF GT,$7-7776,.ERROR ;V
$93 <SUB #$7,%6>
$93\10600+$5
$90 $7,0,\$0
$6=$6+2
.ENDC
.IF NB,C
.IIF DIF,<C>,<CRITICAL>,.ERROR ;U
$6=$6+1
.IF B,T
$93 <MOV @#-2,-(%6)>
$93 <MOV #340,@#-2>
$13=0
.IFF
.IIF DIF,<T>,<LSI>,.ERROR ;U
$93 <MFPS -(%6)>
$93 <MTPS #340>
$13=1
.ENDC
.ENDC
$90 $6,1,\$0
$9=$9+1
.ENDM
.MACRO BEGIN S,B,C
PROC ,<S>,<B>,<C>
.ENDM
.MACRO END
$9=$9-1
$91 $6,1,\$0-1
;.IIF NE,$6&1,$93 <MOV (%6)+,@#-2>
.IF NE,$6&1
.IF EQ,$13
$93 <MOV (%6)+,@#-2>
.IFF
$93 <MTPS (%6)+>
.ENDC
.ENDC
.IF NE,$6&2
$91 $7,0,\$0-1
$93 <ADD #$7,%6>
.ENDC
.REPT $6/4
$91 $5,0,\$0-1
$93 \12600+$5
.ENDR
.ENDM
.MACRO LOOP S
$90 $8,0,\$0
$8=0
$90 $9,0,\$0
$9=0
$5=0
.IF NB,S
.NTYPE $5,S
.IF EQ,$5-26
$93 <TST @%6>
.IFF
.IIF NE,$5-47,$93 <MOV S,-(%6)>
.ENDC
.IF EQ,$5-27
$94 <$94 $5=,^>,S,#
.IIF EQ,$5,.ERROR ;Z
.IFF
$92 $8
$93 BEQ,\$8
.ENDC
$5=1
.ENDC
$90 $1*2+$5,2,\$0
$94 \$1,$:
$92
.ENDM
.MACRO LOOPB S
.NTYPE $5,S
.IF EQ,$5&7-6
.IIF NE,$5-26,$93 <MOVB S,-(%6)>
$93 <BIC #177400,@%6>
.IFF
$93 <CLR -(%6)>
$93 <MOVB S,@%6>
.ENDC
LOOP -(%7)
.ENDM
.MACRO EXLOOP I,S,Q,D,T
.IIF NE,$9,.ERROR ;N
.IIF EQ,$8,$92 $8
.IF B,I
$93 BR,\$8
.IFF
$4=1
$3=$8
I S Q D T
.ENDC
.ENDM
.MACRO REPEAT
$91 $6,2,\$0-1
.IF NE,$6&1
$93 <DEC @%6>
$93 BNE,\$6/2
.IFF
$93 BR,\$6/2
.IFTF
.IIF NE,$8,$94 \$8,$:
.IFT
$93 <TST (%6)+>
.ENDC
$91 $9,0,\$0-1
$91 $8,0,\$0-1
.ENDM
.MACRO CASE R,L,P
.MCALL $24,VALUE,CASEND
$24 <R>,<L>,<P>
.ENDM
.MACRO $24 R,L,P
.IIF LE,L,.ERROR ;V
.IIF GT,L-7777,.ERROR ;V
$93 <CMP R,#L>
$5=$11*2
.IF B,P
.IF LE,L-172
$93 <BHI L+6*2+.>
.IFF
$93 <BLOS .+6>
$93 <JMP L+7*2+.>
.ENDC
$93 <ASL R>
$93 <ADD %7,R>
$93 <ADD 4(R),%7>
$94 $,\$11,=.
$94 $6=$,\$11+1,-.
.REPT L+1
$93 <.WORD $6>
.ENDR
.IFF
.IIF DIF,<P>,<PACKED>,.ERROR ;U
.IF LE,L-357
$93 <BHI L/2+11*2+.>
.IFF
$93 <BLOS .+6>
$93 <JMP L/2+12*2+.>
.ENDC
$93 <ADD %7,R>
$93 <MOVB 14(R),R>
$93 <BIC #177400,R>
$93 <ASL R>
$93 <ADD R,%7>
$94 $,\$11,=.
$94 $6=$,\$11+1,-.
.REPT L+1
$93 <.BYTE $6/2>
.ENDR
.EVEN
$5=$5+1
.ENDC
$94 $,\$11+1,=.
$90 <L>,0,\$0
$90 $5,3,\$0
$11=$11+3
.ENDM
.MACRO VALUE L
$91 $5,3,\$0-1
$94 $6=$,\$5/2+2
$93 <JMP $6>
.IF IDN,<L>,<>
$0=$0+1
$94 $,\$5/2+1,=.
.IFF
$91 $7,0,\$0-1
$0=$0+2
$94 $6=.-$,\$5/2
.IRP V,<L>
.IF GE,V
.IIF GT,V-$7,.ERROR ;R
.IF EQ,$5&1
$94 .=V*2+$,\$5/2
$93 <.WORD $6>
.IFF
$94 .=V+$,\$5/2
$93 <.BYTE $6/2>
.ENDC
$12=V
.IFF
.IIF GT,-<V>-$7,.ERROR ;R
.IIF LE,-<V>-$12,.ERROR ;R
.REPT -<V>-$12
.IF EQ,$5&1
$93 <.WORD $6>
.IFF
$93 <.BYTE $6/2>
.ENDC
.ENDR
$12=77777
.ENDC
.ENDR
$12=77777
$94 .=$6+$,\$5/2
.ENDC
.ENDM
.MACRO CASEND
$91 $5,3,\$0-1
$94 $,\$5/2+2,=.
$0=$0-1
.ENDM
.MACRO $90 V,T,X
$'X=V*10+T
$0=$0+1
.ENDM
.MACRO $91 V,T,X
$0=$0-1
.IIF LT,$0-20,.ERROR ;N
.IIF NE,$'X&7-T,.ERROR ;N
V=$'X/10
.ENDM
.MACRO $92 D
.IIF NB,D,D=$1
$1=$1+1
.ENDM
.MACRO $93 I,L
.IIF NE,$10,.LIST MEB
.IF B,L
I
.IFF
I L'$
.ENDC
.IIF NE,$10,.NLIST MEB
.ENDM
.MACRO $94 L,M,R
.IIF NE,$10,.LIST ME
L''M''R
.IIF NE,$10,.NLIST ME
.ENDM