IMD 1.16: 1/09/2008 10:34:34 84-93076-01 b100 f07601 synch. comm. controller test program source diskette nm4/scout nov82    @0{)vvЀЀsQpk)p " }fA __M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICARTOSMA282112410190940821124101909 821124101909' @F07601 VOLSYNCH COMM CONTROLLER TEST PROGRAM - SOURCE   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_M@qGyy GGG`HX@ b G`^Y e GQ @@p@987 85P@ G:پN 8)0. * C'xC# b# }B* @0DAJL w+™ЀЀΖQA1"   i  ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G7H@pܾrCHC C GTq` Lg gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYSG @ @G6BDāCGDĀ# BC @E OBLD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER001,A 'DSR/DM BIT DID NOT SET' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET NOP STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE 0 JT OV,$+3 IF SET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE 0 JF OV,$+3 IF RESET, JUMP COPY =ER022,A 'CTS/CS OR DCD/RR BIT DID NOT RESET' JST ERROR DISPLAY ERROR COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =B:CBIN,A GET CHNL. B CTRL. BLK. ADD. IMS TRCTP1 INC. CHNL. COUNT JMP TRC:24 DO CHNL. B COPY CHADD,A GET CHNL. ADD. SHIFT A,RO,1 GENERATE NEW CHNL. ADD. IMS TRCTP2 INC. LOOP COUNT JMP TRC:22 DO AGAIN * COPY =0,A RESET ADD. SELECT BIT COPY A,BITS RESET RTS/RS & DTR/TR BITS COPY =-3,A SET LOOP COUNT TO 3 TIMES COPY A,TRCTP2 STORE COUNT COPY =:F8,A SET CHNL. ADD. TO DEFAULT TRC:25 COPY A,CHADD STORE CHNL. ADD. COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB. ADD. JST 0(X) INITIALIZE JMP TRC:12 'SCC INT. TIMED OUT' COPY =:ED00,A EXPECTED STATUS COPY A,TXEXP STORE IT COPY =:CD00,A EXPECTED STATUS COPY A,RXEXP STORE IT JST TRR0:C DO TX/RX I/O JMP TRC:12 'SCC INT. TIMED OUT' COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =A:CBTX,A GET CHNL. A CTRL. B LK. ADD. COPY =A:CBRX,X GET CHNL. A RX CTRL. BLK ADD. TRC:26 COPY A,TX:CB SET TX CTRL. BLK. ADD FOR 'BUFFCM' COPY X,RX:CB SET RX CTRL. BLK. ADD. FOR 'BUFFCM' JST BUFFCM DO BUF. COMPARE JST ERROR IF ERR., DISPLAY IT COPY =-2,A SET COUNT TO 2 COPY A,TEMP1 STORE COUNT COPY CB1,X GET TX CTRL. BLK. ADD. TRC:27 COPY ME:AD1(X),A GET PRIMARY BUF. ADD. ADD =5,A GENERATE NEW ADD. COPY A,ME:AD1(X) STORE IN CTRL. BLK. COPY BT:CT1(X),A GET PRIMARY BUF. SIZE SHIFT A,RO,1 DIV. BY 2 COPY A,BT:CT1(X) STORE IN CTRL. BLK. COPY ME:AD2(X),A GET DATA CHAIN BUF. ADD. JEQ A,$+6 IF ZERO, NO DATA CHAIN ADD =5,A GENERATE NEW ADD. COPY A,ME:AD2(X) STORE IN CTRL. BLK. COPY BT:CT2(X),A GET DATA CHAIN BUF. SIZE SHIFT A,RO,1 DIV. BY 2 COPY A,BT:CT2(X) STORE IN CTRL. BLK. COPY CB2,X GET RX CTRL. BLK. ADD. IMS TEMP1 INC. COUNT JMP TRC:27 DO RX CTRL. BLK. COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY =B:CBRX,X GET CHNL. B RX CTRL. BLK. ADD.  IMS TRCTP1 INC. CHNL. COUNT JMP TRC:26 DO CHNL. B COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0:C DO NOPS JMP TRC:12 'SCC INT. TIMED OUT' COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =TBI:A,X GET CHNL. A TBI ADD COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. TRC:28 COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY TB:INS(X),A GET NOP STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE 1 JF OV,TRC:29 IF 0, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE 1 JF OV,TRC:29 IF 0, ERROR TBIT DSR:DM,A DSR/DM BIT SHOULD BE 1 JT OV,$+3 IF 1, JUMP TRC:29 COPY =ER023,A 'DSR/DM, CTS/CS OR DCD/RR BIT WAS 0' JST ERROR DISPLAY ERROR COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =A:CBIN,A GET CHNL. B CTRL. BLK. ADD. IMS TRCTP1 INC. CHNL. COUNT JMP TRC:28 DO CHNL. B COPY CHADD,A GET CHNL. ADD. SHIFT A,RO,1 GENERATE NEW ADD. IMS TRCTP2 INC. LOOP COUNT JMP TRC:25 GO AGAIN JMP TRC:30 DO ABORT TEST * LPOOL TITL * * RX ABORT TEST * TRC:30 EQU $ RX ABORT TESTING COPY =TBI:A,X GET CHNL. A TBI ADD. COPY =ABRTA1,A GET RX EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =ABRTA2,A GET TX ERROR EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =ABRTA3,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. JST CLRTBI CLEAR TBI COPY =:0D20,A EXPECTED STATUS COPY A,RXEXP STORE IT * COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =ABRTB1,A GET RX EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =ABRTB2,A GET TX ERROR EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =ABRTB3,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. JST CLRTBI CLEAR TBI JST CLRFGS CLEAR INT. FLAGS * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY =B:CBRX,X GET CHNL. B RX CTRL. BLK. ADD. JST ENSCC ENABLE SCC INTS. JST OTA SET CHNL. A RX BLK. JST SENBSY STILL BUSY? JMP TRC:32 NO, SEND CHNL. B RX BLK. JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =TBI:A,X GET CHNL. A TBI ADD. TRC:31 JST SEL RESET THE SCC COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER017,A 'BUSY BIT STILL SET' JST ERROR DISPLAY ERROR JMP TRC:12 EXIT TEST * TRC:32 JST OTX SEND CHNL.  B RX CTRL. BLK. COPY =1,A SET ABORT CODE FOR CHNL. A COPY =2,X SET ABORT CODE FOR CHNL. B JST SENBSY STILL BUSY? JMP TRC:33 NO, SEND ABORT JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. JMP TRC:31 DISPLAY ERROR * TRC:33 JST OTA ABORT CHNL. A JST SENBSY STILL BUSY? JMP TRC:34 NO, SEND CHNL. B ABORT JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =A:CBRX,A GET CHNL. A CTRL. BLK. ADD. JMP TRC:31-1 DISPLAY ERROR * TRC:34 JST OTX SEND CHNL. B ABORT JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL RESET THE SCC COPY =B:CBRX,A GET CHNL. B CTRL. BLK. COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER004,A 'SCC INT. TIMED OUT' JMP TRC:32-2 DISPLAY ERROR * LPOOL TITL TEST UTILITIES (TRRC:C - TESTS C,D ABORT TEST EOBS) ****************************** * * ABRTA1 - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. A * ABRTB1 - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. B * * THESE ARE THE EOB SERVICE ROUTINES * FOR AN 'ABORT' TERM. OF RX COMS. * ****************************** * * ABRTA1 - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. A * ABRTA1 ENT CHNL. A RX EOB IMS A:RXFL SET RX INT. FLAG - CHNL. A JMP ABRA10 IF NOT SET, JUMP COPY =ER045,A 'MULTIPLE INTS.' ABRA05 JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =A:CBRX,X GET CHNL. A CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:A,X GET CHNL. A TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' ABRA07 JST ERROR DISPLAY ERROR JMP TRC:12 EXIT TEST * ABRA10 SBIT GI:,S ENABLE INTS. COPY =-1,A SET A TO -1 CSK A,A:RXFL IS CHNL. A INT. SET? NOP JMP ABRA11 NO, WAIT FOR IT CSK A,B:RXFL IS CHNL. B INT. SET?  NOP JMP ABRA11 NO, WAIT FOR IT JMP ABRA12 YES, DO CHECKING ABRA11 JST ENSCC ENABLE INTS. JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =-1,A SET A TO -1 CSK A,A:RXFL IS CHNL. A INT. SET? NOP JMP $+2 NO, ERROR JMP $+3 YES, CHECK CHNL. B COPY =ER004,A 'SCC INT. TIMED OUT JMP ABRA05 DISPLAY ERROR COPY =ER004,A 'SCC INT. TIMED OUT' JMP ABRB05 DISPLAY ERROR * ABRA12 COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP3 STORE COUNT COPY =TBI:A,X GET CHNL. A TBI ADD. COPY =A:CBRX,A GET CHNL. A CTRL. BLK. ADD. ABRA13 COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY TB:RXS(X),A GET RX STATUS  TBIT ABRT:,A ABORT BIT SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER042,A 'ABORT BIT DID NOT SET' JST ERROR DISPLAY ERROR COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =B:CBRX,A GET CHNL. B CTRL. BLK. ADD. IMS TEMP3 INC. LOOP COUNT JMP ABRA13 DO CHNL. B JMP TRC:12 EXIT TEST * * ABRTB1 - NORMAL 'RX' INT. SERVICE ROUTINE CHNL. B * ABRTB1 ENT CHNL. B RX EOB IMS B:RXFL SET RX INT. FLAG - CHNL. B JMP ABRA10 IF NOT ALREADY SET, JUMP COPY =ER045,A 'MULTIPLE INTS.' ABRB05 JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =B:CBRX,X GET CHNL. B CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:B,X GET CHNL. B TBI ADD. JMP ABRA07-1 DISPLAY ERROR * LPOOL TITL ****************************** * * ABRTA2 - * ABRTB2 - TX ERROR 'ABORT TEST' INT. SERVICE ROUTINES * * ABRTA3 - * ABRTB3 - NOP/INITZ. ERROR 'ABORT TEST' INT. SERVICE ROUTINES * * THESE ARE THE E RROR EOB SERVICE ROUTINES FOR AN * ABNORMAL TERM. OF AN 'ABORT' COM. TO * THE TX OR NOP/INITZ. INT. VECTOR ADD. IN THE TBI. * ******************************* * ABRTA2 ENT CHNL. A TX ERROR EOB IMS TX:SE SET TX STATUS ERROR FLAG COPY =ER043,A 'TX INT. VECTOR INSTEAD OF RX' JMP ABRA05 DISPLAY ERROR * ABRTA3 ENT CHNL. A NOP/INITZ. ERROR EOB IMS IN:SE SET NOP/INITZ. STATUS ERROR FLAG COPY =ER044,A 'NOP/INITZ. VECTOR INSTEAD OF RX' JMP ABRA05 DISPLAY ERROR * ABRTB2 ENT CHNL. B TX ERROR EOB IMS TX:SE SET TX STATUS ERROR FLAG COPY =ER043,A 'TX INT. VECTOR INSTEAD OF RX' JMP ABRB05 DISPLAY ERROR * ABRTB3 ENT CHNL. B NOP/INITZ. ERROR EOB IMS IN:SE SET NOP/INITZ. STATUS ERROR FLAG COPY =ER044,A 'NOP/INITZ. VECTOR INSTEAD OF RX' JMP ABRB05 DISPLAY ERROR * LPOOL TITL TEST UTILITIES (TRRC:C - SUBROUTINE 'TRA0:C') ****************************** * * TRA0:C - THIS SUBROUTINE WILL CLEAR THE TBI FOR BOTH CHNLS. * OF STATUSES AND BYTE COUNTS. THEN IT WILL SET THE * INT. VECTORS FOR A 'TX ONLY' TEST AS WELL * AS THE ERROR 'RX' AND NOP/INITZ.' VECTOR INTS. * THE TIME LIMIT FOR A TX INT. FROM BOTH CHNLS. * IS 1 SECOND. * * THE TX CTRL. BLKS. AND BUFS. MUST HAVE BEEN * SET UP PRIOR TO ENTERING THIS SUBROUTINE. * * CALLING SEQUENCE: * JST TRA0:C * JMP ? INT. TIMED OUT R *  JMP ? INT. OCCURRED R+1 * ****************************** * TRA0:C ENT TX ONLY COPY =TBI:A,X GET CHNL. A TBI ADD. JST CLRTBI CLEAR TBI COPY =TRATX1,A GET TX EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =TRARX1,A GET RX ERROR EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =TRAIN1,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. * COPY =TBI:B,X GET CHNL. B TBI ADD. JST CLRTBI CLEAR TBI COPY =TRATX2,A GET TX EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =TRARX2,A GET RX ERROR EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =TRAIN2,A GET NOP/INITZ. INT. VECTOR ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. * COPY BITS,A GET BIT SETTING OR =OPC:TX,A 'OR' IN TX OPCODE  COPY A,A:CBTX+CH:OPC CHANNEL A BIT SETTINGS SBIT CHA:,A SET CHANNEL TO B COPY A,B:CBTX+CH:OPC CHANNEL B BIT SETTINGS COPY CHADD,A GET CHNL. ADD. COPY A:CBTX+ME:AD1,X GET BUFF. ADD. - CHNL. A SHIFT X,LO,1 MAKE BYTE ADD. SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE IN CHNL. A TX FRAME RBIT BY:,S SET WORD MODE COPY B:CBTX+ME:AD1,X GET BUFF. ADD. - CHNL. B SHIFT X,LO,1 MAKE BYTE ADD. SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE IN CHNL. B TX FRAME RBIT BY:,S SET WORD MODE * JST CLRFGS CLEAR INT. FLAGS COPY =1,A SET TIME OUT TO 1 SECOND JST TIMEST SET TIME COPY =A:CBTX,A GET CHNL. A CTRL. BLK. ADD. COPY =B:CBTX,X GET CHNL. B CTRL. BLK. ADD. JST SEND:B SEND CTRL. BLK. ADDS. TRA2:C JMP *TRA0:C 'SCC INT. TIMED OUT' * LPOOL TITL TEST UTILITIES (TRRC:C - SUBROUTINE 'TRA0:C' EOBS) ****************************** * * 'TX ONLY' END-OF-BLK. SERVICE ROUTINES (TESTS C,D) * * TRATX1 - NORMAL 'TX' INT. SERVICE ROUTINE - CHNL. A * TRATX2 - NORMAL 'TX' INT. SERVICE ROUTINE - CHNL. B * * THESE ARE THE EOB SERVICE ROUTINES FOR A NORMAL * TERM. OF A TX COM. TO CHNL. A AND * CHNL. B. * * THESE SER VICE ROUTINES WILL CHECK FOR MULTIPLE EOB * INTS. AND STATUS ERRORS UPON TERM. OF A * TX COM. * * ALSO THE RX AND NOP/INITZ. STATUSES IN THE TBI WILL * BE CHECKED FOR ALTERATIONS AS WELL AS THE RX BYTE * COUNTS. * ****************************** * * CHNL. A TX EOB * TRATX1 ENT CHNL. A TX EOB IMS A:TXFL SET TX INT. FLAG - CHNL. A JMP TRAT11 IF NOT PREVIOUSLY SET, JUMP COPY =ER012,A 'MULTIPLE INTS.' TRAT: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =A:CBTX,X GET CHNL. A CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =TBI:A,X GET CHNL. A TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST ERROR DISPLAY ERROR JST STATUS CHECK STATUS TRAT10 JST ERROR DISPLAY ERROR JMP TRA2:C EXIT TRAT11 SBIT GI:,S ENABLE INTS. COPY =-1,A SET A TO -1 CSK A,B:TXFL IS INT. SET? NOP JMP $+2 NO, WAIT FOR IT JMP TRAT12 YES, CHECK STATUS JST ENSCC ENSURE SCC INTS. ARE ENABLED JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPRIED/RESET THE SCC COPY =A:CBTX,A GET CHNL. A CTRL. BLK. ADD. COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR'  JST STATUS CHECK STATUS FOR ERRORS JST ERROR DISPLAY ANY ERROR COPY =ER004,A 'SCC INT. TIMED OUT' JMP TRAT:: DISPLAY ERROR * TRAT12 JST DELAY DO DELAY TO FINISH TRANSMISSION OF DATA JMP $-1 INC. TIME COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP3 STORE COUNT COPY =A:CBTX,A GET CHNL. A CTRL. BLK. ADD. COPY =TBI:A,X GET CHNL. A TBI ADD. TRAT13 COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST STATUS CHECK STATUS FOR ERRORS JST ERROR DISPLAY ANY ERROR COPY TB:AD,X GET TBI ADD. * COPY TB:TXS(X),A GET TX STATUS TBIT RCIP:,A RX COM. IN PROGRESS - SHOULD BE 0 JT OV,TRAT14 IF SET, ERROR TBIT RXDP:,A RX DATA PRESENT - SHOULD BE 0 JF OV,$+4 IF RESET, JUMP TRAT14 COPY =ER031,A 'RCIP OR RXDP BIT SET' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS TBIT TCIP:,A TX COM. IN PROGRESS - SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER039,A 'TX COM. IN PROGRESS WAS RESET' JST ERROR DISPLAY ERROR * COPY TB:RXS(X),A GET RX STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER013,A 'RX TBI STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:RXB(X),A GET RX BYTE COUNT - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER014,A 'RX BYTE COUNT ALTERED' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET NOP/INITZ. STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER015,A 'NOP/INITZ. STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY CB1,X GET TX CTRL. BLK. ADD. COPY BT:CT1(X),A GET PRIMARY BUF. SIZE ADD BT:CT2(X),A ADD DATA CHAIN BUF. SIZE COPY TB:AD,X GET TBI ADD. CSK A,TB:TXB(X) COMPARE TO BYTE XFRD. NOP JMP $+2 BAD JMP $+3 GOOD, JUMP COPY =ER016,A 'BYTES XFRD. NOT EQUAL TO BUFF. LENGTHS' JST ERROR DISPLAY ERROR COPY =B:CBTX,A GET CHNL. B CTRL. BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. IMS TEMP3 INC. CHNL. COUNT JMP TRAT13 DO CHNL. B IMS TRA0:C SET RETURN ADD. JMP TRA2:C EXIT * LPOOL TITL * * CHNL. B TX EOB * TRATX2 ENT CHNL. B TX EOB IMS B:TXFL SET TX INT. FLAG JMP TRAT21 IF NOT PREVIOUSLY SET, JUMP C OPY =ER012,A 'MULTIPLE INTS.' TRAT:: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =B:CBTX,X GET CHNL. B CTRL. BLK. ADD.  COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =TBI:A,X GET CHNL. A TBI ADD. JMP TRAT10-3 DISPLAY ERROR TRAT21 SBIT GI:,S ENABLE INTS. COPY =-1,A SET A TO -1 CSK A,A:TXFL IS INT. SET? NOP JMP $+2 NO, WAIT FOR IT JMP TRAT12 YES, CHECK STATUSES JST ENSCC ENSURE SCC INTS. ARE ENABLED JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY =B:CBTX,A GET CHNL. B CTRL. BLK. ADD. COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' JST STATUS CHECK STATUS JST ERROR DISPLAY AN ERROR COPY =ER004,A 'SCC INT. TIMED OUT' JMP TRAT: DISPLAY ERROR * LPOOL TITL ****************************** * * TRARX1 - * TRARX2 - RX ERROR 'TX ONLY' INT. SERVICE ROUTINES * * TRAIN1 - * TRAIN2 - NOP/INITZ ERROR 'TX ONLY' INT. SERVICE ROUTINES * * THESE ARE THE ERROR EOB SERVICE ROUTINES FOR AN ABNORMAL * TERM. OF A TX COM. TO THE RX OR NOP/INITZ. * INT. VECTOR ADD. IN THE TBI. * ****************************** * TRARX1 ENT CHNL. A RX ERROR EOB IMS RX:SE SET RX ERROR FLAG COPY =ER018,A 'RX INT. VECTOR INSTEAD OF TX' JMP TRA:A DISPLAY ERROR * TRAIN1 ENT CHNL. A NOP/INITZ ERROR EOB IMS IN:SE SET NOP/INITZ. ERROR FLAG COPY =ER019,A 'NOP/INITZ. VECTOR INSTEAD OF TX' TRA:A JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =A:CBTX,X GET CHNL. A CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. FOR 'ERROR' COPY =TBI:A,X GET CHNL. A TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST ERROR DISPLAY ERROR COPY =-1,A SET A TO -1 CSK A,B:TXFL CHNL. B INT. SET? NOP JMP TRA2:C EXIT COPY =B:CBTX,A GET CHNL. B CTRL. BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. TRA:A1 COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY A,CB1 SET CTRL. BLK. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR JMP TRA2:C EXIT * TRARX2 ENT CHNL. B RX ERROR EOB IMS RX:SE SET RX ERROR FLAG COPY =ER018,A 'RX INT. VECTOR INSTEAD OF TX' JMP TRA:B DISPLAY ERROR * TRAIN2 ENT CHNL. B NOP/INITZ. ERROR EOB IMS IN:SE SET NOP/INITZ. ERROR FLAG COPY =ER019,A 'NOP/INITZ. VECTOR INSTEAD OF TX' TRA:B JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =B:CBTX,X GET CHNL. B CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. FOR 'ERROR' COPY =TBI:B,X GET CHNL. B TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST ERROR DISPLAY ERROR COPY =-1,A SET A TO -1 CSK A,A:TXFL CHNL. A INT. SET? NOP JMP TRA2:C EXIT COPY =A:CBTX,A GET CHNL. A CTRL. BLK. ADD. COPY =TBI:A,X GET CHNL. A TBI ADD. JMP TRA:A1 DO STATUS CHECK * LPOOL TITL TEST UTILITIES (TRRC:C - SUBROUTINE 'TRR0:C') ****************************** * * TRR0:C - THIS SUBROUTINE WILL CLEAR THE TBI, FOR BOTH * CHNLS., OF STATUSES AND BYTE COUNTS AND SET THE * INT. VECTORS FOR A TX AND RX TEST AS WELL AS THE *  ERROR 'NOP/INTIZ.' INT. FOR BOTH CHNLS. THE TIME * LIMIT FOR BOTH AN RX AND TX INT. IS 1 SECOND. * * THE RX AND TX CTRL. BLKS. AS WELL AS THE BUFS. * MUST HAVE BEEN SET UP PRIOR TO ENTERING THIS * SUBROUTINE.  * * CALLING SEQUENCE: * JST TRR0:C * JMP ? INT. TIMED OUT R * JMP ? GOOD RETURN R+1 * ****************************** * TRR0:C ENT TX/RX TEST - TESTS C,D COPY =127,A SET COUNT TO 128 WORDS COPY =RCBUFF,X GET RX BUF. ADD. JST CLEAR CLEAR IT OUT COPY =TBI:A,X GET CHNL. A TBI ADD. COPY =TRBTX1,A GET TX EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =TRBRX1,A GET RX EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =TRBIN1,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. JST CLRTBI CLEAR TBI * COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =TRBTX2,A GET TX EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =TRBRX2,A GET RX EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =TRBIN2,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. JST CLRTBI TBI CLEAR TBI * COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY A,CB1 SAVE IT COPY =A:CBTX,X GET CHNL. A TX CTRL. BLK. ADD. COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP2 STORE COUNT COPY =0,A SET CHNL. TO A TRR:01 OR BITS,A 'OR' IN DTR/TR, RTS/RS AND SEC. ADD. BITS COPY A,TEMP1 SAVE BIT SETTINGS OR =OPC:TX,A 'OR' IN OP CODE COPY A,CH:OPC(X) ENSURE TX CHA./OPC. WD. REFLECTS CURRENT SETTING * COPY CB1,X GET RX CTRL. BLK. ADD. COPY TEMP1,A GET CURRENT SETTINGS OR =OPC:RX,A 'OR' IN RX OPCODE COPY A,CH:OPC(X) ENSURE RX CHA./OPC. WD. REFLECTS CURRENT SETTING COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY A,CB1 SAVE IT COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. ADD. COPY =1%CHA:,A SET CHNL. TO B IMS TEMP2 INC. LOOP COUNT JMP TRR:01 DO CHNL. B JST CLRFGS CLEAR FLAGS COPY CHADD,A GET CHNL. ADD. COPY A:CBTX+ME:AD1,X GET BUFF. ADD. - CHNL. A SHIFT X,LO,1 MAKE BYTE ADD. SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE IN CHNL. A TX FRAME RBIT BY:,S SET WORD MODE COPY B:CBTX+ME:AD1,X GET BUFF. ADD. - CHNL. B SHIFT X,LO,1 MAKE BYTE ADD. SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE IN CHNL. B TX FRAME RBIT BY:,S SET WORD MODE * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY =A:CBRX,A GET CHNL. A RX CTRL BLK. ADD. COPY =B:CBRX,X GET CHNL. B RX CTRL. BLK. ADD. JST ENSCC ENABLE SCC INTERRUPTS JST OTA SET CHNL. A RX BLK. JST SENBSY STILL BUSY? JMP TRR:04 NO, SEND CHNL. B RX BLK. JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =TBI:A,X GET CHNL. A TBI ADD. TRR:02 JST SEL RESET THE SCC COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER017,A 'BUSY BIT STILL SET' JST ERROR DISPLAY ERROR TRR:03 JMP *TRR0:C EXIT * TRR:04 JST OTX SEND CHNL. B RX CTRL. BLK. COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. ADD. JST SENBSY STILL BUSY? JMP TRR:05 NO, SEND TX BLKS. JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. COPY =TBI:B,X GET CHNL. B TBI ADD. JMP TRR:02 DISPLAY ERROR * TRR:05 JST SEND:B SEND TX CTRL. BLKS JMP TRR:03 EXIT * LPOOL TITL TEST UTILITIES (TRRC:C - SUBROUTINE 'TRR0:C' EOBS) ****************************** * * 'TX/RX' END-OF-BLK. SERVICE ROUTINES (TESTS C,D) * * TRBTX1 - NORMAL 'TX' INT. SERVICE ROUTINE - CHNL. A * TRBRX1 - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. A * * TRBTX2 - NORMAL 'TX' INT. SERVICE ROUTINE - CHNL. B * TRBRX2  - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. B * * THESE ARE THE EOB SERVICE ROUTINES FOR A NORMAL * TERM. OF TX/RX COMS. TO BOTH CHNLS. * * THESE SERVICE ROUTINES WILL CHECK FOR MULTIPLE * EOB INTS. AND STATUS ERRORS UPON TERM. OF * TX/RX COMS. FOR BOTH CHNLS. * * ALSO THE NOP/INITZ. STATUSES IN THE TBIS WILL * BE CHECKED FOR ALTERATIONS. * ****************************** * * TRBTX1 - NORMAL 'TX' INT. SERVICE ROUTINE - CHNL. A * TRBTX1 ENT NORMAL CHNL. A TX EOB IMS A:TXFL SET TX INT. FLAG JMP TRB:03 IF RESET, OK COPY =ER012,A 'MULTIPLE INTS. COPY =A:CBTX,X GET CHNL. A TX CTRL. BLK. TRB:01 COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =A:CBTX,X GET CHNL. A TX CTRL. BLK. COPY X,CB1 SET TX CTRL. BLK. FOR 'ERROR' COPY =A:CBRX,X GET CHNL. A RX CTRL. BLK. COPY X,CB2 SET RX CTRL. BLK. FOR 'ERROR' COPY =TBI:A,X GET CHNL. A TBI ADD. TRB:02 COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. JST ERROR DISPLAY ERROR JST STATUS CHECK STATUS JST ERROR DISPLAY ANY ERROR JMP TRR:03 EXIT * * COMMON SERVICE ROUTINES FOR ALL TXS AND RXS * TRB:03 SBIT GI:,S ENABLE INTERRUPTS JST ENSCC ENABLE SCC INTS. COPY =-1,A SET A TO -1 CSK A,A:TXFL CHNL. A TX FLAG SET? NOP JMP TRB:04 NO, WAIT CSK A,A:RXFL CHNL. A RX FLAG SET? NOP JMP TRB:04 NO, WAIT CSK A,B:TXFL CHNL. B TX FLAG SET? NOP JMP TRB:04 NO, WAIT CSK A,B:RXFL CHNL. B RX FLAG SET? NOP JMP TRB:04 NO, WAIT JMP TRB:07 DO STATUS CHECKS * TRB:04 JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TEMP3 STORE COUNT COPY A:TXFL,A GET CHNL. A TX INT. COPY A,TX:FLG STORE TX INT. FLAG COPY A:RXFL,A GET CHNL. A RX INT. COPY A,RX:FLG STORE RX INT. FLAG COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY =A:CBTX,X GET CHNL. A TX CTRL. BLK. ADD. TRB:05 COPY X,CB1 SET TX CTRL. BLK. FOR 'ERROR' COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY A,CB2 SET RX CTRL. BLK. FOR 'ERROR' COPY =0,A RESET A COPY A,TEMP4 RESET TX INT. COPY =-2,A SET A TO -2 CSK A,TX:FLG TX INT. SET? NOP JMP $+3 YES, DO STATUS CHECK COPY =ER027,A 'TX INT. TIMED OUT' JMP $+3 DISPLAY ERROR IMS TEMP4 SET TX INT. JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR COPY CB2,A GET RX CTRL. BLK. COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =-2,A SET A TO -2 CSK A,RX:FLG RX INT. SET? NOP JMP $+3 YES, DO STATUS CHECK COPY =ER024,A 'RX INT. TIMED OUT' JMP TRB:06 DISPLAY ERROR COPY TEMP4,A GET TX INT. JNE A,$+3 IF SET, JUMP COPY =ER026,A 'RX INT. OCCURRED FIRST' JST ERROR DISPLAY ERROR JST STATUS DO STATUS CHECK TRB:06 JST ERROR DISPLAY ANY ERROR COPY B:TXFL,A GET CHNL. B TX INT. COPY A,TX:FLG SET TX INT. FLAG COPY B:RXFL,A GET CHNL. B RX INT. COPY A,RX:FLG STORE RX INT. FLAG COPY =TBI:B,A GET CHNL. B TBI ADD.  COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. IMS TEMP3 INC. CHNL. COUNT JMP TRB:05 DO CHNL. B JMP TRR:03 BAD RETURN * LPOOL TITL TRB:07 COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TEMP4 STORE COUNT COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =A:CBTX,A GET CHNL. A TX C TRL. BLK. COPY =A:CBRX,X GET CHNL. A RX CTRL. BLK. TRB:08 COPY A,CB1 SET TX CTRL. BLK. FOR 'ERROR' COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY X,CB2 SET RX CTRL. BLK. FOR 'ERROR' JST STATUS CHECK TX STATUS JST ERROR DISPLAY ANY ERROR COPY CB2,A GET RX CTRL. BLK. ADD. COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' JST STATUS CHECK RX STATUS JST ERROR DISPLAY ANY ERROR * COPY TB:AD,X GET TBI ADD. COPY TB:INS(X),A GET NOP/INITZ. STATUS - CHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER028,A 'NOP/INITZ. STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS TBIT TCIP:,A TX IN PROGRESS - SHOULD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER037,A 'TCIP BIT WAS NOT SET' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS TBIT RCIP:,A RX IN PROGRESS - SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER032,A 'RCIP BIT RESET' JST ERROR DISPLAY ERROR * COPY TB:RXS(X),A GET RX STATUS TBIT RCIP:,A RX IN PROGRESS - SHOULD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER038,A 'RCIP BIT RESET' JST ERROR DISPLAY ERROR * COPY TB:RXS(X),A GET RX STATUS TBIT TCIP:,A TX IN PROGRESS - SHOULD BE 0 JT OV,TRB:09 IF SET, ERROR TBIT RXDP:,A RX DATA PRESENT - SHOULD BE 0 JF OV,$+3 IF RESET, JUMP TRB:09 COPY =ER033,A 'TCIP OR RXDP BIT SET' JST ERROR DISPLAY ERROR *  COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. COPY =B:CBRX,X GET CHNL, B RX CTRL. BLK. IMS TEMP4 INC. CHNL. COUNT JMP TRB:08 DO CHNL. B IMS TRR0:C SET GOOD RETURN JMP TRR:03 EXIT * LPOOL TITL * * TRBRX1 - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. A * TRBRX1 ENT NORMAL CHNL. A RX EOB IMS A:RXFL SET RX INT. FLAG JMP TRB:03 CHECK FOR INTS. COPY =A:CBRX,X GET CHNL. A RX CTRL. BLK. COPY =ER025,A 'MULTIPLE INTS.' JMP TRB:01 DISPLAY ERROR * * TRBTX2 - NORMAL 'TX' INT. SERVICE ROUTINE - CHNL. B * TRBTX2 ENT NORMAL CHNL. B TX EOB IMS B:TXFL SET TX INT. FLAG  JMP TRB:03 CHECK FOR INTS. COPY =ER012,A 'MULTIPLE INTS. FOR TX COM.' COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. TRB:30 COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. COPY X,CB1 SET TX CTRL. BLK. FOR 'ERROR' COPY =B:CBRX,X GET CHNL. B RX CTRL. BLK. COPY X,CB2 SET RX CTRL. BLK. FOR 'ERROR' COPY =TBI:B,X GET CHNL. B TBI ADD. JMP TRB:02 DISPLAY ERROR * * TRBRX2 - NORMAL 'RX' INT. SERVICE ROUTINE - CHNL. B * TRBRX2 ENT NORMAL CHNL. B RX EOB IMS B:RXFL SET RX INT. FLAG JMP TRB:03 CHECK FOR INTS. COPY =ER025,A 'MULTIPLE INTS.' COPY =B:CBRX,X GET CHNL. B RX CTRL. BLK. JMP TRB:30 DISPLAY ERROR * LPOOL TITL TEST UTILITIES (TRRC:C - SUBROUTINE 'TRR0:C' EOBS) ****************************** * * TRBIN1 - NOP/INITZ. ERROR 'RX/TX' INT. SERVICE ROUTINE FOR * CHNL. A (TESTS C,D) * * TRBIN2 - NOP/INITZ. ERROR 'RX/TX' INT. SERVICE ROUTINE FOR * CHNL. B (TESTS C,D) * * THESE ARE THE ERROR EOB SERVICE ROUTINES FOR AN ABNORMAL * TERM. OF A TX OR TX COM. TO THE NOP/INITZ. * INT. VECTOR ADD. IN THE TBI. * ****************************** * * TRBIN1 - CHNL. A ERROR NOP/INITZ. EOB * TRBIN1 ENT CHNL. A NOP/INITZ. ERROR EOB IMS IN:SE SET NOP/INITZ. ERROR STATUS FLAG JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY A,CB1 SET TX CTRL. BLK. ADD. FOR 'ERROR' COPY =  A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY A,CB2 SET RX CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =-1,A SET A TO -1 CSK A,A:TXFL CHNL. A INT? NOP JMP TIN1:1 NO, JUMP COPY =ER019,A 'NOP/INITZ. INT. INSTEAD OF RX' COPY =A:CBTX,X GET TX CTRL. BLK. ADD. JMP TIN1:2 DISPLAY ERROR TIN1:1 CSK A,A:RXFL CHNL. A RX INT.? NOP JMP TIN1:3 NO, JUMP COPY =ER030,A 'NOP/INITZ. INT. INSTEAD OF TX' COPY =A:CBRX,X GET RX CTRL. BLK. ADD. TIN1:2 COPY X,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST ERROR DISPLAY ERROR JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR JMP TIN1:4 CONT. TIN1:3 COPY =ER029,A 'NOP/INITZ. INSTEAD OF RX OR TX' JST ERROR DISPLAY ERROR * TIN1:4 COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY A,CB1 SET TX CTRL. BLK. ADD. FOR 'ERROR' COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY A,CB2 SET RX CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =-1,A GET A TO -1 CSK A,B:TXFL CHNL. B TX INT? NOP JMP TIN1:5 NO, RX INT? COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR COPY =-1,A SET A TO -1 TIN1:5 CSK A,B:RXFL CHNL. B RX INT? NOP JMP TRR:03 NO, EXIT COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR JMP TRR:03 EXIT * LPOOL TITL * * TRBIN2 - CHNL. B ERROR 'NOP/INITZ.' EOB * TRBIN2 ENT CHNL. B NOP/INITZ. ERROR EOB IMS IN:SE SET NOP/INITZ. ERROR STATUS FLAG JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY A,CB1 SET TX CTRL. BLK. ADD. FOR 'ERROR' COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY A,CB2 SET RX CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =-1,A SET A TO -1 CSK A,B:TXFL CHNL. B TX INT? NOP JMP TIN2:1 NO, JUMP COPY =ER019,A 'NOP/INITZ. INT. INSTEAD OF RX' COPY =B:CBTX,X GET TX CTRL. BLK. ADD. JMP TIN2:2 DISPLAY ERROR TIN2:1 CSK A,B:RXFL CHNL. B RX INT? NOP  JMP TIN2:3 NO, JUMP COPY =ER030,A 'NOP/INITZ. INT. INSTEAD OR TX' COPY =B:CBRX,X GET RX CTRL. BLK. ADD. TIN2:2 COPY X,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST ERROR DISPLAY ERROR JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR JMP TIN2:4 CONT. TIN2:3 COPY =ER029,A 'NOP/INTIZ. INT. INSTEAD OF RX OR TX' JST ERROR DISPLAY ERROR * TIN2:4 COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY A,CB1 SET TX CTRL. BLK. ADD. FOR 'ERROR' COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY A,CB2 SET RX CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =-1,A SET A TO -1 CSK A,A:TXFL CHNL. A TX INT? NOP JMP TIN2:5 NO, RX INT? COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR COPY =-1,A SET A TO -1 TIN2:5 CSK A,A:RXFL CHNL. A RX INT? NOP JMP TRR:03 NO, EXIT COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR JMP TRR:03 EXIT * LPOOL TITL TEST UTILITIES (SEND:B) ********************  ********** * * SEND:B - THIS SUBROUTINE WILL SEND 2 CTRL. BLK. ADDS. * CONTAINED IN REGS. A AND X TO THE SCC. THE *  INT.TIMEOUT MUST HAVE BEEN SET PRIOR TO * ENTERING THIS ROUTINE. * * THE FOLLOWING IS REQUIRED UPON ENTRY: * * A REG. - CHNL. A CTRL. BLK. ADD. * X REG. - CHNL. B CTRL. BLK. ADD. * * CALLING SEQUENCE: *  JST SEND:B * JMP ? INT. TIMED OUT * ****************************** * SEND:B ENT SEND CTRL. BLKS. JST ENSCC ENABLE SCC INTS. JST OTA SEND CHNL. A CTRL. BLK. ADD. JST SENBSY STILL BUSY? JMP SND:B1 NO, SEND CHNL. B CTRL. BLK. JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:A,X GET CHNL. A TBI ADD. JMP SND:B4 DISPLAY ERROR * SND:B1 JST OTX SEND CHNL. B CTRL. BLK. JST SENBSY STILL BUSY? JMP SND:B2 NO, JUMP JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPRIED JMP SND:B3 DISPLAY ERROR * SND:B2 JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =ER004,A 'SCC INT. TIMED OUT' SND:B3 COPY X,CB1 SET CTRL. BLK. FOR 'ERROR' COPY =TBI:B,X GET CHNL. B TBI ADD. JMP $+2 DISPLAY ERROR * SND:B4 COPY =ER017,A 'BUSY BIT STILL SET' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST SEL RESET THE SCC JST ERROR DISPLAY ERROR JMP *SEND:B EXIT * LPOOL TITL TEST UTILITIES (CLRFGS) ******************************* * * CLRFGS - CLEAR AND SET INT. AND STATUS FLAGS (TEST C) * * THIS SUBROUTINE WILL CLEAR THE ERROR * STATUS/INT. FLAGS. * * ALSO THIS SUBROUTINE WILL SET THE INT. COUNT * FLAGS. * * CALLING SEQUENCE: * JST CLRFGS * ****************************** * CLRFGS ENT CLEAR STATUS/INT. FLAGS COPY =-2,A SET INT. COUNT TO 2 COPY A,A:INFL SET CHNL. A NOP/INITZ. INT. COUNT COPY A,A:TXFL SET CHNL. A TX INT. COUNT COPY A,A:RXFL SET CHNL. A RX INT. COUNT COPY A,B:INFL SET CHNL. B NOP/INITZ. INT. COUNT COPY A,B:TXFL SET CHNL. B TX INT. COUNT COPY A,B:RXFL SET CHNL. B RX INT. COUNT JMP *CLRFGS EXIT * LPOOL TITL TEST UTILITIES (CLRTBI) ****************************** * * CLRTBI - CLEAR TBI * * THIS SUBROUTINE WILL CLEAR THE TBI OF * STATUS AND BYTE COUNTS. * * ALSO THIS SUBROUTINE WILL RESET THE * INT. FLAGS AND STATUS ERROR FLAGS. * *  ENTER WITH THE TBI ADD. IN THE X * REG. * * CALLING SEQUENCE: * COPY =TBI ADD.,X * JST CLRTBI * ****************************** * CLRTBI ENT CLEAR TBI COPY =0,A SET A TO ZERO COPY A,TB:RXS(X) CLEAR RX STATUS COPY A,TB:RXB(X) CLEAR RX BYTE COUNT COPY A,TB:TXS(X) CLEAR TX STATUS COPY A,TB:TXB(X) CLEAR TX BYTE COUNT COPY A,TB:INS(X) CLEAR NOP/INITZ. STATUS COPY A,TB:INS+1(X) CLEAR NOP/INITZ. RESERVED WORD * COPY A,RX:SE CLEAR RX STATUS ERROR FLAG COPY A,TX:SE CLEAR TX STATUS ERROR FLAG COPY A,IN:SE CLEAR NOP/INITZ. STATUS ERROR FLAG COPY A,CB2 CLEAR RX CTRL. BLK. ADD. FOR 'ERROR' ROUTINE * COPY =-2,A SET INT. COUNT TO 2 COPY A,RX:FLG SET RX INT. FLAG COPY A,TX:FLG CLEAR TX INT. FLAG COPY A,IN:FLG CLEAR NOP/INITZ. INT. FLAG * COPY X,TB:AD SET TBI ADD. FOR 'ERROR' ROUTINE * JMP *CLRTBI EXIT * LPOOL TITL TEST UTILITIES (BUFFCM) ****************************** * * BUFFCM - COMPARE BUFS. * * THIS ROUTINE WILL COMPARE THE OUTPUT * BUF. (TX) AGAINS  T THE INPUT BUF. (RX). * IF A MISCOMPARE OCCURS, A DATA MISCOMPARE * ERROR WILL BE REPORTED. * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS * MUST HAVE BEEN SET PRIOR TO ENTERING THIS * ROUTINE: * *  RX:CB - RX CTRL. BLK. ADD. * TX:CB - TX CTRL. BLK. ADD. * TB:AD - TBI ADD. * * CALLING SEQUENCE: *  JST BUFFCM * JMP ? DATA MISCOMPARE R * JMP ? GOOD DATA R+1 * ****************************** * BUFFCM ENT BUF. COMPARE COPY X,BCTMP1 SAVE THE X REG. COPY RX:CB,X GET RX CTRL. BLK. ADD. COPY BT:CT1(X),A GET RX BYTE COUNT COPY A,BUFLEN STORE LENGTH FOR POSSIBLE 'DUMP' NEG A MAKE NEGATIVE COPY A,BCTMP2 STORE COUNT COPY X,CB2 STORE CTRL. BLK. ADD. FOR 'ERROR' COPY ME:AD1(X),X GET BUF. ADD. COPY X,BUFADD STORE ADD. FOR POSSIBLE 'DUMP' SHIFT X,LO,1 MAKE INTO A BYTE ADD. COPY X,BCTMP3 STORE ADD. FOR COMPARING COPY TX:CB,X GET TX CTRL. BLK. ADD. COPY X,CB1 STORE FOR 'ERROR' ROUTINE COPY ME:AD1(X),X GET BUF. ADD. SHIFT X,LO,1 MAKE INTO A BYTE ADD. BUFFC1 SBIT BY:,S SET BYTE MODE COPYB *BCTMP3,A GET RX BUF. BYTE CSKB A,0(X) COMPARE TO TX BUF. BYTE JMP BUFFC5 ERROR JMP BUFFC5 ERROR RBIT BY:,S SET WORD MODE IMS BCTMP3 INC. RX BUF. ADD.  ADD =1,X INC. TX BUF. ADD. IMS BCTMP2 INC. WORD COUNT JMP BUFFC1 NOT DONE YET * COPY RX:CB,X GET RX CTRL. BLK. ADD. COPY BT:CT2(X),A GET RX BYTE COUNT (DATA CHAIN) JEQ A,BUFFC3 IF ZERO, NO (DATA CHAIN) COPY A,BUFLEN STORE LENGTH FOR POSSIBLE 'DUMP'  NEG A MAKE NEGATIVE COPY A,BCTMP2 STORE COUNT COPY ME:AD2(X),X GET BUF. ADD. (DATA CHAIN) COPY X,BUFADD STORE ADD. FOR POSSIBLE 'DUMP' SHIFT X,LO,1 MAKE INTO A BYTE ADD. COPY X,BCTMP3 STORE ADD. FOR COMPARING COPY TX:CB,X GET TX CTRL. BLK. ADD. COPY ME:AD2(X),X GET TX BUF. ADD. (DATA CHAIN) SHIFT X,LO,1 MAKE INTO A BYTE ADD. BUFFC2 SBIT BY:,S SET BYTE MODE COPYB *BCTMP3,A GET RX BUF. BYTE CSKB A,0(X) COMPARE TO TX BUF. BYTE JMP BUFFC5 ERROR JMP BUFFC5 ERROR RBIT BY:,S SET WORD MODE IMS BCTMP3 INC. RX BUF. ADD. ADD =1,X INC. TX BUF. ADD. IMS BCTMP2 INC. WORD COUNT JMP BUFFC2 NOT DONE YET * BUFFC3 COPY TX:CB,X GET TX CTRL. BLK. ADD. COPY BT:CT1(X),A GET PRIMARY BUF. SIZE ADD BT:CT2(X),A ADD DATA CHAIN BUF. SIZE COPY TB:AD,X GET TBI ADD. CSK A,TB:TXB(X) COMPARE TO BYTES XFRD NOP JMP $+2 BAD COMPARISON JMP $+3 GOOD COMPARISON COPY =ER016,A 'BUF. SIZES DON'T EQUAL TBI BYTES XFRD' JMP BUFFC4 EXIT/DISPLAY ERROR * COPY RX:CB,X GET RX CTRL. BLK. ADD. COPY BT:CT1(X),A GET PRIMARY BUF. SIZE  ADD BT:CT2(X),A ADD DATA CHAIN BUF. SIZE COPY TB:AD,X GET TBI ADD. CSK A,TB:RXB(X) COMPARE TO BYTES RCVD NOP JMP $+2 BAD COMPARISON JMP $+3 GOOD COMPARISON COPY =ER034,A 'BUF. SIZES DON'T EQUAL TBI BYTES RCVD' JMP BUFFC4 EXIT/DISPLAY ERROR * IMS BUFFCM GOOD RETURN BUFFC4 COPY BCTMP1,X RESTORE X REG. JMP *BUFFCM EXIT * BUFFC5 RBIT BY:,S SET WORD MODE COPY A,ACT STORE ACTUAL VALUE SBIT BY:,S SET BYTE MODE COPYB 0(X),A GET EXPECTED VALUE RBIT BY:,S SET WORD MODE COPY A,EXP STORE EXPECTED VALUE SHIFT X,RO,1 CONVERT ADD. TO WORD ADD. COPY X,TXBUF SAVE FOR 'ERROR' COPY BCTMP3,A GET RX ADD. SHIFT A,RO,1 CONVERT ADD. TO WORD ADD. COPY A,RXBUF SAVE FOR 'ERROR' COPY =ER040,A 'DATA MISCOMPARE' JMP BUFFC4 EXIT * BCTMP1 RES 1,0 SAVED X REG. BCTMP2 R  ES 1,0 WORD COUNT (BUF. LENGTH) BCTMP3 RES 1,0 RX BUF. ADD. RX:CB RES 1,0 RX CTRL. BLK. ADD. TX:CB RES 1,0 TX CTRL. BLK. ADD. *  LPOOL TITL TEST UTILITIES (STATUS) ****************************** * * STATUS - CHECK RETURNED STATUS * * THIS SUBROUTINE WILL CHECK FOR THE * FOLLOWING ERROR BITS IN THE RETURNED * STATUS: * * CRC ERROR BIT 7 * RX OVERRUN BIT 6 * ABORT BIT 5 * TX UNDERRUN BIT 4 * DMA ERROR BIT 3 * INTERFACE ERROR BIT 2 * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS * MUST BE SET UP PRIOR TO ENTERING THIS * SUBROUTINE: * * CB:AD - CTRL. BLK. ADD. * TB:AD - TBI ADD. * * CALLING SEQUENCE: * JST STATUS * JMP ? BAD STATUS R * JMP ? GOOD STATUS R+1 * ****************************** * STATUS ENT STATUS CHECK COPY CB:AD,X GET CTRL. BLK. ADD. COPY CH:OPC(X),A GET CHNL./OPCODE WORD AND =OPC:MK,A MASK FOR OPCODE ONLY COPY TB:AD,X GET TBI ADD. CLSN A,=OPC:RX IS IT A RECIEVE FUNCTION? JMP STAT20 YES, JUMP CLSN A,=OPC:TX IS IT A TX FUNCTION? JMP STAT10 YES, JUMP ADD =4,X INC. TBI STATUS ADD. STAT10 ADD =4,X INC. TBI STATUS ADD. STAT20 COPY 0(X),A GET STATUS WORD JEQ A,STAT30 IF ZERO, EXIT * COPY =ER050,X 'OPERATION NOT COMPLETED' TBIT OPCO:,A IS 'OPERATION COMPLETE' SET? JF OV,STAT40 NO, JUMP * COPY =ER051,X 'INTERFACE ERROR' TBIT IFER:,A IS IT SET? JT OV,STAT40 YES, JUMP * COPY =ER052,X 'DMA ERROR' TBIT DMAE:,A IS IT SET? JT OV,STAT40 YES, JUMP * COPY =ER053,X 'TX UNDERRUN' TBIT TXUR:,A IS IT SET? JT OV,STAT40 YES, JUMP * COPY =ER054,X 'ABORT' TBIT ABRT:,A IS IT SET? JT OV,STAT40 YES, JUMP * COPY =ER055,X 'RX OVERRUN' TBIT RXOV:,A IS IT SET? JT OV,STAT40 YES, JUMP * COPY =ER056,X 'CRC ERROR' TBIT CRCE:,A IS IT SET? JT OV,STAT40 YES, JUMP * STAT30 IMS STATUS SET GOOD RETURN ADD. STAT40 COPY X,A PUT ERROR CODE INTO A REG. JMP *STATUS RETURN * CB:AD WORD A:CBIN CTRL. BLK. ADD. TB:AD WORD TBI:A TBI ADD. * LPOOL TITL TEST UTILITIES (CBSET) ****************************** * * CBSET - SET CTRL. BLK. * * THIS SUBROUTINE WILL SET UP A CTRL. * BLK. ACCORDING TO CHNL., ADD. SELECT * AND DTR/TR AND RTS/RS BIT SETTING. * * ENTER WITH CTRL. BLK. ADD. IN X REG. * AND OP CODE IN A REGSITER. * * CALLING SEQUENCE: *  COPY =CB ADD.,X * COPY =OPCODE,A * JST CBSET * ****************************** * CBSET ENT SET CTRL. BLK. COPY A,CBTMP SAVE OP CODE COPY =4,A SET CLEAR COUNT FOR 5 WORDS JST CLEAR CLEAR CTRL. BLK. COPY CHAN:,A GET CHNL. UNDER TEST SHIFT A,LO,CHA: SHIFT INTO POSITION OR CBTMP,A 'OR' IN OP CODE OR BITS,A 'OR' IN DTR/TR, RTS/RS AND SEC. ADD. BITS COPY A,CH:OPC(X) STORE IN CTRL. BLK. JMP *CBSET EXIT * CBTMP RES 1,0 SAVED OPCODE * LPOOL TITL TEST UTILITIES (CLEAR) ****************************** * * CLEAR - CLEARS OUT, STORES ZEROS IN, THE * CTRL. BLK./BUF. * * CALLING SEQUENCE: * * COPY =BUF. ADD.,X * COPY =BUF. SIZE,A * JST CLEAR * * ENTER WITH STARTING ADD. IN THE * X-REG. (AND SIZE IN A-REG.) * ******************************* * CLEAR ENT CLEAR BLK./BUF. COPY X,CLR1 SAVE X REG. COPY X,CLR2 SAVE TO ADD  . IMS CLR2 INC. ADD. NEG A SET A TO NEGATIVE COPY A,CLRTMP SAVE A REG. COPY =0,A SET A TO ZERO COPY A,0(X) RESET FIRST WORD COPY CLRTMP,A GET A REGSITER JST MOVE CLEAR IT OUT CLR1 WORD 0 FROM CLR2 WORD 0 TO JMP *CLEAR * CLRTMP RES 1,0 SAVED A REG. * LPOOL TITL TEST UTILITIES (ERROR) ****************************** * * ERROR - DISPLAY ERROR REPORT * * THIS SUBROUTINE WILL DISPLAY AN * ERROR REPORT IN THE FOLLOWING * FORMAT ACCORDING TO SENSE SWITCH * AND CTRL. WORD SETTING: * * ER 000 ER ADD :XXXX CHNL Y PASS 000 TEST Y * CHNL/OPC :XXXX (FUNCTION) * CTRL BLK ADD :XXXX TBI ADD :XXXX * STATUS :XXXX ( BBBB BBBB BBBB BBBB ) EXP ( BBBB BBBB BBBB BBBB ) * BUF ADD :XXXX LEN :XXXX BYTS XFRD :XXXX  CHNL ADD :XX * DATA CHAIN BUF ADD :XXXX LEN :XXXX * * THE FOLLOWING PARAMETERS/MEMORY LOCATION MUST * BE SET UP PRIOR TO ENTERING THIS SUBROUTINE: * * CB1 - PRIMARY CTRL. BLK. ADD. - NOP,TX,INITZ * CB2 - SECONDARY CTRL. BLK. ADD. - RX * TB:AD - TBI ADD. * EXP - EXPECTED DATA - DATA MISCOMPARE * ACT - ACTUAL DATA - DATA MISCOMPARE * RXBUF - RX BUF. ADD. - DATA MISCOMPARE * TXBUF - TX BUF. ADD. - DATA MISCOMPARE * *  ENTER WITH ERROR CODE IN THE A REG. * * CALLING SEQUENCE: * COPY =ERROR CODE,A * JST ERROR * ****************************** * ERROR ENT ERROR DISPLAY RBIT GI:,S DISABLE ALL INTERRUPTS!!!!!! COPY X,ERSVEX SAVE THE X REG. COPY A,ERCDE SAVE THE ERROR CODE * COPY ETLY1,A GET ERROR COUNT (ONE PASS) CSK A,=10000 IS IT GREATER THAN 10000 IMS ETLY1 NO, INC. ERROR COUNT NOP COPY ETLY2,A GET ERROR COUNT (TOTAL) CSK A,=10000 IS IT GREATER THAN 10000 IMS ETLY2 NO, INC. ERROR COUNT NOP * COPY ERCDE,A GET ERROR CODE SHIFT A,LO,8 SHIFT INTO CDR DISPLAY POSITION SBIT 15,A SET HIGH ORDER BIT COPY A,ERTMP1 SAVE IT IN CONSL;CDR,A GET CDR DISPLAY AND =:FF,A MASK FOR TEST ONLY OR ERTMP1,A 'OR' IN CDR ERROR DISPLAY SELP A,CONSL;CDR SEND TO CDR JT SS,ERRO20 IF SENSE SWITCH SET, JUMP COPY CNTWD,A GET CTRL. WORD TBIT ERR,A ERROR REPORT? JT OV,ERRO20 NO, JUMP * JST MSGA OUTPUT ERROR MESSAGE WORD EMSG01 'ER ' COPY ERCDE,A GET ERROR CODE JST ODEC DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG02 'ER ADD ' COPY ERROR,A GET ERROR ADD. JST OHEX DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG03 'CHNL ' COPY CB1,X GET CTRL. BLK. ADD. COPY CH:OPC(X),A GET CHNL/OPC WORD SHIFT A,RO,CHA: SHIFT CHNL. SELECT BIT AND =1,A MASK FOR CHNL. ONLY ADD ='A',A ADD IN ASCII OFFSET JST OTTY DISPLAY CHNL. JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD PASSMG+1 'PASS ' COPY PASSN,A GET PASS NUMBER JST ODEC DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD TSTNUM+1 'TEST ' COPY ERCDE,A GET ERROR CODE CLSN A,=ER003 IS IT 'MICRODIAG. FAILED'? JMP ERRO20 YES, EXIT ROUTINE CLSN A,=ER041 IS IT 'BUSY FLAG DIDN'T SET'? JMP ERRO20 YES, EXIT ROUTINE CLSN A,=ER046 IS IT 'BAD ID'? JMP ERRO20 YES, EXIT ROUTINE * COPY CB1,X GET PRIMARY CTRL. BLK. ADD. COPY CH:OPC(X),A GET CHNL/OPCD WORD AND =OPC:MK,A MASK FOR TEST ONLY CLSN A,=OPC:TX IS IT TX? JMP ERRO40 YES, JUMP * ERRO10 JST ERR10 'CHNL/OPC' AND '(FUNCTION)' JST CRLF D O IT COPY CB1,X GET CTRL. BLK. ADD. JST ERR20 'CTRL BLK ADD ' AND ' TBI ADD ' JST CRLF DO IT COPY CB1,X GET CTRL. BLK. ADD.  JST ERR30 'STATUS ' AND '(BBBB BBBB BBBB BBBB)' COPY CB1,X GET CTRL. BLK. ADD. COPY CH:OPC(X),A GET CHNL/OPC WORD AND =OPC:MK,A MASK FOR OP CODE ONLY CLSN A,=OPC:TX IS IT TX? JMP ERRO30 YES, JUMP CLSN A,=OPC:RX IS IT RX? JMP ERRO30 YES, JUMP * ERRO20 COPY =0,A RESET A-REG. COPY A,IN:SE RESET INZ. ERROR FLAG COPY A,TX:SE RESET TX ERROR FLAG COPY A,RX:SE RESET RX ERROR FLAG COPY MDEFLG,A GET MODE FLAG JNE A,ERRO21 IF DEMAND, JUMP COPY NUMB,A GET NUMBER OF BOARDS UNDER TEST CLSN A,=1 IS IT JUST 1 BOARD? JMP ERRO22 YES, JUMP ERRO21 COPY =1,A SET TIME OUT JST TIMEST FOR 1 SECOND JST SEL RESET THE BOARD UNDER TEST JST SENBSY BUSY? JMP $+3 NO, CONTINUE JST DELAY DO DELAY JMP $-3 SENSE BUSY JST MICLED NO, SET MICRODIAG. LED SBIT GI:,S ENABLE ALL INTERRUPTS JMP TCTL23 GO TO NEXT BOARD ERRO22 JST CRLF DO IT COPY CNTWD,A GET CTRL. WORD TBIT HLT,A HALT ON ERROR? JF OV,$+2 NO, JUMP HLT YES, WAIT HERE SBIT GI:,S ENABLE ALL INTERRUPTS COPY ERSVEX,X RESTORE THE X REG. JMP *ERROR EXIT SUBROUTINE * ERRO30 JST CRLF DO IT COPY CB1,X GET CTRL. BLK. ADD. JST ERR40 'BUF ADD ', 'LEN ', 'BYTS XFRD ', AND 'CHNL ADD :' JST CRLF DO IT COPY CB1,X GET CTRL. BLK. ADD. COPY ME:AD2(X),A DATA CHAINING? JEQ A,ERRO20 NO, EXIT JST ERR50 'DATA CHAIN BUF ADD ' AND 'LEN ' JMP ERRO20 EXIT * LPOOL TITL ****************************** * * THIS SECTION OF 'ERROR' WILL DISPLAY AN ERROR *  REPORT IN THE FOLLOWING FORMAT: * * TX--CHNL/OPC :XXXX (TRANSMIT) * RX--CHNL/OPC :XXXX (RECEIVE) * TX--CTRL BLK ADD :XXXX TBI ADD :XXXX * RX--CTRL BLK ADD :XXXX TBI ADD :XXXX * TX--STATUS :XXXX ( BBBB BBBB BBBB BBBB ) EXP ( BBBB BBBB BBBB BBBB ) * RX--STATUS :XXXX ( BBBB BBBB BBBB BBBB ) EXP ( BBBB BBBB BBBB BBBB ) * TX--BUF ADD :XXXX LEN :XXXX BYTS XFRD :XXXX CHNL ADD :XX * RX--BUF ADD :XXXX LEN :XXXX BYTS RCVD :XXXX CHNL ADD :XX * TX--DATA CHAIN BUF ADD :XXXX LEN :XXXX * RX--DATA CHAIN BUF ADD :XXXX LEN :XXXX * EXP :XX BUF ADD :XXXX * ACT :XX BUF ADD :XXXX * ****************************** * ERRO40 COPY CB2,A GET SECONDARY CTRL. BLK. ADD. (RX) JNE A,$+2 IF NOT ZERO, CONTINUE JMP ERRO10 ELSE DISPLAY ONLY TX  JST MSGA OUTPUT ERROR MESSAGE WORD EMSG13+1 'TX--' COPY CB1,X GET CTRL. BLK. ADD. JST ERR10 'CHNL/OPC ' AND '(FUNCTION)' JST MSGA OUTPUT ERROR MESSAGE WORD EMSG14 'RX--' COPY CB2,X GET CTRL. BLK. ADD. JST ERR10 'CHNL/OPC ' AND '(FUNCTION)' * JST MSGA OUTPUT ERROR MESSAGE WORD EMSG13 'TX--' COPY CB1,X GET CTRL. BLK. ADD. JST ERR20 'CTRL BLK ADD ' AND 'TBI ADD ' JST MSGA OUTPUT ERROR MESSAGE WORD EMSG14 'RX--' COPY CB2,X GET CTRL. BLK. ADD. JST ERR20 'CTRL BLK ADD' AND 'TBI ADD' * JST MSGA OUTPUT ERROR MESSAGE WORD EMSG13 'TX--' COPY CB1,X GET CTRL. BLK. ADD. JST ERR30 'STATUS ' AND '(BBBB BBBB BBBB BBBB)' JST MSGA OUTPUT ERROR MESSAGE WORD EMSG14 'RX--' COPY CB2,X GET CTRL. BLK. ADD. JST ERR30 'STATUS ' AND '(BBBB BBBB BBBB BBBB)' * JST MSGA OUTPUT ERROR MESSAGE WORD EMSG13 'TX--' COPY CB1,X GET CTRL. BLK. ADD. JST ERR40 'BUF ADD ', 'LEN ', 'BYTS XFRD ', AND 'CHNL ADD :' JST MSGA OUTPUT ERROR MESSAGE WORD EMSG14 'RX--' COPY CB2,X GET CTRL. BLK. ADD. JST ERR40 'BUF ADD ', 'LEN ',  'BYTS RCVD ', AND 'CHNL ADD :' * COPY CB1,X GET CTRL. BLK. ADD. - TX COPY ME:AD2(X),A DATA CHAINING? JEQ A,ERRO41 NO, JUMP JST MSGA OUTPUT ERROR MESSAGE WORD EMSG13 'TX--' JST ERR50 'DATA CHAIN BUF ADD ' AND 'LEN ' ERRO41 COPY CB2,X GET CTRL. BLK. ADD. - RX COPY ME:AD2(X),A DATA CHAINING? JEQ A,ERRO42 NO, JUMP JST MSGA OUTPUT ERROR MESSAGE WORD EMSG14 'RX--' JST ERR50 'DATA CHAIN BUF ADD ' AND 'LEN ' * ERRO42 COPY ERCDE,A GET ERROR CODE CLSN A,=ER040 IS IT A 'DATA MISCOMPARE'? JMP $+2 YES, CONT. JMP ERRO20 NO, EXIT THIS MESS JST MSGA OUTPUT ERROR MESSAGE WORD EMSG15 'EXP :' COPY =':',A GET ASCII ':' JST OTTY DISPLAY IT COPY EXP,A GET EXPECTED DATA JST ERR70 DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG08 'BUF ADD ' COPY TXBUF,A GET TX ADD. JST OHEX DISPLAY IT JST MSGA OUTPUT ERROR MESSAGE WORD EMSG16 'ACT :' COPY ACT,A GET ACTUAL DATA JST ERR70 DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG08 'BUFF ADD ' COPY RXBUF,A GET RX ADD. JST OHEX DISPLAY IT * JST CRLF DO IT COPY CNTWD,A GET CTRL. WORD TBIT DMP,A DUMP RX BUF.? JF OV,$+2 NO, CONT. JST ERR60 DUMP RX BUF. JMP ERRO20 EXIT THIS MESS * ERSVEX RES 1,0 SAVED X REG. ERCDE RES 1,0 SAVED ERROR CODE ERTMP1 RES 1,0 TEMP. STORAGE CB1 WORD A:CBIN PRIMARY CTRL. BLK. ADD. (TX,NOP,INZ) CB2 RES 1,0 SECONDARY CTRL. BLK. ADD. (RX) ACT RES 1,0 ACTUAL DATA FOR DATA MISCOMPARE EXP RES 1,0 EXPECTED DATA FOR DATA MISCOMPARE TXBUF RES 1,0 TX BUF. ERROR ADD. RXBUF RES 1,0 RX BUF. ERROR ADD. TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR10') ****************************** * * ERR10 - DISPLAY THE FOLLOWING ERROR * REPORT MESSAGE: * * CHNL/OPC :XXXX (FUNCTION) * * ENTER WITH THE CTRL. BLK. ADD. IN * THE X REG. * * CALLING SEQUENCE: * COPY =CTRL. BLK. ADD.,X * JST ERR10 * ****************************** * ERR10 ENT DISPLAY ERROR MESSAGE JST MSGA OUTPUT ERROR MESSAGE WORD EMSG04 'CHNL/OPC ' COPY CH:OPC(X),A GET CHNL/OPC WORD FROM CB JST OHEX DISPLAY IT JST SPACE3 SPACE OVER COPY CH:OPC(X),A GET CHNL/OPC WORD FROM CB AND =OPC:MK,A MASK FOR OP CODE ONLY ADD =OPMSG,A ADD IN OP CODE MESSAGE TABLE ADD. COPY A,X PUT IN X COPY 0(X),A GET OP CODE MESSAGE ADD. COPY A,$+2 STORE IT FOR DISPLAYING JST MSGA OUTPUT ERROR MESSAGE WORD 0 '(FUNCTION)' JMP *ERR10 EXIT * LPOOL TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR20') ****************************** * * ERR20 - THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING ERROR REPORT MESSAGE: * * CTRL BLK ADD :XXXX TBI ADD :XXXX * * ENTER WITH THE CTRL. BLK. ADD. * IN THE X REG. * * CALLING SEQUENCE: * COPY =CTRL. BLK. ADD.,X * JST ERR20 * ****************************** * ERR20 ENT DISPLAY ERROR MESSAGE JST MSGA OUTPUT ERROR MESSAGE WORD EMSG05 'CTRL BLK ADD ' COPY X,A PUT CTRL. BLK. ADD. INTO X JST OHEX DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG06 'TBI ADD ' COPY TB:AD,A GET TBI ADD. JST OHEX DISPLAY IT JMP *ERR20 EXIT * LPOOL TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR30') ****************************** * * ERR30 - THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING ERROR REPORT MESSAGE: * * STATUS :XXXX ( BBBB BBBB BBBB BBBB ) EXP ( BBBB BBBB B BBB BBBB ) * * ENTER WITH THE CTRL. BLK. ADD. * IN THE X REG. * * CALLING SEQUENCE: * COPY =CTRL. BLK. ADD.,X * JST ERR30 * ****************************** * ERR30 ENT DISPLAY ERROR MESSAGE COPY CH:OPC(X),A GET OP CODE  AND =OPC:MK,A MASK IT COPY =INEXP,X GET INZ. ADD. CLSN A,=OPC:RX RX? COPY =RXEXP,X YES, GET RX ADD. CLSN A,=OPC:TX TX? COPY =TXEXP,X YES, GET TX ADD. COPY 0(X),A GET EXPECTED STATUS COPY A,EXPSTA SAVE IT * COPY CH:OPC(X),A GET CHNL/OPC WORD AND =OPC:MK,A MASK FOR OP CODE ONLY COPY TB:AD,X GET TBI ADD. CLSN A,=OPC:RX IS IT RX? JMP ERR32 YES, JUMP CLSN A,=OPC:TX IS IT TX? JMP ERR31 YES, JUMP ADD =4,X SET TBI ADD. FOR NOP/INZ STATUS ERR31 ADD =4,X SET TBI ADD. FOR TX STATUS ERR32 COPY 0(X),A GET STATUS COPY A,ERCT1 STORE FOR BINARY DISPLAY * JST MSGA OUTPUT ERROR MESSAGE WORD EMSG07 'STATUS ' COPY ERCT1,A GET STATUS JST OHEX DISPLAY IT JST SPACE3 SPACE OVER COPY ERCT1,A GET STATUS AGAIN JST OBIN DISPLAY BINARY JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG15+1 'EXP ' COPY EXPSTA,A GET EXPECTED STATUS JST OBIN DISPLAY IT COPY =0,A RESET A-REG. COPY A,EXPSTA RESET EXPECTED STATUS * COPY TB:AD,X GET TBI ADDRES COPY RX:SE,A GET RX STATUS ERROR FLAG JEQ A,ERR33 IF RESET, JUMP COPY =0,A SET A TO ZERO COPY A,RX:SE DON'T DISPLAY AGAIN JST MSGA OUTPUT ERROR MESSAGE WORD EMSG14 'RX--' COPY TB:RXS(X),A GET RX STATUS JMP ERR32+1 DISPLAY IT ERR33 COPY TX:SE,A GET TX STATUS ERROR FLAG JEQ A,ERR34 IF RESET, JUMP COPY =0,A SET A TO ZERO COPY A,TX:SE DON'T DISPLAY AGAIN JST MSGA OUTPUT ERROR MESSAGE WORD EMSG13 'TX--' COPY TB:TXS(X),A GET TX STATUS JMP ERR32+1 DISPLAY IT ERR34 COPY IN:SE,A GET NOP/INITZ. STATUS ERROR FLAG JEQ A,ERR35 IF RESET, JUMP COPY =0,A SET A TO ZERO COPY A,IN:SE DON'T DISPLAY AGAIN JST MSGA OUTPUT ERROR MESSAGE WORD EMSG19 'IN--' COPY TB:INS(X),A GET NOP/INITZ. STATUS JMP ERR32+1 DISPLAY IT * ERR35 JMP *ERR30 EXIT * ERCT1 RES 1,0 SAVED STATUS EXPSTA RES 1,0 SAVED EXPECTED STATUS * RX:SE RES 1,0 RX STATUS ERROR FLAG TX:SE RES 1,0 TX STATUS ERROR FLAG IN:SE RES 1,0 NOP/INITZ. STATUS ERROR FLAG * INEXP RES 1,0 EXPECTED INZ/NOP STATUS TXEXP RES 1,0 EXPECTED TX STATUS RXEXP RES 1,0 EXPECTED RX STATUS * LPOOL TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR40') ****************************** * * ERR40 - THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING ERROR REPORT MESSAGE: * * BUF ADD :XXXX LEN :XXXX BYTS XFRD :XXXX CHNL ADD :XX * OR * BUF ADD :XXXX LEN :XXXX  BYTS RCVD :XXXX CHNL ADD :XX * * ENTER WITH THE CTRL. BLK. ADD. IN THE * X REG. * ****************************** * ERR40 ENT DISPLAY ERROR MESSAGE JST MSGA OUTPUT ERROR MESSAGE WORD EMSG08 'BUF ADD ' COPY ME:AD1(X),A GET BUF. ADD. JST OHEX DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG09 'LEN ' COPY BT:CT1(X),A GET BYTE COUNT JST OHEX DISPLAY IT JST SPACE3 SPACE OVER COPY CH:OPC(X),A GET CHNL/OPC WORD COPY X,ERTMP1 SAVE CTRL. BLK. ADD. AND =OPC:MK,A MASK FOR OPCODE COPY TB:AD,X GET TBI ADD. CLSN A,=OPC:RX IS IT A RX COM.? JMP ERR41 YES, JUMP JST MSGA OUTPUT ERROR MESSAGE WORD EMSG10 'BYTS XFRD ' COPY TB:TXB(X),A GET BYTES TRANSMITTED JMP ERR42 DISPLAY IT ERR41 JST MSGA OUTPUT ERROR MESSAGE W ORD EMSG11 'BYTS RCVD ' COPY TB:RXB(X),A GET BYTES RECEIVED ERR42 JST OHEX DISPLAY NUMB. OF BYTES JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG20 'CHNL ADD :' COPY ERTMP1,X GET CTRL. BLK. ADD. COPY ME:AD1(X),X GET BUF. ADD. COPY 0(X),A GET CHNL. ADD. SHIFT A,RO,8 SHIFT INTO PLACE JST ERR70 DISPLAY IT JMP *ERR40 EXIT TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR50') ****************************** * * ERR50 - THIS SUBROUTINE WILL DISPLAY THE * FOLLOWING ERROR REPORT MESSAGE: * * DATA CHAIN BUF ADD :XXXX LEN :XXXX * * ENTER WITH THE CTRL. BLK. ADD. * IN THE X REG. * * CALLING SEQUENCE: * COPY =CTRL. BLK. ADD.,X * JST ERR50 * ****************************** * ERR50 ENT DISPLAY ERROR MESSAGE JST MSGA OUTPUT ERROR MESSAGE WORD EMSG12 'DATA CHAIN BUF ADD ' COPY ME:AD2(X),A GET DATA CHAIN BUF. ADD. JST OHEX DISPLAY IT JST SPACE3 SPACE OVER JST MSGA OUTPUT ERROR MESSAGE WORD EMSG09 'LEN ' COPY BT:CT2(X),A GET BYTE COUNT JST OHEX DISPLAY IT JMP *ERR50 EXIT TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR60') ****************************** * * ERR60 - THIS SUBROUTINE WILL DISPLAY THE * RX INPUT BUF. IN THE FOLLOWING * FORMAT: * * RX BUFFER DUMP, AT :XXXX * :XXXX = XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX * :XXXX = XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX * :XXXX = XX XX XX XX XX... * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS MUST HAVE * BEEN SET UP PRIOR TO ENTERING THIS SUBROUTINE * * BUFADD - RX BUF. ADD. * BUFLEN - RX BUF. LENGTH IN BYTES * * CALLING SEQUENCE: * JST ERR60 * ****************************** * ERR60 ENT DISPLAY RX INPUT BUF. JST MSGA OUTPUT ERROR MESSAGE WORD EMSG17 'RX BUFFER DUMP, AT ' COPY BUFADD,A GET BUF. ADD. JST OHEX DISPLAY IT COPY BUFLEN,X GET THE BUF. LENGTH COPY =0,A SET A TO ZERO DIV =16,AX CONVERT IT TO NUMBER OF 16 BLKS. JEQ A,$+2 IF EVEN DIV., JUMP ADD =1,X MAKE IT EVEN NEG X MAKE IT A NEGATIVE NUMBER COPY X,ERTMP2 STORE COUNT COPY BUFADD,X GET THE BUF. ADD. ERR61 COPY =-8,A SET COUNT FOR 8 WORDS (16 BYTES) COPY A,ERTMP3 JST CRLF DO IT COPY X,A PUT ADD. IN A JST OHEX DISPLAY IT JST MSGA OUTPUT MESSAGE WORD EMSG18 ' = ' ERR62 COPY 0(X),A GET A WORD SHIFT A,RO,8 SHIFT HIGH INTO LOW JST ERR70 DISPLAY HIGH ORDER BYTE COPY 0(X),A GET WORD JST ERR70 DISPLAY LOW ORDER BYTE ADD =1,X INC. ADD. IMS ERTMP3 INC. BYTE COUNT JMP ERR62 IF NOT DONE, DISPLAY MORE BYTES IMS ERTMP2 INC. BLK. COUNT JMP ERR61 IF NOT DONE, DISPLAY MORE BLKS. JMP *ERR60 EXIT * BUFADD RES 1,0 RX INPUT BUF. ADD. BUFLEN RES 1,0 RX INPUT BUF. SIZE ERTMP2 RES 1,0 BLK. COUNT ERTMP3 RES 1,0 BYTE COUNT * LPOOL TITL TEST UTILITIES (ERROR - SUBROUTINE 'ERR70') ****************************** * * ERR70 - THIS SUBROUTINE WILL DISPLAY 1 * BYTE IN THE LOWER ORDER BYTE OF THE *  A REG. AND A ASCII SPACE. * * CALLING SEQUENCE: * COPY =BYTE,A * JST ERR70 * ******************************* * ERR70 ENT DISPLAY A BYTE AND =:FF,A MASK FOR LOWER BYTE ONLY COPY A,ERTMP1 SAVE THE BYTE SHIFT A,RO,4 GET HIGH ORDER DIGIT CSK A,=9 IS IT 9 OR LESS? JMP $+2 YES, JUMP ADD =7,A NO, ADD IN OFFSET ADD ='0',A ADD IN ASCII OFFSET JST OTTY DISPLAY I T COPY ERTMP1,A GET ORIGINAL BYTE AND =:F,A MASK FOR LOW ORDER DIGIT CSK A,=9 IS IT 9 OR LESS? JMP $+2 YES, JUMP ADD =7,A NO, ADD IN OFFSET ADD ='0',A ADD IN ASCII OFFSET JST OTTY DISPLAY IT COPY =SPACE:,A DISPLAY A SPACE JST OTTY DISPLAY IT JMP *ERR70 EXIT TITL TEST UTILITIES (ERROR - SUBROUTINE 'SPACE3') ****************************** * * SPACE3 - THIS SUBROUTINE WILL PRINT * 3 ASCII SPACES. * * CALLING SEQUENCE: * JST SPACE3 * ****************************** * SPACE3 ENT PRINT 3 SPACES COPY =SPACE:,A GET ASCII SPACE JST OTTY PRINT IT JST OTTY PRINT IT JST OTTY PRINT IT JMP *SPACE3 EXIT TITL TEST UTILITIES (TIMEST) ****************************** * * TIMEST - INITIALIZE THE TIMING CELLS FOR * 'DELAY' * *  ENTER WITH THE NUMBER OF SECONDS * FOR TIMING IN THE A REG. * * CALLING SEQUENCE: * * COPY =SECONDS,A * JST TIMEST * ****************************** * TIMEST ENT SET TIME COPY Q,TTMP SAVE Q REG. FMT Q GET MACHINE TYPE  TBIT 5,Q IS IT A 495? JT OV,M495 YES, JUMP TBIT 4,Q IS IT A 410S? JT OV,M404 YES, JUMP TBIT 6,Q IS IT A 404? JT OV,M404 YES, JUMP JMP M430 NO, THEN A 490 OR 430 M495 SHIFT A,LO,1 MULT. BY NUMBER OF SECONDS FOR 4-95 M430 SHIFT A,LO,1 MULT. BY NUMBER OF SECONDS FOR 4-30 M404 SHIFT A,LO,1 MULT. BY NUMBER OF SECONDS FOR 404 NEG A MAKE NEGATIVE COPY A,COUNT2 STORE TIME FOR OUTER LOOP COPY =0,A SET TIME FOR INNER LOOP COPY A,COUNT1 STORE TIME FOR INNER LOOP COPY TTMP,Q RESTORE Q REG. JMP *TIMEST EXIT TTMP RES 1,0 SAVE THE Q REG. TITL TEST UTILITIES (DELAY) ****************************** * * DELAY - INCS. TIME SET BY *  'TIMEST' * * CALLING SEQUENCE: * * JST DELAY * JMP ? TIME NOT EXPIRED R * JMP ? TIME EXPIRED R+1 * ****************************** * DELAY ENT INC. TIME IMS COUNT1 INC. INNER LOOP JMP *DELAY RETURN IMS COUNT2 INC. OUTER LOOP JMP *DELAY RETURN IMS DELAY INC. RETURN ADD. JMP *DELAY RETURN * COUNT1 RES 1,0 INNER LOOP TIME COUNT COUNT2 RES 1,0 OUTER LOOP TIME COUNT TITL TEST UTILITIES (SCC I/O INSTRUCTIONS) ****************************** * * ENSCC - ENABLE SCC INTS. * * SENBSY - SENSE CTRL.LER BUSY * * OTA - OUTPUT CTRL. BLK. FROM A REG. * * OTX - OUTPUT CTRL. BLK. FROM X REG. * * SEL - RESET/INITIATE MICRODIAG. * * MICLED - TURN ON MICRODIAG. LED * * SLOOPE - SCOUT LOOPBACK ENABLE * * CALLING SEQUENCE: * * ENSCC - JST ENSCC * * SENBSY - JST SENBSY * JMP ? NOT BUSY R *  JMP ? BUSY R+1 * * OTA - COPY =CTRL. BLK. ADD.,A * JST OTA * * OTX - COPY =CTRL. BLK. ADD.,X * JST OTX * * SEL - JST SEL * * MICLED - JST MICLED * * SLOOPE - JST SLOOPE * ****************************** * ENSCC ENT ENABLE SCC INTS. COPY A,IOTMP1 SAVE THE A REG. COPY =0,A SET A TO ZERO DA1 SELP A,STDDA%3;ENIN SEND TO SCC COPY IOTMP1,A RESTORE THE A REG. JMP *ENSCC EXIT * SENBSY ENT SENSE SCC BUSY DA2 SST STDDA%3;COBU JMP *SENBSY NOT BUSY IMS SENBSY IT IS BUSY JMP *SENBSY EXIT * OTA ENT OUTPUT A REG. DA3 SELP A,STDDA%3;LCBA SEND BLK. ADD. TO SCC SBIT GI:,S ENABLE INTS. JMP *OTA EXIT * OTX ENT OUTPUT X REG. DA4 SELP X,STDDA%3;LCBA SEND  BLK. ADD. TO SCC SBIT GI:,S ENABLE INTS. JMP *OTX EXIT * SEL ENT RESET SCC COPY A,IOTMP1 SAVE THE A REG. COPY =0,A SET A TO ZERO DA5 SELP A,STDDA%3;INTZ SEND TO SCC COPY IOTMP1,A RESTORE THE A REG. JMP *SEL EXIT * MICLED ENT TURN ON MICRO LED COPY A,IOTMP1 SAVE THE A REG. COPY =0,A SET A TO ZERO DA6 SELP A,STDDA%3;MICR SEND TO SCC COPY IOTMP1,A RESTORE THE A REG. JMP *MICLED EXIT * SLOOPE ENT SCOUT LOOPBACK ENABLE COPY A,IOTMP1 SAVE THE A REG. COPY =0,A RESET A REG. DA7 SELP A,STDDA%3;CBEN SEND TO SCC COPY IOTMP1,A RESTORE A REG. JMP *SLOOPE EXIT * IOTMP1 RES 1,0 SAVED A REG. TITL PROGRAM UTILITIES (INTCH) ****************************** * * INTCH - THIS SUBROUTINE WILL INPUT * THE TECH TEST PARAMETERS. * IT WILL CHECK FOR SPECIAL * CHARS. WHEN INPUTTING. * * CALLING SEQUENCE: * JST INTCH * JMP ? DEFAULT PARAMETER R *  JMP ? NORMAL RETURN R+1 * ****************************** * INTCH ENT INPUT TECH TEST PARAMETER COPY =0,A SET A TO ZERO COPY A,TEMP2 RESET CARRIAGE RETURN FLAG JST IHEX INPUT PARAMETER JEQ X,INTCH2 IF ZERO, SEE WHY INTCH1 IMS TEMP1 SET INPUT FLAG JST CHARCK CHECK FOR SPECIAL CHARS. JMP INTCH3 UP ARROW JMP QERY70 BACK ARROW JMP INTCH4 CARRIAGE RETURN JMP INTCH5 POUND SIGN JMP INTCH6 COMMA JMP QERY70 ANYTHING ELSE INTCH2 COPY HXTMP2,X GET INPUT COUNT JEQ X,INTCH1+1 IF ZERO, SOLE RESPONSE COPY =0,X SET X TO ZERO AGAIN JMP INTCH1 SET INPUT FLAG INTCH3 COPY TEMP1,A GET INPUT FLAG JEQ A,$+2 IF ZERO, GO BACK  JMP QERY70 OTHERWISE, CAN'T COPY MACH,A GET MACHINE FLAG JEQ A,$+2 IF NM4, JUMP JMP QERY30 GO BACK ONE JMP QERY20 GO BACK TWO INTCH4 COPY TEMP1,A GET INPUT FLAG JNE A,$+2 IF NOT ZERO, JUMP JMP TCTL10 OTHERWISE, EXECUTE FUNCTION IMS TEMP2 SET CARRIAGE RETURN FLAG JMP INTCH6 CHECK FOR RETURN ADD. INTCH5 COPY TEMP1,A GET INPUT FLAG JEQ A,$+2 IF SET, JUMP JMP QERY70 CAN'T DEFAULT JMP TCTL10 CAN DEFAULT INTCH6 COPY HXTMP2,A GET INPUT COUNT JEQ A,$+2 IF ZERO, DEFAULT RETURN ADD. IMS INTCH INC. RETURN ADD. COPY X,A PUT PARAMETER INTO A JMP *INTCH RETURN * LPOOL TITL PROGRAM UTILITIES (CLEANUP) ****************************** * * CLEANUP * * THIS SUBROUTINE DOES NECESSARRY CHORES * TO CLEAN UP THE MULTI-CHANNEL ONLY. * ****************************** * CLEANUP ENT $ COPY =0,X CHANNEL 0, TRANS/RECIEVE DISABLE COPY =MCSDA,Q XNX Q OUT X,1 COPY =MCNECHO,X DISABLE AUTO ECHO XNX Q SELP X,3 COPY LPFLG,X GET LP FLAG TO SEE IF BEING USED JNE X,$+2 JUMP IF LP IS BEING USED JMP *CLEANUP SBIT 1,Q MUST ADDRESS CHANNEL 1 (LINE PRINTER) COPY =0,X AND CLEAR TRANSMITTER IN CHANNEL 1 XNX Q OUT X,1 JMP *CLEANUP TITL PROGRAM UTILITIES (CRCHK) ****************************** * * CRCHK - THIS SUBROUTINE IS USED BY THE * TECH TEST QUERY TO CHECK FOR * A CARRIAGE RETURN UPON INPUT. * * CALLING SEQUENCE: * JST CRCHK * ****************************** * CRCHK ENT CARRIAGE RETURN CHECK COPY TEMP2,A GET CARRIAGE RETURN FLAG JEQ A,$+2 IF RESET, RETURN TO CALLER JMP TCTL10 ELSE, EXECUTE FUNCTION JMP *CRCHK RETURN TO CALLER TITL PROGRAM UTILITIES (DAGCHK) ****************************** * * DAGCHK - CHECK DIAG. FLAG * FOR TECH TEST (=1) OR * DIAG. TEST (=0). * * CALLING SEQUENCE: * JST DAGCHK *   JMP ? DIAG. R * JMP ? TECH R+1 * ****************************** * DAGCHK ENT DIAG. OR TECH. COPY DGFLG,A GET DIAG. FLAG JEQ A,$+2 IF ZERO RETURN TO NORMAL RETURN ADD. IMS DAGCHK INC. RETURN ADD. BY 1 JMP *DAGCHK EXIT * LPOOL TITL PROGRAM UTILITIES (MSGA) ****************************** * * MSGA - THIS SUBROUTINE WILL PRINT AN ASCII * MESSAGE, THE LAST CHAR. OF WHICH * MUST BE 0, TO CRT/TTY AND LP. * * THIS SUBROUTINE WILL BE BYPASSED IF THE *  SENSE SWITCH IS SET. * * CALLING SEQUENCE: * JST MSGA * WORD (MESSAGE ADD.) * ****************************** * MSGA ENT PRINT MESSAGE COPY X,MSTMP SAVE THE X REG. COPY *MSGA,X GET MESSAGE ADD. IMS MSGA INC. RETURN ADD. JT SS,MSGA2 IF SENSE SWITCH SET, BYPASS THIS ROUTINE SHIFT X,LO,1 CONVERT WORD ADD. TO A BYTE ADD. MSGA1 SBIT BY:,S SET BYTE MODE COPYB 0(X),A GET CHAR. FROM MESSAGE RBIT BY:,S SET WORD MODE JEQ A,MSGA2 IF END OF MESSAGE, EXIT LOOP JST OTTY PRINT CHAR. ADD =1,X INC. MESSAGE ADD. JMP MSGA1 LOOP BACK FOR MORE MSGA2 COPY MSTMP,X RESTORE THE X REG. JMP *MSGA EXIT * MSTMP RES 1,0 SAVED X REG. TITL PROGRAM UTITLITIES (IKB) ****************************** * * IKB - THIS SUBROUTINE WILL INPUT, INTO * THE LEAST SIGNIFICANT BYTE OF THE * A REG., AN ASCII CHAR. FROM * THE CRT KEYBOARD/TTY. * * CALLING SEQUENCE: * JST IKB * ****************************** * IKB ENT INPUT FROM CRT/TTY COPY X,IKBTMP SAVE X REG. COPY MCSFLG,Q ARE WE USING MULTI-CHANNEL JEQ Q,$+3 JUMP IF NOT JST MCSIN MUST BE MULTI-CHANNEL JMP MCSDIO COMMON CODE FOR MCS & SPI COPY =:8618,A GET CRT/TTY INPUT STARTUP COM. OUT A,DTTYDA%1;1 SEND TO CRT/TTY IN DTTYDA%1;1,A GET STATUS FROM CRT/TTY SHIFT A,RO,4 SHIFT 'DATA READY' BIT (3) INTO OV JF OV,$-2 IF 'DATA READY' BIT IS RESET, LOOP BACK IN DTTYDA%1,A INPUT ASCII CHAR. FROM CRT/TTY COPY =:100,Q GET CRT/TTY RESET COM. CODE OUT Q,DTTYDA%1;1 SEND TO CRT/TTY MCSDIO EQU $ AND =:7F,A MASK OFF POSSIBLE PARITY BIT COPY IKBTMP,X RESTORE X REG. JMP *IKB EXIT IKBTMP RES 1,0 SAVE Q REG. * TITL PROGRAM UTILITIES (MCSIN) ****************************** * * MCSIN MULTI-CHANNEL INPUT * * THIS SUBROUTINE IS USED TO GET INPUT FROM * THE KEYBOARD THROUGH THE MULTI-CHANNEL SERIAL BOARD. * * THE INPUT CHARACTER WILL BE IN THE A REG. * * CALLING SEQUENCE: * * JST MCSIN * ****************************** * MCSIN ENT NOW ENTERING THE WORLD OF MULTI-CHANNNEL ECHOWT EQU $ COPY =MCSDA,Q GET DEVICE ADDRESS OF THE MCS BOARD XNX Q IN 1,A TRANSMITTED BEFORE ENABLING ECHO TBIT 2,A IS TRANSMITTER EMPTY? JF OV,ECHOWT IF NOT, WAIT 'TILL IT IS. COPY =MCECHO,A NOW, SET ECHO TO RECIEVE XNX Q SELP A,3 BOARD CONTROL WORD WAIT2 EQU $ XNX Q IN 1,A GET CHANNEL 0 STATUS TBIT 7,A DEVICE READY? JF OV,WAIT2 IF NOT, KEEP WAITING... COPY =MC06,A DTR & RECIEVE ENABLE CONTROL WORD XNX Q OUT A,1 CHANNEL CONTROL WORD WAITR EQU $ XNX Q IN 1,A WAIT FOR RECIEVE READY TBIT 1,A JF OV,WAITR XNX Q IN 0,A GET ASCII CHARACTER JST CLEANUP CLEAN UP SCOUT MCS CHANNELS, ETC. JMP *MCSIN RETURN * MCECHO EQU :18 MC06 EQU :06 TITL PROGRAM UTILITIES (IDEC) ****************************** * * IDEC - THIS SUBROUTINE WILL INPUT, FROM * THE CRT/TTY, AN ASCII-DECIMAL NUMBER WHIC H * IT WILL CONVERT TO BINARY AND RETURN IT IN * THE X REG. * * THIS SUBROUTINE IS EXITED UPON INPUT OF THE * FIRST NON ASCII-DECIMAL CHAR., WHICH IT WILL * RETURN IN THE A REG. * * DURING THIS SUBROUTINE, A QUESTION MARK IS OUTPUT * IF THE INPUT VALUE BECOMES GREATER THAN 32768 AND * RESTARTS THE INPUT. * * CALLING SEQUENCE: * JST IDEC * ****************************** * IDEC ENT INPUT A DECIMAL NUMBER COPY =0,A SET A TO ZERO COPY A,IDCTM1 CLEAR VALUE CELL COPY A,IDCTM3 AND CHAR. COUNT IDEC1 JST IKB GET A CHAR. COPY A,IDCTM2 SAVE THE CHAR. SUB ='0',A SEE IF IT IS ASCII '0'-'9' JLT A,IDEC2 IF NOT, TERMINATE ROUTINE SUB =10,A CHECK NUMBER JGE A,IDEC2 IF GREATER, TERMINATE ROUTINE  IMS IDCTM3 INC. CHAR. COUNT COPY IDCTM1,A ADD TO VALUE SHIFT A,LO,2 TIMES 4 ADD IDCTM1,A TIMES 5 SHIFT A,LO,1 TIMES 10 ADD IDCTM2,A ADD NEW VALUE SUB ='0',A LESS ASCII OFFSET JLT A,IDEC3 MINUS IS BAD COPY A,IDCTM1 STORE NEW VALUE JMP IDEC1 GET NEXT INPUT IDEC2 COPY IDCTM2,A GET TERMINATOR IN THE A REG. COPY IDCTM1,X GET VALUE IN THE X REG. JMP *IDEC EXIT IDEC3 COPY ='?',A ERROR JST OTTY OUTPUT '?' JMP IDEC+1 START AGAIN * IDCTM1 RES 1,0 VALUE CELL IDCTM2 RES 1,0 ASCII CHAR. IDCTM3 RES 1,0 CHAR. COUNT * LPOOL TITL PROGRAM UTILITIES (OTTY) ****************************** * * OTTY - OUTPUT THE LEAST SIGNIFICANT BYTE OF * THE A REG. TO THE CRT/TTY AND LP IF 'LPFLG' * IS SET. IF THE LP TIMES OUT, AN * ERROR MESSAGE WILL BE DISPLAYED ON THE * CRT/TTY. TO RESTART PRESS ANY KEY ON THE * KEYBOARD. * * THIS SUBROUTINE WILL BE BYPASSED IF THE * SENSE SWITCH IS SET. * * * LPFLG: * 0 - CRT/TTY ONLY * 1 - CRT/TTY AND LP * -1 - LP ONLY * * CALLING SEQUENCE: * COPY =CHAR.,A * JST OTTY * * ENTER WITH THE ASCII CHAR. IN THE A REG. * ****************************** * OTTY ENT OUTPUT TO CRT/TTY RBIT GI:,S ENSURE INTS. ARE DISABLED JF SS,$+2 IF SENSE SWITCH IS SET, BYPASS OUTPUT JMP *OTTY EXIT COPY X,OTTMP1 SAVE X REG. COPY A,OTTMP2 SAVE A REG. COPY Q,OTTMP7 SAVE Q REG. COPY MCSFLG,Q IS IT MULTI-CHANNEL? JEQ Q,$+3 JUMP IF IT IS SPI BOARD JST MCSOUT OTHERWISE, IT MUST BE MCS JMP OTTY6 EXIT COPY MDEFLG,X GET MODE FLAG JNE X,OTTY0 IF DEMAND MODE, JUMP COPY =:100,X GET CRT RESET COM. OUT X,DTTYDA%1;1 RESET CRT/TTY PICO COPY =:8612,X CRT/TTY STARTUP COM. OUT X,DTTYDA%1;1 SEND COM. CODE TO CRT/TTY OUT A,DTTYDA%1 SEND CHAR. TO CRT/TTY IN DTTYDA%1;1,X INPUT STATUS FROM CRT/TTY SHIFT X,RO,5 SHIFT 'TX EMPTY' BIT (4) INTO OV JT OV,$-2 IF TRUE -TX EMPTY- LOOP BACK IN DTTYDA%1;1,X INPUT STATUS FROM CRT/TTY SHIFT X,RO,5 SHIFT 'TX EMPTY' BIT (4) INTO OV JF OV,$-2 IF FALSE -TX FULL- LOOP BACK COPY =:100,X GET CRT/TTY RESET COM. CODE OUT X,DTTYDA%1;1 SEND TO CRT/TTY OTTY0 COPY LPFLG,X GET LP FLAG JEQ X,OTTY6 IF NO LP, EXIT SUBROUTINE * OTTY1 COPY =4,A SET TIME OUT FOR 4 SECONDS JST TIMEST SET TIME COPY OTTMP2,A RESTORE A-REG. COPY MACH,Q GET MACHINE TYPE  JNE Q,OTTY7 IF SCOUT, JUMP OUT A,DLPDA%1 SEND IT TO DIO COPY =:8610,A LP START UP COMMAND OUT A,DLPDA%1;1 START IT OUT A,DLPDA%1;1 DITTO OTTY2 IN DLPDA%1;1,A INPUT STATUS SHIFT A,RO,1 SHIFT 'BUSY BIT' TO OV JF OV,OTTY5 IF NOT BUSY, EXIT JST DELAY D O DELAY JMP OTTY2 LOOP BACK IF NOT DONE OTTERR COPY OTTMP2,A GET ORIGINAL A-REG. CONTENTS COPY A,OTTMP6 SAVE IT COPY LPFLG,A GET LP FLAG COPY A,OTTMP5 SAVE IT COPY =0,A SET NEW LP FLAG COPY A,LPFLG STORE NEW LP FLAG COPY OTTMP1,A GET ORIGINAL X REG. VALUE COPY A,OTTMP3 SAVE IT COPY OTTY,A GET RETURN ADD. COPY A,OTTMP4 SAVE IT IN CONSL;CDR,A GET 'CDR' CONTENTS AND =:FF,A MASK FOR TEST NUMBER ONLY OR =ER4000,A 'OR' IN ERROR CODE SELP A,CONSL;CDR SEND TO 'CDR' COPY MDEFLG,A GET MODE FLAG JEQ A,$+3 IF DEFAULT MODE, JUMP HLT WAIT HERE JMP OTTY4+1 GO ON COPY =LPMSG*2,X GET ERROR MESSAGE ADD. 'LP TIMEOUT' OTTY3 SBIT BY:,S SET BYTE MODE COPYB 0(X),A GET CHAR. RBIT BY:,S SET WORD MODE JEQ A,OTTY4 IF END OF MESSAGE, EXIT LOOP JST OTTY DISPLAY ON CRT/TTY ADD =1,X INC. MESSAGE ADD. JMP OTTY3 LOOP FOR MORE OTTY4 JST IKB INPUT CHAR. FROM KEYBOARD COPY OTTMP4,A GET RETURN ADD. COPY A,OTTY RESTORE RETURN ADD. COPY OTTMP3,A GET ORIGINAL CONTENTS OF X REG. COPY A,OTTMP1 RESTORE TEMP. CONTENTS COPY OTTMP5,A GET LP FLAG COPY A,LPFLG SET FLAG COPY OTTMP6,A GET ORIGINAL A-REG. CONTENTS COPY A,OTTMP2 SAVE IT JMP OTTY1 TRY TO OUTPUT TO LP AGAIN OTTY5 COPY =:100,X GET LP RESET COMMAND OUT X,DLPDA%1;1 RESET LP SHIFT X,RO,1 WASTE SOME TIME JNE X,$-1 DITTO OTTY6 COPY OTTMP1,X RESTORE X REG. COPY OTTMP2,A RESTORE A REG. COPY OTTMP7,Q RESTORE Q REG. JMP *OTTY EXIT * OTTY7 COPY MCSFLG,X JNE X,MCSLP (TIME OUT IN MCSOUT; PRINTED THE MSG, NOW TRY IT AGAIN) COPY =:100,X GET SPI RESET COM OUT X,DLPDA%1;1 SEND IT TO SPI BOARD IN DLPDA%1;1,X INPUT SPI STATUS SHIFT X,RO,1 SHIFT SPI READY BIT TO OV JF OV,$+4 IF READY, SEND CHAR.  JST DELAY ELSE DO DELAY JMP OTTY7 IF NOT EXPIRED, LOOP BACK JMP OTTERR ELSE DISPLAY TIME OUT MESS. COPY =:8612,X GET SPI START UP COM. OUT X,DLPDA%1;1 SEND IT TO SPI BOARD OUT A,DLPDA%1 SEND CHAR. TO SPI JMP OTTY2 FINISH DELAY * OTTMP1 RES 1,0 SAVED X REG. OTTMP2 RES 1,0 SAVED A REG. OTTMP3 RES 1,0 ORIGINAL X REG. OTTMP4 RES 1,0 ORIGINAL RETURN ADD. OTTMP5 RES 1,0 SAVED LP FLAG OTTMP6 RES 1,0 ORIGINAL A REG. OTTMP7 RES 1,0 SAVE Q REG. * LPOOL TITL PROGRAM UTILITIES (MCSOUT) ****************************** * * MCSOUT MULTI-CHANNEL OUTPUT * * THIS SUBROUTINE WILL OUTPUT THE LEAST * SIGNIFICANT BYTE OF THE A REG. TO THE * TTY/CRT & LINEPRINTER (IF 'LPFLG' IS SET). * IF THE LINEPRINTER TIMES OUT, AN ERROR * MESSAGE WILL BE DISPLAYED ON THE TTY/CRT. * TO RESTART, PRESS ANY KEY ON THE KEYBOARD. * * LPFLG: 0 - TTY/CRT ONLY * 1 - TTY/CRT AND LP * -1 - LP ONLY * * CALLING SEQUENCE: * * COPY =CHARACTER,A * JST MCSOUT * ****************************** * * MCSOUT ENT THIS IS WHERE WE TALK TO THE MCS COPY MDEFLG,X GET MODE FLAG JNE X,MCSLP IF DEMAND MODE, JUMP COPY =MCSDA,Q GET THE DEVICE ADDRESS AND CHANNEL COPY =MCNECHO,X SET FOR NO ECHO XNX Q SELP X,3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS XNX Q OUT X,1 NOT ENABLING TRANSMITTER WAIT1 EQU $ XNX Q IN 1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JF OV,WAIT1 JUMP IF NOT READY COPY =MC0023,X RTS,DTR,TRANSMIT ENABLE XNX Q OUT X,1 CHANNEL CONTROL WORD WAITW EQU $ XNX Q IN 1,X WAIT FOR TRANSMIT READY TBIT 0,X JF OV,WAITW  XNX Q OUT A,0 SEND DATA BYTE OUT * * THIS IS THE LINE PRINTER DRIVER * MCSLP EQU $ COPY LPFLG,X GET LP FLAG JEQ X,OUTEND JUMP TO FINISH IF LINE PRINTER NOT WANTED COPY =MCSDA,Q GET THE DEVICE ADDRESS AND CHANNEL SBIT 1,Q MAKE IT THE DEVICE ADDRESS FOR CHANNEL #1 COPY =MCNECHO,X SET FOR NO ECHO XNX Q SELP X,3 BOARD CONTROL WORD COPY =:22,X PSEUDO CONTROL WORD JUST TO READ STATUS XNX Q OUT X,1 NOT ENABLING TRANSMITTER COPY =4,A 4 SECONDS JST TIMEST PRESET THE TIMER WAITLP2 EQU $ XNX Q IN 1,X GET CHANNEL STATUS TBIT 7,X DEVICE READY? JT OV,WAIT3 JUMP IF NOT READY. JST DELAY CHECK FOR TIME OUT JMP WAITLP2 JMP IF NOT TIMED OUT JMP OTTERR TIMED OUT, GO SAY SO WAIT3 EQU $ COPY =MC0023,X RTS,DTR,TRANSMIT ENABLE XNX Q OUT X,1 CHANNEL CONTROL WORD COPY =4,A 4 SECONDS JST TIMEST PRESET THE TIME-OUT ROUTINE WAITX EQU $ XNX Q IN 1,X WAIT FOR TRANSMIT READY TBIT 0,X  JT OV,WAIT4 JST DELAY CHECK THE TIME JMP WAITX STILL OK JMP OTTERR TIMED OUT, GO RPINT MESSAGE WAIT4 EQU $ COPY OTTMP2,A RESTORE A REG. XNX Q OUT A,0 SEND DATA BYTE OUT OUTEND EQU $ COPY OTTMP1,X RESTORE THE X REG. COPY OTTMP7,Q RESTORE THE Q REG. JMP *MCSOUT RETURN MCNECHO EQU :8 MC0023 EQU :23 * TITL PROGRAM UTILITIES (SETRDY) ****************************** * * SETRDY SET THE MULTI-CHANNEL TO READY * * THIS ROUTINE RESETS THE MULTI-CHANNEL * INTO A READY STATE. * * CALLING SEQUENCE: JST SETRDY * ****************************** * SETRDY ENT $ COPY =0,X SELP X,MCSDA;3 RESET MULTI-CHANNEL BOARD IJNE X,$ WAIT A LITTLE WHILE COPY =:8,X UN-RESET CODE SELP X,MCSDA;3 BOARD CONTROL WORD COPY =2,X MEANINGLESS VALUE TO...  OUT X,MCSDA;1 JUST FORCE CHANNEL (0) TO TAKE OUT X,MCSDA+2;1 JUST FORCE CHANNEL (1) TO TAKE COPY =:50,X FOR INTERNAL RESET (CONTROL WORD) OUT X,MCSDA;1 IN ORDER TO SEND THE....(CH 0) OUT X,MCSDA+2;1 IN ORDER TO SEND THE....(CH 1) COPY =CRTMODE,X CRT MODE WORD OUT X,MCSDA;1 SEND IT OUT (CH 0) COPY =LPMODE,X LP MODE WORD OUT X,MCSDA+2;1 SEND IT OUT (CH 1) JMP *SETRDY RETURN * CRTMODE EQU :BA EVEN PARITY ENABLE, 1 STP BIT, 7-BIT CHAR. LPMODE EQU :8E * LPOOL TITL PROGRAM UTILITIES (OBIN) ****************************** * * OBIN - OUTPUT THE A-REG. TO THE TTY/CRT * AS AN ASCII-BINARY NUMBER. * * THIS SUBROUTINE WILL BE BYPASSED IF THE * SENSE SWITCH IS SET. * * CALLING SEQUENCE: * COPY =NUMBER,A * JST OBIN * *  ENTER WITH NUMBER IN THE A-REG. * ****************************** * OBIN ENT JT SS,OBIN3 EXIT IF SSW IS SET COPY A,OBTMP1 SAVE NUMBER COPY ='(',A DISPLAY A '(' JST OTTY DISPLAY IT COPY =-4,A SET COUNT FOR 4 DIGITS COPY A,OBTMP2 STORE COUNT OBIN1 COPY =SPACE:,A GET ASCII SPACE JST OTTY DISPLAY IT COPY =-4,A SET COUNT FOR 4 BINARY BITS COPY A,OBTMP3 STORE COUNT OBIN2 COPY OBTMP1,A GET STATUS SHIFT A,LO,1 SHIFT LEFT COPY A,OBTMP1 STORE NEW STATUS COPY ='0',A GET ASCII ZERO JF OV,$+2 IF NO OV, JUMP ADD =1,A GET ASCII 1 JST OTTY DISPLAY IT IMS OBTMP3 INC. BINARY DIGIT COUNT JMP OBIN2 DISPLAY ANOTHER IMS OBTMP2 INC. DIGIT COUNT JMP OBIN1 DISPLAY A SPACE COPY =SPACE:,A GET ASCII SPACE JST OTTY DISPLAY IT COPY =')',A DISPLAY A ')' JST OTTY DISPLAY IT OBIN3 JMP *OBIN EXIT * OBTMP1 RES 1,0 SAVED NUMBER OBTMP2 RES 1,0 DIGIT COUNT OBTMP3 RES 1,0 BINARY BIT COUNT *  LPOOL TITL PROGRAM UTILITIES (OHEX) ****************************** * * OHEX - OUTPUT THE A-REG. TO THE * TTY/CRT AS FOUR ASCII-HEX * DIGITS. * * THIS SUBROUTINE WILL BE BYPASSED IF THE * SENSE SWITCH IS SET. * * CALLING SEQUENCE: * COPY =NUMBER,A * JST OHEX * * ENTER WITH NUMBER IN * THE A-REG. * ****************************** * OHEX ENT SUBROUTINE ENTRANCE JT SS,OHEX2 IF THE SENSE SWITCH IS SET, BYPASS THIS ROUTINE COPY X,OXTMP1 SAVE THE X REG. COPY =-4,X SET COUNT FOR 4 DIGITS COPY X,OXTMP2 STORE COUNT COPY A,X INITIALIZE THE X-REG. COPY =':',A GET ASCII ':'  JST OTTY OUTPUT ':' JMP $+2 DON'T SHIFT OHEX1 SHIFT X,LO,4 GET HEXT DIGIT INTO PLACE COPY X,A PUT INTO THE A-REG. SHIFT A,RO,8 SHIFT TO L.S. NIBBLE SHIFT A,RO,4 CONT. TO SHIFT CSK A,=9 IS DIGIT 9 OR LESS JMP $+2 YES, CONVERT TO ASCII ADD =7,A NO, ADD OFFSET FIRST ADD ='0',A CONVERT TO ASCII JST OTTY OUTPUT DIGIT IMS OXTMP2 INC. COUNT JMP OHEX1 GET ANOTHER CHAR. COPY OXTMP1,X RESTORE THE X REG. OHEX2 JMP *OHEX EXIT * OXTMP1 RES 1,0 SAVED X REG. OXTMP2 RES 1,0 HEX COUNT TITL PROGRAM UTILITIES (IHEX) ****************************** * * IHEX - INPUT UP TO 4 HEX DIGITS * TO FORM A 16 BIT HEX NUMBER * FROM THE CRT OR TTY. * * CALLING SEQUENCE: * JST IHEX * * EXIT UPON INPUT OF THE FIRST NON-HEX * ASCII CHAR., WHICH IS RETURNED IN * THE A-REG. WITH THE HEX VALUE IN * THE X-REG. * ***************************** * IHEX ENT SUBROUTINE ENTRANCE COPY =0,X SET INITIAL VALUE FOR 0 COPY X,HXTMP2 RESET INPUT COUNT IHEX1 JST IKB GET CHAR. COPY A,HXTMP1 STORE POSSIBLE TERMINATING CHAR. SUB ='0',A SUBTRACT ASCII 0 JLT A,IHEX2 IF LESS THAN 0 EXIT CSK A,=10 IS CHAR. 0-9? JMP IHEX3 YES, SET VALUE NOP SUB =7,A SUBTRACT FOR ASCII A-F CSK A,=10 IS CHAR. NON-HEX A-F? JMP IHEX2 YES, GO TO EXIT NOP CSK A,=16 IS CHAR. HEX A-F? JMP IHEX3 YES, SET VALUE NOP IHEX2 COPY HXTMP1,A SET TERMINATING CHAR. IN A-REG. JMP *IHEX EXIT IHEX3 SHIFT X,LO,4 SHIFT X FOR POSITION OF DIGIT OR A,X PUT DIGIT INTO PLACE IMS HXTMP2 INC. INPUT COUNT COPY HXTMP2,A GET INPUT COUNT CLSN A,=5 5 INPUTS? JMP $+2 YES, OUTPUT '?' JMP IHEX1 NO, CONT. COPY ='?',A GET CHAR. JST OTTY '?' JMP IHEX+1 START OVER * HXTMP1 RES 1,0 TERMINATING CHAR. HXTMP2 RES 1,0 INPUT COUNT * LPOOL TITL PROGRAM UTILITIES (ODEC) ****************************** * * ODEC - THIS SUBROUTINE WILL PRINT A DECIMAL * NUMBER, CONTAINED IN THE A REG., * IN THE RANGE OF 0 TO 9999. * * IF THE NUMBER IS GREATER THAN OR EQUAL TO * 10000, THEN '****' WILL BE PRINTED. * * THIS SUBROUTINE WILL BE BYPASSED IF THE * SENSE SWITCH IS SET. * * CALLING SEQUENCE: * COPY =NUMBER,A * JST ODEC * ****************************** * ODEC ENT PRINT A DECIMAL NUMBER JT SS,ODEC7 IF THE SENSE SWITCH IS SET, BYPASS THIS ROUTINE COPY X,ODTMP1 SAVE THE X REG. COPY A,ODTMP2 SAVE THE NUMBER TO BE PRINTED CSK A,=10000 IS THE NUMBER >= 10000? JMP ODEC1 NO, PRINT NUMBER NOP JST MSGA PRINT STARS MESSAGE WORD STRMSG '****' JMP ODEC6 RESTORE X REG. AND EXIT ODEC1 JGT A,ODEC2 IF NOT ZERO, PRINT NUMBER COPY ='0',A OTHERWISE, PRINT A ZERO JST OTTY PRINT IT JMP ODEC6 RESTORE X REG. AND EXIT ODEC2 COPY =ODCTBL,A GET  CONVERSION TABLE ADD. COPY A,ODTMP3 SAVE ADD. COPY =0,A RESET LEADING ZEROES FLAG COPY A,ODTMP4 STORE FLAG COPY =-4,A SET DIGIT COUNT COPY A,ODTMP5 SAVE COUNT ODEC3 COPY ODTMP2,A GET NUMBER COPY =-1,X SET X TO 0-1 SUB *ODTMP3,A SUBTRACT POWER OF TEN FROM NUMBER ADD =1,X INC. THE X REG. JGE A,$-2 IF NUMBER IS NOT NEGATIVE, CONT. SUBTRACTING ADD *ODTMP3,A ADD IN LAST POWER OF TEN COPY A,ODTMP2 SAVE NUMBER JEQ X,ODEC8 IF DIGIT IS ZERO, SEE IF IT IS A LEADING ZERO COPY X,ODTMP4 SET LEADING ZEROES FLAG ODEC4 ADD ='0',X ADD IN ASCII OFFSET COPY X,A PUT INTO THE A REG. JST OTTY PRINT THE DIGIT ODEC5 IMS ODTMP3 INC. CONVERSION TABLE ADD. IMS ODTMP5 INC. DIGIT COUNT JMP ODEC3 GO FOR MORE ODEC6 COPY ODTMP1,X RESTORE THE X REG. ODEC7 JMP *ODEC EXIT ODEC8 COPY ODTMP4,A GET LEADING ZEROES FLAG JEQ A,ODEC5 IF RESET, DON'T PRINT A ZERO JMP ODEC4 OTHERWISE, DO PRINT A ZERO * ODCTBL WORD 1000,100,10,1 HEX TO DECIMAL CONVERSION TABLE * ODTMP1 RES 1,0 SAVED X REG. ODTMP2 RES 1,0 NUMBER TO BE PRINTED ODTMP3 RES 1,0 HEX TO DECIMAL CONVERSION TABLE ADD. ODTMP4 RES 1,0 LEADING ZEROES FLAG ODTMP5 RES 1,0 DIGIT COUNT * LPOOL TITL PROGRAM UTILITIES (CHARCK) ****************************** * * CHARCK - WILL CHECK TERMINATING INPUT * CHAR. FOR SPECIAL CHARS. * * CALLING SEQUENCE: * JST CHARCK * JMP ? UP ARROW R * JMP ? BACK ARROW  R+1 * JMP ? CARRIAGE RETURN R+2 * JMP ? POUND SIGN R+3 * JMP ? COMMA  R+4 * JMP ? ANYTHING ELSE R+5 * * ENTER WITH TERMINATING CHAR. * IN THE A-REG. * ****************************** * CHARCK ENT CHECK FOR SPECIAL CHARS. CLSN A,=UPAR: IS IT A UP ARROW? JMP *CHARCK YES, RETURN TO STD ADD. R IMS CHARCK NO, INC. RETURN ADD. CLSN A,=BCKAR: IS IT A BACK ARROW? JMP *CHARCK YES, RETURN TO ADD. R+1 IMS CHARCK NO, INC. RETURN ADD. CLSN A,=CR: IS IT A CARRIAGE RETURN? JMP *CHARCK YES, RETURN TO ADD. R+2 IMS CHARCK NO, INC. RETURN ADD. CLSN A,='#' IS IT A POUND SIGN? JMP *CHARCK YES, RETURN TO ADD. R+3 IMS CHARCK NO, INC. RETURN ADD.  CLSN A,=',' IS IT A COMMA? JMP *CHARCK YES, RETURN TO ADD. R+4 IMS CHARCK NO, INC. RETURN ADD. JMP *CHARCK ANYTHING ELSE RETURN ADD. R+5 TITL PROGRAM UTILITIES (RLPCRT) ****************************** * * RLPCRT - RESET CRT/TTY & LP * * CALLING SEQUENCE: * JST RLPCRT * ****************************** * RLPCRT ENT SUBROUTINE ENTRANCE COPY =0,A RESET A-REG. COPY A,S PUT INTO S-REG. COPY MCSFLG,A GET MULTI-CHANNEL FLAG JEQ A,$+3 IF MCSFLG=0, IT'S DIO (SPI) JST SETRDY IF MCSFLG=1, RESET MCS BOARD JMP $+4 JUMP OVER DIO (SPI) RESET COPY =:100,A GET RESET COM. OUT A,DLPDA%1;1 RESET LP OUT A,DTTYDA%1;1 RESET CRT/TTY JST SEL RESET THE SCC JST CRLF OUTPUT YOU KNOW WHAT JMP *RLPCRT EXIT * LPOOL TITL PROGRAM UTILITIES (CRLF) ****************************** * * CRLF - OUTPUT CARRIAGE RETURN/LINE FEED * * CALLING SEQUENCE: * JST CRLF * ****************************** * CRLF ENT OUTPUT YOU KNOW WHAT COPY =CR:,A CARRIAGE RETURN JST OTTY SEND IT AWAY COPY =LF:,A LINE FEED JST OTTY SEND IT AWAY TOO JMP *CRLF RETURN TO WHENCE CAME FROM TITL PROGRAM UTILITIES (MOVE) ****************************** * * MOVE  - MOVE A BLK. OF DATA. THIS SUBROUTINE * IS USED TO MOVE A BLK. OF DATA FROM * ONE AREA OF MEMORY TO ANOTHER. * * ENTER WITH NEGATIVE DATA LENGTH IN THE A * REG. * * CALLING SEQUENCE: * COPY =-DATA LENGTH,A *  JST MOVE * WORD AREA1 ADD. OF 'FROM AREA' * WORD AREA2 ADD. OF 'TO AREA' * ******************************* * MOVE ENT MOVE DATA SUBROUTINE COPY A,MOVECT SAVE DATA LENGTH COPY *MOVE,A GET 'FROM' ADD. COPY A,MOVEFM SAVE ADD.  IMS MOVE INC. RETURN ADD. COPY *MOVE,A GET 'TO' ADD. COPY A,MOVETO SAVE ADD. IMS MOVE INC. RETURN ADD. MOVE1 COPY *MOVEFM,A GET A WORD OF DATA COPY A,*MOVETO STORE IN NEW LOCATION IMS MOVEFM INC. 'FROM' ADD. IMS MOVETO INC. 'TO' ADD. IMS MOVECT INC. DATA LENGTH JMP MOVE1 LOOP FOR MORE JMP *MOVE EXIT * MOVECT RES 1,0 DATA LENGTH MOVEFM RES 1,0 'FROM' ADD. MOVETO RES 1,0 'TO' ADD. TITL TRAPS' AND CONSOLE INT. SERVICE ROUTINES ****************************** * * TRAP SERVICE ROUTINES * ****************************** * * UNIMPLEMENTED INSTRUCTION TRAP * UITRT ENT UNI. INSTR. TRAP SERVICE ROUTINE SIN 4 STATUS INHIBIT COPY =INSMSG,X GET TRAP MESSAGE ADD. COPY =ER3100,A GET TRAP CDR DISPLAY SRT2 COPY =0,Q SET Q TO ZERO COPY Q,S SET PSW TO ZERO COPY X,SR:MSG SAVE MESSAGE ADD. COPY A,TEMP1 SAVE CDR ERROR DISPLAY IN CONSL;CDR,A GET CDR DISPLAY AND =:FF,A MASK FOR TESTS ONLY OR TEMP1,A 'OR' IN CDR ERROR DISPLAY SELP A,CONSL;CDR SEND TO CDR JST RLPCRT RESET LP & CRT/TTY JST MSGA OUTPUT ERROR MESSAGE SR:MSG WORD 0 MESSAGE ADD. HLT WAIT HERE COPY MDEFLG,A GET MODE FLAG JNE A,$-2 IF DEMAND MODE, LOOP BACK JMP STRTUP ELSE, GO TO QUERIES * * UNINSTALLED MEMORY TRAP * UMRT ENT UNI. MEM. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =MEMMSG,X GET TRAP MESSAGE ADD. COPY =ER3200,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER UP * POWRUP ENT PWR. UP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =POWMSG,X GET TRAP MESSAGE ADD. COPY =ER3300,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * POWER FAIL * PFRT ENT PWR. FAIL SERVICE ROUTINE HLT WAIT FOR POWER * * CHAR/NUM. EXCEPTION * CNERT ENT CHAR/NUM. EXCEP. SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =CHAMSG,X GET TRAP MESSAGE ADD. COPY =ER3400,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * STACK OVERFLOW * SORT ENT STK. OVR. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT  COPY =STKMSG,X GET TRAP MESSAGE ADD. COPY =ER3500,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * USER TRAP * UTRT ENT USER TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =USEMSG,X GET TRAP MESSAGE ADD. COPY =ER3600,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * SYSTEM TRAP * STRT ENT SYSTEM TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =SYSMSG,X GET TRAP MESSAGE ADD. COPY =ER3700,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * * ARITHMETIC TRAP * AERT ENT ARIT. TRAP SERVICE ROUTINE SIN 5 STATUS INHIBIT COPY =ARIMSG,X GET TRAP MESSAGE ADD. COPY =ER3800,A GET TRAP CDR DISPLAY JMP SRT2 OUTPUT MESSAGE & CDR DISPLAY * TITL ****************************** * * CONSOLE INT. SERVICE ROUTINE * * ****************************** * CIRT ENT CONSOLE INT. SERVICE ROUTINE SIN 2 STATUS INHIBIT COPY =0,A RESET A REG. COPY A,S RESET S TATUS REG. OUT A,CONSL;INT RESET CONSOLE INT. JST RLPCRT RESET TTY/CRT & LP IN CONSL;CDR,A INPUT CDR DISPLAY AND =:FF,A MASK FOR TESTS ONLY OR =ER3000,A 'OR' IN CDR DISPLAY SELP A,CONSL;CDR OUTPUT TO CDR DISPLAY COPY MDEFLG,A GET MODE FLAG JNE A,$+2 JUMP IF DEMAND MODE JMP STRTUP GO TO START UP HLT HALT HERE IF DEMAND MODE JMP $-1 LOOP BACK * LPOOL TITL TABLES (RESET-PARAMETER TABLE) ****************************** * * RESET-PARAMETER TABLE * * THESE ARE THE DEFAULT PARAMETERS. * TABLE MUST BE KEPT IN ORDER. * ****************************** * OPTIONS +:20 * PRAMSX EQU $ START OF RESET-PARAMETER TABLE * TESTSX WORD TESTA WORD TESTB WORD TESTC WORD -1 TEST D WORD -1 TERMINATOR * DGFLGX WORD 0 DIAG. FLAG - DEFAULT * CNTWDX WORD 0 CTRL. WORD - DEFAULT * DEVAX WORD STDDA DEVICE ADD. - DEFAULT * BDIDX WORD :6 SCOUT BOARD ID * NUMBX WORD 1 NUMBER OF BOARDS - DEFAULT * STRCHX EQU $ START OF TECH TEST DEFAULT PARAMETERS * TFCX WORD 0 FUNCTION * CHNLX WORD 0 CHNL. * BITSX WORD 0 DTR/TR, RTS/RS AND SEC. ADD. BITS * LENX WORD :80 PRIMARY BUF. LENGTH * DCLENX WORD :80 DATA CHAIN BUF. LENGTH * PATX WORD :5A TEST PATTERN * CHADDX WORD :F8 CHNL. ADD. * TITL TABLES (WORKING-PARAMETER TABLE) ****************************** * * WORKING-PARAMETER TABLE * * THIS IS THE ACTUAL WORKING PARAMETER TABLE. * TABLE MUST BE KEPT IN ORDER * ****************************** * PRAMS EQU $ START OF WORKING-PARAMETER TABLE * TESTS WORD TESTA WORD TESTB WORD TESTC WORD -1 TEST D WORD -1 TERMINATOR MJTSZ EQU $-TESTS TEST TABLE SIZE (MAJOR TESTS) * DGFLG WORD 0 DIAG. FLAG * CNTWD WORD 0 CTRL. WORD * DEVA WORD STDDA DEVICE ADD. * BDID WORD :6 SCOUT BOARD ID * NUMB WORD 1 NUMBER OF BOARDS * STRCH EQU $ START OF TECH TEST PARAMETERS * TFC WORD 0 TECH TEST FUNCTION * CHAN: WORD 0 CHNL. SELECTION * BITS WORD 0 DTR/TR, RTS/RS AND SEC. ADD. BIT SELECTION * LEN WORD :80 PRIMARY BUF. LENGTH * DCLEN WORD :80 DATA CHAIN BUF. LENGTH * PAT WORD :5A TEST PATTERN * CHADD WORD :F8 CHNL. ADD. * TCHPSZ EQU $-STRCH TECH TEST PARAMETER TABLE SIZE PRSIZE EQU $-PRAMS PARAMETER TABLE SIZE TITL TABLES (GLOBAL VARIABLES) ****************************** * * GLOBAL VARIABLES * * THESE VARIABLES ARE USED THROUGH OUT THE PROGRAM. * ****************************** * PASSN WORD 0 PASS NUMBER * MDEFLG WORD 0 MODE FLAG (DIAG. OR TECH TEST) * LPFLG WORD 0 LP FLAG * MCSFLG WORD 0 MULTI-CHANNEL FLAG * TEMP1 WORD 0 TEMP. CELL * TEMP2 WORD 0 TEMP. CELL * TEMP3 WORD 0 TEMP. CELL * TEMP4 WORD 0 TEMP. CELL * DEVADD WORD STDDA (STARTING) DEVICE ADD. * BCNT WORD -1 NEGATIVE BOARD COUNT * TSTADD WORD TESTS WORKING TEST TABLE ADD. * TBIADD WORD TBI:A TERM. BLK./INT. ADD. * SDLCF WORD :7E SDLC FLAG (INITIALIZE COM.) * IN:FLG WORD 0 NOP/INITIALIZE INT. FLAG * TX:FLG WORD 0 TX INT. FLAG * RX:FLG WORD 0 RX INT. FLAG * ETLY1 WORD 0 ERROR TALLY (ONE PASS) * ETLY2 WORD 0 ERROR TALLY (TOTAL) * MACH WORD 0 MACHINE TYPE 0=NM4, 1=SCOUT * IDNUM WORD :6 BOARD ID NUMBER TITL TABLES (TBI - CHNL. A) ****************************** * * TBI:A - TERM. BLK. FOR CHNL. A * ****************************** * TBI:A EQU $ CHNL. A TBI * RES 1,0 RX STATUS RES 1,0 RX BYTES RXD JST *A:TBRX RX INT. VECTOR RES 1,0 RESERVED FOR CARTOS SAVE CONTEXT INSTRUCTION * RES 1,0 TX STATUS RES 1,0 TX BYTES TRANSFERRED JST *A:TBTX TX INT. VECTOR RES 1,0 RESE RVED FOR CARTOS SAVE CONTEXT INSTRUCTION * RES 1,0 NOP/INITIALIZE STATUS RES 1,0 RESERVED JST *A:TBIN NOP/INITIALIZE INT. VECTOR RES 1,0 RESERVED FOR CARTOS SAVE CONTEXT INSTRUCTION * A:TBRX WORD INERX RX INT. SERVICE ROUTINE ADD. A:TBTX WORD INETX TX INT. SERVICE ROUTINE ADD. A:TBIN WORD INADD NOP/INITIALIZE INT. SERVICE ROUTINE ADD. * A:TXFL RES 1,0 TX INT. FLAG A:RXFL RES 1,0 RX INT. FLAG A:INFL RES 1,0 NOP/INITZ. INT. FLAG TITL TABLES (TBI - CHNL. B) ****************************** * * TBI:B - TERM. BLK. FOR CHNL. B * ****************************** * TBI:B EQU $ CHNL. B TBI * RES 1,0 RX STATUS RES 1,0 RX BYTES RXD JST *B:TBRX RX INT. VECTOR RES 1,0 RESERVED FOR CARTOS SAVE CONTEXT INSTRUCTION * RES 1,0 TX STATUS RES 1,0 TX BYTES TRANSFERRED JST *B:TBTX TX INT. VECTOR RES 1,0 RESERVED FOR CARTOS SAVE CONTEXT INSTRUCTION * RES 1,0 NOP/INITIALZIE STATUS RES 1,0 RESERVED JST *B:TBIN NOP/INITIALIZE INT. VECTOR RES 1,0 RESERVED FOR CARTOS SAVE CONTEXT INSTRUCTION * B:TBRX WORD INERX RX INT. SERVICE ROUTINE ADD. B:TBTX WORD INETX TX INT. SERVICE ROUTINE ADD. B:TBIN WORD INADD NOP/INITIALIZE INT. SERVICE ROUTINE ADD. * B:TXFL RES 1,0 TX INT. FLAG B:RXFL RES 1,0 RX INT. FLAG B:INFL RES 1,0 NOP/INITZ. INT. FLAG TITL TABLES (CTRL. BLKS. - CHNL. A) ****************************** * * THESE ARE THE CTRL. BLKS. FOR CHNL. A * * A:CBTX - TX CTRL. BLK. * * A:CBRX - RX CTRL. BLK. * * A:CBIN - NOP/INITIALIZE CTRL. BLK. * ****************************** * A:CBTX EQU $ CHNL. A - TX CTRL. BLK. WORD 0 CHNL./OP CODE RES 1,0 PRIMARY BUF. ADD. RES 1,0 PRIMARY BUF. SIZE IN BYTES RES 1,0 DATA CHAIN BUF. ADD. RES 1,0 DATA CHAIN BUF. SIZE IN BYTES * * * A:CBRX EQU $ CHNL. A - RX CTRL. BLK. WORD 0 CHNL./OP CODE RES 1,0 PRIMARY BUF. ADD. RES 1,0 PRIMARY BUF. SIZE IN BYTES RES 1,0 DATA CHAIN BUF. ADD. RES 1,0 DATA CHAIN BUF. SIZE IN BYTES * * * A:CBIN EQU $ CHNL. A - NOP/INITIALIZE CTRL. BLK. WORD 0 CHNL./OP CODE RES 1,0 TERM. BLK./INT. ADD. RES 1,0 RESERVED RES 1,0 CHNL. ADD./SDLC FLAG RES 1,0 RESERVED TITL TABLES (CTRL. BLKS. - CHNL. B) ****************************** * * THESE ARE THE CTRL. BLKS. FOR CHNL. B * * B:CBTX - TX CTRL. BLK. * * B:CBRX - RX CTRL. BLK. * * B:CBIN - NOP/INITIALIZE CTRL. BLK. * ****************************** * B:CBTX EQU $ CHNL. B - TX CTRL. BLK. WORD 1%CHA: CHNL./OP CODE RES 1,0 PRIMARY BUF. ADD. RES 1,0 PRIMARY BUF. SIZE IN BYTES RES 1,0 DATA CHAIN BUF. ADD. RES 1,0 DATA CHAIN BUF. SIZE IN BYTES * * * B:CBRX EQU $ CHNL. B - RX CTRL. BLK. WORD 1%CHA: CHNL./OP CODE RES 1,0 PRIMARY BUF. ADD. RES 1,0 PRIMARY BUF. SIZE IN BYTES RES 1,0 DATA CHAIN BUF. ADD. RES 1,0 DATA CHAIN BUF. SIZE IN BYTES * * * B:CBIN EQU $ CHNL. B - NOP/INITIALIZE CTRL. BLK. WORD 1%CHA: CHNL./OP CODE RES 1,0 TERM. BLK./INT. ADD. RES 1,0 RESERVED RES 1,0 CHNL. ADD./SDLC FLAG RES 1,0 RESERVED TITL TABLES (CTRL. BLK. ADDS.) ****************************** * * THESE ARE THE ADDS. OF THE CTRL. * BLKS. USED IN TESTING. * * CB:TX - TX CTRL. BLK. * * CB:RX - RX CTRL. BLK. * * CB:IN - NOP/INITIALIZE CTRL. BLK. * ****************************** * CB:TX WORD A:CBTX TX CTRL. BLK. * CB:RX WORD A:CBRX RX CTRL. BLK. * CB:IN WORD A:CBIN NOP/INITIALIZE CTRL. BLK. TITL TABLES (TEST ADDS.) ****************************** * * THESE ARE THE ADDS. OF THE MAJOR TES TS. * ****************************** * TESTBL WORD TESTA * WORD TESTB * WORD TESTC * WORD TESTD * MAJTSZ EQU $-TESTBL TITL TABLES (OPCODE MESSAGE ADDS.) ****************************** * * THESE ARE THE ADDS. OF THE OP CODE * FUNCTION MESSAGES USED IN THE * ERROR REPORT. * ******************************* * OPMSG EQU $ START OF TABLE * WORD EROP0 NOP * WORD EROP1 TRANSMIT *  WORD EROP2 RECEIVE * WORD EROP3 INITIALIZE * TITL TABLES (I/O INSTRUCTION ADDS.) ****************************** * * I/O INSTRUCTION ADDS. * ****************************** * DAFRST EQU $ * WORD DA1 ENABLE SCC INTS. * WORD DA2 SENSE SCC BUSY * WORD DA3 SEND CTRL. BLK. ADD. IN A REG. * WORD DA4 SEND CTRL. BLK. ADD. IN X REG. * WORD DA5 INITIATE SCC MICRODIAG. * WORD DA6 TURN ON SCC MICRODIAG. LED * WORD DA7 SCOUT LOOPBACK ENABLE * DASIZ EQU $-DAFRST I/O INSTRUCTION ADD. TABLE SIZE TITL CRT/TTY/LP MESSAGES (QUERY MESSAGES) ****************************** * * QUERY MESSAGES * ****************************** * TITLE WORD CLRSCR%8;SPACE: BYTE 'SYNCHRONOUS COMMUNCIATION CONTROLLER TEST PROGRAM',CR:,LF: BYTE '93076-' WORD REV:,CRLF:,0 * QRYM10 BYTE CR:,LF:,'DIAGNOSTIC OR TECH TEST (D OR T)?',0 * QRYM20 BYTE CR:,LF:,'DEVICE ADDRESS (:0D)?:',0 * QRYM30 BYTE CR:,LF:,'SCOUT BOARD ID (:6)?:',0 * QRYM40 BYTE CR:,LF:,'NUMBER OF BOARDS (1)?',0 * QRYM50 BYTE CR:,LF:,'TESTS (A,B,C)?',0 * QRYM60 BYTE CR:,LF:,'CONTROL WORD (:00)?:',0 * QRYM70 BYTE CR:,LF:,'TECH TEST' BYTE CR:,LF:,'ENTER:' BYTE CR:,LF:,'FC,CHNL,RTS/RS,DTR/TR,SAD,LEN,CHLEN,PAT,CHADD' BYTE CR:,LF:,'? ',0 * * * QERM20 BYTE CR:,LF:,'DEVICE ADDRESS MUST BE :01 TO :1F',CR:,LF:,0 * QERM30 BYTE CR:,LF:,'BOARD ID MUST BE :6 TO :E',CR:,LF:,0 * QERM40 BYTE CR:,LF:,'NUMBER OF BOARDS MUST BE 1 T0 31',CR:,LF:,0 * QERM41 BYTE CR:,LF:,'TOO MANY BOARDS FOR DEVICE ADDRESS',CR:,LF:,0 * QERM60 BYTE CR:,LF:,'CONTROL WORD MUST BE :00 TO :3F',CR:,LF:,0 * QERM70 BYTE CR:,LF:,'FUNCTION MUST BE 0 TO A',CR:,LF:,0 * QERM711 BYTE CR:,LF:,'FUNCTION ''A'' IS FOR SCOUT ONLY',CR:,LF:,0 * QERM71 BYTE CR:,LF:,'CHANNEL A OR B ONLY',CR:,LF:,0 * QERM72 BYTE CR:,LF:,'RTS/RS = RESET-0, SET-1',CR:,LF:,0 * QERM73 BYTE CR:,LF:,'DTR/TR = RESET-0, SET-1',CR:,LF:,0 * QERM74 BYTE CR:,LF:,'SECONDARY ADDRESS SELECT = NO-0, YES-1' WORD CRLF:,0 * QERM75 BYTE CR:,LF:,'PRIMARY BUFFER LENGTH MUST BE :01 TO :80' WORD CRLF:,0 * QERM76 BYTE CR:,LF:,'DATA CHAIN BUFFER LENGTH MUST BE :00 TO :80' WORD CRLF:,0 * QERM77 BYTE CR:,LF:,'TEST PATTERN MUST BE :00 TO :FF',CR:,LF:,0 * QERM78 BYTE CR:,LF:,'CHANNEL ADDRESS MUST BE :00 TO :FE',CR:,LF:,0 * QERM79 BYTE CR:,LF:,'TOO MANY TECH TEST PARAMETERS',CR:,LF:,0 * TITL CRT/TTY/LP MESSAGES (ERROR REPORT MESSAGES) ****************************** * * ERROR REPORT MESSAGES * ****************************** * EMSG01 BYTE CR:,LF:,LF:,'ER ',0 * EMSG02 BYTE 'ER ADD ',0 * EMSG03 BYTE 'CHNL ',0 * EMSG04 BYTE 'CHNL/OPC ',0 * EMSG05 BYTE 'CTRL BLK ADD ',0 * EMSG06 BYTE 'TBI ADD ',0 * EMSG07 BYTE 'STATUS ',0 * EMSG08 BYTE 'BUF ADD ',0 * EMSG09 BYTE 'LEN ',0 * EMSG10 BYTE 'BYTS XFRD ',0 * EMSG11 BYTE 'BYTS RCVD ',0 * EMSG12 BYTE 'DATA CHAIN BUF ADD ',0 * EMSG13 BYTE CR:,LF:,'TX--',0 * EMSG14 BYTE CR:,LF:,'RX--',0 * EMSG15 BYTE CR:,LF:,'EXP ',0 * EMSG16 BYTE CR:,LF:,'ACT :',0 * EMSG17 BYTE 'RX BUFFER DUMP, AT ',0 * EMSG18 BYTE ' = ',0 * EMSG19 BYTE CR:,LF: ,'IN--',0 * EMSG20 BYTE 'CHNL ADD :',0 * TITL CRT/TTY/LP MESSAGES (OPCODE FUNCTION MESSAGES) ****************************** * * OPCODE FUNCTION MESSAGES * ****************************** * EROP0 BYTE '(NOP)',0 * EROP1 BYTE '(TRANSMIT)',0 * EROP2 BYTE '(RECEIVE)',0 * EROP3 BYTE '(INITIALIZE)',0 * TITL CRT/TTY/LP MESSAGES (TRAP/EXCEPTION MESSAGES) ****************************** * * TRAP/EXCEPTION MESSAGES * ****************************** * INSMSG BYTE CR:,LF:,'UNIMPLEMENTED INSTRUCTION TRAP',CR:,LF:,0 * MEMMSG BYTE CR:,LF:,'UNINSTALLED MEMORY TRAP',CR:,LF:,0 * POWMSG BYTE CR:,LF:,'POWER FAIL',CR:,LF:,0 * CHAMSG BYTE CR:,LF:,'CHAR./NUM EXCEPTION',CR:,LF:,0 * STKMSG BYTE CR:,LF:,'STACK OVERFLOW',CR:,LF:,0 * USEMSG BYTE CR:,LF:,'USER TRAP',CR:,LF:,0 * SYSMSG BYTE CR:,LF:,'SYSTEM TRAP',CR:,LF:,0 * ARIMSG BYTE CR:,LF:,'ARITHMETIC TRAP',CR:,LF:,0 * TITL CRT/TTY/LP MESSAGES (MISCELLANEOUS MESSAGES) ****************************** * * MISCELLANEOUS MESSAGES * ****************************** * TSTNUM BYTE CR:,LF:,'TEST' TNUM: BYTE ' A',CR:,LF:,0 * PASSMG BYTE CR:,LF:,'PASS ',0 * STRMSG BYTE '****',0 * ETMS10 BYTE CR:,LF:,'(GRAND TOTAL) ERRORS THIS PASS ',0 * ETMS20 BYTE CR:,LF:,'(GRAND TOTAL) ERRORS TOTAL ',0 * LPMSG BYTE CR:,LF:,'LINE PRINTER TIMED OUT',CR:,LF:,0 * INIMSG BYTE ' INITIALIZE',CR:,LF:,0 * TRRCMG BYTE ' TRANSMIT/RECEIVE',CR:,LF:,0 * DATMSG BYTE ' DATA CHAINING',CR:,LF:,0 * UISMSG BYTE ' UIS',CR:,LF:,0 * TITL I/O BUFFERS ****************************** * * I/O BUFFERS * * TRBUFF - TX BUFFER * * RCBUFF - RX BUFFER * ****************************** * TRBUFF RES 128,0 TX BUF. * RCBUFF RES 128,0 RX BUF. * ENDPRG EQU $ THAT'S ALL FOLKS! END DEFSTR DEFAULT START-UP C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C CIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIAS LO=TV MACRO UF.SCCDIAG(L=,ERR) LINK UF.SCCDIAG+SF.DEBUGS(UL,AB=2000) JOB 821124101909821124101909821124101909IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII" IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII# IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII% IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII& e' 821124101909821124101909820911152824e821124101909821124101909820911153358e821124101909821124101909821124101909e821124101909821124101909821124101909821124101909821124101909821124101909e' j821124102102821124102233820911153547e' L8209111531265082091115313100820911153131. SCCDIAG ASMSCCDIAG JCL TITL NM4 SYNCHRONOUS COMMUNICATION CONTROLLER TEST PROGRAM 93076-10B1 TITL TITLE PAGE * * NM4/SCOUT SYNCHRONOUS COMMUNICATION CONTROLLER * * * TEST PROGRAM * * * 84-93076-10B1 * * * * * * * COPYRIGHT 1982 COMPUTER AUTOMATION INC. * * * * TITL REVISION HISTORY ****************************** * * REVISION HISTORY * ****************************** * * REVISION ISSUE DATE COMMENTS * -------- ---------- -------- * * A0 11/81 ORIGINAL RELEASE BY * ROBERT ROBINSON * * A1 04/82 MODIFIED FOR SCOUT BY * ROBERT ROBINSON * * B0 08/82 MODIFIED FOR SCOUT * MULTI-CHANNEL BY *  MARK HAYES * * PRIOR TO REVISION 'B0', THE SCC TEST PROGRAM TALKED WITH * THE SPI BOARD ONLY WHEN DOING I/O. NOW YOU MAY USE THE SPI * BOARD OR THE MULTI-CHANNEL BOARD IN ORDER TO DO I/O. * A FLAG IS SET AT PROGRAM START-UP TO KEEP TRACK OF WHICH * BOARD IS BEING USED. THE FOLLOWING ROUTINES HAVE BEEN ADDED: * 'SETRDY', 'MCSIN', 'MCSOUT', 'CLEANUP'. * * B1 11/82 MODIFIED FOR CARTOS *  SAVE CONTEXT INSTRUCTION * BY ERIC CHRISTENSEN * * THE TERMINATION BLOCKS FOR CHANNEL A AND B (TBI:A, TBI:B) * HAVE BEEN MODIFIED TO BE COMPATIBLE WITH THE CARTOS SAVE CON- * TEXT INSTRUCTION. TWO WORDS ARE NOW RESERVED FOR THE RECEIVE, * TRANSMIT, AND NOP/INITIALIZE INTERRUPT ADDRESSES. * REV: EQU 'B1' LATEST REVISION TITL LINKER INFORMATION ****************************** * * LINKER INFORMATION * ****************************** * NAM G:0 LINK ADD. * OBJNOTE ' SCCDIAG - REV. ',REV:%-8,REV:&:FF TITL DIAG./TECH TEST INFORMATION ****************************** ( * * DIAG./TECH TEST INFORMATION * ****************************** * * CONSISTS OF: * * DIAG.: MAJOR TESTS * TEST A - TESTS CHNL. A * TEST B - TESTS CHNL. B * TEST C - TESTS BOTH CHNLS. * TEST D - TESTS A TO B, B TO A * * DIAG.: MINOR TESTS * INITIALIZE TEST * TX/RX TEST * DATA CHAIN TEST * UIS TEST * *** * * TECH TEST: FUNCTIONS *  NOP * TX * TX/RX * INITIALIZE * ABORT * ENABLE SCC INTS. * RESET SCC/INITIATE MICRODIAG. *  SET MICRODIAG. LED * SENSE BUSY * SCOUT LOOPBACK ENABLE * SCOUT 'SAL' INSTRUCTION * *** * * CTRL. OPTIONS: CTRL. WORD * * BIT OPTION * 0 SUPPRESS ERROR REPORT * 1 HALT AFTER 1 PASS * 2 HALT ON ERROR *  3 LP * 4 ERROR TALLIES * 5 RX BUF. DUMP * 6 SCOUT LOOPBACK ENABLE * * CTRL. OPTIONS: SENSE SWITCH * SET - SUPPRESS ALL OUTPUT OF MESSAGES * ****************************** TITL EQUATES (SCC EQUATES) ****************************** * * SCC EQUATES * ****************************** * * (STANDARD) SCC I/O CTRL. BLK. * CH:OPC EQU 0 CHNL./OPCODE ME:AD1 EQU 1 FIRST I/O BUF. STARTING ADD. BT:CT1 EQU 2 BYTE COUNT FOR FIRST I/O BUF. ME:AD2 EQU 3 SECOND I/O BUF. STARTING ADD. (DATA CHAINING) BT:CT2 EQU 4 BYTE COUNT FOR SECOND I/O BUF. (DATA CHAINING) * * (INITIALIZE) SCC I/O CTRL. BLK. * TB:ADD EQU 1 TERM. BLK./INT. ADD. CH:ADD EQU 3 CHNL. ADD./SDLC FLAG (:7E) * * SCC OP CODES * OPC:NP EQU 0 NOP OPC:TX EQU 1 TX OPC:RX EQU 2 RX OPC:IZ EQU 3 INITIALIZE OPC:MK EQU 3 OP CODE MASK TITL * * SCC CHNL./OPCODE WORD BITS * DTR:TR EQU 4 BIT 4 - DATA TERMINAL READY RTS:RS EQU 5 BIT 5 - READY TO SEND SAD: EQU 6 BIT 6 - SECONDARY ADD. SELECT CHA: EQU 7 BIT 7 - CHNL. (0-A, 1-B) * * SCC I/O FUNCTION CODES * ENIN EQU 0 ENABLE INTS. (SELP INSTRS.) COBU EQU 0 CONTROLLER BUSY (SST INSTRS.) LCBA EQU 1 LOAD CTRL. BLK. ADD. (SELP INSTRS.) CBEN EQU 2 SCOUT LOOPBACK ENABLE (SELP INSTRS.) INTZ EQU 4 RESET/INITIATE MICRODIA. (SELP INSTRS.) MICR EQU 7 MICRODIAG. LED (SELP INSTRS.) TITL * * TERM. BLK./INT. ADD. WORDS * TB:RXS EQU 0 RX STATUS TB:RXB EQU 1 RX BYTE COUNT TB:TXS EQU 4 TX STATUS TB:TXB EQU 5 TX BYTE COUNT TB:INS EQU 8 NOP/INITZ. STATUS TB:RXI EQU 12 RX INT. SERVICE ROUTINE ADD. TB:TXI EQU 13 TX INT. SERVICE ROUTINE ADD. TB:INI EQU 14 NOP/INITIALIZE INT. SERVICE ROUTINE ADD. * * SCC STATUS BITS * OPCO: EQU 15 BIT 15 - OPERATION COMPLETE RCIP: EQU 14 BIT 14 - RX COM. IN PROGRESS TCIP: EQU 13 BIT 13 - TX COM. IN PROGRESS TSTM: EQU 12 BIT 12 - TEST MODE/RS-449 SIGNAL * CTS:CS EQU 11 BIT 11 - CLEAR TO SEND DCD:RR EQU 10 BIT 10 - DATA CARRIER DETECT RI:IC EQU 9 BIT 9 - RING INDICATOR DSR:DM EQU 8 BIT 8 - DATA SET READY * CRCE: EQU 7 BIT 7 - CRC ERROR RXOV: EQU 6 BIT 6 - RX OVERRUN ABRT: EQU 5 BIT 5 - ABORT TXUR: EQU 4 BIT 4 - TX UNDERRUN * DMAE: EQU 3 BIT 3 - DMA ERROR IFER: EQU 2 BIT 2 - INTERFACE ERROR *RES EQU 1 BIT 1 - RESERVED RXDP: EQU 0 BIT 0 - RX DATA PRESENT TITL EQUATES (CDR DISPLAY EQUATES) ****************************** * * CDR DISPLAY EQUATES * ****************************** * * END OF TESTING DISPLAY * FINI EQU 0 TESTING IS ALL DONE * * DEMAND MODE QUERY ERROR DISPLAYS * BAD:DA EQU :BAD0 INCORRECT DEVICE ADD. () DEMAND MODE QUERIES) BAD:BN EQU :BAD1 INCORRECT NUMBER OF BOARDS (DEMAND MODE QUERIES) BAD:CW EQU :BAD2 INCORRECT CTRL. WORD  (DEMAND MODE QUERIES) BAD:ID EQU :BAD3 INCORRECT BOARD ID (DEMAND MODE QUERIES) * * TRAP/EXCEPTION CONSOLE INT. DISPLAYS * ER3000 EQU :3000 CONSOLE INT. ER3100 EQU :3100 UNIMPLEMENTED INSTRUCTION TRAP ER3200 EQU :3200 UNINSTALLED MEMORY TRAP ER3300 EQU :3300 POWER FAIL ER3400 EQU :3400 CHAR./NUMERIC EXCEPTION ER3500 EQU :3500 STACK OVERFLOW TRAP ER3600 EQU :3600 USER TRAP ER3700 EQU :3700 SYSTEM TRAP ER3800 EQU :3800 ARITHMETIC TRAP ER4000 EQU :4000 LP TIMEOUT TITL EQUATES (ERROR CODES) ****************************** * * ERROR CODES * ****************************** * ER001 EQU 001 DSR/DM BIT DID NOT SET * ER002 EQU 002 DSR/DM, DCD/RR OR CTS/CS BIT WAS NOT COMMENT RESET UPON TERM. OF AN INITIALIZE COM. * ER003 EQU 003 MICRODIAG. FAILED. BUSY FLAG DID NOT GO FALSE. * ER004 EQU 004 SCC INT. TIMED OUT * ER005 EQU 005 MULTIPLE INTS. FOR A NOP/INITIALIZE COM. COMMENT POSSIBLE 'MODEM STATUS' INTERRUPT * ER006 EQU 006 RX STATUS WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A NOP/INITIALIZE COM. * ER007 EQU 007 RX BYTE COUNT WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A NOP/INITIALIZE COM. * ER008 EQU 008 TX STATUS WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A NOP/INITIALIZE COM. * ER009 EQU 009 TX BYTE COUNT WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A NOP/INITIALIZE COM. * ER010 EQU 010 SCC INTERRUPTED TO THE RX INT. COMMENT VECTOR IN THE TBI UPON TERM. OF A COMMENT NOP/INITIALIZE COM. TITL ER011 EQU 011 SCC INTERRUPTED TO THE TX INT. COMMENT VECTOR IN THE TBI UPON TERM. OF A COMMENT NOP/INITIALIZE COM. * ER012 EQU 012 MULTIPLE INTS. FOR A TX COM. * ER013 EQU 013 RX STATUS WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A TX COM. * ER014 EQU 014 RX BYTE COUNT WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A TX COM. * ER015 EQU 015 NOP/INITIALIZE STATUS WORD IN THE TBI WAS COMMENT ALTERED UPON TERM. OF A TX COM. COMMENT POSSIBLE 'MODEM STATUS' INTERRUPT * ER016 EQU 016 TX BYTE COUNT IN THE TBI DOES NOT EQUAL COMMENT THE TX PRIMARY BUF. LENGTH PLUS THE COMMENT TX DATA CHAIN BUF. LENGTH IN THE COMMENT CTRL. BLK. * ER017 EQU 017 SCC BUSY BIT DID NOT GO 'FALSE' AFTER COMMENT THE CONTROL BLOCK WAS SENT TO THE SCC. * ER018 EQU 018 SCC INTERRUPTED TO THE RX INT. VECTOR COMMENT IN THE TBI UPON TERM. OF A TX COM. * ER019 EQU 019 SCC INTERRUPTED TO THE NOP/INITIALIZE INT. COMMENT VECTOR IN THE TBI UPON TERM. OF A TX COMMENT COM. POSSIBLE 'MODEM STATUS' INTERRUPT TITL ER020 EQU 020 RX COM. IN PROGRESS BIT, TX COMMENT COM. IN PROGRESS BIT, OR RX DATA COMMENT PRESENT BIT WAS NOT RESET IN THE COMMENT NOP/INITIALIZE STATUS WORD COMMENT IN THE TBI UPON TERM. OF A COMMENT NOP/INITIALIZE COM. * ER021 EQU 021 DSR/DM, DCD/RR OR CTS/CS BIT DID NOT SET * ER022 EQU 022 CTS/CS OR DCD/RR BIT DID NOT RESET * ER023 EQU 023 DSR/DM, DCD/RR OR CTS/CS BIT WAS RESET UPON COMMENT TERM. OF A TX COM. * ER024 EQU 024 TX INT. OCCURRED BUT RX INT. TIMED OUT * ER025 EQU 025 MULTIPLE INTS. FOR A RX COM. * ER026 EQU 026 RX INT. OCCURRED BEFORE TX INT. * ER027 EQU 027 RX INT. OCCURRED BUT TX INT. TIMED OUT * ER028 EQU 028 NOP/INITIALIZE STATUS WORD IN THE TBI WAS ALTERED COMMENT UPON TERM. OF A RX AND A COMMENT TX COM. * POSSIBLE 'MODEM STATUS' INTERRUPT * ER029 EQU 029 SCC INTERRUPTED TO THE NOP/INITIALIZE INT. COMMENT VECTOR IN THE TBI UPON TERM. OF A TX COMMENT OR A RX COM. POSSIBLE 'MODEM STATUS' COMMENT INTERRUPT TITL ER030 EQU 030 SCC INTERRUPTED TO THE NOP/INITIALIZE INT. COMMENT VECTOR IN THE TBI UPON TERM. OF A COMMENT RX COM. POSSIBLE 'MODEM STATUS' INTERRUPT * ER031 EQU 031 RX COM. IN PROGRESS BIT OR COMMENT RX DATA PRESENT BIT WAS NOT RESET IN COMMENT THE TX STATUS WORD UPON TERM. COMMENT OF A TX COM. * ER032 EQU 032 RX COM. IN PROGRESS BIT WAS NOT SET IN COMMENT THE TX STATUS WORD UPON TERM. COMMENT OF A TX/RX OPERATION * ER033 EQU 033 TX IN PROGRESS BIT OR RX DATA PRESENT BIT COMMENT IN THE RX STATUS WORD WAS NOT RESET UPON COMMENT TERM. OF A TX/RX OPERATION * ER034 EQU 034 RX BYTE COUNT IN THE TBI DOES NOT COMMENT EQUAL THE RX PRIMARY BUF. LENGTH PLUS COMMENT THE RX DATA CHAIN BUF. LENGTH IN THE COMMENT CTRL. BLK. * ER035 EQU 035 SCC INT. TIMED OUT AFTER A SECOND COMMENT 'UIS' INSTRUCTION (WITH BIT 12 RESET) WAS COMMENT EXECUTED * ER036 EQU 036 SCC INTERRUPTED AFTER A 'UIS' COMMENT INSTRUCTION (WITH BIT 12 SET) WAS EXECUTED * ER037 EQU 037 TX IN PROGRESS BIT WAS NOT SET IN COMMENT THE TX STATUS WORD UPON TERM. COMMENT OF A TX/RX OPERATION TITL ER038 EQU 038 RX IN PROGRESS BIT WAS NOT SET IN THE RX COMMENT STATUS WORD UPON TERM. OF COMMENT A TX/RX OPERATION * ER039 EQU 039 TX IN PROGRESS BIT WAS NOT SET IN COMMENT THE TX STATUS WORD UPON TERM. COMMENT OF A TX COM. * ER040 EQU 040 DATA MISCOMPARE * ER041 EQU 041 BUSY FLAG DIDN'T SET AFTER A 'SET COMMENT MICORDIAGNOSTIC LED' INSTRUCTION WAS COMMENT EXECUTED * ER042 EQU 042 THE 'ABORT' BIT WAS NOT SET IN THE 'RX STATUS' COMMENT WORD IN THE TERM. BLK. UPON TERM. COMMENT AN ABORT COM. * ER043 EQU 043 THE SCC INTERRUPTED TO THE TX INT. VECTOR ADDRESS COMMENT IN THE TERM. BLK. UPON TERM. COMMENT OF AN ABORT COM. * ER044 EQU 044 THE SCC INTERRUPTED TO THE NOP/INITZ. INT. COMMENT VECTOR ADDRESS IN THE TERM. BLK. COMMENT UPON TERM. OF AN ABORT COM. COMMENT POSSIBLE 'MODEM STATUS' INTERRUPT * ER045 EQU 045 MORE THAN ONE INT. OCCURRED FOR A SINGLE COMMENT ABORT COM. * ER046 EQU 046 DEVICE ADDRESS RETURNED AFTER 'SAL' DOES NOT COMMENT MATCH DEVICE ADDRESS GIVEN. POSSIBLE COMMENT INCORRECT BOARD ID OR DEVICE ADDRESS. TITL ER050 EQU 050 CURRENT COM. DID NOT COMPLETE. THE COMMENT 'OPERATION COMPLETE' BIT OF THE STATUS  COMMENT WORD IS RESET. * ER051 EQU 051 INTERFACE ERROR. AN ABNORMAL CONDITION HAS COMMENT OCCURRED ON THE MODEM SIGNALS. * ER052 EQU 052 DMA ERROR. A DIRECT MEMORY ACCESS ERROR HAS COMMENT OCCURRED DURING THE TRANSFER OF DATA FROM/TO COMMENT USER MEMORY. * ER053 EQU 053 TX UNDERRUN. THIS ERROR INDICATES THAT COMMENT A TX UNDERRUN ERROR CONDITION HAS OCCURRED COMMENT DURING A TX OPERATION. * ER054 EQU 054 ABORT. THIS ERROR INDICATES THAT AN ABORT COMMENT SEQUENCE (7 OR MORE 1'S) WAS DETECTED COMMENT DURING PROCESS OF AN INCOMING MESSAGE. * ER055 EQU 055 RX OVERRUN. THIS ERROR INDICATES THAT A COMMENT RX OVERRUN CONDITION HAS OCCURRED COMMENT WITHIN THE SCC. * ER056 EQU 056 CRC ERROR. THIS ERROR INDICATES AN ERROR COMMENT WAS DETECTED AS THE RESULT OF COMPARING THE COMMENT CRC CHECKER TO THE APPROPRIATE CHECK VALUE. TITL EQUATES (PROGRAM EQUATES) **************************+ ***** * * PROGRAM EQUATES * ******************************* * * I/O DEVICE ADDS. * CONSL EQU :00 CONSOLE DEVICE ADD. STDDA EQU :0D SCC STANDARD DEVICE ADD. DTTYDA EQU :7C CRT/TTY DEVICE ADD. (DIO) DLPDA EQU :7F LP DEVICE ADD. (DIO) MCSDA EQU :40 MULTI-CHANNEL DEVICE ADDRESS * * CONSOLE FUNCTION CODES * SENSE EQU :00 CONSOLE SENSE SWITCH FUNCTION CODE INT EQU :01 CONSOLE INT. LIGHT FUNCTION CODE CDR EQU :04 CONSOLE DATA REG. FUNCTION CODE * * ASCII CTRL. CHARS. * CLRSCR EQU :0C ASCII CTRL. CHAR. TO CLEAR SCREEN (TOF) CR: EQU :0D ASCII CR LF: EQU :0A ASCII LF CRLF: EQU CR:%8;LF: ASCII CR/LF BCKAR: EQU :5F ASCII BACK ARROW UPAR: EQU :5E ASCII UP ARROW SPACE: EQU :20 ASCII SPACE TITL * * CTRL. WORD BIT EQUATES * ERR EQU 0 BIT 0 - SUPPRESS ERR. REPORT (0-NO, 1-YES) RUN EQU 1 BIT 1 - HALT AFTER 1 PASS (0-NO, 1-YES) HLT EQU 2 BIT 2 - HALT ON ERROR (0-NO, 1-YES) LPR EQU 3 BIT 3 - LP (0-NO, 1-YES) ETL EQU 4 BIT 4 - ERROR TALLIES (0-NO, 1-YES) DMP EQU 5 BIT 5 - RX BUF. DUMP (0-NO, 1-YES) SLP EQU 6 BIT 6 - SCOUT LOOPBACK ENAB. (0-NO, 1-YES) * * MAXIMUM NUMBER OF BOARDS TO TEST * BRDS EQU 31 MAXIMUM NUMBER OF BOARDS UNDER TEST * * PSW BIT EQUATES * CY: EQU 0 CARRY BIT OV: EQU 1 OVERFLOW BIT BY: EQU 2 BYTE MODE BIT CI: EQU 4 CONSOLE INT. ENABLE BIT RC: EQU 5 REAL-TIME-CLOCK INT. ENABLE BIT XA: EQU 6 EXTENED ADD.ING BIT GI: EQU 8 GLOBAL INT. ENABLE BIT EI: EQU 12 EOB INTS. BIT DI: EQU 13 DATA INTS. BIT TITL STANDARD TRAP ADDS./DIO INT. LOCATIONS **************************************** * * STANDARD TRAPS/EXCEPTION ADDS. * * DIO INT. LOCATIONS * **************************************** * MACHINE =:0001 SCOUT 4/04 * * ROM MOVE ROUTINE * ABS 0 WORD 0 DEBUG USE WORD COPY P,X P->X FROM WORD :C28A 'COPY NEG2,Q' ADD Q,X ADJUST 'FROM' POINTER COPY =0,Y 0->Y WORD :C286 'COPY LENGTH,Q' MOVLP COPY 0(X),A GET FROM WORD COPY A,0(Y) STORE AT 'TO' ADDR. ADD =1,X BUMP 'FROM' ADDR. ADD =1,Y BUMP 'TO' ADDR. IJNE Q,MOVLP LOOP IF NOT THRU WORD :9F82 'JMP DEFSTR' LENGTH WORD -:3000 MOVE :3000 WORDS NEG2 WORD -2 WORD DEFSTR * ABS :80 POWER UP JST *$+1 JUMP TO POWER UP ROUTINE WORD POWRUP ADD. OF ROUTINE * ABS :84 TRAP ADD. :0084 RES 2,0 UNIMPLEMENTED INSTRUCTION TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UITRT ADD. OF ROUTINE * RES 2,0 UNINSTALLED MEMORY TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD UMRT ADD. OF ROUTINE * RES 2,0 POWER FAIL JST *$+1 JUMP TO SERVICE ROUTINE WORD PFRT ADD. OF ROUTINE * ABS :94 CONSOLE INT. JST *$+1 CONSOLE INT. LOCATION WORD CIRT ADD. OF SERVICE ROUTINE * ABS :98 TRAP ADD. :0098 RES 2,0 CHAR/NUM. EXCEPTION JST *$+1 JUMP TO SERVICE ROUTINE WORD CNERT ADD. OF ROUTINE * RES 2,0 STACK OVERFLOW JST *$+1 JUMP TO SERVICE ROUTINE WORD SORT ADD. OF ROUTINE * RES 2,0 USER TRAP  JST *$+1 JUMP TO SERVICE ROUTINE WORD UTRT ADD. OF ROUTINE * RES 2,0 SYSTEM TRAP JST *$+1 JUMP TO SERVICE ROUTINE WORD STRT ADD. OF ROUTINE * RES 2,0 ARITHMETIC ERROR JST *$+1 JUMP TO SERVICE ROUTINE WORD AERT ADD. OF ROUTINE TITL PROGRAM STARTUP *************************************** * * PROGRAM STARTUP * * :200 - DEFSTR (DEFAULT MODE START) * * :202 - DEMSTR (DEMAND MODE START) * * RESET STATUS REG. * RESET SENSE SWITCH * RESET CONSOLE INT. * SET MOD, E FLAG * SET PROCESSOR FLAG * *************************************** * ABS :200 PROGRAM START (DEFAULT) * G:0 EQU $ DEBUG LINK DEFSTR EQU $ DEFAULT ENTRY * COPY =0,A RESET MODE FLAG TO DEFAULT MODE JMP FLGSTR JUMP TO STORE FLAG * DEMSTR COPY A,TEMP1 SAVE (STARTING) DEVICE ADD. COPY X,TEMP2 SAVE NUMBER OF BOARDS COPY =1,A SET MODE FLAG TO DEMAND MODE * FLGSTR COPY A,MDEFLG STORE MODE FLAG STRTUP COPY =0,A RESET STATUS REG. COPY A,S PUT INTO STATUS REG. OUT A,CONSL;SENSE RESET SENSE SWITCH (LIGHT) OUT A,CONSL;INT RESET CONSOLE INT. COPY A,LPFLG RESET LP FLAG FMT X WHICH PROCESSOR? TBIT 6,X SCOUT? JF OV,STRT2 IF NOT, JUMP IN DTTYDA%1;1,A GET DIO (SPI) STATUS IF THERE IS ONE COPY =0,X JNE A,STRT2 JUMP IF THERE IS A DIO THERE ADD =1,X COPY X,MCSFLG SET MULTI-CHANNEL JST SETRDY SET UP THE MULTI-CHANNEL COPY =1,A SCOUT PROCESSOR, SO SET FLAG TO 1. STRT2 COPY A,MACH STORE MACHING FLAG COPY MDEFLG,A GET MODE FLAG INTO A-REG. JEQ A,$+3 IF DEFAULT MODE, GO TO QUERIES JMP *$+1 IF DEMAND MODE, EXECUTE WORD DMMOD TESTS JST MSGA OUTPUT TITL OF DIAG. WORD TITLE MESSAGE ADD. TITL QUERIES - DEFAULT MODE (DIAG. OR TECH TEST) ****************************** * * DIAG./TECH TEST * * QUERY: * * DIAGNOSTIC OR TECH TEST (D OR T)? * * SELECTION: * * D - SELECTS DIAG. * T - SELECTS TECH TEST * DEFAULT IS 'D' * ****************************** * QERY10 EQU $ COPY =0,A RESET INPUT FLAG COPY A,TEMP1 STORE FLAG COPY A,DGFLGX RESET DEFAULT DIAG. FLAG COPY A,PASSN RESET PASS NUMBER COPY A,ETLY2 RESET ERROR TALLY (TOTAL) JST MSGA OUTPUT QERY WORD QRYM10 'DIAGNOSTIC OR TECH TEST (D OR T)?' JST IDEC GET RESPONSE JNE X,QERY10 NUMERIC RESPONSE IS INCORRECT COPY IDCTM3,X GET INPUT COUNT JNE X,QERY10 A '0' INPUT IS INCORRECT QERY11 JST CHARCK CHECK FOR SPECIAL CHARS. JMP QERY10 UP ARROW JMP QERY10 BACK ARROW JMP QERY20 CR JMP QERY12 '#' JMP QERY10 ',' CLSN A,='D' DIAG.? JMP QERY13 YES, JUMP IMS DGFLGX SET FLAG FOR TECH TEST CLSN A,='T' TECH TEST? JMP QERY13 YES, GET TERMINATOR JMP QERY10 NO, BAD INPUT QERY12 COPY TEMP1,A GET INPUT FLAG JNE A,QERY10 CAN'T DEFAULT JMP QERY64 CAN DEFAULT QERY13 IMS TEMP1 SET INPUT FLAG JST IKB GET TERMINATOR JMP QERY11 CHECK FOR SPECIAL CHARS. * LPOOL TITL QUERIES - DEFAULT MODE (DEVICE ADD.) ****************************** * * DEVICE ADD. * * QUERY: * * DEVICE ADDRESS (:0D)?: * * SELECTION: * *  :01 - :1F * DEFAULT IS ':0D' * * IF = :00 OR > :1F THEN ERROR MESSAGE * DEVICE ADDRESS MUST BE :01 - :1F * ****************************** * QERY20 EQU $ COPY =0,A RESET INPUT FLAG COPY A,TEMP1 STORE FLAG COPY =-PRSIZE,A GET PARAMETER TABLE LENGTH JST MOVE SET QUERY PARAMETERS TO DEFAULT VALUES WORD PRAMSX FROM WORD PRAMS TO JST MSGA OUTPUT QERY WORD QRYM20 'DEVICE ADDRESS (:0D)?:' JST IHEX GET RESPONSE JEQ X,QERY22 IF ZERO, SEE WHY COPY X,DEVA STORE DEVICE ADD. SHIFT X,RO,5 CHECK FOR GREATER THAN :1F JNE X,QERY23 IF GREATER, ERROR IMS TEMP1 SET INPUT FLAG QERY21 JST CHARCK CHECK FOR SPECIAL CHARS. JMP QERY24 UP ARROW JMP QERY20 BACK ARROW JMP QERY30 CR JMP QERY25 '#' JMP QERY20 ',' JMP QERY20 ANYTHING ELSE QERY22 COPY HXTMP2,X GET INPUT COUNT JEQ X,QERY21 IF ZERO, CHECK TERMINATOR QERY23 JST MSGA OUTPUT ERROR MESSAGE WORD QERM20 'DEVICE ADD- RESS MUST BE :01 TO :1F' JMP QERY20 GO TRY AGAIN QERY24 COPY TEMP1,A GET INPUT FLAG JNE A,QERY20 CAN'T GO BACK JMP QERY10 GO BACK QERY25 COPY TEMP1,A GET INPUT FLAG JNE A,QERY20 CAN'T DEFAULT JMP QERY64 CAN DEFAULT * LPOOL TITL QUERIES - DEFAULT MODE (BOARD ID) ****************************** * * SCOUT BOARD ID * * QUERY: * * SCOUT BOARD ID (:6)?: * * SELECTION: * * :6 - :E * DEFAULT IS ':6' * * IF <:6 OR >:E THEN ERROR MESSAGE * BOARD ID MUST BE :6 TO :E * ***************************** * QERY30 EQU $ COPY MACH,A GET MACHINE FLAG JEQ A,QERY35 IF NM4, JUMP COPY BDIDX,A GET DEFAULT COPY A,BDID SET INTO TABLE COPY =0,Q RESET INPUT FLAG JST MSGA OUTPUT QUERY WORD QRYM30 'SCOUT BOARD ID (:6)?:' JST IHEX GET INPUT JEQ X,QERY32 IF ZERO, SEE WHY COPY X,BDID STORE BOARD ID CSK X,=:E DO RANGE CHECK CSK X,=:6 DITTO JMP QERY33 OUT OF RANGE NOP ADD =1,Q SET INPUT FLAG QERY31 JST CHARCK CHECK FOR SPECIAL CHARS. JMP QERY34 UP ARROW JMP QERY30 BACK ARROW JMP QERY35 CR JMP QERY36 '#' JMP QERY30 ',' JMP QERY30 ANYTHING ELSE QERY32 COPY HXTMP2,X GET INPUT COUNT JEQ X,QERY31 IF ZERO, JUMP QERY33 JST MSGA OUTPUT ERROR MESSAGE WORD QERM30 'BOARD ID MUST BE :6 TO :E' JMP QERY30 TRY AGAIN QERY34 JNE Q,QERY30 CAN'T JMP QERY20 CAN QERY35 JST DAGCHK WHICH WAY JMP QERY40 DIAGNOSTIC JMP QERY70 TECH TEST QERY36 JNE Q,QERY30 CAN'T JMP QERY64 CAN * LPOOL TITL QUERIES - DEFAULT MODE (NUMBER OF BOARDS) ****************************** * * NUMBER OF BOARDS * * QUERY: * *  NUMBER OF BOARDS (1)? * * SELECTION: * * 1 - 31 * DEFAULT IS '1' * * IF = 0 OR > 31 THEN ERROR MESSAGE * NUMBER OF BOARDS MUST BE 1 TO 31 * * IF TOO MANY BOARDS FOR STARTING DEVICE ADD. THEN ERROR * TOO MANY BOARDS FOR DEVICE ADDRESS * ****************************** * QERY40 EQU $ COPY =0,A RESET INPUT FLAG COPY A,TEMP1 STORE FLAG  COPY NUMBX,A GET NUMBER OF BOARDS (DEFAULT) COPY A,NUMB STORE DEFAULT NUMBER JST MSGA OUTPUT QERY WORD QRYM40 'NUMBER OF BOARDS (1)?' JST IDEC INPUT RESPONSE JEQ X,QERY42 IF ZERO, SEE WHY COPY X,NUMB STORE NUMBER EXCH X,A SWAP NUMBER/TERMINATOR CHAR. CSK A,=BRDS IS IT GREATER THAN MAX. # OF BRDS. JMP $+2 NO, CONT. JMP QERY43 YES, ERROR ADD DEVA,A CHECK BOARDS VERSUS DEVICE ADD. RATIO CSK A,=BRDS+1 TOO MANY BOARDS FOR STARTING ADD.? JMP $+2 NO, CONT. JMP QERY44 YES, ERROR EXCH X,A SWAP TERMINATOR CHAR./GARBAGE IMS TEMP1 SET INPUT FLAG QERY41 JST CHARCK CHECK FOR SPECIAL CHARS. JMP QERY45 UP ARROW JMP QERY40 BACK ARROW JMP QERY50 CR JMP QERY46 '#' JMP QERY40 ',' JMP QERY40 ANYTHING ELSE IS STUPID QERY42 COPY IDCTM3,X GET INPUT COUNT JEQ X,QERY41 IF ZERO, CHECK TERMINATOR QERY43 JST MSGA OUTPUT ERROR MESSAGE WORD QERM40 'NUMBER OF BOARDS MUST BE 1 TO 31' JMP QERY40 1 MORE TIME QERY44 JST MSGA OUTPUT ERROR MESSAGE WORD QERM41 'TOO MANY BOARDS FOR DEVICE ADDRESS' JMP QERY40 AGAIN 1 MORE TIME QERY45 COPY TEMP1,A GET INPUT FLAG JNE A,QERY40 CAN'T GO BACK COPY MACH,A GET MACHINE FLAG JEQ A,$+2 IF NM4, JUMP JMP QERY30 GO BACK ONE JMP QERY20 GO BACK TWO QERY46 COPY TEMP1,A GET INPUT FLAG JNE A,QERY40 CAN'T DEFAULT JMP QERY64 CAN DEFAULT * LPOOL TITL QUERIES - DEFAULT MODE (MAJOR TESTS) ****************************** * * MAJOR TESTS * * QUERY: * * TES. TS (A,B,C)? * * SELECTION: * * A - SELECTS TEST A * B - SELECTS TEST B * C - SELECTS TEST C * D - SELECTS TEST D * DEFAULT IS 'A' THROUGH 'C' * ****************************** * QERY50 EQU $ COPY =0,A RESET INPUT FLAG COPY A,TEMP1 STORE FLAG COPY =-MJTSZ,A GET TEST TABLE LENGTH JST MOVE RESET TEST SELECTION TO DEFAULT VALUES WORD TESTSX FROM  WORD TESTS TO COPY =-MJTSZ,A GET NEGATIVE NUMBER OF TESTS COPY A,TEMP2 STORE COUNT JST MSGA OUTPUT QERY WORD QRYM50 'TESTS (A,B,C)?' QERY51 JST IDEC GET AN INPUT JNE X,QERY50 DECIMAL INPUT IS STUPID JST CHARCK CHECK FOR SPECIAL CHARS. JMP QERY52 UP ARROW JMP QERY50 BACK ARROW JMP QERY60 CR JMP QERY53 '#' JMP QERY51 ',' SUB ='A',A SEE IF INPUT IS JLT A,QERY50 BETWEEN A AND C INCLUSIVE CSK A,=MAJTSZ E - Z? JMP $+3 IF NOT, CONT. NOP JMP QERY50 IF SO, ERROR IMS TEMP1 SET INPUT FLAG ADD =TESTBL,A ADD IN TEST ADD. OFFSET COPY A,X PUT INTO X COPY 0(X),X X = ADD. OF TEST COPY TEMP2,A GET INPUT COUNT ADD =TESTS+MJTSZ,A A = TABLE ENTRY ADD. EXCH A,X SWAP TABLE ENTRY ADD./TEST ADD. COPY A,0(X) STORE TEST ADD. IN TABLE COPY =-1,A SET TERMINATOR IN A COPY A,1(X) STORE TERMINATOR IN A IMS TEMP2 INC. INPUT COUNT JMP QERY51 GO FOR MORE JMP QERY50 TOO MANY INPUTS IDIOT!! QERY52 COPY TEMP1,A GET INPUT FLAG JNE A,QERY50 CAN'T GO BACK JMP QERY40 GO BACK YOUNG MAN QERY53 COPY TEMP1,A GET INPUT FLAG JNE A,QERY50 CAN'T DEFAULT JMP QERY64 DEFAULT * LPOOL TITL QUERIES - DEFAULT MODE (CTRL. WORD) ****************************** * * CTRL. WORD * * QUERY: * * CONTROL WORD (:00)?: * * SELECTION: * * :00 - :7F * * BIT HEX OPTION * 0 :01 SUPPRESS ERROR REPORT * 1 :02 HALT AFTER 1 PASS * 2 :04 HALT ON ERROR *  3 :08 LP * 4 :10 ERROR TALLIES * 5 :20 DUMP RX BUF. * 6 :40 SCOUT LOOPBACK ENABLE * 0-NO, 1-YES * DEFAULT IS :00 * * IF > :7F THEN ERROR MESSAGE * CONTROL WORD MUST BE :00 TO :7F * ****************************** * QERY60 EQU $ COPY =0,A RESET INPUT FLAG COPY A,TEMP1 STORE FLAG COPY CNTWDX,A GET DEFAULT CONTROL WORD COPY A,CNTWD STORE DEFAULT JST MSGA OUTPUT QERY WORD QRYM60 'CONTROL WORD (:00)?:' JST IHEX INPUT RESPONSE FROM THE BOZO COPY X,CNTWD STORE CTRL. WORD SHIFT X,RO,7 MUST BE :00 TO :7F JNE X,QERY61 IF GREATER THAN :7F, ERROR COPY HXTMP2,X GET INPUT COUNT JEQ X,$+2 IF ZERO, NO INPUT IMS TEMP1 SET INPUT FLAG JST CHARCK CHECK FOR SPECIAL CHARS. JMP QERY62 UP ARROW JMP QERY60 BACK ARROW JMP QERY64 CR JMP QERY63 '#' JMP QERY60 ',' JMP QERY60 ANYTHING ELSE IS STUPID QERY61 JST MSGA OUTPUT ERROR MESSAGE WORD QERM60 'CONTROL WORD MUST BE :00 TO :7F' JMP QERY60 TRY THE BOZO AGAIN QERY62 COPY TEMP1,A GET INPUT FLAG JNE A,QERY60 CAN'T GO BACK JMP QERY50 GO BACK QERY63 COPY TEMP1,A GET INPUT FLAG JNE A,QERY60 CAN'T DEFAULT QERY64 COPY =0,X INITIALIZE LP FLAG FOR CRT/TTY ONLY COPY CNTWD,A GET CTRL. WORD TBIT LPR,A LP? JF OV,$+2 IF NO, JUMP COPY =1,X SET LP FLAG FOR CRT/TTY AND LP COPY X,LPFLG STORE LP FLAG JMP TCTL10 GO WEST YOUNG MAN * LPOOL TITL QUERIES - DEFAULT MODE (TECH TEST) ****************************** * * TECH TEST QUERY * * QUERY: * * TECH TEST * ENTER: * FC,CHNL,RTS/RS,DTR// TR,SAD,LEN,DCLEN,PAT,CHADD * ? * * SELECTION: * FC - FUNCTION - 0 - NOP *  1 - TX * 2 - TX/RX * 3 - INITIALIZE *  4 - ABORT * 5 - ENABLE SCC INTS. *  6 - RESET SCC/MICRODIA. * 7 - MICRODIA. LED *  8 - SENSE BUSY * 9 - SCOUT LOOPBACK ENABLE * A - SCOUT 'SAL' INSTR. * DEFAULT IS '0' * * CHNL - CHNL. - A - CHNL. A * B - CHNL. B * DEFAULT IS 'A' * * RTS/RS - RTS/RS BIT - 0 - OFF * 1 - ON * DEFAULT IS '1' * * DTR/TR - DTR/TR BIT - 0 - OFF * 1 - ON *  DEFAULT IS '1' TITL * SAD - SECONDARY - 0 - ALL ADDS. ACCEPTED * ADD. 1 - MATCH ON SEC. ADD. ONLY * SELECT DEFAULT IS '1' * * LEN - PRIMARY BUFF. - 1 TO :80 BYTES * LENGTH (BYTES) DEFAULT IS ':80' BYTES * * DCLEN - SECONDARY BUFF. - 0 TO :80 BYTES *  LENGTH (BYTES) 0 - INDICATES NO DATA CHAIN * (DATA CHAIN) DEFAULT IS ':80' BYTES * * PAT - TEST PATTERN - :00 TO :FF * DEFAULT IS ':5A' * * CHADD  - CHNL. ADD. - :00 TO :FE * (INITIALIZE) DEFAULT IS ':F8' * ****************************** * QERY70 EQU $ COPY =0,A SET A TO ZERO COPY A,TEMP1 RESET INPUT FLAG OUT A,CONSL;SENSE RESET SENSE SWITCH COPY =1,A SET CONTROL WORD - NO ERROR REPORTS COPY A,CNTWD STORE CONTROL WORD COPY =-TCHPSZ,A GET TECH TEST PARAMETER TABLE SIZE JST MOVE RESET PARAMETERS WORD STRCHX FROM WORD STRCH TO JST MSGA OUTPUT TECH TEST QERY WORD QRYM70 'FC,CHNL,RTS/RS,DTR/TR,SAD,LEN,DCLEN,PAT,CHADD' * JST INTCH GET 'FC' - FUNCTION JMP QERY71+1 DEFAULT CSK A,=11 DO RANGE CHECK JMP QERY71 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM70 'FUNCTION MUST BE 0 TO A' JMP QERY70 GO TRY AGAIN QERY71 COPY A,TFC STORE SELECTED FUNCTION CLSN A,=10 SAL?  JMP $+2 YES, CHECK MACHINE TYPE JMP QERY711 NO, CONTINUE COPY MACH,A GET MACHINE TYPE JNE A,QERY711 IT'S A SCOUT! JST MSGA OUTPUT ERROR MESSAGE WORD QERM711 'FUNCTION 'A' IS FOR SCOUT ONLY' JMP QERY70 TRY AGAIN QERY711 JST CRCHK CHECK FOR CR * JST INTCH GET 'CHNL' - CHNL. JMP QERY72+1 DEFAULT SUB =:A,A SUBTRACT OFFSET CSK A,=2 DO RANGE CHECK JMP QERY72 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM71 'CHANNEL A OR B ONLY' JMP QERY70 GO TRY AGAIN QERY72 COPY A,CHAN: STORE SELECTED CHNL. JST CRCHK CHECK FOR CR * JST INTCH GET 'RTS/RS' - RTS/RS BIT JMP QERY73+4 DEFAULT CSK A,=2 DO RANGE CHECK JMP QERY73 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM72 'RTS/RS = RESET-0, SET-1' JMP QERY70 GO TRY AGAIN QERY73 CBIT 0,A COMPLEMENT BIT SHIF0 T A,LO,RTS:RS SHIFT INTO PLACE OR BITS,A 'OR' IN BITS COPY A,BITS STORE RTS/RS SETTING JST CRCHK CHECK FOR CR * JST INTCH GET 'DTR/TR' - DTR/TR BIT JMP QERY74+4 DEFAULT CSK A,=2 DO RANGE CHECK JMP QERY74 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM73 'DTR/TR = RESET-0, SET-1' JMP QERY70 GO TRY AGAIN QERY74 CBIT 0,A COMPLEMENT BIT SHIFT A,LO,DTR:TR SHIFT INTO PLACE OR BITS,A 'OR' IN RTS:RS BIT COPY A,BITS STORE DTR/TR SETTING JST CRCHK CHECK FOR CR * JST INTCH GET 'SAD' - SECONDARY ADD. SELECT JMP QERY76+4 DEFAULT CSK A,=2 DO RANGE CHECK JMP QERY76 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM74 'SECONDARY ADDRESS MATCH = YES-0, NO-1' JMP QERY70 GO TRY AGAIN QERY76 CBIT 0,A COMPLEMENT BIT SHIFT A,LO,SAD: SHIFT INTO PLACE OR BITS,A 'OR' IN RTS:RS AND DTR:TR BITS COPY A,BITS STORE BITS JST CRCHK CHECK FOR CARRAIGE RETURN * JST INTCH GET 'LEN' - PRIMARY BUF. LENGTH IN BYTES JMP QERY77+1 DEFAULT JEQ A,$+4 IF ZERO, IT'S BAD CSK A,=:81 DO RANGE CHECK JMP QERY77 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM75 'PRIMARY BUFFER LENGTH MUST BE :00 TO :80' JMP QERY70 GO TRY AGAIN QERY77 COPY A,LEN STORE LENGTH JST CRCHK CHECK FOR CR * JST INTCH GET 'DCLEN' - DATA CHAIN BUF. LENGTH JMP QERY78+1 DEFAULT CSK A,=:81 DO RANGE CHECK JMP QERY78 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM76 'DATA CHAIN BUFFER LENGTH MUST BE :00 TO :80' JMP QERY70 GO TRY AGAIN QERY78 COPY A,DCLEN STORE LENGTH JST CRCHK CHECK FOR CR * JST INTCH GET 'PAT' - TEST PATTERN JMP QERY79+1 DEFAULT CSK A,=:100 DO RANGE CHECK JMP QERY79 OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM77 'TEST PATTERN MUST BE :00 TO :FF' JMP QERY70 GO TRY AGAIN QERY79 COPY A,PAT STORE PATTERN JST CRCHK CHECK FOR CR * JST INTCH GET 'CHADD' - CHNL. ADD. JMP QERY7A+1 DEFAULT CSK A,=:FF DO RANGE CHECK JMP QERY7A OK NOP JST MSGA OUTPUT ERROR MESSAGE WORD QERM78 'CHANNEL ADDRESS MUST BE :00 TO :FE' JMP QERY70 GO TRY AGAIN QERY7A COPY A,CHADD STORE CHNL. ADD. JST CRCHK CHECK FOR CR JST MSGA OUTPUT ERROR MESSAGE WORD QERM79 'TOO MANY TECH TEST PARAMETERS' JMP QERY70 GO TRY AGAIN * LPOOL TITL QUERIES - DEMAND MODE (DEVICE ADD.) ****************************** * * DEVICE ADD. * * A REG. CONTAINED THE (STARTING) DEVICE ADD. * * SELECTION: * * :0001 TO :001F *  DEFAULT IS :000D * * IF > :001F THEN ERROR * 'BAD0' * WILL BE DISPLAYED IN THE CDR * ****************************** * DMMOD EQU $ COPY =-PRSIZE,A GET PARAMETER TABLE LENGTH JST MOVE RESET PARAMETES TO DEFAULT VALUES WORD PRAMSX FROM WORD PRAMS TO COPY TEMP1,A GET THE DEVICE ADD. JEQ A,DMMOD1 IF ZERO, THEN DEFAULT COPY A,DEVA STORE THE (STARTING) DEVICE ADD. SHIFT A,RO,5 IS IT GREATER THAN :001F? JEQ A,DMMOD1 NO, GO ONWARD COPY =BAD:DA,A ERROR - INCORRECT DEVICE ADD. BAD SELP A,CONSL;CDR DISPLAY ERROR CODE HLT HALT HERE JMP $-1 CAN'T DO ANYTHING STUPID TITL QUERIES - DEMAND MODE (NUMBER OF BOARDS) ****************************** * * NUMBER OF BOARDS * * X REG. CONTAINED THE NUMBER OF BOARDS * * SELECTION: * * :0001 TO :001F * DEFAULT IS :0001 * * IF > :001F THEN ERROR * OR * IF 'TOO MANY BOARDS FOR DEVICE ADD.' THEN ERROR * 'BAD1' * WILL BE DISPLAYED IN THE CDR * ****************************** * DMMOD1 EQU $ COPY TEMP2,A GET THE 1 NUMBER OF BOARDS JEQ A,DMMOD2 IF ZERO, DEFAULT COPY A,NUMB STORE NUMBER ADD DEVA,A ADD (STARTING) DEVICE ADD. CSK A,=BRDS+1 SHOULD BE <= :0020 JMP DMMOD2 IT'S A OK JOE JMP $+2 IT'S BAD JOE JMP DMMOD2 IT'S A OK JOE COPY =BAD:BN,A ERROR - INCORRECT NUMBER OF BOARDS JMP BAD DISPLAY ERROR TITL QUERIES - DEMAND MODE (CTRL. WORD) ****************************** * * CTRL. WORD * * CONSOLE DATA REG. CONTAINS THE CTRL. WORD * * SELECTION: * * :0000 TO :007F * * BIT HEX OPTION * 0 :0001 SUPPRESS ERROR REPORT * 1 :0002 HALT AFTER 1 PASS * 2 :0004 HALT ON ERROR * 3 :0008 LP * 4 :0010 ERROR TALLIES * 5 :0020 DUMP RX BUF. * 6 :0040 SCOUT LOOPBACK ENABLE *  0-NO, 1-YES * DEFAULT IS :0000 * * IF > :007F THEN ERROR * 'BAD2' * WILL BE DISPLAYED IN THE CDR * ****************************** * DMMOD2 EQU $ IN CONSL;CDR,A GET CDR CONTENTS COPY A,X PUT INTO X COPY X,CNTWD SAVE CTRL. WORD  SHIFT X,RO,7 DO RANGE CHECK ON CTRL. WORD JEQ X,$+3 IF GOOD, JUMP COPY =BAD:CW,A ERROR - INCORRECT CTRL. WORD JMP BAD DISPLAY ERROR TBIT LPR,A LP? JF OV,$+2 IF NO, JUMP COPY =-1,X SET LP FLAG TO LP ONLY COPY X,LPFLG STORE LP FLAG JMP DMMOD3 DO IT TO IT TITL QUERIES - DEMAND MODE (BOARD ID) ****************************** * * SCOUT BOARD ID * * Q REG. CONTAINS THE (STARTING) BOARD ID * * SELECTION: * * :0006 TO :000E * DEFAULT IS :0006 * * IF <:6 OR >:E THEN ERROR * 'BAD3' * WILL BE DISPLAYED IN THE CDR * ****************************** * DMMOD3 EQU $ COPY MACH,Y GET MACHINE TYPE JEQ Y,TCTL10 IF NM4, JUMP JEQ Q,TCTL10 IF ZERO, DEFAULT COPY Q,BDID SAVE IT CSK Q,=:E DO RANGE CHECK CSK Q,=:6 DITTO JMP $+3 OUT OF RANGE NOP JMP TCTL10 OK COPY =BAD:ID,A ERROR - INCORRECT BOARD ID JMP BAD DISPLAY ERROR * LPOOL TITL TEST CTRL. (DEVICE ADD. MODIFICATION) ****************************** * * TEST CTRL. - DEVICE ADD. MODIFICATION * * THIS SECTION WILL INITIALIZE THE BOARD COUNT * (NUMBER OF BOARDS) AND THE STARTING DEVICE * ADD. (FOR MULTIPLE BOARDS). THE SCC I/O * INSTRUCTIONS ARE MODIFIED WITH THE NEW * DEVICE ADD. AND CONSOLE INT. ENABLED. * ****************************** * TCTL10 EQU $ COPY BDID,A GET STARTING BOARD ID COPY A,IDNUM SET FIRST ONE COPY NUMB,A GET NUMBER OF BOARDS UNDER TEST NEG A MAKE NEGATIVE FOR BOARD COUNT COPY A,BCNT STORE BOARD COUNT COPY DEVA,A GET (STARTING) DEVICE ADD.  COPY A,DEVADD STORE DEVICE ADD. COPY =0,A RESET ERRORS TOTAL (1 PASS) COPY A,ETLY1 STORE TOTAL COPY PASSN,A GET PASS NUMBER  CSK A,=10000 IS IT GREATER THAN 10000? IMS PASSN NO, INC. PASS NUMBER NOP * TCTL11 COPY DEVADD,A GET THE CURRENT DEVICE ADD.  SHIFT A,LO,3 SHIFT FOR INSERTION COPY A,TEMP1 SAVE SHIFTED CURRENT DEVICE ADD. COPY =-DASIZ,A GET I/O TABLE SIZE COPY A,TEMP2 SAVE TABLE SIZE COPY =DAFRST,A GET I/O TABLE ADD. COPY A,TEMP3 SAVE TABLE ADD. TCTL12 COPY TEMP3,X GET TABLE ADD. COPY 0(X),X GET I/O INSTRUCTION ADD. COPY =-:F9,A MASK FOR I/O INSTRUCTION & FUNCTION CODE ONLY AND 0(X),A 'AND' OUT OLD DEVICE ADD. OR TEMP1,A 'OR' IN NEW DEVICE ADD. COPY A,0(X) STORE NEW I/O INSTRUCTION IMS TEMP3 INC. TABLE ADD. IMS TEMP2 INC. TABLE COUNT 2  JMP TCTL12 LOOP FOR MORE GOODIES!! * SBIT CI:,S ENABLE CONSOLE INT. SBIT GI:,S ENABLE INTS. COPY MDEFLG,A GET MODE FLAG JNE A,TCTL13 IF DEMAND MODE, JUMP COPY NUMB,A GET NUMBER OF BOARDS UNDER TEST CLSN =1,A IS IT JUST 1 BOARD? JMP TCTL14 YES, DO TESTING TCTL13 COPY =2,A SET TIME OUT FOR 2 SECONDS JST TIMEST SET TIME JST SENBSY NO, SENSE FOR BAD BOARD JMP TCTL20 BOARD IS GOOD, DO TESTING JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED JMP TCTL23 BOARD IS BAD, DO NEXT BOARD * TCTL14 JST DAGCHK DIAG. OR TECH TEST? JMP TCTL20 DIAG. JMP TECHT TECH TESTS * LPOOL TITL TEST CTRL. (TEST EXECUTION) ****************************** * * TEST CTRL. - TEST EXECUTION AND CTRL. * * THIS SECTION WILL EXECUTE THE * REQUESTED DIAG. TESTS. ALSO * THE PASS NUMBER AND ERROR TALLIES * (IF SO DESIRED) WILL BE PRINTED IN * THIS SECTION. * ****************************** * TCTL20 EQU $ JST MSGA PRINT PASS MESSAGE WORD PASSMG 'PASS ' COPY PASSN,A GET PASS NUMBER JST ODEC PRINT PASS NUMBER COPY =TESTS,A GET WORKING TEST TABLE ADD. COPY A,TSTADD STORE TEST TABLE ADD. TCTL21 COPY TSTADD,X GET TEST TABLE ADD. COPY 0(X),X GET TEST ADD. JLT X,TCTL23 IF END OF TESTS JUMP LIKE A RABBIT JMP 0(X) EXECUTE THE REQUESTED TEST TCTL22 IMS TSTADD INC. THE TEST TABLE ADD. JMP TCTL21 LOOP LOOP LOOP LOOP LOOP TCTL23 IMS DEVADD INC. THE DEVICE ADD. FOR NEXT BOARD IMS IDNUM INCREMENT BOARD ID NUM. IMS BCNT INC. BOARD COUNT JMP TCTL11 IF MORE, LOOP BACK * COPY CNTWD,A GET THE CTRL. WORD TBIT ETL,A ERROR TALLIES WANTED? JF OV,TCTL24 IF NOT, SKIP PRINTING THEM JST MSGA PRINT THE PASS NUMBER WORD PASSMG 'PASS ' COPY PASSN,A GET THE PASS NUMBER JST ODEC PRINT FOR THE WORLD JST MSGA PRINT GRAND TOTAL MESSAGE WORD ETMS10 '(GRAND TOTAL) ERRORS THIS PASS ' COPY ETLY1,A GET GRAND TOTAL-ERRORS THIS PASS JST ODEC PRINT IT JST MSGA PRINT ERROR TALLY MESSAGE WORD ETMS20 '(GRAND TOTAL) ERRORS TOTAL' COPY ETLY2,A GET GRAND TOTAL ERRORS JST ODEC PRINT IT JST CRLF DO IT * TCTL24 COPY =FINI,A SET CDR DISPLAY FOR ALL DONE SELP A,CONSL;CDR SEND FOR WHO WISHES TO SEE IT COPY CNTWD,A GET THE CTRL. WORD TBIT RUN,A RUN CONTINUOUSLY? JT OV,$+2 NO, STOP HERE JMP TCTL10 YES, START ALL OVER AGAIN COPY MDEFLG,A GET THE MODE FLAG JNE A,$+2 IF DEMAND MODE, JUMP JMP STRTUP OTHERWISE, GO TO BEGINNING HLT WAIT HERE FOLKES! JMP $-1 WE CAN'T GO ANY PLACE STUPID * LPOOL TITL MAJOR TESTS (TEST A) ****************************** * * TEST A - MAJOR TEST: TESTS CHNL. A ONLY * * CALLING SEQUENCE: * JMP TESTA * ****************************** * TESTA EQU $ MAJOR TEST A COPY =1,A SET CDR TEST DISPLAY SELP A,CONSL;CDR SEND TEST # TO CDR COPY =0,A SET CHNL. FOR A COPY A,CHAN: STORE CHNL. * COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY A,CB:TX SET TX CTRL. BLK. ADD. COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY A,CB:RX SET RX CTRL. BLK. ADD. COPY =A:CBIN,A GET CHNL. A INTZ. CTRL. BLK. ADD. COPY A,CB:IN SET NOP/INITZ. CTRL. BLK. ADD. * COPY =SPACE:%8+'A',A SET TTY/CRT&LP TEST TO A COPY =TBI:A,X SET TBI ADD. (CHNL. A) * TEST COPY X,TBIADD SAVE TBI ADD. COPY A,TNUM: STORE CURRENT TEST JST MSGA OUTPUT TEST TITLE WORD TSTNUM 'TEST ' JST INITL DO INITIALIZE TEST JST TXRXTS DO TX/RX TEST JST DCHTST DO3  DATA CHAINING TEST JST UISTEST DO UIS TEST JMP TCTL22 EXIT TITL MAJOR TESTS (TEST B) ****************************** * * TEST B - MAJOR TEST: TESTS CHNL. B ONLY * * CALLING SEQUENCE: * JMP TESTB * ****************************** * TESTB EQU $ MAJOR TEST B COPY =2,A SET CDR TEST DISPLAY SELP A,CONSL;CDR SEND TO CDR COPY =1,A SET CHNL./ADD. FLAG SELECT COPY A,CHAN: STORE CHNL. * COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY A,CB:TX SET TX CTRL. BLK. ADD. COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY A,CB:RX SET RX CTRL. BLK. ADD. COPY =B:CBIN,A GET CHNL. B INITZ. CTRL. BLK. ADD. COPY A,CB:IN SET NOP/INITZ. CTRL. BLK. ADD. * COPY =SPACE:%8+'B',A SET CRT/TTY&LP TEST TO B COPY =TBI:B,X SET TBI ADD. (CHNL. B) JMP TEST DO TEST * LPOOL TITL MAJOR TESTS (TEST C) ****************************** * * TEST C - MAJOR TEST: TESTS CHNL. A AND *  CHNL. B SIMULTANEOUSLY * * CALLING SEQUENCE: * JMP TESTC * ****************************** * TESTC EQU $ TEST C COPY =4,A SET CDR DISPLAY TO TEST C SELP A,CONSL;CDR SEND TO CDR COPY =SPACE:%8+'C',A GET TEST CODE COPY =INZ:C0,X GET 'INITIALIZE' SUB. TO TEST C * TESTCD COPY A,TNUM: STORE TEST LETTER COPY X,INZSUB STORE SUB. ADD. COPY =0,A SET INITIAL CHNL. TO A COPY A,CHAN: STORE CHNL. JST MSGA OUTPUT TEST TITLE WORD TSTNUM 'TEST ' JST INIT:C DO INITIALIZE TEST JST TXRX:C DO TX/RX TEST JST DACH:C DO DATA CHAINING TEST JST UIS:C DO UIS TEST JMP TCTL22 EXIT TITL MAJOR TESTS (TEST D) ****************************** * * TEST D - MAJOR TEST: TESTS CHNL. A TO CHNL. B AND * CHNL. B TO CHNL. A SIMULTANEOUSLY. * * CALLING SEQUENCE: * JMP TESTD * ****************************** * TESTD EQU $ MAJOR TEST D COPY =:D,A SET CDR TEST DISPLAY SELP A,CONSL;CDR SEND TO CDR COPY =SPACE:%8+'D',A SET TEST CODE TO D COPY =INZ:D0,X GET INITIALIZE SUB. ADD. JMP TESTCD DO TESTING * LPOOL TITL MINOR TESTS (INITIALIZE - TESTS C,D) ****************************** * * TEST C - * TEST D - INITIALIZE TEST: TESTS THE ABILITY TO RESET * AND INITIALIZE THE SCC. * * FIRST, A RESET/INITIALIZE MICRODIAG. COM. *  IS SENT TO THE SCC. IF THE SCC DOES NOT RESPOND * 'NOT BUSY' AFTER A DELAY OF 1 SECOND, A * 'MICRODIAG. FAILED' ERROR IS REPORTED. * * SECOND, AN INITIALIZE COM. WILL BE SENT TO BOTH * CHNLS. OF THE SCC WITH THE ADD. SELECT BIT * 'OFF', CHNL. ADD. FIELD SET TO :E6 AND THE DTR/TR * AND RTS/RS BITS 'OFF'. THEN A NOP COM. WILL BE SENT * TO BOTH CHNLS. OF THE SCC. IN THE RETURNED NOP * STATUSES, THE DSR/DM BIT SHOULD BE RESET AND THE DCD/RR * AND CTS/CS BITS SHOULD BE SET. * * THIRD, AN INITIALIZE COM. WILL BE SENT TO BOTH *  CHNLS. OF THE SCC WITH THE ADD. SELECT BIT * 'ON', CHNL. ADD. FIELD SET TO THE DEFAULT * AND THE DTR/TR AND RTS/RS BITS 'ON'. THEN A NOP * COM. WILL BE SENT TO BOTH CHNLS. OF THE SCC. * THE DSR/DM, DCD/RR AND CTS/CS BITS IN THE RETURNED STATUSES * SHOULD BE SET. * ****************************** * INIT:C ENT INITIALIZE TEST IN CONSL;CDR,A GET CONSOLE DISPLAY AND =:F,A MASK FOR TEST DISPLAY OR =:10,A 'OR' IN INITALIZE DISPLAY SELP A,CONSL;CDR SEND TO CDR4  JST MSGA OUTPUT MINOR TEST TITLE WORD INIMSG 'INITIALIZE' * COPY MACH,A GET MACHINE JEQ A,IN05:C IF NM4, JUMP COPY IDNUM,A GET CURRENT ID XNX A INDEX NEXT SAL 2,0 HERE IT IS SHIFT A,RO,3 SHIFT INTO POSITION CSK A,DEVADD DO RANGE CHECK NOP JMP $+2 BAD JMP IN05:C GOOD COPY =ER046,A 'BAD DEVICE ADDRESS' JST ERROR DISPLAY ERROR * IN05:C COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST MICLED SET MICRODIAG. LED JST SENBSY IS BUSY FLAG SET? JMP $+2 NO, ERROR JMP $+3 YES IT IS, JUMP  COPY =ER041,A 'BUSY FLAG DIDN'T SET' JST ERROR DISPLAY ERROR * JST SEL RESET SCC/INITIATE MICRODIAG. JST SENBSY SENSE SCC BUSY JMP $+5 IT IS NOT BUSY, JUMP JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =ER003,A 'MICRODIAG. FAILED' JST ERROR DISPLAY ERROR REPORT * COPY =1%SAD:,A SET ADD. SELECT FLAG SBIT DTR:TR,A DTR/TR 'OFF' SBIT RTS:RS,A RTS/RS 'OFF' COPY A,BITS STORE BITS COPY =:E6,A GET CHNL. ADD. FIELD COPY A,CHADD STORE CHNL. ADD. COPY =:8000,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB. ADD. JST 0(X) DO INITIALIZE I/O JMP *INIT:C 'SCC INT. TIMED OUT' JST NOP0:C ISSUE NOP COMS. JMP *INIT:C 'SCC INT. TIMED OUT' * COPY =-2,A SET LOOP COUNT COPY A,TEMP3 STORE COUNT COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY =TBI:A,X GET CHNL. A TBI ADD. IN10:C COPY A,CB1 STORE CTRL. BLK. ADD. COPY X,TB:AD STORE TBI ADD. FOR 'ERROR' COPY TB:INS(X),A GET NOP STATUS TBIT DSR:DM,A DSR/DM BIT SHOULD BE RESET JT OV,IN11:C IF SET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE RESET JT OV,IN11:C IF SET, ERROR TBIT CTS:CS,A CTS/CS BIT SHOULD BE RESET JF OV,$+3 IF RESET, JUMP IN11:C COPY =ER002,A 'DSR/DM, DCD/RR OR CTS/CS BIT DID NOT RESET' JST ERROR DISPLAY ERROR * COPY =B:CBIN,A GET CHNL. B CTRL. BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. IMS TEMP3 INC. LOOP COUNT JMP IN10:C DO CHNL. B CHECK OUT * COPY =0,A RESET ADD. SELECT FLAG COPY A,BITS DTR/TR, RTS/RS AND SEC. ADD. BITS 'ON' COPY =:F8,A SET CHNL. ADD. FIELD TO DEFAULT COPY A,CHADD STORE CHNL. ADD. COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB. ADD. JST 0(X) DO INIITZ. I/O JMP *INIT:C 'SCC INT. TIMED OUT' JST NOP0:C ISSUE NOP COMS. JMP *INIT:C 'SCC INT. TIMED OUT' * COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP3 STORE COUNT COPY =A:CBIN,A GET CHNL. A CTRL. BLK. COPY =TBI:A,X GET CHNL. A TBI ADD. IN20:C COPY A,CB1 STORE CTRL. BLK. ADD. FOR 'ERROR' COPY X,TB:AD STORE TBI ADD. FOR 'ERROR' COPY TB:INS(X),A GET NOP STATUS TBIT DSR:DM,A DSR/DM BIT SHOULD BE SET JF OV,IN30:C IF RESET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE SET JF OV,IN30:C IF RESET, ERROR TBIT CTS:CS,A CTS/CS BIT SHOULD BE SET JT OV,$+3 IF SET, JUMP IN30:C COPY =ER021,A 'DSR/DM, DCD/RR OR CTS/CS BIT DID NOT SET' JST ERROR DISPLAY ERROR REPORT * COPY =B:CBIN,A GET CHNL. B CTRL. BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. IMS TEMP3 INC. LOOP COUNT JMP IN20:C DO CHNL. B CHECK OUT JMP *INIT:C EXIT * INZSUB WORD INZ:C0 INITIALIZE SUB. ADD. * LPOOL TITL MINOR TESTS (TX/RX - TESTS C,D) ****************************** * * TXRX:C - TX/RX TEST: TESTS THE ABILITY OF THE SCC * TO TX AND TO RX DATA USING BOTH CHNLS. *  WITH NO DATA CHAINING. * * THE MAJOR PORTION OF TESTING IS DONE USING THE * SUBROUTINE 'TRRC:C'. * 5 ****************************** * TXRX:C ENT TX/RX TEST IN CONSL;CDR,A GET CDR DISPLAY AND =:F,A MASK FOR TEST ONLY OR =:20,A 'OR' IN TXRX TEST SELP A,CONSL;CDR SEND TO CDR JST MSGA OUTPUT MINOR TEST TITLE WORD TRRCMG 'TX/RX' COPY =:80,A SET PRIMARY BUF. LENGTH TO 128 BYTES COPY A,LEN SET LENGTH COPY =0,A SET DATA CHAIN BUF. LENGTH TO 0 COPY A,DCLEN SET LENGTH (NO DATA CHAINING) JST TRRC:C DO TESTING JMP *TXRX:C EXIT TITL MINOR TESTS (DATA CHAINING - TESTS C,D) ****************************** * * DACH:C - DATA CHAINING TEST: TESTS THE ABILITY OF THE SCC TO * TX AND TO RX DATA USING BOTH CHNLS. WITH * DATA CHAINING. * * THE MAJOR PORTION OF TESTING IS DONE USING THE * SUBROUTINE 'TRRC:C'. * ****************************** * DACH:C ENT DATA CHAINING TEST IN CONSL;CDR,A GET CONSOLE DISPLAY AND =:F,A MASK FOR MAJOR TEST ONLY OR =:30,A 'OR' IN MINOR TEST SELP A,CONSL;CDR SEND TO CDR JST MSGA OUTPUT MINOR TEST TITLE WORD DATMSG 'DATA CHAINING' COPY =:40,A SET PRIMARY BUF. LENGTH TO 64 BYTES COPY A,LEN SET BUF. LENGTH COPY A,DCLEN SET DATA CHAIN BUF. LENTH TO 64 BYTES COPY PAT,A GET DEFAULT TEST PATTERN SHIFT A,LO,8 SHIFT INTO WORD POSITION OR PAT,A SET WORD PATTERN COPY A,TRBUFF+32 SET FOR DATA CHAIN BUF. - CHNL. A COPY A,TRBUFF+96 SET FOR DATA CHAIN BUF. - CHNL. B COPY =-31,A SET MOVE COUNT FOR 32 WORDS JST MOVE FILL DATA CHAIN BUF. - CHNL. A WORD TRBUFF+32 'FROM' WORD TRBUFF+33 'TO' COPY =-31,A SET MOVE COUNT FOR 32 WORDS JST MOVE FILL DATA CHAIN BUF. - CHNL. B WORD TRBUFF+96 'FROM' WORD TRBUFF+97 'TO' JST TRRC:C DO TESTING JMP *DACH:C EXIT * LPOOL TITL MINOR TESTS (UIS - TESTS C,D) ****************************** * * UIS:C - UIS TEST: TEST THE ABILITY OF THE UIS * INSTRUCTION TO INHIBIT INTS. FROM BOTH * CHNLS. OF THE SCC. * * FIRST, THE SCC IS INITIALIZED WITH THE * APPROPRIATE TBI ADDS. FOR EACH CHNL. * OF THE SCC. THEN 'NOP' COMS. ARE SENT TO * BOTH CHNLS. THEN A 'UIS' INSTRUCTION IS * EXECUTED WITH (PSW) BIT 12 SET. THIS SHOULD * INHIBIT INTS. FROM EITHER CHNL. IF A * CHNL. INTS., THEN AN ERROR RESULTS. * * SECOND, ANOTHER 'UIS' INSTRUCTION IS EXECUTED * WITH (PSW) BIT 12 RESET. IF THE SCC DOES NOT * INT. WITHIN THE TIME DELAY, AN ERROR * RESULTS. * ****************************** * UIS:C ENT UIS TEST IN CONSL;CDR,A GET CDR DISPLAY AND =:F,A MASK FOR MAJOR TEST ONLY OR =:40,A 'OR' IN MINOR TEST SELP A,CONSL;CDR SEND TO CDR JST MSGA OUTPUT MINOR TEST TITLE WORD UISMSG 'UIS' COPY =0,A SET A TO ZERO COPY A,BITS RESET DTR/TR, RTS/RS AND SEC. ADD. BITS 'ON' COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB. ADD. JST 0(X) INITIALIZE JMP *UIS:C 'SCC INT. TIMED OUT' * COPY =A:CBIN,X GET CHNL. A CTRL. BLK. COPY =OPC:NP,A GET NOP OPCODE JST CBSET BUILD NOP CTRL. BLK. COPY =B:CBIN,X GET CHNL. B CTRL. BLK. COPY =1%CHA:;OPC:NP,A GET NOP OPCODE CHNL. B JST CBSET BUILD NOP CTRL. BLK. * COPY =TBI:A,X GET CHNL. A TBI ADD. JST CLRTBI CLEAR THE TBI COPY =INADA,A GET CHNL. A NOP INT. ADD. COPY A,TB:INI(X) SET NOP INT. SERVICE RT. ADD. COPY =INERXA,A GET CHNL. A RX ERROR INT. ADD. COPY A,TB:RXI(X) SET RX INT. SERVICE RT. ADD. CO6 PY =INETXA,A GET CHNL. A TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. SERVICE RT. ADD. * COPY =TBI:B,X GET CHNL. B TBI ADD. JST CLRTBI CLEAR THE TBI COPY =INADB,A GET CHNL. A NOP INT. ADD. COPY A,TB:INI(X) SET NOP INT. SERVICE RT. ADD. COPY =INERXB,A GET CHNL. B RX ERROR INT. ADD. COPY A,TB:RXI(X) SET RX INT. SERVICE RT. ADD. COPY =INETXB,A GET CHNL. B TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. SERVICE RT. ADD. * COPY =UIS:C4,A GET INT. RETURN ADD. COPY A,INZ:C0 SET RETURN ADD. * JST CLRFGS CLEAR ALL INT. FLAGS COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. JST ENSCC ENABLE SCC INTS. SBIT EI:,S SET BIT 12 (EOB INTS.) UIS INHIBIT INTS. JST OTA SEND CHNL. A CTRL. BLK. JST SENBSY STILL BUSY? JMP UIS:C2 NO, SEND CHNL. B CTRL. BLK. JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER017,A 'BUSY BIT STILL SET' JST ERROR DISPLAY ERROR UIS:C1 NOP JMP *UIS:C EXIT TEST C * UIS:C2 JST OTX SEND CHNL. B CTRL. BLK. ADD. JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY =UIS:C1,A GET INT. RETURN ADD. COPY A,INZ:C0 SET RETURN ADD. JST ENSCC ENSURE SCC INTS. ARE ENABLED RBIT EI:,S RESET BIT 12 (EOB INTS.) UIS ALLOW INTS. JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP3 STORE COUNT COPY =A:CBIN,A GET CHNL. A CTRL. BLK. COPY =TBI:A,X GET CHNL. A TBI ADD. UIS:C3 COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER035,A 'SCC INT. TIMED OUT' JST ERROR DISPLAY ERROR REPORT COPY =B:CBIN,A GET CHNL. B CTRL. BLK. COPY =TBI:B,X GET CHNL. B TBI ADD. IMS TEMP3 INC. LOOP COUNT JMP UIS:C3 DO CHNL. B JMP *UIS:C EXIT TEST C * UIS:C4 NOP UNEXPECTED INTS. JST SEL RESET THE SCC COPY =-1,A SET A TO -1 CSK A,A:INFL CHNL. A INT.? NOP JMP UIS:C5+1 NO, CHNL. A DID NOT COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER036,A 'UIS FAILED TO INHIBIT INTS.' JST ERROR DISPLAY ERROR * UIS:C5 COPY =-1,A SET A TO -1 CSK A,B:INFL CHNL. B INT.? NOP JMP *UIS:C NO, EXIT TEST C COPY =B:CBIN,A GET CHNL. B CTRL. BLK. ADD. COPY A,CB1 SET CTRL. BLK. FOR 'ERROR' COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =ER036,A 'UIS FAILED TO INHIBIT INTS.' JST ERROR DISPLAY ERROR JMP *UIS:C EXIT TEST C * LPOOL TITL MAJOR TESTS (TECH TEST) ****************************** * * TECH TEST - MAJOR TEST: EXECUTES SELECTED FUNCTION * REPEATEDLY * * THE TECH TEST WILL EXECUTE REPEATEDLY 1 * OF THE FOLLOWING SELECTED FUNCTIONS WITH * NO ERROR CHECKING. * * NOP * TX ONLY * TX AND RX * INITIALIZE * ABORT * ENABLE SCC INT. (SELP INS.) * RESET SCC/INITIATE MICORDIAG. (SELP INS.) * SET MICRODIAG. LED (SELP INS.) * 7  SENSE BUSY (SST INS.) * SCOUT LOOPBACK ENABLE (SELP INS.) * SCOUT 'SAL' INSTR. * ****************************** * TECHT EQU $ TECH TEST COPY TFC,A GET SELECTED FUNCTION SHIFT A,LO,4 SHIFT INTO PLACE FOR CDR DISPLAY OR =8,A SET CDR DISPLAY 'TECH TEST' SELP A,CONSL;CDR SEND DISPLAY COPY TFC,A GET SELECTED FUNCTION CSK A,=5 IS IT A SELP OR SST INS.? JMP TCHT20 NO, NOP,TX,TX/RX,INZ,ABORT TITL * * ENABLE SCC INTS. * JMP TCHT05 NO, JUMP JT SS,TCHT11 EXIT CBIT OV:,S COMPLEMENT OVERFLOW BIT AND LIGHT JST ENSCC DO THE ACTUAL I/O JMP $-3 LOOP BACK * * RESET SCC/INITIATE MICRODIAG. * TCHT05 CLSN A,=6 RESET SCC/INITIATE MICRODIAG.? JMP $+2 YES, DO I/O JMP TCHT07 NO, JUMP TCHT06 JT SS,TCHT11 EXIT CBIT OV:,S COMPLEMENT OVERFLOW BIT/LIGHT COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST SEL DO I/O JST SENBSY SENSE BUSY? JMP TCHT06 NOT BUSY, LOOP BACK JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED/SENSE BUSY JMP TCHT06 TIME EXPIRED/LOOP BACK TITL * * SET MICRODIAG. LED * TCHT07 CLSN A,=7 SET MICRODIAG. LED? JMP $+2 YES, DO I/O JMP TCHT08 NO, JUMP JT SS,TCHT11 EXIT CBIT OV:,S COMPLEMENT OVERFLOW BIT/LIGHT JST MICLED DO THE ACTUAL I/O JMP $-3 LOOP BACK * * SENSE BUSY * TCHT08 CLSN A,=8 SENSE BUSY? JMP $+2 YES, DO IT JMP TCHT09 NO, JUMP JT SS,TCHT11 EXIT CBIT OV:,S COMPLEMENT OVERFLOW BIT/LIGHT JST SENBSY SENSE BUSY JMP $-3 LOOP BACK JMP $-4 LOOP BACK * * SCOUT LOOPBACK ENABLE * TCHT09 CLSN A,=10 SAL? JMP TCHT10 YES, DO IT JT SS,TCHT11 EXIT CBIT OV:,S COMPLEMENT LIGHT JST SLOOPE DO IT JMP $-3 TRY AGAIN TITL * * SCOUT 'SAL' INSTR. * TCHT10 JT SS,TCHT11 IF SENSE SWITCH, EXIT COPY IDNUM,A GET BOARD ID CBIT OV:,S BLINK LIGHT XNX A INDEX NEXT SAL 2,0 HERE IT IS JMP $-5 GO BACK * * THIS ROUTINE ALLOWS SENSE SWITCH TO DEBOUNCE * TCHT11 COPY =0,A RESET A REG. ADD =1,A INC. A JNE A,$-1 JST SEL RESET THE SCC JMP QERY70 GO BACK TO TECH TEST QERY * LPOOL TITL * * NOP AND INITIALIZE * TCHT20 COPY CHAN:,A GET SELECTED CHNL. JNE A,TCHT21 IF CHNL. B, JUMP COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY A,CB:TX SET TX CTRL. BLK. ADD. COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY A,CB:RX SET RX CTRL. BLK. ADD. COPY =A:CBIN,A GET CHNL. A INITA. CTRL. BLK. ADD. COPY A,CB:IN SET NOP/INITZ. CTRL. BLK. ADD. COPY =TBI:A,A GET CHNL. A TBI ADD. JMP TCHT22 JUMP PAST * TCHT21 COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY A,CB:TX SET TX CTRL. BLK. ADD. COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY A,CB:RX SET RX CTRL. BLK. ADD. COPY =B:CBIN,A GET CHNL. B INITZ. CTRL. BLK. ADD. COPY A,CB:IN SET NOP/INITZ. CTRL. BLK. ADD. COPY =TBI:B,A GET CHNL. B TBI ADD. * TCHT22 COPY A,TBIADD STORE TBI ADD. COPY =1,A SET TIME OUT FOR 1 SEC. JST TIMEST SET TIME JST SEL RESET SCC/INITIATE MICROD. JST SENBSY STILL BUSY? JMP $+3 NO, JUMP JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED JST INITL0 INITIALIZE FOR NOP,TX,TX/RX,INZ,ABORT FUNCTIONS NOP COPY CB:IN,X GET NOP/INITAZ. CTRL. BLK. ADD. COPY TFC,A GET FUNCTION JEQ A,$+4 IF NOP, JUMP CLSN A,=3 INITIALIZE? JMP TCHT23 YES, JUMP JMP TCHT30 NO, TX OR TX/RX OR ABORT COPY =OPC:NP,A  JST CBSET TCHT23 COPY X,CB1 SAVE CTRL. BLK. ADD. COPY TBIADD,X GET TBI ADD. COPY =TCHEOB,A GET EOB ADD. COPY A,TB:RXI(X) STO8 RE RX INT. VECTOR ADD. COPY A,TB:TXI(X) STORE TX INT. VECTOR ADD. COPY A,TB:INI(X) STORE NOP/INIT. INT. VECTOR ADD. COPY CB1,X GET CTRL. BLK. ADD. TCHT24 JF SS,$+2 IF RESET, CONT. JMP TCHT11 EXIT TO QUERY CBIT OV:,S COMPLEMENT OVERFLOW BIT/LIGHT COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST ENSCC ENABLE SCC INTS. JST OTX SEND CTRL. BLK. ADD. JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JMP TCHT24 TRY AGAIN * TCHEOB ENT TX, NOP, INITZ. EOB SBIT GI:,S ENABLE INTS. JMP TCHT24 DO AGAIN * LPOOL TITL * * TX ONLY * TCHT30 COPY PAT,A GET TEST PATTERN SHIFT A,LO,8 PUT INTO UPPER BYTE OR PAT,A ALSO LOWER BYTE  COPY A,TRBUFF STORE PATTERN COPY =-127,A SET MOVE COUNT JST MOVE SET UP TX BUF. WORD TRBUFF FROM WORD TRBUFF+1 TO COPY CHADD,A GET CHNL. ADD. SBIT BY:,S SET BYTE MODE COPYB A,TRBUFF STORE CHNL. ADD. RBIT BY:,S SET WORD MODE COPY CB:TX,X GET TX CTRL. BLK. ADD. COPY =OPC:TX,A GET TX OP CODE JST CBSET SET UP CTRL. BLK. COPY =TRBUFF,A GET PRIMARY BUF. ADD. COPY A,ME:AD1(X) SET INTO CTRL. BLK. COPY LEN,A GET PRIMARY BUF. SIZE COPY A,BT:CT1(X) SET INTO CTRL. BLK. COPY DCLEN,A GET DATA CHAIN BUF. LENGTH COPY A,BT:CT2(X) STORE DATA CHAIN BUF. LENGTH JEQ A,$+3 JUMP IF NO DATA CHAIN COPY =TRBUFF+64,A GET DATA CHAIN BUF. ADD. COPY A,ME:AD2(X) STORE BUF. ADD. COPY TFC,A GET FUNCTION CLSN A,=1 TX? JMP $+2 YES, JUMP JMP TCHT40 NO, JUMP COPY CHADD,A GET CHNL. ADD. COPY A,TEMP4 SAVE CHNL. ADD. JNE A,$+2 IF ZERO, JUMP COPY =:FF,A SET TO :FF SUB =1,A GENERATE ALTERNATE CHNL. ADD.-NO RX INT. COPY A,CHADD STORE RX CHNL. ADD. JST INITL0 INITIALIZE AGAIN NOP COPY TEMP4,A GET ORIGINAL CHNL. ADD. COPY A,CHADD RESTORE IT COPY CB:TX,X GET TX CTRL. BLK. ADD. JMP TCHT23 DO I/O * LPOOL TITL * * TX AND RX * TCHT40 COPY TBIADD,X GET TBI ADD. COPY =TCHTXE,A GET TX EOB COPY A,TB:TXI(X) STORE TX INT. VECTOR ADD. COPY A,TB:INI(X) STORE NOP/INIT. INT. VECTOR ADD. COPY =TCHRXE,A GET RX EOB ADD. COPY A,TB:RXI(X) STORE RX INT. VECTOR ADD. COPY CB:RX,X GET RX CTRL. BLK. ADD. COPY =OPC:RX,A GET RX OPCODE JST CBSET SET UP CTRL. BLK. COPY =RCBUFF,A GET PRIMARY BUF. LENGTH COPY A,ME:AD1(X) SET INTO CTRL. BLK. COPY LEN,A GET PRIMARY BUF. SIZE COPY A,BT:CT1(X) SET INTO CTRL. BLK. COPY DCLEN,A GET DATA CHAIN BUF. LENGTH COPY A,BT:CT2(X) SET INTO CTRL. BLK. JEQ A,$+3 IF NO DATA CHAINING, JUMP COPY =RCBUFF+64,A GET DATA CHAIN BUF. ADD. COPY A,ME:AD2(X) STORE BUF. ADD. COPY TFC,A GET FUNCTION CLSN A,=4 ABORT? JMP TCHT50 YES, JUMP COPY =0,A RESET A TO ZERO COPY A,TEMP1 RESET TX COUNT * TCHT41 JF SS,$+2 IF RESET, JUMP JMP TCHT11 EXIT TO QUERY JST ENSCC ENABLE SCC INTS. JST OTX SEND RX CTRL. BLK. ADD. TCHT42 CBIT OV:,S BLINK OV COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY CB:TX,A GET TX CTRL. BLK. ADD. JST SENBSY STILL BUSY? JMP $+4 NO JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED JMP TCHT41 TRY AGAIN JST OTA SEND TX CTRL. BLK. ADD. JST ENSCC ENSURE INTS. ENABLED JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JMP TCHT41 TRY AGAIN * TCHTXE ENT TX EOB JT SS,TCHRXE+1 DON'T SEND ANY MORE SBIT GI:,S ENABLE INTS. IMS TEMP1 INC. TX COUNT JMP TCHT42 GO TIME IT * TCHRXE ENT RX EOB SBIT GI:,S ENABLE INTS. CBIT OV:,S BLINK OV JST ENSCC ENABLE SCC INTS. COPY TEMP1,A GET TX COUNT JEQ A,TCHT43 NO MORE 9 SUB =1,A DEC. TX COUNT COPY A,TEMP1 STORE COUNT JST SENBSY STILL BUSY? JMP $+4 SEND RX BLK. JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED JMP $+2 TIME EXPIRED JST OTX SEND RX BLK. TCHT43 COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JF SS,TCHT41-2 TRY AGAIN JMP QERY70 GO TO TECH TEST QUERY * LPOOL TITL * * ABORT * TCHT50 COPY TBIADD,X GET TBI ADD. COPY =TCHABT,A GET EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY A,TB:INI(X) SET NOP/INITZ INT. VECTOR ADD. COPY CB:RX,X GET RX CTRL. BLK. ADD. * TCHT51 JF SS,$+2 IF RESET, JUMP JMP TCHT11 EXIT TO QUERY CBIT OV:,S BLINK OV COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY CHAN:,A GET CHNL. ADD =1,A SET CODE FOR ABORT JST ENSCC ENABLE SCC INTS. JST OTX SET RX CTRL. BLK. JST SENBSY STILL BUSY? JMP $+4 NO, SEND ABORT JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED JMP TCHT51 TRY AGAIN JST OTA SEND ABORT JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JMP TCHT51 TRY AGAIN * TCHABT ENT END-OF-BLK. SBIT GI:,S ENABLE INTS. JMP TCHT51 GO AGAIN * LPOOL TITL MINOR TESTS (INITIALIZE - TESTS A,B) ****************************** * * INITL - MINOR TEST: TESTS THE ABILITY * TO RESET AND INITIALIZE THE SCC. * * FIRST, A RESET/INITIATE MICRODIAG. *  COM. IS SENT TO THE SCC. IF THE SCC * DOES NOT RESPOND 'NOT BUSY' AFTER A DELAY * OF 1 SECOND, A 'MICRODIAG. FAILED' * ERROR IS REPORTED. * * SECOND, AN INITIALIZE COM. WILL BE * SENT TO THE SCC WITH THE ADD. SELECT * BIT OFF, CHNL. ADD. FIELD SET TO *  :E6 AND THE DTR/TR AND RTS/RS BITS OFF. THEN A * NOP COM. WILL BE SENT TO THE SCC. *  IN THE RETURNED NOP STATUS WORD, THE * DSR/DM BIT SHOULD BE RESET AND THE DCD/RR * AND CTS/CS BITS SHOULD BE SET. * * THIRD, AN INITIALIZE COM. WILL BE * SENT TO THE SCC WITH THE ADD. SELECT * BIT ON, CHNL. ADD. FIELD SET TO * THE DEFAULT AND THE DTR/TR AND *  RTS/RS BITS ON. THEN A NOP COM. WILL BE * SENT TO THE SCC. THE DSR/DM, DCD/RR AND CTS/CS BITS IN * THE RETURNED NOP STATUS WORD SHOULD BE SET. * * CALLING SEQUENCE: * JST INITL * ****************************** * INITL ENT INITIALIZE TEST JST MSGA OUTPUT MINOR TEST TITLE WORD INIMSG 'INITIALIZE' IN CONSL;CDR,A GET CDR DISPLAY AND =:F,A MASK FOR MAJOR TEST ONLY OR =:10,A 'OR' IN MINOR TEST (INITIALIZE) SELP A,CONSL;CDR SEND TO CDR *  COPY MACH,A GET MACHINE FLAG JEQ A,INIT05 IF NM4, JUMP COPY IDNUM,A GET ID NUM. XNX A INDEX NEXT SAL 2,0 HERE IT IS AGAIN SHIFT A,RO,3 SHIFT INTO PLACE CSK A,DEVADD DO RANGE CHECK NOP JMP $+2 BAD JMP INIT05 GOOD COPY =ER046,A 'BAD ID' JST ERROR DISPLAY ERROR * INIT05 COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST MICLED SET MICRODIAG. LED JST SENBSY IS BUSY FLAG SET? JMP $+2 NO, ERROR JMP $+3 YES IT IS, JUMP COPY =ER041,A 'BUSY FLAG DIDN'T SET' JST ERROR DISPLAY ERROR * JST : SEL RESET SCC/INITIATE MICRODIAG. JST SENBSY SENSE SCC BUSY JMP $+5 IT IS NOT BUSY, JUMP JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =ER003,A 'MICRODIAG. FAILED' JST ERROR DISPLAY ERROR REPORT * COPY =1%SAD:,A SET ADD. SELECT FLAG SBIT DTR:TR,A SET DTR/TR SBIT RTS:RS,A SET RTS/RS COPY A,BITS STORE BITS COPY =:E6,A SET CHNL. ADD. FIELD COPY A,CHADD STORE CHNL. ADD. COPY =:8000,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 DO THE I/O JMP *INITL TIMED OUT JST NOP0 ISSUE A NOP COM. JMP *INITL TIMED OUT * COPY TBIADD,X GET THE TBI ADD. COPY TB:INS(X),A GET TERM. STATUS TBIT DSR:DM,A DSR/DM BIT SHOULD BE RESET JT OV,INIT10 IF SET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE RESET JT OV,INIT10 IF SET, ERROR TBIT CTS:CS,A CTS/CS BIT SHOULD BE RESET JF OV,$+3 IF RESET, JUMP INIT10 COPY =ER002,A DSR/DM, DCD/RR OR CTS/CS BIT DID NOT RESET JST ERROR DISPLAY ERROR * COPY =0,A RESET ADD. SELECT FLAG COPY A,BITS STORE BITS COPY =:F8,A SET CHNL. ADD. FIELD TO DEFAULT COPY A,CHADD STORE CHNL. ADD. COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 DO THE I/O JMP *INITL TIMED OUT JST NOP0 ISSUE A NOP COM. JMP *INITL TIMED OUT * COPY TBIADD,X GET THE TBI ADD. COPY TB:INS(X),A GET TERM. STATUS TBIT DSR:DM,A DSR/DM BIT SHOULD BE SET JF OV,INIT20 IF RESET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE SET JF OV,INIT20 IF RESET, ERROR TBIT CTS:CS,A CTS/CS BIT SHOULD BE SET JT OV,$+3 IF SET, JUMP INIT20 COPY =ER021,A DSR/DM, DCD/RR OR CTS/CS BIT DID NOT SET JST ERROR DISPLAY ERROR * JMP *INITL EXIT TEST * LPOOL TITL MINOR TESTS (INITIALIZE - SUBROUTINE 'INITL0') ****************************** * *  INITL0 - EXECUTE INITIALIZE FUNCTION * * THIS SUBROUTINE WILL CLEAR THE TERM. BLK. * AND SET UP AN 'INITIALIZE' CTRL. BLK. ACCORDING * TO CHNL., ADD. SELECT AND CHNL. ADD. * * THE SUBROUTINE WILL THEN ISSUE AN 'INITIALIZE' COM. * AND WAIT APPROXIMATELY 1 SECOND FOR AN INT. FROM * THE SCC. IF THE INT. DOES NOT OCCUR, AN 'SCC * INT. TIME OUT' ERROR WILL BE REPORTED. * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS MUST BE SET *  BEFORE ENTERING THIS SUBROUTINE: * * CHADD - CHNL. ADD. (CHNL. ADD. FIELD) * BITS - DTR/TR, RTS/RS AND SEC. ADD. BITS FOR CHNL./OP CODE WORD * TBIADD - TERM. BLK./INT. ADD. * * CALLING SEQUENCE: * * JST INITL0 * JMP ? TIMED OUT R * JMP ? INT. OCCURRED R+1 * ****************************** * INITL0 ENT EXECUTE INITIALIZE FUNCTION COPY CB:IN,X GET 'INITIALIZE' CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' ROUTINE COPY X,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' ROUTINE COPY =OPC:IZ,A GET 'INITIALIZE' OP CODE JST CBSET BUILD 'INITIALIZE' CTRL. BLK. COPY TBIADD,A GET TERM. BLK. ADD. COPY A,TB:ADD(X) STORE IN CTRL. BLK. COPY CHADD,A GET CHNL. ADD. FIELD SHIFT A,LO,8 SHIFT INTO WORD POSITION OR SDLCF,A 'OR' IN SDLC FLAG COPY A,CH:ADD(X) STORE IN CTRL. BLK. * INITL1 COPY TBIADD,X GET TERM. BLK. ADD. JST CLRTBI CLEAR TBI COPY =INADD,A GET NOP/INITIALIZE INT. ADD. (NORMAL TERM.) COPY A,TB:INI(X) SET NOP/INITIALIZE INT. SERV. RT. ADD. COPY =INERX,A GET RX ERROR INT. ADD. COPY A,TB:RXI(X) SET RX INT. SERVICE ROUTINE ADD. COPY =INETX,A ; GET TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. SERVICE ROUTINE ADD. * COPY CB1,X GET CTRL. BLK. ADD. COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST ENSCC ENABLE SCC INTS. JST OTX SEND CTRL. BLK. ADD. JST SENBSY STILL BUSY? JMP INIT:1 NO, JUMP JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =ER017,A 'BUSY BIT STILL SET' JMP INIT:2 DISPLAY ERROR * INIT:1 JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =ER004,A 'SCC INT. TIMED OUT' INIT:2 JST SEL RESET THE SCC JST ERROR DISPLAY ERROR INITL2 JMP *INITL0 EXIT * LPOOL TITL MINOR TESTS (INITIALIZE - SUBROUTINE 'NOP0') ****************************** * * NOP0 - EXECUTE NOP COM. * * THIS SUBROUTINE WILL BUILD A NOP CTRL. * BLK. AND SEND IT TO THE SCC. THE RETURNED * STATUS WILL BE CHECKED FOR ERRORS. * * CALLING SEQUENCE: * JST NOP0 * JMP ? TIMED OUT R *  JMP ? OK R+1 * ****************************** * NOP0 ENT EXECUTE NOP COM. COPY NOP0,A GET RETURN ADD. COPY A,INITL0 SET RETURN ADD. COPY CB:IN,X GET 'NOP' CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' ROUTINE COPY X,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' ROUTINE COPY =OPC:NP,A GET 'NOP' OP CODE JST CBSET BUILD 'NOP' CTRL. BLK. JMP INITL1 DO I/O *  LPOOL TITL MINOR TESTS (INITIALIZE - SUBROUTINES 'INITL0' & 'NOP0' EOBS) ****************************** * * INADD - NORMAL 'NOP/INITIALIZE' INT. SERVICE ROUTINE * * THIS IS THE EOB SERVICE ROUTINE FOR A NORMAL * TERM. OF A NOP/INITIALIZE COM. * * THIS SERVICE ROUTINE WILL CHECK FOR MULTIPLE * EOB INTS. AND STATUS ERRORS UPON * TERM. OF A NOP/INITIALIZE COM. * * ALSO THE TX AND RX STATUS IN THE TBI WILL BE * CHECK FOR ALTERATIONS AS WELL AS THE BYTE * COUNTS. * ****************************** * INADD ENT NORMAL EOB IMS IN:FLG SET NOP/INITIALIZE INT. FLAG JMP INADD1 IF NOT PREVIOUSLY SET, JUMP COPY =ER005,A 'MULTIPLE INTS. INADD: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. JST ERROR DISPLAY ERROR JST STATUS CHECK STATUS JST ERROR DISPLAY ANY ERROR JMP INITL2 BAD RETURN INADD1 SBIT GI:,S ENABLE INTS. COPY CB:IN,X GET CTRL. BLK. ADD. COPY CH:OPC(X),A GET CHNL./OPC. WORD AND =OPC:MK,A MASK FOR OPCODE ONLY JEQ A,$+4 IF NOP, JUMP COPY =:8000,A SET LOOP COUNT SUB =1,A DEC. LOOP COUNT JNE A,$-1 LOOP BACK * JST STATUS CHECK STATUS JST ERROR DISPLAY ERROR REPORT COPY TBIADD,X GET TBI ADD. * COPY TB:RXS(X),A GET RX STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER006,A 'RX TBI STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:RXB(X),A GET RX BYTE COUNT - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER007,A 'RX BYTE COUNT ALTERED' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER008,A 'TX STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:TXB(X),A GET TX BYTE COUNT - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER009,A 'TX TBI BYTE COUNT ALTERED' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET NOP/INITIALIZE STATUS TBIT RCIP:,A RX COM. BIT SHOULD BE 0 JT OV,INADD2 IF SET, ERROR TBIT TCIP:,A TX COM. BIT SHOULD BE 0 JT OV,INADD2 IF SET, ERROR TBIT RXDP:,A RX DATA PRESENT BIT SHOULD BE 0 JF OV,$+3 IF RESET, JUMP INADD2 COPY =ER020,A 'RCIP, TCIP OR RXDP < BIT SET' JST ERROR DISPLAY ERROR * IMS INITL0 SET RETURN ADD. FOR 'GOOD RETURN' JMP INITL2 EXIT EOB * LPOOL TITL ****************************** * * INERX - RX ERROR 'NOP/INITIALIZE' INT. SERVICE ROUTINE * INETX - TX ERROR 'NOP/INITIALIZE' INT. SERVICE ROUTINE * * THESE ARE THE ERROR EOB SERVICE ROUTINES FOR * AN ABNORMAL TERM. OF A NOP/INITIALIZE *  COM. TO THE RX OR TX INT. VECTOR * ADD. IN THE TBI. * ****************************** * INERX ENT RX ERROR 'NOP/INITIALIZE' EOB IMS RX:SE SET RX STATUS ERROR FLAG COPY =ER010,A 'RX INT. VECTOR INSTEAD OF NOP/INZ.' JMP INADD: DISPLAY ERROR * INETX ENT TX ERROR 'NOP/INITIALIZE' EOB IMS TX:SE SET TX STATUS ERROR FLAG COPY =ER011,A 'TX INT. VECTOR INSTEAD OF NOP/INZ.' JMP INADD: DISPLAY ERROR TITL MINOR TESTS (TX/RX TESTS A,B) ****************************** * * TXRXTS - MINOR TEST: TESTS THE * ABILITY OF THE SCC TO * TX AND TO RX * DATA WITH NO DATA CHAINING. * *  THE MAJOR PORTION OF TESTING IS * DONE USING SUBROUTINE 'TRCTST'. * * CALLING SEQUENCE: * JST TXRXTS * ****************************** * TXRXTS ENT TX AND RX TEST JST MSGA OUTPUT MINOR TEST TITLE WORD TRRCMG 'TX/RX' IN CONSL;CDR,A GET CDR DISPLAY AND =:F,A MASK FOR MAJOR TEST ONLY OR =:20,A 'OR' IN MINOR TEST (TX/RX) SELP A,CONSL;CDR SEND TO CDR DISPLAY * COPY =:100,A SET PRIMARY BUF. LENGTH TO 256 BYTES COPY A,LEN SET LENGTH COPY =0,A SET DATA CHAIN BUF. LENGTH TO 0 COPY A,DCLEN SET LENGTH * JST TRCTST DO TESTING JMP *TXRXTS EXIT * LPOOL TITL MINOR TEST (DATA CHAINING TESTS A,B) ******************************* * * DCHTST - MINOR TEST: TESTS THE ABILITY * OF THE SCC TO TX AND * RX DATA USING DATA CHAINING. * * THE MAJOR PORTION OF TESTING IS *  DONE USING SUBROUTINE 'TRCTST'. * * CALLING SEQUENCE: * JST DCHTST * ****************************** * DCHTST ENT DATA CHAIN TEST JST MSGA OUTPUT MINOR TEST TITLE WORD DATMSG 'DATA CHAINING' IN CONSL;CDR,A GET CDR DISPLAY AND =:F,A MASK FOR MAJOR TEST ONLY OR =:30,A 'OR' IN MINOR TEST (DATA CHAINING) SELP A,CONSL;CDR SEND TO CDR DISPLAY * COPY =:80,A SET PRIMARY BUF. LENGTH TO 128 BYTES COPY A,LEN SET LENGTH COPY A,DCLEN ALSO SET DATA CHAIN BUF. LENGTH TO 128 BYTES COPY PAT,A GET DEFAULT TEST PATTERN SHIFT A,LO,8 SHIFT INTO HIGH ORDER BYTE OR PAT,A SET WORD PATTERN COPY A,TRBUFF+64 SET FOR DATA CHAIN BUF. PATTERN COPY =-63,A SET MOVE COUNT JST MOVE SET DATA CHAIN BUF. WORD TRBUFF+64 FROM WORD TRBUFF+65 TO * JST TRCTST DO TESTING JMP *DCHTST EXIT * LPOOL TITL MINOR TESTS (UIS TESTS A,B) ****************************** * * UIS - MINOR TEST: TEST THE ABILITY OF THE UIS * INSTRUCTION TO INHIBIT INTS. FROM THE * SCC. * * FIRST, THE SCC IS INITIALIZED WITH THE * APPROPRIATE TBI ADD. FOR THE CHNL. * UNDER TEST. THEN A 'NOP' COM. IS SENT * TO THE SCC FOR THE CHNL. CURRENTLY UNDER * TEST. THEN A 'UIS' INSTRUCTION IS EXECUTED * WITH (PSW) BIT 12 ON. THIS SHOULD INHIBIT * INTS. FROM THE SCC. IF THE SCC * INTS., THEN AN ERROR RESULTS. * * SECOND, ANOTHER 'UIS' INSTRUCTION IS=  EXECUTED * WITH (PSW) BIT 12 OFF. IF THE SCC DOES NOT * INT. WITHIN THE TIME DELAY, AN ERROR * RESULTS. * * CALLING SEQUENCE: * JST UISTEST * ****************************** * UISTEST ENT UIS TEST JST MSGA OUTPUT MINOR TEST TITLE WORD UISMSG 'UIS' IN CONSL;CDR,A GET CONSOLE DISPLAY AND =:F,A MASK FOR MAJOR TEST ONLY OR =:40,A 'OR' IN MINOR TEST (UIS) SELP A,CONSL;CDR SEND TO CDR * COPY =0,A SET A TO ZERO COPY A,BITS RESET DTR/TR AND RTS/RS BITS COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 INITIALIZE CHNL. JMP *UISTEST 'SCC INT. TIMED OUT' * COPY CB:IN,X GET NOP CTRL. BLK. COPY =OPC:NP,A GET NOP OP CODE JST CBSET BUILD NOP CTRL. BLK. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' ROUTINE COPY X,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' ROUTINE * COPY TBIADD,X GET THE TBI ADD. JST CLRTBI CLEAR THE TBI COPY =INADD,A GET NORMAL INT. ADD. COPY A,TB:INI(X) SET INTO TBI COPY =INERX,A GET RX ERROR EOB ADD. COPY A,TB:RXI(X) SET INTO TBI COPY =INETX,A GET TX ERROR EOB ADD. COPY A,TB:TXI(X) SET INTO TBI * COPY =UISTST1,A GET INT. RETURN ADD. COPY A,INITL0 SET RETURN ADD. * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY CB:IN,X GET NOP CTRL. BLK. ADD. JST ENSCC ENABLE SCC INTS. SBIT EI:,S SET BIT 12 (EOB INTS.) UIS INHIBIT INTS. JST OTX SEND THE CTRL. BLK. ADD. JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED * COPY =UISTST0,A GET SECOND INT. RETURN ADD. COPY A,INITL0 SET RETURN ADD. * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST ENSCC ENSURE SCC INTS. ARE ENABLED RBIT EI:,S RESET BIT 12 (EOB INTS.) UIS ALLOW INTS. JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY =ER035,A 'SCC INT. TIMED OUT' JST ERROR DISPLAY ERROR UISTST0 NOP JMP *UISTEST EXIT * UISTST1 EQU $ UNEXPECTED INT. OCCURRED NOP JST SEL RESET THE SCC COPY =ER036,A 'UIS FAILED TO INHIBIT INTS.' JMP UISTST0-1 DISPLAY ERROR/EXIT * LPOOL TITL TEST UTILITIES (TRCTST TESTS A,B) ****************************** * * TRCTST - TESTS THE ABILITY OF THE SCC TO TX AND * TO RX DATA. * * FIRST, AN 'INITIALIZE' COM. WILL BE SENT TO THE SCC * WITH 'MATCH ON SECONDARY ADD.', CHNL. ADD. * FIELD SET TO THE DEFAULT, DTR/TR BIT 'ON', AND * RTS/RS BIT 'OFF'. THEN DATA IS 'TXTED ONLY'. * AT THE END OF TRANSMISSION, STATUS IS CHECKED AND A * 'NOP' COM. IS SENT TO THE SCC. THE CTS/CS AND DCD/RR BITS * IN THE RETURNED NOP STATUS WORD ARE CHECKED * (THEY SHOULD BE RESET) AS WELL AS THE STATUS. * * SECOND, AN 'INITIALIZE' COM. WILL BE SENT TO THE SCC * WITH THE DTR/TR AND RTS/RS BITS 'ON'. THEN 3 SUCCESSIVE 'TX * ONLY' COMS. WITH VARYING BUF. ADDS. AND SIZES * WILL BE SENT TO THE SCC. AFTER EACH 'TX' COM., THE * STATUS IS CHECKED AND A 'NOP' COM. IS SENT TO THE SCC. * THE DSR/DM, CTS/CS AND DCD/RR BITS IN THE RETURNED NOP STATUS WORD * ARE CHECKED (THEY SHOULD ALWAYS BE SET) AS WELL AS THE * STATUS. * * THIRD, AN 'INITIALIZE' COM. WILL BE SENT TO THE SCC WITH * 'ALL ADDS. ACCEPTED', CHNL. ADD. FIELD SET TO * THE DEFAULT, DTR/TR BIT 'ON', AND RTS/RS BIT 'OFF'. * THEN DATA IS TXTED AND RXD. AT THE * END OF EACH TRANSMISSION/RECEPTION THE STAT> US FOR EACH COM., * AND THE INPUT AND OUTPUT BUFS. ARE COMPARED. THEN A NOP * COM. IS SENT TO THE SCC. THE CTS/CS AND DCD/RR BITS IN * THE RETURNED NOP STATUS WORD ARE CHECKED (THEY SHOULD BE * RESET) AS WELL AS THE STATUS. THIS PROCESS IS * REPEATED TWICE MORE WITH DIFFERENT CHNL. ADDS. * * FOURTH, AN 'INITIALIZE' COM. WILL BE SENT TO THE SCC WITH * 'MATCH ON SECONDARY ADD.', AND DTR/TR&RTS/RS BITS 'ON'. THEN 3 * SUCCESSIVE TX/RX COMS. WITH VARYING BUF. * ADDS. AND SIZES AND ALSO VARYING CHNL. ADDS. WILL * BE SENT TO THE SCC. AT THE END OF EACH TRANSMISSION/RECEPTION * THE STATUS FOR EACH COM. IS CHECKED AND THE INPUT AND * OUTPUT BUFS. ARE COMPARED. THEN A 'NOP' COM. IS SENT TO * THE SCC. THE DSR/DM, CTS/CS AND DCD/RR BITS IN THE RETURNED NOP * STATUS WORD ARE CHECKED (THEY SHOULD ALWAYS BE SET) AS WELL * AS THE STATUS. * * FIFTH, AN RX COM. IS SENT TO THE SCC FOLLOWED WITH * AN ABORT COM. THE ABORT BIT IN THE RETURNED RX * STATUS WORD IS CHECKED - SHOULD BE 1. * * THE FOLLOWING PARAMETERS/MEMORY LOCATION MUST HAVE * BEEN SET UP PRIOR TO ENTERING THIS SUBROUTINE: * * LEN - PRIMARY BUF. LENGTH IN BYTES * DCLEN - DATA CHAIN BUF. LENGTH IN BYTES * 0 INDICATES NO DATA CHAIN * TBIADD - TBI ADD. * * CALLING SEQUENCE: *  JST TRCTST * ****************************** * TRCTST ENT TX/RX TEST * * TX ONLY TEST * COPY =1%RTS:RS,A SET RTS/RS BIT COPY A,BITS STORE BITS COPY =:F9,A SET CHNL. ADD. TO NO RX VALUE COPY A,CHADD STORE CHNL. ADD. COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 INITIALIZE JMP *TRCTST 'SCC INT. TIMED OUT' * COPY =TRBUFF*2,X GET TX BUF. BYTE ADD. COPY LEN,A SET BYTE COUNT TRCT05 SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE BYTE PATTERN RBIT BY:,S SET WORD MODE ADD =1,X INC. BYTE ADD. SUB =1,A GENERATE UNIQUE BYTE PATTERN JNE A,TRCT05 LOOP IF NOT ZERO COPY =:F8,A SET CHNL. ADD. TO DEFAULT VALUE COPY A,CHADD STORE CHNL. ADD. * COPY CB:TX,X GET TX CTRL. BLK. ADD. COPY =OPC:TX,A GET TX OP CODE JST CBSET SET UP TX CTRL. BLK. COPY =TRBUFF,A GET TX BUF. ADD. COPY A,ME:AD1(X) STORE IN CTRL. BLK. COPY LEN,A SET BUF. LENGTH IN BYTES COPY A,BT:CT1(X) STORE IN CTRL. BLK. COPY DCLEN,A GET DATA CHAIN BUF. LENGTH COPY A,BT:CT2(X) SET INTO CTRL. BLK. JEQ A,$+3 IF ZERO, SKIP ADD. COPY =TRBUFF+64,A GET DATA CHAIN BUF. ADD. COPY A,ME:AD2(X) SET INTO CTRL. BLK. COPY =:A100,A EXPECTED STATUS COPY A,TXEXP STORE IT JST TRAN0 DO I/O JMP *TRCTST 'SCC INT. TIMED OUT' COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0 EXECUTE A NOP COM. JMP *TRCTST 'SCC INT. TIMED OUT' COPY TBIADD,X GET TBI ADD. COPY TB:INS(X),A GET IN STATUS TBIT DSR:DM,A DSR/DM SHOULD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER001,A 'DSR/DM BIT DID NOT SET' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET IN STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE 0 JT OV,TRCT10 IF SET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE 0 JF OV,$+3 IF RESET, JUMP TRCT10 COPY =ER022,A 'CTS/CS OR DCD/RR BIT DID NOT RESET' JST ERROR DISPLAY ERROR * COPY =0,A RESET RTS/RS AND DTR/TR BITS COPY A,BITS STORE BITS COPY =:F8,A SET CHNL. ADD. TO 'NO RX' VALUE COPY A,CHADD STORE CHNL. ADD. COPY =:8D? 00,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 INITIALIZE JMP *TRCTST 'SCC INT. TIMED OUT' COPY =:F9,A SET CHNL. ADD. TO DEFALUT VALUE COPY A,CHADD STORE CHNL. ADD. COPY =-3,A SET LOOP COUNT FOR 3 TIMES COPY A,TEMP3 STORE COUNT TRCT11 COPY =:AD00,A EXPECTED STATUS COPY A,TXEXP STORE IT JST TRAN0 DO I/O TRCT12 JMP *TRCTST 'SCC INT. TIMED OUT' COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0 EXECUTE A NOP COM. JMP TRCT12 'SCC INT. TIMED OUT' COPY TBIADD,X GET TBI ADD. COPY TB:INS(X),A GET IN STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE SET JF OV,TRCT13 IF RESET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE SET JF OV,TRCT13 IF RESET, ERROR TBIT DSR:DM,A DSR/DM BIT SHOULD BE SET JT OV,$+3 IF SET, JUMP TRCT13 COPY =ER023,A 'DSR/DM, CTS/CS OR DCD/RR BIT WAS RESET' JST ERROR DISPLAY ERROR COPY CB:TX,X GET CTRL. BLK. ADD. COPY ME:AD1(X),A GET BUF. ADD. ADD =9,A GENERATE NEW BUF. ADD. COPY A,ME:AD1(X) SET INTO CTRL. BLK. COPY BT:CT1(X),A GET BUF. SIZE SHIFT A,RO,1 DIV. BY 2 COPY A,BT:CT1(X) SET INTO CTRL. BLK. COPY ME:AD2(X),A GET DATA CHAIN BUF. ADD. JEQ A,$+6 IF ZERO, NO DATA CHAIN ADD =9,A GENERATE NEW BUF. ADD. COPY A,ME:AD2(X) SET INTO CTRL. BLK. COPY BT:CT2(X),A GET DATA CHAIN BUF. SIZE SHIFT A,RO,1 GENERATE NEW SIZE COPY A,BT:CT2(X) SET INTO CTRL. BLK. IMS TEMP3 INC. COUNT JMP TRCT11 GO AGAIN JMP TRCT20 DO TX/RX TESTING * LPOOL TITL * * TX AND RX TEST * TRCT20 COPY =1%SAD:,A SET SEC. ADD. BIT SBIT RTS:RS,A SET RTS/RS BIT COPY A,BITS STORE BITS COPY CB:TX,X GET TX CTRL. BLK. ADD. COPY =OPC:TX,A GET TX OP CODE JST CBSET SET UP TX CTRL. BLK. COPY =TRBUFF,A GET TX BUF. ADD. COPY A,ME:AD1(X) STORE IN TX CTRL. BLK. COPY LEN,A GET TX BUF. LENGTH COPY A,BT:CT1(X) STORE IN TX CTRL. BLK. COPY DCLEN,A GET TX DATA CHAIN LENGTH JEQ A,$+4 IF ZERO, NO DATA CHAIN COPY A,BT:CT2(X) STORE IN TX CTRL. BLK. COPY =TRBUFF+64,A GET DATA CHAIN ADD. COPY A,ME:AD2(X) STORE IN TX CTRL. BLK. COPY CB:RX,X GET RX CTRL. BLK. ADD. COPY =OPC:RX,A GET RX OP CODE JST CBSET SET UP RX CTRL. BLK. COPY =RCBUFF,A GET RX BUF. ADD. COPY A,ME:AD1(X) STORE IN RX CTRL. BLK. COPY LEN,A BUF. BYTE COUNT COPY A,BT:CT1(X) STORE IN RX CTRL. BLK. COPY DCLEN,A GET DATA CHAIN BUF. LENGTH JEQ A,$+4 IF ZERO, NO DATA CHAIN COPY A,BT:CT2(X) SET INTO CTRL. BLK. COPY =RCBUFF+64,A GET DATA CHAIN BUF. ADD. - RX COPY A,ME:AD2(X) SET INTO RX CTRL. BLK. COPY =-3,A SET LOOP COUNT TO 3 TIMES COPY A,TEMP3 STORE COUNT COPY =:F8,A SET CHNL. ADD. TO DEFAULT TRCT21 COPY A,CHADD STORE CHNL. ADD. COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 INITIALIZE JMP TRCT12 'SCC INT. TIMED OUT' COPY =:E100,A EXPECTED STATUS COPY A,TXEXP STORE IT COPY =:C100,A EXPECTED STATUS COPY A,RXEXP STORE IT JST TRRC0 DO TX/RX I/O JMP TRCT12 'SCC INT. TIMED OUT' JST BUFFCM DO BUF. COMPARE JST ERROR IF ERROR, DISPLAY IT COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0 EXECUTE A NOP COM. JMP TRCT12 'SCC INT. TIMED OUT' COPY TBIADD,X GET TBI ADD. COPY TB:INS(X),A GET IN STATUS TBIT DSR:DM,A DSR/DM SHOULD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER001,A 'DSR/DM BIT DID NOT SET' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET IN STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE 0 JT OV,TRCT22 IF SET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE 0 JF OV,$@ +3 IF RESET, JUMP TRCT22 COPY =ER022,A 'CTS/CS OR DCD/RR BIT DID NOT RESET' JST ERROR DISPLAY ERROR COPY CHADD,A GET CHNL. ADD. SHIFT A,RO,1 GENERATE NEW CHNL. ADD. IMS TEMP3 INC. LOOP COUNT JMP TRCT21 DO AGAIN * COPY =-3,A SET LOOP COUNT TO 3 TIMES  COPY A,TEMP3 STORE LOOP COUNT COPY =0,A RESET ADD. SELECT BIT (SECONDARY ADDS.) COPY A,BITS SET RTS/RS, DTR/TR BITS COPY =:F8,A SET CHNL. ADD. FIELD TO DEFAULT TRCT23 COPY A,CHADD STORE CHNL. ADD. COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST INITL0 INITIALIZE JMP TRCT12 'SCC INT. TIMED OUT' COPY =:ED00,A EXPECTED STATUS COPY A,TXEXP STORE IT COPY =:CD00,A EXPECTED STATUS COPY A,RXEXP STORE IT JST TRRC0 DO I/O JMP TRCT12 'SCC INT. TIMED OUT' JST BUFFCM DO BUF. COMPARE JST ERROR IF ERROR, DISPLAY IT COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0 EXECUTE A NOP COM. JMP TRCT12 'SCC INT. TIMED OUT' COPY TBIADD,X GET TBI ADD. COPY TB:INS(X),A GET IN STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE SET JF OV,TRCT24 IF RESET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE SET JF OV,TRCT24 IF RESET, ERROR TBIT DSR:DM,A DSR/DM BIT SHOULD BE SET JT OV,$+3 IF SET, JUMP TRCT24 COPY =ER023,A 'DSR/DM, CTS/CS OR DCD/RR BIT WAS RESET' JST ERROR DISPLAY ERROR COPY =-2,A SET LOOP COUNT TO 2 TIMES COPY A,TEMP1 STORE COUNT COPY CB:TX,X GET TX CTRL. BLK. ADD. TRCT25 COPY ME:AD1(X),A GET TX BUF. ADD. ADD =9,A GENERATE NEW BUF. ADD. COPY A,ME:AD1(X) SET INTO TX CTRL. BLK. COPY BT:CT1(X),A GET PRIMARY BUF. SIZE SHIFT A,RO,1 DIV. BY 2 COPY A,BT:CT1(X) STORE INTO TX CTRL. BLK. COPY ME:AD2(X),A GET DATA CHAIN BUF. ADD. - TX JEQ A,$+6 IF ZERO, NO DATA CHAIN ADD =9,A GENERATE NEW ADD. COPY A,ME:AD2(X) SET INTO TX CTRL. BLK. COPY BT:CT2(X),A GET BUF. SIZE SHIFT A,RO,1 GENERATE NEW SIZE COPY A,BT:CT2(X) SET INTO TX CTRL. BLK. COPY CB:RX,X GET RX CTRL. BLK. ADD. IMS TEMP1 INC. LOOP COUNT JMP TRCT25 DO RX CTRL. BLK. COPY CHADD,A GET CHNL. ADD. SHIFT A,RO,1 GENERATE NEW CHNL. ADD. IMS TEMP3 INC. LOOP COUNT JMP TRCT23 GO AGAIN JMP TRCT30 DO ABORT TEST * LPOOL TITL * * RX ABORT TEST * TRCT30 EQU $ RX ABORT TEST COPY TBIADD,X GET TBI ADD. COPY =ABRTRX,A GET RX EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =ABRTE1,A GET TX EOB ERROR ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =ABRTE2,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. JST CLRTBI CLEAR TBI COPY =:0D20,A EXPECTED STATUS COPY A,RXEXP STORE IT * COPY CB:RX,X GET RX CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY CHAN:,A GET CHNL. ADD =1,A GENERATE CORRECT ABORT CODE JST ENSCC ENABLE SCC INTS. JST OTX SEND RX CTRL. BLK. JST SENBSY STILL BUSY? JMP TRCT31 NO, JUMP JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED COPY =ER017,A 'BUSY BIT STILL SET' JMP TRCT32 DISPLAY ERROR * TRCT31 JST OTA SEND ABORT CODE JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =ER004,A 'SCC INT. TIMED OUT' TRCT32 JST SEL RESET THE SCC JST ERROR DISPLAY ERROR JMP TRCT12 EXIT TEST * LPOOL TITL TEST UTILITIES (TRCTST - ABORT TEST - TESTS A,B - EOBS) ****************************** * * ABRTRX - NORMAL 'RX' INT. SERVICE ROUTINE * * THIS IS THE EOB SERVICE ROUTINE FOR AN * 'ABORT' TERM. OF A RXA  COM. * ****************************** * ABRTRX ENT 'ABORT' RX EOB IMS RX:FLG SET RX INT. FLAG JMP ABRT10 IF RESET, IT'S COOL  COPY =ER045,A 'MULTIPLE INTS.' ABRT05 JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. JST ERROR DISPLAY ERROR JMP TRCT12 EXIT TEST ABRT10 SBIT GI:,S ENABLE INTS. COPY TBIADD,X GET TBI ADD. COPY TB:RXS(X),A GET RX STATUS TBIT ABRT:,A ABORT BIT SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER042,A 'ABORT BIT DID NOT SET' JST ERROR DISPLAY ERROR JMP TRCT12 EXIT TEST TITL ******************************* * * ABRTE1 - TX ERROR 'ABORT TEST' INT. SERVICE ROUTINE * ABRTE2 - NOP/INITZ. ERROR 'ABORT TEST' INT. SERVICE ROUTINE * * THESE ARE THE ERROR EOB SERVICE ROUTINES FOR AN * ABNORMAL TERM. OF AN 'ABORT' COM. TO * THE TX OR NOP/INITZ. INT. VECTOR ADD. IN THE TBI. * ******************************* * ABRTE1 ENT TX ERROR 'ABORT TEST' EOB IMS TX:SE SET TX STATUS ERROR FLAG COPY =ER043,A 'TX INT. INSTEAD OF RX' JMP ABRT05 DISPLAY ERROR * ABRTE2 ENT NOP/INITZ. ERROR 'ABORT TEST' EOB IMS IN:SE SET NOP/INITZ. STATUS ERROR FLAG COPY =ER044,A 'NOP/INITZ. INT. INSTEAD OF RX' JMP ABRT05 DISPLAY ERROR * LPOOL TITL TEST UTILITIES (TRCTST - SUBROUTINE 'TRAN0') ****************************** * * TRAN0 - THIS SUBROUTINE WILL CLEAR THE TBI OF STATUS AND * BYTE COUNTS AND SET THE INT. VECTOR FOR A * TX ONLY TEST AS WELL AS THE ERROR 'RX' * AND 'NOP/INITZ.' VECTOR INTS. * THE TIME LIMIT FOR A TX INT. * IS 1 SECOND. * *  THE TX CTRL. BLK. (CB:TX) AND BUF. MUST HAVE * BEEN SET UP PRIOR TO ENTERING THIS SUBROUTINE * * CALLING SEQUENCE: * JST TRAN0 * JMP ? INT. TIMED OUT R * JMP ? GOOD RETURN R+1 * ****************************** * TRAN0 ENT TX ONLY COPY TBIADD,X GET THE TBI ADD. COPY =TRCRX1,A GET RX ERROR EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =TRCIN1,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. VECTOR ADD. COPY =TRTX1,A GET TX EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. JST CLRTBI CLEAR TBI * COPY CB:TX,X GET CTRL. BLK. ADD. COPY CHAN:,A GET CHNL.  SHIFT A,LO,CHA: SHIFT INTO PLACE OR BITS,A 'OR' IN DTR/TR, RTS/RS AND SEC. ADD. BITS OR =OPC:TX,A 'OR' IN TX OPCODE COPY A,CH:OPC(X) ENSURE CHA/OPC WRD. REFLECTS CURRENT SETTINGS COPY X,CB:AD STORE CTRL. BLK. ADD. FOR 'STATUS' ROUTINE COPY X,CB1 STORE CTRL. BLK. ADD. FOR 'ERROR' ROUTINE COPY ME:AD1(X),X GET BUFFER ADDRESS SHIFT X,LO,1 MAKE BYTE ADDRESS COPY CHADD,A GET CHNL. ADD. SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE IN TX FRAME RBIT BY:,S SET WORD MODE COPY CB1,X GET TX CTRL. BLK. ADD. * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST ENSCC ENABLE SCC INTS. JST OTX SEND CTRL. BLK. JST SENBSY STILL BUSY? JMP TRAN:1 NO, JUMP JST DELAY INC. TIME JMP $-3 TIME NOT EXPIRED COPY =ER017,A 'BUSY BIT STILL SET' JMP TRAN:2 DISPLAY ERROR * TRAN:1 JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =ER004,A 'SCC INT. TIMED OUT' TRAN:2 JST SEL RESET THE SCC JST ERROR DISPLAY ERROR * TRAN1 JMP *TRAN0 EXIT * LPOOL TITL TEST UTILITIES (TRCTST - SUBROUTINE 'TRAN0' EOBS) ****************************** * * 'TX ONLY' END-OF-BLK. SERVICE ROUTINES * * TRTX1 - NORMAL 'TX' INT. SERVICE ROUTINE * * THIS IB S THE EOB SERVICE ROUTINE FOR A NORMAL * TERM. OF A 'TX' COM. * * THIS SERVICE ROUTINE WILL CHECK FOR MULTIPLE * EOB INTS. AND STATUS ERRORS UPON * TERM. OF A 'TX' COM., * * ALSO THE RX AND NOP/INITZ. STATUS IN THE TBI * WILL BE CHECKED FOR ALTERATIONS AS WELL AS THE * RX BYTE COUNT. * ****************************** * * TRTX1 - NORMAL 'TX' INT. SERVICE ROUTINE * TRTX1 ENT TX EOB IMS TX:FLG SET TX INT. FLAG JMP TRTX10 IF RESET, IT'S COOL COPY =ER012,A 'MULTIPLE INTS.' TRTX1: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. JST ERROR DISPLAY ERROR JST STATUS CHECK STATUS JST ERROR DISPLAY ANY ERROR JMP TRAN1 EXIT TRTX10 SBIT GI:,S ENABLE INTS. JST DELAY DO DELAY TO FINISH TRANSMISSION OF DATA JMP $-1 INC. TIME JST STATUS CHECK STATUS JST ERROR DISPLAY ANY ERRORS COPY TBIADD,X GET TBI ADD. COPY TB:TXS(X),A GET TX STATUS TBIT RCIP:,A RX COM. IN PROGRESS - SHOULD BE 0 JT OV,TRTX11 IF SET, ERROR TBIT RXDP:,A RX DATA PRESENT - SHOULD BE 0  JF OV,$+4 IF RESET, JUMP TRTX11 COPY =ER031,A 'RCIP BIT OR RXDP BIT SET' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS TBIT TCIP:,A TX COM. IN PROGRESS - SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER039,A 'TX COM. IN PROGRESS WAS RESET' JST ERROR DISPLAY ERROR * COPY TB:RXS(X),A GET RX STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER013,A 'RX TBI STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:RXB(X),A GET RX BYTE COUNT - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER014,A 'RX BYTE COUNT ALTERED' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET NOP/INITZ. STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER015,A 'NOP/INITZ. STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY CB:TX,X GET TX CTRL. BLK. ADD. COPY BT:CT1(X),A GET PRIMARY BUF. SIZE ADD BT:CT2(X),A ADD DATA CHAIN BUF. SIZE COPY TBIADD,X GET TBI ADD. CSK A,TB:TXB(X) COMPARE TO BYTES XFRD. NOP JMP $+2 BAD JMP $+3 GOOD, JUMP COPY =ER016,A 'BYTES XFRD NOT EQUAL TO BUF. LENGTH' JST ERROR DISPLAY ERROR IMS TRAN0 SET RETURN ADD. JMP TRAN1 EXIT * LPOOL TITL ****************************** * * TRCRX1 - RX ERROR 'TX ONLY' INT. SERVICE ROUTINE * TRCIN1 - NOP/INITZ. ERROR 'TX ONLY' INT. SERVICE ROUTINE * * THESE ARE THE ERROR EOB SERVICE ROUTINES FOR AN * ABNORMAL TERM. OF A 'TX' COM. TO * THE RX OR NOP/INITZ. INT. VECTOR ADD. IN * THE TBI. * ****************************** * TRCRX1 ENT RX ERROR 'TX ONLY' EOB IMS RX:SE SET RX STATUS ERROR FLAG COPY =ER018,A 'RX INT. VECTOR INSTEAD OF TX' JMP TRTX1: DISPLAY ERROR * TRCIN1 ENT NOP/INITZ. ERROR 'TX ONLY' EOB IMS IN:SE SET NOP/INITZ. STATUS ERROR FLAG COPY =ER019,A 'NOP/INITZ. VECTOR INSTEAD OF TX' JMP TRTX1: DISPLAY ERROR TITL TEST UTILITIES (TRCTST - SUBROUTINE 'TRRC0') ****************************** * * TRRC0 - THIS SUBROUTINE WILL CLEAR THE TBI OF STATUS AND * BYTE COUNTS AND SET THE INT. VECTORS FOR A * TX AND RX TEST AS WELL AS AN ERROR * 'NOP/INITZ' INT. THE TIME LIMIT FOR BOTH *  A RX AND A TX INT. IS 1 SECOND. * * THE RX AND TX CTRL. BLKS. (CB:RX, CB:TX) AS WELL * AS THE RX AND TX BUFS. MUST HAVE BEEN SET UP * PRIOR TO ENTERING THIS SUBROUTINE. * * CALLING SEQUENCE: * JST TRRC0 * JMPC  ? INT. TIMED OUT R * JMP ? GOOD RETURN R+1 * ****************************** * TRRC0 ENT TX/RX TEST COPY =127,A SET COUNT TO 128 WORDS COPY =RCBUFF,X GET RX BUF. ADD. JST CLEAR CLEAR IT OUT COPY TBIADD,X GET TBI ADD. COPY =TRRX1,A GET RX EOB ADD. COPY A,TB:RXI(X) SET RX INT. VECTOR ADD. COPY =TRTX2,A GET TX EOB ADD. COPY A,TB:TXI(X) SET TX INT. VECTOR ADD. COPY =TRCIN2,A GET NOP/INITZ. ERROR EOB ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. VECTOR ADD. JST CLRTBI CLEAR TBI * COPY CB:TX,X GET TX CTRL. BLK. ADD. COPY X,TX:CB SET CTRL. BLK. ADD. FOR 'BUFFCM' ROUTINE COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' ROUTINE COPY CHAN:,A GET CHNL. SHIFT A,LO,CHA: SHIFT INTO PLACE OR BITS,A 'OR' IN DTR/TR, RTS/RS AND SEC. ADD. BITS COPY A,TEMP1 SAVE FOR RX OR =OPC:TX,A 'OR' IN TX OP CODE COPY A,CH:OPC(X) ENSURE TX CHA/OPC WRD. REFLECTS CURRENT SETTINGS * COPY CB:RX,X GET RX CTRL. BLK. ADD. COPY X,RX:CB SET CTRL. BLK. ADD. FOR 'BUFFCM' ROUTINE COPY X,CB2 SET CTRL. BLK. ADD. FOR 'ERROR' ROUTINE COPY TEMP1,A GET CURRENT SETTINGS OR =OPC:RX,A 'OR' IN RX OPCODE COPY A,CH:OPC(X) ENSURE RX CHA/OPC WRD. REFLECTS CURRENT SETTINGS COPY CB1,X GET TX CTRL. BLK. ADD. COPY ME:AD1(X),X GET BUFFER ADD. SHIFT X,LO,1 MAKE BYTE ADD. COPY CHADD,A GET CHNL. ADD. SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE IN FRAME RBIT BY:,S SET WORD MODE COPY CB2,X GET RX CTRL. BLK. ADD. * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY CB:TX,A GET TX CTRL. BLK. JST ENSCC ENABLE SCC INTS. JST OTX SEND RX CTRL. BLK. JST SENBSY STILL BUSY? JMP TRRC1 NO, JUMP JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED JMP TRRC2 DISPLAY ERROR * TRRC1 JST OTA SEND TX CTRL. BLK. JST SENBSY STILL BUSY JMP TRRC3 NO, JUMP JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED COPY A,X PUT CTRL. BLK. IN X TRRC2 COPY =ER017,A 'BUSY BIT STILL SET' COPY X,CB1 SET CTRL. BLK. FOR 'ERROR'  COPY =0,X SET X TO ZERO COPY X,CB2 SET CTRL. BLK. FOR 'ERROR' JMP TRRC4 DISPLAY ERROR * TRRC3 JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =ER004,A TIME EXPIRED TRRC4 JST SEL RESET THE SCC JST ERROR DISPLAY ERROR TRRC5 JMP *TRRC0 EXIT * LPOOL TITL TEST UTILITIES (TRCTST - SUBROUTINE 'TRRC0' EOBS) ****************************** * * 'TX AND RX' END-OF-BLK. SERVICE ROUTINES * * TRRX1 - NORMAL 'RX' INT. SERVICE ROUTINE * TRTX2 - NORMAL 'TX' INT. SERVICE ROUTINE * * THESE ARE THE EOB SERVICE ROUTINES FOR A NORMAL * TERM. OF A TX AND A RX COM. * * THESE SERVICE ROUTINES WILL CHECK FOR MULTIPLE *  EOB INTS. AND STATUS ERRORS UPON * TERM. OF A TX AND A RX COM. * * ALSO THE NOP/INITIALIZE STATUS IN THE TBI WILL * BE CHECKED FOR ALTERATIONS. * ****************************** * * TRTX2 - NORMAL 'TX' INT. SERVICE ROUTINE * TRTX2 ENT NORMAL TX EOB IMS TX:FLG SET TX INT. FLAG JMP TRTX20 IF RESET, IT'S COOL COPY =ER012,A 'MULTIPLE INTS.' COPY CB:TX,X GET TX CTRL BLK. ADD. TRTX2: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' JST ERROR DISPLAY ERROR JST STATUS CHECK STATUS JST ERROR DISPLAY ANY ERROR JMP TRRC5 EXIT TRTX20 SBIT GI:,S ENABLE INTS. COPY =-2,A SET A TO -2 CSK A,RX:FLG CHECK FOR INT. SETTING NOP JMP $+2 FLAG IS SET JMP TRTX21 IF STILL RESET, DO DELAY COPY =ED R026,A 'RX INT. OCCURRED FIRST' JST ERROR DISPLAY ERROR JMP TRRX11 DO STATUS CHECKS TRTX21 JST ENSCC ENSURE SCC INTS. ARE ENABLED JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED COPY =ER024,A 'RX INT. TIMED OUT' JMP TRTX2:-1 DISPLAY ERROR * * TRRX1 - NORMAL 'RX' INT. SERVICE ROUTINE * TRRX1 ENT NORMAL RX EOB IMS RX:FLG SET RX INT. FLAG JMP TRRX10 IF RESET, IT'S COOL COPY =ER025,A 'MULTIPLE INTS. FOR RX COM.' TRRX1: COPY CB:RX,X GET RX CTRL. BLK. ADD. JMP TRTX2: DISPLAY ERROR TRRX10 SBIT GI:,S ENABLE INTS. COPY =-2,A SET A TO -2 CSK A,TX:FLG CHECK FOR INT. SETTING NOP JMP TRRX11 IF SET, JUMP JST ENSCC ENSURE SCC INTS. ARE ENABLED JST DELAY INC. TIME/WAIT FOR TX INT. JMP $-1 TIME NOT EXPIRED COPY =ER027,A 'TX INT. TIMED OUT' JMP TRRX1: DISPLAY ERROR * TRRX11 COPY CB:TX,A GET TX CTRL. BLK. ADD. COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERRORS COPY CB:RX,A GET RX CTRL. BLK. ADD. COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERRORS * COPY TBIADD,X GET TBI ADD. COPY TB:INS(X),A GET NOP/INITZ. STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER028,A 'NOP/INITZ STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS  TBIT TCIP:,A TX IN PROGRESS - SHOULD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER037,A 'TCIP BIT WAS NOT SET' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS TBIT RCIP:,A RX COM. IN PROGRESS - SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER032,A 'RCIP BIT RESET' JST ERROR DISPLAY ERROR * COPY TB:RXS(X),A GET RX STATUS TBIT RCIP:,A 'RX' COM. IN PROGRESS - SHOULD BE 1 JT OV,$+4 IF SET, JUMP COPY =ER038,A 'RCIP BIT RESET' JST ERROR DISPLAY ERROR * COPY TB:RXS(X),A GET RX STATUS TBIT TCIP:,A TX COM. IN PROGRESS - SHOULD BE 0 JT OV,TRRX12 IF SET, ERROR TBIT RXDP:,A RX DATA PRESENT - SHOULD BE 0 JF OV,$+3 IF RESET, JUMP TRRX12 COPY =ER033,A 'TCIP BIT OR RXDP BIT SET' JST ERROR DISPLAY ERROR * IMS TRRC0 GOOD RETURN JMP TRRC5 EXIT * LPOOL TITL ****************************** * * TRCIN2 - NOP/INITZ. ERROR 'RX/TX' INT. SERVICE ROUTINE * * THIS IS THE ERROR EOB SERVICE ROUTINE FOR AN * ABNORMAL TERM. OF A TX OR A RX * COM. TO THE NOP/INITZ. INT. VECTOR * ADD. IN THE TBI. * ****************************** * * TRCIN2 - NOP/INITZ. ERROR 'RX/TX' INT. SERVICE ROUTINE * TRCIN2 ENT NOP/INTZ. ERROR 'TX/RX' EOB IMS IN:SE SET NOP/INITZ. ERROR STATUS FLAG JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =-1,A SET A TO -1 CSK A,TX:FLG TX INT. FLAG SET? NOP JMP $+4 NO, JUMP COPY =ER019,A 'NOP/INTIZ. INT. INSTEAD OF RX'? COPY CB:TX,X GET TX CTRL. BLK. ADD. JMP TRCI20 DISPLAY ERROR CSK A,RX:FLG RX INT. FLAG SET? NOP JMP $+4 NO, JUMP COPY =ER030,A 'NOP/INTIZ. INT. INSTEAD OF TX'? COPY CB:RX,X GET RX CTRL. BLK. ADD. JMP TRCI20 DISPLAY ERROR COPY =ER029,A 'NOP/INITZ. INT. INSTEAD OF RX OR TX' JMP TRCI21 DISPLAY ERROR * TRCI20 COPY X,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' JST ERROR DISPLAY ERROR JST STATUS DO STATUS CHECK TRCI21 JST ERROR DISPLAY ANY ERROR JMP TRRC5 EXIT * LPOOL TITL TEST UTILITIES (INZ:C0 - TEST C) ****************************** * * INZ:C0 - EXECUTE INITIALIZE COMS. - TEST C * * THIS SUBROUTINE WILL CLEAR THE TERM. BLKS. * E  AND SET UP 'INITIALIZE' CTRL. BLKS. FOR BOTH * CHNLS. ACCORDING TO ADD. SELECT AND CHNL. * ADD. * *  THIS SUBROUTINE WILL THEN ISSUE 'INITIALIZE' COMS. * TO BOTH CHNLS. AND WAIT APPROXIMATELY 1 SECOND FOR *  AN INT. FROM BOTH CHNLS. IF AN INT. FOR * EITHER CHNL. DOES NOT OCCUR, AN 'SCC INT. TIME * OUT' ERROR WILL BE REPORTED. * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS MUST HAVE * BEEN SET UP PRIOR TO ENTERING THIS SUBROUTINE: * * CHADD - CHNL. ADD. * BITS - DTR/TR, RTS/RS AND SEC. ADD. BITS FOR CHNL./OPCODE WORD * * CALLING SEQUENCE: * JST INZ:C0 * JMP ? INT. TIMED OUT R * JMP ? INT. OCCURED R+1 * ****************************** * INZ:C0 ENT EXECUTE INITIALIZE COMS. COPY =A:CBIN,X GET CHNL. A CTRL. BLK. ADD. COPY =OPC:IZ,A GET 'INITIALIZE' OP CODE JST CBSET BUILD 'INITIALIZE' CTRL. BLK. FOR CHNL. A COPY =TBI:A,A GET TBI ADD. FOR CHNL. A COPY A,TB:ADD(X) STORE IN CTRL. BLK. COPY CHADD,A GET CHNL. ADD. FIELD SHIFT A,LO,8 SHIFT INTO WORD POSITION OR SDLCF,A 'OR' IN SDLC FLAG COPY A,CH:ADD(X) STORE IN CTRL. BLK. * COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. COPY =1%CHA:;OPC:IZ,A GET 'INITIALIZE' OP CODE CHNL. B JST CBSET BUILD 'INITIALIZE' CTRL. BLK. FOR CHNL. B COPY =TBI:B,A GET TBI ADD. FOR CHNL. B COPY A,TB:ADD(X) STORE IN CTRL. BLK. COPY CHADD,A GET CHNL. ADD. FIELD SHIFT A,LO,8 SHIFT INTO WORD POSITION OR SDLCF,A 'OR' IN SDLC FLAG COPY A,CH:ADD(X) STORE IN CTRL. BLK. * INZ:C1 COPY =TBI:A,X GET CHNL. A TBI ADD. JST CLRTBI CLEAR TERM. BLK. COPY =INADA,A GET CHNL. A NOP/INITZ. INT. ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. SERVICE RT. ADD. COPY =INERXA,A GET CHNL. A RX ERROR INT. ADD.  COPY A,TB:RXI(X) SET RX INT. SERVICE ROUTINE ADD. COPY =INETXA,A GET CHNL. A TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. SERVICE ROUTINE ADD. * COPY =TBI:B,X GET CHNL. B TBI ADD. JST CLRTBI CLEAR TERM. BLK. COPY =INADB,A GET CHNL. B NOP/INITZ. INT. ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. SERVICE RT. ADD. COPY =INERXB,A GET CHNL. B RX ERROR INT. ADD. COPY A,TB:RXI(X) SET RX INT. SERVICE ROUTINE ADD. COPY =INETXB,A GET CHNL. B TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. SERVICE ROUTINE ADD. * JST CLRFGS CLEAR ALL INT. FLAGS COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. JST SEND:B DO ACTUAL I/O INZ:C2 JMP *INZ:C0 'SCC INT. TIMED OUT' * LPOOL TITL TEST UTILITIES (INZ:D0 - TEST D) ****************************** * * INZ:D0 - EXECUTE INITIALIZE COMS. - TEST D * *  THIS SUBROUTINE WILL CLEAR THE TERM. BLKS. * AND SET UP 'INITIALIZE' CTRL. BLKS. FOR BOTH * CHNLS. ACCORDING TO ADD. SELECT AND CHNL. ADD. * * THIS SUBROUTINE WILL THEN ISSUE 'INITIALIZE' * COMS. TO BOTH CHNLS. AND WAIT APPROXIMATELY * 1 SECOND FOR AN INT. FROM BOTH CHNLS. IF AN INT. * FOR EITHER CHNL. DOES NOT OCCUR, AN 'SCC INT. * TIME OUT' ERROR WILL BE REPORTED. * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS MUST HAVE * BEEN SET UP PRIOR TO ENTERING THIS SUBROUTINE: * * CHADD - CHNL. ADD. * BITS - DTR/TR, RTS/RS AF ND SEC. ADD. BITS FOR * CHNL./OPCODE WORD * * CALLING SEQUENCE: * JST INZ:D0 * JMP ? INT. TIMED OUT R * JMP ? INT. OCCURED R+1 * ***************************** * INZ:D0 ENT INITIALIZE - TEST D COPY INZ:D0,A GET RETURN ADD. COPY A,INZ:C0 SET INTO ALT. SUB. COPY =A:CBIN,X GET CHNL. A CTRL. BLK. ADD. COPY =OPC:IZ,A GET 'INITZ.' OPCODE JST CBSET BUILD 'INITZ.' CTRL. BLK. FOR CHNL. A COPY =TBI:A,A GET TBI ADD. FOR CHNL. A COPY A,TB:ADD(X) STORE IN CTRL. BLK. COPY CHADD,A GET CHNL. ADD. FIELD SHIFT A,LO,8 SHIFT INTO WORD POSITION OR SDLCF,A 'OR' IN SDLC FLAG COPY A,CH:ADD(X) STORE IN CTRL. BLK. * COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. COPY =1%CHA:;OPC:IZ,A GET 'INITZ.' OPCODE - CHNL. B JST CBSET BUILD 'INITZ.' CTRL. BKL. FOR CHNL. B COPY =TBI:B,A GET TBI ADD. FOR CHNL. B COPY A,TB:ADD(X) STORE IN CTRL. BLK. COPY CHADD,A GET CHNL. ADD. FIELD SHIFT A,LO,8 SHIFT INTO WORD POSITION OR SDLCF,A 'OR' IN SLDC FLAG COPY A,CH:ADD(X) STORE IN CTRL. BKL. * INZ:D1 COPY =TBI:A,X GET CHNL. A TBI ADD. JST CLRTBI CLEAR TBI COPY =IN:DAI,A GET CHNL. A NOP/INITZ. INT. ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. ADD. COPY =INERXA,A GET CHNL. A RX ERROR INT. ADD. COPY A,TB:RXI(X) SET RX INT. ADD. COPY =INETXA,A GET CHNL. A TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. ADD. * COPY =TBI:B,X GET CHNL. B TBI ADD. JST CLRTBI CLEAR TBI COPY =IN:DBI,A GET CHNL. B NOP/INITZ. INT. ADD. COPY A,TB:INI(X) SET NOP/INITZ. INT. ADD. COPY =INERXB,A GET CHNL. B RX ERROR INT. ADD. COPY A,TB:RXI(X) SET RX INT. ADD. COPY =INETXB,A GET CHNL. B TX ERROR INT. ADD. COPY A,TB:TXI(X) SET TX INT. ADD. JST CLRFGS CLEAR INTS COPY =-2,A SET A TO -2 COPY A,INZINT SET INT. COUNT * COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME JST SEL RESET SCC/INITIATE MICORDIAG. JST SENBSY STILL BUSY JMP $+5 NO, JUMP JST DELAY YES, INC. TIME JMP $-3 TIME NOT EXPIRED COPY =ER003,A 'MICRODIAG. FAILED' JST ERROR DISPLAY ERROR * COPY CNTWD,A GET CONTROL WORD TBIT SLP,A SCOUT LOOP BACK JF OV,$+2 IF NOT, JUMP JST SLOOPE ELSE DO IT COPY =1,A SET TIME OUT FOR 1 SECOND JST TIMEST SET TIME COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. JST SEND:B DO ACTUAL I/O INZ:D2 JMP *INZ:D0 'SCC INT. TIMED OUT' * LPOOL TITL TEST UTILITIES (INZ:D0 - TEST D EOBS) ****************************** * * IN:DAI - NORMAL 'INITIALIZE' INT. SERVICE ROUTINE * FOR CHNL. A (TEST D) * * IN:DBI - NORMAL 'INITIALIZE' INT. SERVICE ROUTINE FOR *  CHNL. B (TEST D) * * THESE ARE THE EOB SERVICE ROUTINES FOR A NORMAL TERM. * FOR AN INITIALIZE COM. FOR BOTH CHNLS. OF THE SCC. * * THESE SERVICE ROUTINES WILL CHECK FOR MULTIPLE EOB INTS. * AND STATUS ERRORS UPON TERM. OF AN INITIALIZE COMS. * * ALSO THE TX AND RX STATUSES AND BYTES COUNTS IN THE TBI * WILL BE CHECKED FOR ALTERATIONS. * ****************************** * * CHNL A INITIALIZE EOBS * IN:DAI ENT CHNL. A NORMAL EOB IMS A:INFL SET INITZ. INT. FLAG - CHNL. A JMP IN:DA1 IF NOT SET, JUMP JMP INADA:+1 'MULTIPLE INTS.' IN:DA1 COPY TBI:A+TB:INS,A GET STATUS COPY A,A:STA SAVE IT COPY BITS,A GET BIT SETTING TBIT RTS:RS,A IS RTS/RS'ON'? JF OV,$+3 YES, JUMP TBIT DTR:TR,A IS DTR/TR 'ON? G JT OV,IN:DAA+1 NO, JUMP COPY =IN:DAA,A GET ALTERNATE EOB ADD. COPY A,TBI:A+TB:INI STORE IN TBI IN:DA2 SBIT GI:,S ENABLE INTS.  COPY =-1,A SET A TO -1 CSK A,A:INFL IS CHNL. A INT SET? NOP JMP INADB1+6 NO, WAIT FOR IT CSK A,INZINT IS CHNL. A ALT. INT SET? NOP JMP INADB1+6 NO, WAIT FOR IT CSK A,B:INFL IS CHNL. B INT. SET? NOP JMP INADA1+6 NO, WAIT FOR IT COPY =TBI:A,X GET CHNL. A TBI ADD. COPY TB:INS(X),A GET STATUS AND =:FC,A MASK FOR ERROR BITS OR A:STA,A 'OR' IN ORIGINAL STATUS COPY A,TBI:A+TB:INS STORE IN TBI JMP INADA2 DO STATUS CHECKS * IN:DAA ENT CHNL. A 'STATUS' EOB IMS INZINT SET ALT. STATUS INT. - CHNL. A JMP IN:DA2 IF NOT SET, JUMP JMP INADA:+1 'MULTIPLE INTS.' * * CHNL. B INITIALIZE EOB * IN:DBI ENT CHNL. B NORMAL EOB IMS B:INFL SET INTIZ. INT. FLAG - CHNL. B JMP IN:DA2 IF NOT SET, JUMP JMP INADB:+1 'MULTIPLE INTS.' * INZINT RES 1,0 ALT. EOB INT. COUNT A:STA RES 1,0 'MODEM STATUS' STATUS * LPOOL TITL TEST UTILITIES (NOP0:C - TESTS C,D) ****************************** * * NOP0:C EXECUTE NOP COMS. * * THIS SUBROUTINE WILL BUILD NOP CTRL. BLKS. FOR * BOTH CHNLS. AND SEND THEM TO THE SCC. THE * RETURNED STATUSES WILL BE CHECKED FOR ERRORS. * * CALLING SEQUENCE: * JST NOP0:C * JMP ? INT. TIMED OUT R * JMP ? INT. OCCURED R+1 * ****************************** * NOP0:C ENT EXECUTE NOP COMS. COPY NOP0:C,A GET RETURN ADD. COPY A,INZ:C0 SET RETURN ADD. COPY =A:CBIN,X GET CHNL. A CTRL. BLK. ADD. COPY =OPC:NP,A GET NOP OP CODE JST CBSET BUILD 'NOP' CTRL. BLK. * COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. COPY =1%CHA:;OPC:NP,A GET NOP OP CODE CHNL. B  JST CBSET BUILD 'NOP' CTRL. BLK. JMP INZ:C1 DO I/O TITL TEST UTILITIES (INZ:C0/INZ:D0/NOP0:C - TESTS C,D EOBS) ****************************** * * INADA - NORMAL 'NOP/INITIALIZE' INT. SERVICE ROUTINE * FOR CHNL. A (TEST C) * * INADB - NORMAL 'NOP/INITIALIZE' INT. SERVICE ROUTINE * FOR CHNL. B (TEST C) * * THESE ARE THE EOB SERVICE ROUTINES FOR A NORMAL * TERM. OF A NOP OR INITIALIZE COM. FOR * BOTH CHNLS. OF THE SCC. * * THESE SERVICE ROUTINES WILL CHECK FOR MULTIPLE EOB * INTS. AND STATUS ERRORS UPON TERM. OF A * NOP OR INITIALIZE COM. * * ALSO THE TX AND RX STATUSES AND BYTE COUNTS IN THE * TBI WILL BE CHECKED FOR ALTERATIONS. * ****************************** * *  CHNL. A NOP/INITIALIZE EOB * INADA ENT CHNL. A NORMAL EOB IMS A:INFL SET NOP/INITZ. INT. FLAG - CHNL. A JMP INADA1 IF NOT PREVIOUSLY SET, JUMP COPY =ER005,A 'MULTIPLE INTS.' INADA: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =A:CBIN,X GET CHNL. A CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. FOR 'ERROR' COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =TBI:A,X GET CHNL. A TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST ERROR DISPLAY ERROR JST STATUS CHECK STATUS INADA0 JST ERROR DISPLAY ERROR REPORT JMP INZ:C2 BAD RETURN * INADA1 SBIT GI:,S ENABLE INTS. COPY =-1,A SET A TO -1 CSK A,B:INFL IS INT. SET? NOP JMP $+2 NO, WAIT FOR IT JMP INADA2 YES, CHECK STATUSES JST ENSCC ENSURE SCC INTS. ARE ENABLED JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY A,CB1 SET CTRL. BLK. FOR 'ERROR' H COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' JST STATUS CHECK STATUS FOR ERRORS JST ERROR DISPLAY ANY ERROR COPY =ER004,A 'SCC INT. TIMED OUT' JMP INADB: DISPLAY ERROR * INADA2 COPY =A:CBIN,X GET CTRL. BLK. ADD. COPY CH:OPC(X),A GET CHNL./OPC WORD AND =OPC:MK,A MASK FOR OPCODE ONLY JEQ A,$+4 IF NOP, JUMP  COPY =:8000,A SET LOOP COUNT SUB =1,A DEC. LOOP COUNT JNE A,$-1 LOOP BACK COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP3 STORE COUNT COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY =TBI:A,X GET CHNL. A TBI ADD. INADA3 COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST STATUS CHECK STATUS FOR ERRORS JST ERROR DISPLAY ANY ERRORS COPY TB:AD,X GET TBI ADD. * COPY TB:RXS(X),A GET RX STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER006,A 'RX TBI STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:RXB(X),A GET RX BYTE COUNT - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER007,A 'RX BYTE COUNT ALTERED' JST ERROR DISPLAY ERROR * COPY TB:TXS(X),A GET TX STATUS - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER008,A 'TX TBI STATUS ALTERED' JST ERROR DISPLAY ERROR * COPY TB:TXB(X),A GET TX TBI BYTE COUNT - SHOULD BE 0 JEQ A,$+3 IF ZERO, IS GOOD COPY =ER009,A 'TX TBI BYTE COUNT ALTERED' JST ERROR DISPLAY ERROR * COPY TB:INS(X),A GET NOP/INITIAZLIE STATUS TBIT RCIP:,A RX COM. BIT SHOULD BE 0 JT OV,INADA4 IF SET, ERROR TBIT TCIP:,A TX COM. BIT SHOULD BE 0 JT OV,INADA4 IF SET, ERROR TBIT RXDP:,A RX DATA PRESENT BIT SHOULD BE 0 JF OV,$+3 IF RESET, JUMP INADA4 COPY =ER020,A 'RCIP, TCIP OR RXDP BIT SET' JST ERROR DISPLAY ERROR REPORT * COPY =B:CBIN,A GET CHNL. B CTRL. BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. IMS TEMP3 INC. LOOP COUNT JMP INADA3 DO CHNL. B * IMS INZ:C0 SET GOOD RETURN JMP INZ:C2 EXIT * LPOOL TITL * * CHNL. B NOP/INITIALIZE EOB * INADB ENT CHNL. B NORMAL EOB IMS B:INFL SET NOP/INITZ. INT. FLAG - CHNL. B JMP INADB1 IF NOT PREVIOUSLY SET, JUMP COPY =ER005,A 'MULTIPLE INTS.' INADB: JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY =TBI:B,X GET CHNL. B TBI ADD. JMP INADA0-3 DISPLAY ERROR INADB1 SBIT GI:,S ENABLE INTS. COPY =-1,A SET A TO -1 CSK A,A:INFL IS INT. SET? NOP JMP $+2 NO, WAIT FOR IT JMP INADA2 YES, CHECK STATUSES JST ENSCC ENSURE SCC INTS. ARE ENABLED JST DELAY INC. TIME JMP $-1 TIME NOT EXPIRED JST SEL TIME EXPIRED/RESET THE SCC COPY =B:CBIN,A GET CHNL. B CTRL. BLK. ADD. COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY A,CB:AD SET CTRL. BLK. ADD. FOR 'STATUS' COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' JST STATUS CHECK STATUS FOR ERRORS JST ERROR DISPLAY ANY ERROR COPY =ER004,A 'SCC INT. TIMED OUT' JMP INADA: DISPLAY ERROR * LPOOL TITL ****************************** * * INERXA - * INERXB - RX ERROR 'NOP/INITIALIZE' INT. SERVICE ROUTINES * * INETXA - * INETXB - TX ERROR 'NOP/INITIALIZE' INT. SERVICE ROUTINES * * THESE ARE THE ERROR EOB SERVICE ROUTINES FOR AN ABNORMAL * TERM. OF A NOP OR INITIALIZE COM. TO THE RX OR * TX INT. VECTOR ADD. IN THE TBI I. * ****************************** * INERXA ENT CHNL. A RX ERROR EOB IMS RX:SE SET RX ERROR FLAG COPY =ER010,A 'RX INT. INSTEAD OF NOP/INITZ.' JMP INE:A DISPLAY ERROR * INETXA ENT CHNL. A TX ERROR EOB IMS TX:SE SET TX ERROR FLAG COPY =ER011,A 'TX INT. INSTEAD OF NOP/INITZ.' INE:A JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =A:CBIN,X GET CHNL. A CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. FOR 'ERROR' COPY =TBI:A,X GET CHNL. A TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST ERROR DISPLAY ERROR COPY =-1,A SET A TO -1 CSK A,B:INFL CHNL. B INT. SET? NOP JMP INZ:C2 EXIT COPY =B:CBIN,A GET CHNL. B CTRL BLK. ADD. COPY =TBI:B,X GET CHNL. B TBI ADD. INE:A1 COPY A,CB:AD SET CTRL. BLK. FOR 'STATUS' COPY A,CB1 SET CTRL. BLK. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST STATUS DO STATUS CHECK JST ERROR DISPLAY ANY ERROR JMP INZ:C2 EXIT * INERXB ENT CHNL. B RX ERROR EOB IMS RX:SE SET RX ERROR FLAG JMP INE:B DISPLAY ERROR * INETXB ENT CHNL. B TX ERROR EOB IMS TX:SE SET TX ERROR FLAG COPY =ER011,A 'TX INT. INSTEAD OF NOP/INITZ.' INE:B JST SEL RESET THE SCC SBIT GI:,S ENABLE INTS. COPY =B:CBIN,X GET CHNL. B CTRL. BLK. ADD. COPY X,CB1 SET CTRL. BLK. FOR 'ERROR' COPY =TBI:B,X GET CHNL. B TBI ADD. COPY X,TB:AD SET TBI ADD. FOR 'ERROR' JST ERROR DISPLAY ERROR COPY =-1,A SET A TO -1 CSK A,A:INFL CHNL. A INT. SET? NOP JMP INZ:C2 EXIT COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. COPY =TBI:A,X GET CHNL. A TBI ADD> JMP INE:A1 DO STATUS CHECK * LPOOL TITL TEST UTILITIES (TRRC:C - TESTS C,D) ****************************** * * TRRC:C - TESTS THE ABILITY OF THE SCC TO TX AND TO * RX DATA THROUGH BOTH CHNLS. * * FIRST, 'INITIALIZE' COMS. WILL BE SENT TO BOTH CHNLS. OF * THE SCC WITH 'MATCH ON SECONDARY ADD.', CHNL. ADD. * FIELD SET TO THE DEFAULT, DTR/TR BIT 'ON', AND RTS/RS * BIT 'OFF'. THEN DATA IS 'TX'ED ONLY' TO BOTH CHNLS. *  AT THE END OF TRANSMISSION, THE STATUS FOR BOTH CHNLS. IS * CHECKED FOR ERRORS AND 'NOP' COMS. FOR BOTH CHNLS. ARE *  SENT TO THE SCC. THE CTS/CS AND DCD/RR BITS IN THE RETURNED NOP * STATUSES ARE CHECKED (THEY SHOULD BE RESET) AS WELL AS THE * STATUSES. * * SECOND, 'INITIALIZE' COMS. WILL BE SENT TO BOTH CHNLS. OF * THE SCC WITH THE DTR/TR AND RTS/RS BITS 'ON'. THEN 3 SUCCESSIVE * 'TX ONLY' COMS. WITH VARYING BUF. ADDS. AND * SIZES WILL BE SENT TO BOTH CHNLS. OF THE SCC. AFTER EACH * 'TX' COM., THE STATUSES ARE CHECKED AND 'NOP' COMS. * ARE THEN SENT TO BOTH CHNLS. OF THE SCC. THE DSR/DM, CTS/CS AND DCD/RR * BITS IN THE RETURNED NOP STATUSES ARE CHECKED (THEY SHOULD ALWAYS * BE SET) AS WELL AS THE STATUSES. * * THIRD, 'INITIALIZE' COMS. WILL BE SENT TO BOTH CHNLS. OF THE * SCC WITH 'ALL ADDS. ACCEPTED', CHNL. ADD. FIELD SET TO * THE DEFAULT, DTR/TR BIT 'ON', AND RTS/RS BIT 'OFF'. THEN * DATA IS 'TX'ED AND RX'ED' TO BOTH CHNLS. AT THE END OF * EACH 'TRANSMISSION/RECEPTION' OPERATION, THE STATUSES FOR ALL * COMS. ARE CHECKED AND THE INPUT AND OUTPUT BUFS. ARE COMPARED. * THEN 'NOP' COMS. ARE SENT TO BOTH CHNLS. OF THE SCC. THE CTS/CS * AND DCD/RR BITS IN THE RETURNED NOP STATUSES ARE CHECKED (THEY * SHOULD ALWAYS BE RESET) AS WELL AS THE STATUSES. THIS PROCESS IS * REPEATED TWJ ICE MORE WITH DIFFERENT CHNL. ADDS. * * FOURTH, 'INITIALIZE' COMS. WILL BE SENT TO BOTH CHNLS. OF THE * SCC WITH 'MATCH ON SECONDARY ADD.', AND DTR/TR & RTS/RS BITS 'ON'. THEN * 3 SUCCESSIVE 'TX/RX' COMS. WITH VARYING BUF. * ADDS. AND SIZES AND ALSO VARYING CHNL. ADDS. WILL BE * SENT TO BOTH CHNLS. OF THE SCC. AT THE END OF EACH 'TRANSMISSION/ * RECEPTION' THE STATUSES FOR ALL COMS. ARE CHECKED AND THE INPUT * AND OUTPUT BUFS. ARE COMPARED. THEN 'NOP' COMS. ARE SENT TO *  BOTH CHNLS. OF THE SCC. THE DSR/DM, CTS/CS AND DCD/RR BITS IN THE * RETURNED NOP STATUSES ARE CHECKED (THEY SHOULD ALWAYS BE SET) AS * WELL AS THE STATUSES. * * FIFTH, AN RX COM. IS SENT TO BOTH CHANNELS OF THE SCC * FOLLOWED BY ABORT COMS. TO BOTH CHANNELS. THE ABORT BIT * IN THE RETURNED STATUSES IS CHECKED - SHOULD BE 1. * * THE FOLLOWING PARAMETERS/MEMORY LOCATIONS MUST HAVE BEEN SET UP * PRIOR TO ENTERING THIS SUBROUTINE: * * LEN - PRIMARY BUF. LENGTH IN BYTES * DCLEN - DATA CHAIN BUF. LENGTH IN BYTES * 0 INDICATES NO DATA CHAIN * * CALLING SEQUENCE: *  JST TRRC:C * ****************************** * TRRC:C ENT TX/RX TEST - TESTS C,D * * TX ONLY TEST * COPY =1%RTS:RS,A SET RTS/RS BIT COPY A,BITS STORE BITS COPY =:F9,A SET CHNL. ADD. FIELD TO DEFAULT COPY A,CHADD STORE CHNL. ADD. COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB ADD. JST 0(X) INITIALIZE JMP *TRRC:C 'SCC INT. TIMED OUT' * COPY =-2,A SET LOOP COUNT TO 2 COPY A,TEMP2 STORE COUNT COPY =TRBUFF*2,X GET TX BUF. BYTE ADD. - CHNL. A TRC:04 COPY LEN,A GET BYTE COUNT TRC:05 SBIT BY:,S SET BYTE MODE COPYB A,0(X) STORE BYTE PATTERN RBIT BY:,S SET WORD MODE ADD =1,X INC. BYTE ADD. SUB =1,A GENERATE UNIQUE BYTE PATTERN JNE A,TRC:05 LOOP IF NOT ZERO COPY =TRBUFF+64*2,X GET TX BUF. BYTE ADD. - CHNL. B IMS TEMP2 INC. CHNL. COUNT JMP TRC:04 DO CHNL. B BUF. * COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =A:CBTX,X GET CHNL. A TX CTRL. BLK. ADD. COPY =TRBUFF,A GET CHNL. A TX PRIMARY BUF. ADD. COPY A,TEMP3 SAVE BUF. ADD. COPY =OPC:TX,A GET TX OP CODE TRC:06 JST CBSET BUILD TX CTRL. BLK. COPY TEMP3,A GET BUF. ADD. COPY A,ME:AD1(X) STORE IN CTRL. BLK. COPY LEN,A GET BUF. LENGTH COPY A,BT:CT1(X) STORE IN CTRL. BLK. COPY DCLEN,A GET DATA CHAIN BUF. LENGTH JEQ A,$+5 IF ZERO, NO DATA CHAIN COPY A,BT:CT2(X) STORE IN CTRL. BLK. COPY TEMP3,A GET BUF. ADD. ADD =32,A GENERATE DATA CHAIN BUF. ADD. COPY A,ME:AD2(X) STORE IN CTRL. BLK. COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. ADD. COPY =TRBUFF+64,A GET CHNL. B TX PRIMARY BUF. ADD. COPY A,TEMP3 SAVE BUF ADD. COPY =1%CHA:;OPC:TX,A GET TX OPCODE CHNL. B IMS TRCTP1 INC. CHNL. COUNT JMP TRC:06 DO CHNL. B CTRL. BLK. COPY =:F8,A SET CHNL. ADD. TO DEFAULT COPY A,CHADD STORE CHNL. ADD. COPY =:E100,A EXPECTED STATUS COPY A,TXEXP STORE IT COPY =:C100,A EXPECTED STATUS COPY A,RXEXP STORE IT * JST TRA0:C DO TX I/O JMP *TRRC:C 'SCC INT. TIMED OUT' COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0:C EXECUTE NOP COMS. JMP *TRRC:C 'SCC INT. TIMED OUT' COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =TBI:A,X GET CHNL. A TBI ADD. COPY =A:CBTX,A GET CHNL. A CTRL. BLK. ADD. TRC:07 COPY A,CB1 SET CK TRL. BLK. ADD. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY TB:INS(X),A GET IN STATUS TBIT DSR:DM,A DSR/DM BIT SHOULD BE 1 JT OV,$+3 IF SET, JUMP COPY =ER001,A 'DSR/DM BIT DID NOT SET' JST ERROR DISPLAY ERROR JMP TRC:08 CONTINUE * LPOOL TITL * * TX AND RX TEST - TESTS C,D * * TRC:08 COPY TB:INS(X),A GET NOP STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE 0 JT OV,TRC:10 IF SET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE 0 JF OV,$+3 IF RESET, JUMP TRC:10 COPY =ER022,A 'CTS/CS OR DCD/RR BIT DID NOT RESET' JST ERROR DISPLAY ERROR REPORT COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =B:CBTX,A GET CHNL. B CTRL. BLK. ADD. IMS TRCTP1 INC. CHNL. COUNT JMP TRC:07 DO CHNL. B COPY =:F9,A SET CHNL. ADD. COPY A,CHADD STORE CHNL. ADD. * COPY =0,A RESET RTS/RS AND DTR/TR BITS COPY A,BITS STORE BITS COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB. ADD. JST 0(X) INITIALIZE JMP *TRRC:C 'SCC INT. TIMED OUT' COPY =:F8,A SET CHNL. ADD. TO DEFAULT COPY A,CHADD STORE CHNL. ADD. COPY =-3,A SET LOOP COUNT FOR 3 TIMES COPY A,TRCTP2 STORE COUNT TRC:11 COPY =:ED00,A EXPECTED STATUS COPY A,TXEXP STORE IT COPY =:CD00,A EXPECTED STATUS COPY A,RXEXP STORE IT JST TRA0:C DO TX I/O TRC:12 JMP *TRRC:C 'SCC INT. TIMED OUT' COPY =:8D00,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0:C EXECUTE NOP COMS. JMP TRC:12 'SCC INT. TIMED OUT' COPY =-2,A SET CHNL. COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =TBI:A,X GET CHNL. A TBI ADD. COPY =A:CBTX,A GET CHNL. A CTRL. BLK. ADD. TRC:13 COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY TB:INS(X),A GET NOP STATUS TBIT CTS:CS,A CTS/CS BIT SHOULD BE SET JF OV,TRC:14 IF RESET, ERROR TBIT DCD:RR,A DCD/RR BIT SHOULD BE SET JF OV,TRC:14 IF RESET, ERROR TBIT DSR:DM,A DSR/DM BIT SHOULD BE SET JT OV,$+3 IF SET, JUMP TRC:14 COPY =ER023,A 'DSR/DM, CTS/CS OR DCD/RR BIT WAS RESET' JST ERROR DISPLAY ERROR JMP TRC:15 CONT. * TRCTP1 RES 1,0 CHNL. COUNT TRCTP2 RES 1,0 LOOP COUNT * LPOOL TITL * * TX TEST - TESTS C,D (CONT.) * TRC:15 COPY CB1,X GET CTRL. BLK. ADD. COPY ME:AD1(X),A GET BUF. ADD. ADD =5,A GENERATE NEW BUF. ADD. COPY A,ME:AD1(X) SET INTO CTRL. BLK. COPY BT:CT1(X),A GET BUF. SIZE SHIFT A,RO,1 DIV. BY 2 COPY A,BT:CT1(X) SET INTO CTRL. BLK. COPY ME:AD2(X),A GET DATA CHAIN BUF. ADD. JEQ A,$+6 IF ZERO, NO DATA CHAIN ADD =5,A GENERATE NEW BUF. ADD. COPY A,ME:AD2(X) SET INTO CTRL. BLK. COPY BT:CT2(X),A GET DATA CHAIN BUF. SIZE SHIFT A,RO,1 DIV. BY 2 COPY A,BT:CT2(X) SET INTO CTRL. BLK. COPY =TBI:B,X GET CHNL. B TBI ADD. COPY =B:CBTX,A GET CHNL. B CTRL. BLK. ADD. IMS TRCTP1 INC. CHNL. COUNT JMP TRC:13 DO CHNL. B IMS TRCTP2 INC. LOOP COUNT JMP TRC:11 GO AGAIN COPY =1%SAD:,A SET ADD. SELECT BIT - ALL ADDS. SBIT RTS:RS,A SET RTS/RS BIT COPY A,BITS STORE BITS COPY =-2,A SET COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =A:CBRX,A GET CHNL. A RX CTRL. BLK. ADD. COPY A,CB2 SAVE ADD. COPY =A:CBTX,X GET CHNL. A TX CTRL. BLK. ADD. COPY =TRBUFF,A GET BUF. ADD. COPY A,TEMP3 SAVE BUF. ADD. COPY =OPC:TX,A GET TX OP CODE TRC:21 JST CBSET BUILD TX CTRL. BLK. COPY TEMP3,A GET TX BUF. ADD. COPY A,ME:AD1(X) STORE INTO CTRL. BLK.  COPY LEN,A GET BUF. LENGTH COPY A,BT:CT1(X) STORE IN TX CTRL. BLK. COPY DCLEN,A GET TX DATA CHAIN LENGTH JEQ A,$+4 IF ZERO, L NO DATA CHAIN COPY A,BT:CT2(X) STORE IN TX CTRL. BLK. COPY TEMP3,A GET BUF. ADD. ADD =32,A GENERATE DATA CHAIN BUF. LENGTH COPY A,ME:AD2(X) STORE IN TX CTRL. BLK. COPY CH:OPC(X),A GET CHNL./OPC AND =:80,A MASK FOR CHANL. ONLY OR =OPC:RX,A 'OR' IN RX OPCODE COPY CB2,X GET RX CTRL. BLK. ADD. JST CBSET BUILD RX CTRL. BLK. COPY TEMP3,A GET TX BUF. ADD. ADD =128,A GENERATE RX BUF. ADD. COPY A,ME:AD1(X) STORE IN RX CTRL. BLK. COPY LEN,A GET BUF. LENGTH COPY A,BT:CT1(X) STORE IN RX CTRL. BLK. COPY DCLEN,A GET RX DATA CHAIN LENGTH JEQ A,$+4 IF 0, NO DATA CHAIN COPY A,BT:CT2(X) STORE IN RX DATA CHAIN BUF. COPY TEMP3,A GET TX BUF. ADD. ADD =160,A GENERATE RX DATA CHAIN BUF. COPY A,ME:AD2(X) STORE IN RX CTRL BLK. ADD. COPY =B:CBRX,A GET CHNL. B RX CTRL. BLK. ADD. COPY A,CB2 SAVE ADD. COPY =B:CBTX,X GET CHNL. B TX CTRL. BLK. ADD. COPY =TRBUFF+64,A GET TX BUF. ADD. COPY A,TEMP3 SAVE BUF. ADD. COPY =1%CHA:;OPC:TX,A GET TX OPCODE CHNL. B IMS TRCTP1 INC. LOOP COUNT JMP TRC:21 DO CHNL. B COPY =-3,A SET LOOP COUNT TO 3 TIMES COPY A,TRCTP2 STORE COUNT COPY =:F8,A SET CHNL. ADD. TO DEFAULT * TRC:22 COPY A,CHADD STORE CHNL. ADD. COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT COPY INZSUB,X GET INITZ. SUB. ADD. JST 0(X) INITIALIZE JMP TRC:12 'SCC INT. TIMED OUT' COPY =:E100,A EXPECTED STATUS COPY A,TXEXP STORE IT COPY =:C100,A EXPECTED STATUS COPY A,RXEXP STORE IT JST TRR0:C DO TX/RX I/O JMP TRC:12 'SCC INT. TIMED OUT' COPY =-2,A SET LOOP COUNT TO 2 TIMES COPY A,TRCTP1 STORE COUNT COPY =TBI:A,A GET CHNL. A TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =A:CBTX,A GET CHNL. A TX CTRL. BLK. ADD. COPY =A:CBRX,X GET CHNL. A RX CTRL. BLK. ADD. * TRC:23 COPY A,TX:CB SET TX CTRL. BLK. ADD. FOR 'BUFFCM' COPY X,RX:CB SET RX CTRL. BLK. ADD. FOR 'BUFFCM' JST BUFFCM DO BUFFER COMPARE JST ERROR IF ERR., DISPLAY IT COPY =TBI:B,A GET CHNL. B TBI ADD. COPY A,TB:AD SET TBI ADD. FOR 'ERROR' COPY =B:CBTX,A GET CHNL. B TX CTRL. BLK. ADD. COPY =B:CBRX,X GET CHNL. B RX CTRL. BLK. ADD. IMS TRCTP1 INC. LOOP COUNT JMP TRC:23 DO CHNL. B COPY =:8100,A EXPECTED STATUS COPY A,INEXP STORE IT JST NOP0:C DO NOPS JMP TRC:12 'SCC INT. TIMED OUT' COPY =-2,A SET LOOP COUNT TO 2 COPY A,TRCTP1 STORE COUNT COPY =TBI:A,X GET CHNL. A TBI ADD. COPY =A:CBIN,A GET CHNL. A CTRL. BLK. ADD. JMP TRC:24 CONT. * LPOOL TITL * * TX AND RX TEST (TESTS C,D) CONT. * TRC:24 COPY X,TB:AD SET TBI ADD. FOR 'ERROR' COPY A,CB1 SET CTRL. BLK. ADD. FOR 'ERROR' COPY TB:INS(X),A GET IN STATUS TBIT DSR:DM,A DSR/DM BIT SHOUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICARTOSMA282112410190940821124101909 821124101909' @F07601 VOLSYNCH COMM CONTROLLER TEST PROGRAM - SOURCE