More MACRO-10 updates (eg, LOC pseudo-op, SIXBIT/ASCII expression support)
This commit is contained in:
parent
15417ca686
commit
0c9f752f86
24 changed files with 40332 additions and 87 deletions
571
apps/pdp10/diags/klad/DFKCAT.MAC.txt
Normal file
571
apps/pdp10/diags/klad/DFKCAT.MAC.txt
Normal file
|
|
@ -0,0 +1,571 @@
|
||||||
|
;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,<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,<AC+5>&17 ;WAS AC LOADED CORRECTLY?
|
||||||
|
ER3 AC,L'1 ;FAIL IF CONTENTS(AC) NOT = A,B
|
||||||
|
CAME AC+1,<AC+6>&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,<AC+5>&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,<AC+6>&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 <C,D><0,0>,<
|
||||||
|
SETZ AC+6,
|
||||||
|
ADDI AC+5,1 >
|
||||||
|
IFIDN <C,D><400000,0>,<
|
||||||
|
SETZ AC+6,
|
||||||
|
ADDI AC+5,1 >
|
||||||
|
IFDIF <C,D><0,0>,<
|
||||||
|
IFDIF <C,D><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,<AC+5>&17 ;WAS AC LOADED CORRECTLY?
|
||||||
|
ER3 AC,L'1 ;FAIL IF CONTENTS(AC) NOT = COMPLEMENT OF A,B
|
||||||
|
CAME AC+1,<AC+6>&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 <C,D><0,0>,<
|
||||||
|
SETZ AC+6,
|
||||||
|
ADDI AC+5,1 >
|
||||||
|
IFIDN <C,D><400000,0>,<
|
||||||
|
SETZ AC+6,
|
||||||
|
ADDI AC+5,1 >
|
||||||
|
IFDIF <C,D><0,0>,<
|
||||||
|
IFDIF <C,D><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,<AC+5>&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,<AC+6>&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,<AC+5>&17 ;WAS TSTWD LOADED CORRECTLY?
|
||||||
|
ER5 AC,L'1 ;FAIL IF CONTENTS(TSTWD) NOT = COMPLEMENT OF A,B
|
||||||
|
CAME AC+1,<AC+6>&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,<AC+5>&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,<AC+6>&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>
|
||||||
6773
apps/pdp10/diags/klad/KLDDT.MAC.txt
Normal file
6773
apps/pdp10/diags/klad/KLDDT.MAC.txt
Normal file
File diff suppressed because it is too large
Load diff
1086
apps/pdp10/diags/klad/PARAM.KLM.txt
Normal file
1086
apps/pdp10/diags/klad/PARAM.KLM.txt
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -11,8 +11,73 @@ PCjs has archived selected files from
|
||||||
[PDP-10 KLAD Diagnostics Sources](http://pdp-10.trailing-edge.com/klad_sources/index.html), including:
|
[PDP-10 KLAD Diagnostics Sources](http://pdp-10.trailing-edge.com/klad_sources/index.html), including:
|
||||||
|
|
||||||
- [KA10 Basic Instruction Diagnostic #1 (MAINDEC-10-DAKAA)](dakaa/)
|
- [KA10 Basic Instruction Diagnostic #1 (MAINDEC-10-DAKAA)](dakaa/)
|
||||||
|
- TEST OF JUMP, JUMPA AND SKIPX INSTRUCTIONS
|
||||||
|
- TEST OF MOVE, SKIP AND COMPARE INSTRUCTIONS
|
||||||
|
- TEST OF SKIP, FULL WORD TRANSFER AND HALF WORD TRANSFER INSTRUCTIONS
|
||||||
|
- TEST OF BOOLEAN INSTRUCTIONS (SETM, SETZ, AND, XOR, EQV)
|
||||||
- [KA10 Basic Instruction Diagnostic #2 (MAINDEC-10-DAKAB)](dakab/)
|
- [KA10 Basic Instruction Diagnostic #2 (MAINDEC-10-DAKAB)](dakab/)
|
||||||
|
- TEST OF THE ADD INSTRUCTION
|
||||||
|
- SPECIAL KI10 FOUR BIT ADDER TEST
|
||||||
|
- TEST OF SUB AND COMPARE INSTRUCTIONS
|
||||||
|
- TEST OF COMPARE (CAMX) INSTRUCTIONS
|
||||||
|
- TEST OF MOVS INSTRUCTION
|
||||||
|
- TEST OF COMPARE (CAXX) INSTRUCTIONS
|
||||||
|
- TEST OF BOOLEAN INSTRUCTIONS
|
||||||
|
- TEST OF MOVN INSTRUCTION
|
||||||
|
- TEST OF MOVM INSTRUCTION
|
||||||
- [KA10 Basic Instruction Diagnostic #3 (MAINDEC-10-DAKAC)](dakac/)
|
- [KA10 Basic Instruction Diagnostic #3 (MAINDEC-10-DAKAC)](dakac/)
|
||||||
|
- TEST OF LOGICAL TEST INSTRUCTIONS
|
||||||
|
- TEST OF HWT INSTRUCTIONS
|
||||||
|
- SUPPLEMENTARY ADDER TESTS - FLT 1 + 0
|
||||||
|
- SUPPLEMENTARY ADDER TESTS - O + FLT 0
|
||||||
|
- SUPPLEMENTARY ADDER TESTS - FLT 1 + FLT 1
|
||||||
|
- SUPPLEMENTARY ADDER TESTS - FLT 0 + 0FLT
|
||||||
- [KA10 Basic Instruction Diagnostic #4 (MAINDEC-10-DAKAD)](dakad/)
|
- [KA10 Basic Instruction Diagnostic #4 (MAINDEC-10-DAKAD)](dakad/)
|
||||||
|
- TEST OF AC HARDWARE AND INDEX REGISTERS
|
||||||
|
- TEST OF INDEX REGISTER ADDRESSING
|
||||||
|
- TEST OF EXCH INSTRUCTION
|
||||||
|
- TEST OF MOVEM INSTRUCTION
|
||||||
|
- TEST OF JFCL INSTRUCTION AND ARITHMETIC FLAGS
|
||||||
|
- TEST OF JRST INSTRUCTION AND ARITHMETIC FLAGS
|
||||||
|
- TEST OF JSP INSTRUCTION
|
||||||
|
- TEST JRST INSTRUCTION
|
||||||
|
- TEST OF AOBJX INSTRUCTIONS
|
||||||
|
- TEST SETTING OF ARITHMETIC FLAGS VIA MOVNX AND MOVMX
|
||||||
|
- TEST OF AOS AND SOS INSTRUCTIONS
|
||||||
|
- TEST OF INTERACTION OF JFCL, JRST, AND JSP WITH ARITHMETIC FLAGS
|
||||||
|
- TEST OF JUMPX INSTRUCTIONS
|
||||||
|
- TEST OF AOJ AND SOJ INSTRUCTIONS
|
||||||
|
- TEST OF MEMORY, BOTH AND SELF MODE INSTRUCTIONS
|
||||||
|
- XCT INSTRUCTION - BASIC TESTS
|
||||||
|
- INDIRECT ADDRESSING - BASIC TESTS
|
||||||
|
- TEST INDIRECT ADDRESSING WITH INDEXING
|
||||||
- [KA10 Basic Instruction Diagnostic #5 (MAINDEC-10-DAKAE)](dakae/)
|
- [KA10 Basic Instruction Diagnostic #5 (MAINDEC-10-DAKAE)](dakae/)
|
||||||
|
- TEST OF JSR INSTRUCTION
|
||||||
|
- TEST OF JSA INSTRUCTION
|
||||||
|
- TEST OF JRA INSTRUCTION
|
||||||
|
- TESTS OF BIS FLAG
|
||||||
|
- TEST OF MSCL FWT INSTRUCTIONS
|
||||||
|
- TEST OF MSCL ADD/SUB INSTRUCTIONS
|
||||||
|
- TEST OF MSCL CAIX INSTRUCTIONS
|
||||||
|
- TEST OF MSCL CAMX INSTRUCTIONS
|
||||||
|
- TEST OF MSCL JUMPX INSTRUCTIONS
|
||||||
|
- TEST OF MSCL AOJX INSTRUCTIONS
|
||||||
|
- TEST OF MSCL AOSX INSTRUCTIONS
|
||||||
|
- TEST OF MSCL SOJX INSTRUCTIONS
|
||||||
|
- TEST OF MSCL SOSX INSTRUCTIONS
|
||||||
- [KA10 Basic Instruction Diagnostic #6 (MAINDEC-10-DAKAF)](dakaf/)
|
- [KA10 Basic Instruction Diagnostic #6 (MAINDEC-10-DAKAF)](dakaf/)
|
||||||
|
- TEST OF MSCL BOOLEAN INSTRUCTIONS
|
||||||
|
- TEST OF MSCL HWT INSTRUCTIONS
|
||||||
|
- TEST OF MSCL LOGICAL TEST INSTRUCTIONS
|
||||||
|
- [KA10 Basic Instruction Diagnostic #7 (MAINDEC-10-DAKAG)](dakag/)
|
||||||
|
- TEST OF PUSH INSTRUCTION
|
||||||
|
- TEST OF PUSHJ INSTRUCTION
|
||||||
|
- TEST OF POP INSTRUCTION
|
||||||
|
- TEST OF POPJ INSTRUCTION
|
||||||
|
- XCT INSTRUCTION - ADDITIONAL TESTS
|
||||||
|
- TEST XCT INSTRUCTION WITH INDIRECT ADDRESSING AND INDEXING
|
||||||
|
- TEST OF SHIFT/ROTATE INSTRUCTIONS USED IN THE ERROR HANDLER
|
||||||
|
- [KA10 Basic Instruction Diagnostic #8 (MAINDEC-10-DAKAH)](dakah/)
|
||||||
|
- TESTS OF PI, INTERRUPTS, LUUO'S, I/O
|
||||||
|
- [KA10 Basic Instruction Diagnostic #9 (MAINDEC-10-DAKAI)](dakai/)
|
||||||
|
- SHIFT-ROTATE TEST (PART 1)
|
||||||
|
|
|
||||||
289
apps/pdp10/diags/klad/UUOERR.KLM.txt
Normal file
289
apps/pdp10/diags/klad/UUOERR.KLM.txt
Normal file
|
|
@ -0,0 +1,289 @@
|
||||||
|
SUBTTL *UUOERR* OLD-UUO ERROR HANDLER SUBROUTINE, V75B, APR 22,1975
|
||||||
|
|
||||||
|
;THIS SUBROUTINE PROVIDES ERROR REPORTING THRU THE USE OF UUO'S.
|
||||||
|
|
||||||
|
ERRMES: MOVEM 0,%ERAC0# ;SAVE AC0
|
||||||
|
IFDEF EXCASB,<IFDEF KI10,<
|
||||||
|
SKIPN KAIFLG
|
||||||
|
JRST .+5
|
||||||
|
SKIPE USER ;USER MODE ?
|
||||||
|
JRST .+3
|
||||||
|
SKIPE MARGIN
|
||||||
|
DATAO APR,[IMGNOF,,ISPDOF] ;CLR MARGINS >>
|
||||||
|
MOVEM 1,%ERAC1# ;SAVE AC1
|
||||||
|
MOVEM 2,%ERAC2# ;SAVE AC2
|
||||||
|
AOS ERRTLS ;INCREMENT ERROR TOTALS
|
||||||
|
HRRZ 0,$SVUPC ;GET PC OF UUO
|
||||||
|
CAMN 0,ERRPC ;PC = PC OF LAST ERROR ?
|
||||||
|
AOS MICNT# ;YES, ADD 1 TO ERROR COUNT
|
||||||
|
MOVE 0,MICNT
|
||||||
|
HRL 0,$SVUPC
|
||||||
|
SKIPN KLFLG ;NOT KL10
|
||||||
|
SKIPE USER ;AND NOT USER?
|
||||||
|
JRST .+2
|
||||||
|
DATAO PI,0 ;YES, DISPLAY ERROR PC,ERROR COUNT
|
||||||
|
SETZM PROCED# ;CLEAR PROCEED FLAG
|
||||||
|
SWITCH
|
||||||
|
TLNE NOPNT ;PRINTOUT ?
|
||||||
|
JRST %ERRS1 ;NO, RESTORE AC'S AND RETURN
|
||||||
|
MOVE 1,$SVUUO
|
||||||
|
LSH 1,-^D27
|
||||||
|
MOVEM 1,%ACS1A# ;SAVE UUO NUMBER
|
||||||
|
MOVE 0,%ERAC0
|
||||||
|
MOVE 1,%ERAC1
|
||||||
|
SKIPGE @ERRLOP ;ERR LOOP AC > OR = 0 ?
|
||||||
|
JRST %ERRS4 ;NO, SEE IF PRINT ALL
|
||||||
|
%ERMS1: SETZM MICNT ;CLEAR ERROR COUNT
|
||||||
|
SKIPL MONCTL ;DIAG MON OR SYS EXER ?
|
||||||
|
JRST .+4 ;NO, DON'T NEED TITLE
|
||||||
|
SKIPN %ERFST# ;FIRST ERROR ?
|
||||||
|
PNTNM ;YES, PRINT PROGRAM TITLE
|
||||||
|
SETOM %ERFST
|
||||||
|
SKIPN PASCNT ;FIRST PASS ?
|
||||||
|
JRST .+4 ;YES
|
||||||
|
PMSG <^TEST PASS COUNT = >
|
||||||
|
MOVE PASCNT
|
||||||
|
PNTDEC
|
||||||
|
PMSG <^PC = >
|
||||||
|
HRRZ 0,$SVUPC ;GET PC OF UUO
|
||||||
|
MOVEM 0,ERRPC ;SAVE FOR COMPARE
|
||||||
|
PNT6 ;PRINT UUO ADDRESS
|
||||||
|
XLIST
|
||||||
|
IFDEF ERDIAG,<LIST
|
||||||
|
;DIAGNOSTIC FORMAT ERROR PRINTER
|
||||||
|
|
||||||
|
;PRINT RESULT
|
||||||
|
|
||||||
|
%ERMS2: PMSG <^RESULT = >
|
||||||
|
MOVE 1,$SVUUO ;GET AC # OF UUO
|
||||||
|
LSH 1,-27
|
||||||
|
ANDI 1,17
|
||||||
|
MOVE 0,(1) ;GET C(AC)
|
||||||
|
CAIG 1,1 ;IS AC # = TO SAVE AC ?
|
||||||
|
MOVE 0,%ERAC0(1) ;YES, GET SAVED AC
|
||||||
|
PNTHW ;PRINT C(AC)
|
||||||
|
|
||||||
|
MOVE CONSW
|
||||||
|
TLNE TXTINH ;PRINT FAILURE DES AND FLT NBR ?
|
||||||
|
JRST %ERMORE ;NO, RESTORE AC'S ETC.
|
||||||
|
|
||||||
|
;PRINT FAILURE DESCRIPTOR
|
||||||
|
|
||||||
|
MOVE 1,%ACS1A ;GET UUO NUMBER
|
||||||
|
CAIG 1,1 ;PRINT DESCRIPTOR ?
|
||||||
|
JRST %ERMS3 ;NO, JUST PRINT FAULT NUMBER
|
||||||
|
PCRL
|
||||||
|
MOVE %FLTTB(1)
|
||||||
|
PNTAL ;PRINT FAULT DESCRIPTOR
|
||||||
|
|
||||||
|
;PRINT FAULT NUMBER
|
||||||
|
|
||||||
|
%ERMS3: PMSG <^FAULT NUMBER = >
|
||||||
|
MOVEI TLET
|
||||||
|
PNTA ;PRINT TEST LETTER
|
||||||
|
|
||||||
|
HRRZ $SVUUO
|
||||||
|
TRNE 700000
|
||||||
|
JRST %ER6X
|
||||||
|
TRNE 070000
|
||||||
|
JRST %ER5X
|
||||||
|
TRNE 007000
|
||||||
|
JRST %ER4X
|
||||||
|
PNT3 ;PRINT FAULT NUMBER
|
||||||
|
%ER7X: PCRL
|
||||||
|
JRST %ERMORE
|
||||||
|
|
||||||
|
%ER4X: PNT4
|
||||||
|
JRST %ER7X
|
||||||
|
%ER5X: PNT5
|
||||||
|
JRST %ER7X
|
||||||
|
%ER6X: PNT6
|
||||||
|
JRST %ER7X
|
||||||
|
|
||||||
|
;FAILURE DESCRIPTORS
|
||||||
|
|
||||||
|
TLET: 0 ;TEST LETTER
|
||||||
|
%FLTTB: 0 ;DESCRIPTOR TABLE
|
||||||
|
%NODES: [0] ;NO DESCRIPTOR
|
||||||
|
SPDES: [0] ;SPECIAL USER FAILURE DESCRIPTOR
|
||||||
|
$ACF: [ASCIZ/C(AC) FAILED/]
|
||||||
|
%AC1F: [ASCIZ/C(AC+1) FAILED/]
|
||||||
|
%EF: [ASCIZ/C(E) FAILED/]
|
||||||
|
%E1F: [ASCIZ/C(E+1) FAILED/]
|
||||||
|
%ARF: [ASCIZ/C(C(ACR)) FAILED/]
|
||||||
|
%AR1F: [ASCIZ/C(C(ACR+1)) FAILED/]
|
||||||
|
%ALF: [ASCIZ/C(C(ACL)) FAILED/]
|
||||||
|
%EEF: [ASCIZ/C(C(E)) FAILED/]
|
||||||
|
%FF: [ASCIZ/FLAG FAILED/]
|
||||||
|
>
|
||||||
|
XLIST
|
||||||
|
IFDEF ERRELB,<
|
||||||
|
LIST
|
||||||
|
;RELIABILITY FORMAT ERROR PRINTER
|
||||||
|
|
||||||
|
%ERMS2: SETZM %RAND# ;CLEAR PNT C(RAN) FLAG
|
||||||
|
MOVE 1,%ACS1A
|
||||||
|
CAIL 1,11 ;UUO # 11-13
|
||||||
|
SETOM %RAND ;YES, SET PNT C(RAN) FLAG
|
||||||
|
TRZ 1,10 ;MAKE UUO # 1-7
|
||||||
|
MOVEM 1,%ACS1A
|
||||||
|
MOVE 2,ERRPC ;GET UUO ADDRESS
|
||||||
|
MOVE 2,-1(2) ;GET INST IN UUO-1
|
||||||
|
CAIL 1,4 ;UUO # < THAN 4 ?
|
||||||
|
MOVE 2,$SVUUO ;YES, GET UUO
|
||||||
|
MOVEM 2,%CNTE# ;SAVE E ADDRESS
|
||||||
|
MOVE 2,%ERAC2
|
||||||
|
MOVE 1,%ERAC1
|
||||||
|
MOVE 0,%ERAC0
|
||||||
|
MOVEI 1,@%CNTE ;GET ADRS FIELD OF UUO OR UUO-1
|
||||||
|
MOVEM 1,%EE1#
|
||||||
|
MOVE 1,%ERAC1
|
||||||
|
MOVE 1,@%EE1 ;GET C(E)
|
||||||
|
MOVEM 1,%EE1A#
|
||||||
|
MOVE 1,%ERAC1
|
||||||
|
MOVEI 1,@$SVUUO ;GET ADDRESS FIELD OF UUO
|
||||||
|
MOVEM 1,%EE2#
|
||||||
|
MOVE 1,%ACS1A
|
||||||
|
CAIN 1,3 ;UUO # 3 ?
|
||||||
|
JRST .+4 ;YES
|
||||||
|
MOVE 1,%ERAC1
|
||||||
|
MOVE 1,@%EE2 ;GET C(E) OF UUO
|
||||||
|
MOVEM 1,%EE2A#
|
||||||
|
MOVE 2,%ACS1A ;GET UUO #
|
||||||
|
MOVE 1,%CNTE
|
||||||
|
LSH 1,-27 ;GET AC NUMBER
|
||||||
|
ANDI 1,17
|
||||||
|
CAIG 2,5 ;UUO # 6,7 OR 2
|
||||||
|
CAIN 2,2
|
||||||
|
JRST %ERR2 ;YES, GO PNT E AND C(E)
|
||||||
|
;PRINT ERROR AC
|
||||||
|
|
||||||
|
PMSG <^AC = >
|
||||||
|
MOVE 0,1
|
||||||
|
PNT2 ;PRINT AC NUMBER
|
||||||
|
PMSG <^C(AC)= >
|
||||||
|
MOVE 0,(1) ;GET C(AC)
|
||||||
|
CAIG 1,2 ;IS AC # = SAVED AC ?
|
||||||
|
MOVE 0,%ERAC0(1) ;YES, GET SAVED AC
|
||||||
|
%ERRB: PNTHW ;PRINT C(AC) OR UUO2 (E)
|
||||||
|
|
||||||
|
;PRINT ERROR INFO
|
||||||
|
|
||||||
|
CAIN 2,5 ;UUO # 5
|
||||||
|
JRST %ERR4 ;YES, GO PNT 'TST','SKP', OR ETC.
|
||||||
|
|
||||||
|
PMSG <^COR = >
|
||||||
|
MOVE 0,(1) ;GET C(AC)
|
||||||
|
CAIG 1,2 ;IS AC # = SAVED AC ?
|
||||||
|
MOVE 0,%ERAC0(1) ;YES, GET SAVED AC
|
||||||
|
CAIE 2,2
|
||||||
|
MOVE 0,%EE1A ;UUO # 2, GET C(E)
|
||||||
|
PNTHW ;PRINT C(E) OR UUO2 C(AC)
|
||||||
|
CAIL 2,4 ;UUO # >3 ?
|
||||||
|
JRST %ERRC ;YES, RESTORE AC'S AND RETURN
|
||||||
|
|
||||||
|
PMSG <^ ORIGINAL>
|
||||||
|
%ERRB1: MOVE 1,$SVUUO
|
||||||
|
LSH 1,-27 ;GET AC # OF UUO
|
||||||
|
ANDI 1,17
|
||||||
|
PMSG <^C(AC)= >
|
||||||
|
MOVE 0,(1) ;GET C(AC)
|
||||||
|
CAIG 1,2 ;IS AC # = SAVED AC ?
|
||||||
|
MOVE 0,%ERAC0(1) ;YES, GET SAVED AC
|
||||||
|
SKIPE %RAND ;PRINT C(RAN) FLAG SET ?
|
||||||
|
MOVE 0,RAN# ;YES
|
||||||
|
PNTHW ;PRINT C(AC) OR C(RAN)
|
||||||
|
CAIN 2,3 ;UUO # 3 ?
|
||||||
|
JRST %ERR2 ;YES, PRINT E, RESTORE AC'S AND RETURN
|
||||||
|
CAIN 2,7 ;UUO # 7 ?
|
||||||
|
JRST %ERRC ;YES, BYPASS PRINTING C(E)
|
||||||
|
PMSG <^C(E) = >
|
||||||
|
MOVE 0,%EE2A
|
||||||
|
PNTHW ;PRINT C(E)
|
||||||
|
JRST %ERRC
|
||||||
|
|
||||||
|
%ERR2: PMSG <^E = >
|
||||||
|
MOVE 0,%EE2
|
||||||
|
CAIN 2,2 ;UUO # 2 ?
|
||||||
|
MOVE 0,%EE1
|
||||||
|
PNT6 ;PRINT E OF UUO OR UUO-1
|
||||||
|
CAIL 2,6 ;UUO 6 OR 7 ?
|
||||||
|
JRST %ERRB1 ;YES, GO PNT C(AC), C(E) AND RETURN
|
||||||
|
CAIN 2,3 ;UUO # 3 ?
|
||||||
|
JRST %ERRC ;YES, RESTORE AC'S AND RETURN
|
||||||
|
|
||||||
|
PMSG <^C(E) = >
|
||||||
|
MOVE 0,%EE1A ;GET C(E)
|
||||||
|
JRST %ERRB
|
||||||
|
;PRINT ASCII COMMENT
|
||||||
|
|
||||||
|
%ERR4: HRRZI 0,@$SVUUO
|
||||||
|
PNTA ;PRINT 'TST','SKP', OR ETC.
|
||||||
|
JRST %ERRC
|
||||||
|
|
||||||
|
;COMPLETE PRINTOUT
|
||||||
|
|
||||||
|
%ERRC: PCRL
|
||||||
|
|
||||||
|
XLIST
|
||||||
|
IFDEF UUOTXT,<
|
||||||
|
LIST
|
||||||
|
MOVE 0,CONSW
|
||||||
|
TLNN TXTINH ;PRINT DIAGNOSTIC COMMENT ?
|
||||||
|
CAIE 2,7 ;UUO # 7 ?
|
||||||
|
JRST %ERMORE ;NO, RESTORE AC'S AND RETURN
|
||||||
|
MOVE 0,%EE2 ;YES
|
||||||
|
PNTAL ;PRINT DIAGNOSTIC COMMENT
|
||||||
|
PCRL
|
||||||
|
>
|
||||||
|
LIST
|
||||||
|
JRST %ERMORE
|
||||||
|
|
||||||
|
>
|
||||||
|
LIST
|
||||||
|
;RESTORE AC'S AND RETURN OR HALT
|
||||||
|
|
||||||
|
%ERMORE:XCT ERMORE
|
||||||
|
PNTMGN ;PRINT MARGINS
|
||||||
|
SWITCH
|
||||||
|
|
||||||
|
%ERRS1: TTALTM ;ALTMODE CHECK
|
||||||
|
JRST .+4 ;NONE
|
||||||
|
MOVEI .+3 ;SAVE CONT ADDRESS
|
||||||
|
MOVEM JOBOPC
|
||||||
|
JRST @ALTMGO ;PERFORM TRANSFER
|
||||||
|
MOVE CONSW
|
||||||
|
TLNE 0,ERSTOP ;HALT ON ERROR SWITCH SET ?
|
||||||
|
ERRHLT ;YES
|
||||||
|
TLNN 0,LOOPER ;LOOP ON ERROR SWITCH SET ?
|
||||||
|
SETOM PROCED ;NO, SET THE PROCEED FLAG
|
||||||
|
TLNE 0,DING ;RING BELL SWITCH SET ?
|
||||||
|
PBELL ;YES, GO RING BELL
|
||||||
|
|
||||||
|
%ERRS2: MOVE 2,%ERAC2 ;RESTORE AC'S
|
||||||
|
MOVE 1,%ERAC1
|
||||||
|
SETOM @ERRLOP ;SET C(ERR LOOP AC) TO -1
|
||||||
|
SKIPN PROCED ;LOOP ON ERROR ?
|
||||||
|
JRST %ERRS5 ;YES
|
||||||
|
AOS @ERRLOP ;NO, INC C(ERR LOOP AC)
|
||||||
|
AOS @ERRLOP ;SO IT ='S 1
|
||||||
|
SKIPL MONCTL ;UNDER DIAGNOSTIC MONITOR ?
|
||||||
|
JRST %ERRS5 ;NO, CONTINUE PROGRAM
|
||||||
|
MOVE 0,ERRTLS ;YES
|
||||||
|
CAIL 0,5 ;PRINTED ALLOWED ERRORS ?
|
||||||
|
JRST $BEND2
|
||||||
|
|
||||||
|
%ERRS5: MOVE 0,%ERAC0 ;NO, CONTINUE PROGRAM
|
||||||
|
IFDEF EXCASB,<IFDEF KI10,<
|
||||||
|
SKIPN KAIFLG
|
||||||
|
JRST .+5
|
||||||
|
SKIPE USER
|
||||||
|
JRST .+3
|
||||||
|
SKIPE MARGIN
|
||||||
|
DATAO APR,MARGIN ;RESET MARGIN SYSTEM >>
|
||||||
|
JRST UUOEXT
|
||||||
|
|
||||||
|
%ERRS4: MOVE 0,CONSW
|
||||||
|
TLNN PALERS ;PRINT ALL ERRORS ?
|
||||||
|
JRST %ERRS1 ;NO
|
||||||
|
JRST %ERMS1 ;YES
|
||||||
|
|
@ -280,5 +280,5 @@ DAKAA.MAC
|
||||||
[[Download](DAKAA.MAC.txt)]
|
[[Download](DAKAA.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAA.MAC.txt %}
|
{% include_relative DAKAAM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
|
|
@ -273,5 +273,5 @@ DAKAB.MAC
|
||||||
[[Download](DAKAB.MAC.txt)]
|
[[Download](DAKAB.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAB.MAC.txt %}
|
{% include_relative DAKABM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
|
|
@ -272,5 +272,5 @@ DAKAC.MAC
|
||||||
[[Download](DAKAC.MAC.txt)]
|
[[Download](DAKAC.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAC.MAC.txt %}
|
{% include_relative DAKACM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
|
|
@ -288,5 +288,5 @@ DAKAD.MAC
|
||||||
[[Download](DAKAD.MAC.txt)]
|
[[Download](DAKAD.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAD.MAC.txt %}
|
{% include_relative DAKADM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
|
|
@ -285,5 +285,5 @@ DAKAE.MAC
|
||||||
[[Download](DAKAE.MAC.txt)]
|
[[Download](DAKAE.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAE.MAC.txt %}
|
{% include_relative DAKAEM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
|
|
@ -272,5 +272,5 @@ DAKAF.MAC
|
||||||
[[Download](DAKAF.MAC.txt)]
|
[[Download](DAKAF.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAF.MAC.txt %}
|
{% include_relative DAKAFM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
|
|
@ -274,5 +274,5 @@ DAKAG.MAC
|
||||||
[[Download](DAKAG.MAC.txt)]
|
[[Download](DAKAG.MAC.txt)]
|
||||||
|
|
||||||
{% highlight text %}
|
{% highlight text %}
|
||||||
{% include_relative DAKAG.MAC.txt %}
|
{% include_relative DAKAGM.MAC.txt %}
|
||||||
{% endhighlight %}
|
{% endhighlight %}
|
||||||
|
|
|
||||||
7091
apps/pdp10/diags/klad/dakah/DAKAH.LST.txt
Normal file
7091
apps/pdp10/diags/klad/dakah/DAKAH.LST.txt
Normal file
File diff suppressed because it is too large
Load diff
1775
apps/pdp10/diags/klad/dakah/DAKAH.MAC.txt
Normal file
1775
apps/pdp10/diags/klad/dakah/DAKAH.MAC.txt
Normal file
File diff suppressed because it is too large
Load diff
1775
apps/pdp10/diags/klad/dakah/DAKAHM.MAC.txt
Normal file
1775
apps/pdp10/diags/klad/dakah/DAKAHM.MAC.txt
Normal file
File diff suppressed because it is too large
Load diff
117
apps/pdp10/diags/klad/dakah/DAKAHT.MAC.txt
Normal file
117
apps/pdp10/diags/klad/dakah/DAKAHT.MAC.txt
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
;DAKAH
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DECVER==2
|
||||||
|
MCNVER==0
|
||||||
|
|
||||||
|
XLIST
|
||||||
|
DEFINE NAME (MCNVER,DECVER)<
|
||||||
|
|
||||||
|
TITLE DAKAH PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC (8) MCNVER,DECVER
|
||||||
|
>
|
||||||
|
LIST
|
||||||
|
LALL
|
||||||
|
NAME \MCNVER,\DECVER
|
||||||
|
|
||||||
|
;TEST DESIGNED FOR INITIAL DEBUGGING OF PROCESSOR HARDWARE
|
||||||
|
;AND TO DETECT (SOLID) FAILURES IN THE FIELD.
|
||||||
|
|
||||||
|
;COPYRIGHT 1972,1977
|
||||||
|
;DIGITAL EQUIPMENT CORPORATION
|
||||||
|
;MARLBORO, MASS. 01752
|
||||||
|
|
||||||
|
;JOHN R. KIRCHOFF
|
||||||
|
|
||||||
|
LOC 137
|
||||||
|
MCNVER,,DECVER
|
||||||
|
|
||||||
|
NOSYM
|
||||||
|
SUBTTL DIAGNOSTIC PARAMETERS
|
||||||
|
|
||||||
|
;CONTROL WORDS
|
||||||
|
|
||||||
|
EXIOT=4000 ;USER PRIV I/O FLAG
|
||||||
|
USERF=10000 ;USER MODE FLAG
|
||||||
|
|
||||||
|
DACT=400
|
||||||
|
ME=774
|
||||||
|
PIG0=2377
|
||||||
|
PIH1=40000
|
||||||
|
PIH2=20000
|
||||||
|
PIH3=10000
|
||||||
|
PIH4=4000
|
||||||
|
PIH5=2000
|
||||||
|
PIH6=1000
|
||||||
|
PIH7=400
|
||||||
|
PIOSET=2000
|
||||||
|
PIOCLR=1000
|
||||||
|
PIREQ=4000
|
||||||
|
ACT=200
|
||||||
|
PROT=20000
|
||||||
|
NONEX=10000
|
||||||
|
UMIOT=4000
|
||||||
|
;SUBROUTINE DEFINITIONS
|
||||||
|
|
||||||
|
SADR1=START
|
||||||
|
SADR2=START
|
||||||
|
SADR3=START
|
||||||
|
SADR4=START
|
||||||
|
SADR5=START
|
||||||
|
SADR6=START
|
||||||
|
SADR7=JRST START
|
||||||
|
SADR8=JRST START
|
||||||
|
SADR9=JRST START
|
||||||
|
SADR10=JRST START
|
||||||
|
SADR11=JRST START
|
||||||
|
PAREA1=0
|
||||||
|
PAREA2=0
|
||||||
|
PAREA3=0
|
||||||
|
PAREA4=0
|
||||||
|
PAREA5=0
|
||||||
|
PAREA6=0
|
||||||
|
ITERAT=1
|
||||||
|
EXCASB==1
|
||||||
|
PGMEND==1
|
||||||
|
|
||||||
|
;MACROS
|
||||||
|
|
||||||
|
;STOP - USED FOR SCOPE LOOP, IF INSTRUCTION FAILS, CHANGE (JUMP .+1)
|
||||||
|
; TO A (JUMP .-X) TO CYCLE ON FAILING INSTRUCTION.
|
||||||
|
|
||||||
|
DEFINE STOP (A)<
|
||||||
|
HALT .+1
|
||||||
|
JUMP .+1
|
||||||
|
>
|
||||||
|
|
||||||
|
;SFLAG - USED TO CLEAR ALL FLAGS THEN TO SET REQUESTED
|
||||||
|
; FLAG FOR TESTING.
|
||||||
|
|
||||||
|
DEFINE SFLAG (A)<
|
||||||
|
MOVSI 1,A
|
||||||
|
JFCL 17,.+1
|
||||||
|
JRST 2,.+1(1)
|
||||||
|
>
|
||||||
|
|
||||||
|
;CHANEL - USED FOR 2 CHANNEL SYSTEM CHECK
|
||||||
|
|
||||||
|
DEFINE CHANEL (A)<
|
||||||
|
SKIPN PI7SYS#
|
||||||
|
JRST A
|
||||||
|
>
|
||||||
|
|
||||||
|
;RETURN - USED TO SETUP UUO TRAP
|
||||||
|
|
||||||
|
DEFINE RETURN (A)<
|
||||||
|
MOVE 2,[JSP 2,A]
|
||||||
|
MOVEM 2,41
|
||||||
|
SETOB 2,40
|
||||||
|
>
|
||||||
|
|
||||||
|
;CLEAN - USED TO CLEAR THE PROCESSOR EXCEPT CLOCK
|
||||||
|
; CLEAR DEVICES AND PI SYSTEM
|
||||||
|
|
||||||
|
DEFINE CLEAN (A)<
|
||||||
|
CONO 634440
|
||||||
|
CONO PI,10000
|
||||||
|
>
|
||||||
279
apps/pdp10/diags/klad/dakah/README.md
Normal file
279
apps/pdp10/diags/klad/dakah/README.md
Normal file
|
|
@ -0,0 +1,279 @@
|
||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: PDP-10 KA10 Basic Instruction Diagnostic #8
|
||||||
|
permalink: /apps/pdp10/diags/klad/dakah/
|
||||||
|
machines:
|
||||||
|
- id: testka10
|
||||||
|
type: pdp10
|
||||||
|
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
|
||||||
|
debugger: true
|
||||||
|
commands: a 30724 DAKAH.MAC
|
||||||
|
---
|
||||||
|
|
||||||
|
PDP-10 KA10 Basic Instruction Diagnostic #8
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
The *PDP-10 KA10 Basic Instruction Diagnostic #8* (MAINDEC-10-DAKAH) test code has been extracted from
|
||||||
|
[DAKAHM.MAC](DAKAHM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakahm.mac.html)]
|
||||||
|
for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below.
|
||||||
|
|
||||||
|
Resources for this test include:
|
||||||
|
|
||||||
|
- [Instructions](#dakahtxt)
|
||||||
|
- [History](#dakahhst)
|
||||||
|
- [Source Code](#dakahmac)
|
||||||
|
- [MACRO-10 Listing](DAKAH.LST.txt)
|
||||||
|
- [Additional Information](http://archive.pcjs.org/apps/pdp10/diags/klad/dakah/DAKAH.SEQ.txt)
|
||||||
|
|
||||||
|
{% include machine.html id="testka10" %}
|
||||||
|
|
||||||
|
The Debugger's assemble ("a") command can be used to test the new built-in
|
||||||
|
[MACRO-10 Mini-Assembler](/modules/pdp10/lib/macro10.js), which supports a subset
|
||||||
|
of the [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language.
|
||||||
|
This command:
|
||||||
|
|
||||||
|
a 30724 DAKAH.MAC
|
||||||
|
|
||||||
|
will automatically read the [DAKAH.MAC](DAKAH.MAC.txt) source file (a slightly modified copy of [DAKAHM.MAC](DAKAHM.MAC.txt)),
|
||||||
|
assemble it, and then load the binary output at the specified address.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
DAKAH.TXT
|
||||||
|
---------
|
||||||
|
|
||||||
|
```
|
||||||
|
MAINDEC-10-DAKAH.TXT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IDENTIFICATION
|
||||||
|
--------------
|
||||||
|
|
||||||
|
PRODUCT CODE: MAINDEC-10-DAKAH-B-D
|
||||||
|
|
||||||
|
PRODUCT NAME: DECSYSTEM10 PDP-10 KA10 BASIC
|
||||||
|
INSTRUCTION DIAGNOSTIC (8)
|
||||||
|
|
||||||
|
FUNCTION: PI, INTERRUPTS, LUUO'S, I/O
|
||||||
|
|
||||||
|
VERSION: 0.2
|
||||||
|
|
||||||
|
DATE RELEASED: JANUARY 1977
|
||||||
|
|
||||||
|
MAINTAINED BY: DIAGNOSTIC ENGINEERING GROUP
|
||||||
|
|
||||||
|
AUTHOR: JOHN R. KIRCHOFF
|
||||||
|
|
||||||
|
COPYRIGHT(C) 1976,1977
|
||||||
|
DIGITAL EQUIPMENT CORPORATION
|
||||||
|
MARLBORO, MASS. 01752
|
||||||
|
|
||||||
|
THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
|
||||||
|
ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
|
||||||
|
THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE,
|
||||||
|
OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE
|
||||||
|
MADE AVAILABLE TO ANY OTHER PERSON EXECPT FOR USE ON SUCH SYSTEM
|
||||||
|
AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND
|
||||||
|
OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
|
||||||
|
|
||||||
|
THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT
|
||||||
|
NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
|
||||||
|
EQUIPMENT CORPORATION.
|
||||||
|
|
||||||
|
DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
|
||||||
|
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAH.TXT
|
||||||
|
PAGE 2
|
||||||
|
|
||||||
|
|
||||||
|
TABLE OF CONTENTS
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
1.0 ABSTRACT
|
||||||
|
|
||||||
|
2.0 REQUIREMENTS
|
||||||
|
|
||||||
|
2.1 EQUIPMENT
|
||||||
|
|
||||||
|
2.2 STORAGE
|
||||||
|
|
||||||
|
2.3 PRELIMINARY PROGRAMS
|
||||||
|
|
||||||
|
3.0 PROGRAM PROCEDURES
|
||||||
|
|
||||||
|
3.1 LOADING PROCEDURE
|
||||||
|
|
||||||
|
3.2 STARTING PROCEDURE
|
||||||
|
|
||||||
|
3.3 OPERATING PROCEDURE
|
||||||
|
|
||||||
|
4.0 ERRORS
|
||||||
|
|
||||||
|
5.0 ITERATION COUNTER
|
||||||
|
|
||||||
|
6.0 CYCLE TIME
|
||||||
|
|
||||||
|
7.0 OPERATIONAL VARIATIONS
|
||||||
|
|
||||||
|
8.0 MISCELLANEOUS
|
||||||
|
|
||||||
|
9.0 LISTING
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAH.TXT
|
||||||
|
PAGE 3
|
||||||
|
|
||||||
|
|
||||||
|
1.0 ABSTRACT
|
||||||
|
|
||||||
|
THIS PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC IS THE
|
||||||
|
EIGHTH IN A SERIES OF PDP-10 KA10 PROCESSOR DIAGNOSTICS.
|
||||||
|
THE DIAGNOSTIC TESTS THE PI SYSTEM, INTERRUPTS, LUUO'S
|
||||||
|
AND INPUT/OUTPUT.
|
||||||
|
|
||||||
|
2.0 REQUIREMENTS
|
||||||
|
|
||||||
|
2.1 EQUIPMENT
|
||||||
|
|
||||||
|
A PDP-10 KA10 WITH A MINIMUM OF 32K OF MEMORY
|
||||||
|
|
||||||
|
PAPER TAPE READER
|
||||||
|
DECTAPE (OPTIONAL)
|
||||||
|
CONSOLE TELETYPE
|
||||||
|
|
||||||
|
2.2 STORAGE
|
||||||
|
|
||||||
|
THE PROGRAM RUNS WITHIN 32K OF MEMORY.
|
||||||
|
|
||||||
|
2.3 PRELIMINARY PROGRAMS
|
||||||
|
|
||||||
|
CONSOLE FUNCTIONS WORKING PROPERLY
|
||||||
|
PAPER TAPE OR DECTAPE READ-IN WORKING PROPERLY
|
||||||
|
PREVIOUS PROCESSOR DIAGNOSTICS
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAH.TXT
|
||||||
|
PAGE 4
|
||||||
|
|
||||||
|
|
||||||
|
3.0 PROGRAM PROCEDURES
|
||||||
|
|
||||||
|
3.1 LOADING PROCEDURE
|
||||||
|
|
||||||
|
PAPER TAPE - HARDWARE READ-IN (READER DEVICE CODE 104)
|
||||||
|
DECTAPE - LOAD WITH DIAMON (DECTAPE DEVICE CODE 320)
|
||||||
|
|
||||||
|
3.2 STARTING PROCEDURE
|
||||||
|
|
||||||
|
STAND-ALONE STARTING ADDRESS IS 30000.
|
||||||
|
|
||||||
|
IF THE DIAGNOSTIC FAILS TO START CORRECTLY TRY STARTING AT THE
|
||||||
|
FIRST TEST INSTEAD OF AT THE BEGINNING OF THE CONTROL SEQUENCE.
|
||||||
|
(SEE LISTING).
|
||||||
|
|
||||||
|
3.3 OPERATING PROCEDURE
|
||||||
|
|
||||||
|
ONCE STARTED THE PROGRAM WILL CYCLE CONTINUALLY UNTIL STOPPED
|
||||||
|
OR AN ERROR OCCURS.
|
||||||
|
|
||||||
|
4.0 ERRORS
|
||||||
|
|
||||||
|
ERRORS ARE IN THE FORM OF HALT INSTRUCTIONS. THE LISTING
|
||||||
|
SHOULD BE CONSULTED TO DETERMINE THE CAUSE OF THE ERROR. A
|
||||||
|
NO OPERATION (JUMP) INSTRUCTION FOLLOWS EACH HALT. THIS
|
||||||
|
MAY BE USEFUL IN CONSTRUCTING A SCOPE LOOP TO CYCLE ON THE
|
||||||
|
FAILING INSTRUCTION.
|
||||||
|
|
||||||
|
5.0 ITERATION COUNTER
|
||||||
|
|
||||||
|
THE ITERATION COUNT OF THE PROGRAM IS DISPLAYED IN THE MEM-
|
||||||
|
ORY INDICATORS (MI). THIS COUNT IS A DECREMENTING COUNT AND
|
||||||
|
INITIALLY STARTS AT -1 IN STAND-ALONE OPERATION.
|
||||||
|
|
||||||
|
6.0 CYCLE TIME
|
||||||
|
|
||||||
|
THE CYCLE TIME OF THE PROGRAM IS IN THE MILLISECOND RANGE AND
|
||||||
|
IS THEREFORE SUITABLE FOR TAKING MARGINS, VIBRATION TESTS, ETC.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAH.TXT
|
||||||
|
PAGE 5
|
||||||
|
|
||||||
|
|
||||||
|
7.0 OPERATIONAL VARIATIONS
|
||||||
|
|
||||||
|
A. DIAGNOSTIC MONITOR
|
||||||
|
|
||||||
|
THE PROGRAM IS USABLE WITH THE DIAGNOSTIC MONITOR TO PRO-
|
||||||
|
VIDE RELIABILITY TESTS, ACCEPTANCE TESTS, AND/OR TO PRO-
|
||||||
|
VIDE A QUICK METHOD OF ISOLATION OF A FAULT TO A PARTICULAR
|
||||||
|
AREA OF THE PROCESSOR. CERTAIN PROCEDURES ARE USED WHEN
|
||||||
|
THE PROGRAM IS USED IN THIS MANNER. THEY ARE:
|
||||||
|
|
||||||
|
1. THE DIAGNOSTIC MONITOR TRANSFERS CONTROL TO THE PRO-
|
||||||
|
GRAM AND STARTS IT AT LOCATION 30002.
|
||||||
|
|
||||||
|
2. MONCTL - LOCATION 30043 IS USED AS THE DIAGNOSTIC MON-
|
||||||
|
ITOR CONTROL FLAG WORD.
|
||||||
|
|
||||||
|
B. USER MODE
|
||||||
|
|
||||||
|
THE PROGRAM WILL OPERATE IN USER MODE AND AS SUCH PROVIDES
|
||||||
|
ASSURANCE THAT THE PROCESSOR IS PERFORMING ALL FUNCTIONS
|
||||||
|
CORRECTLY. USER MODE STARTING ADDRESS IS 30000.
|
||||||
|
|
||||||
|
C. SYSTEM EXERCISER
|
||||||
|
|
||||||
|
STARTING ADDRESS IS 30003. NO DATA SWITCHES ARE USED BY
|
||||||
|
THIS PROGRAM.
|
||||||
|
|
||||||
|
8.0 MISCELLANEOUS
|
||||||
|
|
||||||
|
NONE
|
||||||
|
|
||||||
|
9.0 LISTING
|
||||||
|
```
|
||||||
|
|
||||||
|
DAKAH.HST
|
||||||
|
---------
|
||||||
|
|
||||||
|
THIS IS A HISTORY OF THE DEVELOPMENT OF MAINDEC-10-DAKAH
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
PRODUCT CODE: MAINDEC-10-DAKAH
|
||||||
|
|
||||||
|
PRODUCT NAME: BASIC INSTRUCTION DIAGNOSTIC #8
|
||||||
|
|
||||||
|
DATE RELEASED: JANUARY 1977
|
||||||
|
|
||||||
|
VERSION: 0.2
|
||||||
|
|
||||||
|
UPDATE AUTHOR: JOHN R. KIRCHOFF
|
||||||
|
EDWARD G. PRENTICE
|
||||||
|
|
||||||
|
CHANGES MADE:
|
||||||
|
|
||||||
|
1. UPGRADE TO ALLOW COMPATABILITY WITH THE SUBROUTINE PACKAGE.
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
ORIGINAL VERSION: 0.1
|
||||||
|
|
||||||
|
ORIGINAL AUTHOR: RICHARD MALISKA
|
||||||
|
|
||||||
|
ORIGINAL RELEASE: 16-MAR-72
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
DAKAH.MAC
|
||||||
|
---------
|
||||||
|
|
||||||
|
[[Download](DAKAH.MAC.txt)]
|
||||||
|
|
||||||
|
{% highlight text %}
|
||||||
|
{% include_relative DAKAHM.MAC.txt %}
|
||||||
|
{% endhighlight %}
|
||||||
16210
apps/pdp10/diags/klad/dakai/DAKAI.LST.txt
Normal file
16210
apps/pdp10/diags/klad/dakai/DAKAI.LST.txt
Normal file
File diff suppressed because it is too large
Load diff
1872
apps/pdp10/diags/klad/dakai/DAKAI.MAC.txt
Normal file
1872
apps/pdp10/diags/klad/dakai/DAKAI.MAC.txt
Normal file
File diff suppressed because it is too large
Load diff
1733
apps/pdp10/diags/klad/dakai/DAKAIM.MAC.txt
Normal file
1733
apps/pdp10/diags/klad/dakai/DAKAIM.MAC.txt
Normal file
File diff suppressed because it is too large
Load diff
136
apps/pdp10/diags/klad/dakai/DAKAIT.MAC.txt
Normal file
136
apps/pdp10/diags/klad/dakai/DAKAIT.MAC.txt
Normal file
|
|
@ -0,0 +1,136 @@
|
||||||
|
;DAKAI
|
||||||
|
|
||||||
|
MCNVER==0
|
||||||
|
DECVER==2
|
||||||
|
|
||||||
|
|
||||||
|
XLIST
|
||||||
|
DEFINE NAME (MCNVER,DECVER)<
|
||||||
|
|
||||||
|
TITLE DAKAI PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC (9) MCNVER,DECVER
|
||||||
|
>
|
||||||
|
LIST
|
||||||
|
LALL
|
||||||
|
|
||||||
|
NAME \MCNVER,\DECVER
|
||||||
|
|
||||||
|
;(LOGICAL SHIFT, ROTATE, ARITHMETIC SHIFT; SINGLE AND COMBINED)
|
||||||
|
|
||||||
|
;COPYRIGHT 1975,1977
|
||||||
|
;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
|
||||||
|
|
||||||
|
KLOLD==1
|
||||||
|
DEBUG=40
|
||||||
|
EXCASB=1
|
||||||
|
USRASB=1
|
||||||
|
KA10=1
|
||||||
|
PGMEND=1
|
||||||
|
ERDIAG=1
|
||||||
|
|
||||||
|
;SPECIAL FEATURE DEFINITIONS
|
||||||
|
|
||||||
|
SADR1=BEGIN
|
||||||
|
SADR2=BEGIN
|
||||||
|
SADR3=BEGIN
|
||||||
|
SADR4=BEGIN
|
||||||
|
SADR5=JRST BEGIN
|
||||||
|
SADR6=JRST BEGIN
|
||||||
|
SADR7=JRST BEGIN
|
||||||
|
SADR8=JRST BEGIN
|
||||||
|
SADR9=JRST BEGIN
|
||||||
|
SADR10=JRST BEGIN
|
||||||
|
SADR11=JRST BEGIN
|
||||||
|
|
||||||
|
;SPECIAL FEATURE PARAMETERS
|
||||||
|
|
||||||
|
PAREA0=0
|
||||||
|
PAREA1=0
|
||||||
|
PAREA2=0
|
||||||
|
PAREA3=SIXBIT/DAKAI/
|
||||||
|
PAREA4=SIXBIT/TMP/
|
||||||
|
PAREA5=0
|
||||||
|
PAREA6=0
|
||||||
|
ITERAT==1000
|
||||||
|
|
||||||
|
;MACROS
|
||||||
|
|
||||||
|
DEFINE SAVEAC (A,B)<
|
||||||
|
MOVEI AC+2,. ;SAVE TEST PC
|
||||||
|
MOVEM AC+2,TESTPC
|
||||||
|
MOVEI AC+2,<AC+2>&17 ;INFORM ERROR ROUTINE WHICH
|
||||||
|
MOVEM AC+2,ERRLOP# ;AC IS USED FOR ITERATION>
|
||||||
|
|
||||||
|
DEFINE SETACS (WW,XX)<
|
||||||
|
MOVEI AC-1,WW ;SETUP AC-1
|
||||||
|
HRLI AC-1,WW ;FOR COMPARISION
|
||||||
|
MOVE AC-2,<AC-1>&17 ;SETUP AC-2 FOR COMPARISON
|
||||||
|
MOVEI AC,XX ;SETUP AC RIGHT
|
||||||
|
HRLI AC,XX ;SETUP AC LEFT
|
||||||
|
MOVEM AC,<AC+1>&17 ;SETUP AC2>
|
||||||
|
;USER DEFINED MACROS
|
||||||
|
|
||||||
|
DEFINE SR1 (T,D1A,D1B,R1A,R1B,OP,S)<
|
||||||
|
;THIS MACRO SHIFTS/ROTATES THE DATA SPECIFIED IN [XWD D1A,D1B] S BIT
|
||||||
|
;POSITIONS AND COMPARES THE RESULT IN THE AC TO THE DATA SPECIFIED IN [XWD R1A,R1B]
|
||||||
|
;IT ALSO CHECKS THAT C(AC+1) WAS NOT MODIFIED
|
||||||
|
|
||||||
|
E'T'00: MOVE AC,[XWD D1A,D1B] ;INITIALIZE AC
|
||||||
|
MOVE AC+1,[XWD 741703,607417];INITIALIZE AC+1
|
||||||
|
OP AC,S ;*SHIFT/ROTATE S BIT POSITIONS
|
||||||
|
CAME AC,[XWD R1A,R1B] ;IS RESULT IN AC CORRECT?
|
||||||
|
ER3 AC,T'01 ;RESULT IN AC IS INCORRECT
|
||||||
|
CAME AC+1,[XWD 741703,607417]
|
||||||
|
ER4 AC+1,T'01 ;C(AC+1) WAS MODIFIED INCORRECTLY
|
||||||
|
JUMPL AC+2,E'T'00 ;LOOP ON ERROR SWITCH>
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE SR2 (T,D1A,D1B,D2A,D2B,R1A,R1B,R2A,R2B,OP,S)<
|
||||||
|
;THIS MACRO PERFORMS A COMBINED SHIFT/ROTATE OPERATION ON THE
|
||||||
|
;DATA SPECIFIED IN [XWD D1A,D1B] AND [XWD D2A,D2B] S BIT POSITIONS AND
|
||||||
|
;COMPARES THE RESULT IN AC AND AC+1 TO THE DATA SPECIFIED IN [XWD R1A,R1B] AND
|
||||||
|
;[XWD R2A,R2B]
|
||||||
|
|
||||||
|
E'T'00: MOVE AC,[XWD D1A,D1B] ;INITIALIZE AC
|
||||||
|
MOVE AC+1,[XWD D2A,D2B] ;INITIALIZE AC+1
|
||||||
|
OP AC,S ;*SHIFT/ROTATE COMBINED S PLACES
|
||||||
|
CAME AC,[XWD R1A,R1B] ;IS RESULT IN AC CORRECT?
|
||||||
|
ER3 AC,T'01 ;RESULT IN AC IS INCORRECT
|
||||||
|
CAME AC+1,[XWD R2A,R2B] ;IS RESULT IN AC+1 CORRECT?
|
||||||
|
ER4 AC+1,T'01 ;RESULT IN AC+1 IS INCORRECT
|
||||||
|
JUMPL AC+2,E'T'00 ;LOOP ON ERROR SWITCH>
|
||||||
422
apps/pdp10/diags/klad/dakai/README.md
Normal file
422
apps/pdp10/diags/klad/dakai/README.md
Normal file
|
|
@ -0,0 +1,422 @@
|
||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: PDP-10 KA10 Basic Instruction Diagnostic #9
|
||||||
|
permalink: /apps/pdp10/diags/klad/dakai/
|
||||||
|
machines:
|
||||||
|
- id: testka10
|
||||||
|
type: pdp10
|
||||||
|
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
|
||||||
|
debugger: true
|
||||||
|
commands: a 30724 DAKAI.MAC
|
||||||
|
---
|
||||||
|
|
||||||
|
PDP-10 KA10 Basic Instruction Diagnostic #9
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
The *PDP-10 KA10 Basic Instruction Diagnostic #9* (MAINDEC-10-DAKAI) test code has been extracted from
|
||||||
|
[DAKAIM.MAC](DAKAIM.MAC.txt) [[original](http://pdp-10.trailing-edge.com/klad_sources/01/klad.sources/dakaim.mac.html)]
|
||||||
|
for use with the [PDP-10 Test Machine with Debugger](/devices/pdp10/machine/ka10/test/debugger/) below.
|
||||||
|
|
||||||
|
Resources for this test include:
|
||||||
|
|
||||||
|
- [Instructions](#dakaitxt)
|
||||||
|
- [History](#dakaihst)
|
||||||
|
- [Source Code](#dakaimac)
|
||||||
|
- [MACRO-10 Listing](DAKAI.LST.txt)
|
||||||
|
- [Additional Information](http://archive.pcjs.org/apps/pdp10/diags/klad/dakai/DAKAI.SEQ.txt)
|
||||||
|
|
||||||
|
{% include machine.html id="testka10" %}
|
||||||
|
|
||||||
|
The Debugger's assemble ("a") command can be used to test the new built-in
|
||||||
|
[MACRO-10 Mini-Assembler](/modules/pdp10/lib/macro10.js), which supports a subset
|
||||||
|
of the [MACRO-10](http://archive.pcjs.org/pubs/dec/pdp10/tops10/02_1973AsmRef_macro.pdf) assembly language.
|
||||||
|
This command:
|
||||||
|
|
||||||
|
a 30724 DAKAI.MAC
|
||||||
|
|
||||||
|
will automatically read the [DAKAI.MAC](DAKAI.MAC.txt) source file (a slightly modified copy of [DAKAIM.MAC](DAKAIM.MAC.txt)),
|
||||||
|
assemble it, and then load the binary output at the specified address.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
DAKAI.TXT
|
||||||
|
---------
|
||||||
|
|
||||||
|
```
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IDENTIFICATION
|
||||||
|
--------------
|
||||||
|
|
||||||
|
PRODUCT CODE: MAINDEC-10-DAKAI-B-D
|
||||||
|
|
||||||
|
PRODUCT NAME: DECSYSTEM10 PDP-10 KA10 BASIC
|
||||||
|
INSTRUCTION DIAGNOSTIC (9)
|
||||||
|
|
||||||
|
FUNCTION: SHIFT-ROTATE TEST (PART 1)
|
||||||
|
|
||||||
|
VERSION: 0.2
|
||||||
|
|
||||||
|
DATE RELEASED: JANUARY 1977
|
||||||
|
|
||||||
|
MAINTAINED BY: DIAGNOSTIC ENGINEERING GROUP
|
||||||
|
|
||||||
|
AUTHOR: JOHN R. KIRCHOFF
|
||||||
|
|
||||||
|
COPYRIGHT(C) 1976,1977
|
||||||
|
DIGITAL EQUIPMENT CORPORATION
|
||||||
|
MARLBORO, MASS. 01752
|
||||||
|
|
||||||
|
THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY
|
||||||
|
ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH
|
||||||
|
THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE,
|
||||||
|
OR ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE
|
||||||
|
MADE AVAILABLE TO ANY OTHER PERSON EXECPT FOR USE ON SUCH SYSTEM
|
||||||
|
AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND
|
||||||
|
OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
|
||||||
|
|
||||||
|
THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT
|
||||||
|
NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
|
||||||
|
EQUIPMENT CORPORATION.
|
||||||
|
|
||||||
|
DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
|
||||||
|
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 2
|
||||||
|
|
||||||
|
TABLE OF CONTENTS
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
1.0 ABSTRACT
|
||||||
|
|
||||||
|
2.0 REQUIREMENTS
|
||||||
|
|
||||||
|
2.1 EQUIPMENT
|
||||||
|
|
||||||
|
2.2 STORAGE
|
||||||
|
|
||||||
|
2.3 PRELIMINARY PROGRAMS
|
||||||
|
|
||||||
|
3.0 PROGRAM PROCEDURES
|
||||||
|
|
||||||
|
3.1 LOADING PROCEDURE
|
||||||
|
|
||||||
|
3.2 STARTING PROCEDURE
|
||||||
|
|
||||||
|
3.3 OPERATING PROCEDURE
|
||||||
|
|
||||||
|
4.0 DATA SWITCH FUNCTIONS
|
||||||
|
|
||||||
|
5.0 ERRORS
|
||||||
|
|
||||||
|
6.0 ITERATION COUNTER
|
||||||
|
|
||||||
|
7.0 CYCLE TIME
|
||||||
|
|
||||||
|
8.0 OPERATIONAL VARIATIONS
|
||||||
|
|
||||||
|
9.0 MISCELLANEOUS
|
||||||
|
|
||||||
|
10.0 LISTING
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 3
|
||||||
|
|
||||||
|
1.0 ABSTRACT
|
||||||
|
|
||||||
|
THIS PDP-10 KA10 BASIC INSTRUCTION DIAGNOSTIC IS THE
|
||||||
|
NINTH IN A SERIES OF PDP-10 KA10 PROCESSOR DIAGNOSTICS.
|
||||||
|
THE DIAGNOSTIC TESTS THE SHIFTING AND ROTATING INSTRUCTIONS.
|
||||||
|
|
||||||
|
2.0 REQUIREMENTS
|
||||||
|
|
||||||
|
2.1 EQUIPMENT
|
||||||
|
|
||||||
|
A PDP-10 KA10 EQUIPPED WITH A MINIMUM OF 32K OF MEMORY
|
||||||
|
|
||||||
|
PAPER TAPE READER
|
||||||
|
CONSOLE TELETYPE
|
||||||
|
DECTAPE
|
||||||
|
LINE PRINTER (OPTIONAL)
|
||||||
|
|
||||||
|
2.2 STORAGE
|
||||||
|
|
||||||
|
THE PROGRAM RUNS WITHIN 32K OF MEMORY.
|
||||||
|
|
||||||
|
2.3 PRELIMINARY PROGRAMS
|
||||||
|
|
||||||
|
PREVIOUS PROCESSOR DIAGNOSTICS
|
||||||
|
|
||||||
|
3.0 PROGRAM PROCEDURES
|
||||||
|
|
||||||
|
3.1 LOADING PROCEDURE
|
||||||
|
|
||||||
|
THIS DIAGNOSTIC REQUIRES THAT THE DECSYSTEM10 SUBROUTINE
|
||||||
|
PROGRAM BE RESIDENT IN THE PDP-10.
|
||||||
|
|
||||||
|
PAPER TAPE - HARDWARE READ-IN (READER DEVICE CODE 104)
|
||||||
|
DECTAPE - LOAD WITH DIAMON (DECTAPE DEVICE CODE 320)
|
||||||
|
TIME SHARING - RUN UNDER DIAMON.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 4
|
||||||
|
|
||||||
|
3.2 STARTING PROCEDURE
|
||||||
|
|
||||||
|
A. SELECT OPERATIONAL CONSOLE DATA SWITCH SETTINGS (REFER TO
|
||||||
|
4.0 DATA SWITCH FUNCTIONS).
|
||||||
|
|
||||||
|
B. EXEC MODE
|
||||||
|
|
||||||
|
STAND-ALONE STARTING ADDRESS IS 30000.
|
||||||
|
|
||||||
|
C. USER MODE
|
||||||
|
|
||||||
|
RUN UNDER "DIAMON".
|
||||||
|
IN USER MODE THE FOLLOWING QUESTIONS WILL BE ASKED TO
|
||||||
|
SELECT THE OPERATIONAL SWITCHES:
|
||||||
|
|
||||||
|
TELETYPE SWITCH CONTROL ? 0,S,Y OR N (CR) -
|
||||||
|
|
||||||
|
IF THE OPERATOR TYPES "N", THE ACTUAL CONSOLE
|
||||||
|
SWITCHES ARE USED.
|
||||||
|
|
||||||
|
IF THE OPERATOR TYPES "Y", THE FOLLOWING QUESTIONS
|
||||||
|
ARE ASKED AND THE OPERATOR RESPONDS BY TYPING
|
||||||
|
THE ANSWER AS SIX OCTAL DIGITS REPRESENTING
|
||||||
|
THE DESIRED SWITCH SETTINGS.
|
||||||
|
|
||||||
|
SPECIFY LH SWITCHES IN OCTAL-
|
||||||
|
|
||||||
|
SPECIFY RH SWITCHES IN OCTAL-
|
||||||
|
|
||||||
|
IF THE OPERATOR TYPES "0", ZERO'S ARE USED FOR
|
||||||
|
THE SWITCH SETTINGS.
|
||||||
|
|
||||||
|
IF THE OPERATOR TYPES "S", PREVIOUSLY SET SWITCHES
|
||||||
|
ARE USED. THIS IS ONLY VALID UPON RESTARTING
|
||||||
|
OF AN INTERRUPTED PROGRAM.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 5
|
||||||
|
|
||||||
|
3.3 OPERATING PROCEDURE
|
||||||
|
|
||||||
|
A. TO THROUGHLY TEST ALL HARDWARE, ALL TEST CONTROL DATA
|
||||||
|
SWITCHES SHOULD BE SET TO 0.
|
||||||
|
|
||||||
|
B. WHEN DEBUGGING HARDWARE, SET SWITCHES TO 0. ALLOW THE
|
||||||
|
TELETYPE TO PRINT THE ERROR MESSAGES. THIS ALLOWS THE
|
||||||
|
PROGRAM TO RUN A COMPLETE PASS AND THEN THE ERROR MESSAGES
|
||||||
|
MAY BE CORRELATED TO QUICKLY DIAGNOSE THE FAILURE. IF A
|
||||||
|
HARDWARE PROBLEM IS SUCH THAT THE ERROR MESSAGES, AFTER THE
|
||||||
|
FIRST ONE, HAVE NO MEANING (FIRST ERROR CAUSES ALL FOLLOWING
|
||||||
|
TESTS TO FAIL) SET THE LOOP ON ERROR SWITCH AND RESTART THE
|
||||||
|
TEST FROM THE BEGINNING. THE FIRST FAILURE WILL THEN CAUSE
|
||||||
|
THE PROGRAM TO ENTER A LOOP SUITABLE FOR SCOPING.
|
||||||
|
|
||||||
|
THE ERROR MESSAGE USED IN CONJUNCTION WITH THE LISTING AND
|
||||||
|
SCOPING IF NECESSARY SHOULD ALLOW THE FAILING CONPONENT
|
||||||
|
TO BE ISOLATED AND REPLACED AND/OR REPAIRED.
|
||||||
|
|
||||||
|
C. WHEN TAKING MARGINS, SET DATA SWITCHES 'NOPNT' AND 'DING'.
|
||||||
|
THIS WILL INHIBIT PRINTOUT BUT WILL ALLOW THE TELETYPE
|
||||||
|
BELL TO BE RUNG WHEN A ERROR OCCURS. IF THE MARGIN OBTAINED
|
||||||
|
IS UNACCEPTABLE, THE OPERATOR MAY REVERT TO STANDARD SWITCH
|
||||||
|
SETTINGS FOR DEBUGGING PURPOSES.
|
||||||
|
|
||||||
|
D. ERROR INFORMATION MAY BE OBTAINED QUICKLY BY PRINTING
|
||||||
|
ERRORS ON THE LINE PRINTER.
|
||||||
|
|
||||||
|
E. IN THE EVENT OF A PRINT ROUTINE FAILURE THE 'NOPNT' SWITCH
|
||||||
|
AND THE 'ERSTOP' SWITCH MAY BE SET TO INHIBIT PRINTOUT
|
||||||
|
BUT HALT THE PROGRAM POINTING TO THE ERROR.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 6
|
||||||
|
|
||||||
|
4.0 DATA SWITCH FUNCTIONS
|
||||||
|
|
||||||
|
SWITCH STATE FUNCTION
|
||||||
|
------ ----- --------
|
||||||
|
|
||||||
|
0 ABORT 0 NORMAL OPERATION
|
||||||
|
1 ABORT AT END OF PASS
|
||||||
|
|
||||||
|
1 RSTART NOT USED
|
||||||
|
|
||||||
|
2 TOTALS NOT USED
|
||||||
|
|
||||||
|
3 NOPNT 0 NORMAL TYPEOUT
|
||||||
|
1 INHIBIT ALL PRINT/TYPEOUT
|
||||||
|
(EXCEPT FORCED)
|
||||||
|
|
||||||
|
4 PNTLPT 0 NORMAL OUTPUT TO TTY
|
||||||
|
1 PRINT ALL DATA ON LPT
|
||||||
|
(LOGICAL DEVICE, USER MODE)
|
||||||
|
|
||||||
|
5 DING 0 NO FUNCTION
|
||||||
|
1 RING TTY BELL ON ERROR
|
||||||
|
|
||||||
|
6 LOOPER 0 PROCEED TO NEXT TEST
|
||||||
|
1 ENTER SCOPE LOOP ON TEST ERROR
|
||||||
|
|
||||||
|
7 ERSTOP 0 NO FUNCTION
|
||||||
|
1 HALT ON TEST ERROR
|
||||||
|
|
||||||
|
8 PALERS 0 PRINT ONLY FIRST ERROR WHEN LOOPING
|
||||||
|
1 PRINT ALL ERRORS, EVEN IF SAME ERROR
|
||||||
|
|
||||||
|
9 RELIAB NOT USED
|
||||||
|
|
||||||
|
10 TXTINH 0 PRINT FULL ERROR MESSAGES.
|
||||||
|
1 INHIBIT COMMENT PORTION OF
|
||||||
|
ERROR MESSAGES.
|
||||||
|
|
||||||
|
11 INHPAG 0 ALLOW PAGING AND TRAP ENABLE
|
||||||
|
1 INHIBIT PAGING AND TRAPPING
|
||||||
|
|
||||||
|
12 MODDVC NOT USED
|
||||||
|
|
||||||
|
13 INHCSH NOT USED
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 7
|
||||||
|
|
||||||
|
5.0 ERRORS
|
||||||
|
|
||||||
|
ERRORS ARE PRINTED ON THE TTY OR LINE PRINTER. THE ERROR
|
||||||
|
PRINTOUT CONTAINS THE TEST TITLE, THE PC OF THE FAILURE, ERROR
|
||||||
|
NUMBER AND THE CONTENTS OF AN APPLICABLE AC.
|
||||||
|
|
||||||
|
THE PC VALUE IS USEFUL IN RELATING THE FAILURE TO THE LISTING.
|
||||||
|
THE ERROR NUMBER IS PROVIDED SUCH THAT AN ERROR DICTIONARY MAY
|
||||||
|
BE MADE AT SOME FUTURE DATE.
|
||||||
|
|
||||||
|
WHEN THE SCOPE LOOP MODE IS USED THE MI REGISTER WILL COUNT
|
||||||
|
FOR EACH OCCURANCE OF AN ERROR. IF AN AUDIO INDICATION OF
|
||||||
|
A CONTINUING ERROR IS DESIRED THE 'DING' SWITCH MAY BE SET.
|
||||||
|
|
||||||
|
6.0 ITERATION COUNTER
|
||||||
|
|
||||||
|
THE ITERATION COUNT OF THE PROGRAM IS DISPLAYED IN THE MEMORY
|
||||||
|
INDICATORS (MI). THIS COUNT IS A DECREMENTING COUNT AND
|
||||||
|
INITIALLY STARTS AT -1 IN STAND-ALONE OPERATION.
|
||||||
|
|
||||||
|
7.0 CYCLE TIME
|
||||||
|
|
||||||
|
THE CYCLE TIME OF THE PROGRAM IS IN THE MILLISECOND RANGE AND
|
||||||
|
IS THEREFORE SUITABLE FOR TAKING MARGINS, VIBRATION TESTS,
|
||||||
|
ETC.
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 8
|
||||||
|
|
||||||
|
8.0 OPERATIONAL VARIATIONS
|
||||||
|
|
||||||
|
A. DIAGNOSTIC MONITOR
|
||||||
|
|
||||||
|
THE PROGRAM IS USABLE WITH THE DIAGNOSTIC MONITOR TO PROVIDE
|
||||||
|
RELIABILITY TESTS, ACCEPTANCE TESTS, AND/OR TO PROVIDE A
|
||||||
|
QUICK METHOD OF ISOLATION OF A FAULT TO A PARTICULAR AREA
|
||||||
|
OF THE PROCESSOR. CERTAIN PROCEDURES ARE USED WHEN THE
|
||||||
|
PROGRAM IS USED IN THIS MANNER. THEY ARE:
|
||||||
|
|
||||||
|
1. THE DIAGNOSTIC MONITOR TRANSFERS CONTROL TO THE PROGRAM
|
||||||
|
AND STARTS IT AT LOCATION 30002.
|
||||||
|
|
||||||
|
2. MONCTL - LOCATION 30043 IS USED AS THE DIAGNOSTIC MONITOR
|
||||||
|
CONTROL WORD.
|
||||||
|
LH = 0, STAND-ALONE OPERATION
|
||||||
|
-1, RUNNING UNDER DIAGNOSTIC MONITOR
|
||||||
|
|
||||||
|
RH = RIGHT HALF OF CONSOLE SWITCHES IF UNDER
|
||||||
|
DIAGNOSTIC MONITOR CONTROL.
|
||||||
|
|
||||||
|
B. USER MODE
|
||||||
|
|
||||||
|
TO OUTPUT THE PRINTED ERROR MESSAGES TO A USER SPECIFIED
|
||||||
|
DEVICE IN USER MODE, ASSIGN THE DESIRED OUTPUT DEVICE TO
|
||||||
|
DEVICE NAME 'DEV' AND SET SWITCH 'PNTLPT'. THE PHYSICAL
|
||||||
|
DEVICE USED CAN BE ANY DEVICE THAT CAN ACCEPT ASCII OUTPUT
|
||||||
|
FORMAT SUCH AS LPT, DSK, DTA, ETC. THE CORRESPONDING
|
||||||
|
OUTPUT FILE IS 'DAKAI.TMP'
|
||||||
|
|
||||||
|
EXAMPLE DEVICE ASSIGNMENT:
|
||||||
|
|
||||||
|
.ASSIGN DSK DEV
|
||||||
|
|
||||||
|
IN USER MODE THE PROGRAM WILL MAKE 1000(8) PASSES AND THEN
|
||||||
|
RETURN TO DIAMON COMMAND MODE.
|
||||||
|
|
||||||
|
MAINDEC-10-DAKAI.TXT
|
||||||
|
PAGE 9
|
||||||
|
|
||||||
|
8.0 OPERATIONAL VARIATIONS (CON'T)
|
||||||
|
|
||||||
|
THE OUTPUT FILE (IF USED) MAY THEN BE LISTED BY USING THE
|
||||||
|
NORMAL MONITOR COMMANDS (PRINT, LIST, TYPE, PIP, ETC.).
|
||||||
|
|
||||||
|
IF THE PROGRAM IS ABORTED BEFORE COMPLETION (BY ^C, ETC.) THE
|
||||||
|
OUTPUT FILE MAY BE CLOSED BY USING THE MONITOR 'REENTER'
|
||||||
|
COMMAND.
|
||||||
|
|
||||||
|
C. SYSTEM EXERCISER
|
||||||
|
|
||||||
|
START ADDRESS IS 30003. DATA SWITCHES ARE PRESTORED IN
|
||||||
|
'SWTEXR' LOC 30023.
|
||||||
|
|
||||||
|
9.0 MISCELLANEOUS
|
||||||
|
|
||||||
|
THE NON-EX-MEMORY AND PARITY STOP SWITCHES SHOULD BE RESET
|
||||||
|
(0). THESE ERRORS, ILLEGAL UUO'S AND OTHER ERRORS OF THIS
|
||||||
|
TYPE ARE HANDLED BY PRINTOUT ON THE TELETYPE.
|
||||||
|
|
||||||
|
10.0 LISTING
|
||||||
|
```
|
||||||
|
|
||||||
|
DAKAI.HST
|
||||||
|
---------
|
||||||
|
|
||||||
|
THIS IS A HISTORY OF THE DEVELOPMENT OF MAINDEC-10-DAKAI
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
PRODUCT CODE: MAINDEC-10-DAKAI
|
||||||
|
|
||||||
|
PRODUCT NAME: BASIC INSTRUCTION DIAGNOSTIC #9
|
||||||
|
|
||||||
|
DATE RELEASED: JANUARY 1977
|
||||||
|
|
||||||
|
VERSION: 0.2
|
||||||
|
|
||||||
|
UPDATE AUTHOR: JOHN R. KIRCHOFF
|
||||||
|
|
||||||
|
CHANGES MADE:
|
||||||
|
|
||||||
|
1. UPGRADE TO ALLOW COMPATABILITY WITH THE SUBROUTINE PACKAGE.
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
ORIGINAL VERSION: 0.1
|
||||||
|
|
||||||
|
ORIGINAL AUTHOR: RICHARD MALISKA
|
||||||
|
|
||||||
|
ORIGINAL RELEASE: 16-MAR-72
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
DAKAI.MAC
|
||||||
|
---------
|
||||||
|
|
||||||
|
[[Download](DAKAI.MAC.txt)]
|
||||||
|
|
||||||
|
{% highlight text %}
|
||||||
|
{% include_relative DAKAIM.MAC.txt %}
|
||||||
|
{% endhighlight %}
|
||||||
|
|
@ -288,7 +288,10 @@ class Macro10 {
|
||||||
/*
|
/*
|
||||||
* We know that local resources ending with ".MAC" are actually stored with a ".txt" extension.
|
* We know that local resources ending with ".MAC" are actually stored with a ".txt" extension.
|
||||||
*/
|
*/
|
||||||
if (sURL.indexOf(':') < 0 && sURL.slice(-4).toUpperCase() == ".MAC") sURL += ".txt";
|
if (sURL.indexOf(':') < 0) {
|
||||||
|
var sExt = sURL.slice(-4).toUpperCase();
|
||||||
|
if (".MAC.KLM".indexOf(sExt) >= 0) sURL += ".txt";
|
||||||
|
}
|
||||||
|
|
||||||
Web.getResource(sURL, null, true, function processMacro10(sFile, sResource, nErrorCode) {
|
Web.getResource(sURL, null, true, function processMacro10(sFile, sResource, nErrorCode) {
|
||||||
if (nErrorCode) {
|
if (nErrorCode) {
|
||||||
|
|
@ -521,7 +524,7 @@ class Macro10 {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.chASCII != null) {
|
if (this.chASCII != null) {
|
||||||
sLine = this.addASCII(sLine);
|
sLine = this.defASCII(sLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
var fParse = true;
|
var fParse = true;
|
||||||
|
|
@ -603,7 +606,7 @@ class Macro10 {
|
||||||
*/
|
*/
|
||||||
var sLiteral = this.getLiteral(sOperands);
|
var sLiteral = this.getLiteral(sOperands);
|
||||||
if (sLiteral) {
|
if (sLiteral) {
|
||||||
sOperands = sOperands.replace(sLiteral, this.addMacro(Macro10.PSEUDO_OP.LITERAL, this.getLiteral(sRemainder)));
|
sOperands = sOperands.replace(sLiteral, this.defMacro(Macro10.PSEUDO_OP.LITERAL, this.getLiteral(sRemainder)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -620,39 +623,48 @@ class Macro10 {
|
||||||
case Macro10.PSEUDO_OP.ASCII:
|
case Macro10.PSEUDO_OP.ASCII:
|
||||||
case Macro10.PSEUDO_OP.ASCIZ:
|
case Macro10.PSEUDO_OP.ASCIZ:
|
||||||
case Macro10.PSEUDO_OP.SIXBIT:
|
case Macro10.PSEUDO_OP.SIXBIT:
|
||||||
this.addASCII(sRemainder);
|
this.defASCII(sRemainder);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Macro10.PSEUDO_OP.END:
|
case Macro10.PSEUDO_OP.END:
|
||||||
this.addEND(sOperands);
|
this.defEND(sOperands);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Macro10.PSEUDO_OP.EXP:
|
case Macro10.PSEUDO_OP.EXP:
|
||||||
this.addEXP(sOperands);
|
this.defEXP(sOperands);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Macro10.PSEUDO_OP.LOC:
|
||||||
|
this.defLocation(sOperands);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Macro10.PSEUDO_OP.XWD:
|
case Macro10.PSEUDO_OP.XWD:
|
||||||
this.addXWD(sOperands);
|
this.defXWD(sOperands);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Macro10.PSEUDO_OP.DEFINE:
|
case Macro10.PSEUDO_OP.DEFINE:
|
||||||
case Macro10.PSEUDO_OP.IFE:
|
case Macro10.PSEUDO_OP.IFE:
|
||||||
|
case Macro10.PSEUDO_OP.IFG:
|
||||||
|
case Macro10.PSEUDO_OP.IFL:
|
||||||
case Macro10.PSEUDO_OP.IFN:
|
case Macro10.PSEUDO_OP.IFN:
|
||||||
case Macro10.PSEUDO_OP.IRP:
|
case Macro10.PSEUDO_OP.IRP:
|
||||||
case Macro10.PSEUDO_OP.IRPC:
|
case Macro10.PSEUDO_OP.IRPC:
|
||||||
case Macro10.PSEUDO_OP.OPDEF:
|
case Macro10.PSEUDO_OP.OPDEF:
|
||||||
case Macro10.PSEUDO_OP.REPEAT:
|
case Macro10.PSEUDO_OP.REPEAT:
|
||||||
this.addMacro(sOperator, sRemainder);
|
this.defMacro(sOperator, sRemainder);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Macro10.PSEUDO_OP.LALL: // TODO
|
case Macro10.PSEUDO_OP.LALL: // TODO
|
||||||
|
case Macro10.PSEUDO_OP.LIST: // TODO
|
||||||
|
case Macro10.PSEUDO_OP.NOSYM: // TODO
|
||||||
case Macro10.PSEUDO_OP.PAGE: // TODO
|
case Macro10.PSEUDO_OP.PAGE: // TODO
|
||||||
case Macro10.PSEUDO_OP.SUBTTL: // TODO
|
case Macro10.PSEUDO_OP.SUBTTL: // TODO
|
||||||
case Macro10.PSEUDO_OP.TITLE: // TODO
|
case Macro10.PSEUDO_OP.TITLE: // TODO
|
||||||
|
case Macro10.PSEUDO_OP.XLIST: // TODO
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
this.addWord(sOperator, sSeparator, sOperands);
|
this.defWord(sOperator, sSeparator, sOperands);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -762,6 +774,18 @@ class Macro10 {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Macro10.PSEUDO_OP.IFG:
|
||||||
|
if (macro.nOperand > 0) {
|
||||||
|
this.parseText(macro.sText);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Macro10.PSEUDO_OP.IFL:
|
||||||
|
if (macro.nOperand < 0) {
|
||||||
|
this.parseText(macro.sText);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case Macro10.PSEUDO_OP.IFN:
|
case Macro10.PSEUDO_OP.IFN:
|
||||||
if (macro.nOperand) {
|
if (macro.nOperand) {
|
||||||
this.parseText(macro.sText);
|
this.parseText(macro.sText);
|
||||||
|
|
@ -915,7 +939,7 @@ class Macro10 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (fQuotes) continue;
|
if (fQuotes) continue;
|
||||||
if (sDelim.indexOf(ch) >= 0) {
|
if (!cNesting && sDelim.indexOf(ch) >= 0) {
|
||||||
i--;
|
i--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -963,6 +987,12 @@ class Macro10 {
|
||||||
if (nLocation === undefined) {
|
if (nLocation === undefined) {
|
||||||
nLocation = (this.nLocationScope >= 0? this.nLocationScope : this.nLocation);
|
nLocation = (this.nLocationScope >= 0? this.nLocationScope : this.nLocation);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* The SIXBIT (and presumably ASCII; not sure about ASCIZ) pseudo-ops can also be used in expressions
|
||||||
|
* (or at least assignments), so we check for those in the given expression and convert them to quoted
|
||||||
|
* sequences that the debugger's parseExpression() understands.
|
||||||
|
*/
|
||||||
|
sOperand = sOperand.replace(/SIXBIT\s*(\S)(.*?)\1/g, "'$2'").replace(/ASCII\s*(\S)(.*?)\1/g, '"$2"');
|
||||||
/*
|
/*
|
||||||
* Check for the "period" syntax that MACRO-10 uses to represent the value of the current location.
|
* Check for the "period" syntax that MACRO-10 uses to represent the value of the current location.
|
||||||
* The Debugger's parseInstruction() method understands that syntax, but its parseExpression() method
|
* The Debugger's parseInstruction() method understands that syntax, but its parseExpression() method
|
||||||
|
|
@ -1068,21 +1098,23 @@ class Macro10 {
|
||||||
sReserved = match[0];
|
sReserved = match[0];
|
||||||
var sLabel = match[1];
|
var sLabel = match[1];
|
||||||
var name = '?' + sLabel;
|
var name = '?' + sLabel;
|
||||||
if (this.tblMacros[name] !== undefined) {
|
/*
|
||||||
this.error("reserved symbol redefined: " + sReserved);
|
* We now allow reserved symbols to reused (which would make sense if they appeared in a macro).
|
||||||
|
*/
|
||||||
|
if (this.tblMacros[name] === undefined) {
|
||||||
|
var aParms, aDefaults, aValues;
|
||||||
|
aParms = aDefaults = aValues = [];
|
||||||
|
this.tblMacros[name] = {
|
||||||
|
name: name,
|
||||||
|
nOperand: Macro10.MACRO_OP.RESERVED,
|
||||||
|
aParms,
|
||||||
|
aDefaults,
|
||||||
|
aValues,
|
||||||
|
sText: sLabel + ": 0",
|
||||||
|
nLine: this.nLine
|
||||||
|
};
|
||||||
|
this.aVariables.push(name);
|
||||||
}
|
}
|
||||||
var aParms, aDefaults, aValues;
|
|
||||||
aParms = aDefaults = aValues = [];
|
|
||||||
this.tblMacros[name] = {
|
|
||||||
name: name,
|
|
||||||
nOperand: Macro10.MACRO_OP.RESERVED,
|
|
||||||
aParms,
|
|
||||||
aDefaults,
|
|
||||||
aValues,
|
|
||||||
sText: sLabel + ": 0",
|
|
||||||
nLine: this.nLine
|
|
||||||
};
|
|
||||||
this.aVariables.push(name);
|
|
||||||
}
|
}
|
||||||
return sReserved;
|
return sReserved;
|
||||||
}
|
}
|
||||||
|
|
@ -1125,13 +1157,13 @@ class Macro10 {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* addASCII(sOperands)
|
* defASCII(sOperands)
|
||||||
*
|
*
|
||||||
* @this {Macro10}
|
* @this {Macro10}
|
||||||
* @param {string} sOperands
|
* @param {string} sOperands
|
||||||
* @return {string} (returns whatever portion of the string was not part of an ASCII pseudo-op)
|
* @return {string} (returns whatever portion of the string was not part of an ASCII pseudo-op)
|
||||||
*/
|
*/
|
||||||
addASCII(sOperands)
|
defASCII(sOperands)
|
||||||
{
|
{
|
||||||
var sRemain = sOperands;
|
var sRemain = sOperands;
|
||||||
if (this.chASCII == null) {
|
if (this.chASCII == null) {
|
||||||
|
|
@ -1159,7 +1191,7 @@ class Macro10 {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* addMacro(sOperator, sOperands)
|
* defMacro(sOperator, sOperands)
|
||||||
*
|
*
|
||||||
* If sOperator is DEFINE (or OPDEF), then a macro definition is expected. If it's REPEAT, then we're
|
* If sOperator is DEFINE (or OPDEF), then a macro definition is expected. If it's REPEAT, then we're
|
||||||
* starting a REPEAT block instead.
|
* starting a REPEAT block instead.
|
||||||
|
|
@ -1178,7 +1210,7 @@ class Macro10 {
|
||||||
* @param {string} sOperands
|
* @param {string} sOperands
|
||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
addMacro(sOperator, sOperands)
|
defMacro(sOperator, sOperands)
|
||||||
{
|
{
|
||||||
var i, match, name, nOperand, aParms, aDefaults, aValues, iMatch;
|
var i, match, name, nOperand, aParms, aDefaults, aValues, iMatch;
|
||||||
|
|
||||||
|
|
@ -1192,7 +1224,7 @@ class Macro10 {
|
||||||
* (parenthesized) parameters exist on the same line, but the (angle-bracketed)
|
* (parenthesized) parameters exist on the same line, but the (angle-bracketed)
|
||||||
* definition can continue on for multiple lines.
|
* definition can continue on for multiple lines.
|
||||||
*/
|
*/
|
||||||
match = sOperands.match(/([A-Z$%.][0-9A-Z$%.]*)\s*(\([^)]*\)|)\s*(<|)([\s\S]*)/i);
|
match = sOperands.match(/([A-Z$%.][0-9A-Z$%.]*)\s*(\([^)]*\)|)\s*,?\s*(<|)([\s\S]*)/i);
|
||||||
if (!match) {
|
if (!match) {
|
||||||
this.error("unrecognized " + sOperator + ": " + sOperands);
|
this.error("unrecognized " + sOperator + ": " + sOperands);
|
||||||
return sOperands;
|
return sOperands;
|
||||||
|
|
@ -1201,7 +1233,7 @@ class Macro10 {
|
||||||
/*
|
/*
|
||||||
* If this macro has defined parameters, parse them (and any defaults) now.
|
* If this macro has defined parameters, parse them (and any defaults) now.
|
||||||
*/
|
*/
|
||||||
if (match[2]) {
|
if (match[2] && match[2] != ',') {
|
||||||
aParms = this.getValues(match[2], true);
|
aParms = this.getValues(match[2], true);
|
||||||
aDefaults = this.getDefaults(aParms);
|
aDefaults = this.getDefaults(aParms);
|
||||||
}
|
}
|
||||||
|
|
@ -1343,44 +1375,6 @@ class Macro10 {
|
||||||
return sRemain;
|
return sRemain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* addEND()
|
|
||||||
*
|
|
||||||
* Processes the END pseudo-op.
|
|
||||||
*
|
|
||||||
* @this {Macro10}
|
|
||||||
* @param {string} sOperands
|
|
||||||
*/
|
|
||||||
addEND(sOperands)
|
|
||||||
{
|
|
||||||
if (!sOperands) {
|
|
||||||
this.nAddrStart = this.nAddr;
|
|
||||||
} else {
|
|
||||||
this.nAddrStart = this.parseExpression(sOperands, true);
|
|
||||||
if (this.nAddrStart === undefined) {
|
|
||||||
this.error("unrecognized expression: " + sOperands);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* addEXP()
|
|
||||||
*
|
|
||||||
* Processes the EXP pseudo-op.
|
|
||||||
*
|
|
||||||
* @this {Macro10}
|
|
||||||
* @param {string} sOperands
|
|
||||||
*/
|
|
||||||
addEXP(sOperands)
|
|
||||||
{
|
|
||||||
var w = this.parseExpression(sOperands, true);
|
|
||||||
if (w !== undefined) {
|
|
||||||
this.genWord(w, this.dbg.sUndefined);
|
|
||||||
} else {
|
|
||||||
this.error("unrecognized expression: " + sOperands);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* addSymbol(name, value, nType)
|
* addSymbol(name, value, nType)
|
||||||
*
|
*
|
||||||
|
|
@ -1416,14 +1410,81 @@ class Macro10 {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* addWord(sOperator, sSeparator, sOperands)
|
* defEND()
|
||||||
|
*
|
||||||
|
* Processes the END pseudo-op.
|
||||||
|
*
|
||||||
|
* @this {Macro10}
|
||||||
|
* @param {string} sOperands
|
||||||
|
*/
|
||||||
|
defEND(sOperands)
|
||||||
|
{
|
||||||
|
if (!sOperands) {
|
||||||
|
this.nAddrStart = this.nAddr;
|
||||||
|
} else {
|
||||||
|
this.nAddrStart = this.parseExpression(sOperands, true);
|
||||||
|
if (this.nAddrStart === undefined) {
|
||||||
|
this.error("unrecognized expression: " + sOperands);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* defEXP()
|
||||||
|
*
|
||||||
|
* Processes the EXP pseudo-op.
|
||||||
|
*
|
||||||
|
* @this {Macro10}
|
||||||
|
* @param {string} sOperands
|
||||||
|
*/
|
||||||
|
defEXP(sOperands)
|
||||||
|
{
|
||||||
|
var w = this.parseExpression(sOperands, true);
|
||||||
|
if (w !== undefined) {
|
||||||
|
this.genWord(w, this.dbg.sUndefined);
|
||||||
|
} else {
|
||||||
|
this.error("unrecognized expression: " + sOperands);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* defLocation(sOperands)
|
||||||
|
*
|
||||||
|
* Processes the LOC pseudo-op.
|
||||||
|
*
|
||||||
|
* @this {Macro10}
|
||||||
|
* @param {string} sOperands
|
||||||
|
*/
|
||||||
|
defLocation(sOperands)
|
||||||
|
{
|
||||||
|
this.nLocation = this.parseExpression(sOperands) || 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* defXWD()
|
||||||
|
*
|
||||||
|
* Processes the XWD pseudo-op.
|
||||||
|
*
|
||||||
|
* Since the XWD pseudo-op appears to be equivalent to two values separated by two commas, which defEXP() must also
|
||||||
|
* support, we can piggy-back on defExp().
|
||||||
|
*
|
||||||
|
* @this {Macro10}
|
||||||
|
* @param {string} sOperands
|
||||||
|
*/
|
||||||
|
defXWD(sOperands)
|
||||||
|
{
|
||||||
|
this.defEXP(sOperands.replace(",", ",,"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* defWord(sOperator, sSeparator, sOperands)
|
||||||
*
|
*
|
||||||
* @this {Macro10}
|
* @this {Macro10}
|
||||||
* @param {string} sOperator
|
* @param {string} sOperator
|
||||||
* @param {string} sSeparator
|
* @param {string} sSeparator
|
||||||
* @param {string} sOperands
|
* @param {string} sOperands
|
||||||
*/
|
*/
|
||||||
addWord(sOperator, sSeparator, sOperands)
|
defWord(sOperator, sSeparator, sOperands)
|
||||||
{
|
{
|
||||||
var w = -1;
|
var w = -1;
|
||||||
|
|
||||||
|
|
@ -1445,22 +1506,6 @@ class Macro10 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* addXWD()
|
|
||||||
*
|
|
||||||
* Processes the XWD pseudo-op.
|
|
||||||
*
|
|
||||||
* Since the XWD pseudo-op appears to be equivalent to two values separated by two commas, which addEXP() must also
|
|
||||||
* support, we can piggy-back on addExp().
|
|
||||||
*
|
|
||||||
* @this {Macro10}
|
|
||||||
* @param {string} sOperands
|
|
||||||
*/
|
|
||||||
addXWD(sOperands)
|
|
||||||
{
|
|
||||||
this.addEXP(sOperands.replace(",", ",,"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* genASCII()
|
* genASCII()
|
||||||
*
|
*
|
||||||
|
|
@ -1566,18 +1611,24 @@ Macro10.PSEUDO_OP = {
|
||||||
END: "END",
|
END: "END",
|
||||||
EXP: "EXP",
|
EXP: "EXP",
|
||||||
IFE: "IFE",
|
IFE: "IFE",
|
||||||
|
IFG: "IFG",
|
||||||
|
IFL: "IFL",
|
||||||
IFN: "IFN",
|
IFN: "IFN",
|
||||||
IRP: "IRP",
|
IRP: "IRP",
|
||||||
IRPC: "IRPC",
|
IRPC: "IRPC",
|
||||||
LALL: "LALL",
|
LALL: "LALL",
|
||||||
LITERAL: "LITERAL", // this is a pseudo-pseudo-op, used for internal purposes
|
LITERAL: "LITERAL", // this is a pseudo-pseudo-op, used for internal purposes
|
||||||
|
LIST: "LIST",
|
||||||
|
LOC: "LOC",
|
||||||
|
NOSYM: "NOSYM",
|
||||||
OPDEF: "OPDEF",
|
OPDEF: "OPDEF",
|
||||||
PAGE: "PAGE",
|
PAGE: "PAGE",
|
||||||
REPEAT: "REPEAT",
|
REPEAT: "REPEAT",
|
||||||
SIXBIT: "SIXBIT",
|
SIXBIT: "SIXBIT",
|
||||||
SUBTTL: "SUBTTL",
|
SUBTTL: "SUBTTL",
|
||||||
TITLE: "TITLE",
|
TITLE: "TITLE",
|
||||||
XWD: "XWD"
|
XWD: "XWD",
|
||||||
|
XLIST: "XLIST"
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue