;MAINDEC-10-DFKCA DECVER=002 MCNVER=000 XLIST DEFINE NAME (MCNVER,DECVER),< TITLE DFKCA KL10 ADVANCED INSTRUCTION DIAGNOSTIC #1, VERSION MCNVER,DECVER > LIST LALL NAME \MCNVER,\DECVER XALL ;COPYRIGHT 1975 ;DIGITAL EQUIPMENT CORPORATION ;MARLBORO, MASS. 01752 ;JOHN R. KIRCHOFF LOC 137 MCNVER,,DECVER NOSYM SUBTTL DIAGNOSTIC PARAMETERS ;OPERATOR DEFINITIONS OPDEF ER1 [1B8] OPDEF ER2 [2B8] OPDEF ER3 [3B8] OPDEF ER4 [4B8] OPDEF ER5 [5B8] OPDEF ER6 [6B8] OPDEF ER7 [7B8] OPDEF ER10 [10B8] OPDEF ER11 [11B8] OPDEF ER12 [12B8] OPDEF ER13 [13B8] LUUO1==ERRMES LUUO2==ERRMES LUUO3==ERRMES LUUO4==ERRMES LUUO5==ERRMES LUUO6==ERRMES LUUO7==ERRMES LUUO10==ERRMES LUUO11==ERRMES LUUO12==ERRMES LUUO13==ERRMES ;SUBROUTINE ASSEMBLY DEFINITIONS DEBUG=100 EXCASB=1 USRASB=1 KI10=1 KL10=1 KL10P0=1 PGMEND=1 ERDIAG=1 KLOLD=1 MODDVU=BEGIN MODDVL=BEGIN ;MACROS DEFINE SAVEAC (A,B)< MOVEI AC+2,. MOVEM AC+2,TESTPC ;SETUP SUBTEST PC MOVEI AC+2,&17 ;INFORM ERROR ROUTINE WHICH MOVEM AC+2,ERRLOP# ;AC IS USED FOR ITERATION> ;BEGIN ASSEMBLY PARAMETERS SADR1=BEGIN SADR2=RESRT1 SADR3=RENTR1 SADR4=BEGIN SADR5=BEGIN SADR6=BEGIN SADR7=HALT BEGIN SADR8=HALT BEGIN SADR9=HALT BEGIN SADR10=HALT BEGIN SADR11=HALT BEGIN PAREA1=0 PAREA2=0 PAREA3=SIXBIT/DFKCA/ PAREA4=SIXBIT/LPT/ PAREA5=0 PAREA6=0 ITERAT=1000 DEFINE DMVE (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVE INSTRUCTION ;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. ;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED ;FROM MEMORY TO AC, AC+1 VIA THE DMOVE INSTRUCTION. ;C(AC) AND C(AC+1) ARE THEN COMPARED WITH THE TEST WORDS ;[XWD A,B] AND [XWD C,D], RESPECTIVELY. THE TEST PASSES IF THESE ;COMPARISONS AGREE. Q'L'0: MOVE AC+5,[XWD A,B] ;INITIALIZE TEST WORDS MOVE AC+6,[XWD C,D] ;FOR COMPARISON MOVE AC,[XWD 707070,707070] MOVE AC+1,[XWD 070707,070707] ;INITIALIZE AC,AC+1 DMOVE AC,[XWD A,B ;*MOVE DOUBLE WORD A,B ; C,D XWD C,D] ;FROM MEMORY TO AC, AC+1 CAME AC,&17 ;WAS AC LOADED CORRECTLY? ER3 AC,L'1 ;FAIL IF CONTENTS(AC) NOT = A,B CAME AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? ER4 AC+1,L'2 ;FAIL IF CONTENTS(AC+1) NOT = C,D JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVE17 (L,T,A,B,C,D) < ;THIS MACRO TESTS THE DMOVE INSTRUCTION ;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. ;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED ;FROM MEMORY TO AC, AC+1 VIA THE DMOVE INSTRUCTION. ;C(AC) AND C(AC+1) ARE THEN COMPARED WITH THE TEST ;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'T'0: MOVEM AC,%SV17# ;SAVE AC17 Q'L'0: MOVE AC+5,[XWD A,B] ;INITIALIZE TEST WORDS MOVE AC+6,[XWD C,D] ;FOR COMPARISON MOVE AC,[XWD 707070,707070] MOVE AC+1,[XWD 070707,070707] ;INITIALIZE AC,AC+1 DMOVE AC,[XWD A,B ;*MOVE DOUBLE WORD A,B ; C,D XWD C,D] ;FROM MEMORY TO AC, AC+1 Q'T'3: CAMN AC,&17 ;WAS AC LOADED CORRECTLY? JRST .+4 ;HERE IF NO ERROR MOVEM AC,AC-1 ;STORE INCORRECT RESLUTS MOVE AC,%SV17 ;RESTORE P ER3 AC-1,L'1 ;FAIL IF CONTENTS(AC) NOT = A,B CAMN AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? JRST .+4 ;HERE IF NO ERROR MOVEM AC+1,AC-1 ;STORE INCORRECT WORD MOVE AC,%SV17 ;RESTORE P ER4 AC-1,L'2 MOVE AC,%SV17 ;RESTORE AC UNCONDITIONALLY JUMPL SAC,Q'T'0 ;LOOP ON ERROR SWITCH> DEFINE DMVN (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVN INSTRUCTION ;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. ;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY ;[XWD A,B] AND [XWD C,D] IS MOVED FROM MEMORY TO AC, AC+1 VIA ;THE DMOVN INSTRUCTION. C(AC) AND C(AC+1) ARE THEN COMPARED ;WITH THE NEGATIVE (TWOS COMPLEMENT) OF THE TEST ;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'L'0: DMOVE AC,[XWD 707070,707070 XWD 070707,070707] ;INITIALIZE AC,AC+1 SETCM AC+5,[XWD A,B] ;INITIALIZE TEST WORDS FOR COMPARISON IFIDN <0,0>,< SETZ AC+6, ADDI AC+5,1 > IFIDN <400000,0>,< SETZ AC+6, ADDI AC+5,1 > IFDIF <0,0>,< IFDIF <400000,0>,< MOVN AC+6,[XWD C,D] TLZ AC+6,1B18 ;CLEAR SIGN BIT OF LOW ORDER WORD >> DMOVN AC,[XWD A,B ;*MOVE NEGATIVE OF DOUBLE WORD A,B ; XWD C,D] ;C,D FROM MEMORY TO AC, AC+1 CAME AC,&17 ;WAS AC LOADED CORRECTLY? ER3 AC,L'1 ;FAIL IF CONTENTS(AC) NOT = COMPLEMENT OF A,B CAME AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? ER4 AC+1,L'2 ;FAIL IF CONTENTS(AC+1) NOT = MINUS C,D JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVN17 (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVN INSTRUCTION ;FIRST, AC, AC+1 ARE PRELOADED WITH DATA OTHER THAN THE TEST WORDS. ;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY ;[XWD A,B] AND [XWD C,D] IS MOVED FROM MEMORY TO AC, AC+1 VIA ;THE DMOVN INSTRUCTION. C(AC) AND C(AC+1) ARE THEN COMPARED ;WITH THE NEGATIVE (TWOS COMPLEMENT) OF THE TEST ;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'L'0: MOVEM AC,%SV17 ;SAVE P DMOVE AC,[XWD 707070,707070 XWD 070707,070707] ;INITIALIZE AC,AC+1 SETCM AC+5,[XWD A,B] ;INITIALIZE TEST WORDS FOR COMPARISON IFIDN <0,0>,< SETZ AC+6, ADDI AC+5,1 > IFIDN <400000,0>,< SETZ AC+6, ADDI AC+5,1 > IFDIF <0,0>,< IFDIF <400000,0>,< MOVN AC+6,[XWD C,D] TLZ AC+6,1B18 ;CLEAR SIGN BIT OF LOW ORDER WORD >> DMOVN AC,[XWD A,B ;*MOVE NEGATIVE OF DOUBLE WORD A,B ; XWD C,D] ;C,D FROM MEMORY TO AC, AC+1 CAMN AC,&17 ;WAS AC LOADED CORRECTLY? JRST .+4 ;HERE IF TESTS OK MOVEM AC,AC-1 ;SAVE BAD WORD MOVE AC,%SV17 ;RESTORE P ER3 AC-1,L'1 ;FAIL IF CONTENTS(AC) NOT = COMPLEMENT OF A,B CAMN AC+1,&17 ;WAS AC+1 LOADED CORRECTLY? JRST .+4 ;HERE IF TESTS OK MOVEM AC,AC-1 MOVE AC,%SV17 ;RESTORE P ER4 AC+1,L'2 ;FAIL IF CONTENTS(AC+1) NOT = MINUS C,D MOVE AC,%SV17 ;RESTORE P UNCODITIONALLY JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVNF (L,A,B,C,D,KIEF,KIUF,KLEF,KLUF) < ;**KI10** ;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES NOT SET OVERFLOW ;OR CARRY FLAGS ON THE KI10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; ;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. ;IF ANY OF THESE FLAGS ARE SET, THE TEST FAILS. ;**KL10** ;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES SET OVERFLOW ;OR CARRY FLAGS ON THE KL10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; ;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. ;IF THE PROPER FLAGS ARE NOT SET, THE TEST FAILS. Q'L'0: JFCL 17,.+1 ;CLEAR OVFL AND CRY0,1 FLAGS DMOVN AC+1,[XWD A,B ;*DMOVN TEST XWD C,D] JSP AC,.+1 ;READ FLAGS Q'L'1: TLZ AC,027777 ;CLEAR EXTRA JUNK TLNE AC,USERF ;IN USER MODE ? JRST Q'L'4 ;YES SKIPE KLFLG ;KL10 ? JRST Q'L'3 ;YES ;KI10 EXEC MODE CAME AC,[KIEF,,Q'L'1] ER13 AC,L'1 ;FAIL IF OVFL OR CRY0,1 FLG SET Q'L'2: JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH JRST Q'L'6 ;KL10 EXEC MODE Q'L'3: CAME AC,[KLEF,,Q'L'1] ER13 AC,L'1 ;FAIL IF FLAGS NOT SET JRST Q'L'2 ;KL10/KI10 USER MODE Q'L'4: SKIPE KLFLG ;KL10 ? JRST Q'L'5 ;YES ;KI10 USER MODE CAME AC,[KIUF,,Q'L'1] ER13 AC,L'1 ;FAIL IF ANY FLAGS SET JRST Q'L'2 ;KL10 USER MODE Q'L'5: CAME AC,[KLUF,,Q'L'1] ER13 AC,L'1 ;FAIL IF FLAGS NOT SET JRST Q'L'2 Q'L'6: JRST .+1> DEFINE DMVM (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVEM INSTRUCTION ;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE ;TEST WORDS AND AC,AC+1 ARE LOADED WITH THE TEST WORDS. ;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED ;FROM AC, AC+1 TO MEMORY (TSTWD, TSTWD+1) VIA ;THE DMOVEM INSTRUCTION. C(TSTWD) AND C(TSTWD+1) ARE THEN ;COMPARED WITH THE TEST WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'L'0: DMOVE AC,[XWD 707070,707070 XWD 070707,070707] ;INITIALIZE TEST WORDS MOVEM AC,TSTWD ;TSTWD, TSTWD+1 ARE IN MEMORY JUST MOVEM AC+1,TSTWD+1 ;AFTER THE FINAL TEST OF THIS PROGRAM DMOVE AC,[XWD A,B XWD C,D] ;INITIALIZE AC,AC+1 DMOVEM AC,TSTWD ;*MOVE DOUBLE WORD FROM AC, AC+1 ;TO MEMORY (TSTWD, TSTWD+1) DMOVE AC,TSTWD ;PUT RESULTS OF TEST IN AC,AC+1 FOR COMPARISON CAME AC,[XWD A,B] ;WAS TSTWD LOADED CORRECTLY? ER5 AC,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = A,B CAME AC+1,[XWD C,D] ;WAS TSTWD+1 LOADED CORRECTLY? ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD+1) NOT = C,D JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVNM (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVNM INSTRUCTION ;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE ;TEST WORDS AND AC, AC+1 ARE LOADED WITH THE TEST WORDS. ;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY ;[XWD A,B] AND [XWD C,D] IS MOVED FROM AC, AC+1 TO MEMORY ;(TSTWD, TSTWD+1) VIA THE DMOVNM INSTRUCTION. ;C(TSTWD) AND C(TSTWD+1) ARE THEN COMPARED WITH THE ;NEGATIVE (TWOS COMPLEMENT) OF THE TEST ;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'L'0: DMOVE AC,[XWD 707070,707070 XWD 070707,070707] DMOVEM AC,TSTWD ;INITIALIZE TEST WORDS DMOVE AC,[XWD A,B XWD C,D] ;INITIALIZE AC,AC+1 DMOVN AC+5,[XWD A,B XWD C,D] ;SET-UP TO CHECK RESULTS DMOVNM AC,TSTWD ;*MOVE NEGATIVE OF DOUBLE WORD FROM AC, AC+1 ;TO MEMORY (TSTWD, TSTWD+1) DMOVE AC,TSTWD ;PUT TEST RESULTS IN AC,AC+1 CAME AC,&17 ;WAS TSTWD LOADED CORRECTLY? ER5 AC,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = COMPLEMENT OF A,B CAME AC+1,&17 ;WAS TSTWD+1 LOADED CORRECTLY? ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD) NOT = MINUS C,D JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVM17 (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVEM INSTRUCTION ;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE ;TEST WORDS AND AC,AC+1 ARE LOADED WITH THE TEST WORDS. ;THEN, THE DATA SPECIFIED BY [XWD A,B] AND [XWD C,D] IS MOVED ;FROM AC, AC+1 TO MEMORY (TSTWD, TSTWD+1) VIA THE DMOVEM INSTRUCTION. ;C(TSTWD) AND C(TSTWD+1) ARE THEN COMPARED WITH THE TEST ;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'L'0: MOVEM AC,%SV17 ;SAVE AC17 CAUSE IT HAS PDP DMOVE AC,[XWD 707070,707070 XWD 070707,070707] ;INITIALIZE TEST WORDS MOVEM AC,TSTWD ;TSTWD, TSTWD+1 ARE IN MEMORY JUST MOVEM AC+1,TSTWD+1 ;AFTER THE FINAL TEST OF THIS PROGRAM DMOVE AC,[XWD A,B XWD C,D] ;INITIALIZE AC,AC+1 DMOVEM AC,TSTWD ;*MOVE DOUBLE WORD FROM AC, AC+1 ;TO MEMORY (TSTWD, TSTWD+1) DMOVE AC,TSTWD ;PUT RESULTS OF TEST IN AC,AC+1 FOR COMPARISON CAMN AC,[XWD A,B] ;WAS TSTWD LOADED CORRECTLY? JRST .+4 ;HERE IF TESTS OK MOVEM AC,AC-1 ;SAVE BAD WORD MOVE AC,%SV17 ;RESTORE P ER5 AC-1,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = A,B CAMN AC+1,[XWD C,D] ;WAS TSTWD+1 LOADED CORRECTLY? JRST .+4 ;HERE IF TESTS OK MOVEM AC,AC-1 ;SAVE BAD WORD MOVE AC,%SV17 ;RESTORE P ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD+1) NOT = C,D MOVE AC,%SV17 ;RESTORE AC UNCONDITIONALLY JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVNM17 (L,A,B,C,D) < ;THIS MACRO TESTS THE DMOVNM INSTRUCTION ;FIRST, TSTWD, TSTWD+1 ARE PRELOADED WITH DATA OTHER THAN THE ;TEST WORDS AND AC, AC+1 ARE LOADED WITH THE TEST WORDS. ;THEN, THE NEGATIVE (TWOS COMPLEMENT) OF THE DATA SPECIFIED BY ;[XWD A,B] AND [XWD C,D] IS MOVED FROM AC, AC+1 TO MEMORY ;(TSTWD, TSTWD+1) VIA THE DMOVNM INSTRUCTION. ;C(TSTWD) AND C(TSTWD+1) ARE THEN COMPARED WITH THE ;NEGATIVE (TWOS COMPLEMENT) OF THE TEST ;WORDS [XWD A,B] AND [XWD C,D], RESPECTIVELY. ;THE TEST PASSES IF THESE COMPARISONS AGREE. Q'L'0: DMOVE AC,[XWD 707070,707070 XWD 070707,070707] DMOVEM AC,TSTWD ;INITIALIZE TEST WORDS DMOVE AC,[XWD A,B XWD C,D] ;INITIALIZE AC,AC+1 DMOVN AC+5,[XWD A,B XWD C,D] ;SET-UP TO CHECK RESULTS DMOVNM AC,TSTWD ;*MOVE NEGATIVE OF DOUBLE WORD FROM AC, AC+1 ;TO MEMORY (TSTWD, TSTWD+1) DMOVE AC,TSTWD ;PUT TEST RESULTS IN AC,AC+1 CAMN AC,&17 ;WAS TSTWD LOADED CORRECTLY? JRST .+4 MOVEM AC,AC-1 ;SAVE BAD WORD MOVE AC,%SV17 ;RESTORE P ER5 AC-1,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = COMPLEMENT OF A,B CAMN AC+1,&17 ;WAS TSTWD+1 LOADED CORRECTLY? JRST .+4 ;HERE IF TESTS OK MOVEM AC,AC-1 ;SAVE BAD WORD MOVE AC,%SV17 ER6 AC+1,L'2 ;FAIL IF CONTENTS(TSTWD) NOT = MINUS C,D MOVE AC,%SV17 JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH> DEFINE DMVNMF (L,A,B,C,D,KIEF,KIUF,KLEF,KLUF) < ;**KI10** ;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES NOT SET OVERFLOW ;OR CARRY FLAGS ON THE KI10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; ;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. ;IF ANY OF THESE FLAGS ARE SET, THE TEST FAILS. ;**KL10** ;THIS MACRO VERIFIES THAT THE DMOVN INSTRUCTION DOES SET OVERFLOW ;OR CARRY FLAGS ON THE KL10. FIRST, OVFL AND CRY0,1 FLAGS ARE CLEARED; ;THEN,DMOVN IS EXECUTED. NEXT, OVFL AND CRY0,1 FLAGS ARE EXAMINED. ;IF THE PROPER FLAGS ARE NOT SET, THE TEST FAILS. Q'L'0: JFCL 17,.+1 ;CLEAR OVFL AND CRY0,1 FLAGS DMOVE AC,[XWD A,B XWD C,D] ;SETUP INITIAL DMOVNM AC,TSTWD ;*DMOVNM TEST JSP AC,.+1 ;READ FLAGS Q'L'1: TLZ AC,027777 ;CLEAR EXTRA JUNK TLNE AC,USERF ;IN USER MODE ? JRST Q'L'4 ;YES SKIPE KLFLG ;KL10 ? JRST Q'L'3 ;YES ;KI10 EXEC MODE CAME AC,[KIEF,,Q'L'1] ER13 AC,L'1 ;FAIL IF OVFL OR CRY0,1 FLG SET Q'L'2: JUMPL SAC,Q'L'0 ;LOOP ON ERROR SWITCH JRST Q'L'6 ;KL10 EXEC MODE Q'L'3: CAME AC,[KLEF,,Q'L'1] ER13 AC,L'1 ;FAIL IF FLAGS NOT SET JRST Q'L'2 ;KL10/KI10 USER MODE Q'L'4: SKIPE KLFLG ;KL10 ? JRST Q'L'5 ;YES ;KI10 USER MODE CAME AC,[KIUF,,Q'L'1] ER13 AC,L'1 ;FAIL IF ANY FLAGS SET JRST Q'L'2 ;KL10 USER MODE Q'L'5: CAME AC,[KLUF,,Q'L'1] ER13 AC,L'1 ;FAIL IF FLAGS NOT SET JRST Q'L'2 Q'L'6: JRST .+1> DEFINE DFA (T,A,B,C,D,E,F,G,H,I,M,K,L) < R'T'00: DMOVE AC,[A,,B C,,D] DFAD AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> DEFINE DFS (T,A,B,C,D,E,F,G,H,I,M,K,L) < R'T'00: DMOVE AC,[A,,B C,,D] DFSB AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> DEFINE DFM (T,A,B,C,D,E,F,G,H,I,M,K,L) < R'T'00: DMOVE AC,[A,,B C,,D] DFMP AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> DEFINE DFD (T,A,B,C,D,E,F,G,H,I,M,K,L) < R'T'00: DMOVE AC,[A,,B C,,D] DFDV AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,R'T'00 ;LOOP ON ERROR SWITCH> DEFINE DFARP (T,A,B,C,D,E,F,G,H,I,M,K,L) < DMOVE AC,[A,,B C,,D] DFAD AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T CAME AC+1,[K,,L] ER4 AC+1,T JUMPL AC+4,.-^D6 ;LOOP ON ERROR SWITCH> DEFINE SDFA (T,A,B,C,D,E,F,G,H,I,M,K,L) < S'T'00: DMOVE AC,[A,,B C,,D] DFAD AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> DEFINE SDFS (T,A,B,C,D,E,F,G,H,I,M,K,L) < S'T'00: DMOVE AC,[A,,B C,,D] DFSB AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> DEFINE SDFM (T,A,B,C,D,E,F,G,H,I,M,K,L) < S'T'00: DMOVE AC,[A,,B C,,D] DFMP AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> DEFINE SDFMKL (T,A,B,C,D,E,F,G,H,I,M,K,L,KL1,KL2,KL3,KL4) < S'T'00: DMOVE AC,[A,,B C,,D] DFMP AC,[E,,F G,,H] SKIPE KLFLG JRST S'T'05 CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 S'T'06: JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH JRST S'T'07 S'T'05: CAME AC,[KL1,,KL2] ER3 AC,T'01 CAME AC+1,[KL3,,KL4] ER4 AC+1,T'01 JRST S'T'06 S'T'07: JRST .+1 > DEFINE SDFD (T,A,B,C,D,E,F,G,H,I,M,K,L) < S'T'00: DMOVE AC,[A,,B C,,D] DFDV AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH> DEFINE SDFDKL (T,A,B,C,D,E,F,G,H,I,M,K,L,KL1,KL2,KL3,KL4) < S'T'00: DMOVE AC,[A,,B C,,D] DFDV AC,[E,,F G,,H] SKIPE KLFLG JRST S'T'05 CAME AC,[I,,M] ER3 AC,T'01 CAME AC+1,[K,,L] ER4 AC+1,T'01 S'T'06: JUMPL AC+4,S'T'00 ;LOOP ON ERROR SWITCH JRST S'T'07 S'T'05: CAME AC,[KL1,,KL2] ER3 AC,T'01 CAME AC+1,[KL3,,KL4] ER4 AC+1,T'01 JRST S'T'06 S'T'07: JRST .+1 > DEFINE SDFARP (T,A,B,C,D,E,F,G,H,I,M,K,L) < DMOVE AC,[A,,B C,,D] DFAD AC,[E,,F G,,H] CAME AC,[I,,M] ER3 AC,T CAME AC+1,[K,,L] ER4 AC+1,T JUMPL AC+4,.-^D6 ;LOOP ON ERROR SWITCH>