;~x!- ; ; These macros were the prototype of the let*.mac ; They are saved here since sometimes it is useful to look at ; them again. ; $MACRO LET 1 = 3 * 5 I%IDN #@#9 0 I%IDN #@#9 0 <** <> > I%IDN <#@1> <#@5> > I%NB <#@E> > I%DF <#@1> <#@3> < M%OV #@{1},#@{3}> I%IN <#@4> <+ * - / <>> < > > ?+ 14,,25 $%% #@E #@{1},#@{5} I%NB <#@6> > $ENDM ; - - - - - - - - - - - - - - $MACRO $%% I%B <#@4> <** <> <#@1 #@2,#@3> > I%NB <#@4> > I%NB <#@4> <#@1 #@2,R0> $ENDM ; - - - - - - - - - - - - - - $MACRO M%OV S%SW 14 ?- <#@2> ?+ 2 S%SW -14 I%IN <#@3> <> << MOV #@2,#@1>> ]> $ENDM ; - - - - - - - - - - - - - - $MACRO P%SH S%SW 14 ?- <#@{1}> ?+ 1 S%SW -14 ?++ 12,1 ?-- #@C+2,1 I%DF <#@1> <(SP)+> < M%-OV <#@*(1"Z)>> $ENDM ; - - - - - - - - - - - - - - $MACRO M%-OV get-tmp ** <> ** <> I%IN <#@2> <- + / * <>> <> I%SW #@#7 > I%SW #@#8 < MOV #@1,-(SP)> I%SW #@#9 >> I%NB <#@2> < MOV #@#0(r5),-(SP)> rel-tmp ** <> $ENDM ; - - - - - - - - - - - - - - $MACRO CL ARRAY/FUN P1 P2 P3... I%IN <#@=1(1:1)> . < <#@*(3_Z)>>> > $ENDM ; - - - - - - - - - - - - - - $MACRO CL@1A S%SW 29 I%IN <#@2> <- + / * <>> <> $ENDM $MACRO CL@1 get-tmp CL@1A #@1 ;I%SW 29 <29 IS ON> <29 IS OFF> I%SW 29 > mov #@#0(r5),r1 rel-tmp $ENDM ; - - - - - - - - - - - - - - $MACRO CL@ ARRAY P1 P2 P3 ; M%%OV R1,<#@*(2"N)> I%R <#@2> > < mov #@{2},r1> I%B <#@3> < ASL R1> T%YP T #@1 25 ?+ 10,,25 I%IN <#@A> <0 1 2> << ADD ##@1,R1> < ADD ##@1,R1> < ADD #@1(R5),R1>> I%IDN <#@A> 1 < ADD R5,R1> MOV#@3 (R1),R0 $ENDM ; - - - - - - - - - - - - - - $MACRO CL% NAME P1 P2... ?-- 0 ** P%SH <#@A>,<#@9>,<#@8>,<#@7>,<#@6>,<#@5>,<#@4>,<#@3>,<#@2> JSR PC,#@1 ?++ 1 ADD ##@1,SP ;Clean up stack $ENDM ; - - - - - - - - - - - - - - $MACRO get-tmp S%N 0 = v0 - 2 S%N 1 = v0 L v1 $ENDM $MACRO rel-tmp S%N 0 = v0 + 2 $ENDM ; - - - - - - - $MACRO set S%N <#@*(1"N)> $ENDM ; - - - - - - - $MACRO get n x (0=#@#0)(1=#@#1)(2=#@#2)(3=#@#3)(4=#@#4)(5=#@#5)(6=#@#6)(7=#@#7)(8=#@#8)(9=#@#9) $ENDM ; - - - - - - - $MACRO mac S%OPT mac 1,2 $ENDM ; - - - - - - - $MACRO mpp S%OPT MPP 1,2 $ENDM ; - - - - - - - $MACRO on S%N 6 = v6 - 1 I%SW 9 S%SW #@19 $ENDM ; - - - - - - - $MACRO off S%SW -9 S%N 2 = v#@#6 I%IN #@#2 <0 1> < > S%N 6 = v6 + 1 $ENDM ; - - - - - - - ;~x!ins mp/prm=~ti:/nl/ml~/pri=55. $MACRO IF A = B ?? 19,17,18 ?- #@I ?- #@J BR. #@2 #@1 ; ; Note that the below causes right to left evaluation of ; relations. IF a = b and c = d or d = f ; is ; equiv to IF (a = b and (c =d and (d = f))) ; in a paren'd expression (not permitted of course) ; ?+ 16,,25 I%IDN OR,<#@4>,>> CMP. <#@{1}>,<#@{3}> B#@G #@J I%IDN OR,<#@4>,<#@H=.> I%IDN AND,<#@4>, >> $ENDM $MACRO CMP. A,B ;x <#@1> <#@2> <#@3> ;I%NB <#@2>>< CMP #@1,#@2>> I%R <#@1> <#@2>> <#@2>>> I%R <#@1> <> <#@2>> <#@2>>> $ENDM $MACRO C1 A B I%IN #0 <#@2> << tst #@2>> < cmp #@1,#@2> $ENDM $MACRO C2 A B ;X C2 #@1 #@2 ;PUSH #@2 ETST #@1 clr -(sp) I%SW 28 > > cmp (sp)+,#@2 $ENDM $MACRO C3 A B ETST #@2 clr -(sp) I%SW 28 > > ;PUSH #@1 cmp #@1,(sp)+ $ENDM $MACRO C4 A B ETST #@2 clr -(sp) I%SW 28 > > ETST #@1 clr -(sp) I%SW 28 > > cmp (sp)+,(sp)+ $ENDM $MACRO ETST S%SW -28 I%IN <#@2> <+ - * /> <> $ENDM $MACRO get-tmp S%N 0 = v0 - 2 S%N 1 = v0 L v1 $ENDM $MACRO rel-tmp S%N 0 = v0 + 2 $ENDM ; - - - - - - - ;$MACRO set ;S%N <#@*(1"N)> ;$ENDM ;; - - - - - - - ;$MACRO get n ;x (0=#@#0)(1=#@#1)(2=#@#2)(3=#@#3)(4=#@#4)(5=#@#5)(6=#@#6)(7=#@#7)(8=#@#8)(9=#@#9) ;$ENDM ;; - - - - - - - ;$MACRO mac ;S%OPT mac 1,2 ;$ENDM ;; - - - - - - - ;$MACRO mpp ;S%OPT MPP 1,2 ;$ENDM ;; - - - - - - - ;$MACRO on ;S%N 6 = v6 - 1 ;I%SW 9 ;S%SW #@19 ;$ENDM ;; - - - - - - - ;$MACRO off ;S%SW -9 ;S%N 2 = v#@#6 ;I%IN #@#2 <0 1> < > ;S%N 6 = v6 + 1 ;$ENDM ;; - - - - - - - ;$MACRO C4 A B ;get-tmp ;ETST #@1 ;I%SW 28 > > ;get-tmp ;ETST #@2 ;I%SW 28 > > ;S%N 2 = V0 + 2 ; cmp #@#2(r5),#@#0(r5) ;rel-tmp ;rel-tmp ;$ENDM