; ; MACRO 11 - DECISION TABLE EMULATION MACROS. ; ******************************************* ; ; AUTHOR :- J.S.CLIFTON ; DATE :- 16th March 1982 ; ; THESE MACROS EMULATE A LOT OF THE FACILITIES OF A DECISION ; TABLE BASED LANGUAGE, THUS ALLOWING THE PROGRAMMER THE MEANS OF ; PRODUCING VERY COMPACT AND EASILY READABLE CODE IN AN ASSEMBLY ; LANGUAGE. SUPER-MAC MUST BE USED IN CONJUNCTION. TABMAC IS DEFINED ; IN 'MCALL SUPMAC'. ; ; .MACRO TABMAC ; .MCALL TABDEF $TABMC = 01 ;TABMAC VERSION NUMBER. $DETL$ = -1 ;AUTO DETAB LABEL INCREMENT. $DETM$ = -1 ;AUTO MACRO LABEL JUMP. $TRACE = 1 ;SET TRACE OFF. LST$$ = 1 ;SET TO NOLIST. ; TABDEF ; .ENDM TABMAC ; .MACRO TABDEF ; ;DEFINE DECISION TABLE MACROS. ; .MCALL DETAB,C.,A.,DETEND .MCALL ..CRLE,..COND,..ERLE .MCALL ..ARLE,..ACT,..TEST .MCALL TRACE,NOTRACE .MCALL ..LB10,..LB21,..LB22,..LB23 ; .MACRO TABDEF .ENDM ; .ENDM TABDEF ; .MACRO DETAB LABEL,TYPE .IF NB LABEL ;IS THERE A LABEL PARAMETER. .IF B TYPE .EMITL .IFF .IF IDN TYPE,GLOBAL .EMITL .IFF .IF IDN TYPE,LOCAL .EMITL .IFF .EMITL .PRINT ;UNRECOGNISED KEYWORD - DEFAULT GLOBAL. .ENDC .ENDC .ENDC .ENDC ; $DETL$ = $DETL$+1 ;INCREMENT THE AUTO LABEL COUNT. ; ..TAG \$DETL$,X .EMIT ;SET DECISION TABLE BIT PATTERN. ..TAG \$DETL$,Y .EMIT <.WORD> ;BITS SET DENOTE RULE TRUE. .EMIT ;SET 'ELSE' LOCATION. ..TAG \$DETL$,Z .EMIT <.WORD 0> ;BIT SET DENOTES ELSE RULE (16.). $ELSRL = 0 $ELSFL = 0 $TRCFL = -1 ;TRACE SET FLAG (USED IF D$TRACE DEFINED). ;-1 DENOTE CONDITION NOT DONE. ; .PSECT TBLSCT ..TAG \$DETL$,V ..LB10 TST,\$DETL$,Y .EMIT ..LB23 MOV,\$DETL$,Z,\$DETL$,Y .EMIT .IF EQ $TRACE ..TAG \$DETL$,W PTEXT <"DETAB 'LABEL - "> .EMIT .ENDC .PSECT ; .ENDM DETAB ; .MACRO C. AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA .NARG NUMARG .IF GT NUMARG-26. ;ERROR IF GREATER THAN 26 ARGUMENTS. .ERROR NUMARG ;EXCESS RULES .MEXIT .ENDC ; $LPCNT = 0 ;LOOP COUNT. $DELIM = 0 ;RULES DELIMITER. $EXENT = 0 ;EXTENDED ENTRY. $TRCFL = 0 ;TRACE FLAG = 0 DENOTED CONDITION DONE. $TRUE = 1 $FALSE = 0 $RLBIT = 1 $MSKBT = 0 ; .IRP CSYM, .IF NB CSYM $LPCNT = $LPCNT+1 .IF EQ $DELIM .IIF IDN CSYM,[ $DELIM = $LPCNT .IIF IDN CSYM,? $EXENT = $LPCNT .IFF .IF EQ $EXENT .IIF EQ $DELIM-2 ..CRLE CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,ELSE .IIF EQ $DELIM-3 ..CRLE DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,ELSE .IIF EQ $DELIM-4 ..CRLE EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,ELSE .IIF EQ $DELIM-5 ..CRLE FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,ELSE .IIF EQ $DELIM-6 ..CRLE GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,ELSE .IIF EQ $DELIM-7 ..CRLE HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,ELSE ..COND AA,BA,CA,DA,EA,FA ..ERLE .MEXIT .IFF .IF DIF CSYM,ELSE .IF NE $TRUE&100000 ..ERLE .MEXIT .ENDC .IF DIF CSYM,. .IF DIF CSYM,- .IIF EQ $EXENT-1 ..COND CSYM,BA,CA,DA,EA,FA .IIF EQ $EXENT-2 ..COND AA,CSYM,CA,DA,EA,FA .IIF EQ $EXENT-3 ..COND AA,BA,CSYM,DA,EA,FA .IIF EQ $EXENT-4 ..COND AA,BA,CA,CSYM,EA,FA .IIF EQ $EXENT-5 ..COND AA,BA,CA,DA,CSYM,FA .IIF EQ $EXENT-6 ..COND AA,BA,CA,DA,EA,CSYM .ENDC .ENDC .IFF ..ERLE .MEXIT .ENDC $RLBIT = $RLBIT*2 $MSKBT = $MSKBT*2+1 $TRUE = $TRUE*2 .ENDC .ENDC .IFF ..ERLE .MEXIT .ENDC .ENDM .ENDM C. ;END OF THE CONDITION MACRO. ; .MACRO ..CRLE AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA $MSKBT = 0 $RLBIT = 1 $TRUE = 0 $FALSE = 0 .IRP RSYM, .IF NB RSYM .IIF IDN RSYM,T $TRUE = $TRUE + $RLBIT .IIF IDN RSYM,F $FALSE = $FALSE + $RLBIT .IIF IDN RSYM,S $TRUE = $TRUE + $RLBIT .IIF IDN RSYM,E $FALSE = $FALSE + $RLBIT .IIF IDN RSYM,Y $TRUE = $TRUE + $RLBIT .IIF IDN RSYM,N $FALSE = $FALSE + $RLBIT .IF IDN RSYM,ELSE .MEXIT .ENDC $RLBIT = $RLBIT*2 $MSKBT = $MSKBT*2+1 .IFF .MEXIT .ENDC .ENDM .ENDM ..CRLE ; .MACRO ..COND AA,BA,CA,DA,EA,FA $R = -$R ; $TSTFL = 1 .IF EQ $DELIM-5 .IIF IDN AA,IF $TSTFL = 0 .IIF IDN AA,IFB $TSTFL = 0 .ENDC .IIF EQ $TSTFL-1 ..TEST ; .IF EQ $DELIM-2 .EMITL <; AA> AA .IFF .IF EQ $DELIM-3 .IF IDN AA,IF .EMIT .IFF .EMITL <; AA BA> AA BA .ENDC .IFF .IF EQ $DELIM-4 .EMITL <; AA BA CA> AA BA,CA .IFF .IF EQ $DELIM-5 .EMITL <; AA BA CA DA> AA BA,CA,DA .IFF .IF EQ $DELIM-6 .EMITL <; AA BA CA DA EA> AA BA,CA,DA,EA .IFF .IF EQ $DELIM-7 .EMITL <; AA BA CA DA EA FA> AA BA,CA,DA,EA,FA .IFF .ERROR ;TOO MANY CONDITION PARAMETERS. .MEXIT .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC .IIF EQ $TSTFL-1 IF RESULT IS SUCCESS ; ..LB22 BIC,#$TRUE,\$DETL$,Y .IF EQ $EXENT .IF NE $FALSE ELSE ..LB22 BIC,#$FALSE,\$DETL$,Y .ENDC .ENDC END .IIF EQ $TSTFL-1 ..TAG \$DETM$,J ; $R = -$R .ENDM ..COND ; .MACRO ..ERLE .IF EQ $ELSFL ..LB22 MOV,#$RLBIT,\$DETL$,Z ..LB22 BIC,#^C$MSKBT,\$DETL$,Y $ELSFL = 1 .IFTF ..LB10 CALL,\$DETL$,V .ENDC .ENDM ..ERLE ; .MACRO A. AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA .NARG NUMARG .IF GT NUMARG-26. ;ERROR IF TOO MANY RULES. .ERROR NUMARG ;EXCESS ACTION RULES. .MEXIT .ENDC .IF IDN AA,IF .ERROR ; 'IF' CANNOT BE USED IN AN ACTION. .MEXIT .ENDC ; .IF EQ $TRACE ;IF A TRACE PRINTOUT REQUIRED. .IF EQ $TRCFL ;HAS TRACE ALREADY BEEN DONE FOR THIS DETAB. ..LB10 CALL,\$DETL$,W ;PRINT THE DETAB NAME. .EMIT ..LB21 MOV,\$DETL$,<#Y>,R0 ;PUT THE CONDITIONS IN R0. .EMIT ;CALL THE TRACE PROCEDURE. $TRCFL = 1 ;SET THE TRACE FLAG. .EMIT ;UNSAVE THE REGISTER. .ENDC .ENDC ; $LPCNT = 0 ;LOOP COUNT. $DELIM = 0 ;RULES DELIMITER. $EXENT = 0 $TRUE = 1 ; .IRP ASYM, .IF NB ASYM $LPCNT = $LPCNT+1 .IF EQ $DELIM .IIF IDN ASYM,[ $DELIM = $LPCNT .IIF IDN ASYM,? $EXENT = $LPCNT .IFF .IF EQ $EXENT .IIF EQ $DELIM-2 ..ARLE CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA .IIF EQ $DELIM-3 ..ARLE DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA .IIF EQ $DELIM-4 ..ARLE EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA .IIF EQ $DELIM-5 ..ARLE FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA .IIF EQ $DELIM-6 ..ARLE GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA .IIF EQ $DELIM-7 ..ARLE HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA ..ACT AA,BA,CA,DA,EA,FA .MEXIT .IFF .IF DIF ASYM,. .IF DIF ASYM,- .IIF EQ $EXENT-1 ..ACT ASYM,BA,CA,DA,EA,FA .IIF EQ $EXENT-2 ..ACT AA,ASYM,CA,DA,EA,FA .IIF EQ $EXENT-3 ..ACT AA,BA,ASYM,DA,EA,FA .IIF EQ $EXENT-4 ..ACT AA,BA,CA,ASYM,EA,FA .IIF EQ $EXENT-5 ..ACT AA,BA,CA,DA,ASYM,FA .IIF EQ $EXENT-6 ..ACT AA,BA,CA,DA,EA,ASYM .ENDC .ENDC $TRUE = $TRUE*2 .ENDC .ENDC .IFF .MEXIT .ENDC .ENDM .ENDM A. ;END OF ACTION MACRO. ; .MACRO ..ARLE AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA $RLBIT = 1 $TRUE = 0 .IRP RSYM, .IF NB RSYM .IF IDN RSYM,X $TRUE = $TRUE + $RLBIT .ENDC $RLBIT = $RLBIT*2 .IFF .MEXIT .ENDC .ENDM .ENDM ..ARLE ; .MACRO ..ACT AA,BA,CA,DA,EA,FA ..TEST .IF EQ $DELIM-2 .IF IDN AA,REPEAT ..LB10 JMP,\$DETL$,X .IFF .EMITL <; AA> AA .ENDC .IFF .IF EQ $DELIM-3 .EMITL <; AA BA> AA BA .IFF .IF EQ $DELIM-4 .EMITL <; AA BA CA> AA BA,CA .IFF .IF EQ $DELIM-5 .EMITL <; AA BA CA DA> AA BA,CA,DA .IFF .IF EQ $DELIM-6 .EMITL <; AA BA CA DA EA> AA BA,CA,DA,EA .IFF .IF EQ $DELIM-7 .EMITL <; AA BA CA DA EA FA> AA BA,CA,DA,EA,FA .IFF .ERROR ;TOO MANY ACTION PARAMETERS. .ENDC .ENDC .ENDC .ENDC .ENDC .ENDC ..TAG \$DETM$,J .ENDM ..ACT ; ; .MACRO ..TEST $DETM$ = $DETM$+1 ..LB22 BIT,#$TRUE,\$DETL$,Y ..LB10 BEQ,\$DETM$,J .ENDM ..TEST ; ; .MACRO DETEND,COMMENT ..LB23 CMP,\$DETL$,Y,\$DETL$,Z ;TEST ACTION RULES. .IIF EQ LST$$ .LIST BEQ .+6. ;BRANCH IF TRUE EXIT. CLC ;SET SUCCESS. RETURN SEC ;SET ERROR. RETURN .IIF EQ LST$$ .NLIST .ENDM DETEND ; ; TRACING MACROS ; ************** ; .MACRO TRACE $TRACE = 0 .ENDM TRACE ; ; .MACRO NOTRACE $TRACE = 1 .ENDM NOTRACE ; ; AUTO LABEL GEN INSTRUCTIONS ; *************************** ; .MACRO ..LB10 ACT,TG,WH .EMIT .ENDM ..LB10 ; .MACRO ..LB21 ACT,TG,WH,DST .EMIT .ENDM ..LB21 ; .MACRO ..LB22 ACT,SRC,TG,WH .EMIT .ENDM ..LB22 ; .MACRO ..LB23 ACT,TG1,WH1,TG2,WH2 .EMIT .ENDM ..LN23 ; ; .END ; ;