.NLIST .DSABL CRF ; ; THE FOLLOWING SYMBOL IS USED TO ALLOW COMMON CALRS SOFTWARE ; TO DETERMINE IF IT WAS ASSEMBLED FOR A TEST SYSTEM OR AN ; ADMIN SYSTEM. ; ; IF BLOCK IS EVER USED FOR THE ADMIN SYSTEM, IT SHOULD BE ; REPLACED. ; $$TST$= 1 ; ; ;------------------------------------------------------------ .MACRO $DO ID .DSABL CRF .IIF NB ID $FIND ID $$BCTR= $$BCTR+1 $ASS1 $B,\$$BCTR,\$$BNMB $ASS1 $E,\$$BCTR,1 .IF NB ID .IF NE $$NMBR .ERROR ID ; PREVIOUSLY DEFINED IDENT $ASS1 $D,\$$BCTR,0 .IFF $ASS1 $D,\$$BCTR,\ID .ENDC .IFF $ASS1 $D,\$$BCTR,0 .ENDC $$BNMB= $$BNMB+3 .ENABL CRF .ENDM $DO ;------------------------------------------------------------ .MACRO $IF COND,ID .DSABL CRF $DO ID .DSABL CRF $ASS1 $E,\$$BCTR,0 $TEST 0,COND .ENABL CRF .ENDM $IF ;------------------------------------------------------------ .MACRO $END ID .DSABL CRF .IF NB ID $FIND ID .IF EQ $$NMBR .ERROR ID ;INVALID IDENT .IFF .IF NE $$NMBR-$$BCTR .ERROR ID ;INVALID IDENT .ENDC .ENDC .ENDC .IF GT $$BCTR $ASS2 $$TEMP,$E,\$$BCTR $ASS2 $$NMBR,$B,\$$BCTR .IF EQ $$TEMP $LABEL \$$NMBR .ENDC .IF EQ $$TEMP-1 .ENDC .IF EQ $$TEMP-2 $BR R,\$$NMBR+2 $LABEL \$$NMBR .ENDC .IF EQ $$TEMP-3 $LABEL \$$NMBR $ASS2 $$TEMP,$C,\$$BCTR .WORD $$TEMP $$TMP2= 0 .REPT $$TEMP $ASS2 $$TMP1,\$$NMBR*40+$$TMP2 $ASS2 $$TMP1,\$$TMP1,$ .WORD $$TMP1 $$TMP2= $$TMP2+1 .ENDR .ENDC $LABEL \$$NMBR+1 $$BCTR= $$BCTR-1 .IFF .ERROR ;TOO MANY ENDS .ENDC .ENABL CRF .ENDM $END ;------------------------------------------------------------ ; .MACRO $CASES ARG,ID ; .DSABL CRF ; $DO ID ; .DSABL CRF ; $ASS1 $C,\$$BCTR,0 ; $ASS1 $E,\$$BCTR,3 ; $ASS2 $$NMBR,$B,\$$BCTR ; $ASS2 $$TEMP,\$$NMBR,$ ; MOV ARG,-(SP) ; $IF <(SP),HI,$$TEMP> ; .DSABL CRF ; MOV $$TEMP,(SP) ; $END ; .DSABL CRF ; ASL (SP) ; ADD #$$TEMP+2,(SP) ; JMP @(SP)+ ; .ENABL CRF ; .ENDM $CASES ;------------------------------------------------------------ ; .MACRO $CASE NUM ; .DSABL CRF ; $ASS2 $$TEMP,$C,\$$BCTR ; $ASS2 $$NMBR,$B,\$$BCTR ; $BR R,\$$NMBR+1 ; .IF B ; $LABEL \$$NMBR*40+\$$TEMP ; $ASS1 $C,\$$BCTR,\$$TEMP+1 ; .IFF ; .IRP NM, ; $LABEL \$$NMBR*40+NM ; .IF GT $$TEMP-NM ; $ASS1 $C,\$$BCTR,NM ; .ENDC ; .ENDR ; .ENDC ; .ENABL CRF ; .ENDM $CASE ;------------------------------------------------------------ .MACRO $INIT NMBR,PR .DSABL CRF $$BCTR= 0 $$BNMB= NMBR .IF NB PR $$PR= 1 .IFF $$PR= 0 .ENDC .ENABL CRF .ENDM $INIT ;------------------------------------------------------------ .MACRO $FIND ID $$NMBR= $$BCTR .REPT $$BCTR $ASS2 $$TEMP,$D,\$$NMBR .IIF EQ ID-$$TEMP .MEXIT $$NMBR= $$NMBR-1 .ENDR .ENDM $FIND ;------------------------------------------------------------ .MACRO $TEST TYPE,F1,CND,F2,BYT .IF NB CND .IF IDN CND,ON $GEN TYPE,BIT,EQ,NE,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,OFF $GEN TYPE,BIT,NE,EQ,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,EQ $GEN TYPE,CMP,NE,EQ,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,NE $GEN TYPE,CMP,EQ,NE,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,GT $GEN TYPE,CMP,LE,GT,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,GE $GEN TYPE,CMP,LT,GE,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,LE $GEN TYPE,CMP,GT,LE,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,LT $GEN TYPE,CMP,GE,LT,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,HI $GEN TYPE,CMP,LOS,HI,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,HIS $GEN TYPE,CMP,LO,HIS,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,LO $GEN TYPE,CMP,HIS,LO,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,LOS $GEN TYPE,CMP,HI,LOS,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,CS $GEN TYPE,CMP,CC,CS,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,CC $GEN TYPE,CMP,CS,CC,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,VS $GEN TYPE,CMP,VC,VS,F1,F2,BYT .MEXIT .ENDC .IF IDN CND,VC $GEN TYPE,CMP,VS,VC,F1,F2,BYT .MEXIT .ENDC .ENDC .IF DIF CND,R .ERROR ;INVALID /MISSING CONDITION .ENDC $GEN TYPE,CMP,CND,CND,F1,F2,BYT .ENDM $TEST ;------------------------------------------------------------ .MACRO $GEN TYPE,INS,CND0,CND1,F1,F2,BYT .ENABL CRF .IF NB INS .IF NB F1 .IF NB F2 INS'BYT F1,F2 .IFF TST'BYT F1 .ENDC .IFF .IF NB F2 TST'BYT F2 .ENDC .ENDC .ENDC .DSABL CRF $ASS2 $$NMBR,$B,\$$BCTR .IF EQ TYPE $BR CND0,\$$NMBR .IFF .IF EQ TYPE-1 $BR CND1,\$$NMBR+1 .IFF .IF EQ TYPE-2 $BR CND1,\$$NMBR+2 .IFF $BR CND0,\$$NMBR+2 .ENDC .ENDC .ENDC .ENDM $GEN ;------------------------------------------------------------ .MACRO $ELSE TYPE .DSABL CRF $ASS2 $$TEMP,$E,\$$BCTR .IF EQ $$TEMP $ASS1 $E,\$$BCTR,1 $ASS2 $$NMBR,$B,\$$BCTR .IIF DIF ,NULL $BR R,\$$NMBR+1 $LABEL \$$NMBR .IFF .ERROR ;TOO MANY ELSES .ENDC .ENABL CRF .ENDM $ELSE ;------------------------------------------------------------ .MACRO $EXIT ID $EXIF <,R>,ID .ENDM $EXIT ;------------------------------------------------------------ .MACRO $AGAIN ID $AGAIF <,R>,ID .ENDM $AGAIN ;------------------------------------------------------------ .MACRO $BR CC,NMB B'CC NMB'$ .ENDM $BR ;------------------------------------------------------------ .MACRO $ASS1 A,B,C A'B= C .ENDM $ASS1 ;------------------------------------------------------------ .MACRO $ASS2 A,B,C A= B'C .ENDM $ASS2 ;------------------------------------------------------------ .MACRO $LABEL NMB .IF EQ $$PR NMB'$: .IFF NMB'$: .PRINT $$BCTR ; NMB'$ .ENDC .ENDM $LABEL ;------------------------------------------------------------ .MACRO $UNTIL COND,ID .DSABL CRF .IF NB ID $FIND ID .IF EQ $$NMBR .ERROR ID ;INVALID IDENT .IFF .IF NE $$NMBR-$$BCTR .ERROR ID ;INVALID IDENT .ENDC .ENDC .ENDC .IF GT $$BCTR $TEST 3,COND $ASS2 $$TEMP,$E,\$$BCTR $ASS2 $$NMBR,$B,\$$BCTR .IF NE $$TEMP-1 $LABEL \$$NMBR .ENDC $LABEL \$$NMBR+1 $$BCTR= $$BCTR-1 .IFF .ERROR ;TOO MANY ENDS .ENDC .ENABLE CRF .ENDM $UNTIL ;------------------------------------------------------------ .MACRO $EXIF CND,ID .DSABL CRF .IF NB ID $$TMP1= $$BCTR $FIND ID .IF EQ $$NMBR .ERROR ID ; INVALID IDENT BR .+2 .IFF $$BCTR= $$NMBR $TEST 1,CND .ENDC $$BCTR= $$TMP1 .IFF $TEST 1,CND .ENDC .ENABL CRF .ENDM $EXIF ;------------------------------------------------------------ .MACRO $AGAIF CND,ID .DSABL CRF .IF NB ID $$TMP1= $$BCTR $FIND ID .IF EQ $$NMBR .ERROR ID ;INVALID IDENT .IFF $$BCTR= $$NMBR $TEST 2,CND .ENDC $$BCTR= $$TMP1 .IFF $TEST 2,CND .ENDC .ENABL CRF .ENDM $AGAIF ;------------------------------------------------------------ .MACRO $LOOP BLK .DSABL CRF $DO BLK .DSABL CRF $ASS1 $E,\$$BCTR,2 $ASS2 $$NMBR,$B,\$$BCTR $LABEL \$$NMBR+2 .ENABL CRF .ENDM $LOOP ;------------------------------------------------------------ .MACRO $WHILE COND,BLK .DSABL CRF $LOOP BLK .DSABL CRF $TEST 0,COND .ENABL CRF .ENDM $WHILE ;------------------------------------------------------------ .MACRO $SOB REG .DSABL CRF $ASS2 $$NMBR,$B,\$$BCTR $SOB1 REG,\2+$$NMBR $ASS1 $E,\$$BCTR,0 $END .ENABL CRF .ENDM $SOB ;------------------------------------------------------------ .MACRO $SOB1 RG,NM SOB RG,NM'$ .ENDM $SOB1 ;------------------------------------------------------------ .MACRO $CALL ROUT,REG,PARAMS .IF NB REG JSR REG,ROUT .IFF JSR PC,ROUT .ENDC .IF NB .WORD PARAMS .ENDC .ENDM $CALL ;------------------------------------------------------------ .MACRO $RET REG .IF NB REG RTS REG .IFF RTS PC .ENDC .ENDM $RET ;------------------------------------------------------------ .MACRO $ANDIF COND .DSABL CRF $TEST 0,COND .ENABL CRF .ENDM $ANDIF ;------------------------------------------------------------ .MACRO $ORIF COND .DSABL CRF $BR R,\$$BNMB-2 $LABEL \$$BNMB-3 $ASS1 $B,\$$BCTR,\$$BNMB $TEST 0,COND $LABEL \$$BNMB-2 $$BNMB= $$BNMB+3 .ENABL CRF .ENDM $ORIF ;------------------------------------------------------------ ; $PUSH SAVE ARGUMENTS ON THE STACK .MACRO $PUSH PAR1,PAR2,PAR3,PAR4,PAR5 .IF NB,PAR1 MOV PAR1,-(SP) .IF NB,PAR2 MOV PAR2,-(SP) .IF NB,PAR3 MOV PAR3,-(SP) .IF NB,PAR4 MOV PAR4,-(SP) .IF NB,PAR5 MOV PAR5,-(SP) .ENDC .ENDC .ENDC .ENDC .IFF MOV (SP),-(SP) .ENDC .ENDM ;------------------------------------------------------------ ; $POP RESTORE ARGUMENTS FROM THE STACK .MACRO $POP PAR1,PAR2,PAR3,PAR4,PAR5 .IF NB,PAR1 .IF NB,PAR2 .IF NB,PAR3 .IF NB,PAR4 .IF NB,PAR5 MOV (SP)+,PAR5 .ENDC MOV (SP)+,PAR4 .ENDC MOV (SP)+,PAR3 .ENDC MOV (SP)+,PAR2 .ENDC MOV (SP)+,PAR1 .IFF MOV (SP),(SP)+ .ENDC .ENDM ;-------------------------------------------------------------- $INIT 1000 ;DEFAULT INITIALIZATION ;-------------------------------------------------------------- .ENABL CRF .LIST