IMD 1.16: 31/08/2008 23:48:26 f06903 4/10s quality control diagnostic (qcd4s) source/jcl diskette 1 of 2 84-93069-03 a0    @0|)v1uo)  " }jA cMIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MCC790808192507A3790808192507 790808192507F06903 VOL   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIM@jjggg@ o G`k򞽢_C# b# }B u[ ]e JRiCp@=<; G9P@ G=y;<": 06OS:: SYS :B⃮ ކIIڣ5; 㜀@+kUƀy@NyC! # ' D+'!ă B # i { 9:7X@AKN1 # ܞ}KΞeE 790808192507790808192507820106092038e@ 790808192507790808192507820106092054eD790808192507790808192507790808192507e790808192507790808192507790808192507790808192507790808192507790808192507eJ]7908091306000079080913060425de]7908092208110079080922081400820106100244deN 7908091407137579080914071825820106092152d  eT 7908091407360079080914074400820106092142d e[7908091407590079080914080475d e3d^7908110030195079081100303350820106092344d eddXV;7908091411190079080914131300820106094100d          . QCD4SSOURCEHLPQCD4S JCLQCD4S MAC M410S MAC M410S HLP QCD4SNUC ASM QCD4SPART1 ASM  / ** QCD4SSOURCE.HLP ** / 4/10S QUALITY CONTROL DIAGNOSTIC (QCD4S) / SOURCE/JCL DISKETTES / / VOLUME 1 QCD4S.JCL - ASSEMBLY AND LINK JCL FILE / / QCD4S.MAC - QCD4S MACRO FILE / / M410S.MAC - 4/10S MACRO FILE / / M410S.HLP - 4/10S MACRO HELP FILE / / QCD4SNUC.ASM - QCD4S NUCLEUS SOURCE FILE / / QCD4SPART1.ASM - QCD4S PART 1 SOURCE FILE / / / VOLUME 2 QCD4SPART2.ASM - QCD4S PART 2 SOURCE FILE / / QCD4SPARTX.ASM - QCD4S PART X SOURCE FILE / / QCD4SEND.ASM - QCD4S END MODULE SOURCE FILE / / QCD4SMAIN.OBJ - NUCLEUS + PART 1 + PART 2 + / PARTX OBJECT FILE / / QCD4SEND.OBJ - QCD4S END MODULE OBJECT FILE / / DEBUGS.OBJ - DEBUG4 OBJECT FILE (C0) / / SLVUTL.OBJ - SLAVE UTILITY ROUTINE OBJECT FILE (A0) / / SLVUTLOBJ.HLP - SLAVE UTILITY ROUTINE OBJECT HELP FILE / / QCD4S.BIN - QCD4S LINKED BINARY FILE / / ** NOTE - QCD4S.JCL ASSUMES VOLUME 1 IS DF0, VOLUME 2 IS / DF1, AND ASSUMES MACRO AND LINK ON THE SF UNIT. AIN.OBJ - NUCLEUS + PART 1 + PART 2 + / PARTX OBJECT FILE / / QCD4SEND.OBJ - QCD4S END MODULE OBJECT FILE / / DEBUGS.OBJ - DEBUG4 OBJECT FILE (C0) / / SLVUTL.OBJ - SLAVE UTILITY ROUTINE OBJECT FILE (A0) / / SLVUTLOBJ.HLP - SLAVE UTILITY ROUTINE OBJECT HELP FILE / / QCD4S.BIN - QCD4S LINKED BINARY FILE / / ** NOTE - QCD4S.JCL ASSUMACRO DF1.QCD4SMAIN.OBJ=DF0.QCD4SNUC.ASM(D=DF0.M410S(S)+DF0.QCD4S(S), SAVE,LISTING=DM1.QCD4SMAIN.LST)+ DF0.QCD4SPART1(SAVE)+ DF1.QCD4SPART2(SAVE)+ DF1.QCD4SPARTX MACRO DF1.QCD4SEND.OBJ=DF1.QCD4SEND.ASM(LISTING=DM1.QCD4SEND.LST) AS XX=DM1 AS LO=DM1.QCD4SMAP.LST LINK DF1.QCD4S.BIN=DF1.QCD4SMAIN.OBJ(NH,AB=0,XA=110)+ DF1.SLVUTL.OBJ(UL)+ DF1.DEBUGS.OBJ(UL)+ DF1.QCD4SEND.OBJ(UL) AS LO=LP / / ENTER C FOR LISTING / PAUSE CO LP=DM1.QCD4SMAIN.LST(FL) CO LP=DM1.QCD4SEND.LST(FL) CO LP=DM1.QCD4SMAP.LST(FL) JO   TITL 4/10S QCD NM4 HOST (93069-10A0) TITL MACROS * BREAK EQU 1 ****** * E R R O R M A C R O * * THIS MACRO IS USED TO INDICATE AN ERROR * IT WILL EITHER, DISPLAY THE 'P' REGISTER * VALUE AND HALT (OPH) OR JUMP TO DEBUG * (JST *0) A USER MUST EXAMINE THE * FOLLOWING MACRO DEFINITION CODING TO * DETERMINE WHICH OF THE OPTIONS ARE CODED * INTO THE MACRO OR VIEW THE IN-LINE CODE * WHERE ERROR: IS CALLED TO DETERMINE THE * OPTION. ****** XMACRO ERROR: HLT #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 SPACE BREAK ENDM * * ****** * L O O P P A T C H M A C R O * * THIS MACRO IS USED TO GENERATE A PATCH * INSTRUCTION ON THE PROGRAM LISTING TO * SHOW A USER THE BINARY VALUE TO PLACE AT * THE LOCATION INDICATED ON THE LISTING. THE * PATCH VALUE IS DISPLAYED ON THE LISTING * BUT IS OVERLAYED WITH A NOP INSTRUCTION * SO THAT DURING EXECUTION A NOP WILL BE * EXECUTED (NOT THE JUMP INSTRUCTION THAT * IS DISPLAYED ON THE LISTING). THIS MACRO * WILL INCREMENT THE PROGRAM TEST COUNTER * CELL ONCE EACH TIME IT IS USED. * * A SAMPLE CALL FOLLOWS: * * PATCHX LABEL NAME OF LOOP POINT ******  XMACRO PATCHX JMP #1 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH 'NOP'  IMS PCOUNT BUMP PROG. TEST COUNTER SPACE BREAK ENDM * ****** * T E S T L O A D R E G M A C R O * * THIS MACRO COPIES THE REGISTER SPECIFIED * BY PARAMETER #1 TO THE REGISTER SPECIFIED * BY PARAMETER #3. IT THEN CHECKS THAT * THE VALUE MOVED TO THE REGISTER SPECIFIED * BY PARAMETER #3 CONTAINS THE EXPECTED * VALUE BY MOVING THAT VALUE TO EITHER A OR Q * THEN COMPARING IT TO THE VALUE SPECIFIED * BY PARAMETER #4 (MUST BE LABEL-CANNOT BE *  A VALUE). * * A SAMPLE CALL FORMAT FOLLOWS: * * TRLD: REG,A OR Q,REG,LABEL NAME OF VALUE * * PARAMETER #2 MUST BE EITHER A OR Q * PARAMETERS #1 AND #3 CAN BE ANY * REGISTER. VALUE MUST BE A BINARY * NUMBER (0-:FFFF) ******  XMACRO TRLD: SPACE BREAK * TRLD: #1,#2,#3,#4 COPY #1,#3 COPY #3,#2 CSK #2,#4 TEST THAT #3 = EXPECTED VALUE NOP ERROR: COPY,-#1-,TO,-#3-,FAILED COPY =0,#2 CLEAR -#2- ENDM * ****** * G E N E R A T E L P O O L M A C R O * * THIS MACRO EXECUTES A JUMP AROUND AN LPOOL. * * SAMPLE CALL: * *  GLPOL: ****** XMACRO GLPOL: LP::L SET $ SET UP LABEL TO REPLACE NOP WITH JMP INST. NOP  RESERVE SPACE FOR JMP INSTRUCTION LPOOL LP::L1 SET $ SET UP LABEL AT END OF LPOOL ORG LP::L GO BACK TO OVERLAY NOP WITH JMP INST. JMP LP::L1 JUMP TO LABEL AT END OF LPOOL ORG LP::L1 CONINUE AT END OF LPOOL ENDM * SAVE END * * THIS MACRO EXECUTES A JUMP AROUND AN LPOOL. * * SAMPLE CALL: * * COPY MACRO IFF #(?)=2 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=2 TEMP: SYMATT #(2) TEMP: SET TEMP:**:2000 IFT TEMP: KPARM: SET #(1,'(K)') IFF KPARM: @COPY #(1),#(2) ENDC IFT KPARM: LOAD:K #(1),#(2) ENDC ENDC IFF TEMP: KPARM: SET #(2,'  (K)') IFF KPARM: @COPY #(1),#(2) ENDC IFT KPARM: STOR:K #(2),#(1) ENDC ENDC ENDC ENDM TITL LOAD:K MACRO :1E00 STOR:K MACENT :1E80 SKEL: SET #(0) BPARM: SET #(1,'*') IFT BPARM:=1 SKEL: SET SKEL:++:0040 ENDC IFF BPARM:=1 BPARM: SET 0 ENDC BPARM: SET BPARM:+1 KPARM: SET KPARM:-1 D6: SET #(1,BPARM:,KPARM:) ERR: SET D6:<0 ERR: SET D6:>63++ERR: IFT ERR: D6: SET 0 NOTE E,' ##(1,BPARM:,KPARM:) OUT OF RANGE' ENDC SKEL: SET SKEL:++D6: ERR: SYMATT #(2) ERR: SET ERR:**:2000--:2000 D6: SYMVAL #(2) ERR: SET D6:**:0001++ERR: IFT ERR: D6: SET 0 NOTE E,' ##(2) MUST BE A,Q,X OR Y' ENDC IFF ERR: WORD D6://12++SKEL: ENDC ENDM TITL RESTS MACRO :5C05 IFF #(?)=1 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=1 WORD #(0) WORD #(1) ENDC ENDM TITL SAVES MACRO :0F0E IFF #(?)=2 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=2 ERR: SYMATT #(1) ERR: SET ERR:**:8000--:8000 D6: SYMVAL #(1) ERR: SET D6:>15++ERR: ERR: SET D6:<0++ERR: IFT ERR: NOTE E,' ##(1) OUT OF RANGE' ENDC IFF ERR: WORD D6://4++#(0) WORD #(2) ENDC ENDC ENDM TITL OSCDR MACRO :0300 ISCDR MACENT :0301 IFF #(?)=1 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=1 ERR: SYMATT #(1) ERR: SET ERR:**:2000--:2000 IFT ERR: NOTE E,' ##(1) MUST BE A REGISTER' ENDC IFF ERR: REG: SYMVAL #(1) WORD REG://4++#(0) ENDC ENDC ENDM TITL OMSCDR MACRO :0302 IMSCDR MACENT :0303 STOP MACENT :0304 SSTEP MACENT :0305 START MACENT :0306 XLB MACENT :5C06 MVB MACENT :5C46 XLBS MACENT :5C86 SCM MACENT :5CC6 WORD #(0) ENDM TITL MSB MACRO :5C08 MSKS MACENT :5C09 MRB MACENT :5C0A MSKR MACENT :5C0B MCB MACENT :5C0C MSKC MACENT :5C0D MSKO MACENT :5C0E MSKZ MACENT :5C0F IFF #(?)=2 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=2 ERR: SYMATT #(1) ERR: SET ERR:**:8000--:8000 D6: SYMVAL #(1) ERR: SET D6:>15++ERR: ERR: SET D6:<0++ERR: IFT ERR: NOTE E,' ##(1) OUT OF RANGE' ENDC IFF ERR: WORD D6://4++#(0) M4D12 #(2) ENDC ENDC ENDM TITL POP MACRO :0F07 IFT #(?)=0 @POP ENDC IFT #(?)>1 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=1 ERR: SYMATT #(1) ERR: SET ERR:**:2000--:2000 REG: SYMVAL #(1) ERR: SET REG:**:0001++ERR: IFT ERR: NOTE E,' ##(1) MUST BE A,Q,X OR Y' ENDC IFF ERR: WORD REG://12++#(0) ENDC ENDC ENDM TITL PUSH MACRO :0F05 IFF #(?)=1 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=1 ERR: SYMATT #(1) ERR: SET ERR:**:2000--:2000 IFT ERR: @PUSH #(1) ENDC IFF ERR: REG: SYMVAL #(1) ERR: SET REG:**:0001++ERR: IFT ERR: NOTE E,' ##(1) MUST BE A,Q,X OR Y' ENDC IFF ERR: WORD REG://12++#(0) ENDC ENDC ENDC ENDM TITL ALLOC MACRO :0F04 IFF #(?)=1 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=1 TEMP: SET 0 ERR: SYMATT #(1) ERR: SET ERR:**:8000--:8000 D6: SYMVAL #(1) ERR: SET D6:>16++ERR: ERR: SET D6:<-16++ERR: ERR: SET D6:=0++ERR: IFT ERR: NOTE E,' ##(1) OUT OF RANGE' ENDC IFF ERR: IFT D6:<0 TEMP: SET 2 D6: SET 0-D6: ENDC D6: SET D6:-1//4 WORD D6:++TEMP:++#(0) ENDC ENDC ENDM SAVE END ++ERR: IFT ERR: NOTE E,' ##(1) MUST BE A,Q,X OR Y' ENDC IFF ERR: WORD REG://12++#(0) ENDC ENDC ENDC ENDM TITL ALLOC MACRO :0F04 IFF #(?)=1 NOTE E,' WRONG NUMBER OF ARGUMENTS' ENDC IFT #(?)=1 TEMP: SET 0 ERR: SYMATT #(1) ERR: SET ERR:**:8000--:8000 D6: SYMVAL #(1) ERR: SET D6:>16++ERR: ERR: SET D6:<-16++ERR: ERR: SET D6:=0++ERR: IFT ERR: NOTE   The 4/10S macro file is used to create the instructions which are only used on the 4/10S. These include the following:  label COPY 4Reg,Sym(K) label COPY Sym(K),4Reg label ALLOC val label PUSH 4Reg label POP 4Reg  label RESTS label SAVES label OSCDR 8Reg label ISCDR 8Reg label OMSCDR label IMSCDR label STOP label SSTEP label START label XLB label XLBS label MVB label SCM label MSB label MSKS label MRB label MSKR label MCB label MSKC label MSKO label MSKZ These instructions are described in detail in the 4/10S user's manual. ) label COPY Sym(K),4Reg label ALLOC val label PUSH 4Reg label POP 4Reg  label RESTS label SAVES label OSCDR 8Reg label ISCDR 8Reg label OMSCDR label IMSCDR label STOP label SSTEP label START label XLB label XLBS label MVB label SCM label MSB label MSKS label MMACRO DF1.QCD4SMAIN.OBJ=DF0.QCD4SNUC.ASM(D=DF0.M410S(S)+DF0.QCD4S(S), SAVE,LISTING=DM1.QCD4SMAIN.LST)+ DF0.QCD4SPART1(SAVE)+ DF1.QCD4SPART2(SAVE)+ DF1.QCD4SPARTX MACRO DF1.QCD4SEND.OBJ=DF1.QCD4SEND.ASM(LISTING=DM1.QCD4SEND.LST) AS XX=DM1 AS LO=DM1.QCD4SMAP.LST LINK DF1.QCD4S.BIN=DF1.QCD4SMAIN.OBJ(NH,AB=0,EX=110)+ DF1.SLVUTL.OBJ(UL)+ DF1.DEBUGS.OBJ(UL)+ DF1.QCD4SEND.OBJ AS LO=LP / / ENTER C FOR LISTING / PAUSE CO LP=DM1.QCD4SMAIN.LST(FL) CO LP=DM1.QCD4SEND.LST(FL) CO LP=DM1.QCD4SMAP.LST(FL) JO  1,0 TEMP02 RES 1,0 TEMP RES 1,0 ATEMP RES 1,0 XTEMP RES 1,0 QTEMP RES 1,0 YTEMP RES 1,0 KTEMP RES 1,0 LTEMP RES 1,0 PT00FF WORD :00FF DV3FF0 WORD :3FF0 DV3FF1 WORD :3FF1 DV3FF2 WORD :3FF2 PT5555 WORD :5555 DV5555 EQU PT5555 PT55AA WORD :55AA PT6666 WORD :6666 PT7FFF WORD :7FFF PT8000 WORD :8000 PTAA55 WORD :AA55 DVAAAA EQU PTAAAA PTAAAA WORD :AAAA PTF0F0 WORD :F0F0 PTFFFE WORD :FFFE PTFFFF WORD :FFFF DVFFFF EQU PTFFFF STATSV WORD :0150 4/10S STATUS STHOST WORD :1110 HOST STATUS PCOUNT RES 1,0 PART 1 SECTION COUNTER COUNT1 RES  1,0 4/10S #1 PASS COUNTER COUNT2 RES 1,0 4/10S #2 PASS COUNTER COUNT3 RES 1,0 4/10S #3 PASS COUNTER COUNT4 RES 1,0 4/10S #4 PASS COUNTER DEMAND RES 1,0 TEST SELECTIONS JMP1 WORD :9F80 JMP *$+1 RELATIVE JST1 WORD :BF80 JST *$+1 RELATIVE HLT1 HLT HALT SCIR WORD :100 SCDR WORD :101 SCMAR WORD :102 FLAG1 RES 1,0 'PUBLIC MEMORY IN USE' FLAG SLAVES RES 1,0 NUMBER OF 4/10S'S IN SYSTEM MEMSLV RES 1,0 # OF 4/10S CURRENTLY EXECUTING MEMORY TEST SLAVPF RES 1,0 # OF 4/10S EXECUTING MEM TEST DURING POWER-FAIL PUPCTH RES 1,0 HOST POWER-UP COUNT PDNCTH RES 1,0 HOST POWER-DOWN COUNT PDNCT1 RES 1,0 4/10S #1 POWER-DOWN COUNT PDNCT2 RES 1,0 4/10S #2 POWER-DOWN COUNT PDNCT3 RES 1,0 4/10S #3 POWER-DOWN COUNT PDNCT4 RES  1,0 4/10S #4 POWER-DOWN COUNT * ABS :3E SLVNUM RES 1,0 CURRENT 4/10S NUMBER TITL * * SLAVE ROUTINE TO INSERT HEX DIGIT FROM A REG INTO * PROPER DIGIT POSITION OF CONSOLE DISPLAY VALUE * HOLDER (CDRHSL), TO BE  OUTPUT TO CDR BY HOST. * * INPUT: HEX DIGIT IN BITS 0-3 OF A REG. * SLAVE NUMBER IN 'SLVNUM'. * * OUTPUT: HEX DIGIT TO ONE POSITION OF 'CDRHLD': * SLAVE 0 BITS 00-03 * SLAVE 1 BITS 04-07 * SLAVE 2 BITS 08-11 * SLAVE 3 BITS 12-15 * ABS :3F SLVDSP ENT  COPY X,XTEMP1 SAVE X COPY Q,QTEMP1 SAVE Q WORD :A27B CURRENT SLAVE NUMBER (SLVNUM -- :3E) --> X  XNX X INDEX MEMORY LOCATION COPY DSPINS,Q GET INSTRUCTION FOR LOCATING DISPLAY DATA COPY Q,$+1 STORE INSTRUCTION FOR EXECUTION RES 1,0 LOCATE DISPLAY DATA TO PROPER HEX DIGIT LOCATION COPY *CDRPNT,Q LOAD CONSOLE DATA REG VALUE XNX X INDEX MEMORY LOCATION AND DSPMSK,Q MASK OUT CURRENT DISPLAY POSITION OR A,Q OR IN NEW DISPLAY DIGIT COPY Q,*CDRPNT STORE CONSOLE WORD REG VALUE COPY QTEMP1,Q RESTORE Q COPY XTEMP1,X RESTORE X WORD :9F70 RETURN THROUGH SLVDSP (:3F) * QTEMP1 RES 1,0  Q REGISTER TEMP STORAGE XTEMP1 RES 1,0 X REGISTER TEMP STORAGE CDRPNT WORD *CDRHLD POINTER TO CDR VALUE HOLDER * DSPINS EQU $ TABLE OF DISPLAY LOCATING INSTRUCTIONS NOP SLAVE 0 - SHIFT 0 SHIFT A,LO,4  SLAVE 1 - SHIFT 4 SHIFT A,LO,8 SLAVE 2 - SHIFT 8 SHIFT A,LO,12 SLAVE 3 - SHIFT 12 * DSPMSK EQU $  TABLE OF MASKS FOR CONSOLE DISPLAY DIGITS WORD :FFF0 SLAVE 0 - MASK OUT DIGIT 0 WORD :FF0F SLAVE 1 - MASK OUT DIGIT 1 WORD :F0FF SLAVE 2 - MASK OUT DIGIT 2 WORD :0FFF SLAVE 3 - MASK OUT DIGIT 3 SPACE 4 * * HOST POWER-DOWN ROUTINE * PDNHST ENT HOST POWER-DOWN ROUTINE IMS PDNCTH INCREMENT HOST POWER-DOWN COUNT COPY =11,A DELAY COUNT JNED A,$ EXECUTE DELAY SIN 15 SIN SHOULD EXPIRE AT HLT COPY =13,A DELAY COUNT JNED A,$ EXECUTE DELAY HLT * * SLAVE POWER-DOWN ROUTINE * PDNSLV ENT SIN 3 COPY PDNPNT,X POINTER TO SLAVE 0 POWER-DOWN COUNT IN PUB. MEM. ADD SLVNUM,X ADD OFFSET FOR SLAVE NUMBER IMS 0(X) INCREMENT CURRENT SLAVE POWER-DOWN COUNT HLT PDNPNT WORD *PDNCT1 POINTER TO SLAVE 1 POWER-DOWN COUNT IN PUB. MEM. TITL * * UNEXPECTED TRAP SERVICE ROUTINES * UMT1 ENT JST LIGHTS HLT UNEXPECTED UNINSTALLED MEMORY TRAP * UIT1 ENT JST LIGHTS HLT  UNEXPECTED UNIMPLEMENTED INSTRUCTION TRAP * AET1 ENT JST LIGHTS HLT UNEXPECTED DIVIDE / FLOATING POINT TRAP * AET2 ENT JST LIGHTS HLT UNEXPECTED CHARACTER / NUMERIC TRAP * SET1 ENT JST LIGHTS HLT UNEXPECTED STACK EXCEPTION TRAP * * ROUTINE TO DISPLAY UNEXPECTED TRAP CODE * LIGHTS ENT COPY =:A,A DISPLAY CODE FOR UNEXPECTED TRAP JST SLVDSP CALL SLAVE CONSOLE DISPLAY ROUTINE JMP *LIGHTS RETURN * * LPOOL TITL * * INTERRUPT AND TRAP VECTORS * SPACE 3 * * POWER-UP VECT OR * ABS :80 JST *$+1 WORD POWUP * * UNIMPLEMENTED INSTRUCTION TRAP VECTOR * ABS  :84 UNTNTP RES 2,0 JST *$+1 UNIMPT WORD UIT1 * * UNINSTALLED MEMORY TRAP VECTOR * UNMEMT RES 2,0 JST *$+1 WORD UMT1 * * POWER-DOWN TRAP VECTOR * ABS :8C RES 1,0 RES 1,0 JST *$+1 WORD PDNHST REPLACED BY 'WORD PDNSLV' FOR SLAVE POWER-DOWN TITL * * REAL TIME CLOCK INTERRUPT CELLS * NOP RTCTIN RES 1,0 RTC TIMING CELL JST *$+1 RTC TIMING OVERFLOW VECTOR RTCPTR RES 1,0 * * HOST CONSOLE INTERRUPT VECTOR * ABS :94 JST *$+1 WORD SLVHLT  RES 1,0 RES 1,0 * * CHARACTER / NUMERIC TRAP VECTOR * RES 2,0 JST *$+1 CNJMP WORD AET2 TITL * * STACK EXCEPTION TRAP VECTOR * RES 2,0 JST *$+1 SEJMP WORD SET1 * * USER TRAP VECTOR * RES 2,0 JMP 0(Y) HLT * * SYSTEM TRAP * RES 2,0  JMP 0(Y) HLT * * ARITHMETIC EXCEPTION TRAP VECTOR * RES 2,0 JST *$+1 WORD AET1 * * HOST INTERRUPT FROM SLAVE * ABS :B4 HSTINT JST *$+1 WORD CONT2 TITL ABS :B8 * * HOST CONSOLE INTERRUPT SERVICE ROUTINE (STOP ALL SLAVES) * SLVHLT ENT SIN 2 DISABLE INTERRUPTS  OUT Q,1 RESET CONSOLE INTERRUPT COPY STOPI,Q STOP INSTRUCTION COPY Q,*SCIR STORE IN SLAVE INSTRUCTION REGISTER COPY =1,Q DATA FOR SELP SELP Q,:F2 STOP SLAVE 0 SELP Q,:E2 STOP SLAVE 1 SELP Q,:D2 STOP SLAVE 2 SELP Q,:C2 STOP SLAVE 3 HLT * STOPI STOP . STOP INSTRUCTION SPACE 2 TITL * * HOST POWER-UP ROUTINE * POWUP ENT SIN 15 DISABLE INTERRUPTS, POWER DOWN TRAP COPY PDNCTH,A HOST POWER-DOWN COUNT JNE A,POWUP1 IF NON-ZERO, GO TO POWER-FAIL START-UP JMP INIT1 GO TO INITIAL START-UP * * HOST POWER-FAIL START-UP * POWUP1 EQU $ COPY STHOST,A COPY A,S INITIALIZE STATUS UIS . DISABLE INTERRUPTS FROM SLAVES COPY MEMSLV,A # OF SLAVE EXECUTING MEM TEST DURING POWER-FAIL COPY A,SLAVPF SAVE IMS PUPCTH INCREMENT HOST POWER-UP COUNT COPY PUPCTH,A LOAD HOST POWER-UP COUNT SUB PDNCTH,A SUBTRACT HOST POWER-DOWN COUNT JEQ A,$+4 JUMP IF HOST POWER UP & DOWN COUNTS EQUAL COPY HLT1,A HALT INSTRUCTION COPY A,:80 STORE AT POWER-UP LOCATION HLT  HOST POWER UP & DOWN NOT EQUAL COPY A02PNT,A SLAVE STARTING ADDRESS COPY A,*SCDR STORE IN SLAVE DATA REGISTER COPY SLAVES,Y LOAD # OF SLAVES IN SYSTEM COPY =1,Q JST DATEST TEST UNUSED DEVICE ADDRESSES COPY =0,A COPY A,SLVNUM INITIALIZE CURRENT SLAVE NUMBER COPY A,CDRHLD CLEAR CONSOLE DATA REG OUTPUT VALUE COPY =:30,X INITIALIZE DEVICE ADDRESS INDEX TITL POWUP2 EQU $ COPY SLVNUM,Q CURRE NT SLAVE NUMBER XNX Q INDEX MEMORY LOCATION COPY PDNCT1,A POWER-DOWN COUNT FOR CURRENT SLAVE SUB PDNCTH,A SUBTRACT HOST POWER-DOWN COUNT JEQ A,POWUP3 POWER-DOWN COUNTS MATCH -- JUMP TO START SLAVE COPY SLAVPF,A SLAVE EXECUTING MEM. TEST DURING POWER-FAIL SUB SLVNUM,A SUBTRACT CURRENT SLAVE NUMBER JNE A,POWUP4 IF NOT = , POWER-DOWN FAILURE IN CURRENT SLAVE XNX Q INDEX MEMORY LOCATION IMS PDNCT1 INCREMENT CURRENT SLAVE POWER-DOWN COUNT * POWUP3 COPY =1,Q DATA FOR SELP AND FLAG1 COPY Q,FLAG1 SET PUBLIC MEMORY FLAG COPY ISDRPI,A 'INPUT FROM SLAVE DATA REG. TO P' INST. COPY A,*SCIR STORE IN SLAVE INSTR. REG.  XNX X INDEX DEVICE ADDRESS SELP Q,:C2 INITIALIZE P ON SLAVE XNX X INDEX DEVICE ADDRESS SST :C2 SENSE FOR SLAVE OPERATION DONE JMP $+2 DONE JMP $-2 NOT DONE COPY STARTI,A START INSTRUCTION COPY A,*SCIR STORE IN SLAVE INSTR. REG XNX X INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG SELP A,4 OUTPUT TO CONSOLE DATA REG COPY FLAG1,A LOAD PUBLIC MEMORY FLAG JNE A,$-3 JUMP IF SLAVE IS STILL EXECUTING IN PUBLIC MEM. POWUP4 EQU $ IMS SLVNUM INCREMENT CURRENT SLAVE NUMBER SUB =:10,X MODIFY SLAVE DEVICE ADDRESS INDEX JNED Y,POWUP2 DECREMENT SLAVE COUNTER -- JUMP IF NOT EXP. JMP CONT1 JUMP TO PUBLIC MEMORY LOCK-OUT ROUTINE TITL * * SLAVE CONTROL SERVICE LOCATIONS * ABS :100 START . SLAVE CONTROL INSTRUCTION REGISTER WORD 0 SLAVE CONTROL DATA REGISTER WORD 0 SLAVE CONTROL MEMORY ADDRESS REGISTER JMP *A01PNT INITIAL START LOCATION SPACE 1 * ISDRPI ISCDR P 'INPUT FROM SLAVE DATA REGISTER TO P' INSTR. STARTI START . 'START' INSTR. * * THE FOLLOWING TWO LOCATIONS ARE LOADED IN PART1 * A01PNT RES 1  POINTER TO INITIAL START-UP LOCATION (A01000) A02PNT RES 1 POINTER TO POWER-FAIL START-UP LOCATION (A02000) SPACE 1 * * THIS SUBROUTINE CHECKS 'FLAG1' AND RETURNS WHEN IT * IS RESET. OUTPUTS 'CDRHLD' TO CONSOLE WHILE WAITING. * TSTFLG ENT COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG. SELP A,4 OUTPUT TO CONSOLE DATA REG.  COPY FLAG1,A CHECK PUBLIC MEMORY FLAG JNE A,$-3 JUMP IF SLAVE STILL EXECUTING IN PUBLIC MEM. JMP *TSTFLG RETURN WHEN 'FLAG1' IS RESET * RES $;:F-$&:F+1,0 TITL * * INITIAL STARTUP ROUTINE * ABS :110 INIT1 EQU $ DEFAULT MODE ENTRY JMP $+3 INIT2 EQU $ DEMAND MODE ENTRY IN 4,A  INPUT TEST SELECTIONS FROM CONSOLE DATA REG. JMP $+2 COPY =:F,A DEFAULT TEST SELECTION COPY STHOST,Q COPY Q,S INITIALIZE STATUS COPY A,DEMAND STORE TEST SELECTIONS SHIFT A,RO,8 STRIP TO # OF SLAVES SUB =1,A -- MODIFY # AND =3,A -- OF SLAVES COPY A,SLAVES STORE # OF SLAVES  COPY A,Y LOAD # OF SLAVES IN Y COPY JST1,A 'JST *$+1' INSTRUCTION COPY A,:80 STORE AT POWER-UP VECTOR COPY STARTI,A START INSTRUCTION COPY A,*SCIR STORE IN SLAVE INSTRUCTION REGISTER COPY =0,A -- COPY A,PUPCTH -- CLEAR COPY A,PDNCTH -- POWER-UP COPY A,PDNCT1 -- AND COPY  A,PDNCT2 -- POWER-DOWN COPY A,PDNCT3 -- COUNTERS COPY A,PDNCT4 -- COPY A,COUNT1 CLEAR PASS COUNTER COPY A,COUNT2 CLEAR PASS COUNTER COPY A,COUNT3 CLEAR PASS COUNTER COPY A,COUNT4 CLEAR PASS COUNTER COPY A,SLVNUM INITIALIZE SLAVE NUMBER COPY A,CDRHLD CLEAR CONSOLE DATA REG OUTPUT VALUE COPY =1,Q JST DATEST TEST UNUSED DEVICE ADDRESSES COPY =:30,X INITIALIZE DEVICE ADDRESS INDEX SPACE 4 INIT5 EQU $ COPY Q,FLAG1 SET PUBLIC MEMORY FLAG XNX X INDEX DEVICE ADDRESS SELP Q,:C0 SET PROGRAMMED RESET ON SLAVE XNX X INDEX DEVICE ADDRESS SELP Q,:C3 CLEAR SLAVE CONTROL REGISTER UIS . DISABLE INTERRUPTS FROM SLAVES XNX X INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE JNED A,$ WAIT FOR SLAVE TO WRITE TO 'CDRHLD'. COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG SELP A,4 OUTPUT TO CONSOLE DATA REG HLT ALLOW OPERATOR TO INSPECT CONSOLE DATA *  REGISTER AND RESTART SLAVE XNX X INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE JST TSTFLG WAIT UNTIL 'FLAG1' IS RESET IMS SLVNUM INCREMENT SLAVE NUMBER SUB =:10,X  MODIFY SLAVE DEVICE ADDRESS INDEX JNED Y,INIT5 DECREMENT SLAVE COUNTER -- JUMP IF NOT EXP. TITL * * PUBLIC MEMORY LOCK-OUT ROUTINE * * HOST ROUTINE TO ALLOW ONLY ONE SLAVE * TO EXECUTE IN PUBLIC MEMORY AT A TIME. * * A SLAVE IS ALLOWED TO START EXECUTING IN PUBLIC MEMORY * WHEN THE HOST HONORS THAT SLAVES INTERRUPT REQUEST. * THE HOST THEN DISABLES INTERRUPTS AND WAITS FOR * THE SLAVE EXECUTING IN PUBLIC MEMORY TO RESET * A GLOBAL FLAG (FLAG1), INDICATING THAT THAT SLAVE * IS DONE EXECUTING IN PUBLIC MEMORY. THE HOST THEN * ENABLES INTERRUPTS FROM SLAVES AND WAITS FOR THE * NEXT SLAVE TO INTERRUPT IT. * CONT1 EQU $ RBIT 12,S -- ENABLE INTERRUPTS UIS -  -- FROM SLAVES SBIT 12,S DISABLE INTERRUPTS FROM SLAVES AFTER INTERRUPT COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG SELP A,4 OUTPUT TO CONSOLE DATA REG JMP $-2 WAIT FOR INTERRUPT * CONT2 ENT  INTERRUPT SERVICE ROUTINE SBIT 8,S ENABLE INTERRUPTS COPY Q,FLAG1 SET PUBLIC MEMORY FLAG (SLAVE USING PUB. MEM.) JST TSTFLG WAIT UNTIL 'FLAG1' IS RESET JMP CONT1 SLAVE DONE EXECUTING IN PUBLIC MEM. TITL * * SUBROUTINE TO TEST UNUSED 4/10S DEVICE ADDRESSES. * * ENTER WITH: * * Q REG =1 * *  Y REG NUMBER OF SLAVES * DATEST ENT COPY =:E,A NUMBER OF DEVICE ADDRESSES SUB Y,A NU MBER OF UNUSED DEVICE ADDRESSES COPY =0,X DATST1 EQU $ CSK X,=:50 CHECK FOR I/O TEST CARD DEVICE ADDRESS  NOP JMP $+2 OK JMP DASKIP I/O TEST CARD DEVICE ADDRESS -- SKIP TEST XNX X INDEX DEVICE ADDRESS SELP Q,:05 TRY TO SET AX1 XNX X INDEX DEVICE ADDRESS SST :05 SENSE AX1 -- SKIP IF SET JMP $+2 AX1 NOT SET -- OK HLT DEVICE ADDRESS IN X WAS RESPONDED TO DASKIP ADD =:10,X MODIFY DEVICE ADDRESS INDEX JNED A,DATST1 DECREMENT SLAVE COUNTER -- JUMP IF NOT EXP. JMP *DATEST RETURN * LPOOL RES $;:F-$&:F+1,0 TITL * * SLAVE MEMORY/REGISTER INSPECT ROUTINE * * INPUT: * * A REG BIT 0 0 = MEMORY INSPECT * 1 = REGISTER INSPECT * * BIT 1 0 = NO AUTO INCREMENT * 1 = AUTO INCREMENT * *  BIT 2 0 = SINGLE ACCESS * 1 = CONTINUOUS ACCESS (NO AUTO INC.) * *  BIT 3 0 = NO READ/WRITE ALTERNATION * 1 = READ/WRITE ALTERNATION *  (FORCED CONTINUOUS ACCESS) * * BIT 4-6 SLAVE # (1-4) * * X REG MEMORY ADDRESS OR REGISTER CODE. * REGISTER CODES AS FOLLOWS: * * A = 0 *  Q = 1 * X = 2 * Y = 3 * P = 4 *  S = 5 * K = 6 * L = 7 * * DATA REG DATA FOR WRITE OPERATION * *  SENSE SW 0 = READ * 1 = WRITE * * OUTPUT: * * DATA REG DATA FROM READ OPERATION * * * SLINSP EQU $ COPY =0,Q OUT Q,0 RESET SENSE SWITCH SLINS1 TBIT 0,A MEMORY OR REGISTER OPERATION ? JT OV,SLVREG REGISTER INSPECT * * MEMORY INSPECT * SLVMEM JF SS,SLVMRD CHECK FOR READ OR WRITE. JUMP FOR READ IN 4,Q GET DATA FROM CONSOLE DATA REGISTER COPY Q,*SCDR PUT IN SLAVE DATA REGISTER  COPY IMSDRI,Q 'INPUT FROM SLAVE DATA REGISTER' INSTRUCTION JMP $+2 SLVMRD EQU $ READ MEMORY COPY OMSDRI,Q 'OUTPUT TO SLAVE DATA REGISTER' INSTR. COPY Q,*SCIR STORE IN SLAVE INSTRUCTION REGISTER COPY  X,*SCMAR STORE MEMORY ADDRESS IN SLAVE MEM. ADDR. REG. COPY A,Y OPERATOR CHOICES AND =:F0,Y STRIP TO SLAVE # NEG Y,Y -- CONVERT TO ADD =:40,Y -- SLAVE INDEX COPY =1,Q DATA FOR SELP SLVM1 XNX Y INDEX DEVICE ADDRESS SELP Q,:C2 DO MEMORY OPERATION SLVM2 XNX Y INDEX DEVICE ADDRESS SST :C2 SENSE FOR MEMORY OPERATION DONE -- SKIP IF NOT JMP SLVM3 OPERATION DONE IJNE  Q,SLVM2 INCREMENT TIME-OUT COUNT -- JUMP IF NOT EXP. JST ERRLIT GO TO ERROR LIGHT ROUTINE TBIT 2,A  CHECK FOR SINGLE OR CONTINUOUS ACCESS JF OV,$-2 SINGLE ACCESS -- CONTINUE ERROR LIGHT ROUTINE JMP SLVM 1 CONTINUOUS ACCESS -- REPEAT MEMORY OPERATION TITL SLVM3 EQU $ MEMORY OPERATION DONE JT SS,$+3 CHECK FOR READ OR WRITE -- JUMP FOR WRITE COPY *SCDR,Q GET CONTENTS OF SLAVE DATA REGISTER SELP Q,4  OUTPUT DATA TO CONSOLE DATA REGISTER TBIT 3,A CHECK FOR READ/WRITE ALTERNATION JF OV,SLVM4 JUMP FOR NO ALTERNATION COPY =0,Q -- JT SS,$+2 -- COMPLEMENT COPY =1,Q -- SENSE SWITCH  OUT Q,0 -- JMP SLVMEM DO COMPLEMENT OPERATION SLVM4 TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JT OV,SLVM1 JUMP FOR CONTINUOUS ACCESS -- REPEAT OPERATION TBIT 1,A SINGLE ACCESS -- CHECK FOR AUTO-INCREMENT JF OV,$+2 JUMP IF NO AUTO-INCREMENT ADD =1,X INCREMENT MEMORY ADDRESS HLT  WAIT FOR OPERATOR ACTION JMP SLINS1 DO ANOTHER MEMORY OR REGISTER OPERATION TITL * * REGISTER INSPECT * SLVREG JF SS,SLVRRD TEST FOR READ OR WRITE. JUMP FOR READ IN 4,Q GET DATA FROM CONSOLE DATA REGISTER COPY Q,*SCDR PUT IN SLAVE DATA REGISTER COPY ISDRI,Q 'INPUT FROM SLAVE DATA REGISTER' INSTR. JMP  $+2 SLVRRD EQU $ READ REGISTER COPY OSDRI,Q 'OUTPUT TO SLAVE DATA REGISTER' INSTR. COPY =8,Y  REGISTER COMPARISON VALUE CSM X,Y CHECK RANGE OF REGISTER SELECTION JMP $+3 OK JST  ERRLIT -- ERROR-WRONG JMP $-1 -- REGISTER SELECTION XNX X USE REGISTER SELECTION AS INDEX  COPY REGS3,Y GET S3 FIELD FOR INSTRUCTION OR Y,Q ADD TO INSTRUCTION SKELETON COPY Q,*SCIR  STORE INSTRUCTION IN SLAVE INSTR. REG. COPY A,Y OPERATOR CHOICES AND =:F0,Y STRIP TO SLAVE #  NEG Y,Y -- CONVERT TO ADD =:40,Y -- SLAVE INDEX COPY =1,Q DATA FOR SELP SLVR1 XNX Y  INDEX DEVICE ADDRESS SELP Q,:C2 DO REGISTER OPERATION SLVR2 XNX Y INDEX DEVICE ADDRESS SST  :C2 SENSE FOR REGISTER OPERATION DONE - SKIP IF NOT JMP SLVR3 OPERATION DONE IJNE Q,SLVR2 INCREMENT TIME-OUT COUNT -- JUMP IF NOT EXP. JST ERRLIT TIME-OUT EXPIRED -- GO TO ERROR LIGHT ROUTINE TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JF OV,$-2 JUMP FOR SINGLE ACCESS -- CONTINUE LIGHTS JMP SLVR1 CONTINUOUS ACCESS -- REPEAT OPERATION TITL SLVR3 EQU $ REGISTER OPERATION DONE JT SS,$+3  CHECK FOR READ OR WRITE -- JUMP FOR WRITE COPY *SCDR,Q GET CONTENTS OF SLAVE DATA REGISTER SELP Q,4 OUTPUT DATA TO CONSOLE DATA REGISTER TBIT 3,A CHECK FOR READ/WRITE ALTERNATION JF OV,SLVR4 JUMP FOR NO ALTERNATION COPY =0,Q -- JT SS,$+2 -- COMPLEMENT COPY =1,Q -- SENSE SWITCH OUT Q,0 -- JMP SLVREG DO COMPLEMENT OPERATION SLVR4 TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS  JT OV,SLVR1 JUMP FOR CONTINUOUS ACCESS -- REPEAT OPERATION TBIT 1,A CHECK FOR AUTO-INCREMENT JF  OV,$+3 JUMP IF NO AUTO-INCREMENT ADD =1,X INCREMENT REGISTER # AND =7,X WRAP AROUND TO 0 AFTER 7 HLT WAIT FOR OPERATOR ACTION JMP SLINS1 DO ANOTHER MEMORY OR REGISTER OPERATION * *  ERROR LIGHT ROUTINE * * BLINK OV FOR APPROX. .25 SEC. * ERRLIT ENT RBIT 2,S RESET OV IMS ERRTMP  -- INCREMENT ERRTMP TO 0. OV GETS SET JMP $-1 -- WHEN ERRTMP GOES NEGATIVE JMP *ERRLIT RETURN ERRTMP RES 1,0 TITL * * TABLE OF INSTRUCTION S3 FIELDS * REGS3 EQU $ WORD :0000 A REGISTER WORD :0040 Q REGISTER WORD :0020 X REGISTER WORD :0060 Y REGISTER WORD :0010 P REGISTER WORD :0030 S REGISTER WORD :0070 K REGISTER WORD :0050 L REGISTER * * SLAVE CONTROL INSTRUCTION SKELETONS * OSDRI OSCDR A OUTPUT FROM SLAVE REG. TO SLAVE CONTROL DATA REG ISDRI ISCDR A INPUT TO SLAVE REG. FROM SLAVE CONTROL DATA REG. OMSDRI OMSCDR . OUTPUT FROM MEMORY TO SLAVE CONTROL DATA REG. IMSDRI IMSCDR . INPUT TO MEMORY FROM SLAVE CONTROL DATA REG. SSTPI SSTEP . SINGLE STEP STRTI START . START  TITL * * SLAVE CONTROL ROUTINE * * INPUT: * * A REG BIT0 0 = START *  1 = SINGLE STEP * * BIT 2 0 = SINGLE ACCESS * 1 = CONTINUOUS ACCESS * * BIT 4-6 SLAVE # (1-4) * * OUTPUT: * * DATA REG SLAVE P REG CONTENTS FOLLOWING SINGLE STEP * SLCTRL EQU $ TBIT 0,A 'START' OR 'SINGLE STEP' ? JT OV,SLSSTP JUMP IF SINGLE STEP COPY STRTI,Q 'START' INSTRUCTION JMP $+2 SLSSTP COPY SSTPI,Q 'SINGLE STEP' INSTRUCTION COPY Q,*SCIR STORE INSTRUCTION IN SLAVE INSTR. REG. COPY A,Y OPERATOR CHOICES AND =:F0,Y STRIP TO SLAVE # NEG Y,Y -- CONVERT TO ADD =:40,Y -- SLAVE INDEX COPY =1,Q DATA FOR SELP SLVST1 XNX  Y INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE SLVST2 XNX Y INDEX DEVICE ADDRESS SST  :C0 SENSE FOR OPERATION DONE - SKIP IF NOT JMP SLVST3 OPERATION DONE IJNE Q,SLVST2 INCREMENT TIME-OUT COUNT -- JUMP IF NOT EXP. JST ERRLIT TIME-OUT EXPIRED -- GO TO ERROR LIGHT ROUTINE TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JF OV,$-2 JUMP FOR SINGLE ACCESS -- CONTINUE LIGHTS JMP SLVST1 CONTINUOUS ACCESS -- REPEAT OPERATION * SLVST3 EQU $ OPERATION DONE TBIT 0,A START OR SINGLE STEP ?  JF OV,SLVST4 SKIP CONSOLE DISPLAY OUTPUT FOR START COPY OSDRPI,Q 'OUTPUT P TO SLAVE DATA REG.' INST. COPY  Q,*SCIR STORE IN SLAVE INSTRUCTION REG. COPY =1,Q DATA FOR SELP XNX Y INDEX DEVICE ADDRESS  SELP Q,:C2 INSPECT SLAVE P REG. COPY *SCDR,Q LOAD Q WITH SLAVE P REG CONTENTS SELP Q,4 OUTPUT TO CONSOLE DATA REG. SLVST4 HLT WAIT FOR OPERATOR ACTION JMP SLCTRL DO ANOTHER CONTROL OPERATION *  OSDRPI OSCDR P 'OUTPUT P TO SLAVE DATA REG.' INST. SAVE END P TO SLAVE DATA REG.' INST. COPY  Q,*SCIR STORE IN SLAVE INSTRUCTION REG. COPY =1,Q DATA FOR SELP XNX Y INDEX DEVICE ADDRESS  SELP Q,:C2 INSPECT SLAVE P REG. COPY *SCDR,Q LOAD Q WITH SLAVE P REG CONTENTS SELP Q,4 OUTPUT TO CONSOLE DATA REG. SLVST4 HLT WAIT FOR OPERATOR ACTION JMP SLCTRL DO ANOTHER CONTROL OPERATION * TITL 4/10S QCD, NM4 HOST (93069-10A0) -- PART1 EXTR QCDEND NAM A01000 NAM A02000 EXTR DEBUG4 * * * ABS A01PNT WORD A01000+:8000 * ABS A02PNT WORD A02000+:8000 * ABS :200 TITL INSTRUCTION DIAGNOSTIC -- SEC. A0-1 ************************************************** * * *------------ SECTION A0 ------------ * * OBJECTIVE: IN THIS SECTION SOME DEGREE OF * CONFIDENCE IS OBTAINED ON CERTAIN *  BASIC INSTRUCTIONS. * * INSTRUCTIONS: THE FOLLOWING INSTRUCTIONS ARE * TESTED.(IN ORDER OF THE LIST). * NOTE:ONLY ABSOLUTE DIRECT ADDRESSING IS USED: * * HLT HALT A01000 * COPY P,A LOAD 'A' FROM 'P' A01000 * SELP A,4 DISPLAY 'A' A01000 * JST MEM JUMP AND STORE A01000 * JMP  MEM UNCONDITIONAL JMP A01000 * COPY LIT,2REG A02000 * CSK 2REG,LIT  A02000 * COPY MEM,2REG LOAD (DIRECT ADD.) A02000 * CSK 2REG,MEM ARITH COMP A&Q A02000 * COPY  2REG,MEM STORE (DIRECT ADD.) A02000 * COPY 8REG,8REG REG TO REG LOAD A03000 * IMS MEM INCR MEM AND SKIP A0D000 * * * MEMTST AND PROGRAM XFER * * * JEQ 4REG,MEM A04000 * JNE 4REG,MEM  A04000 * JLT 4REG,MEM A04000 * JLE 4REG,MEM A04000 * JGT 4REG,MEM A04000 * JGE 4REG,MEM A04000 * OR MEM,2REG INCLUSIVE OR A06000 * XOR MEM,2REG EXCLUSIVE OR A07000 * AND MEM,2REG A08000 * RBIT OV,S A0A000 * SBIT OV,S A0A000 * JT OV,MEM  A0A000 * JF OV,MEM A0A000 * SBIT 2,S BYTE MODE A0B000 *  RBIT 2,S WORD MODE A0B000 * SIN STATUS INHIBIT A0C000 * SHIFT 4REG,LO,CNT  A0E000 * FMT 4REG A0F000 * XNX 4REG A10000 * * * *----- TEST STRUCTURE ----- * * FROM HERE ONWARD STEP BY STEP CONFIDENCE IS * GAINED IN VARIOUS INSTRUCTIONS BY EXECUTING * EACH INSTRUCTION TO PERFORM ITS SIMPLEST * FUNCTION IN ABSOLUTE DIRECT ADDRESSING AND * WORD MODE. NORMALLY TWO INSTRUCTIONS ARE * TAKEN IN PAIR TO TEST EACH OTHER USING * KNOWN WORKING INSTRUCTIONS. * * BY THE END OF THIS TEST IT CAN BE SAFELY * ASSUMED THAT ALL THE INSTRUCTIONS LISTED * ABOVE ARE PERFORMING THEIR FUNCTION UNDER *   ABSOLUTE DIRECT ADDRESSING AND WORD MODE. * * THIS SECTION (A0) PROVIDES BASIC CONFIDENCE * AND TOOLS FOR EXTENSIVE CHECKOUT OF * INSTRUCTIONS IN THE FOLLOWING SECTIONS * ************************************************** TITL ************************************************** * *----- SECTION A0 TEST 1 ----- * TEST: HLT, COPY P,A, SELP A,4 *  JST,FMT, AND JUMP * ************************************************** * * * ---- IF PROGRAM COUNTER INCREMENTS PROPERLY, * ---- THEN COPY 8REG,P IS VERIFIED * A01000 EQU $ COPY =:F,A SUB *SNUMPT,A SLAVE DEVICE ADDRESS -->A  JST *DSPPNT JUMP TO SLAVE DISPLAY ROUTINE HLT VERIFY DEVICE ADDRESS AND OPERATION OF HALT JMP  A01020 TEST JMP ERROR: ERROR,--,JMP,FAILED A01020 EQU $ JMP A01000 LOOP PATCH ORG $-1  NOP * * INITIALIZATION * A02000 EQU $ SIN 2 COPY *STATPT,A COPY A,S INITIALIZE STATUS COPY JST2,A 'JST *$+1' INSTRUCTION COPY A,*AETPT1 INITIALIZE ARITHMETIC EXCEPTION TRAP COPY =AET1,A UNEXPECTED ARITHMETIC EXCEPTION TRAP ROUTINE COPY A,*AETPT2 INITIALIZE ARITHMETIC EXCEPTION TRAP A02002 EQU $ COPY =1,A COPY A,*CNT4PT INITIALIZE TOP TEST COUNTER JST *DSPPNT DISPLAY IDP TEST CODE ******************************************************* * * ----- A02000 ----- * * ----- TEST COPY LIT,2REG AND CSK 2REG,LIT * ******************************************************* COPY =1,A CSK A,=:1 NOP ERROR: --ERROR,CSK,FAILED,A=1 CSK A,=0 ERROR: '--ERROR--CSK FAILED ' JMP $+2 ERROR: --ERROR-,CSK,FAILED  CSK A,=2 JMP $+3 NOP ERROR: --ERROR--,CSK,FAILED COPY =:FF,Q LOAD Q WITH FF CSK Q,=:FF 'Q' SHOULD BE :FF NOP ERROR: IF,'Q'=:FF,CSK,FAILED,ELSE,COPY,FAILED. ************************************************** * * IN THE FOLLOSING TEST, COPY MEM,2REG, * CSK 2REG,MEM, AND COPY 2REG,MEM ARE TESTED * ************************************************** A02010 EQU $ COPY =:FFFF,A LOAD'A'WITH FFFF CSK A,=:FFFF 'A' SHOULD BE FFFF NOP ERROR: IF,'A'=:FFFF,CSK,FAILED,ELSE,COPY,FAILED. COPY =:FFFF,Q LOAD 'Q' WITH FFFF CSK  Q,=:FFFF NOP ERROR: IF,'Q'=:FFFF,CSK,FAILED,ELSE,COPY,FAILED CSK A,=0 'A' LT 0 JMP $+3 NOP ERROR: 'A',SHOULD,BE,:FFFF CSK A,=:FFFF NOP ERROR: 'A',SHOULD,=,:FFFF COPY A,TEMP03 CSK A,TEMP03 NOP ERROR: COPY,FAILED,'A'=,:FFFF JMP A02000 ORG $-1 NOP IMS *CNT4PT SHOULD = :0002 JMP A03000 TITL * * POINTERS TO LOCATIONS IN PUBLIC MEMORY * CNT4PT WORD PCOUNT+:8000 STATPT WORD STATSV+:8000 AETPT1 WORD :80AA AETPT2 WORD :80AB SNUMPT WORD SLVNUM+:8000 DSPPNT WORD  SLVDSP+:8000 DMNDPT WORD DEMAND+:8000 * * * JST2 JST *$+1 TEMP03 RES 1,0 LPOOL TITL * * A GOOD CONFIDENCE IS OBTAINED IN CSK 2REG,MEM . * AND COPY MEM,2REG. ************************************************** * * ----- A03000 ---- - * * ----- TEST ON COPY 7REG,7REG ----- * * ----- NOTE - COPY REG,P AND COPY P,REG * ARE TESTED IN SEC. A01000 * ************************************************** A03000 COPY =0,Q LOAD 'Q' WITH ZEROS COPY =:FFFF,A LOAD 'A' WITH FFFF COPY A,X COPY X,Q CSK Q,=:FFFF TEST THAT X = EXPECTED VALUE NOP ERROR: COPY,A,TO,X,FAILED * COPY =0,Q CLEAR Q COPY A,Y COPY Y,Q CSK Q,=:FFFF TEST THAT Y = EXPECTED VALUE NOP ERROR: COPY,A,TO,Y,FAILED * COPY =0,Q COPY A,K COPY K,Q CSK Q,=:FFFF TEST THAT K = EXPECTED VALUE NOP ERROR: COPY,A,TO,K,FAILED * COPY =0,Q COPY A,L COPY L,Q CSK Q,=:FFFF TEST THAT L = EXPECTED VALUE NOP ERROR: COPY,A,TO,L,FAILED * COPY =0,Q  COPY *STATPT,A COPY A,S COPY S,Q CSK Q,*STATPT TEST THAT S = EXPECTED VALUE NOP  ERROR: COPY,A,TO,S,FAILED * COPY =:FFFF,Q COPY Q,X COPY X,A CSK A,=:FFFF TEST THAT X = EXPECTED VALUE NOP ERROR: COPY,Q,TO,X,FAILED JMP A03000 ORG $-1 NOP IMS *CNT4PT SHOULD = :0003 ************************************************** * * ----- A0D000 ----- * *----- TEST FOR IMS MEM * ************************************************** A0D000 COPY =:FE,A COPY A,TEMP03 STORE 'A' AT TEMP03 IMS TEMP03 JMP $+2 ERROR: 'IMS',FAILED,'A',SHOULD,BE,:00FE COPY TEMP03,A CSK A,=:FF NOP  ERROR: IMS,FAILED,---,NO,INCREMENT COPY =:FFFF,A :FFFF TO 'A' COPY A,TEMP03 STORE 'A' AT TEMP03 IMS  TEMP03 -1+1 = 0 ERROR: 'IMS',FAILED,'A',SHOULD,BE,:FFFF,AND,TEMP01,SHUD,BE,0 COPY =:7FFF,A :7FFF TO 'A'  COPY A,TEMP03 IMS TEMP03 :7FFF+1=:8000, OV SET JMP $+2 ERROR: 'IMS',FAILED,TEMP01,SHOULD,BE,:8000 JT OV,$+2 ERROR: 'IMS',FAILED,TEMP01,=:8000,OV=1,:7FFF+1,=:8000 JMP A0D000 ORG $-1  NOP IMS *CNT4PT SHOULD = :0004 JMP SETUP1 *NOP TO SKIP MEMORY TST* JMP A04000 LPOOL TITL ************************************************** * * * MEMORY TEST -- DATA TESTING * ************************************************** * * INITIALIZATION * SETUP1 EQU $ COPY MTSTDL,Q GET LOOP COUNT COPY Q,MTSTCT INITIALIZE LOOP COUNTER COPY NEWPNT,Y COPY =0,Q COPY Q,LOKSHN COPY TSTPTN,A GET FIRST TEST PATTERN COPY A,PATRN1 SAVE COPY TSTPTN+1,A GET SECOND TEST PATTERN COPY A,PATRN2 SAVE  COPY *DMNDPT,Q GET TEST SELECTIONS TBIT 12,Q TEST FOR 16K OR 32K ONBOARD JF OV,NXTST COPY  VAL32K,A 32K ONBOARD MEMORY JMP $+2 NXTST COPY VAL16K,A 16K ONBOARD MEMORY COPY A,LOOP SAVE LOOP COUNT COPY A,RLOOP SAVE LOOP COUNT COPY *SNUMPT,A LOAD CURRENT SLAVE NUMBER COPY A,*MEMPNT STORE # OF SLAVE EXECUTING MEMORY TEST * * TEST ONBOARD MEMORY * MEMTST EQU $ COPY PATRN1,Q TEST PATTERN COPY P ATRN2,A TEST PATTERN BIGLP EQU $ COPY CNTR,X COPY X,COUNT LOOP COUNTER = -64 EXCH A,Q SWAP TEST PATTERNS SMLLP COPY Q,*LOKSHN TEST MEMORY CSK Q,*LOKSHN NOP HLT BAD LOCATION IMS LOKSHN OK COPY A,*LOKSHN TEST NEXT LOCATION CSK A,*LOKSHN NOP HLT  BAD IMS LOKSHN OK IMS COUNT INNER LOOP JMP SMLLP IMS LOOP OUTER LOOP JMP BIGLP * * USE NOP FOR CONTINUOUS MEMORY EXERCIZE. * USE JMP MTDLSM FOR 'SCOPING MEMORY. * NOP  ORG $-1 JMP MTDLSM ORG $-1 JMP MEMTS2 * COPY RLOOP,X INITIALIZE FOR CONTINUOUS LOOP COPY X,LOOP COPY =0,X COPY X,LOKSHN COPY MTSTDL,X COPY X,MTSTCT JMP  MEMTST DIAGNOSTIC LOOP * * MTDLSM COPY =:FFFF,A COPY DV4000,Y MTLPSM COPY =0,X MTL1SM COPY A,0(X) COPY 0(X),Q ADD =1,X CSK X,Y JMP MTL1SM JMP MTL1SM JMP MTLPSM * MEMTS2 EQU  $ JST BLNKRT BLINK CONSOLE DISPLAY IMS MTSTCT JMP $+2 JMP ADTST JUMP TO ADDRESS TEST COPY 0(Y),X COPY X,PATRN1 COPY 1(Y),X COPY X,PATRN2 ADD =2,Y COPY RLOOP,X COPY X,LOOP COPY =0,X COPY X,LOKSHN JMP MEMTST * BLNKRT ENT CONSOLE DISPLAY BLINK ROUTINE COPY =0,A DATA FOR CCONSOLE DISPLAY JST *DSPPT1 JUMP TO CONSOLE DISPLAY ROUTINE  COPY DELAY,A DELAY CONSTANT JNED A,$ DELAY FOR ABOUT .25 SEC COPY =1,A TEST CODE FOR MEMORY TEST JST *DSPPT1 JUMP TO CONSOLE DISPLAY ROUTINE JMP *BLNKRT RETURN * PATRN1 RES 1,0 TEST PATTERN 1 PATRN2 RES 1,0 TEST PATTERN 2 TSTPTN WORD :AAAA WORD :5555 NEWPTN WORD :5555 WORD :AAAA  WORD :6666 WORD :9999 WORD :9999 WORD :6666 NEWPNT WORD NEWPTN+:8000 POINTER TO NEW DATA PATTERN MEMPNT WORD MEMSLV+:8000 POINTER TO SLAVE NUMBER EXECUTING MEM. TEST MTSTCT RES 1,0 PASS COUNTER MTSTDL WORD :FFFC PASS COUNTER INITIAL VALUE DELAY WORD :8000 FROM RES 1,0 PROGRAM XFER SOURCE POINTER TO RES 1,0 PROGRAM XFER DESTINATION POINTER LOKSHN RES 1,0 TEST MEMORY LOCATION POINTER COUNT RES 1,0 LOOP COUNTER CNTR  WORD :FFC0 LOOP COUNTER INITIAL VALUE LOOP RES 1,0 LOOP COUNTER RLOOP RES 1,0 LOOP COUNTER INITIAL VALUE VAL16K WORD :FF80 LOOP COUNT FOR 16K VAL32K WORD :FF00 LOOP COUNT FOR 32K DT8000 WORD :8000 DT8001 WORD :8001 DV4000 WORD :4000 ENDADR WORD QCDEND POINTER TO END OF DAIGNOSTIC PRIVAT WORD A04000 POINTER TO TRANSFER POINT IN PRIVATE MEMORY DSPPT1 WORD SLVDSP+:8000 POINTER TO CONSOLE DISPLAY ROUTINE DMNDP1 WORD DEMAND+:8000 POINTER TO MODE SELECT WORD LPOOL TITL ************************************************* * * * MEMORY TEST -- ADDRESS TEST * ************************************************* * * INITIALIZATION * ADTST EQU $ COPY *DMNDP1,A GET MODE SELECT WO RD TBIT 12,A TEST FOR 16K OR 32K ONBOARD MEMORY JF OV,ADR02 COPY =:7FFF,A 32K ONBOARD JMP $+2 ADR02 COPY =:3FFF,A 16K ONBOARD COPY A,L SET HIGH MEMORY TESTING LIMIT * * FORWARD ORDER WRITE * COPY =0,X INITIALIZE MEMORY ADDRESS ADR03 COPY X,0(X) WRITE ADDRESS TO TEST MEMORY CSK X,L  END OF MEMORY ? JMP $+3 NO, CONTINUE NOP JMP ADR04 YES ADD =1,X INCREMENT ADDRESS JMP ADR03 CONTINUE ADR04 JST BLNKRT BLINK CONSOLE DISPLAY * * FORWARD ORDER VERIFY * COPY =0,X INITIALIZE MEMORY ADDRESS ADR05 COPY 0(X),Q READ TEST MEMORY CSK Q,X COMPARE TO EXPECTED  NOP ERROR: ADDRESS,TEST,FAILURE.,X,=,ADDRESS * Q = ACTUAL DATA; X = EXPECTED DATA *  CSK X,L END OF MEMORY ? JMP $+3 NO NOP JMP ADR06 YES ADD =1,X INCREMENT ADDRESS JMP ADR05 CONTINUE ADR06 JST BLNKRT BLINK CONSOLE DISPLAY * * REVERSE ORDER WRITE *  COPY L,X INITIALIZE MEMORY ADDRESS ADR07 COPY X,0(X) WRITE ADDRESS TO TEST MEMORY JNED X,ADR07 DECREMENT ADDRESS, JUMP IF NOT END OF MEMORY * * REVERSE ORDER VERIFY * COPY L,X INITIALIZE MEMORY ADDRESS ADR08 COPY 0(X),Q READ TEST MEMORY CSK Q,X COMPARE TO EXPECTED NOP ERROR: ADDRESS,TEST,FAILURE.,X,=,ADDRESS * Q = ACTUAL DATA; X = EXPECTED DATA * JNED X,ADR08 DECREMENT ADDRESS, JUMP IF NOT END OF MEMORY JST BLNKRT BLINK CONSOLE DISPLAY TITL * TRANSFER DIAGNOSTIC TO PRIVATE MEMORY * XFER COPY DT8001,X INITIALIZE SOURCE ADDRESS COPY =1,Y INITIALIZE DESTINATION ADDRESS COPY ENDADR,Q  COPY Q,K SET DESTINATION ADDRESS LIMIT XFER1 COPY 0(X),A READ FROM PUBLIC MEMORY COPY A,0(Y) WRITE TO PRIVATE MEMORY CSK Y,K END OF PROGRAM ? JMP $+3 NO NOP JMP XFER2 YES  ADD =1,X INCREMENT SOURCE ADDRESS ADD =1,Y INCREMENT DESTINATION ADDRESS JMP XFER1 CONTINUE * VERIFY XFER2 COPY DT8001,X INITIALIZE SOURCE ADDRESS COPY =1,Y INITIALIZE DESTINATION ADDRESS XFER3 COPY 0(X),A READ FROM PUBLIC MEMORY COPY 0(Y),Q READ FROM PRIVATE MEMORY CSK A,Q COMPARE  NOP JMP XFRERR ERROR CSK Y,K END OF MEMORY ? JMP $+3 NO, CONTINUE NOP  JMP *PRIVAT YES, JUMP TO PROGRAM IN PRIVATE MEMORY ADD =1,X INCREMENT SOURCE ADDRESS ADD =1,Y INCREMENT DESTINATION ADDRESS JMP XFER3 CONTINUE XFRERR EQU $ HLT PROGRAM TRANSFER ERROR * A = SOURCE DATA, Q = DESTINATION DATA * X = SOURCE ADDRESS, Y = DESTINATION ADDRESS * JMP XFER RESTART PROGRAM TRANSFER TITL ************************************************** * * ----- A04000 ----- * *----- TEST FOR JMP, JEQ, JNE, JGT, JGE, JLT, JLE * * ********************************************** **** A04000 EQU $ COPY =1,A DISPLAY CODE FOR INSTRUCTION DIAG. JST SLVDSP JUMP TO CONSOLE DISPLAY ROUTINE COPY =PDNSLV,A ADDRESS OF SLAVE POWER DOWN COPY A,:8F STORE AT POWER-DOWN TRAP COPY =:FFFF,A -- CURRENT SLAVE NO LONGER EXECUTING MEMORY COPY A,*MEMPNT -- TEST (SLAVE POWER-FAIL OPERATIONAL) COPY =0,A COPY A,*FLAG1P RESET PUBLIC MEMORY FLAG * COPY PTFFFF,A JEQ A,$+2 JMP $+2 ERROR: JEQ,FAILED,ON,A,<,0 JNE A,$+2 ERROR: JNE,FAILED,ON,A,<,0 JLT A,$+2 ERROR: JLT,FAILED,ON,A,<,0 JGE A,$+2 JMP $+2 ERROR: JGE,FAILED,ON,A,<,0 * COPY =0,Q JEQ Q,$+2 ERROR: JEQ,FAILED,ON,Q,=,0 JNE Q,$+2 JMP $+2 ERROR: JNE,FAILED,ON,Q,=,0 JLT Q,$+2 JMP $+2 ERROR: JLT,FAILED,ON,Q,=,0 JLE Q,$+2 ERROR: JLE,FAILED,ON,Q,=,0 JGT Q,$+2 JMP $+2  ERROR: JGT,FAILED,ON,Q,=,0 JGE Q,$+2 ERROR: JGE,FAILED,ON,Q,=,0 * COPY =1,X JLE X,$+2 JMP $+2 ERROR: JLE,FAILED,ON,X,>,0 JGT X,$+2 ERROR: JGT,FAILED,ON,X,>,0 JMP A04000  ORG $-1 NOP IMS PCOUNT SHOULD = :0005 JMP A06000 *NOP ME FOR LOOP* JMP A04000 * FLAG1P WORD FLAG1+:8000 POINTER TO FLAG1 IN PUBLIC MEMORY LPOOL ************************************************** * * ----- A06000 ----- * *----- TEST FOR OR MEM,2REG (INCLUSIVE OR) * * ************************************************** A06000 EQU $ COPY PT00FF,A COPY PTF0F0,Q COPY Q,TEMP01 STORE '0' OR TEMP01,A CSK  A,=:F0FF NOP ERROR: 'OR',FAILED,'A',SHOULD,BE,:F0FF * * ************************************************** * * ----- A07000 ----- * * TEST FOR XOR MEM,2REG (EXCLUSIVE OR) * * ************************************************** COPY  PT00FF,Q COPY PTF0F0,A COPY A,TEMP01 XOR TEMP01,Q CSK Q,=:F00F NOP ERROR: 'XOR',FAILED,'Q',SHOULD,BE,:F00F ************************************************** * * ----- A08000 ----- * * TEST FOR AND MEM,2REG * * ************************************************** COPY PT00FF,A COPY PTF0F0,Q COPY Q,TEMP01 STORE 'Q' AND TEMP01,A TEMP01=0, A=:FFFF CSK A,=:F0 NOP ERROR: 'AND',FAILED,'A',SHOULD,BE,:F0 JMP A06000 ORG $-1 NOP IMS PCOUNT SHOULD = :0006 ************************************************** * * ----- A0A000 ----- * * TESTS FOR RBIT OV,S SBIT OV,S JT OV,MEM JF OV,MEM * * ************************************************** * * DETAIL TEST ON STATUS WORD (OV AND BYTE MODE ) * * A0A000 EQU $ COPY STATSV,A COPY A,S RESET STATUS COPY =2,A OR STATSV,A NORMAL STATUS W/ OV SET COPY A,TEMP01 SBIT 1,S SET OVERFLOW COPY S,Q LOAD Q FROM S CSK Q,TEMP01 NOP ERROR: ---ERROR-,SBIT,FAILED-- JF OV,$+4 JT OV,$+4 ERROR: ---ERROR-,JT,FAILED,OV=1 JMP $+2 ERROR: ---ERR OR-,JF,FAILED,OV=1 COPY S,Q CSK Q,STATSV NOP ERROR: 'JT',DID,NOT,RESET,OV,BIT JT OV,$+4 JF OV,$+4 ERROR: ---ERROR-,JF,FAILED,OV=0 JMP $+2 ERROR: ---ERROR-,JT,FAILED,OV=0 SBIT 1,S SET OV RBIT 1,S COPY =:FF,Q COPY S,Q CSK Q,STATSV NOP ERROR: ---ERROR-,RBIT,FAILED JMP A0A000 ORG $-1 NOP IMS PCOUNT SHOULD = :0007 ************************************************** * * ----- A0B000 ----- * *----- TEST FOR SET BYTE MODE AND SET WORD MODE. * CHECK TO SEE IF SBM TURNS ON BIT 2 IN PSW * AND SWM TURNS OFF BIT 2 IN PSW * * ************************************************** A0B000 EQU $ COPY =0,Q ZERO Q REG COPY STATSV,A CLEAR A REG COPY A,S ZERO PSW COPY  =4,Q OR STATSV,Q NORMAL STATUS W/ BYTE MODE SET COPY Q,TEMP01 SBIT 2,S BYTE MODE BIT ON  COPY S,A RBIT 2,S BYTE MODE BIT OFF CSK A,TEMP01 NOP ERROR: 'SBM',DID,NOT,SET,BYTE,MODE,BIT. COPY S,A CSK A,STATSV NOP ERROR: 'SWM',DID,NOF,TURN,OFF,BYTE,MODE,BIT JMP A0B000 ORG $-1 NOP IMS PCOUNT SHOULD = :0008 ************************************************** * * ----- A0C000 ----- * *----- SIMPLE TEST ON SIN . FORCED WORD MODE AND * EFFECT ON Q REG ARE CHECKED HERE.FORCED * INTERRUPT * * ************************************************** A0C000 EQU $ COPY =4,A OR STATSV,A COPY =:00FF,Q 00FF TO Q REG COPY Q,TEMP01 COPY A,S SET S TO BYTE MODE SIN :6 COPY TEMP01,A LOAD A WITH 00FF CSK A,=:00FF NOP ERROR: 'SIN',FAILED,'A'=:00FF,=TEMP01 COPY STATSV,A COPY A,S RESTORE 'S' TO WORD MODE JMP A0C000 ORG $-1 NOP IMS PCOUNT SHOULD = :0009 JMP A0E000 *NOP ME FOR LOOP* JMP A0C000 LPOOL ************************************************** * * ---- A0E000 ---- * * SHIFT 4REG,LO,CNT * ************************************************** * * SHIFT A,LO,CNT * A0E000 EQU $ COPY STATSV,A COPY A,S COPY PT5555,A SHIFT A,LO,1 CSK A,PTAAAA NOP ERROR: SHIFT,FAILED,--,A,SHOULD,=,:AAAA * * SHIFT Q,LO,4 * COPY PTAAAA,Q SHIFT Q,LO,4  CSK Q,=:AAA0 NOP ERROR: SHIFT,FAILED,--,Q,SHOULD,=,:AAA0 * * SHIFT X,LO,9 * COPY PT6666,X SHIFT X,LO,8 COPY X,A CSK A,=:6600 NOP ERROR: SHIFT,FAILED,--,X,SHOULD,=,:6600 JT OV,$+2 JMP $+2 ERROR: SHIFT,FAILED,--,OV,WAS,SET * * SHIFT Y,LO,13 * COPY PTAAAA,Y SHIFT Y,LO,13 COPY Y,A CSK A,=:4000 NOP ERROR: SHIFT,FAILED,--,Y,SHOULD,=,:4000 JT OV,$+2  ERROR: SHIFT,FAILED,--,OV,WAS,NOT,SET PATCHX A0E000 JMP A0F000 LPOOL ******************************************************* * *----- SECTION A0F000 ----- * * FMT 4REG * **************************************************** *** * A0F000 EQU $ COPY STATSV,A COPY A,S COPY PTFFFF,Y FMT Y FETCH M/C TYPE IN 'Y' COPY Y,A CSK A,=:0010 COMPARE WITH EXPECTED MACHINE TYPE NOP ERROR: 'FMT',FAILED IMS PCOUNT ************************************************** * * ---- A10000 ---- * * XNX 4REG * ************************************************** A10000 EQU $ COPY =:10,A XNX A COPY =:20,Q CSK Q,=:30  NOP ERROR: XNX,FAILED,--,Q,SHOULD,=,:30 JMP A0F000 ORG $-1 NOP IMS PCOUNT SHOULD = :000C JMP *A11001 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP * COPY  PCOUNT,A CSK A,=:000C NOP ERROR: SOME,OF,TESTS,NOT,EXECUTED JMP A12000 A11001 WORD A02000  LPOOL A12000 EQU $ TITL INSTRUCTION DIAGNOSTIC -- SEC. B0-1 ******************************************************* * * *------------ SECTION B0 ------------ * * OBJECTIVE: IN THIS SECTION EXTENSIVE TESTING OF * THE FOLLOWING INSTRUCTIONS IS DONE. * * * COPY 4REG,MEM * * ******************************************************* * * *----- TEST STRUCTURE ----- * * GENERAL: EACH INSTRUCTION TEST IS VERIFIED UNDER * THE FOLLOWING CONDITIONS: * * (1) ADDRESSING MODES: THERE ARE SIX MODES. * ABSOLUTE DIRECT ADDRESSING (SPAD) * ABSOLUTE INDIREC ADDRESSING * RELATIVE DIRECT ADDRESSING * RELATIVE INDIRECT ADDRESSING * INDEXED DIRECT ADDRESSING * INDEXED INDIRECT ADDRESSING * * (2) WORD MODE * * (3) BYTE MODE * * (4) MULTIPLE LEVEL INDIRECT ADDRESSING * ******************************************************* TITL ******************************************************* * * PROGRAM STRUCTURE: PROGRAM IS DIVIDED INTO THE * FOLLOWING SECTIONS: * * B04000 -- IN THIS SECTION 'COPY 4REG,MEM' * INSTRUCTION IS TESTED UNDER ALL THE * ADDRESSING MODE AND UNDER WORD MODE. * * B05000 -- SAME TEST AS IN SECTION B0400 EXCEPT IT IS * PERFORMED UNDER BYTE MODE. * * B06000 -- IN THIS SECTION * 'COPY 4REG,MEM' AND 'CSK 2REG,MEM' ARE *  EXECUTED UNDER MULTIPLE LEVEL INDIRECT * ADDRESSING FOR WORD MODE. * ******************************************************* ************************************************** * *----- B04000 ----- * * ADDRESSIN MODES ON COPY 4REG,MEM * -- WORD MODE -- ************************************************** * * ****** * ABSOLUTE DIRECT ADDRESSING. USING 'A'. * -- WORD MODE -- ****** * B04000 EQU $ COPY STATSV,A COPY A,S SET PSW COPY =:0F,A  COPY A,TEMP01 STORE'A' CSK A,TEMP01 NOP ERROR: 'A'=,TEMP01,=:0F,IF,NOT,COPY,FAILED,ELSE,CSK ****** * ABSOLUTE INDIRECT ADDRESSING USING 'A' * -- WORD MODE -- * COPY A,*MEM ****** * * COPY A,*MEM * B04010 EQU $ COPY STATSV,A COPY A,S SET 'S' COPY =TEMP01,A COPY A,TEMP02 COPY =:0F,A COPY A,*TEMP02 CSK A,TEMP01 NOP ERROR: CSK,FAILED,IF,'A'=,TEMP01=,:0F,ELSE,COPY,FAILED.   PATCHX B04000 ****** * RELETIVE DIRECT ADDRESSING. USING 'A' * -- WORD MODE -- * COPY A,MEM ****** * * COPY A,MEM * B04020 EQU $ COPY STATSV,A COPY A,S SET 'S' COPY =:0F,A COPY A,CEL442 STORE 'A' CSK A,CEL442 NOP ERROR: CSK,FAILED,IF,'A'=,CEL442,=:0F,ELSE,COPY,FAILED. * ****** * RELATIVE INDIRECT ADDRESSING. USING 'A' * -- WORD MODE -- * COPY A,*MEM ****** * * COPY A,*MEM * B04030 EQU $ COPY STATSV,A COPY A,S SET PSW COPY =CEL442,A COPY A,CEL441 CEL441 = CEL442 ADD. COPY =:FF,A FF TO 'A' COPY A,*CEL441 CSK A,CEL442 NOP ERROR: CSK,FAILED,IF,'A'=CEL442,=:FF,ELSE,COPY,FAILED PATCHX B04020 JMP B04040 LPOOL ****** * INDEXED ADDRESSING USING 'X', (DIRECT) * -- WORD MODE -- * COPY A,1(X) ****** CEL440 WORD 0 CEL441 WORD 1 CEL442 WORD 0 * * COPY A,1(X) * B04040 EQU $  COPY STATSV,A COPY A,S SET PSW COPY =CEL441,X CEL441 ADD IN X COPY =:F0,A COPY A,1(X) STORE 'A' AT CEL442 CSK A,CEL442 NOP ERROR: CSK,FAILED,IF,'A'=,CEL442,=:F0,ELSE,COPY,FAILED. ****** * INDEXED ADDRESSING USING 'Y'. (DIRECT) * -- WORD MODE -- * COPY A,1(Y) ****** * * * COPY A,1(Y) * B04050 EQU $ COPY STATSV,A COPY A,S SET PSW COPY =CEL441,Y CEL441 ADD IN 'Y' COPY =:A5,A LOAD 'A' WITH :00A5 COPY A,1(Y) STORE 'A' AT CEL442 CSK A,CEL442 NOP ERROR: CSK,FAILED,IF,'A'=:A5,=CEL442,ELSE,COPY,FAILED ****** * INDEXED ADDRESSING USING 'X','Y'.(DIRECT) * -- WORD MODE -- * COPY A,1(X,Y) ****** * * COPY A,1(X,Y) * B04060 EQU $ COPY STATSV,A COPY A,S SET S REG COPY =CEL440,Y CEL440 ADD IN Y COPY =1,X LOAD 'X' BY 1 COPY =:5A,A COPY A,1(X,Y) STORE A AT CEL442  CSK A,CEL442 NOP ERROR: CSK,FAILED,IF,'A'=:5A,=CEL442,ELSE,COPY,FAILED PATCHX B04040 JMP B04070 ****** * INDIRECT INDEXED ADDRESSING USING 'X'. * -- WORD MODE -- * COPY A,*1(X) ****** CEL470 WORD 0 CEL471 WORD 1 CEL472 WORD 0 * * COPY A,*1(X) * B04070 EQU $ COPY STATSV,A COPY A,S COPY =1,A  COPY A,TEMP01 COPY =CEL471,X COPY =:FF,A LOAD :00FF IN 'A' COPY A,*TEMP01(X) CEL472=:00FF  CSK A,CEL472 NOP ERROR: CSK,FAILED,IF,'A'=:FF,=CEL472,ELSE,COPY,FAILED ****** * INDIRECT INDEXED ADDRESSING USING 'Y'. * -- WORD MODE -- * COPY A,*1(Y) ****** * * COPY A,*1(Y) * B04080 EQU $ COPY STATSV,A  COPY A,S SET PSW COPY =CEL472,A COPY A,CEL471 CEL471=.CEL472 ADD. COPY =CEL470,Y  COPY =:0F,A LOAD 'A' BY :000F COPY A,*1(Y) CEL472=:000F CSK A,CEL472 NOP ERROR: CSK,FAILED,IF,'A'=:0F,=CEL472,ELSE,COPY,FAILED ****** * INDIRECT INDEXED ADDRESSING USING X,Y. * -- WORD MODE -- *  COPY A,*1(X,Y) ****** * * COPY A,*1(X,Y) * B04090 EQU $ COPY =1,A COPY A,CEL471 COPY STATSV,A   COPY A,S SET S REG COPY =CEL471,X CEL471 ADD IN'X' COPY =CEL470,Y CEL470 ADD IN 'Y' COPY =:55,A COPY A,*1(X,Y) STORE 'A' AT CEL472 CSK A,CEL472 NOP ERROR: CSK,FAILED,IF,'A'=:55,=CEL472,ELSE,COPY,FAILED PATCHX B04070 JMP B04100 LPOOL ****** * ADDRESSING MODES ON 'Q','X', AND 'Y'. * EACH REGISTER IS TESTED UNDER ONE * ADDRESSING MODE ONLY. SELECTION OF A * REGISTER AND ADDRESSING MODE IS RANDOM. * -- WORD MODE -- ****** CEL410 WORD 0 CEL411 WORD 0 CEL412 WORD 0 * ****** * RELATIVE INDIRECT ADDRESSING USING 'Q'. * COPY Q,*MEM ****** * * COPY Q,*MEM * B04100 EQU $ COPY PT6666,Q COPY STATSV,A COPY A,S SET 'S' COPY =CEL412,A COPY A,CEL411 CEL411 =ADD.OF CEL412 COPY Q,*CEL411 STORE 'Q' AT CEL412 CSK Q,CEL412 NOP ERROR: CSK,FAILED,IF,'Q'=:6666,=CEL412,ELSE,COPY,FAILED ****** * INDEXED INDIRECT ADDRESSING USING INDEX * REGISTER 'Y' ON ''X' * -- WORD MODE -- * COPY X,*1(Y) ****** * * COPY X,*1(Y) * B04110 EQU $ COPY PT00FF,X COPY STATSV,A COPY A,S SET 'S' COPY =CEL412,A COPY  A,CEL411 CEL411=ADD.OF CEL412 COPY =CEL410,Y COPY X,*1(Y) STORE'X' AT CEL412 COPY X,A CSK A,CEL412 NOP ERROR: 'A'=,CEL412=,:00FF,CEL411=,CEL412 ADDRESS,'Y'=,CEL410,ADD ****** * INDEXED INDIRECT ADDRESSING USING INDEX * REGISTER 'X' ON 'Y' * -- WORD MODE -- * COPY Y,*1(X) ****** * * COPY Y,*1(X) * B04120 EQU $ COPY PTF0F0,Y COPY STATSV,A COPY A,S SET 'S' COPY =1,A COPY A,TEMP01  COPY =CEL411,X COPY Y,*TEMP01(X) STORE 'Y' AT CEL412 COPY Y,A CSK A,CEL412 NOP  ERROR: 'A'='Y'=,CEL412=,:F0F0,CEL411=,CEL412,ADD PATCHX B04100 COPY PCOUNT,A CSK A,=:0011 NOP ERROR: SOME,OF,TESTS,NOT,EXECUTED GLPOL: TITL INSTRUCTION DIAGNOSTIC -- SEC. B0-5 ************************************************** * *----- B05000 ----- * * ADDRESSING MODES ON COPY 4REG,MEM * -- BYTE MODE -- * ************************************************** * ****** * ABSOLUTE DIRECT ADDRESSING MODE. USING 'A' * -- BYTE MODE -- * COPYB A,SPAD ****** * * COPYB A,SPAD * B05000 EQU $ COPY STATSV,A COPY A,S SET 'S'  COPY =0,A COPY A,TEMP01 COPY PTAA55,A COPY PT55AA,Q SBIT 2,S COPYB A,TEMP01  RBIT 2,S COPY =:5500,A CSK A,TEMP01 NOP ERROR: COPY,FAILED,--,A,=,TEMP01,=,:5500 SBIT 2,S COPYB Q,TEMP01+1 RBIT 2,S CSK Q,TEMP01 NOP ERROR: COPY,FAILED,--,Q,=,TEMP01,=,:55AA PATCHX B05000 ****** * ABSOLUTE INDIRECT ADDRESSING. USING 'A' * -- BYTE MODE -- * COPY A,*SPAD ****** * * COPY A,*SPAD * B05010 EQU $ COPY =TEMP01,A SHIFT A,LO,1 TEMP01 BYTE ADD. IN 'A' COPY A,TEMP02 TEMP02 = TEMP01 BYTE ADD. COPY =0,A COPY A,TEMP01 COPY STATSV,A COPY A,S SET '  S' COPY PTAA55,A SBIT 2,S COPY A,*TEMP02 :55 TO TEMP01 BYTE 0 RBIT 2,S COPY =:5500,A CSK A,TEMP01 NOP ERROR: COPY,FAILED,--,A,=,TEMP01,=,:5500 PATCHX B05010 JMP B05020  LPOOL ****** * RELATIVE DIRECT ADDRESSING USING 'A' * -- BYTE MODE -- * COPYB A,MEM ****** * * COPYB A,MEM * B05020 EQU $ COPY STATSV,A COPY A,S SET 'S' COPY =0,A COPY A,CEL542 COPY  PTAA55,A COPY PT55AA,Q SBIT 2,S COPYB A,CEL542 RBIT 2,S COPY =:5500,A CSK  A,CEL542 NOP ERROR: COPY,FAILED,--,A,=,CEL542,=,:5500 SBIT 2,S COPYB Q,CEL542+1 RBIT 2,S CSK Q,CEL542 NOP ERROR: COPY,FAILED,--,Q,=,CEL542,=,:55AA PATCHX B05020 ****** * RELATIVE INDIRECT ADDRESSING USING 'A' * -- BYTE MODE -- * COPY A,*MEM MEM = BYTE ADD. OF DESTINATION. ****** * * * COPY A,*MEM * B05030 EQU $ COPY =0,A COPY A,CEL540 COPY =CEL540,A SHIFT A,LO,1 COPY A,CEL542 IMS CEL542 CEL542 = CEL540 BYTE 1 ADD COPY STATSV,A COPY A,S COPY =:AA,A COPY PT55AA,Q SBIT 2,S COPY Q,*CEL542 RBIT 2,S CSK A,CEL540 NOP ERROR: COPY,FAILED,--,Q,=,CEL540,=,:AA PATCHX B05030 JMP B05040 LPOOL 2 ****** * INDEXED DIRECT ADDRESSING. INDEX REG. IS 'X' * -- BYTE MODE -- * COPY A,(NTCX) 'X'= BYTE ADD. * EA= 'X'+CNT ****** * CEL540 WORD 0 CEL541 WORD 0 CEL542 WORD 0 LPOOL * * COPY A,1(X) * B05040 EQU $ COPY =CEL541,X SHIFT X,LO,1 CEL541 BYTE ADD IN 'X' COPY STATSV,A COPY A,S COPY =0,A COPY A,CEL542 COPY =:5566,A SBIT 2,S COPY A,2(X) :66 TO CEL542 BYTE 00 RBIT 2,S COPY =:6600,A CSK A,CEL542 NOP ERROR: COPY,FAILED,--,A,=,CEL542,=,:6600 PATCHX B05040 ****** * INDEXED DIRECT ADDRESSING. INDEX REG. = 'Y' * -- BYTE MODE -- * COPY A,CNT(Y) 'Y'= WORD ADD * EA = 2(Y) + CNT ****** * * COPY A,CNT(Y) * B05050 EQU $ COPY =CEL541,Y CEL541 WORD ADD IN 'Y' COPY STATSV,A COPY  A,S COPY =0,A COPY A,CEL542 COPY =:5566,A SBIT 2,S COPY A,2(Y) CEL542 BYTE0 =:66 RBIT 2,S COPY =:6600,A CSK A,CEL542 NOP ERROR: COPY,FAILED,--,A,=,CEL542,=,:6600  PATCHX B05050 ****** * INDEXED DIRECT ADDRESSING USING 'X' & 'Y' * -- BYTE MODE -- * COPY A,CNT(X,Y) 'X'=BYTE ADD. * 'Y'= WORD ADD. * EA = 2(Y) + CNT + (X) ****** * * COPY A,CNT(X,Y) * B05060 COPY =CEL540,Y CEL540 WORD ADDRESS IN 'Y' COPY =2,X COPY STATSV,A COPY A,S COPY =0,A COPY A,CEL542 COPY =:5566,A SBIT 2,S COPY A,2(X,Y) CEEL542 BYTE 0 = :66 RBIT 2,S COPY =:6600,A CSK A,CEL542 NOP ERROR: COPY,FAILED,--,A,=,CEL542,=,:6600 PATCHX B0506! 0 JMP B05070 LPOOL 4 ****** * INDEXED INDIRECT ADDRESSING USING 'X'. * -- BYTE MODE -- * COPY  A,*CNT(X) AP =(CNT) (AP)=BYTE ADD * EA= (AP)+(X) * 'X'=BYTE ADD ****** * CEL570 WORD 0 CEL571 WORD 0 CEL572 WORD 0 * * COPY A,*CNT(X) * B05070 EQU $ COPY =2,A COPY A,TEMP01  COPY =CEL571,X SHIFT X,LO,1 CEL571 BYTE ADD IN 'X' COPY STATSV,A COPY A,S COPY =0,A  COPY A,CEL572 COPY =:66FF,A SBIT 2,S COPY A,*TEMP01(X) CEL572 BYTE0 =:FF RBIT 2,S COPY =:FF00,A CSK A,CEL572 NOP ERROR: COPY,FAILED,--,A,=,CEL572,=,:FF00 PATCHX B05070 ****** * INDEXED INDIRECT ADDRESSING USING 'Y'. * -- BYTE MODE -- * COPY A,*CNT(Y) AP=(CNT)+(Y) (AP)=BYTE ADD. * EA=(AP) ****** * * COPY A,*CNT(Y) * B05080 EQU $ COPY =CEL572,A SHIFT A,LO,1 CEL572 BYTE ADD IN 'A' COPY A,CEL571 COPY =CEL570,Y COPY STATSV,A COPY A,S COPY =0,A  COPY A,CEL572 COPY =:66FF,A SBIT 2,S COPY A,*1(Y) CEL572 BYTE0 =:FF RBIT 2,S  COPY =:FF00,A CSK A,CEL572 NOP ERROR: COPY,FAILED,--,A,=,CEL572,=,:FF00 PATCHX B05080 ***** * INDEXED INDIRECT ADDRESSING USING 'X'& 'Y'. * -- BYTE MODE -- * COPY A,*CNT(Y,Y) AP =(Y) +(CNT) *  EA = (AP) + (X) ****** * * COPY A,*CNT(X,Y) * B05090 EQU $ COPY =CEL572,A SHIFT A,LO,1 CEL572 BYTE ADD IN 'A' COPY A,CEL571 COPY =CEL570,Y COPY =0,X COPY STATSV,A COPY A,S  COPY =0,A COPY A,CEL572 COPY =:FF66,A COPY =:66FF,Q SBIT 2,S COPY A,*1(X,Y) CEL572 BYTE0 =:66 RBIT 2,S COPY =:6600,A CSK A,CEL572 NOP ERROR: COPY,FAILED,--,A,=,CEL572,=,:6600 COPY =1,X SBIT 2,S COPY Q,*1(X,Y) CEL572 BYTE1 =:FF RBIT 2,S CSK Q,CEL572 NOP ERROR: COPY,FAILED,--,Q,=,CEL572,=,:66FF PATCHX B05090 JMP B050B0 LPOOL ****** * TEST ADDRESSING MODES ON 'X' & 'Y'. * -- BYTE MODE -- ****** * CEL5A0 WORD 0 CEL5A1 WORD 0 CEL5A2 WORD 0 ****** * INDEXED DIRECT ADDRESSING * --BYTE MODE -- * COPY X,CNT(Y) * COPY Y,CNT(X) ****** * * * COPY X,CNT(Y) * B050B0 EQU $ COPY =CEL5A0,Y COPY PT5555,X COPY STATSV,A COPY A,S SBIT 2,S  COPY X,2(Y) CEL5A1 BYTE0 =:55 COPY X,3(Y) CEL5A1 BYTE1 =:55 RBIT 2,S COPY PT5555,A  CSK A,CEL5A1 NOP ERROR: COPY,FAILED.,'X'=:5555,CEL5A1=,:5555 * * COPY Y,CNT(X) * B050B1 EQU $ COPY  =CEL5A0,X SHIFT X,LO,1 CEL5A0 BYTE ADD IN 'X' COPY PTF0F0,Y COPY STATSV,A COPY A,S  SBIT 2,S COPY Y,2(X) CEL5A1 BYTE0 =:F0 COPY Y,3(X) 1 =:F0 RBIT 2,S COPY  PTF0F0,A CSK A,CEL5A1 NOP ERROR: COPY,FAILED,'Y'=,:F0F0,=CEL5A1 PATCHX B050B1 JMP B060" 00 TITL INSTRUCTION DIAGNOSTIC -- SEC. B0-6 ************************************************** * * ----- B06000 ----- * * TEST COPY 4REG,MEM USING MULTIPLE LEVEL * INDIRECT ADDRESSING FOR WORD MODE. * ************************************************** * * INDEXED INDIRECT ADDRESSING USING 'X'. * * COPY A,*TEMP01(X) TEMP01 = AP1 *  (TEMP01) = TEMP02 = AP2 XA=0, BIT 15=1 * (TEMP02) + (X) = EA ************************************************* * * COPY A,*MEM(X) * B06000 EQU $ COPY =:0110,A COPY A,S RESET XA COPY =0,A COPY A,TEMP02 COPY =TEMP02,A OR =:8000,A COPY A,TEMP01 TEMP01 = TEMP02 ADD + BIT 15 SET COPY =TEMP,X COPY PTFFFF,A COPY A,*TEMP01(X) :FFFF TO TEMP COPY STATSV,Q COPY Q,S CSK A,TEMP NOP ERROR: CSK,FAILED,IF,'A'=,:FFFF,=TEMP,ELSE,COPY PATCHX B06000 ************************************************* * * INDEXED INDIRECT ADDRESSING USING 'Y'. * * COPY A,*TEMP01(Y) TEMP01 + (Y) = AP1 * (AP1) = TEMP02 = AP2 XA=0, BIT 15=1 * (TEMP02) = EA * ************************************************* * * COPY A,*0(Y) * B06010 EQU $ COPY =:0110,A COPY A,S  RESET XA COPY =0,A COPY =TEMP,A COPY A,TEMP02 TEMP02 = TEMP ADD. COPY =TEMP02,A OR  PT8000,A COPY A,TEMP01 TEMP01 = TEMP02 ADD + BIT15 SET COPY =TEMP01,Y Y = TEMP01 ADD. COPY PTAAAA,Q COPY Q,*0(Y) :AAAA TO TEMP COPY STATSV,A COPY A,S RESTORE XA CSK Q,TEMP NOP ERROR: CSK,FAILED,IF,'A'=,:FFFF,=TEMP,ELSE,COPY PATCHX B06010 COPY PCOUNT,A CSK A,=:001E  NOP ERROR: SOME,OF,TESTS,NOT,EXECUTED GLPOL: TITL INSTRUCTION DIAGNOSTIC -- SEC. B1-1 ****************************************************** * * ----------- SECTION B1 ---------- * * TESTING OF THE FOLLOWING INSTRUCTIONS: * * COPY MEM,4REG B11000 * CSK 2REG,MEM B12000 * ADD MEM,4REG B13000 * SUB MEM,4REG B14000 * JST MEM B16000 * EXCH MEM,4REG B17000 * ****************************************************** * ****************************************************** * * ----------- TEST STRUCTURE ---------- * * B11000 -- COPY MEM,4REG IS TESTED IN BYTE MODE * (WORD MODE TESTED IN SEC. A0). BYTE * ADDRESSABILITY OF THREE SUCCESSIVE * BYTES IS TESTED. ONE ADDRESSING MODE * IS TESTED * * B12000 -- SAME AS B11000, PLUS ONE SPECIAL CASE IS TESTED * * B13000 -- ADD MEM,4REG IS TESTED FOR POSITIVE * AND NEGATIVE OVERFLOW, IN ADDITION TO * NORMAL OPERATION, WITH ONE ADDRESSING * MODE. WORD MODE AND BYTE MODE ARE TESTED * * B14000 -- SUB MEM,4REG IS TESTED WITH ONE ADDRESSING * MODE. WORD MODE AND BYTE MODE ARE TESTED. * * B16000 -- JST MEM IS TESTED WITH ONE ADDRESSING MODE * * B17000 -- EXCH MEM,4REG IS TESTED WITH ALL ADDRESSING * MODES. WORD MODE AND B# YTE MODE ARE TESTED. * ****************************************************** TITL ******************************************************* * * ---- SECTION B11000 ---- * * TEST COPY MEM,REG USING * POST INDEXED DIRECT ADDRESSING - BYTE MODE. * THREE ADJACENT BYTE ADDRESSES ARE CHECKED. * ******************************************************* B11000 COPY PT55AA,A COPY A,TEMP01 COPY A,TEMP02 COPY =TEMP01,X SHIFT X,LO,1 SBIT 2,S COPY 0(X),A COPY 1(X),Q COPY 2(X),Y RBIT 2,S CSK A,=:55 NOP ERROR: COPY,FAILED,--,A,SHOULD,=,:55 CSK Q,=:AA NOP ERROR: COPY,FAILED,--,Q,SHOULD,=,=AA CSK Y,=:55 NOP  ERROR: COPY,FAILED,--,Y,SHOULD,=,:55 PATCHX B11000 TITL INSTRUCTION DIAGNOSTIC -- SEC. B1-2 ******************************************************* * * TEST CSK REG,MEM USING * PRE INDEXED DIRECT ADDRESSING - BYTE MODE. * ******************************************************* B12000 EQU $ COPY PT00FF,A COPY A,TEMP01 COPY  PT55AA,A COPY A,TEMP02 COPY =TEMP01,Y COPY =:55,A SBIT 2,S CSK A,0(Y) COMPARE A TO 0 ERROR: CSK,FAILED,--,A,>,MEM JMP $+2 ERROR: CSK,FAILED,--,A,>,MEM SBIT 2,S CSK  A,1(Y) COMPARE A TO :FF JMP $+3 NOP ERROR: CSK,FAILED,--,A,<,MEM SBIT 2,S CSK A,2(Y) COMPARE A TO :55 NOP ERROR: CSK,FAILED,--,A,=,MEM RBIT 2,S ****** * * SPECIAL CASE CSK TEST -- WORD MODE * ****** COPY PT8000,Q COPY =1,A COPY A,TEMP01 CSK Q,TEMP01 JMP $+3  NOP ERROR: CSK,FAILED,--,Q,<,MEM PATCHX B12000 TITL INSTRUCTION DIAGNOSTIC -- SEC. B1-3 ******************************************************* * * ---- SECTION B1-3 * * TEST ADD MEM,REG USING * DIRECT RELATIVE ADDRESSING * ******************************************************* * * ADD MEM,A WORD MODE * B13000 EQU $ COPY STATSV,A COPY A,S COPY PT5555,A COPY A,CEL300 COPY =:1FFF,A ADD CEL300,A  CSK A,=:7554 NOP ERROR: ADD,FAILED,--,A,SHOULD,=,:7554 * * ADD MEM,Q OVERFLOW * COPY =:5AAA,A COPY A,CEL300 COPY =:2FFF,Q ADD CEL300,Q JT OV,$+2 ERROR: ADD,FAILED,--,DID,NOT,SET,OVERFLOW CSK Q,=:8AA9 NOP ERROR: ADD,FAILED,--,Q,SHOULD,=,:8AA9 * * ADD MEM,X OVERFLOW * COPY STATSV,A COPY A,S COPY PTAAAA,A COPY A,CEL300 COPY =:A000,X ADD  CEL300,X JT OV,$+2 ERROR: ADD,FAILED,--,DID,NOT,SET,OVERFLOW COPY X,A CSK A,=:4AAA NOP ERROR: ADD,FAILED,--,X,SHOULD,=,4AAA * * ADDB MEM,Y BYTE MODE * COPY STATSV,A COPY A,S  COPY =:0010,Y COPY =:FF10,Q COPY Q,CEL300 SBIT 2,S ADDB CEL300,Y RBIT 2,S  COPY Y,A CSK A,=:010F NOP ERROR: ADDB,FAILED,--,Y,SHOULD,=,:010F PATCHX B13000 JMP$  B14000 LPOOL CEL300 RES 1,0 TITL INSTRUCTION DIAGNOSTIC -- SEC. B1-4 ******************************************************* * * ---- SECTION B14000 * * TEST SUB MEM,REG USING * ABSOLUTE DIRECT ADDRESSING * ******************************************************* * * SUB MEM,A * B14000 COPY STATSV,A COPY A,S COPY =:0100,A  COPY A,TEMP01 COPY =:000A,A SUB TEMP01,A CSK A,=:FF0A NOP ERROR: SUB,FAILED,--,A,SHOULD,=,:FF0A * * SUBB MEM,Q * COPY =:50,Q COPY =:48,A COPY A,TEMP01 SBIT 2,S  SUBB TEMP01+1,Q RBIT 2,S CSK Q,=:08 NOP ERROR: SUBB,FAILED,--,Q,SHOULD,=,:0008 PATCHX B14000 TITL INSTRUCTION DIAGNOSTIC -- SEC. B1-6 ******************************************************* * * TEST JST MEM USING * RELATIVE DIRECT ADDRESSING * ******************************************************* B16000 EQU $  COPY STATSV,A COPY A,S JST B16002 B16001 EQU $ ERROR: JST,FAILED JMP B16003 B16002 ENT COPY =B16001,A CSK A,B16002 NOP ERROR: JST,FAILED,--,WRONG,RETURN,ADDRESS B16003 EQU $  PATCHX B16000 TITL INSTRUCTION DIAGNOSTIC -- SEC. B1-7 ******************************************************* * *------------ SECTION B1-7 ------------- * * OBJECTIVE: EXTENSIVE TESTING OF THE FOLLOWING * INSTRUCTIONS: * * EXCH MEM,4REG * * *----- TEST STRUCTURE ----- * * 'EXCH' IS VERIFIED UNDER ALL THE ADDRESSING * MODES, WORD MODE AND BYTE MODE * ******************************************************* TITL ******************************************************* * *----- SECTION B17000 ----- * **** * -- WORD MODE -- * ABSOLUTE DIRECT ADDRESSING ***** ******************************************************* B17000 EQU $ COPY =0,A COPY PTF0F0,Q COPY Q,TEMP01 EXCH  TEMP01,A COPY =0,Q CSK Q,TEMP01 NOP ERROR: 'EXCH',FAILED,TEMP01,SHULD,=0 CSK A,PTF0F0 NOP ERROR: EXCH,FAILED,A,SHOULD,=,:F0F0 ****** * * ABSOLUTE INDIRECT ADDRESSING * --WORD MODE-- * ****** B17010 EQU $ COPY PTF0F0,Q COPY PTFFFF,X COPY =TEMP01,A COPY A,TEMP02 COPY Q,TEMP01 EXCH *TEMP02,X COPY PTFFFF,A CSK A,TEMP01 NOP ERROR: 'EXCH',IN,INDIRECT,ADD,FAILED COPY X,A CSK A,PTF0F0 NOP ERROR: EXCH,FAILED,X,SHOULD,=,:F0F0 PATCHX B17000 JMP B17020 ****** * *----- B17020 ----- * * RELATIVE DIRECT AND INDIRECT ADDRESSING * --WORD MODE** E-- * ***** CEL171 RES 1,0 CEL172 RES 1,0 B17020 EQU $ COPY PTFFFF,A COPY PTF0F0,Q COPY Q,CEL175 EXCH CEL175,A COPY PTFFFF,Q CSK Q,CEL175 NOP ERROR: EXCH,FAILED,CEL175,SHOULD,=,:FFFF CSK A,PTF0F0 NOP ERROR: EXCH,FAILED,A,SHOULD,=,:F0F0 * * INDIRECT RELATIVE * COPY =CEL174,A  COPY A,CEL173 COPY PT00FF,X COPY =0,A COPY A,CEL174 EXCH *CEL173,X COPY PT00FF,A%  CSK A,CEL174 NOP ERROR: EXCH,FAILED,CEL174,SHOULD,=,:00FF CSK X,=0 NOP ERROR: EXCH,FAILED,X,SHOULD,=,0 PATCHX B17020 JMP B17030 LPOOL ****** * *----- B17030 ----- * * INDEX DIRECT AND INDIRECT ADDRESSING USING 'X' * -- WORD MODE-- ***** CEL173 WORD 0 CEL174 WORD 0 CEL175 WORD 0 B17030 EQU $  COPY PT00FF,Q COPY PTFFFF,Y COPY PTFFFF,A COPY =CEL174,X CEL174 ADD IN 'X' COPY Q,CEL175 EXCH 1(X),Y CEL175 SHULD = :FFFF CSK A,CEL175 NOP ERROR: 'EXCH',FAILED,CEL175,SHULD,=:FFFF COPY Y,A CSK A,PT00FF NOP ERROR: EXCH,FAILED,A,SHOULD,=,:00FF * * INDIRECT INDEX 'X' * COPY =1,A COPY A,TEMP01 COPY =CEL174,X COPY =0,A COPY A,CEL175  EXCH *TEMP01(X),Y CSK Q,CEL175 NOP ERROR: 'Q',SHULD,=,CEL175,=:00FF COPY Y,A CSK A,=0 NOP ERROR: EXCH,FAILED,Y,SHOULD,=,0 PATCHX B17030 ****** * *----- B17040 ----- * * INDEX DIRECT AND INDIRECT ADDRESSING USING 'Y' * --WORD MODE-- * ****** B17040 EQU $ COPY PTFFFF,A COPY PT00FF,Q  COPY PTFFFF,X COPY =CEL173,Y COPY Q,CEL174 EXCH 1(Y),X CSK A,CEL174 NOP ERROR: 'A',SHOULD,=,CEL174,=:FFFF COPY X,A CSK A,PT00FF NOP ERROR: EXCH,FAILED,X,SHOULD,=,:00FF * * INDIRECT INDEX 'Y' * COPY =CEL175,A COPY A,CEL174 COPY =CEL173,Y COPY =0,A COPY A,CEL175 EXCH *1(Y),X CSK Q,CEL175 NOP ERROR: 'Q',SHULD,=,CEL175,=:00FF CSK X,=0 NOP ERROR: EXCH,FAILED,X,SHOULD,=,0 PATCHX B17040 ****** * *----- B17050 ----- * * INDEX DIRECT AND INDIRECT ADDRESSING USING HX' 'Y' * --WORD MODE-- * ****** B17050 EQU $ COPY PTFFFF,A COPY PTFFFF,Q  COPY =CEL173,Y COPY =1,X COPY X,CEL175 EXCH 1(X,Y),A CSK Q,CEL175 NOP  ERROR: 'Q',SHULD,=,CEL175,=:FFFF CSK A,=1 NOP ERROR: EXCH,FAILED,A,SHOULD,=,1 * * INDIRECT INDEX 'X' 'Y' * COPY =1,X COPY X,CEL174 CEL174 = 1 COPY =CEL173,Y COPY =CEL174,X COPY A,CEL175 CEL 175 = 1 COPY PTFFFF,A EXCH *1(X,Y),Q CSK A,CEL175 NOP ERROR: 'A',SHULD,=,CEL175,=:FFFF CSK Q,=1 NOP ERROR: EXCH,FAILED,Q,SHOULD,=,1 PATCHX B17050 JMP B17060 LPOOL ****** * *----- B17060 ----- * * ABSOLUTE DIRECT AND INDIRECT ADDRESSING * -- BYTE MODE -- * ****** B17060 EQU $ COPY PTF0F0,Q COPY PT6666,Y COPY Q,TEMP01 :F0F0 - TEMP01 SBIT 2,S  EXCHB Y,TEMP01 RBIT 2,S COPY =:66F0,A CSK A,TEMP01 NOP ERROR: 'A',SHULD,=,TEMP01,=:66F0 COPY Y,A CSK A,=:F0 NOP ERROR: EXCHB,FAILED,Y,SHOULD,=,:F0 * * ABSOLUTE INDIRECT * COPY PT00FF,X COPY =TEMP01,A SHIFT A,LO,1 BYTE ADD COPY A,TEMP02 TEMP02 = T& EMP01 BYTE ADD (BYTE 0) COPY A,TEMP IMS TEMP TEMP = TEMP01 BYTE ADD (BYTE 1) COPY PT55AA,A  COPY A,TEMP01 SBIT 2,S EXCH Q,*TEMP02 TEMP01 BYTE0 =F0 EXCH X,*TEMP TEMP01 BYTE1 = FF RBIT 2,S COPY =:F0FF,A CSK A,TEMP01 NOP ERROR: EXCH,FAILED,A,SHOULD,=,:F0FF  CSK Q,=:55 NOP ERROR: EXCH,FAILED,Q,SHOULD,=,:55 COPY X,Q CSK Q,=:AA NOP ERROR: EXCH,FAILED,X,SHOULD,=,.:66 PATCHX B17060 JMP B17070 ****** * *----- B17070 ----- * * RELATIVE DIRECT AND INDIRECT ADDRESSING * -- BYTE MODE -- * ****** CEL177 RES 1 CEL178 RES 1 B17070 EQU $ COPY =:F0AA,A  COPY PTAAAA,Q COPY PTF0F0,X COPY Q,CEL177 :AAAA IN SBIT 2,S EXCHB X,CEL177  RBIT 2,S CSK A,CEL177 NOP ERROR: 'A',SHOULD,=,CEL177,=:F0AA COPY X,A CSK A,=:AA NOP ERROR: EXCH,FAILED,X,SHOULD,=,:AA * * INDIRECT RELATIVE * COPY =CEL178,A SHIFT A,LO,1  BYTE ADD COPY A,CEL177 COPY Q,CEL178 COPY PTF0F0,X COPY =:F0AA,A SBIT 2,S  EXCH X,*CEL177 RBIT 2,S CSK A,CEL178 NOP ERROR: 'A',SHOULD,=,CEL178,=:AAF0 COPY X,A CSK A,=:AA NOP ERROR: EXCH,FAILED,X,SHOULD,=,:AA PATCHX B17070 JMP B17080  LPOOL ****** * *----- B17080 ----- * * INDEX DIRECT AND INDIRECT ADDRESSING 'X' AND 'Y' * --BYTE MODE -- * ***** CEL179 RES 1 CEL180 RES 1 CEL181 RES 1 B17080 EQU $ COPY PTFFFF,A COPY PTF0F0,Q COPY =CEL179,X SHIFT X,LO,1 CEL179 BYTE ADD IN 'X' COPY A,CEL179 CEL179 = :FFFF. COPY Q,CEL180  CEL180 = :F0F0 COPY =CEL179,Y CEL179 WORD ADD IN 'Y' SBIT 2,S EXCH 1(X),Q , CEL179 = :FFF0, Q=:00FF EXCHB 2(Y),A CEL180 = :FFF0, A=:00F0 RBIT 2,S CSK A,=:F0 NOP ERROR: EXCH,FAILED,A,SHOULD,=,:F0 CSK Q,=:FF NOP ERROR: EXCH,FAILED,A,SHOULD,=,:FF COPY =:FFF0,A  CSK A,CEL179 NOP ERROR: 'A',SHOULD,=,CEL179,=:FFF0 CSK A,CEL180 NOP ERROR: CEL180,SHOULD,=:FFF0 * * INDIRECT INDEX USING (X) * COPY =2,A COPY A,TEMP01 COPY =CEL179,X SHIFT X,LO,1 CEL179 BYTE ADD IN 'X' COPY PT5555,A COPY A,CEL180 COPY =0,Q SBIT 2,S  EXCH *TEMP01(X),Q RBIT 2,S COPY =:0055,A CSK A,CEL180 NOP ERROR: 'A',SHULD,=,CEL180,=:0055 CSK Q,=:55 NOP ERROR: EXCH,FAILED,Q,SHOULD,=,:55 * * INDIRECT INDEX USING (Y) * COPY =CEL179,Y COPY =CEL181,A SHIFT A,LO,1 COPY A,CEL180 COPY PTF0F0,A COPY A,CEL181 COPY PTFFFF,A SBIT 2,S EXCH A,*1(Y) RBIT 2,S COPY =:FFF0,Q CSK Q,CEL181 NOP ERROR: EXCH,FAILED,CEL181,SHOULD,=,:FFF0 CSK A,=:F0 NOP ERROR: EXCH,FAILED,A,SHOULD,' =,:F0 PATCHX B17080 GLPOL: ***** * *----- B17090 ----- * * INDEX DIRECT AND INDIRECT ADDRESSING USING (X,Y) * -- BYTE MODE -- * ****** B17090 EQU $ COPY =CEL180,Y COPY =1,X COPY PTFFFF,A COPY A,CEL181 COPY PTF0F0,A SBIT 2,S EXCH 2(X,Y),A RBIT 2,S CSK A,=:FF NOP  ERROR: EXCH,FAILED,A,SHOULD,=,:FF COPY =:FFF0,A CSK A,CEL181 NOP ERROR: EXCH,FAILED,CEL181,SHOULD,=,:FFF0 * * INDIRECT INDEX * COPY PTFFFF,Q COPY =CEL181,A SHIFT A,LO,1 CEL181 BYTE ADD IN HA' COPY A,CEL180 COPY =CEL179,Y 'Y' = CEL179 ADD COPY =0,X COPY PT6666,A  COPY A,CEL181 CEL181 =:6666 COPY =:FF66,A SBIT 2,S EXCH *1(X,Y),Q RBIT 2,S CSK A,CEL181 NOP ERROR: 'A',SHULD,=,CEL181,=:FF00 CSK Q,=:66 NOP ERROR: EXCH,FAILED,Q,SHOULD,=,:66 PATCHX B17090 ***** * *----- B170A0 ----- * * INDEX MULTILEVELINDIRECT ADDRESSING USING 'X' * ***** B170A0 EQU $ COPY =:0110,A COPY A,S COPY =0,A COPY A,TEMP02 COPY =TEMP02,A OR =:8000,A COPY A,TEMP01 COPY =TEMP,X COPY PTAAAA,A COPY A,TEMP COPY PTFFFF,A  EXCH A,*TEMP01(X) CSK A,PTAAAA NOP ERROR: EXCH,FAILED,A,SHOULD,=,:AAAA COPY TEMP,Q  CSK Q,PTFFFF NOP ERROR: EXCH,FAILED,TEMP,SHOULD,=,:FFFF * * INDEX MULTILEVEL INDIRECT ADDRESSING USING 'Y' * B170B0 EQU $ COPY =:0110,A COPY A,S COPY =TEMP,A COPY A,TEMP02 COPY =TEMP02,A OR PT8000,A COPY A,TEMP01 COPY =TEMP01,Y COPY PTFFFF,A COPY A,TEMP COPY PTAAAA,Q EXCH Q,*0(Y) CSK Q,PTFFFF NOP ERROR: EXCH,FAILED,Q,SHOULD,=,:FFFF COPY TEMP,A CSK A,PTAAAA NOP ERROR: EXCH,FAILED,TEMP,SHOULD,=,:AAAA COPY STATSV,A COPY A,S  PATCHX B170A0 COPY PCOUNT,A CSK A,=:2D NOP ERROR: SOME,OF,TESTS,NOT,EXECUTED GLPOL: TITL INSTRUCTION DIAGNOSTIC -- SEC. C ************************************************** * * ----------- SECTION C ---------- * * TESTING OF THE FOLLOWING INSTRUCTIONS: * * NEG 8REG,8REG C02000 * ADD 8REG,8REG  C11000 * SUB 8REG,8REG C12000 * AND 8REG,8REG C13000 * XOR 8REG,8REG  C14000 * OR 8REG,8REG C15000 * CSM 8REG,8REG C21000 * CSN 8REG,8REG  C22000 * CSK 8REG,8REG C23000 * EXCH 8REG,8REG C24000 * COMP 8REG,8REG  C25000 * ************************************************** * * ----------- TEST STRUCTURE ---------- * * EACH INSTRUCTION IS TESTED FOR CORRECT * OPERATION WITH A DIFFERENT REGISTER PAIR * FOR EACH INSTRUCTION, OR EACH CONDITION * OF AN INSTRUCTION. NEG & ADD ARE CHECKED * FOR CORRECT SETTING OF OV. CSM, CSN, & CSK * ARE CHECKED FOR ALL COMPARE OUT( COMES. * ************************************************** TITL INSTRUCTION DIAGNOSTIC -- SEC. C0-2 ***** * * ---- C02000 ----- * * NEG Q,A * ***** C02000 EQU $ COPY PT5555,Q COPY =0,A NEG Q,A CSK A,=:AAAB NOP ERROR: NEG,FAILED,--,A,SHOULD,=,:AAAB COPY =:8000,X NEG X,Q JT OV,$+2  ERROR: NEG,FAILED,--,DID,NOT,SET,OV CSK Q,PT8000 NOP ERROR: NEG,FAILED,--,Q,SHOULD,=,:8000 TITL INSTRUCTION DIAGNOSTIC -- SEC. C1-1 ***** * * ---- C11000 * * ADD Y,X * ***** C11000 EQU $ COPY PT6666,Y COPY =:0FFF,X ADD Y,X COPY X,A CSK A,=:7665 NOP ERROR: ADD,FAILED,--,X,SHOULD,=,:7665 *** * ADD L,Y POS. OVERFLOW *** COPY PT5555,Y COPY PT5555,A COPY A,L  ADD L,Y JT OV,$+2 ERROR: ADD,FAILED,--,DID,NOT,SET,OV COPY Y,A CSK A,PTAAAA NOP ERROR: ADD,FAILED,--,Y,SHOULD,=,:AAAA *** * ADD K,L NEG. OVERFLOW *** COPY PTAAAA,A COPY  A,K COPY A,L ADD K,L JT OV,$+2 ERROR: ADD,FAILED,--,DID,NOT,SET,OV COPY L,A  CSK A,=:5554 NOP ERROR: ADD,FAILED,--,L,SHOULD,=,:5554 TITL INSTRUCTION DIAGNOSTIC -- SEC. C1-2 ***** * * ---- C12000 ---- * * SUB S,K * ***** C12000 EQU $ COPY =:FF,A COPY A,K COPY =:43,A  COPY A,S SUB S,K COPY STATSV,A COPY A,S COPY K,A CSK A,=:BC NOP  ERROR: SUB,FAILED,--,K,SHOULD,=,:BC PATCHX C02000 TITL INSTRUCTION DIAGNOSTIC -- SEC. C1-3 ***** * * ---- C13000 ---- * * AND A,Q * ***** C13000 EQU $ COPY PTF0F0,A COPY PT00FF,Q AND A,Q CSK Q,=:F0 NOP ERROR: AND,FAILED,--,Q,SHOULD,=,:F0 * ***** * * ---- C14000 ---- * * XOR Q,X * ***** C14000 EQU $ COPY PTAAAA,Q COPY PT6666,X XOR Q,X COPY X,A CSK A,=:CCCC NOP  ERROR: XOR,FAILED,--,X,SHOULD,=,:CCCC TITL INSTRUCTION DIAGNOSTIC -- SEC. C1-5 ***** * * ---- C15000 ---- * *  OR X,Y * ***** C15000 EQU $ COPY PT6666,X COPY PT5555,Y OR X,Y COPY Y,A CSK A,=:7777 NOP ERROR: OR,FAILED,--,Y,SHOULD,=,:7777 PATCHX C13000 JMP C21000 LPOOL  TITL INSTRUCTION DIAGNOSTIC -- SEC. C2-1 ***** * * ---- C21000 ---- * * CSM Y,L * ***** C21000 EQU $ COPY PTFFFF,Y COPY =0,A COPY A,L CSM Y,L GREATER ERROR: CSM,FAILED,--,Y>L JMP $+2 ERROR: CSM,FAILED,--,Y>L *** * CSM L,K *** COPY PT6666,A COPY A,K CSM L,K LESS JMP $+3 NOP ERROR: CSM,FAILED,--,LY  JMP $+2 ERROR: CSK,FAILED,--,X>Y *** * CSK X,K *** COPY PT6666,A COPY A,K CSK  X,K LESS JMP $+3 NOP ERROR: CSK,FAILED,--,X :3FEF COPY =:3FE0,A COPY A,L COPY X,K SET STACK POINTER COPY STATSV,A COPY A,S COPY =0,A COPY PT5555,Y * COPY Y,*1(K) DO IT *  COPY 0(X),A CHECK CONTENTS OF :3FEE CSK Y,A NOP ERROR: DID,NOT,STORE,CORRECTLY COPY =:3FEE,A CSK K,A NOP ERROR: INSTRUCTION,CHANGED,K,REGISTER COPY =:3FE0,A CSK A,L NOP ERROR: INSTRUCTION,CHANGED,L,REGISTER * * DIRECT ADDRESSING - LOAD * COPY =:3FE0,A COPY A,L  COPY =:3FEF,Q COPY Q,K COPY Q,X COPY STATSV,A COPY A,S COPY PTAAAA,Q COPY Q,0(X) * COPY 0(K),A * CSK A,Q NOP ERROR: DID,NOT,LOAD,PROPERLY COPY K,Q CSK Q,=:3FEF NOP ERROR: INSTRUCTION,CHANGED,K,REGISTER COPY L,A CSK A,=:3FE0 NOP  ERROR: INSTRUCTION,CHANGED,L,REGISTER * * INDIRECT ADDRESSING - LOAD * COPY =:3FE0,X POINTER VALUE COPY  X,:1F(X) =:3FE0 --> :3FFF COPY X,L INITIALIZE STACK LIMIT COPY X,K INITIALIZE STACK POINTER  COPY STATSV,A COPY A,S COPY PTAAAA,Q COPY Q,0(X) DATA TO :3FE0 * COPY *:1F(K),A DO IT * CSK A,Q NOP ERROR: DID,NOT,LOAD,CORRECTLY COPY =:3FE0,A CSK A,L NOP  ERROR: INSTRUCTION,CHANGED,L,REGISTER COPY =:3FE0,Q CSK Q,K NOP ERROR: INSTRUCTION,CHANGED,K,REGISTER IMS PCOUNT * JMP PSHPOP LPOOL * * SINGLE REGISTER PUSH INSTRUCTION * PSHPOP EQU $  COPY =:3FE0,Q COPY Q,L COPY DV3FF2,A COPY A,K COPY =0,A COPY A,SEFLG1  COPY A,SEFLG2 COPY PTFFFF,Q COPY STATSV,A COPY A,S * PUSH Q * COPY DV3FF1,A  CSK A,K NOP ERROR: K,REGISTER,NOT,CORRECT COPY 0(K),A CSK A,Q NOP ERROR: DID,NOT,PUSH,PROPERLY COPY SEFLG2,Q JEQ Q,$+2 ERROR: INSTRUCTION,TRAPPED COPY =:3FE0,Q  CSK L,Q NOP ERROR: INSTRUCTION,MODIFIED,L,REGISTER COPY DV3FF0,Q COPY Q,L COPY DV3FF2,A COPY A,K COPY =0,A COPY A,SEFLG2 COPY Q,SEFLG1 COPY PT6666,X COPY STATSV,A COPY A,S * PUSH X * COPY SEFLG2,Q JNE Q,$+2 ERROR: DID,NOT,TRAP COPY *DV3FF1,A CSK A,X NOP ERROR: DID,NOT,PUSH,X,REGISTER COPY DV3FF0,A CSK A,L NOP ERROR: L,REGISTER,MODIFIED COPY DV3FF1,Q CSK Q,K NOP ERROR: K,REGISTER,NOT,CORRECT * * 8  SINGLE REGISTER POP INSTRUCTION * COPY =:3FE0,Q COPY Q,L COPY DV3FF1,A COPY A,K COPY =0,A COPY PT5555,Q COPY STATSV,A COPY A,S COPY Q,*DV3FF1 * POP Y *  CSK Q,Y NOP ERROR: POP,DID,NOT,WORK COPY DV3FF2,Q CSK K,Q NOP ERROR: K,REGISTER,INCORRECT COPY =:3FE0,A CSK A,L NOP ERROR: L,REGISTER,CHANGED IMS PCOUNT JMP MSBTST LPOOL TITL INSTRUCTION DIAGNOSTIC -- MEMORY BIT MANIPULATION * * MEMORY BIT MANIPULATION * MSBTST EQU $ COPY =0,A CLEAR AREG COPY A,Q CLEAR QREG COPY A,TSTWRD CLEAR TESTED MEMORY WORD RETEST XNX A MSB 0,TSTWRD DO IT XNX A SBIT 0,Q CHECKING VALUE CSK Q,TSTWRD  NOP ERROR: DID,NOT,SET,BIT ADD =:10,A CSK A,=:100 JMP RETEST NOP JMP  MS2TST *NOP ME FOR LOOP* JMP MSBTST DIAGNOSTIC LOOP MS2TST EQU $ COPY =0,A COPY =-1,Q  SET QREG TO ALL F'S COPY Q,TSTWRD AND THE TESTED MEMORY LOCATION RETST2 XNX A MSB 0,TSTWRD DO IT  CSK Q,TSTWRD NOP ERROR: MSB,RESET,BIT ADD =:10,A CSK A,=:100 JMP RETST2  NOP IMS PCOUNT * * MRBTST EQU $ COPY =:3,A COPY A,TSTWRD MRB 1,TSTWRD COPY =1,Q CSK Q,TSTWRD NOP ERROR: DID,NOT,RESET,BIT MRB 2,TSTWRD CSK Q,TSTWRD NOP ERROR: SHOULD,NOT,HAVE,ALTERED,WORD IMS PCOUNT JMP MCBTST *NOP ME FOR LOOP* JMP MRBTST DIAGNOSTIC LOOP JMP MRBTST * MCBTST EQU $ COPY =3,A COPY A,TSTWRD MCB 1,TSTWRD COPY =1,Q CSK Q,TSTWRD NOP ERROR: DID,NOT,COMPLIMENT,CORRECTLY COPY =1,A  COPY A,TSTWRD MCB 2,TSTWRD COPY =5,Q CSK Q,TSTWRD NOP ERROR: DID,NOT,COMPLIMENT,CORRECTLY IMS PCOUNT JMP SKPTST *NOP ME FOR LOOP* JMP MCBTST DIAGNOSTIC LOOP TSTWRD WORD :0 LPOOL * * FIRST, TEST THE MSKS INSTRUCTION * SKPTST EQU $ COPY =1,X SET TEST PATTERN COPY X,STWORD SET TEST WORD * MSKS 0,STWORD * JMP $+2 ERROR: SHOULD,NOT,SKIP COPY X,Q  READY FOR COMPARE CSK Q,STWORD NOP ERROR: SHOULD,NOT,ALTER,TEST,WORD COPY X,STWORD REINITIALIZE TEST WORD * MSKS 1,STWORD DO IT AGAIN * ERROR: SHOULD,HAVE,SKIPPED COPY =3,Q CSK Q,STWORD NOP ERROR: DID,NOT,COMPARE IMS PCOUNT * * MSKR INSTRUCTION * COPY X,STWORD *  MSKR 1,STWORD * JMP $+2 ERROR: SHOULD,NOT,SKIP COPY X,Q CSK Q,STWORD NOP  ERROR: DOES,NOT,COMPARE COPY X,STWORD * MSKR 0,STWORD * ERROR: DID,NOT,SKIP COPY =0,Q CSK Q,STWORD NOP ERROR: DID,NOT,COMPARE IMS PCOUNT * * MSKC INSTRUCTION * COPY X,STWORD 9 * MSKC 0,STWORD * JMP $+2 ERROR: SHOULD,NOT,SKIP COPY =0,Q CSK Q,STWORD NOP ERROR: DOES,NOT,COMPARE COPY Q,STWORD * MSKC 0,STWORD * ERROR: SHOULD,HAVE,SKIPPED COPY X,Q CSK Q,STWORD NOP ERROR: DOES,NOT,COMPARE IMS PCOUNT * * MSKO INSTRUCTION * COPY X,STWORD * MSKO 0,STWORD * ERROR: DID,NOT,SKIP COPY X,Q CSK Q,STWORD NOP  ERROR: DOES,NOT,COMPARE COPY X,STWORD * MSKO 1,STWORD * JMP $+2 ERROR: SHOULD,NOT,SKIP  CSK Q,STWORD NOP ERROR: DID,NOT,COMPARE IMS PCOUNT * * MSKZ INSTRUCTION * COPY X,STWORD * MSKZ 0,STWORD * JMP $+2 ERROR: SHOULD,NOT,SKIP COPY X,Q CSK Q,STWORD NOP ERROR: DOES,NO,COMPARE COPY X,STWORD * MSKZ 1,STWORD * ERROR: SHOULD,SKIP,THIS CSK Q,STWORD NOP ERROR: DOES,NOT,COMPARE IMS PCOUNT COPY PCOUNT,A CSK A,=:6C NOP  ERROR: SOME,OF,TESTS,NOT,EXECUTED * JMP DTMOVE * STWORD WORD :0 LPOOL TITL INSTRUCTION DIAGNOSTIC -- BLOCK MOVE ADRBL1 EQU $ ADDRESS BLOCK 1 - MVB TEST 1 WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD 0 SOURCE BYTE OFFSET WORD DSTBUF DESTINATION BUFFER WORD ADDRESS WORD 0 DESTINATION BYTE OFFSET ADRBL2 EQU $ ADDRESS BLOCK 2 - MVB TEST 2 WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD  1 SOURCE BYTE OFFSET WORD DSTBUF DESTINATION BUFFER WORD ADDRESS WORD 1 DESTINATION BYTE OFFSET ADRBL3 EQU $ ADDRESS BLOCK 3 - XLB TEST 1 WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD 0  SOURCE BYTE OFFSET WORD DSTBUF DESTINATION BUFFER WORD ADDRESS WORD 1 DESTINATION BYTE OFFSET WORD TRNTB1 TRANSLATION TABLE WORD ADDRESS CSKBF1 EQU $ MVB TEST 1 WORD :0000 WORD :0102 WORD :0304 WORD :0500 CSKBF2 EQU $ MVB TEST2 WORD :0002 WORD :0304 WORD :0506 WORD :0708 WORD :090A WORD :0B0C WORD :0D0E WORD :0000 CSKBF3 EQU $  XLB TEST 1 WORD :00B1 WORD :B2B3 WORD :B4B5 WORD :0000 DTMOVE EQU $ TITL * *  BLOCK MOVE - TEST 1 * MVB00 EQU $ JST CLRBUF CLEAR DESTINATION BUFFER COPY =ADRBL1,Q ADDRESS OF ADDRESS BLOCK 1 COPY =5,A BUFFER LENGTH * MVB . TEST INSTRUCTION * CSK Q,=ADRBL1  NOP ERROR: MVB,FAILED,--,Q,WAS,CHANGED COPY =0,X INITIALIZE INDEX MVB02 XNX X COPY CSKBF1,A GET DATA FROM COMPARISON BUFFER XNX X CSK A,DSTBUF-1 COMPARE TO DATA IN DESTINATION BUFFER NOP  ERROR: MVB,FAILED,--,WRONG,DATA,TRANSFERED;,INDEX IN X ADD =1,X INCREMENT BUFFER INDEX CSK X,=4 END OF BUFFER ? NOP NO JMP MVB02 NO, CONTINUE JMP MVB00 PATCH FOR LOOPING : ORG $-1 NOP OVERLAY WITH NOP TITL * * BLOCK MOVE WITH SLAVE INTERRUPT - TEST2 * MVB04 EQU  $ JST CLRBUF CLEAR DESTINATION BUFFER COPY =:50,A COPY A,S INITIALIZE STATUS -- SI SET  COPY =:94,X SLAVE INTERRUPT VECTOR COPY JST1,A JST *$+1 INSTRUCTION COPY A,0(X) STORE AT :94 (SLAVE INTERRUPT) COPY =MVB06,A INTERRUPT SERVICE ROUTINE ADDRESS COPY A,1(X) STORE AT :95 COPY =1,A SELP A,:F9 SET SLAVE INTERRUPT COPY =ADRBL2,Q ADDRESS OF ADDRESS BLOCK 2 COPY =:D,A BUFFER LENGTH SBIT 8,S ENABLE INTERRUPTS * MVB . TEST INSTRUCTION * RBIT 8,S DISABLE INTERRUPTS COPY =0,Y SELP Y,:F9 RESET SLAVE INTERRUPT ERROR: NO,INTERRUPT OCCURED JMP MVB07 GO CHECK DATA * MVB06 ENT INTERRUPT SERVICE ROUTINE COPY =0,Y SELP Y,:F9 RESET SLAVE INTERRUPT COPY DSTBUF+2,Y GET BYTE 8 FROM END OF DEST. BUFFER JEQ Y,$+3 SHOULD BE 0 ERROR: MVB,FAILED,--,INTERRUPT,NOT,HONORED,SOON,ENOUGH JMP MVB09 ERROR EXIT * MVB . RESUME AFTER INTERRUPT *  COPY =0,X INITIALIZE BUFFER INDEX MVB07 XNX X COPY CSKBF2,A GET DATA FROM COMPARISON BUFFER XNX  X CSK A,DSTBUF COMPARE TO DATA IN DESTINATION BUFFER NOP ERROR: MVB,FAILED,--,WRONG,DATA,TRANSFERED;,INDEX IN X ADD =1,X INCREMENT BUFFER INDEX CSK X,=8 END OF BUFFER ? NOP JMP MVB07 NO, CONTINUE * MVB09 JMP MVB04 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP  TITL INSTRUCTION DIAGNOSTIC -- TRANSLATE BLOCK * * TRANSLATE BLOCK - TEST 1 * XLB00 EQU $ JST CLRBUF CLEAR DESTINATION BUFFER COPY =ADRBL3,Q ADDRESS OF ADDRESS BLOCK 3 COPY =5,A BUFFER LENGTH COPY =0,X INITIALIZE X * XLB . TEST INSTRUCTION * CSK Q,=ADRBL3 NOP ERROR: XLB,FAILED,--,Q,WAS,CHANGED COPY =0,X INITIALIZE BUFFER INDEX XLB02 XNX X COPY CSKBF3,A GET DATA FROM COMPARISON BUFFER XNX X CSK A,DSTBUF COMPARE TO DATA IN DESTINATION BUFFER NOP ERROR: XLB,FAILED,--,WRONG,DATA,TRANSFERED;,INDEX,IN,X ADD =1,X INCREMENT BUFFER INDEX CSK X,=4 END OF BUFFER ? NOP  JMP XLB02 NO, CONTINUE * JMP XLB00 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP JMP XLB04 * * * CLRBUF ENT ROUTINE TO CLEAR DESINTATION BUFFER COPY =DSTBUF,X  COPY =7,Y COPY =0,A COPY A,0(X,Y) JNED Y,$-1 JMP *CLRBUF * LPOOL RES $;:F-$&:F+1,0 TITL * * BUFFERS * SRCBUF EQU $ SOURCE BUFFER WORD :0102 WORD :0304 WORD :0506 WORD :0708 WORD :090A WORD :0B0C WORD :0D0E RES 1,0 DSTBUF EQU $  DESTINATION BUFFER RES 1,0 RES 1,0 RES 1,0 RES 1,0 RES 1,0 RES ;  1,0 RES 1,0 RES 1,0 TRNTB1 EQU $ TRANSLATE TABLE 1 WORD :B0B1 WORD :B2B3  WORD :B4B5 WORD :B6B7 WORD :B8B9 WORD :BABB WORD :BCBD WORD :BEBF TRNTB2 EQU  $ TRANSLATE TABLE 2 WORD :B0B1 WORD :B2B3 WORD :00B5 TITL * * TRANSLATE BLOCK WITH SLAVE INTERRUPT - TEST 2 * XLB04 EQU $ JST CLRBUF CLEAR DESTINATION BUFFER COPY =:50,A COPY A,S INITIALIZE STATUS -- SI SET COPY =:94,X SLAVE INTERRUPT VECTOR COPY JST1,A JST *$+1 INSTRUCTION COPY A,0(X) STORE AT :94 COPY =XLB06,A INTERRUPT SERVICE ROUTINE ADDRESS COPY A,1(X) STORE AT :95 COPY =1,A SELP A,:F9 SET SLAVE INTERRUPT COPY =ADRBL4,Q ADDRESS OF ADDRESS BLOCK 4  COPY =:D,A BUFFER LENGTH COPY =0,X INITIALIZE X SBIT 8,S ENABLE INTERRUPTS * XLB . TEST INSTRUCTION * RBIT 8,S DISABLE INTERRUPTS COPY =0,Y SELP Y,:F9 RESET SLAVE INTERRUPT ERROR: INTERRUPT,DID,NOT,OCCUR JMP XLB07 GO CHECK DATA * XLB06 ENT INTERRUPT SERVICE ROUTINE COPY =0,Y SELP Y,:F9 RESET SLAVE INTERRUPT EXCH A,Y SAVE A COPY DSTBUF+4,A GET BYTE 8 FROM BEGINNING OF DEST. BUFFER AND =:FF00,A MASK OFF LOWER BYTE JEQ A,$+3 SHOULD BE 0  ERROR: XLB,FAILED,--,INTERRUPT,NOT,HONORED,SOON,ENOUGH JMP XLB09 ERROR EXIT EXCH A,Y RESTORE A * XLB . RESUME AFTER INTERRUPT * XLB07 COPY =0,X INITIALIZE BUFFER INDEX XLB08 XNX X COPY CSKBF4,A GET DATA FROM COMPARISON BUFFER XNX X CSK A,DSTBUF-1 COMPARE TO DATA IN DESTINATION BUFFER NOP ERROR: XLB,FAILED,--,WRONG,DATA,TRANSFERED;,INDEX,IN,X ADD =1,X INCREMENT BUFFER INDEX CSK X,=8 END OF BUFFER ? NOP JMP XLB08 NO, CONTINUE * XLB09 JMP XLB04 PATCH FOR LOOPING ORG  $-1 NOP OVERLAY WITH NOP JMP XLBS00 * LPOOL TITL INSTRUCTION DIAGNOSTIC -- TRANSLATE BLOCK AND SKIP * * TRANSLATE BLOCK AND SKIP - TEST 1 * XLBS00 EQU $ JST CLRBUF CLEAR DESTINATION BUFFER  COPY =ADRBL5,Q ADDRESS OF ADDRESS BLOCK 5 COPY =4,A BUFFER LENGTH COPY =0,X INITIALIZE X *  XLBS . TEST INSTRUCTION * ERROR: XLBS,FAILED,--,SHOULD,SKIP CSK X,=3 CHECK POST TRAP X  NOP ERROR: XLBS,FAILED,--,X,SHOULD,=,3 CSK A,=4 CHECK POST TRAP A NOP ERROR: XLBS,FAILED,--,A,SHOULD,=,5 CSK Q,=ADRBL5 CHECK POST TRAP Q NOP ERROR: XLBS,FAILED,--,Q,SHOULD,=,ADRBL5,ADDRESS  COPY =0,X INITIALIZE BUFFER INDEX XLBS06 XNX X COPY CSKBF5,A GET DATA FROM COMPARISON BUFFER XNX X CSK A,DSTBUF COMPARE TO DATA IN DESTINATION BUFFER NOP ERROR: XLBS,FAILED;,WRONG,DATA,TRANSFERED;,INDEX,IN,X ADD =1,X INCREMENT BUFFER INDEX CSK X,=3 END OF BUFFER ? NOP JMP XLBS< 06 NO, CONTINUE * COPY =3,X INITIALIZE X COPY =4,A INITIALIZE A * XLBS . RESUME AFTER INTERRUPT * JMP $+2 OK ERROR: XLBS,FAILED,--,SHOULD,NOT,SKIP COPY =0,X INITIALIZE BUFFER INDEX XLBS08 XNX X COPY CSKBF6,A GET DATA FROM COMPARISON BUFFER XNX X CSK A,DSTBUF COMPARE TO DATA IN DESTINATION BUFFER NOP ERROR: XLBS,FAILED;,WRONG,DATA,TRANSFERED;,INDEX,IN,X ADD =1,X INCREMENT BUFFER INDEX CSK X,=4 END OF BUFFER ? NOP JMP XLBS08 NO, CONTINUE JMP XLBS00 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP * JMP SCM00 LPOOL TITL ADRBL4 EQU $ ADDRESS BLOCK 4 - XLB TEST 2 WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD 1  SOURCE BYTE OFFSET WORD DSTBUF DESTINATION BUFFER WORD ADDRESS WORD 0 DESTINATION BYTE OFFSET  WORD TRNTB1 TRANSLATION TABLE WORD ADDRESS ADRBL5 EQU $ ADDRESS BLOCK 5 - XLBS WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD 1 SOURCE BUFFER BYTE OFFSET WORD DSTBUF DESTINATION BUFFER WORD ADDRESS WORD 1 DESTINATION BUFFER BYTE OFFSET WORD TRNTB2 TRANSLATION TABLE WORD ADDRESS CSKBF4 EQU $  XLB TEST 2 WORD :0000 WORD :B2B3 WORD :B4B5 WORD :B6B7 WORD :B8B9 WORD :BABB WORD :BCBD WORD :BE00 CSKBF5 EQU $ XLBS TEST 1 WORD :00B2 WORD :B300  WORD :0000 * CSKBF6 EQU $ XLBS TEST 2 WORD :00B2 WORD :B300 WORD :B500 WORD  :0000 TITL INSTRUCTION DIAGNOSTIC -- SCAN MEMORY * * SCAN MEMORY - TEST 1 * SCM00 EQU $ COPY =ADRBL6,Q ADDRESS BLOCK 6 ADDRESS COPY =0,X INITIALIZE X COPY =5,A BUFFER LENGTH * SCM .  TEST INSTRUCTION * JMP $+3 ERROR: SCM,FAILED,--,DID,NOT,FIND,MATCH JMP SCM02 ERROR EXIT *  CSK X,=3 CHECK POST MATCH X NOP ERROR: SCM,FAILED,--,X,SHOULD,=,3 CSK A,=5 CHECK POST MATCH A NOP ERROR: SCM,FAILED,--,A,SHOULD,=,5 CSK Q,=ADRBL6 CHECK POST MATCH Q NOP ERROR: SCM,FAILED,--,Q,SHOULD,=,ADRBL6,ADDR. * JMP SCM00 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP TITL SCM02 EQU $ COPY =ADRBL6,Q ADDRESS BLOCK 6 ADDRESS COPY =5,A BUFFER LENGTH  COPY =3,X INITIALIZE X * SCM . RESUME AFTER INTERRUPT * ERROR: SCM,FAILED,--,SHOULD,NOT,FIND,MATCH CSK Q,=ADRBL6 NOP ERROR: SCM,FAILED,--,Q,SHOULD,=,ADRBL6,ADDR. * JMP SCM02 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP TITL * * SCAN MEMORY WITH SLAVE INTERRUPT - TEST 2 * SCM04 COPY =:50,A COPY A,S INITIALIZE S -- SI SET COPY =:94,X SLAVE INTERRUPT VECTOR COPY JST1,A JST *$+1 INSTRUCTION COPY A,0(X) STORE AT :94 COPY =SCM06,A INTERRUPT SERVICE ROUTINE ADDRE= SS COPY A,1(X) STORE AT :95 COPY =1,A SELP A,:F9 SET SLAVE INTERRUPT COPY =ADRBL7,Q ADDRESS BLOCK 7 ADDRESS COPY =:D,A BUFFER LENGTH COPY =0,X INITIALIZE X SBIT 8,S ENABLE INTERRUPTS * SCM05A EQU $ SCM . TEST INSTRUCTION * NOP SCM05B EQU $ RBIT 8,S DISABLE INTERRUPTS COPY =0,A SELP A,:F9 RESET SLAVE INTERRUPT ERROR: NO,INTERRUPT,OCCURED JMP  SCM08 ERROR EXIT TITL SCM06 ENT INTERRUPT SERVICE ROUTINE COPY =0,Y SELP Y,:F9 RESET SLAVE INTERRUPT CSK X,=9 CHECK POST INTERRUPT X JMP $+3 NOP ERROR: SCM,FAILED,--,X,SHOULD,BE,<,9 CSK A,=:D CHECK POST INTERRUPT A NOP ERROR: SCM,FAILED,--,A,SHOULD,=,:D CSK Q,=ADRBL7 CHECK POST INTERRUPT Q NOP ERROR: SCM,FAILED,--,Q,SHOULD,=,ADRBL7,ADDR. COPY SCM06,A GET POST INTERRUPT RETURN POINTER CSK A,=SCM05A SHOULD BE SCM05A ADDR. JMP SCM07 UNDEFINED JMP $+2  CHECK JMP SCM08 OK CSK A,SCM05B JMP $+2 JMP SCM07 ERROR: SCM,FAILED,--,DID,NOT,HONOR,INTERRUPT JMP SCM08 ERROR EXIT SCM07 EQU $ ERROR: SCM,FAILED,--,UNDEFINED,EFFECT,ON,P * SCM08 JMP SCM04 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP JMP SAVS00 * ADRBL6 EQU $ ADDRESS BLOCK 6 - SCM TEST 1 WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD 0 SOURCE BUFFER BYTE OFFSET WORD :0003 SEARCH BYTE VALUE ADRBL7 EQU $ ADDRESS BLOCK 7 - SCM TEST 2 WORD SRCBUF SOURCE BUFFER WORD ADDRESS WORD 1 SOURCE BUFFER BYTE OFFSET WORD :0010 SEARCE BYTE VALUE * LPOOL TITL INSTRUCTION DIAGNOSTIC -- SAVE CONTEXT ON STACK * * SAVE CONTEXT ON STACK * * TESTED AS INLINE INSTRUCTION * TESTED IN SYSTEM MODE * SAVS00 EQU $ COPY =0,A COPY =STK1K2,X ----  COPY =6,Y -- CLEAR COPY A,0(X,Y) -- STACK JNED Y,$-1 ---- COPY A,0 CLEAR LOCATION 0 COPY =:B0,X COPY A,0(X) INITIALIZE LOCATION :B0 FOR USER MODE COPY =STK1K1,A STACK POINTER FOR NO TRAP COPY A,K INITIALIZE K COPY =STK1L,A STACK LIMIT COPY A,L INITIALIZE L COPY =:5F9B,A COPY A,S INITIALIZE S COPY =:9C,X STACK EXCEPTION TRAP COPY JST1,A JST *$+1 INSTRUCTION COPY A,2(X) STORE AT :9E COPY =SAVS08,A TRAP SERVICE ROUTINE ADDRESS COPY A,3(X)  STORE AT :9F COPY PT5555,X ---- COPY PTAAAA,Y -- INITIALIZE COPY =:3333,Q -- REGISTERS COPY =:CCCC,A ---- * SAVS01 EQU $ SAVES 3,SAVS03 TEST INSTRUCTION * ERROR: SAVES,FAILED,--,DID,NOT,GO,TO,NEXT,ADDR. SAVS03 EQU $ SIN 2 COPY STATSV,A EXCH A,S RESTORE S CSK A,=:7F50 TEST S  NOP ERROR: SAVES,FAILED,--,S,SHOULD,=,:7F50 COPY K,A GET STACK POINTER CSK A,=STK1K2 CHECK>  STACK POINTER NOP ERROR: SAVES,FAILED,--,K,SHOULD,=,STK1K2,ADDR. * COPY STK1K2,A GET 'P' FROM STACK  CSK A,=SAVS01+1 NOP ERROR: SAVES,FAILED,--,P,FROM,STACK,S/B,SAVS01+1,ADD COPY STK1K2+1,A GET 'L' FROM STACK CSK A,=STK1L NOP ERROR: SAVES,FAILED,--,L,FROM,STACK,SHOULD,=,STK1L,ADDR COPY STK1K2+2,A GET 'S' FROM STACK CSK A,=:5F9B NOP ERROR: SAVES,FAILED,--,S,FROM,STACK,SHOULD,=,:5F9B COPY  STK1K2+3,A GET 'A' FROM STACK CSK A,=:CCCC NOP ERROR: SAVES,FAILED,--,A,FROM,STACK,SHOULD,=,:CCCC  COPY STK1K2+4,A GET 'Q' FROM STACK CSK A,=:3333 NOP ERROR: SAVES,FAILED,--,Q,FROM,STACK,SHOULD,=,:3333 COPY STK1K2+5,A GET 'X' FROM STACK CSK A,PT5555 NOP ERROR: SAVES,FAILED,--,X,FROM,STACK,SHOULD,=,:5555 COPY STK1K2+6,A GET 'Y' FROM STACK CSK A,PTAAAA NOP ERROR: SAVES,FAILED,--,Y,STACK,SHOULD,=,:AAAA COPY 0,A GET CONTENTS OF LOCATION 0 CSK A,=0 NOP ERROR: LOCATION,0,ALTERED,--,SAVES,OPERATED,IN,USER,MODE JMP $+3 * SAVS08 ENT ERROR: SAVES,FAILED,--,SHOULD,NOT,TAKE,TRAP * JMP  SAVS00 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP JMP SAVS10 TITL * *  STACK (STK1) * STK1Z RES 14,0 STK1L EQU STK1Z STACK LIMIT 1 STK1K3 EQU STK1Z+6 STACK POINTER 3 STK1K2 EQU STK1Z+7 STACK POINTER 2 STK1L2 EQU STK1Z+8 STACK LIMIT 2 STK1K1 EQU STK1Z+14 STACK POINTER 1 * SAVES1 EQU $  SAVES 0,SAVS33 TEST INSTRUCTION SAVTMP RES 1,0 TEMP STORAGE * LPOOL TITL * * SAVE CONTEXT ON STACK * * TESTED AS INLINE INSTRUCTON * TESTED IN SYSTEM MODE * TESTED WITH STACK EXCEPTION TRAP * SAVS10 EQU $ COPY =0,A COPY =:B0,X COPY A,0(X) INITIALIZE LOCATION :B0 FOR SYSTEM MODE  COPY =STK1K2,A STACK POINTER FOR TRAP COPY A,K INITIALIZE K COPY =STK1L,A STACK LIMIT COPY  A,L INITIALIZE L COPY =:40,A COPY A,S INITIALIZE S COPY =:9C,X STACK EXCEPTION TRAP  COPY =SAVS14,A TRAP SERVICE ROUTINE ADDR. COPY A,3(X) STORE IN :9F COPY =0,A COPY A,0(X)  CLEAR :9C COPY A,1(X) CLEAR :9D * SAVS11 EQU $ SAVES 0,SAVS13 TEST INSTRUCTION * ERROR: SAVES,FAILED,--,DID,NOT,TAKE,TRAP JMP $+2 SAVS13 EQU $ ERROR: SAVES,FAILED,--,DID,NOT,TAKE,TRAP SAVS14 ENT  TRAP SERVICE ROUTINE SIN 2 COPY STATSV,A EXCH A,S RESTORE S CSK A,=:40 NOP ERROR: SAVES,FAILED,--,S,SHOULD,=,:0040 COPY K,A GET STACK POINTER CSK A,=STK1L NOP  ERROR: SAVES,FAILED,--,K,SHOULD,=,STACK,ADDR COPY =:9C,X STACK EXCEPTION TRAP LOCATION COPY 0(X),A GET 'P' FROM TRAP LOCATION CSK A,=SAVS13 NOP ERROR: SAVES,FAILED,--,:9C,SHOULD,BE,SAVS13,ADDR. COPY 1(X),A GET 'I' FROM TRAP LOCATION CSK A,SAVS11 NOP ERROR: SAVES,FAILED,--,:9D,SHOULD,BE,INSTR.,A? T,SAVS11 * JMP SAVS10 PATCH FOR LOOPING ORG $-1 NOP TITL * * SAVE CONTEXT ON STACK * * TESTED AS INLINE INSTRUCTION * TESTED IN USER MODE * TESTED AS NON-INTERRUPTABLE INSTRUCTION * SAVS20 EQU $ COPY =:B0,X COPY =SAVTMP,A ADDRESS OF STORAGE LOCATION USED BY SAVES COPY A,0(X)  INITIALIZE LOCATION :B0 FOR USER MODE COPY =STK1K3,A NEW VALUE FOR K COPY A,1(X) STORE IN :B1 COPY =STK1L,A NEW VALUE FOR L COPY A,2(X) STORE IN :B2 COPY =STK1K1,A STACK POINTER COPY A,K  INITIALIZE K COPY =STK1L2,A STACK LIMIT COPY A,L INITIALIZE L COPY =:50,A COPY A,S  INITIALIZE STATUS -- SI SET COPY =:9C,X STACK EXCEPTION TRAP COPY =SAVS28,A TRAP SERVICE ROUTINE ADDRESS COPY A,3(X) STORE IN :9F COPY =:94,X SLAVE INTERRUPT VECTOR COPY JST1,A JST *$+1 INSTRUCTION COPY A,0(X) STORE AT :94 COPY =SAVS27,A INTERRUPT SERVICE ROUTINE ADDRESS COPY A,1(X) STORE AT :95 COPY =1,A SELP A,:F9 SET SLAVE INTERRUPT SBIT 8,S ENABLE INTERRUPTS * SAVES 0,SAVS25 TEST INSTRUCTION * RBIT 8,S DISABLE INTERRUPTS COPY =0,A SELP A,:F9 RESET RESET SLAVE INTERRUPT ERROR: SAVES,FAILED,--,DID,NOT,GO,TO,NEXT,ADDR. JMP SAVS29 ERROR EXIT * SAVS25 EQU $  SAVES JUMP ADDRESS COPY =0,A SHOULD EXECUTE BEFORE INTERRUPT RBIT 8,S DISABLE INTERRUPTS SELP A,:F9 RESET SLAVE INTERRUPT ERROR: INTERRUPT,DID,NOT,OCCUR JMP SAVS29 ERROR EXIT * SAVS27 ENT  INTERRUPT SERVICE ROUTINE COPY =0,Q SELP Q,:F9 RESET SLAVE INTERRUPT CSK A,=0 NOP ERROR: SAVES SHOULD,BE,NON-INTERRUPTABLE COPY SAVTMP,A GET STORED K CSK A,=STK1K2 NOP  ERROR: STORED,INTERMEDIATE,K,SHOULD,BE,STK1K2,ADDR. COPY K,A GET STACK POINTER CSK A,=STK1K3 NOP ERROR: SAVES,FAILED,--,K,SHOULD,=,STK1K3,ADDR. COPY L,A GET STACK LIMIT CSK A,=STK1L NOP ERROR: SAVES,FAILED,--,L,SHOULD,BE,STK1L,ADDR. COPY =:B0,X COPY 0(X),A GET CONTENTS OF :B0  CSK A,=0 NOP ERROR: SAVES,FAILED,--,LOCATION,:B0,SHOULD,=,0 JMP SAVS29 NORMAL EXIT * SAVS28 ENT  TRAP SERVICE ROUTINE COPY =0,A SELP A,:F9 RESET SLAVE INTERRUPT ERROR: SAVES,FAILED,--,SHOULD,NOT,TAKE,TRAP * SAVS29 EQU $ EXIT JMP SAVS20 PATCH FOR LOOPING ORG $-1 NOP  OVERLAY WITH NOP JMP SAVS30 * LPOOL TITL * * SAVE CONTEXT ON STACK * * TESTED AS INTERRUPT INSTRUCTION * TESTED IN SYSTEM MODE * TESTED WITH STACK EXCEPTION TRAP * SAVS30 EQU $ COPY =:B0,X  COPY =0,A COPY A,0(X) INITIALIZE LOCATION :B0 FOR SYSTEM MODE COPY =STK2K2,A STACK POINTER FOR STACK EXCEPTION TRAP COPY A,K INITIALIZE K COPY =STK2L,A STACK LIMIT COPY A,L INITIALIZE L @  COPY =:50,A COPY A,S INITIALIZE S -- SI SET COPY =:9C,X STACK EXCEPTION TRAP COPY =SAVS34,A TRAP SERVICE ROUTINE ADDR. COPY A,3(X) STORE IN :9F COPY =0,A COPY A,0(X) CLEAR :9C  COPY A,1(X) CLEAR :9D COPY =:94,X SLAVE INTERRUPT VECTOR COPY SAVES1,A SAVE CONTEXT INSTRUCTION  COPY A,0(X) STORE IN :94 COPY SAVES1+1,A SAVE CONTEXT INSTRUCTION COPY A,1(X) STORE IN :95 COPY =1,A SELP A,:F9 SET SLAVE INTERRUPT SBIT 8,S ENABLE INTERRUPTS NOP ALLOW INTERRUPT SAVS31 RBIT 8,S DISABLE INTERRUPTS COPY =0,A SELP A,:F9 RESET SLAVE INTERRUPT ERROR: INTERRUPT,DID,NOT,OCCUR JMP SAVS39 ERROR EXIT * SAVS33 EQU $ SAVES JUMP LOCATION RBIT 8,S  DISABLE INTERRUPTS COPY =0,A SELP A,:F9 RESET SLAVE INTERRUPT ERROR: SAVES,FAILED,--,SHOULD,TAKE,TRAP JMP SAVS39 ERROR EXIT * SAVS34 ENT TRAP SERVICE ROUTINE COPY K,A GET STACK POINTER CSK A,=STK2L NOP ERROR: SAVES,FAILED,--,K,SHOULD,=,STK1L,ADDR. COPY =:9C,X STACK EXCEPTION TRAP LOCATION COPY 0(X),A GET 'P' FROM TRAP LOCATION CSK A,=SAVS33 NOP ERROR: SAVES,FAILED,--,:9C,SHOULD,CONTAIN,SAVS33,ADDR. COPY 1(X),A GET 'I' FROM TRAP LOCATION CSK A,SAVES1 NOP  ERROR: SAVES,FAILED,--,:9D,SHOULD,BE,INSTR.,AT,SAVES1 SAVS39 EQU $ COPY =:94,X SLAVE INTERRUPT VECTOR COPY JST1,A JST *$+1 INSTR. COPY A,0(X) RESTORE LOCATION :94 * JMP SAVS30 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP TITL * * SAVE CONTEXT ON STACK * * TESTED AS INTERRUPT INSTRUCTION * TESTED IN USER MODE * SAVS40 EQU $ COPY =:B0,X COPY =RSTTMP,A ADDRESS OF STORAGE LOCATION USED BY SAVES COPY A,0(X) INITIALIZE LOCATION :B0 FOR USER MODE COPY =STK2K1,A STACK POINTER  COPY A,K INITIALIZE K COPY =STK2L,A STACK LIMIT COPY A,L INITIALIZE L COPY =:50,A  COPY A,S INITIALIZE STATUS -- SI SET COPY =:9C,X STACK EXCEPTION TRAP COPY =SAVS47,A TRAP SERVICE ROUTINE ADDRESS COPY A,3(X) STORE AT :9F COPY =:94,X SLAVE INTERRUPT VECTOR COPY SAVES2,A  SAVE CONTEXT INSTRUCTION COPY A,0(X) STORE AT :94 COPY SAVES2+1,A SAVE CONTEXT INSTRUCTION COPY A,1(X) STORE AT :95 COPY =1,A SELP A,:F9 SET SLAVE INTERRUPT SBIT 8,S ENABLE INTERRUPTS  NOP SAVS42 RBIT 8,S DISABLE INTERRUPTS COPY =0,A SELP A,:F9 RESET SLAVE INTERRUPT ERROR: SAVES,FAILED,--,DID,NOT,GO,TO,NEXT,ADDR. JMP SAVS49 ERROR EXIT * SAVS43 EQU $ SAVES JUMP ADDR  SIN 4 COPY STATSV,A EXCH A,S RESTORE S COPY =0,Q SELP Q,:F9 RESET SLAVE INTERRUPT CSK A,=:0150 TEST S NOP ERROR: SAVES,FAILED,--,S,SHOULD,=,:0150 COPY RSTTMP,A GET STORED A K CSK A,=STK2K2 NOP ERROR: STORED,INTERMEDIATE,K,SHOULD,BE,STK1K2,ADDR. COPY =:B0,X COPY 0(X),A GET CONTENTS OF :B0 CSK A,=0 NOP ERROR: SAVES,FAILED,--,LOCATION,:B0,SHOULD,=,0 COPY STK2K2,A GET 'P' FROM STACK CSK A,=SAVS42 NOP ERROR: SAVES,FAILED,--,P,FROM,STACK,SHOULD,=,SAVS42,ADDR. JMP SAVS49 NORMAL EXIT * SAVS47 ENT TRAP SERVICE ROUTINE ERROR: SAVES,FAILED,--,SHOULD,NOT,TAKE,TRAP SAVS49 COPY =:9C,X STACK EXCEPTION TRAP LOCATION COPY JMP1,A JMP *$+1 INSTR. COPY A,2(X) RESTORE :9E COPY =SET1,A TRAP SERVICE ROUTINE ADDRESS COPY A,3(X) RESTORE :9F * JMP SAVS30 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP JMP RESTS0 * LPOOL TITL * *  STACK (STK2) * STK2Z RES 14,0 STK2L EQU STK2Z STACK LIMIT STK2K2 EQU STK2Z+7 STACK POINTER 2 STK2K1 EQU  STK2Z+14 STACK POINTER 1 * SAVES2 SAVES 0,SAVS43 TEST INSTRUCTION RSTTMP RES 1,0 TEMP STORAGE RSTPNT WORD RESTS4 PT0122 WORD :0122 PT0100 WORD :0100 TITL INSTRUCTION DIAGNOSTIC -- RESTORE CONTEXT FROM STACK * * RESTORE CONTEXT FROM STACK * RESTS0 EQU $ COPY RSTPNT,A JUMP LOCATION COPY A,STK2K2 STORE AS 'P' ON STACK COPY =STK2L,A STACK LIMIT COPY A,STK2K2+1 STORE AS 'L' ON STACK COPY PT0122,A NEW VALUE FOR S COPY A,STK2K2+2 STORE AS 'S' ON STACK COPY PT5555,A COPY A,STK2K2+3 STORE AS 'A' ON STACK COPY PTAAAA,A  COPY A,STK2K2+4 STORE AS 'Q' ON STACK COPY =:33,A COPY A,STK2K2+5 STORE AS 'X' ON STACK COPY =:CC,A COPY A,STK2K2+6 STORE AS 'Y' ON STACK * COPY =:40,A COPY A,S INITIALIZE S COPY =:B0,X COPY =0,A COPY A,0(X) INITIALIZE LOCATION :B0 COPY =RSTTMP,Y ADDRESS OF TEMP. STORAGE LOCATION SUB PT0100,Y INITIALIZE Y COPY =STK2K2,A 1ST WORD OF CURRENT STACK BLOCK COPY A,RSTTMP INITIALIZE TEMP CELL WITH VALUE FOR K COPY =0,A COPY A,L COPY A,K COPY A,Q * RESTS :100 TEST INSTRUCTION * ERROR: RESTS,FAILED,--,DID,NOT,GO,TO,NEXT,ADDR RESTS4 EQU $ RESTS JUMP ADDR SIN 3 COPY A,TEMP SAVE A COPY STATSV,A EXCH A,S RESTORE S CSK A,=:0002 CHECK PREVIOUS STATUS NOP ERROR: RESTS,FAILED,--,DID,NOT,LOAD,CORRECT,S COPY K,A GET STACK POINTER CSK A,=STK2K1 NOP ERROR: RESTS,FAILED,--,K,SHOULD,=,STK1K1,ADDR COPY L,A CSK A,=STK2L CHECK L  NOP ERROR: RESTS,FAILED,--,L,SHOULD,=,STK2L,ADDR. COPY TEMP,A RESTORE A CSK A,PT5555 CHECK A  NOP ERROR: RESTS,FAILED,--,A,SHOULD,=,:5555 CSK Q,PTAAAA CHECK Q NOP ERROR: RESTS,FAILED,--,Q,SHOULD,=,:AAAA CSK X,=:33 CHECK X NOP ERROR: RESTS,FAILED,--,X,SHOULD,=,:0033 CSK Y,=:CC  CHECK Y NOP ERROR: RESTS,FAILED,--,Y,SHOULD,=,:00CC COPY =:B0,X COPY 0(X),A GET CONTENTS OB F :B0 CSK A,=RSTTMP NOP ERROR: SAVES,FAILED,--,LOCATION :B0,SHOULD,=,RSTTMP,ADDR. * JMP RESTS0 PATCH FOR LOOPING ORG $-1 NOP OVERLAY WITH NOP JMP PART1END LPOOL PART1END EQU $  SAVE END CSK X,=:33 CHECK X NOP ERROR: RESTS,FAILED,--,X,SHOULD,=,:0033 CSK Y,=:CC  CHECK Y NOP ERROR: RESTS,FAILED,--,Y,SHOULD,=,:00CC COPY =:B0,X COPY 0(X),A GET CONTENTS O TITL 4/10S QCD, NM4 HOST (93069-10A0) -- NUCLEUS NAM COUNT1 NAM COUNT2 NAM COUNT3  NAM COUNT4 NAM PUPCTH NAM PDNCTH NAM PDNCT1 NAM PDNCT2 NAM PDNCT3  NAM PDNCT4 NAM INIT1 NAM INIT2 NAM SLINSP NAM SLCTRL * * DATA AND TEMP LOCATIONS USED BY DIAGNOSTIC * ABS :00 CDRHLD RES 1,0 HOLDS VALUE TO BE OUTPUT TO CDR BY HOST TEMP01 RES  1,0 TEMP02 RES 1,0 TEMP RES 1,0 ATEMP RES 1,0 XTEMP RES 1,0 QTEMP RES 1,0 YTEMP RES 1,0 KTEMP RES 1,0 LTEMP RES 1,0 PT00FF WORD :00FF DV3FF0 WORD :3FF0 DV3FF1 WORD :3FF1 DV3FF2 WORD :3FF2 PT5555 WORD :5555 DV5555 EQU PT5555 PT55AA WORD :55AA PT6666 WORD :6666 PT7FFF WORD :7FFF PT8000 WORD :8000 PTAA55 WORD :AA55 DVAAAA EQU PTAAAA PTAAAA WORD :AAAA PTF0F0 WORD :F0F0 PTFFFE WORD :FFFE PTFFFF WORD :FFFF DVFFFF EQU PTFFFF STATSV WORD :0150 4/10S STATUS STHOST WORD :1110 HOST STATUS PCOUNT RES 1,0 PART 1 SECTION COUNTER COUNT1 RES  1,0 4/10S #1 PASS COUNTER COUNT2 RES 1,0 4/10S #2 PASS COUNTER COUNT3 RES 1,0 4/10S #3 PASS COUNTER COUNT4 RES 1,0 4/10S #4 PASS COUNTER DEMAND RES 1,0 TEST SELECTIONS JMP1 WORD :9F80 JMP *$+1 RELATIVE JST1 WORD :BF80 JST *$+1 RELATIVE HLT1 HLT HALT SCIR WORD :100 SCDR WORD :101 SCMAR WORD :102 FLAG1 RES 1,0 'PUBLIC MEMORY IN USE' FLAG SLAVES RES 1,0 NUMBER OF 4/10S'S IN SYSTEM MEMSLV RES 1,0 # OF 4/10S CURRENTLY EXECUTING MEMORY TEST SLAVPF RES 1,0 # OF 4/10S EXECUTING MEM TEST DURING POWER-FAIL PUPCTH RES 1,0 HOST POWER-UP COUNT PDNCTH RES 1,0 HOST POWER-DOWN COUNT PDNCT1 RES 1,0 4/10S #1 POWER-DOWN COUNT PDNCT2 RES 1,0 4/10S #2 POWER-DOWN COUNT PDNCT3 RES 1,0 4/10S #3 POWER-DOWN COUNT PDNCT4 RES  1,0 4/10S #4 POWER-DOWN COUNT * ABS :3E SLVNUM RES 1,0 CURRENT 4/10S NUMBER TITL * * SLAVE ROUTINE TO INSERT HEX DIGIT FROM A REG INTO * PROPER DIGIT POSITION OF CONSOLE DISPLAY VALUE * HOLDER (CDRHSL), TO BE OUTPUT TO CDR BY HOST. * * INPUT: HEX DIGIT IN BITS 0-3 OF A REG. * SLAVE NUMBER IN 'SLVNUM'. * * OUTPUT: HEX DIGIT TO ONE POSITION OF 'CDRHLD': * SLAVE 0 BITS 00-03 * SLAVE 1 BITS 04-07 * SLAVE 2 BITS 08-11 * SLAVE 3 BITS 12-15 * ABS :3F SLVDSP ENT  COPY X,XTEMP1 SAVE X COPY Q,QTEMP1 SAVE Q WORD :A27B CURRENT SLAVE NUMBER (SLVNUM -- :3E) --> X C  XNX X INDEX MEMORY LOCATION COPY DSPINS,Q GET INSTRUCTION FOR LOCATING DISPLAY DATA COPY Q,$+1 STORE INSTRUCTION FOR EXECUTION RES 1,0 LOCATE DISPLAY DATA TO PROPER HEX DIGIT LOCATION COPY *CDRPNT,Q LOAD CONSOLE DATA REG VALUE XNX X INDEX MEMORY LOCATION AND DSPMSK,Q MASK OUT CURRENT DISPLAY POSITION OR A,Q OR IN NEW DISPLAY DIGIT COPY Q,*CDRPNT STORE CONSOLE WORD REG VALUE COPY QTEMP1,Q RESTORE Q COPY XTEMP1,X RESTORE X WORD :9F70 RETURN THROUGH SLVDSP (:3F) * QTEMP1 RES 1,0  Q REGISTER TEMP STORAGE XTEMP1 RES 1,0 X REGISTER TEMP STORAGE CDRPNT WORD CDRHLD+:8000 POINTER TO CDR VALUE HOLDER * DSPINS EQU $ TABLE OF DISPLAY LOCATING INSTRUCTIONS NOP SLAVE 0 - SHIFT 0 SHIFT A,LO,4 SLAVE 1 - SHIFT 4 SHIFT A,LO,8 SLAVE 2 - SHIFT 8 SHIFT A,LO,12 SLAVE 3 - SHIFT 12 * DSPMSK EQU $  TABLE OF MASKS FOR CONSOLE DISPLAY DIGITS WORD :FFF0 SLAVE 0 - MASK OUT DIGIT 0 WORD :FF0F SLAVE 1 - MASK OUT DIGIT 1 WORD :F0FF SLAVE 2 - MASK OUT DIGIT 2 WORD :0FFF SLAVE 3 - MASK OUT DIGIT 3  SPACE 4 * * HOST POWER-DOWN ROUTINE * PDNHST ENT HOST POWER-DOWN ROUTINE IMS PDNCTH INCREMENT HOST POWER-DOWN COUNT COPY =11,A DELAY COUNT JNED A,$ EXECUTE DELAY SIN 15 SIN SHOULD EXPIRE AT HLT COPY =13,A DELAY COUNT JNED A,$ EXECUTE DELAY HLT * * SLAVE POWER-DOWN ROUTINE * PDNSLV ENT SIN 3 COPY PDNPNT,X POINTER TO SLAVE 0 POWER-DOWN COUNT IN PUB. MEM. ADD SLVNUM,X ADD OFFSET FOR SLAVE NUMBER IMS 0(X) INCREMENT CURRENT SLAVE POWER-DOWN COUNT HLT PDNPNT WORD PDNCT1+:8000 POINTER TO SLAVE 1 POWER-DOWN COUNT IN PUB. MEM. TITL * * UNEXPECTED TRAP SERVICE ROUTINES * UMT1 ENT  JST LIGHTS HLT UNEXPECTED UNINSTALLED MEMORY TRAP * UIT1 ENT JST LIGHTS HLT  UNEXPECTED UNIMPLEMENTED INSTRUCTION TRAP * AET1 ENT JST LIGHTS HLT UNEXPECTED DIVIDE / FLOATING POINT TRAP * AET2 ENT JST LIGHTS HLT UNEXPECTED CHARACTER / NUMERIC TRAP * SET1 ENT  JST LIGHTS HLT UNEXPECTED STACK EXCEPTION TRAP * * ROUTINE TO DISPLAY UNEXPECTED TRAP CODE * LIGHTS ENT COPY =:A,A DISPLAY CODE FOR UNEXPECTED TRAP JST SLVDSP CALL SLAVE CONSOLE DISPLAY ROUTINE  JMP *LIGHTS RETURN * * LPOOL TITL * * INTERRUPT AND TRAP VECTORS * SPACE 3 * * POWER-UP VECTOR * ABS :80 JST *$+1 WORD POWUP * * UNIMPLEMENTED INSTRUCTION TRAP VECTOR *  ABS :84 UNTNTP RES 2,0 JST *$+1 UNIMPT WORD UIT1 * * UNINSTALLED MEMORY TRAP VECTOR * UNMEMT RES 2,0 JST *$+1 WORD UMT1 * * POWER-DOWN TRAP VECTOR * ABS :8C RES 1,0 RES  1,0 JST *$+1 WORD PDNHST REPLACED BY 'WORD PDNSLV' FOR SLAVE POWER-DOWN TITL * * REAL TIMD E CLOCK INTERRUPT CELLS * NOP RTCTIN RES 1,0 RTC TIMING CELL JST *$+1 RTC TIMING OVERFLOW VECTOR RTCPTR RES 1,0 * * HOST CONSOLE INTERRUPT VECTOR * ABS :94 JST *$+1 WORD SLVHLT RES 1,0 RES 1,0 * * CHARACTER / NUMERIC TRAP VECTOR * RES 2,0 JST *$+1 CNJMP WORD AET2 TITL * * STACK EXCEPTION TRAP VECTOR * RES 2,0 JST *$+1 SEJMP WORD SET1 * * USER TRAP VECTOR * RES 2,0 JMP 0(Y) HLT * * SYSTEM TRAP * RES 2,0 JMP 0(Y) HLT * * ARITHMETIC EXCEPTION TRAP VECTOR * RES 2,0 JST *$+1  WORD AET1 * * HOST INTERRUPT FROM SLAVE * ABS :B4 HSTINT JST *$+1 WORD CONT2 TITL ABS :B8 * * HOST CONSOLE INTERRUPT SERVICE ROUTINE (STOP ALL SLAVES) * SLVHLT ENT SIN 2 DISABLE INTERRUPTS OUT Q,1 RESET CONSOLE INTERRUPT COPY STOPI,Q STOP INSTRUCTION COPY Q,*SCIR STORE IN SLAVE INSTRUCTION REGISTER COPY =1,Q DATA FOR SELP SELP Q,:F2 STOP SLAVE 0 SELP Q,:E2 STOP SLAVE 1 SELP Q,:D2 STOP SLAVE 2 SELP Q,:C2 STOP SLAVE 3 HLT * STOPI STOP . STOP INSTRUCTION SPACE 2 TITL * * HOST POWER-UP ROUTINE * POWUP ENT SIN 15 DISABLE INTERRUPTS, POWER DOWN TRAP COPY PDNCTH,A HOST POWER-DOWN COUNT JNE A,POWUP1 IF NON-ZERO, GO TO POWER-FAIL START-UP  JMP INIT1 GO TO INITIAL START-UP * * HOST POWER-FAIL START-UP * POWUP1 EQU $ COPY STHOST,A COPY A,S INITIALIZE STATUS UIS . DISABLE INTERRUPTS FROM SLAVES COPY MEMSLV,A # OF SLAVE EXECUTING MEM TEST DURING POWER-FAIL COPY A,SLAVPF SAVE IMS PUPCTH INCREMENT HOST POWER-UP COUNT COPY PUPCTH,A LOAD HOST POWER-UP COUNT SUB PDNCTH,A SUBTRACT HOST POWER-DOWN COUNT JEQ A,$+4 JUMP IF HOST POWER UP & DOWN COUNTS EQUAL COPY HLT1,A HALT INSTRUCTION COPY A,:80 STORE AT POWER-UP LOCATION HLT HOST POWER UP & DOWN NOT EQUAL COPY A02PNT,A SLAVE STARTING ADDRESS COPY A,*SCDR STORE IN SLAVE DATA REGISTER COPY SLAVES,Y LOAD # OF SLAVES IN SYSTEM COPY =1,Q JST DATEST TEST UNUSED DEVICE ADDRESSES COPY =0,A COPY A,SLVNUM INITIALIZE CURRENT SLAVE NUMBER COPY A,CDRHLD CLEAR CONSOLE DATA REG OUTPUT VALUE COPY =:30,X INITIALIZE DEVICE ADDRESS INDEX TITL POWUP2 EQU $ COPY SLVNUM,Q  CURRENT SLAVE NUMBER XNX Q INDEX MEMORY LOCATION COPY PDNCT1,A POWER-DOWN COUNT FOR CURRENT SLAVE  SUB PDNCTH,A SUBTRACT HOST POWER-DOWN COUNT JEQ A,POWUP3 POWER-DOWN COUNTS MATCH -- JUMP TO START SLAVE  COPY SLAVPF,A SLAVE EXECUTING MEM. TEST DURING POWER-FAIL SUB SLVNUM,A SUBTRACT CURRENT SLAVE NUMBER JNE A,POWUP4 IF NOT = , POWER-DOWN FAILURE IN CURRENT SLAVE XNX Q INDEX MEMORY LOCATION IMS PDNCT1E  INCREMENT CURRENT SLAVE POWER-DOWN COUNT * POWUP3 COPY =1,Q DATA FOR SELP AND FLAG1 COPY Q,FLAG1 SET PUBLIC MEMORY FLAG COPY ISDRPI,A 'INPUT FROM SLAVE DATA REG. TO P' INST. COPY A,*SCIR STORE IN SLAVE INSTR. REG. XNX X INDEX DEVICE ADDRESS SELP Q,:C2 INITIALIZE P ON SLAVE XNX X INDEX DEVICE ADDRESS SST :C2 SENSE FOR SLAVE OPERATION DONE JMP $+2 DONE JMP $-2 NOT DONE  COPY STARTI,A START INSTRUCTION COPY A,*SCIR STORE IN SLAVE INSTR. REG XNX X INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG SELP A,4 OUTPUT TO CONSOLE DATA REG COPY FLAG1,A LOAD PUBLIC MEMORY FLAG JNE A,$-3 JUMP IF SLAVE IS STILL EXECUTING IN PUBLIC MEM. POWUP4 EQU $ IMS SLVNUM INCREMENT CURRENT SLAVE NUMBER SUB =:10,X MODIFY SLAVE DEVICE ADDRESS INDEX JNED Y,POWUP2 DECREMENT SLAVE COUNTER -- JUMP IF NOT EXP. JMP CONT1 JUMP TO PUBLIC MEMORY LOCK-OUT ROUTINE TITL * * SLAVE CONTROL SERVICE LOCATIONS * ABS :100 START . SLAVE CONTROL INSTRUCTION REGISTER WORD 0 SLAVE CONTROL DATA REGISTER WORD 0 SLAVE CONTROL MEMORY ADDRESS REGISTER JMP *A01PNT INITIAL START LOCATION SPACE 1 * ISDRPI ISCDR P 'INPUT FROM SLAVE DATA REGISTER TO P' INSTR. STARTI START . 'START' INSTR. * * THE FOLLOWING TWO LOCATIONS ARE LOADED IN PART1 * A01PNT RES 1  POINTER TO INITIAL START-UP LOCATION (A01000) A02PNT RES 1 POINTER TO POWER-FAIL START-UP LOCATION (A02000)  SPACE 1 * * THIS SUBROUTINE CHECKS 'FLAG1' AND RETURNS WHEN IT * IS RESET. OUTPUTS 'CDRHLD' TO CONSOLE WHILE WAITING. * TSTFLG ENT COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG. SELP A,4 OUTPUT TO CONSOLE DATA REG.  COPY FLAG1,A CHECK PUBLIC MEMORY FLAG JNE A,$-3 JUMP IF SLAVE STILL EXECUTING IN PUBLIC MEM. JMP *TSTFLG RETURN WHEN 'FLAG1' IS RESET * RES $;:F-$&:F+1,0 TITL * * INITIAL STARTUP ROUTINE * ABS :110 INIT1 EQU $ DEFAULT MODE ENTRY JMP $+3 INIT2 EQU $ DEMAND MODE ENTRY IN 4,A INPUT TEST SELECTIONS FROM CONSOLE DATA REG. JMP $+2 COPY =:F,A DEFAULT TEST SELECTION COPY STHOST,Q COPY Q,S INITIALIZE STATUS COPY A,DEMAND STORE TEST SELECTIONS SHIFT A,RO,8 STRIP TO # OF SLAVES SUB =1,A -- MODIFY # AND =3,A -- OF SLAVES COPY A,SLAVES STORE # OF SLAVES COPY A,Y LOAD # OF SLAVES IN Y COPY JST1,A 'JST *$+1' INSTRUCTION COPY A,:80 STORE AT POWER-UP VECTOR COPY STARTI,A START INSTRUCTION COPY A,*SCIR STORE IN SLAVE INSTRUCTION REGISTER  COPY =1,Q JST DATEST TEST UNUSED DEVICE ADDRESSES COPY =0,A -- COPY A,PUPCTH -- CLEAR  COPY A,PDNCTH -- POWER-UP COPY A,PDNCT1 -- AND COPY A,PDNCT2 -- POWER-DOWN COPY A,PDNCT3 F -- COUNTERS COPY A,PDNCT4 -- COPY A,COUNT1 CLEAR PASS COUNTER COPY A,COUNT2 CLEAR PASS COUNTER  COPY A,COUNT3 CLEAR PASS COUNTER COPY A,COUNT4 CLEAR PASS COUNTER COPY A,SLVNUM INITIALIZE SLAVE NUMBER COPY A,CDRHLD CLEAR CONSOLE DATA REG OUTPUT VALUE COPY =:30,X INITIALIZE DEVICE ADDRESS INDEX SPACE 4 INIT5 EQU $ COPY Q,FLAG1 SET PUBLIC MEMORY FLAG XNX X INDEX DEVICE ADDRESS SELP  Q,:C0 SET PROGRAMMED RESET ON SLAVE XNX X INDEX DEVICE ADDRESS SELP Q,:C3 CLEAR SLAVE CONTROL REGISTER UIS . DISABLE INTERRUPTS FROM SLAVES XNX X INDEX DEVICE ADDRESS SELP  Q,:C2 START SLAVE IJNE A,$ WAIT FOR SLAVE TO WRITE TO 'CDRHLD'. COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG SELP A,4 OUTPUT TO CONSOLE DATA REG HLT ALLOW OPERATOR TO INSPECT CONSOLE DATA *  REGISTER AND RESTART SLAVE XNX X INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE JST TSTFLG WAIT UNTIL 'FLAG1' IS RESET IMS SLVNUM INCREMENT SLAVE NUMBER SUB =:10,X MODIFY SLAVE DEVICE ADDRESS INDEX JNED Y,INIT5 DECREMENT SLAVE COUNTER -- JUMP IF NOT EXP. TITL * *  PUBLIC MEMORY LOCK-OUT ROUTINE * * HOST ROUTINE TO ALLOW ONLY ONE SLAVE * TO EXECUTE IN PUBLIC MEMORY AT A TIME. * * A SLAVE IS ALLOWED TO START EXECUTING IN PUBLIC MEMORY * WHEN THE HOST HONORS THAT SLAVES INTERRUPT REQUEST. * THE HOST THEN DISABLES INTERRUPTS AND WAITS FOR * THE SLAVE EXECUTING IN PUBLIC MEMORY TO RESET * A GLOBAL FLAG (FLAG1), INDICATING THAT THAT SLAVE * IS DONE EXECUTING IN PUBLIC MEMORY. THE HOST THEN * ENABLES INTERRUPTS FROM SLAVES AND WAITS FOR THE * NEXT SLAVE TO INTERRUPT IT. * CONT1 EQU $ RBIT 12,S -- ENABLE INTERRUPTS UIS -  -- FROM SLAVES SBIT 12,S DISABLE INTERRUPTS FROM SLAVES AFTER INTERRUPT COPY CDRHLD,A GET VALUE FOR CONSOLE DATA REG SELP A,4 OUTPUT TO CONSOLE DATA REG JMP $-2 WAIT FOR INTERRUPT * CONT2 ENT  INTERRUPT SERVICE ROUTINE SBIT 8,S ENABLE INTERRUPTS COPY Q,FLAG1 SET PUBLIC MEMORY FLAG (SLAVE USING PUB. MEM.) JST TSTFLG WAIT UNTIL 'FLAG1' IS RESET JMP CONT1 SLAVE DONE EXECUTING IN PUBLIC MEM. TITL * * SUBROUTINE TO TEST UNUSED 4/10S DEVICE ADDRESSES. * * ENTER WITH: * * Q REG =1 * * Y REG NUMBER OF SLAVES * DATEST ENT COPY =:E,A NUMBER OF DEVICE ADDRESSES SUB Y,A  NUMBER OF UNUSED DEVICE ADDRESSES COPY =0,X DATST1 EQU $ CSK X,=:50 CHECK FOR I/O TEST CARD DEVICE ADDRESS NOP JMP $+2 OK JMP DASKIP I/O TEST CARD DEVICE ADDRESS -- SKIP TEST XNX X  INDEX DEVICE ADDRESS SELP Q,:05 TRY TO SET AX1 XNX X INDEX DEVICE ADDRESS SST :05  SENSE AX1 -- SKIP IF SET JMP $+2 AX1 NOT SET -- OK HLT DEVICE ADDRESS IN X WAS RESPONDG ED TO DASKIP ADD =:10,X MODIFY DEVICE ADDRESS INDEX JNED A,DATST1 DECREMENT SLAVE COUNTER -- JUMP IF NOT EXP.  JMP *DATEST RETURN * LPOOL RES $;:F-$&:F+1,0 TITL * * SLAVE MEMORY/REGISTER INSPECT ROUTINE * * INPUT: * * A REG BIT 0 0 = MEMORY INSPECT * 1 = REGISTER INSPECT * * BIT 1 0 = NO AUTO INCREMENT * 1 = AUTO INCREMENT * *  BIT 2 0 = SINGLE ACCESS * 1 = CONTINUOUS ACCESS (NO AUTO INC.) * *  BIT 3 0 = NO READ/WRITE ALTERNATION * 1 = READ/WRITE ALTERNATION *  (FORCED CONTINUOUS ACCESS) * * BIT 4-6 SLAVE # (1-4) * * X REG MEMORY ADDRESS OR REGISTER CODE. * REGISTER CODES AS FOLLOWS: * * A = 0 *  Q = 1 * X = 2 * Y = 3 * P = 4 *  S = 5 * K = 6 * L = 7 * * DATA REG DATA FOR WRITE OPERATION * * SENSE SW 0 = READ * 1 = WRITE * * OUTPUT: * * DATA REG DATA FROM READ OPERATION * * * SLINSP EQU $ COPY =0,Q OUT Q,0 RESET SENSE SWITCH SLINS1 TBIT 0,A MEMORY OR REGISTER OPERATION ? JT OV,SLVREG REGISTER INSPECT * * MEMORY INSPECT * SLVMEM JF SS,SLVMRD CHECK FOR READ OR WRITE. JUMP FOR READ IN 4,Q GET DATA FROM CONSOLE DATA REGISTER COPY Q,*SCDR PUT IN SLAVE DATA REGISTER COPY IMSDRI,Q 'INPUT FROM SLAVE DATA REGISTER' INSTRUCTION JMP $+2 SLVMRD EQU $ READ MEMORY  COPY OMSDRI,Q 'OUTPUT TO SLAVE DATA REGISTER' INSTR. COPY Q,*SCIR STORE IN SLAVE INSTRUCTION REGISTER  COPY X,*SCMAR STORE MEMORY ADDRESS IN SLAVE MEM. ADDR. REG. COPY A,Y OPERATOR CHOICES AND =:F0,Y  STRIP TO SLAVE # NEG Y,Y -- CONVERT TO ADD =:40,Y -- SLAVE INDEX COPY =1,Q DATA FOR SELP SLVM1 XNX Y INDEX DEVICE ADDRESS SELP Q,:C2 DO MEMORY OPERATION SLVM2 XNX Y INDEX DEVICE ADDRESS SST :C2 SENSE FOR MEMORY OPERATION DONE -- SKIP IF NOT JMP SLVM3 OPERATION DONE IJNE Q,SLVM2 INCREMENT TIME-OUT COUNT -- JUMP IF NOT EXP. JST ERRLIT GO TO ERROR LIGHT ROUTINE TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JF OV,$-2 SINGLE ACCESS -- CONTINUE ERROR LIGHT ROUTINE JMP  SLVM1 CONTINUOUS ACCESS -- REPEAT MEMORY OPERATION TITL SLVM3 EQU $ MEMORY OPERATION DONE JT  SS,$+3 CHECK FOR READ OR WRITE -- JUMP FOR WRITE COPY *SCDR,Q GET CONTENTS OF SLAVE DATA REGISTER SELP Q,4 OUTPUT DATA TO CONSOLE DATA REGISTER TBIT 3,A CHECK FOR READ/WRITE ALTERNATION JF OV,SLVM4 JUMP FOR NO ALTERNATION COPY =0,Q -- JT SS,$+2 -- COMPLEMENT COPY =1,Q -- SENSE SWITCH H  OUT Q,0 -- JMP SLVMEM DO COMPLEMENT OPERATION SLVM4 TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JT OV,SLVM1 JUMP FOR CONTINUOUS ACCESS -- REPEAT OPERATION TBIT 1,A SINGLE ACCESS -- CHECK FOR AUTO-INCREMENT JF OV,$+2 JUMP IF NO AUTO-INCREMENT ADD =1,X INCREMENT MEMORY ADDRESS HLT  WAIT FOR OPERATOR ACTION JMP SLINS1 DO ANOTHER MEMORY OR REGISTER OPERATION TITL * * REGISTER INSPECT * SLVREG JF SS,SLVRRD TEST FOR READ OR WRITE. JUMP FOR READ IN 4,Q GET DATA FROM CONSOLE DATA REGISTER COPY Q,*SCDR PUT IN SLAVE DATA REGISTER COPY ISDRI,Q 'INPUT FROM SLAVE DATA REGISTER' INSTR.  JMP $+2 SLVRRD EQU $ READ REGISTER COPY OSDRI,Q 'OUTPUT TO SLAVE DATA REGISTER' INSTR. COPY =8,Y REGISTER COMPARISON VALUE CSM X,Y CHECK RANGE OF REGISTER SELECTION JMP $+3 OK JST ERRLIT -- ERROR-WRONG JMP $-1 -- REGISTER SELECTION XNX X USE REGISTER SELECTION AS INDEX COPY REGS3,Y GET S3 FIELD FOR INSTRUCTION OR Y,Q ADD TO INSTRUCTION SKELETON COPY Q,*SCIR STORE INSTRUCTION IN SLAVE INSTR. REG. COPY A,Y OPERATOR CHOICES AND =:F0,Y STRIP TO SLAVE #  NEG Y,Y -- CONVERT TO ADD =:40,Y -- SLAVE INDEX COPY =1,Q DATA FOR SELP SLVR1 XNX  Y INDEX DEVICE ADDRESS SELP Q,:C2 DO REGISTER OPERATION SLVR2 XNX Y INDEX DEVICE ADDRESS  SST :C2 SENSE FOR REGISTER OPERATION DONE - SKIP IF NOT JMP SLVR3 OPERATION DONE IJNE Q,SLVR2  INCREMENT TIME-OUT COUNT -- JUMP IF NOT EXP. JST ERRLIT TIME-OUT EXPIRED -- GO TO ERROR LIGHT ROUTINE TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JF OV,$-2 JUMP FOR SINGLE ACCESS -- CONTINUE LIGHTS JMP  SLVR1 CONTINUOUS ACCESS -- REPEAT OPERATION TITL SLVR3 EQU $ REGISTER OPERATION DONE JT SS,$+3 CHECK FOR READ OR WRITE -- JUMP FOR WRITE COPY *SCDR,Q GET CONTENTS OF SLAVE DATA REGISTER SELP Q,4  OUTPUT DATA TO CONSOLE DATA REGISTER TBIT 3,A CHECK FOR READ/WRITE ALTERNATION JF OV,SLVR4 JUMP FOR NO ALTERNATION COPY =0,Q -- JT SS,$+2 -- COMPLEMENT COPY =1,Q -- SENSE SWITCH  OUT Q,0 -- JMP SLVREG DO COMPLEMENT OPERATION SLVR4 TBIT 2,A CHECK FOR SINGLE OR CONTINUOUS ACCESS JT OV,SLVR1 JUMP FOR CONTINUOUS ACCESS -- REPEAT OPERATION TBIT 1,A CHECK FOR AUTO-INCREMENT  JF OV,$+3 JUMP IF NO AUTO-INCREMENT ADD =1,X INCREMENT REGISTER # AND =7,X WRAP AROUND TO 0 AFTER 7 HLT WAIT FOR OPERATOR ACTION JMP SLINS1 DO ANOTHER MEMORY OR REGISTER OPERATION * * ERROR LIGHT ROUTINE * * BLINK OV FOR APPROX. .25 SEC. * ERRLIT ENT RBIT 2,S RESET OV IMS ERRTMP -- INCREMENT ERRTMP TO 0. OV GETS SET JMP $-1 -- WHEN ERRTMP GOES NEGATIVE JMP *ERRLIT RETURI N ERRTMP RES 1,0 TITL * * TABLE OF INSTRUCTION S3 FIELDS * REGS3 EQU $ WORD :0000 A REGISTER  WORD :0040 Q REGISTER WORD :0020 X REGISTER WORD :0060 Y REGISTER WORD :0010 P REGISTER WORD :0030 S REGISTER WORD :0070 K REGISTER WORD :0050 L REGISTER * * SLAVE CONTROL INSTRUCTION SKELETONS * OSDRI OSCDR A OUTPUT FROM SLAVE REG. TO SLAVE CONTROL DATA REG ISDRI ISCDR A  INPUT TO SLAVE REG. FROM SLAVE CONTROL DATA REG. OMSDRI OMSCDR . OUTPUT FROM MEMORY TO SLAVE CONTROL DATA REG. IMSDRI IMSCDR . INPUT TO MEMORY FROM SLAVE CONTROL DATA REG. SSTPI SSTEP . SINGLE STEP STRTI START . START  TITL * * SLAVE CONTROL ROUTINE * * INPUT: * * A REG BIT0 0 = START *  1 = SINGLE STEP * * BIT 2 0 = SINGLE ACCESS * 1 = CONTINUOUS ACCESS * * BIT 4-6 SLAVE # (1-4) * * OUTPUT: * * DATA REG SLAVE P REG CONTENTS FOLLOWING SINGLE STEP * SLCTRL EQU $ TBIT 0,A 'START' OR 'SINGLE STEP' ? JT OV,SLSSTP JUMP IF SINGLE STEP COPY STRTI,Q 'START' INSTRUCTION JMP $+2 SLSSTP COPY SSTPI,Q 'SINGLE STEP' INSTRUCTION COPY Q,*SCIR STORE INSTRUCTION IN SLAVE INSTR. REG. COPY A,Y OPERATOR CHOICES AND =:F0,Y STRIP TO SLAVE # NEG Y,Y -- CONVERT TO ADD =:40,Y -- SLAVE INDEX COPY =1,Q DATA FOR SELP SLVST1 XNX Y INDEX DEVICE ADDRESS SELP Q,:C2 START SLAVE SLVST2 XNX Y INDEX DEVICE ADDRESS SST :C0 SENSE FOR OPERATION DONE - SKIP IF NOT JMP SLVST3 OPERATION DONE IJNE Q,SLVST2 INCREMENT TIME-OUT COUNT -- JUMP IF NOT EXP. JST ERRLIT TIME-OUT EXPIRED -- GO TO ERROR LIGHT ROUTINE TBIT 2,A  CHECK FOR SINGLE OR CONTINUOUS ACCESS JF OV,$-2 JUMP FOR SINGLE ACCESS -- CONTINUE LIGHTS JMP SLVST1  CONTINUOUS ACCESS -- REPEAT OPERATION * SLVST3 EQU $ OPERATION DONE TBIT 0,A START OR SINGLE STEP ?  JF OV,SLVST4 SKIP CONSOLE DISPLAY OUTPUT FOR START COPY OSDRPI,Q 'OUTPUT P TO SLAVE DATA REG.' INST.  COPY Q,*SCIR STORE IN SLAVE INSTRUCTION REG. COPY =1,Q DATA FOR SELP XNX Y INDEX DEVICE ADDRESS SELP Q,:C2 INSPECT SLAVE P REG. COPY *SCDR,Q LOAD Q WITH SLAVE P REG CONTENTS SELP Q,4  OUTPUT TO CONSOLE DATA REG. SLVST4 HLT WAIT FOR OPERATOR ACTION JMP SLCTRL DO ANOTHER CONTROL OPERATION * OSDRPI OSCDR P 'OUTPUT P TO SLAVE DATA REG.' INST. SAVE END P TO SLAVE DATA REG.' INST.  COPY Q,*SCIR STORE IN SLAVE INSTRUCTION REG. COPY =1,Q DATA FOR SELP XNX Y INDEX DEVICE ADDRESS SELP Q,:C2 INSPECT SLAVE P REG. COPY *SCDR,Q LOAD Q WITH SLAVE P REG CONTENTS SELP Q,4  OUTPUT TO CONSOLE DATA REG. SLVST4 HLT WAIT FOR OPERATOR ACTION JMP SLCTRL DO ANOTHER CONTROL OPERAJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII